[
  {
    "path": ".editorconfig",
    "content": "# EditorConfig helps ensure that files are opened in editors with the correct\n# settings, regardless of the editor or platform. See http://editorconfig.org.\n\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\n\n[Makefile.am]\nindent_style = tab\n\n[*.bat]\nend_of_line = crlf\n\n[testdata/*]\ninsert_final_newline = false\ntrim_trailing_whitespace = false\n\n[testdata/test{input,output}{1,2,3,3A,3B,3C,6,28,29}]\ncharset = latin1\n"
  },
  {
    "path": ".gitattributes",
    "content": "testdata/*        -text\r\nmaint/manifest-*  -text\r\nmaint/ucptestdata -text\r\n*.sh              text eol=lf\r\npcre2-config.in   text eol=lf\r\nRunTest           text eol=lf\r\nRunGrepTest       text eol=lf\r\n"
  },
  {
    "path": ".github/codecov.yml",
    "content": "codecov:\n  strict_yaml_branch: default\n  require_ci_to_pass: false\n  notify:\n    wait_for_ci: false\n    notify_error: true\n\ncoverage:\n  range: 75..90\n  round: nearest\n  precision: 2\n\n  status:\n    project: false\n\n    patch:\n      default:\n        target: 0%\n\ngithub_checks:\n  annotations: false\n\ncomment: false\n  # layout: \"condensed_header, condensed_files, condensed_footer\"\n  # hide_project_coverage: true\n  # require_head: true\n  # require_base: true\n  # require_changes: \"coverage_drop OR uncovered_patch\"\n\ncomponent_management:\n  individual_components:\n    - component_id: library\n      name: \"Core library\"\n      paths:\n        - '!src/((pcre2test|pcre2grep|pcre2_jit_test|pcre2posix_test|pcre2_printint)\\.c|pcre2test_inc\\.h)'\n      statuses:\n        - type: project\n          target: auto\n          threshold: 0.5%\n\n    - component_id: test_binaries\n      name: \"Test binaries\"\n      paths:\n        - 'src/((pcre2test|pcre2grep|pcre2_jit_test|pcre2posix_test|pcre2_printint)\\.c|pcre2test_inc\\.h)'\n      statuses:\n        - type: project\n          target: auto\n          threshold: 2%\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: github-actions\n    directory: /\n    schedule:\n      interval: monthly\n    groups:\n      minor-and-patch:\n        update-types:\n          - \"minor\"\n          - \"patch\"\n"
  },
  {
    "path": ".github/scripts/merge_sarif.py",
    "content": "#! /usr/bin/env python3\n\n# The purpose of this file is to adapt the output from\n# Clang's static analyzer into a format suitable for GitHub\n# Actions. The problem is that Clang outputs a separate \"run\"\n# per file in its SARIF output, but GitHub requires a single\n# run per tool (Clang is wrong here).\n\nimport sys\nimport json\n\nif len(sys.argv) < 2:\n    print(\"Usage: munge-sarif.py INPUT\", file=sys.stderr)\n    sys.exit(1)\n\ndata = None\nwith open(sys.argv[1], 'rb') as f:\n    data = json.load(f)\n\n# Arbitrarily pick the first run as the one from which to copy all the properties\nbase_run = data['runs'][0]\n\n# We don't need these, GitHub ignores them\nbase_run['artifacts'] = []\n\n# Concatenate results\nfor r in data['runs'][1:]:\n    base_run['results'].extend(r['results'])\n\ndata['runs'] = [base_run]\n\ndef fix_region(region):\n  startLine = region.get('startLine', None)\n  startColumn = region.get('startColumn', 1)\n  endLine = region.get('endLine', None)\n  endColumn = region.get('endColumn', None)\n  if startLine is None:\n    raise ValueError(\"Region must have startLine\")\n  if endLine is not None and endLine < startLine:\n    region['endLine'] = startLine\n    del region['endColumn']\n    endLine = startLine\n    endColumn = None\n  if endColumn is not None and (endLine == startLine or endLine is None) and endColumn < startColumn:\n    region['endColumn'] = startColumn\n    endColumn = startColumn\n\n# Recursively scan the data dictionary, and apply the fix_region() function\n# to all \"region\":Region key-value pairs.\ndef fix_regions(data):\n    if isinstance(data, dict):\n        if 'region' in data:\n            fix_region(data['region'])\n        for key, value in data.items():\n            fix_regions(value)\n    elif isinstance(data, list):\n        for item in data:\n            fix_regions(item)\n\nfix_regions(data)\n\nwith open(sys.argv[1], 'w') as f:\n    json.dump(data, f, indent=2)"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "name: Build\non:\n  workflow_dispatch:\n    inputs:\n      job_id:\n        type: choice\n        description: Specific job to run\n        default: all\n        required: true\n        options:\n        - all\n        - linux\n        - alpine\n        - macos\n        - windows\n        - freebsd\n        - openbsd\n        - solaris\n        - zos\n        - distcheck\n        - coverage\n  push:\n    branches: [ main, \"release/**\" ]\n  pull_request:\n    branches: [ main ]\n\npermissions:\n  contents: read\n\nenv:\n  CFLAGS_GCC_STYLE: '-Wall -Wextra -pedantic -Wdeclaration-after-statement -Wshadow -Wno-overlength-strings -Wimplicit-fallthrough'\n  CFLAGS_MSVC: '/W3'\n  CFLAGS_SOLARIS_CC: '-errtags=yes -erroff=E_STATEMENT_NOT_REACHED'\n  CMAKE_FLAGS: '-Wdev -Werror=dev -Wdeprecated -Werror=deprecated --warn-uninitialized'\n\njobs:\n  linux:\n    name: Linux\n    runs-on: ubuntu-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'linux')\n    steps:\n      - name: Setup\n        run: |\n          sudo apt-get -qq update\n          sudo apt-get -qq install zlib1g-dev libbz2-dev\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Prepare\n        run: ./autogen.sh\n\n      - name: Configure\n        run: ./configure CFLAGS=\"$CFLAGS_GCC_STYLE\" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-pcre2grep-libz --enable-pcre2grep-libbz2 --enable-Werror\n\n      - name: Build\n        run: make -j3\n\n      - name: Test (main test script)\n        run: ./RunTest\n\n      - name: Test (JIT test program)\n        run: ./pcre2_jit_test\n\n      - name: Test (pcre2grep test script)\n        run: ./RunGrepTest\n\n      - name: Test (pcre2posix program)\n        run: ./pcre2posix_test -v\n\n      - name: Install\n        run: |\n          make install \"DESTDIR=`pwd`/install-dir\"\n          maint/RunManifestTest install-dir maint/manifest-makeinstall-linux\n          maint/RunSymbolTest install-dir/usr/local/lib/ maint/\n\n  alpine:\n    name: alpine\n    runs-on: ubuntu-latest\n    container: alpine\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'alpine')\n    steps:\n      - name: Setup\n        run: apk add --no-cache automake autoconf gcc libtool make musl-dev git zlib zlib-dev bzip2 bzip2-dev\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Prepare\n        run: ./autogen.sh\n\n      - name: Configure\n        run: ./configure CFLAGS=\"$CFLAGS_GCC_STYLE\" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-pcre2grep-libz --enable-pcre2grep-libbz2 --enable-Werror\n\n      - name: Build\n        run: make -j3\n\n      - name: Test (main test script)\n        run: ./RunTest\n\n      - name: Test (JIT test program)\n        run: ./pcre2_jit_test\n\n      - name: Test (pcre2grep test script)\n        run: ./RunGrepTest\n\n      - name: Test (pcre2posix program)\n        run: ./pcre2posix_test -v\n\n      - name: Install\n        run: |\n          make install \"DESTDIR=`pwd`/install-dir\"\n          maint/RunManifestTest install-dir maint/manifest-makeinstall-linux\n          maint/RunSymbolTest install-dir/usr/local/lib/ maint/\n\n  macos:\n    name: macOS universal\n    runs-on: macos-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'macos')\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Configure\n        run: cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DPCRE2_SUPPORT_LIBZ=ON -DPCRE2_SUPPORT_LIBBZ2=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DCMAKE_OSX_ARCHITECTURES='arm64;x86_64' -DCMAKE_C_FLAGS=\"$CFLAGS_GCC_STYLE\" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build\n\n      - name: Build\n        run: cd build && make -j3\n\n      - name: Test\n        run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n\n      - name: Install\n        run: |\n          cd build\n          cmake --install . --prefix install-dir\n          ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-macos\n          ../maint/RunSymbolTest install-dir/lib/ ../maint/\n\n      - name: Test CMake install interface\n        run: |\n          INSTALL_PREFIX=`pwd`/build/install-dir\n          cd maint/cmake-tests/install-interface\n\n          for useStaticLibs in ON OFF; do\n            echo \"== Testing CMake install interface with PCRE2_USE_STATIC_LIBS=$useStaticLibs ==\"\n            rm -rf build\n            cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=\"$INSTALL_PREFIX\" -DPCRE2_USE_STATIC_LIBS=$useStaticLibs -B build\n            (cd build; make)\n            ./build/test_executable\n            otool -L ./build/test_executable\n            if [ $useStaticLibs = ON ]; then\n              (otool -L ./build/test_executable | grep -q \"pcre2\") && (echo \"Error: PCRE2 found in otool output\" && exit 1)\n            else\n              # Test that the shared library is actually linked in\n              (otool -L ./build/test_executable | grep -q \"@rpath/libpcre2-8.0.dylib\") || (echo \"Error: Shared library not linked in\" && exit 1)\n            fi\n          done\n\n      - name: Test CMake build interface\n        run: |\n          BUILD_DIR=`pwd`\n          cp -rp maint/cmake-tests/build-interface ../cmake-tests-build-interface\n          cd ../cmake-tests-build-interface\n          ln -s \"$BUILD_DIR\" pcre2\n\n          for buildLibs in \"ON;OFF\" \"OFF;ON\"; do\n            static=`echo $buildLibs | cut -d';' -f1`\n            shared=`echo $buildLibs | cut -d';' -f2`\n            echo \"== Testing CMake build interface with BUILD_STATIC_LIBS=$static and BUILD_SHARED_LIBS=$shared ==\"\n            rm -rf build\n            cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Debug -DBUILD_STATIC_LIBS=$static -DBUILD_SHARED_LIBS=$shared -B build\n            (cd build; make)\n            ./build/test_executable\n            otool -L ./build/test_executable\n            if [ $static = ON ]; then\n              (otool -L ./build/test_executable | grep -q \"pcre2\") && (echo \"Error: PCRE2 found in ldd output\" && exit 1)\n            else\n              # Test that the shared library is actually linked in\n              (otool -L ./build/test_executable | grep -q \"@rpath/libpcre2-8.0.dylib\") || (echo \"Error: Shared library not linked in\" && exit 1)\n            fi\n          done\n\n  windows:\n    name: Windows\n    runs-on: windows-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'windows')\n    strategy:\n      fail-fast: false\n      matrix:\n        arch: [\"Win32\", \"x64\"]\n    steps:\n      - name: Setup\n        run: |\n          # GitHub Actions Windows images ship with Git for Windows, which is great,\n          # but it also pollutes the PATH with a lot of Unix tools which we don't\n          # want to require as build dependencies. This filters out the Unix tools.\n          # The GitHub images still include an absolute ton of junk in the PATH,\n          # but it seems to be rare for unintended dependencies to be added to our\n          # build scripts, so we can live with it for now.\n          $PATCHED_PATH = ($env:PATH -split ';' | Where-Object { $_ -notmatch 'C:\\\\Program Files\\\\Git\\\\usr\\\\bin|C:\\\\Program Files\\\\Git\\\\mingw64\\\\bin' }) -join ';'\n          # We can't seem to use $GITHUB_PATH here because that only allows\n          # appending to the PATH, not replacing it.\n          echo \"PATH=$PATCHED_PATH\" >> \"$env:GITHUB_ENV\"\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Configure\n        run: |\n          echo \"PATH=$env:PATH\"\n          cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DCMAKE_C_FLAGS=\"$CFLAGS_MSVC\" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -B build -A ${{ matrix.arch }}\n\n      - name: Build\n        run: cmake --build build --config Release\n\n      - name: Test\n        run: cd build && ctest -C Release -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n\n      - name: Install\n        run: |\n          cd build\n          cmake --install . --config Release --prefix install-dir\n          ../maint/RunManifestTest.ps1 install-dir ../maint/manifest-cmakeinstall-windows\n          ../maint/RunSymbolTest.ps1 install-dir/bin ../maint/\n\n      - name: Test CMake install interface\n        run: |\n          $INSTALL_PREFIX = (pwd).Path + \"\\build\\install-dir\"\n          cd maint/cmake-tests/install-interface\n\n          $vswhere = \"C:\\Program Files (x86)\\Microsoft Visual Studio\\Installer\\vswhere.exe\"\n          $dumpbin = & $vswhere -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -find VC\\Tools\\MSVC\\*\\bin\\Hostx64\\x64\\dumpbin.exe | Select-Object -First 1\n\n          foreach ($useStaticLibs in @(\"ON\", \"OFF\")) {\n            echo \"== Testing CMake install interface with PCRE2_USE_STATIC_LIBS=$useStaticLibs ==\"\n            if (Test-Path build) { rm -Recurse -Force build }\n            cmake $CMAKE_FLAGS \"-DCMAKE_PREFIX_PATH=$INSTALL_PREFIX\" \"-DPCRE2_USE_STATIC_LIBS=$useStaticLibs\" -B build -A ${{ matrix.arch }}\n            cmake --build build --config Release\n            ./build/Release/test_executable.exe\n            & $dumpbin /dependents ./build/Release/test_executable.exe\n            if ($useStaticLibs -eq \"ON\") {\n                if ((& $dumpbin /dependents ./build/Release/test_executable.exe | Out-String).Contains(\"pcre2\")) {\n                  Write-Error \"Error: PCRE2 found in dumpbin output\"\n                  exit 1\n                }\n            } else {\n              # Test that the shared library is actually linked in\n              if (-not ((& $dumpbin /dependents ./build/Release/test_executable.exe | Out-String).Contains(\"pcre2-8.dll\"))) {\n                Write-Error \"Error: Shared library not linked in\"\n                exit 1\n              }\n            }\n          }\n\n      - name: Test CMake build interface\n        run: |\n          $BUILD_DIR = (pwd).Path\n          cp -Recurse -Path maint/cmake-tests/build-interface ../cmake-tests-build-interface\n          cd ../cmake-tests-build-interface\n          New-Item -ItemType SymbolicLink -Path \"pcre2\" -Target \"$BUILD_DIR\"\n\n          $vswhere = \"C:\\Program Files (x86)\\Microsoft Visual Studio\\Installer\\vswhere.exe\"\n          $dumpbin = & $vswhere -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -find VC\\Tools\\MSVC\\*\\bin\\Hostx64\\x64\\dumpbin.exe | Select-Object -First 1\n\n          foreach ($buildLibs in @(@{static=\"ON\"; shared=\"OFF\"}, @{static=\"OFF\"; shared=\"ON\"})) {\n            echo \"== Testing CMake build interface with BUILD_STATIC_LIBS=$($buildLibs.static) ==\"\n            if (Test-Path build) { rm -Recurse -Force build }\n            cmake $CMAKE_FLAGS \"-DBUILD_STATIC_LIBS=$($buildLibs.static)\" \"-DBUILD_SHARED_LIBS=$($buildLibs.shared)\" -B build -A ${{ matrix.arch }}\n            cmake --build build --config Debug\n            ./build/Debug/test_executable.exe\n            & $dumpbin /dependents ./build/Debug/test_executable.exe\n            if ($buildLibs.static -eq \"ON\") {\n                if ((& $dumpbin /dependents ./build/Debug/test_executable.exe | Out-String).Contains(\"pcre2\")) {\n                  Write-Error \"Error: PCRE2 found in dumpbin output\"\n                  exit 1\n                }\n            } else {\n              # Test that the shared library is actually linked in\n              if (-not ((& $dumpbin /dependents ./build/Debug/test_executable.exe | Out-String).Contains(\"pcre2-8d.dll\"))) {\n                Write-Error \"Error: Shared library not linked in\"\n                exit 1\n              }\n            }\n          }\n\n  freebsd:\n    name: FreeBSD\n    runs-on: ubuntu-latest\n    if: |\n      (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'freebsd')) ||\n      github.event_name == 'push'\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Prepare\n        run: ./autogen.sh\n\n      - name: Build & test\n        uses: vmactions/freebsd-vm@d1e65811565151536c0c894fff74f06351ed26e6 # v1.4.5\n        with:\n          envs: 'CFLAGS_GCC_STYLE CMAKE_FLAGS'\n          usesh: true\n          prepare: |\n            set -e\n            pkg install -y cmake\n\n          run: |\n            set -e\n\n            cp -rp . ../build-autoconf\n            cp -rp . ../build-cmake\n\n            echo \"== Autoconf ==\"\n            cd ../build-autoconf\n\n            ./configure CFLAGS=\"$CFLAGS_GCC_STYLE\" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-Werror\n            make -j3\n            (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo \"== $i ==\"; cat $i; done; exit $rc)\n\n            make install \"DESTDIR=`pwd`/install-dir\"\n            maint/RunManifestTest install-dir maint/manifest-makeinstall-freebsd\n            maint/RunSymbolTest install-dir/usr/local/lib/ maint/\n\n            echo \"== CMake ==\"\n            cd ../build-cmake\n\n            cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS=\"$CFLAGS_GCC_STYLE\" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build\n            cd build\n            make -j3\n            ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n            cmake --install . --prefix install-dir\n            ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-freebsd\n            ../maint/RunSymbolTest install-dir/lib/ ../maint/\n\n  openbsd:\n    name: OpenBSD\n    runs-on: ubuntu-latest\n    if: |\n      (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'openbsd')) ||\n      github.event_name == 'push'\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Prepare\n        run: ./autogen.sh\n\n      - name: Build & test\n        uses: vmactions/openbsd-vm@d7d892b7b9ba97ed2747b0fc201be65037d64c3e # v1.4.0\n        with:\n          envs: 'CFLAGS_GCC_STYLE CMAKE_FLAGS'\n          usesh: true\n          prepare: |\n            set -e\n            pkg_add cmake\n\n          run: |\n            set -e\n\n            export MALLOC_OPTIONS=\"USRJGFC>>\"\n            EXTRA_CFLAGS=\"-DSLJIT_WX_EXECUTABLE_ALLOCATOR\"\n\n            cp -rp . ../build-autoconf\n            cp -rp . ../build-cmake\n\n            echo \"== Autoconf ==\"\n            cd ../build-autoconf\n\n            ./configure CFLAGS=\"$CFLAGS_GCC_STYLE $EXTRA_CFLAGS\" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-Werror\n            make -j3\n            (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo \"== $i ==\"; cat $i; done; exit $rc)\n\n            make install \"DESTDIR=`pwd`/install-dir\"\n            # I don't really know enough about OpenBSD to say whether the unusually-numbered .so files\n            # with no symlinks are correct or not.\n            # maint/RunManifestTest install-dir maint/manifest-makeinstall-openbsd\n            # maint/RunSymbolTest install-dir/usr/local/lib/ maint/\n\n            echo \"== CMake ==\"\n            cd ../build-cmake\n\n            cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS=\"$CFLAGS_GCC_STYLE $EXTRA_CFLAGS\" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build\n            cd build\n            make -j3\n            ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n            cmake --install . --prefix install-dir\n            # ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-openbsd\n            # ../maint/RunSymbolTest install-dir/lib/ ../maint/\n\n  solaris:\n    name: Solaris\n    runs-on: ubuntu-latest\n    if: |\n      (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'solaris')) ||\n      github.event_name == 'push'\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Transfer Oracle Studio certificates\n        env:\n          PKG_ORACLE_COM_CERTIFICATE_PEM: ${{ secrets.PKG_ORACLE_COM_CERTIFICATE_PEM }}\n          PKG_ORACLE_COM_KEY_PEM: ${{ secrets.PKG_ORACLE_COM_KEY_PEM }}\n        run: |\n          printenv PKG_ORACLE_COM_CERTIFICATE_PEM > pkg.oracle.com.certificate.pem\n          printenv PKG_ORACLE_COM_KEY_PEM > pkg.oracle.com.key.pem\n\n      - name: Prepare\n        run: ./autogen.sh\n\n      - name: Build & test\n        uses: vmactions/solaris-vm@c20562b2c69737b06be9e828915761703e487373 # v1.3.3\n        with:\n          envs: 'CFLAGS_SOLARIS_CC CMAKE_FLAGS'\n          usesh: true\n          # Seriously! Solaris is the only OS to actually ship without a C\n          # compiler, and not even to provide a simple download to get one!\n          # You have to actually register with Oracle to get an X.509\n          # certificate before you can even download their compiler. Whatever.\n          prepare: |\n            set -e\n            cp \"$GITHUB_WORKSPACE/pkg.oracle.com.key.pem\" /root/pkg.oracle.com.key.pem\n            cp \"$GITHUB_WORKSPACE/pkg.oracle.com.certificate.pem\" /root/pkg.oracle.com.certificate.pem\n            sudo pkg set-publisher \\\n              -k /root/pkg.oracle.com.key.pem \\\n              -c /root/pkg.oracle.com.certificate.pem \\\n              -G \"*\" -g https://pkg.oracle.com/solarisstudio/release solarisstudio\n            pkg install developer/build/make developer/build/cmake system/header\n            pkg install --accept developerstudio-126/cc\n\n          run: |\n            set -e\n            PATH=/opt/developerstudio12.6/bin:\"$PATH\"\n            export PATH\n\n            cp -rp . ../build-autoconf-32\n            cp -rp . ../build-autoconf-64\n            cp -rp . ../build-cmake-64\n\n            echo \"== Autoconf, 32-bit ==\"\n            cd ../build-autoconf-32\n\n            ./configure CC=\"cc -m32\" CFLAGS=\"$CFLAGS_SOLARIS_CC\" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-errwarn\n            make\n            (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo \"== $i ==\"; cat $i; done; exit $rc)\n\n            make install \"DESTDIR=`pwd`/install-dir\"\n            maint/RunManifestTest install-dir maint/manifest-makeinstall-solaris\n            maint/RunSymbolTest install-dir/usr/local/lib/ maint/\n\n            echo \"== Autoconf, 64-bit ==\"\n            cd ../build-autoconf-64\n\n            ./configure CC=\"cc -m64\" CFLAGS=\"$CFLAGS_SOLARIS_CC\" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-errwarn\n            make\n            (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo \"== $i ==\"; cat $i; done; exit $rc)\n\n            make install \"DESTDIR=`pwd`/install-dir\"\n            maint/RunManifestTest install-dir maint/manifest-makeinstall-solaris\n            maint/RunSymbolTest install-dir/usr/local/lib/ maint/\n\n            echo \"== CMake, 64-bit ==\"\n            cd ../build-cmake-64\n\n            CC=\"cc -m64\" cmake $CMAKE_FLAGS -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS=\"$CFLAGS_SOLARIS_CC\" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build\n            cd build\n            make\n            ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n            cmake --install . --prefix install-dir\n            ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-solaris\n            ../maint/RunSymbolTest install-dir/lib/ ../maint/\n\n  zos:\n    name: z/OS\n    runs-on: ubuntu-latest\n    # No longer running on push events, due to flaky z/OS runner\n    if: |\n      (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'zos'))\n    concurrency:\n      group: zos-ssh-build\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Prepare\n        run: ./autogen.sh\n\n      - name: Build & test\n        env:\n          ZOS_HOST: ${{ secrets.ZOS_HOST }}\n          ZOS_PORT: ${{ secrets.ZOS_PORT }}\n          ZOS_PRIVATE_KEY: ${{ secrets.ZOS_PRIVATE_KEY }}\n          ZOS_KNOWN_HOSTS: ${{ secrets.ZOS_KNOWN_HOSTS }}\n        run: |\n          (umask 0077 && printenv ZOS_PRIVATE_KEY > id_rsa_zos)\n          mkdir -p ~/.ssh\n          printenv ZOS_KNOWN_HOSTS > ~/.ssh/known_hosts\n\n          tar czf ../pcre2-build.tar.gz --exclude=.git .\n          mv ../pcre2-build.tar.gz .\n\n          scp -i id_rsa_zos -P \"$ZOS_PORT\" pcre2-build.tar.gz \"$ZOS_HOST:/data/\"\n          ssh -i id_rsa_zos -p \"$ZOS_PORT\" \"$ZOS_HOST\" /data/zopen/usr/local/bin/bash -c \\\n            'export _BPXK_AUTOCVT=ON;\n            export _CEE_RUNOPTS=\"FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)\";\n            export _TAG_REDIR_ERR=txt;\n            export _TAG_REDIR_IN=txt;\n            export _TAG_REDIR_OUT=txt;\n            export PATH=\"/data/zopen/usr/local/bin:/data/zopen/usr/bin:/data/zopen/bin:/data/zopen/boot:/bin:/usr/lpp/IBM/cnw/v2r1/openxl/bin\";\n            . /data/zopen/etc/zopen-config;\n            set -e;\n            set -x;\n            cd /data;\n\n            echo \"== Autoconf, XLC compiler ==\";\n            rm -rf pcre2-build;\n            mkdir pcre2-build;\n            gtar xzf pcre2-build.tar.gz -C pcre2-build;\n            cd pcre2-build;\n            chtag -R -tc ISO8859-1 .;\n            MAKE=gmake CC=xlc ./configure --enable-ebcdic --disable-unicode;\n            gmake;\n            (gmake check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo \"== $i ==\"; cat $i; done; exit $rc);\n\n            echo \"== CMake, IBM-Clang -m64 compiler ==\";\n            cd ..;\n            rm -rf pcre2-build;\n            mkdir pcre2-build;\n            gtar xzf pcre2-build.tar.gz -C pcre2-build;\n            cd pcre2-build;\n            chtag -R -tc ISO8859-1 .;\n            cmake $CMAKE_FLAGS -G Ninja -DPCRE2_EBCDIC=ON -DPCRE2_SUPPORT_UNICODE=OFF -DCMAKE_C_COMPILER=ibm-clang -DCMAKE_C_FLAGS=\"-m64 $CFLAGS_GCC_STYLE\" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build\n            cd build;\n            ninja;\n            ctest -j3 --output-on-failure; && (cat ./Testing/Temporary/LastTest.log || true)\n            '\n\n  distcheck:\n    name: Build & verify distribution\n    runs-on: ubuntu-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'distcheck')\n    permissions:\n      id-token: write # Needed to make calls to the Sigstore service\n      attestations: write # Needed to write the attestation to GitHub's database\n      artifact-metadata: write # As detailed in the action documentation\n      contents: read\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Prepare\n        run: |\n          ./autogen.sh\n\n          # Workaround for incorrect filesystem permissions on /usr/share/aclocal, which\n          # causes the m4 macros to be copied with incorrect permissions.\n          # https://github.com/actions/runner-images/issues/11212\n          chmod u=rw,go=r m4/*.m4\n\n      - name: Configure\n        run: ./configure\n\n      - name: Distcheck\n        run: make distcheck -j3\n\n      - name: Manifest\n        run: |\n          mkdir tarball-dir\n          tar -C tarball-dir -xzf pcre2-*.tar.gz\n          # Budge the directory, so we don't bake the version number into the\n          # `manifest-tarball` file:\n          mv tarball-dir/pcre2-* tarball-dir/pcre2-SNAPSHOT\n          maint/RunManifestTest tarball-dir maint/manifest-tarball\n\n      - name: Upload to GitHub artifacts\n        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1\n        with:\n          name: \"Distribution release\"\n          path: |\n            pcre2-*.tar.bz2\n            pcre2-*.tar.gz\n            pcre2-*.zip\n          if-no-files-found: error\n\n      - name: Attest\n        uses: actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26 # v4.1.0\n        if: |\n          github.event_name != 'pull_request' &&\n          (startsWith(github.ref, 'refs/heads/release/') ||\n           startsWith(github.ref, 'refs/tags/pcre2-'))\n        with:\n          subject-path: 'pcre2-*.tar.bz2, pcre2-*.tar.gz, pcre2-*.zip'\n\n  coverage:\n    name: Code coverage\n    runs-on: ubuntu-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'coverage')\n    steps:\n      - name: Setup\n        run: |\n          sudo apt-get -qq update\n          sudo apt-get -qq install zlib1g-dev libbz2-dev libedit-dev lcov\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Configure\n        # We use DEBUG=OFF here in order to suppress the coverage misses due to\n        # assertions, which obviously always pass.\n        run: CC=\"clang -fprofile-instr-generate -fcoverage-mapping\" cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Debug -DPCRE2_DEBUG=OFF -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DPCRE2_SUPPORT_LIBZ=ON -DPCRE2_SUPPORT_LIBBZ2=ON -DPCRE2_SUPPORT_LIBEDIT=ON -DPCRE2_SUPPORT_LIBREADLINE=OFF -B build\n\n      - name: Build\n        run: cd build && make -j3\n\n      - name: Test\n        run: |\n          cd build\n          ../maint/RunCoverage\n\n      - name: Upload report to GitHub artifacts\n        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1\n        with:\n          name: \"Coverage report\"\n          path: './build/coverage-html'\n          if-no-files-found: error\n\n      - name: Upload report to Codecov\n        uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0\n        with:\n          token: ${{ secrets.CODECOV_TOKEN }}\n          fail_ci_if_error: true\n          disable_search: true\n          files: ./build/coverage-lcov.info\n"
  },
  {
    "path": ".github/workflows/cifuzz.yml",
    "content": "name: CIFuzz\non:\n  workflow_dispatch:\n  pull_request:\n    branches: [ main ]\n\npermissions:\n  contents: read\n\njobs:\n  Fuzzing:\n    runs-on: ubuntu-latest\n    steps:\n    - name: Build Fuzzers\n      id: build\n      uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@3d38acd485bc848e33396e7523b9a4f2aff9027e # master\n      with:\n        oss-fuzz-project-name: 'pcre2'\n        dry-run: false\n    - name: Run Fuzzers\n      uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@3d38acd485bc848e33396e7523b9a4f2aff9027e # master\n      with:\n        oss-fuzz-project-name: 'pcre2'\n        fuzz-seconds: 300\n        dry-run: false\n    - name: Upload Crash\n      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1\n      if: failure() && steps.build.outcome == 'success'\n      with:\n        name: artifacts\n        path: ./out/artifacts\n"
  },
  {
    "path": ".github/workflows/clang-analyzer.yml",
    "content": "name: Clang Static Analyzer\non:\n  workflow_dispatch:\n  push:\n    branches: [ main, \"release/**\" ]\n  pull_request:\n    branches: [ main ]\n\npermissions:\n  contents: read\n\njobs:\n  Analyze:\n    runs-on: ubuntu-latest\n\n    permissions:\n      # Needed to upload the results to code-scanning dashboard.\n      security-events: write\n      contents: read\n\n    steps:\n      - name: Setup\n        run: |\n          echo \"set man-db/auto-update false\" | sudo debconf-communicate && sudo dpkg-reconfigure man-db\n          sudo apt-get -qq update\n          sudo apt-get -qq install -y ninja-build clang-tools\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Configure & Build\n        run: |\n          LLVM_VER=`clang --version | head -n1 | grep -Eo '[0-9]+\\.[0-9]+\\.[0-9]+' | cut -d. -f1`\n          echo \"Using LLVM version $LLVM_VER\"\n\n          mkdir build\n          cd build\n\n          scan-build-py-$LLVM_VER cmake -G Ninja -DPCRE2_SUPPORT_JIT=ON -DCMAKE_BUILD_TYPE=Debug ..\n          scan-build-py-$LLVM_VER -o clang-sarif-root/ --sarif-html ninja\n          rm clang-sarif-root/*/result-*.sarif\n          mv clang-sarif-root/* ../clang-report\n\n          ../.github/scripts/merge_sarif.py ../clang-report/results-merged.sarif\n\n      # Upload the browsable HTML report as an artifact.\n      - name: Upload report\n        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1\n        with:\n          name: \"Clang Static Analyzer report\"\n          path: './clang-report'\n\n      # Upload the results to GitHub's code scanning dashboard.\n      - name: \"Upload to code-scanning\"\n        uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3.29.5\n        with:\n          sarif_file: ./clang-report/results-merged.sarif\n          category: clang-analyzer\n"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "content": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# You may wish to alter this file to override the set of languages analyzed,\n# or to provide custom queries or build logic.\n#\n# ******** NOTE ********\n# We have attempted to detect the languages in your repository. Please check\n# the `language` matrix defined below to confirm you have the correct set of\n# supported CodeQL languages.\n#\nname: \"CodeQL\"\n\non:\n  push:\n    branches: [ main, \"release/**\" ]\n  pull_request:\n    # The branches below must be a subset of the branches above\n    branches: [ main ]\n  schedule:\n    - cron: '27 6 * * 4'\n\npermissions:\n  contents: read\n\njobs:\n  analyze:\n    name: Analyze\n    runs-on: ubuntu-latest\n\n    permissions:\n      # Needed to upload the results to code-scanning dashboard.\n      security-events: write\n      actions: read\n      contents: read\n\n    strategy:\n      fail-fast: false\n      matrix:\n        language: [ 'cpp' ]\n        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]\n        # Learn more about CodeQL language support at https://git.io/codeql-language-support\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      with:\n        submodules: true\n\n    # Initializes the CodeQL tools for scanning.\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3.29.5\n      with:\n        languages: ${{ matrix.language }}\n        # If you wish to specify custom queries, you can do so here or in a config file.\n        # By default, queries listed here will override any specified in a config file.\n        # Prefix the list here with \"+\" to use these queries and those in the config file.\n        # queries: ./path/to/local/query, your-org/your-repo/queries@main\n\n    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).\n    # If this step fails, then you should remove it and run the build manually (see below)\n    - name: Autobuild\n      uses: github/codeql-action/autobuild@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3.29.5\n\n    # ℹ️ Command-line programs to run using the OS shell.\n    # 📚 https://git.io/JvXDl\n\n    # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines\n    #    and modify them (or add more) to build your code if your project\n    #    uses a compiled language\n\n    #- run: |\n    #   make bootstrap\n    #   make release\n\n    - name: Perform CodeQL Analysis\n      uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3.29.5\n"
  },
  {
    "path": ".github/workflows/dev.yml",
    "content": "name: Dev\non:\n  workflow_dispatch:\n    inputs:\n      job_id:\n        type: choice\n        description: Specific job to run\n        default: all\n        required: true\n        options:\n        - all\n        - canary\n        - dragon\n        - puffin\n        - dodo\n        - passenger\n        - greatawk\n        - wasp\n        - bat\n        - pterodactyl\n        - bigbird\n        - camel\n        - chaffinch\n        - fruitbat\n        - ptarmigan\n        - zebrilus\n        - bee\n  push:\n    branches: [ main, \"release/**\" ]\n  pull_request:\n    branches: [ main ]\n\npermissions:\n  contents: read\n\nenv:\n  CFLAGS_GCC_STYLE: '-Wall -Wextra -pedantic -Wdeclaration-after-statement -Wshadow -Wno-overlength-strings -Wimplicit-fallthrough'\n  CFLAGS_MSVC: '/W3'\n  CMAKE_FLAGS: '-Wdev -Werror=dev -Wdeprecated -Werror=deprecated --warn-uninitialized'\n\njobs:\n\n  canary:\n    # Tests with: Debug & assertions; link-size=4; libedit\n    name: GCC -O0\n    runs-on: ubuntu-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'canary')\n    steps:\n      - name: Setup\n        run: |\n          echo \"set man-db/auto-update false\" | sudo debconf-communicate && sudo dpkg-reconfigure man-db\n          sudo apt-get -qq update\n          sudo apt-get -qq install -y libedit-dev\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Prepare\n        run: ./autogen.sh\n\n      - name: Configure\n        run: ./configure CC='gcc -fsanitize=undefined,address -fsanitize-undefined-trap-on-error' CFLAGS=\"-O0 $CFLAGS_GCC_STYLE\" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug --enable-Werror --enable-pcre2test-libedit --with-link-size=4\n\n      - name: Build\n        run: make -j3\n\n      - name: Test\n        run: (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo \"== $i ==\"; cat $i; done; exit $rc)\n\n  dragon:\n    # Tests with: clang AB/UB; link-size=3. Clang's logo is a dragon.\n    name: Clang\n    runs-on: ubuntu-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'dragon')\n    strategy:\n      fail-fast: false\n      matrix:\n        opt: [\"-O0\", \"-O2\"]\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Prepare\n        run: ./autogen.sh\n\n      - name: Configure\n        run: ./configure CC='clang -fsanitize=undefined,address,integer -fno-sanitize-recover=undefined,integer -fno-sanitize=unsigned-integer-overflow,unsigned-shift-base,function' CFLAGS=\"${{ matrix.opt }} $CFLAGS_GCC_STYLE\" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug --enable-Werror --with-link-size=3\n\n      - name: Build\n        run: make -j3\n\n      - name: Test\n        run: |\n          ulimit -S -s 49152 # Raise stack limit; ASAN with -O0 is very stack-hungry\n          (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo \"== $i ==\"; cat $i; done; exit $rc)\n\n  puffin:\n    # Tests with: GCC, -O3, very latest CMake, libedit\n    name: GCC -O3, CMake\n    runs-on: ubuntu-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'puffin')\n    steps:\n      - name: Setup\n        run: |\n          echo \"set man-db/auto-update false\" | sudo debconf-communicate && sudo dpkg-reconfigure man-db\n          sudo apt-get -qq update\n          sudo apt-get -qq install -y git build-essential cmake zlib1g-dev libbz2-dev libedit-dev ninja-build\n\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Check latest CMake\n        id: get-cmake-ver\n        run: |\n          CMAKE_VER=$(curl -s https://api.github.com/repos/Kitware/CMake/releases/latest | jq -r '.tag_name' | sed 's/^v//')\n          if ! echo \"$CMAKE_VER\" | grep -qE '^[0-9]+\\.[0-9]+\\.[0-9]+$' ; then\n            echo \"Extracted CMake version: '$CMAKE_VER'\" >&2\n            echo \"This does not match the expected version format\" >&2\n            exit 1\n          fi\n          echo \"CMAKE_VER=$CMAKE_VER\" >> $GITHUB_OUTPUT\n          echo \"CMAKE_VER=$CMAKE_VER\" >> $GITHUB_ENV\n          echo \"Latest CMake version is $CMAKE_VER\"\n\n      - name: Cache CMake\n        uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5\n        with:\n          key: cmake-${{ steps.get-cmake-ver.outputs.CMAKE_VER }}-linux-x86_64\n          path: cmake-${{ steps.get-cmake-ver.outputs.CMAKE_VER }}-linux-x86_64.tar.gz\n\n      - name: Install CMake\n        run: |\n          [ -f cmake-${CMAKE_VER}-linux-x86_64.tar.gz ] || curl -L -S -O \"https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-linux-x86_64.tar.gz\"\n          tar -xz -f cmake-${CMAKE_VER}-linux-x86_64.tar.gz -C \"$RUNNER_TEMP\"\n          realpath \"$RUNNER_TEMP/cmake-${CMAKE_VER}-linux-x86_64/bin\" >> \"$GITHUB_PATH\"\n\n      - name: Configure\n        run: |\n          cmake --version | grep \"version ${CMAKE_VER}\" || (echo \"CMake version mismatch\" && exit 1)\n          cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DPCRE2_SUPPORT_LIBEDIT=ON -DPCRE2_SUPPORT_LIBREADLINE=OFF -DCMAKE_C_FLAGS=\"$CFLAGS_GCC_STYLE\" -DCMAKE_POLICY_VERSION_MINIMUM=$CMAKE_VER -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build\n\n      - name: Build\n        run: cd build && make -j3\n\n      - name: Test\n        run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n\n      - name: Install\n        run: |\n          cd build\n          cmake --install . --prefix install-dir\n          ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-linux\n          ../maint/RunSymbolTest install-dir/lib/ ../maint/\n\n      - name: Test CMake install interface\n        run: |\n          INSTALL_PREFIX=`pwd`/build/install-dir\n          cd maint/cmake-tests/install-interface\n\n          for useStaticLibs in ON OFF; do\n            echo \"== Testing CMake install interface with PCRE2_USE_STATIC_LIBS=$useStaticLibs ==\"\n            rm -rf build\n            cmake -GNinja $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=\"$INSTALL_PREFIX\" -DPCRE2_USE_STATIC_LIBS=$useStaticLibs -B build\n            (cd build; ninja)\n            ./build/test_executable\n            ldd ./build/test_executable\n            if [ $useStaticLibs = ON ]; then\n              (ldd ./build/test_executable | grep -q \"pcre2\") && (echo \"Error: PCRE2 found in ldd output\" && exit 1)\n            else\n              # Test that the shared library is actually linked in\n              (ldd ./build/test_executable | grep -q \"$INSTALL_PREFIX/lib/libpcre2-8.so.0\") || (echo \"Error: Shared library not linked in\" && exit 1)\n            fi\n          done\n\n      - name: Test CMake build interface\n        run: |\n          BUILD_DIR=`pwd`\n          cp -rp maint/cmake-tests/build-interface ../cmake-tests-build-interface\n          cd ../cmake-tests-build-interface\n          ln -s \"$BUILD_DIR\" pcre2\n\n          for buildLibs in \"ON;OFF\" \"OFF;ON\"; do\n            static=`echo $buildLibs | cut -d';' -f1`\n            shared=`echo $buildLibs | cut -d';' -f2`\n            echo \"== Testing CMake build interface with BUILD_STATIC_LIBS=$static and BUILD_SHARED_LIBS=$shared ==\"\n            rm -rf build\n            cmake -GNinja $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Debug -DBUILD_STATIC_LIBS=$static -DBUILD_SHARED_LIBS=$shared -B build\n            (cd build; ninja)\n            ./build/test_executable\n            ldd ./build/test_executable\n            if [ $static = ON ]; then\n              (ldd ./build/test_executable | grep -q \"pcre2\") && (echo \"Error: PCRE2 found in ldd output\" && exit 1)\n            else\n              # Test that the shared library is actually linked in\n              (ldd ./build/test_executable | grep -q \"`pwd`/build/pcre2/libpcre2-8.so.0\") || (echo \"Error: Shared library not linked in\" && exit 1)\n            fi\n          done\n\n  dodo:\n    # Tests with: Autoconf on oldest supported Ubuntu (in non-extended support)\n    name: GCC -Os, old Autotools\n    runs-on: ubuntu-latest\n    container: ubuntu:22.04\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'dodo')\n    steps:\n      - name: Setup\n        run: |\n          echo \"set man-db/auto-update false\" | debconf-communicate && dpkg-reconfigure man-db\n          export DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC\n          apt-get -qq update\n          apt-get -qq install -y git build-essential autoconf automake libtool\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Prepare\n        run: ./autogen.sh\n\n      - name: Configure\n        run: ./configure CFLAGS=\"-Os $CFLAGS_GCC_STYLE\" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug --enable-Werror\n\n      - name: Build\n        run: make -j3\n\n      - name: Test\n        run: (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo \"== $i ==\"; cat $i; done; exit $rc)\n\n      - name: Install\n        run: |\n          make install \"DESTDIR=`pwd`/install-dir\"\n          maint/RunManifestTest install-dir maint/manifest-makeinstall-linux\n          maint/RunSymbolTest install-dir/usr/local/lib/ maint/\n\n  passenger:\n    # Tests with: Autoconf on oldest RHEL (in extended support).\n    # That's the absolute limit to how old a Linux version I'll tolerate regular testing on.\n    name: GCC, very old Autotools\n    runs-on: ubuntu-latest\n    container: redhat/ubi8:8.6\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'passenger')\n    steps:\n      - name: Setup\n        run: |\n          yum -q makecache\n          yum -q install -y gcc git make automake autoconf libtool diffutils file glibc-langpack-en\n          yum -q update -y glibc-common\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Prepare\n        run: ./autogen.sh\n\n      - name: Configure\n        run: ./configure CFLAGS=\"-O0 $CFLAGS_GCC_STYLE\" --enable-jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug --enable-Werror\n\n      - name: Build\n        run: make -j3\n\n      - name: Test\n        run: (make check; rc=$?; for i in test-suite.log Run*Test.log pcre2*_test.log; do echo \"== $i ==\"; cat $i; done; exit $rc)\n\n\n      - name: Install\n        run: |\n          make install \"DESTDIR=`pwd`/install-dir\"\n          maint/RunManifestTest install-dir maint/manifest-makeinstall-linux\n          maint/RunSymbolTest install-dir/usr/local/lib/ maint/\n\n  greatawk:\n    # Tests with: GCC, -O2, oldest supported Ubuntu (in non-extended support)\n    name: GCC -O2, old CMake\n    runs-on: ubuntu-latest\n    container: ubuntu:22.04\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'greatawk')\n    steps:\n      - name: Setup\n        run: |\n          echo \"set man-db/auto-update false\" | debconf-communicate && dpkg-reconfigure man-db\n          export DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC\n          apt-get -qq update\n          apt-get -qq install -y git build-essential cmake zlib1g-dev libbz2-dev libreadline-dev\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Configure\n        run: cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS=\"$CFLAGS_GCC_STYLE\" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -B build\n\n      - name: Build\n        run: cd build && make -j3\n\n      - name: Test\n        run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n\n      - name: Install\n        run: |\n          cd build\n          cmake --install . --prefix install-dir\n          ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-linux relwithdebinfo\n          ../maint/RunSymbolTest install-dir/lib/ ../maint/\n\n      - name: Test CMake install interface\n        run: |\n          INSTALL_PREFIX=`pwd`/build/install-dir\n          cd maint/cmake-tests/install-interface\n\n          for useStaticLibs in ON OFF; do\n            echo \"== Testing CMake install interface with PCRE2_USE_STATIC_LIBS=$useStaticLibs ==\"\n            rm -rf build\n            cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH=\"$INSTALL_PREFIX\" -DPCRE2_USE_STATIC_LIBS=$useStaticLibs -B build\n            (cd build; make)\n            ./build/test_executable\n            ldd ./build/test_executable\n            if [ $useStaticLibs = ON ]; then\n              (ldd ./build/test_executable | grep -q \"pcre2\") && (echo \"Error: PCRE2 found in ldd output\" && exit 1)\n            else\n              # Test that the shared library is actually linked in\n              (ldd ./build/test_executable | grep -q \"$INSTALL_PREFIX/lib/libpcre2-8.so.0\") || (echo \"Error: Shared library not linked in\" && exit 1)\n            fi\n          done\n\n      - name: Test CMake build interface\n        run: |\n          BUILD_DIR=`pwd`\n          cp -rp maint/cmake-tests/build-interface ../cmake-tests-build-interface\n          cd ../cmake-tests-build-interface\n          ln -s \"$BUILD_DIR\" pcre2\n\n          for buildLibs in \"ON;OFF\" \"OFF;ON\"; do\n            static=`echo $buildLibs | cut -d';' -f1`\n            shared=`echo $buildLibs | cut -d';' -f2`\n            echo \"== Testing CMake build interface with BUILD_STATIC_LIBS=$static and BUILD_SHARED_LIBS=$shared ==\"\n            rm -rf build\n            cmake $CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Debug -DBUILD_STATIC_LIBS=$static -DBUILD_SHARED_LIBS=$shared -B build\n            (cd build; make)\n            ./build/test_executable\n            ldd ./build/test_executable\n            if [ $static = ON ]; then\n              (ldd ./build/test_executable | grep -q \"pcre2\") && (echo \"Error: PCRE2 found in ldd output\" && exit 1)\n            else\n              # Test that the shared library is actually linked in\n              (ldd ./build/test_executable | grep -q \"`pwd`/build/pcre2/libpcre2-8.so.0\") || (echo \"Error: Shared library not linked in\" && exit 1)\n            fi\n          done\n\n  wasp:\n    # Tests with: French locale; oldest supported CMake; no JIT; -Os; libreadline\n    name: GCC -Os, very old CMake, ninja, no JIT\n    runs-on: ubuntu-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'wasp')\n    env:\n      CMAKE_VER: \"3.15.7\"\n    steps:\n      - name: Setup\n        run: |\n          echo \"set man-db/auto-update false\" | sudo debconf-communicate && sudo dpkg-reconfigure man-db\n          sudo apt-get -qq update\n          sudo apt-get -qq install -y language-pack-fr ninja-build zlib1g-dev libbz2-dev libreadline-dev\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Cache CMake\n        uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5\n        with:\n          key: cmake-${{ env.CMAKE_VER }}-Linux-x86_64\n          path: cmake-${{ env.CMAKE_VER }}-Linux-x86_64.tar.gz\n\n      - name: Install CMake\n        run: |\n          [ -f cmake-${CMAKE_VER}-Linux-x86_64.tar.gz ] || curl -L -S -O \"https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-Linux-x86_64.tar.gz\"\n          tar -xz -f cmake-${CMAKE_VER}-Linux-x86_64.tar.gz -C \"$RUNNER_TEMP\"\n          realpath \"$RUNNER_TEMP/cmake-${CMAKE_VER}-Linux-x86_64/bin\" >> \"$GITHUB_PATH\"\n\n      - name: Configure\n        run: |\n          cmake --version | grep \"version ${CMAKE_VER}\" || (echo \"CMake version mismatch\" && exit 1)\n          CC='clang' cmake $CMAKE_FLAGS -G Ninja -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DPCRE2_SUPPORT_LIBREADLINE=ON -DCMAKE_C_FLAGS=\"$CFLAGS_GCC_STYLE\" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=MinSizeRel -B build\n\n      - name: Build\n        run: ninja -C build\n\n      - name: Test\n        run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n\n      - name: Install\n        run: |\n          cd build\n          cmake --install . --prefix install-dir\n          ../maint/RunManifestTest install-dir ../maint/manifest-cmakeinstall-linux minsizerel\n          ../maint/RunSymbolTest install-dir/lib/ ../maint/\n\n  bat:\n    # Tests with: MSVC 32-bit, and a variety of CMake options. Windows has \"bat\" files.\n    name: Windows (Win32)\n    runs-on: windows-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'bat')\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Configure\n        run: cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DPCRE2GREP_SUPPORT_CALLOUT_FORK=OFF -DPCRE2_DEBUG=ON -DPCRE2_NEWLINE=ANYCRLF -DPCRE2_STATIC_PIC=ON -DPCRE2_SUPPORT_BSR_ANYCRLF=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON -DCMAKE_C_FLAGS=\"$CFLAGS_MSVC\" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -B build -A Win32\n\n      - name: Build\n        run: cmake --build build --config RelWithDebInfo\n\n      - name: Test\n        run: cd build && ctest -C RelWithDebInfo -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n\n  pterodactyl:\n    # Tests with: MSVC 64-bit, Debug, shared libraries\n    name: Windows (x64)\n    runs-on: windows-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'pterodactyl')\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Configure\n        run: cmake $CMAKE_FLAGS -DPCRE2_SUPPORT_JIT=OFF -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DPCRE2_DEBUG=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DCMAKE_C_FLAGS=\"$CFLAGS_MSVC\" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -B build -A x64\n\n      - name: Build\n        run: cmake --build build --config Debug\n\n      - name: Test\n        run: cd build && ctest -C Debug -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n\n  bigbird:\n    # Job to execute ManyConfigTests\n    name: manyconfig\n    runs-on: ubuntu-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'bigbird')\n    steps:\n      - name: Setup\n        run: |\n          echo \"set man-db/auto-update false\" | sudo debconf-communicate && sudo dpkg-reconfigure man-db\n          sudo apt-get -qq update\n          sudo apt-get -qq install -y valgrind\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Run\n        run: |\n          ./autogen.sh\n          ./maint/ManyConfigTests\n\n  camel:\n    # Job to execute RunPerlTest. \"Camel bird\" is another name for an ostrich (and it's Perl's logo).\n    name: perl\n    runs-on: ubuntu-latest\n    container: perl:devel\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'camel')\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: yes\n\n      - name: Test\n        run: |\n          perl -v\n          maint/RunPerlTest\n\n  chaffinch:\n    # Job to verify that the CMake \"unity\" build (single-file / jumbo build) passes.\n    # If this fails, it's usually because two different files define some file-static\n    # functions or macros which collide.\n    name: CMake unity build\n    runs-on: ubuntu-latest\n    if: github.event_name != 'workflow_dispatch' || (inputs.job_id == 'all' || inputs.job_id == 'chaffinch')\n    env:\n      # Disallowing shadowing would be very spammy for unity builds, because the\n      # same variable name can be used in multiple files.\n      CFLAGS_UNITY: \"-Wno-shadow\"\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Configure\n        run: cmake $CMAKE_FLAGS -DCMAKE_UNITY_BUILD=ON -DCMAKE_UNITY_BUILD_BATCH_SIZE=0 -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS=\"$CFLAGS_GCC_STYLE $CFLAGS_UNITY\" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build\n\n      - name: Build\n        run: cd build && make -j3\n\n      - name: Test\n        run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n\n  fruitbat:\n    # Tests with: MSYS2 unix-on-Windows environment\n    name: MSYS2\n    runs-on: windows-latest\n    if: |\n      (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'fruitbat')) ||\n      github.event_name == 'push'\n    strategy:\n      fail-fast: false\n      matrix:\n        # UCRT64 is the new default MSYS2 runtime, which builds native 64-bit\n        # binaries which can then be shipped and run on systems without MSYS2\n        # installed (using MinGW-x64 + the UCRT).\n        # MSYS is the Unix-variant runtime, which builds binaries that have a\n        # dependency on MSYS2 being installed, but those binaries then use a\n        # full emulated Unix environment at runtime.\n        msystem: [\"UCRT64\", \"MSYS\"]\n    steps:\n      - name: Pre-checkout\n        run: git config --global core.autocrlf input\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Setup\n        uses: msys2/setup-msys2@e9898307ac31d1a803454791be09ab9973336e1c # v2.31.1\n        with:\n          msystem: ${{ matrix.msystem }}\n          update: true\n          pacboy: diffutils gcc:p cmake:p ninja:p ${{ matrix.msystem == 'MSYS' && 'libreadline:p' || 'readline:p' }}\n\n      - name: Configure\n        shell: msys2 {0}\n        run: cmake $CMAKE_FLAGS -G Ninja -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS=\"$CFLAGS_GCC_STYLE\" -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_BUILD_TYPE=Release -B build\n\n      - name: Build\n        shell: msys2 {0}\n        run: ninja -C build\n\n      - name: Test\n        shell: msys2 {0}\n        run: cd build && ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n\n  ptarmigan:\n    # Tests with various unusual processor architectures\n    name: Multiarch\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          # S390x is important, because it's basically the only supported big-endian\n          # architecture I can find anywhere. I used to work on SPARC and PPC-be systems\n          # a long time ago, but even Debian has dropped those architectures now, so\n          # it's nice that there's *least one* arch remaining to shake out endian\n          # assumptions.\n          - arch: \"s390x\"\n            distro: ubuntu_latest\n          # Big-iron POWER only (this is not the PowerPC arch used in old Apple Macs)\n          - arch: \"ppc64le\"\n            distro: \"ubuntu_latest\"\n          # A 32-bit Linux build. i386 is mostly gone now, so ARMv7 is all that's left.\n          - arch: \"armv7\"\n            distro: \"ubuntu_latest\"\n          # The only really widely-deployed non-x86 archicture, at least that's likely\n          # to be running PCRE2.\n          - arch: \"aarch64\"\n            distro: \"ubuntu_latest\"\n          # Not used by anyone yet, really, but potentially the \"next big thing\".\n          - arch: \"riscv64\"\n            distro: \"ubuntu_latest\"\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      packages: write # Necessary for uraimo/run-on-arch-action to use GitHub's Docker repository as a cache\n    if: |\n      (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'ptarmigan')) ||\n      github.event_name == 'push'\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Prepare\n        run: ./autogen.sh\n\n      - uses: uraimo/run-on-arch-action@f9b26e3a1a408d5fd530d20c17b9f3f4428ff8d9 # v3.1.0\n        name: Configure, build, and test\n        with:\n          arch: ${{ matrix.arch }}\n          distro: ${{ matrix.distro }}\n\n          # Not required, but speeds up builds by storing container images in\n          # a GitHub package registry.\n          githubToken: ${{ github.token }}\n\n          env: | # YAML, but pipe character is necessary\n            CFLAGS_GCC_STYLE: ${{ env.CFLAGS_GCC_STYLE }}\n            CMAKE_FLAGS: ${{ env.CMAKE_FLAGS }}\n\n          install: |\n            echo \"set man-db/auto-update false\" | debconf-communicate && dpkg-reconfigure man-db\n            apt-get -qq update\n            apt-get -qq install -y gcc cmake ninja-build zlib1g-dev libbz2-dev libreadline-dev\n\n          run: |\n            set -e\n            # TODO: Set -DCMAKE_COMPILE_WARNING_AS_ERROR=ON (there's currently a build failure on S390x)\n            cmake $CMAKE_FLAGS -G Ninja -DPCRE2_SUPPORT_JIT=ON -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DPCRE2_DEBUG=ON -DCMAKE_C_FLAGS=\"$CFLAGS_GCC_STYLE\" -DCMAKE_COMPILE_WARNING_AS_ERROR=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -B build\n            cd build\n            ninja\n            ctest -j3 --output-on-failure && (cat ./Testing/Temporary/LastTest.log || true)\n\n  zebrilus:\n    # Tests with: Zig compiler. A \"zebrilus\" is known as a \"zigzag heron\".\n    name: Zig\n    runs-on: ubuntu-latest\n    if: |\n      (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'zebrilus')) ||\n      github.event_name == 'push'\n    steps:\n      - name: Setup\n        run: |\n          sudo snap install zig --classic --beta\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Build\n        run: zig build -Dsupport_jit\n\n      - name: Test\n        run: |\n          srcdir=`pwd` pcre2test=`pwd`/zig-out/bin/pcre2test ./RunTest -bigstack\n\n  bee:\n    # Tests with: Bazel build system. A bee goes \"buzz buzz buzz(el)\".\n    name: Bazel\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [\"ubuntu-latest\", \"windows-latest\"]\n    runs-on: ${{ matrix.os }}\n    if: |\n      (github.event_name == 'workflow_dispatch' && (inputs.job_id == 'all' || inputs.job_id == 'bee')) ||\n      github.event_name == 'push'\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n\n      - name: Build\n        run: bazelisk build //... --enable_runfiles --incompatible_strict_action_env\n\n      - name: Test\n        run: bazelisk test //... --enable_runfiles --incompatible_strict_action_env --test_output=all\n"
  },
  {
    "path": ".github/workflows/pages.yml",
    "content": "name: Deploy Pages\non:\n  workflow_dispatch:\n  workflow_run:\n    workflows: [ 'Sync' ]\n    types:\n      - completed\n    branches: [ main ]\n  push:\n    branches: [ pages ]\n  pull_request:\n    branches: [ pages ]\n\npermissions:\n  contents: read\n\nconcurrency:\n  group: \"pages\"\n  cancel-in-progress: false\n\njobs:\n  Build:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Setup\n        run: |\n          echo \"set man-db/auto-update false\" | sudo debconf-communicate && sudo dpkg-reconfigure man-db\n          sudo apt-get -qq update\n          sudo apt-get -qq install -y hugo\n\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          ref: pages\n\n      - name: Setup Pages\n        id: pages\n        uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0\n\n      - name: Build with Hugo\n        env:\n          HUGO_BASE_URL: ${{ steps.pages.outputs.base_url }}\n        run: pages/maint/Build.py\n\n      - name: Upload artifact\n        uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0\n        with:\n          path: ./pages/public\n\n  Deploy:\n    needs: Build\n\n    if: github.event_name != 'pull_request' && github.ref == 'refs/heads/pages'\n\n    permissions:\n      pages: write      # to deploy to Pages\n      id-token: write   # to verify the deployment originates from an appropriate source\n\n    environment:\n      name: github-pages\n      url: ${{ steps.deployment.outputs.page_url }}\n\n    runs-on: ubuntu-latest\n    steps:\n      - name: Deploy to GitHub Pages\n        id: deployment\n        uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0\n"
  },
  {
    "path": ".github/workflows/scorecards.yml",
    "content": "name: Scorecards supply-chain security\non:\n  workflow_dispatch:\n  # Only the default branch is supported.\n  branch_protection_rule:\n  schedule:\n    - cron: '23 17 * * 1'\n  push:\n    branches: [ main ]\n\npermissions: read-all\n\njobs:\n  analysis:\n    name: Scorecards analysis\n    runs-on: ubuntu-latest\n\n    permissions:\n      # Needed to upload the results to code-scanning dashboard.\n      security-events: write\n      # Needed to publish the results to Scorecard's service.\n      id-token: write\n      actions: read\n      contents: read\n\n    steps:\n      - name: \"Checkout code\"\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: true\n          persist-credentials: false\n\n      - name: \"Run analysis\"\n        uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # tag=v2.4.3\n        with:\n          results_file: results.sarif\n          results_format: sarif\n          # repo_token: ${{ secrets.GITHUB_TOKEN }}\n          # Publish the results to enable scorecard badges. For more details, see\n          # https://github.com/ossf/scorecard-action#publishing-results.\n          # For private repositories, `publish_results` will automatically be set to `false`,\n          # regardless of the value entered here.\n          publish_results: true\n\n      # Upload the results as artifacts (optional).\n      - name: \"Upload artifact\"\n        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1\n        with:\n          name: SARIF file\n          path: results.sarif\n          retention-days: 5\n\n      # Upload the results to GitHub's code scanning dashboard.\n      - name: \"Upload to code-scanning\"\n        uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3.29.5\n        with:\n          sarif_file: results.sarif\n          category: ossf-scorecard\n"
  },
  {
    "path": ".github/workflows/sync.yml",
    "content": "name: Sync\non:\n  workflow_dispatch:\n  push:\n    branches: [ main, \"release/**\" ]\n  pull_request:\n    branches: [ main ]\n\npermissions:\n  contents: read\n\njobs:\n  sync-autogenerated:\n    # Job to verify that the tasks performed by UpdateAlways have been done. It is\n    # the committer's responsibility (currently) to run UpdateAlways themselves when\n    # making a PR, so that everything is kept in-sync.\n    name: Check autogenerated file freshness\n    runs-on: ubuntu-latest\n    permissions:\n      contents: write\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: false\n          fetch-depth: 0 # Necessary for maint/UpdateAlways\n          fetch-tags: false\n          # Check out the unmerged source branch for `pull_request`-triggered runs;\n          # otherwise use the tip of the branch for `workflow_dispatch` and `pull` triggers.\n          ref: ${{ github.event.pull_request.head.ref || github.ref }}\n          repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}\n\n      - name: UpdateDates\n        if: |\n          github.event_name != 'pull_request' &&\n          (startsWith(github.ref, 'refs/heads/release/') ||\n           startsWith(github.ref, 'refs/tags/pcre2-'))\n        run: maint/UpdateDates.py\n\n      - name: UpdateAlways\n        run: maint/UpdateAlways\n\n      - name: 'Rebuild *.h.generic'\n        run: |\n          ./autogen.sh && ./configure\n\n          # Workaround for incorrect filesystem permissions on /usr/share/aclocal, which\n          # causes the m4 macros to be copied with incorrect permissions.\n          # https://github.com/actions/runner-images/issues/11212\n          chmod u=rw,go=r m4/*.m4\n\n          rm -f src/*.generic\n          make src/config.h.generic src/pcre2.h.generic\n\n      # If we're in a forked repo, it's too onerous to expect contributors to run the\n      # checks locally to keep these files up to date (since the tool versions are very\n      # fussy and brittle).\n      #\n      # However, we still want to run the steps above, to check that the UpdateAlways\n      # process is able to run to completion, since it can pick up errors in the man pages.\n\n      - name: Commit and push, if not in a forked repo\n        if: github.event_name != 'pull_request' || ( ! github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' )\n        run: |\n          if [ -n \"`git status --porcelain`\" ] ; then\n            # Dirty working tree: push it\n            git config user.name \"github-actions[bot]\"\n            git config user.email \"41898282+github-actions[bot]@users.noreply.github.com\"\n            git add -u\n            git commit -m \"Sync autogenerated files #noupdate\"\n            git push\n          fi\n\n  sync-docs:\n    name: Sync content from main to pages\n    runs-on: ubuntu-latest\n    if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'\n    needs: ['sync-autogenerated']\n    permissions:\n      contents: write\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n        with:\n          submodules: false\n          fetch-depth: 0 # Necessary to get both the main and pages branches\n          fetch-tags: false\n          ref: pages\n\n      - name: Commit and push, if docs have changed\n        run: |\n          if ! git diff --exit-code origin/main -- \\\n               ./doc ./AUTHORS.md ./LICENCE.md ./SECURITY.md ./README.md \\\n               ./README ./NON-AUTOTOOLS-BUILD >/dev/null ; then\n            # Differences from main: merge and push\n            git config user.name \"github-actions[bot]\"\n            git config user.email \"41898282+github-actions[bot]@users.noreply.github.com\"\n            git merge origin/main --no-edit -m\"Sync content from main to pages\"\n            git push\n          else\n            echo \"No content changes to sync\"\n          fi"
  },
  {
    "path": ".gitignore",
    "content": "# Public .gitignore file for PCRE2\n\nbuild/\nbuild-*/\n\npages/\n\n*.a\n*.gcda\n*.gcno\n*.profraw\n*.lo\n*.la\n*.pc\n*.o\n*~\n\n*-coverage*\n\n__pycache__\n.deps\n.libs\n\nMakefile\nMakefile.in\nRunGrepTest.log\nRunGrepTest.trs\nRunTest.log\nRunTest.trs\n\naclocal.m4\nar-lib\nautom4te.cache\ncompile\nconfig.guess\nconfig.log\nconfig.status\nconfig.sub\nconfig.lt\nconfigure\ndepcomp\ninstall-sh\nlibtool\nltmain.sh\nmissing\npcre2-config\npcre2_dftables\npcre2_jit_test\npcre2_jit_test.exe\npcre2_jit_test.log\npcre2_jit_test.trs\npcre2posix_test\npcre2posix_test.exe\npcre2posix_test.log\npcre2posix_test.trs\npcre2demo\npcre2fuzzcheck-*\npcre2fuzzer-*\npcre2grep\npcre2grep.exe\npcre2test\npcre2test.exe\ntest-driver\ntest-suite.log\ntest3input\ntest3output\ntest3outputA\ntest3outputB\ntestNinput\ntestNinputgrep\nteststderr\nteststderrM\nteststderrgrep\nteststdout\nteststdoutM\ntesttemp1\ntesttemp1grep\ntesttemp2\ntesttemp2grep\ntesttry\ntesttry2\ntesttrygrep\ntestSinput\ntestSoutput\ntestbtables\ntestsaved1\ntestsaved2\ntestoutput8\ntestoutput8-jit\ntestoutput8-dfa\ntestoutput16\ntestoutput16-jit\ntestoutput16-dfa\ntestoutput32\ntestoutput32-jit\ntestoutput32-dfa\n\nm4/libtool.m4\nm4/ltoptions.m4\nm4/ltsugar.m4\nm4/ltversion.m4\nm4/lt~obsolete.m4\n\nsrc/.deps\nsrc/.dirstamp\nsrc/config.h\nsrc/config.h.in\nsrc/pcre2.h\nsrc/pcre2_chartables.c\nsrc/libpcre2-8.sym\nsrc/libpcre2-16.sym\nsrc/libpcre2-32.sym\nsrc/libpcre2-posix.sym\nsrc/stamp-h1\n\n/bazel-*\n*.bazel.lock\n\nzig-out/\nzig-cache/\n.zig-cache/\n\n# Folders that may be used by individual developers, without appearing in git\n# status output.\n.vscode/\n.devcontainer/\n.personal/\n\n# End\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"deps/sljit\"]\n\tpath = deps/sljit\n\turl = https://github.com/zherczeg/sljit.git\n"
  },
  {
    "path": "AUTHORS.md",
    "content": "PCRE2 Authorship and Contributors\n=================================\n\nCopyright\n---------\n\nPlease see the file [LICENCE](./LICENCE.md) in the PCRE2 distribution for\ncopyright details.\n\n\nMaintainers\n-----------\n\nThe PCRE and PCRE2 libraries were authored and maintained by Philip Hazel.\n\nSince 2024, the contributors with administrator access to the project are now\nNicholas Wilson and Zoltán Herczeg. See the file [SECURITY](./SECURITY.md) for\nGPG keys.\n\nBoth administrators are volunteers acting in a personal capacity.\n\n<table>\n<thead>\n<tr>\n  <th>Name</th>\n  <th>Role</th>\n<tr>\n</thead>\n<tbody>\n<tr>\n  <td>\n\n  Nicholas Wilson<br/>\n  `nicholas@nicholaswilson.me.uk`<br/>\n  Currently of Microsoft Research Cambridge, UK\n\n  </td>\n  <td>\n\n  * General project administration & maintenance\n  * Release management\n  * Code maintenance\n\n  </td>\n</tr>\n<tr>\n  <td>\n\n  Zoltán Herczeg<br/>\n  `hzmester@freemail.hu`<br/>\n  Currently of the University of Szeged, Hungary\n\n  </td>\n  <td>\n\n  * Code maintenance\n  * Ownership of `sljit` and PCRE2's JIT\n\n  </td>\n</tr>\n</tbody>\n</table>\n\n\nContributors\n------------\n\nMany others have participated and contributed to PCRE2 over its history.\n\nThe maintainers are grateful for all contributions and participation over the\nyears. We apologise for any names we have forgotten.\n\nWe are especially grateful to Philip Hazel, creator of PCRE and PCRE2, and\nmaintainer from 1997 to 2024.\n\nAll names listed alphabetically.\n\n### Contributors to PCRE2\n\nThis list includes names up until the PCRE2 10.47 release. New names will be\nadded from the Git history on each release.\n\n    Scott Bell\n    Carlo Marcelo Arenas Belón\n    Edward Betts\n    Jan-Willem Blokland\n    Ross Burton\n    Dmitry Cherniachenko\n    Alexey Chupahin\n    Jessica Clarke\n    Alejandro Colomar\n    Jeremie Courreges-Anglas\n    Addison Crump\n    Alex Dowad\n    Daniel Engberg\n    Marco Feuerstein\n    Daniel Richard G\n    Isaac Oscar Gariano\n    David Gaussmann\n    Andrey Gorbachev\n    Jordan Griege\n    Jason Hood\n    Bumsu Hyeon\n    Roy Ivy\n    Nobuhiro Iwamatsu\n    Martin Joerg\n    Guillem Jover\n    Ralf Junker\n    Ayesh Karunaratne\n    Michael Kaufmann\n    Yunho Kim\n    Joshua Kinard\n    David Korczynski\n    Uwe Korn\n    Jonas Kvinge\n    Kristian Larsson\n    Kai Lu\n    Behzod Mansurov\n    B. Scott Michel\n    Greg Minshall\n    Nathan Moinvaziri\n    Mike Munday\n    Marc Mutz\n    Fabio Pagani\n    Christian Persch\n    Alex Reinking\n    Joshua Rogers\n    Tristan Ross\n    William A Rowe Jr\n    Rocco Ruscitti\n    David Seifert\n    Yaakov Selkowitz\n    Rich Siegel\n    Karl Skomski\n    Maciej Sroczyński\n    Wolfgang Stöggl\n    Thomas Tempelmann\n    Greg Thain\n    Lucas Trzesniewski\n    Theodore Tsirpanis\n    Aaron M. Ucko\n    Matthew Vernon\n    Rémi Verschelde\n    Thomas Voss\n    Ezekiel Warren\n    Carl Weaver\n    Chris Wilson\n    Amin Yahyaabadi\n    Joe Zhang\n\n### Contributors to PCRE1\n\nThese people contributed either by sending patches or reporting serious issues.\n\n    Irfan Adilovic\n    Alexander Barkov\n    Daniel Bergström\n    David Burgess\n    Ross Burton\n    David Byron\n    Fred Cox\n    Christian Ehrlicher\n    Tom Fortmann\n    Lionel Fourquaux\n    Mike Frysinger\n    Daniel Richard G\n    Dair Gran\n    \"Graycode\" (Red Hat Product Security)\n    Viktor Griph\n    Wen Guanxing\n    Robin Houston\n    Martin Jerabek\n    Peter Kankowski\n    Stephen Kelly\n    Yunho Kim\n    Joshua Kinard\n    Carsten Klein\n    Evgeny Kotkov\n    Ronald Landheer-Cieslak\n    Alan Lehotsky\n    Dmitry V. Levin\n    Nuno Lopes\n    Kai Lu\n    Giuseppe Maxia\n    Dan Mooney\n    Marc Mutz\n    Markus Oberhumer\n    Sheri Pierce\n    Petr Pisar\n    Ari Pollak\n    Bob Rossi\n    Ruiger Rill\n    Michael Shigorin\n    Rich Siegel\n    Craig Silverstein (C++ wrapper)\n    Karl Skomski\n    Paul Sokolovsky\n    Stan Switzer\n    Ian Taylor\n    Mark Tetrode\n    Jeff Trawick\n    Steven Van Ingelgem\n    Lawrence Velazquez\n    Jiong Wang\n    Stefan Weber\n    Chris Wilson\n\nThanks go to Jeffrey Friedl for testing and debugging assistance.\n"
  },
  {
    "path": "BUILD.bazel",
    "content": "load(\"@bazel_skylib//rules:copy_file.bzl\", \"copy_file\")\nload(\"@bazel_skylib//rules:native_binary.bzl\", \"native_test\")\nload(\"@rules_cc//cc:defs.bzl\", \"cc_binary\", \"cc_library\")\n\ncopy_file(\n    name = \"config_h_generic\",\n    src = \"src/config.h.generic\",\n    out = \"src/config.h\",\n)\n\ncopy_file(\n    name = \"pcre2_h_generic\",\n    src = \"src/pcre2.h.generic\",\n    out = \"src/pcre2.h\",\n)\n\ncopy_file(\n    name = \"pcre2_chartables_c\",\n    src = \"src/pcre2_chartables.c.dist\",\n    out = \"src/pcre2_chartables.c\",\n)\n\nLOCAL_DEFINES = [\n    \"HAVE_CONFIG_H\",\n    \"SUPPORT_PCRE2_8\",\n    \"SUPPORT_UNICODE\",\n] + select({\n    \"@platforms//os:windows\": [],\n    \"//conditions:default\": [\"HAVE_UNISTD_H\"],\n})\n\n# Workaround for a Bazel quirk. It is extremely strict about the #include path\n# used for internal headers. We have our headers inside src/, but we #include\n# them as '#include \"pcre2_internal.h\"', assuming that src/ is added to the\n# compiler's include path. Unfortunately, that violates the conventions used by\n# Bazel.\n#\n# This is a workaround. Note that we can't use the \"include = [...]\" property\n# to add the src/ directory, since that pollutes the include path for projects\n# depending on PCRE2 (we must not make our config.h file visible to consumers\n# of PCRE2).\ncc_library(\n    name = \"pcre2_internal_headers\",\n    hdrs = [\n        \"src/pcre2_compile.h\",\n        \"src/pcre2_internal.h\",\n        \"src/pcre2_intmodedep.h\",\n        \"src/pcre2_jit_match_inc.h\",\n        \"src/pcre2_jit_misc_inc.h\",\n        \"src/pcre2_printint_inc.h\",\n        \"src/pcre2_ucp.h\",\n        \"src/pcre2_ucptables_inc.h\",\n        \"src/pcre2_util.h\",\n        \"src/pcre2test_inc.h\",\n        \":config_h_generic\",\n    ],\n    strip_include_prefix = \"src\",\n    visibility = [\"//visibility:private\"],\n)\n\ncc_library(\n    name = \"pcre2\",\n    srcs = [\n        \"src/pcre2_auto_possess.c\",\n        \"src/pcre2_chkdint.c\",\n        \"src/pcre2_compile.c\",\n        \"src/pcre2_compile_cgroup.c\",\n        \"src/pcre2_compile_class.c\",\n        \"src/pcre2_config.c\",\n        \"src/pcre2_context.c\",\n        \"src/pcre2_convert.c\",\n        \"src/pcre2_dfa_match.c\",\n        \"src/pcre2_error.c\",\n        \"src/pcre2_extuni.c\",\n        \"src/pcre2_find_bracket.c\",\n        \"src/pcre2_jit_compile.c\",\n        \"src/pcre2_maketables.c\",\n        \"src/pcre2_match.c\",\n        \"src/pcre2_match_data.c\",\n        \"src/pcre2_match_next.c\",\n        \"src/pcre2_newline.c\",\n        \"src/pcre2_ord2utf.c\",\n        \"src/pcre2_pattern_info.c\",\n        \"src/pcre2_script_run.c\",\n        \"src/pcre2_serialize.c\",\n        \"src/pcre2_string_utils.c\",\n        \"src/pcre2_study.c\",\n        \"src/pcre2_substitute.c\",\n        \"src/pcre2_substring.c\",\n        \"src/pcre2_tables.c\",\n        \"src/pcre2_ucd.c\",\n        \"src/pcre2_valid_utf.c\",\n        \"src/pcre2_xclass.c\",\n        \":pcre2_chartables_c\",\n    ],\n    hdrs = [\":pcre2_h_generic\"],\n    implementation_deps = [\":pcre2_internal_headers\"],\n    defines = [\n        \"PCRE2_STATIC\",\n    ],\n    local_defines = LOCAL_DEFINES + [\n        \"PCRE2_CODE_UNIT_WIDTH=8\",\n    ],\n    strip_include_prefix = \"src\",\n    linkstatic = True,\n    visibility = [\"//visibility:public\"],\n)\n\n# See below for explanation of why we need this.\n#\n# https://github.com/bazelbuild/bazel/issues/680\ncc_library(\n    name = \"pcre2posix_dotc_headers\",\n    hdrs = [\n        \"src/pcre2_tables.c\",\n    ],\n    strip_include_prefix = \"src\",\n    visibility = [\"//visibility:private\"],\n)\n\ncc_library(\n    name = \"pcre2-posix\",\n    srcs = [\"src/pcre2posix.c\"],\n    hdrs = [\"src/pcre2posix.h\"],\n    implementation_deps = [\n        \":pcre2_internal_headers\",\n        \":pcre2posix_dotc_headers\",\n    ],\n    local_defines = LOCAL_DEFINES + [\n        \"PCRE2_CODE_UNIT_WIDTH=8\",\n    ],\n    strip_include_prefix = \"src\",\n    linkstatic = True,\n    visibility = [\"//visibility:public\"],\n    deps = [\n        \":pcre2\",\n    ],\n)\n\n# Totally weird issue in Bazel. It won't let you #include any files unless they\n# are declared to the build system. OK, fair enough. But - for a cc_binary it\n# uses the file extension to determine whether it's a header or a compilation\n# unit. But... we have several .c files which are #included, rather than treated\n# as a compilation unit.\n#\n# For cc_library() above, we can overcome this with textual_hdrs. But that\n# doesn't work for cc_binary(). Here's our workaround.\n#\n# https://github.com/bazelbuild/bazel/issues/680\ncc_library(\n    name = \"pcre2test_dotc_headers\",\n    hdrs = [\n        \"src/pcre2_chkdint.c\",\n        \"src/pcre2_tables.c\",\n        \"src/pcre2_ucd.c\",\n        \"src/pcre2_valid_utf.c\",\n    ],\n    strip_include_prefix = \"src\",\n    visibility = [\"//visibility:private\"],\n)\n\ncc_binary(\n    name = \"pcre2test\",\n    srcs = [\"src/pcre2test.c\"],\n    linkopts = select({\n        \"@platforms//os:windows\": [\"-STACK:2500000\"],\n        \"//conditions:default\": [],\n    }),\n    local_defines = LOCAL_DEFINES,\n    visibility = [\"//visibility:public\"],\n    deps = [\n        \":pcre2\",\n        \":pcre2-posix\",\n        \":pcre2_internal_headers\",\n        \":pcre2test_dotc_headers\",\n    ],\n)\n\nfilegroup(\n    name = \"testdata\",\n    srcs = glob([\"testdata/*\"]),\n)\n\nnative_test(\n    name = \"pcre2_test\",\n    size = \"small\",\n    src = select({\n        \"@platforms//os:windows\": \"RunTest.bat\",\n        \"//conditions:default\": \"RunTest\",\n    }),\n    out = select({\n        \"@platforms//os:windows\": \"RunTest.bat\",\n        \"//conditions:default\": \"RunTest\",\n    }),\n    data = [\n        \":pcre2test\",\n        \":testdata\",\n    ],\n)\n"
  },
  {
    "path": "CMakeLists.txt",
    "content": "# CMakeLists.txt\n#\n# This file enables PCRE2 to be built with the CMake configuration and build\n# tool. Download CMake in source or binary form from http://www.cmake.org/\n# Converted to support PCRE2 from the original PCRE file, August 2014.\n#\n# Original listfile by Christian Ehrlicher <Ch.Ehrlicher@gmx.de>\n# Refined and expanded by Daniel Richard G. <skunk@iSKUNK.ORG>\n# 2007-09-14 mod by Sheri so 7.4 supported configuration options can be entered\n# 2007-09-19 Adjusted by PH to retain previous default settings\n# 2007-12-26 (a) On UNIX, use names libpcre instead of just pcre\n#            (b) Ensure pcretest and pcregrep link with the local library,\n#                not a previously-installed one.\n#            (c) Add PCRE_SUPPORT_LIBREADLINE, PCRE_SUPPORT_LIBZ, and\n#                PCRE_SUPPORT_LIBBZ2.\n# 2008-01-20 Brought up to date to include several new features by Christian\n#            Ehrlicher.\n# 2008-01-22 Sheri added options for backward compatibility of library names\n#            when building with minGW:\n#            if \"ON\", NON_STANDARD_LIB_PREFIX causes shared libraries to\n#            be built without \"lib\" as prefix. (The libraries will be named\n#            pcre.dll, pcreposix.dll and pcrecpp.dll).\n#            if \"ON\", NON_STANDARD_LIB_SUFFIX causes shared libraries to\n#            be built with suffix of \"-0.dll\". (The libraries will be named\n#            libpcre-0.dll, libpcreposix-0.dll and libpcrecpp-0.dll - same names\n#            built by default with Configure and Make.\n# 2008-01-23 PH removed the automatic build of pcredemo.\n# 2008-04-22 PH modified READLINE support so it finds NCURSES when needed.\n# 2008-07-03 PH updated for revised UCP property support (change of files)\n# 2009-03-23 PH applied Steven Van Ingelgem's patch to change the name\n#            CMAKE_BINARY_DIR to PROJECT_BINARY_DIR so that it works when PCRE\n#            is included within another project.\n# 2009-03-23 PH applied a modified version of Steven Van Ingelgem's patches to\n#            add options to stop the building of pcregrep and the tests, and\n#            to disable the final configuration report.\n# 2009-04-11 PH applied Christian Ehrlicher's patch to show compiler flags that\n#            are set by specifying a release type.\n# 2010-01-02 PH added test for stdint.h\n# 2010-03-02 PH added test for inttypes.h\n# 2011-08-01 PH added PCREGREP_BUFSIZE\n# 2011-08-22 PH added PCRE_SUPPORT_JIT\n# 2011-09-06 PH modified WIN32 ADD_TEST line as suggested by Sergey Cherepanov\n# 2011-09-06 PH added PCRE_SUPPORT_PCREGREP_JIT\n# 2011-10-04 Sheri added support for including coff data in windows shared libraries\n#            compiled with MINGW if pcre.rc and/or pcreposix.rc are placed in\n#            the source dir by the user prior to building\n# 2011-10-04 Sheri changed various add_test's to use exes' location built instead\n#            of DEBUG location only (likely only matters in MSVC)\n# 2011-10-04 Sheri added scripts to provide needed variables to RunTest and\n#            RunGrepTest (used for UNIX and Msys)\n# 2011-10-04 Sheri added scripts to provide needed variables and to execute\n#            RunTest.bat in Win32 (for effortless testing with \"make test\")\n# 2011-10-04 Sheri Increased minimum required cmake version\n# 2012-01-06 PH removed pcre_info.c and added pcre_string_utils.c\n# 2012-01-10 Zoltan Herczeg added libpcre16 support\n# 2012-01-13 Stephen Kelly added out of source build support\n# 2012-01-17 PH applied Stephen Kelly's patch to parse the version data out\n#            of the configure.ac file\n# 2012-02-26 PH added support for libedit\n# 2012-09-06 PH added support for PCRE_EBCDIC_NL25\n# 2012-09-08 ChPe added PCRE32 support\n# 2012-10-23 PH added support for VALGRIND and GCOV\n# 2012-12-08 PH added patch from Daniel Richard G to quash some MSVC warnings\n# 2013-07-01 PH realized that the \"support\" for GCOV was a total nonsense and\n#            so it has been removed.\n# 2013-10-08 PH got rid of the \"source\" command, which is a bash-ism (use \".\")\n# 2013-11-05 PH added support for PARENS_NEST_LIMIT\n# 2014-08-29 PH converted the file for PCRE2 (which has no C++).\n# 2015-04-24 PH added support for PCRE2_DEBUG\n# 2015-07-16 PH updated for new pcre2_find_bracket source module\n# 2015-08-24 PH correct C_FLAGS setting (patch from Roy Ivy III)\n# 2015-10=16 PH added support for never-backslash-C\n# 2016-03-01 PH applied Chris Wilson's patch for MSVC static\n# 2016-06-24 PH applied Chris Wilson's second patch, putting the first under\n#            a new option instead of being unconditional.\n# 2016-10-05 PH fixed a typo (PCRE should be PCRE2) in above patch\n#            fix by David Gaussmann\n# 2016-10-07 PH added PCREGREP_MAX_BUFSIZE\n# 2017-03-11 PH turned HEAP_MATCH_RECURSE into a NO-OP for 10.30\n# 2017-04-08 PH added HEAP_LIMIT\n# 2017-06-15 ZH added SUPPORT_JIT_SEALLOC support\n# 2018-06-19 PH added checks for stdint.h and inttypes.h (later removed)\n# 2018-06-27 PH added Daniel's patch to increase the stack for MSVC\n# 2018-11-14 PH removed unnecessary checks for stdint.h and inttypes.h\n# 2018-11-16 PH added PCRE2GREP_SUPPORT_CALLOUT_FORK support and tidied\n# 2019-02-16 PH hacked to avoid CMP0026 policy issue (see comments below)\n# 2020-03-16 PH renamed dftables as pcre2_dftables (as elsewhere)\n# 2020-03-24 PH changed CMAKE_MODULE_PATH definition to add, not replace\n# 2020-04-08 Carlo added function check for secure_getenv, fixed strerror\n# 2020-04-16 enh added check for __attribute__((uninitialized))\n# 2020-04-25 PH applied patches from Uwe Korn to support pkg-config and\n#            library versioning.\n# 2020-04-25 Carlo added function check for mkostemp used in ProtExecAllocator\n# 2020-04-28 PH added function check for memfd_create based on Carlo's patch\n# 2020-05-25 PH added a check for Intel CET\n# 2020-12-03 PH altered the definition of pcre2test as suggested by Daniel\n# 2021-06-29 JWSB added the option to build static library with PIC.\n# 2021-07-05 JWSB modified such both the static and shared library can be\n#            build in one go.\n# 2021-08-28 PH increased minimum version\n# 2021-08-28 PH added test for realpath()\n# 2022-12-10 PH added support for pcre2posix_test\n# 2023-01-15 Carlo added C99 as the minimum required\n# 2023-08-06 PH added support for setting variable length lookbehind maximum\n# 2025-03-27 Theodore used standard CMake constructs to export the library's\n#            targets.\n\n################################################################################\n# We have used `gersemi` for auto-formatting our CMake files.\n# Applied to all CMake files using:\n#    > pip3 install gersemi\n#    > gersemi --in-place --line-length 120 --indent 2 \\\n#          --definitions cmake/*.cmake \\\n#          -- ./CMakeLists.txt ./cmake/*.cmake ./cmake/*.cmake.in\n################################################################################\n\nmessage(STATUS \"Using CMake version ${CMAKE_VERSION} (${CMAKE_COMMAND})\")\n\n# Increased minimum to 3.15 to allow use of string(REPEAT).\ncmake_minimum_required(VERSION 3.15 FATAL_ERROR)\nproject(PCRE2 C)\nset(CMAKE_C_STANDARD 99)\nset(CMAKE_C_STANDARD_REQUIRED TRUE)\nset(CMAKE_C_VISIBILITY_PRESET hidden)\n\n# Solaris-specific fix for \"CMAKE_C_VISIBILITY_PRESET\": this feature was only\n# recently added to CMake for the `cc` compiler (Oracle Developer Studio). The\n# CMake version from OpenCSW and Oracle's package repository is too old and\n# requires this fix.\nif(\n  CMAKE_SYSTEM_NAME STREQUAL \"SunOS\"\n  AND CMAKE_VERSION VERSION_LESS 3.31\n  AND CMAKE_C_COMPILER_ID STREQUAL \"SunPro\"\n  AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 5.15\n)\n  set(CMAKE_C_COMPILE_OPTIONS_VISIBILITY \"-fvisibility=\")\nendif()\n\n# The following policies have been set in the PCRE2 CMake file in the past.\n# Since we specify a minimum of CMake 3.15, these are no longer required.\n# cmake_policy(SET CMP0063 NEW)\n# cmake_policy(SET CMP0026 OLD)\n# cmake_policy(SET CMP0074 NEW)\n\n# For our modules in cmake/. This uses list(APPEND) rather than set() to allow\n# setting CMAKE_MODULE_PATH on the command line.\nlist(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)\n\n# External packages\nfind_package(BZip2)\nfind_package(ZLIB)\nfind_package(Readline)\nfind_package(Editline)\n\n# Configuration checks\n\ninclude(CheckCSourceCompiles)\ninclude(CheckFunctionExists)\ninclude(CheckSymbolExists)\ninclude(CheckIncludeFile)\ninclude(CheckTypeSize)\ninclude(CMakePackageConfigHelpers)\ninclude(CMakePushCheckState)\ninclude(GNUInstallDirs) # for CMAKE_INSTALL_LIBDIR\ninclude(PCRE2CheckVscript)\ninclude(PCRE2UseSystemExtensions)\ninclude(PCRE2WarningAsError)\n\ncheck_include_file(assert.h HAVE_ASSERT_H)\ncheck_include_file(dirent.h HAVE_DIRENT_H)\ncheck_include_file(sys/stat.h HAVE_SYS_STAT_H)\ncheck_include_file(sys/types.h HAVE_SYS_TYPES_H)\ncheck_include_file(unistd.h HAVE_UNISTD_H)\ncheck_include_file(windows.h HAVE_WINDOWS_H)\n\n# Check whether any system-wide extensions need to be enabled, in order for\n# OS functionality to be exposed.\npcre2_use_system_extensions()\n\ncmake_push_check_state(RESET)\n# Propagate the _GNU_SOURCE definition (added to COMPILE_DEFINITIONS by\n# pcre2_use_system_extensions()) so that these check_symbol_exists() calls\n# can find symbols only exposed with _GNU_SOURCE.\n# We only pass through known plain-text definitions (like _GNU_SOURCE) and\n# skip anything else (e.g. generator expressions inherited from a parent\n# project), because try_compile() cannot handle generator expressions.\nget_directory_property(_pcre2_compile_definitions COMPILE_DEFINITIONS)\nif(DEFINED _pcre2_compile_definitions)\n  set(CMAKE_REQUIRED_DEFINITIONS \"\")\n  list(FIND _pcre2_compile_definitions \"_GNU_SOURCE\" _idx)\n  if(_idx GREATER -1)\n    list(APPEND CMAKE_REQUIRED_DEFINITIONS \"-D_GNU_SOURCE\")\n  endif()\nendif()\n\ncheck_symbol_exists(mkostemp stdlib.h HAVE_MKOSTEMP) # glibc 2.7\ncheck_symbol_exists(memfd_create \"sys/mman.h\" HAVE_MEMFD_CREATE) # glibc 2.27\ncheck_symbol_exists(secure_getenv \"stdlib.h\" HAVE_SECURE_GETENV) # glibc 2.17\ncheck_symbol_exists(setrlimit \"sys/resource.h\" HAVE_SETRLIMIT)\ncmake_pop_check_state()\n\ncheck_c_source_compiles(\n  [=[\n  #include <stdlib.h>\n  #include <limits.h>\n  int main(int c, char *v[]) { char buf[PATH_MAX]; realpath(v[c], buf); return 0; }\n  ]=]\n  HAVE_REALPATH\n)\n\n# Many CMake tests use highly-dubious C source code which generates warnings\n# (for example, calling a function with the wrong signature just to see whether\n# the linker can find it). These couple of tests here though need to be compiled\n# with -Werror to be effective.\ncmake_push_check_state()\nif(NOT DEFINED CMAKE_REQUIRED_FLAGS)\n  set(CMAKE_REQUIRED_FLAGS \"\")\nendif()\npcre2_warning_as_error(WARNING_AS_ERROR_FLAGS)\nset(CMAKE_REQUIRED_FLAGS \"${CMAKE_REQUIRED_FLAGS} ${WARNING_AS_ERROR_FLAGS}\")\n\ncheck_c_source_compiles(\n  \"int main(void) { char buf[128] __attribute__((uninitialized)); (void)buf; return 0; }\"\n  HAVE_ATTRIBUTE_UNINITIALIZED\n)\n\nif(NOT MSVC)\n  check_c_source_compiles(\n    [=[\n    extern __attribute__ ((visibility (\"default\"))) int f(void);\n    int main(void) { return f(); }\n    int f(void) { return 42; }\n    ]=]\n    HAVE_VISIBILITY\n  )\nendif()\nif(CMAKE_C_COMPILE_OPTIONS_VISIBILITY AND NOT HAVE_VISIBILITY)\n  # Hmm. We don't know of any way to set a symbol to have default visibility, other\n  # than the common \"__attribute__((visibility(\"default\")))\". But CMake thinks that\n  # the compiler supports CMAKE_C_VISIBILITY_PRESET. The build is likely to fail to\n  # generate a usable shared library.\n  message(\n    WARNING\n    \"C compiler uses the visibility flag ${CMAKE_C_COMPILE_OPTIONS_VISIBILITY}. We did not detect support for __attribute__((visibility(\\\"default\\\"))). We do not know how to set a symbol to have default visibility.\"\n  )\nelseif(HAVE_VISIBILITY AND NOT CMAKE_C_COMPILE_OPTIONS_VISIBILITY)\n  # Here, the build may well work, but it's possible that CMake isn't correctly\n  # suppressing the visibility of private symbols.\n  message(\n    WARNING\n    \"C compiler appears to support __attribute__((visibility(\\\"default\\\"))). However, CMake is not using a visibility flag. The visibility of private symbols may not be correct.\"\n  )\nendif()\nif(HAVE_VISIBILITY)\n  set(PCRE2_EXPORT [=[__attribute__ ((visibility (\"default\")))]=])\nelse()\n  set(PCRE2_EXPORT)\nendif()\ncmake_pop_check_state()\n\ncheck_c_source_compiles(\"int main(void) { __assume(1); return 0; }\" HAVE_BUILTIN_ASSUME)\n\ncheck_c_source_compiles(\n  [=[\n  #include <stddef.h>\n  int main(void) { int a,b; size_t m; __builtin_mul_overflow(a,b,&m); return 0; }\n  ]=]\n  HAVE_BUILTIN_MUL_OVERFLOW\n)\n\ncheck_c_source_compiles(\n  \"int main(int c, char *v[]) { if (c) __builtin_unreachable(); return (int)(*v[0]); }\"\n  HAVE_BUILTIN_UNREACHABLE\n)\n\n# Detect support for linker scripts.\n\npcre2_check_vscript(HAVE_VSCRIPT VSCRIPT_FLAG HAVE_VSCRIPT_NO_STAR)\n\n# Check whether Intel CET is enabled, and if so, adjust compiler flags. This\n# code was written by PH, trying to imitate the logic from the autotools\n# configuration.\n\ncheck_c_source_compiles(\n  [=[\n  #ifndef __CET__\n  #error CET is not enabled\n  #endif\n  int main() { return 0; }\n  ]=]\n  INTEL_CET_ENABLED\n)\n\nif(INTEL_CET_ENABLED)\n  set(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS} -mshstk\")\nendif()\n\n# User-configurable options\n#\n# Note: CMakeSetup displays these in alphabetical order, regardless of\n# the order we use here.\n\nset(BUILD_SHARED_LIBS OFF CACHE BOOL \"Build shared libraries.\")\n\noption(BUILD_STATIC_LIBS \"Build static libraries.\" ON)\n\noption(PCRE2_BUILD_PCRE2_8 \"Build 8 bit PCRE2 library\" ON)\n\noption(PCRE2_BUILD_PCRE2_16 \"Build 16 bit PCRE2 library\" OFF)\n\noption(PCRE2_BUILD_PCRE2_32 \"Build 32 bit PCRE2 library\" OFF)\n\noption(PCRE2_STATIC_PIC \"Build the static library with the option position independent code enabled.\" OFF)\n\nset(PCRE2_DEBUG \"IfDebugBuild\" CACHE STRING \"Include debugging code\")\nset_property(CACHE PCRE2_DEBUG PROPERTY STRINGS \"IfDebugBuild\" \"ON\" \"OFF\")\n\noption(PCRE2_DISABLE_PERCENT_ZT \"Disable the use of %zu and %td (rarely needed)\" OFF)\n\nset(\n  PCRE2_EBCDIC\n  OFF\n  CACHE BOOL\n  \"Use EBCDIC coding instead of ASCII. (This is rarely used outside of mainframe systems.)\"\n)\n\nset(PCRE2_EBCDIC_NL25 OFF CACHE BOOL \"Use 0x25 as EBCDIC NL character instead of 0x15; implies EBCDIC.\")\n\nset(\n  PCRE2_EBCDIC_IGNORING_COMPILER\n  OFF\n  CACHE BOOL\n  \"Force EBCDIC 1047 using numeric literals rather than C character literals; implies EBCDIC.\"\n)\n\noption(PCRE2_REBUILD_CHARTABLES \"Rebuild char tables\" OFF)\n\nset(\n  PCRE2_LINK_SIZE\n  \"2\"\n  CACHE STRING\n  \"Internal link size (2, 3 or 4 allowed). See LINK_SIZE in config.h.in for details.\"\n)\n\nset(\n  PCRE2_PARENS_NEST_LIMIT\n  \"250\"\n  CACHE STRING\n  \"Default nested parentheses limit. See PARENS_NEST_LIMIT in config.h.in for details.\"\n)\n\nset(\n  PCRE2_HEAP_LIMIT\n  \"20000000\"\n  CACHE STRING\n  \"Default limit on heap memory (kibibytes). See HEAP_LIMIT in config.h.in for details.\"\n)\n\nset(PCRE2_MAX_VARLOOKBEHIND \"255\" CACHE STRING \"Default limit on variable lookbehinds.\")\n\nset(\n  PCRE2_MATCH_LIMIT\n  \"10000000\"\n  CACHE STRING\n  \"Default limit on internal looping. See MATCH_LIMIT in config.h.in for details.\"\n)\n\nset(\n  PCRE2_MATCH_LIMIT_DEPTH\n  \"MATCH_LIMIT\"\n  CACHE STRING\n  \"Default limit on internal depth of search. See MATCH_LIMIT_DEPTH in config.h.in for details.\"\n)\n\nset(\n  PCRE2GREP_BUFSIZE\n  \"20480\"\n  CACHE STRING\n  \"Buffer starting size parameter for pcre2grep. See PCRE2GREP_BUFSIZE in config.h.in for details.\"\n)\n\nset(\n  PCRE2GREP_MAX_BUFSIZE\n  \"1048576\"\n  CACHE STRING\n  \"Buffer maximum size parameter for pcre2grep. See PCRE2GREP_MAX_BUFSIZE in config.h.in for details.\"\n)\n\nset(PCRE2_NEWLINE \"LF\" CACHE STRING \"What to recognize as a newline (one of CR, LF, CRLF, ANY, ANYCRLF, NUL).\")\n\nset(PCRE2_HEAP_MATCH_RECURSE OFF CACHE BOOL \"Obsolete option: do not use\")\nmark_as_advanced(PCRE2_HEAP_MATCH_RECURSE)\n\nset(PCRE2_SUPPORT_JIT OFF CACHE BOOL \"Enable support for Just-in-time compiling.\")\n\nif(${CMAKE_SYSTEM_NAME} MATCHES Linux|NetBSD)\n  set(PCRE2_SUPPORT_JIT_SEALLOC OFF CACHE BOOL \"Enable SELinux compatible execmem allocator in JIT (experimental).\")\nelse()\n  set(PCRE2_SUPPORT_JIT_SEALLOC IGNORE)\nendif()\n\nset(PCRE2GREP_SUPPORT_JIT ON CACHE BOOL \"Enable use of Just-in-time compiling in pcre2grep.\")\n\nset(PCRE2GREP_SUPPORT_CALLOUT ON CACHE BOOL \"Enable callout string support in pcre2grep.\")\n\nset(PCRE2GREP_SUPPORT_CALLOUT_FORK ON CACHE BOOL \"Enable callout string fork support in pcre2grep.\")\n\nset(PCRE2_SUPPORT_UNICODE ON CACHE BOOL \"Enable support for Unicode and UTF-8/UTF-16/UTF-32 encoding.\")\n\nset(\n  PCRE2_SUPPORT_BSR_ANYCRLF\n  OFF\n  CACHE BOOL\n  \"ON=Backslash-R matches only LF CR and CRLF, OFF=Backslash-R matches all Unicode Linebreaks\"\n)\n\nset(PCRE2_NEVER_BACKSLASH_C OFF CACHE BOOL \"If ON, backslash-C (upper case C) is locked out.\")\n\nset(PCRE2_SUPPORT_VALGRIND OFF CACHE BOOL \"Enable Valgrind support.\")\n\noption(PCRE2_SHOW_REPORT \"Show the final configuration report\" ON)\noption(PCRE2_BUILD_PCRE2GREP \"Build pcre2grep\" ON)\noption(PCRE2_BUILD_TESTS \"Build the tests\" ON)\n\nset(\n  PCRE2_INSTALL_CMAKEDIR\n  \"${CMAKE_INSTALL_LIBDIR}/cmake/pcre2\"\n  CACHE STRING\n  \"Path used during CMake install for placing PCRE2's CMake config files, relative to the installation root (prefix)\"\n)\n\nif(MINGW)\n  option(\n    NON_STANDARD_LIB_PREFIX\n    \"ON=Shared libraries built in mingw will be named pcre2.dll, etc., instead of libpcre2.dll, etc.\"\n    OFF\n  )\n\n  option(\n    NON_STANDARD_LIB_SUFFIX\n    \"ON=Shared libraries built in mingw will be named libpcre2-0.dll, etc., instead of libpcre2.dll, etc.\"\n    OFF\n  )\nendif()\n\nif(MSVC)\n  option(INSTALL_MSVC_PDB \"ON=Install .pdb files built by MSVC, if generated\" OFF)\nendif()\n\nif(HAVE_VSCRIPT)\n  option(PCRE2_SYMVERS \"Enable library symbol versioning\" ON)\nendif()\n\n# bzip2 lib\nif(BZip2_FOUND)\n  option(PCRE2_SUPPORT_LIBBZ2 \"Enable support for linking pcre2grep with libbz2.\" ON)\nendif()\n\n# zlib\nif(ZLIB_FOUND)\n  option(PCRE2_SUPPORT_LIBZ \"Enable support for linking pcre2grep with libz.\" ON)\nendif()\n\n# editline lib\nif(Editline_FOUND)\n  option(PCRE2_SUPPORT_LIBEDIT \"Enable support for linking pcre2test with libedit.\" OFF)\nendif()\n\n# readline lib\nif(Readline_FOUND)\n  option(PCRE2_SUPPORT_LIBREADLINE \"Enable support for linking pcre2test with libreadline.\" ON)\nendif()\n\n# Prepare build configuration\n\ninclude_directories(${PROJECT_BINARY_DIR}/interface ${PROJECT_BINARY_DIR}/src ${PROJECT_SOURCE_DIR}/src)\n\nif(NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS)\n  message(FATAL_ERROR \"At least one of BUILD_SHARED_LIBS or BUILD_STATIC_LIBS must be enabled.\")\nendif()\n\nif(NOT PCRE2_BUILD_PCRE2_8 AND NOT PCRE2_BUILD_PCRE2_16 AND NOT PCRE2_BUILD_PCRE2_32)\n  message(\n    FATAL_ERROR\n    \"At least one of PCRE2_BUILD_PCRE2_8, PCRE2_BUILD_PCRE2_16 or PCRE2_BUILD_PCRE2_32 must be enabled\"\n  )\nendif()\n\nif(PCRE2_BUILD_PCRE2_8)\n  set(SUPPORT_PCRE2_8 1)\nendif()\n\nif(PCRE2_BUILD_PCRE2_16)\n  set(SUPPORT_PCRE2_16 1)\nendif()\n\nif(PCRE2_BUILD_PCRE2_32)\n  set(SUPPORT_PCRE2_32 1)\nendif()\n\nif(PCRE2_BUILD_PCRE2GREP AND NOT PCRE2_BUILD_PCRE2_8)\n  message(STATUS \"** PCRE2_BUILD_PCRE2_8 must be enabled for the pcre2grep program\")\n  set(PCRE2_BUILD_PCRE2GREP OFF)\nendif()\n\nif(PCRE2_SUPPORT_LIBBZ2)\n  if(BZip2_FOUND)\n    include_directories(${BZIP2_INCLUDE_DIRS})\n  else()\n    message(\n      FATAL_ERROR\n      \" libbz2 not found. Set BZIP2_INCLUDE_DIRS to a compatible header\\n\"\n      \" or set BZip2_ROOT to a full bzip2 installed tree, as needed.\"\n    )\n  endif()\nendif()\n\nif(PCRE2_SUPPORT_LIBZ)\n  if(ZLIB_FOUND)\n    include_directories(${ZLIB_INCLUDE_DIRS})\n  else()\n    message(\n      FATAL_ERROR\n      \" zlib not found. Set ZLIB_INCLUDE_DIRS to a compatible header\\n\"\n      \" or set ZLIB_ROOT to a full zlib installed tree, as needed.\"\n    )\n  endif()\nendif()\n\nif(PCRE2_SUPPORT_LIBEDIT)\n  if(Editline_FOUND)\n    include_directories(${EDITLINE_INCLUDE_DIRS})\n  else()\n    message(\n      FATAL_ERROR\n      \" libedit not found. Set EDITLINE_INCLUDE_DIRS to a compatible header\\n\"\n      \" or set Editline_ROOT to a full libedit installed tree, as needed.\"\n    )\n  endif()\nendif()\n\nif(PCRE2_SUPPORT_LIBREADLINE)\n  if(Readline_FOUND)\n    include_directories(${READLINE_INCLUDE_DIRS})\n  else()\n    message(\n      FATAL_ERROR\n      \" libreadline not found. Set READLINE_INCLUDE_DIRS to a compatible header\\n\"\n      \" or set Readline_ROOT to a full libreadline installed tree, as needed.\"\n    )\n  endif()\nendif()\n\nif(PCRE2_SUPPORT_LIBREADLINE AND PCRE2_SUPPORT_LIBEDIT)\n  if(Readline_FOUND)\n    message(\n      FATAL_ERROR\n      \" Only one of the readline compatible libraries can be enabled.\\n\"\n      \" Disable libreadline with -DPCRE2_SUPPORT_LIBREADLINE=OFF\"\n    )\n  endif()\nendif()\n\nif(PCRE2_SUPPORT_BSR_ANYCRLF)\n  set(BSR_ANYCRLF 1)\nendif()\n\nif(PCRE2_NEVER_BACKSLASH_C)\n  set(NEVER_BACKSLASH_C 1)\nendif()\n\nif(PCRE2_SUPPORT_UNICODE)\n  set(SUPPORT_UNICODE 1)\nendif()\n\nif(PCRE2_SUPPORT_JIT)\n  set(SUPPORT_JIT 1)\n  if(UNIX)\n    find_package(Threads REQUIRED)\n    if(CMAKE_USE_PTHREADS_INIT)\n      set(REQUIRE_PTHREAD 1)\n    endif()\n  endif()\nendif()\n\nif(PCRE2_SUPPORT_JIT_SEALLOC)\n  set(SLJIT_PROT_EXECUTABLE_ALLOCATOR 1)\nendif()\n\nif(PCRE2GREP_SUPPORT_JIT)\n  set(SUPPORT_PCRE2GREP_JIT 1)\nendif()\n\nif(PCRE2GREP_SUPPORT_CALLOUT)\n  set(SUPPORT_PCRE2GREP_CALLOUT 1)\n  if(PCRE2GREP_SUPPORT_CALLOUT_FORK)\n    set(SUPPORT_PCRE2GREP_CALLOUT_FORK 1)\n  endif()\nendif()\n\nif(PCRE2_SUPPORT_VALGRIND)\n  set(SUPPORT_VALGRIND 1)\nendif()\n\nif(PCRE2_DISABLE_PERCENT_ZT)\n  set(DISABLE_PERCENT_ZT 1)\nendif()\n\nset(PCRE2TEST_LIBS)\nset(PCRE2GREP_LIBS)\n\nif(PCRE2_SUPPORT_LIBREADLINE)\n  set(SUPPORT_LIBREADLINE 1)\n  list(APPEND PCRE2TEST_LIBS ${READLINE_LIBRARIES})\nendif()\n\n# libedit is a plug-compatible alternative to libreadline\n\nif(PCRE2_SUPPORT_LIBEDIT)\n  set(SUPPORT_LIBEDIT 1)\n  list(APPEND PCRE2TEST_LIBS ${EDITLINE_LIBRARIES})\nendif()\n\nif(PCRE2_SUPPORT_LIBZ)\n  set(SUPPORT_LIBZ 1)\n  list(APPEND PCRE2GREP_LIBS ${ZLIB_LIBRARIES})\nendif()\n\nif(PCRE2_SUPPORT_LIBBZ2)\n  set(SUPPORT_LIBBZ2 1)\n  list(APPEND PCRE2GREP_LIBS ${BZIP2_LIBRARIES})\nendif()\n\nset(NEWLINE_DEFAULT \"\")\n\nif(PCRE2_NEWLINE STREQUAL \"CR\")\n  set(NEWLINE_DEFAULT \"1\")\nendif()\nif(PCRE2_NEWLINE STREQUAL \"LF\")\n  set(NEWLINE_DEFAULT \"2\")\nendif()\nif(PCRE2_NEWLINE STREQUAL \"CRLF\")\n  set(NEWLINE_DEFAULT \"3\")\nendif()\nif(PCRE2_NEWLINE STREQUAL \"ANY\")\n  set(NEWLINE_DEFAULT \"4\")\nendif()\nif(PCRE2_NEWLINE STREQUAL \"ANYCRLF\")\n  set(NEWLINE_DEFAULT \"5\")\nendif()\nif(PCRE2_NEWLINE STREQUAL \"NUL\")\n  set(NEWLINE_DEFAULT \"6\")\nendif()\n\nif(NEWLINE_DEFAULT STREQUAL \"\")\n  message(\n    FATAL_ERROR\n    \"The PCRE2_NEWLINE variable must be set to one of the following values: \\\"LF\\\", \\\"CR\\\", \\\"CRLF\\\", \\\"ANY\\\", \\\"ANYCRLF\\\".\"\n  )\nendif()\n\nset(REBUILD_CHARTABLES OFF)\nif(PCRE2_REBUILD_CHARTABLES)\n  set(REBUILD_CHARTABLES ON)\nendif()\n\nset(EBCDIC OFF)\nif(PCRE2_EBCDIC)\n  set(EBCDIC ON)\nendif()\n\nif(PCRE2_EBCDIC_NL25)\n  set(EBCDIC ON)\n  set(EBCDIC_NL25 ON)\nendif()\n\nif(PCRE2_EBCDIC_IGNORING_COMPILER)\n  set(EBCDIC ON)\n  set(EBCDIC_IGNORING_COMPILER ON)\nendif()\n\n# Make sure that if EBCDIC is set (without EBCDIC_IGNORING_COMPILER), then\n# REBUILD_CHARTABLES is also enabled.\n# Also check that UTF support is not requested, because PCRE2 cannot handle\n# EBCDIC and UTF in the same build. To do so it would need to use different\n# character constants depending on the mode.\n# Also, EBCDIC cannot be used with 16-bit and 32-bit libraries.\nif(EBCDIC)\n  if(NOT EBCDIC_IGNORING_COMPILER)\n    set(REBUILD_CHARTABLES ON)\n  endif()\n  if(PCRE2_SUPPORT_UNICODE)\n    message(FATAL_ERROR \"Support for EBCDIC and Unicode cannot be enabled at the same time\")\n  endif()\n  if(PCRE2_BUILD_PCRE2_16 OR PCRE2_BUILD_PCRE2_32)\n    message(FATAL_ERROR \"EBCDIC support is available only for the 8-bit library\")\n  endif()\nendif()\n\n# Remove the Autotools-generated copy of config.h and pcre2.h. I sometimes switch\n# between Autoconf and CMake, and the conflicting copies of config.h generate some\n# very unintuitive build errors.\nfile(REMOVE ${PROJECT_SOURCE_DIR}/src/config.h)\nfile(REMOVE ${PROJECT_SOURCE_DIR}/src/pcre2.h)\n\n# Parse version numbers and date out of configure.ac\n\nfile(\n  STRINGS\n  ${PROJECT_SOURCE_DIR}/configure.ac\n  configure_lines\n  LIMIT_COUNT\n    50 # Read only the first 50 lines of the file\n)\n\nset(\n  SEARCHED_VARIABLES\n  \"pcre2_major\"\n  \"pcre2_minor\"\n  \"pcre2_prerelease\"\n  \"pcre2_date\"\n  \"libpcre2_posix_version\"\n  \"libpcre2_8_version\"\n  \"libpcre2_16_version\"\n  \"libpcre2_32_version\"\n)\nforeach(configure_line ${configure_lines})\n  foreach(substitution_variable ${SEARCHED_VARIABLES})\n    string(TOUPPER ${substitution_variable} substitution_variable_upper)\n    if(NOT DEFINED ${substitution_variable_upper})\n      if(\"${configure_line}\" MATCHES \"m4_define\\\\(${substitution_variable}, *\\\\[(.*)\\\\]\")\n        set(${substitution_variable_upper} \"${CMAKE_MATCH_1}\")\n      endif()\n    endif()\n  endforeach()\nendforeach()\n\nmacro(PARSE_LIB_VERSION variable_prefix)\n  string(REPLACE \":\" \";\" ${variable_prefix}_VERSION_LIST ${${variable_prefix}_VERSION})\n  list(GET ${variable_prefix}_VERSION_LIST 0 ${variable_prefix}_VERSION_CURRENT)\n  list(GET ${variable_prefix}_VERSION_LIST 1 ${variable_prefix}_VERSION_REVISION)\n  list(GET ${variable_prefix}_VERSION_LIST 2 ${variable_prefix}_VERSION_AGE)\n\n  math(EXPR ${variable_prefix}_SOVERSION \"${${variable_prefix}_VERSION_CURRENT} - ${${variable_prefix}_VERSION_AGE}\")\n  math(EXPR ${variable_prefix}_MACHO_COMPATIBILITY_VERSION \"${${variable_prefix}_VERSION_CURRENT} + 1\")\n  math(EXPR ${variable_prefix}_MACHO_CURRENT_VERSION \"${${variable_prefix}_VERSION_CURRENT} + 1\")\n  set(\n    ${variable_prefix}_MACHO_CURRENT_VERSION\n    \"${${variable_prefix}_MACHO_CURRENT_VERSION}.${${variable_prefix}_VERSION_REVISION}}\"\n  )\n  set(\n    ${variable_prefix}_VERSION\n    \"${${variable_prefix}_SOVERSION}.${${variable_prefix}_VERSION_AGE}.${${variable_prefix}_VERSION_REVISION}\"\n  )\nendmacro()\n\nparse_lib_version(LIBPCRE2_POSIX)\nparse_lib_version(LIBPCRE2_8)\nparse_lib_version(LIBPCRE2_16)\nparse_lib_version(LIBPCRE2_32)\n\n# Output files\n\nconfigure_file(src/config-cmake.h.in ${PROJECT_BINARY_DIR}/src/config.h @ONLY)\n\nconfigure_file(src/pcre2.h.in ${PROJECT_BINARY_DIR}/interface/pcre2.h @ONLY)\nconfigure_file(src/pcre2posix.h ${PROJECT_BINARY_DIR}/interface/pcre2posix.h COPYONLY)\n\n# Configure the version script files.\n\nif(HAVE_VSCRIPT AND PCRE2_SYMVERS)\n  if(HAVE_VSCRIPT_NO_STAR)\n    set(PCRE2_EXTRA_LOCAL_SYMS \"\")\n  else()\n    set(PCRE2_EXTRA_LOCAL_SYMS \"  local: *;\")\n  endif()\n\n  configure_file(src/libpcre2-8.sym.in ${PROJECT_BINARY_DIR}/src/libpcre2-8.sym @ONLY)\n  configure_file(src/libpcre2-16.sym.in ${PROJECT_BINARY_DIR}/src/libpcre2-16.sym @ONLY)\n  configure_file(src/libpcre2-32.sym.in ${PROJECT_BINARY_DIR}/src/libpcre2-32.sym @ONLY)\n  configure_file(src/libpcre2-posix.sym.in ${PROJECT_BINARY_DIR}/src/libpcre2-posix.sym @ONLY)\nendif()\n\n# Character table generation\n\nif(REBUILD_CHARTABLES)\n  add_executable(pcre2_dftables src/pcre2_dftables.c)\n  add_custom_command(\n    OUTPUT ${PROJECT_BINARY_DIR}/src/pcre2_chartables.c\n    COMMAND pcre2_dftables\n    ARGS ${PROJECT_BINARY_DIR}/src/pcre2_chartables.c\n    DEPENDS pcre2_dftables\n    COMMENT \"Generating character tables (pcre2_chartables.c) for current locale\"\n    VERBATIM\n  )\nelseif(NOT PCRE2_EBCDIC)\n  configure_file(\n    ${PROJECT_SOURCE_DIR}/src/pcre2_chartables.c.dist\n    ${PROJECT_BINARY_DIR}/src/pcre2_chartables.c\n    COPYONLY\n  )\nelseif(PCRE2_EBCDIC_NL25)\n  configure_file(\n    ${PROJECT_SOURCE_DIR}/src/pcre2_chartables.c.ebcdic-1047-nl25\n    ${PROJECT_BINARY_DIR}/src/pcre2_chartables.c\n    COPYONLY\n  )\nelse()\n  configure_file(\n    ${PROJECT_SOURCE_DIR}/src/pcre2_chartables.c.ebcdic-1047-nl15\n    ${PROJECT_BINARY_DIR}/src/pcre2_chartables.c\n    COPYONLY\n  )\nendif()\n\n# Source code\n\nset(PCRE2_HEADERS ${PROJECT_BINARY_DIR}/interface/pcre2.h)\n\nset(\n  PCRE2_SOURCES\n  src/pcre2_auto_possess.c\n  ${PROJECT_BINARY_DIR}/src/pcre2_chartables.c\n  src/pcre2_chkdint.c\n  src/pcre2_compile.c\n  src/pcre2_compile_cgroup.c\n  src/pcre2_compile_class.c\n  src/pcre2_config.c\n  src/pcre2_context.c\n  src/pcre2_convert.c\n  src/pcre2_dfa_match.c\n  src/pcre2_error.c\n  src/pcre2_extuni.c\n  src/pcre2_find_bracket.c\n  src/pcre2_jit_compile.c\n  src/pcre2_maketables.c\n  src/pcre2_match.c\n  src/pcre2_match_data.c\n  src/pcre2_match_next.c\n  src/pcre2_newline.c\n  src/pcre2_ord2utf.c\n  src/pcre2_pattern_info.c\n  src/pcre2_script_run.c\n  src/pcre2_serialize.c\n  src/pcre2_string_utils.c\n  src/pcre2_study.c\n  src/pcre2_substitute.c\n  src/pcre2_substring.c\n  src/pcre2_tables.c\n  src/pcre2_ucd.c\n  src/pcre2_valid_utf.c\n  src/pcre2_xclass.c\n)\n\nset(PCRE2POSIX_HEADERS ${PROJECT_BINARY_DIR}/interface/pcre2posix.h)\nset(PCRE2POSIX_SOURCES src/pcre2posix.c)\n\nif(MINGW AND BUILD_SHARED_LIBS)\n  if(EXISTS ${PROJECT_SOURCE_DIR}/pcre2.rc)\n    add_custom_command(\n      OUTPUT ${PROJECT_SOURCE_DIR}/pcre2.o PRE-LINK\n      COMMAND windres\n      ARGS pcre2.rc pcre2.o\n      WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}\n      COMMENT \"Using pcre2 coff info in mingw build\"\n    )\n    list(APPEND PCRE2_SOURCES ${PROJECT_SOURCE_DIR}/pcre2.o)\n  endif()\n\n  if(EXISTS ${PROJECT_SOURCE_DIR}/pcre2posix.rc)\n    add_custom_command(\n      OUTPUT ${PROJECT_SOURCE_DIR}/pcre2posix.o PRE-LINK\n      COMMAND windres\n      ARGS pcre2posix.rc pcre2posix.o\n      WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}\n      COMMENT \"Using pcre2posix coff info in mingw build\"\n    )\n    list(APPEND PCRE2POSIX_SOURCES ${PROJECT_SOURCE_DIR}/pcre2posix.o)\n  endif()\nendif()\n\nif(MSVC AND BUILD_SHARED_LIBS)\n  if(EXISTS ${PROJECT_SOURCE_DIR}/pcre2.rc)\n    list(APPEND PCRE2_SOURCES pcre2.rc)\n  endif()\n\n  if(EXISTS ${PROJECT_SOURCE_DIR}/pcre2posix.rc)\n    list(APPEND PCRE2POSIX_SOURCES pcre2posix.rc)\n  endif()\nendif()\n\n# Build setup\n\nadd_compile_definitions(HAVE_CONFIG_H)\n\nif(PCRE2_DEBUG STREQUAL \"IfDebugBuild\")\n  add_compile_definitions(\"$<$<CONFIG:Debug>:PCRE2_DEBUG>\")\nelseif(PCRE2_DEBUG)\n  add_compile_definitions(\"PCRE2_DEBUG\")\nendif()\n\nif(MSVC)\n  add_compile_definitions(_CRT_SECURE_NO_DEPRECATE _CRT_SECURE_NO_WARNINGS)\nendif()\n\n# Make sure to not link debug libs against release libs and vice versa.\nif(WIN32)\n  set(CMAKE_DEBUG_POSTFIX \"d\")\nendif()\n\nset(TARGETS)\nset(DLL_PDB_FILES)\nset(DLL_PDB_DEBUG_FILES)\n\n# 8-bit library\n\nif(PCRE2_BUILD_PCRE2_8)\n  if(BUILD_STATIC_LIBS)\n    add_library(pcre2-8-static STATIC ${PCRE2_HEADERS} ${PCRE2_SOURCES})\n    set_target_properties(\n      pcre2-8-static\n      PROPERTIES\n        COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8\n        MACHO_COMPATIBILITY_VERSION \"${LIBPCRE2_8_MACHO_COMPATIBILITY_VERSION}\"\n        MACHO_CURRENT_VERSION \"${LIBPCRE2_8_MACHO_CURRENT_VERSION}\"\n        VERSION ${LIBPCRE2_8_VERSION}\n        SOVERSION ${LIBPCRE2_8_SOVERSION}\n    )\n    target_compile_definitions(pcre2-8-static PUBLIC PCRE2_STATIC)\n    target_include_directories(\n      pcre2-8-static\n      PUBLIC \"$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/interface>\" \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\"\n    )\n    if(REQUIRE_PTHREAD)\n      target_link_libraries(pcre2-8-static Threads::Threads)\n    endif()\n    list(APPEND TARGETS pcre2-8-static)\n    add_library(pcre2-posix-static STATIC ${PCRE2POSIX_HEADERS} ${PCRE2POSIX_SOURCES})\n    set_target_properties(\n      pcre2-posix-static\n      PROPERTIES\n        COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8\n        MACHO_COMPATIBILITY_VERSION \"${LIBPCRE2_POSIX_MACHO_COMPATIBILITY_VERSION}\"\n        MACHO_CURRENT_VERSION \"${LIBPCRE2_POSIX_MACHO_CURRENT_VERSION}\"\n        VERSION ${LIBPCRE2_POSIX_VERSION}\n        SOVERSION ${LIBPCRE2_POSIX_SOVERSION}\n    )\n    target_link_libraries(pcre2-posix-static pcre2-8-static)\n    target_include_directories(\n      pcre2-posix-static\n      PUBLIC \"$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/interface>\" \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\"\n    )\n    list(APPEND TARGETS pcre2-posix-static)\n\n    if(MSVC)\n      set_target_properties(pcre2-8-static PROPERTIES OUTPUT_NAME pcre2-8-static)\n      set_target_properties(pcre2-posix-static PROPERTIES OUTPUT_NAME pcre2-posix-static)\n    else()\n      set_target_properties(pcre2-8-static PROPERTIES OUTPUT_NAME pcre2-8)\n      set_target_properties(pcre2-posix-static PROPERTIES OUTPUT_NAME pcre2-posix)\n    endif()\n    if(PCRE2_STATIC_PIC)\n      set_target_properties(pcre2-8-static pcre2-posix-static PROPERTIES POSITION_INDEPENDENT_CODE 1)\n    endif()\n  endif()\n\n  if(BUILD_SHARED_LIBS)\n    add_library(pcre2-8-shared SHARED ${PCRE2_HEADERS} ${PCRE2_SOURCES})\n    target_include_directories(\n      pcre2-8-shared\n      PUBLIC \"$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/interface>\" \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\"\n    )\n    set_target_properties(\n      pcre2-8-shared\n      PROPERTIES\n        COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8\n        MACHO_COMPATIBILITY_VERSION \"${LIBPCRE2_8_MACHO_COMPATIBILITY_VERSION}\"\n        MACHO_CURRENT_VERSION \"${LIBPCRE2_8_MACHO_CURRENT_VERSION}\"\n        VERSION ${LIBPCRE2_8_VERSION}\n        SOVERSION ${LIBPCRE2_8_SOVERSION}\n        OUTPUT_NAME pcre2-8\n    )\n    if(REQUIRE_PTHREAD)\n      target_link_libraries(pcre2-8-shared Threads::Threads)\n    endif()\n    if(HAVE_VSCRIPT AND PCRE2_SYMVERS)\n      target_link_options(pcre2-8-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/src/libpcre2-8.sym)\n      set_target_properties(pcre2-8-shared PROPERTIES LINK_DEPENDS ${PROJECT_BINARY_DIR}/src/libpcre2-8.sym)\n    endif()\n    list(APPEND TARGETS pcre2-8-shared)\n    list(APPEND DLL_PDB_FILES $<TARGET_PDB_FILE_DIR:pcre2-8-shared>/pcre2-8.pdb)\n    list(APPEND DLL_PDB_DEBUG_FILES $<TARGET_PDB_FILE_DIR:pcre2-8-shared>/pcre2-8d.pdb)\n\n    add_library(pcre2-posix-shared SHARED ${PCRE2POSIX_HEADERS} ${PCRE2POSIX_SOURCES})\n    target_include_directories(\n      pcre2-posix-shared\n      PUBLIC \"$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/interface>\" \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\"\n    )\n    set_target_properties(\n      pcre2-posix-shared\n      PROPERTIES\n        COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8\n        MACHO_COMPATIBILITY_VERSION \"${LIBPCRE2_POSIX_MACHO_COMPATIBILITY_VERSION}\"\n        MACHO_CURRENT_VERSION \"${LIBPCRE2_POSIX_MACHO_CURRENT_VERSION}\"\n        VERSION ${LIBPCRE2_POSIX_VERSION}\n        SOVERSION ${LIBPCRE2_POSIX_SOVERSION}\n        OUTPUT_NAME pcre2-posix\n    )\n    if(HAVE_VSCRIPT AND PCRE2_SYMVERS)\n      target_link_options(pcre2-posix-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/src/libpcre2-posix.sym)\n      set_target_properties(pcre2-posix-shared PROPERTIES LINK_DEPENDS ${PROJECT_BINARY_DIR}/src/libpcre2-posix.sym)\n    endif()\n    target_compile_definitions(pcre2-posix-shared PUBLIC PCRE2POSIX_SHARED)\n    target_link_libraries(pcre2-posix-shared pcre2-8-shared)\n    list(APPEND TARGETS pcre2-posix-shared)\n    list(APPEND DLL_PDB_FILES $<TARGET_PDB_FILE_DIR:pcre2-posix-shared>/pcre2-posix.pdb)\n    list(APPEND DLL_PDB_DEBUG_FILES $<TARGET_PDB_FILE_DIR:pcre2-posix-shared>/pcre2-posixd.pdb)\n\n    if(MINGW)\n      if(NON_STANDARD_LIB_PREFIX)\n        set_target_properties(pcre2-8-shared pcre2-posix-shared PROPERTIES PREFIX \"\")\n      endif()\n      if(NON_STANDARD_LIB_SUFFIX)\n        set_target_properties(pcre2-8-shared pcre2-posix-shared PROPERTIES SUFFIX \"-0.dll\")\n      endif()\n    endif()\n  endif()\n\n  if(BUILD_STATIC_LIBS)\n    add_library(pcre2-8 ALIAS pcre2-8-static)\n    add_library(pcre2-posix ALIAS pcre2-posix-static)\n  else()\n    add_library(pcre2-8 ALIAS pcre2-8-shared)\n    add_library(pcre2-posix ALIAS pcre2-posix-shared)\n  endif()\nendif()\n\n# 16-bit library\n\nif(PCRE2_BUILD_PCRE2_16)\n  if(BUILD_STATIC_LIBS)\n    add_library(pcre2-16-static STATIC ${PCRE2_HEADERS} ${PCRE2_SOURCES})\n    target_include_directories(\n      pcre2-16-static\n      PUBLIC \"$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/interface>\" \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\"\n    )\n    set_target_properties(\n      pcre2-16-static\n      PROPERTIES\n        COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16\n        MACHO_COMPATIBILITY_VERSION \"${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}\"\n        MACHO_CURRENT_VERSION \"${LIBPCRE2_32_MACHO_CURRENT_VERSION}\"\n        VERSION ${LIBPCRE2_16_VERSION}\n        SOVERSION ${LIBPCRE2_16_SOVERSION}\n    )\n    target_compile_definitions(pcre2-16-static PUBLIC PCRE2_STATIC)\n    if(REQUIRE_PTHREAD)\n      target_link_libraries(pcre2-16-static Threads::Threads)\n    endif()\n    list(APPEND TARGETS pcre2-16-static)\n\n    if(MSVC)\n      set_target_properties(pcre2-16-static PROPERTIES OUTPUT_NAME pcre2-16-static)\n    else()\n      set_target_properties(pcre2-16-static PROPERTIES OUTPUT_NAME pcre2-16)\n    endif()\n    if(PCRE2_STATIC_PIC)\n      set_target_properties(pcre2-16-static PROPERTIES POSITION_INDEPENDENT_CODE 1)\n    endif()\n  endif()\n\n  if(BUILD_SHARED_LIBS)\n    add_library(pcre2-16-shared SHARED ${PCRE2_HEADERS} ${PCRE2_SOURCES})\n    target_include_directories(\n      pcre2-16-shared\n      PUBLIC \"$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/interface>\" \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\"\n    )\n    set_target_properties(\n      pcre2-16-shared\n      PROPERTIES\n        COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=16\n        MACHO_COMPATIBILITY_VERSION \"${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}\"\n        MACHO_CURRENT_VERSION \"${LIBPCRE2_32_MACHO_CURRENT_VERSION}\"\n        VERSION ${LIBPCRE2_16_VERSION}\n        SOVERSION ${LIBPCRE2_16_SOVERSION}\n        OUTPUT_NAME pcre2-16\n    )\n    if(REQUIRE_PTHREAD)\n      target_link_libraries(pcre2-16-shared Threads::Threads)\n    endif()\n    if(HAVE_VSCRIPT AND PCRE2_SYMVERS)\n      target_link_options(pcre2-16-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/src/libpcre2-16.sym)\n      set_target_properties(pcre2-16-shared PROPERTIES LINK_DEPENDS ${PROJECT_BINARY_DIR}/src/libpcre2-16.sym)\n    endif()\n    list(APPEND TARGETS pcre2-16-shared)\n    list(APPEND DLL_PDB_FILES $<TARGET_PDB_FILE_DIR:pcre2-16-shared>/pcre2-16.pdb)\n    list(APPEND DLL_PDB_DEBUG_FILES $<TARGET_PDB_FILE_DIR:pcre2-16-shared>/pcre2-16d.pdb)\n\n    if(MINGW)\n      if(NON_STANDARD_LIB_PREFIX)\n        set_target_properties(pcre2-16-shared PROPERTIES PREFIX \"\")\n      endif()\n      if(NON_STANDARD_LIB_SUFFIX)\n        set_target_properties(pcre2-16-shared PROPERTIES SUFFIX \"-0.dll\")\n      endif()\n    endif()\n  endif()\n\n  if(BUILD_STATIC_LIBS)\n    add_library(pcre2-16 ALIAS pcre2-16-static)\n  else()\n    add_library(pcre2-16 ALIAS pcre2-16-shared)\n  endif()\nendif()\n\n# 32-bit library\n\nif(PCRE2_BUILD_PCRE2_32)\n  if(BUILD_STATIC_LIBS)\n    add_library(pcre2-32-static STATIC ${PCRE2_HEADERS} ${PCRE2_SOURCES})\n    target_include_directories(\n      pcre2-32-static\n      PUBLIC \"$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/interface>\" \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\"\n    )\n    set_target_properties(\n      pcre2-32-static\n      PROPERTIES\n        COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32\n        MACHO_COMPATIBILITY_VERSION \"${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}\"\n        MACHO_CURRENT_VERSION \"${LIBPCRE2_32_MACHO_CURRENT_VERSION}\"\n        VERSION ${LIBPCRE2_32_VERSION}\n        SOVERSION ${LIBPCRE2_32_SOVERSION}\n    )\n    target_compile_definitions(pcre2-32-static PUBLIC PCRE2_STATIC)\n    if(REQUIRE_PTHREAD)\n      target_link_libraries(pcre2-32-static Threads::Threads)\n    endif()\n    list(APPEND TARGETS pcre2-32-static)\n\n    if(MSVC)\n      set_target_properties(pcre2-32-static PROPERTIES OUTPUT_NAME pcre2-32-static)\n    else()\n      set_target_properties(pcre2-32-static PROPERTIES OUTPUT_NAME pcre2-32)\n    endif()\n    if(PCRE2_STATIC_PIC)\n      set_target_properties(pcre2-32-static PROPERTIES POSITION_INDEPENDENT_CODE 1)\n    endif()\n  endif()\n\n  if(BUILD_SHARED_LIBS)\n    add_library(pcre2-32-shared SHARED ${PCRE2_HEADERS} ${PCRE2_SOURCES})\n    target_include_directories(\n      pcre2-32-shared\n      PUBLIC \"$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/interface>\" \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\"\n    )\n    set_target_properties(\n      pcre2-32-shared\n      PROPERTIES\n        COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=32\n        MACHO_COMPATIBILITY_VERSION \"${LIBPCRE2_32_MACHO_COMPATIBILITY_VERSION}\"\n        MACHO_CURRENT_VERSION \"${LIBPCRE2_32_MACHO_CURRENT_VERSION}\"\n        VERSION ${LIBPCRE2_32_VERSION}\n        SOVERSION ${LIBPCRE2_32_SOVERSION}\n        OUTPUT_NAME pcre2-32\n    )\n    if(REQUIRE_PTHREAD)\n      target_link_libraries(pcre2-32-shared Threads::Threads)\n    endif()\n    if(HAVE_VSCRIPT AND PCRE2_SYMVERS)\n      target_link_options(pcre2-32-shared PRIVATE -Wl,${VSCRIPT_FLAG},${PROJECT_BINARY_DIR}/src/libpcre2-32.sym)\n      set_target_properties(pcre2-32-shared PROPERTIES LINK_DEPENDS ${PROJECT_BINARY_DIR}/src/libpcre2-32.sym)\n    endif()\n    list(APPEND TARGETS pcre2-32-shared)\n    list(APPEND DLL_PDB_FILES $<TARGET_PDB_FILE_DIR:pcre2-32-shared>/pcre2-32.pdb)\n    list(APPEND DLL_PDB_DEBUG_FILES $<TARGET_PDB_FILE_DIR:pcre2-32-shared>/pcre2-32d.pdb)\n\n    if(MINGW)\n      if(NON_STANDARD_LIB_PREFIX)\n        set_target_properties(pcre2-32-shared PROPERTIES PREFIX \"\")\n      endif()\n      if(NON_STANDARD_LIB_SUFFIX)\n        set_target_properties(pcre2-32-shared PROPERTIES SUFFIX \"-0.dll\")\n      endif()\n    endif()\n  endif()\n\n  if(BUILD_STATIC_LIBS)\n    add_library(pcre2-32 ALIAS pcre2-32-static)\n  else()\n    add_library(pcre2-32 ALIAS pcre2-32-shared)\n  endif()\nendif()\n\n# Generate pkg-config files\n\nset(PACKAGE_VERSION \"${PCRE2_MAJOR}.${PCRE2_MINOR}\")\nset(prefix ${CMAKE_INSTALL_PREFIX})\nset(exec_prefix \"\\${prefix}\")\nset(libdir \"\\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}\")\nset(includedir \"\\${prefix}/include\")\n\nset(LIB_POSTFIX \"\")\nif(WIN32 AND (CMAKE_BUILD_TYPE MATCHES Debug))\n  set(LIB_POSTFIX ${CMAKE_DEBUG_POSTFIX})\nendif()\n\nset(PCRE2_STATIC_CFLAG \"\")\nif(NOT BUILD_SHARED_LIBS)\n  set(PCRE2_STATIC_CFLAG \"-DPCRE2_STATIC\")\nendif()\n\nset(PCRE2POSIX_CFLAG \"\")\nif(BUILD_SHARED_LIBS)\n  set(PCRE2POSIX_CFLAG \"-DPCRE2POSIX_SHARED\")\nendif()\n\nset(PTHREAD_CFLAGS \"\")\nset(PTHREAD_LIBS \"\")\nif(REQUIRE_PTHREAD)\n  set(PTHREAD_CFLAGS \"$<TARGET_PROPERTY:Threads::Threads,INTERFACE_COMPILE_OPTIONS>\")\n  set(PTHREAD_LIBS \"$<TARGET_PROPERTY:Threads::Threads,INTERFACE_LINK_LIBRARIES>\")\nendif()\n\nif(PCRE2_BUILD_PCRE2_8)\n  configure_file(libpcre2-posix.pc.in libpcre2-posix.pc.generator @ONLY)\n  file(GENERATE OUTPUT libpcre2-posix.pc INPUT \"${PROJECT_BINARY_DIR}/libpcre2-posix.pc.generator\")\n  list(APPEND pkg_config_files \"${PROJECT_BINARY_DIR}/libpcre2-posix.pc\")\n  configure_file(libpcre2-8.pc.in libpcre2-8.pc.generator @ONLY)\n  file(GENERATE OUTPUT libpcre2-8.pc INPUT \"${PROJECT_BINARY_DIR}/libpcre2-8.pc.generator\")\n  list(APPEND pkg_config_files \"${PROJECT_BINARY_DIR}/libpcre2-8.pc\")\n  set(enable_pcre2_8 \"yes\")\nelse()\n  set(enable_pcre2_8 \"no\")\nendif()\n\nif(PCRE2_BUILD_PCRE2_16)\n  configure_file(libpcre2-16.pc.in libpcre2-16.pc.generator @ONLY)\n  file(GENERATE OUTPUT libpcre2-16.pc INPUT \"${PROJECT_BINARY_DIR}/libpcre2-16.pc.generator\")\n  list(APPEND pkg_config_files \"${PROJECT_BINARY_DIR}/libpcre2-16.pc\")\n  set(enable_pcre2_16 \"yes\")\nelse()\n  set(enable_pcre2_16 \"no\")\nendif()\n\nif(PCRE2_BUILD_PCRE2_32)\n  configure_file(libpcre2-32.pc.in libpcre2-32.pc.generator @ONLY)\n  file(GENERATE OUTPUT libpcre2-32.pc INPUT \"${PROJECT_BINARY_DIR}/libpcre2-32.pc.generator\")\n  list(APPEND pkg_config_files \"${PROJECT_BINARY_DIR}/libpcre2-32.pc\")\n  set(enable_pcre2_32 \"yes\")\nelse()\n  set(enable_pcre2_32 \"no\")\nendif()\n\nconfigure_file(pcre2-config.in pcre2-config @ONLY NEWLINE_STYLE LF)\n\n# Executables\n\nif(PCRE2_BUILD_PCRE2GREP)\n  add_executable(pcre2grep src/pcre2grep.c)\n  set_property(TARGET pcre2grep PROPERTY COMPILE_DEFINITIONS PCRE2_CODE_UNIT_WIDTH=8)\n  list(APPEND TARGETS pcre2grep)\n  target_link_libraries(pcre2grep pcre2-posix ${PCRE2GREP_LIBS})\nendif()\n\n# Testing\n\nif(PCRE2_BUILD_TESTS)\n  enable_testing()\n\n  set(PCRE2TEST_SOURCES src/pcre2test.c)\n\n  set(PCRE2TEST_LINKER_FLAGS \"\")\n  if(MSVC)\n    # This is needed to avoid a stack overflow error in the standard tests. The\n    # flag should be indicated with a forward-slash instead of a hyphen, but\n    # then CMake treats it as a file path.\n    set(PCRE2TEST_LINKER_FLAGS -STACK:2500000)\n  endif()\n\n  add_executable(pcre2test ${PCRE2TEST_SOURCES})\n  list(APPEND TARGETS pcre2test)\n  if(PCRE2_BUILD_PCRE2_8)\n    list(APPEND PCRE2TEST_LIBS pcre2-posix pcre2-8)\n  endif()\n  if(PCRE2_BUILD_PCRE2_16)\n    list(APPEND PCRE2TEST_LIBS pcre2-16)\n  endif()\n  if(PCRE2_BUILD_PCRE2_32)\n    list(APPEND PCRE2TEST_LIBS pcre2-32)\n  endif()\n  target_link_libraries(pcre2test ${PCRE2TEST_LIBS} ${PCRE2TEST_LINKER_FLAGS})\n\n  if(PCRE2_BUILD_PCRE2_8)\n    add_executable(pcre2posix_test src/pcre2posix_test.c)\n    target_link_libraries(pcre2posix_test pcre2-posix pcre2-8)\n  endif()\n\n  if(PCRE2_SUPPORT_JIT)\n    add_executable(pcre2_jit_test src/pcre2_jit_test.c)\n    set(PCRE2_JIT_TEST_LIBS)\n    if(PCRE2_BUILD_PCRE2_8)\n      list(APPEND PCRE2_JIT_TEST_LIBS pcre2-8)\n    endif()\n    if(PCRE2_BUILD_PCRE2_16)\n      list(APPEND PCRE2_JIT_TEST_LIBS pcre2-16)\n    endif()\n    if(PCRE2_BUILD_PCRE2_32)\n      list(APPEND PCRE2_JIT_TEST_LIBS pcre2-32)\n    endif()\n    target_link_libraries(pcre2_jit_test ${PCRE2_JIT_TEST_LIBS})\n  endif()\n\n  # =================================================\n  # Write out a CTest configuration file\n  #\n  file(\n    WRITE\n    ${PROJECT_BINARY_DIR}/CTestCustom.ctest\n    \"# This is a generated file.\nMESSAGE(\\\"When testing is complete, review test output in the\n\\\\\\\"${PROJECT_BINARY_DIR}/Testing/Temporary\\\\\\\" folder.\\\")\nMESSAGE(\\\" \\\")\n\"\n  )\n\n  file(\n    WRITE\n    ${PROJECT_BINARY_DIR}/pcre2_test.sh\n    \"#! /bin/sh\n# This is a generated file.\nsrcdir=${PROJECT_SOURCE_DIR}\npcre2test=${PROJECT_BINARY_DIR}/pcre2test\ntest -z \\\"$CMAKE_CONFIG_TYPE\\\" || pcre2test=${PROJECT_BINARY_DIR}/$CMAKE_CONFIG_TYPE/pcre2test\n. ${PROJECT_SOURCE_DIR}/RunTest\nif test \\\"$?\\\" != \\\"0\\\"; then exit 1; fi\n# End\n\"\n  )\n\n  if(UNIX)\n    add_test(pcre2_test sh ${PROJECT_BINARY_DIR}/pcre2_test.sh)\n  endif()\n\n  if(PCRE2_BUILD_PCRE2GREP)\n    file(\n      WRITE\n      ${PROJECT_BINARY_DIR}/pcre2_grep_test.sh\n      \"#! /bin/sh\n# This is a generated file.\nsrcdir=${PROJECT_SOURCE_DIR}\npcre2grep=${PROJECT_BINARY_DIR}/pcre2grep\ntest -z \\\"$CMAKE_CONFIG_TYPE\\\" || pcre2grep=${PROJECT_BINARY_DIR}/$CMAKE_CONFIG_TYPE/pcre2grep\npcre2test=${PROJECT_BINARY_DIR}/pcre2test\ntest -z \\\"$CMAKE_CONFIG_TYPE\\\" || pcre2test=${PROJECT_BINARY_DIR}/$CMAKE_CONFIG_TYPE/pcre2test\n. ${PROJECT_SOURCE_DIR}/RunGrepTest\nif test \\\"$?\\\" != \\\"0\\\"; then exit 1; fi\n# End\n\"\n    )\n\n    if(UNIX)\n      add_test(pcre2_grep_test sh ${PROJECT_BINARY_DIR}/pcre2_grep_test.sh)\n\n      if(PCRE2_EBCDIC)\n        # The grep tests currently fail in EBCDIC mode because the test data\n        # files are in ASCII. This could be fixed properly, but for now, we\n        # have very few EBCDIC users and the pcre2grep utility is hardly even\n        # part of the official project artifacts.\n        set_property(TEST pcre2_grep_test PROPERTY WILL_FAIL TRUE)\n      endif()\n    endif()\n  endif()\n\n  if(WIN32)\n    # Provide environment for executing the bat file version of RunTest\n    file(TO_NATIVE_PATH ${PROJECT_SOURCE_DIR} winsrc)\n    file(TO_NATIVE_PATH ${PROJECT_BINARY_DIR} winbin)\n\n    file(\n      WRITE\n      ${PROJECT_BINARY_DIR}/pcre2_test.bat\n      \"\\@REM This is a generated file.\n\\@echo off\nsetlocal\nSET srcdir=\\\"${winsrc}\\\"\nSET pcre2test=\\\"${winbin}\\\\pcre2test.exe\\\"\nif not [%CMAKE_CONFIG_TYPE%]==[] SET pcre2test=\\\"${winbin}\\\\%CMAKE_CONFIG_TYPE%\\\\pcre2test.exe\\\"\ncall %srcdir%\\\\RunTest.bat\nif errorlevel 1 exit /b 1\necho RunTest.bat tests successfully completed\n\"\n    )\n\n    add_test(NAME pcre2_test_bat COMMAND pcre2_test.bat)\n    set_tests_properties(pcre2_test_bat PROPERTIES PASS_REGULAR_EXPRESSION \"RunTest\\\\.bat tests successfully completed\")\n\n    if(PCRE2_BUILD_PCRE2GREP)\n      file(\n        WRITE\n        ${PROJECT_BINARY_DIR}/pcre2_grep_test.bat\n        \"\\@REM This is a generated file.\n\\@echo off\nsetlocal\nSET srcdir=\\\"${winsrc}\\\"\nSET pcre2test=\\\"${winbin}\\\\pcre2test.exe\\\"\nif not [%CMAKE_CONFIG_TYPE%]==[] SET pcre2test=\\\"${winbin}\\\\%CMAKE_CONFIG_TYPE%\\\\pcre2test.exe\\\"\nSET pcre2grep=\\\"${winbin}\\\\pcre2grep.exe\\\"\nif not [%CMAKE_CONFIG_TYPE%]==[] SET pcre2grep=\\\"${winbin}\\\\%CMAKE_CONFIG_TYPE%\\\\pcre2grep.exe\\\"\ncall %srcdir%\\\\RunGrepTest.bat\nif errorlevel 1 exit /b 1\necho RunGrepTest.bat tests successfully completed\n\"\n      )\n\n      add_test(NAME pcre2_grep_test_bat COMMAND pcre2_grep_test.bat)\n      set_tests_properties(\n        pcre2_grep_test_bat\n        PROPERTIES PASS_REGULAR_EXPRESSION \"RunGrepTest\\\\.bat tests successfully completed\"\n      )\n    endif()\n\n    if(DEFINED ENV{OSTYPE})\n      if(\"$ENV{OSTYPE}\" STREQUAL \"msys\")\n        set(MSYS2 TRUE)\n      endif()\n    endif()\n    if(MSYS2)\n      # Both the sh and bat file versions of RunTest are run if make test is used\n      # in msys\n      add_test(pcre2_test_sh sh.exe ${PROJECT_BINARY_DIR}/pcre2_test.sh)\n      if(PCRE2_BUILD_PCRE2GREP)\n        add_test(pcre2_grep_test sh.exe ${PROJECT_BINARY_DIR}/pcre2_grep_test.sh)\n      endif()\n    endif()\n  endif()\n\n  # Changed to accommodate testing whichever location was just built\n\n  if(PCRE2_SUPPORT_JIT)\n    add_test(pcre2_jit_test pcre2_jit_test)\n  endif()\n\n  if(PCRE2_BUILD_PCRE2_8)\n    add_test(pcre2posix_test pcre2posix_test)\n  endif()\nendif()\n\n# Installation\n\nset(CMAKE_INSTALL_ALWAYS 1)\n\ninstall(\n  TARGETS ${TARGETS}\n  EXPORT pcre2-targets\n  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}\n  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}\n  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}\n)\ninstall(EXPORT pcre2-targets DESTINATION ${PCRE2_INSTALL_CMAKEDIR} NAMESPACE pcre2::)\ninstall(FILES ${pkg_config_files} DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)\ninstall(\n  FILES \"${PROJECT_BINARY_DIR}/pcre2-config\"\n  DESTINATION ${CMAKE_INSTALL_BINDIR}\n  # Set 0755 permissions\n  PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE\n)\n\ninstall(FILES ${PCRE2_HEADERS} ${PCRE2POSIX_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})\n\n# CMake config files.\nset(PCRE2_CONFIG_IN ${PROJECT_SOURCE_DIR}/cmake/pcre2-config.cmake.in)\nset(PCRE2_CONFIG_OUT ${PROJECT_BINARY_DIR}/cmake/pcre2-config.cmake)\nconfigure_package_config_file(${PCRE2_CONFIG_IN} ${PCRE2_CONFIG_OUT} INSTALL_DESTINATION ${PCRE2_INSTALL_CMAKEDIR})\nset(PCRE2_CONFIG_VERSION_OUT ${PROJECT_BINARY_DIR}/cmake/pcre2-config-version.cmake)\nwrite_basic_package_version_file(\n  ${PCRE2_CONFIG_VERSION_OUT}\n  VERSION ${PCRE2_MAJOR}.${PCRE2_MINOR}.0\n  COMPATIBILITY SameMajorVersion\n)\ninstall(FILES ${PCRE2_CONFIG_OUT} ${PCRE2_CONFIG_VERSION_OUT} DESTINATION ${PCRE2_INSTALL_CMAKEDIR})\n\nfile(GLOB html ${PROJECT_SOURCE_DIR}/doc/html/*.html ${PROJECT_SOURCE_DIR}/doc/html/*.txt)\nfile(\n  GLOB txts\n  ${PROJECT_SOURCE_DIR}/doc/*.txt\n  AUTHORS.md\n  COPYING\n  ChangeLog\n  LICENCE.md\n  NEWS\n  README\n  SECURITY.md\n)\nfile(GLOB man1 ${PROJECT_SOURCE_DIR}/doc/*.1)\nfile(GLOB man3 ${PROJECT_SOURCE_DIR}/doc/*.3)\n\ninstall(FILES ${man1} DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)\ninstall(FILES ${man3} DESTINATION ${CMAKE_INSTALL_MANDIR}/man3)\ninstall(FILES ${txts} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/pcre2)\ninstall(FILES ${html} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/pcre2/html)\n\nif(MSVC AND INSTALL_MSVC_PDB)\n  install(FILES ${DLL_PDB_FILES} DESTINATION ${CMAKE_INSTALL_BINDIR} CONFIGURATIONS RelWithDebInfo)\n  install(FILES ${DLL_PDB_DEBUG_FILES} DESTINATION ${CMAKE_INSTALL_BINDIR} CONFIGURATIONS Debug)\nendif()\n\n# Help, only for nice output\nif(BUILD_STATIC_LIBS)\n  set(BUILD_STATIC_LIBS ON)\nelse()\n  set(BUILD_STATIC_LIBS OFF)\nendif()\n\nif(PCRE2_HEAP_MATCH_RECURSE)\n  message(WARNING \"HEAP_MATCH_RECURSE is obsolete and does nothing.\")\nendif()\n\nif(PCRE2_SHOW_REPORT)\n  message(STATUS \"\")\n  message(STATUS \"\")\n  message(STATUS \"PCRE2-${PCRE2_MAJOR}.${PCRE2_MINOR} configuration summary:\")\n  message(STATUS \"\")\n  message(STATUS \"  Install prefix .................... : ${CMAKE_INSTALL_PREFIX}\")\n  message(STATUS \"  C compiler ........................ : ${CMAKE_C_COMPILER}\")\n\n  set(CFSP \"\")\n  if(CMAKE_C_FLAGS)\n    set(CFSP \" \")\n  endif()\n  if(CMAKE_CONFIGURATION_TYPES)\n    foreach(config IN LISTS CMAKE_CONFIGURATION_TYPES)\n      string(TOUPPER \"${config}\" buildtype)\n      string(LENGTH \" (${config})\" buildtypelen)\n      math(EXPR dotslen \"18 - ${buildtypelen}\")\n      string(REPEAT \".\" ${dotslen} dots)\n      message(STATUS \"  C compiler flags (${config}) ${dots} : ${CMAKE_C_FLAGS}${CFSP}${CMAKE_C_FLAGS_${buildtype}}\")\n    endforeach()\n  else()\n    string(TOUPPER \"${CMAKE_BUILD_TYPE}\" buildtype)\n    if(buildtype STREQUAL \"\")\n      set(CFBLD \"\")\n    else()\n      set(CFBLD \"${CMAKE_C_FLAGS_${buildtype}}\")\n    endif()\n    message(STATUS \"  C compiler flags .................. : ${CMAKE_C_FLAGS}${CFSP}${CFBLD}\")\n  endif()\n\n  message(STATUS \"\")\n  if(CMAKE_CONFIGURATION_TYPES)\n    message(STATUS \"  Build configurations .............. : ${CMAKE_CONFIGURATION_TYPES}\")\n  else()\n    message(STATUS \"  Build type ........................ : ${CMAKE_BUILD_TYPE}\")\n  endif()\n  message(STATUS \"  Build 8 bit pcre2 library ......... : ${PCRE2_BUILD_PCRE2_8}\")\n  message(STATUS \"  Build 16 bit pcre2 library ........ : ${PCRE2_BUILD_PCRE2_16}\")\n  message(STATUS \"  Build 32 bit pcre2 library ........ : ${PCRE2_BUILD_PCRE2_32}\")\n  message(STATUS \"  Include debugging code ............ : ${PCRE2_DEBUG}\")\n  message(STATUS \"  Enable JIT compiling support ...... : ${PCRE2_SUPPORT_JIT}\")\n  message(STATUS \"  Use SELinux allocator in JIT ...... : ${PCRE2_SUPPORT_JIT_SEALLOC}\")\n  message(STATUS \"  Enable Unicode support ............ : ${PCRE2_SUPPORT_UNICODE}\")\n  message(STATUS \"  Newline char/sequence ............. : ${PCRE2_NEWLINE}\")\n  message(STATUS \"  \\\\R matches only ANYCRLF ........... : ${PCRE2_SUPPORT_BSR_ANYCRLF}\")\n  message(STATUS \"  \\\\C is disabled .................... : ${PCRE2_NEVER_BACKSLASH_C}\")\n\n  if(NOT EBCDIC)\n    set(EBCDIC_NL_CODE \"n/a\")\n  elseif(EBCDIC_NL25)\n    set(EBCDIC_NL_CODE \"0x25\")\n  else()\n    set(EBCDIC_NL_CODE \"0x15\")\n  endif()\n  message(STATUS \"  EBCDIC coding ..................... : ${EBCDIC}\")\n  message(STATUS \"  EBCDIC code for NL ................ : ${EBCDIC_NL_CODE}\")\n  message(STATUS \"  EBCDIC coding ignoring compiler ... : ${PCRE2_EBCDIC_IGNORING_COMPILER}\")\n  message(STATUS \"  Rebuild char tables ............... : ${REBUILD_CHARTABLES}\")\n\n  message(STATUS \"  Internal link size ................ : ${PCRE2_LINK_SIZE}\")\n  message(STATUS \"  Maximum variable lookbehind ....... : ${PCRE2_MAX_VARLOOKBEHIND}\")\n  message(STATUS \"  Nested parentheses limit .......... : ${PCRE2_PARENS_NEST_LIMIT}\")\n  message(STATUS \"  Heap limit ........................ : ${PCRE2_HEAP_LIMIT}\")\n  message(STATUS \"  Match limit ....................... : ${PCRE2_MATCH_LIMIT}\")\n  message(STATUS \"  Match depth limit ................. : ${PCRE2_MATCH_LIMIT_DEPTH}\")\n  message(STATUS \"  Build shared libs ................. : ${BUILD_SHARED_LIBS}\")\n  if(NOT HAVE_VSCRIPT)\n    message(STATUS \"      with symbol versioning ........ : n/a\")\n  else()\n    message(STATUS \"      with symbol versioning ........ : ${PCRE2_SYMVERS}\")\n  endif()\n  message(STATUS \"  Build static libs ................. : ${BUILD_STATIC_LIBS}\")\n  message(STATUS \"      with PIC enabled .............. : ${PCRE2_STATIC_PIC}\")\n  message(STATUS \"  Build pcre2grep ................... : ${PCRE2_BUILD_PCRE2GREP}\")\n  message(STATUS \"  Enable JIT in pcre2grep ........... : ${PCRE2GREP_SUPPORT_JIT}\")\n  message(STATUS \"  Enable callouts in pcre2grep ...... : ${PCRE2GREP_SUPPORT_CALLOUT}\")\n  message(STATUS \"  Enable callout fork in pcre2grep .. : ${PCRE2GREP_SUPPORT_CALLOUT_FORK}\")\n  message(STATUS \"  Initial buffer size for pcre2grep . : ${PCRE2GREP_BUFSIZE}\")\n  message(STATUS \"  Maximum buffer size for pcre2grep . : ${PCRE2GREP_MAX_BUFSIZE}\")\n  message(STATUS \"  Build tests (implies pcre2test .... : ${PCRE2_BUILD_TESTS}\")\n  message(STATUS \"               and pcre2grep)\")\n  if(ZLIB_FOUND)\n    message(STATUS \"  Link pcre2grep with libz .......... : ${PCRE2_SUPPORT_LIBZ}\")\n  else()\n    message(STATUS \"  Link pcre2grep with libz .......... : Library not found\")\n  endif()\n  if(BZip2_FOUND)\n    message(STATUS \"  Link pcre2grep with libbz2 ........ : ${PCRE2_SUPPORT_LIBBZ2}\")\n  else()\n    message(STATUS \"  Link pcre2grep with libbz2 ........ : Library not found\")\n  endif()\n  if(Editline_FOUND)\n    message(STATUS \"  Link pcre2test with libeditline ... : ${PCRE2_SUPPORT_LIBEDIT}\")\n  else()\n    message(STATUS \"  Link pcre2test with libeditline ... : Library not found\")\n  endif()\n  if(Readline_FOUND)\n    message(STATUS \"  Link pcre2test with libreadline ... : ${PCRE2_SUPPORT_LIBREADLINE}\")\n  else()\n    message(STATUS \"  Link pcre2test with libreadline ... : Library not found\")\n  endif()\n  message(STATUS \"  Enable Valgrind support ........... : ${PCRE2_SUPPORT_VALGRIND}\")\n  if(PCRE2_DISABLE_PERCENT_ZT)\n    message(STATUS \"  Use %zu and %td ................... : OFF\")\n  else()\n    message(STATUS \"  Use %zu and %td ................... : AUTO\")\n  endif()\n\n  if(MINGW AND BUILD_SHARED_LIBS)\n    message(STATUS \"  Non-standard dll names (prefix) ... : ${NON_STANDARD_LIB_PREFIX}\")\n    message(STATUS \"  Non-standard dll names (suffix) ... : ${NON_STANDARD_LIB_SUFFIX}\")\n  endif()\n\n  if(MSVC)\n    message(STATUS \"  Install MSVC .pdb files ........... : ${INSTALL_MSVC_PDB}\")\n  endif()\n\n  message(STATUS \"\")\nendif()\n\n# end CMakeLists.txt\n"
  },
  {
    "path": "COPYING",
    "content": "PCRE2 LICENCE\n\nPlease see the file LICENCE in the PCRE2 distribution for licensing details.\n\nEnd\n"
  },
  {
    "path": "ChangeLog",
    "content": "Change Log for PCRE2\n--------------------\n\nBefore the move to GitHub, this was the only record of changes to PCRE2. Now\nthere is also the log of commit messages.\n\nInternal changes which are not visible to clients of the library are mostly not\nlisted here.\n\nVersion 10.48 xx-xxx-2026\n-------------------------\n\n...\n\n\nVersion 10.47 21-October-2025\n-----------------------------\n\n1. (#660, #655, #663) Expanded platforms tested by CI: FreeBSD, OpenBSD,\nSolaris, MSYS (Cygwin), S390x, PPC64le, ARMv7, AARCH64, RiscV.\n\n2. (#655) Made build clean of `/W3` warnings on MSVC. Further suppression of\nminor build warnings on other platforms (various commits).\n\n3. (#651) Added `--enable-Werror` flag to `./configure` to treat warnings as\nerrors (or `--enable-errwarn` for Solaris cc). Previously, you had to hackily\noverride the CPPFLAGS when calling make since you can't pass `-Werror` as a\nCFLAG into `./configure` (it breaks compiler feature detection).\n\n4. (#682) Added AM_MAINTAINER_MODE for Git tag releases. Users building with\nthe `./configure` script can check out the release tag using Git, which assigns\nthe current time as the modification time to each checked-out file. This caused\nAutoconf to attempt to regenerate the configure script.\n\n5. (#692) Add LICENSE file for sljit to the tarball release, to clarify that the\nsljit code is governed separately by the 2-clause BSD license.\n\n6. (#656, #695) Add full support for z/OS and native EBCDIC support. The z/OS\nsupport is tested nightly using the XLC and IBM-Clang compilers, with Autoconf\nand CMake. In addition, for test purposes, the EBCDIC support can now be enabled\non any platform using the new Autoconf `--enable-ebcdic-ignoring-compiler` and\nCMake `-DPCRE2_EBCDIC_IGNORING_COMPILER` options.\n\n7. (#700) Faster lookup of named capture groups during pattern compilation using\na hash table.\n\n8. (#697, #756, #778) Improvements to pcre2test to increase code coverage:\n-malloc argument; more detailed test assertions.\n\n9. (#705, #710, #737, #738) Powerful new feature: pattern recursion of\nthe form \"(?1(GROUP_NAME_OR_NUM,...))\" acts as a subroutine call which\nadditionally returns the listed capturing groups to the calling context.\n\n10. (#721) Add linker scripts to enable symbol versioning for the PCRE2 dynamic\nlibraries. Downstream Linux distributions may make use of this, or disable it\nwith the new Autoconf `--disable-symvers` and CMake `-DPCRE2_SYMVERS` options.\nCurrently, Linux, Solaris, and FreeBSD (GNU ld, LLVM lld, and Solaris ld) are\ntested and supported.\n\n11. (#733) New API function: pcre2_next_match(). This function makes it both\nsimpler and safer for clients to iterate over all matches in a subject. The\ndocumentation in `pcre2api` also provides improved guidance in the section\n\"Iterating over all matches\".\n\n12. (#739, #744, #753) Modernize the CMake build files, to use standard\ncommands to export the PCRE2 targets. This makes use of the\n\"$<BUILD_INTERFACE:...>\" and \"$<INSTALL_INTERFACE:...>\" expressions alongside\nthe built-in \"install(EXPORT...)\" command. This brings the CMake files in line\nwith the patches used by vcpkg to distribute PCRE2. The minimum CMake version\nremains 3.15.\n\n13. (#756) Improved error offsets and diagnostics for syntax errors during\npattern compilation.\n\n14. (#708, #729, #724, #731, #777) Various updates to Bazel and Zig\nbuild support.\n\n15. (#775) Added PCRE2_CONFIG_EFFECTIVE_LINKSIZE option to pcre2_config(), to\nreport the actual number of code units used in compiled patterns for recording\nstring lengths and offsets.\n\n16. (#801) Significant bugfix: Fix a crash in pcre2_callout_enumerate() which is\neasily reachable on any pattern that contains a Unicode character class. If your\napplication uses this function, please read the details for this change and\nevaluate its severity for your application.\n\n17. (#806, #807) Improved input validation for pcre2_substitute() used with\nPCRE2_SUBSTITUTE_MATCHED.\n\n18. (#817) Add support for $+ replacement to pcre2_substitute().\n\n19. (#818) New SIMD code generation in the JIT for AArch64.\n\n\nVersion 10.46 27-August-2025\n----------------------------\n\n1. (#771) (CVE-2025-58050) Security fix to prevent a read-past-the-end memory\nerror, of arbitrary length. An attacker-controlled regex pattern is required,\nand it cannot be triggered by providing crafted subject (match) text. The\n(*ACCEPT) and (*scs:) pattern features must be used together.\n\nRelease 10.44 and earlier are not affected.\n\nThis could have implications of denial-of-service or information disclosure,\nand could potentially be used to escalate other vulnerabilities in a system\n(such as information disclosure being used to escalate the severity of an\nunrelated bug in another system).\n\n\nVersion 10.45 05-February-2025\n------------------------------\n\n1. (#418) Change 6 of 10.44 broke 32-bit tests because pcre2test's reporting of\nmemory size was changed to the entire compiled data block, instead of just the\npattern and tables data, so as to align with the new length restriction.\nBecause the block's header contains pointers, this meant the pcre2test output\nwas different in 32-bit mode. A patch by Carlo reverts to the previous state\nand makes sure that any limit set by pcre2_set_max_pattern_compiled_length()\nalso avoids the internal struct overhead.\n\n2. (#416, #622) Updates to build.zig.\n\n3. (#427, et al.) Various fixes to pacify static analyzers.\n\n4. (#428) Add --posix-pattern-file to pcre2grep to allow processing of empty\npatterns through the -f option, as well as patterns that end in space\ncharacters, for compatibility with other grep tools.\n\n5. (4fa5b8bd) Fix a bug in the fuzz support quantifier-limiting code. It ignores\nstrings of more than 5 digits because they are necessarily numbers greater than\n65535, the largest legal quantifier. However, it wasn't ignoring non-significant\nleading zeros.\n\n6. (6d82f0cd) The case-independent processing of the letter-matching Unicode\nproperties Ll, Lt, and Lu have been changed to match Perl (which changed a while\nago). When caseless matching is in force, all three of these properties are now\ntreated as Lc (cased letter).\n\n7. (#433) The pcre2_jit_compile() function was updated by the addition of a new\noption PCRE2_JIT_TEST_ALLOC which, if called with a NULL first argument, tests\nnot only the availability of JIT, but also its ability to allocate executable\nmemory. Update pcre2test to use this support to extend the -C option.\n\n8. (75b1025a) The code for parsing Unicode property descriptions for \\p and \\P\nbeen changed as follows:\n\n  . White space etc. before ^ in a negated value such as \\p{ ^L } was not being\n    ignored.\n\n  . The code wouldn't have worked if PCRE2 was compiled for UTF-8 support\n    within an EBCDIC environment. Possibly nobody does this any more, but it\n    should now work.\n\n  . The documentation of the syntax of what can follow \\p and \\P has been\n    updated.\n\n9. (1c24ba01) There was an error in the table of lengths for parsed items for\nthe OPTIONS item, but fortuitously it could never have actually bitten. While\nfixing this, some other code that could never be obeyed was discovered and\nremoved.\n\n10. (674b6640) Removed some incorect optimization code from DFA matching that\nhas been there since PCRE1, but has just been found to cause a no match return\ninstead of a partial match in some cases. It involves partial matching when (*F)\nis present so is unlikely to have actually affected anyone.\n\n11. (b0f4ac17) Tidy the wording and formatting of some pcre2test error messages\nconcerned with bad modifiers. Also restrict single-letter modifier sequences to\nthe first item in a modifier list, as documented and always intended.\n\n12. (1415565c) An iterator at the end of many assertions can always be\nauto-possessified, but not at the end of variable-length lookbehinds. There was\na bug in the code that checks for such a lookbehind; it was looking only at the\nfirst branch, which is wrong because some branches can be fixed length when\nothers are not, for example (?<=AB|CD?). Now all branches are checked for\nvariability.\n\n13. (ead08288) Matching with pcre2_match() could give an incorrect result if a\nvariable-length lookbehind was used as the condition in a conditional group.\nThe condition could erroneously be treated as true if a branch matched but\noverran the current position. This bug was in the interpreter only; matching\nwith JIT was correct.\n\n14. (#443) Split out the sljit sub-project into a \"Git submodule\". Git users\nmust now run `git submodule init; git submodule update` after a Git checkout, or\nthe build will fail due to missing files in deps/sljit.\n\n15. (#441) Add a new error code (PCRE2_ERROR_JIT_UNSUPPORTED) which is yielded\nfor unsupported jit features.\n\n16. (#444) Fix bug in 'first code unit' and 'last code unit' optimization\ncombined with lookahead assertions.\n\n17. (#445, #447, #449, #451, #452, #459, #563) Add a new feature called scan\nsubstring. This feature is a new type of assertion which matches the content of\na capturing block to a sub-pattern.\n\n18. (#450) Improvements to 'first code unit' / 'starting code units'\noptimisation.\n\n19. (#455) Many, many improvements to the JIT compiler.\n\n20. Item 43 of 10.43 was incomplete because it addressed only \\z and not \\Z,\nwhich was still misbehaving when matching fragments inside invalid UTF strings.\n\n21. (d29e7290) Octal escapes of the form \\045 or \\111 were not being recognized\nin substitution strings, and if encountered gave an error, though the \\o{...}\nform was recognized. This bug is now fixed.\n\n22. (#463, #487) Fix 1 byte out-of-bounds read when parsing malformed limits\n(e.g. LIMIT_HEAP)\n\n23. Many improvements to test infrastructure. Many more platforms and\nconfigurations are now run in Continuous Integration, and all the platforms now\nrun the full test suite, rather than a partial subset.\n\n24. (#475) Implement title casing in substitution strings using Perl syntax.\n\n25. (#478, #504) Disallow \\x if not followed by { or a hex digit.\n\n26. (#473) Implements Python-style backrefs in substitutions.\n\n27. (#472) Fix error reporting for certain over-large octal escapes.\n\n28. (#482) Fix parsing of named captures in replacement strings, allowing\nnon-ASCII capture names to be used.\n\n29. (#477, #474, #488, #494, #496, #506, #508, #511, #518, #524, #540) Many\nimprovements to parsing and optimising of character classes.\n\n30. (#483, #498) Add support for \\g<n> and $<name> to replacement strings.\n\n31. (#470) Add option flags PCRE2_EXTRA_NO_BS0 and PCRE2_EXTRA_PYTHON_OCTAL.\n\n32. (#471) Add new API function pcre2_set_optimize() for controlling which\noptimizations are enabled.\n\n33. (#491) Adds $& $` $' and $_ to substitution replacements, as well as\ninterpreting \\b and \\v as characters.\n\n34. (#499) Add option PCRE2_EXTRA_NEVER_CALLOUT to disable callouts.\n\n35. (#503, #513) Update Unicode support to UCD 16.\n\n36. (#512, #618, #638) Add new function pcre2_set_substitute_case_callout() to\nallow clients to provide a custom callback with locale-aware case\ntransformation.\n\n37. (#516) Fix case-insensitive matching of backreferences when using the\nPCRE2_EXTRA_CASELESS_RESTRICT option.\n\n38. (#519) In pcre2grep, add $& as an alias for $0\n\n39. (c9bf8339, #534) Updated perltest.sh to enable locale setting.\n\n40. (#521) Add support for Turkish I casefolding, using new options\nPCRE2_EXTRA_TURKISH_CASING, and added pre-pattern flags (*TURKISH_CASING) and\n(*CASELESS_RESTRICT).\n\n41. (#523, #546, #547) Add support for UTS#18 compatible character classes,\nusing the new option PCRE2_ALT_EXTENDED_CLASS. This adds '[' as a metacharacter\nwithin character classes and the operators '&&', '--' and '~~', allowing\nsubtractions and intersections of character classes to be easily expressed.\n\n42. (#553, #586, #596, #597) Add support for Perl-style extended character\nclasses, using the syntax (?[...]). This also allows expressing subtractions and\nintersections of character classes, but using a different syntax to UTS#18.\n\n43. (#554) Fixed a bug in JIT affecting greedy bounded repeats. The upper limit\nof repeats inside a repeated bracket might be incorrectly checked.\n\n44. (#556) Fixed a bug in JIT affecting caseful matching of backreferences. When\nutf is disabled, and dupnames is enabled, caseless matching was used even\nif caseful matching was needed.\n\n45. (f34fc0a3) Fixed a bug in pcre2grep reported by Alejandro Colomar\n<alx@kernel.org> (GitHub issue #577). In certain cases, when lines of above and\nbelow context were contiguous, a separator line was incorrectly being inserted.\n\n46. (#594) Fix a small (one/two byte) out-of-bounds read on invalid UTF-8 input\nin pcre2grep.\n\n47. (#370) Fix the INSTALL_MSVC_PDB CMake flag.\n\n48. (#366) Install cmake files in prefix/lib/cmake/pcre2 rather than\nprefix/cmake. The new CMake flag PCRE2_INSTALL_CMAKEDIR allows customising this\nlocation.\n\n49. (#624, #626, #628, #632, #639, #641) Reduce code size of generated JIT code\nfor repeated character classes.\n\n50. (#623) Update the Bazel build files.\n\n\nVersion 10.44 07-June-2024\n--------------------------\n\n1. If a pattern contained a variable-length lookbehind in which the first\nbranch was not the one with the shortest minimum length, and the lookbehind\ncontained a capturing group, and elsewhere in the pattern there was another\nlookbehind that referenced that group, the pattern was incorrectly compiled,\nleading to unpredictable results, including crashes in JIT compiling. An\nexample pattern is: /(((?<=123?456456|ABC)))(?<=\\2)/\n\n2. Further updates to the oss-fuzz support:\n\n   (a) Limit quantifiers for groups and classes to be no more than 10. This\n       avoids very long JIT compile times that happen in some cases when groups\n       are replicated for quantification, and very long match times when\n       classes contain a lot of non-ascii characters.\n\n   (b) Added PCRE2_EXTENDED_MORE to the list of allowed options.\n\n   (c) Arranged for text error messages to be shown in 16-bit and 32-bit modes.\n\n   (d) Made the output in standalone mode more readable.\n\n   (e) General code tidies.\n\n   (f) Limit the size of compiled patterns to 10MB (see 6 below).\n\n   (g) Do not run JIT on patterns whose compiled length is greater than 200K\n       bytes because this takes a long time, causing oss-fuzz to time out.\n\n   (h) Avoid compiling or matching twice with the same options (this could\n       happen if the input didn't set any options).\n\n3. Increase the maximum length of a name for a group from 32 to 128 because\nthere is a user for whom 32 is too small.\n\n4. Cause pcre2test to output a message when pcre2_jit_compile() gives an error\nreturn if either jitverify or info is specified.\n\n5. Some auxiliary files for building under OpenVMS that were contributed by\nAlexey Chupahin have been installed.\n\n6. Added pcre2_set_max_pattern_compiled_length() to limit the size of compiled\npatterns.\n\n7. There was a bug in the implementation of \\X caused by my (PH) misreading or\nmisunderstanding one of the grapheme sequence breaking rules in Unicode Annex\n#29. A break should occur between two characters with the Extended Pictographic\nbreak property unless a zero-width joiner intervenes. PCRE2 was not insisting\non the ZWJ, causing \\X to match more than it should. See GitHub issue #410.\n\n8. Avoid compilation issues with proprietary compilers in UNIX since 10.43.\n\n\nVersion 10.43 16-February-2024\n------------------------------\n\n1. The test program added by change 2 of 10.42 didn't work when the default\nnewline setting didn't include \\n as a newline. One test needed (*LF) to ensure\nthat it worked.\n\n2. Added the new freestanding POSIX test program to the ManyConfigTests script\nin the maint directory (overlooked in 2 below). Also improved the selection\nfacilities in that script, and added a test with JIT in a non-source directory,\nfixing an oversight that would have made such a test fail before.\n\n3. Added pcre2_get_match_data_heapframes_size() and related pcre2test flags\nto allow for finer control of the heap used when pcre2_match() without JIT is\nused and the match_data might be reused. This began as PR #191, but has had\nfurther refinement and documentation edits.\n\n4. Applied PR #181, which tidies some casts in pcre2_valid_utf.c.\n\n5. Applied PR #184, which avoids overflow issues with the heap limit\n(introduced in 10.41/9).\n\n6. Applied PR #192, which changes the timing units for pcre2test from\nmilliseconds to microseconds. This is more useful for modern CPUs.\n\n7. Applied PR #193, which makes the requirement for C99 explicit in\nconfigure.ac and CMakeLists.txt.\n\n8. Fixed a bug in pcre2test when a ridiculously large string repeat required a\nstupid amount of memory. It now gives a clean realloc() failure error.\n\n9. Updates to restrict the interaction between ASCII and non-ASCII characters\nfor caseless matching and items like \\d:\n\n   (a) Added PCRE2_EXTRA_CASELESS_RESTRICT to lock out mixing of ASCII and\n       non-ASCII when matching caselessly. This is also /r in pcre2test and\n       (?r) within patterns.\n\n   (b) Added PCRE2_EXTRA_ASCII_{BSD,BSS,BSW,POSIX} and corresponding (?aD) etc\n       in patterns and /a in pcre2test.\n\n   (c) Corresponding updates to pcre2test.\n\n10. Unicode has been updated to 15.0.0.\n\n11. The Python scripts and ucptest.c in maint have been updated (a) a minor\nchange needed for 9(a) above; (b) fix bugs in ucptest,\n\n12. Integer overflow testing is now centralized in a new function.\n\n13. Made PCRE2_UCP the default in UTF mode in pcre2grep, and added new options\n--case-restrict and --no-ucp.\n\n14. In the debugging printint module (which is normally only linked into\npcre2test), avoid the use of a variable called \"not\" because that's deprecated\nin C and forbidden in C++. Also rewrite some code to avoid a goto into a block\nthat bypassed its initialization (though it didn't actually matter).\n\n15. More minor code adjustments to avoid using reserved C++ words as variable\nnames (\"new\" and \"typename\") and another jump that bypassed an (irrelevant)\ninitialization.\n\n16. Merged a pull request that removed pcre2_ucptables.c from the list of files\nto compile in NON-AUTOTOOLS-BUILD because it is #included in pcre2_tables.c.\nAlso adjusted the BUILD.bazel and build.zig files, which had the same issue. At\nthe same time, fixed a typo in the Bazel file.\n\n17. Add PCRE2_EXTRA_ASCII_DIGIT to allow [:digit:] to be kept on sync with \\d\neven in UCP mode.\n\n18. Fix an invalid match of ascii word classes when invalid utf is enabled.\n\n19. Add a --posix-digit to pcre2grep for compatibility with GNU grep, and\nother tools that prefer the POSIX compatible unicode definition for \\d.\n\n20. Report the bit width of the library in use by pcre2test for usability.\n\n21. A pathological pattern conversion test could result in a string longer than\nthe available input buffer. Cause such a test to fail.\n\n22. Add a check that forces a compiler error if PCRE2_CODE_UNIT_WIDTH is not 8,\n16, or 32 when compiling any of the library modules.\n\n23. Update pcre2_compile() to treat a NULL pattern with zero length as an empty\nstring.\n\n24. Add support for limited-length variable-length lookbehind assertions, with\ndefault maximum length 255 characters (same as Perl) but with a function to\nadjust the limit.\n\n25. Applied pull request #262, which updates the zig configuration, and #278\nwhich fixes a bug with out-of-source-tree CMake build testing.\n\n26. Add support for LoongArch to JIT.\n\n27. Fixed a bug in pcre2_match() in the code for handling the vector of\nbacktracking frames on the heap, which caused a heap overflow if *LIMIT_HEAP\nrestricted an attempt to extend to less than the frame size. Generally tidy up\nthe code for extending the heap frames vector. This fixes GitHub issue #275.\n\n28. Update pcre2_fuzzsupport.c to avoid clang sanitize complaint about shifting\nleft by 16 when there are non-zeros in the top 16 bits.\n\n29. Perl 5.34.0 changed the meaning of (for example) {,3} which did not used to\nbe treated as a quantifier. Now it is interpreted as {0,3} and PCRE2 has\nchanged to match. Note that {,} is still not a quantifier.\n\n30. Perl allows spaces and/or horizontal tabs after { or before } in all items\nthat use braces, and also before or after the comma in quantifiers. PCRE2 now\ndoes the same, except for \\u{...}, which is recognized only when\nPCRE2_EXTRA_ALT_BSUX is set. This an ECMAScript, non-Perl compatible,\nextension, so PCRE2 follows ECMAScript rather than Perl.\n\n31. Applied pull request #300 by Carlo, which fixes #261. The bug was that\npcre2_match() was not fully resetting all captures that had been set within a\n(possibly recursive) subroutine call such as (?3).\n\n32. Changed the meaning of \\w (and its synonyms) in UCP mode to match Perl. It\nnow matches characters whose general categories are L or N or whose particular\ncategories are Mn (non-spacing mark) or Pc (combining punctuation). The latter\nincludes underscore.\n\n33. Changed the meaning of [:xdigit:] in UCP mode to match Perl. It now also\nmatches the \"fullwidth\" versions of the hex digits. Just like it is done for\n[:digit:], PCRE2_EXTRA_ASCII_DIGIT can be used to keep this class ASCII only\nwithout affecting other POSIX classes.\n\n34. GitHub PR305 fixes a potential integer overflow in pcre2_dfa_match().\n\n35. Updated handling of \\b and \\B in UCP mode to match the changes to \\w in 32\nabove because \\b and \\B are defined in terms of \\w.\n\n36. Within a pattern (?aT) and (?-aT) set and reset the PCRE2_EXTRA_ASCII_DIGIT\noption, and (?aP) also sets (?aT) so that (?-aP) disables all ASCII\nrestrictions on POSIX classes.\n\n37. If PCRE2_FIRSTLINE was set on an anchored pattern, pcre2_match() and\npcre2_dfa_match() misbehaved. PCRE2_FIRSTLINE is now ignored for anchored\npatterns.\n\n38. Add a test for ridiculous ovector offset values to the substring extraction\nfunctions.\n\n39. Make OP_REVERSE use IMM2_SIZE for its data instead of LINK_SIZE, for\nconsistency with OP_VREVERSE.\n\n40. In some legacy environments with a pre C99 snprintf, pcre2_regerror could\nreturn an incorrect value when the provided buffer was too small.\n\n41. Applied pull request #342 which adds sanity checks for ctype functions and\nlocks out any accidental sign-extension.\n\n42. In the 32-bit library, in non-UTF mode, a quantifier that followed a\nliteral character with a value greater than or equal to 0x80000000u caused\nundefined behaviour.\n\n43. \\z was misbehaving when matching fragments inside invalid UTF strings.\n\n44. Implement --group-separator and --no-group-separator for pcre2grep.\n\n45. Fix \\X matching in 32 bit mode without UTF in JIT.\n\n46. Fix backref iterators when PCRE2_MATCH_UNSET_BACKREF is set in JIT.\n\n47. Refactor the handling of whole-pattern recursion (?0) in pcre2_match() so\nthat its end is handled similarly to other recursions. This has altered the\nbehaviour of   /|(?0)./endanchored   which was previously not right.\n\n48. Improved the test for looping recursion by checking the last referenced\ncharacter as well as the current character. This allows some patterns that\npreviously triggered the check to run to completion instead of giving the loop\nerror.\n\n49. In 32-bit mode, the compiler looped for the pattern /[\\x{ffffffff}]/ when\nPCRE2_CASELESS and PCRE2_UCP (but not PCRE2_UTF) were set. Fixed by not trying\nto look for other cases for characters above the Unicode range.\n\n50. In caseless 32-bit mode with UCP (but not UTF) set, the character\n0xffffffff incorrectly matched any character that has more than one other case,\nin particular k and s.\n\n51. Fix accept and endanchored interaction in JIT.\n\n52. Fix backreferences with unset backref and non-greedy iterators in JIT.\n\n53. Improve the logic that checks for a list of starting code units -- positive\nlookahead assertions are now ignored if the immediately following item is one\nthat sets a mandatory starting character. For example, /a?(?=bc|)d/ used to set\nall of a, b, and d as possible starting code units; now it sets only a and d.\n\n54. Fix incorrect class character matches in JIT.\n\n55. In pcre2test, ensure pcre2_jit_match() is used when jitfast is used with\nsubstitution testing.\n\n56. Insert omitted setting of subject length in match data at the end of\npcre2_jit_match().\n\n57. Implemented PCRE2_DISABLE_RECURSELOOP_CHECK for pcre2_match() to enable\nsome apparently looping recursions to run to completion and therefore match the\nJIT behaviour. With this set, real loops will eventually get caught by match or\nheap limits or run out of resource.\n\n58. AC did a lot of work on pcre2_fuzzsupport.c to extend it to 16-bit and\n32-bit libraries and to compare JIT and non-JIT matching.\n\n\nVersion 10.42 11-December-2022\n------------------------------\n\n1. Change 19 of 10.41 wasn't quite right; it put the definition of a default,\nempty value for PCRE2_CALL_CONVENTION in src/pcre2posix.c instead of\nsrc/pcre2posix.h, which meant that programs that included pcre2posix.h but not\npcre2.h failed to compile.\n\n2. To catch similar issues to the above in future, a new small test program\nthat includes pcre2posix.h but not pcre2.h has been added to the test suite.\n\n3. When the -S option of pcre2test was used to set a stack size greater than\nthe allowed maximum, the error message displayed the hard limit incorrectly.\nThis was pointed out on GitHub pull request #171, but the suggested patch\ndidn't cope with all cases. Some further modification was required.\n\n4. Supplying an ovector count of more than 65535 to pcre2_match_data_create()\ncaused a crash because the field in the match data block is only 16 bits. A\nmaximum of 65535 is now silently applied.\n\n5. Merged @carenas patch #175 which fixes #86 - segfault on aarch64 (ARM),\n\n6. The prototype for pcre2_substring_list_free() specified its argument as\nPCRE2_SPTR * which is a const data type, whereas the yield from\npcre2_substring_list() is not const. This caused compiler warnings. I have\nchanged the argument of pcre2_substring_list_free() to be PCRE2_UCHAR ** to\nremove this anomaly. This might cause new warnings in existing code where a\ncast has been used to avoid previous ones.\n\n\nVersion 10.41 06-December-2022\n------------------------------\n\n1. Add fflush() before and after a fork callout in pcre2grep to get its output\nto be the same on all systems. (There were previously ordering differences in\nAlpine Linux).\n\n2. Merged patch from @carenas (GitHub #110) for pthreads support in CMake.\n\n3. SSF scorecards grumbled about possible overflow in an expression in\npcre2test. It never would have overflowed in practice, but some casts have been\nadded and at the some time there's been some tidying of fprints that output\nsize_t values.\n\n4. PR #94 showed up an unused enum in pcre2_convert.c, which is now removed.\n\n5. Minor code re-arrangement to remove gcc warning about realloc() in\npcre2test.\n\n6. Change a number of int variables that hold buffer and line lengths in\npcre2grep to PCRE2_SIZE (aka size_t).\n\n7. Added an #ifdef to cut out a call to PRIV(jit_free) when JIT is not\nsupported (even though that function would do nothing in that case) at the\nrequest of a user who doesn't even want to link with pcre_jit_compile.o. Also\ntidied up an untidy #ifdef arrangement in pcre2test.\n\n8. Fixed an issue in the backtracking optimization of character repeats in\nJIT. Furthermore optimize star repetitions, not just plus repetitions.\n\n9. Removed the use of an initial backtracking frames vector on the system stack\nin pcre2_match() so that it now always uses the heap. (In a multi-thread\nenvironment with very small stacks there had been an issue.) This also is\ntidier for JIT matching, which didn't need that vector. The heap vector is now\nremembered in the match data block and re-used if that block itself is re-used.\nIt is freed with the match data block.\n\n10. Adjusted the find_limits code in pcre2test to work with change 9 above.\n\n11. Added find_limits_noheap to pcre2test, because the heap limits are now\ndifferent in different environments and so cannot be included in the standard\ntests.\n\n12. Created a test for pcre2_match() heap processing that is not part of the\ntests run by 'make check', but can be run manually. The current output is from\na 64-bit system.\n\n13. Implemented -Z aka --null in pcre2grep.\n\n14. A minor change to pcre2test and the addition of several new pcre2grep tests\nhave improved LCOV coverage statistics. At the same time, code in pcre2grep and\nelsewhere that can never be obeyed in normal testing has been excluded from\ncoverage.\n\n15. Fixed a bug in pcre2grep that could cause an extra newline to be written\nafter output generated by --output.\n\n16. If a file has a .bz2 extension but is not in fact compressed, pcre2grep\nshould process it as a plain text file. A bug stopped this happening; now fixed\nand added to the tests.\n\n17. When pcre2grep was running not in UTF mode, if a string specified by\n--output or obtained from a callout in a pattern contained a character (byte)\ngreater than 127, it was incorrectly output in UTF-8 format.\n\n18. Added some casts after warnings from Clang sanitize.\n\n19. Merged patch from cbouc (GitHub #139): 4 function prototypes were missing\nPCRE2_CALL_CONVENTION in src/pcre2posix.h. All function prototypes returning\npointers had out of place PCRE2_CALL_CONVENTION in src/pcre2.h.*. These\nproduced errors when building for Windows with #define PCRE2_CALL_CONVENTION\n__stdcall.\n\n20. A negative repeat value in a pcre2test subject line was not being\ndiagnosed, leading to infinite looping.\n\n21. Updated RunGrepTest to discard the warning that Bash now gives when setting\nLC_CTYPE to a bad value (because older versions didn't).\n\n22. Updated pcre2grep so that it behaves like GNU grep when matching more than\none pattern and a later pattern matches at an earlier point in the subject when\nthe matched substrings are being identified by colour or by offsets.\n\n23. Updated the PrepareRelease script so that the man page that it makes for\nthe pcre2demo demonstration program is more standard and does not cause errors\nwhen processed by lexgrog or mandb -c (GitHub issue #160).\n\n24. The JIT compiler was updated.\n\n\nVersion 10.40 15-April-2022\n---------------------------\n\n1. Merged patch from @carenas (GitHub #35, 7db87842) to fix pcre2grep incorrect\nhandling of multiple passes.\n\n2. Merged patch from @carenas (GitHub #36, dae47509) to fix portability issue\nin pcre2grep with buffered fseek(stdin).\n\n3. Merged patch from @carenas (GitHub #37, acc520924) to fix tests when -S is\nnot supported.\n\n4. Revert an unintended change in JIT repeat detection.\n\n5. Merged patch from @carenas (GitHub #52, b037bfa1) to fix build on GNU Hurd.\n\n6. Merged documentation and comments patches from @carenas (GitHub #47).\n\n7. Merged patch from @carenas (GitHub #49) to remove obsolete JFriedl test code\nfrom pcre2grep.\n\n8. Merged patch from @carenas (GitHub #48) to fix CMake install issue #46.\n\n9. Merged patch from @carenas (GitHub #53) fixing NULL checks in matching and\nsubstituting.\n\n10. Add null_subject and null_replacement modifiers to pcre2test.\n\n11. Add check for NULL subject to POSIX regexec() function.\n\n12. Add check for NULL replacement to pcre2_substitute().\n\n13. For the subject arguments of pcre2_match(), pcre2_dfa_match(), and\npcre2_substitute(), and the replacement argument of the latter, if the pointer\nis NULL and the length is zero, treat as an empty string. Apparently a number\nof applications treat NULL/0 in this way.\n\n14. Added support for Bidi_Class and a number of binary Unicode properties,\nincluding Bidi_Control.\n\n15. Fix some minor issues raised by clang sanitize.\n\n16. Very minor code speed up for maximizing character property matches.\n\n17. A number of changes to script matching for \\p and \\P:\n\n    (a) Script extensions for a character are now coded as a bitmap instead of\n        a list of script numbers, which should be faster and does not need a\n        loop.\n\n    (b) Added the syntax \\p{script:xxx} and \\p{script_extensions:xxx} (synonyms\n        sc and scx).\n\n    (c) Changed \\p{scriptname} from being the same as \\p{sc:scriptname} to being\n        the same as \\p{scx:scriptname} because this change happened in Perl at\n        release 5.26.\n\n    (d) The standard Unicode 4-letter abbreviations for script names are now\n        recognized.\n\n    (e) In accordance with Unicode and Perl's \"loose matching\" rules, spaces,\n        hyphens, and underscores are ignored in property names, which are then\n        matched independent of case.\n\n18. The Python scripts in the maint directory have been refactored. There are\nnow three scripts that generate pcre2_ucd.c, pcre2_ucp.h, and pcre2_ucptables.c\n(which is #included by pcre2_tables.c). The data lists that used to be\nduplicated are now held in a single common Python module.\n\n19. On CHERI, and thus Arm's Morello prototype, pointers are represented as\nhardware capabilities, which consist of both an integer address and additional\nmetadata, meaning they are twice the size of the platform's size_t type, i.e.\n16 bytes on a 64-bit system. The ovector member of heapframe happens to only be\n8 byte aligned, and so computing frame_size ended up with a multiple of 8 but\nnot 16. Whilst the first frame was always suitably aligned, this then\nmisaligned the frame that follows, resulting in an alignment fault when storing\na pointer to Fecode at the start of match. Patch to fix this issue by Jessica\nClarke PR#72.\n\n20. Added -LP and -LS listing options to pcre2test.\n\n21. A user discovered that the library names in CMakeLists.txt for MSVC\ndebugger (PDB) files were incorrect - perhaps never tried for PCRE2?\n\n22. An item such as [Aa] is optimized into a caseless single character match.\nWhen this was quantified (e.g. [Aa]{2}) and was also the last literal item in a\npattern, the optimizing \"must be present for a match\" character check was not\nbeing flagged as caseless, causing some matches that should have succeeded to\nfail.\n\n23. Fixed a unicode property matching issue in JIT. The character was not\nfully read in caseless matching.\n\n24. Fixed an issue affecting recursions in JIT caused by duplicated data\ntransfers.\n\n25. Merged patch from @carenas (GitHub #96) which fixes some problems with\npcre2test and readline/readedit:\n\n  * Use the right header for libedit in FreeBSD with autoconf\n  * Really allow libedit with cmake\n  * Avoid using readline headers with libedit\n\n\nVersion 10.39 29-October-2021\n-----------------------------\n\n1. Fix incorrect detection of alternatives in first character search in JIT.\n\n2. Merged patch from @carenas (GitHub #28):\n\n  Visual Studio 2013 includes support for %zu and %td, so let newer\n  versions of it avoid the fallback, and while at it, make sure that\n  the first check is for DISABLE_PERCENT_ZT so it will be always\n  honoured if chosen.\n\n  prtdiff_t is signed, so use a signed type instead, and make sure\n  that an appropriate width is chosen if pointers are 64bit wide and\n  long is not (ex: Windows 64bit).\n\n  IMHO removing the cast (and therefore the possibility of truncation)\n  make the code cleaner and the fallback is likely portable enough\n  with all 64-bit POSIX systems doing LP64 except for Windows.\n\n3. Merged patch from @carenas (GitHub #29) to update to Unicode 14.0.0.\n\n4. Merged patch from @carenas (GitHub #30):\n\n  * Cleanup: remove references to no longer used stdint.h\n\n  Since 19c50b9d (Unconditionally use inttypes.h instead of trying for stdint.h\n  (simplification) and remove the now unnecessary inclusion in\n  pcre2_internal.h., 2018-11-14), stdint.h is no longer used.\n\n  Remove checks for it in autotools and CMake and document better the expected\n  build failures for systems that might have stdint.h (C99) and not inttypes.h\n  (from POSIX), like old Windows.\n\n  * Cleanup: remove detection for inttypes.h which is a hard dependency\n\n  CMake checks for standard headers are not meant to be used for hard\n  dependencies, so will prevent a possible fallback to work.\n\n  Alternatively, the header could be checked to make the configuration fail\n  instead of breaking the build, but that was punted, as it was missing anyway\n  from autotools.\n\n5. Merged patch from @carenas (GitHub #32):\n\n  * jit: allow building with ancient MSVC versions\n\n  Visual Studio older than 2013 fails to build with JIT enabled, because it is\n  unable to parse non C89 compatible syntax, with mixed declarations and code.\n  While most recent compilers wouldn't even report this as a warning since it\n  is valid C99, it could be also made visible by adding to gcc/clang the\n  -Wdeclaration-after-statement flag at build time.\n\n  Move the code below the affected definitions.\n\n  * pcre2grep: avoid mixing declarations with code\n\n  Since d5a61ee8 (Patch to detect (and ignore) symlink loops in pcre2grep,\n  2021-08-28), code will fail to build in a strict C89 compiler.\n\n  Reformat slightly to make it C89 compatible again.\n\n\nVersion 10.38 01-October-2021\n-----------------------------\n\n1. Fix invalid single character repetition issues in JIT when the repetition\nis inside a capturing bracket and the bracket is preceded by character\nliterals.\n\n2. Installed revised CMake configuration files provided by Jan-Willem Blokland.\nThis extends the CMake build system to build both static and shared libraries\nin one go, builds the static library with PIC, and exposes PCRE2 libraries\nusing the CMake config files. JWB provided these notes:\n\n- Introduced CMake variable BUILD_STATIC_LIBS to build the static library.\n\n- Make a small modification to config-cmake.h.in by removing the PCRE2_STATIC\n  variable. Added PCRE2_STATIC variable to the static build using the\n  target_compile_definitions() function.\n\n- Extended the CMake config files.\n\n  - Introduced CMake variable PCRE2_USE_STATIC_LIBS to easily switch between\n    the static and shared libraries.\n\n  - Added the PCRE_STATIC variable to the target compile definitions for the\n    import of the static library.\n\nBuilding static and shared libraries using MSVC results in a name clash of\nthe libraries. Both static and shared library builds create, for example, the\nfile pcre2-8.lib. Therefore, I decided to change the static library names by\nadding \"-static\". For example, pcre2-8.lib has become pcre2-8-static.lib.\n[Comment by PH: this is MSVC-specific. It doesn't happen on Linux.]\n\n3. Increased the minimum release number for CMake to 3.0.0 because older than\n2.8.12 is deprecated (it was set to 2.8.5) and causes warnings. Even 3.0.0 is\nquite old; it was released in 2014.\n\n4. Implemented a modified version of Thomas Tempelmann's pcre2grep patch for\ndetecting symlink loops. This is dependent on the availability of realpath(),\nwhich is now tested for in ./configure and CMakeLists.txt.\n\n5. Implemented a modified version of Thomas Tempelmann's patch for faster\ncase-independent \"first code unit\" searches for unanchored patterns in 8-bit\nmode in the interpreters. Instead of just remembering whether one case matched\nor not, it remembers the position of a previous match so as to avoid\nunnecessary repeated searching.\n\n6. Perl now locks out \\K in lookarounds, so PCRE2 now does the same by default.\nHowever, just in case anybody was relying on the old behaviour, there is an\noption called PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK that enables the old behaviour.\nAn option has also been added to pcre2grep to enable this.\n\n7. Re-enable a JIT optimization which was unintentionally disabled in 10.35.\n\n8. There is a loop counter to catch excessively crazy patterns when checking\nthe lengths of lookbehinds at compile time. This was incorrectly getting reset\nwhenever a lookahead was processed, leading to some fuzzer-generated patterns\ntaking a very long time to compile when (?|) was present in the pattern,\nbecause (?|) disables caching of group lengths.\n\n\nVersion 10.37 26-May-2021\n-------------------------\n\n1. Change RunGrepTest to use tr instead of sed when testing with binary\nzero bytes, because sed varies a lot from system to system and has problems\nwith binary zeros. This is from Bugzilla #2681. Patch from Jeremie\nCourreges-Anglas via Nam Nguyen. This fixes RunGrepTest for OpenBSD. Later:\nit broke it for at least one version of Solaris, where tr can't handle binary\nzeros. However, that system had /usr/xpg4/bin/tr installed, which works OK, so\nRunGrepTest now checks for that command and uses it if found.\n\n2. Compiling with gcc 10.2's -fanalyzer option showed up a hypothetical problem\nwith a NULL dereference. I don't think this case could ever occur in practice,\nbut I have put in a check in order to get rid of the compiler error.\n\n3. An alternative patch for CMakeLists.txt because 10.36 #4 breaks CMake on\nWindows. Patch from email@cs-ware.de fixes bugzilla #2688.\n\n4. Two bugs related to over-large numbers have been fixed so the behaviour is\nnow the same as Perl.\n\n  (a) A pattern such as /\\214748364/ gave an overflow error instead of being\n  treated as the octal number \\214 followed by literal digits.\n\n  (b) A sequence such as {65536 that has no terminating } so is not a\n  quantifier was nevertheless complaining that a quantifier number was too big.\n\n5. A run of autoconf suggested that configure.ac was out-of-date with respect\nto the latest autoconf. Running autoupdate made some valid changes, some valid\nsuggestions, and also some invalid changes, which were fixed by hand. Autoconf\nnow runs clean and the resulting \"configure\" seems to work, so I hope nothing\nis broken. Later: the requirement for autoconf 2.70 broke some automatic test\nrobots. It doesn't seem to be necessary: trying a reduction to 2.60.\n\n6. The pattern /a\\K.(?0)*/ when matched against \"abac\" by the interpreter gave\nthe answer \"bac\", whereas Perl and JIT both yield \"c\". This was because the\neffect of \\K was not propagating back from the full pattern recursion. Other\nrecursions such as /(a\\K.(?1)*)/ did not have this problem.\n\n7. Restore single character repetition optimization in JIT. Currently fewer\ncharacter repetitions are optimized than in 10.34.\n\n8. When the names of the functions in the POSIX wrapper were changed to\npcre2_regcomp() etc. (see change 10.33 #4 below), functions with the original\nnames were left in the library so that pre-compiled programs would still work.\nHowever, this has proved troublesome when programs link with several libraries,\nsome of which use PCRE2 via the POSIX interface while others use a native POSIX\nlibrary. For this reason, the POSIX function names are removed in this release.\nThe macros in pcre2posix.h should ensure that re-compiling fixes any programs\nthat haven't been compiled since before 10.33.\n\n\nVersion 10.36 04-December-2020\n------------------------------\n\n1. Add CET_CFLAGS so that when Intel CET is enabled, pass -mshstk to\ncompiler. This fixes https://bugs.exim.org/show_bug.cgi?id=2578. Patch for\nMakefile.am and configure.ac by H.J. Lu. Equivalent patch for CMakeLists.txt\ninvented by PH.\n\n2. Fix infinite loop when a single byte newline is searched in JIT when\ninvalid utf8 mode is enabled.\n\n3. Updated CMakeLists.txt with patch from Wolfgang Stöggl (Bugzilla #2584):\n\n  - Include GNUInstallDirs and use ${CMAKE_INSTALL_LIBDIR} instead of hardcoded\n    lib. This allows differentiation between lib and lib64.\n    CMAKE_INSTALL_LIBDIR is used for installation of libraries and also for\n    pkgconfig file generation.\n\n  - Add the version of PCRE2 to the configuration summary like ./configure\n    does.\n\n  - Fix typo: MACTHED_STRING->MATCHED_STRING\n\n4. Updated CMakeLists.txt with another patch from Wolfgang Stöggl (Bugzilla\n#2588):\n\n  - Add escaped double quotes around include directory in CMakeLists.txt to\n    allow spaces in directory names.\n\n  - This fixes a cmake error, if the path of the pcre2 source contains a space.\n\n5. Updated CMakeLists.txt with a patch from B. Scott Michel: CMake's\ndocumentation suggests using CHECK_SYMBOL_EXISTS over CHECK_FUNCTION_EXIST.\nMoreover, these functions come from specific header files, which need to be\nspecified (and, thankfully, are the same on both the Linux and WinXX\nplatforms.)\n\n6. Added a (uint32_t) cast to prevent a compiler warning in pcre2_compile.c.\n\n7. Applied a patch from Wolfgang Stöggl (Bugzilla #2600) to fix postfix for\ndebug Windows builds using CMake. This also updated configure so that it\ngenerates *.pc files and pcre2-config with the same content, as in the past.\n\n8. If a pattern ended with (?(VERSION=n.d where n is any number but d is just a\nsingle digit, the code unit beyond d was being read (i.e. there was a read\nbuffer overflow). Fixes ClusterFuzz 23779.\n\n9. After the rework in r1235, certain character ranges were incorrectly\nhandled by an optimization in JIT. Furthermore a wrong offset was used to\nread a value from a buffer which could lead to memory overread.\n\n10. Unnoticed for many years was the fact that delimiters other than / in the\ntestinput1 and testinput4 files could cause incorrect behaviour when these\nfiles were processed by perltest.sh. There were several tests that used quotes\nas delimiters, and it was just luck that they didn't go wrong with perltest.sh.\nAll the patterns in testinput1 and testinput4 now use / as their delimiter.\nThis fixes Bugzilla #2641.\n\n11. Perl has started to give an error for \\K within lookarounds (though there\nare cases where it doesn't). PCRE2 still allows this, so the tests that include\nthis case have been moved from test 1 to test 2.\n\n12. Further to 10 above, pcre2test has been updated to detect and grumble if a\ndelimiter other than / is used after #perltest.\n\n13. Fixed a bug with PCRE2_MATCH_INVALID_UTF in 8-bit mode when PCRE2_CASELESS\nwas set and PCRE2_NO_START_OPTIMIZE was not set. The optimization for finding\nthe start of a match was not resetting correctly after a failed match on the\nfirst valid fragment of the subject, possibly causing incorrect \"no match\"\nreturns on subsequent fragments. For example, the pattern /A/ failed to match\nthe subject \\xe5A. Fixes Bugzilla #2642.\n\n14. Fixed a bug in character set matching when JIT is enabled and both unicode\nscripts and unicode classes are present at the same time.\n\n15. Added GNU grep's -m (aka --max-count) option to pcre2grep.\n\n16. Refactored substitution processing in pcre2grep strings, both for the -O\noption and when dealing with callouts. There is now a single function that\nhandles $ expansion in all cases (instead of multiple copies of almost\nidentical code). This means that the same escape sequences are available\neverywhere, which was not previously the case. At the same time, the escape\nsequences $x{...} and $o{...} have been introduced, to allow for characters\nwhose code points are greater than 255 in Unicode mode.\n\n17. Applied the patch from Bugzilla #2628 to RunGrepTest. This does an explicit\ntest for a version of sed that can handle binary zero, instead of assuming that\nany Linux version will work. Later: replaced $(...) by `...` because not all\nshells recognize the former.\n\n18. Fixed a word boundary check bug in JIT when partial matching is enabled.\n\n19. Fix ARM64 compilation warning in JIT. Patch by Carlo.\n\n20. A bug in the RunTest script meant that if the first part of test 2 failed,\nthe failure was not reported.\n\n21. Test 2 was failing when run from a directory other than the source\ndirectory. This failure was previously missed in RunTest because of 20 above.\nFixes added to both RunTest and RunTest.bat.\n\n22. Patch to CMakeLists.txt from Daniel to fix problem with testing under\nWindows.\n\n\nVersion 10.35 09-May-2020\n---------------------------\n\n1. Use PCRE2_MATCH_EMPTY flag to detect empty matches in JIT.\n\n2. Fix ARMv5 JIT improper handling of labels right after a constant pool.\n\n3. A JIT bug is fixed which allowed to read the fields of the compiled\npattern before its existence is checked.\n\n4. Back in the PCRE1 day, capturing groups that contained recursive back\nreferences to themselves were made atomic (version 8.01, change 18) because\nafter the end a repeated group, the captured substrings had their values from\nthe final repetition, not from an earlier repetition that might be the\ndestination of a backtrack. This feature was documented, and was carried over\ninto PCRE2. However, it has now been realized that the major refactoring that\nwas done for 10.30 has made this atomizing unnecessary, and it is confusing\nwhen users are unaware of it, making some patterns appear not to be working as\nexpected. Capture values of recursive back references in repeated groups are\nnow correctly backtracked, so this unnecessary restriction has been removed.\n\n5. Added PCRE2_SUBSTITUTE_LITERAL.\n\n6. Avoid some VS compiler warnings.\n\n7. Added PCRE2_SUBSTITUTE_MATCHED.\n\n8. Added (?* and (?<* as synonyms for (*napla: and (*naplb: to match another\nregex engine. The Perl regex folks are aware of this usage and have made a note\nabout it.\n\n9. When an assertion is repeated, PCRE2 used to limit the maximum repetition to\n1, believing that repeating an assertion is pointless. However, if a positive\nassertion contains capturing groups, repetition can be useful. In any case, an\nassertion could always be wrapped in a repeated group. The only restriction\nthat is now imposed is that an unlimited maximum is changed to one more than\nthe minimum.\n\n10. Fix *THEN verbs in lookahead assertions in JIT.\n\n11. Added PCRE2_SUBSTITUTE_REPLACEMENT_ONLY.\n\n12. The JIT stack should be freed when the low-level stack allocation fails.\n\n13. In pcre2grep, if the final line in a scanned file is output but does not\nend with a newline sequence, add a newline according to the --newline setting.\n\n14. (?(DEFINE)...) groups were not being handled correctly when checking for\nthe fixed length of a lookbehind assertion. Such a group within a lookbehind\nshould be skipped, as it does not contribute to the length of the group.\nInstead, the (DEFINE) group was being processed, and if at the end of the\nlookbehind, that end was not correctly recognized. Errors such as \"lookbehind\nassertion is not fixed length\" and also \"internal error: bad code value in\nparsed_skip()\" could result.\n\n15. Put a limit of 1000 on recursive calls in pcre2_study() when searching\nnested groups for starting code units, in order to avoid stack overflow issues.\nIf the limit is reached, it just gives up trying for this optimization.\n\n16. The control verb chain list must always be restored when exiting from a\nrecurse function in JIT.\n\n17. Fix a crash which occurs when the character type of an invalid UTF\ncharacter is decoded in JIT.\n\n18. Changes in many areas of the code so that when Unicode is supported and\nPCRE2_UCP is set without PCRE2_UTF, Unicode character properties are used for\nupper/lower case computations on characters whose code points are greater than\n127.\n\n19. The function for checking UTF-16 validity was returning an incorrect offset\nfor the start of the error when a high surrogate was not followed by a valid\nlow surrogate. This caused incorrect behaviour, for example when\nPCRE2_MATCH_INVALID_UTF was set and a match started immediately following the\ninvalid high surrogate, such as /aa/ matching \"\\x{d800}aa\".\n\n20. If a DEFINE group immediately preceded a lookbehind assertion, the pattern\ncould be mis-compiled and therefore not match correctly. This is the example\nthat found this: /(?(DEFINE)(?<foo>bar))(?<![-a-z0-9])word/ which failed to\nmatch \"word\" because the \"move back\" value was set to zero.\n\n21. Following a request from a user, some extensions and tidies to the\ncharacter tables handling have been done:\n\n  (a) The dftables auxiliary program is renamed pcre2_dftables, but it is still\n  not installed for public use.\n\n  (b) There is now a -b option for pcre2_dftables, which causes the tables to\n  be written in binary. There is also a -help option.\n\n  (c) PCRE2_CONFIG_TABLES_LENGTH is added to pcre2_config() so that an\n  application that wants to save tables in binary knows how long they are.\n\n22. Changed setting of CMAKE_MODULE_PATH in CMakeLists.txt from SET to\nLIST(APPEND...) to allow a setting from the command line to be included.\n\n23. Updated to Unicode 13.0.0.\n\n24. CMake build now checks for secure_getenv() and strerror(). Patch by Carlo.\n\n25. Avoid using [-1] as a suffix in pcre2test because it can provoke a compiler\nwarning.\n\n26. Added tests for __attribute__((uninitialized)) to both the configure and\nCMake build files, and then applied this attribute to the variable called\nstack_frames_vector[] in pcre2_match(). When implemented, this disables\nautomatic initialization (a facility in clang), which can take time on big\nvariables.\n\n27. Updated CMakeLists.txt (patches by Uwe Korn) to add support for\npcre2-config, the libpcre*.pc files, SOVERSION, VERSION and the\nMACHO_*_VERSIONS settings for CMake builds.\n\n28. Another patch to CMakeLists.txt to check for mkostemp (configure already\ndoes). Patch by Carlo Marcelo Arenas Belon.\n\n29. Check for the existence of memfd_create in both CMake and configure\nconfigurations. Patch by Carlo Marcelo Arenas Belon.\n\n30. Restrict the configuration setting for the SELinux compatible execmem\nallocator (change 10.30/44) to Linux and NetBSD.\n\n\nVersion 10.34 21-November-2019\n------------------------------\n\n1. The maximum number of capturing subpatterns is 65535 (documented), but no\ncheck on this was ever implemented. This omission has been rectified; it fixes\nClusterFuzz 14376.\n\n2. Improved the invalid utf32 support of the JIT compiler. Now it correctly\ndetects invalid characters in the 0xd800-0xdfff range.\n\n3. Fix minor typo bug in JIT compile when \\X is used in a non-UTF string.\n\n4. Add support for matching in invalid UTF strings to the pcre2_match()\ninterpreter, and integrate with the existing JIT support via the new\nPCRE2_MATCH_INVALID_UTF compile-time option.\n\n5. Give more error detail for invalid UTF-8 when detected in pcre2grep.\n\n6. Add support for invalid UTF-8 to pcre2grep.\n\n7. Adjust the limit for \"must have\" code unit searching, in particular,\nincrease it substantially for non-anchored patterns.\n\n8. Allow (*ACCEPT) to be quantified, because an ungreedy quantifier with a zero\nminimum is potentially useful.\n\n9. Some changes to the way the minimum subject length is handled:\n\n   * When PCRE2_NO_START_OPTIMIZE is set, no minimum length is computed;\n     pcre2test now omits this item instead of showing a value of zero.\n\n   * An incorrect minimum length could be calculated for a pattern that\n     contained (*ACCEPT) inside a qualified group whose minimum repetition was\n     zero, for example /A(?:(*ACCEPT))?B/, which incorrectly computed a minimum\n     of 2. The minimum length scan no longer happens for a pattern that\n     contains (*ACCEPT).\n\n   * When no minimum length is set by the normal scan, but a first and/or last\n     code unit is recorded, set the minimum to 1 or 2 as appropriate.\n\n   * When a pattern contains multiple groups with the same number, a back\n     reference cannot know which one to scan for a minimum length. This used to\n     cause the minimum length finder to give up with no result. Now it treats\n     such references as not adding to the minimum length (which it should have\n     done all along).\n\n   * Furthermore, the above action now happens only if the back reference is to\n     a group that exists more than once in a pattern instead of any back\n     reference in a pattern with duplicate numbers.\n\n10. A (*MARK) value inside a successful condition was not being returned by the\ninterpretive matcher (it was returned by JIT). This bug has been mended.\n\n11. A bug in pcre2grep meant that -o without an argument (or -o0) didn't work\nif the pattern had more than 32 capturing parentheses. This is fixed. In\naddition (a) the default limit for groups requested by -o<n> has been raised to\n50, (b) the new --om-capture option changes the limit, (c) an error is raised\nif -o asks for a group that is above the limit.\n\n12. The quantifier {1} was always being ignored, but this is incorrect when it\nis made possessive and applied to an item in parentheses, because a\nparenthesized item may contain multiple branches or other backtracking points,\nfor example /(a|ab){1}+c/ or /(a+){1}+a/.\n\n13. For partial matches, pcre2test was always showing the maximum lookbehind\ncharacters, flagged with \"<\", which is misleading when the lookbehind didn't\nactually look behind the start (because it was later in the pattern). Showing\nall consulted preceding characters for partial matches is now controlled by the\nexisting \"allusedtext\" modifier and, as for complete matches, this facility is\navailable only for non-JIT matching, because JIT does not maintain the first\nand last consulted characters.\n\n14. DFA matching (using pcre2_dfa_match()) was not recognising a partial match\nif the end of the subject was encountered in a lookahead (conditional or\notherwise), an atomic group, or a recursion.\n\n15. Give error if pcre2test -t, -T, -tm or -TM is given an argument of zero.\n\n16. Check for integer overflow when computing lookbehind lengths. Fixes\nClusterfuzz issue 15636.\n\n17. Implemented non-atomic positive lookaround assertions.\n\n18. If a lookbehind contained a lookahead that contained another lookbehind\nwithin it, the nested lookbehind was not correctly processed. For example, if\n/(?<=(?=(?<=a)))b/ was matched to \"ab\" it gave no match instead of matching\n\"b\".\n\n19. Implemented pcre2_get_match_data_size().\n\n20. Two alterations to partial matching:\n\n    (a) The definition of a partial match is slightly changed: if a pattern\n    contains any lookbehinds, an empty partial match may be given, because this\n    is another situation where adding characters to the current subject can\n    lead to a full match. Example: /c*+(?<=[bc])/ with subject \"ab\".\n\n    (b) Similarly, if a pattern could match an empty string, an empty partial\n    match may be given. Example: /(?![ab]).*/ with subject \"ab\". This case\n    applies only to PCRE2_PARTIAL_HARD.\n\n    (c) An empty string partial hard match can be returned for \\z and \\Z as it\n    is documented that they shouldn't match.\n\n21. A branch that started with (*ACCEPT) was not being recognized as one that\ncould match an empty string.\n\n22. Corrected pcre2_set_character_tables() tables data type: was const unsigned\nchar * instead of const uint8_t *, as generated by pcre2_maketables().\n\n23. Upgraded to Unicode 12.1.0.\n\n24. Add -jitfast command line option to pcre2test (to make all the jit options\navailable directly).\n\n25. Make pcre2test -C show if libreadline or libedit is supported.\n\n26. If the length of one branch of a group exceeded 65535 (the maximum value\nthat is remembered as a minimum length), the whole group's length was\nincorrectly recorded as 65535, leading to incorrect \"no match\" when start-up\noptimizations were in force.\n\n27. The \"rightmost consulted character\" value was not always correct; in\nparticular, if a pattern ended with a negative lookahead, characters that were\ninspected in that lookahead were not included.\n\n28. Add the pcre2_maketables_free() function.\n\n29. The start-up optimization that looks for a unique initial matching\ncode unit in the interpretive engines uses memchr() in 8-bit mode. When the\nsearch is caseless, it was doing so inefficiently, which ended up slowing down\nthe match drastically when the subject was very long. The revised code (a)\nremembers if one case is not found, so it never repeats the search for that\ncase after a bumpalong and (b) when one case has been found, it searches only\nup to that position for an earlier occurrence of the other case. This fix\napplies to both interpretive pcre2_match() and to pcre2_dfa_match().\n\n30. While scanning to find the minimum length of a group, if any branch has\nminimum length zero, there is no need to scan any subsequent branches (a small\ncompile-time performance improvement).\n\n31. Installed a .gitignore file on a user's suggestion. When using the svn\nrepository with git (through git svn) this helps keep it tidy.\n\n32. Add underflow check in JIT which may occur when the value of subject\nstring pointer is close to 0.\n\n33. Arrange for classes such as [Aa] which contain just the two cases of the\nsame character, to be treated as a single caseless character. This causes the\nfirst and required code unit optimizations to kick in where relevant.\n\n34. Improve the bitmap of starting bytes for positive classes that include wide\ncharacters, but no property types, in UTF-8 mode. Previously, on encountering\nsuch a class, the bits for all bytes greater than \\xc4 were set, thus\nspecifying any character with codepoint >= 0x100. Now the only bits that are\nset are for the relevant bytes that start the wide characters. This can give a\nnoticeable performance improvement.\n\n35. If the bitmap of starting code units contains only 1 or 2 bits, replace it\nwith a single starting code unit (1 bit) or a caseless single starting code\nunit if the two relevant characters are case-partners. This is particularly\nrelevant to the 8-bit library, though it applies to all. It can give a\nperformance boost for patterns such as [Ww]ord and (word|WORD). However, this\noptimization doesn't happen if there is a \"required\" code unit of the same\nvalue (because the search for a \"required\" code unit starts at the match start\nfor non-unique first code unit patterns, but after a unique first code unit,\nand patterns such as a*a need the former action).\n\n36. Small patch to pcre2posix.c to set the erroroffset field to -1 immediately\nafter a successful compile, instead of at the start of matching to avoid a\nsanitizer complaint (regexec is supposed to be thread safe).\n\n37. Add NEON vectorization to JIT to speed up matching of first character and\npairs of characters on ARM64 CPUs.\n\n38. If a non-ASCII character was the first in a starting assertion in a\ncaseless match, the \"first code unit\" optimization did not get the casing\nright, and the assertion failed to match a character in the other case if it\ndid not start with the same code unit.\n\n39. Fixed the incorrect computation of jump sizes on x86 CPUs in JIT. A masking\noperation was incorrectly removed in r1136. Reported by Ralf Junker.\n\n\nVersion 10.33 16-April-2019\n---------------------------\n\n1. Added \"allvector\" to pcre2test to make it easy to check the part of the\novector that shouldn't be changed, in particular after substitute and failed or\npartial matches.\n\n2. Fix subject buffer overread in JIT when UTF is disabled and \\X or \\R has\na greater than 1 fixed quantifier. This issue was found by Yunho Kim.\n\n3. Added support for callouts from pcre2_substitute(). After 10.33-RC1, but\nprior to release, fixed a bug that caused a crash if pcre2_substitute() was\ncalled with a NULL match context.\n\n4. The POSIX functions are now all called pcre2_regcomp() etc., with wrapper\nfunctions that use the standard POSIX names. However, in pcre2posix.h the POSIX\nnames are defined as macros. This should help avoid linking with the wrong\nlibrary in some environments while still exporting the POSIX names for\npre-existing programs that use them. (The Debian alternative names are also\ndefined as macros, but not documented.)\n\n5. Fix an xclass matching issue in JIT.\n\n6. Implement PCRE2_EXTRA_ESCAPED_CR_IS_LF (see Bugzilla 2315).\n\n7. Implement the Perl 5.28 experimental alphabetic names for atomic groups and\nlookaround assertions, for example, (*pla:...) and (*atomic:...). These are\ncharacterized by a lower case letter following (* and to simplify coding for\nthis, the character tables created by pcre2_maketables() were updated to add a\nnew \"is lower case letter\" bit. At the same time, the now unused \"is\nhexadecimal digit\" bit was removed. The default tables in\nsrc/pcre2_chartables.c.dist are updated.\n\n8. Implement the new Perl \"script run\" features (*script_run:...) and\n(*atomic_script_run:...) aka (*sr:...) and (*asr:...).\n\n9. Fixed two typos in change 22 for 10.21, which added special handling for\nranges such as a-z in EBCDIC environments. The original code probably never\nworked, though there were no bug reports.\n\n10. Implement PCRE2_COPY_MATCHED_SUBJECT for pcre2_match() (including JIT via\npcre2_match()) and pcre2_dfa_match(), but *not* the pcre2_jit_match() fast\npath. Also, when a match fails, set the subject field in the match data to NULL\nfor tidiness - none of the substring extractors should reference this after\nmatch failure.\n\n11. If a pattern started with a subroutine call that had a quantifier with a\nminimum of zero, an incorrect \"match must start with this character\" could be\nrecorded. Example: /(?&xxx)*ABC(?<xxx>XYZ)/ would (incorrectly) expect 'A' to\nbe the first character of a match.\n\n12. The heap limit checking code in pcre2_dfa_match() could suffer from\noverflow if the heap limit was set very large. This could cause incorrect \"heap\nlimit exceeded\" errors.\n\n13. Add \"kibibytes\" to the heap limit output from pcre2test -C to make the\nunits clear.\n\n14. Add a call to pcre2_jit_free_unused_memory() in pcre2grep, for tidiness.\n\n15. Updated the VMS-specific code in pcre2test on the advice of a VMS user.\n\n16. Removed the unnecessary inclusion of stdint.h (or inttypes.h) from\npcre2_internal.h as it is now included by pcre2.h. Also, change 17 for 10.32\nbelow was unnecessarily complicated, as inttypes.h is a Standard C header,\nwhich is defined to be a superset of stdint.h. Instead of conditionally\nincluding stdint.h or inttypes.h, pcre2.h now unconditionally includes\ninttypes.h. This supports environments that do not have stdint.h but do have\ninttypes.h, which are known to exist. A note in the autotools documentation\nsays (November 2018) that there are none known that are the other way round.\n\n17. Added --disable-percent-zt to \"configure\" (and equivalent to CMake) to\nforcibly disable the use of %zu and %td in formatting strings because there is\nat least one version of VMS that claims to be C99 but does not support these\nmodifiers.\n\n18. Added --disable-pcre2grep-callout-fork, which restricts the callout support\nin pcre2grep to the inbuilt echo facility. This may be useful in environments\nthat do not support fork().\n\n19. Fix two instances of <= 0 being applied to unsigned integers (the VMS\ncompiler complains).\n\n20. Added \"fork\" support for VMS to pcre2grep, for running an external program\nvia a string callout.\n\n21. Improve MAP_JIT flag usage on MacOS. Patch by Rich Siegel.\n\n22. If a pattern started with (*MARK), (*COMMIT), (*PRUNE), (*SKIP), or (*THEN)\nfollowed by ^ it was not recognized as anchored.\n\n23. The RunGrepTest script used to cut out the test of NUL characters for\nSolaris and MacOS as printf and sed can't handle them. It seems that the *BSD\nsystems can't either. I've inverted the test so that only those OS that are\nknown to work (currently only Linux) try to run this test.\n\n24. Some tests in RunGrepTest appended to testtrygrep from two different file\ndescriptors instead of redirecting stderr to stdout. This worked on Linux, but\nit was reported not to on other systems, causing the tests to fail.\n\n25. In the RunTest script, make the test for stack setting use the same value\nfor the stack as it needs for -bigstack.\n\n26. Insert a cast in pcre2_dfa_match.c to suppress a compiler warning.\n\n26. With PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL set, escape sequences such as \\s\nwhich are valid in character classes, but not as the end of ranges, were being\ntreated as literals. An example is [_-\\s] (but not [\\s-_] because that gave an\nerror at the *start* of a range). Now an \"invalid range\" error is given\nindependently of PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL.\n\n27. Related to 26 above, PCRE2_BAD_ESCAPE_IS_LITERAL was affecting known escape\nsequences such as \\eX when they appeared invalidly in a character class. Now\nthe option applies only to unrecognized or malformed escape sequences.\n\n28. Fix word boundary in JIT compiler. Patch by Mike Munday.\n\n29. The pcre2_dfa_match() function was incorrectly handling conditional version\ntests such as (?(VERSION>=0)...) when the version test was true. Incorrect\nprocessing or a crash could result.\n\n30. When PCRE2_UTF is set, allow non-ASCII letters and decimal digits in group\nnames, as Perl does. There was a small bug in this new code, found by\nClusterFuzz 12950, fixed before release.\n\n31. Implemented PCRE2_EXTRA_ALT_BSUX to support ECMAScript 6's \\u{hhh}\nconstruct.\n\n32. Compile \\p{Any} to be the same as . in DOTALL mode, so that it benefits\nfrom auto-anchoring if \\p{Any}* starts a pattern.\n\n33. Compile invalid UTF check in JIT test when only pcre32 is enabled.\n\n34. For some time now, CMake has been warning about the setting of policy\nCMP0026 to \"OLD\" in CmakeLists.txt, and hinting that the feature might be\nremoved in a future version. A request for CMake expertise on the list produced\nno result, so I have now hacked CMakeLists.txt along the lines of some changes\nI found on the Internet. The new code no longer needs the policy setting, and\nit appears to work fine on Linux.\n\n35. Setting --enable-jit=auto for an out-of-tree build failed because the\nsource directory wasn't in the search path for AC_TRY_COMPILE always. Patch\nfrom Ross Burton.\n\n36. Disable SSE2 JIT optimizations in x86 CPUs when SSE2 is not available.\nPatch by Guillem Jover.\n\n37. Changed expressions such as 1<<10 to 1u<<10 in many places because compiler\nwarnings were reported.\n\n38. Using the clang compiler with sanitizing options causes runtime complaints\nabout truncation for statements such as x = ~x when x is an 8-bit value; it\nseems to compute ~x as a 32-bit value. Changing such statements to x = 255 ^ x\ngets rid of the warnings. There were also two missing casts in pcre2test.\n\n\nVersion 10.32 10-September-2018\n-------------------------------\n\n1. When matching using the REG_STARTEND feature of the POSIX API with a\nnon-zero starting offset, unset capturing groups with lower numbers than a\ngroup that did capture something were not being correctly returned as \"unset\"\n(that is, with offset values of -1).\n\n2. When matching using the POSIX API, pcre2test used to omit listing unset\ngroups altogether. Now it shows those that come before any actual captures as\n\"<unset>\", as happens for non-POSIX matching.\n\n3. Running \"pcre2test -C\" always stated \"\\R matches CR, LF, or CRLF only\",\nwhatever the build configuration was. It now correctly says \"\\R matches all\nUnicode newlines\" in the default case when --enable-bsr-anycrlf has not been\nspecified. Similarly, running \"pcre2test -C bsr\" never produced the result\nANY.\n\n4. Matching the pattern /(*UTF)\\C[^\\v]+\\x80/ against an 8-bit string containing\nmulti-code-unit characters caused bad behaviour and possibly a crash. This\nissue was fixed for other kinds of repeat in release 10.20 by change 19, but\nrepeating character classes were overlooked.\n\n5. pcre2grep now supports the inclusion of binary zeros in patterns that are\nread from files via the -f option.\n\n6. A small fix to pcre2grep to avoid compiler warnings for -Wformat-overflow=2.\n\n7. Added --enable-jit=auto support to configure.ac.\n\n8. Added some dummy variables to the heapframe structure in 16-bit and 32-bit\nmodes for the benefit of m68k, where pointers can be 16-bit aligned. The\ndummies force 32-bit alignment and this ensures that the structure is a\nmultiple of PCRE2_SIZE, a requirement that is tested at compile time. In other\narchitectures, alignment requirements take care of this automatically.\n\n9. When returning an error from pcre2_pattern_convert(), ensure the error\noffset is set zero for early errors.\n\n10. A number of patches for Windows support from Daniel Richard G:\n\n  (a) List of error numbers in Runtest.bat corrected (it was not the same as in\n      Runtest).\n\n  (b) pcre2grep snprintf() workaround as used elsewhere in the tree.\n\n  (c) Support for non-C99 snprintf() that returns -1 in the overflow case.\n\n11. Minor tidy of pcre2_dfa_match() code.\n\n12. Refactored pcre2_dfa_match() so that the internal recursive calls no longer\nuse the stack for local workspace and local ovectors. Instead, an initial block\nof stack is reserved, but if this is insufficient, heap memory is used. The\nheap limit parameter now applies to pcre2_dfa_match().\n\n13. If a \"find limits\" test of DFA matching in pcre2test resulted in too many\nmatches for the ovector, no matches were displayed.\n\n14. Removed an occurrence of ctrl/Z from test 6 because Windows treats it as\nEOF. The test looks to have come from a fuzzer.\n\n15. If PCRE2 was built with a default match limit a lot greater than the\ndefault default of 10 000 000, some JIT tests of the match limit no longer\nfailed. All such tests now set 10 000 000 as the upper limit.\n\n16. Another Windows related patch for pcregrep to ensure that WIN32 is\nundefined under Cygwin.\n\n17. Test for the presence of stdint.h and inttypes.h in configure and CMake and\ninclude whichever exists (stdint preferred) instead of unconditionally\nincluding stdint. This makes life easier for old and non-standard systems.\n\n18. Further changes to improve portability, especially to old and or non-\nstandard systems:\n\n  (a) Put all printf arguments in RunGrepTest into single, not double, quotes,\n      and use \\0 not \\x00 for binary zero.\n\n  (b) Avoid the use of C++ (i.e. BCPL) // comments.\n\n  (c) Parameterize the use of %zu in pcre2test to make it like %td. For both of\n      these now, if using MSVC or a standard C before C99, %lu is used with a\n      cast if necessary.\n\n19. Applied a contributed patch to CMakeLists.txt to increase the stack size\nwhen linking pcre2test with MSVC. This gets rid of a stack overflow error in\nthe standard set of tests.\n\n20. Output a warning in pcre2test when ignoring the \"altglobal\" modifier when\nit is given with the \"replace\" modifier.\n\n21. In both pcre2test and pcre2_substitute(), with global matching, a pattern\nthat matched an empty string, but never at the starting match offset, was not\nhandled in a Perl-compatible way. The pattern /(<?=\\G.)/ is an example of such\na pattern. Because \\G is in a lookbehind assertion, there has to be a\n\"bumpalong\" before there can be a match. The automatic \"advance by one\ncharacter after an empty string match\" rule is therefore inappropriate. A more\ncomplicated algorithm has now been implemented.\n\n22. When checking to see if a lookbehind is of fixed length, lookaheads were\ncorrectly ignored, but qualifiers on lookaheads were not being ignored, leading\nto an incorrect \"lookbehind assertion is not fixed length\" error.\n\n23. The VERSION condition test was reading fractional PCRE2 version numbers\nsuch as the 04 in 10.04 incorrectly and hence giving wrong results.\n\n24. Updated to Unicode version 11.0.0. As well as the usual addition of new\nscripts and characters, this involved re-jigging the grapheme break property\nalgorithm because Unicode has changed the way emojis are handled.\n\n25. Fixed an obscure bug that struck when there were two atomic groups not\nseparated by something with a backtracking point. There could be an incorrect\nbacktrack into the first of the atomic groups. A complicated example is\n/(?>a(*:1))(?>b)(*SKIP:1)x|.*/ matched against \"abc\", where the *SKIP\nshouldn't find a MARK (because is in an atomic group), but it did.\n\n26. Upgraded the perltest.sh script: (1) #pattern lines can now be used to set\na list of modifiers for all subsequent patterns - only those that the script\nrecognizes are meaningful; (2) #subject lines can be used to set or unset a\ndefault \"mark\" modifier; (3) Unsupported #command lines give a warning when\nthey are ignored; (4) Mark data is output only if the \"mark\" modifier is\npresent.\n\n27. (*ACCEPT:ARG), (*FAIL:ARG), and (*COMMIT:ARG) are now supported.\n\n28. A (*MARK) name was not being passed back for positive assertions that were\nterminated by (*ACCEPT).\n\n29. Add support for \\N{U+dddd}, but only in Unicode mode.\n\n30. Add support for (?^) for unsetting all imnsx options.\n\n31. The PCRE2_EXTENDED (/x) option only ever discarded space characters whose\ncode point was less than 256 and that were recognized by the lookup table\ngenerated by pcre2_maketables(), which uses isspace() to identify white space.\nNow, when Unicode support is compiled, PCRE2_EXTENDED also discards U+0085,\nU+200E, U+200F, U+2028, and U+2029, which are additional characters defined by\nUnicode as \"Pattern White Space\". This makes PCRE2 compatible with Perl.\n\n32. In certain circumstances, option settings within patterns were not being\ncorrectly processed. For example, the pattern /((?i)A)(?m)B/ incorrectly\nmatched \"ab\". (The (?m) setting lost the fact that (?i) should be reset at the\nend of its group during the parse process, but without another setting such as\n(?m) the compile phase got it right.) This bug was introduced by the\nrefactoring in release 10.23.\n\n33. PCRE2 uses bcopy() if available when memmove() is not, and it used just to\ndefine memmove() as function call to bcopy(). This hasn't been tested for a\nlong time because in pcre2test the result of memmove() was being used, whereas\nbcopy() doesn't return a result. This feature is now refactored always to call\nan emulation function when there is no memmove(). The emulation makes use of\nbcopy() when available.\n\n34. When serializing a pattern, set the memctl, executable_jit, and tables\nfields (that is, all the fields that contain pointers) to zeros so that the\nresult of serializing is always the same. These fields are re-set when the\npattern is deserialized.\n\n35. In a pattern such as /[^\\x{100}-\\x{ffff}]*[\\x80-\\xff]/ which has a repeated\nnegative class with no characters less than 0x100 followed by a positive class\nwith only characters less than 0x100, the first class was incorrectly being\nauto-possessified, causing incorrect match failures.\n\n36. Removed the character type bit ctype_meta, which dates from PCRE1 and is\nnot used in PCRE2.\n\n37. Tidied up unnecessarily complicated macros used in the escapes table.\n\n38. Since 10.21, the new testoutput8-16-4 file has accidentally been omitted\nfrom distribution tarballs, owing to a typo in Makefile.am which had\ntestoutput8-16-3 twice. Now fixed.\n\n39. If the only branch in a conditional subpattern was anchored, the whole\nsubpattern was treated as anchored, when it should not have been, since the\nassumed empty second branch cannot be anchored. Demonstrated by test patterns\nsuch as /(?(1)^())b/ or /(?(?=^))b/.\n\n40. A repeated conditional subpattern that could match an empty string was\nalways assumed to be unanchored. Now it is checked just like any other\nrepeated conditional subpattern, and can be found to be anchored if the minimum\nquantifier is one or more. I can't see much use for a repeated anchored\npattern, but the behaviour is now consistent.\n\n41. Minor addition to pcre2_jit_compile.c to avoid static analyzer complaint\n(for an event that could never occur but you had to have external information\nto know that).\n\n42. If before the first match in a file that was being searched by pcre2grep\nthere was a line that was sufficiently long to cause the input buffer to be\nexpanded, the variable holding the location of the end of the previous match\nwas being adjusted incorrectly, and could cause an overflow warning from a code\nsanitizer. However, as the value is used only to print pending \"after\" lines\nwhen the next match is reached (and there are no such lines in this case) this\nbug could do no damage.\n\n\nVersion 10.31 12-February-2018\n------------------------------\n\n1. Fix typo (missing ]) in VMS code in pcre2test.c.\n\n2. Replace the replicated code for matching extended Unicode grapheme sequences\n(which got a lot more complicated by change 10.30/49) by a single subroutine\nthat is called by both pcre2_match() and pcre2_dfa_match().\n\n3. Add idempotent guard to pcre2_internal.h.\n\n4. Add new pcre2_config() options: PCRE2_CONFIG_NEVER_BACKSLASH_C and\nPCRE2_CONFIG_COMPILED_WIDTHS.\n\n5. Cut out \\C tests in the JIT regression tests when NEVER_BACKSLASH_C is\ndefined (e.g. by --enable-never-backslash-C).\n\n6. Defined public names for all the pcre2_compile() error numbers, and used\nthe public names in pcre2_convert.c.\n\n7. Fixed a small memory leak in pcre2test (convert contexts).\n\n8. Added two casts to compile.c and one to match.c to avoid compiler warnings.\n\n9. Added code to pcre2grep when compiled under VMS to set the symbol\nPCRE2GREP_RC to the exit status, because VMS does not distinguish between\nexit(0) and exit(1).\n\n10. Added the -LM (list modifiers) option to pcre2test. Also made -C complain\nabout a bad option only if the following argument item does not start with a\nhyphen.\n\n11. pcre2grep was truncating components of file names to 128 characters when\nprocessing files with the -r option, and also (some very odd code) truncating\npath names to 512 characters. There is now a check on the absolute length of\nfull path file names, which may be up to 2047 characters long.\n\n12. When an assertion contained (*ACCEPT) it caused all open capturing groups\nto be closed (as for a non-assertion ACCEPT), which was wrong and could lead to\nmisbehaviour for subsequent references to groups that started outside the\nassertion. ACCEPT in an assertion now closes only those groups that were\nstarted within that assertion. Fixes oss-fuzz issues 3852 and 3891.\n\n13. Multiline matching in pcre2grep was misbehaving if the pattern matched\nwithin a line, and then matched again at the end of the line and over into\nsubsequent lines. Behaviour was different with and without colouring, and\nsometimes context lines were incorrectly printed and/or line endings were lost.\nAll these issues should now be fixed.\n\n14. If --line-buffered was specified for pcre2grep when input was from a\ncompressed file (.gz or .bz2) a segfault occurred. (Line buffering should be\nignored for compressed files.)\n\n15. Although pcre2_jit_match checks whether the pattern is compiled\nin a given mode, it was also expected that at least one mode is available.\nThis is fixed and pcre2_jit_match returns with PCRE2_ERROR_JIT_BADOPTION\nwhen the pattern is not optimized by JIT at all.\n\n16. The line number and related variables such as match counts in pcre2grep\nwere all int variables, causing overflow when files with more than 2147483647\nlines were processed (assuming 32-bit ints). They have all been changed to\nunsigned long ints.\n\n17. If a backreference with a minimum repeat count of zero was first in a\npattern, apart from assertions, an incorrect first matching character could be\nrecorded. For example, for the pattern /(?=(a))\\1?b/, \"b\" was incorrectly set\nas the first character of a match.\n\n18. Characters in a leading positive assertion are considered for recording a\nfirst character of a match when the rest of the pattern does not provide one.\nHowever, a character in a non-assertive group within a leading assertion such\nas in the pattern /(?=(a))\\1?b/ caused this process to fail. This was an\ninfelicity rather than an outright bug, because it did not affect the result of\na match, just its speed. (In fact, in this case, the starting 'a' was\nsubsequently picked up in the study.)\n\n19. A minor tidy in pcre2_match(): making all PCRE2_ERROR_ returns use \"return\"\ninstead of \"RRETURN\" saves unwinding the backtracks in these cases (only one\ndidn't).\n\n20. Allocate a single callout block on the stack at the start of pcre2_match()\nand set its never-changing fields once only. Do the same for pcre2_dfa_match().\n\n21. Save the extra compile options (set in the compile context) with the\ncompiled pattern (they were not previously saved), add PCRE2_INFO_EXTRAOPTIONS\nto retrieve them, and update pcre2test to show them.\n\n22. Added PCRE2_CALLOUT_STARTMATCH and PCRE2_CALLOUT_BACKTRACK bits to a new\nfield callout_flags in callout blocks. The bits are set by pcre2_match(), but\nnot by JIT or pcre2_dfa_match(). Their settings are shown in pcre2test callouts\nif the callout_extra subject modifier is set. These bits are provided to help\nwith tracking how a backtracking match is proceeding.\n\n23. Updated the pcre2demo.c demonstration program, which was missing the extra\ncode for -g that handles the case when \\K in an assertion causes the match to\nend at the original start point. Also arranged for it to detect when \\K causes\nthe end of a match to be before its start.\n\n24. Similar to 23 above, strange things (including loops) could happen in\npcre2grep when \\K was used in an assertion when --colour was used or in\nmultiline mode. The \"end at original start point\" bug is fixed, and if the end\npoint is found to be before the start point, they are swapped.\n\n25. When PCRE2_FIRSTLINE without PCRE2_NO_START_OPTIMIZE was used in non-JIT\nmatching (both pcre2_match() and pcre2_dfa_match()) and the matched string\nstarted with the first code unit of a newline sequence, matching failed because\nit was not tried at the newline.\n\n26. Code for giving up a non-partial match after failing to find a starting\ncode unit anywhere in the subject was missing when searching for one of a\nnumber of code units (the bitmap case) in both pcre2_match() and\npcre2_dfa_match(). This was a missing optimization rather than a bug.\n\n27. Tidied up the ACROSSCHAR macro to be like FORWARDCHAR and BACKCHAR, using a\npointer argument rather than a code unit value. This should not have affected\nthe generated code.\n\n28. The JIT compiler has been updated.\n\n29. Avoid pointer overflow for unset captures in pcre2_substring_list_get().\nThis could not actually cause a crash because it was always used in a memcpy()\ncall with zero length.\n\n30. Some internal structures have a variable-length ovector[] as their last\nelement. Their actual memory is obtained dynamically, giving an ovector of\nappropriate length. However, they are defined in the structure as\novector[NUMBER], where NUMBER is large so that array bound checkers don't\ngrumble. The value of NUMBER was 10000, but a fuzzer exceeded 5000 capturing\ngroups, making the ovector larger than this. The number has been increased to\n131072, which allows for the maximum number of captures (65535) plus the\noverall match. This fixes oss-fuzz issue 5415.\n\n31. Auto-possessification at the end of a capturing group was dependent on what\nfollows the group (e.g. /(a+)b/ would auto-possessify the a+) but this caused\nincorrect behaviour when the group was called recursively from elsewhere in the\npattern where something different might follow. This bug is an unforseen\nconsequence of change #1 for 10.30 - the implementation of backtracking into\nrecursions. Iterators at the ends of capturing groups are no longer considered\nfor auto-possessification if the pattern contains any recursions. Fixes\nBugzilla #2232.\n\n\nVersion 10.30 14-August-2017\n----------------------------\n\n1. The main interpreter, pcre2_match(), has been refactored into a new version\nthat does not use recursive function calls (and therefore the stack) for\nremembering backtracking positions. This makes --disable-stack-for-recursion a\nNOOP. The new implementation allows backtracking into recursive group calls in\npatterns, making it more compatible with Perl, and also fixes some other\nhard-to-do issues such as #1887 in Bugzilla. The code is also cleaner because\nthe old code had a number of fudges to try to reduce stack usage. It seems to\nrun no slower than the old code.\n\nA number of bugs in the refactored code were subsequently fixed during testing\nbefore release, but after the code was made available in the repository. These\nbugs were never in fully released code, but are noted here for the record.\n\n  (a) If a pattern had fewer capturing parentheses than the ovector supplied in\n      the match data block, a memory error (detectable by ASAN) occurred after\n      a match, because the external block was being set from non-existent\n      internal ovector fields. Fixes oss-fuzz issue 781.\n\n  (b) A pattern with very many capturing parentheses (when the internal frame\n      size was greater than the initial frame vector on the stack) caused a\n      crash. A vector on the heap is now set up at the start of matching if the\n      vector on the stack is not big enough to handle at least 10 frames.\n      Fixes oss-fuzz issue 783.\n\n  (c) Handling of (*VERB)s in recursions was wrong in some cases.\n\n  (d) Captures in negative assertions that were used as conditions were not\n      happening if the assertion matched via (*ACCEPT).\n\n  (e) Mark values were not being passed out of recursions.\n\n  (f) Refactor some code in do_callout() to avoid picky compiler warnings about\n      negative indices. Fixes oss-fuzz issue 1454.\n\n  (g) Similarly refactor the way the variable length ovector is addressed for\n      similar reasons. Fixes oss-fuzz issue 1465.\n\n2. Now that pcre2_match() no longer uses recursive function calls (see above),\nthe \"match limit recursion\" value seems misnamed. It still exists, and limits\nthe depth of tree that is searched. To avoid future confusion, it has been\nrenamed as \"depth limit\" in all relevant places (--with-depth-limit,\n(*LIMIT_DEPTH), pcre2_set_depth_limit(), etc) but the old names are still\navailable for backwards compatibility.\n\n3. Hardened pcre2test so as to reduce the number of bugs reported by fuzzers:\n\n  (a) Check for malloc failures when getting memory for the ovector (POSIX) or\n      the match data block (non-POSIX).\n\n4. In the 32-bit library in non-UTF mode, an attempt to find a Unicode property\nfor a character with a code point greater than 0x10ffff (the Unicode maximum)\ncaused a crash.\n\n5. If a lookbehind assertion that contained a back reference to a group\nappearing later in the pattern was compiled with the PCRE2_ANCHORED option,\nundefined actions (often a segmentation fault) could occur, depending on what\nother options were set. An example assertion is (?<!\\1(abc)) where the\nreference \\1 precedes the group (abc). This fixes oss-fuzz issue 865.\n\n6. Added the PCRE2_INFO_FRAMESIZE item to pcre2_pattern_info() and arranged for\npcre2test to use it to output the frame size when the \"framesize\" modifier is\ngiven.\n\n7. Reworked the recursive pattern matching in the JIT compiler to follow the\ninterpreter changes.\n\n8. When the zero_terminate modifier was specified on a pcre2test subject line\nfor global matching, unpredictable things could happen. For example, in UTF-8\nmode, the pattern //g,zero_terminate read random memory when matched against an\nempty string with zero_terminate. This was a bug in pcre2test, not the library.\n\n9. Moved some Windows-specific code in pcre2grep (introduced in 10.23/13) out\nof the section that is compiled when Unix-style directory scanning is\navailable, and into a new section that is always compiled for Windows.\n\n10. In pcre2test, explicitly close the file after an error during serialization\nor deserialization (the \"load\" or \"save\" commands).\n\n11. Fix memory leak in pcre2_serialize_decode() when the input is invalid.\n\n12. Fix potential NULL dereference in pcre2_callout_enumerate() if called with\na NULL pattern pointer when Unicode support is available.\n\n13. When the 32-bit library was being tested by pcre2test, error messages that\nwere longer than 64 code units could cause a buffer overflow. This was a bug in\npcre2test.\n\n14. The alternative matching function, pcre2_dfa_match() misbehaved if it\nencountered a character class with a possessive repeat, for example [a-f]{3}+.\n\n15. The depth (formerly recursion) limit now applies to DFA matching (as\nof 10.23/36); pcre2test has been upgraded so that \\=find_limits works with DFA\nmatching to find the minimum value for this limit.\n\n16. Since 10.21, if pcre2_match() was called with a null context, default\nmemory allocation functions were used instead of whatever was used when the\npattern was compiled.\n\n17. Changes to the pcre2test \"memory\" modifier on a subject line. These apply\nonly to pcre2_match():\n\n  (a) Warn if null_context is set on both pattern and subject, because the\n      memory details cannot then be shown.\n\n  (b) Remember (up to a certain number of) memory allocations and their\n      lengths, and list only the lengths, so as to be system-independent.\n      (In practice, the new interpreter never has more than 2 blocks allocated\n      simultaneously.)\n\n18. Make pcre2test detect an error return from pcre2_get_error_message(), give\na message, and abandon the run (this would have detected #13 above).\n\n19. Implemented PCRE2_ENDANCHORED.\n\n20. Applied Jason Hood's patches (slightly modified) to pcre2grep, to implement\nthe --output=text (-O) option and the inbuilt callout echo.\n\n21. Extend auto-anchoring etc. to ignore groups with a zero qualifier and\nsingle-branch conditions with a false condition (e.g. DEFINE) at the start of a\nbranch. For example, /(?(DEFINE)...)^A/ and /(...){0}^B/ are now flagged as\nanchored.\n\n22. Added an explicit limit on the amount of heap used by pcre2_match(), set by\npcre2_set_heap_limit() or (*LIMIT_HEAP=xxx). Upgraded pcre2test to show the\nheap limit along with other pattern information, and to find the minimum when\nthe find_limits modifier is set.\n\n23. Write to the last 8 bytes of the pcre2_real_code structure when a compiled\npattern is set up so as to initialize any padding the compiler might have\nincluded. This avoids valgrind warnings when a compiled pattern is copied, in\nparticular when it is serialized.\n\n24. Remove a redundant line of code left in accidentally a long time ago.\n\n25. Remove a duplication typo in pcre2_tables.c\n\n26. Correct an incorrect cast in pcre2_valid_utf.c\n\n27. Update pcre2test, remove some unused code in pcre2_match(), and upgrade the\ntests to improve coverage.\n\n28. Some fixes/tidies as a result of looking at Coverity Scan output:\n\n    (a) Typo: \">\" should be \">=\" in opcode check in pcre2_auto_possess.c.\n    (b) Added some casts to avoid \"suspicious implicit sign extension\".\n    (c) Resource leaks in pcre2test in rare error cases.\n    (d) Avoid warning for never-use case OP_TABLE_LENGTH which is just a fudge\n        for checking at compile time that tables are the right size.\n    (e) Add missing \"fall through\" comment.\n\n29. Implemented PCRE2_EXTENDED_MORE and related /xx and (?xx) features.\n\n30. Implement (?n: for PCRE2_NO_AUTO_CAPTURE, because Perl now has this.\n\n31. If more than one of \"push\", \"pushcopy\", or \"pushtablescopy\" were set in\npcre2test, a crash could occur.\n\n32. Make -bigstack in RunTest allocate a 64MiB stack (instead of 16MiB) so\nthat all the tests can run with clang's sanitizing options.\n\n33. Implement extra compile options in the compile context and add the first\none: PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES.\n\n34. Implement newline type PCRE2_NEWLINE_NUL.\n\n35. A lookbehind assertion that had a zero-length branch caused undefined\nbehaviour when processed by pcre2_dfa_match(). This is oss-fuzz issue 1859.\n\n36. The match limit value now also applies to pcre2_dfa_match() as there are\npatterns that can use up a lot of resources without necessarily recursing very\ndeeply. (Compare item 10.23/36.) This should fix oss-fuzz #1761.\n\n37. Implement PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL.\n\n38. Fix returned offsets from regexec() when REG_STARTEND is used with a\nstarting offset greater than zero.\n\n39. Implement REG_PEND (GNU extension) for the POSIX wrapper.\n\n40. Implement the subject_literal modifier in pcre2test, and allow jitstack on\npattern lines.\n\n41. Implement PCRE2_LITERAL and use it to support REG_NOSPEC.\n\n42. Implement PCRE2_EXTRA_MATCH_LINE and PCRE2_EXTRA_MATCH_WORD for the benefit\nof pcre2grep.\n\n43. Re-implement pcre2grep's -F, -w, and -x options using PCRE2_LITERAL,\nPCRE2_EXTRA_MATCH_WORD, and PCRE2_EXTRA_MATCH_LINE. This fixes two bugs:\n\n    (a) The -F option did not work for fixed strings containing \\E.\n    (b) The -w option did not work for patterns with multiple branches.\n\n44. Added configuration options for the SELinux compatible execmem allocator in\nJIT.\n\n45. Increased the limit for searching for a \"must be present\" code unit in\nsubjects from 1000 to 2000 for 8-bit searches, since they use memchr() and are\nmuch faster.\n\n46. Arrange for anchored patterns to record and use \"first code unit\" data,\nbecause this can give a fast \"no match\" without searching for a \"required code\nunit\". Previously only non-anchored patterns did this.\n\n47. Upgraded the Unicode tables from Unicode 8.0.0 to Unicode 10.0.0.\n\n48. Add the callout_no_where modifier to pcre2test.\n\n49. Update extended grapheme breaking rules to the latest set that are in\nUnicode Standard Annex #29.\n\n50. Added experimental foreign pattern conversion facilities\n(pcre2_pattern_convert() and friends).\n\n51. Change the macro FWRITE, used in pcre2grep, to FWRITE_IGNORE because FWRITE\nis defined in a system header in cygwin. Also modified some of the #ifdefs in\npcre2grep related to Windows and Cygwin support.\n\n52. Change 3(g) for 10.23 was a bit too zealous. If a hyphen that follows a\ncharacter class is the last character in the class, Perl does not give a\nwarning. PCRE2 now also treats this as a literal.\n\n53. Related to 52, though PCRE2 was throwing an error for [[:digit:]-X] it was\nnot doing so for [\\d-X] (and similar escapes), as is documented.\n\n54. Fixed a MIPS issue in the JIT compiler reported by Joshua Kinard.\n\n55. Fixed a \"maybe uninitialized\" warning for class_uchardata in \\p handling in\npcre2_compile() which could never actually trigger (code should have been cut\nout when Unicode support is disabled).\n\n\nVersion 10.23 14-February-2017\n------------------------------\n\n1. Extended pcre2test with the utf8_input modifier so that it is able to\ngenerate all possible 16-bit and 32-bit code unit values in non-UTF modes.\n\n2. In any wide-character mode (8-bit UTF or any 16-bit or 32-bit mode), without\nPCRE2_UCP set, a negative character type such as \\D in a positive class should\ncause all characters greater than 255 to match, whatever else is in the class.\nThere was a bug that caused this not to happen if a Unicode property item was\nadded to such a class, for example [\\D\\P{Nd}] or [\\W\\pL].\n\n3. There has been a major re-factoring of the pcre2_compile.c file. Most syntax\nchecking is now done in the pre-pass that identifies capturing groups. This has\nreduced the amount of duplication and made the code tidier. While doing this,\nsome minor bugs and Perl incompatibilities were fixed, including:\n\n  (a) \\Q\\E in the middle of a quantifier such as A+\\Q\\E+ is now ignored instead\n      of giving an invalid quantifier error.\n\n  (b) {0} can now be used after a group in a lookbehind assertion; previously\n      this caused an \"assertion is not fixed length\" error.\n\n  (c) Perl always treats (?(DEFINE) as a \"define\" group, even if a group with\n      the name \"DEFINE\" exists. PCRE2 now does likewise.\n\n  (d) A recursion condition test such as (?(R2)...) must now refer to an\n      existing subpattern.\n\n  (e) A conditional recursion test such as (?(R)...) misbehaved if there was a\n      group whose name began with \"R\".\n\n  (f) When testing zero-terminated patterns under valgrind, the terminating\n      zero is now marked \"no access\". This catches bugs that would otherwise\n      show up only with non-zero-terminated patterns.\n\n  (g) A hyphen appearing immediately after a POSIX character class (for example\n      /[[:ascii:]-z]/) now generates an error. Perl does accept this as a\n      literal, but gives a warning, so it seems best to fail it in PCRE.\n\n  (h) An empty \\Q\\E sequence may appear after a callout that precedes an\n      assertion condition (it is, of course, ignored).\n\nOne effect of the refactoring is that some error numbers and messages have\nchanged, and the pattern offset given for compiling errors is not always the\nright-most character that has been read. In particular, for a variable-length\nlookbehind assertion it now points to the start of the assertion. Another\nchange is that when a callout appears before a group, the \"length of next\npattern item\" that is passed now just gives the length of the opening\nparenthesis item, not the length of the whole group. A length of zero is now\ngiven only for a callout at the end of the pattern. Automatic callouts are no\nlonger inserted before and after explicit callouts in the pattern.\n\nA number of bugs in the refactored code were subsequently fixed during testing\nbefore release, but after the code was made available in the repository. Many\nof the bugs were discovered by fuzzing testing. Several of them were related to\nthe change from assuming a zero-terminated pattern (which previously had\nrequired non-zero terminated strings to be copied). These bugs were never in\nfully released code, but are noted here for the record.\n\n  (a) An overall recursion such as (?0) inside a lookbehind assertion was not\n      being diagnosed as an error.\n\n  (b) In utf mode, the length of a *MARK (or other verb) name was being checked\n      in characters instead of code units, which could lead to bad code being\n      compiled, leading to unpredictable behaviour.\n\n  (c) In extended /x mode, characters whose code was greater than 255 caused\n      a lookup outside one of the global tables. A similar bug existed for wide\n      characters in *VERB names.\n\n  (d) The amount of memory needed for a compiled pattern was miscalculated if a\n      lookbehind contained more than one toplevel branch and the first branch\n      was of length zero.\n\n  (e) In UTF-8 or UTF-16 modes with PCRE2_EXTENDED (/x) set and a non-zero-\n      terminated pattern, if a # comment ran on to the end of the pattern, one\n      or more code units past the end were being read.\n\n  (f) An unterminated repeat at the end of a non-zero-terminated pattern (e.g.\n      \"{2,2\") could cause reading beyond the pattern.\n\n  (g) When reading a callout string, if the end delimiter was at the end of the\n      pattern one further code unit was read.\n\n  (h) An unterminated number after \\g' could cause reading beyond the pattern.\n\n  (i) An insufficient memory size was being computed for compiling with\n      PCRE2_AUTO_CALLOUT.\n\n  (j) A conditional group with an assertion condition used more memory than was\n      allowed for it during parsing, so too many of them could therefore\n      overrun a buffer.\n\n  (k) If parsing a pattern exactly filled the buffer, the internal test for\n      overrun did not check when the final META_END item was added.\n\n  (l) If a lookbehind contained a subroutine call, and the called group\n      contained an option setting such as (?s), and the PCRE2_ANCHORED option\n      was set, unpredictable behaviour could occur. The underlying bug was\n      incorrect code and insufficient checking while searching for the end of\n      the called subroutine in the parsed pattern.\n\n  (m) Quantifiers following (*VERB)s were not being diagnosed as errors.\n\n  (n) The use of \\Q...\\E in a (*VERB) name when PCRE2_ALT_VERBNAMES and\n      PCRE2_AUTO_CALLOUT were both specified caused undetermined behaviour.\n\n  (o) If \\Q was preceded by a quantified item, and the following \\E was\n      followed by '?' or '+', and there was at least one literal character\n      between them, an internal error \"unexpected repeat\" occurred (example:\n      /.+\\QX\\E+/).\n\n  (p) A buffer overflow could occur while sorting the names in the group name\n      list (depending on the order in which the names were seen).\n\n  (q) A conditional group that started with a callout was not doing the right\n      check for a following assertion, leading to compiling bad code. Example:\n      /(?(C'XX))?!XX/\n\n  (r) If a character whose code point was greater than 0xffff appeared within\n      a lookbehind that was within another lookbehind, the calculation of the\n      lookbehind length went wrong and could provoke an internal error.\n\n  (t) The sequence \\E- or \\Q\\E- after a POSIX class in a character class caused\n      an internal error. Now the hyphen is treated as a literal.\n\n4. Back references are now permitted in lookbehind assertions when there are\nno duplicated group numbers (that is, (?| has not been used), and, if the\nreference is by name, there is only one group of that name. The referenced\ngroup must, of course be of fixed length.\n\n5. pcre2test has been upgraded so that, when run under valgrind with valgrind\nsupport enabled, reading past the end of the pattern is detected, both when\ncompiling and during callout processing.\n\n6. \\g{+<number>} (e.g. \\g{+2} ) is now supported. It is a \"forward back\nreference\" and can be useful in repetitions (compare \\g{-<number>} ). Perl does\nnot recognize this syntax.\n\n7. Automatic callouts are no longer generated before and after callouts in the\npattern.\n\n8. When pcre2test was outputting information from a callout, the caret indicator\nfor the current position in the subject line was incorrect if it was after an\nescape sequence for a character whose code point was greater than \\x{ff}.\n\n9. Change 19 for 10.22 had a typo (PCRE_STATIC_RUNTIME should be\nPCRE2_STATIC_RUNTIME). Fix from David Gaussmann.\n\n10. Added --max-buffer-size to pcre2grep, to allow for automatic buffer\nexpansion when long lines are encountered. Original patch by Dmitry\nCherniachenko.\n\n11. If pcre2grep was compiled with JIT support, but the library was compiled\nwithout it (something that neither ./configure nor CMake allow, but it can be\ndone by editing config.h), pcre2grep was giving a JIT error. Now it detects\nthis situation and does not try to use JIT.\n\n12. Added some \"const\" qualifiers to variables in pcre2grep.\n\n13. Added Dmitry Cherniachenko's patch for colouring output in Windows\n(untested by me). Also, look for GREP_COLOUR or GREP_COLOR if the environment\nvariables PCRE2GREP_COLOUR and PCRE2GREP_COLOR are not found.\n\n14. Add the -t (grand total) option to pcre2grep.\n\n15. A number of bugs have been mended relating to match start-up optimizations\nwhen the first thing in a pattern is a positive lookahead. These all applied\nonly when PCRE2_NO_START_OPTIMIZE was *not* set:\n\n    (a) A pattern such as (?=.*X)X$ was incorrectly optimized as if it needed\n        both an initial 'X' and a following 'X'.\n    (b) Some patterns starting with an assertion that started with .* were\n        incorrectly optimized as having to match at the start of the subject or\n        after a newline. There are cases where this is not true, for example,\n        (?=.*[A-Z])(?=.{8,16})(?!.*[\\s]) matches after the start in lines that\n        start with spaces. Starting .* in an assertion is no longer taken as an\n        indication of matching at the start (or after a newline).\n\n16. The \"offset\" modifier in pcre2test was not being ignored (as documented)\nwhen the POSIX API was in use.\n\n17. Added --enable-fuzz-support to \"configure\", causing an non-installed\nlibrary containing a test function that can be called by fuzzers to be\ncompiled. A non-installed  binary to run the test function locally, called\npcre2fuzzcheck is also compiled.\n\n18. A pattern with PCRE2_DOTALL (/s) set but not PCRE2_NO_DOTSTAR_ANCHOR, and\nwhich started with .* inside a positive lookahead was incorrectly being\ncompiled as implicitly anchored.\n\n19. Removed all instances of \"register\" declarations, as they are considered\nobsolete these days and in any case had become very haphazard.\n\n20. Add strerror() to pcre2test for failed file opening.\n\n21. Make pcre2test -C list valgrind support when it is enabled.\n\n22. Add the use_length modifier to pcre2test.\n\n23. Fix an off-by-one bug in pcre2test for the list of names for 'get' and\n'copy' modifiers.\n\n24. Add PCRE2_CALL_CONVENTION into the prototype declarations in pcre2.h as it\nis apparently needed there as well as in the function definitions. (Why did\nnobody ask for this in PCRE1?)\n\n25. Change the _PCRE2_H and _PCRE2_UCP_H guard macros in the header files to\nPCRE2_H_IDEMPOTENT_GUARD and PCRE2_UCP_H_IDEMPOTENT_GUARD to be more standard\ncompliant and unique.\n\n26. pcre2-config --libs-posix was listing -lpcre2posix instead of\n-lpcre2-posix. Also, the CMake build process was building the library with the\nwrong name.\n\n27. In pcre2test, give some offset information for errors in hex patterns.\nThis uses the C99 formatting sequence %td, except for MSVC which doesn't\nsupport it - %lu is used instead.\n\n28. Implemented pcre2_code_copy_with_tables(), and added pushtablescopy to\npcre2test for testing it.\n\n29. Fix small memory leak in pcre2test.\n\n30. Fix out-of-bounds read for partial matching of /./ against an empty string\nwhen the newline type is CRLF.\n\n31. Fix a bug in pcre2test that caused a crash when a locale was set either in\nthe current pattern or a previous one and a wide character was matched.\n\n32. The appearance of \\p, \\P, or \\X in a substitution string when\nPCRE2_SUBSTITUTE_EXTENDED was set caused a segmentation fault (NULL\ndereference).\n\n33. If the starting offset was specified as greater than the subject length in\na call to pcre2_substitute() an out-of-bounds memory reference could occur.\n\n34. When PCRE2 was compiled to use the heap instead of the stack for recursive\ncalls to match(), a repeated minimizing caseless back reference, or a\nmaximizing one where the two cases had different numbers of code units,\nfollowed by a caseful back reference, could lose the caselessness of the first\nrepeated back reference (example: /(Z)(a)\\2{1,2}?(?-i)\\1X/i should match ZaAAZX\nbut didn't).\n\n35. When a pattern is too complicated, PCRE2 gives up trying to find a minimum\nmatching length and just records zero. Typically this happens when there are\ntoo many nested or recursive back references. If the limit was reached in\ncertain recursive cases it failed to be triggered and an internal error could\nbe the result.\n\n36. The pcre2_dfa_match() function now takes note of the recursion limit for\nthe internal recursive calls that are used for lookrounds and recursions within\nthe pattern.\n\n37. More refactoring has got rid of the internal could_be_empty_branch()\nfunction (around 400 lines of code, including comments) by keeping track of\ncould-be-emptiness as the pattern is compiled instead of scanning compiled\ngroups. (This would have been much harder before the refactoring of #3 above.)\nThis lifts a restriction on the number of branches in a group (more than about\n1100 would give \"pattern is too complicated\").\n\n38. Add the \"-ac\" command line option to pcre2test as a synonym for \"-pattern\nauto_callout\".\n\n39. In a library with Unicode support, incorrect data was compiled for a\npattern with PCRE2_UCP set without PCRE2_UTF if a class required all wide\ncharacters to match (for example, /[\\s[:^ascii:]]/).\n\n40. The callout_error modifier has been added to pcre2test to make it possible\nto return PCRE2_ERROR_CALLOUT from a callout.\n\n41. A minor change to pcre2grep: colour reset is now \"<esc>[0m\" instead of\n\"<esc>[00m\".\n\n42. The limit in the auto-possessification code that was intended to catch\noverly-complicated patterns and not spend too much time auto-possessifying was\nbeing reset too often, resulting in very long compile times for some patterns.\nNow such patterns are no longer completely auto-possessified.\n\n43. Applied Jason Hood's revised patch for RunTest.bat.\n\n44. Added a new Windows script RunGrepTest.bat, courtesy of Jason Hood.\n\n45. Minor cosmetic fix to pcre2test: move a variable that is not used under\nWindows into the \"not Windows\" code.\n\n46. Applied Jason Hood's patches to upgrade pcre2grep under Windows and tidy\nsome of the code:\n\n  * normalised the Windows condition by ensuring WIN32 is defined;\n  * enables the callout feature under Windows;\n  * adds globbing (Microsoft's implementation expands quoted args),\n    using a tweaked opendirectory;\n  * implements the is_*_tty functions for Windows;\n  * --color=always will write the ANSI sequences to file;\n  * add sequences 4 (underline works on Win10) and 5 (blink as bright\n    background, relatively standard on DOS/Win);\n  * remove the (char *) casts for the now-const strings;\n  * remove GREP_COLOUR (grep's command line allowed the 'u', but not\n    the environment), parsing GREP_COLORS instead;\n  * uses the current colour if not set, rather than black;\n  * add print_match for the undefined case;\n  * fixes a typo.\n\nIn addition, colour settings containing anything other than digits and\nsemicolon are ignored, and the colour controls are no longer output for empty\nstrings.\n\n47. Detecting patterns that are too large inside the length-measuring loop\nsaves processing ridiculously long patterns to their end.\n\n48. Ignore PCRE2_CASELESS when processing \\h, \\H, \\v, and \\V in classes as it\njust wastes time. In the UTF case it can also produce redundant entries in\nXCLASS lists caused by characters with multiple other cases and pairs of\ncharacters in the same \"not-x\" sublists.\n\n49. A pattern such as /(?=(a\\K))/ can report the end of the match being before\nits start; pcre2test was not handling this correctly when using the POSIX\ninterface (it was OK with the native interface).\n\n50. In pcre2grep, ignore all JIT compile errors. This means that pcre2grep will\ncontinue to work, falling back to interpretation if anything goes wrong with\nJIT.\n\n51. Applied patches from Christian Persch to configure.ac to make use of the\nAC_USE_SYSTEM_EXTENSIONS macro and to test for functions used by the JIT\nmodules.\n\n52. Minor fixes to pcre2grep from Jason Hood:\n    * fixed some spacing;\n    * Windows doesn't usually use single quotes, so I've added a define\n      to use appropriate quotes [in an example];\n    * LC_ALL was displayed as \"LCC_ALL\";\n    * numbers 11, 12 & 13 should end in \"th\";\n    * use double quotes in usage message.\n\n53. When autopossessifying, skip empty branches without recursion, to reduce\nstack usage for the benefit of clang with -fsanitize-address, which uses huge\nstack frames. Example pattern: /X?(R||){3335}/. Fixes oss-fuzz issue 553.\n\n54. A pattern with very many explicit back references to a group that is a long\nway from the start of the pattern could take a long time to compile because\nsearching for the referenced group in order to find the minimum length was\nbeing done repeatedly. Now up to 128 group minimum lengths are cached and the\nattempt to find a minimum length is abandoned if there is a back reference to a\ngroup whose number is greater than 128. (In that case, the pattern is so\ncomplicated that this optimization probably isn't worth it.) This fixes\noss-fuzz issue 557.\n\n55. Issue 32 for 10.22 below was not correctly fixed. If pcre2grep in multiline\nmode with --only-matching matched several lines, it restarted scanning at the\nnext line instead of moving on to the end of the matched string, which can be\nseveral lines after the start.\n\n56. Applied Jason Hood's new patch for RunGrepTest.bat that updates it in line\nwith updates to the non-Windows version.\n\n\n\nVersion 10.22 29-July-2016\n--------------------------\n\n1. Applied Jason Hood's patches to RunTest.bat and testdata/wintestoutput3\nto fix problems with running the tests under Windows.\n\n2. Implemented a facility for quoting literal characters within hexadecimal\npatterns in pcre2test, to make it easier to create patterns with just a few\nnon-printing characters.\n\n3. Binary zeros are not supported in pcre2test input files. It now detects them\nand gives an error.\n\n4. Updated the valgrind parameters in RunTest: (a) changed smc-check=all to\nsmc-check=all-non-file; (b) changed obj:* in the suppression file to obj:??? so\nthat it matches only unknown objects.\n\n5. Updated the maintenance script maint/ManyConfigTests to make it easier to\nselect individual groups of tests.\n\n6. When the POSIX wrapper function regcomp() is called, the REG_NOSUB option\nused to set PCRE2_NO_AUTO_CAPTURE when calling pcre2_compile(). However, this\ndisables the use of back references (and subroutine calls), which are supported\nby other implementations of regcomp() with RE_NOSUB. Therefore, REG_NOSUB no\nlonger causes PCRE2_NO_AUTO_CAPTURE to be set, though it still ignores nmatch\nand pmatch when regexec() is called.\n\n7. Because of 6 above, pcre2test has been modified with a new modifier called\nposix_nosub, to call regcomp() with REG_NOSUB. Previously the no_auto_capture\nmodifier had this effect. That option is now ignored when the POSIX API is in\nuse.\n\n8. Minor tidies to the pcre2demo.c sample program, including more comments\nabout its 8-bit-ness.\n\n9. Detect unmatched closing parentheses and give the error in the pre-scan\ninstead of later. Previously the pre-scan carried on and could give a\nmisleading incorrect error message. For example, /(?J)(?'a'))(?'a')/ gave a\nmessage about invalid duplicate group names.\n\n10. It has happened that pcre2test was accidentally linked with another POSIX\nregex library instead of libpcre2-posix. In this situation, a call to regcomp()\n(in the other library) may succeed, returning zero, but of course putting its\nown data into the regex_t block. In one example the re_pcre2_code field was\nleft as NULL, which made pcre2test think it had not got a compiled POSIX regex,\nso it treated the next line as another pattern line, resulting in a confusing\nerror message. A check has been added to pcre2test to see if the data returned\nfrom a successful call of regcomp() are valid for PCRE2's regcomp(). If they\nare not, an error message is output and the pcre2test run is abandoned. The\nmessage points out the possibility of a mis-linking. Hopefully this will avoid\nsome head-scratching the next time this happens.\n\n11. A pattern such as /(?<=((?C)0))/, which has a callout inside a lookbehind\nassertion, caused pcre2test to output a very large number of spaces when the\ncallout was taken, making the program appearing to loop.\n\n12. A pattern that included (*ACCEPT) in the middle of a sufficiently deeply\nnested set of parentheses of sufficient size caused an overflow of the\ncompiling workspace (which was diagnosed, but of course is not desirable).\n\n13. Detect missing closing parentheses during the pre-pass for group\nidentification.\n\n14. Changed some integer variable types and put in a number of casts, following\na report of compiler warnings from Visual Studio 2013 and a few tests with\ngcc's -Wconversion (which still throws up a lot).\n\n15. Implemented pcre2_code_copy(), and added pushcopy and #popcopy to pcre2test\nfor testing it.\n\n16. Change 66 for 10.21 introduced the use of snprintf() in PCRE2's version of\nregerror(). When the error buffer is too small, my version of snprintf() puts a\nbinary zero in the final byte. Bug #1801 seems to show that other versions do\nnot do this, leading to bad output from pcre2test when it was checking for\nbuffer overflow. It no longer assumes a binary zero at the end of a too-small\nregerror() buffer.\n\n17. Fixed typo (\"&&\" for \"&\") in pcre2_study(). Fortunately, this could not\nactually affect anything, by sheer luck.\n\n18. Two minor fixes for MSVC compilation: (a) removal of apparently incorrect\n\"const\" qualifiers in pcre2test and (b) defining snprintf as _snprintf for\nolder MSVC compilers. This has been done both in src/pcre2_internal.h for most\nof the library, and also in src/pcre2posix.c, which no longer includes\npcre2_internal.h (see 24 below).\n\n19. Applied Chris Wilson's patch (Bugzilla #1681) to CMakeLists.txt for MSVC\nstatic compilation. Subsequently applied Chris Wilson's second patch, putting\nthe first patch under a new option instead of being unconditional when\nPCRE_STATIC is set.\n\n20. Updated pcre2grep to set stdout as binary when run under Windows, so as not\nto convert \\r\\n at the ends of reflected lines into \\r\\r\\n. This required\nensuring that other output that is written to stdout (e.g. file names) uses the\nappropriate line terminator: \\r\\n for Windows, \\n otherwise.\n\n21. When a line is too long for pcre2grep's internal buffer, show the maximum\nlength in the error message.\n\n22. Added support for string callouts to pcre2grep (Zoltan's patch with PH\nadditions).\n\n23. RunTest.bat was missing a \"set type\" line for test 22.\n\n24. The pcre2posix.c file was including pcre2_internal.h, and using some\n\"private\" knowledge of the data structures. This is unnecessary; the code has\nbeen re-factored and no longer includes pcre2_internal.h.\n\n25. A racing condition is fixed in JIT reported by Mozilla.\n\n26. Minor code refactor to avoid \"array subscript is below array bounds\"\ncompiler warning.\n\n27. Minor code refactor to avoid \"left shift of negative number\" warning.\n\n28. Add a bit more sanity checking to pcre2_serialize_decode() and document\nthat it expects trusted data.\n\n29. Fix typo in pcre2_jit_test.c\n\n30. Due to an oversight, pcre2grep was not making use of JIT when available.\nThis is now fixed.\n\n31. The RunGrepTest script is updated to use the valgrind suppressions file\nwhen testing with JIT under valgrind (compare 10.21/51 below). The suppressions\nfile is updated so that is now the same as for PCRE1: it suppresses the\nMemcheck warnings Addr16 and Cond in unknown objects (that is, JIT-compiled\ncode). Also changed smc-check=all to smc-check=all-non-file as was done for\nRunTest (see 4 above).\n\n32. Implemented the PCRE2_NO_JIT option for pcre2_match().\n\n33. Fix typo that gave a compiler error when JIT not supported.\n\n34. Fix comment describing the returns from find_fixedlength().\n\n35. Fix potential negative index in pcre2test.\n\n36. Calls to pcre2_get_error_message() with error numbers that are never\nreturned by PCRE2 functions were returning empty strings. Now the error code\nPCRE2_ERROR_BADDATA is returned. A facility has been added to pcre2test to\nshow the texts for given error numbers (i.e. to call pcre2_get_error_message()\nand display what it returns) and a few representative error codes are now\nchecked in RunTest.\n\n37. Added \"&& !defined(__INTEL_COMPILER)\" to the test for __GNUC__ in\npcre2_match.c, in anticipation that this is needed for the same reason it was\nrecently added to pcrecpp.cc in PCRE1.\n\n38. Using -o with -M in pcre2grep could cause unnecessary repeated output when\nthe match extended over a line boundary, as it tried to find more matches \"on\nthe same line\" - but it was already over the end.\n\n39. Allow \\C in lookbehinds and DFA matching in UTF-32 mode (by converting it\nto the same code as '.' when PCRE2_DOTALL is set).\n\n40. Fix two clang compiler warnings in pcre2test when only one code unit width\nis supported.\n\n41. Upgrade RunTest to automatically re-run test 2 with a large (64MiB) stack\nif it fails when running the interpreter with a 16MiB stack (and if changing\nthe stack size via pcre2test is possible). This avoids having to manually set a\nlarge stack size when testing with clang.\n\n42. Fix register overwrite in JIT when SSE2 acceleration is enabled.\n\n43. Detect integer overflow in pcre2test pattern and data repetition counts.\n\n44. In pcre2test, ignore \"allcaptures\" after DFA matching.\n\n45. Fix unaligned accesses on x86. Patch by Marc Mutz.\n\n46. Fix some more clang compiler warnings.\n\n\nVersion 10.21 12-January-2016\n-----------------------------\n\n1. Improve matching speed of patterns starting with + or * in JIT.\n\n2. Use memchr() to find the first character in an unanchored match in 8-bit\nmode in the interpreter. This gives a significant speed improvement.\n\n3. Removed a redundant copy of the opcode_possessify table in the\npcre2_auto_possessify.c source.\n\n4. Fix typos in dftables.c for z/OS.\n\n5. Change 36 for 10.20 broke the handling of [[:>:]] and [[:<:]] in that\nprocessing them could involve a buffer overflow if the following character was\nan opening parenthesis.\n\n6. Change 36 for 10.20 also introduced a bug in processing this pattern:\n/((?x)(*:0))#(?'/. Specifically: if a setting of (?x) was followed by a (*MARK)\nsetting (which (*:0) is), then (?x) did not get unset at the end of its group\nduring the scan for named groups, and hence the external # was incorrectly\ntreated as a comment and the invalid (?' at the end of the pattern was not\ndiagnosed. This caused a buffer overflow during the real compile. This bug was\ndiscovered by Karl Skomski with the LLVM fuzzer.\n\n7. Moved the pcre2_find_bracket() function from src/pcre2_compile.c into its\nown source module to avoid a circular dependency between src/pcre2_compile.c\nand src/pcre2_study.c\n\n8. A callout with a string argument containing an opening square bracket, for\nexample /(?C$[$)(?<]/, was incorrectly processed and could provoke a buffer\noverflow. This bug was discovered by Karl Skomski with the LLVM fuzzer.\n\n9. The handling of callouts during the pre-pass for named group identification\nhas been tightened up.\n\n10. The quantifier {1} can be ignored, whether greedy, non-greedy, or\npossessive. This is a very minor optimization.\n\n11. A possessively repeated conditional group that could match an empty string,\nfor example, /(?(R))*+/, was incorrectly compiled.\n\n12. The Unicode tables have been updated to Unicode 8.0.0 (thanks to Christian\nPersch).\n\n13. An empty comment (?#) in a pattern was incorrectly processed and could\nprovoke a buffer overflow. This bug was discovered by Karl Skomski with the\nLLVM fuzzer.\n\n14. Fix infinite recursion in the JIT compiler when certain patterns such as\n/(?:|a|){100}x/ are analysed.\n\n15. Some patterns with character classes involving [: and \\\\ were incorrectly\ncompiled and could cause reading from uninitialized memory or an incorrect\nerror diagnosis. Examples are: /[[:\\\\](?<[::]/ and /[[:\\\\](?'abc')[a:]. The\nfirst of these bugs was discovered by Karl Skomski with the LLVM fuzzer.\n\n16. Pathological patterns containing many nested occurrences of [: caused\npcre2_compile() to run for a very long time. This bug was found by the LLVM\nfuzzer.\n\n17. A missing closing parenthesis for a callout with a string argument was not\nbeing diagnosed, possibly leading to a buffer overflow. This bug was found by\nthe LLVM fuzzer.\n\n18. A conditional group with only one branch has an implicit empty alternative\nbranch and must therefore be treated as potentially matching an empty string.\n\n19. If (?R was followed by - or + incorrect behaviour happened instead of a\ndiagnostic. This bug was discovered by Karl Skomski with the LLVM fuzzer.\n\n20. Another bug that was introduced by change 36 for 10.20: conditional groups\nwhose condition was an assertion preceded by an explicit callout with a string\nargument might be incorrectly processed, especially if the string contained \\Q.\nThis bug was discovered by Karl Skomski with the LLVM fuzzer.\n\n21. Compiling PCRE2 with the sanitize options of clang showed up a number of\nvery pedantic coding infelicities and a buffer overflow while checking a UTF-8\nstring if the final multi-byte UTF-8 character was truncated.\n\n22. For Perl compatibility in EBCDIC environments, ranges such as a-z in a\nclass, where both values are literal letters in the same case, omit the\nnon-letter EBCDIC code points within the range.\n\n23. Finding the minimum matching length of complex patterns with back\nreferences and/or recursions can take a long time. There is now a cut-off that\ngives up trying to find a minimum length when things get too complex.\n\n24. An optimization has been added that speeds up finding the minimum matching\nlength for patterns containing repeated capturing groups or recursions.\n\n25. If a pattern contained a back reference to a group whose number was\nduplicated as a result of appearing in a (?|...) group, the computation of the\nminimum matching length gave a wrong result, which could cause incorrect \"no\nmatch\" errors. For such patterns, a minimum matching length cannot at present\nbe computed.\n\n26. Added a check for integer overflow in conditions (?(<digits>) and\n(?(R<digits>). This omission was discovered by Karl Skomski with the LLVM\nfuzzer.\n\n27. Fixed an issue when \\p{Any} inside an xclass did not read the current\ncharacter.\n\n28. If pcre2grep was given the -q option with -c or -l, or when handling a\nbinary file, it incorrectly wrote output to stdout.\n\n29. The JIT compiler did not restore the control verb head in case of *THEN\ncontrol verbs. This issue was found by Karl Skomski with a custom LLVM fuzzer.\n\n30. The way recursive references such as (?3) are compiled has been re-written\nbecause the old way was the cause of many issues. Now, conversion of the group\nnumber into a pattern offset does not happen until the pattern has been\ncompletely compiled. This does mean that detection of all infinitely looping\nrecursions is postponed till match time. In the past, some easy ones were\ndetected at compile time. This re-writing was done in response to yet another\nbug found by the LLVM fuzzer.\n\n31. A test for a back reference to a non-existent group was missing for items\nsuch as \\987. This caused incorrect code to be compiled. This issue was found\nby Karl Skomski with a custom LLVM fuzzer.\n\n32. Error messages for syntax errors following \\g and \\k were giving inaccurate\noffsets in the pattern.\n\n33. Improve the performance of starting single character repetitions in JIT.\n\n34. (*LIMIT_MATCH=) now gives an error instead of setting the value to 0.\n\n35. Error messages for syntax errors in *LIMIT_MATCH and *LIMIT_RECURSION now\ngive the right offset instead of zero.\n\n36. The JIT compiler should not check repeats after a {0,1} repeat byte code.\nThis issue was found by Karl Skomski with a custom LLVM fuzzer.\n\n37. The JIT compiler should restore the control chain for empty possessive\nrepeats. This issue was found by Karl Skomski with a custom LLVM fuzzer.\n\n38. A bug which was introduced by the single character repetition optimization\nwas fixed.\n\n39. Match limit check added to recursion. This issue was found by Karl Skomski\nwith a custom LLVM fuzzer.\n\n40. Arrange for the UTF check in pcre2_match() and pcre2_dfa_match() to look\nonly at the part of the subject that is relevant when the starting offset is\nnon-zero.\n\n41. Improve first character match in JIT with SSE2 on x86.\n\n42. Fix two assertion fails in JIT. These issues were found by Karl Skomski\nwith a custom LLVM fuzzer.\n\n43. Correct the setting of CMAKE_C_FLAGS in CMakeLists.txt (patch from Roy Ivy\nIII).\n\n44. Fix bug in RunTest.bat for new test 14, and adjust the script for the added\ntest (there are now 20 in total).\n\n45. Fixed a corner case of range optimization in JIT.\n\n46. Add the ${*MARK} facility to pcre2_substitute().\n\n47. Modifier lists in pcre2test were splitting at spaces without the required\ncommas.\n\n48. Implemented PCRE2_ALT_VERBNAMES.\n\n49. Fixed two issues in JIT. These were found by Karl Skomski with a custom\nLLVM fuzzer.\n\n50. The pcre2test program has been extended by adding the #newline_default\ncommand. This has made it possible to run the standard tests when PCRE2 is\ncompiled with either CR or CRLF as the default newline convention. As part of\nthis work, the new command was added to several test files and the testing\nscripts were modified. The pcre2grep tests can now also be run when there is no\nLF in the default newline convention.\n\n51. The RunTest script has been modified so that, when JIT is used and valgrind\nis specified, a valgrind suppressions file is set up to ignore \"Invalid read of\nsize 16\" errors because these are false positives when the hardware supports\nthe SSE2 instruction set.\n\n52. It is now possible to have comment lines amid the subject strings in\npcre2test (and perltest.sh) input.\n\n53. Implemented PCRE2_USE_OFFSET_LIMIT and pcre2_set_offset_limit().\n\n54. Add the null_context modifier to pcre2test so that calling pcre2_compile()\nand the matching functions with NULL contexts can be tested.\n\n55. Implemented PCRE2_SUBSTITUTE_EXTENDED.\n\n56. In a character class such as [\\W\\p{Any}] where both a negative-type escape\n(\"not a word character\") and a property escape were present, the property\nescape was being ignored.\n\n57. Fixed integer overflow for patterns whose minimum matching length is very,\nvery large.\n\n58. Implemented --never-backslash-C.\n\n59. Change 55 above introduced a bug by which certain patterns provoked the\nerroneous error \"\\ at end of pattern\".\n\n60. The special sequences [[:<:]] and [[:>:]] gave rise to incorrect compiling\nerrors or other strange effects if compiled in UCP mode. Found with libFuzzer\nand AddressSanitizer.\n\n61. Whitespace at the end of a pcre2test pattern line caused a spurious error\nmessage if there were only single-character modifiers. It should be ignored.\n\n62. The use of PCRE2_NO_AUTO_CAPTURE could cause incorrect compilation results\nor segmentation errors for some patterns. Found with libFuzzer and\nAddressSanitizer.\n\n63. Very long names in (*MARK) or (*THEN) etc. items could provoke a buffer\noverflow.\n\n64. Improve error message for overly-complicated patterns.\n\n65. Implemented an optional replication feature for patterns in pcre2test, to\nmake it easier to test long repetitive patterns. The tests for 63 above are\nconverted to use the new feature.\n\n66. In the POSIX wrapper, if regerror() was given too small a buffer, it could\nmisbehave.\n\n67. In pcre2_substitute() in UTF mode, the UTF validity check on the\nreplacement string was happening before the length setting when the replacement\nstring was zero-terminated.\n\n68. In pcre2_substitute() in UTF mode, PCRE2_NO_UTF_CHECK can be set for the\nsecond and subsequent calls to pcre2_match().\n\n69. There was no check for integer overflow for a replacement group number in\npcre2_substitute(). An added check for a number greater than the largest group\nnumber in the pattern means this is not now needed.\n\n70. The PCRE2-specific VERSION condition didn't work correctly if only one\ndigit was given after the decimal point, or if more than two digits were given.\nIt now works with one or two digits, and gives a compile time error if more are\ngiven.\n\n71. In pcre2_substitute() there was the possibility of reading one code unit\nbeyond the end of the replacement string.\n\n72. The code for checking a subject's UTF-32 validity for a pattern with a\nlookbehind involved an out-of-bounds pointer, which could potentially cause\ntrouble in some environments.\n\n73. The maximum lookbehind length was incorrectly calculated for patterns such\nas /(?<=(a)(?-1))x/ which have a recursion within a backreference.\n\n74. Give an error if a lookbehind assertion is longer than 65535 code units.\n\n75. Give an error in pcre2_substitute() if a match ends before it starts (as a\nresult of the use of \\K).\n\n76. Check the length of subpattern names and the names in (*MARK:xx) etc.\ndynamically to avoid the possibility of integer overflow.\n\n77. Implement pcre2_set_max_pattern_length() so that programs can restrict the\nsize of patterns that they are prepared to handle.\n\n78. (*NO_AUTO_POSSESS) was not working.\n\n79. Adding group information caching improves the speed of compiling when\nchecking whether a group has a fixed length and/or could match an empty string,\nespecially when recursion or subroutine calls are involved. However, this\ncannot be used when (?| is present in the pattern because the same number may\nbe used for groups of different sizes. To catch runaway patterns in this\nsituation, counts have been introduced to the functions that scan for empty\nbranches or compute fixed lengths.\n\n80. Allow for the possibility of the size of the nest_save structure not being\na factor of the size of the compiling workspace (it currently is).\n\n81. Check for integer overflow in minimum length calculation and cap it at\n65535.\n\n82. Small optimizations in code for finding the minimum matching length.\n\n83. Lock out configuring for EBCDIC with non-8-bit libraries.\n\n84. Test for error code <= 0 in regerror().\n\n85. Check for too many replacements (more than INT_MAX) in pcre2_substitute().\n\n86. Avoid the possibility of computing with an out-of-bounds pointer (though\nnot dereferencing it) while handling lookbehind assertions.\n\n87. Failure to get memory for the match data in regcomp() is now given as a\nregcomp() error instead of waiting for regexec() to pick it up.\n\n88. In pcre2_substitute(), ensure that CRLF is not split when it is a valid\nnewline sequence.\n\n89. Paranoid check in regcomp() for bad error code from pcre2_compile().\n\n90. Run test 8 (internal offsets and code sizes) for link sizes 3 and 4 as well\nas for link size 2.\n\n91. Document that JIT has a limit on pattern size, and give more information\nabout JIT compile failures in pcre2test.\n\n92. Implement PCRE2_INFO_HASBACKSLASHC.\n\n93. Re-arrange valgrind support code in pcre2test to avoid spurious reports\nwith JIT (possibly caused by SSE2?).\n\n94. Support offset_limit in JIT.\n\n95. A sequence such as [[:punct:]b] that is, a POSIX character class followed\nby a single ASCII character in a class item, was incorrectly compiled in UCP\nmode. The POSIX class got lost, but only if the single character followed it.\n\n96. [:punct:] in UCP mode was matching some characters in the range 128-255\nthat should not have been matched.\n\n97. If [:^ascii:] or [:^xdigit:] are present in a non-negated class, all\ncharacters with code points greater than 255 are in the class. When a Unicode\nproperty was also in the class (if PCRE2_UCP is set, escapes such as \\w are\nturned into Unicode properties), wide characters were not correctly handled,\nand could fail to match.\n\n98. In pcre2test, make the \"startoffset\" modifier a synonym of \"offset\",\nbecause it sets the \"startoffset\" parameter for pcre2_match().\n\n99. If PCRE2_AUTO_CALLOUT was set on a pattern that had a (?# comment between\nan item and its qualifier (for example, A(?#comment)?B) pcre2_compile()\nmisbehaved. This bug was found by the LLVM fuzzer.\n\n100. The error for an invalid UTF pattern string always gave the code unit\noffset as zero instead of where the invalidity was found.\n\n101. Further to 97 above, negated classes such as [^[:^ascii:]\\d] were also not\nworking correctly in UCP mode.\n\n102. Similar to 99 above, if an isolated \\E was present between an item and its\nqualifier when PCRE2_AUTO_CALLOUT was set, pcre2_compile() misbehaved. This bug\nwas found by the LLVM fuzzer.\n\n103. The POSIX wrapper function regexec() crashed if the option REG_STARTEND\nwas set when the pmatch argument was NULL. It now returns REG_INVARG.\n\n104. Allow for up to 32-bit numbers in the ordin() function in pcre2grep.\n\n105. An empty \\Q\\E sequence between an item and its qualifier caused\npcre2_compile() to misbehave when auto callouts were enabled. This bug\nwas found by the LLVM fuzzer.\n\n106. If both PCRE2_ALT_VERBNAMES and PCRE2_EXTENDED were set, and a (*MARK) or\nother verb \"name\" ended with whitespace immediately before the closing\nparenthesis, pcre2_compile() misbehaved. Example: /(*:abc )/, but only when\nboth those options were set.\n\n107. In a number of places pcre2_compile() was not handling NULL characters\ncorrectly, and pcre2test with the \"bincode\" modifier was not always correctly\ndisplaying fields containing NULLS:\n\n   (a) Within /x extended #-comments\n   (b) Within the \"name\" part of (*MARK) and other *verbs\n   (c) Within the text argument of a callout\n\n108. If a pattern that was compiled with PCRE2_EXTENDED started with white\nspace or a #-type comment that was followed by (?-x), which turns off\nPCRE2_EXTENDED, and there was no subsequent (?x) to turn it on again,\npcre2_compile() assumed that (?-x) applied to the whole pattern and\nconsequently mis-compiled it. This bug was found by the LLVM fuzzer. The fix\nfor this bug means that a setting of any of the (?imsxJU) options at the start\nof a pattern is no longer transferred to the options that are returned by\nPCRE2_INFO_ALLOPTIONS. In fact, this was an anachronism that should have\nchanged when the effects of those options were all moved to compile time.\n\n109. An escaped closing parenthesis in the \"name\" part of a (*verb) when\nPCRE2_ALT_VERBNAMES was set caused pcre2_compile() to malfunction. This bug\nwas found by the LLVM fuzzer.\n\n110. Implemented PCRE2_SUBSTITUTE_UNSET_EMPTY, and updated pcre2test to make it\npossible to test it.\n\n111. \"Harden\" pcre2test against ridiculously large values in modifiers and\ncommand line arguments.\n\n112. Implemented PCRE2_SUBSTITUTE_UNKNOWN_UNSET and PCRE2_SUBSTITUTE_OVERFLOW_\nLENGTH.\n\n113. Fix printing of *MARK names that contain binary zeroes in pcre2test.\n\n\nVersion 10.20 30-June-2015\n--------------------------\n\n1. Callouts with string arguments have been added.\n\n2. Assertion code generator in JIT has been optimized.\n\n3. The invalid pattern (?(?C) has a missing assertion condition at the end. The\npcre2_compile() function read past the end of the input before diagnosing an\nerror. This bug was discovered by the LLVM fuzzer.\n\n4. Implemented pcre2_callout_enumerate().\n\n5. Fix JIT compilation of conditional blocks whose assertion is converted to\n(*FAIL). E.g: /(?(?!))/.\n\n6. The pattern /(?(?!)^)/ caused references to random memory. This bug was\ndiscovered by the LLVM fuzzer.\n\n7. The assertion (?!) is optimized to (*FAIL). This was not handled correctly\nwhen this assertion was used as a condition, for example (?(?!)a|b). In\npcre2_match() it worked by luck; in pcre2_dfa_match() it gave an incorrect\nerror about an unsupported item.\n\n8. For some types of pattern, for example /Z*(|d*){216}/, the auto-\npossessification code could take exponential time to complete. A recursion\ndepth limit of 1000 has been imposed to limit the resources used by this\noptimization. This infelicity was discovered by the LLVM fuzzer.\n\n9. A pattern such as /(*UTF)[\\S\\V\\H]/, which contains a negated special class\nsuch as \\S in non-UCP mode, explicit wide characters (> 255) can be ignored\nbecause \\S ensures they are all in the class. The code for doing this was\ninteracting badly with the code for computing the amount of space needed to\ncompile the pattern, leading to a buffer overflow. This bug was discovered by\nthe LLVM fuzzer.\n\n10. A pattern such as /((?2)+)((?1))/ which has mutual recursion nested inside\nother kinds of group caused stack overflow at compile time. This bug was\ndiscovered by the LLVM fuzzer.\n\n11. A pattern such as /(?1)(?#?'){8}(a)/ which had a parenthesized comment\nbetween a subroutine call and its quantifier was incorrectly compiled, leading\nto buffer overflow or other errors. This bug was discovered by the LLVM fuzzer.\n\n12. The illegal pattern /(?(?<E>.*!.*)?)/ was not being diagnosed as missing an\nassertion after (?(. The code was failing to check the character after (?(?<\nfor the ! or = that would indicate a lookbehind assertion. This bug was\ndiscovered by the LLVM fuzzer.\n\n13. A pattern such as /X((?2)()*+){2}+/ which has a possessive quantifier with\na fixed maximum following a group that contains a subroutine reference was\nincorrectly compiled and could trigger buffer overflow. This bug was discovered\nby the LLVM fuzzer.\n\n14. Negative relative recursive references such as (?-7) to non-existent\nsubpatterns were not being diagnosed and could lead to unpredictable behaviour.\nThis bug was discovered by the LLVM fuzzer.\n\n15. The bug fixed in 14 was due to an integer variable that was unsigned when\nit should have been signed. Some other \"int\" variables, having been checked,\nhave either been changed to uint32_t or commented as \"must be signed\".\n\n16. A mutual recursion within a lookbehind assertion such as (?<=((?2))((?1)))\ncaused a stack overflow instead of the diagnosis of a non-fixed length\nlookbehind assertion. This bug was discovered by the LLVM fuzzer.\n\n17. The use of \\K in a positive lookbehind assertion in a non-anchored pattern\n(e.g. /(?<=\\Ka)/) could make pcre2grep loop.\n\n18. There was a similar problem to 17 in pcre2test for global matches, though\nthe code there did catch the loop.\n\n19. If a greedy quantified \\X was preceded by \\C in UTF mode (e.g. \\C\\X*),\nand a subsequent item in the pattern caused a non-match, backtracking over the\nrepeated \\X did not stop, but carried on past the start of the subject, causing\nreference to random memory and/or a segfault. There were also some other cases\nwhere backtracking after \\C could crash. This set of bugs was discovered by the\nLLVM fuzzer.\n\n20. The function for finding the minimum length of a matching string could take\na very long time if mutual recursion was present many times in a pattern, for\nexample, /((?2){73}(?2))((?1))/. A better mutual recursion detection method has\nbeen implemented. This infelicity was discovered by the LLVM fuzzer.\n\n21. Implemented PCRE2_NEVER_BACKSLASH_C.\n\n22. The feature for string replication in pcre2test could read from freed\nmemory if the replication required a buffer to be extended, and it was not\nworking properly in 16-bit and 32-bit modes. This issue was discovered by a\nfuzzer: see http://lcamtuf.coredump.cx/afl/.\n\n23. Added the PCRE2_ALT_CIRCUMFLEX option.\n\n24. Adjust the treatment of \\8 and \\9 to be the same as the current Perl\nbehaviour.\n\n25. Static linking against the PCRE2 library using the pkg-config module was\nfailing on missing pthread symbols.\n\n26. If a group that contained a recursive back reference also contained a\nforward reference subroutine call followed by a non-forward-reference\nsubroutine call, for example /.((?2)(?R)\\1)()/, pcre2_compile() failed to\ncompile correct code, leading to undefined behaviour or an internally detected\nerror. This bug was discovered by the LLVM fuzzer.\n\n27. Quantification of certain items (e.g. atomic back references) could cause\nincorrect code to be compiled when recursive forward references were involved.\nFor example, in this pattern: /(?1)()((((((\\1++))\\x85)+)|))/. This bug was\ndiscovered by the LLVM fuzzer.\n\n28. A repeated conditional group whose condition was a reference by name caused\na buffer overflow if there was more than one group with the given name. This\nbug was discovered by the LLVM fuzzer.\n\n29. A recursive back reference by name within a group that had the same name as\nanother group caused a buffer overflow. For example: /(?J)(?'d'(?'d'\\g{d}))/.\nThis bug was discovered by the LLVM fuzzer.\n\n30. A forward reference by name to a group whose number is the same as the\ncurrent group, for example in this pattern: /(?|(\\k'Pm')|(?'Pm'))/, caused a\nbuffer overflow at compile time. This bug was discovered by the LLVM fuzzer.\n\n31. Fix -fsanitize=undefined warnings for left shifts of 1 by 31 (it treats 1\nas an int; fixed by writing it as 1u).\n\n32. Fix pcre2grep compile when -std=c99 is used with gcc, though it still gives\na warning for \"fileno\" unless -std=gnu99 us used.\n\n33. A lookbehind assertion within a set of mutually recursive subpatterns could\nprovoke a buffer overflow. This bug was discovered by the LLVM fuzzer.\n\n34. Give an error for an empty subpattern name such as (?'').\n\n35. Make pcre2test give an error if a pattern that follows #forbud_utf contains\n\\P, \\p, or \\X.\n\n36. The way named subpatterns are handled has been refactored. There is now a\npre-pass over the regex which does nothing other than identify named\nsubpatterns and count the total captures. This means that information about\nnamed patterns is known before the rest of the compile. In particular, it means\nthat forward references can be checked as they are encountered. Previously, the\ncode for handling forward references was contorted and led to several errors in\ncomputing the memory requirements for some patterns, leading to buffer\noverflows.\n\n37. There was no check for integer overflow in subroutine calls such as (?123).\n\n38. The table entry for \\l in EBCDIC environments was incorrect, leading to its\nbeing treated as a literal 'l' instead of causing an error.\n\n39. If a non-capturing group containing a conditional group that could match\nan empty string was repeated, it was not identified as matching an empty string\nitself. For example: /^(?:(?(1)x|)+)+$()/.\n\n40. In an EBCDIC environment, pcretest was mishandling the escape sequences\n\\a and \\e in test subject lines.\n\n41. In an EBCDIC environment, \\a in a pattern was converted to the ASCII\ninstead of the EBCDIC value.\n\n42. The handling of \\c in an EBCDIC environment has been revised so that it is\nnow compatible with the specification in Perl's perlebcdic page.\n\n43. Single character repetition in JIT has been improved. 20-30% speedup\nwas achieved on certain patterns.\n\n44. The EBCDIC character 0x41 is a non-breaking space, equivalent to 0xa0 in\nASCII/Unicode. This has now been added to the list of characters that are\nrecognized as white space in EBCDIC.\n\n45. When PCRE2 was compiled without Unicode support, the use of \\p and \\P gave\nan error (correctly) when used outside a class, but did not give an error\nwithin a class.\n\n46. \\h within a class was incorrectly compiled in EBCDIC environments.\n\n47. JIT should return with error when the compiled pattern requires\nmore stack space than the maximum.\n\n48. Fixed a memory leak in pcre2grep when a locale is set.\n\n\nVersion 10.10 06-March-2015\n---------------------------\n\n1. When a pattern is compiled, it remembers the highest back reference so that\nwhen matching, if the ovector is too small, extra memory can be obtained to\nuse instead. A conditional subpattern whose condition is a check on a capture\nhaving happened, such as, for example in the pattern /^(?:(a)|b)(?(1)A|B)/, is\nanother kind of back reference, but it was not setting the highest\nbackreference number. This mattered only if pcre2_match() was called with an\novector that was too small to hold the capture, and there was no other kind of\nback reference (a situation which is probably quite rare). The effect of the\nbug was that the condition was always treated as FALSE when the capture could\nnot be consulted, leading to a incorrect behaviour by pcre2_match(). This bug\nhas been fixed.\n\n2. Functions for serialization and deserialization of sets of compiled patterns\nhave been added.\n\n3. The value that is returned by PCRE2_INFO_SIZE has been corrected to remove\nexcess code units at the end of the data block that may occasionally occur if\nthe code for calculating the size over-estimates. This change stops the\nserialization code copying uninitialized data, to which valgrind objects. The\ndocumentation of PCRE2_INFO_SIZE was incorrect in stating that the size did not\ninclude the general overhead. This has been corrected.\n\n4. All code units in every slot in the table of group names are now set, again\nin order to avoid accessing uninitialized data when serializing.\n\n5. The (*NO_JIT) feature is implemented.\n\n6. If a bug that caused pcre2_compile() to use more memory than allocated was\ntriggered when using valgrind, the code in (3) above passed a stupidly large\nvalue to valgrind. This caused a crash instead of an \"internal error\" return.\n\n7. A reference to a duplicated named group (either a back reference or a test\nfor being set in a conditional) that occurred in a part of the pattern where\nPCRE2_DUPNAMES was not set caused the amount of memory needed for the pattern\nto be incorrectly calculated, leading to overwriting.\n\n8. A mutually recursive set of back references such as (\\2)(\\1) caused a\nsegfault at compile time (while trying to find the minimum matching length).\nThe infinite loop is now broken (with the minimum length unset, that is, zero).\n\n9. If an assertion that was used as a condition was quantified with a minimum\nof zero, matching went wrong. In particular, if the whole group had unlimited\nrepetition and could match an empty string, a segfault was likely. The pattern\n(?(?=0)?)+ is an example that caused this. Perl allows assertions to be\nquantified, but not if they are being used as conditions, so the above pattern\nis faulted by Perl. PCRE2 has now been changed so that it also rejects such\npatterns.\n\n10. The error message for an invalid quantifier has been changed from \"nothing\nto repeat\" to \"quantifier does not follow a repeatable item\".\n\n11. If a bad UTF string is compiled with NO_UTF_CHECK, it may succeed, but\nscanning the compiled pattern in subsequent auto-possessification can get out\nof step and lead to an unknown opcode. Previously this could have caused an\ninfinite loop. Now it generates an \"internal error\" error. This is a tidyup,\nnot a bug fix; passing bad UTF with NO_UTF_CHECK is documented as having an\nundefined outcome.\n\n12. A UTF pattern containing a \"not\" match of a non-ASCII character and a\nsubroutine reference could loop at compile time. Example: /[^\\xff]((?1))/.\n\n13. The locale test (RunTest 3) has been upgraded. It now checks that a locale\nthat is found in the output of \"locale -a\" can actually be set by pcre2test\nbefore it is accepted. Previously, in an environment where a locale was listed\nbut would not set (an example does exist), the test would \"pass\" without\nactually doing anything. Also the fr_CA locale has been added to the list of\nlocales that can be used.\n\n14. Fixed a bug in pcre2_substitute(). If a replacement string ended in a\ncapturing group number without parentheses, the last character was incorrectly\nliterally included at the end of the replacement string.\n\n15. A possessive capturing group such as (a)*+ with a minimum repeat of zero\nfailed to allow the zero-repeat case if pcre2_match() was called with an\novector too small to capture the group.\n\n16. Improved error message in pcre2test when setting the stack size (-S) fails.\n\n17. Fixed two bugs in CMakeLists.txt: (1) Some lines had got lost in the\ntransfer from PCRE1, meaning that CMake configuration failed if \"build tests\"\nwas selected. (2) The file src/pcre2_serialize.c had not been added to the list\nof PCRE2 sources, which caused a failure to build pcre2test.\n\n18. Fixed typo in pcre2_serialize.c (DECL instead of DEFN) that causes problems\nonly on Windows.\n\n19. Use binary input when reading back saved serialized patterns in pcre2test.\n\n20. Added RunTest.bat for running the tests under Windows.\n\n21. \"make distclean\" was not removing config.h, a file that may be created for\nuse with CMake.\n\n22. A pattern such as \"((?2){0,1999}())?\", which has a group containing a\nforward reference repeated a large (but limited) number of times within a\nrepeated outer group that has a zero minimum quantifier, caused incorrect code\nto be compiled, leading to the error \"internal error: previously-checked\nreferenced subpattern not found\" when an incorrect memory address was read.\nThis bug was reported as \"heap overflow\", discovered by Kai Lu of Fortinet's\nFortiGuard Labs. (Added 24-March-2015: CVE-2015-2325 was given to this.)\n\n23. A pattern such as \"((?+1)(\\1))/\" containing a forward reference subroutine\ncall within a group that also contained a recursive back reference caused\nincorrect code to be compiled. This bug was reported as \"heap overflow\",\ndiscovered by Kai Lu of Fortinet's FortiGuard Labs. (Added 24-March-2015:\nCVE-2015-2326 was given to this.)\n\n24. Computing the size of the JIT read-only data in advance has been a source\nof various issues, and new ones are still appear unfortunately. To fix\nexisting and future issues, size computation is eliminated from the code,\nand replaced by on-demand memory allocation.\n\n25. A pattern such as /(?i)[A-`]/, where characters in the other case are\nadjacent to the end of the range, and the range contained characters with more\nthan one other case, caused incorrect behaviour when compiled in UTF mode. In\nthat example, the range a-j was left out of the class.\n\n\nVersion 10.00 05-January-2015\n-----------------------------\n\nVersion 10.00 is the first release of PCRE2, a revised API for the PCRE\nlibrary. Changes prior to 10.00 are logged in the ChangeLog file for the old\nAPI, up to item 20 for release 8.36.\n\nThe code of the library was heavily revised as part of the new API\nimplementation. Details of each and every modification were not individually\nlogged. In addition to the API changes, the following changes were made. They\nare either new functionality, or bug fixes and other noticeable changes of\nbehaviour that were implemented after the code had been forked.\n\n1. Including Unicode support at build time is now enabled by default, but it\ncan optionally be disabled. It is not enabled by default at run time (no\nchange).\n\n2. The test program, now called pcre2test, was re-specified and almost\ncompletely re-written. Its input is not compatible with input for pcretest.\n\n3. Patterns may start with (*NOTEMPTY) or (*NOTEMPTY_ATSTART) to set the\nPCRE2_NOTEMPTY or PCRE2_NOTEMPTY_ATSTART options for every subject line that is\nmatched by that pattern.\n\n4. For the benefit of those who use PCRE2 via some other application, that is,\nnot writing the function calls themselves, it is possible to check the PCRE2\nversion by matching a pattern such as /(?(VERSION>=10)yes|no)/ against a\nstring such as \"yesno\".\n\n5. There are case-equivalent Unicode characters whose encodings use different\nnumbers of code units in UTF-8. U+023A and U+2C65 are one example. (It is\ntheoretically possible for this to happen in UTF-16 too.) If a backreference to\na group containing one of these characters was greedily repeated, and during\nthe match a backtrack occurred, the subject might be backtracked by the wrong\nnumber of code units. For example, if /^(\\x{23a})\\1*(.)/ is matched caselessly\n(and in UTF-8 mode) against \"\\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\", group 2 should\ncapture the final character, which is the three bytes E2, B1, and A5 in UTF-8.\nIncorrect backtracking meant that group 2 captured only the last two bytes.\nThis bug has been fixed; the new code is slower, but it is used only when the\nstrings matched by the repetition are not all the same length.\n\n6. A pattern such as /()a/ was not setting the \"first character must be 'a'\"\ninformation. This applied to any pattern with a group that matched no\ncharacters, for example: /(?:(?=.)|(?<!x))a/.\n\n7. When an (*ACCEPT) is triggered inside capturing parentheses, it arranges for\nthose parentheses to be closed with whatever has been captured so far. However,\nit was failing to mark any other groups between the highest capture so far and\nthe current group as \"unset\". Thus, the ovector for those groups contained\nwhatever was previously there. An example is the pattern /(x)|((*ACCEPT))/ when\nmatched against \"abcd\".\n\n8. The pcre2_substitute() function has been implemented.\n\n9. If an assertion used as a condition was quantified with a minimum of zero\n(an odd thing to do, but it happened), SIGSEGV or other misbehaviour could\noccur.\n\n10. The PCRE2_NO_DOTSTAR_ANCHOR option has been implemented.\n\n****\n"
  },
  {
    "path": "HACKING",
    "content": "Technical notes about PCRE2\n---------------------------\n\nThese are very rough technical notes that record potentially useful information\nabout PCRE2 internals. PCRE2 is a library based on the original PCRE library,\nbut with a revised (and incompatible) API. To avoid confusion, the original\nlibrary is referred to as PCRE1 below. For information about testing PCRE2, see\nthe pcre2test documentation and the comment at the head of the RunTest file.\n\nPCRE1 releases were up to 8.3x when PCRE2 was developed, and later bug fix\nreleases carried on the 8.xx series, up to the final 8.45 release. PCRE2\nreleases started at 10.00 to avoid confusion with PCRE1.\n\n\nHistorical note 1\n-----------------\n\nMany years ago I implemented some regular expression functions to an algorithm\nsuggested by Martin Richards. The rather simple patterns were not Unix-like in\nform, and were quite restricted in what they could do by comparison with Perl.\nThe interesting part about the algorithm was that the amount of space required\nto hold the compiled form of an expression was known in advance. The code to\napply an expression did not operate by backtracking, as the original Henry\nSpencer code and the current PCRE2 pcre2_match() function and Perl code do, but\ninstead checked all possibilities simultaneously by keeping a list of current\nstates and checking all of them as it advanced through the subject string. In\nthe terminology of Jeffrey Friedl's book, it was a \"DFA algorithm\", though it\nwas not a traditional Finite State Machine (FSM). When the pattern was all used\nup, all remaining states were possible matches, and the one matching the\nlongest subset of the subject string was chosen. This did not necessarily\nmaximize the individual wild portions of the pattern, as is expected in Unix\nand Perl-style regular expressions.\n\n\nHistorical note 2\n-----------------\n\nThe code originally written by Henry Spencer (which was subsequently heavily\nmodified for Perl) compiles the expression twice: once in a dummy mode in order\nto find out how much store will be needed, and then for real. (The Perl version\nmay or may not still do this; I'm talking about the original library.) The\nexecution function operates by backtracking and maximizing (or, optionally,\nminimizing, in Perl) the amount of the subject that matches individual wild\nportions of the pattern. This is an \"NFA algorithm\" in Friedl's terminology.\n\n\nSupport for 16-bit and 32-bit data strings\n-------------------------------------------\n\nThe PCRE2 library can be compiled in any combination of 8-bit, 16-bit or 32-bit\nmodes, creating up to three different libraries. In the description that\nfollows, the word \"short\" is used for a 16-bit data quantity, and the phrase\n\"code unit\" is used for a quantity that is a byte in 8-bit mode, a short in\n16-bit mode and a 32-bit word in 32-bit mode. The names of PCRE2 functions are\ngiven in generic form, without the _8, _16, or _32 suffix.\n\n\nComputing the memory requirement: how it was\n--------------------------------------------\n\nUp to and including release 6.7, PCRE1 worked by running a very degenerate\nfirst pass to calculate a maximum memory requirement, and then a second pass to\ndo the real compile - which might use a bit less than the predicted amount of\nmemory. The idea was that this would turn out faster than the Henry Spencer\ncode because the first pass is degenerate and the second pass can just store\nstuff straight into memory, which it knows is big enough.\n\n\nComputing the memory requirement: how it is\n-------------------------------------------\n\nBy the time I was working on a potential 6.8 release, the degenerate first pass\nhad become very complicated and hard to maintain. Indeed one of the early\nthings I did for 6.8 was to fix Yet Another Bug in the memory computation. Then\nI had a flash of inspiration as to how I could run the real compile function in\na \"fake\" mode that enables it to compute how much memory it would need, while\nin most cases only ever using a small amount of working memory, and without too\nmany tests of the mode that might slow it down. So I refactored the compiling\nfunctions to work this way. This got rid of about 600 lines of source and made\nfurther maintenance and development easier. As this was such a major change, I\nnever released 6.8, instead upping the number to 7.0 (other quite major changes\nwere also present in the 7.0 release).\n\nA side effect of this work was that the previous limit of 200 on the nesting\ndepth of parentheses was removed. However, there was a downside: compiling ran\nmore slowly than before (30% or more, depending on the pattern) because it now\ndid a full analysis of the pattern twice. My hope was that this would not be a\nbig issue, and in the event, nobody has commented on it.\n\nAt release 8.34, a limit on the nesting depth of parentheses was re-introduced\n(default 250, settable at build time) so as to put a limit on the amount of\nsystem stack used by the compile function, which uses recursive function calls\nfor nested parenthesized groups. This is a safety feature for environments with\nsmall stacks where the patterns are provided by users.\n\n\nYet another pattern scan\n------------------------\n\nHistory repeated itself for PCRE2 release 10.20. A number of bugs relating to\nnamed subpatterns had been discovered by fuzzers. Most of these were related to\nthe handling of forward references when it was not known if the named group was\nunique. (References to non-unique names use a different opcode and more\nmemory.) The use of duplicate group numbers (the (?| facility) also caused\nissues.\n\nTo get around these problems I adopted a new approach by adding a third pass\nover the pattern (really a \"pre-pass\"), which does nothing other than identify\nall the named subpatterns and their corresponding group numbers. This means\nthat the actual compile (both the memory-computing dummy run and the real\ncompile) has full knowledge of group names and numbers throughout. Several\ndozen lines of messy code were eliminated, though the new pre-pass was not\nshort. In particular, parsing and skipping over [] classes is complicated.\n\nWhile working on 10.22 I realized that I could simplify yet again by moving\nmore of the parsing into the pre-pass, thus avoiding doing it in two places, so\nafter 10.22 was released, the code underwent yet another big refactoring. This\nis how it is from 10.23 onwards:\n\nThe function called parse_regex() scans the pattern characters, parsing them\ninto literal data and meta characters. It converts escapes such as \\x{123}\ninto literals, handles \\Q...\\E, and skips over comments and non-significant\nwhite space. The result of the scanning is put into a vector of 32-bit unsigned\nintegers. Values less than 0x80000000 are literal data. Higher values represent\nmeta-characters. The top 16-bits of such values identify the meta-character,\nand these are given names such as META_CAPTURE. The lower 16-bits are available\nfor data, for example, the capturing group number. The only situation in which\nliteral data values greater than 0x7fffffff can appear is when the 32-bit\nlibrary is running in non-UTF mode. This is handled by having a special\nmeta-character that is followed by the 32-bit data value.\n\nThe size of the parsed pattern vector, when auto-callouts are not enabled, is\nbounded by the length of the pattern (with one exception). The code is written\nso that each item in the pattern uses no more vector elements than the number\nof code units in the item itself. The exception is the aforementioned large\n32-bit number handling. For this reason, 32-bit non-UTF patterns are scanned in\nadvance to check for such values. When auto-callouts are enabled, the generous\nassumption is made that there will be a callout for each pattern code unit\n(which of course is only actually true if all code units are literals) plus one\nat the end. A default parsed pattern vector is defined on the system stack, to\nminimize memory handling, but if this is not big enough, heap memory is used.\n\nIf there are any lookbehinds in the pattern, the parsed pattern is scanned in\norder to work out their lengths. Then the actual compiling function is run\ntwice, the first time to determine the amount of memory needed for the final\ncompiled pattern. The compiling function processes the parsed pattern vector,\nnot the pattern itself, although some of the parsed items refer to strings in\nthe pattern - for example, group names.\n\nSome post-processing of the compiled pattern takes place. If there are any\nrecursion or subroutine calls, there is a scan to convert them into offsets.\nThen there are other scans to apply certain optimizations, some of which can be\ndisabled by setting appropriate options.\n\nMost errors can be diagnosed during the parsing scan. For those that cannot,\nthe parsed code contains offsets into the pattern so that the actual compiling\ncode can report where the errors are.\n\n\nThe elements of the parsed pattern vector\n-----------------------------------------\n\nThe word \"offset\" below means a code unit offset into the pattern. When\nPCRE2_SIZE (which is usually size_t) is no bigger than uint32_t, an offset is\nstored in a single parsed pattern element. Otherwise (typically on 64-bit\nsystems) it occupies two elements. The following meta items occupy just one\nelement, with no data:\n\nMETA_ACCEPT           (*ACCEPT)\nMETA_ASTERISK         *\nMETA_ASTERISK_PLUS    *+\nMETA_ASTERISK_QUERY   *?\nMETA_ATOMIC           (?> start of atomic group\nMETA_CIRCUMFLEX       ^ metacharacter\nMETA_CLASS            [ start of non-empty class\nMETA_CLASS_EMPTY      [] empty class - only with PCRE2_ALLOW_EMPTY_CLASS\nMETA_CLASS_EMPTY_NOT  [^] negative empty class - ditto\nMETA_CLASS_END        ] end of non-empty class\nMETA_CLASS_NOT        [^ start non-empty negative class\nMETA_COMMIT           (*COMMIT) - no argument (see below for with argument)\nMETA_COND_ASSERT      (?(?assertion)\nMETA_DOLLAR           $ metacharacter\nMETA_DOT              . metacharacter\nMETA_END              End of pattern (this value is 0x80000000)\nMETA_FAIL             (*FAIL)\nMETA_KET              ) closing parenthesis\nMETA_LOOKAHEAD        (?= start of lookahead\nMETA_LOOKAHEAD_NA     (*napla: start of non-atomic lookahead\nMETA_LOOKAHEADNOT     (?! start of negative lookahead\nMETA_NOCAPTURE        (?: no capture parens\nMETA_PLUS             +\nMETA_PLUS_PLUS        ++\nMETA_PLUS_QUERY       +?\nMETA_PRUNE            (*PRUNE) - no argument (see below for with argument)\nMETA_QUERY            ?\nMETA_QUERY_PLUS       ?+\nMETA_QUERY_QUERY      ??\nMETA_RANGE_ESCAPED    hyphen in class range with at least one escape\nMETA_RANGE_LITERAL    hyphen in class range defined literally\nMETA_SKIP             (*SKIP) - no argument (see below for with argument)\nMETA_THEN             (*THEN) - no argument (see below for with argument)\nMETA_ECLASS_AND       && (or &) in an extended character class\nMETA_ECLASS_OR        || (or |, +) in an extended character class\nMETA_ECLASS_SUB       -- (or -) in an extended character class\nMETA_ECLASS_XOR       ~~ (or ^) in an extended character class\nMETA_ECLASS_NOT       ! in an extended character class\n\nThe two RANGE values occur only in character classes. They are positioned\nbetween two literals that define the start and end of the range. In an EBCDIC\nenvironment it is necessary to know whether either of the range values was\nspecified as an escape. In an ASCII/Unicode environment the distinction is not\nrelevant.\n\nThe following have data in the lower 16 bits, and may be followed by other data\nelements:\n\nMETA_ALT              | alternation\nMETA_BACKREF          back reference\nMETA_CAPTURE          start of capturing group\nMETA_ESCAPE           non-literal escape sequence\nMETA_RECURSE          recursion call\n\nIf the data for META_ALT is non-zero, it is inside a lookbehind, and the data\nis the maximum length of its branch (see META_LOOKBEHIND below for more\ndetail).\n\nMETA_BACKREF, META_CAPTURE, and META_RECURSE have the capture group number as\ntheir data in the lower 16 bits of the element. META_RECURSE is followed by an\noffset, for use in error messages.\n\nMETA_BACKREF is followed by an offset if the back reference group number is 10\nor more. The offsets of the first occurrences of references to groups whose\nnumbers are less than 10 are put in cb->small_ref_offset[] (only the first\noccurrence is useful). On 64-bit systems this avoids using more than two parsed\npattern elements for items such as \\3. The offset is used when an error occurs\nbecause the reference is to a non-existent group.\n\nMETA_ESCAPE is used for escapes such as \\d that match a character. It has an\nESC_xxx value as its data. For ESC_P and ESC_p, the next element contains the\n16-bit type and data property values, packed together. Escape sequences such as\n\\g and \\k are turned into other items like META_RECURSE or META_BACKREF and\ntheir ESC_xxx values never occur with META_ESCAPE.\n\nThe following have one data item that follows in the next vector element:\n\nMETA_BIGVALUE         Next is a literal >= META_END\nMETA_POSIX            POSIX class item (data identifies the class)\nMETA_POSIX_NEG        negative POSIX class item (ditto)\n\nThe following are followed by a length element, then a number of character code\nvalues (which should match with the length):\n\nMETA_MARK             (*MARK:xxxx)\nMETA_COMMIT_ARG       (*COMMIT:xxxx)\nMETA_PRUNE_ARG        (*PRUNE:xxx)\nMETA_SKIP_ARG         (*SKIP:xxxx)\nMETA_THEN_ARG         (*THEN:xxxx)\n\nThe following are followed by a length element, then an offset in the pattern\nthat identifies the name:\n\nMETA_COND_NAME        (?(<name>) or (?('name') or (?(name)\nMETA_COND_RNAME       (?(R&name)\nMETA_COND_RNUMBER     (?(Rdigits)\nMETA_RECURSE_BYNAME   (?&name)\nMETA_BACKREF_BYNAME   \\k'name' or \\k<name> or \\k{name} or \\g{name}\nMETA_SCS_NAME         (*scs:(<name>)...)\n\nMETA_COND_RNUMBER is used for names that start with R and continue with digits,\nbecause this is an ambiguous case. It could be a back reference to a group with\nthat name, or it could be a recursion test on a numbered group.\n\nThese are followed by an offset, for use in error messages, then a number:\n\nMETA_COND_NUMBER       (?([+-]digits)\nMETA_SCS_NUMBER        (*scs:(digits)...)\n\nThe following is followed just by an offset, for use in error messages:\n\nMETA_COND_DEFINE      (?(DEFINE)\n\nThe following are at first also followed just by an offset for use in error\nmessages. After the lengths of the branches of a lookbehind group have been\nchecked the error offset is no longer needed. The lower 16 bits of the main\nword are now set to the maximum length of the first branch of the lookbehind\ngroup, and the second word is set to the minimum matching length for a\nvariable-length lookbehind group, or to LOOKBEHIND_MAX for a group whose\nbranches are all of fixed length. These values are used when generating\nOP_REVERSE or OP_VREVERSE for the first branch. The miminum value is also used\nfor any subsequent branches because there is only room for one value (the\nbranch maximum length) in a META_ALT item.\n\nMETA_LOOKBEHIND       (?<=      start of lookbehind\nMETA_LOOKBEHIND_NA    (*naplb:  start of non-atomic lookbehind\nMETA_LOOKBEHINDNOT    (?<!      start of negative lookbehind\n\nThe following are followed by two elements, the minimum and maximum. The\nmaximum value is limited to 65535 (MAX_REPEAT_COUNT). A maximum value of\n\"unlimited\" is represented by REPEAT_UNLIMITED, which is bigger than it:\n\nMETA_MINMAX           {n,m}  repeat\nMETA_MINMAX_PLUS      {n,m}+ repeat\nMETA_MINMAX_QUERY     {n,m}? repeat\n\nThis one is followed by two elements, giving the new option settings for the\nmain and extra options, respectively.\n\nMETA_OPTIONS          (?i) and friends\n\nThis one is followed by three elements. The first is 0 for '>' and 1 for '>=';\nthe next two are the major and minor numbers:\n\nMETA_COND_VERSION     (?(VERSION<op>x.y)\n\nCallouts are converted into one of two items:\n\nMETA_CALLOUT_NUMBER   (?C with numerical argument\nMETA_CALLOUT_STRING   (?C with string argument\n\nIn both cases, the next two elements contain the offset and length of the next\nitem in the pattern. Then there is either one callout number, or a length and\nan offset for the string argument. The length includes both delimiters.\n\n\nTraditional matching function\n-----------------------------\n\nThe \"traditional\", and original, matching function is called pcre2_match(), and\nit implements an NFA algorithm, similar to the original Henry Spencer algorithm\nand the way that Perl works. This is not surprising, since it is intended to be\nas compatible with Perl as possible. This is the function most users of PCRE2\nwill use most of the time. If PCRE2 is compiled with just-in-time (JIT)\nsupport, and studying a compiled pattern with JIT is successful, the JIT code\nis run instead of the normal pcre2_match() code, but the result is the same.\n\nThe interpreter used to implement backtracking by means of recursive function\ncalls, but this gave rise to regular complaints when patterns with large search\ntrees ran out of stack. There was for a while a fudge that used the heap\ninstead, but this was inefficient and slow. In 2017 I re-wrote pcre2_match() as\na single, non-recursive function that implements backtracking via a vector of\n\"frames\" on the heap, each frame representing a backtracking point. As well as\nstandard information such as the position in the pattern and position in the\nsubject, each frame has a number of unassigned variables that can be used\nlocally to preserve values at a backtracking point. C macros are used\nextensively to implement all of this.\n\n\nSupplementary matching function\n-------------------------------\n\nThere is a supplementary matching function called pcre2_dfa_match() that\nimplements a DFA matching algorithm that searches simultaneously for all\npossible matches that start at one point in the subject string. (Going back to\nmy roots: see Historical Note 1 above.) This function intreprets the same\ncompiled pattern data as pcre2_match(); however, not all the facilities are\navailable, and those that are do not always work in quite the same way. In\nparticular, capturing parentheses and backreferences are not supported. See the\nuser documentation for details.\n\nThe algorithm that is used for pcre2_dfa_match() is not a traditional FSM,\nbecause it may have a number of states active at one time. More work would be\nneeded at compile time to produce a traditional FSM where only one state is\never active at once. I believe some other regex matchers work this way. JIT\nsupport is not available for this kind of matching.\n\n\nChangeable options\n------------------\n\nThe /i, /m, or /s options (PCRE2_CASELESS, PCRE2_MULTILINE, PCRE2_DOTALL) and\nsome others may be changed in the middle of patterns by items such as (?i).\nTheir processing is handled entirely at compile time by generating different\nopcodes for the different settings. Some options are copied into the opcode's\ndata, for opcodes such as OP_REFI which depends on the (?r)\n(PCRE2_EXTRA_CASELESS_RESTRICT) option. The runtime functions do not need to\nkeep track of an option's state.\n\nPCRE2_DUPNAMES, PCRE2_EXTENDED, PCRE2_EXTENDED_MORE, and PCRE2_NO_AUTO_CAPTURE\nare tracked and processed during the parsing pre-pass. The others are handled\nfrom META_OPTIONS items during the main compile phase.\n\n\nFormat of compiled patterns\n---------------------------\n\nThe compiled form of a pattern is a vector of unsigned code units (bytes in\n8-bit mode, shorts in 16-bit mode, 32-bit words in 32-bit mode), containing\nitems of variable length. The first code unit in an item contains an opcode,\nand the length of the item is either implicit in the opcode or contained in the\ndata that follows it.\n\nIn many cases listed below, LINK_SIZE data values are specified for offsets\nwithin the compiled pattern. LINK_SIZE always specifies a number of bytes. The\ndefault value for LINK_SIZE is 2, except for the 32-bit library, where it can\nonly be 4. The 8-bit library can be compiled to use 3-byte or 4-byte values,\nand the 16-bit library can be compiled to use 4-byte values, though this\nimpairs performance. Specifying a LINK_SIZE larger than 2 for these libraries\nis necessary only when patterns whose compiled length is greater than 65535\ncode units are going to be processed. When a LINK_SIZE value uses more than one\ncode unit, the most significant unit is first.\n\nIn this description, we assume the \"normal\" compilation options. Data values\nthat are counts (e.g. quantifiers) are always two bytes long in 8-bit mode\n(most significant byte first), and one code unit in 16-bit and 32-bit modes.\n\n\nOpcodes with no following data\n------------------------------\n\nThese items are all just one code unit long:\n\n  OP_END                 end of pattern\n  OP_ANY                 match any one character other than newline\n  OP_ALLANY              match any one character, including newline\n  OP_ANYBYTE             match any single code unit, even in UTF-8/16 mode\n  OP_SOD                 match start of data: \\A\n  OP_SOM,                start of match (subject + offset): \\G\n  OP_SET_SOM,            set start of match (\\K)\n  OP_CIRC                ^ (start of data)\n  OP_CIRCM               ^ multiline mode (start of data or after newline)\n  OP_NOT_WORD_BOUNDARY   \\W\n  OP_WORD_BOUNDARY       \\w\n  OP_NOT_DIGIT           \\D\n  OP_DIGIT               \\d\n  OP_NOT_HSPACE          \\H\n  OP_HSPACE              \\h\n  OP_NOT_WHITESPACE      \\S\n  OP_WHITESPACE          \\s\n  OP_NOT_VSPACE          \\V\n  OP_VSPACE              \\v\n  OP_NOT_WORDCHAR        \\W\n  OP_WORDCHAR            \\w\n  OP_EODN                match end of data or newline at end: \\Z\n  OP_EOD                 match end of data: \\z\n  OP_DOLL                $ (end of data, or before final newline)\n  OP_DOLLM               $ multiline mode (end of data or before newline)\n  OP_EXTUNI              match an extended Unicode grapheme cluster\n  OP_ANYNL               match any Unicode newline sequence\n\n  OP_ASSERT_ACCEPT       )\n  OP_ACCEPT              ) These are Perl 5.10's \"backtracking control\n  OP_COMMIT              ) verbs\". If OP_ACCEPT is inside capturing\n  OP_FAIL                ) parentheses, it may be preceded by one or more\n  OP_PRUNE               ) OP_CLOSE, each followed by a number that\n  OP_SKIP                ) indicates which parentheses must be closed.\n  OP_THEN                )\n\nOP_ASSERT_ACCEPT is used when (*ACCEPT) is encountered within an assertion.\nThis ends the assertion, not the entire pattern match. The assertion (?!) is\nalways optimized to OP_FAIL.\n\nOP_ALLANY is used for '.' when PCRE2_DOTALL is set. It is also used for \\C in\nnon-UTF modes and in UTF-32 mode (since one code unit still equals one\ncharacter). Another use is for [^] when empty classes are permitted\n(PCRE2_ALLOW_EMPTY_CLASS is set).\n\n\nBacktracking control verbs\n--------------------------\n\nVerbs with no arguments generate opcodes with no following data (as listed\nin the section above).\n\n(*MARK:NAME) generates OP_MARK followed by the mark name, preceded by a\nlength in one code unit, and followed by a binary zero. The name length is\nlimited by the size of the code unit.\n\n(*ACCEPT:NAME) and (*FAIL:NAME) are compiled as (*MARK:NAME)(*ACCEPT) and\n(*MARK:NAME)(*FAIL) respectively.\n\nFor (*COMMIT:NAME), (*PRUNE:NAME), (*SKIP:NAME), and (*THEN:NAME), the opcodes\nOP_COMMIT_ARG, OP_PRUNE_ARG, OP_SKIP_ARG, and OP_THEN_ARG are used, with the\nname following in the same format as for OP_MARK.\n\n\nMatching literal characters\n---------------------------\n\nThe OP_CHAR opcode is followed by a single character that is to be matched\ncasefully. For caseless matching of characters that have at most two\ncase-equivalent code points, OP_CHARI is used. In UTF-8 or UTF-16 modes, the\ncharacter may be more than one code unit long. In UTF-32 mode, characters are\nalways exactly one code unit long.\n\nIf there is only one character in a character class, OP_CHAR or OP_CHARI is\nused for a positive class, and OP_NOT or OP_NOTI for a negative one (that is,\nfor something like [^a]).\n\nCaseless matching (positive or negative) of characters that have more than two\ncase-equivalent code points (which is possible only in UTF mode) is handled by\ncompiling a Unicode property item (see below), with the pseudo-property\nPT_CLIST. The value of this property is an offset in a vector called\n\"ucd_caseless_sets\" which identifies the start of a short list of case\nequivalent characters, terminated by the value NOTACHAR (0xffffffff).\n\n\nRepeating single characters\n---------------------------\n\nThe common repeats (*, +, ?), when applied to a single character, use the\nfollowing opcodes, which come in caseful and caseless versions:\n\n  Caseful         Caseless\n  OP_STAR         OP_STARI\n  OP_MINSTAR      OP_MINSTARI\n  OP_POSSTAR      OP_POSSTARI\n  OP_PLUS         OP_PLUSI\n  OP_MINPLUS      OP_MINPLUSI\n  OP_POSPLUS      OP_POSPLUSI\n  OP_QUERY        OP_QUERYI\n  OP_MINQUERY     OP_MINQUERYI\n  OP_POSQUERY     OP_POSQUERYI\n\nEach opcode is followed by the character that is to be repeated. In ASCII or\nUTF-32 modes, these are two-code-unit items; in UTF-8 or UTF-16 modes, the\nlength is variable. Those with \"MIN\" in their names are the minimizing\nversions. Those with \"POS\" in their names are possessive versions. Other kinds\nof repeat make use of these opcodes:\n\n  Caseful         Caseless\n  OP_UPTO         OP_UPTOI\n  OP_MINUPTO      OP_MINUPTOI\n  OP_POSUPTO      OP_POSUPTOI\n  OP_EXACT        OP_EXACTI\n\nEach of these is followed by a count and then the repeated character. The count\nis two bytes long in 8-bit mode (most significant byte first), or one code unit\nin 16-bit and 32-bit modes.\n\nOP_UPTO matches from 0 to the given number. A repeat with a non-zero minimum\nand a fixed maximum is coded as an OP_EXACT followed by an OP_UPTO (or\nOP_MINUPTO or OPT_POSUPTO).\n\nAnother set of matching repeating opcodes (called OP_NOTSTAR, OP_NOTSTARI,\netc.) are used for repeated, negated, single-character classes such as [^a]*.\nThe normal single-character opcodes (OP_STAR, etc.) are used for repeated\npositive single-character classes.\n\n\nRepeating character types\n-------------------------\n\nRepeats of things like \\d are done exactly as for single characters, except\nthat instead of a character, the opcode for the type (e.g. OP_DIGIT) is stored\nin the next code unit. The opcodes are:\n\n  OP_TYPESTAR\n  OP_TYPEMINSTAR\n  OP_TYPEPOSSTAR\n  OP_TYPEPLUS\n  OP_TYPEMINPLUS\n  OP_TYPEPOSPLUS\n  OP_TYPEQUERY\n  OP_TYPEMINQUERY\n  OP_TYPEPOSQUERY\n  OP_TYPEUPTO\n  OP_TYPEMINUPTO\n  OP_TYPEPOSUPTO\n  OP_TYPEEXACT\n\n\nMatch by Unicode property\n-------------------------\n\nOP_PROP and OP_NOTPROP are used for positive and negative matches of a\ncharacter by testing its Unicode property (the \\p and \\P escape sequences).\nEach is followed by two code units that encode the desired property as a type\nand a value. The types are a set of #defines of the form PT_xxx, and the values\nare enumerations of the form ucp_xx, defined in the pcre2_ucp.h source file.\nThe value is relevant only for PT_GC (General Category), PT_PC (Particular\nCategory), PT_SC (Script), PT_BIDICL (Bidi Class), PT_BOOL (Boolean property),\nand the pseudo-property PT_CLIST, which is used to identify a list of\ncase-equivalent characters when there are three or more (see above).\n\nRepeats of these items use the OP_TYPESTAR etc. set of opcodes, followed by\nthree code units: OP_PROP or OP_NOTPROP, and then the desired property type and\nvalue.\n\n\nCharacter classes\n-----------------\n\nIf there is only one character in a class, OP_CHAR or OP_CHARI is used for a\npositive class, and OP_NOT or OP_NOTI for a negative one (that is, for\nsomething like [^a]), except when caselessly matching a character that has more\nthan two case-equivalent code points (which can happen only in UTF mode). In\nthis case a Unicode property item is used, as described above in \"Matching\nliteral characters\".\n\nA set of repeating opcodes (called OP_NOTSTAR etc.) are used for repeated,\nnegated, single-character classes. The normal single-character opcodes\n(OP_STAR, etc.) are used for repeated positive single-character classes.\n\nWhen there is more than one character in a class, and all the code points are\nless than 256, OP_CLASS is used for a positive class, and OP_NCLASS for a\nnegative one. In either case, the opcode is followed by a 32-byte (16-short,\n8-word) bit map containing a 1 bit for every character that is acceptable. The\nbits are counted from the least significant end of each unit. In caseless mode,\nbits for both cases are set.\n\nThe reason for having both OP_CLASS and OP_NCLASS is so that, in UTF-8 and\n16-bit and 32-bit modes, subject characters with values greater than 255 can be\nhandled correctly. For OP_CLASS they do not match, whereas for OP_NCLASS they\ndo.\n\nFor classes containing characters with values greater than 255 or that contain\n\\p or \\P, OP_XCLASS is used. It optionally uses a bit map if any acceptable\ncode points are less than 256. After the bit map, the properties of the\ncharacter class are listed, if they are present. The items in the list\nfollows the declaration order of the pattern string. The property list\nis followed by single characters and/or character ranges, if they are\npresent. The characters/ranges are sorted in ascending order, and at\nleast one non-matching character must be present between any two of\nthem. In caseless mode, all equivalent characters are explicitly listed.\n\nOP_XCLASS is followed by a LINK_SIZE value containing the total length of the\nopcode and its data. This is followed by a code unit containing flag bits:\nXCL_NOT indicates that this is a negative class, and XCL_MAP indicates that a\nbit map is present. There follows the bit map, if XCL_MAP is set, and then a\nsequence of items coded as follows:\n\n  XCL_END      marks the end of the list\n  XCL_SINGLE   one character follows\n  XCL_RANGE    two characters follow\n  XCL_PROP     a Unicode property (type, value) follows\n  XCL_NOTPROP  a Unicode property (type, value) follows\n\nIf a range starts with a code point less than 256 and ends with one greater\nthan 255, it is split into two ranges, with characters less than 256 being\nindicated in the bit map, and the rest with XCL_RANGE.\n\nWhen XCL_NOT is set, the bit map, if present, contains bits for characters that\nare allowed (exactly as for OP_NCLASS), but the list of items that follow it\nspecifies characters and properties that are not allowed.\n\nThe meaning of the bitmap indicated by XCL_MAP is that, if one is present, then\nit fully describes which code points < 256 match the class (without needing to\ninvert the check according to XCL_NOT); the other items in the OP_XCLASS need\nnot be consulted. However, if a bitmap is not present, then code points < 256\nmay still match, so the other items in the OP_XCLASS must be consulted.\n\nFor classes containing logical expressions, such as \"[\\p{Greek} && \\p{Lu}]\" for\n\"uppercase Greek letters\", OP_ECLASS is used. The expression is encoded as a a\nstack-based series of operands and operators, in Reverse Polish Notation. Like\nan OP_XCLASS, the OP_ECLASS is first followed by a LINK_SIZE value containing\nthe total length of the opcode and its data. That is followed by a code unit\ncontaining flags: currently just ECL_MAP indicating that a bit map is present.\nThere follows the bit map, if ECL_MAP is set. Finally, there is a sequence of\nitems that are either an operand or operator. Each item starts with a single\ncode unit containing its type:\n\n  ECL_AND       AND; no additional data\n  ECL_OR        OR; no additional data\n  ECL_XOR       XOR; no additional data\n  ECL_NOT       NOT; no additional data\n  ECL_XCLASS    The additional data which follows ECL_XCLASS is the same as for\n                an OP_XCLASS, except that this data is preceded by ECL_XCLASS\n                rather than OP_XCLASS.\n                Because the OP_ECLASS has its own bitmap (if required), an\n                ECL_XCLASS should not contain a bitmap.\n\nAdditionally, there are two intermediate values used during compilation, but\nthese are folded away during generation of the opcode, and so never appear\ninside an OP_ECLASS at match time. They are:\n\n  ECL_ANY       match all characters; no additional data\n  ECL_NONE      match no characters; no additional data\n\nThe meaning of the bitmap indicated by ECL_MAP is the same as XCL_MAP.\nIf the bitmap is present, all codepoints < 256 are checked against the bitmap.\n\n\nBack references\n---------------\n\nOP_REF (caseful) or OP_REFI (caseless) is followed by a count containing the\nreference number when the reference is to a unique capturing group (either by\nnumber or by name). When named groups are used, there may be more than one\ngroup with the same name. In this case, a reference to such a group by name\ngenerates OP_DNREF or OP_DNREFI. These are followed by two counts: the index\n(not the byte offset) in the group name table of the first entry for the\nrequired name, followed by the number of groups with the same name. The\nmatching code can then search for the first one that is set.\n\nOP_REFI and OP_DNREFI are further followed by an item containing any\ncase-insensitivity flags.\n\n\nRepeating character classes and back references\n-----------------------------------------------\n\nSingle-character classes are handled specially (see above). This section\napplies to other classes and also to back references. In both cases, the repeat\ninformation follows the base item. The matching code looks at the following\nopcode to see if it is one of these:\n\n  OP_CRSTAR\n  OP_CRMINSTAR\n  OP_CRPOSSTAR\n  OP_CRPLUS\n  OP_CRMINPLUS\n  OP_CRPOSPLUS\n  OP_CRQUERY\n  OP_CRMINQUERY\n  OP_CRPOSQUERY\n  OP_CRRANGE\n  OP_CRMINRANGE\n  OP_CRPOSRANGE\n\nAll but the last three are single-code-unit items, with no data. The range\nopcodes are followed by the minimum and maximum repeat counts.\n\n\nBrackets and alternation\n------------------------\n\nA pair of non-capturing round brackets is wrapped round each expression at\ncompile time, so alternation always happens in the context of brackets.\n\n[Note for North Americans: \"bracket\" to some English speakers, including\nmyself, can be round, square, curly, or pointy. Hence this usage rather than\n\"parentheses\".]\n\nNon-capturing brackets use the opcode OP_BRA, capturing brackets use OP_CBRA. A\nbracket opcode is followed by a LINK_SIZE value which gives the offset to the\nnext alternative OP_ALT or, if there aren't any branches, to the terminating\nopcode. Each OP_ALT is followed by a LINK_SIZE value giving the offset to the\nnext one, or to the final opcode. For capturing brackets, the bracket number is\na count that immediately follows the offset.\n\nThere are several opcodes that mark the end of a subpattern group. OP_KET is\nused for subpatterns that do not repeat indefinitely, OP_KETRMIN and\nOP_KETRMAX are used for indefinite repetitions, minimally or maximally\nrespectively, and OP_KETRPOS for possessive repetitions (see below for more\ndetails). All four are followed by a LINK_SIZE value giving (as a positive\nnumber) the offset back to the matching opening bracket opcode.\n\nIf a subpattern is quantified such that it is permitted to match zero times, it\nis preceded by one of OP_BRAZERO, OP_BRAMINZERO, or OP_SKIPZERO. These are\nsingle-unit opcodes that tell the matcher that skipping the following\nsubpattern entirely is a valid match. In the case of the first two, not\nskipping the pattern is also valid (greedy and non-greedy). The third is used\nwhen a pattern has the quantifier {0,0}. It cannot be entirely discarded,\nbecause it may be called as a subroutine from elsewhere in the pattern.\n\nA subpattern with an indefinite maximum repetition is replicated in the\ncompiled data its minimum number of times (or once with OP_BRAZERO if the\nminimum is zero), with the final copy terminating with OP_KETRMIN or OP_KETRMAX\nas appropriate.\n\nA subpattern with a bounded maximum repetition is replicated in a nested\nfashion up to the maximum number of times, with OP_BRAZERO or OP_BRAMINZERO\nbefore each replication after the minimum, so that, for example, (abc){2,5} is\ncompiled as (abc)(abc)((abc)((abc)(abc)?)?)?, except that each bracketed group\nhas the same number.\n\nWhen a repeated subpattern has an unbounded upper limit, it is checked to see\nwhether it could match an empty string. If this is the case, the opcode in the\nfinal replication is changed to OP_SBRA or OP_SCBRA. This tells the matcher\nthat it needs to check for matching an empty string when it hits OP_KETRMIN or\nOP_KETRMAX, and if so, to break the loop.\n\n\nPossessive brackets\n-------------------\n\nWhen a repeated group (capturing or non-capturing) is marked as possessive by\nthe \"+\" notation, e.g. (abc)++, different opcodes are used. Their names all\nhave POS on the end, e.g. OP_BRAPOS instead of OP_BRA and OP_SCBRAPOS instead\nof OP_SCBRA. The end of such a group is marked by OP_KETRPOS. If the minimum\nrepetition is zero, the group is preceded by OP_BRAPOSZERO.\n\n\nOnce-only (atomic) groups\n-------------------------\n\nThese are just like other subpatterns, but they start with the opcode OP_ONCE.\nThe check for matching an empty string in an unbounded repeat is handled\nentirely at runtime, so there is just this one opcode for atomic groups.\n\n\nAssertions\n----------\n\nForward assertions are also just like other subpatterns, but starting with one\nof the opcodes OP_ASSERT, OP_ASSERT_NA (non-atomic assertion), or\nOP_ASSERT_NOT.\n\nBackward assertions use the opcodes OP_ASSERTBACK, OP_ASSERTBACK_NA, and\nOP_ASSERTBACK_NOT. If all the branches of a backward assertion are of fixed\nlength (not necessarily the same), the first opcode inside each branch is\nOP_REVERSE, followed by an IMM2_SIZE count of the number of characters to move\nback the pointer in the subject string, thus allowing each branch to have a\ndifferent (but fixed) length.\n\nVariable-length backward assertions whose maximum matching length is limited\nare also supported. For such assertions, the first opcode inside each branch is\nOP_VREVERSE, followed by the minimum and maximum lengths for that branch,\nunless these happen to be equal, in which case OP_REVERSE is used. These\nIMM2_SIZE values occupy two code units each in 8-bit mode, and 1 code unit in\n16/32 bit modes.\n\nIn ASCII or UTF-32 mode, the character counts in OP_REVERSE and OP_VREVERSE are\nalso the number of code units, but in UTF-8/16 mode each character may occupy\nmore than one code unit.\n\nThe \"scan substring\" assertion compiles as OP_ASSERT_SCS. This opcode is\nfollowed by a list of arguments. Each argument is either an OP_CREF or\nOP_DNCREF byte code sequence. The details of these sequences are described\nin the next section.\n\nFor example (*scs:(1,'NAME')...PATTERN...) is translated to:\n[OP_ASSERT_SCS] [OP_CREF] [OP_CREF] ...PATTERN... [OP_KET]\n\nIf 'NAME' is a duplicated name, the second [OP_CREF] is [OP_DNCREF] instead.\n\n\nConditional subpatterns\n-----------------------\n\nThese are like other subpatterns, but they start with the opcode OP_COND, or\nOP_SCOND for one that might match an empty string in an unbounded repeat.\n\nIf the condition is a back reference, this is stored at the start of the\nsubpattern using the opcode OP_CREF followed by a count containing the\nreference number, provided that the reference is to a unique capturing group.\nIf the reference was by name and there is more than one group with that name,\nOP_DNCREF is used instead. It is followed by two counts: the index in the group\nnames table, and the number of groups with the same name. The allows the\nmatcher to check if any group with the given name is set.\n\nIf the condition is \"in recursion\" (coded as \"(?(R)\"), or \"in recursion of\ngroup x\" (coded as \"(?(Rx)\"), the group number is stored at the start of the\nsubpattern using the opcode OP_RREF (with a value of RREF_ANY (0xffff) for \"the\nwhole pattern\") or OP_DNRREF (with data as for OP_DNCREF).\n\nFor a DEFINE condition, OP_FALSE is used (with no associated data). During\ncompilation, however, a DEFINE condition is coded as OP_DEFINE so that, when\nthe conditional group is complete, there can be a check to ensure that it\ncontains only one top-level branch. Once this has happened, the opcode is\nchanged to OP_FALSE, so the matcher never sees OP_DEFINE.\n\nThere is a special PCRE2-specific condition of the form (VERSION[>]=x.y), which\ntests the PCRE2 version number. This compiles into one of the opcodes OP_TRUE\nor OP_FALSE.\n\nIf a condition is not a back reference, recursion test, DEFINE, or VERSION, it\nmust start with a parenthesized atomic assertion, whose opcode normally\nimmediately follows OP_COND or OP_SCOND. However, if automatic callouts are\nenabled, a callout is inserted immediately before the assertion. It is also\npossible to insert a manual callout at this point. Only assertion conditions\nmay have callouts preceding the condition.\n\nA condition that is the negative assertion (?!) is optimized to OP_FAIL in all\nparts of the pattern, so this is another opcode that may appear as a condition.\nIt is treated the same as OP_FALSE.\n\n\nRecursion\n---------\n\nRecursion either matches the current pattern, or some subexpression. The opcode\nOP_RECURSE is followed by a LINK_SIZE value that is the offset to the starting\nbracket from the start of the whole pattern. OP_RECURSE is also used for\n\"subroutine\" calls, even though they are not strictly a recursion. Up till\nrelease 10.30 recursions were treated as atomic groups, making them\nincompatible with Perl (but PCRE had them well before Perl did). From 10.30,\nbacktracking into recursions is supported.\n\nRepeated recursions used to be wrapped inside OP_ONCE brackets, which not only\nforced no backtracking, but also allowed repetition to be handled as for other\nbracketed groups. From 10.30 onwards, repeated recursions are duplicated for\ntheir minimum repetitions, and then wrapped in non-capturing brackets for the\nremainder. For example, (?1){3} is treated as (?1)(?1)(?1), and (?1){2,4} is\ntreated as (?1)(?1)(?:(?1)){0,2}.\n\n\nCallouts\n--------\n\nA callout may have either a numerical argument or a string argument. These use\nOP_CALLOUT or OP_CALLOUT_STR, respectively. In each case these are followed by\ntwo LINK_SIZE values giving the offset in the pattern string to the start of\nthe following item, and another count giving the length of this item. These\nvalues make it possible for pcre2test to output useful tracing information\nusing callouts.\n\nIn the case of a numeric callout, after these two values there is a single code\nunit containing the callout number, in the range 0-255, with 255 being used for\ncallouts that are automatically inserted as a result of the PCRE2_AUTO_CALLOUT\noption. Thus, this opcode item is of fixed length:\n\n  [OP_CALLOUT] [PATTERN_OFFSET] [PATTERN_LENGTH] [NUMBER]\n\nFor callouts with string arguments, OP_CALLOUT_STR has three more data items:\na LINK_SIZE value giving the complete length of the entire opcode item, a\nLINK_SIZE item containing the offset within the pattern string to the start of\nthe string argument, and the string itself, preceded by its starting delimiter\nand followed by a binary zero. When a callout function is called, a pointer to\nthe actual string is passed, but the delimiter can be accessed as string[-1] if\nthe application needs it. In the 8-bit library, the callout in /X(?C'abc')Y/ is\ncompiled as the following bytes (decimal numbers represent binary values):\n\n  [OP_CALLOUT_STR]  [0] [10]  [0] [1]  [0] [14]  [0] [5] ['] [a] [b] [c] [0]\n                    --------  -------  --------  -------\n                       |         |        |         |\n                       ------- LINK_SIZE items ------\n\nOpcode table checking\n---------------------\n\nThe last opcode that is defined in pcre2_internal.h is OP_TABLE_LENGTH. This is\nnot a real opcode, but is used to check at compile time that tables indexed by\nopcode are the correct length, in order to catch updating errors.\n\n\nSee also\n--------\n\nThe file maint/README contains additional information.\n\n\nPhilip Hazel\nAugust 2024\n"
  },
  {
    "path": "INSTALL",
    "content": "Installation Instructions\n*************************\n\n   Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free\nSoftware Foundation, Inc.\n\n   Copying and distribution of this file, with or without modification,\nare permitted in any medium without royalty provided the copyright\nnotice and this notice are preserved.  This file is offered as-is,\nwithout warranty of any kind.\n\nBasic Installation\n==================\n\n   Briefly, the shell command './configure && make && make install'\nshould configure, build, and install this package.  The following\nmore-detailed instructions are generic; see the 'README' file for\ninstructions specific to this package.  Some packages provide this\n'INSTALL' file but do not implement all of the features documented\nbelow.  The lack of an optional feature in a given package is not\nnecessarily a bug.  More recommendations for GNU packages can be found\nin *note Makefile Conventions: (standards)Makefile Conventions.\n\n   The 'configure' shell script attempts to guess correct values for\nvarious system-dependent variables used during compilation.  It uses\nthose values to create a 'Makefile' in each directory of the package.\nIt may also create one or more '.h' files containing system-dependent\ndefinitions.  Finally, it creates a shell script 'config.status' that\nyou can run in the future to recreate the current configuration, and a\nfile 'config.log' containing compiler output (useful mainly for\ndebugging 'configure').\n\n   It can also use an optional file (typically called 'config.cache' and\nenabled with '--cache-file=config.cache' or simply '-C') that saves the\nresults of its tests to speed up reconfiguring.  Caching is disabled by\ndefault to prevent problems with accidental use of stale cache files.\n\n   If you need to do unusual things to compile the package, please try\nto figure out how 'configure' could check whether to do them, and mail\ndiffs or instructions to the address given in the 'README' so they can\nbe considered for the next release.  If you are using the cache, and at\nsome point 'config.cache' contains results you don't want to keep, you\nmay remove or edit it.\n\n   The file 'configure.ac' (or 'configure.in') is used to create\n'configure' by a program called 'autoconf'.  You need 'configure.ac' if\nyou want to change it or regenerate 'configure' using a newer version of\n'autoconf'.\n\n   The simplest way to compile this package is:\n\n  1. 'cd' to the directory containing the package's source code and type\n     './configure' to configure the package for your system.\n\n     Running 'configure' might take a while.  While running, it prints\n     some messages telling which features it is checking for.\n\n  2. Type 'make' to compile the package.\n\n  3. Optionally, type 'make check' to run any self-tests that come with\n     the package, generally using the just-built uninstalled binaries.\n\n  4. Type 'make install' to install the programs and any data files and\n     documentation.  When installing into a prefix owned by root, it is\n     recommended that the package be configured and built as a regular\n     user, and only the 'make install' phase executed with root\n     privileges.\n\n  5. Optionally, type 'make installcheck' to repeat any self-tests, but\n     this time using the binaries in their final installed location.\n     This target does not install anything.  Running this target as a\n     regular user, particularly if the prior 'make install' required\n     root privileges, verifies that the installation completed\n     correctly.\n\n  6. You can remove the program binaries and object files from the\n     source code directory by typing 'make clean'.  To also remove the\n     files that 'configure' created (so you can compile the package for\n     a different kind of computer), type 'make distclean'.  There is\n     also a 'make maintainer-clean' target, but that is intended mainly\n     for the package's developers.  If you use it, you may have to get\n     all sorts of other programs in order to regenerate files that came\n     with the distribution.\n\n  7. Often, you can also type 'make uninstall' to remove the installed\n     files again.  In practice, not all packages have tested that\n     uninstallation works correctly, even though it is required by the\n     GNU Coding Standards.\n\n  8. Some packages, particularly those that use Automake, provide 'make\n     distcheck', which can by used by developers to test that all other\n     targets like 'make install' and 'make uninstall' work correctly.\n     This target is generally not run by end users.\n\nCompilers and Options\n=====================\n\n   Some systems require unusual options for compilation or linking that\nthe 'configure' script does not know about.  Run './configure --help'\nfor details on some of the pertinent environment variables.\n\n   You can give 'configure' initial values for configuration parameters\nby setting variables in the command line or in the environment.  Here is\nan example:\n\n     ./configure CC=c99 CFLAGS=-g LIBS=-lposix\n\n   *Note Defining Variables::, for more details.\n\nCompiling For Multiple Architectures\n====================================\n\n   You can compile the package for more than one kind of computer at the\nsame time, by placing the object files for each architecture in their\nown directory.  To do this, you can use GNU 'make'.  'cd' to the\ndirectory where you want the object files and executables to go and run\nthe 'configure' script.  'configure' automatically checks for the source\ncode in the directory that 'configure' is in and in '..'.  This is known\nas a \"VPATH\" build.\n\n   With a non-GNU 'make', it is safer to compile the package for one\narchitecture at a time in the source code directory.  After you have\ninstalled the package for one architecture, use 'make distclean' before\nreconfiguring for another architecture.\n\n   On MacOS X 10.5 and later systems, you can create libraries and\nexecutables that work on multiple system types--known as \"fat\" or\n\"universal\" binaries--by specifying multiple '-arch' options to the\ncompiler but only a single '-arch' option to the preprocessor.  Like\nthis:\n\n     ./configure CC=\"gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64\" \\\n                 CXX=\"g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64\" \\\n                 CPP=\"gcc -E\" CXXCPP=\"g++ -E\"\n\n   This is not guaranteed to produce working output in all cases, you\nmay have to build one architecture at a time and combine the results\nusing the 'lipo' tool if you have problems.\n\nInstallation Names\n==================\n\n   By default, 'make install' installs the package's commands under\n'/usr/local/bin', include files under '/usr/local/include', etc.  You\ncan specify an installation prefix other than '/usr/local' by giving\n'configure' the option '--prefix=PREFIX', where PREFIX must be an\nabsolute file name.\n\n   You can specify separate installation prefixes for\narchitecture-specific files and architecture-independent files.  If you\npass the option '--exec-prefix=PREFIX' to 'configure', the package uses\nPREFIX as the prefix for installing programs and libraries.\nDocumentation and other data files still use the regular prefix.\n\n   In addition, if you use an unusual directory layout you can give\noptions like '--bindir=DIR' to specify different values for particular\nkinds of files.  Run 'configure --help' for a list of the directories\nyou can set and what kinds of files go in them.  In general, the default\nfor these options is expressed in terms of '${prefix}', so that\nspecifying just '--prefix' will affect all of the other directory\nspecifications that were not explicitly provided.\n\n   The most portable way to affect installation locations is to pass the\ncorrect locations to 'configure'; however, many packages provide one or\nboth of the following shortcuts of passing variable assignments to the\n'make install' command line to change installation locations without\nhaving to reconfigure or recompile.\n\n   The first method involves providing an override variable for each\naffected directory.  For example, 'make install\nprefix=/alternate/directory' will choose an alternate location for all\ndirectory configuration variables that were expressed in terms of\n'${prefix}'.  Any directories that were specified during 'configure',\nbut not in terms of '${prefix}', must each be overridden at install time\nfor the entire installation to be relocated.  The approach of makefile\nvariable overrides for each directory variable is required by the GNU\nCoding Standards, and ideally causes no recompilation.  However, some\nplatforms have known limitations with the semantics of shared libraries\nthat end up requiring recompilation when using this method, particularly\nnoticeable in packages that use GNU Libtool.\n\n   The second method involves providing the 'DESTDIR' variable.  For\nexample, 'make install DESTDIR=/alternate/directory' will prepend\n'/alternate/directory' before all installation names.  The approach of\n'DESTDIR' overrides is not required by the GNU Coding Standards, and\ndoes not work on platforms that have drive letters.  On the other hand,\nit does better at avoiding recompilation issues, and works well even\nwhen some directory options were not specified in terms of '${prefix}'\nat 'configure' time.\n\nOptional Features\n=================\n\n   If the package supports it, you can cause programs to be installed\nwith an extra prefix or suffix on their names by giving 'configure' the\noption '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.\n\n   Some packages pay attention to '--enable-FEATURE' options to\n'configure', where FEATURE indicates an optional part of the package.\nThey may also pay attention to '--with-PACKAGE' options, where PACKAGE\nis something like 'gnu-as' or 'x' (for the X Window System).  The\n'README' should mention any '--enable-' and '--with-' options that the\npackage recognizes.\n\n   For packages that use the X Window System, 'configure' can usually\nfind the X include and library files automatically, but if it doesn't,\nyou can use the 'configure' options '--x-includes=DIR' and\n'--x-libraries=DIR' to specify their locations.\n\n   Some packages offer the ability to configure how verbose the\nexecution of 'make' will be.  For these packages, running './configure\n--enable-silent-rules' sets the default to minimal output, which can be\noverridden with 'make V=1'; while running './configure\n--disable-silent-rules' sets the default to verbose, which can be\noverridden with 'make V=0'.\n\nParticular systems\n==================\n\n   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU CC\nis not installed, it is recommended to use the following options in\norder to use an ANSI C compiler:\n\n     ./configure CC=\"cc -Ae -D_XOPEN_SOURCE=500\"\n\nand if that doesn't work, install pre-built binaries of GCC for HP-UX.\n\n   HP-UX 'make' updates targets which have the same timestamps as their\nprerequisites, which makes it generally unusable when shipped generated\nfiles such as 'configure' are involved.  Use GNU 'make' instead.\n\n   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot\nparse its '<wchar.h>' header file.  The option '-nodtk' can be used as a\nworkaround.  If GNU CC is not installed, it is therefore recommended to\ntry\n\n     ./configure CC=\"cc\"\n\nand if that doesn't work, try\n\n     ./configure CC=\"cc -nodtk\"\n\n   On Solaris, don't put '/usr/ucb' early in your 'PATH'.  This\ndirectory contains several dysfunctional programs; working variants of\nthese programs are available in '/usr/bin'.  So, if you need '/usr/ucb'\nin your 'PATH', put it _after_ '/usr/bin'.\n\n   On Haiku, software installed for all users goes in '/boot/common',\nnot '/usr/local'.  It is recommended to use the following options:\n\n     ./configure --prefix=/boot/common\n\nSpecifying the System Type\n==========================\n\n   There may be some features 'configure' cannot figure out\nautomatically, but needs to determine by the type of machine the package\nwill run on.  Usually, assuming the package is built to be run on the\n_same_ architectures, 'configure' can figure that out, but if it prints\na message saying it cannot guess the machine type, give it the\n'--build=TYPE' option.  TYPE can either be a short name for the system\ntype, such as 'sun4', or a canonical name which has the form:\n\n     CPU-COMPANY-SYSTEM\n\nwhere SYSTEM can have one of these forms:\n\n     OS\n     KERNEL-OS\n\n   See the file 'config.sub' for the possible values of each field.  If\n'config.sub' isn't included in this package, then this package doesn't\nneed to know the machine type.\n\n   If you are _building_ compiler tools for cross-compiling, you should\nuse the option '--target=TYPE' to select the type of system they will\nproduce code for.\n\n   If you want to _use_ a cross compiler, that generates code for a\nplatform different from the build platform, you should specify the\n\"host\" platform (i.e., that on which the generated programs will\neventually be run) with '--host=TYPE'.\n\nSharing Defaults\n================\n\n   If you want to set default values for 'configure' scripts to share,\nyou can create a site shell script called 'config.site' that gives\ndefault values for variables like 'CC', 'cache_file', and 'prefix'.\n'configure' looks for 'PREFIX/share/config.site' if it exists, then\n'PREFIX/etc/config.site' if it exists.  Or, you can set the\n'CONFIG_SITE' environment variable to the location of the site script.\nA warning: not all 'configure' scripts look for a site script.\n\nDefining Variables\n==================\n\n   Variables not defined in a site shell script can be set in the\nenvironment passed to 'configure'.  However, some packages may run\nconfigure again during the build, and the customized values of these\nvariables may be lost.  In order to avoid this problem, you should set\nthem in the 'configure' command line, using 'VAR=value'.  For example:\n\n     ./configure CC=/usr/local2/bin/gcc\n\ncauses the specified 'gcc' to be used as the C compiler (unless it is\noverridden in the site shell script).\n\nUnfortunately, this technique does not work for 'CONFIG_SHELL' due to an\nAutoconf limitation.  Until the limitation is lifted, you can use this\nworkaround:\n\n     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash\n\n'configure' Invocation\n======================\n\n   'configure' recognizes the following options to control how it\noperates.\n\n'--help'\n'-h'\n     Print a summary of all of the options to 'configure', and exit.\n\n'--help=short'\n'--help=recursive'\n     Print a summary of the options unique to this package's\n     'configure', and exit.  The 'short' variant lists options used only\n     in the top level, while the 'recursive' variant lists options also\n     present in any nested packages.\n\n'--version'\n'-V'\n     Print the version of Autoconf used to generate the 'configure'\n     script, and exit.\n\n'--cache-file=FILE'\n     Enable the cache: use and save the results of the tests in FILE,\n     traditionally 'config.cache'.  FILE defaults to '/dev/null' to\n     disable caching.\n\n'--config-cache'\n'-C'\n     Alias for '--cache-file=config.cache'.\n\n'--quiet'\n'--silent'\n'-q'\n     Do not print messages saying which checks are being made.  To\n     suppress all normal output, redirect it to '/dev/null' (any error\n     messages will still be shown).\n\n'--srcdir=DIR'\n     Look for the package's source code in directory DIR.  Usually\n     'configure' can determine that directory automatically.\n\n'--prefix=DIR'\n     Use DIR as the installation prefix.  *note Installation Names:: for\n     more details, including other options available for fine-tuning the\n     installation locations.\n\n'--no-create'\n'-n'\n     Run the configure checks, but stop before creating any output\n     files.\n\n'configure' also accepts some other, not widely useful, options.  Run\n'configure --help' for more details.\n"
  },
  {
    "path": "LICENCE.md",
    "content": "PCRE2 Licence\n=============\n\n| SPDX-License-Identifier: | BSD-3-Clause WITH PCRE2-exception |\n|---------|-------|\n\nPCRE2 is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\nReleases 10.00 and above of PCRE2 are distributed under the terms of the \"BSD\"\nlicence, as specified below, with one exemption for certain binary\nredistributions. The documentation for PCRE2, supplied in the \"doc\" directory,\nis distributed under the same terms as the software itself. The data in the\ntestdata directory is not copyrighted and is in the public domain.\n\nThe basic library functions are written in C and are freestanding. Also\nincluded in the distribution is a just-in-time compiler that can be used to\noptimize pattern matching. This is an optional feature that can be omitted when\nthe library is built. The just-in-time compiler is separately licensed under the\n\"2-clause BSD\" licence.\n\n\nCOPYRIGHT\n---------\n\n### The basic library functions\n\n    Written by:       Philip Hazel\n    Email local part: Philip.Hazel\n    Email domain:     gmail.com\n\n    Retired from University of Cambridge Computing Service,\n    Cambridge, England.\n\n    Copyright (c) 1997-2007 University of Cambridge\n    Copyright (c) 2007-2024 Philip Hazel\n    All rights reserved.\n\n### PCRE2 Just-In-Time compilation support\n\n    Written by:       Zoltan Herczeg\n    Email local part: hzmester\n    Email domain:     freemail.hu\n\n    Copyright (c) 2010-2024 Zoltan Herczeg\n    All rights reserved.\n\n### Stack-less Just-In-Time compiler\n\n    Written by:       Zoltan Herczeg\n    Email local part: hzmester\n    Email domain:     freemail.hu\n\n    Copyright (c) 2009-2024 Zoltan Herczeg\n    All rights reserved.\n\nThe code in the `deps/sljit` directory has its own LICENSE file.\n\n### All other contributions\n\nMany other contributors have participated in the authorship of PCRE2. As PCRE2\nhas never required a Contributor Licensing Agreement, or other copyright\nassignment agreement, all contributions have copyright retained by each\noriginal contributor or their employer.\n\n\nTHE \"BSD\" LICENCE\n-----------------\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notices,\n  this list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright\n  notices, this list of conditions and the following disclaimer in the\n  documentation and/or other materials provided with the distribution.\n\n* Neither the name of the University of Cambridge nor the names of any\n  contributors may be used to endorse or promote products derived from this\n  software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n\n\nEXEMPTION FOR BINARY LIBRARY-LIKE PACKAGES\n------------------------------------------\n\nThe second condition in the BSD licence (covering binary redistributions) does\nnot apply all the way down a chain of software. If binary package A includes\nPCRE2, it must respect the condition, but if package B is software that\nincludes package A, the condition is not imposed on package B unless it uses\nPCRE2 independently.\n"
  },
  {
    "path": "MODULE.bazel",
    "content": "module(\n    name = \"pcre2\",\n    version = \"10.48-DEV\",\n    compatibility_level = 1,\n)\n\nbazel_dep(name = \"rules_cc\", version = \"0.2.8\")\nbazel_dep(name = \"bazel_skylib\", version = \"1.8.1\")\nbazel_dep(name = \"platforms\", version = \"1.0.0\")\n"
  },
  {
    "path": "Makefile.am",
    "content": "## Process this file with automake to produce Makefile.in.\n\nAUTOMAKE_OPTIONS = subdir-objects\nACLOCAL_AMFLAGS = -I m4\n\n## This seems to have become necessary for building in non-source directory.\n\nAM_CPPFLAGS=\"-I$(srcdir)/src\"\n\n## Set some variables to accumulate conditionally-set Automake targets.\n\nCLEAN_LOCAL_TARGETS=\nDISTCLEAN_LOCAL_TARGETS=\nPHONY_TARGETS=\n\n## Specify the documentation files that are distributed.\n\ndist_doc_DATA = \\\n  AUTHORS.md \\\n  COPYING \\\n  ChangeLog \\\n  LICENCE.md \\\n  NEWS \\\n  README \\\n  SECURITY.md \\\n  doc/pcre2.txt \\\n  doc/pcre2-config.txt \\\n  doc/pcre2grep.txt \\\n  doc/pcre2test.txt\n\ndist_html_DATA = \\\n  doc/html/NON-AUTOTOOLS-BUILD.txt \\\n  doc/html/README.txt \\\n  doc/html/index.html \\\n  doc/html/pcre2-config.html \\\n  doc/html/pcre2.html \\\n  doc/html/pcre2_callout_enumerate.html \\\n  doc/html/pcre2_code_copy.html \\\n  doc/html/pcre2_code_copy_with_tables.html \\\n  doc/html/pcre2_code_free.html \\\n  doc/html/pcre2_compile.html \\\n  doc/html/pcre2_compile_context_copy.html \\\n  doc/html/pcre2_compile_context_create.html \\\n  doc/html/pcre2_compile_context_free.html \\\n  doc/html/pcre2_config.html \\\n  doc/html/pcre2_convert_context_copy.html \\\n  doc/html/pcre2_convert_context_create.html \\\n  doc/html/pcre2_convert_context_free.html \\\n  doc/html/pcre2_converted_pattern_free.html \\\n  doc/html/pcre2_dfa_match.html \\\n  doc/html/pcre2_general_context_copy.html \\\n  doc/html/pcre2_general_context_create.html \\\n  doc/html/pcre2_general_context_free.html \\\n  doc/html/pcre2_get_error_message.html \\\n  doc/html/pcre2_get_mark.html \\\n  doc/html/pcre2_get_match_data_heapframes_size.html \\\n  doc/html/pcre2_get_match_data_size.html \\\n  doc/html/pcre2_get_ovector_count.html \\\n  doc/html/pcre2_get_ovector_pointer.html \\\n  doc/html/pcre2_get_startchar.html \\\n  doc/html/pcre2_jit_compile.html \\\n  doc/html/pcre2_jit_free_unused_memory.html \\\n  doc/html/pcre2_jit_match.html \\\n  doc/html/pcre2_jit_stack_assign.html \\\n  doc/html/pcre2_jit_stack_create.html \\\n  doc/html/pcre2_jit_stack_free.html \\\n  doc/html/pcre2_maketables.html \\\n  doc/html/pcre2_maketables_free.html \\\n  doc/html/pcre2_match.html \\\n  doc/html/pcre2_match_context_copy.html \\\n  doc/html/pcre2_match_context_create.html \\\n  doc/html/pcre2_match_context_free.html \\\n  doc/html/pcre2_match_data_create.html \\\n  doc/html/pcre2_match_data_create_from_pattern.html \\\n  doc/html/pcre2_match_data_free.html \\\n  doc/html/pcre2_next_match.html \\\n  doc/html/pcre2_pattern_convert.html \\\n  doc/html/pcre2_pattern_info.html \\\n  doc/html/pcre2_serialize_decode.html \\\n  doc/html/pcre2_serialize_encode.html \\\n  doc/html/pcre2_serialize_free.html \\\n  doc/html/pcre2_serialize_get_number_of_codes.html \\\n  doc/html/pcre2_set_bsr.html \\\n  doc/html/pcre2_set_callout.html \\\n  doc/html/pcre2_set_character_tables.html \\\n  doc/html/pcre2_set_compile_extra_options.html \\\n  doc/html/pcre2_set_compile_recursion_guard.html \\\n  doc/html/pcre2_set_depth_limit.html \\\n  doc/html/pcre2_set_glob_escape.html \\\n  doc/html/pcre2_set_glob_separator.html \\\n  doc/html/pcre2_set_heap_limit.html \\\n  doc/html/pcre2_set_match_limit.html \\\n  doc/html/pcre2_set_max_pattern_compiled_length.html \\\n  doc/html/pcre2_set_max_pattern_length.html \\\n  doc/html/pcre2_set_max_varlookbehind.html \\\n  doc/html/pcre2_set_offset_limit.html \\\n  doc/html/pcre2_set_optimize.html \\\n  doc/html/pcre2_set_newline.html \\\n  doc/html/pcre2_set_parens_nest_limit.html \\\n  doc/html/pcre2_set_recursion_limit.html \\\n  doc/html/pcre2_set_recursion_memory_management.html \\\n  doc/html/pcre2_set_substitute_callout.html \\\n  doc/html/pcre2_set_substitute_case_callout.html \\\n  doc/html/pcre2_substitute.html \\\n  doc/html/pcre2_substring_copy_byname.html \\\n  doc/html/pcre2_substring_copy_bynumber.html \\\n  doc/html/pcre2_substring_free.html \\\n  doc/html/pcre2_substring_get_byname.html \\\n  doc/html/pcre2_substring_get_bynumber.html \\\n  doc/html/pcre2_substring_length_byname.html \\\n  doc/html/pcre2_substring_length_bynumber.html \\\n  doc/html/pcre2_substring_list_free.html \\\n  doc/html/pcre2_substring_list_get.html \\\n  doc/html/pcre2_substring_nametable_scan.html \\\n  doc/html/pcre2_substring_number_from_name.html \\\n  doc/html/pcre2api.html \\\n  doc/html/pcre2build.html \\\n  doc/html/pcre2callout.html \\\n  doc/html/pcre2compat.html \\\n  doc/html/pcre2convert.html \\\n  doc/html/pcre2demo.html \\\n  doc/html/pcre2grep.html \\\n  doc/html/pcre2jit.html \\\n  doc/html/pcre2limits.html \\\n  doc/html/pcre2matching.html \\\n  doc/html/pcre2partial.html \\\n  doc/html/pcre2pattern.html \\\n  doc/html/pcre2perform.html \\\n  doc/html/pcre2posix.html \\\n  doc/html/pcre2sample.html \\\n  doc/html/pcre2serialize.html \\\n  doc/html/pcre2syntax.html \\\n  doc/html/pcre2test.html \\\n  doc/html/pcre2unicode.html\n\ndist_man_MANS = \\\n  doc/pcre2-config.1 \\\n  doc/pcre2.3 \\\n  doc/pcre2_callout_enumerate.3 \\\n  doc/pcre2_code_copy.3 \\\n  doc/pcre2_code_copy_with_tables.3 \\\n  doc/pcre2_code_free.3 \\\n  doc/pcre2_compile.3 \\\n  doc/pcre2_compile_context_copy.3 \\\n  doc/pcre2_compile_context_create.3 \\\n  doc/pcre2_compile_context_free.3 \\\n  doc/pcre2_config.3 \\\n  doc/pcre2_convert_context_copy.3 \\\n  doc/pcre2_convert_context_create.3 \\\n  doc/pcre2_convert_context_free.3 \\\n  doc/pcre2_converted_pattern_free.3 \\\n  doc/pcre2_dfa_match.3 \\\n  doc/pcre2_general_context_copy.3 \\\n  doc/pcre2_general_context_create.3 \\\n  doc/pcre2_general_context_free.3 \\\n  doc/pcre2_get_error_message.3 \\\n  doc/pcre2_get_mark.3 \\\n  doc/pcre2_get_match_data_heapframes_size.3 \\\n  doc/pcre2_get_match_data_size.3 \\\n  doc/pcre2_get_ovector_count.3 \\\n  doc/pcre2_get_ovector_pointer.3 \\\n  doc/pcre2_get_startchar.3 \\\n  doc/pcre2_jit_compile.3 \\\n  doc/pcre2_jit_free_unused_memory.3 \\\n  doc/pcre2_jit_match.3 \\\n  doc/pcre2_jit_stack_assign.3 \\\n  doc/pcre2_jit_stack_create.3 \\\n  doc/pcre2_jit_stack_free.3 \\\n  doc/pcre2_maketables.3 \\\n  doc/pcre2_maketables_free.3 \\\n  doc/pcre2_match.3 \\\n  doc/pcre2_match_context_copy.3 \\\n  doc/pcre2_match_context_create.3 \\\n  doc/pcre2_match_context_free.3 \\\n  doc/pcre2_match_data_create.3 \\\n  doc/pcre2_match_data_create_from_pattern.3 \\\n  doc/pcre2_match_data_free.3 \\\n  doc/pcre2_next_match.3 \\\n  doc/pcre2_pattern_convert.3 \\\n  doc/pcre2_pattern_info.3 \\\n  doc/pcre2_serialize_decode.3 \\\n  doc/pcre2_serialize_encode.3 \\\n  doc/pcre2_serialize_free.3 \\\n  doc/pcre2_serialize_get_number_of_codes.3 \\\n  doc/pcre2_set_bsr.3 \\\n  doc/pcre2_set_callout.3 \\\n  doc/pcre2_set_character_tables.3 \\\n  doc/pcre2_set_compile_extra_options.3 \\\n  doc/pcre2_set_compile_recursion_guard.3 \\\n  doc/pcre2_set_depth_limit.3 \\\n  doc/pcre2_set_glob_escape.3 \\\n  doc/pcre2_set_glob_separator.3 \\\n  doc/pcre2_set_heap_limit.3 \\\n  doc/pcre2_set_match_limit.3 \\\n  doc/pcre2_set_max_pattern_compiled_length.3 \\\n  doc/pcre2_set_max_pattern_length.3 \\\n  doc/pcre2_set_max_varlookbehind.3 \\\n  doc/pcre2_set_offset_limit.3 \\\n  doc/pcre2_set_optimize.3 \\\n  doc/pcre2_set_newline.3 \\\n  doc/pcre2_set_parens_nest_limit.3 \\\n  doc/pcre2_set_recursion_limit.3 \\\n  doc/pcre2_set_recursion_memory_management.3 \\\n  doc/pcre2_set_substitute_callout.3 \\\n  doc/pcre2_set_substitute_case_callout.3 \\\n  doc/pcre2_substitute.3 \\\n  doc/pcre2_substring_copy_byname.3 \\\n  doc/pcre2_substring_copy_bynumber.3 \\\n  doc/pcre2_substring_free.3 \\\n  doc/pcre2_substring_get_byname.3 \\\n  doc/pcre2_substring_get_bynumber.3 \\\n  doc/pcre2_substring_length_byname.3 \\\n  doc/pcre2_substring_length_bynumber.3 \\\n  doc/pcre2_substring_list_free.3 \\\n  doc/pcre2_substring_list_get.3 \\\n  doc/pcre2_substring_nametable_scan.3 \\\n  doc/pcre2_substring_number_from_name.3 \\\n  doc/pcre2api.3 \\\n  doc/pcre2build.3 \\\n  doc/pcre2callout.3 \\\n  doc/pcre2compat.3 \\\n  doc/pcre2convert.3 \\\n  doc/pcre2demo.3 \\\n  doc/pcre2grep.1 \\\n  doc/pcre2jit.3 \\\n  doc/pcre2limits.3 \\\n  doc/pcre2matching.3 \\\n  doc/pcre2partial.3 \\\n  doc/pcre2pattern.3 \\\n  doc/pcre2perform.3 \\\n  doc/pcre2posix.3 \\\n  doc/pcre2sample.3 \\\n  doc/pcre2serialize.3 \\\n  doc/pcre2syntax.3 \\\n  doc/pcre2test.1 \\\n  doc/pcre2unicode.3\n\n# The Libtool libraries to install.  We'll add to this later.\n\nlib_LTLIBRARIES =\n\n# Unit tests you want to run when people type 'make check'.\n# TESTS is for binary unit tests, check_SCRIPTS for script-based tests\n\nTESTS =\nXFAIL_TESTS =\ncheck_SCRIPTS =\ndist_noinst_SCRIPTS =\n\n# Some of the binaries we make are to be installed, and others are\n# (non-user-visible) helper programs needed to build the libraries.\n\nbin_PROGRAMS =\nnoinst_PROGRAMS =\n\n# Additional files to delete on 'make clean', 'make distclean',\n# and 'make maintainer-clean'. It turns out that the default is to delete only\n# those binaries that *this* configuration has created. If the configuration\n# has been changed, some binaries may not get automatically deleted. Therefore\n# we list them here.\n\nCLEANFILES = \\\n  pcre2_dftables \\\n  pcre2_jit_test \\\n  pcre2fuzzcheck-8 \\\n  pcre2fuzzcheck-16 \\\n  pcre2fuzzcheck-32 \\\n  pcre2demo\n\nDISTCLEANFILES = src/config.h.in~\nMAINTAINERCLEANFILES =\n\n# Additional files to bundle with the distribution, over and above what\n# the Autotools include by default.\n\nEXTRA_DIST =\n\n# These files contain additional m4 macros that are used by autoconf.\n\nEXTRA_DIST += \\\n  m4/ax_pthread.m4 \\\n  m4/pcre2_check_vscript.m4 \\\n  m4/pcre2_visibility.m4 \\\n  m4/pcre2_zos.m4\n\n# These files contain maintenance information\n\nEXTRA_DIST += \\\n  NON-AUTOTOOLS-BUILD \\\n  HACKING\n\n# These are support files for building with Bazel or Zig\n\nEXTRA_DIST += \\\n  BUILD.bazel \\\n  MODULE.bazel \\\n  build.zig\n\n# These are support files for building under VMS\n\nEXTRA_DIST += \\\n  vms/configure.com \\\n  vms/openvms_readme.txt \\\n  vms/pcre2.h_patch \\\n  vms/stdint.h\n\n# These files are usable versions of pcre2.h and config.h that are distributed\n# for the benefit of people who are building PCRE2 manually, without the\n# Autotools support.\n\nEXTRA_DIST += \\\n  src/pcre2.h.generic \\\n  src/config.h.generic\n\n# The only difference between pcre2.h.in and pcre2.h is the setting of the PCRE\n# version number. Therefore, we can create the generic version just by copying.\n\nsrc/pcre2.h.generic: src/pcre2.h.in configure.ac\n\trm -f $@\n\tcp -p src/pcre2.h $@\n\n# It is more complicated for config.h.generic. We need the version that results\n# from a default configuration so as to get all the default values for PCRE\n# configuration macros such as MATCH_LIMIT and NEWLINE. We can get this by\n# doing a configure in a temporary directory. However, some trickery is needed,\n# because the source directory may already be configured. If you just try\n# running configure in a new directory, it complains. For this reason, we move\n# config.status out of the way while doing the default configuration. The\n# resulting config.h is munged by perl to put #ifdefs round any #defines for\n# macros with values, and to #undef all boolean macros such as HAVE_xxx,\n# SUPPORT_xxx, and PCRE2_STATIC/PCRE2POSIX_SHARED. We also get rid of any\n# GCC-specific visibility settings.\n\nsrc/config.h.generic: configure.ac\n\trm -rf $@ _generic\n\tmkdir _generic\n\tcs=$(srcdir)/config.status; test ! -f $$cs || mv -f $$cs $$cs.aside\n\tcd _generic && $(abs_top_srcdir)/configure || :\n\tcs=$(srcdir)/config.status; test ! -f $$cs.aside || mv -f $$cs.aside $$cs\n\ttest -f _generic/src/config.h\n\tperl -n \\\n\t\t-e 'BEGIN{$$blank=0;}' \\\n\t\t-e 'if(/(.+?)\\s*__attribute__ \\(\\(visibility/){print\"$$1\\n\";$$blank=0;next;}' \\\n\t\t-e 'if(/LT_OBJDIR/){print\"/* This is ignored unless you are using libtool. */\\n\";}' \\\n\t\t-e 'if(/^#define\\s((?:HAVE|SUPPORT|STDC)_\\w+|PCRE2_STATIC|PCRE2POSIX_SHARED)/){print\"/* #undef $$1 */\\n\";$$blank=0;next;}' \\\n\t\t-e 'if(/^#define\\s(?!PACKAGE|VERSION)(\\w+)/){print\"#ifndef $$1\\n$$_#endif\\n\";$$blank=0;next;}' \\\n\t\t-e 'if(/^\\s*$$/){print unless $$blank; $$blank=1;} else{print;$$blank=0;}' \\\n\t\t_generic/src/config.h >$@\n\trm -rf _generic\n\nMAINTAINERCLEANFILES += src/pcre2.h.generic src/config.h.generic\n\n# These are the header files we'll install. We do not distribute pcre2.h\n# because it is generated from pcre2.h.in.\n\nnodist_include_HEADERS = src/pcre2.h\ninclude_HEADERS = src/pcre2posix.h\n\n# This is the \"config\" script.\n\nbin_SCRIPTS = pcre2-config\n\n## ---------------------------------------------------------------\n## The pcre2_dftables program is used to rebuild character tables before\n## compiling PCRE2, if --enable-rebuild-chartables is specified. It is not an\n## installed program. The default (when --enable-rebuild-chartables is not\n## specified) is to copy a distributed set of tables that are defined for ASCII\n## code. In this case, pcre2_dftables is not needed.\n\nif WITH_REBUILD_CHARTABLES\nnoinst_PROGRAMS += pcre2_dftables\npcre2_dftables_SOURCES = src/pcre2_dftables.c\nsrc/pcre2_chartables.c: pcre2_dftables$(EXEEXT)\n\trm -f $@\n\t./pcre2_dftables$(EXEEXT) $@\nelse\nif WITH_EBCDIC\nif WITH_EBCDIC_NL25\nsrc/pcre2_chartables.c: $(srcdir)/src/pcre2_chartables.c.ebcdic-1047-nl25\n\trm -f $@\n\t$(LN_S) $(abs_srcdir)/src/pcre2_chartables.c.ebcdic-1047-nl25 $(abs_builddir)/src/pcre2_chartables.c\nelse # WITH_EBCDIC_NL25\nsrc/pcre2_chartables.c: $(srcdir)/src/pcre2_chartables.c.ebcdic-1047-nl15\n\trm -f $@\n\t$(LN_S) $(abs_srcdir)/src/pcre2_chartables.c.ebcdic-1047-nl15 $(abs_builddir)/src/pcre2_chartables.c\nendif # WITH_EBCDIC_NL25\nelse # WITH_EBCDIC\nsrc/pcre2_chartables.c: $(srcdir)/src/pcre2_chartables.c.dist\n\trm -f $@\n\t$(LN_S) $(abs_srcdir)/src/pcre2_chartables.c.dist $(abs_builddir)/src/pcre2_chartables.c\nendif # WITH_EBCDIC\nendif # WITH_REBUILD_CHARTABLES\n\nBUILT_SOURCES = src/pcre2_chartables.c\nNODIST_SOURCES = src/pcre2_chartables.c\n\n## Define the list of common sources, then arrange to build whichever of the\n## 8-, 16-, or 32-bit libraries are configured.\n\nCOMMON_SOURCES = \\\n  src/pcre2_auto_possess.c \\\n  src/pcre2_chkdint.c \\\n  src/pcre2_compile.c \\\n  src/pcre2_compile.h \\\n  src/pcre2_compile_cgroup.c \\\n  src/pcre2_compile_class.c \\\n  src/pcre2_config.c \\\n  src/pcre2_context.c \\\n  src/pcre2_convert.c \\\n  src/pcre2_dfa_match.c \\\n  src/pcre2_error.c \\\n  src/pcre2_extuni.c \\\n  src/pcre2_find_bracket.c \\\n  src/pcre2_internal.h \\\n  src/pcre2_intmodedep.h \\\n  src/pcre2_jit_char_inc.h \\\n  src/pcre2_jit_compile.c \\\n  src/pcre2_jit_match_inc.h \\\n  src/pcre2_jit_misc_inc.h \\\n  src/pcre2_jit_simd_inc.h \\\n  src/pcre2_maketables.c \\\n  src/pcre2_match.c \\\n  src/pcre2_match_data.c \\\n  src/pcre2_match_next.c \\\n  src/pcre2_newline.c \\\n  src/pcre2_ord2utf.c \\\n  src/pcre2_pattern_info.c \\\n  src/pcre2_printint_inc.h \\\n  src/pcre2_script_run.c \\\n  src/pcre2_serialize.c \\\n  src/pcre2_string_utils.c \\\n  src/pcre2_study.c \\\n  src/pcre2_substitute.c \\\n  src/pcre2_substring.c \\\n  src/pcre2_tables.c \\\n  src/pcre2_ucd.c \\\n  src/pcre2_ucp.h \\\n  src/pcre2_ucptables_inc.h \\\n  src/pcre2_util.h \\\n  src/pcre2_valid_utf.c \\\n  src/pcre2_xclass.c\n\nif WITH_PCRE2_8\nlib_LTLIBRARIES += libpcre2-8.la\nlibpcre2_8_la_SOURCES = \\\n  $(COMMON_SOURCES)\nnodist_libpcre2_8_la_SOURCES = \\\n  $(NODIST_SOURCES)\nlibpcre2_8_la_CFLAGS = \\\n  -DPCRE2_CODE_UNIT_WIDTH=8 \\\n  $(VISIBILITY_CFLAGS) \\\n  $(CET_CFLAGS) \\\n  $(AM_CFLAGS)\nlibpcre2_8_la_LIBADD =\nendif # WITH_PCRE2_8\n\nif WITH_PCRE2_16\nlib_LTLIBRARIES += libpcre2-16.la\nlibpcre2_16_la_SOURCES = \\\n  $(COMMON_SOURCES)\nnodist_libpcre2_16_la_SOURCES = \\\n  $(NODIST_SOURCES)\nlibpcre2_16_la_CFLAGS = \\\n  -DPCRE2_CODE_UNIT_WIDTH=16 \\\n  $(VISIBILITY_CFLAGS) \\\n  $(CET_CFLAGS) \\\n  $(AM_CFLAGS)\nlibpcre2_16_la_LIBADD =\nendif # WITH_PCRE2_16\n\nif WITH_PCRE2_32\nlib_LTLIBRARIES += libpcre2-32.la\nlibpcre2_32_la_SOURCES = \\\n  $(COMMON_SOURCES)\nnodist_libpcre2_32_la_SOURCES = \\\n  $(NODIST_SOURCES)\nlibpcre2_32_la_CFLAGS = \\\n  -DPCRE2_CODE_UNIT_WIDTH=32 \\\n  $(VISIBILITY_CFLAGS) \\\n  $(CET_CFLAGS) \\\n  $(AM_CFLAGS)\nlibpcre2_32_la_LIBADD =\nendif # WITH_PCRE2_32\n\n# The pcre2_chartables.c.dist file is the default version of\n# pcre2_chartables.c, used unless --enable-rebuild-chartables is specified.\n\nEXTRA_DIST += \\\n  src/pcre2_chartables.c.dist \\\n  src/pcre2_chartables.c.ebcdic-1047-nl15 \\\n  src/pcre2_chartables.c.ebcdic-1047-nl25\nCLEANFILES += src/pcre2_chartables.c\n\n# The JIT compiler lives in a separate directory, but its files are #included\n# when pcre2_jit_compile.c is processed, so they must be distributed.\n\nEXTRA_DIST += \\\n  deps/sljit/LICENSE \\\n  deps/sljit/README.md \\\n  deps/sljit/sljit_src/sljitConfig.h \\\n  deps/sljit/sljit_src/sljitConfigCPU.h \\\n  deps/sljit/sljit_src/sljitConfigInternal.h \\\n  deps/sljit/sljit_src/sljitLir.c \\\n  deps/sljit/sljit_src/sljitLir.h \\\n  deps/sljit/sljit_src/sljitNativeARM_32.c \\\n  deps/sljit/sljit_src/sljitNativeARM_64.c \\\n  deps/sljit/sljit_src/sljitNativeARM_T2_32.c \\\n  deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c \\\n  deps/sljit/sljit_src/sljitNativeMIPS_32.c \\\n  deps/sljit/sljit_src/sljitNativeMIPS_64.c \\\n  deps/sljit/sljit_src/sljitNativeMIPS_common.c \\\n  deps/sljit/sljit_src/sljitNativePPC_32.c \\\n  deps/sljit/sljit_src/sljitNativePPC_64.c \\\n  deps/sljit/sljit_src/sljitNativePPC_common.c \\\n  deps/sljit/sljit_src/sljitNativeRISCV_32.c \\\n  deps/sljit/sljit_src/sljitNativeRISCV_64.c \\\n  deps/sljit/sljit_src/sljitNativeRISCV_common.c \\\n  deps/sljit/sljit_src/sljitNativeS390X.c \\\n  deps/sljit/sljit_src/sljitNativeX86_32.c \\\n  deps/sljit/sljit_src/sljitNativeX86_64.c \\\n  deps/sljit/sljit_src/sljitNativeX86_common.c \\\n  deps/sljit/sljit_src/sljitSerialize.c \\\n  deps/sljit/sljit_src/sljitUtils.c \\\n  deps/sljit/sljit_src/allocator_src/sljitExecAllocatorApple.c \\\n  deps/sljit/sljit_src/allocator_src/sljitExecAllocatorCore.c \\\n  deps/sljit/sljit_src/allocator_src/sljitExecAllocatorFreeBSD.c \\\n  deps/sljit/sljit_src/allocator_src/sljitExecAllocatorPosix.c \\\n  deps/sljit/sljit_src/allocator_src/sljitExecAllocatorWindows.c \\\n  deps/sljit/sljit_src/allocator_src/sljitProtExecAllocatorNetBSD.c \\\n  deps/sljit/sljit_src/allocator_src/sljitProtExecAllocatorPosix.c \\\n  deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c \\\n  deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorWindows.c\n\nif WITH_PCRE2_8\nlibpcre2_8_la_LDFLAGS = $(EXTRA_LIBPCRE2_8_LDFLAGS)\nendif # WITH_PCRE2_8\nif WITH_PCRE2_16\nlibpcre2_16_la_LDFLAGS = $(EXTRA_LIBPCRE2_16_LDFLAGS)\nendif # WITH_PCRE2_16\nif WITH_PCRE2_32\nlibpcre2_32_la_LDFLAGS = $(EXTRA_LIBPCRE2_32_LDFLAGS)\nendif # WITH_PCRE2_32\n\nif WITH_VALGRIND\nif WITH_PCRE2_8\nlibpcre2_8_la_CFLAGS += $(VALGRIND_CFLAGS)\nendif # WITH_PCRE2_8\nif WITH_PCRE2_16\nlibpcre2_16_la_CFLAGS += $(VALGRIND_CFLAGS)\nendif # WITH_PCRE2_16\nif WITH_PCRE2_32\nlibpcre2_32_la_CFLAGS += $(VALGRIND_CFLAGS)\nendif # WITH_PCRE2_32\nendif # WITH_VALGRIND\n\nif WITH_GCOV\nif WITH_PCRE2_8\nlibpcre2_8_la_CFLAGS += $(GCOV_CFLAGS)\nendif # WITH_PCRE2_8\nif WITH_PCRE2_16\nlibpcre2_16_la_CFLAGS += $(GCOV_CFLAGS)\nendif # WITH_PCRE2_16\nif WITH_PCRE2_32\nlibpcre2_32_la_CFLAGS += $(GCOV_CFLAGS)\nendif # WITH_PCRE2_32\nendif # WITH_GCOV\n\n## A version of the 8-bit library that has a POSIX API.\n\nif WITH_PCRE2_8\nlib_LTLIBRARIES += libpcre2-posix.la\nlibpcre2_posix_la_SOURCES = src/pcre2posix.c\nlibpcre2_posix_la_CFLAGS = \\\n  -DPCRE2_CODE_UNIT_WIDTH=8 @PCRE2POSIX_CFLAG@ \\\n  $(VISIBILITY_CFLAGS) $(AM_CFLAGS)\nlibpcre2_posix_la_LDFLAGS = $(EXTRA_LIBPCRE2_POSIX_LDFLAGS)\nlibpcre2_posix_la_LIBADD = libpcre2-8.la\nif WITH_GCOV\nlibpcre2_posix_la_CFLAGS += $(GCOV_CFLAGS)\nendif # WITH_GCOV\nendif # WITH_PCRE2_8\n\n## Build pcre2grep and optional fuzzer stuff if the 8-bit library is enabled\n\nif WITH_PCRE2_8\nbin_PROGRAMS += pcre2grep\npcre2grep_SOURCES = src/pcre2grep.c\npcre2grep_CFLAGS = $(AM_CFLAGS)\npcre2grep_LDADD = $(LIBZ) $(LIBBZ2)\npcre2grep_LDADD += libpcre2-8.la\nif WITH_GCOV\npcre2grep_CFLAGS += $(GCOV_CFLAGS)\npcre2grep_LDADD += $(GCOV_LIBS)\nendif # WITH_GCOV\nendif # WITH_PCRE2_8\n\n## If fuzzer support is enabled, build a non-distributed library containing the\n## fuzzing function. Also build the standalone checking binary from the same\n## source but using -DSTANDALONE.\n\nif WITH_FUZZ_SUPPORT\nnoinst_LIBRARIES =\nif WITH_PCRE2_8\nnoinst_LIBRARIES += .libs/libpcre2-fuzzsupport.a\n_libs_libpcre2_fuzzsupport_a_SOURCES = src/pcre2_fuzzsupport.c\n_libs_libpcre2_fuzzsupport_a_CFLAGS = $(AM_CFLAGS)\n_libs_libpcre2_fuzzsupport_a_LIBADD =\n\nnoinst_PROGRAMS += pcre2fuzzcheck-8\npcre2fuzzcheck_8_SOURCES = src/pcre2_fuzzsupport.c\npcre2fuzzcheck_8_CFLAGS = -DSTANDALONE $(AM_CFLAGS)\npcre2fuzzcheck_8_LDADD = libpcre2-8.la\nif WITH_GCOV\npcre2fuzzcheck_8_CFLAGS += $(GCOV_CFLAGS)\npcre2fuzzcheck_8_LDADD += $(GCOV_LIBS)\nendif # WITH_GCOV\nendif # WITH_PCRE2_8\n\nif WITH_PCRE2_16\nnoinst_LIBRARIES += .libs/libpcre2-fuzzsupport-16.a\n_libs_libpcre2_fuzzsupport_16_a_SOURCES = src/pcre2_fuzzsupport.c\n_libs_libpcre2_fuzzsupport_16_a_CFLAGS = $(AM_CFLAGS) -DPCRE2_CODE_UNIT_WIDTH=16\n_libs_libpcre2_fuzzsupport_16_a_LIBADD =\n\nnoinst_PROGRAMS += pcre2fuzzcheck-16\npcre2fuzzcheck_16_SOURCES = src/pcre2_fuzzsupport.c\npcre2fuzzcheck_16_CFLAGS = -DSTANDALONE $(AM_CFLAGS) -DPCRE2_CODE_UNIT_WIDTH=16\npcre2fuzzcheck_16_LDADD = libpcre2-16.la\nif WITH_GCOV\npcre2fuzzcheck_16_CFLAGS += $(GCOV_CFLAGS)\npcre2fuzzcheck_16_LDADD += $(GCOV_LIBS)\nendif # WITH_GCOV\nendif # WITH_PCRE2_16\n\nif WITH_PCRE2_32\nnoinst_LIBRARIES += .libs/libpcre2-fuzzsupport-32.a\n_libs_libpcre2_fuzzsupport_32_a_SOURCES = src/pcre2_fuzzsupport.c\n_libs_libpcre2_fuzzsupport_32_a_CFLAGS = $(AM_CFLAGS) -DPCRE2_CODE_UNIT_WIDTH=32\n_libs_libpcre2_fuzzsupport_32_a_LIBADD =\n\nnoinst_PROGRAMS += pcre2fuzzcheck-32\npcre2fuzzcheck_32_SOURCES = src/pcre2_fuzzsupport.c\npcre2fuzzcheck_32_CFLAGS = -DSTANDALONE $(AM_CFLAGS) -DPCRE2_CODE_UNIT_WIDTH=32\npcre2fuzzcheck_32_LDADD = libpcre2-32.la\nif WITH_GCOV\npcre2fuzzcheck_32_CFLAGS += $(GCOV_CFLAGS)\npcre2fuzzcheck_32_LDADD += $(GCOV_LIBS)\nendif # WITH_GCOV\nendif # WITH_PCRE2_32\n\nendif # WITH_FUZZ_SUPPORT\n\n## -------- Testing ----------\n\n## If the 8-bit library is enabled, build the POSIX wrapper test program and\n## arrange for it to run.\n\nif WITH_PCRE2_8\nTESTS += pcre2posix_test\nnoinst_PROGRAMS += pcre2posix_test\npcre2posix_test_SOURCES = src/pcre2posix_test.c\npcre2posix_test_CFLAGS = $(AM_CFLAGS) @PCRE2POSIX_CFLAG@\npcre2posix_test_LDADD = libpcre2-posix.la libpcre2-8.la\nendif # WITH_PCRE2_8\n\n## If JIT support is enabled, arrange for the JIT test program to run.\n\nif WITH_JIT\nTESTS += pcre2_jit_test\nnoinst_PROGRAMS += pcre2_jit_test\npcre2_jit_test_SOURCES = src/pcre2_jit_test.c\npcre2_jit_test_CFLAGS = $(AM_CFLAGS)\npcre2_jit_test_LDADD =\nif WITH_PCRE2_8\npcre2_jit_test_LDADD += libpcre2-8.la\nendif # WITH_PCRE2_8\nif WITH_PCRE2_16\npcre2_jit_test_LDADD += libpcre2-16.la\nendif # WITH_PCRE2_16\nif WITH_PCRE2_32\npcre2_jit_test_LDADD += libpcre2-32.la\nendif # WITH_PCRE2_32\nif WITH_GCOV\npcre2_jit_test_CFLAGS += $(GCOV_CFLAGS)\npcre2_jit_test_LDADD += $(GCOV_LIBS)\nendif # WITH_GCOV\nendif # WITH_JIT\n\n# Build the general pcre2test program.\n\nbin_PROGRAMS += pcre2test\npcre2test_SOURCES = src/pcre2test.c src/pcre2test_inc.h\npcre2test_CFLAGS = $(AM_CFLAGS)\npcre2test_LDADD = $(LIBREADLINE)\n\nif WITH_PCRE2_8\npcre2test_LDADD += libpcre2-8.la libpcre2-posix.la\nendif # WITH_PCRE2_8\n\nif WITH_PCRE2_16\npcre2test_LDADD += libpcre2-16.la\nendif # WITH_PCRE2_16\n\nif WITH_PCRE2_32\npcre2test_LDADD += libpcre2-32.la\nendif # WITH_PCRE2_32\n\nif WITH_VALGRIND\npcre2test_CFLAGS += $(VALGRIND_CFLAGS)\nendif # WITH_VALGRIND\n\nif WITH_GCOV\npcre2test_CFLAGS += $(GCOV_CFLAGS)\npcre2test_LDADD += $(GCOV_LIBS)\nendif # WITH_GCOV\n\n## The main library tests. Each test is a binary plus a script that runs that\n## binary in various ways. We install these test binaries in case folks find it\n## helpful. The two .bat files are for running the tests under Windows.\n\nTESTS += RunTest\nEXTRA_DIST += RunTest.bat\ndist_noinst_SCRIPTS += RunTest\n\n## When the 8-bit library is configured, pcre2grep will have been built.\n\nif WITH_PCRE2_8\nTESTS += RunGrepTest\nEXTRA_DIST += RunGrepTest.bat\ndist_noinst_SCRIPTS += RunGrepTest\nif WITH_EBCDIC\nXFAIL_TESTS += RunGrepTest\nendif # WITH_EBCDIC\nendif # WITH_PCRE2_8\n\n## Distribute all the test data files\n\nEXTRA_DIST += \\\n  testdata/grepbinary \\\n  testdata/grepfilelist \\\n  testdata/grepinput \\\n  testdata/grepinput3 \\\n  testdata/grepinput8 \\\n  testdata/grepinputBad8 \\\n  testdata/grepinputBad8_Trail \\\n  testdata/grepinputC.bz2 \\\n  testdata/grepinputC.gz \\\n  testdata/grepinputM \\\n  testdata/grepinputUN \\\n  testdata/grepinputv \\\n  testdata/grepinputx \\\n  testdata/greplist \\\n  testdata/grepnot.bz2 \\\n  testdata/grepoutput \\\n  testdata/grepoutput8 \\\n  testdata/grepoutputC \\\n  testdata/grepoutputCN \\\n  testdata/grepoutputCNU \\\n  testdata/grepoutputCU \\\n  testdata/grepoutputCbz2 \\\n  testdata/grepoutputCgz \\\n  testdata/grepoutputN \\\n  testdata/grepoutputUN \\\n  testdata/greppatN4 \\\n  testdata/testbtables \\\n  testdata/testinput1 \\\n  testdata/testinput2 \\\n  testdata/testinput3 \\\n  testdata/testinput4 \\\n  testdata/testinput5 \\\n  testdata/testinput6 \\\n  testdata/testinput7 \\\n  testdata/testinput8 \\\n  testdata/testinput9 \\\n  testdata/testinput10 \\\n  testdata/testinput11 \\\n  testdata/testinput12 \\\n  testdata/testinput13 \\\n  testdata/testinput14 \\\n  testdata/testinput15 \\\n  testdata/testinput16 \\\n  testdata/testinput17 \\\n  testdata/testinput18 \\\n  testdata/testinput19 \\\n  testdata/testinput20 \\\n  testdata/testinput21 \\\n  testdata/testinput22 \\\n  testdata/testinput23 \\\n  testdata/testinput24 \\\n  testdata/testinput25 \\\n  testdata/testinput26 \\\n  testdata/testinput27 \\\n  testdata/testinput28 \\\n  testdata/testinput29 \\\n  testdata/testinputheap \\\n  testdata/testoutput1 \\\n  testdata/testoutput2 \\\n  testdata/testoutput3 \\\n  testdata/testoutput3A \\\n  testdata/testoutput3B \\\n  testdata/testoutput4 \\\n  testdata/testoutput5 \\\n  testdata/testoutput6 \\\n  testdata/testoutput7 \\\n  testdata/testoutput8-16-2 \\\n  testdata/testoutput8-16-4 \\\n  testdata/testoutput8-32-4 \\\n  testdata/testoutput8-8-2 \\\n  testdata/testoutput8-8-3 \\\n  testdata/testoutput8-8-4 \\\n  testdata/testoutput9 \\\n  testdata/testoutput10 \\\n  testdata/testoutput11-16 \\\n  testdata/testoutput11-32 \\\n  testdata/testoutput12-16 \\\n  testdata/testoutput12-32 \\\n  testdata/testoutput13 \\\n  testdata/testoutput14-16 \\\n  testdata/testoutput14-32 \\\n  testdata/testoutput14-8 \\\n  testdata/testoutput15 \\\n  testdata/testoutput16 \\\n  testdata/testoutput17 \\\n  testdata/testoutput18 \\\n  testdata/testoutput19 \\\n  testdata/testoutput20 \\\n  testdata/testoutput21 \\\n  testdata/testoutput22-16 \\\n  testdata/testoutput22-32 \\\n  testdata/testoutput22-8 \\\n  testdata/testoutput23 \\\n  testdata/testoutput24 \\\n  testdata/testoutput25 \\\n  testdata/testoutput26 \\\n  testdata/testoutput27 \\\n  testdata/testoutput28 \\\n  testdata/testoutput29 \\\n  testdata/testoutputheap-16 \\\n  testdata/testoutputheap-32 \\\n  testdata/testoutputheap-8 \\\n  testdata/valgrind-jit.supp \\\n  testdata/wintestinput3 \\\n  testdata/wintestoutput3 \\\n  perltest.sh\n\n# RunTest and RunGrepTest should clean up after themselves, but just in case\n# they don't, add their working files to CLEANFILES.\n\nCLEANFILES += \\\n  testSinput \\\n  testSoutput \\\n  test3input \\\n  test3output \\\n  test3outputA \\\n  test3outputB \\\n  testtry \\\n  teststdout \\\n  teststderr \\\n  teststderrgrep \\\n  testtemp1grep \\\n  testtemp2grep \\\n  testtrygrep \\\n  testNinputgrep\n\ntestoutput-clean:\n\t-rm -rf testoutput8 testoutput8-jit testoutput8-dfa\n\t-rm -rf testoutput16 testoutput16-jit testoutput16-dfa\n\t-rm -rf testoutput32 testoutput32-jit testoutput32-dfa\n\nCLEAN_LOCAL_TARGETS += testoutput-clean\nPHONY_TARGETS += testoutput-clean\n\n## ------------ End of testing -------------\n\n\n# PCRE2 demonstration program. Not built automatically. The point is that the\n# users should build it themselves. So just distribute the source.\n\nEXTRA_DIST += src/pcre2demo.c\n\n\n# We have .pc files for pkg-config users.\n\npkgconfigdir = $(libdir)/pkgconfig\npkgconfig_DATA =\n\nif WITH_PCRE2_8\npkgconfig_DATA += libpcre2-8.pc libpcre2-posix.pc\nendif\n\nif WITH_PCRE2_16\npkgconfig_DATA += libpcre2-16.pc\nendif\n\nif WITH_PCRE2_32\npkgconfig_DATA += libpcre2-32.pc\nendif\n\n\n# Symbol version template files for use with GNU and Sun ld.\n\nEXTRA_DIST += \\\n  src/libpcre2-8.sym.in src/libpcre2-16.sym.in src/libpcre2-32.sym.in \\\n  src/libpcre2-posix.sym.in\n\n\n# gcov/lcov code coverage reporting\n#\n# Coverage reporting targets:\n#\n# coverage: Create a coverage report from 'make check'\n# coverage-baseline: Capture baseline coverage information\n# coverage-reset: This zeros the coverage counters only\n# coverage-report: This creates the coverage report only\n# coverage-clean-report: This removes the generated coverage report\n#   without cleaning the coverage data itself\n# coverage-clean-data: This removes the captured coverage data without\n#   removing the coverage files created at compile time (*.gcno)\n# coverage-clean: This cleans all coverage data including the generated\n#   coverage report.\n\nif WITH_GCOV\nCOVERAGE_TEST_NAME = $(PACKAGE)\nCOVERAGE_NAME = $(PACKAGE)-$(VERSION)\nCOVERAGE_OUTPUT_FILE = $(COVERAGE_NAME)-coverage.info\nCOVERAGE_OUTPUT_DIR = $(COVERAGE_NAME)-coverage\nCOVERAGE_LCOV_EXTRA_FLAGS =\nCOVERAGE_GENHTML_EXTRA_FLAGS =\n\ncoverage_quiet = $(coverage_quiet_$(V))\ncoverage_quiet_ = $(coverage_quiet_$(AM_DEFAULT_VERBOSITY))\ncoverage_quiet_0 = --quiet\n\ncoverage-check: all\n\t-$(MAKE) $(AM_MAKEFLAGS) -k check\n\ncoverage-baseline:\n\t$(LCOV) $(coverage_quiet) \\\n\t\t--directory $(top_builddir) \\\n\t\t--output-file \"$(COVERAGE_OUTPUT_FILE)\" \\\n\t\t--capture \\\n\t\t--initial\n\ncoverage-report:\n\t$(LCOV) $(coverage_quiet) \\\n\t\t--directory $(top_builddir) \\\n\t\t--capture \\\n\t\t--output-file \"$(COVERAGE_OUTPUT_FILE).tmp\" \\\n\t\t--test-name \"$(COVERAGE_TEST_NAME)\" \\\n\t\t--no-checksum \\\n\t\t--compat-libtool \\\n\t\t$(COVERAGE_LCOV_EXTRA_FLAGS)\n\t$(LCOV) $(coverage_quiet) \\\n\t\t--directory $(top_builddir) \\\n\t\t--output-file \"$(COVERAGE_OUTPUT_FILE)\" \\\n\t\t--remove \"$(COVERAGE_OUTPUT_FILE).tmp\" \\\n\t\t\"/tmp/*\" \\\n\t\t\"/usr/include/*\" \\\n\t\t\"$(includedir)/*\"\n\t-@rm -f \"$(COVERAGE_OUTPUT_FILE).tmp\"\n\tLANG=C $(GENHTML) $(coverage_quiet) \\\n\t\t--prefix $(top_builddir) \\\n\t\t--output-directory \"$(COVERAGE_OUTPUT_DIR)\" \\\n\t\t--title \"$(PACKAGE) $(VERSION) Code Coverage Report\" \\\n\t\t--show-details \"$(COVERAGE_OUTPUT_FILE)\" \\\n\t\t--legend \\\n\t\t$(COVERAGE_GENHTML_EXTRA_FLAGS)\n\t@echo \"Code coverage report written to file://$(abs_builddir)/$(COVERAGE_OUTPUT_DIR)/index.html\"\n\ncoverage-reset:\n\t-$(LCOV) $(coverage_quiet) --zerocounters --directory $(top_builddir)\n\ncoverage-clean-report:\n\t-rm -f \"$(COVERAGE_OUTPUT_FILE)\" \"$(COVERAGE_OUTPUT_FILE).tmp\"\n\t-rm -rf \"$(COVERAGE_OUTPUT_DIR)\"\n\ncoverage-clean-data:\n\t-find $(top_builddir) -name \"*.gcda\" -delete\n\ncoverage-clean: coverage-reset coverage-clean-report coverage-clean-data\n\t-find $(top_builddir) -name \"*.gcno\" -delete\n\ncoverage-distclean: coverage-clean\n\ncoverage: coverage-reset coverage-baseline coverage-check coverage-report\n\nCLEAN_LOCAL_TARGETS += coverage-clean\nDISTCLEAN_LOCAL_TARGETS += coverage-distclean\nPHONY_TARGETS += coverage coverage-baseline coverage-check coverage-report coverage-reset coverage-clean-report coverage-clean-data coverage-clean coverage-distclean\n\nelse\n\ncoverage:\n\t@echo \"Configuring with --enable-coverage is required to generate code coverage report.\"\n\n# Without coverage support, still arrange for 'make distclean' to get rid of\n# any coverage files that may have been left from a different configuration.\n\nDISTCLEANFILES += src/*.gcda src/*.gcno\n\ncoverage-distclean:\n\trm -rf $(PACKAGE)-$(VERSION)-coverage*\n\nDISTCLEAN_LOCAL_TARGETS += coverage-distclean\nPHONY_TARGETS += coverage-distclean\n\nendif # WITH_GCOV\n\n## CMake support\n\nEXTRA_DIST += \\\n  cmake/COPYING-CMAKE-SCRIPTS \\\n  cmake/FindEditline.cmake \\\n  cmake/FindReadline.cmake \\\n  cmake/pcre2-config.cmake.in \\\n  cmake/PCRE2CheckVscript.cmake \\\n  cmake/PCRE2UseSystemExtensions.cmake \\\n  cmake/PCRE2WarningAsError.cmake \\\n  src/config-cmake.h.in \\\n  CMakeLists.txt\n\n## Set the special make and Automake targets. We could very easily simply\n## redefine these targets to append prerequisites to them, rather than\n## collecting the prerequisites in variables. However, there is an annoying\n## Automake behaviour where it emits a warning if a target has prerequisites\n## appended in a conditional block.\n\nclean-local: $(CLEAN_LOCAL_TARGETS)\ndistclean-local: $(DISTCLEAN_LOCAL_TARGETS)\n.PHONY: $(PHONY_TARGETS)\n\n## end Makefile.am\n"
  },
  {
    "path": "NEWS",
    "content": "News about PCRE2 releases\n-------------------------\n\nVersion 10.48 xx-xxx-2026\n-------------------------\n\nIn development. A list of potential items for inclusion is here:\nhttps://github.com/PCRE2Project/pcre2/milestone/5\n\nIf you are reading this, contributions are welcome!\n\n\nVersion 10.47 21-October-2025\n-----------------------------\n\nThis is a regular semi-annual release, incorporating a few new features and\nseveral maintenance and build improvements.\n\nOnly changes to behaviour, changes to the API, and other significant changes\nare described here. Please see the ChangeLog and Git log for further details.\n\n* (Powerful new feature) Pattern recursion of the form\n\"(?1(GROUP_NAME_OR_NUM,...))\" acts as a subroutine call which additionally\nreturns the listed capturing groups to the calling context.\n\n* (Significant bugfix) Fixed a crash in pcre2_callout_enumerate() which is\neasily reachable on any pattern that contains a Unicode character class. If your\napplication uses this function, please read the details for this change and\nevaluate its severity for your application.\n\n* (Build change) There are now linker scripts to enable symbol versioning for\nthe PCRE2 dynamic libraries. Downstream Linux distributions may make use of\nthis, or disable it with the new Autoconf `--disable-symvers` and CMake\n`-DPCRE2_SYMVERS` options. Linux, Solaris, and FreeBSD (GNU ld, LLVM lld, and\nSolaris ld) are tested and supported.\n\n* (New API function) Added pcre2_next_match(). This function makes it both\nsimpler and safer for clients to iterate over all matches in a subject. The\ndocumentation in `pcre2api` also provides improved guidance in the section\n\"Iterating over all matches\".\n\n* (Minor API addition) Added the PCRE2_CONFIG_EFFECTIVE_LINKSIZE option to\npcre2_config().\n\n* (Minor replacement syntax extension) Added support for $+ replacement to\npcre2_substitute().\n\n* (Build change) Modernize the CMake build files, to use the\n\"$<BUILD_INTERFACE:...>\", \"$<INSTALL_INTERFACE:...>\" and \"install(EXPORT...)\"\nexpressions to export the PCRE2 targets.\n\n\nVersion 10.46 27-August-2025\n----------------------------\n\nThis is a security-only release, to address CVE-2025-58050.\n\nCompared to 10.45, this release has only a minimal code change to prevent a\nread-past-the-end memory error, of arbitrary length. An attacker-controlled\nregex pattern is required, and it cannot be triggered by providing crafted\nsubject (match) text. The (*ACCEPT) and (*scs:) pattern features must be used\ntogether.\n\nRelease 10.44 and earlier are not affected.\n\nThis could have implications of denial-of-service or information disclosure,\nand could potentially be used to escalate other vulnerabilities in a system\n(such as information disclosure being used to escalate the severity of an\nunrelated bug in another system).\n\n\nVersion 10.45 05-February-2025\n------------------------------\n\nThis is a comparatively large release, incorporating new features, some\nbugfixes, and a few changes with slight backwards compatibility implications.\nPlease see the ChangeLog and Git log for further details.\n\nOnly changes to behaviour, changes to the API, and major changes to the pattern\nsyntax are described here.\n\nThis release is the first to be available as a (signed) Git tag, or\nalternatively as a (signed) tarball of the Git tag.\n\nThis is also the first release to be made by the new maintainers of PCRE2, and\nwe would like to thank Philip Hazel, creator and maintainer of PCRE and PCRE2.\n\n* (Git change) The sljit project has been split out into a separate Git\n  repository. Git users must now run `git submodule init; git submodule update`\n  after a Git checkout.\n\n* (Behaviour change) Update Unicode support to UCD 16.\n\n* (Match behaviour change) Case-insensitive matching of Unicode properties\n  Ll, Lt, and Lu has been changed to match Perl. Previously, /\\p{Ll}/i would\n  match only lower-case characters (even though case-insensitive matching was\n  specified). This also affects case-insensitive matching of POSIX classes such\n  as [:lower:].\n\n* (Minor match behaviour change) Case-insensitive matching of backreferences now\n  respects the PCRE2_EXTRA_CASELESS_RESTRICT option.\n\n* (Minor pattern syntax change) Parsing of the \\x escape is stricter, and is\n  no longer parsed as an escape for the NUL character if not followed by '{' or\n  a hexadecimal digit. Use \\x00 instead.\n\n* (Major new feature) Add a new feature called scan substring. This is a new\n  type of assertion which matches the content of a capturing block to a\n  sub-pattern.\n\n  Example: to find a word that contains the rare (in English) sequence of\n  letters \"rh\" not at the start:\n\n      \\b(\\w++)(*scan_substring:(1).+rh)\n\n  The first group captures a word which is then scanned by the\n  (*scan_substring:(1) ... ) assertion, which tests whether the pattern \".+rh\"\n  matches the capture group \"(1)\".\n\n* (Major new feature) Add support for UTS#18 compatible character classes,\n  using the new option PCRE2_ALT_EXTENDED_CLASS. This adds '[' as a\n  metacharacter within character classes and the operators '&&', '--' and '~~',\n  allowing subtractions and intersections of character classes to be easily\n  expressed.\n\n  Example: to match Thai or Greek letters (but not letters or other characters\n  in those scripts), use [\\p{L}&&[\\p{Thai}||\\p{Greek}]].\n\n* (Major new feature) Add support for Perl-style extended character classes,\n  using the syntax (?[...]). This also allows expressing subtractions and\n  intersections of character classes, but using a different syntax to UTS#18.\n\n  Example: to match Thai or Greek letters (but not letters or other characters\n  in those scripts), use (?[\\p{L} & (\\p{Thai} + \\p{Greek})]).\n\n* (Minor feature) Significant improvements to the character class match engine.\n  Compiled character classes are now more compact, and have faster matching\n  for large or complex character sets, using binary search through the set.\n\n* JIT compilation now fails with the new error code PCRE2_ERROR_JIT_UNSUPPORTED\n  for patterns which use features not supported by the JIT compiler.\n\n* (Minor feature) New options PCRE2_EXTRA_NO_BS0 (disallow \\0 as an escape for\n  the NUL character); PCRE2_EXTRA_PYTHON_OCTAL (use Python disambiguation rules\n  for deciding whether \\12 is a backreference or an octal escape);\n  PCRE2_EXTRA_NEVER_CALLOUT (disable callout syntax entirely);\n  PCRE2_EXTRA_TURKISH_CASING (use Turkish rules for case-insensitive matching).\n\n* (Minor feature) Add new API function pcre2_set_optimize() for controlling\n  which optimizations are enabled.\n\n* (Minor new features) A variety of extensions have been made to\n  pcre2_substitute() and its syntax for replacement strings. These now support:\n  \\123 octal escapes; titlecasing \\u\\L; \\1 backreferences; \\g<1> and $<NAME>\n  backreferences; $& $` $' and $_; new function\n  pcre2_set_substitute_case_callout() to allow locale-aware case transformation.\n\n\nVersion 10.44 07-June-2024\n--------------------------\n\nThis is mostly a bug-fix and tidying release. There is one new function, to set\na maximum size for a compiled pattern. The maximum name length for groups is\nincreased to 128. Some auxiliary files for building under VMS are added.\n\n\nVersion 10.43 16-February-2024\n------------------------------\n\nThere are quite a lot of changes in this release (see ChangeLog and Git log for\na list). Those that are not bugfixes or code tidies are:\n\n* The JIT code no longer supports ARMv5 architecture.\n\n* A new function pcre2_get_match_data_heapframes_size() for finer heap control.\n\n* New option flags to restrict the interaction between ASCII and non-ASCII\n  characters for caseless matching and \\d and friends. There are also new\n  pattern constructs to control these flags from within a pattern.\n\n* Upgrade to Unicode 15.0.0.\n\n* Treat a NULL pattern with zero length as an empty string.\n\n* Added support for limited-length variable-length lookbehind assertions, with\n  a default maximum length of 255 characters (same as Perl) but with a function\n  to adjust the limit.\n\n* Support for LoongArch in JIT.\n\n* Perl changed the meaning of (for example) {,3} which did not used to be\n  recognized as a quantifier. Now it means {0,3} and PCRE2 has also changed.\n  Note that {,} is still not a quantifier.\n\n* Following Perl, allow spaces and tabs after { and before } in all Perl-\n  compatible items that use braces, and also around commas in quantifiers. The\n  one exception in PCRE2 is \\u{...}, which is from ECMAScript, not Perl, and\n  PCRE2 follows ECMAScript usage.\n\n* Changed the meaning of \\w and its synonyms and derivatives (\\b and \\B) in UCP\n  mode to follow Perl. It now matches characters whose general categories are L\n  or N or whose particular categories are Mn (non-spacing mark) or Pc\n  (combining punctuation).\n\n* Changed the default meaning of [:xdigit:] in UCP mode to follow Perl. It now\n  matches the \"fullwidth\" versions of hex digits. PCRE2_EXTRA_ASCII_DIGIT can\n  be used to keep it ASCII only.\n\n* Make PCRE2_UCP the default in UTF mode in pcre2grep and add --no-ucp,\n  --case-restrict and --posix-digit.\n\n* Add --group-separator and --no-group-separator to pcre2grep.\n\n\nVersion 10.42 11-December-2022\n------------------------------\n\nThis is an unexpectedly early release to fix a problem that was introduced in\n10.41. ChangeLog number 19 (GitHub #139) added the default definition of\nPCRE2_CALL_CONVENTION to pcre2posix.c instead of pcre2posix.h, which meant that\nprograms including pcre2posix.h but not pcre2.h couldn't compile. A new test\nthat checks this case has been added.\n\nA couple of other minor issues are also fixed, and a patch for an intermittent\nJIT fault is also included. See ChangeLog and the Git log.\n\n\nVersion 10.41 06-December-2022\n------------------------------\n\nThis is another mainly bug-fixing and code-tidying release. There is one\nsignificant upgrade to pcre2grep: it now behaves like GNU grep when matching\nmore than one pattern and a later pattern matches at an earlier point in the\nsubject when the matched substrings are being identified by colour or by\noffsets.\n\n\nVersion 10.40 15-April-2022\n---------------------------\n\nThis is mostly a bug-fixing and code-tidying release. However, there are some\nextensions to Unicode property handling:\n\n* Added support for Bidi_Class and a number of binary Unicode properties,\nincluding Bidi_Control.\n\n* A number of changes to script matching for \\p and \\P:\n\n  (a) Script extensions for a character are now coded as a bitmap instead of\n      a list of script numbers, which should be faster and does not need a\n      loop.\n\n  (b) Added the syntax \\p{script:xxx} and \\p{script_extensions:xxx} (synonyms\n      sc and scx).\n\n  (c) Changed \\p{scriptname} from being the same as \\p{sc:scriptname} to being\n      the same as \\p{scx:scriptname} because this change happened in Perl at\n      release 5.26.\n\n  (d) The standard Unicode 4-letter abbreviations for script names are now\n      recognized.\n\n  (e) In accordance with Unicode and Perl's \"loose matching\" rules, spaces,\n      hyphens, and underscores are ignored in property names, which are then\n      matched independent of case.\n\nAs always, see ChangeLog for a list of all changes (also the Git log).\n\n\nVersion 10.39 29-October-2021\n-----------------------------\n\nThis release is happening soon after 10.38 because the bug fix is important.\n\n1. Fix incorrect detection of alternatives in first character search in JIT.\n\n2. Update to Unicode 14.0.0.\n\n3. Some code cleanups (see ChangeLog).\n\n\nVersion 10.38 01-October-2021\n-----------------------------\n\nAs well as some bug fixes and tidies (as always, see ChangeLog for details),\nthe documentation is updated to list the new URLs, following the move of the\nsource repository to GitHub and the mailing list to Google Groups.\n\n* The CMake build system can now build both static and shared libraries in one\ngo.\n\n* Following Perl's lead, \\K is now locked out in lookaround assertions by\ndefault, but an option is provided to re-enable the previous behaviour.\n\n\nVersion 10.37 26-May-2021\n-------------------------\n\nA few more bug fixes and tidies. The only change of real note is the removal of\nthe actual POSIX names regcomp etc. from the POSIX wrapper library because\nthese have caused issues for some applications (see 10.33 #2 below).\n\n\nVersion 10.36 04-December-2020\n------------------------------\n\nAgain, mainly bug fixes and tidies. The only enhancements are the addition of\nGNU grep's -m (aka --max-count) option to pcre2grep, and also unifying the\nhandling of substitution strings for both -O and callouts in pcre2grep, with\nthe addition of $x{...} and $o{...} to allow for characters whose code points\nare greater than 255 in Unicode mode.\n\nNOTE: there is an outstanding issue with JIT support for MacOS on arm64\nhardware. For details, please see Bugzilla issue #2618.\n\n\nVersion 10.35 15-April-2020\n---------------------------\n\nBugfixes, tidies, and a few new enhancements.\n\n1. Capturing groups that contain recursive backreferences to themselves are no\nlonger automatically atomic, because the restriction is no longer necessary\nas a result of the 10.30 restructuring.\n\n2. Several new options for pcre2_substitute().\n\n3. When Unicode is supported and PCRE2_UCP is set without PCRE2_UTF, Unicode\ncharacter properties are used for upper/lower case computations on characters\nwhose code points are greater than 127.\n\n4. The character tables (for low-valued characters) can now more easily be\nsaved and restored in binary.\n\n5. Updated to Unicode 13.0.0.\n\n\nVersion 10.34 21-November-2019\n------------------------------\n\nAnother release with a few enhancements as well as bugfixes and tidies. The\nmain new features are:\n\n1. There is now some support for matching in invalid UTF strings.\n\n2. Non-atomic positive lookarounds are implemented in the pcre2_match()\ninterpreter, but not in JIT.\n\n3. Added two new functions: pcre2_get_match_data_size() and\npcre2_maketables_free().\n\n4. Upgraded to Unicode 12.1.0.\n\n\nVersion 10.33 16-April-2019\n---------------------------\n\nYet more bugfixes, tidies, and a few enhancements, summarized here (see\nChangeLog for the full list):\n\n1. Callouts from pcre2_substitute() are now available.\n\n2. The POSIX functions are now all called pcre2_regcomp() etc., with wrapper\nfunctions that use the standard POSIX names. However, in pcre2posix.h the POSIX\nnames are defined as macros. This should help avoid linking with the wrong\nlibrary in some environments, while still exporting the POSIX names for\npre-existing programs that use them.\n\n3. Some new options:\n\n   (a) PCRE2_EXTRA_ESCAPED_CR_IS_LF makes \\r behave as \\n.\n\n   (b) PCRE2_EXTRA_ALT_BSUX enables support for ECMAScript 6's \\u{hh...}\n       construct.\n\n   (c) PCRE2_COPY_MATCHED_SUBJECT causes a copy of a matched subject to be\n       made, instead of just remembering a pointer.\n\n4. Some new Perl features:\n\n   (a) Perl 5.28's experimental alphabetic names for atomic groups and\n       lookaround assertions, for example, (*pla:...) and (*atomic:...).\n\n   (b) The new Perl \"script run\" features (*script_run:...) and\n       (*atomic_script_run:...) aka (*sr:...) and (*asr:...).\n\n   (c) When PCRE2_UTF is set, allow non-ASCII letters and decimal digits in\n       capture group names.\n\n5. --disable-percent-zt disables the use of %zu and %td in formatting strings\nin pcre2test. They were already automatically disabled for VC and older C\ncompilers.\n\n6. Some changes related to callouts in pcre2grep:\n\n   (a) Support for running an external program under VMS has been added, in\n       addition to Windows and fork() support.\n\n   (b) --disable-pcre2grep-callout-fork restricts the callout support in\n       to the inbuilt echo facility.\n\n\nVersion 10.32 10-September-2018\n-------------------------------\n\nThis is another mainly bugfix and tidying release with a few minor\nenhancements. These are the main ones:\n\n1. pcre2grep now supports the inclusion of binary zeros in patterns that are\nread from files via the -f option.\n\n2. ./configure now supports --enable-jit=auto, which automatically enables JIT\nif the hardware supports it.\n\n3. In pcre2_dfa_match(), internal recursive calls no longer use the stack for\nlocal workspace and local ovectors. Instead, an initial block of stack is\nreserved, but if this is insufficient, heap memory is used. The heap limit\nparameter now applies to pcre2_dfa_match().\n\n4. Updated to Unicode version 11.0.0.\n\n5. (*ACCEPT:ARG), (*FAIL:ARG), and (*COMMIT:ARG) are now supported.\n\n6. Added support for \\N{U+dddd}, but only in Unicode mode.\n\n7. Added support for (?^) to unset all imnsx options.\n\n\nVersion 10.31 12-February-2018\n------------------------------\n\nThis is mainly a bugfix and tidying release (see ChangeLog for full details).\nHowever, there are some minor enhancements.\n\n1. New pcre2_config() options: PCRE2_CONFIG_NEVER_BACKSLASH_C and\nPCRE2_CONFIG_COMPILED_WIDTHS.\n\n2. New pcre2_pattern_info() option PCRE2_INFO_EXTRAOPTIONS to retrieve the\nextra compile time options.\n\n3. There are now public names for all the pcre2_compile() error numbers.\n\n4. Added PCRE2_CALLOUT_STARTMATCH and PCRE2_CALLOUT_BACKTRACK bits to a new\nfield callout_flags in callout blocks.\n\n\nVersion 10.30 14-August-2017\n----------------------------\n\nThe full list of changes that includes bugfixes and tidies is, as always, in\nChangeLog. These are the most important new features:\n\n1. The main interpreter, pcre2_match(), has been refactored into a new version\nthat does not use recursive function calls (and therefore the system stack) for\nremembering backtracking positions. This makes --disable-stack-for-recursion a\nNOOP. The new implementation allows backtracking into recursive group calls in\npatterns, making it more compatible with Perl, and also fixes some other\npreviously hard-to-do issues. For patterns that have a lot of backtracking, the\nheap is now used, and there is an explicit limit on the amount, settable by\npcre2_set_heap_limit() or (*LIMIT_HEAP=xxx). The \"recursion limit\" is retained,\nbut is renamed as \"depth limit\" (though the old names remain for\ncompatibility).\n\nThere is also a change in the way callouts from pcre2_match() are handled. The\noffset_vector field in the callout block is no longer a pointer to the\nactual ovector that was passed to the matching function in the match data\nblock. Instead it points to an internal ovector of a size large enough to hold\nall possible captured substrings in the pattern.\n\n2. The new option PCRE2_ENDANCHORED insists that a pattern match must end at\nthe end of the subject.\n\n3. The new option PCRE2_EXTENDED_MORE implements Perl's /xx feature, and\npcre2test is upgraded to support it. Setting within the pattern by (?xx) is\nalso supported.\n\n4. (?n) can be used to set PCRE2_NO_AUTO_CAPTURE, because Perl now has this.\n\n5. Additional compile options in the compile context are now available, and the\nfirst two are: PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES and\nPCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL.\n\n6. The newline type PCRE2_NEWLINE_NUL is now available.\n\n7. The match limit value now also applies to pcre2_dfa_match() as there are\npatterns that can use up a lot of resources without necessarily recursing very\ndeeply.\n\n8. The option REG_PEND (a GNU extension) is now available for the POSIX\nwrapper. Also there is a new option PCRE2_LITERAL which is used to support\nREG_NOSPEC.\n\n9. PCRE2_EXTRA_MATCH_LINE and PCRE2_EXTRA_MATCH_WORD are implemented for the\nbenefit of pcre2grep, and pcre2grep's -F, -w, and -x options are re-implemented\nusing PCRE2_LITERAL, PCRE2_EXTRA_MATCH_WORD, and PCRE2_EXTRA_MATCH_LINE. This\nis tidier and also fixes some bugs.\n\n10. The Unicode tables are upgraded from Unicode 8.0.0 to Unicode 10.0.0.\n\n11. There are some experimental functions for converting foreign patterns\n(globs and POSIX patterns) into PCRE2 patterns.\n\n\nVersion 10.23 14-February-2017\n------------------------------\n\n1. ChangeLog has the details of a lot of bug fixes and tidies.\n\n2. There has been a major re-factoring of the pcre2_compile.c file. Most syntax\nchecking is now done in the pre-pass that identifies capturing groups. This has\nreduced the amount of duplication and made the code tidier. While doing this,\nsome minor bugs and Perl incompatibilities were fixed (see ChangeLog for\ndetails.)\n\n3. Back references are now permitted in lookbehind assertions when there are\nno duplicated group numbers (that is, (?| has not been used), and, if the\nreference is by name, there is only one group of that name. The referenced\ngroup must, of course be of fixed length.\n\n4. \\g{+<number>} (e.g. \\g{+2} ) is now supported. It is a \"forward back\nreference\" and can be useful in repetitions (compare \\g{-<number>} ). Perl does\nnot recognize this syntax.\n\n5. pcre2grep now automatically expands its buffer up to a maximum set by\n--max-buffer-size.\n\n6. The -t option (grand total) has been added to pcre2grep.\n\n7. A new function called pcre2_code_copy_with_tables() exists to copy a\ncompiled pattern along with a private copy of the character tables that is\nuses.\n\n8. A user supplied a number of patches to upgrade pcre2grep under Windows and\ntidy the code.\n\n9. Several updates have been made to pcre2test and test scripts (see\nChangeLog).\n\n\nVersion 10.22 29-July-2016\n--------------------------\n\n1. ChangeLog has the details of a number of bug fixes.\n\n2. The POSIX wrapper function regcomp() did not used to support back references\nand subroutine calls if called with the REG_NOSUB option. It now does.\n\n3. A new function, pcre2_code_copy(), is added, to make a copy of a compiled\npattern.\n\n4. Support for string callouts is added to pcre2grep.\n\n5. Added the PCRE2_NO_JIT option to pcre2_match().\n\n6. The pcre2_get_error_message() function now returns with a negative error\ncode if the error number it is given is unknown.\n\n7. Several updates have been made to pcre2test and test scripts (see\nChangeLog).\n\n\nVersion 10.21 12-January-2016\n-----------------------------\n\n1. Many bugs have been fixed. A large number of them were provoked only by very\nstrange pattern input, and were discovered by fuzzers. Some others were\ndiscovered by code auditing. See ChangeLog for details.\n\n2. The Unicode tables have been updated to Unicode version 8.0.0.\n\n3. For Perl compatibility in EBCDIC environments, ranges such as a-z in a\nclass, where both values are literal letters in the same case, omit the\nnon-letter EBCDIC code points within the range.\n\n4. There have been a number of enhancements to the pcre2_substitute() function,\ngiving more flexibility to replacement facilities. It is now also possible to\ncause the function to return the needed buffer size if the one given is too\nsmall.\n\n5. The PCRE2_ALT_VERBNAMES option causes the \"name\" parts of special verbs such\nas (*THEN:name) to be processed for backslashes and to take note of\nPCRE2_EXTENDED.\n\n6. PCRE2_INFO_HASBACKSLASHC makes it possible for a client to find out if a\npattern uses \\C, and --never-backslash-C makes it possible to compile a version\nPCRE2 in which the use of \\C is always forbidden.\n\n7. A limit to the length of pattern that can be handled can now be set by\ncalling pcre2_set_max_pattern_length().\n\n8. When matching an unanchored pattern, a match can be required to begin within\na given number of code units after the start of the subject by calling\npcre2_set_offset_limit().\n\n9. The pcre2test program has been extended to test new facilities, and it can\nnow run the tests when LF on its own is not a valid newline sequence.\n\n10. The RunTest script has also been updated to enable more tests to be run.\n\n11. There have been some minor performance enhancements.\n\n\nVersion 10.20 30-June-2015\n--------------------------\n\n1. Callouts with string arguments and the pcre2_callout_enumerate() function\nhave been implemented.\n\n2. The PCRE2_NEVER_BACKSLASH_C option, which locks out the use of \\C, is added.\n\n3. The PCRE2_ALT_CIRCUMFLEX option lets ^ match after a newline at the end of a\nsubject in multiline mode.\n\n4. The way named subpatterns are handled has been refactored. The previous\napproach had several bugs.\n\n5. The handling of \\c in EBCDIC environments has been changed to conform to the\nperlebcdic document. This is an incompatible change.\n\n6. Bugs have been mended, many of them discovered by fuzzers.\n\n\nVersion 10.10 06-March-2015\n---------------------------\n\n1. Serialization and de-serialization functions have been added to the API,\nmaking it possible to save and restore sets of compiled patterns, though\nrestoration must be done in the same environment that was used for compilation.\n\n2. The (*NO_JIT) feature has been added; this makes it possible for a pattern\ncreator to specify that JIT is not to be used.\n\n3. A number of bugs have been fixed. In particular, bugs that caused building\non Windows using CMake to fail have been mended.\n\n\nVersion 10.00 05-January-2015\n-----------------------------\n\nVersion 10.00 is the first release of PCRE2, a revised API for the PCRE\nlibrary. Changes prior to 10.00 are logged in the ChangeLog file for the old\nAPI, up to item 20 for release 8.36. New programs are recommended to use the\nnew library. Programs that use the original (PCRE1) API will need changing\nbefore linking with the new library.\n\n****\n"
  },
  {
    "path": "NON-AUTOTOOLS-BUILD",
    "content": "Building PCRE2 without using autotools\n======================================\n\nThis document contains the following sections:\n\n  General\n  Generic instructions for the PCRE2 C libraries\n  Stack size in Windows environments\n  Linking programs in Windows environments\n  Calling conventions in Windows environments\n  Comments about Win32 builds\n  Building PCRE2 on Windows with CMake\n  Building PCRE2 on Windows with Visual Studio\n  Testing with RunTest.bat\n  Building PCRE2 on z/OS and z/VM\n  Building PCRE2 under VMS\n\n\nGeneral\n-------\n\nThe source of the PCRE2 libraries consists entirely of code written in Standard\nC, and so should compile successfully on any system that has a Standard C\ncompiler and library.\n\nThe PCRE2 distribution includes a \"configure\" file for use by the\nconfigure/make (autotools) build system, as found in many Unix-like\nenvironments. The README file contains information about the options for\n\"configure\".\n\nThere is also support for CMake, which some users prefer, especially in Windows\nenvironments, though it can also be run in Unix-like environments. See the\nsection entitled \"Building PCRE2 on Windows with CMake\" below.\n\nVersions of src/config.h and src/pcre2.h are distributed in the PCRE2 tarballs\nunder the names src/config.h.generic and src/pcre2.h.generic. These are\nprovided for those who build PCRE2 without using \"configure\" or CMake. If you\nuse \"configure\" or CMake, the .generic versions are not used.\n\n\nGeneric instructions for the PCRE2 C libraries\n----------------------------------------------\n\nThere are three possible PCRE2 libraries, each handling data with a specific\ncode unit width: 8, 16, or 32 bits. You can build any combination of them. The\nfollowing are generic instructions for building a PCRE2 C library \"by hand\". If\nyou are going to use CMake, this section does not apply to you; you can skip\nahead to the CMake section. Note that the settings concerned with 8-bit,\n16-bit, and 32-bit code units relate to the type of data string that PCRE2\nprocesses. They are NOT referring to the underlying operating system bit width.\nYou do not have to do anything special to compile in a 64-bit environment, for\nexample.\n\n (1) Copy or rename the file src/config.h.generic as src/config.h, and edit the\n     macro settings that it contains to whatever is appropriate for your\n     environment. In particular, you can alter the definition of the NEWLINE\n     macro to specify what character(s) you want to be interpreted as line\n     terminators by default. You need to #define at least one of\n     SUPPORT_PCRE2_8, SUPPORT_PCRE2_16, or SUPPORT_PCRE2_32, depending on which\n     libraries you are going to build. You must set all that apply.\n\n     When you subsequently compile any of the PCRE2 modules, you must specify\n     -DHAVE_CONFIG_H to your compiler so that src/config.h is included in the\n     sources.\n\n     An alternative approach is not to edit src/config.h, but to use -D on the\n     compiler command line to make any changes that you need to the\n     configuration options. In this case -DHAVE_CONFIG_H must not be set.\n\n     NOTE: There have been occasions when the way in which certain parameters\n     in src/config.h are used has changed between releases. (In the\n     configure/make world, this is handled automatically.) When upgrading to a\n     new release, you are strongly advised to review src/config.h.generic\n     before re-using what you had previously.\n\n     Note also that the src/config.h.generic file is created from a config.h\n     that was generated by Autotools, which automatically includes settings of\n     a number of macros that are not actually used by PCRE2 (for example,\n     HAVE_DLFCN_H).\n\n (2) Copy or rename the file src/pcre2.h.generic as src/pcre2.h.\n\n (3) EITHER:\n       Copy or rename file src/pcre2_chartables.c.dist as\n       src/pcre2_chartables.c.\n\n     OR:\n       Compile src/pcre2_dftables.c as a stand-alone program (using\n       -DHAVE_CONFIG_H if you have set up src/config.h), and then run it with\n       the single argument \"src/pcre2_chartables.c\". This generates a set of\n       standard character tables and writes them to that file. The tables are\n       generated using the default C locale for your system. If you want to use\n       a locale that is specified by LC_xxx environment variables, add the -L\n       option to the pcre2_dftables command. You must use this method if you\n       are building on a system that uses EBCDIC code.\n\n     The tables in src/pcre2_chartables.c are defaults. The caller of PCRE2 can\n     specify alternative tables at run time.\n\n (4) For a library that supports 8-bit code units in the character strings that\n     it processes, compile the following source files from the src directory,\n     setting -DPCRE2_CODE_UNIT_WIDTH=8 as a compiler option. Also set\n     -DHAVE_CONFIG_H if you have set up src/config.h with your configuration,\n     or else use other -D settings to change the configuration as required.\n\n       pcre2_auto_possess.c\n       pcre2_chkdint.c\n       pcre2_chartables.c\n       pcre2_compile.c\n       pcre2_compile_cgroup.c\n       pcre2_compile_class.c\n       pcre2_config.c\n       pcre2_context.c\n       pcre2_convert.c\n       pcre2_dfa_match.c\n       pcre2_error.c\n       pcre2_extuni.c\n       pcre2_find_bracket.c\n       pcre2_jit_compile.c\n       pcre2_maketables.c\n       pcre2_match.c\n       pcre2_match_data.c\n       pcre2_match_next.c\n       pcre2_newline.c\n       pcre2_ord2utf.c\n       pcre2_pattern_info.c\n       pcre2_script_run.c\n       pcre2_serialize.c\n       pcre2_string_utils.c\n       pcre2_study.c\n       pcre2_substitute.c\n       pcre2_substring.c\n       pcre2_tables.c\n       pcre2_ucd.c\n       pcre2_valid_utf.c\n       pcre2_xclass.c\n\n     Make sure that you include -I. in the compiler command (or equivalent for\n     an unusual compiler) so that all included PCRE2 header files are first\n     sought in the src directory under the current directory. Otherwise you run\n     the risk of picking up a previously-installed file from somewhere else.\n\n     Note that you must compile pcre2_jit_compile.c, even if you have not\n     defined SUPPORT_JIT in src/config.h, because when JIT support is not\n     configured, dummy functions are compiled. When JIT support IS configured,\n     pcre2_jit_compile.c #includes other files from the sljit dependency,\n     all of whose names begin with \"sljit\".\n\n     Note also that the pcre2_fuzzsupport.c file contains special code that is\n     useful to those who want to run fuzzing tests on the PCRE2 library. Unless\n     you are doing that, you can ignore it.\n\n (5) Now link all the compiled code into an object library in whichever form\n     your system keeps such libraries. This is the PCRE2 C 8-bit library,\n     typically called something like libpcre2-8. If your system has static and\n     shared libraries, you may have to do this once for each type.\n\n (6) If you want to build a library that supports 16-bit or 32-bit code units,\n     set 16 or 32 as the value of -DPCRE2_CODE_UNIT_WIDTH when obeying step 4\n     above. If you want to build more than one PCRE2 library, repeat steps 4\n     and 5 as necessary.\n\n (7) If you want to build the POSIX wrapper functions (which apply only to the\n     8-bit library), ensure that you have the src/pcre2posix.h file and then\n     compile src/pcre2posix.c. Link the result (on its own) as the pcre2posix\n     library. If targeting a DLL in Windows, make sure to include\n     -DPCRE2POSIX_SHARED with your compiler flags.\n\n (8) The pcre2test program can be linked with any combination of the 8-bit,\n     16-bit and 32-bit libraries (depending on what you specfied in\n     src/config.h) . Compile src/pcre2test.c; don't forget -DHAVE_CONFIG_H if\n     necessary, but do NOT define PCRE2_CODE_UNIT_WIDTH. Then link with the\n     appropriate library/ies. If you compiled an 8-bit library, pcre2test also\n     needs the pcre2posix wrapper library when linking.\n\n (9) Run pcre2test on the testinput files in the testdata directory, and check\n     that the output matches the corresponding testoutput files. There are\n     comments about what each test does in the section entitled \"Testing PCRE2\"\n     in the README file. If you compiled more than one of the 8-bit, 16-bit and\n     32-bit libraries, you need to run pcre2test with the -16 option to do\n     16-bit tests and with the -32 option to do 32-bit tests.\n\n     Some tests are relevant only when certain build-time options are selected.\n     For example, test 4 is for Unicode support, and will not run if you have\n     built PCRE2 without it. See the comments at the start of each testinput\n     file. If you have a suitable Unix-like shell, the RunTest script will run\n     the appropriate tests for you. The command \"RunTest list\" will output a\n     list of all the tests.\n\n     Note that the supplied files are in Unix format, with just LF characters\n     as line terminators. You may need to edit them to change this if your\n     system uses a different convention.\n\n(10) If you have built PCRE2 with SUPPORT_JIT, the JIT features can be tested\n     by running pcre2test with the -jit option. This is done automatically by\n     the RunTest script. You might also like to build and run the freestanding\n     JIT test program, src/pcre2_jit_test.c.\n\n(11) The pcre2test program tests the POSIX wrapper library, but there is also a\n     freestanding test program in src/pcre2posix_test.c. It must be linked with\n     both the pcre2posix library and the 8-bit PCRE2 library.\n\n(12) If you want to use the pcre2grep command, compile and link\n     src/pcre2grep.c; it uses only the 8-bit PCRE2 library (it does not need\n     the pcre2posix library). If you have built the PCRE2 library with JIT\n     support by defining SUPPORT_JIT in src/config.h, you can also define\n     SUPPORT_PCRE2GREP_JIT, which causes pcre2grep to make use of JIT (unless\n     it is run with --no-jit). If you define SUPPORT_PCRE2GREP_JIT without\n     defining SUPPORT_JIT, pcre2grep does not try to make use of JIT.\n\n\nStack size in Windows environments\n----------------------------------\n\nPrior to release 10.30 the default system stack size of 1MiB in some Windows\nenvironments caused issues with some tests. This should no longer be the case\nfor 10.30 and later releases.\n\n\nLinking programs in Windows environments\n----------------------------------------\n\nIf you want to statically link a program against a PCRE2 library in the form of\na non-dll .a file, you must define PCRE2_STATIC before including src/pcre2.h.\n\n\nCalling conventions in Windows environments\n-------------------------------------------\n\nIt is possible to compile programs to use different calling conventions using\nMSVC. Search the web for \"calling conventions\" for more information. To make it\neasier to change the calling convention for the exported functions in a\nPCRE2 library, the macro PCRE2_CALL_CONVENTION is present in all the external\ndefinitions. It can be set externally when compiling (e.g. in CFLAGS). If it is\nnot set, it defaults to empty; the default calling convention is then used\n(which is what is wanted most of the time).\n\n\nComments about Win32 builds (see also \"Building PCRE2 on Windows with CMake\")\n---------------------------\n\nThere are two ways of building PCRE2 using the \"configure, make, make install\"\nparadigm on Windows systems: using MinGW or using Cygwin. These are not at all\nthe same thing; they are completely different from each other. There is also\nsupport for building using CMake, which some users find a more straightforward\nway of building PCRE2 under Windows.\n\nThe MinGW home page (http://www.mingw.org/) says this:\n\n  MinGW: A collection of freely available and freely distributable Windows\n  specific header files and import libraries combined with GNU toolsets that\n  allow one to produce native Windows programs that do not rely on any\n  3rd-party C runtime DLLs.\n\nThe Cygwin home page (http://www.cygwin.com/) says this:\n\n  Cygwin is a Linux-like environment for Windows. It consists of two parts:\n\n  . A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing\n    substantial Linux API functionality\n\n  . A collection of tools which provide Linux look and feel.\n\nOn both MinGW and Cygwin, PCRE2 should build correctly using:\n\n  ./configure && make && make install\n\nThis should create two libraries called libpcre2-8 and libpcre2-posix. These\nare independent libraries: when you link with libpcre2-posix you must also link\nwith libpcre2-8, which contains the basic functions.\n\nUsing Cygwin's compiler generates libraries and executables that depend on\ncygwin1.dll. If a library that is generated this way is distributed,\ncygwin1.dll has to be distributed as well. Since cygwin1.dll is under the GPL\nlicence, this forces not only PCRE2 to be under the GPL, but also the entire\napplication. A distributor who wants to keep their own code proprietary must\npurchase an appropriate Cygwin licence.\n\nMinGW has no such restrictions. The MinGW compiler generates a library or\nexecutable that can run standalone on Windows without any third party dll or\nlicensing issues.\n\nBut there is more complication:\n\nIf a Cygwin user uses the -mno-cygwin Cygwin gcc flag, what that really does is\nto tell Cygwin's gcc to use the MinGW gcc. Cygwin's gcc is only acting as a\nfront end to MinGW's gcc (if you install Cygwin's gcc, you get both Cygwin's\ngcc and MinGW's gcc). So, a user can:\n\n. Build native binaries by using MinGW or by getting Cygwin and using\n  -mno-cygwin.\n\n. Build binaries that depend on cygwin1.dll by using Cygwin with the normal\n  compiler flags.\n\nThe test files that are supplied with PCRE2 are in UNIX format, with LF\ncharacters as line terminators. Unless your PCRE2 library uses a default\nnewline option that includes LF as a valid newline, it may be necessary to\nchange the line terminators in the test files to get some of the tests to work.\n\n\nBuilding PCRE2 on Windows with CMake\n------------------------------------\n\nCMake is an alternative configuration facility that can be used instead of\n\"configure\". CMake creates project files (make files, solution files, etc.)\ntailored to numerous development environments, including Visual Studio,\nBorland, Msys, MinGW, NMake, and Unix. If possible, use short paths with no\nspaces in the names for your CMake installation and your PCRE2 source and build\ndirectories.\n\nIf you are using CMake and encounter errors, deleting the CMake cache and\nrestarting from a fresh build may fix the error. In the CMake GUI, the cache can\nbe deleted by selecting \"File > Delete Cache\"; or the folder \"CMakeCache\" can\nbe deleted.\n\n1. Install the latest CMake version available from http://www.cmake.org/, and\n   ensure that cmake\\bin is on your path.\n\n2. Unzip (retaining folder structure) the PCRE2 source tree into a source\n   directory such as C:\\pcre2. You should ensure your local date and time\n   is not earlier than the file dates in your source dir if the release is\n   very new.\n\n3. Create a new, empty build directory, preferably a subdirectory of the\n   source dir. For example, C:\\pcre2\\pcre2-xx\\build.\n\n4. Run CMake.\n\n   - Using the CLI, simply run `cmake ..` inside the `build/` directory. You can\n     use the `ccmake` ncurses GUI to select and configure PCRE2 features.\n\n   - Using the CMake GUI:\n\n     a) Run cmake-gui from the Shell environment of your build tool, for\n        example, Msys for Msys/MinGW or Visual Studio Command Prompt for\n        VC/VC++.\n\n     b) Enter C:\\pcre2\\pcre2-xx and C:\\pcre2\\pcre2-xx\\build for the source and\n        build directories, respectively.\n\n     c) Press the \"Configure\" button.\n\n     d) Select the particular IDE / build tool that you are using (Visual\n        Studio, MSYS makefiles, MinGW makefiles, etc.)\n\n     e) The GUI will then list several configuration options. This is where\n        you can disable Unicode support or select other PCRE2 optional features.\n\n     f) Press \"Configure\" again. The adjacent \"Generate\" button should now be\n        active.\n\n     g) Press \"Generate\".\n\n5. The build directory should now contain a usable build system, be it a\n   solution file for Visual Studio, makefiles for MinGW, etc. Exit from\n   cmake-gui and use the generated build system with your compiler or IDE.\n   E.g., for MinGW you can run \"make\", or for Visual Studio, open the PCRE2\n   solution, select the desired configuration (Debug, or Release, etc.) and\n   build the ALL_BUILD project.\n\n   Regardless of build system used, `cmake --build .` will build it.\n\n6. If during configuration with cmake-gui you've elected to build the test\n   programs, you can execute them by building the test project. E.g., for\n   MinGW: \"make test\"; for Visual Studio build the RUN_TESTS project. The\n   most recent build configuration is targeted by the tests. A summary of\n   test results is presented. Complete test output is subsequently\n   available for review in Testing\\Temporary under your build dir.\n\n   Regardless of build system used, `ctest` will run the tests.\n\n\nBuilding PCRE2 on Windows with Visual Studio\n--------------------------------------------\n\nThe code currently cannot be compiled without an inttypes.h header, which is\navailable only with Visual Studio 2013 or newer. However, this portable and\npermissively-licensed implementation of the stdint.h header could be used as an\nalternative:\n\n  http://www.azillionmonkeys.com/qed/pstdint.h\n\nJust rename it and drop it into the top level of the build tree.\n\n\nTesting with RunTest.bat\n------------------------\n\nIf configured with CMake, building the test project (\"make test\" or building\nALL_TESTS in Visual Studio) creates (and runs) pcre2_test.bat (and depending\non your configuration options, possibly other test programs) in the build\ndirectory. The pcre2_test.bat script runs RunTest.bat with correct source and\nexe paths.\n\nFor manual testing with RunTest.bat, provided the build dir is a subdirectory\nof the source directory: Open command shell window. Chdir to the location\nof your pcre2test.exe and pcre2grep.exe programs. Call RunTest.bat with\n\"..\\RunTest.Bat\" or \"..\\..\\RunTest.bat\" as appropriate.\n\nTo run only a particular test with RunTest.Bat provide a test number argument.\n\nOtherwise:\n\n1. Copy RunTest.bat into the directory where pcre2test.exe and pcre2grep.exe\n   have been created.\n\n2. Edit RunTest.bat to identify the full or relative location of\n   the pcre2 source (wherein which the testdata folder resides), e.g.:\n\n   set srcdir=C:\\pcre2\\pcre2-10.00\n\n3. In a Windows command environment, chdir to the location of your bat and\n   exe programs.\n\n4. Run RunTest.bat. Test outputs will automatically be compared to expected\n   results, and discrepancies will be identified in the console output.\n\nTo independently test the just-in-time compiler, run pcre2_jit_test.exe.\n\n\nBuilding PCRE2 on z/OS and z/VM\n-------------------------------\n\nz/OS and z/VM are operating systems for mainframe computers, produced by IBM.\nThe character code used is EBCDIC, not ASCII or Unicode. In z/OS, UNIX APIs and\napplications can be supported through UNIX System Services.\n\nThe PCRE2 codebase compiles and runs with native EBCDIC support on modern z/OS\nsystems, using the pre-installed tools (/bin/sh, ./configure, and the XLC or\nIBM-Clang compilers). PCRE2 supports z/OS using both Autoconf (./configure) and\nCMake (which IBM distributes via \"zopen install cmake\").\n\nNote that as of the time of writing, IBM's port of CMake to z/OS has only\npartial support for EBCDIC. It is recommended to build PCRE2 using the\n./configure script, if you require an EBCDIC build.\n\nAny EBCDIC codepage should work (PCRE2 does not assume or require IBM-1047), or\nPCRE2 can compiled for ASCII/Latin-1/Unicode.\n\nAfter unpacking the PCRE2 tarball, you must subsequently tag the files as ASCII\nin order for the z/OS shell and compiler to interpret them correctly:\n    chtag -R -tc ISO8859-1 <directory>\n\nSome unusual features on the IBM platform are:\n  - The _ALL_SOURCE macro must be provided. Unlike on Linux or macOS, even quite\n    standard POSIX APIs are not made visible by default. PCRE2's Autoconf and\n    CMake system both provide this for you.\n  - The `cc`, `c89`, and even `c99` compilers provided by IBM do not default to\n    the same argument ordering as other Unix platforms.\n  - The XLC compiler requires `-qhaltonmsg=CCN3296`, otherwise it will treat any\n    preprocessor #include errors as a warning rather than an error. Needless to\n    say this default wrecks Autoconf and CMake's feature-detection tests.\n    PCRE2's build system is aware of this.\n  - The test suite (in the testdata/ directory) is entirely in ASCII/UTF-8.\n    When running the tests, you must ensure that the EBCDIC-native build of\n    pcre2test receives an EBCDIC version of these files. The easiest way to\n    achieve this is via filesystem tagging (chtag). Alternatively, you could\n    manually re-encode the testdata files as EBCDIC, and tag them as EBCDIC.\n    (Latin-1 and EBCDIC are one-to-one convertible encodings, a simple\n    byte-by-byte permutation of the 256 values.)\n\nIn native z/OS (without UNIX System Services) and in z/VM, a user has provided a\nspecial port of PCRE2. For details, please see file 939 on this web site:\n\n  http://www.cbttape.org\n\nThe user-provided port also provides an API for LE languages such as COBOL and\nfor the z/OS and z/VM versions of the Rexx languages.\n\n\nBuilding PCRE2 under VMS\n------------------------\n\nAlexey Chuphin has contributed some auxiliary files for building PCRE2 under\nOpenVMS. They are in the \"vms\" directory in the distribution tarball. Please\nread the file called vms/openvms_readme.txt. The pcre2test and pcre2grep\nprograms contain some VMS-specific code.\n\nThis has not been tested for some time. The PCRE2 maintainers would be grateful\nto learn whether it still works (or if anyone still uses it).\n\n\n=============================\nLast updated: 17 October 2025\n=============================\n\n"
  },
  {
    "path": "README",
    "content": "README file for PCRE2 (Perl-compatible regular expression library)\n==================================================================\n\nPCRE2 is a re-working of the original PCRE1 library to provide an entirely new\nAPI. Since its initial release in 2015, there has been further development of\nthe code and it now differs from PCRE1 in more than just the API. There are new\nfeatures, and the internals have been improved. The original PCRE1 library is\nnow obsolete and no longer maintained. The latest release of PCRE2 is available\nin .tar.gz, tar.bz2, or .zip form from this GitHub repository:\n\nhttps://github.com/PCRE2Project/pcre2/releases\n\nThere is a mailing list for discussion about the development of PCRE2 at\npcre2-dev@googlegroups.com. You can subscribe by sending an email to\npcre2-dev+subscribe@googlegroups.com.\n\nYou can access the archives and also subscribe or manage your subscription\nhere:\n\nhttps://groups.google.com/g/pcre2-dev\n\nPlease read the NEWS file if you are upgrading from a previous release. The\ncontents of this README file are:\n\n  The PCRE2 APIs\n  Documentation for PCRE2\n  Building PCRE2 on non-Unix-like systems\n  Building PCRE2 without using autotools\n  Building PCRE2 using autotools\n  Retrieving configuration information\n  Shared libraries\n  Cross-compiling using autotools\n  Making new tarballs\n  Testing PCRE2\n  Character tables\n  File manifest\n\n\nThe PCRE2 APIs\n--------------\n\nPCRE2 is written in C, and it has its own API. There are three sets of\nfunctions, one for the 8-bit library, which processes strings of bytes, one for\nthe 16-bit library, which processes strings of 16-bit values, and one for the\n32-bit library, which processes strings of 32-bit values. Unlike PCRE1, there\nare no C++ wrappers.\n\nThe distribution does contain a set of C wrapper functions for the 8-bit\nlibrary that are based on the POSIX regular expression API (see the pcre2posix\nman page). These are built into a library called libpcre2-posix. Note that this\njust provides a POSIX calling interface to PCRE2; the regular expressions\nthemselves still follow Perl syntax and semantics. The POSIX API is restricted,\nand does not give full access to all of PCRE2's facilities.\n\nThe header file for the POSIX-style functions is called pcre2posix.h. The\nofficial POSIX name is regex.h, but I did not want to risk possible problems\nwith existing files of that name by distributing it that way. To use PCRE2 with\nan existing program that uses the POSIX API, pcre2posix.h will have to be\nrenamed or pointed at by a link (or the program modified, of course). See the\npcre2posix documentation for more details.\n\n\nDocumentation for PCRE2\n-----------------------\n\nIf you install PCRE2 in the normal way on a Unix-like system, you will end up\nwith a set of man pages whose names all start with \"pcre2\". The one that is\njust called \"pcre2\" lists all the others. In addition to these man pages, the\nPCRE2 documentation is supplied in two other forms:\n\n  1. There are files called doc/pcre2.txt, doc/pcre2grep.txt, and\n     doc/pcre2test.txt in the source distribution. The first of these is a\n     concatenation of the text forms of all the section 3 man pages except the\n     listing of pcre2demo.c and those that summarize individual functions. The\n     other two are the text forms of the section 1 man pages for the pcre2grep\n     and pcre2test commands. These text forms are provided for ease of scanning\n     with text editors or similar tools. They are installed in\n     <prefix>/share/doc/pcre2, where <prefix> is the installation prefix\n     (defaulting to /usr/local).\n\n  2. A set of files containing all the documentation in HTML form, hyperlinked\n     in various ways, and rooted in a file called index.html, is distributed in\n     doc/html and installed in <prefix>/share/doc/pcre2/html.\n\n\nBuilding PCRE2 on non-Unix-like systems\n---------------------------------------\n\nFor a non-Unix-like system, please read the file NON-AUTOTOOLS-BUILD, though if\nyour system supports the use of \"configure\" and \"make\" you may be able to build\nPCRE2 using autotools in the same way as for many Unix-like systems. This file\nalso contains useful information on building for some unusual Unix environments\n(such as EBCDIC mainframes).\n\nPCRE2 can also be configured using CMake, which can be run in various ways\n(command line, GUI, etc). This creates Makefiles, solution files, etc. The file\nNON-AUTOTOOLS-BUILD has information about CMake.\n\nPCRE2 has been compiled on many different operating systems. It should be\nstraightforward to build PCRE2 on any system that has a C99 or later compiler\nand library.\n\n\nBuilding PCRE2 without using autotools\n--------------------------------------\n\nThe use of autotools (in particular, libtool) is problematic in some\nenvironments, even some that are Unix or Unix-like. See the NON-AUTOTOOLS-BUILD\nfile for ways of building PCRE2 without using autotools.\n\n\nBuilding PCRE2 using autotools\n------------------------------\n\nThe following instructions assume the use of the widely used \"configure; make;\nmake install\" (autotools) process.\n\nIf you have downloaded and unpacked a PCRE2 release tarball, run the\n\"configure\" command from the PCRE2 directory, with your current directory set\nto the directory where you want the files to be created. This command is a\nstandard GNU \"autoconf\" configuration script, for which generic instructions\nare supplied in the file INSTALL.\n\nThe files in the GitHub repository do not contain \"configure\". If you have\ndownloaded the PCRE2 source files from GitHub, before you can run \"configure\"\nyou must run the shell script called autogen.sh. This runs a number of\nautotools to create a \"configure\" script (you must of course have the autotools\ncommands installed in order to do this).\n\nMost commonly, people build PCRE2 within its own distribution directory, and in\nthis case, on many systems, just running \"./configure\" is sufficient. However,\nthe usual methods of changing standard defaults are available. For example:\n\nCFLAGS='-O2 -Wall' ./configure --prefix=/opt/local\n\nThis command specifies that the C compiler should be run with the flags '-O2\n-Wall' instead of the default, and that \"make install\" should install PCRE2\nunder /opt/local instead of the default /usr/local.\n\nIf you want to build in a different directory, just run \"configure\" with that\ndirectory as current. For example, suppose you have unpacked the PCRE2 source\ninto /source/pcre2/pcre2-xxx, but you want to build it in\n/build/pcre2/pcre2-xxx:\n\ncd /build/pcre2/pcre2-xxx\n/source/pcre2/pcre2-xxx/configure\n\nPCRE2 is written in C and is normally compiled as a C library. However, it is\npossible to build it as a C++ library, though the provided building apparatus\ndoes not have any features to support this.\n\nThere are some optional features that can be included or omitted from the PCRE2\nlibrary. They are also documented in the pcre2build man page.\n\n. By default, both shared and static libraries are built. You can change this\n  by adding one of these options to the \"configure\" command:\n\n  --disable-shared\n  --disable-static\n\n  Setting --disable-shared ensures that PCRE2 libraries are built as static\n  libraries. The binaries that are then created as part of the build process\n  (for example, pcre2test and pcre2grep) are linked statically with one or more\n  PCRE2 libraries, but may also be dynamically linked with other libraries such\n  as libc. If you want these binaries to be fully statically linked, you can\n  set LDFLAGS like this:\n\n  LDFLAGS=--static ./configure --disable-shared\n\n  Note the two hyphens in --static. Of course, this works only if static\n  versions of all the relevant libraries are available for linking. See also\n  \"Shared libraries\" below.\n\n  Shared libraries are compiled with symbol versioning enabled on platforms that\n  support this, but this can be disabled by adding --disable-symvers.\n\n. By default, only the 8-bit library is built. If you add --enable-pcre2-16 to\n  the \"configure\" command, the 16-bit library is also built. If you add\n  --enable-pcre2-32 to the \"configure\" command, the 32-bit library is also\n  built. If you want only the 16-bit or 32-bit library, use --disable-pcre2-8\n  to disable building the 8-bit library.\n\n. If you want to include support for just-in-time (JIT) compiling, which can\n  give large performance improvements on certain platforms, add --enable-jit to\n  the \"configure\" command. This support is available only for certain hardware\n  architectures. If you try to enable it on an unsupported architecture, there\n  will be a compile time error. If in doubt, use --enable-jit=auto, which\n  enables JIT only if the current hardware is supported.\n\n. If you are enabling JIT under SELinux environment you may also want to add\n  --enable-jit-sealloc, which enables the use of an executable memory allocator\n  that is compatible with SELinux. Warning: this allocator is experimental!\n  It does not support fork() operation and may crash when no disk space is\n  available. This option has no effect if JIT is disabled.\n\n. If you do not want to make use of the default support for UTF-8 Unicode\n  character strings in the 8-bit library, UTF-16 Unicode character strings in\n  the 16-bit library, or UTF-32 Unicode character strings in the 32-bit\n  library, you can add --disable-unicode to the \"configure\" command. This\n  reduces the size of the libraries. It is not possible to configure one\n  library with Unicode support, and another without, in the same configuration.\n  It is also not possible to use --enable-ebcdic (see below) with Unicode\n  support, so if this option is set, you must also use --disable-unicode.\n\n  When Unicode support is available, the use of a UTF encoding still has to be\n  enabled by setting the PCRE2_UTF option at run time or starting a pattern\n  with (*UTF). When PCRE2 is compiled with Unicode support, its input can only\n  either be ASCII or UTF-8/16/32, even when running on EBCDIC platforms.\n\n  As well as supporting UTF strings, Unicode support includes support for the\n  \\P, \\p, and \\X sequences that recognize Unicode character properties.\n  However, only a subset of Unicode properties are supported; see the\n  pcre2pattern man page for details. Escape sequences such as \\d and \\w in\n  patterns do not by default make use of Unicode properties, but can be made to\n  do so by setting the PCRE2_UCP option or starting a pattern with (*UCP).\n\n. You can build PCRE2 to recognize either CR or LF or the sequence CRLF, or any\n  of the preceding, or any of the Unicode newline sequences, or the NUL (zero)\n  character as indicating the end of a line. Whatever you specify at build time\n  is the default; the caller of PCRE2 can change the selection at run time. The\n  default newline indicator is a single LF character (the Unix standard). You\n  can specify the default newline indicator by adding --enable-newline-is-cr,\n  --enable-newline-is-lf, --enable-newline-is-crlf,\n  --enable-newline-is-anycrlf, --enable-newline-is-any, or\n  --enable-newline-is-nul to the \"configure\" command, respectively.\n\n. By default, the sequence \\R in a pattern matches any Unicode line ending\n  sequence. This is independent of the option specifying what PCRE2 considers\n  to be the end of a line (see above). However, the caller of PCRE2 can\n  restrict \\R to match only CR, LF, or CRLF. You can make this the default by\n  adding --enable-bsr-anycrlf to the \"configure\" command (bsr = \"backslash R\").\n\n. In a pattern, the escape sequence \\C matches a single code unit, even in a\n  UTF mode. This can be dangerous because it breaks up multi-code-unit\n  characters. You can build PCRE2 with the use of \\C permanently locked out by\n  adding --enable-never-backslash-C (note the upper case C) to the \"configure\"\n  command. When \\C is allowed by the library, individual applications can lock\n  it out by calling pcre2_compile() with the PCRE2_NEVER_BACKSLASH_C option.\n\n. PCRE2 has a counter that limits the depth of nesting of parentheses in a\n  pattern. This limits the amount of system stack that a pattern uses when it\n  is compiled. The default is 250, but you can change it by setting, for\n  example,\n\n  --with-parens-nest-limit=500\n\n. PCRE2 has a counter that can be set to limit the amount of computing resource\n  it uses when matching a pattern. If the limit is exceeded during a match, the\n  match fails. The default is ten million. You can change the default by\n  setting, for example,\n\n  --with-match-limit=500000\n\n  on the \"configure\" command. This is just the default; individual calls to\n  pcre2_match() or pcre2_dfa_match() can supply their own value. There is more\n  discussion in the pcre2api man page (search for pcre2_set_match_limit).\n\n. There is a separate counter that limits the depth of nested backtracking\n  (pcre2_match()) or nested function calls (pcre2_dfa_match()) during a\n  matching process, which indirectly limits the amount of heap memory that is\n  used, and in the case of pcre2_dfa_match() the amount of stack as well. This\n  counter also has a default of ten million, which is essentially \"unlimited\".\n  You can change the default by setting, for example,\n\n  --with-match-limit-depth=5000\n\n  There is more discussion in the pcre2api man page (search for\n  pcre2_set_depth_limit).\n\n. You can also set an explicit limit on the amount of heap memory used by\n  the pcre2_match() and pcre2_dfa_match() interpreters:\n\n  --with-heap-limit=500\n\n  The units are kibibytes (units of 1024 bytes). This limit does not apply when\n  the JIT optimization (which has its own memory control features) is used.\n  There is more discussion on the pcre2api man page (search for\n  pcre2_set_heap_limit).\n\n. In the 8-bit library, the default maximum compiled pattern size is around\n  64 kibibytes. You can increase this by adding --with-link-size=3 to the\n  \"configure\" command. PCRE2 then uses three bytes instead of two for offsets\n  to different parts of the compiled pattern. In the 16-bit library,\n  --with-link-size=3 is the same as --with-link-size=4, which (in both\n  libraries) uses four-byte offsets. Increasing the internal link size reduces\n  performance in the 8-bit and 16-bit libraries. In the 32-bit library, the\n  link size setting is ignored, as 4-byte offsets are always used.\n\n. Lookbehind assertions in which one or more branches can match a variable\n  number of characters are supported only if there is a maximum matching length\n  for each top-level branch. There is a limit to this maximum that defaults to\n  255 characters. You can alter this default by a setting such as\n\n  --with-max-varlookbehind=100\n\n  The limit can be changed at runtime by calling pcre2_set_max_varlookbehind().\n  Lookbehind assertions in which every branch matches a fixed number of\n  characters (not necessarily all the same) are not constrained by this limit.\n\n. For speed, PCRE2 uses four tables for manipulating and identifying characters\n  whose code point values are less than 256. By default, it uses a set of\n  tables for ASCII encoding that is part of the distribution. If you specify\n\n  --enable-rebuild-chartables\n\n  a program called pcre2_dftables is compiled and run in the default C locale\n  when you obey \"make\". It builds a source file called pcre2_chartables.c. If\n  you do not specify this option, pcre2_chartables.c is created as a copy of\n  pcre2_chartables.c.dist. See \"Character tables\" below for further\n  information.\n\n. It is possible to compile PCRE2 for use on systems that use EBCDIC as their\n  character code (as opposed to ASCII/Unicode) by specifying\n\n  --enable-ebcdic --disable-unicode\n\n  This automatically implies --enable-rebuild-chartables (see above), in order\n  to ensure that you have the correct default character tables for your system's\n  codepage. There is an exception when you set --enable-ebcdic-ignoring-compiler\n  (see below), which allows using a default set of EBCDIC 1047 character tables\n  rather than forcing use of --enable-rebuild-chartables.\n\n  When PCRE2 is built with EBCDIC support, it always operates in EBCDIC. It\n  cannot support both EBCDIC and ASCII or UTF-8/16/32.\n\n  There is a second option, --enable-ebcdic-nl25, which specifies that the code\n  value for the EBCDIC NL character is 0x25 instead of the default 0x15.\n\n  There is a third option, --enable-ebcdic-ignoring-compiler, which disregards\n  the compiler's codepage for determining the numeric value of C character\n  constants such as 'z', and instead forces PCRE2 to use numeric constants for\n  the EBCDIC 1047 codepage instead.\n\n. If you specify --enable-debug, additional debugging code is included in the\n  build. This option is intended for use by the PCRE2 maintainers.\n\n. In environments where valgrind is installed, if you specify\n\n  --enable-valgrind\n\n  PCRE2 will use valgrind annotations to mark certain memory regions as\n  unaddressable. This allows it to detect invalid memory accesses, and is\n  mostly useful for debugging PCRE2 itself.\n\n. In environments where the gcc compiler is used and lcov is installed, if you\n  specify\n\n  --enable-coverage\n\n  the build process implements a code coverage report for the test suite. The\n  report is generated by running \"make coverage\". If ccache is installed on\n  your system, it must be disabled when building PCRE2 for coverage reporting.\n  You can do this by setting the environment variable CCACHE_DISABLE=1 before\n  running \"make\" to build PCRE2. There is more information about coverage\n  reporting in the \"pcre2build\" documentation.\n\n. When JIT support is enabled, pcre2grep automatically makes use of it, unless\n  you add --disable-pcre2grep-jit to the \"configure\" command.\n\n. There is support for calling external programs during matching in the\n  pcre2grep command, using PCRE2's callout facility with string arguments. This\n  support can be disabled by adding --disable-pcre2grep-callout to the\n  \"configure\" command. There are two kinds of callout: one that generates\n  output from inbuilt code, and another that calls an external program. The\n  latter has special support for Windows and VMS; otherwise it assumes the\n  existence of the fork() function. This facility can be disabled by adding\n  --disable-pcre2grep-callout-fork to the \"configure\" command.\n\n. The pcre2grep program currently supports only 8-bit data files, and so\n  requires the 8-bit PCRE2 library. It is possible to compile pcre2grep to use\n  libz and/or libbz2, in order to read .gz and .bz2 files (respectively), by\n  specifying one or both of\n\n  --enable-pcre2grep-libz\n  --enable-pcre2grep-libbz2\n\n  Of course, the relevant libraries must be installed on your system.\n\n. The default starting size (in bytes) of the internal buffer used by pcre2grep\n  can be set by, for example:\n\n  --with-pcre2grep-bufsize=51200\n\n  The value must be a plain integer. The default is 20480. The amount of memory\n  used by pcre2grep is actually three times this number, to allow for \"before\"\n  and \"after\" lines. If very long lines are encountered, the buffer is\n  automatically enlarged, up to a fixed maximum size.\n\n. The default maximum size of pcre2grep's internal buffer can be set by, for\n  example:\n\n  --with-pcre2grep-max-bufsize=2097152\n\n  The default is either 1048576 or the value of --with-pcre2grep-bufsize,\n  whichever is the larger.\n\n. It is possible to compile pcre2test so that it links with the libreadline\n  or libedit libraries, by specifying, respectively,\n\n  --enable-pcre2test-libreadline or --enable-pcre2test-libedit\n\n  If this is done, when pcre2test's input is from a terminal, it reads it using\n  the readline() function. This provides line-editing and history facilities.\n  Note that libreadline is GPL-licensed, so if you distribute a binary of\n  pcre2test linked in this way, there may be licensing issues. These can be\n  avoided by linking with libedit (which has a BSD licence) instead.\n\n  Enabling libreadline causes the -lreadline option to be added to the\n  pcre2test build. In many operating environments with a system-installed\n  readline library this is sufficient. However, in some environments (e.g. if\n  an unmodified distribution version of readline is in use), it may be\n  necessary to specify something like LIBS=\"-lncurses\" as well. This is\n  because, to quote the readline INSTALL, \"Readline uses the termcap functions,\n  but does not link with the termcap or curses library itself, allowing\n  applications which link with readline the option to choose an appropriate\n  library.\" If you get error messages about missing functions tgetstr, tgetent,\n  tputs, tgetflag, or tgoto, this is the problem, and linking with the ncurses\n  library should fix it.\n\n. The C99 standard defines formatting modifiers z and t for size_t and\n  ptrdiff_t values, respectively. By default, PCRE2 uses these modifiers in\n  environments other than Microsoft Visual Studio versions earlier than 2013\n  when __STDC_VERSION__ is defined and has a value greater than or equal to\n  199901L (indicating C99). However, there is at least one environment that\n  claims to be C99 but does not support these modifiers. If\n  --disable-percent-zt is specified, no use is made of the z or t modifiers.\n  Instead of %td or %zu, %lu is used, with a cast for size_t values.\n\n. There is a special option called --enable-fuzz-support for use by people who\n  want to run fuzzing tests on PCRE2. If set, it causes an extra library\n  called libpcre2-fuzzsupport.a to be built, but not installed. This contains\n  a single function called LLVMFuzzerTestOneInput() whose arguments are a\n  pointer to a string and the length of the string. When called, this function\n  tries to compile the string as a pattern, and if that succeeds, to match\n  it. This is done both with no options and with some random options bits that\n  are generated from the string. Setting --enable-fuzz-support also causes an\n  executable called pcre2fuzzcheck-{8,16,32} to be created. This is normally\n  run under valgrind or used when PCRE2 is compiled with address sanitizing\n  enabled. It calls the fuzzing function and outputs information about what it\n  is doing. The input strings are specified by arguments: if an argument\n  starts with \"=\" the rest of it is a literal input string. Otherwise, it is\n  assumed to be a file name, and the contents of the file are the test string.\n\n. Releases before 10.30 could be compiled with --disable-stack-for-recursion,\n  which caused pcre2_match() to use individual blocks on the heap for\n  backtracking instead of recursive function calls (which use the stack). This\n  is now obsolete because pcre2_match() was refactored always to use the heap\n  (in a much more efficient way than before). This option is retained for\n  backwards compatibility, but has no effect other than to output a warning.\n\nThe \"configure\" script builds the following files for the basic C library:\n\n. Makefile             the makefile that builds the library\n. src/config.h         build-time configuration options for the library\n. src/pcre2.h          the public PCRE2 header file\n. pcre2-config         script that shows the building settings such as CFLAGS\n                         that were set for \"configure\"\n. libpcre2-8.pc        )\n. libpcre2-16.pc       ) data for the pkg-config command\n. libpcre2-32.pc       )\n. libpcre2-posix.pc    )\n. libtool              script that builds shared and/or static libraries\n\nVersions of config.h and pcre2.h are distributed in the src directory of PCRE2\ntarballs under the names config.h.generic and pcre2.h.generic. These are\nprovided for those who have to build PCRE2 without using \"configure\" or CMake.\nIf you use \"configure\" or CMake, the .generic versions are not used.\n\nThe \"configure\" script also creates config.status, which is an executable\nscript that can be run to recreate the configuration, and config.log, which\ncontains compiler output from tests that \"configure\" runs.\n\nOnce \"configure\" has run, you can run \"make\". This builds whichever of the\nlibraries libpcre2-8, libpcre2-16 and libpcre2-32 are configured, and a test\nprogram called pcre2test. If you enabled JIT support with --enable-jit, another\ntest program called pcre2_jit_test is built as well. If the 8-bit library is\nbuilt, libpcre2-posix, pcre2posix_test, and the pcre2grep command are also\nbuilt. Running \"make\" with the -j option may speed up compilation on\nmultiprocessor systems.\n\nThe command \"make check\" runs all the appropriate tests. Details of the PCRE2\ntests are given below in a separate section of this document. The -j option of\n\"make\" can also be used when running the tests.\n\nYou can use \"make install\" to install PCRE2 into live directories on your\nsystem. The following are installed (file names are all relative to the\n<prefix> that is set when \"configure\" is run):\n\n  Commands (bin):\n    pcre2test\n    pcre2grep (if 8-bit support is enabled)\n    pcre2-config\n\n  Libraries (lib):\n    libpcre2-8      (if 8-bit support is enabled)\n    libpcre2-16     (if 16-bit support is enabled)\n    libpcre2-32     (if 32-bit support is enabled)\n    libpcre2-posix  (if 8-bit support is enabled)\n\n  Configuration information (lib/pkgconfig):\n    libpcre2-8.pc\n    libpcre2-16.pc\n    libpcre2-32.pc\n    libpcre2-posix.pc\n\n  Header files (include):\n    pcre2.h\n    pcre2posix.h\n\n  Man pages (share/man/man{1,3}):\n    pcre2grep.1\n    pcre2test.1\n    pcre2-config.1\n    pcre2.3\n    pcre2*.3 (lots more pages, all starting \"pcre2\")\n\n  HTML documentation (share/doc/pcre2/html):\n    index.html\n    *.html (lots more pages, hyperlinked from index.html)\n\n  Text file documentation (share/doc/pcre2):\n    AUTHORS\n    COPYING\n    ChangeLog\n    LICENCE\n    NEWS\n    README\n    SECURITY\n    pcre2.txt         (a concatenation of the man(3) pages)\n    pcre2test.txt     the pcre2test man page\n    pcre2grep.txt     the pcre2grep man page\n    pcre2-config.txt  the pcre2-config man page\n\nIf you want to remove PCRE2 from your system, you can run \"make uninstall\".\nThis removes all the files that \"make install\" installed. However, it does not\nremove any directories, because these are often shared with other programs.\n\n\nRetrieving configuration information\n------------------------------------\n\nRunning \"make install\" installs the command pcre2-config, which can be used to\nrecall information about the PCRE2 configuration and installation. For example:\n\n  pcre2-config --version\n\nprints the version number, and\n\n  pcre2-config --libs8\n\noutputs information about where the 8-bit library is installed. This command\ncan be included in makefiles for programs that use PCRE2, saving the programmer\nfrom having to remember too many details. Run pcre2-config with no arguments to\nobtain a list of possible arguments.\n\nThe pkg-config command is another system for saving and retrieving information\nabout installed libraries. Instead of separate commands for each library, a\nsingle command is used. For example:\n\n  pkg-config --libs libpcre2-16\n\nThe data is held in *.pc files that are installed in a directory called\n<prefix>/lib/pkgconfig.\n\n\nShared libraries\n----------------\n\nThe default distribution builds PCRE2 as shared libraries and static libraries,\nas long as the operating system supports shared libraries. Shared library\nsupport relies on the \"libtool\" script which is built as part of the\n\"configure\" process.\n\nThe libtool script is used to compile and link both shared and static\nlibraries. They are placed in a subdirectory called .libs when they are newly\nbuilt. The programs pcre2test and pcre2grep are built to use these uninstalled\nlibraries (by means of wrapper scripts in the case of shared libraries). When\nyou use \"make install\" to install shared libraries, pcre2grep and pcre2test are\nautomatically re-built to use the newly installed shared libraries before being\ninstalled themselves. However, the versions left in the build directory still\nuse the uninstalled libraries.\n\nTo build PCRE2 using static libraries only you must use --disable-shared when\nconfiguring it. For example:\n\n./configure --prefix=/usr/gnu --disable-shared\n\nThen run \"make\" in the usual way. Similarly, you can use --disable-static to\nbuild only shared libraries. Note, however, that when you build only static\nlibraries, binary programs such as pcre2test and pcre2grep may still be\ndynamically linked with other libraries (for example, libc) unless you set\nLDFLAGS to --static when running \"configure\".\n\n\nCross-compiling using autotools\n-------------------------------\n\nYou can specify CC and CFLAGS in the normal way to the \"configure\" command, in\norder to cross-compile PCRE2 for some other host. However, you should NOT\nspecify --enable-rebuild-chartables, because if you do, the pcre2_dftables.c\nsource file is compiled and run on the local host, in order to generate the\ninbuilt character tables (the pcre2_chartables.c file). This will probably not\nwork, because pcre2_dftables.c needs to be compiled with the local compiler,\nnot the cross compiler.\n\nWhen --enable-rebuild-chartables is not specified, pcre2_chartables.c is\ncreated by making a copy of pcre2_chartables.c.dist, which is a default set of\ntables that assumes ASCII code. Cross-compiling with the default tables should\nnot be a problem.\n\nIf you need to modify the character tables when cross-compiling, you should\nmove pcre2_chartables.c.dist out of the way, then compile pcre2_dftables.c by\nhand and run it on the local host to make a new version of\npcre2_chartables.c.dist. See the pcre2build section \"Creating character tables\nat build time\" for more details.\n\n\nMaking new tarballs\n-------------------\n\nThe command \"make dist\" creates three PCRE2 tarballs, in tar.gz, tar.bz2, and\nzip formats. The command \"make distcheck\" does the same, but then does a trial\nbuild of the new distribution to ensure that it works.\n\nIf you have modified any of the man page sources in the doc directory, you\nshould first run the maint/UpdateAlways script before making a distribution.\nThis script creates the .txt and HTML forms of the documentation from the man\npages.\n\n\nTesting PCRE2\n-------------\n\nTo test the basic PCRE2 library on a Unix-like system, run the RunTest script.\nThere is another script called RunGrepTest that tests the pcre2grep command.\nWhen the 8-bit library is built, a test program for the POSIX wrapper, called\npcre2posix_test, is compiled, and when JIT support is enabled, a test program\ncalled pcre2_jit_test is built. The scripts and the program tests are all run\nwhen you obey \"make check\". For other environments, see the instructions in\nNON-AUTOTOOLS-BUILD.\n\nThe RunTest script runs the pcre2test test program (which is documented in its\nown man page) on each of the relevant testinput files in the testdata\ndirectory, and compares the output with the contents of the corresponding\ntestoutput files. RunTest places its output in directories\ntestoutput{8,16,32}{,-jit,-dfa}. Other files whose names begin with \"test\" are\nused as working files in some tests.\n\nSome tests are relevant only when certain build-time options were selected. For\nexample, the tests for UTF-8/16/32 features are run only when Unicode support\nis available. RunTest outputs a comment when it skips a test.\n\nMany (but not all) of the tests that are not skipped are run twice if JIT\nsupport is available. On the second run, JIT compilation is forced. This\ntesting can be suppressed by putting \"-nojit\" on the RunTest command line.\n\nThe entire set of tests is run once for each of the 8-bit, 16-bit and 32-bit\nlibraries that are enabled. If you want to run just one set of tests, call\nRunTest with either the -8, -16 or -32 option.\n\nIf valgrind is installed, you can run the tests under it by putting \"-valgrind\"\non the RunTest command line. To run pcre2test on just one or more specific test\nfiles, give their numbers as arguments to RunTest, for example:\n\n  RunTest 2 7 11\n\nYou can also specify ranges of tests such as 3-6 or 3- (meaning 3 to the\nend), or a number preceded by ~ to exclude a test. For example:\n\n  Runtest 3-15 ~10\n\nThis runs tests 3 to 15, excluding test 10, and just ~13 runs all the tests\nexcept test 13. Whatever order the arguments are in, the tests are always run\nin numerical order.\n\nYou can also call RunTest with the single argument \"list\" to cause it to output\na list of tests.\n\nThe test sequence starts with \"test 0\", which is a special test that has no\ninput file, and whose output is not checked. This is because it will be\ndifferent on different hardware and with different configurations. The test\nexists in order to exercise some of pcre2test's code that would not otherwise\nbe run.\n\nTests 1 and 2 can always be run, as they expect only plain text strings (not\nUTF) and make no use of Unicode properties. The first test file can be fed\ndirectly into the perltest.sh script to check that Perl gives the same results.\nThe only difference you should see is in the first few lines, where the Perl\nversion is given instead of the PCRE2 version. The second set of tests check\nauxiliary functions, error detection, and run-time flags that are specific to\nPCRE2. It also uses the debugging flags to check some of the internals of\npcre2_compile().\n\nIf you build PCRE2 with a locale setting that is not the standard C locale, the\ncharacter tables may be different (see next paragraph). In some cases, this may\ncause failures in the second set of tests. For example, in a locale where the\nisprint() function yields TRUE for characters in the range 128-255, the use of\n[:isascii:] inside a character class defines a different set of characters, and\nthis shows up in this test as a difference in the compiled code, which is being\nlisted for checking. For example, where the comparison test output contains\n[\\x00-\\x7f] the test might contain [\\x00-\\xff], and similarly in some other\ncases. This is not a bug in PCRE2.\n\nTest 3 checks pcre2_maketables(), the facility for building a set of character\ntables for a specific locale and using them instead of the default tables. The\nscript uses the \"locale\" command to check for the availability of the \"fr_FR\",\n\"french\", or \"fr\" locale, and uses the first one that it finds. If the \"locale\"\ncommand fails, or if its output doesn't include \"fr_FR\", \"french\", or \"fr\" in\nthe list of available locales, the third test cannot be run, and a comment is\noutput to say why. If running this test produces an error like this:\n\n  ** Failed to set locale \"fr_FR\"\n\nit means that the given locale is not available on your system, despite being\nlisted by \"locale\". This does not mean that PCRE2 is broken. There are three\nalternative output files for the third test, because three different versions\nof the French locale have been encountered. The test passes if its output\nmatches any one of them.\n\nTests 4 and 5 check UTF and Unicode property support, test 4 being compatible\nwith the perltest.sh script, and test 5 checking PCRE2-specific things.\n\nTests 6 and 7 check the pcre2_dfa_match() alternative matching function, in\nnon-UTF mode and UTF-mode with Unicode property support, respectively.\n\nTest 8 checks some internal offsets and code size features, but it is run only\nwhen Unicode support is enabled. The output is different in 8-bit, 16-bit, and\n32-bit modes and for different link sizes, so there are different output files\nfor each mode and link size.\n\nTests 9 and 10 are run only in 8-bit mode, and tests 11 and 12 are run only in\n16-bit and 32-bit modes. These are tests that generate different output in\n8-bit mode. Each pair are for general cases and Unicode support, respectively.\n\nTest 13 checks the handling of non-UTF characters greater than 255 by\npcre2_dfa_match() in 16-bit and 32-bit modes.\n\nTest 14 contains some special UTF and UCP tests that give different output for\ndifferent code unit widths.\n\nTest 15 contains a number of tests that must not be run with JIT. They check,\namong other non-JIT things, the match-limiting features of the interpretive\nmatcher.\n\nTest 16 is run only when JIT support is not available. It checks that an\nattempt to use JIT has the expected behaviour.\n\nTest 17 is run only when JIT support is available. It checks JIT complete and\npartial modes, match-limiting under JIT, and other JIT-specific features.\n\nTests 18 and 19 are run only in 8-bit mode. They check the POSIX interface to\nthe 8-bit library, without and with Unicode support, respectively.\n\nTest 20 checks the serialization functions by writing a set of compiled\npatterns to a file, and then reloading and checking them.\n\nTests 21 and 22 test \\C support when the use of \\C is not locked out, without\nand with UTF support, respectively. Test 23 tests \\C when it is locked out.\n\nTests 24 and 25 test the experimental pattern conversion functions, without and\nwith UTF support, respectively.\n\nTest 26 checks Unicode property support using tests that were generated\nautomatically from the Unicode data tables. These are the archived version of\nthe tests from Unicode 15.\n\nTest 27 checks Unicode property support using tests that are generated\nautomatically from the currently-used Unicode data tables.\n\nTest 28 tests EBCDIC support, and is only run when PCRE2 is specifically\ncompiled for EBCDIC. Test 29 tests EBCDIC when NL has been configured to be\n0x25.\n\n\nCharacter tables\n----------------\n\nFor speed, PCRE2 uses four tables for manipulating and identifying characters\nwhose code point values are less than 256. By default, a set of tables that is\nbuilt into the library is used. The pcre2_maketables() function can be called\nby an application to create a new set of tables in the current locale. This are\npassed to PCRE2 by calling pcre2_set_character_tables() to put a pointer into a\ncompile context.\n\nThe source file called pcre2_chartables.c contains the default set of tables.\nBy default, this is created as a copy of pcre2_chartables.c.dist, which\ncontains tables for ASCII coding. However, if --enable-rebuild-chartables is\nspecified for ./configure, a new version of pcre2_chartables.c is built by the\nprogram pcre2_dftables (compiled from pcre2_dftables.c), which uses the ANSI C\ncharacter handling functions such as isalnum(), isalpha(), isupper(),\nislower(), etc. to build the table sources. This means that the default C\nlocale that is set for your system will control the contents of these default\ntables. You can change the default tables by editing pcre2_chartables.c and\nthen re-building PCRE2. If you do this, you should take care to ensure that the\nfile does not get automatically re-generated. The best way to do this is to\nmove pcre2_chartables.c.dist out of the way and replace it with your customized\ntables.\n\nWhen the pcre2_dftables program is run as a result of specifying\n--enable-rebuild-chartables, it uses the default C locale that is set on your\nsystem. It does not pay attention to the LC_xxx environment variables. In other\nwords, it uses the system's default locale rather than whatever the compiling\nuser happens to have set. If you really do want to build a source set of\ncharacter tables in a locale that is specified by the LC_xxx variables, you can\nrun the pcre2_dftables program by hand with the -L option. For example:\n\n  ./pcre2_dftables -L pcre2_chartables.c.special\n\nThe second argument names the file where the source code for the tables is\nwritten. The first two 256-byte tables provide lower casing and case flipping\nfunctions, respectively. The next table consists of a number of 32-byte bit\nmaps which identify certain character classes such as digits, \"word\"\ncharacters, white space, etc. These are used when building 32-byte bit maps\nthat represent character classes for code points less than 256. The final\n256-byte table has bits indicating various character types, as follows:\n\n    1   white space character\n    2   letter\n    4   lower case letter\n    8   decimal digit\n   16   alphanumeric or '_'\n\nYou can also specify -b (with or without -L) when running pcre2_dftables. This\ncauses the tables to be written in binary instead of as source code. A set of\nbinary tables can be loaded into memory by an application and passed to\npcre2_compile() in the same way as tables created dynamically by calling\npcre2_maketables(). The tables are just a string of bytes, independent of\nhardware characteristics such as endianness. This means they can be bundled\nwith an application that runs in different environments, to ensure consistent\nbehaviour.\n\nSee also the pcre2build section \"Creating character tables at build time\".\n\n\nFile manifest\n-------------\n\nThe distribution should contain the files listed below.\n\n(A) Source files for the PCRE2 library functions and their headers are found in\n    the src directory:\n\n  src/pcre2_dftables.c     auxiliary program for building pcre2_chartables.c\n                           when --enable-rebuild-chartables is specified\n\n  src/pcre2_chartables.c.dist  a default set of character tables that assume\n                           ASCII coding; unless --enable-rebuild-chartables is\n                           specified, used by copying to pcre2_chartables.c\n  src/pcre2_chartables.c.ebcdic-1047-{nl15,nl25}  a default set of character\n                           tables for EBCDIC 1047; used if\n                           --enable-ebcdic-ignoring-compiler is specified\n                           without --enable-rebuild-chartables\n\n  src/pcre2posix.c           )\n  src/pcre2_auto_possess.c   )\n  src/pcre2_chkdint.c        )\n  src/pcre2_compile.c        )\n  src/pcre2_compile_cgroup.c )\n  src/pcre2_compile_class.c  )\n  src/pcre2_config.c         )\n  src/pcre2_context.c        )\n  src/pcre2_convert.c        )\n  src/pcre2_dfa_match.c      )\n  src/pcre2_error.c          )\n  src/pcre2_extuni.c         )\n  src/pcre2_find_bracket.c   )\n  src/pcre2_jit_compile.c    )\n  src/pcre2_maketables.c     ) sources for the functions in the library,\n  src/pcre2_match.c          )   and some internal functions that they use\n  src/pcre2_match_data.c     )\n  src/pcre2_match_next.c     )\n  src/pcre2_newline.c        )\n  src/pcre2_ord2utf.c        )\n  src/pcre2_pattern_info.c   )\n  src/pcre2_script_run.c     )\n  src/pcre2_serialize.c      )\n  src/pcre2_string_utils.c   )\n  src/pcre2_study.c          )\n  src/pcre2_substitute.c     )\n  src/pcre2_substring.c      )\n  src/pcre2_tables.c         )\n  src/pcre2_ucd.c            )\n  src/pcre2_valid_utf.c      )\n  src/pcre2_xclass.c         )\n\n  src/pcre2_fuzzsupport.c  function for (optional) fuzzing support\n\n  src/config.h.in          template for config.h, when built by \"configure\"\n  src/pcre2.h.in           template for pcre2.h when built by \"configure\"\n  src/pcre2posix.h         header for the external POSIX wrapper API\n  src/pcre2_compile.h      header for internal use\n  src/pcre2_internal.h     header for internal use\n  src/pcre2_intmodedep.h   a mode-specific internal header\n  src/pcre2_jit_char_inc.h header used by JIT\n  src/pcre2_jit_match_inc.h header used by JIT\n  src/pcre2_jit_misc_inc.h header used by JIT\n  src/pcre2_jit_simd_inc.h header used by JIT\n  src/pcre2_printint_inc.h debugging function that is used by pcre2test\n  src/pcre2_ucp.h          header for Unicode property handling\n  src/pcre2_ucptables_inc.h header with Unicode data tables\n  src/pcre2_util.h         header for internal utils\n\n  deps/sljit/sljit_src/*   source files for the JIT compiler\n\n(B) Source files for programs that use PCRE2:\n\n  src/pcre2demo.c          simple demonstration of coding calls to PCRE2\n  src/pcre2grep.c          source of a grep utility that uses PCRE2\n  src/pcre2test.c          comprehensive test program\n  src/pcre2test_inc.h      header used by pcre2test\n  src/pcre2_jit_test.c     JIT test program\n  src/pcre2posix_test.c    POSIX wrapper API test program\n\n(C) Auxiliary files:\n\n  AUTHORS.md               information about the authors of PCRE2\n  ChangeLog                log of changes to the code\n  HACKING                  some notes about the internals of PCRE2\n  INSTALL                  generic installation instructions\n  LICENCE.md               conditions for the use of PCRE2\n  COPYING                  the same, using GNU's standard name\n  SECURITY.md              information on reporting vulnerabilities\n  Makefile.in              ) template for Unix Makefile, which is built by\n                           )   \"configure\"\n  Makefile.am              ) the automake input that was used to create\n                           )   Makefile.in\n  NEWS                     important changes in this release\n  NON-AUTOTOOLS-BUILD      notes on building PCRE2 without using autotools\n  README                   this file\n  RunTest                  a Unix shell script for running tests\n  RunGrepTest              a Unix shell script for pcre2grep tests\n  RunTest.bat              a Windows batch file for running tests\n  RunGrepTest.bat          a Windows batch file for pcre2grep tests\n  aclocal.m4               m4 macros (generated by \"aclocal\")\n  m4/*                     m4 macros (used by autoconf)\n  configure                a configuring shell script (built by autoconf)\n  configure.ac             ) the autoconf input that was used to build\n                           )   \"configure\" and config.h\n  doc/*.3                  man page sources for PCRE2\n  doc/*.1                  man page sources for pcre2grep and pcre2test\n  doc/html/*               HTML documentation\n  doc/pcre2.txt            plain text version of the man pages\n  doc/pcre2-config.txt     plain text documentation of pcre2-config script\n  doc/pcre2grep.txt        plain text documentation of grep utility program\n  doc/pcre2test.txt        plain text documentation of test program\n  libpcre2-8.pc.in         template for libpcre2-8.pc for pkg-config\n  libpcre2-16.pc.in        template for libpcre2-16.pc for pkg-config\n  libpcre2-32.pc.in        template for libpcre2-32.pc for pkg-config\n  libpcre2-posix.pc.in     template for libpcre2-posix.pc for pkg-config\n  ar-lib                   )\n  config.guess             )\n  config.sub               )\n  depcomp                  ) helper tools generated by libtool and\n  compile                  )   automake, used internally by ./configure\n  install-sh               )\n  ltmain.sh                )\n  missing                  )\n  test-driver              )\n  perltest.sh              Script for running a Perl test program\n  pcre2-config.in          source of script which retains PCRE2 information\n  testdata/testinput*      test data for main library tests\n  testdata/testoutput*     expected test results\n  testdata/grep*           input and output for pcre2grep tests\n  testdata/*               other supporting test files\n  src/libpcre2-8.sym.in     )\n  src/libpcre2-16.sym.in    ) symbol version script templates for the\n  src/libpcre2-32.sym.in    ) GNU, BSD and Sun linkers\n  src/libpcre2-posix.sym.in )\n\n(D) Auxiliary files for CMake support\n\n  cmake/COPYING-CMAKE-SCRIPTS\n  cmake/FindEditline.cmake\n  cmake/FindReadline.cmake\n  cmake/pcre2-config.cmake.in\n  cmake/PCRE2CheckVscript.cmake\n  cmake/PCRE2UseSystemExtensions.cmake\n  cmake/PCRE2WarningAsError.cmake\n  src/config-cmake.h.in\n  CMakeLists.txt\n\n(E) Auxiliary files for building PCRE2 \"by hand\"\n\n  src/pcre2.h.generic     ) a version of the public PCRE2 header file\n                          )   for use in non-\"configure\" environments\n  src/config.h.generic    ) a version of config.h for use in non-\"configure\"\n                          )   environments\n\n(F) Auxiliary files for building PCRE2 using other build systems\n\n  BUILD.bazel             ) files used by the Bazel\n  MODULE.bazel            )   build system\n  build.zig               file used by zig's build system\n\n(G) Auxiliary files for building PCRE2 under OpenVMS\n\n  vms/configure.com       )\n  vms/openvms_readme.txt  ) These files were contributed by a PCRE2 user.\n  vms/pcre2.h_patch       )\n  vms/stdint.h            )\n\n=============================\nLast updated: 15 October 2025\n=============================\n\n"
  },
  {
    "path": "README.md",
    "content": "<picture>\n  <source media=\"(prefers-color-scheme: dark)\" width=\"100%\" height=\"100px\" srcset=\"https://raw.githubusercontent.com/PCRE2Project/pcre2/refs/heads/pages/pages/static/images/pcre2-readme-dark.svg\">\n  <img alt=\"PCRE2: Perl-Compatible Regular Expressions\" width=\"100%\" height=\"100px\" src=\"https://raw.githubusercontent.com/PCRE2Project/pcre2/refs/heads/pages/pages/static/images/pcre2-readme-light.svg\">\n</picture>\n\n## Overview\n\nThe PCRE2 library is a set of C functions that implement **regular expression\npattern matching**.\n\nIt is **self-contained and portable**, and designed to be **easy to embed** into existing\nprojects and build systems, on almost **any platform** or build target.\n\nThe PCRE2 library is **free and open-source** (BSD licence), and permitted in proprietary software.\n\nIt supports Unicode matching and a very wide range of regular expression features. It accepts input in various character encodings, and optionally includes a highly **performant JIT matching engine**.\n\nPCRE2 is **mature and highly-trusted**: bundled in dozens or hundreds of open-source and commercial products, such as Excel, Safari, Apache, and Git, and used as the basis for regular expressions in several programming languages including PHP and R.\n\n<table border=\"0\">\n<tbody>\n<tr>\n<th align=\"left\">Website</th>\n<td>\n\nhttps://pcre2project.github.io/pcre2/\n\n</td>\n</tr>\n<tr>\n<th align=\"left\">Distribution</th>\n<td>\n\n[![GitHub Release](https://img.shields.io/github/v/release/PCRE2Project/pcre2?display_name=release&style=flat-square&label=Latest%20release&color=006094)](https://github.com/PCRE2Project/pcre2/releases)&nbsp;\n[![BSD licence](https://img.shields.io/badge/Licence-BSD%203--clause-006094?style=flat-square)](https://github.com/PCRE2Project/pcre2/blob/main/LICENCE.md)\n\n</tr>\n</tr>\n<tr>\n<th align=\"left\">Testing</th>\n<td>\n\n[![Codecov](https://img.shields.io/codecov/c/github/PCRE2Project/pcre2?component=library&style=flat-square&logo=codecov&label=Coverage&color=009400)](https://app.codecov.io/gh/PCRE2Project/pcre2/components)&nbsp;\n[![Clang Sanitizers](https://img.shields.io/badge/Clang-Sanitizers-262D3A?style=flat-square&logo=llvm&color=006094)](https://github.com/PCRE2Project/pcre2/actions/workflows/dev.yml)&nbsp;\n[![Clang Static Analyzer](https://img.shields.io/badge/Clang-Static%20Analyzer-262D3A?style=flat-square&logo=llvm&color=006094)](https://github.com/PCRE2Project/pcre2/actions/workflows/clang-analyzer.yml)&nbsp;\n[![Valgrind](https://img.shields.io/badge/Valgrind-006094?style=flat-square)](https://github.com/PCRE2Project/pcre2/actions/workflows/dev.yml)&nbsp;\n[![Coverity Scan](https://img.shields.io/coverity/scan/pcre2?style=flat-square&label=Coverity&color=009400)](https://scan.coverity.com/projects/pcre2?tab=overview)&nbsp;\n[![CodeQL](https://img.shields.io/badge/GitHub-CodeQL-006094?style=flat-square)](https://github.com/PCRE2Project/pcre2/actions/workflows/codeql.yml)&nbsp;\n[![OSS-Fuzz](https://img.shields.io/badge/Google-OSS--Fuzz-006094?style=flat-square)](https://google.github.io/oss-fuzz/)&nbsp;\n[![OSSF-Scorecard Score](https://img.shields.io/ossf-scorecard/github.com/PCRE2Project/pcre2?style=flat-square&label=OSSF-Scorecard&color=009400)](https://scorecard.dev/viewer/?uri=github.com%2FPCRE2Project%2Fpcre2)&nbsp;\n\n</td>\n</tr>\n<tr>\n<th align=\"left\">Platforms</th>\n<td>Tested continuously on Linux, Windows, macOS, FreeBSD, OpenBSD, Solaris, z/OS;<br />\nx86, ARM, RISC-V, POWER, S390X; others known to work\n</td>\n</tr>\n</tbody>\n</table>\n\n## Quickstart\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" width=\"787px\" srcset=\"https://github.com/user-attachments/assets/f38bd06c-abda-44bf-a3b1-3f9b59d3a287\">\n  <img alt=\"Recording of a terminal session showing the PCRE2 quickstart; reproduced in text form below\" width=\"787px\" src=\"https://github.com/user-attachments/assets/9d3e9d99-96e3-430a-83c1-e08024d83d27\">\n</picture>\n\n<details>\n<summary>Show script</summary>\n\n```bash session\n# Fetch PCRE2 with 'git clone', or use curl/wget to download a release.\n# Here, let's use git to check out a release tag:\ngit clone https://github.com/PCRE2Project/pcre2.git ./pcre2 \\\n    --branch pcre2-$PCRE2_VERSION \\\n    -c advice.detachedHead=false --depth 1\n\n# If using the JIT, remember to fetch the Git submodule:\n(cd ./pcre2; git submodule update --init)\n\n# Now let's build PCRE2:\n(cd ./pcre2; \\\n    cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug \\\n        -DPCRE2_SUPPORT_JIT=ON -B build; \\\n    cmake --build build/)\n\n# Great, PCRE2 is built.\n\n# Here's a quick little demo to show how we can make use of PCRE2.\n# For a fuller example, see './pcre2/src/pcre2demo.c'.\n# See below for the demo code.\n\n# Compile the demo:\ngcc -g -I./pcre2/build -L./pcre2/build demo.c -o demo -lpcre2-8\n\n# Finally, run our demo:\n./demo 'c.t' 'dogs and cats'\n\n# We fetched, built, and called PCRE2 successfully! :)\n```\n\nFile `demo.c`:\n\n```c\n/* Set PCRE2_CODE_UNIT_WIDTH to indicate we will use 8-bit input. */\n#define PCRE2_CODE_UNIT_WIDTH 8\n#include <pcre2.h>\n\n#include <string.h> /* for strlen */\n#include <stdio.h>  /* for printf */\n\nint main(int argc, char* argv[]) {\n    if (argc != 3) {\n        fprintf(stderr, \"Usage: %s <pattern> <subject>\\n\", argv[0]);\n        return 1;\n    }\n\n    const char *pattern = argv[1];\n    const char *subject = argv[2];\n\n    /* Compile the pattern. */\n    int error_number;\n    PCRE2_SIZE error_offset;\n    pcre2_code *re = pcre2_compile(\n        pattern,               /* the pattern */\n        PCRE2_ZERO_TERMINATED, /* indicates pattern is zero-terminated */\n        0,                     /* default options */\n        &error_number,         /* for error number */\n        &error_offset,         /* for error offset */\n        NULL);                 /* use default compile context */\n    if (re == NULL) {\n        fprintf(stderr, \"Invalid pattern: %s\\n\", pattern);\n        return 1;\n    }\n\n    /* Match the pattern against the subject text. */\n    pcre2_match_data *match_data =\n        pcre2_match_data_create_from_pattern(re, NULL);\n    int rc = pcre2_match(\n        re,                   /* the compiled pattern */\n        subject,              /* the subject text */\n        strlen(subject),      /* the length of the subject */\n        0,                    /* start at offset 0 in the subject */\n        0,                    /* default options */\n        match_data,           /* block for storing the result */\n        NULL);                /* use default match context */\n\n    /* Print the match result. */\n    if (rc == PCRE2_ERROR_NOMATCH) {\n        printf(\"No match\\n\");\n    } else if (rc < 0) {\n        fprintf(stderr, \"Matching error\\n\");\n    } else {\n        PCRE2_SIZE *ovector = pcre2_get_ovector_pointer(match_data);\n        printf(\"Found match: '%.*s'\\n\", (int)(ovector[1] - ovector[0]),\n               subject + ovector[0]);\n    }\n\n    pcre2_match_data_free(match_data);   /* Free resources */\n    pcre2_code_free(re);\n    return 0;\n}\n```\n\n</details>\n\n---\n\nThe main ways of obtaining PCRE2 are:\n\n1. Via Git clone:\n\n    ```\n    git clone https://github.com/PCRE2Project/pcre2.git\n    ```\n\n    Please use a release tag in production, not the development branch!\n\n    Because PCRE2's JIT uses code from a Git submodule, you must check this out after a fresh clone:\n\n    ```\n    git submodule update --init\n    ```\n\n3. Via download of the [release tarball](https://github.com/PCRE2Project/pcre2/releases/latest).\n\n4. Finally, PCRE2 is also bundled by various downstream package managers (such as Linux distributions, or [vcpkg](https://vcpkg.io/)). These are provided by third parties, not the PCRE2 project.\n\nThe main ways of building PCRE2 are:\n\n1. Via CMake (Linux/Windows/macOS, and others)\n\n    ```\n    cd pcre2/\n    cmake -B build .\n    cmake --build build/\n    ```\n\n2. Via Autoconf (Linux/Unix)\n\n    ```\n    cd pcre2/\n    ./configure\n    make\n    ```\n\nSee [\"Platforms\"](#platforms) below for links to more detailed build documentation.\n\n## API Overview\n\nThe PCRE2 API supports strings in 8-bit, 16-bit, and 32-bit encodings, with or without UTF encoding. There is also EBCDIC support.\n\nThe default regular expression dialect closely matches the syntax and behaviour of Perl 5, with PCRE2-specific extensions. A wide variety of granular flags can be passed to the PCRE2 API to customise this to more closely follow other dialects such as JavaScript or Python.\n\nThe default matching engine uses a depth-first tree search with backtracking, which is highly feature-rich but has worst-case exponential time (PCRE2 allows aborting the match if a time limit is exceeded, expressed as a maximum number of steps in the tree search). The second matching engine uses a JIT for greatly improved performance, compiling the regular expression to a block of equivalent native machine code.\n\nPCRE2 has a third matching engine, using a DFA engine which is generally slower, but has worst-case polynomial matching time and is able to find the POSIX-style \"leftmost-longest\" match.\n\nThere are accompanying utility functions for converting glob patterns and POSIX BRE/ERE patterns to PCRE2 regular expressions; and also for performing high-level regular expression operations such as search-and-replace with a powerful replacement string syntax.\n\nAs well as the PCRE2 API, the library also offers a POSIX-compatible `<regex.h>` header and `regexec()` function. However, this does not provide the ability to pass PCRE2 flags, so we recommend users consume the PCRE2 API if possible.\n\nSee the [full library and API documentation](https://pcre2project.github.io/pcre2/doc/) for further details.\n\nFor third-party documentation, see further:\n\n- A curated summary of changes for each PCRE release, and some excellent tutorials on PCRE2 on the\n  [RexEgg website](http://www.rexegg.com/pcre-documentation.html).\n- Jan Goyvaerts' popular Regular-Expressions.info site includes [information about PCRE2](https://www.regular-expressions.info/pcre.html) as well as tutorials and highly detailed comparisons of PCRE2 to other regular expression dialects.\n- Jeffrey Friedl's book [_Mastering Regular Expressions_](https://regex.info/book.html) includes chapters on Perl and PCRE, and is available in print and online via O'Reilly Media.\n\n## Platforms\n\nPCRE2 is portable C code, and is likely to work on any system with a C99 compiler.\n\n<dl>\n<dt>Operating systems</dt>\n<dd>\nOur continuous integration tests on <strong>Linux</strong> (GCC and Clang, glibc and musl), <strong>Windows</strong> (MSVC and MinGW-x64), and <strong>macOS</strong> (Clang), as well as <strong>FreeBSD</strong>, <strong>OpenBSD</strong>, <strong>Solaris</strong> (Oracle Studio <code>cc</code>), and <strong>z/OS</strong> (<code>xlc</code> and <code>ibm-clang</code>).\n</dd>\n<dt>Processors</dt>\n<dd>\nPCRE2 is tested continuously on x86 (i686 and amd64), ARM 32- and 64-bit (armv7 and aarch64), RISC-V (riscv64), POWER (ppc64le), and the big-endian S390x.\n</dd>\n</dl>\n\nOther systems are likely to work (including mobile, embedded platforms, and commercial UNIX systems), but these are not tested continuously by the PCRE2 maintainers. Users are encouraged to run the full PCRE2 test suite when compiling for any new platform. We are aware of working ports to VMS and z/OS (PCRE2 supports EBCDIC).\n\nPCRE2 releases support CMake for building, and for UNIX platforms include a `./configure` script built by Autoconf. Build files for the Bazel build system and `zig build` are also included. Integrating PCRE2 with other systems can be done by including the `.c` files in an existing project.\n\nPlease see the files [README](./README) and [NON-AUTOTOOLS-BUILD](./NON-AUTOTOOLS-BUILD) for full build documentation, as well as the man pages, including [`man pcre2/doc/pcre2build.3`](https://pcre2project.github.io/pcre2/doc/pcre2build/).\n\n## Licence\n\nPCRE2 is released under the **BSD 3-clause licence** with a PCRE2 Exception. It is open-source and also corporate-friendly.\n\n- See [LICENCE](./LICENCE.md) for legal text.\n- See [AUTHORS](./AUTHORS.md) for details of the current maintainers of PCRE2 and acknowledgements of its contributors, including Philip Hazel, the original author.\n\n## Contributing & support\n\nJoin the community by reporting issues or asking questions via [GitHub issues](https://github.com/PCRE2Project/pcre2/issues). We welcome feedback and proposals.\n\nContributions ranging from bug fixes to feature requests are welcome, and can be made via GitHub pull requests.\n\nPlease review our [SECURITY](./SECURITY.md) policy for information on reporting security issues.\n\nRelease announcements will be made via the [pcre2-dev@googlegroups.com](https://groups.google.com/g/pcre2-dev) mailing list, where you can also start discussions about PCRE2 issues and development. You can browse the [list archives](https://groups.google.com/g/pcre2-dev).\n"
  },
  {
    "path": "RunGrepTest",
    "content": "#! /bin/sh\n\n# Run pcre2grep tests. The assumption is that the PCRE2 tests check the library\n# itself. What we are checking here is the file handling and options that are\n# supported by pcre2grep. This script must be run in the build directory.\n\n# CODING CONVENTIONS:\n# * Put printf arguments in single, not double quotes to avoid unwanted\n#     escaping.\n# * Use \\0 for binary zero in printf, not \\x0, for the benefit of older\n#     versions (and use octal for other special values).\n\n# Set the C locale, so that sort(1) behaves predictably.\n\nLC_ALL=C\nexport LC_ALL\n\n# Remove any non-default colouring and aliases that the caller may have set.\n\nunset PCRE2GREP_COLOUR PCRE2GREP_COLOR PCREGREP_COLOUR PCREGREP_COLOR\nunset GREP_COLOR GREP_COLORS\nunset cp ls mv rm\n\n# Remember the current (build) directory, set the program to be tested, and\n# valgrind settings when requested.\n\nbuilddir=`pwd`\n: ${pcre2grep:=$builddir/pcre2grep}\n: ${pcre2test:=$builddir/pcre2test}\n\nif [ ! -x $pcre2grep ] ; then\n  echo \"** $pcre2grep does not exist or is not executable.\"\n  exit 1\nfi\n\nif [ ! -x $pcre2test ] ; then\n  echo \"** $pcre2test does not exist or is not executable.\"\n  exit 1\nfi\n\nvalgrind=\nwhile [ $# -gt 0 ] ; do\n  case $1 in\n    valgrind|-valgrind) valgrind=\"valgrind -q --leak-check=no --smc-check=all-non-file --error-exitcode=70\";;\n    *) echo \"RunGrepTest: Unknown argument $1\"; exit 1;;\n  esac\n  shift\ndone\n\npcre2grep_version=`$pcre2grep -V`\nif [ \"$valgrind\" = \"\" ] ; then\n  echo \"Testing $pcre2grep_version\"\nelse\n  echo \"Testing $pcre2grep_version using valgrind\"\nfi\n\n# Set up a suitable \"diff\" command for comparison. Some systems have a diff\n# that lacks a -u option. Try to deal with this; better do the test for the -b\n# option as well.\n\ncf=\"diff\"\ndiff -b  /dev/null /dev/null 2>/dev/null && cf=\"diff -b\"\ndiff -u  /dev/null /dev/null 2>/dev/null && cf=\"diff -u\"\ndiff -ub /dev/null /dev/null 2>/dev/null && cf=\"diff -ub\"\n\n# Add a -a (always treat as text) if available. This was added in an attempt\n# to get more detail from an Alpine Linux test failure on GitHub.\n\n$cf -a /dev/null /dev/null 2>/dev/null && cf=\"$cf -a\"\n\n# Some tests involve NUL characters. It seems impossible to handle them easily\n# in many operating systems. An earlier version of this script used sed to\n# translate NUL into the string ZERO, but this didn't work on Solaris (aka\n# SunOS), where the version of sed explicitly doesn't like them, and also MacOS\n# (Darwin), OpenBSD, FreeBSD, NetBSD, and some Linux distributions like Alpine,\n# even when using GNU sed. A user suggested using tr instead, which\n# necessitates translating to a single character. However, on (some versions\n# of?) Solaris, the normal \"tr\" cannot handle binary zeros, but if\n# /usr/xpg4/bin/tr is available, it can do so, so test for that.\n\nif [ -x /usr/xpg4/bin/tr ] ; then\n  tr=/usr/xpg4/bin/tr\nelse\n  tr=tr\nfi\n\n# If this test is being run from \"make check\", $srcdir will be set. If not, set\n# it to the current or parent directory, whichever one contains the test data.\n# Subsequently, we run most of the pcre2grep tests in the source directory so\n# that the file names in the output are always the same.\n\nif [ -z \"$srcdir\" -o ! -d \"$srcdir/testdata\" ] ; then\n  if [ -d \"./testdata\" ] ; then\n    srcdir=.\n  elif [ -d \"../testdata\" ] ; then\n    srcdir=..\n  else\n    echo \"Cannot find the testdata directory\"\n    exit 1\n  fi\nfi\n\n# Set up the path to the valgrind JIT suppressions\n\nvjs=\nif [ \"$valgrind\" != \"\" ] ; then\n  $pcre2test -C jit >/dev/null\n  if [ $? -ne 0 ]; then\n    vjs=\"--suppressions=`realpath \"$srcdir\"`/testdata/valgrind-jit.supp\"\n  fi\nfi\n\n# Check for the availability of UTF-8 support\n\n$pcre2test -C unicode >/dev/null\nutf8=$?\n\n# Check default newline convention. If it does not include LF, force LF.\n\nnl=`$pcre2test -C newline`\nif [ \"$nl\" != \"LF\" -a \"$nl\" != \"ANY\" -a \"$nl\" != \"ANYCRLF\" ]; then\n  pcre2grep=\"$pcre2grep -N LF\"\n  echo \"Default newline setting forced to LF\"\nfi\n\n# ------ Function to run and check a special pcre2grep arguments test -------\n\ncheckspecial()\n  {\n  $valgrind $pcre2grep $1 >>testtrygrep 2>&1\n  if [ $? -ne $2 ] ; then\n    echo \"** pcre2grep $1 failed - check testtrygrep\"\n    exit 1\n  fi\n  }\n\n# ------ Normal tests ------\n\necho \"Testing pcre2grep main features\"\n\necho \"---------------------------- Test 1 ------------------------------\" >testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep PATTERN ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 2 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep '^PATTERN' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 3 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -in PATTERN ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 4 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -ic PATTERN ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 5 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -in PATTERN ./testdata/grepinput ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 6 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -inh PATTERN ./testdata/grepinput ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 7 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -il PATTERN ./testdata/grepinput ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 8 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -l PATTERN ./testdata/grepinput ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 9 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -q PATTERN ./testdata/grepinput ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 10 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -q NEVER-PATTERN ./testdata/grepinput ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 11 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -vn pattern ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 12 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -ix pattern ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 13 -----------------------------\" >>testtrygrep\necho seventeen >testtemp1grep\n(cd $srcdir; $valgrind $vjs $pcre2grep -f./testdata/greplist -f $builddir/testtemp1grep ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 14 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -w pat ./testdata/grepinput ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 15 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep 'abc^*' ./testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 16 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep abc ./testdata/grepinput ./testdata/nonexistfile) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 17 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -M 'the\\noutput' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 18 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -Mn '(the\\noutput|dog\\.\\n--)' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 19 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -Mix 'Pattern' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 20 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -Mixn 'complete pair\\nof lines' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 21 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -nA3 'four' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 22 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -nB3 'four' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 23 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -C3 'four' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 24 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -A9 'four' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 25 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -nB9 'four' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 26 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -A9 -B9 'four' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 27 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -A10 'four' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 28 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -nB10 'four' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 29 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -C12 -B10 'four' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 30 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -inB3 'pattern' ./testdata/grepinput ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 31 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -inA3 'pattern' ./testdata/grepinput ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 32 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -L 'fox' ./testdata/grepinput ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 33 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep 'fox' ./testdata/grepnonexist) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 34 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -s 'fox' ./testdata/grepnonexist) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 35 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -L -r --include=grepinputx --include grepinput8 --exclude-dir='^\\.' 'fox' ./testdata | sort) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 36 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -L -r --include='grepinput[^C]' --exclude 'grepinput$' --exclude='grepinput(Bad)?8' --exclude=grepinputM --exclude=grepinputUN --exclude-dir='^\\.' 'fox' ./testdata | sort) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 37 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep  '^(a+)*\\d' ./testdata/grepinput) >>testtrygrep 2>teststderrgrep\necho \"RC=$?\" >>testtrygrep\necho \"======== STDERR ========\" >>testtrygrep\ncat teststderrgrep >>testtrygrep\n\necho \"---------------------------- Test 38 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep '>\\x00<' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 39 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -A1 'before the binary zero' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 40 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -B1 'after the binary zero' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 41 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -B1 -o '\\w+ the binary zero' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 42 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -B1 -onH '\\w+ the binary zero' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 43 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -on 'before|zero|after' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 44 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -on -e before -ezero -e after ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 45 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -on -f ./testdata/greplist -e binary ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 46 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -e 'unopened)' -e abc ./testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -eabc -e '(unclosed' ./testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -eabc -e xyz -e '[unclosed' ./testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --regex=123 -eabc -e xyz -e '[unclosed' ./testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 47 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -Fx \"AB.VE\nelephant\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 48 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -F \"AB.VE\nelephant\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 49 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -F -e DATA -e \"AB.VE\nelephant\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 50 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep \"^(abc|def|ghi|jkl)\" ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 51 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -Mv \"brown\\sfox\" ./testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 52 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --colour=always jumps ./testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 53 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --file-offsets 'before|zero|after' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 54 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --line-offsets 'before|zero|after' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 55 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -f./testdata/greplist --color=always ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 56 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -c --exclude=grepinputC lazy ./testdata/grepinput*) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 57 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -c -l --exclude=grepinputC lazy ./testdata/grepinput*) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 58 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --regex=PATTERN ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 59 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --regexp=PATTERN ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 60 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --regex PATTERN ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 61 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --regexp PATTERN ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 62 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $pcre2grep --match-limit=1000 --no-jit -M 'This is a file(.|\\R)*file.' ./testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 63 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $pcre2grep --recursion-limit=1K --no-jit -M 'This is a file(.|\\R)*file.' ./testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 64 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o1 '(?<=PAT)TERN (ap(pear)s)' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 65 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o2 '(?<=PAT)TERN (ap(pear)s)' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 66 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o3 '(?<=PAT)TERN (ap(pear)s)' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 67 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o12 '(?<=PAT)TERN (ap(pear)s)' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 68 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --only-matching=2 '(?<=PAT)TERN (ap(pear)s)' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 69 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -vn --colour=always pattern ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 70 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --color=always -M \"triple:\\t.*\\n\\n\" ./testdata/grepinput3) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --color=always -M -n \"triple:\\t.*\\n\\n\" ./testdata/grepinput3) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -M \"triple:\\t.*\\n\\n\" ./testdata/grepinput3) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -M -n \"triple:\\t.*\\n\\n\" ./testdata/grepinput3) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 71 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o \"^01|^02|^03\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 72 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --color=always \"^01|^02|^03\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 73 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o --colour=always \"^01|^02|^03\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 74 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o \"^01|02|^03\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 75 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --color=always \"^01|02|^03\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 76 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o --colour=always \"^01|02|^03\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 77 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o \"^01|^02|03\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 78 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --color=always \"^01|^02|03\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 79 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o --colour=always \"^01|^02|03\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 80 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o \"\\b01|\\b02\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 81 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --color=always \"\\\\b01|\\\\b02\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 82 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o --colour=always \"\\\\b01|\\\\b02\" ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 83 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --buffer-size=10 --max-buffer-size=100 \"^a\" ./testdata/grepinput3) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 84 -----------------------------\" >>testtrygrep\necho testdata/grepinput3 >testtemp1grep\n(cd $srcdir; $valgrind $vjs $pcre2grep --file-list ./testdata/grepfilelist --file-list $builddir/testtemp1grep \"fox|complete|t7\") >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 85 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --file-list=./testdata/grepfilelist \"dolor\" ./testdata/grepinput3) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 86 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep \"dog\" ./testdata/grepbinary) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 87 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep \"cat\" ./testdata/grepbinary) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 88 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -v \"cat\" ./testdata/grepbinary) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 89 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -I \"dog\" ./testdata/grepbinary) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 90 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --binary-files=without-match \"dog\" ./testdata/grepbinary) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 91 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -a \"dog\" ./testdata/grepbinary) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 92 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --binary-files=text \"dog\" ./testdata/grepbinary) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 93 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --text \"dog\" ./testdata/grepbinary) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 94 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -L -r --include=grepinputx --include grepinput8 'fox' ./testdata/grepinput* | sort) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 95 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --file-list ./testdata/grepfilelist --exclude grepinputv \"fox|complete\") >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 96 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -L -r --include-dir=testdata --exclude '^(?!grepinput)' --exclude=grepinput[MCU] 'fox' ./test* | sort) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 97 -----------------------------\" >>testtrygrep\necho \"grepinput$\" >testtemp1grep\necho \"grepinput8\" >>testtemp1grep\necho \"grepinputBad8\" >>testtemp1grep\n(cd $srcdir; $valgrind $vjs $pcre2grep -L -r --include=grepinput --exclude=grepinput[MCU] --exclude-from $builddir/testtemp1grep --exclude-dir='^\\.' 'fox' ./testdata | sort) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 98 -----------------------------\" >>testtrygrep\necho \"grepinput$\" >testtemp1grep\necho \"grepinput8\" >>testtemp1grep\necho \"grepinputBad8\" >>testtemp1grep\n(cd $srcdir; $valgrind $vjs $pcre2grep -L -r --exclude=grepinput3 --exclude=grepinput[MCU] --include=grepinput --exclude-from $builddir/testtemp1grep --exclude-dir='^\\.' 'fox' ./testdata | sort) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 99 -----------------------------\" >>testtrygrep\necho \"grepinput$\" >testtemp1grep\necho \"grepinput8\" >testtemp2grep\necho \"grepinputBad8\" >>testtemp1grep\n(cd $srcdir; $valgrind $vjs $pcre2grep -L -r --include grepinput --exclude=grepinput[MCU] --exclude-from $builddir/testtemp1grep --exclude-from=$builddir/testtemp2grep --exclude-dir='^\\.' 'fox' ./testdata | sort) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 100 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -Ho2 --only-matching=1 -o3 '(\\w+) binary (\\w+)(\\.)?' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 101 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o3 -Ho2 -o12 --only-matching=1 -o3 --colour=always --om-separator='|' '(\\w+) binary (\\w+)(\\.)?' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 102 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -n \"^$\" ./testdata/grepinput3) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 103 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --only-matching \"^$\" ./testdata/grepinput3) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 104 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -n --only-matching \"^$\" ./testdata/grepinput3) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 105 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --colour=always \"ipsum|\" ./testdata/grepinput3) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 106 -----------------------------\" >>testtrygrep\n(cd $srcdir; echo \"a\" | $valgrind $vjs $pcre2grep -M \"|a\" ) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 107 -----------------------------\" >>testtrygrep\necho \"a\" >testtemp1grep\necho \"aaaaa\" >>testtemp1grep\n(cd $srcdir; $valgrind $vjs $pcre2grep  --line-offsets --allow-lookaround-bsk '(?<=\\Ka)' $builddir/testtemp1grep) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 108 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -lq PATTERN ./testdata/grepinput ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 109 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -cq --exclude=grepinputC lazy ./testdata/grepinput*) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 110 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --om-separator / -Mo0 -o1 -o2 'match (\\d+):\\n (.)\\n' testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 111 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --line-offsets -M 'match (\\d+):\\n (.)\\n' testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 112 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --file-offsets -M 'match (\\d+):\\n (.)\\n' testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 113 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --total-count --exclude=grepinputC 'the' testdata/grepinput*) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 114 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -tc --exclude=grepinputC 'the' testdata/grepinput*) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 115 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -tlc --exclude=grepinputC 'the' testdata/grepinput*) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 116 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --exclude=grepinput[MCU] -th 'the' testdata/grepinput*) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 117 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -tch --exclude=grepinputC 'the' testdata/grepinput*) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 118 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -tL --exclude=grepinputC 'the' testdata/grepinput*) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 119 -----------------------------\" >>testtrygrep\nprintf '123\\n456\\n789\\n---abc\\ndef\\nxyz\\n---\\n' >testNinputgrep\n$valgrind $vjs $pcre2grep -Mo '(\\n|[^-])*---' testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 120 ------------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -HO '$0:$2$1$3' '(\\w+) binary (\\w+)(\\.)?' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -HO '$&:$2$1$3' '(\\w+) binary (\\w+)(\\.)?' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -m 1 -O '$0:$a$b$e$f$r$t$v' '(\\w+) binary (\\w+)(\\.)?' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -HO '${X}' '(\\w+) binary (\\w+)(\\.)?' ./testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -HO 'XX$' '(\\w+) binary (\\w+)(\\.)?' ./testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -O '$x{12345678}' '(\\w+) binary (\\w+)(\\.)?' ./testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -O '$x{123Z' '(\\w+) binary (\\w+)(\\.)?' ./testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --output '$x{1234}' '(\\w+) binary (\\w+)(\\.)?' ./testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 121 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -F '\\E and (regex)' testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 122 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -w 'cat|dog' testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 123 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -w 'dog|cat' testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 124 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -Mn --colour=always 'start[\\s]+end' testdata/grepinputM) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -Mn --colour=always -A2 'start[\\s]+end' testdata/grepinputM) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -Mn 'start[\\s]+end' testdata/grepinputM) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -Mn -A2 'start[\\s]+end' testdata/grepinputM) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 125 -----------------------------\" >>testtrygrep\nprintf 'abcd\\n' >testNinputgrep\n$valgrind $vjs $pcre2grep --colour=always --allow-lookaround-bsk '(?<=\\K.)' testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep --colour=always --allow-lookaround-bsk '(?=.\\K)' testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep --colour=always --allow-lookaround-bsk '(?<=\\K[ac])' testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep --colour=always --allow-lookaround-bsk '(?=[ac]\\K)' testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\nGREP_COLORS='ms=1;20' $valgrind $vjs $pcre2grep --colour=always --allow-lookaround-bsk '(?=[ac]\\K)' testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 126 -----------------------------\" >>testtrygrep\nprintf 'Next line pattern has binary zero\\nABC\\0XYZ\\n' >testtemp1grep\nprintf 'ABC\\0XYZ\\nABCDEF\\nDEFABC\\n' >testtemp2grep\n$valgrind $vjs $pcre2grep -a -f testtemp1grep testtemp2grep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\nprintf 'Next line pattern is erroneous.\\n^abc)(xy' >testtemp1grep\n$valgrind $vjs $pcre2grep -a -f testtemp1grep testtemp2grep >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 127 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o --om-capture=0 'pattern()()()()' testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 128 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -m1M -o1 --om-capture=0 'pattern()()()()' testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 129 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -m 2 'fox' testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 130 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o -m2 'fox' testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 131 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -oc -m2 'fox' testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 132 -----------------------------\" >>testtrygrep\n(cd $srcdir; exec 3<testdata/grepinput; $valgrind $vjs $pcre2grep -m1 -A3 '^match' <&3; echo '---'; $valgrind $vjs $pcre2grep -m1 '.*' <&3; exec 3<&-) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 133 -----------------------------\" >>testtrygrep\n(cd $srcdir; exec 3<testdata/grepinput; $valgrind $vjs $pcre2grep -m1 -A3 '^match' <&3; echo '---'; $valgrind $vjs $pcre2grep -m1 -A3 '^match' <&3; exec 3<&-) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 134 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --max-count=1 -nH -O '=$x{41}$x423$o{103}$o1045=' 'fox' -) <$srcdir/testdata/grepinputv >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 135 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -HZ 'word' ./testdata/grepinputv) | $tr '\\000' '@' >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -lZ 'word' ./testdata/grepinputv ./testdata/grepinputv) | $tr '\\000' '@' >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -A 1 -B 1 -HZ 'word' ./testdata/grepinputv) | $tr '\\000' '@' >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -MHZn 'start[\\s]+end' testdata/grepinputM) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 136 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -m1MK -o1 --om-capture=0 'pattern()()()()' testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --max-count=1MK -o1 --om-capture=0 'pattern()()()()' testdata/grepinput) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 137 -----------------------------\" >>testtrygrep\nprintf 'Last line\\nhas no newline' >testtemp1grep\n$valgrind $vjs $pcre2grep -A1 Last testtemp1grep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 138 -----------------------------\" >>testtrygrep\nprintf 'AbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\n' >testtemp1grep\n$valgrind $vjs $pcre2grep --no-jit --heap-limit=0 b testtemp1grep >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 139 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --line-buffered 'fox' testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 140 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --buffer-size=10 -A1 'brown' testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 141 -----------------------------\" >>testtrygrep\nprintf \"%s/testdata/grepinputv\\n-\\n\" \"$srcdir\" >testtemp1grep\nprintf 'This is a line from stdin.' >testtemp2grep\n$valgrind $vjs $pcre2grep --file-list testtemp1grep \"line from stdin\" <testtemp2grep >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 142 -----------------------------\" >>testtrygrep\nprintf \"/does/not/exist\\n\" >testtemp1grep\nprintf 'This is a line from stdin.' >testtemp2grep\n$valgrind $vjs $pcre2grep --file-list testtemp1grep \"line from stdin\" >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 143 -----------------------------\" >>testtrygrep\nprintf 'fox|cat' >testtemp1grep\n$valgrind $vjs $pcre2grep -f - $srcdir/testdata/grepinputv <testtemp1grep >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 144 -----------------------------\" >>testtrygrep\n$valgrind $vjs $pcre2grep -f /non/exist $srcdir/testdata/grepinputv >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 145 -----------------------------\" >>testtrygrep\nprintf '*meta*\\rdog.' >testtemp1grep\n$valgrind $vjs $pcre2grep -Ncr -F -f testtemp1grep $srcdir/testdata/grepinputv >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 146 -----------------------------\" >>testtrygrep\nprintf 'A123B' >testtemp1grep\n$valgrind $vjs $pcre2grep -H -e '123|fox' - <testtemp1grep >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep -h -e '123|fox' - $srcdir/testdata/grepinputv <testtemp1grep >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep - $srcdir/testdata/grepinputv <testtemp1grep >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 147 -----------------------------\" >>testtrygrep\n$valgrind $vjs $pcre2grep -e '123|fox' -- -nonfile >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 148 -----------------------------\" >>testtrygrep\n$valgrind $vjs $pcre2grep --nonexist >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep -n-n-bad >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep --context >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep --only-matching --output=xx >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep --colour=badvalue >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep --newline=badvalue >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep -d badvalue >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep -D badvalue >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep --buffer-size=0 >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep --exclude '(badpat' abc /dev/null >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep --exclude-from /non/exist abc /dev/null >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep --include-from /non/exist abc /dev/null >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep --file-list=/non/exist abc /dev/null >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 149 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --binary-files=binary \"dog\" ./testdata/grepbinary) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --binary-files=wrong \"dog\" ./testdata/grepbinary) >>testtrygrep 2>&1\necho \"RC=$?\" >>testtrygrep\n\n# This test runs the code that tests locale support. However, on some systems\n# (e.g. Alpine Linux) there is no locale support and running this test just\n# generates a \"no match\" result. Therefore, we test for locale support, and if\n# it is found missing, we pretend that the test has run as expected so that the\n# output matches.\n\necho \"---------------------------- Test 150 -----------------------------\" >>testtrygrep\nwhich locale >/dev/null 2>&1\nif [ $? -ne 0 ]; then\n  echo \"pcre2grep: Failed to set locale locale.bad (obtained from LC_CTYPE)\" >>testtrygrep\n  echo \"RC=2\" >>testtrygrep\nelse\n\n  (cd $srcdir; unset LC_ALL; LC_CTYPE=locale.bad; export LC_CTYPE; $valgrind $vjs $pcre2grep abc /dev/null >>$builddir/testtrygrep 2>&1) >testtemp1grep 2>&1\n  echo \"RC=$?\" >>testtrygrep\n  shell_errors=`cat testtemp1grep`\n  if [ x\"$shell_errors\" != x ] ; then\n    printf \"shell errors during locale test: \"\n    echo \"$shell_errors\"\n  fi\nfi\n\necho \"---------------------------- Test 151 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep --colour=always -e this -e The -e 'The wo' testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 152 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -nA3 --group-separator='++' 'four' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 153 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -nA3 --no-group-separator 'four' ./testdata/grepinputx) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 154 -----------------------------\" >>testtrygrep\n>testtemp1grep\n(cd $srcdir; $valgrind $vjs $pcre2grep -f $builddir/testtemp1grep ./testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 155 -----------------------------\" >>testtrygrep\necho \"\" >testtemp1grep\n(cd $srcdir; $valgrind $vjs $pcre2grep -f $builddir/testtemp1grep ./testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 156 -----------------------------\" >>testtrygrep\necho \"\" >testtemp1grep\n(cd $srcdir; $valgrind $vjs $pcre2grep --posix-pattern-file --file $builddir/testtemp1grep ./testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 157 -----------------------------\" >>testtrygrep\necho \"spaces \" >testtemp1grep\n(cd $srcdir; $valgrind $vjs $pcre2grep -o --posix-pattern-file --file=$builddir/testtemp1grep ./testdata/grepinputv >$builddir/testtemp2grep && $valgrind $vjs $pcre2grep -q \"s \" $builddir/testtemp2grep) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 158 -----------------------------\" >>testtrygrep\necho \"spaces.\" >testtemp1grep\n(cd $srcdir; $valgrind $vjs $pcre2grep -f $builddir/testtemp1grep ./testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 159 -----------------------------\" >>testtrygrep\nprintf \"spaces.\\r\\n\" >testtemp1grep\n(cd $srcdir; $valgrind $vjs $pcre2grep --posix-pattern-file -f$builddir/testtemp1grep ./testdata/grepinputv) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"---------------------------- Test 160 -----------------------------\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -nC3 '^(ert|jkl)' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n(cd $srcdir; $valgrind $vjs $pcre2grep -n -B4 -A2 '^(ert|dfg)' ./testdata/grepinput) >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\n\n# Now compare the results.\n\n$cf $srcdir/testdata/grepoutput testtrygrep\nif [ $? != 0 ] ; then exit 1; fi\n\n\n# These tests require UTF-8 support\n\nif [ $utf8 -ne 0 ] ; then\n  echo \"Testing pcre2grep UTF-8 features\"\n\n  echo \"---------------------------- Test U1 ------------------------------\" >testtrygrep\n  (cd $srcdir; $valgrind $vjs $pcre2grep -n -u --newline=any \"^X\" ./testdata/grepinput8) >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n\n  echo \"---------------------------- Test U2 ------------------------------\" >>testtrygrep\n  (cd $srcdir; $valgrind $vjs $pcre2grep -n -u -C 3 --newline=any \"Match\" ./testdata/grepinput8) >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n\n  echo \"---------------------------- Test U3 ------------------------------\" >>testtrygrep\n  (cd $srcdir; $valgrind $vjs $pcre2grep --line-offsets -u --newline=any --allow-lookaround-bsk '(?<=\\K\\x{17f})' ./testdata/grepinput8) >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n\n  echo \"---------------------------- Test U4 ------------------------------\" >>testtrygrep\n  (cd $srcdir; $valgrind $vjs $pcre2grep -u -o '....' ./testdata/grepinputBad8) >>testtrygrep 2>&1\n  echo \"RC=$?\" >>testtrygrep\n\n  echo \"---------------------------- Test U5 ------------------------------\" >>testtrygrep\n  (cd $srcdir; $valgrind $vjs $pcre2grep -U -o '....' ./testdata/grepinputBad8) >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n\n  echo \"---------------------------- Test U6 -----------------------------\" >>testtrygrep\n  (cd $srcdir; $valgrind $vjs $pcre2grep -u -m1 -O '=$x{1d3}$o{744}=' 'fox') <$srcdir/testdata/grepinputv >>testtrygrep 2>&1\n  echo \"RC=$?\" >>testtrygrep\n\n  echo \"---------------------------- Test U7 ------------------------------\" >>testtrygrep\n  (cd $srcdir; $valgrind $vjs $pcre2grep -ui --colour=always 'k+|\\babc\\b' ./testdata/grepinput8) >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n\n  echo \"---------------------------- Test U8 ------------------------------\" >>testtrygrep\n  (cd $srcdir; $valgrind $vjs $pcre2grep -UiEP --colour=always 'k+|\\babc\\b' ./testdata/grepinput8) >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n\n  echo \"---------------------------- Test U9 ------------------------------\" >>testtrygrep\n  (cd $srcdir; $valgrind $vjs $pcre2grep -u --colour=always 'A\\d' ./testdata/grepinput8) >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n\n  echo \"---------------------------- Test U10 ------------------------------\" >>testtrygrep\n  (cd $srcdir; $valgrind $vjs $pcre2grep -u --posix-digit --colour=always 'A\\d' ./testdata/grepinput8) >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n\n  $cf $srcdir/testdata/grepoutput8 testtrygrep\n  if [ $? != 0 ] ; then exit 1; fi\n\nelse\n  echo \"Skipping pcre2grep UTF-8 tests: no UTF-8 support in PCRE2 library\"\nfi\n\n\n# We go to some contortions to try to ensure that the tests for the various\n# newline settings will work in environments where the normal newline sequence\n# is not \\n. Do not use exported files, whose line endings might be changed.\n# Instead, create an input file using printf so that its contents are exactly\n# what we want. Note the messy fudge to get printf to write a string that\n# starts with a hyphen. These tests are run in the build directory.\n\necho \"Testing pcre2grep newline settings\"\nprintf 'abc\\rdef\\r\\nghi\\njkl' >testNinputgrep\n\nprintf '%c--------------------------- Test N1 ------------------------------\\r\\n' - >testtrygrep\n$valgrind $vjs $pcre2grep -n -N CR \"^(abc|def|ghi|jkl)\" testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep -B1 -n -N CR \"^def\" testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\nprintf '%c--------------------------- Test N2 ------------------------------\\r\\n' - >>testtrygrep\n$valgrind $vjs $pcre2grep -n --newline=crlf \"^(abc|def|ghi|jkl)\" testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep -B1 -n -N CRLF \"^ghi\" testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\nprintf '%c--------------------------- Test N3 ------------------------------\\r\\n' - >>testtrygrep\npattern=`printf 'def\\rjkl'`\n$valgrind $vjs $pcre2grep -n --newline=cr -F \"$pattern\" testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\nprintf '%c--------------------------- Test N4 ------------------------------\\r\\n' - >>testtrygrep\n$valgrind $vjs $pcre2grep -n --newline=crlf -F -f $srcdir/testdata/greppatN4 testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\nprintf '%c--------------------------- Test N5 ------------------------------\\r\\n' - >>testtrygrep\n$valgrind $vjs $pcre2grep -n --newline=any \"^(abc|def|ghi|jkl)\" testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep -B1 -n --newline=any \"^def\" testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\nprintf '%c--------------------------- Test N6 ------------------------------\\r\\n' - >>testtrygrep\n$valgrind $vjs $pcre2grep -n --newline=anycrlf \"^(abc|def|ghi|jkl)\" testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep -B1 -n --newline=anycrlf \"^jkl\" testNinputgrep >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\nprintf '%c--------------------------- Test N7 ------------------------------\\r\\n' - >>testtrygrep\nprintf 'xyz\\0abc\\0def' >testNinputgrep\n$valgrind $vjs $pcre2grep -na --newline=nul \"^(abc|def)\" testNinputgrep | $tr '\\000' '@' >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n$valgrind $vjs $pcre2grep -B1 -na --newline=nul \"^(abc|def)\" testNinputgrep | $tr '\\000' '@' >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\nprintf '%c--------------------------- Test N8 ------------------------------\\r\\n' - >>testtrygrep\n$valgrind $vjs $pcre2grep -na --newline=anycrlf \"^a\" $srcdir/testdata/grepinputBad8_Trail >>testtrygrep\necho \"RC=$?\" >>testtrygrep\n\necho \"\" >>testtrygrep\n\n$cf $srcdir/testdata/grepoutputN testtrygrep\nif [ $? != 0 ] ; then exit 1; fi\n\n\n# These newline tests need UTF support.\n\nif [ $utf8 -ne 0 ] ; then\n  echo \"Testing pcre2grep newline settings with UTF-8 features\"\n\n  printf '%c--------------------------- Test UN1 ------------------------------\\r\\n' - >testtrygrep\n  $valgrind $vjs $pcre2grep -nau --newline=anycrlf \"^(abc|def)\" $srcdir/testdata/grepinputUN >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n\n  printf '%c--------------------------- Test UN2 ------------------------------\\r\\n' - >testtrygrep\n  $valgrind $vjs $pcre2grep -nauU --newline=anycrlf \"^a\" $srcdir/testdata/grepinputBad8_Trail >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n\n  echo \"\" >>testtrygrep\n\n  $cf $srcdir/testdata/grepoutputUN testtrygrep\n  if [ $? != 0 ] ; then exit 1; fi\nelse\n  echo \"Skipping pcre2grep newline UTF-8 tests: no UTF-8 support in PCRE2 library\"\nfi\n\n\n# If pcre2grep supports script callouts, run some tests on them. It is possible\n# to restrict these callouts to the non-fork case, either for security, or for\n# environments that do not support fork(). This is handled by comparing to a\n# different output.\n\nif $valgrind $vjs $pcre2grep --help | $valgrind $vjs $pcre2grep -q 'callout scripts in patterns are supported'; then\n  echo \"Testing pcre2grep script callouts\"\n  echo \"--- Test 1 ---\" >testtrygrep\n  $valgrind $vjs $pcre2grep '(T)(..(.))(?C\"/bin/echo|Arg1: [$1] [$2] [$3]|Arg2: $|${1}$| ($4) ($14) ($0)\")()' $srcdir/testdata/grepinputv >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n  echo \"--- Test 2 ---\" >>testtrygrep\n  $valgrind $vjs $pcre2grep '(T)(..(.))()()()()()()()(..)(?C\"/bin/echo|Arg1: [$11] [${11}]\")' $srcdir/testdata/grepinputv >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n  echo \"--- Test 3 ---\" >>testtrygrep\n  $valgrind $vjs $pcre2grep '(T)(?C\"|$0:$1$n\")' $srcdir/testdata/grepinputv >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n  echo \"--- Test 4 ---\" >>testtrygrep\n  $valgrind $vjs $pcre2grep '(T)(?C\"/bin/echo|$0:$1$n\")' $srcdir/testdata/grepinputv >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n  echo \"--- Test 5 ---\" >>testtrygrep\n  $valgrind $vjs $pcre2grep '(T)(?C\"|$1$n\")(*F)' $srcdir/testdata/grepinputv >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n  echo \"--- Test 6 ---\" >>testtrygrep\n  $valgrind $vjs $pcre2grep -m1 '(T)(?C\"|$0:$1:$x{41}$o{101}$n\")' $srcdir/testdata/grepinputv >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n\n  if $valgrind $vjs $pcre2grep --help | $valgrind $vjs $pcre2grep -q 'Non-fork callout scripts in patterns are supported'; then\n    nonfork=1\n    $cf $srcdir/testdata/grepoutputCN testtrygrep\n  else\n    nonfork=0\n    $cf $srcdir/testdata/grepoutputC testtrygrep\n  fi\n  if [ $? != 0 ] ; then exit 1; fi\n\n  # These callout tests need UTF support.\n\n  if [ $utf8 -ne 0 ] ; then\n    echo \"Testing pcre2grep script callout with UTF-8 features\"\n    echo \"--- Test 1 ---\" >testtrygrep\n    $valgrind $vjs $pcre2grep -u '(T)(?C\"|$0:$x{a6}$n\")' $srcdir/testdata/grepinputv >>testtrygrep\n    echo \"RC=$?\" >>testtrygrep\n    echo \"--- Test 2 ---\" >>testtrygrep\n    $valgrind $vjs $pcre2grep -u '(T)(?C\"/bin/echo|$0:$x{a6}$n\")' $srcdir/testdata/grepinputv >>testtrygrep\n    echo \"RC=$?\" >>testtrygrep\n\n    if [ $nonfork = 1 ] ; then\n      $cf $srcdir/testdata/grepoutputCNU testtrygrep\n    else\n      $cf $srcdir/testdata/grepoutputCU testtrygrep\n    fi\n    if [ $? != 0 ] ; then exit 1; fi\n  else\n    echo \"Skipping pcre2grep script callout UTF-8 tests: no UTF-8 support in PCRE2 library\"\n  fi\n\n  unset nonfork\nelse\n  echo \"Script callouts are not supported\"\nfi\n\n\n# Test reading .gz and .bz2 files when supported.\n\nif $valgrind $vjs $pcre2grep --help | $valgrind $vjs $pcre2grep -q '\\.gz are read using zlib'; then\n  echo \"Testing reading .gz file\"\n  $valgrind $vjs $pcre2grep 'one|two' $srcdir/testdata/grepinputC.gz >testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n  $cf $srcdir/testdata/grepoutputCgz testtrygrep\n  if [ $? != 0 ] ; then exit 1; fi\nfi\n\nif $valgrind $vjs $pcre2grep --help | $valgrind $vjs $pcre2grep -q '\\.bz2 are read using bzlib2'; then\n  echo \"Testing reading .bz2 file\"\n  $valgrind $vjs $pcre2grep 'one|two' $srcdir/testdata/grepinputC.bz2 >testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n  $valgrind $vjs $pcre2grep 'one|two' $srcdir/testdata/grepnot.bz2 >>testtrygrep\n  echo \"RC=$?\" >>testtrygrep\n  $cf $srcdir/testdata/grepoutputCbz2 testtrygrep\n  if [ $? != 0 ] ; then exit 1; fi\nfi\n\n\n# Finally, some tests to exercise code that is not tested above, just to be\n# sure that it runs OK. Doing this improves the coverage statistics. The output\n# is not checked.\n\necho \"Testing miscellaneous pcre2grep arguments (unchecked)\"\necho '' >testtrygrep\ncheckspecial '-xxxxx' 2\ncheckspecial '--help' 0\ncheckspecial '--line-buffered --colour=auto abc /dev/null' 1\ncheckspecial '--line-buffered --color abc /dev/null' 1\ncheckspecial '-dskip abc .' 1\ncheckspecial '-Dread -Dskip abc /dev/null' 1\ncheckspecial \"-f $srcdir/testdata/greplistBad /dev/null\" 2\ncheckspecial \"(unpaired /dev/null\" 2\ncheckspecial \"-e (unpaired1 -e (unpaired2 /dev/null\" 2\n\n# Clean up local working files\nrm -f testNinputgrep teststderrgrep testtrygrep testtemp1grep testtemp2grep\n\nexit 0\n\n# End\n"
  },
  {
    "path": "RunGrepTest.bat",
    "content": "@echo off\r\n\r\n:: Run pcre2grep tests. The assumption is that the PCRE2 tests check the library\r\n:: itself. What we are checking here is the file handling and options that are\r\n:: supported by pcre2grep. This script must be run in the build directory.\r\n:: (jmh: I've only tested in the main directory, using my own builds.)\r\n\r\nsetlocal enabledelayedexpansion\r\n\r\n:: Remove any non-default colouring that the caller may have set.\r\n\r\nset PCRE2GREP_COLOUR=\r\nset PCRE2GREP_COLOR=\r\nset PCREGREP_COLOUR=\r\nset PCREGREP_COLOR=\r\nset GREP_COLORS=\r\nset GREP_COLOR=\r\n\r\n:: Remember the current (build) directory and set the program to be tested.\r\n\r\nset builddir=\"%CD%\"\r\n\r\nif [%pcre2grep%]==[] set pcre2grep=%builddir%\\pcre2grep.exe\r\nif [%pcre2test%]==[] set pcre2test=%builddir%\\pcre2test.exe\r\n\r\nif NOT exist %pcre2grep% (\r\n  echo ** %pcre2grep% does not exist.\r\n  exit /b 1\r\n)\r\n\r\nif NOT exist %pcre2test% (\r\n  echo ** %pcre2test% does not exist.\r\n  exit /b 1\r\n)\r\n\r\nfor /f \"delims=\" %%a in ('\"%pcre2grep%\" -V') do set pcre2grep_version=%%a\r\necho Testing %pcre2grep_version%\r\n\r\n:: Set up a suitable \"diff\" command for comparison. Some systems have a diff\r\n:: that lacks a -u option. Try to deal with this; better do the test for the -b\r\n:: option as well. Use FC if there's no diff, taking care to ignore equality.\r\n\r\nset cf=\r\nset cfout=\r\ndiff -b  nul nul 2>nul && set cf=diff -b\r\ndiff -u  nul nul 2>nul && set cf=diff -u\r\ndiff -ub nul nul 2>nul && set cf=diff -ub\r\nif NOT defined cf (\r\n  set cf=fc /n\r\n  set \"cfout=>testcf || (type testcf & cmd /c exit /b 1)\"\r\n)\r\n\r\n:: Set srcdir to the current or parent directory, whichever one contains the\r\n:: test data. Subsequently, we run most of the pcre2grep tests in the source\r\n:: directory so that the file names in the output are always the same.\r\n\r\nif NOT defined srcdir set srcdir=.\r\nif NOT exist %srcdir%\\testdata\\ (\r\n  if exist testdata\\ (\r\n    set srcdir=.\r\n  ) else if exist ..\\testdata\\ (\r\n    set srcdir=..\r\n  ) else if exist ..\\..\\testdata\\ (\r\n    set srcdir=..\\..\r\n  ) else (\r\n    echo Cannot find the testdata directory\r\n    exit /b 1\r\n  )\r\n)\r\n\r\n:: Check for the availability of UTF-8 support\r\n\r\n%pcre2test% -C unicode >nul\r\nset utf8=%ERRORLEVEL%\r\n\r\n:: Check default newline convention. If it does not include LF, force LF.\r\n\r\nfor /f %%a in ('\"%pcre2test%\" -C newline') do set nl=%%a\r\nif NOT \"%nl%\" == \"LF\" if NOT \"%nl%\" == \"ANY\" if NOT \"%nl%\" == \"ANYCRLF\" (\r\n  set pcre2grep=%pcre2grep% -N LF\r\n  echo Default newline setting forced to LF\r\n)\r\n\r\n:: Create a simple printf via cscript/JScript (an actual printf may translate\r\n:: LF to CRLF, which this one does not).  We only support the barebones we need:\r\n:: \\r, \\n, \\0, and %s (but only once).\r\n\r\necho WScript.StdOut.Write(WScript.Arguments(0).replace(/\\\\r/g, \"\\r\").replace(/\\\\n/g, \"\\n\").replace(/\\\\0/g, \"\\x00\").replace(/%%s/g, function() { return WScript.Arguments(1) })) >printf.js\r\nset printf=cscript //nologo printf.js\r\n\r\n:: Create a simple 'tr' via cscript/JScript.\r\necho WScript.StdOut.Write(WScript.StdIn.ReadAll().replace(/\\x00/g, \"@\")) >trnull.js\r\nset trnull=cscript //nologo trnull.js\r\n\r\n:: ------ Normal tests ------\r\n\r\necho Testing pcre2grep main features\r\n\r\necho ---------------------------- Test 1 ------------------------------>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% PATTERN ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 2 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% \"^PATTERN\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 3 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -in PATTERN ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 4 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -ic PATTERN ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 5 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -in PATTERN ./testdata/grepinput ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 6 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -inh PATTERN ./testdata/grepinput ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 7 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -il PATTERN ./testdata/grepinput ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 8 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -l PATTERN ./testdata/grepinput ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 9 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -q PATTERN ./testdata/grepinput ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 10 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -q NEVER-PATTERN ./testdata/grepinput ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 11 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -vn pattern ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 12 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -ix pattern ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 13 ----------------------------->>testtrygrep\r\necho seventeen >testtemp1grep\r\n(pushd %srcdir% & %pcre2grep% -f./testdata/greplist -f %builddir%\\testtemp1grep ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 14 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -w pat ./testdata/grepinput ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 15 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% \"abc^*\" ./testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 16 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% abc ./testdata/grepinput ./testdata/nonexistfile & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 17 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -M \"the\\noutput\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 18 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -Mn \"(the\\noutput|dog\\.\\n--)\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 19 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -Mix \"Pattern\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 20 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -Mixn \"complete pair\\nof lines\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 21 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -nA3 \"four\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 22 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -nB3 \"four\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 23 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -C3 \"four\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 24 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -A9 \"four\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 25 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -nB9 \"four\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 26 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -A9 -B9 \"four\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 27 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -A10 \"four\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 28 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -nB10 \"four\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 29 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -C12 -B10 \"four\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 30 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -inB3 \"pattern\" ./testdata/grepinput ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 31 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -inA3 \"pattern\" ./testdata/grepinput ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 32 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -L \"fox\" ./testdata/grepinput ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 33 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% \"fox\" ./testdata/grepnonexist & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 34 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -s \"fox\" ./testdata/grepnonexist & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 35 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -L -r --include=grepinputx --include grepinput8 --exclude-dir=\"^\\.\" \"fox\" ./testdata | sort & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 36 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -L -r --include=\"grepinput[^C]\" --exclude \"grepinput$\" --exclude=\"grepinput(Bad)?8\" --exclude=grepinputM --exclude=grepinputUN --exclude-dir=\"^\\.\" \"fox\" ./testdata | sort & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 37 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep%  \"^(a+)*\\d\" ./testdata/grepinput & popd) >>testtrygrep 2>teststderrgrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\necho ======== STDERR ========>>testtrygrep\r\ntype teststderrgrep >>testtrygrep\r\n\r\necho ---------------------------- Test 38 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% \">\\x00<\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 39 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -A1 \"before the binary zero\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 40 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -B1 \"after the binary zero\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 41 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -B1 -o \"\\w+ the binary zero\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 42 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -B1 -onH \"\\w+ the binary zero\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 43 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -on \"before|zero|after\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 44 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -on -e before -ezero -e after ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 45 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -on -f ./testdata/greplist -e binary ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 46 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -e \"unopened)\" -e abc ./testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -eabc -e \"(unclosed\" ./testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -eabc -e xyz -e \"[unclosed\" ./testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --regex=123 -eabc -e xyz -e \"[unclosed\" ./testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 47 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -Fx AB.VE^\r\n\r\nelephant ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 48 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -F AB.VE^\r\n\r\nelephant ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 49 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -F -e DATA -e AB.VE^\r\n\r\nelephant ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 50 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% \"^(abc|def|ghi|jkl)\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 51 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -Mv \"brown\\sfox\" ./testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 52 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --colour=always jumps ./testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 53 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --file-offsets \"before|zero|after\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 54 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --line-offsets \"before|zero|after\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 55 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -f./testdata/greplist --color=always ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 56 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -c --exclude=grepinputC lazy ./testdata/grepinput* & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 57 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -c -l --exclude=grepinputC lazy ./testdata/grepinput* & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 58 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --regex=PATTERN ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 59 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --regexp=PATTERN ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 60 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --regex PATTERN ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 61 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --regexp PATTERN ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 62 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --match-limit=1000 --no-jit -M \"This is a file(.|\\R)*file.\" ./testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 63 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --recursion-limit=1000 --no-jit -M \"This is a file(.|\\R)*file.\" ./testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 64 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o1 \"(?<=PAT)TERN (ap(pear)s)\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 65 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o2 \"(?<=PAT)TERN (ap(pear)s)\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 66 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o3 \"(?<=PAT)TERN (ap(pear)s)\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 67 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o12 \"(?<=PAT)TERN (ap(pear)s)\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 68 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --only-matching=2 \"(?<=PAT)TERN (ap(pear)s)\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 69 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -vn --colour=always pattern ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 70 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --color=always -M \"triple:\\t.*\\n\\n\" ./testdata/grepinput3 & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --color=always -M -n \"triple:\\t.*\\n\\n\" ./testdata/grepinput3 & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -M \"triple:\\t.*\\n\\n\" ./testdata/grepinput3 & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -M -n \"triple:\\t.*\\n\\n\" ./testdata/grepinput3 & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 71 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o \"^01|^02|^03\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 72 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --color=always \"^01|^02|^03\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 73 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o --colour=always \"^01|^02|^03\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 74 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o \"^01|02|^03\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 75 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --color=always \"^01|02|^03\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 76 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o --colour=always \"^01|02|^03\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 77 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o \"^01|^02|03\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 78 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --color=always \"^01|^02|03\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 79 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o --colour=always \"^01|^02|03\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 80 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o \"\\b01|\\b02\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 81 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --color=always \"\\b01|\\b02\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 82 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o --colour=always \"\\b01|\\b02\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 83 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --buffer-size=10 --max-buffer-size=100 \"^a\" ./testdata/grepinput3 & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 84 ----------------------------->>testtrygrep\r\necho testdata/grepinput3 >testtemp1grep\r\n(pushd %srcdir% & %pcre2grep% --file-list ./testdata/grepfilelist --file-list %builddir%\\testtemp1grep \"fox|complete|t7\" & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 85 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --file-list=./testdata/grepfilelist \"dolor\" ./testdata/grepinput3 & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 86 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% \"dog\" ./testdata/grepbinary & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 87 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% \"cat\" ./testdata/grepbinary & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 88 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -v \"cat\" ./testdata/grepbinary & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 89 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -I \"dog\" ./testdata/grepbinary & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 90 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --binary-files=without-match \"dog\" ./testdata/grepbinary & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 91 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -a \"dog\" ./testdata/grepbinary & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 92 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --binary-files=text \"dog\" ./testdata/grepbinary & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 93 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --text \"dog\" ./testdata/grepbinary & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 94 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -L -r --include=grepinputx --include grepinput8 \"fox\" ./testdata/grepinput* | sort & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 95 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --file-list ./testdata/grepfilelist --exclude grepinputv \"fox|complete\" & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 96 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -L -r --include-dir=testdata --exclude \"^^(?^!grepinput)\" --exclude=grepinput[MCU] \"fox\" ./test* | sort & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 97 ----------------------------->>testtrygrep\r\necho grepinput$>testtemp1grep\r\necho grepinput8>>testtemp1grep\r\necho grepinputBad8>>testtemp1grep\r\n(pushd %srcdir% & %pcre2grep% -L -r --include=grepinput --exclude=grepinput[MCU] --exclude-from %builddir%\\testtemp1grep --exclude-dir=\"^\\.\" \"fox\" ./testdata | sort & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 98 ----------------------------->>testtrygrep\r\necho grepinput$>testtemp1grep\r\necho grepinput8>>testtemp1grep\r\necho grepinputBad8>>testtemp1grep\r\n(pushd %srcdir% & %pcre2grep% -L -r --exclude=grepinput3 --exclude=grepinput[MCU] --include=grepinput --exclude-from %builddir%\\testtemp1grep --exclude-dir=\"^\\.\" \"fox\" ./testdata | sort & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 99 ----------------------------->>testtrygrep\r\necho grepinput$>testtemp1grep\r\necho grepinput8>testtemp2grep\r\necho grepinputBad8>>testtemp1grep\r\n(pushd %srcdir% & %pcre2grep% -L -r --include grepinput --exclude=grepinput[MCU] --exclude-from %builddir%\\testtemp1grep --exclude-from=%builddir%\\testtemp2grep --exclude-dir=\"^\\.\" \"fox\" ./testdata | sort & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 100 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -Ho2 --only-matching=1 -o3 \"(\\w+) binary (\\w+)(\\.)?\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 101 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o3 -Ho2 -o12 --only-matching=1 -o3 --colour=always --om-separator=\"|\" \"(\\w+) binary (\\w+)(\\.)?\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 102 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -n \"^$\" ./testdata/grepinput3 & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 103 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --only-matching \"^$\" ./testdata/grepinput3 & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 104 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -n --only-matching \"^$\" ./testdata/grepinput3 & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 105 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --colour=always \"ipsum|\" ./testdata/grepinput3 & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 106 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & echo a| %pcre2grep% -M \"|a\" & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 107 ----------------------------->>testtrygrep\r\necho a>testtemp1grep\r\necho aaaaa>>testtemp1grep\r\n(pushd %srcdir% & %pcre2grep%  --line-offsets --allow-lookaround-bsk \"(?<=\\Ka)\" %builddir%\\testtemp1grep & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 108 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -lq PATTERN ./testdata/grepinput ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 109 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -cq --exclude=grepinputC lazy ./testdata/grepinput* & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 110 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --om-separator / -Mo0 -o1 -o2 \"match (\\d+):\\n (.)\\n\" testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 111 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --line-offsets -M \"match (\\d+):\\n (.)\\n\" testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 112 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --file-offsets -M \"match (\\d+):\\n (.)\\n\" testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 113 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --total-count --exclude=grepinputC \"the\" testdata/grepinput* & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 114 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -tc --exclude=grepinputC \"the\" testdata/grepinput* & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 115 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -tlc --exclude=grepinputC \"the\" testdata/grepinput* & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 116 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --exclude=grepinput[MCU] -th \"the\" testdata/grepinput* & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 117 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -tch --exclude=grepinputC \"the\" testdata/grepinput* & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 118 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -tL --exclude=grepinputC \"the\" testdata/grepinput* & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 119 ----------------------------->>testtrygrep\r\n%printf% \"123\\n456\\n789\\n---abc\\ndef\\nxyz\\n---\\n\" >testNinputgrep\r\n%pcre2grep% -Mo \"(\\n|[^-])*---\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 120 ------------------------------>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -HO \"$0:$2$1$3\" \"(\\w+) binary (\\w+)(\\.)?\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -HO \"$&:$2$1$3\" \"(\\w+) binary (\\w+)(\\.)?\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -m 1 -O \"$0:$a$b$e$f$r$t$v\" \"(\\w+) binary (\\w+)(\\.)?\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -HO \"${X}\" \"(\\w+) binary (\\w+)(\\.)?\" ./testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -HO \"XX$\" \"(\\w+) binary (\\w+)(\\.)?\" ./testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -O \"$x{12345678}\" \"(\\w+) binary (\\w+)(\\.)?\" ./testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -O \"$x{123Z\" \"(\\w+) binary (\\w+)(\\.)?\" ./testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --output \"$x{1234}\" \"(\\w+) binary (\\w+)(\\.)?\" ./testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 121 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -F \"\\E and (regex)\" testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 122 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -w \"cat|dog\" testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 123 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -w \"dog|cat\" testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 124 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -Mn --colour=always \"start[\\s]+end\" testdata/grepinputM & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -Mn --colour=always -A2 \"start[\\s]+end\" testdata/grepinputM & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -Mn \"start[\\s]+end\" testdata/grepinputM & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -Mn -A2 \"start[\\s]+end\" testdata/grepinputM & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 125 ----------------------------->>testtrygrep\r\n%printf% \"abcd\\n\" >testNinputgrep\r\n%pcre2grep% --colour=always --allow-lookaround-bsk \"(?<=\\K.)\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% --colour=always --allow-lookaround-bsk \"(?=.\\K)\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% --colour=always --allow-lookaround-bsk \"(?<=\\K[ac])\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% --colour=always --allow-lookaround-bsk \"(?=[ac]\\K)\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\nset GREP_COLORS=ms=1;20\r\n%pcre2grep% --colour=always --allow-lookaround-bsk \"(?=[ac]\\K)\" testNinputgrep >>testtrygrep\r\nset GREP_COLORS=\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 126 ----------------------------->>testtrygrep\r\n%printf% \"Next line pattern has binary zero\\nABC\\0XYZ\\n\" >testtemp1grep\r\n%printf% \"ABC\\0XYZ\\nABCDEF\\nDEFABC\\n\" >testtemp2grep\r\n%pcre2grep% -a -f testtemp1grep testtemp2grep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%printf% \"Next line pattern is erroneous.\\n^abc)(xy\" >testtemp1grep\r\n%pcre2grep% -a -f testtemp1grep testtemp2grep >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 127 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o --om-capture=0 \"pattern()()()()\" testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 128 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -m1M -o1 --om-capture=0 \"pattern()()()()\" testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 129 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -m 2 \"fox\" testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 130 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -o -m2 \"fox\" testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 131 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -oc -m2 \"fox\" testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 132 ----------------------------->>testtrygrep\r\n:: The Unix tests use fd3 here, but Windows only has StdIn/StdOut/StdErr (which, at the kernel\r\n:: level, are not even numbered). Use a subshell instead.\r\n(pushd %srcdir% & (%pcre2grep% -m1 -A3 \"^match\" & echo ---& %pcre2grep% -m1 \".*\") <testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 133 ----------------------------->>testtrygrep\r\n:: The Unix tests use fd3 here, but Windows only has StdIn/StdOut/StdErr (which, at the kernel\r\n:: level, are not even numbered). Use a subshell instead.\r\n(pushd %srcdir% & (%pcre2grep% -m1 -A3 \"^match\" & echo ---& %pcre2grep% -m1 -A3 \"^match\") <testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 134 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --max-count=1 -nH -O \"=$x{41}$x423$o{103}$o1045=\" \"fox\" - & popd) <%srcdir%\\testdata\\grepinputv >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 135 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -HZ \"word\" ./testdata/grepinputv & popd) | %trnull% >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -lZ \"word\" ./testdata/grepinputv ./testdata/grepinputv & popd) | %trnull% >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -A 1 -B 1 -HZ \"word\" ./testdata/grepinputv & popd) | %trnull% >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -MHZn \"start[\\s]+end\" testdata/grepinputM & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 136 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -m1MK -o1 --om-capture=0 \"pattern()()()()\" testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --max-count=1MK -o1 --om-capture=0 \"pattern()()()()\" testdata/grepinput & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 137 ----------------------------->>testtrygrep\r\n%printf% \"Last line\\nhas no newline\" >testtemp1grep\r\n%pcre2grep% -A1 Last testtemp1grep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 138 ----------------------------->>testtrygrep\r\n%printf% \"AbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\nAbC\\n\" >testtemp1grep\r\n%pcre2grep% --no-jit --heap-limit=0 b testtemp1grep >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 139 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --line-buffered \"fox\" testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 140 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --buffer-size=10 -A1 \"brown\" testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 141 ----------------------------->>testtrygrep\r\n%printf% \"%%s\\testdata\\grepinputv\\n-\\n\" \"%srcdir%\" >testtemp1grep\r\n%printf% \"This is a line from stdin.\" >testtemp2grep\r\n%pcre2grep% --file-list testtemp1grep \"line from stdin\" <testtemp2grep >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 142 ----------------------------->>testtrygrep\r\n%printf% \"/does/not/exist\\n\" >testtemp1grep\r\n%printf% \"This is a line from stdin.\" >testtemp2grep\r\n%pcre2grep% --file-list testtemp1grep \"line from stdin\" >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 143 ----------------------------->>testtrygrep\r\n%printf% \"fox|cat\" >testtemp1grep\r\n%pcre2grep% -f - %srcdir%\\testdata\\grepinputv <testtemp1grep >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 144 ----------------------------->>testtrygrep\r\n%pcre2grep% -f /non/exist %srcdir%\\testdata\\grepinputv >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 145 ----------------------------->>testtrygrep\r\n%printf% \"*meta*\\rdog.\" >testtemp1grep\r\n%pcre2grep% -Ncr -F -f testtemp1grep %srcdir%\\testdata\\grepinputv >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 146 ----------------------------->>testtrygrep\r\n%printf% \"A123B\" >testtemp1grep\r\n%pcre2grep% -H -e \"123|fox\" - <testtemp1grep >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% -h -e \"123|fox\" - %srcdir%\\testdata\\grepinputv <testtemp1grep >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% - %srcdir%\\testdata\\grepinputv <testtemp1grep >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 147 ----------------------------->>testtrygrep\r\n%pcre2grep% -e \"123|fox\" -- -nonfile >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 148 ----------------------------->>testtrygrep\r\n%pcre2grep% --nonexist >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% -n-n-bad >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% --context >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% --only-matching --output=xx >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% --colour=badvalue >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% --newline=badvalue >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% -d badvalue >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% -D badvalue >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% --buffer-size=0 >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% --exclude \"(badpat\" abc /dev/null >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% --exclude-from /non/exist abc /dev/null >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% --include-from /non/exist abc /dev/null >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% --file-list=/non/exist abc /dev/null >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 149 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --binary-files=binary \"dog\" ./testdata/grepbinary & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --binary-files=wrong \"dog\" ./testdata/grepbinary & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 150 ----------------------------->>testtrygrep\r\n:: The Unix version of this tests checks for whether locales are supported. On Windows,\r\n:: we assume they always are.\r\nset LC_ALL=\r\nset LC_CTYPE=locale.bad\r\n(pushd %srcdir% & %pcre2grep% abc /dev/null & popd) >>testtrygrep 2>&1\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\nset LC_CTYPE=\r\n\r\necho ---------------------------- Test 151 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% --colour=always -e this -e The -e \"The wo\" testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 152 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -nA3 --group-separator=\"++\" \"four\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 153 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -nA3 --no-group-separator \"four\" ./testdata/grepinputx & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 154 ----------------------------->>testtrygrep\r\necho. >nul 2>testtemp1grep\r\n(pushd %srcdir% & %pcre2grep% -f %builddir%\\testtemp1grep ./testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 155 ----------------------------->>testtrygrep\r\necho. >testtemp1grep\r\n(pushd %srcdir% & %pcre2grep% -f %builddir%\\testtemp1grep ./testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 156 ----------------------------->>testtrygrep\r\n%printf% \"\\n\" >testtemp1grep\r\n(pushd %srcdir% & %pcre2grep% --posix-pattern-file --file %builddir%\\testtemp1grep ./testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 157 ----------------------------->>testtrygrep\r\n%printf% \"spaces \\n\" >testtemp1grep\r\n(pushd %srcdir% & %pcre2grep% -o --posix-pattern-file --file=%builddir%\\testtemp1grep ./testdata/grepinputv >%builddir%\\testtemp2grep && %pcre2grep% -q \"s \" %builddir%\\testtemp2grep & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 158 ----------------------------->>testtrygrep\r\n%printf% \"spaces.\\n\" >testtemp1grep\r\n(pushd %srcdir% & %pcre2grep% -f %builddir%\\testtemp1grep ./testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 159 ----------------------------->>testtrygrep\r\n%printf% \"spaces.\\r\\n\" >testtemp1grep\r\n(pushd %srcdir% & %pcre2grep% --posix-pattern-file -f%builddir%\\testtemp1grep ./testdata/grepinputv & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test 160 ----------------------------->>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -nC3 \"^(ert|jkl)\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n(pushd %srcdir% & %pcre2grep% -n -B4 -A2 \"^(ert|dfg)\" ./testdata/grepinput & popd) >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\n:: Now compare the results.\r\n\r\n%cf% %srcdir%\\testdata\\grepoutput testtrygrep %cfout%\r\nif ERRORLEVEL 1 exit /b 1\r\n\r\n\r\n:: These tests require UTF-8 support\r\n\r\nif %utf8% neq 0 (\r\n  echo Testing pcre2grep UTF-8 features\r\n\r\n  echo ---------------------------- Test U1 ------------------------------>testtrygrep\r\n  (pushd %srcdir% & %pcre2grep% -n -u --newline=any \"^X\" ./testdata/grepinput8 & popd) >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  echo ---------------------------- Test U2 ------------------------------>>testtrygrep\r\n  (pushd %srcdir% & %pcre2grep% -n -u -C 3 --newline=any \"Match\" ./testdata/grepinput8 & popd) >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  echo ---------------------------- Test U3 ------------------------------>>testtrygrep\r\n  (pushd %srcdir% & %pcre2grep% --line-offsets -u --newline=any --allow-lookaround-bsk \"(?<=\\K\\x{17f})\" ./testdata/grepinput8 & popd) >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  echo ---------------------------- Test U4 ------------------------------>>testtrygrep\r\n  (pushd %srcdir% & %pcre2grep% -u -o \"....\" ./testdata/grepinputBad8 & popd) >>testtrygrep 2>&1\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  echo ---------------------------- Test U5 ------------------------------>>testtrygrep\r\n  (pushd %srcdir% & %pcre2grep% -U -o \"....\" ./testdata/grepinputBad8 & popd) >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  echo ---------------------------- Test U6 ----------------------------->>testtrygrep\r\n  (pushd %srcdir% & %pcre2grep% -u -m1 -O \"=$x{1d3}$o{744}=\" \"fox\" & popd) <%srcdir%\\testdata\\grepinputv >>testtrygrep 2>&1\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  echo ---------------------------- Test U7 ------------------------------>>testtrygrep\r\n  (pushd %srcdir% & %pcre2grep% -ui --colour=always \"k+|\\babc\\b\" ./testdata/grepinput8 & popd) >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  echo ---------------------------- Test U8 ------------------------------>>testtrygrep\r\n  (pushd %srcdir% & %pcre2grep% -UiEP --colour=always \"k+|\\babc\\b\" ./testdata/grepinput8 & popd) >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  echo ---------------------------- Test U9 ------------------------------>>testtrygrep\r\n  (pushd %srcdir% & %pcre2grep% -u --colour=always \"A\\d\" ./testdata/grepinput8 & popd) >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  echo ---------------------------- Test U10 ------------------------------>>testtrygrep\r\n  (pushd %srcdir% & %pcre2grep% -u --posix-digit --colour=always \"A\\d\" ./testdata/grepinput8 & popd) >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  %cf% %srcdir%\\testdata\\grepoutput8 testtrygrep %cfout%\r\n  if ERRORLEVEL 1 exit /b 1\r\n\r\n) else (\r\n  echo Skipping pcre2grep UTF-8 tests: no UTF-8 support in PCRE2 library\r\n)\r\n\r\n\r\n:: We go to some contortions to try to ensure that the tests for the various\r\n:: newline settings will work in environments where the normal newline sequence\r\n:: is not \\n. Do not use exported files, whose line endings might be changed.\r\n:: Instead, create an input file so that its contents are exactly what we want.\r\n:: These tests are run in the build directory.\r\n\r\necho Testing pcre2grep newline settings\r\n%printf% \"abc\\rdef\\r\\nghi\\njkl\" >testNinputgrep\r\n\r\necho ---------------------------- Test N1 ------------------------------>testtrygrep\r\n%pcre2grep% -n -N CR \"^(abc|def|ghi|jkl)\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% -B1 -n -N CR \"^def\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test N2 ------------------------------>>testtrygrep\r\n%pcre2grep% -n --newline=crlf \"^(abc|def|ghi|jkl)\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% -B1 -n -N CRLF \"^ghi\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test N3 ------------------------------>>testtrygrep\r\nfor /f %%a in ('%printf% \"def\\rjkl\"') do set pattern=%%a\r\n%pcre2grep% -n --newline=cr -F \"!pattern!\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test N4 ------------------------------>>testtrygrep\r\n%pcre2grep% -n --newline=crlf -F -f %srcdir%\\testdata\\greppatN4 testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test N5 ------------------------------>>testtrygrep\r\n%pcre2grep% -n --newline=any \"^(abc|def|ghi|jkl)\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% -B1 -n --newline=any \"^def\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test N6 ------------------------------>>testtrygrep\r\n%pcre2grep% -n --newline=anycrlf \"^(abc|def|ghi|jkl)\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% -B1 -n --newline=anycrlf \"^jkl\" testNinputgrep >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test N7 ------------------------------>>testtrygrep\r\n%printf% \"xyz\\0abc\\0def\" >testNinputgrep\r\n%pcre2grep% -na --newline=nul \"^(abc|def)\" testNinputgrep | %trnull% >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n%pcre2grep% -B1 -na --newline=nul \"^(abc|def)\" testNinputgrep | %trnull% >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\necho ---------------------------- Test N8 ------------------------------>>testtrygrep\r\n%pcre2grep% -na --newline=anycrlf \"^a\" %srcdir%\\testdata\\grepinputBad8_Trail >>testtrygrep\r\necho RC=^%ERRORLEVEL%>>testtrygrep\r\n\r\n%printf% \"\\n\" >>testtrygrep\r\n\r\n%cf% %srcdir%\\testdata\\grepoutputN testtrygrep %cfout%\r\nif ERRORLEVEL 1 exit /b 1\r\n\r\n\r\n:: These newline tests need UTF support.\r\n\r\nif %utf8% neq 0 (\r\n  echo Testing pcre2grep newline settings with UTF-8 features\r\n\r\n  echo ---------------------------- Test UN1 ------------------------------>testtrygrep\r\n  %pcre2grep% -nau --newline=anycrlf \"^(abc|def)\" %srcdir%\\testdata\\grepinputUN >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  echo ---------------------------- Test UN2 ------------------------------>testtrygrep\r\n  %pcre2grep% -nauU --newline=anycrlf \"^a\" %srcdir%\\testdata\\grepinputBad8_Trail >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  %printf% \"\\n\" >>testtrygrep\r\n\r\n  %cf% %srcdir%\\testdata\\grepoutputUN testtrygrep %cfout%\r\n  if ERRORLEVEL 1 exit /b 1\r\n\r\n) else (\r\n  echo Skipping pcre2grep newline UTF-8 tests: no UTF-8 support in PCRE2 library\r\n)\r\n\r\n\r\n:: If pcre2grep supports script callouts, run some tests on them. It is possible\r\n:: to restrict these callouts to the non-fork case, either for security, or for\r\n:: environments that do not support fork(). This is handled by comparing to a\r\n:: different output.\r\n\r\n%pcre2grep% --help | %pcre2grep% -q \"callout scripts in patterns are supported\"\r\nif %ERRORLEVEL% equ 0 (\r\n  echo Testing pcre2grep script callouts\r\n\r\n  echo --- Test 1 --->testtrygrep\r\n  %pcre2grep% \"(T)(..(.))(?C'cmd|/c echo|Arg1: [$1] [$2] [$3]|Arg2: ^$|${1}^$| ($4) ($14) ($0)')()\" %srcdir%\\testdata\\grepinputv >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n  echo --- Test 2 --->>testtrygrep\r\n  %pcre2grep% \"(T)(..(.))()()()()()()()(..)(?C'cmd|/c echo|Arg1: [$11] [${11}]')\" %srcdir%\\testdata\\grepinputv >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n  echo --- Test 3 --->>testtrygrep\r\n  %pcre2grep% \"(T)(?C'|$0:$1$n')\" %srcdir%\\testdata\\grepinputv >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n  echo --- Test 4 --->>testtrygrep\r\n  %pcre2grep% \"(T)(?C'cscript|//nologo|printf.js|%%s\\r\\n|$0:$1$n')\" %srcdir%\\testdata\\grepinputv >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n  echo --- Test 5 --->>testtrygrep\r\n  %pcre2grep% \"(T)(?C'|$1$n')(*F)\" %srcdir%\\testdata\\grepinputv >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n  echo --- Test 6 --->>testtrygrep\r\n  %pcre2grep% -m1 \"(T)(?C'|$0:$1:$x{41}$o{101}$n')\" %srcdir%\\testdata\\grepinputv >>testtrygrep\r\n  echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n  %pcre2grep% --help | %pcre2grep% -q \"Non-fork callout scripts in patterns are supported\"\r\n  if ^!ERRORLEVEL! equ 0 (\r\n    set nonfork=1\r\n    %cf% %srcdir%\\testdata\\grepoutputCN testtrygrep %cfout%\r\n  ) else (\r\n    set nonfork=0\r\n    %cf% %srcdir%\\testdata\\grepoutputC testtrygrep %cfout%\r\n  )\r\n  if ERRORLEVEL 1 exit /b 1\r\n\r\n  @REM These callout tests need UTF support.\r\n\r\n  if %utf8% neq 0 (\r\n    echo Testing pcre2grep script callout with UTF-8 features\r\n\r\n    echo --- Test 1 --->testtrygrep\r\n    %pcre2grep% -u \"(T)(?C'|$0:$x{a6}$n')\" %srcdir%\\testdata\\grepinputv >>testtrygrep\r\n    echo RC=^!ERRORLEVEL!>>testtrygrep\r\n    echo --- Test 2 --->>testtrygrep\r\n    %pcre2grep% -u \"(T)(?C'cscript|//nologo|printf.js|%%s\\r\\n|$0:$x{a6}$n')\" %srcdir%\\testdata\\grepinputv >>testtrygrep\r\n    echo RC=^!ERRORLEVEL!>>testtrygrep\r\n\r\n    if ^!nonfork! equ 1 (\r\n      %cf% %srcdir%\\testdata\\grepoutputCNU testtrygrep %cfout%\r\n    ) else (\r\n      %cf% %srcdir%\\testdata\\grepoutputCU testtrygrep %cfout%\r\n    )\r\n    if ERRORLEVEL 1 exit /b 1\r\n\r\n  ) else (\r\n    echo Skipping pcre2grep script callout UTF-8 tests: no UTF-8 support in PCRE2 library\r\n  )\r\n\r\n) else (\r\n  echo Script callouts are not supported\r\n)\r\n\r\n\r\n:: Finally, some tests to exercise code that is not tested above, just to be\r\n:: sure that it runs OK. Doing this improves the coverage statistics. The output\r\n:: is not checked.\r\n\r\necho Testing miscellaneous pcre2grep arguments (unchecked)\r\necho. >nul 2>testtrygrep\r\ncall :checkspecial \"-xxxxx\" 2 || exit /b 1\r\ncall :checkspecial \"--help\" 0 || exit /b 1\r\ncall :checkspecial \"--line-buffered --colour=auto abc nul\" 1 || exit /b 1\r\ncall :checkspecial \"--line-buffered --color abc nul\" 1 || exit /b 1\r\ncall :checkspecial \"-dskip abc .\" 1 || exit /b 1\r\ncall :checkspecial \"-Dread -Dskip abc nul\" 1 || exit /b 1\r\ncall :checkspecial \"-f %srcdir%\\testdata\\greplistBad nul\" 2 || exit /b 1\r\ncall :checkspecial \"(unpaired nul\" 2 || exit /b 1\r\ncall :checkspecial \"-e (unpaired1 -e (unpaired2 nul\" 2 || exit /b 1\r\n\r\n\r\n:: Clean up local working files\r\ndel testcf printf.js trnull.js testNinputgrep teststderrgrep testtrygrep testtemp1grep testtemp2grep\r\n\r\nexit /b 0\r\n\r\n:: ------ Function to run and check a special pcre2grep arguments test -------\r\n\r\n:checkspecial\r\n  %pcre2grep% %~1 >>testtrygrep 2>&1\r\n  if %ERRORLEVEL% neq %2 (\r\n    echo ** pcre2grep %~1 failed - check testtrygrep\r\n    exit /b 1\r\n  )\r\n  exit /b 0\r\n\r\n:: End\r\n"
  },
  {
    "path": "RunTest",
    "content": "#! /bin/sh\n\n###############################################################################\n# Run the PCRE2 tests using the pcre2test program. The appropriate tests are\n# selected, depending on which build-time options were used.\n#\n# When JIT support is available, all appropriate tests are run with and without\n# JIT, unless \"-nojit\" is given on the command line. There are also two tests\n# for JIT-specific features, one to be run when JIT support is available\n# (unless \"-nojit\" is specified), and one when it is not.\n#\n# Whichever of the 8-, 16- and 32-bit libraries exist are tested. It is also\n# possible to select which to test by giving \"-8\", \"-16\" or \"-32\" on the\n# command line.\n#\n# As well as \"-nojit\", \"-8\", \"-16\", and \"-32\", arguments for this script are\n# individual test numbers, ranges of tests such as 3-6 or 3- (meaning 3 to the\n# end), or a number preceded by ~ to exclude a test. For example, \"3-15 ~10\"\n# runs tests 3 to 15, excluding test 10, and just \"~10\" runs all the tests\n# except test 10. Whatever order the arguments are in, these tests are always\n# run in numerical order.\n#\n# If no specific tests are selected (which is the case when this script is run\n# via 'make check') the default is to run all the numbered tests.\n#\n# There may also be named (as well as numbered) tests for special purposes. At\n# present there is just one, called \"heap\". This test's output contains the\n# sizes of heap frames and frame vectors, which depend on the environment. It\n# is therefore not run unless explicitly requested.\n#\n# Inappropriate tests are automatically skipped (with a comment to say so). For\n# example, if JIT support is not compiled, test 16 is skipped, whereas if JIT\n# support is compiled, test 15 is skipped.\n#\n# Other arguments can be one of the words \"-valgrind\", \"-valgrind-log\", or\n# \"-sim\" followed by an argument to run cross-compiled executables under a\n# simulator, for example:\n#\n# RunTest 3 -sim \"qemu-arm -s 8388608\"\n#\n# For backwards compatibility, -nojit, -valgrind, -valgrind-log, and -sim may\n# be given without the leading \"-\" character.\n#\n# When PCRE2 is compiled by clang with -fsanitize arguments, some tests need\n# very much more stack than normal. In environments where the stack can be\n# set at runtime, -bigstack sets a gigantic stack.\n#\n# Special cases where only one argument is allowed:\n#   - If the script is invoked as \"RunTest list\", a list of available tests is\n#     output, but none of them are run.\n###############################################################################\n\n# Define test titles in variables so that they can be output as a list. Some\n# of them are modified (e.g. with -8 or -16) when used in the actual tests.\n\ntitle0=\"Test 0: Unchecked pcre2test argument tests (to improve coverage)\"\ntitle1=\"Test 1: Main non-UTF, non-UCP functionality (compatible with Perl >= 5.10)\"\ntitle2=\"Test 2: API, errors, internals and non-Perl stuff\"\ntitle3=\"Test 3: Locale-specific features\"\ntitle4A=\"Test 4: UTF\"\ntitle4B=\" and Unicode property support (compatible with Perl >= 5.10)\"\ntitle5A=\"Test 5: API, internals, and non-Perl stuff for UTF\"\ntitle5B=\" and UCP support\"\ntitle6=\"Test 6: DFA matching main non-UTF, non-UCP functionality\"\ntitle7A=\"Test 7: DFA matching with UTF\"\ntitle7B=\" and Unicode property support\"\ntitle8=\"Test 8: Internal offsets and code size tests\"\ntitle9=\"Test 9: Specials for the basic 8-bit library\"\ntitle10=\"Test 10: Specials for the 8-bit library with UTF-8 and UCP support\"\ntitle11=\"Test 11: Specials for the basic 16-bit and 32-bit libraries\"\ntitle12=\"Test 12: Specials for the 16-bit and 32-bit libraries UTF and UCP support\"\ntitle13=\"Test 13: DFA specials for the basic 16-bit and 32-bit libraries\"\ntitle14=\"Test 14: DFA specials for UTF and UCP support\"\ntitle15=\"Test 15: Non-JIT limits and other non-JIT tests\"\ntitle16=\"Test 16: JIT-specific features when JIT is not available\"\ntitle17=\"Test 17: JIT-specific features when JIT is available\"\ntitle18=\"Test 18: Tests of the POSIX interface, excluding UTF/UCP\"\ntitle19=\"Test 19: Tests of the POSIX interface with UTF/UCP\"\ntitle20=\"Test 20: Serialization and code copy tests\"\ntitle21=\"Test 21: \\C tests without UTF (supported for DFA matching)\"\ntitle22=\"Test 22: \\C tests with UTF (not supported for DFA matching)\"\ntitle23=\"Test 23: \\C disabled test\"\ntitle24=\"Test 24: Non-UTF pattern conversion tests\"\ntitle25=\"Test 25: UTF pattern conversion tests\"\ntitle26=\"Test 26: Unicode property tests (compatible with Perl >= 5.38)\"\ntitle27=\"Test 27: Auto-generated unicode property tests\"\ntitle28=\"Test 28: EBCDIC-specific tests\"\ntitle29=\"Test 29: EBCDIC-specific tests (for NL=0x25)\"\nmaxtest=29\ntitleheap=\"Test 'heap': Environment-specific heap tests\"\n\nif [ $# -eq 1 -a \"$1\" = \"list\" ]; then\n  echo $title0\n  echo $title1\n  echo $title2 \"(not UTF or UCP)\"\n  echo $title3\n  echo $title4A $title4B\n  echo $title5A $title5B\n  echo $title6\n  echo $title7A $title7B\n  echo $title8\n  echo $title9\n  echo $title10\n  echo $title11\n  echo $title12\n  echo $title13\n  echo $title14\n  echo $title15\n  echo $title16\n  echo $title17\n  echo $title18\n  echo $title19\n  echo $title20\n  echo $title21\n  echo $title22\n  echo $title23\n  echo $title24\n  echo $title25\n  echo $title26\n  echo $title27\n  echo $title28\n  echo $title29\n  echo \"\"\n  echo $titleheap\n  echo \"\"\n  echo \"Numbered tests are automatically run if nothing selected.\"\n  echo \"Named tests must be explicitly selected.\"\n  exit 0\nfi\n\n# Set up a suitable \"diff\" command for comparison. Some systems\n# have a diff that lacks a -u option. Try to deal with this.\n# Use gdiff if available.\n\ncf=\"diff\"\ngdiff /dev/null /dev/null 2>/dev/null && cf=\"gdiff\"\n$cf -u /dev/null /dev/null 2>/dev/null && cf=\"$cf -u\"\n\n# Find the test data\n\nif [ -n \"$srcdir\" -a -d \"$srcdir\" ] ; then\n  testdata=\"$srcdir/testdata\"\nelif [ -d \"./testdata\" ] ; then\n  testdata=./testdata\nelif [ -d \"../testdata\" ] ; then\n  testdata=../testdata\nelse\n  echo \"Cannot find the testdata directory\"\n  exit 1\nfi\n\nyield=0\n\n\n# ------ Function to check results of a test -------\n\n# This function is called with three parameters:\n#\n#  $1 the value of $? after a call to pcre2test\n#  $2 the suffix of the output file to compare with\n#  $3 the $opt value (empty, -jit, or -dfa)\n#\n# Note: must define using name(), not \"function name\", for Solaris.\n\ncheckresult()\n  {\n  if [ $1 -ne 0 ] ; then\n    echo \"** pcre2test failed - check testoutput$bits$3/testoutput$2\"\n    yield=1\n    return\n  fi\n  case \"$3\" in\n    -jit) with=\" with JIT\";;\n    -dfa) with=\" with DFA\";;\n    *)    with=\"\";;\n  esac\n  cf_out=\"$testdata/testoutput$2\"\n  if [ $ebcdic -eq 1 ] ; then\n    # We currently only use the #if ... #endif support in pcre2test for EBCDIC\n    # testing. Run in \"preprocess-only\" mode (-E) on the testoutput file to trim\n    # the output lines matching the input lines which are discarded.\n    $sim $pcre2test -q -E \"$cf_out\" >testoutput$bits$3/testoutput$2-expected\n    cf_out=testoutput$bits$3/testoutput$2-expected\n  fi\n  $cf \"$cf_out\" testoutput$bits$3/testoutput$2\n  if [ $? != 0 ] ; then\n    echo \"\"\n    echo \"** Test $2 failed$with\"\n    yield=1\n    return\n  fi\n  echo \"  OK$with\"\n  }\n\n\n# ------ Function to run and check a special pcre2test arguments test -------\n\ncheckspecial()\n  {\n  expect=${2:-0}\n  $sim $valgrind $vjs $pcre2test $1 >>testSoutput 2>&1\n  if [ $? -ne \"$expect\" ] ; then\n    echo \"** pcre2test $1 failed - check testSoutput\"\n    yield=1\n    return 1\n  fi\n  return 0\n  }\n\n\n# ------ Test setup ------\n\n# Default values\n\narg8=\narg16=\narg32=\nnojit=\nbigstack=\nmalloc=\nsim=\nskip=\nvalgrind=\nvjs=\nglobalopts=\"-q\"\n: ${pcre2test:=./pcre2test}\n\n# This is in case the caller has set aliases (as I do - PH)\nunset cp ls mv rm\n\nif [ ! -x $pcre2test ] ; then\n  echo \"** $pcre2test does not exist or is not executable.\"\n  exit 1\nfi\n\n# Process options and select which tests to run; for those that are explicitly\n# requested, check that the necessary optional facilities are available.\n\ndo0=no\ndo1=no\ndo2=no\ndo3=no\ndo4=no\ndo5=no\ndo6=no\ndo7=no\ndo8=no\ndo9=no\ndo10=no\ndo11=no\ndo12=no\ndo13=no\ndo14=no\ndo15=no\ndo16=no\ndo17=no\ndo18=no\ndo19=no\ndo20=no\ndo21=no\ndo22=no\ndo23=no\ndo24=no\ndo25=no\ndo26=no\ndo27=no\ndo28=no\ndo29=no\ndoheap=no\n\nwhile [ $# -gt 0 ] ; do\n  case $1 in\n    0) do0=yes;;\n    1) do1=yes;;\n    2) do2=yes;;\n    3) do3=yes;;\n    4) do4=yes;;\n    5) do5=yes;;\n    6) do6=yes;;\n    7) do7=yes;;\n    8) do8=yes;;\n    9) do9=yes;;\n   10) do10=yes;;\n   11) do11=yes;;\n   12) do12=yes;;\n   13) do13=yes;;\n   14) do14=yes;;\n   15) do15=yes;;\n   16) do16=yes;;\n   17) do17=yes;;\n   18) do18=yes;;\n   19) do19=yes;;\n   20) do20=yes;;\n   21) do21=yes;;\n   22) do22=yes;;\n   23) do23=yes;;\n   24) do24=yes;;\n   25) do25=yes;;\n   26) do26=yes;;\n   27) do27=yes;;\n   28) do28=yes;;\n   29) do29=yes;;\n   heap) doheap=yes;;\n  -8) arg8=yes;;\n  -16) arg16=yes;;\n  -32) arg32=yes;;\n   bigstack|-bigstack) bigstack=yes;;\n   malloc|-malloc) malloc=yes;;\n   nojit|-nojit) nojit=yes;;\n   sim|-sim) shift; sim=$1;;\n   valgrind|-valgrind) valgrind=\"valgrind --tool=memcheck -q --leak-check=yes --errors-for-leak-kinds=all --smc-check=all-non-file --error-exitcode=70\";;\n   valgrind-log|-valgrind-log) valgrind=\"valgrind --tool=memcheck --num-callers=30 --leak-check=yes --errors-for-leak-kinds=all --error-limit=no --smc-check=all-non-file --log-file=report.%p \";;\n   ~*)\n     if expr \"$1\" : '~[0-9][0-9]*$' >/dev/null; then\n       skip=\"$skip `expr \"$1\" : '~\\([0-9]*\\)*$'`\"\n     else\n       echo \"Unknown option or test selector '$1'\"; exit 1\n     fi\n   ;;\n   *-*)\n     if expr \"$1\" : '[0-9][0-9]*-[0-9]*$' >/dev/null; then\n       tf=`expr \"$1\" : '\\([0-9]*\\)'`\n       tt=`expr \"$1\" : '.*-\\([0-9]*\\)'`\n       if [ \"$tt\" = \"\" ] ; then tt=$maxtest; fi\n       if expr \\( \"$tt\" \">\" \"$maxtest\" \\) >/dev/null; then\n         echo \"Invalid test range '$1'\"; exit 1\n       fi\n       while expr \"$tf\" \"<=\" \"$tt\" >/dev/null; do\n         eval do${tf}=yes\n         tf=`expr $tf + 1`\n       done\n     else\n       echo \"Invalid test range '$1'\"; exit 1\n     fi\n   ;;\n   *) echo \"Unknown option or test selector '$1'\"; exit 1;;\n  esac\n  shift\ndone\n\n# If it is possible to set the system stack size and -bigstack was given,\n# set up a large stack.\n\n$sim $pcre2test -S 32 /dev/null /dev/null >/dev/null 2>&1\nsupport_setstack=$?\nif [ $support_setstack -eq 0 -a \"$bigstack\" != \"\" ] ; then\n  globalopts=\"$globalopts -S 32\"\nfi\n\n# If the malloc option is given, then call pcre2test with -malloc.\n\nif [ \"$malloc\" != \"\" ] ; then\n  globalopts=\"$globalopts -malloc\"\nfi\n\n# All of 8-bit, 16-bit, and 32-bit character strings may be supported, but only\n# one need be.\n\n$sim $pcre2test -C pcre2-8 >/dev/null\nsupport8=$?\n$sim $pcre2test -C pcre2-16 >/dev/null\nsupport16=$?\n$sim $pcre2test -C pcre2-32 >/dev/null\nsupport32=$?\n\n# \\C may be disabled\n\n$sim $pcre2test -C backslash-C >/dev/null\nsupportBSC=$?\n\n# Check if compiled in EBCDIC mode, and whether we have EBCDIC I/O and NL=0x25\n$sim $pcre2test -C ebcdic >/dev/null\nebcdic=$?\n$sim $pcre2test -C ebcdic-io >/dev/null\nebcdic_io=$?\n$sim $pcre2test -C ebcdic-nl25 >/dev/null\nebcdic_nl25=$?\n\nif [ $ebcdic -eq 1 ]; then\n  if [ $ebcdic_io -eq 0 ]; then\n    echo \"Running tests in EBCDIC mode, and expecting ASCII test data\"\n  else\n    echo \"Running tests in EBCDIC mode, and expecting EBCDIC test data\"\n    echo \"If you are on an EBCDIC machine, you will need to convert the PCRE2\"\n    echo \"testdata/ directory from ISO8859-1, so the data match the EBCDIC\"\n    echo \"codepage that your C compiler is using for C character literals.\"\n    echo \"For example:\"\n    echo \"  iconv -f ISO8859-1 -t IBM-1047 ...\"\n  fi\nfi\n\n# Initialize all bitsizes skipped\n\ntest8=skip\ntest16=skip\ntest32=skip\n\n# If no bitsize arguments, select all that are available\n\nif [ \"$arg8$arg16$arg32\" = \"\" ] ; then\n  if [ $support8 -ne 0 ] ; then\n    test8=-8\n  fi\n  if [ $support16 -ne 0 ] ; then\n    test16=-16\n  fi\n  if [ $support32 -ne 0 ] ; then\n    test32=-32\n  fi\n\n# Otherwise, select requested bit sizes\n\nelse\n  if [ \"$arg8\" = yes ] ; then\n    if [ $support8 -eq 0 ] ; then\n      echo \"Cannot run 8-bit library tests: 8-bit library not compiled\"\n      exit 1\n    fi\n    test8=-8\n  fi\n  if [ \"$arg16\" = yes ] ; then\n    if [ $support16 -eq 0 ] ; then\n      echo \"Cannot run 16-bit library tests: 16-bit library not compiled\"\n      exit 1\n    fi\n    test16=-16\n  fi\n  if [ \"$arg32\" = yes ] ; then\n    if [ $support32 -eq 0 ] ; then\n      echo \"Cannot run 32-bit library tests: 32-bit library not compiled\"\n      exit 1\n    fi\n    test32=-32\n  fi\nfi\n\n# UTF support is implied by Unicode support, and it always applies to all bit\n# sizes if both are supported; we can't have UTF-8 support without UTF-16 or\n# UTF-32 support.\n\n$sim $pcre2test -C unicode >/dev/null\nutf=$?\n\n# When JIT is used with valgrind, we need to set up valgrind suppressions as\n# otherwise there are a lot of false positive valgrind reports when the\n# the hardware supports SSE2.\n\njitopt=\n$sim $pcre2test -C jit >/dev/null\njit=$?\nif [ $jit -ne 0 -a \"$nojit\" != \"yes\" ] ; then\n  jitopt=-jit\n  if [ \"$valgrind\" != \"\" ] ; then\n    vjs=\"--suppressions=$testdata/valgrind-jit.supp\"\n  fi\nfi\n\n# If no specific tests were requested, select all the numbered tests. Those\n# that are not relevant will be automatically skipped.\n\nif [ $do0  = no -a $do1  = no -a $do2  = no -a $do3  = no -a \\\n     $do4  = no -a $do5  = no -a $do6  = no -a $do7  = no -a \\\n     $do8  = no -a $do9  = no -a $do10 = no -a $do11 = no -a \\\n     $do12 = no -a $do13 = no -a $do14 = no -a $do15 = no -a \\\n     $do16 = no -a $do17 = no -a $do18 = no -a $do19 = no -a \\\n     $do20 = no -a $do21 = no -a $do22 = no -a $do23 = no -a \\\n     $do24 = no -a $do25 = no -a $do26 = no -a $do27 = no -a \\\n     $do28 = no -a $do29 = no -a $doheap = no \\\n   ]; then\n  do0=yes\n  do1=yes\n  do2=yes\n  do3=yes\n  do4=yes\n  do5=yes\n  do6=yes\n  do7=yes\n  do8=yes\n  do9=yes\n  do10=yes\n  do11=yes\n  do12=yes\n  do13=yes\n  do14=yes\n  do15=yes\n  do16=yes\n  do17=yes\n  do18=yes\n  do19=yes\n  do20=yes\n  do21=yes\n  do22=yes\n  do23=yes\n  do24=yes\n  do25=yes\n  do26=yes\n  do27=yes\n  do28=yes\n  do29=yes\nfi\n\n# Handle any explicit skips at this stage, so that an argument list may consist\n# only of explicit skips.\n\nfor i in $skip; do eval do$i=no; done\n\n# Show which release and which test data\n\necho \"\"\necho PCRE2 C library tests using test data from $testdata\n$sim $pcre2test /dev/null\necho \"\"\n\n\n# ------ Normal Tests ------\n\nfor bmode in \"$test8\" \"$test16\" \"$test32\"; do\n  case \"$bmode\" in\n    skip) continue;;\n    -16)  if [ \"$test8$test32\" != \"skipskip\" ] ; then echo \"\"; fi\n          bits=16; echo \"---- Testing 16-bit library ----\"; echo \"\";;\n    -32)  if [ \"$test8$test16\" != \"skipskip\" ] ; then echo \"\"; fi\n          bits=32; echo \"---- Testing 32-bit library ----\"; echo \"\";;\n    -8)   bits=8; echo \"---- Testing 8-bit library ----\"; echo \"\";;\n  esac\n\n  # Set up directories for test output.\n  [ -d testoutput$bits ] || mkdir testoutput$bits\n  [ -d testoutput$bits$jitopt ] || mkdir testoutput$bits$jitopt\n  [ -d testoutput$bits-dfa ] || mkdir testoutput$bits-dfa\n\n  # Test 0 is a special test. Its output is not checked, because it will\n  # be different on different hardware and with different configurations.\n  # Running this test just exercises the code.\n\n  if [ $do0 = yes ] ; then\n    echo $title0\n    echo '/abc/jit,memory,framesize' >testSinput\n    echo '   abc' >>testSinput\n    echo '' >testSoutput\n    saverc=0\n    checkspecial \"$bmode -C\" || saverc=$?\n    checkspecial '--help' || saverc=$?\n    checkspecial \"$bmode testSinput\" || saverc=$?\n    checkspecial \"$bmode $testdata/testinputheap\" || saverc=$?\n    if [ $support_setstack -eq 0 ] ; then\n      checkspecial \"$bmode -S 1 -t 10 testSinput\" || saverc=$?\n    fi\n    checkspecial \"$bmode reallydoesnotexist\" 1 || saverc=$?\n    checkspecial \"$bmode testSinput reallydoesnotexist/outfile\" 1 || saverc=$?\n    checkspecial \"$bmode -pattern debug testSinput\" || saverc=$?\n    checkspecial \"$bmode -pattern INVALID testSinput\" 1 2>/dev/null || saverc=$?\n    checkspecial \"$bmode -subject notempty testSinput\" || saverc=$?\n    checkspecial \"$bmode -subject INVALID testSinput\" 1 2>/dev/null || saverc=$?\n    checkspecial -LM || saverc=$?\n    checkspecial -LP || saverc=$?\n    checkspecial -LS || saverc=$?\n    checkspecial \"$bmode -unittest\" || saverc=$?\n    if [ $saverc -eq 0 ] ; then\n      echo \"  OK\"\n    fi\n  fi\n\n  # Primary non-UTF test, compatible with JIT and all versions of Perl >= 5.8\n\n  if [ $do1 = yes ] ; then\n    echo $title1\n    for opt in \"\" $jitopt; do\n      $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput1 testoutput$bits$opt/testoutput1\n      checkresult $? 1 \"$opt\"\n    done\n  fi\n\n  # PCRE2 tests that are not Perl-compatible: API, errors, internals. We copy\n  # the testbtables file to the current directory for use by this test.\n\n  if [ $do2 = yes ] ; then\n    echo $title2 \"(excluding UTF-$bits)\"\n    cp $testdata/testbtables .\n    for opt in \"\" $jitopt; do\n      $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput2 testoutput$bits$opt/testoutput2\n      saverc=$?\n      if [ $saverc = 0 ] ; then\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt -error -80,-62,-2,-1,0,100,101,191,300 >>testoutput$bits$opt/testoutput2\n        checkresult $? 2 \"$opt\"\n      else\n        checkresult $saverc 2 \"$opt\"\n      fi\n    done\n  fi\n\n  # Locale-specific tests, provided that either the \"fr_FR\", \"fr_CA\", \"french\"\n  # or \"fr\" locale is available. The first two are Unix-like standards; the\n  # last two are for Windows. Unfortunately, different versions of the French\n  # locale give different outputs for some items. This test passes if the\n  # output matches any one of the alternative output files.\n\n  if [ $do3 = yes ] ; then\n    locale=\n\n    # In some environments locales that are listed by the \"locale -a\"\n    # command do not seem to work with setlocale(). Therefore, we do\n    # a preliminary test to see if pcre2test can set one before going\n    # on to use it.\n\n    for loc in 'fr_FR' 'french' 'fr' 'fr_CA'; do\n      locale -a | grep \"^$loc\\$\" >/dev/null\n      if [ $? -eq 0 ] ; then\n        echo \"/a/locale=$loc\" | \\\n          $sim $valgrind $pcre2test -q $bmode | \\\n            grep \"Failed to set locale\" >/dev/null\n        if [ $? -ne 0 ] ; then\n          locale=$loc\n          if [ \"$locale\" = \"fr_FR\" ] ; then\n            infile=$testdata/testinput3\n            outfile=$testdata/testoutput3\n            outfile2=$testdata/testoutput3A\n            outfile3=$testdata/testoutput3B\n            outfile4=$testdata/testoutput3C\n          else\n            infile=test3input\n            outfile=test3output\n            outfile2=test3outputA\n            outfile3=test3outputB\n            outfile4=test3outputC\n            sed \"s/fr_FR/$loc/\" $testdata/testinput3 >test3input\n            sed \"s/fr_FR/$loc/\" $testdata/testoutput3 >test3output\n            sed \"s/fr_FR/$loc/\" $testdata/testoutput3A >test3outputA\n            sed \"s/fr_FR/$loc/\" $testdata/testoutput3B >test3outputB\n            sed \"s/fr_FR/$loc/\" $testdata/testoutput3C >test3outputC\n          fi\n          break\n        fi\n      fi\n    done\n\n    if [ \"$locale\" != \"\" ] ; then\n      echo $title3 \"(using '$locale' locale)\"\n      for opt in \"\" $jitopt; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $infile testoutput$bits/testoutput3\n        if [ $? = 0 ] ; then\n          case \"$opt\" in\n            -jit) with=\" with JIT\";;\n            *)    with=\"\";;\n          esac\n          if $cf $outfile testoutput$bits/testoutput3 >teststdout || \\\n             $cf $outfile2 testoutput$bits/testoutput3 >>teststdout || \\\n             $cf $outfile3 testoutput$bits/testoutput3 >>teststdout || \\\n             $cf $outfile4 testoutput$bits/testoutput3 >>teststdout\n          then\n            echo \"  OK$with\"\n          else\n            cat teststdout\n            echo \"\"\n            echo \"** Locale test did not run successfully$with. The output did not match\"\n            echo \"   $outfile, $outfile2, $outfile3 or $outfile4.\"\n            echo \"   This may mean that there is a problem with the locale settings rather\"\n            echo \"   than a bug in PCRE2.\"\n            yield=1\n          fi\n        else\n          echo \"** pcre2test failed - check testoutput$bits/testoutput3\"\n          yield=1\n        fi\n      done\n    else\n      echo \"Cannot test locale-specific features - none of the 'fr_FR', 'fr_CA',\"\n      echo \"'fr' or 'french' locales can be set, or the \\\"locale\\\" command is\"\n      echo \"not available to check for them.\"\n      echo \" \"\n    fi\n  fi\n\n  # Tests for UTF and Unicode property support\n\n  if [ $do4 = yes ] ; then\n    echo ${title4A}-${bits}${title4B}\n    if [ $utf -eq 0 ] ; then\n      echo \"  Skipped because UTF-$bits support is not available\"\n    else\n      for opt in \"\" $jitopt; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput4 testoutput$bits$opt/testoutput4\n        checkresult $? 4 \"$opt\"\n      done\n    fi\n  fi\n\n  if [ $do5 = yes ] ; then\n    echo ${title5A}-${bits}$title5B\n    if [ $utf -eq 0 ] ; then\n      echo \"  Skipped because UTF-$bits support is not available\"\n    else\n      for opt in \"\" $jitopt; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput5 testoutput$bits$opt/testoutput5\n        checkresult $? 5 \"$opt\"\n      done\n    fi\n  fi\n\n  # Tests for DFA matching support\n\n  if [ $do6 = yes ] ; then\n    echo $title6\n    $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput6 testoutput$bits/testoutput6\n    checkresult $? 6 \"\"\n  fi\n\n  if [ $do7 = yes ] ; then\n    echo ${title7A}-${bits}$title7B\n    if [ $utf -eq 0 ] ; then\n      echo \"  Skipped because UTF-$bits support is not available\"\n    else\n      $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput7 testoutput$bits/testoutput7\n      checkresult $? 7 \"\"\n    fi\n  fi\n\n  # Test of internal offsets and code sizes. This test is run only when there\n  # is UTF/UCP support. The actual tests are mostly the same as in some of the\n  # above, but in this test we inspect some offsets and sizes. This is a\n  # doublecheck for the maintainer, just in case something changes unexpectedly.\n  # The output from this test is different in 8-bit, 16-bit, and 32-bit modes\n  # and for different link sizes, so there are different output files for each\n  # mode and link size.\n\n  if [ $do8 = yes ] ; then\n    echo $title8\n    $sim $pcre2test -$bits -C linksize >/dev/null\n    bits_link_size=$?\n    if [ $utf -eq 0 ] ; then\n      echo \"  Skipped because UTF-$bits support is not available\"\n    else\n      $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput8 testoutput$bits/testoutput8-$bits-$bits_link_size\n      checkresult $? 8-$bits-$bits_link_size \"\"\n    fi\n  fi\n\n  # Tests for 8-bit-specific features\n\n  if [ \"$do9\" = yes ] ; then\n    echo $title9\n    if [ \"$bits\" = \"16\" -o \"$bits\" = \"32\" ] ; then\n      echo \"  Skipped when running 16/32-bit tests\"\n    else\n      for opt in \"\" $jitopt; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput9 testoutput$bits$opt/testoutput9\n        checkresult $? 9 \"$opt\"\n      done\n    fi\n  fi\n\n  # Tests for UTF-8 and UCP 8-bit-specific features\n\n  if [ \"$do10\" = yes ] ; then\n    echo $title10\n    if [ \"$bits\" = \"16\" -o \"$bits\" = \"32\" ] ; then\n      echo \"  Skipped when running 16/32-bit tests\"\n    elif [ $utf -eq 0 ] ; then\n      echo \"  Skipped because UTF-$bits support is not available\"\n    else\n      for opt in \"\" $jitopt; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput10 testoutput$bits$opt/testoutput10\n        checkresult $? 10 \"$opt\"\n      done\n    fi\n  fi\n\n  # Tests for 16-bit and 32-bit features. Output is different for the two widths.\n\n  if [ $do11 = yes ] ; then\n    echo $title11\n    if [ \"$bits\" = \"8\" ] ; then\n      echo \"  Skipped when running 8-bit tests\"\n    else\n      for opt in \"\" $jitopt; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput11 testoutput$bits$opt/testoutput11-$bits\n        checkresult $? 11-$bits \"$opt\"\n      done\n    fi\n  fi\n\n  # Tests for 16-bit and 32-bit features with UTF-16/32 and UCP support. Output\n  # is different for the two widths.\n\n  if [ $do12 = yes ] ; then\n    echo $title12\n    if [ \"$bits\" = \"8\" ] ; then\n      echo \"  Skipped when running 8-bit tests\"\n    elif [ $utf -eq 0 ] ; then\n      echo \"  Skipped because UTF-$bits support is not available\"\n    else\n      for opt in \"\" $jitopt; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput12 testoutput$bits$opt/testoutput12-$bits\n        checkresult $? 12-$bits \"$opt\"\n      done\n    fi\n  fi\n\n  # Tests for 16/32-bit-specific features in DFA non-UTF modes\n\n  if [ $do13 = yes ] ; then\n    echo $title13\n    if [ \"$bits\" = \"8\" ] ; then\n      echo \"  Skipped when running 8-bit tests\"\n    else\n      $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput13 testoutput$bits/testoutput13\n      checkresult $? 13 \"\"\n    fi\n  fi\n\n  # Tests for DFA UTF and UCP features. Output is different for the different widths.\n\n  if [ $do14 = yes ] ; then\n    echo $title14\n    if [ $utf -eq 0 ] ; then\n      echo \"  Skipped because UTF-$bits support is not available\"\n    else\n      $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput14 testoutput$bits/testoutput14-$bits\n      checkresult $? 14-$bits \"\"\n    fi\n  fi\n\n  # Test non-JIT match and recursion limits\n\n  if [ $do15 = yes ] ; then\n    echo $title15\n    $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput15 testoutput$bits/testoutput15\n    checkresult $? 15 \"\"\n  fi\n\n  # Test JIT-specific features when JIT is not available\n\n  if [ $do16 = yes ] ; then\n    echo $title16\n    if [ $jit -ne 0 ] ; then\n      echo \"  Skipped because JIT is available\"\n    else\n      $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput16 testoutput$bits/testoutput16\n      checkresult $? 16 \"\"\n    fi\n  fi\n\n  # Test JIT-specific features when JIT is available\n\n  if [ $do17 = yes ] ; then\n    echo $title17\n    if [ $jit -eq 0 -o \"$nojit\" = \"yes\" ] ; then\n      echo \"  Skipped because JIT is not available or nojit was specified\"\n    else\n      $sim $valgrind $vjs $pcre2test $globalopts $bmode $testdata/testinput17 testoutput$bits/testoutput17\n      checkresult $? 17 \"\"\n    fi\n  fi\n\n  # Tests for the POSIX interface without UTF/UCP (8-bit only)\n\n  if [ $do18 = yes ] ; then\n    echo $title18\n    if [ \"$bits\" = \"16\" -o \"$bits\" = \"32\" ] ; then\n      echo \"  Skipped when running 16/32-bit tests\"\n    else\n      $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput18 testoutput$bits/testoutput18\n      checkresult $? 18 \"\"\n    fi\n  fi\n\n  # Tests for the POSIX interface with UTF/UCP (8-bit only)\n\n  if [ $do19 = yes ] ; then\n    echo $title19\n    if [ \"$bits\" = \"16\" -o \"$bits\" = \"32\" ] ; then\n      echo \"  Skipped when running 16/32-bit tests\"\n    elif [ $utf -eq 0 ] ; then\n      echo \"  Skipped because UTF-$bits support is not available\"\n    else\n      $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput19 testoutput$bits/testoutput19\n      checkresult $? 19 \"\"\n    fi\n  fi\n\n  # Serialization tests\n\n  if [ $do20 = yes ] ; then\n    echo $title20\n    $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput20 testoutput$bits/testoutput20\n    checkresult $? 20 \"\"\n  fi\n\n  # \\C tests without UTF - DFA matching is supported\n\n  if [ \"$do21\" = yes ] ; then\n    echo $title21\n    if [ $supportBSC -eq 0 ] ; then\n      echo \"  Skipped because \\C is disabled\"\n    else\n      for opt in \"\" $jitopt -dfa; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput21 testoutput$bits$opt/testoutput21\n        checkresult $? 21 \"$opt\"\n      done\n    fi\n  fi\n\n  # \\C tests with UTF - DFA matching is not supported for \\C in UTF mode\n\n  if [ \"$do22\" = yes ] ; then\n    echo $title22\n    if [ $supportBSC -eq 0 ] ; then\n      echo \"  Skipped because \\C is disabled\"\n    elif [ $utf -eq 0 ] ; then\n      echo \"  Skipped because UTF-$bits support is not available\"\n    else\n      for opt in \"\" $jitopt; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput22 testoutput$bits$opt/testoutput22-$bits\n        checkresult $? 22-$bits \"$opt\"\n      done\n    fi\n  fi\n\n  # Test when \\C is disabled\n\n  if [ \"$do23\" = yes ] ; then\n    echo $title23\n    if [ $supportBSC -ne 0 ] ; then\n      echo \"  Skipped because \\C is not disabled\"\n    else\n      $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput23 testoutput$bits/testoutput23\n      checkresult $? 23 \"\"\n    fi\n  fi\n\n  # Non-UTF pattern conversion tests\n\n  if [ \"$do24\" = yes ] ; then\n    echo $title24\n    $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput24 testoutput$bits/testoutput24\n    checkresult $? 24 \"\"\n  fi\n\n  # UTF pattern conversion tests\n\n  if [ \"$do25\" = yes ] ; then\n    echo $title25\n    if [ $utf -eq 0 ] ; then\n      echo \"  Skipped because UTF-$bits support is not available\"\n    else\n      $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinput25 testoutput$bits/testoutput25\n      checkresult $? 25 \"\"\n    fi\n  fi\n\n  # Unicode property tests\n\n  if [ $do26 = yes ] ; then\n    echo $title26\n    if [ $utf -eq 0 ] ; then\n      echo \"  Skipped because UTF-$bits support is not available\"\n    else\n      for opt in \"\" $jitopt; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput26 testoutput$bits$opt/testoutput26\n        checkresult $? 26 \"$opt\"\n      done\n    fi\n  fi\n\n  # Auto-generated Unicode property tests\n\n  if [ $do27 = yes ] ; then\n    echo $title27\n    if [ $utf -eq 0 ] ; then\n      echo \"  Skipped because UTF-$bits support is not available\"\n    else\n      for opt in \"\" $jitopt; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput27 testoutput$bits$opt/testoutput27\n        checkresult $? 27 \"$opt\"\n      done\n    fi\n  fi\n\n  # EBCDIC tests\n\n  if [ $do28 = yes ] ; then\n    echo $title28\n    if [ $ebcdic -eq 0 ] ; then\n      echo \"  Skipped when not targetting EBCDIC\"\n    else\n      for opt in \"\" $jitopt \"-dfa\"; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput28 testoutput$bits$opt/testoutput28\n        checkresult $? 28 \"$opt\"\n      done\n    fi\n  fi\n\n  # EBCDIC tests (for NL=0x25)\n\n  if [ $do29 = yes ] ; then\n    echo $title29\n    if [ $ebcdic -eq 0 ] ; then\n      echo \"  Skipped when not targetting EBCDIC\"\n    elif [ $ebcdic_nl25 -eq 0 ] ; then\n      echo \"  Skipped because EBCDIC newline is not 0x25\"\n    else\n      for opt in \"\" $jitopt \"-dfa\"; do\n        $sim $valgrind ${opt:+$vjs} $pcre2test $globalopts $bmode $opt $testdata/testinput29 testoutput$bits$opt/testoutput29\n        checkresult $? 29 \"$opt\"\n      done\n    fi\n  fi\n\n  # Manually selected heap tests - output may vary in different environments,\n  # which is why that are not automatically run.\n\n  if [ $doheap = yes ] ; then\n    echo $titleheap\n    $sim $valgrind $pcre2test $globalopts $bmode $testdata/testinputheap testoutput$bits/testoutputheap-$bits\n    checkresult $? heap-$bits \"\"\n  fi\n\n# End of loop for 8/16/32-bit tests\ndone\n\n\nif [ $yield -eq 0 ] ; then\n  echo \"\"\n  echo \"All tests passed.\"\n\n  # Clean up local working files\n  rm -f testbtables testSinput testSoutput test3input test3output test3outputA test3outputB testsaved1 testsaved2 teststdout teststderr\n  rm -rf testoutput8 testoutput8-jit testoutput8-dfa \\\n         testoutput16 testoutput16-jit testoutput16-dfa \\\n         testoutput32 testoutput32-jit testoutput32-dfa\nelse\n  echo \"\"\n  echo \"** Tests failed. See output above for details.\"\nfi\n\nexit $yield\n\n# End\n"
  },
  {
    "path": "RunTest.bat",
    "content": "@echo off\r\n@rem\r\n@rem MS Windows batch file to run pcre2test on testfiles with the correct\r\n@rem options. This file must use CRLF linebreaks to function properly.\r\n@rem\r\n@rem ------------------------ HISTORY ----------------------------------\r\n@rem This file was originally contributed to PCRE1 by Ralf Junker, and touched\r\n@rem up by Daniel Richard G. Tests 10-12 added by Philip H.\r\n@rem Philip H also changed test 3 to use \"wintest\" files.\r\n@rem\r\n@rem Updated by Tom Fortmann to support explicit test numbers on the command\r\n@rem line. Added argument validation and added error reporting.\r\n@rem\r\n@rem Sheri Pierce added logic to skip feature dependent tests\r\n@rem tests 4 5 7 10 12 14 19 22 25 and 26 require Unicode support\r\n@rem 8 requires Unicode\r\n@rem 16 requires absence of jit support\r\n@rem 17 requires presence of jit support\r\n@rem Sheri P also added override tests for study and jit testing\r\n@rem Zoltan Herczeg added libpcre16 support\r\n@rem Zoltan Herczeg added libpcre32 support\r\n@rem -------------------------------------------------------------------\r\n@rem\r\n@rem The file was converted for PCRE2 by PH, February 2015.\r\n@rem Updated for new test 14 (moving others up a number), August 2015.\r\n@rem Tidied and updated for new tests 21, 22, 23 by PH, October 2015.\r\n@rem PH added missing \"set type\" for test 22, April 2016.\r\n@rem PH added copy command for new testbtables file, November 2020\r\n@rem PH caused it to show comparison output when comparison failed, July 2023\r\n@rem PH updated unknown error number in test\r\n\r\n\r\nsetlocal enabledelayedexpansion\r\nif [%srcdir%]==[] (\r\nif exist testdata\\ set srcdir=.)\r\nif [%srcdir%]==[] (\r\nif exist ..\\testdata\\ set srcdir=..)\r\nif [%srcdir%]==[] (\r\nif exist ..\\..\\testdata\\ set srcdir=..\\..)\r\nif NOT exist %srcdir%\\testdata\\ (\r\necho Error: distribution testdata folder not found!\r\ncall :conferror\r\nexit /b 1\r\ngoto :eof\r\n)\r\n\r\nif [%pcre2test%]==[] set pcre2test=.\\pcre2test.exe\r\n\r\necho source dir is %srcdir%\r\necho pcre2test=%pcre2test%\r\n\r\nif NOT exist %pcre2test% (\r\necho Error: %pcre2test% not found!\r\necho.\r\ncall :conferror\r\nexit /b 1\r\n)\r\n\r\n%pcre2test% -C pcre2-8 >NUL\r\nset support8=%ERRORLEVEL%\r\n%pcre2test% -C pcre2-16 >NUL\r\nset support16=%ERRORLEVEL%\r\n%pcre2test% -C pcre2-32 >NUL\r\nset support32=%ERRORLEVEL%\r\n%pcre2test% -C unicode >NUL\r\nset unicode=%ERRORLEVEL%\r\n%pcre2test% -C jit >NUL\r\nset jit=%ERRORLEVEL%\r\n%pcre2test% -C backslash-C >NUL\r\nset supportBSC=%ERRORLEVEL%\r\n%pcre2test% -C ebcdic >NUL\r\nset ebcdic=%ERRORLEVEL%\r\n%pcre2test% -C ebcdic-nl25 >NUL\r\nset ebcdic_nl25=%ERRORLEVEL%\r\n\r\nif %support8% EQU 1 (\r\nif not exist testout8 md testout8\r\nif not exist testoutjit8 md testoutjit8\r\n)\r\n\r\nif %support16% EQU 1 (\r\nif not exist testout16 md testout16\r\nif not exist testoutjit16 md testoutjit16\r\n)\r\n\r\nif %support32% EQU 1 (\r\nif not exist testout32 md testout32\r\nif not exist testoutjit32 md testoutjit32\r\n)\r\n\r\nset do1=no\r\nset do2=no\r\nset do3=no\r\nset do4=no\r\nset do5=no\r\nset do6=no\r\nset do7=no\r\nset do8=no\r\nset do9=no\r\nset do10=no\r\nset do11=no\r\nset do12=no\r\nset do13=no\r\nset do14=no\r\nset do15=no\r\nset do16=no\r\nset do17=no\r\nset do18=no\r\nset do19=no\r\nset do20=no\r\nset do21=no\r\nset do22=no\r\nset do23=no\r\nset do24=no\r\nset do25=no\r\nset do26=no\r\nset do27=no\r\nset do28=no\r\nset do29=no\r\nset all=yes\r\n\r\nfor %%a in (%*) do (\r\n  set valid=no\r\n  for %%v in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29) do if %%v == %%a set valid=yes\r\n  if \"!valid!\" == \"yes\" (\r\n    set do%%a=yes\r\n    set all=no\r\n  ) else (\r\n    echo Invalid test number - %%a!\r\n    echo Usage %0 [ test_number ] ...\r\n    echo Where test_number is one or more optional test numbers 1 through 29, default is all tests.\r\n    exit /b 1\r\n  )\r\n)\r\nset failed=\"no\"\r\n\r\nif \"%all%\" == \"yes\" (\r\n  set do1=yes\r\n  set do2=yes\r\n  set do3=yes\r\n  set do4=yes\r\n  set do5=yes\r\n  set do6=yes\r\n  set do7=yes\r\n  set do8=yes\r\n  set do9=yes\r\n  set do10=yes\r\n  set do11=yes\r\n  set do12=yes\r\n  set do13=yes\r\n  set do14=yes\r\n  set do15=yes\r\n  set do16=yes\r\n  set do17=yes\r\n  set do18=yes\r\n  set do19=yes\r\n  set do20=yes\r\n  set do21=yes\r\n  set do22=yes\r\n  set do23=yes\r\n  set do24=yes\r\n  set do25=yes\r\n  set do26=yes\r\n  set do27=yes\r\n  set do28=yes\r\n  set do29=yes\r\n)\r\n\r\n@echo RunTest.bat's pcre2test output is written to newly created subfolders\r\n@echo named testout{8,16,32} and testoutjit{8,16,32}.\r\n@echo.\r\n\r\nset mode=\r\nset bits=8\r\n\r\n:nextMode\r\nif \"%mode%\" == \"\" (\r\n  if %support8% EQU 0 goto modeSkip\r\n  echo.\r\n  echo ---- Testing 8-bit library ----\r\n  echo.\r\n)\r\nif \"%mode%\" == \"-16\" (\r\n  if %support16% EQU 0 goto modeSkip\r\n  echo.\r\n  echo ---- Testing 16-bit library ----\r\n  echo.\r\n)\r\nif \"%mode%\" == \"-32\" (\r\n  if %support32% EQU 0 goto modeSkip\r\n  echo.\r\n  echo ---- Testing 32-bit library ----\r\n  echo.\r\n)\r\nif \"%do1%\" == \"yes\" call :do1\r\nif \"%do2%\" == \"yes\" call :do2\r\nif \"%do3%\" == \"yes\" call :do3\r\nif \"%do4%\" == \"yes\" call :do4\r\nif \"%do5%\" == \"yes\" call :do5\r\nif \"%do6%\" == \"yes\" call :do6\r\nif \"%do7%\" == \"yes\" call :do7\r\nif \"%do8%\" == \"yes\" call :do8\r\nif \"%do9%\" == \"yes\" call :do9\r\nif \"%do10%\" == \"yes\" call :do10\r\nif \"%do11%\" == \"yes\" call :do11\r\nif \"%do12%\" == \"yes\" call :do12\r\nif \"%do13%\" == \"yes\" call :do13\r\nif \"%do14%\" == \"yes\" call :do14\r\nif \"%do15%\" == \"yes\" call :do15\r\nif \"%do16%\" == \"yes\" call :do16\r\nif \"%do17%\" == \"yes\" call :do17\r\nif \"%do18%\" == \"yes\" call :do18\r\nif \"%do19%\" == \"yes\" call :do19\r\nif \"%do20%\" == \"yes\" call :do20\r\nif \"%do21%\" == \"yes\" call :do21\r\nif \"%do22%\" == \"yes\" call :do22\r\nif \"%do23%\" == \"yes\" call :do23\r\nif \"%do24%\" == \"yes\" call :do24\r\nif \"%do25%\" == \"yes\" call :do25\r\nif \"%do26%\" == \"yes\" call :do26\r\nif \"%do27%\" == \"yes\" call :do27\r\nif \"%do28%\" == \"yes\" call :do28\r\nif \"%do29%\" == \"yes\" call :do29\r\n:modeSkip\r\nif \"%mode%\" == \"\" (\r\n  set mode=-16\r\n  set bits=16\r\n  goto nextMode\r\n)\r\nif \"%mode%\" == \"-16\" (\r\n  set mode=-32\r\n  set bits=32\r\n  goto nextMode\r\n)\r\n\r\n@rem If mode is -32, testing is finished\r\nif %failed% == \"yes\" (\r\necho In above output, one or more of the various tests failed!\r\nexit /b 1\r\n)\r\necho All OK\r\ngoto :eof\r\n\r\n:runsub\r\n@rem Function to execute pcre2test and compare the output\r\n@rem Arguments are as follows:\r\n@rem\r\n@rem       1 = test number\r\n@rem       2 = outputdir\r\n@rem       3 = test name use double quotes\r\n@rem   4 - 9 = pcre2test options\r\n\r\nif [%1] == [] (\r\n  echo Missing test number argument!\r\n  exit /b 1\r\n)\r\n\r\nif [%2] == [] (\r\n  echo Missing outputdir!\r\n  exit /b 1\r\n)\r\n\r\nif [%3] == [] (\r\n  echo Missing test name argument!\r\n  exit /b 1\r\n)\r\n\r\nif %1 == 8 (\r\n  %pcre2test% -%bits% -C linksize >NUL\r\n  set bits_link_size=!ERRORLEVEL!\r\n  set outnum=%1-%bits%-!bits_link_size!\r\n) else if %1 == 11 (\r\n  set outnum=%1-%bits%\r\n) else if %1 == 12 (\r\n  set outnum=%1-%bits%\r\n) else if %1 == 14 (\r\n  set outnum=%1-%bits%\r\n) else if %1 == 22 (\r\n  set outnum=%1-%bits%\r\n) else (\r\n  set outnum=%1\r\n)\r\nset testinput=testinput%1\r\nset testoutput=testoutput%outnum%\r\nif exist %srcdir%\\testdata\\win%testinput% (\r\n  set testinput=wintestinput%1\r\n  set testoutput=wintestoutput%outnum%\r\n)\r\n\r\necho Test %1: %3\r\n%pcre2test% %mode% %4 %5 %6 %7 %8 %9 %srcdir%\\testdata\\%testinput% >%2%bits%\\%testoutput%\r\nif errorlevel 1 (\r\n  echo.          failed executing command-line:\r\n  echo.            %pcre2test% %mode% %4 %5 %6 %7 %8 %9 %srcdir%\\testdata\\%testinput% ^>%2%bits%\\%testoutput%\r\n  set failed=\"yes\"\r\n  goto :eof\r\n) else if [%1]==[2] (\r\n  %pcre2test% %mode% %4 %5 %6 %7 %8 %9 -error -80,-62,-2,-1,0,100,101,191,300 >>%2%bits%\\%testoutput%\r\n)\r\n\r\nset testexpected=%srcdir%\\testdata\\%testoutput%\r\n\r\nif %ebcdic% EQU 1 (\r\n  @rem We currently only use the #if ... #endif support in pcre2test for EBCDIC\r\n  @rem testing. Run in \"preprocess-only\" mode (-E) on the testoutput file to trim\r\n  @rem the output lines matching the input lines which are discarded.\r\n  %pcre2test% -q -E %testexpected% >%2%bits%\\%testoutput%-trimmed\r\n  set testexpected=%2%bits%\\%testoutput%-trimmed\r\n)\r\n\r\nfc /n %testexpected% %2%bits%\\%testoutput% >NUL\r\n\r\nif errorlevel 1 (\r\n  echo.          failed comparison: fc /n %testexpected% %2%bits%\\%testoutput%\r\n  if [%1]==[3] (\r\n    echo.\r\n    echo ** Test 3 failure usually means french locale is not\r\n    echo ** available on the system, rather than a bug or problem with PCRE2.\r\n    echo.\r\n    goto :eof\r\n)\r\n  fc /n %testexpected% %2%bits%\\%testoutput%\r\n\r\n  set failed=\"yes\"\r\n  goto :eof\r\n)\r\n\r\necho.          Passed.\r\ngoto :eof\r\n\r\n:do1\r\ncall :runsub 1 testout \"Main non-UTF, non-UCP functionality (Compatible with Perl >= 5.10)\" -q\r\nif %jit% EQU 1 call :runsub 1 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do2\r\n  copy /y %srcdir%\\testdata\\testbtables testbtables\r\n  call :runsub 2 testout \"API, errors, internals, and non-Perl stuff\" -q\r\n  if %jit% EQU 1 call :runsub 2 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do3\r\n  call :runsub 3 testout \"Locale-specific features\" -q\r\n  if %jit% EQU 1 call :runsub 3 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do4\r\nif %unicode% EQU 0 (\r\n  echo Test 4 Skipped due to absence of Unicode support.\r\n  goto :eof\r\n)\r\n  call :runsub 4 testout \"UTF-%bits% and Unicode property support - (Compatible with Perl >= 5.10)\" -q\r\n  if %jit% EQU 1 call :runsub 4 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do5\r\nif %unicode% EQU 0 (\r\n  echo Test 5 Skipped due to absence of Unicode support.\r\n  goto :eof\r\n)\r\n  call :runsub 5 testout \"API, internals, and non-Perl stuff for UTF-%bits% and UCP\" -q\r\n  if %jit% EQU 1 call :runsub 5 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do6\r\n  call :runsub 6 testout \"DFA matching main non-UTF, non-UCP functionality\" -q\r\ngoto :eof\r\n\r\n:do7\r\nif %unicode% EQU 0 (\r\n  echo Test 7 Skipped due to absence of Unicode support.\r\n  goto :eof\r\n)\r\n  call :runsub 7 testout \"DFA matching with UTF-%bits% and Unicode property support\" -q\r\n  goto :eof\r\n\r\n:do8\r\nif %unicode% EQU 0 (\r\n  echo Test 8 Skipped due to absence of Unicode support.\r\n  goto :eof\r\n)\r\n  call :runsub 8 testout \"Internal offsets and code size tests\" -q\r\ngoto :eof\r\n\r\n:do9\r\nif NOT %bits% EQU 8 (\r\n  echo Test 9 Skipped when running 16/32-bit tests.\r\n  goto :eof\r\n)\r\n  call :runsub 9 testout \"Specials for the basic 8-bit library\" -q\r\n  if %jit% EQU 1 call :runsub 9 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do10\r\nif NOT %bits% EQU 8 (\r\n  echo Test 10 Skipped when running 16/32-bit tests.\r\n  goto :eof\r\n)\r\nif %unicode% EQU 0 (\r\n  echo Test 10 Skipped due to absence of Unicode support.\r\n  goto :eof\r\n)\r\n  call :runsub 10 testout \"Specials for the 8-bit library with Unicode support\" -q\r\n  if %jit% EQU 1 call :runsub 10 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do11\r\nif %bits% EQU 8 (\r\n  echo Test 11 Skipped when running 8-bit tests.\r\n  goto :eof\r\n)\r\n  call :runsub 11 testout \"Specials for the basic 16/32-bit library\" -q\r\n  if %jit% EQU 1 call :runsub 11 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do12\r\nif %bits% EQU 8 (\r\n  echo Test 12 Skipped when running 8-bit tests.\r\n  goto :eof\r\n)\r\nif %unicode% EQU 0 (\r\n  echo Test 12 Skipped due to absence of Unicode support.\r\n  goto :eof\r\n)\r\n  call :runsub 12 testout \"Specials for the 16/32-bit library with Unicode support\" -q\r\n  if %jit% EQU 1 call :runsub 12 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do13\r\nif %bits% EQU 8 (\r\n  echo Test 13 Skipped when running 8-bit tests.\r\n  goto :eof\r\n)\r\n  call :runsub 13 testout \"DFA specials for the basic 16/32-bit library\" -q\r\ngoto :eof\r\n\r\n:do14\r\nif %unicode% EQU 0 (\r\n  echo Test 14 Skipped due to absence of Unicode support.\r\n  goto :eof\r\n)\r\n  call :runsub 14 testout \"DFA specials for UTF and UCP support\" -q\r\n  goto :eof\r\n\r\n:do15\r\ncall :runsub 15 testout \"Non-JIT limits and other non_JIT tests\" -q\r\ngoto :eof\r\n\r\n:do16\r\nif %jit% EQU 1 (\r\n  echo Test 16 Skipped due to presence of JIT support.\r\n  goto :eof\r\n)\r\n  call :runsub 16 testout \"JIT-specific features when JIT is not available\" -q\r\ngoto :eof\r\n\r\n:do17\r\nif %jit% EQU 0 (\r\n  echo Test 17 Skipped due to absence of JIT support.\r\n  goto :eof\r\n)\r\n  call :runsub 17 testout \"JIT-specific features when JIT is available\" -q\r\ngoto :eof\r\n\r\n:do18\r\nif %bits% EQU 16 (\r\n  echo Test 18 Skipped when running 16-bit tests.\r\n  goto :eof\r\n)\r\nif %bits% EQU 32 (\r\n  echo Test 18 Skipped when running 32-bit tests.\r\n  goto :eof\r\n)\r\n  call :runsub 18 testout \"POSIX interface, excluding UTF-8 and UCP\" -q\r\ngoto :eof\r\n\r\n:do19\r\nif %bits% EQU 16 (\r\n  echo Test 19 Skipped when running 16-bit tests.\r\n  goto :eof\r\n)\r\nif %bits% EQU 32 (\r\n  echo Test 19 Skipped when running 32-bit tests.\r\n  goto :eof\r\n)\r\nif %unicode% EQU 0 (\r\n  echo Test 19 Skipped due to absence of Unicode support.\r\n  goto :eof\r\n)\r\n  call :runsub 19 testout \"POSIX interface with UTF-8 and UCP\" -q\r\ngoto :eof\r\n\r\n:do20\r\ncall :runsub 20 testout \"Serialization tests\" -q\r\ngoto :eof\r\n\r\n:do21\r\nif %supportBSC% EQU 0 (\r\n  echo Test 21 Skipped due to absence of backslash-C support.\r\n  goto :eof\r\n)\r\n  call :runsub 21 testout \"Backslash-C tests without UTF\" -q\r\n  call :runsub 21 testout \"Backslash-C tests without UTF (DFA)\" -q -dfa\r\n  if %jit% EQU 1 call :runsub 21 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do22\r\nif %supportBSC% EQU 0 (\r\n  echo Test 22 Skipped due to absence of backslash-C support.\r\n  goto :eof\r\n)\r\nif %unicode% EQU 0 (\r\n  echo Test 22 Skipped due to absence of Unicode support.\r\n  goto :eof\r\n)\r\n  call :runsub 22 testout \"Backslash-C tests with UTF\" -q\r\n  if %jit% EQU 1 call :runsub 22 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do23\r\nif %supportBSC% EQU 1 (\r\n  echo Test 23 Skipped due to presence of backslash-C support.\r\n  goto :eof\r\n)\r\n  call :runsub 23 testout \"Backslash-C disabled test\" -q\r\ngoto :eof\r\n\r\n:do24\r\ncall :runsub 24 testout \"Non-UTF pattern conversion tests\" -q\r\ngoto :eof\r\n\r\n:do25\r\nif %unicode% EQU 0 (\r\n  echo Test 25 Skipped due to absence of Unicode support.\r\n  goto :eof\r\n)\r\n  call :runsub 25 testout \"UTF pattern conversion tests\" -q\r\ngoto :eof\r\n\r\n:do26\r\nif %unicode% EQU 0 (\r\n  echo Test 26 Skipped due to absence of Unicode support.\r\n  goto :eof\r\n)\r\n  call :runsub 26 testout \"Unicode property tests (Compatible with Perl >= 5.38)\" -q\r\n  if %jit% EQU 1 call :runsub 26 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do27\r\nif %unicode% EQU 0 (\r\n  echo Test 27 Skipped due to absence of Unicode support.\r\n  goto :eof\r\n)\r\n  call :runsub 27 testout \"Auto-generated unicode property tests\" -q\r\n  if %jit% EQU 1 call :runsub 27 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do28\r\nif %ebcdic% EQU 0 (\r\n  echo Test 28 Skipped when not targetting EBCDIC.\r\n  goto :eof\r\n)\r\n  call :runsub 28 testout \"EBCDIC-specific tests\" -q\r\n  call :runsub 28 testout \"EBCDIC-specific tests (DFA)\" -q -dfa\r\n  if %jit% EQU 1 call :runsub 28 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:do29\r\nif %ebcdic% EQU 0 (\r\n  echo Test 29 Skipped when not targetting EBCDIC.\r\n  goto :eof\r\n)\r\nif %ebcdic_nl25% EQU 0 (\r\n  echo Test 29 Skipped because EBCDIC newline is not 0x25.\r\n  goto :eof\r\n)\r\n  call :runsub 29 testout \"EBCDIC-specific tests for NL=0x25\" -q\r\n  call :runsub 29 testout \"EBCDIC-specific tests for NL=0x25 (DFA)\" -q -dfa\r\n  if %jit% EQU 1 call :runsub 29 testoutjit \"Test with JIT Override\" -q -jit\r\ngoto :eof\r\n\r\n:conferror\r\n@echo.\r\n@echo Either your build is incomplete or you have a configuration error.\r\n@echo.\r\n@echo If configured with cmake and executed via \"make test\" or the MSVC \"RUN_TESTS\"\r\n@echo project, pcre2_test.bat defines variables and automatically calls RunTest.bat.\r\n@echo For manual testing of all available features, after configuring with cmake\r\n@echo and building, you can run the built pcre2_test.bat. For best results with\r\n@echo cmake builds and tests avoid directories with full path names that include\r\n@echo spaces for source or build.\r\n@echo.\r\n@echo Otherwise, if the build dir is in a subdir of the source dir, testdata needed\r\n@echo for input and verification should be found automatically when (from the\r\n@echo location of the the built exes) you call RunTest.bat. By default RunTest.bat\r\n@echo runs all tests compatible with the linked pcre2 library but it can be given\r\n@echo a test number as an argument.\r\n@echo.\r\n@echo If the build dir is not under the source dir you can either copy your exes\r\n@echo to the source folder or copy RunTest.bat and the testdata folder to the\r\n@echo location of your built exes and then run RunTest.bat.\r\n@echo.\r\ngoto :eof\r\n"
  },
  {
    "path": "SECURITY.md",
    "content": "Security policies\n=================\n\nRelease security\n----------------\n\nThe PCRE2 project provides source-only releases, with no binaries.\n\nThese source releases can be downloaded from the\n[GitHub Releases](https://github.com/PCRE2Project/pcre2/releases) page. Each\nrelease file is GPG-signed.\n\n* Releases up to and including 10.44 are signed by Philip Hazel (GPG key:\n  <kbd>45F68D54BBE23FB3039B46E59766E084FB0F43D8</kbd>)\n* Releases from 10.45 onwards will be signed by Nicholas Wilson (GPG key:\n  <kbd>A95536204A3BB489715231282A98E77EB6F24CA8</kbd>, cross-signed by Philip\n  Hazel's key for release continuity)\n\nFrom releases 10.45 onwards, the source code will additionally be provided via\nGit checkout of the (GPG-signed) release tag.\n\nPlease contact the maintainers for any queries about release integrity or the\nproject's supply-chain.\n\nPrevious vulnerabilities\n------------------------\n\n* CVE-2025-58050 (August 2025). Affects 10.45 only (not earlier), and is fixed\n  in 10.46.\n\nReporting vulnerabilities\n-------------------------\n\nThe PCRE2 project prioritises security. We appreciate third-party testing and\nsecurity research, and would be grateful if you could responsibly disclose your\nfindings to us. We will make every effort to acknowledge your contributions.\n\nTo report a security issue, please use the GitHub Security Advisory\n[\"Report a Vulnerability\"](https://github.com/PCRE2Project/pcre2/security/advisories/new)\ntab. (Alternatively, if you prefer you may send a GPG-encrypted email to one of\nthe maintainers.)\n\n### Timeline\n\nAs a very small volunteer team, we cannot guarantee rapid response, but would\naim to respond within 1 week, or perhaps 2 during holidays.\n\n### Response procedure\n\nPCRE2 has in the past made at least one rapid release in response to\nsecurity incidents.\n\nWe have never produced an embargoed release, or provided preferential\naccess to security fixes to any clients.\n\nWe would aim to notify security managers from trusted downstream distributors,\nsuch as major Linux distributions, via the `pcre2-dev` mailing list, by\npublicly signalling an upcoming security release before disclosing the\nvulnerability publicly, where advance notification is possible.\n"
  },
  {
    "path": "autogen.sh",
    "content": "#!/bin/sh\n\n# Running aclocal here first (as happened for a while) caused the macros that\n# libtoolize puts in the m4 directory to be newer than the aclocal.m4 file that\n# aclocal creates. This meant that the next \"make\" cause aclocal to be run\n# again. Moving aclocal to after libtoolize does not seem to cause any\n# problems, and it fixes this issue.\n\n# GNU libtool is named differently on some systems.  This code tries several\n# variants like glibtoolize (MacOSX) and libtoolize1x (FreeBSD)\n\nset +ex\n\necho \"Looking for a version of libtoolize (which can have different names)...\"\nlibtoolize=\"\"\nfor l in glibtoolize libtoolize15 libtoolize14 libtoolize ; do\n    $l --version > /dev/null 2>&1\n    if [ $? = 0 ]; then\n        libtoolize=$l\n        echo \"Found $l\" \n        break\n    fi\n    echo \"Did not find $l\" \ndone\n\nif [ \"x$libtoolize\" = \"x\" ]; then\n    echo \"Can't find libtoolize on your system\"\n    exit 1\nfi\n\n$libtoolize --version | head -n1\nautoconf --version | head -n1\nautomake --version | head -n1\n\nset -ex\n\n$libtoolize -c -f\nrm -rf autom4te.cache Makefile.in aclocal.m4\naclocal --force -I m4\nautoconf -f -W all,no-obsolete\nautoheader -f -W all\n\n# Added no-portability to suppress automake 1.12's warning about the use\n# of recursive variables.\n\nautomake -a -c -f -W all,no-portability\n\nrm -rf autom4te.cache\nexit 0\n\n# end autogen.sh\n"
  },
  {
    "path": "build.zig",
    "content": "const std = @import(\"std\");\n\npub const CodeUnitWidth = enum {\n    @\"8\",\n    @\"16\",\n    @\"32\",\n};\n\npub fn build(b: *std.Build) !void {\n    const optimize = b.standardOptimizeOption(.{});\n    const target = b.standardTargetOptions(.{});\n    const rt = target.result;\n\n    const linkage = b.option(std.builtin.LinkMode, \"linkage\", \"whether to statically or dynamically link the library\") orelse @as(std.builtin.LinkMode, if (rt.isGnuLibC()) .dynamic else .static);\n    const sanitize_c = b.option(std.zig.SanitizeC, \"sanitize_c\", \"whether to build with undefined behaviour sanitizer enabled\") orelse .off;\n    const codeUnitWidth = b.option(CodeUnitWidth, \"code-unit-width\", \"Sets the code unit width\") orelse .@\"8\";\n    const jit = b.option(bool, \"support_jit\", \"Enable/disable JIT compiler support\") orelse false;\n\n    const pcre2_h_dir = b.addWriteFiles();\n    const pcre2_h = pcre2_h_dir.addCopyFile(b.path(\"src/pcre2.h.generic\"), \"pcre2.h\");\n    b.addNamedLazyPath(\"pcre2.h\", pcre2_h);\n\n    const is_unix = rt.os.tag != .windows;\n    const is_mingw = rt.isMinGW();\n    const is_musl = rt.isMuslLibC();\n    const is_glibc = rt.isGnuLibC();\n    const is_freebsd = rt.isFreeBSDLibC();\n\n    const cflags = &.{\n        \"-fvisibility=hidden\",\n    };\n\n    const config_h = b.addConfigHeader(\n        .{\n            .style = .{\n                .cmake = b.path(\"src/config-cmake.h.in\"),\n            },\n            .include_path = \"config.h\",\n        },\n        // These options should be kept in-sync with those in config-cmake.h.in, and\n        // should be the same set of options (no more needed). It is permitted to\n        // specify fewer options here than in config-cmake.h.in, if an option is\n        // disabled in all zig build configurations.\n        .{\n            .HAVE_ASSERT_H = true,\n            .HAVE_DIRENT_H = is_unix or is_mingw,\n            .HAVE_SYS_STAT_H = true,\n            .HAVE_SYS_TYPES_H = true,\n            .HAVE_UNISTD_H = is_unix or is_mingw,\n            .HAVE_WINDOWS_H = rt.os.tag == .windows,\n\n            .HAVE_MEMFD_CREATE = is_musl or is_glibc or is_freebsd,\n            .HAVE_SECURE_GETENV = is_musl or is_glibc or is_freebsd,\n            .HAVE_SETRLIMIT = is_unix and !is_mingw,\n\n            // all compilation is using the Zig bundled c compiler\n            .HAVE_BUILTIN_ASSUME = null,\n            .HAVE_BUILTIN_MUL_OVERFLOW = true,\n            .HAVE_BUILTIN_UNREACHABLE = true,\n            .HAVE_ATTRIBUTE_UNINITIALIZED = true,\n\n            .SUPPORT_PCRE2_8 = codeUnitWidth == .@\"8\",\n            .SUPPORT_PCRE2_16 = codeUnitWidth == .@\"16\",\n            .SUPPORT_PCRE2_32 = codeUnitWidth == .@\"32\",\n            .SUPPORT_UNICODE = true,\n            .SUPPORT_JIT = jit,\n\n            // As for CMake builds, use visibilty attributes for both shared and static\n            // builds. Internal symbols should be hidden even in static builds, because\n            // the user could be statically linking PCRE2 into their own shared library.\n            .PCRE2_EXPORT = \"__attribute__ ((visibility (\\\"default\\\")))\",\n\n            .PCRE2_LINK_SIZE = 2,\n            .PCRE2_PARENS_NEST_LIMIT = 250,\n            .PCRE2_HEAP_LIMIT = 20000000,\n            .PCRE2_MAX_VARLOOKBEHIND = 255,\n            .PCRE2_MATCH_LIMIT = 10000000,\n            .PCRE2_MATCH_LIMIT_DEPTH = \"MATCH_LIMIT\",\n            .PCRE2GREP_BUFSIZE = 20480,\n            .PCRE2GREP_MAX_BUFSIZE = 1048576,\n            .NEWLINE_DEFAULT = 2,\n        },\n    );\n\n    // pcre2-8/16/32 library\n    const lib_mod = b.createModule(.{\n        .target = target,\n        .optimize = optimize,\n        .sanitize_c = sanitize_c,\n        .link_libc = true,\n    });\n\n    lib_mod.addCMacro(\"HAVE_CONFIG_H\", \"\");\n    lib_mod.addCMacro(\"PCRE2_CODE_UNIT_WIDTH\", @tagName(codeUnitWidth));\n    switch (linkage) {\n        .static => lib_mod.addCMacro(\"PCRE2_STATIC\", \"\"),\n        .dynamic => {},\n    }\n    lib_mod.addConfigHeader(config_h);\n    lib_mod.addIncludePath(pcre2_h_dir.getDirectory());\n    lib_mod.addIncludePath(b.path(\"src\"));\n\n    lib_mod.addCSourceFile(.{\n        .file = b.addWriteFiles().addCopyFile(b.path(\"src/pcre2_chartables.c.dist\"), \"pcre2_chartables.c\"),\n        .flags = cflags,\n    });\n    lib_mod.addCSourceFiles(.{\n        .files = &.{\n            \"src/pcre2_auto_possess.c\",\n            \"src/pcre2_chkdint.c\",\n            \"src/pcre2_compile.c\",\n            \"src/pcre2_compile_cgroup.c\",\n            \"src/pcre2_compile_class.c\",\n            \"src/pcre2_config.c\",\n            \"src/pcre2_context.c\",\n            \"src/pcre2_convert.c\",\n            \"src/pcre2_dfa_match.c\",\n            \"src/pcre2_error.c\",\n            \"src/pcre2_extuni.c\",\n            \"src/pcre2_find_bracket.c\",\n            \"src/pcre2_jit_compile.c\",\n            \"src/pcre2_maketables.c\",\n            \"src/pcre2_match.c\",\n            \"src/pcre2_match_data.c\",\n            \"src/pcre2_match_next.c\",\n            \"src/pcre2_newline.c\",\n            \"src/pcre2_ord2utf.c\",\n            \"src/pcre2_pattern_info.c\",\n            \"src/pcre2_script_run.c\",\n            \"src/pcre2_serialize.c\",\n            \"src/pcre2_string_utils.c\",\n            \"src/pcre2_study.c\",\n            \"src/pcre2_substitute.c\",\n            \"src/pcre2_substring.c\",\n            \"src/pcre2_tables.c\",\n            \"src/pcre2_ucd.c\",\n            \"src/pcre2_valid_utf.c\",\n            \"src/pcre2_xclass.c\",\n        },\n        .flags = cflags,\n    });\n\n    const lib = b.addLibrary(.{\n        .name = b.fmt(\"pcre2-{t}\", .{codeUnitWidth}),\n        .root_module = lib_mod,\n        .linkage = linkage,\n    });\n\n    lib.installHeader(pcre2_h, \"pcre2.h\");\n    b.installArtifact(lib);\n\n    // pcre2test\n    const pcre2test_mod = b.createModule(.{\n        .target = target,\n        .optimize = optimize,\n        .sanitize_c = sanitize_c,\n        .link_libc = true,\n    });\n\n    pcre2test_mod.addCMacro(\"HAVE_CONFIG_H\", \"\");\n\n    // Note: On Windows, consumers linking against the static library should\n    // probably define PCRE2_STATIC themselves (e.g. via\n    // addCMacro(\"PCRE2_STATIC\", \"\")).\n    // As far as I know, Zig's build system does not currently have a mechanism\n    // to propagate compile definitions to downstream consumers (like CMake's\n    // PUBLIC target_compile_definitions). On non-Windows targets this is a no-op.\n    switch (linkage) {\n        .static => pcre2test_mod.addCMacro(\"PCRE2_STATIC\", \"\"),\n        .dynamic => pcre2test_mod.addCMacro(\"PCRE2POSIX_SHARED\", \"\"),\n    }\n\n    const pcre2test = b.addExecutable(.{\n        .name = \"pcre2test\",\n        .root_module = pcre2test_mod,\n    });\n    pcre2test_mod.addConfigHeader(config_h);\n    pcre2test_mod.addIncludePath(pcre2_h_dir.getDirectory());\n    pcre2test_mod.addIncludePath(b.path(\"src\"));\n\n    pcre2test_mod.addCSourceFile(.{\n        .file = b.path(\"src/pcre2test.c\"),\n        .flags = cflags,\n    });\n\n    pcre2test_mod.linkLibrary(lib);\n    b.installArtifact(pcre2test);\n\n    // pcre2-posix library\n    if (codeUnitWidth == CodeUnitWidth.@\"8\") {\n        const posixLib_mod = b.createModule(.{\n            .target = target,\n            .optimize = optimize,\n            .sanitize_c = sanitize_c,\n            .link_libc = true,\n        });\n\n        posixLib_mod.addCMacro(\"HAVE_CONFIG_H\", \"\");\n        posixLib_mod.addCMacro(\"PCRE2_CODE_UNIT_WIDTH\", @tagName(codeUnitWidth));\n\n        switch (linkage) {\n            .static => posixLib_mod.addCMacro(\"PCRE2_STATIC\", \"\"),\n            .dynamic => posixLib_mod.addCMacro(\"PCRE2POSIX_SHARED\", \"\"),\n        }\n\n        posixLib_mod.addConfigHeader(config_h);\n        posixLib_mod.addIncludePath(pcre2_h_dir.getDirectory());\n        posixLib_mod.addIncludePath(b.path(\"src\"));\n\n        posixLib_mod.addCSourceFiles(.{\n            .files = &.{\n                \"src/pcre2posix.c\",\n            },\n            .flags = cflags,\n        });\n\n        posixLib_mod.linkLibrary(lib);\n\n        const posixLib = b.addLibrary(.{\n            .name = \"pcre2-posix\",\n            .root_module = posixLib_mod,\n            .linkage = linkage,\n        });\n\n        pcre2test_mod.linkLibrary(posixLib);\n\n        b.addNamedLazyPath(\"pcre2posix.h\", b.path(\"src/pcre2posix.h\"));\n        posixLib.installHeader(b.path(\"src/pcre2posix.h\"), \"pcre2posix.h\");\n        b.installArtifact(posixLib);\n    }\n}\n"
  },
  {
    "path": "cmake/COPYING-CMAKE-SCRIPTS",
    "content": "Redistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the copyright\n   notice, this list of conditions and the following disclaimer in the\n   documentation and/or other materials provided with the distribution.\n3. The name of the author may not be used to endorse or promote products\n   derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\nIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\nIN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "cmake/FindEditline.cmake",
    "content": "# Modified from FindReadline.cmake (PH Feb 2012)\n\nfind_path(EDITLINE_INCLUDE_DIR readline.h PATH_SUFFIXES editline edit/readline)\nmark_as_advanced(EDITLINE_INCLUDE_DIR)\n\nfind_library(EDITLINE_LIBRARY NAMES edit)\nmark_as_advanced(EDITLINE_LIBRARY)\n\ninclude(FindPackageHandleStandardArgs)\nfind_package_handle_standard_args(Editline DEFAULT_MSG EDITLINE_LIBRARY EDITLINE_INCLUDE_DIR)\n\nif(Editline_FOUND)\n  set(EDITLINE_LIBRARIES \"${EDITLINE_LIBRARY}\")\n  set(EDITLINE_INCLUDE_DIRS \"${EDITLINE_INCLUDE_DIR}\")\nendif()\n"
  },
  {
    "path": "cmake/FindReadline.cmake",
    "content": "# from http://websvn.kde.org/trunk/KDE/kdeedu/cmake/modules/FindReadline.cmake\n# http://websvn.kde.org/trunk/KDE/kdeedu/cmake/modules/COPYING-CMAKE-SCRIPTS\n# --> BSD licensed\n#\n# GNU Readline library finder\n\nfind_path(READLINE_INCLUDE_DIR readline/readline.h PATH_SUFFIXES include)\nmark_as_advanced(READLINE_INCLUDE_DIR)\n\nfind_library(READLINE_LIBRARY NAMES readline)\nmark_as_advanced(READLINE_LIBRARY)\n\nif(READLINE_INCLUDE_DIR AND READLINE_LIBRARY)\n  # Check if we need to link to ncurses as well\n\n  include(CheckSymbolExists)\n  include(CMakePushCheckState)\n\n  set(first_run FALSE)\n  if(NOT DEFINED HAVE_READLINE_FUNC)\n    set(first_run TRUE)\n  endif()\n\n  cmake_push_check_state(RESET)\n  set(CMAKE_REQUIRED_LIBRARIES \"${READLINE_LIBRARY}\")\n  set(CMAKE_REQUIRED_INCLUDES \"${READLINE_INCLUDE_DIR}\")\n  check_symbol_exists(\"readline\" \"stdio.h;readline/readline.h\" HAVE_READLINE_FUNC)\n\n  if(NOT HAVE_READLINE_FUNC)\n    foreach(\n      lib\n      IN\n      ITEMS tinfo curses ncurses ncursesw termcap\n    )\n      find_library(NCURSES_LIBRARY_${lib} NAMES ${lib})\n      mark_as_advanced(NCURSES_LIBRARY_${lib})\n      if(NCURSES_LIBRARY_${lib})\n        cmake_reset_check_state()\n        set(CMAKE_REQUIRED_LIBRARIES \"${READLINE_LIBRARY}\" \"${NCURSES_LIBRARY_${lib}}\")\n        set(CMAKE_REQUIRED_INCLUDES \"${READLINE_INCLUDE_DIR}\")\n        check_symbol_exists(\"readline\" \"stdio.h;readline/readline.h\" HAVE_READLINE_FUNC_${lib})\n\n        if(HAVE_READLINE_FUNC_${lib})\n          if(first_run)\n            message(STATUS \"Looking for readline - readline needs ${lib}\")\n          endif()\n          set(NCURSES_LIBRARY \"${NCURSES_LIBRARY_${lib}}\" CACHE FILEPATH \"Path to the ncurses library\")\n          mark_as_advanced(NCURSES_LIBRARY)\n          break()\n        endif()\n      endif()\n    endforeach()\n  endif()\n\n  cmake_pop_check_state()\nendif()\n\ninclude(FindPackageHandleStandardArgs)\nfind_package_handle_standard_args(Readline DEFAULT_MSG READLINE_LIBRARY READLINE_INCLUDE_DIR)\n\nif(Readline_FOUND)\n  set(READLINE_LIBRARIES \"${READLINE_LIBRARY}\")\n  if(DEFINED NCURSES_LIBRARY)\n    list(APPEND READLINE_LIBRARIES \"${NCURSES_LIBRARY}\")\n  endif()\n  set(READLINE_INCLUDE_DIRS \"${READLINE_INCLUDE_DIR}\")\nendif()\n"
  },
  {
    "path": "cmake/PCRE2CheckVscript.cmake",
    "content": "# Similarly to Autoconf's ax_check_vscript.m4, check whether the linker supports\n# version scripts (GNU ld) or map files (Sun linker).\n# Sets the \"have_var\" to TRUE or FALSE depending on the detected support; and if\n# support is detected then sets \"flag_var\" to the appropriate flag to pass to\n# the linker (namely, --version-script or -M).\n\n# Helper function: try to compile a shared library with a given linker flag and\n# version script. This properly tests version script support by building a\n# shared library rather than an executable, avoiding issues with\n# executable-specific symbols (e.g. FreeBSD's crt1.o symbols, Solaris linker\n# symbols in values-Xc.o).\nfunction(_pcre2_try_vscript_shared_lib link_flag map_file result_var)\n  if(DEFINED ${result_var})\n    return()\n  endif()\n\n  message(STATUS \"Performing Test ${result_var}\")\n\n  set(${result_var} FALSE PARENT_SCOPE)\n\n  set(try_dir \"${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeScratch/CheckVscript\")\n  file(REMOVE_RECURSE \"${try_dir}\")\n  file(MAKE_DIRECTORY \"${try_dir}\")\n\n  # Write a minimal C source with exported symbols\n  file(WRITE \"${try_dir}/test_vscript.c\" \"\nint hidethis(void) { return 0; }\nint exposethis(void) { return hidethis(); }\n\")\n\n  # Write a CMakeLists.txt that builds a shared library with the version script\n  file(WRITE \"${try_dir}/CMakeLists.txt\" \"\ncmake_minimum_required(VERSION 3.15)\nproject(test_vscript C)\nadd_library(test_vscript SHARED test_vscript.c)\ntarget_link_options(test_vscript PRIVATE \\\"-Wl,${link_flag},${map_file}\\\")\n\")\n\n  try_compile(\n    compile_result\n    \"${try_dir}/build\" # BINARY_DIR\n    \"${try_dir}\" # SOURCE_DIR\n    test_vscript # Project name\n    OUTPUT_VARIABLE compile_output\n  )\n\n  if(compile_result)\n    set(${result_var} TRUE PARENT_SCOPE)\n  endif()\n\n  if(${compile_result})\n    set(${result_var} 1 CACHE INTERNAL \"Test ${result_var}\")\n    message(STATUS \"Performing Test ${result_var} - Success\")\n  else()\n    set(${result_var} \"\" CACHE INTERNAL \"Test ${result_var}\")\n    message(STATUS \"Performing Test ${result_var} - Failed\")\n  endif()\nendfunction()\n\nfunction(pcre2_check_vscript have_var flag_var no_star_var)\n  set(${have_var} FALSE PARENT_SCOPE)\n  set(${flag_var} \"\" PARENT_SCOPE)\n  set(${no_star_var} FALSE PARENT_SCOPE)\n\n  if(MSVC)\n    return()\n  endif()\n\n  set(first_run FALSE)\n  if(NOT DEFINED HAVE_VSCRIPT_GNU)\n    set(first_run TRUE)\n    message(STATUS \"Detecting linker version script support\")\n  endif()\n\n  # Write test version script files\n  file(WRITE \"${PROJECT_BINARY_DIR}/test-map-file.sym\" \"PCRE2_10.00 { global: exposethis; local: *; };\")\n  file(WRITE \"${PROJECT_BINARY_DIR}/test-map-file-broken.sym\" \"PCRE2_10.00 { global: exposethis; local: *; };  {\")\n  file(WRITE \"${PROJECT_BINARY_DIR}/test-map-file-no-star.sym\" \"PCRE2_10.00 { global: exposethis; local: hidethis; };\")\n\n  set(HAVE_VSCRIPT FALSE)\n\n  # Test GNU ld --version-script flag\n  _pcre2_try_vscript_shared_lib(\"--version-script\" \"${PROJECT_BINARY_DIR}/test-map-file.sym\" HAVE_VSCRIPT_GNU)\n\n  if(HAVE_VSCRIPT_GNU)\n    set(VSCRIPT_FLAG --version-script)\n    set(HAVE_VSCRIPT TRUE)\n  else()\n    # Test Sun linker -M flag\n    _pcre2_try_vscript_shared_lib(\"-M\" \"${PROJECT_BINARY_DIR}/test-map-file.sym\" HAVE_VSCRIPT_SUN)\n\n    if(HAVE_VSCRIPT_SUN)\n      set(VSCRIPT_FLAG -M)\n      set(HAVE_VSCRIPT TRUE)\n    endif()\n  endif()\n\n  if(HAVE_VSCRIPT)\n    # Perform the same logic as ax_check_vscript.m4, to test whether the linker\n    # silently ignores (and overwrites) linker scripts it doesn't understand.\n    _pcre2_try_vscript_shared_lib(\"${VSCRIPT_FLAG}\" \"${PROJECT_BINARY_DIR}/test-map-file-broken.sym\" HAVE_VSCRIPT_BROKEN)\n\n    if(HAVE_VSCRIPT_BROKEN)\n      set(HAVE_VSCRIPT FALSE)\n    endif()\n  endif()\n\n  if(first_run)\n    if(HAVE_VSCRIPT)\n      message(STATUS \"Detecting linker version script support - yes (${VSCRIPT_FLAG})\")\n    elseif(HAVE_VSCRIPT_BROKEN)\n      message(STATUS \"Detecting linker version script support - no (linker overwrites unknown scripts)\")\n    else()\n      message(STATUS \"Detecting linker version script support - none detected\")\n    endif()\n  endif()\n\n  if(HAVE_VSCRIPT)\n    if(first_run)\n      message(STATUS \"Detecting if version scripts work without wildcard\")\n    endif()\n\n    # Test that the linker works without requiring a wildcard to hide platform-specific\n    # symbols (_init, _fini, etc.).\n    _pcre2_try_vscript_shared_lib(\"${VSCRIPT_FLAG}\" \"${PROJECT_BINARY_DIR}/test-map-file-no-star.sym\" HAVE_VSCRIPT_NO_STAR)\n\n    if(first_run)\n      message(STATUS \"Detecting if version scripts work without wildcard - ${HAVE_VSCRIPT_NO_STAR}\")\n    endif()\n  endif()\n\n  file(REMOVE \"${PROJECT_BINARY_DIR}/test-map-file.sym\")\n  file(REMOVE \"${PROJECT_BINARY_DIR}/test-map-file-broken.sym\")\n  file(REMOVE \"${PROJECT_BINARY_DIR}/test-map-file-no-star.sym\")\n\n  if(HAVE_VSCRIPT)\n    set(${have_var} TRUE PARENT_SCOPE)\n    set(${flag_var} \"${VSCRIPT_FLAG}\" PARENT_SCOPE)\n    set(${no_star_var} \"${HAVE_VSCRIPT_NO_STAR}\" PARENT_SCOPE)\n  endif()\nendfunction()\n"
  },
  {
    "path": "cmake/PCRE2UseSystemExtensions.cmake",
    "content": "# This CMake module is supposed to give similar results to the\n# AC_USE_SYSTEM_EXTENSIONS Autoconf macro, which turns on a load of\n# system feature-check macros, including _ALL_SOURCE, _GNU_SOURCE,\n# _NETBSD_SOURCE, and many more.\n#\n# Because PCRE2 uses so few OS features, we don't seem to actually need to\n# enable many of these. Modern platforms with CMake users generally enable\n# all the basic POSIX features by default.\n#\n# So far, we know that we require:\n#   - _ALL_SOURCE on IBM systems (z/OS, probably AIX) in order to call\n#     getrlimit() in pcre2test.\n#   - _GNU_SOURCE on Linux in order to call mkostemp() in some (non-default)\n#     configurations of the JIT.\n#\n# Autoconf enables this unconditionally. However, our CMake script potentially\n# supports *more* platforms than Autoconf, so we use a feature check.\n\nfunction(pcre2_use_system_extensions)\n  if(WIN32)\n    return()\n  endif()\n\n  set(first_run FALSE)\n  set(found_macro FALSE)\n  if(NOT DEFINED HAVE_GETRLIMIT_NAKED)\n    set(first_run TRUE)\n    message(STATUS \"Detecting platform feature test macros\")\n  endif()\n\n  include(CheckSymbolExists)\n  include(CheckCSourceCompiles)\n  include(CMakePushCheckState)\n\n  cmake_push_check_state(RESET)\n  set(\n    _pcre2_test_src\n    [=[\n    #include <sys/time.h>\n    #include <sys/resource.h>\n\n    int main(void) {\n        struct rlimit rlim;\n        getrlimit(RLIMIT_STACK, &rlim);\n        return 0;\n    }\n    ]=]\n  )\n  set(CMAKE_REQUIRED_QUIET TRUE)\n  check_c_source_compiles(\"${_pcre2_test_src}\" HAVE_GETRLIMIT_NAKED)\n\n  if(NOT HAVE_GETRLIMIT_NAKED)\n    # Try again with _ALL_SOURCE\n    set(CMAKE_REQUIRED_DEFINITIONS \"-D_ALL_SOURCE\")\n    check_c_source_compiles(\"${_pcre2_test_src}\" HAVE_GETRLIMIT_ALLSOURCE)\n    unset(CMAKE_REQUIRED_DEFINITIONS)\n\n    if(HAVE_GETRLIMIT_ALLSOURCE)\n      add_compile_definitions(_ALL_SOURCE)\n      set(found_macro TRUE)\n      if(first_run)\n        message(STATUS \"Detecting platform feature test macros - _ALL_SOURCE\")\n      endif()\n    endif()\n  endif()\n\n  check_symbol_exists(mkostemp stdlib.h HAVE_MKOSTEMP_NAKED)\n\n  if(NOT HAVE_MKOSTEMP_NAKED)\n    # Try again with _GNU_SOURCE\n    set(CMAKE_REQUIRED_DEFINITIONS \"-D_GNU_SOURCE\")\n    check_symbol_exists(mkostemp stdlib.h HAVE_MKOSTEMP_GNUSOURCE)\n    unset(CMAKE_REQUIRED_DEFINITIONS)\n\n    if(HAVE_MKOSTEMP_GNUSOURCE)\n      add_compile_definitions(_GNU_SOURCE)\n      set(found_macro TRUE)\n      if(first_run)\n        message(STATUS \"Detecting platform feature test macros - _GNU_SOURCE\")\n      endif()\n    endif()\n  endif()\n\n  if(first_run AND NOT found_macro)\n    message(STATUS \"Detecting platform feature test macros - none\")\n  endif()\n\n  cmake_pop_check_state()\nendfunction()\n"
  },
  {
    "path": "cmake/PCRE2WarningAsError.cmake",
    "content": "# This file can be removed once the minimum CMake version is increased to 3.24\n# or higher. Calls to pcre2_warning_as_error can be changed to the built in\n# CMAKE_C_COMPILE_OPTIONS_WARNING_AS_ERROR.\n\nfunction(pcre2_warning_as_error out_var)\n  set(${out_var} \"\" PARENT_SCOPE)\n\n  if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.24)\n    # Since CMake 3.24, we should use the CMAKE_C_COMPILE_OPTIONS_WARNING_AS_ERROR\n    # variable for greatest compiler compatibility.\n    if(DEFINED CMAKE_C_COMPILE_OPTIONS_WARNING_AS_ERROR)\n      set(${out_var} \"${CMAKE_C_COMPILE_OPTIONS_WARNING_AS_ERROR}\" PARENT_SCOPE)\n    endif()\n  else()\n    # The fallback probes for support, trying a few common flags.\n\n    if(NOT MSVC)\n      include(CheckCCompilerFlag)\n      include(CMakePushCheckState)\n\n      cmake_push_check_state(RESET)\n      check_c_compiler_flag(\"-Werror\" HAVE_WERROR)\n      if(HAVE_WERROR)\n        set(${out_var} \"-Werror\" PARENT_SCOPE)\n      else()\n        check_c_compiler_flag(\"-errwarn=%all\" HAVE_ERRWARN_ALL)\n        if(HAVE_ERRWARN_ALL)\n          set(${out_var} \"-errwarn=%all\" PARENT_SCOPE)\n        endif()\n      endif()\n\n      cmake_pop_check_state()\n    endif()\n  endif()\nendfunction()\n"
  },
  {
    "path": "cmake/pcre2-config.cmake.in",
    "content": "# pcre2-config.cmake\n# ----------------\n#\n# Finds the PCRE2 library, specify the starting search path in PCRE2_ROOT.\n#\n# Static vs. shared\n# -----------------\n# To force using the static library instead of the shared one, one needs\n# to set the variable PCRE2_USE_STATIC_LIBS to ON before calling find_package.\n# If the variable is not set, the static library will be used if only that has\n# been built, otherwise the shared library will be used.\n#\n# The following components are supported: 8BIT, 16BIT, 32BIT and POSIX.\n# They used to be required but not anymore; all available targets will\n# be defined regardless of the requested components.\n# Example:\n#   set(PCRE2_USE_STATIC_LIBS ON)\n#   find_package(PCRE2 CONFIG)\n#\n# This will define the following variables:\n#\n#   PCRE2_FOUND   - True if the system has the PCRE2 library.\n#   PCRE2_VERSION - The version of the PCRE2 library which was found.\n#\n# and the following imported targets:\n#\n#   PCRE2::8BIT  - The 8 bit PCRE2 library.\n#   PCRE2::16BIT - The 16 bit PCRE2 library.\n#   PCRE2::32BIT - The 32 bit PCRE2 library.\n#   PCRE2::POSIX - The POSIX PCRE2 library.\n\n@PACKAGE_INIT@\n\ninclude(CMakeFindDependencyMacro)\nif(\"@REQUIRE_PTHREAD@\") # REQUIRE_PTHREAD\n  find_dependency(Threads)\nendif()\n\ninclude(\"${CMAKE_CURRENT_LIST_DIR}/pcre2-targets.cmake\")\n\n# Set version\nset(PCRE2_VERSION \"@PCRE2_MAJOR@.@PCRE2_MINOR@.0\")\n\n# Chooses the linkage of the library to expose in the\n# unsuffixed edition of the target.\nmacro(_pcre2_add_component_target component target)\n  # If the static library exists and either PCRE2_USE_STATIC_LIBS\n  # is defined, or the dynamic library does not exist, use the static library.\n  if(NOT TARGET PCRE2::${component})\n    if(TARGET pcre2::pcre2-${target}-static AND (PCRE2_USE_STATIC_LIBS OR NOT TARGET pcre2::pcre2-${target}-shared))\n      add_library(PCRE2::${component} ALIAS pcre2::pcre2-${target}-static)\n      set(PCRE2_${component}_FOUND TRUE)\n      # Otherwise use the dynamic library if it exists.\n    elseif(TARGET pcre2::pcre2-${target}-shared AND NOT PCRE2_USE_STATIC_LIBS)\n      add_library(PCRE2::${component} ALIAS pcre2::pcre2-${target}-shared)\n      set(PCRE2_${component}_FOUND TRUE)\n    endif()\n    if(PCRE2_${component}_FOUND)\n      get_target_property(PCRE2_${component}_LIBRARY PCRE2::${component} IMPORTED_LOCATION)\n      set(PCRE2_LIBRARIES ${PCRE2_LIBRARIES} ${PCRE2_${component}_LIBRARY})\n    endif()\n  endif()\nendmacro()\n_pcre2_add_component_target(8BIT 8)\n_pcre2_add_component_target(16BIT 16)\n_pcre2_add_component_target(32BIT 32)\n_pcre2_add_component_target(POSIX posix)\n\n# When POSIX component has been specified make sure that also 8BIT component is specified.\nset(PCRE2_8BIT_COMPONENT FALSE)\nset(PCRE2_POSIX_COMPONENT FALSE)\nforeach(component ${PCRE2_FIND_COMPONENTS})\n  if(component STREQUAL \"8BIT\")\n    set(PCRE2_8BIT_COMPONENT TRUE)\n  elseif(component STREQUAL \"POSIX\")\n    set(PCRE2_POSIX_COMPONENT TRUE)\n  endif()\nendforeach()\n\nif(PCRE2_POSIX_COMPONENT AND NOT PCRE2_8BIT_COMPONENT)\n  message(\n    FATAL_ERROR\n    \"The component POSIX is specified while the 8BIT one is not. This is not allowed. Please, also specify the 8BIT component.\"\n  )\nendif()\nunset(PCRE2_8BIT_COMPONENT)\nunset(PCRE2_POSIX_COMPONENT)\n\n# Check for required components.\ncheck_required_components(\"PCRE2\")\n"
  },
  {
    "path": "configure.ac",
    "content": "dnl Process this file with autoconf to produce a configure script.\n\ndnl NOTE FOR MAINTAINERS: Do not use minor version numbers 08 or 09 because\ndnl the leading zeros may cause them to be treated as invalid octal constants\ndnl if a PCRE2 user writes code that uses PCRE2_MINOR as a number. There is now\ndnl a check further down that throws an error if 08 or 09 are used.\n\ndnl The PCRE2_PRERELEASE feature is for identifying release candidates. It might\ndnl be defined as -RC2, for example. For real releases, it should be empty.\n\nm4_define(pcre2_major, [10])\nm4_define(pcre2_minor, [48])\nm4_define(pcre2_prerelease, [-DEV])\nm4_define(pcre2_date, [2025-10-21])\n\n# Libtool shared library interface versions (current:revision:age)\nm4_define(libpcre2_8_version,     [15:0:15])\nm4_define(libpcre2_16_version,    [15:0:15])\nm4_define(libpcre2_32_version,    [15:0:15])\nm4_define(libpcre2_posix_version, [3:7:0])\n\n# NOTE: The CMakeLists.txt file searches for the above variables in the first\n# 50 lines of this file. Please update that if the variables above are moved.\n\nAC_PREREQ([2.69])\nAC_INIT([PCRE2],pcre2_major.pcre2_minor[]pcre2_prerelease,[],[pcre2])\nAC_CONFIG_SRCDIR([src/pcre2.h.in])\nAM_INIT_AUTOMAKE([dist-bzip2 dist-zip foreign])\nifelse(pcre2_prerelease, [-DEV],\n  [dnl For development builds, ./configure is not checked in to Git, so we are\n   dnl happy to have it regenerated as needed.\n   AM_MAINTAINER_MODE([enable])],\n  [dnl For a release build (or RC), the ./configure script we ship in the\n   dnl tarball (and check in to the Git tag) should not be regenerated\n   dnl implicitly. This is important if users want to check out a release tag\n   dnl using Git.\n   AM_MAINTAINER_MODE])\nm4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])\nAC_CONFIG_HEADERS(src/config.h)\n\n# This was added at the suggestion of libtoolize (03-Jan-10)\nAC_CONFIG_MACRO_DIR([m4])\n\n# The default CFLAGS in Autoconf are \"-g -O2\" for gcc and just \"-g\" for any\n# other compiler. There doesn't seem to be a standard way of getting rid of the\n# -g (which I don't think is needed for a production library). This fudge seems\n# to achieve the necessary. First, we remember the externally set values of\n# CFLAGS. Then call the AC_PROG_CC macro to find the compiler - if CFLAGS is\n# not set, it will be set to Autoconf's defaults. Afterwards, if the original\n# values were not set, remove the -g from the Autoconf defaults.\n\nremember_set_CFLAGS=\"$CFLAGS\"\n\nm4_version_prereq(2.70, [AC_PROG_CC], [AC_PROG_CC_C99])\nAM_PROG_CC_C_O\nAC_USE_SYSTEM_EXTENSIONS\n\nif test \"x$remember_set_CFLAGS\" = \"x\"\nthen\n  if test \"$CFLAGS\" = \"-g -O2\"\n  then\n    CFLAGS=\"-O2\"\n  elif test \"$CFLAGS\" = \"-g\"\n  then\n    CFLAGS=\"\"\n  fi\nfi\n\n# This is a new thing required to stop a warning from automake 1.12\nm4_ifdef([AM_PROG_AR], [AM_PROG_AR])\n\n# Check for a 64-bit integer type\nAC_TYPE_INT64_T\n\n# Check for xlc which has some special (broken/non-standard) behaviour on z/OS.\nPCRE2_ZOS_FIXES\n\nAC_PROG_INSTALL\nAC_PROG_LN_S\n\n# As well as LT_INIT, we use LT_OUTPUT so that PCRE2_CHECK_VSCRIPT can invoke\n# libtool to test version scripts correctly.\nLT_INIT([win32-dll])\nLT_OUTPUT\n\nAC_SYS_LARGEFILE\n\n# Check for GCC visibility feature\n\nPCRE2_VISIBILITY\n\n# Check for the availability of -Wl,--version-script (or -Wl,-M on Solaris)\n\nPCRE2_CHECK_VSCRIPT\n\n# Check for Clang __attribute__((uninitialized)) feature\n\nAC_MSG_CHECKING([for __attribute__((uninitialized))])\nAC_LANG_PUSH([C])\ntmp_CFLAGS=$CFLAGS\nif test $WORKING_WERROR -eq 1; then\n  CFLAGS=\"$CFLAGS -Werror\"\nfi\nAC_COMPILE_IFELSE([AC_LANG_PROGRAM(,\n                   [[char buf[128] __attribute__((uninitialized));(void)buf]])],\n                   [pcre2_cc_cv_attribute_uninitialized=yes],\n                   [pcre2_cc_cv_attribute_uninitialized=no])\nAC_MSG_RESULT([$pcre2_cc_cv_attribute_uninitialized])\nif test \"$pcre2_cc_cv_attribute_uninitialized\" = yes; then\n  AC_DEFINE([HAVE_ATTRIBUTE_UNINITIALIZED], 1, [Define this if your compiler\n             supports __attribute__((uninitialized))])\nfi\nCFLAGS=$tmp_CFLAGS\nAC_LANG_POP([C])\n\n# Check for the assume() builtin\n\nAC_MSG_CHECKING([for __assume()])\nAC_LANG_PUSH([C])\nAC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[__assume(1)]])],\n  [pcre2_cc_cv_builtin_assume=yes],\n  [pcre2_cc_cv_builtin_assume=no])\nAC_MSG_RESULT([$pcre2_cc_cv_builtin_assume])\nif test \"$pcre2_cc_cv_builtin_assume\" = yes; then\n  AC_DEFINE([HAVE_BUILTIN_ASSUME], 1,\n    [Define this if your compiler provides __assume()])\nfi\nAC_LANG_POP([C])\n\n# Check for the mul_overflow() builtin\n\nAC_MSG_CHECKING([for __builtin_mul_overflow()])\nAC_LANG_PUSH([C])\nAC_LINK_IFELSE([AC_LANG_PROGRAM([[\n\t\t#ifdef HAVE_SYS_TYPES_H\n\t\t#include <sys/types.h>\n\t\t#endif\n\t\t#include <stddef.h>\n\n\t\tint a, b;\n\t\tsize_t m;\n\t]], [[__builtin_mul_overflow(a, b, &m)]])],\n\t[pcre2_cc_cv_builtin_mul_overflow=yes],\n\t[pcre2_cc_cv_builtin_mul_overflow=no])\nAC_MSG_RESULT([$pcre2_cc_cv_builtin_mul_overflow])\nif test \"$pcre2_cc_cv_builtin_mul_overflow\" = yes; then\n\tAC_DEFINE([HAVE_BUILTIN_MUL_OVERFLOW], 1,\n\t\t[Define this if your compiler provides __builtin_mul_overflow()])\nfi\nAC_LANG_POP([C])\n\n# Check for the unreachable() builtin\n\nAC_MSG_CHECKING([for __builtin_unreachable()])\nAC_LANG_PUSH([C])\nAC_LINK_IFELSE([AC_LANG_PROGRAM([[int r;]], [[if (r) __builtin_unreachable()]])],\n  [pcre2_cc_cv_builtin_unreachable=yes],\n  [pcre2_cc_cv_builtin_unreachable=no])\nAC_MSG_RESULT([$pcre2_cc_cv_builtin_unreachable])\nif test \"$pcre2_cc_cv_builtin_unreachable\" = yes; then\n  AC_DEFINE([HAVE_BUILTIN_UNREACHABLE], 1,\n    [Define this if your compiler provides __builtin_unreachable()])\nfi\nAC_LANG_POP([C])\n\n# Versioning\n\nPCRE2_MAJOR=\"pcre2_major\"\nPCRE2_MINOR=\"pcre2_minor\"\nPCRE2_PRERELEASE=\"pcre2_prerelease\"\nPCRE2_DATE=\"pcre2_date\"\n\nif test \"$PCRE2_MINOR\" = \"08\" -o \"$PCRE2_MINOR\" = \"09\"\nthen\n  echo \"***\"\n  echo \"*** Minor version number $PCRE2_MINOR must not be used. ***\"\n  echo \"*** Use only 00 to 07 or 10 onwards, to avoid octal issues. ***\"\n  echo \"***\"\n  exit 1\nfi\n\nAC_SUBST(PCRE2_MAJOR)\nAC_SUBST(PCRE2_MINOR)\nAC_SUBST(PCRE2_PRERELEASE)\nAC_SUBST(PCRE2_DATE)\n\n# Set a more sensible default value for $(htmldir).\nif test \"x$htmldir\" = 'x${docdir}'\nthen\n  htmldir='${docdir}/html'\nfi\n\n# Force an error for PCRE1 size options\nAC_ARG_ENABLE(pcre8,,,enable_pcre8=no)\nAC_ARG_ENABLE(pcre16,,,enable_pcre16=no)\nAC_ARG_ENABLE(pcre32,,,enable_pcre32=no)\n\nif test \"$enable_pcre8$enable_pcre16$enable_pcre32\" != \"nonono\"\nthen\n  echo \"** ERROR: Use --[[en|dis]]able-pcre2-[[8|16|32]], not --[[en|dis]]able-pcre[[8|16|32]]\"\n  exit 1\nfi\n\n# Handle --disable-pcre2-8 (enabled by default)\nAC_ARG_ENABLE(pcre2-8,\n              AS_HELP_STRING([--disable-pcre2-8],\n                             [disable 8 bit character support]),\n              , enable_pcre2_8=unset)\nAC_SUBST(enable_pcre2_8)\n\n# Handle --enable-pcre2-16 (disabled by default)\nAC_ARG_ENABLE(pcre2-16,\n              AS_HELP_STRING([--enable-pcre2-16],\n                             [enable 16 bit character support]),\n              , enable_pcre2_16=unset)\nAC_SUBST(enable_pcre2_16)\n\n# Handle --enable-pcre2-32 (disabled by default)\nAC_ARG_ENABLE(pcre2-32,\n              AS_HELP_STRING([--enable-pcre2-32],\n                             [enable 32 bit character support]),\n              , enable_pcre2_32=unset)\nAC_SUBST(enable_pcre2_32)\n\n# Handle --enable-debug (disabled by default)\nAC_ARG_ENABLE(debug,\n              AS_HELP_STRING([--enable-debug],\n                             [enable debugging code]),\n              , enable_debug=no)\n\n# Handle --enable-jit (disabled by default)\nAC_ARG_ENABLE(jit,\n              AS_HELP_STRING([--enable-jit],\n                             [enable Just-In-Time compiling support]),\n              , enable_jit=no)\n\n# This code enables JIT if the hardware supports it.\nif test \"$enable_jit\" = \"auto\"; then\n  AC_LANG(C)\n  SAVE_CPPFLAGS=$CPPFLAGS\n  CPPFLAGS=-I$srcdir\n  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[\n  #define SLJIT_CONFIG_AUTO 1\n  #include \"deps/sljit/sljit_src/sljitConfigCPU.h\"\n  #if (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED)\n  #error unsupported\n  #endif]])], enable_jit=yes, enable_jit=no)\n  CPPFLAGS=$SAVE_CPPFLAGS\n  echo checking for JIT support on this hardware... $enable_jit\nfi\n\n# Handle --enable-jit-sealloc (disabled by default and only experimental)\ncase $host_os in\n  linux* | netbsd*)\n    AC_ARG_ENABLE(jit-sealloc,\n      AS_HELP_STRING([--enable-jit-sealloc],\n        [enable SELinux compatible execmem allocator in JIT (experimental)]),\n        ,enable_jit_sealloc=no)\n    ;;\n  *)\n    enable_jit_sealloc=unsupported\n    ;;\nesac\n\n# Handle --disable-pcre2grep-jit (enabled by default)\nAC_ARG_ENABLE(pcre2grep-jit,\n              AS_HELP_STRING([--disable-pcre2grep-jit],\n                             [disable JIT support in pcre2grep]),\n              , enable_pcre2grep_jit=yes)\n\n# Handle --disable-pcre2grep-callout (enabled by default)\nAC_ARG_ENABLE(pcre2grep-callout,\n              AS_HELP_STRING([--disable-pcre2grep-callout],\n                             [disable callout script support in pcre2grep]),\n              , enable_pcre2grep_callout=yes)\n\n# Handle --disable-pcre2grep-callout-fork (enabled by default)\nAC_ARG_ENABLE(pcre2grep-callout-fork,\n              AS_HELP_STRING([--disable-pcre2grep-callout-fork],\n                             [disable callout script fork support in pcre2grep]),\n              , enable_pcre2grep_callout_fork=yes)\n\n# Handle --enable-rebuild-chartables\nAC_ARG_ENABLE(rebuild-chartables,\n              AS_HELP_STRING([--enable-rebuild-chartables],\n                             [rebuild character tables in current locale]),\n              , enable_rebuild_chartables=no)\n\n# Handle --disable-unicode (enabled by default)\nAC_ARG_ENABLE(unicode,\n              AS_HELP_STRING([--disable-unicode],\n                             [disable Unicode support]),\n              , enable_unicode=unset)\n\n# Handle newline options\nac_pcre2_newline=lf\nAC_ARG_ENABLE(newline-is-cr,\n              AS_HELP_STRING([--enable-newline-is-cr],\n                             [use CR as newline character]),\n              ac_pcre2_newline=cr)\nAC_ARG_ENABLE(newline-is-lf,\n              AS_HELP_STRING([--enable-newline-is-lf],\n                             [use LF as newline character (default)]),\n              ac_pcre2_newline=lf)\nAC_ARG_ENABLE(newline-is-crlf,\n              AS_HELP_STRING([--enable-newline-is-crlf],\n                             [use CRLF as newline sequence]),\n              ac_pcre2_newline=crlf)\nAC_ARG_ENABLE(newline-is-anycrlf,\n              AS_HELP_STRING([--enable-newline-is-anycrlf],\n                             [use CR, LF, or CRLF as newline sequence]),\n              ac_pcre2_newline=anycrlf)\nAC_ARG_ENABLE(newline-is-any,\n              AS_HELP_STRING([--enable-newline-is-any],\n                             [use any valid Unicode newline sequence]),\n              ac_pcre2_newline=any)\nAC_ARG_ENABLE(newline-is-nul,\n              AS_HELP_STRING([--enable-newline-is-nul],\n                             [use NUL (binary zero) as newline character]),\n              ac_pcre2_newline=nul)\nenable_newline=\"$ac_pcre2_newline\"\n\n# Handle --enable-bsr-anycrlf\nAC_ARG_ENABLE(bsr-anycrlf,\n              AS_HELP_STRING([--enable-bsr-anycrlf],\n                             [\\R matches only CR, LF, CRLF by default]),\n              , enable_bsr_anycrlf=no)\n\n# Handle --enable-never-backslash-C\nAC_ARG_ENABLE(never-backslash-C,\n              AS_HELP_STRING([--enable-never-backslash-C],\n                             [use of \\C causes an error]),\n              , enable_never_backslash_C=no)\n\n# Handle --enable-ebcdic\nAC_ARG_ENABLE(ebcdic,\n              AS_HELP_STRING([--enable-ebcdic],\n                             [assume EBCDIC coding rather than ASCII; incompatible with --enable-unicode; use only in (uncommon) EBCDIC environments]),\n              , enable_ebcdic=no)\n\n# Handle --enable-ebcdic-nl25\nAC_ARG_ENABLE(ebcdic-nl25,\n              AS_HELP_STRING([--enable-ebcdic-nl25],\n                             [set EBCDIC code for NL to 0x25 instead of 0x15; it implies --enable-ebcdic]),\n              , enable_ebcdic_nl25=no)\n\n# Handle --enable-ebcdic-ignoring-compiler\nAC_ARG_ENABLE(ebcdic-ignoring-compiler,\n              AS_HELP_STRING([--enable-ebcdic-ignoring-compiler],\n                             [force EBCDIC 1047 using numeric literals rather than C character literals; it implies --enable-ebcdic]),\n              , enable_ebcdic_ignoring_compiler=no)\n\n# Handle --enable-pcre2grep-libz\nAC_ARG_ENABLE(pcre2grep-libz,\n              AS_HELP_STRING([--enable-pcre2grep-libz],\n                             [link pcre2grep with libz to handle .gz files]),\n              , enable_pcre2grep_libz=no)\n\n# Handle --enable-pcre2grep-libbz2\nAC_ARG_ENABLE(pcre2grep-libbz2,\n              AS_HELP_STRING([--enable-pcre2grep-libbz2],\n                             [link pcre2grep with libbz2 to handle .bz2 files]),\n              , enable_pcre2grep_libbz2=no)\n\n# Handle --with-pcre2grep-bufsize=N\nAC_ARG_WITH(pcre2grep-bufsize,\n              AS_HELP_STRING([--with-pcre2grep-bufsize=N],\n                             [pcre2grep initial buffer size (default=20480, minimum=8192)]),\n              , with_pcre2grep_bufsize=20480)\n\n# Handle --with-pcre2grep-max-bufsize=N\nAC_ARG_WITH(pcre2grep-max-bufsize,\n              AS_HELP_STRING([--with-pcre2grep-max-bufsize=N],\n                             [pcre2grep maximum buffer size (default=1048576, minimum=8192)]),\n              , with_pcre2grep_max_bufsize=1048576)\n\n# Handle --enable-pcre2test-libedit\nAC_ARG_ENABLE(pcre2test-libedit,\n              AS_HELP_STRING([--enable-pcre2test-libedit],\n                             [link pcre2test with libedit]),\n              , enable_pcre2test_libedit=no)\n\n# Handle --enable-pcre2test-libreadline\nAC_ARG_ENABLE(pcre2test-libreadline,\n              AS_HELP_STRING([--enable-pcre2test-libreadline],\n                             [link pcre2test with libreadline]),\n              , enable_pcre2test_libreadline=no)\n\n# Handle --with-link-size=N\nAC_ARG_WITH(link-size,\n            AS_HELP_STRING([--with-link-size=N],\n                           [internal link size (2, 3, or 4 allowed; default=2)]),\n            , with_link_size=2)\n\n# Handle --with-max-varlookbehind=N\nAC_ARG_WITH(max-varlookbehind,\n            AS_HELP_STRING([--with-max-varlookbehind=N],\n                           [maximum length of variable lookbehind (default=255)]),\n            , with_max_varlookbehind=255)\n\n# Handle --with-parens-nest-limit=N\nAC_ARG_WITH(parens-nest-limit,\n            AS_HELP_STRING([--with-parens-nest-limit=N],\n                           [nested parentheses limit (default=250)]),\n            , with_parens_nest_limit=250)\n\n# Handle --with-heap-limit\nAC_ARG_WITH(heap-limit,\n            AS_HELP_STRING([--with-heap-limit=N],\n                           [default limit on heap memory (kibibytes, default=20000000)]),\n            , with_heap_limit=20000000)\n\n# Handle --with-match-limit=N\nAC_ARG_WITH(match-limit,\n            AS_HELP_STRING([--with-match-limit=N],\n                           [default limit on internal looping (default=10000000)]),\n            , with_match_limit=10000000)\n\n# Handle --with-match-limit-depth=N\n# Recognize old synonym --with-match-limit-recursion\n#\n# Note: In config.h, the default is to define MATCH_LIMIT_DEPTH symbolically as\n# MATCH_LIMIT, which in turn is defined to be some numeric value (e.g.\n# 10000000). MATCH_LIMIT_DEPTH can otherwise be set to some different numeric\n# value (or even the same numeric value as MATCH_LIMIT, though no longer\n# defined in terms of the latter).\n#\nAC_ARG_WITH(match-limit-depth,\n            AS_HELP_STRING([--with-match-limit-depth=N],\n                           [default limit on match tree depth (default=MATCH_LIMIT)]),\n            , with_match_limit_depth=MATCH_LIMIT)\n\nAC_ARG_WITH(match-limit-recursion,,\n            , with_match_limit_recursion=UNSET)\n\n# Handle --enable-valgrind\nAC_ARG_ENABLE(valgrind,\n              AS_HELP_STRING([--enable-valgrind],\n                             [enable valgrind support]),\n              , enable_valgrind=no)\n\n# Enable code coverage reports using gcov\nAC_ARG_ENABLE(coverage,\n              AS_HELP_STRING([--enable-coverage],\n                             [enable code coverage reports using gcov]),\n              , enable_coverage=no)\n\n# Handle --enable-fuzz-support\nAC_ARG_ENABLE(fuzz_support,\n              AS_HELP_STRING([--enable-fuzz-support],\n                             [enable fuzzer support]),\n              , enable_fuzz_support=no)\n\n# Handle --enable-diff-fuzz-support\nAC_ARG_ENABLE(diff_fuzz_support,\n              AS_HELP_STRING([--enable-diff-fuzz-support],\n                             [enable differential fuzzer support]),\n              , enable_diff_fuzz_support=no)\n\n# Handle --disable-stack-for-recursion\n# This option became obsolete at release 10.30.\nAC_ARG_ENABLE(stack-for-recursion,,\n              , enable_stack_for_recursion=yes)\n\n# Original code\n# AC_ARG_ENABLE(stack-for-recursion,\n#               AS_HELP_STRING([--disable-stack-for-recursion],\n#                              [don't use stack recursion when matching]),\n#               , enable_stack_for_recursion=yes)\n\n# Handle --disable-percent_zt (set as \"auto\" by default)\nAC_ARG_ENABLE(percent-zt,\n              AS_HELP_STRING([--disable-percent-zt],\n                             [disable the use of z and t formatting modifiers]),\n              , enable_percent_zt=auto)\n\n# Handle --enable-Werror/errwarn\nAC_ARG_ENABLE(Werror,\n              AS_HELP_STRING([--enable-Werror],\n                             [Add -Werror to CFLAGS (GCC/Clang style); if -Werror is passed to ./configure via CFLAGS it interferes with feature detection]),\n              , enable_Werror=no)\nAC_ARG_ENABLE(errwarn,\n              AS_HELP_STRING([--enable-errwarn],\n                             [Add -errwarn=%all to CFLAGS (Sun cc style)]),\n              , enable_errwarn=no)\n\n# Set the default value for pcre2-8\nif test \"x$enable_pcre2_8\" = \"xunset\"\nthen\n  enable_pcre2_8=yes\nfi\n\n# Set the default value for pcre2-16\nif test \"x$enable_pcre2_16\" = \"xunset\"\nthen\n  enable_pcre2_16=no\nfi\n\n# Set the default value for pcre2-32\nif test \"x$enable_pcre2_32\" = \"xunset\"\nthen\n  enable_pcre2_32=no\nfi\n\n# Make sure at least one library is selected\nif test \"x$enable_pcre2_8$enable_pcre2_16$enable_pcre2_32\" = \"xnonono\"\nthen\n  AC_MSG_ERROR([At least one of the 8, 16 or 32 bit libraries must be enabled])\nfi\n\n# Unicode is enabled by default.\nif test \"x$enable_unicode\" = \"xunset\"\nthen\n  enable_unicode=yes\nfi\n\n# Convert the newline identifier into the appropriate integer value. These must\n# agree with the PCRE2_NEWLINE_xxx values in pcre2.h.\n\ncase \"$enable_newline\" in\n  cr)      ac_pcre2_newline_value=1 ;;\n  lf)      ac_pcre2_newline_value=2 ;;\n  crlf)    ac_pcre2_newline_value=3 ;;\n  any)     ac_pcre2_newline_value=4 ;;\n  anycrlf) ac_pcre2_newline_value=5 ;;\n  nul)     ac_pcre2_newline_value=6 ;;\n  *)\n  AC_MSG_ERROR([invalid argument \"$enable_newline\" to --enable-newline option])\n  ;;\nesac\n\n# --enable-ebcdic-nl25 and --enable-ebcdic-ignoring-compiler imply --enable-ebcdic\nif test \"x$enable_ebcdic_nl25\" = \"xyes\" -o \"x$enable_ebcdic_ignoring_compiler\" = \"xyes\"; then\n  enable_ebcdic=yes\nfi\n\n# Make sure that if enable_ebcdic is set (without\n# enable_ebcdic_ignoring_compiler), rebuild_chartables is also enabled.\n# Also check that UTF support is not requested, because PCRE2 cannot handle\n# EBCDIC and UTF in the same build. To do so it would need to use different\n# character constants depending on the mode.\n# Also, EBCDIC cannot be used with 16-bit and 32-bit libraries.\nif test \"x$enable_ebcdic\" = \"xyes\"; then\n  if test \"x$enable_ebcdic_ignoring_compiler\" != \"xyes\"; then\n    enable_rebuild_chartables=yes\n  fi\n  if test \"x$enable_unicode\" = \"xyes\"; then\n    AC_MSG_ERROR([support for EBCDIC and Unicode cannot be enabled at the same time])\n  fi\n  if test \"x$enable_pcre2_16\" = \"xyes\" -o \"x$enable_pcre2_32\" = \"xyes\"; then\n    AC_MSG_ERROR([EBCDIC support is available only for the 8-bit library])\n  fi\nfi\n\n# Check argument to --with-link-size\ncase \"$with_link_size\" in\n  2|3|4) ;;\n  *)\n  AC_MSG_ERROR([invalid argument \"$with_link_size\" to --with-link-size option])\n  ;;\nesac\n\nAH_TOP([\n/* PCRE2 is written in Standard C, but there are a few non-standard things it\ncan cope with, allowing it to run on SunOS4 and other \"close to standard\"\nsystems.\n\nIn environments that support the GNU autotools, config.h.in is converted into\nconfig.h by the \"configure\" script. In environments that use CMake,\nconfig-cmake.in is converted into config.h. If you are going to build PCRE2 \"by\nhand\" without using \"configure\" or CMake, you should copy the distributed\nconfig.h.generic to config.h, and edit the macro definitions to be the way you\nneed them. You must then add -DHAVE_CONFIG_H to all of your compile commands,\nso that config.h is included at the start of every source.\n\nAlternatively, you can avoid editing by using -D on the compiler command line\nto set the macro values. In this case, you do not have to set -DHAVE_CONFIG_H,\nbut if you do, default values will be taken from config.h for non-boolean\nmacros that are not defined on the command line.\n\nBoolean macros such as HAVE_STDLIB_H and SUPPORT_PCRE2_8 should either be\ndefined (conventionally to 1) for TRUE, and not defined at all for FALSE. All\nsuch macros are listed as a commented #undef in config.h.generic. Macros such\nas MATCH_LIMIT, whose actual value is relevant, have defaults defined, but are\nsurrounded by #ifndef/#endif lines so that the value can be overridden by -D. */])\n\n# Checks for header files.\nAC_CHECK_HEADERS(assert.h limits.h sys/types.h sys/stat.h dirent.h)\nAC_CHECK_HEADERS([windows.h], [HAVE_WINDOWS_H=1])\nAC_CHECK_HEADERS([sys/wait.h], [HAVE_SYS_WAIT_H=1])\n\n# Conditional compilation\nAM_CONDITIONAL(WITH_PCRE2_8, test \"x$enable_pcre2_8\" = \"xyes\")\nAM_CONDITIONAL(WITH_PCRE2_16, test \"x$enable_pcre2_16\" = \"xyes\")\nAM_CONDITIONAL(WITH_PCRE2_32, test \"x$enable_pcre2_32\" = \"xyes\")\nAM_CONDITIONAL(WITH_REBUILD_CHARTABLES, test \"x$enable_rebuild_chartables\" = \"xyes\")\nAM_CONDITIONAL(WITH_JIT, test \"x$enable_jit\" = \"xyes\")\nAM_CONDITIONAL(WITH_UNICODE, test \"x$enable_unicode\" = \"xyes\")\nAM_CONDITIONAL(WITH_EBCDIC, test \"x$enable_ebcdic\" = \"xyes\")\nAM_CONDITIONAL(WITH_EBCDIC_NL25, test \"x$enable_ebcdic_nl25\" = \"xyes\")\nAM_CONDITIONAL(WITH_VALGRIND, test \"x$enable_valgrind\" = \"xyes\")\nAM_CONDITIONAL(WITH_FUZZ_SUPPORT, test \"x$enable_fuzz_support\" = \"xyes\")\nAM_CONDITIONAL(WITH_DIFF_FUZZ_SUPPORT, test \"x$enable_diff_fuzz_support\" = \"xyes\")\n\nif test \"$enable_fuzz_support\" = \"yes\" -a \"$enable_pcre2_8\" = \"no\"; then\n  echo \"** ERROR: Fuzzer support requires the 8-bit library\"\n  exit 1\nfi\n\nif test \"$enable_diff_fuzz_support\" = \"yes\"; then\n  if test \"$enable_fuzz_support\" = \"no\"; then\n    echo \"** ERROR: Differential fuzzing support requires fuzzing support\"\n    exit 1\n  fi\n  if test \"$enable_jit\" = \"no\"; then\n    echo \"** ERROR: Differential fuzzing support requires Just-in-Time compilation support\"\n    exit 1\n  fi\n  AC_DEFINE([SUPPORT_DIFF_FUZZ], [], [\n    Define to any value to enable differential fuzzing support.])\nfi\n\n# Checks for typedefs, structures, and compiler characteristics.\n\nAC_C_CONST\nAC_TYPE_SIZE_T\n\n# Checks for library functions.\n\nAC_CHECK_FUNCS(memfd_create mkostemp secure_getenv setrlimit)\nAC_MSG_CHECKING([for realpath])\nAC_LINK_IFELSE([AC_LANG_PROGRAM([[\n#include <stdlib.h>\n#include <limits.h>\n]],[[\nchar buffer[PATH_MAX];\nrealpath(\".\", buffer);\n]])],\n[AC_MSG_RESULT([yes])\n AC_DEFINE([HAVE_REALPATH], 1,\n  [Define to 1 if you have the `realpath' function.])\n],\nAC_MSG_RESULT([no]))\n\n# Check for the availability of libz (aka zlib)\n\nAC_CHECK_HEADERS([zlib.h], [HAVE_ZLIB_H=1])\nAC_CHECK_LIB([z], [gzopen], [HAVE_LIBZ=1])\n\n# Check for the availability of libbz2. Originally we just used AC_CHECK_LIB,\n# as for libz. However, this had the following problem, diagnosed and fixed by\n# a user:\n#\n#   - libbz2 uses the Pascal calling convention (WINAPI) for the functions\n#     under Win32.\n#   - The standard autoconf AC_CHECK_LIB fails to include \"bzlib.h\",\n#     therefore missing the function definition.\n#   - The compiler thus generates a \"C\" signature for the test function.\n#   - The linker fails to find the \"C\" function.\n#   - PCRE2 fails to configure if asked to do so against libbz2.\n#\n# Solution:\n#\n#   - Replace the AC_CHECK_LIB test with a custom test.\n\nAC_CHECK_HEADERS([bzlib.h], [HAVE_BZLIB_H=1])\n# Original test\n# AC_CHECK_LIB([bz2], [BZ2_bzopen], [HAVE_LIBBZ2=1])\n#\n# Custom test follows\n\nAC_MSG_CHECKING([for libbz2])\nOLD_LIBS=\"$LIBS\"\nLIBS=\"$LIBS -lbz2\"\nAC_LINK_IFELSE([AC_LANG_PROGRAM([[\n#ifdef HAVE_BZLIB_H\n#include <bzlib.h>\n#endif]],\n[[return (int)BZ2_bzopen(\"conftest\", \"rb\");]])],\n[AC_MSG_RESULT([yes]);HAVE_LIBBZ2=1; break;],\nAC_MSG_RESULT([no]))\nLIBS=\"$OLD_LIBS\"\n\n# Check for the availability of libreadline\n\nif test \"$enable_pcre2test_libreadline\" = \"yes\"; then\n AC_CHECK_HEADERS([readline/readline.h], [HAVE_READLINE_H=1])\n AC_CHECK_HEADERS([readline/history.h], [HAVE_HISTORY_H=1])\n AC_CHECK_LIB([readline], [readline], [LIBREADLINE=\"-lreadline\"],\n   [unset ac_cv_lib_readline_readline;\n    AC_CHECK_LIB([readline], [readline], [LIBREADLINE=\"-ltinfo\"],\n     [unset ac_cv_lib_readline_readline;\n      AC_CHECK_LIB([readline], [readline], [LIBREADLINE=\"-lcurses\"],\n       [unset ac_cv_lib_readline_readline;\n        AC_CHECK_LIB([readline], [readline], [LIBREADLINE=\"-lncurses\"],\n         [unset ac_cv_lib_readline_readline;\n          AC_CHECK_LIB([readline], [readline], [LIBREADLINE=\"-lncursesw\"],\n           [unset ac_cv_lib_readline_readline;\n            AC_CHECK_LIB([readline], [readline], [LIBREADLINE=\"-ltermcap\"],\n             [LIBREADLINE=\"\"],\n             [-ltermcap])],\n           [-lncursesw])],\n         [-lncurses])],\n       [-lcurses])],\n     [-ltinfo])])\n AC_SUBST(LIBREADLINE)\n if test -n \"$LIBREADLINE\"; then\n   if test \"$LIBREADLINE\" != \"-lreadline\"; then\n     echo \"-lreadline needs $LIBREADLINE\"\n     LIBREADLINE=\"-lreadline $LIBREADLINE\"\n   fi\n fi\nfi\n\n# Check for the availability of libedit. Different distributions put its\n# headers in different places. Try to cover the most common ones.\n\nif test \"$enable_pcre2test_libedit\" = \"yes\"; then\n  AC_CHECK_HEADERS([editline/readline.h edit/readline/readline.h readline.h], [\n    HAVE_LIBEDIT_HEADER=1\n    break\n  ])\n  AC_CHECK_LIB([edit], [readline], [LIBEDIT=\"-ledit\"])\nfi\n\n# Set up shared/static library flags\n\nPCRE2_STATIC_CFLAG=\"\"\nif test \"x$enable_shared\" = \"xno\" ; then\n  AC_DEFINE([PCRE2_STATIC], [1], [\n    Define to any value if linking statically. Ideally, if both static and\n    shared libraries are being built, then PCRE2_STATIC would be defined only\n    for the static build. Indeed, this is a requirement on Windows. With\n    Autoconf and libtool however, it is idiomatic to compile the sources once\n    to create both the static and shared library, so in this case, PCRE2_STATIC\n    should only be defined if no shared library is being built.])\n  PCRE2_STATIC_CFLAG=\"-DPCRE2_STATIC\"\nfi\nAC_SUBST(PCRE2_STATIC_CFLAG)\n\nPCRE2POSIX_CFLAG=\"\"\nif test \"x$enable_shared\" = \"xyes\" ; then\n  AC_DEFINE([PCRE2POSIX_SHARED], [1], [\n    Define to any value if linking libpcre2-posix dynamically. Ideally, if both\n    static and shared libraries are being built, then PCRE2POSIX_SHARED would be\n    defined only for the shared build. Indeed, this is a requirement on Windows.\n    However, when building with Autoconf and libtool, we compile the sources once\n    only to create both the static and shared library, so in this case,\n    PCRE2POSIX_SHARED should only be defined if the shared library is being built,\n    regardless of whether or not the static library is also being built.])\n  PCRE2POSIX_CFLAG=\"-DPCRE2POSIX_SHARED\"\nfi\nAC_SUBST(PCRE2POSIX_CFLAG)\n\n# Here is where PCRE2-specific defines are handled\n\nif test \"$enable_pcre2_8\" = \"yes\"; then\n  AC_DEFINE([SUPPORT_PCRE2_8], [], [\n    Define to any value to enable the 8 bit PCRE2 library.])\nfi\n\nif test \"$enable_pcre2_16\" = \"yes\"; then\n  AC_DEFINE([SUPPORT_PCRE2_16], [], [\n    Define to any value to enable the 16 bit PCRE2 library.])\nfi\n\nif test \"$enable_pcre2_32\" = \"yes\"; then\n  AC_DEFINE([SUPPORT_PCRE2_32], [], [\n    Define to any value to enable the 32 bit PCRE2 library.])\nfi\n\nif test \"$enable_debug\" = \"yes\"; then\n  AC_DEFINE([PCRE2_DEBUG], [], [\n    Define to any value to include debugging code.])\nfi\n\nif test \"$enable_percent_zt\" = \"no\"; then\n  AC_DEFINE([DISABLE_PERCENT_ZT], [], [\n    Define to any value to disable the use of the z and t modifiers in\n    formatting settings such as %zu or %td (this is rarely needed).])\nelse\n  enable_percent_zt=auto\nfi\n\n# Unless running under Windows, JIT support requires pthreads.\n\nif test \"$enable_jit\" = \"yes\"; then\n  if test \"$HAVE_WINDOWS_H\" != \"1\"; then\n    AX_PTHREAD([], [AC_MSG_ERROR([JIT support requires pthreads])])\n    CC=\"$PTHREAD_CC\"\n    CFLAGS=\"$PTHREAD_CFLAGS $CFLAGS\"\n    LIBS=\"$PTHREAD_LIBS $LIBS\"\n  fi\n  AC_DEFINE([SUPPORT_JIT], [], [\n    Define to any value to enable support for Just-In-Time compiling.])\nelse\n  enable_pcre2grep_jit=\"no\"\nfi\n\nif test \"$enable_jit_sealloc\" = \"yes\"; then\n  AC_DEFINE([SLJIT_PROT_EXECUTABLE_ALLOCATOR], [1], [\n    Define to any non-zero number to enable support for SELinux\n    compatible executable memory allocator in JIT. Note that this\n    will have no effect unless SUPPORT_JIT is also defined.])\nfi\n\nif test \"$enable_pcre2grep_jit\" = \"yes\"; then\n  AC_DEFINE([SUPPORT_PCRE2GREP_JIT], [], [\n    Define to any value to enable JIT support in pcre2grep. Note that this will\n    have no effect unless SUPPORT_JIT is also defined.])\nfi\n\nif test \"$enable_pcre2grep_callout\" = \"yes\"; then\n  if test \"$enable_pcre2grep_callout_fork\" = \"yes\"; then\n    if test \"$HAVE_WINDOWS_H\" != \"1\"; then\n      if test \"$HAVE_SYS_WAIT_H\" != \"1\"; then\n        AC_MSG_ERROR([Callout script support needs sys/wait.h.])\n      fi\n    fi\n    AC_DEFINE([SUPPORT_PCRE2GREP_CALLOUT_FORK], [], [\n      Define to any value to enable fork support in pcre2grep callout scripts.\n      This will have no effect unless SUPPORT_PCRE2GREP_CALLOUT is also\n      defined.])\n  fi\n  AC_DEFINE([SUPPORT_PCRE2GREP_CALLOUT], [], [\n    Define to any value to enable callout script support in pcre2grep.])\nelse\n  enable_pcre2grep_callout_fork=\"no\"\nfi\n\nif test \"$enable_unicode\" = \"yes\"; then\n  AC_DEFINE([SUPPORT_UNICODE], [], [\n    Define to any value to enable support for Unicode and UTF encoding.\n    This will work even in an EBCDIC environment, but it is incompatible\n    with the EBCDIC macro. That is, PCRE2 can support *either* EBCDIC\n    code *or* ASCII/Unicode, but not both at once.])\nfi\n\nif test \"$enable_pcre2grep_libz\" = \"yes\"; then\n  AC_DEFINE([SUPPORT_LIBZ], [], [\n    Define to any value to allow pcre2grep to be linked with libz, so that it is\n    able to handle .gz files.])\nfi\n\nif test \"$enable_pcre2grep_libbz2\" = \"yes\"; then\n  AC_DEFINE([SUPPORT_LIBBZ2], [], [\n    Define to any value to allow pcre2grep to be linked with libbz2, so that it\n    is able to handle .bz2 files.])\nfi\n\nif test $with_pcre2grep_bufsize -lt 8192 ; then\n  AC_MSG_WARN([$with_pcre2grep_bufsize is too small for --with-pcre2grep-bufsize; using 8192])\n  with_pcre2grep_bufsize=\"8192\"\nelse\n  if test $? -gt 1 ; then\n  AC_MSG_ERROR([Bad value for --with-pcre2grep-bufsize])\n  fi\nfi\n\nif test $with_pcre2grep_max_bufsize -lt $with_pcre2grep_bufsize ; then\n  with_pcre2grep_max_bufsize=\"$with_pcre2grep_bufsize\"\nelse\n  if test $? -gt 1 ; then\n  AC_MSG_ERROR([Bad value for --with-pcre2grep-max-bufsize])\n  fi\nfi\n\nAC_DEFINE_UNQUOTED([PCRE2GREP_BUFSIZE], [$with_pcre2grep_bufsize], [\n  The value of PCRE2GREP_BUFSIZE is the starting size of the buffer used by\n  pcre2grep to hold parts of the file it is searching. The buffer will be\n  expanded up to PCRE2GREP_MAX_BUFSIZE if necessary, for files containing very\n  long lines. The actual amount of memory used by pcre2grep is three times this\n  number, because it allows for the buffering of \"before\" and \"after\" lines.])\n\nAC_DEFINE_UNQUOTED([PCRE2GREP_MAX_BUFSIZE], [$with_pcre2grep_max_bufsize], [\n  The value of PCRE2GREP_MAX_BUFSIZE specifies the maximum size of the buffer\n  used by pcre2grep to hold parts of the file it is searching. The actual\n  amount of memory used by pcre2grep is three times this number, because it\n  allows for the buffering of \"before\" and \"after\" lines.])\n\nif test \"$enable_pcre2test_libedit\" = \"yes\"; then\n  AC_DEFINE([SUPPORT_LIBEDIT], [], [\n    Define to any value to allow pcre2test to be linked with libedit.])\n  LIBREADLINE=\"$LIBEDIT\"\nelif test \"$enable_pcre2test_libreadline\" = \"yes\"; then\n  AC_DEFINE([SUPPORT_LIBREADLINE], [], [\n    Define to any value to allow pcre2test to be linked with libreadline.])\nfi\n\nAC_DEFINE_UNQUOTED([NEWLINE_DEFAULT], [$ac_pcre2_newline_value], [\n  The value of NEWLINE_DEFAULT determines the default newline character\n  sequence. PCRE2 client programs can override this by selecting other values\n  at run time. The valid values are 1 (CR), 2 (LF), 3 (CRLF), 4 (ANY),\n  5 (ANYCRLF), and 6 (NUL).])\n\nif test \"$enable_bsr_anycrlf\" = \"yes\"; then\n  AC_DEFINE([BSR_ANYCRLF], [], [\n    By default, the \\R escape sequence matches any Unicode line ending\n    character or sequence of characters. If BSR_ANYCRLF is defined (to any\n    value), this is changed so that backslash-R matches only CR, LF, or CRLF.\n    The build-time default can be overridden by the user of PCRE2 at runtime.])\nfi\n\nif test \"$enable_never_backslash_C\" = \"yes\"; then\n  AC_DEFINE([NEVER_BACKSLASH_C], [], [\n    Defining NEVER_BACKSLASH_C locks out the use of \\C in all patterns.])\nfi\n\nAC_DEFINE_UNQUOTED([LINK_SIZE], [$with_link_size], [\n  The value of LINK_SIZE determines the number of bytes used to store\n  links as offsets within the compiled regex. The default is 2, which\n  allows for compiled patterns up to 65535 code units long. This covers the\n  vast majority of cases. However, PCRE2 can also be compiled to use 3 or 4\n  bytes instead. This allows for longer patterns in extreme cases.])\n\nAC_DEFINE_UNQUOTED([MAX_VARLOOKBEHIND], [$with_max_varlookbehind], [\n  The value of MAX_VARLOOKBEHIND specifies the default maximum length, in\n  characters, for a variable-length lookbehind assertion.])\n\nAC_DEFINE_UNQUOTED([PARENS_NEST_LIMIT], [$with_parens_nest_limit], [\n  The value of PARENS_NEST_LIMIT specifies the maximum depth of nested\n  parentheses (of any kind) in a pattern. This limits the amount of system\n  stack that is used while compiling a pattern.])\n\nAC_DEFINE_UNQUOTED([MATCH_LIMIT], [$with_match_limit], [\n  The value of MATCH_LIMIT determines the default number of times the\n  pcre2_match() function can record a backtrack position during a single\n  matching attempt. The value is also used to limit a loop counter in\n  pcre2_dfa_match(). There is a runtime interface for setting a different\n  limit. The limit exists in order to catch runaway regular expressions that\n  take forever to determine that they do not match. The default is set very\n  large so that it does not accidentally catch legitimate cases.])\n\n# --with-match-limit-recursion is an obsolete synonym for --with-match-limit-depth\n\nif test \"$with_match_limit_recursion\" != \"UNSET\"; then\ncat <<EOF\n\nWARNING: --with-match-limit-recursion is an obsolete option. Please use\n  --with-match-limit-depth in future. If both are set, --with-match-limit-depth\n  will be used. See also --with-heap-limit.\n\nEOF\nif test \"$with_match_limit_depth\" = \"MATCH_LIMIT\"; then\n  with_match_limit_depth=$with_match_limit_recursion\nfi\nfi\n\nAC_DEFINE_UNQUOTED([MATCH_LIMIT_DEPTH], [$with_match_limit_depth], [\n  The above limit applies to all backtracks, whether or not they are nested. In\n  some environments it is desirable to limit the nesting of backtracking (that\n  is, the depth of tree that is searched) more strictly, in order to restrict\n  the maximum amount of heap memory that is used. The value of\n  MATCH_LIMIT_DEPTH provides this facility. To have any useful effect, it must\n  be less than the value of MATCH_LIMIT. The default is to use the same value\n  as MATCH_LIMIT. There is a runtime method for setting a different limit. In\n  the case of pcre2_dfa_match(), this limit controls the depth of the internal\n  nested function calls that are used for pattern recursions, lookarounds, and\n  atomic groups.])\n\nAC_DEFINE_UNQUOTED([HEAP_LIMIT], [$with_heap_limit], [\n  This limits the amount of memory that may be used while matching\n  a pattern. It applies to both pcre2_match() and pcre2_dfa_match(). It does\n  not apply to JIT matching. The value is in kibibytes (units of 1024 bytes).])\n\nAC_DEFINE([MAX_NAME_SIZE], [128], [\n  This limit is parameterized just in case anybody ever wants to\n  change it. Care must be taken if it is increased, because it guards\n  against integer overflow caused by enormously large patterns.])\n\nAC_DEFINE([MAX_NAME_COUNT], [10000], [\n  This limit is parameterized just in case anybody ever wants to\n  change it. Care must be taken if it is increased, because it guards\n  against integer overflow caused by enormously large patterns.])\n\nAH_VERBATIM([PCRE2_EXP_DEFN], [\n/* If you are compiling for a system other than a Unix-like system or\n   Win32, and it needs some magic to be inserted before the definition\n   of a function that is exported by the library, define this macro to\n   contain the relevant magic. If you do not define this macro, a suitable\n   __declspec value is used for Windows systems; in other environments\n   a compiler relevant \"extern\" is used with any \"visibility\" related\n   attributes from PCRE2_EXPORT included.\n   This macro apears at the start of every exported function that is part\n   of the external API. It does not appear on functions that are \"external\"\n   in the C sense, but which are internal to the library. */\n#undef PCRE2_EXP_DEFN])\n\nAH_VERBATIM([PCRE2POSIX_EXP_DEFN], [\n/* See PCRE2_EXP_DEFN; but this is applied to functions in the libpcre2-posix\n   library. */\n#undef PCRE2POSIX_EXP_DEFN])\n\nif test \"$enable_ebcdic\" = \"yes\"; then\n  AC_DEFINE_UNQUOTED([EBCDIC], [], [\n    If you are compiling for a system that uses EBCDIC instead of ASCII\n    character codes, define this macro to any value. When EBCDIC is set, PCRE2\n    assumes that all input strings are in EBCDIC. If you do not define this\n    macro, PCRE2 will assume input strings are ASCII or UTF-8/16/32 Unicode. It\n    is not possible to build a version of PCRE2 that supports both EBCDIC and\n    ASCII or UTF-8/16/32.])\nfi\n\nif test \"$enable_ebcdic_nl25\" = \"yes\"; then\n  AC_DEFINE_UNQUOTED([EBCDIC_NL25], [], [\n    In an EBCDIC environment, define this macro to any value to arrange for\n    the NL character to be 0x25 instead of the default 0x15. NL plays the role\n    that LF does in an ASCII/Unicode environment.])\nfi\n\nif test \"$enable_ebcdic_ignoring_compiler\" = \"yes\"; then\n  AC_DEFINE_UNQUOTED([EBCDIC_IGNORING_COMPILER], [], [\n    To force an EBCDIC environment, define this macro to make the core PCRE2\n    library functions use EBCDIC codepage 1047, regardless of whether the\n    compiler supports it using C character literals.])\nfi\n\nif test \"$enable_valgrind\" = \"yes\"; then\n  AC_DEFINE_UNQUOTED([SUPPORT_VALGRIND], [], [\n     Define to any value for valgrind support to find invalid memory reads.])\nfi\n\n# Platform specific issues\nNO_UNDEFINED=\ncase $host_os in\n  cygwin* | mingw* )\n    if test X\"$enable_shared\" = Xyes; then\n      NO_UNDEFINED=\"-no-undefined\"\n    fi\n    ;;\nesac\n\n# The extra LDFLAGS for each particular library. The libpcre2*_version values\n# are m4 variables, assigned above.\n\nEXTRA_LIBPCRE2_8_LDFLAGS=\"$EXTRA_LIBPCRE2_8_LDFLAGS \\\n  $NO_UNDEFINED -version-info libpcre2_8_version\"\n\nEXTRA_LIBPCRE2_16_LDFLAGS=\"$EXTRA_LIBPCRE2_16_LDFLAGS \\\n  $NO_UNDEFINED -version-info libpcre2_16_version\"\n\nEXTRA_LIBPCRE2_32_LDFLAGS=\"$EXTRA_LIBPCRE2_32_LDFLAGS \\\n  $NO_UNDEFINED -version-info libpcre2_32_version\"\n\nEXTRA_LIBPCRE2_POSIX_LDFLAGS=\"$EXTRA_LIBPCRE2_POSIX_LDFLAGS \\\n  $NO_UNDEFINED -version-info libpcre2_posix_version\"\n\n# Append each library's version script, if the platform supports it.\n\nif test x$pcre2_check_vscript_flag != x ; then\n  EXTRA_LIBPCRE2_8_LDFLAGS=\"$EXTRA_LIBPCRE2_8_LDFLAGS \\\n    -Wl,$pcre2_check_vscript_flag,\\$(builddir)/src/libpcre2-8.sym\"\n\n  EXTRA_LIBPCRE2_16_LDFLAGS=\"$EXTRA_LIBPCRE2_16_LDFLAGS \\\n    -Wl,$pcre2_check_vscript_flag,\\$(builddir)/src/libpcre2-16.sym\"\n\n  EXTRA_LIBPCRE2_32_LDFLAGS=\"$EXTRA_LIBPCRE2_32_LDFLAGS \\\n    -Wl,$pcre2_check_vscript_flag,\\$(builddir)/src/libpcre2-32.sym\"\n\n  EXTRA_LIBPCRE2_POSIX_LDFLAGS=\"$EXTRA_LIBPCRE2_POSIX_LDFLAGS \\\n    -Wl,$pcre2_check_vscript_flag,\\$(builddir)/src/libpcre2-posix.sym\"\nfi\n\nAC_SUBST(EXTRA_LIBPCRE2_8_LDFLAGS)\nAC_SUBST(EXTRA_LIBPCRE2_16_LDFLAGS)\nAC_SUBST(EXTRA_LIBPCRE2_32_LDFLAGS)\nAC_SUBST(EXTRA_LIBPCRE2_POSIX_LDFLAGS)\n\n# When we run 'make distcheck', use these arguments. Turning off compiler\n# optimization makes it run faster.\nDISTCHECK_CONFIGURE_FLAGS=\"CFLAGS='' CXXFLAGS='' --enable-pcre2-16 --enable-pcre2-32 --enable-jit\"\nAC_SUBST(DISTCHECK_CONFIGURE_FLAGS)\n\n# Check that, if --enable-pcre2grep-libz or --enable-pcre2grep-libbz2 is\n# specified, the relevant library is available.\n\nif test \"$enable_pcre2grep_libz\" = \"yes\"; then\n  if test \"$HAVE_ZLIB_H\" != \"1\"; then\n    echo \"** Cannot --enable-pcre2grep-libz because zlib.h was not found\"\n    exit 1\n  fi\n  if test \"$HAVE_LIBZ\" != \"1\"; then\n    echo \"** Cannot --enable-pcre2grep-libz because libz was not found\"\n    exit 1\n  fi\n  LIBZ=\"-lz\"\nfi\nAC_SUBST(LIBZ)\n\nif test \"$enable_pcre2grep_libbz2\" = \"yes\"; then\n  if test \"$HAVE_BZLIB_H\" != \"1\"; then\n    echo \"** Cannot --enable-pcre2grep-libbz2 because bzlib.h was not found\"\n    exit 1\n  fi\n  if test \"$HAVE_LIBBZ2\" != \"1\"; then\n    echo \"** Cannot --enable-pcre2grep-libbz2 because libbz2 was not found\"\n    exit 1\n  fi\n  LIBBZ2=\"-lbz2\"\nfi\nAC_SUBST(LIBBZ2)\n\n# Similarly for --enable-pcre2test-readline\n\nif test \"$enable_pcre2test_libedit\" = \"yes\"; then\n  if test \"$enable_pcre2test_libreadline\" = \"yes\"; then\n    echo \"** Cannot use both --enable-pcre2test-libedit and --enable-pcre2test-readline\"\n    exit 1\n  fi\n  if test -z \"$HAVE_LIBEDIT_HEADER\"; then\n    echo \"** Cannot --enable-pcre2test-libedit because neither editline/readline.h,\"\n    echo \"** edit/readline/readline.h nor a compatible header was found.\"\n    exit 1\n  fi\n  if test -z \"$LIBEDIT\"; then\n    echo \"** Cannot --enable-pcre2test-libedit because libedit library was not found.\"\n    exit 1\n  fi\nfi\n\nif test \"$enable_pcre2test_libreadline\" = \"yes\"; then\n  if test \"$HAVE_READLINE_H\" != \"1\"; then\n    echo \"** Cannot --enable-pcre2test-readline because readline/readline.h was not found.\"\n    exit 1\n  fi\n  if test \"$HAVE_HISTORY_H\" != \"1\"; then\n    echo \"** Cannot --enable-pcre2test-readline because readline/history.h was not found.\"\n    exit 1\n  fi\n  if test -z \"$LIBREADLINE\"; then\n    echo \"** Cannot --enable-pcre2test-readline because readline library was not found.\"\n    exit 1\n  fi\nfi\n\n# Handle valgrind support\n\nif test \"$enable_valgrind\" = \"yes\"; then\n  m4_ifdef([PKG_CHECK_MODULES],\n           [PKG_CHECK_MODULES([VALGRIND],[valgrind])],\n           [AC_MSG_ERROR([pkg-config not supported])])\nfi\n\n# Handle code coverage reporting support\nif test \"$enable_coverage\" = \"yes\"; then\n  if test \"x$GCC\" != \"xyes\"; then\n    AC_MSG_ERROR([Code coverage reports can only be generated when using GCC])\n  fi\n\n  # ccache is incompatible with gcov\n  AC_PATH_PROG([SHTOOL],[shtool],[false])\n  case `$SHTOOL path $CC` in\n    *ccache*) cc_ccache=yes;;\n    *) cc_ccache=no;;\n  esac\n\n  if test \"$cc_ccache\" = \"yes\"; then\n    if test -z \"$CCACHE_DISABLE\" -o \"$CCACHE_DISABLE\" != \"1\"; then\n      AC_MSG_ERROR([must export CCACHE_DISABLE=1 to disable ccache for code coverage])\n    fi\n  fi\n\n  AC_ARG_VAR([LCOV],[the ltp lcov program])\n  AC_PATH_PROG([LCOV],[lcov],[false])\n  if test \"x$LCOV\" = \"xfalse\"; then\n    AC_MSG_ERROR([lcov not found])\n  fi\n\n  AC_ARG_VAR([GENHTML],[the ltp genhtml program])\n  AC_PATH_PROG([GENHTML],[genhtml],[false])\n  if test \"x$GENHTML\" = \"xfalse\"; then\n    AC_MSG_ERROR([genhtml not found])\n  fi\n\n  # Set flags needed for gcov\n  GCOV_CFLAGS=\"-O0 -ggdb3 -fprofile-arcs -ftest-coverage\"\n  GCOV_CXXFLAGS=\"-O0 -ggdb3 -fprofile-arcs -ftest-coverage\"\n  GCOV_LIBS=\"-lgcov\"\n  AC_SUBST([GCOV_CFLAGS])\n  AC_SUBST([GCOV_CXXFLAGS])\n  AC_SUBST([GCOV_LIBS])\nfi # enable_coverage\n\nAM_CONDITIONAL([WITH_GCOV],[test \"x$enable_coverage\" = \"xyes\"])\n\nAC_MSG_CHECKING([whether Intel CET is enabled])\nAC_LANG_PUSH([C])\nAC_COMPILE_IFELSE([AC_LANG_PROGRAM(,\n                   [[#ifndef __CET__\n# error CET is not enabled\n#endif]])],\n                   [pcre2_cc_cv_intel_cet_enabled=yes],\n                   [pcre2_cc_cv_intel_cet_enabled=no])\nAC_MSG_RESULT([$pcre2_cc_cv_intel_cet_enabled])\nif test \"$pcre2_cc_cv_intel_cet_enabled\" = yes; then\n  CET_CFLAGS=\"-mshstk\"\n  AC_SUBST([CET_CFLAGS])\nfi\nAC_LANG_POP([C])\n\n# LIB_POSTFIX is used by CMakeLists.txt for Windows debug builds.\n# Pass empty LIB_POSTFIX to *.pc files and pcre2-config here.\nAC_SUBST(LIB_POSTFIX)\n\n# Set the extra \"local: *\" symbol section conditionally for Solaris (effectively).\n\nif test x$pcre2_check_vscript_flag != x && test x$pcre2_check_vscript_no_star = xno; then\n  PCRE2_EXTRA_LOCAL_SYMS=\"  local: *;\"\nelse\n  PCRE2_EXTRA_LOCAL_SYMS=\"\"\nfi\nAC_SUBST([PCRE2_EXTRA_LOCAL_SYMS])\n\n# Produce these files, in addition to config.h.\n\nAC_CONFIG_FILES(\n\tMakefile\n\tlibpcre2-8.pc\n\tlibpcre2-16.pc\n\tlibpcre2-32.pc\n\tlibpcre2-posix.pc\n\tpcre2-config\n\tsrc/pcre2.h\n\tsrc/libpcre2-8.sym\n\tsrc/libpcre2-16.sym\n\tsrc/libpcre2-32.sym\n\tsrc/libpcre2-posix.sym\n)\n\n# Make the generated script files executable.\nAC_CONFIG_COMMANDS([script-chmod], [chmod a+x pcre2-config])\n\n# Make sure that pcre2_chartables.c is removed in case the method for\n# creating it was changed by reconfiguration.\nAC_CONFIG_COMMANDS([delete-old-chartables], [rm -f src/pcre2_chartables.c])\n\n# Handle --enable-Werror/errwarn. This must come last, so that we don't mess\n# with any of the library-detection tests (or similar).\nif test \"X$enable_Werror\" = Xyes; then\n  CFLAGS=\"$CFLAGS -Werror\"\nfi\nif test \"X$enable_errwarn\" = Xyes; then\n  CFLAGS=\"$CFLAGS -errwarn=%all\"\nfi\n\nAC_OUTPUT\n\n# --disable-stack-for-recursion is obsolete and has no effect.\n\nif test \"$enable_stack_for_recursion\" = \"no\"; then\ncat <<EOF\n\nWARNING: --disable-stack-for-recursion is obsolete and has no effect.\nEOF\nfi\n\n# Print out a nice little message after configure is run displaying the\n# chosen options.\n\nebcdic_nl_code=n/a\nif test \"$enable_ebcdic_nl25\" = \"yes\"; then\n  ebcdic_nl_code=0x25\nelif test \"$enable_ebcdic\" = \"yes\"; then\n  ebcdic_nl_code=0x15\nfi\n\nwith_symbol_versioning=n/a\nif test x$want_symvers != xyes; then\n  with_symbol_versioning=no\nelif test x$pcre2_check_vscript_flag != x; then\n  with_symbol_versioning=yes\nfi\n\ncat <<EOF\n\n$PACKAGE-$VERSION configuration summary:\n\n    Install prefix ..................... : ${prefix}\n    C preprocessor ..................... : ${CPP}\n    C compiler ......................... : ${CC}\n    Linker ............................. : ${LD}\n    C preprocessor flags ............... : ${CPPFLAGS}\n    C compiler flags ................... : ${CFLAGS} ${VISIBILITY_CFLAGS}\n    Linker flags ....................... : ${LDFLAGS}\n    Extra libraries .................... : ${LIBS}\n\n    Build 8-bit pcre2 library .......... : ${enable_pcre2_8}\n    Build 16-bit pcre2 library ......... : ${enable_pcre2_16}\n    Build 32-bit pcre2 library ......... : ${enable_pcre2_32}\n    Include debugging code ............. : ${enable_debug}\n    Enable JIT compiling support ....... : ${enable_jit}\n    Use SELinux allocator in JIT ....... : ${enable_jit_sealloc}\n    Enable Unicode support ............. : ${enable_unicode}\n    Newline char/sequence .............. : ${enable_newline}\n    \\R matches only ANYCRLF ............ : ${enable_bsr_anycrlf}\n    \\C is disabled ..................... : ${enable_never_backslash_C}\n    EBCDIC coding ...................... : ${enable_ebcdic}\n    EBCDIC code for NL ................. : ${ebcdic_nl_code}\n    EBCDIC coding ignoring compiler .... : ${enable_ebcdic_ignoring_compiler}\n    Rebuild char tables ................ : ${enable_rebuild_chartables}\n    Internal link size ................. : ${with_link_size}\n    Maximum variable lookbehind ........ : ${with_max_varlookbehind}\n    Nested parentheses limit ........... : ${with_parens_nest_limit}\n    Heap limit ......................... : ${with_heap_limit} kibibytes\n    Match limit ........................ : ${with_match_limit}\n    Match depth limit .................. : ${with_match_limit_depth}\n    Build shared libs .................. : ${enable_shared}\n        with symbol versioning ......... : ${with_symbol_versioning}\n    Build static libs .................. : ${enable_static}\n    Enable JIT in pcre2grep ............ : ${enable_pcre2grep_jit}\n    Enable callouts in pcre2grep ....... : ${enable_pcre2grep_callout}\n    Enable fork in pcre2grep callouts .. : ${enable_pcre2grep_callout_fork}\n    Initial buffer size for pcre2grep .. : ${with_pcre2grep_bufsize}\n    Maximum buffer size for pcre2grep .. : ${with_pcre2grep_max_bufsize}\n    Link pcre2grep with libz ........... : ${enable_pcre2grep_libz}\n    Link pcre2grep with libbz2 ......... : ${enable_pcre2grep_libbz2}\n    Link pcre2test with libedit ........ : ${enable_pcre2test_libedit}\n    Link pcre2test with libreadline .... : ${enable_pcre2test_libreadline}\n    Enable Valgrind support ............ : ${enable_valgrind}\n    Code coverage ...................... : ${enable_coverage}\n    Fuzzer support ..................... : ${enable_fuzz_support}\n    Differential fuzzer support ........ : ${enable_diff_fuzz_support}\n    Use %zu and %td .................... : ${enable_percent_zt}\n\nEOF\n\ndnl end configure.ac\n"
  },
  {
    "path": "doc/html/NON-AUTOTOOLS-BUILD.txt",
    "content": "Building PCRE2 without using autotools\n======================================\n\nThis document contains the following sections:\n\n  General\n  Generic instructions for the PCRE2 C libraries\n  Stack size in Windows environments\n  Linking programs in Windows environments\n  Calling conventions in Windows environments\n  Comments about Win32 builds\n  Building PCRE2 on Windows with CMake\n  Building PCRE2 on Windows with Visual Studio\n  Testing with RunTest.bat\n  Building PCRE2 on z/OS and z/VM\n  Building PCRE2 under VMS\n\n\nGeneral\n-------\n\nThe source of the PCRE2 libraries consists entirely of code written in Standard\nC, and so should compile successfully on any system that has a Standard C\ncompiler and library.\n\nThe PCRE2 distribution includes a \"configure\" file for use by the\nconfigure/make (autotools) build system, as found in many Unix-like\nenvironments. The README file contains information about the options for\n\"configure\".\n\nThere is also support for CMake, which some users prefer, especially in Windows\nenvironments, though it can also be run in Unix-like environments. See the\nsection entitled \"Building PCRE2 on Windows with CMake\" below.\n\nVersions of src/config.h and src/pcre2.h are distributed in the PCRE2 tarballs\nunder the names src/config.h.generic and src/pcre2.h.generic. These are\nprovided for those who build PCRE2 without using \"configure\" or CMake. If you\nuse \"configure\" or CMake, the .generic versions are not used.\n\n\nGeneric instructions for the PCRE2 C libraries\n----------------------------------------------\n\nThere are three possible PCRE2 libraries, each handling data with a specific\ncode unit width: 8, 16, or 32 bits. You can build any combination of them. The\nfollowing are generic instructions for building a PCRE2 C library \"by hand\". If\nyou are going to use CMake, this section does not apply to you; you can skip\nahead to the CMake section. Note that the settings concerned with 8-bit,\n16-bit, and 32-bit code units relate to the type of data string that PCRE2\nprocesses. They are NOT referring to the underlying operating system bit width.\nYou do not have to do anything special to compile in a 64-bit environment, for\nexample.\n\n (1) Copy or rename the file src/config.h.generic as src/config.h, and edit the\n     macro settings that it contains to whatever is appropriate for your\n     environment. In particular, you can alter the definition of the NEWLINE\n     macro to specify what character(s) you want to be interpreted as line\n     terminators by default. You need to #define at least one of\n     SUPPORT_PCRE2_8, SUPPORT_PCRE2_16, or SUPPORT_PCRE2_32, depending on which\n     libraries you are going to build. You must set all that apply.\n\n     When you subsequently compile any of the PCRE2 modules, you must specify\n     -DHAVE_CONFIG_H to your compiler so that src/config.h is included in the\n     sources.\n\n     An alternative approach is not to edit src/config.h, but to use -D on the\n     compiler command line to make any changes that you need to the\n     configuration options. In this case -DHAVE_CONFIG_H must not be set.\n\n     NOTE: There have been occasions when the way in which certain parameters\n     in src/config.h are used has changed between releases. (In the\n     configure/make world, this is handled automatically.) When upgrading to a\n     new release, you are strongly advised to review src/config.h.generic\n     before re-using what you had previously.\n\n     Note also that the src/config.h.generic file is created from a config.h\n     that was generated by Autotools, which automatically includes settings of\n     a number of macros that are not actually used by PCRE2 (for example,\n     HAVE_DLFCN_H).\n\n (2) Copy or rename the file src/pcre2.h.generic as src/pcre2.h.\n\n (3) EITHER:\n       Copy or rename file src/pcre2_chartables.c.dist as\n       src/pcre2_chartables.c.\n\n     OR:\n       Compile src/pcre2_dftables.c as a stand-alone program (using\n       -DHAVE_CONFIG_H if you have set up src/config.h), and then run it with\n       the single argument \"src/pcre2_chartables.c\". This generates a set of\n       standard character tables and writes them to that file. The tables are\n       generated using the default C locale for your system. If you want to use\n       a locale that is specified by LC_xxx environment variables, add the -L\n       option to the pcre2_dftables command. You must use this method if you\n       are building on a system that uses EBCDIC code.\n\n     The tables in src/pcre2_chartables.c are defaults. The caller of PCRE2 can\n     specify alternative tables at run time.\n\n (4) For a library that supports 8-bit code units in the character strings that\n     it processes, compile the following source files from the src directory,\n     setting -DPCRE2_CODE_UNIT_WIDTH=8 as a compiler option. Also set\n     -DHAVE_CONFIG_H if you have set up src/config.h with your configuration,\n     or else use other -D settings to change the configuration as required.\n\n       pcre2_auto_possess.c\n       pcre2_chkdint.c\n       pcre2_chartables.c\n       pcre2_compile.c\n       pcre2_compile_cgroup.c\n       pcre2_compile_class.c\n       pcre2_config.c\n       pcre2_context.c\n       pcre2_convert.c\n       pcre2_dfa_match.c\n       pcre2_error.c\n       pcre2_extuni.c\n       pcre2_find_bracket.c\n       pcre2_jit_compile.c\n       pcre2_maketables.c\n       pcre2_match.c\n       pcre2_match_data.c\n       pcre2_match_next.c\n       pcre2_newline.c\n       pcre2_ord2utf.c\n       pcre2_pattern_info.c\n       pcre2_script_run.c\n       pcre2_serialize.c\n       pcre2_string_utils.c\n       pcre2_study.c\n       pcre2_substitute.c\n       pcre2_substring.c\n       pcre2_tables.c\n       pcre2_ucd.c\n       pcre2_valid_utf.c\n       pcre2_xclass.c\n\n     Make sure that you include -I. in the compiler command (or equivalent for\n     an unusual compiler) so that all included PCRE2 header files are first\n     sought in the src directory under the current directory. Otherwise you run\n     the risk of picking up a previously-installed file from somewhere else.\n\n     Note that you must compile pcre2_jit_compile.c, even if you have not\n     defined SUPPORT_JIT in src/config.h, because when JIT support is not\n     configured, dummy functions are compiled. When JIT support IS configured,\n     pcre2_jit_compile.c #includes other files from the sljit dependency,\n     all of whose names begin with \"sljit\".\n\n     Note also that the pcre2_fuzzsupport.c file contains special code that is\n     useful to those who want to run fuzzing tests on the PCRE2 library. Unless\n     you are doing that, you can ignore it.\n\n (5) Now link all the compiled code into an object library in whichever form\n     your system keeps such libraries. This is the PCRE2 C 8-bit library,\n     typically called something like libpcre2-8. If your system has static and\n     shared libraries, you may have to do this once for each type.\n\n (6) If you want to build a library that supports 16-bit or 32-bit code units,\n     set 16 or 32 as the value of -DPCRE2_CODE_UNIT_WIDTH when obeying step 4\n     above. If you want to build more than one PCRE2 library, repeat steps 4\n     and 5 as necessary.\n\n (7) If you want to build the POSIX wrapper functions (which apply only to the\n     8-bit library), ensure that you have the src/pcre2posix.h file and then\n     compile src/pcre2posix.c. Link the result (on its own) as the pcre2posix\n     library. If targeting a DLL in Windows, make sure to include\n     -DPCRE2POSIX_SHARED with your compiler flags.\n\n (8) The pcre2test program can be linked with any combination of the 8-bit,\n     16-bit and 32-bit libraries (depending on what you specfied in\n     src/config.h) . Compile src/pcre2test.c; don't forget -DHAVE_CONFIG_H if\n     necessary, but do NOT define PCRE2_CODE_UNIT_WIDTH. Then link with the\n     appropriate library/ies. If you compiled an 8-bit library, pcre2test also\n     needs the pcre2posix wrapper library when linking.\n\n (9) Run pcre2test on the testinput files in the testdata directory, and check\n     that the output matches the corresponding testoutput files. There are\n     comments about what each test does in the section entitled \"Testing PCRE2\"\n     in the README file. If you compiled more than one of the 8-bit, 16-bit and\n     32-bit libraries, you need to run pcre2test with the -16 option to do\n     16-bit tests and with the -32 option to do 32-bit tests.\n\n     Some tests are relevant only when certain build-time options are selected.\n     For example, test 4 is for Unicode support, and will not run if you have\n     built PCRE2 without it. See the comments at the start of each testinput\n     file. If you have a suitable Unix-like shell, the RunTest script will run\n     the appropriate tests for you. The command \"RunTest list\" will output a\n     list of all the tests.\n\n     Note that the supplied files are in Unix format, with just LF characters\n     as line terminators. You may need to edit them to change this if your\n     system uses a different convention.\n\n(10) If you have built PCRE2 with SUPPORT_JIT, the JIT features can be tested\n     by running pcre2test with the -jit option. This is done automatically by\n     the RunTest script. You might also like to build and run the freestanding\n     JIT test program, src/pcre2_jit_test.c.\n\n(11) The pcre2test program tests the POSIX wrapper library, but there is also a\n     freestanding test program in src/pcre2posix_test.c. It must be linked with\n     both the pcre2posix library and the 8-bit PCRE2 library.\n\n(12) If you want to use the pcre2grep command, compile and link\n     src/pcre2grep.c; it uses only the 8-bit PCRE2 library (it does not need\n     the pcre2posix library). If you have built the PCRE2 library with JIT\n     support by defining SUPPORT_JIT in src/config.h, you can also define\n     SUPPORT_PCRE2GREP_JIT, which causes pcre2grep to make use of JIT (unless\n     it is run with --no-jit). If you define SUPPORT_PCRE2GREP_JIT without\n     defining SUPPORT_JIT, pcre2grep does not try to make use of JIT.\n\n\nStack size in Windows environments\n----------------------------------\n\nPrior to release 10.30 the default system stack size of 1MiB in some Windows\nenvironments caused issues with some tests. This should no longer be the case\nfor 10.30 and later releases.\n\n\nLinking programs in Windows environments\n----------------------------------------\n\nIf you want to statically link a program against a PCRE2 library in the form of\na non-dll .a file, you must define PCRE2_STATIC before including src/pcre2.h.\n\n\nCalling conventions in Windows environments\n-------------------------------------------\n\nIt is possible to compile programs to use different calling conventions using\nMSVC. Search the web for \"calling conventions\" for more information. To make it\neasier to change the calling convention for the exported functions in a\nPCRE2 library, the macro PCRE2_CALL_CONVENTION is present in all the external\ndefinitions. It can be set externally when compiling (e.g. in CFLAGS). If it is\nnot set, it defaults to empty; the default calling convention is then used\n(which is what is wanted most of the time).\n\n\nComments about Win32 builds (see also \"Building PCRE2 on Windows with CMake\")\n---------------------------\n\nThere are two ways of building PCRE2 using the \"configure, make, make install\"\nparadigm on Windows systems: using MinGW or using Cygwin. These are not at all\nthe same thing; they are completely different from each other. There is also\nsupport for building using CMake, which some users find a more straightforward\nway of building PCRE2 under Windows.\n\nThe MinGW home page (http://www.mingw.org/) says this:\n\n  MinGW: A collection of freely available and freely distributable Windows\n  specific header files and import libraries combined with GNU toolsets that\n  allow one to produce native Windows programs that do not rely on any\n  3rd-party C runtime DLLs.\n\nThe Cygwin home page (http://www.cygwin.com/) says this:\n\n  Cygwin is a Linux-like environment for Windows. It consists of two parts:\n\n  . A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing\n    substantial Linux API functionality\n\n  . A collection of tools which provide Linux look and feel.\n\nOn both MinGW and Cygwin, PCRE2 should build correctly using:\n\n  ./configure && make && make install\n\nThis should create two libraries called libpcre2-8 and libpcre2-posix. These\nare independent libraries: when you link with libpcre2-posix you must also link\nwith libpcre2-8, which contains the basic functions.\n\nUsing Cygwin's compiler generates libraries and executables that depend on\ncygwin1.dll. If a library that is generated this way is distributed,\ncygwin1.dll has to be distributed as well. Since cygwin1.dll is under the GPL\nlicence, this forces not only PCRE2 to be under the GPL, but also the entire\napplication. A distributor who wants to keep their own code proprietary must\npurchase an appropriate Cygwin licence.\n\nMinGW has no such restrictions. The MinGW compiler generates a library or\nexecutable that can run standalone on Windows without any third party dll or\nlicensing issues.\n\nBut there is more complication:\n\nIf a Cygwin user uses the -mno-cygwin Cygwin gcc flag, what that really does is\nto tell Cygwin's gcc to use the MinGW gcc. Cygwin's gcc is only acting as a\nfront end to MinGW's gcc (if you install Cygwin's gcc, you get both Cygwin's\ngcc and MinGW's gcc). So, a user can:\n\n. Build native binaries by using MinGW or by getting Cygwin and using\n  -mno-cygwin.\n\n. Build binaries that depend on cygwin1.dll by using Cygwin with the normal\n  compiler flags.\n\nThe test files that are supplied with PCRE2 are in UNIX format, with LF\ncharacters as line terminators. Unless your PCRE2 library uses a default\nnewline option that includes LF as a valid newline, it may be necessary to\nchange the line terminators in the test files to get some of the tests to work.\n\n\nBuilding PCRE2 on Windows with CMake\n------------------------------------\n\nCMake is an alternative configuration facility that can be used instead of\n\"configure\". CMake creates project files (make files, solution files, etc.)\ntailored to numerous development environments, including Visual Studio,\nBorland, Msys, MinGW, NMake, and Unix. If possible, use short paths with no\nspaces in the names for your CMake installation and your PCRE2 source and build\ndirectories.\n\nIf you are using CMake and encounter errors, deleting the CMake cache and\nrestarting from a fresh build may fix the error. In the CMake GUI, the cache can\nbe deleted by selecting \"File > Delete Cache\"; or the folder \"CMakeCache\" can\nbe deleted.\n\n1. Install the latest CMake version available from http://www.cmake.org/, and\n   ensure that cmake\\bin is on your path.\n\n2. Unzip (retaining folder structure) the PCRE2 source tree into a source\n   directory such as C:\\pcre2. You should ensure your local date and time\n   is not earlier than the file dates in your source dir if the release is\n   very new.\n\n3. Create a new, empty build directory, preferably a subdirectory of the\n   source dir. For example, C:\\pcre2\\pcre2-xx\\build.\n\n4. Run CMake.\n\n   - Using the CLI, simply run `cmake ..` inside the `build/` directory. You can\n     use the `ccmake` ncurses GUI to select and configure PCRE2 features.\n\n   - Using the CMake GUI:\n\n     a) Run cmake-gui from the Shell environment of your build tool, for\n        example, Msys for Msys/MinGW or Visual Studio Command Prompt for\n        VC/VC++.\n\n     b) Enter C:\\pcre2\\pcre2-xx and C:\\pcre2\\pcre2-xx\\build for the source and\n        build directories, respectively.\n\n     c) Press the \"Configure\" button.\n\n     d) Select the particular IDE / build tool that you are using (Visual\n        Studio, MSYS makefiles, MinGW makefiles, etc.)\n\n     e) The GUI will then list several configuration options. This is where\n        you can disable Unicode support or select other PCRE2 optional features.\n\n     f) Press \"Configure\" again. The adjacent \"Generate\" button should now be\n        active.\n\n     g) Press \"Generate\".\n\n5. The build directory should now contain a usable build system, be it a\n   solution file for Visual Studio, makefiles for MinGW, etc. Exit from\n   cmake-gui and use the generated build system with your compiler or IDE.\n   E.g., for MinGW you can run \"make\", or for Visual Studio, open the PCRE2\n   solution, select the desired configuration (Debug, or Release, etc.) and\n   build the ALL_BUILD project.\n\n   Regardless of build system used, `cmake --build .` will build it.\n\n6. If during configuration with cmake-gui you've elected to build the test\n   programs, you can execute them by building the test project. E.g., for\n   MinGW: \"make test\"; for Visual Studio build the RUN_TESTS project. The\n   most recent build configuration is targeted by the tests. A summary of\n   test results is presented. Complete test output is subsequently\n   available for review in Testing\\Temporary under your build dir.\n\n   Regardless of build system used, `ctest` will run the tests.\n\n\nBuilding PCRE2 on Windows with Visual Studio\n--------------------------------------------\n\nThe code currently cannot be compiled without an inttypes.h header, which is\navailable only with Visual Studio 2013 or newer. However, this portable and\npermissively-licensed implementation of the stdint.h header could be used as an\nalternative:\n\n  http://www.azillionmonkeys.com/qed/pstdint.h\n\nJust rename it and drop it into the top level of the build tree.\n\n\nTesting with RunTest.bat\n------------------------\n\nIf configured with CMake, building the test project (\"make test\" or building\nALL_TESTS in Visual Studio) creates (and runs) pcre2_test.bat (and depending\non your configuration options, possibly other test programs) in the build\ndirectory. The pcre2_test.bat script runs RunTest.bat with correct source and\nexe paths.\n\nFor manual testing with RunTest.bat, provided the build dir is a subdirectory\nof the source directory: Open command shell window. Chdir to the location\nof your pcre2test.exe and pcre2grep.exe programs. Call RunTest.bat with\n\"..\\RunTest.Bat\" or \"..\\..\\RunTest.bat\" as appropriate.\n\nTo run only a particular test with RunTest.Bat provide a test number argument.\n\nOtherwise:\n\n1. Copy RunTest.bat into the directory where pcre2test.exe and pcre2grep.exe\n   have been created.\n\n2. Edit RunTest.bat to identify the full or relative location of\n   the pcre2 source (wherein which the testdata folder resides), e.g.:\n\n   set srcdir=C:\\pcre2\\pcre2-10.00\n\n3. In a Windows command environment, chdir to the location of your bat and\n   exe programs.\n\n4. Run RunTest.bat. Test outputs will automatically be compared to expected\n   results, and discrepancies will be identified in the console output.\n\nTo independently test the just-in-time compiler, run pcre2_jit_test.exe.\n\n\nBuilding PCRE2 on z/OS and z/VM\n-------------------------------\n\nz/OS and z/VM are operating systems for mainframe computers, produced by IBM.\nThe character code used is EBCDIC, not ASCII or Unicode. In z/OS, UNIX APIs and\napplications can be supported through UNIX System Services.\n\nThe PCRE2 codebase compiles and runs with native EBCDIC support on modern z/OS\nsystems, using the pre-installed tools (/bin/sh, ./configure, and the XLC or\nIBM-Clang compilers). PCRE2 supports z/OS using both Autoconf (./configure) and\nCMake (which IBM distributes via \"zopen install cmake\").\n\nNote that as of the time of writing, IBM's port of CMake to z/OS has only\npartial support for EBCDIC. It is recommended to build PCRE2 using the\n./configure script, if you require an EBCDIC build.\n\nAny EBCDIC codepage should work (PCRE2 does not assume or require IBM-1047), or\nPCRE2 can compiled for ASCII/Latin-1/Unicode.\n\nAfter unpacking the PCRE2 tarball, you must subsequently tag the files as ASCII\nin order for the z/OS shell and compiler to interpret them correctly:\n    chtag -R -tc ISO8859-1 <directory>\n\nSome unusual features on the IBM platform are:\n  - The _ALL_SOURCE macro must be provided. Unlike on Linux or macOS, even quite\n    standard POSIX APIs are not made visible by default. PCRE2's Autoconf and\n    CMake system both provide this for you.\n  - The `cc`, `c89`, and even `c99` compilers provided by IBM do not default to\n    the same argument ordering as other Unix platforms.\n  - The XLC compiler requires `-qhaltonmsg=CCN3296`, otherwise it will treat any\n    preprocessor #include errors as a warning rather than an error. Needless to\n    say this default wrecks Autoconf and CMake's feature-detection tests.\n    PCRE2's build system is aware of this.\n  - The test suite (in the testdata/ directory) is entirely in ASCII/UTF-8.\n    When running the tests, you must ensure that the EBCDIC-native build of\n    pcre2test receives an EBCDIC version of these files. The easiest way to\n    achieve this is via filesystem tagging (chtag). Alternatively, you could\n    manually re-encode the testdata files as EBCDIC, and tag them as EBCDIC.\n    (Latin-1 and EBCDIC are one-to-one convertible encodings, a simple\n    byte-by-byte permutation of the 256 values.)\n\nIn native z/OS (without UNIX System Services) and in z/VM, a user has provided a\nspecial port of PCRE2. For details, please see file 939 on this web site:\n\n  http://www.cbttape.org\n\nThe user-provided port also provides an API for LE languages such as COBOL and\nfor the z/OS and z/VM versions of the Rexx languages.\n\n\nBuilding PCRE2 under VMS\n------------------------\n\nAlexey Chuphin has contributed some auxiliary files for building PCRE2 under\nOpenVMS. They are in the \"vms\" directory in the distribution tarball. Please\nread the file called vms/openvms_readme.txt. The pcre2test and pcre2grep\nprograms contain some VMS-specific code.\n\nThis has not been tested for some time. The PCRE2 maintainers would be grateful\nto learn whether it still works (or if anyone still uses it).\n\n\n=============================\nLast updated: 17 October 2025\n=============================\n\n"
  },
  {
    "path": "doc/html/README.txt",
    "content": "README file for PCRE2 (Perl-compatible regular expression library)\n==================================================================\n\nPCRE2 is a re-working of the original PCRE1 library to provide an entirely new\nAPI. Since its initial release in 2015, there has been further development of\nthe code and it now differs from PCRE1 in more than just the API. There are new\nfeatures, and the internals have been improved. The original PCRE1 library is\nnow obsolete and no longer maintained. The latest release of PCRE2 is available\nin .tar.gz, tar.bz2, or .zip form from this GitHub repository:\n\nhttps://github.com/PCRE2Project/pcre2/releases\n\nThere is a mailing list for discussion about the development of PCRE2 at\npcre2-dev@googlegroups.com. You can subscribe by sending an email to\npcre2-dev+subscribe@googlegroups.com.\n\nYou can access the archives and also subscribe or manage your subscription\nhere:\n\nhttps://groups.google.com/g/pcre2-dev\n\nPlease read the NEWS file if you are upgrading from a previous release. The\ncontents of this README file are:\n\n  The PCRE2 APIs\n  Documentation for PCRE2\n  Building PCRE2 on non-Unix-like systems\n  Building PCRE2 without using autotools\n  Building PCRE2 using autotools\n  Retrieving configuration information\n  Shared libraries\n  Cross-compiling using autotools\n  Making new tarballs\n  Testing PCRE2\n  Character tables\n  File manifest\n\n\nThe PCRE2 APIs\n--------------\n\nPCRE2 is written in C, and it has its own API. There are three sets of\nfunctions, one for the 8-bit library, which processes strings of bytes, one for\nthe 16-bit library, which processes strings of 16-bit values, and one for the\n32-bit library, which processes strings of 32-bit values. Unlike PCRE1, there\nare no C++ wrappers.\n\nThe distribution does contain a set of C wrapper functions for the 8-bit\nlibrary that are based on the POSIX regular expression API (see the pcre2posix\nman page). These are built into a library called libpcre2-posix. Note that this\njust provides a POSIX calling interface to PCRE2; the regular expressions\nthemselves still follow Perl syntax and semantics. The POSIX API is restricted,\nand does not give full access to all of PCRE2's facilities.\n\nThe header file for the POSIX-style functions is called pcre2posix.h. The\nofficial POSIX name is regex.h, but I did not want to risk possible problems\nwith existing files of that name by distributing it that way. To use PCRE2 with\nan existing program that uses the POSIX API, pcre2posix.h will have to be\nrenamed or pointed at by a link (or the program modified, of course). See the\npcre2posix documentation for more details.\n\n\nDocumentation for PCRE2\n-----------------------\n\nIf you install PCRE2 in the normal way on a Unix-like system, you will end up\nwith a set of man pages whose names all start with \"pcre2\". The one that is\njust called \"pcre2\" lists all the others. In addition to these man pages, the\nPCRE2 documentation is supplied in two other forms:\n\n  1. There are files called doc/pcre2.txt, doc/pcre2grep.txt, and\n     doc/pcre2test.txt in the source distribution. The first of these is a\n     concatenation of the text forms of all the section 3 man pages except the\n     listing of pcre2demo.c and those that summarize individual functions. The\n     other two are the text forms of the section 1 man pages for the pcre2grep\n     and pcre2test commands. These text forms are provided for ease of scanning\n     with text editors or similar tools. They are installed in\n     <prefix>/share/doc/pcre2, where <prefix> is the installation prefix\n     (defaulting to /usr/local).\n\n  2. A set of files containing all the documentation in HTML form, hyperlinked\n     in various ways, and rooted in a file called index.html, is distributed in\n     doc/html and installed in <prefix>/share/doc/pcre2/html.\n\n\nBuilding PCRE2 on non-Unix-like systems\n---------------------------------------\n\nFor a non-Unix-like system, please read the file NON-AUTOTOOLS-BUILD, though if\nyour system supports the use of \"configure\" and \"make\" you may be able to build\nPCRE2 using autotools in the same way as for many Unix-like systems. This file\nalso contains useful information on building for some unusual Unix environments\n(such as EBCDIC mainframes).\n\nPCRE2 can also be configured using CMake, which can be run in various ways\n(command line, GUI, etc). This creates Makefiles, solution files, etc. The file\nNON-AUTOTOOLS-BUILD has information about CMake.\n\nPCRE2 has been compiled on many different operating systems. It should be\nstraightforward to build PCRE2 on any system that has a C99 or later compiler\nand library.\n\n\nBuilding PCRE2 without using autotools\n--------------------------------------\n\nThe use of autotools (in particular, libtool) is problematic in some\nenvironments, even some that are Unix or Unix-like. See the NON-AUTOTOOLS-BUILD\nfile for ways of building PCRE2 without using autotools.\n\n\nBuilding PCRE2 using autotools\n------------------------------\n\nThe following instructions assume the use of the widely used \"configure; make;\nmake install\" (autotools) process.\n\nIf you have downloaded and unpacked a PCRE2 release tarball, run the\n\"configure\" command from the PCRE2 directory, with your current directory set\nto the directory where you want the files to be created. This command is a\nstandard GNU \"autoconf\" configuration script, for which generic instructions\nare supplied in the file INSTALL.\n\nThe files in the GitHub repository do not contain \"configure\". If you have\ndownloaded the PCRE2 source files from GitHub, before you can run \"configure\"\nyou must run the shell script called autogen.sh. This runs a number of\nautotools to create a \"configure\" script (you must of course have the autotools\ncommands installed in order to do this).\n\nMost commonly, people build PCRE2 within its own distribution directory, and in\nthis case, on many systems, just running \"./configure\" is sufficient. However,\nthe usual methods of changing standard defaults are available. For example:\n\nCFLAGS='-O2 -Wall' ./configure --prefix=/opt/local\n\nThis command specifies that the C compiler should be run with the flags '-O2\n-Wall' instead of the default, and that \"make install\" should install PCRE2\nunder /opt/local instead of the default /usr/local.\n\nIf you want to build in a different directory, just run \"configure\" with that\ndirectory as current. For example, suppose you have unpacked the PCRE2 source\ninto /source/pcre2/pcre2-xxx, but you want to build it in\n/build/pcre2/pcre2-xxx:\n\ncd /build/pcre2/pcre2-xxx\n/source/pcre2/pcre2-xxx/configure\n\nPCRE2 is written in C and is normally compiled as a C library. However, it is\npossible to build it as a C++ library, though the provided building apparatus\ndoes not have any features to support this.\n\nThere are some optional features that can be included or omitted from the PCRE2\nlibrary. They are also documented in the pcre2build man page.\n\n. By default, both shared and static libraries are built. You can change this\n  by adding one of these options to the \"configure\" command:\n\n  --disable-shared\n  --disable-static\n\n  Setting --disable-shared ensures that PCRE2 libraries are built as static\n  libraries. The binaries that are then created as part of the build process\n  (for example, pcre2test and pcre2grep) are linked statically with one or more\n  PCRE2 libraries, but may also be dynamically linked with other libraries such\n  as libc. If you want these binaries to be fully statically linked, you can\n  set LDFLAGS like this:\n\n  LDFLAGS=--static ./configure --disable-shared\n\n  Note the two hyphens in --static. Of course, this works only if static\n  versions of all the relevant libraries are available for linking. See also\n  \"Shared libraries\" below.\n\n  Shared libraries are compiled with symbol versioning enabled on platforms that\n  support this, but this can be disabled by adding --disable-symvers.\n\n. By default, only the 8-bit library is built. If you add --enable-pcre2-16 to\n  the \"configure\" command, the 16-bit library is also built. If you add\n  --enable-pcre2-32 to the \"configure\" command, the 32-bit library is also\n  built. If you want only the 16-bit or 32-bit library, use --disable-pcre2-8\n  to disable building the 8-bit library.\n\n. If you want to include support for just-in-time (JIT) compiling, which can\n  give large performance improvements on certain platforms, add --enable-jit to\n  the \"configure\" command. This support is available only for certain hardware\n  architectures. If you try to enable it on an unsupported architecture, there\n  will be a compile time error. If in doubt, use --enable-jit=auto, which\n  enables JIT only if the current hardware is supported.\n\n. If you are enabling JIT under SELinux environment you may also want to add\n  --enable-jit-sealloc, which enables the use of an executable memory allocator\n  that is compatible with SELinux. Warning: this allocator is experimental!\n  It does not support fork() operation and may crash when no disk space is\n  available. This option has no effect if JIT is disabled.\n\n. If you do not want to make use of the default support for UTF-8 Unicode\n  character strings in the 8-bit library, UTF-16 Unicode character strings in\n  the 16-bit library, or UTF-32 Unicode character strings in the 32-bit\n  library, you can add --disable-unicode to the \"configure\" command. This\n  reduces the size of the libraries. It is not possible to configure one\n  library with Unicode support, and another without, in the same configuration.\n  It is also not possible to use --enable-ebcdic (see below) with Unicode\n  support, so if this option is set, you must also use --disable-unicode.\n\n  When Unicode support is available, the use of a UTF encoding still has to be\n  enabled by setting the PCRE2_UTF option at run time or starting a pattern\n  with (*UTF). When PCRE2 is compiled with Unicode support, its input can only\n  either be ASCII or UTF-8/16/32, even when running on EBCDIC platforms.\n\n  As well as supporting UTF strings, Unicode support includes support for the\n  \\P, \\p, and \\X sequences that recognize Unicode character properties.\n  However, only a subset of Unicode properties are supported; see the\n  pcre2pattern man page for details. Escape sequences such as \\d and \\w in\n  patterns do not by default make use of Unicode properties, but can be made to\n  do so by setting the PCRE2_UCP option or starting a pattern with (*UCP).\n\n. You can build PCRE2 to recognize either CR or LF or the sequence CRLF, or any\n  of the preceding, or any of the Unicode newline sequences, or the NUL (zero)\n  character as indicating the end of a line. Whatever you specify at build time\n  is the default; the caller of PCRE2 can change the selection at run time. The\n  default newline indicator is a single LF character (the Unix standard). You\n  can specify the default newline indicator by adding --enable-newline-is-cr,\n  --enable-newline-is-lf, --enable-newline-is-crlf,\n  --enable-newline-is-anycrlf, --enable-newline-is-any, or\n  --enable-newline-is-nul to the \"configure\" command, respectively.\n\n. By default, the sequence \\R in a pattern matches any Unicode line ending\n  sequence. This is independent of the option specifying what PCRE2 considers\n  to be the end of a line (see above). However, the caller of PCRE2 can\n  restrict \\R to match only CR, LF, or CRLF. You can make this the default by\n  adding --enable-bsr-anycrlf to the \"configure\" command (bsr = \"backslash R\").\n\n. In a pattern, the escape sequence \\C matches a single code unit, even in a\n  UTF mode. This can be dangerous because it breaks up multi-code-unit\n  characters. You can build PCRE2 with the use of \\C permanently locked out by\n  adding --enable-never-backslash-C (note the upper case C) to the \"configure\"\n  command. When \\C is allowed by the library, individual applications can lock\n  it out by calling pcre2_compile() with the PCRE2_NEVER_BACKSLASH_C option.\n\n. PCRE2 has a counter that limits the depth of nesting of parentheses in a\n  pattern. This limits the amount of system stack that a pattern uses when it\n  is compiled. The default is 250, but you can change it by setting, for\n  example,\n\n  --with-parens-nest-limit=500\n\n. PCRE2 has a counter that can be set to limit the amount of computing resource\n  it uses when matching a pattern. If the limit is exceeded during a match, the\n  match fails. The default is ten million. You can change the default by\n  setting, for example,\n\n  --with-match-limit=500000\n\n  on the \"configure\" command. This is just the default; individual calls to\n  pcre2_match() or pcre2_dfa_match() can supply their own value. There is more\n  discussion in the pcre2api man page (search for pcre2_set_match_limit).\n\n. There is a separate counter that limits the depth of nested backtracking\n  (pcre2_match()) or nested function calls (pcre2_dfa_match()) during a\n  matching process, which indirectly limits the amount of heap memory that is\n  used, and in the case of pcre2_dfa_match() the amount of stack as well. This\n  counter also has a default of ten million, which is essentially \"unlimited\".\n  You can change the default by setting, for example,\n\n  --with-match-limit-depth=5000\n\n  There is more discussion in the pcre2api man page (search for\n  pcre2_set_depth_limit).\n\n. You can also set an explicit limit on the amount of heap memory used by\n  the pcre2_match() and pcre2_dfa_match() interpreters:\n\n  --with-heap-limit=500\n\n  The units are kibibytes (units of 1024 bytes). This limit does not apply when\n  the JIT optimization (which has its own memory control features) is used.\n  There is more discussion on the pcre2api man page (search for\n  pcre2_set_heap_limit).\n\n. In the 8-bit library, the default maximum compiled pattern size is around\n  64 kibibytes. You can increase this by adding --with-link-size=3 to the\n  \"configure\" command. PCRE2 then uses three bytes instead of two for offsets\n  to different parts of the compiled pattern. In the 16-bit library,\n  --with-link-size=3 is the same as --with-link-size=4, which (in both\n  libraries) uses four-byte offsets. Increasing the internal link size reduces\n  performance in the 8-bit and 16-bit libraries. In the 32-bit library, the\n  link size setting is ignored, as 4-byte offsets are always used.\n\n. Lookbehind assertions in which one or more branches can match a variable\n  number of characters are supported only if there is a maximum matching length\n  for each top-level branch. There is a limit to this maximum that defaults to\n  255 characters. You can alter this default by a setting such as\n\n  --with-max-varlookbehind=100\n\n  The limit can be changed at runtime by calling pcre2_set_max_varlookbehind().\n  Lookbehind assertions in which every branch matches a fixed number of\n  characters (not necessarily all the same) are not constrained by this limit.\n\n. For speed, PCRE2 uses four tables for manipulating and identifying characters\n  whose code point values are less than 256. By default, it uses a set of\n  tables for ASCII encoding that is part of the distribution. If you specify\n\n  --enable-rebuild-chartables\n\n  a program called pcre2_dftables is compiled and run in the default C locale\n  when you obey \"make\". It builds a source file called pcre2_chartables.c. If\n  you do not specify this option, pcre2_chartables.c is created as a copy of\n  pcre2_chartables.c.dist. See \"Character tables\" below for further\n  information.\n\n. It is possible to compile PCRE2 for use on systems that use EBCDIC as their\n  character code (as opposed to ASCII/Unicode) by specifying\n\n  --enable-ebcdic --disable-unicode\n\n  This automatically implies --enable-rebuild-chartables (see above), in order\n  to ensure that you have the correct default character tables for your system's\n  codepage. There is an exception when you set --enable-ebcdic-ignoring-compiler\n  (see below), which allows using a default set of EBCDIC 1047 character tables\n  rather than forcing use of --enable-rebuild-chartables.\n\n  When PCRE2 is built with EBCDIC support, it always operates in EBCDIC. It\n  cannot support both EBCDIC and ASCII or UTF-8/16/32.\n\n  There is a second option, --enable-ebcdic-nl25, which specifies that the code\n  value for the EBCDIC NL character is 0x25 instead of the default 0x15.\n\n  There is a third option, --enable-ebcdic-ignoring-compiler, which disregards\n  the compiler's codepage for determining the numeric value of C character\n  constants such as 'z', and instead forces PCRE2 to use numeric constants for\n  the EBCDIC 1047 codepage instead.\n\n. If you specify --enable-debug, additional debugging code is included in the\n  build. This option is intended for use by the PCRE2 maintainers.\n\n. In environments where valgrind is installed, if you specify\n\n  --enable-valgrind\n\n  PCRE2 will use valgrind annotations to mark certain memory regions as\n  unaddressable. This allows it to detect invalid memory accesses, and is\n  mostly useful for debugging PCRE2 itself.\n\n. In environments where the gcc compiler is used and lcov is installed, if you\n  specify\n\n  --enable-coverage\n\n  the build process implements a code coverage report for the test suite. The\n  report is generated by running \"make coverage\". If ccache is installed on\n  your system, it must be disabled when building PCRE2 for coverage reporting.\n  You can do this by setting the environment variable CCACHE_DISABLE=1 before\n  running \"make\" to build PCRE2. There is more information about coverage\n  reporting in the \"pcre2build\" documentation.\n\n. When JIT support is enabled, pcre2grep automatically makes use of it, unless\n  you add --disable-pcre2grep-jit to the \"configure\" command.\n\n. There is support for calling external programs during matching in the\n  pcre2grep command, using PCRE2's callout facility with string arguments. This\n  support can be disabled by adding --disable-pcre2grep-callout to the\n  \"configure\" command. There are two kinds of callout: one that generates\n  output from inbuilt code, and another that calls an external program. The\n  latter has special support for Windows and VMS; otherwise it assumes the\n  existence of the fork() function. This facility can be disabled by adding\n  --disable-pcre2grep-callout-fork to the \"configure\" command.\n\n. The pcre2grep program currently supports only 8-bit data files, and so\n  requires the 8-bit PCRE2 library. It is possible to compile pcre2grep to use\n  libz and/or libbz2, in order to read .gz and .bz2 files (respectively), by\n  specifying one or both of\n\n  --enable-pcre2grep-libz\n  --enable-pcre2grep-libbz2\n\n  Of course, the relevant libraries must be installed on your system.\n\n. The default starting size (in bytes) of the internal buffer used by pcre2grep\n  can be set by, for example:\n\n  --with-pcre2grep-bufsize=51200\n\n  The value must be a plain integer. The default is 20480. The amount of memory\n  used by pcre2grep is actually three times this number, to allow for \"before\"\n  and \"after\" lines. If very long lines are encountered, the buffer is\n  automatically enlarged, up to a fixed maximum size.\n\n. The default maximum size of pcre2grep's internal buffer can be set by, for\n  example:\n\n  --with-pcre2grep-max-bufsize=2097152\n\n  The default is either 1048576 or the value of --with-pcre2grep-bufsize,\n  whichever is the larger.\n\n. It is possible to compile pcre2test so that it links with the libreadline\n  or libedit libraries, by specifying, respectively,\n\n  --enable-pcre2test-libreadline or --enable-pcre2test-libedit\n\n  If this is done, when pcre2test's input is from a terminal, it reads it using\n  the readline() function. This provides line-editing and history facilities.\n  Note that libreadline is GPL-licensed, so if you distribute a binary of\n  pcre2test linked in this way, there may be licensing issues. These can be\n  avoided by linking with libedit (which has a BSD licence) instead.\n\n  Enabling libreadline causes the -lreadline option to be added to the\n  pcre2test build. In many operating environments with a system-installed\n  readline library this is sufficient. However, in some environments (e.g. if\n  an unmodified distribution version of readline is in use), it may be\n  necessary to specify something like LIBS=\"-lncurses\" as well. This is\n  because, to quote the readline INSTALL, \"Readline uses the termcap functions,\n  but does not link with the termcap or curses library itself, allowing\n  applications which link with readline the option to choose an appropriate\n  library.\" If you get error messages about missing functions tgetstr, tgetent,\n  tputs, tgetflag, or tgoto, this is the problem, and linking with the ncurses\n  library should fix it.\n\n. The C99 standard defines formatting modifiers z and t for size_t and\n  ptrdiff_t values, respectively. By default, PCRE2 uses these modifiers in\n  environments other than Microsoft Visual Studio versions earlier than 2013\n  when __STDC_VERSION__ is defined and has a value greater than or equal to\n  199901L (indicating C99). However, there is at least one environment that\n  claims to be C99 but does not support these modifiers. If\n  --disable-percent-zt is specified, no use is made of the z or t modifiers.\n  Instead of %td or %zu, %lu is used, with a cast for size_t values.\n\n. There is a special option called --enable-fuzz-support for use by people who\n  want to run fuzzing tests on PCRE2. If set, it causes an extra library\n  called libpcre2-fuzzsupport.a to be built, but not installed. This contains\n  a single function called LLVMFuzzerTestOneInput() whose arguments are a\n  pointer to a string and the length of the string. When called, this function\n  tries to compile the string as a pattern, and if that succeeds, to match\n  it. This is done both with no options and with some random options bits that\n  are generated from the string. Setting --enable-fuzz-support also causes an\n  executable called pcre2fuzzcheck-{8,16,32} to be created. This is normally\n  run under valgrind or used when PCRE2 is compiled with address sanitizing\n  enabled. It calls the fuzzing function and outputs information about what it\n  is doing. The input strings are specified by arguments: if an argument\n  starts with \"=\" the rest of it is a literal input string. Otherwise, it is\n  assumed to be a file name, and the contents of the file are the test string.\n\n. Releases before 10.30 could be compiled with --disable-stack-for-recursion,\n  which caused pcre2_match() to use individual blocks on the heap for\n  backtracking instead of recursive function calls (which use the stack). This\n  is now obsolete because pcre2_match() was refactored always to use the heap\n  (in a much more efficient way than before). This option is retained for\n  backwards compatibility, but has no effect other than to output a warning.\n\nThe \"configure\" script builds the following files for the basic C library:\n\n. Makefile             the makefile that builds the library\n. src/config.h         build-time configuration options for the library\n. src/pcre2.h          the public PCRE2 header file\n. pcre2-config         script that shows the building settings such as CFLAGS\n                         that were set for \"configure\"\n. libpcre2-8.pc        )\n. libpcre2-16.pc       ) data for the pkg-config command\n. libpcre2-32.pc       )\n. libpcre2-posix.pc    )\n. libtool              script that builds shared and/or static libraries\n\nVersions of config.h and pcre2.h are distributed in the src directory of PCRE2\ntarballs under the names config.h.generic and pcre2.h.generic. These are\nprovided for those who have to build PCRE2 without using \"configure\" or CMake.\nIf you use \"configure\" or CMake, the .generic versions are not used.\n\nThe \"configure\" script also creates config.status, which is an executable\nscript that can be run to recreate the configuration, and config.log, which\ncontains compiler output from tests that \"configure\" runs.\n\nOnce \"configure\" has run, you can run \"make\". This builds whichever of the\nlibraries libpcre2-8, libpcre2-16 and libpcre2-32 are configured, and a test\nprogram called pcre2test. If you enabled JIT support with --enable-jit, another\ntest program called pcre2_jit_test is built as well. If the 8-bit library is\nbuilt, libpcre2-posix, pcre2posix_test, and the pcre2grep command are also\nbuilt. Running \"make\" with the -j option may speed up compilation on\nmultiprocessor systems.\n\nThe command \"make check\" runs all the appropriate tests. Details of the PCRE2\ntests are given below in a separate section of this document. The -j option of\n\"make\" can also be used when running the tests.\n\nYou can use \"make install\" to install PCRE2 into live directories on your\nsystem. The following are installed (file names are all relative to the\n<prefix> that is set when \"configure\" is run):\n\n  Commands (bin):\n    pcre2test\n    pcre2grep (if 8-bit support is enabled)\n    pcre2-config\n\n  Libraries (lib):\n    libpcre2-8      (if 8-bit support is enabled)\n    libpcre2-16     (if 16-bit support is enabled)\n    libpcre2-32     (if 32-bit support is enabled)\n    libpcre2-posix  (if 8-bit support is enabled)\n\n  Configuration information (lib/pkgconfig):\n    libpcre2-8.pc\n    libpcre2-16.pc\n    libpcre2-32.pc\n    libpcre2-posix.pc\n\n  Header files (include):\n    pcre2.h\n    pcre2posix.h\n\n  Man pages (share/man/man{1,3}):\n    pcre2grep.1\n    pcre2test.1\n    pcre2-config.1\n    pcre2.3\n    pcre2*.3 (lots more pages, all starting \"pcre2\")\n\n  HTML documentation (share/doc/pcre2/html):\n    index.html\n    *.html (lots more pages, hyperlinked from index.html)\n\n  Text file documentation (share/doc/pcre2):\n    AUTHORS\n    COPYING\n    ChangeLog\n    LICENCE\n    NEWS\n    README\n    SECURITY\n    pcre2.txt         (a concatenation of the man(3) pages)\n    pcre2test.txt     the pcre2test man page\n    pcre2grep.txt     the pcre2grep man page\n    pcre2-config.txt  the pcre2-config man page\n\nIf you want to remove PCRE2 from your system, you can run \"make uninstall\".\nThis removes all the files that \"make install\" installed. However, it does not\nremove any directories, because these are often shared with other programs.\n\n\nRetrieving configuration information\n------------------------------------\n\nRunning \"make install\" installs the command pcre2-config, which can be used to\nrecall information about the PCRE2 configuration and installation. For example:\n\n  pcre2-config --version\n\nprints the version number, and\n\n  pcre2-config --libs8\n\noutputs information about where the 8-bit library is installed. This command\ncan be included in makefiles for programs that use PCRE2, saving the programmer\nfrom having to remember too many details. Run pcre2-config with no arguments to\nobtain a list of possible arguments.\n\nThe pkg-config command is another system for saving and retrieving information\nabout installed libraries. Instead of separate commands for each library, a\nsingle command is used. For example:\n\n  pkg-config --libs libpcre2-16\n\nThe data is held in *.pc files that are installed in a directory called\n<prefix>/lib/pkgconfig.\n\n\nShared libraries\n----------------\n\nThe default distribution builds PCRE2 as shared libraries and static libraries,\nas long as the operating system supports shared libraries. Shared library\nsupport relies on the \"libtool\" script which is built as part of the\n\"configure\" process.\n\nThe libtool script is used to compile and link both shared and static\nlibraries. They are placed in a subdirectory called .libs when they are newly\nbuilt. The programs pcre2test and pcre2grep are built to use these uninstalled\nlibraries (by means of wrapper scripts in the case of shared libraries). When\nyou use \"make install\" to install shared libraries, pcre2grep and pcre2test are\nautomatically re-built to use the newly installed shared libraries before being\ninstalled themselves. However, the versions left in the build directory still\nuse the uninstalled libraries.\n\nTo build PCRE2 using static libraries only you must use --disable-shared when\nconfiguring it. For example:\n\n./configure --prefix=/usr/gnu --disable-shared\n\nThen run \"make\" in the usual way. Similarly, you can use --disable-static to\nbuild only shared libraries. Note, however, that when you build only static\nlibraries, binary programs such as pcre2test and pcre2grep may still be\ndynamically linked with other libraries (for example, libc) unless you set\nLDFLAGS to --static when running \"configure\".\n\n\nCross-compiling using autotools\n-------------------------------\n\nYou can specify CC and CFLAGS in the normal way to the \"configure\" command, in\norder to cross-compile PCRE2 for some other host. However, you should NOT\nspecify --enable-rebuild-chartables, because if you do, the pcre2_dftables.c\nsource file is compiled and run on the local host, in order to generate the\ninbuilt character tables (the pcre2_chartables.c file). This will probably not\nwork, because pcre2_dftables.c needs to be compiled with the local compiler,\nnot the cross compiler.\n\nWhen --enable-rebuild-chartables is not specified, pcre2_chartables.c is\ncreated by making a copy of pcre2_chartables.c.dist, which is a default set of\ntables that assumes ASCII code. Cross-compiling with the default tables should\nnot be a problem.\n\nIf you need to modify the character tables when cross-compiling, you should\nmove pcre2_chartables.c.dist out of the way, then compile pcre2_dftables.c by\nhand and run it on the local host to make a new version of\npcre2_chartables.c.dist. See the pcre2build section \"Creating character tables\nat build time\" for more details.\n\n\nMaking new tarballs\n-------------------\n\nThe command \"make dist\" creates three PCRE2 tarballs, in tar.gz, tar.bz2, and\nzip formats. The command \"make distcheck\" does the same, but then does a trial\nbuild of the new distribution to ensure that it works.\n\nIf you have modified any of the man page sources in the doc directory, you\nshould first run the maint/UpdateAlways script before making a distribution.\nThis script creates the .txt and HTML forms of the documentation from the man\npages.\n\n\nTesting PCRE2\n-------------\n\nTo test the basic PCRE2 library on a Unix-like system, run the RunTest script.\nThere is another script called RunGrepTest that tests the pcre2grep command.\nWhen the 8-bit library is built, a test program for the POSIX wrapper, called\npcre2posix_test, is compiled, and when JIT support is enabled, a test program\ncalled pcre2_jit_test is built. The scripts and the program tests are all run\nwhen you obey \"make check\". For other environments, see the instructions in\nNON-AUTOTOOLS-BUILD.\n\nThe RunTest script runs the pcre2test test program (which is documented in its\nown man page) on each of the relevant testinput files in the testdata\ndirectory, and compares the output with the contents of the corresponding\ntestoutput files. RunTest places its output in directories\ntestoutput{8,16,32}{,-jit,-dfa}. Other files whose names begin with \"test\" are\nused as working files in some tests.\n\nSome tests are relevant only when certain build-time options were selected. For\nexample, the tests for UTF-8/16/32 features are run only when Unicode support\nis available. RunTest outputs a comment when it skips a test.\n\nMany (but not all) of the tests that are not skipped are run twice if JIT\nsupport is available. On the second run, JIT compilation is forced. This\ntesting can be suppressed by putting \"-nojit\" on the RunTest command line.\n\nThe entire set of tests is run once for each of the 8-bit, 16-bit and 32-bit\nlibraries that are enabled. If you want to run just one set of tests, call\nRunTest with either the -8, -16 or -32 option.\n\nIf valgrind is installed, you can run the tests under it by putting \"-valgrind\"\non the RunTest command line. To run pcre2test on just one or more specific test\nfiles, give their numbers as arguments to RunTest, for example:\n\n  RunTest 2 7 11\n\nYou can also specify ranges of tests such as 3-6 or 3- (meaning 3 to the\nend), or a number preceded by ~ to exclude a test. For example:\n\n  Runtest 3-15 ~10\n\nThis runs tests 3 to 15, excluding test 10, and just ~13 runs all the tests\nexcept test 13. Whatever order the arguments are in, the tests are always run\nin numerical order.\n\nYou can also call RunTest with the single argument \"list\" to cause it to output\na list of tests.\n\nThe test sequence starts with \"test 0\", which is a special test that has no\ninput file, and whose output is not checked. This is because it will be\ndifferent on different hardware and with different configurations. The test\nexists in order to exercise some of pcre2test's code that would not otherwise\nbe run.\n\nTests 1 and 2 can always be run, as they expect only plain text strings (not\nUTF) and make no use of Unicode properties. The first test file can be fed\ndirectly into the perltest.sh script to check that Perl gives the same results.\nThe only difference you should see is in the first few lines, where the Perl\nversion is given instead of the PCRE2 version. The second set of tests check\nauxiliary functions, error detection, and run-time flags that are specific to\nPCRE2. It also uses the debugging flags to check some of the internals of\npcre2_compile().\n\nIf you build PCRE2 with a locale setting that is not the standard C locale, the\ncharacter tables may be different (see next paragraph). In some cases, this may\ncause failures in the second set of tests. For example, in a locale where the\nisprint() function yields TRUE for characters in the range 128-255, the use of\n[:isascii:] inside a character class defines a different set of characters, and\nthis shows up in this test as a difference in the compiled code, which is being\nlisted for checking. For example, where the comparison test output contains\n[\\x00-\\x7f] the test might contain [\\x00-\\xff], and similarly in some other\ncases. This is not a bug in PCRE2.\n\nTest 3 checks pcre2_maketables(), the facility for building a set of character\ntables for a specific locale and using them instead of the default tables. The\nscript uses the \"locale\" command to check for the availability of the \"fr_FR\",\n\"french\", or \"fr\" locale, and uses the first one that it finds. If the \"locale\"\ncommand fails, or if its output doesn't include \"fr_FR\", \"french\", or \"fr\" in\nthe list of available locales, the third test cannot be run, and a comment is\noutput to say why. If running this test produces an error like this:\n\n  ** Failed to set locale \"fr_FR\"\n\nit means that the given locale is not available on your system, despite being\nlisted by \"locale\". This does not mean that PCRE2 is broken. There are three\nalternative output files for the third test, because three different versions\nof the French locale have been encountered. The test passes if its output\nmatches any one of them.\n\nTests 4 and 5 check UTF and Unicode property support, test 4 being compatible\nwith the perltest.sh script, and test 5 checking PCRE2-specific things.\n\nTests 6 and 7 check the pcre2_dfa_match() alternative matching function, in\nnon-UTF mode and UTF-mode with Unicode property support, respectively.\n\nTest 8 checks some internal offsets and code size features, but it is run only\nwhen Unicode support is enabled. The output is different in 8-bit, 16-bit, and\n32-bit modes and for different link sizes, so there are different output files\nfor each mode and link size.\n\nTests 9 and 10 are run only in 8-bit mode, and tests 11 and 12 are run only in\n16-bit and 32-bit modes. These are tests that generate different output in\n8-bit mode. Each pair are for general cases and Unicode support, respectively.\n\nTest 13 checks the handling of non-UTF characters greater than 255 by\npcre2_dfa_match() in 16-bit and 32-bit modes.\n\nTest 14 contains some special UTF and UCP tests that give different output for\ndifferent code unit widths.\n\nTest 15 contains a number of tests that must not be run with JIT. They check,\namong other non-JIT things, the match-limiting features of the interpretive\nmatcher.\n\nTest 16 is run only when JIT support is not available. It checks that an\nattempt to use JIT has the expected behaviour.\n\nTest 17 is run only when JIT support is available. It checks JIT complete and\npartial modes, match-limiting under JIT, and other JIT-specific features.\n\nTests 18 and 19 are run only in 8-bit mode. They check the POSIX interface to\nthe 8-bit library, without and with Unicode support, respectively.\n\nTest 20 checks the serialization functions by writing a set of compiled\npatterns to a file, and then reloading and checking them.\n\nTests 21 and 22 test \\C support when the use of \\C is not locked out, without\nand with UTF support, respectively. Test 23 tests \\C when it is locked out.\n\nTests 24 and 25 test the experimental pattern conversion functions, without and\nwith UTF support, respectively.\n\nTest 26 checks Unicode property support using tests that were generated\nautomatically from the Unicode data tables. These are the archived version of\nthe tests from Unicode 15.\n\nTest 27 checks Unicode property support using tests that are generated\nautomatically from the currently-used Unicode data tables.\n\nTest 28 tests EBCDIC support, and is only run when PCRE2 is specifically\ncompiled for EBCDIC. Test 29 tests EBCDIC when NL has been configured to be\n0x25.\n\n\nCharacter tables\n----------------\n\nFor speed, PCRE2 uses four tables for manipulating and identifying characters\nwhose code point values are less than 256. By default, a set of tables that is\nbuilt into the library is used. The pcre2_maketables() function can be called\nby an application to create a new set of tables in the current locale. This are\npassed to PCRE2 by calling pcre2_set_character_tables() to put a pointer into a\ncompile context.\n\nThe source file called pcre2_chartables.c contains the default set of tables.\nBy default, this is created as a copy of pcre2_chartables.c.dist, which\ncontains tables for ASCII coding. However, if --enable-rebuild-chartables is\nspecified for ./configure, a new version of pcre2_chartables.c is built by the\nprogram pcre2_dftables (compiled from pcre2_dftables.c), which uses the ANSI C\ncharacter handling functions such as isalnum(), isalpha(), isupper(),\nislower(), etc. to build the table sources. This means that the default C\nlocale that is set for your system will control the contents of these default\ntables. You can change the default tables by editing pcre2_chartables.c and\nthen re-building PCRE2. If you do this, you should take care to ensure that the\nfile does not get automatically re-generated. The best way to do this is to\nmove pcre2_chartables.c.dist out of the way and replace it with your customized\ntables.\n\nWhen the pcre2_dftables program is run as a result of specifying\n--enable-rebuild-chartables, it uses the default C locale that is set on your\nsystem. It does not pay attention to the LC_xxx environment variables. In other\nwords, it uses the system's default locale rather than whatever the compiling\nuser happens to have set. If you really do want to build a source set of\ncharacter tables in a locale that is specified by the LC_xxx variables, you can\nrun the pcre2_dftables program by hand with the -L option. For example:\n\n  ./pcre2_dftables -L pcre2_chartables.c.special\n\nThe second argument names the file where the source code for the tables is\nwritten. The first two 256-byte tables provide lower casing and case flipping\nfunctions, respectively. The next table consists of a number of 32-byte bit\nmaps which identify certain character classes such as digits, \"word\"\ncharacters, white space, etc. These are used when building 32-byte bit maps\nthat represent character classes for code points less than 256. The final\n256-byte table has bits indicating various character types, as follows:\n\n    1   white space character\n    2   letter\n    4   lower case letter\n    8   decimal digit\n   16   alphanumeric or '_'\n\nYou can also specify -b (with or without -L) when running pcre2_dftables. This\ncauses the tables to be written in binary instead of as source code. A set of\nbinary tables can be loaded into memory by an application and passed to\npcre2_compile() in the same way as tables created dynamically by calling\npcre2_maketables(). The tables are just a string of bytes, independent of\nhardware characteristics such as endianness. This means they can be bundled\nwith an application that runs in different environments, to ensure consistent\nbehaviour.\n\nSee also the pcre2build section \"Creating character tables at build time\".\n\n\nFile manifest\n-------------\n\nThe distribution should contain the files listed below.\n\n(A) Source files for the PCRE2 library functions and their headers are found in\n    the src directory:\n\n  src/pcre2_dftables.c     auxiliary program for building pcre2_chartables.c\n                           when --enable-rebuild-chartables is specified\n\n  src/pcre2_chartables.c.dist  a default set of character tables that assume\n                           ASCII coding; unless --enable-rebuild-chartables is\n                           specified, used by copying to pcre2_chartables.c\n  src/pcre2_chartables.c.ebcdic-1047-{nl15,nl25}  a default set of character\n                           tables for EBCDIC 1047; used if\n                           --enable-ebcdic-ignoring-compiler is specified\n                           without --enable-rebuild-chartables\n\n  src/pcre2posix.c           )\n  src/pcre2_auto_possess.c   )\n  src/pcre2_chkdint.c        )\n  src/pcre2_compile.c        )\n  src/pcre2_compile_cgroup.c )\n  src/pcre2_compile_class.c  )\n  src/pcre2_config.c         )\n  src/pcre2_context.c        )\n  src/pcre2_convert.c        )\n  src/pcre2_dfa_match.c      )\n  src/pcre2_error.c          )\n  src/pcre2_extuni.c         )\n  src/pcre2_find_bracket.c   )\n  src/pcre2_jit_compile.c    )\n  src/pcre2_maketables.c     ) sources for the functions in the library,\n  src/pcre2_match.c          )   and some internal functions that they use\n  src/pcre2_match_data.c     )\n  src/pcre2_match_next.c     )\n  src/pcre2_newline.c        )\n  src/pcre2_ord2utf.c        )\n  src/pcre2_pattern_info.c   )\n  src/pcre2_script_run.c     )\n  src/pcre2_serialize.c      )\n  src/pcre2_string_utils.c   )\n  src/pcre2_study.c          )\n  src/pcre2_substitute.c     )\n  src/pcre2_substring.c      )\n  src/pcre2_tables.c         )\n  src/pcre2_ucd.c            )\n  src/pcre2_valid_utf.c      )\n  src/pcre2_xclass.c         )\n\n  src/pcre2_fuzzsupport.c  function for (optional) fuzzing support\n\n  src/config.h.in          template for config.h, when built by \"configure\"\n  src/pcre2.h.in           template for pcre2.h when built by \"configure\"\n  src/pcre2posix.h         header for the external POSIX wrapper API\n  src/pcre2_compile.h      header for internal use\n  src/pcre2_internal.h     header for internal use\n  src/pcre2_intmodedep.h   a mode-specific internal header\n  src/pcre2_jit_char_inc.h header used by JIT\n  src/pcre2_jit_match_inc.h header used by JIT\n  src/pcre2_jit_misc_inc.h header used by JIT\n  src/pcre2_jit_simd_inc.h header used by JIT\n  src/pcre2_printint_inc.h debugging function that is used by pcre2test\n  src/pcre2_ucp.h          header for Unicode property handling\n  src/pcre2_ucptables_inc.h header with Unicode data tables\n  src/pcre2_util.h         header for internal utils\n\n  deps/sljit/sljit_src/*   source files for the JIT compiler\n\n(B) Source files for programs that use PCRE2:\n\n  src/pcre2demo.c          simple demonstration of coding calls to PCRE2\n  src/pcre2grep.c          source of a grep utility that uses PCRE2\n  src/pcre2test.c          comprehensive test program\n  src/pcre2test_inc.h      header used by pcre2test\n  src/pcre2_jit_test.c     JIT test program\n  src/pcre2posix_test.c    POSIX wrapper API test program\n\n(C) Auxiliary files:\n\n  AUTHORS.md               information about the authors of PCRE2\n  ChangeLog                log of changes to the code\n  HACKING                  some notes about the internals of PCRE2\n  INSTALL                  generic installation instructions\n  LICENCE.md               conditions for the use of PCRE2\n  COPYING                  the same, using GNU's standard name\n  SECURITY.md              information on reporting vulnerabilities\n  Makefile.in              ) template for Unix Makefile, which is built by\n                           )   \"configure\"\n  Makefile.am              ) the automake input that was used to create\n                           )   Makefile.in\n  NEWS                     important changes in this release\n  NON-AUTOTOOLS-BUILD      notes on building PCRE2 without using autotools\n  README                   this file\n  RunTest                  a Unix shell script for running tests\n  RunGrepTest              a Unix shell script for pcre2grep tests\n  RunTest.bat              a Windows batch file for running tests\n  RunGrepTest.bat          a Windows batch file for pcre2grep tests\n  aclocal.m4               m4 macros (generated by \"aclocal\")\n  m4/*                     m4 macros (used by autoconf)\n  configure                a configuring shell script (built by autoconf)\n  configure.ac             ) the autoconf input that was used to build\n                           )   \"configure\" and config.h\n  doc/*.3                  man page sources for PCRE2\n  doc/*.1                  man page sources for pcre2grep and pcre2test\n  doc/html/*               HTML documentation\n  doc/pcre2.txt            plain text version of the man pages\n  doc/pcre2-config.txt     plain text documentation of pcre2-config script\n  doc/pcre2grep.txt        plain text documentation of grep utility program\n  doc/pcre2test.txt        plain text documentation of test program\n  libpcre2-8.pc.in         template for libpcre2-8.pc for pkg-config\n  libpcre2-16.pc.in        template for libpcre2-16.pc for pkg-config\n  libpcre2-32.pc.in        template for libpcre2-32.pc for pkg-config\n  libpcre2-posix.pc.in     template for libpcre2-posix.pc for pkg-config\n  ar-lib                   )\n  config.guess             )\n  config.sub               )\n  depcomp                  ) helper tools generated by libtool and\n  compile                  )   automake, used internally by ./configure\n  install-sh               )\n  ltmain.sh                )\n  missing                  )\n  test-driver              )\n  perltest.sh              Script for running a Perl test program\n  pcre2-config.in          source of script which retains PCRE2 information\n  testdata/testinput*      test data for main library tests\n  testdata/testoutput*     expected test results\n  testdata/grep*           input and output for pcre2grep tests\n  testdata/*               other supporting test files\n  src/libpcre2-8.sym.in     )\n  src/libpcre2-16.sym.in    ) symbol version script templates for the\n  src/libpcre2-32.sym.in    ) GNU, BSD and Sun linkers\n  src/libpcre2-posix.sym.in )\n\n(D) Auxiliary files for CMake support\n\n  cmake/COPYING-CMAKE-SCRIPTS\n  cmake/FindEditline.cmake\n  cmake/FindReadline.cmake\n  cmake/pcre2-config.cmake.in\n  cmake/PCRE2CheckVscript.cmake\n  cmake/PCRE2UseSystemExtensions.cmake\n  cmake/PCRE2WarningAsError.cmake\n  src/config-cmake.h.in\n  CMakeLists.txt\n\n(E) Auxiliary files for building PCRE2 \"by hand\"\n\n  src/pcre2.h.generic     ) a version of the public PCRE2 header file\n                          )   for use in non-\"configure\" environments\n  src/config.h.generic    ) a version of config.h for use in non-\"configure\"\n                          )   environments\n\n(F) Auxiliary files for building PCRE2 using other build systems\n\n  BUILD.bazel             ) files used by the Bazel\n  MODULE.bazel            )   build system\n  build.zig               file used by zig's build system\n\n(G) Auxiliary files for building PCRE2 under OpenVMS\n\n  vms/configure.com       )\n  vms/openvms_readme.txt  ) These files were contributed by a PCRE2 user.\n  vms/pcre2.h_patch       )\n  vms/stdint.h            )\n\n=============================\nLast updated: 15 October 2025\n=============================\n\n"
  },
  {
    "path": "doc/html/index.html",
    "content": "<html>\n<!-- This is a manually maintained file that is the root of the HTML version of\n     the PCRE2 documentation. When the HTML documents are built from the man\n     page versions, the entire doc/html directory is emptied, this file is then\n     copied into doc/html/index.html, and the remaining files therein are\n     created by the 132html script.\n-->\n<head>\n<title>PCRE2 specification</title>\n<style>\ntable, caption, tbody, tfoot, thead, tr, th, td {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  font: inherit;\n  vertical-align: baseline;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd {\n  padding: 4px 16px 0 0;\n}\n</style>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>Perl-compatible Regular Expressions (revised API: PCRE2)</h1>\n<p>\nThe HTML documentation for PCRE2 consists of a number of pages that are listed\nbelow in alphabetical order. If you are new to PCRE2, please read the first one\nfirst.\n</p>\n\n<table>\n<tr><td><a href=\"pcre2.html\">pcre2</a></td>\n    <td>Introductory page</td></tr>\n\n<tr><td><a href=\"pcre2-config.html\">pcre2-config</a></td>\n    <td>Information about the installation configuration</td></tr>\n\n<tr><td><a href=\"pcre2api.html\">pcre2api</a></td>\n    <td>PCRE2's native API</td></tr>\n\n<tr><td><a href=\"pcre2build.html\">pcre2build</a></td>\n    <td>Building PCRE2</td></tr>\n\n<tr><td><a href=\"pcre2callout.html\">pcre2callout</a></td>\n    <td>The <i>callout</i> facility</td></tr>\n\n<tr><td><a href=\"pcre2compat.html\">pcre2compat</a></td>\n    <td>Compability with Perl</td></tr>\n\n<tr><td><a href=\"pcre2convert.html\">pcre2convert</a></td>\n    <td>Experimental foreign pattern conversion functions</td></tr>\n\n<tr><td><a href=\"pcre2demo.html\">pcre2demo</a></td>\n    <td>A demonstration C program that uses the PCRE2 library</td></tr>\n\n<tr><td><a href=\"pcre2grep.html\">pcre2grep</a></td>\n    <td>The <b>pcre2grep</b> command</td></tr>\n\n<tr><td><a href=\"pcre2jit.html\">pcre2jit</a></td>\n    <td>Discussion of the just-in-time optimization support</td></tr>\n\n<tr><td><a href=\"pcre2limits.html\">pcre2limits</a></td>\n    <td>Details of size and other limits</td></tr>\n\n<tr><td><a href=\"pcre2matching.html\">pcre2matching</a></td>\n    <td>Discussion of the two matching algorithms</td></tr>\n\n<tr><td><a href=\"pcre2partial.html\">pcre2partial</a></td>\n    <td>Using PCRE2 for partial matching</td></tr>\n\n<tr><td><a href=\"pcre2pattern.html\">pcre2pattern</a></td>\n    <td>Specification of the regular expressions supported by PCRE2</td></tr>\n\n<tr><td><a href=\"pcre2perform.html\">pcre2perform</a></td>\n    <td>Some comments on performance</td></tr>\n\n<tr><td><a href=\"pcre2posix.html\">pcre2posix</a></td>\n    <td>The POSIX API to the PCRE2 8-bit library</td></tr>\n\n<tr><td><a href=\"pcre2sample.html\">pcre2sample</a></td>\n    <td>Discussion of the pcre2demo program</td></tr>\n\n<tr><td><a href=\"pcre2serialize.html\">pcre2serialize</a></td>\n    <td>Serializing functions for saving precompiled patterns</td></tr>\n\n<tr><td><a href=\"pcre2syntax.html\">pcre2syntax</a></td>\n    <td>Syntax quick-reference summary</td></tr>\n\n<tr><td><a href=\"pcre2test.html\">pcre2test</a></td>\n    <td>The <b>pcre2test</b> command for testing PCRE2</td></tr>\n\n<tr><td><a href=\"pcre2unicode.html\">pcre2unicode</a></td>\n    <td>Discussion of Unicode and UTF-8/UTF-16/UTF-32 support</td></tr>\n</table>\n\n<p>\nThere are also individual pages that summarize the interface for each function\nin the library.\n</p>\n\n<table>\n\n<tr><td><a href=\"pcre2_callout_enumerate.html\">pcre2_callout_enumerate</a></td>\n    <td>Enumerate callouts in a compiled pattern</td></tr>\n\n<tr><td><a href=\"pcre2_code_copy.html\">pcre2_code_copy</a></td>\n    <td>Copy a compiled pattern</td></tr>\n\n<tr><td><a href=\"pcre2_code_copy_with_tables.html\">pcre2_code_copy_with_tables</a></td>\n    <td>Copy a compiled pattern and its character tables</td></tr>\n\n<tr><td><a href=\"pcre2_code_free.html\">pcre2_code_free</a></td>\n    <td>Free a compiled pattern</td></tr>\n\n<tr><td><a href=\"pcre2_compile.html\">pcre2_compile</a></td>\n    <td>Compile a regular expression pattern</td></tr>\n\n<tr><td><a href=\"pcre2_compile_context_copy.html\">pcre2_compile_context_copy</a></td>\n    <td>Copy a compile context</td></tr>\n\n<tr><td><a href=\"pcre2_compile_context_create.html\">pcre2_compile_context_create</a></td>\n    <td>Create a compile context</td></tr>\n\n<tr><td><a href=\"pcre2_compile_context_free.html\">pcre2_compile_context_free</a></td>\n    <td>Free a compile context</td></tr>\n\n<tr><td><a href=\"pcre2_config.html\">pcre2_config</a></td>\n    <td>Show build-time related configuration options</td></tr>\n\n<tr><td><a href=\"pcre2_convert_context_copy.html\">pcre2_convert_context_copy</a></td>\n    <td>Copy a convert context</td></tr>\n\n<tr><td><a href=\"pcre2_convert_context_create.html\">pcre2_convert_context_create</a></td>\n    <td>Create a convert context</td></tr>\n\n<tr><td><a href=\"pcre2_convert_context_free.html\">pcre2_convert_context_free</a></td>\n    <td>Free a convert context</td></tr>\n\n<tr><td><a href=\"pcre2_converted_pattern_free.html\">pcre2_converted_pattern_free</a></td>\n    <td>Free converted foreign pattern</td></tr>\n\n<tr><td><a href=\"pcre2_dfa_match.html\">pcre2_dfa_match</a></td>\n    <td>Match a compiled pattern to a subject string\n    (DFA algorithm; <i>not</i> Perl compatible)</td></tr>\n\n<tr><td><a href=\"pcre2_general_context_copy.html\">pcre2_general_context_copy</a></td>\n    <td>Copy a general context</td></tr>\n\n<tr><td><a href=\"pcre2_general_context_create.html\">pcre2_general_context_create</a></td>\n    <td>Create a general context</td></tr>\n\n<tr><td><a href=\"pcre2_general_context_free.html\">pcre2_general_context_free</a></td>\n    <td>Free a general context</td></tr>\n\n<tr><td><a href=\"pcre2_get_error_message.html\">pcre2_get_error_message</a></td>\n    <td>Get textual error message for error number</td></tr>\n\n<tr><td><a href=\"pcre2_get_mark.html\">pcre2_get_mark</a></td>\n    <td>Get a (*MARK) name</td></tr>\n\n<tr><td><a href=\"pcre2_get_match_data_size.html\">pcre2_get_match_data_size</a></td>\n    <td>Get the size of a match data block</td></tr>\n\n<tr><td><a href=\"pcre2_get_ovector_count.html\">pcre2_get_ovector_count</a></td>\n    <td>Get the ovector count</td></tr>\n\n<tr><td><a href=\"pcre2_get_ovector_pointer.html\">pcre2_get_ovector_pointer</a></td>\n    <td>Get a pointer to the ovector</td></tr>\n\n<tr><td><a href=\"pcre2_get_startchar.html\">pcre2_get_startchar</a></td>\n    <td>Get the starting character offset</td></tr>\n\n<tr><td><a href=\"pcre2_jit_compile.html\">pcre2_jit_compile</a></td>\n    <td>Process a compiled pattern with the JIT compiler</td></tr>\n\n<tr><td><a href=\"pcre2_jit_free_unused_memory.html\">pcre2_jit_free_unused_memory</a></td>\n    <td>Free unused JIT memory</td></tr>\n\n<tr><td><a href=\"pcre2_jit_match.html\">pcre2_jit_match</a></td>\n    <td>Fast path interface to JIT matching</td></tr>\n\n<tr><td><a href=\"pcre2_jit_stack_assign.html\">pcre2_jit_stack_assign</a></td>\n    <td>Assign stack for JIT matching</td></tr>\n\n<tr><td><a href=\"pcre2_jit_stack_create.html\">pcre2_jit_stack_create</a></td>\n    <td>Create a stack for JIT matching</td></tr>\n\n<tr><td><a href=\"pcre2_jit_stack_free.html\">pcre2_jit_stack_free</a></td>\n    <td>Free a JIT matching stack</td></tr>\n\n<tr><td><a href=\"pcre2_maketables.html\">pcre2_maketables</a></td>\n    <td>Build character tables in current locale</td></tr>\n\n<tr><td><a href=\"pcre2_maketables_free.html\">pcre2_maketables_free</a></td>\n    <td>Free character tables</td></tr>\n\n<tr><td><a href=\"pcre2_match.html\">pcre2_match</a></td>\n    <td>Match a compiled pattern to a subject string\n    (Perl compatible)</td></tr>\n\n<tr><td><a href=\"pcre2_match_context_copy.html\">pcre2_match_context_copy</a></td>\n    <td>Copy a match context</td></tr>\n\n<tr><td><a href=\"pcre2_match_context_create.html\">pcre2_match_context_create</a></td>\n    <td>Create a match context</td></tr>\n\n<tr><td><a href=\"pcre2_match_context_free.html\">pcre2_match_context_free</a></td>\n    <td>Free a match context</td></tr>\n\n<tr><td><a href=\"pcre2_match_data_create.html\">pcre2_match_data_create</a></td>\n    <td>Create a match data block</td></tr>\n\n<tr><td><a href=\"pcre2_match_data_create_from_pattern.html\">pcre2_match_data_create_from_pattern</a></td>\n    <td>Create a match data block getting size from pattern</td></tr>\n\n<tr><td><a href=\"pcre2_match_data_free.html\">pcre2_match_data_free</a></td>\n    <td>Free a match data block</td></tr>\n\n<tr><td><a href=\"pcre2_next_match.html\">pcre2_next_match</a></td>\n    <td>Get the match parameters for the next match</td></tr>\n\n<tr><td><a href=\"pcre2_pattern_convert.html\">pcre2_pattern_convert</a></td>\n    <td>Experimental foreign pattern converter</td></tr>\n\n<tr><td><a href=\"pcre2_pattern_info.html\">pcre2_pattern_info</a></td>\n    <td>Extract information about a pattern</td></tr>\n\n<tr><td><a href=\"pcre2_serialize_decode.html\">pcre2_serialize_decode</a></td>\n    <td>Decode serialized compiled patterns</td></tr>\n\n<tr><td><a href=\"pcre2_serialize_encode.html\">pcre2_serialize_encode</a></td>\n    <td>Serialize compiled patterns for save/restore</td></tr>\n\n<tr><td><a href=\"pcre2_serialize_free.html\">pcre2_serialize_free</a></td>\n    <td>Free serialized compiled patterns</td></tr>\n\n<tr><td><a href=\"pcre2_serialize_get_number_of_codes.html\">pcre2_serialize_get_number_of_codes</a></td>\n    <td>Get number of serialized compiled patterns</td></tr>\n\n<tr><td><a href=\"pcre2_set_bsr.html\">pcre2_set_bsr</a></td>\n    <td>Set \\R convention</td></tr>\n\n<tr><td><a href=\"pcre2_set_callout.html\">pcre2_set_callout</a></td>\n    <td>Set up a callout function</td></tr>\n\n<tr><td><a href=\"pcre2_set_character_tables.html\">pcre2_set_character_tables</a></td>\n    <td>Set character tables</td></tr>\n\n<tr><td><a href=\"pcre2_set_compile_extra_options.html\">pcre2_set_compile_extra_options</a></td>\n    <td>Set compile time extra options</td></tr>\n\n<tr><td><a href=\"pcre2_set_compile_recursion_guard.html\">pcre2_set_compile_recursion_guard</a></td>\n    <td>Set up a compile recursion guard function</td></tr>\n\n<tr><td><a href=\"pcre2_set_depth_limit.html\">pcre2_set_depth_limit</a></td>\n    <td>Set the match backtracking depth limit</td></tr>\n\n<tr><td><a href=\"pcre2_set_glob_escape.html\">pcre2_set_glob_escape</a></td>\n    <td>Set glob escape character</td></tr>\n\n<tr><td><a href=\"pcre2_set_glob_separator.html\">pcre2_set_glob_separator</a></td>\n    <td>Set glob separator character</td></tr>\n\n<tr><td><a href=\"pcre2_set_heap_limit.html\">pcre2_set_heap_limit</a></td>\n    <td>Set the match backtracking heap limit</td></tr>\n\n<tr><td><a href=\"pcre2_set_match_limit.html\">pcre2_set_match_limit</a></td>\n    <td>Set the match limit</td></tr>\n\n<tr><td><a href=\"pcre2_set_max_pattern_compiled_length.html\">pcre2_set_max_pattern_compiled_length</a></td>\n    <td>Set the maximum length of a compiled pattern</td></tr>\n\n<tr><td><a href=\"pcre2_set_max_pattern_length.html\">pcre2_set_max_pattern_length</a></td>\n    <td>Set the maximum length of a pattern</td></tr>\n\n<tr><td><a href=\"pcre2_set_max_varlookbehind.html\">pcre2_set_max_varlookbehind</a></td>\n    <td>Set the maximum match length for a variable-length lookbehind</td></tr>\n\n<tr><td><a href=\"pcre2_set_newline.html\">pcre2_set_newline</a></td>\n    <td>Set the newline convention</td></tr>\n\n<tr><td><a href=\"pcre2_set_offset_limit.html\">pcre2_set_offset_limit</a></td>\n    <td>Set the offset limit</td></tr>\n\n<tr><td><a href=\"pcre2_set_optimize.html\">pcre2_set_optimize</a></td>\n    <td>Set an optimization directive</td></tr>\n\n<tr><td><a href=\"pcre2_set_parens_nest_limit.html\">pcre2_set_parens_nest_limit</a></td>\n    <td>Set the parentheses nesting limit</td></tr>\n\n<tr><td><a href=\"pcre2_set_recursion_limit.html\">pcre2_set_recursion_limit</a></td>\n    <td>Obsolete: use pcre2_set_depth_limit</td></tr>\n\n<tr><td><a href=\"pcre2_set_recursion_memory_management.html\">pcre2_set_recursion_memory_management</a></td>\n    <td>Obsolete function that (from 10.30 onwards) does nothing</td></tr>\n\n<tr><td><a href=\"pcre2_set_substitute_callout.html\">pcre2_set_substitute_callout</a></td>\n    <td>Set a substitution callout function</td></tr>\n\n<tr><td><a href=\"pcre2_set_substitute_case_callout.html\">pcre2_set_substitute_case_callout</a></td>\n    <td>Set a substitution case callout function</td></tr>\n\n<tr><td><a href=\"pcre2_substitute.html\">pcre2_substitute</a></td>\n    <td>Match a compiled pattern to a subject string and do\n    substitutions</td></tr>\n\n<tr><td><a href=\"pcre2_substring_copy_byname.html\">pcre2_substring_copy_byname</a></td>\n    <td>Extract named substring into given buffer</td></tr>\n\n<tr><td><a href=\"pcre2_substring_copy_bynumber.html\">pcre2_substring_copy_bynumber</a></td>\n    <td>Extract numbered substring into given buffer</td></tr>\n\n<tr><td><a href=\"pcre2_substring_free.html\">pcre2_substring_free</a></td>\n    <td>Free extracted substring</td></tr>\n\n<tr><td><a href=\"pcre2_substring_get_byname.html\">pcre2_substring_get_byname</a></td>\n    <td>Extract named substring into new memory</td></tr>\n\n<tr><td><a href=\"pcre2_substring_get_bynumber.html\">pcre2_substring_get_bynumber</a></td>\n    <td>Extract numbered substring into new memory</td></tr>\n\n<tr><td><a href=\"pcre2_substring_length_byname.html\">pcre2_substring_length_byname</a></td>\n    <td>Find length of named substring</td></tr>\n\n<tr><td><a href=\"pcre2_substring_length_bynumber.html\">pcre2_substring_length_bynumber</a></td>\n    <td>Find length of numbered substring</td></tr>\n\n<tr><td><a href=\"pcre2_substring_list_free.html\">pcre2_substring_list_free</a></td>\n    <td>Free list of extracted substrings</td></tr>\n\n<tr><td><a href=\"pcre2_substring_list_get.html\">pcre2_substring_list_get</a></td>\n    <td>Extract all substrings into new memory</td></tr>\n\n<tr><td><a href=\"pcre2_substring_nametable_scan.html\">pcre2_substring_nametable_scan</a></td>\n    <td>Find table entries for given string name</td></tr>\n\n<tr><td><a href=\"pcre2_substring_number_from_name.html\">pcre2_substring_number_from_name</a></td>\n    <td>Convert captured string name to number</td></tr>\n</table>\n\n</html>\n\n"
  },
  {
    "path": "doc/html/pcre2-config.html",
    "content": "<html>\n<head>\n<title>pcre2-config specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2-config man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">SYNOPSIS</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">DESCRIPTION</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">OPTIONS</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">SEE ALSO</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">AUTHOR</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">SYNOPSIS</a></h2>\n<p>\n<b>pcre2-config  [--prefix] [--exec-prefix] [--version]</b>\n<b>             [--libs8] [--libs16] [--libs32] [--libs-posix]</b>\n<b>             [--cflags] [--cflags-posix]</b>\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">DESCRIPTION</a></h2>\n<p>\n<b>pcre2-config</b> returns the configuration of the installed PCRE2 libraries\nand the options required to compile a program to use them. Some of the options\napply only to the 8-bit, 16-bit, or 32-bit libraries, respectively, and are not\navailable for libraries that have not been built. If an unavailable option is\nencountered, the \"usage\" information is output.\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">OPTIONS</a></h2>\n<p>\n<b>--prefix</b>\nWrites the directory prefix used in the PCRE2 installation for\narchitecture-independent files (<i>/usr</i> on many systems, <i>/usr/local</i> on\nsome systems) to the standard output.\n</p>\n<p>\n<b>--exec-prefix</b>\nWrites the directory prefix used in the PCRE2 installation for\narchitecture-dependent files (normally the same as <b>--prefix</b>) to the\nstandard output.\n</p>\n<p>\n<b>--version</b>\nWrites the version number of the installed PCRE2 libraries to the standard\noutput.\n</p>\n<p>\n<b>--libs8</b>\nWrites to the standard output the command line options required to link\nwith the 8-bit PCRE2 library (<b>-lpcre2-8</b> on many systems).\n</p>\n<p>\n<b>--libs16</b>\nWrites to the standard output the command line options required to link\nwith the 16-bit PCRE2 library (<b>-lpcre2-16</b> on many systems).\n</p>\n<p>\n<b>--libs32</b>\nWrites to the standard output the command line options required to link\nwith the 32-bit PCRE2 library (<b>-lpcre2-32</b> on many systems).\n</p>\n<p>\n<b>--libs-posix</b>\nWrites to the standard output the command line options required to link with\nPCRE2's POSIX API wrapper library (<b>-lpcre2-posix</b> <b>-lpcre2-8</b> on many\nsystems).\n</p>\n<p>\n<b>--cflags</b>\nWrites to the standard output the command line options required to compile\nfiles that use PCRE2 (this may include some <b>-I</b> options, but is blank on\nmany systems).\n</p>\n<p>\n<b>--cflags-posix</b>\nWrites to the standard output the command line options required to compile\nfiles that use PCRE2's POSIX API wrapper library (this may include some\n<b>-I</b> options, but is blank on many systems).\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">SEE ALSO</a></h2>\n<p>\n<b>pcre2(3)</b>\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nThis manual page was originally written by Mark Baker for the Debian GNU/Linux\nsystem. It has been subsequently revised as a generic PCRE2 man page.\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 22 February 2025\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2.html",
    "content": "<html>\n<head>\n<title>pcre2 specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2 man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">INTRODUCTION</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">SECURITY CONSIDERATIONS</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">USER DOCUMENTATION</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">AUTHORS</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">INTRODUCTION</a></h2>\n<p>\nPCRE2 is the name used for a revised API for the PCRE library, which is a set\nof functions, written in C, that implement regular expression pattern matching\nusing the same syntax and semantics as Perl, with just a few differences. After\nnearly two decades, the limitations of the original API were making development\nincreasingly difficult. The new API is more extensible, and it was simplified\nby abolishing the separate \"study\" optimizing function; in PCRE2, patterns are\nautomatically optimized where possible. Since forking from PCRE1, the code has\nbeen extensively refactored and new features introduced. The old library is now\nobsolete and is no longer maintained.\n</p>\n<p>\nAs well as Perl-style regular expression patterns, some features that appeared\nin Python and the original PCRE before they appeared in Perl are available\nusing the Python syntax. There is also support for some .NET and Oniguruma\nsyntax items, and there are options for requesting minor changes that give\nbetter ECMAScript (JavaScript) compatibility.\n</p>\n<p>\nThe source code for PCRE2 can be compiled to support strings of 8-bit, 16-bit,\nor 32-bit code units, which means that up to three separate libraries may be\ninstalled, one for each code unit size. The size of a code unit is not related\nto the bit size of the underlying hardware. In a 64-bit environment that also\nsupports 32-bit applications, versions of PCRE2 that are compiled in both\n64-bit and 32-bit modes may be needed.\n</p>\n<p>\nThe original work to extend PCRE to 16-bit and 32-bit code units was done by\nZoltan Herczeg and Christian Persch, respectively. In all three cases, strings\ncan be interpreted either as one character per code unit, or as UTF-encoded\nUnicode, with support for Unicode general category properties. Unicode support\nis optional at build time (but is the default). However, processing strings as\nUTF code units must be enabled explicitly at run time. The version of Unicode\nin use can be discovered by running\n<pre>\n  pcre2test -C\n</pre>\n</p>\n<p>\nThe three libraries contain identical sets of functions, with names ending in\n_8, _16, or _32, respectively (for example, <b>pcre2_compile_8()</b>). However,\nby defining PCRE2_CODE_UNIT_WIDTH to be 8, 16, or 32, a program that uses just\none code unit width can be written using generic names such as\n<b>pcre2_compile()</b>, and the documentation is written assuming that this is\nthe case.\n</p>\n<p>\nIn addition to the Perl-compatible matching function, PCRE2 contains an\nalternative function that matches the same compiled patterns in a different\nway. In certain circumstances, the alternative function has some advantages.\nFor a discussion of the two matching algorithms, see the\n<a href=\"pcre2matching.html\"><b>pcre2matching</b></a>\npage.\n</p>\n<p>\nDetails of exactly which Perl regular expression features are and are not\nsupported by PCRE2 are given in separate documents. See the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\nand\n<a href=\"pcre2compat.html\"><b>pcre2compat</b></a>\npages. There is a syntax summary in the\n<a href=\"pcre2syntax.html\"><b>pcre2syntax</b></a>\npage.\n</p>\n<p>\nSome features of PCRE2 can be included, excluded, or changed when the library\nis built. The\n<a href=\"pcre2_config.html\"><b>pcre2_config()</b></a>\nfunction makes it possible for a client to discover which features are\navailable. The features themselves are described in the\n<a href=\"pcre2build.html\"><b>pcre2build</b></a>\npage. Documentation about building PCRE2 for various operating systems can be\nfound in the\n<a href=\"README.txt\"><b>README</b></a>\nand\n<a href=\"NON-AUTOTOOLS-BUILD.txt\"><b>NON-AUTOTOOLS-BUILD</b></a>\nfiles in the source distribution.\n</p>\n<p>\nThe libraries contains a number of undocumented internal functions and data\ntables that are used by more than one of the exported external functions, but\nwhich are not intended for use by external callers. Their names all begin with\n\"_pcre2\", which hopefully will not provoke any name clashes. In some\nenvironments, it is possible to control which external symbols are exported\nwhen a shared library is built, and in these cases the undocumented symbols are\nnot exported.\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">SECURITY CONSIDERATIONS</a></h2>\n<p>\nIf you are using PCRE2 in a non-UTF application that permits users to supply\narbitrary patterns for compilation, you should be aware of a feature that\nallows users to turn on UTF support from within a pattern. For example, an\n8-bit pattern that begins with \"(*UTF)\" turns on UTF-8 mode, which interprets\npatterns and subjects as strings of UTF-8 code units instead of individual\n8-bit characters. This causes both the pattern and any data against which it is\nmatched to be checked for UTF-8 validity. If the data string is very long, such\na check might use sufficiently many resources as to cause your application to\nlose performance.\n</p>\n<p>\nOne way of guarding against this possibility is to use the\n<b>pcre2_pattern_info()</b> function to check the compiled pattern's options for\nPCRE2_UTF. Alternatively, you can set the PCRE2_NEVER_UTF option when calling\n<b>pcre2_compile()</b>. This causes a compile time error if the pattern contains\na UTF-setting sequence.\n</p>\n<p>\nThe use of Unicode properties for character types such as \\d can also be\nenabled from within the pattern, by specifying \"(*UCP)\". This feature can be\ndisallowed by setting the PCRE2_NEVER_UCP option.\n</p>\n<p>\nIf your application is one that supports UTF, be aware that validity checking\ncan take time. If the same data string is to be matched many times, you can use\nthe PCRE2_NO_UTF_CHECK option for the second and subsequent matches to avoid\nrunning redundant checks.\n</p>\n<p>\nThe use of the \\C escape sequence in a UTF-8 or UTF-16 pattern can lead to\nproblems, because it may leave the current matching point in the middle of a\nmulti-code-unit character. The PCRE2_NEVER_BACKSLASH_C option can be used by an\napplication to lock out the use of \\C, causing a compile-time error if it is\nencountered. It is also possible to build PCRE2 with the use of \\C permanently\ndisabled.\n</p>\n<p>\nAnother way that performance can be hit is by running a pattern that has a very\nlarge search tree against a string that will never match. Nested unlimited\nrepeats in a pattern are a common example. PCRE2 provides some protection\nagainst this: see the <b>pcre2_set_match_limit()</b> function in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage. There is a similar function called <b>pcre2_set_depth_limit()</b> that can\nbe used to restrict the amount of memory that is used.\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">USER DOCUMENTATION</a></h2>\n<p>\nThe user documentation for PCRE2 comprises a number of different sections. In\nthe \"man\" format, each of these is a separate \"man page\". In the HTML format,\neach is a separate page, linked from the index page. In the plain text format,\nthe descriptions of the <b>pcre2grep</b> and <b>pcre2test</b> programs are in\nfiles called <b>pcre2grep.txt</b> and <b>pcre2test.txt</b>, respectively. The\nremaining sections, except for the <b>pcre2demo</b> section (which is a program\nlisting), and the short pages for individual functions, are concatenated in\n<b>pcre2.txt</b>, for ease of searching. The sections are as follows:\n<pre>\n  pcre2              this document\n  pcre2-config       show PCRE2 installation configuration information\n  pcre2api           details of PCRE2's native C API\n  pcre2build         building PCRE2\n  pcre2callout       details of the pattern callout feature\n  pcre2compat        discussion of Perl compatibility\n  pcre2convert       details of pattern conversion functions\n  pcre2demo          a demonstration C program that uses PCRE2\n  pcre2grep          description of the <b>pcre2grep</b> command (8-bit only)\n  pcre2jit           discussion of just-in-time optimization support\n  pcre2limits        details of size and other limits\n  pcre2matching      discussion of the two matching algorithms\n  pcre2partial       details of the partial matching facility\n  pcre2pattern       syntax and semantics of supported regular expression patterns\n  pcre2perform       discussion of performance issues\n  pcre2posix         the POSIX-compatible C API for the 8-bit library\n  pcre2sample        discussion of the pcre2demo program\n  pcre2serialize     details of pattern serialization\n  pcre2syntax        quick syntax reference\n  pcre2test          description of the <b>pcre2test</b> command\n  pcre2unicode       discussion of Unicode and UTF support\n</pre>\nIn the \"man\" and HTML formats, there is also a short page for each C library\nfunction, listing its arguments and results.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">AUTHORS</a></h2>\n<p>\nThe current maintainers of PCRE2 are Nicholas Wilson and Zoltan Herczeg.\n</p>\n<p>\nPCRE2 was written by Philip Hazel, of the University Computing Service,\nCambridge, England. Many others have also contributed.\n</p>\n<p>\nTo contact the maintainers, please use the GitHub issues tracker or PCRE2\nmailing list, as described at the project page:\n<a href=\"https://github.com/PCRE2Project/pcre2\">https://github.com/PCRE2Project/pcre2</a>\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 22 February 2025\n<br>\nCopyright &copy; 1997-2021 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_callout_enumerate.html",
    "content": "<html>\n<head>\n<title>pcre2_callout_enumerate specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_callout_enumerate man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_callout_enumerate(const pcre2_code *<i>code</i>,</b>\n<b>  int (*<i>callback</i>)(pcre2_callout_enumerate_block *, void *),</b>\n<b>  void *<i>callout_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function scans a compiled regular expression and calls the <i>callback()</i>\nfunction for each callout within the pattern. The yield of the function is zero\nfor success and non-zero otherwise. The arguments are:\n<pre>\n  <i>code</i>           Points to the compiled pattern\n  <i>callback</i>       The callback function\n  <i>callout_data</i>   User data that is passed to the callback\n</pre>\nThe <i>callback()</i> function is passed a pointer to a data block containing\nthe following fields (not necessarily in this order):\n<pre>\n  uint32_t   <i>version</i>                Block version number\n  uint32_t   <i>callout_number</i>         Number for numbered callouts\n  PCRE2_SIZE <i>pattern_position</i>       Offset to next item in pattern\n  PCRE2_SIZE <i>next_item_length</i>       Length of next item in pattern\n  PCRE2_SIZE <i>callout_string_offset</i>  Offset to string within pattern\n  PCRE2_SIZE <i>callout_string_length</i>  Length of callout string\n  PCRE2_SPTR <i>callout_string</i>         Points to callout string or is NULL\n</pre>\nThe second argument passed to the <b>callback()</b> function is the callout data\nthat was passed to <b>pcre2_callout_enumerate()</b>. The <b>callback()</b>\nfunction must return zero for success. Any other value causes the pattern scan\nto stop, with the value being passed back as the result of\n<b>pcre2_callout_enumerate()</b>.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_code_copy.html",
    "content": "<html>\n<head>\n<title>pcre2_code_copy specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_code_copy man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_code *pcre2_code_copy(const pcre2_code *<i>code</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function makes a copy of the memory used for a compiled pattern, excluding\nany memory used by the JIT compiler. Without a subsequent call to\n<b>pcre2_jit_compile()</b>, the copy can be used only for non-JIT matching. The\npointer to the character tables is copied, not the tables themselves (see\n<b>pcre2_code_copy_with_tables()</b>). The yield of the function is NULL if\n<i>code</i> is NULL or if sufficient memory cannot be obtained.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_code_copy_with_tables.html",
    "content": "<html>\n<head>\n<title>pcre2_code_copy_with_tables specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_code_copy_with_tables man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_code *pcre2_code_copy_with_tables(const pcre2_code *<i>code</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function makes a copy of the memory used for a compiled pattern, excluding\nany memory used by the JIT compiler. Without a subsequent call to\n<b>pcre2_jit_compile()</b>, the copy can be used only for non-JIT matching.\nUnlike <b>pcre2_code_copy()</b>, a separate copy of the character tables is also\nmade, with the new code pointing to it. This memory will be automatically freed\nwhen <b>pcre2_code_free()</b> is called. The yield of the function is NULL if\n<i>code</i> is NULL or if sufficient memory cannot be obtained.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_code_free.html",
    "content": "<html>\n<head>\n<title>pcre2_code_free specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_code_free man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_code_free(pcre2_code *<i>code</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nIf <i>code</i> is NULL, this function does nothing. Otherwise, <i>code</i> must\npoint to a compiled pattern. This function frees its memory, including any\nmemory used by the JIT compiler. If the compiled pattern was created by a call\nto <b>pcre2_code_copy_with_tables()</b>, the memory for the character tables is\nalso freed.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_compile.html",
    "content": "<html>\n<head>\n<title>pcre2_compile specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_compile man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_code *pcre2_compile(PCRE2_SPTR <i>pattern</i>, PCRE2_SIZE <i>length</i>,</b>\n<b>  uint32_t <i>options</i>, int *<i>errorcode</i>, PCRE2_SIZE *<i>erroroffset,</i></b>\n<b>  pcre2_compile_context *<i>ccontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function compiles a regular expression pattern into an internal form. Its\narguments are:\n<pre>\n  <i>pattern</i>       A string containing expression to be compiled\n  <i>length</i>        The length of the string or PCRE2_ZERO_TERMINATED\n  <i>options</i>       Primary option bits\n  <i>errorcode</i>     Where to put an error code\n  <i>erroffset</i>     Where to put an error offset\n  <i>ccontext</i>      Pointer to a compile context or NULL\n</pre>\nThe length of the pattern and any error offset that is returned are in code\nunits, not characters. A NULL pattern with zero length is treated as an empty\nstring. A compile context is needed only if you want to provide custom memory\nallocation functions, or to provide an external function for system stack size\nchecking (see <b>pcre2_set_compile_recursion_guard()</b>), or to change one or\nmore of these parameters:\n<pre>\n  What \\R matches (Unicode newlines, or CR, LF, CRLF only);\n  PCRE2's character tables;\n  The newline character sequence;\n  The compile time nested parentheses limit;\n  The maximum pattern length (in code units) that is allowed;\n  The additional options bits.\n</pre>\nThe primary option bits are:\n<pre>\n  PCRE2_ANCHORED           Force pattern anchoring\n  PCRE2_ALLOW_EMPTY_CLASS  Allow empty classes\n  PCRE2_ALT_BSUX           Alternative handling of \\u, \\U, and \\x\n  PCRE2_ALT_CIRCUMFLEX     Alternative handling of ^ in multiline mode\n  PCRE2_ALT_EXTENDED_CLASS Alternative extended character class syntax\n  PCRE2_ALT_VERBNAMES      Process backslashes in verb names\n  PCRE2_AUTO_CALLOUT       Compile automatic callouts\n  PCRE2_CASELESS           Do caseless matching\n  PCRE2_DOLLAR_ENDONLY     $ not to match newline at end\n  PCRE2_DOTALL             . matches anything including NL\n  PCRE2_DUPNAMES           Allow duplicate names for subpatterns\n  PCRE2_ENDANCHORED        Pattern can match only at end of subject\n  PCRE2_EXTENDED           Ignore white space and # comments\n  PCRE2_FIRSTLINE          Force matching to be before newline\n  PCRE2_LITERAL            Pattern characters are all literal\n  PCRE2_MATCH_INVALID_UTF  Enable support for matching invalid UTF\n  PCRE2_MATCH_UNSET_BACKREF  Match unset backreferences\n  PCRE2_MULTILINE          ^ and $ match newlines within data\n  PCRE2_NEVER_BACKSLASH_C  Lock out the use of \\C in patterns\n  PCRE2_NEVER_UCP          Lock out PCRE2_UCP, e.g. via (*UCP)\n  PCRE2_NEVER_UTF          Lock out PCRE2_UTF, e.g. via (*UTF)\n  PCRE2_NO_AUTO_CAPTURE    Disable numbered capturing paren-\n                            theses (named ones available)\n  PCRE2_NO_AUTO_POSSESS    Disable auto-possessification\n  PCRE2_NO_DOTSTAR_ANCHOR  Disable automatic anchoring for .*\n  PCRE2_NO_START_OPTIMIZE  Disable match-time start optimizations\n  PCRE2_NO_UTF_CHECK       Do not check the pattern for UTF validity\n                             (only relevant if PCRE2_UTF is set)\n  PCRE2_UCP                Use Unicode properties for \\d, \\w, etc.\n  PCRE2_UNGREEDY           Invert greediness of quantifiers\n  PCRE2_USE_OFFSET_LIMIT   Enable offset limit for unanchored matching\n  PCRE2_UTF                Treat pattern and subjects as UTF strings\n</pre>\nPCRE2 must be built with Unicode support (the default) in order to use\nPCRE2_UTF, PCRE2_UCP and related options.\n</p>\n<p>\nAdditional options may be set in the compile context via the\n<a href=\"pcre2_set_compile_extra_options.html\"><b>pcre2_set_compile_extra_options</b></a>\nfunction.\n</p>\n<p>\nIf either of <i>errorcode</i> or <i>erroroffset</i> is NULL, the function returns\nNULL immediately. Otherwise, the yield of this function is a pointer to a\nprivate data structure that contains the compiled pattern, or NULL if an error\nwas detected. In the error case, a text error message can be obtained by\npassing the value returned via the <i>errorcode</i> argument to the\n<b>pcre2_get_error_message()</b> function. The offset (in code units) where the\nerror was encountered is returned via the <i>erroroffset</i> argument.\n</p>\n<p>\nIf there is no error, the value passed via <i>errorcode</i> returns the message\n\"no error\" if passed to <b>pcre2_get_error_message()</b>, and the value passed\nvia <i>erroroffset</i> is zero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API, with more detail on\neach option, in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage, and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_compile_context_copy.html",
    "content": "<html>\n<head>\n<title>pcre2_compile_context_copy specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_compile_context_copy man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_compile_context *pcre2_compile_context_copy(</b>\n<b>  pcre2_compile_context *<i>ccontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function makes a new copy of a compile context, using the memory\nallocation function that was used for the original context. The result is NULL\nif the memory cannot be obtained.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_compile_context_create.html",
    "content": "<html>\n<head>\n<title>pcre2_compile_context_create specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_compile_context_create man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_compile_context *pcre2_compile_context_create(</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function creates and initializes a new compile context. If its argument is\nNULL, <b>malloc()</b> is used to get the necessary memory; otherwise the memory\nallocation function within the general context is used. The result is NULL if\nthe memory could not be obtained.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_compile_context_free.html",
    "content": "<html>\n<head>\n<title>pcre2_compile_context_free specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_compile_context_free man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_compile_context_free(pcre2_compile_context *<i>ccontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function frees the memory occupied by a compile context, using the memory\nfreeing function from the general context with which it was created, or\n<b>free()</b> if that was not set. If the argument is NULL, the function returns\nimmediately without doing anything.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_config.html",
    "content": "<html>\n<head>\n<title>pcre2_config specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_config man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_config(uint32_t <i>what</i>, void *<i>where</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function makes it possible for a client program to find out which optional\nfeatures are available in the version of the PCRE2 library it is using. The\narguments are as follows:\n<pre>\n  <i>what</i>     A code specifying what information is required\n  <i>where</i>    Points to where to put the information\n</pre>\nIf <i>where</i> is NULL, the function returns the amount of memory needed for\nthe requested information. When the information is a string, the value is in\ncode units; for other types of data it is in bytes.\n</p>\n<p>\nIf <b>where</b> is not NULL, for PCRE2_CONFIG_JITTARGET,\nPCRE2_CONFIG_UNICODE_VERSION, and PCRE2_CONFIG_VERSION it must point to a\nbuffer that is large enough to hold the string. For all other codes it must\npoint to a uint32_t integer variable. The available codes are:\n<pre>\n  PCRE2_CONFIG_BSR                Indicates what \\R matches by default:\n                                    PCRE2_BSR_UNICODE\n                                    PCRE2_BSR_ANYCRLF\n  PCRE2_CONFIG_COMPILED_WIDTHS    Which of 8/16/32 support was compiled\n  PCRE2_CONFIG_DEPTHLIMIT         Default backtracking depth limit\n  PCRE2_CONFIG_EFFECTIVE_LINKSIZE How many bytes are used for link size\n  PCRE2_CONFIG_HEAPLIMIT          Default heap memory limit\n  PCRE2_CONFIG_JIT                Availability of just-in-time compiler support (1=yes 0=no)\n  PCRE2_CONFIG_JITTARGET          Information (a string) about the target architecture for the JIT compiler\n  PCRE2_CONFIG_LINKSIZE           Configured internal link size (2, 3, 4)\n  PCRE2_CONFIG_MATCHLIMIT         Default internal resource limit\n  PCRE2_CONFIG_NEVER_BACKSLASH_C  Whether or not \\C is disabled\n  PCRE2_CONFIG_NEWLINE            Code for the default newline sequence:\n                                    PCRE2_NEWLINE_CR\n                                    PCRE2_NEWLINE_LF\n                                    PCRE2_NEWLINE_CRLF\n                                    PCRE2_NEWLINE_ANY\n                                    PCRE2_NEWLINE_ANYCRLF\n                                    PCRE2_NEWLINE_NUL\n  PCRE2_CONFIG_PARENSLIMIT        Default parentheses nesting limit\n  PCRE2_CONFIG_RECURSIONLIMIT     Obsolete: use PCRE2_CONFIG_DEPTHLIMIT\n  PCRE2_CONFIG_STACKRECURSE       Obsolete: always returns 0\n  PCRE2_CONFIG_UNICODE            Availability of Unicode support (1=yes 0=no)\n  PCRE2_CONFIG_UNICODE_VERSION    The Unicode version (a string)\n  PCRE2_CONFIG_VERSION            The PCRE2 version (a string)\n</pre>\nThe function yields a non-negative value on success or the negative value\nPCRE2_ERROR_BADOPTION otherwise. This is also the result for the\nPCRE2_CONFIG_JITTARGET code if JIT support is not available. When a string is\nrequested, the function returns the number of code units used, including the\nterminating zero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_convert_context_copy.html",
    "content": "<html>\n<head>\n<title>pcre2_convert_context_copy specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_convert_context_copy man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_convert_context *pcre2_convert_context_copy(</b>\n<b>  pcre2_convert_context *<i>cvcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function is part of an experimental set of pattern conversion functions.\nIt makes a new copy of a convert context, using the memory allocation function\nthat was used for the original context. The result is NULL if the memory cannot\nbe obtained.\n</p>\n<p>\nThe pattern conversion functions are described in the\n<a href=\"pcre2convert.html\"><b>pcre2convert</b></a>\ndocumentation.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_convert_context_create.html",
    "content": "<html>\n<head>\n<title>pcre2_convert_context_create specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_convert_context_create man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_convert_context *pcre2_convert_context_create(</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function is part of an experimental set of pattern conversion functions.\nIt creates and initializes a new convert context. If its argument is\nNULL, <b>malloc()</b> is used to get the necessary memory; otherwise the memory\nallocation function within the general context is used. The result is NULL if\nthe memory could not be obtained.\n</p>\n<p>\nThe pattern conversion functions are described in the\n<a href=\"pcre2convert.html\"><b>pcre2convert</b></a>\ndocumentation.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_convert_context_free.html",
    "content": "<html>\n<head>\n<title>pcre2_convert_context_free specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_convert_context_free man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_convert_context_free(pcre2_convert_context *<i>cvcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function is part of an experimental set of pattern conversion functions.\nIt frees the memory occupied by a convert context, using the memory\nfreeing function from the general context with which it was created, or\n<b>free()</b> if that was not set. If the argument is NULL, the function returns\nimmediately without doing anything.\n</p>\n<p>\nThe pattern conversion functions are described in the\n<a href=\"pcre2convert.html\"><b>pcre2convert</b></a>\ndocumentation.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_converted_pattern_free.html",
    "content": "<html>\n<head>\n<title>pcre2_converted_pattern_free specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_converted_pattern_free man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_converted_pattern_free(PCRE2_UCHAR *<i>converted_pattern</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function is part of an experimental set of pattern conversion functions.\nIt frees the memory occupied by a converted pattern that was obtained by\ncalling <b>pcre2_pattern_convert()</b> with arguments that caused it to place\nthe converted pattern into newly obtained heap memory. If the argument is NULL,\nthe function returns immediately without doing anything.\n</p>\n<p>\nThe pattern conversion functions are described in the\n<a href=\"pcre2convert.html\"><b>pcre2convert</b></a>\ndocumentation.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_dfa_match.html",
    "content": "<html>\n<head>\n<title>pcre2_dfa_match specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_dfa_match man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_dfa_match(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>\n<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>\n<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>\n<b>  pcre2_match_context *<i>mcontext</i>,</b>\n<b>  int *<i>workspace</i>, PCRE2_SIZE <i>wscount</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function matches a compiled regular expression against a given subject\nstring, using an alternative matching algorithm that scans the subject string\njust once (except when processing lookaround assertions). This function is\n<i>not</i> Perl-compatible (the Perl-compatible matching function is\n<b>pcre2_match()</b>). The arguments for this function are:\n<pre>\n  <i>code</i>         Points to the compiled pattern\n  <i>subject</i>      Points to the subject string\n  <i>length</i>       Length of the subject string\n  <i>startoffset</i>  Offset in the subject at which to start matching\n  <i>options</i>      Option bits\n  <i>match_data</i>   Points to a match data block, for results\n  <i>mcontext</i>     Points to a match context, or is NULL\n  <i>workspace</i>    Points to a vector of ints used as working space\n  <i>wscount</i>      Number of elements in the vector\n</pre>\nThe size of output vector needed to contain all the results depends on the\nnumber of simultaneous matches, not on the number of parentheses in the\npattern. Using <b>pcre2_match_data_create_from_pattern()</b> to create the match\ndata block is therefore not advisable when using this function.\n</p>\n<p>\nA match context is needed only if you want to set up a callout function or\nspecify the heap limit or the match or the recursion depth limits. The\n<i>length</i> and <i>startoffset</i> values are code units, not characters. The\noptions are:\n<pre>\n  PCRE2_ANCHORED          Match only at the first position\n  PCRE2_COPY_MATCHED_SUBJECT\n                          On success, make a private subject copy\n  PCRE2_ENDANCHORED       Pattern can match only at end of subject\n  PCRE2_NOTBOL            Subject is not the beginning of a line\n  PCRE2_NOTEOL            Subject is not the end of a line\n  PCRE2_NOTEMPTY          An empty string is not a valid match\n  PCRE2_NOTEMPTY_ATSTART  An empty string at the start of the subject is not a valid match\n  PCRE2_NO_UTF_CHECK      Do not check the subject for UTF validity (only relevant if PCRE2_UTF\n                           was set at compile time)\n  PCRE2_PARTIAL_HARD      Return PCRE2_ERROR_PARTIAL for a partial match even if there is a full match\n  PCRE2_PARTIAL_SOFT      Return PCRE2_ERROR_PARTIAL for a partial match if no full matches are found\n  PCRE2_DFA_RESTART       Restart after a partial match\n  PCRE2_DFA_SHORTEST      Return only the shortest match\n</pre>\nThere are restrictions on what may appear in a pattern when using this matching\nfunction. Details are given in the\n<a href=\"pcre2matching.html\"><b>pcre2matching</b></a>\ndocumentation. For details of partial matching, see the\n<a href=\"pcre2partial.html\"><b>pcre2partial</b></a>\npage. There is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_general_context_copy.html",
    "content": "<html>\n<head>\n<title>pcre2_general_context_copy specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_general_context_copy man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_general_context *pcre2_general_context_copy(</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function makes a new copy of a general context, using the memory\nallocation functions in the context, if set, to get the necessary memory.\nOtherwise <b>malloc()</b> is used. The result is NULL if the memory cannot be\nobtained.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_general_context_create.html",
    "content": "<html>\n<head>\n<title>pcre2_general_context_create specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_general_context_create man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_general_context *pcre2_general_context_create(</b>\n<b>  void *(*<i>private_malloc</i>)(size_t, void *),</b>\n<b>  void (*<i>private_free</i>)(void *, void *), void *<i>memory_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function creates and initializes a general context. The arguments define\ncustom memory management functions and a data value that is passed to them when\nthey are called. The <b>private_malloc()</b> function is used to get memory for\nthe context. If either of the first two arguments is NULL, the system memory\nmanagement function is used. The result is NULL if no memory could be obtained.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_general_context_free.html",
    "content": "<html>\n<head>\n<title>pcre2_general_context_free specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_general_context_free man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_general_context_free(pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function frees the memory occupied by a general context, using the memory\nfreeing function within the context, if set.  If the argument is NULL, the\nfunction returns immediately without doing anything.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_get_error_message.html",
    "content": "<html>\n<head>\n<title>pcre2_get_error_message specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_get_error_message man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_get_error_message(int <i>errorcode</i>, PCRE2_UCHAR *<i>buffer</i>,</b>\n<b>  PCRE2_SIZE <i>bufflen</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function provides a textual error message for each PCRE2 error code.\nCompilation errors are positive numbers; UTF formatting errors and matching\nerrors are negative numbers. The arguments are:\n<pre>\n  <i>errorcode</i>   an error code (positive or negative)\n  <i>buffer</i>      where to put the message\n  <i>bufflen</i>     the length of the buffer (code units)\n</pre>\nThe function returns the length of the message in code units, excluding the\ntrailing zero, or the negative error code PCRE2_ERROR_NOMEMORY if the buffer is\ntoo small. In this case, the returned message is truncated (but still with a\ntrailing zero). If <i>errorcode</i> does not contain a recognized error code\nnumber, the negative value PCRE2_ERROR_BADDATA is returned.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_get_mark.html",
    "content": "<html>\n<head>\n<title>pcre2_get_mark specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_get_mark man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>PCRE2_SPTR pcre2_get_mark(pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nAfter a call of <b>pcre2_match()</b> that was passed the match block that is\nthis function's argument, this function returns a pointer to the last (*MARK),\n(*PRUNE), or (*THEN) name that was encountered during the matching process. The\nname is zero-terminated, and is within the compiled pattern. The length of the\nname is in the preceding code unit. If no name is available, NULL is returned.\n</p>\n<p>\nAfter a successful match, the name that is returned is the last one on the\nmatching path. After a failed match or a partial match, the last encountered\nname is returned.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_get_match_data_heapframes_size.html",
    "content": "<html>\n<head>\n<title>pcre2_get_match_data_heapframes_size specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_get_match_data_heapframes_size man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>PCRE2_SIZE pcre2_get_match_data_heapframes_size(</b>\n<b>  pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function returns the size, in bytes, of the heapframes data block that is\nowned by its argument.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_get_match_data_size.html",
    "content": "<html>\n<head>\n<title>pcre2_get_match_data_size specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_get_match_data_size man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>PCRE2_SIZE pcre2_get_match_data_size(pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function returns the size, in bytes, of the match data block that is its\nargument.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_get_ovector_count.html",
    "content": "<html>\n<head>\n<title>pcre2_get_ovector_count specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_get_ovector_count man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>uint32_t pcre2_get_ovector_count(pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function returns the number of pairs of offsets in the ovector that forms\npart of the given match data block.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_get_ovector_pointer.html",
    "content": "<html>\n<head>\n<title>pcre2_get_ovector_pointer specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_get_ovector_pointer man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>PCRE2_SIZE *pcre2_get_ovector_pointer(pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function returns a pointer to the vector of offsets that forms part of the\ngiven match data block. The number of pairs can be found by calling\n<b>pcre2_get_ovector_count()</b>.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_get_startchar.html",
    "content": "<html>\n<head>\n<title>pcre2_get_startchar specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_get_startchar man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>PCRE2_SIZE pcre2_get_startchar(pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nAfter a successful call of <b>pcre2_match()</b> that was passed the match block\nthat is this function's argument, this function returns the code unit offset of\nthe character at which the successful match started. For a non-partial match,\nthis can be different to the value of <i>ovector[0]</i> if the pattern contains\nthe \\K escape sequence. After a partial match, however, this value is always\nthe same as <i>ovector[0]</i> because \\K does not affect the result of a\npartial match.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_jit_compile.html",
    "content": "<html>\n<head>\n<title>pcre2_jit_compile specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_jit_compile man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_jit_compile(pcre2_code *<i>code</i>, uint32_t <i>options</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function requests JIT compilation, which, if the just-in-time compiler is\navailable, further processes a compiled pattern into machine code that executes\nmuch faster than the <b>pcre2_match()</b> interpretive matching function. Full\ndetails are given in the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\ndocumentation.\n</p>\n<p>\nThe availability of JIT support can be tested by calling\n<b>pcre2_compile_jit()</b> with a single option PCRE2_JIT_TEST_ALLOC (the\ncode argument is ignored, so a NULL value is accepted). Such a call\nreturns zero if JIT is available and has a working allocator. Otherwise\nit returns PCRE2_ERROR_NOMEMORY if JIT is available but cannot allocate\nexecutable memory, or PCRE2_ERROR_JIT_UNSUPPORTED if JIT support is not\ncompiled.\n</p>\n<p>\nOtherwise, the first argument must be a pointer that was returned by a\nsuccessful call to <b>pcre2_compile()</b>, and the second must contain one or\nmore of the following bits:\n<pre>\n  PCRE2_JIT_COMPLETE      compile code for full matching\n  PCRE2_JIT_PARTIAL_SOFT  compile code for soft partial matching\n  PCRE2_JIT_PARTIAL_HARD  compile code for hard partial matching\n</pre>\nThere is also an obsolete option called PCRE2_JIT_INVALID_UTF, which has been\nsuperseded by the <b>pcre2_compile()</b> option PCRE2_MATCH_INVALID_UTF. The old\noption is deprecated and may be removed in the future.\n</p>\n<p>\nThe yield of the function when called with any of the three options above is 0\nfor success, or a negative error code otherwise. In particular,\nPCRE2_ERROR_JIT_BADOPTION is returned if JIT is not supported or if an unknown\nbit is set in <i>options</i>. The function can also return PCRE2_ERROR_NOMEMORY\nif JIT is unable to allocate executable memory for the compiler, even if it was\nbecause of a system security restriction. In a few cases, the function may\nreturn with PCRE2_ERROR_JIT_UNSUPPORTED for unsupported features.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_jit_free_unused_memory.html",
    "content": "<html>\n<head>\n<title>pcre2_jit_free_unused_memory specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_jit_free_unused_memory man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_jit_free_unused_memory(pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function frees unused JIT executable memory. The argument is a general\ncontext, for custom memory management, or NULL for standard memory management.\nJIT memory allocation retains some memory in order to improve future JIT\ncompilation speed. In low memory conditions,\n<b>pcre2_jit_free_unused_memory()</b> can be used to cause this memory to be\nfreed.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_jit_match.html",
    "content": "<html>\n<head>\n<title>pcre2_jit_match specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_jit_match man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_jit_match(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>\n<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>\n<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>\n<b>  pcre2_match_context *<i>mcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function matches a compiled regular expression that has been successfully\nprocessed by the JIT compiler against a given subject string, using a matching\nalgorithm that is similar to Perl's. It is a \"fast path\" interface to JIT, and\nit bypasses some of the sanity checks that <b>pcre2_match()</b> applies.\n</p>\n<p>\nIn UTF mode, the subject string is not checked for UTF validity. Unless\nPCRE2_MATCH_INVALID_UTF was set when the pattern was compiled, passing an\ninvalid UTF string results in undefined behaviour. Your program may crash or\nloop or give wrong results. In the absence of PCRE2_MATCH_INVALID_UTF you\nshould only call <b>pcre2_jit_match()</b> in UTF mode if you are sure the\nsubject is valid.\n</p>\n<p>\nThe arguments for <b>pcre2_jit_match()</b> are exactly the same as for\n<a href=\"pcre2_match.html\"><b>pcre2_match()</b>,</a>\nexcept that the subject string must be specified with a length;\nPCRE2_ZERO_TERMINATED is not supported.\n</p>\n<p>\nThe supported options are PCRE2_NOTBOL, PCRE2_NOTEOL, PCRE2_NOTEMPTY,\nPCRE2_NOTEMPTY_ATSTART, PCRE2_PARTIAL_HARD, and PCRE2_PARTIAL_SOFT. Unsupported\noptions are ignored.\n</p>\n<p>\nThe return values are the same as for <b>pcre2_match()</b> plus\nPCRE2_ERROR_JIT_BADOPTION if a matching mode (partial or complete) is requested\nthat was not compiled. For details of partial matching, see the\n<a href=\"pcre2partial.html\"><b>pcre2partial</b></a>\npage.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the JIT API in the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_jit_stack_assign.html",
    "content": "<html>\n<head>\n<title>pcre2_jit_stack_assign specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_jit_stack_assign man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_jit_stack_assign(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  pcre2_jit_callback <i>callback_function</i>, void *<i>callback_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function provides control over the memory used by JIT as a run-time stack\nwhen <b>pcre2_match()</b> or <b>pcre2_jit_match()</b> is called with a pattern\nthat has been successfully processed by the JIT compiler. The information that\ndetermines which stack is used is put into a match context that is subsequently\npassed to a matching function. The arguments of this function are:\n<pre>\n  mcontext       a pointer to a match context\n  callback       a callback function\n  callback_data  a JIT stack or a value to be passed to the callback\n</pre>\n</p>\n<p>\nIf <i>mcontext</i> is NULL, the function returns immediately, without doing\nanything.\n</p>\n<p>\nIf <i>callback</i> is NULL and <i>callback_data</i> is NULL, an internal 32KiB\nblock on the machine stack is used.\n</p>\n<p>\nIf <i>callback</i> is NULL and <i>callback_data</i> is not NULL,\n<i>callback_data</i> must be a valid JIT stack, the result of calling\n<b>pcre2_jit_stack_create()</b>.\n</p>\n<p>\nIf <i>callback</i> not NULL, it is called with <i>callback_data</i> as an\nargument at the start of matching, in order to set up a JIT stack. If the\nresult is NULL, the internal 32KiB stack is used; otherwise the return value\nmust be a valid JIT stack, the result of calling\n<b>pcre2_jit_stack_create()</b>.\n</p>\n<p>\nYou may safely use the same JIT stack for multiple patterns, as long as they\nare all matched in the same thread. In a multithread application, each thread\nmust use its own JIT stack. For more details, see the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\npage.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_jit_stack_create.html",
    "content": "<html>\n<head>\n<title>pcre2_jit_stack_create specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_jit_stack_create man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_jit_stack *pcre2_jit_stack_create(size_t <i>startsize</i>,</b>\n<b>  size_t <i>maxsize</i>, pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function is used to create a stack for use by the code compiled by the JIT\ncompiler. The first two arguments are a starting size for the stack, and a\nmaximum size to which it is allowed to grow. The final argument is a general\ncontext, for memory allocation functions, or NULL for standard memory\nallocation. The result can be passed to the JIT run-time code by calling\n<b>pcre2_jit_stack_assign()</b> to associate the stack with a compiled pattern,\nwhich can then be processed by <b>pcre2_match()</b> or <b>pcre2_jit_match()</b>.\nA maximum stack size of 512KiB to 1MiB should be more than enough for any\npattern. If the stack couldn't be allocated or the values passed were not\nreasonable, NULL will be returned. For more details, see the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\npage.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_jit_stack_free.html",
    "content": "<html>\n<head>\n<title>pcre2_jit_stack_free specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_jit_stack_free man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_jit_stack_free(pcre2_jit_stack *<i>jit_stack</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function is used to free a JIT stack that was created by\n<b>pcre2_jit_stack_create()</b> when it is no longer needed. If the argument is\nNULL, the function returns immediately without doing anything. For more\ndetails, see the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\npage.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_maketables.html",
    "content": "<html>\n<head>\n<title>pcre2_maketables specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_maketables man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>const uint8_t *pcre2_maketables(pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function builds a set of character tables for character code points that\nare less than 256. These can be passed to <b>pcre2_compile()</b> in a compile\ncontext in order to override the internal, built-in tables (which were either\ndefaulted or made by <b>pcre2_maketables()</b> when PCRE2 was compiled). See the\n<a href=\"pcre2_set_character_tables.html\"><b>pcre2_set_character_tables()</b></a>\npage. You might want to do this if you are using a non-standard locale.\n</p>\n<p>\nIf the argument is NULL, <b>malloc()</b> is used to get memory for the tables.\nOtherwise it must point to a general context, which can supply pointers to a\ncustom memory manager. The function yields a pointer to the tables.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_maketables_free.html",
    "content": "<html>\n<head>\n<title>pcre2_maketables_free specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_maketables_free man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_maketables_free(pcre2_general_context *<i>gcontext</i>,</b>\n<b>  const uint8_t *<i>tables</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function discards a set of character tables that were created by a call\nto\n<a href=\"pcre2_maketables.html\"><b>pcre2_maketables()</b>.</a>\n</p>\n<p>\nThe <i>gcontext</i> parameter should match what was used in that call to\naccount for any custom allocators that might be in use; if it is NULL\nthe system <b>free()</b> is used.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_match.html",
    "content": "<html>\n<head>\n<title>pcre2_match specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_match man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_match(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>\n<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>\n<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>\n<b>  pcre2_match_context *<i>mcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function matches a compiled regular expression against a given subject\nstring, using a matching algorithm that is similar to Perl's. It returns\noffsets to what it has matched and to captured substrings via the\n<b>match_data</b> block, which can be processed by functions with names that\nstart with <b>pcre2_get_ovector_...()</b> or <b>pcre2_substring_...()</b>. The\nreturn from <b>pcre2_match()</b> is one more than the highest numbered capturing\npair that has been set (for example, 1 if there are no captures), zero if the\nvector of offsets is too small, or a negative error code for no match and other\nerrors. The function arguments are:\n<pre>\n  <i>code</i>         Points to the compiled pattern\n  <i>subject</i>      Points to the subject string\n  <i>length</i>       Length of the subject string\n  <i>startoffset</i>  Offset in the subject at which to start matching\n  <i>options</i>      Option bits\n  <i>match_data</i>   Points to a match data block, for results\n  <i>mcontext</i>     Points to a match context, or is NULL\n</pre>\nA match context is needed only if you want to:\n<pre>\n  Set up a callout function\n  Set a matching offset limit\n  Change the heap memory limit\n  Change the backtracking match limit\n  Change the backtracking depth limit\n  Set custom memory management specifically for the match\n</pre>\nThe <i>length</i> and <i>startoffset</i> values are code units, not characters.\nThe length may be given as PCRE2_ZERO_TERMINATED for a subject that is\nterminated by a binary zero code unit. The options are:\n<pre>\n  PCRE2_ANCHORED          Match only at the first position\n  PCRE2_COPY_MATCHED_SUBJECT\n                          On success, make a private subject copy\n  PCRE2_DISABLE_RECURSELOOP_CHECK\n                          Only useful in rare cases; use with care\n  PCRE2_ENDANCHORED       Pattern can match only at end of subject\n  PCRE2_NOTBOL            Subject string is not the beginning of a line\n  PCRE2_NOTEOL            Subject string is not the end of a line\n  PCRE2_NOTEMPTY          An empty string is not a valid match\n  PCRE2_NOTEMPTY_ATSTART  An empty string at the start of the subject is not a valid match\n  PCRE2_NO_JIT            Do not use JIT matching\n  PCRE2_NO_UTF_CHECK      Do not check the subject for UTF validity (only relevant if PCRE2_UTF\n                           was set at compile time)\n  PCRE2_PARTIAL_HARD      Return PCRE2_ERROR_PARTIAL for a partial match even if there is a full match\n  PCRE2_PARTIAL_SOFT      Return PCRE2_ERROR_PARTIAL for a partial match if no full matches are found\n</pre>\nFor details of partial matching, see the\n<a href=\"pcre2partial.html\"><b>pcre2partial</b></a>\npage. There is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_match_context_copy.html",
    "content": "<html>\n<head>\n<title>pcre2_match_context_copy specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_match_context_copy man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_match_context *pcre2_match_context_copy(</b>\n<b>  pcre2_match_context *<i>mcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function makes a new copy of a match context, using the memory\nallocation function that was used for the original context. The result is NULL\nif the memory cannot be obtained.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_match_context_create.html",
    "content": "<html>\n<head>\n<title>pcre2_match_context_create specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_match_context_create man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_match_context *pcre2_match_context_create(</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function creates and initializes a new match context. If its argument is\nNULL, <b>malloc()</b> is used to get the necessary memory; otherwise the memory\nallocation function within the general context is used. The result is NULL if\nthe memory could not be obtained.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_match_context_free.html",
    "content": "<html>\n<head>\n<title>pcre2_match_context_free specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_match_context_free man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_match_context_free(pcre2_match_context *<i>mcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function frees the memory occupied by a match context, using the memory\nfreeing function from the general context with which it was created, or\n<b>free()</b> if that was not set. If the argument is NULL, the function returns\nimmediately without doing anything.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_match_data_create.html",
    "content": "<html>\n<head>\n<title>pcre2_match_data_create specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_match_data_create man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_match_data *pcre2_match_data_create(uint32_t <i>ovecsize</i>,</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function creates a new match data block, which is used for holding the\nresult of a match. The first argument specifies the number of pairs of offsets\nthat are required. These form the \"output vector\" (ovector) within the match\ndata block, and are used to identify the matched string and any captured\nsubstrings when matching with <b>pcre2_match()</b>, or a number of different\nmatches at the same point when used with <b>pcre2_dfa_match()</b>. There is\nalways one pair of offsets; if <b>ovecsize</b> is zero, it is treated as one.\n</p>\n<p>\nThe second argument points to a general context, for custom memory management,\nor is NULL for system memory management. The result of the function is NULL if\nthe memory for the block could not be obtained.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_match_data_create_from_pattern.html",
    "content": "<html>\n<head>\n<title>pcre2_match_data_create_from_pattern specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_match_data_create_from_pattern man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>pcre2_match_data *pcre2_match_data_create_from_pattern(</b>\n<b>  const pcre2_code *<i>code</i>, pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function creates a new match data block for holding the result of a match.\nIf the first argument is NULL, this function returns NULL, otherwise the first\nargument points to a compiled pattern. The number of capturing parentheses\nwithin the pattern is used to compute the number of pairs of offsets that are\nrequired in the match data block. These form the \"output vector\" (ovector)\nwithin the match data block, and are used to identify the matched string and\nany captured substrings when matching with <b>pcre2_match()</b>. If you are\nusing <b>pcre2_dfa_match()</b>, which uses the output vector in a different way,\nyou should use <b>pcre2_match_data_create()</b> instead of this function.\n</p>\n<p>\nThe second argument points to a general context, for custom memory management,\nor is NULL to use the same memory allocator that was used for the compiled\npattern. The result of the function is NULL if the memory for the block could\nnot be obtained or if NULL was provided as the first argument.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_match_data_free.html",
    "content": "<html>\n<head>\n<title>pcre2_match_data_free specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_match_data_free man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_match_data_free(pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nIf <i>match_data</i> is NULL, this function does nothing. Otherwise,\n<i>match_data</i> must point to a match data block, which this function frees,\nusing the memory freeing function from the general context or compiled pattern\nwith which it was created, or <b>free()</b> if that was not set. If the match\ndata block was previously passed to <b>pcre2_match()</b>, it will have an\nattached heapframe vector; this is also freed.\n</p>\n<p>\nIf the PCRE2_COPY_MATCHED_SUBJECT was used for a successful match using this\nmatch data block, the copy of the subject that was referenced within the block\nis also freed.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_next_match.html",
    "content": "<html>\n<head>\n<title>pcre2_next_match specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_next_match man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_next_match(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_SIZE *<i>pstart_offset</i>, uint32_t *<i>poptions</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function can be called after one of the match functions\n(<b>pcre2_match()</b>, <b>pcre2_dfa_match()</b>, or <b>pcre2_jit_match()</b>), and\nmust be provided with the same <i>match_data</i> parameter. It outputs the\nappropriate parameters for searching for the next match in the same subject\nstring, and is suitable for applications providing \"global\" matching behaviour\n(for example, replacing all matches in the subject, or splitting the subject on\nall matches, or simply counting the number of matches).\n</p>\n<p>\nIt returns 0 (\"false\") if there is no need to make any further match attempts,\nor 1 (\"true\") if another match should be attempted.\n</p>\n<p>\nThe *<i>pstart_offset</i> and *<i>poptions</i> are set if the function returns 1.\nThe *<i>pstart_offset</i> should be passed to the next match attempt directly,\nand the *<i>poptions</i> should be passed to the next match attempt by combining\nwith the application's match options using OR.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_pattern_convert.html",
    "content": "<html>\n<head>\n<title>pcre2_pattern_convert specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_pattern_convert man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_pattern_convert(PCRE2_SPTR <i>pattern</i>, PCRE2_SIZE <i>length</i>,</b>\n<b>  uint32_t <i>options</i>, PCRE2_UCHAR **<i>buffer</i>,</b>\n<b>  PCRE2_SIZE *<i>blength</i>, pcre2_convert_context *<i>cvcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function is part of an experimental set of pattern conversion functions.\nIt converts a foreign pattern (for example, a glob) into a PCRE2 regular\nexpression pattern. Its arguments are:\n<pre>\n  <i>pattern</i>     The foreign pattern\n  <i>length</i>      The length of the input pattern or PCRE2_ZERO_TERMINATED\n  <i>options</i>     Option bits\n  <i>buffer</i>      Pointer to pointer to output buffer, or NULL\n  <i>blength</i>     Pointer to output length field\n  <i>cvcontext</i>   Pointer to a convert context or NULL\n</pre>\nThe length of the converted pattern (excluding the terminating zero) is\nreturned via <i>blength</i>. If <i>buffer</i> is NULL, the function just returns\nthe output length. If <i>buffer</i> points to a NULL pointer, heap memory is\nobtained for the converted pattern, using the allocator in the context if\npresent (or else <b>malloc()</b>), and the field pointed to by <i>buffer</i> is\nupdated. If <i>buffer</i> points to a non-NULL field, that must point to a\nbuffer whose size is in the variable pointed to by <i>blength</i>. This value is\nupdated.\n</p>\n<p>\nThe option bits are:\n<pre>\n  PCRE2_CONVERT_UTF                     Input is UTF\n  PCRE2_CONVERT_NO_UTF_CHECK            Do not check UTF validity\n  PCRE2_CONVERT_POSIX_BASIC             Convert POSIX basic pattern\n  PCRE2_CONVERT_POSIX_EXTENDED          Convert POSIX extended pattern\n  PCRE2_CONVERT_GLOB                    ) Convert\n  PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR  )   various types\n  PCRE2_CONVERT_GLOB_NO_STARSTAR        )     of glob\n</pre>\nThe return value from <b>pcre2_pattern_convert()</b> is zero on success or a\nnon-zero PCRE2 error code.\n</p>\n<p>\nThe pattern conversion functions are described in the\n<a href=\"pcre2convert.html\"><b>pcre2convert</b></a>\ndocumentation.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_pattern_info.html",
    "content": "<html>\n<head>\n<title>pcre2_pattern_info specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_pattern_info man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_pattern_info(const pcre2_code *<i>code</i>, uint32_t <i>what</i>,</b>\n<b>   void *<i>where</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function returns information about a compiled pattern. Its arguments are:\n<pre>\n  <i>code</i>     Pointer to a compiled regular expression pattern\n  <i>what</i>     What information is required\n  <i>where</i>    Where to put the information\n</pre>\nThe recognized values for the <i>what</i> argument, and the information they\nrequest are as follows:\n<pre>\n  PCRE2_INFO_ALLOPTIONS      Final options after compiling\n  PCRE2_INFO_ARGOPTIONS      Options passed to <b>pcre2_compile()</b>\n  PCRE2_INFO_BACKREFMAX      Number of highest backreference\n  PCRE2_INFO_BSR             What \\R matches:\n                               PCRE2_BSR_UNICODE: Unicode line endings\n                               PCRE2_BSR_ANYCRLF: CR, LF, or CRLF only\n  PCRE2_INFO_CAPTURECOUNT    Number of capturing subpatterns\n  PCRE2_INFO_DEPTHLIMIT      Backtracking depth limit if set, otherwise PCRE2_ERROR_UNSET\n  PCRE2_INFO_EXTRAOPTIONS    Extra options that were passed in the\n                               compile context\n  PCRE2_INFO_FIRSTBITMAP     Bitmap of first code units, or NULL\n  PCRE2_INFO_FIRSTCODETYPE   Type of start-of-match information\n                               0 nothing set\n                               1 first code unit is set\n                               2 start of string or after newline\n  PCRE2_INFO_FIRSTCODEUNIT   First code unit when type is 1\n  PCRE2_INFO_FRAMESIZE       Size of backtracking frame\n  PCRE2_INFO_HASBACKSLASHC   Return 1 if pattern contains \\C\n  PCRE2_INFO_HASCRORLF       Return 1 if explicit CR or LF matches exist in the pattern\n  PCRE2_INFO_HEAPLIMIT       Heap memory limit if set, otherwise PCRE2_ERROR_UNSET\n  PCRE2_INFO_JCHANGED        Return 1 if (?J) or (?-J) was used\n  PCRE2_INFO_JITSIZE         Size of JIT compiled code, or 0\n  PCRE2_INFO_LASTCODETYPE    Type of must-be-present information\n                               0 nothing set\n                               1 code unit is set\n  PCRE2_INFO_LASTCODEUNIT    Last code unit when type is 1\n  PCRE2_INFO_MATCHEMPTY      1 if the pattern can match an empty string, 0 otherwise\n  PCRE2_INFO_MATCHLIMIT      Match limit if set, otherwise PCRE2_ERROR_UNSET\n  PCRE2_INFO_MAXLOOKBEHIND   Length (in characters) of the longest lookbehind assertion\n  PCRE2_INFO_MINLENGTH       Lower bound length of matching strings\n  PCRE2_INFO_NAMECOUNT       Number of named subpatterns\n  PCRE2_INFO_NAMEENTRYSIZE   Size of name table entries\n  PCRE2_INFO_NAMETABLE       Pointer to name table\n  PCRE2_CONFIG_NEWLINE       Code for the newline sequence:\n                               PCRE2_NEWLINE_CR\n                               PCRE2_NEWLINE_LF\n                               PCRE2_NEWLINE_CRLF\n                               PCRE2_NEWLINE_ANY\n                               PCRE2_NEWLINE_ANYCRLF\n                               PCRE2_NEWLINE_NUL\n  PCRE2_INFO_RECURSIONLIMIT  Obsolete synonym for PCRE2_INFO_DEPTHLIMIT\n  PCRE2_INFO_SIZE            Size of compiled pattern\n</pre>\nIf <i>where</i> is NULL, the function returns the amount of memory needed for\nthe requested information, in bytes. Otherwise, the <i>where</i> argument must\npoint to an unsigned 32-bit integer (uint32_t variable), except for the\nfollowing <i>what</i> values, when it must point to a variable of the type\nshown:\n<pre>\n  PCRE2_INFO_FIRSTBITMAP     const uint8_t *\n  PCRE2_INFO_JITSIZE         size_t\n  PCRE2_INFO_NAMETABLE       PCRE2_SPTR\n  PCRE2_INFO_SIZE            size_t\n</pre>\nThe yield of the function is zero on success or:\n<pre>\n  PCRE2_ERROR_NULL           the argument <i>code</i> is NULL\n  PCRE2_ERROR_BADMAGIC       the \"magic number\" was not found\n  PCRE2_ERROR_BADOPTION      the value of <i>what</i> is invalid\n  PCRE2_ERROR_BADMODE        the pattern was compiled in the wrong mode\n  PCRE2_ERROR_UNSET          the requested information is not set\n</pre>\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_serialize_decode.html",
    "content": "<html>\n<head>\n<title>pcre2_serialize_decode specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_serialize_decode man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int32_t pcre2_serialize_decode(pcre2_code **<i>codes</i>,</b>\n<b>  int32_t <i>number_of_codes</i>, const uint8_t *<i>bytes</i>,</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function decodes a serialized set of compiled patterns back into a list of\nindividual patterns. This is possible only on a host that is running the same\nversion of PCRE2, with the same code unit width, and the host must also have\nthe same endianness, pointer width and PCRE2_SIZE type. The arguments for\n<b>pcre2_serialize_decode()</b> are:\n<pre>\n  <i>codes</i>            pointer to a vector in which to build the list\n  <i>number_of_codes</i>  number of slots in the vector\n  <i>bytes</i>            the serialized byte stream\n  <i>gcontext</i>         pointer to a general context or NULL\n</pre>\nThe <i>bytes</i> argument must point to a block of data that was originally\ncreated by <b>pcre2_serialize_encode()</b>, though it may have been saved on\ndisc or elsewhere in the meantime. If there are more codes in the serialized\ndata than slots in the list, only those compiled patterns that will fit are\ndecoded. The yield of the function is the number of decoded patterns, or one of\nthe following negative error codes:\n<pre>\n  PCRE2_ERROR_BADDATA   <i>number_of_codes</i> is zero or less\n  PCRE2_ERROR_BADMAGIC  mismatch of id bytes in <i>bytes</i>\n  PCRE2_ERROR_BADMODE   mismatch of variable unit size or PCRE version\n  PCRE2_ERROR_NOMEMORY  memory allocation failed\n  PCRE2_ERROR_NULL      <i>codes</i> or <i>bytes</i> is NULL\n</pre>\nPCRE2_ERROR_BADMAGIC may mean that the data is corrupt, or that it was compiled\non a system with different endianness.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the serialization functions in the\n<a href=\"pcre2serialize.html\"><b>pcre2serialize</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_serialize_encode.html",
    "content": "<html>\n<head>\n<title>pcre2_serialize_encode specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_serialize_encode man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int32_t pcre2_serialize_encode(const pcre2_code **<i>codes</i>,</b>\n<b>  int32_t <i>number_of_codes</i>, uint8_t **<i>serialized_bytes</i>,</b>\n<b>  PCRE2_SIZE *<i>serialized_size</i>, pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function encodes a list of compiled patterns into a byte stream that can\nbe saved on disc or elsewhere. Note that this is not an abstract format like\nJava or .NET. Conversion of the byte stream back into usable compiled patterns\ncan only happen on a host that is running the same version of PCRE2, with the\nsame code unit width, and the host must also have the same endianness, pointer\nwidth and PCRE2_SIZE type. The arguments for <b>pcre2_serialize_encode()</b>\nare:\n<pre>\n  <i>codes</i>             pointer to a vector containing the list\n  <i>number_of_codes</i>   number of slots in the vector\n  <i>serialized_bytes</i>  set to point to the serialized byte stream\n  <i>serialized_size</i>   set to the number of bytes in the byte stream\n  <i>gcontext</i>          pointer to a general context or NULL\n</pre>\nThe context argument is used to obtain memory for the byte stream. When the\nserialized data is no longer needed, it must be freed by calling\n<b>pcre2_serialize_free()</b>. The yield of the function is the number of\nserialized patterns, or one of the following negative error codes:\n<pre>\n  PCRE2_ERROR_BADDATA      <i>number_of_codes</i> is zero or less\n  PCRE2_ERROR_BADMAGIC     mismatch of id bytes in one of the patterns\n  PCRE2_ERROR_MEMORY       memory allocation failed\n  PCRE2_ERROR_MIXEDTABLES  the patterns do not all use the same tables\n  PCRE2_ERROR_NULL         an argument other than <i>gcontext</i> is NULL\n</pre>\nPCRE2_ERROR_BADMAGIC means either that a pattern's code has been corrupted, or\nthat a slot in the vector does not point to a compiled pattern.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the serialization functions in the\n<a href=\"pcre2serialize.html\"><b>pcre2serialize</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_serialize_free.html",
    "content": "<html>\n<head>\n<title>pcre2_serialize_free specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_serialize_free man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_serialize_free(uint8_t *<i>bytes</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function frees the memory that was obtained by\n<b>pcre2_serialize_encode()</b> to hold a serialized byte stream. The argument\nmust point to such a byte stream or be NULL, in which case the function returns\nwithout doing anything.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the serialization functions in the\n<a href=\"pcre2serialize.html\"><b>pcre2serialize</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_serialize_get_number_of_codes.html",
    "content": "<html>\n<head>\n<title>pcre2_serialize_get_number_of_codes specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_serialize_get_number_of_codes man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int32_t pcre2_serialize_get_number_of_codes(const uint8_t *<i>bytes</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThe <i>bytes</i> argument must point to a serialized byte stream that was\noriginally created by <b>pcre2_serialize_encode()</b> (though it may have been\nsaved on disc or elsewhere in the meantime). The function returns the number of\nserialized patterns in the byte stream, or one of the following negative error\ncodes:\n<pre>\n  PCRE2_ERROR_BADMAGIC  mismatch of id bytes in <i>bytes</i>\n  PCRE2_ERROR_BADMODE   mismatch of variable unit size or PCRE version\n  PCRE2_ERROR_NULL      the argument is NULL\n</pre>\nPCRE2_ERROR_BADMAGIC may mean that the data is corrupt, or that it was compiled\non a system with different endianness.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the serialization functions in the\n<a href=\"pcre2serialize.html\"><b>pcre2serialize</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_bsr.html",
    "content": "<html>\n<head>\n<title>pcre2_set_bsr specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_bsr man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_bsr(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets the convention for processing \\R within a compile context.\nThe second argument must be one of PCRE2_BSR_ANYCRLF or PCRE2_BSR_UNICODE. The\nresult is zero for success or PCRE2_ERROR_BADDATA if the second argument is\ninvalid.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_callout.html",
    "content": "<html>\n<head>\n<title>pcre2_set_callout specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_callout man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_callout(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  int (*<i>callout_function</i>)(pcre2_callout_block *),</b>\n<b>  void *<i>callout_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets the callout fields in a match context (the first argument).\nThe second argument specifies a callout function, and the third argument is an\nopaque data item that is passed to it. The result of this function is always\nzero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_character_tables.html",
    "content": "<html>\n<head>\n<title>pcre2_set_character_tables specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_character_tables man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_character_tables(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  const uint8_t *<i>tables</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets a pointer to custom character tables within a compile\ncontext. The second argument must point to a set of PCRE2 character tables or\nbe NULL to request the default tables. The result is always zero. Character\ntables can be created by calling <b>pcre2_maketables()</b> or by running the\n<b>pcre2_dftables</b> maintenance command in binary mode (see the\n<a href=\"pcre2build.html\"><b>pcre2build</b></a>\ndocumentation).\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_compile_extra_options.html",
    "content": "<html>\n<head>\n<title>pcre2_set_compile_extra_options specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_compile_extra_options man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_compile_extra_options(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>extra_options</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets additional option bits for <b>pcre2_compile()</b> that are\nhoused in a compile context. It completely replaces all the bits. The extra\noptions are:\n<pre>\n  PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK     Allow \\K in lookarounds\n  PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES  Allow \\x{d800} to \\x{dfff} in UTF-8 and UTF-32 modes\n  PCRE2_EXTRA_ALT_BSUX                 Extended alternate \\u, \\U, and \\x handling\n  PCRE2_EXTRA_ASCII_BSD                \\d remains ASCII in UCP mode\n  PCRE2_EXTRA_ASCII_BSS                \\s remains ASCII in UCP mode\n  PCRE2_EXTRA_ASCII_BSW                \\w remains ASCII in UCP mode\n  PCRE2_EXTRA_ASCII_DIGIT              [:digit:] and [:xdigit:] POSIX classes remain ASCII in UCP mode\n  PCRE2_EXTRA_ASCII_POSIX              POSIX classes remain ASCII in UCP mode\n  PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL    Treat all invalid escapes as a literal following character\n  PCRE2_EXTRA_CASELESS_RESTRICT        Disable mixed ASCII/non-ASCII case folding\n  PCRE2_EXTRA_ESCAPED_CR_IS_LF         Interpret \\r as \\n\n  PCRE2_EXTRA_MATCH_LINE               Pattern matches whole lines\n  PCRE2_EXTRA_MATCH_WORD               Pattern matches \"words\"\n  PCRE2_EXTRA_NEVER_CALLOUT            Disallow callouts in pattern\n  PCRE2_EXTRA_NO_BS0                   Disallow \\0 (but not \\00 or \\000)\n  PCRE2_EXTRA_PYTHON_OCTAL             Use Python rules for octal\n  PCRE2_EXTRA_TURKISH_CASING           Use Turkish I case folding\n</pre>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_compile_recursion_guard.html",
    "content": "<html>\n<head>\n<title>pcre2_set_compile_recursion_guard specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_compile_recursion_guard man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_compile_recursion_guard(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  int (*<i>guard_function</i>)(uint32_t, void *), void *<i>user_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function defines, within a compile context, a function that is called\nwhenever <b>pcre2_compile()</b> starts to compile a parenthesized part of a\npattern. The first argument to the function gives the current depth of\nparenthesis nesting, and the second is user data that is supplied when the\nfunction is set up. The callout function should return zero if all is well, or\nnon-zero to force an error. This feature is provided so that applications can\ncheck the available system stack space, in order to avoid running out. The\nresult of <b>pcre2_set_compile_recursion_guard()</b> is always zero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_depth_limit.html",
    "content": "<html>\n<head>\n<title>pcre2_set_depth_limit specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_depth_limit man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_depth_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets the backtracking depth limit field in a match context. The\nresult is always zero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_glob_escape.html",
    "content": "<html>\n<head>\n<title>pcre2_set_glob_escape specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_glob_escape man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_glob_escape(pcre2_convert_context *<i>cvcontext</i>,</b>\n<b>  uint32_t <i>escape_char</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function is part of an experimental set of pattern conversion functions.\nIt sets the escape character that is used when converting globs. The second\nargument must either be zero (meaning there is no escape character) or a\npunctuation character whose code point is less than 256. The default is grave\naccent if running under Windows, otherwise backslash. The result of the\nfunction is zero for success or PCRE2_ERROR_BADDATA if the second argument is\ninvalid.\n</p>\n<p>\nThe pattern conversion functions are described in the\n<a href=\"pcre2convert.html\"><b>pcre2convert</b></a>\ndocumentation.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_glob_separator.html",
    "content": "<html>\n<head>\n<title>pcre2_set_glob_separator specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_glob_separator man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_glob_separator(pcre2_convert_context *<i>cvcontext</i>,</b>\n<b>  uint32_t <i>separator_char</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function is part of an experimental set of pattern conversion functions.\nIt sets the component separator character that is used when converting globs.\nThe second argument must be one of the characters forward slash, backslash, or\ndot. The default is backslash when running under Windows, otherwise forward\nslash. The result of the function is zero for success or PCRE2_ERROR_BADDATA if\nthe second argument is invalid.\n</p>\n<p>\nThe pattern conversion functions are described in the\n<a href=\"pcre2convert.html\"><b>pcre2convert</b></a>\ndocumentation.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_heap_limit.html",
    "content": "<html>\n<head>\n<title>pcre2_set_heap_limit specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_heap_limit man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_heap_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets the backtracking heap limit field in a match context. The\nresult is always zero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_match_limit.html",
    "content": "<html>\n<head>\n<title>pcre2_set_match_limit specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_match_limit man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_match_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets the match limit field in a match context. The result is\nalways zero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_max_pattern_compiled_length.html",
    "content": "<html>\n<head>\n<title>pcre2_set_max_pattern_compiled_length specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_max_pattern_compiled_length man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_max_pattern_compiled_length(</b>\n<b>  pcre2_compile_context *<i>ccontext</i>, PCRE2_SIZE <i>value</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets, in a compile context, the maximum size (in bytes) for the\nmemory needed to hold the compiled version of a pattern that is using this\ncontext. The result is always zero. If a pattern that is passed to\n<b>pcre2_compile()</b> referencing this context needs more memory, an error is\ngenerated. The default is the largest number that a PCRE2_SIZE variable can\nhold, which is effectively unlimited.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_max_pattern_length.html",
    "content": "<html>\n<head>\n<title>pcre2_set_max_pattern_length specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_max_pattern_length man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_max_pattern_length(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  PCRE2_SIZE <i>value</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets, in a compile context, the maximum text length (in code\nunits) of the pattern that can be compiled. The result is always zero. If a\nlonger pattern is passed to <b>pcre2_compile()</b> there is an immediate error\nreturn. The default is effectively unlimited, being the largest value a\nPCRE2_SIZE variable can hold.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_max_varlookbehind.html",
    "content": "<html>\n<head>\n<title>pcre2_set_max_varlookbehind specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_max_varlookbehind man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_max_varlookbehind(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis sets a maximum length for the number of characters matched by a\nvariable-length lookbehind assertion. The default is set when PCRE2 is built,\nwith the ultimate default being 255, the same as Perl. Lookbehind assertions\nwithout a bounding length are not supported. The result is always zero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_newline.html",
    "content": "<html>\n<head>\n<title>pcre2_set_newline specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_newline man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_newline(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets the newline convention within a compile context. This\nspecifies which character(s) are recognized as newlines when compiling and\nmatching patterns. The second argument must be one of:\n<pre>\n  PCRE2_NEWLINE_CR        Carriage return only\n  PCRE2_NEWLINE_LF        Linefeed only\n  PCRE2_NEWLINE_CRLF      CR followed by LF only\n  PCRE2_NEWLINE_ANYCRLF   Any of the above\n  PCRE2_NEWLINE_ANY       Any Unicode newline sequence\n  PCRE2_NEWLINE_NUL       The NUL character (binary zero)\n</pre>\nThe result is zero for success or PCRE2_ERROR_BADDATA if the second argument is\ninvalid.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_offset_limit.html",
    "content": "<html>\n<head>\n<title>pcre2_set_offset_limit specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_offset_limit man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_offset_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  PCRE2_SIZE <i>value</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets the offset limit field in a match context. The result is\nalways zero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_optimize.html",
    "content": "<html>\n<head>\n<title>pcre2_set_optimize specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_optimize man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_optimize(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>directive</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function controls which performance optimizations will be applied\nby <b>pcre2_compile()</b>. It can be called multiple times with the same compile\ncontext; the effects are cumulative, with the effects of later calls taking\nprecedence over earlier ones.\n</p>\n<p>\nThe result is zero for success, PCRE2_ERROR_NULL if <i>ccontext</i> is NULL,\nor PCRE2_ERROR_BADOPTION if <i>directive</i> is unknown. The latter could be\nuseful to detect if a certain optimization is available.\n</p>\n<p>\nThe list of possible values for the <i>directive</i> parameter are:\n<pre>\n  PCRE2_OPTIMIZATION_FULL   Enable all optimizations (default)\n  PCRE2_OPTIMIZATION_NONE   Disable all optimizations\n  PCRE2_AUTO_POSSESS        Enable auto-possessification\n  PCRE2_AUTO_POSSESS_OFF    Disable auto-possessification\n  PCRE2_DOTSTAR_ANCHOR      Enable implicit dotstar anchoring\n  PCRE2_DOTSTAR_ANCHOR_OFF  Disable implicit dotstar anchoring\n  PCRE2_START_OPTIMIZE      Enable start-up optimizations at match time\n  PCRE2_START_OPTIMIZE_OFF  Disable start-up optimizations at match time\n</pre>\nThere is a complete description of the PCRE2 native API, including detailed\ndescriptions <i>directive</i> parameter values in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_parens_nest_limit.html",
    "content": "<html>\n<head>\n<title>pcre2_set_parens_nest_limit specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_parens_nest_limit man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_parens_nest_limit(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets, in a compile context, the maximum depth of nested\nparentheses in a pattern. The result is always zero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_recursion_limit.html",
    "content": "<html>\n<head>\n<title>pcre2_set_recursion_limit specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_recursion_limit man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_recursion_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function is obsolete and should not be used in new code. Use\n<b>pcre2_set_depth_limit()</b> instead.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_recursion_memory_management.html",
    "content": "<html>\n<head>\n<title>pcre2_set_recursion_memory_management specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_recursion_memory_management man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_recursion_memory_management(</b>\n<b>  pcre2_match_context *<i>mcontext</i>,</b>\n<b>  void *(*<i>private_malloc</i>)(size_t, void *),</b>\n<b>  void (*<i>private_free</i>)(void *, void *), void *<i>memory_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nFrom release 10.30 onwards, this function is obsolete and does nothing. The\nresult is always zero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_substitute_callout.html",
    "content": "<html>\n<head>\n<title>pcre2_set_substitute_callout specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_substitute_callout man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_substitute_callout(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  int (*<i>callout_function</i>)(pcre2_substitute_callout_block *, void *),</b>\n<b>  void *<i>callout_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets the substitute callout fields in a match context (the first\nargument). The second argument specifies a callout function, and the third\nargument is an opaque data item that is passed to it. The result of this\nfunction is always zero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_set_substitute_case_callout.html",
    "content": "<html>\n<head>\n<title>pcre2_set_substitute_case_callout specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_set_substitute_case_callout man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_set_substitute_case_callout(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  PCRE2_SIZE (*<i>callout_function</i>)(PCRE2_SPTR, PCRE2_SIZE,</b>\n<b>                                 PCRE2_UCHAR *, PCRE2_SIZE,</b>\n<b>                                 int, void *),</b>\n<b>  void *<i>callout_data</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function sets the substitute case callout fields in a match context (the\nfirst argument). The second argument specifies a callout function, and the third\nargument is an opaque data item that is passed to it. The result of this\nfunction is always zero.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_substitute.html",
    "content": "<html>\n<head>\n<title>pcre2_substitute specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_substitute man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_substitute(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>\n<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>\n<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>\n<b>  pcre2_match_context *<i>mcontext</i>, PCRE2_SPTR <i>replacement</i>,</b>\n<b>  PCRE2_SIZE <i>rlength</i>, PCRE2_UCHAR *<i>outputbuffer</i>,</b>\n<b>  PCRE2_SIZE *<i>outlengthptr</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function matches a compiled regular expression against a given subject\nstring, using a matching algorithm that is similar to Perl's. It then makes a\ncopy of the subject, substituting a replacement string for what was matched.\nIts arguments are:\n<pre>\n  <i>code</i>          Points to the compiled pattern\n  <i>subject</i>       Points to the subject string\n  <i>length</i>        Length of the subject string\n  <i>startoffset</i>   Offset in the subject at which to start matching\n  <i>options</i>       Option bits\n  <i>match_data</i>    Points to a match data block, or is NULL\n  <i>mcontext</i>      Points to a match context, or is NULL\n  <i>replacement</i>   Points to the replacement string\n  <i>rlength</i>       Length of the replacement string\n  <i>outputbuffer</i>  Points to the output buffer\n  <i>outlengthptr</i>  Points to the length of the output buffer\n</pre>\nA match data block is needed only if you want to inspect the data from the\nfinal match that is returned in that block or if PCRE2_SUBSTITUTE_MATCHED is\nset. A match context is needed only if you want to:\n<pre>\n  Set up a callout function\n  Set a matching offset limit\n  Change the backtracking match limit\n  Change the backtracking depth limit\n  Set custom memory management in the match context\n</pre>\nThe <i>length</i>, <i>startoffset</i> and <i>rlength</i> values are code units,\nnot characters, as is the contents of the variable pointed at by\n<i>outlengthptr</i>. This variable must contain the length of the output buffer\nwhen the function is called. If the function is successful, the value is\nchanged to the length of the new string, excluding the trailing zero that is\nautomatically added.\n</p>\n<p>\nThe subject and replacement lengths can be given as PCRE2_ZERO_TERMINATED for\nzero-terminated strings. The options are:\n<pre>\n  PCRE2_ANCHORED                     Match only at the first position\n  PCRE2_ENDANCHORED                  Match only at end of subject\n  PCRE2_NOTBOL                       Subject is not the beginning of a line\n  PCRE2_NOTEOL                       Subject is not the end of a line\n  PCRE2_NOTEMPTY                     An empty string is not a valid match\n  PCRE2_NOTEMPTY_ATSTART             An empty string at the start of the subject is not a valid match\n  PCRE2_NO_JIT                       Do not use JIT matching\n  PCRE2_NO_UTF_CHECK                 Do not check for UTF validity in the subject or replacement\n                                      (only relevant if PCRE2_UTF was set at compile time)\n  PCRE2_SUBSTITUTE_EXTENDED          Do extended replacement processing\n  PCRE2_SUBSTITUTE_GLOBAL            Replace all occurrences in the subject\n  PCRE2_SUBSTITUTE_LITERAL           The replacement string is literal\n  PCRE2_SUBSTITUTE_MATCHED           Use pre-existing match data for first match\n  PCRE2_SUBSTITUTE_OVERFLOW_LENGTH   If overflow, compute needed length\n  PCRE2_SUBSTITUTE_REPLACEMENT_ONLY  Return only replacement string(s)\n  PCRE2_SUBSTITUTE_UNKNOWN_UNSET     Treat unknown group as unset\n  PCRE2_SUBSTITUTE_UNSET_EMPTY       Simple unset insert = empty string\n</pre>\nIf PCRE2_SUBSTITUTE_LITERAL is set, PCRE2_SUBSTITUTE_EXTENDED,\nPCRE2_SUBSTITUTE_UNKNOWN_UNSET, and PCRE2_SUBSTITUTE_UNSET_EMPTY are ignored.\n</p>\n<p>\nIf PCRE2_SUBSTITUTE_MATCHED is set, <i>match_data</i> must be non-NULL; its\ncontents must be the result of a call to <b>pcre2_match()</b> (or\n<b>pcre2_jit_match()</b>) using the same pattern, subject pointer, effective\nsubject length, start offset, and match options.\n</p>\n<p>\nThe function returns the number of substitutions, which may be zero if there\nare no matches. The result may be greater than one only when\nPCRE2_SUBSTITUTE_GLOBAL is set. In the event of an error, a negative error code\nis returned.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_substring_copy_byname.html",
    "content": "<html>\n<head>\n<title>pcre2_substring_copy_byname specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_substring_copy_byname man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_substring_copy_byname(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>, PCRE2_UCHAR *<i>buffer</i>, PCRE2_SIZE *<i>bufflen</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis is a convenience function for extracting a captured substring, identified\nby name, into a given buffer. The arguments are:\n<pre>\n  <i>match_data</i>    The match data block for the match\n  <i>name</i>          Name of the required substring\n  <i>buffer</i>        Buffer to receive the string\n  <i>bufflen</i>       Length of buffer (code units)\n</pre>\nThe <i>bufflen</i> variable is updated to contain the length of the extracted\nstring, excluding the trailing zero. The yield of the function is zero for\nsuccess or one of the following error numbers:\n<pre>\n  PCRE2_ERROR_NOSUBSTRING   there are no groups of that name\n  PCRE2_ERROR_UNAVAILBLE    the ovector was too small for that group\n  PCRE2_ERROR_UNSET         the group did not participate in the match\n  PCRE2_ERROR_NOMEMORY      the buffer is not big enough\n</pre>\nIf there is more than one group with the given name, the first one that is set\nis returned. In this situation PCRE2_ERROR_UNSET means that no group with the\ngiven name was set.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_substring_copy_bynumber.html",
    "content": "<html>\n<head>\n<title>pcre2_substring_copy_bynumber specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_substring_copy_bynumber man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_substring_copy_bynumber(pcre2_match_data *<i>match_data</i>,</b>\n<b>  uint32_t <i>number</i>, PCRE2_UCHAR *<i>buffer</i>,</b>\n<b>  PCRE2_SIZE *<i>bufflen</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis is a convenience function for extracting a captured substring into a given\nbuffer. The arguments are:\n<pre>\n  <i>match_data</i>    The match data block for the match\n  <i>number</i>        Number of the required substring\n  <i>buffer</i>        Buffer to receive the string\n  <i>bufflen</i>       Length of buffer\n</pre>\nThe <i>bufflen</i> variable is updated with the length of the extracted string,\nexcluding the terminating zero. The yield of the function is zero for success\nor one of the following error numbers:\n<pre>\n  PCRE2_ERROR_NOSUBSTRING   there are no groups of that number\n  PCRE2_ERROR_UNAVAILBLE    the ovector was too small for that group\n  PCRE2_ERROR_UNSET         the group did not participate in the match\n  PCRE2_ERROR_NOMEMORY      the buffer is too small\n\n</pre>\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_substring_free.html",
    "content": "<html>\n<head>\n<title>pcre2_substring_free specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_substring_free man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_substring_free(PCRE2_UCHAR *<i>buffer</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis is a convenience function for freeing the memory obtained by a previous\ncall to <b>pcre2_substring_get_byname()</b> or\n<b>pcre2_substring_get_bynumber()</b>. Its only argument is a pointer to the\nstring. If the argument is NULL, the function does nothing.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_substring_get_byname.html",
    "content": "<html>\n<head>\n<title>pcre2_substring_get_byname specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_substring_get_byname man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_substring_get_byname(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>, PCRE2_UCHAR **<i>bufferptr</i>, PCRE2_SIZE *<i>bufflen</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis is a convenience function for extracting a captured substring by name into\nnewly acquired memory. The arguments are:\n<pre>\n  <i>match_data</i>    The match data for the match\n  <i>name</i>          Name of the required substring\n  <i>bufferptr</i>     Where to put the string pointer\n  <i>bufflen</i>       Where to put the string length\n</pre>\nThe memory in which the substring is placed is obtained by calling the same\nmemory allocation function that was used for the match data block. The\nconvenience function <b>pcre2_substring_free()</b> can be used to free it when\nit is no longer needed. The yield of the function is zero for success or one of\nthe following error numbers:\n<pre>\n  PCRE2_ERROR_NOSUBSTRING   there are no groups of that name\n  PCRE2_ERROR_UNAVAILBLE    the ovector was too small for that group\n  PCRE2_ERROR_UNSET         the group did not participate in the match\n  PCRE2_ERROR_NOMEMORY      memory could not be obtained\n</pre>\nIf there is more than one group with the given name, the first one that is set\nis returned. In this situation PCRE2_ERROR_UNSET means that no group with the\ngiven name was set.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_substring_get_bynumber.html",
    "content": "<html>\n<head>\n<title>pcre2_substring_get_bynumber specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_substring_get_bynumber man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_substring_get_bynumber(pcre2_match_data *<i>match_data</i>,</b>\n<b>  uint32_t <i>number</i>, PCRE2_UCHAR **<i>bufferptr</i>, PCRE2_SIZE *<i>bufflen</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis is a convenience function for extracting a captured substring by number\ninto newly acquired memory. The arguments are:\n<pre>\n  <i>match_data</i>    The match data for the match\n  <i>number</i>        Number of the required substring\n  <i>bufferptr</i>     Where to put the string pointer\n  <i>bufflen</i>       Where to put the string length\n</pre>\nThe memory in which the substring is placed is obtained by calling the same\nmemory allocation function that was used for the match data block. The\nconvenience function <b>pcre2_substring_free()</b> can be used to free it when\nit is no longer needed. The yield of the function is zero for success or one of\nthe following error numbers:\n<pre>\n  PCRE2_ERROR_NOSUBSTRING   there are no groups of that number\n  PCRE2_ERROR_UNAVAILBLE    the ovector was too small for that group\n  PCRE2_ERROR_UNSET         the group did not participate in the match\n  PCRE2_ERROR_NOMEMORY      memory could not be obtained\n\n</pre>\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_substring_length_byname.html",
    "content": "<html>\n<head>\n<title>pcre2_substring_length_byname specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_substring_length_byname man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_substring_length_byname(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>, PCRE2_SIZE *<i>length</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function returns the length of a matched substring, identified by name.\nThe arguments are:\n<pre>\n  <i>match_data</i>   The match data block for the match\n  <i>name</i>         The substring name\n  <i>length</i>       Where to return the length, or NULL\n</pre>\nThe third argument may be NULL if all you want to know is whether or not a\nsubstring is set. The yield is zero on success, or a negative error code\notherwise.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_substring_length_bynumber.html",
    "content": "<html>\n<head>\n<title>pcre2_substring_length_bynumber specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_substring_length_bynumber man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_substring_length_bynumber(pcre2_match_data *<i>match_data</i>,</b>\n<b>  uint32_t <i>number</i>, PCRE2_SIZE *<i>length</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis function returns the length of a matched substring, identified by number.\nThe arguments are:\n<pre>\n  <i>match_data</i>   The match data block for the match\n  <i>number</i>       The substring number\n  <i>length</i>       Where to return the length, or NULL\n</pre>\nThe third argument may be NULL if all you want to know is whether or not a\nsubstring is set. The yield is zero on success, or a negative error code\notherwise. After a partial match, only substring 0 is available.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_substring_list_free.html",
    "content": "<html>\n<head>\n<title>pcre2_substring_list_free specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_substring_list_free man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>void pcre2_substring_list_free(PCRE2_UCHAR **<i>list</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis is a convenience function for freeing the store obtained by a previous\ncall to <b>pcre2substring_list_get()</b>. Its only argument is a pointer to\nthe list of string pointers. If the argument is NULL, the function returns\nimmediately, without doing anything.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_substring_list_get.html",
    "content": "<html>\n<head>\n<title>pcre2_substring_list_get specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_substring_list_get man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_substring_list_get(pcre2_match_data *<i>match_data</i>,</b>\n<b>\"  PCRE2_UCHAR ***<i>listptr</i>, PCRE2_SIZE **<i>lengthsptr</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis is a convenience function for extracting all the captured substrings after\na pattern match. It builds a list of pointers to the strings, and (optionally)\na second list that contains their lengths (in code units), excluding a\nterminating zero that is added to each of them. All this is done in a single\nblock of memory that is obtained using the same memory allocation function that\nwas used to get the match data block. The convenience function\n<b>pcre2_substring_list_free()</b> can be used to free it when it is no longer\nneeded. The arguments are:\n<pre>\n  <i>match_data</i>    The match data block\n  <i>listptr</i>       Where to put a pointer to the list\n  <i>lengthsptr</i>    Where to put a pointer to the lengths, or NULL\n</pre>\nA pointer to a list of pointers is put in the variable whose address is in\n<i>listptr</i>. The list is terminated by a NULL pointer. If <i>lengthsptr</i> is\nnot NULL, a matching list of lengths is created, and its address is placed in\n<i>lengthsptr</i>. The yield of the function is zero on success or\nPCRE2_ERROR_NOMEMORY if sufficient memory could not be obtained.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_substring_nametable_scan.html",
    "content": "<html>\n<head>\n<title>pcre2_substring_nametable_scan specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_substring_nametable_scan man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_substring_nametable_scan(const pcre2_code *<i>code</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>, PCRE2_SPTR *<i>first</i>, PCRE2_SPTR *<i>last</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis convenience function finds, for a compiled pattern, the first and last\nentries for a given name in the table that translates capture group names into\nnumbers.\n<pre>\n  <i>code</i>    Compiled regular expression\n  <i>name</i>    Name whose entries required\n  <i>first</i>   Where to return a pointer to the first entry\n  <i>last</i>    Where to return a pointer to the last entry\n</pre>\nWhen the name is found in the table, if <i>first</i> is NULL, the function\nreturns a group number, but if there is more than one matching entry, it is not\ndefined which one. Otherwise, when both pointers have been set, the yield of\nthe function is the length of each entry in code units. If the name is not\nfound, PCRE2_ERROR_NOSUBSTRING is returned.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API, including the format of\nthe table entries, in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage, and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2_substring_number_from_name.html",
    "content": "<html>\n<head>\n<title>pcre2_substring_number_from_name specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2_substring_number_from_name man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSYNOPSIS\n</h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_substring_number_from_name(const pcre2_code *<i>code</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>);</b>\n</p>\n<h2>\nDESCRIPTION\n</h2>\n<p>\nThis convenience function finds the number of a named substring capturing\nparenthesis in a compiled pattern, provided that it is a unique name. The\nfunction arguments are:\n<pre>\n  <i>code</i>    Compiled regular expression\n  <i>name</i>    Name whose number is required\n</pre>\nThe yield of the function is the number of the parenthesis if the name is\nfound, or PCRE2_ERROR_NOSUBSTRING if it is not found. When duplicate names are\nallowed (PCRE2_DUPNAMES is set), if the name is not unique,\nPCRE2_ERROR_NOUNIQUESUBSTRING is returned. You can obtain the list of numbers\nwith the same name by calling <b>pcre2_substring_nametable_scan()</b>.\n</p>\n<p>\nThere is a complete description of the PCRE2 native API in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage and a description of the POSIX API in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\npage.\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2api.html",
    "content": "<html>\n<head>\n<title>pcre2api specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2api man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">PCRE2 NATIVE API BASIC FUNCTIONS</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">PCRE2 NATIVE API AUXILIARY MATCH FUNCTIONS</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">PCRE2 NATIVE API GENERAL CONTEXT FUNCTIONS</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">PCRE2 NATIVE API COMPILE CONTEXT FUNCTIONS</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">PCRE2 NATIVE API MATCH CONTEXT FUNCTIONS</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">PCRE2 NATIVE API STRING EXTRACTION FUNCTIONS</a>\n<li><a name=\"TOC7\" href=\"#SEC7\">PCRE2 NATIVE API STRING SUBSTITUTION FUNCTION</a>\n<li><a name=\"TOC8\" href=\"#SEC8\">PCRE2 NATIVE API JIT FUNCTIONS</a>\n<li><a name=\"TOC9\" href=\"#SEC9\">PCRE2 NATIVE API SERIALIZATION FUNCTIONS</a>\n<li><a name=\"TOC10\" href=\"#SEC10\">PCRE2 NATIVE API AUXILIARY FUNCTIONS</a>\n<li><a name=\"TOC11\" href=\"#SEC11\">PCRE2 NATIVE API OBSOLETE FUNCTIONS</a>\n<li><a name=\"TOC12\" href=\"#SEC12\">PCRE2 EXPERIMENTAL PATTERN CONVERSION FUNCTIONS</a>\n<li><a name=\"TOC13\" href=\"#SEC13\">PCRE2 8-BIT, 16-BIT, AND 32-BIT LIBRARIES</a>\n<li><a name=\"TOC14\" href=\"#SEC14\">PCRE2 API OVERVIEW</a>\n<li><a name=\"TOC15\" href=\"#SEC15\">STRING LENGTHS AND OFFSETS</a>\n<li><a name=\"TOC16\" href=\"#SEC16\">NEWLINES</a>\n<li><a name=\"TOC17\" href=\"#SEC17\">MULTITHREADING</a>\n<li><a name=\"TOC18\" href=\"#SEC18\">PCRE2 CONTEXTS</a>\n<li><a name=\"TOC19\" href=\"#SEC19\">CHECKING BUILD-TIME OPTIONS</a>\n<li><a name=\"TOC20\" href=\"#SEC20\">COMPILING A PATTERN</a>\n<li><a name=\"TOC21\" href=\"#SEC21\">JUST-IN-TIME (JIT) COMPILATION</a>\n<li><a name=\"TOC22\" href=\"#SEC22\">LOCALE SUPPORT</a>\n<li><a name=\"TOC23\" href=\"#SEC23\">INFORMATION ABOUT A COMPILED PATTERN</a>\n<li><a name=\"TOC24\" href=\"#SEC24\">INFORMATION ABOUT A PATTERN'S CALLOUTS</a>\n<li><a name=\"TOC25\" href=\"#SEC25\">SERIALIZATION AND PRECOMPILING</a>\n<li><a name=\"TOC26\" href=\"#SEC26\">THE MATCH DATA BLOCK</a>\n<li><a name=\"TOC27\" href=\"#SEC27\">MEMORY USE FOR MATCH DATA BLOCKS</a>\n<li><a name=\"TOC28\" href=\"#SEC28\">MATCHING A PATTERN: THE TRADITIONAL FUNCTION</a>\n<li><a name=\"TOC29\" href=\"#SEC29\">NEWLINE HANDLING WHEN MATCHING</a>\n<li><a name=\"TOC30\" href=\"#SEC30\">HOW PCRE2_MATCH() RETURNS A STRING AND CAPTURED SUBSTRINGS</a>\n<li><a name=\"TOC31\" href=\"#SEC31\">OTHER INFORMATION ABOUT A MATCH</a>\n<li><a name=\"TOC32\" href=\"#SEC32\">ERROR RETURNS FROM <b>pcre2_match()</b></a>\n<li><a name=\"TOC33\" href=\"#SEC33\">OBTAINING A TEXTUAL ERROR MESSAGE</a>\n<li><a name=\"TOC34\" href=\"#SEC34\">ITERATING OVER ALL MATCHES</a>\n<li><a name=\"TOC35\" href=\"#SEC35\">EXTRACTING CAPTURED SUBSTRINGS BY NUMBER</a>\n<li><a name=\"TOC36\" href=\"#SEC36\">EXTRACTING A LIST OF ALL CAPTURED SUBSTRINGS</a>\n<li><a name=\"TOC37\" href=\"#SEC37\">EXTRACTING CAPTURED SUBSTRINGS BY NAME</a>\n<li><a name=\"TOC38\" href=\"#SEC38\">CREATING A NEW STRING WITH SUBSTITUTIONS</a>\n<li><a name=\"TOC39\" href=\"#SEC39\">DUPLICATE CAPTURE GROUP NAMES</a>\n<li><a name=\"TOC40\" href=\"#SEC40\">FINDING ALL POSSIBLE MATCHES AT ONE POSITION</a>\n<li><a name=\"TOC41\" href=\"#SEC41\">MATCHING A PATTERN: THE ALTERNATIVE FUNCTION</a>\n<li><a name=\"TOC42\" href=\"#SEC42\">SEE ALSO</a>\n<li><a name=\"TOC43\" href=\"#SEC43\">AUTHOR</a>\n<li><a name=\"TOC44\" href=\"#SEC44\">REVISION</a>\n</ul>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n<br>\n<br>\nPCRE2 is a new API for PCRE, starting at release 10.0. This document contains a\ndescription of all its native functions. See the\n<a href=\"pcre2.html\"><b>pcre2</b></a>\ndocument for an overview of all the PCRE2 documentation.\n</p>\n<h2><a name=\"SEC1\" href=\"#TOC1\">PCRE2 NATIVE API BASIC FUNCTIONS</a></h2>\n<p>\n<b>pcre2_code *pcre2_compile(PCRE2_SPTR <i>pattern</i>, PCRE2_SIZE <i>length</i>,</b>\n<b>  uint32_t <i>options</i>, int *<i>errorcode</i>, PCRE2_SIZE *<i>erroroffset,</i></b>\n<b>  pcre2_compile_context *<i>ccontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_code_free(pcre2_code *<i>code</i>);</b>\n<br>\n<br>\n<b>pcre2_match_data *pcre2_match_data_create(uint32_t <i>ovecsize</i>,</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>pcre2_match_data *pcre2_match_data_create_from_pattern(</b>\n<b>  const pcre2_code *<i>code</i>, pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>int pcre2_match(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>\n<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>\n<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>\n<b>  pcre2_match_context *<i>mcontext</i>);</b>\n<br>\n<br>\n<b>int pcre2_dfa_match(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>\n<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>\n<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>\n<b>  pcre2_match_context *<i>mcontext</i>,</b>\n<b>  int *<i>workspace</i>, PCRE2_SIZE <i>wscount</i>);</b>\n<br>\n<br>\n<b>void pcre2_match_data_free(pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">PCRE2 NATIVE API AUXILIARY MATCH FUNCTIONS</a></h2>\n<p>\n<b>PCRE2_SPTR pcre2_get_mark(pcre2_match_data *<i>match_data</i>);</b>\n<br>\n<br>\n<b>PCRE2_SIZE pcre2_get_match_data_size(pcre2_match_data *<i>match_data</i>);</b>\n<br>\n<br>\n<b>PCRE2_SIZE pcre2_get_match_data_heapframes_size(</b>\n<b>  pcre2_match_data *<i>match_data</i>);</b>\n<br>\n<br>\n<b>uint32_t pcre2_get_ovector_count(pcre2_match_data *<i>match_data</i>);</b>\n<br>\n<br>\n<b>PCRE2_SIZE *pcre2_get_ovector_pointer(pcre2_match_data *<i>match_data</i>);</b>\n<br>\n<br>\n<b>PCRE2_SIZE pcre2_get_startchar(pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">PCRE2 NATIVE API GENERAL CONTEXT FUNCTIONS</a></h2>\n<p>\n<b>pcre2_general_context *pcre2_general_context_create(</b>\n<b>  void *(*<i>private_malloc</i>)(PCRE2_SIZE, void *),</b>\n<b>  void (*<i>private_free</i>)(void *, void *), void *<i>memory_data</i>);</b>\n<br>\n<br>\n<b>pcre2_general_context *pcre2_general_context_copy(</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_general_context_free(pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">PCRE2 NATIVE API COMPILE CONTEXT FUNCTIONS</a></h2>\n<p>\n<b>pcre2_compile_context *pcre2_compile_context_create(</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>pcre2_compile_context *pcre2_compile_context_copy(</b>\n<b>  pcre2_compile_context *<i>ccontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_compile_context_free(pcre2_compile_context *<i>ccontext</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_bsr(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_character_tables(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  const uint8_t *<i>tables</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_compile_extra_options(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>extra_options</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_max_pattern_length(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  PCRE2_SIZE <i>value</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_max_pattern_compiled_length(</b>\n<b>  pcre2_compile_context *<i>ccontext</i>, PCRE2_SIZE <i>value</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_max_varlookbehind(pcre2_compile_contest *<i>ccontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_newline(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_parens_nest_limit(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_compile_recursion_guard(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  int (*<i>guard_function</i>)(uint32_t, void *), void *<i>user_data</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_optimize(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>directive</i>);</b>\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">PCRE2 NATIVE API MATCH CONTEXT FUNCTIONS</a></h2>\n<p>\n<b>pcre2_match_context *pcre2_match_context_create(</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>pcre2_match_context *pcre2_match_context_copy(</b>\n<b>  pcre2_match_context *<i>mcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_match_context_free(pcre2_match_context *<i>mcontext</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_callout(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  int (*<i>callout_function</i>)(pcre2_callout_block *, void *),</b>\n<b>  void *<i>callout_data</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_substitute_callout(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  int (*<i>callout_function</i>)(pcre2_substitute_callout_block *, void *),</b>\n<b>  void *<i>callout_data</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_substitute_case_callout(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  PCRE2_SIZE (*<i>callout_function</i>)(PCRE2_SPTR, PCRE2_SIZE,</b>\n<b>                                 PCRE2_UCHAR *, PCRE2_SIZE,</b>\n<b>                                 int, void *),</b>\n<b>  void *<i>callout_data</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_offset_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  PCRE2_SIZE <i>value</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_heap_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_match_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_depth_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">PCRE2 NATIVE API STRING EXTRACTION FUNCTIONS</a></h2>\n<p>\n<b>int pcre2_substring_copy_byname(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>, PCRE2_UCHAR *<i>buffer</i>, PCRE2_SIZE *<i>bufflen</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_copy_bynumber(pcre2_match_data *<i>match_data</i>,</b>\n<b>  uint32_t <i>number</i>, PCRE2_UCHAR *<i>buffer</i>,</b>\n<b>  PCRE2_SIZE *<i>bufflen</i>);</b>\n<br>\n<br>\n<b>void pcre2_substring_free(PCRE2_UCHAR *<i>buffer</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_get_byname(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>, PCRE2_UCHAR **<i>bufferptr</i>, PCRE2_SIZE *<i>bufflen</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_get_bynumber(pcre2_match_data *<i>match_data</i>,</b>\n<b>  uint32_t <i>number</i>, PCRE2_UCHAR **<i>bufferptr</i>,</b>\n<b>  PCRE2_SIZE *<i>bufflen</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_length_byname(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>, PCRE2_SIZE *<i>length</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_length_bynumber(pcre2_match_data *<i>match_data</i>,</b>\n<b>  uint32_t <i>number</i>, PCRE2_SIZE *<i>length</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_nametable_scan(const pcre2_code *<i>code</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>, PCRE2_SPTR *<i>first</i>, PCRE2_SPTR *<i>last</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_number_from_name(const pcre2_code *<i>code</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>);</b>\n<br>\n<br>\n<b>void pcre2_substring_list_free(PCRE2_UCHAR **<i>list</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_list_get(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_UCHAR ***<i>listptr</i>, PCRE2_SIZE **<i>lengthsptr</i>);</b>\n</p>\n<h2><a name=\"SEC7\" href=\"#TOC1\">PCRE2 NATIVE API STRING SUBSTITUTION FUNCTION</a></h2>\n<p>\n<b>int pcre2_substitute(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>\n<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>\n<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>\n<b>  pcre2_match_context *<i>mcontext</i>, PCRE2_SPTR <i>replacement</i>,</b>\n<b>  PCRE2_SIZE <i>rlength</i>, PCRE2_UCHAR *<i>outputbuffer</i>,</b>\n<b>  PCRE2_SIZE *<i>outlengthptr</i>);</b>\n</p>\n<h2><a name=\"SEC8\" href=\"#TOC1\">PCRE2 NATIVE API JIT FUNCTIONS</a></h2>\n<p>\n<b>int pcre2_jit_compile(pcre2_code *<i>code</i>, uint32_t <i>options</i>);</b>\n<br>\n<br>\n<b>int pcre2_jit_match(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>\n<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>\n<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>\n<b>  pcre2_match_context *<i>mcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_jit_free_unused_memory(pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>pcre2_jit_stack *pcre2_jit_stack_create(size_t <i>startsize</i>,</b>\n<b>  size_t <i>maxsize</i>, pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_jit_stack_assign(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  pcre2_jit_callback <i>callback_function</i>, void *<i>callback_data</i>);</b>\n<br>\n<br>\n<b>void pcre2_jit_stack_free(pcre2_jit_stack *<i>jit_stack</i>);</b>\n</p>\n<h2><a name=\"SEC9\" href=\"#TOC1\">PCRE2 NATIVE API SERIALIZATION FUNCTIONS</a></h2>\n<p>\n<b>int32_t pcre2_serialize_decode(pcre2_code **<i>codes</i>,</b>\n<b>  int32_t <i>number_of_codes</i>, const uint8_t *<i>bytes</i>,</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>int32_t pcre2_serialize_encode(const pcre2_code **<i>codes</i>,</b>\n<b>  int32_t <i>number_of_codes</i>, uint8_t **<i>serialized_bytes</i>,</b>\n<b>  PCRE2_SIZE *<i>serialized_size</i>, pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_serialize_free(uint8_t *<i>bytes</i>);</b>\n<br>\n<br>\n<b>int32_t pcre2_serialize_get_number_of_codes(const uint8_t *<i>bytes</i>);</b>\n</p>\n<h2><a name=\"SEC10\" href=\"#TOC1\">PCRE2 NATIVE API AUXILIARY FUNCTIONS</a></h2>\n<p>\n<b>pcre2_code *pcre2_code_copy(const pcre2_code *<i>code</i>);</b>\n<br>\n<br>\n<b>pcre2_code *pcre2_code_copy_with_tables(const pcre2_code *<i>code</i>);</b>\n<br>\n<br>\n<b>int pcre2_get_error_message(int <i>errorcode</i>, PCRE2_UCHAR *<i>buffer</i>,</b>\n<b>  PCRE2_SIZE <i>bufflen</i>);</b>\n<br>\n<br>\n<b>const uint8_t *pcre2_maketables(pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_maketables_free(pcre2_general_context *<i>gcontext</i>,</b>\n<b>  const uint8_t *<i>tables</i>);</b>\n<br>\n<br>\n<b>int pcre2_pattern_info(const pcre2_code *<i>code</i>, uint32_t <i>what</i>,</b>\n<b>  void *<i>where</i>);</b>\n<br>\n<br>\n<b>int pcre2_callout_enumerate(const pcre2_code *<i>code</i>,</b>\n<b>  int (*<i>callback</i>)(pcre2_callout_enumerate_block *, void *),</b>\n<b>  void *<i>user_data</i>);</b>\n<br>\n<br>\n<b>int pcre2_config(uint32_t <i>what</i>, void *<i>where</i>);</b>\n</p>\n<h2><a name=\"SEC11\" href=\"#TOC1\">PCRE2 NATIVE API OBSOLETE FUNCTIONS</a></h2>\n<p>\n<b>int pcre2_set_recursion_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_recursion_memory_management(</b>\n<b>  pcre2_match_context *<i>mcontext</i>,</b>\n<b>  void *(*<i>private_malloc</i>)(size_t, void *),</b>\n<b>  void (*<i>private_free</i>)(void *, void *), void *<i>memory_data</i>);</b>\n<br>\n<br>\nThese functions became obsolete at release 10.30 and are retained only for\nbackward compatibility. They should not be used in new code. The first is\nreplaced by <b>pcre2_set_depth_limit()</b>; the second is no longer needed and\nhas no effect (it always returns zero).\n</p>\n<h2><a name=\"SEC12\" href=\"#TOC1\">PCRE2 EXPERIMENTAL PATTERN CONVERSION FUNCTIONS</a></h2>\n<p>\n<b>pcre2_convert_context *pcre2_convert_context_create(</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>pcre2_convert_context *pcre2_convert_context_copy(</b>\n<b>  pcre2_convert_context *<i>cvcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_convert_context_free(pcre2_convert_context *<i>cvcontext</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_glob_escape(pcre2_convert_context *<i>cvcontext</i>,</b>\n<b>  uint32_t <i>escape_char</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_glob_separator(pcre2_convert_context *<i>cvcontext</i>,</b>\n<b>  uint32_t <i>separator_char</i>);</b>\n<br>\n<br>\n<b>int pcre2_pattern_convert(PCRE2_SPTR <i>pattern</i>, PCRE2_SIZE <i>length</i>,</b>\n<b>  uint32_t <i>options</i>, PCRE2_UCHAR **<i>buffer</i>,</b>\n<b>  PCRE2_SIZE *<i>blength</i>, pcre2_convert_context *<i>cvcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_converted_pattern_free(PCRE2_UCHAR *<i>converted_pattern</i>);</b>\n<br>\n<br>\nThese functions provide a way of converting non-PCRE2 patterns into\npatterns that can be processed by <b>pcre2_compile()</b>. This facility is\nexperimental and may be changed in future releases. At present, \"globs\" and\nPOSIX basic and extended patterns can be converted. Details are given in the\n<a href=\"pcre2convert.html\"><b>pcre2convert</b></a>\ndocumentation.\n</p>\n<h2><a name=\"SEC13\" href=\"#TOC1\">PCRE2 8-BIT, 16-BIT, AND 32-BIT LIBRARIES</a></h2>\n<p>\nThere are three PCRE2 libraries, supporting 8-bit, 16-bit, and 32-bit code\nunits, respectively. However, there is just one header file, <b>pcre2.h</b>.\nThis contains the function prototypes and other definitions for all three\nlibraries. One, two, or all three can be installed simultaneously. On Unix-like\nsystems the libraries are called <b>libpcre2-8</b>, <b>libpcre2-16</b>, and\n<b>libpcre2-32</b>, and they can also co-exist with the original PCRE libraries.\nEvery PCRE2 function comes in three different forms, one for each library, for\nexample:\n<pre>\n  <b>pcre2_compile_8()</b>\n  <b>pcre2_compile_16()</b>\n  <b>pcre2_compile_32()</b>\n</pre>\nThere are also three different sets of data types:\n<pre>\n  <b>PCRE2_UCHAR8, PCRE2_UCHAR16, PCRE2_UCHAR32</b>\n  <b>PCRE2_SPTR8,  PCRE2_SPTR16,  PCRE2_SPTR32</b>\n</pre>\nThe UCHAR types define unsigned code units of the appropriate widths.\nFor example, PCRE2_UCHAR16 is usually defined as `uint16_t'.\nThe SPTR types are pointers to constants of the equivalent UCHAR types,\nthat is, they are pointers to vectors of unsigned code units.\n</p>\n<p>\nCharacter strings are passed to a PCRE2 library as sequences of unsigned\nintegers in code units of the appropriate width. The length of a string may\nbe given as a number of code units, or the string may be specified as\nzero-terminated.\n</p>\n<p>\nMany applications use only one code unit width. For their convenience, macros\nare defined whose names are the generic forms such as <b>pcre2_compile()</b> and\nPCRE2_SPTR. These macros use the value of the macro PCRE2_CODE_UNIT_WIDTH to\ngenerate the appropriate width-specific function and macro names.\nPCRE2_CODE_UNIT_WIDTH is not defined by default. An application must define it\nto be 8, 16, or 32 before including <b>pcre2.h</b> in order to make use of the\ngeneric names.\n</p>\n<p>\nApplications that use more than one code unit width can be linked with more\nthan one PCRE2 library, but must define PCRE2_CODE_UNIT_WIDTH to be 0 before\nincluding <b>pcre2.h</b>, and then use the real function names. Any code that is\nto be included in an environment where the value of PCRE2_CODE_UNIT_WIDTH is\nunknown should also use the real function names. (Unfortunately, it is not\npossible in C code to save and restore the value of a macro.)\n</p>\n<p>\nIf PCRE2_CODE_UNIT_WIDTH is not defined before including <b>pcre2.h</b>, a\ncompiler error occurs.\n</p>\n<p>\nWhen using multiple libraries in an application, you must take care when\nprocessing any particular pattern to use only functions from a single library.\nFor example, if you want to run a match using a pattern that was compiled with\n<b>pcre2_compile_16()</b>, you must do so with <b>pcre2_match_16()</b>, not\n<b>pcre2_match_8()</b> or <b>pcre2_match_32()</b>.\n</p>\n<p>\nIn the function summaries above, and in the rest of this document and other\nPCRE2 documents, functions and data types are described using their generic\nnames, without the _8, _16, or _32 suffix.\n</p>\n<h2><a name=\"SEC14\" href=\"#TOC1\">PCRE2 API OVERVIEW</a></h2>\n<p>\nPCRE2 has its own native API, which is described in this document. There are\nalso some wrapper functions for the 8-bit library that correspond to the\nPOSIX regular expression API, but they do not give access to all the\nfunctionality of PCRE2 and they are not thread-safe. They are described in the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\ndocumentation. Both these APIs define a set of C function calls.\n</p>\n<p>\nThe native API C data types, function prototypes, option values, and error\ncodes are defined in the header file <b>pcre2.h</b>, which also contains\ndefinitions of PCRE2_MAJOR and PCRE2_MINOR, the major and minor release numbers\nfor the library. Applications can use these to include support for different\nreleases of PCRE2.\n</p>\n<p>\nIn a Windows environment, if you want to statically link an application program\nagainst a non-dll PCRE2 library, you must define PCRE2_STATIC before including\n<b>pcre2.h</b>.\n</p>\n<p>\nThe functions <b>pcre2_compile()</b> and <b>pcre2_match()</b> are used for\ncompiling and matching regular expressions in a Perl-compatible manner. A\nsample program that demonstrates the simplest way of using them is provided in\nthe file called <i>pcre2demo.c</i> in the PCRE2 source distribution. A listing\nof this program is given in the\n<a href=\"pcre2demo.html\"><b>pcre2demo</b></a>\ndocumentation, and the\n<a href=\"pcre2sample.html\"><b>pcre2sample</b></a>\ndocumentation describes how to compile and run it.\n</p>\n<p>\nThe compiling and matching functions recognize various options that are passed\nas bits in an options argument. There are also some more complicated parameters\nsuch as custom memory management functions and resource limits that are passed\nin \"contexts\" (which are just memory blocks, described below). Simple\napplications do not need to make use of contexts.\n</p>\n<p>\nJust-in-time (JIT) compiler support is an optional feature of PCRE2 that can be\nbuilt in appropriate hardware environments. It greatly speeds up the matching\nperformance of many patterns. Programs can request that it be used if\navailable by calling <b>pcre2_jit_compile()</b> after a pattern has been\nsuccessfully compiled by <b>pcre2_compile()</b>. This does nothing if JIT\nsupport is not available.\n</p>\n<p>\nMore complicated programs might need to make use of the specialist functions\n<b>pcre2_jit_stack_create()</b>, <b>pcre2_jit_stack_free()</b>, and\n<b>pcre2_jit_stack_assign()</b> in order to control the JIT code's memory usage.\n</p>\n<p>\nJIT matching is automatically used by <b>pcre2_match()</b> if it is available,\nunless the PCRE2_NO_JIT option is set. There is also a direct interface for JIT\nmatching, which gives improved performance at the expense of less sanity\nchecking. The JIT-specific functions are discussed in the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\ndocumentation.\n</p>\n<p>\nA second matching function, <b>pcre2_dfa_match()</b>, which is not\nPerl-compatible, is also provided. This uses a different algorithm for the\nmatching. The alternative algorithm finds all possible matches (at a given\npoint in the subject), and scans the subject just once (unless there are\nlookaround assertions). However, this algorithm does not return captured\nsubstrings. A description of the two matching algorithms and their advantages\nand disadvantages is given in the\n<a href=\"pcre2matching.html\"><b>pcre2matching</b></a>\ndocumentation. There is no JIT support for <b>pcre2_dfa_match()</b>.\n</p>\n<p>\nIn addition to the main compiling and matching functions, there are convenience\nfunctions for extracting captured substrings from a subject string that has\nbeen matched by <b>pcre2_match()</b>. They are:\n<pre>\n  <b>pcre2_substring_copy_byname()</b>\n  <b>pcre2_substring_copy_bynumber()</b>\n  <b>pcre2_substring_get_byname()</b>\n  <b>pcre2_substring_get_bynumber()</b>\n  <b>pcre2_substring_list_get()</b>\n  <b>pcre2_substring_length_byname()</b>\n  <b>pcre2_substring_length_bynumber()</b>\n  <b>pcre2_substring_nametable_scan()</b>\n  <b>pcre2_substring_number_from_name()</b>\n</pre>\n<b>pcre2_substring_free()</b> and <b>pcre2_substring_list_free()</b> are also\nprovided, to free memory used for extracted strings. If either of these\nfunctions is called with a NULL argument, the function returns immediately\nwithout doing anything.\n</p>\n<p>\nThe function <b>pcre2_substitute()</b> can be called to match a pattern and\nreturn a copy of the subject string with substitutions for parts that were\nmatched.\n</p>\n<p>\nFunctions whose names begin with <b>pcre2_serialize_</b> are used for saving\ncompiled patterns on disc or elsewhere, and reloading them later.\n</p>\n<p>\nFinally, there are functions for finding out information about a compiled\npattern (<b>pcre2_pattern_info()</b>) and about the configuration with which\nPCRE2 was built (<b>pcre2_config()</b>) and that it is using.\n</p>\n<p>\nFunctions with names ending with <b>_free()</b> are used for freeing memory\nblocks of various sorts. In all cases, if one of these functions is called with\na NULL argument, it does nothing.\n</p>\n<h2><a name=\"SEC15\" href=\"#TOC1\">STRING LENGTHS AND OFFSETS</a></h2>\n<p>\nThe PCRE2 API uses string lengths and offsets into strings of code units in\nseveral places. These values are always of type PCRE2_SIZE, which is an\nunsigned integer type, currently always defined as <i>size_t</i>. The largest\nvalue that can be stored in such a type (that is ~(PCRE2_SIZE)0) is reserved\nas a special indicator for zero-terminated strings and unset offsets.\nTherefore, the longest string that can be handled is one less than this\nmaximum. Note that string lengths are always given in code units. Only in the\n8-bit library is such a length the same as the number of bytes in the string.\n<a name=\"newlines\"></a></p>\n<h2><a name=\"SEC16\" href=\"#TOC1\">NEWLINES</a></h2>\n<p>\nPCRE2 supports five different conventions for indicating line breaks in\nstrings: a single CR (carriage return) character, a single LF (linefeed)\ncharacter, the two-character sequence CRLF, any of the three preceding, or any\nUnicode newline sequence. The Unicode newline sequences are the three just\nmentioned, plus the single characters VT (vertical tab, U+000B), FF (form feed,\nU+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS\n(paragraph separator, U+2029).\n</p>\n<p>\nEach of the first three conventions is used by at least one operating system as\nits standard newline sequence. When PCRE2 is built, a default can be specified.\nIf it is not, the default is set to LF, which is the Unix standard. However,\nthe newline convention can be changed by an application when calling\n<b>pcre2_compile()</b>, or it can be specified by special text at the start of\nthe pattern itself; this overrides any other settings. See the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\npage for details of the special character sequences.\n</p>\n<p>\nIn the PCRE2 documentation the word \"newline\" is used to mean \"the character or\npair of characters that indicate a line break\". The choice of newline\nconvention affects the handling of the dot, circumflex, and dollar\nmetacharacters, the handling of #-comments in /x mode, and, when CRLF is a\nrecognized line ending sequence, the match position advancement for a\nnon-anchored pattern. There is more detail about this in the\n<a href=\"#matchoptions\">section on <b>pcre2_match()</b> options</a>\nbelow.\n</p>\n<p>\nThe choice of newline convention does not affect the interpretation of\nthe \\n or \\r escape sequences, nor does it affect what \\R matches; this has\nits own separate convention.\n</p>\n<h2><a name=\"SEC17\" href=\"#TOC1\">MULTITHREADING</a></h2>\n<p>\nIn a multithreaded application it is important to keep thread-specific data\nseparate from data that can be shared between threads. The PCRE2 library code\nitself is thread-safe: it contains no static or global variables. The API is\ndesigned to be fairly simple for non-threaded applications while at the same\ntime ensuring that multithreaded applications can use it.\n</p>\n<p>\nThere are several different blocks of data that are used to pass information\nbetween the application and the PCRE2 libraries.\n</p>\n<h3>\nThe compiled pattern\n</h3>\n<p>\nA pointer to the compiled form of a pattern is returned to the user when\n<b>pcre2_compile()</b> is successful. The data in the compiled pattern is fixed,\nand does not change when the pattern is matched. Therefore, it is thread-safe,\nthat is, the same compiled pattern can be used by more than one thread\nsimultaneously. For example, an application can compile all its patterns at the\nstart, before forking off multiple threads that use them. However, if the\njust-in-time (JIT) optimization feature is being used, it needs separate memory\nstack areas for each thread. See the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\ndocumentation for more details.\n</p>\n<p>\nIn a more complicated situation, where patterns are compiled only when they are\nfirst needed, but are still shared between threads, pointers to compiled\npatterns must be protected from simultaneous writing by multiple threads. This\nis somewhat tricky to do correctly. If you know that writing to a pointer is\natomic in your environment, you can use logic like this:\n<pre>\n  Get a read-only (shared) lock (mutex) for pointer\n  if (pointer == NULL)\n    {\n    Get a write (unique) lock for pointer\n    if (pointer == NULL) pointer = pcre2_compile(...\n    }\n  Release the lock\n  Use pointer in pcre2_match()\n</pre>\nOf course, testing for compilation errors should also be included in the code.\n</p>\n<p>\nThe reason for checking the pointer a second time is as follows: Several\nthreads may have acquired the shared lock and tested the pointer for being\nNULL, but only one of them will be given the write lock, with the rest kept\nwaiting. The winning thread will compile the pattern and store the result.\nAfter this thread releases the write lock, another thread will get it, and if\nit does not retest pointer for being NULL, will recompile the pattern and\noverwrite the pointer, creating a memory leak and possibly causing other\nissues.\n</p>\n<p>\nIn an environment where writing to a pointer may not be atomic, the above logic\nis not sufficient. The thread that is doing the compiling may be descheduled\nafter writing only part of the pointer, which could cause other threads to use\nan invalid value. Instead of checking the pointer itself, a separate \"pointer\nis valid\" flag (that can be updated atomically) must be used:\n<pre>\n  Get a read-only (shared) lock (mutex) for pointer\n  if (!pointer_is_valid)\n    {\n    Get a write (unique) lock for pointer\n    if (!pointer_is_valid)\n      {\n      pointer = pcre2_compile(...\n      pointer_is_valid = TRUE\n      }\n    }\n  Release the lock\n  Use pointer in pcre2_match()\n</pre>\nIf JIT is being used, but the JIT compilation is not being done immediately\n(perhaps waiting to see if the pattern is used often enough), similar logic is\nrequired. JIT compilation updates a value within the compiled code block, so a\nthread must gain unique write access to the pointer before calling\n<b>pcre2_jit_compile()</b>. Alternatively, <b>pcre2_code_copy()</b> or\n<b>pcre2_code_copy_with_tables()</b> can be used to obtain a private copy of the\ncompiled code before calling the JIT compiler.\n</p>\n<h3>\nContext blocks\n</h3>\n<p>\nThe next main section below introduces the idea of \"contexts\" in which PCRE2\nfunctions are called. A context is nothing more than a collection of parameters\nthat control the way PCRE2 operates. Grouping a number of parameters together\nin a context is a convenient way of passing them to a PCRE2 function without\nusing lots of arguments. The parameters that are stored in contexts are in some\nsense \"advanced features\" of the API. Many straightforward applications will\nnot need to use contexts.\n</p>\n<p>\nIn a multithreaded application, if the parameters in a context are values that\nare never changed, the same context can be used by all the threads. However, if\nany thread needs to change any value in a context, it must make its own\nthread-specific copy.\n</p>\n<h3>\nMatch blocks\n</h3>\n<p>\nThe matching functions need a block of memory for storing the results of a\nmatch. This includes details of what was matched, as well as additional\ninformation such as the name of a (*MARK) setting. Each thread must provide its\nown copy of this memory.\n</p>\n<h2><a name=\"SEC18\" href=\"#TOC1\">PCRE2 CONTEXTS</a></h2>\n<p>\nSome PCRE2 functions have a lot of parameters, many of which are used only by\nspecialist applications, for example, those that use custom memory management\nor non-standard character tables. To keep function argument lists at a\nreasonable size, and at the same time to keep the API extensible, \"uncommon\"\nparameters are passed to certain functions in a <b>context</b> instead of\ndirectly. A context is just a block of memory that holds the parameter values.\nApplications that do not need to adjust any of the context parameters can pass\nNULL when a context pointer is required.\n</p>\n<p>\nThere are three different types of context: a general context that is relevant\nfor several PCRE2 operations, a compile-time context, and a match-time context.\n</p>\n<h3>\nThe general context\n</h3>\n<p>\nAt present, this context just contains pointers to (and data for) external\nmemory management functions that are called from several places in the PCRE2\nlibrary. The context is named `general' rather than specifically `memory'\nbecause in future other fields may be added. If you do not want to supply your\nown custom memory management functions, you do not need to bother with a\ngeneral context. A general context is created by:\n<br>\n<br>\n<b>pcre2_general_context *pcre2_general_context_create(</b>\n<b>  void *(*<i>private_malloc</i>)(PCRE2_SIZE, void *),</b>\n<b>  void (*<i>private_free</i>)(void *, void *), void *<i>memory_data</i>);</b>\n<br>\n<br>\nThe two function pointers specify custom memory management functions, whose\nprototypes are:\n<pre>\n  <b>void *private_malloc(PCRE2_SIZE, void *);</b>\n  <b>void  private_free(void *, void *);</b>\n</pre>\nWhenever code in PCRE2 calls these functions, the final argument is the value\nof <i>memory_data</i>. Either of the first two arguments of the creation\nfunction may be NULL, in which case the system memory management functions\n<i>malloc()</i> and <i>free()</i> are used. (This is not currently useful, as\nthere are no other fields in a general context, but in future there might be.)\nThe <i>private_malloc()</i> function is used (if supplied) to obtain memory for\nstoring the context, and all three values are saved as part of the context.\n</p>\n<p>\nWhenever PCRE2 creates a data block of any kind, the block contains a pointer\nto the <i>free()</i> function that matches the <i>malloc()</i> function that was\nused. When the time comes to free the block, this function is called.\n</p>\n<p>\nA general context can be copied by calling:\n<br>\n<br>\n<b>pcre2_general_context *pcre2_general_context_copy(</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\nThe memory used for a general context should be freed by calling:\n<br>\n<br>\n<b>void pcre2_general_context_free(pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\nIf this function is passed a NULL argument, it returns immediately without\ndoing anything.\n<a name=\"compilecontext\"></a></p>\n<h3>\nThe compile context\n</h3>\n<p>\nA compile context is required if you want to provide an external function for\nstack checking during compilation or to change the default values of any of the\nfollowing compile-time parameters:\n<pre>\n  What \\R matches (Unicode newlines or CR, LF, CRLF only)\n  PCRE2's character tables\n  The newline character sequence\n  The compile time nested parentheses limit\n  The maximum length of the pattern string\n  The extra options bits (none set by default)\n  Which performance optimizations the compiler should apply\n</pre>\nA compile context is also required if you are using custom memory management.\nIf none of these apply, just pass NULL as the context argument of\n<i>pcre2_compile()</i>.\n</p>\n<p>\nA compile context is created, copied, and freed by the following functions:\n<br>\n<br>\n<b>pcre2_compile_context *pcre2_compile_context_create(</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>pcre2_compile_context *pcre2_compile_context_copy(</b>\n<b>  pcre2_compile_context *<i>ccontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_compile_context_free(pcre2_compile_context *<i>ccontext</i>);</b>\n<br>\n<br>\nA compile context is created with default values for its parameters. These can\nbe changed by calling the following functions, which return 0 on success, or\nPCRE2_ERROR_BADDATA if invalid data is detected.\n<br>\n<br>\n<b>int pcre2_set_bsr(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\nThe value must be PCRE2_BSR_ANYCRLF, to specify that \\R matches only CR, LF,\nor CRLF, or PCRE2_BSR_UNICODE, to specify that \\R matches any Unicode line\nending sequence. The value is used by the JIT compiler and by the two\ninterpreted matching functions, <i>pcre2_match()</i> and\n<i>pcre2_dfa_match()</i>.\n<br>\n<br>\n<b>int pcre2_set_character_tables(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  const uint8_t *<i>tables</i>);</b>\n<br>\n<br>\nThe value must be the result of a call to <b>pcre2_maketables()</b>, whose only\nargument is a general context. This function builds a set of character tables\nin the current locale.\n<br>\n<br>\n<b>int pcre2_set_compile_extra_options(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>extra_options</i>);</b>\n<br>\n<br>\nAs PCRE2 has developed, almost all the 32 option bits that are available in\nthe <i>options</i> argument of <b>pcre2_compile()</b> have been used up. To avoid\nrunning out, the compile context contains a set of extra option bits which are\nused for some newer, assumed rarer, options. This function sets those bits. It\nalways sets all the bits (either on or off). It does not modify any existing\nsetting. The available options are defined in the section entitled \"Extra\ncompile options\"\n<a href=\"#extracompileoptions\">below.</a>\n<br>\n<br>\n<b>int pcre2_set_max_pattern_length(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  PCRE2_SIZE <i>value</i>);</b>\n<br>\n<br>\nThis sets a maximum length, in code units, for any pattern string that is\ncompiled with this context. If the pattern is longer, an error is generated.\nThis facility is provided so that applications that accept patterns from\nexternal sources can limit their size. The default is the largest number that a\nPCRE2_SIZE variable can hold, which is effectively unlimited.\n<br>\n<br>\n<b>int pcre2_set_max_pattern_compiled_length(</b>\n<b>  pcre2_compile_context *<i>ccontext</i>, PCRE2_SIZE <i>value</i>);</b>\n<br>\n<br>\nThis sets a maximum size, in bytes, for the memory needed to hold the compiled\nversion of a pattern that is compiled with this context. If the pattern needs\nmore memory, an error is generated. This facility is provided so that\napplications that accept patterns from external sources can limit the amount of\nmemory they use. The default is the largest number that a PCRE2_SIZE variable\ncan hold, which is effectively unlimited.\n<br>\n<br>\n<b>int pcre2_set_max_varlookbehind(pcre2_compile_contest *<i>ccontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\nThis sets a maximum length for the number of characters matched by a\nvariable-length lookbehind assertion. The default is set when PCRE2 is built,\nwith the ultimate default being 255, the same as Perl. Lookbehind assertions\nwithout a bounding length are not supported.\n<br>\n<br>\n<b>int pcre2_set_newline(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\nThis specifies which characters or character sequences are to be recognized as\nnewlines. The value must be one of PCRE2_NEWLINE_CR (carriage return only),\nPCRE2_NEWLINE_LF (linefeed only), PCRE2_NEWLINE_CRLF (the two-character\nsequence CR followed by LF), PCRE2_NEWLINE_ANYCRLF (any of the above),\nPCRE2_NEWLINE_ANY (any Unicode newline sequence), or PCRE2_NEWLINE_NUL (the\nNUL character, that is a binary zero).\n</p>\n<p>\nA pattern can override the value set in the compile context by starting with a\nsequence such as (*CRLF). See the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\npage for details.\n</p>\n<p>\nWhen a pattern is compiled with the PCRE2_EXTENDED or PCRE2_EXTENDED_MORE\noption, the newline convention affects the recognition of the end of internal\ncomments starting with #. The value is saved with the compiled pattern for\nsubsequent use by the JIT compiler and by the two interpreted matching\nfunctions, <i>pcre2_match()</i> and <i>pcre2_dfa_match()</i>.\n<br>\n<br>\n<b>int pcre2_set_parens_nest_limit(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\nThis parameter adjusts the limit, set when PCRE2 is built (default 250), on the\ndepth of parenthesis nesting in a pattern. This limit stops rogue patterns\nusing up too much system stack when being compiled. The limit applies to\nparentheses of all kinds, not just capturing parentheses.\n<br>\n<br>\n<b>int pcre2_set_compile_recursion_guard(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  int (*<i>guard_function</i>)(uint32_t, void *), void *<i>user_data</i>);</b>\n<br>\n<br>\nThere is at least one application that runs PCRE2 in threads with very limited\nsystem stack, where running out of stack is to be avoided at all costs. The\nparenthesis limit above cannot take account of how much stack is actually\navailable during compilation. For a finer control, you can supply a function\nthat is called whenever <b>pcre2_compile()</b> starts to compile a parenthesized\npart of a pattern. This function can check the actual stack size (or anything\nelse that it wants to, of course).\n</p>\n<p>\nThe first argument to the callout function gives the current depth of\nnesting, and the second is user data that is set up by the last argument of\n<b>pcre2_set_compile_recursion_guard()</b>. The callout function should return\nzero if all is well, or non-zero to force an error.\n<br>\n<br>\n<b>int pcre2_set_optimize(pcre2_compile_context *<i>ccontext</i>,</b>\n<b>  uint32_t <i>directive</i>);</b>\n<br>\n<br>\nPCRE2 can apply various performance optimizations during compilation, in order\nto make matching faster. For example, the compiler might convert some regex\nconstructs into an equivalent construct which <b>pcre2_match()</b> can execute\nfaster. By default, all available optimizations are enabled. However, in rare\ncases, one might wish to disable specific optimizations. For example, if it is\nknown that some optimizations cannot benefit a certain regex, it might be\ndesirable to disable them, in order to speed up compilation.\n</p>\n<p>\nThe permitted values of <i>directive</i> are as follows:\n<pre>\n  PCRE2_OPTIMIZATION_FULL\n</pre>\nEnable all optional performance optimizations. This is the default value.\n<pre>\n  PCRE2_OPTIMIZATION_NONE\n</pre>\nDisable all optional performance optimizations.\n<pre>\n  PCRE2_AUTO_POSSESS\n  PCRE2_AUTO_POSSESS_OFF\n</pre>\nEnable/disable \"auto-possessification\" of variable quantifiers such as * and +.\nThis optimization, for example, turns a+b into a++b in order to avoid\nbacktracks into a+ that can never be successful. However, if callouts are in\nuse, auto-possessification means that some callouts are never taken. You can\ndisable this optimization if you want the matching functions to do a full,\nunoptimized search and run all the callouts.\n<pre>\n  PCRE2_DOTSTAR_ANCHOR\n  PCRE2_DOTSTAR_ANCHOR_OFF\n</pre>\nEnable/disable an optimization that is applied when .* is the first significant\nitem in a top-level branch of a pattern, and all the other branches also start\nwith .* or with \\A or \\G or ^. Such a pattern is automatically anchored if\nPCRE2_DOTALL is set for all the .* items and PCRE2_MULTILINE is not set for any\n^ items. Otherwise, the fact that any match must start either at the start of\nthe subject or following a newline is remembered. Like other optimizations,\nthis can cause callouts to be skipped.\n</p>\n<p>\nDotstar anchor optimization is automatically disabled for .* if it is inside an\natomic group or a capture group that is the subject of a backreference, or if\nthe pattern contains (*PRUNE) or (*SKIP).\n<pre>\n  PCRE2_START_OPTIMIZE\n  PCRE2_START_OPTIMIZE_OFF\n</pre>\nEnable/disable optimizations which cause matching functions to scan the subject\nstring for specific code unit values before attempting a match. For example, if\nit is known that an unanchored match must start with a specific value, the\nmatching code searches the subject for that value, and fails immediately if it\ncannot find it, without actually running the main matching function. This means\nthat a special item such as (*COMMIT) at the start of a pattern is not\nconsidered until after a suitable starting point for the match has been found.\nAlso, when callouts or (*MARK) items are in use, these \"start-up\" optimizations\ncan cause them to be skipped if the pattern is never actually used. The start-up\noptimizations are in effect a pre-scan of the subject that takes place before\nthe pattern is run.\n</p>\n<p>\nDisabling start-up optimizations ensures that in cases where the result is \"no\nmatch\", the callouts do occur, and that items such as (*COMMIT) and (*MARK) are\nconsidered at every possible starting position in the subject string.\n</p>\n<p>\nDisabling start-up optimizations may change the outcome of a matching operation.\nConsider the pattern\n<pre>\n  (*COMMIT)ABC\n</pre>\nWhen this is compiled, PCRE2 records the fact that a match must start with the\ncharacter \"A\". Suppose the subject string is \"DEFABC\". The start-up\noptimization scans along the subject, finds \"A\" and runs the first match\nattempt from there. The (*COMMIT) item means that the pattern must match the\ncurrent starting position, which in this case, it does. However, if the same\nmatch is run without start-up optimizations, the initial scan along the subject\nstring does not happen. The first match attempt is run starting from \"D\" and\nwhen this fails, (*COMMIT) prevents any further matches being tried, so the\noverall result is \"no match\".\n</p>\n<p>\nAnother start-up optimization makes use of a minimum length for a matching\nsubject, which is recorded when possible. Consider the pattern\n<pre>\n  (*MARK:1)B(*MARK:2)(X|Y)\n</pre>\nThe minimum length for a match is two characters. If the subject is \"XXBB\", the\n\"starting character\" optimization skips \"XX\", then tries to match \"BB\", which\nis long enough. In the process, (*MARK:2) is encountered and remembered. When\nthe match attempt fails, the next \"B\" is found, but there is only one character\nleft, so there are no more attempts, and \"no match\" is returned with the \"last\nmark seen\" set to \"2\". Without start-up optimizations, however, matches are\ntried at every possible starting position, including at the end of the subject,\nwhere (*MARK:1) is encountered, but there is no \"B\", so the \"last mark seen\"\nthat is returned is \"1\". In this case, the optimizations do not affect the\noverall match result, which is still \"no match\", but they do affect the\nauxiliary information that is returned.\n<a name=\"matchcontext\"></a></p>\n<h3>\nThe match context\n</h3>\n<p>\nA match context is required if you want to:\n<pre>\n  Set up a callout function\n  Set an offset limit for matching an unanchored pattern\n  Change the limit on the amount of heap used when matching\n  Change the backtracking match limit\n  Change the backtracking depth limit\n  Set custom memory management specifically for the match\n</pre>\nIf none of these apply, just pass NULL as the context argument of\n<b>pcre2_match()</b>, <b>pcre2_dfa_match()</b>, or <b>pcre2_jit_match()</b>.\n</p>\n<p>\nA match context is created, copied, and freed by the following functions:\n<br>\n<br>\n<b>pcre2_match_context *pcre2_match_context_create(</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>pcre2_match_context *pcre2_match_context_copy(</b>\n<b>  pcre2_match_context *<i>mcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_match_context_free(pcre2_match_context *<i>mcontext</i>);</b>\n<br>\n<br>\nA match context is created with default values for its parameters. These can\nbe changed by calling the following functions, which return 0 on success, or\nPCRE2_ERROR_BADDATA if invalid data is detected.\n<br>\n<br>\n<b>int pcre2_set_callout(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  int (*<i>callout_function</i>)(pcre2_callout_block *, void *),</b>\n<b>  void *<i>callout_data</i>);</b>\n<br>\n<br>\nThis sets up a callout function for PCRE2 to call at specified points\nduring a matching operation. Details are given in the\n<a href=\"pcre2callout.html\"><b>pcre2callout</b></a>\ndocumentation.\n<br>\n<br>\n<b>int pcre2_set_substitute_callout(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  int (*<i>callout_function</i>)(pcre2_substitute_callout_block *, void *),</b>\n<b>  void *<i>callout_data</i>);</b>\n<br>\n<br>\nThis sets up a callout function for PCRE2 to call after each substitution\nmade by <b>pcre2_substitute()</b>. Details are given in the section entitled\n\"Creating a new string with substitutions\"\n<a href=\"#substitutions\">below.</a>\n<br>\n<br>\n<b>int pcre2_set_substitute_case_callout(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  PCRE2_SIZE (*<i>callout_function</i>)(PCRE2_SPTR, PCRE2_SIZE,</b>\n<b>                                 PCRE2_UCHAR *, PCRE2_SIZE,</b>\n<b>                                 int, void *),</b>\n<b>  void *<i>callout_data</i>);</b>\n<br>\n<br>\nThis sets up a callout function for PCRE2 to call when performing case\ntransformations inside <b>pcre2_substitute()</b>. Details are given in the\nsection entitled \"Creating a new string with substitutions\"\n<a href=\"#substitutions\">below.</a>\n<br>\n<br>\n<b>int pcre2_set_offset_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  PCRE2_SIZE <i>value</i>);</b>\n<br>\n<br>\nThe <i>offset_limit</i> parameter limits how far an unanchored search can\nadvance in the subject string. The default value is PCRE2_UNSET. The\n<b>pcre2_match()</b> and <b>pcre2_dfa_match()</b> functions return\nPCRE2_ERROR_NOMATCH if a match with a starting point before or at the given\noffset is not found. The <b>pcre2_substitute()</b> function makes no more\nsubstitutions.\n</p>\n<p>\nFor example, if the pattern /abc/ is matched against \"123abc\" with an offset\nlimit less than 3, the result is PCRE2_ERROR_NOMATCH. A match can never be\nfound if the <i>startoffset</i> argument of <b>pcre2_match()</b>,\n<b>pcre2_dfa_match()</b>, or <b>pcre2_substitute()</b> is greater than the offset\nlimit set in the match context.\n</p>\n<p>\nWhen using this facility, you must set the PCRE2_USE_OFFSET_LIMIT option when\ncalling <b>pcre2_compile()</b> so that when JIT is in use, different code can be\ncompiled. If a match is started with a non-default match limit when\nPCRE2_USE_OFFSET_LIMIT is not set, an error is generated.\n</p>\n<p>\nThe offset limit facility can be used to track progress when searching large\nsubject strings or to limit the extent of global substitutions. See also the\nPCRE2_FIRSTLINE option, which requires a match to start before or at the first\nnewline that follows the start of matching in the subject. If this is set with\nan offset limit, a match must occur in the first line and also within the\noffset limit. In other words, whichever limit comes first is used.\n<br>\n<br>\n<b>int pcre2_set_heap_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\nThe <i>heap_limit</i> parameter specifies, in units of kibibytes (1024 bytes),\nthe maximum amount of heap memory that <b>pcre2_match()</b> may use to hold\nbacktracking information when running an interpretive match. This limit also\napplies to <b>pcre2_dfa_match()</b>, which may use the heap when processing\npatterns with a lot of nested pattern recursion or lookarounds or atomic\ngroups. This limit does not apply to matching with the JIT optimization, which\nhas its own memory control arrangements (see the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\ndocumentation for more details). If the limit is reached, the negative error\ncode PCRE2_ERROR_HEAPLIMIT is returned. The default limit can be set when PCRE2\nis built; if it is not, the default is set very large and is essentially\nunlimited.\n</p>\n<p>\nA value for the heap limit may also be supplied by an item at the start of a\npattern of the form\n<pre>\n  (*LIMIT_HEAP=ddd)\n</pre>\nwhere ddd is a decimal number. However, such a setting is ignored unless ddd is\nless than the limit set by the caller of <b>pcre2_match()</b> or, if no such\nlimit is set, less than the default.\n</p>\n<p>\nThe <b>pcre2_match()</b> function always needs some heap memory, so setting a\nvalue of zero guarantees a \"heap limit exceeded\" error. Details of how\n<b>pcre2_match()</b> uses the heap are given in the\n<a href=\"pcre2perform.html\"><b>pcre2perform</b></a>\ndocumentation.\n</p>\n<p>\nFor <b>pcre2_dfa_match()</b>, a vector on the system stack is used when\nprocessing pattern recursions, lookarounds, or atomic groups, and only if this\nis not big enough is heap memory used. In this case, setting a value of zero\ndisables the use of the heap.\n<br>\n<br>\n<b>int pcre2_set_match_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\nThe <i>match_limit</i> parameter provides a means of preventing PCRE2 from using\nup too many computing resources when processing patterns that are not going to\nmatch, but which have a very large number of possibilities in their search\ntrees. The classic example is a pattern that uses nested unlimited repeats.\n</p>\n<p>\nThere is an internal counter in <b>pcre2_match()</b> that is incremented each\ntime round its main matching loop. If this value reaches the match limit,\n<b>pcre2_match()</b> returns the negative value PCRE2_ERROR_MATCHLIMIT. This has\nthe effect of limiting the amount of backtracking that can take place. For\npatterns that are not anchored, the count restarts from zero for each position\nin the subject string. This limit also applies to <b>pcre2_dfa_match()</b>,\nthough the counting is done in a different way.\n</p>\n<p>\nWhen <b>pcre2_match()</b> is called with a pattern that was successfully\nprocessed by <b>pcre2_jit_compile()</b>, the way in which matching is executed\nis entirely different. However, there is still the possibility of runaway\nmatching that goes on for a very long time, and so the <i>match_limit</i> value\nis also used in this case (but in a different way) to limit how long the\nmatching can continue.\n</p>\n<p>\nThe default value for the limit can be set when PCRE2 is built; the default is\n10 million, which handles all but the most extreme cases. A value for the match\nlimit may also be supplied by an item at the start of a pattern of the form\n<pre>\n  (*LIMIT_MATCH=ddd)\n</pre>\nwhere ddd is a decimal number. However, such a setting is ignored unless ddd is\nless than the limit set by the caller of <b>pcre2_match()</b> or\n<b>pcre2_dfa_match()</b> or, if no such limit is set, less than the default.\n<br>\n<br>\n<b>int pcre2_set_depth_limit(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  uint32_t <i>value</i>);</b>\n<br>\n<br>\nThis parameter limits the depth of nested backtracking in <b>pcre2_match()</b>.\nEach time a nested backtracking point is passed, a new memory frame is used\nto remember the state of matching at that point. Thus, this parameter\nindirectly limits the amount of memory that is used in a match. However,\nbecause the size of each memory frame depends on the number of capturing\nparentheses, the actual memory limit varies from pattern to pattern. This limit\nwas more useful in versions before 10.30, where function recursion was used for\nbacktracking.\n</p>\n<p>\nThe depth limit is not relevant, and is ignored, when matching is done using\nJIT compiled code. However, it is supported by <b>pcre2_dfa_match()</b>, which\nuses it to limit the depth of nested internal recursive function calls that\nimplement atomic groups, lookaround assertions, and pattern recursions. This\nlimits, indirectly, the amount of system stack that is used. It was more useful\nin versions before 10.32, when stack memory was used for local workspace\nvectors for recursive function calls. From version 10.32, only local variables\nare allocated on the stack and as each call uses only a few hundred bytes, even\na small stack can support quite a lot of recursion.\n</p>\n<p>\nIf the depth of internal recursive function calls is great enough, local\nworkspace vectors are allocated on the heap from version 10.32 onwards, so the\ndepth limit also indirectly limits the amount of heap memory that is used. A\nrecursive pattern such as /(.(?2))((?1)|)/, when matched to a very long string\nusing <b>pcre2_dfa_match()</b>, can use a great deal of memory. However, it is\nprobably better to limit heap usage directly by calling\n<b>pcre2_set_heap_limit()</b>.\n</p>\n<p>\nThe default value for the depth limit can be set when PCRE2 is built; if it is\nnot, the default is set to the same value as the default for the match limit.\nIf the limit is exceeded, <b>pcre2_match()</b> or <b>pcre2_dfa_match()</b>\nreturns PCRE2_ERROR_DEPTHLIMIT. A value for the depth limit may also be\nsupplied by an item at the start of a pattern of the form\n<pre>\n  (*LIMIT_DEPTH=ddd)\n</pre>\nwhere ddd is a decimal number. However, such a setting is ignored unless ddd is\nless than the limit set by the caller of <b>pcre2_match()</b> or\n<b>pcre2_dfa_match()</b> or, if no such limit is set, less than the default.\n</p>\n<h2><a name=\"SEC19\" href=\"#TOC1\">CHECKING BUILD-TIME OPTIONS</a></h2>\n<p>\n<b>int pcre2_config(uint32_t <i>what</i>, void *<i>where</i>);</b>\n</p>\n<p>\nThe function <b>pcre2_config()</b> makes it possible for a PCRE2 client to find\nthe value of certain configuration parameters and to discover which optional\nfeatures have been compiled into the PCRE2 library. The\n<a href=\"pcre2build.html\"><b>pcre2build</b></a>\ndocumentation has more details about these features.\n</p>\n<p>\nThe first argument for <b>pcre2_config()</b> specifies which information is\nrequired. The second argument is a pointer to memory into which the information\nis placed. If NULL is passed, the function returns the amount of memory that is\nneeded for the requested information. For calls that return numerical values,\nthe value is in bytes; when requesting these values, <i>where</i> should point\nto appropriately aligned memory. For calls that return strings, the required\nlength is given in code units, not counting the terminating zero.\n</p>\n<p>\nWhen requesting information, the returned value from <b>pcre2_config()</b> is\nnon-negative on success, or the negative error code PCRE2_ERROR_BADOPTION if\nthe value in the first argument is not recognized. The following information is\navailable:\n<pre>\n  PCRE2_CONFIG_BSR\n</pre>\nThe output is a uint32_t integer whose value indicates what character\nsequences the \\R escape sequence matches by default. A value of\nPCRE2_BSR_UNICODE means that \\R matches any Unicode line ending sequence; a\nvalue of PCRE2_BSR_ANYCRLF means that \\R matches only CR, LF, or CRLF. The\ndefault can be overridden when a pattern is compiled.\n<pre>\n  PCRE2_CONFIG_COMPILED_WIDTHS\n</pre>\nThe output is a uint32_t integer whose lower bits indicate which code unit\nwidths were selected when PCRE2 was built. The 1-bit indicates 8-bit support,\nand the 2-bit and 4-bit indicate 16-bit and 32-bit support, respectively.\n<pre>\n  PCRE2_CONFIG_DEPTHLIMIT\n</pre>\nThe output is a uint32_t integer that gives the default limit for the depth of\nnested backtracking in <b>pcre2_match()</b> or the depth of nested recursions,\nlookarounds, and atomic groups in <b>pcre2_dfa_match()</b>. Further details are\ngiven with <b>pcre2_set_depth_limit()</b> above.\n<pre>\n  PCRE2_CONFIG_EFFECTIVE_LINKSIZE\n</pre>\nThe output is a uint32_t integer that contains the number of bytes the library\nuses for internal linkage in compiled regular expressions. Its value is derived\nfrom the value that was provided at build time and that is described below by\nPCRE2_CONFIG_LINKSIZE.\n<pre>\n  PCRE2_CONFIG_HEAPLIMIT\n</pre>\nThe output is a uint32_t integer that gives, in kibibytes, the default limit\nfor the amount of heap memory used by <b>pcre2_match()</b> or\n<b>pcre2_dfa_match()</b>. Further details are given with\n<b>pcre2_set_heap_limit()</b> above.\n<pre>\n  PCRE2_CONFIG_JIT\n</pre>\nThe output is a uint32_t integer that is set to one if support for just-in-time\ncompiling is included in the library; otherwise it is set to zero. Note that\nhaving the support in the library does not guarantee that JIT will be used for\nany given match, and neither does it guarantee that JIT will actually be able\nto function, because it may not be able to allocate executable memory in some\nenvironments. There is a special call to <b>pcre2_jit_compile()</b> that can be\nused to check this. See the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\ndocumentation for more details.\n<pre>\n  PCRE2_CONFIG_JITTARGET\n</pre>\nThe <i>where</i> argument should point to a code-unit-aligned buffer. All\nprevious versions of PCRE2 have required no more than 128 code units of buffer\ncapacity. However, this requirement is not guaranteed to be maintained, so\napplications should call <b>pcre2_config()</b> with <b>where</b> set to NULL to\nreceive the required buffer size, then assert or allocate a suitably-size buffer\nfor a second call to <b>pcre2_config()</b>. The buffer is filled with a string\nthat contains the name of the architecture for which the JIT compiler is\nconfigured at build time, for example, a 64-bit ARM CPU that supports the\nArmv8.1 extension writes \"ARM-64 (LSE) 64bit (little endian + unaligned)\". If\nJIT support is not available, PCRE2_ERROR_BADOPTION is returned; otherwise the\nnumber of code units used is returned. This is the length of the string plus one\nunit for the terminating zero.\n<pre>\n  PCRE2_CONFIG_LINKSIZE\n</pre>\nThe output is a uint32_t integer that contains the number of bytes the library\nwas instructed to use for internal linkage in compiled regular expressions.\nWhen PCRE2 is configured, the value can be set to 2, 3, or 4, with the default\nbeing 2 for most libraries.\n</p>\n<p>\nThe actual number of bytes used depends on the size of the code units that the\nlibrary supports and can be higher. See PCRE2_CONFIG_EFFECTIVE_LINKSIZE above\nfor details.\n</p>\n<p>\nThe default value of 2 for the 8-bit and 16-bit libraries is sufficient for all\nbut the most massive patterns, since it allows the size of the compiled pattern\nto be up to 65535 code units. Larger values allow larger regular expressions to\nbe compiled by those two libraries, but at the expense of slower matching.\n<pre>\n  PCRE2_CONFIG_MATCHLIMIT\n</pre>\nThe output is a uint32_t integer that gives the default match limit for\n<b>pcre2_match()</b>. Further details are given with\n<b>pcre2_set_match_limit()</b> above.\n<pre>\n  PCRE2_CONFIG_NEWLINE\n</pre>\nThe output is a uint32_t integer whose value specifies the default character\nsequence that is recognized as meaning \"newline\". The values are:\n<pre>\n  PCRE2_NEWLINE_CR       Carriage return (CR)\n  PCRE2_NEWLINE_LF       Linefeed (LF)\n  PCRE2_NEWLINE_CRLF     Carriage return, linefeed (CRLF)\n  PCRE2_NEWLINE_ANY      Any Unicode line ending\n  PCRE2_NEWLINE_ANYCRLF  Any of CR, LF, or CRLF\n  PCRE2_NEWLINE_NUL      The NUL character (binary zero)\n</pre>\nThe default should normally correspond to the standard sequence for your\noperating system.\n<pre>\n  PCRE2_CONFIG_NEVER_BACKSLASH_C\n</pre>\nThe output is a uint32_t integer that is set to one if the use of \\C was\npermanently disabled when PCRE2 was built; otherwise it is set to zero.\n<pre>\n  PCRE2_CONFIG_PARENSLIMIT\n</pre>\nThe output is a uint32_t integer that gives the maximum depth of nesting\nof parentheses (of any kind) in a pattern. This limit is imposed to cap the\namount of system stack used when a pattern is compiled. It is specified when\nPCRE2 is built; the default is 250. This limit does not take into account the\nstack that may already be used by the calling application. For finer control\nover compilation stack usage, see <b>pcre2_set_compile_recursion_guard()</b>.\n<pre>\n  PCRE2_CONFIG_STACKRECURSE\n</pre>\nThis parameter is obsolete and should not be used in new code. The output is a\nuint32_t integer that is always set to zero.\n<pre>\n  PCRE2_CONFIG_TABLES_LENGTH\n</pre>\nThe output is a uint32_t integer that gives the length of PCRE2's character\nprocessing tables in bytes. For details of these tables see the\n<a href=\"#localesupport\">section on locale support</a>\nbelow.\n<pre>\n  PCRE2_CONFIG_UNICODE_VERSION\n</pre>\nThe <i>where</i> argument should point to a code-unit-aligned buffer. All\nprevious versions of PCRE2 have required no more than 24 code units of buffer\ncapacity. However, applications should call <b>pcre2_config()</b> with\n<b>where</b> set to NULL to receive the required buffer size, then assert or\nallocate a suitably-size buffer for a second call to <b>pcre2_config()</b>. If\nPCRE2 has been compiled without Unicode support, the buffer is filled with the\ntext \"Unicode not supported\". Otherwise, the Unicode version string (for\nexample, \"8.0.0\") is written. The number of code units used is returned. This is\nthe length of the string plus one unit for the terminating zero.\n<pre>\n  PCRE2_CONFIG_UNICODE\n</pre>\nThe output is a uint32_t integer that is set to one if Unicode support is\navailable; otherwise it is set to zero. Unicode support implies UTF support.\n<pre>\n  PCRE2_CONFIG_VERSION\n</pre>\nThe <i>where</i> argument should point to a code-unit-aligned buffer. All\nprevious versions of PCRE2 have required no more than 24 code units of buffer\ncapacity. However, applications should call <b>pcre2_config()</b> with\n<b>where</b> set to NULL to receive the required buffer size, then assert or\nallocate a suitably-size buffer for a second call to <b>pcre2_config()</b>. The\nbuffer is filled with the PCRE2 version string, zero-terminated. The number of\ncode units used is returned. This is the length of the string plus one unit for\nthe terminating zero.\n<a name=\"compiling\"></a></p>\n<h2><a name=\"SEC20\" href=\"#TOC1\">COMPILING A PATTERN</a></h2>\n<p>\n<b>pcre2_code *pcre2_compile(PCRE2_SPTR <i>pattern</i>, PCRE2_SIZE <i>length</i>,</b>\n<b>  uint32_t <i>options</i>, int *<i>errorcode</i>, PCRE2_SIZE *<i>erroroffset,</i></b>\n<b>  pcre2_compile_context *<i>ccontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_code_free(pcre2_code *<i>code</i>);</b>\n<br>\n<br>\n<b>pcre2_code *pcre2_code_copy(const pcre2_code *<i>code</i>);</b>\n<br>\n<br>\n<b>pcre2_code *pcre2_code_copy_with_tables(const pcre2_code *<i>code</i>);</b>\n</p>\n<p>\nThe <b>pcre2_compile()</b> function compiles a pattern into an internal form.\nThe pattern is defined by a pointer to a string of code units and a length in\ncode units. If the pattern is zero-terminated, the length can be specified as\nPCRE2_ZERO_TERMINATED. A NULL pattern pointer with a length of zero is treated\nas an empty string (NULL with a non-zero length causes an error return). The\nfunction returns a pointer to a block of memory that contains the compiled\npattern and related data, or NULL if an error occurred.\n</p>\n<p>\nIf the compile context argument <i>ccontext</i> is NULL, memory for the compiled\npattern is obtained by calling <b>malloc()</b>. Otherwise, it is obtained from\nthe same memory function that was used for the compile context. The caller must\nfree the memory by calling <b>pcre2_code_free()</b> when it is no longer needed.\nIf <b>pcre2_code_free()</b> is called with a NULL argument, it returns\nimmediately, without doing anything.\n</p>\n<p>\nThe function <b>pcre2_code_copy()</b> makes a copy of the compiled code in new\nmemory, using the same memory allocator as was used for the original. However,\nif the code has been processed by the JIT compiler (see\n<a href=\"#jitcompiling\">below),</a>\nthe JIT information cannot be copied (because it is position-dependent).\nThe new copy can initially be used only for non-JIT matching, though it can be\npassed to <b>pcre2_jit_compile()</b> if required. If <b>pcre2_code_copy()</b> is\ncalled with a NULL argument, it returns NULL.\n</p>\n<p>\nThe <b>pcre2_code_copy()</b> function provides a way for individual threads in a\nmultithreaded application to acquire a private copy of shared compiled code.\nHowever, it does not make a copy of the character tables used by the compiled\npattern; the new pattern code points to the same tables as the original code.\n(See\n<a href=\"#jitcompiling\">\"Locale Support\"</a>\nbelow for details of these character tables.) In many applications the same\ntables are used throughout, so this behaviour is appropriate. Nevertheless,\nthere are occasions when a copy of a compiled pattern and the relevant tables\nare needed. The <b>pcre2_code_copy_with_tables()</b> provides this facility.\nCopies of both the code and the tables are made, with the new code pointing to\nthe new tables. The memory for the new tables is automatically freed when\n<b>pcre2_code_free()</b> is called for the new copy of the compiled code. If\n<b>pcre2_code_copy_with_tables()</b> is called with a NULL argument, it returns\nNULL.\n</p>\n<p>\nNOTE: When one of the matching functions is called, pointers to the compiled\npattern and the subject string are set in the match data block so that they can\nbe referenced by the substring extraction functions after a successful match.\nAfter running a match, you must not free a compiled pattern or a subject string\nuntil after all operations on the\n<a href=\"#matchdatablock\">match data block</a>\nhave taken place, unless, in the case of the subject string, you have used the\nPCRE2_COPY_MATCHED_SUBJECT option, which is described in the section entitled\n\"Option bits for <b>pcre2_match()</b>\"\n<a href=\"#matchoptions>\">below.</a>\n</p>\n<p>\nThe <i>options</i> argument for <b>pcre2_compile()</b> contains various bit\nsettings that affect the compilation. It should be zero if none of them are\nrequired. The available options are described below. Some of them (in\nparticular, those that are compatible with Perl, but some others as well) can\nalso be set and unset from within the pattern (see the detailed description in\nthe\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation).\n</p>\n<p>\nFor those options that can be different in different parts of the pattern, the\ncontents of the <i>options</i> argument specifies their settings at the start of\ncompilation. The PCRE2_ANCHORED, PCRE2_ENDANCHORED, and PCRE2_NO_UTF_CHECK\noptions can be set at the time of matching as well as at compile time.\n</p>\n<p>\nSome additional options and less frequently required compile-time parameters\n(for example, the newline setting) can be provided in a compile context (as\ndescribed\n<a href=\"#compilecontext\">above).</a>\n</p>\n<p>\nIf <i>errorcode</i> or <i>erroroffset</i> is NULL, <b>pcre2_compile()</b> returns\nNULL immediately. Otherwise, the variables to which these point are set to an\nerror code and an offset (number of code units) within the pattern,\nrespectively, when <b>pcre2_compile()</b> returns NULL because a compilation\nerror has occurred.\n</p>\n<p>\nThere are over 100 positive error codes that <b>pcre2_compile()</b> may return\nif it finds an error in the pattern. There are also some negative error codes\nthat are used for invalid UTF strings when validity checking is in force. These\nare the same as given by <b>pcre2_match()</b> and <b>pcre2_dfa_match()</b>, and\nare described in the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\ndocumentation. There is no separate documentation for the positive error codes,\nbecause the textual error messages that are obtained by calling the\n<b>pcre2_get_error_message()</b> function (see \"Obtaining a textual error\nmessage\"\n<a href=\"#geterrormessage\">below)</a>\nshould be self-explanatory. Macro names starting with PCRE2_ERROR_ are defined\nfor both positive and negative error codes in <b>pcre2.h</b>. When compilation\nis successful <i>errorcode</i> is set to a value that returns the message \"no\nerror\" if passed to <b>pcre2_get_error_message()</b>.\n</p>\n<p>\nThe value returned in <i>erroroffset</i> is an indication of where in the\npattern an error occurred. When there is no error, zero is returned. A non-zero\nvalue is not necessarily the furthest point in the pattern that was read. For\nexample, after the error \"lookbehind assertion is not fixed length\", the error\noffset points to the start of the failing assertion. For an invalid UTF-8 or\nUTF-16 string, the offset is that of the first code unit of the failing\ncharacter.\n</p>\n<p>\nSome errors are not detected until the whole pattern has been scanned; in these\ncases, the offset passed back is the length of the pattern. Note that the\noffset is in code units, not characters, even in a UTF mode. It may sometimes\npoint into the middle of a UTF-8 or UTF-16 character.\n</p>\n<p>\nThis code fragment shows a typical straightforward call to\n<b>pcre2_compile()</b>:\n<pre>\n  pcre2_code *re;\n  PCRE2_SIZE erroffset;\n  int errorcode;\n  re = pcre2_compile(\n    \"^A.*Z\",                /* the pattern */\n    PCRE2_ZERO_TERMINATED,  /* the pattern is zero-terminated */\n    0,                      /* default options */\n    &errorcode,             /* for error code */\n    &erroffset,             /* for error offset */\n    NULL);                  /* no compile context */\n\n</pre>\n</p>\n<h3>\nMain compile options\n</h3>\n<p>\nThe following names for option bits are defined in the <b>pcre2.h</b> header\nfile:\n<pre>\n  PCRE2_ANCHORED\n</pre>\nIf this bit is set, the pattern is forced to be \"anchored\", that is, it is\nconstrained to match only at the first matching point in the string that is\nbeing searched (the \"subject string\"). This effect can also be achieved by\nappropriate constructs in the pattern itself, which is the only way to do it in\nPerl.\n<pre>\n  PCRE2_ALLOW_EMPTY_CLASS\n</pre>\nBy default, for compatibility with Perl, a closing square bracket that\nimmediately follows an opening one is treated as a data character for the\nclass. When PCRE2_ALLOW_EMPTY_CLASS is set, it terminates the class, which\ntherefore contains no characters and so can never match.\n<pre>\n  PCRE2_ALT_BSUX\n</pre>\nThis option request alternative handling of three escape sequences, which\nmakes PCRE2's behaviour more like ECMAscript (aka JavaScript). When it is set:\n</p>\n<p>\n(1) \\U matches an upper case \"U\" character; by default \\U causes a compile\ntime error (Perl uses \\U to upper case subsequent characters).\n</p>\n<p>\n(2) \\u matches a lower case \"u\" character unless it is followed by four\nhexadecimal digits, in which case the hexadecimal number defines the code point\nto match. By default, \\u causes a compile time error (Perl uses it to upper\ncase the following character).\n</p>\n<p>\n(3) \\x matches a lower case \"x\" character unless it is followed by two\nhexadecimal digits, in which case the hexadecimal number defines the code point\nto match. By default, as in Perl, a hexadecimal number is always expected after\n\\x, but it may have one or two digits.\n</p>\n<p>\nECMAscript 6 added additional functionality to \\u. This can be accessed using\nthe PCRE2_EXTRA_ALT_BSUX extra option (see \"Extra compile options\"\n<a href=\"#extracompileoptions\">below).</a>\nNote that this alternative escape handling applies only to patterns. Neither of\nthese options affects the processing of replacement strings passed to\n<b>pcre2_substitute()</b>.\n<pre>\n  PCRE2_ALT_CIRCUMFLEX\n</pre>\nIn multiline mode (when PCRE2_MULTILINE is set), the circumflex metacharacter\nmatches at the start of the subject (unless PCRE2_NOTBOL is set), and also\nafter any internal newline. However, it does not match after a newline at the\nend of the subject, for compatibility with Perl. If you want a multiline\ncircumflex also to match after a terminating newline, you must set\nPCRE2_ALT_CIRCUMFLEX.\n<pre>\n  PCRE2_ALT_EXTENDED_CLASS\n</pre>\nAlters the parsing of character classes to follow the extended syntax\ndescribed by Unicode UTS#18. The PCRE2_ALT_EXTENDED_CLASS option has no impact\non the behaviour of the Perl-specific \"(?[...])\" syntax for extended classes,\nbut instead enables the alternative syntax of extended class behaviour inside\nordinary \"[...]\" character classes. See the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation for details of the character classes supported.\n<pre>\n  PCRE2_ALT_VERBNAMES\n</pre>\nBy default, for compatibility with Perl, the name in any verb sequence such as\n(*MARK:NAME) is any sequence of characters that does not include a closing\nparenthesis. The name is not processed in any way, and it is not possible to\ninclude a closing parenthesis in the name. However, if the PCRE2_ALT_VERBNAMES\noption is set, normal backslash processing is applied to verb names and only an\nunescaped closing parenthesis terminates the name. A closing parenthesis can be\nincluded in a name either as \\) or between \\Q and \\E. If the PCRE2_EXTENDED\nor PCRE2_EXTENDED_MORE option is set with PCRE2_ALT_VERBNAMES, unescaped\nwhite space in verb names is skipped and #-comments are recognized, exactly as\nin the rest of the pattern.\n<pre>\n  PCRE2_AUTO_CALLOUT\n</pre>\nIf this bit is set, <b>pcre2_compile()</b> automatically inserts callout items,\nall with number 255, before each pattern item, except immediately before or\nafter an explicit callout in the pattern. For discussion of the callout\nfacility, see the\n<a href=\"pcre2callout.html\"><b>pcre2callout</b></a>\ndocumentation.\n<pre>\n  PCRE2_CASELESS\n</pre>\nIf this bit is set, letters in the pattern match both upper and lower case\nletters in the subject. It is equivalent to Perl's /i option, and it can be\nchanged within a pattern by a (?i) option setting. If either PCRE2_UTF or\nPCRE2_UCP is set, Unicode properties are used for all characters with more than\none other case, and for all characters whose code points are greater than\nU+007F.\n</p>\n<p>\nNote that there are two ASCII characters, K and S, that, in addition to\ntheir lower case ASCII equivalents, are case-equivalent with U+212A (Kelvin\nsign) and U+017F (long S) respectively. If you do not want this case\nequivalence, you can suppress it by setting PCRE2_EXTRA_CASELESS_RESTRICT.\n</p>\n<p>\nOne language family, Turkish and Azeri, has its own case-insensitivity rules,\nwhich can be selected by setting PCRE2_EXTRA_TURKISH_CASING. This alters the\nbehaviour of the 'i', 'I', U+0130 (capital I with dot above), and U+0131\n(small dotless i) characters.\n</p>\n<p>\nFor lower valued characters with only one other case, a lookup table is used\nfor speed. When neither PCRE2_UTF nor PCRE2_UCP is set, a lookup table is used\nfor all code points less than 256, and higher code points (available only in\n16-bit or 32-bit mode) are treated as not having another case.\n</p>\n<p>\nFrom release 10.45 PCRE2_CASELESS also affects what some of the letter-related\nUnicode property escapes (\\p and \\P) match. The properties Lu (upper case\nletter), Ll (lower case letter), and Lt (title case letter) are all treated as\nLC (cased letter) when PCRE2_CASELESS is set.\n<pre>\n  PCRE2_DOLLAR_ENDONLY\n</pre>\nIf this bit is set, a dollar metacharacter in the pattern matches only at the\nend of the subject string. Without this option, a dollar also matches\nimmediately before a newline at the end of the string (but not before any other\nnewlines). The PCRE2_DOLLAR_ENDONLY option is ignored if PCRE2_MULTILINE is\nset. There is no equivalent to this option in Perl, and no way to set it within\na pattern.\n<pre>\n  PCRE2_DOTALL\n</pre>\nIf this bit is set, a dot metacharacter in the pattern matches any character,\nincluding one that indicates a newline. However, it only ever matches one\ncharacter, even if newlines are coded as CRLF. Without this option, a dot does\nnot match when the current position in the subject is at a newline. This option\nis equivalent to Perl's /s option, and it can be changed within a pattern by a\n(?s) option setting. A negative class such as [^a] always matches newline\ncharacters, and the \\N escape sequence always matches a non-newline character,\nindependent of the setting of PCRE2_DOTALL.\n<pre>\n  PCRE2_DUPNAMES\n</pre>\nIf this bit is set, names used to identify capture groups need not be unique.\nThis can be helpful for certain types of pattern when it is known that only one\ninstance of the named group can ever be matched. There are more details of\nnamed capture groups below; see also the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation.\n<pre>\n  PCRE2_ENDANCHORED\n</pre>\nIf this bit is set, the end of any pattern match must be right at the end of\nthe string being searched (the \"subject string\"). If the pattern match\nsucceeds by reaching (*ACCEPT), but does not reach the end of the subject, the\nmatch fails at the current starting point. For unanchored patterns, a new match\nis then tried at the next starting point. However, if the match succeeds by\nreaching the end of the pattern, but not the end of the subject, backtracking\noccurs and an alternative match may be found. Consider these two patterns:\n<pre>\n  .(*ACCEPT)|..\n  .|..\n</pre>\nIf matched against \"abc\" with PCRE2_ENDANCHORED set, the first matches \"c\"\nwhereas the second matches \"bc\". The effect of PCRE2_ENDANCHORED can also be\nachieved by appropriate constructs in the pattern itself, which is the only way\nto do it in Perl.\n</p>\n<p>\nFor DFA matching with <b>pcre2_dfa_match()</b>, PCRE2_ENDANCHORED applies only\nto the first (that is, the longest) matched string. Other parallel matches,\nwhich are necessarily substrings of the first one, must obviously end before\nthe end of the subject.\n<pre>\n  PCRE2_EXTENDED\n</pre>\nIf this bit is set, most white space characters in the pattern are totally\nignored except when escaped, inside a character class, or inside a \\Q...\\E\nsequence. However, white space is not allowed within sequences such as (?&#62; that\nintroduce various parenthesized groups, nor within numerical quantifiers such\nas {1,3}. Ignorable white space is permitted between an item and a following\nquantifier and between a quantifier and a following + that indicates\npossessiveness. PCRE2_EXTENDED is equivalent to Perl's /x option, and it can be\nchanged within a pattern by a (?x) option setting.\n</p>\n<p>\nWhen PCRE2 is compiled without Unicode support, PCRE2_EXTENDED recognizes as\nwhite space only those characters with code points less than 256 that are\nflagged as white space in its low-character table. The table is normally\ncreated by\n<a href=\"pcre2_maketables.html\"><b>pcre2_maketables()</b>,</a>\nwhich uses the <b>isspace()</b> function to identify space characters. In most\nASCII environments, the relevant characters are those with code points 0x0009\n(tab), 0x000A (linefeed), 0x000B (vertical tab), 0x000C (formfeed), 0x000D\n(carriage return), and 0x0020 (space).\n</p>\n<p>\nWhen PCRE2 is compiled with Unicode support, in addition to these characters,\nfive more Unicode \"Pattern White Space\" characters are recognized by\nPCRE2_EXTENDED. These are U+0085 (next line), U+200E (left-to-right mark),\nU+200F (right-to-left mark), U+2028 (line separator), and U+2029 (paragraph\nseparator). This set of characters is the same as recognized by Perl's /x\noption. Note that the horizontal and vertical space characters that are matched\nby the \\h and \\v escapes in patterns are a much bigger set.\n</p>\n<p>\nAs well as ignoring most white space, PCRE2_EXTENDED also causes characters\nbetween an unescaped # outside a character class and the next newline,\ninclusive, to be ignored, which makes it possible to include comments inside\ncomplicated patterns. Note that the end of this type of comment is a literal\nnewline sequence in the pattern; escape sequences that happen to represent a\nnewline do not count.\n</p>\n<p>\nWhich characters are interpreted as newlines can be specified by a setting in\nthe compile context that is passed to <b>pcre2_compile()</b> or by a special\nsequence at the start of the pattern, as described in the section entitled\n<a href=\"pcre2pattern.html#newlines\">\"Newline conventions\"</a>\nin the <b>pcre2pattern</b> documentation. A default is defined when PCRE2 is\nbuilt.\n<pre>\n  PCRE2_EXTENDED_MORE\n</pre>\nThis option has the effect of PCRE2_EXTENDED, but, in addition, unescaped space\nand horizontal tab characters are ignored inside a character class. Note: only\nthese two characters are ignored, not the full set of pattern white space\ncharacters that are ignored outside a character class. PCRE2_EXTENDED_MORE is\nequivalent to Perl's /xx option, and it can be changed within a pattern by a\n(?xx) option setting.\n<pre>\n  PCRE2_FIRSTLINE\n</pre>\nIf this option is set, the start of an unanchored pattern match must be before\nor at the first newline in the subject string following the start of matching,\nthough the matched text may continue over the newline. If <i>startoffset</i> is\nnon-zero, the limiting newline is not necessarily the first newline in the\nsubject. For example, if the subject string is \"abc\\nxyz\" (where \\n\nrepresents a single-character newline) a pattern match for \"yz\" succeeds with\nPCRE2_FIRSTLINE if <i>startoffset</i> is greater than 3. See also\nPCRE2_USE_OFFSET_LIMIT, which provides a more general limiting facility. If\nPCRE2_FIRSTLINE is set with an offset limit, a match must occur in the first\nline and also within the offset limit. In other words, whichever limit comes\nfirst is used. This option has no effect for anchored patterns.\n<pre>\n  PCRE2_LITERAL\n</pre>\nIf this option is set, all meta-characters in the pattern are disabled, and it\nis treated as a literal string. Matching literal strings with a regular\nexpression engine is not the most efficient way of doing it. If you are doing a\nlot of literal matching and are worried about efficiency, you should consider\nusing other approaches. The only other main options that are allowed with\nPCRE2_LITERAL are: PCRE2_ANCHORED, PCRE2_ENDANCHORED, PCRE2_AUTO_CALLOUT,\nPCRE2_CASELESS, PCRE2_FIRSTLINE, PCRE2_MATCH_INVALID_UTF,\nPCRE2_NO_START_OPTIMIZE, PCRE2_NO_UTF_CHECK, PCRE2_UTF, and\nPCRE2_USE_OFFSET_LIMIT. The extra options PCRE2_EXTRA_MATCH_LINE and\nPCRE2_EXTRA_MATCH_WORD are also supported. Any other options cause an error.\n<pre>\n  PCRE2_MATCH_INVALID_UTF\n</pre>\nThis option forces PCRE2_UTF (see below) and also enables support for matching\nby <b>pcre2_match()</b> in subject strings that contain invalid UTF sequences.\nNote, however, that the 16-bit and 32-bit PCRE2 libraries process strings as\nsequences of uint16_t or uint32_t code points. They cannot find valid UTF\nsequences within an arbitrary string of bytes unless such sequences are\nsuitably aligned. This facility is not supported for DFA matching. For details,\nsee the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\ndocumentation.\n<pre>\n  PCRE2_MATCH_UNSET_BACKREF\n</pre>\nIf this option is set, a backreference to an unset capture group matches an\nempty string (by default this causes the current matching alternative to fail).\nA pattern such as (\\1)(a) succeeds when this option is set (assuming it can\nfind an \"a\" in the subject), whereas it fails by default, for Perl\ncompatibility. Setting this option makes PCRE2 behave more like ECMAscript (aka\nJavaScript).\n<pre>\n  PCRE2_MULTILINE\n</pre>\nBy default, for the purposes of matching \"start of line\" and \"end of line\",\nPCRE2 treats the subject string as consisting of a single line of characters,\neven if it actually contains newlines. The \"start of line\" metacharacter (^)\nmatches only at the start of the string, and the \"end of line\" metacharacter\n($) matches only at the end of the string, or before a terminating newline\n(except when PCRE2_DOLLAR_ENDONLY is set). Note, however, that unless\nPCRE2_DOTALL is set, the \"any character\" metacharacter (.) does not match at a\nnewline. This behaviour (for ^, $, and dot) is the same as Perl.\n</p>\n<p>\nWhen PCRE2_MULTILINE it is set, the \"start of line\" and \"end of line\"\nconstructs match immediately following or immediately before internal newlines\nin the subject string, respectively, as well as at the very start and end. This\nis equivalent to Perl's /m option, and it can be changed within a pattern by a\n(?m) option setting. Note that the \"start of line\" metacharacter does not match\nafter a newline at the end of the subject, for compatibility with Perl.\nHowever, you can change this by setting the PCRE2_ALT_CIRCUMFLEX option. If\nthere are no newlines in a subject string, or no occurrences of ^ or $ in a\npattern, setting PCRE2_MULTILINE has no effect.\n<pre>\n  PCRE2_NEVER_BACKSLASH_C\n</pre>\nThis option locks out the use of \\C in the pattern that is being compiled.\nThis escape can cause unpredictable behaviour in UTF-8 or UTF-16 modes, because\nit may leave the current matching point in the middle of a multi-code-unit\ncharacter. This option may be useful in applications that process patterns from\nexternal sources. Note that there is also a build-time option that permanently\nlocks out the use of \\C.\n<pre>\n  PCRE2_NEVER_UCP\n</pre>\nThis option locks out the use of Unicode properties for handling \\B, \\b, \\D,\n\\d, \\S, \\s, \\W, \\w, and some of the POSIX character classes, as described\nfor the PCRE2_UCP option below. In particular, it prevents the creator of the\npattern from enabling this facility by starting the pattern with (*UCP). This\noption may be useful in applications that process patterns from external\nsources. The option combination PCRE2_UCP and PCRE2_NEVER_UCP causes an error.\n<pre>\n  PCRE2_NEVER_UTF\n</pre>\nThis option locks out interpretation of the pattern as UTF-8, UTF-16, or\nUTF-32, depending on which library is in use. In particular, it prevents the\ncreator of the pattern from switching to UTF interpretation by starting the\npattern with (*UTF). This option may be useful in applications that process\npatterns from external sources. The combination of PCRE2_UTF and\nPCRE2_NEVER_UTF causes an error.\n<pre>\n  PCRE2_NO_AUTO_CAPTURE\n</pre>\nIf this option is set, it disables the use of numbered capturing parentheses in\nthe pattern. Any opening parenthesis that is not followed by ? behaves as if it\nwere followed by ?: but named parentheses can still be used for capturing (and\nthey acquire numbers in the usual way). This is the same as Perl's /n option.\nNote that, when this option is set, references to capture groups\n(backreferences or recursion/subroutine calls) may only refer to named groups,\nthough the reference can be by name or by number.\n<pre>\n  PCRE2_NO_AUTO_POSSESS\n</pre>\nIf this (deprecated) option is set, it disables \"auto-possessification\", which\nis an optimization that, for example, turns a+b into a++b in order to avoid\nbacktracks into a+ that can never be successful. However, if callouts are in\nuse, auto-possessification means that some callouts are never taken. You can\nset this option if you want the matching functions to do a full unoptimized\nsearch and run all the callouts, but it is mainly provided for testing\npurposes.\n</p>\n<p>\nIf a compile context is available, it is recommended to use\n<b>pcre2_set_optimize()</b> with the <i>directive</i> PCRE2_AUTO_POSSESS_OFF rather\nthan the compile option PCRE2_NO_AUTO_POSSESS. Note that PCRE2_NO_AUTO_POSSESS\ntakes precedence over the <b>pcre2_set_optimize()</b> optimization directives\nPCRE2_AUTO_POSSESS and PCRE2_AUTO_POSSESS_OFF.\n<pre>\n  PCRE2_NO_DOTSTAR_ANCHOR\n</pre>\nIf this (deprecated) option is set, it disables an optimization that is applied\nwhen .* is the first significant item in a top-level branch of a pattern, and\nall the other branches also start with .* or with \\A or \\G or ^. The\noptimization is automatically disabled for .* if it is inside an atomic group\nor a capture group that is the subject of a backreference, or if the pattern\ncontains (*PRUNE) or (*SKIP). When the optimization is not disabled, such a\npattern is automatically anchored if PCRE2_DOTALL is set for all the .* items\nand PCRE2_MULTILINE is not set for any ^ items. Otherwise, the fact that any\nmatch must start either at the start of the subject or following a newline is\nremembered. Like other optimizations, this can cause callouts to be skipped.\n(If a compile context is available, it is recommended to use\n<b>pcre2_set_optimize()</b> with the <i>directive</i> PCRE2_DOTSTAR_ANCHOR_OFF\ninstead.)\n<pre>\n  PCRE2_NO_START_OPTIMIZE\n</pre>\nThis is an option whose main effect is at matching time. It does not change\nwhat <b>pcre2_compile()</b> generates, but it does affect the output of the JIT\ncompiler. Setting this option is equivalent to calling\n<b>pcre2_set_optimize()</b> with the <i>directive</i> parameter set to\nPCRE2_START_OPTIMIZE_OFF.\n</p>\n<p>\nThere are a number of optimizations that may occur at the start of a match, in\norder to speed up the process. For example, if it is known that an unanchored\nmatch must start with a specific code unit value, the matching code searches\nthe subject for that value, and fails immediately if it cannot find it, without\nactually running the main matching function. The start-up optimizations are\nin effect a pre-scan of the subject that takes place before the pattern is run.\n</p>\n<p>\nDisabling the start-up optimizations may cause performance to suffer. However,\nthis may be desirable for patterns which contain callouts or items such as\n(*COMMIT) and (*MARK). See the above description of PCRE2_START_OPTIMIZE_OFF\nfor further details.\n<pre>\n  PCRE2_NO_UTF_CHECK\n</pre>\nWhen PCRE2_UTF is set, the validity of the pattern as a UTF string is\nautomatically checked. There are discussions about the validity of\n<a href=\"pcre2unicode.html#utf8strings\">UTF-8 strings,</a>\n<a href=\"pcre2unicode.html#utf16strings\">UTF-16 strings,</a>\nand\n<a href=\"pcre2unicode.html#utf32strings\">UTF-32 strings</a>\nin the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\ndocument. If an invalid UTF sequence is found, <b>pcre2_compile()</b> returns a\nnegative error code.\n</p>\n<p>\nIf you know that your pattern is a valid UTF string, and you want to skip this\ncheck for performance reasons, you can set the PCRE2_NO_UTF_CHECK option. When\nit is set, the effect of passing an invalid UTF string as a pattern is\nundefined. It may cause your program to crash or loop.\n</p>\n<p>\nNote that this option can also be passed to <b>pcre2_match()</b> and\n<b>pcre2_dfa_match()</b>, to suppress UTF validity checking of the subject\nstring.\n</p>\n<p>\nNote also that setting PCRE2_NO_UTF_CHECK at compile time does not disable the\nerror that is given if an escape sequence for an invalid Unicode code point is\nencountered in the pattern. In particular, the so-called \"surrogate\" code\npoints (0xd800 to 0xdfff) are invalid. If you want to allow escape sequences\nsuch as \\x{d800} you can set the PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES extra\noption, as described in the section entitled \"Extra compile options\"\n<a href=\"#extracompileoptions\">below.</a>\nHowever, this is possible only in UTF-8 and UTF-32 modes, because these values\nare not representable in UTF-16.\n<pre>\n  PCRE2_UCP\n</pre>\nThis option has two effects. Firstly, it change the way PCRE2 processes \\B,\n\\b, \\D, \\d, \\S, \\s, \\W, \\w, and some of the POSIX character classes. By\ndefault, only ASCII characters are recognized, but if PCRE2_UCP is set, Unicode\nproperties are used to classify characters. There are some PCRE2_EXTRA\noptions (see below) that add finer control to this behaviour. More details are\ngiven in the section on\n<a href=\"pcre2pattern.html#genericchartypes\">generic character types</a>\nin the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\npage.\n</p>\n<p>\nThe second effect of PCRE2_UCP is to force the use of Unicode properties for\nupper/lower casing operations, even when PCRE2_UTF is not set. This makes it\npossible to process strings in the 16-bit UCS-2 code. This option is available\nonly if PCRE2 has been compiled with Unicode support (which is the default).\n</p>\n<p>\nThe PCRE2_EXTRA_CASELESS_RESTRICT option (see above) restricts caseless\nmatching such that ASCII characters match only ASCII characters and non-ASCII\ncharacters match only non-ASCII characters. The PCRE2_EXTRA_TURKISH_CASING\noption (see above) alters the matching of the 'i' characters to follow their\nbehaviour in Turkish and Azeri languages. For further details on\nPCRE2_EXTRA_CASELESS_RESTRICT and PCRE2_EXTRA_TURKISH_CASING, see the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\npage.\n<pre>\n  PCRE2_UNGREEDY\n</pre>\nThis option inverts the \"greediness\" of the quantifiers so that they are not\ngreedy by default, but become greedy if followed by \"?\". It is not compatible\nwith Perl. It can also be set by a (?U) option setting within the pattern.\n<pre>\n  PCRE2_USE_OFFSET_LIMIT\n</pre>\nThis option must be set for <b>pcre2_compile()</b> if\n<b>pcre2_set_offset_limit()</b> is going to be used to set a non-default offset\nlimit in a match context for matches that use this pattern. An error is\ngenerated if an offset limit is set without this option. For more details, see\nthe description of <b>pcre2_set_offset_limit()</b> in the\n<a href=\"#matchcontext\">section</a>\nthat describes match contexts. See also the PCRE2_FIRSTLINE\noption above.\n<pre>\n  PCRE2_UTF\n</pre>\nThis option causes PCRE2 to regard both the pattern and the subject strings\nthat are subsequently processed as strings of UTF characters instead of\nsingle-code-unit strings. It is available when PCRE2 is built to include\nUnicode support (which is the default). If Unicode support is not available,\nthe use of this option provokes an error. Details of how PCRE2_UTF changes the\nbehaviour of PCRE2 are given in the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\npage. In particular, note that it changes the way PCRE2_CASELESS works.\n<a name=\"extracompileoptions\"></a></p>\n<h3>\nExtra compile options\n</h3>\n<p>\nThe option bits that can be set in a compile context by calling the\n<b>pcre2_set_compile_extra_options()</b> function are as follows:\n<pre>\n  PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK\n</pre>\nSince release 10.38 PCRE2 has forbidden the use of \\K within lookaround\nassertions, following Perl's lead. This option is provided to re-enable the\nprevious behaviour (act in positive lookarounds, ignore in negative ones) in\ncase anybody is relying on it.\n<pre>\n  PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES\n</pre>\nThis option applies when compiling a pattern in UTF-8 or UTF-32 mode. It is\nforbidden in UTF-16 mode, and ignored in non-UTF modes. Unicode \"surrogate\"\ncode points in the range 0xd800 to 0xdfff are used in pairs in UTF-16 to encode\ncode points with values in the range 0x10000 to 0x10ffff. The surrogates cannot\ntherefore be represented in UTF-16. They can be represented in UTF-8 and\nUTF-32, but are defined as invalid code points, and cause errors if encountered\nin a UTF-8 or UTF-32 string that is being checked for validity by PCRE2.\n</p>\n<p>\nThese values also cause errors if encountered in escape sequences such as\n\\x{d912} within a pattern. However, it seems that some applications, when\nusing PCRE2 to check for unwanted characters in UTF-8 strings, explicitly test\nfor the surrogates using escape sequences. The PCRE2_NO_UTF_CHECK option does\nnot disable the error that occurs, because it applies only to the testing of\ninput strings for UTF validity.\n</p>\n<p>\nIf the extra option PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is set, surrogate code\npoint values in UTF-8 and UTF-32 patterns no longer provoke errors and are\nincorporated in the compiled pattern. However, they can only match subject\ncharacters if the matching function is called with PCRE2_NO_UTF_CHECK set.\n<pre>\n  PCRE2_EXTRA_ALT_BSUX\n</pre>\nThe original option PCRE2_ALT_BSUX causes PCRE2 to process \\U, \\u, and \\x in\nthe way that ECMAscript (aka JavaScript) does. Additional functionality was\ndefined by ECMAscript 6; setting PCRE2_EXTRA_ALT_BSUX has the effect of\nPCRE2_ALT_BSUX, but in addition it recognizes \\u{hhh..} as a hexadecimal\ncharacter code, where hhh.. is any number of hexadecimal digits.\n<pre>\n  PCRE2_EXTRA_ASCII_BSD\n</pre>\nThis option forces \\d to match only ASCII digits, even when PCRE2_UCP is set.\nIt can be changed within a pattern by means of the (?aD) option setting.\n<pre>\n  PCRE2_EXTRA_ASCII_BSS\n</pre>\nThis option forces \\s to match only ASCII space characters, even when\nPCRE2_UCP is set. It can be changed within a pattern by means of the (?aS)\noption setting.\n<pre>\n  PCRE2_EXTRA_ASCII_BSW\n</pre>\nThis option forces \\w to match only ASCII word characters, even when PCRE2_UCP\nis set. It can be changed within a pattern by means of the (?aW) option\nsetting.\n<pre>\n  PCRE2_EXTRA_ASCII_DIGIT\n</pre>\nThis option forces the POSIX character classes [:digit:] and [:xdigit:] to\nmatch only ASCII digits, even when PCRE2_UCP is set. It can be changed within\na pattern by means of the (?aT) option setting.\n<pre>\n  PCRE2_EXTRA_ASCII_POSIX\n</pre>\nThis option forces all the POSIX character classes, including [:digit:] and\n[:xdigit:], to match only ASCII characters, even when PCRE2_UCP is set. It can\nbe changed within a pattern by means of the (?aP) option setting, but note that\nthis also sets PCRE2_EXTRA_ASCII_DIGIT in order to ensure that (?-aP) unsets\nall ASCII restrictions for POSIX classes.\n<pre>\n  PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL\n</pre>\nThis is a dangerous option. Use with care. By default, an unrecognized escape\nsuch as \\j or a malformed one such as \\x{2z} causes a compile-time error when\ndetected by <b>pcre2_compile()</b>. Perl is somewhat inconsistent in handling\nsuch items: for example, \\j is treated as a literal \"j\", and non-hexadecimal\ndigits in \\x{} are just ignored, though warnings are given in both cases if\nPerl's warning switch is enabled. However, a malformed octal number after \\o{\nalways causes an error in Perl.\n</p>\n<p>\nIf the PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL extra option is passed to\n<b>pcre2_compile()</b>, all unrecognized or malformed escape sequences are\ntreated as single-character escapes. For example, \\j is a literal \"j\" and\n\\x{2z} is treated as the literal string \"x{2z}\". Setting this option means\nthat typos in patterns may go undetected and have unexpected results. Also note\nthat a sequence such as [\\N{] is interpreted as a malformed attempt at\n[\\N{...}] and so is treated as [N{] whereas [\\N] gives an error because an\nunqualified \\N is a valid escape sequence but is not supported in a character\nclass. To reiterate: this is a dangerous option. Use with great care.\n<pre>\n  PCRE2_EXTRA_CASELESS_RESTRICT\n</pre>\nWhen either PCRE2_UCP or PCRE2_UTF is set, caseless matching follows Unicode\nrules, which allow for more than two cases per character. There are two\ncase-equivalent character sets that contain both ASCII and non-ASCII\ncharacters. The ASCII letter S is case-equivalent to U+017f (long S) and the\nASCII letter K is case-equivalent to U+212a (Kelvin sign). This option disables\nrecognition of case-equivalences that cross the ASCII/non-ASCII boundary. In a\ncaseless match, both characters must either be ASCII or non-ASCII. The option\ncan be changed within a pattern by the (*CASELESS_RESTRICT) or (?r) option\nsettings.\n<pre>\n  PCRE2_EXTRA_ESCAPED_CR_IS_LF\n</pre>\nThere are some legacy applications where the escape sequence \\r in a pattern\nis expected to match a newline. If this option is set, \\r in a pattern is\nconverted to \\n so that it matches a LF (linefeed) instead of a CR (carriage\nreturn) character. The option does not affect a literal CR in the pattern, nor\ndoes it affect CR specified as an explicit code point such as \\x{0D}.\n<pre>\n  PCRE2_EXTRA_MATCH_LINE\n</pre>\nThis option is provided for use by the <b>-x</b> option of <b>pcre2grep</b>. It\ncauses the pattern only to match complete lines. This is achieved by\nautomatically inserting the code for \"^(?:\" at the start of the compiled\npattern and \")$\" at the end. Thus, when PCRE2_MULTILINE is set, the matched\nline may be in the middle of the subject string. This option can be used with\nPCRE2_LITERAL.\n<pre>\n  PCRE2_EXTRA_MATCH_WORD\n</pre>\nThis option is provided for use by the <b>-w</b> option of <b>pcre2grep</b>. It\ncauses the pattern only to match strings that have a word boundary at the start\nand the end. This is achieved by automatically inserting the code for \"\\b(?:\"\nat the start of the compiled pattern and \")\\b\" at the end. The option may be\nused with PCRE2_LITERAL. However, it is ignored if PCRE2_EXTRA_MATCH_LINE is\nalso set.\n<pre>\n  PCRE2_EXTRA_NO_BS0\n</pre>\nIf this option is set (note that its final character is the digit 0) it locks\nout the use of the sequence \\0 unless at least one more octal digit follows.\n<pre>\n  PCRE2_EXTRA_PYTHON_OCTAL\n</pre>\nIf this option is set, PCRE2 follows Python's rules for interpreting octal\nescape sequences. The rules for handling sequences such as \\14, which could\nbe an octal number or a back reference are different. Details are given in the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation.\n<pre>\n  PCRE2_EXTRA_NEVER_CALLOUT\n</pre>\nIf this option is set, PCRE2 treats callouts in the pattern as a syntax error,\nreturning PCRE2_ERROR_CALLOUT_CALLER_DISABLED. This is useful if the application\nknows that a callout will not be provided to <b>pcre2_match()</b>, so that\ncallouts in the pattern are not silently ignored.\n<pre>\n  PCRE2_EXTRA_TURKISH_CASING\n</pre>\nThis option alters case-equivalence of the 'i' letters to follow the\nalphabet used by Turkish and Azeri languages. The option can be changed within\na pattern by the (*TURKISH_CASING) start-of-pattern setting. Either the UTF or\nUCP options must be set. In the 8-bit library, UTF must be set. This option\ncannot be combined with PCRE2_EXTRA_CASELESS_RESTRICT.\n<a name=\"jitcompiling\"></a></p>\n<h2><a name=\"SEC21\" href=\"#TOC1\">JUST-IN-TIME (JIT) COMPILATION</a></h2>\n<p>\n<b>int pcre2_jit_compile(pcre2_code *<i>code</i>, uint32_t <i>options</i>);</b>\n<br>\n<br>\n<b>int pcre2_jit_match(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>\n<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>\n<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>\n<b>  pcre2_match_context *<i>mcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_jit_free_unused_memory(pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>pcre2_jit_stack *pcre2_jit_stack_create(size_t <i>startsize</i>,</b>\n<b>  size_t <i>maxsize</i>, pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_jit_stack_assign(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  pcre2_jit_callback <i>callback_function</i>, void *<i>callback_data</i>);</b>\n<br>\n<br>\n<b>void pcre2_jit_stack_free(pcre2_jit_stack *<i>jit_stack</i>);</b>\n</p>\n<p>\nThese functions provide support for JIT compilation, which, if the just-in-time\ncompiler is available, further processes a compiled pattern into machine code\nthat executes much faster than the <b>pcre2_match()</b> interpretive matching\nfunction. Full details are given in the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\ndocumentation.\n</p>\n<p>\nJIT compilation is a heavyweight optimization. It can take some time for\npatterns to be analyzed, and for one-off matches and simple patterns the\nbenefit of faster execution might be offset by a much slower compilation time.\nMost (but not all) patterns can be optimized by the JIT compiler.\n<a name=\"localesupport\"></a></p>\n<h2><a name=\"SEC22\" href=\"#TOC1\">LOCALE SUPPORT</a></h2>\n<p>\n<b>const uint8_t *pcre2_maketables(pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_maketables_free(pcre2_general_context *<i>gcontext</i>,</b>\n<b>  const uint8_t *<i>tables</i>);</b>\n</p>\n<p>\nPCRE2 handles caseless matching, and determines whether characters are letters,\ndigits, or whatever, by reference to a set of tables, indexed by character code\npoint. However, this applies only to characters whose code points are less than\n256. By default, higher-valued code points never match escapes such as \\w or\n\\d.\n</p>\n<p>\nWhen PCRE2 is built with Unicode support (the default), certain Unicode\ncharacter properties can be tested with \\p and \\P, or, alternatively, the\nPCRE2_UCP option can be set when a pattern is compiled; this causes \\w and\nfriends to use Unicode property support instead of the built-in tables.\nPCRE2_UCP also causes upper/lower casing operations on characters with code\npoints greater than 127 to use Unicode properties. These effects apply even\nwhen PCRE2_UTF is not set. There are, however, some PCRE2_EXTRA options (see\nabove) that can be used to modify or suppress them.\n</p>\n<p>\nThe use of locales with Unicode is discouraged. If you are handling characters\nwith code points greater than 127, you should either use Unicode support, or\nuse locales, but not try to mix the two.\n</p>\n<p>\nPCRE2 contains a built-in set of character tables that are used by default.\nThese are sufficient for many applications. Normally, the internal tables\nrecognize only ASCII characters. However, when PCRE2 is built, it is possible\nto cause the internal tables to be rebuilt in the default \"C\" locale of the\nlocal system, which may cause them to be different.\n</p>\n<p>\nThe built-in tables can be overridden by tables supplied by the application\nthat calls PCRE2. These may be created in a different locale from the default.\nAs more and more applications change to using Unicode, the need for this locale\nsupport is expected to die away.\n</p>\n<p>\nExternal tables are built by calling the <b>pcre2_maketables()</b> function, in\nthe relevant locale. The only argument to this function is a general context,\nwhich can be used to pass a custom memory allocator. If the argument is NULL,\nthe system <b>malloc()</b> is used. The result can be passed to\n<b>pcre2_compile()</b> as often as necessary, by creating a compile context and\ncalling <b>pcre2_set_character_tables()</b> to set the tables pointer therein.\n</p>\n<p>\nFor example, to build and use tables that are appropriate for the French locale\n(where accented characters with values greater than 127 are treated as\nletters), the following code could be used:\n<pre>\n  setlocale(LC_CTYPE, \"fr_FR\");\n  tables = pcre2_maketables(NULL);\n  ccontext = pcre2_compile_context_create(NULL);\n  pcre2_set_character_tables(ccontext, tables);\n  re = pcre2_compile(..., ccontext);\n</pre>\nThe locale name \"fr_FR\" is used on Linux and other Unix-like systems; if you\nare using Windows, the name for the French locale is \"french\".\n</p>\n<p>\nThe pointer that is passed (via the compile context) to <b>pcre2_compile()</b>\nis saved with the compiled pattern, and the same tables are used by the\nmatching functions. Thus, for any single pattern, compilation and matching both\nhappen in the same locale, but different patterns can be processed in different\nlocales.\n</p>\n<p>\nIt is the caller's responsibility to ensure that the memory containing the\ntables remains available while they are still in use. When they are no longer\nneeded, you can discard them using <b>pcre2_maketables_free()</b>, which should\npass as its first parameter the same global context that was used to create the\ntables.\n</p>\n<h3>\nSaving locale tables\n</h3>\n<p>\nThe tables described above are just a sequence of binary bytes, which makes\nthem independent of hardware characteristics such as endianness or whether the\nprocessor is 32-bit or 64-bit. A copy of the result of <b>pcre2_maketables()</b>\ncan therefore be saved in a file or elsewhere and re-used later, even in a\ndifferent program or on another computer. The size of the tables (number of\nbytes) must be obtained by calling <b>pcre2_config()</b> with the\nPCRE2_CONFIG_TABLES_LENGTH option because <b>pcre2_maketables()</b> does not\nreturn this value. Note that the <b>pcre2_dftables</b> program, which is part of\nthe PCRE2 build system, can be used stand-alone to create a file that contains\na set of binary tables. See the\n<a href=\"pcre2build.html#createtables\"><b>pcre2build</b></a>\ndocumentation for details.\n<a name=\"infoaboutpattern\"></a></p>\n<h2><a name=\"SEC23\" href=\"#TOC1\">INFORMATION ABOUT A COMPILED PATTERN</a></h2>\n<p>\n<b>int pcre2_pattern_info(const pcre2 *<i>code</i>, uint32_t <i>what</i>, void *<i>where</i>);</b>\n</p>\n<p>\nThe <b>pcre2_pattern_info()</b> function returns general information about a\ncompiled pattern. For information about callouts, see the\n<a href=\"#infoaboutcallouts\">next section.</a>\nThe first argument for <b>pcre2_pattern_info()</b> is a pointer to the compiled\npattern. The second argument specifies which piece of information is required,\nand the third argument is a pointer to a variable to receive the data. If the\nthird argument is NULL, the first argument is ignored, and the function returns\nthe size in bytes of the variable that is required for the information\nrequested. Otherwise, the yield of the function is zero for success, or one of\nthe following negative numbers:\n<pre>\n  PCRE2_ERROR_NULL           the argument <i>code</i> was NULL\n  PCRE2_ERROR_BADMAGIC       the \"magic number\" was not found\n  PCRE2_ERROR_BADOPTION      the value of <i>what</i> was invalid\n  PCRE2_ERROR_UNSET          the requested field is not set\n</pre>\nThe \"magic number\" is placed at the start of each compiled pattern as a simple\ncheck against passing an arbitrary memory pointer. Here is a typical call of\n<b>pcre2_pattern_info()</b>, to obtain the length of the compiled pattern:\n<pre>\n  int rc;\n  size_t length;\n  rc = pcre2_pattern_info(\n    re,               /* result of pcre2_compile() */\n    PCRE2_INFO_SIZE,  /* what is required */\n    &length);         /* where to put the data */\n</pre>\nThe possible values for the second argument are defined in <b>pcre2.h</b>, and\nare as follows:\n<pre>\n  PCRE2_INFO_ALLOPTIONS\n  PCRE2_INFO_ARGOPTIONS\n  PCRE2_INFO_EXTRAOPTIONS\n</pre>\nReturn copies of the pattern's options. The third argument should point to a\n<b>uint32_t</b> variable. PCRE2_INFO_ARGOPTIONS returns exactly the options that\nwere passed to <b>pcre2_compile()</b>, whereas PCRE2_INFO_ALLOPTIONS returns\nthe compile options as modified by any top-level (*XXX) option settings such as\n(*UTF) at the start of the pattern itself. PCRE2_INFO_EXTRAOPTIONS returns the\nextra options that were set in the compile context by calling the\npcre2_set_compile_extra_options() function.\n</p>\n<p>\nFor example, if the pattern /(*UTF)abc/ is compiled with the PCRE2_EXTENDED\noption, the result for PCRE2_INFO_ALLOPTIONS is PCRE2_EXTENDED and PCRE2_UTF.\nOption settings such as (?i) that can change within a pattern do not affect the\nresult of PCRE2_INFO_ALLOPTIONS, even if they appear right at the start of the\npattern. (This was different in some earlier releases.)\n</p>\n<p>\nA pattern compiled without PCRE2_ANCHORED is automatically anchored by PCRE2 if\nthe first significant item in every top-level branch is one of the following:\n<pre>\n  ^     unless PCRE2_MULTILINE is set\n  \\A    always\n  \\G    always\n  .*    sometimes - see below\n</pre>\nWhen .* is the first significant item, anchoring is possible only when all the\nfollowing are true:\n<pre>\n  .* is not in an atomic group\n  .* is not in a capture group that is the subject of a backreference\n  PCRE2_DOTALL is in force for .*\n  Neither (*PRUNE) nor (*SKIP) appears in the pattern\n  PCRE2_NO_DOTSTAR_ANCHOR is not set\n  Dotstar anchoring has not been disabled with PCRE2_DOTSTAR_ANCHOR_OFF\n</pre>\nFor patterns that are auto-anchored, the PCRE2_ANCHORED bit is set in the\noptions returned for PCRE2_INFO_ALLOPTIONS.\n<pre>\n  PCRE2_INFO_BACKREFMAX\n</pre>\nReturn the number of the highest backreference in the pattern. The third\nargument should point to a <b>uint32_t</b> variable. Named capture groups\nacquire numbers as well as names, and these count towards the highest\nbackreference. Backreferences such as \\4 or \\g{12} match the captured\ncharacters of the given group, but in addition, the check that a capture\ngroup is set in a conditional group such as (?(3)a|b) is also a backreference.\nZero is returned if there are no backreferences.\n<pre>\n  PCRE2_INFO_BSR\n</pre>\nThe output is a uint32_t integer whose value indicates what character sequences\nthe \\R escape sequence matches. A value of PCRE2_BSR_UNICODE means that \\R\nmatches any Unicode line ending sequence; a value of PCRE2_BSR_ANYCRLF means\nthat \\R matches only CR, LF, or CRLF.\n<pre>\n  PCRE2_INFO_CAPTURECOUNT\n</pre>\nReturn the highest capture group number in the pattern. In patterns where (?|\nis not used, this is also the total number of capture groups. The third\nargument should point to a <b>uint32_t</b> variable.\n<pre>\n  PCRE2_INFO_DEPTHLIMIT\n</pre>\nIf the pattern set a backtracking depth limit by including an item of the form\n(*LIMIT_DEPTH=nnnn) at the start, the value is returned. The third argument\nshould point to a uint32_t integer. If no such value has been set, the call to\n<b>pcre2_pattern_info()</b> returns the error PCRE2_ERROR_UNSET. Note that this\nlimit will only be used during matching if it is less than the limit set or\ndefaulted by the caller of the match function.\n<pre>\n  PCRE2_INFO_FIRSTBITMAP\n</pre>\nIn the absence of a single first code unit for a non-anchored pattern,\n<b>pcre2_compile()</b> may construct a 256-bit table that defines a fixed set of\nvalues for the first code unit in any match. For example, a pattern that starts\nwith [abc] results in a table with three bits set. When code unit values\ngreater than 255 are supported, the flag bit for 255 means \"any code unit of\nvalue 255 or above\". If such a table was constructed, a pointer to it is\nreturned. Otherwise NULL is returned. The third argument should point to a\n<b>const uint8_t *</b> variable.\n<pre>\n  PCRE2_INFO_FIRSTCODETYPE\n</pre>\nReturn information about the first code unit of any matched string, for a\nnon-anchored pattern. The third argument should point to a <b>uint32_t</b>\nvariable. If there is a fixed first value, for example, the letter \"c\" from a\npattern such as (cat|cow|coyote), 1 is returned, and the value can be retrieved\nusing PCRE2_INFO_FIRSTCODEUNIT. If there is no fixed first value, but it is\nknown that a match can occur only at the start of the subject or following a\nnewline in the subject, 2 is returned. Otherwise, and for anchored patterns, 0\nis returned.\n<pre>\n  PCRE2_INFO_FIRSTCODEUNIT\n</pre>\nReturn the value of the first code unit of any matched string for a pattern\nwhere PCRE2_INFO_FIRSTCODETYPE returns 1; otherwise return 0. The third\nargument should point to a <b>uint32_t</b> variable. In the 8-bit library, the\nvalue is always less than 256. In the 16-bit library the value can be up to\n0xffff. In the 32-bit library in UTF-32 mode the value can be up to 0x10ffff,\nand up to 0xffffffff when not using UTF-32 mode.\n<pre>\n  PCRE2_INFO_FRAMESIZE\n</pre>\nReturn the size (in bytes) of the data frames that are used to remember\nbacktracking positions when the pattern is processed by <b>pcre2_match()</b>\nwithout the use of JIT. The third argument should point to a <b>size_t</b>\nvariable. The frame size depends on the number of capturing parentheses in the\npattern. Each additional capture group adds two PCRE2_SIZE variables.\n<pre>\n  PCRE2_INFO_HASBACKSLASHC\n</pre>\nReturn 1 if the pattern contains any instances of \\C, otherwise 0. The third\nargument should point to a <b>uint32_t</b> variable.\n<pre>\n  PCRE2_INFO_HASCRORLF\n</pre>\nReturn 1 if the pattern contains any explicit matches for CR or LF characters,\notherwise 0. The third argument should point to a <b>uint32_t</b> variable. An\nexplicit match is either a literal CR or LF character, or \\r or \\n or one of\nthe equivalent hexadecimal or octal escape sequences.\n<pre>\n  PCRE2_INFO_HEAPLIMIT\n</pre>\nIf the pattern set a heap memory limit by including an item of the form\n(*LIMIT_HEAP=nnnn) at the start, the value is returned. The third argument\nshould point to a uint32_t integer. If no such value has been set, the call to\n<b>pcre2_pattern_info()</b> returns the error PCRE2_ERROR_UNSET. Note that this\nlimit will only be used during matching if it is less than the limit set or\ndefaulted by the caller of the match function.\n<pre>\n  PCRE2_INFO_JCHANGED\n</pre>\nReturn 1 if the (?J) or (?-J) option setting is used in the pattern, otherwise\n0. The third argument should point to a <b>uint32_t</b> variable. (?J) and\n(?-J) set and unset the local PCRE2_DUPNAMES option, respectively.\n<pre>\n  PCRE2_INFO_JITSIZE\n</pre>\nIf the compiled pattern was successfully processed by\n<b>pcre2_jit_compile()</b>, return the size of the JIT compiled code, otherwise\nreturn zero. The third argument should point to a <b>size_t</b> variable.\n<pre>\n  PCRE2_INFO_LASTCODETYPE\n</pre>\nReturns 1 if there is a rightmost literal code unit that must exist in any\nmatched string, other than at its start. The third argument should point to a\n<b>uint32_t</b> variable. If there is no such value, 0 is returned. When 1 is\nreturned, the code unit value itself can be retrieved using\nPCRE2_INFO_LASTCODEUNIT. For anchored patterns, a last literal value is\nrecorded only if it follows something of variable length. For example, for the\npattern /^a\\d+z\\d+/ the returned value is 1 (with \"z\" returned from\nPCRE2_INFO_LASTCODEUNIT), but for /^a\\dz\\d/ the returned value is 0.\n<pre>\n  PCRE2_INFO_LASTCODEUNIT\n</pre>\nReturn the value of the rightmost literal code unit that must exist in any\nmatched string, other than at its start, for a pattern where\nPCRE2_INFO_LASTCODETYPE returns 1. Otherwise, return 0. The third argument\nshould point to a <b>uint32_t</b> variable.\n<pre>\n  PCRE2_INFO_MATCHEMPTY\n</pre>\nReturn 1 if the pattern might match an empty string, otherwise 0. The third\nargument should point to a <b>uint32_t</b> variable. When a pattern contains\nrecursive subroutine calls it is not always possible to determine whether or\nnot it can match an empty string. PCRE2 takes a cautious approach and returns 1\nin such cases.\n<pre>\n  PCRE2_INFO_MATCHLIMIT\n</pre>\nIf the pattern set a match limit by including an item of the form\n(*LIMIT_MATCH=nnnn) at the start, the value is returned. The third argument\nshould point to a uint32_t integer. If no such value has been set, the call to\n<b>pcre2_pattern_info()</b> returns the error PCRE2_ERROR_UNSET. Note that this\nlimit will only be used during matching if it is less than the limit set or\ndefaulted by the caller of the match function.\n<pre>\n  PCRE2_INFO_MAXLOOKBEHIND\n</pre>\nA lookbehind assertion moves back a certain number of characters (not code\nunits) when it starts to process each of its branches. This request returns the\nlargest of these backward moves. The third argument should point to a uint32_t\ninteger. The simple assertions \\b and \\B require a one-character lookbehind\nand cause PCRE2_INFO_MAXLOOKBEHIND to return 1 in the absence of anything\nlonger. \\A also registers a one-character lookbehind, though it does not\nactually inspect the previous character.\n</p>\n<p>\nNote that this information is useful for multi-segment matching only\nif the pattern contains no nested lookbehinds. For example, the pattern\n(?&#60;=a(?&#60;=ba)c) returns a maximum lookbehind of 2, but when it is processed, the\nfirst lookbehind moves back by two characters, matches one character, then the\nnested lookbehind also moves back by two characters. This puts the matching\npoint three characters earlier than it was at the start.\nPCRE2_INFO_MAXLOOKBEHIND is really only useful as a debugging tool. See the\n<a href=\"pcre2partial.html\"><b>pcre2partial</b></a>\ndocumentation for a discussion of multi-segment matching.\n<pre>\n  PCRE2_INFO_MINLENGTH\n</pre>\nIf a minimum length for matching subject strings was computed, its value is\nreturned. Otherwise the returned value is 0. This value is not computed when\nPCRE2_NO_START_OPTIMIZE is set. The value is a number of characters, which in\nUTF mode may be different from the number of code units. The third argument\nshould point to a <b>uint32_t</b> variable. The value is a lower bound to the\nlength of any matching string. There may not be any strings of that length that\ndo actually match, but every string that does match is at least that long.\n<pre>\n  PCRE2_INFO_NAMECOUNT\n  PCRE2_INFO_NAMEENTRYSIZE\n  PCRE2_INFO_NAMETABLE\n</pre>\nPCRE2 supports the use of named as well as numbered capturing parentheses. The\nnames are just an additional way of identifying the parentheses, which still\nacquire numbers. Several convenience functions such as\n<b>pcre2_substring_get_byname()</b> are provided for extracting captured\nsubstrings by name. It is also possible to extract the data directly, by first\nconverting the name to a number in order to access the correct pointers in the\noutput vector (described with <b>pcre2_match()</b> below). To do the conversion,\nyou need to use the name-to-number map, which is described by these three\nvalues.\n</p>\n<p>\nThe map consists of a number of fixed-size entries. PCRE2_INFO_NAMECOUNT gives\nthe number of entries, and PCRE2_INFO_NAMEENTRYSIZE gives the size of each\nentry in code units; both of these return a <b>uint32_t</b> value. The entry\nsize depends on the length of the longest name.\n</p>\n<p>\nPCRE2_INFO_NAMETABLE returns a pointer to the first entry of the table. This is\na PCRE2_SPTR pointer to a block of code units. In the 8-bit library, the first\ntwo bytes of each entry are the number of the capturing parenthesis, most\nsignificant byte first. In the 16-bit library, the pointer points to 16-bit\ncode units, the first of which contains the parenthesis number. In the 32-bit\nlibrary, the pointer points to 32-bit code units, the first of which contains\nthe parenthesis number. The rest of the entry is the corresponding name, zero\nterminated.\n</p>\n<p>\nThe names are in alphabetical order. If (?| is used to create multiple capture\ngroups with the same number, as described in the\n<a href=\"pcre2pattern.html#dupgroupnumber\">section on duplicate group numbers</a>\nin the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\npage, the groups may be given the same name, but there is only one entry in the\ntable. Different names for groups of the same number are not permitted.\n</p>\n<p>\nDuplicate names for capture groups with different numbers are permitted, but\nonly if PCRE2_DUPNAMES is set. They appear in the table in the order in which\nthey were found in the pattern. In the absence of (?| this is the order of\nincreasing number; when (?| is used this is not necessarily the case because\nlater capture groups may have lower numbers.\n</p>\n<p>\nAs a simple example of the name/number table, consider the following pattern\nafter compilation by the 8-bit library (assume PCRE2_EXTENDED is set, so white\nspace - including newlines - is ignored):\n<pre>\n  (?&#60;date&#62; (?&#60;year&#62;(\\d\\d)?\\d\\d) - (?&#60;month&#62;\\d\\d) - (?&#60;day&#62;\\d\\d) )\n</pre>\nThere are four named capture groups, so the table has four entries, and each\nentry in the table is eight bytes long. The table is as follows, with\nnon-printing bytes shows in hexadecimal, and undefined bytes shown as ??:\n<pre>\n  00 01 d  a  t  e  00 ??\n  00 05 d  a  y  00 ?? ??\n  00 04 m  o  n  t  h  00\n  00 02 y  e  a  r  00 ??\n</pre>\nWhen writing code to extract data from named capture groups using the\nname-to-number map, remember that the length of the entries is likely to be\ndifferent for each compiled pattern.\n<pre>\n  PCRE2_INFO_NEWLINE\n</pre>\nThe output is one of the following <b>uint32_t</b> values:\n<pre>\n  PCRE2_NEWLINE_CR       Carriage return (CR)\n  PCRE2_NEWLINE_LF       Linefeed (LF)\n  PCRE2_NEWLINE_CRLF     Carriage return, linefeed (CRLF)\n  PCRE2_NEWLINE_ANY      Any Unicode line ending\n  PCRE2_NEWLINE_ANYCRLF  Any of CR, LF, or CRLF\n  PCRE2_NEWLINE_NUL      The NUL character (binary zero)\n</pre>\nThis identifies the character sequence that will be recognized as meaning\n\"newline\" while matching.\n<pre>\n  PCRE2_INFO_SIZE\n</pre>\nReturn the size of the compiled pattern in bytes (for all three libraries). The\nthird argument should point to a <b>size_t</b> variable. This value includes the\nsize of the general data block that precedes the code units of the compiled\npattern itself. The value that is used when <b>pcre2_compile()</b> is getting\nmemory in which to place the compiled pattern may be slightly larger than the\nvalue returned by this option, because there are cases where the code that\ncalculates the size has to over-estimate. Processing a pattern with the JIT\ncompiler does not alter the value returned by this option.\n<a name=\"infoaboutcallouts\"></a></p>\n<h2><a name=\"SEC24\" href=\"#TOC1\">INFORMATION ABOUT A PATTERN'S CALLOUTS</a></h2>\n<p>\n<b>int pcre2_callout_enumerate(const pcre2_code *<i>code</i>,</b>\n<b>  int (*<i>callback</i>)(pcre2_callout_enumerate_block *, void *),</b>\n<b>  void *<i>user_data</i>);</b>\n<br>\n<br>\nA script language that supports the use of string arguments in callouts might\nlike to scan all the callouts in a pattern before running the match. This can\nbe done by calling <b>pcre2_callout_enumerate()</b>. The first argument is a\npointer to a compiled pattern, the second points to a callback function, and\nthe third is arbitrary user data. The callback function is called for every\ncallout in the pattern in the order in which they appear. Its first argument is\na pointer to a callout enumeration block, and its second argument is the\n<i>user_data</i> value that was passed to <b>pcre2_callout_enumerate()</b>. The\ncontents of the callout enumeration block are described in the\n<a href=\"pcre2callout.html\"><b>pcre2callout</b></a>\ndocumentation, which also gives further details about callouts.\n</p>\n<h2><a name=\"SEC25\" href=\"#TOC1\">SERIALIZATION AND PRECOMPILING</a></h2>\n<p>\nIt is possible to save compiled patterns on disc or elsewhere, and reload them\nlater, subject to a number of restrictions. The host on which the patterns are\nreloaded must be running the same version of PCRE2, with the same code unit\nwidth, and must also have the same endianness, pointer width, and PCRE2_SIZE\ntype. Before compiled patterns can be saved, they must be converted to a\n\"serialized\" form, which in the case of PCRE2 is really just a bytecode dump.\nThe functions whose names begin with <b>pcre2_serialize_</b> are used for\nconverting to and from the serialized form. They are described in the\n<a href=\"pcre2serialize.html\"><b>pcre2serialize</b></a>\ndocumentation. Note that PCRE2 serialization does not convert compiled patterns\nto an abstract format like Java or .NET serialization.\n<a name=\"matchdatablock\"></a></p>\n<h2><a name=\"SEC26\" href=\"#TOC1\">THE MATCH DATA BLOCK</a></h2>\n<p>\n<b>pcre2_match_data *pcre2_match_data_create(uint32_t <i>ovecsize</i>,</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>pcre2_match_data *pcre2_match_data_create_from_pattern(</b>\n<b>  const pcre2_code *<i>code</i>, pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_match_data_free(pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<p>\nInformation about a successful or unsuccessful match is placed in a match\ndata block, which is an opaque structure that is accessed by function calls. In\nparticular, the match data block contains a vector of offsets into the subject\nstring that define the matched parts of the subject. This is known as the\n<i>ovector</i>.\n</p>\n<p>\nBefore calling <b>pcre2_match()</b>, <b>pcre2_dfa_match()</b>, or\n<b>pcre2_jit_match()</b> you must create a match data block by calling one of\nthe creation functions above. For <b>pcre2_match_data_create()</b>, the first\nargument is the number of pairs of offsets in the <i>ovector</i>.\n</p>\n<p>\nWhen using <b>pcre2_match()</b>, one pair of offsets is required to identify the\nstring that matched the whole pattern, with an additional pair for each\ncaptured substring. For example, a value of 4 creates enough space to record\nthe matched portion of the subject plus three captured substrings.\n</p>\n<p>\nWhen using <b>pcre2_dfa_match()</b> there may be multiple matched substrings of\ndifferent lengths at the same point in the subject. The ovector should be made\nlarge enough to hold as many as are expected.\n</p>\n<p>\nA minimum of at least 1 pair is imposed by <b>pcre2_match_data_create()</b>, so\nit is always possible to return the overall matched string in the case of\n<b>pcre2_match()</b> or the longest match in the case of\n<b>pcre2_dfa_match()</b>. The maximum number of pairs is 65535; if the first\nargument of <b>pcre2_match_data_create()</b> is greater than this, 65535 is\nused.\n</p>\n<p>\nThe second argument of <b>pcre2_match_data_create()</b> is a pointer to a\ngeneral context, which can specify custom memory management for obtaining the\nmemory for the match data block. If you are not using custom memory management,\npass NULL, which causes <b>malloc()</b> to be used.\n</p>\n<p>\nFor <b>pcre2_match_data_create_from_pattern()</b>, the first argument is a\npointer to a compiled pattern. The ovector is created to be exactly the right\nsize to hold all the substrings a pattern might capture when matched using\n<b>pcre2_match()</b>. You should not use this call when matching with\n<b>pcre2_dfa_match()</b>. The second argument is again a pointer to a general\ncontext, but in this case if NULL is passed, the memory is obtained using the\nsame allocator that was used for the compiled pattern (custom or default).\n</p>\n<p>\nA match data block can be used many times, with the same or different compiled\npatterns. You can extract information from a match data block after a match\noperation has finished, using functions that are described in the sections on\n<a href=\"#matchedstrings\">matched strings</a>\nand\n<a href=\"#matchotherdata\">other match data</a>\nbelow.\n</p>\n<p>\nWhen a call of <b>pcre2_match()</b> fails, valid data is available in the match\nblock only when the error is PCRE2_ERROR_NOMATCH, PCRE2_ERROR_PARTIAL, or one\nof the error codes for an invalid UTF string. Exactly what is available depends\non the error, and is detailed below.\n</p>\n<p>\nWhen one of the matching functions is called, pointers to the compiled pattern\nand the subject string are set in the match data block so that they can be\nreferenced by the extraction functions after a successful match. After running\na match, you must not free a compiled pattern or a subject string until after\nall operations on the match data block (for that match) have taken place,\nunless, in the case of the subject string, you have used the\nPCRE2_COPY_MATCHED_SUBJECT option, which is described in the section entitled\n\"Option bits for <b>pcre2_match()</b>\"\n<a href=\"#matchoptions>\">below.</a>\n</p>\n<p>\nWhen a match data block itself is no longer needed, it should be freed by\ncalling <b>pcre2_match_data_free()</b>. If this function is called with a NULL\nargument, it returns immediately, without doing anything.\n</p>\n<h2><a name=\"SEC27\" href=\"#TOC1\">MEMORY USE FOR MATCH DATA BLOCKS</a></h2>\n<p>\n<b>PCRE2_SIZE pcre2_get_match_data_size(pcre2_match_data *<i>match_data</i>);</b>\n<br>\n<br>\n<b>PCRE2_SIZE pcre2_get_match_data_heapframes_size(</b>\n<b>  pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<p>\nThe size of a match data block depends on the size of the ovector that it\ncontains. The function <b>pcre2_get_match_data_size()</b> returns the size, in\nbytes, of the block that is its argument.\n</p>\n<p>\nWhen <b>pcre2_match()</b> runs interpretively (that is, without using JIT), it\nmakes use of a vector of data frames for remembering backtracking positions.\nThe size of each individual frame depends on the number of capturing\nparentheses in the pattern and can be obtained by calling\n<b>pcre2_pattern_info()</b> with the PCRE2_INFO_FRAMESIZE option (see the\nsection entitled \"Information about a compiled pattern\"\n<a href=\"#infoaboutpattern>\">above).</a>\n</p>\n<p>\nHeap memory is used for the frames vector; if the initial memory block turns\nout to be too small during matching, it is automatically expanded. When\n<b>pcre2_match()</b> returns, the memory is not freed, but remains attached to\nthe match data block, for use by any subsequent matches that use the same\nblock. It is automatically freed when the match data block itself is freed.\n</p>\n<p>\nYou can find the current size of the frames vector that a match data block owns\nby calling <b>pcre2_get_match_data_heapframes_size()</b>. For a newly created\nmatch data block the size will be zero. Some types of match may require a lot\nof frames and thus a large vector; applications that run in environments where\nmemory is constrained can check this and free the match data block if the heap\nframes vector has become too big.\n</p>\n<h2><a name=\"SEC28\" href=\"#TOC1\">MATCHING A PATTERN: THE TRADITIONAL FUNCTION</a></h2>\n<p>\n<b>int pcre2_match(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>\n<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>\n<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>\n<b>  pcre2_match_context *<i>mcontext</i>);</b>\n</p>\n<p>\nThe function <b>pcre2_match()</b> is called to match a subject string against a\ncompiled pattern, which is passed in the <i>code</i> argument. You can call\n<b>pcre2_match()</b> with the same <i>code</i> argument as many times as you\nlike, in order to find multiple matches in the subject string or to match\ndifferent subject strings with the same pattern.\n</p>\n<p>\nThis function is the main matching facility of the library, and it operates in\na Perl-like manner. For specialist use there is also an alternative matching\nfunction, which is described\n<a href=\"#dfamatch\">below</a>\nin the section about the <b>pcre2_dfa_match()</b> function.\n</p>\n<p>\nHere is an example of a simple call to <b>pcre2_match()</b>:\n<pre>\n  pcre2_match_data *md = pcre2_match_data_create(4, NULL);\n  int rc = pcre2_match(\n    re,             /* result of pcre2_compile() */\n    \"some string\",  /* the subject string */\n    11,             /* the length of the subject string */\n    0,              /* start at offset 0 in the subject */\n    0,              /* default options */\n    md,             /* the match data block */\n    NULL);          /* a match context; NULL means use defaults */\n</pre>\nIf the subject string is zero-terminated, the length can be given as\nPCRE2_ZERO_TERMINATED. A match context must be provided if certain less common\nmatching parameters are to be changed. For details, see the section on\n<a href=\"#matchcontext\">the match context</a>\nabove.\n</p>\n<h3>\nThe string to be matched by <b>pcre2_match()</b>\n</h3>\n<p>\nThe subject string is passed to <b>pcre2_match()</b> as a pointer in\n<i>subject</i>, a length in <i>length</i>, and a starting offset in\n<i>startoffset</i>. The length and offset are in code units, not characters.\nThat is, they are in bytes for the 8-bit library, 16-bit code units for the\n16-bit library, and 32-bit code units for the 32-bit library, whether or not\nUTF processing is enabled. As a special case, if <i>subject</i> is NULL and\n<i>length</i> is zero, the subject is assumed to be an empty string. If\n<i>length</i> is non-zero, an error occurs if <i>subject</i> is NULL.\n</p>\n<p>\nIf <i>startoffset</i> is greater than the length of the subject,\n<b>pcre2_match()</b> returns PCRE2_ERROR_BADOFFSET. When the starting offset is\nzero, the search for a match starts at the beginning of the subject, and this\nis by far the most common case. In UTF-8 or UTF-16 mode, the starting offset\nmust point to the start of a character, or to the end of the subject (in UTF-32\nmode, one code unit equals one character, so all offsets are valid). Like the\npattern string, the subject may contain binary zeros.\n</p>\n<p>\nA non-zero starting offset is useful when searching for another match in the\nsame subject by calling <b>pcre2_match()</b> again after a previous success.\nSetting <i>startoffset</i> differs from passing over a shortened string and\nsetting PCRE2_NOTBOL in the case of a pattern that begins with any kind of\nlookbehind. For example, consider the pattern\n<pre>\n  \\Biss\\B\n</pre>\nwhich finds occurrences of \"iss\" in the middle of words. (\\B matches only if\nthe current position in the subject is not a word boundary.) When applied to\nthe string \"Mississippi\" the first call to <b>pcre2_match()</b> finds the first\noccurrence. If <b>pcre2_match()</b> is called again with just the remainder of\nthe subject, namely \"issippi\", it does not match, because \\B is always false\nat the start of the subject, which is deemed to be a word boundary. However, if\n<b>pcre2_match()</b> is passed the entire string again, but with\n<i>startoffset</i> set to 4, it finds the second occurrence of \"iss\" because it\nis able to look behind the starting point to discover that it is preceded by a\nletter.\n</p>\n<p>\nFinding all the matches in a subject is tricky when the pattern can match an\nempty string. PCRE2 includes a helper API to assist with this; see the\nsection entitled \"Iterating over all matches\"\n<a href=\"#matchiter\">below</a>\nfor details.\n</p>\n<p>\nIf a non-zero starting offset is passed when the pattern is anchored, a single\nattempt to match at the given offset is made. This can only succeed if the\npattern does not require the match to be at the start of the subject. In other\nwords, the anchoring must be the result of setting the PCRE2_ANCHORED option or\nthe use of .* with PCRE2_DOTALL, not by starting the pattern with ^ or \\A.\n<a name=\"matchoptions\"></a></p>\n<h3>\nOption bits for <b>pcre2_match()</b>\n</h3>\n<p>\nThe unused bits of the <i>options</i> argument for <b>pcre2_match()</b> must be\nzero. The only bits that may be set are PCRE2_ANCHORED,\nPCRE2_COPY_MATCHED_SUBJECT, PCRE2_DISABLE_RECURSELOOP_CHECK, PCRE2_ENDANCHORED,\nPCRE2_NOTBOL, PCRE2_NOTEOL, PCRE2_NOTEMPTY, PCRE2_NOTEMPTY_ATSTART,\nPCRE2_NO_JIT, PCRE2_NO_UTF_CHECK, PCRE2_PARTIAL_HARD, and PCRE2_PARTIAL_SOFT.\nTheir action is described below.\n</p>\n<p>\nSetting PCRE2_ANCHORED or PCRE2_ENDANCHORED at match time is not supported by\nthe just-in-time (JIT) compiler. If it is set, JIT matching is disabled and the\ninterpretive code in <b>pcre2_match()</b> is run.\nPCRE2_DISABLE_RECURSELOOP_CHECK is ignored by JIT, but apart from PCRE2_NO_JIT\n(obviously), the remaining options are supported for JIT matching.\n<pre>\n  PCRE2_ANCHORED\n</pre>\nThe PCRE2_ANCHORED option limits <b>pcre2_match()</b> to matching at the first\nmatching position. If a pattern was compiled with PCRE2_ANCHORED, or turned out\nto be anchored by virtue of its contents, it cannot be made unanchored at\nmatching time. Note that setting the option at match time disables JIT\nmatching.\n<pre>\n  PCRE2_COPY_MATCHED_SUBJECT\n</pre>\nBy default, a pointer to the subject is remembered in the match data block so\nthat, after a successful match, it can be referenced by the substring\nextraction functions. This means that the subject's memory must not be freed\nuntil all such operations are complete. For some applications where the\nlifetime of the subject string is not guaranteed, it may be necessary to make a\ncopy of the subject string, but it is wasteful to do this unless the match is\nsuccessful. After a successful match, if PCRE2_COPY_MATCHED_SUBJECT is set, the\nsubject is copied and the new pointer is remembered in the match data block\ninstead of the original subject pointer. The memory allocator that was used for\nthe match block itself is used. The copy is automatically freed when\n<b>pcre2_match_data_free()</b> is called to free the match data block. It is also\nautomatically freed if the match data block is re-used for another match\noperation.\n<pre>\n  PCRE2_DISABLE_RECURSELOOP_CHECK\n</pre>\nThis option is relevant only to <b>pcre2_match()</b> for interpretive matching.\nIt is ignored when JIT is used, and is forbidden for <b>pcre2_dfa_match()</b>.\n</p>\n<p>\nThe use of recursion in patterns can lead to infinite loops. In the\ninterpretive matcher these would be eventually caught by the match or heap\nlimits, but this could take a long time and/or use a lot of memory if the\nlimits are large. There is therefore a check at the start of each recursion.\nIf the same group is still active from a previous call, and the current subject\npointer is the same as it was at the start of that group, and the furthest\ninspected character of the subject has not changed, an error is generated.\n</p>\n<p>\nThere are rare cases of matches that would complete, but nevertheless trigger\nthis error. This option disables the check. It is provided mainly for testing\nwhen comparing JIT and interpretive behaviour.\n<pre>\n  PCRE2_ENDANCHORED\n</pre>\nIf the PCRE2_ENDANCHORED option is set, any string that <b>pcre2_match()</b>\nmatches must be right at the end of the subject string. Note that setting the\noption at match time disables JIT matching.\n<pre>\n  PCRE2_NOTBOL\n</pre>\nThis option specifies that first character of the subject string is not the\nbeginning of a line, so the circumflex metacharacter should not match before\nit. Setting this without having set PCRE2_MULTILINE at compile time causes\ncircumflex never to match. This option affects only the behaviour of the\ncircumflex metacharacter. It does not affect \\A.\n<pre>\n  PCRE2_NOTEOL\n</pre>\nThis option specifies that the end of the subject string is not the end of a\nline, so the dollar metacharacter should not match it nor (except in multiline\nmode) a newline immediately before it. Setting this without having set\nPCRE2_MULTILINE at compile time causes dollar never to match. This option\naffects only the behaviour of the dollar metacharacter. It does not affect \\Z\nor \\z.\n<pre>\n  PCRE2_NOTEMPTY\n</pre>\nAn empty string is not considered to be a valid match if this option is set. If\nthere are alternatives in the pattern, they are tried. If all the alternatives\nmatch the empty string, the entire match fails. For example, if the pattern\n<pre>\n  a?b?\n</pre>\nis applied to a string not beginning with \"a\" or \"b\", it matches an empty\nstring at the start of the subject. With PCRE2_NOTEMPTY set, this match is not\nvalid, so <b>pcre2_match()</b> searches further into the string for occurrences\nof \"a\" or \"b\".\n<pre>\n  PCRE2_NOTEMPTY_ATSTART\n</pre>\nThis is like PCRE2_NOTEMPTY, except that it locks out an empty string match\nonly at the first matching position, that is, at the start of the subject plus\nthe starting offset. An empty string match later in the subject is permitted.\nIf the pattern is anchored, such a match can occur only if the pattern contains\n\\K.\n<pre>\n  PCRE2_NO_JIT\n</pre>\nBy default, if a pattern has been successfully processed by\n<b>pcre2_jit_compile()</b>, JIT is automatically used when <b>pcre2_match()</b>\nis called with options that JIT supports. Setting PCRE2_NO_JIT disables the use\nof JIT; it forces matching to be done by the interpreter.\n<pre>\n  PCRE2_NO_UTF_CHECK\n</pre>\nWhen PCRE2_UTF is set at compile time, the validity of the subject as a UTF\nstring is checked unless PCRE2_NO_UTF_CHECK is passed to <b>pcre2_match()</b> or\nPCRE2_MATCH_INVALID_UTF was passed to <b>pcre2_compile()</b>. The latter special\ncase is discussed in detail in the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\ndocumentation.\n</p>\n<p>\nIn the default case, if a non-zero starting offset is given, the check is\napplied only to that part of the subject that could be inspected during\nmatching, and there is a check that the starting offset points to the first\ncode unit of a character or to the end of the subject. If there are no\nlookbehind assertions in the pattern, the check starts at the starting offset.\nOtherwise, it starts at the length of the longest lookbehind before the\nstarting offset, or at the start of the subject if there are not that many\ncharacters before the starting offset. Note that the sequences \\b and \\B are\none-character lookbehinds.\n</p>\n<p>\nThe check is carried out before any other processing takes place, and a\nnegative error code is returned if the check fails. There are several UTF error\ncodes for each code unit width, corresponding to different problems with the\ncode unit sequence. There are discussions about the validity of\n<a href=\"pcre2unicode.html#utf8strings\">UTF-8 strings,</a>\n<a href=\"pcre2unicode.html#utf16strings\">UTF-16 strings,</a>\nand\n<a href=\"pcre2unicode.html#utf32strings\">UTF-32 strings</a>\nin the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\ndocumentation.\n</p>\n<p>\nIf you know that your subject is valid, and you want to skip this check for\nperformance reasons, you can set the PCRE2_NO_UTF_CHECK option when calling\n<b>pcre2_match()</b>. You might want to do this for the second and subsequent\ncalls to <b>pcre2_match()</b> if you are making repeated calls to find multiple\nmatches in the same subject string.\n</p>\n<p>\n<b>Warning:</b> Unless PCRE2_MATCH_INVALID_UTF was set at compile time, when\nPCRE2_NO_UTF_CHECK is set at match time the effect of passing an invalid\nstring as a subject, or an invalid value of <i>startoffset</i>, is undefined.\nYour program may crash or loop indefinitely or give wrong results.\n<pre>\n  PCRE2_PARTIAL_HARD\n  PCRE2_PARTIAL_SOFT\n</pre>\nThese options turn on the partial matching feature. A partial match occurs if\nthe end of the subject string is reached successfully, but there are not enough\nsubject characters to complete the match. In addition, either at least one\ncharacter must have been inspected or the pattern must contain a lookbehind, or\nthe pattern must be one that could match an empty string.\n</p>\n<p>\nIf this situation arises when PCRE2_PARTIAL_SOFT (but not PCRE2_PARTIAL_HARD)\nis set, matching continues by testing any remaining alternatives. Only if no\ncomplete match can be found is PCRE2_ERROR_PARTIAL returned instead of\nPCRE2_ERROR_NOMATCH. In other words, PCRE2_PARTIAL_SOFT specifies that the\ncaller is prepared to handle a partial match, but only if no complete match can\nbe found.\n</p>\n<p>\nIf PCRE2_PARTIAL_HARD is set, it overrides PCRE2_PARTIAL_SOFT. In this case, if\na partial match is found, <b>pcre2_match()</b> immediately returns\nPCRE2_ERROR_PARTIAL, without considering any other alternatives. In other\nwords, when PCRE2_PARTIAL_HARD is set, a partial match is considered to be more\nimportant than an alternative complete match.\n</p>\n<p>\nThere is a more detailed discussion of partial and multi-segment matching, with\nexamples, in the\n<a href=\"pcre2partial.html\"><b>pcre2partial</b></a>\ndocumentation.\n</p>\n<h2><a name=\"SEC29\" href=\"#TOC1\">NEWLINE HANDLING WHEN MATCHING</a></h2>\n<p>\nWhen PCRE2 is built, a default newline convention is set; this is usually the\nstandard convention for the operating system. The default can be overridden in\na\n<a href=\"#compilecontext\">compile context</a>\nby calling <b>pcre2_set_newline()</b>. It can also be overridden by starting a\npattern string with, for example, (*CRLF), as described in the\n<a href=\"pcre2pattern.html#newlines\">section on newline conventions</a>\nin the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\npage. During matching, the newline choice affects the behaviour of the dot,\ncircumflex, and dollar metacharacters. It may also alter the way the match\nstarting position is advanced after a match failure for an unanchored pattern.\n</p>\n<p>\nWhen PCRE2_NEWLINE_CRLF, PCRE2_NEWLINE_ANYCRLF, or PCRE2_NEWLINE_ANY is set as\nthe newline convention, and a match attempt for an unanchored pattern fails\nwhen the current starting position is at a CRLF sequence, and the pattern\ncontains no explicit matches for CR or LF characters, the match position is\nadvanced by two characters instead of one, in other words, to after the CRLF.\n</p>\n<p>\nThe above rule is a compromise that makes the most common cases work as\nexpected. For example, if the pattern is .+A (and the PCRE2_DOTALL option is\nnot set), it does not match the string \"\\r\\nA\" because, after failing at the\nstart, it skips both the CR and the LF before retrying. However, the pattern\n[\\r\\n]A does match that string, because it contains an explicit CR or LF\nreference, and so advances only by one character after the first failure.\n</p>\n<p>\nAn explicit match for CR of LF is either a literal appearance of one of those\ncharacters in the pattern, or one of the \\r or \\n or equivalent octal or\nhexadecimal escape sequences. Implicit matches such as [^X] do not count, nor\ndoes \\s, even though it includes CR and LF in the characters that it matches.\n</p>\n<p>\nNotwithstanding the above, anomalous effects may still occur when CRLF is a\nvalid newline sequence and explicit \\r or \\n escapes appear in the pattern.\n<a name=\"matchedstrings\"></a></p>\n<h2><a name=\"SEC30\" href=\"#TOC1\">HOW PCRE2_MATCH() RETURNS A STRING AND CAPTURED SUBSTRINGS</a></h2>\n<p>\n<b>uint32_t pcre2_get_ovector_count(pcre2_match_data *<i>match_data</i>);</b>\n<br>\n<br>\n<b>PCRE2_SIZE *pcre2_get_ovector_pointer(pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<p>\nIn general, a pattern matches a certain portion of the subject, and in\naddition, further substrings from the subject may be picked out by\nparenthesized parts of the pattern. Following the usage in Jeffrey Friedl's\nbook, this is called \"capturing\" in what follows, and the phrase \"capture\ngroup\" (Perl terminology) is used for a fragment of a pattern that picks out a\nsubstring. PCRE2 supports several other kinds of parenthesized group that do\nnot cause substrings to be captured. The <b>pcre2_pattern_info()</b> function\ncan be used to find out how many capture groups there are in a compiled\npattern.\n</p>\n<p>\nYou can use auxiliary functions for accessing captured substrings\n<a href=\"#extractbynumber\">by number</a>\nor\n<a href=\"#extractbyname\">by name,</a>\nas described in sections below.\n</p>\n<p>\nAlternatively, you can make direct use of the vector of PCRE2_SIZE values,\ncalled the <b>ovector</b>, which contains the offsets of captured strings. It is\npart of the\n<a href=\"#matchdatablock\">match data block.</a>\nThe function <b>pcre2_get_ovector_pointer()</b> returns the address of the\novector, and <b>pcre2_get_ovector_count()</b> returns the number of pairs of\nvalues it contains.\n</p>\n<p>\nWithin the ovector, the first in each pair of values is set to the offset of\nthe first code unit of a substring, and the second is set to the offset of the\nfirst code unit after the end of a substring. These values are always code unit\noffsets, not character offsets. That is, they are byte offsets in the 8-bit\nlibrary, 16-bit offsets in the 16-bit library, and 32-bit offsets in the 32-bit\nlibrary.\n</p>\n<p>\nAfter a partial match (error return PCRE2_ERROR_PARTIAL), only the first pair\nof offsets (that is, <i>ovector[0]</i> and <i>ovector[1]</i>) are set. They\nidentify the part of the subject that was partially matched. See the\n<a href=\"pcre2partial.html\"><b>pcre2partial</b></a>\ndocumentation for details of partial matching.\n</p>\n<p>\nAfter a fully successful match, the first pair of offsets identifies the\nportion of the subject string that was matched by the entire pattern. The next\npair is used for the first captured substring, and so on. The value returned by\n<b>pcre2_match()</b> is one more than the highest numbered pair that has been\nset. For example, if two substrings have been captured, the returned value is\n3. If there are no captured substrings, the return value from a successful\nmatch is 1, indicating that just the first pair of offsets has been set.\n</p>\n<p>\nIf a pattern uses the \\K escape sequence within a positive lookahead assertion,\nthe reported start of a successful match can be greater than the end of the\nmatch. For example, if the pattern (?=ab\\K) is matched against \"ab\", the start\nand end offset values for the match are 2 and 0.\n</p>\n<p>\nIf a capture group is matched repeatedly within a single match operation, it is\nthe last portion of the subject that it matched that is returned.\n</p>\n<p>\nIf the ovector is too small to hold all the captured substring offsets, as much\nas possible is filled in, and the function returns a value of zero. If captured\nsubstrings are not of interest, <b>pcre2_match()</b> may be called with a match\ndata block whose ovector is of minimum length (that is, one pair).\n</p>\n<p>\nIt is possible for capture group number <i>n+1</i> to match some part of the\nsubject when group <i>n</i> has not been used at all. For example, if the string\n\"abc\" is matched against the pattern (a|(z))(bc) the return from the function\nis 4, and groups 1 and 3 are matched, but 2 is not. When this happens, both\nvalues in the offset pairs corresponding to unused groups are set to\nPCRE2_UNSET.\n</p>\n<p>\nOffset values that correspond to unused groups at the end of the expression are\nalso set to PCRE2_UNSET. For example, if the string \"abc\" is matched against\nthe pattern (abc)(x(yz)?)? groups 2 and 3 are not matched. The return from the\nfunction is 2, because the highest used capture group number is 1. The offsets\nfor the second and third capture groups (assuming the vector is large enough,\nof course) are set to PCRE2_UNSET.\n</p>\n<p>\nElements in the ovector that do not correspond to capturing parentheses in the\npattern are never changed. That is, if a pattern contains <i>n</i> capturing\nparentheses, no more than <i>ovector[0]</i> to <i>ovector[2n+1]</i> are set by\n<b>pcre2_match()</b>. The other elements retain whatever values they previously\nhad. After a failed match attempt, the contents of the ovector are unchanged.\n<a name=\"matchotherdata\"></a></p>\n<h2><a name=\"SEC31\" href=\"#TOC1\">OTHER INFORMATION ABOUT A MATCH</a></h2>\n<p>\n<b>PCRE2_SPTR pcre2_get_mark(pcre2_match_data *<i>match_data</i>);</b>\n<br>\n<br>\n<b>PCRE2_SIZE pcre2_get_startchar(pcre2_match_data *<i>match_data</i>);</b>\n</p>\n<p>\nAs well as the offsets in the ovector, other information about a match is\nretained in the match data block and can be retrieved by the above functions in\nappropriate circumstances. If they are called at other times, the result is\nundefined.\n</p>\n<p>\nAfter a successful match, a partial match (PCRE2_ERROR_PARTIAL), or a failure\nto match (PCRE2_ERROR_NOMATCH), a mark name may be available. The function\n<b>pcre2_get_mark()</b> can be called to access this name, which can be\nspecified in the pattern by any of the backtracking control verbs, not just\n(*MARK). The same function applies to all the verbs. It returns a pointer to\nthe zero-terminated name, which is within the compiled pattern. If no name is\navailable, NULL is returned. The length of the name (excluding the terminating\nzero) is stored in the code unit that precedes the name. You should use this\nlength instead of relying on the terminating zero if the name might contain a\nbinary zero.\n</p>\n<p>\nAfter a successful match, the name that is returned is the last mark name\nencountered on the matching path through the pattern. Instances of backtracking\nverbs without names do not count. Thus, for example, if the matching path\ncontains (*MARK:A)(*PRUNE), the name \"A\" is returned. After a \"no match\" or a\npartial match, the last encountered name is returned. For example, consider\nthis pattern:\n<pre>\n  ^(*MARK:A)((*MARK:B)a|b)c\n</pre>\nWhen it matches \"bc\", the returned name is A. The B mark is \"seen\" in the first\nbranch of the group, but it is not on the matching path. On the other hand,\nwhen this pattern fails to match \"bx\", the returned name is B.\n</p>\n<p>\n<b>Warning:</b> By default, certain start-of-match optimizations are used to\ngive a fast \"no match\" result in some situations. For example, if the anchoring\nis removed from the pattern above, there is an initial check for the presence\nof \"c\" in the subject before running the matching engine. This check fails for\n\"bx\", causing a match failure without seeing any marks. You can disable the\nstart-of-match optimizations by setting the PCRE2_NO_START_OPTIMIZE option for\n<b>pcre2_compile()</b> or by starting the pattern with (*NO_START_OPT).\n</p>\n<p>\nAfter a successful match, a partial match, or one of the invalid UTF errors\n(for example, PCRE2_ERROR_UTF8_ERR5), <b>pcre2_get_startchar()</b> can be\ncalled. After a successful or partial match it returns the code unit offset of\nthe character at which the match started. For a non-partial match, this can be\ndifferent to the value of <i>ovector[0]</i> if the pattern contains the \\K\nescape sequence. After a partial match, however, this value is always the same\nas <i>ovector[0]</i> because \\K does not affect the result of a partial match.\n</p>\n<p>\nAfter a UTF check failure, <b>pcre2_get_startchar()</b> can be used to obtain\nthe code unit offset of the invalid UTF character. Details are given in the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\npage.\n<a name=\"errorlist\"></a></p>\n<h2><a name=\"SEC32\" href=\"#TOC1\">ERROR RETURNS FROM <b>pcre2_match()</b></a></h2>\n<p>\nIf <b>pcre2_match()</b> fails, it returns a negative number. This can be\nconverted to a text string by calling the <b>pcre2_get_error_message()</b>\nfunction (see \"Obtaining a textual error message\"\n<a href=\"#geterrormessage\">below).</a>\nNegative error codes are also returned by other functions, and are documented\nwith them. The codes are given names in the header file. If UTF checking is in\nforce and an invalid UTF subject string is detected, one of a number of\nUTF-specific negative error codes is returned. Details are given in the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\npage. The following are the other errors that may be returned by\n<b>pcre2_match()</b>:\n<pre>\n  PCRE2_ERROR_NOMATCH\n</pre>\nThe subject string did not match the pattern.\n<pre>\n  PCRE2_ERROR_PARTIAL\n</pre>\nThe subject string did not match, but it did match partially. See the\n<a href=\"pcre2partial.html\"><b>pcre2partial</b></a>\ndocumentation for details of partial matching.\n<pre>\n  PCRE2_ERROR_BADMAGIC\n</pre>\nPCRE2 stores a 4-byte \"magic number\" at the start of the compiled code, to\ncatch the case when it is passed a junk pointer. This is the error that is\nreturned when the magic number is not present.\n<pre>\n  PCRE2_ERROR_BADMODE\n</pre>\nThis error is given when a compiled pattern is passed to a function in a\nlibrary of a different code unit width, for example, a pattern compiled by\nthe 8-bit library is passed to a 16-bit or 32-bit library function.\n<pre>\n  PCRE2_ERROR_BADOFFSET\n</pre>\nThe value of <i>startoffset</i> was greater than the length of the subject.\n<pre>\n  PCRE2_ERROR_BADOPTION\n</pre>\nAn unrecognized bit was set in the <i>options</i> argument.\n<pre>\n  PCRE2_ERROR_BADUTFOFFSET\n</pre>\nThe UTF code unit sequence that was passed as a subject was checked and found\nto be valid (the PCRE2_NO_UTF_CHECK option was not set), but the value of\n<i>startoffset</i> did not point to the beginning of a UTF character or the end\nof the subject.\n<pre>\n  PCRE2_ERROR_CALLOUT\n</pre>\nThis error is never generated by <b>pcre2_match()</b> itself. It is provided for\nuse by callout functions that want to cause <b>pcre2_match()</b> or\n<b>pcre2_callout_enumerate()</b> to return a distinctive error code. See the\n<a href=\"pcre2callout.html\"><b>pcre2callout</b></a>\ndocumentation for details.\n<pre>\n  PCRE2_ERROR_DEPTHLIMIT\n</pre>\nThe nested backtracking depth limit was reached.\n<pre>\n  PCRE2_ERROR_HEAPLIMIT\n</pre>\nThe heap limit was reached.\n<pre>\n  PCRE2_ERROR_INTERNAL\n</pre>\nAn unexpected internal error has occurred. This error could be caused by a bug\nin PCRE2 or by overwriting of the compiled pattern.\n<pre>\n  PCRE2_ERROR_JIT_STACKLIMIT\n</pre>\nThis error is returned when a pattern that was successfully studied using JIT\nis being matched, but the memory available for the just-in-time processing\nstack is not large enough. See the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\ndocumentation for more details.\n<pre>\n  PCRE2_ERROR_MATCHLIMIT\n</pre>\nThe backtracking match limit was reached.\n<pre>\n  PCRE2_ERROR_NOMEMORY\n</pre>\nHeap memory is used to remember backtracking points. This error is given when\nthe memory allocation function (default or custom) fails. Note that a different\nerror, PCRE2_ERROR_HEAPLIMIT, is given if the amount of memory needed exceeds\nthe heap limit. PCRE2_ERROR_NOMEMORY is also returned if\nPCRE2_COPY_MATCHED_SUBJECT is set and memory allocation fails.\n<pre>\n  PCRE2_ERROR_NULL\n</pre>\nEither the <i>code</i>, <i>subject</i>, or <i>match_data</i> argument was passed\nas NULL.\n<pre>\n  PCRE2_ERROR_RECURSELOOP\n</pre>\nThis error is returned when <b>pcre2_match()</b> detects a recursion loop within\nthe pattern. Specifically, it means that either the whole pattern or a\ncapture group has been called recursively for the second time at the same\nposition in the subject string. Some simple patterns that might do this are\ndetected and faulted at compile time, but more complicated cases, in particular\nmutual recursions between two different groups, cannot be detected until\nmatching is attempted.\n<a name=\"geterrormessage\"></a></p>\n<h2><a name=\"SEC33\" href=\"#TOC1\">OBTAINING A TEXTUAL ERROR MESSAGE</a></h2>\n<p>\n<b>int pcre2_get_error_message(int <i>errorcode</i>, PCRE2_UCHAR *<i>buffer</i>,</b>\n<b>  PCRE2_SIZE <i>bufflen</i>);</b>\n</p>\n<p>\nA text message for an error code from any PCRE2 function (compile, match, or\nauxiliary) can be obtained by calling <b>pcre2_get_error_message()</b>. The code\nis passed as the first argument, with the remaining two arguments specifying a\ncode unit buffer and its length in code units, into which the text message is\nplaced. The message is returned in code units of the appropriate width for the\nlibrary that is being used.\n</p>\n<p>\nThe returned message is terminated with a trailing zero, and the function\nreturns the number of code units used, excluding the trailing zero. If the\nerror number is unknown, the negative error code PCRE2_ERROR_BADDATA is\nreturned. If the buffer is too small, the message is truncated (but still with\na trailing zero), and the negative error code PCRE2_ERROR_NOMEMORY is returned.\nNone of the messages is very long; a buffer size of 120 code units is ample.\n<a name=\"matchiter\"></a></p>\n<h2><a name=\"SEC34\" href=\"#TOC1\">ITERATING OVER ALL MATCHES</a></h2>\n<p>\n<b>int pcre2_next_match(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_SIZE *<i>pstart_offset</i>, uint32_t *<i>poptions</i>);</b>\n</p>\n<p>\nA common task for applications is to implement \"global\" matching behaviour,\nfor example, replacing all matches in the subject; splitting the subject on all\nmatches; or simply counting the number of matches. The <b>pcre2_next_match()</b>\nfunction helps with this task by providing the appropriate parameters for the\nnext match attempt (available since PCRE2 10.47).\n</p>\n<p>\nFirst, a match attempt should be made using one of the matching functions\n(<b>pcre2_match()</b>, <b>pcre2_dfa_match()</b>, or <b>pcre2_jit_match()</b>).\nThen, <b>pcre2_next_match()</b> can be called, providing the same\n<i>match_data</i> parameter.\n</p>\n<p>\nIt returns 0 (\"false\") if there is no need to make a further match attempt, or\n1 (\"true\") if another match should be attempted. Returning 1 does not imply that\nthere is another match, only that another match should be attempted (which may\nreturn PCRE2_ERROR_NOMATCH).\n</p>\n<p>\nThe *<i>pstart_offset</i> and *<i>poptions</i> are set if the function returns 1.\nThe *<i>pstart_offset</i> should be passed to the next match attempt directly,\nand the *<i>poptions</i> should be passed to the next match attempt by combining\nwith the application's match options using OR.\n</p>\n<p>\nThere is some code that demonstrates how to do this in the\n<a href=\"pcre2demo.html\"><b>pcre2demo</b></a>\nsample program. The general pattern is:\n<br>\n<br>\n<pre>\n  uint32_t app_options = ...;\n  uint32_t global_options = 0;\n  PCRE2_SIZE start_offset = 0;\n  while (1)\n    {\n    int rc = pcre2_match(re, subject, subject_len, start_offset,\n                         app_options | global_options, match_data,\n                         match_context);\n\n    if (rc == PCRE2_ERROR_NOMATCH) break; /* no match, and no more attempts */\n    if (rc &#60; 0) { ... exit }\n\n    ...handle the match\n\n    if (!pcre2_next_match(match_data, &start_offset, &global_options))\n      break; /* no more attempts */\n    }\n</pre>\n</p>\n<p>\nThe guarantees provided by <b>pcre2_next_match()</b> are that the start_offset\nwill advance, so the loop will definitely terminate. The conditions which\nensure this are that either: (a) pcre2_next_match() returns 0 (false); or\n(b) the returned *<i>pstart_offset</i> is strictly greater than the previous\nstart_offset; or (c) if the previous match was a successful match of the empty\nstring then the returned *<i>pstart_offset</i> is equal to the previous\novector[1], and *<i>poptions</i> will be set to PCRE2_NOTEMPTY_ATSTART to prevent\nanother empty match from being returned.\n</p>\n<p>\nA loop implemented as shown above will always terminate, unless there is a bug\nin PCRE2. As a measure of \"defensive programming\", applications are encouraged\nto add an assertion or check to break their loop if it does not make progress\n(and report the issue as a bug).\n</p>\n<p>\nIf an application does not use the flag PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK, then\neach match is \"well-behaved\" and satisfies:\n<pre>\n  start_offset &#60;= ovector[0] &#60;= ovector[1].\n</pre>\nIn this case, the matches found by pcre2_match() with pcre2_next_match() will be\nsorted, non-overlapping (possibly touching), and with no duplicates.\n</p>\n<p>\nOtherwise, if PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK is used, then the guarantees are\nconsiderably weaker. We do not guarantee that the matches will always advance:\nonly that the start_offset will. The matches found by pcre2_match() with\npcre2_next_match() will be a finite sequence (as pcre2_next_match() ensures that\nstart_offset advances, so the search will terminate). The matches can however be\noverlapping, can contain duplicates, and (in truly pathological examples) may\nnot even be sorted by ovector[0]. Additionally, each match itself can end before\nit starts (ovector[1] &#60; ovector[0]). We recommend that applications do not set\nPCRE2_EXTRA_ALLOW_LOOKAROUND_BSK.\n<a name=\"extractbynumber\"></a></p>\n<h2><a name=\"SEC35\" href=\"#TOC1\">EXTRACTING CAPTURED SUBSTRINGS BY NUMBER</a></h2>\n<p>\n<b>int pcre2_substring_length_bynumber(pcre2_match_data *<i>match_data</i>,</b>\n<b>  uint32_t <i>number</i>, PCRE2_SIZE *<i>length</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_copy_bynumber(pcre2_match_data *<i>match_data</i>,</b>\n<b>  uint32_t <i>number</i>, PCRE2_UCHAR *<i>buffer</i>,</b>\n<b>  PCRE2_SIZE *<i>bufflen</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_get_bynumber(pcre2_match_data *<i>match_data</i>,</b>\n<b>  uint32_t <i>number</i>, PCRE2_UCHAR **<i>bufferptr</i>,</b>\n<b>  PCRE2_SIZE *<i>bufflen</i>);</b>\n<br>\n<br>\n<b>void pcre2_substring_free(PCRE2_UCHAR *<i>buffer</i>);</b>\n</p>\n<p>\nCaptured substrings can be accessed directly by using the ovector as described\n<a href=\"#matchedstrings\">above.</a>\nFor convenience, auxiliary functions are provided for extracting captured\nsubstrings as new, separate, zero-terminated strings. A substring that contains\na binary zero is correctly extracted and has a further zero added on the end,\nbut the result is not, of course, a C string.\n</p>\n<p>\nThe functions in this section identify substrings by number. The number zero\nrefers to the entire matched substring, with higher numbers referring to\nsubstrings captured by parenthesized groups. After a partial match, only\nsubstring zero is available. An attempt to extract any other substring gives\nthe error PCRE2_ERROR_PARTIAL. The next section describes similar functions for\nextracting captured substrings by name.\n</p>\n<p>\nIf a pattern uses the \\K escape sequence within a positive lookahead assertion,\nthe reported start of a successful match can be greater than the end of the\nmatch. For example, if the pattern (?=ab\\K) is matched against \"ab\", the start\nand end offset values for the match are 2 and 0. In this situation, calling\nthese functions with a zero substring number extracts a zero-length empty\nstring.\n</p>\n<p>\nYou can find the length in code units of a captured substring without\nextracting it by calling <b>pcre2_substring_length_bynumber()</b>. The first\nargument is a pointer to the match data block, the second is the group number,\nand the third is a pointer to a variable into which the length is placed. If\nyou just want to know whether or not the substring has been captured, you can\npass the third argument as NULL.\n</p>\n<p>\nThe <b>pcre2_substring_copy_bynumber()</b> function copies a captured substring\ninto a supplied buffer, whereas <b>pcre2_substring_get_bynumber()</b> copies it\ninto new memory, obtained using the same memory allocation function that was\nused for the match data block. The first two arguments of these functions are a\npointer to the match data block and a capture group number.\n</p>\n<p>\nThe final arguments of <b>pcre2_substring_copy_bynumber()</b> are a pointer to\nthe buffer and a pointer to a variable that contains its length in code units.\nThis is updated to contain the actual number of code units used for the\nextracted substring, excluding the terminating zero.\n</p>\n<p>\nFor <b>pcre2_substring_get_bynumber()</b> the third and fourth arguments point\nto variables that are updated with a pointer to the new memory and the number\nof code units that comprise the substring, again excluding the terminating\nzero. When the substring is no longer needed, the memory should be freed by\ncalling <b>pcre2_substring_free()</b>.\n</p>\n<p>\nThe return value from all these functions is zero for success, or a negative\nerror code. If the pattern match failed, the match failure code is returned.\nIf a substring number greater than zero is used after a partial match,\nPCRE2_ERROR_PARTIAL is returned. Other possible error codes are:\n<pre>\n  PCRE2_ERROR_NOMEMORY\n</pre>\nThe buffer was too small for <b>pcre2_substring_copy_bynumber()</b>, or the\nattempt to get memory failed for <b>pcre2_substring_get_bynumber()</b>.\n<pre>\n  PCRE2_ERROR_NOSUBSTRING\n</pre>\nThere is no substring with that number in the pattern, that is, the number is\ngreater than the number of capturing parentheses.\n<pre>\n  PCRE2_ERROR_UNAVAILABLE\n</pre>\nThe substring number, though not greater than the number of captures in the\npattern, is greater than the number of slots in the ovector, so the substring\ncould not be captured.\n<pre>\n  PCRE2_ERROR_UNSET\n</pre>\nThe substring did not participate in the match. For example, if the pattern is\n(abc)|(def) and the subject is \"def\", and the ovector contains at least two\ncapturing slots, substring number 1 is unset.\n</p>\n<h2><a name=\"SEC36\" href=\"#TOC1\">EXTRACTING A LIST OF ALL CAPTURED SUBSTRINGS</a></h2>\n<p>\n<b>int pcre2_substring_list_get(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_UCHAR ***<i>listptr</i>, PCRE2_SIZE **<i>lengthsptr</i>);</b>\n<br>\n<br>\n<b>void pcre2_substring_list_free(PCRE2_UCHAR **<i>list</i>);</b>\n</p>\n<p>\nThe <b>pcre2_substring_list_get()</b> function extracts all available substrings\nand builds a list of pointers to them. It also (optionally) builds a second\nlist that contains their lengths (in code units), excluding a terminating zero\nthat is added to each of them. All this is done in a single block of memory\nthat is obtained using the same memory allocation function that was used to get\nthe match data block.\n</p>\n<p>\nThis function must be called only after a successful match. If called after a\npartial match, the error code PCRE2_ERROR_PARTIAL is returned.\n</p>\n<p>\nThe address of the memory block is returned via <i>listptr</i>, which is also\nthe start of the list of string pointers. The end of the list is marked by a\nNULL pointer. The address of the list of lengths is returned via\n<i>lengthsptr</i>. If your strings do not contain binary zeros and you do not\ntherefore need the lengths, you may supply NULL as the <b>lengthsptr</b>\nargument to disable the creation of a list of lengths. The yield of the\nfunction is zero if all went well, or PCRE2_ERROR_NOMEMORY if the memory block\ncould not be obtained. When the list is no longer needed, it should be freed by\ncalling <b>pcre2_substring_list_free()</b>.\n</p>\n<p>\nIf this function encounters a substring that is unset, which can happen when\ncapture group number <i>n+1</i> matches some part of the subject, but group\n<i>n</i> has not been used at all, it returns an empty string. This can be\ndistinguished from a genuine zero-length substring by inspecting the\nappropriate offset in the ovector, which contain PCRE2_UNSET for unset\nsubstrings, or by calling <b>pcre2_substring_length_bynumber()</b>.\n<a name=\"extractbyname\"></a></p>\n<h2><a name=\"SEC37\" href=\"#TOC1\">EXTRACTING CAPTURED SUBSTRINGS BY NAME</a></h2>\n<p>\n<b>int pcre2_substring_number_from_name(const pcre2_code *<i>code</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_length_byname(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>, PCRE2_SIZE *<i>length</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_copy_byname(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>, PCRE2_UCHAR *<i>buffer</i>, PCRE2_SIZE *<i>bufflen</i>);</b>\n<br>\n<br>\n<b>int pcre2_substring_get_byname(pcre2_match_data *<i>match_data</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>, PCRE2_UCHAR **<i>bufferptr</i>, PCRE2_SIZE *<i>bufflen</i>);</b>\n<br>\n<br>\n<b>void pcre2_substring_free(PCRE2_UCHAR *<i>buffer</i>);</b>\n</p>\n<p>\nTo extract a substring by name, you first have to find associated number.\nFor example, for this pattern:\n<pre>\n  (a+)b(?&#60;xxx&#62;\\d+)...\n</pre>\nthe number of the capture group called \"xxx\" is 2. If the name is known to be\nunique (PCRE2_DUPNAMES was not set), you can find the number from the name by\ncalling <b>pcre2_substring_number_from_name()</b>. The first argument is the\ncompiled pattern, and the second is the name. The yield of the function is the\ngroup number, PCRE2_ERROR_NOSUBSTRING if there is no group with that name, or\nPCRE2_ERROR_NOUNIQUESUBSTRING if there is more than one group with that name.\nGiven the number, you can extract the substring directly from the ovector, or\nuse one of the \"bynumber\" functions described above.\n</p>\n<p>\nFor convenience, there are also \"byname\" functions that correspond to the\n\"bynumber\" functions, the only difference being that the second argument is a\nname instead of a number. If PCRE2_DUPNAMES is set and there are duplicate\nnames, these functions scan all the groups with the given name, and return the\ncaptured substring from the first named group that is set.\n</p>\n<p>\nIf there are no groups with the given name, PCRE2_ERROR_NOSUBSTRING is\nreturned. If all groups with the name have numbers that are greater than the\nnumber of slots in the ovector, PCRE2_ERROR_UNAVAILABLE is returned. If there\nis at least one group with a slot in the ovector, but no group is found to be\nset, PCRE2_ERROR_UNSET is returned.\n</p>\n<p>\n<b>Warning:</b> If the pattern uses the (?| feature to set up multiple\ncapture groups with the same number, as described in the\n<a href=\"pcre2pattern.html#dupgroupnumber\">section on duplicate group numbers</a>\nin the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\npage, you cannot use names to distinguish the different capture groups, because\nnames are not included in the compiled code. The matching process uses only\nnumbers. For this reason, the use of different names for groups with the\nsame number causes an error at compile time.\n<a name=\"substitutions\"></a></p>\n<h2><a name=\"SEC38\" href=\"#TOC1\">CREATING A NEW STRING WITH SUBSTITUTIONS</a></h2>\n<p>\n<b>int pcre2_substitute(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>\n<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>\n<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>\n<b>  pcre2_match_context *<i>mcontext</i>, PCRE2_SPTR <i>replacement</i>,</b>\n<b>  PCRE2_SIZE <i>rlength</i>, PCRE2_UCHAR *<i>outputbuffer</i>,</b>\n<b>  PCRE2_SIZE *<i>outlengthptr</i>);</b>\n</p>\n<p>\nThis function optionally calls <b>pcre2_match()</b> and then makes a copy of the\nsubject string in <i>outputbuffer</i>, replacing parts that were matched with\nthe <i>replacement</i> string, whose length is supplied in <b>rlength</b>, which\ncan be given as PCRE2_ZERO_TERMINATED for a zero-terminated string. As a\nspecial case, if <i>replacement</i> is NULL and <i>rlength</i> is zero, the\nreplacement is assumed to be an empty string. If <i>rlength</i> is non-zero, an\nerror occurs if <i>replacement</i> is NULL.\n</p>\n<p>\nThere is an option (see PCRE2_SUBSTITUTE_REPLACEMENT_ONLY below) to return just\nthe replacement string(s). The default action is to perform just one\nreplacement if the pattern matches, but there is an option that requests\nmultiple replacements (see PCRE2_SUBSTITUTE_GLOBAL below).\n</p>\n<p>\nIf successful, <b>pcre2_substitute()</b> returns the number of substitutions\nthat were carried out. This may be zero if no match was found, and is never\ngreater than one unless PCRE2_SUBSTITUTE_GLOBAL is set. A negative value is\nreturned if an error is detected.\n</p>\n<p>\nMatches in which a \\K item in a lookahead in the pattern causes the match to\nend before it starts are not supported, and give rise to an error return. For\nglobal replacements, matches in which \\K in a lookbehind causes the match to\nstart earlier than the point that was reached in the previous iteration are\nalso not supported. (These cases are only possible if the pattern was compiled\nwith the backwards-compatibility option PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK.)\n</p>\n<p>\nThe first seven arguments of <b>pcre2_substitute()</b> are the same as for\n<b>pcre2_match()</b>, except that the partial matching options are not\npermitted, and <i>match_data</i> may be passed as NULL, in which case a match\ndata block is obtained and freed within this function, using memory management\nfunctions from the match context, if provided, or else those that were used to\nallocate memory for the compiled code.\n</p>\n<p>\nIf <i>match_data</i> is not NULL and PCRE2_SUBSTITUTE_MATCHED is not set, the\nprovided block is used for all calls to <b>pcre2_match()</b>, and its contents\nafterwards are the result of the final call made internally by\n<b>pcre2_substitute()</b> to the matching function. For global changes, this will\nalways be a no-match error. The contents of the ovector within the match data\nblock may or may not have been changed.\n</p>\n<p>\nAs well as the usual options for <b>pcre2_match()</b>, a number of additional\noptions can be set in the <i>options</i> argument of <b>pcre2_substitute()</b>.\nOne such option is PCRE2_SUBSTITUTE_MATCHED. When this is set, an external\n<i>match_data</i> block must be provided, and it must have already been used for\nan external call to <b>pcre2_match()</b> (or <b>pcre2_jit_match()</b>) with the\nsame pattern, subject pointer, effective subject length, start offset, and match\noption arguments (substitute-specific options can be added to the <i>options</i>\nargument). If any of these parameters is changed, <b>pcre2_substitute()</b>\nreturns an error. The data in the <i>match_data</i> block (return code, offset\nvector) is used for the first substitution instead of calling\n<b>pcre2_match()</b> from within <b>pcre2_substitute()</b>. This allows an\napplication to check for a match before choosing to substitute, without having\nto repeat the match.\n</p>\n<p>\nIf the contents of the subject buffer are mutated in between <b>pcre2_match()</b>\nand a call to <b>pcre2_substitute()</b> with PCRE2_SUBSTITUTE_MATCHED, the\nbehaviour is unsafe; in particular, in this case, PCRE2 is unable to ensure that\nthe offsets in the ovector point to the start of characters (with UTF-encoded\ninput).\n</p>\n<p>\nThe contents of the externally supplied match data block are not changed when\nPCRE2_SUBSTITUTE_MATCHED is set, and so the match block is permitted for use in\nanother call using PCRE2_SUBSTITUTE_MATCHED. If PCRE2_SUBSTITUTE_GLOBAL is also\nset, <b>pcre2_match()</b> is called after the first substitution to check for\nfurthe matches, but this is done using an internally obtained match data block,\nthus always leaving the external block unchanged.\n</p>\n<p>\nThe <i>code</i> argument is not used for matching before the first substitution\nwhen PCRE2_SUBSTITUTE_MATCHED is set, but it must be provided, even when\nPCRE2_SUBSTITUTE_GLOBAL is not set, because it contains information such as the\nUTF setting and the number of capturing parentheses in the pattern.\n</p>\n<p>\nWhen using PCRE2_SUBSTITUTE_MATCHED, you should not modify the subject string\nin between the prior call to <b>pcre2_match()</b> and <b>pcre2_substitute()</b>,\nas the substitution assumes that the passed-in ovector is compatible with the\nsubject string. Although PCRE2 does verify that the subject is a pointer to the\nsame buffer, it cannot in general verify whether the contents of the buffer have\nchanged. For example, if the subject buffer is mutated from one valid UTF-8\nstring to another valid string, of the same length in code units, the ovector\noffsets are no longer guaranteed to point to the start of a character. Beware\nthat with PCRE2_SUBSTITUTE_MATCHED in UTF mode, the subject string is not\nre-scanned for UTF validity when <b>pcre2_substitute()</b> first uses it.\n</p>\n<p>\nThe default action of <b>pcre2_substitute()</b> is to return a copy of the\nsubject string with matched substrings replaced. However, if\nPCRE2_SUBSTITUTE_REPLACEMENT_ONLY is set, only the replacement substrings are\nreturned. In the global case, multiple replacements are concatenated in the\noutput buffer. Substitution callouts (see\n<a href=\"#subcallouts\">below)</a>\ncan be used to separate them if necessary.\n</p>\n<p>\nPartial matching is supported, with limitations: if matching succeeds but with a\npartial match, then pcre2_substitute returns PCRE2_ERROR_PARTIAL. When\npartial-matching (either of PCRE2_PARTIAL_HARD or PCRE2_PARTIAL_SOFT is passed),\nthen PCRE2_SUBSTITUTE_REPLACEMENT_ONLY must also be set, or else\nPCRE2_ERROR_BADOPTION is returned. Similarly, certain replacement items\n($' and $_) cause PCRE2_ERROR_PARTIALSUBS to be returned when partial-matching,\neven if a complete match is found.\n</p>\n<p>\nThe <i>outlengthptr</i> argument of <b>pcre2_substitute()</b> must point to a\nvariable that contains the length, in code units, of the output buffer. If the\nfunction is successful, the value is updated to contain the length in code\nunits of the new string, excluding the trailing zero that is automatically\nadded.\n</p>\n<p>\nIf the function is not successful, the value set via <i>outlengthptr</i> depends\non the type of error. For syntax errors in the replacement string, the value is\nthe offset in the replacement string where the error was detected. For other\nerrors, the value is PCRE2_UNSET by default. This includes the case of the\noutput buffer being too small, unless PCRE2_SUBSTITUTE_OVERFLOW_LENGTH is set.\n</p>\n<p>\nPCRE2_SUBSTITUTE_OVERFLOW_LENGTH changes what happens when the output buffer is\ntoo small. The default action is to return PCRE2_ERROR_NOMEMORY immediately. If\nthis option is set, however, <b>pcre2_substitute()</b> continues to go through\nthe motions of matching and substituting (without, of course, writing anything)\nin order to compute the size of buffer that is needed, which will include the\nextra space for the terminating NUL. This value is passed back via the\n<i>outlengthptr</i> variable, with the result of the function still being\nPCRE2_ERROR_NOMEMORY.\n</p>\n<p>\nPassing a buffer size of zero is a permitted way of finding out how much memory\nis needed for given substitution. However, this does mean that the entire\noperation is carried out twice. Depending on the application, it may be more\nefficient to allocate a large buffer and free the excess afterwards, instead of\nusing PCRE2_SUBSTITUTE_OVERFLOW_LENGTH.\n</p>\n<p>\nThe replacement string, which is interpreted as a UTF string in UTF mode, is\nchecked for UTF validity unless PCRE2_NO_UTF_CHECK is set. An invalid UTF\nreplacement string causes an immediate return with the relevant UTF error code.\n</p>\n<p>\nIf PCRE2_SUBSTITUTE_LITERAL is set, the replacement string is not interpreted\nin any way. By default, however, a dollar character is an escape character that\ncan specify the insertion of characters from capture groups and names from\n(*MARK) or other control verbs in the pattern. Dollar is the only escape\ncharacter (backslash is treated as literal). The following forms are\nrecognized:\n<pre>\n  $$                  insert a dollar character\n  $n or ${n}          insert the contents of group <i>n</i>\n  $0 or $&            insert the entire matched substring\n  $`                  insert the substring that precedes the match\n  $'                  insert the substring that follows the match\n  $_                  insert the entire input string\n  $+                  insert the highest-numbered capture group which matched\n  $*MARK or ${*MARK}  insert a control verb name\n</pre>\nEither a group number or a group name can be given for <i>n</i>, for example $2\nor $NAME. Curly brackets are required only if the following character would be\ninterpreted as part of the number or name. The number may be zero to include\nthe entire matched string. For example, if the pattern a(b)c is matched with\n\"=abc=\" and the replacement string \"+$1$0$1+\", the result is \"=+babcb+=\".\n</p>\n<p>\nThe JavaScript form $&#60;name&#62;, where the angle brackets are part of the syntax,\nis also recognized for group names, but not for group numbers or *MARK.\n</p>\n<p>\n$*MARK inserts the name from the last encountered backtracking control verb on\nthe matching path that has a name. (*MARK) must always include a name, but the\nother verbs need not. For example, in the case of (*MARK:A)(*PRUNE) the name\ninserted is \"A\", but for (*MARK:A)(*PRUNE:B) the relevant name is \"B\". This\nfacility can be used to perform simple simultaneous substitutions, as this\n<b>pcre2test</b> example shows:\n<pre>\n  /(*MARK:pear)apple|(*MARK:orange)lemon/g,replace=${*MARK}\n      apple lemon\n   2: pear orange\n</pre>\nPCRE2_SUBSTITUTE_GLOBAL causes the function to iterate over the subject string,\nreplacing every matching substring. If this option is not set, only the first\nmatching substring is replaced. The search for matches takes place in the\noriginal subject string (that is, previous replacements do not affect it).\nIteration is implemented by advancing the <i>startoffset</i> value for each\nsearch, which is always passed the entire subject string. If an offset limit is\nset in the match context, searching stops when that limit is reached.\n</p>\n<p>\nBecause global substitutions apply the pattern repeatedly to the subject string,\nand always iterate over non-overlapping matches, the substitutions done by\n<b>pcre2_substitute()</b> do not match and substitute text inside the replacement\nstrings themselves (no recursive/iterative substitution). However, applications\ncan easily implement other alternative replacement strategies, such as\niteratively replacing, then matching and replacing on the result. The\nreplacement loop inside <b>pcre2_substitute()</b> is simple and can be emulated\nin client code by allocating a buffer, searching for matches in a loop, and\ncalling <b>pcre2_substitute()</b> with PCRE2_SUBSTITUTE_REPLACEMENT_ONLY an\nPCRE2_SUBSTITUTE_MATCHED, and without PCRE2_SUBSTITUTE_GLOBAL.\n</p>\n<p>\nYou can restrict the effect of a global substitution to a portion of the\nsubject string by setting either or both of <i>startoffset</i> and an offset\nlimit. Here is a <b>pcre2test</b> example:\n<pre>\n  /B/g,replace=!,use_offset_limit\n  ABC ABC ABC ABC\\=offset=3,offset_limit=12\n   2: ABC A!C A!C ABC\n</pre>\nWhen continuing with global substitutions after matching a substring with zero\nlength, an attempt to find a non-empty match at the same offset is performed.\nIf this is not successful, the offset is advanced by one character except when\nCRLF is a valid newline sequence and the next two characters are CR, LF. In\nthis case, the offset is advanced by two characters.\n</p>\n<p>\nPCRE2_SUBSTITUTE_UNKNOWN_UNSET causes references to capture groups that do\nnot appear in the pattern to be treated as unset groups. This option should be\nused with care, because it means that a typo in a group name or number no\nlonger causes the PCRE2_ERROR_NOSUBSTRING error.\n</p>\n<p>\nPCRE2_SUBSTITUTE_UNSET_EMPTY causes unset capture groups (including unknown\ngroups when PCRE2_SUBSTITUTE_UNKNOWN_UNSET is set) to be treated as empty\nstrings when inserted as described above. If this option is not set, an attempt\nto insert an unset group causes the PCRE2_ERROR_UNSET error. This option does\nnot influence the extended substitution syntax described below.\n</p>\n<p>\nPCRE2_SUBSTITUTE_EXTENDED causes extra processing to be applied to the\nreplacement string. Without this option, only the dollar character is special,\nand only the group insertion forms listed above are valid. When\nPCRE2_SUBSTITUTE_EXTENDED is set, several things change:\n</p>\n<p>\nFirstly, backslash in a replacement string is interpreted as an escape\ncharacter. The usual forms such as \\x{ddd} can be used to specify particular\ncharacter codes, and backslash followed by any non-alphanumeric character\nquotes that character. Extended quoting can be coded using \\Q...\\E, exactly\nas in pattern strings. The escapes \\b and \\v are interpreted as the\ncharacters backspace and vertical tab, respectively.\n</p>\n<p>\nThe interpretation of backslash followed by one or more digits is the same as\nin a pattern, which in Perl has some ambiguities. Details are given in the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\npage.\n</p>\n<p>\nThe Python form \\g&#60;n&#62;, where the angle brackets are part of the syntax and\n<i>n</i> is either a group name or number, is recognized as an alternative way\nof inserting the contents of a group, for example \\g&#60;3&#62;.\n</p>\n<p>\nThere are also four escape sequences for forcing the case of inserted letters.\nCase forcing applies to all inserted characters, including those from capture\ngroups and letters within \\Q...\\E quoted sequences. The insertion mechanism\nhas three states: no case forcing, force upper case, and force lower case. The\nescape sequences change the current state: \\U and \\L change to upper or lower\ncase forcing, respectively, and \\E (when not terminating a \\Q quoted\nsequence) reverts to no case forcing. The sequences \\u and \\l force the next\ncharacter (if it is a letter) to upper or lower case, respectively, and then\nthe state automatically reverts to no case forcing.\n</p>\n<p>\nHowever, if \\u is immediately followed by \\L or \\l is immediately followed\nby \\U, the next character's case is forced by the first escape sequence, and\nsubsequent characters by the second. This provides a \"title casing\" facility\nthat can be applied to group captures. For example, if group 1 has captured\n\"heLLo\", the replacement string \"\\u\\L$1\" becomes \"Hello\".\n</p>\n<p>\nIf either PCRE2_UTF or PCRE2_UCP was set when the pattern was compiled, Unicode\nproperties are used for case forcing characters whose code points are greater\nthan 127. However, only simple case folding, as determined by the Unicode file\n<b>CaseFolding.txt</b> is supported. PCRE2 does not support language-specific\nspecial casing rules such as using different lower case Greek sigmas in the\nmiddle and ends of words (as defined in the Unicode file\n<b>SpecialCasing.txt</b>).\n</p>\n<p>\nNote that case forcing sequences such as \\U...\\E do not nest. For example,\nthe result of processing \"\\Uaa\\LBB\\Ecc\\E\" is \"AAbbcc\"; the final \\E has no\neffect. Note also that the PCRE2_ALT_BSUX and PCRE2_EXTRA_ALT_BSUX options do\nnot apply to replacement strings.\n</p>\n<p>\nThe final effect of setting PCRE2_SUBSTITUTE_EXTENDED is to add more\nflexibility to capture group substitution. The syntax is similar to that used\nby Bash:\n<pre>\n  ${n:-string}\n  ${n:+string1:string2}\n</pre>\nAs in the simple case, <i>n</i> may be a group number or a name. The first form\nspecifies a default value. If group <i>n</i> is set, its value is inserted; if\nnot, the string is expanded and the result inserted. The second form specifies\nstrings that are expanded and inserted when group <i>n</i> is set or unset,\nrespectively. The first form is just a convenient shorthand for\n<pre>\n  ${n:+${n}:string}\n</pre>\nBackslash can be used to escape colons and closing curly brackets in the\nreplacement strings. A change of the case forcing state within a replacement\nstring remains in force afterwards, as shown in this <b>pcre2test</b> example:\n<pre>\n  /(some)?(body)/substitute_extended,replace=${1:+\\U:\\L}HeLLo\n      body\n   1: hello\n      somebody\n   1: HELLO\n</pre>\nThe PCRE2_SUBSTITUTE_UNSET_EMPTY option does not affect these extended\nsubstitutions. However, PCRE2_SUBSTITUTE_UNKNOWN_UNSET does cause unknown\ngroups in the extended syntax forms to be treated as unset.\n</p>\n<p>\nIf PCRE2_SUBSTITUTE_LITERAL is set, PCRE2_SUBSTITUTE_UNKNOWN_UNSET,\nPCRE2_SUBSTITUTE_UNSET_EMPTY, and PCRE2_SUBSTITUTE_EXTENDED are irrelevant and\nare ignored.\n</p>\n<h3>\nSubstitution errors\n</h3>\n<p>\nIn the event of an error, <b>pcre2_substitute()</b> returns a negative error\ncode. Except for PCRE2_ERROR_NOMATCH (which is never returned), errors from\n<b>pcre2_match()</b> are passed straight back.\n</p>\n<p>\nPCRE2_ERROR_NOSUBSTRING is returned for a non-existent substring insertion,\nunless PCRE2_SUBSTITUTE_UNKNOWN_UNSET is set.\n</p>\n<p>\nPCRE2_ERROR_UNSET is returned for an unset substring insertion (including an\nunknown substring when PCRE2_SUBSTITUTE_UNKNOWN_UNSET is set) when the simple\n(non-extended) syntax is used and PCRE2_SUBSTITUTE_UNSET_EMPTY is not set.\n</p>\n<p>\nPCRE2_ERROR_NOMEMORY is returned if the output buffer is not big enough. If the\nPCRE2_SUBSTITUTE_OVERFLOW_LENGTH option is set, the size of buffer that is\nneeded is returned via <i>outlengthptr</i>. Note that this does not happen by\ndefault.\n</p>\n<p>\nPCRE2_ERROR_NULL is returned if PCRE2_SUBSTITUTE_MATCHED is set but the\n<i>match_data</i> argument is NULL or if the <i>subject</i> or <i>replacement</i>\narguments are NULL. For backward compatibility reasons an exception is made for\nthe <i>replacement</i> argument if the <i>rlength</i> argument is also 0.\n</p>\n<p>\nPCRE2_ERROR_BADREPLACEMENT is used for miscellaneous syntax errors in the\nreplacement string, with more particular errors being PCRE2_ERROR_BADREPESCAPE\n(invalid escape sequence), PCRE2_ERROR_REPMISSINGBRACE (closing curly bracket\nnot found), PCRE2_ERROR_BADSUBSTITUTION (syntax error in extended group\nsubstitution), and PCRE2_ERROR_BADSUBSPATTERN (the pattern match ended before\nit started or the match started earlier than the current position in the\nsubject, which can happen if \\K is used in a lookaround assertion).\n</p>\n<p>\nAs for all PCRE2 errors, a text message that describes the error can be\nobtained by calling the <b>pcre2_get_error_message()</b> function (see\n\"Obtaining a textual error message\"\n<a href=\"#geterrormessage\">above).</a>\n<a name=\"subcallouts\"></a></p>\n<h3>\nSubstitution callouts\n</h3>\n<p>\n<b>int pcre2_set_substitute_callout(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  int (*<i>callout_function</i>)(pcre2_substitute_callout_block *, void *),</b>\n<b>  void *<i>callout_data</i>);</b>\n<br>\n<br>\nThe <b>pcre2_set_substitute_callout()</b> function can be used to specify a\ncallout function for <b>pcre2_substitute()</b>. This information is passed in\na match context. The callout function is called after each substitution has\nbeen processed, but it can cause the replacement not to happen.\n</p>\n<p>\nThe callout function is not called for simulated substitutions that happen as a\nresult of the PCRE2_SUBSTITUTE_OVERFLOW_LENGTH option. In this mode, when\nsubstitution processing exceeds the buffer space provided by the caller,\nprocessing continues by counting code units. The simulation is unable to\npopulate the callout block, and so the simulation is pessimistic about the\nrequired buffer size. Whichever is larger of accepted or rejected substitution\nis reported as the required size. Therefore, the returned buffer length may be\nan overestimate (without a substitution callout, it is normally an exact\nmeasurement).\n</p>\n<p>\nThe first argument of the callout function is a pointer to a substitute callout\nblock structure, which contains the following fields, not necessarily in this\norder:\n<pre>\n  uint32_t    <i>version</i>;\n  uint32_t    <i>subscount</i>;\n  PCRE2_SPTR  <i>input</i>;\n  PCRE2_SPTR  <i>output</i>;\n  PCRE2_SIZE <i>*ovector</i>;\n  uint32_t    <i>oveccount</i>;\n  PCRE2_SIZE  <i>output_offsets[2]</i>;\n</pre>\nThe <i>version</i> field contains the version number of the block format. The\ncurrent version is 0. The version number will increase in future if more fields\nare added, but the intention is never to remove any of the existing fields.\n</p>\n<p>\nThe <i>subscount</i> field is the number of the current match. It is 1 for the\nfirst callout, 2 for the second, and so on. The <i>input</i> and <i>output</i>\npointers are copies of the values passed to <b>pcre2_substitute()</b>.\n</p>\n<p>\nThe <i>ovector</i> field points to the ovector, which contains the result of the\nmost recent match. The <i>oveccount</i> field contains the number of pairs that\nare set in the ovector, and is always greater than zero.\n</p>\n<p>\nThe <i>output_offsets</i> vector contains the offsets of the replacement in the\noutput string. This has already been processed for dollar and (if requested)\nbackslash substitutions as described above.\n</p>\n<p>\nThe second argument of the callout function is the value passed as\n<i>callout_data</i> when the function was registered. The value returned by the\ncallout function is interpreted as follows:\n</p>\n<p>\nIf the value is zero, the replacement is accepted, and, if\nPCRE2_SUBSTITUTE_GLOBAL is set, processing continues with a search for the next\nmatch. If the value is not zero, the current replacement is not accepted. If\nthe value is greater than zero, processing continues when\nPCRE2_SUBSTITUTE_GLOBAL is set. Otherwise (the value is less than zero or\nPCRE2_SUBSTITUTE_GLOBAL is not set), the rest of the input is copied to the\noutput and the call to <b>pcre2_substitute()</b> exits, returning the number of\nmatches so far.\n</p>\n<h3>\nSubstitution case callouts\n</h3>\n<p>\n<b>int pcre2_set_substitute_case_callout(pcre2_match_context *<i>mcontext</i>,</b>\n<b>  PCRE2_SIZE (*<i>callout_function</i>)(PCRE2_SPTR, PCRE2_SIZE,</b>\n<b>                                 PCRE2_UCHAR *, PCRE2_SIZE,</b>\n<b>                                 int, void *),</b>\n<b>  void *<i>callout_data</i>);</b>\n<br>\n<br>\nThe <b>pcre2_set_substitute_case_callout()</b> function can be used to specify\na callout function for <b>pcre2_substitute()</b> to use when performing case\ntransformations. This does not affect any case insensitivity behaviour when\nperforming a match, but only the user-visible transformations performed when\nprocessing a substitution such as:\n<pre>\n    pcre2_substitute(..., \"\\\\U$1\", ...)\n</pre>\n</p>\n<p>\nThe default case transformations applied by PCRE2 are reasonably complete, and,\nin UTF or UCP mode, perform the simple locale-invariant case transformations as\nspecified by Unicode. This is suitable for the internal (invisible)\ncase-equivalence procedures used during pattern matching, but an application\nmay wish to use more sophisticated locale-aware processing for the user-visible\nsubstitution transformations.\n</p>\n<p>\nOne example implementation of the <i>callout_function</i> using the ICU\nlibrary would be:\n<br>\n<br>\n<pre>\n    PCRE2_SIZE\n    icu_case_callout(\n      PCRE2_SPTR input, PCRE2_SIZE input_len,\n      PCRE2_UCHAR *output, PCRE2_SIZE output_cap,\n      int to_case, void *data_ptr)\n    {\n      UErrorCode err = U_ZERO_ERROR;\n      int32_t r = to_case == PCRE2_SUBSTITUTE_CASE_LOWER\n        ? u_strToLower(output, output_cap, input, input_len, NULL, &err)\n        : to_case == PCRE2_SUBSTITUTE_CASE_UPPER\n        ? u_strToUpper(output, output_cap, input, input_len, NULL, &err)\n        : u_strToTitle(output, output_cap, input, input_len, &first_char_only,\n                       NULL, &err);\n      if (U_FAILURE(err)) return (~(PCRE2_SIZE)0);\n      return r;\n    }\n</pre>\n</p>\n<p>\nThe first and second arguments of the case callout function are the Unicode\nstring to transform.\n</p>\n<p>\nThe third and fourth arguments are the output buffer and its capacity.\n</p>\n<p>\nThe fifth is one of the constants PCRE2_SUBSTITUTE_CASE_LOWER,\nPCRE2_SUBSTITUTE_CASE_UPPER, or PCRE2_SUBSTITUTE_CASE_TITLE_FIRST.\nPCRE2_SUBSTITUTE_CASE_LOWER and PCRE2_SUBSTITUTE_CASE_UPPER are passed to the\ncallout to indicate that the case of the entire callout input should be\ncase-transformed. PCRE2_SUBSTITUTE_CASE_TITLE_FIRST is passed to indicate that\nonly the first character or glyph should be transformed to Unicode titlecase\nand the rest to Unicode lowercase (note that titlecasing sometimes uses Unicode\nproperties to titlecase each word in a string; but PCRE2 is requesting that only\nthe single leading character is to be titlecased).\n</p>\n<p>\nThe sixth argument is the <i>callout_data</i> supplied to\n<b>pcre2_set_substitute_case_callout()</b>.\n</p>\n<p>\nThe resulting string in the destination buffer may be larger or smaller than the\ninput, if the casing rules merge or split characters. The return value is the\nlength required for the output string. If a buffer of sufficient size was\nprovided to the callout, then the result must be written to the buffer and the\nnumber of code units returned. If the result does not fit in the provided\nbuffer, then the required capacity must be returned and PCRE2 will not make use\nof the output buffer. PCRE2 provides input and output buffers which overlap, so\nthe callout must support this by suitable internal buffering.\n</p>\n<p>\nAlternatively, if the callout wishes to indicate an error, then it may return\n(~(PCRE2_SIZE)0). In this case pcre2_substitute() will immediately fail with\nerror PCRE2_ERROR_REPLACECASE.\n</p>\n<p>\nWhen a case callout is combined with the PCRE2_SUBSTITUTE_OVERFLOW_LENGTH\noption, there are situations when pcre2_substitute() will return an\nunderestimate of the required buffer size. If you call pcre2_substitute() once\nwith PCRE2_SUBSTITUTE_OVERFLOW_LENGTH, and the input buffer is too small for\nthe replacement string to be constructed, then instead of calling the case\ncallout, pcre2_substitute() will make an estimate of the required buffer size.\nThe second call should also pass PCRE2_SUBSTITUTE_OVERFLOW_LENGTH, because that\nsecond call is not guaranteed to succeed either, if the case callout requires\nmore buffer space than expected. The caller must make repeated attempts in a\nloop.\n</p>\n<h2><a name=\"SEC39\" href=\"#TOC1\">DUPLICATE CAPTURE GROUP NAMES</a></h2>\n<p>\n<b>int pcre2_substring_nametable_scan(const pcre2_code *<i>code</i>,</b>\n<b>  PCRE2_SPTR <i>name</i>, PCRE2_SPTR *<i>first</i>, PCRE2_SPTR *<i>last</i>);</b>\n</p>\n<p>\nWhen a pattern is compiled with the PCRE2_DUPNAMES option, names for capture\ngroups are not required to be unique. Duplicate names are always allowed for\ngroups with the same number, created by using the (?| feature. Indeed, if such\ngroups are named, they are required to use the same names.\n</p>\n<p>\nNormally, patterns that use duplicate names are such that in any one match,\nonly one of each set of identically-named groups participates. An example is\nshown in the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation.\n</p>\n<p>\nWhen duplicates are present, <b>pcre2_substring_copy_byname()</b> and\n<b>pcre2_substring_get_byname()</b> return the first substring corresponding to\nthe given name that is set. Only if none are set is PCRE2_ERROR_UNSET is\nreturned. The <b>pcre2_substring_number_from_name()</b> function returns the\nerror PCRE2_ERROR_NOUNIQUESUBSTRING when there are duplicate names.\n</p>\n<p>\nIf you want to get full details of all captured substrings for a given name,\nyou must use the <b>pcre2_substring_nametable_scan()</b> function. The first\nargument is the compiled pattern, and the second is the name. If the third and\nfourth arguments are NULL, the function returns a group number for a unique\nname, or PCRE2_ERROR_NOUNIQUESUBSTRING otherwise.\n</p>\n<p>\nWhen the third and fourth arguments are not NULL, they must be pointers to\nvariables that are updated by the function. After it has run, they point to the\nfirst and last entries in the name-to-number table for the given name, and the\nfunction returns the length of each entry in code units. In both cases,\nPCRE2_ERROR_NOSUBSTRING is returned if there are no entries for the given name.\n</p>\n<p>\nThe format of the name table is described\n<a href=\"#infoaboutpattern\">above</a>\nin the section entitled <i>Information about a pattern</i>. Given all the\nrelevant entries for the name, you can extract each of their numbers, and hence\nthe captured data.\n</p>\n<h2><a name=\"SEC40\" href=\"#TOC1\">FINDING ALL POSSIBLE MATCHES AT ONE POSITION</a></h2>\n<p>\nThe traditional matching function uses a similar algorithm to Perl, which stops\nwhen it finds the first match at a given point in the subject. If you want to\nfind all possible matches, or the longest possible match at a given position,\nconsider using the alternative matching function (see below) instead. If you\ncannot use the alternative function, you can kludge it up by making use of the\ncallout facility, which is described in the\n<a href=\"pcre2callout.html\"><b>pcre2callout</b></a>\ndocumentation.\n</p>\n<p>\nWhat you have to do is to insert a callout right at the end of the pattern.\nWhen your callout function is called, extract and save the current matched\nsubstring. Then return 1, which forces <b>pcre2_match()</b> to backtrack and try\nother alternatives. Ultimately, when it runs out of matches,\n<b>pcre2_match()</b> will yield PCRE2_ERROR_NOMATCH.\n<a name=\"dfamatch\"></a></p>\n<h2><a name=\"SEC41\" href=\"#TOC1\">MATCHING A PATTERN: THE ALTERNATIVE FUNCTION</a></h2>\n<p>\n<b>int pcre2_dfa_match(const pcre2_code *<i>code</i>, PCRE2_SPTR <i>subject</i>,</b>\n<b>  PCRE2_SIZE <i>length</i>, PCRE2_SIZE <i>startoffset</i>,</b>\n<b>  uint32_t <i>options</i>, pcre2_match_data *<i>match_data</i>,</b>\n<b>  pcre2_match_context *<i>mcontext</i>,</b>\n<b>  int *<i>workspace</i>, PCRE2_SIZE <i>wscount</i>);</b>\n</p>\n<p>\nThe function <b>pcre2_dfa_match()</b> is called to match a subject string\nagainst a compiled pattern, using a matching algorithm that scans the subject\nstring just once (not counting lookaround assertions), and does not backtrack\n(except when processing lookaround assertions). This has different\ncharacteristics to the normal algorithm, and is not compatible with Perl. Some\nof the features of PCRE2 patterns are not supported. Nevertheless, there are\ntimes when this kind of matching can be useful. For a discussion of the two\nmatching algorithms, and a list of features that <b>pcre2_dfa_match()</b> does\nnot support, see the\n<a href=\"pcre2matching.html\"><b>pcre2matching</b></a>\ndocumentation.\n</p>\n<p>\nThe arguments for the <b>pcre2_dfa_match()</b> function are the same as for\n<b>pcre2_match()</b>, plus two extras. The ovector within the match data block\nis used in a different way, and this is described below. The other common\narguments are used in the same way as for <b>pcre2_match()</b>, so their\ndescription is not repeated here.\n</p>\n<p>\nThe two additional arguments provide workspace for the function. The workspace\nvector should contain at least 20 elements. It is used for keeping track of\nmultiple paths through the pattern tree. More workspace is needed for patterns\nand subjects where there are a lot of potential matches.\n</p>\n<p>\nHere is an example of a simple call to <b>pcre2_dfa_match()</b>:\n<pre>\n  int wspace[20];\n  pcre2_match_data *md = pcre2_match_data_create(4, NULL);\n  int rc = pcre2_dfa_match(\n    re,             /* result of pcre2_compile() */\n    \"some string\",  /* the subject string */\n    11,             /* the length of the subject string */\n    0,              /* start at offset 0 in the subject */\n    0,              /* default options */\n    md,             /* the match data block */\n    NULL,           /* a match context; NULL means use defaults */\n    wspace,         /* working space vector */\n    20);            /* number of elements (NOT size in bytes) */\n</pre>\n</p>\n<h3>\nOption bits for <b>pcre2_dfa_match()</b>\n</h3>\n<p>\nThe unused bits of the <i>options</i> argument for <b>pcre2_dfa_match()</b> must\nbe zero. The only bits that may be set are PCRE2_ANCHORED,\nPCRE2_COPY_MATCHED_SUBJECT, PCRE2_ENDANCHORED, PCRE2_NOTBOL, PCRE2_NOTEOL,\nPCRE2_NOTEMPTY, PCRE2_NOTEMPTY_ATSTART, PCRE2_NO_UTF_CHECK, PCRE2_PARTIAL_HARD,\nPCRE2_PARTIAL_SOFT, PCRE2_DFA_SHORTEST, and PCRE2_DFA_RESTART. All but the last\nfour of these are exactly the same as for <b>pcre2_match()</b>, so their\ndescription is not repeated here.\n<pre>\n  PCRE2_PARTIAL_HARD\n  PCRE2_PARTIAL_SOFT\n</pre>\nThese have the same general effect as they do for <b>pcre2_match()</b>, but the\ndetails are slightly different. When PCRE2_PARTIAL_HARD is set for\n<b>pcre2_dfa_match()</b>, it returns PCRE2_ERROR_PARTIAL if the end of the\nsubject is reached and there is still at least one matching possibility that\nrequires additional characters. This happens even if some complete matches have\nalready been found. When PCRE2_PARTIAL_SOFT is set, the return code\nPCRE2_ERROR_NOMATCH is converted into PCRE2_ERROR_PARTIAL if the end of the\nsubject is reached, there have been no complete matches, but there is still at\nleast one matching possibility. The portion of the string that was inspected\nwhen the longest partial match was found is set as the first matching string in\nboth cases. There is a more detailed discussion of partial and multi-segment\nmatching, with examples, in the\n<a href=\"pcre2partial.html\"><b>pcre2partial</b></a>\ndocumentation.\n<pre>\n  PCRE2_DFA_SHORTEST\n</pre>\nSetting the PCRE2_DFA_SHORTEST option causes the matching algorithm to stop as\nsoon as it has found one match. Because of the way the alternative algorithm\nworks, this is necessarily the shortest possible match at the first possible\nmatching point in the subject string.\n<pre>\n  PCRE2_DFA_RESTART\n</pre>\nWhen <b>pcre2_dfa_match()</b> returns a partial match, it is possible to call it\nagain, with additional subject characters, and have it continue with the same\nmatch. The PCRE2_DFA_RESTART option requests this action; when it is set, the\n<i>workspace</i> and <i>wscount</i> options must reference the same vector as\nbefore because data about the match so far is left in them after a partial\nmatch. There is more discussion of this facility in the\n<a href=\"pcre2partial.html\"><b>pcre2partial</b></a>\ndocumentation.\n</p>\n<h3>\nSuccessful returns from <b>pcre2_dfa_match()</b>\n</h3>\n<p>\nWhen <b>pcre2_dfa_match()</b> succeeds, it may have matched more than one\nsubstring in the subject. Note, however, that all the matches from one run of\nthe function start at the same point in the subject. The shorter matches are\nall initial substrings of the longer matches. For example, if the pattern\n<pre>\n  &#60;.*&#62;\n</pre>\nis matched against the string\n<pre>\n  This is &#60;something&#62; &#60;something else&#62; &#60;something further&#62; no more\n</pre>\nthe three matched strings are\n<pre>\n  &#60;something&#62; &#60;something else&#62; &#60;something further&#62;\n  &#60;something&#62; &#60;something else&#62;\n  &#60;something&#62;\n</pre>\nOn success, the yield of the function is a number greater than zero, which is\nthe number of matched substrings. The offsets of the substrings are returned in\nthe ovector, and can be extracted by number in the same way as for\n<b>pcre2_match()</b>, but the numbers bear no relation to any capture groups\nthat may exist in the pattern, because DFA matching does not support capturing.\n</p>\n<p>\nCalls to the convenience functions that extract substrings by name\nreturn the error PCRE2_ERROR_DFA_UFUNC (unsupported function) if used after a\nDFA match. The convenience functions that extract substrings by number never\nreturn PCRE2_ERROR_NOSUBSTRING.\n</p>\n<p>\nThe matched strings are stored in the ovector in reverse order of length; that\nis, the longest matching string is first. If there were too many matches to fit\ninto the ovector, the yield of the function is zero, and the vector is filled\nwith the longest matches.\n</p>\n<p>\nNOTE: PCRE2's \"auto-possessification\" optimization usually applies to character\nrepeats at the end of a pattern (as well as internally). For example, the\npattern \"a\\d+\" is compiled as if it were \"a\\d++\". For DFA matching, this\nmeans that only one possible match is found. If you really do want multiple\nmatches in such cases, either use an ungreedy repeat such as \"a\\d+?\" or set\nthe PCRE2_NO_AUTO_POSSESS option when compiling.\n</p>\n<h3>\nError returns from <b>pcre2_dfa_match()</b>\n</h3>\n<p>\nThe <b>pcre2_dfa_match()</b> function returns a negative number when it fails.\nMany of the errors are the same as for <b>pcre2_match()</b>, as described\n<a href=\"#errorlist\">above.</a>\nThere are in addition the following errors that are specific to\n<b>pcre2_dfa_match()</b>:\n<pre>\n  PCRE2_ERROR_DFA_UITEM\n</pre>\nThis return is given if <b>pcre2_dfa_match()</b> encounters an item in the\npattern that it does not support, for instance, the use of \\C in a UTF mode or\na backreference.\n<pre>\n  PCRE2_ERROR_DFA_UCOND\n</pre>\nThis return is given if <b>pcre2_dfa_match()</b> encounters a condition item\nthat uses a backreference for the condition, or a test for recursion in a\nspecific capture group. These are not supported.\n<pre>\n  PCRE2_ERROR_DFA_UINVALID_UTF\n</pre>\nThis return is given if <b>pcre2_dfa_match()</b> is called for a pattern that\nwas compiled with PCRE2_MATCH_INVALID_UTF. This is not supported for DFA\nmatching.\n<pre>\n  PCRE2_ERROR_DFA_WSSIZE\n</pre>\nThis return is given if <b>pcre2_dfa_match()</b> runs out of space in the\n<i>workspace</i> vector.\n<pre>\n  PCRE2_ERROR_DFA_RECURSE\n</pre>\nWhen a recursion or subroutine call is processed, the matching function calls\nitself recursively, using private memory for the ovector and <i>workspace</i>.\nThis error is given if the internal ovector is not large enough. This should be\nextremely rare, as a vector of size 1000 is used.\n<pre>\n  PCRE2_ERROR_DFA_BADRESTART\n</pre>\nWhen <b>pcre2_dfa_match()</b> is called with the <b>PCRE2_DFA_RESTART</b> option,\nsome plausibility checks are made on the contents of the workspace, which\nshould contain data about the previous partial match. If any of these checks\nfail, this error is given.\n</p>\n<h2><a name=\"SEC42\" href=\"#TOC1\">SEE ALSO</a></h2>\n<p>\n<b>pcre2build</b>(3), <b>pcre2callout</b>(3), <b>pcre2demo(3)</b>,\n<b>pcre2matching</b>(3), <b>pcre2partial</b>(3), <b>pcre2posix</b>(3),\n<b>pcre2sample</b>(3), <b>pcre2unicode</b>(3).\n</p>\n<h2><a name=\"SEC43\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC44\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 29 October 2025\n<br>\nCopyright &copy; 1997-2024 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2build.html",
    "content": "<html>\n<head>\n<title>pcre2build specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2build man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">BUILDING PCRE2</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">PCRE2 BUILD-TIME OPTIONS</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">BUILDING 8-BIT, 16-BIT AND 32-BIT LIBRARIES</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">BUILDING SHARED AND STATIC LIBRARIES</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">UNICODE AND UTF SUPPORT</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">DISABLING THE USE OF \\C</a>\n<li><a name=\"TOC7\" href=\"#SEC7\">JUST-IN-TIME COMPILER SUPPORT</a>\n<li><a name=\"TOC8\" href=\"#SEC8\">NEWLINE RECOGNITION</a>\n<li><a name=\"TOC9\" href=\"#SEC9\">WHAT \\R MATCHES</a>\n<li><a name=\"TOC10\" href=\"#SEC10\">HANDLING VERY LARGE PATTERNS</a>\n<li><a name=\"TOC11\" href=\"#SEC11\">LIMITING PCRE2 RESOURCE USAGE</a>\n<li><a name=\"TOC12\" href=\"#SEC12\">LIMITING VARIABLE-LENGTH LOOKBEHIND ASSERTIONS</a>\n<li><a name=\"TOC13\" href=\"#SEC13\">CREATING CHARACTER TABLES AT BUILD TIME</a>\n<li><a name=\"TOC14\" href=\"#SEC14\">USING EBCDIC CODE</a>\n<li><a name=\"TOC15\" href=\"#SEC15\">PCRE2GREP SUPPORT FOR EXTERNAL SCRIPTS</a>\n<li><a name=\"TOC16\" href=\"#SEC16\">PCRE2GREP OPTIONS FOR COMPRESSED FILE SUPPORT</a>\n<li><a name=\"TOC17\" href=\"#SEC17\">PCRE2GREP BUFFER SIZE</a>\n<li><a name=\"TOC18\" href=\"#SEC18\">PCRE2TEST OPTION FOR LIBREADLINE SUPPORT</a>\n<li><a name=\"TOC19\" href=\"#SEC19\">INCLUDING DEBUGGING CODE</a>\n<li><a name=\"TOC20\" href=\"#SEC20\">DEBUGGING WITH VALGRIND SUPPORT</a>\n<li><a name=\"TOC21\" href=\"#SEC21\">CODE COVERAGE REPORTING</a>\n<li><a name=\"TOC22\" href=\"#SEC22\">DISABLING THE Z AND T FORMATTING MODIFIERS</a>\n<li><a name=\"TOC23\" href=\"#SEC23\">SUPPORT FOR FUZZERS</a>\n<li><a name=\"TOC24\" href=\"#SEC24\">OBSOLETE OPTION</a>\n<li><a name=\"TOC25\" href=\"#SEC25\">SEE ALSO</a>\n<li><a name=\"TOC26\" href=\"#SEC26\">AUTHOR</a>\n<li><a name=\"TOC27\" href=\"#SEC27\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">BUILDING PCRE2</a></h2>\n<p>\nPCRE2 is distributed with a <b>configure</b> script that can be used to build\nthe library in Unix-like environments using the Autotools applications. Also in\nthe distribution are files to support building using <b>CMake</b> instead of\n<b>configure</b>. The text file\n<a href=\"README.txt\"><b>README</b></a>\ncontains general information about building with Autotools (some of which is\nrepeated below), and also has some comments about building on various operating\nsystems. The files in the <b>vms</b> directory support building under OpenVMS.\nThere is a lot more information about building PCRE2 without using\nAutotools (including information about using <b>CMake</b> and building \"by\nhand\") in the text file called\n<a href=\"NON-AUTOTOOLS-BUILD.txt\"><b>NON-AUTOTOOLS-BUILD</b>.</a>\nYou should consult this file as well as the\n<a href=\"README.txt\"><b>README</b></a>\nfile if you are building in a non-Unix-like environment.\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">PCRE2 BUILD-TIME OPTIONS</a></h2>\n<p>\nThe rest of this document describes the optional features of PCRE2 that can be\nselected when the library is compiled. It assumes use of the <b>configure</b>\nscript, where the optional features are selected or deselected by providing\noptions to <b>configure</b> before running the <b>make</b> command. However, the\nsame options can be selected in both Unix-like and non-Unix-like environments\nif you are using <b>CMake</b> instead of <b>configure</b> to build PCRE2.\n</p>\n<p>\nIf you are not using Autotools or <b>CMake</b>, option selection can be done by\nediting the <b>config.h</b> file, or by passing parameter settings to the\ncompiler, as described in\n<a href=\"NON-AUTOTOOLS-BUILD.txt\"><b>NON-AUTOTOOLS-BUILD</b>.</a>\n</p>\n<p>\nThe complete list of options for <b>configure</b> (which includes the standard\nones such as the selection of the installation directory) can be obtained by\nrunning\n<pre>\n  ./configure --help\n</pre>\nThe following sections include descriptions of \"on/off\" options whose names\nbegin with --enable or --disable. Because of the way that <b>configure</b>\nworks, --enable and --disable always come in pairs, so the complementary option\nalways exists as well, but as it specifies the default, it is not described.\nOptions that specify values have names that start with --with. At the end of a\n<b>configure</b> run, a summary of the configuration is output.\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">BUILDING 8-BIT, 16-BIT AND 32-BIT LIBRARIES</a></h2>\n<p>\nBy default, a library called <b>libpcre2-8</b> is built, containing functions\nthat take string arguments contained in arrays of bytes, interpreted either as\nsingle-byte characters, or UTF-8 strings. You can also build two other\nlibraries, called <b>libpcre2-16</b> and <b>libpcre2-32</b>, which process\nstrings that are contained in arrays of 16-bit and 32-bit code units,\nrespectively. These can be interpreted either as single-unit characters or\nUTF-16/UTF-32 strings. To build these additional libraries, add one or both of\nthe following to the <b>configure</b> command:\n<pre>\n  --enable-pcre2-16\n  --enable-pcre2-32\n</pre>\nIf you do not want the 8-bit library, add\n<pre>\n  --disable-pcre2-8\n</pre>\nas well. At least one of the three libraries must be built. Note that the POSIX\nwrapper is for the 8-bit library only, and that <b>pcre2grep</b> is an 8-bit\nprogram. Neither of these are built if you select only the 16-bit or 32-bit\nlibraries.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">BUILDING SHARED AND STATIC LIBRARIES</a></h2>\n<p>\nThe Autotools PCRE2 building process uses <b>libtool</b> to build both shared\nand static libraries by default. You can suppress an unwanted library by adding\none of\n<pre>\n  --disable-shared\n  --disable-static\n</pre>\nto the <b>configure</b> command. Setting --disable-shared ensures that PCRE2\nlibraries are built as static libraries. The binaries that are then created as\npart of the build process (for example, <b>pcre2test</b> and <b>pcre2grep</b>)\nare linked statically with one or more PCRE2 libraries, but may also be\ndynamically linked with other libraries such as <b>libc</b>. If you want these\nbinaries to be fully statically linked, you can set LDFLAGS like this:\n<br>\n<br>\nLDFLAGS=--static ./configure --disable-shared\n<br>\n<br>\nNote the two hyphens in --static. Of course, this works only if static versions\nof all the relevant libraries are available for linking.\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">UNICODE AND UTF SUPPORT</a></h2>\n<p>\nBy default, PCRE2 is built with support for Unicode and UTF character strings.\nTo build it without Unicode support, add\n<pre>\n  --disable-unicode\n</pre>\nto the <b>configure</b> command. This setting applies to all three libraries. It\nis not possible to build one library with Unicode support and another without\nin the same configuration.\n</p>\n<p>\nOf itself, Unicode support does not make PCRE2 treat strings as UTF-8, UTF-16\nor UTF-32. To do that, applications that use the library can set the PCRE2_UTF\noption when they call <b>pcre2_compile()</b> to compile a pattern.\nAlternatively, patterns may be started with (*UTF) unless the application has\nlocked this out by setting PCRE2_NEVER_UTF.\n</p>\n<p>\nUTF support allows the libraries to process character code points up to\n0x10ffff in the strings that they handle. Unicode support also gives access to\nthe Unicode properties of characters, using pattern escapes such as \\P, \\p,\nand \\X. Only the general category properties such as <i>Lu</i> and <i>Nd</i>,\nscript names, and some bi-directional and binary properties are supported.\nDetails are given in the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation.\n</p>\n<p>\nPattern escapes such as \\d and \\w do not by default make use of Unicode\nproperties. The application can request that they do by setting the PCRE2_UCP\noption. Unless the application has set PCRE2_NEVER_UCP, a pattern may also\nrequest this by starting with (*UCP).\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">DISABLING THE USE OF \\C</a></h2>\n<p>\nThe \\C escape sequence, which matches a single code unit, even in a UTF mode,\ncan cause unpredictable behaviour because it may leave the current matching\npoint in the middle of a multi-code-unit character. The application can lock\nit out by setting the PCRE2_NEVER_BACKSLASH_C option when calling\n<b>pcre2_compile()</b>. There is also a build-time option\n<pre>\n  --enable-never-backslash-C\n</pre>\n(note the upper case C) which locks out the use of \\C entirely.\n</p>\n<h2><a name=\"SEC7\" href=\"#TOC1\">JUST-IN-TIME COMPILER SUPPORT</a></h2>\n<p>\nJust-in-time (JIT) compiler support is included in the build by specifying\n<pre>\n  --enable-jit\n</pre>\nThis support is available only for certain hardware architectures. If this\noption is set for an unsupported architecture, a building error occurs.\nIf in doubt, use\n<pre>\n  --enable-jit=auto\n</pre>\nwhich enables JIT only if the current hardware is supported. You can check\nif JIT is enabled in the configuration summary that is output at the end of a\n<b>configure</b> run. If you are enabling JIT under SELinux you may also want to\nadd\n<pre>\n  --enable-jit-sealloc\n</pre>\nwhich enables the use of an execmem allocator in JIT that is compatible with\nSELinux. This has no effect if JIT is not enabled. See the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\ndocumentation for a discussion of JIT usage. When JIT support is enabled,\n<b>pcre2grep</b> automatically makes use of it, unless you add\n<pre>\n  --disable-pcre2grep-jit\n</pre>\nto the <b>configure</b> command.\n</p>\n<h2><a name=\"SEC8\" href=\"#TOC1\">NEWLINE RECOGNITION</a></h2>\n<p>\nBy default, PCRE2 interprets the linefeed (LF) character as indicating the end\nof a line. This is the normal newline character on Unix-like systems. You can\ncompile PCRE2 to use carriage return (CR) instead, by adding\n<pre>\n  --enable-newline-is-cr\n</pre>\nto the <b>configure</b> command. There is also an --enable-newline-is-lf option,\nwhich explicitly specifies linefeed as the newline character.\n</p>\n<p>\nAlternatively, you can specify that line endings are to be indicated by the\ntwo-character sequence CRLF (CR immediately followed by LF). If you want this,\nadd\n<pre>\n  --enable-newline-is-crlf\n</pre>\nto the <b>configure</b> command. There is a fourth option, specified by\n<pre>\n  --enable-newline-is-anycrlf\n</pre>\nwhich causes PCRE2 to recognize any of the three sequences CR, LF, or CRLF as\nindicating a line ending. A fifth option, specified by\n<pre>\n  --enable-newline-is-any\n</pre>\ncauses PCRE2 to recognize any Unicode newline sequence. The Unicode newline\nsequences are the three just mentioned, plus the single characters VT (vertical\ntab, U+000B), FF (form feed, U+000C), NEL (next line, U+0085), LS (line\nseparator, U+2028), and PS (paragraph separator, U+2029). The final option is\n<pre>\n  --enable-newline-is-nul\n</pre>\nwhich causes NUL (binary zero) to be set as the default line-ending character.\n</p>\n<p>\nWhatever default line ending convention is selected when PCRE2 is built can be\noverridden by applications that use the library. At build time it is\nrecommended to use the standard for your operating system.\n</p>\n<h2><a name=\"SEC9\" href=\"#TOC1\">WHAT \\R MATCHES</a></h2>\n<p>\nBy default, the sequence \\R in a pattern matches any Unicode newline sequence,\nindependently of what has been selected as the line ending sequence. If you\nspecify\n<pre>\n  --enable-bsr-anycrlf\n</pre>\nthe default is changed so that \\R matches only CR, LF, or CRLF. Whatever is\nselected when PCRE2 is built can be overridden by applications that use the\nlibrary.\n</p>\n<h2><a name=\"SEC10\" href=\"#TOC1\">HANDLING VERY LARGE PATTERNS</a></h2>\n<p>\nWithin a compiled pattern, offset values are used to point from one part to\nanother (for example, from an opening parenthesis to an alternation\nmetacharacter). By default, in the 8-bit and 16-bit libraries, two-byte values\nare used for these offsets, leading to a maximum size for a compiled pattern of\naround 64 thousand code units. This is sufficient to handle all but the most\ngigantic patterns. Nevertheless, some people do want to process truly enormous\npatterns, so it is possible to compile PCRE2 to use three-byte or four-byte\noffsets by adding a setting such as\n<pre>\n  --with-link-size=3\n</pre>\nto the <b>configure</b> command. The value given must be 2, 3, or 4. For the\n16-bit library, a value of 3 is rounded up to 4. In these libraries, using\nlonger offsets slows down the operation of PCRE2 because it has to load\nadditional data when handling them. For the 32-bit library the value is always\n4 and cannot be overridden; the value of --with-link-size is ignored.\n</p>\n<h2><a name=\"SEC11\" href=\"#TOC1\">LIMITING PCRE2 RESOURCE USAGE</a></h2>\n<p>\nThe <b>pcre2_match()</b> function increments a counter each time it goes round\nits main loop. Putting a limit on this counter controls the amount of computing\nresource used by a single call to <b>pcre2_match()</b>. The limit can be changed\nat run time, as described in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation. The default is 10 million, but this can be changed by adding a\nsetting such as\n<pre>\n  --with-match-limit=500000\n</pre>\nto the <b>configure</b> command. This setting also applies to the\n<b>pcre2_dfa_match()</b> matching function, and to JIT matching (though the\ncounting is done differently).\n</p>\n<p>\nThe <b>pcre2_match()</b> function uses heap memory to record backtracking\npoints. The more nested backtracking points there are (that is, the deeper the\nsearch tree), the more memory is needed. There is an upper limit, specified in\nkibibytes (units of 1024 bytes). This limit can be changed at run time, as\ndescribed in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation. The default limit (in effect unlimited) is 20 million. You can\nchange this by a setting such as\n<pre>\n  --with-heap-limit=500\n</pre>\nwhich limits the amount of heap to 500 KiB. This limit applies only to\ninterpretive matching in <b>pcre2_match()</b> and <b>pcre2_dfa_match()</b>, which\nmay also use the heap for internal workspace when processing complicated\npatterns. This limit does not apply when JIT (which has its own memory\narrangements) is used.\n</p>\n<p>\nYou can also explicitly limit the depth of nested backtracking in the\n<b>pcre2_match()</b> interpreter. This limit defaults to the value that is set\nfor --with-match-limit. You can set a lower default limit by adding, for\nexample,\n<pre>\n  --with-match-limit-depth=10000\n</pre>\nto the <b>configure</b> command. This value can be overridden at run time. This\ndepth limit indirectly limits the amount of heap memory that is used, but\nbecause the size of each backtracking \"frame\" depends on the number of\ncapturing parentheses in a pattern, the amount of heap that is used before the\nlimit is reached varies from pattern to pattern. This limit was more useful in\nversions before 10.30, where function recursion was used for backtracking.\n</p>\n<p>\nAs well as applying to <b>pcre2_match()</b>, the depth limit also controls\nthe depth of recursive function calls in <b>pcre2_dfa_match()</b>. These are\nused for lookaround assertions, atomic groups, and recursion within patterns.\nThe limit does not apply to JIT matching.\n</p>\n<h2><a name=\"SEC12\" href=\"#TOC1\">LIMITING VARIABLE-LENGTH LOOKBEHIND ASSERTIONS</a></h2>\n<p>\nLookbehind assertions in which one or more branches can match a variable number\nof characters are supported only if there is a maximum matching length for each\ntop-level branch. There is a limit to this maximum that defaults to 255\ncharacters. You can alter this default by a setting such as\n<pre>\n  --with-max-varlookbehind=100\n</pre>\nThe limit can be changed at runtime by calling\n<b>pcre2_set_max_varlookbehind()</b>. Lookbehind assertions in which every\nbranch matches a fixed number of characters (not necessarily all the same) are\nnot constrained by this limit.\n<a name=\"createtables\"></a></p>\n<h2><a name=\"SEC13\" href=\"#TOC1\">CREATING CHARACTER TABLES AT BUILD TIME</a></h2>\n<p>\nPCRE2 uses fixed tables for processing characters whose code points are less\nthan 256. By default, PCRE2 is built with a set of tables that are distributed\nin the file <i>src/pcre2_chartables.c.dist</i>. These tables are for ASCII codes\nonly. If you add\n<pre>\n  --enable-rebuild-chartables\n</pre>\nto the <b>configure</b> command, the distributed tables are no longer used.\nInstead, a program called <b>pcre2_dftables</b> is compiled and run. This\noutputs the source for new set of tables, created in the default locale of your\nC run-time system. This method of replacing the tables does not work if you are\ncross compiling, because <b>pcre2_dftables</b> needs to be run on the local\nhost and therefore not compiled with the cross compiler.\n</p>\n<p>\nIf you need to create alternative tables when cross compiling, you will have to\ndo so \"by hand\". There may also be other reasons for creating tables manually.\nTo cause <b>pcre2_dftables</b> to be built on the local host, run a normal\ncompiling command, and then run the program with the output file as its\nargument, for example:\n<pre>\n  cc src/pcre2_dftables.c -o pcre2_dftables\n  ./pcre2_dftables src/pcre2_chartables.c\n</pre>\nThis builds the tables in the default locale of the local host. If you want to\nspecify a locale, you must use the -L option:\n<pre>\n  LC_ALL=fr_FR ./pcre2_dftables -L src/pcre2_chartables.c\n</pre>\nYou can also specify -b (with or without -L). This causes the tables to be\nwritten in binary instead of as source code. A set of binary tables can be\nloaded into memory by an application and passed to <b>pcre2_compile()</b> in the\nsame way as tables created by calling <b>pcre2_maketables()</b>. The tables are\njust a string of bytes, independent of hardware characteristics such as\nendianness. This means they can be bundled with an application that runs in\ndifferent environments, to ensure consistent behaviour.\n</p>\n<h2><a name=\"SEC14\" href=\"#TOC1\">USING EBCDIC CODE</a></h2>\n<p>\nPCRE2 assumes by default that it will run in an environment where the character\ncode is ASCII or Unicode, which is a superset of ASCII. This is the case for\nmost computer operating systems. PCRE2 can, however, be compiled to run in an\n8-bit EBCDIC environment by adding\n<pre>\n  --enable-ebcdic --disable-unicode\n</pre>\nto the <b>configure</b> command. You should only use it if you know that you are\nin an EBCDIC environment (for example, an IBM mainframe operating system).\n</p>\n<p>\nThis setting implies --enable-rebuild-chartables, in order to ensure that you\nhave the correct default character tables for your system's codepage. There is\nan exception when you set --enable-ebcdic-ignoring-compiler (see below), which\nallows using a default set of EBCDIC 1047 character tables rather than forcing\nuse of --enable-rebuild-chartables.\n</p>\n<p>\nIt is not supported to enable both EBCDIC input and either ASCII or UTF-8/16/32\nin the same build of the library. When PCRE2 is built with EBCDIC support, it\nalways operates in EBCDIC, and consequently --enable-unicode and --enable-ebcdic\nare mutually exclusive.\n</p>\n<p>\nThe EBCDIC character that corresponds to an ASCII LF is assumed to have the\nvalue 0x15 by default. However, in some EBCDIC environments, 0x25 is used. In\nsuch an environment you should use\n<pre>\n  --enable-ebcdic-nl25\n</pre>\n(which implies --enable-ebcdic). The EBCDIC character for CR has the same value\nas in ASCII, namely, 0x0d. Whichever of 0x15 and 0x25 is <i>not</i> chosen as LF\nis made to correspond to the Unicode NEL character (which, in Unicode, is 0x85).\n</p>\n<p>\nThe options that select newline behaviour, such as --enable-newline-is-cr,\nand equivalent run-time options, refer to these character values in an EBCDIC\nenvironment.\n</p>\n<p>\nOn systems requiring an EBCDIC build of PCRE2, the compiler should be set to use\nthe correct codepage, so that C character literals such as 'z' use the correct\nnumeric value for whichever EBCDIC codpage is in use. (PCRE2 cannot support\nmultiple EBCDIC codepages dynamically.) However, if this not possible, then you\ncan use\n<pre>\n  --enable-ebcdic-ignoring-compiler\n</pre>\nin order to disregard the compiler's codepage, and instead force PCRE2 to use\nnumeric constants corresponding to the EBCDIC 1047 codepage instead. This can be\nused to build (or test) EBCDIC support on an ASCII/UTF-8 system such as Linux.\n</p>\n<h2><a name=\"SEC15\" href=\"#TOC1\">PCRE2GREP SUPPORT FOR EXTERNAL SCRIPTS</a></h2>\n<p>\nBy default <b>pcre2grep</b> supports the use of callouts with string arguments\nwithin the patterns it is matching. There are two kinds: one that generates\noutput using local code, and another that calls an external program or script.\nIf --disable-pcre2grep-callout-fork is added to the <b>configure</b> command,\nonly the first kind of callout is supported; if --disable-pcre2grep-callout is\nused, all callouts are completely ignored. For more details of <b>pcre2grep</b>\ncallouts, see the\n<a href=\"pcre2grep.html\"><b>pcre2grep</b></a>\ndocumentation.\n</p>\n<h2><a name=\"SEC16\" href=\"#TOC1\">PCRE2GREP OPTIONS FOR COMPRESSED FILE SUPPORT</a></h2>\n<p>\nBy default, <b>pcre2grep</b> reads all files as plain text. You can build it so\nthat it recognizes files whose names end in <b>.gz</b> or <b>.bz2</b>, and reads\nthem with <b>libz</b> or <b>libbz2</b>, respectively, by adding one or both of\n<pre>\n  --enable-pcre2grep-libz\n  --enable-pcre2grep-libbz2\n</pre>\nto the <b>configure</b> command. These options naturally require that the\nrelevant libraries are installed on your system. Configuration will fail if\nthey are not.\n</p>\n<h2><a name=\"SEC17\" href=\"#TOC1\">PCRE2GREP BUFFER SIZE</a></h2>\n<p>\n<b>pcre2grep</b> uses an internal buffer to hold a \"window\" on the file it is\nscanning, in order to be able to output \"before\" and \"after\" lines when it\nfinds a match. The default starting size of the buffer is 20KiB. The buffer\nitself is three times this size, but because of the way it is used for holding\n\"before\" lines, the longest line that is guaranteed to be processable is the\nnotional buffer size. If a longer line is encountered, <b>pcre2grep</b>\nautomatically expands the buffer, up to a specified maximum size, whose default\nis 1MiB or the starting size, whichever is the larger. You can change the\ndefault parameter values by adding, for example,\n<pre>\n  --with-pcre2grep-bufsize=51200\n  --with-pcre2grep-max-bufsize=2097152\n</pre>\nto the <b>configure</b> command. The caller of <b>pcre2grep</b> can override\nthese values by using --buffer-size and --max-buffer-size on the command line.\n</p>\n<h2><a name=\"SEC18\" href=\"#TOC1\">PCRE2TEST OPTION FOR LIBREADLINE SUPPORT</a></h2>\n<p>\nIf you add one of\n<pre>\n  --enable-pcre2test-libreadline\n  --enable-pcre2test-libedit\n</pre>\nto the <b>configure</b> command, <b>pcre2test</b> is linked with the\n<b>libreadline</b> or<b>libedit</b> library, respectively, and when its input is\nfrom a terminal, it reads it using the <b>readline()</b> function. This provides\nline-editing and history facilities. Note that <b>libreadline</b> is\nGPL-licensed, so if you distribute a binary of <b>pcre2test</b> linked in this\nway, there may be licensing issues. These can be avoided by linking instead\nwith <b>libedit</b>, which has a BSD licence.\n</p>\n<p>\nSetting --enable-pcre2test-libreadline causes the <b>-lreadline</b> option to be\nadded to the <b>pcre2test</b> build. In many operating environments with a\nsystem-installed readline library this is sufficient. However, in some\nenvironments (e.g. if an unmodified distribution version of readline is in\nuse), some extra configuration may be necessary. The INSTALL file for\n<b>libreadline</b> says this:\n<pre>\n  \"Readline uses the termcap functions, but does not link with\n  the termcap or curses library itself, allowing applications\n  which link with readline the to choose an appropriate library.\"\n</pre>\nIf your environment has not been set up so that an appropriate library is\nautomatically included, you may need to add something like\n<pre>\n  LIBS=\"-lncurses\"\n</pre>\nimmediately before the <b>configure</b> command.\n</p>\n<h2><a name=\"SEC19\" href=\"#TOC1\">INCLUDING DEBUGGING CODE</a></h2>\n<p>\nIf you add\n<pre>\n  --enable-debug\n</pre>\nto the <b>configure</b> command, additional debugging code is included in the\nbuild. This feature is intended for use by the PCRE2 maintainers.\n</p>\n<h2><a name=\"SEC20\" href=\"#TOC1\">DEBUGGING WITH VALGRIND SUPPORT</a></h2>\n<p>\nIf you add\n<pre>\n  --enable-valgrind\n</pre>\nto the <b>configure</b> command, PCRE2 will use valgrind annotations to mark\ncertain memory regions as unaddressable. This allows it to detect invalid\nmemory accesses, and is mostly useful for debugging PCRE2 itself.\n</p>\n<h2><a name=\"SEC21\" href=\"#TOC1\">CODE COVERAGE REPORTING</a></h2>\n<p>\nIf your C compiler is gcc, you can build a version of PCRE2 that can generate a\ncode coverage report for its test suite. To enable this, you must install\n<b>lcov</b> version 1.6 or above. Then specify\n<pre>\n  --enable-coverage\n</pre>\nto the <b>configure</b> command and build PCRE2 in the usual way.\n</p>\n<p>\nNote that using <b>ccache</b> (a caching C compiler) is incompatible with code\ncoverage reporting. If you have configured <b>ccache</b> to run automatically\non your system, you must set the environment variable\n<pre>\n  CCACHE_DISABLE=1\n</pre>\nbefore running <b>make</b> to build PCRE2, so that <b>ccache</b> is not used.\n</p>\n<p>\nWhen --enable-coverage is used, the following addition targets are added to the\n<i>Makefile</i>:\n<pre>\n  make coverage\n</pre>\nThis creates a fresh coverage report for the PCRE2 test suite. It is equivalent\nto running \"make coverage-reset\", \"make coverage-baseline\", \"make check\", and\nthen \"make coverage-report\".\n<pre>\n  make coverage-reset\n</pre>\nThis zeroes the coverage counters, but does nothing else.\n<pre>\n  make coverage-baseline\n</pre>\nThis captures baseline coverage information.\n<pre>\n  make coverage-report\n</pre>\nThis creates the coverage report.\n<pre>\n  make coverage-clean-report\n</pre>\nThis removes the generated coverage report without cleaning the coverage data\nitself.\n<pre>\n  make coverage-clean-data\n</pre>\nThis removes the captured coverage data without removing the coverage files\ncreated at compile time (*.gcno).\n<pre>\n  make coverage-clean\n</pre>\nThis cleans all coverage data including the generated coverage report. For more\ninformation about code coverage, see the <b>gcov</b> and <b>lcov</b>\ndocumentation.\n</p>\n<h2><a name=\"SEC22\" href=\"#TOC1\">DISABLING THE Z AND T FORMATTING MODIFIERS</a></h2>\n<p>\nThe C99 standard defines formatting modifiers z and t for size_t and\nptrdiff_t values, respectively. By default, PCRE2 uses these modifiers in\nenvironments other than old versions of Microsoft Visual Studio when\n__STDC_VERSION__ is defined and has a value greater than or equal to 199901L\n(indicating support for C99).\nHowever, there is at least one environment that claims to be C99 but does not\nsupport these modifiers. If\n<pre>\n  --disable-percent-zt\n</pre>\nis specified, no use is made of the z or t modifiers. Instead of %td or %zu,\na suitable format is used depending in the size of long for the platform.\n</p>\n<h2><a name=\"SEC23\" href=\"#TOC1\">SUPPORT FOR FUZZERS</a></h2>\n<p>\nThere is a special option for use by people who want to run fuzzing tests on\nPCRE2:\n<pre>\n  --enable-fuzz-support\n</pre>\nAt present this applies only to the 8-bit library. If set, it causes an extra\nlibrary called libpcre2-fuzzsupport.a to be built, but not installed. This\ncontains a single function called LLVMFuzzerTestOneInput() whose arguments are\na pointer to a string and the length of the string. When called, this function\ntries to compile the string as a pattern, and if that succeeds, to match it.\nThis is done both with no options and with some random options bits that are\ngenerated from the string.\n</p>\n<p>\nSetting --enable-fuzz-support also causes a binary called <b>pcre2fuzzcheck</b>\nto be created. This is normally run under valgrind or used when PCRE2 is\ncompiled with address sanitizing enabled. It calls the fuzzing function and\noutputs information about what it is doing. The input strings are specified by\narguments: if an argument starts with \"=\" the rest of it is a literal input\nstring. Otherwise, it is assumed to be a file name, and the contents of the\nfile are the test string.\n</p>\n<h2><a name=\"SEC24\" href=\"#TOC1\">OBSOLETE OPTION</a></h2>\n<p>\nIn versions of PCRE2 prior to 10.30, there were two ways of handling\nbacktracking in the <b>pcre2_match()</b> function. The default was to use the\nsystem stack, but if\n<pre>\n  --disable-stack-for-recursion\n</pre>\nwas set, memory on the heap was used. From release 10.30 onwards this has\nchanged (the stack is no longer used) and this option now does nothing except\ngive a warning.\n</p>\n<h2><a name=\"SEC25\" href=\"#TOC1\">SEE ALSO</a></h2>\n<p>\n<b>pcre2api</b>(3), <b>pcre2-config</b>(3).\n</p>\n<h2><a name=\"SEC26\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC27\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 17 October 2025\n<br>\nCopyright &copy; 1997-2024 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2callout.html",
    "content": "<html>\n<head>\n<title>pcre2callout specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2callout man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">SYNOPSIS</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">DESCRIPTION</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">MISSING CALLOUTS</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">THE CALLOUT INTERFACE</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">RETURN VALUES FROM CALLOUTS</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">CALLOUT ENUMERATION</a>\n<li><a name=\"TOC7\" href=\"#SEC7\">AUTHOR</a>\n<li><a name=\"TOC8\" href=\"#SEC8\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">SYNOPSIS</a></h2>\n<p>\n<b>#include &#60;pcre2.h&#62;</b>\n</p>\n<p>\n<b>int (*pcre2_callout)(pcre2_callout_block *, void *);</b>\n<br>\n<br>\n<b>int pcre2_callout_enumerate(const pcre2_code *<i>code</i>,</b>\n<b>  int (*<i>callback</i>)(pcre2_callout_enumerate_block *, void *),</b>\n<b>  void *<i>user_data</i>);</b>\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">DESCRIPTION</a></h2>\n<p>\nPCRE2 provides a feature called \"callout\", which is a means of temporarily\npassing control to the caller of PCRE2 in the middle of pattern matching. The\ncaller of PCRE2 provides an external function by putting its entry point in\na match context (see <b>pcre2_set_callout()</b> in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation).\n</p>\n<p>\nWhen using the <b>pcre2_substitute()</b> function, an additional callout feature\nis available. This does a callout after each change to the subject string and\nis described in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation; the rest of this document is concerned with callouts during\npattern matching.\n</p>\n<p>\nWithin a regular expression, (?C&#60;arg&#62;) indicates a point at which the external\nfunction is to be called. Different callout points can be identified by putting\na number less than 256 after the letter C. The default value is zero.\nAlternatively, the argument may be a delimited string. The starting delimiter\nmust be one of ` ' \" ^ % # $ { and the ending delimiter is the same as the\nstart, except for {, where the ending delimiter is }. If the ending delimiter\nis needed within the string, it must be doubled. For example, this pattern has\ntwo callout points:\n<pre>\n  (?C1)abc(?C\"some \"\"arbitrary\"\" text\")def\n</pre>\nIf the PCRE2_AUTO_CALLOUT option bit is set when a pattern is compiled, PCRE2\nautomatically inserts callouts, all with number 255, before each item in the\npattern except for immediately before or after an explicit callout. For\nexample, if PCRE2_AUTO_CALLOUT is used with the pattern\n<pre>\n  A(?C3)B\n</pre>\nit is processed as if it were\n<pre>\n  (?C255)A(?C3)B(?C255)\n</pre>\nHere is a more complicated example:\n<pre>\n  A(\\d{2}|--)\n</pre>\nWith PCRE2_AUTO_CALLOUT, this pattern is processed as if it were\n<pre>\n  (?C255)A(?C255)((?C255)\\d{2}(?C255)|(?C255)-(?C255)-(?C255))(?C255)\n</pre>\nNotice that there is a callout before and after each parenthesis and\nalternation bar. If the pattern contains a conditional group whose condition is\nan assertion, an automatic callout is inserted immediately before the\ncondition. Such a callout may also be inserted explicitly, for example:\n<pre>\n  (?(?C9)(?=a)ab|de)  (?(?C%text%)(?!=d)ab|de)\n</pre>\nThis applies only to assertion conditions (because they are themselves\nindependent groups).\n</p>\n<p>\nCallouts can be useful for tracking the progress of pattern matching. The\n<a href=\"pcre2test.html\"><b>pcre2test</b></a>\nprogram has a pattern qualifier (/auto_callout) that sets automatic callouts.\nWhen any callouts are present, the output from <b>pcre2test</b> indicates how\nthe pattern is being matched. This is useful information when you are trying to\noptimize the performance of a particular pattern.\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">MISSING CALLOUTS</a></h2>\n<p>\nYou should be aware that, because of optimizations in the way PCRE2 compiles\nand matches patterns, callouts sometimes do not happen exactly as you might\nexpect.\n</p>\n<h3>\nAuto-possessification\n</h3>\n<p>\nAt compile time, PCRE2 \"auto-possessifies\" repeated items when it knows that\nwhat follows cannot be part of the repeat. For example, a+[bc] is compiled as\nif it were a++[bc]. The <b>pcre2test</b> output when this pattern is compiled\nwith PCRE2_ANCHORED and PCRE2_AUTO_CALLOUT and then applied to the string\n\"aaaa\" is:\n<pre>\n  ---&#62;aaaa\n   +0 ^        a+\n   +2 ^   ^    [bc]\n  No match\n</pre>\nThis indicates that when matching [bc] fails, there is no backtracking into a+\n(because it is being treated as a++) and therefore the callouts that would be\ntaken for the backtracks do not occur. You can disable the auto-possessify\nfeature by passing PCRE2_NO_AUTO_POSSESS to <b>pcre2_compile()</b>, or starting\nthe pattern with (*NO_AUTO_POSSESS). In this case, the output changes to this:\n<pre>\n  ---&#62;aaaa\n   +0 ^        a+\n   +2 ^   ^    [bc]\n   +2 ^  ^     [bc]\n   +2 ^ ^      [bc]\n   +2 ^^       [bc]\n  No match\n</pre>\nThis time, when matching [bc] fails, the matcher backtracks into a+ and tries\nagain, repeatedly, until a+ itself fails.\n</p>\n<h3>\nAutomatic .* anchoring\n</h3>\n<p>\nBy default, an optimization is applied when .* is the first significant item in\na pattern. If PCRE2_DOTALL is set, so that the dot can match any character, the\npattern is automatically anchored. If PCRE2_DOTALL is not set, a match can\nstart only after an internal newline or at the beginning of the subject, and\n<b>pcre2_compile()</b> remembers this. If a pattern has more than one top-level\nbranch, automatic anchoring occurs if all branches are anchorable.\n</p>\n<p>\nThis optimization is disabled, however, if .* is in an atomic group or if there\nis a backreference to the capture group in which it appears. It is also\ndisabled if the pattern contains (*PRUNE) or (*SKIP). However, the presence of\ncallouts does not affect it.\n</p>\n<p>\nFor example, if the pattern .*\\d is compiled with PCRE2_AUTO_CALLOUT and\napplied to the string \"aa\", the <b>pcre2test</b> output is:\n<pre>\n  ---&#62;aa\n   +0 ^      .*\n   +2 ^ ^    \\d\n   +2 ^^     \\d\n   +2 ^      \\d\n  No match\n</pre>\nThis shows that all match attempts start at the beginning of the subject. In\nother words, the pattern is anchored. You can disable this optimization by\npassing PCRE2_NO_DOTSTAR_ANCHOR to <b>pcre2_compile()</b>, or starting the\npattern with (*NO_DOTSTAR_ANCHOR). In this case, the output changes to:\n<pre>\n  ---&#62;aa\n   +0 ^      .*\n   +2 ^ ^    \\d\n   +2 ^^     \\d\n   +2 ^      \\d\n   +0  ^     .*\n   +2  ^^    \\d\n   +2  ^     \\d\n  No match\n</pre>\nThis shows more match attempts, starting at the second subject character.\nAnother optimization, described in the next section, means that there is no\nsubsequent attempt to match with an empty subject.\n</p>\n<h3>\nOther optimizations\n</h3>\n<p>\nOther optimizations that provide fast \"no match\" results also affect callouts.\nFor example, if the pattern is\n<pre>\n  ab(?C4)cd\n</pre>\nPCRE2 knows that any matching string must contain the letter \"d\". If the\nsubject string is \"abyz\", the lack of \"d\" means that matching doesn't ever\nstart, and the callout is never reached. However, with \"abyd\", though the\nresult is still no match, the callout is obeyed.\n</p>\n<p>\nFor most patterns PCRE2 also knows the minimum length of a matching string, and\nwill immediately give a \"no match\" return without actually running a match if\nthe subject is not long enough, or, for unanchored patterns, if it has been\nscanned far enough.\n</p>\n<p>\nYou can disable these optimizations by passing the PCRE2_NO_START_OPTIMIZE\noption to <b>pcre2_compile()</b>, or by starting the pattern with\n(*NO_START_OPT). This slows down the matching process, but does ensure that\ncallouts such as the example above are obeyed.\n<a name=\"calloutinterface\"></a></p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">THE CALLOUT INTERFACE</a></h2>\n<p>\nDuring matching, when PCRE2 reaches a callout point, if an external function is\nprovided in the match context, it is called. This applies to both normal,\nDFA, and JIT matching. The first argument to the callout function is a pointer\nto a <b>pcre2_callout</b> block. The second argument is the void * callout data\nthat was supplied when the callout was set up by calling\n<b>pcre2_set_callout()</b> (see the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation). The callout block structure contains the following fields, not\nnecessarily in this order:\n<pre>\n  uint32_t      <i>version</i>;\n  uint32_t      <i>callout_number</i>;\n  uint32_t      <i>capture_top</i>;\n  uint32_t      <i>capture_last</i>;\n  uint32_t      <i>callout_flags</i>;\n  PCRE2_SIZE   *<i>offset_vector</i>;\n  PCRE2_SPTR    <i>mark</i>;\n  PCRE2_SPTR    <i>subject</i>;\n  PCRE2_SIZE    <i>subject_length</i>;\n  PCRE2_SIZE    <i>start_match</i>;\n  PCRE2_SIZE    <i>current_position</i>;\n  PCRE2_SIZE    <i>pattern_position</i>;\n  PCRE2_SIZE    <i>next_item_length</i>;\n  PCRE2_SIZE    <i>callout_string_offset</i>;\n  PCRE2_SIZE    <i>callout_string_length</i>;\n  PCRE2_SPTR    <i>callout_string</i>;\n</pre>\nThe <i>version</i> field contains the version number of the block format. The\ncurrent version is 2; the three callout string fields were added for version 1,\nand the <i>callout_flags</i> field for version 2. If you are writing an\napplication that might use an earlier release of PCRE2, you should check the\nversion number before accessing any of these fields. The version number will\nincrease in future if more fields are added, but the intention is never to\nremove any of the existing fields.\n</p>\n<h3>\nFields for numerical callouts\n</h3>\n<p>\nFor a numerical callout, <i>callout_string</i> is NULL, and <i>callout_number</i>\ncontains the number of the callout, in the range 0-255. This is the number\nthat follows (?C for callouts that part of the pattern; it is 255 for\nautomatically generated callouts.\n</p>\n<h3>\nFields for string callouts\n</h3>\n<p>\nFor callouts with string arguments, <i>callout_number</i> is always zero, and\n<i>callout_string</i> points to the string that is contained within the compiled\npattern. Its length is given by <i>callout_string_length</i>. Duplicated ending\ndelimiters that were present in the original pattern string have been turned\ninto single characters, but there is no other processing of the callout string\nargument. An additional code unit containing binary zero is present after the\nstring, but is not included in the length. The delimiter that was used to start\nthe string is also stored within the pattern, immediately before the string\nitself. You can access this delimiter as <i>callout_string</i>[-1] if you need\nit.\n</p>\n<p>\nThe <i>callout_string_offset</i> field is the code unit offset to the start of\nthe callout argument string within the original pattern string. This is\nprovided for the benefit of applications such as script languages that might\nneed to report errors in the callout string within the pattern.\n</p>\n<h3>\nFields for all callouts\n</h3>\n<p>\nThe remaining fields in the callout block are the same for both kinds of\ncallout.\n</p>\n<p>\nThe <i>offset_vector</i> field is a pointer to a vector of capturing offsets\n(the \"ovector\"). You may read the elements in this vector, but you must not\nchange any of them.\n</p>\n<p>\nFor calls to <b>pcre2_match()</b>, the <i>offset_vector</i> field is not (since\nrelease 10.30) a pointer to the actual ovector that was passed to the matching\nfunction in the match data block. Instead it points to an internal ovector of a\nsize large enough to hold all possible captured substrings in the pattern. Note\nthat whenever a recursion or subroutine call within a pattern completes, the\ncapturing state is reset to what it was before.\n</p>\n<p>\nThe <i>capture_last</i> field contains the number of the most recently captured\nsubstring, and the <i>capture_top</i> field contains one more than the number of\nthe highest numbered captured substring so far. If no substrings have yet been\ncaptured, the value of <i>capture_last</i> is 0 and the value of\n<i>capture_top</i> is 1. The values of these fields do not always differ by one;\nfor example, when the callout in the pattern ((a)(b))(?C2) is taken,\n<i>capture_last</i> is 1 but <i>capture_top</i> is 4.\n</p>\n<p>\nThe contents of ovector[2] to ovector[&#60;capture_top&#62;*2-1] can be inspected in\norder to extract substrings that have been matched so far, in the same way as\nextracting substrings after a match has completed. The values in ovector[0] and\novector[1] are always PCRE2_UNSET because the match is by definition not\ncomplete. Substrings that have not been captured but whose numbers are less\nthan <i>capture_top</i> also have both of their ovector slots set to\nPCRE2_UNSET.\n</p>\n<p>\nFor DFA matching, the <i>offset_vector</i> field points to the ovector that was\npassed to the matching function in the match data block for callouts at the top\nlevel, but to an internal ovector during the processing of pattern recursions,\nlookarounds, and atomic groups. However, these ovectors hold no useful\ninformation because <b>pcre2_dfa_match()</b> does not support substring\ncapturing. The value of <i>capture_top</i> is always 1 and the value of\n<i>capture_last</i> is always 0 for DFA matching.\n</p>\n<p>\nThe <i>subject</i> and <i>subject_length</i> fields contain copies of the values\nthat were passed to the matching function.\n</p>\n<p>\nThe <i>start_match</i> field normally contains the offset within the subject at\nwhich the current match attempt started. However, if the escape sequence \\K\nhas been encountered, this value is changed to reflect the modified starting\npoint. If the pattern is not anchored, the callout function may be called\nseveral times from the same point in the pattern for different starting points\nin the subject.\n</p>\n<p>\nThe <i>current_position</i> field contains the offset within the subject of the\ncurrent match pointer.\n</p>\n<p>\nThe <i>pattern_position</i> field contains the offset in the pattern string to\nthe next item to be matched.\n</p>\n<p>\nThe <i>next_item_length</i> field contains the length of the next item to be\nprocessed in the pattern string. When the callout is at the end of the pattern,\nthe length is zero. When the callout precedes an opening parenthesis, the\nlength includes meta characters that follow the parenthesis. For example, in a\ncallout before an assertion such as (?=ab) the length is 3. For an alternation\nbar or a closing parenthesis, the length is one, unless a closing parenthesis\nis followed by a quantifier, in which case its length is included. (This\nchanged in release 10.23. In earlier releases, before an opening parenthesis\nthe length was that of the entire group, and before an alternation bar or a\nclosing parenthesis the length was zero.)\n</p>\n<p>\nThe <i>pattern_position</i> and <i>next_item_length</i> fields are intended to\nhelp in distinguishing between different automatic callouts, which all have the\nsame callout number. However, they are set for all callouts, and are used by\n<b>pcre2test</b> to show the next item to be matched when displaying callout\ninformation.\n</p>\n<p>\nIn callouts from <b>pcre2_match()</b> the <i>mark</i> field contains a pointer to\nthe zero-terminated name of the most recently passed (*MARK), (*PRUNE), or\n(*THEN) item in the match, or NULL if no such items have been passed. Instances\nof (*PRUNE) or (*THEN) without a name do not obliterate a previous (*MARK). In\ncallouts from the DFA matching function this field always contains NULL.\n</p>\n<p>\nThe <i>callout_flags</i> field is always zero in callouts from\n<b>pcre2_dfa_match()</b> or when JIT is being used. When <b>pcre2_match()</b>\nwithout JIT is used, the following bits may be set:\n<pre>\n  PCRE2_CALLOUT_STARTMATCH\n</pre>\nThis is set for the first callout after the start of matching for each new\nstarting position in the subject.\n<pre>\n  PCRE2_CALLOUT_BACKTRACK\n</pre>\nThis is set if there has been a matching backtrack since the previous callout,\nor since the start of matching if this is the first callout from a\n<b>pcre2_match()</b> run.\n</p>\n<p>\nBoth bits are set when a backtrack has caused a \"bumpalong\" to a new starting\nposition in the subject. Output from <b>pcre2test</b> does not indicate the\npresence of these bits unless the <b>callout_extra</b> modifier is set.\n</p>\n<p>\nThe information in the <b>callout_flags</b> field is provided so that\napplications can track and tell their users how matching with backtracking is\ndone. This can be useful when trying to optimize patterns, or just to\nunderstand how PCRE2 works. There is no support in <b>pcre2_dfa_match()</b>\nbecause there is no backtracking in DFA matching, and there is no support in\nJIT because JIT is all about maximimizing matching performance. In both these\ncases the <b>callout_flags</b> field is always zero.\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">RETURN VALUES FROM CALLOUTS</a></h2>\n<p>\nThe external callout function returns an integer to PCRE2. If the value is\nzero, matching proceeds as normal. If the value is greater than zero, matching\nfails at the current point, but the testing of other matching possibilities\ngoes ahead, just as if a lookahead assertion had failed. If the value is less\nthan zero, the match is abandoned, and the matching function returns the\nnegative value.\n</p>\n<p>\nNegative values should normally be chosen from the set of PCRE2_ERROR_xxx\nvalues. In particular, PCRE2_ERROR_NOMATCH forces a standard \"no match\"\nfailure. The error number PCRE2_ERROR_CALLOUT is reserved for use by callout\nfunctions; it will never be used by PCRE2 itself.\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">CALLOUT ENUMERATION</a></h2>\n<p>\n<b>int pcre2_callout_enumerate(const pcre2_code *<i>code</i>,</b>\n<b>  int (*<i>callback</i>)(pcre2_callout_enumerate_block *, void *),</b>\n<b>  void *<i>user_data</i>);</b>\n<br>\n<br>\nA script language that supports the use of string arguments in callouts might\nlike to scan all the callouts in a pattern before running the match. This can\nbe done by calling <b>pcre2_callout_enumerate()</b>. The first argument is a\npointer to a compiled pattern, the second points to a callback function, and\nthe third is arbitrary user data. The callback function is called for every\ncallout in the pattern in the order in which they appear. Its first argument is\na pointer to a callout enumeration block, and its second argument is the\n<i>user_data</i> value that was passed to <b>pcre2_callout_enumerate()</b>. The\ndata block contains the following fields:\n<pre>\n  <i>version</i>                Block version number\n  <i>pattern_position</i>       Offset to next item in pattern\n  <i>next_item_length</i>       Length of next item in pattern\n  <i>callout_number</i>         Number for numbered callouts\n  <i>callout_string_offset</i>  Offset to string within pattern\n  <i>callout_string_length</i>  Length of callout string\n  <i>callout_string</i>         Points to callout string or is NULL\n</pre>\nThe version number is currently 0. It will increase if new fields are ever\nadded to the block. The remaining fields are the same as their namesakes in the\n<b>pcre2_callout</b> block that is used for callouts during matching, as\ndescribed\n<a href=\"#calloutinterface\">above.</a>\n</p>\n<p>\nNote that the value of <i>pattern_position</i> is unique for each callout.\nHowever, if a callout occurs inside a group that is quantified with a non-zero\nminimum or a fixed maximum, the group is replicated inside the compiled\npattern. For example, a pattern such as /(a){2}/ is compiled as if it were\n/(a)(a)/. This means that the callout will be enumerated more than once, but\nwith the same value for <i>pattern_position</i> in each case.\n</p>\n<p>\nThe callback function should normally return zero. If it returns a non-zero\nvalue, scanning the pattern stops, and that value is returned from\n<b>pcre2_callout_enumerate()</b>.\n</p>\n<h2><a name=\"SEC7\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC8\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 26 February 2025\n<br>\nCopyright &copy; 1997-2024 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2compat.html",
    "content": "<html>\n<head>\n<title>pcre2compat specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2compat man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nDIFFERENCES BETWEEN PCRE2 AND PERL\n</h2>\n<p>\nThis document describes some of the known differences in the ways that PCRE2\nand Perl handle regular expressions. The differences described here are with\nrespect to Perl version 5.38.0, but as both Perl and PCRE2 are continually\nchanging, the information may at times be out of date.\n</p>\n<p>\n1. When PCRE2_DOTALL (equivalent to Perl's /s qualifier) is not set, the\nbehaviour of the '.' metacharacter differs from Perl. In PCRE2, '.' matches the\nnext character unless it is the start of a newline sequence. This means that,\nif the newline setting is CR, CRLF, or NUL, '.' will match the code point LF\n(0x0A) in ASCII/Unicode environments, and NL (either 0x15 or 0x25) when using\nEBCDIC. In Perl, '.' appears never to match LF, even when 0x0A is not a newline\nindicator.\n</p>\n<p>\n2. PCRE2 has only a subset of Perl's Unicode support. Details of what it does\nhave are given in the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\npage.\n</p>\n<p>\n3. Like Perl, PCRE2 allows repeat quantifiers on parenthesized assertions, but\nthey do not mean what you might think. For example, (?!a){3} does not assert\nthat the next three characters are not \"a\". It just asserts that the next\ncharacter is not \"a\" three times (in principle; PCRE2 optimizes this to run the\nassertion just once). Perl allows some repeat quantifiers on other assertions,\nfor example, \\b* , but these do not seem to have any use. PCRE2 does not allow\nany kind of quantifier on non-lookaround assertions.\n</p>\n<p>\n4. If a braced quantifier such as {1,2} appears where there is nothing to\nrepeat (for example, at the start of a branch), PCRE2 raises an error whereas\nPerl treats the quantifier characters as literal. When a braced quantifier\n(...){min,max} has min &#62; max, Perl treats it as an item which fails to match\nany portion of the subject (as no number of repetitions can meet the\ncondition), and additionally issues a warning when in warning mode. PCRE2 has\nno warning features, so it gives an error in this case.\n</p>\n<p>\n5. Capture groups that occur inside negative lookaround assertions are counted,\nbut their entries in the offsets vector are set only when a negative assertion\nis a condition that has a matching branch (that is, the condition is false).\nPerl may set such capture groups in other circumstances.\n</p>\n<p>\n6. The following Perl escape sequences are not supported: \\F, \\l, \\L, \\u,\n\\U, and \\N when followed by a character name. \\N on its own, matching a\nnon-newline character, and \\N{U+dd..}, matching a Unicode code point, are\nsupported. The escapes that modify the case of following letters are\nimplemented by Perl's general string-handling and are not part of its pattern\nmatching engine. If any of these are encountered by PCRE2, an error is\ngenerated by default. However, if either of the PCRE2_ALT_BSUX or\nPCRE2_EXTRA_ALT_BSUX options is set, \\U and \\u are interpreted as ECMAScript\ninterprets them.\n</p>\n<p>\n7. The Perl escape sequences \\p, \\P, and \\X are supported only if PCRE2 is\nbuilt with Unicode support (the default). The properties that can be tested\nwith \\p and \\P are limited to the general category properties such as Lu and\nNd, the derived properties Any and Lc (synonym L&), script names such as Greek\nor Han, Bidi_Class, Bidi_Control, and a few binary properties. Both PCRE2 and\nPerl support the Cs (surrogate) property, but in PCRE2 its use is limited. See\nthe\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation for details. The long synonyms for property names that Perl\nsupports (such as \\p{Letter}) are not supported by PCRE2, nor is it permitted\nto prefix any of these properties with \"Is\".\n</p>\n<p>\n8. PCRE2 supports the \\Q...\\E escape for quoting substrings. Characters\nin between are treated as literals. However, this is slightly different from\nPerl in that $ and @ are also handled as literals inside the quotes. In Perl,\nthey cause variable interpolation (PCRE2 does not have variables). Also, Perl\ndoes \"double-quotish backslash interpolation\" on any backslashes between \\Q\nand \\E which, its documentation says, \"may lead to confusing results\". PCRE2\ntreats a backslash between \\Q and \\E just like any other character. Note the\nfollowing examples:\n<pre>\n    Pattern            PCRE2 matches     Perl matches\n\n    \\Qabc$xyz\\E        abc$xyz           abc followed by the contents of $xyz\n    \\Qabc\\$xyz\\E       abc\\$xyz          abc\\$xyz\n    \\Qabc\\E\\$\\Qxyz\\E   abc$xyz           abc$xyz\n    \\QA\\B\\E            A\\B               A\\B\n    \\Q\\\\E              \\                 \\\\E\n</pre>\nThe \\Q...\\E sequence is recognized both inside and outside character classes\nby both PCRE2 and Perl. Another difference from Perl is that any appearance of\n\\Q or \\E inside what might otherwise be a quantifier causes PCRE2 not to\nrecognize the sequence as a quantifier. Perl recognizes a quantifier if\n(redundantly) either of the numbers is inside \\Q...\\E, but not if the\nseparating comma is. When not recognized as a quantifier a sequence such as\n{\\Q1\\E,2} is treated as the literal string \"{1,2}\".\n</p>\n<p>\n9. Fairly obviously, PCRE2 does not support the (?{code}) and (??{code})\nconstructions. However, PCRE2 does have a \"callout\" feature, which allows an\nexternal function to be called during pattern matching. See the\n<a href=\"pcre2callout.html\"><b>pcre2callout</b></a>\ndocumentation for details.\n</p>\n<p>\n10. Subroutine calls (whether recursive or not) were treated as atomic groups\nup to PCRE2 release 10.23, but from release 10.30 this changed, and\nbacktracking into subroutine calls is now supported, as in Perl.\n</p>\n<p>\n11. In PCRE2, if any of the backtracking control verbs are used in a group that\nis called as a subroutine (whether or not recursively), their effect is\nconfined to that group; it does not extend to the surrounding pattern. This is\nnot always the case in Perl. In particular, if (*THEN) is present in a group\nthat is called as a subroutine, its action is limited to that group, even if\nthe group does not contain any | characters. Note that such groups are\nprocessed as anchored at the point where they are tested. PCRE2 also confines\nall control verbs within atomic assertions, again including (*THEN) in\nassertions with only one branch.\n</p>\n<p>\n12. If a pattern contains more than one backtracking control verb, the first\none that is backtracked onto acts. For example, in the pattern\nA(*COMMIT)B(*PRUNE)C a failure in B triggers (*COMMIT), but a failure in C\ntriggers (*PRUNE). Perl's behaviour is more complex; in many cases it is the\nsame as PCRE2, but there are cases where it differs.\n</p>\n<p>\n13. There are some differences that are concerned with the settings of captured\nstrings when part of a pattern is repeated. For example, matching \"aba\" against\nthe pattern /^(a(b)?)+$/ in Perl leaves $2 unset, but in PCRE2 it is set to\n\"b\".\n</p>\n<p>\n14. PCRE2's handling of duplicate capture group numbers and names is not as\ngeneral as Perl's. This is a consequence of the fact the PCRE2 works internally\njust with numbers, using an external table to translate between numbers and\nnames. In particular, a pattern such as (?|(?&#60;a&#62;A)|(?&#60;b&#62;B)), where the two\ncapture groups have the same number but different names, is not supported, and\ncauses an error at compile time. If it were allowed, it would not be possible\nto distinguish which group matched, because both names map to capture group\nnumber 1. To avoid this confusing situation, an error is given at compile time.\n</p>\n<p>\n15. Perl used to recognize comments in some places that PCRE2 does not, for\nexample, between the ( and ? at the start of a group. If the /x modifier is\nset, Perl allowed white space between ( and ? though the latest Perls give an\nerror (for a while it was just deprecated). There may still be some cases where\nPerl behaves differently.\n</p>\n<p>\n16. Perl, when in warning mode, gives warnings for character classes such as\n[A-\\d] or [a-[:digit:]]. It then treats the hyphens as literals. PCRE2 has no\nwarning features, so it gives an error in these cases because they are almost\ncertainly user mistakes.\n</p>\n<p>\n17. In PCRE2, until release 10.45, the upper/lower case character properties Lu\nand Ll were not affected when case-independent matching was specified. Perl has\nchanged in this respect, and PCRE2 has now changed to match. When caseless\nmatching is in force, Lu, Ll, and Lt (title case) are all treated as Lc (cased\nletter).\n</p>\n<p>\n18. From release 5.32.0, Perl locks out the use of \\K in lookaround\nassertions. From release 10.38 PCRE2 does the same by default. However, there\nis an option for re-enabling the previous behaviour. When this option is set,\n\\K is acted on when it occurs in positive assertions, but is ignored in\nnegative assertions.\n</p>\n<p>\n19. PCRE2 provides some extensions to the Perl regular expression facilities.\nPerl 5.10 included new features that were not in earlier versions of Perl, some\nof which (such as named parentheses) were in PCRE2 for some time before. This\nlist is with respect to Perl 5.38:\n<br>\n<br>\n(a) If PCRE2_DOLLAR_ENDONLY is set and PCRE2_MULTILINE is not set, the $\nmeta-character matches only at the very end of the string.\n<br>\n<br>\n(b) A backslash followed by a letter with no special meaning is faulted. (Perl\ncan be made to issue a warning.)\n<br>\n<br>\n(c) If PCRE2_UNGREEDY is set, the greediness of the repetition quantifiers is\ninverted, that is, by default they are not greedy, but if followed by a\nquestion mark they are.\n<br>\n<br>\n(d) PCRE2_ANCHORED can be used at matching time to force a pattern to be tried\nonly at the first matching position in the subject string.\n<br>\n<br>\n(e) The PCRE2_NOTBOL, PCRE2_NOTEOL, PCRE2_NOTEMPTY and PCRE2_NOTEMPTY_ATSTART\noptions have no Perl equivalents.\n<br>\n<br>\n(f) The \\R escape sequence can be restricted to match only CR, LF, or CRLF\nby the PCRE2_BSR_ANYCRLF option.\n<br>\n<br>\n(g) The callout facility is PCRE2-specific. Perl supports codeblocks and\nvariable interpolation, but not general hooks on every match.\n<br>\n<br>\n(h) The partial matching facility is PCRE2-specific.\n<br>\n<br>\n(i) The alternative matching function (<b>pcre2_dfa_match()</b>) matches in a\ndifferent way and is not Perl-compatible.\n<br>\n<br>\n(j) PCRE2 recognizes some special sequences such as (*CR) or (*NO_JIT) at\nthe start of a pattern. These set overall options that cannot be changed within\nthe pattern.\n<br>\n<br>\n(k) PCRE2 supports non-atomic positive lookaround assertions. This is an\nextension to the lookaround facilities. The default, Perl-compatible\nlookarounds are atomic.\n<br>\n<br>\n(l) There are three syntactical items in patterns that can refer to a capturing\ngroup by number: back references such as \\g{2}, subroutine calls such as (?3),\nand condition references such as (?(4)...). PCRE2 supports relative group\nnumbers such as +2 and -4 in all three cases. Perl supports both plus and minus\nfor subroutine calls, but only minus for back references, and no relative\nnumbering at all for conditions.\n<br>\n<br>\n(m) The scan substring assertion (syntax (*scs:(n)...)) is a PCRE2 extension\nthat is not available in Perl.\n</p>\n<p>\n20. Perl has different limits than PCRE2. See the\n<a href=\"pcre2limits.html\"><b>pcre2limits</b></a>\ndocumentation for details. Perl went with 5.10 from recursion to iteration\nkeeping the intermediate matches on the heap, which is ~10% slower but does not\nfall into any stack-overflow limit. PCRE2 made a similar change at release\n10.30, and also has many build-time and run-time customizable limits.\n</p>\n<p>\n21. Unlike Perl, PCRE2 doesn't have character set modifiers and specially no way\nto set characters by context just like Perl's \"/d\". A regular expression using\nPCRE2_UTF and PCRE2_UCP will use similar rules to Perl's \"/u\"; something closer\nto \"/a\" could be selected by adding other PCRE2_EXTRA_ASCII* options on top.\n</p>\n<p>\n22. Some recursive patterns that Perl diagnoses as infinite recursions can be\nhandled by PCRE2, either by the interpreter or the JIT. An example is\n/(?:|(?0)abcd)(?(R)|\\z)/, which matches a sequence of any number of repeated\n\"abcd\" substrings at the end of the subject.\n</p>\n<p>\n23. Both PCRE2 and Perl error when \\x{ escapes are invalid, but Perl tries to\nrecover and prints a warning if the problem was that an invalid hexadecimal\ndigit was found. Since PCRE2 doesn't have warnings it returns an error instead.\nAdditionally, Perl accepts \\x{} and generates NUL unlike PCRE2.\n</p>\n<p>\n24. From release 10.45, PCRE2 gives an error if \\x is not followed by a\nhexadecimal digit or a curly bracket. It used to interpret this as the NUL\ncharacter. Perl still generates NUL, but warns when in warning mode in most\ncases.\n</p>\n<h2>\nAUTHOR\n</h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2>\nREVISION\n</h2>\n<p>\nLast updated: 02 June 2025\n<br>\nCopyright &copy; 1997-2024 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2convert.html",
    "content": "<html>\n<head>\n<title>pcre2convert specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2convert man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">EXPERIMENTAL PATTERN CONVERSION FUNCTIONS</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">THE CONVERT CONTEXT</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">THE CONVERSION FUNCTION</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">CONVERTING GLOBS</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">CONVERTING POSIX PATTERNS</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">AUTHOR</a>\n<li><a name=\"TOC7\" href=\"#SEC7\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">EXPERIMENTAL PATTERN CONVERSION FUNCTIONS</a></h2>\n<p>\nThis document describes a set of functions that can be used to convert\n\"foreign\" patterns into PCRE2 regular expressions. This facility is currently\nexperimental, and may be changed in future releases. Two kinds of pattern,\nglobs and POSIX patterns, are supported.\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">THE CONVERT CONTEXT</a></h2>\n<p>\n<b>pcre2_convert_context *pcre2_convert_context_create(</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>pcre2_convert_context *pcre2_convert_context_copy(</b>\n<b>  pcre2_convert_context *<i>cvcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_convert_context_free(pcre2_convert_context *<i>cvcontext</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_glob_escape(pcre2_convert_context *<i>cvcontext</i>,</b>\n<b>  uint32_t <i>escape_char</i>);</b>\n<br>\n<br>\n<b>int pcre2_set_glob_separator(pcre2_convert_context *<i>cvcontext</i>,</b>\n<b>  uint32_t <i>separator_char</i>);</b>\n<br>\n<br>\nA convert context is used to hold parameters that affect the way that pattern\nconversion works. Like all PCRE2 contexts, you need to use a context only if\nyou want to override the defaults. There are the usual create, copy, and free\nfunctions. If custom memory management functions are set in a general context\nthat is passed to <b>pcre2_convert_context_create()</b>, they are used for all\nmemory management within the conversion functions.\n</p>\n<p>\nThere are only two parameters in the convert context at present. Both apply\nonly to glob conversions. The escape character defaults to grave accent under\nWindows, otherwise backslash. It can be set to zero, meaning no escape\ncharacter, or to any punctuation character with a code point less than 256.\nThe separator character defaults to backslash under Windows, otherwise forward\nslash. It can be set to forward slash, backslash, or dot.\n</p>\n<p>\nThe two setting functions return zero on success, or PCRE2_ERROR_BADDATA if\ntheir second argument is invalid.\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">THE CONVERSION FUNCTION</a></h2>\n<p>\n<b>int pcre2_pattern_convert(PCRE2_SPTR <i>pattern</i>, PCRE2_SIZE <i>length</i>,</b>\n<b>  uint32_t <i>options</i>, PCRE2_UCHAR **<i>buffer</i>,</b>\n<b>  PCRE2_SIZE *<i>blength</i>, pcre2_convert_context *<i>cvcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_converted_pattern_free(PCRE2_UCHAR *<i>converted_pattern</i>);</b>\n<br>\n<br>\nThe first two arguments of <b>pcre2_pattern_convert()</b> define the foreign\npattern that is to be converted. The length may be given as\nPCRE2_ZERO_TERMINATED. The <b>options</b> argument defines how the pattern is to\nbe processed. If the input is UTF, the PCRE2_CONVERT_UTF option should be set.\nPCRE2_CONVERT_NO_UTF_CHECK may also be set if you are sure the input is valid.\nOne or more of the glob options, or one of the following POSIX options must be\nset to define the type of conversion that is required:\n<pre>\n  PCRE2_CONVERT_GLOB\n  PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR\n  PCRE2_CONVERT_GLOB_NO_STARSTAR\n  PCRE2_CONVERT_POSIX_BASIC\n  PCRE2_CONVERT_POSIX_EXTENDED\n</pre>\nDetails of the conversions are given below. The <b>buffer</b> and <b>blength</b>\narguments define how the output is handled:\n</p>\n<p>\nIf <b>buffer</b> is NULL, the function just returns the length of the converted\npattern via <b>blength</b>. This is one less than the length of buffer needed,\nbecause a terminating zero is always added to the output.\n</p>\n<p>\nIf <b>buffer</b> points to a NULL pointer, an output buffer is obtained using\nthe allocator in the context or <b>malloc()</b> if no context is supplied. A\npointer to this buffer is placed in the variable to which <b>buffer</b> points.\nWhen no longer needed the output buffer must be freed by calling\n<b>pcre2_converted_pattern_free()</b>. If this function is called with a NULL\nargument, it returns immediately without doing anything.\n</p>\n<p>\nIf <b>buffer</b> points to a non-NULL pointer, <b>blength</b> must be set to the\nactual length of the buffer provided (in code units).\n</p>\n<p>\nIn all cases, after successful conversion, the variable pointed to by\n<b>blength</b> is updated to the length actually used (in code units), excluding\nthe terminating zero that is always added.\n</p>\n<p>\nIf an error occurs, the length (via <b>blength</b>) is set to the offset\nwithin the input pattern where the error was detected. Only gross syntax errors\nare caught; there are plenty of errors that will get passed on for\n<b>pcre2_compile()</b> to discover.\n</p>\n<p>\nThe return from <b>pcre2_pattern_convert()</b> is zero on success or a non-zero\nPCRE2 error code. Note that PCRE2 error codes may be positive or negative:\n<b>pcre2_compile()</b> uses mostly positive codes and <b>pcre2_match()</b>\nnegative ones; <b>pcre2_convert()</b> uses existing codes of both kinds. A\ntextual error message can be obtained by calling\n<b>pcre2_get_error_message()</b>.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">CONVERTING GLOBS</a></h2>\n<p>\nGlobs are used to match file names, and consequently have the concept of a\n\"path separator\", which defaults to backslash under Windows and forward slash\notherwise. If PCRE2_CONVERT_GLOB is set, the wildcards * and ? are not\npermitted to match separator characters, but the double-star (**) feature\n(which does match separators) is supported.\n</p>\n<p>\nPCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR matches globs with wildcards allowed to\nmatch separator characters. PCRE2_CONVERT_GLOB_NO_STARSTAR matches globs with\nthe double-star feature disabled. These options may be given together.\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">CONVERTING POSIX PATTERNS</a></h2>\n<p>\nPOSIX defines two kinds of regular expression pattern: basic and extended.\nThese can be processed by setting PCRE2_CONVERT_POSIX_BASIC or\nPCRE2_CONVERT_POSIX_EXTENDED, respectively.\n</p>\n<p>\nIn POSIX patterns, backslash is not special in a character class. Unmatched\nclosing parentheses are treated as literals.\n</p>\n<p>\nIn basic patterns, ? + | {} and () must be escaped to be recognized\nas metacharacters outside a character class. If the first character in the\npattern is * it is treated as a literal. ^ is a metacharacter only at the start\nof a branch.\n</p>\n<p>\nIn extended patterns, a backslash not in a character class always\nmakes the next character literal, whatever it is. There are no backreferences.\n</p>\n<p>\nNote: POSIX mandates that the longest possible match at the first matching\nposition must be found. This is not what <b>pcre2_match()</b> does; it yields\nthe first match that is found. An application can use <b>pcre2_dfa_match()</b>\nto find the longest match, but that does not support backreferences (but then\nneither do POSIX extended patterns).\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC7\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 14 November 2023\n<br>\nCopyright &copy; 1997-2018 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2demo.html",
    "content": "<html>\n<head>\n<title>pcre2demo specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2demo man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSOURCE CODE\n</h2>\n<pre>\n/*************************************************\n*           PCRE2 DEMONSTRATION PROGRAM          *\n*************************************************/\n\n/* This is a demonstration program to illustrate a straightforward way of\nusing the PCRE2 regular expression library from a C program. See the\npcre2sample documentation for a short discussion (\"man pcre2sample\" if you have\nthe PCRE2 man pages installed). PCRE2 is a revised API for the library, and is\nincompatible with the original PCRE API.\n\nThere are actually three libraries, each supporting a different code unit\nwidth. This demonstration program uses the 8-bit library. The default is to\nprocess each code unit as a separate character, but if the pattern begins with\n\"(*UTF)\", both it and the subject are treated as UTF-8 strings, where\ncharacters may occupy multiple code units.\n\nIn Unix-like environments, if PCRE2 is installed in your standard system\nlibraries, you should be able to compile this program using this command:\n\ncc -Wall pcre2demo.c -lpcre2-8 -o pcre2demo\n\nIf PCRE2 is not installed in a standard place, it is likely to be installed\nwith support for the pkg-config mechanism. If you have pkg-config, you can\ncompile this program using this command:\n\ncc -Wall pcre2demo.c `pkg-config --cflags --libs libpcre2-8` -o pcre2demo\n\nIf you do not have pkg-config, you may have to use something like this:\n\ncc -Wall pcre2demo.c -I/usr/local/include -L/usr/local/lib \\\n  -R/usr/local/lib -lpcre2-8 -o pcre2demo\n\nReplace \"/usr/local/include\" and \"/usr/local/lib\" with wherever the include and\nlibrary files for PCRE2 are installed on your system. Only some operating\nsystems (Solaris is one) use the -R option.\n\nBuilding under Windows:\n\nIf you want to statically link this program against a non-dll .a file, you must\ndefine PCRE2_STATIC before including pcre2.h, so in this environment, uncomment\nthe following line. */\n\n/* #define PCRE2_STATIC */\n\n/* The PCRE2_CODE_UNIT_WIDTH macro must be defined before including pcre2.h.\nFor a program that uses only one code unit width, setting it to 8, 16, or 32\nmakes it possible to use generic function names such as pcre2_compile(). Note\nthat just changing 8 to 16 (for example) is not sufficient to convert this\nprogram to process 16-bit characters. Even in a fully 16-bit environment, where\nstring-handling functions such as strcmp() and printf() work with 16-bit\ncharacters, the code for handling the table of named substrings will still need\nto be modified. */\n\n#define PCRE2_CODE_UNIT_WIDTH 8\n\n#include &lt;stdio.h&gt;\n#include &lt;string.h&gt;\n#include &lt;pcre2.h&gt;\n\n\n/**************************************************************************\n* Here is the program. The API includes the concept of \"contexts\" for     *\n* setting up unusual interface requirements for compiling and matching,   *\n* such as custom memory managers and non-standard newline definitions.    *\n* This program does not do any of this, so it makes no use of contexts,   *\n* always passing NULL where a context could be given.                     *\n**************************************************************************/\n\nint main(int argc, char **argv)\n{\npcre2_code *re;\nPCRE2_SPTR pattern;     /* PCRE2_SPTR is a pointer to unsigned code units of */\nPCRE2_SPTR subject;     /* the appropriate width (in this case, 8 bits). */\nPCRE2_SPTR name_table;\n\nint errornumber;\nint find_all, caseless_match;\nint i;\nint rc;\n\nuint32_t namecount;\nuint32_t name_entry_size;\n\nPCRE2_SIZE erroroffset;\nPCRE2_SIZE *ovector;\nPCRE2_SIZE ovector_last[2];\nPCRE2_SIZE subject_length;\n\npcre2_match_data *match_data;\n\n\n/**************************************************************************\n* First, sort out the command line. Options:                              *\n* - \"-g\" to request repeated matching to find all occurrences,            *\n*   like Perl's /g option. We set the variable find_all to a non-zero     *\n*   value if the -g option is present.                                    *\n* - \"-i\" to request caseless matching, like Perl's /i option.  We set the *\n*   variable caseless_match to PCRE2_CASELESS if the -i option is         *\n*   present.                                                              *\n**************************************************************************/\n\nfind_all = 0;\ncaseless_match = 0;\nfor (i = 1; i &lt; argc; i++)\n  {\n  if (strcmp(argv[i], \"-g\") == 0) find_all = 1;\n  else if (strcmp(argv[i], \"-i\") == 0) caseless_match = PCRE2_CASELESS;\n  else if (argv[i][0] == '-')\n    {\n    printf(\"Unrecognised option %s\\n\", argv[i]);\n    return 1;\n    }\n  else break;\n  }\n\n/* After the options, we require exactly two arguments, which are the pattern,\nand the subject string. */\n\nif (argc - i != 2)\n  {\n  printf(\"Exactly two arguments required: a regex and a subject string\\n\");\n  return 1;\n  }\n\n/* Pattern and subject are char arguments, so they can be straightforwardly\ncast to PCRE2_SPTR because we are working in 8-bit code units. The subject\nlength is cast to PCRE2_SIZE for completeness, though PCRE2_SIZE is in fact\ndefined to be size_t. */\n\npattern = (PCRE2_SPTR)argv[i];\nsubject = (PCRE2_SPTR)argv[i+1];\nsubject_length = (PCRE2_SIZE)strlen((char *)subject);\n\n\n/*************************************************************************\n* Now we are going to compile the regular expression pattern, and handle *\n* any errors that are detected.                                          *\n*************************************************************************/\n\nre = pcre2_compile(\n  pattern,               /* the pattern */\n  PCRE2_ZERO_TERMINATED, /* indicates pattern is zero-terminated */\n  caseless_match,        /* possibly enable caseless */\n  &amp;errornumber,          /* for error number */\n  &amp;erroroffset,          /* for error offset */\n  NULL);                 /* use default compile context */\n\n/* Compilation failed: print the error message and exit. */\n\nif (re == NULL)\n  {\n  PCRE2_UCHAR buffer[256];\n  pcre2_get_error_message(errornumber, buffer, sizeof(buffer));\n  printf(\"PCRE2 compilation failed at offset %d: %s\\n\", (int)erroroffset,\n    buffer);\n  return 1;\n  }\n\n\n/*************************************************************************\n* If the compilation succeeded, we call PCRE2 again, in order to do a    *\n* pattern match against the subject string. This does just ONE match. If *\n* further matching is needed, it will be done below. Before running the  *\n* match we must set up a match_data block for holding the result. Using  *\n* pcre2_match_data_create_from_pattern() ensures that the block is       *\n* exactly the right size for the number of capturing parentheses in the  *\n* pattern. If you need to know the actual size of a match_data block as  *\n* a number of bytes, you can find it like this:                          *\n*                                                                        *\n* PCRE2_SIZE match_data_size = pcre2_get_match_data_size(match_data);    *\n*************************************************************************/\n\nmatch_data = pcre2_match_data_create_from_pattern(re, NULL);\n\n/* Now run the match. */\n\nrc = pcre2_match(\n  re,                   /* the compiled pattern */\n  subject,              /* the subject string */\n  subject_length,       /* the length of the subject */\n  0,                    /* start at offset 0 in the subject */\n  0,                    /* default options */\n  match_data,           /* block for storing the result */\n  NULL);                /* use default match context */\n\n/* Matching failed: handle error cases */\n\nif (rc &lt; 0)\n  {\n  switch(rc)\n    {\n    case PCRE2_ERROR_NOMATCH: printf(\"No match\\n\"); break;\n    /*\n    Handle other special cases if you like\n    */\n    default: printf(\"Matching error %d\\n\", rc); break;\n    }\n  pcre2_match_data_free(match_data);   /* Release memory used for the match */\n  pcre2_code_free(re);                 /*   data and the compiled pattern. */\n  return 1;\n  }\n\n/* Match succeeded. Get a pointer to the output vector, where string offsets\nare stored. */\n\novector = pcre2_get_ovector_pointer(match_data);\nprintf(\"Match succeeded at offset %d\\n\", (int)ovector[0]);\n\n\n/*************************************************************************\n* We have found the first match within the subject string. If the output *\n* vector wasn't big enough, say so. Then output any substrings that were *\n* captured.                                                              *\n*************************************************************************/\n\n/* The output vector wasn't big enough. This should not happen, because we used\npcre2_match_data_create_from_pattern() above. */\n\nif (rc == 0)\n  printf(\"ovector was not big enough for all the captured substrings\\n\");\n\n/* Since release 10.38 PCRE2 has locked out the use of \\K in lookaround\nassertions. This is the recommended behaviour. However, the option\nPCRE2_EXTRA_ALLOW_LOOKAROUND_BSK allows applications to re-enable the old\nbehaviour. If that is set, it is possible to run patterns such as /(?=.\\K)/ that\nuse \\K in an assertion to set the start of a match later than its end. In this\ndemonstration program, we show how to detect this case, although it cannot arise\nbecause the option is never set. */\n\nif (ovector[0] &gt; ovector[1])\n  {\n  printf(\"\\\\K was used in an assertion to set the match start after its end.\\n\"\n    \"From end to start the match was: %.*s\\n\", (int)(ovector[0] - ovector[1]),\n      (char *)(subject + ovector[1]));\n  printf(\"Run abandoned\\n\");\n  pcre2_match_data_free(match_data);\n  pcre2_code_free(re);\n  return 1;\n  }\n\n/* Show substrings stored in the output vector by number. Obviously, in a real\napplication you might want to do things other than print them. */\n\nfor (i = 0; i &lt; rc; i++)\n  {\n  PCRE2_SPTR substring_start = subject + ovector[2*i];\n  PCRE2_SIZE substring_length = ovector[2*i+1] - ovector[2*i];\n  printf(\"%2d: %.*s\\n\", i, (int)substring_length, (char *)substring_start);\n  }\n\n\n/**************************************************************************\n* That concludes the basic part of this demonstration program. We have    *\n* compiled a pattern, and performed a single match. The code that follows *\n* shows first how to access named substrings, and then how to code for    *\n* repeated matches on the same subject.                                   *\n**************************************************************************/\n\n/* See if there are any named substrings, and if so, show them by name. First\nwe have to extract the count of named parentheses from the pattern. */\n\n(void)pcre2_pattern_info(\n  re,                   /* the compiled pattern */\n  PCRE2_INFO_NAMECOUNT, /* get the number of named substrings */\n  &amp;namecount);          /* where to put the answer */\n\nif (namecount == 0)\n  printf(\"No named substrings\\n\");\nelse\n  {\n  PCRE2_SPTR tabptr;\n  printf(\"Named substrings\\n\");\n\n  /* Before we can access the substrings, we must extract the table for\n  translating names to numbers, and the size of each entry in the table. */\n\n  (void)pcre2_pattern_info(\n    re,                       /* the compiled pattern */\n    PCRE2_INFO_NAMETABLE,     /* address of the table */\n    &amp;name_table);             /* where to put the answer */\n\n  (void)pcre2_pattern_info(\n    re,                       /* the compiled pattern */\n    PCRE2_INFO_NAMEENTRYSIZE, /* size of each entry in the table */\n    &amp;name_entry_size);        /* where to put the answer */\n\n  /* Now we can scan the table and, for each entry, print the number, the name,\n  and the substring itself. In the 8-bit library the number is held in two\n  bytes, most significant first. */\n\n  tabptr = name_table;\n  for (i = 0; i &lt; namecount; i++)\n    {\n    int n = (tabptr[0] &lt;&lt; 8) | tabptr[1];\n    printf(\"(%d) %*s: %.*s\\n\", n, name_entry_size - 3, tabptr + 2,\n      (int)(ovector[2*n+1] - ovector[2*n]), subject + ovector[2*n]);\n    tabptr += name_entry_size;\n    }\n  }\n\n\n/*************************************************************************\n* If the \"-g\" option was given on the command line, we want to continue  *\n* to search for additional matches in the subject string, in a similar   *\n* way to the /g option in Perl. This turns out to be trickier than you   *\n* might think because of the possibility of matching an empty string.    *\n*                                                                        *\n* To help with this task, PCRE2 provides the pcre2_next_match() helper.  *\n*************************************************************************/\n\nif (!find_all)     /* Check for -g */\n  {\n  pcre2_match_data_free(match_data);  /* Release the memory that was used */\n  pcre2_code_free(re);                /* for the match data and the pattern. */\n  return 0;                           /* Exit the program. */\n  }\n\n/* Loop for second and subsequent matches */\n\novector_last[0] = ovector[0];\novector_last[1] = ovector[1];\n\nfor (;;)\n  {\n  PCRE2_SIZE start_offset;\n  uint32_t options;\n\n  /* After each successful match, we use pcre2_next_match() to obtain the match\n  parameters for subsequent match attempts. */\n\n  if (!pcre2_next_match(match_data, &amp;start_offset, &amp;options))\n    break;\n\n  /* Run the next matching operation */\n\n  rc = pcre2_match(\n    re,                   /* the compiled pattern */\n    subject,              /* the subject string */\n    subject_length,       /* the length of the subject */\n    start_offset,         /* starting offset in the subject */\n    options,              /* options */\n    match_data,           /* block for storing the result */\n    NULL);                /* use default match context */\n\n  /* If this match attempt fails, exit the loop for subsequent matches. */\n\n  if (rc == PCRE2_ERROR_NOMATCH)\n    break;\n\n  /* Other matching errors are not recoverable. */\n\n  if (rc &lt; 0)\n    {\n    printf(\"Matching error %d\\n\", rc);\n    pcre2_match_data_free(match_data);\n    pcre2_code_free(re);\n    return 1;\n    }\n\n  /* This demonstration program depends on pcre2_next_match() to ensure that the\n  loop for second and subsequent matches does not run forever. However, it would\n  be robust practice for a production application to verify this. The following\n  block of code shows how to do this. This error case is not reachable unless\n  there is a bug in PCRE2.\n\n  Because this program does not set the PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK option,\n  the logic is simple. We verify that either ovector[1] has advanced, or that we\n  have an empty match touching the end of a previous non-empty match. See the\n  API documentation for guidance if your application uses\n  PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK and searches for multiple matches. */\n\n  if (!(ovector[1] &gt; ovector_last[1] ||\n        (ovector[1] == ovector[0] &amp;&amp; ovector_last[1] &gt; ovector_last[0] &amp;&amp;\n         ovector[1] == ovector_last[1])))\n    {\n    printf(\"\\\\K was used in an assertion to yield non-advancing matches.\\n\");\n    printf(\"Run abandoned\\n\");\n    pcre2_match_data_free(match_data);\n    pcre2_code_free(re);\n    return 1;\n    }\n\n  ovector_last[0] = ovector[0];\n  ovector_last[1] = ovector[1];\n\n  /* Match succeeded. */\n\n  printf(\"\\nMatch succeeded again at offset %d\\n\", (int)ovector[0]);\n\n  /* The match succeeded, but the output vector wasn't big enough. This\n  should not happen. */\n\n  if (rc == 0)\n    printf(\"ovector was not big enough for all the captured substrings\\n\");\n\n  /* We guard against patterns such as /(?=.\\K)/ that use \\K in an assertion to\n  set the start of a match later than its end. As explained above, this case\n  should not occur because this demonstration program does not set the\n  PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK option, however, we do include code showing\n  how to detect it. */\n\n  if (ovector[0] &gt; ovector[1])\n    {\n    printf(\"\\\\K was used in an assertion to set the match start after its end.\\n\"\n      \"From end to start the match was: %.*s\\n\", (int)(ovector[0] - ovector[1]),\n        (char *)(subject + ovector[1]));\n    printf(\"Run abandoned\\n\");\n    pcre2_match_data_free(match_data);\n    pcre2_code_free(re);\n    return 1;\n    }\n\n  /* As before, show substrings stored in the output vector by number, and then\n  also any named substrings. */\n\n  for (i = 0; i &lt; rc; i++)\n    {\n    PCRE2_SPTR substring_start = subject + ovector[2*i];\n    size_t substring_length = ovector[2*i+1] - ovector[2*i];\n    printf(\"%2d: %.*s\\n\", i, (int)substring_length, (char *)substring_start);\n    }\n\n  if (namecount == 0)\n    printf(\"No named substrings\\n\");\n  else\n    {\n    PCRE2_SPTR tabptr = name_table;\n    printf(\"Named substrings\\n\");\n    for (i = 0; i &lt; namecount; i++)\n      {\n      int n = (tabptr[0] &lt;&lt; 8) | tabptr[1];\n      printf(\"(%d) %*s: %.*s\\n\", n, name_entry_size - 3, tabptr + 2,\n        (int)(ovector[2*n+1] - ovector[2*n]), subject + ovector[2*n]);\n      tabptr += name_entry_size;\n      }\n    }\n  }      /* End of loop to find second and subsequent matches */\n\nprintf(\"\\n\");\n\npcre2_match_data_free(match_data);\npcre2_code_free(re);\nreturn 0;\n}\n\n/* End of pcre2demo.c */\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2grep.html",
    "content": "<html>\n<head>\n<title>pcre2grep specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2grep man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">SYNOPSIS</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">DESCRIPTION</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">SUPPORT FOR COMPRESSED FILES</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">BINARY FILES</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">BINARY ZEROS IN PATTERNS</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">OPTIONS</a>\n<li><a name=\"TOC7\" href=\"#SEC7\">ENVIRONMENT VARIABLES</a>\n<li><a name=\"TOC8\" href=\"#SEC8\">NEWLINES</a>\n<li><a name=\"TOC9\" href=\"#SEC9\">OPTIONS COMPATIBILITY WITH GNU GREP</a>\n<li><a name=\"TOC10\" href=\"#SEC10\">OPTIONS WITH DATA</a>\n<li><a name=\"TOC11\" href=\"#SEC11\">USING PCRE2'S CALLOUT FACILITY</a>\n<li><a name=\"TOC12\" href=\"#SEC12\">MATCHING ERRORS</a>\n<li><a name=\"TOC13\" href=\"#SEC13\">DIAGNOSTICS</a>\n<li><a name=\"TOC14\" href=\"#SEC14\">SEE ALSO</a>\n<li><a name=\"TOC15\" href=\"#SEC15\">AUTHOR</a>\n<li><a name=\"TOC16\" href=\"#SEC16\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">SYNOPSIS</a></h2>\n<p>\n<b>pcre2grep [options] [long options] [pattern] [path1 path2 ...]</b>\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">DESCRIPTION</a></h2>\n<p>\n<b>pcre2grep</b> searches files for character patterns, in the same way as other\ngrep commands do, but it uses the PCRE2 regular expression library to support\npatterns that are compatible with the regular expressions of Perl 5. See\n<a href=\"pcre2syntax.html\"><b>pcre2syntax</b>(3)</a>\nfor a quick-reference summary of pattern syntax, or\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b>(3)</a>\nfor a full description of the syntax and semantics of the regular expressions\nthat PCRE2 supports.\n</p>\n<p>\nPatterns, whether supplied on the command line or in a separate file, are given\nwithout delimiters. For example:\n<pre>\n  pcre2grep Thursday /etc/motd\n</pre>\nIf you attempt to use delimiters (for example, by surrounding a pattern with\nslashes, as is common in Perl scripts), they are interpreted as part of the\npattern. Quotes can of course be used to delimit patterns on the command line\nbecause they are interpreted by the shell, and indeed quotes are required if a\npattern contains white space or shell metacharacters.\n</p>\n<p>\nThe first argument that follows any option settings is treated as the single\npattern to be matched when neither <b>-e</b> nor <b>-f</b> is present.\nConversely, when one or both of these options are used to specify patterns, all\narguments are treated as path names. At least one of <b>-e</b>, <b>-f</b>, or an\nargument pattern must be provided.\n</p>\n<p>\nIf no files are specified, <b>pcre2grep</b> reads the standard input. The\nstandard input can also be referenced by a name consisting of a single hyphen.\nFor example:\n<pre>\n  pcre2grep some-pattern file1 - file3\n</pre>\nBy default, input files are searched line by line, so pattern assertions about\nthe beginning and end of a subject string (^, $, \\A, \\Z, and \\z) match at\nthe beginning and end of each line. When a line matches a pattern, it is copied\nto the standard output, and if there is more than one file, the file name is\noutput at the start of each line, followed by a colon. However, there are\noptions that can change how <b>pcre2grep</b> behaves. For example, the <b>-M</b>\noption makes it possible to search for strings that span line boundaries. What\ndefines a line boundary is controlled by the <b>-N</b> (<b>--newline</b>) option.\nThe <b>-h</b> and <b>-H</b> options control whether or not file names are shown,\nand the <b>-Z</b> option changes the file name terminator to a zero byte.\n</p>\n<p>\nThe amount of memory used for buffering files that are being scanned is\ncontrolled by parameters that can be set by the <b>--buffer-size</b> and\n<b>--max-buffer-size</b> options. The first of these sets the size of buffer\nthat is obtained at the start of processing. If an input file contains very\nlong lines, a larger buffer may be needed; this is handled by automatically\nextending the buffer, up to the limit specified by <b>--max-buffer-size</b>. The\ndefault values for these parameters can be set when <b>pcre2grep</b> is\nbuilt; if nothing is specified, the defaults are set to 20KiB and 1MiB\nrespectively. An error occurs if a line is too long and the buffer can no\nlonger be expanded.\n</p>\n<p>\nThe block of memory that is actually used is three times the \"buffer size\", to\nallow for buffering \"before\" and \"after\" lines. If the buffer size is too\nsmall, fewer than requested \"before\" and \"after\" lines may be output.\n</p>\n<p>\nWhen matching with a multiline pattern, the size of the buffer must be at least\nhalf of the maximum match expected or the pattern might fail to match.\n</p>\n<p>\nPatterns can be no longer than 8KiB or BUFSIZ bytes, whichever is the greater.\nBUFSIZ is defined in <b>&#60;stdio.h&#62;</b>. When there is more than one pattern\n(specified by the use of <b>-e</b> and/or <b>-f</b>), each pattern is applied to\neach line in the order in which they are defined, except that all the <b>-e</b>\npatterns are tried before the <b>-f</b> patterns.\n</p>\n<p>\nBy default, as soon as one pattern matches a line, no further patterns are\nconsidered. However, if <b>--colour</b> (or <b>--color</b>) is used to colour the\nmatching substrings, or if <b>--only-matching</b>, <b>--file-offsets</b>,\n<b>--line-offsets</b>, or <b>--output</b> is used to output only the part of the\nline that matched (either shown literally, or as an offset), the behaviour is\ndifferent. In this situation, all the patterns are applied to the line. If\nthere is more than one match, the one that begins nearest to the start of the\nsubject is processed; if there is more than one match at that position, the one\nwith the longest matching substring is processed; if the matching substrings\nare equal, the first match found is processed.\n</p>\n<p>\nScanning with all the patterns resumes immediately following the match, so that\nlater matches on the same line can be found. Note, however, that an overlapping\nmatch that starts in the middle of another match will not be processed.\n</p>\n<p>\nThe above behaviour was changed at release 10.41 to be more compatible with GNU\ngrep. In earlier releases, <b>pcre2grep</b> did not recognize matches from\nlater patterns that were earlier in the subject.\n</p>\n<p>\nPatterns that can match an empty string are accepted, but empty string\nmatches are never recognized. An example is the pattern \"(super)?(man)?\", in\nwhich all components are optional. This pattern finds all occurrences of both\n\"super\" and \"man\"; the output differs from matching with \"super|man\" when only\nthe matching substrings are being shown.\n</p>\n<p>\nIf the <b>LC_ALL</b> or <b>LC_CTYPE</b> environment variable is set,\n<b>pcre2grep</b> uses the value to set a locale when calling the PCRE2 library.\nThe <b>--locale</b> option can be used to override this.\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">SUPPORT FOR COMPRESSED FILES</a></h2>\n<p>\nCompile-time options for <b>pcre2grep</b> can set it up to use <b>libz</b> or\n<b>libbz2</b> for reading compressed files whose names end in <b>.gz</b> or\n<b>.bz2</b>, respectively. You can find out whether your <b>pcre2grep</b> binary\nhas support for one or both of these file types by running it with the\n<b>--help</b> option. If the appropriate support is not present, all files are\ntreated as plain text. The standard input is always so treated. If a file with\na <b>.gz</b> or <b>.bz2</b> extension is not in fact compressed, it is read as a\nplain text file. When input is from a compressed .gz or .bz2 file, the\n<b>--line-buffered</b> option is ignored.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">BINARY FILES</a></h2>\n<p>\nBy default, a file that contains a binary zero byte within the first 1024 bytes\nis identified as a binary file, and is processed specially. However, if the\nnewline type is specified as NUL, that is, the line terminator is a binary\nzero, the test for a binary file is not applied. See the <b>--binary-files</b>\noption for a means of changing the way binary files are handled.\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">BINARY ZEROS IN PATTERNS</a></h2>\n<p>\nPatterns passed from the command line are strings that are terminated by a\nbinary zero, so cannot contain internal zeros. However, patterns that are read\nfrom a file via the <b>-f</b> option may contain binary zeros.\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">OPTIONS</a></h2>\n<p>\nThe order in which some of the options appear can affect the output. For\nexample, both the <b>-H</b> and <b>-l</b> options affect the printing of file\nnames. Whichever comes later in the command line will be the one that takes\neffect. Similarly, except where noted below, if an option is given twice, the\nlater setting is used. Numerical values for options may be followed by K or M,\nto signify multiplication by 1024 or 1024*1024 respectively.\n</p>\n<p>\n<b>--</b>\nThis terminates the list of options. It is useful if the next item on the\ncommand line starts with a hyphen but is not an option. This allows for the\nprocessing of patterns and file names that start with hyphens.\n</p>\n<p>\n<b>-A</b> <i>number</i>, <b>--after-context=</b><i>number</i>\nOutput up to <i>number</i> lines of context after each matching line. Fewer\nlines are output if the next match or the end of the file is reached, or if the\nprocessing buffer size has been set too small. If file names and/or line\nnumbers are being output, a hyphen separator is used instead of a colon for the\ncontext lines (the <b>-Z</b> option can be used to change the file name\nterminator to a zero byte). A line containing \"--\" is output between each group\nof lines, unless they are in fact contiguous in the input file. The value of\n<i>number</i> is expected to be relatively small. When <b>-c</b> is used,\n<b>-A</b> is ignored.\n</p>\n<p>\n<b>-a</b>, <b>--text</b>\nTreat binary files as text. This is equivalent to\n<b>--binary-files</b>=<i>text</i>.\n</p>\n<p>\n<b>--allow-lookaround-bsk</b>\nPCRE2 now forbids the use of \\K in lookarounds by default, in line with Perl.\nThis option causes <b>pcre2grep</b> to set the PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK\noption, which enables this somewhat dangerous usage.\n</p>\n<p>\n<b>-B</b> <i>number</i>, <b>--before-context=</b><i>number</i>\nOutput up to <i>number</i> lines of context before each matching line. Fewer\nlines are output if the previous match or the start of the file is within\n<i>number</i> lines, or if the processing buffer size has been set too small. If\nfile names and/or line numbers are being output, a hyphen separator is used\ninstead of a colon for the context lines (the <b>-Z</b> option can be used to\nchange the file name terminator to a zero byte). A line containing \"--\" is\noutput between each group of lines, unless they are in fact contiguous in the\ninput file. The value of <i>number</i> is expected to be relatively small. When\n<b>-c</b> is used, <b>-B</b> is ignored.\n</p>\n<p>\n<b>--binary-files=</b><i>word</i>\nSpecify how binary files are to be processed. If the word is \"binary\" (the\ndefault), pattern matching is performed on binary files, but the only output is\n\"Binary file &#60;name&#62; matches\" when a match succeeds. If the word is \"text\",\nwhich is equivalent to the <b>-a</b> or <b>--text</b> option, binary files are\nprocessed in the same way as any other file. In this case, when a match\nsucceeds, the output may be binary garbage, which can have nasty effects if\nsent to a terminal. If the word is \"without-match\", which is equivalent to the\n<b>-I</b> option, binary files are not processed at all; they are assumed not to\nbe of interest and are skipped without causing any output or affecting the\nreturn code.\n</p>\n<p>\n<b>--buffer-size=</b><i>number</i>\nSet the parameter that controls how much memory is obtained at the start of\nprocessing for buffering files that are being scanned. See also\n<b>--max-buffer-size</b> below.\n</p>\n<p>\n<b>-C</b> <i>number</i>, <b>--context=</b><i>number</i>\nOutput <i>number</i> lines of context both before and after each matching line.\nThis is equivalent to setting both <b>-A</b> and <b>-B</b> to the same value.\n</p>\n<p>\n<b>-c</b>, <b>--count</b>\nDo not output lines from the files that are being scanned; instead output the\nnumber of lines that would have been shown, either because they matched, or, if\n<b>-v</b> is set, because they failed to match. By default, this count is\nexactly the same as the number of lines that would have been output, but if the\n<b>-M</b> (multiline) option is used (without <b>-v</b>), there may be more\nsuppressed lines than the count (that is, the number of matches).\n<br>\n<br>\nIf no lines are selected, the number zero is output. If several files are\nbeing scanned, a count is output for each of them and the <b>-t</b> option can\nbe used to cause a total to be output at the end. However, if the\n<b>--files-with-matches</b> option is also used, only those files whose counts\nare greater than zero are listed. When <b>-c</b> is used, the <b>-A</b>,\n<b>-B</b>, and <b>-C</b> options are ignored.\n</p>\n<p>\n<b>--colour</b>, <b>--color</b>\nIf this option is given without any data, it is equivalent to \"--colour=auto\".\nIf data is required, it must be given in the same shell item, separated by an\nequals sign.\n</p>\n<p>\n<b>--colour=</b><i>value</i>, <b>--color=</b><i>value</i>\nThis option specifies under what circumstances the parts of a line that matched\na pattern should be coloured in the output. It is ignored if\n<b>--file-offsets</b>, <b>--line-offsets</b>, or <b>--output</b> is set. By\ndefault, output is not coloured. The value for the <b>--colour</b> option (which\nis optional, see above) may be \"never\", \"always\", or \"auto\". In the latter\ncase, colouring happens only if the standard output is connected to a terminal.\nMore resources are used when colouring is enabled, because <b>pcre2grep</b> has\nto search for all possible matches in a line, not just one, in order to colour\nthem all.\n<br>\n<br>\nThe colour that is used can be specified by setting one of the environment\nvariables PCRE2GREP_COLOUR, PCRE2GREP_COLOR, PCREGREP_COLOUR, or\nPCREGREP_COLOR, which are checked in that order. If none of these are set,\n<b>pcre2grep</b> looks for GREP_COLORS or GREP_COLOR (in that order). The value\nof the variable should be a string of two numbers, separated by a semicolon,\nexcept in the case of GREP_COLORS, which must start with \"ms=\" or \"mt=\"\nfollowed by two semicolon-separated colours, terminated by the end of the\nstring or by a colon. If GREP_COLORS does not start with \"ms=\" or \"mt=\" it is\nignored, and GREP_COLOR is checked.\n<br>\n<br>\nIf the string obtained from one of the above variables contains any characters\nother than semicolon or digits, the setting is ignored and the default colour\nis used. The string is copied directly into the control string for setting\ncolour on a terminal, so it is your responsibility to ensure that the values\nmake sense. If no relevant environment variable is set, the default is \"1;31\",\nwhich gives red.\n</p>\n<p>\n<b>-D</b> <i>action</i>, <b>--devices=</b><i>action</i>\nIf an input path is not a regular file or a directory, \"action\" specifies how\nit is to be processed. Valid values are \"read\" (the default) or \"skip\"\n(silently skip the path).\n</p>\n<p>\n<b>-d</b> <i>action</i>, <b>--directories=</b><i>action</i>\nIf an input path is a directory, \"action\" specifies how it is to be processed.\nValid values are \"read\" (the default in non-Windows environments, for\ncompatibility with GNU grep), \"recurse\" (equivalent to the <b>-r</b> option), or\n\"skip\" (silently skip the path, the default in Windows environments). In the\n\"read\" case, directories are read as if they were ordinary files. In some\noperating systems the effect of reading a directory like this is an immediate\nend-of-file; in others it may provoke an error.\n</p>\n<p>\n<b>--depth-limit</b>=<i>number</i>\nSee <b>--match-limit</b> below.\n</p>\n<p>\n<b>-E</b>, <b>--case-restrict</b>\nWhen case distinctions are being ignored in Unicode mode, two ASCII letters (K\nand S) will by default match Unicode characters U+212A (Kelvin sign) and U+017F\n(long S) respectively, as well as their lower case ASCII counterparts. When\nthis option is set, case equivalences are restricted such that no ASCII\ncharacter matches a non-ASCII character, and vice versa.\n</p>\n<p>\n<b>-e</b> <i>pattern</i>, <b>--regex=</b><i>pattern</i>, <b>--regexp=</b><i>pattern</i>\nSpecify a pattern to be matched. This option can be used multiple times in\norder to specify several patterns. It can also be used as a way of specifying a\nsingle pattern that starts with a hyphen. When <b>-e</b> is used, no argument\npattern is taken from the command line; all arguments are treated as file\nnames. There is no limit to the number of patterns. They are applied to each\nline in the order in which they are defined.\n<br>\n<br>\nIf <b>-f</b> is used with <b>-e</b>, the command line patterns are matched first,\nfollowed by the patterns from the file(s), independent of the order in which\nthese options are specified.\n</p>\n<p>\n<b>--exclude</b>=<i>pattern</i>\nFiles (but not directories) whose names match the pattern are skipped without\nbeing processed. This applies to all files, whether listed on the command line,\nobtained from <b>--file-list</b>, or by scanning a directory. The pattern is a\nPCRE2 regular expression, and is matched against the final component of the\nfile name, not the entire path. The <b>-F</b>, <b>-w</b>, and <b>-x</b> options do\nnot apply to this pattern. The option may be given any number of times in order\nto specify multiple patterns. If a file name matches both an <b>--include</b>\nand an <b>--exclude</b> pattern, it is excluded. There is no short form for this\noption.\n</p>\n<p>\n<b>--exclude-from=</b><i>filename</i>\nTreat each non-empty line of the file as the data for an <b>--exclude</b>\noption. What constitutes a newline when reading the file is the operating\nsystem's default. The <b>--newline</b> option has no effect on this option. This\noption may be given more than once in order to specify a number of files to\nread.\n</p>\n<p>\n<b>--exclude-dir</b>=<i>pattern</i>\nDirectories whose names match the pattern are skipped without being processed,\nwhatever the setting of the <b>--recursive</b> option. This applies to all\ndirectories, whether listed on the command line, obtained from\n<b>--file-list</b>, or by scanning a parent directory. The pattern is a PCRE2\nregular expression, and is matched against the final component of the directory\nname, not the entire path. The <b>-F</b>, <b>-w</b>, and <b>-x</b> options do not\napply to this pattern. The option may be given any number of times in order to\nspecify more than one pattern. If a directory matches both <b>--include-dir</b>\nand <b>--exclude-dir</b>, it is excluded. There is no short form for this\noption.\n</p>\n<p>\n<b>-F</b>, <b>--fixed-strings</b>\nInterpret each data-matching pattern as a list of fixed strings, separated by\nnewlines, instead of as a regular expression. What constitutes a newline for\nthis purpose is controlled by the <b>--newline</b> option. The <b>-w</b> (match\nas a word) and <b>-x</b> (match whole line) options can be used with <b>-F</b>.\nThey apply to each of the fixed strings. A line is selected if any of the fixed\nstrings are found in it (subject to <b>-w</b> or <b>-x</b>, if present). This\noption applies only to the patterns that are matched against the contents of\nfiles; it does not apply to patterns specified by any of the <b>--include</b> or\n<b>--exclude</b> options.\n</p>\n<p>\n<b>-f</b> <i>filename</i>, <b>--file=</b><i>filename</i>\nRead patterns from the file, one per line. As is the case with patterns on the\ncommand line, no delimiters should be used. What constitutes a newline when\nreading the file is the operating system's default interpretation of \\n. The\n<b>--newline</b> option has no effect on this option. Trailing white space is\nremoved from each line, and blank lines are ignored unless the\n<b>--posix-pattern-file</b> option is also provided. An empty file contains no\npatterns and therefore matches nothing. Patterns read from a file in this way\nmay contain binary zeros, which are treated as ordinary character literals.\n<br>\n<br>\nIf this option is given more than once, all the specified files are read. A\ndata line is output if any of the patterns match it. A file name can be given\nas \"-\" to refer to the standard input. When <b>-f</b> is used, patterns\nspecified on the command line using <b>-e</b> may also be present; they are\nmatched before the file's patterns. However, no pattern is taken from the\ncommand line; all arguments are treated as the names of paths to be searched.\n</p>\n<p>\n<b>--file-list</b>=<i>filename</i>\nRead a list of files and/or directories that are to be scanned from the given\nfile, one per line. What constitutes a newline when reading the file is the\noperating system's default. Trailing white space is removed from each line, and\nblank lines are ignored. These paths are processed before any that are listed\non the command line. The file name can be given as \"-\" to refer to the standard\ninput. If <b>--file</b> and <b>--file-list</b> are both specified as \"-\",\npatterns are read first. This is useful only when the standard input is a\nterminal, from which further lines (the list of files) can be read after an\nend-of-file indication. If this option is given more than once, all the\nspecified files are read.\n</p>\n<p>\n<b>--file-offsets</b>\nInstead of showing lines or parts of lines that match, show each match as an\noffset from the start of the file and a length, separated by a comma. In this\nmode, <b>--colour</b> has no effect, and no context is shown. That is, the\n<b>-A</b>, <b>-B</b>, and <b>-C</b> options are ignored. If there is more than one\nmatch in a line, each of them is shown separately. This option is mutually\nexclusive with <b>--output</b>, <b>--line-offsets</b>, and <b>--only-matching</b>.\n</p>\n<p>\n<b>--group-separator</b>=<i>text</i>\nOutput this text string instead of two hyphens between groups of lines when\n<b>-A</b>, <b>-B</b>, or <b>-C</b> is in use. See also <b>--no-group-separator</b>.\n</p>\n<p>\n<b>-H</b>, <b>--with-filename</b>\nForce the inclusion of the file name at the start of output lines when\nsearching a single file. The file name is not normally shown in this case.\nBy default, for matching lines, the file name is followed by a colon; for\ncontext lines, a hyphen separator is used. The <b>-Z</b> option can be used to\nchange the terminator to a zero byte. If a line number is also being output,\nit follows the file name. When the <b>-M</b> option causes a pattern to match\nmore than one line, only the first is preceded by the file name. This option\noverrides any previous <b>-h</b>, <b>-l</b>, or <b>-L</b> options.\n</p>\n<p>\n<b>-h</b>, <b>--no-filename</b>\nSuppress the output file names when searching multiple files. File names are\nnormally shown when multiple files are searched. By default, for matching\nlines, the file name is followed by a colon; for context lines, a hyphen\nseparator is used. The <b>-Z</b> option can be used to change the terminator to\na zero byte. If a line number is also being output, it follows the file name.\nThis option overrides any previous <b>-H</b>, <b>-L</b>, or <b>-l</b> options.\n</p>\n<p>\n<b>--heap-limit</b>=<i>number</i>\nSee <b>--match-limit</b> below.\n</p>\n<p>\n<b>--help</b>\nOutput a help message, giving brief details of the command options and file\ntype support, and then exit. Anything else on the command line is\nignored.\n</p>\n<p>\n<b>-I</b>\nIgnore binary files. This is equivalent to\n<b>--binary-files</b>=<i>without-match</i>.\n</p>\n<p>\n<b>-i</b>, <b>--ignore-case</b>\nIgnore upper/lower case distinctions when pattern matching. This applies when\nmatching path names for inclusion or exclusion as well as when matching lines\nin files.\n</p>\n<p>\n<b>--include</b>=<i>pattern</i>\nIf any <b>--include</b> patterns are specified, the only files that are\nprocessed are those whose names match one of the patterns and do not match an\n<b>--exclude</b> pattern. This option does not affect directories, but it\napplies to all files, whether listed on the command line, obtained from\n<b>--file-list</b>, or by scanning a directory. The pattern is a PCRE2 regular\nexpression, and is matched against the final component of the file name, not\nthe entire path. The <b>-F</b>, <b>-w</b>, and <b>-x</b> options do not apply to\nthis pattern. The option may be given any number of times. If a file name\nmatches both an <b>--include</b> and an <b>--exclude</b> pattern, it is excluded.\nThere is no short form for this option.\n</p>\n<p>\n<b>--include-from=</b><i>filename</i>\nTreat each non-empty line of the file as the data for an <b>--include</b>\noption. What constitutes a newline for this purpose is the operating system's\ndefault. The <b>--newline</b> option has no effect on this option. This option\nmay be given any number of times; all the files are read.\n</p>\n<p>\n<b>--include-dir</b>=<i>pattern</i>\nIf any <b>--include-dir</b> patterns are specified, the only directories that\nare processed are those whose names match one of the patterns and do not match\nan <b>--exclude-dir</b> pattern. This applies to all directories, whether listed\non the command line, obtained from <b>--file-list</b>, or by scanning a parent\ndirectory. The pattern is a PCRE2 regular expression, and is matched against\nthe final component of the directory name, not the entire path. The <b>-F</b>,\n<b>-w</b>, and <b>-x</b> options do not apply to this pattern. The option may be\ngiven any number of times. If a directory matches both <b>--include-dir</b> and\n<b>--exclude-dir</b>, it is excluded. There is no short form for this option.\n</p>\n<p>\n<b>-L</b>, <b>--files-without-match</b>\nInstead of outputting lines from the files, just output the names of the files\nthat do not contain any lines that would have been output. Each file name is\noutput once, on a separate line by default, but if the <b>-Z</b> option is set,\nthey are separated by zero bytes instead of newlines. This option overrides any\nprevious <b>-H</b>, <b>-h</b>, or <b>-l</b> options.\n</p>\n<p>\n<b>-l</b>, <b>--files-with-matches</b>\nInstead of outputting lines from the files, just output the names of the files\ncontaining lines that would have been output. Each file name is output once, on\na separate line, but if the <b>-Z</b> option is set, they are separated by zero\nbytes instead of newlines. Searching normally stops as soon as a matching line\nis found in a file. However, if the <b>-c</b> (count) option is also used,\nmatching continues in order to obtain the correct count, and those files that\nhave at least one match are listed along with their counts. Using this option\nwith <b>-c</b> is a way of suppressing the listing of files with no matches that\noccurs with <b>-c</b> on its own. This option overrides any previous <b>-H</b>,\n<b>-h</b>, or <b>-L</b> options.\n</p>\n<p>\n<b>--label</b>=<i>name</i>\nThis option supplies a name to be used for the standard input when file names\nare being output. If not supplied, \"(standard input)\" is used. There is no\nshort form for this option.\n</p>\n<p>\n<b>--line-buffered</b>\nWhen this option is given, non-compressed input is read and processed line by\nline, and the output is flushed after each write. By default, input is read in\nlarge chunks, unless <b>pcre2grep</b> can determine that it is reading from a\nterminal, which is currently possible only in Unix-like environments or\nWindows. Output to terminal is normally automatically flushed by the operating\nsystem. This option can be useful when the input or output is attached to a\npipe and you do not want <b>pcre2grep</b> to buffer up large amounts of data.\nHowever, its use will affect performance, and the <b>-M</b> (multiline) option\nceases to work. When input is from a compressed .gz or .bz2 file,\n<b>--line-buffered</b> is ignored.\n</p>\n<p>\n<b>--line-offsets</b>\nInstead of showing lines or parts of lines that match, show each match as a\nline number, the offset from the start of the line, and a length. The line\nnumber is terminated by a colon (as usual; see the <b>-n</b> option), and the\noffset and length are separated by a comma. In this mode, <b>--colour</b> has no\neffect, and no context is shown. That is, the <b>-A</b>, <b>-B</b>, and <b>-C</b>\noptions are ignored. If there is more than one match in a line, each of them is\nshown separately. This option is mutually exclusive with <b>--output</b>,\n<b>--file-offsets</b>, and <b>--only-matching</b>.\n</p>\n<p>\n<b>--locale</b>=<i>locale-name</i>\nThis option specifies a locale to be used for pattern matching. It overrides\nthe value in the <b>LC_ALL</b> or <b>LC_CTYPE</b> environment variables. If no\nlocale is specified, the PCRE2 library's default (usually the \"C\" locale) is\nused. There is no short form for this option.\n</p>\n<p>\n<b>-M</b>, <b>--multiline</b>\nAllow patterns to match more than one line. When this option is set, the PCRE2\nlibrary is called in \"multiline\" mode, and a match is allowed to continue past\nthe end of the initial line and onto one or more subsequent lines.\n<br>\n<br>\nPatterns used with <b>-M</b> may usefully contain literal newline characters and\ninternal occurrences of ^ and $ characters, because in multiline mode these can\nmatch at internal newlines. Because <b>pcre2grep</b> is scanning multiple lines,\nthe \\Z and \\z assertions match only at the end of the last line in the file.\nThe \\A assertion matches at the start of the first line of a match. This can\nbe any line in the file; it is not anchored to the first line.\n<br>\n<br>\nThe output for a successful match may consist of more than one line. The first\nline is the line in which the match started, and the last line is the line in\nwhich the match ended. If the matched string ends with a newline sequence, the\noutput ends at the end of that line. If <b>-v</b> is set, none of the lines in a\nmulti-line match are output. Once a match has been handled, scanning restarts\nat the beginning of the line after the one in which the match ended.\n<br>\n<br>\nThe newline sequence that separates multiple lines must be matched as part of\nthe pattern. For example, to find the phrase \"regular expression\" in a file\nwhere \"regular\" might be at the end of a line and \"expression\" at the start of\nthe next line, you could use this command:\n<pre>\n  pcre2grep -M 'regular\\s+expression' &#60;file&#62;\n</pre>\nThe \\s escape sequence matches any white space character, including newlines,\nand is followed by + so as to match trailing white space on the first line as\nwell as possibly handling a two-character newline sequence.\n<br>\n<br>\nThere is a limit to the number of lines that can be matched, imposed by the way\nthat <b>pcre2grep</b> buffers the input file as it scans it. With a sufficiently\nlarge processing buffer, this should not be a problem.\n<br>\n<br>\nThe <b>-M</b> option does not work when input is read line by line (see\n<b>--line-buffered</b>.)\n</p>\n<p>\n<b>-m</b> <i>number</i>, <b>--max-count</b>=<i>number</i>\nStop processing after finding <i>number</i> matching lines, or non-matching\nlines if <b>-v</b> is also set. Any trailing context lines are output after the\nfinal match. In multiline mode, each multiline match counts as just one line\nfor this purpose. If this limit is reached when reading the standard input from\na regular file, the file is left positioned just after the last matching line.\nIf <b>-c</b> is also set, the count that is output is never greater than\n<i>number</i>. This option has no effect if used with <b>-L</b>, <b>-l</b>, or\n<b>-q</b>, or when just checking for a match in a binary file.\n</p>\n<p>\n<b>--match-limit</b>=<i>number</i>\nProcessing some regular expression patterns may take a very long time to search\nfor all possible matching strings. Others may require a very large amount of\nmemory. There are three options that set resource limits for matching.\n<br>\n<br>\nThe <b>--match-limit</b> option provides a means of limiting computing resource\nusage when processing patterns that are not going to match, but which have a\nvery large number of possibilities in their search trees. The classic example\nis a pattern that uses nested unlimited repeats. Internally, PCRE2 has a\ncounter that is incremented each time around its main processing loop. If the\nvalue set by <b>--match-limit</b> is reached, an error occurs.\n<br>\n<br>\nThe <b>--heap-limit</b> option specifies, as a number of kibibytes (units of\n1024 bytes), the maximum amount of heap memory that may be used for matching.\n<br>\n<br>\nThe <b>--depth-limit</b> option limits the depth of nested backtracking points,\nwhich indirectly limits the amount of memory that is used. The amount of memory\nneeded for each backtracking point depends on the number of capturing\nparentheses in the pattern, so the amount of memory that is used before this\nlimit acts varies from pattern to pattern. This limit is of use only if it is\nset smaller than <b>--match-limit</b>.\n<br>\n<br>\nThere are no short forms for these options. The default limits can be set\nwhen the PCRE2 library is compiled; if they are not specified, the defaults\nare very large and so effectively unlimited.\n</p>\n<p>\n<b>--max-buffer-size</b>=<i>number</i>\nThis limits the expansion of the processing buffer, whose initial size can be\nset by <b>--buffer-size</b>. The maximum buffer size is silently forced to be no\nsmaller than the starting buffer size.\n</p>\n<p>\n<b>-N</b> <i>newline-type</i>, <b>--newline</b>=<i>newline-type</i>\nSix different conventions for indicating the ends of lines in scanned files are\nsupported. For example:\n<pre>\n  pcre2grep -N CRLF 'some pattern' &#60;file&#62;\n</pre>\nThe newline type may be specified in upper, lower, or mixed case. If the\nnewline type is NUL, lines are separated by binary zero characters. The other\ntypes are the single-character sequences CR (carriage return) and LF\n(linefeed), the two-character sequence CRLF, an \"anycrlf\" type, which\nrecognizes any of the preceding three types, and an \"any\" type, for which any\nUnicode line ending sequence is assumed to end a line. The Unicode sequences\nare the three just mentioned, plus VT (vertical tab, U+000B), FF (form feed,\nU+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS\n(paragraph separator, U+2029).\n<br>\n<br>\nWhen the PCRE2 library is built, a default line-ending sequence is specified.\nThis is normally the standard sequence for the operating system. Unless\notherwise specified by this option, <b>pcre2grep</b> uses the library's default.\n<br>\n<br>\nThis option makes it possible to use <b>pcre2grep</b> to scan files that have\ncome from other environments without having to modify their line endings. If\nthe data that is being scanned does not agree with the convention set by this\noption, <b>pcre2grep</b> may behave in strange ways. Note that this option does\nnot apply to files specified by the <b>-f</b>, <b>--exclude-from</b>, or\n<b>--include-from</b> options, which are expected to use the operating system's\nstandard newline sequence.\n</p>\n<p>\n<b>-n</b>, <b>--line-number</b>\nPrecede each output line by its line number in the file, followed by a colon\nfor matching lines or a hyphen for context lines. If the file name is also\nbeing output, it precedes the line number. When the <b>-M</b> option causes a\npattern to match more than one line, only the first is preceded by its line\nnumber. This option is forced if <b>--line-offsets</b> is used.\n</p>\n<p>\n<b>--no-group-separator</b>\nDo not output a separator between groups of lines when <b>-A</b>, <b>-B</b>, or\n<b>-C</b> is in use. The default is to output a line containing two hyphens. See\nalso <b>--group-separator</b>.\n</p>\n<p>\n<b>--no-jit</b>\nIf the PCRE2 library is built with support for just-in-time compiling (which\nspeeds up matching), <b>pcre2grep</b> automatically makes use of this, unless it\nwas explicitly disabled at build time. This option can be used to disable the\nuse of JIT at run time. It is provided for testing and working around problems.\nIt should never be needed in normal use.\n</p>\n<p>\n<b>-O</b> <i>text</i>, <b>--output</b>=<i>text</i>\nWhen there is a match, instead of outputting the line that matched, output just\nthe text specified in this option, followed by an operating-system standard\nnewline. In this mode, <b>--colour</b> has no effect, and no context is shown.\nThat is, the <b>-A</b>, <b>-B</b>, and <b>-C</b> options are ignored. The\n<b>--newline</b> option has no effect on this option, which is mutually\nexclusive with <b>--only-matching</b>, <b>--file-offsets</b>, and\n<b>--line-offsets</b>. However, like <b>--only-matching</b>, if there is more\nthan one match in a line, each of them causes a line of output.\n<br>\n<br>\nEscape sequences starting with a dollar character may be used to insert the\ncontents of the matched part of the line and/or captured substrings into the\ntext.\n<br>\n<br>\n$&#60;digits&#62; or ${&#60;digits&#62;} is replaced by the captured substring of the given\ndecimal number; $& (or the legacy $0) substitutes the whole match. If the\nnumber is greater than the number of capturing substrings, or if the capture\nis unset, the replacement is empty.\n<br>\n<br>\n$a is replaced by bell; $b by backspace; $e by escape; $f by form feed; $n by\nnewline; $r by carriage return; $t by tab; $v by vertical tab.\n<br>\n<br>\n$o&#60;digits&#62; or $o{&#60;digits&#62;} is replaced by the character whose code point is the\ngiven octal number. In the first form, up to three octal digits are processed.\nWhen more digits are needed in Unicode mode to specify a wide character, the\nsecond form must be used.\n<br>\n<br>\n$x&#60;digits&#62; or $x{&#60;digits&#62;} is replaced by the character represented by the\ngiven hexadecimal number. In the first form, up to two hexadecimal digits are\nprocessed. When more digits are needed in Unicode mode to specify a wide\ncharacter, the second form must be used.\n<br>\n<br>\nAny other character is substituted by itself. In particular, $$ is replaced by\na single dollar.\n</p>\n<p>\n<b>-o</b>, <b>--only-matching</b>\nShow only the part of the line that matched a pattern instead of the whole\nline. In this mode, no context is shown. That is, the <b>-A</b>, <b>-B</b>, and\n<b>-C</b> options are ignored. If there is more than one match in a line, each\nof them is shown separately, on a separate line of output. If <b>-o</b> is\ncombined with <b>-v</b> (invert the sense of the match to find non-matching\nlines), no output is generated, but the return code is set appropriately. If\nthe matched portion of the line is empty, nothing is output unless the file\nname or line number are being printed, in which case they are shown on an\notherwise empty line. This option is mutually exclusive with <b>--output</b>,\n<b>--file-offsets</b> and <b>--line-offsets</b>.\n</p>\n<p>\n<b>-o</b><i>number</i>, <b>--only-matching</b>=<i>number</i>\nShow only the part of the line that matched the capturing parentheses of the\ngiven number. Up to 50 capturing parentheses are supported by default. This\nlimit can be changed via the <b>--om-capture</b> option. A pattern may contain\nany number of capturing parentheses, but only those whose number is within the\nlimit can be accessed by <b>-o</b>. An error occurs if the number specified by\n<b>-o</b> is greater than the limit.\n<br>\n<br>\n-o0 is the same as <b>-o</b> without a number. Because these options can be\ngiven without an argument (see above), if an argument is present, it must be\ngiven in the same shell item, for example, -o3 or --only-matching=2. The\ncomments given for the non-argument case above also apply to this option. If\nthe specified capturing parentheses do not exist in the pattern, or were not\nset in the match, nothing is output unless the file name or line number are\nbeing output.\n<br>\n<br>\nIf this option is given multiple times, multiple substrings are output for each\nmatch, in the order the options are given, and all on one line. For example,\n-o3 -o1 -o3 causes the substrings matched by capturing parentheses 3 and 1 and\nthen 3 again to be output. By default, there is no separator (but see the next\nbut one option).\n</p>\n<p>\n<b>--om-capture</b>=<i>number</i>\nSet the number of capturing parentheses that can be accessed by <b>-o</b>. The\ndefault is 50.\n</p>\n<p>\n<b>--om-separator</b>=<i>text</i>\nSpecify a separating string for multiple occurrences of <b>-o</b>. The default\nis an empty string. Separating strings are never coloured.\n</p>\n<p>\n<b>-P</b>, <b>--no-ucp</b>\nStarting from release 10.43, when UTF/Unicode mode is specified with <b>-u</b>\nor <b>-U</b>, the PCRE2_UCP option is used by default. This means that the\nPOSIX classes in patterns match more than just ASCII characters. For example,\n[:digit:] matches any Unicode decimal digit. The <b>--no-ucp</b> option\nsuppresses PCRE2_UCP, thus restricting the POSIX classes to ASCII characters,\nas was the case in earlier releases. Note that there are now more fine-grained\noption settings within patterns that affect individual classes. For example,\nwhen in UCP mode, the sequence (?aP) restricts [:word:] to ASCII letters, while\nallowing \\w to match Unicode letters and digits.\n</p>\n<p>\n<b>--posix-pattern-file</b>\nWhen patterns are provided with the <b>-f</b> option, do not trim trailing\nspaces or ignore empty lines in a similar way than other grep tools. To keep\nthe behaviour consistent with older versions, if the pattern read was\nterminated with CRLF (as character literals) then both characters won't be\nincluded as part of it, so if you really need to have pattern ending in '\\r',\nuse a escape sequence or provide it by a different method.\n</p>\n<p>\n<b>-q</b>, <b>--quiet</b>\nWork quietly, that is, display nothing except error messages. The exit\nstatus indicates whether or not any matches were found.\n</p>\n<p>\n<b>-r</b>, <b>--recursive</b>\nIf any given path is a directory, recursively scan the files it contains,\ntaking note of any <b>--include</b> and <b>--exclude</b> settings. By default, a\ndirectory is read as a normal file; in some operating systems this gives an\nimmediate end-of-file. This option is a shorthand for setting the <b>-d</b>\noption to \"recurse\".\n</p>\n<p>\n<b>--recursion-limit</b>=<i>number</i>\nThis is an obsolete synonym for <b>--depth-limit</b>. See <b>--match-limit</b>\nabove for details.\n</p>\n<p>\n<b>-s</b>, <b>--no-messages</b>\nSuppress error messages about non-existent or unreadable files. Such files are\nquietly skipped. However, the return code is still 2, even if matches were\nfound in other files.\n</p>\n<p>\n<b>-t</b>, <b>--total-count</b>\nThis option is useful when scanning more than one file. If used on its own,\n<b>-t</b> suppresses all output except for a grand total number of matching\nlines (or non-matching lines if <b>-v</b> is used) in all the files. If <b>-t</b>\nis used with <b>-c</b>, a grand total is output except when the previous output\nis just one line. In other words, it is not output when just one file's count\nis listed. If file names are being output, the grand total is preceded by\n\"TOTAL:\". Otherwise, it appears as just another number. The <b>-t</b> option is\nignored when used with <b>-L</b> (list files without matches), because the grand\ntotal would always be zero.\n</p>\n<p>\n<b>-u</b>, <b>--utf</b>\nOperate in UTF/Unicode mode. This option is available only if PCRE2 has been\ncompiled with UTF-8 support. All patterns (including those for any\n<b>--exclude</b> and <b>--include</b> options) and all lines that are scanned\nmust be valid strings of UTF-8 characters. If an invalid UTF-8 string is\nencountered, an error occurs.\n</p>\n<p>\n<b>-U</b>, <b>--utf-allow-invalid</b>\nAs <b>--utf</b>, but in addition subject lines may contain invalid UTF-8 code\nunit sequences. These can never form part of any pattern match. Patterns\nthemselves, however, must still be valid UTF-8 strings. This facility allows\nvalid UTF-8 strings to be sought within arbitrary byte sequences in executable\nor other binary files. For more details about matching in non-valid UTF-8\nstrings, see the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b>(3)</a>\ndocumentation.\n</p>\n<p>\n<b>-V</b>, <b>--version</b>\nWrite the version numbers of <b>pcre2grep</b> and the PCRE2 library to the\nstandard output and then exit. Anything else on the command line is\nignored.\n</p>\n<p>\n<b>-v</b>, <b>--invert-match</b>\nInvert the sense of the match, so that lines which do <i>not</i> match any of\nthe patterns are the ones that are found. When this option is set, options such\nas <b>--only-matching</b> and <b>--output</b>, which specify parts of a match\nthat are to be output, are ignored.\n</p>\n<p>\n<b>-w</b>, <b>--word-regex</b>, <b>--word-regexp</b>\nForce the patterns only to match \"words\". That is, there must be a word\nboundary at the start and end of each matched string. This is equivalent to\nhaving \"\\b(?:\" at the start of each pattern, and \")\\b\" at the end. This\noption applies only to the patterns that are matched against the contents of\nfiles; it does not apply to patterns specified by any of the <b>--include</b> or\n<b>--exclude</b> options.\n</p>\n<p>\n<b>-x</b>, <b>--line-regex</b>, <b>--line-regexp</b>\nForce the patterns to start matching only at the beginnings of lines, and in\naddition, require them to match entire lines. In multiline mode the match may\nbe more than one line. This is equivalent to having \"^(?:\" at the start of each\npattern and \")$\" at the end. This option applies only to the patterns that are\nmatched against the contents of files; it does not apply to patterns specified\nby any of the <b>--include</b> or <b>--exclude</b> options.\n</p>\n<p>\n<b>-Z</b>, <b>--null</b>\nTerminate files names in the regular output with a zero byte (the NUL\ncharacter) instead of what would normally appear. This is useful when file\nnames contain unusual characters such as colons, hyphens, or even newlines. The\noption does not apply to file names in error messages.\n</p>\n<h2><a name=\"SEC7\" href=\"#TOC1\">ENVIRONMENT VARIABLES</a></h2>\n<p>\nThe environment variables <b>LC_ALL</b> and <b>LC_CTYPE</b> are examined, in that\norder, for a locale. The first one that is set is used. This can be overridden\nby the <b>--locale</b> option. If no locale is set, the PCRE2 library's default\n(usually the \"C\" locale) is used.\n</p>\n<h2><a name=\"SEC8\" href=\"#TOC1\">NEWLINES</a></h2>\n<p>\nThe <b>-N</b> (<b>--newline</b>) option allows <b>pcre2grep</b> to scan files with\nnewline conventions that differ from the default. This option affects only the\nway scanned files are processed. It does not affect the interpretation of files\nspecified by the <b>-f</b>, <b>--file-list</b>, <b>--exclude-from</b>, or\n<b>--include-from</b> options.\n</p>\n<p>\nAny parts of the scanned input files that are written to the standard output\nare copied with whatever newline sequences they have in the input. However, if\nthe final line of a file is output, and it does not end with a newline\nsequence, a newline sequence is added. If the newline setting is CR, LF, CRLF\nor NUL, that line ending is output; for the other settings (ANYCRLF or ANY) a\nsingle NL is used.\n</p>\n<p>\nThe newline setting does not affect the way in which <b>pcre2grep</b> writes\nnewlines in informational messages to the standard output and error streams.\nUnder Windows, the standard output is set to be binary, so that \"\\r\\n\" at the\nends of output lines that are copied from the input is not converted to\n\"\\r\\r\\n\" by the C I/O library. This means that any messages written to the\nstandard output must end with \"\\r\\n\". For all other operating systems, and\nfor all messages to the standard error stream, \"\\n\" is used.\n</p>\n<h2><a name=\"SEC9\" href=\"#TOC1\">OPTIONS COMPATIBILITY WITH GNU GREP</a></h2>\n<p>\nMany of the short and long forms of <b>pcre2grep</b>'s options are the same as\nin the GNU <b>grep</b> program. Any long option of the form <b>--xxx-regexp</b>\n(GNU terminology) is also available as <b>--xxx-regex</b> (PCRE2 terminology).\nHowever, the <b>--case-restrict</b>, <b>--depth-limit</b>, <b>-E</b>,\n<b>--file-list</b>, <b>--file-offsets</b>, <b>--heap-limit</b>,\n<b>--include-dir</b>, <b>--line-offsets</b>, <b>--locale</b>, <b>--match-limit</b>,\n<b>-M</b>, <b>--multiline</b>, <b>-N</b>, <b>--newline</b>, <b>--no-ucp</b>,\n<b>--om-separator</b>, <b>--output</b>, <b>-P</b>, <b>-u</b>, <b>--utf</b>,\n<b>-U</b>, and <b>--utf-allow-invalid</b> options are specific to\n<b>pcre2grep</b>, as is the use of the <b>--only-matching</b> option with a\ncapturing parentheses number.\n</p>\n<p>\nAlthough most of the common options work the same way, a few are different in\n<b>pcre2grep</b>. For example, the <b>--include</b> option's argument is a glob\nfor GNU <b>grep</b>, but in <b>pcre2grep</b> it is a regular expression to which\nthe <b>-i</b> option applies. If both the <b>-c</b> and <b>-l</b> options are\ngiven, GNU grep lists only file names, without counts, but <b>pcre2grep</b>\ngives the counts as well.\n</p>\n<h2><a name=\"SEC10\" href=\"#TOC1\">OPTIONS WITH DATA</a></h2>\n<p>\nThere are four different ways in which an option with data can be specified.\nIf a short form option is used, the data may follow immediately, or (with one\nexception) in the next command line item. For example:\n<pre>\n  -f/some/file\n  -f /some/file\n</pre>\nThe exception is the <b>-o</b> option, which may appear with or without data.\nBecause of this, if data is present, it must follow immediately in the same\nitem, for example -o3.\n</p>\n<p>\nIf a long form option is used, the data may appear in the same command line\nitem, separated by an equals character, or (with two exceptions) it may appear\nin the next command line item. For example:\n<pre>\n  --file=/some/file\n  --file /some/file\n</pre>\nNote, however, that if you want to supply a file name beginning with ~ as data\nin a shell command, and have the shell expand ~ to a home directory, you must\nseparate the file name from the option, because the shell does not treat ~\nspecially unless it is at the start of an item.\n</p>\n<p>\nThe exceptions to the above are the <b>--colour</b> (or <b>--color</b>) and\n<b>--only-matching</b> options, for which the data is optional. If one of these\noptions does have data, it must be given in the first form, using an equals\ncharacter. Otherwise <b>pcre2grep</b> will assume that it has no data.\n</p>\n<h2><a name=\"SEC11\" href=\"#TOC1\">USING PCRE2'S CALLOUT FACILITY</a></h2>\n<p>\n<b>pcre2grep</b> has, by default, support for calling external programs or\nscripts or echoing specific strings during matching by making use of PCRE2's\ncallout facility. However, this support can be completely or partially disabled\nwhen <b>pcre2grep</b> is built. You can find out whether your binary has support\nfor callouts by running it with the <b>--help</b> option. If callout support is\ncompletely disabled, callouts in patterns are forbidden by <b>pcre2grep</b>.\nIf the facility is partially disabled, calling external programs is not\nsupported, and callouts that request it are ignored.\n</p>\n<p>\nA callout in a PCRE2 pattern is of the form (?C&#60;arg&#62;) where the argument is\neither a number or a quoted string (see the\n<a href=\"pcre2callout.html\"><b>pcre2callout</b></a>\ndocumentation for details). Numbered callouts are ignored by <b>pcre2grep</b>;\nonly callouts with string arguments are useful.\n</p>\n<h3>\nEchoing a specific string\n</h3>\n<p>\nStarting the callout string with a pipe character invokes an echoing facility\nthat avoids calling an external program or script. This facility is always\navailable, provided that callouts were not completely disabled when\n<b>pcre2grep</b> was built. The rest of the callout string is processed as a\nzero-terminated string, which means it should not contain any internal binary\nzeros. It is written to the output, having first been passed through the same\nescape processing as text from the <b>--output</b> (<b>-O</b>) option (see\nabove). However, $0 or $& cannot be used to insert a matched substring because\nthe match is still in progress. Instead, the single character '0' is inserted.\nAny syntax errors in the string (for example, a dollar not followed by another\ncharacter) causes the callout to be ignored. No terminator is added to the\noutput string, so if you want a newline, you must include it explicitly using\nthe escape $n. For example:\n<pre>\n  pcre2grep '(.)(..(.))(?C\"|[$1] [$2] [$3]$n\")' &#60;some file&#62;\n</pre>\nMatching continues normally after the string is output. If you want to see only\nthe callout output but not any output from an actual match, you should end the\npattern with (*FAIL).\n</p>\n<h3>\nCalling external programs or scripts\n</h3>\n<p>\nThis facility can be independently disabled when <b>pcre2grep</b> is built. It\nis supported for Windows, where a call to <b>_spawnvp()</b> is used, for VMS,\nwhere <b>lib$spawn()</b> is used, and for any Unix-like environment where\n<b>fork()</b> and <b>execv()</b> are available.\n</p>\n<p>\nIf the callout string does not start with a pipe (vertical bar) character, it\nis parsed into a list of substrings separated by pipe characters. The first\nsubstring must be an executable name, with the following substrings specifying\narguments:\n<pre>\n  executable_name|arg1|arg2|...\n</pre>\nAny substring (including the executable name) may contain escape sequences\nstarted by a dollar character. These are the same as for the <b>--output</b>\n(<b>-O</b>) option documented above, except that $0 or $& cannot insert the\nmatched string because the match is still in progress. Instead, the character\n'0' is inserted. If you need a literal dollar or pipe character in any\nsubstring, use $$ or $| respectively. Here is an example:\n<pre>\n  echo -e \"abcde\\n12345\" | pcre2grep \\\n    '(?x)(.)(..(.))\n    (?C\"/bin/echo|Arg1: [$1] [$2] [$3]|Arg2: $|${1}$| ($4)\")()' -\n\n  Output:\n\n    Arg1: [a] [bcd] [d] Arg2: |a| ()\n    abcde\n    Arg1: [1] [234] [4] Arg2: |1| ()\n    12345\n</pre>\nThe parameters for the system call that is used to run the program or script\nare zero-terminated strings. This means that binary zero characters in the\ncallout argument will cause premature termination of their substrings, and\ntherefore should not be present. Any syntax errors in the string (for example,\na dollar not followed by another character) causes the callout to be ignored.\nIf running the program fails for any reason (including the non-existence of the\nexecutable), a local matching failure occurs and the matcher backtracks in the\nnormal way.\n</p>\n<h2><a name=\"SEC12\" href=\"#TOC1\">MATCHING ERRORS</a></h2>\n<p>\nIt is possible to supply a regular expression that takes a very long time to\nfail to match certain lines. Such patterns normally involve nested indefinite\nrepeats, for example: (a+)*\\d when matched against a line of a's with no final\ndigit. The PCRE2 matching function has a resource limit that causes it to abort\nin these circumstances. If this happens, <b>pcre2grep</b> outputs an error\nmessage and the line that caused the problem to the standard error stream. If\nthere are more than 20 such errors, <b>pcre2grep</b> gives up.\n</p>\n<p>\nThe <b>--match-limit</b> option of <b>pcre2grep</b> can be used to set the\noverall resource limit. There are also other limits that affect the amount of\nmemory used during matching; see the discussion of <b>--heap-limit</b> and\n<b>--depth-limit</b> above.\n</p>\n<h2><a name=\"SEC13\" href=\"#TOC1\">DIAGNOSTICS</a></h2>\n<p>\nExit status is 0 if any matches were found, 1 if no matches were found, and 2\nfor syntax errors, overlong lines, non-existent or inaccessible files (even if\nmatches were found in other files) or too many matching errors. Using the\n<b>-s</b> option to suppress error messages about inaccessible files does not\naffect the return code.\n</p>\n<p>\nWhen run under VMS, the return code is placed in the symbol PCRE2GREP_RC\nbecause VMS does not distinguish between exit(0) and exit(1).\n</p>\n<h2><a name=\"SEC14\" href=\"#TOC1\">SEE ALSO</a></h2>\n<p>\n<b>pcre2pattern</b>(3), <b>pcre2syntax</b>(3), <b>pcre2callout</b>(3),\n<b>pcre2unicode</b>(3).\n</p>\n<h2><a name=\"SEC15\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC16\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 24 January 2025\n<br>\nCopyright &copy; 1997-2023 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2jit.html",
    "content": "<html>\n<head>\n<title>pcre2jit specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2jit man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">PCRE2 JUST-IN-TIME COMPILER SUPPORT</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">AVAILABILITY OF JIT SUPPORT</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">SIMPLE USE OF JIT</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">MATCHING SUBJECTS CONTAINING INVALID UTF</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">UNSUPPORTED OPTIONS AND PATTERN ITEMS</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">RETURN VALUES FROM JIT MATCHING</a>\n<li><a name=\"TOC7\" href=\"#SEC7\">CONTROLLING THE JIT STACK</a>\n<li><a name=\"TOC8\" href=\"#SEC8\">JIT STACK FAQ</a>\n<li><a name=\"TOC9\" href=\"#SEC9\">FREEING JIT SPECULATIVE MEMORY</a>\n<li><a name=\"TOC10\" href=\"#SEC10\">EXAMPLE CODE</a>\n<li><a name=\"TOC11\" href=\"#SEC11\">JIT FAST PATH API</a>\n<li><a name=\"TOC12\" href=\"#SEC12\">SEE ALSO</a>\n<li><a name=\"TOC13\" href=\"#SEC13\">AUTHOR</a>\n<li><a name=\"TOC14\" href=\"#SEC14\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">PCRE2 JUST-IN-TIME COMPILER SUPPORT</a></h2>\n<p>\nJust-in-time compiling is a heavyweight optimization that can greatly speed up\npattern matching. However, it comes at the cost of extra processing before the\nmatch is performed, so it is of most benefit when the same pattern is going to\nbe matched many times. This does not necessarily mean many calls of a matching\nfunction; if the pattern is not anchored, matching attempts may take place many\ntimes at various positions in the subject, even for a single call. Therefore,\nif the subject string is very long, it may still pay to use JIT even for\none-off matches. JIT support is available for all of the 8-bit, 16-bit and\n32-bit PCRE2 libraries.\n</p>\n<p>\nJIT support applies only to the traditional Perl-compatible matching function.\nIt does not apply when the DFA matching function is being used. The code for\nJIT support was written by Zoltan Herczeg.\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">AVAILABILITY OF JIT SUPPORT</a></h2>\n<p>\nJIT support is an optional feature of PCRE2. The \"configure\" option\n--enable-jit (or equivalent CMake option) must be set when PCRE2 is built if\nyou want to use JIT. The support is limited to the following hardware\nplatforms:\n<pre>\n  ARM 32-bit (v7, and Thumb2)\n  ARM 64-bit\n  IBM s390x 64 bit\n  Intel x86 32-bit and 64-bit\n  LoongArch 64 bit\n  MIPS 32-bit and 64-bit\n  Power PC 32-bit and 64-bit\n  RISC-V 32-bit and 64-bit\n</pre>\nIf --enable-jit is set on an unsupported platform, compilation fails.\n</p>\n<p>\nA client program can tell if JIT support has been compiled by calling\n<b>pcre2_config()</b> with the PCRE2_CONFIG_JIT option. The result is one if\nPCRE2 was built with JIT support, and zero otherwise. However, having the JIT\ncode available does not guarantee that it will be used for any particular\nmatch. One reason for this is that there are a number of options and pattern\nitems that are\n<a href=\"#unsupported\">not supported by JIT</a>\n(see below). Another reason is that in some environments JIT is unable to get\nexecutable memory in which to build its compiled code. The only guarantee from\n<b>pcre2_config()</b> is that if it returns zero, JIT will definitely <i>not</i>\nbe used.\n</p>\n<p>\nAs of release 10.45 there is a more informative way to test for JIT support. If\n<b>pcre2_compile_jit()</b> is called with the single option PCRE2_JIT_TEST_ALLOC\nit returns zero if JIT is available and has a working allocator. Otherwise it\nreturns PCRE2_ERROR_NOMEMORY if JIT is available but cannot allocate executable\nmemory, or PCRE2_ERROR_JIT_UNSUPPORTED if JIT support is not compiled. The\ncode argument is ignored, so it can be a NULL value.\n</p>\n<p>\nA simple program does not need to check availability in order to use JIT when\npossible. The API is implemented in a way that falls back to the interpretive\ncode if JIT is not available or cannot be used for a given match. For programs\nthat need the best possible performance, there is a\n<a href=\"#fastpath\">\"fast path\"</a>\nAPI that is JIT-specific.\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">SIMPLE USE OF JIT</a></h2>\n<p>\nTo make use of the JIT support in the simplest way, all you have to do is to\ncall <b>pcre2_jit_compile()</b> after successfully compiling a pattern with\n<b>pcre2_compile()</b>. This function has two arguments: the first is the\ncompiled pattern pointer that was returned by <b>pcre2_compile()</b>, and the\nsecond is zero or more of the following option bits: PCRE2_JIT_COMPLETE,\nPCRE2_JIT_PARTIAL_HARD, or PCRE2_JIT_PARTIAL_SOFT.\n</p>\n<p>\nIf JIT support is not available, a call to <b>pcre2_jit_compile()</b> does\nnothing and returns PCRE2_ERROR_JIT_BADOPTION. Otherwise, the compiled pattern\nis passed to the JIT compiler, which turns it into machine code that executes\nmuch faster than the normal interpretive code, but yields exactly the same\nresults. The returned value from <b>pcre2_jit_compile()</b> is zero on success,\nor a negative error code.\n</p>\n<p>\nThere is a limit to the size of pattern that JIT supports, imposed by the size\nof machine stack that it uses. The exact rules are not documented because they\nmay change at any time, in particular, when new optimizations are introduced.\nIf a pattern is too big, a call to <b>pcre2_jit_compile()</b> returns\nPCRE2_ERROR_NOMEMORY.\n</p>\n<p>\nPCRE2_JIT_COMPLETE requests the JIT compiler to generate code for complete\nmatches. If you want to run partial matches using the PCRE2_PARTIAL_HARD or\nPCRE2_PARTIAL_SOFT options of <b>pcre2_match()</b>, you should set one or both\nof the other options as well as, or instead of PCRE2_JIT_COMPLETE. The JIT\ncompiler generates different optimized code for each of the three modes\n(normal, soft partial, hard partial). When <b>pcre2_match()</b> is called, the\nappropriate code is run if it is available. Otherwise, the pattern is matched\nusing interpretive code.\n</p>\n<p>\nYou can call <b>pcre2_jit_compile()</b> multiple times for the same compiled\npattern. It does nothing if it has previously compiled code for any of the\noption bits. For example, you can call it once with PCRE2_JIT_COMPLETE and\n(perhaps later, when you find you need partial matching) again with\nPCRE2_JIT_COMPLETE and PCRE2_JIT_PARTIAL_HARD. This time it will ignore\nPCRE2_JIT_COMPLETE and just compile code for partial matching. If\n<b>pcre2_jit_compile()</b> is called with no option bits set, it immediately\nreturns zero. This is an alternative way of testing whether JIT support has\nbeen compiled.\n</p>\n<p>\nAt present, it is not possible to free JIT compiled code except when the entire\ncompiled pattern is freed by calling <b>pcre2_code_free()</b>.\n</p>\n<p>\nIn some circumstances you may need to call additional functions. These are\ndescribed in the section entitled\n<a href=\"#stackcontrol\">\"Controlling the JIT stack\"</a>\nbelow.\n</p>\n<p>\nThere are some <b>pcre2_match()</b> options that are not supported by JIT, and\nthere are also some pattern items that JIT cannot handle. Details are given\n<a href=\"#unsupported\">below.</a>\nIn both cases, matching automatically falls back to the interpretive code. If\nyou want to know whether JIT was actually used for a particular match, you\nshould arrange for a JIT callback function to be set up as described in the\nsection entitled\n<a href=\"#stackcontrol\">\"Controlling the JIT stack\"</a>\nbelow, even if you do not need to supply a non-default JIT stack. Such a\ncallback function is called whenever JIT code is about to be obeyed. If the\nmatch-time options are not right for JIT execution, the callback function is\nnot obeyed.\n</p>\n<p>\nIf the JIT compiler finds an unsupported item, no JIT data is generated. You\ncan find out if JIT compilation was successful for a compiled pattern by\ncalling <b>pcre2_pattern_info()</b> with the PCRE2_INFO_JITSIZE option. A\nnon-zero result means that JIT compilation was successful. A result of 0 means\nthat JIT support is not available, or the pattern was not processed by\n<b>pcre2_jit_compile()</b>, or the JIT compiler was not able to handle the\npattern. Successful JIT compilation does not, however, guarantee the use of JIT\nat match time because there are some match time options that are not supported\nby JIT.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">MATCHING SUBJECTS CONTAINING INVALID UTF</a></h2>\n<p>\nWhen a pattern is compiled with the PCRE2_UTF option, subject strings are\nnormally expected to be a valid sequence of UTF code units. By default, this is\nchecked at the start of matching and an error is generated if invalid UTF is\ndetected. The PCRE2_NO_UTF_CHECK option can be passed to <b>pcre2_match()</b> to\nskip the check (for improved performance) if you are sure that a subject string\nis valid. If this option is used with an invalid string, the result is\nundefined. The calling program may crash or loop or otherwise misbehave.\n</p>\n<p>\nHowever, a way of running matches on strings that may contain invalid UTF\nsequences is available. Calling <b>pcre2_compile()</b> with the\nPCRE2_MATCH_INVALID_UTF option has two effects: it tells the interpreter in\n<b>pcre2_match()</b> to support invalid UTF, and, if <b>pcre2_jit_compile()</b>\nis subsequently called, the compiled JIT code also supports invalid UTF.\nDetails of how this support works, in both the JIT and the interpretive cases,\nis given in the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\ndocumentation.\n</p>\n<p>\nThere is also an obsolete option for <b>pcre2_jit_compile()</b> called\nPCRE2_JIT_INVALID_UTF, which currently exists only for backward compatibility.\nIt is superseded by the <b>pcre2_compile()</b> option PCRE2_MATCH_INVALID_UTF\nand should no longer be used. It may be removed in future.\n<a name=\"unsupported\"></a></p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">UNSUPPORTED OPTIONS AND PATTERN ITEMS</a></h2>\n<p>\nThe <b>pcre2_match()</b> options that are supported for JIT matching are\nPCRE2_COPY_MATCHED_SUBJECT, PCRE2_NOTBOL, PCRE2_NOTEOL, PCRE2_NOTEMPTY,\nPCRE2_NOTEMPTY_ATSTART, PCRE2_NO_UTF_CHECK, PCRE2_PARTIAL_HARD, and\nPCRE2_PARTIAL_SOFT. The PCRE2_ANCHORED and PCRE2_ENDANCHORED options are not\nsupported at match time.\n</p>\n<p>\nIf the PCRE2_NO_JIT option is passed to <b>pcre2_match()</b> it disables the\nuse of JIT, forcing matching by the interpreter code.\n</p>\n<p>\nThe only unsupported pattern items are \\C (match a single data unit) when\nrunning in a UTF mode, and a callout immediately before an assertion condition\nin a conditional group.\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">RETURN VALUES FROM JIT MATCHING</a></h2>\n<p>\nWhen a pattern is matched using JIT, the return values are the same as those\ngiven by the interpretive <b>pcre2_match()</b> code, with the addition of one\nnew error code: PCRE2_ERROR_JIT_STACKLIMIT. This means that the memory used for\nthe JIT stack was insufficient. See\n<a href=\"#stackcontrol\">\"Controlling the JIT stack\"</a>\nbelow for a discussion of JIT stack usage.\n</p>\n<p>\nThe error code PCRE2_ERROR_MATCHLIMIT is returned by the JIT code if searching\na very large pattern tree goes on for too long, as it is in the same\ncircumstance when JIT is not used, but the details of exactly what is counted\nare not the same. The PCRE2_ERROR_DEPTHLIMIT error code is never returned\nwhen JIT matching is used.\n<a name=\"stackcontrol\"></a></p>\n<h2><a name=\"SEC7\" href=\"#TOC1\">CONTROLLING THE JIT STACK</a></h2>\n<p>\nWhen the compiled JIT code runs, it needs a block of memory to use as a stack.\nBy default, it uses 32KiB on the machine stack. However, some large or\ncomplicated patterns need more than this. The error PCRE2_ERROR_JIT_STACKLIMIT\nis given when there is not enough stack. Three functions are provided for\nmanaging blocks of memory for use as JIT stacks. There is further discussion\nabout the use of JIT stacks in the section entitled\n<a href=\"#stackfaq\">\"JIT stack FAQ\"</a>\nbelow.\n</p>\n<p>\nThe <b>pcre2_jit_stack_create()</b> function creates a JIT stack. Its arguments\nare a starting size, a maximum size, and a general context (for memory\nallocation functions, or NULL for standard memory allocation). It returns a\npointer to an opaque structure of type <b>pcre2_jit_stack</b>, or NULL if there\nis an error. The <b>pcre2_jit_stack_free()</b> function is used to free a stack\nthat is no longer needed. If its argument is NULL, this function returns\nimmediately, without doing anything. (For the technically minded: the address\nspace is allocated by mmap or VirtualAlloc.) A maximum stack size of 512KiB to\n1MiB should be more than enough for any pattern.\n</p>\n<p>\nThe <b>pcre2_jit_stack_assign()</b> function specifies which stack JIT code\nshould use. Its arguments are as follows:\n<pre>\n  pcre2_match_context  *mcontext\n  pcre2_jit_callback    callback\n  void                 *data\n</pre>\nThe first argument is a pointer to a match context. When this is subsequently\npassed to a matching function, its information determines which JIT stack is\nused. If this argument is NULL, the function returns immediately, without doing\nanything. There are three cases for the values of the other two options:\n<pre>\n  (1) If <i>callback</i> is NULL and <i>data</i> is NULL, an internal 32KiB block\n      on the machine stack is used. This is the default when a match\n      context is created.\n\n  (2) If <i>callback</i> is NULL and <i>data</i> is not NULL, <i>data</i> must be\n      a pointer to a valid JIT stack, the result of calling\n      <b>pcre2_jit_stack_create()</b>.\n\n  (3) If <i>callback</i> is not NULL, it must point to a function that is\n      called with <i>data</i> as an argument at the start of matching, in\n      order to set up a JIT stack. If the return from the callback\n      function is NULL, the internal 32KiB stack is used; otherwise the\n      return value must be a valid JIT stack, the result of calling\n      <b>pcre2_jit_stack_create()</b>.\n</pre>\nA callback function is obeyed whenever JIT code is about to be run; it is not\nobeyed when <b>pcre2_match()</b> is called with options that are incompatible\nfor JIT matching. A callback function can therefore be used to determine\nwhether a match operation was executed by JIT or by the interpreter.\n</p>\n<p>\nYou may safely use the same JIT stack for more than one pattern (either by\nassigning directly or by callback), as long as the patterns are matched\nsequentially in the same thread. Currently, the only way to set up\nnon-sequential matches in one thread is to use callouts: if a callout function\nstarts another match, that match must use a different JIT stack to the one used\nfor currently suspended match(es).\n</p>\n<p>\nIn a multithread application, if you do not specify a JIT stack, or if you\nassign or pass back NULL from a callback, that is thread-safe, because each\nthread has its own machine stack. However, if you assign or pass back a\nnon-NULL JIT stack, this must be a different stack for each thread so that the\napplication is thread-safe.\n</p>\n<p>\nStrictly speaking, even more is allowed. You can assign the same non-NULL stack\nto a match context that is used by any number of patterns, as long as they are\nnot used for matching by multiple threads at the same time. For example, you\ncould use the same stack in all compiled patterns, with a global mutex in the\ncallback to wait until the stack is available for use. However, this is an\ninefficient solution, and not recommended.\n</p>\n<p>\nThis is a suggestion for how a multithreaded program that needs to set up\nnon-default JIT stacks might operate:\n<pre>\n  During thread initialization\n    thread_local_var = pcre2_jit_stack_create(...)\n\n  During thread exit\n    pcre2_jit_stack_free(thread_local_var)\n\n  Use a one-line callback function\n    return thread_local_var\n</pre>\nAll the functions described in this section do nothing if JIT is not available.\n<a name=\"stackfaq\"></a></p>\n<h2><a name=\"SEC8\" href=\"#TOC1\">JIT STACK FAQ</a></h2>\n<p>\n(1) Why do we need JIT stacks?\n<br>\n<br>\nPCRE2 (and JIT) is a recursive, depth-first engine, so it needs a stack where\nthe local data of the current node is pushed before checking its child nodes.\nAllocating real machine stack on some platforms is difficult. For example, the\nstack chain needs to be updated every time if we extend the stack on PowerPC.\nAlthough it is possible, its updating time overhead decreases performance. So\nwe do the recursion in memory.\n</p>\n<p>\n(2) Why don't we simply allocate blocks of memory with <b>malloc()</b>?\n<br>\n<br>\nModern operating systems have a nice feature: they can reserve an address space\ninstead of allocating memory. We can safely allocate memory pages inside this\naddress space, so the stack could grow without moving memory data (this is\nimportant because of pointers). Thus we can allocate 1MiB address space, and\nuse only a single memory page (usually 4KiB) if that is enough. However, we can\nstill grow up to 1MiB anytime if needed.\n</p>\n<p>\n(3) Who \"owns\" a JIT stack?\n<br>\n<br>\nThe owner of the stack is the user program, not the JIT studied pattern or\nanything else. The user program must ensure that if a stack is being used by\n<b>pcre2_match()</b>, (that is, it is assigned to a match context that is passed\nto the pattern currently running), that stack must not be used by any other\nthreads (to avoid overwriting the same memory area). The best practice for\nmultithreaded programs is to allocate a stack for each thread, and return this\nstack through the JIT callback function.\n</p>\n<p>\n(4) When should a JIT stack be freed?\n<br>\n<br>\nYou can free a JIT stack at any time, as long as it will not be used by\n<b>pcre2_match()</b> again. When you assign the stack to a match context, only a\npointer is set. There is no reference counting or any other magic. You can free\ncompiled patterns, contexts, and stacks in any order, anytime.\nJust <i>do not</i> call <b>pcre2_match()</b> with a match context pointing to an\nalready freed stack, as that will cause SEGFAULT. (Also, do not free a stack\ncurrently used by <b>pcre2_match()</b> in another thread). You can also replace\nthe stack in a context at any time when it is not in use. You should free the\nprevious stack before assigning a replacement.\n</p>\n<p>\n(5) Should I allocate/free a stack every time before/after calling\n<b>pcre2_match()</b>?\n<br>\n<br>\nNo, because this is too costly in terms of resources. However, you could\nimplement some clever idea which release the stack if it is not used in let's\nsay two minutes. The JIT callback can help to achieve this without keeping a\nlist of patterns.\n</p>\n<p>\n(6) OK, the stack is for long term memory allocation. But what happens if a\npattern causes stack overflow with a stack of 1MiB? Is that 1MiB kept until the\nstack is freed?\n<br>\n<br>\nEspecially on embedded systems, it might be a good idea to release memory\nsometimes without freeing the stack. There is no API for this at the moment.\nProbably a function call which returns with the currently allocated memory for\nany stack and another which allows releasing memory (shrinking the stack) would\nbe a good idea if someone needs this.\n</p>\n<p>\n(7) This is too much of a headache. Isn't there any better solution for JIT\nstack handling?\n<br>\n<br>\nNo, thanks to Windows. If POSIX threads were used everywhere, we could throw\nout this complicated API.\n</p>\n<h2><a name=\"SEC9\" href=\"#TOC1\">FREEING JIT SPECULATIVE MEMORY</a></h2>\n<p>\n<b>void pcre2_jit_free_unused_memory(pcre2_general_context *<i>gcontext</i>);</b>\n</p>\n<p>\nThe JIT executable allocator does not free all memory when it is possible. It\nexpects new allocations, and keeps some free memory around to improve\nallocation speed. However, in low memory conditions, it might be better to free\nall possible memory. You can cause this to happen by calling\npcre2_jit_free_unused_memory(). Its argument is a general context, for custom\nmemory management, or NULL for standard memory management.\n</p>\n<h2><a name=\"SEC10\" href=\"#TOC1\">EXAMPLE CODE</a></h2>\n<p>\nThis is a single-threaded example that specifies a JIT stack without using a\ncallback. A real program should include error checking after all the function\ncalls.\n<pre>\n  int rc;\n  pcre2_code *re;\n  pcre2_match_data *match_data;\n  pcre2_match_context *mcontext;\n  pcre2_jit_stack *jit_stack;\n\n  re = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, 0,\n    &errornumber, &erroffset, NULL);\n  rc = pcre2_jit_compile(re, PCRE2_JIT_COMPLETE);\n  mcontext = pcre2_match_context_create(NULL);\n  jit_stack = pcre2_jit_stack_create(32*1024, 512*1024, NULL);\n  pcre2_jit_stack_assign(mcontext, NULL, jit_stack);\n  match_data = pcre2_match_data_create(re, 10);\n  rc = pcre2_match(re, subject, length, 0, 0, match_data, mcontext);\n  /* Process result */\n\n  pcre2_code_free(re);\n  pcre2_match_data_free(match_data);\n  pcre2_match_context_free(mcontext);\n  pcre2_jit_stack_free(jit_stack);\n\n<a name=\"fastpath\"></a></pre>\n</p>\n<h2><a name=\"SEC11\" href=\"#TOC1\">JIT FAST PATH API</a></h2>\n<p>\nBecause the API described above falls back to interpreted matching when JIT is\nnot available, it is convenient for programs that are written for general use\nin many environments. However, calling JIT via <b>pcre2_match()</b> does have a\nperformance impact. Programs that are written for use where JIT is known to be\navailable, and which need the best possible performance, can instead use a\n\"fast path\" API to call JIT matching directly instead of calling\n<b>pcre2_match()</b> (obviously only for patterns that have been successfully\nprocessed by <b>pcre2_jit_compile()</b>).\n</p>\n<p>\nThe fast path function is called <b>pcre2_jit_match()</b>, and it takes exactly\nthe same arguments as <b>pcre2_match()</b>. However, the subject string must be\nspecified with a length; PCRE2_ZERO_TERMINATED is not supported. Unsupported\noption bits (for example, PCRE2_ANCHORED and PCRE2_ENDANCHORED) are ignored, as\nis the PCRE2_NO_JIT option. The return values are also the same as for\n<b>pcre2_match()</b>, plus PCRE2_ERROR_JIT_BADOPTION if a matching mode (partial\nor complete) is requested that was not compiled.\n</p>\n<p>\nWhen you call <b>pcre2_match()</b>, as well as testing for invalid options, a\nnumber of other sanity checks are performed on the arguments. For example, if\nthe subject pointer is NULL but the length is non-zero, an immediate error is\ngiven. Also, unless PCRE2_NO_UTF_CHECK is set, a UTF subject string is tested\nfor validity. In the interests of speed, these checks do not happen on the JIT\nfast path. If invalid UTF data is passed when PCRE2_MATCH_INVALID_UTF was not\nset for <b>pcre2_compile()</b>, the result is undefined. The program may crash\nor loop or give wrong results. In the absence of PCRE2_MATCH_INVALID_UTF you\nshould call <b>pcre2_jit_match()</b> in UTF mode only if you are sure the\nsubject is valid.\n</p>\n<p>\nBypassing the sanity checks and the <b>pcre2_match()</b> wrapping can give\nspeedups of more than 10%.\n</p>\n<h2><a name=\"SEC12\" href=\"#TOC1\">SEE ALSO</a></h2>\n<p>\n<b>pcre2api</b>(3), <b>pcre2unicode</b>(3)\n</p>\n<h2><a name=\"SEC13\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel (FAQ by Zoltan Herczeg)\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC14\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 22 August 2024\n<br>\nCopyright &copy; 1997-2024 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2limits.html",
    "content": "<html>\n<head>\n<title>pcre2limits specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2limits man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nSIZE AND OTHER LIMITATIONS\n</h2>\n<p>\nThere are some size limitations in PCRE2 but it is hoped that they will never\nin practice be relevant.\n</p>\n<p>\nThe maximum size of a compiled pattern is approximately 64 thousand code units\nfor the 8-bit and 16-bit libraries if PCRE2 is compiled with the default\ninternal linkage size, which is 2 bytes for these libraries. If you want to\nprocess regular expressions that are truly enormous, you can compile PCRE2 with\nan internal linkage size of 3 or 4 (when building the 16-bit library, 3 is\nrounded up to 4). See the <b>README</b> file in the source distribution and the\n<a href=\"pcre2build.html\"><b>pcre2build</b></a>\ndocumentation for details. In these cases the limit is substantially larger.\nHowever, the speed of execution is slower. In the 32-bit library, the internal\nlinkage size is always 4.\n</p>\n<p>\nThe maximum length of a source pattern string is essentially unlimited; it is\nthe largest number a PCRE2_SIZE variable can hold. However, the program that\ncalls <b>pcre2_compile()</b> can specify a smaller limit.\n</p>\n<p>\nThe maximum length (in code units) of a subject string is one less than the\nlargest number a PCRE2_SIZE variable can hold. PCRE2_SIZE is an unsigned\ninteger type, usually defined as size_t. Its maximum value (that is\n~(PCRE2_SIZE)0) is reserved as a special indicator for zero-terminated strings\nand unset offsets.\n</p>\n<p>\nAll values in repeating quantifiers must be less than 65536.\n</p>\n<p>\nThere are two different limits that apply to branches of lookbehind assertions.\nIf every branch in such an assertion matches a fixed number of characters,\nthe maximum length of any branch is 65535 characters. If any branch matches a\nvariable number of characters, then the maximum matching length for every\nbranch is limited. The default limit is set at compile time, defaulting to 255,\nbut can be changed by the calling program.\n</p>\n<p>\nThere is no limit to the number of parenthesized groups, but there can be no\nmore than 65535 capture groups, and there is a limit to the depth of nesting of\nparenthesized subpatterns of all kinds. This is imposed in order to limit the\namount of system stack used at compile time. The default limit can be specified\nwhen PCRE2 is built; if not, the default is set to 250. An application can\nchange this limit by calling pcre2_set_parens_nest_limit() to set the limit in\na compile context.\n</p>\n<p>\nThe maximum length of the name for a named capture group as well as the number\nof such groups is configurable at build time. The maximum length for the name\ndefaults to\n128 code units, and the maximum number of such groups to\n10000.\n</p>\n<p>\nThe maximum length of a name in a (*MARK), (*PRUNE), (*SKIP), or (*THEN) verb\nis 255 code units for the 8-bit library and 65535 code units for the 16-bit and\n32-bit libraries.\n</p>\n<p>\nThe maximum length of a string argument to a callout is the largest number a\n32-bit unsigned integer can hold.\n</p>\n<p>\nThe maximum amount of heap memory used for matching is controlled by the heap\nlimit, which can be set in a pattern or in a match context. The default is a\nvery large number, effectively unlimited.\n</p>\n<h2>\nAUTHOR\n</h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2>\nREVISION\n</h2>\n<p>\nLast updated: 03 September 2025\n<br>\nCopyright &copy; 1997-2023 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2matching.html",
    "content": "<html>\n<head>\n<title>pcre2matching specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2matching man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">PCRE2 MATCHING ALGORITHMS</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">REGULAR EXPRESSIONS AS TREES</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">THE STANDARD MATCHING ALGORITHM</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">THE ALTERNATIVE MATCHING ALGORITHM</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">ADVANTAGES OF THE ALTERNATIVE ALGORITHM</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">DISADVANTAGES OF THE ALTERNATIVE ALGORITHM</a>\n<li><a name=\"TOC7\" href=\"#SEC7\">AUTHOR</a>\n<li><a name=\"TOC8\" href=\"#SEC8\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">PCRE2 MATCHING ALGORITHMS</a></h2>\n<p>\nThis document describes the two different algorithms that are available in\nPCRE2 for matching a compiled regular expression against a given subject\nstring. The \"standard\" algorithm is the one provided by the <b>pcre2_match()</b>\nfunction. This works in the same way as Perl's matching function, and provides a\nPerl-compatible matching operation. The just-in-time (JIT) optimization that is\ndescribed in the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\ndocumentation is compatible with this function.\n</p>\n<p>\nAn alternative algorithm is provided by the <b>pcre2_dfa_match()</b> function;\nit operates in a different way, and is not Perl-compatible. This alternative\nhas advantages and disadvantages compared with the standard algorithm, and\nthese are described below.\n</p>\n<p>\nWhen there is only one possible way in which a given subject string can match a\npattern, the two algorithms give the same answer. A difference arises, however,\nwhen there are multiple possibilities. For example, if the anchored pattern\n<pre>\n  ^&#60;.*&#62;\n</pre>\nis matched against the string\n<pre>\n  &#60;something&#62; &#60;something else&#62; &#60;something further&#62;\n</pre>\nthere are three possible answers. The standard algorithm finds only one of\nthem, whereas the alternative algorithm finds all three.\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">REGULAR EXPRESSIONS AS TREES</a></h2>\n<p>\nThe set of strings that are matched by a regular expression can be represented\nas a tree structure. An unlimited repetition in the pattern makes the tree of\ninfinite size, but it is still a tree. Matching the pattern to a given subject\nstring (from a given starting point) can be thought of as a search of the tree.\nThere are two ways to search a tree: depth-first and breadth-first, and these\ncorrespond to the two matching algorithms provided by PCRE2.\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">THE STANDARD MATCHING ALGORITHM</a></h2>\n<p>\nIn the terminology of Jeffrey Friedl's book \"Mastering Regular Expressions\",\nthe standard algorithm is an \"NFA algorithm\". It conducts a depth-first search\nof the pattern tree. That is, it proceeds along a single path through the tree,\nchecking that the subject matches what is required. When there is a mismatch,\nthe algorithm tries any alternatives at the current point, and if they all\nfail, it backs up to the previous branch point in the tree, and tries the next\nalternative branch at that level. This often involves backing up (moving to the\nleft) in the subject string as well. The order in which repetition branches are\ntried is controlled by the greedy or ungreedy nature of the quantifier.\n</p>\n<p>\nIf a leaf node is reached, a matching string has been found, and at that point\nthe algorithm stops. Thus, if there is more than one possible match, this\nalgorithm returns the first one that it finds. Whether this is the shortest,\nthe longest, or some intermediate length depends on the way the alternations\nand the greedy or ungreedy repetition quantifiers are specified in the\npattern.\n</p>\n<p>\nBecause it ends up with a single path through the tree, it is relatively\nstraightforward for this algorithm to keep track of the substrings that are\nmatched by portions of the pattern in parentheses. This provides support for\ncapturing parentheses and backreferences.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">THE ALTERNATIVE MATCHING ALGORITHM</a></h2>\n<p>\nThis algorithm conducts a breadth-first search of the tree. Starting from the\nfirst matching point in the subject, it scans the subject string from left to\nright, once, character by character, and as it does this, it remembers all the\npaths through the tree that represent valid matches. In Friedl's terminology,\nthis is a kind of \"DFA algorithm\", though it is not implemented as a\ntraditional finite state machine (it keeps multiple states active\nsimultaneously).\n</p>\n<p>\nAlthough the general principle of this matching algorithm is that it scans the\nsubject string only once, without backtracking, there is one exception: when a\nlookaround assertion is encountered, the characters following or preceding the\ncurrent point have to be independently inspected.\n</p>\n<p>\nThe scan continues until either the end of the subject is reached, or there are\nno more unterminated paths. At this point, terminated paths represent the\ndifferent matching possibilities (if there are none, the match has failed).\nThus, if there is more than one possible match, this algorithm finds all of\nthem, and in particular, it finds the longest. The matches are returned in\nthe output vector in decreasing order of length. There is an option to stop the\nalgorithm after the first match (which is necessarily the shortest) is found.\n</p>\n<p>\nNote that the size of vector needed to contain all the results depends on the\nnumber of simultaneous matches, not on the number of capturing parentheses in\nthe pattern. Using <b>pcre2_match_data_create_from_pattern()</b> to create the\nmatch data block is therefore not advisable when doing DFA matching.\n</p>\n<p>\nNote also that all the matches that are found start at the same point in the\nsubject. If the pattern\n<pre>\n  cat(er(pillar)?)?\n</pre>\nis matched against the string \"the caterpillar catchment\", the result is the\nthree strings \"caterpillar\", \"cater\", and \"cat\" that start at the fifth\ncharacter of the subject. The algorithm does not automatically move on to find\nmatches that start at later positions.\n</p>\n<p>\nPCRE2's \"auto-possessification\" optimization usually applies to character\nrepeats at the end of a pattern (as well as internally). For example, the\npattern \"a\\d+\" is compiled as if it were \"a\\d++\" because there is no point\neven considering the possibility of backtracking into the repeated digits. For\nDFA matching, this means that only one possible match is found. If you really\ndo want multiple matches in such cases, either use an ungreedy repeat\n(\"a\\d+?\") or set the PCRE2_NO_AUTO_POSSESS option when compiling.\n</p>\n<p>\nThere are a number of features of PCRE2 regular expressions that are not\nsupported or behave differently in the alternative matching function. Those\nthat are not supported cause an error if encountered.\n</p>\n<p>\n1. Because the algorithm finds all possible matches, the greedy or ungreedy\nnature of repetition quantifiers is not relevant (though it may affect\nauto-possessification, as just described). During matching, greedy and ungreedy\nquantifiers are treated in exactly the same way. However, possessive\nquantifiers can make a difference when what follows could also match what is\nquantified, for example in a pattern like this:\n<pre>\n  ^a++\\w!\n</pre>\nThis pattern matches \"aaab!\" but not \"aaa!\", which would be matched by a\nnon-possessive quantifier. Similarly, if an atomic group is present, it is\nmatched as if it were a standalone pattern at the current point, and the\nlongest match is then \"locked in\" for the rest of the overall pattern.\n</p>\n<p>\n2. When dealing with multiple paths through the tree simultaneously, it is not\nstraightforward to keep track of captured substrings for the different matching\npossibilities, and PCRE2's implementation of this algorithm does not attempt to\ndo this. This means that no captured substrings are available.\n</p>\n<p>\n3. Because no substrings are captured, a number of related features are not\navailable:\n<br>\n<br>\n(a) Backreferences;\n<br>\n<br>\n(b) Conditional expressions that use a backreference as the condition or test\nfor a specific group recursion;\n<br>\n<br>\n(c) Script runs;\n<br>\n<br>\n(d) Scan substring assertions.\n</p>\n<p>\n4. Because many paths through the tree may be active, the \\K escape sequence,\nwhich resets the start of the match when encountered (but may be on some paths\nand not on others), is not supported.\n</p>\n<p>\n5. Callouts are supported, but the value of the <i>capture_top</i> field is\nalways 1, and the value of the <i>capture_last</i> field is always 0.\n</p>\n<p>\n6. The \\C escape sequence, which (in the standard algorithm) always matches a\nsingle code unit, even in a UTF mode, is not supported in UTF modes because\nthe alternative algorithm moves through the subject string one character (not\ncode unit) at a time, for all active paths through the tree.\n</p>\n<p>\n7. Except for (*FAIL), the backtracking control verbs such as (*PRUNE) are not\nsupported. (*FAIL) is supported, and behaves like a failing negative assertion.\n</p>\n<p>\n8. The PCRE2_MATCH_INVALID_UTF option for <b>pcre2_compile()</b> is not\nsupported by <b>pcre2_dfa_match()</b>.\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">ADVANTAGES OF THE ALTERNATIVE ALGORITHM</a></h2>\n<p>\nThe main advantage of the alternative algorithm is that all possible matches\n(at a single point in the subject) are automatically found, and in particular,\nthe longest match is found. To find more than one match at the same point using\nthe standard algorithm, you have to do kludgy things with callouts.\n</p>\n<p>\nPartial matching is possible with this algorithm, though it has some\nlimitations. The\n<a href=\"pcre2partial.html\"><b>pcre2partial</b></a>\ndocumentation gives details of partial matching and discusses multi-segment\nmatching.\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">DISADVANTAGES OF THE ALTERNATIVE ALGORITHM</a></h2>\n<p>\nThe alternative algorithm suffers from a number of disadvantages:\n</p>\n<p>\n1. It is substantially slower than the standard algorithm. This is partly\nbecause it has to search for all possible matches, but is also because it is\nless susceptible to optimization.\n</p>\n<p>\n2. Capturing parentheses and other features such as backreferences that rely on\nthem are not supported.\n</p>\n<p>\n3. Matching within invalid UTF strings is not supported.\n</p>\n<p>\n4. Although atomic groups are supported, their use does not provide the\nperformance advantage that it does for the standard algorithm.\n</p>\n<p>\n5. JIT optimization is not supported.\n</p>\n<h2><a name=\"SEC7\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC8\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 22 February 2025\n<br>\nCopyright &copy; 1997-2024 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2partial.html",
    "content": "<html>\n<head>\n<title>pcre2partial specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2partial man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">PARTIAL MATCHING IN PCRE2</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">REQUIREMENTS FOR A PARTIAL MATCH</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">PARTIAL MATCHING USING pcre2_match()</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">MULTI-SEGMENT MATCHING WITH pcre2_match()</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">PARTIAL MATCHING USING pcre2_dfa_match()</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">MULTI-SEGMENT MATCHING WITH pcre2_dfa_match()</a>\n<li><a name=\"TOC7\" href=\"#SEC7\">AUTHOR</a>\n<li><a name=\"TOC8\" href=\"#SEC8\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">PARTIAL MATCHING IN PCRE2</a></h2>\n<p>\nIn normal use of PCRE2, if there is a match up to the end of a subject string,\nbut more characters are needed to match the entire pattern, PCRE2_ERROR_NOMATCH\nis returned, just like any other failing match. There are circumstances where\nit might be helpful to distinguish this \"partial match\" case.\n</p>\n<p>\nOne example is an application where the subject string is very long, and not\nall available at once. The requirement here is to be able to do the matching\nsegment by segment, but special action is needed when a matched substring spans\nthe boundary between two segments.\n</p>\n<p>\nAnother example is checking a user input string as it is typed, to ensure that\nit conforms to a required format. Invalid characters can be immediately\ndiagnosed and rejected, giving instant feedback.\n</p>\n<p>\nPartial matching is a PCRE2-specific feature; it is not Perl-compatible. It is\nrequested by setting one of the PCRE2_PARTIAL_HARD or PCRE2_PARTIAL_SOFT\noptions when calling a matching function. The difference between the two\noptions is whether or not a partial match is preferred to an alternative\ncomplete match, though the details differ between the two types of matching\nfunction. If both options are set, PCRE2_PARTIAL_HARD takes precedence.\n</p>\n<p>\nIf you want to use partial matching with just-in-time optimized code, as well\nas setting a partial match option for the matching function, you must also call\n<b>pcre2_jit_compile()</b> with one or both of these options:\n<pre>\n  PCRE2_JIT_PARTIAL_HARD\n  PCRE2_JIT_PARTIAL_SOFT\n</pre>\nPCRE2_JIT_COMPLETE should also be set if you are going to run non-partial\nmatches on the same pattern. Separate code is compiled for each mode. If the\nappropriate JIT mode has not been compiled, interpretive matching code is used.\n</p>\n<p>\nSetting a partial matching option disables two of PCRE2's standard\noptimization hints. PCRE2 remembers the last literal code unit in a pattern,\nand abandons matching immediately if it is not present in the subject string.\nThis optimization cannot be used for a subject string that might match only\npartially. PCRE2 also remembers a minimum length of a matching string, and does\nnot bother to run the matching function on shorter strings. This optimization\nis also disabled for partial matching.\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">REQUIREMENTS FOR A PARTIAL MATCH</a></h2>\n<p>\nA possible partial match occurs during matching when the end of the subject\nstring is reached successfully, but either more characters are needed to\ncomplete the match, or the addition of more characters might change what is\nmatched.\n</p>\n<p>\nExample 1: if the pattern is /abc/ and the subject is \"ab\", more characters are\ndefinitely needed to complete a match. In this case both hard and soft matching\noptions yield a partial match.\n</p>\n<p>\nExample 2: if the pattern is /ab+/ and the subject is \"ab\", a complete match\ncan be found, but the addition of more characters might change what is\nmatched. In this case, only PCRE2_PARTIAL_HARD returns a partial match;\nPCRE2_PARTIAL_SOFT returns the complete match.\n</p>\n<p>\nOn reaching the end of the subject, when PCRE2_PARTIAL_HARD is set, if the next\npattern item is \\z, \\Z, \\b, \\B, or $ there is always a partial match.\nOtherwise, for both options, the next pattern item must be one that inspects a\ncharacter, and at least one of the following must be true:\n</p>\n<p>\n(1) At least one character has already been inspected. An inspected character\nneed not form part of the final matched string; lookbehind assertions and the\n\\K escape sequence provide ways of inspecting characters before the start of a\nmatched string.\n</p>\n<p>\n(2) The pattern contains one or more lookbehind assertions. This condition\nexists in case there is a lookbehind that inspects characters before the start\nof the match.\n</p>\n<p>\n(3) There is a special case when the whole pattern can match an empty string.\nWhen the starting point is at the end of the subject, the empty string match is\na possibility, and if PCRE2_PARTIAL_SOFT is set and neither of the above\nconditions is true, it is returned. However, because adding more characters\nmight result in a non-empty match, PCRE2_PARTIAL_HARD returns a partial match,\nwhich in this case means \"there is going to be a match at this point, but until\nsome more characters are added, we do not know if it will be an empty string or\nsomething longer\".\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">PARTIAL MATCHING USING pcre2_match()</a></h2>\n<p>\nWhen a partial matching option is set, the result of calling\n<b>pcre2_match()</b> can be one of the following:\n</p>\n<p>\n<b>A successful match</b>\nA complete match has been found, starting and ending within this subject.\n</p>\n<p>\n<b>PCRE2_ERROR_NOMATCH</b>\nNo match can start anywhere in this subject.\n</p>\n<p>\n<b>PCRE2_ERROR_PARTIAL</b>\nAdding more characters may result in a complete match that uses one or more\ncharacters from the end of this subject.\n</p>\n<p>\nWhen a partial match is returned, the first two elements in the ovector point\nto the portion of the subject that was matched, but the values in the rest of\nthe ovector are undefined. The appearance of \\K in the pattern has no effect\nfor a partial match. Consider this pattern:\n<pre>\n  /abc\\K123/\n</pre>\nIf it is matched against \"456abc123xyz\" the result is a complete match, and the\novector defines the matched string as \"123\", because \\K resets the \"start of\nmatch\" point. However, if a partial match is requested and the subject string\nis \"456abc12\", a partial match is found for the string \"abc12\", because all\nthese characters are needed for a subsequent re-match with additional\ncharacters.\n</p>\n<p>\nIf there is more than one partial match, the first one that was found provides\nthe data that is returned. Consider this pattern:\n<pre>\n  /123\\w+X|dogY/\n</pre>\nIf this is matched against the subject string \"abc123dog\", both alternatives\nfail to match, but the end of the subject is reached during matching, so\nPCRE2_ERROR_PARTIAL is returned. The offsets are set to 3 and 9, identifying\n\"123dog\" as the first partial match. (In this example, there are two partial\nmatches, because \"dog\" on its own partially matches the second alternative.)\n</p>\n<h3>\nHow a partial match is processed by pcre2_match()\n</h3>\n<p>\nWhat happens when a partial match is identified depends on which of the two\npartial matching options is set.\n</p>\n<p>\nIf PCRE2_PARTIAL_HARD is set, PCRE2_ERROR_PARTIAL is returned as soon as a\npartial match is found, without continuing to search for possible complete\nmatches. This option is \"hard\" because it prefers an earlier partial match over\na later complete match. For this reason, the assumption is made that the end of\nthe supplied subject string is not the true end of the available data, which is\nwhy \\z, \\Z, \\b, \\B, and $ always give a partial match.\n</p>\n<p>\nIf PCRE2_PARTIAL_SOFT is set, the partial match is remembered, but matching\ncontinues as normal, and other alternatives in the pattern are tried. If no\ncomplete match can be found, PCRE2_ERROR_PARTIAL is returned instead of\nPCRE2_ERROR_NOMATCH. This option is \"soft\" because it prefers a complete match\nover a partial match. All the various matching items in a pattern behave as if\nthe subject string is potentially complete; \\z, \\Z, and $ match at the end of\nthe subject, as normal, and for \\b and \\B the end of the subject is treated\nas a non-alphanumeric.\n</p>\n<p>\nThe difference between the two partial matching options can be illustrated by a\npattern such as:\n<pre>\n  /dog(sbody)?/\n</pre>\nThis matches either \"dog\" or \"dogsbody\", greedily (that is, it prefers the\nlonger string if possible). If it is matched against the string \"dog\" with\nPCRE2_PARTIAL_SOFT, it yields a complete match for \"dog\". However, if\nPCRE2_PARTIAL_HARD is set, the result is PCRE2_ERROR_PARTIAL. On the other\nhand, if the pattern is made ungreedy the result is different:\n<pre>\n  /dog(sbody)??/\n</pre>\nIn this case the result is always a complete match because that is found first,\nand matching never continues after finding a complete match. It might be easier\nto follow this explanation by thinking of the two patterns like this:\n<pre>\n  /dog(sbody)?/    is the same as  /dogsbody|dog/\n  /dog(sbody)??/   is the same as  /dog|dogsbody/\n</pre>\nThe second pattern will never match \"dogsbody\", because it will always find the\nshorter match first.\n</p>\n<h3>\nExample of partial matching using pcre2test\n</h3>\n<p>\nThe <b>pcre2test</b> data modifiers <b>partial_hard</b> (or <b>ph</b>) and\n<b>partial_soft</b> (or <b>ps</b>) set PCRE2_PARTIAL_HARD and PCRE2_PARTIAL_SOFT,\nrespectively, when calling <b>pcre2_match()</b>. Here is a run of\n<b>pcre2test</b> using a pattern that matches the whole subject in the form of a\ndate:\n<pre>\n    re&#62; /^\\d?\\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\d\\d$/\n  data&#62; 25dec3\\=ph\n  Partial match: 23dec3\n  data&#62; 3ju\\=ph\n  Partial match: 3ju\n  data&#62; 3juj\\=ph\n  No match\n</pre>\nThis example gives the same results for both hard and soft partial matching\noptions. Here is an example where there is a difference:\n<pre>\n    re&#62; /^\\d?\\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\d\\d$/\n  data&#62; 25jun04\\=ps\n   0: 25jun04\n   1: jun\n  data&#62; 25jun04\\=ph\n  Partial match: 25jun04\n</pre>\nWith PCRE2_PARTIAL_SOFT, the subject is matched completely. For\nPCRE2_PARTIAL_HARD, however, the subject is assumed not to be complete, so\nthere is only a partial match.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">MULTI-SEGMENT MATCHING WITH pcre2_match()</a></h2>\n<p>\nPCRE was not originally designed with multi-segment matching in mind. However,\nover time, features (including partial matching) that make multi-segment\nmatching possible have been added. A very long string can be searched segment\nby segment by calling <b>pcre2_match()</b> repeatedly, with the aim of achieving\nthe same results that would happen if the entire string was available for\nsearching all the time. Normally, the strings that are being sought are much\nshorter than each individual segment, and are in the middle of very long\nstrings, so the pattern is normally not anchored.\n</p>\n<p>\nSpecial logic must be implemented to handle a matched substring that spans a\nsegment boundary. PCRE2_PARTIAL_HARD should be used, because it returns a\npartial match at the end of a segment whenever there is the possibility of\nchanging the match by adding more characters. The PCRE2_NOTBOL option should\nalso be set for all but the first segment.\n</p>\n<p>\nWhen a partial match occurs, the next segment must be added to the current\nsubject and the match re-run, using the <i>startoffset</i> argument of\n<b>pcre2_match()</b> to begin at the point where the partial match started.\nFor example:\n<pre>\n    re&#62; /\\d?\\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\d\\d/\n  data&#62; ...the date is 23ja\\=ph\n  Partial match: 23ja\n  data&#62; ...the date is 23jan19 and on that day...\\=offset=15\n   0: 23jan19\n   1: jan\n</pre>\nNote the use of the <b>offset</b> modifier to start the new match where the\npartial match was found. In this example, the next segment was added to the one\nin which the partial match was found. This is the most straightforward\napproach, typically using a memory buffer that is twice the size of each\nsegment. After a partial match, the first half of the buffer is discarded, the\nsecond half is moved to the start of the buffer, and a new segment is added\nbefore repeating the match as in the example above. After a no match, the\nentire buffer can be discarded.\n</p>\n<p>\nIf there are memory constraints, you may want to discard text that precedes a\npartial match before adding the next segment. Unfortunately, this is not at\npresent straightforward. In cases such as the above, where the pattern does not\ncontain any lookbehinds, it is sufficient to retain only the partially matched\nsubstring. However, if the pattern contains a lookbehind assertion, characters\nthat precede the start of the partial match may have been inspected during the\nmatching process. When <b>pcre2test</b> displays a partial match, it indicates\nthese characters with '&#60;' if the <b>allusedtext</b> modifier is set:\n<pre>\n    re&#62; \"(?&#60;=123)abc\"\n  data&#62; xx123ab\\=ph,allusedtext\n  Partial match: 123ab\n                 &#60;&#60;&#60;\n</pre>\nHowever, the <b>allusedtext</b> modifier is not available for JIT matching,\nbecause JIT matching does not record the first (or last) consulted characters.\nFor this reason, this information is not available via the API. It is therefore\nnot possible in general to obtain the exact number of characters that must be\nretained in order to get the right match result. If you cannot retain the\nentire segment, you must find some heuristic way of choosing.\n</p>\n<p>\nIf you know the approximate length of the matching substrings, you can use that\nto decide how much text to retain. The only lookbehind information that is\ncurrently available via the API is the length of the longest individual\nlookbehind in a pattern, but this can be misleading if there are nested\nlookbehinds. The value returned by calling <b>pcre2_pattern_info()</b> with the\nPCRE2_INFO_MAXLOOKBEHIND option is the maximum number of characters (not code\nunits) that any individual lookbehind moves back when it is processed. A\npattern such as \"(?&#60;=(?&#60;!b)a)\" has a maximum lookbehind value of one, but\ninspects two characters before its starting point.\n</p>\n<p>\nIn a non-UTF or a 32-bit case, moving back is just a subtraction, but in\nUTF-8 or UTF-16 you have to count characters while moving back through the code\nunits.\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">PARTIAL MATCHING USING pcre2_dfa_match()</a></h2>\n<p>\nThe DFA function moves along the subject string character by character, without\nbacktracking, searching for all possible matches simultaneously. If the end of\nthe subject is reached before the end of the pattern, there is the possibility\nof a partial match.\n</p>\n<p>\nWhen PCRE2_PARTIAL_SOFT is set, PCRE2_ERROR_PARTIAL is returned only if there\nhave been no complete matches. Otherwise, the complete matches are returned.\nIf PCRE2_PARTIAL_HARD is set, a partial match takes precedence over any\ncomplete matches. The portion of the string that was matched when the longest\npartial match was found is set as the first matching string.\n</p>\n<p>\nBecause the DFA function always searches for all possible matches, and there is\nno difference between greedy and ungreedy repetition, its behaviour is\ndifferent from the <b>pcre2_match()</b>. Consider the string \"dog\" matched\nagainst this ungreedy pattern:\n<pre>\n  /dog(sbody)??/\n</pre>\nWhereas the standard function stops as soon as it finds the complete match for\n\"dog\", the DFA function also finds the partial match for \"dogsbody\", and so\nreturns that when PCRE2_PARTIAL_HARD is set.\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">MULTI-SEGMENT MATCHING WITH pcre2_dfa_match()</a></h2>\n<p>\nWhen a partial match has been found using the DFA matching function, it is\npossible to continue the match by providing additional subject data and calling\nthe function again with the same compiled regular expression, this time setting\nthe PCRE2_DFA_RESTART option. You must pass the same working space as before,\nbecause this is where details of the previous partial match are stored. You can\nset the PCRE2_PARTIAL_SOFT or PCRE2_PARTIAL_HARD options with PCRE2_DFA_RESTART\nto continue partial matching over multiple segments. Here is an example using\n<b>pcre2test</b>:\n<pre>\n    re&#62; /^\\d?\\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\d\\d$/\n  data&#62; 23ja\\=dfa,ps\n  Partial match: 23ja\n  data&#62; n05\\=dfa,dfa_restart\n   0: n05\n</pre>\nThe first call has \"23ja\" as the subject, and requests partial matching; the\nsecond call has \"n05\" as the subject for the continued (restarted) match.\nNotice that when the match is complete, only the last part is shown; PCRE2 does\nnot retain the previously partially-matched string. It is up to the calling\nprogram to do that if it needs to. This means that, for an unanchored pattern,\nif a continued match fails, it is not possible to try again at a new starting\npoint. All this facility is capable of doing is continuing with the previous\nmatch attempt. For example, consider this pattern:\n<pre>\n  1234|3789\n</pre>\nIf the first part of the subject is \"ABC123\", a partial match of the first\nalternative is found at offset 3. There is no partial match for the second\nalternative, because such a match does not start at the same point in the\nsubject string. Attempting to continue with the string \"7890\" does not yield a\nmatch because only those alternatives that match at one point in the subject\nare remembered. Depending on the application, this may or may not be what you\nwant.\n</p>\n<p>\nIf you do want to allow for starting again at the next character, one way of\ndoing it is to retain some or all of the segment and try a new complete match,\nas described for <b>pcre2_match()</b> above. Another possibility is to work with\ntwo buffers. If a partial match at offset <i>n</i> in the first buffer is\nfollowed by \"no match\" when PCRE2_DFA_RESTART is used on the second buffer, you\ncan then try a new match starting at offset <i>n+1</i> in the first buffer.\n</p>\n<h2><a name=\"SEC7\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC8\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 27 November 2024\n<br>\nCopyright &copy; 1997-2019 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2pattern.html",
    "content": "<html>\n<head>\n<title>pcre2pattern specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2pattern man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">PCRE2 REGULAR EXPRESSION DETAILS</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">EBCDIC CHARACTER CODES</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">SPECIAL START-OF-PATTERN ITEMS</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">CHARACTERS AND METACHARACTERS</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">BACKSLASH</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">CIRCUMFLEX AND DOLLAR</a>\n<li><a name=\"TOC7\" href=\"#SEC7\">FULL STOP (PERIOD, DOT) AND \\N</a>\n<li><a name=\"TOC8\" href=\"#SEC8\">MATCHING A SINGLE CODE UNIT</a>\n<li><a name=\"TOC9\" href=\"#SEC9\">SQUARE BRACKETS AND CHARACTER CLASSES</a>\n<li><a name=\"TOC10\" href=\"#SEC10\">PERL EXTENDED CHARACTER CLASSES</a>\n<li><a name=\"TOC11\" href=\"#SEC11\">UTS#18 EXTENDED CHARACTER CLASSES</a>\n<li><a name=\"TOC12\" href=\"#SEC12\">POSIX CHARACTER CLASSES</a>\n<li><a name=\"TOC13\" href=\"#SEC13\">COMPATIBILITY FEATURE FOR WORD BOUNDARIES</a>\n<li><a name=\"TOC14\" href=\"#SEC14\">VERTICAL BAR</a>\n<li><a name=\"TOC15\" href=\"#SEC15\">INTERNAL OPTION SETTING</a>\n<li><a name=\"TOC16\" href=\"#SEC16\">GROUPS</a>\n<li><a name=\"TOC17\" href=\"#SEC17\">DUPLICATE GROUP NUMBERS</a>\n<li><a name=\"TOC18\" href=\"#SEC18\">NAMED CAPTURE GROUPS</a>\n<li><a name=\"TOC19\" href=\"#SEC19\">REPETITION</a>\n<li><a name=\"TOC20\" href=\"#SEC20\">ATOMIC GROUPING AND POSSESSIVE QUANTIFIERS</a>\n<li><a name=\"TOC21\" href=\"#SEC21\">BACKREFERENCES</a>\n<li><a name=\"TOC22\" href=\"#SEC22\">ASSERTIONS</a>\n<li><a name=\"TOC23\" href=\"#SEC23\">NON-ATOMIC ASSERTIONS</a>\n<li><a name=\"TOC24\" href=\"#SEC24\">SCAN SUBSTRING ASSERTIONS</a>\n<li><a name=\"TOC25\" href=\"#SEC25\">SCRIPT RUNS</a>\n<li><a name=\"TOC26\" href=\"#SEC26\">CONDITIONAL GROUPS</a>\n<li><a name=\"TOC27\" href=\"#SEC27\">COMMENTS</a>\n<li><a name=\"TOC28\" href=\"#SEC28\">RECURSIVE PATTERNS</a>\n<li><a name=\"TOC29\" href=\"#SEC29\">CALLOUTS</a>\n<li><a name=\"TOC30\" href=\"#SEC30\">BACKTRACKING CONTROL</a>\n<li><a name=\"TOC31\" href=\"#SEC31\">EBCDIC ENVIRONMENTS</a>\n<li><a name=\"TOC32\" href=\"#SEC32\">SEE ALSO</a>\n<li><a name=\"TOC33\" href=\"#SEC33\">AUTHOR</a>\n<li><a name=\"TOC34\" href=\"#SEC34\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">PCRE2 REGULAR EXPRESSION DETAILS</a></h2>\n<p>\nThe syntax and semantics of the regular expressions that are supported by PCRE2\nare described in detail below. There is a quick-reference syntax summary in the\n<a href=\"pcre2syntax.html\"><b>pcre2syntax</b></a>\npage. PCRE2 tries to match Perl syntax and semantics as closely as it can.\nPCRE2 also supports some alternative regular expression syntax that does not\nconflict with the Perl syntax in order to provide some compatibility with\nregular expressions in Python, .NET, and Oniguruma. There are in addition some\noptions that enable alternative syntax and semantics that are not the same as\nin Perl.\n</p>\n<p>\nPerl's regular expressions are described in its own documentation, and regular\nexpressions in general are covered in a number of books, some of which have\ncopious examples. Jeffrey Friedl's \"Mastering Regular Expressions\", published\nby O'Reilly, covers regular expressions in great detail. This description of\nPCRE2's regular expressions is intended as reference material.\n</p>\n<p>\nThis document discusses the regular expression patterns that are supported by\nPCRE2 when its main matching function, <b>pcre2_match()</b>, is used. PCRE2 also\nhas an alternative matching function, <b>pcre2_dfa_match()</b>, which matches\nusing a different algorithm that is not Perl-compatible. Some of the features\ndiscussed below are not available when DFA matching is used. The advantages and\ndisadvantages of the alternative function, and how it differs from the normal\nfunction, are discussed in the\n<a href=\"pcre2matching.html\"><b>pcre2matching</b></a>\npage.\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">EBCDIC CHARACTER CODES</a></h2>\n<p>\nMost computers use ASCII or Unicode for encoding characters, and PCRE2 assumes\nthis by default. However, it can be compiled to run in an environment that uses\nthe EBCDIC code, which is the case for some IBM mainframe operating systems. In\nthe sections below, character code values are ASCII or Unicode; in an EBCDIC\nenvironment these characters may have different code values, and there are no\ncode points greater than 255. Differences in behaviour when PCRE2 is running in\nan EBCDIC environment are described in the section\n<a href=\"#ebcdicenvironments\">\"EBCDIC environments\"</a>\nbelow, which you can ignore unless you really are in an EBCDIC environment.\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">SPECIAL START-OF-PATTERN ITEMS</a></h2>\n<p>\nA number of options that can be passed to <b>pcre2_compile()</b> can also be set\nby special items at the start of a pattern. These are not Perl-compatible, but\nare provided to make these options accessible to pattern writers who are not\nable to change the program that processes the pattern. Any number of these\nitems may appear, but they must all be together right at the start of the\npattern string, and the letters must be in upper case.\n</p>\n<h3>\nUTF support\n</h3>\n<p>\nIn the 8-bit and 16-bit PCRE2 libraries, characters may be coded either as\nsingle code units, or as multiple UTF-8 or UTF-16 code units. UTF-32 can be\nspecified for the 32-bit library, in which case it constrains the character\nvalues to valid Unicode code points. To process UTF strings, PCRE2 must be\nbuilt to include Unicode support (which is the default). When using UTF strings\nyou must either call the compiling function with one or both of the PCRE2_UTF\nor PCRE2_MATCH_INVALID_UTF options, or the pattern must start with the special\nsequence (*UTF), which is equivalent to setting the relevant PCRE2_UTF. How\nsetting a UTF mode affects pattern matching is mentioned in several places\nbelow. There is also a summary of features in the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\npage.\n</p>\n<p>\nSome applications that allow their users to supply patterns may wish to\nrestrict them to non-UTF data for security reasons. If the PCRE2_NEVER_UTF\noption is passed to <b>pcre2_compile()</b>, (*UTF) is not allowed, and its\nappearance in a pattern causes an error.\n</p>\n<h3>\nUnicode property support\n</h3>\n<p>\nAnother special sequence that may appear at the start of a pattern is (*UCP).\nThis has the same effect as setting the PCRE2_UCP option: it causes sequences\nsuch as \\d and \\w to use Unicode properties to determine character types,\ninstead of recognizing only characters with codes less than 256 via a lookup\ntable. If also causes upper/lower casing operations to use Unicode properties\nfor characters with code points greater than 127, even when UTF is not set.\nThese behaviours can be changed within the pattern; see the section entitled\n<a href=\"#internaloptions\">\"Internal Option Setting\"</a>\nbelow.\n</p>\n<p>\nSome applications that allow their users to supply patterns may wish to\nrestrict them for security reasons. If the PCRE2_NEVER_UCP option is passed to\n<b>pcre2_compile()</b>, (*UCP) is not allowed, and its appearance in a pattern\ncauses an error.\n</p>\n<h3>\nLocking out empty string matching\n</h3>\n<p>\nStarting a pattern with (*NOTEMPTY) or (*NOTEMPTY_ATSTART) has the same effect\nas passing the PCRE2_NOTEMPTY or PCRE2_NOTEMPTY_ATSTART option to whichever\nmatching function is subsequently called to match the pattern. These options\nlock out the matching of empty strings, either entirely, or only at the start\nof the subject.\n</p>\n<h3>\nDisabling auto-possessification\n</h3>\n<p>\nIf a pattern starts with (*NO_AUTO_POSSESS), it has the same effect as setting\nthe PCRE2_NO_AUTO_POSSESS option, or calling <b>pcre2_set_optimize()</b> with\na PCRE2_AUTO_POSSESS_OFF directive. This stops PCRE2 from making quantifiers\npossessive when what follows cannot match the repeated item. For example, by\ndefault a+b is treated as a++b. For more details, see the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation.\n</p>\n<h3>\nDisabling start-up optimizations\n</h3>\n<p>\nIf a pattern starts with (*NO_START_OPT), it has the same effect as setting the\nPCRE2_NO_START_OPTIMIZE option, or calling <b>pcre2_set_optimize()</b> with\na PCRE2_START_OPTIMIZE_OFF directive. This disables several optimizations for\nquickly reaching \"no match\" results. For more details, see the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation.\n</p>\n<h3>\nDisabling automatic anchoring\n</h3>\n<p>\nIf a pattern starts with (*NO_DOTSTAR_ANCHOR), it has the same effect as\nsetting the PCRE2_NO_DOTSTAR_ANCHOR option, or\ncalling <b>pcre2_set_optimize()</b> with a PCRE2_DOTSTAR_ANCHOR_OFF directive.\nThis disables optimizations that apply to patterns whose top-level branches\nall start with .* (match any number of arbitrary characters). For more details,\nsee the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation.\n</p>\n<h3>\nDisabling JIT compilation\n</h3>\n<p>\nIf a pattern that starts with (*NO_JIT) is successfully compiled, an attempt by\nthe application to apply the JIT optimization by calling\n<b>pcre2_jit_compile()</b> is ignored.\n</p>\n<h3>\nSetting match resource limits\n</h3>\n<p>\nThe <b>pcre2_match()</b> function contains a counter that is incremented every\ntime it goes round its main loop. The caller of <b>pcre2_match()</b> can set a\nlimit on this counter, which therefore limits the amount of computing resource\nused for a match. The maximum depth of nested backtracking can also be limited;\nthis indirectly restricts the amount of heap memory that is used, but there is\nalso an explicit memory limit that can be set.\n</p>\n<p>\nThese facilities are provided to catch runaway matches that are provoked by\npatterns with huge matching trees. A common example is a pattern with nested\nunlimited repeats applied to a long string that does not match. When one of\nthese limits is reached, <b>pcre2_match()</b> gives an error return. The limits\ncan also be set by items at the start of the pattern of the form\n<pre>\n  (*LIMIT_HEAP=d)\n  (*LIMIT_MATCH=d)\n  (*LIMIT_DEPTH=d)\n</pre>\nwhere d is any number of decimal digits. However, the value of the setting must\nbe less than the value set (or defaulted) by the caller of <b>pcre2_match()</b>\nfor it to have any effect. In other words, the pattern writer can lower the\nlimits set by the programmer, but not raise them. If there is more than one\nsetting of one of these limits, the lower value is used. The heap limit is\nspecified in kibibytes (units of 1024 bytes).\n</p>\n<p>\nPrior to release 10.30, LIMIT_DEPTH was called LIMIT_RECURSION. This name is\nstill recognized for backwards compatibility.\n</p>\n<p>\nThe heap limit applies only when the <b>pcre2_match()</b> or\n<b>pcre2_dfa_match()</b> interpreters are used for matching. It does not apply\nto JIT. The match limit is used (but in a different way) when JIT is being\nused, or when <b>pcre2_dfa_match()</b> is called, to limit computing resource\nusage by those matching functions. The depth limit is ignored by JIT but is\nrelevant for DFA matching, which uses function recursion for recursions within\nthe pattern and for lookaround assertions and atomic groups. In this case, the\ndepth limit controls the depth of such recursion.\n<a name=\"newlines\"></a></p>\n<h3>\nNewline conventions\n</h3>\n<p>\nPCRE2 supports six different conventions for indicating line breaks in\nstrings: a single CR (carriage return) character, a single LF (linefeed)\ncharacter, the two-character sequence CRLF, any of the three preceding, any\nUnicode newline sequence, or the NUL character (binary zero). The\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage has\n<a href=\"pcre2api.html#newlines\">further discussion</a>\nabout newlines, and shows how to set the newline convention when calling\n<b>pcre2_compile()</b>.\n</p>\n<p>\nIt is also possible to specify a newline convention by starting a pattern\nstring with one of the following sequences:\n<pre>\n  (*CR)        carriage return\n  (*LF)        linefeed\n  (*CRLF)      carriage return, followed by linefeed\n  (*ANYCRLF)   any of the three above\n  (*ANY)       all Unicode newline sequences\n  (*NUL)       the NUL character (binary zero)\n</pre>\nThese override the default and the options given to the compiling function. For\nexample, on a Unix system where LF is the default newline sequence, the pattern\n<pre>\n  (*CR)a.b\n</pre>\nchanges the convention to CR. That pattern matches \"a\\nb\" because LF is no\nlonger a newline. If more than one of these settings is present, the last one\nis used.\n</p>\n<p>\nThe newline convention affects where the circumflex and dollar assertions are\ntrue. It also affects the interpretation of the dot metacharacter when\nPCRE2_DOTALL is not set, and the behaviour of \\N when not followed by an\nopening brace. However, it does not affect what the \\R escape sequence\nmatches. By default, this is any Unicode newline sequence, for Perl\ncompatibility. However, this can be changed; see the next section and the\ndescription of \\R in the section entitled\n<a href=\"#newlineseq\">\"Newline sequences\"</a>\nbelow. A change of \\R setting can be combined with a change of newline\nconvention.\n</p>\n<h3>\nSpecifying what \\R matches\n</h3>\n<p>\nIt is possible to restrict \\R to match only CR, LF, or CRLF (instead of the\ncomplete set of Unicode line endings) by setting the option PCRE2_BSR_ANYCRLF\nat compile time. This effect can also be achieved by starting a pattern with\n(*BSR_ANYCRLF). For completeness, (*BSR_UNICODE) is also recognized,\ncorresponding to PCRE2_BSR_UNICODE.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">CHARACTERS AND METACHARACTERS</a></h2>\n<p>\nA regular expression is a pattern that is matched against a subject string from\nleft to right. Most characters stand for themselves in a pattern, and match the\ncorresponding characters in the subject. As a trivial example, the pattern\n<pre>\n  The quick brown fox\n</pre>\nmatches a portion of a subject string that is identical to itself. When\ncaseless matching is specified (the PCRE2_CASELESS option or (?i) within the\npattern), letters are matched independently of case. Note that there are two\nASCII characters, K and S, that, in addition to their lower case ASCII\nequivalents, are case-equivalent with Unicode U+212A (Kelvin sign) and U+017F\n(long S) respectively when either PCRE2_UTF or PCRE2_UCP is set, unless the\nPCRE2_EXTRA_CASELESS_RESTRICT option is in force (either passed to\n<b>pcre2_compile()</b> or set by (*CASELESS_RESTRICT) or (?r) within the\npattern). If the PCRE2_EXTRA_TURKISH_CASING option is in force (either passed\nto <b>pcre2_compile()</b> or set by (*TURKISH_CASING) within the pattern), then\nthe 'i' letters are matched according to Turkish and Azeri languages.\n</p>\n<p>\nThe power of regular expressions comes from the ability to include wild cards,\ncharacter classes, alternatives, and repetitions in the pattern. These are\nencoded in the pattern by the use of <i>metacharacters</i>, which do not stand\nfor themselves but instead are interpreted in some special way.\n</p>\n<p>\nThere are two different sets of metacharacters: those that are recognized\nanywhere in the pattern except within square brackets, and those that are\nrecognized within square brackets. Outside square brackets, the metacharacters\nare as follows:\n<pre>\n  \\      general escape character with several uses\n  ^      assert start of string (or line, in multiline mode)\n  $      assert end of string (or line, in multiline mode)\n  .      match any character except newline (by default)\n  [      start character class definition\n  |      start of alternative branch\n  (      start group or control verb\n  )      end group or control verb\n  *      0 or more quantifier\n  +      1 or more quantifier; also \"possessive quantifier\"\n  ?      0 or 1 quantifier; also quantifier minimizer\n  {      potential start of min/max quantifier\n</pre>\nBrace characters { and } are also used to enclose data for constructions such\nas \\g{2} or \\k{name}. In almost all uses of braces, space and/or horizontal\ntab characters that follow { or precede } are allowed and are ignored. In the\ncase of quantifiers, they may also appear before or after the comma. The\nexception to this is \\u{...} which is an ECMAScript compatibility feature\nthat is recognized only when the PCRE2_EXTRA_ALT_BSUX option is set. ECMAScript\ndoes not ignore such white space; it causes the item to be interpreted as\nliteral.\n</p>\n<p>\nPart of a pattern that is in square brackets is called a \"character class\". In\na character class the only metacharacters are:\n<pre>\n  \\      general escape character\n  ^      negate the class, but only if the first character\n  -      indicates character range\n  [      POSIX character class (if followed by POSIX syntax)\n  ]      terminates the character class\n</pre>\nIf a pattern is compiled with the PCRE2_EXTENDED option, most white space in\nthe pattern, other than in a character class, within a \\Q...\\E sequence, or\nbetween a # outside a character class and the next newline, inclusive, is\nignored. An escaping backslash can be used to include a white space or a #\ncharacter as part of the pattern. If the PCRE2_EXTENDED_MORE option is set, the\nsame applies, but in addition unescaped space and horizontal tab characters are\nignored inside a character class. Note: only these two characters are ignored,\nnot the full set of pattern white space characters that are ignored outside a\ncharacter class. Option settings can be changed within a pattern; see the\nsection entitled\n<a href=\"#internaloptions\">\"Internal Option Setting\"</a>\nbelow.\n</p>\n<p>\nThe following sections describe the use of each of the metacharacters.\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">BACKSLASH</a></h2>\n<p>\nThe backslash character has several uses. Firstly, if it is followed by a\ncharacter that is not a digit or a letter, it takes away any special meaning\nthat character may have. This use of backslash as an escape character applies\nboth inside and outside character classes.\n</p>\n<p>\nFor example, if you want to match a * character, you must write \\* in the\npattern. This escaping action applies whether or not the following character\nwould otherwise be interpreted as a metacharacter, so it is always safe to\nprecede a non-alphanumeric with backslash to specify that it stands for itself.\nIn particular, if you want to match a backslash, you write \\\\.\n</p>\n<p>\nOnly ASCII digits and letters have any special meaning after a backslash. All\nother characters (in particular, those whose code points are greater than 127)\nare treated as literals.\n</p>\n<p>\nIf you want to treat all characters in a sequence as literals, you can do so by\nputting them between \\Q and \\E. Note that this includes white space even when\nthe PCRE2_EXTENDED option is set so that most other white space is ignored. The\nbehaviour is different from Perl in that $ and @ are handled as literals in\n\\Q...\\E sequences in PCRE2, whereas in Perl, $ and @ cause variable\ninterpolation. Also, Perl does \"double-quotish backslash interpolation\" on any\nbackslashes between \\Q and \\E which, its documentation says, \"may lead to\nconfusing results\". PCRE2 treats a backslash between \\Q and \\E just like any\nother character. Note the following examples:\n<pre>\n  Pattern            PCRE2 matches   Perl matches\n\n  \\Qabc$xyz\\E        abc$xyz        abc followed by the contents of $xyz\n  \\Qabc\\$xyz\\E       abc\\$xyz       abc\\$xyz\n  \\Qabc\\E\\$\\Qxyz\\E   abc$xyz        abc$xyz\n  \\QA\\B\\E            A\\B            A\\B\n  \\Q\\\\E              \\              \\\\E\n</pre>\nThe \\Q...\\E sequence is recognized both inside and outside character classes.\nAn isolated \\E that is not preceded by \\Q is ignored. If \\Q is not followed\nby \\E later in the pattern, the literal interpretation continues to the end of\nthe pattern (that is, \\E is assumed at the end). If the isolated \\Q is inside\na character class, this causes an error, because the character class is then\nnot terminated by a closing square bracket.\n</p>\n<p>\nAnother difference from Perl is that any appearance of \\Q or \\E inside what\nmight otherwise be a quantifier causes PCRE2 not to recognize the sequence as a\nquantifier. Perl recognizes a quantifier if (redundantly) either of the numbers\nis inside \\Q...\\E, but not if the separating comma is. When not recognized as\na quantifier a sequence such as {\\Q1\\E,2} is treated as the literal string\n\"{1,2}\".\n<a name=\"digitsafterbackslash\"></a></p>\n<h3>\nNon-printing characters\n</h3>\n<p>\nA second use of backslash provides a way of encoding non-printing characters\nin patterns in a visible manner. There is no restriction on the appearance of\nnon-printing characters in a pattern, but when a pattern is being prepared by\ntext editing, it is often easier to use one of the following escape sequences\ninstead of the binary character it represents. In an ASCII or Unicode\nenvironment, these escapes are as follows:\n<pre>\n  \\a          alarm, that is, the BEL character (hex 07)\n  \\cx         \"control-x\", where x is a non-control ASCII character\n  \\e          escape (hex 1B)\n  \\f          form feed (hex 0C)\n  \\n          linefeed (hex 0A)\n  \\r          carriage return (hex 0D) (but see below)\n  \\t          tab (hex 09)\n  \\0dd        character with octal code 0dd\n  \\ddd        character with octal code ddd, or back reference\n  \\o{ddd..}   character with octal code ddd..\n  \\xhh        character with hex code hh\n  \\x{hhh..}   character with hex code hhh..\n  \\N{U+hhh..} character with Unicode hex code point hhh..\n</pre>\nA description of how back references work is given\n<a href=\"#backreferences\">later,</a>\nfollowing the discussion of\n<a href=\"#group\">parenthesized groups.</a>\n</p>\n<p>\nBy default, after \\x that is not followed by {, one or two hexadecimal\ndigits are read (letters can be in upper or lower case). If the character that\nfollows \\x is neither { nor a hexadecimal digit, an error occurs. This is\ndifferent from Perl's default behaviour, which generates a NUL character, but\nis in line with the behaviour of Perl's 'strict' mode in re.\n</p>\n<p>\nAny number of hexadecimal digits may appear between \\x{ and }. If a character\nother than a hexadecimal digit appears between \\x{ and }, or if there is no\nterminating }, an error occurs.\n</p>\n<p>\nCharacters whose code points are less than 256 can be defined by either of the\ntwo syntaxes for \\x or by an octal sequence. There is no difference in the way\nthey are handled. For example, \\xdc is exactly the same as \\x{dc} or \\334.\nHowever, using the braced versions does make such sequences easier to read.\n</p>\n<p>\nSupport is available for some ECMAScript (aka JavaScript) escape sequences via\ntwo compile-time options. If PCRE2_ALT_BSUX is set, the sequence \\x followed\nby { is not recognized. Only if \\x is followed by two hexadecimal digits is it\nrecognized as a character escape. Otherwise it is interpreted as a literal \"x\"\ncharacter. In this mode, support for code points greater than 256 is provided\nby \\u, which must be followed by four hexadecimal digits; otherwise it is\ninterpreted as a literal \"u\" character.\n</p>\n<p>\nPCRE2_EXTRA_ALT_BSUX has the same effect as PCRE2_ALT_BSUX and, in addition,\n\\u{hhh..} is recognized as the character specified by hexadecimal code point.\nThere may be any number of hexadecimal digits, but unlike other places that\nalso use curly brackets, spaces are not allowed and would result in the string\nbeing interpreted as a literal. This syntax is from ECMAScript 6.\n</p>\n<p>\nThe \\N{U+hhh..} escape sequence is recognized only when PCRE2 is operating in\nUTF mode. Perl also uses \\N{name} to specify characters by Unicode name; PCRE2\ndoes not support this. Note that when \\N is not followed by an opening brace\n(curly bracket) it has an entirely different meaning, matching any character\nthat is not a newline.\n</p>\n<p>\nThere are some legacy applications where the escape sequence \\r is expected to\nmatch a newline. If the PCRE2_EXTRA_ESCAPED_CR_IS_LF option is set, \\r in a\npattern is converted to \\n so that it matches a LF (linefeed) instead of a CR\n(carriage return) character.\n</p>\n<p>\nAn error occurs if \\c is not followed by a character whose ASCII code point\nis in the range 32 to 126. The precise effect of \\cx is as follows: if x is a\nlower case letter, it is converted to upper case. Then bit 6 of the character\n(hex 40) is inverted. Thus \\cA to \\cZ become hex 01 to hex 1A (A is 41, Z is\n5A), but \\c{ becomes hex 3B ({ is 7B), and \\c; becomes hex 7B (; is 3B). If\nthe code unit following \\c has a code point less than 32 or greater than 126,\na compile-time error occurs.\n</p>\n<p>\nFor differences in the way some escapes behave in EBCDIC environments,\nsee section\n<a href=\"#ebcdicenvironments\">\"EBCDIC environments\"</a>\nbelow.\n</p>\n<h3>\nOctal escapes and back references\n</h3>\n<p>\nThe escape \\o must be followed by a sequence of octal digits, enclosed in\nbraces. An error occurs if this is not the case. This escape provides a way of\nspecifying character code points as octal numbers greater than 0777, and it\nalso allows octal numbers and backreferences to be unambiguously distinguished.\n</p>\n<p>\nIf braces are not used, after \\0 up to two further octal digits are read.\nHowever, if the PCRE2_EXTRA_NO_BS0 option is set, at least one more octal digit\nmust follow \\0 (use \\00 to generate a NUL character). Make sure you supply\ntwo digits after the initial zero if the pattern character that follows is\nitself an octal digit.\n</p>\n<p>\nInside a character class, when a backslash is followed by any octal digit, up\nto three octal digits are read to generate a code point. Any subsequent digits\nstand for themselves. The sequences \\8 and \\9 are treated as the literal\ncharacters \"8\" and \"9\".\n</p>\n<p>\nOutside a character class, Perl's handling of a backslash followed by a digit\nother than 0 is complicated by ambiguity, and Perl has changed over time,\ncausing PCRE2 also to change. From PCRE2 release 10.45 there is an option\ncalled PCRE2_EXTRA_PYTHON_OCTAL that causes PCRE2 to use Python's unambiguous\nrules. The next two subsections describe the two sets of rules.\n</p>\n<p>\nFor greater clarity and unambiguity, it is best to avoid following \\ by a\ndigit greater than zero. Instead, use \\o{...} or \\x{...} to specify numerical\ncharacter code points, and \\g{...} to specify backreferences.\n</p>\n<h3>\nPerl rules for non-class backslash 1-9\n</h3>\n<p>\nAll the digits that follow the backslash are read as a decimal number. If the\nnumber is less than 10, begins with the digit 8 or 9, or if there are at least\nthat many previous capture groups in the expression, the entire sequence is\ntaken as a back reference. Otherwise, up to three octal digits are read to form\na character code. For example:\n<pre>\n  \\040   is another way of writing an ASCII space\n  \\40    is the same, provided there are fewer than 40 previous capture groups\n  \\7     is always a backreference\n  \\11    might be a backreference, or another way of writing a tab\n  \\011   is always a tab\n  \\0113  is a tab followed by the character \"3\"\n  \\113   might be a backreference, otherwise the character with octal code 113\n  \\377   might be a backreference, otherwise the value 255 (decimal)\n  \\81    is always a backreference\n</pre>\nNote that octal values of 100 or greater that are specified using this syntax\nmust not be introduced by a leading zero, because no more than three octal\ndigits are ever read.\n</p>\n<h3>\nPython rules for non_class backslash 1-9\n</h3>\n<p>\nIf there are at least three octal digits after the backslash, exactly three are\nread as an octal code point number, but the value must be no greater than\n\\377, even in modes where higher code point values are supported. Any\nsubsequent digits stand for themselves. If there are fewer than three octal\ndigits, the sequence is taken as a decimal back reference. Thus, for example,\n\\12 is always a back reference, independent of how many captures there are in\nthe pattern. An error is generated for a reference to a non-existent capturing\ngroup.\n</p>\n<h3>\nConstraints on character values\n</h3>\n<p>\nCharacters that are specified using octal or hexadecimal numbers are\nlimited to certain values, as follows:\n<pre>\n  8-bit non-UTF mode    no greater than 0xff\n  16-bit non-UTF mode   no greater than 0xffff\n  32-bit non-UTF mode   no greater than 0xffffffff\n  All UTF modes         no greater than 0x10ffff and a valid code point\n</pre>\nInvalid Unicode code points are all those in the range 0xd800 to 0xdfff (the\nso-called \"surrogate\" code points). The check for these can be disabled by the\ncaller of <b>pcre2_compile()</b> by setting the option\nPCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES. However, this is possible only in UTF-8\nand UTF-32 modes, because these values are not representable in UTF-16.\n</p>\n<h3>\nEscape sequences in character classes\n</h3>\n<p>\nAll the sequences that define a single character value can be used both inside\nand outside character classes. In addition, inside a character class, \\b is\ninterpreted as the backspace character (hex 08).\n</p>\n<p>\nWhen not followed by an opening brace, \\N is not allowed in a character class.\n\\B, \\R, and \\X are not special inside a character class. Like other\nunrecognized alphabetic escape sequences, they cause an error. Outside a\ncharacter class, these sequences have different meanings.\n</p>\n<h3>\nUnsupported escape sequences\n</h3>\n<p>\nIn Perl, the sequences \\F, \\l, \\L, \\u, and \\U are recognized by its string\nhandler and used to modify the case of following characters. By default, PCRE2\ndoes not support these escape sequences in patterns. However, if either of the\nPCRE2_ALT_BSUX or PCRE2_EXTRA_ALT_BSUX options is set, \\U matches a \"U\"\ncharacter, and \\u can be used to define a character by code point, as\ndescribed above.\n</p>\n<h3>\nAbsolute and relative backreferences\n</h3>\n<p>\nThe sequence \\g followed by a signed or unsigned number, optionally enclosed\nin braces, is an absolute or relative backreference. A named backreference\ncan be coded as \\g{name}. Backreferences are discussed\n<a href=\"#backreferences\">later,</a>\nfollowing the discussion of\n<a href=\"#group\">parenthesized groups.</a>\n</p>\n<h3>\nAbsolute and relative subroutine calls\n</h3>\n<p>\nFor compatibility with Oniguruma, the non-Perl syntax \\g followed by a name or\na number enclosed either in angle brackets or single quotes, is an alternative\nsyntax for referencing a capture group as a subroutine. Details are discussed\n<a href=\"#onigurumasubroutines\">later.</a>\nNote that \\g{...} (Perl syntax) and \\g&#60;...&#62; (Oniguruma syntax) are <i>not</i>\nsynonymous. The former is a backreference; the latter is a\n<a href=\"#groupsassubroutines\">subroutine</a>\ncall.\n<a name=\"genericchartypes\"></a></p>\n<h3>\nGeneric character types\n</h3>\n<p>\nAnother use of backslash is for specifying generic character types:\n<pre>\n  \\d     any decimal digit\n  \\D     any character that is not a decimal digit\n  \\h     any horizontal white space character\n  \\H     any character that is not a horizontal white space character\n  \\N     any character that is not a newline\n  \\s     any white space character\n  \\S     any character that is not a white space character\n  \\v     any vertical white space character\n  \\V     any character that is not a vertical white space character\n  \\w     any \"word\" character\n  \\W     any \"non-word\" character\n</pre>\nThe \\N escape sequence has the same meaning as\n<a href=\"#fullstopdot\">the \".\" metacharacter</a>\nwhen PCRE2_DOTALL is not set, but setting PCRE2_DOTALL does not change the\nmeaning of \\N. Note that when \\N is followed by an opening brace it has a\ndifferent meaning. See the section entitled\n<a href=\"#digitsafterbackslash\">\"Non-printing characters\"</a>\nabove for details. Perl also uses \\N{name} to specify characters by Unicode\nname; PCRE2 does not support this.\n</p>\n<p>\nEach pair of lower and upper case escape sequences partitions the complete set\nof characters into two disjoint sets. Any given character matches one, and only\none, of each pair. The sequences can appear both inside and outside character\nclasses. They each match one character of the appropriate type. If the current\nmatching point is at the end of the subject string, all of them fail, because\nthere is no character to match.\n</p>\n<p>\nThe default \\s characters are HT (9), LF (10), VT (11), FF (12), CR (13), and\nspace (32), which are defined as white space in the \"C\" locale. This list may\nvary if locale-specific matching is taking place. For example, in some locales\nthe \"non-breaking space\" character (\\xA0) is recognized as white space, and in\nothers the VT character is not.\n</p>\n<p>\nA \"word\" character is an underscore or any character that is a letter or digit.\nBy default, the definition of letters and digits is controlled by PCRE2's\nlow-valued character tables, and may vary if locale-specific matching is taking\nplace (see\n<a href=\"pcre2api.html#localesupport\">\"Locale support\"</a>\nin the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage). For example, in a French locale such as \"fr_FR\" in Unix-like systems,\nor \"french\" in Windows, some character codes greater than 127 are used for\naccented letters, and these are then matched by \\w. The use of locales with\nUnicode is discouraged.\n</p>\n<p>\nBy default, characters whose code points are greater than 127 never match \\d,\n\\s, or \\w, and always match \\D, \\S, and \\W, although this may be different\nfor characters in the range 128-255 when locale-specific matching is happening.\nThese escape sequences retain their original meanings from before Unicode\nsupport was available, mainly for efficiency reasons. If the PCRE2_UCP option\nis set, the behaviour is changed so that Unicode properties are used to\ndetermine character types, as follows:\n<pre>\n  \\d  any character that matches \\p{Nd} (decimal digit)\n  \\s  any character that matches \\p{Z} or \\h or \\v\n  \\w  any character that matches \\p{L}, \\p{N}, \\p{Mn}, or \\p{Pc}\n</pre>\nThe addition of \\p{Mn} (non-spacing mark) and the replacement of an explicit\ntest for underscore with a test for \\p{Pc} (connector punctuation) happened in\nPCRE2 release 10.43. This brings PCRE2 into line with Perl.\n</p>\n<p>\nThe upper case escapes match the inverse sets of characters. Note that \\d\nmatches only decimal digits, whereas \\w matches any Unicode digit, as well as\nother character categories. Note also that PCRE2_UCP affects \\b, and\n\\B because they are defined in terms of \\w and \\W. Matching these sequences\nis noticeably slower when PCRE2_UCP is set.\n</p>\n<p>\nThe effect of PCRE2_UCP on any one of these escape sequences can be negated by\nthe options PCRE2_EXTRA_ASCII_BSD, PCRE2_EXTRA_ASCII_BSS, and\nPCRE2_EXTRA_ASCII_BSW, respectively. These options can be set and reset within\na pattern by means of an internal option setting\n<a href=\"#internaloptions\">(see below).</a>\n</p>\n<p>\nThe sequences \\h, \\H, \\v, and \\V, in contrast to the other sequences, which\nmatch only ASCII characters by default, always match a specific list of code\npoints, whether or not PCRE2_UCP is set. The horizontal space characters are:\n<pre>\n  U+0009     Horizontal tab (HT)\n  U+0020     Space\n  U+00A0     Non-break space\n  U+1680     Ogham space mark\n  U+180E     Mongolian vowel separator\n  U+2000     En quad\n  U+2001     Em quad\n  U+2002     En space\n  U+2003     Em space\n  U+2004     Three-per-em space\n  U+2005     Four-per-em space\n  U+2006     Six-per-em space\n  U+2007     Figure space\n  U+2008     Punctuation space\n  U+2009     Thin space\n  U+200A     Hair space\n  U+202F     Narrow no-break space\n  U+205F     Medium mathematical space\n  U+3000     Ideographic space\n</pre>\nThe vertical space characters are:\n<pre>\n  U+000A     Linefeed (LF)\n  U+000B     Vertical tab (VT)\n  U+000C     Form feed (FF)\n  U+000D     Carriage return (CR)\n  U+0085     Next line (NEL)\n  U+2028     Line separator\n  U+2029     Paragraph separator\n</pre>\nIn 8-bit, non-UTF-8 mode, only the characters with code points less than 256\nare relevant.\n<a name=\"newlineseq\"></a></p>\n<h3>\nNewline sequences\n</h3>\n<p>\nOutside a character class, by default, the escape sequence \\R matches any\nUnicode newline sequence. In 8-bit non-UTF-8 mode \\R is equivalent to the\nfollowing:\n<pre>\n  (?&#62;\\r\\n|\\n|\\x0b|\\f|\\r|\\x85)\n</pre>\nThis is an example of an \"atomic group\", details of which are given\n<a href=\"#atomicgroup\">below.</a>\nThis particular group matches either the two-character sequence CR followed by\nLF, or one of the single characters LF (linefeed, U+000A), VT (vertical tab,\nU+000B), FF (form feed, U+000C), CR (carriage return, U+000D), or NEL (next\nline, U+0085). Because this is an atomic group, the two-character sequence is\ntreated as a single unit that cannot be split.\n</p>\n<p>\nIn other modes, two additional characters whose code points are greater than 255\nare added: LS (line separator, U+2028) and PS (paragraph separator, U+2029).\nUnicode support is not needed for these characters to be recognized.\n</p>\n<p>\nIt is possible to restrict \\R to match only CR, LF, or CRLF (instead of the\ncomplete set of Unicode line endings) by setting the option PCRE2_BSR_ANYCRLF\nat compile time. (BSR is an abbreviation for \"backslash R\".) This can be made\nthe default when PCRE2 is built; if this is the case, the other behaviour can\nbe requested via the PCRE2_BSR_UNICODE option. It is also possible to specify\nthese settings by starting a pattern string with one of the following\nsequences:\n<pre>\n  (*BSR_ANYCRLF)   CR, LF, or CRLF only\n  (*BSR_UNICODE)   any Unicode newline sequence\n</pre>\nThese override the default and the options given to the compiling function.\nNote that these special settings, which are not Perl-compatible, are recognized\nonly at the very start of a pattern, and that they must be in upper case. If\nmore than one of them is present, the last one is used. They can be combined\nwith a change of newline convention; for example, a pattern can start with:\n<pre>\n  (*ANY)(*BSR_ANYCRLF)\n</pre>\nThey can also be combined with the (*UTF) or (*UCP) special sequences. Inside a\ncharacter class, \\R is treated as an unrecognized escape sequence, and causes\nan error.\n<a name=\"uniextseq\"></a></p>\n<h3>\nUnicode character properties\n</h3>\n<p>\nWhen PCRE2 is built with Unicode support (the default), three additional escape\nsequences that match characters with specific properties are available. They\ncan be used in any mode, though in 8-bit and 16-bit non-UTF modes these\nsequences are of course limited to testing characters whose code points are\nless than U+0100 or U+10000, respectively. In 32-bit non-UTF mode, code points\ngreater than 0x10ffff (the Unicode limit) may be encountered. These are all\ntreated as being in the Unknown script and with an unassigned type.\n</p>\n<p>\nMatching characters by Unicode property is not fast, because PCRE2 has to do a\nmultistage table lookup in order to find a character's property. That is why\nthe traditional escape sequences such as \\d and \\w do not use Unicode\nproperties in PCRE2 by default, though you can make them do so by setting the\nPCRE2_UCP option or by starting the pattern with (*UCP).\n</p>\n<p>\nThe extra escape sequences that provide property support are:\n<pre>\n  \\p{<i>xx</i>}   a character with the <i>xx</i> property\n  \\P{<i>xx</i>}   a character without the <i>xx</i> property\n  \\X       a Unicode extended grapheme cluster\n</pre>\nFor compatibility with Perl, negation can be specified by including a\ncircumflex between the opening brace and the property. For example, \\p{^Lu} is\nthe same as \\P{Lu}.\n</p>\n<p>\nIn accordance with Unicode's \"loose matching\" rules, ASCII white space\ncharacters, hyphens, and underscores are ignored in the properties represented\nby <i>xx</i> above. As well as the space character, ASCII white space can be\ntab, linefeed, vertical tab, formfeed, or carriage return.\n</p>\n<p>\nSome properties are specified as a name only; others as a name and a value,\nseparated by a colon or an equals sign. The names and values consist of ASCII\nletters and digits (with one Perl-specific exception, see below). They are not\ncase sensitive. Note, however, that the escapes themselves, \\p and \\P,\n<i>are</i> case sensitive. There are abbreviations for many names. The following\nexamples are all equivalent:\n<pre>\n  \\p{bidiclass=al}\n  \\p{BC=al}\n  \\p{ Bidi_Class : AL }\n  \\p{ Bi-di class = Al }\n  \\P{ ^ Bi-di class = Al }\n</pre>\nThere is support for Unicode script names, Unicode general category properties,\n\"Any\", which matches any character (including newline), Bidi_Class, a number of\nbinary (yes/no) properties, and some special PCRE2 properties (described\n<a href=\"#extraprops\">below).</a>\nCertain other Perl properties such as \"InMusicalSymbols\" are not supported by\nPCRE2. Note that \\P{Any} does not match any characters, so always causes a\nmatch failure.\n</p>\n<h3>\nScript properties for \\p and \\P\n</h3>\n<p>\nThere are three different syntax forms for matching a script. Each Unicode\ncharacter has a basic script and, optionally, a list of other scripts (\"Script\nExtensions\") with which it is commonly used. Using the Adlam script as an\nexample, \\p{sc:Adlam} matches characters whose basic script is Adlam, whereas\n\\p{scx:Adlam} matches, in addition, characters that have Adlam in their\nextensions list. The full names \"script\" and \"script extensions\" for the\nproperty types are recognized and, as for all property specifications, an\nequals sign is an alternative to the colon. If a script name is given without a\nproperty type, for example, \\p{Adlam}, it is treated as \\p{scx:Adlam}. Perl\nchanged to this interpretation at release 5.26 and PCRE2 changed at release\n10.40.\n</p>\n<p>\nUnassigned characters (and in non-UTF 32-bit mode, characters with code points\ngreater than 0x10FFFF) are assigned the \"Unknown\" script. Others that are not\npart of an identified script are lumped together as \"Common\". The current list\nof recognized script names and their 4-character abbreviations can be obtained\nby running this command:\n<pre>\n  pcre2test -LS\n\n</pre>\n</p>\n<h3>\nThe general category property for \\p and \\P\n</h3>\n<p>\nEach character has exactly one Unicode general category property, specified by\na two-letter abbreviation. If only one letter is specified with \\p or \\P, it\nincludes all the general category properties that start with that letter. In\nthis case, in the absence of negation, the curly brackets in the escape\nsequence are optional; these two examples have the same effect:\n<pre>\n  \\p{L}\n  \\pL\n</pre>\nThe following general category property codes are supported:\n<pre>\n  C     Other\n  Cc    Control\n  Cf    Format\n  Cn    Unassigned\n  Co    Private use\n  Cs    Surrogate\n\n  L     Letter\n  Lc    Cased letter\n  Ll    Lower case letter\n  Lm    Modifier letter\n  Lo    Other letter\n  Lt    Title case letter\n  Lu    Upper case letter\n\n  M     Mark\n  Mc    Spacing mark\n  Me    Enclosing mark\n  Mn    Non-spacing mark\n\n  N     Number\n  Nd    Decimal number\n  Nl    Letter number\n  No    Other number\n\n  P     Punctuation\n  Pc    Connector punctuation\n  Pd    Dash punctuation\n  Pe    Close punctuation\n  Pf    Final punctuation\n  Pi    Initial punctuation\n  Po    Other punctuation\n  Ps    Open punctuation\n\n  S     Symbol\n  Sc    Currency symbol\n  Sk    Modifier symbol\n  Sm    Mathematical symbol\n  So    Other symbol\n\n  Z     Separator\n  Zl    Line separator\n  Zp    Paragraph separator\n  Zs    Space separator\n</pre>\nPerl originally used the name L& for the Lc property. This is still supported\nby Perl, but discouraged. PCRE2 also still supports it. This property matches\nany character that has the Lu, Ll, or Lt property, in other words, any letter\nthat is not classified as a modifier or \"other\". From release 10.45 of PCRE2\nthe properties Lu, Ll, and Lt are all treated as Lc when case-independent\nmatching is set by the PCRE2_CASELESS option or (?i) within the pattern. The\nother properties are not affected by caseless matching.\n</p>\n<p>\nThe Cs (Surrogate) property applies only to characters whose code points are in\nthe range U+D800 to U+DFFF. These characters are no different to any other\ncharacter when PCRE2 is not in UTF mode (using the 16-bit or 32-bit library).\nHowever, they are not valid in Unicode strings and so cannot be tested by PCRE2\nin UTF mode, unless UTF validity checking has been turned off (see the\ndiscussion of PCRE2_NO_UTF_CHECK in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\npage).\n</p>\n<p>\nThe long synonyms for property names that Perl supports (such as \\p{Letter})\nare not supported by PCRE2, nor is it permitted to prefix any of these\nproperties with \"Is\".\n</p>\n<p>\nNo character that is in the Unicode table has the Cn (unassigned) property.\nInstead, this property is assumed for any code point that is not in the\nUnicode table.\n</p>\n<h3>\nBinary (yes/no) properties for \\p and \\P\n</h3>\n<p>\nUnicode defines a number of binary properties, that is, properties whose only\nvalues are true or false. You can obtain a list of those that are recognized by\n\\p and \\P, along with their abbreviations, by running this command:\n<pre>\n  pcre2test -LP\n\n</pre>\n</p>\n<h3>\nThe Bidi_Class property for \\p and \\P\n</h3>\n<p>\n<pre>\n  \\p{Bidi_Class:&#60;class&#62;}   matches a character with the given class\n  \\p{BC:&#60;class&#62;}           matches a character with the given class\n</pre>\nThe recognized classes are:\n<pre>\n  AL          Arabic letter\n  AN          Arabic number\n  B           paragraph separator\n  BN          boundary neutral\n  CS          common separator\n  EN          European number\n  ES          European separator\n  ET          European terminator\n  FSI         first strong isolate\n  L           left-to-right\n  LRE         left-to-right embedding\n  LRI         left-to-right isolate\n  LRO         left-to-right override\n  NSM         non-spacing mark\n  ON          other neutral\n  PDF         pop directional format\n  PDI         pop directional isolate\n  R           right-to-left\n  RLE         right-to-left embedding\n  RLI         right-to-left isolate\n  RLO         right-to-left override\n  S           segment separator\n  WS          white space\n</pre>\nAs in all property specifications, an equals sign may be used instead of a\ncolon and the class names are case-insensitive. Only the short names listed\nabove are recognized; PCRE2 does not at present support any long alternatives.\n</p>\n<h3>\nExtended grapheme clusters\n</h3>\n<p>\nThe \\X escape matches any number of Unicode characters that form an \"extended\ngrapheme cluster\", and treats the sequence as an atomic group\n<a href=\"#atomicgroup\">(see below).</a>\nUnicode supports various kinds of composite character by giving each character\na grapheme breaking property, and having rules that use these properties to\ndefine the boundaries of extended grapheme clusters. The rules are defined in\nUnicode Standard Annex 29, \"Unicode Text Segmentation\". Unicode 11.0.0\nabandoned the use of some previous properties that had been used for emojis.\nInstead it introduced various emoji-specific properties. PCRE2 uses only the\nExtended Pictographic property.\n</p>\n<p>\n\\X always matches at least one character. Then it decides whether to add\nadditional characters according to the following rules for ending a cluster:\n</p>\n<p>\n1. End at the end of the subject string.\n</p>\n<p>\n2. Do not end between CR and LF; otherwise end after any control character.\n</p>\n<p>\n3. Do not break Hangul (a Korean script) syllable sequences. Hangul characters\nare of five types: L, V, T, LV, and LVT. An L character may be followed by an\nL, V, LV, or LVT character; an LV or V character may be followed by a V or T\ncharacter; an LVT or T character may be followed only by a T character.\n</p>\n<p>\n4. Do not end before extending characters or spacing marks or the zero-width\njoiner (ZWJ) character. Characters with the \"mark\" property always have the\n\"extend\" grapheme breaking property.\n</p>\n<p>\n5. Do not end after prepend characters.\n</p>\n<p>\n6. Do not end within emoji modifier sequences or emoji ZWJ (zero-width\njoiner) sequences. An emoji ZWJ sequence consists of a character with the\nExtended_Pictographic property, optionally followed by one or more characters\nwith the Extend property, followed by the ZWJ character, followed by another\nExtended_Pictographic character.\n</p>\n<p>\n7. Do not break within emoji flag sequences. That is, do not break between\nregional indicator (RI) characters if there are an odd number of RI characters\nbefore the break point.\n</p>\n<p>\n8. Otherwise, end the cluster.\n<a name=\"extraprops\"></a></p>\n<h3>\nPCRE2's additional properties\n</h3>\n<p>\nAs well as the standard Unicode properties described above, PCRE2 supports four\nmore that make it possible to convert traditional escape sequences such as \\w\nand \\s to use Unicode properties. PCRE2 uses these non-standard, non-Perl\nproperties internally when PCRE2_UCP is set. However, they may also be used\nexplicitly. These properties are:\n<pre>\n  Xan   Any alphanumeric character\n  Xps   Any POSIX space character\n  Xsp   Any Perl space character\n  Xwd   Any Perl \"word\" character\n</pre>\nXan matches characters that have either the L (letter) or the N (number)\nproperty. Xps matches the characters tab, linefeed, vertical tab, form feed, or\ncarriage return, and any other character that has the Z (separator) property\n(this includes the space character). Xsp is the same as Xps; in PCRE1 it used\nto exclude vertical tab, for Perl compatibility, but Perl changed. Xwd matches\nthe same characters as Xan, plus those that match Mn (non-spacing mark) or Pc\n(connector punctuation, which includes underscore).\n</p>\n<p>\nThere is another non-standard property, Xuc, which matches any character that\ncan be represented by a Universal Character Name in C++ and other programming\nlanguages. These are the characters $, @, ` (grave accent), and all characters\nwith Unicode code points greater than or equal to U+00A0, except for the\nsurrogates U+D800 to U+DFFF. Note that most base (ASCII) characters are\nexcluded. (Universal Character Names are of the form \\uHHHH or \\UHHHHHHHH\nwhere H is a hexadecimal digit. Note that the Xuc property does not match these\nsequences but the characters that they represent.)\n<a name=\"resetmatchstart\"></a></p>\n<h3>\nResetting the match start\n</h3>\n<p>\nIn normal use, the escape sequence \\K causes any previously matched characters\nnot to be included in the final matched sequence that is returned. For example,\nthe pattern:\n<pre>\n  foo\\Kbar\n</pre>\nmatches \"foobar\", but reports that it has matched \"bar\". \\K does not interact\nwith anchoring in any way. The pattern:\n<pre>\n  ^foo\\Kbar\n</pre>\nmatches only when the subject begins with \"foobar\" (in single line mode),\nthough it again reports the matched string as \"bar\". This feature is similar to\na lookbehind assertion\n<a href=\"#lookbehind\">(described below),</a>\nbut the part of the pattern that precedes \\K is not constrained to match a\nlimited number of characters, as is required for a lookbehind assertion. The\nuse of \\K does not interfere with the setting of\n<a href=\"#group\">captured substrings.</a>\nFor example, when the pattern\n<pre>\n  (foo)\\Kbar\n</pre>\nmatches \"foobar\", the first substring is still set to \"foo\".\n</p>\n<p>\nFrom version 5.32.0 Perl forbids the use of \\K in lookaround assertions. From\nrelease 10.38 PCRE2 also forbids this by default. However, the\nPCRE2_EXTRA_ALLOW_LOOKAROUND_BSK option can be used when calling\n<b>pcre2_compile()</b> to re-enable the previous behaviour. When this option is\nset, \\K is acted upon when it occurs inside positive assertions, but is\nignored in negative assertions. Note that when a pattern such as (?=ab\\K)\nmatches, the reported start of the match can be greater than the end of the\nmatch. Using \\K in a lookbehind assertion at the start of a pattern can also\nlead to odd effects. For example, consider this pattern:\n<pre>\n  (?&#60;=\\Kfoo)bar\n</pre>\nIf the subject is \"foobar\", a call to <b>pcre2_match()</b> with a starting\noffset of 3 succeeds and reports the matching string as \"foobar\", that is, the\nstart of the reported match is earlier than where the match started.\n<a name=\"smallassertions\"></a></p>\n<h3>\nSimple assertions\n</h3>\n<p>\nThe final use of backslash is for certain simple assertions. An assertion\nspecifies a condition that has to be met at a particular point in a match,\nwithout consuming any characters from the subject string. The use of\ngroups for more complicated assertions is described\n<a href=\"#bigassertions\">below.</a>\nThe backslashed assertions are:\n<pre>\n  \\b     matches at a word boundary\n  \\B     matches when not at a word boundary\n  \\A     matches at the start of the subject\n  \\Z     matches at the end of the subject\n          also matches before a newline at the end of the subject\n  \\z     matches only at the end of the subject\n  \\G     matches at the first matching position in the subject\n</pre>\nInside a character class, \\b has a different meaning; it matches the backspace\ncharacter. If any other of these assertions appears in a character class, an\n\"invalid escape sequence\" error is generated.\n</p>\n<p>\nA word boundary is a position in the subject string where the current character\nand the previous character do not both match \\w or \\W (i.e. one matches\n\\w and the other matches \\W), or the start or end of the string if the\nfirst or last character matches \\w, respectively. When PCRE2 is built with\nUnicode support, the meanings of \\w and \\W can be changed by setting the\nPCRE2_UCP option. When this is done, it also affects \\b and \\B. Neither PCRE2\nnor Perl has a separate \"start of word\" or \"end of word\" metasequence. However,\nwhatever follows \\b normally determines which it is. For example, the fragment\n\\ba matches \"a\" at the start of a word.\n</p>\n<p>\nThe \\A, \\Z, and \\z assertions differ from the traditional circumflex and\ndollar (described in the next section) in that they only ever match at the very\nstart and end of the subject string, whatever options are set. Thus, they are\nindependent of multiline mode. These three assertions are not affected by the\nPCRE2_NOTBOL or PCRE2_NOTEOL options, which affect only the behaviour of the\ncircumflex and dollar metacharacters. However, if the <i>startoffset</i>\nargument of <b>pcre2_match()</b> is non-zero, indicating that matching is to\nstart at a point other than the beginning of the subject, \\A can never match.\nThe difference between \\Z and \\z is that \\Z matches before a newline at the\nend of the string as well as at the very end, whereas \\z matches only at the\nend.\n</p>\n<p>\nThe \\G assertion is true only when the current matching position is at the\nstart point of the matching process, as specified by the <i>startoffset</i>\nargument of <b>pcre2_match()</b>. It differs from \\A when the value of\n<i>startoffset</i> is non-zero. By calling <b>pcre2_match()</b> multiple times\nwith appropriate arguments, you can mimic Perl's /g option, and it is in this\nkind of implementation where \\G can be useful.\n</p>\n<p>\nNote, however, that PCRE2's implementation of \\G, being true at the starting\ncharacter of the matching process, is subtly different from Perl's, which\ndefines it as true at the end of the previous match. In Perl, these can be\ndifferent when the previously matched string was empty. Because PCRE2 does just\none match at a time, it cannot reproduce this behaviour.\n</p>\n<p>\nIf all the alternatives of a pattern begin with \\G, the expression is anchored\nto the starting match position, and the \"anchored\" flag is set in the compiled\nregular expression.\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">CIRCUMFLEX AND DOLLAR</a></h2>\n<p>\nThe circumflex and dollar metacharacters are zero-width assertions. That is,\nthey test for a particular condition being true without consuming any\ncharacters from the subject string. These two metacharacters are concerned with\nmatching the starts and ends of lines. If the newline convention is set so that\nonly the two-character sequence CRLF is recognized as a newline, isolated CR\nand LF characters are treated as ordinary data characters, and are not\nrecognized as newlines.\n</p>\n<p>\nOutside a character class, in the default matching mode, the circumflex\ncharacter is an assertion that is true only if the current matching point is at\nthe start of the subject string. If the <i>startoffset</i> argument of\n<b>pcre2_match()</b> is non-zero, or if PCRE2_NOTBOL is set, circumflex can\nnever match if the PCRE2_MULTILINE option is unset. Inside a character class,\ncircumflex has an entirely different meaning\n<a href=\"#characterclass\">(see below).</a>\n</p>\n<p>\nCircumflex need not be the first character of the pattern if a number of\nalternatives are involved, but it should be the first thing in each alternative\nin which it appears if the pattern is ever to match that branch. If all\npossible alternatives start with a circumflex, that is, if the pattern is\nconstrained to match only at the start of the subject, it is said to be an\n\"anchored\" pattern. (There are also other constructs that can cause a pattern\nto be anchored.)\n</p>\n<p>\nThe dollar character is an assertion that is true only if the current matching\npoint is at the end of the subject string, or immediately before a newline at\nthe end of the string (by default), unless PCRE2_NOTEOL is set. Note, however,\nthat it does not actually match the newline. Dollar need not be the last\ncharacter of the pattern if a number of alternatives are involved, but it\nshould be the last item in any branch in which it appears. Dollar has no\nspecial meaning in a character class.\n</p>\n<p>\nThe meaning of dollar can be changed so that it matches only at the very end of\nthe string, by setting the PCRE2_DOLLAR_ENDONLY option at compile time. This\ndoes not affect the \\Z assertion.\n</p>\n<p>\nThe meanings of the circumflex and dollar metacharacters are changed if the\nPCRE2_MULTILINE option is set. When this is the case, a dollar character\nmatches before any newlines in the string, as well as at the very end, and a\ncircumflex matches immediately after internal newlines as well as at the start\nof the subject string. It does not match after a newline that ends the string,\nfor compatibility with Perl. However, this can be changed by setting the\nPCRE2_ALT_CIRCUMFLEX option.\n</p>\n<p>\nFor example, the pattern /^abc$/ matches the subject string \"def\\nabc\" (where\n\\n represents a newline) in multiline mode, but not otherwise. Consequently,\npatterns that are anchored in single line mode because all branches start with\n^ are not anchored in multiline mode, and a match for circumflex is possible\nwhen the <i>startoffset</i> argument of <b>pcre2_match()</b> is non-zero. The\nPCRE2_DOLLAR_ENDONLY option is ignored if PCRE2_MULTILINE is set.\n</p>\n<p>\nWhen the newline convention (see\n<a href=\"#newlines\">\"Newline conventions\"</a>\nbelow) recognizes the two-character sequence CRLF as a newline, this is\npreferred, even if the single characters CR and LF are also recognized as\nnewlines. For example, if the newline convention is \"any\", a multiline mode\ncircumflex matches before \"xyz\" in the string \"abc\\r\\nxyz\" rather than after\nCR, even though CR on its own is a valid newline. (It also matches at the very\nstart of the string, of course.)\n</p>\n<p>\nNote that the sequences \\A, \\Z, and \\z can be used to match the start and\nend of the subject in both modes, and if all branches of a pattern start with\n\\A it is always anchored, whether or not PCRE2_MULTILINE is set.\n<a name=\"fullstopdot\"></a></p>\n<h2><a name=\"SEC7\" href=\"#TOC1\">FULL STOP (PERIOD, DOT) AND \\N</a></h2>\n<p>\nOutside a character class, a dot in the pattern matches any one character in\nthe subject string except (by default) a character that signifies the end of a\nline. One or more characters may be specified as line terminators (see\n<a href=\"#newlines\">\"Newline conventions\"</a>\nabove).\n</p>\n<p>\nDot never matches a single line-ending character. When the two-character\nsequence CRLF is the only line ending, dot does not match CR if it is\nimmediately followed by LF, but otherwise it matches all characters (including\nisolated CRs and LFs). When ANYCRLF is selected for line endings, no occurrences\nof CR of LF match dot. When all Unicode line endings are being recognized, dot\ndoes not match CR or LF or any of the other line ending characters.\n</p>\n<p>\nThe behaviour of dot with regard to newlines can be changed. If the\nPCRE2_DOTALL option is set, a dot matches any one character, without exception.\nIf the two-character sequence CRLF is present in the subject string, it takes\ntwo dots to match it.\n</p>\n<p>\nThe handling of dot is entirely independent of the handling of circumflex and\ndollar, the only relationship being that they both involve newlines. Dot has no\nspecial meaning in a character class.\n</p>\n<p>\nThe escape sequence \\N when not followed by an opening brace behaves like a\ndot, except that it is not affected by the PCRE2_DOTALL option. In other words,\nit matches any character except one that signifies the end of a line.\n</p>\n<p>\nWhen \\N is followed by an opening brace it has a different meaning. See the\nsection entitled\n<a href=\"#digitsafterbackslash\">\"Non-printing characters\"</a>\nabove for details. Perl also uses \\N{name} to specify characters by Unicode\nname; PCRE2 does not support this.\n</p>\n<h2><a name=\"SEC8\" href=\"#TOC1\">MATCHING A SINGLE CODE UNIT</a></h2>\n<p>\nOutside a character class, the escape sequence \\C matches any one code unit,\nwhether or not a UTF mode is set. In the 8-bit library, one code unit is one\nbyte; in the 16-bit library it is a 16-bit unit; in the 32-bit library it is a\n32-bit unit. Unlike a dot, \\C always matches line-ending characters. The\nfeature is provided in Perl in order to match individual bytes in UTF-8 mode,\nbut it is unclear how it can usefully be used.\n</p>\n<p>\nBecause \\C breaks up characters into individual code units, matching one unit\nwith \\C in UTF-8 or UTF-16 mode means that the rest of the string may start\nwith a malformed UTF character. This has undefined results, because PCRE2\nassumes that it is matching character by character in a valid UTF string (by\ndefault it checks the subject string's validity at the start of processing\nunless the PCRE2_NO_UTF_CHECK or PCRE2_MATCH_INVALID_UTF option is used).\n</p>\n<p>\nAn application can lock out the use of \\C by setting the\nPCRE2_NEVER_BACKSLASH_C option when compiling a pattern. It is also possible to\nbuild PCRE2 with the use of \\C permanently disabled.\n</p>\n<p>\nPCRE2 does not allow \\C to appear in lookbehind assertions\n<a href=\"#lookbehind\">(described below)</a>\nin UTF-8 or UTF-16 modes, because this would make it impossible to calculate\nthe length of the lookbehind. Neither the alternative matching function\n<b>pcre2_dfa_match()</b> nor the JIT optimizer support \\C in these UTF modes.\nThe former gives a match-time error; the latter fails to optimize and so the\nmatch is always run using the interpreter.\n</p>\n<p>\nIn the 32-bit library, however, \\C is always supported (when not explicitly\nlocked out) because it always matches a single code unit, whether or not UTF-32\nis specified.\n</p>\n<p>\nIn general, the \\C escape sequence is best avoided. However, one way of using\nit that avoids the problem of malformed UTF-8 or UTF-16 characters is to use a\nlookahead to check the length of the next character, as in this pattern, which\ncould be used with a UTF-8 string (ignore white space and line breaks):\n<pre>\n  (?| (?=[\\x00-\\x7f])(\\C) |\n      (?=[\\x80-\\x{7ff}])(\\C)(\\C) |\n      (?=[\\x{800}-\\x{ffff}])(\\C)(\\C)(\\C) |\n      (?=[\\x{10000}-\\x{1fffff}])(\\C)(\\C)(\\C)(\\C))\n</pre>\nIn this example, a group that starts with (?| resets the capturing parentheses\nnumbers in each alternative (see\n<a href=\"#dupgroupnumber\">\"Duplicate Group Numbers\"</a>\nbelow). The assertions at the start of each branch check the next UTF-8\ncharacter for values whose encoding uses 1, 2, 3, or 4 bytes, respectively. The\ncharacter's individual bytes are then captured by the appropriate number of\n\\C groups.\n<a name=\"characterclass\"></a></p>\n<h2><a name=\"SEC9\" href=\"#TOC1\">SQUARE BRACKETS AND CHARACTER CLASSES</a></h2>\n<p>\nAn opening square bracket introduces a character class, terminated by a closing\nsquare bracket. A closing square bracket on its own is not special by default.\nIf a closing square bracket is required as a member of the class, it should be\nthe first data character in the class (after an initial circumflex, if present)\nor escaped with a backslash. This means that, by default, an empty class cannot\nbe defined. However, if the PCRE2_ALLOW_EMPTY_CLASS option is set, a closing\nsquare bracket at the start does end the (empty) class.\n</p>\n<p>\nA character class matches a single character in the subject. A matched\ncharacter must be in the set of characters defined by the class, unless the\nfirst character in the class definition is a circumflex, in which case the\nsubject character must not be in the set defined by the class. If a circumflex\nis actually required as a member of the class, ensure it is not the first\ncharacter, or escape it with a backslash.\n</p>\n<p>\nFor example, the character class [aeiou] matches any lower case English vowel,\nwhereas [^aeiou] matches all other characters. Note that a circumflex is just a\nconvenient notation for specifying the characters that are in the class by\nenumerating those that are not. A class that starts with a circumflex is not an\nassertion; it still consumes a character from the subject string, and therefore\nit fails to match if the current pointer is at the end of the string.\n</p>\n<p>\nCharacters in a class may be specified by their code points using \\o, \\x, or\n\\N{U+hh..} in the usual way. When caseless matching is set, any letters in a\nclass represent both their upper case and lower case versions, so for example,\na caseless [aeiou] matches \"A\" as well as \"a\", and a caseless [^aeiou] does not\nmatch \"A\", whereas a caseful version would. Note that there are two ASCII\ncharacters, K and S, that, in addition to their lower case ASCII equivalents,\nare case-equivalent with Unicode U+212A (Kelvin sign) and U+017F (long S)\nrespectively when either PCRE2_UTF or PCRE2_UCP is set. If you do not want\nthese ASCII/non-ASCII case equivalences, you can suppress them by setting\nPCRE2_EXTRA_CASELESS_RESTRICT, either as an option in a compile context, or by\nincluding (*CASELESS_RESTRICT) or (?r) within a pattern.\n</p>\n<p>\nCharacters that might indicate line breaks are never treated in any special way\nwhen matching character classes, whatever line-ending sequence is in use, and\nwhatever setting of the PCRE2_DOTALL and PCRE2_MULTILINE options is used. A\nclass such as [^a] always matches one of these characters.\n</p>\n<p>\nThe generic character type escape sequences \\d, \\D, \\h, \\H, \\p, \\P, \\s,\n\\S, \\v, \\V, \\w, and \\W may appear in a character class, and add the\ncharacters that they match to the class. For example, [\\dABCDEF] matches any\nhexadecimal digit. In UTF modes, the PCRE2_UCP option affects the meanings of\n\\d, \\s, \\w and their upper case partners, just as it does when they appear\noutside a character class, as described in the section entitled\n<a href=\"#genericchartypes\">\"Generic character types\"</a>\nabove. The escape sequence \\b has a different meaning inside a character\nclass; it matches the backspace character. The sequences \\B, \\R, and \\X are\nnot special inside a character class. Like any other unrecognized escape\nsequences, they cause an error. The same is true for \\N when not followed by\nan opening brace.\n</p>\n<p>\nThe minus (hyphen) character can be used to specify a range of characters in a\ncharacter class. For example, [d-m] matches any letter between d and m,\ninclusive. If a minus character is required in a class, it must be escaped with\na backslash or appear in a position where it cannot be interpreted as\nindicating a range, typically as the first or last character in the class,\nor immediately after a range. For example, [b-d-z] matches letters in the range\nb to d, a hyphen character, or z.\n</p>\n<p>\nThere is some special treatment for alphabetic ranges in EBCDIC environments;\nsee the section\n<a href=\"#ebcdicenvironments\">\"EBCDIC environments\"</a>\nbelow.\n</p>\n<p>\nPerl treats a hyphen as a literal if it appears before or after a POSIX class\n(see below) or before or after a character type escape such as \\d or \\H.\nHowever, unless the hyphen is the last character in the class, Perl outputs a\nwarning in its warning mode, as this is most likely a user error. As PCRE2 has\nno facility for warning, an error is given in these cases.\n</p>\n<p>\nIt is not possible to have the literal character \"]\" as the end character of a\nrange. A pattern such as [W-]46] is interpreted as a class of two characters\n(\"W\" and \"-\") followed by a literal string \"46]\", so it would match \"W46]\" or\n\"-46]\". However, if the \"]\" is escaped with a backslash it is interpreted as\nthe end of a range, so [W-\\]46] is interpreted as a class containing a range\nand two other characters. The octal or hexadecimal representation of \"]\" can\nalso be used to end a range.\n</p>\n<p>\nRanges normally include all code points between the start and end characters,\ninclusive. They can also be used for code points specified numerically, for\nexample [\\000-\\037]. Ranges can include any characters that are valid for the\ncurrent mode. In any UTF mode, the so-called \"surrogate\" characters (those\nwhose code points lie between 0xd800 and 0xdfff inclusive) may not be specified\nexplicitly by default (the PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES option disables\nthis check). However, ranges such as [\\x{d7ff}-\\x{e000}], which include the\nsurrogates, are always permitted.\n</p>\n<p>\nIf a range that includes letters is used when caseless matching is set, it\nmatches the letters in either case. For example, [W-c] is equivalent to\n[][\\\\^_`wxyzabc], matched caselessly, and in a non-UTF mode, if character\ntables for a French locale are in use, [\\xc8-\\xcb] matches accented E\ncharacters in both cases.\n</p>\n<p>\nA circumflex can conveniently be used with the upper case character types to\nspecify a more restricted set of characters than the matching lower case type.\nFor example, the class [^\\W_] matches any letter or digit, but not underscore,\nwhereas [\\w] includes underscore. A positive character class should be read as\n\"something OR something OR ...\" and a negative class as \"NOT something AND NOT\nsomething AND NOT ...\".\n</p>\n<p>\nThe metacharacters that are recognized in character classes are backslash,\nhyphen (when it can be interpreted as specifying a range), circumflex\n(only at the start), and the terminating closing square bracket. An opening\nsquare bracket is also special when it can be interpreted as introducing a\nPOSIX class (see\n<a href=\"#posixclasses\">\"Posix character classes\"</a>\nbelow), or a special compatibility feature (see\n<a href=\"#wordboundcompat\">\"Compatibility feature for word boundaries\"</a>\nbelow. Escaping any non-alphanumeric character in a class turns it into a\nliteral, whether or not it would otherwise be a metacharacter.\n</p>\n<h2><a name=\"SEC10\" href=\"#TOC1\">PERL EXTENDED CHARACTER CLASSES</a></h2>\n<p>\nFrom release 10.45 PCRE2 supports Perl's (?[...]) extended character class\nsyntax. This can be used to perform set operations such as intersection on\ncharacter classes.\n</p>\n<p>\nThe syntax permitted within (?[...]) is quite different to ordinary character\nclasses. Inside the extended class, there is an expression syntax consisting of\n\"atoms\", operators, and ordinary parentheses \"()\" used for grouping. Such\nclasses always have the Perl /xx modifier (PCRE2 option PCRE2_EXTENDED_MORE)\nturned on within them. This means that literal space and tab characters are\nignored everywhere in the class.\n</p>\n<p>\nThe allowed atoms are individual characters specified by escape sequences such\nas \\n or \\x{123}, character types such as \\d, POSIX classes such as\n[:alpha:], and nested ordinary (non-extended) character classes. For example,\nin (?[\\d & [...]]) the nested class [...] follows the usual rules for ordinary\ncharacter classes, in which parentheses are not metacharacters, and character\nliterals and ranges are permitted.\n</p>\n<p>\nCharacter literals and ranges may not appear outside a nested ordinary\ncharacter class because they are not atoms in the extended syntax. The extended\nsyntax does not introduce any additional escape sequences, so (?[\\y]) is an\nunknown escape, as it would be in [\\y].\n</p>\n<p>\nIn the extended syntax, ^ does not negate a class (except within an\nordinary class nested inside an extended class); it is instead a binary\noperator.\n</p>\n<p>\nThe binary operators are \"&\" (intersection), \"|\" or \"+\" (union), \"-\"\n(subtraction) and \"^\" (symmetric difference). These are left-associative and\n\"&\" has higher (tighter) precedence, while the others have equal lower\nprecedence. The one prefix unary operator is \"!\" (complement), with highest\nprecedence.\n</p>\n<h2><a name=\"SEC11\" href=\"#TOC1\">UTS#18 EXTENDED CHARACTER CLASSES</a></h2>\n<p>\nThe PCRE2_ALT_EXTENDED_CLASS option enables an alternative to Perl's (?[...])\nsyntax, allowing instead extended class behaviour inside ordinary [...]\ncharacter classes. This altered syntax for [...] classes is loosely described\nby the Unicode standard UTS#18. The PCRE2_ALT_EXTENDED_CLASS option does not\nprevent use of (?[...]) classes; it just changes the meaning of all\n[...] classes that are not nested inside a Perl (?[...]) class.\n</p>\n<p>\nFirstly, in ordinary Perl [...] syntax, an expression such as \"[a[]\" is a\ncharacter class with two literal characters \"a\" and \"[\", but in UTS#18 extended\nclasses the \"[\" character becomes an additional metacharacter within classes,\ndenoting the start of a nested class, so a literal \"[\" must be escaped as \"\\[\".\n</p>\n<p>\nSecondly, within the UTS#18 extended syntax, there are operators \"||\", \"&&\",\n\"--\" and \"~~\" which denote character class union, intersection, subtraction,\nand symmetric difference respectively. In standard Perl syntax, these would\nsimply be needlessly-repeated literals (except for \"--\" which could be the\nstart or end of a range). In UTS#18 extended classes these operators can be used\nin constructs such as [\\p{L}--[QW]] for \"Unicode letters, other than Q and W\".\nA literal \"-\" at the start or end of a range must be escaped, so while \"[--1]\"\nin Perl syntax is the range from hyphen to \"1\", it must be escaped as \"[\\--1]\"\nin UTS#18 extended classes.\n</p>\n<p>\nUnlike Perl's (?[...]) extended classes, the PCRE2_EXTENDED_MORE option to\nignore space and tab characters is not automatically enabled for UTS#18\nextended classes, but it is honoured if set.\n</p>\n<p>\nExtended UTS#18 classes can be nested, and nested classes are themselves\nextended classes (unlike Perl, where nested classes must be simple classes).\nFor example, [\\p{L}&&[\\p{Thai}||\\p{Greek}]] matches any letter that is in\nthe Thai or Greek scripts. Note that this means that no special grouping\ncharacters (such as the parentheses used in Perl's (?[...]) class syntax) are\nneeded.\n</p>\n<p>\nIndividual class items (literal characters, literal ranges, properties such as\n\\d or \\p{...}, and nested classes) can be combined by juxtaposition or by an\noperator. Juxtaposition is the implicit union operator, and binds more tightly\nthan any explicit operator. Thus a sequence of literals and/or ranges behaves\nas if it is enclosed in square brackets. For example, [A-Z0-9&&[^E8]] is the\nsame as [[A-Z0-9]&&[^E8]], which matches any upper case alphanumeric character\nexcept \"E\" or \"8\".\n</p>\n<p>\nPrecedence between the explicit operators is not defined, so mixing operators\nis a syntax error. For example, [A&&B--C] is an error, but [A&&[B--C]] is\nvalid.\n</p>\n<p>\nThis is an emerging syntax which is being adopted gradually across the regex\necosystem: for example JavaScript adopted the \"/v\" flag in ECMAScript 2024;\nPython's \"re\" module reserves the syntax for future use with a FutureWarning\nfor unescaped use of \"[\" as a literal within character classes. Due to UTS#18\nproviding insufficient guidance, engines interpret the syntax differently.\nRust's \"regex\" crate and Python's \"regex\" PyPi module both implement UTS#18\nextended classes, but with slight incompatibilities ([A||B&&C] is parsed as\n[A||[B&&C]] in Python's \"regex\" but as [[A||B]&&C] in Rust's \"regex\").\n</p>\n<p>\nPCRE2's syntax adds syntax restrictions similar to ECMASCript's /v flag, so\nthat all the UTS#18 extended classes accepted as valid by PCRE2 have the\nproperty that they are interpreted either with the same behaviour, or as\ninvalid, by all other major engines. Please file an issue if you are aware of\ncross-engine differences in behaviour between PCRE2 and another major engine.\n<a name=\"posixclasses\"></a></p>\n<h2><a name=\"SEC12\" href=\"#TOC1\">POSIX CHARACTER CLASSES</a></h2>\n<p>\nPerl supports the POSIX notation for character classes. This uses names\nenclosed by [: and :] within the enclosing square brackets. PCRE2 also supports\nthis notation, in both ordinary and extended classes. For example,\n<pre>\n  [01[:alpha:]%]\n</pre>\nmatches \"0\", \"1\", any alphabetic character, or \"%\". The supported class names\nare:\n<pre>\n  alnum    letters and digits\n  alpha    letters\n  ascii    character codes 0 - 127\n  blank    space or tab only\n  cntrl    control characters\n  digit    decimal digits (same as \\d)\n  graph    printing characters, excluding space\n  lower    lower case letters\n  print    printing characters, including space\n  punct    printing characters, excluding letters and digits and space\n  space    white space (the same as \\s from PCRE2 8.34)\n  upper    upper case letters\n  word     \"word\" characters (same as \\w)\n  xdigit   hexadecimal digits\n</pre>\nThe default \"space\" characters are HT (9), LF (10), VT (11), FF (12), CR (13),\nand space (32). If locale-specific matching is taking place, the list of space\ncharacters may be different; there may be fewer or more of them. \"Space\" and\n\\s match the same set of characters, as do \"word\" and \\w.\n</p>\n<p>\nThe name \"word\" is a Perl extension, and \"blank\" is a GNU extension from Perl\n5.8. Another Perl extension is negation, which is indicated by a ^ character\nafter the colon. For example,\n<pre>\n  [12[:^digit:]]\n</pre>\nmatches \"1\", \"2\", or any non-digit. PCRE2 (and Perl) also recognize the POSIX\nsyntax [.ch.] and [=ch=] where \"ch\" is a \"collating element\", but these are not\nsupported, and an error is given if they are encountered.\n</p>\n<p>\nBy default, characters with values greater than 127 do not match any of the\nPOSIX character classes, although this may be different for characters in the\nrange 128-255 when locale-specific matching is happening. However, in UCP mode,\nunless certain options are set (see below), some of the classes are changed so\nthat Unicode character properties are used. This is achieved by replacing\nPOSIX classes with other sequences, as follows:\n<pre>\n  [:alnum:]  becomes  \\p{Xan}\n  [:alpha:]  becomes  \\p{L}\n  [:blank:]  becomes  \\h\n  [:cntrl:]  becomes  \\p{Cc}\n  [:digit:]  becomes  \\p{Nd}\n  [:lower:]  becomes  \\p{Ll}\n  [:space:]  becomes  \\p{Xps}\n  [:upper:]  becomes  \\p{Lu}\n  [:word:]   becomes  \\p{Xwd}\n</pre>\nNegated versions, such as [:^alpha:] use \\P instead of \\p. Four other POSIX\nclasses are handled specially in UCP mode:\n</p>\n<p>\n[:graph:]\nThis matches characters that have glyphs that mark the page when printed. In\nUnicode property terms, it matches all characters with the L, M, N, P, S, or Cf\nproperties, except for:\n<pre>\n  U+061C           Arabic Letter Mark\n  U+180E           Mongolian Vowel Separator\n  U+2066 - U+2069  Various \"isolate\"s\n\n</pre>\n</p>\n<p>\n[:print:]\nThis matches the same characters as [:graph:] plus space characters that are\nnot controls, that is, characters with the Zs property.\n</p>\n<p>\n[:punct:]\nThis matches all characters that have the Unicode P (punctuation) property,\nplus those characters with code points less than 256 that have the S (Symbol)\nproperty.\n</p>\n<p>\n[:xdigit:]\nIn addition to the ASCII hexadecimal digits, this also matches the \"fullwidth\"\nversions of those characters, whose Unicode code points start at U+FF10. This\nis a change that was made in PCRE2 release 10.43 for Perl compatibility.\n</p>\n<p>\nThe other POSIX classes are unchanged by PCRE2_UCP, and match only characters\nwith code points less than 256.\n</p>\n<p>\nThere are two options that can be used to restrict the POSIX classes to ASCII\ncharacters when PCRE2_UCP is set. The option PCRE2_EXTRA_ASCII_DIGIT affects\njust [:digit:] and [:xdigit:]. Within a pattern, this can be set and unset by\n(?aT) and (?-aT). The PCRE2_EXTRA_ASCII_POSIX option disables UCP processing\nfor all POSIX classes, including [:digit:] and [:xdigit:]. Within a pattern,\n(?aP) and (?-aP) set and unset both these options for consistency.\n<a name=\"wordboundcompat\"></a></p>\n<h2><a name=\"SEC13\" href=\"#TOC1\">COMPATIBILITY FEATURE FOR WORD BOUNDARIES</a></h2>\n<p>\nIn the POSIX.2 compliant library that was included in 4.4BSD Unix, the ugly\nsyntax [[:&#60;:]] and [[:&#62;:]] is used for matching \"start of word\" and \"end of\nword\". PCRE2 treats these items as follows:\n<pre>\n  [[:&#60;:]]  is converted to  \\b(?=\\w)\n  [[:&#62;:]]  is converted to  \\b(?&#60;=\\w)\n</pre>\nOnly these exact character sequences are recognized. A sequence such as\n[a[:&#60;:]b] provokes error for an unrecognized POSIX class name. This support is\nnot compatible with Perl. It is provided to help migrations from other\nenvironments, and is best not used in any new patterns. Note that \\b matches\nat the start and the end of a word (see\n<a href=\"#smallassertions\">\"Simple assertions\"</a>\nabove), and in a Perl-style pattern the preceding or following character\nnormally shows which is wanted, without the need for the assertions that are\nused above in order to give exactly the POSIX behaviour. Note also that the\nPCRE2_UCP option changes the meaning of \\w (and therefore \\b) by default, so\nit also affects these POSIX sequences.\n</p>\n<h2><a name=\"SEC14\" href=\"#TOC1\">VERTICAL BAR</a></h2>\n<p>\nVertical bar characters are used to separate alternative patterns. For example,\nthe pattern\n<pre>\n  gilbert|sullivan\n</pre>\nmatches either \"gilbert\" or \"sullivan\". Any number of alternatives may appear,\nand an empty alternative is permitted (matching the empty string). The matching\nprocess tries each alternative in turn, from left to right, and the first one\nthat succeeds is used. If the alternatives are within a group\n<a href=\"#group\">(defined below),</a>\n\"succeeds\" means matching the rest of the main pattern as well as the\nalternative in the group.\n<a name=\"internaloptions\"></a></p>\n<h2><a name=\"SEC15\" href=\"#TOC1\">INTERNAL OPTION SETTING</a></h2>\n<p>\nThe settings of several options can be changed within a pattern by a sequence\nof letters enclosed between \"(?\" and \")\". The following are Perl-compatible,\nand are described in detail in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation. The option letters are:\n<pre>\n  i  for PCRE2_CASELESS\n  m  for PCRE2_MULTILINE\n  n  for PCRE2_NO_AUTO_CAPTURE\n  s  for PCRE2_DOTALL\n  x  for PCRE2_EXTENDED\n  xx for PCRE2_EXTENDED_MORE\n</pre>\nFor example, (?im) sets caseless, multiline matching. It is also possible to\nunset these options by preceding the relevant letters with a hyphen, for\nexample (?-im). The two \"extended\" options are not independent; unsetting\neither one cancels the effects of both of them.\n</p>\n<p>\nA combined setting and unsetting such as (?im-sx), which sets PCRE2_CASELESS\nand PCRE2_MULTILINE while unsetting PCRE2_DOTALL and PCRE2_EXTENDED, is also\npermitted. Only one hyphen may appear in the options string. If a letter\nappears both before and after the hyphen, the option is unset. An empty options\nsetting \"(?)\" is allowed. Needless to say, it has no effect.\n</p>\n<p>\nIf the first character following (? is a circumflex, it causes all of the above\noptions to be unset. Letters may follow the circumflex to cause some options to\nbe re-instated, but a hyphen may not appear.\n</p>\n<p>\nSome PCRE2-specific options can be changed by the same mechanism using these\npairs or individual letters:\n<pre>\n  aD for PCRE2_EXTRA_ASCII_BSD\n  aS for PCRE2_EXTRA_ASCII_BSS\n  aW for PCRE2_EXTRA_ASCII_BSW\n  aP for PCRE2_EXTRA_ASCII_POSIX and PCRE2_EXTRA_ASCII_DIGIT\n  aT for PCRE2_EXTRA_ASCII_DIGIT\n  r  for PCRE2_EXTRA_CASELESS_RESTRICT\n  J  for PCRE2_DUPNAMES\n  U  for PCRE2_UNGREEDY\n</pre>\nHowever, except for 'r', these are not unset by (?^), which is equivalent to\n(?-imnrsx). If 'a' is not followed by any of the upper case letters shown\nabove, it sets (or unsets) all the ASCII options.\n</p>\n<p>\nPCRE2_EXTRA_ASCII_DIGIT has no additional effect when PCRE2_EXTRA_ASCII_POSIX\nis set, but including it in (?aP) means that (?-aP) suppresses all ASCII\nrestrictions for POSIX classes.\n</p>\n<p>\nWhen one of these option changes occurs at top level (that is, not inside group\nparentheses), the change applies until a subsequent change, or the end of the\npattern. An option change within a group (see below for a description of\ngroups) affects only that part of the group that follows it. At the end of the\ngroup these options are reset to the state they were before the group. For\nexample,\n<pre>\n  (a(?i)b)c\n</pre>\nmatches abc and aBc and no other strings (assuming PCRE2_CASELESS is not set\nexternally). Any changes made in one alternative do carry on into subsequent\nbranches within the same group. For example,\n<pre>\n  (a(?i)b|c)\n</pre>\nmatches \"ab\", \"aB\", \"c\", and \"C\", even though when matching \"C\" the first\nbranch is abandoned before the option setting. This is because the effects of\noption settings happen at compile time. There would be some very weird\nbehaviour otherwise.\n</p>\n<p>\nAs a convenient shorthand, if any option settings are required at the start of\na non-capturing group (see the next section), the option letters may\nappear between the \"?\" and the \":\". Thus the two patterns\n<pre>\n  (?i:saturday|sunday)\n  (?:(?i)saturday|sunday)\n</pre>\nmatch exactly the same set of strings.\n</p>\n<p>\n<b>Note:</b> There are other PCRE2-specific options, applying to the whole\npattern, which can be set by the application when the compiling function is\ncalled. In addition, the pattern can contain special leading sequences such as\n(*CRLF) to override what the application has set or what has been defaulted.\nDetails are given in the section entitled\n<a href=\"#newlineseq\">\"Newline sequences\"</a>\nabove. There are also the (*UTF) and (*UCP) leading sequences that can be used\nto set UTF and Unicode property modes; they are equivalent to setting the\nPCRE2_UTF and PCRE2_UCP options, respectively. However, the application can set\nthe PCRE2_NEVER_UTF or PCRE2_NEVER_UCP options, which lock out the use of the\n(*UTF) and (*UCP) sequences.\n<a name=\"group\"></a></p>\n<h2><a name=\"SEC16\" href=\"#TOC1\">GROUPS</a></h2>\n<p>\nGroups are delimited by parentheses (round brackets), which can be nested.\nTurning part of a pattern into a group does two things:\n<br>\n<br>\n1. It localizes a set of alternatives. For example, the pattern\n<pre>\n  cat(aract|erpillar|)\n</pre>\nmatches \"cataract\", \"caterpillar\", or \"cat\". Without the parentheses, it would\nmatch \"cataract\", \"erpillar\" or an empty string.\n<br>\n<br>\n2. It creates a \"capture group\". This means that, when the whole pattern\nmatches, the portion of the subject string that matched the group is passed\nback to the caller, separately from the portion that matched the whole pattern.\n(This applies only to the traditional matching function; the DFA matching\nfunction does not support capturing.)\n</p>\n<p>\nOpening parentheses are counted from left to right (starting from 1) to obtain\nnumbers for capture groups. For example, if the string \"the red king\" is\nmatched against the pattern\n<pre>\n  the ((red|white) (king|queen))\n</pre>\nthe captured substrings are \"red king\", \"red\", and \"king\", and are numbered 1,\n2, and 3, respectively.\n</p>\n<p>\nThe fact that plain parentheses fulfil two functions is not always helpful.\nThere are often times when grouping is required without capturing. If an\nopening parenthesis is followed by a question mark and a colon, the group\ndoes not do any capturing, and is not counted when computing the number of any\nsubsequent capture groups. For example, if the string \"the white queen\"\nis matched against the pattern\n<pre>\n  the ((?:red|white) (king|queen))\n</pre>\nthe captured substrings are \"white queen\" and \"queen\", and are numbered 1 and\n2. The maximum number of capture groups is 65535.\n</p>\n<p>\nAs a convenient shorthand, if any option settings are required at the start of\na non-capturing group, the option letters may appear between the \"?\" and the\n\":\". Thus the two patterns\n<pre>\n  (?i:saturday|sunday)\n  (?:(?i)saturday|sunday)\n</pre>\nmatch exactly the same set of strings. Because alternative branches are tried\nfrom left to right, and options are not reset until the end of the group is\nreached, an option setting in one branch does affect subsequent branches, so\nthe above patterns match \"SUNDAY\" as well as \"Saturday\".\n<a name=\"dupgroupnumber\"></a></p>\n<h2><a name=\"SEC17\" href=\"#TOC1\">DUPLICATE GROUP NUMBERS</a></h2>\n<p>\nPerl 5.10 introduced a feature whereby each alternative in a group uses the\nsame numbers for its capturing parentheses. Such a group starts with (?| and is\nitself a non-capturing group. For example, consider this pattern:\n<pre>\n  (?|(Sat)ur|(Sun))day\n</pre>\nBecause the two alternatives are inside a (?| group, both sets of capturing\nparentheses are numbered one. Thus, when the pattern matches, you can look\nat captured substring number one, whichever alternative matched. This construct\nis useful when you want to capture part, but not all, of one of a number of\nalternatives. Inside a (?| group, parentheses are numbered as usual, but the\nnumber is reset at the start of each branch. The numbers of any capturing\nparentheses that follow the whole group start after the highest number used in\nany branch. The following example is taken from the Perl documentation. The\nnumbers underneath show in which buffer the captured content will be stored.\n<pre>\n  # before  ---------------branch-reset----------- after\n  / ( a )  (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x\n  # 1            2         2  3        2     3     4\n</pre>\nA backreference to a capture group uses the most recent value that is set for\nthe group. The following pattern matches \"abcabc\" or \"defdef\":\n<pre>\n  /(?|(abc)|(def))\\1/\n</pre>\nIn contrast, a subroutine call to a capture group always refers to the\nfirst one in the pattern with the given number. The following pattern matches\n\"abcabc\" or \"defabc\":\n<pre>\n  /(?|(abc)|(def))(?1)/\n</pre>\nA relative reference such as (?-1) is no different: it is just a convenient way\nof computing an absolute group number.\n</p>\n<p>\nIf a\n<a href=\"#conditions\">condition test</a>\nfor a group's having matched refers to a non-unique number, the test is\ntrue if any group with that number has matched.\n</p>\n<p>\nAn alternative approach to using this \"branch reset\" feature is to use\nduplicate named groups, as described in the next section.\n</p>\n<h2><a name=\"SEC18\" href=\"#TOC1\">NAMED CAPTURE GROUPS</a></h2>\n<p>\nIdentifying capture groups by number is simple, but it can be very hard to keep\ntrack of the numbers in complicated patterns. Furthermore, if an expression is\nmodified, the numbers may change. To help with this difficulty, PCRE2 supports\nthe naming of capture groups. This feature was not added to Perl until release\n5.10. Python had the feature earlier, and PCRE1 introduced it at release 4.0,\nusing the Python syntax. PCRE2 supports both the Perl and the Python syntax.\n</p>\n<p>\nIn PCRE2, a capture group can be named in one of three ways: (?&#60;name&#62;...) or\n(?'name'...) as in Perl, or (?P&#60;name&#62;...) as in Python. Names may be up to\n128 code units long. When PCRE2_UTF is not set, they may contain only ASCII\nalphanumeric characters and underscores, but must start with a non-digit. When\nPCRE2_UTF is set, the syntax of group names is extended to allow any Unicode\nletter or Unicode decimal digit. In other words, group names must match one of\nthese patterns:\n<pre>\n  ^[_A-Za-z][_A-Za-z0-9]*\\z   when PCRE2_UTF is not set\n  ^[_\\p{L}][_\\p{L}\\p{Nd}]*\\z  when PCRE2_UTF is set\n</pre>\nReferences to capture groups from other parts of the pattern, such as\n<a href=\"#backreferences\">backreferences,</a>\n<a href=\"#recursion\">recursion,</a>\nand\n<a href=\"#conditions\">conditions,</a>\ncan all be made by name as well as by number.\n</p>\n<p>\nNamed capture groups are allocated numbers as well as names, exactly as\nif the names were not present. In both PCRE2 and Perl, capture groups\nare primarily identified by numbers; any names are just aliases for these\nnumbers. The PCRE2 API provides function calls for extracting the complete\nname-to-number translation table from a compiled pattern, as well as\nconvenience functions for extracting captured substrings by name.\n</p>\n<p>\n<b>Warning:</b> When more than one capture group has the same number, as\ndescribed in the previous section, a name given to one of them applies to all\nof them. Perl allows identically numbered groups to have different names.\nConsider this pattern, where there are two capture groups, both numbered 1:\n<pre>\n  (?|(?&#60;AA&#62;aa)|(?&#60;BB&#62;bb))\n</pre>\nPerl allows this, with both names AA and BB as aliases of group 1. Thus, after\na successful match, both names yield the same value (either \"aa\" or \"bb\").\n</p>\n<p>\nIn an attempt to reduce confusion, PCRE2 does not allow the same group number\nto be associated with more than one name. The example above provokes a\ncompile-time error. However, there is still scope for confusion. Consider this\npattern:\n<pre>\n  (?|(?&#60;AA&#62;aa)|(bb))\n</pre>\nAlthough the second group number 1 is not explicitly named, the name AA is\nstill an alias for any group 1. Whether the pattern matches \"aa\" or \"bb\", a\nreference by name to group AA yields the matched string.\n</p>\n<p>\nBy default, a name must be unique within a pattern, except that duplicate names\nare permitted for groups with the same number, for example:\n<pre>\n  (?|(?&#60;AA&#62;aa)|(?&#60;AA&#62;bb))\n</pre>\nThe duplicate name constraint can be disabled by setting the PCRE2_DUPNAMES\noption at compile time, or by the use of (?J) within the pattern, as described\nin the section entitled\n<a href=\"#internaloptions\">\"Internal Option Setting\"</a>\nabove.\n</p>\n<p>\nDuplicate names can be useful for patterns where only one instance of the named\ncapture group can match. Suppose you want to match the name of a weekday,\neither as a 3-letter abbreviation or as the full name, and in both cases you\nwant to extract the abbreviation. This pattern (ignoring the line breaks) does\nthe job:\n<pre>\n  (?J)\n  (?&#60;DN&#62;Mon|Fri|Sun)(?:day)?|\n  (?&#60;DN&#62;Tue)(?:sday)?|\n  (?&#60;DN&#62;Wed)(?:nesday)?|\n  (?&#60;DN&#62;Thu)(?:rsday)?|\n  (?&#60;DN&#62;Sat)(?:urday)?\n</pre>\nThere are five capture groups, but only one is ever set after a match. The\nconvenience functions for extracting the data by name returns the substring for\nthe first (and in this example, the only) group of that name that matched. This\nsaves searching to find which numbered group it was. (An alternative way of\nsolving this problem is to use a \"branch reset\" group, as described in the\nprevious section.)\n</p>\n<p>\nIf you make a backreference to a non-unique named group from elsewhere in the\npattern, the groups to which the name refers are checked in the order in which\nthey appear in the overall pattern. The first one that is set is used for the\nreference. For example, this pattern matches both \"foofoo\" and \"barbar\" but not\n\"foobar\" or \"barfoo\":\n<pre>\n  (?J)(?:(?&#60;n&#62;foo)|(?&#60;n&#62;bar))\\k&#60;n&#62;\n\n</pre>\n</p>\n<p>\nIf you make a subroutine call to a non-unique named group, the one that\ncorresponds to the first occurrence of the name is used. In the absence of\nduplicate numbers this is the one with the lowest number.\n</p>\n<p>\nIf you use a named reference in a condition\ntest (see the\n<a href=\"#conditions\">section about conditions</a>\nbelow), either to check whether a capture group has matched, or to check for\nrecursion, all groups with the same name are tested. If the condition is true\nfor any one of them, the overall condition is true. This is the same behaviour\nas testing by number. For further details of the interfaces for handling named\ncapture groups, see the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation.\n</p>\n<h2><a name=\"SEC19\" href=\"#TOC1\">REPETITION</a></h2>\n<p>\nRepetition is specified by quantifiers, which may follow any one of these\nitems:\n<pre>\n  a literal data character\n  the dot metacharacter\n  the \\C escape sequence\n  the \\R escape sequence\n  the \\X escape sequence\n  any escape sequence that matches a single character\n  a character class\n  a backreference\n  a parenthesized group (including lookaround assertions)\n  a subroutine call (recursive or otherwise)\n</pre>\nIf a quantifier does not follow a repeatable item, an error occurs. The\ngeneral repetition quantifier specifies a minimum and maximum number of\npermitted matches by giving two numbers in curly brackets (braces), separated\nby a comma. The numbers must be less than 65536, and the first must be less\nthan or equal to the second. For example,\n<pre>\n  z{2,4}\n</pre>\nmatches \"zz\", \"zzz\", or \"zzzz\". A closing brace on its own is not a special\ncharacter. If the second number is omitted, but the comma is present, there is\nno upper limit; if the second number and the comma are both omitted, the\nquantifier specifies an exact number of required matches. Thus\n<pre>\n  [aeiou]{3,}\n</pre>\nmatches at least 3 successive vowels, but may match many more, whereas\n<pre>\n  \\d{8}\n</pre>\nmatches exactly 8 digits. If the first number is omitted, the lower limit is\ntaken as zero; in this case the upper limit must be present.\n<pre>\n  X{,4} is interpreted as X{0,4}\n</pre>\nThis is a change in behaviour that happened in Perl 5.34.0 and PCRE2 10.43. In\nearlier versions such a sequence was not interpreted as a quantifier. Other\nregular expression engines may behave either way.\n</p>\n<p>\nIf the characters that follow an opening brace do not match the syntax of a\nquantifier, the brace is taken as a literal character. In particular, this\nmeans that {,} is a literal string of three characters.\n</p>\n<p>\nNote that not every opening brace is potentially the start of a quantifier\nbecause braces are used in other items such as \\N{U+345} or \\k{name}.\n</p>\n<p>\nIn UTF modes, quantifiers apply to characters rather than to individual code\nunits. Thus, for example, \\x{100}{2} matches two characters, each of\nwhich is represented by a two-byte sequence in a UTF-8 string. Similarly,\n\\X{3} matches three Unicode extended grapheme clusters, each of which may be\nseveral code units long (and they may be of different lengths).\n</p>\n<p>\nThe quantifier {0} is permitted, causing the expression to behave as if the\nprevious item and the quantifier were not present. This may be useful for\ncapture groups that are referenced as\n<a href=\"#groupsassubroutines\">subroutines</a>\nfrom elsewhere in the pattern (but see also the section entitled\n<a href=\"#subdefine\">\"Defining capture groups for use by reference only\"</a>\nbelow). Except for parenthesized groups, items that have a {0} quantifier are\nomitted from the compiled pattern.\n</p>\n<p>\nFor convenience, the three most common quantifiers have single-character\nabbreviations:\n<pre>\n  *    is equivalent to {0,}\n  +    is equivalent to {1,}\n  ?    is equivalent to {0,1}\n</pre>\nIt is possible to construct infinite loops by following a group that can match\nno characters with a quantifier that has no upper limit, for example:\n<pre>\n  (a?)*\n</pre>\nEarlier versions of Perl and PCRE1 used to give an error at compile time for\nsuch patterns. However, because there are cases where this can be useful, such\npatterns are now accepted, but whenever an iteration of such a group matches no\ncharacters, matching moves on to the next item in the pattern instead of\nrepeatedly matching an empty string. This does not prevent backtracking into\nany of the iterations if a subsequent item fails to match.\n</p>\n<p>\nBy default, quantifiers are \"greedy\", that is, they match as much as possible\n(up to the maximum number of permitted repetitions), without causing the rest\nof the pattern to fail. The classic example of where this gives problems is in\ntrying to match comments in C programs. These appear between /* and */ and\nwithin the comment, individual * and / characters may appear. An attempt to\nmatch C comments by applying the pattern\n<pre>\n  /\\*.*\\*/\n</pre>\nto the string\n<pre>\n  /* first comment */  not comment  /* second comment */\n</pre>\nfails, because it matches the entire string owing to the greediness of the .*\nitem. However, if a quantifier is followed by a question mark, it ceases to be\ngreedy, and instead matches the minimum number of times possible, so the\npattern\n<pre>\n  /\\*.*?\\*/\n</pre>\ndoes the right thing with C comments. The meaning of the various quantifiers is\nnot otherwise changed, just the preferred number of matches. Do not confuse\nthis use of question mark with its use as a quantifier in its own right.\nBecause it has two uses, it can sometimes appear doubled, as in\n<pre>\n  \\d??\\d\n</pre>\nwhich matches one digit by preference, but can match two if that is the only\nway the rest of the pattern matches.\n</p>\n<p>\nIf the PCRE2_UNGREEDY option is set (an option that is not available in Perl),\nthe quantifiers are not greedy by default, but individual ones can be made\ngreedy by following them with a question mark. In other words, it inverts the\ndefault behaviour.\n</p>\n<p>\nWhen a parenthesized group is quantified with a minimum repeat count that\nis greater than 1 or with a limited maximum, more memory is required for the\ncompiled pattern, in proportion to the size of the minimum or maximum.\n</p>\n<p>\nIf a pattern starts with .* or .{0,} and the PCRE2_DOTALL option (equivalent\nto Perl's /s) is set, thus allowing the dot to match newlines, the pattern is\nimplicitly anchored, because whatever follows will be tried against every\ncharacter position in the subject string, so there is no point in retrying the\noverall match at any position after the first. PCRE2 normally treats such a\npattern as though it were preceded by \\A.\n</p>\n<p>\nIn cases where it is known that the subject string contains no newlines, it is\nworth setting PCRE2_DOTALL in order to obtain this optimization, or\nalternatively, using ^ to indicate anchoring explicitly.\n</p>\n<p>\nHowever, there are some cases where the optimization cannot be used. When .*\nis inside capturing parentheses that are the subject of a backreference\nelsewhere in the pattern, a match at the start may fail where a later one\nsucceeds. Consider, for example:\n<pre>\n  (.*)abc\\1\n</pre>\nIf the subject is \"xyz123abc123\" the match point is the fourth character. For\nthis reason, such a pattern is not implicitly anchored.\n</p>\n<p>\nAnother case where implicit anchoring is not applied is when the leading .* is\ninside an atomic group. Once again, a match at the start may fail where a later\none succeeds. Consider this pattern:\n<pre>\n  (?&#62;.*?a)b\n</pre>\nIt matches \"ab\" in the subject \"aab\". The use of the backtracking control verbs\n(*PRUNE) and (*SKIP) also disable this optimization. To do so explicitly,\neither pass the compile option PCRE2_NO_DOTSTAR_ANCHOR, or call\n<b>pcre2_set_optimize()</b> with a PCRE2_DOTSTAR_ANCHOR_OFF directive.\n</p>\n<p>\nWhen a capture group is repeated, the value captured is the substring that\nmatched the final iteration. For example, after\n<pre>\n  (tweedle[dume]{3}\\s*)+\n</pre>\nhas matched \"tweedledum tweedledee\" the value of the captured substring is\n\"tweedledee\". However, if there are nested capture groups, the corresponding\ncaptured values may have been set in previous iterations. For example, after\n<pre>\n  (a|(b))+\n</pre>\nmatches \"aba\" the value of the second captured substring is \"b\".\n<a name=\"atomicgroup\"></a></p>\n<h2><a name=\"SEC20\" href=\"#TOC1\">ATOMIC GROUPING AND POSSESSIVE QUANTIFIERS</a></h2>\n<p>\nWith both maximizing (\"greedy\") and minimizing (\"ungreedy\" or \"lazy\")\nrepetition, failure of what follows normally causes the repeated item to be\nre-evaluated to see if a different number of repeats allows the rest of the\npattern to match. Sometimes it is useful to prevent this, either to change the\nnature of the match, or to cause it fail earlier than it otherwise might, when\nthe author of the pattern knows there is no point in carrying on.\n</p>\n<p>\nConsider, for example, the pattern \\d+foo when applied to the subject line\n<pre>\n  123456bar\n</pre>\nAfter matching all 6 digits and then failing to match \"foo\", the normal\naction of the matcher is to try again with only 5 digits matching the \\d+\nitem, and then with 4, and so on, before ultimately failing. \"Atomic grouping\"\n(a term taken from Jeffrey Friedl's book) provides the means for specifying\nthat once a group has matched, it is not to be re-evaluated in this way.\n</p>\n<p>\nIf we use atomic grouping for the previous example, the matcher gives up\nimmediately on failing to match \"foo\" the first time. The notation is a kind of\nspecial parenthesis, starting with (?&#62; as in this example:\n<pre>\n  (?&#62;\\d+)foo\n</pre>\nPerl 5.28 introduced an experimental alphabetic form starting with (* which may\nbe easier to remember:\n<pre>\n  (*atomic:\\d+)foo\n</pre>\nThis kind of parenthesized group \"locks up\" the part of the pattern it contains\nonce it has matched, and a failure further into the pattern is prevented from\nbacktracking into it. Backtracking past it to previous items, however, works as\nnormal.\n</p>\n<p>\nAn alternative description is that a group of this type matches exactly the\nstring of characters that an identical standalone pattern would match, if\nanchored at the current point in the subject string.\n</p>\n<p>\nAtomic groups are not capture groups. Simple cases such as the above example\ncan be thought of as a maximizing repeat that must swallow everything it can.\nSo, while both \\d+ and \\d+? are prepared to adjust the number of digits they\nmatch in order to make the rest of the pattern match, (?&#62;\\d+) can only match\nan entire sequence of digits.\n</p>\n<p>\nAtomic groups in general can of course contain arbitrarily complicated\nexpressions, and can be nested. However, when the contents of an atomic\ngroup is just a single repeated item, as in the example above, a simpler\nnotation, called a \"possessive quantifier\" can be used. This consists of an\nadditional + character following a quantifier. Using this notation, the\nprevious example can be rewritten as\n<pre>\n  \\d++foo\n</pre>\nNote that a possessive quantifier can be used with an entire group, for\nexample:\n<pre>\n  (abc|xyz){2,3}+\n</pre>\nPossessive quantifiers are always greedy; the setting of the PCRE2_UNGREEDY\noption is ignored. They are a convenient notation for the simpler forms of\natomic group. However, there is no difference in the meaning of a possessive\nquantifier and the equivalent atomic group, though there may be a performance\ndifference; possessive quantifiers should be slightly faster.\n</p>\n<p>\nThe possessive quantifier syntax is an extension to the Perl 5.8 syntax.\nJeffrey Friedl originated the idea (and the name) in the first edition of his\nbook. Mike McCloskey liked it, so implemented it when he built Sun's Java\npackage, and PCRE1 copied it from there. It found its way into Perl at release\n5.10.\n</p>\n<p>\nPCRE2 has an optimization that automatically \"possessifies\" certain simple\npattern constructs. For example, the sequence A+B is treated as A++B because\nthere is no point in backtracking into a sequence of A's when B must follow.\nThis feature can be disabled by the PCRE2_NO_AUTO_POSSESS option, by calling\n<b>pcre2_set_optimize()</b> with a PCRE2_AUTO_POSSESS_OFF directive, or by\nstarting the pattern with (*NO_AUTO_POSSESS).\n</p>\n<p>\nWhen a pattern contains an unlimited repeat inside a group that can itself be\nrepeated an unlimited number of times, the use of an atomic group is the only\nway to avoid some failing matches taking a very long time indeed. The pattern\n<pre>\n  (\\D+|&#60;\\d+&#62;)*[!?]\n</pre>\nmatches an unlimited number of substrings that either consist of non-digits, or\ndigits enclosed in &#60;&#62;, followed by either ! or ?. When it matches, it runs\nquickly. However, if it is applied to\n<pre>\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n</pre>\nit takes a long time before reporting failure. This is because the string can\nbe divided between the internal \\D+ repeat and the external * repeat in a\nlarge number of ways, and all have to be tried. (The example uses [!?] rather\nthan a single character at the end, because both PCRE2 and Perl have an\noptimization that allows for fast failure when a single character is used. They\nremember the last single character that is required for a match, and fail early\nif it is not present in the string.) If the pattern is changed so that it uses\nan atomic group, like this:\n<pre>\n  ((?&#62;\\D+)|&#60;\\d+&#62;)*[!?]\n</pre>\nsequences of non-digits cannot be broken, and failure happens quickly.\n<a name=\"backreferences\"></a></p>\n<h2><a name=\"SEC21\" href=\"#TOC1\">BACKREFERENCES</a></h2>\n<p>\nOutside a character class, a backslash followed by a digit greater than 0 (and\npossibly further digits) is a backreference to a capture group earlier (that\nis, to its left) in the pattern, provided there have been that many previous\ncapture groups.\n</p>\n<p>\nHowever, if the decimal number following the backslash is less than 8, it is\nalways taken as a backreference, and causes an error only if there are not that\nmany capture groups in the entire pattern. In other words, the group that is\nreferenced need not be to the left of the reference for numbers less than 8. A\n\"forward backreference\" of this type can make sense when a repetition is\ninvolved and the group to the right has participated in an earlier iteration.\n</p>\n<p>\nIt is not possible to have a numerical \"forward backreference\" to a group whose\nnumber is 8 or more using this syntax because a sequence such as \\50 is\ninterpreted as a character defined in octal. See the subsection entitled\n\"Non-printing characters\"\n<a href=\"#digitsafterbackslash\">above</a>\nfor further details of the handling of digits following a backslash. Other\nforms of backreferencing do not suffer from this restriction. In particular,\nthere is no problem when named capture groups are used (see below).\n</p>\n<p>\nAnother way of avoiding the ambiguity inherent in the use of digits following a\nbackslash is to use the \\g escape sequence. This escape must be followed by a\nsigned or unsigned number, optionally enclosed in braces. These examples are\nall identical:\n<pre>\n  (ring), \\1\n  (ring), \\g1\n  (ring), \\g{1}\n</pre>\nAn unsigned number specifies an absolute reference without the ambiguity that\nis present in the older syntax. It is also useful when literal digits follow\nthe reference. A signed number is a relative reference. Consider this example:\n<pre>\n  (abc(def)ghi)\\g{-1}\n</pre>\nThe sequence \\g{-1} is a reference to the capture group whose number is one\nless than the number of the next group to be started, so in this example (where\nthe next group would be numbered 3) is it equivalent to \\2, and \\g{-2} would\nbe equivalent to \\1. Note that if this construct is inside a capture group,\nthat group is included in the count, so in this example \\g{-2} also refers to\ngroup 1:\n<pre>\n  (A)(\\g{-2}B)\n</pre>\nThe use of relative references can be helpful in long patterns, and also in\npatterns that are created by joining together fragments that contain references\nwithin themselves.\n</p>\n<p>\nThe sequence \\g{+1} is a reference to the next capture group that is started\nafter this item, and \\g{+2} refers to the one after that, and so on. This kind\nof forward reference can be useful in patterns that repeat. Perl does not\nsupport the use of + in this way.\n</p>\n<p>\nA backreference matches whatever actually most recently matched the capture\ngroup in the current subject string, rather than anything at all that matches\nthe group (see\n<a href=\"#groupsassubroutines\">\"Groups as subroutines\"</a>\nbelow for a way of doing that). So the pattern\n<pre>\n  (sens|respons)e and \\1ibility\n</pre>\nmatches \"sense and sensibility\" and \"response and responsibility\", but not\n\"sense and responsibility\". If caseful matching is in force at the time of the\nbackreference, the case of letters is relevant. For example,\n<pre>\n  ((?i)rah)\\s+\\1\n</pre>\nmatches \"rah rah\" and \"RAH RAH\", but not \"RAH rah\", even though the original\ncapture group is matched caselessly.\n</p>\n<p>\nThere are several different ways of writing backreferences to named capture\ngroups. The .NET syntax is \\k{name}, the Python syntax is (?=name), and the\noriginal Perl syntax is \\k&#60;name&#62; or \\k'name'. All of these are now supported\nby both Perl and PCRE2. Perl 5.10's unified backreference syntax, in which \\g\ncan be used for both numeric and named references, is also supported by PCRE2.\nWe could rewrite the above example in any of the following ways:\n<pre>\n  (?&#60;p1&#62;(?i)rah)\\s+\\k&#60;p1&#62;\n  (?'p1'(?i)rah)\\s+\\k{p1}\n  (?P&#60;p1&#62;(?i)rah)\\s+(?P=p1)\n  (?&#60;p1&#62;(?i)rah)\\s+\\g{p1}\n</pre>\nA capture group that is referenced by name may appear in the pattern before or\nafter the reference.\n</p>\n<p>\nThere may be more than one backreference to the same group. If a group has not\nactually been used in a particular match, backreferences to it always fail by\ndefault. For example, the pattern\n<pre>\n  (a|(bc))\\2\n</pre>\nalways fails if it starts to match \"a\" rather than \"bc\". However, if the\nPCRE2_MATCH_UNSET_BACKREF option is set at compile time, a backreference to an\nunset value matches an empty string.\n</p>\n<p>\nBecause there may be many capture groups in a pattern, all digits following a\nbackslash are taken as part of a potential backreference number. If the pattern\ncontinues with a digit character, some delimiter must be used to terminate the\nbackreference. If the PCRE2_EXTENDED or PCRE2_EXTENDED_MORE option is set, this\ncan be white space. Otherwise, the \\g{} syntax or an empty comment (see\n<a href=\"#comments\">\"Comments\"</a>\nbelow) can be used.\n</p>\n<h3>\nRecursive backreferences\n</h3>\n<p>\nA backreference that occurs inside the group to which it refers fails when the\ngroup is first used, so, for example, (a\\1) never matches. However, such\nreferences can be useful inside repeated groups. For example, the pattern\n<pre>\n  (a|b\\1)+\n</pre>\nmatches any number of \"a\"s and also \"aba\", \"ababbaa\" etc. At each iteration of\nthe group, the backreference matches the character string corresponding to the\nprevious iteration. In order for this to work, the pattern must be such that\nthe first iteration does not need to match the backreference. This can be done\nusing alternation, as in the example above, or by a quantifier with a minimum\nof zero.\n</p>\n<p>\nFor versions of PCRE2 less than 10.25, backreferences of this type used to\ncause the group that they reference to be treated as an\n<a href=\"#atomicgroup\">atomic group.</a>\nThis restriction no longer applies, and backtracking into such groups can occur\nas normal.\n<a name=\"bigassertions\"></a></p>\n<h2><a name=\"SEC22\" href=\"#TOC1\">ASSERTIONS</a></h2>\n<p>\nAn assertion is a test that does not consume any characters. The test must\nsucceed for the match to continue. The simple assertions coded as \\b, \\B,\n\\A, \\G, \\Z, \\z, ^ and $ are described\n<a href=\"#smallassertions\">above.</a>\n</p>\n<p>\nMore complicated assertions are coded as parenthesized groups. If matching such\na group succeeds, matching continues after it, but with the matching position\nin the subject string reset to what it was before the assertion was processed.\n</p>\n<p>\nA special kind of assertion, called a \"scan substring\" assertion, matches a\nsubpattern against a previously captured substring. This is described in the\nsection entitled\n<a href=\"#scansubstringassertions\">\"Scan substring assertions\"</a>\nbelow. It is a PCRE2 extension, not compatible with Perl.\n</p>\n<p>\nThe other goup-based assertions are of two kinds: those that look ahead of the\ncurrent position in the subject string, and those that look behind it, and in\neach case an assertion may be positive (must match for the assertion to be\ntrue) or negative (must not match for the assertion to be true).\n</p>\n<p>\nThe Perl-compatible lookaround assertions are atomic. If an assertion is true,\nbut there is a subsequent matching failure, there is no backtracking into the\nassertion. However, there are some cases where non-atomic assertions can be\nuseful. PCRE2 has some support for these, described in the section entitled\n<a href=\"#nonatomicassertions\">\"Non-atomic assertions\"</a>\nbelow, but they are not Perl-compatible.\n</p>\n<p>\nA lookaround assertion may appear as the condition in a\n<a href=\"#conditions\">conditional group</a>\n(see below). In this case, the result of matching the assertion determines\nwhich branch of the condition is followed.\n</p>\n<p>\nAssertion groups are not capture groups. If an assertion contains capture\ngroups within it, these are counted for the purposes of numbering the capture\ngroups in the whole pattern. Within each branch of an assertion, locally\ncaptured substrings may be referenced in the usual way. For example, a sequence\nsuch as (.)\\g{-1} can be used to check that two adjacent characters are the\nsame.\n</p>\n<p>\nWhen a branch within an assertion fails to match, any substrings that were\ncaptured are discarded (as happens with any pattern branch that fails to\nmatch). A negative assertion is true only when all its branches fail to match;\nthis means that no captured substrings are ever retained after a successful\nnegative assertion. When an assertion contains a matching branch, what happens\ndepends on the type of assertion.\n</p>\n<p>\nFor a positive assertion, internally captured substrings in the successful\nbranch are retained, and matching continues with the next pattern item after\nthe assertion. For a negative assertion, a matching branch means that the\nassertion is not true. If such an assertion is being used as a condition in a\n<a href=\"#conditions\">conditional group</a>\n(see below), captured substrings are retained, because matching continues with\nthe \"no\" branch of the condition. For other failing negative assertions,\ncontrol passes to the previous backtracking point, thus discarding any captured\nstrings within the assertion.\n</p>\n<p>\nMost assertion groups may be repeated; though it makes no sense to assert the\nsame thing several times, the side effect of capturing in positive assertions\nmay occasionally be useful. However, an assertion that forms the condition for\na conditional group may not be quantified. PCRE2 used to restrict the\nrepetition of assertions, but from release 10.35 the only restriction is that\nan unlimited maximum repetition is changed to be one more than the minimum. For\nexample, {3,} is treated as {3,4}.\n</p>\n<h3>\nAlphabetic assertion names\n</h3>\n<p>\nTraditionally, symbolic sequences such as (?= and (?&#60;= have been used to\nspecify lookaround assertions. Perl 5.28 introduced some experimental\nalphabetic alternatives which might be easier to remember. They all start with\n(* instead of (? and must be written using lower case letters. PCRE2 supports\nthe following synonyms:\n<pre>\n  (*positive_lookahead:  or (*pla: is the same as (?=\n  (*negative_lookahead:  or (*nla: is the same as (?!\n  (*positive_lookbehind: or (*plb: is the same as (?&#60;=\n  (*negative_lookbehind: or (*nlb: is the same as (?&#60;!\n</pre>\nFor example, (*pla:foo) is the same assertion as (?=foo). In the following\nsections, the various assertions are described using the original symbolic\nforms.\n</p>\n<h3>\nLookahead assertions\n</h3>\n<p>\nLookahead assertions start with (?= for positive assertions and (?! for\nnegative assertions. For example,\n<pre>\n  \\w+(?=;)\n</pre>\nmatches a word followed by a semicolon, but does not include the semicolon in\nthe match, and\n<pre>\n  foo(?!bar)\n</pre>\nmatches any occurrence of \"foo\" that is not followed by \"bar\". Note that the\napparently similar pattern\n<pre>\n  (?!foo)bar\n</pre>\ndoes not find an occurrence of \"bar\" that is preceded by something other than\n\"foo\"; it finds any occurrence of \"bar\" whatsoever, because the assertion\n(?!foo) is always true when the next three characters are \"bar\". A\nlookbehind assertion is needed to achieve the other effect.\n</p>\n<p>\nIf you want to force a matching failure at some point in a pattern, the most\nconvenient way to do it is with (?!) because an empty string always matches, so\nan assertion that requires there not to be an empty string must always fail.\nThe backtracking control verb (*FAIL) or (*F) is a synonym for (?!).\n<a name=\"lookbehind\"></a></p>\n<h3>\nLookbehind assertions\n</h3>\n<p>\nLookbehind assertions start with (?&#60;= for positive assertions and (?&#60;! for\nnegative assertions. For example,\n<pre>\n  (?&#60;!foo)bar\n</pre>\ndoes find an occurrence of \"bar\" that is not preceded by \"foo\". The contents of\na lookbehind assertion are restricted such that there must be a known maximum\nto the lengths of all the strings it matches. There are two cases:\n</p>\n<p>\nIf every top-level alternative matches a fixed length, for example\n<pre>\n  (?&#60;=colour|color)\n</pre>\nthere is a limit of 65535 characters to the lengths, which do not have to be\nthe same, as this example demonstrates. This is the only kind of lookbehind\nsupported by PCRE2 versions earlier than 10.43 and by the alternative matching\nfunction <b>pcre2_dfa_match()</b>.\n</p>\n<p>\nIn PCRE2 10.43 and later, <b>pcre2_match()</b> supports lookbehind assertions in\nwhich one or more top-level alternatives can match more than one string length,\nfor example\n<pre>\n  (?&#60;=colou?r)\n</pre>\nThe maximum matching length for any branch of the lookbehind is limited to a\nvalue set by the calling program (default 255 characters). Unlimited repetition\n(for example \\d*) is not supported. In some cases, the escape sequence \\K\n<a href=\"#resetmatchstart\">(see above)</a>\ncan be used instead of a lookbehind assertion at the start of a pattern to get\nround the length limit restriction.\n</p>\n<p>\nIn UTF-8 and UTF-16 modes, PCRE2 does not allow the \\C escape (which matches a\nsingle code unit even in a UTF mode) to appear in lookbehind assertions,\nbecause it makes it impossible to calculate the length of the lookbehind. The\n\\X and \\R escapes, which can match different numbers of code units, are never\npermitted in lookbehinds.\n</p>\n<p>\n<a href=\"#groupsassubroutines\">\"Subroutine\"</a>\ncalls (see below) such as (?2) or (?&X) are permitted in lookbehinds, as long\nas the called capture group matches a limited-length string. However,\n<a href=\"#recursion\">recursion,</a>\nthat is, a \"subroutine\" call into a group that is already active,\nis not supported.\n</p>\n<p>\nPCRE2 supports backreferences in lookbehinds, but only if certain conditions\nare met. The PCRE2_MATCH_UNSET_BACKREF option must not be set, there must be no\nuse of (?| in the pattern (it creates duplicate group numbers), and if the\nbackreference is by name, the name must be unique. Of course, the referenced\ngroup must itself match a limited length substring. The following pattern\nmatches words containing at least two characters that begin and end with the\nsame character:\n<pre>\n   \\b(\\w)\\w++(?&#60;=\\1)\n</pre>\n</p>\n<p>\nPossessive quantifiers can be used in conjunction with lookbehind assertions to\nspecify efficient matching at the end of subject strings. Consider a simple\npattern such as\n<pre>\n  abcd$\n</pre>\nwhen applied to a long string that does not match. Because matching proceeds\nfrom left to right, PCRE2 will look for each \"a\" in the subject and then see if\nwhat follows matches the rest of the pattern. If the pattern is specified as\n<pre>\n  ^.*abcd$\n</pre>\nthe initial .* matches the entire string at first, but when this fails (because\nthere is no following \"a\"), it backtracks to match all but the last character,\nthen all but the last two characters, and so on. Once again the search for \"a\"\ncovers the entire string, from right to left, so we are no better off. However,\nif the pattern is written as\n<pre>\n  ^.*+(?&#60;=abcd)\n</pre>\nthere can be no backtracking for the .*+ item because of the possessive\nquantifier; it can match only the entire string. The subsequent lookbehind\nassertion does a single test on the last four characters. If it fails, the\nmatch fails immediately. For long strings, this approach makes a significant\ndifference to the processing time.\n</p>\n<h3>\nUsing multiple assertions\n</h3>\n<p>\nSeveral assertions (of any sort) may occur in succession. For example,\n<pre>\n  (?&#60;=\\d{3})(?&#60;!999)foo\n</pre>\nmatches \"foo\" preceded by three digits that are not \"999\". Notice that each of\nthe assertions is applied independently at the same point in the subject\nstring. First there is a check that the previous three characters are all\ndigits, and then there is a check that the same three characters are not \"999\".\nThis pattern does <i>not</i> match \"foo\" preceded by six characters, the first\nof which are digits and the last three of which are not \"999\". For example, it\ndoesn't match \"123abcfoo\". A pattern to do that is\n<pre>\n  (?&#60;=\\d{3}...)(?&#60;!999)foo\n</pre>\nThis time the first assertion looks at the preceding six characters, checking\nthat the first three are digits, and then the second assertion checks that the\npreceding three characters are not \"999\".\n</p>\n<p>\nAssertions can be nested in any combination. For example,\n<pre>\n  (?&#60;=(?&#60;!foo)bar)baz\n</pre>\nmatches an occurrence of \"baz\" that is preceded by \"bar\" which in turn is not\npreceded by \"foo\", while\n<pre>\n  (?&#60;=\\d{3}(?!999)...)foo\n</pre>\nis another pattern that matches \"foo\" preceded by three digits and any three\ncharacters that are not \"999\".\n<a name=\"nonatomicassertions\"></a></p>\n<h2><a name=\"SEC23\" href=\"#TOC1\">NON-ATOMIC ASSERTIONS</a></h2>\n<p>\nTraditional lookaround assertions are atomic. That is, if an assertion is true,\nbut there is a subsequent matching failure, there is no backtracking into the\nassertion. However, there are some cases where non-atomic positive assertions\ncan be useful. PCRE2 provides these using the following syntax:\n<pre>\n  (*non_atomic_positive_lookahead:  or (*napla: or (?*\n  (*non_atomic_positive_lookbehind: or (*naplb: or (?&#60;*\n</pre>\nConsider the problem of finding the right-most word in a string that also\nappears earlier in the string, that is, it must appear at least twice in total.\nThis pattern returns the required result as captured substring 1:\n<pre>\n  ^(?x)(*napla: .* \\b(\\w++)) (?&#62; .*? \\b\\1\\b ){2}\n</pre>\nFor a subject such as \"word1 word2 word3 word2 word3 word4\" the result is\n\"word3\". How does it work? At the start, ^(?x) anchors the pattern and sets the\n\"x\" option, which causes white space (introduced for readability) to be\nignored. Inside the assertion, the greedy .* at first consumes the entire\nstring, but then has to backtrack until the rest of the assertion can match a\nword, which is captured by group 1. In other words, when the assertion first\nsucceeds, it captures the right-most word in the string.\n</p>\n<p>\nThe current matching point is then reset to the start of the subject, and the\nrest of the pattern match checks for two occurrences of the captured word,\nusing an ungreedy .*? to scan from the left. If this succeeds, we are done, but\nif the last word in the string does not occur twice, this part of the pattern\nfails. If a traditional atomic lookahead (?= or (*pla: had been used, the\nassertion could not be re-entered, and the whole match would fail. The pattern\nwould succeed only if the very last word in the subject was found twice.\n</p>\n<p>\nUsing a non-atomic lookahead, however, means that when the last word does not\noccur twice in the string, the lookahead can backtrack and find the second-last\nword, and so on, until either the match succeeds, or all words have been\ntested.\n</p>\n<p>\nTwo conditions must be met for a non-atomic assertion to be useful: the\ncontents of one or more capturing groups must change after a backtrack into the\nassertion, and there must be a backreference to a changed group later in the\npattern. If this is not the case, the rest of the pattern match fails exactly\nas before because nothing has changed, so using a non-atomic assertion just\nwastes resources.\n</p>\n<p>\nThere is one exception to backtracking into a non-atomic assertion. If an\n(*ACCEPT) control verb is triggered, the assertion succeeds atomically. That\nis, a subsequent match failure cannot backtrack into the assertion.\n</p>\n<p>\nNon-atomic assertions are not supported by the alternative matching function\n<b>pcre2_dfa_match()</b>. They are supported by JIT, but only if they do not\ncontain any control verbs such as (*ACCEPT). (This may change in future). Note\nthat assertions that appear as conditions for\n<a href=\"#conditions\">conditional groups</a>\n(see below) must be atomic.\n<a name=\"scansubstringassertions\"></a></p>\n<h2><a name=\"SEC24\" href=\"#TOC1\">SCAN SUBSTRING ASSERTIONS</a></h2>\n<p>\nA special kind of assertion, not compatible with Perl, makes it possible to\ncheck the contents of a captured substring by matching it with a subpattern.\nBecause this involves capturing, this feature is not supported by\n<b>pcre2_dfa_match()</b>.\n</p>\n<p>\nA scan substring assertion starts with the sequence (*scan_substring: or\n(*scs: which is followed by a list of substring numbers (absolute or relative)\nand/or substring names enclosed in single quotes or angle brackets, all within\nparentheses. The rest of the item is the subpattern that is applied to the\nsubstring, as shown in these examples:\n<pre>\n  (*scan_substring:(1)...)\n  (*scs:(-2)...)\n  (*scs:('AB')...)\n  (*scs:(1,'AB',-2)...)\n</pre>\nThe list of groups is checked in the order they are given, and it is the\ncontents of the first one that is found to be set that are scanned. When\nPCRE2_DUPNAMES is set and there are ambiguous group names, all groups with the\nsame name are checked in numerical order. A scan substring assertion fails if\nnone of the groups it references have been set.\n</p>\n<p>\nThe pattern match on the substring is always anchored, that is, it must match\nfrom the start of the substring. There is no \"bumpalong\" if it does not match\nat the start. The end of the subject is temporarily reset to be the end of the\nsubstring, so \\Z, \\z, and $ will match there. However, the start of the\nsubject is <i>not</i> reset. This means that ^ matches only if the substring is\nactually at the start of the main subject, but it also means that lookbehind\nassertions into what precedes the substring are possible.\n</p>\n<p>\nHere is a very simple example: find a word that contains the rare (in English)\nsequence of letters \"rh\" not at the start:\n<pre>\n  \\b(\\w++)(*scs:(1).+rh)\n</pre>\nThe first group captures a word which is then scanned by the second group.\nThis example does not actually need this heavyweight feature; the same match\ncan be achieved with:\n<pre>\n  \\b\\w+?rh\\w*\\b\n</pre>\nWhen things are more complicated, however, scanning a captured substring can be\na useful way to describe the required match. For exmple, there is a rather\ncomplicated pattern in the PCRE2 test data that checks an entire subject string\nfor a palindrome, that is, the sequence of letters is the same in both\ndirections. Suppose you want to search for individual words of two or more\ncharacters such as \"level\" that are palindromes:\n<pre>\n  (\\b\\w{2,}+\\b)(*scs:(1)...palindrome-matching-pattern...)\n</pre>\nWithin a substring scanning subpattern, references to other groups work as\nnormal. Capturing groups may appear, and will retain their values during\nongoing matching if the assertion succeeds.\n</p>\n<h2><a name=\"SEC25\" href=\"#TOC1\">SCRIPT RUNS</a></h2>\n<p>\nIn concept, a script run is a sequence of characters that are all from the same\nUnicode script such as Latin or Greek. However, because some scripts are\ncommonly used together, and because some diacritical and other marks are used\nwith multiple scripts, it is not that simple. There is a full description of\nthe rules that PCRE2 uses in the section entitled\n<a href=\"pcre2unicode.html#scriptruns\">\"Script Runs\"</a>\nin the\n<a href=\"pcre2unicode.html\"><b>pcre2unicode</b></a>\ndocumentation.\n</p>\n<p>\nIf part of a pattern is enclosed between (*script_run: or (*sr: and a closing\nparenthesis, it fails if the sequence of characters that it matches are not a\nscript run. After a failure, normal backtracking occurs. Script runs can be\nused to detect spoofing attacks using characters that look the same, but are\nfrom different scripts. The string \"paypal.com\" is an infamous example, where\nthe letters could be a mixture of Latin and Cyrillic. This pattern ensures that\nthe matched characters in a sequence of non-spaces that follow white space are\na script run:\n<pre>\n  \\s+(*sr:\\S+)\n</pre>\nTo be sure that they are all from the Latin script (for example), a lookahead\ncan be used:\n<pre>\n  \\s+(?=\\p{Latin})(*sr:\\S+)\n</pre>\nThis works as long as the first character is expected to be a character in that\nscript, and not (for example) punctuation, which is allowed with any script. If\nthis is not the case, a more creative lookahead is needed. For example, if\ndigits, underscore, and dots are permitted at the start:\n<pre>\n  \\s+(?=[0-9_.]*\\p{Latin})(*sr:\\S+)\n\n</pre>\n</p>\n<p>\nIn many cases, backtracking into a script run pattern fragment is not\ndesirable. The script run can employ an atomic group to prevent this. Because\nthis is a common requirement, a shorthand notation is provided by\n(*atomic_script_run: or (*asr:\n<pre>\n  (*asr:...) is the same as (*sr:(?&#62;...))\n</pre>\nNote that the atomic group is inside the script run. Putting it outside would\nnot prevent backtracking into the script run pattern.\n</p>\n<p>\nSupport for script runs is not available if PCRE2 is compiled without Unicode\nsupport. A compile-time error is given if any of the above constructs is\nencountered. Script runs are not supported by the alternate matching function,\n<b>pcre2_dfa_match()</b> because they use the same mechanism as capturing\nparentheses.\n</p>\n<p>\n<b>Warning:</b> The (*ACCEPT) control verb\n<a href=\"#acceptverb\">(see below)</a>\nshould not be used within a script run group, because it causes an immediate\nexit from the group, bypassing the script run checking.\n<a name=\"conditions\"></a></p>\n<h2><a name=\"SEC26\" href=\"#TOC1\">CONDITIONAL GROUPS</a></h2>\n<p>\nIt is possible to cause the matching process to obey a pattern fragment\nconditionally or to choose between two alternative fragments, depending on\nthe result of an assertion, or whether a specific capture group has\nalready been matched. The two possible forms of conditional group are:\n<pre>\n  (?(condition)yes-pattern)\n  (?(condition)yes-pattern|no-pattern)\n</pre>\nIf the condition is satisfied, the yes-pattern is used; otherwise the\nno-pattern (if present) is used. An absent no-pattern is equivalent to an empty\nstring (it always matches). If there are more than two alternatives in the\ngroup, a compile-time error occurs. Each of the two alternatives may itself\ncontain nested groups of any form, including conditional groups; the\nrestriction to two alternatives applies only at the level of the condition\nitself. This pattern fragment is an example where the alternatives are complex:\n<pre>\n  (?(1) (A|B|C) | (D | (?(2)E|F) | E) )\n\n</pre>\n</p>\n<p>\nThere are five kinds of condition: references to capture groups, references to\nrecursion, two pseudo-conditions called DEFINE and VERSION, and assertions.\n</p>\n<h3>\nChecking for a used capture group by number\n</h3>\n<p>\nIf the text between the parentheses consists of a sequence of digits, the\ncondition is true if a capture group of that number has previously matched. If\nthere is more than one capture group with the same number (see the earlier\n<a href=\"#recursion\">section about duplicate group numbers),</a>\nthe condition is true if any of them have matched. An alternative notation,\nwhich is a PCRE2 extension, not supported by Perl, is to precede the digits\nwith a plus or minus sign. In this case, the group number is relative rather\nthan absolute. The most recently opened capture group (which could be enclosing\nthis condition) can be referenced by (?(-1), the next most recent by (?(-2),\nand so on. Inside loops it can also make sense to refer to subsequent groups.\nThe next capture group to be opened can be referenced as (?(+1), and so on. The\nvalue zero in any of these forms is not used; it provokes a compile-time error.\n</p>\n<p>\nConsider the following pattern, which contains non-significant white space to\nmake it more readable (assume the PCRE2_EXTENDED option) and to divide it into\nthree parts for ease of discussion:\n<pre>\n  ( \\( )?    [^()]+    (?(1) \\) )\n</pre>\nThe first part matches an optional opening parenthesis, and if that\ncharacter is present, sets it as the first captured substring. The second part\nmatches one or more characters that are not parentheses. The third part is a\nconditional group that tests whether or not the first capture group\nmatched. If it did, that is, if subject started with an opening parenthesis,\nthe condition is true, and so the yes-pattern is executed and a closing\nparenthesis is required. Otherwise, since no-pattern is not present, the\nconditional group matches nothing. In other words, this pattern matches a\nsequence of non-parentheses, optionally enclosed in parentheses.\n</p>\n<p>\nIf you were embedding this pattern in a larger one, you could use a relative\nreference:\n<pre>\n  ...other stuff... ( \\( )?    [^()]+    (?(-1) \\) ) ...\n</pre>\nThis makes the fragment independent of the parentheses in the larger pattern.\n</p>\n<h3>\nChecking for a used capture group by name\n</h3>\n<p>\nPerl uses the syntax (?(&#60;name&#62;)...) or (?('name')...) to test for a used\ncapture group by name. For compatibility with earlier versions of PCRE1, which\nhad this facility before Perl, the syntax (?(name)...) is also recognized.\nNote, however, that undelimited names consisting of the letter R followed by\ndigits are ambiguous (see the following section). Rewriting the above example\nto use a named group gives this:\n<pre>\n  (?&#60;OPEN&#62; \\( )?    [^()]+    (?(&#60;OPEN&#62;) \\) )\n</pre>\nIf the name used in a condition of this kind is a duplicate, the test is\napplied to all groups of the same name, and is true if any one of them has\nmatched.\n</p>\n<h3>\nChecking for pattern recursion\n</h3>\n<p>\n\"Recursion\" in this sense refers to any subroutine-like call from one part of\nthe pattern to another, whether or not it is actually recursive. See the\nsections entitled\n<a href=\"#recursion\">\"Recursive patterns\"</a>\nand\n<a href=\"#groupsassubroutines\">\"Groups as subroutines\"</a>\nbelow for details of recursion and subroutine calls.\n</p>\n<p>\nIf a condition is the string (R), and there is no capture group with the name\nR, the condition is true if matching is currently in a recursion or subroutine\ncall to the whole pattern or any capture group. If digits follow the letter R,\nand there is no group with that name, the condition is true if the most recent\ncall is into a group with the given number, which must exist somewhere in the\noverall pattern. This is a contrived example that is equivalent to a+b:\n<pre>\n  ((?(R1)a+|(?1)b))\n</pre>\nHowever, in both cases, if there is a capture group with a matching name, the\ncondition tests for its being set, as described in the section above, instead\nof testing for recursion. For example, creating a group with the name R1 by\nadding (?&#60;R1&#62;) to the above pattern completely changes its meaning.\n</p>\n<p>\nIf a name preceded by ampersand follows the letter R, for example:\n<pre>\n  (?(R&name)...)\n</pre>\nthe condition is true if the most recent recursion is into a group of that name\n(which must exist within the pattern).\n</p>\n<p>\nThis condition does not check the entire recursion stack. It tests only the\ncurrent level. If the name used in a condition of this kind is a duplicate, the\ntest is applied to all groups of the same name, and is true if any one of\nthem is the most recent recursion.\n</p>\n<p>\nAt \"top level\", all these recursion test conditions are false.\n<a name=\"subdefine\"></a></p>\n<h3>\nDefining capture groups for use by reference only\n</h3>\n<p>\nIf the condition is the string (DEFINE), the condition is always false, even if\nthere is a group with the name DEFINE. In this case, there may be only one\nalternative in the rest of the conditional group. It is always skipped if\ncontrol reaches this point in the pattern; the idea of DEFINE is that it can be\nused to define subroutines that can be referenced from elsewhere. (The use of\n<a href=\"#groupsassubroutines\">subroutines</a>\nis described below.) For example, a pattern to match an IPv4 address such as\n\"192.168.23.245\" could be written like this (ignore white space and line\nbreaks):\n<pre>\n  (?(DEFINE) (?&#60;byte&#62; 2[0-4]\\d | 25[0-5] | 1\\d\\d | [1-9]?\\d) )\n  \\b (?&byte) (\\.(?&byte)){3} \\b\n</pre>\nThe first part of the pattern is a DEFINE group inside which another group\nnamed \"byte\" is defined. This matches an individual component of an IPv4\naddress (a number less than 256). When matching takes place, this part of the\npattern is skipped because DEFINE acts like a false condition. The rest of the\npattern uses references to the named group to match the four dot-separated\ncomponents of an IPv4 address, insisting on a word boundary at each end.\n</p>\n<h3>\nChecking the PCRE2 version\n</h3>\n<p>\nPrograms that link with a PCRE2 library can check the version by calling\n<b>pcre2_config()</b> with appropriate arguments. Users of applications that do\nnot have access to the underlying code cannot do this. A special \"condition\"\ncalled VERSION exists to allow such users to discover which version of PCRE2\nthey are dealing with by using this condition to match a string such as\n\"yesno\". VERSION must be followed either by \"=\" or \"&#62;=\" and a version number.\nFor example:\n<pre>\n  (?(VERSION&#62;=10.4)yes|no)\n</pre>\nThis pattern matches \"yes\" if the PCRE2 version is greater or equal to 10.4, or\n\"no\" otherwise. The fractional part of the version number could be ommited.\n</p>\n<h3>\nAssertion conditions\n</h3>\n<p>\nIf the condition is not in any of the above formats, it must be a parenthesized\nassertion. This may be a positive or negative lookahead or lookbehind\nassertion. However, it must be a traditional atomic assertion, not one of the\n<a href=\"#nonatomicassertions\">non-atomic assertions.</a>\n</p>\n<p>\nConsider this pattern, again containing non-significant white space, and with\nthe two alternatives on the second line:\n<pre>\n  (?(?=[^a-z]*[a-z])\n  \\d{2}-[a-z]{3}-\\d{2}  |  \\d{2}-\\d{2}-\\d{2} )\n</pre>\nThe condition is a positive lookahead assertion that matches an optional\nsequence of non-letters followed by a letter. In other words, it tests for the\npresence of at least one letter in the subject. If a letter is found, the\nsubject is matched against the first alternative; otherwise it is matched\nagainst the second. This pattern matches strings in one of the two forms\ndd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.\n</p>\n<p>\nWhen an assertion that is a condition contains capture groups, any\ncapturing that occurs in a matching branch is retained afterwards, for both\npositive and negative assertions, because matching always continues after the\nassertion, whether it succeeds or fails. (Compare non-conditional assertions,\nfor which captures are retained only for positive assertions that succeed.)\n<a name=\"comments\"></a></p>\n<h2><a name=\"SEC27\" href=\"#TOC1\">COMMENTS</a></h2>\n<p>\nThere are two ways of including comments in patterns that are processed by\nPCRE2. In both cases, the start of the comment must not be in a character\nclass, nor in the middle of any other sequence of related characters such as\n(?: or a group name or number or a Unicode property name. The characters that\nmake up a comment play no part in the pattern matching.\n</p>\n<p>\nThe sequence (?# marks the start of a comment that continues up to the next\nclosing parenthesis. Nested parentheses are not permitted. If the\nPCRE2_EXTENDED or PCRE2_EXTENDED_MORE option is set, an unescaped # character\nalso introduces a comment, which in this case continues to immediately after\nthe next newline character or character sequence in the pattern. Which\ncharacters are interpreted as newlines is controlled by an option passed to the\ncompiling function or by a special sequence at the start of the pattern, as\ndescribed in the section entitled\n<a href=\"#newlines\">\"Newline conventions\"</a>\nabove. Note that the end of this type of comment is a literal newline sequence\nin the pattern; escape sequences that happen to represent a newline do not\ncount. For example, consider this pattern when PCRE2_EXTENDED is set, and the\ndefault newline convention (a single linefeed character) is in force:\n<pre>\n  abc #comment \\n still comment\n</pre>\nOn encountering the # character, <b>pcre2_compile()</b> skips along, looking for\na newline in the pattern. The sequence \\n is still literal at this stage, so\nit does not terminate the comment. Only an actual character with the code value\n0x0a (the default newline) does so.\n<a name=\"recursion\"></a></p>\n<h2><a name=\"SEC28\" href=\"#TOC1\">RECURSIVE PATTERNS</a></h2>\n<p>\nConsider the problem of matching a string in parentheses, allowing for\nunlimited nested parentheses. Without the use of recursion, the best that can\nbe done is to use a pattern that matches up to some fixed depth of nesting. It\nis not possible to handle an arbitrary nesting depth.\n</p>\n<p>\nFor some time, Perl has provided a facility that allows regular expressions to\nrecurse (amongst other things). It does this by interpolating Perl code in the\nexpression at run time, and the code can refer to the expression itself. A Perl\npattern using code interpolation to solve the parentheses problem can be\ncreated like this:\n<pre>\n  $re = qr{\\( (?: (?&#62;[^()]+) | (?p{$re}) )* \\)}x;\n</pre>\nThe (?p{...}) item interpolates Perl code at run time, and in this case refers\nrecursively to the pattern in which it appears.\n</p>\n<p>\nObviously, PCRE2 cannot support the interpolation of Perl code. Instead, it\nsupports special syntax for recursion of the entire pattern, and also for\nindividual capture group recursion. After its introduction in PCRE1 and Python,\nthis kind of recursion was subsequently introduced into Perl at release 5.10.\n</p>\n<p>\nA special item that consists of (? followed by a number greater than zero and a\nclosing parenthesis is a recursive subroutine call of the capture group of the\ngiven number, provided that it occurs inside that group. (If not, it is a\n<a href=\"#groupsassubroutines\">non-recursive subroutine</a>\ncall, which is described in the next section.) The special item (?R) or (?0) is\na recursive call of the entire regular expression.\n</p>\n<p>\nThis PCRE2 pattern solves the nested parentheses problem (assume the\nPCRE2_EXTENDED option is set so that white space is ignored):\n<pre>\n  \\( ( [^()]++ | (?R) )* \\)\n</pre>\nFirst it matches an opening parenthesis. Then it matches any number of\nsubstrings which can either be a sequence of non-parentheses, or a recursive\nmatch of the pattern itself (that is, a correctly parenthesized substring).\nFinally there is a closing parenthesis. Note the use of a possessive quantifier\nto avoid backtracking into sequences of non-parentheses.\n</p>\n<p>\nIf this were part of a larger pattern, you would not want to recurse the entire\npattern, so instead you could use this:\n<pre>\n  ( \\( ( [^()]++ | (?1) )* \\) )\n</pre>\nWe have put the pattern into parentheses, and caused the recursion to refer to\nthem instead of the whole pattern.\n</p>\n<p>\nIn a larger pattern, keeping track of parenthesis numbers can be tricky. This\nis made easier by the use of relative references. Instead of (?1) in the\npattern above you can write (?-2) to refer to the second most recently opened\nparentheses preceding the recursion. In other words, a negative number counts\ncapturing parentheses leftwards from the point at which it is encountered.\n</p>\n<p>\nBe aware however, that if\n<a href=\"#dupgroupnumber\">duplicate capture group numbers</a>\nare in use, relative references refer to the earliest group with the\nappropriate number. Consider, for example:\n<pre>\n  (?|(a)|(b)) (c) (?-2)\n</pre>\nThe first two capture groups (a) and (b) are both numbered 1, and group (c)\nis number 2. When the reference (?-2) is encountered, the second most recently\nopened parentheses has the number 1, but it is the first such group (the (a)\ngroup) to which the recursion refers. This would be the same if an absolute\nreference (?1) was used. In other words, relative references are just a\nshorthand for computing a group number.\n</p>\n<p>\nIt is also possible to refer to subsequent capture groups, by writing\nreferences such as (?+2). However, these cannot be recursive because the\nreference is not inside the parentheses that are referenced. They are always\n<a href=\"#groupsassubroutines\">non-recursive subroutine</a>\ncalls, as described in the next section.\n</p>\n<p>\nAn alternative approach is to use named parentheses. The Perl syntax for this\nis (?&name); PCRE1's earlier syntax (?P&#62;name) is also supported. We could\nrewrite the above example as follows:\n<pre>\n  (?&#60;pn&#62; \\( ( [^()]++ | (?&pn) )* \\) )\n</pre>\nIf there is more than one group with the same name, the earliest one is\nused.\n</p>\n<p>\nThe example pattern that we have been looking at contains nested unlimited\nrepeats, and so the use of a possessive quantifier for matching strings of\nnon-parentheses is important when applying the pattern to strings that do not\nmatch. For example, when this pattern is applied to\n<pre>\n  (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()\n</pre>\nit yields \"no match\" quickly. However, if a possessive quantifier is not used,\nthe match runs for a very long time indeed because there are so many different\nways the + and * repeats can carve up the subject, and all have to be tested\nbefore failure can be reported.\n</p>\n<p>\nAt the end of a match, the values of capturing parentheses are those from\nthe outermost level. If you want to obtain intermediate values, a callout\nfunction can be used (see below and the\n<a href=\"pcre2callout.html\"><b>pcre2callout</b></a>\ndocumentation). If the pattern above is matched against\n<pre>\n  (ab(cd)ef)\n</pre>\nthe value for the inner capturing parentheses (numbered 2) is \"ef\", which is\nthe last value taken on at the top level. If a capture group is not matched at\nthe top level, its final captured value is unset, even if it was (temporarily)\nset at a deeper level during the matching process.\n</p>\n<p>\nDo not confuse the (?R) item with the condition (R), which tests for recursion.\nConsider this pattern, which matches text in angle brackets, allowing for\narbitrary nesting. Only digits are allowed in nested brackets (that is, when\nrecursing), whereas any characters are permitted at the outer level.\n<pre>\n  &#60; (?: (?(R) \\d++  | [^&#60;&#62;]*+) | (?R)) * &#62;\n</pre>\nIn this pattern, (?(R) is the start of a conditional group, with two different\nalternatives for the recursive and non-recursive cases. The (?R) item is the\nactual recursive call.\n<a name=\"recursiondifference\"></a></p>\n<h3>\nDifferences in recursion processing between PCRE2 and Perl\n</h3>\n<p>\nSome former differences between PCRE2 and Perl no longer exist.\n</p>\n<p>\nBefore release 10.30, recursion processing in PCRE2 differed from Perl in that\na recursive subroutine call was always treated as an atomic group. That is,\nonce it had matched some of the subject string, it was never re-entered, even\nif it contained untried alternatives and there was a subsequent matching\nfailure. (Historical note: PCRE implemented recursion before Perl did.)\n</p>\n<p>\nStarting with release 10.30, recursive subroutine calls are no longer treated\nas atomic. That is, they can be re-entered to try unused alternatives if there\nis a matching failure later in the pattern. This is now compatible with the way\nPerl works. If you want a subroutine call to be atomic, you must explicitly\nenclose it in an atomic group.\n</p>\n<p>\nSupporting backtracking into recursions simplifies certain types of recursive\npattern. For example, this pattern matches palindromic strings:\n<pre>\n  ^((.)(?1)\\2|.?)$\n</pre>\nThe second branch in the group matches a single central character in the\npalindrome when there are an odd number of characters, or nothing when there\nare an even number of characters, but in order to work it has to be able to try\nthe second case when the rest of the pattern match fails. If you want to match\ntypical palindromic phrases, the pattern has to ignore all non-word characters,\nwhich can be done like this:\n<pre>\n  ^\\W*+((.)\\W*+(?1)\\W*+\\2|\\W*+.?)\\W*+$\n</pre>\nIf run with the PCRE2_CASELESS option, this pattern matches phrases such as \"A\nman, a plan, a canal: Panama!\". Note the use of the possessive quantifier *+ to\navoid backtracking into sequences of non-word characters. Without this, PCRE2\ntakes a great deal longer (ten times or more) to match typical phrases, and\nPerl takes so long that you think it has gone into a loop.\n</p>\n<p>\nAnother way in which PCRE2 and Perl used to differ in their recursion\nprocessing is in the handling of captured values. Formerly in Perl, when a\ngroup was called recursively or as a subroutine (see the next section), it\nhad no access to any values that were captured outside the recursion, whereas\nin PCRE2 these values can be referenced. Consider this pattern:\n<pre>\n  ^(.)(\\1|a(?2))\n</pre>\nThis pattern matches \"bab\". The first capturing parentheses match \"b\", then in\nthe second group, when the backreference \\1 fails to match \"b\", the second\nalternative matches \"a\" and then recurses. In the recursion, \\1 does now match\n\"b\" and so the whole match succeeds. This match used to fail in Perl, but in\nlater versions (I tried 5.024) it now works.\n<a name=\"groupsassubroutines\"></a></p>\n<h3>\nGroups as subroutines\n</h3>\n<p>\nIf the syntax for a recursive group call (either by number or by name) is used\noutside the parentheses to which it refers, it operates a bit like a subroutine\nin a programming language. More accurately, PCRE2 treats the referenced group\nas an independent subpattern which it tries to match at the current matching\nposition. The called group may be defined before or after the reference. A\nnumbered reference can be absolute or relative, as in these examples:\n<pre>\n  (...(absolute)...)...(?2)...\n  (...(relative)...)...(?-1)...\n  (...(?+1)...(relative)...\n</pre>\nAn earlier example pointed out that the pattern\n<pre>\n  (sens|respons)e and \\1ibility\n</pre>\nmatches \"sense and sensibility\" and \"response and responsibility\", but not\n\"sense and responsibility\". If instead the pattern\n<pre>\n  (sens|respons)e and (?1)ibility\n</pre>\nis used, it does match \"sense and responsibility\" as well as the other two\nstrings. Another example is given in the discussion of DEFINE above.\n</p>\n<p>\nLike recursions, subroutine calls used to be treated as atomic, but this\nchanged at PCRE2 release 10.30, so backtracking into subroutine calls can now\noccur. However, any capturing parentheses that are set during the subroutine\ncall revert to their previous values afterwards.\n</p>\n<p>\nProcessing options such as case-independence are fixed when a group is\ndefined, so if it is used as a subroutine, such options cannot be changed for\ndifferent calls. For example, consider this pattern:\n<pre>\n  (abc)(?i:(?-1))\n</pre>\nIt matches \"abcabc\". It does not match \"abcABC\" because the change of\nprocessing option does not affect the called group.\n</p>\n<p>\nThe behaviour of\n<a href=\"#backtrackcontrol\">backtracking control verbs</a>\nin groups when called as subroutines is described in the section entitled\n<a href=\"#btsub\">\"Backtracking verbs in subroutines\"</a>\nbelow.\n</p>\n<h3>\nRecursion and subroutines with returned capture groups\n</h3>\n<p>\nSince PCRE2 10.47, recursion and subroutine calls may also specify a list of\ncapture groups to return. This is a PCRE2 syntax extension not supported by\nPerl. The pattern matching recurses into the referenced expression as described\nabove, however, when the recursion returns to the calling expression the\nsubgroups captured during the recursion can be retained when the calling\nexpression's context is restored.\n</p>\n<p>\nWhen used as a subroutine, this allows the subroutine's capture groups to\nbe used as return values.\n</p>\n<p>\nOnly the specific capture groups listed by the caller will be retained, using\nthe following syntax:\n<pre>\n  (?R(grouplist))       recurse whole pattern, returning capture groups\n  (?n(grouplist))       )\n  (?+n(grouplist))      )\n  (?-n(grouplist))      ) call subroutine, returning capture groups\n  (?&name(grouplist))   )\n  (?P&#62;name(grouplist))  )\n</pre>\n</p>\n<p>\nThe list of capture groups \"grouplist\" is a comma-separated list of (absolute\nor relative) group numbers, and group names enclosed in single quotes or angle\nbrackets.\n</p>\n<p>\nHere is an example which first uses the DEFINE condition to create a re-usable\nroutine for matching a weekday, then calls that subroutine and retains the\ngroups it captures for use later:\n<pre>\n  (?x: # ignore whitespace for clarity\n    # Define the routine \"weekendday\" which matches Saturday or\n    # Sunday, and returns the Sat/Sun prefix as \\k&#60;short&#62;.\n    (?(DEFINE) (?&#60;weekendday&#62;\n        (?|(?&#60;short&#62;Sat)urday|(?&#60;short&#62;Sun)day) ) )\n    # Call the routine. Matches \"Saturday,Sat\" or \"Sunday,Sun\".\n    (?&weekendday(&#60;short&#62;)),\\k&#60;short&#62; )\n</pre>\n</p>\n<p>\nThis feature is not available using the Oniguruma syntax \\g&#60;...&#62; or \\g'...'\nbelow.\n<a name=\"onigurumasubroutines\"></a></p>\n<h3>\nOniguruma subroutine syntax\n</h3>\n<p>\nFor compatibility with Oniguruma, the non-Perl syntax \\g followed by a name or\na number enclosed either in angle brackets or single quotes, is an alternative\nsyntax for calling a group as a subroutine, possibly recursively. Here are two\nof the examples used above, rewritten using this syntax:\n<pre>\n  (?&#60;pn&#62; \\( ( (?&#62;[^()]+) | \\g&#60;pn&#62; )* \\) )\n  (sens|respons)e and \\g'1'ibility\n</pre>\nPCRE2 supports an extension to Oniguruma: if a number is preceded by a\nplus or a minus sign it is taken as a relative reference. For example:\n<pre>\n  (abc)(?i:\\g&#60;-1&#62;)\n</pre>\nNote that \\g{...} (Perl syntax) and \\g&#60;...&#62; (Oniguruma syntax) are <i>not</i>\nsynonymous. The former is a backreference; the latter is a subroutine call.\n</p>\n<h2><a name=\"SEC29\" href=\"#TOC1\">CALLOUTS</a></h2>\n<p>\nPerl has a feature whereby using the sequence (?{...}) causes arbitrary Perl\ncode to be obeyed in the middle of matching a regular expression. This makes it\npossible, amongst other things, to extract different substrings that match the\nsame pair of parentheses when there is a repetition.\n</p>\n<p>\nPCRE2 provides a similar feature, but of course it cannot obey arbitrary Perl\ncode. The feature is called \"callout\". The caller of PCRE2 provides an external\nfunction by putting its entry point in a match context using the function\n<b>pcre2_set_callout()</b>, and then passing that context to <b>pcre2_match()</b>\nor <b>pcre2_dfa_match()</b>. If no match context is passed, or if the callout\nentry point is set to NULL, callout points will be passed over silently during\nmatching. To disallow callouts in the pattern syntax, you may use the\nPCRE2_EXTRA_NEVER_CALLOUT option.\n</p>\n<p>\nWithin a regular expression, (?C&#60;arg&#62;) indicates a point at which the external\nfunction is to be called. There are two kinds of callout: those with a\nnumerical argument and those with a string argument. (?C) on its own with no\nargument is treated as (?C0). A numerical argument allows the application to\ndistinguish between different callouts. String arguments were added for release\n10.20 to make it possible for script languages that use PCRE2 to embed short\nscripts within patterns in a similar way to Perl.\n</p>\n<p>\nDuring matching, when PCRE2 reaches a callout point, the external function is\ncalled. It is provided with the number or string argument of the callout, the\nposition in the pattern, and one item of data that is also set in the match\nblock. The callout function may cause matching to proceed, to backtrack, or to\nfail.\n</p>\n<p>\nBy default, PCRE2 implements a number of optimizations at matching time, and\none side-effect is that sometimes callouts are skipped. If you need all\npossible callouts to happen, you need to set options that disable the relevant\noptimizations. More details, including a complete description of the\nprogramming interface to the callout function, are given in the\n<a href=\"pcre2callout.html\"><b>pcre2callout</b></a>\ndocumentation.\n</p>\n<h3>\nCallouts with numerical arguments\n</h3>\n<p>\nIf you just want to have a means of identifying different callout points, put a\nnumber less than 256 after the letter C. For example, this pattern has two\ncallout points:\n<pre>\n  (?C1)abc(?C2)def\n</pre>\nIf the PCRE2_AUTO_CALLOUT flag is passed to <b>pcre2_compile()</b>, numerical\ncallouts are automatically installed before each item in the pattern. They are\nall numbered 255. If there is a conditional group in the pattern whose\ncondition is an assertion, an additional callout is inserted just before the\ncondition. An explicit callout may also be set at this position, as in this\nexample:\n<pre>\n  (?(?C9)(?=a)abc|def)\n</pre>\nNote that this applies only to assertion conditions, not to other types of\ncondition.\n</p>\n<h3>\nCallouts with string arguments\n</h3>\n<p>\nA delimited string may be used instead of a number as a callout argument. The\nstarting delimiter must be one of ` ' \" ^ % # $ { and the ending delimiter is\nthe same as the start, except for {, where the ending delimiter is }. If the\nending delimiter is needed within the string, it must be doubled. For\nexample:\n<pre>\n  (?C'ab ''c'' d')xyz(?C{any text})pqr\n</pre>\nThe doubling is removed before the string is passed to the callout function.\n<a name=\"backtrackcontrol\"></a></p>\n<h2><a name=\"SEC30\" href=\"#TOC1\">BACKTRACKING CONTROL</a></h2>\n<p>\nThere are a number of special \"Backtracking Control Verbs\" (to use Perl's\nterminology) that modify the behaviour of backtracking during matching. They\nare generally of the form (*VERB) or (*VERB:NAME). Some verbs take either form,\nand may behave differently depending on whether or not a name argument is\npresent. The names are not required to be unique within the pattern.\n</p>\n<p>\nBy default, for compatibility with Perl, a name is any sequence of characters\nthat does not include a closing parenthesis. The name is not processed in\nany way, and it is not possible to include a closing parenthesis in the name.\nThis can be changed by setting the PCRE2_ALT_VERBNAMES option, but the result\nis no longer Perl-compatible.\n</p>\n<p>\nWhen PCRE2_ALT_VERBNAMES is set, backslash processing is applied to verb names\nand only an unescaped closing parenthesis terminates the name. However, the\nonly backslash items that are permitted are \\Q, \\E, and sequences such as\n\\x{100} that define character code points. Character type escapes such as \\d\nare faulted.\n</p>\n<p>\nA closing parenthesis can be included in a name either as \\) or between \\Q\nand \\E. In addition to backslash processing, if the PCRE2_EXTENDED or\nPCRE2_EXTENDED_MORE option is also set, unescaped white space in verb names is\nskipped, and #-comments are recognized, exactly as in the rest of the pattern.\nPCRE2_EXTENDED and PCRE2_EXTENDED_MORE do not affect verb names unless\nPCRE2_ALT_VERBNAMES is also set.\n</p>\n<p>\nThe maximum length of a name is 255 in the 8-bit library and 65535 in the\n16-bit and 32-bit libraries. If the name is empty, that is, if the closing\nparenthesis immediately follows the colon, the effect is as if the colon were\nnot there. Any number of these verbs may occur in a pattern. Except for\n(*ACCEPT), they may not be quantified.\n</p>\n<p>\nSince these verbs are specifically related to backtracking, most of them can be\nused only when the pattern is to be matched using the traditional matching\nfunction or JIT, because they use backtracking algorithms. With the exception\nof (*FAIL), which behaves like a failing negative assertion, the backtracking\ncontrol verbs cause an error if encountered by the DFA matching function.\n</p>\n<p>\nThe behaviour of these verbs in\n<a href=\"#btrepeat\">repeated groups,</a>\n<a href=\"#btassert\">assertions,</a>\nand in\n<a href=\"#btsub\">capture groups called as subroutines</a>\n(whether or not recursively) is documented below.\n<a name=\"nooptimize\"></a></p>\n<h3>\nOptimizations that affect backtracking verbs\n</h3>\n<p>\nPCRE2 contains some optimizations that are used to speed up matching by running\nsome checks at the start of each match attempt. For example, it may know the\nminimum length of matching subject, or that a particular character must be\npresent. When one of these optimizations bypasses the running of a match, any\nincluded backtracking verbs will not, of course, be processed. You can suppress\nthe start-of-match optimizations by setting the PCRE2_NO_START_OPTIMIZE option\nwhen calling <b>pcre2_compile()</b>, by calling <b>pcre2_set_optimize()</b> with a\nPCRE2_START_OPTIMIZE_OFF directive, or by starting the pattern with\n(*NO_START_OPT). There is more discussion of this option in the section\nentitled\n<a href=\"pcre2api.html#compiling\">\"Compiling a pattern\"</a>\nin the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation.\n</p>\n<p>\nExperiments with Perl suggest that it too has similar optimizations, and like\nPCRE2, turning them off can change the result of a match.\n<a name=\"acceptverb\"></a></p>\n<h3>\nVerbs that act immediately\n</h3>\n<p>\nThe following verbs act as soon as they are encountered.\n<pre>\n   (*ACCEPT) or (*ACCEPT:NAME)\n</pre>\nThis verb causes the match to end successfully, skipping the remainder of the\npattern. However, when it is inside a capture group that is called as a\nsubroutine, only that group is ended successfully. Matching then continues\nat the outer level. If (*ACCEPT) in triggered in a positive assertion, the\nassertion succeeds; in a negative assertion, the assertion fails.\n</p>\n<p>\nIf (*ACCEPT) is inside capturing parentheses, the data so far is captured. For\nexample:\n<pre>\n  A((?:A|B(*ACCEPT)|C)D)\n</pre>\nThis matches \"AB\", \"AAD\", or \"ACD\"; when it matches \"AB\", \"B\" is captured by\nthe outer parentheses.\n</p>\n<p>\n(*ACCEPT) is the only backtracking verb that is allowed to be quantified\nbecause an ungreedy quantification with a minimum of zero acts only when a\nbacktrack happens. Consider, for example,\n<pre>\n  (A(*ACCEPT)??B)C\n</pre>\nwhere A, B, and C may be complex expressions. After matching \"A\", the matcher\nprocesses \"BC\"; if that fails, causing a backtrack, (*ACCEPT) is triggered and\nthe match succeeds. In both cases, all but C is captured. Whereas (*COMMIT)\n(see below) means \"fail on backtrack\", a repeated (*ACCEPT) of this type means\n\"succeed on backtrack\".\n</p>\n<p>\n<b>Warning:</b> (*ACCEPT) should not be used within a script run group, because\nit causes an immediate exit from the group, bypassing the script run checking.\n<pre>\n  (*FAIL) or (*FAIL:NAME)\n</pre>\nThis verb causes a matching failure, forcing backtracking to occur. It may be\nabbreviated to (*F). It is equivalent to (?!) but easier to read. The Perl\ndocumentation notes that it is probably useful only when combined with (?{}) or\n(??{}). Those are, of course, Perl features that are not present in PCRE2. The\nnearest equivalent is the callout feature, as for example in this pattern:\n<pre>\n  a+(?C)(*FAIL)\n</pre>\nA match with the string \"aaaa\" always fails, but the callout is taken before\neach backtrack happens (in this example, 10 times).\n</p>\n<p>\n(*ACCEPT:NAME) and (*FAIL:NAME) behave the same as (*MARK:NAME)(*ACCEPT) and\n(*MARK:NAME)(*FAIL), respectively, that is, a (*MARK) is recorded just before\nthe verb acts.\n</p>\n<h3>\nRecording which path was taken\n</h3>\n<p>\nThere is one verb whose main purpose is to track how a match was arrived at,\nthough it also has a secondary use in conjunction with advancing the match\nstarting point (see (*SKIP) below).\n<pre>\n  (*MARK:NAME) or (*:NAME)\n</pre>\nA name is always required with this verb. For all the other backtracking\ncontrol verbs, a NAME argument is optional.\n</p>\n<p>\nWhen a match succeeds, the name of the last-encountered mark name on the\nmatching path is passed back to the caller as described in the section entitled\n<a href=\"pcre2api.html#matchotherdata\">\"Other information about the match\"</a>\nin the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation. This applies to all instances of (*MARK) and other verbs,\nincluding those inside assertions and atomic groups. However, there are\ndifferences in those cases when (*MARK) is used in conjunction with (*SKIP) as\ndescribed below.\n</p>\n<p>\nThe mark name that was last encountered on the matching path is passed back. A\nverb without a NAME argument is ignored for this purpose. Here is an example of\n<b>pcre2test</b> output, where the \"mark\" modifier requests the retrieval and\noutputting of (*MARK) data:\n<pre>\n    re&#62; /X(*MARK:A)Y|X(*MARK:B)Z/mark\n  data&#62; XY\n   0: XY\n  MK: A\n  XZ\n   0: XZ\n  MK: B\n</pre>\nThe (*MARK) name is tagged with \"MK:\" in this output, and in this example it\nindicates which of the two alternatives matched. This is a more efficient way\nof obtaining this information than putting each alternative in its own\ncapturing parentheses.\n</p>\n<p>\nIf a verb with a name is encountered in a positive assertion that is true, the\nname is recorded and passed back if it is the last-encountered. This does not\nhappen for negative assertions or failing positive assertions.\n</p>\n<p>\nAfter a partial match or a failed match, the last encountered name in the\nentire match process is returned. For example:\n<pre>\n    re&#62; /X(*MARK:A)Y|X(*MARK:B)Z/mark\n  data&#62; XP\n  No match, mark = B\n</pre>\nNote that in this unanchored example the mark is retained from the match\nattempt that started at the letter \"X\" in the subject. Subsequent match\nattempts starting at \"P\" and then with an empty string do not get as far as the\n(*MARK) item, but nevertheless do not reset it.\n</p>\n<p>\nIf you are interested in (*MARK) values after failed matches, you should\nprobably either set the PCRE2_NO_START_OPTIMIZE option or call\n<b>pcre2_set_optimize()</b> with a PCRE2_START_OPTIMIZE_OFF directive\n<a href=\"#nooptimize\">(see above)</a>\nto ensure that the match is always attempted.\n</p>\n<h3>\nVerbs that act after backtracking\n</h3>\n<p>\nThe following verbs do nothing when they are encountered. Matching continues\nwith what follows, but if there is a subsequent match failure, causing a\nbacktrack to the verb, a failure is forced. That is, backtracking cannot pass\nto the left of the verb. However, when one of these verbs appears inside an\natomic group or in an atomic lookaround assertion that is true, its effect is\nconfined to that group, because once the group has been matched, there is never\nany backtracking into it. Backtracking from beyond an atomic assertion or group\nignores the entire group, and seeks a preceding backtracking point.\n</p>\n<p>\nThese verbs differ in exactly what kind of failure occurs when backtracking\nreaches them. The behaviour described below is what happens when the verb is\nnot in a subroutine or an assertion. Subsequent sections cover these special\ncases.\n<pre>\n  (*COMMIT) or (*COMMIT:NAME)\n</pre>\nThis verb causes the whole match to fail outright if there is a later matching\nfailure that causes backtracking to reach it. Even if the pattern is\nunanchored, no further attempts to find a match by advancing the starting point\ntake place. If (*COMMIT) is the only backtracking verb that is encountered,\nonce it has been passed <b>pcre2_match()</b> is committed to finding a match at\nthe current starting point, or not at all. For example:\n<pre>\n  a+(*COMMIT)b\n</pre>\nThis matches \"xxaab\" but not \"aacaab\". It can be thought of as a kind of\ndynamic anchor, or \"I've started, so I must finish.\"\n</p>\n<p>\nThe behaviour of (*COMMIT:NAME) is not the same as (*MARK:NAME)(*COMMIT). It is\nlike (*MARK:NAME) in that the name is remembered for passing back to the\ncaller. However, (*SKIP:NAME) searches only for names that are set with\n(*MARK), ignoring those set by any of the other backtracking verbs.\n</p>\n<p>\nIf there is more than one backtracking verb in a pattern, a different one that\nfollows (*COMMIT) may be triggered first, so merely passing (*COMMIT) during a\nmatch does not always guarantee that a match must be at this starting point.\n</p>\n<p>\nNote that (*COMMIT) at the start of a pattern is not the same as an anchor,\nunless PCRE2's start-of-match optimizations are turned off, as shown in this\noutput from <b>pcre2test</b>:\n<pre>\n    re&#62; /(*COMMIT)abc/\n  data&#62; xyzabc\n   0: abc\n  data&#62;\n  re&#62; /(*COMMIT)abc/no_start_optimize\n  data&#62; xyzabc\n  No match\n</pre>\nFor the first pattern, PCRE2 knows that any match must start with \"a\", so the\noptimization skips along the subject to \"a\" before applying the pattern to the\nfirst set of data. The match attempt then succeeds. The second pattern disables\nthe optimization that skips along to the first character. The pattern is now\napplied starting at \"x\", and so the (*COMMIT) causes the match to fail without\ntrying any other starting points.\n<pre>\n  (*PRUNE) or (*PRUNE:NAME)\n</pre>\nThis verb causes the match to fail at the current starting position in the\nsubject if there is a later matching failure that causes backtracking to reach\nit. If the pattern is unanchored, the normal \"bumpalong\" advance to the next\nstarting character then happens. Backtracking can occur as usual to the left of\n(*PRUNE), before it is reached, or when matching to the right of (*PRUNE), but\nif there is no match to the right, backtracking cannot cross (*PRUNE). In\nsimple cases, the use of (*PRUNE) is just an alternative to an atomic group or\npossessive quantifier, but there are some uses of (*PRUNE) that cannot be\nexpressed in any other way. In an anchored pattern (*PRUNE) has the same effect\nas (*COMMIT).\n</p>\n<p>\nThe behaviour of (*PRUNE:NAME) is not the same as (*MARK:NAME)(*PRUNE). It is\nlike (*MARK:NAME) in that the name is remembered for passing back to the\ncaller. However, (*SKIP:NAME) searches only for names set with (*MARK),\nignoring those set by other backtracking verbs.\n<pre>\n  (*SKIP)\n</pre>\nThis verb, when given without a name, is like (*PRUNE), except that if the\npattern is unanchored, the \"bumpalong\" advance is not to the next character,\nbut to the position in the subject where (*SKIP) was encountered. (*SKIP)\nsignifies that whatever text was matched leading up to it cannot be part of a\nsuccessful match if there is a later mismatch. Consider:\n<pre>\n  a+(*SKIP)b\n</pre>\nIf the subject is \"aaaac...\", after the first match attempt fails (starting at\nthe first character in the string), the starting point skips on to start the\nnext attempt at \"c\". Note that a possessive quantifier does not have the same\neffect as this example; although it would suppress backtracking during the\nfirst match attempt, the second attempt would start at the second character\ninstead of skipping on to \"c\".\n</p>\n<p>\nIf (*SKIP) is used to specify a new starting position that is the same as the\nstarting position of the current match, or (by being inside a lookbehind)\nearlier, the position specified by (*SKIP) is ignored, and instead the normal\n\"bumpalong\" occurs.\n<pre>\n  (*SKIP:NAME)\n</pre>\nWhen (*SKIP) has an associated name, its behaviour is modified. When such a\n(*SKIP) is triggered, the previous path through the pattern is searched for the\nmost recent (*MARK) that has the same name. If one is found, the \"bumpalong\"\nadvance is to the subject position that corresponds to that (*MARK) instead of\nto where (*SKIP) was encountered. If no (*MARK) with a matching name is found,\nthe (*SKIP) is ignored.\n</p>\n<p>\nThe search for a (*MARK) name uses the normal backtracking mechanism, which\nmeans that it does not see (*MARK) settings that are inside atomic groups or\nassertions, because they are never re-entered by backtracking. Compare the\nfollowing <b>pcre2test</b> examples:\n<pre>\n    re&#62; /a(?&#62;(*MARK:X))(*SKIP:X)(*F)|(.)/\n  data: abc\n   0: a\n   1: a\n  data:\n    re&#62; /a(?:(*MARK:X))(*SKIP:X)(*F)|(.)/\n  data: abc\n   0: b\n   1: b\n</pre>\nIn the first example, the (*MARK) setting is in an atomic group, so it is not\nseen when (*SKIP:X) triggers, causing the (*SKIP) to be ignored. This allows\nthe second branch of the pattern to be tried at the first character position.\nIn the second example, the (*MARK) setting is not in an atomic group. This\nallows (*SKIP:X) to find the (*MARK) when it backtracks, and this causes a new\nmatching attempt to start at the second character. This time, the (*MARK) is\nnever seen because \"a\" does not match \"b\", so the matcher immediately jumps to\nthe second branch of the pattern.\n</p>\n<p>\nNote that (*SKIP:NAME) searches only for names set by (*MARK:NAME). It ignores\nnames that are set by other backtracking verbs.\n<pre>\n  (*THEN) or (*THEN:NAME)\n</pre>\nThis verb causes a skip to the next innermost alternative when backtracking\nreaches it. That is, it cancels any further backtracking within the current\nalternative. Its name comes from the observation that it can be used for a\npattern-based if-then-else block:\n<pre>\n  ( COND1 (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ ) ...\n</pre>\nIf the COND1 pattern matches, FOO is tried (and possibly further items after\nthe end of the group if FOO succeeds); on failure, the matcher skips to the\nsecond alternative and tries COND2, without backtracking into COND1. If that\nsucceeds and BAR fails, COND3 is tried. If subsequently BAZ fails, there are no\nmore alternatives, so there is a backtrack to whatever came before the entire\ngroup. If (*THEN) is not inside an alternation, it acts like (*PRUNE).\n</p>\n<p>\nThe behaviour of (*THEN:NAME) is not the same as (*MARK:NAME)(*THEN). It is\nlike (*MARK:NAME) in that the name is remembered for passing back to the\ncaller. However, (*SKIP:NAME) searches only for names set with (*MARK),\nignoring those set by other backtracking verbs.\n</p>\n<p>\nA group that does not contain a | character is just a part of the enclosing\nalternative; it is not a nested alternation with only one alternative. The\neffect of (*THEN) extends beyond such a group to the enclosing alternative.\nConsider this pattern, where A, B, etc. are complex pattern fragments that do\nnot contain any | characters at this level:\n<pre>\n  A (B(*THEN)C) | D\n</pre>\nIf A and B are matched, but there is a failure in C, matching does not\nbacktrack into A; instead it moves to the next alternative, that is, D.\nHowever, if the group containing (*THEN) is given an alternative, it\nbehaves differently:\n<pre>\n  A (B(*THEN)C | (*FAIL)) | D\n</pre>\nThe effect of (*THEN) is now confined to the inner group. After a failure in C,\nmatching moves to (*FAIL), which causes the whole group to fail because there\nare no more alternatives to try. In this case, matching does backtrack into A.\n</p>\n<p>\nNote that a conditional group is not considered as having two alternatives,\nbecause only one is ever used. In other words, the | character in a conditional\ngroup has a different meaning. Ignoring white space, consider:\n<pre>\n  ^.*? (?(?=a) a | b(*THEN)c )\n</pre>\nIf the subject is \"ba\", this pattern does not match. Because .*? is ungreedy,\nit initially matches zero characters. The condition (?=a) then fails, the\ncharacter \"b\" is matched, but \"c\" is not. At this point, matching does not\nbacktrack to .*? as might perhaps be expected from the presence of the |\ncharacter. The conditional group is part of the single alternative that\ncomprises the whole pattern, and so the match fails. (If there was a backtrack\ninto .*?, allowing it to match \"b\", the match would succeed.)\n</p>\n<p>\nThe verbs just described provide four different \"strengths\" of control when\nsubsequent matching fails. (*THEN) is the weakest, carrying on the match at the\nnext alternative. (*PRUNE) comes next, failing the match at the current\nstarting position, but allowing an advance to the next character (for an\nunanchored pattern). (*SKIP) is similar, except that the advance may be more\nthan one character. (*COMMIT) is the strongest, causing the entire match to\nfail.\n</p>\n<h3>\nMore than one backtracking verb\n</h3>\n<p>\nIf more than one backtracking verb is present in a pattern, the one that is\nbacktracked onto first acts. For example, consider this pattern, where A, B,\netc. are complex pattern fragments:\n<pre>\n  (A(*COMMIT)B(*THEN)C|ABD)\n</pre>\nIf A matches but B fails, the backtrack to (*COMMIT) causes the entire match to\nfail. However, if A and B match, but C fails, the backtrack to (*THEN) causes\nthe next alternative (ABD) to be tried. This behaviour is consistent, but is\nnot always the same as Perl's. It means that if two or more backtracking verbs\nappear in succession, all but the last of them has no effect. Consider this\nexample:\n<pre>\n  ...(*COMMIT)(*PRUNE)...\n</pre>\nIf there is a matching failure to the right, backtracking onto (*PRUNE) causes\nit to be triggered, and its action is taken. There can never be a backtrack\nonto (*COMMIT).\n<a name=\"btrepeat\"></a></p>\n<h3>\nBacktracking verbs in repeated groups\n</h3>\n<p>\nPCRE2 sometimes differs from Perl in its handling of backtracking verbs in\nrepeated groups. For example, consider:\n<pre>\n  /(a(*COMMIT)b)+ac/\n</pre>\nIf the subject is \"abac\", Perl matches unless its optimizations are disabled,\nbut PCRE2 always fails because the (*COMMIT) in the second repeat of the group\nacts.\n<a name=\"btassert\"></a></p>\n<h3>\nBacktracking verbs in assertions\n</h3>\n<p>\n(*FAIL) in any assertion has its normal effect: it forces an immediate\nbacktrack. The behaviour of the other backtracking verbs depends on whether or\nnot the assertion is standalone or acting as the condition in a conditional\ngroup.\n</p>\n<p>\n(*ACCEPT) in a standalone positive assertion causes the assertion to succeed\nwithout any further processing; captured strings and a mark name (if set) are\nretained. In a standalone negative assertion, (*ACCEPT) causes the assertion to\nfail without any further processing; captured substrings and any mark name are\ndiscarded.\n</p>\n<p>\nIf the assertion is a condition, (*ACCEPT) causes the condition to be true for\na positive assertion and false for a negative one; captured substrings are\nretained in both cases.\n</p>\n<p>\nThe remaining verbs act only when a later failure causes a backtrack to\nreach them. This means that, for the Perl-compatible assertions, their effect\nis confined to the assertion, because Perl lookaround assertions are atomic. A\nbacktrack that occurs after such an assertion is complete does not jump back\ninto the assertion. Note in particular that a (*MARK) name that is set in an\nassertion is not \"seen\" by an instance of (*SKIP:NAME) later in the pattern.\n</p>\n<p>\nPCRE2 now supports non-atomic positive assertions and also \"scan substring\"\nassertions, as described in the sections entitled\n<a href=\"#nonatomicassertions\">\"Non-atomic assertions\"</a>\nand\n<a href=\"#scansubstringassertions\">\"Scan substring assertions\"</a>\nabove. These assertions must be standalone (not used as conditions). They are\nnot Perl-compatible. For these assertions, a later backtrack does jump back\ninto the assertion, and therefore verbs such as (*COMMIT) can be triggered by\nbacktracks from later in the pattern.\n</p>\n<p>\nThe effect of (*THEN) is not allowed to escape beyond an assertion. If there\nare no more branches to try, (*THEN) causes a positive assertion to be false,\nand a negative assertion to be true. This behaviour differs from Perl when the\nassertion has only one branch.\n</p>\n<p>\nThe other backtracking verbs are not treated specially if they appear in a\nstandalone positive assertion. In a conditional positive assertion,\nbacktracking (from within the assertion) into (*COMMIT), (*SKIP), or (*PRUNE)\ncauses the condition to be false. However, for both standalone and conditional\nnegative assertions, backtracking into (*COMMIT), (*SKIP), or (*PRUNE) causes\nthe assertion to be true, without considering any further alternative branches.\n<a name=\"btsub\"></a></p>\n<h3>\nBacktracking verbs in subroutines\n</h3>\n<p>\nThese behaviours occur whether or not the group is called recursively.\n</p>\n<p>\n(*ACCEPT) in a group called as a subroutine causes the subroutine match to\nsucceed without any further processing. Matching then continues after the\nsubroutine call. Perl documents this behaviour. Perl's treatment of the other\nverbs in subroutines is different in some cases.\n</p>\n<p>\n(*FAIL) in a group called as a subroutine has its normal effect: it forces\nan immediate backtrack.\n</p>\n<p>\n(*COMMIT), (*SKIP), and (*PRUNE) cause the subroutine match to fail when\ntriggered by being backtracked to in a group called as a subroutine. There is\nthen a backtrack at the outer level.\n</p>\n<p>\n(*THEN), when triggered, skips to the next alternative in the innermost\nenclosing group that has alternatives (its normal behaviour). However, if there\nis no such group within the subroutine's group, the subroutine match fails and\nthere is a backtrack at the outer level.\n<a name=\"ebcdicenvironments\"></a></p>\n<h2><a name=\"SEC31\" href=\"#TOC1\">EBCDIC ENVIRONMENTS</a></h2>\n<p>\nDifferences in the way PCRE behaves when it is running in an EBCDIC environment\nare covered in this section.\n</p>\n<h3>\nEscape sequences\n</h3>\n<p>\nWhen PCRE2 is compiled in EBCDIC mode, \\N{U+hhh..} is not supported. \\a, \\e,\n\\f, \\n, \\r, and \\t generate the appropriate EBCDIC code values. The \\c\nescape is processed as specified for Perl in the <b>perlebcdic</b> document. The\nonly characters that are allowed after \\c are A-Z, a-z, or one of @, [, \\, ],\n^, _, or ?. Any other character provokes a compile-time error. The sequence\n\\c@ encodes character code 0; after \\c the letters (in either case) encode\ncharacters 1-26 (hex 01 to hex 1A); [, \\, ], ^, and _ encode characters 27-31\n(hex 1B to hex 1F), and \\c? becomes either 255 (hex FF) or 95 (hex 5F).\n</p>\n<p>\nThus, apart from \\c?, these escapes generate the same character code values as\nthey do in an ASCII or Unicode environment, though the meanings of the values\nmostly differ. For example, \\cG always generates code value 7, which is BEL in\nASCII but DEL in EBCDIC.\n</p>\n<p>\nThe sequence \\c? generates DEL (127, hex 7F) in an ASCII environment, but\nbecause 127 is not a control character in EBCDIC, Perl makes it generate the\nAPC character. Unfortunately, there are several variants of EBCDIC. In most of\nthem the APC character has the value 255 (hex FF), but in the one Perl calls\nPOSIX-BC its value is 95 (hex 5F). If certain other characters have POSIX-BC\nvalues, PCRE2 makes \\c? generate 95; otherwise it generates 255.\n</p>\n<h3>\nCharacter classes\n</h3>\n<p>\nIn character classes there is a special case in EBCDIC environments for ranges\nwhose end points are both specified as literal letters in the same case. For\ncompatibility with Perl, EBCDIC code points within the range that are not\nletters are omitted. For example, [h-k] matches only four characters, even\nthough the EBCDIC codes for h and k are 0x88 and 0x92, a range of 11 code\npoints. However, if the range is specified numerically, for example,\n[\\x88-\\x92] or [h-\\x92], all code points are included.\n</p>\n<h2><a name=\"SEC32\" href=\"#TOC1\">SEE ALSO</a></h2>\n<p>\n<b>pcre2api</b>(3), <b>pcre2callout</b>(3), <b>pcre2matching</b>(3),\n<b>pcre2syntax</b>(3), <b>pcre2</b>(3).\n</p>\n<h2><a name=\"SEC33\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC34\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 03 September 2025\n<br>\nCopyright &copy; 1997-2024 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2perform.html",
    "content": "<html>\n<head>\n<title>pcre2perform specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2perform man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">PCRE2 PERFORMANCE</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">COMPILED PATTERN MEMORY USAGE</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">STACK AND HEAP USAGE AT RUN TIME</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">PROCESSING TIME</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">AUTHOR</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">PCRE2 PERFORMANCE</a></h2>\n<p>\nTwo aspects of performance are discussed below: memory usage and processing\ntime. The way you express your pattern as a regular expression can affect both\nof them.\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">COMPILED PATTERN MEMORY USAGE</a></h2>\n<p>\nPatterns are compiled by PCRE2 into a reasonably efficient interpretive code,\nso that most simple patterns do not use much memory for storing the compiled\nversion. However, there is one case where the memory usage of a compiled\npattern can be unexpectedly large. If a parenthesized group has a quantifier\nwith a minimum greater than 1 and/or a limited maximum, the whole group is\nrepeated in the compiled code. For example, the pattern\n<pre>\n  (abc|def){2,4}\n</pre>\nis compiled as if it were\n<pre>\n  (abc|def)(abc|def)((abc|def)(abc|def)?)?\n</pre>\n(Technical aside: It is done this way so that backtrack points within each of\nthe repetitions can be independently maintained.)\n</p>\n<p>\nFor regular expressions whose quantifiers use only small numbers, this is not\nusually a problem. However, if the numbers are large, and particularly if such\nrepetitions are nested, the memory usage can become an embarrassment. For\nexample, the very simple pattern\n<pre>\n  ((ab){1,1000}c){1,3}\n</pre>\nuses over 50KiB when compiled using the 8-bit library. When PCRE2 is\ncompiled with its default internal pointer size of two bytes, the size limit on\na compiled pattern is 65535 code units in the 8-bit and 16-bit libraries, and\nthis is reached with the above pattern if the outer repetition is increased\nfrom 3 to 4. PCRE2 can be compiled to use larger internal pointers and thus\nhandle larger compiled patterns, but it is better to try to rewrite your\npattern to use less memory if you can.\n</p>\n<p>\nOne way of reducing the memory usage for such patterns is to make use of\nPCRE2's\n<a href=\"pcre2pattern.html#subpatternsassubroutines\">\"subroutine\"</a>\nfacility. Re-writing the above pattern as\n<pre>\n  ((ab)(?2){0,999}c)(?1){0,2}\n</pre>\nreduces the memory requirements to around 16KiB, and indeed it remains under\n20KiB even with the outer repetition increased to 100. However, this kind of\npattern is not always exactly equivalent, because any captures within\nsubroutine calls are lost when the subroutine completes. If this is not a\nproblem, this kind of rewriting will allow you to process patterns that PCRE2\ncannot otherwise handle. The matching performance of the two different versions\nof the pattern are roughly the same. (This applies from release 10.30 - things\nwere different in earlier releases.)\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">STACK AND HEAP USAGE AT RUN TIME</a></h2>\n<p>\nFrom release 10.30, the interpretive (non-JIT) version of <b>pcre2_match()</b>\nuses very little system stack at run time. In earlier releases recursive\nfunction calls could use a great deal of stack, and this could cause problems,\nbut this usage has been eliminated. Backtracking positions are now explicitly\nremembered in memory frames controlled by the code.\n</p>\n<p>\nThe size of each frame depends on the size of pointer variables and the number\nof capturing parenthesized groups in the pattern being matched. On a 64-bit\nsystem the frame size for a pattern with no captures is 128 bytes. For each\ncapturing group the size increases by 16 bytes.\n</p>\n<p>\nUntil release 10.41, an initial 20KiB frames vector was allocated on the system\nstack, but this still caused some issues for multi-thread applications where\neach thread has a very small stack. From release 10.41 backtracking memory\nframes are always held in heap memory. An initial heap allocation is obtained\nthe first time any match data block is passed to <b>pcre2_match()</b>. This is\nremembered with the match data block and re-used if that block is used for\nanother match. It is freed when the match data block itself is freed.\n</p>\n<p>\nThe size of the initial block is the larger of 20KiB or ten times the pattern's\nframe size, unless the heap limit is less than this, in which case the heap\nlimit is used. If the initial block proves to be too small during matching, it\nis replaced by a larger block, subject to the heap limit. The heap limit is\nchecked only when a new block is to be allocated. Reducing the heap limit\nbetween calls to <b>pcre2_match()</b> with the same match data block does not\naffect the saved block.\n</p>\n<p>\nIn contrast to <b>pcre2_match()</b>, <b>pcre2_dfa_match()</b> does use recursive\nfunction calls, but only for processing atomic groups, lookaround assertions,\nand recursion within the pattern. The original version of the code used to\nallocate quite large internal workspace vectors on the stack, which caused some\nproblems for some patterns in environments with small stacks. From release\n10.32 the code for <b>pcre2_dfa_match()</b> has been re-factored to use heap\nmemory when necessary for internal workspace when recursing, though recursive\nfunction calls are still used.\n</p>\n<p>\nThe \"match depth\" parameter can be used to limit the depth of function\nrecursion, and the \"match heap\" parameter to limit heap memory in\n<b>pcre2_dfa_match()</b>.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">PROCESSING TIME</a></h2>\n<p>\nCertain items in regular expression patterns are processed more efficiently\nthan others. It is more efficient to use a character class like [aeiou] than a\nset of single-character alternatives such as (a|e|i|o|u). In general, the\nsimplest construction that provides the required behaviour is usually the most\nefficient. Jeffrey Friedl's book contains a lot of useful general discussion\nabout optimizing regular expressions for efficient performance. This document\ncontains a few observations about PCRE2.\n</p>\n<p>\nUsing Unicode character properties (the \\p, \\P, and \\X escapes) is slow,\nbecause PCRE2 has to use a multi-stage table lookup whenever it needs a\ncharacter's property. If you can find an alternative pattern that does not use\ncharacter properties, it will probably be faster.\n</p>\n<p>\nBy default, the escape sequences \\b, \\d, \\s, and \\w, and the POSIX\ncharacter classes such as [:alpha:] do not use Unicode properties, partly for\nbackwards compatibility, and partly for performance reasons. However, you can\nset the PCRE2_UCP option or start the pattern with (*UCP) if you want Unicode\ncharacter properties to be used. This can double the matching time for items\nsuch as \\d, when matched with <b>pcre2_match()</b>; the performance loss is\nless with a DFA matching function, and in both cases there is not much\ndifference for \\b.\n</p>\n<p>\nWhen a pattern begins with .* not in atomic parentheses, nor in parentheses\nthat are the subject of a backreference, and the PCRE2_DOTALL option is set,\nthe pattern is implicitly anchored by PCRE2, since it can match only at the\nstart of a subject string. If the pattern has multiple top-level branches, they\nmust all be anchorable. The optimization can be disabled by the\nPCRE2_NO_DOTSTAR_ANCHOR option, and is automatically disabled if the pattern\ncontains (*PRUNE) or (*SKIP).\n</p>\n<p>\nIf PCRE2_DOTALL is not set, PCRE2 cannot make this optimization, because the\ndot metacharacter does not then match a newline, and if the subject string\ncontains newlines, the pattern may match from the character immediately\nfollowing one of them instead of from the very start. For example, the pattern\n<pre>\n  .*second\n</pre>\nmatches the subject \"first\\nand second\" (where \\n stands for a newline\ncharacter), with the match starting at the seventh character. In order to do\nthis, PCRE2 has to retry the match starting after every newline in the subject.\n</p>\n<p>\nIf you are using such a pattern with subject strings that do not contain\nnewlines, the best performance is obtained by setting PCRE2_DOTALL, or starting\nthe pattern with ^.* or ^.*? to indicate explicit anchoring. That saves PCRE2\nfrom having to scan along the subject looking for a newline to restart at.\n</p>\n<p>\nBeware of patterns that contain nested indefinite repeats. These can take a\nlong time to run when applied to a string that does not match. Consider the\npattern fragment\n<pre>\n  ^(a+)*\n</pre>\nThis can match \"aaaa\" in 16 different ways, and this number increases very\nrapidly as the string gets longer. (The * repeat can match 0, 1, 2, 3, or 4\ntimes, and for each of those cases other than 0 or 4, the + repeats can match\ndifferent numbers of times.) When the remainder of the pattern is such that the\nentire match is going to fail, PCRE2 has in principle to try every possible\nvariation, and this can take an extremely long time, even for relatively short\nstrings.\n</p>\n<p>\nAn optimization catches some of the more simple cases such as\n<pre>\n  (a+)*b\n</pre>\nwhere a literal character follows. Before embarking on the standard matching\nprocedure, PCRE2 checks that there is a \"b\" later in the subject string, and if\nthere is not, it fails the match immediately. However, when there is no\nfollowing literal this optimization cannot be used. You can see the difference\nby comparing the behaviour of\n<pre>\n  (a+)*\\d\n</pre>\nwith the pattern above. The former gives a failure almost instantly when\napplied to a whole line of \"a\" characters, whereas the latter takes an\nappreciable time with strings longer than about 20 characters.\n</p>\n<p>\nIn many cases, the solution to this kind of performance issue is to use an\natomic group or a possessive quantifier. This can often reduce memory\nrequirements as well. As another example, consider this pattern:\n<pre>\n  ([^&#60;]|&#60;(?!inet))+\n</pre>\nIt matches from wherever it starts until it encounters \"&#60;inet\" or the end of\nthe data, and is the kind of pattern that might be used when processing an XML\nfile. Each iteration of the outer parentheses matches either one character that\nis not \"&#60;\" or a \"&#60;\" that is not followed by \"inet\". However, each time a\nparenthesis is processed, a backtracking position is passed, so this\nformulation uses a memory frame for each matched character. For a long string,\na lot of memory is required. Consider now this rewritten pattern, which matches\nexactly the same strings:\n<pre>\n  ([^&#60;]++|&#60;(?!inet))+\n</pre>\nThis runs much faster, because sequences of characters that do not contain \"&#60;\"\nare \"swallowed\" in one item inside the parentheses, and a possessive quantifier\nis used to stop any backtracking into the runs of non-\"&#60;\" characters. This\nversion also uses a lot less memory because entry to a new set of parentheses\nhappens only when a \"&#60;\" character that is not followed by \"inet\" is encountered\n(and we assume this is relatively rare).\n</p>\n<p>\nThis example shows that one way of optimizing performance when matching long\nsubject strings is to write repeated parenthesized subpatterns to match more\nthan one character whenever possible.\n</p>\n<h3>\nSETTING RESOURCE LIMITS\n</h3>\n<p>\nYou can set limits on the amount of processing that takes place when matching,\nand on the amount of heap memory that is used. The default values of the limits\nare very large, and unlikely ever to operate. They can be changed when PCRE2 is\nbuilt, and they can also be set when <b>pcre2_match()</b> or\n<b>pcre2_dfa_match()</b> is called. For details of these interfaces, see the\n<a href=\"pcre2build.html\"><b>pcre2build</b></a>\ndocumentation and the section entitled\n<a href=\"pcre2api.html#matchcontext\">\"The match context\"</a>\nin the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation.\n</p>\n<p>\nThe <b>pcre2test</b> test program has a modifier called \"find_limits\" which, if\napplied to a subject line, causes it to find the smallest limits that allow a\npattern to match. This is done by repeatedly matching with different limits.\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 06 December 2022\n<br>\nCopyright &copy; 1997-2022 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2posix.html",
    "content": "<html>\n<head>\n<title>pcre2posix specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2posix man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">SYNOPSIS</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">DESCRIPTION</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">USING THE POSIX FUNCTIONS</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">COMPILING A PATTERN</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">MATCHING NEWLINE CHARACTERS</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">MATCHING A PATTERN</a>\n<li><a name=\"TOC7\" href=\"#SEC7\">ERROR MESSAGES</a>\n<li><a name=\"TOC8\" href=\"#SEC8\">MEMORY USAGE</a>\n<li><a name=\"TOC9\" href=\"#SEC9\">AUTHOR</a>\n<li><a name=\"TOC10\" href=\"#SEC10\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">SYNOPSIS</a></h2>\n<p>\n<b>#include &#60;pcre2posix.h&#62;</b>\n</p>\n<p>\n<b>int pcre2_regcomp(regex_t *<i>preg</i>, const char *<i>pattern</i>,</b>\n<b>     int <i>cflags</i>);</b>\n<br>\n<br>\n<b>int pcre2_regexec(const regex_t *<i>preg</i>, const char *<i>string</i>,</b>\n<b>     size_t <i>nmatch</i>, regmatch_t <i>pmatch</i>[], int <i>eflags</i>);</b>\n<br>\n<br>\n<b>size_t pcre2_regerror(int <i>errcode</i>, const regex_t *<i>preg</i>,</b>\n<b>     char *<i>errbuf</i>, size_t <i>errbuf_size</i>);</b>\n<br>\n<br>\n<b>void pcre2_regfree(regex_t *<i>preg</i>);</b>\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">DESCRIPTION</a></h2>\n<p>\nThis set of functions provides a POSIX-style API for the PCRE2 regular\nexpression 8-bit library. There are no POSIX-style wrappers for PCRE2's 16-bit\nand 32-bit libraries. See the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation for a description of PCRE2's native API, which contains much\nadditional functionality.\n</p>\n<p>\n<b>IMPORTANT NOTE</b>: The functions described here are NOT thread-safe, and\nshould not be used in multi-threaded applications. They are also limited to\nprocessing subjects that are not bigger than 2GB. Use the native API instead.\n</p>\n<p>\nThese functions are wrapper functions that ultimately call the PCRE2 native\nAPI. Their prototypes are defined in the <b>pcre2posix.h</b> header file, and\nthey all have unique names starting with <b>pcre2_</b>. However, the\n<b>pcre2posix.h</b> header also contains macro definitions that convert the\nstandard POSIX names such <b>regcomp()</b> into <b>pcre2_regcomp()</b> etc. This\nmeans that a program can use the usual POSIX names without running the risk of\naccidentally linking with POSIX functions from a different library.\n</p>\n<p>\nOn Unix-like systems the PCRE2 POSIX library is called <b>libpcre2-posix</b>, so\ncan be accessed by adding <b>-lpcre2-posix</b> to the command for linking an\napplication. Because the POSIX functions call the native ones, it is also\nnecessary to add <b>-lpcre2-8</b>.\n</p>\n<p>\nOn Windows systems, if you are linking to a DLL version of the library, it is\nrecommended that <b>PCRE2POSIX_SHARED</b> is defined before including the\n<b>pcre2posix.h</b> header, as it will allow for a more efficient way to\ninvoke the functions by adding the <b>__declspec(dllimport)</b> decorator.\n</p>\n<p>\nAlthough they were not defined as prototypes in <b>pcre2posix.h</b>, releases\n10.33 to 10.36 of the library contained functions with the POSIX names\n<b>regcomp()</b> etc. These simply passed their arguments to the PCRE2\nfunctions. These functions were provided for backwards compatibility with\nearlier versions of PCRE2, which had only POSIX names. However, this has proved\ntroublesome in situations where a program links with several libraries, some of\nwhich use PCRE2's POSIX interface while others use the real POSIX functions.\nFor this reason, the POSIX names have been removed since release 10.37.\n</p>\n<p>\nCalling the header file <b>pcre2posix.h</b> avoids any conflict with other POSIX\nlibraries. It can, of course, be renamed or aliased as <b>regex.h</b>, which is\nthe \"correct\" name, if there is no clash. It provides two structure types,\n<i>regex_t</i> for compiled internal forms, and <i>regmatch_t</i> for returning\ncaptured substrings. It also defines some constants whose names start with\n\"REG_\"; these are used for setting options and identifying error codes.\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">USING THE POSIX FUNCTIONS</a></h2>\n<p>\nNote that these functions are just POSIX-style wrappers for PCRE2's native API.\nThey do not give POSIX regular expression behaviour, and they are not\nthread-safe or even POSIX compatible.\n</p>\n<p>\nThose POSIX option bits that can reasonably be mapped to PCRE2 native options\nhave been implemented. In addition, the option REG_EXTENDED is defined with the\nvalue zero. This has no effect, but since programs that are written to the\nPOSIX interface often use it, this makes it easier to slot in PCRE2 as a\nreplacement library. Other POSIX options are not even defined.\n</p>\n<p>\nThere are also some options that are not defined by POSIX. These have been\nadded at the request of users who want to make use of certain PCRE2-specific\nfeatures via the POSIX calling interface or to add BSD or GNU functionality.\n</p>\n<p>\nWhen PCRE2 is called via these functions, it is only the API that is POSIX-like\nin style. The syntax and semantics of the regular expressions themselves are\nstill those of Perl, subject to the setting of various PCRE2 options, as\ndescribed below. \"POSIX-like in style\" means that the API approximates to the\nPOSIX definition; it is not fully POSIX-compatible, and in multi-unit encoding\ndomains it is probably even less compatible.\n</p>\n<p>\nThe descriptions below use the actual names of the functions, but, as described\nabove, the standard POSIX names (without the <b>pcre2_</b> prefix) may also be\nused.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">COMPILING A PATTERN</a></h2>\n<p>\nThe function <b>pcre2_regcomp()</b> is called to compile a pattern into an\ninternal form. By default, the pattern is a C string terminated by a binary\nzero (but see REG_PEND below). The <i>preg</i> argument is a pointer to a\n<b>regex_t</b> structure that is used as a base for storing information about\nthe compiled regular expression. It is also used for input when REG_PEND is\nset. The <b>regex_t</b> structure used by <b>pcre2_regcomp()</b> is defined in\n<b>pcre2posix.h</b> and is not the same as the structure used by other libraries\nthat provide POSIX-style matching.\n</p>\n<p>\nThe argument <i>cflags</i> is either zero, or contains one or more of the bits\ndefined by the following macros:\n<pre>\n  REG_DOTALL\n</pre>\nThe PCRE2_DOTALL option is set when the regular expression is passed for\ncompilation to the native function. Note that REG_DOTALL is not part of the\nPOSIX standard.\n<pre>\n  REG_ICASE\n</pre>\nThe PCRE2_CASELESS option is set when the regular expression is passed for\ncompilation to the native function.\n<pre>\n  REG_NEWLINE\n</pre>\nThe PCRE2_MULTILINE option is set when the regular expression is passed for\ncompilation to the native function. Note that this does <i>not</i> mimic the\ndefined POSIX behaviour for REG_NEWLINE (see the following section).\n<pre>\n  REG_NOSPEC\n</pre>\nThe PCRE2_LITERAL option is set when the regular expression is passed for\ncompilation to the native function. This disables all meta characters in the\npattern, causing it to be treated as a literal string. The only other options\nthat are allowed with REG_NOSPEC are REG_ICASE, REG_NOSUB, REG_PEND, and\nREG_UTF. Note that REG_NOSPEC is not part of the POSIX standard.\n<pre>\n  REG_NOSUB\n</pre>\nWhen a pattern that is compiled with this flag is passed to\n<b>pcre2_regexec()</b> for matching, the <i>nmatch</i> and <i>pmatch</i> arguments\nare ignored, and no captured strings are returned. Versions of the PCRE2 library\nprior to 10.22 used to set the PCRE2_NO_AUTO_CAPTURE compile option, but this\nno longer happens because it disables the use of backreferences.\n<pre>\n  REG_PEND\n</pre>\nIf this option is set, the <b>reg_endp</b> field in the <i>preg</i> structure\n(which has the type const char *) must be set to point to the character beyond\nthe end of the pattern before calling <b>pcre2_regcomp()</b>. The pattern itself\nmay now contain binary zeros, which are treated as data characters. Without\nREG_PEND, a binary zero terminates the pattern and the <b>re_endp</b> field is\nignored. This is a GNU extension to the POSIX standard and should be used with\ncaution in software intended to be portable to other systems.\n<pre>\n  REG_UCP\n</pre>\nThe PCRE2_UCP option is set when the regular expression is passed for\ncompilation to the native function. This causes PCRE2 to use Unicode properties\nwhen matching \\d, \\w, etc., instead of just recognizing ASCII values. Note\nthat REG_UCP is not part of the POSIX standard.\n<pre>\n  REG_UNGREEDY\n</pre>\nThe PCRE2_UNGREEDY option is set when the regular expression is passed for\ncompilation to the native function. Note that REG_UNGREEDY is not part of the\nPOSIX standard.\n<pre>\n  REG_UTF\n</pre>\nThe PCRE2_UTF option is set when the regular expression is passed for\ncompilation to the native function. This causes the pattern itself and all data\nstrings used for matching it to be treated as UTF-8 strings. Note that REG_UTF\nis not part of the POSIX standard.\n</p>\n<p>\nIn the absence of these flags, no options are passed to the native function.\nThis means that the regex is compiled with PCRE2 default semantics. In\nparticular, the way it handles newline characters in the subject string is the\nPerl way, not the POSIX way. Note that setting PCRE2_MULTILINE has only\n<i>some</i> of the effects specified for REG_NEWLINE. It does not affect the way\nnewlines are matched by the dot metacharacter (they are not) or by a negative\nclass such as [^a] (they are).\n</p>\n<p>\nThe yield of <b>pcre2_regcomp()</b> is zero on success, and non-zero otherwise.\nThe <i>preg</i> structure is filled in on success, and one other member of the\nstructure (as well as <i>re_endp</i>) is public: <i>re_nsub</i> contains the\nnumber of capturing subpatterns in the regular expression. Various error codes\nare defined in the header file.\n</p>\n<p>\nNOTE: If the yield of <b>pcre2_regcomp()</b> is non-zero, you must not attempt\nto use the contents of the <i>preg</i> structure. If, for example, you pass it\nto <b>pcre2_regexec()</b>, the result is undefined and your program is likely to\ncrash.\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">MATCHING NEWLINE CHARACTERS</a></h2>\n<p>\nThis area is not simple, because POSIX and Perl take different views of things.\nIt is not possible to get PCRE2 to obey POSIX semantics, but then PCRE2 was\nnever intended to be a POSIX engine. The following table lists the different\npossibilities for matching newline characters in Perl and PCRE2:\n<pre>\n                          Default   Change with\n\n  . matches newline          no     PCRE2_DOTALL\n  newline matches [^a]       yes    not changeable\n  $ matches \\n at end        yes    PCRE2_DOLLAR_ENDONLY\n  $ matches \\n in middle     no     PCRE2_MULTILINE\n  ^ matches \\n in middle     no     PCRE2_MULTILINE\n</pre>\nThis is the equivalent table for a POSIX-compatible pattern matcher:\n<pre>\n                          Default   Change with\n\n  . matches newline          yes    REG_NEWLINE\n  newline matches [^a]       yes    REG_NEWLINE\n  $ matches \\n at end        no     REG_NEWLINE\n  $ matches \\n in middle     no     REG_NEWLINE\n  ^ matches \\n in middle     no     REG_NEWLINE\n</pre>\nThis behaviour is not what happens when PCRE2 is called via its POSIX\nAPI. By default, PCRE2's behaviour is the same as Perl's, except that there is\nno equivalent for PCRE2_DOLLAR_ENDONLY in Perl. In both PCRE2 and Perl, there\nis no way to stop newline from matching [^a].\n</p>\n<p>\nDefault POSIX newline handling can be obtained by setting PCRE2_DOTALL and\nPCRE2_DOLLAR_ENDONLY when calling <b>pcre2_compile()</b> directly, but there is\nno way to make PCRE2 behave exactly as for the REG_NEWLINE action. When using\nthe POSIX API, passing REG_NEWLINE to PCRE2's <b>pcre2_regcomp()</b> function\ncauses PCRE2_MULTILINE to be passed to <b>pcre2_compile()</b>, and REG_DOTALL\npasses PCRE2_DOTALL. There is no way to pass PCRE2_DOLLAR_ENDONLY.\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">MATCHING A PATTERN</a></h2>\n<p>\nThe function <b>pcre2_regexec()</b> is called to match a compiled pattern\n<i>preg</i> against a given <i>string</i>, which is by default terminated by a\nzero byte (but see REG_STARTEND below), subject to the options in <i>eflags</i>.\nThese can be:\n<pre>\n  REG_NOTBOL\n</pre>\nThe PCRE2_NOTBOL option is set when calling the underlying PCRE2 matching\nfunction.\n<pre>\n  REG_NOTEMPTY\n</pre>\nThe PCRE2_NOTEMPTY option is set when calling the underlying PCRE2 matching\nfunction. Note that REG_NOTEMPTY is not part of the POSIX standard. However,\nsetting this option can give more POSIX-like behaviour in some situations.\n<pre>\n  REG_NOTEOL\n</pre>\nThe PCRE2_NOTEOL option is set when calling the underlying PCRE2 matching\nfunction.\n<pre>\n  REG_STARTEND\n</pre>\nWhen this option is set, the subject string starts at <i>string</i> +\n<i>pmatch[0].rm_so</i> and ends at <i>string</i> + <i>pmatch[0].rm_eo</i>, which\nshould point to the first character beyond the string. There may be binary\nzeros within the subject string, and indeed, using REG_STARTEND is the only\nway to pass a subject string that contains a binary zero.\n</p>\n<p>\nWhatever the value of <i>pmatch[0].rm_so</i>, the offsets of the matched string\nand any captured substrings are still given relative to the start of\n<i>string</i> itself. (Before PCRE2 release 10.30 these were given relative to\n<i>string</i> + <i>pmatch[0].rm_so</i>, but this differs from other\nimplementations.)\n</p>\n<p>\nThis is a BSD extension, compatible with but not specified by IEEE Standard\n1003.2 (POSIX.2), and should be used with caution in software intended to be\nportable to other systems. Note that a non-zero <i>rm_so</i> does not imply\nREG_NOTBOL; REG_STARTEND affects only the location and length of the string,\nnot how it is matched. Setting REG_STARTEND and passing <i>pmatch</i> as NULL\nare mutually exclusive; the error REG_INVARG is returned.\n</p>\n<p>\nIf the pattern was compiled with the REG_NOSUB flag, no data about any matched\nstrings is returned. The <i>nmatch</i> and <i>pmatch</i> arguments of\n<b>pcre2_regexec()</b> are ignored (except possibly as input for REG_STARTEND).\n</p>\n<p>\nThe value of <i>nmatch</i> may be zero, and the value <i>pmatch</i> may be NULL\n(unless REG_STARTEND is set); in both these cases no data about any matched\nstrings is returned.\n</p>\n<p>\nOtherwise, the portion of the string that was matched, and also any captured\nsubstrings, are returned via the <i>pmatch</i> argument, which points to an\narray of <i>nmatch</i> structures of type <i>regmatch_t</i>, containing the\nmembers <i>rm_so</i> and <i>rm_eo</i>. These contain the byte offset to the first\ncharacter of each substring and the offset to the first character after the end\nof each substring, respectively. The 0th element of the vector relates to the\nentire portion of <i>string</i> that was matched; subsequent elements relate to\nthe capturing subpatterns of the regular expression. Unused entries in the\narray have both structure members set to -1.\n</p>\n<p>\n<i>regmatch_t</i> as well as the <i>regoff_t</i> typedef it uses are defined in\n<b>pcre2posix.h</b> and are not warranted to have the same size or layout as other\nsimilarly named types from other libraries that provide POSIX-style matching.\n</p>\n<p>\nA successful match yields a zero return; various error codes are defined in the\nheader file, of which REG_NOMATCH is the \"expected\" failure code.\n</p>\n<h2><a name=\"SEC7\" href=\"#TOC1\">ERROR MESSAGES</a></h2>\n<p>\nThe <b>pcre2_regerror()</b> function maps a non-zero errorcode from either\n<b>pcre2_regcomp()</b> or <b>pcre2_regexec()</b> to a printable message. If\n<i>preg</i> is not NULL, the error should have arisen from the use of that\nstructure. A message terminated by a binary zero is placed in <i>errbuf</i>. If\nthe buffer is too short, only the first <i>errbuf_size</i> - 1 characters of the\nerror message are used. The yield of the function is the size of buffer needed\nto hold the whole message, including the terminating zero. This value is\ngreater than <i>errbuf_size</i> if the message was truncated.\n</p>\n<h2><a name=\"SEC8\" href=\"#TOC1\">MEMORY USAGE</a></h2>\n<p>\nCompiling a regular expression causes memory to be allocated and associated\nwith the <i>preg</i> structure. The function <b>pcre2_regfree()</b> frees all\nsuch memory, after which <i>preg</i> may no longer be used as a compiled\nexpression.\n</p>\n<h2><a name=\"SEC9\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC10\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 27 November 2024\n<br>\nCopyright &copy; 1997-2024 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2sample.html",
    "content": "<html>\n<head>\n<title>pcre2sample specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2sample man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nPCRE2 SAMPLE PROGRAM\n</h2>\n<p>\nA simple, complete demonstration program to get you started with using PCRE2 is\nsupplied in the file <i>pcre2demo.c</i> in the <b>src</b> directory in the PCRE2\ndistribution. A listing of this program is given in the\n<a href=\"pcre2demo.html\"><b>pcre2demo</b></a>\ndocumentation. If you do not have a copy of the PCRE2 distribution, you can\nsave this listing to recreate the contents of <i>pcre2demo.c</i>.\n</p>\n<p>\nThe demonstration program compiles the regular expression that is its\nfirst argument, and matches it against the subject string in its second\nargument. No PCRE2 options are set, and default character tables are used. If\nmatching succeeds, the program outputs the portion of the subject that matched,\ntogether with the contents of any captured substrings.\n</p>\n<p>\nIf the -g option is given on the command line, the program then goes on to\ncheck for further matches of the same regular expression in the same subject\nstring. The logic is a little bit tricky because of the possibility of matching\nan empty string. Comments in the code explain what is going on.\n</p>\n<p>\nThe code in <b>pcre2demo.c</b> is an 8-bit program that uses the PCRE2 8-bit\nlibrary. It handles strings and characters that are stored in 8-bit code units.\nBy default, one character corresponds to one code unit, but if the pattern\nstarts with \"(*UTF)\", both it and the subject are treated as UTF-8 strings,\nwhere characters may occupy multiple code units.\n</p>\n<p>\nIf PCRE2 is installed in the standard include and library directories for your\noperating system, you should be able to compile the demonstration program using\na command like this:\n<pre>\n  cc -o pcre2demo pcre2demo.c -lpcre2-8\n</pre>\nIf PCRE2 is installed elsewhere, you may need to add additional options to the\ncommand line. For example, on a Unix-like system that has PCRE2 installed in\n<i>/usr/local</i>, you can compile the demonstration program using a command\nlike this:\n<pre>\n  cc -o pcre2demo -I/usr/local/include pcre2demo.c -L/usr/local/lib -lpcre2-8\n</pre>\nOnce you have built the demonstration program, you can run simple tests like\nthis:\n<pre>\n  ./pcre2demo 'cat|dog' 'the cat sat on the mat'\n  ./pcre2demo -g 'cat|dog' 'the dog sat on the cat'\n  ./pcre2demo -i 'cat' 'the dog sat on the CAT'\n</pre>\nNote that there is a much more comprehensive test program, called\n<a href=\"pcre2test.html\"><b>pcre2test</b>,</a>\nwhich supports many more facilities for testing regular expressions using all\nthree PCRE2 libraries (8-bit, 16-bit, and 32-bit, though not all three need be\ninstalled). The\n<a href=\"pcre2demo.html\"><b>pcre2demo</b></a>\nprogram is provided as a relatively simple coding example.\n</p>\n<p>\nIf you try to run\n<a href=\"pcre2demo.html\"><b>pcre2demo</b></a>\nwhen PCRE2 is not installed in the standard library directory, you may get an\nerror like this on some operating systems (e.g. Solaris):\n<pre>\n  ld.so.1: pcre2demo: fatal: libpcre2-8.so.0: open failed: No such file or directory\n</pre>\nThis is caused by the way shared library support works on those systems. You\nneed to add\n<pre>\n  -R/usr/local/lib\n</pre>\n(for example) to the compile command to get round this problem.\n</p>\n<h2>\nAUTHOR\n</h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2>\nREVISION\n</h2>\n<p>\nLast updated: 28 February 2025\n<br>\nCopyright &copy; 1997-2016 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2serialize.html",
    "content": "<html>\n<head>\n<title>pcre2serialize specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2serialize man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">SAVING AND RE-USING PRECOMPILED PCRE2 PATTERNS</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">SECURITY CONCERNS</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">SAVING COMPILED PATTERNS</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">RE-USING PRECOMPILED PATTERNS</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">AUTHOR</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">SAVING AND RE-USING PRECOMPILED PCRE2 PATTERNS</a></h2>\n<p>\n<b>int32_t pcre2_serialize_decode(pcre2_code **<i>codes</i>,</b>\n<b>  int32_t <i>number_of_codes</i>, const uint8_t *<i>bytes</i>,</b>\n<b>  pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>int32_t pcre2_serialize_encode(const pcre2_code **<i>codes</i>,</b>\n<b>  int32_t <i>number_of_codes</i>, uint8_t **<i>serialized_bytes</i>,</b>\n<b>  PCRE2_SIZE *<i>serialized_size</i>, pcre2_general_context *<i>gcontext</i>);</b>\n<br>\n<br>\n<b>void pcre2_serialize_free(uint8_t *<i>bytes</i>);</b>\n<br>\n<br>\n<b>int32_t pcre2_serialize_get_number_of_codes(const uint8_t *<i>bytes</i>);</b>\n<br>\n<br>\nIf you are running an application that uses a large number of regular\nexpression patterns, it may be useful to store them in a precompiled form\ninstead of having to compile them every time the application is run. However,\nif you are using the just-in-time optimization feature, it is not possible to\nsave and reload the JIT data, because it is position-dependent. The host on\nwhich the patterns are reloaded must be running the same version of PCRE2, with\nthe same code unit width, and must also have the same endianness, pointer width\nand PCRE2_SIZE type. For example, patterns compiled on a 32-bit system using\nPCRE2's 16-bit library cannot be reloaded on a 64-bit system, nor can they be\nreloaded using the 8-bit library.\n</p>\n<p>\nNote that \"serialization\" in PCRE2 does not convert compiled patterns to an\nabstract format like Java or .NET serialization. The serialized output is\nreally just a bytecode dump, which is why it can only be reloaded in the same\nenvironment as the one that created it. Hence the restrictions mentioned above.\nApplications that are not statically linked with a fixed version of PCRE2 must\nbe prepared to recompile patterns from their sources, in order to be immune to\nPCRE2 upgrades.\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">SECURITY CONCERNS</a></h2>\n<p>\nThe facility for saving and restoring compiled patterns is intended for use\nwithin individual applications. As such, the data supplied to\n<b>pcre2_serialize_decode()</b> is expected to be trusted data, not data from\narbitrary external sources. There is only some simple consistency checking, not\ncomplete validation of what is being re-loaded. Corrupted data may cause\nundefined results. For example, if the length field of a pattern in the\nserialized data is corrupted, the deserializing code may read beyond the end of\nthe byte stream that is passed to it.\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">SAVING COMPILED PATTERNS</a></h2>\n<p>\nBefore compiled patterns can be saved they must be serialized, which in PCRE2\nmeans converting the pattern to a stream of bytes. A single byte stream may\ncontain any number of compiled patterns, but they must all use the same\ncharacter tables. A single copy of the tables is included in the byte stream\n(its size is 1088 bytes). For more details of character tables, see the\n<a href=\"pcre2api.html#localesupport\">section on locale support</a>\nin the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation.\n</p>\n<p>\nThe function <b>pcre2_serialize_encode()</b> creates a serialized byte stream\nfrom a list of compiled patterns. Its first two arguments specify the list,\nbeing a pointer to a vector of pointers to compiled patterns, and the length of\nthe vector. The third and fourth arguments point to variables which are set to\npoint to the created byte stream and its length, respectively. The final\nargument is a pointer to a general context, which can be used to specify custom\nmemory management functions. If this argument is NULL, <b>malloc()</b> is used\nto obtain memory for the byte stream. The yield of the function is the number\nof serialized patterns, or one of the following negative error codes:\n<pre>\n  PCRE2_ERROR_BADDATA      the number of patterns is zero or less\n  PCRE2_ERROR_BADMAGIC     mismatch of id bytes in one of the patterns\n  PCRE2_ERROR_NOMEMORY     memory allocation failed\n  PCRE2_ERROR_MIXEDTABLES  the patterns do not all use the same tables\n  PCRE2_ERROR_NULL         the 1st, 3rd, or 4th argument is NULL\n</pre>\nPCRE2_ERROR_BADMAGIC means either that a pattern's code has been corrupted, or\nthat a slot in the vector does not point to a compiled pattern.\n</p>\n<p>\nOnce a set of patterns has been serialized you can save the data in any\nappropriate manner. Here is sample code that compiles two patterns and writes\nthem to a file. It assumes that the variable <i>fd</i> refers to a file that is\nopen for output. The error checking that should be present in a real\napplication has been omitted for simplicity.\n<pre>\n  int errorcode;\n  uint8_t *bytes;\n  PCRE2_SIZE erroroffset;\n  PCRE2_SIZE bytescount;\n  pcre2_code *list_of_codes[2];\n  list_of_codes[0] = pcre2_compile(\"first pattern\",\n    PCRE2_ZERO_TERMINATED, 0, &errorcode, &erroroffset, NULL);\n  list_of_codes[1] = pcre2_compile(\"second pattern\",\n    PCRE2_ZERO_TERMINATED, 0, &errorcode, &erroroffset, NULL);\n  errorcode = pcre2_serialize_encode(list_of_codes, 2, &bytes,\n    &bytescount, NULL);\n  errorcode = fwrite(bytes, 1, bytescount, fd);\n</pre>\nNote that the serialized data is binary data that may contain any of the 256\npossible byte values. On systems that make a distinction between binary and\nnon-binary data, be sure that the file is opened for binary output.\n</p>\n<p>\nSerializing a set of patterns leaves the original data untouched, so they can\nstill be used for matching. Their memory must eventually be freed in the usual\nway by calling <b>pcre2_code_free()</b>. When you have finished with the byte\nstream, it too must be freed by calling <b>pcre2_serialize_free()</b>. If this\nfunction is called with a NULL argument, it returns immediately without doing\nanything.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">RE-USING PRECOMPILED PATTERNS</a></h2>\n<p>\nIn order to re-use a set of saved patterns you must first make the serialized\nbyte stream available in main memory (for example, by reading from a file). The\nmanagement of this memory block is up to the application. You can use the\n<b>pcre2_serialize_get_number_of_codes()</b> function to find out how many\ncompiled patterns are in the serialized data without actually decoding the\npatterns:\n<pre>\n  uint8_t *bytes = &#60;serialized data&#62;;\n  int32_t number_of_codes = pcre2_serialize_get_number_of_codes(bytes);\n</pre>\nThe <b>pcre2_serialize_decode()</b> function reads a byte stream and recreates\nthe compiled patterns in new memory blocks, setting pointers to them in a\nvector. The first two arguments are a pointer to a suitable vector and its\nlength, and the third argument points to a byte stream. The final argument is a\npointer to a general context, which can be used to specify custom memory\nmanagement functions for the decoded patterns. If this argument is NULL,\n<b>malloc()</b> and <b>free()</b> are used. After deserialization, the byte\nstream is no longer needed and can be discarded.\n<pre>\n  pcre2_code *list_of_codes[2];\n  uint8_t *bytes = &#60;serialized data&#62;;\n  int32_t number_of_codes =\n    pcre2_serialize_decode(list_of_codes, 2, bytes, NULL);\n</pre>\nIf the vector is not large enough for all the patterns in the byte stream, it\nis filled with those that fit, and the remainder are ignored. The yield of the\nfunction is the number of decoded patterns, or one of the following negative\nerror codes:\n<pre>\n  PCRE2_ERROR_BADDATA    second argument is zero or less\n  PCRE2_ERROR_BADMAGIC   mismatch of id bytes in the data\n  PCRE2_ERROR_BADMODE    mismatch of code unit size or PCRE2 version\n  PCRE2_ERROR_BADSERIALIZEDDATA  other sanity check failure\n  PCRE2_ERROR_MEMORY     memory allocation failed\n  PCRE2_ERROR_NULL       first or third argument is NULL\n</pre>\nPCRE2_ERROR_BADMAGIC may mean that the data is corrupt, or that it was compiled\non a system with different endianness.\n</p>\n<p>\nDecoded patterns can be used for matching in the usual way, and must be freed\nby calling <b>pcre2_code_free()</b>. However, be aware that there is a potential\nrace issue if you are using multiple patterns that were decoded from a single\nbyte stream in a multithreaded application. A single copy of the character\ntables is used by all the decoded patterns and a reference count is used to\narrange for its memory to be automatically freed when the last pattern is\nfreed, but there is no locking on this reference count. Therefore, if you want\nto call <b>pcre2_code_free()</b> for these patterns in different threads, you\nmust arrange your own locking, and ensure that <b>pcre2_code_free()</b> cannot\nbe called by two threads at the same time.\n</p>\n<p>\nIf a pattern was processed by <b>pcre2_jit_compile()</b> before being\nserialized, the JIT data is discarded and so is no longer available after a\nsave/restore cycle. You can, however, process a restored pattern with\n<b>pcre2_jit_compile()</b> if you wish.\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 19 January 2024\n<br>\nCopyright &copy; 1997-2018 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2syntax.html",
    "content": "<html>\n<head>\n<title>pcre2syntax specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2syntax man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">PCRE2 REGULAR EXPRESSION SYNTAX SUMMARY</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">QUOTING</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">BRACED ITEMS</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">ESCAPED CHARACTERS</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">CHARACTER TYPES</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">GENERAL CATEGORY PROPERTIES FOR \\p and \\P</a>\n<li><a name=\"TOC7\" href=\"#SEC7\">PCRE2 SPECIAL CATEGORY PROPERTIES FOR \\p and \\P</a>\n<li><a name=\"TOC8\" href=\"#SEC8\">BINARY PROPERTIES FOR \\p AND \\P</a>\n<li><a name=\"TOC9\" href=\"#SEC9\">SCRIPT MATCHING WITH \\p AND \\P</a>\n<li><a name=\"TOC10\" href=\"#SEC10\">THE BIDI_CLASS PROPERTY FOR \\p AND \\P</a>\n<li><a name=\"TOC11\" href=\"#SEC11\">CHARACTER CLASSES</a>\n<li><a name=\"TOC12\" href=\"#SEC12\">PERL EXTENDED CHARACTER CLASSES</a>\n<li><a name=\"TOC13\" href=\"#SEC13\">QUANTIFIERS</a>\n<li><a name=\"TOC14\" href=\"#SEC14\">ANCHORS AND SIMPLE ASSERTIONS</a>\n<li><a name=\"TOC15\" href=\"#SEC15\">REPORTED MATCH POINT SETTING</a>\n<li><a name=\"TOC16\" href=\"#SEC16\">ALTERNATION</a>\n<li><a name=\"TOC17\" href=\"#SEC17\">CAPTURING</a>\n<li><a name=\"TOC18\" href=\"#SEC18\">ATOMIC GROUPS</a>\n<li><a name=\"TOC19\" href=\"#SEC19\">COMMENT</a>\n<li><a name=\"TOC20\" href=\"#SEC20\">OPTION SETTING</a>\n<li><a name=\"TOC21\" href=\"#SEC21\">NEWLINE CONVENTION</a>\n<li><a name=\"TOC22\" href=\"#SEC22\">WHAT \\R MATCHES</a>\n<li><a name=\"TOC23\" href=\"#SEC23\">LOOKAHEAD AND LOOKBEHIND ASSERTIONS</a>\n<li><a name=\"TOC24\" href=\"#SEC24\">NON-ATOMIC LOOKAROUND ASSERTIONS</a>\n<li><a name=\"TOC25\" href=\"#SEC25\">SUBSTRING SCAN ASSERTION</a>\n<li><a name=\"TOC26\" href=\"#SEC26\">SCRIPT RUNS</a>\n<li><a name=\"TOC27\" href=\"#SEC27\">BACKREFERENCES</a>\n<li><a name=\"TOC28\" href=\"#SEC28\">SUBROUTINE REFERENCES (POSSIBLY RECURSIVE)</a>\n<li><a name=\"TOC29\" href=\"#SEC29\">CONDITIONAL PATTERNS</a>\n<li><a name=\"TOC30\" href=\"#SEC30\">BACKTRACKING CONTROL</a>\n<li><a name=\"TOC31\" href=\"#SEC31\">CALLOUTS</a>\n<li><a name=\"TOC32\" href=\"#SEC32\">REPLACEMENT STRINGS</a>\n<li><a name=\"TOC33\" href=\"#SEC33\">SEE ALSO</a>\n<li><a name=\"TOC34\" href=\"#SEC34\">AUTHOR</a>\n<li><a name=\"TOC35\" href=\"#SEC35\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">PCRE2 REGULAR EXPRESSION SYNTAX SUMMARY</a></h2>\n<p>\nThe full syntax and semantics of the regular expression patterns that are\nsupported by PCRE2 are described in the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation. This document contains a quick-reference summary of the pattern\nsyntax followed by the syntax of replacement strings in substitution function.\nThe full description of the latter is in the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation.\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">QUOTING</a></h2>\n<p>\n<pre>\n  \\x         where x is non-alphanumeric is a literal x\n  \\Q...\\E    treat enclosed characters as literal\n</pre>\nNote that white space inside \\Q...\\E is always treated as literal, even if\nPCRE2_EXTENDED is set, causing most other white space to be ignored. Note also\nthat PCRE2's handling of \\Q...\\E has some differences from Perl's. See the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation for details.\n</p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">BRACED ITEMS</a></h2>\n<p>\nWith one exception, wherever brace characters { and } are required to enclose\ndata for constructions such as \\g{2} or \\k{name}, space and/or horizontal tab\ncharacters that follow { or precede } are allowed and are ignored. In the case\nof quantifiers, they may also appear before or after the comma. The exception\nis \\u{...} which is not Perl-compatible and is recognized only when\nPCRE2_EXTRA_ALT_BSUX is set. This is an ECMAScript compatibility feature, and\nfollows ECMAScript's behaviour.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">ESCAPED CHARACTERS</a></h2>\n<p>\nThis table applies to ASCII and Unicode environments. An unrecognized escape\nsequence causes an error.\n<pre>\n  \\a         alarm, that is, the BEL character (hex 07)\n  \\cx        \"control-x\", where x is a non-control ASCII character\n  \\e         escape (hex 1B)\n  \\f         form feed (hex 0C)\n  \\n         newline (hex 0A)\n  \\r         carriage return (hex 0D)\n  \\t         tab (hex 09)\n  \\0dd       character with octal code 0dd\n  \\ddd       character with octal code ddd, or backreference\n  \\o{ddd..}  character with octal code ddd..\n  \\N{U+hh..} character with Unicode code point hh.. (Unicode mode only)\n  \\xhh       character with hex code hh\n  \\x{hh..}   character with hex code hh..\n</pre>\n\\N{U+hh..} is synonymous with \\x{hh..} but is not supported in environments\nthat use EBCDIC code (mainly IBM mainframes). Note that \\N not followed by an\nopening curly bracket has a different meaning (see below).\n</p>\n<p>\nIf PCRE2_ALT_BSUX or PCRE2_EXTRA_ALT_BSUX is set (\"ALT_BSUX mode\"), the\nfollowing are also recognized:\n<pre>\n  \\U         the character \"U\"\n  \\uhhhh     character with hex code hhhh\n  \\u{hh..}   character with hex code hh.. but only for EXTRA_ALT_BSUX\n</pre>\nWhen \\x is not followed by {, one or two hexadecimal digits are read,\nbut in ALT_BSUX mode \\x must be followed by two hexadecimal digits to be\nrecognized as a hexadecimal escape; otherwise it matches a literal \"x\".\nLikewise, if \\u (in ALT_BSUX mode) is not followed by four hexadecimal digits\nor (in EXTRA_ALT_BSUX mode) a sequence of hex digits in curly brackets, it\nmatches a literal \"u\".\n</p>\n<p>\nNote that \\0dd is always an octal code. The treatment of backslash followed by\na non-zero digit is complicated; for details see the section\n<a href=\"pcre2pattern.html#digitsafterbackslash\">\"Non-printing characters\"</a>\nin the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation, where details of escape processing in EBCDIC environments are\nalso given.\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">CHARACTER TYPES</a></h2>\n<p>\n<pre>\n  .          any character except newline;\n               in dotall mode, any character whatsoever\n  \\C         one code unit, even in UTF mode (best avoided)\n  \\d         a decimal digit\n  \\D         a character that is not a decimal digit\n  \\h         a horizontal white space character\n  \\H         a character that is not a horizontal white space character\n  \\N         a character that is not a newline\n  \\p{<i>xx</i>}     a character with the <i>xx</i> property\n  \\P{<i>xx</i>}     a character without the <i>xx</i> property\n  \\R         a newline sequence\n  \\s         a white space character\n  \\S         a character that is not a white space character\n  \\v         a vertical white space character\n  \\V         a character that is not a vertical white space character\n  \\w         a \"word\" character\n  \\W         a \"non-word\" character\n  \\X         a Unicode extended grapheme cluster\n</pre>\n\\C is dangerous because it may leave the current matching point in the middle\nof a UTF-8 or UTF-16 character. The application can lock out the use of \\C by\nsetting the PCRE2_NEVER_BACKSLASH_C option. It is also possible to build PCRE2\nwith the use of \\C permanently disabled.\n</p>\n<p>\nBy default, \\d, \\s, and \\w match only ASCII characters, even in UTF-8 mode\nor in the 16-bit and 32-bit libraries. However, if locale-specific matching is\nhappening, \\s and \\w may also match characters with code points in the range\n128-255. If the PCRE2_UCP option is set, the behaviour of these escape\nsequences is changed to use Unicode properties and they match many more\ncharacters, but there are some option settings that can restrict individual\nsequences to matching only ASCII characters.\n</p>\n<p>\nProperty descriptions in \\p and \\P are matched caselessly; hyphens,\nunderscores, and ASCII white space characters are ignored, in accordance with\nUnicode's \"loose matching\" rules. For example, \\p{Bidi_Class=al} is the same\nas \\p{ bidi class = AL }.\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">GENERAL CATEGORY PROPERTIES FOR \\p and \\P</a></h2>\n<p>\n<pre>\n  C          Other\n  Cc         Control\n  Cf         Format\n  Cn         Unassigned\n  Co         Private use\n  Cs         Surrogate\n\n  L          Letter\n  Lc         Cased letter, the union of Ll, Lu, and Lt\n  L&         Synonym of Lc\n  Ll         Lower case letter\n  Lm         Modifier letter\n  Lo         Other letter\n  Lt         Title case letter\n  Lu         Upper case letter\n\n  M          Mark\n  Mc         Spacing mark\n  Me         Enclosing mark\n  Mn         Non-spacing mark\n\n  N          Number\n  Nd         Decimal number\n  Nl         Letter number\n  No         Other number\n\n  P          Punctuation\n  Pc         Connector punctuation\n  Pd         Dash punctuation\n  Pe         Close punctuation\n  Pf         Final punctuation\n  Pi         Initial punctuation\n  Po         Other punctuation\n  Ps         Open punctuation\n\n  S          Symbol\n  Sc         Currency symbol\n  Sk         Modifier symbol\n  Sm         Mathematical symbol\n  So         Other symbol\n\n  Z          Separator\n  Zl         Line separator\n  Zp         Paragraph separator\n  Zs         Space separator\n</pre>\nFrom release 10.45, when caseless matching is set, Ll, Lu, and Lt are all\nequivalent to Lc.\n</p>\n<h2><a name=\"SEC7\" href=\"#TOC1\">PCRE2 SPECIAL CATEGORY PROPERTIES FOR \\p and \\P</a></h2>\n<p>\n<pre>\n  Xan        Alphanumeric: union of properties L and N\n  Xps        POSIX space: property Z or tab, NL, VT, FF, CR\n  Xsp        Perl space: property Z or tab, NL, VT, FF, CR\n  Xuc        Universally-named character: one that can be\n               represented by a Universal Character Name\n  Xwd        Perl word: property Xan or underscore\n</pre>\nPerl and POSIX space are now the same. Perl added VT to its space character set\nat release 5.18.\n</p>\n<h2><a name=\"SEC8\" href=\"#TOC1\">BINARY PROPERTIES FOR \\p AND \\P</a></h2>\n<p>\nUnicode defines a number of binary properties, that is, properties whose only\nvalues are true or false. You can obtain a list of those that are recognized by\n\\p and \\P, along with their abbreviations, by running this command:\n<pre>\n  pcre2test -LP\n</pre>\n</p>\n<h2><a name=\"SEC9\" href=\"#TOC1\">SCRIPT MATCHING WITH \\p AND \\P</a></h2>\n<p>\nMany script names and their 4-letter abbreviations are recognized in\n\\p{sc:...} or \\p{scx:...} items, or on their own with \\p (and also \\P of\ncourse). You can obtain a list of these scripts by running this command:\n<pre>\n  pcre2test -LS\n</pre>\n</p>\n<h2><a name=\"SEC10\" href=\"#TOC1\">THE BIDI_CLASS PROPERTY FOR \\p AND \\P</a></h2>\n<p>\n<pre>\n  \\p{Bidi_Class:&#60;class&#62;}   matches a character with the given class\n  \\p{BC:&#60;class&#62;}           matches a character with the given class\n</pre>\nThe recognized classes are:\n<pre>\n  AL          Arabic letter\n  AN          Arabic number\n  B           paragraph separator\n  BN          boundary neutral\n  CS          common separator\n  EN          European number\n  ES          European separator\n  ET          European terminator\n  FSI         first strong isolate\n  L           left-to-right\n  LRE         left-to-right embedding\n  LRI         left-to-right isolate\n  LRO         left-to-right override\n  NSM         non-spacing mark\n  ON          other neutral\n  PDF         pop directional format\n  PDI         pop directional isolate\n  R           right-to-left\n  RLE         right-to-left embedding\n  RLI         right-to-left isolate\n  RLO         right-to-left override\n  S           segment separator\n  WS          white space\n</pre>\n</p>\n<h2><a name=\"SEC11\" href=\"#TOC1\">CHARACTER CLASSES</a></h2>\n<p>\n<pre>\n  [...]       positive character class\n  [^...]      negative character class\n  [x-y]       range (can be used for hex characters)\n  [[:xxx:]]   positive POSIX named set\n  [[:^xxx:]]  negative POSIX named set\n\n  alnum       alphanumeric\n  alpha       alphabetic\n  ascii       0-127\n  blank       space or tab\n  cntrl       control character\n  digit       decimal digit\n  graph       printing, excluding space\n  lower       lower case letter\n  print       printing, including space\n  punct       printing, excluding alphanumeric\n  space       white space\n  upper       upper case letter\n  word        same as \\w\n  xdigit      hexadecimal digit\n</pre>\nIn PCRE2, POSIX character set names recognize only ASCII characters by default,\nbut some of them use Unicode properties if PCRE2_UCP is set. You can use\n\\Q...\\E inside a character class.\n</p>\n<p>\nWhen PCRE2_ALT_EXTENDED_CLASS is set, UTS#18 extended character classes may be\nused, allowing nested character classes, combined using set operators.\n<pre>\n  [x&&[^y]]   UTS#18 extended character class\n\n  x||y        set union (OR)\n  x&&y        set intersection (AND)\n  x--y        set difference (AND NOT)\n  x~~y        set symmetric difference (XOR)\n\n</pre>\n</p>\n<h2><a name=\"SEC12\" href=\"#TOC1\">PERL EXTENDED CHARACTER CLASSES</a></h2>\n<p>\n<pre>\n  (?[...])                Perl extended character class\n  (?[\\p{Thai} & \\p{Nd}])  operators; white space ignored\n  (?[(x - y) & z])        parentheses for grouping\n\n  (?[ [^3] & \\p{Nd} ])    [...] is a nested ordinary class\n  (?[ [:alpha:] - [z] ])  POSIX set is allowed outside [...]\n  (?[ \\d - [3] ])         backslash-escaped set is allowed outside [...]\n  (?[ !\\n & [:ascii:] ])  backslash-escaped character is allowed outside [...]\n                      all other characters or ranges must be enclosed in [...]\n\n  x|y, x+y                set union (OR)\n  x&y                     set intersection (AND)\n  x-y                     set difference (AND NOT)\n  x^y                     set symmetric difference (XOR)\n  !x                      set complement (NOT)\n</pre>\nInside a Perl extended character class, [...] switches mode to be interpreted\nas an ordinary character class. Outside of a nested [...], the only items\npermitted are backslash-escapes, POSIX sets, operators, and parentheses. Inside\na nested ordinary class, ^ has its usual meaning (inverts the class when used\nas the first character); outside of a nested class, ^ is the XOR operator.\n</p>\n<h2><a name=\"SEC13\" href=\"#TOC1\">QUANTIFIERS</a></h2>\n<p>\n<pre>\n  ?           0 or 1, greedy\n  ?+          0 or 1, possessive\n  ??          0 or 1, lazy\n  *           0 or more, greedy\n  *+          0 or more, possessive\n  *?          0 or more, lazy\n  +           1 or more, greedy\n  ++          1 or more, possessive\n  +?          1 or more, lazy\n  {n}         exactly n\n  {n,m}       at least n, no more than m, greedy\n  {n,m}+      at least n, no more than m, possessive\n  {n,m}?      at least n, no more than m, lazy\n  {n,}        n or more, greedy\n  {n,}+       n or more, possessive\n  {n,}?       n or more, lazy\n  {,m}        zero up to m, greedy\n  {,m}+       zero up to m, possessive\n  {,m}?       zero up to m, lazy\n</pre>\n</p>\n<h2><a name=\"SEC14\" href=\"#TOC1\">ANCHORS AND SIMPLE ASSERTIONS</a></h2>\n<p>\n<pre>\n  \\b          word boundary\n  \\B          not a word boundary\n  ^           start of subject\n                also after an internal newline in multiline mode\n                (after any newline if PCRE2_ALT_CIRCUMFLEX is set)\n  \\A          start of subject\n  $           end of subject\n                also before newline at end of subject\n                also before internal newline in multiline mode\n  \\Z          end of subject\n                also before newline at end of subject\n  \\z          end of subject\n  \\G          first matching position in subject\n</pre>\n</p>\n<h2><a name=\"SEC15\" href=\"#TOC1\">REPORTED MATCH POINT SETTING</a></h2>\n<p>\n<pre>\n  \\K          set reported start of match\n</pre>\nFrom release 10.38 \\K is not permitted by default in lookaround assertions,\nfor compatibility with Perl. However, if the PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK\noption is set, the previous behaviour is re-enabled. When this option is set,\n\\K is honoured in positive assertions, but ignored in negative ones.\n</p>\n<h2><a name=\"SEC16\" href=\"#TOC1\">ALTERNATION</a></h2>\n<p>\n<pre>\n  expr|expr|expr...\n</pre>\n</p>\n<h2><a name=\"SEC17\" href=\"#TOC1\">CAPTURING</a></h2>\n<p>\n<pre>\n  (...)           capture group\n  (?&#60;name&#62;...)    named capture group (Perl)\n  (?'name'...)    named capture group (Perl)\n  (?P&#60;name&#62;...)   named capture group (Python)\n  (?:...)         non-capture group\n  (?|...)         non-capture group; reset group numbers for\n                   capture groups in each alternative\n</pre>\nIn non-UTF modes, names may contain underscores and ASCII letters and digits;\nin UTF modes, any Unicode letters and Unicode decimal digits are permitted. In\nboth cases, a name must not start with a digit.\n</p>\n<h2><a name=\"SEC18\" href=\"#TOC1\">ATOMIC GROUPS</a></h2>\n<p>\n<pre>\n  (?&#62;...)         atomic non-capture group\n  (*atomic:...)   atomic non-capture group\n</pre>\n</p>\n<h2><a name=\"SEC19\" href=\"#TOC1\">COMMENT</a></h2>\n<p>\n<pre>\n  (?#....)        comment (not nestable)\n</pre>\n</p>\n<h2><a name=\"SEC20\" href=\"#TOC1\">OPTION SETTING</a></h2>\n<p>\nChanges of these options within a group are automatically cancelled at the end\nof the group.\n<pre>\n  (?a)            all ASCII options\n  (?aD)           restrict \\d to ASCII in UCP mode\n  (?aS)           restrict \\s to ASCII in UCP mode\n  (?aW)           restrict \\w to ASCII in UCP mode\n  (?aP)           restrict all POSIX classes to ASCII in UCP mode\n  (?aT)           restrict POSIX digit classes to ASCII in UCP mode\n  (?i)            caseless\n  (?J)            allow duplicate named groups\n  (?m)            multiline\n  (?n)            no auto capture\n  (?r)            restrict caseless to either ASCII or non-ASCII\n  (?s)            single line (dotall)\n  (?U)            default ungreedy (lazy)\n  (?x)            ignore white space except in classes or \\Q...\\E\n  (?xx)           as (?x) but also ignore space and tab in classes\n  (?-...)         unset the given option(s)\n  (?^)            unset imnrsx options\n</pre>\n(?aP) implies (?aT) as well, though this has no additional effect. However, it\nmeans that (?-aP) also implies (?-aT) and disables all ASCII restrictions for\nPOSIX classes.\n</p>\n<p>\nUnsetting x or xx unsets both. Several options may be set at once, and a\nmixture of setting and unsetting such as (?i-x) is allowed, but there may be\nonly one hyphen. Setting (but no unsetting) is allowed after (?^ for example\n(?^in). An option setting may appear at the start of a non-capture group, for\nexample (?i:...).\n</p>\n<p>\nThe following are recognized only at the very start of a pattern or after one\nof the newline or \\R sequences or options with similar syntax. More than one\nof them may appear. For the first three, d is a decimal number.\n<pre>\n  (*LIMIT_DEPTH=d)     set the backtracking limit to d\n  (*LIMIT_HEAP=d)      set the heap size limit to d * 1024 bytes\n  (*LIMIT_MATCH=d)     set the match limit to d\n  (*CASELESS_RESTRICT) set PCRE2_EXTRA_CASELESS_RESTRICT when matching\n  (*NOTEMPTY)          set PCRE2_NOTEMPTY when matching\n  (*NOTEMPTY_ATSTART)  set PCRE2_NOTEMPTY_ATSTART when matching\n  (*NO_AUTO_POSSESS)   no auto-possessification (PCRE2_NO_AUTO_POSSESS)\n  (*NO_DOTSTAR_ANCHOR) no .* anchoring (PCRE2_NO_DOTSTAR_ANCHOR)\n  (*NO_JIT)            disable JIT optimization\n  (*NO_START_OPT)      no start-match optimization (PCRE2_NO_START_OPTIMIZE)\n  (*TURKISH_CASING)    set PCRE2_EXTRA_TURKISH_CASING when matching\n  (*UTF)               set appropriate UTF mode for the library in use\n  (*UCP)               set PCRE2_UCP (use Unicode properties for \\d etc)\n</pre>\nNote that LIMIT_DEPTH, LIMIT_HEAP, and LIMIT_MATCH can only reduce the value of\nthe limits set by the caller of <b>pcre2_match()</b> or <b>pcre2_dfa_match()</b>,\nnot increase them. LIMIT_RECURSION is an obsolete synonym for LIMIT_DEPTH. The\napplication can lock out the use of (*UTF) and (*UCP) by setting the\nPCRE2_NEVER_UTF or PCRE2_NEVER_UCP options, respectively, at compile time.\n</p>\n<h2><a name=\"SEC21\" href=\"#TOC1\">NEWLINE CONVENTION</a></h2>\n<p>\nThese are recognized only at the very start of the pattern or after option\nsettings with a similar syntax.\n<pre>\n  (*CR)           carriage return only\n  (*LF)           linefeed only\n  (*CRLF)         carriage return followed by linefeed\n  (*ANYCRLF)      all three of the above\n  (*ANY)          any Unicode newline sequence\n  (*NUL)          the NUL character (binary zero)\n</pre>\n</p>\n<h2><a name=\"SEC22\" href=\"#TOC1\">WHAT \\R MATCHES</a></h2>\n<p>\nThese are recognized only at the very start of the pattern or after option\nsetting with a similar syntax.\n<pre>\n  (*BSR_ANYCRLF)  CR, LF, or CRLF\n  (*BSR_UNICODE)  any Unicode newline sequence\n</pre>\n</p>\n<h2><a name=\"SEC23\" href=\"#TOC1\">LOOKAHEAD AND LOOKBEHIND ASSERTIONS</a></h2>\n<p>\n<pre>\n  (?=...)                     )\n  (*pla:...)                  ) positive lookahead\n  (*positive_lookahead:...)   )\n\n  (?!...)                     )\n  (*nla:...)                  ) negative lookahead\n  (*negative_lookahead:...)   )\n\n  (?&#60;=...)                    )\n  (*plb:...)                  ) positive lookbehind\n  (*positive_lookbehind:...)  )\n\n  (?&#60;!...)                    )\n  (*nlb:...)                  ) negative lookbehind\n  (*negative_lookbehind:...)  )\n</pre>\nEach top-level branch of a lookbehind must have a limit for the number of\ncharacters it matches. If any branch can match a variable number of characters,\nthe maximum for each branch is limited to a value set by the caller of\n<b>pcre2_compile()</b> or defaulted. The default is set when PCRE2 is built\n(ultimate default 255). If every branch matches a fixed number of characters,\nthe limit for each branch is 65535 characters.\n</p>\n<h2><a name=\"SEC24\" href=\"#TOC1\">NON-ATOMIC LOOKAROUND ASSERTIONS</a></h2>\n<p>\nThese assertions are specific to PCRE2 and are not Perl-compatible.\n<pre>\n  (?*...)                                )\n  (*napla:...)                           ) synonyms\n  (*non_atomic_positive_lookahead:...)   )\n\n  (?&#60;*...)                               )\n  (*naplb:...)                           ) synonyms\n  (*non_atomic_positive_lookbehind:...)  )\n</pre>\n</p>\n<h2><a name=\"SEC25\" href=\"#TOC1\">SUBSTRING SCAN ASSERTION</a></h2>\n<p>\nThis feature is not Perl-compatible.\n<pre>\n  (*scan_substring:(grouplist)...)  scan captured substring\n  (*scs:(grouplist)...)             scan captured substring\n</pre>\nThe comma-separated list \"grouplist\" may identify groups in any of the\nfollowing ways:\n<pre>\n  n       absolute reference\n  +n      relative reference\n  -n      relative reference\n  &#60;name&#62;  name\n  'name'  name\n</pre>\n</p>\n<h2><a name=\"SEC26\" href=\"#TOC1\">SCRIPT RUNS</a></h2>\n<p>\n<pre>\n  (*script_run:...)           ) script run, can be backtracked into\n  (*sr:...)                   )\n\n  (*atomic_script_run:...)    ) atomic script run\n  (*asr:...)                  )\n</pre>\n</p>\n<h2><a name=\"SEC27\" href=\"#TOC1\">BACKREFERENCES</a></h2>\n<p>\n<pre>\n  \\n              reference by number (can be ambiguous)\n  \\gn             reference by number\n  \\g{n}           reference by number\n  \\g+n            relative reference by number (PCRE2 extension)\n  \\g-n            relative reference by number\n  \\g{+n}          relative reference by number (PCRE2 extension)\n  \\g{-n}          relative reference by number\n  \\k&#60;name&#62;        reference by name (Perl)\n  \\k'name'        reference by name (Perl)\n  \\g{name}        reference by name (Perl)\n  \\k{name}        reference by name (.NET)\n  (?P=name)       reference by name (Python)\n</pre>\n</p>\n<h2><a name=\"SEC28\" href=\"#TOC1\">SUBROUTINE REFERENCES (POSSIBLY RECURSIVE)</a></h2>\n<p>\n<pre>\n  (?R)            recurse whole pattern\n  (?n)            call subroutine by absolute number\n  (?+n)           call subroutine by relative number\n  (?-n)           call subroutine by relative number\n  (?&name)        call subroutine by name (Perl)\n  (?P&#62;name)       call subroutine by name (Python)\n  \\g&#60;name&#62;        call subroutine by name (Oniguruma)\n  \\g'name'        call subroutine by name (Oniguruma)\n  \\g&#60;n&#62;           call subroutine by absolute number (Oniguruma)\n  \\g'n'           call subroutine by absolute number (Oniguruma)\n  \\g&#60;+n&#62;          call subroutine by relative number (PCRE2 extension)\n  \\g'+n'          call subroutine by relative number (PCRE2 extension)\n  \\g&#60;-n&#62;          call subroutine by relative number (PCRE2 extension)\n  \\g'-n'          call subroutine by relative number (PCRE2 extension)\n</pre>\nThe variants using parentheses (?...) may also specify a list of capture groups\nto return, which shall be retained in the calling subexpression if set during\nthe recursion (this feature is not supported by Perl).\n<pre>\n  (?R(grouplist))       recurse whole pattern, returning capture groups\n                          (PCRE2 extension)\n  (?n(grouplist))       )\n  (?+n(grouplist))      ) call subroutine, returning capture groups\n  (?-n(grouplist))      )   (PCRE2 extension)\n  (?&name(grouplist))   )\n  (?P&#62;name(grouplist))  )\n</pre>\nThe comma-separated list \"grouplist\" uses the same syntax as\n(*scan_substring:(grouplist)...), and may identify groups in any of the\nfollowing ways:\n<pre>\n  n       absolute reference\n  +n      relative reference\n  -n      relative reference\n  &#60;name&#62;  name\n  'name'  name\n</pre>\n</p>\n<h2><a name=\"SEC29\" href=\"#TOC1\">CONDITIONAL PATTERNS</a></h2>\n<p>\n<pre>\n  (?(condition)yes-pattern)\n  (?(condition)yes-pattern|no-pattern)\n\n  (?(n)                absolute reference condition\n  (?(+n)               relative reference condition (PCRE2 extension)\n  (?(-n)               relative reference condition (PCRE2 extension)\n  (?(&#60;name&#62;)           named reference condition (Perl)\n  (?('name')           named reference condition (Perl)\n  (?(name)             named reference condition (PCRE2, deprecated)\n  (?(R)                overall recursion condition\n  (?(Rn)               specific numbered group recursion condition\n  (?(R&name)           specific named group recursion condition\n  (?(DEFINE)           define groups for reference\n  (?(VERSION[&#62;]=n[.m]) test PCRE2 version\n  (?(assert)           assertion condition\n</pre>\nNote the ambiguity of (?(R) and (?(Rn) which might be named reference\nconditions or recursion tests. Such a condition is interpreted as a reference\ncondition if the relevant named group exists.\n<br>\n<br>\nThe parts within brackets for the VERSION conditional syntax could be ommited.\nThe fractional part of the version number defaults to 0 in that case.\n</p>\n<h2><a name=\"SEC30\" href=\"#TOC1\">BACKTRACKING CONTROL</a></h2>\n<p>\nAll backtracking control verbs may be in the form (*VERB:NAME). For (*MARK) the\nname is mandatory, for the others it is optional. (*SKIP) changes its behaviour\nif :NAME is present. The others just set a name for passing back to the caller,\nbut this is not a name that (*SKIP) can see. The following act immediately they\nare reached:\n<pre>\n  (*ACCEPT)       force successful match\n  (*FAIL)         force backtrack; synonym (*F)\n  (*MARK:NAME)    set name to be passed back; synonym (*:NAME)\n</pre>\nThe following act only when a subsequent match failure causes a backtrack to\nreach them. They all force a match failure, but they differ in what happens\nafterwards. Those that advance the start-of-match point do so only if the\npattern is not anchored.\n<pre>\n  (*COMMIT)       overall failure, no advance of starting point\n  (*PRUNE)        advance to next starting character\n  (*SKIP)         advance to current matching position\n  (*SKIP:NAME)    advance to position corresponding to an earlier\n                  (*MARK:NAME); if not found, the (*SKIP) is ignored\n  (*THEN)         local failure, backtrack to next alternation\n</pre>\nThe effect of one of these verbs in a group called as a subroutine is confined\nto the subroutine call.\n</p>\n<h2><a name=\"SEC31\" href=\"#TOC1\">CALLOUTS</a></h2>\n<p>\n<pre>\n  (?C)            callout (assumed number 0)\n  (?Cn)           callout with numerical data n\n  (?C\"text\")      callout with string data\n</pre>\nThe allowed string delimiters are ` ' \" ^ % # $ (which are the same for the\nstart and the end), and the starting delimiter { matched with the ending\ndelimiter }. To encode the ending delimiter within the string, double it.\n</p>\n<h2><a name=\"SEC32\" href=\"#TOC1\">REPLACEMENT STRINGS</a></h2>\n<p>\nIf the PCRE2_SUBSTITUTE_LITERAL option is set, a replacement string for\n<b>pcre2_substitute()</b> is not interpreted. Otherwise, by default, the only\nspecial character is the dollar character in one of the following forms:\n<pre>\n  $$                  insert a dollar character\n  $n or ${n}          insert the contents of group <i>n</i>\n  $&#60;name&#62;             insert the contents of named group\n  $0 or $&            insert the entire matched substring\n  $`                  insert the substring that precedes the match\n  $'                  insert the substring that follows the match\n  $_                  insert the entire input string\n  $+                  insert the highest-numbered capture group which matched\n  $*MARK or ${*MARK}  insert a control verb name\n</pre>\nFor ${n}, n can be a name or a number. If PCRE2_SUBSTITUTE_EXTENDED is set,\nthere is additional interpretation:\n</p>\n<p>\n1. Backslash is an escape character, and the forms described in \"ESCAPED\nCHARACTERS\" above are recognized. Also:\n<pre>\n  \\Q...\\E can be used to suppress interpretation\n  \\l      force the next character to lower case\n  \\u      force the next character to upper case\n  \\L      force subsequent characters to lower case\n  \\U      force subsequent characters to upper case\n  \\u\\L    force next character to upper case, then all lower\n  \\l\\U    force next character to lower case, then all upper\n  \\E      end \\L or \\U case forcing\n  \\b      backspace character (note: as in character class in pattern)\n  \\v      vertical tab character (note: not the same as in a pattern)\n</pre>\n2. The Python form \\g&#60;n&#62;, where the angle brackets are part of the syntax and\n<i>n</i> is either a group name or a number, is recognized as an alternative way\nof inserting the contents of a group, for example \\g&#60;3&#62;.\n</p>\n<p>\n3. Capture substitution supports the following additional forms:\n<pre>\n  ${n:-string}             default for unset group\n  ${n:+string1:string2}    values for set/unset group\n</pre>\nThe substitution strings themselves are expanded. Backslash can be used to\nescape colons and closing curly brackets.\n</p>\n<h2><a name=\"SEC33\" href=\"#TOC1\">SEE ALSO</a></h2>\n<p>\n<b>pcre2pattern</b>(3), <b>pcre2api</b>(3), <b>pcre2callout</b>(3),\n<b>pcre2matching</b>(3), <b>pcre2</b>(3).\n</p>\n<h2><a name=\"SEC34\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC35\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 14 October 2025\n<br>\nCopyright &copy; 1997-2024 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2test.html",
    "content": "<html>\n<head>\n<title>pcre2test specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2test man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<ul>\n<li><a name=\"TOC1\" href=\"#SEC1\">SYNOPSIS</a>\n<li><a name=\"TOC2\" href=\"#SEC2\">PCRE2's 8-BIT, 16-BIT AND 32-BIT LIBRARIES</a>\n<li><a name=\"TOC3\" href=\"#SEC3\">INPUT ENCODING</a>\n<li><a name=\"TOC4\" href=\"#SEC4\">COMMAND LINE OPTIONS</a>\n<li><a name=\"TOC5\" href=\"#SEC5\">DESCRIPTION</a>\n<li><a name=\"TOC6\" href=\"#SEC6\">COMMAND LINES</a>\n<li><a name=\"TOC7\" href=\"#SEC7\">MODIFIER SYNTAX</a>\n<li><a name=\"TOC8\" href=\"#SEC8\">PATTERN SYNTAX</a>\n<li><a name=\"TOC9\" href=\"#SEC9\">SUBJECT LINE SYNTAX</a>\n<li><a name=\"TOC10\" href=\"#SEC10\">PATTERN MODIFIERS</a>\n<li><a name=\"TOC11\" href=\"#SEC11\">SUBJECT MODIFIERS</a>\n<li><a name=\"TOC12\" href=\"#SEC12\">THE ALTERNATIVE MATCHING FUNCTION</a>\n<li><a name=\"TOC13\" href=\"#SEC13\">DEFAULT OUTPUT FROM pcre2test</a>\n<li><a name=\"TOC14\" href=\"#SEC14\">OUTPUT FROM THE ALTERNATIVE MATCHING FUNCTION</a>\n<li><a name=\"TOC15\" href=\"#SEC15\">RESTARTING AFTER A PARTIAL MATCH</a>\n<li><a name=\"TOC16\" href=\"#SEC16\">CALLOUTS</a>\n<li><a name=\"TOC17\" href=\"#SEC17\">NON-PRINTING CHARACTERS</a>\n<li><a name=\"TOC18\" href=\"#SEC18\">SAVING AND RESTORING COMPILED PATTERNS</a>\n<li><a name=\"TOC19\" href=\"#SEC19\">SEE ALSO</a>\n<li><a name=\"TOC20\" href=\"#SEC20\">AUTHOR</a>\n<li><a name=\"TOC21\" href=\"#SEC21\">REVISION</a>\n</ul>\n<h2><a name=\"SEC1\" href=\"#TOC1\">SYNOPSIS</a></h2>\n<p>\n<b>pcre2test [options] [input file [output file]]</b>\n<br>\n<br>\n<b>pcre2test</b> is a test program for the PCRE2 regular expression libraries,\nbut it can also be used for experimenting with regular expressions. This\ndocument describes the features of the test program; for details of the regular\nexpressions themselves, see the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation. For details of the PCRE2 library function calls and their\noptions, see the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation.\n</p>\n<p>\nThe input for <b>pcre2test</b> is a sequence of regular expression patterns and\nsubject strings to be matched. There are also command lines for setting\ndefaults and controlling some special actions. The output shows the result of\neach match attempt. Modifiers on external or internal command lines, the\npatterns, and the subject lines specify PCRE2 function options, control how the\nsubject is processed, and what output is produced.\n</p>\n<p>\nThere are many obscure modifiers, some of which are specifically designed for\nuse in conjunction with the test script and data files that are distributed as\npart of PCRE2. All the modifiers are documented here, some without much\njustification, but many of them are unlikely to be of use except when testing\nthe libraries.\n</p>\n<h2><a name=\"SEC2\" href=\"#TOC1\">PCRE2's 8-BIT, 16-BIT AND 32-BIT LIBRARIES</a></h2>\n<p>\nDifferent versions of the PCRE2 library can be built to support character\nstrings that are encoded in 8-bit, 16-bit, or 32-bit code units. One, two, or\nall three of these libraries may be simultaneously installed. The\n<b>pcre2test</b> program can be used to test all the libraries. However, its own\ninput and output are always in 8-bit format. When testing the 16-bit or 32-bit\nlibraries, patterns and subject strings are converted to 16-bit or 32-bit\nformat before being passed to the library functions. Results are converted back\nto 8-bit code units for output.\n</p>\n<p>\nIn the rest of this document, the names of library functions and structures\nare given in generic form, for example, <b>pcre2_compile()</b>. The actual\nnames used in the libraries have a suffix _8, _16, or _32, as appropriate.\n<a name=\"inputencoding\"></a></p>\n<h2><a name=\"SEC3\" href=\"#TOC1\">INPUT ENCODING</a></h2>\n<p>\nInput to <b>pcre2test</b> is processed line by line, either by calling the C\nlibrary's <b>fgets()</b> function, or via the <b>libreadline</b> or <b>libedit</b>\nlibrary. In some Windows environments character 26 (hex 1A) causes an immediate\nend of file, and no further data is read, so this character should be avoided\nunless you really want that action.\n</p>\n<p>\nThe input is processed using C's string functions, so must not contain binary\nzeros, even though in Unix-like environments, <b>fgets()</b> treats any bytes\nother than newline as data characters. An error is generated if a binary zero\nis encountered. By default subject lines are processed for backslash escapes,\nwhich makes it possible to include any data value in strings that are passed to\nthe library for matching. For patterns, there is a facility for specifying some\nor all of the 8-bit input characters as hexadecimal pairs, which makes it\npossible to include binary zeros.\n</p>\n<h3>\nInput for the 16-bit and 32-bit libraries\n</h3>\n<p>\nWhen testing the 16-bit or 32-bit libraries, there is a need to be able to\ngenerate character code points greater than 255 in the strings that are passed\nto the library. For subject lines and some patterns, backslash escapes can be\nused. In addition, when the <b>utf</b> modifier (see\n<a href=\"#optionmodifiers\">\"Setting compilation options\"</a>\nbelow) is set, the pattern and any following subject lines are interpreted as\nUTF-8 strings and translated to UTF-16 or UTF-32 as appropriate.\n</p>\n<p>\nFor non-UTF testing of wide characters, the <b>utf8_input</b> modifier can be\nused. This is mutually exclusive with <b>utf</b>, and is allowed only in 16-bit\nor 32-bit mode. It causes the pattern and following subject lines to be treated\nas UTF-8 according to the original definition (RFC 2279), which allows for\ncharacter values up to 0x7fffffff. Each character is placed in one 16-bit or\n32-bit code unit (in the 16-bit case, values greater than 0xffff cause an error\nto occur).\n</p>\n<p>\nUTF-8 (in its original definition) is not capable of encoding values greater\nthan 0x7fffffff, but such values can be handled by the 32-bit library. When\ntesting this library in non-UTF mode with <b>utf8_input</b> set, if any\ncharacter is preceded by the byte 0xff (which is an invalid byte in UTF-8)\n0x80000000 is added to the character's value. For subject strings, using an\nescape sequence is preferable.\n</p>\n<h2><a name=\"SEC4\" href=\"#TOC1\">COMMAND LINE OPTIONS</a></h2>\n<p>\n<b>-8</b>\nIf the 8-bit library has been built, this option causes it to be used (this is\nthe default). If the 8-bit library has not been built, this option causes an\nerror.\n</p>\n<p>\n<b>-16</b>\nIf the 16-bit library has been built, this option causes it to be used. If the\n8-bit library has not been built, this is the default. If the 16-bit library\nhas not been built, this option causes an error.\n</p>\n<p>\n<b>-32</b>\nIf the 32-bit library has been built, this option causes it to be used. If no\nother library has been built, this is the default. If the 32-bit library has\nnot been built, this option causes an error.\n</p>\n<p>\n<b>-ac</b>\nBehave as if each pattern has the <b>auto_callout</b> modifier, that is, insert\nautomatic callouts into every pattern that is compiled.\n</p>\n<p>\n<b>-AC</b>\nAs for <b>-ac</b>, but in addition behave as if each subject line has the\n<b>callout_extra</b> modifier, that is, show additional information from\ncallouts.\n</p>\n<p>\n<b>-b</b>\nBehave as if each pattern has the <b>fullbincode</b> modifier; the full\ninternal binary form of the pattern is output after compilation.\n</p>\n<p>\n<b>-C</b>\nOutput the version number of the PCRE2 library, and all available information\nabout the optional features that are included, and then exit with zero exit\ncode. All other options are ignored. If both -C and -LM are present, whichever\nis first is recognized.\n</p>\n<p>\n<b>-C</b> <i>option</i>\nOutput information about a specific build-time option, then exit. This\nfunctionality is intended for use in scripts such as <b>RunTest</b>. The\nfollowing options output the value and set the exit code as indicated:\n<pre>\n  linksize   the configured internal link size (2, 3, or 4)\n               exit code is set to the link size\n  newline    the default newline setting:\n               CR, LF, CRLF, ANYCRLF, ANY, or NUL\n               exit code is always 0\n  bsr        the default setting for what \\R matches:\n               ANYCRLF or ANY\n               exit code is always 0\n</pre>\nThe following options output 1 for true or 0 for false, and set the exit code\nto the same value:\n<pre>\n  backslash-C  \\C is supported (not locked out)\n  ebcdic       compiled for an EBCDIC environment\n  ebcdic-io    if PCRE2 is compiled for EBCDIC, whether pcre2test's input and\n                 output is EBCDIC or ASCII\n  ebcdic-nl25  if PCRE2 is compiled for EBCDIC, whether NL (= LF) is 0x25\n                 (otherwise it is 0x15, the default)\n  jit          just-in-time support is available\n  pcre2-16     the 16-bit library was built\n  pcre2-32     the 32-bit library was built\n  pcre2-8      the 8-bit library was built\n  unicode      Unicode support is available\n</pre>\nNote that the availability of JIT support in the library does not guarantee\nthat it can actually be used because in some environments it is unable to\nallocate executable memory. The option \"jitusable\" gives more detailed\ninformation. It returns one of the following values:\n<pre>\n  0  JIT is available and usable\n  1  JIT is available but cannot allocate executable memory\n  2  JIT is not available\n  3  Unexpected return from test call to <b>pcre2_jit_compile()</b>\n</pre>\nIf an unknown option is given, an error message is output; the exit code is 0.\n</p>\n<p>\n<b>--colo[u]r[=&#60;always,auto,never&#62;]</b>\nBy default, the output is coloured if the output file is a terminal (<b>auto</b>).\nForce or suppress output of ANSI colour escapes with <b>always</b> and <b>never</b>\nrespectively.\n</p>\n<p>\n<b>-d</b>\nBehave as if each pattern has the <b>debug</b> modifier; the internal\nform and information about the compiled pattern is output after compilation;\n<b>-d</b> is equivalent to <b>-b -i</b>.\n</p>\n<p>\n<b>-dfa</b>\nBehave as if each subject line has the <b>dfa</b> modifier; matching is done\nusing the <b>pcre2_dfa_match()</b> function instead of the default\n<b>pcre2_match()</b>.\n</p>\n<p>\n<b>-E</b>\nRun in \"preprocess only\" mode (similar to \"gcc -E\"). The \"#if ... #endif\"\ncommands are processed, and all other lines are printed verbatim.\n</p>\n<p>\n<b>-error</b> <i>number[,number,...]</i>\nCall <b>pcre2_get_error_message()</b> for each of the error numbers in the\ncomma-separated list, display the resulting messages on the standard output,\nthen exit with zero exit code. The numbers may be positive or negative. This is\na convenience facility for PCRE2 maintainers.\n</p>\n<p>\n<b>-help</b>\nOutput a brief summary these options and then exit.\n</p>\n<p>\n<b>-i</b>\nBehave as if each pattern has the <b>info</b> modifier; information about the\ncompiled pattern is given after compilation.\n</p>\n<p>\n<b>-jit</b>\nBehave as if each pattern line has the <b>jit</b> modifier; after successful\ncompilation, each pattern is passed to the just-in-time compiler, if available.\n</p>\n<p>\n<b>-jitfast</b>\nBehave as if each pattern line has the <b>jitfast</b> modifier; after\nsuccessful compilation, each pattern is passed to the just-in-time compiler, if\navailable, and each subject line is passed directly to the JIT matcher via its\n\"fast path\".\n</p>\n<p>\n<b>-jitverify</b>\nBehave as if each pattern line has the <b>jitverify</b> modifier; after\nsuccessful compilation, each pattern is passed to the just-in-time compiler, if\navailable, and the use of JIT for matching is verified.\n</p>\n<p>\n<b>-LM</b>\nList modifiers: write a list of available pattern and subject modifiers to the\nstandard output, then exit with zero exit code. All other options are ignored.\nIf both -C and any -Lx options are present, whichever is first is recognized.\n</p>\n<p>\n<b>-LP</b>\nList properties: write a list of recognized Unicode properties to the standard\noutput, then exit with zero exit code. All other options are ignored. If both\n-C and any -Lx options are present, whichever is first is recognized.\n</p>\n<p>\n<b>-LS</b>\nList scripts: write a list of recognized Unicode script names to the standard\noutput, then exit with zero exit code. All other options are ignored. If both\n-C and any -Lx options are present, whichever is first is recognized.\n</p>\n<p>\n<b>-malloc</b>\nExercise malloc() failures, by first counting the number of calls made to malloc\nduring pattern compilation and matching, then re-running the compilation and\nmatching that many times, exercising a failure of each malloc() call.\n</p>\n<p>\n<b>-pattern</b> <i>modifier-list</i>\nBehave as if each pattern line contains the given modifiers.\n</p>\n<p>\n<b>-q</b>\nDo not output the version number of <b>pcre2test</b> at the start of execution.\n</p>\n<p>\n<b>-S</b> <i>size</i>\nOn Unix-like systems, set the size of the run-time stack to <i>size</i>\nmebibytes (units of 1024*1024 bytes).\n</p>\n<p>\n<b>-subject</b> <i>modifier-list</i>\nBehave as if each subject line contains the given modifiers.\n</p>\n<p>\n<b>-t</b>\nRun each compile and match many times with a timer, and output the resulting\ntimes per compile or match. When JIT is used, separate times are given for the\ninitial compile and the JIT compile. You can control the number of iterations\nthat are used for timing by following <b>-t</b> with a number (as a separate\nitem on the command line). For example, \"-t 1000\" iterates 1000 times. The\ndefault is to iterate 500,000 times.\n</p>\n<p>\n<b>-tm</b>\nThis is like <b>-t</b> except that it times only the matching phase, not the\ncompile phase.\n</p>\n<p>\n<b>-T</b> <b>-TM</b>\nThese behave like <b>-t</b> and <b>-tm</b>, but in addition, at the end of a run,\nthe total times for all compiles and matches are output.\n</p>\n<p>\n<b>-unittest</b>\nRun a fixed set of additional tests of the PCRE2 API which are not driven by\nthe test input files, and then exit.\n</p>\n<p>\n<b>-version</b>\nOutput the PCRE2 version number and then exit.\n</p>\n<h2><a name=\"SEC5\" href=\"#TOC1\">DESCRIPTION</a></h2>\n<p>\nIf <b>pcre2test</b> is given two filename arguments, it reads from the first and\nwrites to the second. If the first name is \"-\", input is taken from the\nstandard input. If <b>pcre2test</b> is given only one argument, it reads from\nthat file and writes to stdout. Otherwise, it reads from stdin and writes to\nstdout.\n</p>\n<p>\nWhen <b>pcre2test</b> is built, a configuration option can specify that it\nshould be linked with the <b>libreadline</b> or <b>libedit</b> library. When this\nis done, if the input is from a terminal, it is read using the <b>readline()</b>\nfunction. This provides line-editing and history facilities. The output from\nthe <b>-help</b> option states whether or not <b>readline()</b> will be used.\n</p>\n<p>\nThe program handles any number of tests, each of which consists of a set of\ninput lines. Each set starts with a regular expression pattern, followed by any\nnumber of subject lines to be matched against that pattern. In between sets of\ntest data, command lines that begin with # may appear. This file format, with\nsome restrictions, can also be processed by the <b>perltest.sh</b> script that\nis distributed with PCRE2 as a means of checking that the behaviour of PCRE2\nand Perl is the same. For a specification of <b>perltest.sh</b>, see the\ncomments near its beginning. See also the #perltest command below.\n</p>\n<p>\nWhen the input is a terminal, <b>pcre2test</b> prompts for each line of input,\nusing \"re&#62;\" to prompt for regular expression patterns, and \"data&#62;\" to prompt\nfor subject lines. Command lines starting with # can be entered only in\nresponse to the \"re&#62;\" prompt.\n</p>\n<p>\nEach subject line is matched separately and independently. If you want to do\nmulti-line matches, you have to use the \\n escape sequence (or \\r or \\r\\n,\netc., depending on the newline setting) in a single line of input to encode the\nnewline sequences. There is no limit on the length of subject lines; the input\nbuffer is automatically extended if it is too small. There are replication\nfeatures that makes it possible to generate long repetitive pattern or subject\nlines without having to supply them explicitly.\n</p>\n<p>\nAn empty line or the end of the file signals the end of the subject lines for a\ntest, at which point a new pattern or command line is expected if there is\nstill input to be read.\n</p>\n<h2><a name=\"SEC6\" href=\"#TOC1\">COMMAND LINES</a></h2>\n<p>\nIn between sets of test data, a line that begins with # is interpreted as a\ncommand line. If the first character is followed by white space or an\nexclamation mark, the line is treated as a comment, and ignored. Otherwise, the\nfollowing commands are recognized:\n<pre>\n  #forbid_utf\n</pre>\nSubsequent patterns automatically have the PCRE2_NEVER_UTF and PCRE2_NEVER_UCP\noptions set, which locks out the use of the PCRE2_UTF and PCRE2_UCP options and\nthe use of (*UTF) and (*UCP) at the start of patterns. This command also forces\nan error if a subsequent pattern contains any occurrences of \\P, \\p, or \\X,\nwhich are still supported when PCRE2_UTF is not set, but which require Unicode\nproperty support to be included in the library.\n</p>\n<p>\nThis is a trigger guard that is used in test files to ensure that UTF or\nUnicode property tests are not accidentally added to files that are used when\nUnicode support is not included in the library. Setting PCRE2_NEVER_UTF and\nPCRE2_NEVER_UCP as a default can also be obtained by the use of <b>#pattern</b>;\nthe difference is that <b>#forbid_utf</b> cannot be unset, and the automatic\noptions are not displayed in pattern information, to avoid cluttering up test\noutput.\n<pre>\n  #load &#60;filename&#62;\n</pre>\nThis command is used to load a set of precompiled patterns from a file, as\ndescribed in the section entitled \"Saving and restoring compiled patterns\"\n<a href=\"#saverestore\">below.</a>\n<pre>\n  #loadtables &#60;filename&#62;\n</pre>\nThis command is used to load a set of binary character tables that can be\naccessed by the tables=3 qualifier. Such tables can be created by the\n<b>pcre2_dftables</b> program with the -b option.\n<pre>\n  #newline_default [&#60;newline-list&#62;]\n</pre>\nWhen PCRE2 is built, a default newline convention can be specified. This\ndetermines which characters and/or character pairs are recognized as indicating\na newline in a pattern or subject string. The default can be overridden when a\npattern is compiled. The standard test files contain tests of various newline\nconventions, but the majority of the tests expect a single linefeed to be\nrecognized as a newline by default. Without special action the tests would fail\nwhen PCRE2 is compiled with either CR or CRLF as the default newline.\n</p>\n<p>\nThe #newline_default command specifies a list of newline types that are\nacceptable as the default. The types must be one of CR, LF, CRLF, ANYCRLF,\nANY, or NUL (in upper or lower case), for example:\n<pre>\n  #newline_default LF Any anyCRLF\n</pre>\nIf the default newline is in the list, this command has no effect. Otherwise,\nexcept when testing the POSIX API, a <b>newline</b> modifier that specifies the\nfirst newline convention in the list (LF in the above example) is added to any\npattern that does not already have a <b>newline</b> modifier. If the newline\nlist is empty, the feature is turned off. This command is present in a number\nof the standard test input files.\n</p>\n<p>\nWhen the POSIX API is being tested there is no way to override the default\nnewline convention, though it is possible to set the newline convention from\nwithin the pattern. A warning is given if the <b>posix</b> or <b>posix_nosub</b>\nmodifier is used when <b>#newline_default</b> would set a default for the\nnon-POSIX API.\n<pre>\n  #pattern &#60;modifier-list&#62;\n</pre>\nThis command sets a default modifier list that applies to all subsequent\npatterns. Modifiers on a pattern can change these settings.\n<pre>\n  #perltest\n</pre>\nThis line is used in test files that can also be processed by <b>perltest.sh</b>\nto confirm that Perl gives the same results as PCRE2. Subsequent tests are\nchecked for the use of <b>pcre2test</b> features that are incompatible with the\n<b>perltest.sh</b> script.\n</p>\n<p>\nPatterns must use '/' as their delimiter, and only certain modifiers are\nsupported. Comment lines, #pattern commands, and #subject commands that set or\nunset \"mark\" are recognized and acted on. The #perltest, #forbid_utf, and\n#newline_default commands, which are needed in the relevant pcre2test files,\nare silently ignored. All other command lines are ignored, but give a warning\nmessage. The <b>#perltest</b> command helps detect tests that are accidentally\nput in the wrong file or use the wrong delimiter. For more details of the\n<b>perltest.sh</b> script see the comments it contains.\n<pre>\n  #pop [&#60;modifiers&#62;]\n  #popcopy [&#60;modifiers&#62;]\n</pre>\nThese commands are used to manipulate the stack of compiled patterns, as\ndescribed in the section entitled \"Saving and restoring compiled patterns\"\n<a href=\"#saverestore\">below.</a>\n<pre>\n  #save &#60;filename&#62;\n</pre>\nThis command is used to save a set of compiled patterns to a file, as described\nin the section entitled \"Saving and restoring compiled patterns\"\n<a href=\"#saverestore\">below.</a>\n<pre>\n  #subject &#60;modifier-list&#62;\n</pre>\nThis command sets a default modifier list that applies to all subsequent\nsubject lines. Modifiers on a subject line can change these settings.\n<pre>\n  #if CONDITION\n  ...\n  #endif\n</pre>\nIf CONDITION is true, then the command is printed, and its contents are\nprocessed as normal, including printing the commandlines to the output. If\nCONDITION is false, then all lines between the \"#if\" and \"#endif\" are skipped\nand not printed. The CONDITION can be any of the conditions which are tested by\nthe \"-C\" commandline option and which set pcre2test's exit code to a boolean\nvalue. The CONDITION may also be preceded by \"!\".\n</p>\n<h2><a name=\"SEC7\" href=\"#TOC1\">MODIFIER SYNTAX</a></h2>\n<p>\nModifier lists are used with both pattern and subject lines. Items in a list\nare separated by commas followed by optional white space. Trailing white space\nin a modifier list is ignored. Some modifiers may be given for both patterns\nand subject lines, whereas others are valid only for one or the other. Each\nmodifier has a long name, for example \"anchored\", and some of them must be\nfollowed by an equals sign and a value, for example, \"offset=12\". Values cannot\ncontain comma characters, but may contain spaces. Modifiers that do not take\nvalues may be preceded by a minus sign to turn off a previous setting.\n</p>\n<p>\nA few of the more common modifiers can also be specified as single letters, for\nexample \"i\" for \"caseless\". In documentation, following the Perl convention,\nthese are written with a slash (\"the /i modifier\") for clarity. Abbreviated\nmodifiers must all be concatenated in the first item of a modifier list. If the\nfirst item is not recognized as a long modifier name, it is interpreted as a\nsequence of these abbreviations. For example:\n<pre>\n  /abc/ig,newline=cr,jit=3\n</pre>\nThis is a pattern line whose modifier list starts with two one-letter modifiers\n(/i and /g). The lower-case abbreviated modifiers are the same as used in Perl.\n</p>\n<h2><a name=\"SEC8\" href=\"#TOC1\">PATTERN SYNTAX</a></h2>\n<p>\nA pattern line must start with one of the following characters (common symbols,\nexcluding pattern meta-characters):\n<pre>\n  / ! \" ' ` - = _ : ; , % & @ ~\n</pre>\nThis is interpreted as the pattern's delimiter. A regular expression may be\ncontinued over several input lines, in which case the newline characters are\nincluded within it. It is possible to include the delimiter as a literal within\nthe pattern by escaping it with a backslash, for example\n<pre>\n  /abc\\/def/\n</pre>\nIf you do this, the escape and the delimiter form part of the pattern, but\nsince the delimiters are all non-alphanumeric, the inclusion of the backslash\ndoes not affect the pattern's interpretation. Note, however, that this trick\ndoes not work within \\Q...\\E literal bracketing because the backslash will\nitself be interpreted as a literal. If the terminating delimiter is immediately\nfollowed by a backslash, for example,\n<pre>\n  /abc/\\\n</pre>\na backslash is added to the end of the pattern. This is done to provide a way\nof testing the error condition that arises if a pattern finishes with a\nbackslash, because\n<pre>\n  /abc\\/\n</pre>\nis interpreted as the first line of a pattern that starts with \"abc/\", causing\npcre2test to read the next line as a continuation of the regular expression.\n</p>\n<p>\nA pattern can be followed by a modifier list (details below).\n</p>\n<h2><a name=\"SEC9\" href=\"#TOC1\">SUBJECT LINE SYNTAX</a></h2>\n<p>\nBefore each subject line is passed to <b>pcre2_match()</b>,\n<b>pcre2_dfa_match()</b>, or <b>pcre2_jit_match()</b>, leading and trailing white\nspace is removed, and the line is scanned for backslash escapes, unless the\n<b>subject_literal</b> modifier was set for the pattern. The following provide a\nmeans of encoding non-printing characters in a visible way:\n<pre>\n  \\a          alarm (BEL, \\x07)\n  \\b          backspace (\\x08)\n  \\e          escape (\\x27)\n  \\f          form feed (\\x0c)\n  \\n          newline (\\x0a)\n  \\N{U+hh...} unicode character (any number of hex digits)\n  \\r          carriage return (\\x0d)\n  \\t          tab (\\x09)\n  \\v          vertical tab (\\x0b)\n  \\ddd        octal number (up to 3 octal digits); represent a single\n                code point unless larger than 255 with the 8-bit library\n  \\o{dd...}   octal number (any number of octal digits} representing a\n                character in UTF mode or a code point\n  \\xhh        hexadecimal byte (up to 2 hex digits)\n  \\x{hh...}   hexadecimal number (up to 8 hex digits) representing a\n                character in UTF mode or a code point\n</pre>\nInvoking \\N{U+hh...} or \\x{hh...} doesn't require the use of the <b>utf</b>\nmodifier on the pattern. It is always recognized. There may be any number of\nhexadecimal digits inside the braces; invalid values provoke error messages\nbut when using \\N{U+hh...} with some invalid unicode characters they will\nbe accepted with a warning instead.\n</p>\n<p>\nNote that even in UTF-8 mode, \\xhh (and depending of how large, \\ddd)\ndescribe one byte rather than one character; this makes it possible to\nconstruct invalid UTF-8 sequences for testing purposes. On the other hand,\n\\x{hh...} is interpreted as a UTF-8 character in UTF-8 mode, only generating\nmore than one byte if the value is greater than 127. To avoid the ambiguity\nit is preferred to use \\N{U+hh...} when describing characters. When testing\nthe 8-bit library not in UTF-8 mode, \\x{hh} generates one byte for values\nthat could fit on it, and causes an error for greater values.\n</p>\n<p>\nWhen testing the 16-bit library, not in UTF-16 mode, all 4-digit \\x{hhhh}\nvalues are accepted. This makes it possible to construct invalid UTF-16\nsequences for testing purposes.\n</p>\n<p>\nWhen testing the 32-bit library, not in UTF-32 mode, all 4 to 8-digit \\x{...}\nvalues are accepted. This makes it possible to construct invalid UTF-32\nsequences for testing purposes.\n</p>\n<p>\nThere is a special backslash sequence that specifies replication of one or more\ncharacters:\n<pre>\n  \\[&#60;characters&#62;]{&#60;count&#62;}\n</pre>\nThis makes it possible to test long strings without having to provide them as\npart of the file. For example:\n<pre>\n  \\[abc]{4}\n</pre>\nis converted to \"abcabcabcabc\". This feature does not support nesting. To\ninclude a closing square bracket in the characters, code it as \\x5D.\n</p>\n<p>\nA backslash followed by an equals sign marks the end of the subject string and\nthe start of a modifier list. For example:\n<pre>\n  abc\\=notbol,notempty\n</pre>\nIf the subject string is empty and \\= is followed by white space, the line is\ntreated as a comment line, and is not used for matching. For example:\n<pre>\n  \\= This is a comment.\n  abc\\= This is an invalid modifier list.\n</pre>\nA backslash followed by any other non-alphanumeric character just escapes that\ncharacter. A backslash followed by anything else causes an error. However, if\nthe very last character in the line is a backslash (and there is no modifier\nlist), it is ignored. This gives a way of passing an empty line as data, since\na real empty line terminates the data input.\n</p>\n<p>\nIf the <b>subject_literal</b> modifier is set for a pattern, all subject lines\nthat follow are treated as literals, with no special treatment of backslashes.\nNo replication is possible, and any subject modifiers must be set as defaults\nby a <b>#subject</b> command.\n</p>\n<h2><a name=\"SEC10\" href=\"#TOC1\">PATTERN MODIFIERS</a></h2>\n<p>\nThere are several types of modifier that can appear in pattern lines. Except\nwhere noted below, they may also be used in <b>#pattern</b> commands. A\npattern's modifier list can add to or override default modifiers that were set\nby a previous <b>#pattern</b> command.\n<a name=\"optionmodifiers\"></a></p>\n<h3>\nSetting compilation options\n</h3>\n<p>\nThe following modifiers set options for <b>pcre2_compile()</b>. Most of them set\nbits in the options argument of that function, but those whose names start with\nPCRE2_EXTRA are additional options that are set in the compile context.\nSome of these options have single-letter abbreviations. There is special\nhandling for /x: if a second x is present, PCRE2_EXTENDED is converted into\nPCRE2_EXTENDED_MORE as in Perl. A third appearance adds PCRE2_EXTENDED as well,\nthough this makes no difference to the way <b>pcre2_compile()</b> behaves. See\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\nfor a description of the effects of these options.\n<pre>\n      allow_empty_class         set PCRE2_ALLOW_EMPTY_CLASS\n      allow_lookaround_bsk      set PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK\n      allow_surrogate_escapes   set PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES\n      alt_bsux                  set PCRE2_ALT_BSUX\n      alt_circumflex            set PCRE2_ALT_CIRCUMFLEX\n      alt_extended_class        set PCRE2_ALT_EXTENDED_CLASS\n      alt_verbnames             set PCRE2_ALT_VERBNAMES\n      anchored                  set PCRE2_ANCHORED\n  /a  ascii_all                 set all ASCII options\n      ascii_bsd                 set PCRE2_EXTRA_ASCII_BSD\n      ascii_bss                 set PCRE2_EXTRA_ASCII_BSS\n      ascii_bsw                 set PCRE2_EXTRA_ASCII_BSW\n      ascii_digit               set PCRE2_EXTRA_ASCII_DIGIT\n      ascii_posix               set PCRE2_EXTRA_ASCII_POSIX\n      auto_callout              set PCRE2_AUTO_CALLOUT\n      bad_escape_is_literal     set PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL\n  /i  caseless                  set PCRE2_CASELESS\n  /r  caseless_restrict         set PCRE2_EXTRA_CASELESS_RESTRICT\n      dollar_endonly            set PCRE2_DOLLAR_ENDONLY\n  /s  dotall                    set PCRE2_DOTALL\n      dupnames                  set PCRE2_DUPNAMES\n      endanchored               set PCRE2_ENDANCHORED\n      escaped_cr_is_lf          set PCRE2_EXTRA_ESCAPED_CR_IS_LF\n  /x  extended                  set PCRE2_EXTENDED\n  /xx extended_more             set PCRE2_EXTENDED_MORE\n      extra_alt_bsux            set PCRE2_EXTRA_ALT_BSUX\n      firstline                 set PCRE2_FIRSTLINE\n      literal                   set PCRE2_LITERAL\n      match_line                set PCRE2_EXTRA_MATCH_LINE\n      match_invalid_utf         set PCRE2_MATCH_INVALID_UTF\n      match_unset_backref       set PCRE2_MATCH_UNSET_BACKREF\n      match_word                set PCRE2_EXTRA_MATCH_WORD\n  /m  multiline                 set PCRE2_MULTILINE\n      never_backslash_c         set PCRE2_NEVER_BACKSLASH_C\n      never_callout             set PCRE2_EXTRA_NEVER_CALLOUT\n      never_ucp                 set PCRE2_NEVER_UCP\n      never_utf                 set PCRE2_NEVER_UTF\n  /n  no_auto_capture           set PCRE2_NO_AUTO_CAPTURE\n      no_auto_possess           set PCRE2_NO_AUTO_POSSESS\n      no_bs0                    set PCRE2_EXTRA_NO_BS0\n      no_dotstar_anchor         set PCRE2_NO_DOTSTAR_ANCHOR\n      no_start_optimize         set PCRE2_NO_START_OPTIMIZE\n      no_utf_check              set PCRE2_NO_UTF_CHECK\n      python_octal              set PCRE2_EXTRA_PYTHON_OCTAL\n      turkish_casing            set PCRE2_EXTRA_TURKISH_CASING\n      ucp                       set PCRE2_UCP\n      ungreedy                  set PCRE2_UNGREEDY\n      use_offset_limit          set PCRE2_USE_OFFSET_LIMIT\n      utf                       set PCRE2_UTF\n</pre>\nAs well as turning on the PCRE2_UTF option, the <b>utf</b> modifier causes all\nnon-printing characters in output strings to be printed using the \\x{hh...}\nnotation. Otherwise, those less than 0x100 are output in hex without the curly\nbrackets. Setting <b>utf</b> in 16-bit or 32-bit mode also causes pattern and\nsubject strings to be translated to UTF-16 or UTF-32, respectively, before\nbeing passed to library functions.\n<br>\n<br>\nThe following modifiers enable or disable performance optimizations by\ncalling <b>pcre2_set_optimize()</b> before invoking the regex compiler.\n<pre>\n      optimization_full      enable all optional optimizations\n      optimization_none      disable all optional optimizations\n      auto_possess           auto-possessify variable quantifiers\n      auto_possess_off       don't auto-possessify variable quantifiers\n      dotstar_anchor         anchor patterns starting with .*\n      dotstar_anchor_off     don't anchor patterns starting with .*\n      start_optimize         enable pre-scan of subject string\n      start_optimize_off     disable pre-scan of subject string\n</pre>\nSee the\n<a href=\"pcre2_set_optimize.html\"><b>pcre2_set_optimize</b></a>\ndocumentation for details on these optimizations.\n<a name=\"controlmodifiers\"></a></p>\n<h3>\nSetting compilation controls\n</h3>\n<p>\nThe following modifiers affect the compilation process or request information\nabout the pattern. There are single-letter abbreviations for some that are\nheavily used in the test files.\n<pre>\n  /B  bincode                   show binary code without lengths\n      bsr=[anycrlf|unicode]     specify \\R handling\n      callout_info              show callout information\n      convert=&#60;options&#62;         request foreign pattern conversion\n      convert_glob_escape=c     set glob escape character\n      convert_glob_separator=c  set glob separator character\n      convert_length            set convert buffer length\n      debug                     same as info,fullbincode\n      expand                    expand repetition syntax in pattern\n      framesize                 show matching frame size\n      fullbincode               show binary code with lengths\n  /I  info                      show info about compiled pattern\n      hex                       unquoted characters are hexadecimal\n      jit[=&#60;number&#62;]            use JIT\n      jitfast                   use JIT fast path\n      jitverify                 verify JIT use\n      locale=&#60;name&#62;             use this locale\n      max_pattern_compiled      ) set maximum compiled pattern\n                 _length=&#60;n&#62;    )   length (bytes)\n      max_pattern_length=&#60;n&#62;    set maximum pattern length (code units)\n      max_varlookbehind=&#60;n&#62;     set maximum variable lookbehind length\n      memory                    show memory used\n      newline=&#60;type&#62;            set newline type\n      null_context              compile with a NULL context\n      null_pattern              pass pattern as NULL\n      parens_nest_limit=&#60;n&#62;     set maximum parentheses depth\n      posix                     use the POSIX API\n      posix_nosub               use the POSIX API with REG_NOSUB\n      push                      push compiled pattern onto the stack\n      pushcopy                  push a copy onto the stack\n      pushtablescopy            push a copy with tables onto the stack\n      stackguard=&#60;number&#62;       test the stackguard feature\n      subject_literal           treat all subject lines as literal\n      tables=[0|1|2|3]          select internal tables\n      use_length                do not zero-terminate the pattern\n      utf8_input                treat input as UTF-8\n</pre>\nThe effects of these modifiers are described in the following sections.\n</p>\n<h3>\nNewline and \\R handling\n</h3>\n<p>\nThe <b>bsr</b> modifier specifies what \\R in a pattern should match. If it is\nset to \"anycrlf\", \\R matches CR, LF, or CRLF only. If it is set to \"unicode\",\n\\R matches any Unicode newline sequence. The default can be specified when\nPCRE2 is built; if it is not, the default is set to Unicode.\n</p>\n<p>\nThe <b>newline</b> modifier specifies which characters are to be interpreted as\nnewlines, both in the pattern and in subject lines. The type must be one of CR,\nLF, CRLF, ANYCRLF, ANY, or NUL (in upper or lower case).\n</p>\n<h3>\nInformation about a pattern\n</h3>\n<p>\nThe <b>debug</b> modifier is a shorthand for <b>info,fullbincode</b>, requesting\nall available information.\n</p>\n<p>\nThe <b>bincode</b> modifier causes a representation of the compiled code to be\noutput after compilation. This information does not contain length and offset\nvalues, which ensures that the same output is generated for different internal\nlink sizes and different code unit widths. By using <b>bincode</b>, the same\nregression tests can be used in different environments.\n</p>\n<p>\nThe <b>fullbincode</b> modifier, by contrast, <i>does</i> include length and\noffset values. This is used in a few special tests that run only for specific\ncode unit widths and link sizes, and is also useful for one-off tests.\n</p>\n<p>\nThe <b>info</b> modifier requests information about the compiled pattern\n(whether it is anchored, has a fixed first character, and so on). The\ninformation is obtained from the <b>pcre2_pattern_info()</b> function. Here are\nsome typical examples:\n<pre>\n    re&#62; /(?i)(^a|^b)/m,info\n  Capture group count = 1\n  Compile options: multiline\n  Overall options: caseless multiline\n  First code unit at start or follows newline\n  Subject length lower bound = 1\n\n    re&#62; /(?i)abc/info\n  Capture group count = 0\n  Compile options: &#60;none&#62;\n  Overall options: caseless\n  First code unit = 'a' (caseless)\n  Last code unit = 'c' (caseless)\n  Subject length lower bound = 3\n</pre>\n\"Compile options\" are those specified by modifiers; \"overall options\" have\nadded options that are taken or deduced from the pattern. If both sets of\noptions are the same, just a single \"options\" line is output; if there are no\noptions, the line is omitted. \"First code unit\" is where any match must start;\nif there is more than one they are listed as \"starting code units\". \"Last code\nunit\" is the last literal code unit that must be present in any match. This is\nnot necessarily the last character. These lines are omitted if no starting or\nending code units are recorded. The subject length line is omitted when\n<b>no_start_optimize</b> is set because the minimum length is not calculated\nwhen it can never be used.\n</p>\n<p>\nThe <b>framesize</b> modifier shows the size, in bytes, of each storage frame\nused by <b>pcre2_match()</b> for handling backtracking. The size depends on the\nnumber of capturing parentheses in the pattern. A vector of these frames is\nused at matching time; its overall size is shown when the <b>heaframes_size</b>\nsubject modifier is set.\n</p>\n<p>\nThe <b>callout_info</b> modifier requests information about all the callouts in\nthe pattern. A list of them is output at the end of any other information that\nis requested. For each callout, either its number or string is given, followed\nby the item that follows it in the pattern.\n</p>\n<h3>\nPassing a NULL context\n</h3>\n<p>\nNormally, <b>pcre2test</b> passes a context block to <b>pcre2_compile()</b>. If\nthe <b>null_context</b> modifier is set, however, NULL is passed. This is for\ntesting that <b>pcre2_compile()</b> behaves correctly in this case (it uses\ndefault values).\n</p>\n<h3>\nPassing a NULL pattern\n</h3>\n<p>\nThe <b>null_pattern</b> modifier is for testing the behaviour of\n<b>pcre2_compile()</b> when the pattern argument is NULL. The length value\npassed is the default PCRE2_ZERO_TERMINATED unless <b>use_length</b> is set.\nAny length other than zero causes an error.\n</p>\n<h3>\nSpecifying pattern characters in hexadecimal\n</h3>\n<p>\nThe <b>hex</b> modifier specifies that the characters of the pattern, except for\nsubstrings enclosed in single or double quotes, are to be interpreted as pairs\nof hexadecimal digits. This feature is provided as a way of creating patterns\nthat contain binary zeros and other non-printing characters. White space is\npermitted between pairs of digits. For example, this pattern contains three\ncharacters:\n<pre>\n  /ab 32 59/hex\n</pre>\nParts of such a pattern are taken literally if quoted. This pattern contains\nnine characters, only two of which are specified in hexadecimal:\n<pre>\n  /ab \"literal\" 32/hex\n</pre>\nEither single or double quotes may be used. There is no way of including\nthe delimiter within a substring. The <b>hex</b> and <b>expand</b> modifiers are\nmutually exclusive.\n</p>\n<h3>\nSpecifying the pattern's length\n</h3>\n<p>\nBy default, patterns are passed to the compiling functions as zero-terminated\nstrings but can be passed by length instead of being zero-terminated. The\n<b>use_length</b> modifier causes this to happen. Using a length happens\nautomatically (whether or not <b>use_length</b> is set) when <b>hex</b> is set,\nbecause patterns specified in hexadecimal may contain binary zeros.\n</p>\n<p>\nIf <b>hex</b> or <b>use_length</b> is used with the POSIX wrapper API (see\n<a href=\"#posixwrapper\">\"Using the POSIX wrapper API\"</a>\nbelow), the REG_PEND extension is used to pass the pattern's length.\n</p>\n<h3>\nSpecifying a maximum for variable lookbehinds\n</h3>\n<p>\nVariable lookbehind assertions are supported only if, for each one, there is a\nmaximum length (in characters) that it can match. There is a limit on this,\nwhose default can be set at build time, with an ultimate default of 255. The\n<b>max_varlookbehind</b> modifier uses the <b>pcre2_set_max_varlookbehind()</b>\nfunction to change the limit. Lookbehinds whose branches each match a fixed\nlength are limited to 65535 characters per branch.\n</p>\n<h3>\nSpecifying wide characters in 16-bit and 32-bit modes\n</h3>\n<p>\nIn 16-bit and 32-bit modes, all input is automatically treated as UTF-8 and\ntranslated to UTF-16 or UTF-32 when the <b>utf</b> modifier is set. For testing\nthe 16-bit and 32-bit libraries in non-UTF mode, the <b>utf8_input</b> modifier\ncan be used. It is mutually exclusive with <b>utf</b>. Input lines are\ninterpreted as UTF-8 as a means of specifying wide characters. More details are\ngiven in\n<a href=\"#inputencoding\">\"Input encoding\"</a>\nabove.\n</p>\n<h3>\nGenerating long repetitive patterns\n</h3>\n<p>\nSome tests use long patterns that are very repetitive. Instead of creating a\nvery long input line for such a pattern, you can use a special repetition\nfeature, similar to the one described for subject lines above. If the\n<b>expand</b> modifier is present on a pattern, parts of the pattern that have\nthe form\n<pre>\n  \\[&#60;characters&#62;]{&#60;count&#62;}\n</pre>\nare expanded before the pattern is passed to <b>pcre2_compile()</b>. For\nexample, \\[AB]{6000} is expanded to \"ABAB...\" 6000 times. This construction\ncannot be nested. An initial \"\\[\" sequence is recognized only if \"]{\" followed\nby decimal digits and \"}\" is found later in the pattern. If not, the characters\nremain in the pattern unaltered. The <b>expand</b> and <b>hex</b> modifiers are\nmutually exclusive.\n</p>\n<p>\nIf part of an expanded pattern looks like an expansion, but is really part of\nthe actual pattern, unwanted expansion can be avoided by giving two values in\nthe quantifier. For example, \\[AB]{6000,6000} is not recognized as an\nexpansion item.\n</p>\n<p>\nIf the <b>info</b> modifier is set on an expanded pattern, the result of the\nexpansion is included in the information that is output.\n</p>\n<h3>\nJIT compilation\n</h3>\n<p>\nJust-in-time (JIT) compiling is a heavyweight optimization that can greatly\nspeed up pattern matching. See the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\ndocumentation for details. JIT compiling happens, optionally, after a pattern\nhas been successfully compiled into an internal form. The JIT compiler converts\nthis to optimized machine code. It needs to know whether the match-time options\nPCRE2_PARTIAL_HARD and PCRE2_PARTIAL_SOFT are going to be used, because\ndifferent code is generated for the different cases. See the <b>partial</b>\nmodifier in \"Subject Modifiers\"\n<a href=\"#subjectmodifiers\">below</a>\nfor details of how these options are specified for each match attempt.\n</p>\n<p>\nJIT compilation is requested by the <b>jit</b> pattern modifier, which may\noptionally be followed by an equals sign and a number in the range 0 to 7.\nThe three bits that make up the number specify which of the three JIT operating\nmodes are to be compiled:\n<pre>\n  1  compile JIT code for non-partial matching\n  2  compile JIT code for soft partial matching\n  4  compile JIT code for hard partial matching\n</pre>\nThe possible values for the <b>jit</b> modifier are therefore:\n<pre>\n  0  disable JIT\n  1  normal matching only\n  2  soft partial matching only\n  3  normal and soft partial matching\n  4  hard partial matching only\n  6  soft and hard partial matching only\n  7  all three modes\n</pre>\nIf no number is given, 7 is assumed. The phrase \"partial matching\" means a call\nto <b>pcre2_match()</b> with either the PCRE2_PARTIAL_SOFT or the\nPCRE2_PARTIAL_HARD option set. Note that such a call may return a complete\nmatch; the options enable the possibility of a partial match, but do not\nrequire it. Note also that if you request JIT compilation only for partial\nmatching (for example, jit=2) but do not set the <b>partial</b> modifier on a\nsubject line, that match will not use JIT code because none was compiled for\nnon-partial matching.\n</p>\n<p>\nIf JIT compilation is successful, the compiled JIT code will automatically be\nused when an appropriate type of match is run, except when incompatible\nrun-time options are specified. For more details, see the\n<a href=\"pcre2jit.html\"><b>pcre2jit</b></a>\ndocumentation. See also the <b>jitstack</b> modifier below for a way of\nsetting the size of the JIT stack.\n</p>\n<p>\nIf the <b>jitfast</b> modifier is specified, matching is done using the JIT\n\"fast path\" interface, <b>pcre2_jit_match()</b>, which skips some of the sanity\nchecks that are done by <b>pcre2_match()</b>, and of course does not work when\nJIT is not supported. If <b>jitfast</b> is specified without <b>jit</b>, jit=7 is\nassumed.\n</p>\n<p>\nIf the <b>jitverify</b> modifier is specified, information about the compiled\npattern shows whether JIT compilation was or was not successful. If\n<b>jitverify</b> is specified without <b>jit</b>, jit=7 is assumed. If JIT\ncompilation is successful when <b>jitverify</b> is set, the text \"(JIT)\" is\nadded to the first output line after a match or non match when JIT-compiled\ncode was actually used in the match.\n</p>\n<h3>\nSetting a locale\n</h3>\n<p>\nThe <b>locale</b> modifier must specify the name of a locale, for example:\n<pre>\n  /pattern/locale=fr_FR\n</pre>\nThe given locale is set, <b>pcre2_maketables()</b> is called to build a set of\ncharacter tables for the locale, and this is then passed to\n<b>pcre2_compile()</b> when compiling the regular expression. The same tables\nare used when matching the following subject lines. The <b>locale</b> modifier\napplies only to the pattern on which it appears, but can be given in a\n<b>#pattern</b> command if a default is needed. Setting a locale and alternate\ncharacter tables are mutually exclusive.\n</p>\n<h3>\nShowing pattern memory\n</h3>\n<p>\nThe <b>memory</b> modifier causes the size in bytes of the memory used to hold\nthe compiled pattern to be output. This does not include the size of the\n<b>pcre2_code</b> block; it is just the actual compiled data. If the pattern is\nsubsequently passed to the JIT compiler, the size of the JIT compiled code is\nalso output. Here is an example:\n<pre>\n    re&#62; /a(b)c/jit,memory\n  Memory allocation (code space): 21\n  Memory allocation (JIT code): 1910\n\n</pre>\n</p>\n<h3>\nLimiting nested parentheses\n</h3>\n<p>\nThe <b>parens_nest_limit</b> modifier sets a limit on the depth of nested\nparentheses in a pattern. Breaching the limit causes a compilation error.\nThe default for the library is set when PCRE2 is built, but <b>pcre2test</b>\nsets its own default of 220, which is required for running the standard test\nsuite.\n</p>\n<h3>\nLimiting the pattern length\n</h3>\n<p>\nThe <b>max_pattern_length</b> modifier sets a limit, in code units, to the\nlength of pattern that <b>pcre2_compile()</b> will accept. Breaching the limit\ncauses a compilation error. The default is the largest number a PCRE2_SIZE\nvariable can hold (essentially unlimited).\n</p>\n<h3>\nLimiting the size of a compiled pattern\n</h3>\n<p>\nThe <b>max_pattern_compiled_length</b> modifier sets a limit, in bytes, to the\namount of memory used by a compiled pattern. Breaching the limit causes a\ncompilation error. The default is the largest number a PCRE2_SIZE variable can\nhold (essentially unlimited).\n<a name=\"posixwrapper\"></a></p>\n<h3>\nUsing the POSIX wrapper API\n</h3>\n<p>\nThe <b>posix</b> and <b>posix_nosub</b> modifiers cause <b>pcre2test</b> to call\nPCRE2 via the POSIX wrapper API rather than its native API. When\n<b>posix_nosub</b> is used, the POSIX option REG_NOSUB is passed to\n<b>regcomp()</b>. The POSIX wrapper supports only the 8-bit library. Note that\nit does not imply POSIX matching semantics; for more detail see the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\ndocumentation. The following pattern modifiers set options for the\n<b>regcomp()</b> function:\n<pre>\n  caseless           REG_ICASE\n  multiline          REG_NEWLINE\n  dotall             REG_DOTALL     )\n  ungreedy           REG_UNGREEDY   ) These options are not part of\n  ucp                REG_UCP        )   the POSIX standard\n  utf                REG_UTF8       )\n</pre>\nThe <b>regerror_buffsize</b> modifier specifies a size for the error buffer that\nis passed to <b>regerror()</b> in the event of a compilation error. For example:\n<pre>\n  /abc/posix,regerror_buffsize=20\n</pre>\nThis provides a means of testing the behaviour of <b>regerror()</b> when the\nbuffer is too small for the error message. If this modifier has not been set, a\nlarge buffer is used.\n</p>\n<p>\nThe <b>aftertext</b> and <b>allaftertext</b> subject modifiers work as described\nbelow. All other modifiers are either ignored, with a warning message, or cause\nan error.\n</p>\n<p>\nThe pattern is passed to <b>regcomp()</b> as a zero-terminated string by\ndefault, but if the <b>use_length</b> or <b>hex</b> modifiers are set, the\nREG_PEND extension is used to pass it by length.\n</p>\n<h3>\nTesting the stack guard feature\n</h3>\n<p>\nThe <b>stackguard</b> modifier is used to test the use of\n<b>pcre2_set_compile_recursion_guard()</b>, a function that is provided to\nenable stack availability to be checked during compilation (see the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation for details). If the number specified by the modifier is greater\nthan zero, <b>pcre2_set_compile_recursion_guard()</b> is called to set up\ncallback from <b>pcre2_compile()</b> to a local function. The argument it\nreceives is the current nesting parenthesis depth; if this is greater than the\nvalue given by the modifier, non-zero is returned, causing the compilation to\nbe aborted.\n</p>\n<h3>\nUsing alternative character tables\n</h3>\n<p>\nThe value specified for the <b>tables</b> modifier must be one of the digits 0,\n1, 2, or 3. It causes a specific set of built-in character tables to be passed\nto <b>pcre2_compile()</b>. This is used in the PCRE2 tests to check behaviour\nwith different character tables. The digit specifies the tables as follows:\n<pre>\n  0   do not pass any special character tables\n  1   the default ASCII tables, as distributed in\n        pcre2_chartables.c.dist\n  2   a set of tables defining ISO 8859 characters\n  3   a set of tables loaded by the #loadtables command\n</pre>\nIn tables 2, some characters whose codes are greater than 128 are identified as\nletters, digits, spaces, etc. Tables 3 can be used only after a\n<b>#loadtables</b> command has loaded them from a binary file. Setting alternate\ncharacter tables and a locale are mutually exclusive.\n</p>\n<h3>\nSetting certain match controls\n</h3>\n<p>\nThe following modifiers are really subject modifiers, and are described under\n\"Subject Modifiers\" below. However, they may be included in a pattern's\nmodifier list, in which case they are applied to every subject line that is\nprocessed with that pattern. These modifiers do not affect the compilation\nprocess.\n<pre>\n      aftertext                   show text after match\n      allaftertext                show text after captures\n      allcaptures                 show all captures\n      allvector                   show the entire ovector\n      allusedtext                 show all consulted text\n      altglobal                   alternative global matching\n  /g  global                      global matching\n      heapframes_size             show match data heapframes size\n      jitstack=&#60;n&#62;                set size of JIT stack\n      mark                        show mark values\n      null_substitute_match_data  substitute with NULL match data\n      replace=&#60;str&#62;               specify a replacement string\n      startchar                   show starting character when relevant\n      substitute_callout          use substitution callouts\n      substitute_case_callout     use substitution case callouts\n      substitute_extended         use PCRE2_SUBSTITUTE_EXTENDED\n      substitute_literal          use PCRE2_SUBSTITUTE_LITERAL\n      substitute_matched          use PCRE2_SUBSTITUTE_MATCHED\n      substitute_overflow_length  use PCRE2_SUBSTITUTE_OVERFLOW_LENGTH\n      substitute_replacement_only use PCRE2_SUBSTITUTE_REPLACEMENT_ONLY\n      substitute_skip=&#60;n&#62;         skip substitution &#60;n&#62;\n      substitute_stop=&#60;n&#62;         skip substitution &#60;n&#62; and following\n      substitute_unknown_unset    use PCRE2_SUBSTITUTE_UNKNOWN_UNSET\n      substitute_unset_empty      use PCRE2_SUBSTITUTE_UNSET_EMPTY\n</pre>\nThese modifiers may not appear in a <b>#pattern</b> command. If you want them as\ndefaults, set them in a <b>#subject</b> command.\n</p>\n<h3>\nSpecifying literal subject lines\n</h3>\n<p>\nIf the <b>subject_literal</b> modifier is present on a pattern, all the subject\nlines that it matches are taken as literal strings, with no interpretation of\nbackslashes. It is not possible to set subject modifiers on such lines, but any\nthat are set as defaults by a <b>#subject</b> command are recognized.\n</p>\n<h3>\nSaving a compiled pattern\n</h3>\n<p>\nWhen a pattern with the <b>push</b> modifier is successfully compiled, it is\npushed onto a stack of compiled patterns, and <b>pcre2test</b> expects the next\nline to contain a new pattern (or a command) instead of a subject line. This\nfacility is used when saving compiled patterns to a file, as described in the\nsection entitled \"Saving and restoring compiled patterns\"\n<a href=\"#saverestore\">below.</a>\nIf <b>pushcopy</b> is used instead of <b>push</b>, a copy of the compiled\npattern is stacked, leaving the original as current, ready to match the\nfollowing input lines. This provides a way of testing the\n<b>pcre2_code_copy()</b> function.\nThe <b>push</b> and <b>pushcopy </b> modifiers are incompatible with compilation\nmodifiers such as <b>global</b> that act at match time. Any that are specified\nare ignored (for the stacked copy), with a warning message, except for\n<b>replace</b>, which causes an error. Note that <b>jitverify</b>, which is\nallowed, does not carry through to any subsequent matching that uses a stacked\npattern.\n</p>\n<h3>\nTesting foreign pattern conversion\n</h3>\n<p>\nThe experimental foreign pattern conversion functions in PCRE2 can be tested by\nsetting the <b>convert</b> modifier. Its argument is a colon-separated list of\noptions, which set the equivalent option for the <b>pcre2_pattern_convert()</b>\nfunction:\n<pre>\n  glob                    PCRE2_CONVERT_GLOB\n  glob_no_starstar        PCRE2_CONVERT_GLOB_NO_STARSTAR\n  glob_no_wild_separator  PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR\n  posix_basic             PCRE2_CONVERT_POSIX_BASIC\n  posix_extended          PCRE2_CONVERT_POSIX_EXTENDED\n  unset                   Unset all options\n</pre>\nThe \"unset\" value is useful for turning off a default that has been set by a\n<b>#pattern</b> command. When one of these options is set, the input pattern is\npassed to <b>pcre2_pattern_convert()</b>. If the conversion is successful, the\nresult is reflected in the output and then passed to <b>pcre2_compile()</b>. The\nnormal <b>utf</b> and <b>no_utf_check</b> options, if set, cause the\nPCRE2_CONVERT_UTF and PCRE2_CONVERT_NO_UTF_CHECK options to be passed to\n<b>pcre2_pattern_convert()</b>.\n</p>\n<p>\nBy default, the conversion function is allowed to allocate a buffer for its\noutput. However, if the <b>convert_length</b> modifier is set to a value greater\nthan zero, <b>pcre2test</b> passes a buffer of the given length. This makes it\npossible to test the length check.\n</p>\n<p>\nThe <b>convert_glob_escape</b> and <b>convert_glob_separator</b> modifiers can be\nused to specify the escape and separator characters for glob processing,\noverriding the defaults, which are operating-system dependent.\n<a name=\"subjectmodifiers\"></a></p>\n<h2><a name=\"SEC11\" href=\"#TOC1\">SUBJECT MODIFIERS</a></h2>\n<p>\nThe modifiers that can appear in subject lines and the <b>#subject</b>\ncommand are of two types.\n</p>\n<h3>\nSetting match options\n</h3>\n<p>\nThe following modifiers set options for <b>pcre2_match()</b> or\n<b>pcre2_dfa_match()</b>. See\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\nfor a description of their effects.\n<pre>\n      anchored                   set PCRE2_ANCHORED\n      copy_matched_subject       set PCRE2_COPY_MATCHED_SUBJECT\n      endanchored                set PCRE2_ENDANCHORED\n      dfa_restart                set PCRE2_DFA_RESTART\n      dfa_shortest               set PCRE2_DFA_SHORTEST\n      disable_recurseloop_check  set PCRE2_DISABLE_RECURSELOOP_CHECK\n      no_jit                     set PCRE2_NO_JIT\n      no_utf_check               set PCRE2_NO_UTF_CHECK\n      notbol                     set PCRE2_NOTBOL\n      notempty                   set PCRE2_NOTEMPTY\n      notempty_atstart           set PCRE2_NOTEMPTY_ATSTART\n      noteol                     set PCRE2_NOTEOL\n      partial_hard (or ph)       set PCRE2_PARTIAL_HARD\n      partial_soft (or ps)       set PCRE2_PARTIAL_SOFT\n</pre>\nThe partial matching modifiers are provided with abbreviations because they\nappear frequently in tests.\n</p>\n<p>\nIf the <b>posix</b> or <b>posix_nosub</b> modifier was present on the pattern,\ncausing the POSIX wrapper API to be used, the only option-setting modifiers\nthat have any effect are <b>notbol</b>, <b>notempty</b>, and <b>noteol</b>,\ncausing REG_NOTBOL, REG_NOTEMPTY, and REG_NOTEOL, respectively, to be passed to\n<b>regexec()</b>. The other modifiers are ignored, with a warning message.\n</p>\n<p>\nThere is one additional modifier that can be used with the POSIX wrapper. It is\nignored (with a warning) if used for non-POSIX matching.\n<pre>\n      posix_startend=&#60;n&#62;[:&#60;m&#62;]\n</pre>\nThis causes the subject string to be passed to <b>regexec()</b> using the\nREG_STARTEND option, which uses offsets to specify which part of the string is\nsearched. If only one number is given, the end offset is passed as the end of\nthe subject string. For more detail of REG_STARTEND, see the\n<a href=\"pcre2posix.html\"><b>pcre2posix</b></a>\ndocumentation. If the subject string contains binary zeros (coded as escapes\nsuch as \\x{00} because <b>pcre2test</b> does not support actual binary zeros in\nits input), you must use <b>posix_startend</b> to specify its length.\n</p>\n<h3>\nSetting match controls\n</h3>\n<p>\nThe following modifiers affect the matching process or request additional\ninformation. Some of them may also be specified on a pattern line (see above),\nin which case they apply to every subject line that is matched against that\npattern, but can be overridden by modifiers on the subject.\n<pre>\n      aftertext                  show text after match\n      allaftertext               show text after captures\n      allcaptures                show all captures\n      allusedtext                show all consulted text (non-JIT only)\n      allvector                  show the entire ovector\n      altglobal                  alternative global matching\n      callout_capture            show captures at callout time\n      callout_data=&#60;n&#62;           set a value to pass via callouts\n      callout_error=&#60;n&#62;[:&#60;m&#62;]    control callout error\n      callout_extra              show extra callout information\n      callout_fail=&#60;n&#62;[:&#60;m&#62;]     control callout failure\n      callout_no_where           do not show position of a callout\n      callout_none               do not supply a callout function\n      copy=&#60;number or name&#62;      copy captured substring\n      depth_limit=&#60;n&#62;            set a depth limit\n      dfa                        use <b>pcre2_dfa_match()</b>\n      find_limits                find heap, match and depth limits\n      find_limits_noheap         find match and depth limits\n      get=&#60;number or name&#62;       extract captured substring\n      getall                     extract all captured substrings\n  /g  global                     global matching\n      heapframes_size            show match data heapframes size\n      heap_limit=&#60;n&#62;             set a limit on heap memory (Kbytes)\n      jitstack=&#60;n&#62;               set size of JIT stack\n      mark                       show mark values\n      match_limit=&#60;n&#62;            set a match limit\n      memory                     show heap memory usage\n      null_context               match with a NULL context\n      null_replacement           substitute with NULL replacement\n      null_subject               match with NULL subject\n      null_substitute_match_data substitute with NULL match data\n      offset=&#60;n&#62;                 set starting offset\n      offset_limit=&#60;n&#62;           set offset limit\n      ovector=&#60;n&#62;                set size of output vector\n      recursion_limit=&#60;n&#62;        obsolete synonym for depth_limit\n      replace=&#60;str&#62;              specify a replacement string\n      startchar                  show startchar when relevant\n      startoffset=&#60;n&#62;            same as offset=&#60;n&#62;\n      substitute_callout         use substitution callouts\n      substitute_case_callout    use substitution case callouts\n      substitute_extended        use PCRE2_SUBSTITUTE_EXTENDED\n      substitute_literal         use PCRE2_SUBSTITUTE_LITERAL\n      substitute_matched         use PCRE2_SUBSTITUTE_MATCHED\n      substitute_overflow_length use PCRE2_SUBSTITUTE_OVERFLOW_LENGTH\n      substitute_replacement_only use PCRE2_SUBSTITUTE_REPLACEMENT_ONLY\n      substitute_skip=&#60;n&#62;        skip substitution number n\n      substitute_stop=&#60;n&#62;        skip substitution number n and greater\n      substitute_subject=&#60;str&#62;   specify a different subject for substitution\n      substitute_unknown_unset   use PCRE2_SUBSTITUTE_UNKNOWN_UNSET\n      substitute_unset_empty     use PCRE2_SUBSTITUTE_UNSET_EMPTY\n      zero_terminate             pass the subject as zero-terminated\n</pre>\nThe effects of these modifiers are described in the following sections. When\nmatching via the POSIX wrapper API, the <b>aftertext</b>, <b>allaftertext</b>,\nand <b>ovector</b> subject modifiers work as described below. All other\nmodifiers are either ignored, with a warning message, or cause an error.\n</p>\n<h3>\nShowing more text\n</h3>\n<p>\nThe <b>aftertext</b> modifier requests that as well as outputting the part of\nthe subject string that matched the entire pattern, <b>pcre2test</b> should in\naddition output the remainder of the subject string. This is useful for tests\nwhere the subject contains multiple copies of the same substring. The\n<b>allaftertext</b> modifier requests the same action for captured substrings as\nwell as the main matched substring. In each case the remainder is output on the\nfollowing line with a plus character following the capture number.\n</p>\n<p>\nThe <b>allusedtext</b> modifier requests that all the text that was consulted\nduring a successful pattern match by the interpreter should be shown, for both\nfull and partial matches. This feature is not supported for JIT matching, and\nif requested with JIT it is ignored (with a warning message). Setting this\nmodifier affects the output if there is a lookbehind at the start of a match,\nor, for a complete match, a lookahead at the end, or if \\K is used in the\npattern. Characters that precede or follow the start and end of the actual\nmatch are indicated in the output by '&#60;' or '&#62;' characters underneath them.\nHere is an example:\n<pre>\n    re&#62; /(?&#60;=pqr)abc(?=xyz)/\n  data&#62; 123pqrabcxyz456\\=allusedtext\n   0: pqrabcxyz\n      &#60;&#60;&#60;   &#62;&#62;&#62;\n  data&#62; 123pqrabcxy\\=ph,allusedtext\n  Partial match: pqrabcxy\n                 &#60;&#60;&#60;\n</pre>\nThe first, complete match shows that the matched string is \"abc\", with the\npreceding and following strings \"pqr\" and \"xyz\" having been consulted during\nthe match (when processing the assertions). The partial match can indicate only\nthe preceding string.\n</p>\n<p>\nThe <b>startchar</b> modifier requests that the starting character for the match\nbe indicated, if it is different to the start of the matched string. The only\ntime when this occurs is when \\K has been processed as part of the match. In\nthis situation, the output for the matched string is displayed from the\nstarting character instead of from the match point, with circumflex characters\nunder the earlier characters. For example:\n<pre>\n    re&#62; /abc\\Kxyz/\n  data&#62; abcxyz\\=startchar\n   0: abcxyz\n      ^^^\n</pre>\nUnlike <b>allusedtext</b>, the <b>startchar</b> modifier can be used with JIT.\nHowever, these two modifiers are mutually exclusive.\n</p>\n<h3>\nShowing the value of all capture groups\n</h3>\n<p>\nThe <b>allcaptures</b> modifier requests that the values of all potential\ncaptured parentheses be output after a match. By default, only those up to the\nhighest one actually used in the match are output (corresponding to the return\ncode from <b>pcre2_match()</b>). Groups that did not take part in the match\nare output as \"&#60;unset&#62;\". This modifier is not relevant for DFA matching (which\ndoes no capturing) and does not apply when <b>replace</b> is specified; it is\nignored, with a warning message, if present.\n</p>\n<h3>\nShowing the entire ovector, for all outcomes\n</h3>\n<p>\nThe <b>allvector</b> modifier requests that the entire ovector be shown,\nwhatever the outcome of the match. Compare <b>allcaptures</b>, which shows only\nup to the maximum number of capture groups for the pattern, and then only for a\nsuccessful complete non-DFA match. This modifier, which acts after any match\nresult, and also for DFA matching, provides a means of checking that there are\nno unexpected modifications to ovector fields. Before each match attempt, the\novector is filled with a special value, and if this is found in both elements\nof a capturing pair, \"&#60;unchanged&#62;\" is output. After a successful match, this\napplies to all groups after the maximum capture group for the pattern. In other\ncases it applies to the entire ovector. After a partial match, the first two\nelements are the only ones that should be set. After a DFA match, the amount of\novector that is used depends on the number of matches that were found.\n</p>\n<h3>\nTesting pattern callouts\n</h3>\n<p>\nA callout function is supplied when <b>pcre2test</b> calls the library matching\nfunctions, unless <b>callout_none</b> is specified. Its behaviour can be\ncontrolled by various modifiers listed above whose names begin with\n<b>callout_</b>. Details are given in the section entitled \"Callouts\"\n<a href=\"#callouts\">below.</a>\nTesting callouts from <b>pcre2_substitute()</b> is described separately in\n\"Testing the substitution function\"\n<a href=\"#substitution\">below.</a>\n</p>\n<h3>\nFinding all matches in a string\n</h3>\n<p>\nSearching for all possible matches within a subject can be requested by the\n<b>global</b> or <b>altglobal</b> modifier. After finding a match, the matching\nfunction is called again to search the remainder of the subject. The difference\nbetween <b>global</b> and <b>altglobal</b> is that the former uses the\n<i>start_offset</i> argument to <b>pcre2_match()</b> or <b>pcre2_dfa_match()</b>\nto start searching at a new point within the entire string (which is what Perl\ndoes), whereas the latter passes over a shortened subject. This makes a\ndifference to the matching process if the pattern begins with a lookbehind\nassertion (including \\b or \\B).\n</p>\n<p>\nIf an empty string is matched, the next match is done with the\nPCRE2_NOTEMPTY_ATSTART flag set, in order to search for another, non-empty,\nmatch at the same point in the subject. This imitates the way Perl handles such\ncases when using the <b>/g</b> modifier or the <b>split()</b> function.\n</p>\n<h3>\nTesting substring extraction functions\n</h3>\n<p>\nThe <b>copy</b> and <b>get</b> modifiers can be used to test the\n<b>pcre2_substring_copy_xxx()</b> and <b>pcre2_substring_get_xxx()</b> functions.\nThey can be given more than once, and each can specify a capture group name or\nnumber, for example:\n<pre>\n   abcd\\=copy=1,copy=3,get=G1\n</pre>\nIf the <b>#subject</b> command is used to set default copy and/or get lists,\nthese can be unset by specifying a negative number to cancel all numbered\ngroups and an empty name to cancel all named groups.\n</p>\n<p>\nThe <b>getall</b> modifier tests <b>pcre2_substring_list_get()</b>, which\nextracts all captured substrings.\n</p>\n<p>\nIf the subject line is successfully matched, the substrings extracted by the\nconvenience functions are output with C, G, or L after the string number\ninstead of a colon. This is in addition to the normal full list. The string\nlength (that is, the return from the extraction function) is given in\nparentheses after each substring, followed by the name when the extraction was\nby name.\n<a name=\"substitution\"></a></p>\n<h3>\nTesting the substitution function\n</h3>\n<p>\nIf the <b>replace</b> modifier is set, the <b>pcre2_substitute()</b> function is\ncalled instead of one of the matching functions (or after one call of\n<b>pcre2_match()</b> in the case of PCRE2_SUBSTITUTE_MATCHED). Note that\nreplacement strings cannot contain commas, because a comma signifies the end of\na modifier. This is not thought to be an issue in a test program.\n</p>\n<p>\nSpecifying a completely empty replacement string disables this modifier.\nHowever, it is possible to specify an empty replacement by providing a buffer\nlength, as described below, for an otherwise empty replacement.\n</p>\n<p>\nUnlike subject strings, <b>pcre2test</b> does not process replacement strings\nfor escape sequences. In UTF mode, a replacement string is checked to see if it\nis a valid UTF-8 string. If so, it is correctly converted to a UTF string of\nthe appropriate code unit width. If it is not a valid UTF-8 string, the\nindividual code units are copied directly. This provides a means of passing an\ninvalid UTF-8 string for testing purposes.\n</p>\n<p>\nThe following modifiers set options (in additional to the normal match options)\nfor <b>pcre2_substitute()</b>:\n<pre>\n  global                      PCRE2_SUBSTITUTE_GLOBAL\n  substitute_extended         PCRE2_SUBSTITUTE_EXTENDED\n  substitute_literal          PCRE2_SUBSTITUTE_LITERAL\n  substitute_matched          PCRE2_SUBSTITUTE_MATCHED\n  substitute_overflow_length  PCRE2_SUBSTITUTE_OVERFLOW_LENGTH\n  substitute_replacement_only PCRE2_SUBSTITUTE_REPLACEMENT_ONLY\n  substitute_unknown_unset    PCRE2_SUBSTITUTE_UNKNOWN_UNSET\n  substitute_unset_empty      PCRE2_SUBSTITUTE_UNSET_EMPTY\n</pre>\nSee the\n<a href=\"pcre2api.html\"><b>pcre2api</b></a>\ndocumentation for details of these options.\n</p>\n<p>\nAfter a successful substitution, the modified string is output, preceded by the\nnumber of replacements. This may be zero if there were no matches. Here is a\nsimple example of a substitution test:\n<pre>\n  /abc/replace=xxx\n      =abc=abc=\n   1: =xxx=abc=\n      =abc=abc=\\=global\n   2: =xxx=xxx=\n</pre>\nSubject and replacement strings should be kept relatively short (fewer than 256\ncharacters) for substitution tests, as fixed-size buffers are used. To make it\neasy to test for buffer overflow, if the replacement string starts with a\nnumber in square brackets, that number is passed to <b>pcre2_substitute()</b> as\nthe size of the output buffer, with the replacement string starting at the next\ncharacter. Here is an example that tests the edge case:\n<pre>\n  /abc/\n      123abc123\\=replace=[10]XYZ\n   1: 123XYZ123\n      123abc123\\=replace=[9]XYZ\n  Failed: error -48: no more memory\n</pre>\nThe default action of <b>pcre2_substitute()</b> is to return\nPCRE2_ERROR_NOMEMORY when the output buffer is too small. However, if the\nPCRE2_SUBSTITUTE_OVERFLOW_LENGTH option is set (by using the\n<b>substitute_overflow_length</b> modifier), <b>pcre2_substitute()</b> continues\nto go through the motions of matching and substituting (but not doing any\ncallouts), in order to compute the size of buffer that is required. When this\nhappens, <b>pcre2test</b> shows the required buffer length (which includes space\nfor the trailing zero) as part of the error message. For example:\n<pre>\n  /abc/substitute_overflow_length\n      123abc123\\=replace=[9]XYZ\n  Failed: error -48: no more memory: 10 code units are needed\n</pre>\nA replacement string is ignored with POSIX and DFA matching. Specifying partial\nmatching provokes an error return (\"bad option value\") from\n<b>pcre2_substitute()</b>.\n<br>\n<br>\nThe <b>substitute_subject</b> modifier may be used to test the use of the PCRE2\nAPI, in which a client calls <b>pcre2_match()</b> followed by <b>pcre2_substitute()</b>\nwith PCRE2_SUBSTITUTE_MATCHED, but the client performs an unexpected and\nunsupported modification of the subject buffer in-place, in between the match\nand substitution.\n</p>\n<h3>\nTesting substitute callouts\n</h3>\n<p>\nIf the <b>substitute_callout</b> modifier is set, a substitution callout\nfunction is set up. The <b>null_context</b> modifier must not be set, because\nthe address of the callout function is passed in a match context. When the\ncallout function is called (after each substitution), details of the input\nand output strings are output. For example:\n<pre>\n  /abc/g,replace=&#60;$0&#62;,substitute_callout\n      abcdefabcpqr\n   1(1) Old 0 3 \"abc\" New 0 5 \"&#60;abc&#62;\"\n   2(1) Old 6 9 \"abc\" New 8 13 \"&#60;abc&#62;\"\n   2: &#60;abc&#62;def&#60;abc&#62;pqr\n</pre>\nThe first number on each callout line is the count of matches. The\nparenthesized number is the number of pairs that are set in the ovector (that\nis, one more than the number of capturing groups that were set). Then are\nlisted the offsets of the old substring, its contents, and the same for the\nreplacement.\n</p>\n<p>\nBy default, the substitution callout function returns zero, which accepts the\nreplacement and causes matching to continue if /g was used. Two further\nmodifiers can be used to test other return values. If <b>substitute_skip</b> is\nset to a value greater than zero the callout function returns +1 for the match\nof that number, and similarly <b>substitute_stop</b> returns -1. These cause the\nreplacement to be rejected, and -1 causes no further matching to take place. If\neither of them are set, <b>substitute_callout</b> is assumed. For example:\n<pre>\n  /abc/g,replace=&#60;$0&#62;,substitute_skip=1\n      abcdefabcpqr\n   1(1) Old 0 3 \"abc\" New 0 5 \"&#60;abc&#62; SKIPPED\"\n   2(1) Old 6 9 \"abc\" New 6 11 \"&#60;abc&#62;\"\n   2: abcdef&#60;abc&#62;pqr\n      abcdefabcpqr\\=substitute_stop=1\n   1(1) Old 0 3 \"abc\" New 0 5 \"&#60;abc&#62; STOPPED\"\n   1: abcdefabcpqr\n</pre>\nIf both are set for the same number, stop takes precedence. Only a single skip\nor stop is supported, which is sufficient for testing that the feature works.\n</p>\n<h3>\nTesting substitute case callouts\n</h3>\n<p>\nIf the <b>substitute_case_callout</b> modifier is set, a substitution\ncase callout function is set up. The callout function is called for each\nsubstituted chunk which is to be case-transformed.\n</p>\n<p>\nThe callout function passed is a fixed function with implementation for certain\nbehaviours: inputs which shrink when case-transformed; inputs which grow; inputs\nwith distinct upper/lower/titlecase forms. The characters which are not\nspecial-cased for testing purposes are left unmodified, as if they are caseless\ncharacters.\n</p>\n<h3>\nSetting the JIT stack size\n</h3>\n<p>\nThe <b>jitstack</b> modifier provides a way of setting the maximum stack size\nthat is used by the just-in-time optimization code. It is ignored if JIT\noptimization is not being used. The value is a number of kibibytes (units of\n1024 bytes). Setting zero reverts to the default of 32KiB. Providing a stack\nthat is larger than the default is necessary only for very complicated\npatterns. If <b>jitstack</b> is set non-zero on a subject line it overrides any\nvalue that was set on the pattern.\n</p>\n<h3>\nSetting heap, match, and depth limits\n</h3>\n<p>\nThe <b>heap_limit</b>, <b>match_limit</b>, and <b>depth_limit</b> modifiers set\nthe appropriate limits in the match context. These values are ignored when the\n<b>find_limits</b> or <b>find_limits_noheap</b> modifier is specified.\n</p>\n<h3>\nFinding minimum limits\n</h3>\n<p>\nIf the <b>find_limits</b> modifier is present on a subject line, <b>pcre2test</b>\ncalls the relevant matching function several times, setting different values in\nthe match context via <b>pcre2_set_heap_limit()</b>,\n<b>pcre2_set_match_limit()</b>, or <b>pcre2_set_depth_limit()</b> until it finds\nthe smallest value for each parameter that allows the match to complete without\na \"limit exceeded\" error. The match itself may succeed or fail. An alternative\nmodifier, <b>find_limits_noheap</b>, omits the heap limit. This is used in the\nstandard tests, because the minimum heap limit varies between systems. If JIT\nis being used, only the match limit is relevant, and the other two are\nautomatically omitted.\n</p>\n<p>\nWhen using this modifier, the pattern should not contain any limit settings\nsuch as (*LIMIT_MATCH=...) within it. If such a setting is present and is\nlower than the minimum matching value, the minimum value cannot be found\nbecause <b>pcre2_set_match_limit()</b> etc. are only able to reduce the value of\nan in-pattern limit; they cannot increase it.\n</p>\n<p>\nFor non-DFA matching, the minimum <i>depth_limit</i> number is a measure of how\nmuch nested backtracking happens (that is, how deeply the pattern's tree is\nsearched). In the case of DFA matching, <i>depth_limit</i> controls the depth of\nrecursive calls of the internal function that is used for handling pattern\nrecursion, lookaround assertions, and atomic groups.\n</p>\n<p>\nFor non-DFA matching, the <i>match_limit</i> number is a measure of the amount\nof backtracking that takes place, and learning the minimum value can be\ninstructive. For most simple matches, the number is quite small, but for\npatterns with very large numbers of matching possibilities, it can become large\nvery quickly with increasing length of subject string. In the case of DFA\nmatching, <i>match_limit</i> controls the total number of calls, both recursive\nand non-recursive, to the internal matching function, thus controlling the\noverall amount of computing resource that is used.\n</p>\n<p>\nFor both kinds of matching, the <i>heap_limit</i> number, which is in kibibytes\n(units of 1024 bytes), limits the amount of heap memory used for matching.\n</p>\n<h3>\nShowing MARK names\n</h3>\n<p>\nThe <b>mark</b> modifier causes the names from backtracking control verbs that\nare returned from calls to <b>pcre2_match()</b> to be displayed. If a mark is\nreturned for a match, non-match, or partial match, <b>pcre2test</b> shows it.\nFor a match, it is on a line by itself, tagged with \"MK:\". Otherwise, it\nis added to the non-match message.\n</p>\n<h3>\nShowing memory usage\n</h3>\n<p>\nThe <b>memory</b> modifier causes <b>pcre2test</b> to log the sizes of all heap\nmemory allocation and freeing calls that occur during a call to\n<b>pcre2_match()</b> or <b>pcre2_dfa_match()</b>. In the latter case, heap memory\nis used only when a match requires more internal workspace that the default\nallocation on the stack, so in many cases there will be no output. No heap\nmemory is allocated during matching with JIT. For this modifier to work, the\n<b>null_context</b> modifier must not be set on both the pattern and the\nsubject, though it can be set on one or the other.\n</p>\n<h3>\nShowing the heap frame overall vector size\n</h3>\n<p>\nThe <b>heapframes_size</b> modifier is relevant for matches using\n<b>pcre2_match()</b> without JIT. After a match has run (whether successful or\nnot) the size, in bytes, of the allocated heap frames vector that is left\nattached to the match data block is shown. If the matching action involved\nseveral calls to <b>pcre2_match()</b> (for example, global matching or for\ntiming) only the final value is shown.\n</p>\n<p>\nThis modifier is ignored, with a warning, for POSIX or DFA matching. JIT\nmatching does not use the heap frames vector, so the size is always zero,\nunless there was a previous non-JIT match. Note that specifing a size of zero\nfor the output vector (see below) causes <b>pcre2test</b> to free its match data\nblock (and associated heap frames vector) and allocate a new one.\n</p>\n<h3>\nSetting a starting offset\n</h3>\n<p>\nThe <b>offset</b> modifier sets an offset in the subject string at which\nmatching starts. Its value is a number of code units, not characters.\n</p>\n<h3>\nSetting an offset limit\n</h3>\n<p>\nThe <b>offset_limit</b> modifier sets a limit for unanchored matches. If a match\ncannot be found starting at or before this offset in the subject, a \"no match\"\nreturn is given. The data value is a number of code units, not characters. When\nthis modifier is used, the <b>use_offset_limit</b> modifier must have been set\nfor the pattern; if not, an error is generated.\n</p>\n<h3>\nSetting the size of the output vector\n</h3>\n<p>\nThe <b>ovector</b> modifier applies only to the subject line in which it\nappears, though of course it can also be used to set a default in a\n<b>#subject</b> command. It specifies the number of pairs of offsets that are\navailable for storing matching information. The default is 15.\n</p>\n<p>\nA value of zero is useful when testing the POSIX API because it causes\n<b>regexec()</b> to be called with a NULL capture vector. When not testing the\nPOSIX API, a value of zero is used to cause\n<b>pcre2_match_data_create_from_pattern()</b> to be called, in order to create a\nnew match block of exactly the right size for the pattern. (It is not possible\nto create a match block with a zero-length ovector; there is always at least\none pair of offsets.) The old match data block is freed.\n</p>\n<h3>\nPassing the subject as zero-terminated\n</h3>\n<p>\nBy default, the subject string is passed to a native API matching function with\nits correct length. In order to test the facility for passing a zero-terminated\nstring, the <b>zero_terminate</b> modifier is provided. It causes the length to\nbe passed as PCRE2_ZERO_TERMINATED. When matching via the POSIX interface,\nthis modifier is ignored, with a warning.\n</p>\n<p>\nWhen testing <b>pcre2_substitute()</b>, this modifier also has the effect of\npassing the replacement string as zero-terminated.\n</p>\n<h3>\nPassing a NULL context, subject, or replacement\n</h3>\n<p>\nNormally, <b>pcre2test</b> passes a context block to <b>pcre2_match()</b>,\n<b>pcre2_dfa_match()</b>, <b>pcre2_jit_match()</b> or <b>pcre2_substitute()</b>.\nIf the <b>null_context</b> modifier is set, however, NULL is passed. This is for\ntesting that the matching and substitution functions behave correctly in this\ncase (they use default values). This modifier cannot be used with the\n<b>find_limits</b>, <b>find_limits_noheap</b>, or <b>substitute_callout</b>\nmodifiers.\n</p>\n<p>\nSimilarly, for testing purposes, if the <b>null_subject</b> or\n<b>null_replacement</b> modifier is set, the subject or replacement string\npointers are passed as NULL, respectively, to the relevant functions.\n</p>\n<h2><a name=\"SEC12\" href=\"#TOC1\">THE ALTERNATIVE MATCHING FUNCTION</a></h2>\n<p>\nBy default, <b>pcre2test</b> uses the standard PCRE2 matching function,\n<b>pcre2_match()</b> to match each subject line. PCRE2 also supports an\nalternative matching function, <b>pcre2_dfa_match()</b>, which operates in a\ndifferent way, and has some restrictions. The differences between the two\nfunctions are described in the\n<a href=\"pcre2matching.html\"><b>pcre2matching</b></a>\ndocumentation.\n</p>\n<p>\nIf the <b>dfa</b> modifier is set, the alternative matching function is used.\nThis function finds all possible matches at a given point in the subject. If,\nhowever, the <b>dfa_shortest</b> modifier is set, processing stops after the\nfirst match is found. This is always the shortest possible match.\n</p>\n<h2><a name=\"SEC13\" href=\"#TOC1\">DEFAULT OUTPUT FROM pcre2test</a></h2>\n<p>\nThis section describes the output when the normal matching function,\n<b>pcre2_match()</b>, is being used.\n</p>\n<p>\nWhen a match succeeds, <b>pcre2test</b> outputs the list of captured substrings,\nstarting with number 0 for the string that matched the whole pattern.\nOtherwise, it outputs \"No match\" when the return is PCRE2_ERROR_NOMATCH, or\n\"Partial match:\" followed by the partially matching substring when the\nreturn is PCRE2_ERROR_PARTIAL. (Note that this is the\nentire substring that was inspected during the partial match; it may include\ncharacters before the actual match start if a lookbehind assertion, \\K, \\b,\nor \\B was involved.)\n</p>\n<p>\nFor any other return, <b>pcre2test</b> outputs the PCRE2 negative error number\nand a short descriptive phrase. If the error is a failed UTF string check, the\ncode unit offset of the start of the failing character is also output. Here is\nan example of an interactive <b>pcre2test</b> run.\n<pre>\n  $ pcre2test\n  PCRE2 version 10.22 2016-07-29\n\n    re&#62; /^abc(\\d+)/\n  data&#62; abc123\n   0: abc123\n   1: 123\n  data&#62; xyz\n  No match\n</pre>\nUnset capturing substrings that are not followed by one that is set are not\nshown by <b>pcre2test</b> unless the <b>allcaptures</b> modifier is specified. In\nthe following example, there are two capturing substrings, but when the first\ndata line is matched, the second, unset substring is not shown. An \"internal\"\nunset substring is shown as \"&#60;unset&#62;\", as for the second data line.\n<pre>\n    re&#62; /(a)|(b)/\n  data&#62; a\n   0: a\n   1: a\n  data&#62; b\n   0: b\n   1: &#60;unset&#62;\n   2: b\n</pre>\nIf the strings contain any non-printing characters, they are output as \\xhh\nescapes if the value is less than 256 and UTF mode is not set. Otherwise they\nare output as \\x{hh...} escapes. See below for the definition of non-printing\ncharacters. If the <b>aftertext</b> modifier is set, the output for substring 0\nis followed by the rest of the subject string, identified by \"0+\" like this:\n<pre>\n    re&#62; /cat/aftertext\n  data&#62; cataract\n   0: cat\n   0+ aract\n</pre>\nIf global matching is requested, the results of successive matching attempts\nare output in sequence, like this:\n<pre>\n    re&#62; /\\Bi(\\w\\w)/g\n  data&#62; Mississippi\n   0: iss\n   1: ss\n   0: iss\n   1: ss\n   0: ipp\n   1: pp\n</pre>\n\"No match\" is output only if the first match attempt fails. Here is an example\nof a failure message (the offset 4 that is specified by the <b>offset</b>\nmodifier is past the end of the subject string):\n<pre>\n    re&#62; /xyz/\n  data&#62; xyz\\=offset=4\n  Error -24 (bad offset value)\n</pre>\n</p>\n<p>\nNote that whereas patterns can be continued over several lines (a plain \"&#62;\"\nprompt is used for continuations), subject lines may not. However newlines can\nbe included in a subject by means of the \\n escape (or \\r, \\r\\n, etc.,\ndepending on the newline sequence setting).\n</p>\n<h2><a name=\"SEC14\" href=\"#TOC1\">OUTPUT FROM THE ALTERNATIVE MATCHING FUNCTION</a></h2>\n<p>\nWhen the alternative matching function, <b>pcre2_dfa_match()</b>, is used, the\noutput consists of a list of all the matches that start at the first point in\nthe subject where there is at least one match. For example:\n<pre>\n    re&#62; /(tang|tangerine|tan)/\n  data&#62; yellow tangerine\\=dfa\n   0: tangerine\n   1: tang\n   2: tan\n</pre>\nUsing the normal matching function on this data finds only \"tang\". The\nlongest matching string is always given first (and numbered zero). After a\nPCRE2_ERROR_PARTIAL return, the output is \"Partial match:\", followed by the\npartially matching substring. Note that this is the entire substring that was\ninspected during the partial match; it may include characters before the actual\nmatch start if a lookbehind assertion, \\b, or \\B was involved. (\\K is not\nsupported for DFA matching.)\n</p>\n<p>\nIf global matching is requested, the search for further matches resumes\nat the end of the longest match. For example:\n<pre>\n    re&#62; /(tang|tangerine|tan)/g\n  data&#62; yellow tangerine and tangy sultana\\=dfa\n   0: tangerine\n   1: tang\n   2: tan\n   0: tang\n   1: tan\n   0: tan\n</pre>\nThe alternative matching function does not support substring capture, so the\nmodifiers that are concerned with captured substrings are not relevant.\n</p>\n<h2><a name=\"SEC15\" href=\"#TOC1\">RESTARTING AFTER A PARTIAL MATCH</a></h2>\n<p>\nWhen the alternative matching function has given the PCRE2_ERROR_PARTIAL\nreturn, indicating that the subject partially matched the pattern, you can\nrestart the match with additional subject data by means of the\n<b>dfa_restart</b> modifier. For example:\n<pre>\n    re&#62; /^\\d?\\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\d\\d$/\n  data&#62; 23ja\\=ps,dfa\n  Partial match: 23ja\n  data&#62; n05\\=dfa,dfa_restart\n   0: n05\n</pre>\nFor further information about partial matching, see the\n<a href=\"pcre2partial.html\"><b>pcre2partial</b></a>\ndocumentation.\n<a name=\"callouts\"></a></p>\n<h2><a name=\"SEC16\" href=\"#TOC1\">CALLOUTS</a></h2>\n<p>\nIf the pattern contains any callout requests, <b>pcre2test</b>'s callout\nfunction is called during matching unless <b>callout_none</b> is specified. This\nworks with both matching functions, and with JIT, though there are some\ndifferences in behaviour. The output for callouts with numerical arguments and\nthose with string arguments is slightly different.\n</p>\n<h3>\nCallouts with numerical arguments\n</h3>\n<p>\nBy default, the callout function displays the callout number, the start and\ncurrent positions in the subject text at the callout time, and the next pattern\nitem to be tested. For example:\n<pre>\n  ---&#62;pqrabcdef\n    0    ^  ^     \\d\n</pre>\nThis output indicates that callout number 0 occurred for a match attempt\nstarting at the fourth character of the subject string, when the pointer was at\nthe seventh character, and when the next pattern item was \\d. Just\none circumflex is output if the start and current positions are the same, or if\nthe current position precedes the start position, which can happen if the\ncallout is in a lookbehind assertion.\n</p>\n<p>\nCallouts numbered 255 are assumed to be automatic callouts, inserted as a\nresult of the <b>auto_callout</b> pattern modifier. In this case, instead of\nshowing the callout number, the offset in the pattern, preceded by a plus, is\noutput. For example:\n<pre>\n    re&#62; /\\d?[A-E]\\*/auto_callout\n  data&#62; E*\n  ---&#62;E*\n   +0 ^      \\d?\n   +3 ^      [A-E]\n   +8 ^^     \\*\n  +10 ^ ^\n   0: E*\n</pre>\nIf a pattern contains (*MARK) items, an additional line is output whenever\na change of latest mark is passed to the callout function. For example:\n<pre>\n    re&#62; /a(*MARK:X)bc/auto_callout\n  data&#62; abc\n  ---&#62;abc\n   +0 ^       a\n   +1 ^^      (*MARK:X)\n  +10 ^^      b\n  Latest Mark: X\n  +11 ^ ^     c\n  +12 ^  ^\n   0: abc\n</pre>\nThe mark changes between matching \"a\" and \"b\", but stays the same for the rest\nof the match, so nothing more is output. If, as a result of backtracking, the\nmark reverts to being unset, the text \"&#60;unset&#62;\" is output.\n</p>\n<h3>\nCallouts with string arguments\n</h3>\n<p>\nThe output for a callout with a string argument is similar, except that instead\nof outputting a callout number before the position indicators, the callout\nstring and its offset in the pattern string are output before the reflection of\nthe subject string, and the subject string is reflected for each callout. For\nexample:\n<pre>\n    re&#62; /^ab(?C'first')cd(?C\"second\")ef/\n  data&#62; abcdefg\n  Callout (7): 'first'\n  ---&#62;abcdefg\n      ^ ^         c\n  Callout (20): \"second\"\n  ---&#62;abcdefg\n      ^   ^       e\n   0: abcdef\n\n</pre>\n</p>\n<h3>\nCallout modifiers\n</h3>\n<p>\nThe callout function in <b>pcre2test</b> returns zero (carry on matching) by\ndefault, but you can use a <b>callout_fail</b> modifier in a subject line to\nchange this and other parameters of the callout (see below).\n</p>\n<p>\nIf the <b>callout_capture</b> modifier is set, the current captured groups are\noutput when a callout occurs. This is useful only for non-DFA matching, as\n<b>pcre2_dfa_match()</b> does not support capturing, so no captures are ever\nshown.\n</p>\n<p>\nThe normal callout output, showing the callout number or pattern offset (as\ndescribed above) is suppressed if the <b>callout_no_where</b> modifier is set.\n</p>\n<p>\nWhen using the interpretive matching function <b>pcre2_match()</b> without JIT,\nsetting the <b>callout_extra</b> modifier causes additional output from\n<b>pcre2test</b>'s callout function to be generated. For the first callout in a\nmatch attempt at a new starting position in the subject, \"New match attempt\" is\noutput. If there has been a backtrack since the last callout (or start of\nmatching if this is the first callout), \"Backtrack\" is output, followed by \"No\nother matching paths\" if the backtrack ended the previous match attempt. For\nexample:\n<pre>\n   re&#62; /(a+)b/auto_callout,no_start_optimize,no_auto_possess\n  data&#62; aac\\=callout_extra\n  New match attempt\n  ---&#62;aac\n   +0 ^       (\n   +1 ^       a+\n   +3 ^ ^     )\n   +4 ^ ^     b\n  Backtrack\n  ---&#62;aac\n   +3 ^^      )\n   +4 ^^      b\n  Backtrack\n  No other matching paths\n  New match attempt\n  ---&#62;aac\n   +0  ^      (\n   +1  ^      a+\n   +3  ^^     )\n   +4  ^^     b\n  Backtrack\n  No other matching paths\n  New match attempt\n  ---&#62;aac\n   +0   ^     (\n   +1   ^     a+\n  Backtrack\n  No other matching paths\n  New match attempt\n  ---&#62;aac\n   +0    ^    (\n   +1    ^    a+\n  No match\n</pre>\nNotice that various optimizations must be turned off if you want all possible\nmatching paths to be scanned. If <b>no_start_optimize</b> is not used, there is\nan immediate \"no match\", without any callouts, because the starting\noptimization fails to find \"b\" in the subject, which it knows must be present\nfor any match. If <b>no_auto_possess</b> is not used, the \"a+\" item is turned\ninto \"a++\", which reduces the number of backtracks.\n</p>\n<p>\nThe <b>callout_extra</b> modifier has no effect if used with the DFA matching\nfunction, or with JIT.\n</p>\n<h3>\nReturn values from callouts\n</h3>\n<p>\nThe default return from the callout function is zero, which allows matching to\ncontinue. The <b>callout_fail</b> modifier can be given one or two numbers. If\nthere is only one number, 1 is returned instead of 0 (causing matching to\nbacktrack) when a callout of that number is reached. If two numbers (&#60;n&#62;:&#60;m&#62;)\nare given, 1 is returned when callout &#60;n&#62; is reached and there have been at\nleast &#60;m&#62; callouts. The <b>callout_error</b> modifier is similar, except that\nPCRE2_ERROR_CALLOUT is returned, causing the entire matching process to be\naborted. If both these modifiers are set for the same callout number,\n<b>callout_error</b> takes precedence. Note that callouts with string arguments\nare always given the number zero.\n</p>\n<p>\nThe <b>callout_data</b> modifier can be given an unsigned or a negative number.\nThis is set as the \"user data\" that is passed to the matching function, and\npassed back when the callout function is invoked. Any value other than zero is\nused as a return from <b>pcre2test</b>'s callout function.\n</p>\n<p>\nInserting callouts can be helpful when using <b>pcre2test</b> to check\ncomplicated regular expressions. For further information about callouts, see\nthe\n<a href=\"pcre2callout.html\"><b>pcre2callout</b></a>\ndocumentation.\n</p>\n<h2><a name=\"SEC17\" href=\"#TOC1\">NON-PRINTING CHARACTERS</a></h2>\n<p>\nWhen <b>pcre2test</b> is outputting text in the compiled version of a pattern,\nbytes other than 32-126 are always treated as non-printing characters and are\ntherefore shown as hex escapes.\n</p>\n<p>\nWhen <b>pcre2test</b> is outputting text that is a matched part of a subject\nstring, it behaves in the same way, unless a different locale has been set for\nthe pattern (using the <b>locale</b> modifier). In this case, the\n<b>isprint()</b> function is used to distinguish printing and non-printing\ncharacters.\n<a name=\"saverestore\"></a></p>\n<h2><a name=\"SEC18\" href=\"#TOC1\">SAVING AND RESTORING COMPILED PATTERNS</a></h2>\n<p>\nIt is possible to save compiled patterns on disc or elsewhere, and reload them\nlater, subject to a number of restrictions. JIT data cannot be saved. The host\non which the patterns are reloaded must be running the same version of PCRE2,\nwith the same code unit width, and must also have the same endianness, pointer\nwidth and PCRE2_SIZE type. Before compiled patterns can be saved they must be\nserialized, that is, converted to a stream of bytes. A single byte stream may\ncontain any number of compiled patterns, but they must all use the same\ncharacter tables. A single copy of the tables is included in the byte stream\n(its size is 1088 bytes).\n</p>\n<p>\nThe functions whose names begin with <b>pcre2_serialize_</b> are used\nfor serializing and de-serializing. They are described in the\n<a href=\"pcre2serialize.html\"><b>pcre2serialize</b></a>\ndocumentation. In this section we describe the features of <b>pcre2test</b> that\ncan be used to test these functions.\n</p>\n<p>\nNote that \"serialization\" in PCRE2 does not convert compiled patterns to an\nabstract format like Java or .NET. It just makes a reloadable byte code stream.\nHence the restrictions on reloading mentioned above.\n</p>\n<p>\nIn <b>pcre2test</b>, when a pattern with <b>push</b> modifier is successfully\ncompiled, it is pushed onto a stack of compiled patterns, and <b>pcre2test</b>\nexpects the next line to contain a new pattern (or command) instead of a\nsubject line. By contrast, the <b>pushcopy</b> modifier causes a copy of the\ncompiled pattern to be stacked, leaving the original available for immediate\nmatching. By using <b>push</b> and/or <b>pushcopy</b>, a number of patterns can\nbe compiled and retained. These modifiers are incompatible with <b>posix</b>,\nand control modifiers that act at match time are ignored (with a message) for\nthe stacked patterns. The <b>jitverify</b> modifier applies only at compile\ntime.\n</p>\n<p>\nThe command\n<pre>\n  #save &#60;filename&#62;\n</pre>\ncauses all the stacked patterns to be serialized and the result written to the\nnamed file. Afterwards, all the stacked patterns are freed. The command\n<pre>\n  #load &#60;filename&#62;\n</pre>\nreads the data in the file, and then arranges for it to be de-serialized, with\nthe resulting compiled patterns added to the pattern stack. The pattern on the\ntop of the stack can be retrieved by the #pop command, which must be followed\nby lines of subjects that are to be matched with the pattern, terminated as\nusual by an empty line or end of file. This command may be followed by a\nmodifier list containing only\n<a href=\"#controlmodifiers\">control modifiers</a>\nthat act after a pattern has been compiled. In particular, <b>hex</b>,\n<b>posix</b>, <b>posix_nosub</b>, <b>push</b>, and <b>pushcopy</b> are not allowed,\nnor are any\n<a href=\"#optionmodifiers\">option-setting modifiers.</a>\nThe JIT modifiers are, however permitted. Here is an example that saves and\nreloads two patterns.\n<pre>\n  /abc/push\n  /xyz/push\n  #save tempfile\n  #load tempfile\n  #pop info\n  xyz\n\n  #pop jit,bincode\n  abc\n</pre>\nIf <b>jitverify</b> is used with #pop, it does not automatically imply\n<b>jit</b>, which is different behaviour from when it is used on a pattern.\n</p>\n<p>\nThe #popcopy command is analogous to the <b>pushcopy</b> modifier in that it\nmakes current a copy of the topmost stack pattern, leaving the original still\non the stack.\n</p>\n<h2><a name=\"SEC19\" href=\"#TOC1\">SEE ALSO</a></h2>\n<p>\n<b>pcre2</b>(3), <b>pcre2api</b>(3), <b>pcre2callout</b>(3),\n<b>pcre2jit</b>, <b>pcre2matching</b>(3), <b>pcre2partial</b>(d),\n<b>pcre2pattern</b>(3), <b>pcre2serialize</b>(3).\n</p>\n<h2><a name=\"SEC20\" href=\"#TOC1\">AUTHOR</a></h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2><a name=\"SEC21\" href=\"#TOC1\">REVISION</a></h2>\n<p>\nLast updated: 12 October 2025\n<br>\nCopyright &copy; 1997-2024 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/html/pcre2unicode.html",
    "content": "<html>\n<head>\n<title>pcre2unicode specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>pcre2unicode man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\n<h2>\nUNICODE AND UTF SUPPORT\n</h2>\n<p>\nPCRE2 is normally built with Unicode support, though if you do not need it, you\ncan build it without, in which case the library will be smaller. With Unicode\nsupport, PCRE2 has knowledge of Unicode character properties and can process\nstrings of text in UTF-8, UTF-16, and UTF-32 format (depending on the code unit\nwidth), but this is not the default. Unless specifically requested, PCRE2\ntreats each code unit in a string as one character.\n</p>\n<p>\nThere are two ways of telling PCRE2 to switch to UTF mode, where characters may\nconsist of more than one code unit and the range of values is constrained. The\nprogram can call\n<a href=\"pcre2_compile.html\"><b>pcre2_compile()</b></a>\nwith the PCRE2_UTF option, or the pattern may start with the sequence (*UTF).\nHowever, the latter facility can be locked out by the PCRE2_NEVER_UTF option.\nThat is, the programmer can prevent the supplier of the pattern from switching\nto UTF mode.\n</p>\n<p>\nNote that the PCRE2_MATCH_INVALID_UTF option (see\n<a href=\"#matchinvalid\">below)</a>\nforces PCRE2_UTF to be set.\n</p>\n<p>\nIn UTF mode, both the pattern and any subject strings that are matched against\nit are treated as UTF strings instead of strings of individual one-code-unit\ncharacters. There are also some other changes to the way characters are\nhandled, as documented below.\n</p>\n<h2>\nUNICODE PROPERTY SUPPORT\n</h2>\n<p>\nWhen PCRE2 is built with Unicode support, the escape sequences \\p{..},\n\\P{..}, and \\X can be used. This is not dependent on the PCRE2_UTF setting.\nThe Unicode properties that can be tested are a subset of those that Perl\nsupports. Currently they are limited to the general category properties such as\nLu for an upper case letter or Nd for a decimal number, the derived properties\nAny and Lc (synonym L&), the Unicode script names such as Arabic or Han,\nBidi_Class, Bidi_Control, and a few binary properties.\n</p>\n<p>\nThe full lists are given in the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\nand\n<a href=\"pcre2syntax.html\"><b>pcre2syntax</b></a>\ndocumentation. In general, only the short names for properties are supported.\nFor example, \\p{L} matches a letter. Its longer synonym, \\p{Letter}, is not\nsupported. Furthermore, in Perl, many properties may optionally be prefixed by\n\"Is\", for compatibility with Perl 5.6. PCRE2 does not support this.\n</p>\n<h2>\nWIDE CHARACTERS AND UTF MODES\n</h2>\n<p>\nCode points less than 256 can be specified in patterns by either braced or\nunbraced hexadecimal escape sequences (for example, \\x{b3} or \\xb3). Larger\nvalues have to use braced sequences. Unbraced octal code points up to \\777 are\nalso recognized; larger ones can be coded using \\o{...}.\n</p>\n<p>\nThe escape sequence \\N{U+&#60;hex digits&#62;} is recognized as another way of\nspecifying a Unicode character by code point in a UTF mode. It is not allowed\nin non-UTF mode.\n</p>\n<p>\nIn UTF mode, repeat quantifiers apply to complete UTF characters, not to\nindividual code units.\n</p>\n<p>\nIn UTF mode, the dot metacharacter matches one UTF character instead of a\nsingle code unit.\n</p>\n<p>\nIn UTF mode, capture group names are not restricted to ASCII, and may contain\nany Unicode letters and decimal digits, as well as underscore.\n</p>\n<p>\nThe escape sequence \\C can be used to match a single code unit in UTF mode,\nbut its use can lead to some strange effects because it breaks up multi-unit\ncharacters (see the description of \\C in the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation). For this reason, there is a build-time option that disables\nsupport for \\C completely. There is also a less draconian compile-time option\nfor locking out the use of \\C when a pattern is compiled.\n</p>\n<p>\nThe use of \\C is not supported by the alternative matching function\n<b>pcre2_dfa_match()</b> when in UTF-8 or UTF-16 mode, that is, when a character\nmay consist of more than one code unit. The use of \\C in these modes provokes\na match-time error. Also, the JIT optimization does not support \\C in these\nmodes. If JIT optimization is requested for a UTF-8 or UTF-16 pattern that\ncontains \\C, it will not succeed, and so when <b>pcre2_match()</b> is called,\nthe matching will be carried out by the interpretive function.\n</p>\n<p>\nThe character escapes \\b, \\B, \\d, \\D, \\s, \\S, \\w, and \\W correctly test\ncharacters of any code value, but, by default, the characters that PCRE2\nrecognizes as digits, spaces, or word characters remain the same set as in\nnon-UTF mode, all with code points less than 256. This remains true even when\nPCRE2 is built to include Unicode support, because to do otherwise would slow\ndown matching in many common cases. Note that this also applies to \\b\nand \\B, because they are defined in terms of \\w and \\W. If you want\nto test for a wider sense of, say, \"digit\", you can use explicit Unicode\nproperty tests such as \\p{Nd}. Alternatively, if you set the PCRE2_UCP option,\nthe way that the character escapes work is changed so that Unicode properties\nare used to determine which characters match, though there are some options\nthat suppress this for individual escapes. For details see the section on\n<a href=\"pcre2pattern.html#genericchartypes\">generic character types</a>\nin the\n<a href=\"pcre2pattern.html\"><b>pcre2pattern</b></a>\ndocumentation.\n</p>\n<p>\nLike the escapes, characters that match the POSIX named character classes are\nall low-valued characters unless the PCRE2_UCP option is set, but there is an\noption to override this.\n</p>\n<p>\nIn contrast to the character escapes and character classes, the special\nhorizontal and vertical white space escapes (\\h, \\H, \\v, and \\V) do match\nall the appropriate Unicode characters, whether or not PCRE2_UCP is set.\n</p>\n<h2>\nUNICODE CASE-EQUIVALENCE\n</h2>\n<p>\nIf either PCRE2_UTF or PCRE2_UCP is set, upper/lower case processing makes use\nof Unicode properties except for characters whose code points are less than 128\nand that have at most two case-equivalent values. For these, a direct table\nlookup is used for speed. A few Unicode characters such as Greek sigma have\nmore than two code points that are case-equivalent, and these are treated\nspecially. Setting PCRE2_UCP without PCRE2_UTF allows Unicode-style case\nprocessing for non-UTF character encodings such as UCS-2.\n</p>\n<p>\nThere are two ASCII characters (S and K) that, in addition to their ASCII lower\ncase equivalents, have a non-ASCII one as well (long S and Kelvin sign).\nRecognition of these non-ASCII characters as case-equivalent to their ASCII\ncounterparts can be disabled by setting the PCRE2_EXTRA_CASELESS_RESTRICT\noption. When this is set, all characters in a case equivalence must either be\nASCII or non-ASCII; there can be no mixing.\n<pre>\n    Without PCRE2_EXTRA_CASELESS_RESTRICT:\n      'k' = 'K' = U+212A (Kelvin sign)\n      's' = 'S' = U+017F (long S)\n    With PCRE2_EXTRA_CASELESS_RESTRICT:\n      'k' = 'K'\n      U+212A (Kelvin sign)  only case-equivalent to itself\n      's' = 'S'\n      U+017F (long S)       only case-equivalent to itself\n</pre>\n</p>\n<p>\nOne language family, Turkish and Azeri, has its own case-insensitivity rules,\nwhich can be selected by setting PCRE2_EXTRA_TURKISH_CASING. This alters the\nbehaviour of the 'i', 'I', U+0130 (capital I with dot above), and U+0131\n(small dotless i) characters.\n<pre>\n    Without PCRE2_EXTRA_TURKISH_CASING:\n      'i' = 'I'\n      U+0130 (capital I with dot above)  only case-equivalent to itself\n      U+0131 (small dotless i)           only case-equivalent to itself\n    With PCRE2_EXTRA_TURKISH_CASING:\n      'i' = U+0130 (capital I with dot above)\n      U+0131 (small dotless i) = 'I'\n</pre>\n</p>\n<p>\nIt is not allowed to specify both PCRE2_EXTRA_CASELESS_RESTRICT and\nPCRE2_EXTRA_TURKISH_CASING together.\n</p>\n<p>\nFrom release 10.45 the Unicode letter properties Lu (upper case), Ll (lower\ncase), and Lt (title case) are all treated as Lc (cased letter) when caseless\nmatching is set by the PCRE2_CASELESS option or (?i) within the pattern.\n<a name=\"scriptruns\"></a></p>\n<h2>\nSCRIPT RUNS\n</h2>\n<p>\nThe pattern constructs (*script_run:...) and (*atomic_script_run:...), with\nsynonyms (*sr:...) and (*asr:...), verify that the string matched within the\nparentheses is a script run. In concept, a script run is a sequence of\ncharacters that are all from the same Unicode script. However, because some\nscripts are commonly used together, and because some diacritical and other\nmarks are used with multiple scripts, it is not that simple.\n</p>\n<p>\nEvery Unicode character has a Script property, mostly with a value\ncorresponding to the name of a script, such as Latin, Greek, or Cyrillic. There\nare also three special values:\n</p>\n<p>\n\"Unknown\" is used for code points that have not been assigned, and also for the\nsurrogate code points. In the PCRE2 32-bit library, characters whose code\npoints are greater than the Unicode maximum (U+10FFFF), which are accessible\nonly in non-UTF mode, are assigned the Unknown script.\n</p>\n<p>\n\"Common\" is used for characters that are used with many scripts. These include\npunctuation, emoji, mathematical, musical, and currency symbols, and the ASCII\ndigits 0 to 9.\n</p>\n<p>\n\"Inherited\" is used for characters such as diacritical marks that modify a\nprevious character. These are considered to take on the script of the character\nthat they modify.\n</p>\n<p>\nSome Inherited characters are used with many scripts, but many of them are only\nnormally used with a small number of scripts. For example, U+102E0 (Coptic\nEpact thousands mark) is used only with Arabic and Coptic. In order to make it\npossible to check this, a Unicode property called Script Extension exists. Its\nvalue is a list of scripts that apply to the character. For the majority of\ncharacters, the list contains just one script, the same one as the Script\nproperty. However, for characters such as U+102E0 more than one Script is\nlisted. There are also some Common characters that have a single, non-Common\nscript in their Script Extension list.\n</p>\n<p>\nThe next section describes the basic rules for deciding whether a given string\nof characters is a script run. Note, however, that there are some special cases\ninvolving the Chinese Han script, and an additional constraint for decimal\ndigits. These are covered in subsequent sections.\n</p>\n<h3>\nBasic script run rules\n</h3>\n<p>\nA string that is less than two characters long is a script run. This is the\nonly case in which an Unknown character can be part of a script run. Longer\nstrings are checked using only the Script Extensions property, not the basic\nScript property.\n</p>\n<p>\nIf a character's Script Extension property is the single value \"Inherited\", it\nis always accepted as part of a script run. This is also true for the property\n\"Common\", subject to the checking of decimal digits described below. All the\nremaining characters in a script run must have at least one script in common in\ntheir Script Extension lists. In set-theoretic terminology, the intersection of\nall the sets of scripts must not be empty.\n</p>\n<p>\nA simple example is an Internet name such as \"google.com\". The letters are all\nin the Latin script, and the dot is Common, so this string is a script run.\nHowever, the Cyrillic letter \"o\" looks exactly the same as the Latin \"o\"; a\nstring that looks the same, but with Cyrillic \"o\"s is not a script run.\n</p>\n<p>\nMore interesting examples involve characters with more than one script in their\nScript Extension. Consider the following characters:\n<pre>\n  U+060C  Arabic comma\n  U+06D4  Arabic full stop\n</pre>\nThe first has the Script Extension list Arabic, Hanifi Rohingya, Syriac, and\nThaana; the second has just Arabic and Hanifi Rohingya. Both of them could\nappear in script runs of either Arabic or Hanifi Rohingya. The first could also\nappear in Syriac or Thaana script runs, but the second could not.\n</p>\n<h3>\nThe Chinese Han script\n</h3>\n<p>\nThe Chinese Han script is commonly used in conjunction with other scripts for\nwriting certain languages. Japanese uses the Hiragana and Katakana scripts\ntogether with Han; Korean uses Hangul and Han; Taiwanese Mandarin uses Bopomofo\nand Han. These three combinations are treated as special cases when checking\nscript runs and are, in effect, \"virtual scripts\". Thus, a script run may\ncontain a mixture of Hiragana, Katakana, and Han, or a mixture of Hangul and\nHan, or a mixture of Bopomofo and Han, but not, for example, a mixture of\nHangul and Bopomofo and Han. PCRE2 (like Perl) follows Unicode's Technical\nStandard 39 (\"Unicode Security Mechanisms\", http://unicode.org/reports/tr39/)\nin allowing such mixtures.\n</p>\n<h3>\nDecimal digits\n</h3>\n<p>\nUnicode contains many sets of 10 decimal digits in different scripts, and some\nscripts (including the Common script) contain more than one set. Some of these\ndecimal digits them are visually indistinguishable from the common ASCII\ndigits. In addition to the script checking described above, if a script run\ncontains any decimal digits, they must all come from the same set of 10\nadjacent characters.\n</p>\n<h2>\nVALIDITY OF UTF STRINGS\n</h2>\n<p>\nWhen the PCRE2_UTF option is set, the strings passed as patterns and subjects\nare (by default) checked for validity on entry to the relevant functions. If an\ninvalid UTF string is passed, a negative error code is returned. The code unit\noffset to the offending character can be extracted from the match data block by\ncalling <b>pcre2_get_startchar()</b>, which is used for this purpose after a UTF\nerror.\n</p>\n<p>\nIn some situations, you may already know that your strings are valid, and\ntherefore want to skip these checks in order to improve performance, for\nexample in the case of a long subject string that is being scanned repeatedly.\nIf you set the PCRE2_NO_UTF_CHECK option at compile time or at match time,\nPCRE2 assumes that the pattern or subject it is given (respectively) contains\nonly valid UTF code unit sequences.\n</p>\n<p>\nIf you pass an invalid UTF string when PCRE2_NO_UTF_CHECK is set, the result\nis undefined and your program may crash or loop indefinitely or give incorrect\nresults. There is, however, one mode of matching that can handle invalid UTF\nsubject strings. This is enabled by passing PCRE2_MATCH_INVALID_UTF to\n<b>pcre2_compile()</b> and is discussed below in the next section. The rest of\nthis section covers the case when PCRE2_MATCH_INVALID_UTF is not set.\n</p>\n<p>\nPassing PCRE2_NO_UTF_CHECK to <b>pcre2_compile()</b> just disables the UTF check\nfor the pattern; it does not also apply to subject strings. If you want to\ndisable the check for a subject string you must pass this same option to\n<b>pcre2_match()</b> or <b>pcre2_dfa_match()</b>.\n</p>\n<p>\nUTF-16 and UTF-32 strings can indicate their endianness by special code knows\nas a byte-order mark (BOM). The PCRE2 functions do not handle this, expecting\nstrings to be in host byte order.\n</p>\n<p>\nUnless PCRE2_NO_UTF_CHECK is set, a UTF string is checked before any other\nprocessing takes place. In the case of <b>pcre2_match()</b> and\n<b>pcre2_dfa_match()</b> calls with a non-zero starting offset, the check is\napplied only to that part of the subject that could be inspected during\nmatching, and there is a check that the starting offset points to the first\ncode unit of a character or to the end of the subject. If there are no\nlookbehind assertions in the pattern, the check starts at the starting offset.\nOtherwise, it starts at the length of the longest lookbehind before the\nstarting offset, or at the start of the subject if there are not that many\ncharacters before the starting offset. Note that the sequences \\b and \\B are\none-character lookbehinds.\n</p>\n<p>\nIn addition to checking the format of the string, there is a check to ensure\nthat all code points lie in the range U+0 to U+10FFFF, excluding the surrogate\narea. The so-called \"non-character\" code points are not excluded because\nUnicode corrigendum #9 makes it clear that they should not be.\n</p>\n<p>\nCharacters in the \"Surrogate Area\" of Unicode are reserved for use by UTF-16,\nwhere they are used in pairs to encode code points with values greater than\n0xFFFF. The code points that are encoded by UTF-16 pairs are available\nindependently in the UTF-8 and UTF-32 encodings. (In other words, the whole\nsurrogate thing is a fudge for UTF-16 which unfortunately messes up UTF-8 and\nUTF-32.)\n</p>\n<p>\nSetting PCRE2_NO_UTF_CHECK at compile time does not disable the error that is\ngiven if an escape sequence for an invalid Unicode code point is encountered in\nthe pattern. If you want to allow escape sequences such as \\x{d800} (a\nsurrogate code point) you can set the PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES extra\noption. However, this is possible only in UTF-8 and UTF-32 modes, because these\nvalues are not representable in UTF-16.\n<a name=\"utf8strings\"></a></p>\n<h3>\nErrors in UTF-8 strings\n</h3>\n<p>\nThe following negative error codes are given for invalid UTF-8 strings:\n<pre>\n  PCRE2_ERROR_UTF8_ERR1\n  PCRE2_ERROR_UTF8_ERR2\n  PCRE2_ERROR_UTF8_ERR3\n  PCRE2_ERROR_UTF8_ERR4\n  PCRE2_ERROR_UTF8_ERR5\n</pre>\nThe string ends with a truncated UTF-8 character; the code specifies how many\nbytes are missing (1 to 5). Although RFC 3629 restricts UTF-8 characters to be\nno longer than 4 bytes, the encoding scheme (originally defined by RFC 2279)\nallows for up to 6 bytes, and this is checked first; hence the possibility of\n4 or 5 missing bytes.\n<pre>\n  PCRE2_ERROR_UTF8_ERR6\n  PCRE2_ERROR_UTF8_ERR7\n  PCRE2_ERROR_UTF8_ERR8\n  PCRE2_ERROR_UTF8_ERR9\n  PCRE2_ERROR_UTF8_ERR10\n</pre>\nThe two most significant bits of the 2nd, 3rd, 4th, 5th, or 6th byte of the\ncharacter do not have the binary value 0b10 (that is, either the most\nsignificant bit is 0, or the next bit is 1).\n<pre>\n  PCRE2_ERROR_UTF8_ERR11\n  PCRE2_ERROR_UTF8_ERR12\n</pre>\nA character that is valid by the RFC 2279 rules is either 5 or 6 bytes long;\nthese code points are excluded by RFC 3629.\n<pre>\n  PCRE2_ERROR_UTF8_ERR13\n</pre>\nA 4-byte character has a value greater than 0x10ffff; these code points are\nexcluded by RFC 3629.\n<pre>\n  PCRE2_ERROR_UTF8_ERR14\n</pre>\nA 3-byte character has a value in the range 0xd800 to 0xdfff; this range of\ncode points are reserved by RFC 3629 for use with UTF-16, and so are excluded\nfrom UTF-8.\n<pre>\n  PCRE2_ERROR_UTF8_ERR15\n  PCRE2_ERROR_UTF8_ERR16\n  PCRE2_ERROR_UTF8_ERR17\n  PCRE2_ERROR_UTF8_ERR18\n  PCRE2_ERROR_UTF8_ERR19\n</pre>\nA 2-, 3-, 4-, 5-, or 6-byte character is \"overlong\", that is, it codes for a\nvalue that can be represented by fewer bytes, which is invalid. For example,\nthe two bytes 0xc0, 0xae give the value 0x2e, whose correct coding uses just\none byte.\n<pre>\n  PCRE2_ERROR_UTF8_ERR20\n</pre>\nThe two most significant bits of the first byte of a character have the binary\nvalue 0b10 (that is, the most significant bit is 1 and the second is 0). Such a\nbyte can only validly occur as the second or subsequent byte of a multi-byte\ncharacter.\n<pre>\n  PCRE2_ERROR_UTF8_ERR21\n</pre>\nThe first byte of a character has the value 0xfe or 0xff. These values can\nnever occur in a valid UTF-8 string.\n<a name=\"utf16strings\"></a></p>\n<h3>\nErrors in UTF-16 strings\n</h3>\n<p>\nThe following negative error codes are given for invalid UTF-16 strings:\n<pre>\n  PCRE2_ERROR_UTF16_ERR1  Missing low surrogate at end of string\n  PCRE2_ERROR_UTF16_ERR2  Invalid low surrogate follows high surrogate\n  PCRE2_ERROR_UTF16_ERR3  Isolated low surrogate\n\n<a name=\"utf32strings\"></a></pre>\n</p>\n<h3>\nErrors in UTF-32 strings\n</h3>\n<p>\nThe following negative error codes are given for invalid UTF-32 strings:\n<pre>\n  PCRE2_ERROR_UTF32_ERR1  Surrogate character (0xd800 to 0xdfff)\n  PCRE2_ERROR_UTF32_ERR2  Code point is greater than 0x10ffff\n\n<a name=\"matchinvalid\"></a></pre>\n</p>\n<h2>\nMATCHING IN INVALID UTF STRINGS\n</h2>\n<p>\nYou can run pattern matches on subject strings that may contain invalid UTF\nsequences if you call <b>pcre2_compile()</b> with the PCRE2_MATCH_INVALID_UTF\noption. This is supported by <b>pcre2_match()</b>, including JIT matching, but\nnot by <b>pcre2_dfa_match()</b>. When PCRE2_MATCH_INVALID_UTF is set, it forces\nPCRE2_UTF to be set as well. Note, however, that the pattern itself must be a\nvalid UTF string.\n</p>\n<p>\nIf you do not set PCRE2_MATCH_INVALID_UTF when calling <b>pcre2_compile</b>, and\nyou are not certain that your subject strings are valid UTF sequences, you\nshould not make use of the JIT \"fast path\" function <b>pcre2_jit_match()</b>\nbecause it bypasses sanity checks, including the one for UTF validity. An\ninvalid string may cause undefined behaviour, including looping, crashing, or\ngiving the wrong answer.\n</p>\n<p>\nSetting PCRE2_MATCH_INVALID_UTF does not affect what <b>pcre2_compile()</b>\ngenerates, but if <b>pcre2_jit_compile()</b> is subsequently called, it does\ngenerate different code. If JIT is not used, the option affects the behaviour\nof the interpretive code in <b>pcre2_match()</b>. When PCRE2_MATCH_INVALID_UTF\nis set at compile time, PCRE2_NO_UTF_CHECK is ignored at match time.\n</p>\n<p>\nIn this mode, an invalid code unit sequence in the subject never matches any\npattern item. It does not match dot, it does not match \\p{Any}, it does not\neven match negative items such as [^X]. A lookbehind assertion fails if it\nencounters an invalid sequence while moving the current point backwards. In\nother words, an invalid UTF code unit sequence acts as a barrier which no match\ncan cross.\n</p>\n<p>\nYou can also think of this as the subject being split up into fragments of\nvalid UTF, delimited internally by invalid code unit sequences. The pattern is\nmatched fragment by fragment. The result of a successful match, however, is\ngiven as code unit offsets in the entire subject string in the usual way. There\nare a few points to consider:\n</p>\n<p>\nThe internal boundaries are not interpreted as the beginnings or ends of lines\nand so do not match circumflex or dollar characters in the pattern.\n</p>\n<p>\nIf <b>pcre2_match()</b> is called with an offset that points to an invalid\nUTF-sequence, that sequence is skipped, and the match starts at the next valid\nUTF character, or the end of the subject.\n</p>\n<p>\nAt internal fragment boundaries, \\b and \\B behave in the same way as at the\nbeginning and end of the subject. For example, a sequence such as \\bWORD\\b\nwould match an instance of WORD that is surrounded by invalid UTF code units.\n</p>\n<p>\nUsing PCRE2_MATCH_INVALID_UTF, an application can run matches on arbitrary\ndata, knowing that any matched strings that are returned are valid UTF. This\ncan be useful when searching for UTF text in executable or other binary files.\n</p>\n<p>\nNote, however, that the 16-bit and 32-bit PCRE2 libraries process strings as\nsequences of uint16_t or uint32_t code points. They cannot find valid UTF\nsequences within an arbitrary string of bytes unless such sequences are\nsuitably aligned.\n</p>\n<h2>\nAUTHOR\n</h2>\n<p>\nPhilip Hazel\n<br>\nRetired from University Computing Service\n<br>\nCambridge, England.\n<br>\n</p>\n<h2>\nREVISION\n</h2>\n<p>\nLast updated: 27 November 2024\n<br>\nCopyright &copy; 1997-2024 University of Cambridge.\n<br>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n"
  },
  {
    "path": "doc/index.html.src",
    "content": "<html>\n<!-- This is a manually maintained file that is the root of the HTML version of\n     the PCRE2 documentation. When the HTML documents are built from the man\n     page versions, the entire doc/html directory is emptied, this file is then\n     copied into doc/html/index.html, and the remaining files therein are\n     created by the 132html script.\n-->\n<head>\n<title>PCRE2 specification</title>\n<style>\ntable, caption, tbody, tfoot, thead, tr, th, td {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  font: inherit;\n  vertical-align: baseline;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd {\n  padding: 4px 16px 0 0;\n}\n</style>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>Perl-compatible Regular Expressions (revised API: PCRE2)</h1>\n<p>\nThe HTML documentation for PCRE2 consists of a number of pages that are listed\nbelow in alphabetical order. If you are new to PCRE2, please read the first one\nfirst.\n</p>\n\n<table>\n<tr><td><a href=\"pcre2.html\">pcre2</a></td>\n    <td>Introductory page</td></tr>\n\n<tr><td><a href=\"pcre2-config.html\">pcre2-config</a></td>\n    <td>Information about the installation configuration</td></tr>\n\n<tr><td><a href=\"pcre2api.html\">pcre2api</a></td>\n    <td>PCRE2's native API</td></tr>\n\n<tr><td><a href=\"pcre2build.html\">pcre2build</a></td>\n    <td>Building PCRE2</td></tr>\n\n<tr><td><a href=\"pcre2callout.html\">pcre2callout</a></td>\n    <td>The <i>callout</i> facility</td></tr>\n\n<tr><td><a href=\"pcre2compat.html\">pcre2compat</a></td>\n    <td>Compability with Perl</td></tr>\n\n<tr><td><a href=\"pcre2convert.html\">pcre2convert</a></td>\n    <td>Experimental foreign pattern conversion functions</td></tr>\n\n<tr><td><a href=\"pcre2demo.html\">pcre2demo</a></td>\n    <td>A demonstration C program that uses the PCRE2 library</td></tr>\n\n<tr><td><a href=\"pcre2grep.html\">pcre2grep</a></td>\n    <td>The <b>pcre2grep</b> command</td></tr>\n\n<tr><td><a href=\"pcre2jit.html\">pcre2jit</a></td>\n    <td>Discussion of the just-in-time optimization support</td></tr>\n\n<tr><td><a href=\"pcre2limits.html\">pcre2limits</a></td>\n    <td>Details of size and other limits</td></tr>\n\n<tr><td><a href=\"pcre2matching.html\">pcre2matching</a></td>\n    <td>Discussion of the two matching algorithms</td></tr>\n\n<tr><td><a href=\"pcre2partial.html\">pcre2partial</a></td>\n    <td>Using PCRE2 for partial matching</td></tr>\n\n<tr><td><a href=\"pcre2pattern.html\">pcre2pattern</a></td>\n    <td>Specification of the regular expressions supported by PCRE2</td></tr>\n\n<tr><td><a href=\"pcre2perform.html\">pcre2perform</a></td>\n    <td>Some comments on performance</td></tr>\n\n<tr><td><a href=\"pcre2posix.html\">pcre2posix</a></td>\n    <td>The POSIX API to the PCRE2 8-bit library</td></tr>\n\n<tr><td><a href=\"pcre2sample.html\">pcre2sample</a></td>\n    <td>Discussion of the pcre2demo program</td></tr>\n\n<tr><td><a href=\"pcre2serialize.html\">pcre2serialize</a></td>\n    <td>Serializing functions for saving precompiled patterns</td></tr>\n\n<tr><td><a href=\"pcre2syntax.html\">pcre2syntax</a></td>\n    <td>Syntax quick-reference summary</td></tr>\n\n<tr><td><a href=\"pcre2test.html\">pcre2test</a></td>\n    <td>The <b>pcre2test</b> command for testing PCRE2</td></tr>\n\n<tr><td><a href=\"pcre2unicode.html\">pcre2unicode</a></td>\n    <td>Discussion of Unicode and UTF-8/UTF-16/UTF-32 support</td></tr>\n</table>\n\n<p>\nThere are also individual pages that summarize the interface for each function\nin the library.\n</p>\n\n<table>\n\n<tr><td><a href=\"pcre2_callout_enumerate.html\">pcre2_callout_enumerate</a></td>\n    <td>Enumerate callouts in a compiled pattern</td></tr>\n\n<tr><td><a href=\"pcre2_code_copy.html\">pcre2_code_copy</a></td>\n    <td>Copy a compiled pattern</td></tr>\n\n<tr><td><a href=\"pcre2_code_copy_with_tables.html\">pcre2_code_copy_with_tables</a></td>\n    <td>Copy a compiled pattern and its character tables</td></tr>\n\n<tr><td><a href=\"pcre2_code_free.html\">pcre2_code_free</a></td>\n    <td>Free a compiled pattern</td></tr>\n\n<tr><td><a href=\"pcre2_compile.html\">pcre2_compile</a></td>\n    <td>Compile a regular expression pattern</td></tr>\n\n<tr><td><a href=\"pcre2_compile_context_copy.html\">pcre2_compile_context_copy</a></td>\n    <td>Copy a compile context</td></tr>\n\n<tr><td><a href=\"pcre2_compile_context_create.html\">pcre2_compile_context_create</a></td>\n    <td>Create a compile context</td></tr>\n\n<tr><td><a href=\"pcre2_compile_context_free.html\">pcre2_compile_context_free</a></td>\n    <td>Free a compile context</td></tr>\n\n<tr><td><a href=\"pcre2_config.html\">pcre2_config</a></td>\n    <td>Show build-time related configuration options</td></tr>\n\n<tr><td><a href=\"pcre2_convert_context_copy.html\">pcre2_convert_context_copy</a></td>\n    <td>Copy a convert context</td></tr>\n\n<tr><td><a href=\"pcre2_convert_context_create.html\">pcre2_convert_context_create</a></td>\n    <td>Create a convert context</td></tr>\n\n<tr><td><a href=\"pcre2_convert_context_free.html\">pcre2_convert_context_free</a></td>\n    <td>Free a convert context</td></tr>\n\n<tr><td><a href=\"pcre2_converted_pattern_free.html\">pcre2_converted_pattern_free</a></td>\n    <td>Free converted foreign pattern</td></tr>\n\n<tr><td><a href=\"pcre2_dfa_match.html\">pcre2_dfa_match</a></td>\n    <td>Match a compiled pattern to a subject string\n    (DFA algorithm; <i>not</i> Perl compatible)</td></tr>\n\n<tr><td><a href=\"pcre2_general_context_copy.html\">pcre2_general_context_copy</a></td>\n    <td>Copy a general context</td></tr>\n\n<tr><td><a href=\"pcre2_general_context_create.html\">pcre2_general_context_create</a></td>\n    <td>Create a general context</td></tr>\n\n<tr><td><a href=\"pcre2_general_context_free.html\">pcre2_general_context_free</a></td>\n    <td>Free a general context</td></tr>\n\n<tr><td><a href=\"pcre2_get_error_message.html\">pcre2_get_error_message</a></td>\n    <td>Get textual error message for error number</td></tr>\n\n<tr><td><a href=\"pcre2_get_mark.html\">pcre2_get_mark</a></td>\n    <td>Get a (*MARK) name</td></tr>\n\n<tr><td><a href=\"pcre2_get_match_data_size.html\">pcre2_get_match_data_size</a></td>\n    <td>Get the size of a match data block</td></tr>\n\n<tr><td><a href=\"pcre2_get_ovector_count.html\">pcre2_get_ovector_count</a></td>\n    <td>Get the ovector count</td></tr>\n\n<tr><td><a href=\"pcre2_get_ovector_pointer.html\">pcre2_get_ovector_pointer</a></td>\n    <td>Get a pointer to the ovector</td></tr>\n\n<tr><td><a href=\"pcre2_get_startchar.html\">pcre2_get_startchar</a></td>\n    <td>Get the starting character offset</td></tr>\n\n<tr><td><a href=\"pcre2_jit_compile.html\">pcre2_jit_compile</a></td>\n    <td>Process a compiled pattern with the JIT compiler</td></tr>\n\n<tr><td><a href=\"pcre2_jit_free_unused_memory.html\">pcre2_jit_free_unused_memory</a></td>\n    <td>Free unused JIT memory</td></tr>\n\n<tr><td><a href=\"pcre2_jit_match.html\">pcre2_jit_match</a></td>\n    <td>Fast path interface to JIT matching</td></tr>\n\n<tr><td><a href=\"pcre2_jit_stack_assign.html\">pcre2_jit_stack_assign</a></td>\n    <td>Assign stack for JIT matching</td></tr>\n\n<tr><td><a href=\"pcre2_jit_stack_create.html\">pcre2_jit_stack_create</a></td>\n    <td>Create a stack for JIT matching</td></tr>\n\n<tr><td><a href=\"pcre2_jit_stack_free.html\">pcre2_jit_stack_free</a></td>\n    <td>Free a JIT matching stack</td></tr>\n\n<tr><td><a href=\"pcre2_maketables.html\">pcre2_maketables</a></td>\n    <td>Build character tables in current locale</td></tr>\n\n<tr><td><a href=\"pcre2_maketables_free.html\">pcre2_maketables_free</a></td>\n    <td>Free character tables</td></tr>\n\n<tr><td><a href=\"pcre2_match.html\">pcre2_match</a></td>\n    <td>Match a compiled pattern to a subject string\n    (Perl compatible)</td></tr>\n\n<tr><td><a href=\"pcre2_match_context_copy.html\">pcre2_match_context_copy</a></td>\n    <td>Copy a match context</td></tr>\n\n<tr><td><a href=\"pcre2_match_context_create.html\">pcre2_match_context_create</a></td>\n    <td>Create a match context</td></tr>\n\n<tr><td><a href=\"pcre2_match_context_free.html\">pcre2_match_context_free</a></td>\n    <td>Free a match context</td></tr>\n\n<tr><td><a href=\"pcre2_match_data_create.html\">pcre2_match_data_create</a></td>\n    <td>Create a match data block</td></tr>\n\n<tr><td><a href=\"pcre2_match_data_create_from_pattern.html\">pcre2_match_data_create_from_pattern</a></td>\n    <td>Create a match data block getting size from pattern</td></tr>\n\n<tr><td><a href=\"pcre2_match_data_free.html\">pcre2_match_data_free</a></td>\n    <td>Free a match data block</td></tr>\n\n<tr><td><a href=\"pcre2_next_match.html\">pcre2_next_match</a></td>\n    <td>Get the match parameters for the next match</td></tr>\n\n<tr><td><a href=\"pcre2_pattern_convert.html\">pcre2_pattern_convert</a></td>\n    <td>Experimental foreign pattern converter</td></tr>\n\n<tr><td><a href=\"pcre2_pattern_info.html\">pcre2_pattern_info</a></td>\n    <td>Extract information about a pattern</td></tr>\n\n<tr><td><a href=\"pcre2_serialize_decode.html\">pcre2_serialize_decode</a></td>\n    <td>Decode serialized compiled patterns</td></tr>\n\n<tr><td><a href=\"pcre2_serialize_encode.html\">pcre2_serialize_encode</a></td>\n    <td>Serialize compiled patterns for save/restore</td></tr>\n\n<tr><td><a href=\"pcre2_serialize_free.html\">pcre2_serialize_free</a></td>\n    <td>Free serialized compiled patterns</td></tr>\n\n<tr><td><a href=\"pcre2_serialize_get_number_of_codes.html\">pcre2_serialize_get_number_of_codes</a></td>\n    <td>Get number of serialized compiled patterns</td></tr>\n\n<tr><td><a href=\"pcre2_set_bsr.html\">pcre2_set_bsr</a></td>\n    <td>Set \\R convention</td></tr>\n\n<tr><td><a href=\"pcre2_set_callout.html\">pcre2_set_callout</a></td>\n    <td>Set up a callout function</td></tr>\n\n<tr><td><a href=\"pcre2_set_character_tables.html\">pcre2_set_character_tables</a></td>\n    <td>Set character tables</td></tr>\n\n<tr><td><a href=\"pcre2_set_compile_extra_options.html\">pcre2_set_compile_extra_options</a></td>\n    <td>Set compile time extra options</td></tr>\n\n<tr><td><a href=\"pcre2_set_compile_recursion_guard.html\">pcre2_set_compile_recursion_guard</a></td>\n    <td>Set up a compile recursion guard function</td></tr>\n\n<tr><td><a href=\"pcre2_set_depth_limit.html\">pcre2_set_depth_limit</a></td>\n    <td>Set the match backtracking depth limit</td></tr>\n\n<tr><td><a href=\"pcre2_set_glob_escape.html\">pcre2_set_glob_escape</a></td>\n    <td>Set glob escape character</td></tr>\n\n<tr><td><a href=\"pcre2_set_glob_separator.html\">pcre2_set_glob_separator</a></td>\n    <td>Set glob separator character</td></tr>\n\n<tr><td><a href=\"pcre2_set_heap_limit.html\">pcre2_set_heap_limit</a></td>\n    <td>Set the match backtracking heap limit</td></tr>\n\n<tr><td><a href=\"pcre2_set_match_limit.html\">pcre2_set_match_limit</a></td>\n    <td>Set the match limit</td></tr>\n\n<tr><td><a href=\"pcre2_set_max_pattern_compiled_length.html\">pcre2_set_max_pattern_compiled_length</a></td>\n    <td>Set the maximum length of a compiled pattern</td></tr>\n\n<tr><td><a href=\"pcre2_set_max_pattern_length.html\">pcre2_set_max_pattern_length</a></td>\n    <td>Set the maximum length of a pattern</td></tr>\n\n<tr><td><a href=\"pcre2_set_max_varlookbehind.html\">pcre2_set_max_varlookbehind</a></td>\n    <td>Set the maximum match length for a variable-length lookbehind</td></tr>\n\n<tr><td><a href=\"pcre2_set_newline.html\">pcre2_set_newline</a></td>\n    <td>Set the newline convention</td></tr>\n\n<tr><td><a href=\"pcre2_set_offset_limit.html\">pcre2_set_offset_limit</a></td>\n    <td>Set the offset limit</td></tr>\n\n<tr><td><a href=\"pcre2_set_optimize.html\">pcre2_set_optimize</a></td>\n    <td>Set an optimization directive</td></tr>\n\n<tr><td><a href=\"pcre2_set_parens_nest_limit.html\">pcre2_set_parens_nest_limit</a></td>\n    <td>Set the parentheses nesting limit</td></tr>\n\n<tr><td><a href=\"pcre2_set_recursion_limit.html\">pcre2_set_recursion_limit</a></td>\n    <td>Obsolete: use pcre2_set_depth_limit</td></tr>\n\n<tr><td><a href=\"pcre2_set_recursion_memory_management.html\">pcre2_set_recursion_memory_management</a></td>\n    <td>Obsolete function that (from 10.30 onwards) does nothing</td></tr>\n\n<tr><td><a href=\"pcre2_set_substitute_callout.html\">pcre2_set_substitute_callout</a></td>\n    <td>Set a substitution callout function</td></tr>\n\n<tr><td><a href=\"pcre2_set_substitute_case_callout.html\">pcre2_set_substitute_case_callout</a></td>\n    <td>Set a substitution case callout function</td></tr>\n\n<tr><td><a href=\"pcre2_substitute.html\">pcre2_substitute</a></td>\n    <td>Match a compiled pattern to a subject string and do\n    substitutions</td></tr>\n\n<tr><td><a href=\"pcre2_substring_copy_byname.html\">pcre2_substring_copy_byname</a></td>\n    <td>Extract named substring into given buffer</td></tr>\n\n<tr><td><a href=\"pcre2_substring_copy_bynumber.html\">pcre2_substring_copy_bynumber</a></td>\n    <td>Extract numbered substring into given buffer</td></tr>\n\n<tr><td><a href=\"pcre2_substring_free.html\">pcre2_substring_free</a></td>\n    <td>Free extracted substring</td></tr>\n\n<tr><td><a href=\"pcre2_substring_get_byname.html\">pcre2_substring_get_byname</a></td>\n    <td>Extract named substring into new memory</td></tr>\n\n<tr><td><a href=\"pcre2_substring_get_bynumber.html\">pcre2_substring_get_bynumber</a></td>\n    <td>Extract numbered substring into new memory</td></tr>\n\n<tr><td><a href=\"pcre2_substring_length_byname.html\">pcre2_substring_length_byname</a></td>\n    <td>Find length of named substring</td></tr>\n\n<tr><td><a href=\"pcre2_substring_length_bynumber.html\">pcre2_substring_length_bynumber</a></td>\n    <td>Find length of numbered substring</td></tr>\n\n<tr><td><a href=\"pcre2_substring_list_free.html\">pcre2_substring_list_free</a></td>\n    <td>Free list of extracted substrings</td></tr>\n\n<tr><td><a href=\"pcre2_substring_list_get.html\">pcre2_substring_list_get</a></td>\n    <td>Extract all substrings into new memory</td></tr>\n\n<tr><td><a href=\"pcre2_substring_nametable_scan.html\">pcre2_substring_nametable_scan</a></td>\n    <td>Find table entries for given string name</td></tr>\n\n<tr><td><a href=\"pcre2_substring_number_from_name.html\">pcre2_substring_number_from_name</a></td>\n    <td>Convert captured string name to number</td></tr>\n</table>\n\n</html>\n\n"
  },
  {
    "path": "doc/pcre2-config.1",
    "content": ".TH PCRE2-CONFIG 1 \"22 February 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\npcre2-config - program to return PCRE2 configuration\n.SH SYNOPSIS\n.rs\n.sp\n.nf\n.B pcre2-config  [--prefix] [--exec-prefix] [--version]\n.B \"             [--libs8] [--libs16] [--libs32] [--libs-posix]\"\n.B \"             [--cflags] [--cflags-posix]\"\n.fi\n.\n.\n.SH DESCRIPTION\n.rs\n.sp\n\\fBpcre2-config\\fP returns the configuration of the installed PCRE2 libraries\nand the options required to compile a program to use them. Some of the options\napply only to the 8-bit, 16-bit, or 32-bit libraries, respectively, and are not\navailable for libraries that have not been built. If an unavailable option is\nencountered, the \"usage\" information is output.\n.\n.\n.SH OPTIONS\n.rs\n.TP 10\n\\fB--prefix\\fP\nWrites the directory prefix used in the PCRE2 installation for\narchitecture-independent files (\\fI/usr\\fP on many systems, \\fI/usr/local\\fP on\nsome systems) to the standard output.\n.TP 10\n\\fB--exec-prefix\\fP\nWrites the directory prefix used in the PCRE2 installation for\narchitecture-dependent files (normally the same as \\fB--prefix\\fP) to the\nstandard output.\n.TP 10\n\\fB--version\\fP\nWrites the version number of the installed PCRE2 libraries to the standard\noutput.\n.TP 10\n\\fB--libs8\\fP\nWrites to the standard output the command line options required to link\nwith the 8-bit PCRE2 library (\\fB-lpcre2-8\\fP on many systems).\n.TP 10\n\\fB--libs16\\fP\nWrites to the standard output the command line options required to link\nwith the 16-bit PCRE2 library (\\fB-lpcre2-16\\fP on many systems).\n.TP 10\n\\fB--libs32\\fP\nWrites to the standard output the command line options required to link\nwith the 32-bit PCRE2 library (\\fB-lpcre2-32\\fP on many systems).\n.TP 10\n\\fB--libs-posix\\fP\nWrites to the standard output the command line options required to link with\nPCRE2's POSIX API wrapper library (\\fB-lpcre2-posix\\fP \\fB-lpcre2-8\\fP on many\nsystems).\n.TP 10\n\\fB--cflags\\fP\nWrites to the standard output the command line options required to compile\nfiles that use PCRE2 (this may include some \\fB-I\\fP options, but is blank on\nmany systems).\n.TP 10\n\\fB--cflags-posix\\fP\nWrites to the standard output the command line options required to compile\nfiles that use PCRE2's POSIX API wrapper library (this may include some\n\\fB-I\\fP options, but is blank on many systems).\n.\n.\n.SH \"SEE ALSO\"\n.rs\n.sp\n\\fBpcre2(3)\\fP\n.\n.\n.SH AUTHOR\n.rs\n.sp\nThis manual page was originally written by Mark Baker for the Debian GNU/Linux\nsystem. It has been subsequently revised as a generic PCRE2 man page.\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 22 February 2025\n.fi\n"
  },
  {
    "path": "doc/pcre2-config.txt",
    "content": "PCRE2-CONFIG(1)             General Commands Manual            PCRE2-CONFIG(1)\n\n\nNAME\n       pcre2-config - program to return PCRE2 configuration\n\n\nSYNOPSIS\n\n       pcre2-config [--prefix] [--exec-prefix] [--version]\n                    [--libs8] [--libs16] [--libs32] [--libs-posix]\n                    [--cflags] [--cflags-posix]\n\n\nDESCRIPTION\n\n       pcre2-config returns the configuration of the installed PCRE2 libraries\n       and  the options required to compile a program to use them. Some of the\n       options apply only to the 8-bit, 16-bit, or 32-bit  libraries,  respec-\n       tively,  and  are not available for libraries that have not been built.\n       If an unavailable option is encountered,  the  \"usage\"  information  is\n       output.\n\n\nOPTIONS\n\n       --prefix  Writes  the  directory  prefix used in the PCRE2 installation\n                 for architecture-independent files  (/usr  on  many  systems,\n                 /usr/local on some systems) to the standard output.\n\n       --exec-prefix\n                 Writes  the  directory  prefix used in the PCRE2 installation\n                 for architecture-dependent files (normally the same as --pre-\n                 fix) to the standard output.\n\n       --version Writes the version number of the installed PCRE2 libraries to\n                 the standard output.\n\n       --libs8   Writes to the standard output the command  line  options  re-\n                 quired  to  link  with  the 8-bit PCRE2 library (-lpcre2-8 on\n                 many systems).\n\n       --libs16  Writes to the standard output the command  line  options  re-\n                 quired  to  link with the 16-bit PCRE2 library (-lpcre2-16 on\n                 many systems).\n\n       --libs32  Writes to the standard output the command  line  options  re-\n                 quired  to  link with the 32-bit PCRE2 library (-lpcre2-32 on\n                 many systems).\n\n       --libs-posix\n                 Writes to the standard output the command  line  options  re-\n                 quired  to  link  with  PCRE2's  POSIX  API  wrapper  library\n                 (-lpcre2-posix -lpcre2-8 on many systems).\n\n       --cflags  Writes to the standard output the command  line  options  re-\n                 quired to compile files that use PCRE2 (this may include some\n                 -I options, but is blank on many systems).\n\n       --cflags-posix\n                 Writes  to  the  standard output the command line options re-\n                 quired to compile files that use PCRE2's  POSIX  API  wrapper\n                 library  (this  may  include some -I options, but is blank on\n                 many systems).\n\n\nSEE ALSO\n\n       pcre2(3)\n\n\nAUTHOR\n\n       This manual page was originally written by Mark Baker  for  the  Debian\n       GNU/Linux  system.  It has been subsequently revised as a generic PCRE2\n       man page.\n\n\nREVISION\n\n       Last updated: 22 February 2025\n\n\nPCRE2 10.48-DEV                22 February 2025                PCRE2-CONFIG(1)\n"
  },
  {
    "path": "doc/pcre2.3",
    "content": ".TH PCRE2 3 \"22 February 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH INTRODUCTION\n.rs\n.sp\nPCRE2 is the name used for a revised API for the PCRE library, which is a set\nof functions, written in C, that implement regular expression pattern matching\nusing the same syntax and semantics as Perl, with just a few differences. After\nnearly two decades, the limitations of the original API were making development\nincreasingly difficult. The new API is more extensible, and it was simplified\nby abolishing the separate \"study\" optimizing function; in PCRE2, patterns are\nautomatically optimized where possible. Since forking from PCRE1, the code has\nbeen extensively refactored and new features introduced. The old library is now\nobsolete and is no longer maintained.\n.P\nAs well as Perl-style regular expression patterns, some features that appeared\nin Python and the original PCRE before they appeared in Perl are available\nusing the Python syntax. There is also support for some .NET and Oniguruma\nsyntax items, and there are options for requesting minor changes that give\nbetter ECMAScript (JavaScript) compatibility.\n.P\nThe source code for PCRE2 can be compiled to support strings of 8-bit, 16-bit,\nor 32-bit code units, which means that up to three separate libraries may be\ninstalled, one for each code unit size. The size of a code unit is not related\nto the bit size of the underlying hardware. In a 64-bit environment that also\nsupports 32-bit applications, versions of PCRE2 that are compiled in both\n64-bit and 32-bit modes may be needed.\n.P\nThe original work to extend PCRE to 16-bit and 32-bit code units was done by\nZoltan Herczeg and Christian Persch, respectively. In all three cases, strings\ncan be interpreted either as one character per code unit, or as UTF-encoded\nUnicode, with support for Unicode general category properties. Unicode support\nis optional at build time (but is the default). However, processing strings as\nUTF code units must be enabled explicitly at run time. The version of Unicode\nin use can be discovered by running\n.sp\n  pcre2test -C\n.P\nThe three libraries contain identical sets of functions, with names ending in\n_8, _16, or _32, respectively (for example, \\fBpcre2_compile_8()\\fP). However,\nby defining PCRE2_CODE_UNIT_WIDTH to be 8, 16, or 32, a program that uses just\none code unit width can be written using generic names such as\n\\fBpcre2_compile()\\fP, and the documentation is written assuming that this is\nthe case.\n.P\nIn addition to the Perl-compatible matching function, PCRE2 contains an\nalternative function that matches the same compiled patterns in a different\nway. In certain circumstances, the alternative function has some advantages.\nFor a discussion of the two matching algorithms, see the\n.\\\" HREF\n\\fBpcre2matching\\fP\n.\\\"\npage.\n.P\nDetails of exactly which Perl regular expression features are and are not\nsupported by PCRE2 are given in separate documents. See the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\nand\n.\\\" HREF\n\\fBpcre2compat\\fP\n.\\\"\npages. There is a syntax summary in the\n.\\\" HREF\n\\fBpcre2syntax\\fP\n.\\\"\npage.\n.P\nSome features of PCRE2 can be included, excluded, or changed when the library\nis built. The\n.\\\" HREF\n\\fBpcre2_config()\\fP\n.\\\"\nfunction makes it possible for a client to discover which features are\navailable. The features themselves are described in the\n.\\\" HREF\n\\fBpcre2build\\fP\n.\\\"\npage. Documentation about building PCRE2 for various operating systems can be\nfound in the\n.\\\" HTML <a href=\"README.txt\">\n.\\\" </a>\n\\fBREADME\\fP\n.\\\"\nand\n.\\\" HTML <a href=\"NON-AUTOTOOLS-BUILD.txt\">\n.\\\" </a>\n\\fBNON-AUTOTOOLS-BUILD\\fP\n.\\\"\nfiles in the source distribution.\n.P\nThe libraries contains a number of undocumented internal functions and data\ntables that are used by more than one of the exported external functions, but\nwhich are not intended for use by external callers. Their names all begin with\n\"_pcre2\", which hopefully will not provoke any name clashes. In some\nenvironments, it is possible to control which external symbols are exported\nwhen a shared library is built, and in these cases the undocumented symbols are\nnot exported.\n.\n.\n.SH \"SECURITY CONSIDERATIONS\"\n.rs\n.sp\nIf you are using PCRE2 in a non-UTF application that permits users to supply\narbitrary patterns for compilation, you should be aware of a feature that\nallows users to turn on UTF support from within a pattern. For example, an\n8-bit pattern that begins with \"(*UTF)\" turns on UTF-8 mode, which interprets\npatterns and subjects as strings of UTF-8 code units instead of individual\n8-bit characters. This causes both the pattern and any data against which it is\nmatched to be checked for UTF-8 validity. If the data string is very long, such\na check might use sufficiently many resources as to cause your application to\nlose performance.\n.P\nOne way of guarding against this possibility is to use the\n\\fBpcre2_pattern_info()\\fP function to check the compiled pattern's options for\nPCRE2_UTF. Alternatively, you can set the PCRE2_NEVER_UTF option when calling\n\\fBpcre2_compile()\\fP. This causes a compile time error if the pattern contains\na UTF-setting sequence.\n.P\nThe use of Unicode properties for character types such as \\ed can also be\nenabled from within the pattern, by specifying \"(*UCP)\". This feature can be\ndisallowed by setting the PCRE2_NEVER_UCP option.\n.P\nIf your application is one that supports UTF, be aware that validity checking\ncan take time. If the same data string is to be matched many times, you can use\nthe PCRE2_NO_UTF_CHECK option for the second and subsequent matches to avoid\nrunning redundant checks.\n.P\nThe use of the \\eC escape sequence in a UTF-8 or UTF-16 pattern can lead to\nproblems, because it may leave the current matching point in the middle of a\nmulti-code-unit character. The PCRE2_NEVER_BACKSLASH_C option can be used by an\napplication to lock out the use of \\eC, causing a compile-time error if it is\nencountered. It is also possible to build PCRE2 with the use of \\eC permanently\ndisabled.\n.P\nAnother way that performance can be hit is by running a pattern that has a very\nlarge search tree against a string that will never match. Nested unlimited\nrepeats in a pattern are a common example. PCRE2 provides some protection\nagainst this: see the \\fBpcre2_set_match_limit()\\fP function in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage. There is a similar function called \\fBpcre2_set_depth_limit()\\fP that can\nbe used to restrict the amount of memory that is used.\n.\n.\n.SH \"USER DOCUMENTATION\"\n.rs\n.sp\nThe user documentation for PCRE2 comprises a number of different sections. In\nthe \"man\" format, each of these is a separate \"man page\". In the HTML format,\neach is a separate page, linked from the index page. In the plain text format,\nthe descriptions of the \\fBpcre2grep\\fP and \\fBpcre2test\\fP programs are in\nfiles called \\fBpcre2grep.txt\\fP and \\fBpcre2test.txt\\fP, respectively. The\nremaining sections, except for the \\fBpcre2demo\\fP section (which is a program\nlisting), and the short pages for individual functions, are concatenated in\n\\fBpcre2.txt\\fP, for ease of searching. The sections are as follows:\n.sp\n  pcre2              this document\n  pcre2-config       show PCRE2 installation configuration information\n  pcre2api           details of PCRE2's native C API\n  pcre2build         building PCRE2\n  pcre2callout       details of the pattern callout feature\n  pcre2compat        discussion of Perl compatibility\n  pcre2convert       details of pattern conversion functions\n  pcre2demo          a demonstration C program that uses PCRE2\n  pcre2grep          description of the \\fBpcre2grep\\fP command (8-bit only)\n  pcre2jit           discussion of just-in-time optimization support\n  pcre2limits        details of size and other limits\n  pcre2matching      discussion of the two matching algorithms\n  pcre2partial       details of the partial matching facility\n.\\\" JOIN\n  pcre2pattern       syntax and semantics of supported regular\n                       expression patterns\n  pcre2perform       discussion of performance issues\n  pcre2posix         the POSIX-compatible C API for the 8-bit library\n  pcre2sample        discussion of the pcre2demo program\n  pcre2serialize     details of pattern serialization\n  pcre2syntax        quick syntax reference\n  pcre2test          description of the \\fBpcre2test\\fP command\n  pcre2unicode       discussion of Unicode and UTF support\n.sp\nIn the \"man\" and HTML formats, there is also a short page for each C library\nfunction, listing its arguments and results.\n.\n.\n.SH AUTHORS\n.rs\n.sp\nThe current maintainers of PCRE2 are Nicholas Wilson and Zoltan Herczeg.\n.P\nPCRE2 was written by Philip Hazel, of the University Computing Service,\nCambridge, England. Many others have also contributed.\n.P\nTo contact the maintainers, please use the GitHub issues tracker or PCRE2\nmailing list, as described at the project page:\n.\\\" HTML <a href=\"https://github.com/PCRE2Project/pcre2\">\n.\\\" </a>\nhttps://github.com/PCRE2Project/pcre2\n.\\\"\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 22 February 2025\nCopyright (c) 1997-2021 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2.txt",
    "content": "-----------------------------------------------------------------------------\nThis file contains a concatenation of the PCRE2 man pages, converted to plain\ntext format for ease of searching with a text editor, or for use on systems\nthat do not have a man page processor. The small individual files that give\nsynopses of each function in the library have not been included. Neither has\nthe pcre2demo program. There are separate text files for the pcre2grep and\npcre2test commands.\n-----------------------------------------------------------------------------\n\n\nPCRE2(3)                   Library Functions Manual                   PCRE2(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nINTRODUCTION\n\n       PCRE2 is the name used for a revised API for the PCRE library, which is\n       a  set  of  functions,  written in C, that implement regular expression\n       pattern matching using the same syntax and semantics as Perl, with just\n       a few differences. After nearly two decades,  the  limitations  of  the\n       original  API  were  making development increasingly difficult. The new\n       API is more extensible, and it was simplified by abolishing  the  sepa-\n       rate  \"study\" optimizing function; in PCRE2, patterns are automatically\n       optimized where possible. Since forking from PCRE1, the code  has  been\n       extensively  refactored and new features introduced. The old library is\n       now obsolete and is no longer maintained.\n\n       As well as Perl-style regular expression patterns, some  features  that\n       appeared  in  Python and the original PCRE before they appeared in Perl\n       are available using the Python syntax. There is also support  for  some\n       .NET  and  Oniguruma syntax items, and there are options for requesting\n       minor changes that give better ECMAScript (JavaScript) compatibility.\n\n       The source code for PCRE2 can be compiled to support strings of  8-bit,\n       16-bit, or 32-bit code units, which means that up to three separate li-\n       braries  may  be  installed, one for each code unit size. The size of a\n       code unit is not related to the bit size of the underlying hardware. In\n       a 64-bit environment that also supports 32-bit  applications,  versions\n       of  PCRE2  that  are  compiled  in  both 64-bit and 32-bit modes may be\n       needed.\n\n       The original work to extend PCRE to 16-bit and 32-bit  code  units  was\n       done by Zoltan Herczeg and Christian Persch, respectively. In all three\n       cases,  strings  can  be  interpreted  either as one character per code\n       unit, or as UTF-encoded Unicode, with support for Unicode general cate-\n       gory properties. Unicode support is optional at build time (but is  the\n       default). However, processing strings as UTF code units must be enabled\n       explicitly at run time. The version of Unicode in use can be discovered\n       by running\n\n         pcre2test -C\n\n       The  three  libraries  contain  identical sets of functions, with names\n       ending in _8,  _16,  or  _32,  respectively  (for  example,  pcre2_com-\n       pile_8()).  However,  by defining PCRE2_CODE_UNIT_WIDTH to be 8, 16, or\n       32, a program that uses just one code unit width can be  written  using\n       generic names such as pcre2_compile(), and the documentation is written\n       assuming that this is the case.\n\n       In addition to the Perl-compatible matching function, PCRE2 contains an\n       alternative  function that matches the same compiled patterns in a dif-\n       ferent way. In certain circumstances, the alternative function has some\n       advantages.  For a discussion of the two matching algorithms,  see  the\n       pcre2matching page.\n\n       Details  of  exactly which Perl regular expression features are and are\n       not supported by  PCRE2  are  given  in  separate  documents.  See  the\n       pcre2pattern  and  pcre2compat  pages. There is a syntax summary in the\n       pcre2syntax page.\n\n       Some features of PCRE2 can be included, excluded, or changed  when  the\n       library  is  built. The pcre2_config() function makes it possible for a\n       client to discover which features are  available.  The  features  them-\n       selves are described in the pcre2build page. Documentation about build-\n       ing  PCRE2 for various operating systems can be found in the README and\n       NON-AUTOTOOLS-BUILD files in the source distribution.\n\n       The libraries contains a number of undocumented internal functions  and\n       data  tables  that  are  used by more than one of the exported external\n       functions, but which are not intended  for  use  by  external  callers.\n       Their  names  all begin with \"_pcre2\", which hopefully will not provoke\n       any name clashes. In some environments, it is possible to control which\n       external symbols are exported when a shared library is  built,  and  in\n       these cases the undocumented symbols are not exported.\n\n\nSECURITY CONSIDERATIONS\n\n       If  you  are using PCRE2 in a non-UTF application that permits users to\n       supply arbitrary patterns for compilation, you should  be  aware  of  a\n       feature that allows users to turn on UTF support from within a pattern.\n       For  example, an 8-bit pattern that begins with \"(*UTF)\" turns on UTF-8\n       mode, which interprets patterns and subjects as strings of  UTF-8  code\n       units instead of individual 8-bit characters. This causes both the pat-\n       tern  and  any data against which it is matched to be checked for UTF-8\n       validity. If the data string is very long, such a check might use  suf-\n       ficiently  many  resources as to cause your application to lose perfor-\n       mance.\n\n       One way of guarding against this possibility is to use  the  pcre2_pat-\n       tern_info()  function  to  check  the  compiled  pattern's  options for\n       PCRE2_UTF. Alternatively, you can set the PCRE2_NEVER_UTF  option  when\n       calling  pcre2_compile().  This causes a compile time error if the pat-\n       tern contains a UTF-setting sequence.\n\n       The use of Unicode properties for character types such as \\d  can  also\n       be  enabled  from within the pattern, by specifying \"(*UCP)\". This fea-\n       ture can be disallowed by setting the PCRE2_NEVER_UCP option.\n\n       If your application is one that supports UTF, be  aware  that  validity\n       checking  can  take time. If the same data string is to be matched many\n       times, you can use the PCRE2_NO_UTF_CHECK option  for  the  second  and\n       subsequent matches to avoid running redundant checks.\n\n       The use of the \\C escape sequence in a UTF-8 or UTF-16 pattern can lead\n       to  problems,  because  it  may leave the current matching point in the\n       middle of a multi-code-unit character. The PCRE2_NEVER_BACKSLASH_C  op-\n       tion can be used by an application to lock out the use of \\C, causing a\n       compile-time  error  if it is encountered. It is also possible to build\n       PCRE2 with the use of \\C permanently disabled.\n\n       Another way that performance can be hit is by running  a  pattern  that\n       has  a  very  large search tree against a string that will never match.\n       Nested unlimited repeats in a pattern are a common example. PCRE2  pro-\n       vides  some  protection  against  this: see the pcre2_set_match_limit()\n       function in the pcre2api page.  There  is  a  similar  function  called\n       pcre2_set_depth_limit() that can be used to restrict the amount of mem-\n       ory that is used.\n\n\nUSER DOCUMENTATION\n\n       The  user  documentation for PCRE2 comprises a number of different sec-\n       tions. In the \"man\" format, each of these is a separate \"man page\".  In\n       the  HTML  format, each is a separate page, linked from the index page.\n       In the plain  text  format,  the  descriptions  of  the  pcre2grep  and\n       pcre2test programs are in files called pcre2grep.txt and pcre2test.txt,\n       respectively.  The remaining sections, except for the pcre2demo section\n       (which is a program listing), and the short pages for individual  func-\n       tions,  are  concatenated in pcre2.txt, for ease of searching. The sec-\n       tions are as follows:\n\n         pcre2              this document\n         pcre2-config       show PCRE2 installation configuration information\n         pcre2api           details of PCRE2's native C API\n         pcre2build         building PCRE2\n         pcre2callout       details of the pattern callout feature\n         pcre2compat        discussion of Perl compatibility\n         pcre2convert       details of pattern conversion functions\n         pcre2demo          a demonstration C program that uses PCRE2\n         pcre2grep          description of the pcre2grep command (8-bit only)\n         pcre2jit           discussion of just-in-time optimization support\n         pcre2limits        details of size and other limits\n         pcre2matching      discussion of the two matching algorithms\n         pcre2partial       details of the partial matching facility\n         pcre2pattern       syntax and semantics of supported regular\n                              expression patterns\n         pcre2perform       discussion of performance issues\n         pcre2posix         the POSIX-compatible C API for the 8-bit library\n         pcre2sample        discussion of the pcre2demo program\n         pcre2serialize     details of pattern serialization\n         pcre2syntax        quick syntax reference\n         pcre2test          description of the pcre2test command\n         pcre2unicode       discussion of Unicode and UTF support\n\n       In the \"man\" and HTML formats, there is also a short page  for  each  C\n       library function, listing its arguments and results.\n\n\nAUTHORS\n\n       The  current  maintainers  of PCRE2 are Nicholas Wilson and Zoltan Her-\n       czeg.\n\n       PCRE2 was written by Philip Hazel, of the University Computing Service,\n       Cambridge, England. Many others have also contributed.\n\n       To contact the maintainers, please use the  GitHub  issues  tracker  or\n       PCRE2    mailing    list,   as   described   at   the   project   page:\n       https://github.com/PCRE2Project/pcre2\n\n\nREVISION\n\n       Last updated: 22 February 2025\n       Copyright (c) 1997-2021 University of Cambridge.\n\n\nPCRE2 10.48-DEV                22 February 2025                       PCRE2(3)\n------------------------------------------------------------------------------\n\n\nPCRE2API(3)                Library Functions Manual                PCRE2API(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n       #include <pcre2.h>\n\n       PCRE2  is  a  new API for PCRE, starting at release 10.0. This document\n       contains a description of all its native functions. See the pcre2 docu-\n       ment for an overview of all the PCRE2 documentation.\n\n\nPCRE2 NATIVE API BASIC FUNCTIONS\n\n       pcre2_code *pcre2_compile(PCRE2_SPTR pattern, PCRE2_SIZE length,\n         uint32_t options, int *errorcode, PCRE2_SIZE *erroroffset,\n         pcre2_compile_context *ccontext);\n\n       void pcre2_code_free(pcre2_code *code);\n\n       pcre2_match_data *pcre2_match_data_create(uint32_t ovecsize,\n         pcre2_general_context *gcontext);\n\n       pcre2_match_data *pcre2_match_data_create_from_pattern(\n         const pcre2_code *code, pcre2_general_context *gcontext);\n\n       int pcre2_match(const pcre2_code *code, PCRE2_SPTR subject,\n         PCRE2_SIZE length, PCRE2_SIZE startoffset,\n         uint32_t options, pcre2_match_data *match_data,\n         pcre2_match_context *mcontext);\n\n       int pcre2_dfa_match(const pcre2_code *code, PCRE2_SPTR subject,\n         PCRE2_SIZE length, PCRE2_SIZE startoffset,\n         uint32_t options, pcre2_match_data *match_data,\n         pcre2_match_context *mcontext,\n         int *workspace, PCRE2_SIZE wscount);\n\n       void pcre2_match_data_free(pcre2_match_data *match_data);\n\n\nPCRE2 NATIVE API AUXILIARY MATCH FUNCTIONS\n\n       PCRE2_SPTR pcre2_get_mark(pcre2_match_data *match_data);\n\n       PCRE2_SIZE pcre2_get_match_data_size(pcre2_match_data *match_data);\n\n       PCRE2_SIZE pcre2_get_match_data_heapframes_size(\n         pcre2_match_data *match_data);\n\n       uint32_t pcre2_get_ovector_count(pcre2_match_data *match_data);\n\n       PCRE2_SIZE *pcre2_get_ovector_pointer(pcre2_match_data *match_data);\n\n       PCRE2_SIZE pcre2_get_startchar(pcre2_match_data *match_data);\n\n\nPCRE2 NATIVE API GENERAL CONTEXT FUNCTIONS\n\n       pcre2_general_context *pcre2_general_context_create(\n         void *(*private_malloc)(PCRE2_SIZE, void *),\n         void (*private_free)(void *, void *), void *memory_data);\n\n       pcre2_general_context *pcre2_general_context_copy(\n         pcre2_general_context *gcontext);\n\n       void pcre2_general_context_free(pcre2_general_context *gcontext);\n\n\nPCRE2 NATIVE API COMPILE CONTEXT FUNCTIONS\n\n       pcre2_compile_context *pcre2_compile_context_create(\n         pcre2_general_context *gcontext);\n\n       pcre2_compile_context *pcre2_compile_context_copy(\n         pcre2_compile_context *ccontext);\n\n       void pcre2_compile_context_free(pcre2_compile_context *ccontext);\n\n       int pcre2_set_bsr(pcre2_compile_context *ccontext,\n         uint32_t value);\n\n       int pcre2_set_character_tables(pcre2_compile_context *ccontext,\n         const uint8_t *tables);\n\n       int pcre2_set_compile_extra_options(pcre2_compile_context *ccontext,\n         uint32_t extra_options);\n\n       int pcre2_set_max_pattern_length(pcre2_compile_context *ccontext,\n         PCRE2_SIZE value);\n\n       int pcre2_set_max_pattern_compiled_length(\n         pcre2_compile_context *ccontext, PCRE2_SIZE value);\n\n       int pcre2_set_max_varlookbehind(pcre2_compile_contest *ccontext,\n         uint32_t value);\n\n       int pcre2_set_newline(pcre2_compile_context *ccontext,\n         uint32_t value);\n\n       int pcre2_set_parens_nest_limit(pcre2_compile_context *ccontext,\n         uint32_t value);\n\n       int pcre2_set_compile_recursion_guard(pcre2_compile_context *ccontext,\n         int (*guard_function)(uint32_t, void *), void *user_data);\n\n       int pcre2_set_optimize(pcre2_compile_context *ccontext,\n         uint32_t directive);\n\n\nPCRE2 NATIVE API MATCH CONTEXT FUNCTIONS\n\n       pcre2_match_context *pcre2_match_context_create(\n         pcre2_general_context *gcontext);\n\n       pcre2_match_context *pcre2_match_context_copy(\n         pcre2_match_context *mcontext);\n\n       void pcre2_match_context_free(pcre2_match_context *mcontext);\n\n       int pcre2_set_callout(pcre2_match_context *mcontext,\n         int (*callout_function)(pcre2_callout_block *, void *),\n         void *callout_data);\n\n       int pcre2_set_substitute_callout(pcre2_match_context *mcontext,\n         int (*callout_function)(pcre2_substitute_callout_block *, void *),\n         void *callout_data);\n\n       int pcre2_set_substitute_case_callout(pcre2_match_context *mcontext,\n         PCRE2_SIZE (*callout_function)(PCRE2_SPTR, PCRE2_SIZE,\n                                        PCRE2_UCHAR *, PCRE2_SIZE,\n                                        int, void *),\n         void *callout_data);\n\n       int pcre2_set_offset_limit(pcre2_match_context *mcontext,\n         PCRE2_SIZE value);\n\n       int pcre2_set_heap_limit(pcre2_match_context *mcontext,\n         uint32_t value);\n\n       int pcre2_set_match_limit(pcre2_match_context *mcontext,\n         uint32_t value);\n\n       int pcre2_set_depth_limit(pcre2_match_context *mcontext,\n         uint32_t value);\n\n\nPCRE2 NATIVE API STRING EXTRACTION FUNCTIONS\n\n       int pcre2_substring_copy_byname(pcre2_match_data *match_data,\n         PCRE2_SPTR name, PCRE2_UCHAR *buffer, PCRE2_SIZE *bufflen);\n\n       int pcre2_substring_copy_bynumber(pcre2_match_data *match_data,\n         uint32_t number, PCRE2_UCHAR *buffer,\n         PCRE2_SIZE *bufflen);\n\n       void pcre2_substring_free(PCRE2_UCHAR *buffer);\n\n       int pcre2_substring_get_byname(pcre2_match_data *match_data,\n         PCRE2_SPTR name, PCRE2_UCHAR **bufferptr, PCRE2_SIZE *bufflen);\n\n       int pcre2_substring_get_bynumber(pcre2_match_data *match_data,\n         uint32_t number, PCRE2_UCHAR **bufferptr,\n         PCRE2_SIZE *bufflen);\n\n       int pcre2_substring_length_byname(pcre2_match_data *match_data,\n         PCRE2_SPTR name, PCRE2_SIZE *length);\n\n       int pcre2_substring_length_bynumber(pcre2_match_data *match_data,\n         uint32_t number, PCRE2_SIZE *length);\n\n       int pcre2_substring_nametable_scan(const pcre2_code *code,\n         PCRE2_SPTR name, PCRE2_SPTR *first, PCRE2_SPTR *last);\n\n       int pcre2_substring_number_from_name(const pcre2_code *code,\n         PCRE2_SPTR name);\n\n       void pcre2_substring_list_free(PCRE2_UCHAR **list);\n\n       int pcre2_substring_list_get(pcre2_match_data *match_data,\n         PCRE2_UCHAR ***listptr, PCRE2_SIZE **lengthsptr);\n\n\nPCRE2 NATIVE API STRING SUBSTITUTION FUNCTION\n\n       int pcre2_substitute(const pcre2_code *code, PCRE2_SPTR subject,\n         PCRE2_SIZE length, PCRE2_SIZE startoffset,\n         uint32_t options, pcre2_match_data *match_data,\n         pcre2_match_context *mcontext, PCRE2_SPTR replacement,\n         PCRE2_SIZE rlength, PCRE2_UCHAR *outputbuffer,\n         PCRE2_SIZE *outlengthptr);\n\n\nPCRE2 NATIVE API JIT FUNCTIONS\n\n       int pcre2_jit_compile(pcre2_code *code, uint32_t options);\n\n       int pcre2_jit_match(const pcre2_code *code, PCRE2_SPTR subject,\n         PCRE2_SIZE length, PCRE2_SIZE startoffset,\n         uint32_t options, pcre2_match_data *match_data,\n         pcre2_match_context *mcontext);\n\n       void pcre2_jit_free_unused_memory(pcre2_general_context *gcontext);\n\n       pcre2_jit_stack *pcre2_jit_stack_create(size_t startsize,\n         size_t maxsize, pcre2_general_context *gcontext);\n\n       void pcre2_jit_stack_assign(pcre2_match_context *mcontext,\n         pcre2_jit_callback callback_function, void *callback_data);\n\n       void pcre2_jit_stack_free(pcre2_jit_stack *jit_stack);\n\n\nPCRE2 NATIVE API SERIALIZATION FUNCTIONS\n\n       int32_t pcre2_serialize_decode(pcre2_code **codes,\n         int32_t number_of_codes, const uint8_t *bytes,\n         pcre2_general_context *gcontext);\n\n       int32_t pcre2_serialize_encode(const pcre2_code **codes,\n         int32_t number_of_codes, uint8_t **serialized_bytes,\n         PCRE2_SIZE *serialized_size, pcre2_general_context *gcontext);\n\n       void pcre2_serialize_free(uint8_t *bytes);\n\n       int32_t pcre2_serialize_get_number_of_codes(const uint8_t *bytes);\n\n\nPCRE2 NATIVE API AUXILIARY FUNCTIONS\n\n       pcre2_code *pcre2_code_copy(const pcre2_code *code);\n\n       pcre2_code *pcre2_code_copy_with_tables(const pcre2_code *code);\n\n       int pcre2_get_error_message(int errorcode, PCRE2_UCHAR *buffer,\n         PCRE2_SIZE bufflen);\n\n       const uint8_t *pcre2_maketables(pcre2_general_context *gcontext);\n\n       void pcre2_maketables_free(pcre2_general_context *gcontext,\n         const uint8_t *tables);\n\n       int pcre2_pattern_info(const pcre2_code *code, uint32_t what,\n         void *where);\n\n       int pcre2_callout_enumerate(const pcre2_code *code,\n         int (*callback)(pcre2_callout_enumerate_block *, void *),\n         void *user_data);\n\n       int pcre2_config(uint32_t what, void *where);\n\n\nPCRE2 NATIVE API OBSOLETE FUNCTIONS\n\n       int pcre2_set_recursion_limit(pcre2_match_context *mcontext,\n         uint32_t value);\n\n       int pcre2_set_recursion_memory_management(\n         pcre2_match_context *mcontext,\n         void *(*private_malloc)(size_t, void *),\n         void (*private_free)(void *, void *), void *memory_data);\n\n       These functions became obsolete at release 10.30 and are retained  only\n       for  backward  compatibility.  They should not be used in new code. The\n       first is replaced by pcre2_set_depth_limit(); the second is  no  longer\n       needed and has no effect (it always returns zero).\n\n\nPCRE2 EXPERIMENTAL PATTERN CONVERSION FUNCTIONS\n\n       pcre2_convert_context *pcre2_convert_context_create(\n         pcre2_general_context *gcontext);\n\n       pcre2_convert_context *pcre2_convert_context_copy(\n         pcre2_convert_context *cvcontext);\n\n       void pcre2_convert_context_free(pcre2_convert_context *cvcontext);\n\n       int pcre2_set_glob_escape(pcre2_convert_context *cvcontext,\n         uint32_t escape_char);\n\n       int pcre2_set_glob_separator(pcre2_convert_context *cvcontext,\n         uint32_t separator_char);\n\n       int pcre2_pattern_convert(PCRE2_SPTR pattern, PCRE2_SIZE length,\n         uint32_t options, PCRE2_UCHAR **buffer,\n         PCRE2_SIZE *blength, pcre2_convert_context *cvcontext);\n\n       void pcre2_converted_pattern_free(PCRE2_UCHAR *converted_pattern);\n\n       These  functions  provide  a  way of converting non-PCRE2 patterns into\n       patterns that can be processed by pcre2_compile(). This facility is ex-\n       perimental and may be changed in future releases. At  present,  \"globs\"\n       and  POSIX  basic  and  extended patterns can be converted. Details are\n       given in the pcre2convert documentation.\n\n\nPCRE2 8-BIT, 16-BIT, AND 32-BIT LIBRARIES\n\n       There are three PCRE2 libraries, supporting 8-bit, 16-bit,  and  32-bit\n       code  units,  respectively.  However,  there  is  just one header file,\n       pcre2.h.  This contains the function prototypes and  other  definitions\n       for all three libraries. One, two, or all three can be installed simul-\n       taneously.  On  Unix-like  systems the libraries are called libpcre2-8,\n       libpcre2-16, and libpcre2-32, and they can also co-exist with the orig-\n       inal PCRE libraries.  Every PCRE2 function  comes  in  three  different\n       forms, one for each library, for example:\n\n         pcre2_compile_8()\n         pcre2_compile_16()\n         pcre2_compile_32()\n\n       There are also three different sets of data types:\n\n         PCRE2_UCHAR8, PCRE2_UCHAR16, PCRE2_UCHAR32\n         PCRE2_SPTR8,  PCRE2_SPTR16,  PCRE2_SPTR32\n\n       The  UCHAR  types define unsigned code units of the appropriate widths.\n       For example, PCRE2_UCHAR16 is usually defined as `uint16_t'.  The  SPTR\n       types are pointers to constants of the equivalent UCHAR types, that is,\n       they are pointers to vectors of unsigned code units.\n\n       Character  strings  are  passed  to a PCRE2 library as sequences of un-\n       signed integers in code units of the appropriate width. The length of a\n       string may be given as a number of code units, or  the  string  may  be\n       specified as zero-terminated.\n\n       Many  applications use only one code unit width. For their convenience,\n       macros are defined whose names are the generic forms such as pcre2_com-\n       pile() and  PCRE2_SPTR.  These  macros  use  the  value  of  the  macro\n       PCRE2_CODE_UNIT_WIDTH  to generate the appropriate width-specific func-\n       tion and macro names.  PCRE2_CODE_UNIT_WIDTH is not defined by default.\n       An application must define it to be  8,  16,  or  32  before  including\n       pcre2.h in order to make use of the generic names.\n\n       Applications  that use more than one code unit width can be linked with\n       more than one PCRE2 library, but must define  PCRE2_CODE_UNIT_WIDTH  to\n       be  0  before  including pcre2.h, and then use the real function names.\n       Any code that is to be included in an environment where  the  value  of\n       PCRE2_CODE_UNIT_WIDTH  is  unknown  should  also  use the real function\n       names. (Unfortunately, it is not possible in C code to save and restore\n       the value of a macro.)\n\n       If PCRE2_CODE_UNIT_WIDTH is not defined  before  including  pcre2.h,  a\n       compiler error occurs.\n\n       When  using  multiple  libraries  in an application, you must take care\n       when processing any particular pattern to use  only  functions  from  a\n       single  library.   For example, if you want to run a match using a pat-\n       tern that was compiled with pcre2_compile_16(), you  must  do  so  with\n       pcre2_match_16(), not pcre2_match_8() or pcre2_match_32().\n\n       In  the  function summaries above, and in the rest of this document and\n       other PCRE2 documents, functions and data  types  are  described  using\n       their generic names, without the _8, _16, or _32 suffix.\n\n\nPCRE2 API OVERVIEW\n\n       PCRE2  has  its  own  native  API, which is described in this document.\n       There are also some wrapper functions for the 8-bit library that corre-\n       spond to the POSIX regular expression API, but they do not give  access\n       to  all  the  functionality of PCRE2 and they are not thread-safe. They\n       are described in the pcre2posix documentation. Both these APIs define a\n       set of C function calls.\n\n       The native API C data types, function prototypes,  option  values,  and\n       error codes are defined in the header file pcre2.h, which also contains\n       definitions of PCRE2_MAJOR and PCRE2_MINOR, the major and minor release\n       numbers  for the library. Applications can use these to include support\n       for different releases of PCRE2.\n\n       In a Windows environment, if you want to statically link an application\n       program against a non-dll PCRE2 library, you must  define  PCRE2_STATIC\n       before including pcre2.h.\n\n       The  functions pcre2_compile() and pcre2_match() are used for compiling\n       and matching regular expressions in a Perl-compatible manner. A  sample\n       program that demonstrates the simplest way of using them is provided in\n       the file called pcre2demo.c in the PCRE2 source distribution. A listing\n       of  this  program  is  given  in  the  pcre2demo documentation, and the\n       pcre2sample documentation describes how to compile and run it.\n\n       The compiling and matching functions recognize various options that are\n       passed as bits in an options argument. There are also some more compli-\n       cated parameters such as custom memory  management  functions  and  re-\n       source  limits  that  are  passed  in \"contexts\" (which are just memory\n       blocks, described below). Simple applications do not need to  make  use\n       of contexts.\n\n       Just-in-time  (JIT)  compiler  support  is an optional feature of PCRE2\n       that can be built in  appropriate  hardware  environments.  It  greatly\n       speeds  up  the matching performance of many patterns. Programs can re-\n       quest that it be used if available by calling pcre2_jit_compile() after\n       a pattern has been successfully compiled by pcre2_compile(). This  does\n       nothing if JIT support is not available.\n\n       More  complicated  programs  might  need  to make use of the specialist\n       functions   pcre2_jit_stack_create(),    pcre2_jit_stack_free(),    and\n       pcre2_jit_stack_assign()  in order to control the JIT code's memory us-\n       age.\n\n       JIT matching is automatically used by pcre2_match() if it is available,\n       unless the PCRE2_NO_JIT option is set. There is also a direct interface\n       for JIT matching, which gives improved performance at  the  expense  of\n       less  sanity  checking. The JIT-specific functions are discussed in the\n       pcre2jit documentation.\n\n       A second matching function, pcre2_dfa_match(), which is  not  Perl-com-\n       patible,  is  also  provided.  This  uses a different algorithm for the\n       matching. The alternative algorithm finds all possible  matches  (at  a\n       given  point  in  the subject), and scans the subject just once (unless\n       there are lookaround assertions). However, this algorithm does not  re-\n       turn  captured substrings. A description of the two matching algorithms\n       and their advantages and disadvantages is given  in  the  pcre2matching\n       documentation. There is no JIT support for pcre2_dfa_match().\n\n       In  addition  to  the  main compiling and matching functions, there are\n       convenience functions for extracting captured substrings from a subject\n       string that has been matched by pcre2_match(). They are:\n\n         pcre2_substring_copy_byname()\n         pcre2_substring_copy_bynumber()\n         pcre2_substring_get_byname()\n         pcre2_substring_get_bynumber()\n         pcre2_substring_list_get()\n         pcre2_substring_length_byname()\n         pcre2_substring_length_bynumber()\n         pcre2_substring_nametable_scan()\n         pcre2_substring_number_from_name()\n\n       pcre2_substring_free() and pcre2_substring_list_free()  are  also  pro-\n       vided,  to  free  memory used for extracted strings. If either of these\n       functions is called with a NULL argument, the function returns  immedi-\n       ately without doing anything.\n\n       The  function  pcre2_substitute()  can be called to match a pattern and\n       return a copy of the subject string with substitutions for  parts  that\n       were matched.\n\n       Functions  whose  names begin with pcre2_serialize_ are used for saving\n       compiled patterns on disc or elsewhere, and reloading them later.\n\n       Finally, there are functions for finding out information about  a  com-\n       piled  pattern  (pcre2_pattern_info()) and about the configuration with\n       which PCRE2 was built (pcre2_config()) and that it is using.\n\n       Functions with names ending with _free() are used  for  freeing  memory\n       blocks  of  various  sorts.  In all cases, if one of these functions is\n       called with a NULL argument, it does nothing.\n\n\nSTRING LENGTHS AND OFFSETS\n\n       The PCRE2 API uses string lengths and  offsets  into  strings  of  code\n       units  in  several  places. These values are always of type PCRE2_SIZE,\n       which is an unsigned integer type, currently always defined as  size_t.\n       The  largest  value  that  can  be  stored  in  such  a  type  (that is\n       ~(PCRE2_SIZE)0) is reserved as a special indicator for  zero-terminated\n       strings  and  unset offsets.  Therefore, the longest string that can be\n       handled is one less than this maximum. Note that string lengths are al-\n       ways given in code units. Only in the 8-bit library is  such  a  length\n       the same as the number of bytes in the string.\n\n\nNEWLINES\n\n       PCRE2 supports five different conventions for indicating line breaks in\n       strings:  a  single  CR (carriage return) character, a single LF (line-\n       feed) character, the two-character sequence CRLF, any of the three pre-\n       ceding, or any Unicode newline sequence. The Unicode newline  sequences\n       are  the  three just mentioned, plus the single characters VT (vertical\n       tab, U+000B), FF (form feed, U+000C), NEL (next line, U+0085), LS (line\n       separator, U+2028), and PS (paragraph separator, U+2029).\n\n       Each of the first three conventions is used by at least  one  operating\n       system as its standard newline sequence. When PCRE2 is built, a default\n       can be specified.  If it is not, the default is set to LF, which is the\n       Unix standard. However, the newline convention can be changed by an ap-\n       plication  when calling pcre2_compile(), or it can be specified by spe-\n       cial text at the start of the pattern itself; this overrides any  other\n       settings.  See the pcre2pattern page for details of the special charac-\n       ter sequences.\n\n       In the PCRE2 documentation the word \"newline\"  is  used  to  mean  \"the\n       character or pair of characters that indicate a line break\". The choice\n       of  newline convention affects the handling of the dot, circumflex, and\n       dollar metacharacters, the handling of #-comments in /x mode, and, when\n       CRLF is a recognized line ending sequence, the match position  advance-\n       ment for a non-anchored pattern. There is more detail about this in the\n       section on pcre2_match() options below.\n\n       The  choice of newline convention does not affect the interpretation of\n       the \\n or \\r escape sequences, nor does it affect what \\R matches; this\n       has its own separate convention.\n\n\nMULTITHREADING\n\n       In a multithreaded application it is important to keep  thread-specific\n       data  separate  from data that can be shared between threads. The PCRE2\n       library code itself is thread-safe: it contains  no  static  or  global\n       variables. The API is designed to be fairly simple for non-threaded ap-\n       plications  while at the same time ensuring that multithreaded applica-\n       tions can use it.\n\n       There are several different blocks of data that are used to pass infor-\n       mation between the application and the PCRE2 libraries.\n\n   The compiled pattern\n\n       A pointer to the compiled form of a pattern is  returned  to  the  user\n       when pcre2_compile() is successful. The data in the compiled pattern is\n       fixed,  and  does not change when the pattern is matched. Therefore, it\n       is thread-safe, that is, the same compiled pattern can be used by  more\n       than one thread simultaneously. For example, an application can compile\n       all its patterns at the start, before forking off multiple threads that\n       use  them.  However,  if the just-in-time (JIT) optimization feature is\n       being used, it needs separate memory stack areas for each  thread.  See\n       the pcre2jit documentation for more details.\n\n       In  a more complicated situation, where patterns are compiled only when\n       they are first needed, but are still shared between  threads,  pointers\n       to  compiled  patterns  must  be protected from simultaneous writing by\n       multiple threads. This is somewhat tricky to do correctly. If you  know\n       that  writing  to  a pointer is atomic in your environment, you can use\n       logic like this:\n\n         Get a read-only (shared) lock (mutex) for pointer\n         if (pointer == NULL)\n           {\n           Get a write (unique) lock for pointer\n           if (pointer == NULL) pointer = pcre2_compile(...\n           }\n         Release the lock\n         Use pointer in pcre2_match()\n\n       Of course, testing for compilation errors should also  be  included  in\n       the code.\n\n       The  reason  for checking the pointer a second time is as follows: Sev-\n       eral threads may have acquired the shared lock and tested  the  pointer\n       for being NULL, but only one of them will be given the write lock, with\n       the  rest kept waiting. The winning thread will compile the pattern and\n       store the result.  After this thread releases the write  lock,  another\n       thread  will  get it, and if it does not retest pointer for being NULL,\n       will recompile the pattern and overwrite the pointer, creating a memory\n       leak and possibly causing other issues.\n\n       In an environment where writing to a pointer may  not  be  atomic,  the\n       above  logic  is not sufficient. The thread that is doing the compiling\n       may be descheduled after writing only part of the pointer, which  could\n       cause  other  threads  to use an invalid value. Instead of checking the\n       pointer itself, a separate \"pointer is valid\" flag (that can be updated\n       atomically) must be used:\n\n         Get a read-only (shared) lock (mutex) for pointer\n         if (!pointer_is_valid)\n           {\n           Get a write (unique) lock for pointer\n           if (!pointer_is_valid)\n             {\n             pointer = pcre2_compile(...\n             pointer_is_valid = TRUE\n             }\n           }\n         Release the lock\n         Use pointer in pcre2_match()\n\n       If JIT is being used, but the JIT compilation is not being done immedi-\n       ately (perhaps waiting to see if the pattern  is  used  often  enough),\n       similar  logic  is required. JIT compilation updates a value within the\n       compiled code block, so a thread must gain unique write access  to  the\n       pointer     before    calling    pcre2_jit_compile().    Alternatively,\n       pcre2_code_copy() or pcre2_code_copy_with_tables() can be used  to  ob-\n       tain  a  private  copy of the compiled code before calling the JIT com-\n       piler.\n\n   Context blocks\n\n       The next main section below introduces the idea of \"contexts\" in  which\n       PCRE2 functions are called. A context is nothing more than a collection\n       of parameters that control the way PCRE2 operates. Grouping a number of\n       parameters together in a context is a convenient way of passing them to\n       a  PCRE2  function without using lots of arguments. The parameters that\n       are stored in contexts are in some sense  \"advanced  features\"  of  the\n       API. Many straightforward applications will not need to use contexts.\n\n       In a multithreaded application, if the parameters in a context are val-\n       ues  that  are  never  changed, the same context can be used by all the\n       threads. However, if any thread needs to change any value in a context,\n       it must make its own thread-specific copy.\n\n   Match blocks\n\n       The matching functions need a block of memory for storing  the  results\n       of a match. This includes details of what was matched, as well as addi-\n       tional  information  such as the name of a (*MARK) setting. Each thread\n       must provide its own copy of this memory.\n\n\nPCRE2 CONTEXTS\n\n       Some PCRE2 functions have a lot of parameters, many of which  are  used\n       only  by  specialist  applications,  for example, those that use custom\n       memory management or non-standard character tables.  To  keep  function\n       argument  lists  at a reasonable size, and at the same time to keep the\n       API extensible, \"uncommon\" parameters are passed to  certain  functions\n       in  a  context instead of directly. A context is just a block of memory\n       that holds the parameter values.  Applications that do not need to  ad-\n       just any of the context parameters can pass NULL when a context pointer\n       is required.\n\n       There  are  three different types of context: a general context that is\n       relevant for several PCRE2 operations, a compile-time  context,  and  a\n       match-time context.\n\n   The general context\n\n       At  present,  this context just contains pointers to (and data for) ex-\n       ternal memory management functions that are called from several  places\n       in  the  PCRE2  library.  The  context  is  named `general' rather than\n       specifically `memory' because in future other fields may be  added.  If\n       you  do not want to supply your own custom memory management functions,\n       you do not need to bother with a general context. A general context  is\n       created by:\n\n       pcre2_general_context *pcre2_general_context_create(\n         void *(*private_malloc)(PCRE2_SIZE, void *),\n         void (*private_free)(void *, void *), void *memory_data);\n\n       The  two  function pointers specify custom memory management functions,\n       whose prototypes are:\n\n         void *private_malloc(PCRE2_SIZE, void *);\n         void  private_free(void *, void *);\n\n       Whenever code in PCRE2 calls these functions, the final argument is the\n       value of memory_data. Either of the first two arguments of the creation\n       function may be NULL, in which case the system memory management  func-\n       tions  malloc()  and free() are used. (This is not currently useful, as\n       there are no other fields in a general context,  but  in  future  there\n       might  be.)  The private_malloc() function is used (if supplied) to ob-\n       tain memory for storing the context, and all three values are saved  as\n       part of the context.\n\n       Whenever  PCRE2  creates a data block of any kind, the block contains a\n       pointer to the free() function that matches the malloc() function  that\n       was  used.  When  the  time  comes  to free the block, this function is\n       called.\n\n       A general context can be copied by calling:\n\n       pcre2_general_context *pcre2_general_context_copy(\n         pcre2_general_context *gcontext);\n\n       The memory used for a general context should be freed by calling:\n\n       void pcre2_general_context_free(pcre2_general_context *gcontext);\n\n       If this function is passed a  NULL  argument,  it  returns  immediately\n       without doing anything.\n\n   The compile context\n\n       A  compile context is required if you want to provide an external func-\n       tion for stack checking during compilation or  to  change  the  default\n       values of any of the following compile-time parameters:\n\n         What \\R matches (Unicode newlines or CR, LF, CRLF only)\n         PCRE2's character tables\n         The newline character sequence\n         The compile time nested parentheses limit\n         The maximum length of the pattern string\n         The extra options bits (none set by default)\n         Which performance optimizations the compiler should apply\n\n       A  compile context is also required if you are using custom memory man-\n       agement.  If none of these apply, just pass NULL as the  context  argu-\n       ment of pcre2_compile().\n\n       A  compile context is created, copied, and freed by the following func-\n       tions:\n\n       pcre2_compile_context *pcre2_compile_context_create(\n         pcre2_general_context *gcontext);\n\n       pcre2_compile_context *pcre2_compile_context_copy(\n         pcre2_compile_context *ccontext);\n\n       void pcre2_compile_context_free(pcre2_compile_context *ccontext);\n\n       A compile context is created with default values  for  its  parameters.\n       These can be changed by calling the following functions, which return 0\n       on success, or PCRE2_ERROR_BADDATA if invalid data is detected.\n\n       int pcre2_set_bsr(pcre2_compile_context *ccontext,\n         uint32_t value);\n\n       The  value  must  be PCRE2_BSR_ANYCRLF, to specify that \\R matches only\n       CR, LF, or CRLF, or PCRE2_BSR_UNICODE, to specify that \\R  matches  any\n       Unicode line ending sequence. The value is used by the JIT compiler and\n       by   the   two   interpreted   matching  functions,  pcre2_match()  and\n       pcre2_dfa_match().\n\n       int pcre2_set_character_tables(pcre2_compile_context *ccontext,\n         const uint8_t *tables);\n\n       The value must be the result of a  call  to  pcre2_maketables(),  whose\n       only argument is a general context. This function builds a set of char-\n       acter tables in the current locale.\n\n       int pcre2_set_compile_extra_options(pcre2_compile_context *ccontext,\n         uint32_t extra_options);\n\n       As  PCRE2  has developed, almost all the 32 option bits that are avail-\n       able in the options argument of pcre2_compile() have been used  up.  To\n       avoid  running  out, the compile context contains a set of extra option\n       bits which are used for some newer, assumed rarer, options. This  func-\n       tion  sets  those bits. It always sets all the bits (either on or off).\n       It does not modify any existing setting. The available options are  de-\n       fined in the section entitled \"Extra compile options\" below.\n\n       int pcre2_set_max_pattern_length(pcre2_compile_context *ccontext,\n         PCRE2_SIZE value);\n\n       This  sets a maximum length, in code units, for any pattern string that\n       is compiled with this context. If the pattern is longer,  an  error  is\n       generated.   This facility is provided so that applications that accept\n       patterns from external sources can limit their size. The default is the\n       largest number that a PCRE2_SIZE variable can  hold,  which  is  effec-\n       tively unlimited.\n\n       int pcre2_set_max_pattern_compiled_length(\n         pcre2_compile_context *ccontext, PCRE2_SIZE value);\n\n       This  sets  a maximum size, in bytes, for the memory needed to hold the\n       compiled version of a pattern that is compiled with  this  context.  If\n       the  pattern needs more memory, an error is generated. This facility is\n       provided so  that  applications  that  accept  patterns  from  external\n       sources  can  limit  the  amount of memory they use. The default is the\n       largest number that a PCRE2_SIZE variable can  hold,  which  is  effec-\n       tively unlimited.\n\n       int pcre2_set_max_varlookbehind(pcre2_compile_contest *ccontext,\n         uint32_t value);\n\n       This  sets  a  maximum length for the number of characters matched by a\n       variable-length lookbehind assertion. The default is set when PCRE2  is\n       built,  with  the ultimate default being 255, the same as Perl. Lookbe-\n       hind assertions without a bounding length are not supported.\n\n       int pcre2_set_newline(pcre2_compile_context *ccontext,\n         uint32_t value);\n\n       This specifies which characters or character sequences are to be recog-\n       nized as newlines. The value must be one of PCRE2_NEWLINE_CR  (carriage\n       return only), PCRE2_NEWLINE_LF (linefeed only), PCRE2_NEWLINE_CRLF (the\n       two-character  sequence  CR followed by LF), PCRE2_NEWLINE_ANYCRLF (any\n       of the above), PCRE2_NEWLINE_ANY (any  Unicode  newline  sequence),  or\n       PCRE2_NEWLINE_NUL (the NUL character, that is a binary zero).\n\n       A pattern can override the value set in the compile context by starting\n       with a sequence such as (*CRLF). See the pcre2pattern page for details.\n\n       When  a  pattern  is  compiled  with  the  PCRE2_EXTENDED  or PCRE2_EX-\n       TENDED_MORE option, the newline convention affects the  recognition  of\n       the  end  of internal comments starting with #. The value is saved with\n       the compiled pattern for subsequent use by the JIT compiler and by  the\n       two     interpreted     matching     functions,    pcre2_match()    and\n       pcre2_dfa_match().\n\n       int pcre2_set_parens_nest_limit(pcre2_compile_context *ccontext,\n         uint32_t value);\n\n       This parameter adjusts the limit, set  when  PCRE2  is  built  (default\n       250),  on  the  depth  of  parenthesis nesting in a pattern. This limit\n       stops rogue patterns using up too much system  stack  when  being  com-\n       piled.  The limit applies to parentheses of all kinds, not just captur-\n       ing parentheses.\n\n       int pcre2_set_compile_recursion_guard(pcre2_compile_context *ccontext,\n         int (*guard_function)(uint32_t, void *), void *user_data);\n\n       There is at least one application that runs PCRE2 in threads with  very\n       limited  system  stack,  where running out of stack is to be avoided at\n       all costs. The parenthesis limit above cannot take account of how  much\n       stack  is  actually  available during compilation. For a finer control,\n       you can supply a  function  that  is  called  whenever  pcre2_compile()\n       starts  to compile a parenthesized part of a pattern. This function can\n       check the actual stack size (or anything else  that  it  wants  to,  of\n       course).\n\n       The  first  argument to the callout function gives the current depth of\n       nesting, and the second is user data that is set up by the  last  argu-\n       ment   of  pcre2_set_compile_recursion_guard().  The  callout  function\n       should return zero if all is well, or non-zero to force an error.\n\n       int pcre2_set_optimize(pcre2_compile_context *ccontext,\n         uint32_t directive);\n\n       PCRE2 can apply various performance optimizations  during  compilation,\n       in  order to make matching faster. For example, the compiler might con-\n       vert  some  regex  constructs  into  an  equivalent   construct   which\n       pcre2_match()  can  execute faster. By default, all available optimiza-\n       tions are enabled. However, in rare cases, one might  wish  to  disable\n       specific optimizations. For example, if it is known that some optimiza-\n       tions  cannot benefit a certain regex, it might be desirable to disable\n       them, in order to speed up compilation.\n\n       The permitted values of directive are as follows:\n\n         PCRE2_OPTIMIZATION_FULL\n\n       Enable all optional performance  optimizations.  This  is  the  default\n       value.\n\n         PCRE2_OPTIMIZATION_NONE\n\n       Disable all optional performance optimizations.\n\n         PCRE2_AUTO_POSSESS\n         PCRE2_AUTO_POSSESS_OFF\n\n       Enable/disable  \"auto-possessification\" of variable quantifiers such as\n       * and +.  This optimization, for example, turns a+b into a++b in  order\n       to  avoid  backtracks into a+ that can never be successful. However, if\n       callouts are in use, auto-possessification means that some callouts are\n       never taken. You can disable this optimization if you want the matching\n       functions to do a full, unoptimized search and run all the callouts.\n\n         PCRE2_DOTSTAR_ANCHOR\n         PCRE2_DOTSTAR_ANCHOR_OFF\n\n       Enable/disable an optimization that is applied when  .*  is  the  first\n       significant  item in a top-level branch of a pattern, and all the other\n       branches also start with .* or with \\A or \\G or ^. Such  a  pattern  is\n       automatically  anchored if PCRE2_DOTALL is set for all the .* items and\n       PCRE2_MULTILINE is not set for any ^ items. Otherwise,  the  fact  that\n       any  match must start either at the start of the subject or following a\n       newline is remembered. Like other optimizations, this can  cause  call-\n       outs to be skipped.\n\n       Dotstar  anchor  optimization is automatically disabled for .* if it is\n       inside an atomic group or a capture group that  is  the  subject  of  a\n       backreference, or if the pattern contains (*PRUNE) or (*SKIP).\n\n         PCRE2_START_OPTIMIZE\n         PCRE2_START_OPTIMIZE_OFF\n\n       Enable/disable optimizations which cause matching functions to scan the\n       subject string for specific code unit values before attempting a match.\n       For  example, if it is known that an unanchored match must start with a\n       specific value, the matching code searches the subject for that  value,\n       and  fails  immediately  if it cannot find it, without actually running\n       the main matching function. This means that  a  special  item  such  as\n       (*COMMIT)  at  the  start  of a pattern is not considered until after a\n       suitable starting point for the match has been found.  Also, when call-\n       outs or (*MARK) items are in use, these  \"start-up\"  optimizations  can\n       cause  them  to  be  skipped if the pattern is never actually used. The\n       start-up optimizations are in effect a pre-scan  of  the  subject  that\n       takes place before the pattern is run.\n\n       Disabling start-up optimizations ensures that in cases where the result\n       is  \"no match\", the callouts do occur, and that items such as (*COMMIT)\n       and (*MARK) are considered at every possible starting position  in  the\n       subject string.\n\n       Disabling  start-up  optimizations may change the outcome of a matching\n       operation.  Consider the pattern\n\n         (*COMMIT)ABC\n\n       When this is compiled, PCRE2 records the fact that a match  must  start\n       with  the  character  \"A\".  Suppose the subject string is \"DEFABC\". The\n       start-up optimization scans along the subject, finds \"A\" and  runs  the\n       first  match attempt from there. The (*COMMIT) item means that the pat-\n       tern must match the current starting position, which in this  case,  it\n       does. However, if the same match is run without start-up optimizations,\n       the  initial  scan  along the subject string does not happen. The first\n       match attempt is run starting from \"D\" and when this  fails,  (*COMMIT)\n       prevents  any further matches being tried, so the overall result is \"no\n       match\".\n\n       Another start-up optimization makes use  of  a  minimum  length  for  a\n       matching subject, which is recorded when possible. Consider the pattern\n\n         (*MARK:1)B(*MARK:2)(X|Y)\n\n       The  minimum  length  for  a match is two characters. If the subject is\n       \"XXBB\", the \"starting character\" optimization skips \"XX\", then tries to\n       match \"BB\", which is long enough. In the process, (*MARK:2) is  encoun-\n       tered  and  remembered.  When  the match attempt fails, the next \"B\" is\n       found, but there is only one character left, so there are no  more  at-\n       tempts,  and  \"no  match\"  is returned with the \"last mark seen\" set to\n       \"2\". Without start-up optimizations,  however,  matches  are  tried  at\n       every  possible starting position, including at the end of the subject,\n       where (*MARK:1) is encountered, but there is no \"B\", so the \"last  mark\n       seen\"  that  is returned is \"1\". In this case, the optimizations do not\n       affect the overall match result, which is still \"no match\", but they do\n       affect the auxiliary information that is returned.\n\n   The match context\n\n       A match context is required if you want to:\n\n         Set up a callout function\n         Set an offset limit for matching an unanchored pattern\n         Change the limit on the amount of heap used when matching\n         Change the backtracking match limit\n         Change the backtracking depth limit\n         Set custom memory management specifically for the match\n\n       If none of these apply, just pass  NULL  as  the  context  argument  of\n       pcre2_match(), pcre2_dfa_match(), or pcre2_jit_match().\n\n       A  match  context  is created, copied, and freed by the following func-\n       tions:\n\n       pcre2_match_context *pcre2_match_context_create(\n         pcre2_general_context *gcontext);\n\n       pcre2_match_context *pcre2_match_context_copy(\n         pcre2_match_context *mcontext);\n\n       void pcre2_match_context_free(pcre2_match_context *mcontext);\n\n       A match context is created with  default  values  for  its  parameters.\n       These can be changed by calling the following functions, which return 0\n       on success, or PCRE2_ERROR_BADDATA if invalid data is detected.\n\n       int pcre2_set_callout(pcre2_match_context *mcontext,\n         int (*callout_function)(pcre2_callout_block *, void *),\n         void *callout_data);\n\n       This  sets  up a callout function for PCRE2 to call at specified points\n       during a matching operation. Details are given in the pcre2callout doc-\n       umentation.\n\n       int pcre2_set_substitute_callout(pcre2_match_context *mcontext,\n         int (*callout_function)(pcre2_substitute_callout_block *, void *),\n         void *callout_data);\n\n       This sets up a callout function for PCRE2 to call after each  substitu-\n       tion made by pcre2_substitute(). Details are given in the section enti-\n       tled \"Creating a new string with substitutions\" below.\n\n       int pcre2_set_substitute_case_callout(pcre2_match_context *mcontext,\n         PCRE2_SIZE (*callout_function)(PCRE2_SPTR, PCRE2_SIZE,\n                                        PCRE2_UCHAR *, PCRE2_SIZE,\n                                        int, void *),\n         void *callout_data);\n\n       This  sets up a callout function for PCRE2 to call when performing case\n       transformations inside pcre2_substitute(). Details  are  given  in  the\n       section entitled \"Creating a new string with substitutions\" below.\n\n       int pcre2_set_offset_limit(pcre2_match_context *mcontext,\n         PCRE2_SIZE value);\n\n       The  offset_limit parameter limits how far an unanchored search can ad-\n       vance in the subject string. The  default  value  is  PCRE2_UNSET.  The\n       pcre2_match()  and  pcre2_dfa_match()  functions return PCRE2_ERROR_NO-\n       MATCH if a match with a starting point before or at the given offset is\n       not found. The pcre2_substitute() function makes no more substitutions.\n\n       For example, if the pattern /abc/ is matched against \"123abc\"  with  an\n       offset  limit  less  than 3, the result is PCRE2_ERROR_NOMATCH. A match\n       can never be  found  if  the  startoffset  argument  of  pcre2_match(),\n       pcre2_dfa_match(),  or  pcre2_substitute()  is  greater than the offset\n       limit set in the match context.\n\n       When using this facility, you must set the  PCRE2_USE_OFFSET_LIMIT  op-\n       tion when calling pcre2_compile() so that when JIT is in use, different\n       code  can  be  compiled. If a match is started with a non-default match\n       limit when PCRE2_USE_OFFSET_LIMIT is not set, an error is generated.\n\n       The offset limit facility can be used to track progress when  searching\n       large  subject  strings or to limit the extent of global substitutions.\n       See also the PCRE2_FIRSTLINE option, which requires a  match  to  start\n       before  or  at  the first newline that follows the start of matching in\n       the subject. If this is set with an offset limit, a match must occur in\n       the first line and also  within  the  offset  limit.  In  other  words,\n       whichever limit comes first is used.\n\n       int pcre2_set_heap_limit(pcre2_match_context *mcontext,\n         uint32_t value);\n\n       The heap_limit parameter specifies, in units of kibibytes (1024 bytes),\n       the  maximum  amount  of heap memory that pcre2_match() may use to hold\n       backtracking information when running an interpretive match. This limit\n       also applies to pcre2_dfa_match(), which may use the heap when process-\n       ing patterns with a lot of nested pattern recursion or  lookarounds  or\n       atomic groups. This limit does not apply to matching with the JIT opti-\n       mization,  which  has  its  own  memory  control  arrangements (see the\n       pcre2jit documentation for more details). If the limit is reached,  the\n       negative  error  code  PCRE2_ERROR_HEAPLIMIT  is  returned. The default\n       limit can be set when PCRE2 is built; if it is not, the default is  set\n       very large and is essentially unlimited.\n\n       A value for the heap limit may also be supplied by an item at the start\n       of a pattern of the form\n\n         (*LIMIT_HEAP=ddd)\n\n       where  ddd  is a decimal number. However, such a setting is ignored un-\n       less ddd is less than the limit set by the caller of pcre2_match()  or,\n       if no such limit is set, less than the default.\n\n       The  pcre2_match() function always needs some heap memory, so setting a\n       value of zero guarantees a \"heap limit exceeded\" error. Details of  how\n       pcre2_match()  uses  the  heap are given in the pcre2perform documenta-\n       tion.\n\n       For pcre2_dfa_match(), a vector on the system stack is used  when  pro-\n       cessing  pattern recursions, lookarounds, or atomic groups, and only if\n       this is not big enough is heap memory used. In  this  case,  setting  a\n       value of zero disables the use of the heap.\n\n       int pcre2_set_match_limit(pcre2_match_context *mcontext,\n         uint32_t value);\n\n       The match_limit parameter provides a means of preventing PCRE2 from us-\n       ing  up  too many computing resources when processing patterns that are\n       not going to match, but which have a very large number of possibilities\n       in their search trees. The classic  example  is  a  pattern  that  uses\n       nested unlimited repeats.\n\n       There  is an internal counter in pcre2_match() that is incremented each\n       time round its main matching loop. If  this  value  reaches  the  match\n       limit, pcre2_match() returns the negative value PCRE2_ERROR_MATCHLIMIT.\n       This  has  the  effect  of limiting the amount of backtracking that can\n       take place. For patterns that are not anchored, the count restarts from\n       zero for each position in the subject string. This limit  also  applies\n       to pcre2_dfa_match(), though the counting is done in a different way.\n\n       When  pcre2_match()  is  called  with  a  pattern that was successfully\n       processed by pcre2_jit_compile(), the way in which matching is executed\n       is entirely different. However, there is still the possibility of  run-\n       away matching that goes on for a very long time, and so the match_limit\n       value  is  also used in this case (but in a different way) to limit how\n       long the matching can continue.\n\n       The default value for the limit can be set when PCRE2 is built; the de-\n       fault is 10 million, which handles all but the most  extreme  cases.  A\n       value  for the match limit may also be supplied by an item at the start\n       of a pattern of the form\n\n         (*LIMIT_MATCH=ddd)\n\n       where ddd is a decimal number. However, such a setting is  ignored  un-\n       less  ddd  is less than the limit set by the caller of pcre2_match() or\n       pcre2_dfa_match() or, if no such limit is set, less than the default.\n\n       int pcre2_set_depth_limit(pcre2_match_context *mcontext,\n         uint32_t value);\n\n       This  parameter  limits   the   depth   of   nested   backtracking   in\n       pcre2_match().   Each time a nested backtracking point is passed, a new\n       memory frame is used to remember the state of matching at  that  point.\n       Thus,  this  parameter  indirectly  limits the amount of memory that is\n       used in a match. However, because the size of each memory frame depends\n       on the number of capturing parentheses, the actual memory limit  varies\n       from  pattern to pattern. This limit was more useful in versions before\n       10.30, where function recursion was used for backtracking.\n\n       The depth limit is not relevant, and is ignored, when matching is  done\n       using JIT compiled code. However, it is supported by pcre2_dfa_match(),\n       which  uses it to limit the depth of nested internal recursive function\n       calls that implement atomic groups, lookaround assertions, and  pattern\n       recursions. This limits, indirectly, the amount of system stack that is\n       used.  It  was  more useful in versions before 10.32, when stack memory\n       was used for local workspace vectors for recursive function calls. From\n       version 10.32, only local variables are allocated on the stack  and  as\n       each call uses only a few hundred bytes, even a small stack can support\n       quite a lot of recursion.\n\n       If  the depth of internal recursive function calls is great enough, lo-\n       cal workspace vectors are allocated on the heap from version 10.32  on-\n       wards,  so  the  depth  limit also indirectly limits the amount of heap\n       memory that is used. A recursive pattern such as /(.(?2))((?1)|)/, when\n       matched to a very long string using pcre2_dfa_match(), can use a  great\n       deal  of memory. However, it is probably better to limit heap usage di-\n       rectly by calling pcre2_set_heap_limit().\n\n       The default value for the depth limit can be set when PCRE2  is  built;\n       if  it  is not, the default is set to the same value as the default for\n       the  match  limit.   If  the  limit  is  exceeded,   pcre2_match()   or\n       pcre2_dfa_match() returns PCRE2_ERROR_DEPTHLIMIT. A value for the depth\n       limit  may also be supplied by an item at the start of a pattern of the\n       form\n\n         (*LIMIT_DEPTH=ddd)\n\n       where ddd is a decimal number. However, such a setting is  ignored  un-\n       less  ddd  is less than the limit set by the caller of pcre2_match() or\n       pcre2_dfa_match() or, if no such limit is set, less than the default.\n\n\nCHECKING BUILD-TIME OPTIONS\n\n       int pcre2_config(uint32_t what, void *where);\n\n       The function pcre2_config() makes it possible for  a  PCRE2  client  to\n       find  the  value  of  certain  configuration parameters and to discover\n       which optional features have been compiled into the PCRE2 library.  The\n       pcre2build documentation has more details about these features.\n\n       The  first  argument  for pcre2_config() specifies which information is\n       required. The second argument is a pointer to memory into which the in-\n       formation is placed. If NULL is passed, the function returns the amount\n       of memory that is needed for the requested information. For calls  that\n       return  numerical  values, the value is in bytes; when requesting these\n       values, where should point to appropriately aligned memory.  For  calls\n       that  return  strings,  the required length is given in code units, not\n       counting the terminating zero.\n\n       When requesting information, the returned value from pcre2_config()  is\n       non-negative  on success, or the negative error code PCRE2_ERROR_BADOP-\n       TION if the value in the first argument is not recognized. The  follow-\n       ing information is available:\n\n         PCRE2_CONFIG_BSR\n\n       The  output  is a uint32_t integer whose value indicates what character\n       sequences the \\R  escape  sequence  matches  by  default.  A  value  of\n       PCRE2_BSR_UNICODE  means  that  \\R  matches any Unicode line ending se-\n       quence; a value of PCRE2_BSR_ANYCRLF means that \\R matches only CR, LF,\n       or CRLF. The default can be overridden when a pattern is compiled.\n\n         PCRE2_CONFIG_COMPILED_WIDTHS\n\n       The output is a uint32_t integer whose lower bits indicate  which  code\n       unit  widths  were  selected  when PCRE2 was built. The 1-bit indicates\n       8-bit support, and the 2-bit and 4-bit indicate 16-bit and 32-bit  sup-\n       port, respectively.\n\n         PCRE2_CONFIG_DEPTHLIMIT\n\n       The  output  is a uint32_t integer that gives the default limit for the\n       depth of nested backtracking in pcre2_match() or the  depth  of  nested\n       recursions,  lookarounds,  and atomic groups in pcre2_dfa_match(). Fur-\n       ther details are given with pcre2_set_depth_limit() above.\n\n         PCRE2_CONFIG_EFFECTIVE_LINKSIZE\n\n       The output is a uint32_t integer that contains the number of bytes  the\n       library  uses for internal linkage in compiled regular expressions. Its\n       value is derived from the value that was provided  at  build  time  and\n       that is described below by PCRE2_CONFIG_LINKSIZE.\n\n         PCRE2_CONFIG_HEAPLIMIT\n\n       The  output is a uint32_t integer that gives, in kibibytes, the default\n       limit  for  the  amount  of  heap  memory  used  by  pcre2_match()   or\n       pcre2_dfa_match().      Further      details     are     given     with\n       pcre2_set_heap_limit() above.\n\n         PCRE2_CONFIG_JIT\n\n       The output is a uint32_t integer that is set  to  one  if  support  for\n       just-in-time  compiling is included in the library; otherwise it is set\n       to zero. Note that having the support in the library does not guarantee\n       that JIT will be used for any given match, and neither does it  guaran-\n       tee  that  JIT will actually be able to function, because it may not be\n       able to allocate executable memory in some  environments.  There  is  a\n       special call to pcre2_jit_compile() that can be used to check this. See\n       the pcre2jit documentation for more details.\n\n         PCRE2_CONFIG_JITTARGET\n\n       The where argument should point to a code-unit-aligned buffer. All pre-\n       vious  versions  of  PCRE2 have required no more than 128 code units of\n       buffer capacity. However, this requirement  is  not  guaranteed  to  be\n       maintained,  so  applications should call pcre2_config() with where set\n       to NULL to receive the required buffer size, then assert or allocate  a\n       suitably-size buffer for a second call to pcre2_config(). The buffer is\n       filled  with  a  string  that contains the name of the architecture for\n       which the JIT compiler is configured at  build  time,  for  example,  a\n       64-bit ARM CPU that supports the Armv8.1 extension writes \"ARM-64 (LSE)\n       64bit  (little  endian  + unaligned)\". If JIT support is not available,\n       PCRE2_ERROR_BADOPTION is returned; otherwise the number of  code  units\n       used  is  returned.  This is the length of the string plus one unit for\n       the terminating zero.\n\n         PCRE2_CONFIG_LINKSIZE\n\n       The output is a uint32_t integer that contains the number of bytes  the\n       library  was instructed to use for internal linkage in compiled regular\n       expressions.  When PCRE2 is configured, the value can be set to  2,  3,\n       or 4, with the default being 2 for most libraries.\n\n       The  actual  number of bytes used depends on the size of the code units\n       that the library supports and can be  higher.  See  PCRE2_CONFIG_EFFEC-\n       TIVE_LINKSIZE above for details.\n\n       The default value of 2 for the 8-bit and 16-bit libraries is sufficient\n       for  all but the most massive patterns, since it allows the size of the\n       compiled pattern to be up to 65535  code  units.  Larger  values  allow\n       larger  regular  expressions to be compiled by those two libraries, but\n       at the expense of slower matching.\n\n         PCRE2_CONFIG_MATCHLIMIT\n\n       The output is a uint32_t integer that gives the default match limit for\n       pcre2_match(). Further details are given  with  pcre2_set_match_limit()\n       above.\n\n         PCRE2_CONFIG_NEWLINE\n\n       The  output  is  a  uint32_t  integer whose value specifies the default\n       character sequence that is recognized as meaning \"newline\". The  values\n       are:\n\n         PCRE2_NEWLINE_CR       Carriage return (CR)\n         PCRE2_NEWLINE_LF       Linefeed (LF)\n         PCRE2_NEWLINE_CRLF     Carriage return, linefeed (CRLF)\n         PCRE2_NEWLINE_ANY      Any Unicode line ending\n         PCRE2_NEWLINE_ANYCRLF  Any of CR, LF, or CRLF\n         PCRE2_NEWLINE_NUL      The NUL character (binary zero)\n\n       The  default  should  normally  correspond to the standard sequence for\n       your operating system.\n\n         PCRE2_CONFIG_NEVER_BACKSLASH_C\n\n       The output is a uint32_t integer that is set to one if the  use  of  \\C\n       was  permanently  disabled when PCRE2 was built; otherwise it is set to\n       zero.\n\n         PCRE2_CONFIG_PARENSLIMIT\n\n       The output is a uint32_t integer that gives the maximum depth of  nest-\n       ing of parentheses (of any kind) in a pattern. This limit is imposed to\n       cap  the  amount of system stack used when a pattern is compiled. It is\n       specified when PCRE2 is built; the default is 250. This limit does  not\n       take into account the stack that may already be used by the calling ap-\n       plication.   For  finer  control  over  compilation  stack  usage,  see\n       pcre2_set_compile_recursion_guard().\n\n         PCRE2_CONFIG_STACKRECURSE\n\n       This parameter is obsolete and should not be used in new code. The out-\n       put is a uint32_t integer that is always set to zero.\n\n         PCRE2_CONFIG_TABLES_LENGTH\n\n       The output is a uint32_t integer that gives the length of PCRE2's char-\n       acter processing tables in bytes. For details of these tables  see  the\n       section on locale support below.\n\n         PCRE2_CONFIG_UNICODE_VERSION\n\n       The where argument should point to a code-unit-aligned buffer. All pre-\n       vious  versions  of  PCRE2  have required no more than 24 code units of\n       buffer capacity. However, applications should call pcre2_config()  with\n       where  set  to NULL to receive the required buffer size, then assert or\n       allocate a suitably-size buffer for a second call to pcre2_config(). If\n       PCRE2 has been compiled without Unicode support, the buffer  is  filled\n       with  the  text \"Unicode not supported\". Otherwise, the Unicode version\n       string (for example, \"8.0.0\") is written. The number of code units used\n       is returned. This is the length of the string plus  one  unit  for  the\n       terminating zero.\n\n         PCRE2_CONFIG_UNICODE\n\n       The  output is a uint32_t integer that is set to one if Unicode support\n       is available; otherwise it is set to zero. Unicode support implies  UTF\n       support.\n\n         PCRE2_CONFIG_VERSION\n\n       The where argument should point to a code-unit-aligned buffer. All pre-\n       vious  versions  of  PCRE2  have required no more than 24 code units of\n       buffer capacity. However, applications should call pcre2_config()  with\n       where  set  to NULL to receive the required buffer size, then assert or\n       allocate a suitably-size buffer for a second  call  to  pcre2_config().\n       The  buffer  is  filled with the PCRE2 version string, zero-terminated.\n       The number of code units used is returned. This is the  length  of  the\n       string plus one unit for the terminating zero.\n\n\nCOMPILING A PATTERN\n\n       pcre2_code *pcre2_compile(PCRE2_SPTR pattern, PCRE2_SIZE length,\n         uint32_t options, int *errorcode, PCRE2_SIZE *erroroffset,\n         pcre2_compile_context *ccontext);\n\n       void pcre2_code_free(pcre2_code *code);\n\n       pcre2_code *pcre2_code_copy(const pcre2_code *code);\n\n       pcre2_code *pcre2_code_copy_with_tables(const pcre2_code *code);\n\n       The  pcre2_compile() function compiles a pattern into an internal form.\n       The pattern is defined by a pointer to a string of  code  units  and  a\n       length in code units. If the pattern is zero-terminated, the length can\n       be  specified  as  PCRE2_ZERO_TERMINATED. A NULL pattern pointer with a\n       length of zero is treated as an empty  string  (NULL  with  a  non-zero\n       length  causes  an  error  return). The function returns a pointer to a\n       block of memory that contains the compiled pattern and related data, or\n       NULL if an error occurred.\n\n       If the compile context argument ccontext is NULL, memory for  the  com-\n       piled  pattern  is  obtained  by calling malloc(). Otherwise, it is ob-\n       tained from the same memory function that was used for the compile con-\n       text. The caller must free the memory by calling pcre2_code_free() when\n       it is no longer needed.  If pcre2_code_free() is called with a NULL ar-\n       gument, it returns immediately, without doing anything.\n\n       The function pcre2_code_copy() makes a copy of the compiled code in new\n       memory, using the same memory allocator as was used for  the  original.\n       However,  if  the  code has been processed by the JIT compiler (see be-\n       low), the JIT information cannot be copied (because it is  position-de-\n       pendent).   The  new copy can initially be used only for non-JIT match-\n       ing, though it can be passed to  pcre2_jit_compile()  if  required.  If\n       pcre2_code_copy() is called with a NULL argument, it returns NULL.\n\n       The pcre2_code_copy() function provides a way for individual threads in\n       a  multithreaded  application  to acquire a private copy of shared com-\n       piled code.  However, it does not make a copy of the  character  tables\n       used  by  the compiled pattern; the new pattern code points to the same\n       tables as the original code.  (See \"Locale Support\" below  for  details\n       of  these  character  tables.) In many applications the same tables are\n       used throughout, so this behaviour is appropriate. Nevertheless,  there\n       are occasions when a copy of a compiled pattern and the relevant tables\n       are  needed.  The pcre2_code_copy_with_tables() provides this facility.\n       Copies of both the code and the tables are  made,  with  the  new  code\n       pointing  to the new tables. The memory for the new tables is automati-\n       cally freed when pcre2_code_free() is called for the new  copy  of  the\n       compiled  code.  If pcre2_code_copy_with_tables() is called with a NULL\n       argument, it returns NULL.\n\n       NOTE: When one of the matching functions is  called,  pointers  to  the\n       compiled pattern and the subject string are set in the match data block\n       so  that  they  can be referenced by the substring extraction functions\n       after a successful match.  After running a match, you must not  free  a\n       compiled  pattern or a subject string until after all operations on the\n       match data block have taken place, unless, in the case of  the  subject\n       string,  you  have used the PCRE2_COPY_MATCHED_SUBJECT option, which is\n       described in the section entitled \"Option bits for  pcre2_match()\"  be-\n       low.\n\n       The  options argument for pcre2_compile() contains various bit settings\n       that affect the compilation. It should be zero if none of them are  re-\n       quired.  The  available  options  are described below. Some of them (in\n       particular, those that are compatible with Perl,  but  some  others  as\n       well)  can  also  be set and unset from within the pattern (see the de-\n       tailed description in the pcre2pattern documentation).\n\n       For those options that can be different in different parts of the  pat-\n       tern,  the contents of the options argument specifies their settings at\n       the start of compilation. The  PCRE2_ANCHORED,  PCRE2_ENDANCHORED,  and\n       PCRE2_NO_UTF_CHECK  options  can be set at the time of matching as well\n       as at compile time.\n\n       Some additional options and less frequently required compile-time para-\n       meters (for example, the newline setting) can be provided in a  compile\n       context (as described above).\n\n       If errorcode or erroroffset is NULL, pcre2_compile() returns NULL imme-\n       diately.  Otherwise,  the  variables to which these point are set to an\n       error code and an offset (number of code units) within the pattern, re-\n       spectively, when pcre2_compile() returns NULL because a compilation er-\n       ror has occurred.\n\n       There are over 100 positive error codes that pcre2_compile() may return\n       if it finds an error in the pattern. There are also some negative error\n       codes that are used for invalid UTF strings when validity  checking  is\n       in   force.   These   are  the  same  as  given  by  pcre2_match()  and\n       pcre2_dfa_match(), and are described in the pcre2unicode documentation.\n       There is no separate documentation for the positive  error  codes,  be-\n       cause  the  textual  error  messages  that  are obtained by calling the\n       pcre2_get_error_message() function (see \"Obtaining a textual error mes-\n       sage\" below) should be  self-explanatory.  Macro  names  starting  with\n       PCRE2_ERROR_  are defined for both positive and negative error codes in\n       pcre2.h. When compilation is successful errorcode is  set  to  a  value\n       that  returns  the message \"no error\" if passed to pcre2_get_error_mes-\n       sage().\n\n       The value returned in erroroffset is an indication of where in the pat-\n       tern an error occurred. When there is no error,  zero  is  returned.  A\n       non-zero  value  is  not  necessarily the furthest point in the pattern\n       that was read. For example, after the error  \"lookbehind  assertion  is\n       not  fixed length\", the error offset points to the start of the failing\n       assertion. For an invalid UTF-8 or UTF-16 string, the offset is that of\n       the first code unit of the failing character.\n\n       Some errors are not detected until the whole pattern has been  scanned;\n       in  these  cases,  the offset passed back is the length of the pattern.\n       Note that the offset is in code units, not characters, even  in  a  UTF\n       mode. It may sometimes point into the middle of a UTF-8 or UTF-16 char-\n       acter.\n\n       This  code  fragment shows a typical straightforward call to pcre2_com-\n       pile():\n\n         pcre2_code *re;\n         PCRE2_SIZE erroffset;\n         int errorcode;\n         re = pcre2_compile(\n           \"^A.*Z\",                /* the pattern */\n           PCRE2_ZERO_TERMINATED,  /* the pattern is zero-terminated */\n           0,                      /* default options */\n           &errorcode,             /* for error code */\n           &erroffset,             /* for error offset */\n           NULL);                  /* no compile context */\n\n\n   Main compile options\n\n       The following names for option bits are defined in the  pcre2.h  header\n       file:\n\n         PCRE2_ANCHORED\n\n       If this bit is set, the pattern is forced to be \"anchored\", that is, it\n       is  constrained to match only at the first matching point in the string\n       that is being searched (the \"subject string\"). This effect can also  be\n       achieved  by appropriate constructs in the pattern itself, which is the\n       only way to do it in Perl.\n\n         PCRE2_ALLOW_EMPTY_CLASS\n\n       By default, for compatibility with Perl, a closing square bracket  that\n       immediately  follows  an opening one is treated as a data character for\n       the class. When  PCRE2_ALLOW_EMPTY_CLASS  is  set,  it  terminates  the\n       class, which therefore contains no characters and so can never match.\n\n         PCRE2_ALT_BSUX\n\n       This  option  request  alternative  handling of three escape sequences,\n       which makes PCRE2's behaviour more like  ECMAscript  (aka  JavaScript).\n       When it is set:\n\n       (1) \\U matches an upper case \"U\" character; by default \\U causes a com-\n       pile time error (Perl uses \\U to upper case subsequent characters).\n\n       (2) \\u matches a lower case \"u\" character unless it is followed by four\n       hexadecimal  digits,  in  which case the hexadecimal number defines the\n       code point to match. By default, \\u causes a compile time  error  (Perl\n       uses it to upper case the following character).\n\n       (3)  \\x matches a lower case \"x\" character unless it is followed by two\n       hexadecimal digits, in which case the hexadecimal  number  defines  the\n       code  point  to  match. By default, as in Perl, a hexadecimal number is\n       always expected after \\x, but it may have one or two digits.\n\n       ECMAscript 6 added additional functionality to \\u. This can be accessed\n       using the PCRE2_EXTRA_ALT_BSUX extra option  (see  \"Extra  compile  op-\n       tions\" below).  Note that this alternative escape handling applies only\n       to  patterns.  Neither  of  these options affects the processing of re-\n       placement strings passed to pcre2_substitute().\n\n         PCRE2_ALT_CIRCUMFLEX\n\n       In  multiline  mode  (when  PCRE2_MULTILINE  is  set),  the  circumflex\n       metacharacter  matches at the start of the subject (unless PCRE2_NOTBOL\n       is set), and also after any internal  newline.  However,  it  does  not\n       match after a newline at the end of the subject, for compatibility with\n       Perl.  If  you want a multiline circumflex also to match after a termi-\n       nating newline, you must set PCRE2_ALT_CIRCUMFLEX.\n\n         PCRE2_ALT_EXTENDED_CLASS\n\n       Alters the parsing of character classes to follow the  extended  syntax\n       described by Unicode UTS#18. The PCRE2_ALT_EXTENDED_CLASS option has no\n       impact  on the behaviour of the Perl-specific \"(?[...])\" syntax for ex-\n       tended classes, but instead enables the alternative syntax of  extended\n       class  behaviour  inside  ordinary  \"[...]\"  character classes. See the\n       pcre2pattern documentation for details of the  character  classes  sup-\n       ported.\n\n         PCRE2_ALT_VERBNAMES\n\n       By  default, for compatibility with Perl, the name in any verb sequence\n       such as (*MARK:NAME) is any sequence of characters that  does  not  in-\n       clude  a closing parenthesis. The name is not processed in any way, and\n       it is not possible to include a closing parenthesis in the  name.  How-\n       ever,  if  the PCRE2_ALT_VERBNAMES option is set, normal backslash pro-\n       cessing is applied to verb names and only an unescaped  closing  paren-\n       thesis  terminates the name. A closing parenthesis can be included in a\n       name either as \\) or between  \\Q  and  \\E.  If  the  PCRE2_EXTENDED  or\n       PCRE2_EXTENDED_MORE  option  is set with PCRE2_ALT_VERBNAMES, unescaped\n       white space in verb names is skipped and #-comments are recognized, ex-\n       actly as in the rest of the pattern.\n\n         PCRE2_AUTO_CALLOUT\n\n       If this bit  is  set,  pcre2_compile()  automatically  inserts  callout\n       items,  all  with  number 255, before each pattern item, except immedi-\n       ately before or after an explicit callout in the pattern.  For  discus-\n       sion of the callout facility, see the pcre2callout documentation.\n\n         PCRE2_CASELESS\n\n       If  this  bit is set, letters in the pattern match both upper and lower\n       case letters in the subject. It is equivalent to Perl's /i option,  and\n       it  can be changed within a pattern by a (?i) option setting. If either\n       PCRE2_UTF or PCRE2_UCP is set, Unicode  properties  are  used  for  all\n       characters  with more than one other case, and for all characters whose\n       code points are greater than U+007F.\n\n       Note that there are two ASCII characters, K and S, that, in addition to\n       their lower case ASCII equivalents,  are  case-equivalent  with  U+212A\n       (Kelvin sign) and U+017F (long S) respectively. If you do not want this\n       case  equivalence,  you  can  suppress  it by setting PCRE2_EXTRA_CASE-\n       LESS_RESTRICT.\n\n       One language family, Turkish and Azeri, has its own  case-insensitivity\n       rules,  which  can  be  selected by setting PCRE2_EXTRA_TURKISH_CASING.\n       This alters the behaviour of the 'i', 'I', U+0130 (capital I  with  dot\n       above), and U+0131 (small dotless i) characters.\n\n       For lower valued characters with only one other case, a lookup table is\n       used  for  speed. When neither PCRE2_UTF nor PCRE2_UCP is set, a lookup\n       table is used for all code points less than 256, and higher code points\n       (available only in 16-bit or 32-bit mode) are treated as not having an-\n       other case.\n\n       From release 10.45 PCRE2_CASELESS also affects what some of the letter-\n       related Unicode property escapes (\\p and \\P) match. The  properties  Lu\n       (upper case letter), Ll (lower case letter), and Lt (title case letter)\n       are all treated as LC (cased letter) when PCRE2_CASELESS is set.\n\n         PCRE2_DOLLAR_ENDONLY\n\n       If  this bit is set, a dollar metacharacter in the pattern matches only\n       at the end of the subject string. Without this option,  a  dollar  also\n       matches  immediately before a newline at the end of the string (but not\n       before any other newlines). The PCRE2_DOLLAR_ENDONLY option is  ignored\n       if  PCRE2_MULTILINE  is  set.  There is no equivalent to this option in\n       Perl, and no way to set it within a pattern.\n\n         PCRE2_DOTALL\n\n       If this bit is set, a dot metacharacter  in  the  pattern  matches  any\n       character,  including  one  that  indicates a newline. However, it only\n       ever matches one character, even if newlines are coded as CRLF. Without\n       this option, a dot does not match when the current position in the sub-\n       ject is at a newline. This option is equivalent to  Perl's  /s  option,\n       and it can be changed within a pattern by a (?s) option setting. A neg-\n       ative  class such as [^a] always matches newline characters, and the \\N\n       escape sequence always matches a non-newline character, independent  of\n       the setting of PCRE2_DOTALL.\n\n         PCRE2_DUPNAMES\n\n       If  this  bit is set, names used to identify capture groups need not be\n       unique.  This can be helpful for certain types of pattern  when  it  is\n       known  that  only  one instance of the named group can ever be matched.\n       There are more details of named capture  groups  below;  see  also  the\n       pcre2pattern documentation.\n\n         PCRE2_ENDANCHORED\n\n       If  this  bit is set, the end of any pattern match must be right at the\n       end of the string being searched (the \"subject string\"). If the pattern\n       match succeeds by reaching (*ACCEPT), but does not reach the end of the\n       subject, the match fails at the current starting point. For  unanchored\n       patterns,  a  new  match is then tried at the next starting point. How-\n       ever, if the match succeeds by reaching the end of the pattern, but not\n       the end of the subject, backtracking occurs and  an  alternative  match\n       may be found. Consider these two patterns:\n\n         .(*ACCEPT)|..\n         .|..\n\n       If  matched against \"abc\" with PCRE2_ENDANCHORED set, the first matches\n       \"c\" whereas the second matches \"bc\". The  effect  of  PCRE2_ENDANCHORED\n       can  also  be achieved by appropriate constructs in the pattern itself,\n       which is the only way to do it in Perl.\n\n       For DFA matching with pcre2_dfa_match(), PCRE2_ENDANCHORED applies only\n       to the first (that is, the  longest)  matched  string.  Other  parallel\n       matches,  which are necessarily substrings of the first one, must obvi-\n       ously end before the end of the subject.\n\n         PCRE2_EXTENDED\n\n       If this bit is set, most white space characters in the pattern are  to-\n       tally  ignored except when escaped, inside a character class, or inside\n       a \\Q...\\E sequence. However, white space  is  not  allowed  within  se-\n       quences  such  as  (?> that introduce various parenthesized groups, nor\n       within numerical quantifiers such as {1,3}. Ignorable  white  space  is\n       permitted  between  an  item  and  a following quantifier and between a\n       quantifier and a following + that indicates  possessiveness.  PCRE2_EX-\n       TENDED  is equivalent to Perl's /x option, and it can be changed within\n       a pattern by a (?x) option setting.\n\n       When PCRE2 is compiled without Unicode support,  PCRE2_EXTENDED  recog-\n       nizes  as  white space only those characters with code points less than\n       256 that are flagged as white space in its low-character table. The ta-\n       ble is normally created by pcre2_maketables(), which uses the isspace()\n       function to identify space characters. In most ASCII environments,  the\n       relevant  characters  are  those  with code points 0x0009 (tab), 0x000A\n       (linefeed), 0x000B (vertical tab), 0x000C (formfeed), 0x000D  (carriage\n       return), and 0x0020 (space).\n\n       When PCRE2 is compiled with Unicode support, in addition to these char-\n       acters,  five  more Unicode \"Pattern White Space\" characters are recog-\n       nized by PCRE2_EXTENDED. These are U+0085 (next line), U+200E (left-to-\n       right mark), U+200F (right-to-left mark), U+2028 (line separator),  and\n       U+2029  (paragraph  separator).  This  set of characters is the same as\n       recognized by Perl's /x option. Note that the horizontal  and  vertical\n       space  characters that are matched by the \\h and \\v escapes in patterns\n       are a much bigger set.\n\n       As well as ignoring most white space, PCRE2_EXTENDED also causes  char-\n       acters  between  an  unescaped # outside a character class and the next\n       newline, inclusive, to be ignored, which makes it possible  to  include\n       comments inside complicated patterns. Note that the end of this type of\n       comment  is a literal newline sequence in the pattern; escape sequences\n       that happen to represent a newline do not count.\n\n       Which characters are interpreted as newlines can be specified by a set-\n       ting in the compile context that is passed to pcre2_compile() or  by  a\n       special  sequence at the start of the pattern, as described in the sec-\n       tion entitled \"Newline conventions\" in the pcre2pattern  documentation.\n       A default is defined when PCRE2 is built.\n\n         PCRE2_EXTENDED_MORE\n\n       This  option  has  the  effect of PCRE2_EXTENDED, but, in addition, un-\n       escaped space and horizontal tab characters are ignored inside a  char-\n       acter  class. Note: only these two characters are ignored, not the full\n       set of pattern white space characters that are ignored outside a  char-\n       acter  class.  PCRE2_EXTENDED_MORE  is equivalent to Perl's /xx option,\n       and it can be changed within a pattern by a (?xx) option setting.\n\n         PCRE2_FIRSTLINE\n\n       If this option is set, the start of an unanchored pattern match must be\n       before or at the first newline in  the  subject  string  following  the\n       start  of  matching, though the matched text may continue over the new-\n       line. If startoffset is non-zero, the limiting newline is not necessar-\n       ily the first newline in the  subject.  For  example,  if  the  subject\n       string is \"abc\\nxyz\" (where \\n represents a single-character newline) a\n       pattern  match for \"yz\" succeeds with PCRE2_FIRSTLINE if startoffset is\n       greater than 3. See also PCRE2_USE_OFFSET_LIMIT, which provides a  more\n       general  limiting  facility.  If  PCRE2_FIRSTLINE is set with an offset\n       limit, a match must occur in the first line and also within the  offset\n       limit. In other words, whichever limit comes first is used. This option\n       has no effect for anchored patterns.\n\n         PCRE2_LITERAL\n\n       If this option is set, all meta-characters in the pattern are disabled,\n       and  it is treated as a literal string. Matching literal strings with a\n       regular expression engine is not the most efficient way of doing it. If\n       you are doing a lot of literal matching and  are  worried  about  effi-\n       ciency, you should consider using other approaches. The only other main\n       options  that  are  allowed  with  PCRE2_LITERAL  are:  PCRE2_ANCHORED,\n       PCRE2_ENDANCHORED, PCRE2_AUTO_CALLOUT, PCRE2_CASELESS, PCRE2_FIRSTLINE,\n       PCRE2_MATCH_INVALID_UTF,  PCRE2_NO_START_OPTIMIZE,  PCRE2_NO_UTF_CHECK,\n       PCRE2_UTF,  and  PCRE2_USE_OFFSET_LIMIT.  The  extra  options PCRE2_EX-\n       TRA_MATCH_LINE and PCRE2_EXTRA_MATCH_WORD are also supported. Any other\n       options cause an error.\n\n         PCRE2_MATCH_INVALID_UTF\n\n       This option forces PCRE2_UTF (see below) and also enables  support  for\n       matching  by  pcre2_match() in subject strings that contain invalid UTF\n       sequences.  Note, however, that the 16-bit and 32-bit  PCRE2  libraries\n       process  strings as sequences of uint16_t or uint32_t code points. They\n       cannot find valid UTF sequences within an arbitrary string of bytes un-\n       less such sequences are suitably aligned. This  facility  is  not  sup-\n       ported  for  DFA matching. For details, see the pcre2unicode documenta-\n       tion.\n\n         PCRE2_MATCH_UNSET_BACKREF\n\n       If this option is set,  a  backreference  to  an  unset  capture  group\n       matches  an  empty  string (by default this causes the current matching\n       alternative to fail).  A pattern such as (\\1)(a) succeeds when this op-\n       tion is set (assuming it can find an \"a\" in the  subject),  whereas  it\n       fails  by  default,  for  Perl compatibility. Setting this option makes\n       PCRE2 behave more like ECMAscript (aka JavaScript).\n\n         PCRE2_MULTILINE\n\n       By default, for the purposes of matching \"start of line\"  and  \"end  of\n       line\",  PCRE2  treats the subject string as consisting of a single line\n       of characters, even if it actually contains  newlines.  The  \"start  of\n       line\"  metacharacter  (^)  matches only at the start of the string, and\n       the \"end of line\" metacharacter ($) matches only  at  the  end  of  the\n       string,  or  before a terminating newline (except when PCRE2_DOLLAR_EN-\n       DONLY is set). Note, however, that unless PCRE2_DOTALL is set, the \"any\n       character\" metacharacter (.) does not match at a newline.  This  behav-\n       iour (for ^, $, and dot) is the same as Perl.\n\n       When  PCRE2_MULTILINE  it is set, the \"start of line\" and \"end of line\"\n       constructs match immediately following or immediately  before  internal\n       newlines  in  the  subject string, respectively, as well as at the very\n       start and end. This is equivalent to Perl's /m option, and  it  can  be\n       changed within a pattern by a (?m) option setting. Note that the \"start\n       of line\" metacharacter does not match after a newline at the end of the\n       subject,  for compatibility with Perl.  However, you can change this by\n       setting the PCRE2_ALT_CIRCUMFLEX option. If there are no newlines in  a\n       subject  string,  or  no  occurrences  of  ^ or $ in a pattern, setting\n       PCRE2_MULTILINE has no effect.\n\n         PCRE2_NEVER_BACKSLASH_C\n\n       This option locks out the use of \\C in the pattern that is  being  com-\n       piled.   This  escape  can  cause  unpredictable  behaviour in UTF-8 or\n       UTF-16 modes, because it may leave the current matching  point  in  the\n       middle of a multi-code-unit character. This option may be useful in ap-\n       plications that process patterns from external sources. Note that there\n       is also a build-time option that permanently locks out the use of \\C.\n\n         PCRE2_NEVER_UCP\n\n       This  option  locks  out the use of Unicode properties for handling \\B,\n       \\b, \\D, \\d, \\S, \\s, \\W, \\w, and some of the POSIX character classes, as\n       described for the PCRE2_UCP option below. In  particular,  it  prevents\n       the  creator of the pattern from enabling this facility by starting the\n       pattern with (*UCP). This option may be  useful  in  applications  that\n       process   patterns   from  external  sources.  The  option  combination\n       PCRE2_UCP and PCRE2_NEVER_UCP causes an error.\n\n         PCRE2_NEVER_UTF\n\n       This option locks out interpretation of the pattern as  UTF-8,  UTF-16,\n       or UTF-32, depending on which library is in use. In particular, it pre-\n       vents  the  creator of the pattern from switching to UTF interpretation\n       by starting the pattern with (*UTF). This option may be useful  in  ap-\n       plications that process patterns from external sources. The combination\n       of PCRE2_UTF and PCRE2_NEVER_UTF causes an error.\n\n         PCRE2_NO_AUTO_CAPTURE\n\n       If this option is set, it disables the use of numbered capturing paren-\n       theses  in the pattern. Any opening parenthesis that is not followed by\n       ? behaves as if it were followed by ?: but named parentheses can  still\n       be used for capturing (and they acquire numbers in the usual way). This\n       is  the  same as Perl's /n option.  Note that, when this option is set,\n       references to capture groups  (backreferences  or  recursion/subroutine\n       calls)  may  only refer to named groups, though the reference can be by\n       name or by number.\n\n         PCRE2_NO_AUTO_POSSESS\n\n       If this (deprecated) option is  set,  it  disables  \"auto-possessifica-\n       tion\",  which is an optimization that, for example, turns a+b into a++b\n       in order to avoid backtracks into a+ that can never be successful. How-\n       ever, if callouts are in use,  auto-possessification  means  that  some\n       callouts  are  never  taken.  You  can  set this option if you want the\n       matching functions to do a full unoptimized  search  and  run  all  the\n       callouts, but it is mainly provided for testing purposes.\n\n       If   a   compile  context  is  available,  it  is  recommended  to  use\n       pcre2_set_optimize() with the directive  PCRE2_AUTO_POSSESS_OFF  rather\n       than    the    compile    option   PCRE2_NO_AUTO_POSSESS.   Note   that\n       PCRE2_NO_AUTO_POSSESS takes precedence  over  the  pcre2_set_optimize()\n       optimization directives PCRE2_AUTO_POSSESS and PCRE2_AUTO_POSSESS_OFF.\n\n         PCRE2_NO_DOTSTAR_ANCHOR\n\n       If this (deprecated) option is set, it disables an optimization that is\n       applied  when .* is the first significant item in a top-level branch of\n       a pattern, and all the other branches also start with .* or with \\A  or\n       \\G or ^. The optimization is automatically disabled for .* if it is in-\n       side  an atomic group or a capture group that is the subject of a back-\n       reference, or if the pattern contains (*PRUNE) or (*SKIP). When the op-\n       timization is not disabled, such a pattern is automatically anchored if\n       PCRE2_DOTALL is set for all the .* items and PCRE2_MULTILINE is not set\n       for any ^ items. Otherwise, the fact that any match must  start  either\n       at  the start of the subject or following a newline is remembered. Like\n       other optimizations, this can cause callouts to be skipped.  (If a com-\n       pile context is available, it is  recommended  to  use  pcre2_set_opti-\n       mize() with the directive PCRE2_DOTSTAR_ANCHOR_OFF instead.)\n\n         PCRE2_NO_START_OPTIMIZE\n\n       This  is  an  option whose main effect is at matching time. It does not\n       change what pcre2_compile() generates, but it does affect the output of\n       the  JIT  compiler.  Setting  this  option  is  equivalent  to  calling\n       pcre2_set_optimize()    with    the    directive   parameter   set   to\n       PCRE2_START_OPTIMIZE_OFF.\n\n       There are a number of optimizations that may occur at the  start  of  a\n       match,  in  order  to speed up the process. For example, if it is known\n       that an unanchored match must start with a specific  code  unit  value,\n       the  matching code searches the subject for that value, and fails imme-\n       diately if it cannot find it, without actually running the main  match-\n       ing  function.  The  start-up optimizations are in effect a pre-scan of\n       the subject that takes place before the pattern is run.\n\n       Disabling the start-up optimizations may cause performance  to  suffer.\n       However,  this  may be desirable for patterns which contain callouts or\n       items such as (*COMMIT) and  (*MARK).  See  the  above  description  of\n       PCRE2_START_OPTIMIZE_OFF for further details.\n\n         PCRE2_NO_UTF_CHECK\n\n       When  PCRE2_UTF  is set, the validity of the pattern as a UTF string is\n       automatically checked. There are  discussions  about  the  validity  of\n       UTF-8  strings,  UTF-16 strings, and UTF-32 strings in the pcre2unicode\n       document. If an invalid UTF sequence is found, pcre2_compile()  returns\n       a negative error code.\n\n       If  you  know  that your pattern is a valid UTF string, and you want to\n       skip  this  check  for   performance   reasons,   you   can   set   the\n       PCRE2_NO_UTF_CHECK option. When it is set, the effect of passing an in-\n       valid  UTF  string as a pattern is undefined. It may cause your program\n       to crash or loop.\n\n       Note  that  this  option  can  also  be  passed  to  pcre2_match()  and\n       pcre2_dfa_match(),  to  suppress  UTF  validity checking of the subject\n       string.\n\n       Note also that setting PCRE2_NO_UTF_CHECK at compile time does not dis-\n       able the error that is given if an escape sequence for an invalid  Uni-\n       code  code  point is encountered in the pattern. In particular, the so-\n       called \"surrogate\" code points (0xd800 to 0xdfff) are invalid.  If  you\n       want  to  allow  escape  sequences  such  as  \\x{d800}  you can set the\n       PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES extra option, as described  in  the\n       section  entitled \"Extra compile options\" below.  However, this is pos-\n       sible only in UTF-8 and UTF-32 modes, because these values are not rep-\n       resentable in UTF-16.\n\n         PCRE2_UCP\n\n       This option has two effects. Firstly, it change the way PCRE2 processes\n       \\B, \\b, \\D, \\d, \\S, \\s,  \\W,  \\w,  and  some  of  the  POSIX  character\n       classes.  By  default,  only  ASCII  characters  are recognized, but if\n       PCRE2_UCP is set, Unicode properties are used to  classify  characters.\n       There  are  some PCRE2_EXTRA options (see below) that add finer control\n       to this behaviour. More details are given in  the  section  on  generic\n       character types in the pcre2pattern page.\n\n       The  second  effect of PCRE2_UCP is to force the use of Unicode proper-\n       ties for upper/lower casing operations, even when PCRE2_UTF is not set.\n       This makes it possible to process strings in  the  16-bit  UCS-2  code.\n       This  option  is available only if PCRE2 has been compiled with Unicode\n       support (which is the default).\n\n       The PCRE2_EXTRA_CASELESS_RESTRICT option (see above) restricts caseless\n       matching such that ASCII characters match  only  ASCII  characters  and\n       non-ASCII  characters  match  only  non-ASCII characters. The PCRE2_EX-\n       TRA_TURKISH_CASING option (see above) alters the matching  of  the  'i'\n       characters  to  follow  their behaviour in Turkish and Azeri languages.\n       For further  details  on  PCRE2_EXTRA_CASELESS_RESTRICT  and  PCRE2_EX-\n       TRA_TURKISH_CASING, see the pcre2unicode page.\n\n         PCRE2_UNGREEDY\n\n       This  option  inverts  the \"greediness\" of the quantifiers so that they\n       are not greedy by default, but become greedy if followed by \"?\". It  is\n       not  compatible  with Perl. It can also be set by a (?U) option setting\n       within the pattern.\n\n         PCRE2_USE_OFFSET_LIMIT\n\n       This option must be set for pcre2_compile() if pcre2_set_offset_limit()\n       is going to be used to set a non-default offset limit in a  match  con-\n       text  for  matches  that  use this pattern. An error is generated if an\n       offset limit is set without this option. For more details, see the  de-\n       scription  of  pcre2_set_offset_limit()  in  the section that describes\n       match contexts. See also the PCRE2_FIRSTLINE option above.\n\n         PCRE2_UTF\n\n       This option causes PCRE2 to regard both the  pattern  and  the  subject\n       strings  that  are  subsequently processed as strings of UTF characters\n       instead of single-code-unit strings. It  is  available  when  PCRE2  is\n       built  to  include  Unicode  support (which is the default). If Unicode\n       support is not available, the use of this option provokes an error. De-\n       tails of how PCRE2_UTF changes the behaviour of PCRE2 are given in  the\n       pcre2unicode  page.  In  particular,  note  that  it  changes  the  way\n       PCRE2_CASELESS works.\n\n   Extra compile options\n\n       The option bits that can be set in a compile  context  by  calling  the\n       pcre2_set_compile_extra_options() function are as follows:\n\n         PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK\n\n       Since release 10.38 PCRE2 has forbidden the use of \\K within lookaround\n       assertions, following Perl's lead. This option is provided to re-enable\n       the previous behaviour (act in positive lookarounds, ignore in negative\n       ones) in case anybody is relying on it.\n\n         PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES\n\n       This  option  applies when compiling a pattern in UTF-8 or UTF-32 mode.\n       It is forbidden in UTF-16 mode, and ignored in non-UTF  modes.  Unicode\n       \"surrogate\" code points in the range 0xd800 to 0xdfff are used in pairs\n       in  UTF-16  to  encode  code points with values in the range 0x10000 to\n       0x10ffff. The surrogates cannot therefore  be  represented  in  UTF-16.\n       They can be represented in UTF-8 and UTF-32, but are defined as invalid\n       code  points,  and  cause  errors  if  encountered in a UTF-8 or UTF-32\n       string that is being checked for validity by PCRE2.\n\n       These values also cause errors if encountered in escape sequences  such\n       as \\x{d912} within a pattern. However, it seems that some applications,\n       when using PCRE2 to check for unwanted characters in UTF-8 strings, ex-\n       plicitly   test   for   the  surrogates  using  escape  sequences.  The\n       PCRE2_NO_UTF_CHECK option does not disable the error that  occurs,  be-\n       cause it applies only to the testing of input strings for UTF validity.\n\n       If  the extra option PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is set, surro-\n       gate code point values in UTF-8 and UTF-32 patterns no  longer  provoke\n       errors  and are incorporated in the compiled pattern. However, they can\n       only match subject characters if the matching function is  called  with\n       PCRE2_NO_UTF_CHECK set.\n\n         PCRE2_EXTRA_ALT_BSUX\n\n       The  original option PCRE2_ALT_BSUX causes PCRE2 to process \\U, \\u, and\n       \\x in the way that ECMAscript (aka JavaScript) does.  Additional  func-\n       tionality was defined by ECMAscript 6; setting PCRE2_EXTRA_ALT_BSUX has\n       the  effect  of PCRE2_ALT_BSUX, but in addition it recognizes \\u{hhh..}\n       as a hexadecimal character code, where hhh.. is any number of hexadeci-\n       mal digits.\n\n         PCRE2_EXTRA_ASCII_BSD\n\n       This option forces \\d to match only ASCII digits, even  when  PCRE2_UCP\n       is  set.   It can be changed within a pattern by means of the (?aD) op-\n       tion setting.\n\n         PCRE2_EXTRA_ASCII_BSS\n\n       This option forces \\s to match only ASCII space characters,  even  when\n       PCRE2_UCP  is  set.  It can be changed within a pattern by means of the\n       (?aS) option setting.\n\n         PCRE2_EXTRA_ASCII_BSW\n\n       This option forces \\w to match only ASCII word  characters,  even  when\n       PCRE2_UCP  is  set.  It can be changed within a pattern by means of the\n       (?aW) option setting.\n\n         PCRE2_EXTRA_ASCII_DIGIT\n\n       This option forces the POSIX character classes [:digit:] and [:xdigit:]\n       to match only ASCII digits, even when  PCRE2_UCP  is  set.  It  can  be\n       changed within a pattern by means of the (?aT) option setting.\n\n         PCRE2_EXTRA_ASCII_POSIX\n\n       This option forces all the POSIX character classes, including [:digit:]\n       and  [:xdigit:], to match only ASCII characters, even when PCRE2_UCP is\n       set. It can be changed within a pattern by means of  the  (?aP)  option\n       setting,  but note that this also sets PCRE2_EXTRA_ASCII_DIGIT in order\n       to ensure that (?-aP) unsets all ASCII restrictions for POSIX classes.\n\n         PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL\n\n       This is a dangerous option. Use with care. By default, an  unrecognized\n       escape  such  as \\j or a malformed one such as \\x{2z} causes a compile-\n       time error when detected by pcre2_compile(). Perl is somewhat inconsis-\n       tent in handling such items: for example, \\j is treated  as  a  literal\n       \"j\",  and non-hexadecimal digits in \\x{} are just ignored, though warn-\n       ings are given in both cases if Perl's warning switch is enabled.  How-\n       ever,  a  malformed  octal  number  after \\o{ always causes an error in\n       Perl.\n\n       If the PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL  extra  option  is  passed  to\n       pcre2_compile(),  all  unrecognized  or  malformed escape sequences are\n       treated as single-character escapes. For example, \\j is a  literal  \"j\"\n       and  \\x{2z}  is treated as the literal string \"x{2z}\". Setting this op-\n       tion means that typos in patterns may go undetected and have unexpected\n       results. Also note that a sequence such as [\\N{] is  interpreted  as  a\n       malformed  attempt  at [\\N{...}] and so is treated as [N{] whereas [\\N]\n       gives an error because an unqualified \\N is a valid escape sequence but\n       is not supported in a character class. To reiterate: this is a  danger-\n       ous option. Use with great care.\n\n         PCRE2_EXTRA_CASELESS_RESTRICT\n\n       When  either  PCRE2_UCP  or PCRE2_UTF is set, caseless matching follows\n       Unicode rules, which allow for more than two cases per character. There\n       are two case-equivalent character sets that contain both ASCII and non-\n       ASCII characters. The ASCII letter S is case-equivalent to U+017f (long\n       S) and the ASCII letter K is case-equivalent to U+212a  (Kelvin  sign).\n       This  option  disables  recognition of case-equivalences that cross the\n       ASCII/non-ASCII boundary. In a caseless match, both characters must ei-\n       ther be ASCII or non-ASCII. The option can be changed within a  pattern\n       by the (*CASELESS_RESTRICT) or (?r) option settings.\n\n         PCRE2_EXTRA_ESCAPED_CR_IS_LF\n\n       There  are  some  legacy applications where the escape sequence \\r in a\n       pattern is expected to match a newline. If this option is set, \\r in  a\n       pattern  is  converted to \\n so that it matches a LF (linefeed) instead\n       of a CR (carriage return) character. The option does not affect a  lit-\n       eral  CR in the pattern, nor does it affect CR specified as an explicit\n       code point such as \\x{0D}.\n\n         PCRE2_EXTRA_MATCH_LINE\n\n       This option is provided for use by  the  -x  option  of  pcre2grep.  It\n       causes  the  pattern  only to match complete lines. This is achieved by\n       automatically inserting the code for \"^(?:\" at the start  of  the  com-\n       piled  pattern  and \")$\" at the end. Thus, when PCRE2_MULTILINE is set,\n       the matched line may be in the middle of the subject string.  This  op-\n       tion can be used with PCRE2_LITERAL.\n\n         PCRE2_EXTRA_MATCH_WORD\n\n       This  option  is  provided  for  use  by the -w option of pcre2grep. It\n       causes the pattern only to match strings that have a word  boundary  at\n       the  start and the end. This is achieved by automatically inserting the\n       code for \"\\b(?:\" at the start of the compiled pattern and \")\\b\" at  the\n       end.  The option may be used with PCRE2_LITERAL. However, it is ignored\n       if PCRE2_EXTRA_MATCH_LINE is also set.\n\n         PCRE2_EXTRA_NO_BS0\n\n       If this option is set (note that its final character is the digit 0) it\n       locks out the use of the sequence \\0 unless at  least  one  more  octal\n       digit follows.\n\n         PCRE2_EXTRA_PYTHON_OCTAL\n\n       If  this  option  is set, PCRE2 follows Python's rules for interpreting\n       octal escape sequences. The rules for handling sequences such  as  \\14,\n       which  could  be an octal number or a back reference are different. De-\n       tails are given in the pcre2pattern documentation.\n\n         PCRE2_EXTRA_NEVER_CALLOUT\n\n       If this option is set, PCRE2 treats callouts in the pattern as a syntax\n       error, returning PCRE2_ERROR_CALLOUT_CALLER_DISABLED. This is useful if\n       the  application  knows  that  a  callout  will  not  be  provided   to\n       pcre2_match(),  so  that  callouts  in the pattern are not silently ig-\n       nored.\n\n         PCRE2_EXTRA_TURKISH_CASING\n\n       This option alters case-equivalence of the 'i' letters  to  follow  the\n       alphabet used by Turkish and Azeri languages. The option can be changed\n       within a pattern by the (*TURKISH_CASING) start-of-pattern setting. Ei-\n       ther the UTF or UCP options must be set. In the 8-bit library, UTF must\n       be  set.  This  option cannot be combined with PCRE2_EXTRA_CASELESS_RE-\n       STRICT.\n\n\nJUST-IN-TIME (JIT) COMPILATION\n\n       int pcre2_jit_compile(pcre2_code *code, uint32_t options);\n\n       int pcre2_jit_match(const pcre2_code *code, PCRE2_SPTR subject,\n         PCRE2_SIZE length, PCRE2_SIZE startoffset,\n         uint32_t options, pcre2_match_data *match_data,\n         pcre2_match_context *mcontext);\n\n       void pcre2_jit_free_unused_memory(pcre2_general_context *gcontext);\n\n       pcre2_jit_stack *pcre2_jit_stack_create(size_t startsize,\n         size_t maxsize, pcre2_general_context *gcontext);\n\n       void pcre2_jit_stack_assign(pcre2_match_context *mcontext,\n         pcre2_jit_callback callback_function, void *callback_data);\n\n       void pcre2_jit_stack_free(pcre2_jit_stack *jit_stack);\n\n       These functions provide support for  JIT  compilation,  which,  if  the\n       just-in-time  compiler  is available, further processes a compiled pat-\n       tern into machine code that executes much faster than the pcre2_match()\n       interpretive matching function. Full details are given in the  pcre2jit\n       documentation.\n\n       JIT  compilation  is  a heavyweight optimization. It can take some time\n       for patterns to be analyzed, and for one-off matches  and  simple  pat-\n       terns  the benefit of faster execution might be offset by a much slower\n       compilation time.  Most (but not all) patterns can be optimized by  the\n       JIT compiler.\n\n\nLOCALE SUPPORT\n\n       const uint8_t *pcre2_maketables(pcre2_general_context *gcontext);\n\n       void pcre2_maketables_free(pcre2_general_context *gcontext,\n         const uint8_t *tables);\n\n       PCRE2  handles caseless matching, and determines whether characters are\n       letters, digits, or whatever, by reference to a set of tables,  indexed\n       by character code point. However, this applies only to characters whose\n       code  points  are  less than 256. By default, higher-valued code points\n       never match escapes such as \\w or \\d.\n\n       When PCRE2 is built with Unicode support (the default), certain Unicode\n       character properties can be tested with \\p and \\P,  or,  alternatively,\n       the PCRE2_UCP option can be set when a pattern is compiled; this causes\n       \\w  and friends to use Unicode property support instead of the built-in\n       tables.  PCRE2_UCP also causes upper/lower casing operations on charac-\n       ters with code points greater than 127 to use Unicode properties. These\n       effects apply even when PCRE2_UTF is not set. There are, however,  some\n       PCRE2_EXTRA  options (see above) that can be used to modify or suppress\n       them.\n\n       The use of locales with Unicode is discouraged.  If  you  are  handling\n       characters  with  code  points  greater than 127, you should either use\n       Unicode support, or use locales, but not try to mix the two.\n\n       PCRE2 contains a built-in set of character tables that are used by  de-\n       fault.   These  are sufficient for many applications. Normally, the in-\n       ternal tables recognize only ASCII characters. However, when  PCRE2  is\n       built, it is possible to cause the internal tables to be rebuilt in the\n       default \"C\" locale of the local system, which may cause them to be dif-\n       ferent.\n\n       The  built-in tables can be overridden by tables supplied by the appli-\n       cation that calls PCRE2. These may be created  in  a  different  locale\n       from  the  default.  As more and more applications change to using Uni-\n       code, the need for this locale support is expected to die away.\n\n       External tables are built by calling the  pcre2_maketables()  function,\n       in the relevant locale. The only argument to this function is a general\n       context,  which  can  be used to pass a custom memory allocator. If the\n       argument is NULL, the system malloc() is used. The result can be passed\n       to pcre2_compile() as often as necessary, by creating a compile context\n       and calling pcre2_set_character_tables()  to  set  the  tables  pointer\n       therein.\n\n       For  example,  to  build  and  use  tables that are appropriate for the\n       French locale (where accented characters with values greater  than  127\n       are treated as letters), the following code could be used:\n\n         setlocale(LC_CTYPE, \"fr_FR\");\n         tables = pcre2_maketables(NULL);\n         ccontext = pcre2_compile_context_create(NULL);\n         pcre2_set_character_tables(ccontext, tables);\n         re = pcre2_compile(..., ccontext);\n\n       The  locale  name \"fr_FR\" is used on Linux and other Unix-like systems;\n       if you are using Windows, the name for the French locale is \"french\".\n\n       The pointer that is passed (via the compile context) to pcre2_compile()\n       is saved with the compiled pattern, and the same tables are used by the\n       matching functions. Thus,  for  any  single  pattern,  compilation  and\n       matching  both happen in the same locale, but different patterns can be\n       processed in different locales.\n\n       It is the caller's responsibility to ensure that the memory  containing\n       the tables remains available while they are still in use. When they are\n       no  longer  needed, you can discard them using pcre2_maketables_free(),\n       which should pass as its first parameter the same global  context  that\n       was used to create the tables.\n\n   Saving locale tables\n\n       The  tables  described above are just a sequence of binary bytes, which\n       makes them independent of hardware characteristics such  as  endianness\n       or  whether  the processor is 32-bit or 64-bit. A copy of the result of\n       pcre2_maketables() can therefore be saved in a file  or  elsewhere  and\n       re-used  later, even in a different program or on another computer. The\n       size of the tables (number  of  bytes)  must  be  obtained  by  calling\n       pcre2_config()   with  the  PCRE2_CONFIG_TABLES_LENGTH  option  because\n       pcre2_maketables()  does  not  return  this  value.   Note   that   the\n       pcre2_dftables program, which is part of the PCRE2 build system, can be\n       used stand-alone to create a file that contains a set of binary tables.\n       See the pcre2build documentation for details.\n\n\nINFORMATION ABOUT A COMPILED PATTERN\n\n       int pcre2_pattern_info(const pcre2 *code, uint32_t what, void *where);\n\n       The  pcre2_pattern_info()  function returns general information about a\n       compiled pattern. For information about callouts, see the next section.\n       The first argument for pcre2_pattern_info() is a pointer  to  the  com-\n       piled pattern. The second argument specifies which piece of information\n       is  required,  and the third argument is a pointer to a variable to re-\n       ceive the data. If the third argument is NULL, the  first  argument  is\n       ignored,  and  the  function  returns the size in bytes of the variable\n       that is required for the information requested. Otherwise, the yield of\n       the function is zero for success, or one of the following negative num-\n       bers:\n\n         PCRE2_ERROR_NULL           the argument code was NULL\n         PCRE2_ERROR_BADMAGIC       the \"magic number\" was not found\n         PCRE2_ERROR_BADOPTION      the value of what was invalid\n         PCRE2_ERROR_UNSET          the requested field is not set\n\n       The \"magic number\" is placed at the start of each compiled pattern as a\n       simple check against passing an arbitrary memory  pointer.  Here  is  a\n       typical  call of pcre2_pattern_info(), to obtain the length of the com-\n       piled pattern:\n\n         int rc;\n         size_t length;\n         rc = pcre2_pattern_info(\n           re,               /* result of pcre2_compile() */\n           PCRE2_INFO_SIZE,  /* what is required */\n           &length);         /* where to put the data */\n\n       The possible values for the second argument are defined in pcre2.h, and\n       are as follows:\n\n         PCRE2_INFO_ALLOPTIONS\n         PCRE2_INFO_ARGOPTIONS\n         PCRE2_INFO_EXTRAOPTIONS\n\n       Return copies of the pattern's options. The third argument should point\n       to a uint32_t variable. PCRE2_INFO_ARGOPTIONS returns exactly  the  op-\n       tions  that  were  passed to pcre2_compile(), whereas PCRE2_INFO_ALLOP-\n       TIONS returns the compile options as modified by any  top-level  (*XXX)\n       option  settings  such  as  (*UTF)  at the start of the pattern itself.\n       PCRE2_INFO_EXTRAOPTIONS returns the extra options that were set in  the\n       compile  context by calling the pcre2_set_compile_extra_options() func-\n       tion.\n\n       For example, if the pattern /(*UTF)abc/ is compiled with the  PCRE2_EX-\n       TENDED  option,  the result for PCRE2_INFO_ALLOPTIONS is PCRE2_EXTENDED\n       and PCRE2_UTF.  Option settings such as (?i) that can change  within  a\n       pattern do not affect the result of PCRE2_INFO_ALLOPTIONS, even if they\n       appear  right  at the start of the pattern. (This was different in some\n       earlier releases.)\n\n       A pattern compiled without PCRE2_ANCHORED is automatically anchored  by\n       PCRE2 if the first significant item in every top-level branch is one of\n       the following:\n\n         ^     unless PCRE2_MULTILINE is set\n         \\A    always\n         \\G    always\n         .*    sometimes - see below\n\n       When  .* is the first significant item, anchoring is possible only when\n       all the following are true:\n\n         .* is not in an atomic group\n         .* is not in a capture group that is the subject\n              of a backreference\n         PCRE2_DOTALL is in force for .*\n         Neither (*PRUNE) nor (*SKIP) appears in the pattern\n         PCRE2_NO_DOTSTAR_ANCHOR is not set\n         Dotstar anchoring has not been disabled with PCRE2_DOTSTAR_ANCHOR_OFF\n\n       For patterns that are auto-anchored, the PCRE2_ANCHORED bit is  set  in\n       the options returned for PCRE2_INFO_ALLOPTIONS.\n\n         PCRE2_INFO_BACKREFMAX\n\n       Return  the  number  of  the  highest backreference in the pattern. The\n       third argument should point  to  a  uint32_t  variable.  Named  capture\n       groups  acquire  numbers  as well as names, and these count towards the\n       highest backreference. Backreferences such as \\4 or  \\g{12}  match  the\n       captured characters of the given group, but in addition, the check that\n       a capture group is set in a conditional group such as (?(3)a|b) is also\n       a backreference.  Zero is returned if there are no backreferences.\n\n         PCRE2_INFO_BSR\n\n       The  output  is a uint32_t integer whose value indicates what character\n       sequences the \\R escape sequence matches. A value of  PCRE2_BSR_UNICODE\n       means  that  \\R  matches  any  Unicode line ending sequence; a value of\n       PCRE2_BSR_ANYCRLF means that \\R matches only CR, LF, or CRLF.\n\n         PCRE2_INFO_CAPTURECOUNT\n\n       Return the highest capture group number in  the  pattern.  In  patterns\n       where (?| is not used, this is also the total number of capture groups.\n       The third argument should point to a uint32_t variable.\n\n         PCRE2_INFO_DEPTHLIMIT\n\n       If  the  pattern set a backtracking depth limit by including an item of\n       the form (*LIMIT_DEPTH=nnnn) at the start, the value is  returned.  The\n       third argument should point to a uint32_t integer. If no such value has\n       been  set, the call to pcre2_pattern_info() returns the error PCRE2_ER-\n       ROR_UNSET. Note that this limit will only be used during matching if it\n       is less than the limit set or defaulted by  the  caller  of  the  match\n       function.\n\n         PCRE2_INFO_FIRSTBITMAP\n\n       In  the absence of a single first code unit for a non-anchored pattern,\n       pcre2_compile() may construct a 256-bit table that defines a fixed  set\n       of  values for the first code unit in any match. For example, a pattern\n       that starts with [abc] results in a table with  three  bits  set.  When\n       code  unit  values greater than 255 are supported, the flag bit for 255\n       means \"any code unit of value 255 or above\". If such a table  was  con-\n       structed,  a pointer to it is returned. Otherwise NULL is returned. The\n       third argument should point to a const uint8_t * variable.\n\n         PCRE2_INFO_FIRSTCODETYPE\n\n       Return information about the first code unit of any matched string, for\n       a non-anchored pattern. The third argument should point to  a  uint32_t\n       variable.  If there is a fixed first value, for example, the letter \"c\"\n       from a pattern such as (cat|cow|coyote), 1 is returned, and  the  value\n       can  be  retrieved using PCRE2_INFO_FIRSTCODEUNIT. If there is no fixed\n       first value, but it is known that a match can occur only at  the  start\n       of  the  subject  or following a newline in the subject, 2 is returned.\n       Otherwise, and for anchored patterns, 0 is returned.\n\n         PCRE2_INFO_FIRSTCODEUNIT\n\n       Return the value of the first code unit of any  matched  string  for  a\n       pattern  where  PCRE2_INFO_FIRSTCODETYPE returns 1; otherwise return 0.\n       The third argument should point to a uint32_t variable.  In  the  8-bit\n       library,  the  value is always less than 256. In the 16-bit library the\n       value can be up to 0xffff. In the 32-bit library  in  UTF-32  mode  the\n       value can be up to 0x10ffff, and up to 0xffffffff when not using UTF-32\n       mode.\n\n         PCRE2_INFO_FRAMESIZE\n\n       Return the size (in bytes) of the data frames that are used to remember\n       backtracking  positions  when the pattern is processed by pcre2_match()\n       without the use of JIT. The third argument should  point  to  a  size_t\n       variable. The frame size depends on the number of capturing parentheses\n       in the pattern. Each additional capture group adds two PCRE2_SIZE vari-\n       ables.\n\n         PCRE2_INFO_HASBACKSLASHC\n\n       Return  1 if the pattern contains any instances of \\C, otherwise 0. The\n       third argument should point to a uint32_t variable.\n\n         PCRE2_INFO_HASCRORLF\n\n       Return 1 if the pattern contains any explicit  matches  for  CR  or  LF\n       characters,  otherwise 0. The third argument should point to a uint32_t\n       variable. An explicit match is either a literal CR or LF character,  or\n       \\r  or  \\n  or  one  of  the equivalent hexadecimal or octal escape se-\n       quences.\n\n         PCRE2_INFO_HEAPLIMIT\n\n       If the pattern set a heap memory limit by including an item of the form\n       (*LIMIT_HEAP=nnnn) at the start, the value is returned. The third argu-\n       ment should point to a uint32_t integer. If no such value has been set,\n       the call to pcre2_pattern_info() returns the  error  PCRE2_ERROR_UNSET.\n       Note  that  this  limit will only be used during matching if it is less\n       than the limit set or defaulted by the caller of the match function.\n\n         PCRE2_INFO_JCHANGED\n\n       Return 1 if the (?J) or (?-J) option setting is used  in  the  pattern,\n       otherwise  0.  The  third argument should point to a uint32_t variable.\n       (?J) and (?-J) set and unset the local PCRE2_DUPNAMES  option,  respec-\n       tively.\n\n         PCRE2_INFO_JITSIZE\n\n       If  the  compiled  pattern was successfully processed by pcre2_jit_com-\n       pile(), return the size of the  JIT  compiled  code,  otherwise  return\n       zero. The third argument should point to a size_t variable.\n\n         PCRE2_INFO_LASTCODETYPE\n\n       Returns  1 if there is a rightmost literal code unit that must exist in\n       any matched string, other than at its start. The third argument  should\n       point to a uint32_t variable. If there is no such value, 0 is returned.\n       When  1  is returned, the code unit value itself can be retrieved using\n       PCRE2_INFO_LASTCODEUNIT. For anchored patterns, a last literal value is\n       recorded only if it follows something of variable length. For  example,\n       for  the pattern /^a\\d+z\\d+/ the returned value is 1 (with \"z\" returned\n       from PCRE2_INFO_LASTCODEUNIT), but for /^a\\dz\\d/ the returned value  is\n       0.\n\n         PCRE2_INFO_LASTCODEUNIT\n\n       Return  the value of the rightmost literal code unit that must exist in\n       any matched string, other than  at  its  start,  for  a  pattern  where\n       PCRE2_INFO_LASTCODETYPE returns 1. Otherwise, return 0. The third argu-\n       ment should point to a uint32_t variable.\n\n         PCRE2_INFO_MATCHEMPTY\n\n       Return  1  if the pattern might match an empty string, otherwise 0. The\n       third argument should point to a uint32_t variable. When a pattern con-\n       tains recursive subroutine calls it is not always possible to determine\n       whether or not it can match an empty string. PCRE2 takes a cautious ap-\n       proach and returns 1 in such cases.\n\n         PCRE2_INFO_MATCHLIMIT\n\n       If the pattern set a match limit by  including  an  item  of  the  form\n       (*LIMIT_MATCH=nnnn)  at the start, the value is returned. The third ar-\n       gument should point to a uint32_t integer. If no such  value  has  been\n       set, the call to pcre2_pattern_info() returns the error PCRE2_ERROR_UN-\n       SET.  Note  that  this limit will only be used during matching if it is\n       less than the limit set or defaulted by the caller of the  match  func-\n       tion.\n\n         PCRE2_INFO_MAXLOOKBEHIND\n\n       A  lookbehind  assertion moves back a certain number of characters (not\n       code units) when it starts to process each of its  branches.  This  re-\n       quest  returns  the largest of these backward moves. The third argument\n       should point to a uint32_t integer. The simple assertions \\b and \\B re-\n       quire a one-character lookbehind and cause PCRE2_INFO_MAXLOOKBEHIND  to\n       return  1  in  the absence of anything longer. \\A also registers a one-\n       character lookbehind, though it does not actually inspect the  previous\n       character.\n\n       Note that this information is useful for multi-segment matching only if\n       the  pattern  contains  no nested lookbehinds. For example, the pattern\n       (?<=a(?<=ba)c) returns a maximum  lookbehind  of  2,  but  when  it  is\n       processed,  the  first lookbehind moves back by two characters, matches\n       one character, then the nested lookbehind also moves back by two  char-\n       acters.  This  puts the matching point three characters earlier than it\n       was at the start.  PCRE2_INFO_MAXLOOKBEHIND is really only useful as  a\n       debugging  tool. See the pcre2partial documentation for a discussion of\n       multi-segment matching.\n\n         PCRE2_INFO_MINLENGTH\n\n       If a minimum length for matching  subject  strings  was  computed,  its\n       value is returned. Otherwise the returned value is 0. This value is not\n       computed  when PCRE2_NO_START_OPTIMIZE is set. The value is a number of\n       characters, which in UTF mode may be different from the number of  code\n       units.  The  third  argument  should  point to a uint32_t variable. The\n       value is a lower bound to the length of any matching string. There  may\n       not  be  any  strings  of that length that do actually match, but every\n       string that does match is at least that long.\n\n         PCRE2_INFO_NAMECOUNT\n         PCRE2_INFO_NAMEENTRYSIZE\n         PCRE2_INFO_NAMETABLE\n\n       PCRE2 supports the use of named as well as numbered capturing parenthe-\n       ses. The names are just an additional way of identifying the  parenthe-\n       ses, which still acquire numbers. Several convenience functions such as\n       pcre2_substring_get_byname()  are provided for extracting captured sub-\n       strings by name. It is also possible to extract the data  directly,  by\n       first  converting  the  name to a number in order to access the correct\n       pointers in the output vector (described with pcre2_match() below).  To\n       do the conversion, you need to use the name-to-number map, which is de-\n       scribed by these three values.\n\n       The  map  consists  of a number of fixed-size entries. PCRE2_INFO_NAME-\n       COUNT gives the number of entries, and  PCRE2_INFO_NAMEENTRYSIZE  gives\n       the  size  of each entry in code units; both of these return a uint32_t\n       value. The entry size depends on the length of the longest name.\n\n       PCRE2_INFO_NAMETABLE returns a pointer to the first entry of the table.\n       This is a PCRE2_SPTR pointer to a block of code units. In the 8-bit li-\n       brary, the first two bytes of each entry are the number of the  captur-\n       ing  parenthesis,  most  significant byte first. In the 16-bit library,\n       the pointer points to 16-bit code units, the first  of  which  contains\n       the  parenthesis  number.  In the 32-bit library, the pointer points to\n       32-bit code units, the first of which contains the parenthesis  number.\n       The rest of the entry is the corresponding name, zero terminated.\n\n       The  names are in alphabetical order. If (?| is used to create multiple\n       capture groups with the same number, as described in the section on du-\n       plicate group numbers in the pcre2pattern page, the groups may be given\n       the same name, but there is only one  entry  in  the  table.  Different\n       names for groups of the same number are not permitted.\n\n       Duplicate  names  for capture groups with different numbers are permit-\n       ted, but only if PCRE2_DUPNAMES is set. They appear in the table in the\n       order in which they were found in the pattern. In the  absence  of  (?|\n       this  is  the  order of increasing number; when (?| is used this is not\n       necessarily the case because later capture groups may have  lower  num-\n       bers.\n\n       As  a  simple  example of the name/number table, consider the following\n       pattern after compilation by the 8-bit library  (assume  PCRE2_EXTENDED\n       is set, so white space - including newlines - is ignored):\n\n         (?<date> (?<year>(\\d\\d)?\\d\\d) -\n         (?<month>\\d\\d) - (?<day>\\d\\d) )\n\n       There are four named capture groups, so the table has four entries, and\n       each  entry  in the table is eight bytes long. The table is as follows,\n       with non-printing bytes shows in hexadecimal, and undefined bytes shown\n       as ??:\n\n         00 01 d  a  t  e  00 ??\n         00 05 d  a  y  00 ?? ??\n         00 04 m  o  n  t  h  00\n         00 02 y  e  a  r  00 ??\n\n       When writing code to extract data from named capture groups  using  the\n       name-to-number  map,  remember that the length of the entries is likely\n       to be different for each compiled pattern.\n\n         PCRE2_INFO_NEWLINE\n\n       The output is one of the following uint32_t values:\n\n         PCRE2_NEWLINE_CR       Carriage return (CR)\n         PCRE2_NEWLINE_LF       Linefeed (LF)\n         PCRE2_NEWLINE_CRLF     Carriage return, linefeed (CRLF)\n         PCRE2_NEWLINE_ANY      Any Unicode line ending\n         PCRE2_NEWLINE_ANYCRLF  Any of CR, LF, or CRLF\n         PCRE2_NEWLINE_NUL      The NUL character (binary zero)\n\n       This identifies the character sequence that will be recognized as mean-\n       ing \"newline\" while matching.\n\n         PCRE2_INFO_SIZE\n\n       Return the size of the compiled pattern in bytes  (for  all  three  li-\n       braries).  The  third  argument should point to a size_t variable. This\n       value includes the size of the general data  block  that  precedes  the\n       code  units of the compiled pattern itself. The value that is used when\n       pcre2_compile() is getting memory in which to place the  compiled  pat-\n       tern may be slightly larger than the value returned by this option, be-\n       cause  there  are  cases where the code that calculates the size has to\n       over-estimate. Processing a pattern with the JIT compiler does not  al-\n       ter the value returned by this option.\n\n\nINFORMATION ABOUT A PATTERN'S CALLOUTS\n\n       int pcre2_callout_enumerate(const pcre2_code *code,\n         int (*callback)(pcre2_callout_enumerate_block *, void *),\n         void *user_data);\n\n       A script language that supports the use of string arguments in callouts\n       might  like  to  scan  all the callouts in a pattern before running the\n       match. This can be done by calling pcre2_callout_enumerate(). The first\n       argument is a pointer to a compiled pattern, the  second  points  to  a\n       callback  function,  and the third is arbitrary user data. The callback\n       function is called for every callout in the pattern  in  the  order  in\n       which they appear. Its first argument is a pointer to a callout enumer-\n       ation  block,  and  its second argument is the user_data value that was\n       passed to pcre2_callout_enumerate(). The contents of the  callout  enu-\n       meration  block  are described in the pcre2callout documentation, which\n       also gives further details about callouts.\n\n\nSERIALIZATION AND PRECOMPILING\n\n       It is possible to save compiled patterns on disc or elsewhere, and  re-\n       load them later, subject to a number of restrictions. The host on which\n       the  patterns  are  reloaded must be running the same version of PCRE2,\n       with the same code unit width, and must also have the same  endianness,\n       pointer  width,  and  PCRE2_SIZE  type. Before compiled patterns can be\n       saved, they must be converted to a \"serialized\" form, which in the case\n       of PCRE2 is really just a bytecode dump.  The functions whose names be-\n       gin with pcre2_serialize_ are used for converting to and from the seri-\n       alized form. They are described in  the  pcre2serialize  documentation.\n       Note  that PCRE2 serialization does not convert compiled patterns to an\n       abstract format like Java or .NET serialization.\n\n\nTHE MATCH DATA BLOCK\n\n       pcre2_match_data *pcre2_match_data_create(uint32_t ovecsize,\n         pcre2_general_context *gcontext);\n\n       pcre2_match_data *pcre2_match_data_create_from_pattern(\n         const pcre2_code *code, pcre2_general_context *gcontext);\n\n       void pcre2_match_data_free(pcre2_match_data *match_data);\n\n       Information about a successful or unsuccessful match  is  placed  in  a\n       match  data  block,  which  is  an opaque structure that is accessed by\n       function calls. In particular, the match data block contains  a  vector\n       of offsets into the subject string that define the matched parts of the\n       subject. This is known as the ovector.\n\n       Before  calling  pcre2_match(), pcre2_dfa_match(), or pcre2_jit_match()\n       you must create a match data block by calling one of the creation func-\n       tions above. For pcre2_match_data_create(), the first argument  is  the\n       number of pairs of offsets in the ovector.\n\n       When  using  pcre2_match(), one pair of offsets is required to identify\n       the string that matched the whole pattern, with an additional pair  for\n       each captured substring. For example, a value of 4 creates enough space\n       to  record  the matched portion of the subject plus three captured sub-\n       strings.\n\n       When using pcre2_dfa_match() there may be multiple  matched  substrings\n       of  different  lengths  at  the  same point in the subject. The ovector\n       should be made large enough to hold as many as are expected.\n\n       A minimum of at least 1 pair is imposed  by  pcre2_match_data_create(),\n       so  it  is  always possible to return the overall matched string in the\n       case  of  pcre2_match()  or  the  longest  match   in   the   case   of\n       pcre2_dfa_match().  The  maximum number of pairs is 65535; if the first\n       argument of pcre2_match_data_create() is greater than  this,  65535  is\n       used.\n\n       The second argument of pcre2_match_data_create() is a pointer to a gen-\n       eral  context, which can specify custom memory management for obtaining\n       the memory for the match data block. If you are not using custom memory\n       management, pass NULL, which causes malloc() to be used.\n\n       For pcre2_match_data_create_from_pattern(), the  first  argument  is  a\n       pointer to a compiled pattern. The ovector is created to be exactly the\n       right  size  to  hold  all  the substrings a pattern might capture when\n       matched using pcre2_match(). You should not use this call when matching\n       with pcre2_dfa_match(). The second argument is again  a  pointer  to  a\n       general  context, but in this case if NULL is passed, the memory is ob-\n       tained using the same allocator that was used for the compiled  pattern\n       (custom or default).\n\n       A  match  data block can be used many times, with the same or different\n       compiled patterns. You can extract information from a match data  block\n       after  a  match  operation  has  finished, using functions that are de-\n       scribed in the sections on matched strings and other match data below.\n\n       When a call of pcre2_match() fails, valid  data  is  available  in  the\n       match  block  only  when  the  error  is PCRE2_ERROR_NOMATCH, PCRE2_ER-\n       ROR_PARTIAL, or one of the error codes for an invalid UTF  string.  Ex-\n       actly what is available depends on the error, and is detailed below.\n\n       When  one of the matching functions is called, pointers to the compiled\n       pattern and the subject string are set in the match data block so  that\n       they  can  be referenced by the extraction functions after a successful\n       match. After running a match, you must not free a compiled pattern or a\n       subject string until after all operations on the match data block  (for\n       that  match)  have  taken  place,  unless,  in  the case of the subject\n       string, you have used the PCRE2_COPY_MATCHED_SUBJECT option,  which  is\n       described  in  the section entitled \"Option bits for pcre2_match()\" be-\n       low.\n\n       When a match data block itself is no longer needed, it should be  freed\n       by  calling  pcre2_match_data_free(). If this function is called with a\n       NULL argument, it returns immediately, without doing anything.\n\n\nMEMORY USE FOR MATCH DATA BLOCKS\n\n       PCRE2_SIZE pcre2_get_match_data_size(pcre2_match_data *match_data);\n\n       PCRE2_SIZE pcre2_get_match_data_heapframes_size(\n         pcre2_match_data *match_data);\n\n       The size of a match data block depends on the size of the ovector  that\n       it contains. The function pcre2_get_match_data_size() returns the size,\n       in bytes, of the block that is its argument.\n\n       When pcre2_match() runs interpretively (that is, without using JIT), it\n       makes use of a vector of data frames for remembering backtracking posi-\n       tions.  The size of each individual frame depends on the number of cap-\n       turing  parentheses  in  the  pattern  and  can  be obtained by calling\n       pcre2_pattern_info() with the PCRE2_INFO_FRAMESIZE option (see the sec-\n       tion entitled \"Information about a compiled pattern\" above).\n\n       Heap memory is used for the frames vector; if the initial memory  block\n       turns  out  to  be  too  small during matching, it is automatically ex-\n       panded. When pcre2_match() returns, the memory is not  freed,  but  re-\n       mains  attached  to  the  match  data  block, for use by any subsequent\n       matches that use the same block. It is  automatically  freed  when  the\n       match data block itself is freed.\n\n       You  can  find  the current size of the frames vector that a match data\n       block owns by  calling  pcre2_get_match_data_heapframes_size().  For  a\n       newly  created  match  data  block the size will be zero. Some types of\n       match may require a lot of frames and thus a large vector; applications\n       that run in environments where memory is constrained can check this and\n       free the match data block if the heap frames vector has become too big.\n\n\nMATCHING A PATTERN: THE TRADITIONAL FUNCTION\n\n       int pcre2_match(const pcre2_code *code, PCRE2_SPTR subject,\n         PCRE2_SIZE length, PCRE2_SIZE startoffset,\n         uint32_t options, pcre2_match_data *match_data,\n         pcre2_match_context *mcontext);\n\n       The function pcre2_match() is called to match a subject string  against\n       a  compiled pattern, which is passed in the code argument. You can call\n       pcre2_match() with the same code argument as many times as you like, in\n       order to find multiple matches in the subject string or to  match  dif-\n       ferent subject strings with the same pattern.\n\n       This  function is the main matching facility of the library, and it op-\n       erates in a Perl-like manner. For specialist use there is also  an  al-\n       ternative  matching  function,  which is described below in the section\n       about the pcre2_dfa_match() function.\n\n       Here is an example of a simple call to pcre2_match():\n\n         pcre2_match_data *md = pcre2_match_data_create(4, NULL);\n         int rc = pcre2_match(\n           re,             /* result of pcre2_compile() */\n           \"some string\",  /* the subject string */\n           11,             /* the length of the subject string */\n           0,              /* start at offset 0 in the subject */\n           0,              /* default options */\n           md,             /* the match data block */\n           NULL);          /* a match context; NULL means use defaults */\n\n       If the subject string is zero-terminated, the length can  be  given  as\n       PCRE2_ZERO_TERMINATED. A match context must be provided if certain less\n       common matching parameters are to be changed. For details, see the sec-\n       tion on the match context above.\n\n   The string to be matched by pcre2_match()\n\n       The  subject string is passed to pcre2_match() as a pointer in subject,\n       a length in length, and a starting offset in  startoffset.  The  length\n       and  offset  are  in  code units, not characters.  That is, they are in\n       bytes for the 8-bit library, 16-bit code units for the 16-bit  library,\n       and  32-bit  code units for the 32-bit library, whether or not UTF pro-\n       cessing is enabled. As a special case, if subject is NULL and length is\n       zero, the subject is assumed to be an empty string. If length  is  non-\n       zero, an error occurs if subject is NULL.\n\n       If startoffset is greater than the length of the subject, pcre2_match()\n       returns  PCRE2_ERROR_BADOFFSET.  When  the starting offset is zero, the\n       search for a match starts at the beginning of the subject, and this  is\n       by far the most common case. In UTF-8 or UTF-16 mode, the starting off-\n       set  must  point to the start of a character, or to the end of the sub-\n       ject (in UTF-32 mode, one code unit equals one character, so  all  off-\n       sets  are  valid). Like the pattern string, the subject may contain bi-\n       nary zeros.\n\n       A non-zero starting offset is useful when searching for  another  match\n       in  the  same  subject  by calling pcre2_match() again after a previous\n       success.  Setting startoffset differs from  passing  over  a  shortened\n       string  and  setting  PCRE2_NOTBOL in the case of a pattern that begins\n       with any kind of lookbehind. For example, consider the pattern\n\n         \\Biss\\B\n\n       which finds occurrences of \"iss\" in the middle of  words.  (\\B  matches\n       only  if  the  current position in the subject is not a word boundary.)\n       When  applied  to  the  string  \"Mississippi\"   the   first   call   to\n       pcre2_match()  finds  the  first occurrence. If pcre2_match() is called\n       again with just the remainder of the subject, namely \"issippi\", it does\n       not match, because \\B is always false at  the  start  of  the  subject,\n       which  is  deemed  to  be a word boundary. However, if pcre2_match() is\n       passed the entire string again, but with startoffset set to 4, it finds\n       the second occurrence of \"iss\" because it is able to  look  behind  the\n       starting point to discover that it is preceded by a letter.\n\n       Finding  all  the  matches  in a subject is tricky when the pattern can\n       match an empty string. PCRE2 includes a helper API to assist with this;\n       see the section entitled \"Iterating over all  matches\"  below  for  de-\n       tails.\n\n       If a non-zero starting offset is passed when the pattern is anchored, a\n       single attempt to match at the given offset is made. This can only suc-\n       ceed  if  the  pattern does not require the match to be at the start of\n       the subject. In other words, the anchoring must be the result  of  set-\n       ting  the PCRE2_ANCHORED option or the use of .* with PCRE2_DOTALL, not\n       by starting the pattern with ^ or \\A.\n\n   Option bits for pcre2_match()\n\n       The unused bits of the options argument for pcre2_match() must be zero.\n       The   only   bits    that    may    be    set    are    PCRE2_ANCHORED,\n       PCRE2_COPY_MATCHED_SUBJECT,  PCRE2_DISABLE_RECURSELOOP_CHECK, PCRE2_EN-\n       DANCHORED,      PCRE2_NOTBOL,       PCRE2_NOTEOL,       PCRE2_NOTEMPTY,\n       PCRE2_NOTEMPTY_ATSTART,  PCRE2_NO_JIT,  PCRE2_NO_UTF_CHECK,  PCRE2_PAR-\n       TIAL_HARD, and PCRE2_PARTIAL_SOFT.  Their action is described below.\n\n       Setting PCRE2_ANCHORED or PCRE2_ENDANCHORED at match time is  not  sup-\n       ported  by  the just-in-time (JIT) compiler. If it is set, JIT matching\n       is  disabled  and  the  interpretive  code  in  pcre2_match()  is  run.\n       PCRE2_DISABLE_RECURSELOOP_CHECK  is  ignored  by  JIT,  but  apart from\n       PCRE2_NO_JIT (obviously), the remaining options are supported  for  JIT\n       matching.\n\n         PCRE2_ANCHORED\n\n       The PCRE2_ANCHORED option limits pcre2_match() to matching at the first\n       matching  position.  If  a pattern was compiled with PCRE2_ANCHORED, or\n       turned out to be anchored by virtue of its contents, it cannot be  made\n       unanchored at matching time. Note that setting the option at match time\n       disables JIT matching.\n\n         PCRE2_COPY_MATCHED_SUBJECT\n\n       By  default,  a  pointer to the subject is remembered in the match data\n       block so that, after a successful match, it can be  referenced  by  the\n       substring  extraction  functions.  This means that the subject's memory\n       must not be freed until all such operations are complete. For some  ap-\n       plications  where the lifetime of the subject string is not guaranteed,\n       it may be necessary to make a copy of the subject  string,  but  it  is\n       wasteful  to do this unless the match is successful. After a successful\n       match, if PCRE2_COPY_MATCHED_SUBJECT is set, the subject is copied  and\n       the  new  pointer  is remembered in the match data block instead of the\n       original subject pointer. The memory allocator that was  used  for  the\n       match  block  itself  is  used.  The  copy  is automatically freed when\n       pcre2_match_data_free() is called to free the match data block.  It  is\n       also automatically freed if the match data block is re-used for another\n       match operation.\n\n         PCRE2_DISABLE_RECURSELOOP_CHECK\n\n       This  option  is relevant only to pcre2_match() for interpretive match-\n       ing.   It  is  ignored  when  JIT  is  used,  and  is   forbidden   for\n       pcre2_dfa_match().\n\n       The use of recursion in patterns can lead to infinite loops. In the in-\n       terpretive  matcher  these  would  be eventually caught by the match or\n       heap limits, but this could take a long time and/or use a lot of memory\n       if the limits are large. There is therefore a check  at  the  start  of\n       each  recursion.   If  the  same  group is still active from a previous\n       call, and the current subject pointer is the same  as  it  was  at  the\n       start  of  that group, and the furthest inspected character of the sub-\n       ject has not changed, an error is generated.\n\n       There are rare cases of matches that would complete,  but  nevertheless\n       trigger  this  error.  This  option  disables the check. It is provided\n       mainly for testing when comparing JIT and interpretive behaviour.\n\n         PCRE2_ENDANCHORED\n\n       If the PCRE2_ENDANCHORED option is set, any string  that  pcre2_match()\n       matches  must be right at the end of the subject string. Note that set-\n       ting the option at match time disables JIT matching.\n\n         PCRE2_NOTBOL\n\n       This option specifies that first character of the subject string is not\n       the beginning of a line, so the  circumflex  metacharacter  should  not\n       match  before  it.  Setting  this without having set PCRE2_MULTILINE at\n       compile time causes circumflex never to match. This option affects only\n       the behaviour of the circumflex metacharacter. It does not affect \\A.\n\n         PCRE2_NOTEOL\n\n       This option specifies that the end of the subject string is not the end\n       of a line, so the dollar metacharacter should not match it nor  (except\n       in  multiline mode) a newline immediately before it. Setting this with-\n       out having set PCRE2_MULTILINE at compile time causes dollar  never  to\n       match. This option affects only the behaviour of the dollar metacharac-\n       ter. It does not affect \\Z or \\z.\n\n         PCRE2_NOTEMPTY\n\n       An empty string is not considered to be a valid match if this option is\n       set.  If  there are alternatives in the pattern, they are tried. If all\n       the alternatives match the empty string, the entire  match  fails.  For\n       example, if the pattern\n\n         a?b?\n\n       is  applied  to  a  string not beginning with \"a\" or \"b\", it matches an\n       empty string at the start of the subject. With PCRE2_NOTEMPTY set, this\n       match is not valid, so pcre2_match() searches further into  the  string\n       for occurrences of \"a\" or \"b\".\n\n         PCRE2_NOTEMPTY_ATSTART\n\n       This  is  like PCRE2_NOTEMPTY, except that it locks out an empty string\n       match only at the first matching position, that is, at the start of the\n       subject plus the starting offset. An empty string match  later  in  the\n       subject is permitted.  If the pattern is anchored, such a match can oc-\n       cur only if the pattern contains \\K.\n\n         PCRE2_NO_JIT\n\n       By   default,   if   a  pattern  has  been  successfully  processed  by\n       pcre2_jit_compile(), JIT is automatically used  when  pcre2_match()  is\n       called  with  options  that JIT supports. Setting PCRE2_NO_JIT disables\n       the use of JIT; it forces matching to be done by the interpreter.\n\n         PCRE2_NO_UTF_CHECK\n\n       When PCRE2_UTF is set at compile time, the validity of the subject as a\n       UTF  string  is  checked  unless  PCRE2_NO_UTF_CHECK   is   passed   to\n       pcre2_match() or PCRE2_MATCH_INVALID_UTF was passed to pcre2_compile().\n       The latter special case is discussed in detail in the pcre2unicode doc-\n       umentation.\n\n       In  the default case, if a non-zero starting offset is given, the check\n       is applied only to that part of the subject  that  could  be  inspected\n       during  matching,  and there is a check that the starting offset points\n       to the first code unit of a character or to the end of the subject.  If\n       there  are no lookbehind assertions in the pattern, the check starts at\n       the starting offset.  Otherwise, it starts at the length of the longest\n       lookbehind before the starting offset, or at the start of  the  subject\n       if  there are not that many characters before the starting offset. Note\n       that the sequences \\b and \\B are one-character lookbehinds.\n\n       The check is carried out before any other processing takes place, and a\n       negative error code is returned if the check fails. There  are  several\n       UTF  error  codes  for each code unit width, corresponding to different\n       problems with the code unit sequence. There are discussions  about  the\n       validity  of  UTF-8  strings, UTF-16 strings, and UTF-32 strings in the\n       pcre2unicode documentation.\n\n       If you know that your subject is valid, and you want to skip this check\n       for performance reasons, you can set the PCRE2_NO_UTF_CHECK option when\n       calling pcre2_match(). You might want to do this  for  the  second  and\n       subsequent  calls  to pcre2_match() if you are making repeated calls to\n       find multiple matches in the same subject string.\n\n       Warning: Unless PCRE2_MATCH_INVALID_UTF was set at compile  time,  when\n       PCRE2_NO_UTF_CHECK  is  set  at match time the effect of passing an in-\n       valid string as a subject, or an invalid value of startoffset, is unde-\n       fined.  Your program may crash or loop indefinitely or give  wrong  re-\n       sults.\n\n         PCRE2_PARTIAL_HARD\n         PCRE2_PARTIAL_SOFT\n\n       These options turn on the partial matching feature. A partial match oc-\n       curs  if  the  end  of  the subject string is reached successfully, but\n       there are not enough subject characters to complete the match. In addi-\n       tion, either at least one character must have  been  inspected  or  the\n       pattern  must  contain  a  lookbehind,  or the pattern must be one that\n       could match an empty string.\n\n       If this situation arises when PCRE2_PARTIAL_SOFT  (but  not  PCRE2_PAR-\n       TIAL_HARD) is set, matching continues by testing any remaining alterna-\n       tives.  Only  if  no complete match can be found is PCRE2_ERROR_PARTIAL\n       returned instead of PCRE2_ERROR_NOMATCH.  In  other  words,  PCRE2_PAR-\n       TIAL_SOFT  specifies  that  the  caller is prepared to handle a partial\n       match, but only if no complete match can be found.\n\n       If PCRE2_PARTIAL_HARD is set, it overrides PCRE2_PARTIAL_SOFT. In  this\n       case,  if  a  partial match is found, pcre2_match() immediately returns\n       PCRE2_ERROR_PARTIAL, without considering  any  other  alternatives.  In\n       other words, when PCRE2_PARTIAL_HARD is set, a partial match is consid-\n       ered to be more important than an alternative complete match.\n\n       There is a more detailed discussion of partial and multi-segment match-\n       ing, with examples, in the pcre2partial documentation.\n\n\nNEWLINE HANDLING WHEN MATCHING\n\n       When  PCRE2 is built, a default newline convention is set; this is usu-\n       ally the standard convention for the operating system. The default  can\n       be  overridden  in a compile context by calling pcre2_set_newline(). It\n       can also be overridden by starting a pattern string with, for  example,\n       (*CRLF),  as  described  in  the  section on newline conventions in the\n       pcre2pattern page. During matching, the newline choice affects the  be-\n       haviour  of the dot, circumflex, and dollar metacharacters. It may also\n       alter the way the match starting position is  advanced  after  a  match\n       failure for an unanchored pattern.\n\n       When PCRE2_NEWLINE_CRLF, PCRE2_NEWLINE_ANYCRLF, or PCRE2_NEWLINE_ANY is\n       set  as  the  newline convention, and a match attempt for an unanchored\n       pattern fails when the current starting position is at a CRLF sequence,\n       and the pattern contains no explicit matches for CR or  LF  characters,\n       the  match  position  is  advanced by two characters instead of one, in\n       other words, to after the CRLF.\n\n       The above rule is a compromise that makes the most common cases work as\n       expected. For example, if the pattern is .+A (and the PCRE2_DOTALL  op-\n       tion  is  not set), it does not match the string \"\\r\\nA\" because, after\n       failing at the start, it skips both the CR and the LF before  retrying.\n       However,  the  pattern  [\\r\\n]A does match that string, because it con-\n       tains an explicit CR or LF reference, and so advances only by one char-\n       acter after the first failure.\n\n       An explicit match for CR of LF is either a literal appearance of one of\n       those characters in the pattern, or one of the \\r or \\n  or  equivalent\n       octal or hexadecimal escape sequences. Implicit matches such as [^X] do\n       not  count, nor does \\s, even though it includes CR and LF in the char-\n       acters that it matches.\n\n       Notwithstanding the above, anomalous effects may still occur when  CRLF\n       is a valid newline sequence and explicit \\r or \\n escapes appear in the\n       pattern.\n\n\nHOW PCRE2_MATCH() RETURNS A STRING AND CAPTURED SUBSTRINGS\n\n       uint32_t pcre2_get_ovector_count(pcre2_match_data *match_data);\n\n       PCRE2_SIZE *pcre2_get_ovector_pointer(pcre2_match_data *match_data);\n\n       In  general, a pattern matches a certain portion of the subject, and in\n       addition, further substrings from the subject  may  be  picked  out  by\n       parenthesized  parts  of  the  pattern.  Following the usage in Jeffrey\n       Friedl's book, this is called \"capturing\"  in  what  follows,  and  the\n       phrase  \"capture  group\" (Perl terminology) is used for a fragment of a\n       pattern that picks out a substring. PCRE2 supports several other  kinds\n       of parenthesized group that do not cause substrings to be captured. The\n       pcre2_pattern_info()  function can be used to find out how many capture\n       groups there are in a compiled pattern.\n\n       You can use auxiliary functions for accessing  captured  substrings  by\n       number or by name, as described in sections below.\n\n       Alternatively, you can make direct use of the vector of PCRE2_SIZE val-\n       ues,  called  the  ovector,  which  contains  the  offsets  of captured\n       strings.  It  is  part  of  the  match  data   block.    The   function\n       pcre2_get_ovector_pointer()  returns  the  address  of the ovector, and\n       pcre2_get_ovector_count() returns the number of pairs of values it con-\n       tains.\n\n       Within the ovector, the first in each pair of values is set to the off-\n       set of the first code unit of a substring, and the second is set to the\n       offset of the first code unit after the end of a substring. These  val-\n       ues  are always code unit offsets, not character offsets. That is, they\n       are byte offsets in the 8-bit library, 16-bit offsets in the 16-bit li-\n       brary, and 32-bit offsets in the 32-bit library.\n\n       After a partial match  (error  return  PCRE2_ERROR_PARTIAL),  only  the\n       first  pair  of  offsets  (that is, ovector[0] and ovector[1]) are set.\n       They identify the part of the subject that was partially  matched.  See\n       the pcre2partial documentation for details of partial matching.\n\n       After  a  fully  successful match, the first pair of offsets identifies\n       the portion of the subject string that was matched by the  entire  pat-\n       tern.  The  next  pair is used for the first captured substring, and so\n       on. The value returned by pcre2_match() is one more  than  the  highest\n       numbered  pair  that  has been set. For example, if two substrings have\n       been captured, the returned value is 3. If there are no  captured  sub-\n       strings, the return value from a successful match is 1, indicating that\n       just the first pair of offsets has been set.\n\n       If  a  pattern  uses the \\K escape sequence within a positive lookahead\n       assertion, the reported start of a successful match can be greater than\n       the end of the match. For example, if the pattern (?=ab\\K)  is  matched\n       against  \"ab\",  the start and end offset values for the match are 2 and\n       0.\n\n       If a capture group is matched repeatedly within a single  match  opera-\n       tion, it is the last portion of the subject that it matched that is re-\n       turned.\n\n       If the ovector is too small to hold all the captured substring offsets,\n       as  much  as possible is filled in, and the function returns a value of\n       zero. If captured substrings are not of interest, pcre2_match() may  be\n       called with a match data block whose ovector is of minimum length (that\n       is, one pair).\n\n       It  is  possible for capture group number n+1 to match some part of the\n       subject when group n has not been used at  all.  For  example,  if  the\n       string \"abc\" is matched against the pattern (a|(z))(bc) the return from\n       the  function  is 4, and groups 1 and 3 are matched, but 2 is not. When\n       this happens, both values in the offset pairs corresponding  to  unused\n       groups are set to PCRE2_UNSET.\n\n       Offset  values  that  correspond to unused groups at the end of the ex-\n       pression are also set to PCRE2_UNSET. For example, if the string  \"abc\"\n       is  matched  against  the pattern (abc)(x(yz)?)? groups 2 and 3 are not\n       matched. The return from the function is 2, because  the  highest  used\n       capture group number is 1. The offsets for the second and third capture\n       groups  (assuming  the  vector  is  large enough, of course) are set to\n       PCRE2_UNSET.\n\n       Elements in the ovector that do not correspond to capturing parentheses\n       in the pattern are never changed. That is, if a pattern contains n cap-\n       turing parentheses, no more than ovector[0] to ovector[2n+1] are set by\n       pcre2_match(). The other elements retain whatever  values  they  previ-\n       ously  had.  After  a failed match attempt, the contents of the ovector\n       are unchanged.\n\n\nOTHER INFORMATION ABOUT A MATCH\n\n       PCRE2_SPTR pcre2_get_mark(pcre2_match_data *match_data);\n\n       PCRE2_SIZE pcre2_get_startchar(pcre2_match_data *match_data);\n\n       As well as the offsets in the ovector, other information about a  match\n       is  retained  in the match data block and can be retrieved by the above\n       functions in appropriate circumstances. If they  are  called  at  other\n       times, the result is undefined.\n\n       After  a  successful match, a partial match (PCRE2_ERROR_PARTIAL), or a\n       failure to match (PCRE2_ERROR_NOMATCH), a mark name may  be  available.\n       The  function pcre2_get_mark() can be called to access this name, which\n       can be specified in the pattern by  any  of  the  backtracking  control\n       verbs, not just (*MARK). The same function applies to all the verbs. It\n       returns a pointer to the zero-terminated name, which is within the com-\n       piled pattern. If no name is available, NULL is returned. The length of\n       the  name  (excluding  the terminating zero) is stored in the code unit\n       that precedes the name. You should use this length instead  of  relying\n       on the terminating zero if the name might contain a binary zero.\n\n       After  a  successful  match, the name that is returned is the last mark\n       name encountered on the matching path through the pattern. Instances of\n       backtracking verbs without names do not count. Thus,  for  example,  if\n       the matching path contains (*MARK:A)(*PRUNE), the name \"A\" is returned.\n       After a \"no match\" or a partial match, the last encountered name is re-\n       turned. For example, consider this pattern:\n\n         ^(*MARK:A)((*MARK:B)a|b)c\n\n       When  it  matches \"bc\", the returned name is A. The B mark is \"seen\" in\n       the first branch of the group, but it is not on the matching  path.  On\n       the  other  hand,  when  this pattern fails to match \"bx\", the returned\n       name is B.\n\n       Warning: By default, certain start-of-match optimizations are  used  to\n       give  a  fast \"no match\" result in some situations. For example, if the\n       anchoring is removed from the pattern above, there is an initial  check\n       for  the presence of \"c\" in the subject before running the matching en-\n       gine. This check fails for \"bx\", causing a match failure without seeing\n       any marks. You can disable the start-of-match optimizations by  setting\n       the  PCRE2_NO_START_OPTIMIZE  option for pcre2_compile() or by starting\n       the pattern with (*NO_START_OPT).\n\n       After a successful match, a partial match, or one of  the  invalid  UTF\n       errors  (for example, PCRE2_ERROR_UTF8_ERR5), pcre2_get_startchar() can\n       be called. After a successful or partial match it returns the code unit\n       offset of the character at which the match started. For  a  non-partial\n       match,  this can be different to the value of ovector[0] if the pattern\n       contains the \\K escape sequence. After a partial match,  however,  this\n       value  is  always the same as ovector[0] because \\K does not affect the\n       result of a partial match.\n\n       After a UTF check failure, pcre2_get_startchar() can be used to  obtain\n       the code unit offset of the invalid UTF character. Details are given in\n       the pcre2unicode page.\n\n\nERROR RETURNS FROM pcre2_match()\n\n       If  pcre2_match() fails, it returns a negative number. This can be con-\n       verted to a text string by calling the pcre2_get_error_message()  func-\n       tion  (see  \"Obtaining a textual error message\" below).  Negative error\n       codes are also returned by other functions,  and  are  documented  with\n       them.  The codes are given names in the header file. If UTF checking is\n       in force and an invalid UTF subject string is detected, one of a number\n       of UTF-specific negative error codes is returned. Details are given  in\n       the  pcre2unicode  page. The following are the other errors that may be\n       returned by pcre2_match():\n\n         PCRE2_ERROR_NOMATCH\n\n       The subject string did not match the pattern.\n\n         PCRE2_ERROR_PARTIAL\n\n       The subject string did not match, but it did match partially.  See  the\n       pcre2partial documentation for details of partial matching.\n\n         PCRE2_ERROR_BADMAGIC\n\n       PCRE2 stores a 4-byte \"magic number\" at the start of the compiled code,\n       to  catch  the case when it is passed a junk pointer. This is the error\n       that is returned when the magic number is not present.\n\n         PCRE2_ERROR_BADMODE\n\n       This error is given when a compiled pattern is passed to a function  in\n       a  library  of a different code unit width, for example, a pattern com-\n       piled by the 8-bit library is passed to  a  16-bit  or  32-bit  library\n       function.\n\n         PCRE2_ERROR_BADOFFSET\n\n       The value of startoffset was greater than the length of the subject.\n\n         PCRE2_ERROR_BADOPTION\n\n       An unrecognized bit was set in the options argument.\n\n         PCRE2_ERROR_BADUTFOFFSET\n\n       The UTF code unit sequence that was passed as a subject was checked and\n       found  to be valid (the PCRE2_NO_UTF_CHECK option was not set), but the\n       value of startoffset did not point to the beginning of a UTF  character\n       or the end of the subject.\n\n         PCRE2_ERROR_CALLOUT\n\n       This  error  is never generated by pcre2_match() itself. It is provided\n       for use by callout  functions  that  want  to  cause  pcre2_match()  or\n       pcre2_callout_enumerate()  to  return a distinctive error code. See the\n       pcre2callout documentation for details.\n\n         PCRE2_ERROR_DEPTHLIMIT\n\n       The nested backtracking depth limit was reached.\n\n         PCRE2_ERROR_HEAPLIMIT\n\n       The heap limit was reached.\n\n         PCRE2_ERROR_INTERNAL\n\n       An unexpected internal error has occurred. This error could  be  caused\n       by a bug in PCRE2 or by overwriting of the compiled pattern.\n\n         PCRE2_ERROR_JIT_STACKLIMIT\n\n       This error is returned when a pattern that was successfully studied us-\n       ing JIT is being matched, but the memory available for the just-in-time\n       processing  stack  is  not large enough. See the pcre2jit documentation\n       for more details.\n\n         PCRE2_ERROR_MATCHLIMIT\n\n       The backtracking match limit was reached.\n\n         PCRE2_ERROR_NOMEMORY\n\n       Heap memory is used to remember  backtracking  points.  This  error  is\n       given  when  the  memory allocation function (default or custom) fails.\n       Note that a different error, PCRE2_ERROR_HEAPLIMIT,  is  given  if  the\n       amount of memory needed exceeds the heap limit. PCRE2_ERROR_NOMEMORY is\n       also  returned  if PCRE2_COPY_MATCHED_SUBJECT is set and memory alloca-\n       tion fails.\n\n         PCRE2_ERROR_NULL\n\n       Either the code, subject, or match_data argument was passed as NULL.\n\n         PCRE2_ERROR_RECURSELOOP\n\n       This error is returned when  pcre2_match()  detects  a  recursion  loop\n       within  the  pattern. Specifically, it means that either the whole pat-\n       tern or a capture group has been called recursively for the second time\n       at the same position in the subject string. Some simple  patterns  that\n       might  do  this are detected and faulted at compile time, but more com-\n       plicated cases, in particular mutual recursions between  two  different\n       groups, cannot be detected until matching is attempted.\n\n\nOBTAINING A TEXTUAL ERROR MESSAGE\n\n       int pcre2_get_error_message(int errorcode, PCRE2_UCHAR *buffer,\n         PCRE2_SIZE bufflen);\n\n       A  text  message  for  an  error code from any PCRE2 function (compile,\n       match, or auxiliary) can be obtained  by  calling  pcre2_get_error_mes-\n       sage().  The  code  is passed as the first argument, with the remaining\n       two arguments specifying a code unit buffer  and  its  length  in  code\n       units,  into  which the text message is placed. The message is returned\n       in code units of the appropriate width for the library  that  is  being\n       used.\n\n       The  returned message is terminated with a trailing zero, and the func-\n       tion returns the number of code  units  used,  excluding  the  trailing\n       zero. If the error number is unknown, the negative error code PCRE2_ER-\n       ROR_BADDATA  is  returned.  If  the buffer is too small, the message is\n       truncated (but still with a trailing zero), and the negative error code\n       PCRE2_ERROR_NOMEMORY is returned.  None of the messages is very long; a\n       buffer size of 120 code units is ample.\n\n\nITERATING OVER ALL MATCHES\n\n       int pcre2_next_match(pcre2_match_data *match_data,\n         PCRE2_SIZE *pstart_offset, uint32_t *poptions);\n\n       A common task for applications is to implement \"global\" matching behav-\n       iour, for example, replacing all matches in the subject; splitting  the\n       subject  on  all matches; or simply counting the number of matches. The\n       pcre2_next_match() function helps with this task by providing  the  ap-\n       propriate  parameters for the next match attempt (available since PCRE2\n       10.47).\n\n       First, a match attempt should be made using one of the  matching  func-\n       tions  (pcre2_match(), pcre2_dfa_match(), or pcre2_jit_match()).  Then,\n       pcre2_next_match() can be called, providing the same match_data parame-\n       ter.\n\n       It returns 0 (\"false\") if there is no need to make a further match  at-\n       tempt,  or 1 (\"true\") if another match should be attempted. Returning 1\n       does not imply that there is another match,  only  that  another  match\n       should be attempted (which may return PCRE2_ERROR_NOMATCH).\n\n       The  *pstart_offset  and  *poptions  are set if the function returns 1.\n       The *pstart_offset should be passed to the next match attempt directly,\n       and the *poptions should be passed to the next match attempt by combin-\n       ing with the application's match options using OR.\n\n       There is some code that demonstrates how to do this  in  the  pcre2demo\n       sample program. The general pattern is:\n\n         uint32_t app_options = ...;\n         uint32_t global_options = 0;\n         PCRE2_SIZE start_offset = 0;\n         while (1)\n           {\n           int rc = pcre2_match(re, subject, subject_len, start_offset,\n                                app_options | global_options, match_data,\n                                match_context);\n\n           if (rc == PCRE2_ERROR_NOMATCH) break; /* no match, and no more attempts */\n           if (rc < 0) { ... exit }\n\n           ...handle the match\n\n           if (!pcre2_next_match(match_data, &start_offset, &global_options))\n             break; /* no more attempts */\n           }\n\n       The guarantees provided by pcre2_next_match() are that the start_offset\n       will  advance,  so  the  loop will definitely terminate. The conditions\n       which ensure this are that either:  (a)  pcre2_next_match()  returns  0\n       (false);  or  (b)  the returned *pstart_offset is strictly greater than\n       the previous start_offset; or (c) if the previous match was a  success-\n       ful match of the empty string then the returned *pstart_offset is equal\n       to   the   previous   ovector[1],   and   *poptions   will  be  set  to\n       PCRE2_NOTEMPTY_ATSTART to prevent another empty match  from  being  re-\n       turned.\n\n       A  loop  implemented as shown above will always terminate, unless there\n       is a bug in PCRE2. As a measure of  \"defensive  programming\",  applica-\n       tions  are  encouraged to add an assertion or check to break their loop\n       if it does not make progress (and report the issue as a bug).\n\n       If   an   application   does   not   use   the   flag   PCRE2_EXTRA_AL-\n       LOW_LOOKAROUND_BSK, then each match is \"well-behaved\" and satisfies:\n\n         start_offset <= ovector[0] <= ovector[1].\n\n       In    this    case,   the   matches   found   by   pcre2_match()   with\n       pcre2_next_match() will be sorted, non-overlapping (possibly touching),\n       and with no duplicates.\n\n       Otherwise, if PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK is used, then the  guar-\n       antees  are  considerably  weaker. We do not guarantee that the matches\n       will always advance: only that the start_offset will. The matches found\n       by pcre2_match() with pcre2_next_match() will be a finite sequence  (as\n       pcre2_next_match()  ensures  that  start_offset advances, so the search\n       will terminate). The matches can however be  overlapping,  can  contain\n       duplicates, and (in truly pathological examples) may not even be sorted\n       by ovector[0]. Additionally, each match itself can end before it starts\n       (ovector[1]  <  ovector[0]).  We recommend that applications do not set\n       PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK.\n\n\nEXTRACTING CAPTURED SUBSTRINGS BY NUMBER\n\n       int pcre2_substring_length_bynumber(pcre2_match_data *match_data,\n         uint32_t number, PCRE2_SIZE *length);\n\n       int pcre2_substring_copy_bynumber(pcre2_match_data *match_data,\n         uint32_t number, PCRE2_UCHAR *buffer,\n         PCRE2_SIZE *bufflen);\n\n       int pcre2_substring_get_bynumber(pcre2_match_data *match_data,\n         uint32_t number, PCRE2_UCHAR **bufferptr,\n         PCRE2_SIZE *bufflen);\n\n       void pcre2_substring_free(PCRE2_UCHAR *buffer);\n\n       Captured substrings can be accessed directly by using  the  ovector  as\n       described above.  For convenience, auxiliary functions are provided for\n       extracting   captured  substrings  as  new,  separate,  zero-terminated\n       strings. A substring that contains a binary zero is correctly extracted\n       and has a further zero added on the end, but  the  result  is  not,  of\n       course, a C string.\n\n       The functions in this section identify substrings by number. The number\n       zero refers to the entire matched substring, with higher numbers refer-\n       ring  to  substrings  captured by parenthesized groups. After a partial\n       match, only substring zero is available.  An  attempt  to  extract  any\n       other  substring  gives the error PCRE2_ERROR_PARTIAL. The next section\n       describes similar functions for extracting captured substrings by name.\n\n       If a pattern uses the \\K escape sequence within  a  positive  lookahead\n       assertion, the reported start of a successful match can be greater than\n       the  end  of the match. For example, if the pattern (?=ab\\K) is matched\n       against \"ab\", the start and end offset values for the match are  2  and\n       0.  In  this  situation,  calling these functions with a zero substring\n       number extracts a zero-length empty string.\n\n       You can find the length in code units of a captured  substring  without\n       extracting  it  by calling pcre2_substring_length_bynumber(). The first\n       argument is a pointer to the match data block, the second is the  group\n       number,  and the third is a pointer to a variable into which the length\n       is placed. If you just want to know whether or not  the  substring  has\n       been captured, you can pass the third argument as NULL.\n\n       The  pcre2_substring_copy_bynumber()  function  copies  a captured sub-\n       string into a supplied buffer,  whereas  pcre2_substring_get_bynumber()\n       copies  it  into  new memory, obtained using the same memory allocation\n       function that was used for the match data block. The  first  two  argu-\n       ments  of  these  functions are a pointer to the match data block and a\n       capture group number.\n\n       The final arguments of pcre2_substring_copy_bynumber() are a pointer to\n       the buffer and a pointer to a variable that contains its length in code\n       units.  This is updated to contain the actual number of code units used\n       for the extracted substring, excluding the terminating zero.\n\n       For pcre2_substring_get_bynumber() the third and fourth arguments point\n       to variables that are updated with a pointer to the new memory and  the\n       number  of  code units that comprise the substring, again excluding the\n       terminating zero. When the substring is no longer  needed,  the  memory\n       should be freed by calling pcre2_substring_free().\n\n       The  return  value  from  all these functions is zero for success, or a\n       negative error code. If the pattern match  failed,  the  match  failure\n       code  is returned.  If a substring number greater than zero is used af-\n       ter a partial match, PCRE2_ERROR_PARTIAL is  returned.  Other  possible\n       error codes are:\n\n         PCRE2_ERROR_NOMEMORY\n\n       The  buffer  was  too small for pcre2_substring_copy_bynumber(), or the\n       attempt to get memory failed for pcre2_substring_get_bynumber().\n\n         PCRE2_ERROR_NOSUBSTRING\n\n       There is no substring with that number in the  pattern,  that  is,  the\n       number is greater than the number of capturing parentheses.\n\n         PCRE2_ERROR_UNAVAILABLE\n\n       The substring number, though not greater than the number of captures in\n       the pattern, is greater than the number of slots in the ovector, so the\n       substring could not be captured.\n\n         PCRE2_ERROR_UNSET\n\n       The  substring  did  not  participate in the match. For example, if the\n       pattern is (abc)|(def) and the subject is \"def\", and the  ovector  con-\n       tains at least two capturing slots, substring number 1 is unset.\n\n\nEXTRACTING A LIST OF ALL CAPTURED SUBSTRINGS\n\n       int pcre2_substring_list_get(pcre2_match_data *match_data,\n         PCRE2_UCHAR ***listptr, PCRE2_SIZE **lengthsptr);\n\n       void pcre2_substring_list_free(PCRE2_UCHAR **list);\n\n       The  pcre2_substring_list_get()  function  extracts  all available sub-\n       strings and builds a list of pointers to  them.  It  also  (optionally)\n       builds  a  second list that contains their lengths (in code units), ex-\n       cluding a terminating zero that is added to each of them. All  this  is\n       done in a single block of memory that is obtained using the same memory\n       allocation function that was used to get the match data block.\n\n       This  function  must be called only after a successful match. If called\n       after a partial match, the error code PCRE2_ERROR_PARTIAL is returned.\n\n       The address of the memory block is returned via listptr, which is  also\n       the start of the list of string pointers. The end of the list is marked\n       by  a  NULL pointer. The address of the list of lengths is returned via\n       lengthsptr. If your strings do not contain binary zeros and you do  not\n       therefore need the lengths, you may supply NULL as the lengthsptr argu-\n       ment  to  disable  the  creation of a list of lengths. The yield of the\n       function is zero if all went well, or PCRE2_ERROR_NOMEMORY if the  mem-\n       ory  block could not be obtained. When the list is no longer needed, it\n       should be freed by calling pcre2_substring_list_free().\n\n       If this function encounters a substring that is unset, which can happen\n       when capture group number n+1 matches some part  of  the  subject,  but\n       group  n has not been used at all, it returns an empty string. This can\n       be distinguished from a genuine zero-length substring by inspecting the\n       appropriate offset in the ovector, which contain PCRE2_UNSET for  unset\n       substrings, or by calling pcre2_substring_length_bynumber().\n\n\nEXTRACTING CAPTURED SUBSTRINGS BY NAME\n\n       int pcre2_substring_number_from_name(const pcre2_code *code,\n         PCRE2_SPTR name);\n\n       int pcre2_substring_length_byname(pcre2_match_data *match_data,\n         PCRE2_SPTR name, PCRE2_SIZE *length);\n\n       int pcre2_substring_copy_byname(pcre2_match_data *match_data,\n         PCRE2_SPTR name, PCRE2_UCHAR *buffer, PCRE2_SIZE *bufflen);\n\n       int pcre2_substring_get_byname(pcre2_match_data *match_data,\n         PCRE2_SPTR name, PCRE2_UCHAR **bufferptr, PCRE2_SIZE *bufflen);\n\n       void pcre2_substring_free(PCRE2_UCHAR *buffer);\n\n       To  extract a substring by name, you first have to find associated num-\n       ber.  For example, for this pattern:\n\n         (a+)b(?<xxx>\\d+)...\n\n       the number of the capture group called \"xxx\" is 2. If the name is known\n       to be unique (PCRE2_DUPNAMES was not set), you can find the number from\n       the name by calling pcre2_substring_number_from_name(). The first argu-\n       ment is the compiled pattern, and the second is the name. The yield  of\n       the  function  is the group number, PCRE2_ERROR_NOSUBSTRING if there is\n       no group with that name, or PCRE2_ERROR_NOUNIQUESUBSTRING if  there  is\n       more  than one group with that name.  Given the number, you can extract\n       the substring directly from the ovector, or use one of  the  \"bynumber\"\n       functions described above.\n\n       For  convenience,  there are also \"byname\" functions that correspond to\n       the \"bynumber\" functions, the only difference being that the second ar-\n       gument is a name instead of a number.  If  PCRE2_DUPNAMES  is  set  and\n       there are duplicate names, these functions scan all the groups with the\n       given  name,  and  return  the  captured substring from the first named\n       group that is set.\n\n       If there are no groups with the given name, PCRE2_ERROR_NOSUBSTRING  is\n       returned.  If  all  groups  with the name have numbers that are greater\n       than the number of slots in the ovector, PCRE2_ERROR_UNAVAILABLE is re-\n       turned. If there is at least one group with a slot in the ovector,  but\n       no group is found to be set, PCRE2_ERROR_UNSET is returned.\n\n       Warning: If the pattern uses the (?| feature to set up multiple capture\n       groups  with  the same number, as described in the section on duplicate\n       group numbers in the pcre2pattern page, you cannot use names to distin-\n       guish the different capture groups, because names are not  included  in\n       the  compiled  code.  The  matching process uses only numbers. For this\n       reason, the use of different names for  groups  with  the  same  number\n       causes an error at compile time.\n\n\nCREATING A NEW STRING WITH SUBSTITUTIONS\n\n       int pcre2_substitute(const pcre2_code *code, PCRE2_SPTR subject,\n         PCRE2_SIZE length, PCRE2_SIZE startoffset,\n         uint32_t options, pcre2_match_data *match_data,\n         pcre2_match_context *mcontext, PCRE2_SPTR replacement,\n         PCRE2_SIZE rlength, PCRE2_UCHAR *outputbuffer,\n         PCRE2_SIZE *outlengthptr);\n\n       This  function  optionally calls pcre2_match() and then makes a copy of\n       the subject string in outputbuffer, replacing parts that  were  matched\n       with the replacement string, whose length is supplied in rlength, which\n       can  be given as PCRE2_ZERO_TERMINATED for a zero-terminated string. As\n       a special case, if replacement is NULL and rlength  is  zero,  the  re-\n       placement  is assumed to be an empty string. If rlength is non-zero, an\n       error occurs if replacement is NULL.\n\n       There is an option (see PCRE2_SUBSTITUTE_REPLACEMENT_ONLY below) to re-\n       turn just the replacement string(s). The default action is  to  perform\n       just  one  replacement  if  the pattern matches, but there is an option\n       that requests multiple replacements  (see  PCRE2_SUBSTITUTE_GLOBAL  be-\n       low).\n\n       If  successful,  pcre2_substitute() returns the number of substitutions\n       that were carried out. This may be zero if no match was found,  and  is\n       never  greater  than one unless PCRE2_SUBSTITUTE_GLOBAL is set. A nega-\n       tive value is returned if an error is detected.\n\n       Matches in which a \\K item in a lookahead in  the  pattern  causes  the\n       match  to  end  before it starts are not supported, and give rise to an\n       error return. For global replacements, matches in which \\K in a lookbe-\n       hind causes the match to start earlier than the point that was  reached\n       in the previous iteration are also not supported. (These cases are only\n       possible  if  the pattern was compiled with the backwards-compatibility\n       option PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK.)\n\n       The first seven arguments of pcre2_substitute() are  the  same  as  for\n       pcre2_match(), except that the partial matching options are not permit-\n       ted,  and  match_data may be passed as NULL, in which case a match data\n       block is obtained and freed within this function, using memory  manage-\n       ment  functions from the match context, if provided, or else those that\n       were used to allocate memory for the compiled code.\n\n       If match_data is not NULL and PCRE2_SUBSTITUTE_MATCHED is not set,  the\n       provided block is used for all calls to pcre2_match(), and its contents\n       afterwards  are  the  result  of  the  final  call  made  internally by\n       pcre2_substitute() to the matching function. For global  changes,  this\n       will always be a no-match error. The contents of the ovector within the\n       match data block may or may not have been changed.\n\n       As  well as the usual options for pcre2_match(), a number of additional\n       options can be set in the options argument of pcre2_substitute().   One\n       such  option is PCRE2_SUBSTITUTE_MATCHED. When this is set, an external\n       match_data block must be provided, and it must have already  been  used\n       for  an  external call to pcre2_match() (or pcre2_jit_match()) with the\n       same pattern, subject pointer, effective subject length, start  offset,\n       and match option arguments (substitute-specific options can be added to\n       the   options  argument).  If  any  of  these  parameters  is  changed,\n       pcre2_substitute() returns an error. The data in the  match_data  block\n       (return code, offset vector) is used for the first substitution instead\n       of calling pcre2_match() from within pcre2_substitute(). This allows an\n       application to check for a match before choosing to substitute, without\n       having to repeat the match.\n\n       If   the  contents  of  the  subject  buffer  are  mutated  in  between\n       pcre2_match() and  a  call  to  pcre2_substitute()  with  PCRE2_SUBSTI-\n       TUTE_MATCHED,  the  behaviour  is  unsafe; in particular, in this case,\n       PCRE2 is unable to ensure that the offsets in the ovector point to  the\n       start of characters (with UTF-encoded input).\n\n       The  contents  of  the  externally  supplied  match  data block are not\n       changed when PCRE2_SUBSTITUTE_MATCHED is set, and so the match block is\n       permitted for use in another call  using  PCRE2_SUBSTITUTE_MATCHED.  If\n       PCRE2_SUBSTITUTE_GLOBAL  is also set, pcre2_match() is called after the\n       first substitution to check for furthe matches, but this is done  using\n       an internally obtained match data block, thus always leaving the exter-\n       nal block unchanged.\n\n       The  code  argument is not used for matching before the first substitu-\n       tion when PCRE2_SUBSTITUTE_MATCHED is set, but  it  must  be  provided,\n       even  when  PCRE2_SUBSTITUTE_GLOBAL is not set, because it contains in-\n       formation such as the UTF setting and the number of capturing parenthe-\n       ses in the pattern.\n\n       When using PCRE2_SUBSTITUTE_MATCHED, you should not modify the  subject\n       string  in  between  the  prior call to pcre2_match() and pcre2_substi-\n       tute(), as the substitution assumes that the passed-in ovector is  com-\n       patible  with  the  subject string. Although PCRE2 does verify that the\n       subject is a pointer to the same buffer, it cannot  in  general  verify\n       whether  the  contents  of the buffer have changed. For example, if the\n       subject buffer is mutated from one valid UTF-8 string to another  valid\n       string,  of  the  same length in code units, the ovector offsets are no\n       longer guaranteed to point to the start of  a  character.  Beware  that\n       with  PCRE2_SUBSTITUTE_MATCHED  in  UTF mode, the subject string is not\n       re-scanned for UTF validity when pcre2_substitute() first uses it.\n\n       The default action of pcre2_substitute() is to return  a  copy  of  the\n       subject string with matched substrings replaced. However, if PCRE2_SUB-\n       STITUTE_REPLACEMENT_ONLY  is  set,  only the replacement substrings are\n       returned. In the global case, multiple replacements are concatenated in\n       the output buffer. Substitution callouts (see below)  can  be  used  to\n       separate them if necessary.\n\n       Partial  matching  is supported, with limitations: if matching succeeds\n       but with a  partial  match,  then  pcre2_substitute  returns  PCRE2_ER-\n       ROR_PARTIAL.  When  partial-matching  (either  of PCRE2_PARTIAL_HARD or\n       PCRE2_PARTIAL_SOFT is passed),  then  PCRE2_SUBSTITUTE_REPLACEMENT_ONLY\n       must also be set, or else PCRE2_ERROR_BADOPTION is returned. Similarly,\n       certain  replacement items ($' and $_) cause PCRE2_ERROR_PARTIALSUBS to\n       be returned when partial-matching, even if a complete match is found.\n\n       The outlengthptr argument of pcre2_substitute() must point to  a  vari-\n       able  that contains the length, in code units, of the output buffer. If\n       the function is successful, the value is updated to contain the  length\n       in  code  units  of the new string, excluding the trailing zero that is\n       automatically added.\n\n       If the function is not successful, the value set via  outlengthptr  de-\n       pends  on  the  type  of  error.  For  syntax errors in the replacement\n       string, the value is the offset in the replacement string where the er-\n       ror was detected. For other errors, the value  is  PCRE2_UNSET  by  de-\n       fault. This includes the case of the output buffer being too small, un-\n       less PCRE2_SUBSTITUTE_OVERFLOW_LENGTH is set.\n\n       PCRE2_SUBSTITUTE_OVERFLOW_LENGTH  changes  what happens when the output\n       buffer is too small. The default action is to return PCRE2_ERROR_NOMEM-\n       ORY immediately. If this option  is  set,  however,  pcre2_substitute()\n       continues to go through the motions of matching and substituting (with-\n       out,  of  course,  writing  anything)  in  order to compute the size of\n       buffer that is needed, which will include the extra space for the  ter-\n       minating  NUL. This value is passed back via the outlengthptr variable,\n       with the result of the function still being PCRE2_ERROR_NOMEMORY.\n\n       Passing a buffer size of zero is a permitted way  of  finding  out  how\n       much  memory  is needed for given substitution. However, this does mean\n       that the entire operation is carried out twice. Depending on the appli-\n       cation, it may be more efficient to allocate a large  buffer  and  free\n       the   excess   afterwards,   instead  of  using  PCRE2_SUBSTITUTE_OVER-\n       FLOW_LENGTH.\n\n       The replacement string, which is interpreted as a  UTF  string  in  UTF\n       mode,  is checked for UTF validity unless PCRE2_NO_UTF_CHECK is set. An\n       invalid UTF replacement string causes an immediate return with the rel-\n       evant UTF error code.\n\n       If PCRE2_SUBSTITUTE_LITERAL is set, the replacement string is  not  in-\n       terpreted in any way. By default, however, a dollar character is an es-\n       cape  character  that can specify the insertion of characters from cap-\n       ture groups and names from (*MARK) or other control verbs in  the  pat-\n       tern. Dollar is the only escape character (backslash is treated as lit-\n       eral). The following forms are recognized:\n\n         $$                  insert a dollar character\n         $n or ${n}          insert the contents of group n\n         $0 or $&            insert the entire matched substring\n         $`                  insert the substring that precedes the match\n         $'                  insert the substring that follows the match\n         $_                  insert the entire input string\n         $+                   insert  the highest-numbered capture group which\n       matched\n         $*MARK or ${*MARK}  insert a control verb name\n\n       Either a group number or a group name can be given for n,  for  example\n       $2  or $NAME. Curly brackets are required only if the following charac-\n       ter would be interpreted as part of the number or name. The number  may\n       be  zero to include the entire matched string. For example, if the pat-\n       tern  a(b)c  is  matched  with  \"=abc=\"  and  the  replacement   string\n       \"+$1$0$1+\", the result is \"=+babcb+=\".\n\n       The  JavaScript  form $<name>, where the angle brackets are part of the\n       syntax, is also recognized for group names, but not for  group  numbers\n       or *MARK.\n\n       $*MARK  inserts the name from the last encountered backtracking control\n       verb on the matching path that has a name. (*MARK) must always  include\n       a  name,  but  the  other  verbs  need not. For example, in the case of\n       (*MARK:A)(*PRUNE) the name inserted is \"A\", but for (*MARK:A)(*PRUNE:B)\n       the relevant name is \"B\". This facility can be used to  perform  simple\n       simultaneous substitutions, as this pcre2test example shows:\n\n         /(*MARK:pear)apple|(*MARK:orange)lemon/g,replace=${*MARK}\n             apple lemon\n          2: pear orange\n\n       PCRE2_SUBSTITUTE_GLOBAL causes the function to iterate over the subject\n       string,  replacing every matching substring. If this option is not set,\n       only the first matching substring is replaced. The search  for  matches\n       takes  place in the original subject string (that is, previous replace-\n       ments do not affect it).  Iteration is  implemented  by  advancing  the\n       startoffset  value  for  each search, which is always passed the entire\n       subject string. If an offset limit is set in the match context, search-\n       ing stops when that limit is reached.\n\n       Because global substitutions apply the pattern repeatedly to  the  sub-\n       ject  string, and always iterate over non-overlapping matches, the sub-\n       stitutions done by pcre2_substitute() do not match and substitute  text\n       inside  the replacement strings themselves (no recursive/iterative sub-\n       stitution). However, applications can easily implement  other  alterna-\n       tive replacement strategies, such as iteratively replacing, then match-\n       ing and replacing on the result. The replacement loop inside pcre2_sub-\n       stitute()  is simple and can be emulated in client code by allocating a\n       buffer, searching for matches in a loop, and calling pcre2_substitute()\n       with PCRE2_SUBSTITUTE_REPLACEMENT_ONLY an PCRE2_SUBSTITUTE_MATCHED, and\n       without PCRE2_SUBSTITUTE_GLOBAL.\n\n       You can restrict the effect of a global substitution to  a  portion  of\n       the subject string by setting either or both of startoffset and an off-\n       set limit. Here is a pcre2test example:\n\n         /B/g,replace=!,use_offset_limit\n         ABC ABC ABC ABC\\=offset=3,offset_limit=12\n          2: ABC A!C A!C ABC\n\n       When  continuing  with  global substitutions after matching a substring\n       with zero length, an attempt to find a non-empty match at the same off-\n       set is performed.  If this is not successful, the offset is advanced by\n       one character except when CRLF is a valid newline sequence and the next\n       two characters are CR, LF. In this case, the offset is advanced by  two\n       characters.\n\n       PCRE2_SUBSTITUTE_UNKNOWN_UNSET causes references to capture groups that\n       do not appear in the pattern to be treated as unset groups. This option\n       should  be used with care, because it means that a typo in a group name\n       or number no longer causes the PCRE2_ERROR_NOSUBSTRING error.\n\n       PCRE2_SUBSTITUTE_UNSET_EMPTY causes unset capture groups (including un-\n       known groups when PCRE2_SUBSTITUTE_UNKNOWN_UNSET is set) to be  treated\n       as  empty  strings  when inserted as described above. If this option is\n       not set, an attempt to insert an unset group causes the PCRE2_ERROR_UN-\n       SET error. This option does not  influence  the  extended  substitution\n       syntax described below.\n\n       PCRE2_SUBSTITUTE_EXTENDED  causes extra processing to be applied to the\n       replacement string. Without this option, only the dollar  character  is\n       special,  and  only  the  group insertion forms listed above are valid.\n       When PCRE2_SUBSTITUTE_EXTENDED is set, several things change:\n\n       Firstly, backslash in a replacement string is interpreted as an  escape\n       character.  The usual forms such as \\x{ddd} can be used to specify par-\n       ticular character codes, and backslash followed by any non-alphanumeric\n       character quotes that character. Extended quoting can  be  coded  using\n       \\Q...\\E,  exactly  as in pattern strings. The escapes \\b and \\v are in-\n       terpreted as the characters backspace and vertical tab, respectively.\n\n       The interpretation of backslash followed by one or more digits  is  the\n       same  as  in a pattern, which in Perl has some ambiguities. Details are\n       given in the pcre2pattern page.\n\n       The Python form \\g<n>, where the angle brackets are part of the  syntax\n       and n is either a group name or number, is recognized as an alternative\n       way of inserting the contents of a group, for example \\g<3>.\n\n       There  are  also four escape sequences for forcing the case of inserted\n       letters.  Case forcing applies to all  inserted  characters,  including\n       those  from capture groups and letters within \\Q...\\E quoted sequences.\n       The insertion mechanism has three states: no case forcing, force  upper\n       case,  and  force  lower  case. The escape sequences change the current\n       state: \\U and \\L change to upper or lower case  forcing,  respectively,\n       and  \\E  (when not terminating a \\Q quoted sequence) reverts to no case\n       forcing. The sequences \\u and \\l force the next character (if it  is  a\n       letter)  to upper or lower case, respectively, and then the state auto-\n       matically reverts to no case forcing.\n\n       However, if \\u is immediately followed by \\L or \\l is immediately  fol-\n       lowed  by  \\U,  the next character's case is forced by the first escape\n       sequence, and subsequent characters by the second. This provides a \"ti-\n       tle casing\" facility that can be applied to group captures.  For  exam-\n       ple,  if  group 1 has captured \"heLLo\", the replacement string \"\\u\\L$1\"\n       becomes \"Hello\".\n\n       If either PCRE2_UTF or PCRE2_UCP was set when the pattern was compiled,\n       Unicode properties are used for  case  forcing  characters  whose  code\n       points  are greater than 127. However, only simple case folding, as de-\n       termined by the Unicode file CaseFolding.txt is supported.  PCRE2  does\n       not  support  language-specific special casing rules such as using dif-\n       ferent lower case Greek sigmas in the middle and ends of words (as  de-\n       fined in the Unicode file SpecialCasing.txt).\n\n       Note that case forcing sequences such as \\U...\\E do not nest. For exam-\n       ple,  the  result of processing \"\\Uaa\\LBB\\Ecc\\E\" is \"AAbbcc\"; the final\n       \\E has no effect. Note  also  that  the  PCRE2_ALT_BSUX  and  PCRE2_EX-\n       TRA_ALT_BSUX options do not apply to replacement strings.\n\n       The  final  effect  of setting PCRE2_SUBSTITUTE_EXTENDED is to add more\n       flexibility to capture group substitution. The  syntax  is  similar  to\n       that used by Bash:\n\n         ${n:-string}\n         ${n:+string1:string2}\n\n       As  in  the  simple  case, n may be a group number or a name. The first\n       form specifies a default value. If group n is set,  its  value  is  in-\n       serted;  if  not,  the  string is expanded and the result inserted. The\n       second form specifies strings that are expanded and inserted when group\n       n is set or unset, respectively. The first form is  just  a  convenient\n       shorthand for\n\n         ${n:+${n}:string}\n\n       Backslash  can  be  used to escape colons and closing curly brackets in\n       the replacement strings. A change of the case forcing  state  within  a\n       replacement  string  remains  in  force  afterwards,  as  shown in this\n       pcre2test example:\n\n         /(some)?(body)/substitute_extended,replace=${1:+\\U:\\L}HeLLo\n             body\n          1: hello\n             somebody\n          1: HELLO\n\n       The PCRE2_SUBSTITUTE_UNSET_EMPTY option does not affect these  extended\n       substitutions.  However,  PCRE2_SUBSTITUTE_UNKNOWN_UNSET does cause un-\n       known groups in the extended syntax forms to be treated as unset.\n\n       If  PCRE2_SUBSTITUTE_LITERAL  is  set,  PCRE2_SUBSTITUTE_UNKNOWN_UNSET,\n       PCRE2_SUBSTITUTE_UNSET_EMPTY, and PCRE2_SUBSTITUTE_EXTENDED are irrele-\n       vant and are ignored.\n\n   Substitution errors\n\n       In  the  event of an error, pcre2_substitute() returns a negative error\n       code. Except for PCRE2_ERROR_NOMATCH (which is never returned),  errors\n       from pcre2_match() are passed straight back.\n\n       PCRE2_ERROR_NOSUBSTRING is returned for a non-existent substring inser-\n       tion, unless PCRE2_SUBSTITUTE_UNKNOWN_UNSET is set.\n\n       PCRE2_ERROR_UNSET is returned for an unset substring insertion (includ-\n       ing  an  unknown  substring when PCRE2_SUBSTITUTE_UNKNOWN_UNSET is set)\n       when the simple (non-extended) syntax is used and  PCRE2_SUBSTITUTE_UN-\n       SET_EMPTY is not set.\n\n       PCRE2_ERROR_NOMEMORY  is  returned  if  the  output  buffer  is not big\n       enough. If the PCRE2_SUBSTITUTE_OVERFLOW_LENGTH option is set, the size\n       of buffer that is needed is returned via outlengthptr. Note  that  this\n       does not happen by default.\n\n       PCRE2_ERROR_NULL is returned if PCRE2_SUBSTITUTE_MATCHED is set but the\n       match_data  argument is NULL or if the subject or replacement arguments\n       are NULL. For backward compatibility reasons an exception is  made  for\n       the replacement argument if the rlength argument is also 0.\n\n       PCRE2_ERROR_BADREPLACEMENT  is  used for miscellaneous syntax errors in\n       the replacement string, with more  particular  errors  being  PCRE2_ER-\n       ROR_BADREPESCAPE (invalid escape sequence), PCRE2_ERROR_REPMISSINGBRACE\n       (closing  curly bracket not found), PCRE2_ERROR_BADSUBSTITUTION (syntax\n       error in extended group substitution),  and  PCRE2_ERROR_BADSUBSPATTERN\n       (the pattern match ended before it started or the match started earlier\n       than  the  current  position  in the subject, which can happen if \\K is\n       used in a lookaround assertion).\n\n       As for all PCRE2 errors, a text message that describes the error can be\n       obtained by calling the pcre2_get_error_message()  function  (see  \"Ob-\n       taining a textual error message\" above).\n\n   Substitution callouts\n\n       int pcre2_set_substitute_callout(pcre2_match_context *mcontext,\n         int (*callout_function)(pcre2_substitute_callout_block *, void *),\n         void *callout_data);\n\n       The  pcre2_set_substitute_callout()  function  can be used to specify a\n       callout function for pcre2_substitute(). This information is passed  in\n       a match context. The callout function is called after each substitution\n       has been processed, but it can cause the replacement not to happen.\n\n       The  callout  function  is  not called for simulated substitutions that\n       happen as a result of the PCRE2_SUBSTITUTE_OVERFLOW_LENGTH  option.  In\n       this  mode,  when substitution processing exceeds the buffer space pro-\n       vided by the caller, processing continues by counting code  units.  The\n       simulation  is unable to populate the callout block, and so the simula-\n       tion is pessimistic about the required buffer size. Whichever is larger\n       of accepted or rejected substitution is reported as the required  size.\n       Therefore, the returned buffer length may be an overestimate (without a\n       substitution callout, it is normally an exact measurement).\n\n       The first argument of the callout function is a pointer to a substitute\n       callout  block structure, which contains the following fields, not nec-\n       essarily in this order:\n\n         uint32_t    version;\n         uint32_t    subscount;\n         PCRE2_SPTR  input;\n         PCRE2_SPTR  output;\n         PCRE2_SIZE *ovector;\n         uint32_t    oveccount;\n         PCRE2_SIZE  output_offsets[2];\n\n       The version field contains the version number of the block format.  The\n       current  version  is  0.  The version number will increase in future if\n       more fields are added, but the intention is never to remove any of  the\n       existing fields.\n\n       The subscount field is the number of the current match. It is 1 for the\n       first callout, 2 for the second, and so on. The input and output point-\n       ers are copies of the values passed to pcre2_substitute().\n\n       The  ovector  field points to the ovector, which contains the result of\n       the most recent match. The oveccount field contains the number of pairs\n       that are set in the ovector, and is always greater than zero.\n\n       The output_offsets vector contains the offsets of  the  replacement  in\n       the  output  string. This has already been processed for dollar and (if\n       requested) backslash substitutions as described above.\n\n       The second argument of the callout function  is  the  value  passed  as\n       callout_data  when  the  function was registered. The value returned by\n       the callout function is interpreted as follows:\n\n       If the value is zero, the replacement is accepted, and,  if  PCRE2_SUB-\n       STITUTE_GLOBAL  is set, processing continues with a search for the next\n       match. If the value is not zero, the current  replacement  is  not  ac-\n       cepted.  If  the  value is greater than zero, processing continues when\n       PCRE2_SUBSTITUTE_GLOBAL is set. Otherwise (the value is less than  zero\n       or PCRE2_SUBSTITUTE_GLOBAL is not set), the rest of the input is copied\n       to  the  output and the call to pcre2_substitute() exits, returning the\n       number of matches so far.\n\n   Substitution case callouts\n\n       int pcre2_set_substitute_case_callout(pcre2_match_context *mcontext,\n         PCRE2_SIZE (*callout_function)(PCRE2_SPTR, PCRE2_SIZE,\n                                        PCRE2_UCHAR *, PCRE2_SIZE,\n                                        int, void *),\n         void *callout_data);\n\n       The pcre2_set_substitute_case_callout() function can be used to specify\n       a callout function for pcre2_substitute() to use when  performing  case\n       transformations.  This does not affect any case insensitivity behaviour\n       when performing a match, but only the user-visible transformations per-\n       formed when processing a substitution such as:\n\n           pcre2_substitute(..., \"\\\\U$1\", ...)\n\n       The default case transformations applied by PCRE2 are  reasonably  com-\n       plete,  and,  in  UTF  or UCP mode, perform the simple locale-invariant\n       case transformations as specified by Unicode. This is suitable for  the\n       internal  (invisible)  case-equivalence  procedures used during pattern\n       matching, but an application may wish to use more sophisticated locale-\n       aware processing for the user-visible substitution transformations.\n\n       One example implementation of the callout_function using  the  ICU  li-\n       brary would be:\n\n           PCRE2_SIZE\n           icu_case_callout(\n             PCRE2_SPTR input, PCRE2_SIZE input_len,\n             PCRE2_UCHAR *output, PCRE2_SIZE output_cap,\n             int to_case, void *data_ptr)\n           {\n             UErrorCode err = U_ZERO_ERROR;\n             int32_t r = to_case == PCRE2_SUBSTITUTE_CASE_LOWER\n               ? u_strToLower(output, output_cap, input, input_len, NULL, &err)\n               : to_case == PCRE2_SUBSTITUTE_CASE_UPPER\n               ? u_strToUpper(output, output_cap, input, input_len, NULL, &err)\n               : u_strToTitle(output, output_cap, input, input_len, &first_char_only,\n                              NULL, &err);\n             if (U_FAILURE(err)) return (~(PCRE2_SIZE)0);\n             return r;\n           }\n\n       The  first  and  second  arguments of the case callout function are the\n       Unicode string to transform.\n\n       The third and fourth arguments are the output buffer and its capacity.\n\n       The  fifth  is  one  of  the   constants   PCRE2_SUBSTITUTE_CASE_LOWER,\n       PCRE2_SUBSTITUTE_CASE_UPPER,    or   PCRE2_SUBSTITUTE_CASE_TITLE_FIRST.\n       PCRE2_SUBSTITUTE_CASE_LOWER and PCRE2_SUBSTITUTE_CASE_UPPER are  passed\n       to  the  callout  to indicate that the case of the entire callout input\n       should be case-transformed. PCRE2_SUBSTITUTE_CASE_TITLE_FIRST is passed\n       to indicate that only the first character or  glyph  should  be  trans-\n       formed  to  Unicode  titlecase  and the rest to Unicode lowercase (note\n       that titlecasing sometimes uses Unicode properties  to  titlecase  each\n       word  in a string; but PCRE2 is requesting that only the single leading\n       character is to be titlecased).\n\n       The sixth argument is the callout_data  supplied  to  pcre2_set_substi-\n       tute_case_callout().\n\n       The resulting string in the destination buffer may be larger or smaller\n       than  the input, if the casing rules merge or split characters. The re-\n       turn value is the length required for the output string. If a buffer of\n       sufficient size was provided to the callout, then the  result  must  be\n       written to the buffer and the number of code units returned. If the re-\n       sult  does  not  fit in the provided buffer, then the required capacity\n       must be returned and PCRE2 will not make  use  of  the  output  buffer.\n       PCRE2  provides  input and output buffers which overlap, so the callout\n       must support this by suitable internal buffering.\n\n       Alternatively, if the callout wishes to indicate an error, then it  may\n       return  (~(PCRE2_SIZE)0).  In this case pcre2_substitute() will immedi-\n       ately fail with error PCRE2_ERROR_REPLACECASE.\n\n       When  a  case  callout  is  combined  with  the  PCRE2_SUBSTITUTE_OVER-\n       FLOW_LENGTH  option,  there are situations when pcre2_substitute() will\n       return an underestimate of  the  required  buffer  size.  If  you  call\n       pcre2_substitute()  once with PCRE2_SUBSTITUTE_OVERFLOW_LENGTH, and the\n       input buffer is too small for the replacement string to be constructed,\n       then instead of calling the case callout, pcre2_substitute() will  make\n       an  estimate  of the required buffer size.  The second call should also\n       pass PCRE2_SUBSTITUTE_OVERFLOW_LENGTH, because that second call is  not\n       guaranteed  to succeed either, if the case callout requires more buffer\n       space than expected. The caller must make repeated attempts in a loop.\n\n\nDUPLICATE CAPTURE GROUP NAMES\n\n       int pcre2_substring_nametable_scan(const pcre2_code *code,\n         PCRE2_SPTR name, PCRE2_SPTR *first, PCRE2_SPTR *last);\n\n       When a pattern is compiled with the PCRE2_DUPNAMES  option,  names  for\n       capture  groups  are not required to be unique. Duplicate names are al-\n       ways allowed for groups with the same number, created by using the  (?|\n       feature. Indeed, if such groups are named, they are required to use the\n       same names.\n\n       Normally,  patterns  that  use duplicate names are such that in any one\n       match, only one of each set of identically-named  groups  participates.\n       An example is shown in the pcre2pattern documentation.\n\n       When   duplicates   are   present,   pcre2_substring_copy_byname()  and\n       pcre2_substring_get_byname() return the first  substring  corresponding\n       to  the given name that is set. Only if none are set is PCRE2_ERROR_UN-\n       SET is returned. The  pcre2_substring_number_from_name()  function  re-\n       turns  the error PCRE2_ERROR_NOUNIQUESUBSTRING when there are duplicate\n       names.\n\n       If you want to get full details of all captured substrings for a  given\n       name,  you  must use the pcre2_substring_nametable_scan() function. The\n       first argument is the compiled pattern, and the second is the name.  If\n       the  third  and fourth arguments are NULL, the function returns a group\n       number for a unique name, or PCRE2_ERROR_NOUNIQUESUBSTRING otherwise.\n\n       When the third and fourth arguments are not NULL, they must be pointers\n       to variables that are updated by the function. After it has  run,  they\n       point to the first and last entries in the name-to-number table for the\n       given  name,  and the function returns the length of each entry in code\n       units. In both cases, PCRE2_ERROR_NOSUBSTRING is returned if there  are\n       no entries for the given name.\n\n       The format of the name table is described above in the section entitled\n       Information  about  a  pattern.  Given all the relevant entries for the\n       name, you can extract each of their numbers,  and  hence  the  captured\n       data.\n\n\nFINDING ALL POSSIBLE MATCHES AT ONE POSITION\n\n       The  traditional  matching  function  uses a similar algorithm to Perl,\n       which stops when it finds the first match at a given point in the  sub-\n       ject. If you want to find all possible matches, or the longest possible\n       match  at  a  given  position,  consider using the alternative matching\n       function (see below) instead. If you cannot use the  alternative  func-\n       tion, you can kludge it up by making use of the callout facility, which\n       is described in the pcre2callout documentation.\n\n       What you have to do is to insert a callout right at the end of the pat-\n       tern.   When your callout function is called, extract and save the cur-\n       rent matched substring. Then return 1, which  forces  pcre2_match()  to\n       backtrack  and  try other alternatives. Ultimately, when it runs out of\n       matches, pcre2_match() will yield PCRE2_ERROR_NOMATCH.\n\n\nMATCHING A PATTERN: THE ALTERNATIVE FUNCTION\n\n       int pcre2_dfa_match(const pcre2_code *code, PCRE2_SPTR subject,\n         PCRE2_SIZE length, PCRE2_SIZE startoffset,\n         uint32_t options, pcre2_match_data *match_data,\n         pcre2_match_context *mcontext,\n         int *workspace, PCRE2_SIZE wscount);\n\n       The function pcre2_dfa_match() is called  to  match  a  subject  string\n       against  a  compiled pattern, using a matching algorithm that scans the\n       subject string just once (not counting lookaround assertions), and does\n       not backtrack (except when processing lookaround assertions). This  has\n       different  characteristics to the normal algorithm, and is not compati-\n       ble with Perl. Some of the features of  PCRE2  patterns  are  not  sup-\n       ported. Nevertheless, there are times when this kind of matching can be\n       useful.  For a discussion of the two matching algorithms, and a list of\n       features that pcre2_dfa_match() does not support, see the pcre2matching\n       documentation.\n\n       The arguments for the pcre2_dfa_match() function are the  same  as  for\n       pcre2_match(), plus two extras. The ovector within the match data block\n       is used in a different way, and this is described below. The other com-\n       mon  arguments  are used in the same way as for pcre2_match(), so their\n       description is not repeated here.\n\n       The two additional arguments provide workspace for  the  function.  The\n       workspace  vector  should  contain at least 20 elements. It is used for\n       keeping track of multiple paths through the pattern  tree.  More  work-\n       space  is needed for patterns and subjects where there are a lot of po-\n       tential matches.\n\n       Here is an example of a simple call to pcre2_dfa_match():\n\n         int wspace[20];\n         pcre2_match_data *md = pcre2_match_data_create(4, NULL);\n         int rc = pcre2_dfa_match(\n           re,             /* result of pcre2_compile() */\n           \"some string\",  /* the subject string */\n           11,             /* the length of the subject string */\n           0,              /* start at offset 0 in the subject */\n           0,              /* default options */\n           md,             /* the match data block */\n           NULL,           /* a match context; NULL means use defaults */\n           wspace,         /* working space vector */\n           20);            /* number of elements (NOT size in bytes) */\n\n   Option bits for pcre2_dfa_match()\n\n       The unused bits of the options argument for pcre2_dfa_match()  must  be\n       zero.   The   only   bits   that   may   be   set  are  PCRE2_ANCHORED,\n       PCRE2_COPY_MATCHED_SUBJECT, PCRE2_ENDANCHORED, PCRE2_NOTBOL,  PCRE2_NO-\n       TEOL,   PCRE2_NOTEMPTY,   PCRE2_NOTEMPTY_ATSTART,   PCRE2_NO_UTF_CHECK,\n       PCRE2_PARTIAL_HARD,   PCRE2_PARTIAL_SOFT,    PCRE2_DFA_SHORTEST,    and\n       PCRE2_DFA_RESTART.  All but the last four of these are exactly the same\n       as for pcre2_match(), so their description is not repeated here.\n\n         PCRE2_PARTIAL_HARD\n         PCRE2_PARTIAL_SOFT\n\n       These have the same general effect as they do  for  pcre2_match(),  but\n       the  details are slightly different. When PCRE2_PARTIAL_HARD is set for\n       pcre2_dfa_match(), it returns PCRE2_ERROR_PARTIAL if  the  end  of  the\n       subject is reached and there is still at least one matching possibility\n       that requires additional characters. This happens even if some complete\n       matches  have  already  been found. When PCRE2_PARTIAL_SOFT is set, the\n       return code PCRE2_ERROR_NOMATCH is converted  into  PCRE2_ERROR_PARTIAL\n       if  the  end  of  the  subject  is reached, there have been no complete\n       matches, but there is still at least one matching possibility. The por-\n       tion of the string that was inspected when the  longest  partial  match\n       was found is set as the first matching string in both cases. There is a\n       more  detailed  discussion  of partial and multi-segment matching, with\n       examples, in the pcre2partial documentation.\n\n         PCRE2_DFA_SHORTEST\n\n       Setting the PCRE2_DFA_SHORTEST option causes the matching algorithm  to\n       stop as soon as it has found one match. Because of the way the alterna-\n       tive  algorithm  works, this is necessarily the shortest possible match\n       at the first possible matching point in the subject string.\n\n         PCRE2_DFA_RESTART\n\n       When pcre2_dfa_match() returns a partial match, it is possible to  call\n       it again, with additional subject characters, and have it continue with\n       the same match. The PCRE2_DFA_RESTART option requests this action; when\n       it  is  set,  the workspace and wscount options must reference the same\n       vector as before because data about the match so far is  left  in  them\n       after a partial match. There is more discussion of this facility in the\n       pcre2partial documentation.\n\n   Successful returns from pcre2_dfa_match()\n\n       When pcre2_dfa_match() succeeds, it may have matched more than one sub-\n       string in the subject. Note, however, that all the matches from one run\n       of  the  function  start  at the same point in the subject. The shorter\n       matches are all initial substrings of the longer matches. For  example,\n       if the pattern\n\n         <.*>\n\n       is matched against the string\n\n         This is <something> <something else> <something further> no more\n\n       the three matched strings are\n\n         <something> <something else> <something further>\n         <something> <something else>\n         <something>\n\n       On  success,  the  yield of the function is a number greater than zero,\n       which is the number of matched substrings.  The  offsets  of  the  sub-\n       strings  are returned in the ovector, and can be extracted by number in\n       the same way as for pcre2_match(), but the numbers bear no relation  to\n       any  capture groups that may exist in the pattern, because DFA matching\n       does not support capturing.\n\n       Calls to the convenience functions that extract substrings by name  re-\n       turn the error PCRE2_ERROR_DFA_UFUNC (unsupported function) if used af-\n       ter  a  DFA match. The convenience functions that extract substrings by\n       number never return PCRE2_ERROR_NOSUBSTRING.\n\n       The matched strings are stored in  the  ovector  in  reverse  order  of\n       length;  that  is,  the longest matching string is first. If there were\n       too many matches to fit into the ovector, the yield of the function  is\n       zero, and the vector is filled with the longest matches.\n\n       NOTE:  PCRE2's  \"auto-possessification\" optimization usually applies to\n       character repeats at the end of a pattern (as well as internally).  For\n       example,  the pattern \"a\\d+\" is compiled as if it were \"a\\d++\". For DFA\n       matching, this means that only one possible match is found. If you  re-\n       ally do want multiple matches in such cases, either use an ungreedy re-\n       peat  such as \"a\\d+?\" or set the PCRE2_NO_AUTO_POSSESS option when com-\n       piling.\n\n   Error returns from pcre2_dfa_match()\n\n       The pcre2_dfa_match() function returns a negative number when it fails.\n       Many of the errors are the same  as  for  pcre2_match(),  as  described\n       above.  There are in addition the following errors that are specific to\n       pcre2_dfa_match():\n\n         PCRE2_ERROR_DFA_UITEM\n\n       This  return  is  given  if pcre2_dfa_match() encounters an item in the\n       pattern that it does not support, for instance, the use of \\C in a  UTF\n       mode or a backreference.\n\n         PCRE2_ERROR_DFA_UCOND\n\n       This  return  is given if pcre2_dfa_match() encounters a condition item\n       that uses a backreference for the condition, or a test for recursion in\n       a specific capture group. These are not supported.\n\n         PCRE2_ERROR_DFA_UINVALID_UTF\n\n       This return is given if pcre2_dfa_match() is called for a pattern  that\n       was  compiled  with  PCRE2_MATCH_INVALID_UTF. This is not supported for\n       DFA matching.\n\n         PCRE2_ERROR_DFA_WSSIZE\n\n       This return is given if pcre2_dfa_match() runs  out  of  space  in  the\n       workspace vector.\n\n         PCRE2_ERROR_DFA_RECURSE\n\n       When a recursion or subroutine call is processed, the matching function\n       calls  itself  recursively,  using  private  memory for the ovector and\n       workspace.  This error is given if the internal ovector  is  not  large\n       enough.  This  should  be  extremely  rare, as a vector of size 1000 is\n       used.\n\n         PCRE2_ERROR_DFA_BADRESTART\n\n       When pcre2_dfa_match() is called  with  the  PCRE2_DFA_RESTART  option,\n       some  plausibility  checks  are  made on the contents of the workspace,\n       which should contain data about the previous partial match. If  any  of\n       these checks fail, this error is given.\n\n\nSEE ALSO\n\n       pcre2build(3),    pcre2callout(3),    pcre2demo(3),   pcre2matching(3),\n       pcre2partial(3), pcre2posix(3), pcre2sample(3), pcre2unicode(3).\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 29 October 2025\n       Copyright (c) 1997-2024 University of Cambridge.\n\n\nPCRE2 10.48-DEV                 29 October 2025                    PCRE2API(3)\n------------------------------------------------------------------------------\n\n\nPCRE2BUILD(3)              Library Functions Manual              PCRE2BUILD(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nBUILDING PCRE2\n\n       PCRE2  is distributed with a configure script that can be used to build\n       the library in Unix-like environments using the Autotools applications.\n       Also in the distribution are files to support building using CMake  in-\n       stead  of  configure. The text file README contains general information\n       about building with Autotools (some of which is  repeated  below),  and\n       also has some comments about building on various operating systems. The\n       files  in the vms directory support building under OpenVMS.  There is a\n       lot more information about building PCRE2 without using Autotools  (in-\n       cluding  information  about  using CMake and building \"by hand\") in the\n       text file called NON-AUTOTOOLS-BUILD.  You should consult this file  as\n       well as the README file if you are building in a non-Unix-like environ-\n       ment.\n\n\nPCRE2 BUILD-TIME OPTIONS\n\n       The rest of this document describes the optional features of PCRE2 that\n       can  be  selected  when  the library is compiled. It assumes use of the\n       configure script, where the optional features  are  selected  or  dese-\n       lected  by  providing options to configure before running the make com-\n       mand. However, the same options can be selected in both  Unix-like  and\n       non-Unix-like  environments if you are using CMake instead of configure\n       to build PCRE2.\n\n       If you are not using Autotools or CMake, option selection can  be  done\n       by  editing  the config.h file, or by passing parameter settings to the\n       compiler, as described in NON-AUTOTOOLS-BUILD.\n\n       The complete list of options for configure (which includes the standard\n       ones such as the selection of the installation directory)  can  be  ob-\n       tained by running\n\n         ./configure --help\n\n       The  following  sections include descriptions of \"on/off\" options whose\n       names begin with --enable or --disable. Because of the way that config-\n       ure works, --enable and --disable always come in pairs, so the  comple-\n       mentary  option always exists as well, but as it specifies the default,\n       it is not described.  Options that specify values have names that start\n       with --with. At the end of a configure run, a summary of the configura-\n       tion is output.\n\n\nBUILDING 8-BIT, 16-BIT AND 32-BIT LIBRARIES\n\n       By default, a library called libpcre2-8 is built, containing  functions\n       that  take  string  arguments contained in arrays of bytes, interpreted\n       either as single-byte characters, or UTF-8 strings. You can also  build\n       two  other libraries, called libpcre2-16 and libpcre2-32, which process\n       strings that are contained in arrays of 16-bit and 32-bit  code  units,\n       respectively. These can be interpreted either as single-unit characters\n       or  UTF-16/UTF-32 strings. To build these additional libraries, add one\n       or both of the following to the configure command:\n\n         --enable-pcre2-16\n         --enable-pcre2-32\n\n       If you do not want the 8-bit library, add\n\n         --disable-pcre2-8\n\n       as well. At least one of the three libraries must be built.  Note  that\n       the  POSIX wrapper is for the 8-bit library only, and that pcre2grep is\n       an 8-bit program. Neither of these are built if  you  select  only  the\n       16-bit or 32-bit libraries.\n\n\nBUILDING SHARED AND STATIC LIBRARIES\n\n       The  Autotools PCRE2 building process uses libtool to build both shared\n       and static libraries by default. You can suppress an  unwanted  library\n       by adding one of\n\n         --disable-shared\n         --disable-static\n\n       to  the  configure command. Setting --disable-shared ensures that PCRE2\n       libraries are built as static libraries. The  binaries  that  are  then\n       created  as  part  of  the  build  process  (for example, pcre2test and\n       pcre2grep) are linked statically with one or more PCRE2 libraries,  but\n       may  also  be  dynamically linked with other libraries such as libc. If\n       you want these binaries to be fully statically linked, you can set  LD-\n       FLAGS like this:\n\n       LDFLAGS=--static ./configure --disable-shared\n\n       Note  the two hyphens in --static. Of course, this works only if static\n       versions of all the relevant libraries are available for linking.\n\n\nUNICODE AND UTF SUPPORT\n\n       By default, PCRE2 is built with support for Unicode and  UTF  character\n       strings.  To build it without Unicode support, add\n\n         --disable-unicode\n\n       to  the configure command. This setting applies to all three libraries.\n       It is not possible to build one library with Unicode  support  and  an-\n       other without in the same configuration.\n\n       Of  itself, Unicode support does not make PCRE2 treat strings as UTF-8,\n       UTF-16 or UTF-32. To do that, applications that use the library can set\n       the PCRE2_UTF option when they call pcre2_compile() to compile  a  pat-\n       tern.   Alternatively,  patterns  may be started with (*UTF) unless the\n       application has locked this out by setting PCRE2_NEVER_UTF.\n\n       UTF support allows the libraries to process character code points up to\n       0x10ffff in the strings that they handle. Unicode  support  also  gives\n       access  to  the Unicode properties of characters, using pattern escapes\n       such as \\P, \\p, and \\X. Only the general category properties such as Lu\n       and Nd, script names, and some bi-directional and binary properties are\n       supported.  Details are given in the pcre2pattern documentation.\n\n       Pattern escapes such as \\d and \\w do not by default make use of Unicode\n       properties. The application can request that they  do  by  setting  the\n       PCRE2_UCP  option.  Unless  the  application has set PCRE2_NEVER_UCP, a\n       pattern may also request this by starting with (*UCP).\n\n\nDISABLING THE USE OF \\C\n\n       The \\C escape sequence, which matches a single code unit, even in a UTF\n       mode, can cause unpredictable behaviour because it may leave  the  cur-\n       rent  matching  point in the middle of a multi-code-unit character. The\n       application can lock it out by setting the PCRE2_NEVER_BACKSLASH_C  op-\n       tion when calling pcre2_compile(). There is also a build-time option\n\n         --enable-never-backslash-C\n\n       (note the upper case C) which locks out the use of \\C entirely.\n\n\nJUST-IN-TIME COMPILER SUPPORT\n\n       Just-in-time  (JIT) compiler support is included in the build by speci-\n       fying\n\n         --enable-jit\n\n       This support is available only for certain hardware  architectures.  If\n       this  option  is  set for an unsupported architecture, a building error\n       occurs.  If in doubt, use\n\n         --enable-jit=auto\n\n       which enables JIT only if the current hardware is  supported.  You  can\n       check  if JIT is enabled in the configuration summary that is output at\n       the end of a configure run. If you are enabling JIT under  SELinux  you\n       may also want to add\n\n         --enable-jit-sealloc\n\n       which enables the use of an execmem allocator in JIT that is compatible\n       with  SELinux.  This  has  no  effect  if  JIT  is not enabled. See the\n       pcre2jit documentation for a discussion of JIT usage. When JIT  support\n       is enabled, pcre2grep automatically makes use of it, unless you add\n\n         --disable-pcre2grep-jit\n\n       to the configure command.\n\n\nNEWLINE RECOGNITION\n\n       By  default, PCRE2 interprets the linefeed (LF) character as indicating\n       the end of a line. This is the normal newline  character  on  Unix-like\n       systems.  You can compile PCRE2 to use carriage return (CR) instead, by\n       adding\n\n         --enable-newline-is-cr\n\n       to the configure command. There is also an  --enable-newline-is-lf  op-\n       tion, which explicitly specifies linefeed as the newline character.\n\n       Alternatively, you can specify that line endings are to be indicated by\n       the two-character sequence CRLF (CR immediately followed by LF). If you\n       want this, add\n\n         --enable-newline-is-crlf\n\n       to the configure command. There is a fourth option, specified by\n\n         --enable-newline-is-anycrlf\n\n       which  causes  PCRE2 to recognize any of the three sequences CR, LF, or\n       CRLF as indicating a line ending. A fifth option, specified by\n\n         --enable-newline-is-any\n\n       causes PCRE2 to recognize any Unicode  newline  sequence.  The  Unicode\n       newline sequences are the three just mentioned, plus the single charac-\n       ters VT (vertical tab, U+000B), FF (form feed, U+000C), NEL (next line,\n       U+0085),  LS  (line  separator,  U+2028),  and PS (paragraph separator,\n       U+2029). The final option is\n\n         --enable-newline-is-nul\n\n       which causes NUL (binary zero) to be set  as  the  default  line-ending\n       character.\n\n       Whatever default line ending convention is selected when PCRE2 is built\n       can  be  overridden by applications that use the library. At build time\n       it is recommended to use the standard for your operating system.\n\n\nWHAT \\R MATCHES\n\n       By default, the sequence \\R in a pattern matches  any  Unicode  newline\n       sequence,  independently  of  what has been selected as the line ending\n       sequence. If you specify\n\n         --enable-bsr-anycrlf\n\n       the default is changed so that \\R matches only CR, LF, or  CRLF.  What-\n       ever  is selected when PCRE2 is built can be overridden by applications\n       that use the library.\n\n\nHANDLING VERY LARGE PATTERNS\n\n       Within a compiled pattern, offset values are used  to  point  from  one\n       part  to another (for example, from an opening parenthesis to an alter-\n       nation metacharacter). By default, in the 8-bit and  16-bit  libraries,\n       two-byte  values  are used for these offsets, leading to a maximum size\n       for a compiled pattern of around 64 thousand code units. This is suffi-\n       cient to handle all but the most gigantic patterns. Nevertheless,  some\n       people do want to process truly enormous patterns, so it is possible to\n       compile  PCRE2  to use three-byte or four-byte offsets by adding a set-\n       ting such as\n\n         --with-link-size=3\n\n       to the configure command. The value given must be 2, 3, or 4.  For  the\n       16-bit  library,  a  value of 3 is rounded up to 4. In these libraries,\n       using longer offsets slows down the operation of PCRE2 because  it  has\n       to  load additional data when handling them. For the 32-bit library the\n       value is always 4 and cannot be overridden; the value  of  --with-link-\n       size is ignored.\n\n\nLIMITING PCRE2 RESOURCE USAGE\n\n       The pcre2_match() function increments a counter each time it goes round\n       its  main  loop. Putting a limit on this counter controls the amount of\n       computing resource used by a single call to  pcre2_match().  The  limit\n       can be changed at run time, as described in the pcre2api documentation.\n       The  default is 10 million, but this can be changed by adding a setting\n       such as\n\n         --with-match-limit=500000\n\n       to  the  configure  command.  This  setting   also   applies   to   the\n       pcre2_dfa_match()  matching  function,  and to JIT matching (though the\n       counting is done differently).\n\n       The pcre2_match() function uses  heap  memory  to  record  backtracking\n       points.  The  more  nested  backtracking points there are (that is, the\n       deeper the search tree), the more memory is needed. There is  an  upper\n       limit,  specified in kibibytes (units of 1024 bytes). This limit can be\n       changed at run time, as described in the  pcre2api  documentation.  The\n       default  limit (in effect unlimited) is 20 million. You can change this\n       by a setting such as\n\n         --with-heap-limit=500\n\n       which limits the amount of heap to 500 KiB. This limit applies only  to\n       interpretive matching in pcre2_match() and pcre2_dfa_match(), which may\n       also  use  the  heap for internal workspace when processing complicated\n       patterns. This limit does not apply when JIT (which has its own  memory\n       arrangements) is used.\n\n       You  can  also explicitly limit the depth of nested backtracking in the\n       pcre2_match() interpreter. This limit defaults to the value that is set\n       for --with-match-limit. You can set a lower default  limit  by  adding,\n       for example,\n\n         --with-match-limit-depth=10000\n\n       to  the  configure  command.  This value can be overridden at run time.\n       This depth limit indirectly limits the amount of heap  memory  that  is\n       used,  but because the size of each backtracking \"frame\" depends on the\n       number of capturing parentheses in a pattern, the amount of  heap  that\n       is  used  before  the  limit is reached varies from pattern to pattern.\n       This limit was more useful in versions before 10.30, where function re-\n       cursion was used for backtracking.\n\n       As well as applying to pcre2_match(), the depth limit also controls the\n       depth of recursive function calls in pcre2_dfa_match(). These are  used\n       for  lookaround  assertions,  atomic  groups, and recursion within pat-\n       terns.  The limit does not apply to JIT matching.\n\n\nLIMITING VARIABLE-LENGTH LOOKBEHIND ASSERTIONS\n\n       Lookbehind assertions in which one or more branches can match  a  vari-\n       able  number  of  characters  are  supported only if there is a maximum\n       matching length for each top-level branch. There is  a  limit  to  this\n       maximum  that defaults to 255 characters. You can alter this default by\n       a setting such as\n\n         --with-max-varlookbehind=100\n\n       The limit can be changed at runtime by calling pcre2_set_max_varlookbe-\n       hind(). Lookbehind assertions in which every  branch  matches  a  fixed\n       number of characters (not necessarily all the same) are not constrained\n       by this limit.\n\n\nCREATING CHARACTER TABLES AT BUILD TIME\n\n       PCRE2 uses fixed tables for processing characters whose code points are\n       less than 256. By default, PCRE2 is built with a set of tables that are\n       distributed  in  the file src/pcre2_chartables.c.dist. These tables are\n       for ASCII codes only. If you add\n\n         --enable-rebuild-chartables\n\n       to the configure command, the distributed tables are  no  longer  used.\n       Instead, a program called pcre2_dftables is compiled and run. This out-\n       puts the source for new set of tables, created in the default locale of\n       your  C  run-time  system. This method of replacing the tables does not\n       work if you are cross compiling, because pcre2_dftables needs to be run\n       on the local host and therefore not compiled with the cross compiler.\n\n       If you need to create alternative tables when cross compiling, you will\n       have to do so \"by hand\". There may also be other reasons  for  creating\n       tables  manually.   To  cause  pcre2_dftables  to be built on the local\n       host, run a normal compiling command, and then run the program with the\n       output file as its argument, for example:\n\n         cc src/pcre2_dftables.c -o pcre2_dftables\n         ./pcre2_dftables src/pcre2_chartables.c\n\n       This builds the tables in the default locale of the local host. If  you\n       want to specify a locale, you must use the -L option:\n\n         LC_ALL=fr_FR ./pcre2_dftables -L src/pcre2_chartables.c\n\n       You can also specify -b (with or without -L). This causes the tables to\n       be  written in binary instead of as source code. A set of binary tables\n       can be loaded into memory by an application and  passed  to  pcre2_com-\n       pile() in the same way as tables created by calling pcre2_maketables().\n       The  tables are just a string of bytes, independent of hardware charac-\n       teristics such as endianness. This means they can be  bundled  with  an\n       application  that  runs in different environments, to ensure consistent\n       behaviour.\n\n\nUSING EBCDIC CODE\n\n       PCRE2 assumes by default that it will run in an environment  where  the\n       character  code is ASCII or Unicode, which is a superset of ASCII. This\n       is the case for most computer operating systems. PCRE2 can, however, be\n       compiled to run in an 8-bit EBCDIC environment by adding\n\n         --enable-ebcdic --disable-unicode\n\n       to the configure command. You should only use it if you know  that  you\n       are  in  an EBCDIC environment (for example, an IBM mainframe operating\n       system).\n\n       This setting implies --enable-rebuild-chartables, in  order  to  ensure\n       that  you  have  the correct default character tables for your system's\n       codepage. There is an exception when you set  --enable-ebcdic-ignoring-\n       compiler  (see  below), which allows using a default set of EBCDIC 1047\n       character tables rather than forcing  use  of  --enable-rebuild-charta-\n       bles.\n\n       It  is  not  supported  to enable both EBCDIC input and either ASCII or\n       UTF-8/16/32 in the same build of the library. When PCRE2 is built  with\n       EBCDIC  support,  it  always operates in EBCDIC, and consequently --en-\n       able-unicode and --enable-ebcdic are mutually exclusive.\n\n       The EBCDIC character that corresponds to an ASCII LF is assumed to have\n       the value 0x15 by default. However, in some EBCDIC  environments,  0x25\n       is used. In such an environment you should use\n\n         --enable-ebcdic-nl25\n\n       (which  implies  --enable-ebcdic).  The EBCDIC character for CR has the\n       same value as in ASCII, namely, 0x0d. Whichever of 0x15 and 0x25 is not\n       chosen as LF is made to correspond to the Unicode NEL character (which,\n       in Unicode, is 0x85).\n\n       The options that select newline behaviour, such as --enable-newline-is-\n       cr, and equivalent run-time options, refer to these character values in\n       an EBCDIC environment.\n\n       On systems requiring an EBCDIC build of PCRE2, the compiler  should  be\n       set  to  use the correct codepage, so that C character literals such as\n       'z' use the correct numeric value for whichever EBCDIC  codpage  is  in\n       use. (PCRE2 cannot support multiple EBCDIC codepages dynamically.) How-\n       ever, if this not possible, then you can use\n\n         --enable-ebcdic-ignoring-compiler\n\n       in  order to disregard the compiler's codepage, and instead force PCRE2\n       to use numeric constants corresponding to the EBCDIC 1047 codepage  in-\n       stead.  This  can  be  used  to  build  (or  test) EBCDIC support on an\n       ASCII/UTF-8 system such as Linux.\n\n\nPCRE2GREP SUPPORT FOR EXTERNAL SCRIPTS\n\n       By default pcre2grep supports the use of callouts with string arguments\n       within the patterns it is matching. There are two kinds: one that  gen-\n       erates output using local code, and another that calls an external pro-\n       gram  or  script.   If --disable-pcre2grep-callout-fork is added to the\n       configure command, only the first kind  of  callout  is  supported;  if\n       --disable-pcre2grep-callout  is  used,  all callouts are completely ig-\n       nored. For more details of pcre2grep callouts, see the pcre2grep  docu-\n       mentation.\n\n\nPCRE2GREP OPTIONS FOR COMPRESSED FILE SUPPORT\n\n       By  default,  pcre2grep reads all files as plain text. You can build it\n       so that it recognizes files whose names end in .gz or .bz2,  and  reads\n       them with libz or libbz2, respectively, by adding one or both of\n\n         --enable-pcre2grep-libz\n         --enable-pcre2grep-libbz2\n\n       to the configure command. These options naturally require that the rel-\n       evant  libraries  are installed on your system. Configuration will fail\n       if they are not.\n\n\nPCRE2GREP BUFFER SIZE\n\n       pcre2grep uses an internal buffer to hold a \"window\" on the file it  is\n       scanning, in order to be able to output \"before\" and \"after\" lines when\n       it finds a match. The default starting size of the buffer is 20KiB. The\n       buffer  itself  is  three times this size, but because of the way it is\n       used for holding \"before\" lines, the longest line that is guaranteed to\n       be processable is the notional buffer size. If a longer line is encoun-\n       tered, pcre2grep automatically expands the buffer, up  to  a  specified\n       maximum  size, whose default is 1MiB or the starting size, whichever is\n       the larger. You can change the default parameter values by adding,  for\n       example,\n\n         --with-pcre2grep-bufsize=51200\n         --with-pcre2grep-max-bufsize=2097152\n\n       to  the  configure  command. The caller of pcre2grep can override these\n       values by using --buffer-size  and  --max-buffer-size  on  the  command\n       line.\n\n\nPCRE2TEST OPTION FOR LIBREADLINE SUPPORT\n\n       If you add one of\n\n         --enable-pcre2test-libreadline\n         --enable-pcre2test-libedit\n\n       to  the configure command, pcre2test is linked with the libreadline or-\n       libedit library, respectively, and when its input is from  a  terminal,\n       it  reads  it using the readline() function. This provides line-editing\n       and history facilities. Note that libreadline is  GPL-licensed,  so  if\n       you  distribute  a binary of pcre2test linked in this way, there may be\n       licensing issues. These can be avoided by linking instead with libedit,\n       which has a BSD licence.\n\n       Setting --enable-pcre2test-libreadline causes the -lreadline option  to\n       be  added to the pcre2test build. In many operating environments with a\n       system-installed readline library this is sufficient. However, in  some\n       environments (e.g. if an unmodified distribution version of readline is\n       in  use),  some  extra configuration may be necessary. The INSTALL file\n       for libreadline says this:\n\n         \"Readline uses the termcap functions, but does not link with\n         the termcap or curses library itself, allowing applications\n         which link with readline the to choose an appropriate library.\"\n\n       If your environment has not been set up so that an appropriate  library\n       is automatically included, you may need to add something like\n\n         LIBS=\"-lncurses\"\n\n       immediately before the configure command.\n\n\nINCLUDING DEBUGGING CODE\n\n       If you add\n\n         --enable-debug\n\n       to  the configure command, additional debugging code is included in the\n       build. This feature is intended for use by the PCRE2 maintainers.\n\n\nDEBUGGING WITH VALGRIND SUPPORT\n\n       If you add\n\n         --enable-valgrind\n\n       to the configure command, PCRE2 will use valgrind annotations  to  mark\n       certain  memory  regions as unaddressable. This allows it to detect in-\n       valid memory accesses, and is mostly useful for debugging PCRE2 itself.\n\n\nCODE COVERAGE REPORTING\n\n       If your C compiler is gcc, you can build a version of  PCRE2  that  can\n       generate a code coverage report for its test suite. To enable this, you\n       must install lcov version 1.6 or above. Then specify\n\n         --enable-coverage\n\n       to the configure command and build PCRE2 in the usual way.\n\n       Note that using ccache (a caching C compiler) is incompatible with code\n       coverage  reporting. If you have configured ccache to run automatically\n       on your system, you must set the environment variable\n\n         CCACHE_DISABLE=1\n\n       before running make to build PCRE2, so that ccache is not used.\n\n       When --enable-coverage is used,  the  following  addition  targets  are\n       added to the Makefile:\n\n         make coverage\n\n       This  creates  a  fresh coverage report for the PCRE2 test suite. It is\n       equivalent to running \"make coverage-reset\", \"make  coverage-baseline\",\n       \"make check\", and then \"make coverage-report\".\n\n         make coverage-reset\n\n       This zeroes the coverage counters, but does nothing else.\n\n         make coverage-baseline\n\n       This captures baseline coverage information.\n\n         make coverage-report\n\n       This creates the coverage report.\n\n         make coverage-clean-report\n\n       This  removes the generated coverage report without cleaning the cover-\n       age data itself.\n\n         make coverage-clean-data\n\n       This removes the captured coverage data without removing  the  coverage\n       files created at compile time (*.gcno).\n\n         make coverage-clean\n\n       This  cleans all coverage data including the generated coverage report.\n       For more information about code coverage, see the gcov and  lcov  docu-\n       mentation.\n\n\nDISABLING THE Z AND T FORMATTING MODIFIERS\n\n       The  C99  standard  defines formatting modifiers z and t for size_t and\n       ptrdiff_t values, respectively. By default, PCRE2 uses these  modifiers\n       in environments other than old versions of Microsoft Visual Studio when\n       __STDC_VERSION__  is  defined  and has a value greater than or equal to\n       199901L (indicating support for C99).  However, there is at  least  one\n       environment that claims to be C99 but does not support these modifiers.\n       If\n\n         --disable-percent-zt\n\n       is specified, no use is made of the z or t modifiers. Instead of %td or\n       %zu,  a  suitable  format is used depending in the size of long for the\n       platform.\n\n\nSUPPORT FOR FUZZERS\n\n       There is a special option for use by people who  want  to  run  fuzzing\n       tests on PCRE2:\n\n         --enable-fuzz-support\n\n       At present this applies only to the 8-bit library. If set, it causes an\n       extra  library  called  libpcre2-fuzzsupport.a to be built, but not in-\n       stalled. This contains a single  function  called  LLVMFuzzerTestOneIn-\n       put()  whose  arguments are a pointer to a string and the length of the\n       string. When called, this function tries to compile  the  string  as  a\n       pattern,  and if that succeeds, to match it.  This is done both with no\n       options and with some random options bits that are generated  from  the\n       string.\n\n       Setting  --enable-fuzz-support  also  causes  a binary called pcre2fuz-\n       zcheck to be created. This is normally run under valgrind or used  when\n       PCRE2 is compiled with address sanitizing enabled. It calls the fuzzing\n       function  and  outputs  information  about  what it is doing. The input\n       strings are specified by arguments: if an argument starts with \"=\"  the\n       rest  of it is a literal input string. Otherwise, it is assumed to be a\n       file name, and the contents of the file are the test string.\n\n\nOBSOLETE OPTION\n\n       In versions of PCRE2 prior to 10.30, there were two  ways  of  handling\n       backtracking  in the pcre2_match() function. The default was to use the\n       system stack, but if\n\n         --disable-stack-for-recursion\n\n       was set, memory on the heap was used. From release 10.30  onwards  this\n       has  changed  (the  stack  is  no longer used) and this option now does\n       nothing except give a warning.\n\n\nSEE ALSO\n\n       pcre2api(3), pcre2-config(3).\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 17 October 2025\n       Copyright (c) 1997-2024 University of Cambridge.\n\n\nPCRE2 10.48-DEV                 17 October 2025                  PCRE2BUILD(3)\n------------------------------------------------------------------------------\n\n\nPCRE2CALLOUT(3)            Library Functions Manual            PCRE2CALLOUT(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nSYNOPSIS\n\n       #include <pcre2.h>\n\n       int (*pcre2_callout)(pcre2_callout_block *, void *);\n\n       int pcre2_callout_enumerate(const pcre2_code *code,\n         int (*callback)(pcre2_callout_enumerate_block *, void *),\n         void *user_data);\n\n\nDESCRIPTION\n\n       PCRE2  provides  a  feature  called \"callout\", which is a means of tem-\n       porarily passing control to the caller of PCRE2 in the middle  of  pat-\n       tern  matching.  The  caller  of PCRE2 provides an external function by\n       putting its entry point in a match context (see pcre2_set_callout()  in\n       the pcre2api documentation).\n\n       When  using the pcre2_substitute() function, an additional callout fea-\n       ture is available. This does a callout after each change to the subject\n       string and is described in the pcre2api documentation; the rest of this\n       document is concerned with callouts during pattern matching.\n\n       Within a regular expression, (?C<arg>) indicates a point at  which  the\n       external  function  is  to  be  called. Different callout points can be\n       identified by putting a number less than 256 after the  letter  C.  The\n       default  value is zero.  Alternatively, the argument may be a delimited\n       string. The starting delimiter must be one of ` ' \" ^ % # $ {  and  the\n       ending delimiter is the same as the start, except for {, where the end-\n       ing  delimiter  is  }.  If  the  ending  delimiter is needed within the\n       string, it must be doubled. For example, this pattern has  two  callout\n       points:\n\n         (?C1)abc(?C\"some \"\"arbitrary\"\" text\")def\n\n       If the PCRE2_AUTO_CALLOUT option bit is set when a pattern is compiled,\n       PCRE2  automatically inserts callouts, all with number 255, before each\n       item in the pattern except for immediately before or after an  explicit\n       callout. For example, if PCRE2_AUTO_CALLOUT is used with the pattern\n\n         A(?C3)B\n\n       it is processed as if it were\n\n         (?C255)A(?C3)B(?C255)\n\n       Here is a more complicated example:\n\n         A(\\d{2}|--)\n\n       With PCRE2_AUTO_CALLOUT, this pattern is processed as if it were\n\n         (?C255)A(?C255)((?C255)\\d{2}(?C255)|(?C255)-(?C255)-(?C255))(?C255)\n\n       Notice  that  there  is a callout before and after each parenthesis and\n       alternation bar. If the pattern contains a conditional group whose con-\n       dition is an assertion, an automatic callout  is  inserted  immediately\n       before  the  condition. Such a callout may also be inserted explicitly,\n       for example:\n\n         (?(?C9)(?=a)ab|de)  (?(?C%text%)(?!=d)ab|de)\n\n       This applies only to assertion conditions (because they are  themselves\n       independent groups).\n\n       Callouts  can  be useful for tracking the progress of pattern matching.\n       The pcre2test program has a pattern qualifier (/auto_callout) that sets\n       automatic callouts.  When any callouts are  present,  the  output  from\n       pcre2test  indicates  how  the pattern is being matched. This is useful\n       information when you are trying to optimize the performance of  a  par-\n       ticular pattern.\n\n\nMISSING CALLOUTS\n\n       You  should  be  aware  that, because of optimizations in the way PCRE2\n       compiles and matches patterns, callouts sometimes do not happen exactly\n       as you might expect.\n\n   Auto-possessification\n\n       At compile time, PCRE2 \"auto-possessifies\" repeated items when it knows\n       that what follows cannot be part of the repeat. For example, a+[bc]  is\n       compiled  as if it were a++[bc]. The pcre2test output when this pattern\n       is compiled with PCRE2_ANCHORED and PCRE2_AUTO_CALLOUT and then applied\n       to the string \"aaaa\" is:\n\n         --->aaaa\n          +0 ^        a+\n          +2 ^   ^    [bc]\n         No match\n\n       This indicates that when matching [bc] fails, there is no  backtracking\n       into a+ (because it is being treated as a++) and therefore the callouts\n       that  would  be  taken for the backtracks do not occur. You can disable\n       the  auto-possessify  feature  by  passing   PCRE2_NO_AUTO_POSSESS   to\n       pcre2_compile(),  or  starting  the pattern with (*NO_AUTO_POSSESS). In\n       this case, the output changes to this:\n\n         --->aaaa\n          +0 ^        a+\n          +2 ^   ^    [bc]\n          +2 ^  ^     [bc]\n          +2 ^ ^      [bc]\n          +2 ^^       [bc]\n         No match\n\n       This time, when matching [bc] fails, the matcher backtracks into a+ and\n       tries again, repeatedly, until a+ itself fails.\n\n   Automatic .* anchoring\n\n       By default, an optimization is applied when .* is the first significant\n       item in a pattern. If PCRE2_DOTALL is set, so that the  dot  can  match\n       any  character,  the pattern is automatically anchored. If PCRE2_DOTALL\n       is not set, a match can start only after an internal newline or at  the\n       beginning of the subject, and pcre2_compile() remembers this. If a pat-\n       tern  has more than one top-level branch, automatic anchoring occurs if\n       all branches are anchorable.\n\n       This optimization is disabled, however, if .* is in an atomic group  or\n       if  there  is a backreference to the capture group in which it appears.\n       It is also disabled if the pattern contains (*PRUNE) or  (*SKIP).  How-\n       ever, the presence of callouts does not affect it.\n\n       For  example,  if  the pattern .*\\d is compiled with PCRE2_AUTO_CALLOUT\n       and applied to the string \"aa\", the pcre2test output is:\n\n         --->aa\n          +0 ^      .*\n          +2 ^ ^    \\d\n          +2 ^^     \\d\n          +2 ^      \\d\n         No match\n\n       This shows that all match attempts start at the beginning of  the  sub-\n       ject. In other words, the pattern is anchored. You can disable this op-\n       timization  by  passing  PCRE2_NO_DOTSTAR_ANCHOR to pcre2_compile(), or\n       starting the pattern with (*NO_DOTSTAR_ANCHOR). In this case, the  out-\n       put changes to:\n\n         --->aa\n          +0 ^      .*\n          +2 ^ ^    \\d\n          +2 ^^     \\d\n          +2 ^      \\d\n          +0  ^     .*\n          +2  ^^    \\d\n          +2  ^     \\d\n         No match\n\n       This  shows more match attempts, starting at the second subject charac-\n       ter.  Another optimization, described in the next section,  means  that\n       there is no subsequent attempt to match with an empty subject.\n\n   Other optimizations\n\n       Other  optimizations  that  provide fast \"no match\" results also affect\n       callouts.  For example, if the pattern is\n\n         ab(?C4)cd\n\n       PCRE2 knows that any matching string must contain the  letter  \"d\".  If\n       the  subject  string  is  \"abyz\",  the  lack of \"d\" means that matching\n       doesn't ever start, and the callout is  never  reached.  However,  with\n       \"abyd\", though the result is still no match, the callout is obeyed.\n\n       For  most  patterns  PCRE2  also knows the minimum length of a matching\n       string, and will immediately give a \"no match\" return without  actually\n       running  a  match if the subject is not long enough, or, for unanchored\n       patterns, if it has been scanned far enough.\n\n       You can disable these optimizations by passing the PCRE2_NO_START_OPTI-\n       MIZE option  to  pcre2_compile(),  or  by  starting  the  pattern  with\n       (*NO_START_OPT).  This slows down the matching process, but does ensure\n       that callouts such as the example above are obeyed.\n\n\nTHE CALLOUT INTERFACE\n\n       During matching, when PCRE2 reaches a callout  point,  if  an  external\n       function  is  provided in the match context, it is called. This applies\n       to both normal, DFA, and JIT matching. The first argument to the  call-\n       out function is a pointer to a pcre2_callout block. The second argument\n       is  the  void * callout data that was supplied when the callout was set\n       up by calling pcre2_set_callout() (see the pcre2api documentation). The\n       callout block structure contains the following fields, not  necessarily\n       in this order:\n\n         uint32_t      version;\n         uint32_t      callout_number;\n         uint32_t      capture_top;\n         uint32_t      capture_last;\n         uint32_t      callout_flags;\n         PCRE2_SIZE   *offset_vector;\n         PCRE2_SPTR    mark;\n         PCRE2_SPTR    subject;\n         PCRE2_SIZE    subject_length;\n         PCRE2_SIZE    start_match;\n         PCRE2_SIZE    current_position;\n         PCRE2_SIZE    pattern_position;\n         PCRE2_SIZE    next_item_length;\n         PCRE2_SIZE    callout_string_offset;\n         PCRE2_SIZE    callout_string_length;\n         PCRE2_SPTR    callout_string;\n\n       The  version field contains the version number of the block format. The\n       current version is 2; the three callout string fields  were  added  for\n       version  1, and the callout_flags field for version 2. If you are writ-\n       ing an application that might use an  earlier  release  of  PCRE2,  you\n       should  check  the version number before accessing any of these fields.\n       The version number will increase in future if more  fields  are  added,\n       but the intention is never to remove any of the existing fields.\n\n   Fields for numerical callouts\n\n       For  a  numerical  callout,  callout_string is NULL, and callout_number\n       contains the number of the callout, in the range  0-255.  This  is  the\n       number  that  follows  (?C for callouts that part of the pattern; it is\n       255 for automatically generated callouts.\n\n   Fields for string callouts\n\n       For callouts with string arguments, callout_number is always zero,  and\n       callout_string  points  to the string that is contained within the com-\n       piled pattern. Its length is given by callout_string_length. Duplicated\n       ending delimiters that were present in the original pattern string have\n       been turned into single characters, but there is no other processing of\n       the callout string argument. An additional code unit containing  binary\n       zero  is  present  after the string, but is not included in the length.\n       The delimiter that was used to start the string is also  stored  within\n       the  pattern, immediately before the string itself. You can access this\n       delimiter as callout_string[-1] if you need it.\n\n       The callout_string_offset field is the code unit offset to the start of\n       the callout argument string within the original pattern string. This is\n       provided for the benefit of applications such as script languages  that\n       might need to report errors in the callout string within the pattern.\n\n   Fields for all callouts\n\n       The  remaining  fields in the callout block are the same for both kinds\n       of callout.\n\n       The offset_vector field is a pointer to a vector of  capturing  offsets\n       (the \"ovector\"). You may read the elements in this vector, but you must\n       not change any of them.\n\n       For  calls  to pcre2_match(), the offset_vector field is not (since re-\n       lease 10.30) a pointer to the actual ovector that  was  passed  to  the\n       matching  function in the match data block. Instead it points to an in-\n       ternal ovector of a size large enough to  hold  all  possible  captured\n       substrings in the pattern. Note that whenever a recursion or subroutine\n       call  within  a pattern completes, the capturing state is reset to what\n       it was before.\n\n       The capture_last field contains the number of the  most  recently  cap-\n       tured  substring,  and the capture_top field contains one more than the\n       number of the highest numbered captured substring so far.  If  no  sub-\n       strings  have yet been captured, the value of capture_last is 0 and the\n       value of capture_top is 1. The values of these  fields  do  not  always\n       differ   by   one;  for  example,  when  the  callout  in  the  pattern\n       ((a)(b))(?C2) is taken, capture_last is 1 but capture_top is 4.\n\n       The contents of ovector[2] to  ovector[<capture_top>*2-1]  can  be  in-\n       spected  in  order to extract substrings that have been matched so far,\n       in the same way as extracting substrings after a match  has  completed.\n       The  values in ovector[0] and ovector[1] are always PCRE2_UNSET because\n       the match is by definition not complete. Substrings that have not  been\n       captured  but whose numbers are less than capture_top also have both of\n       their ovector slots set to PCRE2_UNSET.\n\n       For DFA matching, the offset_vector field points to  the  ovector  that\n       was  passed  to the matching function in the match data block for call-\n       outs at the top level, but to an internal ovector during the processing\n       of pattern recursions, lookarounds, and atomic groups.  However,  these\n       ovectors  hold no useful information because pcre2_dfa_match() does not\n       support substring capturing. The value of capture_top is always  1  and\n       the value of capture_last is always 0 for DFA matching.\n\n       The subject and subject_length fields contain copies of the values that\n       were passed to the matching function.\n\n       The  start_match  field normally contains the offset within the subject\n       at which the current match attempt started. However, if the escape  se-\n       quence  \\K  has  been encountered, this value is changed to reflect the\n       modified starting point. If the pattern is not  anchored,  the  callout\n       function may be called several times from the same point in the pattern\n       for different starting points in the subject.\n\n       The  current_position  field  contains the offset within the subject of\n       the current match pointer.\n\n       The pattern_position field contains the offset in the pattern string to\n       the next item to be matched.\n\n       The next_item_length field contains the length of the next item  to  be\n       processed  in the pattern string. When the callout is at the end of the\n       pattern, the length is zero.  When  the  callout  precedes  an  opening\n       parenthesis, the length includes meta characters that follow the paren-\n       thesis.  For  example,  in a callout before an assertion such as (?=ab)\n       the length is 3. For an alternation bar or a closing  parenthesis,  the\n       length  is  one,  unless a closing parenthesis is followed by a quanti-\n       fier, in which case its length is included. (This  changed  in  release\n       10.23.  In  earlier  releases, before an opening parenthesis the length\n       was that of the entire group, and before an alternation bar or a  clos-\n       ing parenthesis the length was zero.)\n\n       The  pattern_position  and next_item_length fields are intended to help\n       in distinguishing between different automatic callouts, which all  have\n       the  same  callout  number. However, they are set for all callouts, and\n       are used by pcre2test to show the next item to be matched when display-\n       ing callout information.\n\n       In callouts from pcre2_match() the mark field contains a pointer to the\n       zero-terminated name of the most recently passed (*MARK), (*PRUNE),  or\n       (*THEN)  item  in the match, or NULL if no such items have been passed.\n       Instances of (*PRUNE) or (*THEN) without a name  do  not  obliterate  a\n       previous (*MARK). In callouts from the DFA matching function this field\n       always contains NULL.\n\n       The   callout_flags   field   is   always   zero   in   callouts   from\n       pcre2_dfa_match() or when JIT is being used. When pcre2_match() without\n       JIT is used, the following bits may be set:\n\n         PCRE2_CALLOUT_STARTMATCH\n\n       This is set for the first callout after the start of matching for  each\n       new starting position in the subject.\n\n         PCRE2_CALLOUT_BACKTRACK\n\n       This  is  set if there has been a matching backtrack since the previous\n       callout, or since the start of matching if this is  the  first  callout\n       from a pcre2_match() run.\n\n       Both  bits  are  set when a backtrack has caused a \"bumpalong\" to a new\n       starting position in the subject. Output from pcre2test does not  indi-\n       cate  the  presence  of these bits unless the callout_extra modifier is\n       set.\n\n       The information in the callout_flags field is provided so that applica-\n       tions can track and tell their users how matching with backtracking  is\n       done.  This  can be useful when trying to optimize patterns, or just to\n       understand how PCRE2 works. There is no  support  in  pcre2_dfa_match()\n       because  there is no backtracking in DFA matching, and there is no sup-\n       port in JIT because JIT is all about maximimizing matching performance.\n       In both these cases the callout_flags field is always zero.\n\n\nRETURN VALUES FROM CALLOUTS\n\n       The external callout function returns an integer to PCRE2. If the value\n       is zero, matching proceeds as normal. If  the  value  is  greater  than\n       zero,  matching  fails  at  the current point, but the testing of other\n       matching possibilities goes ahead, just as if a lookahead assertion had\n       failed. If the value is less than zero, the match is abandoned, and the\n       matching function returns the negative value.\n\n       Negative values should normally be chosen from  the  set  of  PCRE2_ER-\n       ROR_xxx  values.  In  particular, PCRE2_ERROR_NOMATCH forces a standard\n       \"no match\" failure. The error number  PCRE2_ERROR_CALLOUT  is  reserved\n       for use by callout functions; it will never be used by PCRE2 itself.\n\n\nCALLOUT ENUMERATION\n\n       int pcre2_callout_enumerate(const pcre2_code *code,\n         int (*callback)(pcre2_callout_enumerate_block *, void *),\n         void *user_data);\n\n       A script language that supports the use of string arguments in callouts\n       might  like  to  scan  all the callouts in a pattern before running the\n       match. This can be done by calling pcre2_callout_enumerate(). The first\n       argument is a pointer to a compiled pattern, the  second  points  to  a\n       callback  function,  and the third is arbitrary user data. The callback\n       function is called for every callout in the pattern  in  the  order  in\n       which they appear. Its first argument is a pointer to a callout enumer-\n       ation  block,  and  its second argument is the user_data value that was\n       passed to pcre2_callout_enumerate(). The data block contains  the  fol-\n       lowing fields:\n\n         version                Block version number\n         pattern_position       Offset to next item in pattern\n         next_item_length       Length of next item in pattern\n         callout_number         Number for numbered callouts\n         callout_string_offset  Offset to string within pattern\n         callout_string_length  Length of callout string\n         callout_string         Points to callout string or is NULL\n\n       The  version  number is currently 0. It will increase if new fields are\n       ever added to the block. The remaining fields are  the  same  as  their\n       namesakes  in  the pcre2_callout block that is used for callouts during\n       matching, as described above.\n\n       Note that the value of pattern_position is  unique  for  each  callout.\n       However,  if  a callout occurs inside a group that is quantified with a\n       non-zero minimum or a fixed maximum, the group is replicated inside the\n       compiled pattern. For example, a pattern such as /(a){2}/  is  compiled\n       as  if it were /(a)(a)/. This means that the callout will be enumerated\n       more than once, but with the same value for  pattern_position  in  each\n       case.\n\n       The callback function should normally return zero. If it returns a non-\n       zero value, scanning the pattern stops, and that value is returned from\n       pcre2_callout_enumerate().\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 26 February 2025\n       Copyright (c) 1997-2024 University of Cambridge.\n\n\nPCRE2 10.48-DEV                26 February 2025                PCRE2CALLOUT(3)\n------------------------------------------------------------------------------\n\n\nPCRE2COMPAT(3)             Library Functions Manual             PCRE2COMPAT(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nDIFFERENCES BETWEEN PCRE2 AND PERL\n\n       This  document describes some of the known differences in the ways that\n       PCRE2 and Perl handle regular expressions.  The  differences  described\n       here  are  with  respect  to  Perl version 5.38.0, but as both Perl and\n       PCRE2 are continually changing, the information may at times be out  of\n       date.\n\n       1.  When  PCRE2_DOTALL  (equivalent to Perl's /s qualifier) is not set,\n       the behaviour of the '.' metacharacter differs from Perl. In PCRE2, '.'\n       matches the next character unless it is the  start  of  a  newline  se-\n       quence.  This  means  that, if the newline setting is CR, CRLF, or NUL,\n       '.' will match the code point LF (0x0A) in ASCII/Unicode  environments,\n       and  NL  (either  0x15 or 0x25) when using EBCDIC. In Perl, '.' appears\n       never to match LF, even when 0x0A is not a newline indicator.\n\n       2. PCRE2 has only a subset of Perl's Unicode support. Details  of  what\n       it does have are given in the pcre2unicode page.\n\n       3.  Like  Perl, PCRE2 allows repeat quantifiers on parenthesized asser-\n       tions, but they do not mean what you might think. For example, (?!a){3}\n       does not assert that the next three characters are not \"a\". It just as-\n       serts that the next character is not \"a\"  three  times  (in  principle;\n       PCRE2  optimizes this to run the assertion just once). Perl allows some\n       repeat quantifiers on other assertions, for example, \\b* , but these do\n       not seem to have any use. PCRE2 does not allow any kind  of  quantifier\n       on non-lookaround assertions.\n\n       4.  If a braced quantifier such as {1,2} appears where there is nothing\n       to repeat (for example, at the start of a branch), PCRE2 raises an  er-\n       ror  whereas  Perl  treats the quantifier characters as literal. When a\n       braced quantifier (...){min,max} has min > max, Perl treats  it  as  an\n       item  which  fails to match any portion of the subject (as no number of\n       repetitions can meet the condition), and additionally issues a  warning\n       when in warning mode. PCRE2 has no warning features, so it gives an er-\n       ror in this case.\n\n       5.  Capture groups that occur inside negative lookaround assertions are\n       counted, but their entries in the offsets vector are set  only  when  a\n       negative  assertion is a condition that has a matching branch (that is,\n       the condition is false).  Perl may set such  capture  groups  in  other\n       circumstances.\n\n       6.  The  following Perl escape sequences are not supported: \\F, \\l, \\L,\n       \\u, \\U, and \\N when followed by a character name. \\N on its own, match-\n       ing a non-newline character, and \\N{U+dd..}, matching  a  Unicode  code\n       point,  are  supported.  The  escapes that modify the case of following\n       letters are implemented by Perl's general string-handling and  are  not\n       part of its pattern matching engine. If any of these are encountered by\n       PCRE2,  an  error  is  generated  by default. However, if either of the\n       PCRE2_ALT_BSUX or PCRE2_EXTRA_ALT_BSUX options is set, \\U  and  \\u  are\n       interpreted as ECMAScript interprets them.\n\n       7. The Perl escape sequences \\p, \\P, and \\X are supported only if PCRE2\n       is built with Unicode support (the default). The properties that can be\n       tested  with  \\p  and \\P are limited to the general category properties\n       such as Lu and Nd, the derived properties  Any  and  Lc  (synonym  L&),\n       script  names such as Greek or Han, Bidi_Class, Bidi_Control, and a few\n       binary properties. Both PCRE2 and Perl support the Cs (surrogate) prop-\n       erty, but in PCRE2 its use is limited. See the pcre2pattern  documenta-\n       tion  for  details. The long synonyms for property names that Perl sup-\n       ports (such as \\p{Letter}) are not supported by PCRE2, nor is  it  per-\n       mitted to prefix any of these properties with \"Is\".\n\n       8. PCRE2 supports the \\Q...\\E escape for quoting substrings. Characters\n       in between are treated as literals. However, this is slightly different\n       from  Perl  in  that  $  and  @ are also handled as literals inside the\n       quotes. In Perl, they cause variable interpolation (PCRE2 does not have\n       variables). Also, Perl does \"double-quotish backslash interpolation\" on\n       any backslashes between \\Q and \\E which, its documentation  says,  \"may\n       lead  to confusing results\". PCRE2 treats a backslash between \\Q and \\E\n       just like any other character. Note the following examples:\n\n           Pattern            PCRE2 matches     Perl matches\n\n           \\Qabc$xyz\\E        abc$xyz           abc followed by the\n                                                  contents of $xyz\n           \\Qabc\\$xyz\\E       abc\\$xyz          abc\\$xyz\n           \\Qabc\\E\\$\\Qxyz\\E   abc$xyz           abc$xyz\n           \\QA\\B\\E            A\\B               A\\B\n           \\Q\\\\E              \\                 \\\\E\n\n       The \\Q...\\E sequence is recognized both inside  and  outside  character\n       classes  by  both  PCRE2 and Perl. Another difference from Perl is that\n       any appearance of \\Q or \\E inside what might otherwise be a  quantifier\n       causes PCRE2 not to recognize the sequence as a quantifier. Perl recog-\n       nizes  a  quantifier  if  (redundantly) either of the numbers is inside\n       \\Q...\\E, but not if the separating comma is. When not recognized  as  a\n       quantifier  a  sequence  such  as  {\\Q1\\E,2}  is treated as the literal\n       string \"{1,2}\".\n\n       9.  Fairly  obviously,  PCRE2  does  not  support  the  (?{code})   and\n       (??{code}) constructions. However, PCRE2 does have a \"callout\" feature,\n       which allows an external function to be called during pattern matching.\n       See the pcre2callout documentation for details.\n\n       10.  Subroutine calls (whether recursive or not) were treated as atomic\n       groups up to PCRE2 release 10.23, but from release 10.30 this  changed,\n       and backtracking into subroutine calls is now supported, as in Perl.\n\n       11.  In  PCRE2,  if any of the backtracking control verbs are used in a\n       group that is called as a  subroutine  (whether  or  not  recursively),\n       their  effect is confined to that group; it does not extend to the sur-\n       rounding pattern. This is not always the case in Perl.  In  particular,\n       if  (*THEN)  is  present in a group that is called as a subroutine, its\n       action is limited to that group, even if the group does not contain any\n       | characters. Note that such groups are processed as  anchored  at  the\n       point  where  they  are  tested.  PCRE2 also confines all control verbs\n       within atomic assertions, again including (*THEN)  in  assertions  with\n       only one branch.\n\n       12.  If a pattern contains more than one backtracking control verb, the\n       first one that is backtracked onto acts. For example,  in  the  pattern\n       A(*COMMIT)B(*PRUNE)C  a  failure in B triggers (*COMMIT), but a failure\n       in C triggers (*PRUNE). Perl's behaviour is more complex; in many cases\n       it is the same as PCRE2, but there are cases where it differs.\n\n       13. There are some differences that are concerned with the settings  of\n       captured  strings  when  part  of  a  pattern is repeated. For example,\n       matching \"aba\" against the pattern /^(a(b)?)+$/ in Perl leaves  $2  un-\n       set, but in PCRE2 it is set to \"b\".\n\n       14.  PCRE2's  handling  of duplicate capture group numbers and names is\n       not as general as Perl's. This is a consequence of the fact  the  PCRE2\n       works  internally  just with numbers, using an external table to trans-\n       late between numbers and  names.  In  particular,  a  pattern  such  as\n       (?|(?<a>A)|(?<b>B)),  where the two capture groups have the same number\n       but different names, is not supported, and causes an error  at  compile\n       time. If it were allowed, it would not be possible to distinguish which\n       group  matched,  because  both  names map to capture group number 1. To\n       avoid this confusing situation, an error is given at compile time.\n\n       15. Perl used to recognize comments in some places that PCRE2 does not,\n       for example, between the ( and ? at the start of a  group.  If  the  /x\n       modifier  is  set,  Perl allowed white space between ( and ? though the\n       latest Perls give an error (for a while it was just deprecated).  There\n       may still be some cases where Perl behaves differently.\n\n       16.  Perl,  when  in warning mode, gives warnings for character classes\n       such as [A-\\d] or [a-[:digit:]]. It then treats the hyphens  as  liter-\n       als. PCRE2 has no warning features, so it gives an error in these cases\n       because they are almost certainly user mistakes.\n\n       17. In PCRE2, until release 10.45, the upper/lower case character prop-\n       erties  Lu  and Ll were not affected when case-independent matching was\n       specified. Perl has changed in this respect, and PCRE2 has now  changed\n       to  match.  When  caseless  matching is in force, Lu, Ll, and Lt (title\n       case) are all treated as Lc (cased letter).\n\n       18. From release 5.32.0, Perl locks out the use of \\K in lookaround as-\n       sertions. From release 10.38 PCRE2 does the same by  default.  However,\n       there  is  an  option for re-enabling the previous behaviour. When this\n       option is set, \\K is acted on when it occurs  in  positive  assertions,\n       but is ignored in negative assertions.\n\n       19.  PCRE2  provides some extensions to the Perl regular expression fa-\n       cilities.  Perl 5.10 included new features that  were  not  in  earlier\n       versions  of  Perl,  some  of which (such as named parentheses) were in\n       PCRE2 for some time before. This list is with respect to Perl 5.38:\n\n       (a) If PCRE2_DOLLAR_ENDONLY is set and PCRE2_MULTILINE is not set,  the\n       $ meta-character matches only at the very end of the string.\n\n       (b)  A  backslash  followed  by  a  letter  with  no special meaning is\n       faulted. (Perl can be made to issue a warning.)\n\n       (c) If PCRE2_UNGREEDY is set, the greediness of the repetition  quanti-\n       fiers is inverted, that is, by default they are not greedy, but if fol-\n       lowed by a question mark they are.\n\n       (d)  PCRE2_ANCHORED  can be used at matching time to force a pattern to\n       be tried only at the first matching position in the subject string.\n\n       (e)    The    PCRE2_NOTBOL,    PCRE2_NOTEOL,     PCRE2_NOTEMPTY     and\n       PCRE2_NOTEMPTY_ATSTART options have no Perl equivalents.\n\n       (f)  The  \\R escape sequence can be restricted to match only CR, LF, or\n       CRLF by the PCRE2_BSR_ANYCRLF option.\n\n       (g) The callout facility is PCRE2-specific.  Perl  supports  codeblocks\n       and variable interpolation, but not general hooks on every match.\n\n       (h) The partial matching facility is PCRE2-specific.\n\n       (i)  The alternative matching function (pcre2_dfa_match()) matches in a\n       different way and is not Perl-compatible.\n\n       (j) PCRE2 recognizes some special sequences such as (*CR) or  (*NO_JIT)\n       at  the  start  of  a pattern. These set overall options that cannot be\n       changed within the pattern.\n\n       (k) PCRE2 supports non-atomic positive lookaround assertions.  This  is\n       an extension to the lookaround facilities. The default, Perl-compatible\n       lookarounds are atomic.\n\n       (l)  There  are three syntactical items in patterns that can refer to a\n       capturing group by number: back references such  as  \\g{2},  subroutine\n       calls  such  as (?3), and condition references such as (?(4)...). PCRE2\n       supports relative group numbers such as +2 and -4 in all  three  cases.\n       Perl  supports both plus and minus for subroutine calls, but only minus\n       for back references, and no relative numbering at all for conditions.\n\n       (m) The scan substring assertion (syntax (*scs:(n)...)) is a PCRE2  ex-\n       tension that is not available in Perl.\n\n       20.  Perl has different limits than PCRE2. See the pcre2limits documen-\n       tation for details. Perl went with 5.10  from  recursion  to  iteration\n       keeping  the intermediate matches on the heap, which is ~10% slower but\n       does not fall into any  stack-overflow  limit.  PCRE2  made  a  similar\n       change at release 10.30, and also has many build-time and run-time cus-\n       tomizable limits.\n\n       21.  Unlike  Perl,  PCRE2 doesn't have character set modifiers and spe-\n       cially no way to set characters by context just  like  Perl's  \"/d\".  A\n       regular expression using PCRE2_UTF and PCRE2_UCP will use similar rules\n       to  Perl's  \"/u\";  something closer to \"/a\" could be selected by adding\n       other PCRE2_EXTRA_ASCII* options on top.\n\n       22. Some recursive patterns that Perl diagnoses as infinite  recursions\n       can be handled by PCRE2, either by the interpreter or the JIT. An exam-\n       ple is /(?:|(?0)abcd)(?(R)|\\z)/, which matches a sequence of any number\n       of repeated \"abcd\" substrings at the end of the subject.\n\n       23.  Both  PCRE2  and Perl error when \\x{ escapes are invalid, but Perl\n       tries to recover and prints a warning if the problem was  that  an  in-\n       valid hexadecimal digit was found. Since PCRE2 doesn't have warnings it\n       returns  an  error instead.  Additionally, Perl accepts \\x{} and gener-\n       ates NUL unlike PCRE2.\n\n       24. From release 10.45, PCRE2 gives an error if \\x is not followed by a\n       hexadecimal digit or a curly bracket. It used to interpret this as  the\n       NUL character. Perl still generates NUL, but warns when in warning mode\n       in most cases.\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 02 June 2025\n       Copyright (c) 1997-2024 University of Cambridge.\n\n\nPCRE2 10.48-DEV                  02 June 2025                   PCRE2COMPAT(3)\n------------------------------------------------------------------------------\n\n\nPCRE2JIT(3)                Library Functions Manual                PCRE2JIT(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nPCRE2 JUST-IN-TIME COMPILER SUPPORT\n\n       Just-in-time  compiling  is a heavyweight optimization that can greatly\n       speed up pattern matching. However, it comes at the cost of extra  pro-\n       cessing  before  the  match is performed, so it is of most benefit when\n       the same pattern is going to be matched many times. This does not  nec-\n       essarily  mean many calls of a matching function; if the pattern is not\n       anchored, matching attempts may take place many times at various  posi-\n       tions in the subject, even for a single call. Therefore, if the subject\n       string  is  very  long,  it  may  still pay to use JIT even for one-off\n       matches. JIT support is available for all  of  the  8-bit,  16-bit  and\n       32-bit PCRE2 libraries.\n\n       JIT  support  applies  only to the traditional Perl-compatible matching\n       function.  It does not apply when the DFA matching  function  is  being\n       used. The code for JIT support was written by Zoltan Herczeg.\n\n\nAVAILABILITY OF JIT SUPPORT\n\n       JIT  support  is  an  optional feature of PCRE2. The \"configure\" option\n       --enable-jit (or equivalent CMake option) must be  set  when  PCRE2  is\n       built  if  you want to use JIT. The support is limited to the following\n       hardware platforms:\n\n         ARM 32-bit (v7, and Thumb2)\n         ARM 64-bit\n         IBM s390x 64 bit\n         Intel x86 32-bit and 64-bit\n         LoongArch 64 bit\n         MIPS 32-bit and 64-bit\n         Power PC 32-bit and 64-bit\n         RISC-V 32-bit and 64-bit\n\n       If --enable-jit is set on an unsupported platform, compilation fails.\n\n       A client program can tell if JIT support has been compiled  by  calling\n       pcre2_config()  with  the PCRE2_CONFIG_JIT option. The result is one if\n       PCRE2 was built with JIT support, and zero otherwise.  However,  having\n       the  JIT code available does not guarantee that it will be used for any\n       particular match. One reason for this is that there are a number of op-\n       tions and pattern items that are not supported by JIT (see below).  An-\n       other  reason  is  that  in some environments JIT is unable to get exe-\n       cutable memory in which to build its compiled code. The only  guarantee\n       from pcre2_config() is that if it returns zero, JIT will definitely not\n       be used.\n\n       As  of  release  10.45  there is a more informative way to test for JIT\n       support. If  pcre2_compile_jit()  is  called  with  the  single  option\n       PCRE2_JIT_TEST_ALLOC  it  returns  zero  if  JIT is available and has a\n       working allocator. Otherwise it returns PCRE2_ERROR_NOMEMORY if JIT  is\n       available but cannot allocate executable memory, or PCRE2_ERROR_JIT_UN-\n       SUPPORTED if JIT support is not compiled. The code argument is ignored,\n       so it can be a NULL value.\n\n       A  simple  program  does not need to check availability in order to use\n       JIT when possible. The API is implemented in a way that falls  back  to\n       the  interpretive  code if JIT is not available or cannot be used for a\n       given match. For programs that  need  the  best  possible  performance,\n       there is a \"fast path\" API that is JIT-specific.\n\n\nSIMPLE USE OF JIT\n\n       To  make use of the JIT support in the simplest way, all you have to do\n       is to call pcre2_jit_compile() after successfully compiling  a  pattern\n       with pcre2_compile(). This function has two arguments: the first is the\n       compiled  pattern pointer that was returned by pcre2_compile(), and the\n       second is zero or more of the  following  option  bits:  PCRE2_JIT_COM-\n       PLETE, PCRE2_JIT_PARTIAL_HARD, or PCRE2_JIT_PARTIAL_SOFT.\n\n       If  JIT  support  is  not available, a call to pcre2_jit_compile() does\n       nothing and returns PCRE2_ERROR_JIT_BADOPTION. Otherwise, the  compiled\n       pattern is passed to the JIT compiler, which turns it into machine code\n       that executes much faster than the normal interpretive code, but yields\n       exactly  the  same results. The returned value from pcre2_jit_compile()\n       is zero on success, or a negative error code.\n\n       There is a limit to the size of pattern that JIT supports,  imposed  by\n       the  size  of machine stack that it uses. The exact rules are not docu-\n       mented because they may change at any time, in particular, when new op-\n       timizations are introduced.  If  a  pattern  is  too  big,  a  call  to\n       pcre2_jit_compile() returns PCRE2_ERROR_NOMEMORY.\n\n       PCRE2_JIT_COMPLETE  requests the JIT compiler to generate code for com-\n       plete matches. If you want to run partial matches using the  PCRE2_PAR-\n       TIAL_HARD  or  PCRE2_PARTIAL_SOFT  options of pcre2_match(), you should\n       set one or both of  the  other  options  as  well  as,  or  instead  of\n       PCRE2_JIT_COMPLETE. The JIT compiler generates different optimized code\n       for  each of the three modes (normal, soft partial, hard partial). When\n       pcre2_match() is called, the appropriate code is run if  it  is  avail-\n       able. Otherwise, the pattern is matched using interpretive code.\n\n       You  can  call pcre2_jit_compile() multiple times for the same compiled\n       pattern. It does nothing if it has previously compiled code for any  of\n       the  option bits. For example, you can call it once with PCRE2_JIT_COM-\n       PLETE and (perhaps later, when you  find  you  need  partial  matching)\n       again  with PCRE2_JIT_COMPLETE and PCRE2_JIT_PARTIAL_HARD. This time it\n       will ignore PCRE2_JIT_COMPLETE and just compile code for partial match-\n       ing. If pcre2_jit_compile() is called with no option bits set, it imme-\n       diately returns zero. This is an alternative way of testing whether JIT\n       support has been compiled.\n\n       At present, it is not possible to free JIT compiled  code  except  when\n       the entire compiled pattern is freed by calling pcre2_code_free().\n\n       In  some circumstances you may need to call additional functions. These\n       are described in the section entitled \"Controlling the JIT  stack\"  be-\n       low.\n\n       There are some pcre2_match() options that are not supported by JIT, and\n       there  are  also some pattern items that JIT cannot handle. Details are\n       given below.  In both cases, matching automatically falls back  to  the\n       interpretive  code.  If  you want to know whether JIT was actually used\n       for a particular match, you should arrange for a JIT callback  function\n       to  be set up as described in the section entitled \"Controlling the JIT\n       stack\" below, even if you do not  need  to  supply  a  non-default  JIT\n       stack. Such a callback function is called whenever JIT code is about to\n       be  obeyed.  If the match-time options are not right for JIT execution,\n       the callback function is not obeyed.\n\n       If the JIT compiler finds an unsupported item, no JIT  data  is  gener-\n       ated. You can find out if JIT compilation was successful for a compiled\n       pattern by calling pcre2_pattern_info() with the PCRE2_INFO_JITSIZE op-\n       tion.  A  non-zero  result means that JIT compilation was successful. A\n       result of 0 means that JIT support is not available, or the pattern was\n       not processed by pcre2_jit_compile(), or the JIT compiler was not  able\n       to  handle  the  pattern. Successful JIT compilation does not, however,\n       guarantee the use of JIT at match time because  there  are  some  match\n       time options that are not supported by JIT.\n\n\nMATCHING SUBJECTS CONTAINING INVALID UTF\n\n       When  a  pattern is compiled with the PCRE2_UTF option, subject strings\n       are normally expected to be a valid sequence of UTF code units. By  de-\n       fault,  this is checked at the start of matching and an error is gener-\n       ated if invalid UTF is detected. The PCRE2_NO_UTF_CHECK option  can  be\n       passed to pcre2_match() to skip the check (for improved performance) if\n       you  are  sure  that  a subject string is valid. If this option is used\n       with an invalid string, the result is undefined.  The  calling  program\n       may crash or loop or otherwise misbehave.\n\n       However,  a  way of running matches on strings that may contain invalid\n       UTF  sequences  is  available.   Calling   pcre2_compile()   with   the\n       PCRE2_MATCH_INVALID_UTF  option  has  two  effects: it tells the inter-\n       preter in pcre2_match() to support invalid UTF, and, if  pcre2_jit_com-\n       pile()  is subsequently called, the compiled JIT code also supports in-\n       valid UTF.  Details of how this support works, in both the JIT and  the\n       interpretive cases, is given in the pcre2unicode documentation.\n\n       There  is  also  an  obsolete  option  for  pcre2_jit_compile()  called\n       PCRE2_JIT_INVALID_UTF, which currently exists only for backward compat-\n       ibility.    It   is   superseded   by   the   pcre2_compile()    option\n       PCRE2_MATCH_INVALID_UTF and should no longer be used. It may be removed\n       in future.\n\n\nUNSUPPORTED OPTIONS AND PATTERN ITEMS\n\n       The  pcre2_match()  options  that  are  supported  for JIT matching are\n       PCRE2_COPY_MATCHED_SUBJECT, PCRE2_NOTBOL, PCRE2_NOTEOL, PCRE2_NOTEMPTY,\n       PCRE2_NOTEMPTY_ATSTART,  PCRE2_NO_UTF_CHECK,  PCRE2_PARTIAL_HARD,   and\n       PCRE2_PARTIAL_SOFT.  The  PCRE2_ANCHORED  and PCRE2_ENDANCHORED options\n       are not supported at match time.\n\n       If the PCRE2_NO_JIT option is passed to pcre2_match() it  disables  the\n       use of JIT, forcing matching by the interpreter code.\n\n       The  only  unsupported  pattern items are \\C (match a single data unit)\n       when running in a UTF mode, and a callout immediately before an  asser-\n       tion condition in a conditional group.\n\n\nRETURN VALUES FROM JIT MATCHING\n\n       When  a pattern is matched using JIT, the return values are the same as\n       those given by the interpretive pcre2_match() code, with  the  addition\n       of  one new error code: PCRE2_ERROR_JIT_STACKLIMIT. This means that the\n       memory used for the JIT stack was insufficient.  See  \"Controlling  the\n       JIT stack\" below for a discussion of JIT stack usage.\n\n       The  error  code  PCRE2_ERROR_MATCHLIMIT is returned by the JIT code if\n       searching a very large pattern tree goes on for too long, as it  is  in\n       the  same circumstance when JIT is not used, but the details of exactly\n       what is counted are not the same. The PCRE2_ERROR_DEPTHLIMIT error code\n       is never returned when JIT matching is used.\n\n\nCONTROLLING THE JIT STACK\n\n       When the compiled JIT code runs, it needs a block of memory to use as a\n       stack.  By default, it uses 32KiB on the machine stack.  However,  some\n       large  or complicated patterns need more than this. The error PCRE2_ER-\n       ROR_JIT_STACKLIMIT is given when there is not enough stack. Three func-\n       tions are provided for managing blocks of memory for use as JIT stacks.\n       There is further discussion about the use of JIT stacks in the  section\n       entitled \"JIT stack FAQ\" below.\n\n       The  pcre2_jit_stack_create()  function  creates a JIT stack. Its argu-\n       ments are a starting size, a maximum size, and a general  context  (for\n       memory  allocation  functions, or NULL for standard memory allocation).\n       It returns a pointer to an opaque structure of type pcre2_jit_stack, or\n       NULL if there is an error. The pcre2_jit_stack_free() function is  used\n       to free a stack that is no longer needed. If its argument is NULL, this\n       function  returns immediately, without doing anything. (For the techni-\n       cally minded: the address space is allocated by mmap or  VirtualAlloc.)\n       A  maximum  stack size of 512KiB to 1MiB should be more than enough for\n       any pattern.\n\n       The pcre2_jit_stack_assign() function specifies which  stack  JIT  code\n       should use. Its arguments are as follows:\n\n         pcre2_match_context  *mcontext\n         pcre2_jit_callback    callback\n         void                 *data\n\n       The first argument is a pointer to a match context. When this is subse-\n       quently passed to a matching function, its information determines which\n       JIT stack is used. If this argument is NULL, the function returns imme-\n       diately,  without  doing anything. There are three cases for the values\n       of the other two options:\n\n         (1) If callback is NULL and data is NULL, an internal 32KiB block\n             on the machine stack is used. This is the default when a match\n             context is created.\n\n         (2) If callback is NULL and data is not NULL, data must be\n             a pointer to a valid JIT stack, the result of calling\n             pcre2_jit_stack_create().\n\n         (3) If callback is not NULL, it must point to a function that is\n             called with data as an argument at the start of matching, in\n             order to set up a JIT stack. If the return from the callback\n             function is NULL, the internal 32KiB stack is used; otherwise the\n             return value must be a valid JIT stack, the result of calling\n             pcre2_jit_stack_create().\n\n       A callback function is obeyed whenever JIT code is about to be run;  it\n       is not obeyed when pcre2_match() is called with options that are incom-\n       patible  for JIT matching. A callback function can therefore be used to\n       determine whether a match operation was executed by JIT or by  the  in-\n       terpreter.\n\n       You may safely use the same JIT stack for more than one pattern (either\n       by  assigning  directly  or  by  callback), as long as the patterns are\n       matched sequentially in the same thread. Currently, the only way to set\n       up non-sequential matches in one thread is to use callouts: if a  call-\n       out  function starts another match, that match must use a different JIT\n       stack to the one used for currently suspended match(es).\n\n       In a multithread application, if you do not specify a JIT stack, or  if\n       you  assign or pass back NULL from a callback, that is thread-safe, be-\n       cause each thread has its own machine stack. However, if you assign  or\n       pass back a non-NULL JIT stack, this must be a different stack for each\n       thread so that the application is thread-safe.\n\n       Strictly  speaking,  even more is allowed. You can assign the same non-\n       NULL stack to a match context that is used by any number  of  patterns,\n       as  long  as  they are not used for matching by multiple threads at the\n       same time. For example, you could use the same stack  in  all  compiled\n       patterns,  with  a global mutex in the callback to wait until the stack\n       is available for use. However, this is an inefficient solution, and not\n       recommended.\n\n       This is a suggestion for how a multithreaded program that needs to  set\n       up non-default JIT stacks might operate:\n\n         During thread initialization\n           thread_local_var = pcre2_jit_stack_create(...)\n\n         During thread exit\n           pcre2_jit_stack_free(thread_local_var)\n\n         Use a one-line callback function\n           return thread_local_var\n\n       All  the  functions  described in this section do nothing if JIT is not\n       available.\n\n\nJIT STACK FAQ\n\n       (1) Why do we need JIT stacks?\n\n       PCRE2 (and JIT) is a recursive, depth-first engine, so it needs a stack\n       where the local data of the current node is pushed before checking  its\n       child nodes.  Allocating real machine stack on some platforms is diffi-\n       cult. For example, the stack chain needs to be updated every time if we\n       extend  the  stack  on  PowerPC.  Although it is possible, its updating\n       time overhead decreases performance. So we do the recursion in memory.\n\n       (2) Why don't we simply allocate blocks of memory with malloc()?\n\n       Modern operating systems have a nice feature: they can reserve  an  ad-\n       dress space instead of allocating memory. We can safely allocate memory\n       pages inside this address space, so the stack could grow without moving\n       memory  data (this is important because of pointers). Thus we can allo-\n       cate 1MiB address space, and use only a  single  memory  page  (usually\n       4KiB)  if that is enough. However, we can still grow up to 1MiB anytime\n       if needed.\n\n       (3) Who \"owns\" a JIT stack?\n\n       The owner of the stack is the user program, not the JIT studied pattern\n       or anything else. The user program must ensure that if a stack is being\n       used by pcre2_match(), (that is, it is assigned to a match context that\n       is passed to the pattern currently running), that  stack  must  not  be\n       used  by any other threads (to avoid overwriting the same memory area).\n       The best practice for multithreaded programs is to allocate a stack for\n       each thread, and return this stack through the JIT callback function.\n\n       (4) When should a JIT stack be freed?\n\n       You can free a JIT stack at any time, as long as it will not be used by\n       pcre2_match() again. When you assign the stack to a match context, only\n       a pointer is set. There is no reference counting or  any  other  magic.\n       You can free compiled patterns, contexts, and stacks in any order, any-\n       time.   Just do not call pcre2_match() with a match context pointing to\n       an already freed stack, as that will cause SEGFAULT. (Also, do not free\n       a stack currently used by pcre2_match() in  another  thread).  You  can\n       also  replace the stack in a context at any time when it is not in use.\n       You should free the previous stack before assigning a replacement.\n\n       (5) Should I allocate/free a  stack  every  time  before/after  calling\n       pcre2_match()?\n\n       No,  because  this  is  too  costly in terms of resources. However, you\n       could implement some clever idea which release the stack if it  is  not\n       used  in  let's  say  two minutes. The JIT callback can help to achieve\n       this without keeping a list of patterns.\n\n       (6) OK, the stack is for long term memory allocation. But what  happens\n       if  a  pattern causes stack overflow with a stack of 1MiB? Is that 1MiB\n       kept until the stack is freed?\n\n       Especially on embedded systems, it might be a good idea to release mem-\n       ory sometimes without freeing the stack. There is no API  for  this  at\n       the  moment.  Probably a function call which returns with the currently\n       allocated memory for any stack and another which allows releasing  mem-\n       ory (shrinking the stack) would be a good idea if someone needs this.\n\n       (7) This is too much of a headache. Isn't there any better solution for\n       JIT stack handling?\n\n       No,  thanks to Windows. If POSIX threads were used everywhere, we could\n       throw out this complicated API.\n\n\nFREEING JIT SPECULATIVE MEMORY\n\n       void pcre2_jit_free_unused_memory(pcre2_general_context *gcontext);\n\n       The JIT executable allocator does not free all memory when it is possi-\n       ble. It expects new allocations, and keeps some free memory  around  to\n       improve  allocation  speed. However, in low memory conditions, it might\n       be better to free all possible memory. You can cause this to happen  by\n       calling  pcre2_jit_free_unused_memory(). Its argument is a general con-\n       text, for custom memory management, or NULL for standard memory manage-\n       ment.\n\n\nEXAMPLE CODE\n\n       This is a single-threaded example that specifies a  JIT  stack  without\n       using  a  callback.  A real program should include error checking after\n       all the function calls.\n\n         int rc;\n         pcre2_code *re;\n         pcre2_match_data *match_data;\n         pcre2_match_context *mcontext;\n         pcre2_jit_stack *jit_stack;\n\n         re = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, 0,\n           &errornumber, &erroffset, NULL);\n         rc = pcre2_jit_compile(re, PCRE2_JIT_COMPLETE);\n         mcontext = pcre2_match_context_create(NULL);\n         jit_stack = pcre2_jit_stack_create(32*1024, 512*1024, NULL);\n         pcre2_jit_stack_assign(mcontext, NULL, jit_stack);\n         match_data = pcre2_match_data_create(re, 10);\n         rc = pcre2_match(re, subject, length, 0, 0, match_data, mcontext);\n         /* Process result */\n\n         pcre2_code_free(re);\n         pcre2_match_data_free(match_data);\n         pcre2_match_context_free(mcontext);\n         pcre2_jit_stack_free(jit_stack);\n\n\nJIT FAST PATH API\n\n       Because the API described above falls back to interpreted matching when\n       JIT is not available, it is convenient for programs  that  are  written\n       for  general  use  in  many  environments.  However,  calling  JIT  via\n       pcre2_match() does have a performance impact. Programs that are written\n       for use where JIT is known to be available, and  which  need  the  best\n       possible  performance,  can  instead  use a \"fast path\" API to call JIT\n       matching directly instead of calling pcre2_match() (obviously only  for\n       patterns that have been successfully processed by pcre2_jit_compile()).\n\n       The  fast  path  function is called pcre2_jit_match(), and it takes ex-\n       actly the same arguments as pcre2_match(). However, the subject  string\n       must  be  specified  with  a  length; PCRE2_ZERO_TERMINATED is not sup-\n       ported.  Unsupported  option  bits  (for  example,  PCRE2_ANCHORED  and\n       PCRE2_ENDANCHORED)  are ignored, as is the PCRE2_NO_JIT option. The re-\n       turn values are also the same  as  for  pcre2_match(),  plus  PCRE2_ER-\n       ROR_JIT_BADOPTION if a matching mode (partial or complete) is requested\n       that was not compiled.\n\n       When  you call pcre2_match(), as well as testing for invalid options, a\n       number of other sanity checks are performed on the arguments. For exam-\n       ple, if the subject pointer is NULL but the length is non-zero, an  im-\n       mediate  error  is given. Also, unless PCRE2_NO_UTF_CHECK is set, a UTF\n       subject string is tested for validity. In the interests of speed, these\n       checks do not happen on the JIT fast  path.  If  invalid  UTF  data  is\n       passed  when  PCRE2_MATCH_INVALID_UTF  was not set for pcre2_compile(),\n       the result is undefined. The program may crash or loop  or  give  wrong\n       results.  In  the  absence  of  PCRE2_MATCH_INVALID_UTF you should call\n       pcre2_jit_match() in UTF mode only if  you  are  sure  the  subject  is\n       valid.\n\n       Bypassing  the  sanity  checks  and the pcre2_match() wrapping can give\n       speedups of more than 10%.\n\n\nSEE ALSO\n\n       pcre2api(3), pcre2unicode(3)\n\n\nAUTHOR\n\n       Philip Hazel (FAQ by Zoltan Herczeg)\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 22 August 2024\n       Copyright (c) 1997-2024 University of Cambridge.\n\n\nPCRE2 10.48-DEV                 22 August 2024                     PCRE2JIT(3)\n------------------------------------------------------------------------------\n\n\nPCRE2LIMITS(3)             Library Functions Manual             PCRE2LIMITS(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nSIZE AND OTHER LIMITATIONS\n\n       There are some size limitations in PCRE2 but it is hoped that they will\n       never in practice be relevant.\n\n       The  maximum  size  of  a compiled pattern is approximately 64 thousand\n       code units for the 8-bit and 16-bit libraries if PCRE2 is compiled with\n       the default internal linkage size, which  is  2  bytes  for  these  li-\n       braries.  If  you  want  to  process regular expressions that are truly\n       enormous, you can compile PCRE2 with an internal linkage size of 3 or 4\n       (when building the 16-bit library, 3 is  rounded  up  to  4).  See  the\n       README file in the source distribution and the pcre2build documentation\n       for  details.  In  these cases the limit is substantially larger.  How-\n       ever, the speed of execution is slower. In the 32-bit library, the  in-\n       ternal linkage size is always 4.\n\n       The maximum length of a source pattern string is essentially unlimited;\n       it  is  the largest number a PCRE2_SIZE variable can hold. However, the\n       program that calls pcre2_compile() can specify a smaller limit.\n\n       The maximum length (in code units) of a subject string is one less than\n       the largest number a PCRE2_SIZE variable can hold. PCRE2_SIZE is an un-\n       signed integer type, usually defined as size_t. Its maximum value (that\n       is ~(PCRE2_SIZE)0) is reserved as a special indicator  for  zero-termi-\n       nated strings and unset offsets.\n\n       All values in repeating quantifiers must be less than 65536.\n\n       There are two different limits that apply to branches of lookbehind as-\n       sertions.   If every branch in such an assertion matches a fixed number\n       of characters, the maximum length of any branch is 65535 characters. If\n       any branch matches a variable number of characters,  then  the  maximum\n       matching  length  for every branch is limited. The default limit is set\n       at compile time, defaulting to 255, but can be changed by  the  calling\n       program.\n\n       There  is no limit to the number of parenthesized groups, but there can\n       be no more than 65535 capture groups, and there is a limit to the depth\n       of nesting of parenthesized subpatterns of all kinds. This  is  imposed\n       in  order to limit the amount of system stack used at compile time. The\n       default limit can be specified when PCRE2 is built; if not, the default\n       is set to  250.  An  application  can  change  this  limit  by  calling\n       pcre2_set_parens_nest_limit() to set the limit in a compile context.\n\n       The maximum length of the name for a named capture group as well as the\n       number of such groups is configurable at build time. The maximum length\n       for the name defaults to 128 code units, and the maximum number of such\n       groups to 10000.\n\n       The  maximum  length  of  a  name  in  a (*MARK), (*PRUNE), (*SKIP), or\n       (*THEN) verb is 255 code units for the 8-bit  library  and  65535  code\n       units for the 16-bit and 32-bit libraries.\n\n       The  maximum  length  of  a string argument to a callout is the largest\n       number a 32-bit unsigned integer can hold.\n\n       The maximum amount of heap memory used for matching  is  controlled  by\n       the  heap  limit,  which can be set in a pattern or in a match context.\n       The default is a very large number, effectively unlimited.\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 03 September 2025\n       Copyright (c) 1997-2023 University of Cambridge.\n\n\nPCRE2 10.48-DEV                03 September 2025                PCRE2LIMITS(3)\n------------------------------------------------------------------------------\n\n\nPCRE2MATCHING(3)           Library Functions Manual           PCRE2MATCHING(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nPCRE2 MATCHING ALGORITHMS\n\n       This document describes the two different algorithms that are available\n       in  PCRE2  for  matching  a compiled regular expression against a given\n       subject string. The \"standard\" algorithm is the  one  provided  by  the\n       pcre2_match()  function.  This works in the same way as Perl's matching\n       function, and provides a Perl-compatible matching operation. The  just-\n       in-time (JIT) optimization that is described in the pcre2jit documenta-\n       tion is compatible with this function.\n\n       An alternative algorithm is provided by the pcre2_dfa_match() function;\n       it operates in a different way, and is not Perl-compatible. This alter-\n       native  has advantages and disadvantages compared with the standard al-\n       gorithm, and these are described below.\n\n       When there is only one possible way in which a given subject string can\n       match a pattern, the two algorithms give the same answer. A  difference\n       arises, however, when there are multiple possibilities. For example, if\n       the anchored pattern\n\n         ^<.*>\n\n       is matched against the string\n\n         <something> <something else> <something further>\n\n       there are three possible answers. The standard algorithm finds only one\n       of them, whereas the alternative algorithm finds all three.\n\n\nREGULAR EXPRESSIONS AS TREES\n\n       The set of strings that are matched by a regular expression can be rep-\n       resented  as  a  tree structure. An unlimited repetition in the pattern\n       makes the tree of infinite size, but it is still a tree.  Matching  the\n       pattern  to a given subject string (from a given starting point) can be\n       thought of as a search of the tree.  There are two  ways  to  search  a\n       tree:  depth-first  and  breadth-first, and these correspond to the two\n       matching algorithms provided by PCRE2.\n\n\nTHE STANDARD MATCHING ALGORITHM\n\n       In the terminology of Jeffrey Friedl's book \"Mastering Regular  Expres-\n       sions\",  the  standard  algorithm  is an \"NFA algorithm\". It conducts a\n       depth-first search of the pattern tree. That is, it  proceeds  along  a\n       single path through the tree, checking that the subject matches what is\n       required.  When  there  is a mismatch, the algorithm tries any alterna-\n       tives at the current point, and if they all fail, it backs  up  to  the\n       previous  branch  point  in  the  tree,  and tries the next alternative\n       branch at that level. This often involves backing  up  (moving  to  the\n       left)  in  the  subject  string  as well. The order in which repetition\n       branches are tried is controlled by the greedy or  ungreedy  nature  of\n       the quantifier.\n\n       If  a  leaf  node  is reached, a matching string has been found, and at\n       that point the algorithm stops. Thus, if there is more than one  possi-\n       ble  match, this algorithm returns the first one that it finds. Whether\n       this is the shortest, the longest, or some intermediate length  depends\n       on the way the alternations and the greedy or ungreedy repetition quan-\n       tifiers are specified in the pattern.\n\n       Because  it  ends  up  with a single path through the tree, it is rela-\n       tively straightforward for this algorithm to keep  track  of  the  sub-\n       strings  that  are  matched  by portions of the pattern in parentheses.\n       This provides support for capturing parentheses and backreferences.\n\n\nTHE ALTERNATIVE MATCHING ALGORITHM\n\n       This algorithm conducts a breadth-first search of  the  tree.  Starting\n       from  the  first  matching  point  in the subject, it scans the subject\n       string from left to right, once, character by character, and as it does\n       this, it remembers all the paths through the tree that represent  valid\n       matches.  In  Friedl's  terminology, this is a kind of \"DFA algorithm\",\n       though it is not implemented as a traditional finite state machine  (it\n       keeps multiple states active simultaneously).\n\n       Although  the  general  principle of this matching algorithm is that it\n       scans the subject string only once, without backtracking, there is  one\n       exception:  when  a lookaround assertion is encountered, the characters\n       following or preceding the current point have to be  independently  in-\n       spected.\n\n       The  scan  continues until either the end of the subject is reached, or\n       there are no more unterminated paths. At this point,  terminated  paths\n       represent  the different matching possibilities (if there are none, the\n       match has failed).  Thus, if there is more  than  one  possible  match,\n       this  algorithm  finds  all  of  them,  and in particular, it finds the\n       longest. The matches are returned in the output  vector  in  decreasing\n       order  of  length.  There  is an option to stop the algorithm after the\n       first match (which is necessarily the shortest) is found.\n\n       Note that the size of vector needed to contain all the results  depends\n       on  the  number of simultaneous matches, not on the number of capturing\n       parentheses in  the  pattern.  Using  pcre2_match_data_create_from_pat-\n       tern()  to  create the match data block is therefore not advisable when\n       doing DFA matching.\n\n       Note also that all the matches that are found start at the  same  point\n       in the subject. If the pattern\n\n         cat(er(pillar)?)?\n\n       is  matched  against the string \"the caterpillar catchment\", the result\n       is the three strings \"caterpillar\", \"cater\", and \"cat\"  that  start  at\n       the  fifth  character  of the subject. The algorithm does not automati-\n       cally move on to find matches that start at later positions.\n\n       PCRE2's \"auto-possessification\" optimization usually applies to charac-\n       ter repeats at the end of a pattern (as well as internally). For  exam-\n       ple, the pattern \"a\\d+\" is compiled as if it were \"a\\d++\" because there\n       is  no  point even considering the possibility of backtracking into the\n       repeated digits. For DFA matching, this means that  only  one  possible\n       match  is  found. If you really do want multiple matches in such cases,\n       either use an ungreedy repeat (\"a\\d+?\") or set  the  PCRE2_NO_AUTO_POS-\n       SESS option when compiling.\n\n       There  are  a  number of features of PCRE2 regular expressions that are\n       not supported or behave differently in the alternative  matching  func-\n       tion. Those that are not supported cause an error if encountered.\n\n       1.  Because the algorithm finds all possible matches, the greedy or un-\n       greedy nature of repetition quantifiers is not relevant (though it  may\n       affect  auto-possessification,  as  just  described).  During matching,\n       greedy and ungreedy quantifiers are treated in exactly  the  same  way.\n       However, possessive quantifiers can make a difference when what follows\n       could  also  match  what  is  quantified, for example in a pattern like\n       this:\n\n         ^a++\\w!\n\n       This pattern matches \"aaab!\" but not \"aaa!\", which would be matched  by\n       a  non-possessive quantifier. Similarly, if an atomic group is present,\n       it is matched as if it were a standalone pattern at the current  point,\n       and  the  longest match is then \"locked in\" for the rest of the overall\n       pattern.\n\n       2. When dealing with multiple paths through the tree simultaneously, it\n       is not straightforward to keep track of  captured  substrings  for  the\n       different  matching  possibilities,  and PCRE2's implementation of this\n       algorithm does not attempt to do this. This means that no captured sub-\n       strings are available.\n\n       3. Because no substrings are captured, a number of related features are\n       not available:\n\n       (a) Backreferences;\n\n       (b) Conditional expressions that use a backreference as  the  condition\n       or test for a specific group recursion;\n\n       (c) Script runs;\n\n       (d) Scan substring assertions.\n\n       4. Because many paths through the tree may be active, the \\K escape se-\n       quence,  which  resets the start of the match when encountered (but may\n       be on some paths and not on others), is not supported.\n\n       5. Callouts are supported, but the value of the  capture_top  field  is\n       always 1, and the value of the capture_last field is always 0.\n\n       6.  The  \\C  escape  sequence, which (in the standard algorithm) always\n       matches a single code unit, even in a UTF mode, is not supported in UTF\n       modes because the  alternative  algorithm  moves  through  the  subject\n       string  one  character  (not code unit) at a time, for all active paths\n       through the tree.\n\n       7. Except for (*FAIL), the backtracking control verbs such as  (*PRUNE)\n       are  not  supported.  (*FAIL)  is supported, and behaves like a failing\n       negative assertion.\n\n       8. The PCRE2_MATCH_INVALID_UTF option for pcre2_compile() is  not  sup-\n       ported by pcre2_dfa_match().\n\n\nADVANTAGES OF THE ALTERNATIVE ALGORITHM\n\n       The  main  advantage  of the alternative algorithm is that all possible\n       matches (at a single point in the subject) are automatically found, and\n       in particular, the longest match is found. To find more than one  match\n       at  the  same point using the standard algorithm, you have to do kludgy\n       things with callouts.\n\n       Partial matching is possible with this algorithm, though  it  has  some\n       limitations.  The  pcre2partial  documentation gives details of partial\n       matching and discusses multi-segment matching.\n\n\nDISADVANTAGES OF THE ALTERNATIVE ALGORITHM\n\n       The alternative algorithm suffers from a number of disadvantages:\n\n       1. It is substantially slower than  the  standard  algorithm.  This  is\n       partly  because  it has to search for all possible matches, but is also\n       because it is less susceptible to optimization.\n\n       2. Capturing parentheses and other features such as backreferences that\n       rely on them are not supported.\n\n       3. Matching within invalid UTF strings is not supported.\n\n       4. Although atomic groups are supported, their use does not provide the\n       performance advantage that it does for the standard algorithm.\n\n       5. JIT optimization is not supported.\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 22 February 2025\n       Copyright (c) 1997-2024 University of Cambridge.\n\n\nPCRE2 10.48-DEV                22 February 2025               PCRE2MATCHING(3)\n------------------------------------------------------------------------------\n\n\nPCRE2PARTIAL(3)            Library Functions Manual            PCRE2PARTIAL(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nPARTIAL MATCHING IN PCRE2\n\n       In  normal use of PCRE2, if there is a match up to the end of a subject\n       string, but more characters are needed to  match  the  entire  pattern,\n       PCRE2_ERROR_NOMATCH  is  returned,  just  like any other failing match.\n       There are circumstances where it might be helpful to  distinguish  this\n       \"partial match\" case.\n\n       One  example  is  an application where the subject string is very long,\n       and not all available at once. The requirement here is to be able to do\n       the matching segment by segment, but special action is  needed  when  a\n       matched substring spans the boundary between two segments.\n\n       Another  example is checking a user input string as it is typed, to en-\n       sure that it conforms to a required format. Invalid characters  can  be\n       immediately diagnosed and rejected, giving instant feedback.\n\n       Partial  matching  is a PCRE2-specific feature; it is not Perl-compati-\n       ble. It is requested  by  setting  one  of  the  PCRE2_PARTIAL_HARD  or\n       PCRE2_PARTIAL_SOFT  options  when calling a matching function. The dif-\n       ference between the two options is whether or not a  partial  match  is\n       preferred  to  an alternative complete match, though the details differ\n       between the two types of matching function. If both  options  are  set,\n       PCRE2_PARTIAL_HARD takes precedence.\n\n       If  you  want to use partial matching with just-in-time optimized code,\n       as well as setting a partial match option for  the  matching  function,\n       you  must  also  call pcre2_jit_compile() with one or both of these op-\n       tions:\n\n         PCRE2_JIT_PARTIAL_HARD\n         PCRE2_JIT_PARTIAL_SOFT\n\n       PCRE2_JIT_COMPLETE should also be set if you are going to run  non-par-\n       tial  matches  on  the same pattern. Separate code is compiled for each\n       mode. If the appropriate JIT mode has not been  compiled,  interpretive\n       matching code is used.\n\n       Setting  a partial matching option disables two of PCRE2's standard op-\n       timization hints. PCRE2 remembers the last literal code unit in a  pat-\n       tern,  and  abandons  matching  immediately if it is not present in the\n       subject string.  This optimization cannot be used for a subject  string\n       that  might match only partially. PCRE2 also remembers a minimum length\n       of a matching string, and does not bother to run the matching  function\n       on  shorter  strings.  This  optimization  is also disabled for partial\n       matching.\n\n\nREQUIREMENTS FOR A PARTIAL MATCH\n\n       A possible partial match occurs during matching when  the  end  of  the\n       subject  string is reached successfully, but either more characters are\n       needed to complete the match, or the addition of more characters  might\n       change what is matched.\n\n       Example  1: if the pattern is /abc/ and the subject is \"ab\", more char-\n       acters are definitely needed to complete a match.  In  this  case  both\n       hard and soft matching options yield a partial match.\n\n       Example  2: if the pattern is /ab+/ and the subject is \"ab\", a complete\n       match can be found, but the addition of more  characters  might  change\n       what  is  matched. In this case, only PCRE2_PARTIAL_HARD returns a par-\n       tial match; PCRE2_PARTIAL_SOFT returns the complete match.\n\n       On reaching the end of the subject, when PCRE2_PARTIAL_HARD is set,  if\n       the next pattern item is \\z, \\Z, \\b, \\B, or $ there is always a partial\n       match.   Otherwise, for both options, the next pattern item must be one\n       that inspects a character, and at least one of the  following  must  be\n       true:\n\n       (1)  At  least  one  character has already been inspected. An inspected\n       character need not form part of the final  matched  string;  lookbehind\n       assertions  and the \\K escape sequence provide ways of inspecting char-\n       acters before the start of a matched string.\n\n       (2) The pattern contains one or more lookbehind assertions. This condi-\n       tion exists in case there is a lookbehind that inspects characters  be-\n       fore the start of the match.\n\n       (3)  There  is a special case when the whole pattern can match an empty\n       string.  When the starting point is at the  end  of  the  subject,  the\n       empty  string  match is a possibility, and if PCRE2_PARTIAL_SOFT is set\n       and neither of the above conditions is true, it is  returned.  However,\n       because  adding  more  characters  might  result  in a non-empty match,\n       PCRE2_PARTIAL_HARD returns a partial match, which in  this  case  means\n       \"there  is going to be a match at this point, but until some more char-\n       acters are added, we do not know if it will be an empty string or some-\n       thing longer\".\n\n\nPARTIAL MATCHING USING pcre2_match()\n\n       When  a  partial  matching  option  is  set,  the  result  of   calling\n       pcre2_match() can be one of the following:\n\n       A successful match\n         A complete match has been found, starting and ending within this sub-\n         ject.\n\n       PCRE2_ERROR_NOMATCH\n         No match can start anywhere in this subject.\n\n       PCRE2_ERROR_PARTIAL\n         Adding  more  characters may result in a complete match that uses one\n         or more characters from the end of this subject.\n\n       When a partial match is returned, the first two elements in the ovector\n       point to the portion of the subject that was matched, but the values in\n       the rest of the ovector are undefined. The appearance of \\K in the pat-\n       tern has no effect for a partial match. Consider this pattern:\n\n         /abc\\K123/\n\n       If it is matched against \"456abc123xyz\" the result is a complete match,\n       and the ovector defines the matched string as \"123\", because \\K  resets\n       the  \"start  of  match\" point. However, if a partial match is requested\n       and the subject string is \"456abc12\", a partial match is found for  the\n       string  \"abc12\",  because  all these characters are needed for a subse-\n       quent re-match with additional characters.\n\n       If there is more than one partial match, the first one that  was  found\n       provides the data that is returned. Consider this pattern:\n\n         /123\\w+X|dogY/\n\n       If  this is matched against the subject string \"abc123dog\", both alter-\n       natives fail to match, but the end of the  subject  is  reached  during\n       matching,  so PCRE2_ERROR_PARTIAL is returned. The offsets are set to 3\n       and 9, identifying \"123dog\" as the first partial match. (In this  exam-\n       ple,  there are two partial matches, because \"dog\" on its own partially\n       matches the second alternative.)\n\n   How a partial match is processed by pcre2_match()\n\n       What happens when a partial match is identified depends on which of the\n       two partial matching options is set.\n\n       If PCRE2_PARTIAL_HARD is set, PCRE2_ERROR_PARTIAL is returned  as  soon\n       as  a partial match is found, without continuing to search for possible\n       complete matches. This option is \"hard\" because it prefers  an  earlier\n       partial match over a later complete match. For this reason, the assump-\n       tion  is  made  that  the end of the supplied subject string is not the\n       true end of the available data, which is why \\z, \\Z, \\b, \\B, and $  al-\n       ways give a partial match.\n\n       If  PCRE2_PARTIAL_SOFT  is  set,  the  partial match is remembered, but\n       matching continues as normal, and other alternatives in the pattern are\n       tried. If no complete match can be found,  PCRE2_ERROR_PARTIAL  is  re-\n       turned instead of PCRE2_ERROR_NOMATCH. This option is \"soft\" because it\n       prefers a complete match over a partial match. All the various matching\n       items  in a pattern behave as if the subject string is potentially com-\n       plete; \\z, \\Z, and $ match at the end of the subject,  as  normal,  and\n       for \\b and \\B the end of the subject is treated as a non-alphanumeric.\n\n       The  difference  between the two partial matching options can be illus-\n       trated by a pattern such as:\n\n         /dog(sbody)?/\n\n       This matches either \"dog\" or \"dogsbody\", greedily (that is, it  prefers\n       the  longer  string  if  possible). If it is matched against the string\n       \"dog\" with PCRE2_PARTIAL_SOFT, it yields a complete  match  for  \"dog\".\n       However,  if  PCRE2_PARTIAL_HARD is set, the result is PCRE2_ERROR_PAR-\n       TIAL. On the other hand, if the pattern is made ungreedy the result  is\n       different:\n\n         /dog(sbody)??/\n\n       In  this  case  the  result  is always a complete match because that is\n       found first, and matching never  continues  after  finding  a  complete\n       match. It might be easier to follow this explanation by thinking of the\n       two patterns like this:\n\n         /dog(sbody)?/    is the same as  /dogsbody|dog/\n         /dog(sbody)??/   is the same as  /dog|dogsbody/\n\n       The  second pattern will never match \"dogsbody\", because it will always\n       find the shorter match first.\n\n   Example of partial matching using pcre2test\n\n       The pcre2test data modifiers partial_hard (or ph) and partial_soft  (or\n       ps)  set  PCRE2_PARTIAL_HARD and PCRE2_PARTIAL_SOFT, respectively, when\n       calling pcre2_match(). Here is a run of pcre2test using a pattern  that\n       matches the whole subject in the form of a date:\n\n           re> /^\\d?\\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\d\\d$/\n         data> 25dec3\\=ph\n         Partial match: 23dec3\n         data> 3ju\\=ph\n         Partial match: 3ju\n         data> 3juj\\=ph\n         No match\n\n       This  example  gives  the  same  results for both hard and soft partial\n       matching options. Here is an example where there is a difference:\n\n           re> /^\\d?\\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\d\\d$/\n         data> 25jun04\\=ps\n          0: 25jun04\n          1: jun\n         data> 25jun04\\=ph\n         Partial match: 25jun04\n\n       With  PCRE2_PARTIAL_SOFT,  the  subject  is  matched  completely.   For\n       PCRE2_PARTIAL_HARD, however, the subject is assumed not to be complete,\n       so there is only a partial match.\n\n\nMULTI-SEGMENT MATCHING WITH pcre2_match()\n\n       PCRE  was  not originally designed with multi-segment matching in mind.\n       However, over time, features (including  partial  matching)  that  make\n       multi-segment matching possible have been added. A very long string can\n       be  searched  segment  by  segment by calling pcre2_match() repeatedly,\n       with the aim of achieving the same results that would happen if the en-\n       tire string was available for searching all  the  time.  Normally,  the\n       strings  that  are  being  sought are much shorter than each individual\n       segment, and are in the middle of very long strings, so the pattern  is\n       normally not anchored.\n\n       Special  logic  must  be implemented to handle a matched substring that\n       spans a segment boundary. PCRE2_PARTIAL_HARD should be used, because it\n       returns a partial match at the end of a segment whenever there  is  the\n       possibility  of  changing  the  match  by  adding  more characters. The\n       PCRE2_NOTBOL option should also be set for all but the first segment.\n\n       When a partial match occurs, the next segment must be added to the cur-\n       rent subject and the match re-run, using the  startoffset  argument  of\n       pcre2_match()  to  begin  at the point where the partial match started.\n       For example:\n\n           re> /\\d?\\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\d\\d/\n         data> ...the date is 23ja\\=ph\n         Partial match: 23ja\n         data> ...the date is 23jan19 and on that day...\\=offset=15\n          0: 23jan19\n          1: jan\n\n       Note the use of the offset modifier to start the new  match  where  the\n       partial match was found. In this example, the next segment was added to\n       the  one  in  which  the  partial  match  was  found.  This is the most\n       straightforward approach, typically using a memory buffer that is twice\n       the size of each segment. After a partial match, the first half of  the\n       buffer  is  discarded,  the  second  half  is moved to the start of the\n       buffer, and a new segment is added before repeating the match as in the\n       example above. After a no match, the entire buffer can be discarded.\n\n       If there are memory constraints, you may want to discard text that pre-\n       cedes a partial match before adding the  next  segment.  Unfortunately,\n       this  is  not  at  present straightforward. In cases such as the above,\n       where the pattern does not contain any lookbehinds, it is sufficient to\n       retain only the partially matched substring. However,  if  the  pattern\n       contains  a  lookbehind assertion, characters that precede the start of\n       the partial match may have been inspected during the matching  process.\n       When  pcre2test displays a partial match, it indicates these characters\n       with '<' if the allusedtext modifier is set:\n\n           re> \"(?<=123)abc\"\n         data> xx123ab\\=ph,allusedtext\n         Partial match: 123ab\n                        <<<\n\n       However, the allusedtext modifier is not available  for  JIT  matching,\n       because  JIT  matching  does  not  record the first (or last) consulted\n       characters.  For this reason, this information is not available via the\n       API. It is therefore not possible in general to obtain the exact number\n       of characters that must be retained in order to get the right match re-\n       sult. If you cannot retain the  entire  segment,  you  must  find  some\n       heuristic way of choosing.\n\n       If  you know the approximate length of the matching substrings, you can\n       use that to decide how much text to retain. The only lookbehind  infor-\n       mation  that  is  currently  available via the API is the length of the\n       longest individual lookbehind in a pattern, but this can be  misleading\n       if  there  are  nested  lookbehinds.  The  value  returned  by  calling\n       pcre2_pattern_info() with the PCRE2_INFO_MAXLOOKBEHIND  option  is  the\n       maximum number of characters (not code units) that any individual look-\n       behind   moves   back   when   it  is  processed.  A  pattern  such  as\n       \"(?<=(?<!b)a)\" has a maximum lookbehind value of one, but inspects  two\n       characters before its starting point.\n\n       In  a  non-UTF or a 32-bit case, moving back is just a subtraction, but\n       in UTF-8 or UTF-16 you have  to  count  characters  while  moving  back\n       through the code units.\n\n\nPARTIAL MATCHING USING pcre2_dfa_match()\n\n       The DFA function moves along the subject string character by character,\n       without  backtracking,  searching  for  all possible matches simultane-\n       ously. If the end of the subject is reached before the end of the  pat-\n       tern, there is the possibility of a partial match.\n\n       When PCRE2_PARTIAL_SOFT is set, PCRE2_ERROR_PARTIAL is returned only if\n       there  have  been  no complete matches. Otherwise, the complete matches\n       are returned.  If PCRE2_PARTIAL_HARD is  set,  a  partial  match  takes\n       precedence  over  any  complete matches. The portion of the string that\n       was matched when the longest partial match was  found  is  set  as  the\n       first matching string.\n\n       Because  the DFA function always searches for all possible matches, and\n       there is no difference between greedy and ungreedy repetition, its  be-\n       haviour  is different from the pcre2_match(). Consider the string \"dog\"\n       matched against this ungreedy pattern:\n\n         /dog(sbody)??/\n\n       Whereas the standard function stops as soon as it  finds  the  complete\n       match  for  \"dog\",  the  DFA  function also finds the partial match for\n       \"dogsbody\", and so returns that when PCRE2_PARTIAL_HARD is set.\n\n\nMULTI-SEGMENT MATCHING WITH pcre2_dfa_match()\n\n       When a partial match has been found using the DFA matching function, it\n       is possible to continue the match by providing additional subject  data\n       and  calling  the function again with the same compiled regular expres-\n       sion, this time setting the PCRE2_DFA_RESTART option. You must pass the\n       same working space as before, because this is where details of the pre-\n       vious partial match are stored. You can set the  PCRE2_PARTIAL_SOFT  or\n       PCRE2_PARTIAL_HARD  options  with PCRE2_DFA_RESTART to continue partial\n       matching over multiple segments. Here is an example using pcre2test:\n\n           re> /^\\d?\\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\d\\d$/\n         data> 23ja\\=dfa,ps\n         Partial match: 23ja\n         data> n05\\=dfa,dfa_restart\n          0: n05\n\n       The first call has \"23ja\" as the subject, and requests  partial  match-\n       ing;  the  second  call  has  \"n05\"  as  the  subject for the continued\n       (restarted) match.  Notice that when the match is  complete,  only  the\n       last  part  is  shown;  PCRE2 does not retain the previously partially-\n       matched string. It is up to the calling program to do that if it  needs\n       to.  This  means  that, for an unanchored pattern, if a continued match\n       fails, it is not possible to try again at a  new  starting  point.  All\n       this facility is capable of doing is continuing with the previous match\n       attempt. For example, consider this pattern:\n\n         1234|3789\n\n       If  the  first  part of the subject is \"ABC123\", a partial match of the\n       first alternative is found at offset 3. There is no partial  match  for\n       the second alternative, because such a match does not start at the same\n       point  in  the  subject  string. Attempting to continue with the string\n       \"7890\" does not yield a match  because  only  those  alternatives  that\n       match  at one point in the subject are remembered. Depending on the ap-\n       plication, this may or may not be what you want.\n\n       If you do want to allow for starting again at the next  character,  one\n       way  of  doing it is to retain some or all of the segment and try a new\n       complete match, as described for pcre2_match() above. Another possibil-\n       ity is to work with two buffers. If a partial match at offset n in  the\n       first  buffer  is followed by \"no match\" when PCRE2_DFA_RESTART is used\n       on the second buffer, you can then try a new match starting  at  offset\n       n+1 in the first buffer.\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 27 November 2024\n       Copyright (c) 1997-2019 University of Cambridge.\n\n\nPCRE2 10.48-DEV                27 November 2024                PCRE2PARTIAL(3)\n------------------------------------------------------------------------------\n\n\nPCRE2PATTERN(3)            Library Functions Manual            PCRE2PATTERN(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nPCRE2 REGULAR EXPRESSION DETAILS\n\n       The  syntax and semantics of the regular expressions that are supported\n       by PCRE2 are described in detail below. There is a quick-reference syn-\n       tax summary in the pcre2syntax page. PCRE2 tries to match  Perl  syntax\n       and  semantics as closely as it can.  PCRE2 also supports some alterna-\n       tive regular expression syntax that does not  conflict  with  the  Perl\n       syntax  in order to provide some compatibility with regular expressions\n       in Python, .NET, and Oniguruma. There are in addition some options that\n       enable alternative syntax and semantics that are not  the  same  as  in\n       Perl.\n\n       Perl's  regular expressions are described in its own documentation, and\n       regular expressions in general are covered in a number of  books,  some\n       of which have copious examples. Jeffrey Friedl's \"Mastering Regular Ex-\n       pressions\",  published by O'Reilly, covers regular expressions in great\n       detail. This description of PCRE2's regular expressions is intended  as\n       reference material.\n\n       This  document  discusses the regular expression patterns that are sup-\n       ported by PCRE2 when its  main  matching  function,  pcre2_match(),  is\n       used.    PCRE2    also    has   an   alternative   matching   function,\n       pcre2_dfa_match(), which matches using a different  algorithm  that  is\n       not  Perl-compatible.  Some  of  the  features  discussed below are not\n       available when DFA matching is used. The advantages  and  disadvantages\n       of  the  alternative function, and how it differs from the normal func-\n       tion, are discussed in the pcre2matching page.\n\n\nEBCDIC CHARACTER CODES\n\n       Most computers use ASCII or Unicode for encoding characters, and  PCRE2\n       assumes this by default. However, it can be compiled to run in an envi-\n       ronment that uses the EBCDIC code, which is the case for some IBM main-\n       frame  operating  systems. In the sections below, character code values\n       are ASCII or Unicode; in an EBCDIC  environment  these  characters  may\n       have  different  code values, and there are no code points greater than\n       255. Differences in behaviour when PCRE2 is running in an EBCDIC  envi-\n       ronment are described in the section \"EBCDIC environments\" below, which\n       you can ignore unless you really are in an EBCDIC environment.\n\n\nSPECIAL START-OF-PATTERN ITEMS\n\n       A  number  of options that can be passed to pcre2_compile() can also be\n       set by special items at the start of a pattern. These are not Perl-com-\n       patible, but are provided to make these options accessible  to  pattern\n       writers  who are not able to change the program that processes the pat-\n       tern. Any number of these items may appear, but they must  all  be  to-\n       gether  right  at the start of the pattern string, and the letters must\n       be in upper case.\n\n   UTF support\n\n       In the 8-bit and 16-bit PCRE2 libraries, characters may be coded either\n       as single code units, or as multiple UTF-8 or UTF-16 code units. UTF-32\n       can be specified for the 32-bit library, in which  case  it  constrains\n       the  character  values  to  valid  Unicode  code points. To process UTF\n       strings, PCRE2 must be built to include Unicode support (which  is  the\n       default).  When  using  UTF  strings you must either call the compiling\n       function with one or both of the PCRE2_UTF  or  PCRE2_MATCH_INVALID_UTF\n       options,  or  the  pattern must start with the special sequence (*UTF),\n       which is equivalent to setting the relevant PCRE2_UTF.  How  setting  a\n       UTF mode affects pattern matching is mentioned in several places below.\n       There is also a summary of features in the pcre2unicode page.\n\n       Some applications that allow their users to supply patterns may wish to\n       restrict   them   to   non-UTF   data  for  security  reasons.  If  the\n       PCRE2_NEVER_UTF option is passed to pcre2_compile(), (*UTF) is not  al-\n       lowed, and its appearance in a pattern causes an error.\n\n   Unicode property support\n\n       Another  special  sequence that may appear at the start of a pattern is\n       (*UCP).  This has the same effect as setting the PCRE2_UCP  option:  it\n       causes  sequences such as \\d and \\w to use Unicode properties to deter-\n       mine character types, instead of recognizing only characters with codes\n       less than 256 via a lookup table. If also causes upper/lower casing op-\n       erations to use Unicode properties  for  characters  with  code  points\n       greater  than  127,  even when UTF is not set.  These behaviours can be\n       changed within the pattern; see the section entitled  \"Internal  Option\n       Setting\" below.\n\n       Some applications that allow their users to supply patterns may wish to\n       restrict  them  for  security reasons. If the PCRE2_NEVER_UCP option is\n       passed to pcre2_compile(), (*UCP) is not allowed, and its appearance in\n       a pattern causes an error.\n\n   Locking out empty string matching\n\n       Starting a pattern with (*NOTEMPTY) or (*NOTEMPTY_ATSTART) has the same\n       effect as passing the PCRE2_NOTEMPTY or  PCRE2_NOTEMPTY_ATSTART  option\n       to whichever matching function is subsequently called to match the pat-\n       tern.  These options lock out the matching of empty strings, either en-\n       tirely, or only at the start of the subject.\n\n   Disabling auto-possessification\n\n       If a pattern starts with (*NO_AUTO_POSSESS), it has the same effect  as\n       setting  the  PCRE2_NO_AUTO_POSSESS  option, or calling pcre2_set_opti-\n       mize() with a PCRE2_AUTO_POSSESS_OFF directive. This stops  PCRE2  from\n       making  quantifiers  possessive  when what follows cannot match the re-\n       peated item. For example, by default a+b is treated as a++b.  For  more\n       details, see the pcre2api documentation.\n\n   Disabling start-up optimizations\n\n       If  a  pattern  starts  with (*NO_START_OPT), it has the same effect as\n       setting the PCRE2_NO_START_OPTIMIZE option, or calling  pcre2_set_opti-\n       mize() with a PCRE2_START_OPTIMIZE_OFF directive. This disables several\n       optimizations  for  quickly  reaching  \"no match\" results. For more de-\n       tails, see the pcre2api documentation.\n\n   Disabling automatic anchoring\n\n       If a pattern starts with (*NO_DOTSTAR_ANCHOR), it has the  same  effect\n       as setting the PCRE2_NO_DOTSTAR_ANCHOR option, or calling pcre2_set_op-\n       timize()  with a PCRE2_DOTSTAR_ANCHOR_OFF directive.  This disables op-\n       timizations that apply to patterns whose top-level branches  all  start\n       with  .*  (match any number of arbitrary characters). For more details,\n       see the pcre2api documentation.\n\n   Disabling JIT compilation\n\n       If a pattern that starts with (*NO_JIT) is  successfully  compiled,  an\n       attempt  by  the  application  to apply the JIT optimization by calling\n       pcre2_jit_compile() is ignored.\n\n   Setting match resource limits\n\n       The pcre2_match() function contains a counter that is incremented every\n       time it goes round its main loop. The caller of pcre2_match() can set a\n       limit on this counter, which therefore limits the amount  of  computing\n       resource used for a match. The maximum depth of nested backtracking can\n       also  be  limited;  this indirectly restricts the amount of heap memory\n       that is used, but there is also an explicit memory limit  that  can  be\n       set.\n\n       These  facilities  are  provided to catch runaway matches that are pro-\n       voked by patterns with huge matching trees. A common example is a  pat-\n       tern  with  nested unlimited repeats applied to a long string that does\n       not match. When one of these limits is reached, pcre2_match() gives  an\n       error  return.  The limits can also be set by items at the start of the\n       pattern of the form\n\n         (*LIMIT_HEAP=d)\n         (*LIMIT_MATCH=d)\n         (*LIMIT_DEPTH=d)\n\n       where d is any number of decimal digits. However, the value of the set-\n       ting must be less than the value set (or defaulted) by  the  caller  of\n       pcre2_match()  for  it  to have any effect. In other words, the pattern\n       writer can lower the limits set by the programmer, but not raise  them.\n       If  there  is  more  than one setting of one of these limits, the lower\n       value is used. The heap limit is specified in kibibytes (units of  1024\n       bytes).\n\n       Prior  to  release  10.30, LIMIT_DEPTH was called LIMIT_RECURSION. This\n       name is still recognized for backwards compatibility.\n\n       The heap limit applies only when the pcre2_match() or pcre2_dfa_match()\n       interpreters are used for matching. It does not apply to JIT. The match\n       limit is used (but in a different way) when JIT is being used, or  when\n       pcre2_dfa_match() is called, to limit computing resource usage by those\n       matching  functions.  The depth limit is ignored by JIT but is relevant\n       for DFA matching, which uses function recursion for  recursions  within\n       the  pattern  and  for lookaround assertions and atomic groups. In this\n       case, the depth limit controls the depth of such recursion.\n\n   Newline conventions\n\n       PCRE2 supports six different conventions for indicating line breaks  in\n       strings:  a  single  CR (carriage return) character, a single LF (line-\n       feed) character, the two-character sequence CRLF, any of the three pre-\n       ceding, any Unicode newline sequence,  or  the  NUL  character  (binary\n       zero).  The  pcre2api  page  has further discussion about newlines, and\n       shows how to set the newline convention when calling pcre2_compile().\n\n       It is also possible to specify a newline convention by starting a  pat-\n       tern string with one of the following sequences:\n\n         (*CR)        carriage return\n         (*LF)        linefeed\n         (*CRLF)      carriage return, followed by linefeed\n         (*ANYCRLF)   any of the three above\n         (*ANY)       all Unicode newline sequences\n         (*NUL)       the NUL character (binary zero)\n\n       These override the default and the options given to the compiling func-\n       tion. For example, on a Unix system where LF is the default newline se-\n       quence, the pattern\n\n         (*CR)a.b\n\n       changes the convention to CR. That pattern matches \"a\\nb\" because LF is\n       no longer a newline. If more than one of these settings is present, the\n       last one is used.\n\n       The  newline  convention affects where the circumflex and dollar asser-\n       tions are true. It also affects the interpretation of the dot metachar-\n       acter when PCRE2_DOTALL is not set, and the behaviour of  \\N  when  not\n       followed  by  an opening brace. However, it does not affect what the \\R\n       escape sequence matches. By default, this is any  Unicode  newline  se-\n       quence,  for  Perl compatibility. However, this can be changed; see the\n       next section and the description of \\R in the section entitled \"Newline\n       sequences\" below. A change of \\R setting can be combined with a  change\n       of newline convention.\n\n   Specifying what \\R matches\n\n       It is possible to restrict \\R to match only CR, LF, or CRLF (instead of\n       the  complete  set  of  Unicode  line  endings)  by  setting the option\n       PCRE2_BSR_ANYCRLF at compile time. This effect can also be achieved  by\n       starting  a  pattern  with (*BSR_ANYCRLF). For completeness, (*BSR_UNI-\n       CODE) is also recognized, corresponding to PCRE2_BSR_UNICODE.\n\n\nCHARACTERS AND METACHARACTERS\n\n       A regular expression is a pattern that is  matched  against  a  subject\n       string  from  left  to right. Most characters stand for themselves in a\n       pattern, and match the corresponding characters in the  subject.  As  a\n       trivial example, the pattern\n\n         The quick brown fox\n\n       matches a portion of a subject string that is identical to itself. When\n       caseless  matching  is  specified  (the  PCRE2_CASELESS  option or (?i)\n       within the pattern), letters are matched independently  of  case.  Note\n       that  there  are  two  ASCII  characters, K and S, that, in addition to\n       their lower case ASCII equivalents, are  case-equivalent  with  Unicode\n       U+212A  (Kelvin  sign)  and  U+017F  (long  S) respectively when either\n       PCRE2_UTF or PCRE2_UCP is set, unless the PCRE2_EXTRA_CASELESS_RESTRICT\n       option is in force (either passed to pcre2_compile() or set by  (*CASE-\n       LESS_RESTRICT)  or  (?r)  within the pattern). If the PCRE2_EXTRA_TURK-\n       ISH_CASING option is in force (either passed to pcre2_compile() or  set\n       by  (*TURKISH_CASING)  within  the  pattern),  then the 'i' letters are\n       matched according to Turkish and Azeri languages.\n\n       The power of regular expressions comes from the ability to include wild\n       cards, character classes, alternatives, and repetitions in the pattern.\n       These are encoded in the pattern by the use of metacharacters, which do\n       not stand for themselves but instead are interpreted  in  some  special\n       way.\n\n       There  are  two different sets of metacharacters: those that are recog-\n       nized anywhere in the pattern except within square brackets, and  those\n       that  are  recognized  within square brackets. Outside square brackets,\n       the metacharacters are as follows:\n\n         \\      general escape character with several uses\n         ^      assert start of string (or line, in multiline mode)\n         $      assert end of string (or line, in multiline mode)\n         .      match any character except newline (by default)\n         [      start character class definition\n         |      start of alternative branch\n         (      start group or control verb\n         )      end group or control verb\n         *      0 or more quantifier\n         +      1 or more quantifier; also \"possessive quantifier\"\n         ?      0 or 1 quantifier; also quantifier minimizer\n         {      potential start of min/max quantifier\n\n       Brace characters { and } are also used to enclose  data  for  construc-\n       tions  such  as  \\g{2} or \\k{name}. In almost all uses of braces, space\n       and/or horizontal tab characters that follow { or precede } are allowed\n       and are ignored. In the case of quantifiers, they may also  appear  be-\n       fore  or  after the comma. The exception to this is \\u{...} which is an\n       ECMAScript compatibility feature  that  is  recognized  only  when  the\n       PCRE2_EXTRA_ALT_BSUX  option  is  set.  ECMAScript does not ignore such\n       white space; it causes the item to be interpreted as literal.\n\n       Part of a pattern that is in square brackets  is  called  a  \"character\n       class\". In a character class the only metacharacters are:\n\n         \\      general escape character\n         ^      negate the class, but only if the first character\n         -      indicates character range\n         [      POSIX character class (if followed by POSIX syntax)\n         ]      terminates the character class\n\n       If  a  pattern  is  compiled with the PCRE2_EXTENDED option, most white\n       space in the pattern, other than in a character class, within a \\Q...\\E\n       sequence, or between a # outside a character class and  the  next  new-\n       line,  inclusive,  is ignored. An escaping backslash can be used to in-\n       clude a white space or a # character as part of  the  pattern.  If  the\n       PCRE2_EXTENDED_MORE  option  is  set, the same applies, but in addition\n       unescaped space and horizontal tab  characters  are  ignored  inside  a\n       character  class.  Note: only these two characters are ignored, not the\n       full set of pattern white space characters that are ignored  outside  a\n       character  class.  Option settings can be changed within a pattern; see\n       the section entitled \"Internal Option Setting\" below.\n\n       The following sections describe the use of each of the metacharacters.\n\n\nBACKSLASH\n\n       The backslash character has several uses. Firstly, if it is followed by\n       a character that is not a digit or a letter, it takes away any  special\n       meaning  that  character  may  have. This use of backslash as an escape\n       character applies both inside and outside character classes.\n\n       For example, if you want to match a * character, you must write  \\*  in\n       the  pattern. This escaping action applies whether or not the following\n       character would otherwise be interpreted as a metacharacter, so  it  is\n       always  safe  to  precede  a non-alphanumeric with backslash to specify\n       that it stands for itself.  In particular, if you want to match a back-\n       slash, you write \\\\.\n\n       Only ASCII digits and letters have any special meaning  after  a  back-\n       slash. All other characters (in particular, those whose code points are\n       greater than 127) are treated as literals.\n\n       If  you want to treat all characters in a sequence as literals, you can\n       do so by putting them between \\Q and \\E. Note that this includes  white\n       space  even  when  the  PCRE2_EXTENDED option is set so that most other\n       white space is ignored. The behaviour is different from Perl in that  $\n       and @ are handled as literals in \\Q...\\E sequences in PCRE2, whereas in\n       Perl,  $  and  @ cause variable interpolation. Also, Perl does \"double-\n       quotish backslash interpolation\" on any backslashes between \\Q  and  \\E\n       which,  its  documentation says, \"may lead to confusing results\". PCRE2\n       treats a backslash between \\Q and \\E just  like  any  other  character.\n       Note the following examples:\n\n         Pattern            PCRE2 matches   Perl matches\n\n         \\Qabc$xyz\\E        abc$xyz        abc followed by the\n                                             contents of $xyz\n         \\Qabc\\$xyz\\E       abc\\$xyz       abc\\$xyz\n         \\Qabc\\E\\$\\Qxyz\\E   abc$xyz        abc$xyz\n         \\QA\\B\\E            A\\B            A\\B\n         \\Q\\\\E              \\              \\\\E\n\n       The  \\Q...\\E  sequence  is recognized both inside and outside character\n       classes.  An isolated \\E that is not preceded by \\Q is ignored.  If  \\Q\n       is  not followed by \\E later in the pattern, the literal interpretation\n       continues to the end of the pattern (that is,  \\E  is  assumed  at  the\n       end).  If  the  isolated \\Q is inside a character class, this causes an\n       error, because the character class is then not terminated by a  closing\n       square bracket.\n\n       Another  difference from Perl is that any appearance of \\Q or \\E inside\n       what might otherwise be a quantifier causes PCRE2 not to recognize  the\n       sequence as a quantifier. Perl recognizes a quantifier if (redundantly)\n       either  of  the  numbers  is  inside \\Q...\\E, but not if the separating\n       comma is. When not recognized  as  a  quantifier  a  sequence  such  as\n       {\\Q1\\E,2} is treated as the literal string \"{1,2}\".\n\n   Non-printing characters\n\n       A second use of backslash provides a way of encoding non-printing char-\n       acters  in patterns in a visible manner. There is no restriction on the\n       appearance of non-printing characters in a pattern, but when a  pattern\n       is being prepared by text editing, it is often easier to use one of the\n       following  escape  sequences  instead of the binary character it repre-\n       sents. In an ASCII or Unicode environment, these escapes  are  as  fol-\n       lows:\n\n         \\a          alarm, that is, the BEL character (hex 07)\n         \\cx         \"control-x\", where x is a non-control ASCII character\n         \\e          escape (hex 1B)\n         \\f          form feed (hex 0C)\n         \\n          linefeed (hex 0A)\n         \\r          carriage return (hex 0D) (but see below)\n         \\t          tab (hex 09)\n         \\0dd        character with octal code 0dd\n         \\ddd        character with octal code ddd, or back reference\n         \\o{ddd..}   character with octal code ddd..\n         \\xhh        character with hex code hh\n         \\x{hhh..}   character with hex code hhh..\n         \\N{U+hhh..} character with Unicode hex code point hhh..\n\n       A description of how back references work is given later, following the\n       discussion of parenthesized groups.\n\n       By  default, after \\x that is not followed by {, one or two hexadecimal\n       digits are read (letters can be in upper or lower case). If the charac-\n       ter that follows \\x is neither { nor a hexadecimal digit, an error  oc-\n       curs.  This is different from Perl's default behaviour, which generates\n       a NUL character, but is in line with the behaviour of  Perl's  'strict'\n       mode in re.\n\n       Any  number  of  hexadecimal  digits may appear between \\x{ and }. If a\n       character other than a hexadecimal digit appears between \\x{ and },  or\n       if there is no terminating }, an error occurs.\n\n       Characters whose code points are less than 256 can be defined by either\n       of the two syntaxes for \\x or by an octal sequence. There is no differ-\n       ence in the way they are handled. For example, \\xdc is exactly the same\n       as  \\x{dc}  or \\334.  However, using the braced versions does make such\n       sequences easier to read.\n\n       Support is available for some ECMAScript (aka  JavaScript)  escape  se-\n       quences via two compile-time options. If PCRE2_ALT_BSUX is set, the se-\n       quence  \\x  followed  by { is not recognized. Only if \\x is followed by\n       two hexadecimal digits is it recognized as a character  escape.  Other-\n       wise  it  is interpreted as a literal \"x\" character. In this mode, sup-\n       port for code points greater than 256 is provided by \\u, which must  be\n       followed  by  four hexadecimal digits; otherwise it is interpreted as a\n       literal \"u\" character.\n\n       PCRE2_EXTRA_ALT_BSUX has the same effect as PCRE2_ALT_BSUX and, in  ad-\n       dition, \\u{hhh..} is recognized as the character specified by hexadeci-\n       mal code point.  There may be any number of hexadecimal digits, but un-\n       like  other places that also use curly brackets, spaces are not allowed\n       and would result in the string being interpreted  as  a  literal.  This\n       syntax is from ECMAScript 6.\n\n       The  \\N{U+hhh..} escape sequence is recognized only when PCRE2 is oper-\n       ating in UTF mode. Perl also uses \\N{name}  to  specify  characters  by\n       Unicode  name;  PCRE2  does  not support this. Note that when \\N is not\n       followed by an opening brace (curly bracket) it has an entirely differ-\n       ent meaning, matching any character that is not a newline.\n\n       There are some legacy applications where the escape sequence \\r is  ex-\n       pected  to  match a newline. If the PCRE2_EXTRA_ESCAPED_CR_IS_LF option\n       is set, \\r in a pattern is converted to \\n so  that  it  matches  a  LF\n       (linefeed) instead of a CR (carriage return) character.\n\n       An  error  occurs if \\c is not followed by a character whose ASCII code\n       point is in the range 32 to 126. The precise effect of \\cx is  as  fol-\n       lows:  if x is a lower case letter, it is converted to upper case. Then\n       bit 6 of the character (hex 40) is inverted. Thus \\cA to \\cZ become hex\n       01 to hex 1A (A is 41, Z is 5A), but \\c{ becomes hex 3B ({ is 7B),  and\n       \\c;  becomes hex 7B (; is 3B). If the code unit following \\c has a code\n       point less than 32 or greater than 126, a compile-time error occurs.\n\n       For differences in the way some escapes behave in EBCDIC  environments,\n       see section \"EBCDIC environments\" below.\n\n   Octal escapes and back references\n\n       The  escape \\o must be followed by a sequence of octal digits, enclosed\n       in braces. An error occurs if this is not the case.  This  escape  pro-\n       vides  a  way  of  specifying  character  code  points as octal numbers\n       greater than 0777, and it also allows octal numbers and  backreferences\n       to be unambiguously distinguished.\n\n       If  braces  are  not  used, after \\0 up to two further octal digits are\n       read.  However, if the PCRE2_EXTRA_NO_BS0 option is set, at  least  one\n       more  octal digit must follow \\0 (use \\00 to generate a NUL character).\n       Make sure you supply two digits after the initial zero if  the  pattern\n       character that follows is itself an octal digit.\n\n       Inside  a  character  class,  when a backslash is followed by any octal\n       digit, up to three octal digits are read to generate a code point.  Any\n       subsequent  digits  stand  for  themselves. The sequences \\8 and \\9 are\n       treated as the literal characters \"8\" and \"9\".\n\n       Outside a character class, Perl's handling of a backslash followed by a\n       digit other than 0 is complicated by ambiguity, and  Perl  has  changed\n       over time, causing PCRE2 also to change. From PCRE2 release 10.45 there\n       is  an  option called PCRE2_EXTRA_PYTHON_OCTAL that causes PCRE2 to use\n       Python's unambiguous rules. The next two subsections describe  the  two\n       sets of rules.\n\n       For greater clarity and unambiguity, it is best to avoid following \\ by\n       a  digit  greater than zero. Instead, use \\o{...} or \\x{...} to specify\n       numerical character code points, and \\g{...} to specify backreferences.\n\n   Perl rules for non-class backslash 1-9\n\n       All the digits that follow the backslash are read as a decimal  number.\n       If  the  number  is  less  than 10, begins with the digit 8 or 9, or if\n       there are at least that many previous capture groups in the expression,\n       the entire sequence is taken as a  back  reference.  Otherwise,  up  to\n       three octal digits are read to form a character code. For example:\n\n         \\040   is another way of writing an ASCII space\n         \\40    is the same, provided there are fewer than 40\n                   previous capture groups\n         \\7     is always a backreference\n         \\11    might be a backreference, or another way of\n                   writing a tab\n         \\011   is always a tab\n         \\0113  is a tab followed by the character \"3\"\n         \\113   might be a backreference, otherwise the\n                   character with octal code 113\n         \\377   might be a backreference, otherwise\n                   the value 255 (decimal)\n         \\81    is always a backreference\n\n       Note  that octal values of 100 or greater that are specified using this\n       syntax must not be introduced by a leading zero, because no  more  than\n       three octal digits are ever read.\n\n   Python rules for non_class backslash 1-9\n\n       If  there  are at least three octal digits after the backslash, exactly\n       three are read as an octal code point number, but the value must be  no\n       greater  than  \\377,  even  in modes where higher code point values are\n       supported. Any subsequent digits stand for  themselves.  If  there  are\n       fewer  than three octal digits, the sequence is taken as a decimal back\n       reference. Thus, for example, \\12 is always a back reference,  indepen-\n       dent  of how many captures there are in the pattern. An error is gener-\n       ated for a reference to a non-existent capturing group.\n\n   Constraints on character values\n\n       Characters that are specified using octal or  hexadecimal  numbers  are\n       limited to certain values, as follows:\n\n         8-bit non-UTF mode    no greater than 0xff\n         16-bit non-UTF mode   no greater than 0xffff\n         32-bit non-UTF mode   no greater than 0xffffffff\n         All UTF modes         no greater than 0x10ffff and a valid code point\n\n       Invalid Unicode code points are all those in the range 0xd800 to 0xdfff\n       (the  so-called  \"surrogate\"  code  points). The check for these can be\n       disabled by  the  caller  of  pcre2_compile()  by  setting  the  option\n       PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES.  However, this is possible only in\n       UTF-8 and UTF-32 modes, because these values are not  representable  in\n       UTF-16.\n\n   Escape sequences in character classes\n\n       All the sequences that define a single character value can be used both\n       inside  and  outside character classes. In addition, inside a character\n       class, \\b is interpreted as the backspace character (hex 08).\n\n       When not followed by an opening brace, \\N is not allowed in a character\n       class.  \\B, \\R, and \\X are not special inside a character  class.  Like\n       other  unrecognized  alphabetic  escape sequences, they cause an error.\n       Outside a character class, these sequences have different meanings.\n\n   Unsupported escape sequences\n\n       In Perl, the sequences \\F, \\l, \\L, \\u, and \\U  are  recognized  by  its\n       string  handler and used to modify the case of following characters. By\n       default, PCRE2 does not support these  escape  sequences  in  patterns.\n       However,  if  either  of the PCRE2_ALT_BSUX or PCRE2_EXTRA_ALT_BSUX op-\n       tions is set, \\U matches a \"U\" character, and \\u can be used to  define\n       a character by code point, as described above.\n\n   Absolute and relative backreferences\n\n       The sequence \\g followed by a signed or unsigned number, optionally en-\n       closed  in  braces,  is  an absolute or relative backreference. A named\n       backreference can be coded as \\g{name}.  Backreferences  are  discussed\n       later, following the discussion of parenthesized groups.\n\n   Absolute and relative subroutine calls\n\n       For  compatibility with Oniguruma, the non-Perl syntax \\g followed by a\n       name or a number enclosed either in angle brackets or single quotes, is\n       an alternative syntax for referencing a capture group as a  subroutine.\n       Details  are  discussed  later.   Note  that  \\g{...} (Perl syntax) and\n       \\g<...> (Oniguruma syntax) are not synonymous. The former is a backref-\n       erence; the latter is a subroutine call.\n\n   Generic character types\n\n       Another use of backslash is for specifying generic character types:\n\n         \\d     any decimal digit\n         \\D     any character that is not a decimal digit\n         \\h     any horizontal white space character\n         \\H     any character that is not a horizontal white space character\n         \\N     any character that is not a newline\n         \\s     any white space character\n         \\S     any character that is not a white space character\n         \\v     any vertical white space character\n         \\V     any character that is not a vertical white space character\n         \\w     any \"word\" character\n         \\W     any \"non-word\" character\n\n       The \\N escape sequence has the same meaning as  the  \".\"  metacharacter\n       when  PCRE2_DOTALL is not set, but setting PCRE2_DOTALL does not change\n       the meaning of \\N. Note that when \\N is followed by an opening brace it\n       has a different meaning. See the section entitled \"Non-printing charac-\n       ters\" above for details. Perl also uses \\N{name} to specify  characters\n       by Unicode name; PCRE2 does not support this.\n\n       Each  pair of lower and upper case escape sequences partitions the com-\n       plete set of characters into two disjoint  sets.  Any  given  character\n       matches  one, and only one, of each pair. The sequences can appear both\n       inside and outside character classes. They each match one character  of\n       the  appropriate  type.  If the current matching point is at the end of\n       the subject string, all of them fail, because there is no character  to\n       match.\n\n       The  default  \\s  characters  are HT (9), LF (10), VT (11), FF (12), CR\n       (13), and space (32), which are defined as white space in the  \"C\"  lo-\n       cale.  This  list may vary if locale-specific matching is taking place.\n       For example, in some locales the \"non-breaking space\" character  (\\xA0)\n       is recognized as white space, and in others the VT character is not.\n\n       A  \"word\"  character is an underscore or any character that is a letter\n       or digit.  By default, the definition of letters  and  digits  is  con-\n       trolled by PCRE2's low-valued character tables, and may vary if locale-\n       specific matching is taking place (see \"Locale support\" in the pcre2api\n       page).  For  example,  in  a French locale such as \"fr_FR\" in Unix-like\n       systems, or \"french\" in Windows, some character codes greater than  127\n       are  used  for  accented letters, and these are then matched by \\w. The\n       use of locales with Unicode is discouraged.\n\n       By default, characters whose code points are  greater  than  127  never\n       match \\d, \\s, or \\w, and always match \\D, \\S, and \\W, although this may\n       be  different  for characters in the range 128-255 when locale-specific\n       matching is happening.  These escape sequences  retain  their  original\n       meanings  from  before  Unicode support was available, mainly for effi-\n       ciency reasons. If the  PCRE2_UCP  option  is  set,  the  behaviour  is\n       changed  so  that  Unicode  properties  are used to determine character\n       types, as follows:\n\n         \\d  any character that matches \\p{Nd} (decimal digit)\n         \\s  any character that matches \\p{Z} or \\h or \\v\n         \\w  any character that matches \\p{L}, \\p{N}, \\p{Mn}, or \\p{Pc}\n\n       The addition of \\p{Mn} (non-spacing mark) and the replacement of an ex-\n       plicit test for underscore with a test for \\p{Pc}  (connector  punctua-\n       tion) happened in PCRE2 release 10.43. This brings PCRE2 into line with\n       Perl.\n\n       The  upper case escapes match the inverse sets of characters. Note that\n       \\d matches only decimal digits, whereas \\w matches any  Unicode  digit,\n       as well as other character categories. Note also that PCRE2_UCP affects\n       \\b,  and  \\B  because  they are defined in terms of \\w and \\W. Matching\n       these sequences is noticeably slower when PCRE2_UCP is set.\n\n       The effect of PCRE2_UCP on any one of these  escape  sequences  can  be\n       negated  by  the  options PCRE2_EXTRA_ASCII_BSD, PCRE2_EXTRA_ASCII_BSS,\n       and PCRE2_EXTRA_ASCII_BSW, respectively. These options can be  set  and\n       reset  within a pattern by means of an internal option setting (see be-\n       low).\n\n       The sequences \\h, \\H, \\v, and \\V, in contrast to the  other  sequences,\n       which  match  only ASCII characters by default, always match a specific\n       list of code points, whether or not PCRE2_UCP is  set.  The  horizontal\n       space characters are:\n\n         U+0009     Horizontal tab (HT)\n         U+0020     Space\n         U+00A0     Non-break space\n         U+1680     Ogham space mark\n         U+180E     Mongolian vowel separator\n         U+2000     En quad\n         U+2001     Em quad\n         U+2002     En space\n         U+2003     Em space\n         U+2004     Three-per-em space\n         U+2005     Four-per-em space\n         U+2006     Six-per-em space\n         U+2007     Figure space\n         U+2008     Punctuation space\n         U+2009     Thin space\n         U+200A     Hair space\n         U+202F     Narrow no-break space\n         U+205F     Medium mathematical space\n         U+3000     Ideographic space\n\n       The vertical space characters are:\n\n         U+000A     Linefeed (LF)\n         U+000B     Vertical tab (VT)\n         U+000C     Form feed (FF)\n         U+000D     Carriage return (CR)\n         U+0085     Next line (NEL)\n         U+2028     Line separator\n         U+2029     Paragraph separator\n\n       In  8-bit,  non-UTF-8  mode,  only the characters with code points less\n       than 256 are relevant.\n\n   Newline sequences\n\n       Outside a character class, by default, the escape sequence  \\R  matches\n       any  Unicode newline sequence. In 8-bit non-UTF-8 mode \\R is equivalent\n       to the following:\n\n         (?>\\r\\n|\\n|\\x0b|\\f|\\r|\\x85)\n\n       This is an example of an \"atomic group\", details of which are given be-\n       low.  This particular group matches either the  two-character  sequence\n       CR  followed  by  LF,  or  one  of  the single characters LF (linefeed,\n       U+000A), VT (vertical tab, U+000B), FF (form feed,  U+000C),  CR  (car-\n       riage  return,  U+000D), or NEL (next line, U+0085). Because this is an\n       atomic group, the two-character sequence is treated as  a  single  unit\n       that cannot be split.\n\n       In other modes, two additional characters whose code points are greater\n       than 255 are added: LS (line separator, U+2028) and PS (paragraph sepa-\n       rator,  U+2029).  Unicode support is not needed for these characters to\n       be recognized.\n\n       It is possible to restrict \\R to match only CR, LF, or CRLF (instead of\n       the complete set  of  Unicode  line  endings)  by  setting  the  option\n       PCRE2_BSR_ANYCRLF  at  compile time. (BSR is an abbreviation for \"back-\n       slash R\".) This can be made the default when PCRE2 is built; if this is\n       the case, the other behaviour can be requested via  the  PCRE2_BSR_UNI-\n       CODE  option. It is also possible to specify these settings by starting\n       a pattern string with one of the following sequences:\n\n         (*BSR_ANYCRLF)   CR, LF, or CRLF only\n         (*BSR_UNICODE)   any Unicode newline sequence\n\n       These override the default and the options given to the compiling func-\n       tion.  Note that these special settings, which are not Perl-compatible,\n       are recognized only at the very start of a pattern, and that they  must\n       be  in upper case. If more than one of them is present, the last one is\n       used. They can be combined with a change of newline convention; for ex-\n       ample, a pattern can start with:\n\n         (*ANY)(*BSR_ANYCRLF)\n\n       They can also be combined with the (*UTF) or (*UCP) special  sequences.\n       Inside  a  character class, \\R is treated as an unrecognized escape se-\n       quence, and causes an error.\n\n   Unicode character properties\n\n       When PCRE2 is built with Unicode support  (the  default),  three  addi-\n       tional  escape sequences that match characters with specific properties\n       are available. They can be used in any mode, though in 8-bit and 16-bit\n       non-UTF modes these sequences are of course limited to testing  charac-\n       ters  whose  code points are less than U+0100 or U+10000, respectively.\n       In 32-bit non-UTF mode, code points greater than 0x10ffff (the  Unicode\n       limit)  may  be  encountered. These are all treated as being in the Un-\n       known script and with an unassigned type.\n\n       Matching characters by Unicode property is not fast, because PCRE2  has\n       to  do  a  multistage table lookup in order to find a character's prop-\n       erty. That is why the traditional escape sequences such as \\d and \\w do\n       not use Unicode properties in PCRE2 by default,  though  you  can  make\n       them  do  so by setting the PCRE2_UCP option or by starting the pattern\n       with (*UCP).\n\n       The extra escape sequences that provide property support are:\n\n         \\p{xx}   a character with the xx property\n         \\P{xx}   a character without the xx property\n         \\X       a Unicode extended grapheme cluster\n\n       For compatibility with Perl, negation can be specified by  including  a\n       circumflex  between  the  opening  brace and the property. For example,\n       \\p{^Lu} is the same as \\P{Lu}.\n\n       In accordance with Unicode's \"loose matching\" rules, ASCII white  space\n       characters, hyphens, and underscores are ignored in the properties rep-\n       resented by xx above. As well as the space character, ASCII white space\n       can be tab, linefeed, vertical tab, formfeed, or carriage return.\n\n       Some  properties  are  specified as a name only; others as a name and a\n       value, separated by a colon or an equals sign.  The  names  and  values\n       consist  of ASCII letters and digits (with one Perl-specific exception,\n       see below). They are not case sensitive. Note, however,  that  the  es-\n       capes  themselves,  \\p  and \\P, are case sensitive. There are abbrevia-\n       tions for many names. The following examples are all equivalent:\n\n         \\p{bidiclass=al}\n         \\p{BC=al}\n         \\p{ Bidi_Class : AL }\n         \\p{ Bi-di class = Al }\n         \\P{ ^ Bi-di class = Al }\n\n       There is support for Unicode script  names,  Unicode  general  category\n       properties,  \"Any\",  which  matches  any character (including newline),\n       Bidi_Class, a number of binary (yes/no) properties,  and  some  special\n       PCRE2 properties (described below).  Certain other Perl properties such\n       as  \"InMusicalSymbols\"  are  not  supported by PCRE2. Note that \\P{Any}\n       does not match any characters, so always causes a match failure.\n\n   Script properties for \\p and \\P\n\n       There are three different syntax forms for matching a script. Each Uni-\n       code character has a basic script and,  optionally,  a  list  of  other\n       scripts (\"Script Extensions\") with which it is commonly used. Using the\n       Adlam script as an example, \\p{sc:Adlam} matches characters whose basic\n       script is Adlam, whereas \\p{scx:Adlam} matches, in addition, characters\n       that  have  Adlam in their extensions list. The full names \"script\" and\n       \"script extensions\" for the property types are recognized and,  as  for\n       all  property  specifications,  an equals sign is an alternative to the\n       colon. If a script name is given without a property type, for  example,\n       \\p{Adlam},  it is treated as \\p{scx:Adlam}. Perl changed to this inter-\n       pretation at release 5.26 and PCRE2 changed at release 10.40.\n\n       Unassigned characters (and in non-UTF 32-bit mode, characters with code\n       points greater than 0x10FFFF) are assigned the \"Unknown\" script. Others\n       that are not part of an identified script are lumped together as  \"Com-\n       mon\". The current list of recognized script names and their 4-character\n       abbreviations can be obtained by running this command:\n\n         pcre2test -LS\n\n\n   The general category property for \\p and \\P\n\n       Each character has exactly one Unicode general category property, spec-\n       ified  by  a  two-letter  abbreviation. If only one letter is specified\n       with \\p or \\P, it includes all the  general  category  properties  that\n       start  with  that letter. In this case, in the absence of negation, the\n       curly brackets in the escape sequence are optional; these two  examples\n       have the same effect:\n\n         \\p{L}\n         \\pL\n\n       The following general category property codes are supported:\n\n         C     Other\n         Cc    Control\n         Cf    Format\n         Cn    Unassigned\n         Co    Private use\n         Cs    Surrogate\n\n         L     Letter\n         Lc    Cased letter\n         Ll    Lower case letter\n         Lm    Modifier letter\n         Lo    Other letter\n         Lt    Title case letter\n         Lu    Upper case letter\n\n         M     Mark\n         Mc    Spacing mark\n         Me    Enclosing mark\n         Mn    Non-spacing mark\n\n         N     Number\n         Nd    Decimal number\n         Nl    Letter number\n         No    Other number\n\n         P     Punctuation\n         Pc    Connector punctuation\n         Pd    Dash punctuation\n         Pe    Close punctuation\n         Pf    Final punctuation\n         Pi    Initial punctuation\n         Po    Other punctuation\n         Ps    Open punctuation\n\n         S     Symbol\n         Sc    Currency symbol\n         Sk    Modifier symbol\n         Sm    Mathematical symbol\n         So    Other symbol\n\n         Z     Separator\n         Zl    Line separator\n         Zp    Paragraph separator\n         Zs    Space separator\n\n       Perl  originally  used  the  name L& for the Lc property. This is still\n       supported by Perl, but discouraged. PCRE2 also still supports it.  This\n       property  matches any character that has the Lu, Ll, or Lt property, in\n       other words, any letter  that  is  not  classified  as  a  modifier  or\n       \"other\".  From release 10.45 of PCRE2 the properties Lu, Ll, and Lt are\n       all treated  as  Lc  when  case-independent  matching  is  set  by  the\n       PCRE2_CASELESS  option or (?i) within the pattern. The other properties\n       are not affected by caseless matching.\n\n       The Cs (Surrogate) property  applies  only  to  characters  whose  code\n       points  are in the range U+D800 to U+DFFF. These characters are no dif-\n       ferent to any other character when PCRE2 is not in UTF mode (using  the\n       16-bit  or  32-bit  library).   However,  they are not valid in Unicode\n       strings and so cannot be tested by PCRE2 in UTF mode, unless UTF valid-\n       ity  checking  has   been   turned   off   (see   the   discussion   of\n       PCRE2_NO_UTF_CHECK in the pcre2api page).\n\n       The  long  synonyms  for  property  names  that  Perl supports (such as\n       \\p{Letter}) are not supported by PCRE2, nor is it permitted  to  prefix\n       any of these properties with \"Is\".\n\n       No character that is in the Unicode table has the Cn (unassigned) prop-\n       erty.  Instead, this property is assumed for any code point that is not\n       in the Unicode table.\n\n   Binary (yes/no) properties for \\p and \\P\n\n       Unicode  defines  a  number  of  binary properties, that is, properties\n       whose only values are true or false. You can obtain  a  list  of  those\n       that  are  recognized  by \\p and \\P, along with their abbreviations, by\n       running this command:\n\n         pcre2test -LP\n\n\n   The Bidi_Class property for \\p and \\P\n\n         \\p{Bidi_Class:<class>}   matches a character with the given class\n         \\p{BC:<class>}           matches a character with the given class\n\n       The recognized classes are:\n\n         AL          Arabic letter\n         AN          Arabic number\n         B           paragraph separator\n         BN          boundary neutral\n         CS          common separator\n         EN          European number\n         ES          European separator\n         ET          European terminator\n         FSI         first strong isolate\n         L           left-to-right\n         LRE         left-to-right embedding\n         LRI         left-to-right isolate\n         LRO         left-to-right override\n         NSM         non-spacing mark\n         ON          other neutral\n         PDF         pop directional format\n         PDI         pop directional isolate\n         R           right-to-left\n         RLE         right-to-left embedding\n         RLI         right-to-left isolate\n         RLO         right-to-left override\n         S           segment separator\n         WS          white space\n\n       As in all property specifications, an equals sign may be  used  instead\n       of  a  colon  and  the class names are case-insensitive. Only the short\n       names listed above are recognized; PCRE2 does not  at  present  support\n       any long alternatives.\n\n   Extended grapheme clusters\n\n       The  \\X  escape  matches  any number of Unicode characters that form an\n       \"extended grapheme cluster\", and treats the sequence as an atomic group\n       (see below).  Unicode supports various kinds of composite character  by\n       giving  each  character  a grapheme breaking property, and having rules\n       that use these properties to define the boundaries of extended grapheme\n       clusters. The rules are defined in Unicode Standard Annex 29,  \"Unicode\n       Text  Segmentation\".  Unicode 11.0.0 abandoned the use of some previous\n       properties that had been used for emojis.  Instead it introduced  vari-\n       ous  emoji-specific  properties.  PCRE2  uses  only the Extended Picto-\n       graphic property.\n\n       \\X always matches at least one character. Then it  decides  whether  to\n       add additional characters according to the following rules for ending a\n       cluster:\n\n       1. End at the end of the subject string.\n\n       2.  Do not end between CR and LF; otherwise end after any control char-\n       acter.\n\n       3. Do not break Hangul (a Korean  script)  syllable  sequences.  Hangul\n       characters  are of five types: L, V, T, LV, and LVT. An L character may\n       be followed by an L, V, LV, or LVT character; an LV or V character  may\n       be  followed  by  a V or T character; an LVT or T character may be fol-\n       lowed only by a T character.\n\n       4. Do not end before extending characters or spacing marks or the zero-\n       width joiner (ZWJ) character. Characters with the \"mark\"  property  al-\n       ways have the \"extend\" grapheme breaking property.\n\n       5. Do not end after prepend characters.\n\n       6.  Do not end within emoji modifier sequences or emoji ZWJ (zero-width\n       joiner) sequences. An emoji ZWJ sequence consists of a  character  with\n       the  Extended_Pictographic property, optionally followed by one or more\n       characters with the Extend property, followed  by  the  ZWJ  character,\n       followed by another Extended_Pictographic character.\n\n       7.  Do not break within emoji flag sequences. That is, do not break be-\n       tween regional indicator (RI) characters if there are an odd number  of\n       RI characters before the break point.\n\n       8. Otherwise, end the cluster.\n\n   PCRE2's additional properties\n\n       As  well as the standard Unicode properties described above, PCRE2 sup-\n       ports four more that make it possible to convert traditional escape se-\n       quences such as \\w and \\s to use Unicode properties. PCRE2  uses  these\n       non-standard,  non-Perl  properties  internally  when PCRE2_UCP is set.\n       However, they may also be used explicitly. These properties are:\n\n         Xan   Any alphanumeric character\n         Xps   Any POSIX space character\n         Xsp   Any Perl space character\n         Xwd   Any Perl \"word\" character\n\n       Xan matches characters that have either the L (letter) or the  N  (num-\n       ber)  property. Xps matches the characters tab, linefeed, vertical tab,\n       form feed, or carriage return, and any other character that has  the  Z\n       (separator)  property  (this  includes the space character). Xsp is the\n       same as Xps; in PCRE1 it used to exclude vertical tab, for Perl compat-\n       ibility, but Perl changed. Xwd matches the same characters as Xan, plus\n       those that match Mn (non-spacing mark) or  Pc  (connector  punctuation,\n       which includes underscore).\n\n       There  is another non-standard property, Xuc, which matches any charac-\n       ter that can be represented by a Universal Character Name  in  C++  and\n       other  programming  languages.  These are the characters $, @, ` (grave\n       accent), and all characters with Unicode code points  greater  than  or\n       equal  to U+00A0, except for the surrogates U+D800 to U+DFFF. Note that\n       most base (ASCII) characters are excluded. (Universal  Character  Names\n       are  of  the  form \\uHHHH or \\UHHHHHHHH where H is a hexadecimal digit.\n       Note that the Xuc property does not match these sequences but the char-\n       acters that they represent.)\n\n   Resetting the match start\n\n       In normal use, the escape sequence \\K  causes  any  previously  matched\n       characters not to be included in the final matched sequence that is re-\n       turned. For example, the pattern:\n\n         foo\\Kbar\n\n       matches  \"foobar\",  but  reports that it has matched \"bar\". \\K does not\n       interact with anchoring in any way. The pattern:\n\n         ^foo\\Kbar\n\n       matches only when the subject begins  with  \"foobar\"  (in  single  line\n       mode),  though  it again reports the matched string as \"bar\". This fea-\n       ture is similar to a lookbehind assertion (described  below),  but  the\n       part of the pattern that precedes \\K is not constrained to match a lim-\n       ited  number  of characters, as is required for a lookbehind assertion.\n       The use of \\K does not interfere with  the  setting  of  captured  sub-\n       strings.  For example, when the pattern\n\n         (foo)\\Kbar\n\n       matches \"foobar\", the first substring is still set to \"foo\".\n\n       From  version  5.32.0  Perl  forbids the use of \\K in lookaround asser-\n       tions. From release 10.38 PCRE2 also forbids this by default.  However,\n       the  PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK  option  can be used when calling\n       pcre2_compile() to re-enable the previous behaviour. When  this  option\n       is set, \\K is acted upon when it occurs inside positive assertions, but\n       is  ignored  in  negative  assertions. Note that when a pattern such as\n       (?=ab\\K) matches, the reported start of the match can be  greater  than\n       the  end  of the match. Using \\K in a lookbehind assertion at the start\n       of a pattern can also lead to odd effects. For example,  consider  this\n       pattern:\n\n         (?<=\\Kfoo)bar\n\n       If  the  subject  is  \"foobar\", a call to pcre2_match() with a starting\n       offset of 3 succeeds and reports the matching string as \"foobar\",  that\n       is,  the  start  of  the reported match is earlier than where the match\n       started.\n\n   Simple assertions\n\n       The final use of backslash is for certain simple assertions. An  asser-\n       tion  specifies a condition that has to be met at a particular point in\n       a match, without consuming any characters from the subject string.  The\n       use  of groups for more complicated assertions is described below.  The\n       backslashed assertions are:\n\n         \\b     matches at a word boundary\n         \\B     matches when not at a word boundary\n         \\A     matches at the start of the subject\n         \\Z     matches at the end of the subject\n                 also matches before a newline at the end of the subject\n         \\z     matches only at the end of the subject\n         \\G     matches at the first matching position in the subject\n\n       Inside a character class, \\b has a different meaning;  it  matches  the\n       backspace  character.  If  any  other  of these assertions appears in a\n       character class, an \"invalid escape sequence\" error is generated.\n\n       A word boundary is a position in the subject string where  the  current\n       character  and  the previous character do not both match \\w or \\W (i.e.\n       one matches \\w and the other matches \\W), or the start or  end  of  the\n       string  if  the  first or last character matches \\w, respectively. When\n       PCRE2 is built with Unicode support, the meanings of \\w and \\W  can  be\n       changed by setting the PCRE2_UCP option. When this is done, it also af-\n       fects  \\b and \\B. Neither PCRE2 nor Perl has a separate \"start of word\"\n       or \"end of word\" metasequence. However, whatever  follows  \\b  normally\n       determines  which  it  is. For example, the fragment \\ba matches \"a\" at\n       the start of a word.\n\n       The \\A, \\Z, and \\z assertions differ from  the  traditional  circumflex\n       and dollar (described in the next section) in that they only ever match\n       at  the  very start and end of the subject string, whatever options are\n       set. Thus, they are independent of multiline mode. These  three  asser-\n       tions  are  not  affected  by the PCRE2_NOTBOL or PCRE2_NOTEOL options,\n       which affect only the behaviour of the circumflex and dollar  metachar-\n       acters.  However,  if the startoffset argument of pcre2_match() is non-\n       zero, indicating that matching is to start at a point  other  than  the\n       beginning  of  the subject, \\A can never match.  The difference between\n       \\Z and \\z is that \\Z matches before a newline at the end of the  string\n       as well as at the very end, whereas \\z matches only at the end.\n\n       The  \\G assertion is true only when the current matching position is at\n       the start point of the matching process, as specified by the  startoff-\n       set  argument  of  pcre2_match().  It differs from \\A when the value of\n       startoffset is non-zero. By calling pcre2_match() multiple  times  with\n       appropriate  arguments,  you  can  mimic Perl's /g option, and it is in\n       this kind of implementation where \\G can be useful.\n\n       Note, however, that PCRE2's implementation of \\G,  being  true  at  the\n       starting  character  of  the matching process, is subtly different from\n       Perl's, which defines it as true at the end of the previous  match.  In\n       Perl,  these  can  be  different when the previously matched string was\n       empty. Because PCRE2 does just one match at a time, it cannot reproduce\n       this behaviour.\n\n       If all the alternatives of a pattern begin with \\G, the  expression  is\n       anchored to the starting match position, and the \"anchored\" flag is set\n       in the compiled regular expression.\n\n\nCIRCUMFLEX AND DOLLAR\n\n       The  circumflex  and  dollar  metacharacters are zero-width assertions.\n       That is, they test for a particular condition being true  without  con-\n       suming any characters from the subject string. These two metacharacters\n       are  concerned  with matching the starts and ends of lines. If the new-\n       line convention is set so that only the two-character sequence CRLF  is\n       recognized  as  a newline, isolated CR and LF characters are treated as\n       ordinary data characters, and are not recognized as newlines.\n\n       Outside a character class, in the default matching mode, the circumflex\n       character is an assertion that is true only  if  the  current  matching\n       point  is  at the start of the subject string. If the startoffset argu-\n       ment of pcre2_match() is non-zero, or if PCRE2_NOTBOL is  set,  circum-\n       flex  can  never match if the PCRE2_MULTILINE option is unset. Inside a\n       character class, circumflex has an entirely different meaning (see  be-\n       low).\n\n       Circumflex  need  not be the first character of the pattern if a number\n       of alternatives are involved, but it should be the first thing in  each\n       alternative  in  which  it appears if the pattern is ever to match that\n       branch. If all possible alternatives start with a circumflex, that  is,\n       if  the  pattern  is constrained to match only at the start of the sub-\n       ject, it is said to be an \"anchored\" pattern.  (There  are  also  other\n       constructs that can cause a pattern to be anchored.)\n\n       The  dollar  character is an assertion that is true only if the current\n       matching point is at the end of the subject string, or immediately  be-\n       fore  a newline at the end of the string (by default), unless PCRE2_NO-\n       TEOL is set. Note, however, that it does not actually  match  the  new-\n       line.  Dollar need not be the last character of the pattern if a number\n       of alternatives are involved, but it should be the  last  item  in  any\n       branch  in which it appears. Dollar has no special meaning in a charac-\n       ter class.\n\n       The meaning of dollar can be changed so that it  matches  only  at  the\n       very  end  of the string, by setting the PCRE2_DOLLAR_ENDONLY option at\n       compile time. This does not affect the \\Z assertion.\n\n       The meanings of the circumflex and dollar metacharacters are changed if\n       the PCRE2_MULTILINE option is set. When this  is  the  case,  a  dollar\n       character  matches before any newlines in the string, as well as at the\n       very end, and a circumflex matches immediately after internal  newlines\n       as  well as at the start of the subject string. It does not match after\n       a newline that ends the string, for compatibility with  Perl.  However,\n       this can be changed by setting the PCRE2_ALT_CIRCUMFLEX option.\n\n       For  example, the pattern /^abc$/ matches the subject string \"def\\nabc\"\n       (where \\n represents a newline) in multiline mode, but  not  otherwise.\n       Consequently,  patterns  that  are anchored in single line mode because\n       all branches start with ^ are not anchored in  multiline  mode,  and  a\n       match  for  circumflex  is  possible  when  the startoffset argument of\n       pcre2_match() is non-zero. The PCRE2_DOLLAR_ENDONLY option  is  ignored\n       if PCRE2_MULTILINE is set.\n\n       When  the  newline  convention (see \"Newline conventions\" below) recog-\n       nizes the two-character sequence CRLF as a newline, this is  preferred,\n       even  if  the  single  characters CR and LF are also recognized as new-\n       lines. For example, if the newline convention  is  \"any\",  a  multiline\n       mode  circumflex matches before \"xyz\" in the string \"abc\\r\\nxyz\" rather\n       than after CR, even though CR on its own is a valid newline.  (It  also\n       matches at the very start of the string, of course.)\n\n       Note  that  the sequences \\A, \\Z, and \\z can be used to match the start\n       and end of the subject in both modes, and if all branches of a  pattern\n       start  with \\A it is always anchored, whether or not PCRE2_MULTILINE is\n       set.\n\n\nFULL STOP (PERIOD, DOT) AND \\N\n\n       Outside a character class, a dot in the pattern matches any one charac-\n       ter in the subject string except (by default) a character  that  signi-\n       fies the end of a line. One or more characters may be specified as line\n       terminators (see \"Newline conventions\" above).\n\n       Dot  never matches a single line-ending character. When the two-charac-\n       ter sequence CRLF is the only line ending, dot does not match CR if  it\n       is  immediately followed by LF, but otherwise it matches all characters\n       (including isolated CRs and LFs). When ANYCRLF  is  selected  for  line\n       endings,  no  occurrences  of CR of LF match dot. When all Unicode line\n       endings are being recognized, dot does not match CR or LF or any of the\n       other line ending characters.\n\n       The behaviour of dot with regard to newlines can  be  changed.  If  the\n       PCRE2_DOTALL  option  is  set, a dot matches any one character, without\n       exception.  If the two-character sequence CRLF is present in  the  sub-\n       ject string, it takes two dots to match it.\n\n       The  handling of dot is entirely independent of the handling of circum-\n       flex and dollar, the only relationship being  that  they  both  involve\n       newlines. Dot has no special meaning in a character class.\n\n       The  escape  sequence  \\N when not followed by an opening brace behaves\n       like a dot, except that it is not affected by the PCRE2_DOTALL  option.\n       In  other words, it matches any character except one that signifies the\n       end of a line.\n\n       When \\N is followed by an opening brace it has a different meaning. See\n       the section entitled \"Non-printing characters\" above for details.  Perl\n       also  uses  \\N{name}  to specify characters by Unicode name; PCRE2 does\n       not support this.\n\n\nMATCHING A SINGLE CODE UNIT\n\n       Outside a character class, the escape sequence \\C matches any one  code\n       unit,  whether or not a UTF mode is set. In the 8-bit library, one code\n       unit is one byte; in the 16-bit library it is a  16-bit  unit;  in  the\n       32-bit  library  it  is  a 32-bit unit. Unlike a dot, \\C always matches\n       line-ending characters. The feature is provided in  Perl  in  order  to\n       match individual bytes in UTF-8 mode, but it is unclear how it can use-\n       fully be used.\n\n       Because  \\C  breaks  up characters into individual code units, matching\n       one unit with \\C in UTF-8 or UTF-16 mode means that  the  rest  of  the\n       string may start with a malformed UTF character. This has undefined re-\n       sults, because PCRE2 assumes that it is matching character by character\n       in a valid UTF string (by default it checks the subject string's valid-\n       ity  at  the  start  of  processing  unless  the  PCRE2_NO_UTF_CHECK or\n       PCRE2_MATCH_INVALID_UTF option is used).\n\n       An  application  can  lock  out  the  use  of   \\C   by   setting   the\n       PCRE2_NEVER_BACKSLASH_C  option  when  compiling  a pattern. It is also\n       possible to build PCRE2 with the use of \\C permanently disabled.\n\n       PCRE2 does not allow \\C to appear in lookbehind  assertions  (described\n       below)  in UTF-8 or UTF-16 modes, because this would make it impossible\n       to calculate the length of  the  lookbehind.  Neither  the  alternative\n       matching function pcre2_dfa_match() nor the JIT optimizer support \\C in\n       these UTF modes.  The former gives a match-time error; the latter fails\n       to optimize and so the match is always run using the interpreter.\n\n       In  the  32-bit  library, however, \\C is always supported (when not ex-\n       plicitly locked out) because it always  matches  a  single  code  unit,\n       whether or not UTF-32 is specified.\n\n       In general, the \\C escape sequence is best avoided. However, one way of\n       using  it  that avoids the problem of malformed UTF-8 or UTF-16 charac-\n       ters is to use a lookahead to check the length of the  next  character,\n       as  in  this  pattern,  which could be used with a UTF-8 string (ignore\n       white space and line breaks):\n\n         (?| (?=[\\x00-\\x7f])(\\C) |\n             (?=[\\x80-\\x{7ff}])(\\C)(\\C) |\n             (?=[\\x{800}-\\x{ffff}])(\\C)(\\C)(\\C) |\n             (?=[\\x{10000}-\\x{1fffff}])(\\C)(\\C)(\\C)(\\C))\n\n       In this example, a group that starts  with  (?|  resets  the  capturing\n       parentheses  numbers in each alternative (see \"Duplicate Group Numbers\"\n       below). The assertions at the start of each branch check the next UTF-8\n       character for values whose encoding uses 1, 2, 3, or 4  bytes,  respec-\n       tively.  The  character's individual bytes are then captured by the ap-\n       propriate number of \\C groups.\n\n\nSQUARE BRACKETS AND CHARACTER CLASSES\n\n       An opening square bracket introduces a character class, terminated by a\n       closing square bracket. A closing square bracket on its own is not spe-\n       cial by default.  If a closing square bracket is required as  a  member\n       of the class, it should be the first data character in the class (after\n       an  initial  circumflex,  if present) or escaped with a backslash. This\n       means that, by default, an empty class cannot be defined.  However,  if\n       the  PCRE2_ALLOW_EMPTY_CLASS option is set, a closing square bracket at\n       the start does end the (empty) class.\n\n       A character class matches a single character in the subject. A  matched\n       character must be in the set of characters defined by the class, unless\n       the  first  character in the class definition is a circumflex, in which\n       case the subject character must not be in the set defined by the class.\n       If a circumflex is actually required as a member of the  class,  ensure\n       it is not the first character, or escape it with a backslash.\n\n       For example, the character class [aeiou] matches any lower case English\n       vowel,  whereas [^aeiou] matches all other characters. Note that a cir-\n       cumflex is just a convenient notation  for  specifying  the  characters\n       that  are  in the class by enumerating those that are not. A class that\n       starts with a circumflex is not an assertion; it still consumes a char-\n       acter from the subject string, and therefore it fails to match  if  the\n       current pointer is at the end of the string.\n\n       Characters  in  a class may be specified by their code points using \\o,\n       \\x, or \\N{U+hh..} in the usual way. When caseless matching is set,  any\n       letters  in a class represent both their upper case and lower case ver-\n       sions, so for example, a caseless [aeiou] matches \"A\" as well  as  \"a\",\n       and  a  caseless [^aeiou] does not match \"A\", whereas a caseful version\n       would. Note that there are two ASCII characters, K and S, that, in  ad-\n       dition  to their lower case ASCII equivalents, are case-equivalent with\n       Unicode U+212A (Kelvin sign) and U+017F (long S) respectively when  ei-\n       ther PCRE2_UTF or PCRE2_UCP is set. If you do not want these ASCII/non-\n       ASCII  case  equivalences,  you  can suppress them by setting PCRE2_EX-\n       TRA_CASELESS_RESTRICT, either as an option in a compile context, or  by\n       including (*CASELESS_RESTRICT) or (?r) within a pattern.\n\n       Characters  that  might  indicate  line breaks are never treated in any\n       special way when matching character classes, whatever  line-ending  se-\n       quence  is  in  use,  and  whatever  setting  of  the  PCRE2_DOTALL and\n       PCRE2_MULTILINE options is used. A class such as  [^a]  always  matches\n       one of these characters.\n\n       The generic character type escape sequences \\d, \\D, \\h, \\H, \\p, \\P, \\s,\n       \\S,  \\v,  \\V,  \\w,  and \\W may appear in a character class, and add the\n       characters that they  match  to  the  class.  For  example,  [\\dABCDEF]\n       matches  any  hexadecimal digit. In UTF modes, the PCRE2_UCP option af-\n       fects the meanings of \\d, \\s, \\w and their upper case partners, just as\n       it does when they appear outside a character class, as described in the\n       section entitled \"Generic character types\" above. The  escape  sequence\n       \\b  has  a  different  meaning inside a character class; it matches the\n       backspace character. The sequences \\B, \\R, and \\X are not  special  in-\n       side  a  character class. Like any other unrecognized escape sequences,\n       they cause an error. The same is true for \\N when not  followed  by  an\n       opening brace.\n\n       The  minus (hyphen) character can be used to specify a range of charac-\n       ters in a character class. For example, [d-m] matches  any  letter  be-\n       tween  d and m, inclusive. If a minus character is required in a class,\n       it must be escaped with a backslash or appear in a  position  where  it\n       cannot  be interpreted as indicating a range, typically as the first or\n       last character in the class, or immediately after a range. For example,\n       [b-d-z] matches letters in the range b to d, a hyphen character, or z.\n\n       There is some special treatment for alphabetic ranges in  EBCDIC  envi-\n       ronments; see the section \"EBCDIC environments\" below.\n\n       Perl treats a hyphen as a literal if it appears before or after a POSIX\n       class (see below) or before or after a character type escape such as \\d\n       or  \\H.  However, unless the hyphen is the last character in the class,\n       Perl outputs a warning in its warning mode, as this is  most  likely  a\n       user  error. As PCRE2 has no facility for warning, an error is given in\n       these cases.\n\n       It is not possible to have the literal character \"]\" as the end charac-\n       ter of a range. A pattern such as [W-]46] is interpreted as a class  of\n       two  characters (\"W\" and \"-\") followed by a literal string \"46]\", so it\n       would match \"W46]\" or \"-46]\". However, if the \"]\"  is  escaped  with  a\n       backslash  it  is interpreted as the end of a range, so [W-\\]46] is in-\n       terpreted as a class containing a range and two other  characters.  The\n       octal  or  hexadecimal  representation of \"]\" can also be used to end a\n       range.\n\n       Ranges normally include all code points between the start and end char-\n       acters, inclusive. They can also be used for code points specified  nu-\n       merically,  for  example [\\000-\\037]. Ranges can include any characters\n       that are valid for the current mode. In any  UTF  mode,  the  so-called\n       \"surrogate\"  characters (those whose code points lie between 0xd800 and\n       0xdfff inclusive) may not  be  specified  explicitly  by  default  (the\n       PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES  option  disables this check). How-\n       ever, ranges such as [\\x{d7ff}-\\x{e000}], which include the surrogates,\n       are always permitted.\n\n       If a range that includes letters is used when caseless matching is set,\n       it matches the letters in either case. For example, [W-c] is equivalent\n       to [][\\\\^_`wxyzabc], matched caselessly, and  in  a  non-UTF  mode,  if\n       character  tables  for  a French locale are in use, [\\xc8-\\xcb] matches\n       accented E characters in both cases.\n\n       A circumflex can conveniently be used with  the  upper  case  character\n       types  to specify a more restricted set of characters than the matching\n       lower case type.  For example, the class [^\\W_] matches any  letter  or\n       digit, but not underscore, whereas [\\w] includes underscore. A positive\n       character class should be read as \"something OR something OR ...\" and a\n       negative class as \"NOT something AND NOT something AND NOT ...\".\n\n       The  metacharacters  that are recognized in character classes are back-\n       slash, hyphen (when it can be interpreted as specifying a range),  cir-\n       cumflex  (only  at  the  start),  and  the  terminating  closing square\n       bracket. An opening square bracket is also special when it can  be  in-\n       terpreted  as  introducing a POSIX class (see \"Posix character classes\"\n       below), or a special compatibility feature (see \"Compatibility  feature\n       for  word boundaries\" below. Escaping any non-alphanumeric character in\n       a class turns it into a literal, whether or not it would otherwise be a\n       metacharacter.\n\n\nPERL EXTENDED CHARACTER CLASSES\n\n       From release 10.45 PCRE2 supports Perl's  (?[...])  extended  character\n       class syntax. This can be used to perform set operations such as inter-\n       section on character classes.\n\n       The  syntax  permitted  within  (?[...]) is quite different to ordinary\n       character classes. Inside the extended class, there  is  an  expression\n       syntax  consisting of \"atoms\", operators, and ordinary parentheses \"()\"\n       used for grouping. Such classes  always  have  the  Perl  /xx  modifier\n       (PCRE2  option  PCRE2_EXTENDED_MORE)  turned on within them. This means\n       that literal space and tab characters are  ignored  everywhere  in  the\n       class.\n\n       The  allowed  atoms  are  individual characters specified by escape se-\n       quences such as \\n or  \\x{123},  character  types  such  as  \\d,  POSIX\n       classes such as [:alpha:], and nested ordinary (non-extended) character\n       classes. For example, in (?[\\d & [...]]) the nested class [...] follows\n       the  usual  rules  for ordinary character classes, in which parentheses\n       are not metacharacters, and character literals and ranges  are  permit-\n       ted.\n\n       Character  literals and ranges may not appear outside a nested ordinary\n       character class because they are not atoms in the extended syntax.  The\n       extended  syntax does not introduce any additional escape sequences, so\n       (?[\\y]) is an unknown escape, as it would be in [\\y].\n\n       In the extended syntax, ^ does not negate a class (except within an or-\n       dinary class nested inside an extended class); it is instead  a  binary\n       operator.\n\n       The  binary  operators  are \"&\" (intersection), \"|\" or \"+\" (union), \"-\"\n       (subtraction) and \"^\" (symmetric difference). These  are  left-associa-\n       tive  and  \"&\"  has  higher (tighter) precedence, while the others have\n       equal lower precedence. The one prefix unary operator is  \"!\"  (comple-\n       ment), with highest precedence.\n\n\nUTS#18 EXTENDED CHARACTER CLASSES\n\n       The  PCRE2_ALT_EXTENDED_CLASS  option  enables an alternative to Perl's\n       (?[...])  syntax, allowing instead extended class behaviour inside  or-\n       dinary  [...]  character classes. This altered syntax for [...] classes\n       is loosely described by the Unicode standard UTS#18. The  PCRE2_ALT_EX-\n       TENDED_CLASS  option  does not prevent use of (?[...]) classes; it just\n       changes the meaning of all [...] classes that are not nested  inside  a\n       Perl (?[...]) class.\n\n       Firstly, in ordinary Perl [...] syntax, an expression such as \"[a[]\" is\n       a  character  class  with  two  literal  characters \"a\" and \"[\", but in\n       UTS#18  extended  classes  the  \"[\"  character  becomes  an  additional\n       metacharacter  within classes, denoting the start of a nested class, so\n       a literal \"[\" must be escaped as \"\\[\".\n\n       Secondly, within the UTS#18 extended syntax, there are operators  \"||\",\n       \"&&\",  \"--\"  and \"~~\" which denote character class union, intersection,\n       subtraction, and symmetric difference respectively.  In  standard  Perl\n       syntax,  these would simply be needlessly-repeated literals (except for\n       \"--\" which could be the start or end of a range).  In  UTS#18  extended\n       classes these operators can be used in constructs such as [\\p{L}--[QW]]\n       for  \"Unicode letters, other than Q and W\".  A literal \"-\" at the start\n       or end of a range must be escaped, so while \"[--1]\" in Perl  syntax  is\n       the  range from hyphen to \"1\", it must be escaped as \"[\\--1]\" in UTS#18\n       extended classes.\n\n       Unlike Perl's (?[...]) extended classes, the PCRE2_EXTENDED_MORE option\n       to ignore space and tab characters is  not  automatically  enabled  for\n       UTS#18 extended classes, but it is honoured if set.\n\n       Extended  UTS#18  classes  can  be nested, and nested classes are them-\n       selves extended classes (unlike Perl, where nested classes must be sim-\n       ple classes).  For example, [\\p{L}&&[\\p{Thai}||\\p{Greek}]] matches  any\n       letter  that is in the Thai or Greek scripts. Note that this means that\n       no special grouping characters (such as the parentheses used in  Perl's\n       (?[...]) class syntax) are needed.\n\n       Individual  class items (literal characters, literal ranges, properties\n       such as \\d or \\p{...}, and nested classes) can be combined by  juxtapo-\n       sition or by an operator. Juxtaposition is the implicit union operator,\n       and  binds  more tightly than any explicit operator. Thus a sequence of\n       literals and/or ranges behaves as if it is enclosed in square brackets.\n       For example, [A-Z0-9&&[^E8]] is the same  as  [[A-Z0-9]&&[^E8]],  which\n       matches any upper case alphanumeric character except \"E\" or \"8\".\n\n       Precedence between the explicit operators is not defined, so mixing op-\n       erators  is  a  syntax  error.  For example, [A&&B--C] is an error, but\n       [A&&[B--C]] is valid.\n\n       This is an emerging syntax which is being adopted gradually across  the\n       regex  ecosystem:  for  example JavaScript adopted the \"/v\" flag in EC-\n       MAScript 2024; Python's \"re\" module reserves the syntax for future  use\n       with a FutureWarning for unescaped use of \"[\" as a literal within char-\n       acter  classes.  Due to UTS#18 providing insufficient guidance, engines\n       interpret the syntax differently.  Rust's \"regex\"  crate  and  Python's\n       \"regex\"  PyPi  module  both implement UTS#18 extended classes, but with\n       slight  incompatibilities  ([A||B&&C]  is  parsed  as  [A||[B&&C]]   in\n       Python's \"regex\" but as [[A||B]&&C] in Rust's \"regex\").\n\n       PCRE2's  syntax  adds  syntax  restrictions  similar to ECMASCript's /v\n       flag, so that all the UTS#18 extended  classes  accepted  as  valid  by\n       PCRE2  have the property that they are interpreted either with the same\n       behaviour, or as invalid, by all other major engines.  Please  file  an\n       issue if you are aware of cross-engine differences in behaviour between\n       PCRE2 and another major engine.\n\n\nPOSIX CHARACTER CLASSES\n\n       Perl supports the POSIX notation for character classes. This uses names\n       enclosed  by [: and :] within the enclosing square brackets. PCRE2 also\n       supports this notation, in both ordinary and extended classes. For  ex-\n       ample,\n\n         [01[:alpha:]%]\n\n       matches \"0\", \"1\", any alphabetic character, or \"%\". The supported class\n       names are:\n\n         alnum    letters and digits\n         alpha    letters\n         ascii    character codes 0 - 127\n         blank    space or tab only\n         cntrl    control characters\n         digit    decimal digits (same as \\d)\n         graph    printing characters, excluding space\n         lower    lower case letters\n         print    printing characters, including space\n         punct    printing characters, excluding letters and digits and space\n         space    white space (the same as \\s from PCRE2 8.34)\n         upper    upper case letters\n         word     \"word\" characters (same as \\w)\n         xdigit   hexadecimal digits\n\n       The  default  \"space\" characters are HT (9), LF (10), VT (11), FF (12),\n       CR (13), and space (32). If locale-specific matching is  taking  place,\n       the  list  of  space characters may be different; there may be fewer or\n       more of them. \"Space\" and \\s match the same set of  characters,  as  do\n       \"word\" and \\w.\n\n       The  name  \"word\"  is  a Perl extension, and \"blank\" is a GNU extension\n       from Perl 5.8. Another Perl extension is negation, which  is  indicated\n       by a ^ character after the colon. For example,\n\n         [12[:^digit:]]\n\n       matches \"1\", \"2\", or any non-digit. PCRE2 (and Perl) also recognize the\n       POSIX syntax [.ch.] and [=ch=] where \"ch\" is a \"collating element\", but\n       these are not supported, and an error is given if they are encountered.\n\n       By default, characters with values greater than 127 do not match any of\n       the POSIX character classes, although this may be different for charac-\n       ters  in  the range 128-255 when locale-specific matching is happening.\n       However, in UCP mode, unless certain options are set (see below),  some\n       of  the  classes  are  changed so that Unicode character properties are\n       used. This is achieved by replacing POSIX classes with other sequences,\n       as follows:\n\n         [:alnum:]  becomes  \\p{Xan}\n         [:alpha:]  becomes  \\p{L}\n         [:blank:]  becomes  \\h\n         [:cntrl:]  becomes  \\p{Cc}\n         [:digit:]  becomes  \\p{Nd}\n         [:lower:]  becomes  \\p{Ll}\n         [:space:]  becomes  \\p{Xps}\n         [:upper:]  becomes  \\p{Lu}\n         [:word:]   becomes  \\p{Xwd}\n\n       Negated versions, such as [:^alpha:] use \\P instead of \\p.  Four  other\n       POSIX classes are handled specially in UCP mode:\n\n       [:graph:] This  matches  characters that have glyphs that mark the page\n                 when printed. In Unicode property terms, it matches all char-\n                 acters with the L, M, N, P, S, or Cf properties, except for:\n\n                   U+061C           Arabic Letter Mark\n                   U+180E           Mongolian Vowel Separator\n                   U+2066 - U+2069  Various \"isolate\"s\n\n\n       [:print:] This matches the same  characters  as  [:graph:]  plus  space\n                 characters  that  are  not controls, that is, characters with\n                 the Zs property.\n\n       [:punct:] This matches all characters that have the Unicode P (punctua-\n                 tion) property, plus those characters with code  points  less\n                 than 256 that have the S (Symbol) property.\n\n       [:xdigit:]\n                 In  addition  to  the  ASCII  hexadecimal  digits,  this also\n                 matches the \"fullwidth\" versions of those  characters,  whose\n                 Unicode  code  points  start at U+FF10. This is a change that\n                 was made in PCRE2 release 10.43 for Perl compatibility.\n\n       The other POSIX classes are unchanged  by  PCRE2_UCP,  and  match  only\n       characters with code points less than 256.\n\n       There are two options that can be used to restrict the POSIX classes to\n       ASCII   characters   when   PCRE2_UCP  is  set.  The  option  PCRE2_EX-\n       TRA_ASCII_DIGIT affects just [:digit:] and [:xdigit:].  Within  a  pat-\n       tern,  this  can  be  set  and unset by (?aT) and (?-aT). The PCRE2_EX-\n       TRA_ASCII_POSIX option disables UCP processing for all  POSIX  classes,\n       including  [:digit:] and [:xdigit:]. Within a pattern, (?aP) and (?-aP)\n       set and unset both these options for consistency.\n\n\nCOMPATIBILITY FEATURE FOR WORD BOUNDARIES\n\n       In the POSIX.2 compliant library that was included in 4.4BSD Unix,  the\n       ugly  syntax  [[:<:]]  and [[:>:]] is used for matching \"start of word\"\n       and \"end of word\". PCRE2 treats these items as follows:\n\n         [[:<:]]  is converted to  \\b(?=\\w)\n         [[:>:]]  is converted to  \\b(?<=\\w)\n\n       Only these exact character sequences are recognized. A sequence such as\n       [a[:<:]b] provokes error for an unrecognized  POSIX  class  name.  This\n       support  is not compatible with Perl. It is provided to help migrations\n       from other environments, and is best not used in any new patterns. Note\n       that \\b matches at the start and the end of a word (see \"Simple  asser-\n       tions\"  above),  and in a Perl-style pattern the preceding or following\n       character normally shows which is wanted, without the need for the  as-\n       sertions  that are used above in order to give exactly the POSIX behav-\n       iour. Note also that the PCRE2_UCP option changes  the  meaning  of  \\w\n       (and  therefore  \\b)  by  default,  so  it also affects these POSIX se-\n       quences.\n\n\nVERTICAL BAR\n\n       Vertical bar characters are used to separate alternative patterns.  For\n       example, the pattern\n\n         gilbert|sullivan\n\n       matches  either \"gilbert\" or \"sullivan\". Any number of alternatives may\n       appear, and an empty  alternative  is  permitted  (matching  the  empty\n       string). The matching process tries each alternative in turn, from left\n       to  right, and the first one that succeeds is used. If the alternatives\n       are within a group (defined below), \"succeeds\" means matching the  rest\n       of the main pattern as well as the alternative in the group.\n\n\nINTERNAL OPTION SETTING\n\n       The  settings  of  several options can be changed within a pattern by a\n       sequence of letters enclosed between \"(?\" and \")\".  The  following  are\n       Perl-compatible, and are described in detail in the pcre2api documenta-\n       tion. The option letters are:\n\n         i  for PCRE2_CASELESS\n         m  for PCRE2_MULTILINE\n         n  for PCRE2_NO_AUTO_CAPTURE\n         s  for PCRE2_DOTALL\n         x  for PCRE2_EXTENDED\n         xx for PCRE2_EXTENDED_MORE\n\n       For example, (?im) sets caseless, multiline matching. It is also possi-\n       ble to unset these options by preceding the relevant letters with a hy-\n       phen,  for  example (?-im). The two \"extended\" options are not indepen-\n       dent; unsetting either one cancels the effects of both of them.\n\n       A  combined  setting  and  unsetting  such  as  (?im-sx),  which   sets\n       PCRE2_CASELESS  and  PCRE2_MULTILINE  while  unsetting PCRE2_DOTALL and\n       PCRE2_EXTENDED, is also permitted. Only one hyphen may  appear  in  the\n       options  string.  If a letter appears both before and after the hyphen,\n       the option is unset. An empty options setting \"(?)\" is  allowed.  Need-\n       less to say, it has no effect.\n\n       If  the  first character following (? is a circumflex, it causes all of\n       the above options to be unset. Letters may  follow  the  circumflex  to\n       cause some options to be re-instated, but a hyphen may not appear.\n\n       Some  PCRE2-specific options can be changed by the same mechanism using\n       these pairs or individual letters:\n\n         aD for PCRE2_EXTRA_ASCII_BSD\n         aS for PCRE2_EXTRA_ASCII_BSS\n         aW for PCRE2_EXTRA_ASCII_BSW\n         aP for PCRE2_EXTRA_ASCII_POSIX and PCRE2_EXTRA_ASCII_DIGIT\n         aT for PCRE2_EXTRA_ASCII_DIGIT\n         r  for PCRE2_EXTRA_CASELESS_RESTRICT\n         J  for PCRE2_DUPNAMES\n         U  for PCRE2_UNGREEDY\n\n       However, except for 'r', these are not unset by (?^), which is  equiva-\n       lent  to  (?-imnrsx).  If  'a' is not followed by any of the upper case\n       letters shown above, it sets (or unsets) all the ASCII options.\n\n       PCRE2_EXTRA_ASCII_DIGIT  has  no  additional  effect   when   PCRE2_EX-\n       TRA_ASCII_POSIX  is  set,  but  including it in (?aP) means that (?-aP)\n       suppresses all ASCII restrictions for POSIX classes.\n\n       When one of these option changes occurs at top level (that is, not  in-\n       side  group parentheses), the change applies until a subsequent change,\n       or the end of the pattern. An option change within a group  (see  below\n       for  a  description of groups) affects only that part of the group that\n       follows it. At the end of the group these  options  are  reset  to  the\n       state they were before the group. For example,\n\n         (a(?i)b)c\n\n       matches  abc  and  aBc and no other strings (assuming PCRE2_CASELESS is\n       not set externally). Any changes made in one alternative  do  carry  on\n       into subsequent branches within the same group. For example,\n\n         (a(?i)b|c)\n\n       matches  \"ab\",  \"aB\",  \"c\",  and \"C\", even though when matching \"C\" the\n       first branch is abandoned before the option setting.  This  is  because\n       the  effects  of option settings happen at compile time. There would be\n       some very weird behaviour otherwise.\n\n       As a convenient shorthand, if any option settings are required  at  the\n       start  of a non-capturing group (see the next section), the option let-\n       ters may appear between the \"?\" and the \":\". Thus the two patterns\n\n         (?i:saturday|sunday)\n         (?:(?i)saturday|sunday)\n\n       match exactly the same set of strings.\n\n       Note: There are other PCRE2-specific options,  applying  to  the  whole\n       pattern,  which  can be set by the application when the compiling func-\n       tion is called. In addition, the pattern can  contain  special  leading\n       sequences  such  as (*CRLF) to override what the application has set or\n       what has been defaulted.  Details are given  in  the  section  entitled\n       \"Newline sequences\" above. There are also the (*UTF) and (*UCP) leading\n       sequences  that can be used to set UTF and Unicode property modes; they\n       are equivalent to setting the PCRE2_UTF and PCRE2_UCP options,  respec-\n       tively.  However,  the  application  can  set  the  PCRE2_NEVER_UTF  or\n       PCRE2_NEVER_UCP options, which lock out  the  use  of  the  (*UTF)  and\n       (*UCP) sequences.\n\n\nGROUPS\n\n       Groups  are  delimited  by  parentheses  (round brackets), which can be\n       nested.  Turning part of a pattern into a group does two things:\n\n       1. It localizes a set of alternatives. For example, the pattern\n\n         cat(aract|erpillar|)\n\n       matches \"cataract\", \"caterpillar\", or \"cat\". Without  the  parentheses,\n       it would match \"cataract\", \"erpillar\" or an empty string.\n\n       2.  It  creates a \"capture group\". This means that, when the whole pat-\n       tern matches, the portion of the subject string that matched the  group\n       is  passed back to the caller, separately from the portion that matched\n       the whole pattern.  (This applies  only  to  the  traditional  matching\n       function; the DFA matching function does not support capturing.)\n\n       Opening parentheses are counted from left to right (starting from 1) to\n       obtain  numbers for capture groups. For example, if the string \"the red\n       king\" is matched against the pattern\n\n         the ((red|white) (king|queen))\n\n       the captured substrings are \"red king\", \"red\", and \"king\", and are num-\n       bered 1, 2, and 3, respectively.\n\n       The fact that plain parentheses fulfil  two  functions  is  not  always\n       helpful.   There are often times when grouping is required without cap-\n       turing. If an opening parenthesis is followed by a question mark and  a\n       colon,  the  group  does  not do any capturing, and is not counted when\n       computing the number of any subsequent capture groups. For example,  if\n       the string \"the white queen\" is matched against the pattern\n\n         the ((?:red|white) (king|queen))\n\n       the captured substrings are \"white queen\" and \"queen\", and are numbered\n       1 and 2. The maximum number of capture groups is 65535.\n\n       As  a  convenient shorthand, if any option settings are required at the\n       start of a non-capturing group, the option letters may  appear  between\n       the \"?\" and the \":\". Thus the two patterns\n\n         (?i:saturday|sunday)\n         (?:(?i)saturday|sunday)\n\n       match exactly the same set of strings. Because alternative branches are\n       tried  from  left  to right, and options are not reset until the end of\n       the group is reached, an option setting in one branch does affect  sub-\n       sequent branches, so the above patterns match \"SUNDAY\" as well as \"Sat-\n       urday\".\n\n\nDUPLICATE GROUP NUMBERS\n\n       Perl 5.10 introduced a feature whereby each alternative in a group uses\n       the  same  numbers  for  its capturing parentheses. Such a group starts\n       with (?| and is itself a non-capturing  group.  For  example,  consider\n       this pattern:\n\n         (?|(Sat)ur|(Sun))day\n\n       Because  the two alternatives are inside a (?| group, both sets of cap-\n       turing parentheses are numbered one. Thus, when  the  pattern  matches,\n       you  can  look  at captured substring number one, whichever alternative\n       matched. This construct is useful when you want to  capture  part,  but\n       not all, of one of a number of alternatives. Inside a (?| group, paren-\n       theses  are  numbered as usual, but the number is reset at the start of\n       each branch. The numbers of any capturing parentheses that  follow  the\n       whole group start after the highest number used in any branch. The fol-\n       lowing example is taken from the Perl documentation. The numbers under-\n       neath show in which buffer the captured content will be stored.\n\n         # before  ---------------branch-reset----------- after\n         / ( a )  (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x\n         # 1            2         2  3        2     3     4\n\n       A  backreference  to a capture group uses the most recent value that is\n       set for the group. The following pattern matches \"abcabc\" or \"defdef\":\n\n         /(?|(abc)|(def))\\1/\n\n       In contrast, a subroutine call to a capture group always refers to  the\n       first  one  in the pattern with the given number. The following pattern\n       matches \"abcabc\" or \"defabc\":\n\n         /(?|(abc)|(def))(?1)/\n\n       A relative reference such as (?-1) is no different: it is just a conve-\n       nient way of computing an absolute group number.\n\n       If a condition test for a group's having matched refers to a non-unique\n       number, the test is true if any group with that number has matched.\n\n       An alternative approach to using this \"branch reset\" feature is to  use\n       duplicate named groups, as described in the next section.\n\n\nNAMED CAPTURE GROUPS\n\n       Identifying capture groups by number is simple, but it can be very hard\n       to  keep  track of the numbers in complicated patterns. Furthermore, if\n       an expression is modified, the numbers may change. To  help  with  this\n       difficulty,  PCRE2  supports the naming of capture groups. This feature\n       was not added to Perl until release 5.10. Python had the  feature  ear-\n       lier,  and PCRE1 introduced it at release 4.0, using the Python syntax.\n       PCRE2 supports both the Perl and the Python syntax.\n\n       In PCRE2,  a  capture  group  can  be  named  in  one  of  three  ways:\n       (?<name>...) or (?'name'...) as in Perl, or (?P<name>...) as in Python.\n       Names may be up to 128 code units long. When PCRE2_UTF is not set, they\n       may  contain  only  ASCII  alphanumeric characters and underscores, but\n       must start with a non-digit. When PCRE2_UTF is set, the syntax of group\n       names is extended to allow any Unicode letter or Unicode decimal digit.\n       In other words, group names must match one of these patterns:\n\n         ^[_A-Za-z][_A-Za-z0-9]*\\z   when PCRE2_UTF is not set\n         ^[_\\p{L}][_\\p{L}\\p{Nd}]*\\z  when PCRE2_UTF is set\n\n       References to capture groups from other parts of the pattern,  such  as\n       backreferences,  recursion,  and conditions, can all be made by name as\n       well as by number.\n\n       Named capture groups are allocated numbers as well as names, exactly as\n       if the names were not present. In both PCRE2 and Perl,  capture  groups\n       are  primarily  identified  by  numbers; any names are just aliases for\n       these numbers. The PCRE2 API provides function calls for extracting the\n       complete name-to-number translation table from a compiled  pattern,  as\n       well  as  convenience  functions  for extracting captured substrings by\n       name.\n\n       Warning: When more than one capture group has the same number,  as  de-\n       scribed in the previous section, a name given to one of them applies to\n       all  of them. Perl allows identically numbered groups to have different\n       names.  Consider this pattern, where there are two capture groups, both\n       numbered 1:\n\n         (?|(?<AA>aa)|(?<BB>bb))\n\n       Perl allows this, with both names AA and BB  as  aliases  of  group  1.\n       Thus, after a successful match, both names yield the same value (either\n       \"aa\" or \"bb\").\n\n       In  an attempt to reduce confusion, PCRE2 does not allow the same group\n       number to be associated with more than one name. The example above pro-\n       vokes a compile-time error. However, there is still  scope  for  confu-\n       sion. Consider this pattern:\n\n         (?|(?<AA>aa)|(bb))\n\n       Although the second group number 1 is not explicitly named, the name AA\n       is  still an alias for any group 1. Whether the pattern matches \"aa\" or\n       \"bb\", a reference by name to group AA yields the matched string.\n\n       By default, a name must be unique within a pattern, except that  dupli-\n       cate names are permitted for groups with the same number, for example:\n\n         (?|(?<AA>aa)|(?<AA>bb))\n\n       The duplicate name constraint can be disabled by setting the PCRE2_DUP-\n       NAMES option at compile time, or by the use of (?J) within the pattern,\n       as described in the section entitled \"Internal Option Setting\" above.\n\n       Duplicate  names  can be useful for patterns where only one instance of\n       the named capture group can match. Suppose you want to match  the  name\n       of  a  weekday,  either as a 3-letter abbreviation or as the full name,\n       and in both cases you want to extract the  abbreviation.  This  pattern\n       (ignoring the line breaks) does the job:\n\n         (?J)\n         (?<DN>Mon|Fri|Sun)(?:day)?|\n         (?<DN>Tue)(?:sday)?|\n         (?<DN>Wed)(?:nesday)?|\n         (?<DN>Thu)(?:rsday)?|\n         (?<DN>Sat)(?:urday)?\n\n       There  are five capture groups, but only one is ever set after a match.\n       The convenience functions for extracting the data by name  returns  the\n       substring  for  the first (and in this example, the only) group of that\n       name that matched. This saves searching to find which numbered group it\n       was. (An alternative way of solving this problem is to  use  a  \"branch\n       reset\" group, as described in the previous section.)\n\n       If  you make a backreference to a non-unique named group from elsewhere\n       in the pattern, the groups to which the name refers are checked in  the\n       order  in  which they appear in the overall pattern. The first one that\n       is set is used for the reference. For  example,  this  pattern  matches\n       both \"foofoo\" and \"barbar\" but not \"foobar\" or \"barfoo\":\n\n         (?J)(?:(?<n>foo)|(?<n>bar))\\k<n>\n\n\n       If you make a subroutine call to a non-unique named group, the one that\n       corresponds to the first occurrence of the name is used. In the absence\n       of duplicate numbers this is the one with the lowest number.\n\n       If you use a named reference in a condition test (see the section about\n       conditions below), either to check whether a capture group has matched,\n       or to check for recursion, all groups with the same name are tested. If\n       the  condition  is  true  for any one of them, the overall condition is\n       true. This is the same behaviour as testing by number. For further  de-\n       tails  of  the  interfaces  for  handling named capture groups, see the\n       pcre2api documentation.\n\n\nREPETITION\n\n       Repetition is specified by quantifiers, which may  follow  any  one  of\n       these items:\n\n         a literal data character\n         the dot metacharacter\n         the \\C escape sequence\n         the \\R escape sequence\n         the \\X escape sequence\n         any escape sequence that matches a single character\n         a character class\n         a backreference\n         a parenthesized group (including lookaround assertions)\n         a subroutine call (recursive or otherwise)\n\n       If a quantifier does not follow a repeatable item, an error occurs. The\n       general repetition quantifier specifies a minimum and maximum number of\n       permitted  matches  by  giving  two numbers in curly brackets (braces),\n       separated by a comma. The numbers must be  less  than  65536,  and  the\n       first must be less than or equal to the second. For example,\n\n         z{2,4}\n\n       matches  \"zz\",  \"zzz\",  or  \"zzzz\". A closing brace on its own is not a\n       special character. If the second number is omitted, but  the  comma  is\n       present,  there  is  no upper limit; if the second number and the comma\n       are both omitted, the quantifier specifies an exact number of  required\n       matches. Thus\n\n         [aeiou]{3,}\n\n       matches at least 3 successive vowels, but may match many more, whereas\n\n         \\d{8}\n\n       matches  exactly  8  digits.  If the first number is omitted, the lower\n       limit is taken as zero; in this case the upper limit must be present.\n\n         X{,4} is interpreted as X{0,4}\n\n       This is a change in behaviour that happened in Perl  5.34.0  and  PCRE2\n       10.43.  In  earlier  versions  such a sequence was not interpreted as a\n       quantifier. Other regular expression engines may behave either way.\n\n       If the characters that follow an opening brace do not match the  syntax\n       of a quantifier, the brace is taken as a literal character. In particu-\n       lar, this means that {,} is a literal string of three characters.\n\n       Note that not every opening brace is potentially the start of a quanti-\n       fier  because  braces  are  used  in  other  items such as \\N{U+345} or\n       \\k{name}.\n\n       In UTF modes, quantifiers apply to characters rather than to individual\n       code units. Thus, for example, \\x{100}{2} matches two characters,  each\n       of which is represented by a two-byte sequence in a UTF-8 string. Simi-\n       larly,  \\X{3} matches three Unicode extended grapheme clusters, each of\n       which may be several code units long (and  they  may  be  of  different\n       lengths).\n\n       The quantifier {0} is permitted, causing the expression to behave as if\n       the previous item and the quantifier were not present. This may be use-\n       ful  for  capture  groups that are referenced as subroutines from else-\n       where in the pattern (but see also the section entitled \"Defining  cap-\n       ture groups for use by reference only\" below). Except for parenthesized\n       groups,  items that have a {0} quantifier are omitted from the compiled\n       pattern.\n\n       For convenience, the three most common quantifiers have  single-charac-\n       ter abbreviations:\n\n         *    is equivalent to {0,}\n         +    is equivalent to {1,}\n         ?    is equivalent to {0,1}\n\n       It  is  possible  to construct infinite loops by following a group that\n       can match no characters with a quantifier that has no upper limit,  for\n       example:\n\n         (a?)*\n\n       Earlier  versions  of  Perl  and PCRE1 used to give an error at compile\n       time for such patterns. However, because there are cases where this can\n       be useful, such patterns are now accepted, but whenever an iteration of\n       such a group matches no characters, matching moves on to the next  item\n       in  the  pattern  instead  of repeatedly matching an empty string. This\n       does not prevent backtracking into any of the iterations  if  a  subse-\n       quent item fails to match.\n\n       By  default,  quantifiers  are \"greedy\", that is, they match as much as\n       possible (up to the maximum number of permitted  repetitions),  without\n       causing  the  rest of the pattern to fail. The classic example of where\n       this gives problems is in trying to match comments in C programs. These\n       appear between /* and */ and within the comment,  individual  *  and  /\n       characters  may  appear. An attempt to match C comments by applying the\n       pattern\n\n         /\\*.*\\*/\n\n       to the string\n\n         /* first comment */  not comment  /* second comment */\n\n       fails, because it matches the entire string owing to the greediness  of\n       the  .*  item. However, if a quantifier is followed by a question mark,\n       it ceases to be greedy, and instead matches the minimum number of times\n       possible, so the pattern\n\n         /\\*.*?\\*/\n\n       does the right thing with C comments. The meaning of the various  quan-\n       tifiers is not otherwise changed, just the preferred number of matches.\n       Do  not  confuse this use of question mark with its use as a quantifier\n       in its own right.  Because it has two uses,  it  can  sometimes  appear\n       doubled, as in\n\n         \\d??\\d\n\n       which matches one digit by preference, but can match two if that is the\n       only way the rest of the pattern matches.\n\n       If the PCRE2_UNGREEDY option is set (an option that is not available in\n       Perl),  the  quantifiers are not greedy by default, but individual ones\n       can be made greedy by following them with a  question  mark.  In  other\n       words, it inverts the default behaviour.\n\n       When  a  parenthesized  group is quantified with a minimum repeat count\n       that is greater than 1 or with a limited maximum, more  memory  is  re-\n       quired for the compiled pattern, in proportion to the size of the mini-\n       mum or maximum.\n\n       If  a  pattern  starts  with  .*  or  .{0,} and the PCRE2_DOTALL option\n       (equivalent to Perl's /s) is set, thus allowing the dot to  match  new-\n       lines,  the  pattern  is  implicitly anchored, because whatever follows\n       will be tried against every character position in the  subject  string,\n       so  there is no point in retrying the overall match at any position af-\n       ter the first. PCRE2 normally treats such a pattern as though  it  were\n       preceded by \\A.\n\n       In  cases  where  it  is known that the subject string contains no new-\n       lines, it is worth setting PCRE2_DOTALL in order to obtain  this  opti-\n       mization, or alternatively, using ^ to indicate anchoring explicitly.\n\n       However,  there  are  some cases where the optimization cannot be used.\n       When .*  is inside capturing parentheses that  are  the  subject  of  a\n       backreference  elsewhere  in the pattern, a match at the start may fail\n       where a later one succeeds. Consider, for example:\n\n         (.*)abc\\1\n\n       If the subject is \"xyz123abc123\" the match point is the fourth  charac-\n       ter. For this reason, such a pattern is not implicitly anchored.\n\n       Another  case where implicit anchoring is not applied is when the lead-\n       ing .* is inside an atomic group. Once again, a match at the start  may\n       fail where a later one succeeds. Consider this pattern:\n\n         (?>.*?a)b\n\n       It  matches \"ab\" in the subject \"aab\". The use of the backtracking con-\n       trol verbs (*PRUNE) and (*SKIP) also disable this optimization.  To  do\n       so  explicitly, either pass the compile option PCRE2_NO_DOTSTAR_ANCHOR,\n       or call pcre2_set_optimize() with a PCRE2_DOTSTAR_ANCHOR_OFF directive.\n\n       When a capture group is repeated, the value captured is  the  substring\n       that matched the final iteration. For example, after\n\n         (tweedle[dume]{3}\\s*)+\n\n       has matched \"tweedledum tweedledee\" the value of the captured substring\n       is  \"tweedledee\". However, if there are nested capture groups, the cor-\n       responding captured values may have been set  in  previous  iterations.\n       For example, after\n\n         (a|(b))+\n\n       matches \"aba\" the value of the second captured substring is \"b\".\n\n\nATOMIC GROUPING AND POSSESSIVE QUANTIFIERS\n\n       With  both  maximizing (\"greedy\") and minimizing (\"ungreedy\" or \"lazy\")\n       repetition, failure of what follows normally causes the  repeated  item\n       to  be  re-evaluated to see if a different number of repeats allows the\n       rest of the pattern to match. Sometimes it is useful to  prevent  this,\n       either  to  change the nature of the match, or to cause it fail earlier\n       than it otherwise might, when the author of the pattern knows there  is\n       no point in carrying on.\n\n       Consider,  for  example, the pattern \\d+foo when applied to the subject\n       line\n\n         123456bar\n\n       After matching all 6 digits and then failing to match \"foo\", the normal\n       action of the matcher is to try again with only 5 digits  matching  the\n       \\d+  item,  and  then  with  4,  and  so on, before ultimately failing.\n       \"Atomic grouping\" (a term taken from Jeffrey  Friedl's  book)  provides\n       the means for specifying that once a group has matched, it is not to be\n       re-evaluated in this way.\n\n       If  we  use atomic grouping for the previous example, the matcher gives\n       up immediately on failing to match \"foo\" the first time.  The  notation\n       is a kind of special parenthesis, starting with (?> as in this example:\n\n         (?>\\d+)foo\n\n       Perl  5.28  introduced an experimental alphabetic form starting with (*\n       which may be easier to remember:\n\n         (*atomic:\\d+)foo\n\n       This kind of parenthesized group \"locks up\" the part of the pattern  it\n       contains once it has matched, and a failure further into the pattern is\n       prevented  from  backtracking into it. Backtracking past it to previous\n       items, however, works as normal.\n\n       An alternative description is that a group of this type matches exactly\n       the string of characters that an  identical  standalone  pattern  would\n       match, if anchored at the current point in the subject string.\n\n       Atomic  groups  are  not capture groups. Simple cases such as the above\n       example can be thought of as a  maximizing  repeat  that  must  swallow\n       everything  it can.  So, while both \\d+ and \\d+? are prepared to adjust\n       the number of digits they match in order to make the rest of  the  pat-\n       tern match, (?>\\d+) can only match an entire sequence of digits.\n\n       Atomic  groups in general can of course contain arbitrarily complicated\n       expressions, and can be nested. However, when the contents of an atomic\n       group is just a single repeated item, as in the example above,  a  sim-\n       pler  notation, called a \"possessive quantifier\" can be used. This con-\n       sists of an additional + character following a quantifier.  Using  this\n       notation, the previous example can be rewritten as\n\n         \\d++foo\n\n       Note that a possessive quantifier can be used with an entire group, for\n       example:\n\n         (abc|xyz){2,3}+\n\n       Possessive  quantifiers are always greedy; the setting of the PCRE2_UN-\n       GREEDY option is ignored. They are a convenient notation for  the  sim-\n       pler  forms  of  atomic  group.  However, there is no difference in the\n       meaning of a possessive quantifier and  the  equivalent  atomic  group,\n       though  there  may  be a performance difference; possessive quantifiers\n       should be slightly faster.\n\n       The possessive quantifier syntax is an extension to the Perl  5.8  syn-\n       tax.   Jeffrey  Friedl  originated the idea (and the name) in the first\n       edition of his book. Mike McCloskey liked it, so implemented it when he\n       built Sun's Java package, and PCRE1 copied it from there. It found  its\n       way into Perl at release 5.10.\n\n       PCRE2  has  an  optimization  that automatically \"possessifies\" certain\n       simple pattern constructs. For example, the sequence A+B is treated  as\n       A++B  because  there is no point in backtracking into a sequence of A's\n       when  B  must  follow.   This  feature   can   be   disabled   by   the\n       PCRE2_NO_AUTO_POSSESS  option,  by  calling pcre2_set_optimize() with a\n       PCRE2_AUTO_POSSESS_OFF directive,  or  by  starting  the  pattern  with\n       (*NO_AUTO_POSSESS).\n\n       When a pattern contains an unlimited repeat inside a group that can it-\n       self  be  repeated  an  unlimited number of times, the use of an atomic\n       group is the only way to avoid some failing matches taking a very  long\n       time indeed. The pattern\n\n         (\\D+|<\\d+>)*[!?]\n\n       matches  an  unlimited number of substrings that either consist of non-\n       digits, or digits enclosed in <>, followed by either ! or  ?.  When  it\n       matches, it runs quickly. However, if it is applied to\n\n         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n       it  takes  a  long  time  before reporting failure. This is because the\n       string can be divided between the internal \\D+ repeat and the  external\n       *  repeat in a large number of ways, and all have to be tried. (The ex-\n       ample uses [!?] rather than a single character at the end, because both\n       PCRE2 and Perl have an optimization that allows for fast failure when a\n       single character is used. They remember the last single character  that\n       is  required  for  a  match, and fail early if it is not present in the\n       string.) If the pattern is changed so that it  uses  an  atomic  group,\n       like this:\n\n         ((?>\\D+)|<\\d+>)*[!?]\n\n       sequences of non-digits cannot be broken, and failure happens quickly.\n\n\nBACKREFERENCES\n\n       Outside a character class, a backslash followed by a digit greater than\n       0  (and  possibly further digits) is a backreference to a capture group\n       earlier (that is, to its left) in the pattern, provided there have been\n       that many previous capture groups.\n\n       However, if the decimal number following the backslash is less than  8,\n       it  is  always  taken  as  a backreference, and causes an error only if\n       there are not that many capture groups in the entire pattern. In  other\n       words, the group that is referenced need not be to the left of the ref-\n       erence  for numbers less than 8. A \"forward backreference\" of this type\n       can make sense when a repetition is involved and the group to the right\n       has participated in an earlier iteration.\n\n       It is not possible to have a numerical  \"forward  backreference\"  to  a\n       group  whose  number  is 8 or more using this syntax because a sequence\n       such as \\50 is interpreted as a character defined  in  octal.  See  the\n       subsection entitled \"Non-printing characters\" above for further details\n       of  the  handling of digits following a backslash. Other forms of back-\n       referencing do not suffer from this restriction. In  particular,  there\n       is no problem when named capture groups are used (see below).\n\n       Another  way  of  avoiding  the ambiguity inherent in the use of digits\n       following a backslash is to use the \\g  escape  sequence.  This  escape\n       must be followed by a signed or unsigned number, optionally enclosed in\n       braces. These examples are all identical:\n\n         (ring), \\1\n         (ring), \\g1\n         (ring), \\g{1}\n\n       An  unsigned number specifies an absolute reference without the ambigu-\n       ity that is present in the older syntax. It is also useful when literal\n       digits follow the reference. A signed number is a  relative  reference.\n       Consider this example:\n\n         (abc(def)ghi)\\g{-1}\n\n       The sequence \\g{-1} is a reference to the capture group whose number is\n       one  less  than  the number of the next group to be started, so in this\n       example (where the next group would be numbered 3) is it equivalent  to\n       \\2,  and  \\g{-2} would be equivalent to \\1. Note that if this construct\n       is inside a capture group, that group is included in the count,  so  in\n       this example \\g{-2} also refers to group 1:\n\n         (A)(\\g{-2}B)\n\n       The  use  of  relative  references can be helpful in long patterns, and\n       also in patterns that are created by joining  together  fragments  that\n       contain references within themselves.\n\n       The  sequence  \\g{+1}  is a reference to the next capture group that is\n       started after this item, and \\g{+2} refers to the one after  that,  and\n       so  on.  This  kind of forward reference can be useful in patterns that\n       repeat. Perl does not support the use of + in this way.\n\n       A backreference matches whatever actually  most  recently  matched  the\n       capture  group  in  the current subject string, rather than anything at\n       all that matches the group (see \"Groups as subroutines\" below for a way\n       of doing that). So the pattern\n\n         (sens|respons)e and \\1ibility\n\n       matches \"sense and sensibility\" and \"response and responsibility\",  but\n       not  \"sense and responsibility\". If caseful matching is in force at the\n       time of the backreference, the case of letters is relevant.  For  exam-\n       ple,\n\n         ((?i)rah)\\s+\\1\n\n       matches  \"rah  rah\"  and  \"RAH RAH\", but not \"RAH rah\", even though the\n       original capture group is matched caselessly.\n\n       There are several different ways of  writing  backreferences  to  named\n       capture  groups.  The  .NET  syntax  is  \\k{name}, the Python syntax is\n       (?=name), and the original Perl syntax is \\k<name> or \\k'name'. All  of\n       these  are  now  supported  by both Perl and PCRE2. Perl 5.10's unified\n       backreference syntax, in which \\g can be  used  for  both  numeric  and\n       named  references,  is  also  supported by PCRE2.  We could rewrite the\n       above example in any of the following ways:\n\n         (?<p1>(?i)rah)\\s+\\k<p1>\n         (?'p1'(?i)rah)\\s+\\k{p1}\n         (?P<p1>(?i)rah)\\s+(?P=p1)\n         (?<p1>(?i)rah)\\s+\\g{p1}\n\n       A capture group that is referenced by name may appear  in  the  pattern\n       before or after the reference.\n\n       There  may be more than one backreference to the same group. If a group\n       has not actually been used in a particular match, backreferences to  it\n       always fail by default. For example, the pattern\n\n         (a|(bc))\\2\n\n       always  fails  if  it starts to match \"a\" rather than \"bc\". However, if\n       the PCRE2_MATCH_UNSET_BACKREF option is set at compile time, a backref-\n       erence to an unset value matches an empty string.\n\n       Because there may be many capture groups in a pattern, all digits  fol-\n       lowing  a backslash are taken as part of a potential backreference num-\n       ber. If the pattern continues with a digit  character,  some  delimiter\n       must  be  used to terminate the backreference. If the PCRE2_EXTENDED or\n       PCRE2_EXTENDED_MORE option is set, this can be white space.  Otherwise,\n       the \\g{} syntax or an empty comment (see \"Comments\" below) can be used.\n\n   Recursive backreferences\n\n       A  backreference  that occurs inside the group to which it refers fails\n       when the group is first used, so, for  example,  (a\\1)  never  matches.\n       However,  such references can be useful inside repeated groups. For ex-\n       ample, the pattern\n\n         (a|b\\1)+\n\n       matches any number of \"a\"s and also \"aba\", \"ababbaa\" etc. At each iter-\n       ation of the group, the backreference matches the character string cor-\n       responding to the previous iteration. In order for this  to  work,  the\n       pattern  must  be  such that the first iteration does not need to match\n       the backreference. This can be done using alternation, as in the  exam-\n       ple above, or by a quantifier with a minimum of zero.\n\n       For versions of PCRE2 less than 10.25, backreferences of this type used\n       to  cause  the  group  that  they  reference to be treated as an atomic\n       group.  This restriction no longer applies, and backtracking into  such\n       groups can occur as normal.\n\n\nASSERTIONS\n\n       An  assertion  is a test that does not consume any characters. The test\n       must succeed for the match to continue. The simple assertions coded  as\n       \\b, \\B, \\A, \\G, \\Z, \\z, ^ and $ are described above.\n\n       More  complicated  assertions  are  coded  as  parenthesized groups. If\n       matching such a group succeeds, matching continues after it,  but  with\n       the matching position in the subject string reset to what it was before\n       the assertion was processed.\n\n       A  special  kind  of  assertion,  called  a \"scan substring\" assertion,\n       matches a subpattern against a previously captured substring.  This  is\n       described in the section entitled \"Scan substring assertions\" below. It\n       is a PCRE2 extension, not compatible with Perl.\n\n       The other goup-based assertions are of two kinds: those that look ahead\n       of  the current position in the subject string, and those that look be-\n       hind it, and in each case an assertion may be positive (must match  for\n       the assertion to be true) or negative (must not match for the assertion\n       to be true).\n\n       The  Perl-compatible  lookaround assertions are atomic. If an assertion\n       is true, but there is a subsequent matching failure, there is no  back-\n       tracking  into  the assertion. However, there are some cases where non-\n       atomic assertions can be useful. PCRE2 has some support for these,  de-\n       scribed in the section entitled \"Non-atomic assertions\" below, but they\n       are not Perl-compatible.\n\n       A  lookaround  assertion  may  appear as the condition in a conditional\n       group (see below). In this case, the result of matching  the  assertion\n       determines which branch of the condition is followed.\n\n       Assertion  groups are not capture groups. If an assertion contains cap-\n       ture groups within it, these are counted for the purposes of  numbering\n       the  capture  groups in the whole pattern. Within each branch of an as-\n       sertion, locally captured substrings may be  referenced  in  the  usual\n       way.  For  example,  a  sequence such as (.)\\g{-1} can be used to check\n       that two adjacent characters are the same.\n\n       When a branch within an assertion fails to match, any  substrings  that\n       were  captured  are  discarded (as happens with any pattern branch that\n       fails to match). A  negative  assertion  is  true  only  when  all  its\n       branches fail to match; this means that no captured substrings are ever\n       retained  after a successful negative assertion. When an assertion con-\n       tains a matching branch, what happens depends on the type of assertion.\n\n       For a positive assertion, internally captured substrings  in  the  suc-\n       cessful  branch are retained, and matching continues with the next pat-\n       tern item after the assertion. For a  negative  assertion,  a  matching\n       branch  means  that  the assertion is not true. If such an assertion is\n       being used as a condition in a conditional group (see below),  captured\n       substrings  are  retained,  because  matching  continues  with the \"no\"\n       branch of the condition. For other failing negative assertions, control\n       passes to the previous backtracking point, thus discarding any captured\n       strings within the assertion.\n\n       Most assertion groups may be repeated; though it makes no sense to  as-\n       sert the same thing several times, the side effect of capturing in pos-\n       itive assertions may occasionally be useful. However, an assertion that\n       forms  the  condition  for  a  conditional group may not be quantified.\n       PCRE2 used to restrict the repetition of assertions, but  from  release\n       10.35  the  only restriction is that an unlimited maximum repetition is\n       changed to be one more than the minimum. For example, {3,}  is  treated\n       as {3,4}.\n\n   Alphabetic assertion names\n\n       Traditionally,  symbolic  sequences such as (?= and (?<= have been used\n       to specify lookaround assertions. Perl 5.28 introduced some  experimen-\n       tal alphabetic alternatives which might be easier to remember. They all\n       start  with  (* instead of (? and must be written using lower case let-\n       ters. PCRE2 supports the following synonyms:\n\n         (*positive_lookahead:  or (*pla: is the same as (?=\n         (*negative_lookahead:  or (*nla: is the same as (?!\n         (*positive_lookbehind: or (*plb: is the same as (?<=\n         (*negative_lookbehind: or (*nlb: is the same as (?<!\n\n       For example, (*pla:foo) is the same assertion as (?=foo). In  the  fol-\n       lowing  sections, the various assertions are described using the origi-\n       nal symbolic forms.\n\n   Lookahead assertions\n\n       Lookahead assertions start with (?= for positive assertions and (?! for\n       negative assertions. For example,\n\n         \\w+(?=;)\n\n       matches a word followed by a semicolon, but does not include the  semi-\n       colon in the match, and\n\n         foo(?!bar)\n\n       matches  any  occurrence  of  \"foo\" that is not followed by \"bar\". Note\n       that the apparently similar pattern\n\n         (?!foo)bar\n\n       does not find an occurrence of \"bar\"  that  is  preceded  by  something\n       other  than \"foo\"; it finds any occurrence of \"bar\" whatsoever, because\n       the assertion (?!foo) is always true when the next three characters are\n       \"bar\". A lookbehind assertion is needed to achieve the other effect.\n\n       If you want to force a matching failure at some point in a pattern, the\n       most convenient way to do it is with (?!) because an empty  string  al-\n       ways  matches,  so  an assertion that requires there not to be an empty\n       string must always fail.  The backtracking control verb (*FAIL) or (*F)\n       is a synonym for (?!).\n\n   Lookbehind assertions\n\n       Lookbehind assertions start with (?<= for positive assertions and  (?<!\n       for negative assertions. For example,\n\n         (?<!foo)bar\n\n       does  find  an  occurrence  of \"bar\" that is not preceded by \"foo\". The\n       contents of a lookbehind assertion are restricted such that there  must\n       be  a known maximum to the lengths of all the strings it matches. There\n       are two cases:\n\n       If every top-level alternative matches a fixed length, for example\n\n         (?<=colour|color)\n\n       there is a limit of 65535 characters to the lengths, which do not  have\n       to  be the same, as this example demonstrates. This is the only kind of\n       lookbehind supported by PCRE2 versions earlier than 10.43  and  by  the\n       alternative matching function pcre2_dfa_match().\n\n       In  PCRE2 10.43 and later, pcre2_match() supports lookbehind assertions\n       in which one or more top-level alternatives can  match  more  than  one\n       string length, for example\n\n         (?<=colou?r)\n\n       The maximum matching length for any branch of the lookbehind is limited\n       to  a value set by the calling program (default 255 characters). Unlim-\n       ited repetition (for example \\d*) is not supported. In some cases,  the\n       escape  sequence \\K (see above) can be used instead of a lookbehind as-\n       sertion at the start of a pattern to get round  the  length  limit  re-\n       striction.\n\n       In  UTF-8  and  UTF-16 modes, PCRE2 does not allow the \\C escape (which\n       matches a single code unit even in a UTF mode) to appear in  lookbehind\n       assertions,  because  it makes it impossible to calculate the length of\n       the lookbehind. The \\X and \\R escapes, which can match  different  num-\n       bers of code units, are never permitted in lookbehinds.\n\n       \"Subroutine\"  calls  (see below) such as (?2) or (?&X) are permitted in\n       lookbehinds, as long as the called capture  group  matches  a  limited-\n       length  string. However, recursion, that is, a \"subroutine\" call into a\n       group that is already active, is not supported.\n\n       PCRE2 supports backreferences in lookbehinds, but only if certain  con-\n       ditions  are met. The PCRE2_MATCH_UNSET_BACKREF option must not be set,\n       there must be no use of (?| in the pattern (it creates duplicate  group\n       numbers), and if the backreference is by name, the name must be unique.\n       Of course, the referenced group must itself match a limited length sub-\n       string.  The  following  pattern  matches words containing at least two\n       characters that begin and end with the same character:\n\n          \\b(\\w)\\w++(?<=\\1)\n\n       Possessive quantifiers can be used in conjunction with  lookbehind  as-\n       sertions  to  specify efficient matching at the end of subject strings.\n       Consider a simple pattern such as\n\n         abcd$\n\n       when applied to a long string that does  not  match.  Because  matching\n       proceeds  from  left to right, PCRE2 will look for each \"a\" in the sub-\n       ject and then see if what follows matches the rest of the  pattern.  If\n       the pattern is specified as\n\n         ^.*abcd$\n\n       the  initial .* matches the entire string at first, but when this fails\n       (because there is no following \"a\"), it backtracks to match all but the\n       last character, then all but the last two characters, and so  on.  Once\n       again  the search for \"a\" covers the entire string, from right to left,\n       so we are no better off. However, if the pattern is written as\n\n         ^.*+(?<=abcd)\n\n       there can be no backtracking for the .*+ item because of the possessive\n       quantifier; it can match only the entire string. The subsequent lookbe-\n       hind assertion does a single test on the last four  characters.  If  it\n       fails,  the  match  fails  immediately. For long strings, this approach\n       makes a significant difference to the processing time.\n\n   Using multiple assertions\n\n       Several assertions (of any sort) may occur in succession. For example,\n\n         (?<=\\d{3})(?<!999)foo\n\n       matches \"foo\" preceded by three digits that are not \"999\". Notice  that\n       each  of  the  assertions is applied independently at the same point in\n       the subject string. First there is a  check  that  the  previous  three\n       characters  are  all  digits,  and  then there is a check that the same\n       three characters are not \"999\".  This pattern does not match \"foo\" pre-\n       ceded by six characters, the first of which are  digits  and  the  last\n       three  of  which  are not \"999\". For example, it doesn't match \"123abc-\n       foo\". A pattern to do that is\n\n         (?<=\\d{3}...)(?<!999)foo\n\n       This time the first assertion looks at the  preceding  six  characters,\n       checking that the first three are digits, and then the second assertion\n       checks that the preceding three characters are not \"999\".\n\n       Assertions can be nested in any combination. For example,\n\n         (?<=(?<!foo)bar)baz\n\n       matches  an occurrence of \"baz\" that is preceded by \"bar\" which in turn\n       is not preceded by \"foo\", while\n\n         (?<=\\d{3}(?!999)...)foo\n\n       is another pattern that matches \"foo\" preceded by three digits and  any\n       three characters that are not \"999\".\n\n\nNON-ATOMIC ASSERTIONS\n\n       Traditional  lookaround assertions are atomic. That is, if an assertion\n       is true, but there is a subsequent matching failure, there is no  back-\n       tracking  into  the assertion. However, there are some cases where non-\n       atomic positive assertions can be useful. PCRE2  provides  these  using\n       the following syntax:\n\n         (*non_atomic_positive_lookahead:  or (*napla: or (?*\n         (*non_atomic_positive_lookbehind: or (*naplb: or (?<*\n\n       Consider  the  problem  of finding the right-most word in a string that\n       also appears earlier in the string, that is, it must  appear  at  least\n       twice  in  total.  This pattern returns the required result as captured\n       substring 1:\n\n         ^(?x)(*napla: .* \\b(\\w++)) (?> .*? \\b\\1\\b ){2}\n\n       For a subject such as \"word1 word2 word3 word2 word3 word4\" the  result\n       is  \"word3\".  How does it work? At the start, ^(?x) anchors the pattern\n       and sets the \"x\" option, which causes white space (introduced for read-\n       ability) to be ignored. Inside the assertion, the greedy  .*  at  first\n       consumes the entire string, but then has to backtrack until the rest of\n       the  assertion can match a word, which is captured by group 1. In other\n       words, when the assertion first succeeds, it  captures  the  right-most\n       word in the string.\n\n       The  current  matching point is then reset to the start of the subject,\n       and the rest of the pattern match checks for  two  occurrences  of  the\n       captured  word,  using  an  ungreedy .*? to scan from the left. If this\n       succeeds, we are done, but if the last word in the string does not  oc-\n       cur  twice,  this  part  of  the pattern fails. If a traditional atomic\n       lookahead (?= or (*pla: had been used, the assertion could not  be  re-\n       entered, and the whole match would fail. The pattern would succeed only\n       if the very last word in the subject was found twice.\n\n       Using  a  non-atomic  lookahead, however, means that when the last word\n       does not occur twice in the string, the  lookahead  can  backtrack  and\n       find  the second-last word, and so on, until either the match succeeds,\n       or all words have been tested.\n\n       Two conditions must be met for a non-atomic assertion to be useful: the\n       contents of one or more capturing groups must change after a  backtrack\n       into  the  assertion,  and  there  must be a backreference to a changed\n       group later in the pattern. If this is not the case, the  rest  of  the\n       pattern  match  fails exactly as before because nothing has changed, so\n       using a non-atomic assertion just wastes resources.\n\n       There is one exception to backtracking into a non-atomic assertion.  If\n       an  (*ACCEPT)  control verb is triggered, the assertion succeeds atomi-\n       cally. That is, a subsequent match failure cannot  backtrack  into  the\n       assertion.\n\n       Non-atomic  assertions  are  not  supported by the alternative matching\n       function pcre2_dfa_match(). They are supported by JIT, but only if they\n       do not contain any control verbs such as (*ACCEPT). (This may change in\n       future). Note that assertions that appear as conditions for conditional\n       groups (see below) must be atomic.\n\n\nSCAN SUBSTRING ASSERTIONS\n\n       A special kind of assertion, not compatible with Perl, makes it  possi-\n       ble to check the contents of a captured substring by matching it with a\n       subpattern.   Because this involves capturing, this feature is not sup-\n       ported by pcre2_dfa_match().\n\n       A scan substring assertion starts with the  sequence  (*scan_substring:\n       or (*scs: which is followed by a list of substring numbers (absolute or\n       relative)  and/or  substring  names  enclosed in single quotes or angle\n       brackets, all within parentheses. The rest of the item is  the  subpat-\n       tern that is applied to the substring, as shown in these examples:\n\n         (*scan_substring:(1)...)\n         (*scs:(-2)...)\n         (*scs:('AB')...)\n         (*scs:(1,'AB',-2)...)\n\n       The  list  of  groups is checked in the order they are given, and it is\n       the contents of the first one that is found to be set that are scanned.\n       When PCRE2_DUPNAMES is set and there are  ambiguous  group  names,  all\n       groups  with  the same name are checked in numerical order. A scan sub-\n       string assertion fails if none of the groups it  references  have  been\n       set.\n\n       The pattern match on the substring is always anchored, that is, it must\n       match  from  the  start of the substring. There is no \"bumpalong\" if it\n       does not match at the start. The end of the subject is temporarily  re-\n       set  to be the end of the substring, so \\Z, \\z, and $ will match there.\n       However, the start of the subject is  not  reset.  This  means  that  ^\n       matches only if the substring is actually at the start of the main sub-\n       ject,  but  it also means that lookbehind assertions into what precedes\n       the substring are possible.\n\n       Here is a very simple example: find a word that contains the  rare  (in\n       English) sequence of letters \"rh\" not at the start:\n\n         \\b(\\w++)(*scs:(1).+rh)\n\n       The  first  group  captures  a word which is then scanned by the second\n       group.  This example does not actually need this  heavyweight  feature;\n       the same match can be achieved with:\n\n         \\b\\w+?rh\\w*\\b\n\n       When  things  are  more  complicated, however, scanning a captured sub-\n       string can be a useful way to describe the required match. For  exmple,\n       there  is  a  rather  complicated  pattern  in the PCRE2 test data that\n       checks an entire subject string for a palindrome, that is, the sequence\n       of letters is the same in both directions. Suppose you want  to  search\n       for individual words of two or more characters such as \"level\" that are\n       palindromes:\n\n         (\\b\\w{2,}+\\b)(*scs:(1)...palindrome-matching-pattern...)\n\n       Within a substring scanning subpattern, references to other groups work\n       as  normal.  Capturing  groups may appear, and will retain their values\n       during ongoing matching if the assertion succeeds.\n\n\nSCRIPT RUNS\n\n       In concept, a script run is a sequence of characters that are all  from\n       the  same  Unicode script such as Latin or Greek. However, because some\n       scripts are commonly used together, and because  some  diacritical  and\n       other  marks  are  used  with  multiple scripts, it is not that simple.\n       There is a full description of the rules that PCRE2 uses in the section\n       entitled \"Script Runs\" in the pcre2unicode documentation.\n\n       If part of a pattern is enclosed between (*script_run: or (*sr:  and  a\n       closing  parenthesis,  it  fails  if the sequence of characters that it\n       matches are not a script run. After a failure, normal backtracking  oc-\n       curs.  Script runs can be used to detect spoofing attacks using charac-\n       ters that look the same, but are from  different  scripts.  The  string\n       \"paypal.com\"  is an infamous example, where the letters could be a mix-\n       ture of Latin and Cyrillic. This pattern ensures that the matched char-\n       acters in a sequence of non-spaces that follow white space are a script\n       run:\n\n         \\s+(*sr:\\S+)\n\n       To be sure that they are all from the Latin  script  (for  example),  a\n       lookahead can be used:\n\n         \\s+(?=\\p{Latin})(*sr:\\S+)\n\n       This works as long as the first character is expected to be a character\n       in  that  script,  and  not (for example) punctuation, which is allowed\n       with any script. If this is not the case, a more creative lookahead  is\n       needed.  For  example, if digits, underscore, and dots are permitted at\n       the start:\n\n         \\s+(?=[0-9_.]*\\p{Latin})(*sr:\\S+)\n\n\n       In many cases, backtracking into a script run pattern fragment  is  not\n       desirable.  The  script run can employ an atomic group to prevent this.\n       Because this is a common requirement, a shorthand notation is  provided\n       by (*atomic_script_run: or (*asr:\n\n         (*asr:...) is the same as (*sr:(?>...))\n\n       Note that the atomic group is inside the script run. Putting it outside\n       would not prevent backtracking into the script run pattern.\n\n       Support  for  script runs is not available if PCRE2 is compiled without\n       Unicode support. A compile-time error is given if any of the above con-\n       structs is encountered. Script runs are not supported by the  alternate\n       matching  function,  pcre2_dfa_match() because they use the same mecha-\n       nism as capturing parentheses.\n\n       Warning: The (*ACCEPT) control verb (see  below)  should  not  be  used\n       within a script run group, because it causes an immediate exit from the\n       group, bypassing the script run checking.\n\n\nCONDITIONAL GROUPS\n\n       It is possible to cause the matching process to obey a pattern fragment\n       conditionally or to choose between two alternative fragments, depending\n       on  the result of an assertion, or whether a specific capture group has\n       already been matched. The two possible forms of conditional group are:\n\n         (?(condition)yes-pattern)\n         (?(condition)yes-pattern|no-pattern)\n\n       If the condition is satisfied, the yes-pattern is used;  otherwise  the\n       no-pattern  (if present) is used. An absent no-pattern is equivalent to\n       an empty string (it always matches). If there are more than two  alter-\n       natives  in the group, a compile-time error occurs. Each of the two al-\n       ternatives may itself contain nested groups of any form, including con-\n       ditional groups; the restriction to two alternatives  applies  only  at\n       the  level of the condition itself. This pattern fragment is an example\n       where the alternatives are complex:\n\n         (?(1) (A|B|C) | (D | (?(2)E|F) | E) )\n\n\n       There are five kinds of condition: references to capture groups, refer-\n       ences to recursion, two pseudo-conditions called  DEFINE  and  VERSION,\n       and assertions.\n\n   Checking for a used capture group by number\n\n       If  the  text between the parentheses consists of a sequence of digits,\n       the condition is true if a capture group of that number has  previously\n       matched.  If  there is more than one capture group with the same number\n       (see the earlier section about duplicate group numbers), the  condition\n       is  true if any of them have matched. An alternative notation, which is\n       a PCRE2 extension, not supported by Perl, is to precede the digits with\n       a plus or minus sign. In this case, the group number is relative rather\n       than absolute. The most recently opened capture group (which  could  be\n       enclosing  this  condition)  can be referenced by (?(-1), the next most\n       recent by (?(-2), and so on. Inside loops it can also make sense to re-\n       fer to subsequent groups.  The next capture group to be opened  can  be\n       referenced  as  (?(+1), and so on. The value zero in any of these forms\n       is not used; it provokes a compile-time error.\n\n       Consider the following pattern, which  contains  non-significant  white\n       space  to  make it more readable (assume the PCRE2_EXTENDED option) and\n       to divide it into three parts for ease of discussion:\n\n         ( \\( )?    [^()]+    (?(1) \\) )\n\n       The first part matches an optional opening  parenthesis,  and  if  that\n       character is present, sets it as the first captured substring. The sec-\n       ond  part  matches one or more characters that are not parentheses. The\n       third part is a conditional group that tests whether or not  the  first\n       capture  group  matched. If it did, that is, if subject started with an\n       opening parenthesis, the condition is true, and so the  yes-pattern  is\n       executed  and  a  closing parenthesis is required. Otherwise, since no-\n       pattern is not present, the conditional group matches nothing. In other\n       words, this pattern matches a sequence of  non-parentheses,  optionally\n       enclosed in parentheses.\n\n       If  you  were  embedding  this pattern in a larger one, you could use a\n       relative reference:\n\n         ...other stuff... ( \\( )?    [^()]+    (?(-1) \\) ) ...\n\n       This makes the fragment independent of the parentheses  in  the  larger\n       pattern.\n\n   Checking for a used capture group by name\n\n       Perl  uses  the  syntax  (?(<name>)...) or (?('name')...) to test for a\n       used capture group by name. For compatibility with earlier versions  of\n       PCRE1,  which had this facility before Perl, the syntax (?(name)...) is\n       also recognized.  Note, however, that undelimited names  consisting  of\n       the  letter  R followed by digits are ambiguous (see the following sec-\n       tion). Rewriting the above example to use a named group gives this:\n\n         (?<OPEN> \\( )?    [^()]+    (?(<OPEN>) \\) )\n\n       If the name used in a condition of this kind is a duplicate,  the  test\n       is  applied  to  all groups of the same name, and is true if any one of\n       them has matched.\n\n   Checking for pattern recursion\n\n       \"Recursion\" in this sense refers to any subroutine-like call  from  one\n       part  of  the  pattern to another, whether or not it is actually recur-\n       sive. See the sections entitled \"Recursive  patterns\"  and  \"Groups  as\n       subroutines\" below for details of recursion and subroutine calls.\n\n       If  a  condition  is the string (R), and there is no capture group with\n       the name R, the condition is true if matching is currently in a  recur-\n       sion  or  subroutine call to the whole pattern or any capture group. If\n       digits follow the letter R, and there is no group with that  name,  the\n       condition  is  true  if  the  most recent call is into a group with the\n       given number, which must exist somewhere in the overall  pattern.  This\n       is a contrived example that is equivalent to a+b:\n\n         ((?(R1)a+|(?1)b))\n\n       However,  in  both  cases,  if there is a capture group with a matching\n       name, the condition tests for its being set, as described in  the  sec-\n       tion  above,  instead of testing for recursion. For example, creating a\n       group with the name R1 by adding (?<R1>)  to  the  above  pattern  com-\n       pletely changes its meaning.\n\n       If a name preceded by ampersand follows the letter R, for example:\n\n         (?(R&name)...)\n\n       the  condition  is true if the most recent recursion is into a group of\n       that name (which must exist within the pattern).\n\n       This condition does not check the entire recursion stack. It tests only\n       the current level. If the name used in a condition of this  kind  is  a\n       duplicate,  the  test is applied to all groups of the same name, and is\n       true if any one of them is the most recent recursion.\n\n       At \"top level\", all these recursion test conditions are false.\n\n   Defining capture groups for use by reference only\n\n       If the condition is the string (DEFINE), the condition is always false,\n       even if there is a group with the name DEFINE. In this case, there  may\n       be only one alternative in the rest of the conditional group. It is al-\n       ways  skipped if control reaches this point in the pattern; the idea of\n       DEFINE is that it can be used to define subroutines that can be  refer-\n       enced  from elsewhere. (The use of subroutines is described below.) For\n       example, a pattern to match an IPv4 address  such  as  \"192.168.23.245\"\n       could be written like this (ignore white space and line breaks):\n\n         (?(DEFINE) (?<byte> 2[0-4]\\d | 25[0-5] | 1\\d\\d | [1-9]?\\d) )\n         \\b (?&byte) (\\.(?&byte)){3} \\b\n\n       The  first  part  of the pattern is a DEFINE group inside which another\n       group named \"byte\" is defined. This matches an individual component  of\n       an  IPv4  address  (a number less than 256). When matching takes place,\n       this part of the pattern is skipped because DEFINE acts  like  a  false\n       condition.  The  rest of the pattern uses references to the named group\n       to match the four dot-separated components of an IPv4 address,  insist-\n       ing on a word boundary at each end.\n\n   Checking the PCRE2 version\n\n       Programs  that link with a PCRE2 library can check the version by call-\n       ing pcre2_config() with appropriate arguments.  Users  of  applications\n       that  do  not have access to the underlying code cannot do this. A spe-\n       cial \"condition\" called VERSION exists to allow such users to  discover\n       which version of PCRE2 they are dealing with by using this condition to\n       match  a string such as \"yesno\". VERSION must be followed either by \"=\"\n       or \">=\" and a version number.  For example:\n\n         (?(VERSION>=10.4)yes|no)\n\n       This pattern matches \"yes\" if the PCRE2 version is greater or equal  to\n       10.4,  or  \"no\"  otherwise.  The  fractional part of the version number\n       could be ommited.\n\n   Assertion conditions\n\n       If the condition is not in any of the  above  formats,  it  must  be  a\n       parenthesized  assertion.  This may be a positive or negative lookahead\n       or lookbehind assertion. However, it must be a traditional  atomic  as-\n       sertion, not one of the non-atomic assertions.\n\n       Consider  this  pattern,  again containing non-significant white space,\n       and with the two alternatives on the second line:\n\n         (?(?=[^a-z]*[a-z])\n         \\d{2}-[a-z]{3}-\\d{2}  |  \\d{2}-\\d{2}-\\d{2} )\n\n       The condition is a positive lookahead assertion  that  matches  an  op-\n       tional sequence of non-letters followed by a letter. In other words, it\n       tests for the presence of at least one letter in the subject. If a let-\n       ter  is  found,  the  subject is matched against the first alternative;\n       otherwise it is  matched  against  the  second.  This  pattern  matches\n       strings  in  one  of the two forms dd-aaa-dd or dd-dd-dd, where aaa are\n       letters and dd are digits.\n\n       When an assertion that is a condition contains capture groups, any cap-\n       turing that occurs in a matching branch  is  retained  afterwards,  for\n       both  positive and negative assertions, because matching always contin-\n       ues after the assertion, whether it succeeds or  fails.  (Compare  non-\n       conditional  assertions, for which captures are retained only for posi-\n       tive assertions that succeed.)\n\n\nCOMMENTS\n\n       There are two ways of including comments in patterns that are processed\n       by PCRE2. In both cases, the start of the comment  must  not  be  in  a\n       character  class,  nor  in  the middle of any other sequence of related\n       characters such as (?: or a group name or number or a Unicode  property\n       name. The characters that make up a comment play no part in the pattern\n       matching.\n\n       The  sequence (?# marks the start of a comment that continues up to the\n       next closing parenthesis. Nested parentheses are not permitted. If  the\n       PCRE2_EXTENDED  or  PCRE2_EXTENDED_MORE  option  is set, an unescaped #\n       character also introduces a comment, which in this  case  continues  to\n       immediately  after  the next newline character or character sequence in\n       the pattern. Which characters are interpreted as newlines is controlled\n       by an option passed to the compiling function or by a special  sequence\n       at the start of the pattern, as described in the section entitled \"New-\n       line conventions\" above. Note that the end of this type of comment is a\n       literal  newline  sequence in the pattern; escape sequences that happen\n       to represent a newline do not count. For example, consider this pattern\n       when PCRE2_EXTENDED is set, and the default newline convention (a  sin-\n       gle linefeed character) is in force:\n\n         abc #comment \\n still comment\n\n       On  encountering  the # character, pcre2_compile() skips along, looking\n       for a newline in the pattern. The sequence \\n is still literal at  this\n       stage,  so  it does not terminate the comment. Only an actual character\n       with the code value 0x0a (the default newline) does so.\n\n\nRECURSIVE PATTERNS\n\n       Consider the problem of matching a string in parentheses, allowing  for\n       unlimited  nested  parentheses.  Without the use of recursion, the best\n       that can be done is to use a pattern that  matches  up  to  some  fixed\n       depth  of  nesting.  It  is not possible to handle an arbitrary nesting\n       depth.\n\n       For some time, Perl has provided a facility that allows regular expres-\n       sions to recurse (amongst other things). It does this by  interpolating\n       Perl  code in the expression at run time, and the code can refer to the\n       expression itself. A Perl pattern using code interpolation to solve the\n       parentheses problem can be created like this:\n\n         $re = qr{\\( (?: (?>[^()]+) | (?p{$re}) )* \\)}x;\n\n       The (?p{...}) item interpolates Perl code at run time, and in this case\n       refers recursively to the pattern in which it appears.\n\n       Obviously, PCRE2 cannot support the interpolation  of  Perl  code.  In-\n       stead,  it supports special syntax for recursion of the entire pattern,\n       and also for individual capture group recursion. After its introduction\n       in PCRE1 and Python, this kind of recursion was subsequently introduced\n       into Perl at release 5.10.\n\n       A special item that consists of (? followed by a  number  greater  than\n       zero  and  a  closing parenthesis is a recursive subroutine call of the\n       capture group of the given number, provided that it occurs inside  that\n       group.  (If  not,  it  is a non-recursive subroutine call, which is de-\n       scribed in the next section.) The special item (?R) or (?0) is a recur-\n       sive call of the entire regular expression.\n\n       This PCRE2 pattern solves the nested parentheses  problem  (assume  the\n       PCRE2_EXTENDED option is set so that white space is ignored):\n\n         \\( ( [^()]++ | (?R) )* \\)\n\n       First  it matches an opening parenthesis. Then it matches any number of\n       substrings which can either be a sequence of non-parentheses, or a  re-\n       cursive match of the pattern itself (that is, a correctly parenthesized\n       substring).   Finally there is a closing parenthesis. Note the use of a\n       possessive quantifier to avoid  backtracking  into  sequences  of  non-\n       parentheses.\n\n       If  this  were  part of a larger pattern, you would not want to recurse\n       the entire pattern, so instead you could use this:\n\n         ( \\( ( [^()]++ | (?1) )* \\) )\n\n       We have put the pattern into parentheses, and caused the  recursion  to\n       refer to them instead of the whole pattern.\n\n       In  a  larger  pattern,  keeping  track  of  parenthesis numbers can be\n       tricky. This is made easier by the use of relative references.  Instead\n       of (?1) in the pattern above you can write (?-2) to refer to the second\n       most  recently  opened  parentheses  preceding  the recursion. In other\n       words, a negative number counts capturing  parentheses  leftwards  from\n       the point at which it is encountered.\n\n       Be  aware  however, that if duplicate capture group numbers are in use,\n       relative references refer to the earliest group  with  the  appropriate\n       number. Consider, for example:\n\n         (?|(a)|(b)) (c) (?-2)\n\n       The first two capture groups (a) and (b) are both numbered 1, and group\n       (c)  is  number  2. When the reference (?-2) is encountered, the second\n       most recently opened parentheses has the number 1, but it is the  first\n       such group (the (a) group) to which the recursion refers. This would be\n       the  same if an absolute reference (?1) was used. In other words, rela-\n       tive references are just a shorthand for computing a group number.\n\n       It is also possible to refer to subsequent capture groups,  by  writing\n       references  such  as  (?+2). However, these cannot be recursive because\n       the reference is not inside the parentheses that are  referenced.  They\n       are  always  non-recursive  subroutine  calls, as described in the next\n       section.\n\n       An alternative approach is to use named parentheses.  The  Perl  syntax\n       for  this  is  (?&name);  PCRE1's earlier syntax (?P>name) is also sup-\n       ported. We could rewrite the above example as follows:\n\n         (?<pn> \\( ( [^()]++ | (?&pn) )* \\) )\n\n       If there is more than one group with the same name, the earliest one is\n       used.\n\n       The example pattern that we have been looking at contains nested unlim-\n       ited repeats, and so the use of a possessive  quantifier  for  matching\n       strings  of  non-parentheses  is important when applying the pattern to\n       strings that do not match. For example, when this pattern is applied to\n\n         (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()\n\n       it yields \"no match\" quickly. However, if a  possessive  quantifier  is\n       not  used, the match runs for a very long time indeed because there are\n       so many different ways the + and * repeats can carve  up  the  subject,\n       and all have to be tested before failure can be reported.\n\n       At  the  end  of a match, the values of capturing parentheses are those\n       from the outermost level. If you want to obtain intermediate values,  a\n       callout function can be used (see below and the pcre2callout documenta-\n       tion). If the pattern above is matched against\n\n         (ab(cd)ef)\n\n       the  value  for  the  inner capturing parentheses (numbered 2) is \"ef\",\n       which is the last value taken on at the top level. If a  capture  group\n       is  not  matched  at  the top level, its final captured value is unset,\n       even if it was (temporarily) set at a deeper level during the  matching\n       process.\n\n       Do  not  confuse  the (?R) item with the condition (R), which tests for\n       recursion.  Consider this pattern, which matches text in  angle  brack-\n       ets,  allowing for arbitrary nesting. Only digits are allowed in nested\n       brackets (that is, when recursing), whereas any characters are  permit-\n       ted at the outer level.\n\n         < (?: (?(R) \\d++  | [^<>]*+) | (?R)) * >\n\n       In  this  pattern,  (?(R) is the start of a conditional group, with two\n       different alternatives for the recursive and non-recursive  cases.  The\n       (?R) item is the actual recursive call.\n\n   Differences in recursion processing between PCRE2 and Perl\n\n       Some former differences between PCRE2 and Perl no longer exist.\n\n       Before  release 10.30, recursion processing in PCRE2 differed from Perl\n       in that a recursive subroutine call was always  treated  as  an  atomic\n       group.  That is, once it had matched some of the subject string, it was\n       never re-entered, even if it contained untried alternatives  and  there\n       was  a  subsequent matching failure. (Historical note: PCRE implemented\n       recursion before Perl did.)\n\n       Starting with release 10.30, recursive subroutine calls are  no  longer\n       treated as atomic. That is, they can be re-entered to try unused alter-\n       natives  if  there  is a matching failure later in the pattern. This is\n       now compatible with the way Perl works. If you want a  subroutine  call\n       to be atomic, you must explicitly enclose it in an atomic group.\n\n       Supporting backtracking into recursions simplifies certain types of re-\n       cursive pattern. For example, this pattern matches palindromic strings:\n\n         ^((.)(?1)\\2|.?)$\n\n       The  second  branch  in the group matches a single central character in\n       the palindrome when there are an odd number of characters,  or  nothing\n       when  there  are  an even number of characters, but in order to work it\n       has to be able to try the second case when  the  rest  of  the  pattern\n       match fails. If you want to match typical palindromic phrases, the pat-\n       tern  has  to  ignore  all  non-word characters, which can be done like\n       this:\n\n         ^\\W*+((.)\\W*+(?1)\\W*+\\2|\\W*+.?)\\W*+$\n\n       If run with the PCRE2_CASELESS option,  this  pattern  matches  phrases\n       such  as \"A man, a plan, a canal: Panama!\". Note the use of the posses-\n       sive quantifier *+ to avoid backtracking  into  sequences  of  non-word\n       characters. Without this, PCRE2 takes a great deal longer (ten times or\n       more)  to  match typical phrases, and Perl takes so long that you think\n       it has gone into a loop.\n\n       Another way in which PCRE2 and Perl used to differ in  their  recursion\n       processing  is  in  the  handling of captured values. Formerly in Perl,\n       when a group was called recursively or as a subroutine  (see  the  next\n       section), it had no access to any values that were captured outside the\n       recursion,  whereas  in  PCRE2 these values can be referenced. Consider\n       this pattern:\n\n         ^(.)(\\1|a(?2))\n\n       This pattern matches \"bab\". The first capturing parentheses match  \"b\",\n       then in the second group, when the backreference \\1 fails to match \"b\",\n       the second alternative matches \"a\" and then recurses. In the recursion,\n       \\1  does now match \"b\" and so the whole match succeeds. This match used\n       to fail in Perl, but in later versions (I tried 5.024) it now works.\n\n   Groups as subroutines\n\n       If the syntax for a recursive group call (either by number or by  name)\n       is  used  outside the parentheses to which it refers, it operates a bit\n       like a subroutine in a programming  language.  More  accurately,  PCRE2\n       treats the referenced group as an independent subpattern which it tries\n       to  match at the current matching position. The called group may be de-\n       fined before or after the reference. A numbered reference  can  be  ab-\n       solute or relative, as in these examples:\n\n         (...(absolute)...)...(?2)...\n         (...(relative)...)...(?-1)...\n         (...(?+1)...(relative)...\n\n       An earlier example pointed out that the pattern\n\n         (sens|respons)e and \\1ibility\n\n       matches  \"sense and sensibility\" and \"response and responsibility\", but\n       not \"sense and responsibility\". If instead the pattern\n\n         (sens|respons)e and (?1)ibility\n\n       is used, it does match \"sense and responsibility\" as well as the  other\n       two  strings.  Another  example  is  given  in the discussion of DEFINE\n       above.\n\n       Like recursions, subroutine calls used to be  treated  as  atomic,  but\n       this  changed  at  PCRE2 release 10.30, so backtracking into subroutine\n       calls can now occur. However, any capturing parentheses  that  are  set\n       during the subroutine call revert to their previous values afterwards.\n\n       Processing  options such as case-independence are fixed when a group is\n       defined, so if it is used as  a  subroutine,  such  options  cannot  be\n       changed for different calls. For example, consider this pattern:\n\n         (abc)(?i:(?-1))\n\n       It  matches  \"abcabc\". It does not match \"abcABC\" because the change of\n       processing option does not affect the called group.\n\n       The behaviour of backtracking control verbs in groups  when  called  as\n       subroutines is described in the section entitled \"Backtracking verbs in\n       subroutines\" below.\n\n   Recursion and subroutines with returned capture groups\n\n       Since  PCRE2  10.47,  recursion and subroutine calls may also specify a\n       list of capture groups to return. This is a PCRE2 syntax extension  not\n       supported  by  Perl.  The pattern matching recurses into the referenced\n       expression as described above, however, when the recursion  returns  to\n       the  calling expression the subgroups captured during the recursion can\n       be retained when the calling expression's context is restored.\n\n       When used as a subroutine, this allows the subroutine's capture  groups\n       to be used as return values.\n\n       Only the specific capture groups listed by the caller will be retained,\n       using the following syntax:\n\n         (?R(grouplist))       recurse whole pattern, returning capture groups\n         (?n(grouplist))       )\n         (?+n(grouplist))      )\n         (?-n(grouplist))      ) call subroutine, returning capture groups\n         (?&name(grouplist))   )\n         (?P>name(grouplist))  )\n\n       The  list  of  capture  groups \"grouplist\" is a comma-separated list of\n       (absolute or relative) group numbers, and group names enclosed in  sin-\n       gle quotes or angle brackets.\n\n       Here  is  an  example which first uses the DEFINE condition to create a\n       re-usable routine for matching a weekday, then  calls  that  subroutine\n       and retains the groups it captures for use later:\n\n         (?x: # ignore whitespace for clarity\n           # Define the routine \"weekendday\" which matches Saturday or\n           # Sunday, and returns the Sat/Sun prefix as \\k<short>.\n           (?(DEFINE) (?<weekendday>\n               (?|(?<short>Sat)urday|(?<short>Sun)day) ) )\n           # Call the routine. Matches \"Saturday,Sat\" or \"Sunday,Sun\".\n           (?&weekendday(<short>)),\\k<short> )\n\n       This  feature  is  not  available using the Oniguruma syntax \\g<...> or\n       \\g'...'  below.\n\n   Oniguruma subroutine syntax\n\n       For compatibility with Oniguruma, the non-Perl syntax \\g followed by  a\n       name or a number enclosed either in angle brackets or single quotes, is\n       an alternative syntax for calling a group as a subroutine, possibly re-\n       cursively.  Here  are  two  of the examples used above, rewritten using\n       this syntax:\n\n         (?<pn> \\( ( (?>[^()]+) | \\g<pn> )* \\) )\n         (sens|respons)e and \\g'1'ibility\n\n       PCRE2 supports an extension to Oniguruma: if a number is preceded by  a\n       plus or a minus sign it is taken as a relative reference. For example:\n\n         (abc)(?i:\\g<-1>)\n\n       Note  that \\g{...} (Perl syntax) and \\g<...> (Oniguruma syntax) are not\n       synonymous. The former is a backreference; the latter is  a  subroutine\n       call.\n\n\nCALLOUTS\n\n       Perl has a feature whereby using the sequence (?{...}) causes arbitrary\n       Perl  code to be obeyed in the middle of matching a regular expression.\n       This makes it possible, amongst other things, to extract different sub-\n       strings that match the same pair of parentheses when there is a repeti-\n       tion.\n\n       PCRE2 provides a similar feature, but of course it  cannot  obey  arbi-\n       trary  Perl  code. The feature is called \"callout\". The caller of PCRE2\n       provides an external function by putting its entry  point  in  a  match\n       context  using  the function pcre2_set_callout(), and then passing that\n       context to pcre2_match() or pcre2_dfa_match(). If no match  context  is\n       passed,  or  if  the callout entry point is set to NULL, callout points\n       will be passed over silently during matching. To disallow  callouts  in\n       the pattern syntax, you may use the PCRE2_EXTRA_NEVER_CALLOUT option.\n\n       Within  a  regular expression, (?C<arg>) indicates a point at which the\n       external function is to be called. There  are  two  kinds  of  callout:\n       those  with a numerical argument and those with a string argument. (?C)\n       on its own with no argument is treated as (?C0). A  numerical  argument\n       allows  the  application  to  distinguish  between  different callouts.\n       String arguments were added for release 10.20 to make it  possible  for\n       script  languages that use PCRE2 to embed short scripts within patterns\n       in a similar way to Perl.\n\n       During matching, when PCRE2 reaches a callout point, the external func-\n       tion is called. It is provided with the number or  string  argument  of\n       the  callout, the position in the pattern, and one item of data that is\n       also set in the match block. The callout function may cause matching to\n       proceed, to backtrack, or to fail.\n\n       By default, PCRE2 implements a  number  of  optimizations  at  matching\n       time,  and  one  side-effect is that sometimes callouts are skipped. If\n       you need all possible callouts to happen, you need to set options  that\n       disable  the relevant optimizations. More details, including a complete\n       description of the programming interface to the callout  function,  are\n       given in the pcre2callout documentation.\n\n   Callouts with numerical arguments\n\n       If  you  just  want  to  have  a means of identifying different callout\n       points, put a number less than 256 after the  letter  C.  For  example,\n       this pattern has two callout points:\n\n         (?C1)abc(?C2)def\n\n       If  the PCRE2_AUTO_CALLOUT flag is passed to pcre2_compile(), numerical\n       callouts are automatically installed before each item in  the  pattern.\n       They  are all numbered 255. If there is a conditional group in the pat-\n       tern whose condition is an assertion, an additional callout is inserted\n       just before the condition. An explicit callout may also be set at  this\n       position, as in this example:\n\n         (?(?C9)(?=a)abc|def)\n\n       Note that this applies only to assertion conditions, not to other types\n       of condition.\n\n   Callouts with string arguments\n\n       A  delimited  string may be used instead of a number as a callout argu-\n       ment. The starting delimiter must be one of ` ' \" ^ % #  $  {  and  the\n       ending delimiter is the same as the start, except for {, where the end-\n       ing  delimiter  is  }.  If  the  ending  delimiter is needed within the\n       string, it must be doubled. For example:\n\n         (?C'ab ''c'' d')xyz(?C{any text})pqr\n\n       The doubling is removed before the string  is  passed  to  the  callout\n       function.\n\n\nBACKTRACKING CONTROL\n\n       There  are  a  number  of  special \"Backtracking Control Verbs\" (to use\n       Perl's terminology) that modify the behaviour  of  backtracking  during\n       matching.  They are generally of the form (*VERB) or (*VERB:NAME). Some\n       verbs take either form, and may behave differently depending on whether\n       or not a name argument is present. The names are  not  required  to  be\n       unique within the pattern.\n\n       By  default,  for  compatibility  with  Perl, a name is any sequence of\n       characters that does not include a closing parenthesis. The name is not\n       processed in any way, and it is  not  possible  to  include  a  closing\n       parenthesis   in  the  name.   This  can  be  changed  by  setting  the\n       PCRE2_ALT_VERBNAMES option, but the result is no  longer  Perl-compati-\n       ble.\n\n       When  PCRE2_ALT_VERBNAMES  is  set,  backslash processing is applied to\n       verb names and only an unescaped  closing  parenthesis  terminates  the\n       name.  However, the only backslash items that are permitted are \\Q, \\E,\n       and sequences such as \\x{100} that define character code points.  Char-\n       acter type escapes such as \\d are faulted.\n\n       A closing parenthesis can be included in a name either as \\) or between\n       \\Q  and  \\E. In addition to backslash processing, if the PCRE2_EXTENDED\n       or PCRE2_EXTENDED_MORE option is also set,  unescaped  white  space  in\n       verb names is skipped, and #-comments are recognized, exactly as in the\n       rest of the pattern.  PCRE2_EXTENDED and PCRE2_EXTENDED_MORE do not af-\n       fect verb names unless PCRE2_ALT_VERBNAMES is also set.\n\n       The  maximum  length of a name is 255 in the 8-bit library and 65535 in\n       the 16-bit and 32-bit libraries. If the name is empty, that is, if  the\n       closing  parenthesis immediately follows the colon, the effect is as if\n       the colon were not there. Any number of these verbs may occur in a pat-\n       tern. Except for (*ACCEPT), they may not be quantified.\n\n       Since these verbs are specifically related  to  backtracking,  most  of\n       them  can be used only when the pattern is to be matched using the tra-\n       ditional matching function or JIT, because they use backtracking  algo-\n       rithms.  With  the  exception  of (*FAIL), which behaves like a failing\n       negative assertion, the backtracking control verbs cause  an  error  if\n       encountered by the DFA matching function.\n\n       The  behaviour  of  these  verbs in repeated groups, assertions, and in\n       capture groups called as subroutines (whether or  not  recursively)  is\n       documented below.\n\n   Optimizations that affect backtracking verbs\n\n       PCRE2 contains some optimizations that are used to speed up matching by\n       running some checks at the start of each match attempt. For example, it\n       may  know  the minimum length of matching subject, or that a particular\n       character must be present. When one of these optimizations bypasses the\n       running of a match,  any  included  backtracking  verbs  will  not,  of\n       course, be processed. You can suppress the start-of-match optimizations\n       by  setting  the PCRE2_NO_START_OPTIMIZE option when calling pcre2_com-\n       pile(), by calling pcre2_set_optimize() with a PCRE2_START_OPTIMIZE_OFF\n       directive, or by starting the pattern with  (*NO_START_OPT).  There  is\n       more  discussion  of  this  option in the section entitled \"Compiling a\n       pattern\" in the pcre2api documentation.\n\n       Experiments with Perl suggest that it too  has  similar  optimizations,\n       and like PCRE2, turning them off can change the result of a match.\n\n   Verbs that act immediately\n\n       The following verbs act as soon as they are encountered.\n\n          (*ACCEPT) or (*ACCEPT:NAME)\n\n       This  verb causes the match to end successfully, skipping the remainder\n       of the pattern. However, when it is inside  a  capture  group  that  is\n       called as a subroutine, only that group is ended successfully. Matching\n       then continues at the outer level. If (*ACCEPT) in triggered in a posi-\n       tive  assertion,  the  assertion succeeds; in a negative assertion, the\n       assertion fails.\n\n       If (*ACCEPT) is inside capturing parentheses, the data so far  is  cap-\n       tured. For example:\n\n         A((?:A|B(*ACCEPT)|C)D)\n\n       This  matches  \"AB\", \"AAD\", or \"ACD\"; when it matches \"AB\", \"B\" is cap-\n       tured by the outer parentheses.\n\n       (*ACCEPT) is the only backtracking verb that is allowed to  be  quanti-\n       fied  because  an  ungreedy  quantification with a minimum of zero acts\n       only when a backtrack happens. Consider, for example,\n\n         (A(*ACCEPT)??B)C\n\n       where A, B, and C may be complex expressions. After matching  \"A\",  the\n       matcher  processes  \"BC\"; if that fails, causing a backtrack, (*ACCEPT)\n       is triggered and the match succeeds. In both cases, all but C  is  cap-\n       tured.  Whereas  (*COMMIT) (see below) means \"fail on backtrack\", a re-\n       peated (*ACCEPT) of this type means \"succeed on backtrack\".\n\n       Warning: (*ACCEPT) should not be used within a script  run  group,  be-\n       cause  it causes an immediate exit from the group, bypassing the script\n       run checking.\n\n         (*FAIL) or (*FAIL:NAME)\n\n       This verb causes a matching failure, forcing backtracking to occur.  It\n       may  be  abbreviated  to  (*F).  It is equivalent to (?!) but easier to\n       read. The Perl documentation notes that it is probably useful only when\n       combined with (?{}) or (??{}). Those are, of course, Perl features that\n       are not present in PCRE2. The nearest equivalent is  the  callout  fea-\n       ture, as for example in this pattern:\n\n         a+(?C)(*FAIL)\n\n       A  match  with the string \"aaaa\" always fails, but the callout is taken\n       before each backtrack happens (in this example, 10 times).\n\n       (*ACCEPT:NAME) and (*FAIL:NAME) behave the  same  as  (*MARK:NAME)(*AC-\n       CEPT)  and  (*MARK:NAME)(*FAIL),  respectively,  that  is, a (*MARK) is\n       recorded just before the verb acts.\n\n   Recording which path was taken\n\n       There is one verb whose main purpose is to track how a  match  was  ar-\n       rived  at,  though  it also has a secondary use in conjunction with ad-\n       vancing the match starting point (see (*SKIP) below).\n\n         (*MARK:NAME) or (*:NAME)\n\n       A name is always required with this verb. For all the other  backtrack-\n       ing control verbs, a NAME argument is optional.\n\n       When  a  match  succeeds, the name of the last-encountered mark name on\n       the matching path is passed back to the caller as described in the sec-\n       tion entitled \"Other information about the match\" in the pcre2api docu-\n       mentation. This applies to all instances of (*MARK)  and  other  verbs,\n       including those inside assertions and atomic groups. However, there are\n       differences  in  those  cases  when (*MARK) is used in conjunction with\n       (*SKIP) as described below.\n\n       The mark name that was last encountered on the matching path is  passed\n       back.  A verb without a NAME argument is ignored for this purpose. Here\n       is an example of pcre2test output, where the \"mark\"  modifier  requests\n       the retrieval and outputting of (*MARK) data:\n\n           re> /X(*MARK:A)Y|X(*MARK:B)Z/mark\n         data> XY\n          0: XY\n         MK: A\n         XZ\n          0: XZ\n         MK: B\n\n       The (*MARK) name is tagged with \"MK:\" in this output, and in this exam-\n       ple  it indicates which of the two alternatives matched. This is a more\n       efficient way of obtaining this information than putting each  alterna-\n       tive in its own capturing parentheses.\n\n       If  a  verb  with a name is encountered in a positive assertion that is\n       true, the name is recorded and passed back if it  is  the  last-encoun-\n       tered. This does not happen for negative assertions or failing positive\n       assertions.\n\n       After  a  partial match or a failed match, the last encountered name in\n       the entire match process is returned. For example:\n\n           re> /X(*MARK:A)Y|X(*MARK:B)Z/mark\n         data> XP\n         No match, mark = B\n\n       Note that in this unanchored example the  mark  is  retained  from  the\n       match attempt that started at the letter \"X\" in the subject. Subsequent\n       match attempts starting at \"P\" and then with an empty string do not get\n       as far as the (*MARK) item, but nevertheless do not reset it.\n\n       If  you  are  interested  in  (*MARK)  values after failed matches, you\n       should probably either set the PCRE2_NO_START_OPTIMIZE option  or  call\n       pcre2_set_optimize()  with  a  PCRE2_START_OPTIMIZE_OFF  directive (see\n       above) to ensure that the match is always attempted.\n\n   Verbs that act after backtracking\n\n       The following verbs do nothing when they are encountered. Matching con-\n       tinues with what follows, but if there is a subsequent  match  failure,\n       causing  a  backtrack  to the verb, a failure is forced. That is, back-\n       tracking cannot pass to the left of the  verb.  However,  when  one  of\n       these  verbs  appears inside an atomic group or in an atomic lookaround\n       assertion that is true, its effect is confined to that  group,  because\n       once  the  group has been matched, there is never any backtracking into\n       it. Backtracking from beyond an atomic assertion or group  ignores  the\n       entire group, and seeks a preceding backtracking point.\n\n       These  verbs  differ  in exactly what kind of failure occurs when back-\n       tracking reaches them. The behaviour described below  is  what  happens\n       when  the  verb is not in a subroutine or an assertion. Subsequent sec-\n       tions cover these special cases.\n\n         (*COMMIT) or (*COMMIT:NAME)\n\n       This verb causes the whole match to fail outright if there is  a  later\n       matching failure that causes backtracking to reach it. Even if the pat-\n       tern  is  unanchored,  no further attempts to find a match by advancing\n       the starting point take place. If (*COMMIT) is  the  only  backtracking\n       verb that is encountered, once it has been passed pcre2_match() is com-\n       mitted to finding a match at the current starting point, or not at all.\n       For example:\n\n         a+(*COMMIT)b\n\n       This  matches  \"xxaab\" but not \"aacaab\". It can be thought of as a kind\n       of dynamic anchor, or \"I've started, so I must finish.\"\n\n       The behaviour of (*COMMIT:NAME) is not the same  as  (*MARK:NAME)(*COM-\n       MIT).  It is like (*MARK:NAME) in that the name is remembered for pass-\n       ing back to the caller. However, (*SKIP:NAME) searches only  for  names\n       that are set with (*MARK), ignoring those set by any of the other back-\n       tracking verbs.\n\n       If  there  is more than one backtracking verb in a pattern, a different\n       one that follows (*COMMIT) may be triggered first,  so  merely  passing\n       (*COMMIT) during a match does not always guarantee that a match must be\n       at this starting point.\n\n       Note that (*COMMIT) at the start of a pattern is not the same as an an-\n       chor,  unless  PCRE2's  start-of-match optimizations are turned off, as\n       shown in this output from pcre2test:\n\n           re> /(*COMMIT)abc/\n         data> xyzabc\n          0: abc\n         data>\n         re> /(*COMMIT)abc/no_start_optimize\n         data> xyzabc\n         No match\n\n       For the first pattern, PCRE2 knows that any match must start with  \"a\",\n       so  the optimization skips along the subject to \"a\" before applying the\n       pattern to the first set of data. The match attempt then succeeds.  The\n       second  pattern disables the optimization that skips along to the first\n       character. The pattern is now applied  starting  at  \"x\",  and  so  the\n       (*COMMIT)  causes  the  match to fail without trying any other starting\n       points.\n\n         (*PRUNE) or (*PRUNE:NAME)\n\n       This verb causes the match to fail at the current starting position  in\n       the subject if there is a later matching failure that causes backtrack-\n       ing  to  reach it. If the pattern is unanchored, the normal \"bumpalong\"\n       advance to the next starting character then happens.  Backtracking  can\n       occur  as  usual to the left of (*PRUNE), before it is reached, or when\n       matching to the right of (*PRUNE), but if there  is  no  match  to  the\n       right,  backtracking cannot cross (*PRUNE). In simple cases, the use of\n       (*PRUNE) is just an alternative to an atomic group or possessive  quan-\n       tifier, but there are some uses of (*PRUNE) that cannot be expressed in\n       any  other  way. In an anchored pattern (*PRUNE) has the same effect as\n       (*COMMIT).\n\n       The behaviour of (*PRUNE:NAME) is not the same as (*MARK:NAME)(*PRUNE).\n       It is like (*MARK:NAME) in that the name is remembered for passing back\n       to the caller. However, (*SKIP:NAME) searches only for names  set  with\n       (*MARK), ignoring those set by other backtracking verbs.\n\n         (*SKIP)\n\n       This  verb, when given without a name, is like (*PRUNE), except that if\n       the pattern is unanchored, the \"bumpalong\" advance is not to  the  next\n       character, but to the position in the subject where (*SKIP) was encoun-\n       tered.  (*SKIP)  signifies that whatever text was matched leading up to\n       it cannot be part of a successful match if there is a  later  mismatch.\n       Consider:\n\n         a+(*SKIP)b\n\n       If  the  subject  is  \"aaaac...\",  after  the first match attempt fails\n       (starting at the first character in the  string),  the  starting  point\n       skips on to start the next attempt at \"c\". Note that a possessive quan-\n       tifier does not have the same effect as this example; although it would\n       suppress  backtracking  during  the first match attempt, the second at-\n       tempt would start at the second character instead  of  skipping  on  to\n       \"c\".\n\n       If  (*SKIP) is used to specify a new starting position that is the same\n       as the starting position of the current match, or (by  being  inside  a\n       lookbehind)  earlier, the position specified by (*SKIP) is ignored, and\n       instead the normal \"bumpalong\" occurs.\n\n         (*SKIP:NAME)\n\n       When (*SKIP) has an associated name, its behaviour  is  modified.  When\n       such  a  (*SKIP) is triggered, the previous path through the pattern is\n       searched for the most recent (*MARK) that has the same name. If one  is\n       found,  the  \"bumpalong\" advance is to the subject position that corre-\n       sponds to that (*MARK) instead of to where (*SKIP) was encountered.  If\n       no (*MARK) with a matching name is found, the (*SKIP) is ignored.\n\n       The  search  for a (*MARK) name uses the normal backtracking mechanism,\n       which means that it does not  see  (*MARK)  settings  that  are  inside\n       atomic groups or assertions, because they are never re-entered by back-\n       tracking. Compare the following pcre2test examples:\n\n           re> /a(?>(*MARK:X))(*SKIP:X)(*F)|(.)/\n         data: abc\n          0: a\n          1: a\n         data:\n           re> /a(?:(*MARK:X))(*SKIP:X)(*F)|(.)/\n         data: abc\n          0: b\n          1: b\n\n       In  the first example, the (*MARK) setting is in an atomic group, so it\n       is not seen when (*SKIP:X) triggers, causing the (*SKIP) to be ignored.\n       This allows the second branch of the pattern to be tried at  the  first\n       character  position.  In the second example, the (*MARK) setting is not\n       in an atomic group. This allows (*SKIP:X) to find the (*MARK)  when  it\n       backtracks, and this causes a new matching attempt to start at the sec-\n       ond  character.  This  time, the (*MARK) is never seen because \"a\" does\n       not match \"b\", so the matcher immediately jumps to the second branch of\n       the pattern.\n\n       Note that (*SKIP:NAME) searches only for names set by (*MARK:NAME).  It\n       ignores names that are set by other backtracking verbs.\n\n         (*THEN) or (*THEN:NAME)\n\n       This  verb  causes  a skip to the next innermost alternative when back-\n       tracking reaches it. That  is,  it  cancels  any  further  backtracking\n       within  the  current  alternative.  Its name comes from the observation\n       that it can be used for a pattern-based if-then-else block:\n\n         ( COND1 (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ ) ...\n\n       If the COND1 pattern matches, FOO is tried (and possibly further  items\n       after  the  end  of the group if FOO succeeds); on failure, the matcher\n       skips to the second alternative and tries COND2,  without  backtracking\n       into  COND1.  If that succeeds and BAR fails, COND3 is tried. If subse-\n       quently BAZ fails, there are no more alternatives, so there is a  back-\n       track  to  whatever came before the entire group. If (*THEN) is not in-\n       side an alternation, it acts like (*PRUNE).\n\n       The behaviour of (*THEN:NAME) is not the same  as  (*MARK:NAME)(*THEN).\n       It is like (*MARK:NAME) in that the name is remembered for passing back\n       to  the  caller. However, (*SKIP:NAME) searches only for names set with\n       (*MARK), ignoring those set by other backtracking verbs.\n\n       A group that does not contain a | character is just a part of  the  en-\n       closing  alternative;  it is not a nested alternation with only one al-\n       ternative. The effect of (*THEN) extends beyond such a group to the en-\n       closing alternative.  Consider this pattern, where A, B, etc. are  com-\n       plex  pattern  fragments  that  do not contain any | characters at this\n       level:\n\n         A (B(*THEN)C) | D\n\n       If A and B are matched, but there is a failure in C, matching does  not\n       backtrack into A; instead it moves to the next alternative, that is, D.\n       However,  if  the  group containing (*THEN) is given an alternative, it\n       behaves differently:\n\n         A (B(*THEN)C | (*FAIL)) | D\n\n       The effect of (*THEN) is now confined to the inner group. After a fail-\n       ure in C, matching moves to (*FAIL), which causes the  whole  group  to\n       fail  because  there  are  no  more  alternatives to try. In this case,\n       matching does backtrack into A.\n\n       Note that a conditional group is not considered as having two  alterna-\n       tives,  because  only one is ever used. In other words, the | character\n       in a conditional group has a different meaning. Ignoring  white  space,\n       consider:\n\n         ^.*? (?(?=a) a | b(*THEN)c )\n\n       If the subject is \"ba\", this pattern does not match. Because .*? is un-\n       greedy,  it initially matches zero characters. The condition (?=a) then\n       fails, the character \"b\" is matched, but \"c\" is  not.  At  this  point,\n       matching  does  not  backtrack to .*? as might perhaps be expected from\n       the presence of the | character. The conditional group is part  of  the\n       single  alternative  that comprises the whole pattern, and so the match\n       fails. (If there was a backtrack into .*?, allowing it  to  match  \"b\",\n       the match would succeed.)\n\n       The  verbs just described provide four different \"strengths\" of control\n       when subsequent matching fails. (*THEN) is the weakest, carrying on the\n       match at the next alternative. (*PRUNE) comes next, failing  the  match\n       at  the  current starting position, but allowing an advance to the next\n       character (for an unanchored pattern). (*SKIP) is similar, except  that\n       the advance may be more than one character. (*COMMIT) is the strongest,\n       causing the entire match to fail.\n\n   More than one backtracking verb\n\n       If  more  than  one  backtracking verb is present in a pattern, the one\n       that is backtracked onto first acts. For example,  consider  this  pat-\n       tern, where A, B, etc. are complex pattern fragments:\n\n         (A(*COMMIT)B(*THEN)C|ABD)\n\n       If  A matches but B fails, the backtrack to (*COMMIT) causes the entire\n       match to fail. However, if A and B match, but C fails, the backtrack to\n       (*THEN) causes the next alternative (ABD) to be tried.  This  behaviour\n       is  consistent,  but is not always the same as Perl's. It means that if\n       two or more backtracking verbs appear in succession, all but  the  last\n       of them has no effect. Consider this example:\n\n         ...(*COMMIT)(*PRUNE)...\n\n       If there is a matching failure to the right, backtracking onto (*PRUNE)\n       causes  it to be triggered, and its action is taken. There can never be\n       a backtrack onto (*COMMIT).\n\n   Backtracking verbs in repeated groups\n\n       PCRE2 sometimes differs from Perl in its handling of backtracking verbs\n       in repeated groups. For example, consider:\n\n         /(a(*COMMIT)b)+ac/\n\n       If the subject is \"abac\", Perl matches  unless  its  optimizations  are\n       disabled,  but  PCRE2  always fails because the (*COMMIT) in the second\n       repeat of the group acts.\n\n   Backtracking verbs in assertions\n\n       (*FAIL) in any assertion has its normal effect: it forces an  immediate\n       backtrack.  The  behaviour  of  the other backtracking verbs depends on\n       whether or not the assertion is standalone or acting as  the  condition\n       in a conditional group.\n\n       (*ACCEPT)  in  a  standalone positive assertion causes the assertion to\n       succeed without any further processing; captured  strings  and  a  mark\n       name  (if  set) are retained. In a standalone negative assertion, (*AC-\n       CEPT) causes the assertion to fail without any further processing; cap-\n       tured substrings and any mark name are discarded.\n\n       If the assertion is a condition, (*ACCEPT) causes the condition  to  be\n       true  for  a  positive assertion and false for a negative one; captured\n       substrings are retained in both cases.\n\n       The remaining verbs act only when a later failure causes a backtrack to\n       reach them. This means that, for the Perl-compatible assertions,  their\n       effect is confined to the assertion, because Perl lookaround assertions\n       are atomic. A backtrack that occurs after such an assertion is complete\n       does  not  jump  back  into  the  assertion.  Note in particular that a\n       (*MARK) name that is set in an assertion is not \"seen\" by  an  instance\n       of (*SKIP:NAME) later in the pattern.\n\n       PCRE2  now  supports non-atomic positive assertions and also \"scan sub-\n       string\" assertions, as described in the sections  entitled  \"Non-atomic\n       assertions\"  and  \"Scan  substring  assertions\" above. These assertions\n       must be standalone (not used as conditions). They are not Perl-compati-\n       ble. For these assertions, a later backtrack does jump  back  into  the\n       assertion,  and  therefore  verbs such as (*COMMIT) can be triggered by\n       backtracks from later in the pattern.\n\n       The effect of (*THEN) is not allowed to escape beyond an assertion.  If\n       there  are no more branches to try, (*THEN) causes a positive assertion\n       to be false, and a negative assertion to be true. This  behaviour  dif-\n       fers from Perl when the assertion has only one branch.\n\n       The  other  backtracking verbs are not treated specially if they appear\n       in a standalone positive assertion. In a  conditional  positive  asser-\n       tion, backtracking (from within the assertion) into (*COMMIT), (*SKIP),\n       or  (*PRUNE) causes the condition to be false. However, for both stand-\n       alone and conditional negative assertions, backtracking into (*COMMIT),\n       (*SKIP), or (*PRUNE) causes the assertion to be true, without consider-\n       ing any further alternative branches.\n\n   Backtracking verbs in subroutines\n\n       These behaviours occur whether or not the group is called recursively.\n\n       (*ACCEPT) in a group called as a subroutine causes the subroutine match\n       to succeed without any further processing. Matching then continues  af-\n       ter  the  subroutine call. Perl documents this behaviour. Perl's treat-\n       ment of the other verbs in subroutines is different in some cases.\n\n       (*FAIL) in a group called as a subroutine has  its  normal  effect:  it\n       forces an immediate backtrack.\n\n       (*COMMIT),  (*SKIP),  and  (*PRUNE)  cause the subroutine match to fail\n       when triggered by being backtracked to in a group called as  a  subrou-\n       tine. There is then a backtrack at the outer level.\n\n       (*THEN), when triggered, skips to the next alternative in the innermost\n       enclosing  group that has alternatives (its normal behaviour). However,\n       if there is no such group within the subroutine's group, the subroutine\n       match fails and there is a backtrack at the outer level.\n\n\nEBCDIC ENVIRONMENTS\n\n       Differences in the way PCRE behaves when it is running in an EBCDIC en-\n       vironment are covered in this section.\n\n   Escape sequences\n\n       When PCRE2 is compiled in EBCDIC mode, \\N{U+hhh..}  is  not  supported.\n       \\a, \\e, \\f, \\n, \\r, and \\t generate the appropriate EBCDIC code values.\n       The \\c escape is processed as specified for Perl in the perlebcdic doc-\n       ument.  The  only characters that are allowed after \\c are A-Z, a-z, or\n       one of @, [, \\, ], ^, _, or ?. Any other character provokes a  compile-\n       time  error.  The  sequence  \\c@ encodes character code 0; after \\c the\n       letters (in either case) encode characters 1-26 (hex 01 to hex 1A);  [,\n       \\,  ], ^, and _ encode characters 27-31 (hex 1B to hex 1F), and \\c? be-\n       comes either 255 (hex FF) or 95 (hex 5F).\n\n       Thus, apart from \\c?, these escapes generate the  same  character  code\n       values  as they do in an ASCII or Unicode environment, though the mean-\n       ings of the values mostly differ. For  example,  \\cG  always  generates\n       code value 7, which is BEL in ASCII but DEL in EBCDIC.\n\n       The  sequence  \\c? generates DEL (127, hex 7F) in an ASCII environment,\n       but because 127 is not a control character in  EBCDIC,  Perl  makes  it\n       generate  the  APC character. Unfortunately, there are several variants\n       of EBCDIC. In most of them the APC character has  the  value  255  (hex\n       FF),  but  in  the one Perl calls POSIX-BC its value is 95 (hex 5F). If\n       certain other characters have POSIX-BC values, PCRE2 makes \\c? generate\n       95; otherwise it generates 255.\n\n   Character classes\n\n       In character classes there is a special case in EBCDIC environments for\n       ranges whose end points are both specified as literal  letters  in  the\n       same  case.  For compatibility with Perl, EBCDIC code points within the\n       range that are not letters are omitted. For example, [h-k] matches only\n       four characters, even though the EBCDIC codes for h and k are 0x88  and\n       0x92, a range of 11 code points. However, if the range is specified nu-\n       merically,  for  example,  [\\x88-\\x92] or [h-\\x92], all code points are\n       included.\n\n\nSEE ALSO\n\n       pcre2api(3),   pcre2callout(3),    pcre2matching(3),    pcre2syntax(3),\n       pcre2(3).\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 03 September 2025\n       Copyright (c) 1997-2024 University of Cambridge.\n\n\nPCRE2 10.48-DEV                03 September 2025               PCRE2PATTERN(3)\n------------------------------------------------------------------------------\n\n\nPCRE2PERFORM(3)            Library Functions Manual            PCRE2PERFORM(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nPCRE2 PERFORMANCE\n\n       Two  aspects  of performance are discussed below: memory usage and pro-\n       cessing time. The way you express your pattern as a regular  expression\n       can affect both of them.\n\n\nCOMPILED PATTERN MEMORY USAGE\n\n       Patterns are compiled by PCRE2 into a reasonably efficient interpretive\n       code,  so  that most simple patterns do not use much memory for storing\n       the compiled version. However, there is one case where the memory usage\n       of a compiled pattern can be unexpectedly  large.  If  a  parenthesized\n       group  has  a quantifier with a minimum greater than 1 and/or a limited\n       maximum, the whole group is repeated in the compiled code. For example,\n       the pattern\n\n         (abc|def){2,4}\n\n       is compiled as if it were\n\n         (abc|def)(abc|def)((abc|def)(abc|def)?)?\n\n       (Technical aside: It is done this way so that backtrack  points  within\n       each of the repetitions can be independently maintained.)\n\n       For  regular expressions whose quantifiers use only small numbers, this\n       is not usually a problem. However, if the numbers are large,  and  par-\n       ticularly  if  such repetitions are nested, the memory usage can become\n       an embarrassment. For example, the very simple pattern\n\n         ((ab){1,1000}c){1,3}\n\n       uses over 50KiB when compiled using the 8-bit library.  When  PCRE2  is\n       compiled  with its default internal pointer size of two bytes, the size\n       limit on a compiled pattern is 65535 code units in the 8-bit and 16-bit\n       libraries, and this is reached with the above pattern if the outer rep-\n       etition is increased from 3 to 4. PCRE2 can be compiled to  use  larger\n       internal  pointers  and thus handle larger compiled patterns, but it is\n       better to try to rewrite your pattern to use less memory if you can.\n\n       One way of reducing the memory usage for such patterns is to  make  use\n       of PCRE2's \"subroutine\" facility. Re-writing the above pattern as\n\n         ((ab)(?2){0,999}c)(?1){0,2}\n\n       reduces  the memory requirements to around 16KiB, and indeed it remains\n       under 20KiB even with the outer repetition increased to  100.  However,\n       this kind of pattern is not always exactly equivalent, because any cap-\n       tures  within  subroutine calls are lost when the subroutine completes.\n       If this is not a problem, this kind of  rewriting  will  allow  you  to\n       process  patterns that PCRE2 cannot otherwise handle. The matching per-\n       formance of the two different versions of the pattern are  roughly  the\n       same.  (This applies from release 10.30 - things were different in ear-\n       lier releases.)\n\n\nSTACK AND HEAP USAGE AT RUN TIME\n\n       From release 10.30, the interpretive (non-JIT) version of pcre2_match()\n       uses very little system stack at run time. In earlier  releases  recur-\n       sive  function  calls  could  use a great deal of stack, and this could\n       cause problems, but this usage has been eliminated. Backtracking  posi-\n       tions  are now explicitly remembered in memory frames controlled by the\n       code.\n\n       The size of each frame depends on the size of pointer variables and the\n       number of capturing parenthesized groups in the pattern being  matched.\n       On a 64-bit system the frame size for a pattern with no captures is 128\n       bytes. For each capturing group the size increases by 16 bytes.\n\n       Until  release  10.41,  an initial 20KiB frames vector was allocated on\n       the system stack, but this still caused some  issues  for  multi-thread\n       applications  where  each  thread  has a very small stack. From release\n       10.41 backtracking memory frames are always held  in  heap  memory.  An\n       initial heap allocation is obtained the first time any match data block\n       is  passed  to  pcre2_match().  This  is remembered with the match data\n       block and re-used if that block is used for another match. It is  freed\n       when the match data block itself is freed.\n\n       The  size  of the initial block is the larger of 20KiB or ten times the\n       pattern's frame size, unless the heap limit is less than this, in which\n       case the heap limit is used. If the initial  block  proves  to  be  too\n       small during matching, it is replaced by a larger block, subject to the\n       heap  limit.  The  heap limit is checked only when a new block is to be\n       allocated. Reducing the heap limit between calls to pcre2_match()  with\n       the same match data block does not affect the saved block.\n\n       In  contrast  to  pcre2_match(),  pcre2_dfa_match()  does use recursive\n       function calls, but only for processing atomic groups,  lookaround  as-\n       sertions, and recursion within the pattern. The original version of the\n       code  used  to  allocate  quite large internal workspace vectors on the\n       stack, which caused some problems for  some  patterns  in  environments\n       with  small  stacks.  From release 10.32 the code for pcre2_dfa_match()\n       has been re-factored to use heap memory  when  necessary  for  internal\n       workspace  when  recursing,  though  recursive function calls are still\n       used.\n\n       The \"match depth\" parameter can be used to limit the depth of  function\n       recursion,  and  the  \"match  heap\"  parameter  to limit heap memory in\n       pcre2_dfa_match().\n\n\nPROCESSING TIME\n\n       Certain items in regular expression patterns are processed  more  effi-\n       ciently than others. It is more efficient to use a character class like\n       [aeiou]   than   a   set   of  single-character  alternatives  such  as\n       (a|e|i|o|u). In general, the simplest construction  that  provides  the\n       required behaviour is usually the most efficient. Jeffrey Friedl's book\n       contains  a  lot  of useful general discussion about optimizing regular\n       expressions for efficient performance. This document contains a few ob-\n       servations about PCRE2.\n\n       Using Unicode character properties (the \\p,  \\P,  and  \\X  escapes)  is\n       slow,  because  PCRE2 has to use a multi-stage table lookup whenever it\n       needs a character's property. If you can find  an  alternative  pattern\n       that does not use character properties, it will probably be faster.\n\n       By  default,  the  escape  sequences  \\b, \\d, \\s, and \\w, and the POSIX\n       character classes such as [:alpha:]  do  not  use  Unicode  properties,\n       partly for backwards compatibility, and partly for performance reasons.\n       However,  you  can  set  the PCRE2_UCP option or start the pattern with\n       (*UCP) if you want Unicode character properties to be  used.  This  can\n       double  the  matching  time  for  items  such  as \\d, when matched with\n       pcre2_match(); the performance loss is less with a DFA  matching  func-\n       tion, and in both cases there is not much difference for \\b.\n\n       When  a pattern begins with .* not in atomic parentheses, nor in paren-\n       theses that are the subject of a backreference,  and  the  PCRE2_DOTALL\n       option  is  set,  the pattern is implicitly anchored by PCRE2, since it\n       can match only at the start of a subject string.  If  the  pattern  has\n       multiple top-level branches, they must all be anchorable. The optimiza-\n       tion  can be disabled by the PCRE2_NO_DOTSTAR_ANCHOR option, and is au-\n       tomatically disabled if the pattern contains (*PRUNE) or (*SKIP).\n\n       If PCRE2_DOTALL is not set, PCRE2 cannot make  this  optimization,  be-\n       cause  the  dot metacharacter does not then match a newline, and if the\n       subject string contains newlines, the pattern may match from the  char-\n       acter immediately following one of them instead of from the very start.\n       For example, the pattern\n\n         .*second\n\n       matches  the subject \"first\\nand second\" (where \\n stands for a newline\n       character), with the match starting at the seventh character. In  order\n       to  do  this, PCRE2 has to retry the match starting after every newline\n       in the subject.\n\n       If you are using such a pattern with subject strings that do  not  con-\n       tain   newlines,   the   best   performance   is  obtained  by  setting\n       PCRE2_DOTALL, or starting the pattern with ^.* or ^.*? to indicate  ex-\n       plicit  anchoring.  That saves PCRE2 from having to scan along the sub-\n       ject looking for a newline to restart at.\n\n       Beware of patterns that contain nested indefinite  repeats.  These  can\n       take  a  long time to run when applied to a string that does not match.\n       Consider the pattern fragment\n\n         ^(a+)*\n\n       This can match \"aaaa\" in 16 different ways, and this  number  increases\n       very  rapidly  as the string gets longer. (The * repeat can match 0, 1,\n       2, 3, or 4 times, and for each of those cases other than 0 or 4, the  +\n       repeats  can  match  different numbers of times.) When the remainder of\n       the pattern is such that the entire match is going to fail,  PCRE2  has\n       in  principle to try every possible variation, and this can take an ex-\n       tremely long time, even for relatively short strings.\n\n       An optimization catches some of the more simple cases such as\n\n         (a+)*b\n\n       where a literal character follows. Before  embarking  on  the  standard\n       matching  procedure, PCRE2 checks that there is a \"b\" later in the sub-\n       ject string, and if there is not, it fails the match immediately.  How-\n       ever,  when  there  is no following literal this optimization cannot be\n       used. You can see the difference by comparing the behaviour of\n\n         (a+)*\\d\n\n       with the pattern above. The former gives  a  failure  almost  instantly\n       when  applied  to  a  whole  line of \"a\" characters, whereas the latter\n       takes an appreciable time with strings longer than about 20 characters.\n\n       In many cases, the solution to this kind of performance issue is to use\n       an atomic group or a possessive quantifier. This can often reduce  mem-\n       ory requirements as well. As another example, consider this pattern:\n\n         ([^<]|<(?!inet))+\n\n       It  matches  from wherever it starts until it encounters \"<inet\" or the\n       end of the data, and is the kind of pattern that  might  be  used  when\n       processing an XML file. Each iteration of the outer parentheses matches\n       either  one  character that is not \"<\" or a \"<\" that is not followed by\n       \"inet\". However, each time a parenthesis is processed,  a  backtracking\n       position  is  passed,  so this formulation uses a memory frame for each\n       matched character. For a long string, a lot of memory is required. Con-\n       sider now this  rewritten  pattern,  which  matches  exactly  the  same\n       strings:\n\n         ([^<]++|<(?!inet))+\n\n       This runs much faster, because sequences of characters that do not con-\n       tain \"<\" are \"swallowed\" in one item inside the parentheses, and a pos-\n       sessive  quantifier  is  used to stop any backtracking into the runs of\n       non-\"<\" characters. This version also uses a lot  less  memory  because\n       entry  to  a  new  set of parentheses happens only when a \"<\" character\n       that is not followed by \"inet\" is encountered (and we  assume  this  is\n       relatively rare).\n\n       This example shows that one way of optimizing performance when matching\n       long  subject strings is to write repeated parenthesized subpatterns to\n       match more than one character whenever possible.\n\n   SETTING RESOURCE LIMITS\n\n       You can set limits on the amount of processing that  takes  place  when\n       matching,  and  on  the amount of heap memory that is used. The default\n       values of the limits are very large, and unlikely ever to operate. They\n       can be changed when PCRE2 is built, and  they  can  also  be  set  when\n       pcre2_match()  or pcre2_dfa_match() is called. For details of these in-\n       terfaces, see the pcre2build documentation  and  the  section  entitled\n       \"The match context\" in the pcre2api documentation.\n\n       The  pcre2test  test program has a modifier called \"find_limits\" which,\n       if applied to a subject line, causes it to  find  the  smallest  limits\n       that allow a pattern to match. This is done by repeatedly matching with\n       different limits.\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 06 December 2022\n       Copyright (c) 1997-2022 University of Cambridge.\n\n\nPCRE2 10.48-DEV                06 December 2022                PCRE2PERFORM(3)\n------------------------------------------------------------------------------\n\n\nPCRE2POSIX(3)              Library Functions Manual              PCRE2POSIX(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nSYNOPSIS\n\n       #include <pcre2posix.h>\n\n       int pcre2_regcomp(regex_t *preg, const char *pattern,\n            int cflags);\n\n       int pcre2_regexec(const regex_t *preg, const char *string,\n            size_t nmatch, regmatch_t pmatch[], int eflags);\n\n       size_t pcre2_regerror(int errcode, const regex_t *preg,\n            char *errbuf, size_t errbuf_size);\n\n       void pcre2_regfree(regex_t *preg);\n\n\nDESCRIPTION\n\n       This  set of functions provides a POSIX-style API for the PCRE2 regular\n       expression 8-bit library. There are no POSIX-style wrappers for PCRE2's\n       16-bit and 32-bit libraries. See the pcre2api documentation for  a  de-\n       scription  of  PCRE2's native API, which contains much additional func-\n       tionality.\n\n       IMPORTANT NOTE: The functions described here are NOT  thread-safe,  and\n       should  not  be used in multi-threaded applications. They are also lim-\n       ited to processing subjects that are not bigger than 2GB. Use  the  na-\n       tive API instead.\n\n       These  functions  are  wrapper functions that ultimately call the PCRE2\n       native API. Their prototypes are defined  in  the  pcre2posix.h  header\n       file, and they all have unique names starting with pcre2_. However, the\n       pcre2posix.h  header  also  contains macro definitions that convert the\n       standard POSIX names such  regcomp()  into  pcre2_regcomp()  etc.  This\n       means  that a program can use the usual POSIX names without running the\n       risk of accidentally linking with POSIX functions from a different  li-\n       brary.\n\n       On  Unix-like systems the PCRE2 POSIX library is called libpcre2-posix,\n       so can be accessed by adding -lpcre2-posix to the command  for  linking\n       an application. Because the POSIX functions call the native ones, it is\n       also necessary to add -lpcre2-8.\n\n       On Windows systems, if you are linking to a DLL version of the library,\n       it  is  recommended  that PCRE2POSIX_SHARED is defined before including\n       the pcre2posix.h header, as it will allow for a more efficient  way  to\n       invoke the functions by adding the __declspec(dllimport) decorator.\n\n       Although  they were not defined as prototypes in pcre2posix.h, releases\n       10.33 to 10.36 of the library contained functions with the POSIX  names\n       regcomp()  etc.  These simply passed their arguments to the PCRE2 func-\n       tions. These functions were provided for backwards  compatibility  with\n       earlier  versions  of  PCRE2, which had only POSIX names. However, this\n       has proved troublesome in situations where a program links with several\n       libraries, some of which use PCRE2's POSIX interface while  others  use\n       the  real  POSIX functions.  For this reason, the POSIX names have been\n       removed since release 10.37.\n\n       Calling the header file pcre2posix.h avoids  any  conflict  with  other\n       POSIX  libraries.  It can, of course, be renamed or aliased as regex.h,\n       which is the \"correct\" name, if there is  no  clash.  It  provides  two\n       structure  types,  regex_t  for compiled internal forms, and regmatch_t\n       for returning captured substrings. It also defines some constants whose\n       names start with \"REG_\"; these are used for setting options and identi-\n       fying error codes.\n\n\nUSING THE POSIX FUNCTIONS\n\n       Note that these functions are just POSIX-style wrappers for PCRE2's na-\n       tive API.  They do not give POSIX  regular  expression  behaviour,  and\n       they are not thread-safe or even POSIX compatible.\n\n       Those  POSIX  option bits that can reasonably be mapped to PCRE2 native\n       options have been implemented. In addition, the option REG_EXTENDED  is\n       defined  with  the  value  zero. This has no effect, but since programs\n       that are written to the POSIX interface often use  it,  this  makes  it\n       easier  to  slot in PCRE2 as a replacement library. Other POSIX options\n       are not even defined.\n\n       There are also some options that are not defined by POSIX.  These  have\n       been  added  at  the  request  of users who want to make use of certain\n       PCRE2-specific features via the POSIX calling interface or to  add  BSD\n       or GNU functionality.\n\n       When  PCRE2  is  called via these functions, it is only the API that is\n       POSIX-like in style. The syntax and semantics of  the  regular  expres-\n       sions  themselves  are  still  those of Perl, subject to the setting of\n       various PCRE2 options, as described below. \"POSIX-like in style\"  means\n       that  the  API  approximates  to  the POSIX definition; it is not fully\n       POSIX-compatible, and in multi-unit encoding  domains  it  is  probably\n       even less compatible.\n\n       The  descriptions  below use the actual names of the functions, but, as\n       described above, the standard POSIX names (without the  pcre2_  prefix)\n       may also be used.\n\n\nCOMPILING A PATTERN\n\n       The function pcre2_regcomp() is called to compile a pattern into an in-\n       ternal  form. By default, the pattern is a C string terminated by a bi-\n       nary zero (but see REG_PEND below). The preg argument is a pointer to a\n       regex_t structure that is used as a base for storing information  about\n       the  compiled  regular  expression.  It  is  also  used  for input when\n       REG_PEND is set. The regex_t structure used by pcre2_regcomp()  is  de-\n       fined  in  pcre2posix.h  and  is  not the same as the structure used by\n       other libraries that provide POSIX-style matching.\n\n       The argument cflags is either zero, or contains one or more of the bits\n       defined by the following macros:\n\n         REG_DOTALL\n\n       The PCRE2_DOTALL option is set when the regular  expression  is  passed\n       for  compilation  to  the  native function. Note that REG_DOTALL is not\n       part of the POSIX standard.\n\n         REG_ICASE\n\n       The PCRE2_CASELESS option is set when the regular expression is  passed\n       for compilation to the native function.\n\n         REG_NEWLINE\n\n       The PCRE2_MULTILINE option is set when the regular expression is passed\n       for  compilation  to the native function. Note that this does not mimic\n       the defined POSIX behaviour for REG_NEWLINE  (see  the  following  sec-\n       tion).\n\n         REG_NOSPEC\n\n       The  PCRE2_LITERAL  option is set when the regular expression is passed\n       for compilation to the native function. This disables all meta  charac-\n       ters  in the pattern, causing it to be treated as a literal string. The\n       only other options that are  allowed  with  REG_NOSPEC  are  REG_ICASE,\n       REG_NOSUB,  REG_PEND,  and REG_UTF. Note that REG_NOSPEC is not part of\n       the POSIX standard.\n\n         REG_NOSUB\n\n       When  a  pattern  that  is  compiled  with  this  flag  is  passed   to\n       pcre2_regexec()  for  matching, the nmatch and pmatch arguments are ig-\n       nored, and no captured strings are returned. Versions of the PCRE2  li-\n       brary  prior to 10.22 used to set the PCRE2_NO_AUTO_CAPTURE compile op-\n       tion, but this no longer happens because it disables the use  of  back-\n       references.\n\n         REG_PEND\n\n       If  this option is set, the reg_endp field in the preg structure (which\n       has the type const char *) must be set to point to the character beyond\n       the end of the pattern before calling pcre2_regcomp(). The pattern  it-\n       self  may  now  contain binary zeros, which are treated as data charac-\n       ters. Without REG_PEND, a binary zero terminates the  pattern  and  the\n       re_endp field is ignored. This is a GNU extension to the POSIX standard\n       and  should be used with caution in software intended to be portable to\n       other systems.\n\n         REG_UCP\n\n       The PCRE2_UCP option is set when the regular expression is  passed  for\n       compilation  to  the  native function. This causes PCRE2 to use Unicode\n       properties when matching \\d, \\w,  etc.,  instead  of  just  recognizing\n       ASCII values. Note that REG_UCP is not part of the POSIX standard.\n\n         REG_UNGREEDY\n\n       The  PCRE2_UNGREEDY option is set when the regular expression is passed\n       for compilation to the native function. Note that REG_UNGREEDY  is  not\n       part of the POSIX standard.\n\n         REG_UTF\n\n       The  PCRE2_UTF  option is set when the regular expression is passed for\n       compilation to the native function. This causes the pattern itself  and\n       all  data  strings used for matching it to be treated as UTF-8 strings.\n       Note that REG_UTF is not part of the POSIX standard.\n\n       In the absence of these flags, no options  are  passed  to  the  native\n       function.  This means that the regex is compiled with PCRE2 default se-\n       mantics.  In  particular,  the way it handles newline characters in the\n       subject string is the Perl way, not the POSIX way.  Note  that  setting\n       PCRE2_MULTILINE has only some of the effects specified for REG_NEWLINE.\n       It  does not affect the way newlines are matched by the dot metacharac-\n       ter (they are not) or by a negative class such as [^a] (they are).\n\n       The yield of pcre2_regcomp() is zero on success,  and  non-zero  other-\n       wise.  The preg structure is filled in on success, and one other member\n       of  the  structure (as well as re_endp) is public: re_nsub contains the\n       number of capturing subpatterns in the regular expression. Various  er-\n       ror codes are defined in the header file.\n\n       NOTE: If the yield of pcre2_regcomp() is non-zero, you must not attempt\n       to use the contents of the preg structure. If, for example, you pass it\n       to  pcre2_regexec(), the result is undefined and your program is likely\n       to crash.\n\n\nMATCHING NEWLINE CHARACTERS\n\n       This area is not simple, because POSIX and Perl take different views of\n       things.  It is not possible to get PCRE2 to obey POSIX  semantics,  but\n       then PCRE2 was never intended to be a POSIX engine. The following table\n       lists  the  different  possibilities for matching newline characters in\n       Perl and PCRE2:\n\n                                 Default   Change with\n\n         . matches newline          no     PCRE2_DOTALL\n         newline matches [^a]       yes    not changeable\n         $ matches \\n at end        yes    PCRE2_DOLLAR_ENDONLY\n         $ matches \\n in middle     no     PCRE2_MULTILINE\n         ^ matches \\n in middle     no     PCRE2_MULTILINE\n\n       This is the equivalent table for a POSIX-compatible pattern matcher:\n\n                                 Default   Change with\n\n         . matches newline          yes    REG_NEWLINE\n         newline matches [^a]       yes    REG_NEWLINE\n         $ matches \\n at end        no     REG_NEWLINE\n         $ matches \\n in middle     no     REG_NEWLINE\n         ^ matches \\n in middle     no     REG_NEWLINE\n\n       This behaviour is not what happens when PCRE2 is called via  its  POSIX\n       API.  By  default, PCRE2's behaviour is the same as Perl's, except that\n       there is no equivalent for PCRE2_DOLLAR_ENDONLY in Perl. In both  PCRE2\n       and Perl, there is no way to stop newline from matching [^a].\n\n       Default  POSIX newline handling can be obtained by setting PCRE2_DOTALL\n       and PCRE2_DOLLAR_ENDONLY when  calling  pcre2_compile()  directly,  but\n       there is no way to make PCRE2 behave exactly as for the REG_NEWLINE ac-\n       tion.  When  using  the  POSIX  API,  passing  REG_NEWLINE  to  PCRE2's\n       pcre2_regcomp()  function  causes  PCRE2_MULTILINE  to  be  passed   to\n       pcre2_compile(), and REG_DOTALL passes PCRE2_DOTALL. There is no way to\n       pass PCRE2_DOLLAR_ENDONLY.\n\n\nMATCHING A PATTERN\n\n       The function pcre2_regexec() is called to match a compiled pattern preg\n       against  a  given string, which is by default terminated by a zero byte\n       (but see REG_STARTEND below), subject to the options in eflags.   These\n       can be:\n\n         REG_NOTBOL\n\n       The PCRE2_NOTBOL option is set when calling the underlying PCRE2 match-\n       ing function.\n\n         REG_NOTEMPTY\n\n       The  PCRE2_NOTEMPTY  option  is  set  when calling the underlying PCRE2\n       matching function. Note that REG_NOTEMPTY is  not  part  of  the  POSIX\n       standard.  However, setting this option can give more POSIX-like behav-\n       iour in some situations.\n\n         REG_NOTEOL\n\n       The PCRE2_NOTEOL option is set when calling the underlying PCRE2 match-\n       ing function.\n\n         REG_STARTEND\n\n       When this option  is  set,  the  subject  string  starts  at  string  +\n       pmatch[0].rm_so  and  ends  at  string  + pmatch[0].rm_eo, which should\n       point to the first character beyond the string. There may be binary ze-\n       ros within the subject string, and indeed, using  REG_STARTEND  is  the\n       only way to pass a subject string that contains a binary zero.\n\n       Whatever  the  value  of  pmatch[0].rm_so,  the  offsets of the matched\n       string and any captured substrings are  still  given  relative  to  the\n       start  of  string  itself. (Before PCRE2 release 10.30 these were given\n       relative to string + pmatch[0].rm_so, but this differs from  other  im-\n       plementations.)\n\n       This  is  a  BSD  extension,  compatible with but not specified by IEEE\n       Standard 1003.2 (POSIX.2), and should be used with caution in  software\n       intended  to  be  portable to other systems. Note that a non-zero rm_so\n       does not imply REG_NOTBOL; REG_STARTEND affects only the  location  and\n       length  of  the string, not how it is matched. Setting REG_STARTEND and\n       passing pmatch as NULL are mutually exclusive; the error REG_INVARG  is\n       returned.\n\n       If  the pattern was compiled with the REG_NOSUB flag, no data about any\n       matched strings  is  returned.  The  nmatch  and  pmatch  arguments  of\n       pcre2_regexec()  are  ignored  (except  possibly as input for REG_STAR-\n       TEND).\n\n       The value of nmatch may be zero, and the value pmatch may be NULL  (un-\n       less  REG_STARTEND  is  set);  in  both  these  cases no data about any\n       matched strings is returned.\n\n       Otherwise, the portion of the string that was  matched,  and  also  any\n       captured substrings, are returned via the pmatch argument, which points\n       to  an  array  of  nmatch structures of type regmatch_t, containing the\n       members rm_so and rm_eo. These contain the byte  offset  to  the  first\n       character of each substring and the offset to the first character after\n       the  end of each substring, respectively. The 0th element of the vector\n       relates to the entire portion of string that  was  matched;  subsequent\n       elements relate to the capturing subpatterns of the regular expression.\n       Unused entries in the array have both structure members set to -1.\n\n       regmatch_t  as  well  as  the  regoff_t  typedef it uses are defined in\n       pcre2posix.h and are not warranted to have the same size or  layout  as\n       other  similarly  named  types from other libraries that provide POSIX-\n       style matching.\n\n       A successful match yields a zero return; various error  codes  are  de-\n       fined  in the header file, of which REG_NOMATCH is the \"expected\" fail-\n       ure code.\n\n\nERROR MESSAGES\n\n       The pcre2_regerror() function maps a  non-zero  errorcode  from  either\n       pcre2_regcomp()  or  pcre2_regexec() to a printable message. If preg is\n       not NULL, the error should have arisen from the use of that  structure.\n       A  message  terminated  by  a  binary  zero is placed in errbuf. If the\n       buffer is too short, only the first errbuf_size - 1 characters  of  the\n       error message are used. The yield of the function is the size of buffer\n       needed  to hold the whole message, including the terminating zero. This\n       value is greater than errbuf_size if the message was truncated.\n\n\nMEMORY USAGE\n\n       Compiling a regular expression causes memory to be allocated and  asso-\n       ciated  with the preg structure. The function pcre2_regfree() frees all\n       such memory, after which preg may no longer be used as a  compiled  ex-\n       pression.\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 27 November 2024\n       Copyright (c) 1997-2024 University of Cambridge.\n\n\nPCRE2 10.48-DEV                27 November 2024                  PCRE2POSIX(3)\n------------------------------------------------------------------------------\n\n\nPCRE2SAMPLE(3)             Library Functions Manual             PCRE2SAMPLE(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nPCRE2 SAMPLE PROGRAM\n\n       A  simple, complete demonstration program to get you started with using\n       PCRE2 is supplied in the file pcre2demo.c in the src directory  in  the\n       PCRE2 distribution. A listing of this program is given in the pcre2demo\n       documentation. If you do not have a copy of the PCRE2 distribution, you\n       can save this listing to recreate the contents of pcre2demo.c.\n\n       The  demonstration  program compiles the regular expression that is its\n       first argument, and matches it against the subject string in its second\n       argument. No PCRE2 options are set, and default  character  tables  are\n       used. If matching succeeds, the program outputs the portion of the sub-\n       ject  that  matched,  together  with  the contents of any captured sub-\n       strings.\n\n       If the -g option is given on the command line, the program then goes on\n       to check for further matches of the same regular expression in the same\n       subject string. The logic is a little bit tricky because of the  possi-\n       bility  of  matching an empty string. Comments in the code explain what\n       is going on.\n\n       The code in pcre2demo.c is an 8-bit program that uses the  PCRE2  8-bit\n       library.  It  handles  strings  and characters that are stored in 8-bit\n       code units.  By default, one character corresponds to  one  code  unit,\n       but  if  the  pattern starts with \"(*UTF)\", both it and the subject are\n       treated as UTF-8 strings, where characters  may  occupy  multiple  code\n       units.\n\n       If  PCRE2  is installed in the standard include and library directories\n       for your operating system, you should be able to compile the demonstra-\n       tion program using a command like this:\n\n         cc -o pcre2demo pcre2demo.c -lpcre2-8\n\n       If PCRE2 is installed elsewhere, you may need to add additional options\n       to the command line. For example, on a Unix-like system that has  PCRE2\n       installed  in /usr/local, you can compile the demonstration program us-\n       ing a command like this:\n\n         cc -o pcre2demo -I/usr/local/include pcre2demo.c \\\n            -L/usr/local/lib -lpcre2-8\n\n       Once you have built the demonstration program, you can run simple tests\n       like this:\n\n         ./pcre2demo 'cat|dog' 'the cat sat on the mat'\n         ./pcre2demo -g 'cat|dog' 'the dog sat on the cat'\n         ./pcre2demo -i 'cat' 'the dog sat on the CAT'\n\n       Note that there is a  much  more  comprehensive  test  program,  called\n       pcre2test,  which supports many more facilities for testing regular ex-\n       pressions using all three PCRE2 libraries (8-bit, 16-bit,  and  32-bit,\n       though  not all three need be installed). The pcre2demo program is pro-\n       vided as a relatively simple coding example.\n\n       If you try to run pcre2demo when PCRE2 is not installed in the standard\n       library directory, you may get an error like  this  on  some  operating\n       systems (e.g. Solaris):\n\n         ld.so.1: pcre2demo: fatal: libpcre2-8.so.0: open failed: No such file\n       or directory\n\n       This  is  caused  by the way shared library support works on those sys-\n       tems. You need to add\n\n         -R/usr/local/lib\n\n       (for example) to the compile command to get round this problem.\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 28 February 2025\n       Copyright (c) 1997-2016 University of Cambridge.\n\n\nPCRE2 10.48-DEV                28 February 2025                 PCRE2SAMPLE(3)\n------------------------------------------------------------------------------\nPCRE2SERIALIZE(3)          Library Functions Manual          PCRE2SERIALIZE(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nSAVING AND RE-USING PRECOMPILED PCRE2 PATTERNS\n\n       int32_t pcre2_serialize_decode(pcre2_code **codes,\n         int32_t number_of_codes, const uint8_t *bytes,\n         pcre2_general_context *gcontext);\n\n       int32_t pcre2_serialize_encode(const pcre2_code **codes,\n         int32_t number_of_codes, uint8_t **serialized_bytes,\n         PCRE2_SIZE *serialized_size, pcre2_general_context *gcontext);\n\n       void pcre2_serialize_free(uint8_t *bytes);\n\n       int32_t pcre2_serialize_get_number_of_codes(const uint8_t *bytes);\n\n       If  you  are running an application that uses a large number of regular\n       expression patterns, it may be useful to store them  in  a  precompiled\n       form  instead  of  having to compile them every time the application is\n       run. However, if you are using the just-in-time  optimization  feature,\n       it is not possible to save and reload the JIT data, because it is posi-\n       tion-dependent.  The  host  on  which the patterns are reloaded must be\n       running the same version of PCRE2, with the same code unit  width,  and\n       must  also have the same endianness, pointer width and PCRE2_SIZE type.\n       For example, patterns compiled on a 32-bit system using PCRE2's  16-bit\n       library cannot be reloaded on a 64-bit system, nor can they be reloaded\n       using the 8-bit library.\n\n       Note  that  \"serialization\" in PCRE2 does not convert compiled patterns\n       to an abstract format like Java or .NET serialization.  The  serialized\n       output  is really just a bytecode dump, which is why it can only be re-\n       loaded in the same environment as the one that created  it.  Hence  the\n       restrictions  mentioned  above.   Applications  that are not statically\n       linked with a fixed version of PCRE2 must be prepared to recompile pat-\n       terns from their sources, in order to be immune to PCRE2 upgrades.\n\n\nSECURITY CONCERNS\n\n       The facility for saving and restoring compiled patterns is intended for\n       use within individual applications.  As  such,  the  data  supplied  to\n       pcre2_serialize_decode()  is expected to be trusted data, not data from\n       arbitrary external sources.  There  is  only  some  simple  consistency\n       checking, not complete validation of what is being re-loaded. Corrupted\n       data may cause undefined results. For example, if the length field of a\n       pattern in the serialized data is corrupted, the deserializing code may\n       read beyond the end of the byte stream that is passed to it.\n\n\nSAVING COMPILED PATTERNS\n\n       Before compiled patterns can be saved they must be serialized, which in\n       PCRE2  means converting the pattern to a stream of bytes. A single byte\n       stream may contain any number of compiled patterns, but they  must  all\n       use  the same character tables. A single copy of the tables is included\n       in the byte stream (its size is 1088 bytes). For more details of  char-\n       acter  tables,  see the section on locale support in the pcre2api docu-\n       mentation.\n\n       The function pcre2_serialize_encode() creates a serialized byte  stream\n       from  a  list of compiled patterns. Its first two arguments specify the\n       list, being a pointer to a vector of pointers to compiled patterns, and\n       the length of the vector. The third and fourth arguments point to vari-\n       ables which are set to point to the created byte stream and its length,\n       respectively. The final argument is a pointer  to  a  general  context,\n       which  can  be  used  to specify custom memory management functions. If\n       this argument is NULL, malloc() is used to obtain memory for  the  byte\n       stream. The yield of the function is the number of serialized patterns,\n       or one of the following negative error codes:\n\n         PCRE2_ERROR_BADDATA      the number of patterns is zero or less\n         PCRE2_ERROR_BADMAGIC     mismatch of id bytes in one of the patterns\n         PCRE2_ERROR_NOMEMORY     memory allocation failed\n         PCRE2_ERROR_MIXEDTABLES  the patterns do not all use the same tables\n         PCRE2_ERROR_NULL         the 1st, 3rd, or 4th argument is NULL\n\n       PCRE2_ERROR_BADMAGIC  means  either that a pattern's code has been cor-\n       rupted, or that a slot in the vector does not point to a compiled  pat-\n       tern.\n\n       Once a set of patterns has been serialized you can save the data in any\n       appropriate  manner. Here is sample code that compiles two patterns and\n       writes them to a file. It assumes that the variable fd refers to a file\n       that is open for output. The error checking that should be present in a\n       real application has been omitted for simplicity.\n\n         int errorcode;\n         uint8_t *bytes;\n         PCRE2_SIZE erroroffset;\n         PCRE2_SIZE bytescount;\n         pcre2_code *list_of_codes[2];\n         list_of_codes[0] = pcre2_compile(\"first pattern\",\n           PCRE2_ZERO_TERMINATED, 0, &errorcode, &erroroffset, NULL);\n         list_of_codes[1] = pcre2_compile(\"second pattern\",\n           PCRE2_ZERO_TERMINATED, 0, &errorcode, &erroroffset, NULL);\n         errorcode = pcre2_serialize_encode(list_of_codes, 2, &bytes,\n           &bytescount, NULL);\n         errorcode = fwrite(bytes, 1, bytescount, fd);\n\n       Note that the serialized data is binary data that may  contain  any  of\n       the  256  possible  byte values. On systems that make a distinction be-\n       tween binary and non-binary data, be sure that the file is  opened  for\n       binary output.\n\n       Serializing  a  set  of patterns leaves the original data untouched, so\n       they can still be used for matching. Their memory  must  eventually  be\n       freed in the usual way by calling pcre2_code_free(). When you have fin-\n       ished with the byte stream, it too must be freed by calling pcre2_seri-\n       alize_free().  If  this function is called with a NULL argument, it re-\n       turns immediately without doing anything.\n\n\nRE-USING PRECOMPILED PATTERNS\n\n       In order to re-use a set of saved patterns you must first make the  se-\n       rialized  byte stream available in main memory (for example, by reading\n       from a file). The management of this memory block is up to the applica-\n       tion. You can use the pcre2_serialize_get_number_of_codes() function to\n       find out how many compiled patterns are in the serialized data  without\n       actually decoding the patterns:\n\n         uint8_t *bytes = <serialized data>;\n         int32_t number_of_codes = pcre2_serialize_get_number_of_codes(bytes);\n\n       The pcre2_serialize_decode() function reads a byte stream and recreates\n       the compiled patterns in new memory blocks, setting pointers to them in\n       a  vector.  The  first two arguments are a pointer to a suitable vector\n       and its length, and the third argument points to a byte stream. The fi-\n       nal argument is a pointer to a general context, which can  be  used  to\n       specify custom memory management functions for the decoded patterns. If\n       this argument is NULL, malloc() and free() are used. After deserializa-\n       tion, the byte stream is no longer needed and can be discarded.\n\n         pcre2_code *list_of_codes[2];\n         uint8_t *bytes = <serialized data>;\n         int32_t number_of_codes =\n           pcre2_serialize_decode(list_of_codes, 2, bytes, NULL);\n\n       If  the  vector  is  not  large enough for all the patterns in the byte\n       stream, it is filled with those that fit, and  the  remainder  are  ig-\n       nored.  The yield of the function is the number of decoded patterns, or\n       one of the following negative error codes:\n\n         PCRE2_ERROR_BADDATA    second argument is zero or less\n         PCRE2_ERROR_BADMAGIC   mismatch of id bytes in the data\n         PCRE2_ERROR_BADMODE    mismatch of code unit size or PCRE2 version\n         PCRE2_ERROR_BADSERIALIZEDDATA  other sanity check failure\n         PCRE2_ERROR_MEMORY     memory allocation failed\n         PCRE2_ERROR_NULL       first or third argument is NULL\n\n       PCRE2_ERROR_BADMAGIC may mean that the data is corrupt, or that it  was\n       compiled on a system with different endianness.\n\n       Decoded patterns can be used for matching in the usual way, and must be\n       freed  by  calling pcre2_code_free(). However, be aware that there is a\n       potential race issue if you are using multiple patterns that  were  de-\n       coded  from a single byte stream in a multithreaded application. A sin-\n       gle copy of the character tables is used by all  the  decoded  patterns\n       and a reference count is used to arrange for its memory to be automati-\n       cally  freed when the last pattern is freed, but there is no locking on\n       this reference count. Therefore, if you want to call  pcre2_code_free()\n       for  these  patterns  in  different  threads, you must arrange your own\n       locking, and ensure that pcre2_code_free()  cannot  be  called  by  two\n       threads at the same time.\n\n       If  a pattern was processed by pcre2_jit_compile() before being serial-\n       ized, the JIT data is discarded and so is no longer available  after  a\n       save/restore  cycle.  You can, however, process a restored pattern with\n       pcre2_jit_compile() if you wish.\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 19 January 2024\n       Copyright (c) 1997-2018 University of Cambridge.\n\n\nPCRE2 10.48-DEV                 19 January 2024              PCRE2SERIALIZE(3)\n------------------------------------------------------------------------------\n\n\nPCRE2SYNTAX(3)             Library Functions Manual             PCRE2SYNTAX(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nPCRE2 REGULAR EXPRESSION SYNTAX SUMMARY\n\n       The  full  syntax and semantics of the regular expression patterns that\n       are supported by PCRE2 are described in the pcre2pattern documentation.\n       This document contains a quick-reference summary of the pattern  syntax\n       followed by the syntax of replacement strings in substitution function.\n       The full description of the latter is in the pcre2api documentation.\n\n\nQUOTING\n\n         \\x         where x is non-alphanumeric is a literal x\n         \\Q...\\E    treat enclosed characters as literal\n\n       Note that white space inside \\Q...\\E is always treated as literal, even\n       if PCRE2_EXTENDED is set, causing most other white space to be ignored.\n       Note  also  that  PCRE2's handling of \\Q...\\E has some differences from\n       Perl's. See the pcre2pattern documentation for details.\n\n\nBRACED ITEMS\n\n       With one exception, wherever brace characters { and } are  required  to\n       enclose  data for constructions such as \\g{2} or \\k{name}, space and/or\n       horizontal tab characters that follow { or precede }  are  allowed  and\n       are ignored. In the case of quantifiers, they may also appear before or\n       after  the comma. The exception is \\u{...} which is not Perl-compatible\n       and is recognized only when PCRE2_EXTRA_ALT_BSUX is set. This is an EC-\n       MAScript compatibility feature, and follows ECMAScript's behaviour.\n\n\nESCAPED CHARACTERS\n\n       This table applies to ASCII and Unicode environments.  An  unrecognized\n       escape sequence causes an error.\n\n         \\a         alarm, that is, the BEL character (hex 07)\n         \\cx        \"control-x\", where x is a non-control ASCII character\n         \\e         escape (hex 1B)\n         \\f         form feed (hex 0C)\n         \\n         newline (hex 0A)\n         \\r         carriage return (hex 0D)\n         \\t         tab (hex 09)\n         \\0dd       character with octal code 0dd\n         \\ddd       character with octal code ddd, or backreference\n         \\o{ddd..}  character with octal code ddd..\n         \\N{U+hh..} character with Unicode code point hh.. (Unicode mode only)\n         \\xhh       character with hex code hh\n         \\x{hh..}   character with hex code hh..\n\n       \\N{U+hh..} is synonymous with \\x{hh..} but is not supported in environ-\n       ments  that  use  EBCDIC code (mainly IBM mainframes). Note that \\N not\n       followed by an opening curly bracket has a different meaning  (see  be-\n       low).\n\n       If PCRE2_ALT_BSUX or PCRE2_EXTRA_ALT_BSUX is set (\"ALT_BSUX mode\"), the\n       following are also recognized:\n\n         \\U         the character \"U\"\n         \\uhhhh     character with hex code hhhh\n         \\u{hh..}   character with hex code hh.. but only for EXTRA_ALT_BSUX\n\n       When  \\x  is not followed by {, one or two hexadecimal digits are read,\n       but in ALT_BSUX mode \\x must be followed by two hexadecimal  digits  to\n       be  recognized  as a hexadecimal escape; otherwise it matches a literal\n       \"x\".  Likewise, if \\u (in ALT_BSUX mode) is not followed by four  hexa-\n       decimal  digits or (in EXTRA_ALT_BSUX mode) a sequence of hex digits in\n       curly brackets, it matches a literal \"u\".\n\n       Note that \\0dd is always an octal code. The treatment of backslash fol-\n       lowed by a non-zero digit is complicated; for details see  the  section\n       \"Non-printing  characters\" in the pcre2pattern documentation, where de-\n       tails of escape processing in EBCDIC environments are also given.\n\n\nCHARACTER TYPES\n\n         .          any character except newline;\n                      in dotall mode, any character whatsoever\n         \\C         one code unit, even in UTF mode (best avoided)\n         \\d         a decimal digit\n         \\D         a character that is not a decimal digit\n         \\h         a horizontal white space character\n         \\H         a character that is not a horizontal white space character\n         \\N         a character that is not a newline\n         \\p{xx}     a character with the xx property\n         \\P{xx}     a character without the xx property\n         \\R         a newline sequence\n         \\s         a white space character\n         \\S         a character that is not a white space character\n         \\v         a vertical white space character\n         \\V         a character that is not a vertical white space character\n         \\w         a \"word\" character\n         \\W         a \"non-word\" character\n         \\X         a Unicode extended grapheme cluster\n\n       \\C is dangerous because it may leave the current matching point in  the\n       middle of a UTF-8 or UTF-16 character. The application can lock out the\n       use  of  \\C  by  setting the PCRE2_NEVER_BACKSLASH_C option. It is also\n       possible to build PCRE2 with the use of \\C permanently disabled.\n\n       By default, \\d, \\s, and \\w match only ASCII characters, even  in  UTF-8\n       mode or in the 16-bit and 32-bit libraries. However, if locale-specific\n       matching  is  happening,  \\s and \\w may also match characters with code\n       points in the range 128-255. If the PCRE2_UCP option is set, the behav-\n       iour of these escape sequences is changed to use Unicode properties and\n       they match many more characters, but there  are  some  option  settings\n       that  can  restrict individual sequences to matching only ASCII charac-\n       ters.\n\n       Property descriptions in \\p and \\P are matched caselessly; hyphens, un-\n       derscores, and ASCII white space characters are ignored, in  accordance\n       with  Unicode's  \"loose matching\" rules. For example, \\p{Bidi_Class=al}\n       is the same as \\p{ bidi class = AL }.\n\n\nGENERAL CATEGORY PROPERTIES FOR \\p and \\P\n\n         C          Other\n         Cc         Control\n         Cf         Format\n         Cn         Unassigned\n         Co         Private use\n         Cs         Surrogate\n\n         L          Letter\n         Lc         Cased letter, the union of Ll, Lu, and Lt\n         L&         Synonym of Lc\n         Ll         Lower case letter\n         Lm         Modifier letter\n         Lo         Other letter\n         Lt         Title case letter\n         Lu         Upper case letter\n\n         M          Mark\n         Mc         Spacing mark\n         Me         Enclosing mark\n         Mn         Non-spacing mark\n\n         N          Number\n         Nd         Decimal number\n         Nl         Letter number\n         No         Other number\n\n         P          Punctuation\n         Pc         Connector punctuation\n         Pd         Dash punctuation\n         Pe         Close punctuation\n         Pf         Final punctuation\n         Pi         Initial punctuation\n         Po         Other punctuation\n         Ps         Open punctuation\n\n         S          Symbol\n         Sc         Currency symbol\n         Sk         Modifier symbol\n         Sm         Mathematical symbol\n         So         Other symbol\n\n         Z          Separator\n         Zl         Line separator\n         Zp         Paragraph separator\n         Zs         Space separator\n\n       From release 10.45, when caseless matching is set, Ll, Lu, and  Lt  are\n       all equivalent to Lc.\n\n\nPCRE2 SPECIAL CATEGORY PROPERTIES FOR \\p and \\P\n\n         Xan        Alphanumeric: union of properties L and N\n         Xps        POSIX space: property Z or tab, NL, VT, FF, CR\n         Xsp        Perl space: property Z or tab, NL, VT, FF, CR\n         Xuc        Universally-named character: one that can be\n                      represented by a Universal Character Name\n         Xwd        Perl word: property Xan or underscore\n\n       Perl and POSIX space are now the same. Perl added VT to its space char-\n       acter set at release 5.18.\n\n\nBINARY PROPERTIES FOR \\p AND \\P\n\n       Unicode  defines  a  number  of  binary properties, that is, properties\n       whose only values are true or false. You can obtain  a  list  of  those\n       that  are  recognized  by \\p and \\P, along with their abbreviations, by\n       running this command:\n\n         pcre2test -LP\n\n\nSCRIPT MATCHING WITH \\p AND \\P\n\n       Many script names and their 4-letter abbreviations  are  recognized  in\n       \\p{sc:...}  or  \\p{scx:...} items, or on their own with \\p (and also \\P\n       of course). You can obtain a list of these scripts by running this com-\n       mand:\n\n         pcre2test -LS\n\n\nTHE BIDI_CLASS PROPERTY FOR \\p AND \\P\n\n         \\p{Bidi_Class:<class>}   matches a character with the given class\n         \\p{BC:<class>}           matches a character with the given class\n\n       The recognized classes are:\n\n         AL          Arabic letter\n         AN          Arabic number\n         B           paragraph separator\n         BN          boundary neutral\n         CS          common separator\n         EN          European number\n         ES          European separator\n         ET          European terminator\n         FSI         first strong isolate\n         L           left-to-right\n         LRE         left-to-right embedding\n         LRI         left-to-right isolate\n         LRO         left-to-right override\n         NSM         non-spacing mark\n         ON          other neutral\n         PDF         pop directional format\n         PDI         pop directional isolate\n         R           right-to-left\n         RLE         right-to-left embedding\n         RLI         right-to-left isolate\n         RLO         right-to-left override\n         S           segment separator\n         WS          white space\n\n\nCHARACTER CLASSES\n\n         [...]       positive character class\n         [^...]      negative character class\n         [x-y]       range (can be used for hex characters)\n         [[:xxx:]]   positive POSIX named set\n         [[:^xxx:]]  negative POSIX named set\n\n         alnum       alphanumeric\n         alpha       alphabetic\n         ascii       0-127\n         blank       space or tab\n         cntrl       control character\n         digit       decimal digit\n         graph       printing, excluding space\n         lower       lower case letter\n         print       printing, including space\n         punct       printing, excluding alphanumeric\n         space       white space\n         upper       upper case letter\n         word        same as \\w\n         xdigit      hexadecimal digit\n\n       In PCRE2, POSIX character set names recognize only ASCII characters  by\n       default,  but  some of them use Unicode properties if PCRE2_UCP is set.\n       You can use \\Q...\\E inside a character class.\n\n       When PCRE2_ALT_EXTENDED_CLASS is set, UTS#18 extended character classes\n       may be used, allowing nested character classes, combined using set  op-\n       erators.\n\n         [x&&[^y]]   UTS#18 extended character class\n\n         x||y        set union (OR)\n         x&&y        set intersection (AND)\n         x--y        set difference (AND NOT)\n         x~~y        set symmetric difference (XOR)\n\n\nPERL EXTENDED CHARACTER CLASSES\n\n         (?[...])                Perl extended character class\n         (?[\\p{Thai} & \\p{Nd}])  operators; white space ignored\n         (?[(x - y) & z])        parentheses for grouping\n\n         (?[ [^3] & \\p{Nd} ])    [...] is a nested ordinary class\n         (?[ [:alpha:] - [z] ])  POSIX set is allowed outside [...]\n         (?[  \\d  -  [3]  ])          backslash-escaped set is allowed outside\n       [...]\n         (?[ !\\n & [:ascii:] ])  backslash-escaped character is  allowed  out-\n       side [...]\n                             all  other  characters or ranges must be enclosed\n       in [...]\n\n         x|y, x+y                set union (OR)\n         x&y                     set intersection (AND)\n         x-y                     set difference (AND NOT)\n         x^y                     set symmetric difference (XOR)\n         !x                      set complement (NOT)\n\n       Inside a Perl extended character class, [...] switches mode to  be  in-\n       terpreted  as  an  ordinary character class. Outside of a nested [...],\n       the only items permitted are backslash-escapes, POSIX sets,  operators,\n       and  parentheses. Inside a nested ordinary class, ^ has its usual mean-\n       ing (inverts the class when used as the first character); outside of  a\n       nested class, ^ is the XOR operator.\n\n\nQUANTIFIERS\n\n         ?           0 or 1, greedy\n         ?+          0 or 1, possessive\n         ??          0 or 1, lazy\n         *           0 or more, greedy\n         *+          0 or more, possessive\n         *?          0 or more, lazy\n         +           1 or more, greedy\n         ++          1 or more, possessive\n         +?          1 or more, lazy\n         {n}         exactly n\n         {n,m}       at least n, no more than m, greedy\n         {n,m}+      at least n, no more than m, possessive\n         {n,m}?      at least n, no more than m, lazy\n         {n,}        n or more, greedy\n         {n,}+       n or more, possessive\n         {n,}?       n or more, lazy\n         {,m}        zero up to m, greedy\n         {,m}+       zero up to m, possessive\n         {,m}?       zero up to m, lazy\n\n\nANCHORS AND SIMPLE ASSERTIONS\n\n         \\b          word boundary\n         \\B          not a word boundary\n         ^           start of subject\n                       also after an internal newline in multiline mode\n                       (after any newline if PCRE2_ALT_CIRCUMFLEX is set)\n         \\A          start of subject\n         $           end of subject\n                       also before newline at end of subject\n                       also before internal newline in multiline mode\n         \\Z          end of subject\n                       also before newline at end of subject\n         \\z          end of subject\n         \\G          first matching position in subject\n\n\nREPORTED MATCH POINT SETTING\n\n         \\K          set reported start of match\n\n       From  release 10.38 \\K is not permitted by default in lookaround asser-\n       tions, for compatibility with Perl.  However,  if  the  PCRE2_EXTRA_AL-\n       LOW_LOOKAROUND_BSK option is set, the previous behaviour is re-enabled.\n       When this option is set, \\K is honoured in positive assertions, but ig-\n       nored in negative ones.\n\n\nALTERNATION\n\n         expr|expr|expr...\n\n\nCAPTURING\n\n         (...)           capture group\n         (?<name>...)    named capture group (Perl)\n         (?'name'...)    named capture group (Perl)\n         (?P<name>...)   named capture group (Python)\n         (?:...)         non-capture group\n         (?|...)         non-capture group; reset group numbers for\n                          capture groups in each alternative\n\n       In  non-UTF  modes, names may contain underscores and ASCII letters and\n       digits; in UTF modes, any Unicode letters and  Unicode  decimal  digits\n       are permitted. In both cases, a name must not start with a digit.\n\n\nATOMIC GROUPS\n\n         (?>...)         atomic non-capture group\n         (*atomic:...)   atomic non-capture group\n\n\nCOMMENT\n\n         (?#....)        comment (not nestable)\n\n\nOPTION SETTING\n       Changes  of these options within a group are automatically cancelled at\n       the end of the group.\n\n         (?a)            all ASCII options\n         (?aD)           restrict \\d to ASCII in UCP mode\n         (?aS)           restrict \\s to ASCII in UCP mode\n         (?aW)           restrict \\w to ASCII in UCP mode\n         (?aP)           restrict all POSIX classes to ASCII in UCP mode\n         (?aT)           restrict POSIX digit classes to ASCII in UCP mode\n         (?i)            caseless\n         (?J)            allow duplicate named groups\n         (?m)            multiline\n         (?n)            no auto capture\n         (?r)            restrict caseless to either ASCII or non-ASCII\n         (?s)            single line (dotall)\n         (?U)            default ungreedy (lazy)\n         (?x)            ignore white space except in classes or \\Q...\\E\n         (?xx)           as (?x) but also ignore space and tab in classes\n         (?-...)         unset the given option(s)\n         (?^)            unset imnrsx options\n\n       (?aP) implies (?aT) as well, though this has no additional effect. How-\n       ever, it means that (?-aP) also implies (?-aT) and disables  all  ASCII\n       restrictions for POSIX classes.\n\n       Unsetting  x or xx unsets both. Several options may be set at once, and\n       a mixture of setting and unsetting such as (?i-x) is allowed, but there\n       may be only one hyphen. Setting (but no unsetting) is allowed after (?^\n       for example (?^in). An option setting may appear at the start of a non-\n       capture group, for example (?i:...).\n\n       The following are recognized only at the very start of a pattern or af-\n       ter one of the newline or \\R sequences or options with similar  syntax.\n       More  than  one of them may appear. For the first three, d is a decimal\n       number.\n\n         (*LIMIT_DEPTH=d)     set the backtracking limit to d\n         (*LIMIT_HEAP=d)      set the heap size limit to d * 1024 bytes\n         (*LIMIT_MATCH=d)     set the match limit to d\n         (*CASELESS_RESTRICT) set PCRE2_EXTRA_CASELESS_RESTRICT when matching\n         (*NOTEMPTY)          set PCRE2_NOTEMPTY when matching\n         (*NOTEMPTY_ATSTART)  set PCRE2_NOTEMPTY_ATSTART when matching\n         (*NO_AUTO_POSSESS)   no auto-possessification (PCRE2_NO_AUTO_POSSESS)\n         (*NO_DOTSTAR_ANCHOR) no .* anchoring (PCRE2_NO_DOTSTAR_ANCHOR)\n         (*NO_JIT)            disable JIT optimization\n         (*NO_START_OPT)      no start-match optimization  (PCRE2_NO_START_OP-\n       TIMIZE)\n         (*TURKISH_CASING)    set PCRE2_EXTRA_TURKISH_CASING when matching\n         (*UTF)               set appropriate UTF mode for the library in use\n         (*UCP)                set  PCRE2_UCP  (use  Unicode properties for \\d\n       etc)\n\n       Note that LIMIT_DEPTH, LIMIT_HEAP, and LIMIT_MATCH can only reduce  the\n       value   of   the   limits   set  by  the  caller  of  pcre2_match()  or\n       pcre2_dfa_match(), not increase them. LIMIT_RECURSION  is  an  obsolete\n       synonym for LIMIT_DEPTH. The application can lock out the use of (*UTF)\n       and  (*UCP)  by setting the PCRE2_NEVER_UTF or PCRE2_NEVER_UCP options,\n       respectively, at compile time.\n\n\nNEWLINE CONVENTION\n\n       These are recognized only at the very start of the pattern or after op-\n       tion settings with a similar syntax.\n\n         (*CR)           carriage return only\n         (*LF)           linefeed only\n         (*CRLF)         carriage return followed by linefeed\n         (*ANYCRLF)      all three of the above\n         (*ANY)          any Unicode newline sequence\n         (*NUL)          the NUL character (binary zero)\n\n\nWHAT \\R MATCHES\n\n       These are recognized only at the very start of the pattern or after op-\n       tion setting with a similar syntax.\n\n         (*BSR_ANYCRLF)  CR, LF, or CRLF\n         (*BSR_UNICODE)  any Unicode newline sequence\n\n\nLOOKAHEAD AND LOOKBEHIND ASSERTIONS\n\n         (?=...)                     )\n         (*pla:...)                  ) positive lookahead\n         (*positive_lookahead:...)   )\n\n         (?!...)                     )\n         (*nla:...)                  ) negative lookahead\n         (*negative_lookahead:...)   )\n\n         (?<=...)                    )\n         (*plb:...)                  ) positive lookbehind\n         (*positive_lookbehind:...)  )\n\n         (?<!...)                    )\n         (*nlb:...)                  ) negative lookbehind\n         (*negative_lookbehind:...)  )\n\n       Each top-level branch of a lookbehind must have a limit for the  number\n       of  characters it matches. If any branch can match a variable number of\n       characters, the maximum for each branch is limited to a  value  set  by\n       the  caller  of  pcre2_compile()  or defaulted. The default is set when\n       PCRE2 is built (ultimate default 255). If every branch matches a  fixed\n       number of characters, the limit for each branch is 65535 characters.\n\n\nNON-ATOMIC LOOKAROUND ASSERTIONS\n\n       These assertions are specific to PCRE2 and are not Perl-compatible.\n\n         (?*...)                                )\n         (*napla:...)                           ) synonyms\n         (*non_atomic_positive_lookahead:...)   )\n\n         (?<*...)                               )\n         (*naplb:...)                           ) synonyms\n         (*non_atomic_positive_lookbehind:...)  )\n\n\nSUBSTRING SCAN ASSERTION\n       This feature is not Perl-compatible.\n\n         (*scan_substring:(grouplist)...)  scan captured substring\n         (*scs:(grouplist)...)             scan captured substring\n\n       The  comma-separated list \"grouplist\" may identify groups in any of the\n       following ways:\n\n         n       absolute reference\n         +n      relative reference\n         -n      relative reference\n         <name>  name\n         'name'  name\n\n\nSCRIPT RUNS\n\n         (*script_run:...)           ) script run, can be backtracked into\n         (*sr:...)                   )\n\n         (*atomic_script_run:...)    ) atomic script run\n         (*asr:...)                  )\n\n\nBACKREFERENCES\n\n         \\n              reference by number (can be ambiguous)\n         \\gn             reference by number\n         \\g{n}           reference by number\n         \\g+n            relative reference by number (PCRE2 extension)\n         \\g-n            relative reference by number\n         \\g{+n}          relative reference by number (PCRE2 extension)\n         \\g{-n}          relative reference by number\n         \\k<name>        reference by name (Perl)\n         \\k'name'        reference by name (Perl)\n         \\g{name}        reference by name (Perl)\n         \\k{name}        reference by name (.NET)\n         (?P=name)       reference by name (Python)\n\n\nSUBROUTINE REFERENCES (POSSIBLY RECURSIVE)\n\n         (?R)            recurse whole pattern\n         (?n)            call subroutine by absolute number\n         (?+n)           call subroutine by relative number\n         (?-n)           call subroutine by relative number\n         (?&name)        call subroutine by name (Perl)\n         (?P>name)       call subroutine by name (Python)\n         \\g<name>        call subroutine by name (Oniguruma)\n         \\g'name'        call subroutine by name (Oniguruma)\n         \\g<n>           call subroutine by absolute number (Oniguruma)\n         \\g'n'           call subroutine by absolute number (Oniguruma)\n         \\g<+n>          call subroutine by relative number (PCRE2 extension)\n         \\g'+n'          call subroutine by relative number (PCRE2 extension)\n         \\g<-n>          call subroutine by relative number (PCRE2 extension)\n         \\g'-n'          call subroutine by relative number (PCRE2 extension)\n\n       The variants using parentheses (?...) may also specify a list  of  cap-\n       ture  groups  to  return, which shall be retained in the calling subex-\n       pression if set during the recursion (this feature is not supported  by\n       Perl).\n\n         (?R(grouplist))       recurse whole pattern, returning capture groups\n                                 (PCRE2 extension)\n         (?n(grouplist))       )\n         (?+n(grouplist))      ) call subroutine, returning capture groups\n         (?-n(grouplist))      )   (PCRE2 extension)\n         (?&name(grouplist))   )\n         (?P>name(grouplist))  )\n\n       The   comma-separated   list   \"grouplist\"  uses  the  same  syntax  as\n       (*scan_substring:(grouplist)...), and may identify groups in any of the\n       following ways:\n\n         n       absolute reference\n         +n      relative reference\n         -n      relative reference\n         <name>  name\n         'name'  name\n\n\nCONDITIONAL PATTERNS\n\n         (?(condition)yes-pattern)\n         (?(condition)yes-pattern|no-pattern)\n\n         (?(n)                absolute reference condition\n         (?(+n)               relative reference condition (PCRE2 extension)\n         (?(-n)               relative reference condition (PCRE2 extension)\n         (?(<name>)           named reference condition (Perl)\n         (?('name')           named reference condition (Perl)\n         (?(name)             named reference condition (PCRE2, deprecated)\n         (?(R)                overall recursion condition\n         (?(Rn)               specific numbered group recursion condition\n         (?(R&name)           specific named group recursion condition\n         (?(DEFINE)           define groups for reference\n         (?(VERSION[>]=n[.m]) test PCRE2 version\n         (?(assert)           assertion condition\n\n       Note the ambiguity of (?(R) and (?(Rn) which might be  named  reference\n       conditions  or  recursion  tests.  Such a condition is interpreted as a\n       reference condition if the relevant named group exists.\n\n       The parts within brackets for the VERSION conditional syntax  could  be\n       ommited.   The  fractional  part of the version number defaults to 0 in\n       that case.\n\n\nBACKTRACKING CONTROL\n\n       All backtracking control verbs may be in  the  form  (*VERB:NAME).  For\n       (*MARK)  the  name is mandatory, for the others it is optional. (*SKIP)\n       changes its behaviour if :NAME is present. The others just set  a  name\n       for passing back to the caller, but this is not a name that (*SKIP) can\n       see. The following act immediately they are reached:\n\n         (*ACCEPT)       force successful match\n         (*FAIL)         force backtrack; synonym (*F)\n         (*MARK:NAME)    set name to be passed back; synonym (*:NAME)\n\n       The  following  act only when a subsequent match failure causes a back-\n       track to reach them. They all force a match failure, but they differ in\n       what happens afterwards. Those that advance the start-of-match point do\n       so only if the pattern is not anchored.\n\n         (*COMMIT)       overall failure, no advance of starting point\n         (*PRUNE)        advance to next starting character\n         (*SKIP)         advance to current matching position\n         (*SKIP:NAME)    advance to position corresponding to an earlier\n                         (*MARK:NAME); if not found, the (*SKIP) is ignored\n         (*THEN)         local failure, backtrack to next alternation\n\n       The effect of one of these verbs in a group called as a  subroutine  is\n       confined to the subroutine call.\n\n\nCALLOUTS\n\n         (?C)            callout (assumed number 0)\n         (?Cn)           callout with numerical data n\n         (?C\"text\")      callout with string data\n\n       The allowed string delimiters are ` ' \" ^ % # $ (which are the same for\n       the  start  and the end), and the starting delimiter { matched with the\n       ending delimiter }. To encode the ending delimiter within  the  string,\n       double it.\n\n\nREPLACEMENT STRINGS\n\n       If the PCRE2_SUBSTITUTE_LITERAL option is set, a replacement string for\n       pcre2_substitute()  is not interpreted. Otherwise, by default, the only\n       special character is the dollar  character  in  one  of  the  following\n       forms:\n\n         $$                  insert a dollar character\n         $n or ${n}          insert the contents of group n\n         $<name>             insert the contents of named group\n         $0 or $&            insert the entire matched substring\n         $`                  insert the substring that precedes the match\n         $'                  insert the substring that follows the match\n         $_                  insert the entire input string\n         $+                   insert  the highest-numbered capture group which\n       matched\n         $*MARK or ${*MARK}  insert a control verb name\n\n       For ${n}, n can be a name or a number. If PCRE2_SUBSTITUTE_EXTENDED  is\n       set, there is additional interpretation:\n\n       1.  Backslash  is  an escape character, and the forms described in \"ES-\n       CAPED CHARACTERS\" above are recognized. Also:\n\n         \\Q...\\E can be used to suppress interpretation\n         \\l      force the next character to lower case\n         \\u      force the next character to upper case\n         \\L      force subsequent characters to lower case\n         \\U      force subsequent characters to upper case\n         \\u\\L    force next character to upper case, then all lower\n         \\l\\U    force next character to lower case, then all upper\n         \\E      end \\L or \\U case forcing\n         \\b      backspace character (note: as in character class in pattern)\n         \\v      vertical tab character (note: not the same as in a pattern)\n\n       2. The Python form \\g<n>, where the angle brackets are part of the syn-\n       tax and n is either a group name or a number, is recognized as  an  al-\n       ternative way of inserting the contents of a group, for example \\g<3>.\n\n       3. Capture substitution supports the following additional forms:\n\n         ${n:-string}             default for unset group\n         ${n:+string1:string2}    values for set/unset group\n\n       The substitution strings themselves are expanded. Backslash can be used\n       to escape colons and closing curly brackets.\n\n\nSEE ALSO\n\n       pcre2pattern(3),    pcre2api(3),   pcre2callout(3),   pcre2matching(3),\n       pcre2(3).\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 14 October 2025\n       Copyright (c) 1997-2024 University of Cambridge.\n\n\nPCRE2 10.48-DEV                 14 October 2025                 PCRE2SYNTAX(3)\n------------------------------------------------------------------------------\n\n\nPCRE2UNICODE(3)            Library Functions Manual            PCRE2UNICODE(3)\n\n\nNAME\n       PCRE2 - Perl-compatible regular expressions (revised API)\n\n\nUNICODE AND UTF SUPPORT\n\n       PCRE2 is normally built with Unicode support, though if you do not need\n       it,  you  can  build  it  without,  in  which  case the library will be\n       smaller. With Unicode support, PCRE2 has knowledge of Unicode character\n       properties and can process strings of text in UTF-8, UTF-16, and UTF-32\n       format (depending on the code unit width), but this is not the default.\n       Unless specifically requested, PCRE2 treats each code unit in a  string\n       as one character.\n\n       There  are two ways of telling PCRE2 to switch to UTF mode, where char-\n       acters may consist of more than one code unit and the range  of  values\n       is constrained. The program can call pcre2_compile() with the PCRE2_UTF\n       option,  or  the  pattern may start with the sequence (*UTF).  However,\n       the latter facility can be locked out by  the  PCRE2_NEVER_UTF  option.\n       That  is,  the  programmer can prevent the supplier of the pattern from\n       switching to UTF mode.\n\n       Note  that  the  PCRE2_MATCH_INVALID_UTF  option  (see  below)   forces\n       PCRE2_UTF to be set.\n\n       In  UTF mode, both the pattern and any subject strings that are matched\n       against it are treated as UTF strings instead of strings of  individual\n       one-code-unit  characters. There are also some other changes to the way\n       characters are handled, as documented below.\n\n\nUNICODE PROPERTY SUPPORT\n\n       When PCRE2 is built with Unicode support, the escape sequences  \\p{..},\n       \\P{..}, and \\X can be used. This is not dependent on the PCRE2_UTF set-\n       ting.   The Unicode properties that can be tested are a subset of those\n       that Perl supports. Currently they are limited to the general  category\n       properties such as Lu for an upper case letter or Nd for a decimal num-\n       ber, the derived properties Any and Lc (synonym L&), the Unicode script\n       names such as Arabic or Han, Bidi_Class, Bidi_Control, and a few binary\n       properties.\n\n       The full lists are given in the pcre2pattern and pcre2syntax documenta-\n       tion.  In  general,  only the short names for properties are supported.\n       For example, \\p{L} matches a letter. Its longer synonym, \\p{Letter}, is\n       not supported. Furthermore, in Perl, many properties may optionally  be\n       prefixed  by \"Is\", for compatibility with Perl 5.6. PCRE2 does not sup-\n       port this.\n\n\nWIDE CHARACTERS AND UTF MODES\n\n       Code points less than 256 can be specified in patterns by either braced\n       or unbraced hexadecimal escape sequences (for example, \\x{b3} or \\xb3).\n       Larger values have to use braced sequences. Unbraced octal code  points\n       up to \\777 are also recognized; larger ones can be coded using \\o{...}.\n\n       The  escape sequence \\N{U+<hex digits>} is recognized as another way of\n       specifying a Unicode character by code point in a UTF mode. It  is  not\n       allowed in non-UTF mode.\n\n       In  UTF  mode, repeat quantifiers apply to complete UTF characters, not\n       to individual code units.\n\n       In UTF mode, the dot metacharacter matches one UTF character instead of\n       a single code unit.\n\n       In UTF mode, capture group names are not restricted to ASCII,  and  may\n       contain any Unicode letters and decimal digits, as well as underscore.\n\n       The  escape  sequence \\C can be used to match a single code unit in UTF\n       mode, but its use can lead to some strange effects because it breaks up\n       multi-unit characters (see the description of \\C  in  the  pcre2pattern\n       documentation). For this reason, there is a build-time option that dis-\n       ables  support  for  \\C completely. There is also a less draconian com-\n       pile-time option for locking out the use of \\C when a pattern  is  com-\n       piled.\n\n       The  use  of  \\C  is not supported by the alternative matching function\n       pcre2_dfa_match() when in UTF-8 or UTF-16 mode, that is, when a charac-\n       ter may consist of more than one code unit. The  use  of  \\C  in  these\n       modes  provokes a match-time error. Also, the JIT optimization does not\n       support \\C in these modes. If JIT optimization is requested for a UTF-8\n       or UTF-16 pattern that contains \\C, it will not succeed,  and  so  when\n       pcre2_match() is called, the matching will be carried out by the inter-\n       pretive function.\n\n       The character escapes \\b, \\B, \\d, \\D, \\s, \\S, \\w, and \\W correctly test\n       characters  of  any  code  value,  but, by default, the characters that\n       PCRE2 recognizes as digits, spaces, or word characters remain the  same\n       set  as  in  non-UTF mode, all with code points less than 256. This re-\n       mains true even when PCRE2 is built to include Unicode support, because\n       to do otherwise would slow down matching in  many  common  cases.  Note\n       that  this also applies to \\b and \\B, because they are defined in terms\n       of \\w and \\W. If you want to test for a wider sense of,  say,  \"digit\",\n       you  can  use  explicit Unicode property tests such as \\p{Nd}. Alterna-\n       tively, if you set the PCRE2_UCP option, the way that the character es-\n       capes work is changed so that Unicode properties are used to  determine\n       which  characters  match,  though  there are some options that suppress\n       this for individual escapes. For details see  the  section  on  generic\n       character types in the pcre2pattern documentation.\n\n       Like  the  escapes,  characters  that  match  the POSIX named character\n       classes are all low-valued characters unless the  PCRE2_UCP  option  is\n       set, but there is an option to override this.\n\n       In contrast to the character escapes and character classes, the special\n       horizontal  and  vertical  white  space escapes (\\h, \\H, \\v, and \\V) do\n       match all the appropriate Unicode characters, whether or not  PCRE2_UCP\n       is set.\n\n\nUNICODE CASE-EQUIVALENCE\n\n       If  either  PCRE2_UTF  or PCRE2_UCP is set, upper/lower case processing\n       makes use of Unicode properties except for characters whose code points\n       are less than 128 and that have at most two case-equivalent values. For\n       these, a direct table lookup is used for speed. A few  Unicode  charac-\n       ters  such as Greek sigma have more than two code points that are case-\n       equivalent, and these are treated specially. Setting PCRE2_UCP  without\n       PCRE2_UTF  allows  Unicode-style  case processing for non-UTF character\n       encodings such as UCS-2.\n\n       There are two ASCII characters (S and K) that,  in  addition  to  their\n       ASCII  lower case equivalents, have a non-ASCII one as well (long S and\n       Kelvin sign).  Recognition of these non-ASCII characters as case-equiv-\n       alent to their ASCII  counterparts  can  be  disabled  by  setting  the\n       PCRE2_EXTRA_CASELESS_RESTRICT  option. When this is set, all characters\n       in a case equivalence must either be ASCII or non-ASCII; there  can  be\n       no mixing.\n\n           Without PCRE2_EXTRA_CASELESS_RESTRICT:\n             'k' = 'K' = U+212A (Kelvin sign)\n             's' = 'S' = U+017F (long S)\n           With PCRE2_EXTRA_CASELESS_RESTRICT:\n             'k' = 'K'\n             U+212A (Kelvin sign)  only case-equivalent to itself\n             's' = 'S'\n             U+017F (long S)       only case-equivalent to itself\n\n       One  language family, Turkish and Azeri, has its own case-insensitivity\n       rules, which can be  selected  by  setting  PCRE2_EXTRA_TURKISH_CASING.\n       This  alters  the behaviour of the 'i', 'I', U+0130 (capital I with dot\n       above), and U+0131 (small dotless i) characters.\n\n           Without PCRE2_EXTRA_TURKISH_CASING:\n             'i' = 'I'\n             U+0130 (capital I with dot above)  only case-equivalent to itself\n             U+0131 (small dotless i)           only case-equivalent to itself\n           With PCRE2_EXTRA_TURKISH_CASING:\n             'i' = U+0130 (capital I with dot above)\n             U+0131 (small dotless i) = 'I'\n\n       It is not allowed to  specify  both  PCRE2_EXTRA_CASELESS_RESTRICT  and\n       PCRE2_EXTRA_TURKISH_CASING together.\n\n       From  release  10.45  the Unicode letter properties Lu (upper case), Ll\n       (lower case), and Lt (title case) are all treated as Lc (cased  letter)\n       when  caseless  matching  is  set  by the PCRE2_CASELESS option or (?i)\n       within the pattern.\n\n\nSCRIPT RUNS\n\n       The pattern constructs (*script_run:...) and  (*atomic_script_run:...),\n       with  synonyms (*sr:...) and (*asr:...), verify that the string matched\n       within the parentheses is a script run. In concept, a script run  is  a\n       sequence  of characters that are all from the same Unicode script. How-\n       ever, because some scripts are commonly used together, and because some\n       diacritical and other marks are used with multiple scripts, it  is  not\n       that simple.\n\n       Every Unicode character has a Script property, mostly with a value cor-\n       responding  to the name of a script, such as Latin, Greek, or Cyrillic.\n       There are also three special values:\n\n       \"Unknown\" is used for code points that have not been assigned, and also\n       for the surrogate code points. In the PCRE2 32-bit library,  characters\n       whose  code  points  are  greater  than the Unicode maximum (U+10FFFF),\n       which are accessible only in non-UTF mode,  are  assigned  the  Unknown\n       script.\n\n       \"Common\"  is used for characters that are used with many scripts. These\n       include punctuation, emoji, mathematical, musical,  and  currency  sym-\n       bols, and the ASCII digits 0 to 9.\n\n       \"Inherited\"  is used for characters such as diacritical marks that mod-\n       ify a previous character. These are considered to take on the script of\n       the character that they modify.\n\n       Some Inherited characters are used with many scripts, but many of  them\n       are  only  normally  used  with a small number of scripts. For example,\n       U+102E0 (Coptic Epact thousands mark) is used only with Arabic and Cop-\n       tic. In order to make it possible to check  this,  a  Unicode  property\n       called Script Extension exists. Its value is a list of scripts that ap-\n       ply to the character. For the majority of characters, the list contains\n       just  one  script,  the  same  one as the Script property. However, for\n       characters such as U+102E0 more than one Script is  listed.  There  are\n       also  some  Common  characters that have a single, non-Common script in\n       their Script Extension list.\n\n       The next section describes the basic rules for deciding whether a given\n       string of characters is a script run. Note,  however,  that  there  are\n       some  special cases involving the Chinese Han script, and an additional\n       constraint for decimal digits. These are  covered  in  subsequent  sec-\n       tions.\n\n   Basic script run rules\n\n       A string that is less than two characters long is a script run. This is\n       the  only  case  in  which an Unknown character can be part of a script\n       run. Longer strings are checked using only the Script Extensions  prop-\n       erty, not the basic Script property.\n\n       If  a character's Script Extension property is the single value \"Inher-\n       ited\", it is always accepted as part of a script run. This is also true\n       for the property \"Common\", subject to the checking  of  decimal  digits\n       described below. All the remaining characters in a script run must have\n       at  least one script in common in their Script Extension lists. In set-\n       theoretic terminology, the intersection of all the sets of scripts must\n       not be empty.\n\n       A simple example is an Internet name such as \"google.com\". The  letters\n       are all in the Latin script, and the dot is Common, so this string is a\n       script run.  However, the Cyrillic letter \"o\" looks exactly the same as\n       the  Latin \"o\"; a string that looks the same, but with Cyrillic \"o\"s is\n       not a script run.\n\n       More interesting examples involve characters with more than one  script\n       in their Script Extension. Consider the following characters:\n\n         U+060C  Arabic comma\n         U+06D4  Arabic full stop\n\n       The  first  has the Script Extension list Arabic, Hanifi Rohingya, Syr-\n       iac, and Thaana; the second has just Arabic and Hanifi  Rohingya.  Both\n       of  them  could  appear  in  script runs of either Arabic or Hanifi Ro-\n       hingya. The first could also appear in Syriac or  Thaana  script  runs,\n       but the second could not.\n\n   The Chinese Han script\n\n       The  Chinese  Han  script  is  commonly  used in conjunction with other\n       scripts for writing certain languages. Japanese uses the  Hiragana  and\n       Katakana  scripts  together  with Han; Korean uses Hangul and Han; Tai-\n       wanese Mandarin uses Bopomofo and Han.  These  three  combinations  are\n       treated  as special cases when checking script runs and are, in effect,\n       \"virtual scripts\". Thus, a script run may contain a  mixture  of  Hira-\n       gana,  Katakana,  and Han, or a mixture of Hangul and Han, or a mixture\n       of Bopomofo and Han, but not, for example,  a  mixture  of  Hangul  and\n       Bopomofo  and  Han. PCRE2 (like Perl) follows Unicode's Technical Stan-\n       dard  39   (\"Unicode   Security   Mechanisms\",   http://unicode.org/re-\n       ports/tr39/) in allowing such mixtures.\n\n   Decimal digits\n\n       Unicode  contains  many sets of 10 decimal digits in different scripts,\n       and some scripts (including the Common script) contain  more  than  one\n       set.  Some  of these decimal digits them are visually indistinguishable\n       from the common ASCII digits. In addition to the  script  checking  de-\n       scribed  above,  if a script run contains any decimal digits, they must\n       all come from the same set of 10 adjacent characters.\n\n\nVALIDITY OF UTF STRINGS\n\n       When the PCRE2_UTF option is set, the strings passed  as  patterns  and\n       subjects are (by default) checked for validity on entry to the relevant\n       functions. If an invalid UTF string is passed, a negative error code is\n       returned.  The  code  unit offset to the offending character can be ex-\n       tracted from the match data  block  by  calling  pcre2_get_startchar(),\n       which is used for this purpose after a UTF error.\n\n       In  some  situations, you may already know that your strings are valid,\n       and therefore want to skip these checks in  order  to  improve  perfor-\n       mance,  for  example in the case of a long subject string that is being\n       scanned repeatedly.  If you set the PCRE2_NO_UTF_CHECK option  at  com-\n       pile  time  or at match time, PCRE2 assumes that the pattern or subject\n       it is given (respectively) contains only valid UTF code unit sequences.\n\n       If you pass an invalid UTF string when PCRE2_NO_UTF_CHECK is  set,  the\n       result  is undefined and your program may crash or loop indefinitely or\n       give incorrect results. There is, however, one mode  of  matching  that\n       can  handle  invalid  UTF  subject  strings. This is enabled by passing\n       PCRE2_MATCH_INVALID_UTF to pcre2_compile() and is  discussed  below  in\n       the  next  section.  The  rest  of  this  section  covers the case when\n       PCRE2_MATCH_INVALID_UTF is not set.\n\n       Passing PCRE2_NO_UTF_CHECK to pcre2_compile()  just  disables  the  UTF\n       check  for  the  pattern; it does not also apply to subject strings. If\n       you want to disable the check for a subject string you must  pass  this\n       same option to pcre2_match() or pcre2_dfa_match().\n\n       UTF-16 and UTF-32 strings can indicate their endianness by special code\n       knows  as  a  byte-order  mark (BOM). The PCRE2 functions do not handle\n       this, expecting strings to be in host byte order.\n\n       Unless PCRE2_NO_UTF_CHECK is set, a UTF string is  checked  before  any\n       other  processing  takes  place.  In  the  case  of  pcre2_match()  and\n       pcre2_dfa_match() calls with a non-zero starting offset, the  check  is\n       applied only to that part of the subject that could be inspected during\n       matching,  and  there is a check that the starting offset points to the\n       first code unit of a character or to the end of the subject.  If  there\n       are  no  lookbehind  assertions in the pattern, the check starts at the\n       starting offset.  Otherwise, it starts at the  length  of  the  longest\n       lookbehind  before  the starting offset, or at the start of the subject\n       if there are not that many characters before the starting offset.  Note\n       that the sequences \\b and \\B are one-character lookbehinds.\n\n       In  addition  to checking the format of the string, there is a check to\n       ensure that all code points lie in the range U+0 to U+10FFFF, excluding\n       the surrogate area. The so-called \"non-character\" code points  are  not\n       excluded because Unicode corrigendum #9 makes it clear that they should\n       not be.\n\n       Characters  in  the \"Surrogate Area\" of Unicode are reserved for use by\n       UTF-16, where they are used in pairs to encode code points with  values\n       greater  than  0xFFFF. The code points that are encoded by UTF-16 pairs\n       are available independently in the  UTF-8  and  UTF-32  encodings.  (In\n       other  words, the whole surrogate thing is a fudge for UTF-16 which un-\n       fortunately messes up UTF-8 and UTF-32.)\n\n       Setting PCRE2_NO_UTF_CHECK at compile time does not disable  the  error\n       that  is  given if an escape sequence for an invalid Unicode code point\n       is encountered in the pattern. If you want to  allow  escape  sequences\n       such  as  \\x{d800}  (a  surrogate code point) you can set the PCRE2_EX-\n       TRA_ALLOW_SURROGATE_ESCAPES extra option.  However,  this  is  possible\n       only  in  UTF-8  and  UTF-32 modes, because these values are not repre-\n       sentable in UTF-16.\n\n   Errors in UTF-8 strings\n\n       The following negative error codes are given for invalid UTF-8 strings:\n\n         PCRE2_ERROR_UTF8_ERR1\n         PCRE2_ERROR_UTF8_ERR2\n         PCRE2_ERROR_UTF8_ERR3\n         PCRE2_ERROR_UTF8_ERR4\n         PCRE2_ERROR_UTF8_ERR5\n\n       The string ends with a truncated UTF-8 character;  the  code  specifies\n       how  many bytes are missing (1 to 5). Although RFC 3629 restricts UTF-8\n       characters to be no longer than 4 bytes, the  encoding  scheme  (origi-\n       nally  defined  by  RFC  2279)  allows  for  up to 6 bytes, and this is\n       checked first; hence the possibility of 4 or 5 missing bytes.\n\n         PCRE2_ERROR_UTF8_ERR6\n         PCRE2_ERROR_UTF8_ERR7\n         PCRE2_ERROR_UTF8_ERR8\n         PCRE2_ERROR_UTF8_ERR9\n         PCRE2_ERROR_UTF8_ERR10\n\n       The two most significant bits of the 2nd, 3rd, 4th, 5th, or 6th byte of\n       the character do not have the binary value 0b10 (that  is,  either  the\n       most significant bit is 0, or the next bit is 1).\n\n         PCRE2_ERROR_UTF8_ERR11\n         PCRE2_ERROR_UTF8_ERR12\n\n       A  character that is valid by the RFC 2279 rules is either 5 or 6 bytes\n       long; these code points are excluded by RFC 3629.\n\n         PCRE2_ERROR_UTF8_ERR13\n\n       A 4-byte character has a value greater than 0x10ffff; these code points\n       are excluded by RFC 3629.\n\n         PCRE2_ERROR_UTF8_ERR14\n\n       A 3-byte character has a value in the  range  0xd800  to  0xdfff;  this\n       range  of code points are reserved by RFC 3629 for use with UTF-16, and\n       so are excluded from UTF-8.\n\n         PCRE2_ERROR_UTF8_ERR15\n         PCRE2_ERROR_UTF8_ERR16\n         PCRE2_ERROR_UTF8_ERR17\n         PCRE2_ERROR_UTF8_ERR18\n         PCRE2_ERROR_UTF8_ERR19\n\n       A 2-, 3-, 4-, 5-, or 6-byte character is \"overlong\", that is, it  codes\n       for  a  value that can be represented by fewer bytes, which is invalid.\n       For example, the two bytes 0xc0, 0xae give the value 0x2e,  whose  cor-\n       rect coding uses just one byte.\n\n         PCRE2_ERROR_UTF8_ERR20\n\n       The two most significant bits of the first byte of a character have the\n       binary  value 0b10 (that is, the most significant bit is 1 and the sec-\n       ond is 0). Such a byte can only validly occur as the second  or  subse-\n       quent byte of a multi-byte character.\n\n         PCRE2_ERROR_UTF8_ERR21\n\n       The  first byte of a character has the value 0xfe or 0xff. These values\n       can never occur in a valid UTF-8 string.\n\n   Errors in UTF-16 strings\n\n       The following  negative  error  codes  are  given  for  invalid  UTF-16\n       strings:\n\n         PCRE2_ERROR_UTF16_ERR1  Missing low surrogate at end of string\n         PCRE2_ERROR_UTF16_ERR2  Invalid low surrogate follows high surrogate\n         PCRE2_ERROR_UTF16_ERR3  Isolated low surrogate\n\n\n   Errors in UTF-32 strings\n\n       The  following  negative  error  codes  are  given  for  invalid UTF-32\n       strings:\n\n         PCRE2_ERROR_UTF32_ERR1  Surrogate character (0xd800 to 0xdfff)\n         PCRE2_ERROR_UTF32_ERR2  Code point is greater than 0x10ffff\n\n\nMATCHING IN INVALID UTF STRINGS\n\n       You can run pattern matches on subject strings that may contain invalid\n       UTF sequences if you  call  pcre2_compile()  with  the  PCRE2_MATCH_IN-\n       VALID_UTF  option.  This  is  supported by pcre2_match(), including JIT\n       matching, but not by pcre2_dfa_match(). When PCRE2_MATCH_INVALID_UTF is\n       set, it forces PCRE2_UTF to be set as well.  Note,  however,  that  the\n       pattern itself must be a valid UTF string.\n\n       If  you  do not set PCRE2_MATCH_INVALID_UTF when calling pcre2_compile,\n       and you are not certain that your subject strings  are  valid  UTF  se-\n       quences,  you  should  not  make  use  of  the JIT \"fast path\" function\n       pcre2_jit_match() because it bypasses sanity checks, including the  one\n       for  UTF validity. An invalid string may cause undefined behaviour, in-\n       cluding looping, crashing, or giving the wrong answer.\n\n       Setting PCRE2_MATCH_INVALID_UTF does not  affect  what  pcre2_compile()\n       generates,  but  if pcre2_jit_compile() is subsequently called, it does\n       generate different code. If JIT is not used, the option affects the be-\n       haviour of the interpretive code in pcre2_match(). When PCRE2_MATCH_IN-\n       VALID_UTF is set at compile  time,  PCRE2_NO_UTF_CHECK  is  ignored  at\n       match time.\n\n       In  this  mode,  an  invalid  code  unit  sequence in the subject never\n       matches any pattern item. It does not match  dot,  it  does  not  match\n       \\p{Any},  it does not even match negative items such as [^X]. A lookbe-\n       hind assertion fails if it encounters an invalid sequence while  moving\n       the  current  point backwards. In other words, an invalid UTF code unit\n       sequence acts as a barrier which no match can cross.\n\n       You can also think of this as the subject being split up into fragments\n       of valid UTF, delimited internally by invalid code unit sequences.  The\n       pattern  is  matched  fragment  by fragment. The result of a successful\n       match, however, is given as code unit offsets  in  the  entire  subject\n       string in the usual way. There are a few points to consider:\n\n       The  internal  boundaries are not interpreted as the beginnings or ends\n       of lines and so do not match circumflex or  dollar  characters  in  the\n       pattern.\n\n       If  pcre2_match()  is  called  with an offset that points to an invalid\n       UTF-sequence, that sequence is skipped, and the  match  starts  at  the\n       next valid UTF character, or the end of the subject.\n\n       At internal fragment boundaries, \\b and \\B behave in the same way as at\n       the  beginning  and end of the subject. For example, a sequence such as\n       \\bWORD\\b would match an instance of WORD that is surrounded by  invalid\n       UTF code units.\n\n       Using  PCRE2_MATCH_INVALID_UTF, an application can run matches on arbi-\n       trary data, knowing that any matched  strings  that  are  returned  are\n       valid UTF. This can be useful when searching for UTF text in executable\n       or other binary files.\n\n       Note,  however,  that  the  16-bit  and  32-bit PCRE2 libraries process\n       strings as sequences of uint16_t or uint32_t code points.  They  cannot\n       find  valid  UTF  sequences  within an arbitrary string of bytes unless\n       such sequences are suitably aligned.\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 27 November 2024\n       Copyright (c) 1997-2024 University of Cambridge.\n\n\nPCRE2 10.48-DEV                27 November 2024                PCRE2UNICODE(3)\n------------------------------------------------------------------------------\n\n\n"
  },
  {
    "path": "doc/pcre2_callout_enumerate.3",
    "content": ".TH PCRE2_COMPILE 3 \"23 March 2017\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_callout_enumerate(const pcre2_code *\\fIcode\\fP,\n.B \"  int (*\\fIcallback\\fP)(pcre2_callout_enumerate_block *, void *),\"\n.B \"  void *\\fIcallout_data\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function scans a compiled regular expression and calls the \\fIcallback()\\fP\nfunction for each callout within the pattern. The yield of the function is zero\nfor success and non-zero otherwise. The arguments are:\n.sp\n  \\fIcode\\fP           Points to the compiled pattern\n  \\fIcallback\\fP       The callback function\n  \\fIcallout_data\\fP   User data that is passed to the callback\n.sp\nThe \\fIcallback()\\fP function is passed a pointer to a data block containing\nthe following fields (not necessarily in this order):\n.sp\n  uint32_t   \\fIversion\\fP                Block version number\n  uint32_t   \\fIcallout_number\\fP         Number for numbered callouts\n  PCRE2_SIZE \\fIpattern_position\\fP       Offset to next item in pattern\n  PCRE2_SIZE \\fInext_item_length\\fP       Length of next item in pattern\n  PCRE2_SIZE \\fIcallout_string_offset\\fP  Offset to string within pattern\n  PCRE2_SIZE \\fIcallout_string_length\\fP  Length of callout string\n  PCRE2_SPTR \\fIcallout_string\\fP         Points to callout string or is NULL\n.sp\nThe second argument passed to the \\fBcallback()\\fP function is the callout data\nthat was passed to \\fBpcre2_callout_enumerate()\\fP. The \\fBcallback()\\fP\nfunction must return zero for success. Any other value causes the pattern scan\nto stop, with the value being passed back as the result of\n\\fBpcre2_callout_enumerate()\\fP.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_code_copy.3",
    "content": ".TH PCRE2_CODE_COPY 3 \"22 November 2016\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_code *pcre2_code_copy(const pcre2_code *\\fIcode\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function makes a copy of the memory used for a compiled pattern, excluding\nany memory used by the JIT compiler. Without a subsequent call to\n\\fBpcre2_jit_compile()\\fP, the copy can be used only for non-JIT matching. The\npointer to the character tables is copied, not the tables themselves (see\n\\fBpcre2_code_copy_with_tables()\\fP). The yield of the function is NULL if\n\\fIcode\\fP is NULL or if sufficient memory cannot be obtained.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_code_copy_with_tables.3",
    "content": ".TH PCRE2_CODE_COPY 3 \"16 January 2017\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_code *pcre2_code_copy_with_tables(const pcre2_code *\\fIcode\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function makes a copy of the memory used for a compiled pattern, excluding\nany memory used by the JIT compiler. Without a subsequent call to\n\\fBpcre2_jit_compile()\\fP, the copy can be used only for non-JIT matching.\nUnlike \\fBpcre2_code_copy()\\fP, a separate copy of the character tables is also\nmade, with the new code pointing to it. This memory will be automatically freed\nwhen \\fBpcre2_code_free()\\fP is called. The yield of the function is NULL if\n\\fIcode\\fP is NULL or if sufficient memory cannot be obtained.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_code_free.3",
    "content": ".TH PCRE2_CODE_FREE 3 \"28 June 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_code_free(pcre2_code *\\fIcode\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nIf \\fIcode\\fP is NULL, this function does nothing. Otherwise, \\fIcode\\fP must\npoint to a compiled pattern. This function frees its memory, including any\nmemory used by the JIT compiler. If the compiled pattern was created by a call\nto \\fBpcre2_code_copy_with_tables()\\fP, the memory for the character tables is\nalso freed.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_compile.3",
    "content": ".TH PCRE2_COMPILE 3 \"30 October 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_code *pcre2_compile(PCRE2_SPTR \\fIpattern\\fP, PCRE2_SIZE \\fIlength\\fP,\n.B \"  uint32_t \\fIoptions\\fP, int *\\fIerrorcode\\fP, PCRE2_SIZE *\\fIerroroffset,\\fP\"\n.B \"  pcre2_compile_context *\\fIccontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function compiles a regular expression pattern into an internal form. Its\narguments are:\n.sp\n  \\fIpattern\\fP       A string containing expression to be compiled\n  \\fIlength\\fP        The length of the string or PCRE2_ZERO_TERMINATED\n  \\fIoptions\\fP       Primary option bits\n  \\fIerrorcode\\fP     Where to put an error code\n  \\fIerroffset\\fP     Where to put an error offset\n  \\fIccontext\\fP      Pointer to a compile context or NULL\n.sp\nThe length of the pattern and any error offset that is returned are in code\nunits, not characters. A NULL pattern with zero length is treated as an empty\nstring. A compile context is needed only if you want to provide custom memory\nallocation functions, or to provide an external function for system stack size\nchecking (see \\fBpcre2_set_compile_recursion_guard()\\fP), or to change one or\nmore of these parameters:\n.sp\n  What \\eR matches (Unicode newlines, or CR, LF, CRLF only);\n  PCRE2's character tables;\n  The newline character sequence;\n  The compile time nested parentheses limit;\n  The maximum pattern length (in code units) that is allowed;\n  The additional options bits.\n.sp\nThe primary option bits are:\n.sp\n  PCRE2_ANCHORED           Force pattern anchoring\n  PCRE2_ALLOW_EMPTY_CLASS  Allow empty classes\n  PCRE2_ALT_BSUX           Alternative handling of \\eu, \\eU, and \\ex\n  PCRE2_ALT_CIRCUMFLEX     Alternative handling of ^ in multiline mode\n  PCRE2_ALT_EXTENDED_CLASS Alternative extended character class syntax\n  PCRE2_ALT_VERBNAMES      Process backslashes in verb names\n  PCRE2_AUTO_CALLOUT       Compile automatic callouts\n  PCRE2_CASELESS           Do caseless matching\n  PCRE2_DOLLAR_ENDONLY     $ not to match newline at end\n  PCRE2_DOTALL             . matches anything including NL\n  PCRE2_DUPNAMES           Allow duplicate names for subpatterns\n  PCRE2_ENDANCHORED        Pattern can match only at end of subject\n  PCRE2_EXTENDED           Ignore white space and # comments\n  PCRE2_FIRSTLINE          Force matching to be before newline\n  PCRE2_LITERAL            Pattern characters are all literal\n  PCRE2_MATCH_INVALID_UTF  Enable support for matching invalid UTF\n  PCRE2_MATCH_UNSET_BACKREF  Match unset backreferences\n  PCRE2_MULTILINE          ^ and $ match newlines within data\n  PCRE2_NEVER_BACKSLASH_C  Lock out the use of \\eC in patterns\n  PCRE2_NEVER_UCP          Lock out PCRE2_UCP, e.g. via (*UCP)\n  PCRE2_NEVER_UTF          Lock out PCRE2_UTF, e.g. via (*UTF)\n  PCRE2_NO_AUTO_CAPTURE    Disable numbered capturing paren-\n                            theses (named ones available)\n  PCRE2_NO_AUTO_POSSESS    Disable auto-possessification\n  PCRE2_NO_DOTSTAR_ANCHOR  Disable automatic anchoring for .*\n  PCRE2_NO_START_OPTIMIZE  Disable match-time start optimizations\n  PCRE2_NO_UTF_CHECK       Do not check the pattern for UTF validity\n                             (only relevant if PCRE2_UTF is set)\n  PCRE2_UCP                Use Unicode properties for \\ed, \\ew, etc.\n  PCRE2_UNGREEDY           Invert greediness of quantifiers\n  PCRE2_USE_OFFSET_LIMIT   Enable offset limit for unanchored matching\n  PCRE2_UTF                Treat pattern and subjects as UTF strings\n.sp\nPCRE2 must be built with Unicode support (the default) in order to use\nPCRE2_UTF, PCRE2_UCP and related options.\n.P\nAdditional options may be set in the compile context via the\n.\\\" HREF\n\\fBpcre2_set_compile_extra_options\\fP\n.\\\"\nfunction.\n.P\nIf either of \\fIerrorcode\\fP or \\fIerroroffset\\fP is NULL, the function returns\nNULL immediately. Otherwise, the yield of this function is a pointer to a\nprivate data structure that contains the compiled pattern, or NULL if an error\nwas detected. In the error case, a text error message can be obtained by\npassing the value returned via the \\fIerrorcode\\fP argument to the\n\\fBpcre2_get_error_message()\\fP function. The offset (in code units) where the\nerror was encountered is returned via the \\fIerroroffset\\fP argument.\n.P\nIf there is no error, the value passed via \\fIerrorcode\\fP returns the message\n\"no error\" if passed to \\fBpcre2_get_error_message()\\fP, and the value passed\nvia \\fIerroroffset\\fP is zero.\n.P\nThere is a complete description of the PCRE2 native API, with more detail on\neach option, in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage, and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_compile_context_copy.3",
    "content": ".TH PCRE2_COMPILE_CONTEXT_COPY 3 \"25 October 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_compile_context *pcre2_compile_context_copy(\n.B \"  pcre2_compile_context *\\fIccontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function makes a new copy of a compile context, using the memory\nallocation function that was used for the original context. The result is NULL\nif the memory cannot be obtained.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_compile_context_create.3",
    "content": ".TH PCRE2_COMPILE_CONTEXT_CREATE 3 \"25 October 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_compile_context *pcre2_compile_context_create(\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function creates and initializes a new compile context. If its argument is\nNULL, \\fBmalloc()\\fP is used to get the necessary memory; otherwise the memory\nallocation function within the general context is used. The result is NULL if\nthe memory could not be obtained.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_compile_context_free.3",
    "content": ".TH PCRE2_COMPILE_CONTEXT_FREE 3 \"28 June 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_compile_context_free(pcre2_compile_context *\\fIccontext\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function frees the memory occupied by a compile context, using the memory\nfreeing function from the general context with which it was created, or\n\\fBfree()\\fP if that was not set. If the argument is NULL, the function returns\nimmediately without doing anything.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_config.3",
    "content": ".TH PCRE2_CONFIG 3 \"03 September 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_config(uint32_t \\fIwhat\\fP, void *\\fIwhere\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function makes it possible for a client program to find out which optional\nfeatures are available in the version of the PCRE2 library it is using. The\narguments are as follows:\n.sp\n  \\fIwhat\\fP     A code specifying what information is required\n  \\fIwhere\\fP    Points to where to put the information\n.sp\nIf \\fIwhere\\fP is NULL, the function returns the amount of memory needed for\nthe requested information. When the information is a string, the value is in\ncode units; for other types of data it is in bytes.\n.P\nIf \\fBwhere\\fP is not NULL, for PCRE2_CONFIG_JITTARGET,\nPCRE2_CONFIG_UNICODE_VERSION, and PCRE2_CONFIG_VERSION it must point to a\nbuffer that is large enough to hold the string. For all other codes it must\npoint to a uint32_t integer variable. The available codes are:\n.sp\n  PCRE2_CONFIG_BSR                Indicates what \\eR matches by default:\n                                    PCRE2_BSR_UNICODE\n                                    PCRE2_BSR_ANYCRLF\n  PCRE2_CONFIG_COMPILED_WIDTHS    Which of 8/16/32 support was compiled\n  PCRE2_CONFIG_DEPTHLIMIT         Default backtracking depth limit\n  PCRE2_CONFIG_EFFECTIVE_LINKSIZE How many bytes are used for link size\n  PCRE2_CONFIG_HEAPLIMIT          Default heap memory limit\n.\\\" JOIN\n  PCRE2_CONFIG_JIT                Availability of just-in-time compiler\n                                   support (1=yes 0=no)\n.\\\" JOIN\n  PCRE2_CONFIG_JITTARGET          Information (a string) about the target\n                                   architecture for the JIT compiler\n  PCRE2_CONFIG_LINKSIZE           Configured internal link size (2, 3, 4)\n  PCRE2_CONFIG_MATCHLIMIT         Default internal resource limit\n  PCRE2_CONFIG_NEVER_BACKSLASH_C  Whether or not \\eC is disabled\n  PCRE2_CONFIG_NEWLINE            Code for the default newline sequence:\n                                    PCRE2_NEWLINE_CR\n                                    PCRE2_NEWLINE_LF\n                                    PCRE2_NEWLINE_CRLF\n                                    PCRE2_NEWLINE_ANY\n                                    PCRE2_NEWLINE_ANYCRLF\n                                    PCRE2_NEWLINE_NUL\n  PCRE2_CONFIG_PARENSLIMIT        Default parentheses nesting limit\n  PCRE2_CONFIG_RECURSIONLIMIT     Obsolete: use PCRE2_CONFIG_DEPTHLIMIT\n  PCRE2_CONFIG_STACKRECURSE       Obsolete: always returns 0\n.\\\" JOIN\n  PCRE2_CONFIG_UNICODE            Availability of Unicode support\n                                   (1=yes 0=no)\n  PCRE2_CONFIG_UNICODE_VERSION    The Unicode version (a string)\n  PCRE2_CONFIG_VERSION            The PCRE2 version (a string)\n.sp\nThe function yields a non-negative value on success or the negative value\nPCRE2_ERROR_BADOPTION otherwise. This is also the result for the\nPCRE2_CONFIG_JITTARGET code if JIT support is not available. When a string is\nrequested, the function returns the number of code units used, including the\nterminating zero.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_convert_context_copy.3",
    "content": ".TH PCRE2_CONVERT_CONTEXT_COPY 3 \"12 July 2017\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_convert_context *pcre2_convert_context_copy(\n.B \"  pcre2_convert_context *\\fIcvcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function is part of an experimental set of pattern conversion functions.\nIt makes a new copy of a convert context, using the memory allocation function\nthat was used for the original context. The result is NULL if the memory cannot\nbe obtained.\n.P\nThe pattern conversion functions are described in the\n.\\\" HREF\n\\fBpcre2convert\\fP\n.\\\"\ndocumentation.\n"
  },
  {
    "path": "doc/pcre2_convert_context_create.3",
    "content": ".TH PCRE2_CONVERT_CONTEXT_CREATE 3 \"12 July 2017\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_convert_context *pcre2_convert_context_create(\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function is part of an experimental set of pattern conversion functions.\nIt creates and initializes a new convert context. If its argument is\nNULL, \\fBmalloc()\\fP is used to get the necessary memory; otherwise the memory\nallocation function within the general context is used. The result is NULL if\nthe memory could not be obtained.\n.P\nThe pattern conversion functions are described in the\n.\\\" HREF\n\\fBpcre2convert\\fP\n.\\\"\ndocumentation.\n"
  },
  {
    "path": "doc/pcre2_convert_context_free.3",
    "content": ".TH PCRE2_CONVERT_CONTEXT_FREE 3 \"13 August 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_convert_context_free(pcre2_convert_context *\\fIcvcontext\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function is part of an experimental set of pattern conversion functions.\nIt frees the memory occupied by a convert context, using the memory\nfreeing function from the general context with which it was created, or\n\\fBfree()\\fP if that was not set. If the argument is NULL, the function returns\nimmediately without doing anything.\n.P\nThe pattern conversion functions are described in the\n.\\\" HREF\n\\fBpcre2convert\\fP\n.\\\"\ndocumentation.\n"
  },
  {
    "path": "doc/pcre2_converted_pattern_free.3",
    "content": ".TH PCRE2_CONVERTED_PATTERN_FREE 3 \"13 August 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_converted_pattern_free(PCRE2_UCHAR *\\fIconverted_pattern\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function is part of an experimental set of pattern conversion functions.\nIt frees the memory occupied by a converted pattern that was obtained by\ncalling \\fBpcre2_pattern_convert()\\fP with arguments that caused it to place\nthe converted pattern into newly obtained heap memory. If the argument is NULL,\nthe function returns immediately without doing anything.\n.P\nThe pattern conversion functions are described in the\n.\\\" HREF\n\\fBpcre2convert\\fP\n.\\\"\ndocumentation.\n"
  },
  {
    "path": "doc/pcre2_dfa_match.3",
    "content": ".TH PCRE2_DFA_MATCH 3 \"31 August 2021\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_dfa_match(const pcre2_code *\\fIcode\\fP, PCRE2_SPTR \\fIsubject\\fP,\n.B \"  PCRE2_SIZE \\fIlength\\fP, PCRE2_SIZE \\fIstartoffset\\fP,\"\n.B \"  uint32_t \\fIoptions\\fP, pcre2_match_data *\\fImatch_data\\fP,\"\n.B \"  pcre2_match_context *\\fImcontext\\fP,\"\n.B \"  int *\\fIworkspace\\fP, PCRE2_SIZE \\fIwscount\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function matches a compiled regular expression against a given subject\nstring, using an alternative matching algorithm that scans the subject string\njust once (except when processing lookaround assertions). This function is\n\\fInot\\fP Perl-compatible (the Perl-compatible matching function is\n\\fBpcre2_match()\\fP). The arguments for this function are:\n.sp\n  \\fIcode\\fP         Points to the compiled pattern\n  \\fIsubject\\fP      Points to the subject string\n  \\fIlength\\fP       Length of the subject string\n  \\fIstartoffset\\fP  Offset in the subject at which to start matching\n  \\fIoptions\\fP      Option bits\n  \\fImatch_data\\fP   Points to a match data block, for results\n  \\fImcontext\\fP     Points to a match context, or is NULL\n  \\fIworkspace\\fP    Points to a vector of ints used as working space\n  \\fIwscount\\fP      Number of elements in the vector\n.sp\nThe size of output vector needed to contain all the results depends on the\nnumber of simultaneous matches, not on the number of parentheses in the\npattern. Using \\fBpcre2_match_data_create_from_pattern()\\fP to create the match\ndata block is therefore not advisable when using this function.\n.P\nA match context is needed only if you want to set up a callout function or\nspecify the heap limit or the match or the recursion depth limits. The\n\\fIlength\\fP and \\fIstartoffset\\fP values are code units, not characters. The\noptions are:\n.sp\n  PCRE2_ANCHORED          Match only at the first position\n  PCRE2_COPY_MATCHED_SUBJECT\n                          On success, make a private subject copy\n  PCRE2_ENDANCHORED       Pattern can match only at end of subject\n  PCRE2_NOTBOL            Subject is not the beginning of a line\n  PCRE2_NOTEOL            Subject is not the end of a line\n  PCRE2_NOTEMPTY          An empty string is not a valid match\n.\\\" JOIN\n  PCRE2_NOTEMPTY_ATSTART  An empty string at the start of the subject\n                           is not a valid match\n.\\\" JOIN\n  PCRE2_NO_UTF_CHECK      Do not check the subject for UTF\n                           validity (only relevant if PCRE2_UTF\n                           was set at compile time)\n.\\\" JOIN\n  PCRE2_PARTIAL_HARD      Return PCRE2_ERROR_PARTIAL for a partial\n                           match even if there is a full match\n.\\\" JOIN\n  PCRE2_PARTIAL_SOFT      Return PCRE2_ERROR_PARTIAL for a partial\n                           match if no full matches are found\n  PCRE2_DFA_RESTART       Restart after a partial match\n  PCRE2_DFA_SHORTEST      Return only the shortest match\n.sp\nThere are restrictions on what may appear in a pattern when using this matching\nfunction. Details are given in the\n.\\\" HREF\n\\fBpcre2matching\\fP\n.\\\"\ndocumentation. For details of partial matching, see the\n.\\\" HREF\n\\fBpcre2partial\\fP\n.\\\"\npage. There is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_general_context_copy.3",
    "content": ".TH PCRE2_GENERAL_CONTEXT_COPY 3 \"25 October 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_general_context *pcre2_general_context_copy(\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function makes a new copy of a general context, using the memory\nallocation functions in the context, if set, to get the necessary memory.\nOtherwise \\fBmalloc()\\fP is used. The result is NULL if the memory cannot be\nobtained.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_general_context_create.3",
    "content": ".TH PCRE2_GENERAL_CONTEXT_CREATE 3 \"23 January 2023\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_general_context *pcre2_general_context_create(\n.B \"  void *(*\\fIprivate_malloc\\fP)(size_t, void *),\"\n.B \"  void (*\\fIprivate_free\\fP)(void *, void *), void *\\fImemory_data\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function creates and initializes a general context. The arguments define\ncustom memory management functions and a data value that is passed to them when\nthey are called. The \\fBprivate_malloc()\\fP function is used to get memory for\nthe context. If either of the first two arguments is NULL, the system memory\nmanagement function is used. The result is NULL if no memory could be obtained.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_general_context_free.3",
    "content": ".TH PCRE2_GENERAL_CONTEXT_FREE 3 \"28 June 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_general_context_free(pcre2_general_context *\\fIgcontext\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function frees the memory occupied by a general context, using the memory\nfreeing function within the context, if set.  If the argument is NULL, the\nfunction returns immediately without doing anything.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_get_error_message.3",
    "content": ".TH PCRE2_GET_ERROR_MESSAGE 3 \"24 March 2017\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_get_error_message(int \\fIerrorcode\\fP, PCRE2_UCHAR *\\fIbuffer\\fP,\n.B \"  PCRE2_SIZE \\fIbufflen\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function provides a textual error message for each PCRE2 error code.\nCompilation errors are positive numbers; UTF formatting errors and matching\nerrors are negative numbers. The arguments are:\n.sp\n  \\fIerrorcode\\fP   an error code (positive or negative)\n  \\fIbuffer\\fP      where to put the message\n  \\fIbufflen\\fP     the length of the buffer (code units)\n.sp\nThe function returns the length of the message in code units, excluding the\ntrailing zero, or the negative error code PCRE2_ERROR_NOMEMORY if the buffer is\ntoo small. In this case, the returned message is truncated (but still with a\ntrailing zero). If \\fIerrorcode\\fP does not contain a recognized error code\nnumber, the negative value PCRE2_ERROR_BADDATA is returned.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_get_mark.3",
    "content": ".TH PCRE2_GET_MARK 3 \"13 January 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B PCRE2_SPTR pcre2_get_mark(pcre2_match_data *\\fImatch_data\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nAfter a call of \\fBpcre2_match()\\fP that was passed the match block that is\nthis function's argument, this function returns a pointer to the last (*MARK),\n(*PRUNE), or (*THEN) name that was encountered during the matching process. The\nname is zero-terminated, and is within the compiled pattern. The length of the\nname is in the preceding code unit. If no name is available, NULL is returned.\n.P\nAfter a successful match, the name that is returned is the last one on the\nmatching path. After a failed match or a partial match, the last encountered\nname is returned.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_get_match_data_heapframes_size.3",
    "content": ".TH PCRE2_GET_MATCH_DATA_HEAPFRAMES_SIZE 3 \"18 January 2023\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B PCRE2_SIZE pcre2_get_match_data_heapframes_size(\n.B \"  pcre2_match_data *\\fImatch_data\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function returns the size, in bytes, of the heapframes data block that is\nowned by its argument.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_get_match_data_size.3",
    "content": ".TH PCRE2_GET_MATCH_DATA_SIZE 3 \"17 October 2019\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B PCRE2_SIZE pcre2_get_match_data_size(pcre2_match_data *\\fImatch_data\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function returns the size, in bytes, of the match data block that is its\nargument.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_get_ovector_count.3",
    "content": ".TH PCRE2_GET_OVECTOR_COUNT 3 \"25 October 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B uint32_t pcre2_get_ovector_count(pcre2_match_data *\\fImatch_data\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function returns the number of pairs of offsets in the ovector that forms\npart of the given match data block.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_get_ovector_pointer.3",
    "content": ".TH PCRE2_GET_OVECTOR_POINTER 3 \"25 October 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B PCRE2_SIZE *pcre2_get_ovector_pointer(pcre2_match_data *\\fImatch_data\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function returns a pointer to the vector of offsets that forms part of the\ngiven match data block. The number of pairs can be found by calling\n\\fBpcre2_get_ovector_count()\\fP.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_get_startchar.3",
    "content": ".TH PCRE2_GET_STARTCHAR 3 \"25 October 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B PCRE2_SIZE pcre2_get_startchar(pcre2_match_data *\\fImatch_data\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nAfter a successful call of \\fBpcre2_match()\\fP that was passed the match block\nthat is this function's argument, this function returns the code unit offset of\nthe character at which the successful match started. For a non-partial match,\nthis can be different to the value of \\fIovector[0]\\fP if the pattern contains\nthe \\eK escape sequence. After a partial match, however, this value is always\nthe same as \\fIovector[0]\\fP because \\eK does not affect the result of a\npartial match.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_jit_compile.3",
    "content": ".TH PCRE2_JIT_COMPILE 3 \"22 August 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_jit_compile(pcre2_code *\\fIcode\\fP, uint32_t \\fIoptions\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function requests JIT compilation, which, if the just-in-time compiler is\navailable, further processes a compiled pattern into machine code that executes\nmuch faster than the \\fBpcre2_match()\\fP interpretive matching function. Full\ndetails are given in the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\ndocumentation.\n.P\nThe availability of JIT support can be tested by calling\n\\fBpcre2_compile_jit()\\fP with a single option PCRE2_JIT_TEST_ALLOC (the\ncode argument is ignored, so a NULL value is accepted). Such a call\nreturns zero if JIT is available and has a working allocator. Otherwise\nit returns PCRE2_ERROR_NOMEMORY if JIT is available but cannot allocate\nexecutable memory, or PCRE2_ERROR_JIT_UNSUPPORTED if JIT support is not\ncompiled.\n.P\nOtherwise, the first argument must be a pointer that was returned by a\nsuccessful call to \\fBpcre2_compile()\\fP, and the second must contain one or\nmore of the following bits:\n.sp\n  PCRE2_JIT_COMPLETE      compile code for full matching\n  PCRE2_JIT_PARTIAL_SOFT  compile code for soft partial matching\n  PCRE2_JIT_PARTIAL_HARD  compile code for hard partial matching\n.sp\nThere is also an obsolete option called PCRE2_JIT_INVALID_UTF, which has been\nsuperseded by the \\fBpcre2_compile()\\fP option PCRE2_MATCH_INVALID_UTF. The old\noption is deprecated and may be removed in the future.\n.P\nThe yield of the function when called with any of the three options above is 0\nfor success, or a negative error code otherwise. In particular,\nPCRE2_ERROR_JIT_BADOPTION is returned if JIT is not supported or if an unknown\nbit is set in \\fIoptions\\fP. The function can also return PCRE2_ERROR_NOMEMORY\nif JIT is unable to allocate executable memory for the compiler, even if it was\nbecause of a system security restriction. In a few cases, the function may\nreturn with PCRE2_ERROR_JIT_UNSUPPORTED for unsupported features.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_jit_free_unused_memory.3",
    "content": ".TH PCRE2_JIT_FREE_UNUSED_MEMORY 3 \"24 April 2020\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_jit_free_unused_memory(pcre2_general_context *\\fIgcontext\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function frees unused JIT executable memory. The argument is a general\ncontext, for custom memory management, or NULL for standard memory management.\nJIT memory allocation retains some memory in order to improve future JIT\ncompilation speed. In low memory conditions,\n\\fBpcre2_jit_free_unused_memory()\\fP can be used to cause this memory to be\nfreed.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_jit_match.3",
    "content": ".TH PCRE2_JIT_MATCH 3 \"20 January 2023\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_jit_match(const pcre2_code *\\fIcode\\fP, PCRE2_SPTR \\fIsubject\\fP,\n.B \"  PCRE2_SIZE \\fIlength\\fP, PCRE2_SIZE \\fIstartoffset\\fP,\"\n.B \"  uint32_t \\fIoptions\\fP, pcre2_match_data *\\fImatch_data\\fP,\"\n.B \"  pcre2_match_context *\\fImcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function matches a compiled regular expression that has been successfully\nprocessed by the JIT compiler against a given subject string, using a matching\nalgorithm that is similar to Perl's. It is a \"fast path\" interface to JIT, and\nit bypasses some of the sanity checks that \\fBpcre2_match()\\fP applies.\n.P\nIn UTF mode, the subject string is not checked for UTF validity. Unless\nPCRE2_MATCH_INVALID_UTF was set when the pattern was compiled, passing an\ninvalid UTF string results in undefined behaviour. Your program may crash or\nloop or give wrong results. In the absence of PCRE2_MATCH_INVALID_UTF you\nshould only call \\fBpcre2_jit_match()\\fP in UTF mode if you are sure the\nsubject is valid.\n.P\nThe arguments for \\fBpcre2_jit_match()\\fP are exactly the same as for\n.\\\" HREF\n\\fBpcre2_match()\\fP,\n.\\\"\nexcept that the subject string must be specified with a length;\nPCRE2_ZERO_TERMINATED is not supported.\n.P\nThe supported options are PCRE2_NOTBOL, PCRE2_NOTEOL, PCRE2_NOTEMPTY,\nPCRE2_NOTEMPTY_ATSTART, PCRE2_PARTIAL_HARD, and PCRE2_PARTIAL_SOFT. Unsupported\noptions are ignored.\n.P\nThe return values are the same as for \\fBpcre2_match()\\fP plus\nPCRE2_ERROR_JIT_BADOPTION if a matching mode (partial or complete) is requested\nthat was not compiled. For details of partial matching, see the\n.\\\" HREF\n\\fBpcre2partial\\fP\n.\\\"\npage.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the JIT API in the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_jit_stack_assign.3",
    "content": ".TH PCRE2_JIT_STACK_ASSIGN 3 \"13 August 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_jit_stack_assign(pcre2_match_context *\\fImcontext\\fP,\n.B \"  pcre2_jit_callback \\fIcallback_function\\fP, void *\\fIcallback_data\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function provides control over the memory used by JIT as a run-time stack\nwhen \\fBpcre2_match()\\fP or \\fBpcre2_jit_match()\\fP is called with a pattern\nthat has been successfully processed by the JIT compiler. The information that\ndetermines which stack is used is put into a match context that is subsequently\npassed to a matching function. The arguments of this function are:\n.sp\n  mcontext       a pointer to a match context\n  callback       a callback function\n  callback_data  a JIT stack or a value to be passed to the callback\n.P\nIf \\fImcontext\\fP is NULL, the function returns immediately, without doing\nanything.\n.P\nIf \\fIcallback\\fP is NULL and \\fIcallback_data\\fP is NULL, an internal 32KiB\nblock on the machine stack is used.\n.P\nIf \\fIcallback\\fP is NULL and \\fIcallback_data\\fP is not NULL,\n\\fIcallback_data\\fP must be a valid JIT stack, the result of calling\n\\fBpcre2_jit_stack_create()\\fP.\n.P\nIf \\fIcallback\\fP not NULL, it is called with \\fIcallback_data\\fP as an\nargument at the start of matching, in order to set up a JIT stack. If the\nresult is NULL, the internal 32KiB stack is used; otherwise the return value\nmust be a valid JIT stack, the result of calling\n\\fBpcre2_jit_stack_create()\\fP.\n.P\nYou may safely use the same JIT stack for multiple patterns, as long as they\nare all matched in the same thread. In a multithread application, each thread\nmust use its own JIT stack. For more details, see the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\npage.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_jit_stack_create.3",
    "content": ".TH PCRE2_JIT_STACK_CREATE 3 \"23 January 2023\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_jit_stack *pcre2_jit_stack_create(size_t \\fIstartsize\\fP,\n.B \"  size_t \\fImaxsize\\fP, pcre2_general_context *\\fIgcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function is used to create a stack for use by the code compiled by the JIT\ncompiler. The first two arguments are a starting size for the stack, and a\nmaximum size to which it is allowed to grow. The final argument is a general\ncontext, for memory allocation functions, or NULL for standard memory\nallocation. The result can be passed to the JIT run-time code by calling\n\\fBpcre2_jit_stack_assign()\\fP to associate the stack with a compiled pattern,\nwhich can then be processed by \\fBpcre2_match()\\fP or \\fBpcre2_jit_match()\\fP.\nA maximum stack size of 512KiB to 1MiB should be more than enough for any\npattern. If the stack couldn't be allocated or the values passed were not\nreasonable, NULL will be returned. For more details, see the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\npage.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_jit_stack_free.3",
    "content": ".TH PCRE2_JIT_STACK_FREE 3 \"26 February 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_jit_stack_free(pcre2_jit_stack *\\fIjit_stack\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function is used to free a JIT stack that was created by\n\\fBpcre2_jit_stack_create()\\fP when it is no longer needed. If the argument is\nNULL, the function returns immediately without doing anything. For more\ndetails, see the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\npage.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_maketables.3",
    "content": ".TH PCRE2_MAKETABLES 3 \"26 February 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B const uint8_t *pcre2_maketables(pcre2_general_context *\\fIgcontext\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function builds a set of character tables for character code points that\nare less than 256. These can be passed to \\fBpcre2_compile()\\fP in a compile\ncontext in order to override the internal, built-in tables (which were either\ndefaulted or made by \\fBpcre2_maketables()\\fP when PCRE2 was compiled). See the\n.\\\" HREF\n\\fBpcre2_set_character_tables()\\fP\n.\\\"\npage. You might want to do this if you are using a non-standard locale.\n.P\nIf the argument is NULL, \\fBmalloc()\\fP is used to get memory for the tables.\nOtherwise it must point to a general context, which can supply pointers to a\ncustom memory manager. The function yields a pointer to the tables.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_maketables_free.3",
    "content": ".TH PCRE2_MAKETABLES_FREE 3 \"03 September 2019\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_maketables_free(pcre2_general_context *\\fIgcontext\\fP,\n.B \"  const uint8_t *\\fItables\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function discards a set of character tables that were created by a call\nto\n.\\\" HREF\n\\fBpcre2_maketables()\\fP.\n.\\\"\n.P\nThe \\fIgcontext\\fP parameter should match what was used in that call to\naccount for any custom allocators that might be in use; if it is NULL\nthe system \\fBfree()\\fP is used.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_match.3",
    "content": ".TH PCRE2_MATCH 3 \"27 January 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_match(const pcre2_code *\\fIcode\\fP, PCRE2_SPTR \\fIsubject\\fP,\n.B \"  PCRE2_SIZE \\fIlength\\fP, PCRE2_SIZE \\fIstartoffset\\fP,\"\n.B \"  uint32_t \\fIoptions\\fP, pcre2_match_data *\\fImatch_data\\fP,\"\n.B \"  pcre2_match_context *\\fImcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function matches a compiled regular expression against a given subject\nstring, using a matching algorithm that is similar to Perl's. It returns\noffsets to what it has matched and to captured substrings via the\n\\fBmatch_data\\fP block, which can be processed by functions with names that\nstart with \\fBpcre2_get_ovector_...()\\fP or \\fBpcre2_substring_...()\\fP. The\nreturn from \\fBpcre2_match()\\fP is one more than the highest numbered capturing\npair that has been set (for example, 1 if there are no captures), zero if the\nvector of offsets is too small, or a negative error code for no match and other\nerrors. The function arguments are:\n.sp\n  \\fIcode\\fP         Points to the compiled pattern\n  \\fIsubject\\fP      Points to the subject string\n  \\fIlength\\fP       Length of the subject string\n  \\fIstartoffset\\fP  Offset in the subject at which to start matching\n  \\fIoptions\\fP      Option bits\n  \\fImatch_data\\fP   Points to a match data block, for results\n  \\fImcontext\\fP     Points to a match context, or is NULL\n.sp\nA match context is needed only if you want to:\n.sp\n  Set up a callout function\n  Set a matching offset limit\n  Change the heap memory limit\n  Change the backtracking match limit\n  Change the backtracking depth limit\n  Set custom memory management specifically for the match\n.sp\nThe \\fIlength\\fP and \\fIstartoffset\\fP values are code units, not characters.\nThe length may be given as PCRE2_ZERO_TERMINATED for a subject that is\nterminated by a binary zero code unit. The options are:\n.sp\n  PCRE2_ANCHORED          Match only at the first position\n  PCRE2_COPY_MATCHED_SUBJECT\n                          On success, make a private subject copy\n  PCRE2_DISABLE_RECURSELOOP_CHECK\n                          Only useful in rare cases; use with care\n  PCRE2_ENDANCHORED       Pattern can match only at end of subject\n  PCRE2_NOTBOL            Subject string is not the beginning of a line\n  PCRE2_NOTEOL            Subject string is not the end of a line\n  PCRE2_NOTEMPTY          An empty string is not a valid match\n.\\\" JOIN\n  PCRE2_NOTEMPTY_ATSTART  An empty string at the start of the subject\n                           is not a valid match\n  PCRE2_NO_JIT            Do not use JIT matching\n.\\\" JOIN\n  PCRE2_NO_UTF_CHECK      Do not check the subject for UTF\n                           validity (only relevant if PCRE2_UTF\n                           was set at compile time)\n.\\\" JOIN\n  PCRE2_PARTIAL_HARD      Return PCRE2_ERROR_PARTIAL for a partial\n                           match even if there is a full match\n.\\\" JOIN\n  PCRE2_PARTIAL_SOFT      Return PCRE2_ERROR_PARTIAL for a partial\n                           match if no full matches are found\n.sp\nFor details of partial matching, see the\n.\\\" HREF\n\\fBpcre2partial\\fP\n.\\\"\npage. There is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_match_context_copy.3",
    "content": ".TH PCRE2_MATCH_CONTEXT_COPY 3 \"25 October 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_match_context *pcre2_match_context_copy(\n.B \"  pcre2_match_context *\\fImcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function makes a new copy of a match context, using the memory\nallocation function that was used for the original context. The result is NULL\nif the memory cannot be obtained.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_match_context_create.3",
    "content": ".TH PCRE2_MATCH_CONTEXT_CREATE 3 \"25 October 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_match_context *pcre2_match_context_create(\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function creates and initializes a new match context. If its argument is\nNULL, \\fBmalloc()\\fP is used to get the necessary memory; otherwise the memory\nallocation function within the general context is used. The result is NULL if\nthe memory could not be obtained.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_match_context_free.3",
    "content": ".TH PCRE2_MATCH_CONTEXT_FREE 3 \"28 June 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_match_context_free(pcre2_match_context *\\fImcontext\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function frees the memory occupied by a match context, using the memory\nfreeing function from the general context with which it was created, or\n\\fBfree()\\fP if that was not set. If the argument is NULL, the function returns\nimmediately without doing anything.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_match_data_create.3",
    "content": ".TH PCRE2_MATCH_DATA_CREATE 3 \"28 August 2021\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_match_data *pcre2_match_data_create(uint32_t \\fIovecsize\\fP,\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function creates a new match data block, which is used for holding the\nresult of a match. The first argument specifies the number of pairs of offsets\nthat are required. These form the \"output vector\" (ovector) within the match\ndata block, and are used to identify the matched string and any captured\nsubstrings when matching with \\fBpcre2_match()\\fP, or a number of different\nmatches at the same point when used with \\fBpcre2_dfa_match()\\fP. There is\nalways one pair of offsets; if \\fBovecsize\\fP is zero, it is treated as one.\n.P\nThe second argument points to a general context, for custom memory management,\nor is NULL for system memory management. The result of the function is NULL if\nthe memory for the block could not be obtained.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_match_data_create_from_pattern.3",
    "content": ".TH PCRE2_MATCH_DATA_CREATE_FROM_PATTERN 3 \"11 August 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B pcre2_match_data *pcre2_match_data_create_from_pattern(\n.B \"  const pcre2_code *\\fIcode\\fP, pcre2_general_context *\\fIgcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function creates a new match data block for holding the result of a match.\nIf the first argument is NULL, this function returns NULL, otherwise the first\nargument points to a compiled pattern. The number of capturing parentheses\nwithin the pattern is used to compute the number of pairs of offsets that are\nrequired in the match data block. These form the \"output vector\" (ovector)\nwithin the match data block, and are used to identify the matched string and\nany captured substrings when matching with \\fBpcre2_match()\\fP. If you are\nusing \\fBpcre2_dfa_match()\\fP, which uses the output vector in a different way,\nyou should use \\fBpcre2_match_data_create()\\fP instead of this function.\n.P\nThe second argument points to a general context, for custom memory management,\nor is NULL to use the same memory allocator that was used for the compiled\npattern. The result of the function is NULL if the memory for the block could\nnot be obtained or if NULL was provided as the first argument.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_match_data_free.3",
    "content": ".TH PCRE2_MATCH_DATA_FREE 3 \"16 August 2023\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_match_data_free(pcre2_match_data *\\fImatch_data\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nIf \\fImatch_data\\fP is NULL, this function does nothing. Otherwise,\n\\fImatch_data\\fP must point to a match data block, which this function frees,\nusing the memory freeing function from the general context or compiled pattern\nwith which it was created, or \\fBfree()\\fP if that was not set. If the match\ndata block was previously passed to \\fBpcre2_match()\\fP, it will have an\nattached heapframe vector; this is also freed.\n.P\nIf the PCRE2_COPY_MATCHED_SUBJECT was used for a successful match using this\nmatch data block, the copy of the subject that was referenced within the block\nis also freed.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_next_match.3",
    "content": ".TH PCRE2_NEXT_MATCH 3 \"24 March 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_next_match(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_SIZE *\\fIpstart_offset\\fP, uint32_t *\\fIpoptions\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function can be called after one of the match functions\n(\\fBpcre2_match()\\fP, \\fBpcre2_dfa_match()\\fP, or \\fBpcre2_jit_match()\\fP), and\nmust be provided with the same \\fImatch_data\\fP parameter. It outputs the\nappropriate parameters for searching for the next match in the same subject\nstring, and is suitable for applications providing \"global\" matching behaviour\n(for example, replacing all matches in the subject, or splitting the subject on\nall matches, or simply counting the number of matches).\n.P\nIt returns 0 (\"false\") if there is no need to make any further match attempts,\nor 1 (\"true\") if another match should be attempted.\n.P\nThe *\\fIpstart_offset\\fP and *\\fIpoptions\\fP are set if the function returns 1.\nThe *\\fIpstart_offset\\fP should be passed to the next match attempt directly,\nand the *\\fIpoptions\\fP should be passed to the next match attempt by combining\nwith the application's match options using OR.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_pattern_convert.3",
    "content": ".TH PCRE2_PATTERN_CONVERT 3 \"12 July 2017\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_pattern_convert(PCRE2_SPTR \\fIpattern\\fP, PCRE2_SIZE \\fIlength\\fP,\n.B \"  uint32_t \\fIoptions\\fP, PCRE2_UCHAR **\\fIbuffer\\fP,\"\n.B \"  PCRE2_SIZE *\\fIblength\\fP, pcre2_convert_context *\\fIcvcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function is part of an experimental set of pattern conversion functions.\nIt converts a foreign pattern (for example, a glob) into a PCRE2 regular\nexpression pattern. Its arguments are:\n.sp\n  \\fIpattern\\fP     The foreign pattern\n  \\fIlength\\fP      The length of the input pattern or PCRE2_ZERO_TERMINATED\n  \\fIoptions\\fP     Option bits\n  \\fIbuffer\\fP      Pointer to pointer to output buffer, or NULL\n  \\fIblength\\fP     Pointer to output length field\n  \\fIcvcontext\\fP   Pointer to a convert context or NULL\n.sp\nThe length of the converted pattern (excluding the terminating zero) is\nreturned via \\fIblength\\fP. If \\fIbuffer\\fP is NULL, the function just returns\nthe output length. If \\fIbuffer\\fP points to a NULL pointer, heap memory is\nobtained for the converted pattern, using the allocator in the context if\npresent (or else \\fBmalloc()\\fP), and the field pointed to by \\fIbuffer\\fP is\nupdated. If \\fIbuffer\\fP points to a non-NULL field, that must point to a\nbuffer whose size is in the variable pointed to by \\fIblength\\fP. This value is\nupdated.\n.P\nThe option bits are:\n.sp\n  PCRE2_CONVERT_UTF                     Input is UTF\n  PCRE2_CONVERT_NO_UTF_CHECK            Do not check UTF validity\n  PCRE2_CONVERT_POSIX_BASIC             Convert POSIX basic pattern\n  PCRE2_CONVERT_POSIX_EXTENDED          Convert POSIX extended pattern\n  PCRE2_CONVERT_GLOB                    ) Convert\n  PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR  )   various types\n  PCRE2_CONVERT_GLOB_NO_STARSTAR        )     of glob\n.sp\nThe return value from \\fBpcre2_pattern_convert()\\fP is zero on success or a\nnon-zero PCRE2 error code.\n.P\nThe pattern conversion functions are described in the\n.\\\" HREF\n\\fBpcre2convert\\fP\n.\\\"\ndocumentation.\n"
  },
  {
    "path": "doc/pcre2_pattern_info.3",
    "content": ".TH PCRE2_PATTERN_INFO 3 \"14 February 2019\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_pattern_info(const pcre2_code *\\fIcode\\fP, uint32_t \\fIwhat\\fP,\n.B \"   void *\\fIwhere\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function returns information about a compiled pattern. Its arguments are:\n.sp\n  \\fIcode\\fP     Pointer to a compiled regular expression pattern\n  \\fIwhat\\fP     What information is required\n  \\fIwhere\\fP    Where to put the information\n.sp\nThe recognized values for the \\fIwhat\\fP argument, and the information they\nrequest are as follows:\n.sp\n  PCRE2_INFO_ALLOPTIONS      Final options after compiling\n  PCRE2_INFO_ARGOPTIONS      Options passed to \\fBpcre2_compile()\\fP\n  PCRE2_INFO_BACKREFMAX      Number of highest backreference\n  PCRE2_INFO_BSR             What \\eR matches:\n                               PCRE2_BSR_UNICODE: Unicode line endings\n                               PCRE2_BSR_ANYCRLF: CR, LF, or CRLF only\n  PCRE2_INFO_CAPTURECOUNT    Number of capturing subpatterns\n.\\\" JOIN\n  PCRE2_INFO_DEPTHLIMIT      Backtracking depth limit if set,\n                               otherwise PCRE2_ERROR_UNSET\n  PCRE2_INFO_EXTRAOPTIONS    Extra options that were passed in the\n                               compile context\n  PCRE2_INFO_FIRSTBITMAP     Bitmap of first code units, or NULL\n  PCRE2_INFO_FIRSTCODETYPE   Type of start-of-match information\n                               0 nothing set\n                               1 first code unit is set\n                               2 start of string or after newline\n  PCRE2_INFO_FIRSTCODEUNIT   First code unit when type is 1\n  PCRE2_INFO_FRAMESIZE       Size of backtracking frame\n  PCRE2_INFO_HASBACKSLASHC   Return 1 if pattern contains \\eC\n.\\\" JOIN\n  PCRE2_INFO_HASCRORLF       Return 1 if explicit CR or LF matches\n                               exist in the pattern\n.\\\" JOIN\n  PCRE2_INFO_HEAPLIMIT       Heap memory limit if set,\n                               otherwise PCRE2_ERROR_UNSET\n  PCRE2_INFO_JCHANGED        Return 1 if (?J) or (?-J) was used\n  PCRE2_INFO_JITSIZE         Size of JIT compiled code, or 0\n  PCRE2_INFO_LASTCODETYPE    Type of must-be-present information\n                               0 nothing set\n                               1 code unit is set\n  PCRE2_INFO_LASTCODEUNIT    Last code unit when type is 1\n.\\\" JOIN\n  PCRE2_INFO_MATCHEMPTY      1 if the pattern can match an\n                               empty string, 0 otherwise\n.\\\" JOIN\n  PCRE2_INFO_MATCHLIMIT      Match limit if set,\n                               otherwise PCRE2_ERROR_UNSET\n.\\\" JOIN\n  PCRE2_INFO_MAXLOOKBEHIND   Length (in characters) of the longest\n                               lookbehind assertion\n  PCRE2_INFO_MINLENGTH       Lower bound length of matching strings\n  PCRE2_INFO_NAMECOUNT       Number of named subpatterns\n  PCRE2_INFO_NAMEENTRYSIZE   Size of name table entries\n  PCRE2_INFO_NAMETABLE       Pointer to name table\n  PCRE2_CONFIG_NEWLINE       Code for the newline sequence:\n                               PCRE2_NEWLINE_CR\n                               PCRE2_NEWLINE_LF\n                               PCRE2_NEWLINE_CRLF\n                               PCRE2_NEWLINE_ANY\n                               PCRE2_NEWLINE_ANYCRLF\n                               PCRE2_NEWLINE_NUL\n  PCRE2_INFO_RECURSIONLIMIT  Obsolete synonym for PCRE2_INFO_DEPTHLIMIT\n  PCRE2_INFO_SIZE            Size of compiled pattern\n.sp\nIf \\fIwhere\\fP is NULL, the function returns the amount of memory needed for\nthe requested information, in bytes. Otherwise, the \\fIwhere\\fP argument must\npoint to an unsigned 32-bit integer (uint32_t variable), except for the\nfollowing \\fIwhat\\fP values, when it must point to a variable of the type\nshown:\n.sp\n  PCRE2_INFO_FIRSTBITMAP     const uint8_t *\n  PCRE2_INFO_JITSIZE         size_t\n  PCRE2_INFO_NAMETABLE       PCRE2_SPTR\n  PCRE2_INFO_SIZE            size_t\n.sp\nThe yield of the function is zero on success or:\n.sp\n  PCRE2_ERROR_NULL           the argument \\fIcode\\fP is NULL\n  PCRE2_ERROR_BADMAGIC       the \"magic number\" was not found\n  PCRE2_ERROR_BADOPTION      the value of \\fIwhat\\fP is invalid\n  PCRE2_ERROR_BADMODE        the pattern was compiled in the wrong mode\n  PCRE2_ERROR_UNSET          the requested information is not set\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_serialize_decode.3",
    "content": ".TH PCRE2_SERIALIZE_DECODE 3 \"22 April 2022\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int32_t pcre2_serialize_decode(pcre2_code **\\fIcodes\\fP,\n.B \"  int32_t \\fInumber_of_codes\\fP, const uint8_t *\\fIbytes\\fP,\"\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function decodes a serialized set of compiled patterns back into a list of\nindividual patterns. This is possible only on a host that is running the same\nversion of PCRE2, with the same code unit width, and the host must also have\nthe same endianness, pointer width and PCRE2_SIZE type. The arguments for\n\\fBpcre2_serialize_decode()\\fP are:\n.sp\n  \\fIcodes\\fP            pointer to a vector in which to build the list\n  \\fInumber_of_codes\\fP  number of slots in the vector\n  \\fIbytes\\fP            the serialized byte stream\n  \\fIgcontext\\fP         pointer to a general context or NULL\n.sp\nThe \\fIbytes\\fP argument must point to a block of data that was originally\ncreated by \\fBpcre2_serialize_encode()\\fP, though it may have been saved on\ndisc or elsewhere in the meantime. If there are more codes in the serialized\ndata than slots in the list, only those compiled patterns that will fit are\ndecoded. The yield of the function is the number of decoded patterns, or one of\nthe following negative error codes:\n.sp\n  PCRE2_ERROR_BADDATA   \\fInumber_of_codes\\fP is zero or less\n  PCRE2_ERROR_BADMAGIC  mismatch of id bytes in \\fIbytes\\fP\n  PCRE2_ERROR_BADMODE   mismatch of variable unit size or PCRE version\n  PCRE2_ERROR_NOMEMORY  memory allocation failed\n  PCRE2_ERROR_NULL      \\fIcodes\\fP or \\fIbytes\\fP is NULL\n.sp\nPCRE2_ERROR_BADMAGIC may mean that the data is corrupt, or that it was compiled\non a system with different endianness.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the serialization functions in the\n.\\\" HREF\n\\fBpcre2serialize\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_serialize_encode.3",
    "content": ".TH PCRE2_SERIALIZE_ENCODE 3 \"13 August 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int32_t pcre2_serialize_encode(const pcre2_code **\\fIcodes\\fP,\n.B \"  int32_t \\fInumber_of_codes\\fP, uint8_t **\\fIserialized_bytes\\fP,\"\n.B \"  PCRE2_SIZE *\\fIserialized_size\\fP, pcre2_general_context *\\fIgcontext\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function encodes a list of compiled patterns into a byte stream that can\nbe saved on disc or elsewhere. Note that this is not an abstract format like\nJava or .NET. Conversion of the byte stream back into usable compiled patterns\ncan only happen on a host that is running the same version of PCRE2, with the\nsame code unit width, and the host must also have the same endianness, pointer\nwidth and PCRE2_SIZE type. The arguments for \\fBpcre2_serialize_encode()\\fP\nare:\n.sp\n  \\fIcodes\\fP             pointer to a vector containing the list\n  \\fInumber_of_codes\\fP   number of slots in the vector\n  \\fIserialized_bytes\\fP  set to point to the serialized byte stream\n  \\fIserialized_size\\fP   set to the number of bytes in the byte stream\n  \\fIgcontext\\fP          pointer to a general context or NULL\n.sp\nThe context argument is used to obtain memory for the byte stream. When the\nserialized data is no longer needed, it must be freed by calling\n\\fBpcre2_serialize_free()\\fP. The yield of the function is the number of\nserialized patterns, or one of the following negative error codes:\n.sp\n  PCRE2_ERROR_BADDATA      \\fInumber_of_codes\\fP is zero or less\n  PCRE2_ERROR_BADMAGIC     mismatch of id bytes in one of the patterns\n  PCRE2_ERROR_MEMORY       memory allocation failed\n  PCRE2_ERROR_MIXEDTABLES  the patterns do not all use the same tables\n  PCRE2_ERROR_NULL         an argument other than \\fIgcontext\\fP is NULL\n.sp\nPCRE2_ERROR_BADMAGIC means either that a pattern's code has been corrupted, or\nthat a slot in the vector does not point to a compiled pattern.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the serialization functions in the\n.\\\" HREF\n\\fBpcre2serialize\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_serialize_free.3",
    "content": ".TH PCRE2_SERIALIZE_FREE 3 \"13 August 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_serialize_free(uint8_t *\\fIbytes\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function frees the memory that was obtained by\n\\fBpcre2_serialize_encode()\\fP to hold a serialized byte stream. The argument\nmust point to such a byte stream or be NULL, in which case the function returns\nwithout doing anything.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the serialization functions in the\n.\\\" HREF\n\\fBpcre2serialize\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_serialize_get_number_of_codes.3",
    "content": ".TH PCRE2_SERIALIZE_GET_NUMBER_OF_CODES 3 \"13 August 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int32_t pcre2_serialize_get_number_of_codes(const uint8_t *\\fIbytes\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThe \\fIbytes\\fP argument must point to a serialized byte stream that was\noriginally created by \\fBpcre2_serialize_encode()\\fP (though it may have been\nsaved on disc or elsewhere in the meantime). The function returns the number of\nserialized patterns in the byte stream, or one of the following negative error\ncodes:\n.sp\n  PCRE2_ERROR_BADMAGIC  mismatch of id bytes in \\fIbytes\\fP\n  PCRE2_ERROR_BADMODE   mismatch of variable unit size or PCRE version\n  PCRE2_ERROR_NULL      the argument is NULL\n.sp\nPCRE2_ERROR_BADMAGIC may mean that the data is corrupt, or that it was compiled\non a system with different endianness.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the serialization functions in the\n.\\\" HREF\n\\fBpcre2serialize\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_bsr.3",
    "content": ".TH PCRE2_SET_BSR 3 \"25 October 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_bsr(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets the convention for processing \\eR within a compile context.\nThe second argument must be one of PCRE2_BSR_ANYCRLF or PCRE2_BSR_UNICODE. The\nresult is zero for success or PCRE2_ERROR_BADDATA if the second argument is\ninvalid.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_callout.3",
    "content": ".TH PCRE2_SET_CALLOUT 3 \"25 March 2017\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_callout(pcre2_match_context *\\fImcontext\\fP,\n.B \"  int (*\\fIcallout_function\\fP)(pcre2_callout_block *),\"\n.B \"  void *\\fIcallout_data\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets the callout fields in a match context (the first argument).\nThe second argument specifies a callout function, and the third argument is an\nopaque data item that is passed to it. The result of this function is always\nzero.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_character_tables.3",
    "content": ".TH PCRE2_SET_CHARACTER_TABLES 3 \"15 April 2020\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_character_tables(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  const uint8_t *\\fItables\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets a pointer to custom character tables within a compile\ncontext. The second argument must point to a set of PCRE2 character tables or\nbe NULL to request the default tables. The result is always zero. Character\ntables can be created by calling \\fBpcre2_maketables()\\fP or by running the\n\\fBpcre2_dftables\\fP maintenance command in binary mode (see the\n.\\\" HREF\n\\fBpcre2build\\fP\n.\\\"\ndocumentation).\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_compile_extra_options.3",
    "content": ".TH PCRE2_SET_COMPILE_EXTRA_OPTIONS 3 \"14 October 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_compile_extra_options(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIextra_options\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets additional option bits for \\fBpcre2_compile()\\fP that are\nhoused in a compile context. It completely replaces all the bits. The extra\noptions are:\n.sp\n  PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK     Allow \\eK in lookarounds\n.\\\" JOIN\n  PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES  Allow \\ex{d800} to \\ex{dfff}\n                                         in UTF-8 and UTF-32 modes\n.\\\" JOIN\n  PCRE2_EXTRA_ALT_BSUX                 Extended alternate \\eu, \\eU, and\n                                         \\ex handling\n  PCRE2_EXTRA_ASCII_BSD                \\ed remains ASCII in UCP mode\n  PCRE2_EXTRA_ASCII_BSS                \\es remains ASCII in UCP mode\n  PCRE2_EXTRA_ASCII_BSW                \\ew remains ASCII in UCP mode\n.\\\" JOIN\n  PCRE2_EXTRA_ASCII_DIGIT              [:digit:] and [:xdigit:] POSIX classes\n                                         remain ASCII in UCP mode\n.\\\" JOIN\n  PCRE2_EXTRA_ASCII_POSIX              POSIX classes remain ASCII in\n                                         UCP mode\n.\\\" JOIN\n  PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL    Treat all invalid escapes as\n                                         a literal following character\n.\\\" JOIN\n  PCRE2_EXTRA_CASELESS_RESTRICT        Disable mixed ASCII/non-ASCII\n                                         case folding\n  PCRE2_EXTRA_ESCAPED_CR_IS_LF         Interpret \\er as \\en\n  PCRE2_EXTRA_MATCH_LINE               Pattern matches whole lines\n  PCRE2_EXTRA_MATCH_WORD               Pattern matches \"words\"\n  PCRE2_EXTRA_NEVER_CALLOUT            Disallow callouts in pattern\n  PCRE2_EXTRA_NO_BS0                   Disallow \\e0 (but not \\e00 or \\e000)\n  PCRE2_EXTRA_PYTHON_OCTAL             Use Python rules for octal\n  PCRE2_EXTRA_TURKISH_CASING           Use Turkish I case folding\n.sp\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_compile_recursion_guard.3",
    "content": ".TH PCRE2_SET_COMPILE_RECURSION_GUARD 3 \"26 November 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_compile_recursion_guard(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  int (*\\fIguard_function\\fP)(uint32_t, void *), void *\\fIuser_data\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function defines, within a compile context, a function that is called\nwhenever \\fBpcre2_compile()\\fP starts to compile a parenthesized part of a\npattern. The first argument to the function gives the current depth of\nparenthesis nesting, and the second is user data that is supplied when the\nfunction is set up. The callout function should return zero if all is well, or\nnon-zero to force an error. This feature is provided so that applications can\ncheck the available system stack space, in order to avoid running out. The\nresult of \\fBpcre2_set_compile_recursion_guard()\\fP is always zero.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_depth_limit.3",
    "content": ".TH PCRE2_SET_DEPTH_LIMIT 3 \"25 March 2017\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_depth_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets the backtracking depth limit field in a match context. The\nresult is always zero.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_glob_escape.3",
    "content": ".TH PCRE2_SET_GLOB_ESCAPE 3 \"12 July 2017\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_glob_escape(pcre2_convert_context *\\fIcvcontext\\fP,\n.B \"  uint32_t \\fIescape_char\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function is part of an experimental set of pattern conversion functions.\nIt sets the escape character that is used when converting globs. The second\nargument must either be zero (meaning there is no escape character) or a\npunctuation character whose code point is less than 256. The default is grave\naccent if running under Windows, otherwise backslash. The result of the\nfunction is zero for success or PCRE2_ERROR_BADDATA if the second argument is\ninvalid.\n.P\nThe pattern conversion functions are described in the\n.\\\" HREF\n\\fBpcre2convert\\fP\n.\\\"\ndocumentation.\n"
  },
  {
    "path": "doc/pcre2_set_glob_separator.3",
    "content": ".TH PCRE2_SET_GLOB_SEPARATOR 3 \"17 June 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_glob_separator(pcre2_convert_context *\\fIcvcontext\\fP,\n.B \"  uint32_t \\fIseparator_char\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function is part of an experimental set of pattern conversion functions.\nIt sets the component separator character that is used when converting globs.\nThe second argument must be one of the characters forward slash, backslash, or\ndot. The default is backslash when running under Windows, otherwise forward\nslash. The result of the function is zero for success or PCRE2_ERROR_BADDATA if\nthe second argument is invalid.\n.P\nThe pattern conversion functions are described in the\n.\\\" HREF\n\\fBpcre2convert\\fP\n.\\\"\ndocumentation.\n"
  },
  {
    "path": "doc/pcre2_set_heap_limit.3",
    "content": ".TH PCRE2_SET_HEAP_LIMIT 3 \"17 June 2018\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_heap_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets the backtracking heap limit field in a match context. The\nresult is always zero.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_match_limit.3",
    "content": ".TH PCRE2_SET_MATCH_LIMIT 3 \"25 October 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_match_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets the match limit field in a match context. The result is\nalways zero.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_max_pattern_compiled_length.3",
    "content": ".TH PCRE2_SET_MAX_PATTERN_COMPILED_LENGTH 3 \"09 June 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_max_pattern_compiled_length(\n.B \"  pcre2_compile_context *\\fIccontext\\fP, PCRE2_SIZE \\fIvalue\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets, in a compile context, the maximum size (in bytes) for the\nmemory needed to hold the compiled version of a pattern that is using this\ncontext. The result is always zero. If a pattern that is passed to\n\\fBpcre2_compile()\\fP referencing this context needs more memory, an error is\ngenerated. The default is the largest number that a PCRE2_SIZE variable can\nhold, which is effectively unlimited.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_max_pattern_length.3",
    "content": ".TH PCRE2_SET_MAX_PATTERN_LENGTH 3 \"05 October 2016\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_max_pattern_length(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  PCRE2_SIZE \\fIvalue\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets, in a compile context, the maximum text length (in code\nunits) of the pattern that can be compiled. The result is always zero. If a\nlonger pattern is passed to \\fBpcre2_compile()\\fP there is an immediate error\nreturn. The default is effectively unlimited, being the largest value a\nPCRE2_SIZE variable can hold.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_max_varlookbehind.3",
    "content": ".TH PCRE2_SET_NEWLINE 3 \"11 August 2023\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_max_varlookbehind(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis sets a maximum length for the number of characters matched by a\nvariable-length lookbehind assertion. The default is set when PCRE2 is built,\nwith the ultimate default being 255, the same as Perl. Lookbehind assertions\nwithout a bounding length are not supported. The result is always zero.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_newline.3",
    "content": ".TH PCRE2_SET_NEWLINE 3 \"19 July 2017\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_newline(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets the newline convention within a compile context. This\nspecifies which character(s) are recognized as newlines when compiling and\nmatching patterns. The second argument must be one of:\n.sp\n  PCRE2_NEWLINE_CR        Carriage return only\n  PCRE2_NEWLINE_LF        Linefeed only\n  PCRE2_NEWLINE_CRLF      CR followed by LF only\n  PCRE2_NEWLINE_ANYCRLF   Any of the above\n  PCRE2_NEWLINE_ANY       Any Unicode newline sequence\n  PCRE2_NEWLINE_NUL       The NUL character (binary zero)\n.sp\nThe result is zero for success or PCRE2_ERROR_BADDATA if the second argument is\ninvalid.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_offset_limit.3",
    "content": ".TH PCRE2_SET_OFFSET_LIMIT 3 \"22 September 2015\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_offset_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  PCRE2_SIZE \\fIvalue\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets the offset limit field in a match context. The result is\nalways zero.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_optimize.3",
    "content": ".TH PCRE2_SET_OPTIMIZE 3 \"22 September 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_optimize(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIdirective\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function controls which performance optimizations will be applied\nby \\fBpcre2_compile()\\fP. It can be called multiple times with the same compile\ncontext; the effects are cumulative, with the effects of later calls taking\nprecedence over earlier ones.\n.P\nThe result is zero for success, PCRE2_ERROR_NULL if \\fIccontext\\fP is NULL,\nor PCRE2_ERROR_BADOPTION if \\fIdirective\\fP is unknown. The latter could be\nuseful to detect if a certain optimization is available.\n.P\nThe list of possible values for the \\fIdirective\\fP parameter are:\n.sp\n  PCRE2_OPTIMIZATION_FULL   Enable all optimizations (default)\n  PCRE2_OPTIMIZATION_NONE   Disable all optimizations\n  PCRE2_AUTO_POSSESS        Enable auto-possessification\n  PCRE2_AUTO_POSSESS_OFF    Disable auto-possessification\n  PCRE2_DOTSTAR_ANCHOR      Enable implicit dotstar anchoring\n  PCRE2_DOTSTAR_ANCHOR_OFF  Disable implicit dotstar anchoring\n  PCRE2_START_OPTIMIZE      Enable start-up optimizations at match time\n  PCRE2_START_OPTIMIZE_OFF  Disable start-up optimizations at match time\n.sp\nThere is a complete description of the PCRE2 native API, including detailed\ndescriptions \\fIdirective\\fP parameter values in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_parens_nest_limit.3",
    "content": ".TH PCRE2_SET_PARENS_NEST_LIMIT 3 \"25 October 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_parens_nest_limit(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets, in a compile context, the maximum depth of nested\nparentheses in a pattern. The result is always zero.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_recursion_limit.3",
    "content": ".TH PCRE2_SET_RECURSION_LIMIT 3 \"19 July 2017\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_recursion_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function is obsolete and should not be used in new code. Use\n\\fBpcre2_set_depth_limit()\\fP instead.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_recursion_memory_management.3",
    "content": ".TH PCRE2_SET_RECURSION_MEMORY_MANAGEMENT 3 \"23 January 2023\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_recursion_memory_management(\n.B \"  pcre2_match_context *\\fImcontext\\fP,\"\n.B \"  void *(*\\fIprivate_malloc\\fP)(size_t, void *),\"\n.B \"  void (*\\fIprivate_free\\fP)(void *, void *), void *\\fImemory_data\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nFrom release 10.30 onwards, this function is obsolete and does nothing. The\nresult is always zero.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_substitute_callout.3",
    "content": ".TH PCRE2_SET_SUBSTITUTE_CALLOUT 3 \"04 October 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_substitute_callout(pcre2_match_context *\\fImcontext\\fP,\n.B \"  int (*\\fIcallout_function\\fP)(pcre2_substitute_callout_block *, void *),\"\n.B \"  void *\\fIcallout_data\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets the substitute callout fields in a match context (the first\nargument). The second argument specifies a callout function, and the third\nargument is an opaque data item that is passed to it. The result of this\nfunction is always zero.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_set_substitute_case_callout.3",
    "content": ".TH PCRE2_SET_SUBSTITUTE_CASE_CALLOUT 3 \"26 December 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_set_substitute_case_callout(pcre2_match_context *\\fImcontext\\fP,\n.B \"  PCRE2_SIZE (*\\fIcallout_function\\fP)(PCRE2_SPTR, PCRE2_SIZE,\"\n.B \"                                 PCRE2_UCHAR *, PCRE2_SIZE,\"\n.B \"                                 int, void *),\"\n.B \"  void *\\fIcallout_data\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function sets the substitute case callout fields in a match context (the\nfirst argument). The second argument specifies a callout function, and the third\nargument is an opaque data item that is passed to it. The result of this\nfunction is always zero.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_substitute.3",
    "content": ".TH PCRE2_SUBSTITUTE 3 \"03 October 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_substitute(const pcre2_code *\\fIcode\\fP, PCRE2_SPTR \\fIsubject\\fP,\n.B \"  PCRE2_SIZE \\fIlength\\fP, PCRE2_SIZE \\fIstartoffset\\fP,\"\n.B \"  uint32_t \\fIoptions\\fP, pcre2_match_data *\\fImatch_data\\fP,\"\n.B \"  pcre2_match_context *\\fImcontext\\fP, PCRE2_SPTR \\fIreplacement\\fP,\"\n.B \"  PCRE2_SIZE \\fIrlength\\fP, PCRE2_UCHAR *\\fIoutputbuffer\\fP,\"\n.B \"  PCRE2_SIZE *\\fIoutlengthptr\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function matches a compiled regular expression against a given subject\nstring, using a matching algorithm that is similar to Perl's. It then makes a\ncopy of the subject, substituting a replacement string for what was matched.\nIts arguments are:\n.sp\n  \\fIcode\\fP          Points to the compiled pattern\n  \\fIsubject\\fP       Points to the subject string\n  \\fIlength\\fP        Length of the subject string\n  \\fIstartoffset\\fP   Offset in the subject at which to start matching\n  \\fIoptions\\fP       Option bits\n  \\fImatch_data\\fP    Points to a match data block, or is NULL\n  \\fImcontext\\fP      Points to a match context, or is NULL\n  \\fIreplacement\\fP   Points to the replacement string\n  \\fIrlength\\fP       Length of the replacement string\n  \\fIoutputbuffer\\fP  Points to the output buffer\n  \\fIoutlengthptr\\fP  Points to the length of the output buffer\n.sp\nA match data block is needed only if you want to inspect the data from the\nfinal match that is returned in that block or if PCRE2_SUBSTITUTE_MATCHED is\nset. A match context is needed only if you want to:\n.sp\n  Set up a callout function\n  Set a matching offset limit\n  Change the backtracking match limit\n  Change the backtracking depth limit\n  Set custom memory management in the match context\n.sp\nThe \\fIlength\\fP, \\fIstartoffset\\fP and \\fIrlength\\fP values are code units,\nnot characters, as is the contents of the variable pointed at by\n\\fIoutlengthptr\\fP. This variable must contain the length of the output buffer\nwhen the function is called. If the function is successful, the value is\nchanged to the length of the new string, excluding the trailing zero that is\nautomatically added.\n.P\nThe subject and replacement lengths can be given as PCRE2_ZERO_TERMINATED for\nzero-terminated strings. The options are:\n.sp\n  PCRE2_ANCHORED                     Match only at the first position\n  PCRE2_ENDANCHORED                  Match only at end of subject\n.\\\" JOIN\n  PCRE2_NOTBOL                       Subject is not the beginning of a\n                                      line\n  PCRE2_NOTEOL                       Subject is not the end of a line\n.\\\" JOIN\n  PCRE2_NOTEMPTY                     An empty string is not a\n                                      valid match\n.\\\" JOIN\n  PCRE2_NOTEMPTY_ATSTART             An empty string at the start of\n                                      the subject is not a valid match\n  PCRE2_NO_JIT                       Do not use JIT matching\n.\\\" JOIN\n  PCRE2_NO_UTF_CHECK                 Do not check for UTF validity in\n                                      the subject or replacement\n.\\\" JOIN\n                                      (only relevant if PCRE2_UTF was\n                                      set at compile time)\n  PCRE2_SUBSTITUTE_EXTENDED          Do extended replacement processing\n.\\\" JOIN\n  PCRE2_SUBSTITUTE_GLOBAL            Replace all occurrences in the\n                                      subject\n  PCRE2_SUBSTITUTE_LITERAL           The replacement string is literal\n.\\\" JOIN\n  PCRE2_SUBSTITUTE_MATCHED           Use pre-existing match data for\n                                      first match\n  PCRE2_SUBSTITUTE_OVERFLOW_LENGTH   If overflow, compute needed length\n  PCRE2_SUBSTITUTE_REPLACEMENT_ONLY  Return only replacement string(s)\n  PCRE2_SUBSTITUTE_UNKNOWN_UNSET     Treat unknown group as unset\n  PCRE2_SUBSTITUTE_UNSET_EMPTY       Simple unset insert = empty string\n.sp\nIf PCRE2_SUBSTITUTE_LITERAL is set, PCRE2_SUBSTITUTE_EXTENDED,\nPCRE2_SUBSTITUTE_UNKNOWN_UNSET, and PCRE2_SUBSTITUTE_UNSET_EMPTY are ignored.\n.P\nIf PCRE2_SUBSTITUTE_MATCHED is set, \\fImatch_data\\fP must be non-NULL; its\ncontents must be the result of a call to \\fBpcre2_match()\\fP (or\n\\fBpcre2_jit_match()\\fP) using the same pattern, subject pointer, effective\nsubject length, start offset, and match options.\n.P\nThe function returns the number of substitutions, which may be zero if there\nare no matches. The result may be greater than one only when\nPCRE2_SUBSTITUTE_GLOBAL is set. In the event of an error, a negative error code\nis returned.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_substring_copy_byname.3",
    "content": ".TH PCRE2_SUBSTRING_COPY_BYNAME 3 \"19 December 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_substring_copy_byname(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP, PCRE2_UCHAR *\\fIbuffer\\fP, PCRE2_SIZE *\\fIbufflen\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis is a convenience function for extracting a captured substring, identified\nby name, into a given buffer. The arguments are:\n.sp\n  \\fImatch_data\\fP    The match data block for the match\n  \\fIname\\fP          Name of the required substring\n  \\fIbuffer\\fP        Buffer to receive the string\n  \\fIbufflen\\fP       Length of buffer (code units)\n.sp\nThe \\fIbufflen\\fP variable is updated to contain the length of the extracted\nstring, excluding the trailing zero. The yield of the function is zero for\nsuccess or one of the following error numbers:\n.sp\n  PCRE2_ERROR_NOSUBSTRING   there are no groups of that name\n  PCRE2_ERROR_UNAVAILBLE    the ovector was too small for that group\n  PCRE2_ERROR_UNSET         the group did not participate in the match\n  PCRE2_ERROR_NOMEMORY      the buffer is not big enough\n.sp\nIf there is more than one group with the given name, the first one that is set\nis returned. In this situation PCRE2_ERROR_UNSET means that no group with the\ngiven name was set.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_substring_copy_bynumber.3",
    "content": ".TH PCRE2_SUBSTRING_COPY_BYNUMBER 3 \"13 December 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_substring_copy_bynumber(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  uint32_t \\fInumber\\fP, PCRE2_UCHAR *\\fIbuffer\\fP,\"\n.B \"  PCRE2_SIZE *\\fIbufflen\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis is a convenience function for extracting a captured substring into a given\nbuffer. The arguments are:\n.sp\n  \\fImatch_data\\fP    The match data block for the match\n  \\fInumber\\fP        Number of the required substring\n  \\fIbuffer\\fP        Buffer to receive the string\n  \\fIbufflen\\fP       Length of buffer\n.sp\nThe \\fIbufflen\\fP variable is updated with the length of the extracted string,\nexcluding the terminating zero. The yield of the function is zero for success\nor one of the following error numbers:\n.sp\n  PCRE2_ERROR_NOSUBSTRING   there are no groups of that number\n  PCRE2_ERROR_UNAVAILBLE    the ovector was too small for that group\n  PCRE2_ERROR_UNSET         the group did not participate in the match\n  PCRE2_ERROR_NOMEMORY      the buffer is too small\n.sp\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_substring_free.3",
    "content": ".TH PCRE2_SUBSTRING_FREE 3 \"26 February 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_substring_free(PCRE2_UCHAR *\\fIbuffer\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis is a convenience function for freeing the memory obtained by a previous\ncall to \\fBpcre2_substring_get_byname()\\fP or\n\\fBpcre2_substring_get_bynumber()\\fP. Its only argument is a pointer to the\nstring. If the argument is NULL, the function does nothing.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_substring_get_byname.3",
    "content": ".TH PCRE2_SUBSTRING_GET_BYNAME 3 \"19 December 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_substring_get_byname(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP, PCRE2_UCHAR **\\fIbufferptr\\fP, PCRE2_SIZE *\\fIbufflen\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis is a convenience function for extracting a captured substring by name into\nnewly acquired memory. The arguments are:\n.sp\n  \\fImatch_data\\fP    The match data for the match\n  \\fIname\\fP          Name of the required substring\n  \\fIbufferptr\\fP     Where to put the string pointer\n  \\fIbufflen\\fP       Where to put the string length\n.sp\nThe memory in which the substring is placed is obtained by calling the same\nmemory allocation function that was used for the match data block. The\nconvenience function \\fBpcre2_substring_free()\\fP can be used to free it when\nit is no longer needed. The yield of the function is zero for success or one of\nthe following error numbers:\n.sp\n  PCRE2_ERROR_NOSUBSTRING   there are no groups of that name\n  PCRE2_ERROR_UNAVAILBLE    the ovector was too small for that group\n  PCRE2_ERROR_UNSET         the group did not participate in the match\n  PCRE2_ERROR_NOMEMORY      memory could not be obtained\n.sp\nIf there is more than one group with the given name, the first one that is set\nis returned. In this situation PCRE2_ERROR_UNSET means that no group with the\ngiven name was set.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_substring_get_bynumber.3",
    "content": ".TH PCRE2_SUBSTRING_GET_BYNUMBER 3 \"13 December 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_substring_get_bynumber(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  uint32_t \\fInumber\\fP, PCRE2_UCHAR **\\fIbufferptr\\fP, PCRE2_SIZE *\\fIbufflen\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis is a convenience function for extracting a captured substring by number\ninto newly acquired memory. The arguments are:\n.sp\n  \\fImatch_data\\fP    The match data for the match\n  \\fInumber\\fP        Number of the required substring\n  \\fIbufferptr\\fP     Where to put the string pointer\n  \\fIbufflen\\fP       Where to put the string length\n.sp\nThe memory in which the substring is placed is obtained by calling the same\nmemory allocation function that was used for the match data block. The\nconvenience function \\fBpcre2_substring_free()\\fP can be used to free it when\nit is no longer needed. The yield of the function is zero for success or one of\nthe following error numbers:\n.sp\n  PCRE2_ERROR_NOSUBSTRING   there are no groups of that number\n  PCRE2_ERROR_UNAVAILBLE    the ovector was too small for that group\n  PCRE2_ERROR_UNSET         the group did not participate in the match\n  PCRE2_ERROR_NOMEMORY      memory could not be obtained\n.sp\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_substring_length_byname.3",
    "content": ".TH PCRE2_SUBSTRING_LENGTH_BYNAME 3 \"26 September 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_substring_length_byname(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP, PCRE2_SIZE *\\fIlength\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function returns the length of a matched substring, identified by name.\nThe arguments are:\n.sp\n  \\fImatch_data\\fP   The match data block for the match\n  \\fIname\\fP         The substring name\n  \\fIlength\\fP       Where to return the length, or NULL\n.sp\nThe third argument may be NULL if all you want to know is whether or not a\nsubstring is set. The yield is zero on success, or a negative error code\notherwise.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_substring_length_bynumber.3",
    "content": ".TH PCRE2_SUBSTRING_LENGTH_BYNUMBER 3 \"22 December 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_substring_length_bynumber(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  uint32_t \\fInumber\\fP, PCRE2_SIZE *\\fIlength\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis function returns the length of a matched substring, identified by number.\nThe arguments are:\n.sp\n  \\fImatch_data\\fP   The match data block for the match\n  \\fInumber\\fP       The substring number\n  \\fIlength\\fP       Where to return the length, or NULL\n.sp\nThe third argument may be NULL if all you want to know is whether or not a\nsubstring is set. The yield is zero on success, or a negative error code\notherwise. After a partial match, only substring 0 is available.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_substring_list_free.3",
    "content": ".TH PCRE2_SUBSTRING_LIST_FREE 3 \"26 February 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B void pcre2_substring_list_free(PCRE2_UCHAR **\\fIlist\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis is a convenience function for freeing the store obtained by a previous\ncall to \\fBpcre2substring_list_get()\\fP. Its only argument is a pointer to\nthe list of string pointers. If the argument is NULL, the function returns\nimmediately, without doing anything.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_substring_list_get.3",
    "content": ".TH PCRE2_SUBSTRING_LIST_GET 3 \"21 October 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_substring_list_get(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_UCHAR ***\\fIlistptr\\fP, PCRE2_SIZE **\\fIlengthsptr\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis is a convenience function for extracting all the captured substrings after\na pattern match. It builds a list of pointers to the strings, and (optionally)\na second list that contains their lengths (in code units), excluding a\nterminating zero that is added to each of them. All this is done in a single\nblock of memory that is obtained using the same memory allocation function that\nwas used to get the match data block. The convenience function\n\\fBpcre2_substring_list_free()\\fP can be used to free it when it is no longer\nneeded. The arguments are:\n.sp\n  \\fImatch_data\\fP    The match data block\n  \\fIlistptr\\fP       Where to put a pointer to the list\n  \\fIlengthsptr\\fP    Where to put a pointer to the lengths, or NULL\n.sp\nA pointer to a list of pointers is put in the variable whose address is in\n\\fIlistptr\\fP. The list is terminated by a NULL pointer. If \\fIlengthsptr\\fP is\nnot NULL, a matching list of lengths is created, and its address is placed in\n\\fIlengthsptr\\fP. The yield of the function is zero on success or\nPCRE2_ERROR_NOMEMORY if sufficient memory could not be obtained.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_substring_nametable_scan.3",
    "content": ".TH PCRE2_SUBSTRING_NAMETABLE_SCAN 3 \"06 February 2019\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_substring_nametable_scan(const pcre2_code *\\fIcode\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP, PCRE2_SPTR *\\fIfirst\\fP, PCRE2_SPTR *\\fIlast\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis convenience function finds, for a compiled pattern, the first and last\nentries for a given name in the table that translates capture group names into\nnumbers.\n.sp\n  \\fIcode\\fP    Compiled regular expression\n  \\fIname\\fP    Name whose entries required\n  \\fIfirst\\fP   Where to return a pointer to the first entry\n  \\fIlast\\fP    Where to return a pointer to the last entry\n.sp\nWhen the name is found in the table, if \\fIfirst\\fP is NULL, the function\nreturns a group number, but if there is more than one matching entry, it is not\ndefined which one. Otherwise, when both pointers have been set, the yield of\nthe function is the length of each entry in code units. If the name is not\nfound, PCRE2_ERROR_NOSUBSTRING is returned.\n.P\nThere is a complete description of the PCRE2 native API, including the format of\nthe table entries, in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage, and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2_substring_number_from_name.3",
    "content": ".TH PCRE2_SUBSTRING_NUMBER_FROM_NAME 3 \"03 November 2014\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int pcre2_substring_number_from_name(const pcre2_code *\\fIcode\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis convenience function finds the number of a named substring capturing\nparenthesis in a compiled pattern, provided that it is a unique name. The\nfunction arguments are:\n.sp\n  \\fIcode\\fP    Compiled regular expression\n  \\fIname\\fP    Name whose number is required\n.sp\nThe yield of the function is the number of the parenthesis if the name is\nfound, or PCRE2_ERROR_NOSUBSTRING if it is not found. When duplicate names are\nallowed (PCRE2_DUPNAMES is set), if the name is not unique,\nPCRE2_ERROR_NOUNIQUESUBSTRING is returned. You can obtain the list of numbers\nwith the same name by calling \\fBpcre2_substring_nametable_scan()\\fP.\n.P\nThere is a complete description of the PCRE2 native API in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage and a description of the POSIX API in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\npage.\n"
  },
  {
    "path": "doc/pcre2api.3",
    "content": ".TH PCRE2API 3 \"29 October 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.sp\n.B #include <pcre2.h>\n.sp\nPCRE2 is a new API for PCRE, starting at release 10.0. This document contains a\ndescription of all its native functions. See the\n.\\\" HREF\n\\fBpcre2\\fP\n.\\\"\ndocument for an overview of all the PCRE2 documentation.\n.\n.\n.SH \"PCRE2 NATIVE API BASIC FUNCTIONS\"\n.rs\n.sp\n.nf\n.B pcre2_code *pcre2_compile(PCRE2_SPTR \\fIpattern\\fP, PCRE2_SIZE \\fIlength\\fP,\n.B \"  uint32_t \\fIoptions\\fP, int *\\fIerrorcode\\fP, PCRE2_SIZE *\\fIerroroffset,\\fP\"\n.B \"  pcre2_compile_context *\\fIccontext\\fP);\"\n.sp\n.B void pcre2_code_free(pcre2_code *\\fIcode\\fP);\n.sp\n.B pcre2_match_data *pcre2_match_data_create(uint32_t \\fIovecsize\\fP,\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B pcre2_match_data *pcre2_match_data_create_from_pattern(\n.B \"  const pcre2_code *\\fIcode\\fP, pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B int pcre2_match(const pcre2_code *\\fIcode\\fP, PCRE2_SPTR \\fIsubject\\fP,\n.B \"  PCRE2_SIZE \\fIlength\\fP, PCRE2_SIZE \\fIstartoffset\\fP,\"\n.B \"  uint32_t \\fIoptions\\fP, pcre2_match_data *\\fImatch_data\\fP,\"\n.B \"  pcre2_match_context *\\fImcontext\\fP);\"\n.sp\n.B int pcre2_dfa_match(const pcre2_code *\\fIcode\\fP, PCRE2_SPTR \\fIsubject\\fP,\n.B \"  PCRE2_SIZE \\fIlength\\fP, PCRE2_SIZE \\fIstartoffset\\fP,\"\n.B \"  uint32_t \\fIoptions\\fP, pcre2_match_data *\\fImatch_data\\fP,\"\n.B \"  pcre2_match_context *\\fImcontext\\fP,\"\n.B \"  int *\\fIworkspace\\fP, PCRE2_SIZE \\fIwscount\\fP);\"\n.sp\n.B void pcre2_match_data_free(pcre2_match_data *\\fImatch_data\\fP);\n.fi\n.\n.\n.SH \"PCRE2 NATIVE API AUXILIARY MATCH FUNCTIONS\"\n.rs\n.sp\n.nf\n.B PCRE2_SPTR pcre2_get_mark(pcre2_match_data *\\fImatch_data\\fP);\n.sp\n.B PCRE2_SIZE pcre2_get_match_data_size(pcre2_match_data *\\fImatch_data\\fP);\n.sp\n.B PCRE2_SIZE pcre2_get_match_data_heapframes_size(\n.B \"  pcre2_match_data *\\fImatch_data\\fP);\"\n.sp\n.B uint32_t pcre2_get_ovector_count(pcre2_match_data *\\fImatch_data\\fP);\n.sp\n.B PCRE2_SIZE *pcre2_get_ovector_pointer(pcre2_match_data *\\fImatch_data\\fP);\n.sp\n.B PCRE2_SIZE pcre2_get_startchar(pcre2_match_data *\\fImatch_data\\fP);\n.fi\n.\n.\n.SH \"PCRE2 NATIVE API GENERAL CONTEXT FUNCTIONS\"\n.rs\n.sp\n.nf\n.B pcre2_general_context *pcre2_general_context_create(\n.B \"  void *(*\\fIprivate_malloc\\fP)(PCRE2_SIZE, void *),\"\n.B \"  void (*\\fIprivate_free\\fP)(void *, void *), void *\\fImemory_data\\fP);\"\n.sp\n.B pcre2_general_context *pcre2_general_context_copy(\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B void pcre2_general_context_free(pcre2_general_context *\\fIgcontext\\fP);\n.fi\n.\n.\n.SH \"PCRE2 NATIVE API COMPILE CONTEXT FUNCTIONS\"\n.rs\n.sp\n.nf\n.B pcre2_compile_context *pcre2_compile_context_create(\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B pcre2_compile_context *pcre2_compile_context_copy(\n.B \"  pcre2_compile_context *\\fIccontext\\fP);\"\n.sp\n.B void pcre2_compile_context_free(pcre2_compile_context *\\fIccontext\\fP);\n.sp\n.B int pcre2_set_bsr(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.sp\n.B int pcre2_set_character_tables(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  const uint8_t *\\fItables\\fP);\"\n.sp\n.B int pcre2_set_compile_extra_options(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIextra_options\\fP);\"\n.sp\n.B int pcre2_set_max_pattern_length(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  PCRE2_SIZE \\fIvalue\\fP);\"\n.sp\n.B int pcre2_set_max_pattern_compiled_length(\n.B \"  pcre2_compile_context *\\fIccontext\\fP, PCRE2_SIZE \\fIvalue\\fP);\"\n.sp\n.B int pcre2_set_max_varlookbehind(pcre2_compile_contest *\\fIccontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.sp\n.B int pcre2_set_newline(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.sp\n.B int pcre2_set_parens_nest_limit(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.sp\n.B int pcre2_set_compile_recursion_guard(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  int (*\\fIguard_function\\fP)(uint32_t, void *), void *\\fIuser_data\\fP);\"\n.sp\n.B int pcre2_set_optimize(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIdirective\\fP);\"\n.fi\n.\n.\n.SH \"PCRE2 NATIVE API MATCH CONTEXT FUNCTIONS\"\n.rs\n.sp\n.nf\n.B pcre2_match_context *pcre2_match_context_create(\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B pcre2_match_context *pcre2_match_context_copy(\n.B \"  pcre2_match_context *\\fImcontext\\fP);\"\n.sp\n.B void pcre2_match_context_free(pcre2_match_context *\\fImcontext\\fP);\n.sp\n.B int pcre2_set_callout(pcre2_match_context *\\fImcontext\\fP,\n.B \"  int (*\\fIcallout_function\\fP)(pcre2_callout_block *, void *),\"\n.B \"  void *\\fIcallout_data\\fP);\"\n.sp\n.B int pcre2_set_substitute_callout(pcre2_match_context *\\fImcontext\\fP,\n.B \"  int (*\\fIcallout_function\\fP)(pcre2_substitute_callout_block *, void *),\"\n.B \"  void *\\fIcallout_data\\fP);\"\n.sp\n.B int pcre2_set_substitute_case_callout(pcre2_match_context *\\fImcontext\\fP,\n.B \"  PCRE2_SIZE (*\\fIcallout_function\\fP)(PCRE2_SPTR, PCRE2_SIZE,\"\n.B \"                                 PCRE2_UCHAR *, PCRE2_SIZE,\"\n.B \"                                 int, void *),\"\n.B \"  void *\\fIcallout_data\\fP);\"\n.sp\n.B int pcre2_set_offset_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  PCRE2_SIZE \\fIvalue\\fP);\"\n.sp\n.B int pcre2_set_heap_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.sp\n.B int pcre2_set_match_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.sp\n.B int pcre2_set_depth_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.\n.\n.SH \"PCRE2 NATIVE API STRING EXTRACTION FUNCTIONS\"\n.rs\n.sp\n.nf\n.B int pcre2_substring_copy_byname(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP, PCRE2_UCHAR *\\fIbuffer\\fP, PCRE2_SIZE *\\fIbufflen\\fP);\"\n.sp\n.B int pcre2_substring_copy_bynumber(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  uint32_t \\fInumber\\fP, PCRE2_UCHAR *\\fIbuffer\\fP,\"\n.B \"  PCRE2_SIZE *\\fIbufflen\\fP);\"\n.sp\n.B void pcre2_substring_free(PCRE2_UCHAR *\\fIbuffer\\fP);\n.sp\n.B int pcre2_substring_get_byname(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP, PCRE2_UCHAR **\\fIbufferptr\\fP, PCRE2_SIZE *\\fIbufflen\\fP);\"\n.sp\n.B int pcre2_substring_get_bynumber(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  uint32_t \\fInumber\\fP, PCRE2_UCHAR **\\fIbufferptr\\fP,\"\n.B \"  PCRE2_SIZE *\\fIbufflen\\fP);\"\n.sp\n.B int pcre2_substring_length_byname(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP, PCRE2_SIZE *\\fIlength\\fP);\"\n.sp\n.B int pcre2_substring_length_bynumber(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  uint32_t \\fInumber\\fP, PCRE2_SIZE *\\fIlength\\fP);\"\n.sp\n.B int pcre2_substring_nametable_scan(const pcre2_code *\\fIcode\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP, PCRE2_SPTR *\\fIfirst\\fP, PCRE2_SPTR *\\fIlast\\fP);\"\n.sp\n.B int pcre2_substring_number_from_name(const pcre2_code *\\fIcode\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP);\"\n.sp\n.B void pcre2_substring_list_free(PCRE2_UCHAR **\\fIlist\\fP);\n.sp\n.B int pcre2_substring_list_get(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_UCHAR ***\\fIlistptr\\fP, PCRE2_SIZE **\\fIlengthsptr\\fP);\"\n.fi\n.\n.\n.SH \"PCRE2 NATIVE API STRING SUBSTITUTION FUNCTION\"\n.rs\n.sp\n.nf\n.B int pcre2_substitute(const pcre2_code *\\fIcode\\fP, PCRE2_SPTR \\fIsubject\\fP,\n.B \"  PCRE2_SIZE \\fIlength\\fP, PCRE2_SIZE \\fIstartoffset\\fP,\"\n.B \"  uint32_t \\fIoptions\\fP, pcre2_match_data *\\fImatch_data\\fP,\"\n.B \"  pcre2_match_context *\\fImcontext\\fP, PCRE2_SPTR \\fIreplacement\\fP,\"\n.B \"  PCRE2_SIZE \\fIrlength\\fP, PCRE2_UCHAR *\\fIoutputbuffer\\fP,\"\n.B \"  PCRE2_SIZE *\\fIoutlengthptr\\fP);\"\n.fi\n.\n.\n.SH \"PCRE2 NATIVE API JIT FUNCTIONS\"\n.rs\n.sp\n.nf\n.B int pcre2_jit_compile(pcre2_code *\\fIcode\\fP, uint32_t \\fIoptions\\fP);\n.sp\n.B int pcre2_jit_match(const pcre2_code *\\fIcode\\fP, PCRE2_SPTR \\fIsubject\\fP,\n.B \"  PCRE2_SIZE \\fIlength\\fP, PCRE2_SIZE \\fIstartoffset\\fP,\"\n.B \"  uint32_t \\fIoptions\\fP, pcre2_match_data *\\fImatch_data\\fP,\"\n.B \"  pcre2_match_context *\\fImcontext\\fP);\"\n.sp\n.B void pcre2_jit_free_unused_memory(pcre2_general_context *\\fIgcontext\\fP);\n.sp\n.B pcre2_jit_stack *pcre2_jit_stack_create(size_t \\fIstartsize\\fP,\n.B \"  size_t \\fImaxsize\\fP, pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B void pcre2_jit_stack_assign(pcre2_match_context *\\fImcontext\\fP,\n.B \"  pcre2_jit_callback \\fIcallback_function\\fP, void *\\fIcallback_data\\fP);\"\n.sp\n.B void pcre2_jit_stack_free(pcre2_jit_stack *\\fIjit_stack\\fP);\n.fi\n.\n.\n.SH \"PCRE2 NATIVE API SERIALIZATION FUNCTIONS\"\n.rs\n.sp\n.nf\n.B int32_t pcre2_serialize_decode(pcre2_code **\\fIcodes\\fP,\n.B \"  int32_t \\fInumber_of_codes\\fP, const uint8_t *\\fIbytes\\fP,\"\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B int32_t pcre2_serialize_encode(const pcre2_code **\\fIcodes\\fP,\n.B \"  int32_t \\fInumber_of_codes\\fP, uint8_t **\\fIserialized_bytes\\fP,\"\n.B \"  PCRE2_SIZE *\\fIserialized_size\\fP, pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B void pcre2_serialize_free(uint8_t *\\fIbytes\\fP);\n.sp\n.B int32_t pcre2_serialize_get_number_of_codes(const uint8_t *\\fIbytes\\fP);\n.fi\n.\n.\n.SH \"PCRE2 NATIVE API AUXILIARY FUNCTIONS\"\n.rs\n.sp\n.nf\n.B pcre2_code *pcre2_code_copy(const pcre2_code *\\fIcode\\fP);\n.sp\n.B pcre2_code *pcre2_code_copy_with_tables(const pcre2_code *\\fIcode\\fP);\n.sp\n.B int pcre2_get_error_message(int \\fIerrorcode\\fP, PCRE2_UCHAR *\\fIbuffer\\fP,\n.B \"  PCRE2_SIZE \\fIbufflen\\fP);\"\n.sp\n.B const uint8_t *pcre2_maketables(pcre2_general_context *\\fIgcontext\\fP);\n.sp\n.B void pcre2_maketables_free(pcre2_general_context *\\fIgcontext\\fP,\n.B \"  const uint8_t *\\fItables\\fP);\"\n.sp\n.B int pcre2_pattern_info(const pcre2_code *\\fIcode\\fP, uint32_t \\fIwhat\\fP,\n.B \"  void *\\fIwhere\\fP);\"\n.sp\n.B int pcre2_callout_enumerate(const pcre2_code *\\fIcode\\fP,\n.B \"  int (*\\fIcallback\\fP)(pcre2_callout_enumerate_block *, void *),\"\n.B \"  void *\\fIuser_data\\fP);\"\n.sp\n.B int pcre2_config(uint32_t \\fIwhat\\fP, void *\\fIwhere\\fP);\n.fi\n.\n.\n.SH \"PCRE2 NATIVE API OBSOLETE FUNCTIONS\"\n.rs\n.sp\n.nf\n.B int pcre2_set_recursion_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.sp\n.B int pcre2_set_recursion_memory_management(\n.B \"  pcre2_match_context *\\fImcontext\\fP,\"\n.B \"  void *(*\\fIprivate_malloc\\fP)(size_t, void *),\"\n.B \"  void (*\\fIprivate_free\\fP)(void *, void *), void *\\fImemory_data\\fP);\"\n.fi\n.sp\nThese functions became obsolete at release 10.30 and are retained only for\nbackward compatibility. They should not be used in new code. The first is\nreplaced by \\fBpcre2_set_depth_limit()\\fP; the second is no longer needed and\nhas no effect (it always returns zero).\n.\n.\n.SH \"PCRE2 EXPERIMENTAL PATTERN CONVERSION FUNCTIONS\"\n.rs\n.sp\n.nf\n.B pcre2_convert_context *pcre2_convert_context_create(\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B pcre2_convert_context *pcre2_convert_context_copy(\n.B \"  pcre2_convert_context *\\fIcvcontext\\fP);\"\n.sp\n.B void pcre2_convert_context_free(pcre2_convert_context *\\fIcvcontext\\fP);\n.sp\n.B int pcre2_set_glob_escape(pcre2_convert_context *\\fIcvcontext\\fP,\n.B \"  uint32_t \\fIescape_char\\fP);\"\n.sp\n.B int pcre2_set_glob_separator(pcre2_convert_context *\\fIcvcontext\\fP,\n.B \"  uint32_t \\fIseparator_char\\fP);\"\n.sp\n.B int pcre2_pattern_convert(PCRE2_SPTR \\fIpattern\\fP, PCRE2_SIZE \\fIlength\\fP,\n.B \"  uint32_t \\fIoptions\\fP, PCRE2_UCHAR **\\fIbuffer\\fP,\"\n.B \"  PCRE2_SIZE *\\fIblength\\fP, pcre2_convert_context *\\fIcvcontext\\fP);\"\n.sp\n.B void pcre2_converted_pattern_free(PCRE2_UCHAR *\\fIconverted_pattern\\fP);\n.fi\n.sp\nThese functions provide a way of converting non-PCRE2 patterns into\npatterns that can be processed by \\fBpcre2_compile()\\fP. This facility is\nexperimental and may be changed in future releases. At present, \"globs\" and\nPOSIX basic and extended patterns can be converted. Details are given in the\n.\\\" HREF\n\\fBpcre2convert\\fP\n.\\\"\ndocumentation.\n.\n.\n.SH \"PCRE2 8-BIT, 16-BIT, AND 32-BIT LIBRARIES\"\n.rs\n.sp\nThere are three PCRE2 libraries, supporting 8-bit, 16-bit, and 32-bit code\nunits, respectively. However, there is just one header file, \\fBpcre2.h\\fP.\nThis contains the function prototypes and other definitions for all three\nlibraries. One, two, or all three can be installed simultaneously. On Unix-like\nsystems the libraries are called \\fBlibpcre2-8\\fP, \\fBlibpcre2-16\\fP, and\n\\fBlibpcre2-32\\fP, and they can also co-exist with the original PCRE libraries.\nEvery PCRE2 function comes in three different forms, one for each library, for\nexample:\n.sp\n  \\fBpcre2_compile_8()\\fP\n  \\fBpcre2_compile_16()\\fP\n  \\fBpcre2_compile_32()\\fP\n.sp\nThere are also three different sets of data types:\n.sp\n  \\fBPCRE2_UCHAR8, PCRE2_UCHAR16, PCRE2_UCHAR32\\fP\n  \\fBPCRE2_SPTR8,  PCRE2_SPTR16,  PCRE2_SPTR32\\fP\n.sp\nThe UCHAR types define unsigned code units of the appropriate widths.\nFor example, PCRE2_UCHAR16 is usually defined as `uint16_t'.\nThe SPTR types are pointers to constants of the equivalent UCHAR types,\nthat is, they are pointers to vectors of unsigned code units.\n.P\nCharacter strings are passed to a PCRE2 library as sequences of unsigned\nintegers in code units of the appropriate width. The length of a string may\nbe given as a number of code units, or the string may be specified as\nzero-terminated.\n.P\nMany applications use only one code unit width. For their convenience, macros\nare defined whose names are the generic forms such as \\fBpcre2_compile()\\fP and\nPCRE2_SPTR. These macros use the value of the macro PCRE2_CODE_UNIT_WIDTH to\ngenerate the appropriate width-specific function and macro names.\nPCRE2_CODE_UNIT_WIDTH is not defined by default. An application must define it\nto be 8, 16, or 32 before including \\fBpcre2.h\\fP in order to make use of the\ngeneric names.\n.P\nApplications that use more than one code unit width can be linked with more\nthan one PCRE2 library, but must define PCRE2_CODE_UNIT_WIDTH to be 0 before\nincluding \\fBpcre2.h\\fP, and then use the real function names. Any code that is\nto be included in an environment where the value of PCRE2_CODE_UNIT_WIDTH is\nunknown should also use the real function names. (Unfortunately, it is not\npossible in C code to save and restore the value of a macro.)\n.P\nIf PCRE2_CODE_UNIT_WIDTH is not defined before including \\fBpcre2.h\\fP, a\ncompiler error occurs.\n.P\nWhen using multiple libraries in an application, you must take care when\nprocessing any particular pattern to use only functions from a single library.\nFor example, if you want to run a match using a pattern that was compiled with\n\\fBpcre2_compile_16()\\fP, you must do so with \\fBpcre2_match_16()\\fP, not\n\\fBpcre2_match_8()\\fP or \\fBpcre2_match_32()\\fP.\n.P\nIn the function summaries above, and in the rest of this document and other\nPCRE2 documents, functions and data types are described using their generic\nnames, without the _8, _16, or _32 suffix.\n.\n.\n.SH \"PCRE2 API OVERVIEW\"\n.rs\n.sp\nPCRE2 has its own native API, which is described in this document. There are\nalso some wrapper functions for the 8-bit library that correspond to the\nPOSIX regular expression API, but they do not give access to all the\nfunctionality of PCRE2 and they are not thread-safe. They are described in the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\ndocumentation. Both these APIs define a set of C function calls.\n.P\nThe native API C data types, function prototypes, option values, and error\ncodes are defined in the header file \\fBpcre2.h\\fP, which also contains\ndefinitions of PCRE2_MAJOR and PCRE2_MINOR, the major and minor release numbers\nfor the library. Applications can use these to include support for different\nreleases of PCRE2.\n.P\nIn a Windows environment, if you want to statically link an application program\nagainst a non-dll PCRE2 library, you must define PCRE2_STATIC before including\n\\fBpcre2.h\\fP.\n.P\nThe functions \\fBpcre2_compile()\\fP and \\fBpcre2_match()\\fP are used for\ncompiling and matching regular expressions in a Perl-compatible manner. A\nsample program that demonstrates the simplest way of using them is provided in\nthe file called \\fIpcre2demo.c\\fP in the PCRE2 source distribution. A listing\nof this program is given in the\n.\\\" HREF\n\\fBpcre2demo\\fP\n.\\\"\ndocumentation, and the\n.\\\" HREF\n\\fBpcre2sample\\fP\n.\\\"\ndocumentation describes how to compile and run it.\n.P\nThe compiling and matching functions recognize various options that are passed\nas bits in an options argument. There are also some more complicated parameters\nsuch as custom memory management functions and resource limits that are passed\nin \"contexts\" (which are just memory blocks, described below). Simple\napplications do not need to make use of contexts.\n.P\nJust-in-time (JIT) compiler support is an optional feature of PCRE2 that can be\nbuilt in appropriate hardware environments. It greatly speeds up the matching\nperformance of many patterns. Programs can request that it be used if\navailable by calling \\fBpcre2_jit_compile()\\fP after a pattern has been\nsuccessfully compiled by \\fBpcre2_compile()\\fP. This does nothing if JIT\nsupport is not available.\n.P\nMore complicated programs might need to make use of the specialist functions\n\\fBpcre2_jit_stack_create()\\fP, \\fBpcre2_jit_stack_free()\\fP, and\n\\fBpcre2_jit_stack_assign()\\fP in order to control the JIT code's memory usage.\n.P\nJIT matching is automatically used by \\fBpcre2_match()\\fP if it is available,\nunless the PCRE2_NO_JIT option is set. There is also a direct interface for JIT\nmatching, which gives improved performance at the expense of less sanity\nchecking. The JIT-specific functions are discussed in the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\ndocumentation.\n.P\nA second matching function, \\fBpcre2_dfa_match()\\fP, which is not\nPerl-compatible, is also provided. This uses a different algorithm for the\nmatching. The alternative algorithm finds all possible matches (at a given\npoint in the subject), and scans the subject just once (unless there are\nlookaround assertions). However, this algorithm does not return captured\nsubstrings. A description of the two matching algorithms and their advantages\nand disadvantages is given in the\n.\\\" HREF\n\\fBpcre2matching\\fP\n.\\\"\ndocumentation. There is no JIT support for \\fBpcre2_dfa_match()\\fP.\n.P\nIn addition to the main compiling and matching functions, there are convenience\nfunctions for extracting captured substrings from a subject string that has\nbeen matched by \\fBpcre2_match()\\fP. They are:\n.sp\n  \\fBpcre2_substring_copy_byname()\\fP\n  \\fBpcre2_substring_copy_bynumber()\\fP\n  \\fBpcre2_substring_get_byname()\\fP\n  \\fBpcre2_substring_get_bynumber()\\fP\n  \\fBpcre2_substring_list_get()\\fP\n  \\fBpcre2_substring_length_byname()\\fP\n  \\fBpcre2_substring_length_bynumber()\\fP\n  \\fBpcre2_substring_nametable_scan()\\fP\n  \\fBpcre2_substring_number_from_name()\\fP\n.sp\n\\fBpcre2_substring_free()\\fP and \\fBpcre2_substring_list_free()\\fP are also\nprovided, to free memory used for extracted strings. If either of these\nfunctions is called with a NULL argument, the function returns immediately\nwithout doing anything.\n.P\nThe function \\fBpcre2_substitute()\\fP can be called to match a pattern and\nreturn a copy of the subject string with substitutions for parts that were\nmatched.\n.P\nFunctions whose names begin with \\fBpcre2_serialize_\\fP are used for saving\ncompiled patterns on disc or elsewhere, and reloading them later.\n.P\nFinally, there are functions for finding out information about a compiled\npattern (\\fBpcre2_pattern_info()\\fP) and about the configuration with which\nPCRE2 was built (\\fBpcre2_config()\\fP) and that it is using.\n.P\nFunctions with names ending with \\fB_free()\\fP are used for freeing memory\nblocks of various sorts. In all cases, if one of these functions is called with\na NULL argument, it does nothing.\n.\n.\n.SH \"STRING LENGTHS AND OFFSETS\"\n.rs\n.sp\nThe PCRE2 API uses string lengths and offsets into strings of code units in\nseveral places. These values are always of type PCRE2_SIZE, which is an\nunsigned integer type, currently always defined as \\fIsize_t\\fP. The largest\nvalue that can be stored in such a type (that is ~(PCRE2_SIZE)0) is reserved\nas a special indicator for zero-terminated strings and unset offsets.\nTherefore, the longest string that can be handled is one less than this\nmaximum. Note that string lengths are always given in code units. Only in the\n8-bit library is such a length the same as the number of bytes in the string.\n.\n.\n.\\\" HTML <a name=\"newlines\"></a>\n.SH NEWLINES\n.rs\n.sp\nPCRE2 supports five different conventions for indicating line breaks in\nstrings: a single CR (carriage return) character, a single LF (linefeed)\ncharacter, the two-character sequence CRLF, any of the three preceding, or any\nUnicode newline sequence. The Unicode newline sequences are the three just\nmentioned, plus the single characters VT (vertical tab, U+000B), FF (form feed,\nU+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS\n(paragraph separator, U+2029).\n.P\nEach of the first three conventions is used by at least one operating system as\nits standard newline sequence. When PCRE2 is built, a default can be specified.\nIf it is not, the default is set to LF, which is the Unix standard. However,\nthe newline convention can be changed by an application when calling\n\\fBpcre2_compile()\\fP, or it can be specified by special text at the start of\nthe pattern itself; this overrides any other settings. See the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\npage for details of the special character sequences.\n.P\nIn the PCRE2 documentation the word \"newline\" is used to mean \"the character or\npair of characters that indicate a line break\". The choice of newline\nconvention affects the handling of the dot, circumflex, and dollar\nmetacharacters, the handling of #-comments in /x mode, and, when CRLF is a\nrecognized line ending sequence, the match position advancement for a\nnon-anchored pattern. There is more detail about this in the\n.\\\" HTML <a href=\"#matchoptions\">\n.\\\" </a>\nsection on \\fBpcre2_match()\\fP options\n.\\\"\nbelow.\n.P\nThe choice of newline convention does not affect the interpretation of\nthe \\en or \\er escape sequences, nor does it affect what \\eR matches; this has\nits own separate convention.\n.\n.\n.SH MULTITHREADING\n.rs\n.sp\nIn a multithreaded application it is important to keep thread-specific data\nseparate from data that can be shared between threads. The PCRE2 library code\nitself is thread-safe: it contains no static or global variables. The API is\ndesigned to be fairly simple for non-threaded applications while at the same\ntime ensuring that multithreaded applications can use it.\n.P\nThere are several different blocks of data that are used to pass information\nbetween the application and the PCRE2 libraries.\n.\n.\n.SS \"The compiled pattern\"\n.rs\n.sp\nA pointer to the compiled form of a pattern is returned to the user when\n\\fBpcre2_compile()\\fP is successful. The data in the compiled pattern is fixed,\nand does not change when the pattern is matched. Therefore, it is thread-safe,\nthat is, the same compiled pattern can be used by more than one thread\nsimultaneously. For example, an application can compile all its patterns at the\nstart, before forking off multiple threads that use them. However, if the\njust-in-time (JIT) optimization feature is being used, it needs separate memory\nstack areas for each thread. See the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\ndocumentation for more details.\n.P\nIn a more complicated situation, where patterns are compiled only when they are\nfirst needed, but are still shared between threads, pointers to compiled\npatterns must be protected from simultaneous writing by multiple threads. This\nis somewhat tricky to do correctly. If you know that writing to a pointer is\natomic in your environment, you can use logic like this:\n.sp\n  Get a read-only (shared) lock (mutex) for pointer\n  if (pointer == NULL)\n    {\n    Get a write (unique) lock for pointer\n    if (pointer == NULL) pointer = pcre2_compile(...\n    }\n  Release the lock\n  Use pointer in pcre2_match()\n.sp\nOf course, testing for compilation errors should also be included in the code.\n.P\nThe reason for checking the pointer a second time is as follows: Several\nthreads may have acquired the shared lock and tested the pointer for being\nNULL, but only one of them will be given the write lock, with the rest kept\nwaiting. The winning thread will compile the pattern and store the result.\nAfter this thread releases the write lock, another thread will get it, and if\nit does not retest pointer for being NULL, will recompile the pattern and\noverwrite the pointer, creating a memory leak and possibly causing other\nissues.\n.P\nIn an environment where writing to a pointer may not be atomic, the above logic\nis not sufficient. The thread that is doing the compiling may be descheduled\nafter writing only part of the pointer, which could cause other threads to use\nan invalid value. Instead of checking the pointer itself, a separate \"pointer\nis valid\" flag (that can be updated atomically) must be used:\n.sp\n  Get a read-only (shared) lock (mutex) for pointer\n  if (!pointer_is_valid)\n    {\n    Get a write (unique) lock for pointer\n    if (!pointer_is_valid)\n      {\n      pointer = pcre2_compile(...\n      pointer_is_valid = TRUE\n      }\n    }\n  Release the lock\n  Use pointer in pcre2_match()\n.sp\nIf JIT is being used, but the JIT compilation is not being done immediately\n(perhaps waiting to see if the pattern is used often enough), similar logic is\nrequired. JIT compilation updates a value within the compiled code block, so a\nthread must gain unique write access to the pointer before calling\n\\fBpcre2_jit_compile()\\fP. Alternatively, \\fBpcre2_code_copy()\\fP or\n\\fBpcre2_code_copy_with_tables()\\fP can be used to obtain a private copy of the\ncompiled code before calling the JIT compiler.\n.\n.\n.SS \"Context blocks\"\n.rs\n.sp\nThe next main section below introduces the idea of \"contexts\" in which PCRE2\nfunctions are called. A context is nothing more than a collection of parameters\nthat control the way PCRE2 operates. Grouping a number of parameters together\nin a context is a convenient way of passing them to a PCRE2 function without\nusing lots of arguments. The parameters that are stored in contexts are in some\nsense \"advanced features\" of the API. Many straightforward applications will\nnot need to use contexts.\n.P\nIn a multithreaded application, if the parameters in a context are values that\nare never changed, the same context can be used by all the threads. However, if\nany thread needs to change any value in a context, it must make its own\nthread-specific copy.\n.\n.\n.SS \"Match blocks\"\n.rs\n.sp\nThe matching functions need a block of memory for storing the results of a\nmatch. This includes details of what was matched, as well as additional\ninformation such as the name of a (*MARK) setting. Each thread must provide its\nown copy of this memory.\n.\n.\n.SH \"PCRE2 CONTEXTS\"\n.rs\n.sp\nSome PCRE2 functions have a lot of parameters, many of which are used only by\nspecialist applications, for example, those that use custom memory management\nor non-standard character tables. To keep function argument lists at a\nreasonable size, and at the same time to keep the API extensible, \"uncommon\"\nparameters are passed to certain functions in a \\fBcontext\\fP instead of\ndirectly. A context is just a block of memory that holds the parameter values.\nApplications that do not need to adjust any of the context parameters can pass\nNULL when a context pointer is required.\n.P\nThere are three different types of context: a general context that is relevant\nfor several PCRE2 operations, a compile-time context, and a match-time context.\n.\n.\n.SS \"The general context\"\n.rs\n.sp\nAt present, this context just contains pointers to (and data for) external\nmemory management functions that are called from several places in the PCRE2\nlibrary. The context is named `general' rather than specifically `memory'\nbecause in future other fields may be added. If you do not want to supply your\nown custom memory management functions, you do not need to bother with a\ngeneral context. A general context is created by:\n.sp\n.nf\n.B pcre2_general_context *pcre2_general_context_create(\n.B \"  void *(*\\fIprivate_malloc\\fP)(PCRE2_SIZE, void *),\"\n.B \"  void (*\\fIprivate_free\\fP)(void *, void *), void *\\fImemory_data\\fP);\"\n.fi\n.sp\nThe two function pointers specify custom memory management functions, whose\nprototypes are:\n.sp\n  \\fBvoid *private_malloc(PCRE2_SIZE, void *);\\fP\n  \\fBvoid  private_free(void *, void *);\\fP\n.sp\nWhenever code in PCRE2 calls these functions, the final argument is the value\nof \\fImemory_data\\fP. Either of the first two arguments of the creation\nfunction may be NULL, in which case the system memory management functions\n\\fImalloc()\\fP and \\fIfree()\\fP are used. (This is not currently useful, as\nthere are no other fields in a general context, but in future there might be.)\nThe \\fIprivate_malloc()\\fP function is used (if supplied) to obtain memory for\nstoring the context, and all three values are saved as part of the context.\n.P\nWhenever PCRE2 creates a data block of any kind, the block contains a pointer\nto the \\fIfree()\\fP function that matches the \\fImalloc()\\fP function that was\nused. When the time comes to free the block, this function is called.\n.P\nA general context can be copied by calling:\n.sp\n.nf\n.B pcre2_general_context *pcre2_general_context_copy(\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.fi\n.sp\nThe memory used for a general context should be freed by calling:\n.sp\n.nf\n.B void pcre2_general_context_free(pcre2_general_context *\\fIgcontext\\fP);\n.fi\n.sp\nIf this function is passed a NULL argument, it returns immediately without\ndoing anything.\n.\n.\n.\\\" HTML <a name=\"compilecontext\"></a>\n.SS \"The compile context\"\n.rs\n.sp\nA compile context is required if you want to provide an external function for\nstack checking during compilation or to change the default values of any of the\nfollowing compile-time parameters:\n.sp\n  What \\eR matches (Unicode newlines or CR, LF, CRLF only)\n  PCRE2's character tables\n  The newline character sequence\n  The compile time nested parentheses limit\n  The maximum length of the pattern string\n  The extra options bits (none set by default)\n  Which performance optimizations the compiler should apply\n.sp\nA compile context is also required if you are using custom memory management.\nIf none of these apply, just pass NULL as the context argument of\n\\fIpcre2_compile()\\fP.\n.P\nA compile context is created, copied, and freed by the following functions:\n.sp\n.nf\n.B pcre2_compile_context *pcre2_compile_context_create(\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B pcre2_compile_context *pcre2_compile_context_copy(\n.B \"  pcre2_compile_context *\\fIccontext\\fP);\"\n.sp\n.B void pcre2_compile_context_free(pcre2_compile_context *\\fIccontext\\fP);\n.fi\n.sp\nA compile context is created with default values for its parameters. These can\nbe changed by calling the following functions, which return 0 on success, or\nPCRE2_ERROR_BADDATA if invalid data is detected.\n.sp\n.nf\n.B int pcre2_set_bsr(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.sp\nThe value must be PCRE2_BSR_ANYCRLF, to specify that \\eR matches only CR, LF,\nor CRLF, or PCRE2_BSR_UNICODE, to specify that \\eR matches any Unicode line\nending sequence. The value is used by the JIT compiler and by the two\ninterpreted matching functions, \\fIpcre2_match()\\fP and\n\\fIpcre2_dfa_match()\\fP.\n.sp\n.nf\n.B int pcre2_set_character_tables(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  const uint8_t *\\fItables\\fP);\"\n.fi\n.sp\nThe value must be the result of a call to \\fBpcre2_maketables()\\fP, whose only\nargument is a general context. This function builds a set of character tables\nin the current locale.\n.sp\n.nf\n.B int pcre2_set_compile_extra_options(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIextra_options\\fP);\"\n.fi\n.sp\nAs PCRE2 has developed, almost all the 32 option bits that are available in\nthe \\fIoptions\\fP argument of \\fBpcre2_compile()\\fP have been used up. To avoid\nrunning out, the compile context contains a set of extra option bits which are\nused for some newer, assumed rarer, options. This function sets those bits. It\nalways sets all the bits (either on or off). It does not modify any existing\nsetting. The available options are defined in the section entitled \"Extra\ncompile options\"\n.\\\" HTML <a href=\"#extracompileoptions\">\n.\\\" </a>\nbelow.\n.\\\"\n.sp\n.nf\n.B int pcre2_set_max_pattern_length(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  PCRE2_SIZE \\fIvalue\\fP);\"\n.fi\n.sp\nThis sets a maximum length, in code units, for any pattern string that is\ncompiled with this context. If the pattern is longer, an error is generated.\nThis facility is provided so that applications that accept patterns from\nexternal sources can limit their size. The default is the largest number that a\nPCRE2_SIZE variable can hold, which is effectively unlimited.\n.sp\n.nf\n.B int pcre2_set_max_pattern_compiled_length(\n.B \"  pcre2_compile_context *\\fIccontext\\fP, PCRE2_SIZE \\fIvalue\\fP);\"\n.fi\n.sp\nThis sets a maximum size, in bytes, for the memory needed to hold the compiled\nversion of a pattern that is compiled with this context. If the pattern needs\nmore memory, an error is generated. This facility is provided so that\napplications that accept patterns from external sources can limit the amount of\nmemory they use. The default is the largest number that a PCRE2_SIZE variable\ncan hold, which is effectively unlimited.\n.sp\n.nf\n.B int pcre2_set_max_varlookbehind(pcre2_compile_contest *\\fIccontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.sp\nThis sets a maximum length for the number of characters matched by a\nvariable-length lookbehind assertion. The default is set when PCRE2 is built,\nwith the ultimate default being 255, the same as Perl. Lookbehind assertions\nwithout a bounding length are not supported.\n.sp\n.nf\n.B int pcre2_set_newline(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.sp\nThis specifies which characters or character sequences are to be recognized as\nnewlines. The value must be one of PCRE2_NEWLINE_CR (carriage return only),\nPCRE2_NEWLINE_LF (linefeed only), PCRE2_NEWLINE_CRLF (the two-character\nsequence CR followed by LF), PCRE2_NEWLINE_ANYCRLF (any of the above),\nPCRE2_NEWLINE_ANY (any Unicode newline sequence), or PCRE2_NEWLINE_NUL (the\nNUL character, that is a binary zero).\n.P\nA pattern can override the value set in the compile context by starting with a\nsequence such as (*CRLF). See the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\npage for details.\n.P\nWhen a pattern is compiled with the PCRE2_EXTENDED or PCRE2_EXTENDED_MORE\noption, the newline convention affects the recognition of the end of internal\ncomments starting with #. The value is saved with the compiled pattern for\nsubsequent use by the JIT compiler and by the two interpreted matching\nfunctions, \\fIpcre2_match()\\fP and \\fIpcre2_dfa_match()\\fP.\n.sp\n.nf\n.B int pcre2_set_parens_nest_limit(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.sp\nThis parameter adjusts the limit, set when PCRE2 is built (default 250), on the\ndepth of parenthesis nesting in a pattern. This limit stops rogue patterns\nusing up too much system stack when being compiled. The limit applies to\nparentheses of all kinds, not just capturing parentheses.\n.sp\n.nf\n.B int pcre2_set_compile_recursion_guard(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  int (*\\fIguard_function\\fP)(uint32_t, void *), void *\\fIuser_data\\fP);\"\n.fi\n.sp\nThere is at least one application that runs PCRE2 in threads with very limited\nsystem stack, where running out of stack is to be avoided at all costs. The\nparenthesis limit above cannot take account of how much stack is actually\navailable during compilation. For a finer control, you can supply a function\nthat is called whenever \\fBpcre2_compile()\\fP starts to compile a parenthesized\npart of a pattern. This function can check the actual stack size (or anything\nelse that it wants to, of course).\n.P\nThe first argument to the callout function gives the current depth of\nnesting, and the second is user data that is set up by the last argument of\n\\fBpcre2_set_compile_recursion_guard()\\fP. The callout function should return\nzero if all is well, or non-zero to force an error.\n.sp\n.nf\n.B int pcre2_set_optimize(pcre2_compile_context *\\fIccontext\\fP,\n.B \"  uint32_t \\fIdirective\\fP);\"\n.fi\n.sp\nPCRE2 can apply various performance optimizations during compilation, in order\nto make matching faster. For example, the compiler might convert some regex\nconstructs into an equivalent construct which \\fBpcre2_match()\\fP can execute\nfaster. By default, all available optimizations are enabled. However, in rare\ncases, one might wish to disable specific optimizations. For example, if it is\nknown that some optimizations cannot benefit a certain regex, it might be\ndesirable to disable them, in order to speed up compilation.\n.P\nThe permitted values of \\fIdirective\\fP are as follows:\n.sp\n  PCRE2_OPTIMIZATION_FULL\n.sp\nEnable all optional performance optimizations. This is the default value.\n.sp\n  PCRE2_OPTIMIZATION_NONE\n.sp\nDisable all optional performance optimizations.\n.sp\n  PCRE2_AUTO_POSSESS\n  PCRE2_AUTO_POSSESS_OFF\n.sp\nEnable/disable \"auto-possessification\" of variable quantifiers such as * and +.\nThis optimization, for example, turns a+b into a++b in order to avoid\nbacktracks into a+ that can never be successful. However, if callouts are in\nuse, auto-possessification means that some callouts are never taken. You can\ndisable this optimization if you want the matching functions to do a full,\nunoptimized search and run all the callouts.\n.sp\n  PCRE2_DOTSTAR_ANCHOR\n  PCRE2_DOTSTAR_ANCHOR_OFF\n.sp\nEnable/disable an optimization that is applied when .* is the first significant\nitem in a top-level branch of a pattern, and all the other branches also start\nwith .* or with \\eA or \\eG or ^. Such a pattern is automatically anchored if\nPCRE2_DOTALL is set for all the .* items and PCRE2_MULTILINE is not set for any\n^ items. Otherwise, the fact that any match must start either at the start of\nthe subject or following a newline is remembered. Like other optimizations,\nthis can cause callouts to be skipped.\n.P\nDotstar anchor optimization is automatically disabled for .* if it is inside an\natomic group or a capture group that is the subject of a backreference, or if\nthe pattern contains (*PRUNE) or (*SKIP).\n.sp\n  PCRE2_START_OPTIMIZE\n  PCRE2_START_OPTIMIZE_OFF\n.sp\nEnable/disable optimizations which cause matching functions to scan the subject\nstring for specific code unit values before attempting a match. For example, if\nit is known that an unanchored match must start with a specific value, the\nmatching code searches the subject for that value, and fails immediately if it\ncannot find it, without actually running the main matching function. This means\nthat a special item such as (*COMMIT) at the start of a pattern is not\nconsidered until after a suitable starting point for the match has been found.\nAlso, when callouts or (*MARK) items are in use, these \"start-up\" optimizations\ncan cause them to be skipped if the pattern is never actually used. The start-up\noptimizations are in effect a pre-scan of the subject that takes place before\nthe pattern is run.\n.P\nDisabling start-up optimizations ensures that in cases where the result is \"no\nmatch\", the callouts do occur, and that items such as (*COMMIT) and (*MARK) are\nconsidered at every possible starting position in the subject string.\n.P\nDisabling start-up optimizations may change the outcome of a matching operation.\nConsider the pattern\n.sp\n  (*COMMIT)ABC\n.sp\nWhen this is compiled, PCRE2 records the fact that a match must start with the\ncharacter \"A\". Suppose the subject string is \"DEFABC\". The start-up\noptimization scans along the subject, finds \"A\" and runs the first match\nattempt from there. The (*COMMIT) item means that the pattern must match the\ncurrent starting position, which in this case, it does. However, if the same\nmatch is run without start-up optimizations, the initial scan along the subject\nstring does not happen. The first match attempt is run starting from \"D\" and\nwhen this fails, (*COMMIT) prevents any further matches being tried, so the\noverall result is \"no match\".\n.P\nAnother start-up optimization makes use of a minimum length for a matching\nsubject, which is recorded when possible. Consider the pattern\n.sp\n  (*MARK:1)B(*MARK:2)(X|Y)\n.sp\nThe minimum length for a match is two characters. If the subject is \"XXBB\", the\n\"starting character\" optimization skips \"XX\", then tries to match \"BB\", which\nis long enough. In the process, (*MARK:2) is encountered and remembered. When\nthe match attempt fails, the next \"B\" is found, but there is only one character\nleft, so there are no more attempts, and \"no match\" is returned with the \"last\nmark seen\" set to \"2\". Without start-up optimizations, however, matches are\ntried at every possible starting position, including at the end of the subject,\nwhere (*MARK:1) is encountered, but there is no \"B\", so the \"last mark seen\"\nthat is returned is \"1\". In this case, the optimizations do not affect the\noverall match result, which is still \"no match\", but they do affect the\nauxiliary information that is returned.\n.\n.\n.\\\" HTML <a name=\"matchcontext\"></a>\n.SS \"The match context\"\n.rs\n.sp\nA match context is required if you want to:\n.sp\n  Set up a callout function\n  Set an offset limit for matching an unanchored pattern\n  Change the limit on the amount of heap used when matching\n  Change the backtracking match limit\n  Change the backtracking depth limit\n  Set custom memory management specifically for the match\n.sp\nIf none of these apply, just pass NULL as the context argument of\n\\fBpcre2_match()\\fP, \\fBpcre2_dfa_match()\\fP, or \\fBpcre2_jit_match()\\fP.\n.P\nA match context is created, copied, and freed by the following functions:\n.sp\n.nf\n.B pcre2_match_context *pcre2_match_context_create(\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B pcre2_match_context *pcre2_match_context_copy(\n.B \"  pcre2_match_context *\\fImcontext\\fP);\"\n.sp\n.B void pcre2_match_context_free(pcre2_match_context *\\fImcontext\\fP);\n.fi\n.sp\nA match context is created with default values for its parameters. These can\nbe changed by calling the following functions, which return 0 on success, or\nPCRE2_ERROR_BADDATA if invalid data is detected.\n.sp\n.nf\n.B int pcre2_set_callout(pcre2_match_context *\\fImcontext\\fP,\n.B \"  int (*\\fIcallout_function\\fP)(pcre2_callout_block *, void *),\"\n.B \"  void *\\fIcallout_data\\fP);\"\n.fi\n.sp\nThis sets up a callout function for PCRE2 to call at specified points\nduring a matching operation. Details are given in the\n.\\\" HREF\n\\fBpcre2callout\\fP\n.\\\"\ndocumentation.\n.sp\n.nf\n.B int pcre2_set_substitute_callout(pcre2_match_context *\\fImcontext\\fP,\n.B \"  int (*\\fIcallout_function\\fP)(pcre2_substitute_callout_block *, void *),\"\n.B \"  void *\\fIcallout_data\\fP);\"\n.fi\n.sp\nThis sets up a callout function for PCRE2 to call after each substitution\nmade by \\fBpcre2_substitute()\\fP. Details are given in the section entitled\n\"Creating a new string with substitutions\"\n.\\\" HTML <a href=\"#substitutions\">\n.\\\" </a>\nbelow.\n.\\\"\n.sp\n.nf\n.B int pcre2_set_substitute_case_callout(pcre2_match_context *\\fImcontext\\fP,\n.B \"  PCRE2_SIZE (*\\fIcallout_function\\fP)(PCRE2_SPTR, PCRE2_SIZE,\"\n.B \"                                 PCRE2_UCHAR *, PCRE2_SIZE,\"\n.B \"                                 int, void *),\"\n.B \"  void *\\fIcallout_data\\fP);\"\n.fi\n.sp\nThis sets up a callout function for PCRE2 to call when performing case\ntransformations inside \\fBpcre2_substitute()\\fP. Details are given in the\nsection entitled \"Creating a new string with substitutions\"\n.\\\" HTML <a href=\"#substitutions\">\n.\\\" </a>\nbelow.\n.\\\"\n.sp\n.nf\n.B int pcre2_set_offset_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  PCRE2_SIZE \\fIvalue\\fP);\"\n.fi\n.sp\nThe \\fIoffset_limit\\fP parameter limits how far an unanchored search can\nadvance in the subject string. The default value is PCRE2_UNSET. The\n\\fBpcre2_match()\\fP and \\fBpcre2_dfa_match()\\fP functions return\nPCRE2_ERROR_NOMATCH if a match with a starting point before or at the given\noffset is not found. The \\fBpcre2_substitute()\\fP function makes no more\nsubstitutions.\n.P\nFor example, if the pattern /abc/ is matched against \"123abc\" with an offset\nlimit less than 3, the result is PCRE2_ERROR_NOMATCH. A match can never be\nfound if the \\fIstartoffset\\fP argument of \\fBpcre2_match()\\fP,\n\\fBpcre2_dfa_match()\\fP, or \\fBpcre2_substitute()\\fP is greater than the offset\nlimit set in the match context.\n.P\nWhen using this facility, you must set the PCRE2_USE_OFFSET_LIMIT option when\ncalling \\fBpcre2_compile()\\fP so that when JIT is in use, different code can be\ncompiled. If a match is started with a non-default match limit when\nPCRE2_USE_OFFSET_LIMIT is not set, an error is generated.\n.P\nThe offset limit facility can be used to track progress when searching large\nsubject strings or to limit the extent of global substitutions. See also the\nPCRE2_FIRSTLINE option, which requires a match to start before or at the first\nnewline that follows the start of matching in the subject. If this is set with\nan offset limit, a match must occur in the first line and also within the\noffset limit. In other words, whichever limit comes first is used.\n.sp\n.nf\n.B int pcre2_set_heap_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.sp\nThe \\fIheap_limit\\fP parameter specifies, in units of kibibytes (1024 bytes),\nthe maximum amount of heap memory that \\fBpcre2_match()\\fP may use to hold\nbacktracking information when running an interpretive match. This limit also\napplies to \\fBpcre2_dfa_match()\\fP, which may use the heap when processing\npatterns with a lot of nested pattern recursion or lookarounds or atomic\ngroups. This limit does not apply to matching with the JIT optimization, which\nhas its own memory control arrangements (see the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\ndocumentation for more details). If the limit is reached, the negative error\ncode PCRE2_ERROR_HEAPLIMIT is returned. The default limit can be set when PCRE2\nis built; if it is not, the default is set very large and is essentially\nunlimited.\n.P\nA value for the heap limit may also be supplied by an item at the start of a\npattern of the form\n.sp\n  (*LIMIT_HEAP=ddd)\n.sp\nwhere ddd is a decimal number. However, such a setting is ignored unless ddd is\nless than the limit set by the caller of \\fBpcre2_match()\\fP or, if no such\nlimit is set, less than the default.\n.P\nThe \\fBpcre2_match()\\fP function always needs some heap memory, so setting a\nvalue of zero guarantees a \"heap limit exceeded\" error. Details of how\n\\fBpcre2_match()\\fP uses the heap are given in the\n.\\\" HREF\n\\fBpcre2perform\\fP\n.\\\"\ndocumentation.\n.P\nFor \\fBpcre2_dfa_match()\\fP, a vector on the system stack is used when\nprocessing pattern recursions, lookarounds, or atomic groups, and only if this\nis not big enough is heap memory used. In this case, setting a value of zero\ndisables the use of the heap.\n.sp\n.nf\n.B int pcre2_set_match_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.sp\nThe \\fImatch_limit\\fP parameter provides a means of preventing PCRE2 from using\nup too many computing resources when processing patterns that are not going to\nmatch, but which have a very large number of possibilities in their search\ntrees. The classic example is a pattern that uses nested unlimited repeats.\n.P\nThere is an internal counter in \\fBpcre2_match()\\fP that is incremented each\ntime round its main matching loop. If this value reaches the match limit,\n\\fBpcre2_match()\\fP returns the negative value PCRE2_ERROR_MATCHLIMIT. This has\nthe effect of limiting the amount of backtracking that can take place. For\npatterns that are not anchored, the count restarts from zero for each position\nin the subject string. This limit also applies to \\fBpcre2_dfa_match()\\fP,\nthough the counting is done in a different way.\n.P\nWhen \\fBpcre2_match()\\fP is called with a pattern that was successfully\nprocessed by \\fBpcre2_jit_compile()\\fP, the way in which matching is executed\nis entirely different. However, there is still the possibility of runaway\nmatching that goes on for a very long time, and so the \\fImatch_limit\\fP value\nis also used in this case (but in a different way) to limit how long the\nmatching can continue.\n.P\nThe default value for the limit can be set when PCRE2 is built; the default is\n10 million, which handles all but the most extreme cases. A value for the match\nlimit may also be supplied by an item at the start of a pattern of the form\n.sp\n  (*LIMIT_MATCH=ddd)\n.sp\nwhere ddd is a decimal number. However, such a setting is ignored unless ddd is\nless than the limit set by the caller of \\fBpcre2_match()\\fP or\n\\fBpcre2_dfa_match()\\fP or, if no such limit is set, less than the default.\n.sp\n.nf\n.B int pcre2_set_depth_limit(pcre2_match_context *\\fImcontext\\fP,\n.B \"  uint32_t \\fIvalue\\fP);\"\n.fi\n.sp\nThis parameter limits the depth of nested backtracking in \\fBpcre2_match()\\fP.\nEach time a nested backtracking point is passed, a new memory frame is used\nto remember the state of matching at that point. Thus, this parameter\nindirectly limits the amount of memory that is used in a match. However,\nbecause the size of each memory frame depends on the number of capturing\nparentheses, the actual memory limit varies from pattern to pattern. This limit\nwas more useful in versions before 10.30, where function recursion was used for\nbacktracking.\n.P\nThe depth limit is not relevant, and is ignored, when matching is done using\nJIT compiled code. However, it is supported by \\fBpcre2_dfa_match()\\fP, which\nuses it to limit the depth of nested internal recursive function calls that\nimplement atomic groups, lookaround assertions, and pattern recursions. This\nlimits, indirectly, the amount of system stack that is used. It was more useful\nin versions before 10.32, when stack memory was used for local workspace\nvectors for recursive function calls. From version 10.32, only local variables\nare allocated on the stack and as each call uses only a few hundred bytes, even\na small stack can support quite a lot of recursion.\n.P\nIf the depth of internal recursive function calls is great enough, local\nworkspace vectors are allocated on the heap from version 10.32 onwards, so the\ndepth limit also indirectly limits the amount of heap memory that is used. A\nrecursive pattern such as /(.(?2))((?1)|)/, when matched to a very long string\nusing \\fBpcre2_dfa_match()\\fP, can use a great deal of memory. However, it is\nprobably better to limit heap usage directly by calling\n\\fBpcre2_set_heap_limit()\\fP.\n.P\nThe default value for the depth limit can be set when PCRE2 is built; if it is\nnot, the default is set to the same value as the default for the match limit.\nIf the limit is exceeded, \\fBpcre2_match()\\fP or \\fBpcre2_dfa_match()\\fP\nreturns PCRE2_ERROR_DEPTHLIMIT. A value for the depth limit may also be\nsupplied by an item at the start of a pattern of the form\n.sp\n  (*LIMIT_DEPTH=ddd)\n.sp\nwhere ddd is a decimal number. However, such a setting is ignored unless ddd is\nless than the limit set by the caller of \\fBpcre2_match()\\fP or\n\\fBpcre2_dfa_match()\\fP or, if no such limit is set, less than the default.\n.\n.\n.SH \"CHECKING BUILD-TIME OPTIONS\"\n.rs\n.sp\n.B int pcre2_config(uint32_t \\fIwhat\\fP, void *\\fIwhere\\fP);\n.P\nThe function \\fBpcre2_config()\\fP makes it possible for a PCRE2 client to find\nthe value of certain configuration parameters and to discover which optional\nfeatures have been compiled into the PCRE2 library. The\n.\\\" HREF\n\\fBpcre2build\\fP\n.\\\"\ndocumentation has more details about these features.\n.P\nThe first argument for \\fBpcre2_config()\\fP specifies which information is\nrequired. The second argument is a pointer to memory into which the information\nis placed. If NULL is passed, the function returns the amount of memory that is\nneeded for the requested information. For calls that return numerical values,\nthe value is in bytes; when requesting these values, \\fIwhere\\fP should point\nto appropriately aligned memory. For calls that return strings, the required\nlength is given in code units, not counting the terminating zero.\n.P\nWhen requesting information, the returned value from \\fBpcre2_config()\\fP is\nnon-negative on success, or the negative error code PCRE2_ERROR_BADOPTION if\nthe value in the first argument is not recognized. The following information is\navailable:\n.sp\n  PCRE2_CONFIG_BSR\n.sp\nThe output is a uint32_t integer whose value indicates what character\nsequences the \\eR escape sequence matches by default. A value of\nPCRE2_BSR_UNICODE means that \\eR matches any Unicode line ending sequence; a\nvalue of PCRE2_BSR_ANYCRLF means that \\eR matches only CR, LF, or CRLF. The\ndefault can be overridden when a pattern is compiled.\n.sp\n  PCRE2_CONFIG_COMPILED_WIDTHS\n.sp\nThe output is a uint32_t integer whose lower bits indicate which code unit\nwidths were selected when PCRE2 was built. The 1-bit indicates 8-bit support,\nand the 2-bit and 4-bit indicate 16-bit and 32-bit support, respectively.\n.sp\n  PCRE2_CONFIG_DEPTHLIMIT\n.sp\nThe output is a uint32_t integer that gives the default limit for the depth of\nnested backtracking in \\fBpcre2_match()\\fP or the depth of nested recursions,\nlookarounds, and atomic groups in \\fBpcre2_dfa_match()\\fP. Further details are\ngiven with \\fBpcre2_set_depth_limit()\\fP above.\n.sp\n  PCRE2_CONFIG_EFFECTIVE_LINKSIZE\n.sp\nThe output is a uint32_t integer that contains the number of bytes the library\nuses for internal linkage in compiled regular expressions. Its value is derived\nfrom the value that was provided at build time and that is described below by\nPCRE2_CONFIG_LINKSIZE.\n.sp\n  PCRE2_CONFIG_HEAPLIMIT\n.sp\nThe output is a uint32_t integer that gives, in kibibytes, the default limit\nfor the amount of heap memory used by \\fBpcre2_match()\\fP or\n\\fBpcre2_dfa_match()\\fP. Further details are given with\n\\fBpcre2_set_heap_limit()\\fP above.\n.sp\n  PCRE2_CONFIG_JIT\n.sp\nThe output is a uint32_t integer that is set to one if support for just-in-time\ncompiling is included in the library; otherwise it is set to zero. Note that\nhaving the support in the library does not guarantee that JIT will be used for\nany given match, and neither does it guarantee that JIT will actually be able\nto function, because it may not be able to allocate executable memory in some\nenvironments. There is a special call to \\fBpcre2_jit_compile()\\fP that can be\nused to check this. See the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\ndocumentation for more details.\n.sp\n  PCRE2_CONFIG_JITTARGET\n.sp\nThe \\fIwhere\\fP argument should point to a code-unit-aligned buffer. All\nprevious versions of PCRE2 have required no more than 128 code units of buffer\ncapacity. However, this requirement is not guaranteed to be maintained, so\napplications should call \\fBpcre2_config()\\fP with \\fBwhere\\fP set to NULL to\nreceive the required buffer size, then assert or allocate a suitably-size buffer\nfor a second call to \\fBpcre2_config()\\fP. The buffer is filled with a string\nthat contains the name of the architecture for which the JIT compiler is\nconfigured at build time, for example, a 64-bit ARM CPU that supports the\nArmv8.1 extension writes \"ARM-64 (LSE) 64bit (little endian + unaligned)\". If\nJIT support is not available, PCRE2_ERROR_BADOPTION is returned; otherwise the\nnumber of code units used is returned. This is the length of the string plus one\nunit for the terminating zero.\n.sp\n  PCRE2_CONFIG_LINKSIZE\n.sp\nThe output is a uint32_t integer that contains the number of bytes the library\nwas instructed to use for internal linkage in compiled regular expressions.\nWhen PCRE2 is configured, the value can be set to 2, 3, or 4, with the default\nbeing 2 for most libraries.\n.P\nThe actual number of bytes used depends on the size of the code units that the\nlibrary supports and can be higher. See PCRE2_CONFIG_EFFECTIVE_LINKSIZE above\nfor details.\n.P\nThe default value of 2 for the 8-bit and 16-bit libraries is sufficient for all\nbut the most massive patterns, since it allows the size of the compiled pattern\nto be up to 65535 code units. Larger values allow larger regular expressions to\nbe compiled by those two libraries, but at the expense of slower matching.\n.sp\n  PCRE2_CONFIG_MATCHLIMIT\n.sp\nThe output is a uint32_t integer that gives the default match limit for\n\\fBpcre2_match()\\fP. Further details are given with\n\\fBpcre2_set_match_limit()\\fP above.\n.sp\n  PCRE2_CONFIG_NEWLINE\n.sp\nThe output is a uint32_t integer whose value specifies the default character\nsequence that is recognized as meaning \"newline\". The values are:\n.sp\n  PCRE2_NEWLINE_CR       Carriage return (CR)\n  PCRE2_NEWLINE_LF       Linefeed (LF)\n  PCRE2_NEWLINE_CRLF     Carriage return, linefeed (CRLF)\n  PCRE2_NEWLINE_ANY      Any Unicode line ending\n  PCRE2_NEWLINE_ANYCRLF  Any of CR, LF, or CRLF\n  PCRE2_NEWLINE_NUL      The NUL character (binary zero)\n.sp\nThe default should normally correspond to the standard sequence for your\noperating system.\n.sp\n  PCRE2_CONFIG_NEVER_BACKSLASH_C\n.sp\nThe output is a uint32_t integer that is set to one if the use of \\eC was\npermanently disabled when PCRE2 was built; otherwise it is set to zero.\n.sp\n  PCRE2_CONFIG_PARENSLIMIT\n.sp\nThe output is a uint32_t integer that gives the maximum depth of nesting\nof parentheses (of any kind) in a pattern. This limit is imposed to cap the\namount of system stack used when a pattern is compiled. It is specified when\nPCRE2 is built; the default is 250. This limit does not take into account the\nstack that may already be used by the calling application. For finer control\nover compilation stack usage, see \\fBpcre2_set_compile_recursion_guard()\\fP.\n.sp\n  PCRE2_CONFIG_STACKRECURSE\n.sp\nThis parameter is obsolete and should not be used in new code. The output is a\nuint32_t integer that is always set to zero.\n.sp\n  PCRE2_CONFIG_TABLES_LENGTH\n.sp\nThe output is a uint32_t integer that gives the length of PCRE2's character\nprocessing tables in bytes. For details of these tables see the\n.\\\" HTML <a href=\"#localesupport\">\n.\\\" </a>\nsection on locale support\n.\\\"\nbelow.\n.sp\n  PCRE2_CONFIG_UNICODE_VERSION\n.sp\nThe \\fIwhere\\fP argument should point to a code-unit-aligned buffer. All\nprevious versions of PCRE2 have required no more than 24 code units of buffer\ncapacity. However, applications should call \\fBpcre2_config()\\fP with\n\\fBwhere\\fP set to NULL to receive the required buffer size, then assert or\nallocate a suitably-size buffer for a second call to \\fBpcre2_config()\\fP. If\nPCRE2 has been compiled without Unicode support, the buffer is filled with the\ntext \"Unicode not supported\". Otherwise, the Unicode version string (for\nexample, \"8.0.0\") is written. The number of code units used is returned. This is\nthe length of the string plus one unit for the terminating zero.\n.sp\n  PCRE2_CONFIG_UNICODE\n.sp\nThe output is a uint32_t integer that is set to one if Unicode support is\navailable; otherwise it is set to zero. Unicode support implies UTF support.\n.sp\n  PCRE2_CONFIG_VERSION\n.sp\nThe \\fIwhere\\fP argument should point to a code-unit-aligned buffer. All\nprevious versions of PCRE2 have required no more than 24 code units of buffer\ncapacity. However, applications should call \\fBpcre2_config()\\fP with\n\\fBwhere\\fP set to NULL to receive the required buffer size, then assert or\nallocate a suitably-size buffer for a second call to \\fBpcre2_config()\\fP. The\nbuffer is filled with the PCRE2 version string, zero-terminated. The number of\ncode units used is returned. This is the length of the string plus one unit for\nthe terminating zero.\n.\n.\n.\\\" HTML <a name=\"compiling\"></a>\n.SH \"COMPILING A PATTERN\"\n.rs\n.sp\n.nf\n.B pcre2_code *pcre2_compile(PCRE2_SPTR \\fIpattern\\fP, PCRE2_SIZE \\fIlength\\fP,\n.B \"  uint32_t \\fIoptions\\fP, int *\\fIerrorcode\\fP, PCRE2_SIZE *\\fIerroroffset,\\fP\"\n.B \"  pcre2_compile_context *\\fIccontext\\fP);\"\n.sp\n.B void pcre2_code_free(pcre2_code *\\fIcode\\fP);\n.sp\n.B pcre2_code *pcre2_code_copy(const pcre2_code *\\fIcode\\fP);\n.sp\n.B pcre2_code *pcre2_code_copy_with_tables(const pcre2_code *\\fIcode\\fP);\n.fi\n.P\nThe \\fBpcre2_compile()\\fP function compiles a pattern into an internal form.\nThe pattern is defined by a pointer to a string of code units and a length in\ncode units. If the pattern is zero-terminated, the length can be specified as\nPCRE2_ZERO_TERMINATED. A NULL pattern pointer with a length of zero is treated\nas an empty string (NULL with a non-zero length causes an error return). The\nfunction returns a pointer to a block of memory that contains the compiled\npattern and related data, or NULL if an error occurred.\n.P\nIf the compile context argument \\fIccontext\\fP is NULL, memory for the compiled\npattern is obtained by calling \\fBmalloc()\\fP. Otherwise, it is obtained from\nthe same memory function that was used for the compile context. The caller must\nfree the memory by calling \\fBpcre2_code_free()\\fP when it is no longer needed.\nIf \\fBpcre2_code_free()\\fP is called with a NULL argument, it returns\nimmediately, without doing anything.\n.P\nThe function \\fBpcre2_code_copy()\\fP makes a copy of the compiled code in new\nmemory, using the same memory allocator as was used for the original. However,\nif the code has been processed by the JIT compiler (see\n.\\\" HTML <a href=\"#jitcompiling\">\n.\\\" </a>\nbelow),\n.\\\"\nthe JIT information cannot be copied (because it is position-dependent).\nThe new copy can initially be used only for non-JIT matching, though it can be\npassed to \\fBpcre2_jit_compile()\\fP if required. If \\fBpcre2_code_copy()\\fP is\ncalled with a NULL argument, it returns NULL.\n.P\nThe \\fBpcre2_code_copy()\\fP function provides a way for individual threads in a\nmultithreaded application to acquire a private copy of shared compiled code.\nHowever, it does not make a copy of the character tables used by the compiled\npattern; the new pattern code points to the same tables as the original code.\n(See\n.\\\" HTML <a href=\"#jitcompiling\">\n.\\\" </a>\n\"Locale Support\"\n.\\\"\nbelow for details of these character tables.) In many applications the same\ntables are used throughout, so this behaviour is appropriate. Nevertheless,\nthere are occasions when a copy of a compiled pattern and the relevant tables\nare needed. The \\fBpcre2_code_copy_with_tables()\\fP provides this facility.\nCopies of both the code and the tables are made, with the new code pointing to\nthe new tables. The memory for the new tables is automatically freed when\n\\fBpcre2_code_free()\\fP is called for the new copy of the compiled code. If\n\\fBpcre2_code_copy_with_tables()\\fP is called with a NULL argument, it returns\nNULL.\n.P\nNOTE: When one of the matching functions is called, pointers to the compiled\npattern and the subject string are set in the match data block so that they can\nbe referenced by the substring extraction functions after a successful match.\nAfter running a match, you must not free a compiled pattern or a subject string\nuntil after all operations on the\n.\\\" HTML <a href=\"#matchdatablock\">\n.\\\" </a>\nmatch data block\n.\\\"\nhave taken place, unless, in the case of the subject string, you have used the\nPCRE2_COPY_MATCHED_SUBJECT option, which is described in the section entitled\n\"Option bits for \\fBpcre2_match()\\fP\"\n.\\\" HTML <a href=\"#matchoptions>\">\n.\\\" </a>\nbelow.\n.\\\"\n.P\nThe \\fIoptions\\fP argument for \\fBpcre2_compile()\\fP contains various bit\nsettings that affect the compilation. It should be zero if none of them are\nrequired. The available options are described below. Some of them (in\nparticular, those that are compatible with Perl, but some others as well) can\nalso be set and unset from within the pattern (see the detailed description in\nthe\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation).\n.P\nFor those options that can be different in different parts of the pattern, the\ncontents of the \\fIoptions\\fP argument specifies their settings at the start of\ncompilation. The PCRE2_ANCHORED, PCRE2_ENDANCHORED, and PCRE2_NO_UTF_CHECK\noptions can be set at the time of matching as well as at compile time.\n.P\nSome additional options and less frequently required compile-time parameters\n(for example, the newline setting) can be provided in a compile context (as\ndescribed\n.\\\" HTML <a href=\"#compilecontext\">\n.\\\" </a>\nabove).\n.\\\"\n.P\nIf \\fIerrorcode\\fP or \\fIerroroffset\\fP is NULL, \\fBpcre2_compile()\\fP returns\nNULL immediately. Otherwise, the variables to which these point are set to an\nerror code and an offset (number of code units) within the pattern,\nrespectively, when \\fBpcre2_compile()\\fP returns NULL because a compilation\nerror has occurred.\n.P\nThere are over 100 positive error codes that \\fBpcre2_compile()\\fP may return\nif it finds an error in the pattern. There are also some negative error codes\nthat are used for invalid UTF strings when validity checking is in force. These\nare the same as given by \\fBpcre2_match()\\fP and \\fBpcre2_dfa_match()\\fP, and\nare described in the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\ndocumentation. There is no separate documentation for the positive error codes,\nbecause the textual error messages that are obtained by calling the\n\\fBpcre2_get_error_message()\\fP function (see \"Obtaining a textual error\nmessage\"\n.\\\" HTML <a href=\"#geterrormessage\">\n.\\\" </a>\nbelow)\n.\\\"\nshould be self-explanatory. Macro names starting with PCRE2_ERROR_ are defined\nfor both positive and negative error codes in \\fBpcre2.h\\fP. When compilation\nis successful \\fIerrorcode\\fP is set to a value that returns the message \"no\nerror\" if passed to \\fBpcre2_get_error_message()\\fP.\n.P\nThe value returned in \\fIerroroffset\\fP is an indication of where in the\npattern an error occurred. When there is no error, zero is returned. A non-zero\nvalue is not necessarily the furthest point in the pattern that was read. For\nexample, after the error \"lookbehind assertion is not fixed length\", the error\noffset points to the start of the failing assertion. For an invalid UTF-8 or\nUTF-16 string, the offset is that of the first code unit of the failing\ncharacter.\n.P\nSome errors are not detected until the whole pattern has been scanned; in these\ncases, the offset passed back is the length of the pattern. Note that the\noffset is in code units, not characters, even in a UTF mode. It may sometimes\npoint into the middle of a UTF-8 or UTF-16 character.\n.P\nThis code fragment shows a typical straightforward call to\n\\fBpcre2_compile()\\fP:\n.sp\n  pcre2_code *re;\n  PCRE2_SIZE erroffset;\n  int errorcode;\n  re = pcre2_compile(\n    \"^A.*Z\",                /* the pattern */\n    PCRE2_ZERO_TERMINATED,  /* the pattern is zero-terminated */\n    0,                      /* default options */\n    &errorcode,             /* for error code */\n    &erroffset,             /* for error offset */\n    NULL);                  /* no compile context */\n.sp\n.\n.\n.SS \"Main compile options\"\n.rs\n.sp\nThe following names for option bits are defined in the \\fBpcre2.h\\fP header\nfile:\n.sp\n  PCRE2_ANCHORED\n.sp\nIf this bit is set, the pattern is forced to be \"anchored\", that is, it is\nconstrained to match only at the first matching point in the string that is\nbeing searched (the \"subject string\"). This effect can also be achieved by\nappropriate constructs in the pattern itself, which is the only way to do it in\nPerl.\n.sp\n  PCRE2_ALLOW_EMPTY_CLASS\n.sp\nBy default, for compatibility with Perl, a closing square bracket that\nimmediately follows an opening one is treated as a data character for the\nclass. When PCRE2_ALLOW_EMPTY_CLASS is set, it terminates the class, which\ntherefore contains no characters and so can never match.\n.sp\n  PCRE2_ALT_BSUX\n.sp\nThis option request alternative handling of three escape sequences, which\nmakes PCRE2's behaviour more like ECMAscript (aka JavaScript). When it is set:\n.P\n(1) \\eU matches an upper case \"U\" character; by default \\eU causes a compile\ntime error (Perl uses \\eU to upper case subsequent characters).\n.P\n(2) \\eu matches a lower case \"u\" character unless it is followed by four\nhexadecimal digits, in which case the hexadecimal number defines the code point\nto match. By default, \\eu causes a compile time error (Perl uses it to upper\ncase the following character).\n.P\n(3) \\ex matches a lower case \"x\" character unless it is followed by two\nhexadecimal digits, in which case the hexadecimal number defines the code point\nto match. By default, as in Perl, a hexadecimal number is always expected after\n\\ex, but it may have one or two digits.\n.P\nECMAscript 6 added additional functionality to \\eu. This can be accessed using\nthe PCRE2_EXTRA_ALT_BSUX extra option (see \"Extra compile options\"\n.\\\" HTML <a href=\"#extracompileoptions\">\n.\\\" </a>\nbelow).\n.\\\"\nNote that this alternative escape handling applies only to patterns. Neither of\nthese options affects the processing of replacement strings passed to\n\\fBpcre2_substitute()\\fP.\n.sp\n  PCRE2_ALT_CIRCUMFLEX\n.sp\nIn multiline mode (when PCRE2_MULTILINE is set), the circumflex metacharacter\nmatches at the start of the subject (unless PCRE2_NOTBOL is set), and also\nafter any internal newline. However, it does not match after a newline at the\nend of the subject, for compatibility with Perl. If you want a multiline\ncircumflex also to match after a terminating newline, you must set\nPCRE2_ALT_CIRCUMFLEX.\n.sp\n  PCRE2_ALT_EXTENDED_CLASS\n.sp\nAlters the parsing of character classes to follow the extended syntax\ndescribed by Unicode UTS#18. The PCRE2_ALT_EXTENDED_CLASS option has no impact\non the behaviour of the Perl-specific \"(?[...])\" syntax for extended classes,\nbut instead enables the alternative syntax of extended class behaviour inside\nordinary \"[...]\" character classes. See the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation for details of the character classes supported.\n.sp\n  PCRE2_ALT_VERBNAMES\n.sp\nBy default, for compatibility with Perl, the name in any verb sequence such as\n(*MARK:NAME) is any sequence of characters that does not include a closing\nparenthesis. The name is not processed in any way, and it is not possible to\ninclude a closing parenthesis in the name. However, if the PCRE2_ALT_VERBNAMES\noption is set, normal backslash processing is applied to verb names and only an\nunescaped closing parenthesis terminates the name. A closing parenthesis can be\nincluded in a name either as \\e) or between \\eQ and \\eE. If the PCRE2_EXTENDED\nor PCRE2_EXTENDED_MORE option is set with PCRE2_ALT_VERBNAMES, unescaped\nwhite space in verb names is skipped and #-comments are recognized, exactly as\nin the rest of the pattern.\n.sp\n  PCRE2_AUTO_CALLOUT\n.sp\nIf this bit is set, \\fBpcre2_compile()\\fP automatically inserts callout items,\nall with number 255, before each pattern item, except immediately before or\nafter an explicit callout in the pattern. For discussion of the callout\nfacility, see the\n.\\\" HREF\n\\fBpcre2callout\\fP\n.\\\"\ndocumentation.\n.sp\n  PCRE2_CASELESS\n.sp\nIf this bit is set, letters in the pattern match both upper and lower case\nletters in the subject. It is equivalent to Perl's /i option, and it can be\nchanged within a pattern by a (?i) option setting. If either PCRE2_UTF or\nPCRE2_UCP is set, Unicode properties are used for all characters with more than\none other case, and for all characters whose code points are greater than\nU+007F.\n.P\nNote that there are two ASCII characters, K and S, that, in addition to\ntheir lower case ASCII equivalents, are case-equivalent with U+212A (Kelvin\nsign) and U+017F (long S) respectively. If you do not want this case\nequivalence, you can suppress it by setting PCRE2_EXTRA_CASELESS_RESTRICT.\n.P\nOne language family, Turkish and Azeri, has its own case-insensitivity rules,\nwhich can be selected by setting PCRE2_EXTRA_TURKISH_CASING. This alters the\nbehaviour of the 'i', 'I', U+0130 (capital I with dot above), and U+0131\n(small dotless i) characters.\n.P\nFor lower valued characters with only one other case, a lookup table is used\nfor speed. When neither PCRE2_UTF nor PCRE2_UCP is set, a lookup table is used\nfor all code points less than 256, and higher code points (available only in\n16-bit or 32-bit mode) are treated as not having another case.\n.P\nFrom release 10.45 PCRE2_CASELESS also affects what some of the letter-related\nUnicode property escapes (\\ep and \\eP) match. The properties Lu (upper case\nletter), Ll (lower case letter), and Lt (title case letter) are all treated as\nLC (cased letter) when PCRE2_CASELESS is set.\n.sp\n  PCRE2_DOLLAR_ENDONLY\n.sp\nIf this bit is set, a dollar metacharacter in the pattern matches only at the\nend of the subject string. Without this option, a dollar also matches\nimmediately before a newline at the end of the string (but not before any other\nnewlines). The PCRE2_DOLLAR_ENDONLY option is ignored if PCRE2_MULTILINE is\nset. There is no equivalent to this option in Perl, and no way to set it within\na pattern.\n.sp\n  PCRE2_DOTALL\n.sp\nIf this bit is set, a dot metacharacter in the pattern matches any character,\nincluding one that indicates a newline. However, it only ever matches one\ncharacter, even if newlines are coded as CRLF. Without this option, a dot does\nnot match when the current position in the subject is at a newline. This option\nis equivalent to Perl's /s option, and it can be changed within a pattern by a\n(?s) option setting. A negative class such as [^a] always matches newline\ncharacters, and the \\eN escape sequence always matches a non-newline character,\nindependent of the setting of PCRE2_DOTALL.\n.sp\n  PCRE2_DUPNAMES\n.sp\nIf this bit is set, names used to identify capture groups need not be unique.\nThis can be helpful for certain types of pattern when it is known that only one\ninstance of the named group can ever be matched. There are more details of\nnamed capture groups below; see also the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation.\n.sp\n  PCRE2_ENDANCHORED\n.sp\nIf this bit is set, the end of any pattern match must be right at the end of\nthe string being searched (the \"subject string\"). If the pattern match\nsucceeds by reaching (*ACCEPT), but does not reach the end of the subject, the\nmatch fails at the current starting point. For unanchored patterns, a new match\nis then tried at the next starting point. However, if the match succeeds by\nreaching the end of the pattern, but not the end of the subject, backtracking\noccurs and an alternative match may be found. Consider these two patterns:\n.sp\n  .(*ACCEPT)|..\n  .|..\n.sp\nIf matched against \"abc\" with PCRE2_ENDANCHORED set, the first matches \"c\"\nwhereas the second matches \"bc\". The effect of PCRE2_ENDANCHORED can also be\nachieved by appropriate constructs in the pattern itself, which is the only way\nto do it in Perl.\n.P\nFor DFA matching with \\fBpcre2_dfa_match()\\fP, PCRE2_ENDANCHORED applies only\nto the first (that is, the longest) matched string. Other parallel matches,\nwhich are necessarily substrings of the first one, must obviously end before\nthe end of the subject.\n.sp\n  PCRE2_EXTENDED\n.sp\nIf this bit is set, most white space characters in the pattern are totally\nignored except when escaped, inside a character class, or inside a \\eQ...\\eE\nsequence. However, white space is not allowed within sequences such as (?> that\nintroduce various parenthesized groups, nor within numerical quantifiers such\nas {1,3}. Ignorable white space is permitted between an item and a following\nquantifier and between a quantifier and a following + that indicates\npossessiveness. PCRE2_EXTENDED is equivalent to Perl's /x option, and it can be\nchanged within a pattern by a (?x) option setting.\n.P\nWhen PCRE2 is compiled without Unicode support, PCRE2_EXTENDED recognizes as\nwhite space only those characters with code points less than 256 that are\nflagged as white space in its low-character table. The table is normally\ncreated by\n.\\\" HREF\n\\fBpcre2_maketables()\\fP,\n.\\\"\nwhich uses the \\fBisspace()\\fP function to identify space characters. In most\nASCII environments, the relevant characters are those with code points 0x0009\n(tab), 0x000A (linefeed), 0x000B (vertical tab), 0x000C (formfeed), 0x000D\n(carriage return), and 0x0020 (space).\n.P\nWhen PCRE2 is compiled with Unicode support, in addition to these characters,\nfive more Unicode \"Pattern White Space\" characters are recognized by\nPCRE2_EXTENDED. These are U+0085 (next line), U+200E (left-to-right mark),\nU+200F (right-to-left mark), U+2028 (line separator), and U+2029 (paragraph\nseparator). This set of characters is the same as recognized by Perl's /x\noption. Note that the horizontal and vertical space characters that are matched\nby the \\eh and \\ev escapes in patterns are a much bigger set.\n.P\nAs well as ignoring most white space, PCRE2_EXTENDED also causes characters\nbetween an unescaped # outside a character class and the next newline,\ninclusive, to be ignored, which makes it possible to include comments inside\ncomplicated patterns. Note that the end of this type of comment is a literal\nnewline sequence in the pattern; escape sequences that happen to represent a\nnewline do not count.\n.P\nWhich characters are interpreted as newlines can be specified by a setting in\nthe compile context that is passed to \\fBpcre2_compile()\\fP or by a special\nsequence at the start of the pattern, as described in the section entitled\n.\\\" HTML <a href=\"pcre2pattern.html#newlines\">\n.\\\" </a>\n\"Newline conventions\"\n.\\\"\nin the \\fBpcre2pattern\\fP documentation. A default is defined when PCRE2 is\nbuilt.\n.sp\n  PCRE2_EXTENDED_MORE\n.sp\nThis option has the effect of PCRE2_EXTENDED, but, in addition, unescaped space\nand horizontal tab characters are ignored inside a character class. Note: only\nthese two characters are ignored, not the full set of pattern white space\ncharacters that are ignored outside a character class. PCRE2_EXTENDED_MORE is\nequivalent to Perl's /xx option, and it can be changed within a pattern by a\n(?xx) option setting.\n.sp\n  PCRE2_FIRSTLINE\n.sp\nIf this option is set, the start of an unanchored pattern match must be before\nor at the first newline in the subject string following the start of matching,\nthough the matched text may continue over the newline. If \\fIstartoffset\\fP is\nnon-zero, the limiting newline is not necessarily the first newline in the\nsubject. For example, if the subject string is \"abc\\enxyz\" (where \\en\nrepresents a single-character newline) a pattern match for \"yz\" succeeds with\nPCRE2_FIRSTLINE if \\fIstartoffset\\fP is greater than 3. See also\nPCRE2_USE_OFFSET_LIMIT, which provides a more general limiting facility. If\nPCRE2_FIRSTLINE is set with an offset limit, a match must occur in the first\nline and also within the offset limit. In other words, whichever limit comes\nfirst is used. This option has no effect for anchored patterns.\n.sp\n  PCRE2_LITERAL\n.sp\nIf this option is set, all meta-characters in the pattern are disabled, and it\nis treated as a literal string. Matching literal strings with a regular\nexpression engine is not the most efficient way of doing it. If you are doing a\nlot of literal matching and are worried about efficiency, you should consider\nusing other approaches. The only other main options that are allowed with\nPCRE2_LITERAL are: PCRE2_ANCHORED, PCRE2_ENDANCHORED, PCRE2_AUTO_CALLOUT,\nPCRE2_CASELESS, PCRE2_FIRSTLINE, PCRE2_MATCH_INVALID_UTF,\nPCRE2_NO_START_OPTIMIZE, PCRE2_NO_UTF_CHECK, PCRE2_UTF, and\nPCRE2_USE_OFFSET_LIMIT. The extra options PCRE2_EXTRA_MATCH_LINE and\nPCRE2_EXTRA_MATCH_WORD are also supported. Any other options cause an error.\n.sp\n  PCRE2_MATCH_INVALID_UTF\n.sp\nThis option forces PCRE2_UTF (see below) and also enables support for matching\nby \\fBpcre2_match()\\fP in subject strings that contain invalid UTF sequences.\nNote, however, that the 16-bit and 32-bit PCRE2 libraries process strings as\nsequences of uint16_t or uint32_t code points. They cannot find valid UTF\nsequences within an arbitrary string of bytes unless such sequences are\nsuitably aligned. This facility is not supported for DFA matching. For details,\nsee the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\ndocumentation.\n.sp\n  PCRE2_MATCH_UNSET_BACKREF\n.sp\nIf this option is set, a backreference to an unset capture group matches an\nempty string (by default this causes the current matching alternative to fail).\nA pattern such as (\\e1)(a) succeeds when this option is set (assuming it can\nfind an \"a\" in the subject), whereas it fails by default, for Perl\ncompatibility. Setting this option makes PCRE2 behave more like ECMAscript (aka\nJavaScript).\n.sp\n  PCRE2_MULTILINE\n.sp\nBy default, for the purposes of matching \"start of line\" and \"end of line\",\nPCRE2 treats the subject string as consisting of a single line of characters,\neven if it actually contains newlines. The \"start of line\" metacharacter (^)\nmatches only at the start of the string, and the \"end of line\" metacharacter\n($) matches only at the end of the string, or before a terminating newline\n(except when PCRE2_DOLLAR_ENDONLY is set). Note, however, that unless\nPCRE2_DOTALL is set, the \"any character\" metacharacter (.) does not match at a\nnewline. This behaviour (for ^, $, and dot) is the same as Perl.\n.P\nWhen PCRE2_MULTILINE it is set, the \"start of line\" and \"end of line\"\nconstructs match immediately following or immediately before internal newlines\nin the subject string, respectively, as well as at the very start and end. This\nis equivalent to Perl's /m option, and it can be changed within a pattern by a\n(?m) option setting. Note that the \"start of line\" metacharacter does not match\nafter a newline at the end of the subject, for compatibility with Perl.\nHowever, you can change this by setting the PCRE2_ALT_CIRCUMFLEX option. If\nthere are no newlines in a subject string, or no occurrences of ^ or $ in a\npattern, setting PCRE2_MULTILINE has no effect.\n.sp\n  PCRE2_NEVER_BACKSLASH_C\n.sp\nThis option locks out the use of \\eC in the pattern that is being compiled.\nThis escape can cause unpredictable behaviour in UTF-8 or UTF-16 modes, because\nit may leave the current matching point in the middle of a multi-code-unit\ncharacter. This option may be useful in applications that process patterns from\nexternal sources. Note that there is also a build-time option that permanently\nlocks out the use of \\eC.\n.sp\n  PCRE2_NEVER_UCP\n.sp\nThis option locks out the use of Unicode properties for handling \\eB, \\eb, \\eD,\n\\ed, \\eS, \\es, \\eW, \\ew, and some of the POSIX character classes, as described\nfor the PCRE2_UCP option below. In particular, it prevents the creator of the\npattern from enabling this facility by starting the pattern with (*UCP). This\noption may be useful in applications that process patterns from external\nsources. The option combination PCRE2_UCP and PCRE2_NEVER_UCP causes an error.\n.sp\n  PCRE2_NEVER_UTF\n.sp\nThis option locks out interpretation of the pattern as UTF-8, UTF-16, or\nUTF-32, depending on which library is in use. In particular, it prevents the\ncreator of the pattern from switching to UTF interpretation by starting the\npattern with (*UTF). This option may be useful in applications that process\npatterns from external sources. The combination of PCRE2_UTF and\nPCRE2_NEVER_UTF causes an error.\n.sp\n  PCRE2_NO_AUTO_CAPTURE\n.sp\nIf this option is set, it disables the use of numbered capturing parentheses in\nthe pattern. Any opening parenthesis that is not followed by ? behaves as if it\nwere followed by ?: but named parentheses can still be used for capturing (and\nthey acquire numbers in the usual way). This is the same as Perl's /n option.\nNote that, when this option is set, references to capture groups\n(backreferences or recursion/subroutine calls) may only refer to named groups,\nthough the reference can be by name or by number.\n.sp\n  PCRE2_NO_AUTO_POSSESS\n.sp\nIf this (deprecated) option is set, it disables \"auto-possessification\", which\nis an optimization that, for example, turns a+b into a++b in order to avoid\nbacktracks into a+ that can never be successful. However, if callouts are in\nuse, auto-possessification means that some callouts are never taken. You can\nset this option if you want the matching functions to do a full unoptimized\nsearch and run all the callouts, but it is mainly provided for testing\npurposes.\n.P\nIf a compile context is available, it is recommended to use\n\\fBpcre2_set_optimize()\\fP with the \\fIdirective\\fP PCRE2_AUTO_POSSESS_OFF rather\nthan the compile option PCRE2_NO_AUTO_POSSESS. Note that PCRE2_NO_AUTO_POSSESS\ntakes precedence over the \\fBpcre2_set_optimize()\\fP optimization directives\nPCRE2_AUTO_POSSESS and PCRE2_AUTO_POSSESS_OFF.\n.sp\n  PCRE2_NO_DOTSTAR_ANCHOR\n.sp\nIf this (deprecated) option is set, it disables an optimization that is applied\nwhen .* is the first significant item in a top-level branch of a pattern, and\nall the other branches also start with .* or with \\eA or \\eG or ^. The\noptimization is automatically disabled for .* if it is inside an atomic group\nor a capture group that is the subject of a backreference, or if the pattern\ncontains (*PRUNE) or (*SKIP). When the optimization is not disabled, such a\npattern is automatically anchored if PCRE2_DOTALL is set for all the .* items\nand PCRE2_MULTILINE is not set for any ^ items. Otherwise, the fact that any\nmatch must start either at the start of the subject or following a newline is\nremembered. Like other optimizations, this can cause callouts to be skipped.\n(If a compile context is available, it is recommended to use\n\\fBpcre2_set_optimize()\\fP with the \\fIdirective\\fP PCRE2_DOTSTAR_ANCHOR_OFF\ninstead.)\n.sp\n  PCRE2_NO_START_OPTIMIZE\n.sp\nThis is an option whose main effect is at matching time. It does not change\nwhat \\fBpcre2_compile()\\fP generates, but it does affect the output of the JIT\ncompiler. Setting this option is equivalent to calling\n\\fBpcre2_set_optimize()\\fP with the \\fIdirective\\fP parameter set to\nPCRE2_START_OPTIMIZE_OFF.\n.P\nThere are a number of optimizations that may occur at the start of a match, in\norder to speed up the process. For example, if it is known that an unanchored\nmatch must start with a specific code unit value, the matching code searches\nthe subject for that value, and fails immediately if it cannot find it, without\nactually running the main matching function. The start-up optimizations are\nin effect a pre-scan of the subject that takes place before the pattern is run.\n.P\nDisabling the start-up optimizations may cause performance to suffer. However,\nthis may be desirable for patterns which contain callouts or items such as\n(*COMMIT) and (*MARK). See the above description of PCRE2_START_OPTIMIZE_OFF\nfor further details.\n.sp\n  PCRE2_NO_UTF_CHECK\n.sp\nWhen PCRE2_UTF is set, the validity of the pattern as a UTF string is\nautomatically checked. There are discussions about the validity of\n.\\\" HTML <a href=\"pcre2unicode.html#utf8strings\">\n.\\\" </a>\nUTF-8 strings,\n.\\\"\n.\\\" HTML <a href=\"pcre2unicode.html#utf16strings\">\n.\\\" </a>\nUTF-16 strings,\n.\\\"\nand\n.\\\" HTML <a href=\"pcre2unicode.html#utf32strings\">\n.\\\" </a>\nUTF-32 strings\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\ndocument. If an invalid UTF sequence is found, \\fBpcre2_compile()\\fP returns a\nnegative error code.\n.P\nIf you know that your pattern is a valid UTF string, and you want to skip this\ncheck for performance reasons, you can set the PCRE2_NO_UTF_CHECK option. When\nit is set, the effect of passing an invalid UTF string as a pattern is\nundefined. It may cause your program to crash or loop.\n.P\nNote that this option can also be passed to \\fBpcre2_match()\\fP and\n\\fBpcre2_dfa_match()\\fP, to suppress UTF validity checking of the subject\nstring.\n.P\nNote also that setting PCRE2_NO_UTF_CHECK at compile time does not disable the\nerror that is given if an escape sequence for an invalid Unicode code point is\nencountered in the pattern. In particular, the so-called \"surrogate\" code\npoints (0xd800 to 0xdfff) are invalid. If you want to allow escape sequences\nsuch as \\ex{d800} you can set the PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES extra\noption, as described in the section entitled \"Extra compile options\"\n.\\\" HTML <a href=\"#extracompileoptions\">\n.\\\" </a>\nbelow.\n.\\\"\nHowever, this is possible only in UTF-8 and UTF-32 modes, because these values\nare not representable in UTF-16.\n.sp\n  PCRE2_UCP\n.sp\nThis option has two effects. Firstly, it change the way PCRE2 processes \\eB,\n\\eb, \\eD, \\ed, \\eS, \\es, \\eW, \\ew, and some of the POSIX character classes. By\ndefault, only ASCII characters are recognized, but if PCRE2_UCP is set, Unicode\nproperties are used to classify characters. There are some PCRE2_EXTRA\noptions (see below) that add finer control to this behaviour. More details are\ngiven in the section on\n.\\\" HTML <a href=\"pcre2pattern.html#genericchartypes\">\n.\\\" </a>\ngeneric character types\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\npage.\n.P\nThe second effect of PCRE2_UCP is to force the use of Unicode properties for\nupper/lower casing operations, even when PCRE2_UTF is not set. This makes it\npossible to process strings in the 16-bit UCS-2 code. This option is available\nonly if PCRE2 has been compiled with Unicode support (which is the default).\n.P\nThe PCRE2_EXTRA_CASELESS_RESTRICT option (see above) restricts caseless\nmatching such that ASCII characters match only ASCII characters and non-ASCII\ncharacters match only non-ASCII characters. The PCRE2_EXTRA_TURKISH_CASING\noption (see above) alters the matching of the 'i' characters to follow their\nbehaviour in Turkish and Azeri languages. For further details on\nPCRE2_EXTRA_CASELESS_RESTRICT and PCRE2_EXTRA_TURKISH_CASING, see the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\npage.\n.sp\n  PCRE2_UNGREEDY\n.sp\nThis option inverts the \"greediness\" of the quantifiers so that they are not\ngreedy by default, but become greedy if followed by \"?\". It is not compatible\nwith Perl. It can also be set by a (?U) option setting within the pattern.\n.sp\n  PCRE2_USE_OFFSET_LIMIT\n.sp\nThis option must be set for \\fBpcre2_compile()\\fP if\n\\fBpcre2_set_offset_limit()\\fP is going to be used to set a non-default offset\nlimit in a match context for matches that use this pattern. An error is\ngenerated if an offset limit is set without this option. For more details, see\nthe description of \\fBpcre2_set_offset_limit()\\fP in the\n.\\\" HTML <a href=\"#matchcontext\">\n.\\\" </a>\nsection\n.\\\"\nthat describes match contexts. See also the PCRE2_FIRSTLINE\noption above.\n.sp\n  PCRE2_UTF\n.sp\nThis option causes PCRE2 to regard both the pattern and the subject strings\nthat are subsequently processed as strings of UTF characters instead of\nsingle-code-unit strings. It is available when PCRE2 is built to include\nUnicode support (which is the default). If Unicode support is not available,\nthe use of this option provokes an error. Details of how PCRE2_UTF changes the\nbehaviour of PCRE2 are given in the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\npage. In particular, note that it changes the way PCRE2_CASELESS works.\n.\n.\n.\\\" HTML <a name=\"extracompileoptions\"></a>\n.SS \"Extra compile options\"\n.rs\n.sp\nThe option bits that can be set in a compile context by calling the\n\\fBpcre2_set_compile_extra_options()\\fP function are as follows:\n.sp\n  PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK\n.sp\nSince release 10.38 PCRE2 has forbidden the use of \\eK within lookaround\nassertions, following Perl's lead. This option is provided to re-enable the\nprevious behaviour (act in positive lookarounds, ignore in negative ones) in\ncase anybody is relying on it.\n.sp\n  PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES\n.sp\nThis option applies when compiling a pattern in UTF-8 or UTF-32 mode. It is\nforbidden in UTF-16 mode, and ignored in non-UTF modes. Unicode \"surrogate\"\ncode points in the range 0xd800 to 0xdfff are used in pairs in UTF-16 to encode\ncode points with values in the range 0x10000 to 0x10ffff. The surrogates cannot\ntherefore be represented in UTF-16. They can be represented in UTF-8 and\nUTF-32, but are defined as invalid code points, and cause errors if encountered\nin a UTF-8 or UTF-32 string that is being checked for validity by PCRE2.\n.P\nThese values also cause errors if encountered in escape sequences such as\n\\ex{d912} within a pattern. However, it seems that some applications, when\nusing PCRE2 to check for unwanted characters in UTF-8 strings, explicitly test\nfor the surrogates using escape sequences. The PCRE2_NO_UTF_CHECK option does\nnot disable the error that occurs, because it applies only to the testing of\ninput strings for UTF validity.\n.P\nIf the extra option PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is set, surrogate code\npoint values in UTF-8 and UTF-32 patterns no longer provoke errors and are\nincorporated in the compiled pattern. However, they can only match subject\ncharacters if the matching function is called with PCRE2_NO_UTF_CHECK set.\n.sp\n  PCRE2_EXTRA_ALT_BSUX\n.sp\nThe original option PCRE2_ALT_BSUX causes PCRE2 to process \\eU, \\eu, and \\ex in\nthe way that ECMAscript (aka JavaScript) does. Additional functionality was\ndefined by ECMAscript 6; setting PCRE2_EXTRA_ALT_BSUX has the effect of\nPCRE2_ALT_BSUX, but in addition it recognizes \\eu{hhh..} as a hexadecimal\ncharacter code, where hhh.. is any number of hexadecimal digits.\n.sp\n  PCRE2_EXTRA_ASCII_BSD\n.sp\nThis option forces \\ed to match only ASCII digits, even when PCRE2_UCP is set.\nIt can be changed within a pattern by means of the (?aD) option setting.\n.sp\n  PCRE2_EXTRA_ASCII_BSS\n.sp\nThis option forces \\es to match only ASCII space characters, even when\nPCRE2_UCP is set. It can be changed within a pattern by means of the (?aS)\noption setting.\n.sp\n  PCRE2_EXTRA_ASCII_BSW\n.sp\nThis option forces \\ew to match only ASCII word characters, even when PCRE2_UCP\nis set. It can be changed within a pattern by means of the (?aW) option\nsetting.\n.sp\n  PCRE2_EXTRA_ASCII_DIGIT\n.sp\nThis option forces the POSIX character classes [:digit:] and [:xdigit:] to\nmatch only ASCII digits, even when PCRE2_UCP is set. It can be changed within\na pattern by means of the (?aT) option setting.\n.sp\n  PCRE2_EXTRA_ASCII_POSIX\n.sp\nThis option forces all the POSIX character classes, including [:digit:] and\n[:xdigit:], to match only ASCII characters, even when PCRE2_UCP is set. It can\nbe changed within a pattern by means of the (?aP) option setting, but note that\nthis also sets PCRE2_EXTRA_ASCII_DIGIT in order to ensure that (?-aP) unsets\nall ASCII restrictions for POSIX classes.\n.sp\n  PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL\n.sp\nThis is a dangerous option. Use with care. By default, an unrecognized escape\nsuch as \\ej or a malformed one such as \\ex{2z} causes a compile-time error when\ndetected by \\fBpcre2_compile()\\fP. Perl is somewhat inconsistent in handling\nsuch items: for example, \\ej is treated as a literal \"j\", and non-hexadecimal\ndigits in \\ex{} are just ignored, though warnings are given in both cases if\nPerl's warning switch is enabled. However, a malformed octal number after \\eo{\nalways causes an error in Perl.\n.P\nIf the PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL extra option is passed to\n\\fBpcre2_compile()\\fP, all unrecognized or malformed escape sequences are\ntreated as single-character escapes. For example, \\ej is a literal \"j\" and\n\\ex{2z} is treated as the literal string \"x{2z}\". Setting this option means\nthat typos in patterns may go undetected and have unexpected results. Also note\nthat a sequence such as [\\eN{] is interpreted as a malformed attempt at\n[\\eN{...}] and so is treated as [N{] whereas [\\eN] gives an error because an\nunqualified \\eN is a valid escape sequence but is not supported in a character\nclass. To reiterate: this is a dangerous option. Use with great care.\n.sp\n  PCRE2_EXTRA_CASELESS_RESTRICT\n.sp\nWhen either PCRE2_UCP or PCRE2_UTF is set, caseless matching follows Unicode\nrules, which allow for more than two cases per character. There are two\ncase-equivalent character sets that contain both ASCII and non-ASCII\ncharacters. The ASCII letter S is case-equivalent to U+017f (long S) and the\nASCII letter K is case-equivalent to U+212a (Kelvin sign). This option disables\nrecognition of case-equivalences that cross the ASCII/non-ASCII boundary. In a\ncaseless match, both characters must either be ASCII or non-ASCII. The option\ncan be changed within a pattern by the (*CASELESS_RESTRICT) or (?r) option\nsettings.\n.sp\n  PCRE2_EXTRA_ESCAPED_CR_IS_LF\n.sp\nThere are some legacy applications where the escape sequence \\er in a pattern\nis expected to match a newline. If this option is set, \\er in a pattern is\nconverted to \\en so that it matches a LF (linefeed) instead of a CR (carriage\nreturn) character. The option does not affect a literal CR in the pattern, nor\ndoes it affect CR specified as an explicit code point such as \\ex{0D}.\n.sp\n  PCRE2_EXTRA_MATCH_LINE\n.sp\nThis option is provided for use by the \\fB-x\\fP option of \\fBpcre2grep\\fP. It\ncauses the pattern only to match complete lines. This is achieved by\nautomatically inserting the code for \"^(?:\" at the start of the compiled\npattern and \")$\" at the end. Thus, when PCRE2_MULTILINE is set, the matched\nline may be in the middle of the subject string. This option can be used with\nPCRE2_LITERAL.\n.sp\n  PCRE2_EXTRA_MATCH_WORD\n.sp\nThis option is provided for use by the \\fB-w\\fP option of \\fBpcre2grep\\fP. It\ncauses the pattern only to match strings that have a word boundary at the start\nand the end. This is achieved by automatically inserting the code for \"\\eb(?:\"\nat the start of the compiled pattern and \")\\eb\" at the end. The option may be\nused with PCRE2_LITERAL. However, it is ignored if PCRE2_EXTRA_MATCH_LINE is\nalso set.\n.sp\n  PCRE2_EXTRA_NO_BS0\n.sp\nIf this option is set (note that its final character is the digit 0) it locks\nout the use of the sequence \\e0 unless at least one more octal digit follows.\n.sp\n  PCRE2_EXTRA_PYTHON_OCTAL\n.sp\nIf this option is set, PCRE2 follows Python's rules for interpreting octal\nescape sequences. The rules for handling sequences such as \\e14, which could\nbe an octal number or a back reference are different. Details are given in the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation.\n.sp\n  PCRE2_EXTRA_NEVER_CALLOUT\n.sp\nIf this option is set, PCRE2 treats callouts in the pattern as a syntax error,\nreturning PCRE2_ERROR_CALLOUT_CALLER_DISABLED. This is useful if the application\nknows that a callout will not be provided to \\fBpcre2_match()\\fP, so that\ncallouts in the pattern are not silently ignored.\n.sp\n  PCRE2_EXTRA_TURKISH_CASING\n.sp\nThis option alters case-equivalence of the 'i' letters to follow the\nalphabet used by Turkish and Azeri languages. The option can be changed within\na pattern by the (*TURKISH_CASING) start-of-pattern setting. Either the UTF or\nUCP options must be set. In the 8-bit library, UTF must be set. This option\ncannot be combined with PCRE2_EXTRA_CASELESS_RESTRICT.\n.\n.\n.\\\" HTML <a name=\"jitcompiling\"></a>\n.SH \"JUST-IN-TIME (JIT) COMPILATION\"\n.rs\n.sp\n.nf\n.B int pcre2_jit_compile(pcre2_code *\\fIcode\\fP, uint32_t \\fIoptions\\fP);\n.sp\n.B int pcre2_jit_match(const pcre2_code *\\fIcode\\fP, PCRE2_SPTR \\fIsubject\\fP,\n.B \"  PCRE2_SIZE \\fIlength\\fP, PCRE2_SIZE \\fIstartoffset\\fP,\"\n.B \"  uint32_t \\fIoptions\\fP, pcre2_match_data *\\fImatch_data\\fP,\"\n.B \"  pcre2_match_context *\\fImcontext\\fP);\"\n.sp\n.B void pcre2_jit_free_unused_memory(pcre2_general_context *\\fIgcontext\\fP);\n.sp\n.B pcre2_jit_stack *pcre2_jit_stack_create(size_t \\fIstartsize\\fP,\n.B \"  size_t \\fImaxsize\\fP, pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B void pcre2_jit_stack_assign(pcre2_match_context *\\fImcontext\\fP,\n.B \"  pcre2_jit_callback \\fIcallback_function\\fP, void *\\fIcallback_data\\fP);\"\n.sp\n.B void pcre2_jit_stack_free(pcre2_jit_stack *\\fIjit_stack\\fP);\n.fi\n.P\nThese functions provide support for JIT compilation, which, if the just-in-time\ncompiler is available, further processes a compiled pattern into machine code\nthat executes much faster than the \\fBpcre2_match()\\fP interpretive matching\nfunction. Full details are given in the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\ndocumentation.\n.P\nJIT compilation is a heavyweight optimization. It can take some time for\npatterns to be analyzed, and for one-off matches and simple patterns the\nbenefit of faster execution might be offset by a much slower compilation time.\nMost (but not all) patterns can be optimized by the JIT compiler.\n.\n.\n.\\\" HTML <a name=\"localesupport\"></a>\n.SH \"LOCALE SUPPORT\"\n.rs\n.sp\n.nf\n.B const uint8_t *pcre2_maketables(pcre2_general_context *\\fIgcontext\\fP);\n.sp\n.B void pcre2_maketables_free(pcre2_general_context *\\fIgcontext\\fP,\n.B \"  const uint8_t *\\fItables\\fP);\"\n.fi\n.P\nPCRE2 handles caseless matching, and determines whether characters are letters,\ndigits, or whatever, by reference to a set of tables, indexed by character code\npoint. However, this applies only to characters whose code points are less than\n256. By default, higher-valued code points never match escapes such as \\ew or\n\\ed.\n.P\nWhen PCRE2 is built with Unicode support (the default), certain Unicode\ncharacter properties can be tested with \\ep and \\eP, or, alternatively, the\nPCRE2_UCP option can be set when a pattern is compiled; this causes \\ew and\nfriends to use Unicode property support instead of the built-in tables.\nPCRE2_UCP also causes upper/lower casing operations on characters with code\npoints greater than 127 to use Unicode properties. These effects apply even\nwhen PCRE2_UTF is not set. There are, however, some PCRE2_EXTRA options (see\nabove) that can be used to modify or suppress them.\n.P\nThe use of locales with Unicode is discouraged. If you are handling characters\nwith code points greater than 127, you should either use Unicode support, or\nuse locales, but not try to mix the two.\n.P\nPCRE2 contains a built-in set of character tables that are used by default.\nThese are sufficient for many applications. Normally, the internal tables\nrecognize only ASCII characters. However, when PCRE2 is built, it is possible\nto cause the internal tables to be rebuilt in the default \"C\" locale of the\nlocal system, which may cause them to be different.\n.P\nThe built-in tables can be overridden by tables supplied by the application\nthat calls PCRE2. These may be created in a different locale from the default.\nAs more and more applications change to using Unicode, the need for this locale\nsupport is expected to die away.\n.P\nExternal tables are built by calling the \\fBpcre2_maketables()\\fP function, in\nthe relevant locale. The only argument to this function is a general context,\nwhich can be used to pass a custom memory allocator. If the argument is NULL,\nthe system \\fBmalloc()\\fP is used. The result can be passed to\n\\fBpcre2_compile()\\fP as often as necessary, by creating a compile context and\ncalling \\fBpcre2_set_character_tables()\\fP to set the tables pointer therein.\n.P\nFor example, to build and use tables that are appropriate for the French locale\n(where accented characters with values greater than 127 are treated as\nletters), the following code could be used:\n.sp\n  setlocale(LC_CTYPE, \"fr_FR\");\n  tables = pcre2_maketables(NULL);\n  ccontext = pcre2_compile_context_create(NULL);\n  pcre2_set_character_tables(ccontext, tables);\n  re = pcre2_compile(..., ccontext);\n.sp\nThe locale name \"fr_FR\" is used on Linux and other Unix-like systems; if you\nare using Windows, the name for the French locale is \"french\".\n.P\nThe pointer that is passed (via the compile context) to \\fBpcre2_compile()\\fP\nis saved with the compiled pattern, and the same tables are used by the\nmatching functions. Thus, for any single pattern, compilation and matching both\nhappen in the same locale, but different patterns can be processed in different\nlocales.\n.P\nIt is the caller's responsibility to ensure that the memory containing the\ntables remains available while they are still in use. When they are no longer\nneeded, you can discard them using \\fBpcre2_maketables_free()\\fP, which should\npass as its first parameter the same global context that was used to create the\ntables.\n.\n.\n.SS \"Saving locale tables\"\n.rs\n.sp\nThe tables described above are just a sequence of binary bytes, which makes\nthem independent of hardware characteristics such as endianness or whether the\nprocessor is 32-bit or 64-bit. A copy of the result of \\fBpcre2_maketables()\\fP\ncan therefore be saved in a file or elsewhere and re-used later, even in a\ndifferent program or on another computer. The size of the tables (number of\nbytes) must be obtained by calling \\fBpcre2_config()\\fP with the\nPCRE2_CONFIG_TABLES_LENGTH option because \\fBpcre2_maketables()\\fP does not\nreturn this value. Note that the \\fBpcre2_dftables\\fP program, which is part of\nthe PCRE2 build system, can be used stand-alone to create a file that contains\na set of binary tables. See the\n.\\\" HTML <a href=\"pcre2build.html#createtables\">\n.\\\" </a>\n\\fBpcre2build\\fP\n.\\\"\ndocumentation for details.\n.\n.\n.\\\" HTML <a name=\"infoaboutpattern\"></a>\n.SH \"INFORMATION ABOUT A COMPILED PATTERN\"\n.rs\n.sp\n.nf\n.B int pcre2_pattern_info(const pcre2 *\\fIcode\\fP, uint32_t \\fIwhat\\fP, void *\\fIwhere\\fP);\n.fi\n.P\nThe \\fBpcre2_pattern_info()\\fP function returns general information about a\ncompiled pattern. For information about callouts, see the\n.\\\" HTML <a href=\"#infoaboutcallouts\">\n.\\\" </a>\nnext section.\n.\\\"\nThe first argument for \\fBpcre2_pattern_info()\\fP is a pointer to the compiled\npattern. The second argument specifies which piece of information is required,\nand the third argument is a pointer to a variable to receive the data. If the\nthird argument is NULL, the first argument is ignored, and the function returns\nthe size in bytes of the variable that is required for the information\nrequested. Otherwise, the yield of the function is zero for success, or one of\nthe following negative numbers:\n.sp\n  PCRE2_ERROR_NULL           the argument \\fIcode\\fP was NULL\n  PCRE2_ERROR_BADMAGIC       the \"magic number\" was not found\n  PCRE2_ERROR_BADOPTION      the value of \\fIwhat\\fP was invalid\n  PCRE2_ERROR_UNSET          the requested field is not set\n.sp\nThe \"magic number\" is placed at the start of each compiled pattern as a simple\ncheck against passing an arbitrary memory pointer. Here is a typical call of\n\\fBpcre2_pattern_info()\\fP, to obtain the length of the compiled pattern:\n.sp\n  int rc;\n  size_t length;\n  rc = pcre2_pattern_info(\n    re,               /* result of pcre2_compile() */\n    PCRE2_INFO_SIZE,  /* what is required */\n    &length);         /* where to put the data */\n.sp\nThe possible values for the second argument are defined in \\fBpcre2.h\\fP, and\nare as follows:\n.sp\n  PCRE2_INFO_ALLOPTIONS\n  PCRE2_INFO_ARGOPTIONS\n  PCRE2_INFO_EXTRAOPTIONS\n.sp\nReturn copies of the pattern's options. The third argument should point to a\n\\fBuint32_t\\fP variable. PCRE2_INFO_ARGOPTIONS returns exactly the options that\nwere passed to \\fBpcre2_compile()\\fP, whereas PCRE2_INFO_ALLOPTIONS returns\nthe compile options as modified by any top-level (*XXX) option settings such as\n(*UTF) at the start of the pattern itself. PCRE2_INFO_EXTRAOPTIONS returns the\nextra options that were set in the compile context by calling the\npcre2_set_compile_extra_options() function.\n.P\nFor example, if the pattern /(*UTF)abc/ is compiled with the PCRE2_EXTENDED\noption, the result for PCRE2_INFO_ALLOPTIONS is PCRE2_EXTENDED and PCRE2_UTF.\nOption settings such as (?i) that can change within a pattern do not affect the\nresult of PCRE2_INFO_ALLOPTIONS, even if they appear right at the start of the\npattern. (This was different in some earlier releases.)\n.P\nA pattern compiled without PCRE2_ANCHORED is automatically anchored by PCRE2 if\nthe first significant item in every top-level branch is one of the following:\n.sp\n  ^     unless PCRE2_MULTILINE is set\n  \\eA    always\n  \\eG    always\n  .*    sometimes - see below\n.sp\nWhen .* is the first significant item, anchoring is possible only when all the\nfollowing are true:\n.sp\n  .* is not in an atomic group\n.\\\" JOIN\n  .* is not in a capture group that is the subject\n       of a backreference\n  PCRE2_DOTALL is in force for .*\n  Neither (*PRUNE) nor (*SKIP) appears in the pattern\n  PCRE2_NO_DOTSTAR_ANCHOR is not set\n  Dotstar anchoring has not been disabled with PCRE2_DOTSTAR_ANCHOR_OFF\n.sp\nFor patterns that are auto-anchored, the PCRE2_ANCHORED bit is set in the\noptions returned for PCRE2_INFO_ALLOPTIONS.\n.sp\n  PCRE2_INFO_BACKREFMAX\n.sp\nReturn the number of the highest backreference in the pattern. The third\nargument should point to a \\fBuint32_t\\fP variable. Named capture groups\nacquire numbers as well as names, and these count towards the highest\nbackreference. Backreferences such as \\e4 or \\eg{12} match the captured\ncharacters of the given group, but in addition, the check that a capture\ngroup is set in a conditional group such as (?(3)a|b) is also a backreference.\nZero is returned if there are no backreferences.\n.sp\n  PCRE2_INFO_BSR\n.sp\nThe output is a uint32_t integer whose value indicates what character sequences\nthe \\eR escape sequence matches. A value of PCRE2_BSR_UNICODE means that \\eR\nmatches any Unicode line ending sequence; a value of PCRE2_BSR_ANYCRLF means\nthat \\eR matches only CR, LF, or CRLF.\n.sp\n  PCRE2_INFO_CAPTURECOUNT\n.sp\nReturn the highest capture group number in the pattern. In patterns where (?|\nis not used, this is also the total number of capture groups. The third\nargument should point to a \\fBuint32_t\\fP variable.\n.sp\n  PCRE2_INFO_DEPTHLIMIT\n.sp\nIf the pattern set a backtracking depth limit by including an item of the form\n(*LIMIT_DEPTH=nnnn) at the start, the value is returned. The third argument\nshould point to a uint32_t integer. If no such value has been set, the call to\n\\fBpcre2_pattern_info()\\fP returns the error PCRE2_ERROR_UNSET. Note that this\nlimit will only be used during matching if it is less than the limit set or\ndefaulted by the caller of the match function.\n.sp\n  PCRE2_INFO_FIRSTBITMAP\n.sp\nIn the absence of a single first code unit for a non-anchored pattern,\n\\fBpcre2_compile()\\fP may construct a 256-bit table that defines a fixed set of\nvalues for the first code unit in any match. For example, a pattern that starts\nwith [abc] results in a table with three bits set. When code unit values\ngreater than 255 are supported, the flag bit for 255 means \"any code unit of\nvalue 255 or above\". If such a table was constructed, a pointer to it is\nreturned. Otherwise NULL is returned. The third argument should point to a\n\\fBconst uint8_t *\\fP variable.\n.sp\n  PCRE2_INFO_FIRSTCODETYPE\n.sp\nReturn information about the first code unit of any matched string, for a\nnon-anchored pattern. The third argument should point to a \\fBuint32_t\\fP\nvariable. If there is a fixed first value, for example, the letter \"c\" from a\npattern such as (cat|cow|coyote), 1 is returned, and the value can be retrieved\nusing PCRE2_INFO_FIRSTCODEUNIT. If there is no fixed first value, but it is\nknown that a match can occur only at the start of the subject or following a\nnewline in the subject, 2 is returned. Otherwise, and for anchored patterns, 0\nis returned.\n.sp\n  PCRE2_INFO_FIRSTCODEUNIT\n.sp\nReturn the value of the first code unit of any matched string for a pattern\nwhere PCRE2_INFO_FIRSTCODETYPE returns 1; otherwise return 0. The third\nargument should point to a \\fBuint32_t\\fP variable. In the 8-bit library, the\nvalue is always less than 256. In the 16-bit library the value can be up to\n0xffff. In the 32-bit library in UTF-32 mode the value can be up to 0x10ffff,\nand up to 0xffffffff when not using UTF-32 mode.\n.sp\n  PCRE2_INFO_FRAMESIZE\n.sp\nReturn the size (in bytes) of the data frames that are used to remember\nbacktracking positions when the pattern is processed by \\fBpcre2_match()\\fP\nwithout the use of JIT. The third argument should point to a \\fBsize_t\\fP\nvariable. The frame size depends on the number of capturing parentheses in the\npattern. Each additional capture group adds two PCRE2_SIZE variables.\n.sp\n  PCRE2_INFO_HASBACKSLASHC\n.sp\nReturn 1 if the pattern contains any instances of \\eC, otherwise 0. The third\nargument should point to a \\fBuint32_t\\fP variable.\n.sp\n  PCRE2_INFO_HASCRORLF\n.sp\nReturn 1 if the pattern contains any explicit matches for CR or LF characters,\notherwise 0. The third argument should point to a \\fBuint32_t\\fP variable. An\nexplicit match is either a literal CR or LF character, or \\er or \\en or one of\nthe equivalent hexadecimal or octal escape sequences.\n.sp\n  PCRE2_INFO_HEAPLIMIT\n.sp\nIf the pattern set a heap memory limit by including an item of the form\n(*LIMIT_HEAP=nnnn) at the start, the value is returned. The third argument\nshould point to a uint32_t integer. If no such value has been set, the call to\n\\fBpcre2_pattern_info()\\fP returns the error PCRE2_ERROR_UNSET. Note that this\nlimit will only be used during matching if it is less than the limit set or\ndefaulted by the caller of the match function.\n.sp\n  PCRE2_INFO_JCHANGED\n.sp\nReturn 1 if the (?J) or (?-J) option setting is used in the pattern, otherwise\n0. The third argument should point to a \\fBuint32_t\\fP variable. (?J) and\n(?-J) set and unset the local PCRE2_DUPNAMES option, respectively.\n.sp\n  PCRE2_INFO_JITSIZE\n.sp\nIf the compiled pattern was successfully processed by\n\\fBpcre2_jit_compile()\\fP, return the size of the JIT compiled code, otherwise\nreturn zero. The third argument should point to a \\fBsize_t\\fP variable.\n.sp\n  PCRE2_INFO_LASTCODETYPE\n.sp\nReturns 1 if there is a rightmost literal code unit that must exist in any\nmatched string, other than at its start. The third argument should point to a\n\\fBuint32_t\\fP variable. If there is no such value, 0 is returned. When 1 is\nreturned, the code unit value itself can be retrieved using\nPCRE2_INFO_LASTCODEUNIT. For anchored patterns, a last literal value is\nrecorded only if it follows something of variable length. For example, for the\npattern /^a\\ed+z\\ed+/ the returned value is 1 (with \"z\" returned from\nPCRE2_INFO_LASTCODEUNIT), but for /^a\\edz\\ed/ the returned value is 0.\n.sp\n  PCRE2_INFO_LASTCODEUNIT\n.sp\nReturn the value of the rightmost literal code unit that must exist in any\nmatched string, other than at its start, for a pattern where\nPCRE2_INFO_LASTCODETYPE returns 1. Otherwise, return 0. The third argument\nshould point to a \\fBuint32_t\\fP variable.\n.sp\n  PCRE2_INFO_MATCHEMPTY\n.sp\nReturn 1 if the pattern might match an empty string, otherwise 0. The third\nargument should point to a \\fBuint32_t\\fP variable. When a pattern contains\nrecursive subroutine calls it is not always possible to determine whether or\nnot it can match an empty string. PCRE2 takes a cautious approach and returns 1\nin such cases.\n.sp\n  PCRE2_INFO_MATCHLIMIT\n.sp\nIf the pattern set a match limit by including an item of the form\n(*LIMIT_MATCH=nnnn) at the start, the value is returned. The third argument\nshould point to a uint32_t integer. If no such value has been set, the call to\n\\fBpcre2_pattern_info()\\fP returns the error PCRE2_ERROR_UNSET. Note that this\nlimit will only be used during matching if it is less than the limit set or\ndefaulted by the caller of the match function.\n.sp\n  PCRE2_INFO_MAXLOOKBEHIND\n.sp\nA lookbehind assertion moves back a certain number of characters (not code\nunits) when it starts to process each of its branches. This request returns the\nlargest of these backward moves. The third argument should point to a uint32_t\ninteger. The simple assertions \\eb and \\eB require a one-character lookbehind\nand cause PCRE2_INFO_MAXLOOKBEHIND to return 1 in the absence of anything\nlonger. \\eA also registers a one-character lookbehind, though it does not\nactually inspect the previous character.\n.P\nNote that this information is useful for multi-segment matching only\nif the pattern contains no nested lookbehinds. For example, the pattern\n(?<=a(?<=ba)c) returns a maximum lookbehind of 2, but when it is processed, the\nfirst lookbehind moves back by two characters, matches one character, then the\nnested lookbehind also moves back by two characters. This puts the matching\npoint three characters earlier than it was at the start.\nPCRE2_INFO_MAXLOOKBEHIND is really only useful as a debugging tool. See the\n.\\\" HREF\n\\fBpcre2partial\\fP\n.\\\"\ndocumentation for a discussion of multi-segment matching.\n.sp\n  PCRE2_INFO_MINLENGTH\n.sp\nIf a minimum length for matching subject strings was computed, its value is\nreturned. Otherwise the returned value is 0. This value is not computed when\nPCRE2_NO_START_OPTIMIZE is set. The value is a number of characters, which in\nUTF mode may be different from the number of code units. The third argument\nshould point to a \\fBuint32_t\\fP variable. The value is a lower bound to the\nlength of any matching string. There may not be any strings of that length that\ndo actually match, but every string that does match is at least that long.\n.sp\n  PCRE2_INFO_NAMECOUNT\n  PCRE2_INFO_NAMEENTRYSIZE\n  PCRE2_INFO_NAMETABLE\n.sp\nPCRE2 supports the use of named as well as numbered capturing parentheses. The\nnames are just an additional way of identifying the parentheses, which still\nacquire numbers. Several convenience functions such as\n\\fBpcre2_substring_get_byname()\\fP are provided for extracting captured\nsubstrings by name. It is also possible to extract the data directly, by first\nconverting the name to a number in order to access the correct pointers in the\noutput vector (described with \\fBpcre2_match()\\fP below). To do the conversion,\nyou need to use the name-to-number map, which is described by these three\nvalues.\n.P\nThe map consists of a number of fixed-size entries. PCRE2_INFO_NAMECOUNT gives\nthe number of entries, and PCRE2_INFO_NAMEENTRYSIZE gives the size of each\nentry in code units; both of these return a \\fBuint32_t\\fP value. The entry\nsize depends on the length of the longest name.\n.P\nPCRE2_INFO_NAMETABLE returns a pointer to the first entry of the table. This is\na PCRE2_SPTR pointer to a block of code units. In the 8-bit library, the first\ntwo bytes of each entry are the number of the capturing parenthesis, most\nsignificant byte first. In the 16-bit library, the pointer points to 16-bit\ncode units, the first of which contains the parenthesis number. In the 32-bit\nlibrary, the pointer points to 32-bit code units, the first of which contains\nthe parenthesis number. The rest of the entry is the corresponding name, zero\nterminated.\n.P\nThe names are in alphabetical order. If (?| is used to create multiple capture\ngroups with the same number, as described in the\n.\\\" HTML <a href=\"pcre2pattern.html#dupgroupnumber\">\n.\\\" </a>\nsection on duplicate group numbers\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\npage, the groups may be given the same name, but there is only one entry in the\ntable. Different names for groups of the same number are not permitted.\n.P\nDuplicate names for capture groups with different numbers are permitted, but\nonly if PCRE2_DUPNAMES is set. They appear in the table in the order in which\nthey were found in the pattern. In the absence of (?| this is the order of\nincreasing number; when (?| is used this is not necessarily the case because\nlater capture groups may have lower numbers.\n.P\nAs a simple example of the name/number table, consider the following pattern\nafter compilation by the 8-bit library (assume PCRE2_EXTENDED is set, so white\nspace - including newlines - is ignored):\n.sp\n.\\\" JOIN\n  (?<date> (?<year>(\\ed\\ed)?\\ed\\ed) -\n  (?<month>\\ed\\ed) - (?<day>\\ed\\ed) )\n.sp\nThere are four named capture groups, so the table has four entries, and each\nentry in the table is eight bytes long. The table is as follows, with\nnon-printing bytes shows in hexadecimal, and undefined bytes shown as ??:\n.sp\n  00 01 d  a  t  e  00 ??\n  00 05 d  a  y  00 ?? ??\n  00 04 m  o  n  t  h  00\n  00 02 y  e  a  r  00 ??\n.sp\nWhen writing code to extract data from named capture groups using the\nname-to-number map, remember that the length of the entries is likely to be\ndifferent for each compiled pattern.\n.sp\n  PCRE2_INFO_NEWLINE\n.sp\nThe output is one of the following \\fBuint32_t\\fP values:\n.sp\n  PCRE2_NEWLINE_CR       Carriage return (CR)\n  PCRE2_NEWLINE_LF       Linefeed (LF)\n  PCRE2_NEWLINE_CRLF     Carriage return, linefeed (CRLF)\n  PCRE2_NEWLINE_ANY      Any Unicode line ending\n  PCRE2_NEWLINE_ANYCRLF  Any of CR, LF, or CRLF\n  PCRE2_NEWLINE_NUL      The NUL character (binary zero)\n.sp\nThis identifies the character sequence that will be recognized as meaning\n\"newline\" while matching.\n.sp\n  PCRE2_INFO_SIZE\n.sp\nReturn the size of the compiled pattern in bytes (for all three libraries). The\nthird argument should point to a \\fBsize_t\\fP variable. This value includes the\nsize of the general data block that precedes the code units of the compiled\npattern itself. The value that is used when \\fBpcre2_compile()\\fP is getting\nmemory in which to place the compiled pattern may be slightly larger than the\nvalue returned by this option, because there are cases where the code that\ncalculates the size has to over-estimate. Processing a pattern with the JIT\ncompiler does not alter the value returned by this option.\n.\n.\n.\\\" HTML <a name=\"infoaboutcallouts\"></a>\n.SH \"INFORMATION ABOUT A PATTERN'S CALLOUTS\"\n.rs\n.sp\n.nf\n.B int pcre2_callout_enumerate(const pcre2_code *\\fIcode\\fP,\n.B \"  int (*\\fIcallback\\fP)(pcre2_callout_enumerate_block *, void *),\"\n.B \"  void *\\fIuser_data\\fP);\"\n.fi\n.sp\nA script language that supports the use of string arguments in callouts might\nlike to scan all the callouts in a pattern before running the match. This can\nbe done by calling \\fBpcre2_callout_enumerate()\\fP. The first argument is a\npointer to a compiled pattern, the second points to a callback function, and\nthe third is arbitrary user data. The callback function is called for every\ncallout in the pattern in the order in which they appear. Its first argument is\na pointer to a callout enumeration block, and its second argument is the\n\\fIuser_data\\fP value that was passed to \\fBpcre2_callout_enumerate()\\fP. The\ncontents of the callout enumeration block are described in the\n.\\\" HREF\n\\fBpcre2callout\\fP\n.\\\"\ndocumentation, which also gives further details about callouts.\n.\n.\n.SH \"SERIALIZATION AND PRECOMPILING\"\n.rs\n.sp\nIt is possible to save compiled patterns on disc or elsewhere, and reload them\nlater, subject to a number of restrictions. The host on which the patterns are\nreloaded must be running the same version of PCRE2, with the same code unit\nwidth, and must also have the same endianness, pointer width, and PCRE2_SIZE\ntype. Before compiled patterns can be saved, they must be converted to a\n\"serialized\" form, which in the case of PCRE2 is really just a bytecode dump.\nThe functions whose names begin with \\fBpcre2_serialize_\\fP are used for\nconverting to and from the serialized form. They are described in the\n.\\\" HREF\n\\fBpcre2serialize\\fP\n.\\\"\ndocumentation. Note that PCRE2 serialization does not convert compiled patterns\nto an abstract format like Java or .NET serialization.\n.\n.\n.\\\" HTML <a name=\"matchdatablock\"></a>\n.SH \"THE MATCH DATA BLOCK\"\n.rs\n.sp\n.nf\n.B pcre2_match_data *pcre2_match_data_create(uint32_t \\fIovecsize\\fP,\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B pcre2_match_data *pcre2_match_data_create_from_pattern(\n.B \"  const pcre2_code *\\fIcode\\fP, pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B void pcre2_match_data_free(pcre2_match_data *\\fImatch_data\\fP);\n.fi\n.P\nInformation about a successful or unsuccessful match is placed in a match\ndata block, which is an opaque structure that is accessed by function calls. In\nparticular, the match data block contains a vector of offsets into the subject\nstring that define the matched parts of the subject. This is known as the\n\\fIovector\\fP.\n.P\nBefore calling \\fBpcre2_match()\\fP, \\fBpcre2_dfa_match()\\fP, or\n\\fBpcre2_jit_match()\\fP you must create a match data block by calling one of\nthe creation functions above. For \\fBpcre2_match_data_create()\\fP, the first\nargument is the number of pairs of offsets in the \\fIovector\\fP.\n.P\nWhen using \\fBpcre2_match()\\fP, one pair of offsets is required to identify the\nstring that matched the whole pattern, with an additional pair for each\ncaptured substring. For example, a value of 4 creates enough space to record\nthe matched portion of the subject plus three captured substrings.\n.P\nWhen using \\fBpcre2_dfa_match()\\fP there may be multiple matched substrings of\ndifferent lengths at the same point in the subject. The ovector should be made\nlarge enough to hold as many as are expected.\n.P\nA minimum of at least 1 pair is imposed by \\fBpcre2_match_data_create()\\fP, so\nit is always possible to return the overall matched string in the case of\n\\fBpcre2_match()\\fP or the longest match in the case of\n\\fBpcre2_dfa_match()\\fP. The maximum number of pairs is 65535; if the first\nargument of \\fBpcre2_match_data_create()\\fP is greater than this, 65535 is\nused.\n.P\nThe second argument of \\fBpcre2_match_data_create()\\fP is a pointer to a\ngeneral context, which can specify custom memory management for obtaining the\nmemory for the match data block. If you are not using custom memory management,\npass NULL, which causes \\fBmalloc()\\fP to be used.\n.P\nFor \\fBpcre2_match_data_create_from_pattern()\\fP, the first argument is a\npointer to a compiled pattern. The ovector is created to be exactly the right\nsize to hold all the substrings a pattern might capture when matched using\n\\fBpcre2_match()\\fP. You should not use this call when matching with\n\\fBpcre2_dfa_match()\\fP. The second argument is again a pointer to a general\ncontext, but in this case if NULL is passed, the memory is obtained using the\nsame allocator that was used for the compiled pattern (custom or default).\n.P\nA match data block can be used many times, with the same or different compiled\npatterns. You can extract information from a match data block after a match\noperation has finished, using functions that are described in the sections on\n.\\\" HTML <a href=\"#matchedstrings\">\n.\\\" </a>\nmatched strings\n.\\\"\nand\n.\\\" HTML <a href=\"#matchotherdata\">\n.\\\" </a>\nother match data\n.\\\"\nbelow.\n.P\nWhen a call of \\fBpcre2_match()\\fP fails, valid data is available in the match\nblock only when the error is PCRE2_ERROR_NOMATCH, PCRE2_ERROR_PARTIAL, or one\nof the error codes for an invalid UTF string. Exactly what is available depends\non the error, and is detailed below.\n.P\nWhen one of the matching functions is called, pointers to the compiled pattern\nand the subject string are set in the match data block so that they can be\nreferenced by the extraction functions after a successful match. After running\na match, you must not free a compiled pattern or a subject string until after\nall operations on the match data block (for that match) have taken place,\nunless, in the case of the subject string, you have used the\nPCRE2_COPY_MATCHED_SUBJECT option, which is described in the section entitled\n\"Option bits for \\fBpcre2_match()\\fP\"\n.\\\" HTML <a href=\"#matchoptions>\">\n.\\\" </a>\nbelow.\n.\\\"\n.P\nWhen a match data block itself is no longer needed, it should be freed by\ncalling \\fBpcre2_match_data_free()\\fP. If this function is called with a NULL\nargument, it returns immediately, without doing anything.\n.\n.\n.SH \"MEMORY USE FOR MATCH DATA BLOCKS\"\n.rs\n.sp\n.nf\n.B PCRE2_SIZE pcre2_get_match_data_size(pcre2_match_data *\\fImatch_data\\fP);\n.sp\n.B PCRE2_SIZE pcre2_get_match_data_heapframes_size(\n.B \"  pcre2_match_data *\\fImatch_data\\fP);\"\n.fi\n.P\nThe size of a match data block depends on the size of the ovector that it\ncontains. The function \\fBpcre2_get_match_data_size()\\fP returns the size, in\nbytes, of the block that is its argument.\n.P\nWhen \\fBpcre2_match()\\fP runs interpretively (that is, without using JIT), it\nmakes use of a vector of data frames for remembering backtracking positions.\nThe size of each individual frame depends on the number of capturing\nparentheses in the pattern and can be obtained by calling\n\\fBpcre2_pattern_info()\\fP with the PCRE2_INFO_FRAMESIZE option (see the\nsection entitled \"Information about a compiled pattern\"\n.\\\" HTML <a href=\"#infoaboutpattern>\">\n.\\\" </a>\nabove).\n.\\\"\n.P\nHeap memory is used for the frames vector; if the initial memory block turns\nout to be too small during matching, it is automatically expanded. When\n\\fBpcre2_match()\\fP returns, the memory is not freed, but remains attached to\nthe match data block, for use by any subsequent matches that use the same\nblock. It is automatically freed when the match data block itself is freed.\n.P\nYou can find the current size of the frames vector that a match data block owns\nby calling \\fBpcre2_get_match_data_heapframes_size()\\fP. For a newly created\nmatch data block the size will be zero. Some types of match may require a lot\nof frames and thus a large vector; applications that run in environments where\nmemory is constrained can check this and free the match data block if the heap\nframes vector has become too big.\n.\n.\n.SH \"MATCHING A PATTERN: THE TRADITIONAL FUNCTION\"\n.rs\n.sp\n.nf\n.B int pcre2_match(const pcre2_code *\\fIcode\\fP, PCRE2_SPTR \\fIsubject\\fP,\n.B \"  PCRE2_SIZE \\fIlength\\fP, PCRE2_SIZE \\fIstartoffset\\fP,\"\n.B \"  uint32_t \\fIoptions\\fP, pcre2_match_data *\\fImatch_data\\fP,\"\n.B \"  pcre2_match_context *\\fImcontext\\fP);\"\n.fi\n.P\nThe function \\fBpcre2_match()\\fP is called to match a subject string against a\ncompiled pattern, which is passed in the \\fIcode\\fP argument. You can call\n\\fBpcre2_match()\\fP with the same \\fIcode\\fP argument as many times as you\nlike, in order to find multiple matches in the subject string or to match\ndifferent subject strings with the same pattern.\n.P\nThis function is the main matching facility of the library, and it operates in\na Perl-like manner. For specialist use there is also an alternative matching\nfunction, which is described\n.\\\" HTML <a href=\"#dfamatch\">\n.\\\" </a>\nbelow\n.\\\"\nin the section about the \\fBpcre2_dfa_match()\\fP function.\n.P\nHere is an example of a simple call to \\fBpcre2_match()\\fP:\n.sp\n  pcre2_match_data *md = pcre2_match_data_create(4, NULL);\n  int rc = pcre2_match(\n    re,             /* result of pcre2_compile() */\n    \"some string\",  /* the subject string */\n    11,             /* the length of the subject string */\n    0,              /* start at offset 0 in the subject */\n    0,              /* default options */\n    md,             /* the match data block */\n    NULL);          /* a match context; NULL means use defaults */\n.sp\nIf the subject string is zero-terminated, the length can be given as\nPCRE2_ZERO_TERMINATED. A match context must be provided if certain less common\nmatching parameters are to be changed. For details, see the section on\n.\\\" HTML <a href=\"#matchcontext\">\n.\\\" </a>\nthe match context\n.\\\"\nabove.\n.\n.\n.SS \"The string to be matched by \\fBpcre2_match()\\fP\"\n.rs\n.sp\nThe subject string is passed to \\fBpcre2_match()\\fP as a pointer in\n\\fIsubject\\fP, a length in \\fIlength\\fP, and a starting offset in\n\\fIstartoffset\\fP. The length and offset are in code units, not characters.\nThat is, they are in bytes for the 8-bit library, 16-bit code units for the\n16-bit library, and 32-bit code units for the 32-bit library, whether or not\nUTF processing is enabled. As a special case, if \\fIsubject\\fP is NULL and\n\\fIlength\\fP is zero, the subject is assumed to be an empty string. If\n\\fIlength\\fP is non-zero, an error occurs if \\fIsubject\\fP is NULL.\n.P\nIf \\fIstartoffset\\fP is greater than the length of the subject,\n\\fBpcre2_match()\\fP returns PCRE2_ERROR_BADOFFSET. When the starting offset is\nzero, the search for a match starts at the beginning of the subject, and this\nis by far the most common case. In UTF-8 or UTF-16 mode, the starting offset\nmust point to the start of a character, or to the end of the subject (in UTF-32\nmode, one code unit equals one character, so all offsets are valid). Like the\npattern string, the subject may contain binary zeros.\n.P\nA non-zero starting offset is useful when searching for another match in the\nsame subject by calling \\fBpcre2_match()\\fP again after a previous success.\nSetting \\fIstartoffset\\fP differs from passing over a shortened string and\nsetting PCRE2_NOTBOL in the case of a pattern that begins with any kind of\nlookbehind. For example, consider the pattern\n.sp\n  \\eBiss\\eB\n.sp\nwhich finds occurrences of \"iss\" in the middle of words. (\\eB matches only if\nthe current position in the subject is not a word boundary.) When applied to\nthe string \"Mississippi\" the first call to \\fBpcre2_match()\\fP finds the first\noccurrence. If \\fBpcre2_match()\\fP is called again with just the remainder of\nthe subject, namely \"issippi\", it does not match, because \\eB is always false\nat the start of the subject, which is deemed to be a word boundary. However, if\n\\fBpcre2_match()\\fP is passed the entire string again, but with\n\\fIstartoffset\\fP set to 4, it finds the second occurrence of \"iss\" because it\nis able to look behind the starting point to discover that it is preceded by a\nletter.\n.P\nFinding all the matches in a subject is tricky when the pattern can match an\nempty string. PCRE2 includes a helper API to assist with this; see the\nsection entitled \"Iterating over all matches\"\n.\\\" HTML <a href=\"#matchiter\">\n.\\\" </a>\nbelow\n.\\\"\nfor details.\n.P\nIf a non-zero starting offset is passed when the pattern is anchored, a single\nattempt to match at the given offset is made. This can only succeed if the\npattern does not require the match to be at the start of the subject. In other\nwords, the anchoring must be the result of setting the PCRE2_ANCHORED option or\nthe use of .* with PCRE2_DOTALL, not by starting the pattern with ^ or \\eA.\n.\n.\n.\\\" HTML <a name=\"matchoptions\"></a>\n.SS \"Option bits for \\fBpcre2_match()\\fP\"\n.rs\n.sp\nThe unused bits of the \\fIoptions\\fP argument for \\fBpcre2_match()\\fP must be\nzero. The only bits that may be set are PCRE2_ANCHORED,\nPCRE2_COPY_MATCHED_SUBJECT, PCRE2_DISABLE_RECURSELOOP_CHECK, PCRE2_ENDANCHORED,\nPCRE2_NOTBOL, PCRE2_NOTEOL, PCRE2_NOTEMPTY, PCRE2_NOTEMPTY_ATSTART,\nPCRE2_NO_JIT, PCRE2_NO_UTF_CHECK, PCRE2_PARTIAL_HARD, and PCRE2_PARTIAL_SOFT.\nTheir action is described below.\n.P\nSetting PCRE2_ANCHORED or PCRE2_ENDANCHORED at match time is not supported by\nthe just-in-time (JIT) compiler. If it is set, JIT matching is disabled and the\ninterpretive code in \\fBpcre2_match()\\fP is run.\nPCRE2_DISABLE_RECURSELOOP_CHECK is ignored by JIT, but apart from PCRE2_NO_JIT\n(obviously), the remaining options are supported for JIT matching.\n.sp\n  PCRE2_ANCHORED\n.sp\nThe PCRE2_ANCHORED option limits \\fBpcre2_match()\\fP to matching at the first\nmatching position. If a pattern was compiled with PCRE2_ANCHORED, or turned out\nto be anchored by virtue of its contents, it cannot be made unanchored at\nmatching time. Note that setting the option at match time disables JIT\nmatching.\n.sp\n  PCRE2_COPY_MATCHED_SUBJECT\n.sp\nBy default, a pointer to the subject is remembered in the match data block so\nthat, after a successful match, it can be referenced by the substring\nextraction functions. This means that the subject's memory must not be freed\nuntil all such operations are complete. For some applications where the\nlifetime of the subject string is not guaranteed, it may be necessary to make a\ncopy of the subject string, but it is wasteful to do this unless the match is\nsuccessful. After a successful match, if PCRE2_COPY_MATCHED_SUBJECT is set, the\nsubject is copied and the new pointer is remembered in the match data block\ninstead of the original subject pointer. The memory allocator that was used for\nthe match block itself is used. The copy is automatically freed when\n\\fBpcre2_match_data_free()\\fP is called to free the match data block. It is also\nautomatically freed if the match data block is re-used for another match\noperation.\n.sp\n  PCRE2_DISABLE_RECURSELOOP_CHECK\n.sp\nThis option is relevant only to \\fBpcre2_match()\\fP for interpretive matching.\nIt is ignored when JIT is used, and is forbidden for \\fBpcre2_dfa_match()\\fP.\n.P\nThe use of recursion in patterns can lead to infinite loops. In the\ninterpretive matcher these would be eventually caught by the match or heap\nlimits, but this could take a long time and/or use a lot of memory if the\nlimits are large. There is therefore a check at the start of each recursion.\nIf the same group is still active from a previous call, and the current subject\npointer is the same as it was at the start of that group, and the furthest\ninspected character of the subject has not changed, an error is generated.\n.P\nThere are rare cases of matches that would complete, but nevertheless trigger\nthis error. This option disables the check. It is provided mainly for testing\nwhen comparing JIT and interpretive behaviour.\n.sp\n  PCRE2_ENDANCHORED\n.sp\nIf the PCRE2_ENDANCHORED option is set, any string that \\fBpcre2_match()\\fP\nmatches must be right at the end of the subject string. Note that setting the\noption at match time disables JIT matching.\n.sp\n  PCRE2_NOTBOL\n.sp\nThis option specifies that first character of the subject string is not the\nbeginning of a line, so the circumflex metacharacter should not match before\nit. Setting this without having set PCRE2_MULTILINE at compile time causes\ncircumflex never to match. This option affects only the behaviour of the\ncircumflex metacharacter. It does not affect \\eA.\n.sp\n  PCRE2_NOTEOL\n.sp\nThis option specifies that the end of the subject string is not the end of a\nline, so the dollar metacharacter should not match it nor (except in multiline\nmode) a newline immediately before it. Setting this without having set\nPCRE2_MULTILINE at compile time causes dollar never to match. This option\naffects only the behaviour of the dollar metacharacter. It does not affect \\eZ\nor \\ez.\n.sp\n  PCRE2_NOTEMPTY\n.sp\nAn empty string is not considered to be a valid match if this option is set. If\nthere are alternatives in the pattern, they are tried. If all the alternatives\nmatch the empty string, the entire match fails. For example, if the pattern\n.sp\n  a?b?\n.sp\nis applied to a string not beginning with \"a\" or \"b\", it matches an empty\nstring at the start of the subject. With PCRE2_NOTEMPTY set, this match is not\nvalid, so \\fBpcre2_match()\\fP searches further into the string for occurrences\nof \"a\" or \"b\".\n.sp\n  PCRE2_NOTEMPTY_ATSTART\n.sp\nThis is like PCRE2_NOTEMPTY, except that it locks out an empty string match\nonly at the first matching position, that is, at the start of the subject plus\nthe starting offset. An empty string match later in the subject is permitted.\nIf the pattern is anchored, such a match can occur only if the pattern contains\n\\eK.\n.sp\n  PCRE2_NO_JIT\n.sp\nBy default, if a pattern has been successfully processed by\n\\fBpcre2_jit_compile()\\fP, JIT is automatically used when \\fBpcre2_match()\\fP\nis called with options that JIT supports. Setting PCRE2_NO_JIT disables the use\nof JIT; it forces matching to be done by the interpreter.\n.sp\n  PCRE2_NO_UTF_CHECK\n.sp\nWhen PCRE2_UTF is set at compile time, the validity of the subject as a UTF\nstring is checked unless PCRE2_NO_UTF_CHECK is passed to \\fBpcre2_match()\\fP or\nPCRE2_MATCH_INVALID_UTF was passed to \\fBpcre2_compile()\\fP. The latter special\ncase is discussed in detail in the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\ndocumentation.\n.P\nIn the default case, if a non-zero starting offset is given, the check is\napplied only to that part of the subject that could be inspected during\nmatching, and there is a check that the starting offset points to the first\ncode unit of a character or to the end of the subject. If there are no\nlookbehind assertions in the pattern, the check starts at the starting offset.\nOtherwise, it starts at the length of the longest lookbehind before the\nstarting offset, or at the start of the subject if there are not that many\ncharacters before the starting offset. Note that the sequences \\eb and \\eB are\none-character lookbehinds.\n.P\nThe check is carried out before any other processing takes place, and a\nnegative error code is returned if the check fails. There are several UTF error\ncodes for each code unit width, corresponding to different problems with the\ncode unit sequence. There are discussions about the validity of\n.\\\" HTML <a href=\"pcre2unicode.html#utf8strings\">\n.\\\" </a>\nUTF-8 strings,\n.\\\"\n.\\\" HTML <a href=\"pcre2unicode.html#utf16strings\">\n.\\\" </a>\nUTF-16 strings,\n.\\\"\nand\n.\\\" HTML <a href=\"pcre2unicode.html#utf32strings\">\n.\\\" </a>\nUTF-32 strings\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\ndocumentation.\n.P\nIf you know that your subject is valid, and you want to skip this check for\nperformance reasons, you can set the PCRE2_NO_UTF_CHECK option when calling\n\\fBpcre2_match()\\fP. You might want to do this for the second and subsequent\ncalls to \\fBpcre2_match()\\fP if you are making repeated calls to find multiple\nmatches in the same subject string.\n.P\n\\fBWarning:\\fP Unless PCRE2_MATCH_INVALID_UTF was set at compile time, when\nPCRE2_NO_UTF_CHECK is set at match time the effect of passing an invalid\nstring as a subject, or an invalid value of \\fIstartoffset\\fP, is undefined.\nYour program may crash or loop indefinitely or give wrong results.\n.sp\n  PCRE2_PARTIAL_HARD\n  PCRE2_PARTIAL_SOFT\n.sp\nThese options turn on the partial matching feature. A partial match occurs if\nthe end of the subject string is reached successfully, but there are not enough\nsubject characters to complete the match. In addition, either at least one\ncharacter must have been inspected or the pattern must contain a lookbehind, or\nthe pattern must be one that could match an empty string.\n.P\nIf this situation arises when PCRE2_PARTIAL_SOFT (but not PCRE2_PARTIAL_HARD)\nis set, matching continues by testing any remaining alternatives. Only if no\ncomplete match can be found is PCRE2_ERROR_PARTIAL returned instead of\nPCRE2_ERROR_NOMATCH. In other words, PCRE2_PARTIAL_SOFT specifies that the\ncaller is prepared to handle a partial match, but only if no complete match can\nbe found.\n.P\nIf PCRE2_PARTIAL_HARD is set, it overrides PCRE2_PARTIAL_SOFT. In this case, if\na partial match is found, \\fBpcre2_match()\\fP immediately returns\nPCRE2_ERROR_PARTIAL, without considering any other alternatives. In other\nwords, when PCRE2_PARTIAL_HARD is set, a partial match is considered to be more\nimportant than an alternative complete match.\n.P\nThere is a more detailed discussion of partial and multi-segment matching, with\nexamples, in the\n.\\\" HREF\n\\fBpcre2partial\\fP\n.\\\"\ndocumentation.\n.\n.\n.\n.SH \"NEWLINE HANDLING WHEN MATCHING\"\n.rs\n.sp\nWhen PCRE2 is built, a default newline convention is set; this is usually the\nstandard convention for the operating system. The default can be overridden in\na\n.\\\" HTML <a href=\"#compilecontext\">\n.\\\" </a>\ncompile context\n.\\\"\nby calling \\fBpcre2_set_newline()\\fP. It can also be overridden by starting a\npattern string with, for example, (*CRLF), as described in the\n.\\\" HTML <a href=\"pcre2pattern.html#newlines\">\n.\\\" </a>\nsection on newline conventions\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\npage. During matching, the newline choice affects the behaviour of the dot,\ncircumflex, and dollar metacharacters. It may also alter the way the match\nstarting position is advanced after a match failure for an unanchored pattern.\n.P\nWhen PCRE2_NEWLINE_CRLF, PCRE2_NEWLINE_ANYCRLF, or PCRE2_NEWLINE_ANY is set as\nthe newline convention, and a match attempt for an unanchored pattern fails\nwhen the current starting position is at a CRLF sequence, and the pattern\ncontains no explicit matches for CR or LF characters, the match position is\nadvanced by two characters instead of one, in other words, to after the CRLF.\n.P\nThe above rule is a compromise that makes the most common cases work as\nexpected. For example, if the pattern is .+A (and the PCRE2_DOTALL option is\nnot set), it does not match the string \"\\er\\enA\" because, after failing at the\nstart, it skips both the CR and the LF before retrying. However, the pattern\n[\\er\\en]A does match that string, because it contains an explicit CR or LF\nreference, and so advances only by one character after the first failure.\n.P\nAn explicit match for CR of LF is either a literal appearance of one of those\ncharacters in the pattern, or one of the \\er or \\en or equivalent octal or\nhexadecimal escape sequences. Implicit matches such as [^X] do not count, nor\ndoes \\es, even though it includes CR and LF in the characters that it matches.\n.P\nNotwithstanding the above, anomalous effects may still occur when CRLF is a\nvalid newline sequence and explicit \\er or \\en escapes appear in the pattern.\n.\n.\n.\\\" HTML <a name=\"matchedstrings\"></a>\n.SH \"HOW PCRE2_MATCH() RETURNS A STRING AND CAPTURED SUBSTRINGS\"\n.rs\n.sp\n.nf\n.B uint32_t pcre2_get_ovector_count(pcre2_match_data *\\fImatch_data\\fP);\n.sp\n.B PCRE2_SIZE *pcre2_get_ovector_pointer(pcre2_match_data *\\fImatch_data\\fP);\n.fi\n.P\nIn general, a pattern matches a certain portion of the subject, and in\naddition, further substrings from the subject may be picked out by\nparenthesized parts of the pattern. Following the usage in Jeffrey Friedl's\nbook, this is called \"capturing\" in what follows, and the phrase \"capture\ngroup\" (Perl terminology) is used for a fragment of a pattern that picks out a\nsubstring. PCRE2 supports several other kinds of parenthesized group that do\nnot cause substrings to be captured. The \\fBpcre2_pattern_info()\\fP function\ncan be used to find out how many capture groups there are in a compiled\npattern.\n.P\nYou can use auxiliary functions for accessing captured substrings\n.\\\" HTML <a href=\"#extractbynumber\">\n.\\\" </a>\nby number\n.\\\"\nor\n.\\\" HTML <a href=\"#extractbyname\">\n.\\\" </a>\nby name,\n.\\\"\nas described in sections below.\n.P\nAlternatively, you can make direct use of the vector of PCRE2_SIZE values,\ncalled the \\fBovector\\fP, which contains the offsets of captured strings. It is\npart of the\n.\\\" HTML <a href=\"#matchdatablock\">\n.\\\" </a>\nmatch data block.\n.\\\"\nThe function \\fBpcre2_get_ovector_pointer()\\fP returns the address of the\novector, and \\fBpcre2_get_ovector_count()\\fP returns the number of pairs of\nvalues it contains.\n.P\nWithin the ovector, the first in each pair of values is set to the offset of\nthe first code unit of a substring, and the second is set to the offset of the\nfirst code unit after the end of a substring. These values are always code unit\noffsets, not character offsets. That is, they are byte offsets in the 8-bit\nlibrary, 16-bit offsets in the 16-bit library, and 32-bit offsets in the 32-bit\nlibrary.\n.P\nAfter a partial match (error return PCRE2_ERROR_PARTIAL), only the first pair\nof offsets (that is, \\fIovector[0]\\fP and \\fIovector[1]\\fP) are set. They\nidentify the part of the subject that was partially matched. See the\n.\\\" HREF\n\\fBpcre2partial\\fP\n.\\\"\ndocumentation for details of partial matching.\n.P\nAfter a fully successful match, the first pair of offsets identifies the\nportion of the subject string that was matched by the entire pattern. The next\npair is used for the first captured substring, and so on. The value returned by\n\\fBpcre2_match()\\fP is one more than the highest numbered pair that has been\nset. For example, if two substrings have been captured, the returned value is\n3. If there are no captured substrings, the return value from a successful\nmatch is 1, indicating that just the first pair of offsets has been set.\n.P\nIf a pattern uses the \\eK escape sequence within a positive lookahead assertion,\nthe reported start of a successful match can be greater than the end of the\nmatch. For example, if the pattern (?=ab\\eK) is matched against \"ab\", the start\nand end offset values for the match are 2 and 0.\n.P\nIf a capture group is matched repeatedly within a single match operation, it is\nthe last portion of the subject that it matched that is returned.\n.P\nIf the ovector is too small to hold all the captured substring offsets, as much\nas possible is filled in, and the function returns a value of zero. If captured\nsubstrings are not of interest, \\fBpcre2_match()\\fP may be called with a match\ndata block whose ovector is of minimum length (that is, one pair).\n.P\nIt is possible for capture group number \\fIn+1\\fP to match some part of the\nsubject when group \\fIn\\fP has not been used at all. For example, if the string\n\"abc\" is matched against the pattern (a|(z))(bc) the return from the function\nis 4, and groups 1 and 3 are matched, but 2 is not. When this happens, both\nvalues in the offset pairs corresponding to unused groups are set to\nPCRE2_UNSET.\n.P\nOffset values that correspond to unused groups at the end of the expression are\nalso set to PCRE2_UNSET. For example, if the string \"abc\" is matched against\nthe pattern (abc)(x(yz)?)? groups 2 and 3 are not matched. The return from the\nfunction is 2, because the highest used capture group number is 1. The offsets\nfor the second and third capture groups (assuming the vector is large enough,\nof course) are set to PCRE2_UNSET.\n.P\nElements in the ovector that do not correspond to capturing parentheses in the\npattern are never changed. That is, if a pattern contains \\fIn\\fP capturing\nparentheses, no more than \\fIovector[0]\\fP to \\fIovector[2n+1]\\fP are set by\n\\fBpcre2_match()\\fP. The other elements retain whatever values they previously\nhad. After a failed match attempt, the contents of the ovector are unchanged.\n.\n.\n.\\\" HTML <a name=\"matchotherdata\"></a>\n.SH \"OTHER INFORMATION ABOUT A MATCH\"\n.rs\n.sp\n.nf\n.B PCRE2_SPTR pcre2_get_mark(pcre2_match_data *\\fImatch_data\\fP);\n.sp\n.B PCRE2_SIZE pcre2_get_startchar(pcre2_match_data *\\fImatch_data\\fP);\n.fi\n.P\nAs well as the offsets in the ovector, other information about a match is\nretained in the match data block and can be retrieved by the above functions in\nappropriate circumstances. If they are called at other times, the result is\nundefined.\n.P\nAfter a successful match, a partial match (PCRE2_ERROR_PARTIAL), or a failure\nto match (PCRE2_ERROR_NOMATCH), a mark name may be available. The function\n\\fBpcre2_get_mark()\\fP can be called to access this name, which can be\nspecified in the pattern by any of the backtracking control verbs, not just\n(*MARK). The same function applies to all the verbs. It returns a pointer to\nthe zero-terminated name, which is within the compiled pattern. If no name is\navailable, NULL is returned. The length of the name (excluding the terminating\nzero) is stored in the code unit that precedes the name. You should use this\nlength instead of relying on the terminating zero if the name might contain a\nbinary zero.\n.P\nAfter a successful match, the name that is returned is the last mark name\nencountered on the matching path through the pattern. Instances of backtracking\nverbs without names do not count. Thus, for example, if the matching path\ncontains (*MARK:A)(*PRUNE), the name \"A\" is returned. After a \"no match\" or a\npartial match, the last encountered name is returned. For example, consider\nthis pattern:\n.sp\n  ^(*MARK:A)((*MARK:B)a|b)c\n.sp\nWhen it matches \"bc\", the returned name is A. The B mark is \"seen\" in the first\nbranch of the group, but it is not on the matching path. On the other hand,\nwhen this pattern fails to match \"bx\", the returned name is B.\n.P\n\\fBWarning:\\fP By default, certain start-of-match optimizations are used to\ngive a fast \"no match\" result in some situations. For example, if the anchoring\nis removed from the pattern above, there is an initial check for the presence\nof \"c\" in the subject before running the matching engine. This check fails for\n\"bx\", causing a match failure without seeing any marks. You can disable the\nstart-of-match optimizations by setting the PCRE2_NO_START_OPTIMIZE option for\n\\fBpcre2_compile()\\fP or by starting the pattern with (*NO_START_OPT).\n.P\nAfter a successful match, a partial match, or one of the invalid UTF errors\n(for example, PCRE2_ERROR_UTF8_ERR5), \\fBpcre2_get_startchar()\\fP can be\ncalled. After a successful or partial match it returns the code unit offset of\nthe character at which the match started. For a non-partial match, this can be\ndifferent to the value of \\fIovector[0]\\fP if the pattern contains the \\eK\nescape sequence. After a partial match, however, this value is always the same\nas \\fIovector[0]\\fP because \\eK does not affect the result of a partial match.\n.P\nAfter a UTF check failure, \\fBpcre2_get_startchar()\\fP can be used to obtain\nthe code unit offset of the invalid UTF character. Details are given in the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\npage.\n.\n.\n.\\\" HTML <a name=\"errorlist\"></a>\n.SH \"ERROR RETURNS FROM \\fBpcre2_match()\\fP\"\n.rs\n.sp\nIf \\fBpcre2_match()\\fP fails, it returns a negative number. This can be\nconverted to a text string by calling the \\fBpcre2_get_error_message()\\fP\nfunction (see \"Obtaining a textual error message\"\n.\\\" HTML <a href=\"#geterrormessage\">\n.\\\" </a>\nbelow).\n.\\\"\nNegative error codes are also returned by other functions, and are documented\nwith them. The codes are given names in the header file. If UTF checking is in\nforce and an invalid UTF subject string is detected, one of a number of\nUTF-specific negative error codes is returned. Details are given in the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\npage. The following are the other errors that may be returned by\n\\fBpcre2_match()\\fP:\n.sp\n  PCRE2_ERROR_NOMATCH\n.sp\nThe subject string did not match the pattern.\n.sp\n  PCRE2_ERROR_PARTIAL\n.sp\nThe subject string did not match, but it did match partially. See the\n.\\\" HREF\n\\fBpcre2partial\\fP\n.\\\"\ndocumentation for details of partial matching.\n.sp\n  PCRE2_ERROR_BADMAGIC\n.sp\nPCRE2 stores a 4-byte \"magic number\" at the start of the compiled code, to\ncatch the case when it is passed a junk pointer. This is the error that is\nreturned when the magic number is not present.\n.sp\n  PCRE2_ERROR_BADMODE\n.sp\nThis error is given when a compiled pattern is passed to a function in a\nlibrary of a different code unit width, for example, a pattern compiled by\nthe 8-bit library is passed to a 16-bit or 32-bit library function.\n.sp\n  PCRE2_ERROR_BADOFFSET\n.sp\nThe value of \\fIstartoffset\\fP was greater than the length of the subject.\n.sp\n  PCRE2_ERROR_BADOPTION\n.sp\nAn unrecognized bit was set in the \\fIoptions\\fP argument.\n.sp\n  PCRE2_ERROR_BADUTFOFFSET\n.sp\nThe UTF code unit sequence that was passed as a subject was checked and found\nto be valid (the PCRE2_NO_UTF_CHECK option was not set), but the value of\n\\fIstartoffset\\fP did not point to the beginning of a UTF character or the end\nof the subject.\n.sp\n  PCRE2_ERROR_CALLOUT\n.sp\nThis error is never generated by \\fBpcre2_match()\\fP itself. It is provided for\nuse by callout functions that want to cause \\fBpcre2_match()\\fP or\n\\fBpcre2_callout_enumerate()\\fP to return a distinctive error code. See the\n.\\\" HREF\n\\fBpcre2callout\\fP\n.\\\"\ndocumentation for details.\n.sp\n  PCRE2_ERROR_DEPTHLIMIT\n.sp\nThe nested backtracking depth limit was reached.\n.sp\n  PCRE2_ERROR_HEAPLIMIT\n.sp\nThe heap limit was reached.\n.sp\n  PCRE2_ERROR_INTERNAL\n.sp\nAn unexpected internal error has occurred. This error could be caused by a bug\nin PCRE2 or by overwriting of the compiled pattern.\n.sp\n  PCRE2_ERROR_JIT_STACKLIMIT\n.sp\nThis error is returned when a pattern that was successfully studied using JIT\nis being matched, but the memory available for the just-in-time processing\nstack is not large enough. See the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\ndocumentation for more details.\n.sp\n  PCRE2_ERROR_MATCHLIMIT\n.sp\nThe backtracking match limit was reached.\n.sp\n  PCRE2_ERROR_NOMEMORY\n.sp\nHeap memory is used to remember backtracking points. This error is given when\nthe memory allocation function (default or custom) fails. Note that a different\nerror, PCRE2_ERROR_HEAPLIMIT, is given if the amount of memory needed exceeds\nthe heap limit. PCRE2_ERROR_NOMEMORY is also returned if\nPCRE2_COPY_MATCHED_SUBJECT is set and memory allocation fails.\n.sp\n  PCRE2_ERROR_NULL\n.sp\nEither the \\fIcode\\fP, \\fIsubject\\fP, or \\fImatch_data\\fP argument was passed\nas NULL.\n.sp\n  PCRE2_ERROR_RECURSELOOP\n.sp\nThis error is returned when \\fBpcre2_match()\\fP detects a recursion loop within\nthe pattern. Specifically, it means that either the whole pattern or a\ncapture group has been called recursively for the second time at the same\nposition in the subject string. Some simple patterns that might do this are\ndetected and faulted at compile time, but more complicated cases, in particular\nmutual recursions between two different groups, cannot be detected until\nmatching is attempted.\n.\n.\n.\\\" HTML <a name=\"geterrormessage\"></a>\n.SH \"OBTAINING A TEXTUAL ERROR MESSAGE\"\n.rs\n.sp\n.nf\n.B int pcre2_get_error_message(int \\fIerrorcode\\fP, PCRE2_UCHAR *\\fIbuffer\\fP,\n.B \"  PCRE2_SIZE \\fIbufflen\\fP);\"\n.fi\n.P\nA text message for an error code from any PCRE2 function (compile, match, or\nauxiliary) can be obtained by calling \\fBpcre2_get_error_message()\\fP. The code\nis passed as the first argument, with the remaining two arguments specifying a\ncode unit buffer and its length in code units, into which the text message is\nplaced. The message is returned in code units of the appropriate width for the\nlibrary that is being used.\n.P\nThe returned message is terminated with a trailing zero, and the function\nreturns the number of code units used, excluding the trailing zero. If the\nerror number is unknown, the negative error code PCRE2_ERROR_BADDATA is\nreturned. If the buffer is too small, the message is truncated (but still with\na trailing zero), and the negative error code PCRE2_ERROR_NOMEMORY is returned.\nNone of the messages is very long; a buffer size of 120 code units is ample.\n.\n.\n.\\\" HTML <a name=\"matchiter\"></a>\n.SH \"ITERATING OVER ALL MATCHES\"\n.rs\n.sp\n.nf\n.B int pcre2_next_match(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_SIZE *\\fIpstart_offset\\fP, uint32_t *\\fIpoptions\\fP);\"\n.fi\n.P\nA common task for applications is to implement \"global\" matching behaviour,\nfor example, replacing all matches in the subject; splitting the subject on all\nmatches; or simply counting the number of matches. The \\fBpcre2_next_match()\\fP\nfunction helps with this task by providing the appropriate parameters for the\nnext match attempt (available since PCRE2 10.47).\n.P\nFirst, a match attempt should be made using one of the matching functions\n(\\fBpcre2_match()\\fP, \\fBpcre2_dfa_match()\\fP, or \\fBpcre2_jit_match()\\fP).\nThen, \\fBpcre2_next_match()\\fP can be called, providing the same\n\\fImatch_data\\fP parameter.\n.P\nIt returns 0 (\"false\") if there is no need to make a further match attempt, or\n1 (\"true\") if another match should be attempted. Returning 1 does not imply that\nthere is another match, only that another match should be attempted (which may\nreturn PCRE2_ERROR_NOMATCH).\n.P\nThe *\\fIpstart_offset\\fP and *\\fIpoptions\\fP are set if the function returns 1.\nThe *\\fIpstart_offset\\fP should be passed to the next match attempt directly,\nand the *\\fIpoptions\\fP should be passed to the next match attempt by combining\nwith the application's match options using OR.\n.P\nThere is some code that demonstrates how to do this in the\n.\\\" HREF\n\\fBpcre2demo\\fP\n.\\\"\nsample program. The general pattern is:\n.sp\n.nf\n  uint32_t app_options = ...;\n  uint32_t global_options = 0;\n  PCRE2_SIZE start_offset = 0;\n  while (1)\n    {\n    int rc = pcre2_match(re, subject, subject_len, start_offset,\n                         app_options | global_options, match_data,\n                         match_context);\n\\&\n    if (rc == PCRE2_ERROR_NOMATCH) break; /* no match, and no more attempts */\n    if (rc < 0) { ... exit }\n\\&\n    ...handle the match\n\\&\n    if (!pcre2_next_match(match_data, &start_offset, &global_options))\n      break; /* no more attempts */\n    }\n.fi\n.P\nThe guarantees provided by \\fBpcre2_next_match()\\fP are that the start_offset\nwill advance, so the loop will definitely terminate. The conditions which\nensure this are that either: (a) pcre2_next_match() returns 0 (false); or\n(b) the returned *\\fIpstart_offset\\fP is strictly greater than the previous\nstart_offset; or (c) if the previous match was a successful match of the empty\nstring then the returned *\\fIpstart_offset\\fP is equal to the previous\novector[1], and *\\fIpoptions\\fP will be set to PCRE2_NOTEMPTY_ATSTART to prevent\nanother empty match from being returned.\n.P\nA loop implemented as shown above will always terminate, unless there is a bug\nin PCRE2. As a measure of \"defensive programming\", applications are encouraged\nto add an assertion or check to break their loop if it does not make progress\n(and report the issue as a bug).\n.P\nIf an application does not use the flag PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK, then\neach match is \"well-behaved\" and satisfies:\n.sp\n  start_offset <= ovector[0] <= ovector[1].\n.sp\nIn this case, the matches found by pcre2_match() with pcre2_next_match() will be\nsorted, non-overlapping (possibly touching), and with no duplicates.\n.P\nOtherwise, if PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK is used, then the guarantees are\nconsiderably weaker. We do not guarantee that the matches will always advance:\nonly that the start_offset will. The matches found by pcre2_match() with\npcre2_next_match() will be a finite sequence (as pcre2_next_match() ensures that\nstart_offset advances, so the search will terminate). The matches can however be\noverlapping, can contain duplicates, and (in truly pathological examples) may\nnot even be sorted by ovector[0]. Additionally, each match itself can end before\nit starts (ovector[1] < ovector[0]). We recommend that applications do not set\nPCRE2_EXTRA_ALLOW_LOOKAROUND_BSK.\n.\n.\n.\\\" HTML <a name=\"extractbynumber\"></a>\n.SH \"EXTRACTING CAPTURED SUBSTRINGS BY NUMBER\"\n.rs\n.sp\n.nf\n.B int pcre2_substring_length_bynumber(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  uint32_t \\fInumber\\fP, PCRE2_SIZE *\\fIlength\\fP);\"\n.sp\n.B int pcre2_substring_copy_bynumber(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  uint32_t \\fInumber\\fP, PCRE2_UCHAR *\\fIbuffer\\fP,\"\n.B \"  PCRE2_SIZE *\\fIbufflen\\fP);\"\n.sp\n.B int pcre2_substring_get_bynumber(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  uint32_t \\fInumber\\fP, PCRE2_UCHAR **\\fIbufferptr\\fP,\"\n.B \"  PCRE2_SIZE *\\fIbufflen\\fP);\"\n.sp\n.B void pcre2_substring_free(PCRE2_UCHAR *\\fIbuffer\\fP);\n.fi\n.P\nCaptured substrings can be accessed directly by using the ovector as described\n.\\\" HTML <a href=\"#matchedstrings\">\n.\\\" </a>\nabove.\n.\\\"\nFor convenience, auxiliary functions are provided for extracting captured\nsubstrings as new, separate, zero-terminated strings. A substring that contains\na binary zero is correctly extracted and has a further zero added on the end,\nbut the result is not, of course, a C string.\n.P\nThe functions in this section identify substrings by number. The number zero\nrefers to the entire matched substring, with higher numbers referring to\nsubstrings captured by parenthesized groups. After a partial match, only\nsubstring zero is available. An attempt to extract any other substring gives\nthe error PCRE2_ERROR_PARTIAL. The next section describes similar functions for\nextracting captured substrings by name.\n.P\nIf a pattern uses the \\eK escape sequence within a positive lookahead assertion,\nthe reported start of a successful match can be greater than the end of the\nmatch. For example, if the pattern (?=ab\\eK) is matched against \"ab\", the start\nand end offset values for the match are 2 and 0. In this situation, calling\nthese functions with a zero substring number extracts a zero-length empty\nstring.\n.P\nYou can find the length in code units of a captured substring without\nextracting it by calling \\fBpcre2_substring_length_bynumber()\\fP. The first\nargument is a pointer to the match data block, the second is the group number,\nand the third is a pointer to a variable into which the length is placed. If\nyou just want to know whether or not the substring has been captured, you can\npass the third argument as NULL.\n.P\nThe \\fBpcre2_substring_copy_bynumber()\\fP function copies a captured substring\ninto a supplied buffer, whereas \\fBpcre2_substring_get_bynumber()\\fP copies it\ninto new memory, obtained using the same memory allocation function that was\nused for the match data block. The first two arguments of these functions are a\npointer to the match data block and a capture group number.\n.P\nThe final arguments of \\fBpcre2_substring_copy_bynumber()\\fP are a pointer to\nthe buffer and a pointer to a variable that contains its length in code units.\nThis is updated to contain the actual number of code units used for the\nextracted substring, excluding the terminating zero.\n.P\nFor \\fBpcre2_substring_get_bynumber()\\fP the third and fourth arguments point\nto variables that are updated with a pointer to the new memory and the number\nof code units that comprise the substring, again excluding the terminating\nzero. When the substring is no longer needed, the memory should be freed by\ncalling \\fBpcre2_substring_free()\\fP.\n.P\nThe return value from all these functions is zero for success, or a negative\nerror code. If the pattern match failed, the match failure code is returned.\nIf a substring number greater than zero is used after a partial match,\nPCRE2_ERROR_PARTIAL is returned. Other possible error codes are:\n.sp\n  PCRE2_ERROR_NOMEMORY\n.sp\nThe buffer was too small for \\fBpcre2_substring_copy_bynumber()\\fP, or the\nattempt to get memory failed for \\fBpcre2_substring_get_bynumber()\\fP.\n.sp\n  PCRE2_ERROR_NOSUBSTRING\n.sp\nThere is no substring with that number in the pattern, that is, the number is\ngreater than the number of capturing parentheses.\n.sp\n  PCRE2_ERROR_UNAVAILABLE\n.sp\nThe substring number, though not greater than the number of captures in the\npattern, is greater than the number of slots in the ovector, so the substring\ncould not be captured.\n.sp\n  PCRE2_ERROR_UNSET\n.sp\nThe substring did not participate in the match. For example, if the pattern is\n(abc)|(def) and the subject is \"def\", and the ovector contains at least two\ncapturing slots, substring number 1 is unset.\n.\n.\n.SH \"EXTRACTING A LIST OF ALL CAPTURED SUBSTRINGS\"\n.rs\n.sp\n.nf\n.B int pcre2_substring_list_get(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_UCHAR ***\\fIlistptr\\fP, PCRE2_SIZE **\\fIlengthsptr\\fP);\"\n.sp\n.B void pcre2_substring_list_free(PCRE2_UCHAR **\\fIlist\\fP);\n.fi\n.P\nThe \\fBpcre2_substring_list_get()\\fP function extracts all available substrings\nand builds a list of pointers to them. It also (optionally) builds a second\nlist that contains their lengths (in code units), excluding a terminating zero\nthat is added to each of them. All this is done in a single block of memory\nthat is obtained using the same memory allocation function that was used to get\nthe match data block.\n.P\nThis function must be called only after a successful match. If called after a\npartial match, the error code PCRE2_ERROR_PARTIAL is returned.\n.P\nThe address of the memory block is returned via \\fIlistptr\\fP, which is also\nthe start of the list of string pointers. The end of the list is marked by a\nNULL pointer. The address of the list of lengths is returned via\n\\fIlengthsptr\\fP. If your strings do not contain binary zeros and you do not\ntherefore need the lengths, you may supply NULL as the \\fBlengthsptr\\fP\nargument to disable the creation of a list of lengths. The yield of the\nfunction is zero if all went well, or PCRE2_ERROR_NOMEMORY if the memory block\ncould not be obtained. When the list is no longer needed, it should be freed by\ncalling \\fBpcre2_substring_list_free()\\fP.\n.P\nIf this function encounters a substring that is unset, which can happen when\ncapture group number \\fIn+1\\fP matches some part of the subject, but group\n\\fIn\\fP has not been used at all, it returns an empty string. This can be\ndistinguished from a genuine zero-length substring by inspecting the\nappropriate offset in the ovector, which contain PCRE2_UNSET for unset\nsubstrings, or by calling \\fBpcre2_substring_length_bynumber()\\fP.\n.\n.\n.\\\" HTML <a name=\"extractbyname\"></a>\n.SH \"EXTRACTING CAPTURED SUBSTRINGS BY NAME\"\n.rs\n.sp\n.nf\n.B int pcre2_substring_number_from_name(const pcre2_code *\\fIcode\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP);\"\n.sp\n.B int pcre2_substring_length_byname(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP, PCRE2_SIZE *\\fIlength\\fP);\"\n.sp\n.B int pcre2_substring_copy_byname(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP, PCRE2_UCHAR *\\fIbuffer\\fP, PCRE2_SIZE *\\fIbufflen\\fP);\"\n.sp\n.B int pcre2_substring_get_byname(pcre2_match_data *\\fImatch_data\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP, PCRE2_UCHAR **\\fIbufferptr\\fP, PCRE2_SIZE *\\fIbufflen\\fP);\"\n.sp\n.B void pcre2_substring_free(PCRE2_UCHAR *\\fIbuffer\\fP);\n.fi\n.P\nTo extract a substring by name, you first have to find associated number.\nFor example, for this pattern:\n.sp\n  (a+)b(?<xxx>\\ed+)...\n.sp\nthe number of the capture group called \"xxx\" is 2. If the name is known to be\nunique (PCRE2_DUPNAMES was not set), you can find the number from the name by\ncalling \\fBpcre2_substring_number_from_name()\\fP. The first argument is the\ncompiled pattern, and the second is the name. The yield of the function is the\ngroup number, PCRE2_ERROR_NOSUBSTRING if there is no group with that name, or\nPCRE2_ERROR_NOUNIQUESUBSTRING if there is more than one group with that name.\nGiven the number, you can extract the substring directly from the ovector, or\nuse one of the \"bynumber\" functions described above.\n.P\nFor convenience, there are also \"byname\" functions that correspond to the\n\"bynumber\" functions, the only difference being that the second argument is a\nname instead of a number. If PCRE2_DUPNAMES is set and there are duplicate\nnames, these functions scan all the groups with the given name, and return the\ncaptured substring from the first named group that is set.\n.P\nIf there are no groups with the given name, PCRE2_ERROR_NOSUBSTRING is\nreturned. If all groups with the name have numbers that are greater than the\nnumber of slots in the ovector, PCRE2_ERROR_UNAVAILABLE is returned. If there\nis at least one group with a slot in the ovector, but no group is found to be\nset, PCRE2_ERROR_UNSET is returned.\n.P\n\\fBWarning:\\fP If the pattern uses the (?| feature to set up multiple\ncapture groups with the same number, as described in the\n.\\\" HTML <a href=\"pcre2pattern.html#dupgroupnumber\">\n.\\\" </a>\nsection on duplicate group numbers\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\npage, you cannot use names to distinguish the different capture groups, because\nnames are not included in the compiled code. The matching process uses only\nnumbers. For this reason, the use of different names for groups with the\nsame number causes an error at compile time.\n.\n.\n.\\\" HTML <a name=\"substitutions\"></a>\n.SH \"CREATING A NEW STRING WITH SUBSTITUTIONS\"\n.rs\n.sp\n.nf\n.B int pcre2_substitute(const pcre2_code *\\fIcode\\fP, PCRE2_SPTR \\fIsubject\\fP,\n.B \"  PCRE2_SIZE \\fIlength\\fP, PCRE2_SIZE \\fIstartoffset\\fP,\"\n.B \"  uint32_t \\fIoptions\\fP, pcre2_match_data *\\fImatch_data\\fP,\"\n.B \"  pcre2_match_context *\\fImcontext\\fP, PCRE2_SPTR \\fIreplacement\\fP,\"\n.B \"  PCRE2_SIZE \\fIrlength\\fP, PCRE2_UCHAR *\\fIoutputbuffer\\fP,\"\n.B \"  PCRE2_SIZE *\\fIoutlengthptr\\fP);\"\n.fi\n.P\nThis function optionally calls \\fBpcre2_match()\\fP and then makes a copy of the\nsubject string in \\fIoutputbuffer\\fP, replacing parts that were matched with\nthe \\fIreplacement\\fP string, whose length is supplied in \\fBrlength\\fP, which\ncan be given as PCRE2_ZERO_TERMINATED for a zero-terminated string. As a\nspecial case, if \\fIreplacement\\fP is NULL and \\fIrlength\\fP is zero, the\nreplacement is assumed to be an empty string. If \\fIrlength\\fP is non-zero, an\nerror occurs if \\fIreplacement\\fP is NULL.\n.P\nThere is an option (see PCRE2_SUBSTITUTE_REPLACEMENT_ONLY below) to return just\nthe replacement string(s). The default action is to perform just one\nreplacement if the pattern matches, but there is an option that requests\nmultiple replacements (see PCRE2_SUBSTITUTE_GLOBAL below).\n.P\nIf successful, \\fBpcre2_substitute()\\fP returns the number of substitutions\nthat were carried out. This may be zero if no match was found, and is never\ngreater than one unless PCRE2_SUBSTITUTE_GLOBAL is set. A negative value is\nreturned if an error is detected.\n.P\nMatches in which a \\eK item in a lookahead in the pattern causes the match to\nend before it starts are not supported, and give rise to an error return. For\nglobal replacements, matches in which \\eK in a lookbehind causes the match to\nstart earlier than the point that was reached in the previous iteration are\nalso not supported. (These cases are only possible if the pattern was compiled\nwith the backwards-compatibility option PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK.)\n.P\nThe first seven arguments of \\fBpcre2_substitute()\\fP are the same as for\n\\fBpcre2_match()\\fP, except that the partial matching options are not\npermitted, and \\fImatch_data\\fP may be passed as NULL, in which case a match\ndata block is obtained and freed within this function, using memory management\nfunctions from the match context, if provided, or else those that were used to\nallocate memory for the compiled code.\n.P\nIf \\fImatch_data\\fP is not NULL and PCRE2_SUBSTITUTE_MATCHED is not set, the\nprovided block is used for all calls to \\fBpcre2_match()\\fP, and its contents\nafterwards are the result of the final call made internally by\n\\fBpcre2_substitute()\\fP to the matching function. For global changes, this will\nalways be a no-match error. The contents of the ovector within the match data\nblock may or may not have been changed.\n.P\nAs well as the usual options for \\fBpcre2_match()\\fP, a number of additional\noptions can be set in the \\fIoptions\\fP argument of \\fBpcre2_substitute()\\fP.\nOne such option is PCRE2_SUBSTITUTE_MATCHED. When this is set, an external\n\\fImatch_data\\fP block must be provided, and it must have already been used for\nan external call to \\fBpcre2_match()\\fP (or \\fBpcre2_jit_match()\\fP) with the\nsame pattern, subject pointer, effective subject length, start offset, and match\noption arguments (substitute-specific options can be added to the \\fIoptions\\fP\nargument). If any of these parameters is changed, \\fBpcre2_substitute()\\fP\nreturns an error. The data in the \\fImatch_data\\fP block (return code, offset\nvector) is used for the first substitution instead of calling\n\\fBpcre2_match()\\fP from within \\fBpcre2_substitute()\\fP. This allows an\napplication to check for a match before choosing to substitute, without having\nto repeat the match.\n.P\nIf the contents of the subject buffer are mutated in between \\fBpcre2_match()\\fP\nand a call to \\fBpcre2_substitute()\\fP with PCRE2_SUBSTITUTE_MATCHED, the\nbehaviour is unsafe; in particular, in this case, PCRE2 is unable to ensure that\nthe offsets in the ovector point to the start of characters (with UTF-encoded\ninput).\n.P\nThe contents of the externally supplied match data block are not changed when\nPCRE2_SUBSTITUTE_MATCHED is set, and so the match block is permitted for use in\nanother call using PCRE2_SUBSTITUTE_MATCHED. If PCRE2_SUBSTITUTE_GLOBAL is also\nset, \\fBpcre2_match()\\fP is called after the first substitution to check for\nfurthe matches, but this is done using an internally obtained match data block,\nthus always leaving the external block unchanged.\n.P\nThe \\fIcode\\fP argument is not used for matching before the first substitution\nwhen PCRE2_SUBSTITUTE_MATCHED is set, but it must be provided, even when\nPCRE2_SUBSTITUTE_GLOBAL is not set, because it contains information such as the\nUTF setting and the number of capturing parentheses in the pattern.\n.P\nWhen using PCRE2_SUBSTITUTE_MATCHED, you should not modify the subject string\nin between the prior call to \\fBpcre2_match()\\fP and \\fBpcre2_substitute()\\fP,\nas the substitution assumes that the passed-in ovector is compatible with the\nsubject string. Although PCRE2 does verify that the subject is a pointer to the\nsame buffer, it cannot in general verify whether the contents of the buffer have\nchanged. For example, if the subject buffer is mutated from one valid UTF-8\nstring to another valid string, of the same length in code units, the ovector\noffsets are no longer guaranteed to point to the start of a character. Beware\nthat with PCRE2_SUBSTITUTE_MATCHED in UTF mode, the subject string is not\nre-scanned for UTF validity when \\fBpcre2_substitute()\\fP first uses it.\n.P\nThe default action of \\fBpcre2_substitute()\\fP is to return a copy of the\nsubject string with matched substrings replaced. However, if\nPCRE2_SUBSTITUTE_REPLACEMENT_ONLY is set, only the replacement substrings are\nreturned. In the global case, multiple replacements are concatenated in the\noutput buffer. Substitution callouts (see\n.\\\" HTML <a href=\"#subcallouts\">\n.\\\" </a>\nbelow)\n.\\\"\ncan be used to separate them if necessary.\n.P\nPartial matching is supported, with limitations: if matching succeeds but with a\npartial match, then pcre2_substitute returns PCRE2_ERROR_PARTIAL. When\npartial-matching (either of PCRE2_PARTIAL_HARD or PCRE2_PARTIAL_SOFT is passed),\nthen PCRE2_SUBSTITUTE_REPLACEMENT_ONLY must also be set, or else\nPCRE2_ERROR_BADOPTION is returned. Similarly, certain replacement items\n($' and $_) cause PCRE2_ERROR_PARTIALSUBS to be returned when partial-matching,\neven if a complete match is found.\n.P\nThe \\fIoutlengthptr\\fP argument of \\fBpcre2_substitute()\\fP must point to a\nvariable that contains the length, in code units, of the output buffer. If the\nfunction is successful, the value is updated to contain the length in code\nunits of the new string, excluding the trailing zero that is automatically\nadded.\n.P\nIf the function is not successful, the value set via \\fIoutlengthptr\\fP depends\non the type of error. For syntax errors in the replacement string, the value is\nthe offset in the replacement string where the error was detected. For other\nerrors, the value is PCRE2_UNSET by default. This includes the case of the\noutput buffer being too small, unless PCRE2_SUBSTITUTE_OVERFLOW_LENGTH is set.\n.P\nPCRE2_SUBSTITUTE_OVERFLOW_LENGTH changes what happens when the output buffer is\ntoo small. The default action is to return PCRE2_ERROR_NOMEMORY immediately. If\nthis option is set, however, \\fBpcre2_substitute()\\fP continues to go through\nthe motions of matching and substituting (without, of course, writing anything)\nin order to compute the size of buffer that is needed, which will include the\nextra space for the terminating NUL. This value is passed back via the\n\\fIoutlengthptr\\fP variable, with the result of the function still being\nPCRE2_ERROR_NOMEMORY.\n.P\nPassing a buffer size of zero is a permitted way of finding out how much memory\nis needed for given substitution. However, this does mean that the entire\noperation is carried out twice. Depending on the application, it may be more\nefficient to allocate a large buffer and free the excess afterwards, instead of\nusing PCRE2_SUBSTITUTE_OVERFLOW_LENGTH.\n.P\nThe replacement string, which is interpreted as a UTF string in UTF mode, is\nchecked for UTF validity unless PCRE2_NO_UTF_CHECK is set. An invalid UTF\nreplacement string causes an immediate return with the relevant UTF error code.\n.P\nIf PCRE2_SUBSTITUTE_LITERAL is set, the replacement string is not interpreted\nin any way. By default, however, a dollar character is an escape character that\ncan specify the insertion of characters from capture groups and names from\n(*MARK) or other control verbs in the pattern. Dollar is the only escape\ncharacter (backslash is treated as literal). The following forms are\nrecognized:\n.sp\n  $$                  insert a dollar character\n  $n or ${n}          insert the contents of group \\fIn\\fP\n  $0 or $&            insert the entire matched substring\n  $`                  insert the substring that precedes the match\n  $'                  insert the substring that follows the match\n  $_                  insert the entire input string\n  $+                  insert the highest-numbered capture group which matched\n  $*MARK or ${*MARK}  insert a control verb name\n.sp\nEither a group number or a group name can be given for \\fIn\\fP, for example $2\nor $NAME. Curly brackets are required only if the following character would be\ninterpreted as part of the number or name. The number may be zero to include\nthe entire matched string. For example, if the pattern a(b)c is matched with\n\"=abc=\" and the replacement string \"+$1$0$1+\", the result is \"=+babcb+=\".\n.P\nThe JavaScript form $<name>, where the angle brackets are part of the syntax,\nis also recognized for group names, but not for group numbers or *MARK.\n.P\n$*MARK inserts the name from the last encountered backtracking control verb on\nthe matching path that has a name. (*MARK) must always include a name, but the\nother verbs need not. For example, in the case of (*MARK:A)(*PRUNE) the name\ninserted is \"A\", but for (*MARK:A)(*PRUNE:B) the relevant name is \"B\". This\nfacility can be used to perform simple simultaneous substitutions, as this\n\\fBpcre2test\\fP example shows:\n.sp\n  /(*MARK:pear)apple|(*MARK:orange)lemon/g,replace=${*MARK}\n      apple lemon\n   2: pear orange\n.sp\nPCRE2_SUBSTITUTE_GLOBAL causes the function to iterate over the subject string,\nreplacing every matching substring. If this option is not set, only the first\nmatching substring is replaced. The search for matches takes place in the\noriginal subject string (that is, previous replacements do not affect it).\nIteration is implemented by advancing the \\fIstartoffset\\fP value for each\nsearch, which is always passed the entire subject string. If an offset limit is\nset in the match context, searching stops when that limit is reached.\n.P\nBecause global substitutions apply the pattern repeatedly to the subject string,\nand always iterate over non-overlapping matches, the substitutions done by\n\\fBpcre2_substitute()\\fP do not match and substitute text inside the replacement\nstrings themselves (no recursive/iterative substitution). However, applications\ncan easily implement other alternative replacement strategies, such as\niteratively replacing, then matching and replacing on the result. The\nreplacement loop inside \\fBpcre2_substitute()\\fP is simple and can be emulated\nin client code by allocating a buffer, searching for matches in a loop, and\ncalling \\fBpcre2_substitute()\\fP with PCRE2_SUBSTITUTE_REPLACEMENT_ONLY an\nPCRE2_SUBSTITUTE_MATCHED, and without PCRE2_SUBSTITUTE_GLOBAL.\n.P\nYou can restrict the effect of a global substitution to a portion of the\nsubject string by setting either or both of \\fIstartoffset\\fP and an offset\nlimit. Here is a \\fBpcre2test\\fP example:\n.sp\n  /B/g,replace=!,use_offset_limit\n  ABC ABC ABC ABC\\e=offset=3,offset_limit=12\n   2: ABC A!C A!C ABC\n.sp\nWhen continuing with global substitutions after matching a substring with zero\nlength, an attempt to find a non-empty match at the same offset is performed.\nIf this is not successful, the offset is advanced by one character except when\nCRLF is a valid newline sequence and the next two characters are CR, LF. In\nthis case, the offset is advanced by two characters.\n.P\nPCRE2_SUBSTITUTE_UNKNOWN_UNSET causes references to capture groups that do\nnot appear in the pattern to be treated as unset groups. This option should be\nused with care, because it means that a typo in a group name or number no\nlonger causes the PCRE2_ERROR_NOSUBSTRING error.\n.P\nPCRE2_SUBSTITUTE_UNSET_EMPTY causes unset capture groups (including unknown\ngroups when PCRE2_SUBSTITUTE_UNKNOWN_UNSET is set) to be treated as empty\nstrings when inserted as described above. If this option is not set, an attempt\nto insert an unset group causes the PCRE2_ERROR_UNSET error. This option does\nnot influence the extended substitution syntax described below.\n.P\nPCRE2_SUBSTITUTE_EXTENDED causes extra processing to be applied to the\nreplacement string. Without this option, only the dollar character is special,\nand only the group insertion forms listed above are valid. When\nPCRE2_SUBSTITUTE_EXTENDED is set, several things change:\n.P\nFirstly, backslash in a replacement string is interpreted as an escape\ncharacter. The usual forms such as \\ex{ddd} can be used to specify particular\ncharacter codes, and backslash followed by any non-alphanumeric character\nquotes that character. Extended quoting can be coded using \\eQ...\\eE, exactly\nas in pattern strings. The escapes \\eb and \\ev are interpreted as the\ncharacters backspace and vertical tab, respectively.\n.P\nThe interpretation of backslash followed by one or more digits is the same as\nin a pattern, which in Perl has some ambiguities. Details are given in the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\npage.\n.P\nThe Python form \\eg<n>, where the angle brackets are part of the syntax and\n\\fIn\\fP is either a group name or number, is recognized as an alternative way\nof inserting the contents of a group, for example \\eg<3>.\n.P\nThere are also four escape sequences for forcing the case of inserted letters.\nCase forcing applies to all inserted characters, including those from capture\ngroups and letters within \\eQ...\\eE quoted sequences. The insertion mechanism\nhas three states: no case forcing, force upper case, and force lower case. The\nescape sequences change the current state: \\eU and \\eL change to upper or lower\ncase forcing, respectively, and \\eE (when not terminating a \\eQ quoted\nsequence) reverts to no case forcing. The sequences \\eu and \\el force the next\ncharacter (if it is a letter) to upper or lower case, respectively, and then\nthe state automatically reverts to no case forcing.\n.P\nHowever, if \\eu is immediately followed by \\eL or \\el is immediately followed\nby \\eU, the next character's case is forced by the first escape sequence, and\nsubsequent characters by the second. This provides a \"title casing\" facility\nthat can be applied to group captures. For example, if group 1 has captured\n\"heLLo\", the replacement string \"\\eu\\eL$1\" becomes \"Hello\".\n.P\nIf either PCRE2_UTF or PCRE2_UCP was set when the pattern was compiled, Unicode\nproperties are used for case forcing characters whose code points are greater\nthan 127. However, only simple case folding, as determined by the Unicode file\n\\fBCaseFolding.txt\\fP is supported. PCRE2 does not support language-specific\nspecial casing rules such as using different lower case Greek sigmas in the\nmiddle and ends of words (as defined in the Unicode file\n\\fBSpecialCasing.txt\\fP).\n.P\nNote that case forcing sequences such as \\eU...\\eE do not nest. For example,\nthe result of processing \"\\eUaa\\eLBB\\eEcc\\eE\" is \"AAbbcc\"; the final \\eE has no\neffect. Note also that the PCRE2_ALT_BSUX and PCRE2_EXTRA_ALT_BSUX options do\nnot apply to replacement strings.\n.P\nThe final effect of setting PCRE2_SUBSTITUTE_EXTENDED is to add more\nflexibility to capture group substitution. The syntax is similar to that used\nby Bash:\n.sp\n  ${n:-string}\n  ${n:+string1:string2}\n.sp\nAs in the simple case, \\fIn\\fP may be a group number or a name. The first form\nspecifies a default value. If group \\fIn\\fP is set, its value is inserted; if\nnot, the string is expanded and the result inserted. The second form specifies\nstrings that are expanded and inserted when group \\fIn\\fP is set or unset,\nrespectively. The first form is just a convenient shorthand for\n.sp\n  ${n:+${n}:string}\n.sp\nBackslash can be used to escape colons and closing curly brackets in the\nreplacement strings. A change of the case forcing state within a replacement\nstring remains in force afterwards, as shown in this \\fBpcre2test\\fP example:\n.sp\n  /(some)?(body)/substitute_extended,replace=${1:+\\eU:\\eL}HeLLo\n      body\n   1: hello\n      somebody\n   1: HELLO\n.sp\nThe PCRE2_SUBSTITUTE_UNSET_EMPTY option does not affect these extended\nsubstitutions. However, PCRE2_SUBSTITUTE_UNKNOWN_UNSET does cause unknown\ngroups in the extended syntax forms to be treated as unset.\n.P\nIf PCRE2_SUBSTITUTE_LITERAL is set, PCRE2_SUBSTITUTE_UNKNOWN_UNSET,\nPCRE2_SUBSTITUTE_UNSET_EMPTY, and PCRE2_SUBSTITUTE_EXTENDED are irrelevant and\nare ignored.\n.\n.\n.SS \"Substitution errors\"\n.rs\n.sp\nIn the event of an error, \\fBpcre2_substitute()\\fP returns a negative error\ncode. Except for PCRE2_ERROR_NOMATCH (which is never returned), errors from\n\\fBpcre2_match()\\fP are passed straight back.\n.P\nPCRE2_ERROR_NOSUBSTRING is returned for a non-existent substring insertion,\nunless PCRE2_SUBSTITUTE_UNKNOWN_UNSET is set.\n.P\nPCRE2_ERROR_UNSET is returned for an unset substring insertion (including an\nunknown substring when PCRE2_SUBSTITUTE_UNKNOWN_UNSET is set) when the simple\n(non-extended) syntax is used and PCRE2_SUBSTITUTE_UNSET_EMPTY is not set.\n.P\nPCRE2_ERROR_NOMEMORY is returned if the output buffer is not big enough. If the\nPCRE2_SUBSTITUTE_OVERFLOW_LENGTH option is set, the size of buffer that is\nneeded is returned via \\fIoutlengthptr\\fP. Note that this does not happen by\ndefault.\n.P\nPCRE2_ERROR_NULL is returned if PCRE2_SUBSTITUTE_MATCHED is set but the\n\\fImatch_data\\fP argument is NULL or if the \\fIsubject\\fP or \\fIreplacement\\fP\narguments are NULL. For backward compatibility reasons an exception is made for\nthe \\fIreplacement\\fP argument if the \\fIrlength\\fP argument is also 0.\n.P\nPCRE2_ERROR_BADREPLACEMENT is used for miscellaneous syntax errors in the\nreplacement string, with more particular errors being PCRE2_ERROR_BADREPESCAPE\n(invalid escape sequence), PCRE2_ERROR_REPMISSINGBRACE (closing curly bracket\nnot found), PCRE2_ERROR_BADSUBSTITUTION (syntax error in extended group\nsubstitution), and PCRE2_ERROR_BADSUBSPATTERN (the pattern match ended before\nit started or the match started earlier than the current position in the\nsubject, which can happen if \\eK is used in a lookaround assertion).\n.P\nAs for all PCRE2 errors, a text message that describes the error can be\nobtained by calling the \\fBpcre2_get_error_message()\\fP function (see\n\"Obtaining a textual error message\"\n.\\\" HTML <a href=\"#geterrormessage\">\n.\\\" </a>\nabove).\n.\\\"\n.\n.\n.\\\" HTML <a name=\"subcallouts\"></a>\n.SS \"Substitution callouts\"\n.rs\n.sp\n.nf\n.B int pcre2_set_substitute_callout(pcre2_match_context *\\fImcontext\\fP,\n.B \"  int (*\\fIcallout_function\\fP)(pcre2_substitute_callout_block *, void *),\"\n.B \"  void *\\fIcallout_data\\fP);\"\n.fi\n.sp\nThe \\fBpcre2_set_substitute_callout()\\fP function can be used to specify a\ncallout function for \\fBpcre2_substitute()\\fP. This information is passed in\na match context. The callout function is called after each substitution has\nbeen processed, but it can cause the replacement not to happen.\n.P\nThe callout function is not called for simulated substitutions that happen as a\nresult of the PCRE2_SUBSTITUTE_OVERFLOW_LENGTH option. In this mode, when\nsubstitution processing exceeds the buffer space provided by the caller,\nprocessing continues by counting code units. The simulation is unable to\npopulate the callout block, and so the simulation is pessimistic about the\nrequired buffer size. Whichever is larger of accepted or rejected substitution\nis reported as the required size. Therefore, the returned buffer length may be\nan overestimate (without a substitution callout, it is normally an exact\nmeasurement).\n.P\nThe first argument of the callout function is a pointer to a substitute callout\nblock structure, which contains the following fields, not necessarily in this\norder:\n.sp\n  uint32_t    \\fIversion\\fP;\n  uint32_t    \\fIsubscount\\fP;\n  PCRE2_SPTR  \\fIinput\\fP;\n  PCRE2_SPTR  \\fIoutput\\fP;\n  PCRE2_SIZE \\fI*ovector\\fP;\n  uint32_t    \\fIoveccount\\fP;\n  PCRE2_SIZE  \\fIoutput_offsets[2]\\fP;\n.sp\nThe \\fIversion\\fP field contains the version number of the block format. The\ncurrent version is 0. The version number will increase in future if more fields\nare added, but the intention is never to remove any of the existing fields.\n.P\nThe \\fIsubscount\\fP field is the number of the current match. It is 1 for the\nfirst callout, 2 for the second, and so on. The \\fIinput\\fP and \\fIoutput\\fP\npointers are copies of the values passed to \\fBpcre2_substitute()\\fP.\n.P\nThe \\fIovector\\fP field points to the ovector, which contains the result of the\nmost recent match. The \\fIoveccount\\fP field contains the number of pairs that\nare set in the ovector, and is always greater than zero.\n.P\nThe \\fIoutput_offsets\\fP vector contains the offsets of the replacement in the\noutput string. This has already been processed for dollar and (if requested)\nbackslash substitutions as described above.\n.P\nThe second argument of the callout function is the value passed as\n\\fIcallout_data\\fP when the function was registered. The value returned by the\ncallout function is interpreted as follows:\n.P\nIf the value is zero, the replacement is accepted, and, if\nPCRE2_SUBSTITUTE_GLOBAL is set, processing continues with a search for the next\nmatch. If the value is not zero, the current replacement is not accepted. If\nthe value is greater than zero, processing continues when\nPCRE2_SUBSTITUTE_GLOBAL is set. Otherwise (the value is less than zero or\nPCRE2_SUBSTITUTE_GLOBAL is not set), the rest of the input is copied to the\noutput and the call to \\fBpcre2_substitute()\\fP exits, returning the number of\nmatches so far.\n.\n.\n.SS \"Substitution case callouts\"\n.rs\n.sp\n.nf\n.B int pcre2_set_substitute_case_callout(pcre2_match_context *\\fImcontext\\fP,\n.B \"  PCRE2_SIZE (*\\fIcallout_function\\fP)(PCRE2_SPTR, PCRE2_SIZE,\"\n.B \"                                 PCRE2_UCHAR *, PCRE2_SIZE,\"\n.B \"                                 int, void *),\"\n.B \"  void *\\fIcallout_data\\fP);\"\n.fi\n.sp\nThe \\fBpcre2_set_substitute_case_callout()\\fP function can be used to specify\na callout function for \\fBpcre2_substitute()\\fP to use when performing case\ntransformations. This does not affect any case insensitivity behaviour when\nperforming a match, but only the user-visible transformations performed when\nprocessing a substitution such as:\n.sp\n    pcre2_substitute(..., \"\\e\\eU$1\", ...)\n.P\nThe default case transformations applied by PCRE2 are reasonably complete, and,\nin UTF or UCP mode, perform the simple locale-invariant case transformations as\nspecified by Unicode. This is suitable for the internal (invisible)\ncase-equivalence procedures used during pattern matching, but an application\nmay wish to use more sophisticated locale-aware processing for the user-visible\nsubstitution transformations.\n.P\nOne example implementation of the \\fIcallout_function\\fP using the ICU\nlibrary would be:\n.sp\n.nf\n    PCRE2_SIZE\n    icu_case_callout(\n      PCRE2_SPTR input, PCRE2_SIZE input_len,\n      PCRE2_UCHAR *output, PCRE2_SIZE output_cap,\n      int to_case, void *data_ptr)\n    {\n      UErrorCode err = U_ZERO_ERROR;\n      int32_t r = to_case == PCRE2_SUBSTITUTE_CASE_LOWER\n        ? u_strToLower(output, output_cap, input, input_len, NULL, &err)\n        : to_case == PCRE2_SUBSTITUTE_CASE_UPPER\n        ? u_strToUpper(output, output_cap, input, input_len, NULL, &err)\n        : u_strToTitle(output, output_cap, input, input_len, &first_char_only,\n                       NULL, &err);\n      if (U_FAILURE(err)) return (~(PCRE2_SIZE)0);\n      return r;\n    }\n.fi\n.P\nThe first and second arguments of the case callout function are the Unicode\nstring to transform.\n.P\nThe third and fourth arguments are the output buffer and its capacity.\n.P\nThe fifth is one of the constants PCRE2_SUBSTITUTE_CASE_LOWER,\nPCRE2_SUBSTITUTE_CASE_UPPER, or PCRE2_SUBSTITUTE_CASE_TITLE_FIRST.\nPCRE2_SUBSTITUTE_CASE_LOWER and PCRE2_SUBSTITUTE_CASE_UPPER are passed to the\ncallout to indicate that the case of the entire callout input should be\ncase-transformed. PCRE2_SUBSTITUTE_CASE_TITLE_FIRST is passed to indicate that\nonly the first character or glyph should be transformed to Unicode titlecase\nand the rest to Unicode lowercase (note that titlecasing sometimes uses Unicode\nproperties to titlecase each word in a string; but PCRE2 is requesting that only\nthe single leading character is to be titlecased).\n.P\nThe sixth argument is the \\fIcallout_data\\fP supplied to\n\\fBpcre2_set_substitute_case_callout()\\fP.\n.P\nThe resulting string in the destination buffer may be larger or smaller than the\ninput, if the casing rules merge or split characters. The return value is the\nlength required for the output string. If a buffer of sufficient size was\nprovided to the callout, then the result must be written to the buffer and the\nnumber of code units returned. If the result does not fit in the provided\nbuffer, then the required capacity must be returned and PCRE2 will not make use\nof the output buffer. PCRE2 provides input and output buffers which overlap, so\nthe callout must support this by suitable internal buffering.\n.P\nAlternatively, if the callout wishes to indicate an error, then it may return\n(~(PCRE2_SIZE)0). In this case pcre2_substitute() will immediately fail with\nerror PCRE2_ERROR_REPLACECASE.\n.P\nWhen a case callout is combined with the PCRE2_SUBSTITUTE_OVERFLOW_LENGTH\noption, there are situations when pcre2_substitute() will return an\nunderestimate of the required buffer size. If you call pcre2_substitute() once\nwith PCRE2_SUBSTITUTE_OVERFLOW_LENGTH, and the input buffer is too small for\nthe replacement string to be constructed, then instead of calling the case\ncallout, pcre2_substitute() will make an estimate of the required buffer size.\nThe second call should also pass PCRE2_SUBSTITUTE_OVERFLOW_LENGTH, because that\nsecond call is not guaranteed to succeed either, if the case callout requires\nmore buffer space than expected. The caller must make repeated attempts in a\nloop.\n.\n.\n.SH \"DUPLICATE CAPTURE GROUP NAMES\"\n.rs\n.sp\n.nf\n.B int pcre2_substring_nametable_scan(const pcre2_code *\\fIcode\\fP,\n.B \"  PCRE2_SPTR \\fIname\\fP, PCRE2_SPTR *\\fIfirst\\fP, PCRE2_SPTR *\\fIlast\\fP);\"\n.fi\n.P\nWhen a pattern is compiled with the PCRE2_DUPNAMES option, names for capture\ngroups are not required to be unique. Duplicate names are always allowed for\ngroups with the same number, created by using the (?| feature. Indeed, if such\ngroups are named, they are required to use the same names.\n.P\nNormally, patterns that use duplicate names are such that in any one match,\nonly one of each set of identically-named groups participates. An example is\nshown in the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation.\n.P\nWhen duplicates are present, \\fBpcre2_substring_copy_byname()\\fP and\n\\fBpcre2_substring_get_byname()\\fP return the first substring corresponding to\nthe given name that is set. Only if none are set is PCRE2_ERROR_UNSET is\nreturned. The \\fBpcre2_substring_number_from_name()\\fP function returns the\nerror PCRE2_ERROR_NOUNIQUESUBSTRING when there are duplicate names.\n.P\nIf you want to get full details of all captured substrings for a given name,\nyou must use the \\fBpcre2_substring_nametable_scan()\\fP function. The first\nargument is the compiled pattern, and the second is the name. If the third and\nfourth arguments are NULL, the function returns a group number for a unique\nname, or PCRE2_ERROR_NOUNIQUESUBSTRING otherwise.\n.P\nWhen the third and fourth arguments are not NULL, they must be pointers to\nvariables that are updated by the function. After it has run, they point to the\nfirst and last entries in the name-to-number table for the given name, and the\nfunction returns the length of each entry in code units. In both cases,\nPCRE2_ERROR_NOSUBSTRING is returned if there are no entries for the given name.\n.P\nThe format of the name table is described\n.\\\" HTML <a href=\"#infoaboutpattern\">\n.\\\" </a>\nabove\n.\\\"\nin the section entitled \\fIInformation about a pattern\\fP. Given all the\nrelevant entries for the name, you can extract each of their numbers, and hence\nthe captured data.\n.\n.\n.SH \"FINDING ALL POSSIBLE MATCHES AT ONE POSITION\"\n.rs\n.sp\nThe traditional matching function uses a similar algorithm to Perl, which stops\nwhen it finds the first match at a given point in the subject. If you want to\nfind all possible matches, or the longest possible match at a given position,\nconsider using the alternative matching function (see below) instead. If you\ncannot use the alternative function, you can kludge it up by making use of the\ncallout facility, which is described in the\n.\\\" HREF\n\\fBpcre2callout\\fP\n.\\\"\ndocumentation.\n.P\nWhat you have to do is to insert a callout right at the end of the pattern.\nWhen your callout function is called, extract and save the current matched\nsubstring. Then return 1, which forces \\fBpcre2_match()\\fP to backtrack and try\nother alternatives. Ultimately, when it runs out of matches,\n\\fBpcre2_match()\\fP will yield PCRE2_ERROR_NOMATCH.\n.\n.\n.\\\" HTML <a name=\"dfamatch\"></a>\n.SH \"MATCHING A PATTERN: THE ALTERNATIVE FUNCTION\"\n.rs\n.sp\n.nf\n.B int pcre2_dfa_match(const pcre2_code *\\fIcode\\fP, PCRE2_SPTR \\fIsubject\\fP,\n.B \"  PCRE2_SIZE \\fIlength\\fP, PCRE2_SIZE \\fIstartoffset\\fP,\"\n.B \"  uint32_t \\fIoptions\\fP, pcre2_match_data *\\fImatch_data\\fP,\"\n.B \"  pcre2_match_context *\\fImcontext\\fP,\"\n.B \"  int *\\fIworkspace\\fP, PCRE2_SIZE \\fIwscount\\fP);\"\n.fi\n.P\nThe function \\fBpcre2_dfa_match()\\fP is called to match a subject string\nagainst a compiled pattern, using a matching algorithm that scans the subject\nstring just once (not counting lookaround assertions), and does not backtrack\n(except when processing lookaround assertions). This has different\ncharacteristics to the normal algorithm, and is not compatible with Perl. Some\nof the features of PCRE2 patterns are not supported. Nevertheless, there are\ntimes when this kind of matching can be useful. For a discussion of the two\nmatching algorithms, and a list of features that \\fBpcre2_dfa_match()\\fP does\nnot support, see the\n.\\\" HREF\n\\fBpcre2matching\\fP\n.\\\"\ndocumentation.\n.P\nThe arguments for the \\fBpcre2_dfa_match()\\fP function are the same as for\n\\fBpcre2_match()\\fP, plus two extras. The ovector within the match data block\nis used in a different way, and this is described below. The other common\narguments are used in the same way as for \\fBpcre2_match()\\fP, so their\ndescription is not repeated here.\n.P\nThe two additional arguments provide workspace for the function. The workspace\nvector should contain at least 20 elements. It is used for keeping track of\nmultiple paths through the pattern tree. More workspace is needed for patterns\nand subjects where there are a lot of potential matches.\n.P\nHere is an example of a simple call to \\fBpcre2_dfa_match()\\fP:\n.sp\n  int wspace[20];\n  pcre2_match_data *md = pcre2_match_data_create(4, NULL);\n  int rc = pcre2_dfa_match(\n    re,             /* result of pcre2_compile() */\n    \"some string\",  /* the subject string */\n    11,             /* the length of the subject string */\n    0,              /* start at offset 0 in the subject */\n    0,              /* default options */\n    md,             /* the match data block */\n    NULL,           /* a match context; NULL means use defaults */\n    wspace,         /* working space vector */\n    20);            /* number of elements (NOT size in bytes) */\n.\n.SS \"Option bits for \\fBpcre2_dfa_match()\\fP\"\n.rs\n.sp\nThe unused bits of the \\fIoptions\\fP argument for \\fBpcre2_dfa_match()\\fP must\nbe zero. The only bits that may be set are PCRE2_ANCHORED,\nPCRE2_COPY_MATCHED_SUBJECT, PCRE2_ENDANCHORED, PCRE2_NOTBOL, PCRE2_NOTEOL,\nPCRE2_NOTEMPTY, PCRE2_NOTEMPTY_ATSTART, PCRE2_NO_UTF_CHECK, PCRE2_PARTIAL_HARD,\nPCRE2_PARTIAL_SOFT, PCRE2_DFA_SHORTEST, and PCRE2_DFA_RESTART. All but the last\nfour of these are exactly the same as for \\fBpcre2_match()\\fP, so their\ndescription is not repeated here.\n.sp\n  PCRE2_PARTIAL_HARD\n  PCRE2_PARTIAL_SOFT\n.sp\nThese have the same general effect as they do for \\fBpcre2_match()\\fP, but the\ndetails are slightly different. When PCRE2_PARTIAL_HARD is set for\n\\fBpcre2_dfa_match()\\fP, it returns PCRE2_ERROR_PARTIAL if the end of the\nsubject is reached and there is still at least one matching possibility that\nrequires additional characters. This happens even if some complete matches have\nalready been found. When PCRE2_PARTIAL_SOFT is set, the return code\nPCRE2_ERROR_NOMATCH is converted into PCRE2_ERROR_PARTIAL if the end of the\nsubject is reached, there have been no complete matches, but there is still at\nleast one matching possibility. The portion of the string that was inspected\nwhen the longest partial match was found is set as the first matching string in\nboth cases. There is a more detailed discussion of partial and multi-segment\nmatching, with examples, in the\n.\\\" HREF\n\\fBpcre2partial\\fP\n.\\\"\ndocumentation.\n.sp\n  PCRE2_DFA_SHORTEST\n.sp\nSetting the PCRE2_DFA_SHORTEST option causes the matching algorithm to stop as\nsoon as it has found one match. Because of the way the alternative algorithm\nworks, this is necessarily the shortest possible match at the first possible\nmatching point in the subject string.\n.sp\n  PCRE2_DFA_RESTART\n.sp\nWhen \\fBpcre2_dfa_match()\\fP returns a partial match, it is possible to call it\nagain, with additional subject characters, and have it continue with the same\nmatch. The PCRE2_DFA_RESTART option requests this action; when it is set, the\n\\fIworkspace\\fP and \\fIwscount\\fP options must reference the same vector as\nbefore because data about the match so far is left in them after a partial\nmatch. There is more discussion of this facility in the\n.\\\" HREF\n\\fBpcre2partial\\fP\n.\\\"\ndocumentation.\n.\n.\n.SS \"Successful returns from \\fBpcre2_dfa_match()\\fP\"\n.rs\n.sp\nWhen \\fBpcre2_dfa_match()\\fP succeeds, it may have matched more than one\nsubstring in the subject. Note, however, that all the matches from one run of\nthe function start at the same point in the subject. The shorter matches are\nall initial substrings of the longer matches. For example, if the pattern\n.sp\n  <.*>\n.sp\nis matched against the string\n.sp\n  This is <something> <something else> <something further> no more\n.sp\nthe three matched strings are\n.sp\n  <something> <something else> <something further>\n  <something> <something else>\n  <something>\n.sp\nOn success, the yield of the function is a number greater than zero, which is\nthe number of matched substrings. The offsets of the substrings are returned in\nthe ovector, and can be extracted by number in the same way as for\n\\fBpcre2_match()\\fP, but the numbers bear no relation to any capture groups\nthat may exist in the pattern, because DFA matching does not support capturing.\n.P\nCalls to the convenience functions that extract substrings by name\nreturn the error PCRE2_ERROR_DFA_UFUNC (unsupported function) if used after a\nDFA match. The convenience functions that extract substrings by number never\nreturn PCRE2_ERROR_NOSUBSTRING.\n.P\nThe matched strings are stored in the ovector in reverse order of length; that\nis, the longest matching string is first. If there were too many matches to fit\ninto the ovector, the yield of the function is zero, and the vector is filled\nwith the longest matches.\n.P\nNOTE: PCRE2's \"auto-possessification\" optimization usually applies to character\nrepeats at the end of a pattern (as well as internally). For example, the\npattern \"a\\ed+\" is compiled as if it were \"a\\ed++\". For DFA matching, this\nmeans that only one possible match is found. If you really do want multiple\nmatches in such cases, either use an ungreedy repeat such as \"a\\ed+?\" or set\nthe PCRE2_NO_AUTO_POSSESS option when compiling.\n.\n.\n.SS \"Error returns from \\fBpcre2_dfa_match()\\fP\"\n.rs\n.sp\nThe \\fBpcre2_dfa_match()\\fP function returns a negative number when it fails.\nMany of the errors are the same as for \\fBpcre2_match()\\fP, as described\n.\\\" HTML <a href=\"#errorlist\">\n.\\\" </a>\nabove.\n.\\\"\nThere are in addition the following errors that are specific to\n\\fBpcre2_dfa_match()\\fP:\n.sp\n  PCRE2_ERROR_DFA_UITEM\n.sp\nThis return is given if \\fBpcre2_dfa_match()\\fP encounters an item in the\npattern that it does not support, for instance, the use of \\eC in a UTF mode or\na backreference.\n.sp\n  PCRE2_ERROR_DFA_UCOND\n.sp\nThis return is given if \\fBpcre2_dfa_match()\\fP encounters a condition item\nthat uses a backreference for the condition, or a test for recursion in a\nspecific capture group. These are not supported.\n.sp\n  PCRE2_ERROR_DFA_UINVALID_UTF\n.sp\nThis return is given if \\fBpcre2_dfa_match()\\fP is called for a pattern that\nwas compiled with PCRE2_MATCH_INVALID_UTF. This is not supported for DFA\nmatching.\n.sp\n  PCRE2_ERROR_DFA_WSSIZE\n.sp\nThis return is given if \\fBpcre2_dfa_match()\\fP runs out of space in the\n\\fIworkspace\\fP vector.\n.sp\n  PCRE2_ERROR_DFA_RECURSE\n.sp\nWhen a recursion or subroutine call is processed, the matching function calls\nitself recursively, using private memory for the ovector and \\fIworkspace\\fP.\nThis error is given if the internal ovector is not large enough. This should be\nextremely rare, as a vector of size 1000 is used.\n.sp\n  PCRE2_ERROR_DFA_BADRESTART\n.sp\nWhen \\fBpcre2_dfa_match()\\fP is called with the \\fBPCRE2_DFA_RESTART\\fP option,\nsome plausibility checks are made on the contents of the workspace, which\nshould contain data about the previous partial match. If any of these checks\nfail, this error is given.\n.\n.\n.SH \"SEE ALSO\"\n.rs\n.sp\n\\fBpcre2build\\fP(3), \\fBpcre2callout\\fP(3), \\fBpcre2demo(3)\\fP,\n\\fBpcre2matching\\fP(3), \\fBpcre2partial\\fP(3), \\fBpcre2posix\\fP(3),\n\\fBpcre2sample\\fP(3), \\fBpcre2unicode\\fP(3).\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 29 October 2025\nCopyright (c) 1997-2024 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2build.3",
    "content": ".TH PCRE2BUILD 3 \"17 October 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.\n.\n.SH \"BUILDING PCRE2\"\n.rs\n.sp\nPCRE2 is distributed with a \\fBconfigure\\fP script that can be used to build\nthe library in Unix-like environments using the Autotools applications. Also in\nthe distribution are files to support building using \\fBCMake\\fP instead of\n\\fBconfigure\\fP. The text file\n.\\\" HTML <a href=\"README.txt\">\n.\\\" </a>\n\\fBREADME\\fP\n.\\\"\ncontains general information about building with Autotools (some of which is\nrepeated below), and also has some comments about building on various operating\nsystems. The files in the \\fBvms\\fP directory support building under OpenVMS.\nThere is a lot more information about building PCRE2 without using\nAutotools (including information about using \\fBCMake\\fP and building \"by\nhand\") in the text file called\n.\\\" HTML <a href=\"NON-AUTOTOOLS-BUILD.txt\">\n.\\\" </a>\n\\fBNON-AUTOTOOLS-BUILD\\fP.\n.\\\"\nYou should consult this file as well as the\n.\\\" HTML <a href=\"README.txt\">\n.\\\" </a>\n\\fBREADME\\fP\n.\\\"\nfile if you are building in a non-Unix-like environment.\n.\n.\n.SH \"PCRE2 BUILD-TIME OPTIONS\"\n.rs\n.sp\nThe rest of this document describes the optional features of PCRE2 that can be\nselected when the library is compiled. It assumes use of the \\fBconfigure\\fP\nscript, where the optional features are selected or deselected by providing\noptions to \\fBconfigure\\fP before running the \\fBmake\\fP command. However, the\nsame options can be selected in both Unix-like and non-Unix-like environments\nif you are using \\fBCMake\\fP instead of \\fBconfigure\\fP to build PCRE2.\n.P\nIf you are not using Autotools or \\fBCMake\\fP, option selection can be done by\nediting the \\fBconfig.h\\fP file, or by passing parameter settings to the\ncompiler, as described in\n.\\\" HTML <a href=\"NON-AUTOTOOLS-BUILD.txt\">\n.\\\" </a>\n\\fBNON-AUTOTOOLS-BUILD\\fP.\n.\\\"\n.P\nThe complete list of options for \\fBconfigure\\fP (which includes the standard\nones such as the selection of the installation directory) can be obtained by\nrunning\n.sp\n  ./configure --help\n.sp\nThe following sections include descriptions of \"on/off\" options whose names\nbegin with --enable or --disable. Because of the way that \\fBconfigure\\fP\nworks, --enable and --disable always come in pairs, so the complementary option\nalways exists as well, but as it specifies the default, it is not described.\nOptions that specify values have names that start with --with. At the end of a\n\\fBconfigure\\fP run, a summary of the configuration is output.\n.\n.\n.SH \"BUILDING 8-BIT, 16-BIT AND 32-BIT LIBRARIES\"\n.rs\n.sp\nBy default, a library called \\fBlibpcre2-8\\fP is built, containing functions\nthat take string arguments contained in arrays of bytes, interpreted either as\nsingle-byte characters, or UTF-8 strings. You can also build two other\nlibraries, called \\fBlibpcre2-16\\fP and \\fBlibpcre2-32\\fP, which process\nstrings that are contained in arrays of 16-bit and 32-bit code units,\nrespectively. These can be interpreted either as single-unit characters or\nUTF-16/UTF-32 strings. To build these additional libraries, add one or both of\nthe following to the \\fBconfigure\\fP command:\n.sp\n  --enable-pcre2-16\n  --enable-pcre2-32\n.sp\nIf you do not want the 8-bit library, add\n.sp\n  --disable-pcre2-8\n.sp\nas well. At least one of the three libraries must be built. Note that the POSIX\nwrapper is for the 8-bit library only, and that \\fBpcre2grep\\fP is an 8-bit\nprogram. Neither of these are built if you select only the 16-bit or 32-bit\nlibraries.\n.\n.\n.SH \"BUILDING SHARED AND STATIC LIBRARIES\"\n.rs\n.sp\nThe Autotools PCRE2 building process uses \\fBlibtool\\fP to build both shared\nand static libraries by default. You can suppress an unwanted library by adding\none of\n.sp\n  --disable-shared\n  --disable-static\n.sp\nto the \\fBconfigure\\fP command. Setting --disable-shared ensures that PCRE2\nlibraries are built as static libraries. The binaries that are then created as\npart of the build process (for example, \\fBpcre2test\\fP and \\fBpcre2grep\\fP)\nare linked statically with one or more PCRE2 libraries, but may also be\ndynamically linked with other libraries such as \\fBlibc\\fP. If you want these\nbinaries to be fully statically linked, you can set LDFLAGS like this:\n.sp\nLDFLAGS=--static ./configure --disable-shared\n.sp\nNote the two hyphens in --static. Of course, this works only if static versions\nof all the relevant libraries are available for linking.\n.\n.\n.SH \"UNICODE AND UTF SUPPORT\"\n.rs\n.sp\nBy default, PCRE2 is built with support for Unicode and UTF character strings.\nTo build it without Unicode support, add\n.sp\n  --disable-unicode\n.sp\nto the \\fBconfigure\\fP command. This setting applies to all three libraries. It\nis not possible to build one library with Unicode support and another without\nin the same configuration.\n.P\nOf itself, Unicode support does not make PCRE2 treat strings as UTF-8, UTF-16\nor UTF-32. To do that, applications that use the library can set the PCRE2_UTF\noption when they call \\fBpcre2_compile()\\fP to compile a pattern.\nAlternatively, patterns may be started with (*UTF) unless the application has\nlocked this out by setting PCRE2_NEVER_UTF.\n.P\nUTF support allows the libraries to process character code points up to\n0x10ffff in the strings that they handle. Unicode support also gives access to\nthe Unicode properties of characters, using pattern escapes such as \\eP, \\ep,\nand \\eX. Only the general category properties such as \\fILu\\fP and \\fINd\\fP,\nscript names, and some bi-directional and binary properties are supported.\nDetails are given in the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation.\n.P\nPattern escapes such as \\ed and \\ew do not by default make use of Unicode\nproperties. The application can request that they do by setting the PCRE2_UCP\noption. Unless the application has set PCRE2_NEVER_UCP, a pattern may also\nrequest this by starting with (*UCP).\n.\n.\n.SH \"DISABLING THE USE OF \\eC\"\n.rs\n.sp\nThe \\eC escape sequence, which matches a single code unit, even in a UTF mode,\ncan cause unpredictable behaviour because it may leave the current matching\npoint in the middle of a multi-code-unit character. The application can lock\nit out by setting the PCRE2_NEVER_BACKSLASH_C option when calling\n\\fBpcre2_compile()\\fP. There is also a build-time option\n.sp\n  --enable-never-backslash-C\n.sp\n(note the upper case C) which locks out the use of \\eC entirely.\n.\n.\n.SH \"JUST-IN-TIME COMPILER SUPPORT\"\n.rs\n.sp\nJust-in-time (JIT) compiler support is included in the build by specifying\n.sp\n  --enable-jit\n.sp\nThis support is available only for certain hardware architectures. If this\noption is set for an unsupported architecture, a building error occurs.\nIf in doubt, use\n.sp\n  --enable-jit=auto\n.sp\nwhich enables JIT only if the current hardware is supported. You can check\nif JIT is enabled in the configuration summary that is output at the end of a\n\\fBconfigure\\fP run. If you are enabling JIT under SELinux you may also want to\nadd\n.sp\n  --enable-jit-sealloc\n.sp\nwhich enables the use of an execmem allocator in JIT that is compatible with\nSELinux. This has no effect if JIT is not enabled. See the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\ndocumentation for a discussion of JIT usage. When JIT support is enabled,\n\\fBpcre2grep\\fP automatically makes use of it, unless you add\n.sp\n  --disable-pcre2grep-jit\n.sp\nto the \\fBconfigure\\fP command.\n.\n.\n.SH \"NEWLINE RECOGNITION\"\n.rs\n.sp\nBy default, PCRE2 interprets the linefeed (LF) character as indicating the end\nof a line. This is the normal newline character on Unix-like systems. You can\ncompile PCRE2 to use carriage return (CR) instead, by adding\n.sp\n  --enable-newline-is-cr\n.sp\nto the \\fBconfigure\\fP command. There is also an --enable-newline-is-lf option,\nwhich explicitly specifies linefeed as the newline character.\n.P\nAlternatively, you can specify that line endings are to be indicated by the\ntwo-character sequence CRLF (CR immediately followed by LF). If you want this,\nadd\n.sp\n  --enable-newline-is-crlf\n.sp\nto the \\fBconfigure\\fP command. There is a fourth option, specified by\n.sp\n  --enable-newline-is-anycrlf\n.sp\nwhich causes PCRE2 to recognize any of the three sequences CR, LF, or CRLF as\nindicating a line ending. A fifth option, specified by\n.sp\n  --enable-newline-is-any\n.sp\ncauses PCRE2 to recognize any Unicode newline sequence. The Unicode newline\nsequences are the three just mentioned, plus the single characters VT (vertical\ntab, U+000B), FF (form feed, U+000C), NEL (next line, U+0085), LS (line\nseparator, U+2028), and PS (paragraph separator, U+2029). The final option is\n.sp\n  --enable-newline-is-nul\n.sp\nwhich causes NUL (binary zero) to be set as the default line-ending character.\n.P\nWhatever default line ending convention is selected when PCRE2 is built can be\noverridden by applications that use the library. At build time it is\nrecommended to use the standard for your operating system.\n.\n.\n.SH \"WHAT \\eR MATCHES\"\n.rs\n.sp\nBy default, the sequence \\eR in a pattern matches any Unicode newline sequence,\nindependently of what has been selected as the line ending sequence. If you\nspecify\n.sp\n  --enable-bsr-anycrlf\n.sp\nthe default is changed so that \\eR matches only CR, LF, or CRLF. Whatever is\nselected when PCRE2 is built can be overridden by applications that use the\nlibrary.\n.\n.\n.SH \"HANDLING VERY LARGE PATTERNS\"\n.rs\n.sp\nWithin a compiled pattern, offset values are used to point from one part to\nanother (for example, from an opening parenthesis to an alternation\nmetacharacter). By default, in the 8-bit and 16-bit libraries, two-byte values\nare used for these offsets, leading to a maximum size for a compiled pattern of\naround 64 thousand code units. This is sufficient to handle all but the most\ngigantic patterns. Nevertheless, some people do want to process truly enormous\npatterns, so it is possible to compile PCRE2 to use three-byte or four-byte\noffsets by adding a setting such as\n.sp\n  --with-link-size=3\n.sp\nto the \\fBconfigure\\fP command. The value given must be 2, 3, or 4. For the\n16-bit library, a value of 3 is rounded up to 4. In these libraries, using\nlonger offsets slows down the operation of PCRE2 because it has to load\nadditional data when handling them. For the 32-bit library the value is always\n4 and cannot be overridden; the value of --with-link-size is ignored.\n.\n.\n.SH \"LIMITING PCRE2 RESOURCE USAGE\"\n.rs\n.sp\nThe \\fBpcre2_match()\\fP function increments a counter each time it goes round\nits main loop. Putting a limit on this counter controls the amount of computing\nresource used by a single call to \\fBpcre2_match()\\fP. The limit can be changed\nat run time, as described in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation. The default is 10 million, but this can be changed by adding a\nsetting such as\n.sp\n  --with-match-limit=500000\n.sp\nto the \\fBconfigure\\fP command. This setting also applies to the\n\\fBpcre2_dfa_match()\\fP matching function, and to JIT matching (though the\ncounting is done differently).\n.P\nThe \\fBpcre2_match()\\fP function uses heap memory to record backtracking\npoints. The more nested backtracking points there are (that is, the deeper the\nsearch tree), the more memory is needed. There is an upper limit, specified in\nkibibytes (units of 1024 bytes). This limit can be changed at run time, as\ndescribed in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation. The default limit (in effect unlimited) is 20 million. You can\nchange this by a setting such as\n.sp\n  --with-heap-limit=500\n.sp\nwhich limits the amount of heap to 500 KiB. This limit applies only to\ninterpretive matching in \\fBpcre2_match()\\fP and \\fBpcre2_dfa_match()\\fP, which\nmay also use the heap for internal workspace when processing complicated\npatterns. This limit does not apply when JIT (which has its own memory\narrangements) is used.\n.P\nYou can also explicitly limit the depth of nested backtracking in the\n\\fBpcre2_match()\\fP interpreter. This limit defaults to the value that is set\nfor --with-match-limit. You can set a lower default limit by adding, for\nexample,\n.sp\n  --with-match-limit-depth=10000\n.sp\nto the \\fBconfigure\\fP command. This value can be overridden at run time. This\ndepth limit indirectly limits the amount of heap memory that is used, but\nbecause the size of each backtracking \"frame\" depends on the number of\ncapturing parentheses in a pattern, the amount of heap that is used before the\nlimit is reached varies from pattern to pattern. This limit was more useful in\nversions before 10.30, where function recursion was used for backtracking.\n.P\nAs well as applying to \\fBpcre2_match()\\fP, the depth limit also controls\nthe depth of recursive function calls in \\fBpcre2_dfa_match()\\fP. These are\nused for lookaround assertions, atomic groups, and recursion within patterns.\nThe limit does not apply to JIT matching.\n.\n.\n.SH \"LIMITING VARIABLE-LENGTH LOOKBEHIND ASSERTIONS\"\n.rs\n.sp\nLookbehind assertions in which one or more branches can match a variable number\nof characters are supported only if there is a maximum matching length for each\ntop-level branch. There is a limit to this maximum that defaults to 255\ncharacters. You can alter this default by a setting such as\n.sp\n  --with-max-varlookbehind=100\n.sp\nThe limit can be changed at runtime by calling\n\\fBpcre2_set_max_varlookbehind()\\fP. Lookbehind assertions in which every\nbranch matches a fixed number of characters (not necessarily all the same) are\nnot constrained by this limit.\n.\n.\n.\\\" HTML <a name=\"createtables\"></a>\n.SH \"CREATING CHARACTER TABLES AT BUILD TIME\"\n.rs\n.sp\nPCRE2 uses fixed tables for processing characters whose code points are less\nthan 256. By default, PCRE2 is built with a set of tables that are distributed\nin the file \\fIsrc/pcre2_chartables.c.dist\\fP. These tables are for ASCII codes\nonly. If you add\n.sp\n  --enable-rebuild-chartables\n.sp\nto the \\fBconfigure\\fP command, the distributed tables are no longer used.\nInstead, a program called \\fBpcre2_dftables\\fP is compiled and run. This\noutputs the source for new set of tables, created in the default locale of your\nC run-time system. This method of replacing the tables does not work if you are\ncross compiling, because \\fBpcre2_dftables\\fP needs to be run on the local\nhost and therefore not compiled with the cross compiler.\n.P\nIf you need to create alternative tables when cross compiling, you will have to\ndo so \"by hand\". There may also be other reasons for creating tables manually.\nTo cause \\fBpcre2_dftables\\fP to be built on the local host, run a normal\ncompiling command, and then run the program with the output file as its\nargument, for example:\n.sp\n  cc src/pcre2_dftables.c -o pcre2_dftables\n  ./pcre2_dftables src/pcre2_chartables.c\n.sp\nThis builds the tables in the default locale of the local host. If you want to\nspecify a locale, you must use the -L option:\n.sp\n  LC_ALL=fr_FR ./pcre2_dftables -L src/pcre2_chartables.c\n.sp\nYou can also specify -b (with or without -L). This causes the tables to be\nwritten in binary instead of as source code. A set of binary tables can be\nloaded into memory by an application and passed to \\fBpcre2_compile()\\fP in the\nsame way as tables created by calling \\fBpcre2_maketables()\\fP. The tables are\njust a string of bytes, independent of hardware characteristics such as\nendianness. This means they can be bundled with an application that runs in\ndifferent environments, to ensure consistent behaviour.\n.\n.\n.SH \"USING EBCDIC CODE\"\n.rs\n.sp\nPCRE2 assumes by default that it will run in an environment where the character\ncode is ASCII or Unicode, which is a superset of ASCII. This is the case for\nmost computer operating systems. PCRE2 can, however, be compiled to run in an\n8-bit EBCDIC environment by adding\n.sp\n  --enable-ebcdic --disable-unicode\n.sp\nto the \\fBconfigure\\fP command. You should only use it if you know that you are\nin an EBCDIC environment (for example, an IBM mainframe operating system).\n.P\nThis setting implies --enable-rebuild-chartables, in order to ensure that you\nhave the correct default character tables for your system's codepage. There is\nan exception when you set --enable-ebcdic-ignoring-compiler (see below), which\nallows using a default set of EBCDIC 1047 character tables rather than forcing\nuse of --enable-rebuild-chartables.\n.P\nIt is not supported to enable both EBCDIC input and either ASCII or UTF-8/16/32\nin the same build of the library. When PCRE2 is built with EBCDIC support, it\nalways operates in EBCDIC, and consequently --enable-unicode and --enable-ebcdic\nare mutually exclusive.\n.P\nThe EBCDIC character that corresponds to an ASCII LF is assumed to have the\nvalue 0x15 by default. However, in some EBCDIC environments, 0x25 is used. In\nsuch an environment you should use\n.sp\n  --enable-ebcdic-nl25\n.sp\n(which implies --enable-ebcdic). The EBCDIC character for CR has the same value\nas in ASCII, namely, 0x0d. Whichever of 0x15 and 0x25 is \\fInot\\fP chosen as LF\nis made to correspond to the Unicode NEL character (which, in Unicode, is 0x85).\n.P\nThe options that select newline behaviour, such as --enable-newline-is-cr,\nand equivalent run-time options, refer to these character values in an EBCDIC\nenvironment.\n.P\nOn systems requiring an EBCDIC build of PCRE2, the compiler should be set to use\nthe correct codepage, so that C character literals such as 'z' use the correct\nnumeric value for whichever EBCDIC codpage is in use. (PCRE2 cannot support\nmultiple EBCDIC codepages dynamically.) However, if this not possible, then you\ncan use\n.sp\n  --enable-ebcdic-ignoring-compiler\n.sp\nin order to disregard the compiler's codepage, and instead force PCRE2 to use\nnumeric constants corresponding to the EBCDIC 1047 codepage instead. This can be\nused to build (or test) EBCDIC support on an ASCII/UTF-8 system such as Linux.\n.\n.\n.SH \"PCRE2GREP SUPPORT FOR EXTERNAL SCRIPTS\"\n.rs\n.sp\nBy default \\fBpcre2grep\\fP supports the use of callouts with string arguments\nwithin the patterns it is matching. There are two kinds: one that generates\noutput using local code, and another that calls an external program or script.\nIf --disable-pcre2grep-callout-fork is added to the \\fBconfigure\\fP command,\nonly the first kind of callout is supported; if --disable-pcre2grep-callout is\nused, all callouts are completely ignored. For more details of \\fBpcre2grep\\fP\ncallouts, see the\n.\\\" HREF\n\\fBpcre2grep\\fP\n.\\\"\ndocumentation.\n.\n.\n.SH \"PCRE2GREP OPTIONS FOR COMPRESSED FILE SUPPORT\"\n.rs\n.sp\nBy default, \\fBpcre2grep\\fP reads all files as plain text. You can build it so\nthat it recognizes files whose names end in \\fB.gz\\fP or \\fB.bz2\\fP, and reads\nthem with \\fBlibz\\fP or \\fBlibbz2\\fP, respectively, by adding one or both of\n.sp\n  --enable-pcre2grep-libz\n  --enable-pcre2grep-libbz2\n.sp\nto the \\fBconfigure\\fP command. These options naturally require that the\nrelevant libraries are installed on your system. Configuration will fail if\nthey are not.\n.\n.\n.SH \"PCRE2GREP BUFFER SIZE\"\n.rs\n.sp\n\\fBpcre2grep\\fP uses an internal buffer to hold a \"window\" on the file it is\nscanning, in order to be able to output \"before\" and \"after\" lines when it\nfinds a match. The default starting size of the buffer is 20KiB. The buffer\nitself is three times this size, but because of the way it is used for holding\n\"before\" lines, the longest line that is guaranteed to be processable is the\nnotional buffer size. If a longer line is encountered, \\fBpcre2grep\\fP\nautomatically expands the buffer, up to a specified maximum size, whose default\nis 1MiB or the starting size, whichever is the larger. You can change the\ndefault parameter values by adding, for example,\n.sp\n  --with-pcre2grep-bufsize=51200\n  --with-pcre2grep-max-bufsize=2097152\n.sp\nto the \\fBconfigure\\fP command. The caller of \\fBpcre2grep\\fP can override\nthese values by using --buffer-size and --max-buffer-size on the command line.\n.\n.\n.SH \"PCRE2TEST OPTION FOR LIBREADLINE SUPPORT\"\n.rs\n.sp\nIf you add one of\n.sp\n  --enable-pcre2test-libreadline\n  --enable-pcre2test-libedit\n.sp\nto the \\fBconfigure\\fP command, \\fBpcre2test\\fP is linked with the\n\\fBlibreadline\\fP or\\fBlibedit\\fP library, respectively, and when its input is\nfrom a terminal, it reads it using the \\fBreadline()\\fP function. This provides\nline-editing and history facilities. Note that \\fBlibreadline\\fP is\nGPL-licensed, so if you distribute a binary of \\fBpcre2test\\fP linked in this\nway, there may be licensing issues. These can be avoided by linking instead\nwith \\fBlibedit\\fP, which has a BSD licence.\n.P\nSetting --enable-pcre2test-libreadline causes the \\fB-lreadline\\fP option to be\nadded to the \\fBpcre2test\\fP build. In many operating environments with a\nsystem-installed readline library this is sufficient. However, in some\nenvironments (e.g. if an unmodified distribution version of readline is in\nuse), some extra configuration may be necessary. The INSTALL file for\n\\fBlibreadline\\fP says this:\n.sp\n  \"Readline uses the termcap functions, but does not link with\n  the termcap or curses library itself, allowing applications\n  which link with readline the to choose an appropriate library.\"\n.sp\nIf your environment has not been set up so that an appropriate library is\nautomatically included, you may need to add something like\n.sp\n  LIBS=\"-lncurses\"\n.sp\nimmediately before the \\fBconfigure\\fP command.\n.\n.\n.SH \"INCLUDING DEBUGGING CODE\"\n.rs\n.sp\nIf you add\n.sp\n  --enable-debug\n.sp\nto the \\fBconfigure\\fP command, additional debugging code is included in the\nbuild. This feature is intended for use by the PCRE2 maintainers.\n.\n.\n.SH \"DEBUGGING WITH VALGRIND SUPPORT\"\n.rs\n.sp\nIf you add\n.sp\n  --enable-valgrind\n.sp\nto the \\fBconfigure\\fP command, PCRE2 will use valgrind annotations to mark\ncertain memory regions as unaddressable. This allows it to detect invalid\nmemory accesses, and is mostly useful for debugging PCRE2 itself.\n.\n.\n.SH \"CODE COVERAGE REPORTING\"\n.rs\n.sp\nIf your C compiler is gcc, you can build a version of PCRE2 that can generate a\ncode coverage report for its test suite. To enable this, you must install\n\\fBlcov\\fP version 1.6 or above. Then specify\n.sp\n  --enable-coverage\n.sp\nto the \\fBconfigure\\fP command and build PCRE2 in the usual way.\n.P\nNote that using \\fBccache\\fP (a caching C compiler) is incompatible with code\ncoverage reporting. If you have configured \\fBccache\\fP to run automatically\non your system, you must set the environment variable\n.sp\n  CCACHE_DISABLE=1\n.sp\nbefore running \\fBmake\\fP to build PCRE2, so that \\fBccache\\fP is not used.\n.P\nWhen --enable-coverage is used, the following addition targets are added to the\n\\fIMakefile\\fP:\n.sp\n  make coverage\n.sp\nThis creates a fresh coverage report for the PCRE2 test suite. It is equivalent\nto running \"make coverage-reset\", \"make coverage-baseline\", \"make check\", and\nthen \"make coverage-report\".\n.sp\n  make coverage-reset\n.sp\nThis zeroes the coverage counters, but does nothing else.\n.sp\n  make coverage-baseline\n.sp\nThis captures baseline coverage information.\n.sp\n  make coverage-report\n.sp\nThis creates the coverage report.\n.sp\n  make coverage-clean-report\n.sp\nThis removes the generated coverage report without cleaning the coverage data\nitself.\n.sp\n  make coverage-clean-data\n.sp\nThis removes the captured coverage data without removing the coverage files\ncreated at compile time (*.gcno).\n.sp\n  make coverage-clean\n.sp\nThis cleans all coverage data including the generated coverage report. For more\ninformation about code coverage, see the \\fBgcov\\fP and \\fBlcov\\fP\ndocumentation.\n.\n.\n.SH \"DISABLING THE Z AND T FORMATTING MODIFIERS\"\n.rs\n.sp\nThe C99 standard defines formatting modifiers z and t for size_t and\nptrdiff_t values, respectively. By default, PCRE2 uses these modifiers in\nenvironments other than old versions of Microsoft Visual Studio when\n__STDC_VERSION__ is defined and has a value greater than or equal to 199901L\n(indicating support for C99).\nHowever, there is at least one environment that claims to be C99 but does not\nsupport these modifiers. If\n.sp\n  --disable-percent-zt\n.sp\nis specified, no use is made of the z or t modifiers. Instead of %td or %zu,\na suitable format is used depending in the size of long for the platform.\n.\n.\n.SH \"SUPPORT FOR FUZZERS\"\n.rs\n.sp\nThere is a special option for use by people who want to run fuzzing tests on\nPCRE2:\n.sp\n  --enable-fuzz-support\n.sp\nAt present this applies only to the 8-bit library. If set, it causes an extra\nlibrary called libpcre2-fuzzsupport.a to be built, but not installed. This\ncontains a single function called LLVMFuzzerTestOneInput() whose arguments are\na pointer to a string and the length of the string. When called, this function\ntries to compile the string as a pattern, and if that succeeds, to match it.\nThis is done both with no options and with some random options bits that are\ngenerated from the string.\n.P\nSetting --enable-fuzz-support also causes a binary called \\fBpcre2fuzzcheck\\fP\nto be created. This is normally run under valgrind or used when PCRE2 is\ncompiled with address sanitizing enabled. It calls the fuzzing function and\noutputs information about what it is doing. The input strings are specified by\narguments: if an argument starts with \"=\" the rest of it is a literal input\nstring. Otherwise, it is assumed to be a file name, and the contents of the\nfile are the test string.\n.\n.\n.SH \"OBSOLETE OPTION\"\n.rs\n.sp\nIn versions of PCRE2 prior to 10.30, there were two ways of handling\nbacktracking in the \\fBpcre2_match()\\fP function. The default was to use the\nsystem stack, but if\n.sp\n  --disable-stack-for-recursion\n.sp\nwas set, memory on the heap was used. From release 10.30 onwards this has\nchanged (the stack is no longer used) and this option now does nothing except\ngive a warning.\n.\n.SH \"SEE ALSO\"\n.rs\n.sp\n\\fBpcre2api\\fP(3), \\fBpcre2-config\\fP(3).\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 17 October 2025\nCopyright (c) 1997-2024 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2callout.3",
    "content": ".TH PCRE2CALLOUT 3 \"26 February 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH SYNOPSIS\n.rs\n.sp\n.B #include <pcre2.h>\n.PP\n.nf\n.B int (*pcre2_callout)(pcre2_callout_block *, void *);\n.sp\n.B int pcre2_callout_enumerate(const pcre2_code *\\fIcode\\fP,\n.B \"  int (*\\fIcallback\\fP)(pcre2_callout_enumerate_block *, void *),\"\n.B \"  void *\\fIuser_data\\fP);\"\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nPCRE2 provides a feature called \"callout\", which is a means of temporarily\npassing control to the caller of PCRE2 in the middle of pattern matching. The\ncaller of PCRE2 provides an external function by putting its entry point in\na match context (see \\fBpcre2_set_callout()\\fP in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation).\n.P\nWhen using the \\fBpcre2_substitute()\\fP function, an additional callout feature\nis available. This does a callout after each change to the subject string and\nis described in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation; the rest of this document is concerned with callouts during\npattern matching.\n.P\nWithin a regular expression, (?C<arg>) indicates a point at which the external\nfunction is to be called. Different callout points can be identified by putting\na number less than 256 after the letter C. The default value is zero.\nAlternatively, the argument may be a delimited string. The starting delimiter\nmust be one of ` ' \" ^ % # $ { and the ending delimiter is the same as the\nstart, except for {, where the ending delimiter is }. If the ending delimiter\nis needed within the string, it must be doubled. For example, this pattern has\ntwo callout points:\n.sp\n  (?C1)abc(?C\"some \"\"arbitrary\"\" text\")def\n.sp\nIf the PCRE2_AUTO_CALLOUT option bit is set when a pattern is compiled, PCRE2\nautomatically inserts callouts, all with number 255, before each item in the\npattern except for immediately before or after an explicit callout. For\nexample, if PCRE2_AUTO_CALLOUT is used with the pattern\n.sp\n  A(?C3)B\n.sp\nit is processed as if it were\n.sp\n  (?C255)A(?C3)B(?C255)\n.sp\nHere is a more complicated example:\n.sp\n  A(\\ed{2}|--)\n.sp\nWith PCRE2_AUTO_CALLOUT, this pattern is processed as if it were\n.sp\n  (?C255)A(?C255)((?C255)\\ed{2}(?C255)|(?C255)-(?C255)-(?C255))(?C255)\n.sp\nNotice that there is a callout before and after each parenthesis and\nalternation bar. If the pattern contains a conditional group whose condition is\nan assertion, an automatic callout is inserted immediately before the\ncondition. Such a callout may also be inserted explicitly, for example:\n.sp\n  (?(?C9)(?=a)ab|de)  (?(?C%text%)(?!=d)ab|de)\n.sp\nThis applies only to assertion conditions (because they are themselves\nindependent groups).\n.P\nCallouts can be useful for tracking the progress of pattern matching. The\n.\\\" HREF\n\\fBpcre2test\\fP\n.\\\"\nprogram has a pattern qualifier (/auto_callout) that sets automatic callouts.\nWhen any callouts are present, the output from \\fBpcre2test\\fP indicates how\nthe pattern is being matched. This is useful information when you are trying to\noptimize the performance of a particular pattern.\n.\n.\n.SH \"MISSING CALLOUTS\"\n.rs\n.sp\nYou should be aware that, because of optimizations in the way PCRE2 compiles\nand matches patterns, callouts sometimes do not happen exactly as you might\nexpect.\n.\n.\n.SS \"Auto-possessification\"\n.rs\n.sp\nAt compile time, PCRE2 \"auto-possessifies\" repeated items when it knows that\nwhat follows cannot be part of the repeat. For example, a+[bc] is compiled as\nif it were a++[bc]. The \\fBpcre2test\\fP output when this pattern is compiled\nwith PCRE2_ANCHORED and PCRE2_AUTO_CALLOUT and then applied to the string\n\"aaaa\" is:\n.sp\n  --->aaaa\n   +0 ^        a+\n   +2 ^   ^    [bc]\n  No match\n.sp\nThis indicates that when matching [bc] fails, there is no backtracking into a+\n(because it is being treated as a++) and therefore the callouts that would be\ntaken for the backtracks do not occur. You can disable the auto-possessify\nfeature by passing PCRE2_NO_AUTO_POSSESS to \\fBpcre2_compile()\\fP, or starting\nthe pattern with (*NO_AUTO_POSSESS). In this case, the output changes to this:\n.sp\n  --->aaaa\n   +0 ^        a+\n   +2 ^   ^    [bc]\n   +2 ^  ^     [bc]\n   +2 ^ ^      [bc]\n   +2 ^^       [bc]\n  No match\n.sp\nThis time, when matching [bc] fails, the matcher backtracks into a+ and tries\nagain, repeatedly, until a+ itself fails.\n.\n.\n.SS \"Automatic .* anchoring\"\n.rs\n.sp\nBy default, an optimization is applied when .* is the first significant item in\na pattern. If PCRE2_DOTALL is set, so that the dot can match any character, the\npattern is automatically anchored. If PCRE2_DOTALL is not set, a match can\nstart only after an internal newline or at the beginning of the subject, and\n\\fBpcre2_compile()\\fP remembers this. If a pattern has more than one top-level\nbranch, automatic anchoring occurs if all branches are anchorable.\n.P\nThis optimization is disabled, however, if .* is in an atomic group or if there\nis a backreference to the capture group in which it appears. It is also\ndisabled if the pattern contains (*PRUNE) or (*SKIP). However, the presence of\ncallouts does not affect it.\n.P\nFor example, if the pattern .*\\ed is compiled with PCRE2_AUTO_CALLOUT and\napplied to the string \"aa\", the \\fBpcre2test\\fP output is:\n.sp\n  --->aa\n   +0 ^      .*\n   +2 ^ ^    \\ed\n   +2 ^^     \\ed\n   +2 ^      \\ed\n  No match\n.sp\nThis shows that all match attempts start at the beginning of the subject. In\nother words, the pattern is anchored. You can disable this optimization by\npassing PCRE2_NO_DOTSTAR_ANCHOR to \\fBpcre2_compile()\\fP, or starting the\npattern with (*NO_DOTSTAR_ANCHOR). In this case, the output changes to:\n.sp\n  --->aa\n   +0 ^      .*\n   +2 ^ ^    \\ed\n   +2 ^^     \\ed\n   +2 ^      \\ed\n   +0  ^     .*\n   +2  ^^    \\ed\n   +2  ^     \\ed\n  No match\n.sp\nThis shows more match attempts, starting at the second subject character.\nAnother optimization, described in the next section, means that there is no\nsubsequent attempt to match with an empty subject.\n.\n.\n.SS \"Other optimizations\"\n.rs\n.sp\nOther optimizations that provide fast \"no match\" results also affect callouts.\nFor example, if the pattern is\n.sp\n  ab(?C4)cd\n.sp\nPCRE2 knows that any matching string must contain the letter \"d\". If the\nsubject string is \"abyz\", the lack of \"d\" means that matching doesn't ever\nstart, and the callout is never reached. However, with \"abyd\", though the\nresult is still no match, the callout is obeyed.\n.P\nFor most patterns PCRE2 also knows the minimum length of a matching string, and\nwill immediately give a \"no match\" return without actually running a match if\nthe subject is not long enough, or, for unanchored patterns, if it has been\nscanned far enough.\n.P\nYou can disable these optimizations by passing the PCRE2_NO_START_OPTIMIZE\noption to \\fBpcre2_compile()\\fP, or by starting the pattern with\n(*NO_START_OPT). This slows down the matching process, but does ensure that\ncallouts such as the example above are obeyed.\n.\n.\n.\\\" HTML <a name=\"calloutinterface\"></a>\n.SH \"THE CALLOUT INTERFACE\"\n.rs\n.sp\nDuring matching, when PCRE2 reaches a callout point, if an external function is\nprovided in the match context, it is called. This applies to both normal,\nDFA, and JIT matching. The first argument to the callout function is a pointer\nto a \\fBpcre2_callout\\fP block. The second argument is the void * callout data\nthat was supplied when the callout was set up by calling\n\\fBpcre2_set_callout()\\fP (see the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation). The callout block structure contains the following fields, not\nnecessarily in this order:\n.sp\n  uint32_t      \\fIversion\\fP;\n  uint32_t      \\fIcallout_number\\fP;\n  uint32_t      \\fIcapture_top\\fP;\n  uint32_t      \\fIcapture_last\\fP;\n  uint32_t      \\fIcallout_flags\\fP;\n  PCRE2_SIZE   *\\fIoffset_vector\\fP;\n  PCRE2_SPTR    \\fImark\\fP;\n  PCRE2_SPTR    \\fIsubject\\fP;\n  PCRE2_SIZE    \\fIsubject_length\\fP;\n  PCRE2_SIZE    \\fIstart_match\\fP;\n  PCRE2_SIZE    \\fIcurrent_position\\fP;\n  PCRE2_SIZE    \\fIpattern_position\\fP;\n  PCRE2_SIZE    \\fInext_item_length\\fP;\n  PCRE2_SIZE    \\fIcallout_string_offset\\fP;\n  PCRE2_SIZE    \\fIcallout_string_length\\fP;\n  PCRE2_SPTR    \\fIcallout_string\\fP;\n.sp\nThe \\fIversion\\fP field contains the version number of the block format. The\ncurrent version is 2; the three callout string fields were added for version 1,\nand the \\fIcallout_flags\\fP field for version 2. If you are writing an\napplication that might use an earlier release of PCRE2, you should check the\nversion number before accessing any of these fields. The version number will\nincrease in future if more fields are added, but the intention is never to\nremove any of the existing fields.\n.\n.\n.SS \"Fields for numerical callouts\"\n.rs\n.sp\nFor a numerical callout, \\fIcallout_string\\fP is NULL, and \\fIcallout_number\\fP\ncontains the number of the callout, in the range 0-255. This is the number\nthat follows (?C for callouts that part of the pattern; it is 255 for\nautomatically generated callouts.\n.\n.\n.SS \"Fields for string callouts\"\n.rs\n.sp\nFor callouts with string arguments, \\fIcallout_number\\fP is always zero, and\n\\fIcallout_string\\fP points to the string that is contained within the compiled\npattern. Its length is given by \\fIcallout_string_length\\fP. Duplicated ending\ndelimiters that were present in the original pattern string have been turned\ninto single characters, but there is no other processing of the callout string\nargument. An additional code unit containing binary zero is present after the\nstring, but is not included in the length. The delimiter that was used to start\nthe string is also stored within the pattern, immediately before the string\nitself. You can access this delimiter as \\fIcallout_string\\fP[-1] if you need\nit.\n.P\nThe \\fIcallout_string_offset\\fP field is the code unit offset to the start of\nthe callout argument string within the original pattern string. This is\nprovided for the benefit of applications such as script languages that might\nneed to report errors in the callout string within the pattern.\n.\n.\n.SS \"Fields for all callouts\"\n.rs\n.sp\nThe remaining fields in the callout block are the same for both kinds of\ncallout.\n.P\nThe \\fIoffset_vector\\fP field is a pointer to a vector of capturing offsets\n(the \"ovector\"). You may read the elements in this vector, but you must not\nchange any of them.\n.P\nFor calls to \\fBpcre2_match()\\fP, the \\fIoffset_vector\\fP field is not (since\nrelease 10.30) a pointer to the actual ovector that was passed to the matching\nfunction in the match data block. Instead it points to an internal ovector of a\nsize large enough to hold all possible captured substrings in the pattern. Note\nthat whenever a recursion or subroutine call within a pattern completes, the\ncapturing state is reset to what it was before.\n.P\nThe \\fIcapture_last\\fP field contains the number of the most recently captured\nsubstring, and the \\fIcapture_top\\fP field contains one more than the number of\nthe highest numbered captured substring so far. If no substrings have yet been\ncaptured, the value of \\fIcapture_last\\fP is 0 and the value of\n\\fIcapture_top\\fP is 1. The values of these fields do not always differ by one;\nfor example, when the callout in the pattern ((a)(b))(?C2) is taken,\n\\fIcapture_last\\fP is 1 but \\fIcapture_top\\fP is 4.\n.P\nThe contents of ovector[2] to ovector[<capture_top>*2-1] can be inspected in\norder to extract substrings that have been matched so far, in the same way as\nextracting substrings after a match has completed. The values in ovector[0] and\novector[1] are always PCRE2_UNSET because the match is by definition not\ncomplete. Substrings that have not been captured but whose numbers are less\nthan \\fIcapture_top\\fP also have both of their ovector slots set to\nPCRE2_UNSET.\n.P\nFor DFA matching, the \\fIoffset_vector\\fP field points to the ovector that was\npassed to the matching function in the match data block for callouts at the top\nlevel, but to an internal ovector during the processing of pattern recursions,\nlookarounds, and atomic groups. However, these ovectors hold no useful\ninformation because \\fBpcre2_dfa_match()\\fP does not support substring\ncapturing. The value of \\fIcapture_top\\fP is always 1 and the value of\n\\fIcapture_last\\fP is always 0 for DFA matching.\n.P\nThe \\fIsubject\\fP and \\fIsubject_length\\fP fields contain copies of the values\nthat were passed to the matching function.\n.P\nThe \\fIstart_match\\fP field normally contains the offset within the subject at\nwhich the current match attempt started. However, if the escape sequence \\eK\nhas been encountered, this value is changed to reflect the modified starting\npoint. If the pattern is not anchored, the callout function may be called\nseveral times from the same point in the pattern for different starting points\nin the subject.\n.P\nThe \\fIcurrent_position\\fP field contains the offset within the subject of the\ncurrent match pointer.\n.P\nThe \\fIpattern_position\\fP field contains the offset in the pattern string to\nthe next item to be matched.\n.P\nThe \\fInext_item_length\\fP field contains the length of the next item to be\nprocessed in the pattern string. When the callout is at the end of the pattern,\nthe length is zero. When the callout precedes an opening parenthesis, the\nlength includes meta characters that follow the parenthesis. For example, in a\ncallout before an assertion such as (?=ab) the length is 3. For an alternation\nbar or a closing parenthesis, the length is one, unless a closing parenthesis\nis followed by a quantifier, in which case its length is included. (This\nchanged in release 10.23. In earlier releases, before an opening parenthesis\nthe length was that of the entire group, and before an alternation bar or a\nclosing parenthesis the length was zero.)\n.P\nThe \\fIpattern_position\\fP and \\fInext_item_length\\fP fields are intended to\nhelp in distinguishing between different automatic callouts, which all have the\nsame callout number. However, they are set for all callouts, and are used by\n\\fBpcre2test\\fP to show the next item to be matched when displaying callout\ninformation.\n.P\nIn callouts from \\fBpcre2_match()\\fP the \\fImark\\fP field contains a pointer to\nthe zero-terminated name of the most recently passed (*MARK), (*PRUNE), or\n(*THEN) item in the match, or NULL if no such items have been passed. Instances\nof (*PRUNE) or (*THEN) without a name do not obliterate a previous (*MARK). In\ncallouts from the DFA matching function this field always contains NULL.\n.P\nThe \\fIcallout_flags\\fP field is always zero in callouts from\n\\fBpcre2_dfa_match()\\fP or when JIT is being used. When \\fBpcre2_match()\\fP\nwithout JIT is used, the following bits may be set:\n.sp\n  PCRE2_CALLOUT_STARTMATCH\n.sp\nThis is set for the first callout after the start of matching for each new\nstarting position in the subject.\n.sp\n  PCRE2_CALLOUT_BACKTRACK\n.sp\nThis is set if there has been a matching backtrack since the previous callout,\nor since the start of matching if this is the first callout from a\n\\fBpcre2_match()\\fP run.\n.P\nBoth bits are set when a backtrack has caused a \"bumpalong\" to a new starting\nposition in the subject. Output from \\fBpcre2test\\fP does not indicate the\npresence of these bits unless the \\fBcallout_extra\\fP modifier is set.\n.P\nThe information in the \\fBcallout_flags\\fP field is provided so that\napplications can track and tell their users how matching with backtracking is\ndone. This can be useful when trying to optimize patterns, or just to\nunderstand how PCRE2 works. There is no support in \\fBpcre2_dfa_match()\\fP\nbecause there is no backtracking in DFA matching, and there is no support in\nJIT because JIT is all about maximimizing matching performance. In both these\ncases the \\fBcallout_flags\\fP field is always zero.\n.\n.\n.SH \"RETURN VALUES FROM CALLOUTS\"\n.rs\n.sp\nThe external callout function returns an integer to PCRE2. If the value is\nzero, matching proceeds as normal. If the value is greater than zero, matching\nfails at the current point, but the testing of other matching possibilities\ngoes ahead, just as if a lookahead assertion had failed. If the value is less\nthan zero, the match is abandoned, and the matching function returns the\nnegative value.\n.P\nNegative values should normally be chosen from the set of PCRE2_ERROR_xxx\nvalues. In particular, PCRE2_ERROR_NOMATCH forces a standard \"no match\"\nfailure. The error number PCRE2_ERROR_CALLOUT is reserved for use by callout\nfunctions; it will never be used by PCRE2 itself.\n.\n.\n.SH \"CALLOUT ENUMERATION\"\n.rs\n.sp\n.nf\n.B int pcre2_callout_enumerate(const pcre2_code *\\fIcode\\fP,\n.B \"  int (*\\fIcallback\\fP)(pcre2_callout_enumerate_block *, void *),\"\n.B \"  void *\\fIuser_data\\fP);\"\n.fi\n.sp\nA script language that supports the use of string arguments in callouts might\nlike to scan all the callouts in a pattern before running the match. This can\nbe done by calling \\fBpcre2_callout_enumerate()\\fP. The first argument is a\npointer to a compiled pattern, the second points to a callback function, and\nthe third is arbitrary user data. The callback function is called for every\ncallout in the pattern in the order in which they appear. Its first argument is\na pointer to a callout enumeration block, and its second argument is the\n\\fIuser_data\\fP value that was passed to \\fBpcre2_callout_enumerate()\\fP. The\ndata block contains the following fields:\n.sp\n  \\fIversion\\fP                Block version number\n  \\fIpattern_position\\fP       Offset to next item in pattern\n  \\fInext_item_length\\fP       Length of next item in pattern\n  \\fIcallout_number\\fP         Number for numbered callouts\n  \\fIcallout_string_offset\\fP  Offset to string within pattern\n  \\fIcallout_string_length\\fP  Length of callout string\n  \\fIcallout_string\\fP         Points to callout string or is NULL\n.sp\nThe version number is currently 0. It will increase if new fields are ever\nadded to the block. The remaining fields are the same as their namesakes in the\n\\fBpcre2_callout\\fP block that is used for callouts during matching, as\ndescribed\n.\\\" HTML <a href=\"#calloutinterface\">\n.\\\" </a>\nabove.\n.\\\"\n.P\nNote that the value of \\fIpattern_position\\fP is unique for each callout.\nHowever, if a callout occurs inside a group that is quantified with a non-zero\nminimum or a fixed maximum, the group is replicated inside the compiled\npattern. For example, a pattern such as /(a){2}/ is compiled as if it were\n/(a)(a)/. This means that the callout will be enumerated more than once, but\nwith the same value for \\fIpattern_position\\fP in each case.\n.P\nThe callback function should normally return zero. If it returns a non-zero\nvalue, scanning the pattern stops, and that value is returned from\n\\fBpcre2_callout_enumerate()\\fP.\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 26 February 2025\nCopyright (c) 1997-2024 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2compat.3",
    "content": ".TH PCRE2COMPAT 3 \"02 June 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"DIFFERENCES BETWEEN PCRE2 AND PERL\"\n.rs\n.sp\nThis document describes some of the known differences in the ways that PCRE2\nand Perl handle regular expressions. The differences described here are with\nrespect to Perl version 5.38.0, but as both Perl and PCRE2 are continually\nchanging, the information may at times be out of date.\n.P\n1. When PCRE2_DOTALL (equivalent to Perl's /s qualifier) is not set, the\nbehaviour of the '.' metacharacter differs from Perl. In PCRE2, '.' matches the\nnext character unless it is the start of a newline sequence. This means that,\nif the newline setting is CR, CRLF, or NUL, '.' will match the code point LF\n(0x0A) in ASCII/Unicode environments, and NL (either 0x15 or 0x25) when using\nEBCDIC. In Perl, '.' appears never to match LF, even when 0x0A is not a newline\nindicator.\n.P\n2. PCRE2 has only a subset of Perl's Unicode support. Details of what it does\nhave are given in the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\npage.\n.P\n3. Like Perl, PCRE2 allows repeat quantifiers on parenthesized assertions, but\nthey do not mean what you might think. For example, (?!a){3} does not assert\nthat the next three characters are not \"a\". It just asserts that the next\ncharacter is not \"a\" three times (in principle; PCRE2 optimizes this to run the\nassertion just once). Perl allows some repeat quantifiers on other assertions,\nfor example, \\eb* , but these do not seem to have any use. PCRE2 does not allow\nany kind of quantifier on non-lookaround assertions.\n.P\n4. If a braced quantifier such as {1,2} appears where there is nothing to\nrepeat (for example, at the start of a branch), PCRE2 raises an error whereas\nPerl treats the quantifier characters as literal. When a braced quantifier\n(...){min,max} has min > max, Perl treats it as an item which fails to match\nany portion of the subject (as no number of repetitions can meet the\ncondition), and additionally issues a warning when in warning mode. PCRE2 has\nno warning features, so it gives an error in this case.\n.P\n5. Capture groups that occur inside negative lookaround assertions are counted,\nbut their entries in the offsets vector are set only when a negative assertion\nis a condition that has a matching branch (that is, the condition is false).\nPerl may set such capture groups in other circumstances.\n.P\n6. The following Perl escape sequences are not supported: \\eF, \\el, \\eL, \\eu,\n\\eU, and \\eN when followed by a character name. \\eN on its own, matching a\nnon-newline character, and \\eN{U+dd..}, matching a Unicode code point, are\nsupported. The escapes that modify the case of following letters are\nimplemented by Perl's general string-handling and are not part of its pattern\nmatching engine. If any of these are encountered by PCRE2, an error is\ngenerated by default. However, if either of the PCRE2_ALT_BSUX or\nPCRE2_EXTRA_ALT_BSUX options is set, \\eU and \\eu are interpreted as ECMAScript\ninterprets them.\n.P\n7. The Perl escape sequences \\ep, \\eP, and \\eX are supported only if PCRE2 is\nbuilt with Unicode support (the default). The properties that can be tested\nwith \\ep and \\eP are limited to the general category properties such as Lu and\nNd, the derived properties Any and Lc (synonym L&), script names such as Greek\nor Han, Bidi_Class, Bidi_Control, and a few binary properties. Both PCRE2 and\nPerl support the Cs (surrogate) property, but in PCRE2 its use is limited. See\nthe\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation for details. The long synonyms for property names that Perl\nsupports (such as \\ep{Letter}) are not supported by PCRE2, nor is it permitted\nto prefix any of these properties with \"Is\".\n.P\n8. PCRE2 supports the \\eQ...\\eE escape for quoting substrings. Characters\nin between are treated as literals. However, this is slightly different from\nPerl in that $ and @ are also handled as literals inside the quotes. In Perl,\nthey cause variable interpolation (PCRE2 does not have variables). Also, Perl\ndoes \"double-quotish backslash interpolation\" on any backslashes between \\eQ\nand \\eE which, its documentation says, \"may lead to confusing results\". PCRE2\ntreats a backslash between \\eQ and \\eE just like any other character. Note the\nfollowing examples:\n.sp\n    Pattern            PCRE2 matches     Perl matches\n.sp\n.\\\" JOIN\n    \\eQabc$xyz\\eE        abc$xyz           abc followed by the\n                                           contents of $xyz\n    \\eQabc\\e$xyz\\eE       abc\\e$xyz          abc\\e$xyz\n    \\eQabc\\eE\\e$\\eQxyz\\eE   abc$xyz           abc$xyz\n    \\eQA\\eB\\eE            A\\eB               A\\eB\n    \\eQ\\e\\eE              \\e                 \\e\\eE\n.sp\nThe \\eQ...\\eE sequence is recognized both inside and outside character classes\nby both PCRE2 and Perl. Another difference from Perl is that any appearance of\n\\eQ or \\eE inside what might otherwise be a quantifier causes PCRE2 not to\nrecognize the sequence as a quantifier. Perl recognizes a quantifier if\n(redundantly) either of the numbers is inside \\eQ...\\eE, but not if the\nseparating comma is. When not recognized as a quantifier a sequence such as\n{\\eQ1\\eE,2} is treated as the literal string \"{1,2}\".\n.P\n9. Fairly obviously, PCRE2 does not support the (?{code}) and (??{code})\nconstructions. However, PCRE2 does have a \"callout\" feature, which allows an\nexternal function to be called during pattern matching. See the\n.\\\" HREF\n\\fBpcre2callout\\fP\n.\\\"\ndocumentation for details.\n.P\n10. Subroutine calls (whether recursive or not) were treated as atomic groups\nup to PCRE2 release 10.23, but from release 10.30 this changed, and\nbacktracking into subroutine calls is now supported, as in Perl.\n.P\n11. In PCRE2, if any of the backtracking control verbs are used in a group that\nis called as a subroutine (whether or not recursively), their effect is\nconfined to that group; it does not extend to the surrounding pattern. This is\nnot always the case in Perl. In particular, if (*THEN) is present in a group\nthat is called as a subroutine, its action is limited to that group, even if\nthe group does not contain any | characters. Note that such groups are\nprocessed as anchored at the point where they are tested. PCRE2 also confines\nall control verbs within atomic assertions, again including (*THEN) in\nassertions with only one branch.\n.P\n12. If a pattern contains more than one backtracking control verb, the first\none that is backtracked onto acts. For example, in the pattern\nA(*COMMIT)B(*PRUNE)C a failure in B triggers (*COMMIT), but a failure in C\ntriggers (*PRUNE). Perl's behaviour is more complex; in many cases it is the\nsame as PCRE2, but there are cases where it differs.\n.P\n13. There are some differences that are concerned with the settings of captured\nstrings when part of a pattern is repeated. For example, matching \"aba\" against\nthe pattern /^(a(b)?)+$/ in Perl leaves $2 unset, but in PCRE2 it is set to\n\"b\".\n.P\n14. PCRE2's handling of duplicate capture group numbers and names is not as\ngeneral as Perl's. This is a consequence of the fact the PCRE2 works internally\njust with numbers, using an external table to translate between numbers and\nnames. In particular, a pattern such as (?|(?<a>A)|(?<b>B)), where the two\ncapture groups have the same number but different names, is not supported, and\ncauses an error at compile time. If it were allowed, it would not be possible\nto distinguish which group matched, because both names map to capture group\nnumber 1. To avoid this confusing situation, an error is given at compile time.\n.P\n15. Perl used to recognize comments in some places that PCRE2 does not, for\nexample, between the ( and ? at the start of a group. If the /x modifier is\nset, Perl allowed white space between ( and ? though the latest Perls give an\nerror (for a while it was just deprecated). There may still be some cases where\nPerl behaves differently.\n.P\n16. Perl, when in warning mode, gives warnings for character classes such as\n[A-\\ed] or [a-[:digit:]]. It then treats the hyphens as literals. PCRE2 has no\nwarning features, so it gives an error in these cases because they are almost\ncertainly user mistakes.\n.P\n17. In PCRE2, until release 10.45, the upper/lower case character properties Lu\nand Ll were not affected when case-independent matching was specified. Perl has\nchanged in this respect, and PCRE2 has now changed to match. When caseless\nmatching is in force, Lu, Ll, and Lt (title case) are all treated as Lc (cased\nletter).\n.P\n18. From release 5.32.0, Perl locks out the use of \\eK in lookaround\nassertions. From release 10.38 PCRE2 does the same by default. However, there\nis an option for re-enabling the previous behaviour. When this option is set,\n\\eK is acted on when it occurs in positive assertions, but is ignored in\nnegative assertions.\n.P\n19. PCRE2 provides some extensions to the Perl regular expression facilities.\nPerl 5.10 included new features that were not in earlier versions of Perl, some\nof which (such as named parentheses) were in PCRE2 for some time before. This\nlist is with respect to Perl 5.38:\n.sp\n(a) If PCRE2_DOLLAR_ENDONLY is set and PCRE2_MULTILINE is not set, the $\nmeta-character matches only at the very end of the string.\n.sp\n(b) A backslash followed by a letter with no special meaning is faulted. (Perl\ncan be made to issue a warning.)\n.sp\n(c) If PCRE2_UNGREEDY is set, the greediness of the repetition quantifiers is\ninverted, that is, by default they are not greedy, but if followed by a\nquestion mark they are.\n.sp\n(d) PCRE2_ANCHORED can be used at matching time to force a pattern to be tried\nonly at the first matching position in the subject string.\n.sp\n(e) The PCRE2_NOTBOL, PCRE2_NOTEOL, PCRE2_NOTEMPTY and PCRE2_NOTEMPTY_ATSTART\noptions have no Perl equivalents.\n.sp\n(f) The \\eR escape sequence can be restricted to match only CR, LF, or CRLF\nby the PCRE2_BSR_ANYCRLF option.\n.sp\n(g) The callout facility is PCRE2-specific. Perl supports codeblocks and\nvariable interpolation, but not general hooks on every match.\n.sp\n(h) The partial matching facility is PCRE2-specific.\n.sp\n(i) The alternative matching function (\\fBpcre2_dfa_match()\\fP) matches in a\ndifferent way and is not Perl-compatible.\n.sp\n(j) PCRE2 recognizes some special sequences such as (*CR) or (*NO_JIT) at\nthe start of a pattern. These set overall options that cannot be changed within\nthe pattern.\n.sp\n(k) PCRE2 supports non-atomic positive lookaround assertions. This is an\nextension to the lookaround facilities. The default, Perl-compatible\nlookarounds are atomic.\n.sp\n(l) There are three syntactical items in patterns that can refer to a capturing\ngroup by number: back references such as \\eg{2}, subroutine calls such as (?3),\nand condition references such as (?(4)...). PCRE2 supports relative group\nnumbers such as +2 and -4 in all three cases. Perl supports both plus and minus\nfor subroutine calls, but only minus for back references, and no relative\nnumbering at all for conditions.\n.sp\n(m) The scan substring assertion (syntax (*scs:(n)...)) is a PCRE2 extension\nthat is not available in Perl.\n.P\n20. Perl has different limits than PCRE2. See the\n.\\\" HREF\n\\fBpcre2limits\\fP\n.\\\"\ndocumentation for details. Perl went with 5.10 from recursion to iteration\nkeeping the intermediate matches on the heap, which is ~10% slower but does not\nfall into any stack-overflow limit. PCRE2 made a similar change at release\n10.30, and also has many build-time and run-time customizable limits.\n.P\n21. Unlike Perl, PCRE2 doesn't have character set modifiers and specially no way\nto set characters by context just like Perl's \"/d\". A regular expression using\nPCRE2_UTF and PCRE2_UCP will use similar rules to Perl's \"/u\"; something closer\nto \"/a\" could be selected by adding other PCRE2_EXTRA_ASCII* options on top.\n.P\n22. Some recursive patterns that Perl diagnoses as infinite recursions can be\nhandled by PCRE2, either by the interpreter or the JIT. An example is\n/(?:|(?0)abcd)(?(R)|\\ez)/, which matches a sequence of any number of repeated\n\"abcd\" substrings at the end of the subject.\n.P\n23. Both PCRE2 and Perl error when \\ex{ escapes are invalid, but Perl tries to\nrecover and prints a warning if the problem was that an invalid hexadecimal\ndigit was found. Since PCRE2 doesn't have warnings it returns an error instead.\nAdditionally, Perl accepts \\ex{} and generates NUL unlike PCRE2.\n.P\n24. From release 10.45, PCRE2 gives an error if \\ex is not followed by a\nhexadecimal digit or a curly bracket. It used to interpret this as the NUL\ncharacter. Perl still generates NUL, but warns when in warning mode in most\ncases.\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 02 June 2025\nCopyright (c) 1997-2024 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2convert.3",
    "content": ".TH PCRE2CONVERT 3 \"14 November 2023\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"EXPERIMENTAL PATTERN CONVERSION FUNCTIONS\"\n.rs\n.sp\nThis document describes a set of functions that can be used to convert\n\"foreign\" patterns into PCRE2 regular expressions. This facility is currently\nexperimental, and may be changed in future releases. Two kinds of pattern,\nglobs and POSIX patterns, are supported.\n.\n.\n.SH \"THE CONVERT CONTEXT\"\n.rs\n.sp\n.nf\n.B pcre2_convert_context *pcre2_convert_context_create(\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B pcre2_convert_context *pcre2_convert_context_copy(\n.B \"  pcre2_convert_context *\\fIcvcontext\\fP);\"\n.sp\n.B void pcre2_convert_context_free(pcre2_convert_context *\\fIcvcontext\\fP);\n.sp\n.B int pcre2_set_glob_escape(pcre2_convert_context *\\fIcvcontext\\fP,\n.B \"  uint32_t \\fIescape_char\\fP);\"\n.sp\n.B int pcre2_set_glob_separator(pcre2_convert_context *\\fIcvcontext\\fP,\n.B \"  uint32_t \\fIseparator_char\\fP);\"\n.fi\n.sp\nA convert context is used to hold parameters that affect the way that pattern\nconversion works. Like all PCRE2 contexts, you need to use a context only if\nyou want to override the defaults. There are the usual create, copy, and free\nfunctions. If custom memory management functions are set in a general context\nthat is passed to \\fBpcre2_convert_context_create()\\fP, they are used for all\nmemory management within the conversion functions.\n.P\nThere are only two parameters in the convert context at present. Both apply\nonly to glob conversions. The escape character defaults to grave accent under\nWindows, otherwise backslash. It can be set to zero, meaning no escape\ncharacter, or to any punctuation character with a code point less than 256.\nThe separator character defaults to backslash under Windows, otherwise forward\nslash. It can be set to forward slash, backslash, or dot.\n.P\nThe two setting functions return zero on success, or PCRE2_ERROR_BADDATA if\ntheir second argument is invalid.\n.\n.\n.SH \"THE CONVERSION FUNCTION\"\n.rs\n.sp\n.nf\n.B int pcre2_pattern_convert(PCRE2_SPTR \\fIpattern\\fP, PCRE2_SIZE \\fIlength\\fP,\n.B \"  uint32_t \\fIoptions\\fP, PCRE2_UCHAR **\\fIbuffer\\fP,\"\n.B \"  PCRE2_SIZE *\\fIblength\\fP, pcre2_convert_context *\\fIcvcontext\\fP);\"\n.sp\n.B void pcre2_converted_pattern_free(PCRE2_UCHAR *\\fIconverted_pattern\\fP);\n.fi\n.sp\nThe first two arguments of \\fBpcre2_pattern_convert()\\fP define the foreign\npattern that is to be converted. The length may be given as\nPCRE2_ZERO_TERMINATED. The \\fBoptions\\fP argument defines how the pattern is to\nbe processed. If the input is UTF, the PCRE2_CONVERT_UTF option should be set.\nPCRE2_CONVERT_NO_UTF_CHECK may also be set if you are sure the input is valid.\nOne or more of the glob options, or one of the following POSIX options must be\nset to define the type of conversion that is required:\n.sp\n  PCRE2_CONVERT_GLOB\n  PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR\n  PCRE2_CONVERT_GLOB_NO_STARSTAR\n  PCRE2_CONVERT_POSIX_BASIC\n  PCRE2_CONVERT_POSIX_EXTENDED\n.sp\nDetails of the conversions are given below. The \\fBbuffer\\fP and \\fBblength\\fP\narguments define how the output is handled:\n.P\nIf \\fBbuffer\\fP is NULL, the function just returns the length of the converted\npattern via \\fBblength\\fP. This is one less than the length of buffer needed,\nbecause a terminating zero is always added to the output.\n.P\nIf \\fBbuffer\\fP points to a NULL pointer, an output buffer is obtained using\nthe allocator in the context or \\fBmalloc()\\fP if no context is supplied. A\npointer to this buffer is placed in the variable to which \\fBbuffer\\fP points.\nWhen no longer needed the output buffer must be freed by calling\n\\fBpcre2_converted_pattern_free()\\fP. If this function is called with a NULL\nargument, it returns immediately without doing anything.\n.P\nIf \\fBbuffer\\fP points to a non-NULL pointer, \\fBblength\\fP must be set to the\nactual length of the buffer provided (in code units).\n.P\nIn all cases, after successful conversion, the variable pointed to by\n\\fBblength\\fP is updated to the length actually used (in code units), excluding\nthe terminating zero that is always added.\n.P\nIf an error occurs, the length (via \\fBblength\\fP) is set to the offset\nwithin the input pattern where the error was detected. Only gross syntax errors\nare caught; there are plenty of errors that will get passed on for\n\\fBpcre2_compile()\\fP to discover.\n.P\nThe return from \\fBpcre2_pattern_convert()\\fP is zero on success or a non-zero\nPCRE2 error code. Note that PCRE2 error codes may be positive or negative:\n\\fBpcre2_compile()\\fP uses mostly positive codes and \\fBpcre2_match()\\fP\nnegative ones; \\fBpcre2_convert()\\fP uses existing codes of both kinds. A\ntextual error message can be obtained by calling\n\\fBpcre2_get_error_message()\\fP.\n.\n.\n.SH \"CONVERTING GLOBS\"\n.rs\n.sp\nGlobs are used to match file names, and consequently have the concept of a\n\"path separator\", which defaults to backslash under Windows and forward slash\notherwise. If PCRE2_CONVERT_GLOB is set, the wildcards * and ? are not\npermitted to match separator characters, but the double-star (**) feature\n(which does match separators) is supported.\n.P\nPCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR matches globs with wildcards allowed to\nmatch separator characters. PCRE2_CONVERT_GLOB_NO_STARSTAR matches globs with\nthe double-star feature disabled. These options may be given together.\n.\n.\n.SH \"CONVERTING POSIX PATTERNS\"\n.rs\n.sp\nPOSIX defines two kinds of regular expression pattern: basic and extended.\nThese can be processed by setting PCRE2_CONVERT_POSIX_BASIC or\nPCRE2_CONVERT_POSIX_EXTENDED, respectively.\n.P\nIn POSIX patterns, backslash is not special in a character class. Unmatched\nclosing parentheses are treated as literals.\n.P\nIn basic patterns, ? + | {} and () must be escaped to be recognized\nas metacharacters outside a character class. If the first character in the\npattern is * it is treated as a literal. ^ is a metacharacter only at the start\nof a branch.\n.P\nIn extended patterns, a backslash not in a character class always\nmakes the next character literal, whatever it is. There are no backreferences.\n.P\nNote: POSIX mandates that the longest possible match at the first matching\nposition must be found. This is not what \\fBpcre2_match()\\fP does; it yields\nthe first match that is found. An application can use \\fBpcre2_dfa_match()\\fP\nto find the longest match, but that does not support backreferences (but then\nneither do POSIX extended patterns).\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 14 November 2023\nCopyright (c) 1997-2018 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2demo.3",
    "content": ".TH PCRE2DEMO 3 \"24 March 2025\" \"PCRE2 10.48-DEV\"\n.\\\"AUTOMATICALLY GENERATED BY UpdateAlways - do not EDIT!\n.SH NAME\nPCRE2DEMO - A demonstration C program for PCRE2\n.SH \"SOURCE CODE\"\n.rs\n.sp\n.\\\" Start example.\n.de EX\n.\tdo ds mF \\\\n[.fam]\n.  nr mE \\\\n(.f\n.  nf\n.  nh\n.\tdo fam C\n.  ft CW\n..\n.\n.\n.\\\" End example.\n.de EE\n.\tdo fam \\\\*(mF\n.  ft \\\\n(mE\n.  fi\n.  hy \\\\n(HY\n..\n.\n.RS -7\n.EX\n/*************************************************\n*           PCRE2 DEMONSTRATION PROGRAM          *\n*************************************************/\n\n/* This is a demonstration program to illustrate a straightforward way of\nusing the PCRE2 regular expression library from a C program. See the\npcre2sample documentation for a short discussion (\"man pcre2sample\" if you have\nthe PCRE2 man pages installed). PCRE2 is a revised API for the library, and is\nincompatible with the original PCRE API.\n\nThere are actually three libraries, each supporting a different code unit\nwidth. This demonstration program uses the 8-bit library. The default is to\nprocess each code unit as a separate character, but if the pattern begins with\n\"(*UTF)\", both it and the subject are treated as UTF-8 strings, where\ncharacters may occupy multiple code units.\n\nIn Unix-like environments, if PCRE2 is installed in your standard system\nlibraries, you should be able to compile this program using this command:\n\ncc -Wall pcre2demo.c -lpcre2-8 -o pcre2demo\n\nIf PCRE2 is not installed in a standard place, it is likely to be installed\nwith support for the pkg-config mechanism. If you have pkg-config, you can\ncompile this program using this command:\n\ncc -Wall pcre2demo.c `pkg-config --cflags --libs libpcre2-8` -o pcre2demo\n\nIf you do not have pkg-config, you may have to use something like this:\n\ncc -Wall pcre2demo.c -I/usr/local/include -L/usr/local/lib \\e\n  -R/usr/local/lib -lpcre2-8 -o pcre2demo\n\nReplace \"/usr/local/include\" and \"/usr/local/lib\" with wherever the include and\nlibrary files for PCRE2 are installed on your system. Only some operating\nsystems (Solaris is one) use the -R option.\n\nBuilding under Windows:\n\nIf you want to statically link this program against a non-dll .a file, you must\ndefine PCRE2_STATIC before including pcre2.h, so in this environment, uncomment\nthe following line. */\n\n/* #define PCRE2_STATIC */\n\n/* The PCRE2_CODE_UNIT_WIDTH macro must be defined before including pcre2.h.\nFor a program that uses only one code unit width, setting it to 8, 16, or 32\nmakes it possible to use generic function names such as pcre2_compile(). Note\nthat just changing 8 to 16 (for example) is not sufficient to convert this\nprogram to process 16-bit characters. Even in a fully 16-bit environment, where\nstring-handling functions such as strcmp() and printf() work with 16-bit\ncharacters, the code for handling the table of named substrings will still need\nto be modified. */\n\n#define PCRE2_CODE_UNIT_WIDTH 8\n\n#include <stdio.h>\n#include <string.h>\n#include <pcre2.h>\n\n\n/**************************************************************************\n* Here is the program. The API includes the concept of \"contexts\" for     *\n* setting up unusual interface requirements for compiling and matching,   *\n* such as custom memory managers and non-standard newline definitions.    *\n* This program does not do any of this, so it makes no use of contexts,   *\n* always passing NULL where a context could be given.                     *\n**************************************************************************/\n\nint main(int argc, char **argv)\n{\npcre2_code *re;\nPCRE2_SPTR pattern;     /* PCRE2_SPTR is a pointer to unsigned code units of */\nPCRE2_SPTR subject;     /* the appropriate width (in this case, 8 bits). */\nPCRE2_SPTR name_table;\n\nint errornumber;\nint find_all, caseless_match;\nint i;\nint rc;\n\nuint32_t namecount;\nuint32_t name_entry_size;\n\nPCRE2_SIZE erroroffset;\nPCRE2_SIZE *ovector;\nPCRE2_SIZE ovector_last[2];\nPCRE2_SIZE subject_length;\n\npcre2_match_data *match_data;\n\n\n/**************************************************************************\n* First, sort out the command line. Options:                              *\n* - \"-g\" to request repeated matching to find all occurrences,            *\n*   like Perl's /g option. We set the variable find_all to a non-zero     *\n*   value if the -g option is present.                                    *\n* - \"-i\" to request caseless matching, like Perl's /i option.  We set the *\n*   variable caseless_match to PCRE2_CASELESS if the -i option is         *\n*   present.                                                              *\n**************************************************************************/\n\nfind_all = 0;\ncaseless_match = 0;\nfor (i = 1; i < argc; i++)\n  {\n  if (strcmp(argv[i], \"-g\") == 0) find_all = 1;\n  else if (strcmp(argv[i], \"-i\") == 0) caseless_match = PCRE2_CASELESS;\n  else if (argv[i][0] == '-')\n    {\n    printf(\"Unrecognised option %s\\en\", argv[i]);\n    return 1;\n    }\n  else break;\n  }\n\n/* After the options, we require exactly two arguments, which are the pattern,\nand the subject string. */\n\nif (argc - i != 2)\n  {\n  printf(\"Exactly two arguments required: a regex and a subject string\\en\");\n  return 1;\n  }\n\n/* Pattern and subject are char arguments, so they can be straightforwardly\ncast to PCRE2_SPTR because we are working in 8-bit code units. The subject\nlength is cast to PCRE2_SIZE for completeness, though PCRE2_SIZE is in fact\ndefined to be size_t. */\n\npattern = (PCRE2_SPTR)argv[i];\nsubject = (PCRE2_SPTR)argv[i+1];\nsubject_length = (PCRE2_SIZE)strlen((char *)subject);\n\n\n/*************************************************************************\n* Now we are going to compile the regular expression pattern, and handle *\n* any errors that are detected.                                          *\n*************************************************************************/\n\nre = pcre2_compile(\n  pattern,               /* the pattern */\n  PCRE2_ZERO_TERMINATED, /* indicates pattern is zero-terminated */\n  caseless_match,        /* possibly enable caseless */\n  &errornumber,          /* for error number */\n  &erroroffset,          /* for error offset */\n  NULL);                 /* use default compile context */\n\n/* Compilation failed: print the error message and exit. */\n\nif (re == NULL)\n  {\n  PCRE2_UCHAR buffer[256];\n  pcre2_get_error_message(errornumber, buffer, sizeof(buffer));\n  printf(\"PCRE2 compilation failed at offset %d: %s\\en\", (int)erroroffset,\n    buffer);\n  return 1;\n  }\n\n\n/*************************************************************************\n* If the compilation succeeded, we call PCRE2 again, in order to do a    *\n* pattern match against the subject string. This does just ONE match. If *\n* further matching is needed, it will be done below. Before running the  *\n* match we must set up a match_data block for holding the result. Using  *\n* pcre2_match_data_create_from_pattern() ensures that the block is       *\n* exactly the right size for the number of capturing parentheses in the  *\n* pattern. If you need to know the actual size of a match_data block as  *\n* a number of bytes, you can find it like this:                          *\n*                                                                        *\n* PCRE2_SIZE match_data_size = pcre2_get_match_data_size(match_data);    *\n*************************************************************************/\n\nmatch_data = pcre2_match_data_create_from_pattern(re, NULL);\n\n/* Now run the match. */\n\nrc = pcre2_match(\n  re,                   /* the compiled pattern */\n  subject,              /* the subject string */\n  subject_length,       /* the length of the subject */\n  0,                    /* start at offset 0 in the subject */\n  0,                    /* default options */\n  match_data,           /* block for storing the result */\n  NULL);                /* use default match context */\n\n/* Matching failed: handle error cases */\n\nif (rc < 0)\n  {\n  switch(rc)\n    {\n    case PCRE2_ERROR_NOMATCH: printf(\"No match\\en\"); break;\n    /*\n    Handle other special cases if you like\n    */\n    default: printf(\"Matching error %d\\en\", rc); break;\n    }\n  pcre2_match_data_free(match_data);   /* Release memory used for the match */\n  pcre2_code_free(re);                 /*   data and the compiled pattern. */\n  return 1;\n  }\n\n/* Match succeeded. Get a pointer to the output vector, where string offsets\nare stored. */\n\novector = pcre2_get_ovector_pointer(match_data);\nprintf(\"Match succeeded at offset %d\\en\", (int)ovector[0]);\n\n\n/*************************************************************************\n* We have found the first match within the subject string. If the output *\n* vector wasn't big enough, say so. Then output any substrings that were *\n* captured.                                                              *\n*************************************************************************/\n\n/* The output vector wasn't big enough. This should not happen, because we used\npcre2_match_data_create_from_pattern() above. */\n\nif (rc == 0)\n  printf(\"ovector was not big enough for all the captured substrings\\en\");\n\n/* Since release 10.38 PCRE2 has locked out the use of \\eK in lookaround\nassertions. This is the recommended behaviour. However, the option\nPCRE2_EXTRA_ALLOW_LOOKAROUND_BSK allows applications to re-enable the old\nbehaviour. If that is set, it is possible to run patterns such as /(?=.\\eK)/ that\nuse \\eK in an assertion to set the start of a match later than its end. In this\ndemonstration program, we show how to detect this case, although it cannot arise\nbecause the option is never set. */\n\nif (ovector[0] > ovector[1])\n  {\n  printf(\"\\e\\eK was used in an assertion to set the match start after its end.\\en\"\n    \"From end to start the match was: %.*s\\en\", (int)(ovector[0] - ovector[1]),\n      (char *)(subject + ovector[1]));\n  printf(\"Run abandoned\\en\");\n  pcre2_match_data_free(match_data);\n  pcre2_code_free(re);\n  return 1;\n  }\n\n/* Show substrings stored in the output vector by number. Obviously, in a real\napplication you might want to do things other than print them. */\n\nfor (i = 0; i < rc; i++)\n  {\n  PCRE2_SPTR substring_start = subject + ovector[2*i];\n  PCRE2_SIZE substring_length = ovector[2*i+1] - ovector[2*i];\n  printf(\"%2d: %.*s\\en\", i, (int)substring_length, (char *)substring_start);\n  }\n\n\n/**************************************************************************\n* That concludes the basic part of this demonstration program. We have    *\n* compiled a pattern, and performed a single match. The code that follows *\n* shows first how to access named substrings, and then how to code for    *\n* repeated matches on the same subject.                                   *\n**************************************************************************/\n\n/* See if there are any named substrings, and if so, show them by name. First\nwe have to extract the count of named parentheses from the pattern. */\n\n(void)pcre2_pattern_info(\n  re,                   /* the compiled pattern */\n  PCRE2_INFO_NAMECOUNT, /* get the number of named substrings */\n  &namecount);          /* where to put the answer */\n\nif (namecount == 0)\n  printf(\"No named substrings\\en\");\nelse\n  {\n  PCRE2_SPTR tabptr;\n  printf(\"Named substrings\\en\");\n\n  /* Before we can access the substrings, we must extract the table for\n  translating names to numbers, and the size of each entry in the table. */\n\n  (void)pcre2_pattern_info(\n    re,                       /* the compiled pattern */\n    PCRE2_INFO_NAMETABLE,     /* address of the table */\n    &name_table);             /* where to put the answer */\n\n  (void)pcre2_pattern_info(\n    re,                       /* the compiled pattern */\n    PCRE2_INFO_NAMEENTRYSIZE, /* size of each entry in the table */\n    &name_entry_size);        /* where to put the answer */\n\n  /* Now we can scan the table and, for each entry, print the number, the name,\n  and the substring itself. In the 8-bit library the number is held in two\n  bytes, most significant first. */\n\n  tabptr = name_table;\n  for (i = 0; i < namecount; i++)\n    {\n    int n = (tabptr[0] << 8) | tabptr[1];\n    printf(\"(%d) %*s: %.*s\\en\", n, name_entry_size - 3, tabptr + 2,\n      (int)(ovector[2*n+1] - ovector[2*n]), subject + ovector[2*n]);\n    tabptr += name_entry_size;\n    }\n  }\n\n\n/*************************************************************************\n* If the \"-g\" option was given on the command line, we want to continue  *\n* to search for additional matches in the subject string, in a similar   *\n* way to the /g option in Perl. This turns out to be trickier than you   *\n* might think because of the possibility of matching an empty string.    *\n*                                                                        *\n* To help with this task, PCRE2 provides the pcre2_next_match() helper.  *\n*************************************************************************/\n\nif (!find_all)     /* Check for -g */\n  {\n  pcre2_match_data_free(match_data);  /* Release the memory that was used */\n  pcre2_code_free(re);                /* for the match data and the pattern. */\n  return 0;                           /* Exit the program. */\n  }\n\n/* Loop for second and subsequent matches */\n\novector_last[0] = ovector[0];\novector_last[1] = ovector[1];\n\nfor (;;)\n  {\n  PCRE2_SIZE start_offset;\n  uint32_t options;\n\n  /* After each successful match, we use pcre2_next_match() to obtain the match\n  parameters for subsequent match attempts. */\n\n  if (!pcre2_next_match(match_data, &start_offset, &options))\n    break;\n\n  /* Run the next matching operation */\n\n  rc = pcre2_match(\n    re,                   /* the compiled pattern */\n    subject,              /* the subject string */\n    subject_length,       /* the length of the subject */\n    start_offset,         /* starting offset in the subject */\n    options,              /* options */\n    match_data,           /* block for storing the result */\n    NULL);                /* use default match context */\n\n  /* If this match attempt fails, exit the loop for subsequent matches. */\n\n  if (rc == PCRE2_ERROR_NOMATCH)\n    break;\n\n  /* Other matching errors are not recoverable. */\n\n  if (rc < 0)\n    {\n    printf(\"Matching error %d\\en\", rc);\n    pcre2_match_data_free(match_data);\n    pcre2_code_free(re);\n    return 1;\n    }\n\n  /* This demonstration program depends on pcre2_next_match() to ensure that the\n  loop for second and subsequent matches does not run forever. However, it would\n  be robust practice for a production application to verify this. The following\n  block of code shows how to do this. This error case is not reachable unless\n  there is a bug in PCRE2.\n\n  Because this program does not set the PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK option,\n  the logic is simple. We verify that either ovector[1] has advanced, or that we\n  have an empty match touching the end of a previous non-empty match. See the\n  API documentation for guidance if your application uses\n  PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK and searches for multiple matches. */\n\n  if (!(ovector[1] > ovector_last[1] ||\n        (ovector[1] == ovector[0] && ovector_last[1] > ovector_last[0] &&\n         ovector[1] == ovector_last[1])))\n    {\n    printf(\"\\e\\eK was used in an assertion to yield non-advancing matches.\\en\");\n    printf(\"Run abandoned\\en\");\n    pcre2_match_data_free(match_data);\n    pcre2_code_free(re);\n    return 1;\n    }\n\n  ovector_last[0] = ovector[0];\n  ovector_last[1] = ovector[1];\n\n  /* Match succeeded. */\n\n  printf(\"\\enMatch succeeded again at offset %d\\en\", (int)ovector[0]);\n\n  /* The match succeeded, but the output vector wasn't big enough. This\n  should not happen. */\n\n  if (rc == 0)\n    printf(\"ovector was not big enough for all the captured substrings\\en\");\n\n  /* We guard against patterns such as /(?=.\\eK)/ that use \\eK in an assertion to\n  set the start of a match later than its end. As explained above, this case\n  should not occur because this demonstration program does not set the\n  PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK option, however, we do include code showing\n  how to detect it. */\n\n  if (ovector[0] > ovector[1])\n    {\n    printf(\"\\e\\eK was used in an assertion to set the match start after its end.\\en\"\n      \"From end to start the match was: %.*s\\en\", (int)(ovector[0] - ovector[1]),\n        (char *)(subject + ovector[1]));\n    printf(\"Run abandoned\\en\");\n    pcre2_match_data_free(match_data);\n    pcre2_code_free(re);\n    return 1;\n    }\n\n  /* As before, show substrings stored in the output vector by number, and then\n  also any named substrings. */\n\n  for (i = 0; i < rc; i++)\n    {\n    PCRE2_SPTR substring_start = subject + ovector[2*i];\n    size_t substring_length = ovector[2*i+1] - ovector[2*i];\n    printf(\"%2d: %.*s\\en\", i, (int)substring_length, (char *)substring_start);\n    }\n\n  if (namecount == 0)\n    printf(\"No named substrings\\en\");\n  else\n    {\n    PCRE2_SPTR tabptr = name_table;\n    printf(\"Named substrings\\en\");\n    for (i = 0; i < namecount; i++)\n      {\n      int n = (tabptr[0] << 8) | tabptr[1];\n      printf(\"(%d) %*s: %.*s\\en\", n, name_entry_size - 3, tabptr + 2,\n        (int)(ovector[2*n+1] - ovector[2*n]), subject + ovector[2*n]);\n      tabptr += name_entry_size;\n      }\n    }\n  }      /* End of loop to find second and subsequent matches */\n\nprintf(\"\\en\");\n\npcre2_match_data_free(match_data);\npcre2_code_free(re);\nreturn 0;\n}\n\n/* End of pcre2demo.c */\n.EE\n"
  },
  {
    "path": "doc/pcre2grep.1",
    "content": ".TH PCRE2GREP 1 \"24 January 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\npcre2grep - a grep with Perl-compatible regular expressions.\n.SH SYNOPSIS\n.B pcre2grep [options] [long options] [pattern] [path1 path2 ...]\n.\n.SH DESCRIPTION\n.rs\n.sp\n\\fBpcre2grep\\fP searches files for character patterns, in the same way as other\ngrep commands do, but it uses the PCRE2 regular expression library to support\npatterns that are compatible with the regular expressions of Perl 5. See\n.\\\" HREF\n\\fBpcre2syntax\\fP(3)\n.\\\"\nfor a quick-reference summary of pattern syntax, or\n.\\\" HREF\n\\fBpcre2pattern\\fP(3)\n.\\\"\nfor a full description of the syntax and semantics of the regular expressions\nthat PCRE2 supports.\n.P\nPatterns, whether supplied on the command line or in a separate file, are given\nwithout delimiters. For example:\n.sp\n  pcre2grep Thursday /etc/motd\n.sp\nIf you attempt to use delimiters (for example, by surrounding a pattern with\nslashes, as is common in Perl scripts), they are interpreted as part of the\npattern. Quotes can of course be used to delimit patterns on the command line\nbecause they are interpreted by the shell, and indeed quotes are required if a\npattern contains white space or shell metacharacters.\n.P\nThe first argument that follows any option settings is treated as the single\npattern to be matched when neither \\fB-e\\fP nor \\fB-f\\fP is present.\nConversely, when one or both of these options are used to specify patterns, all\narguments are treated as path names. At least one of \\fB-e\\fP, \\fB-f\\fP, or an\nargument pattern must be provided.\n.P\nIf no files are specified, \\fBpcre2grep\\fP reads the standard input. The\nstandard input can also be referenced by a name consisting of a single hyphen.\nFor example:\n.sp\n  pcre2grep some-pattern file1 - file3\n.sp\nBy default, input files are searched line by line, so pattern assertions about\nthe beginning and end of a subject string (^, $, \\eA, \\eZ, and \\ez) match at\nthe beginning and end of each line. When a line matches a pattern, it is copied\nto the standard output, and if there is more than one file, the file name is\noutput at the start of each line, followed by a colon. However, there are\noptions that can change how \\fBpcre2grep\\fP behaves. For example, the \\fB-M\\fP\noption makes it possible to search for strings that span line boundaries. What\ndefines a line boundary is controlled by the \\fB-N\\fP (\\fB--newline\\fP) option.\nThe \\fB-h\\fP and \\fB-H\\fP options control whether or not file names are shown,\nand the \\fB-Z\\fP option changes the file name terminator to a zero byte.\n.P\nThe amount of memory used for buffering files that are being scanned is\ncontrolled by parameters that can be set by the \\fB--buffer-size\\fP and\n\\fB--max-buffer-size\\fP options. The first of these sets the size of buffer\nthat is obtained at the start of processing. If an input file contains very\nlong lines, a larger buffer may be needed; this is handled by automatically\nextending the buffer, up to the limit specified by \\fB--max-buffer-size\\fP. The\ndefault values for these parameters can be set when \\fBpcre2grep\\fP is\nbuilt; if nothing is specified, the defaults are set to 20KiB and 1MiB\nrespectively. An error occurs if a line is too long and the buffer can no\nlonger be expanded.\n.P\nThe block of memory that is actually used is three times the \"buffer size\", to\nallow for buffering \"before\" and \"after\" lines. If the buffer size is too\nsmall, fewer than requested \"before\" and \"after\" lines may be output.\n.P\nWhen matching with a multiline pattern, the size of the buffer must be at least\nhalf of the maximum match expected or the pattern might fail to match.\n.P\nPatterns can be no longer than 8KiB or BUFSIZ bytes, whichever is the greater.\nBUFSIZ is defined in \\fB<stdio.h>\\fP. When there is more than one pattern\n(specified by the use of \\fB-e\\fP and/or \\fB-f\\fP), each pattern is applied to\neach line in the order in which they are defined, except that all the \\fB-e\\fP\npatterns are tried before the \\fB-f\\fP patterns.\n.P\nBy default, as soon as one pattern matches a line, no further patterns are\nconsidered. However, if \\fB--colour\\fP (or \\fB--color\\fP) is used to colour the\nmatching substrings, or if \\fB--only-matching\\fP, \\fB--file-offsets\\fP,\n\\fB--line-offsets\\fP, or \\fB--output\\fP is used to output only the part of the\nline that matched (either shown literally, or as an offset), the behaviour is\ndifferent. In this situation, all the patterns are applied to the line. If\nthere is more than one match, the one that begins nearest to the start of the\nsubject is processed; if there is more than one match at that position, the one\nwith the longest matching substring is processed; if the matching substrings\nare equal, the first match found is processed.\n.P\nScanning with all the patterns resumes immediately following the match, so that\nlater matches on the same line can be found. Note, however, that an overlapping\nmatch that starts in the middle of another match will not be processed.\n.P\nThe above behaviour was changed at release 10.41 to be more compatible with GNU\ngrep. In earlier releases, \\fBpcre2grep\\fP did not recognize matches from\nlater patterns that were earlier in the subject.\n.P\nPatterns that can match an empty string are accepted, but empty string\nmatches are never recognized. An example is the pattern \"(super)?(man)?\", in\nwhich all components are optional. This pattern finds all occurrences of both\n\"super\" and \"man\"; the output differs from matching with \"super|man\" when only\nthe matching substrings are being shown.\n.P\nIf the \\fBLC_ALL\\fP or \\fBLC_CTYPE\\fP environment variable is set,\n\\fBpcre2grep\\fP uses the value to set a locale when calling the PCRE2 library.\nThe \\fB--locale\\fP option can be used to override this.\n.\n.\n.SH \"SUPPORT FOR COMPRESSED FILES\"\n.rs\n.sp\nCompile-time options for \\fBpcre2grep\\fP can set it up to use \\fBlibz\\fP or\n\\fBlibbz2\\fP for reading compressed files whose names end in \\fB.gz\\fP or\n\\fB.bz2\\fP, respectively. You can find out whether your \\fBpcre2grep\\fP binary\nhas support for one or both of these file types by running it with the\n\\fB--help\\fP option. If the appropriate support is not present, all files are\ntreated as plain text. The standard input is always so treated. If a file with\na \\fB.gz\\fP or \\fB.bz2\\fP extension is not in fact compressed, it is read as a\nplain text file. When input is from a compressed .gz or .bz2 file, the\n\\fB--line-buffered\\fP option is ignored.\n.\n.\n.SH \"BINARY FILES\"\n.rs\n.sp\nBy default, a file that contains a binary zero byte within the first 1024 bytes\nis identified as a binary file, and is processed specially. However, if the\nnewline type is specified as NUL, that is, the line terminator is a binary\nzero, the test for a binary file is not applied. See the \\fB--binary-files\\fP\noption for a means of changing the way binary files are handled.\n.\n.\n.SH \"BINARY ZEROS IN PATTERNS\"\n.rs\n.sp\nPatterns passed from the command line are strings that are terminated by a\nbinary zero, so cannot contain internal zeros. However, patterns that are read\nfrom a file via the \\fB-f\\fP option may contain binary zeros.\n.\n.\n.SH OPTIONS\n.rs\n.sp\nThe order in which some of the options appear can affect the output. For\nexample, both the \\fB-H\\fP and \\fB-l\\fP options affect the printing of file\nnames. Whichever comes later in the command line will be the one that takes\neffect. Similarly, except where noted below, if an option is given twice, the\nlater setting is used. Numerical values for options may be followed by K or M,\nto signify multiplication by 1024 or 1024*1024 respectively.\n.TP 10\n\\fB--\\fP\nThis terminates the list of options. It is useful if the next item on the\ncommand line starts with a hyphen but is not an option. This allows for the\nprocessing of patterns and file names that start with hyphens.\n.TP\n\\fB-A\\fP \\fInumber\\fP, \\fB--after-context=\\fP\\fInumber\\fP\nOutput up to \\fInumber\\fP lines of context after each matching line. Fewer\nlines are output if the next match or the end of the file is reached, or if the\nprocessing buffer size has been set too small. If file names and/or line\nnumbers are being output, a hyphen separator is used instead of a colon for the\ncontext lines (the \\fB-Z\\fP option can be used to change the file name\nterminator to a zero byte). A line containing \"--\" is output between each group\nof lines, unless they are in fact contiguous in the input file. The value of\n\\fInumber\\fP is expected to be relatively small. When \\fB-c\\fP is used,\n\\fB-A\\fP is ignored.\n.TP\n\\fB-a\\fP, \\fB--text\\fP\nTreat binary files as text. This is equivalent to\n\\fB--binary-files\\fP=\\fItext\\fP.\n.TP\n\\fB--allow-lookaround-bsk\\fP\nPCRE2 now forbids the use of \\eK in lookarounds by default, in line with Perl.\nThis option causes \\fBpcre2grep\\fP to set the PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK\noption, which enables this somewhat dangerous usage.\n.TP\n\\fB-B\\fP \\fInumber\\fP, \\fB--before-context=\\fP\\fInumber\\fP\nOutput up to \\fInumber\\fP lines of context before each matching line. Fewer\nlines are output if the previous match or the start of the file is within\n\\fInumber\\fP lines, or if the processing buffer size has been set too small. If\nfile names and/or line numbers are being output, a hyphen separator is used\ninstead of a colon for the context lines (the \\fB-Z\\fP option can be used to\nchange the file name terminator to a zero byte). A line containing \"--\" is\noutput between each group of lines, unless they are in fact contiguous in the\ninput file. The value of \\fInumber\\fP is expected to be relatively small. When\n\\fB-c\\fP is used, \\fB-B\\fP is ignored.\n.TP\n\\fB--binary-files=\\fP\\fIword\\fP\nSpecify how binary files are to be processed. If the word is \"binary\" (the\ndefault), pattern matching is performed on binary files, but the only output is\n\"Binary file <name> matches\" when a match succeeds. If the word is \"text\",\nwhich is equivalent to the \\fB-a\\fP or \\fB--text\\fP option, binary files are\nprocessed in the same way as any other file. In this case, when a match\nsucceeds, the output may be binary garbage, which can have nasty effects if\nsent to a terminal. If the word is \"without-match\", which is equivalent to the\n\\fB-I\\fP option, binary files are not processed at all; they are assumed not to\nbe of interest and are skipped without causing any output or affecting the\nreturn code.\n.TP\n\\fB--buffer-size=\\fP\\fInumber\\fP\nSet the parameter that controls how much memory is obtained at the start of\nprocessing for buffering files that are being scanned. See also\n\\fB--max-buffer-size\\fP below.\n.TP\n\\fB-C\\fP \\fInumber\\fP, \\fB--context=\\fP\\fInumber\\fP\nOutput \\fInumber\\fP lines of context both before and after each matching line.\nThis is equivalent to setting both \\fB-A\\fP and \\fB-B\\fP to the same value.\n.TP\n\\fB-c\\fP, \\fB--count\\fP\nDo not output lines from the files that are being scanned; instead output the\nnumber of lines that would have been shown, either because they matched, or, if\n\\fB-v\\fP is set, because they failed to match. By default, this count is\nexactly the same as the number of lines that would have been output, but if the\n\\fB-M\\fP (multiline) option is used (without \\fB-v\\fP), there may be more\nsuppressed lines than the count (that is, the number of matches).\n.sp\nIf no lines are selected, the number zero is output. If several files are\nbeing scanned, a count is output for each of them and the \\fB-t\\fP option can\nbe used to cause a total to be output at the end. However, if the\n\\fB--files-with-matches\\fP option is also used, only those files whose counts\nare greater than zero are listed. When \\fB-c\\fP is used, the \\fB-A\\fP,\n\\fB-B\\fP, and \\fB-C\\fP options are ignored.\n.TP\n\\fB--colour\\fP, \\fB--color\\fP\nIf this option is given without any data, it is equivalent to \"--colour=auto\".\nIf data is required, it must be given in the same shell item, separated by an\nequals sign.\n.TP\n\\fB--colour=\\fP\\fIvalue\\fP, \\fB--color=\\fP\\fIvalue\\fP\nThis option specifies under what circumstances the parts of a line that matched\na pattern should be coloured in the output. It is ignored if\n\\fB--file-offsets\\fP, \\fB--line-offsets\\fP, or \\fB--output\\fP is set. By\ndefault, output is not coloured. The value for the \\fB--colour\\fP option (which\nis optional, see above) may be \"never\", \"always\", or \"auto\". In the latter\ncase, colouring happens only if the standard output is connected to a terminal.\nMore resources are used when colouring is enabled, because \\fBpcre2grep\\fP has\nto search for all possible matches in a line, not just one, in order to colour\nthem all.\n.sp\nThe colour that is used can be specified by setting one of the environment\nvariables PCRE2GREP_COLOUR, PCRE2GREP_COLOR, PCREGREP_COLOUR, or\nPCREGREP_COLOR, which are checked in that order. If none of these are set,\n\\fBpcre2grep\\fP looks for GREP_COLORS or GREP_COLOR (in that order). The value\nof the variable should be a string of two numbers, separated by a semicolon,\nexcept in the case of GREP_COLORS, which must start with \"ms=\" or \"mt=\"\nfollowed by two semicolon-separated colours, terminated by the end of the\nstring or by a colon. If GREP_COLORS does not start with \"ms=\" or \"mt=\" it is\nignored, and GREP_COLOR is checked.\n.sp\nIf the string obtained from one of the above variables contains any characters\nother than semicolon or digits, the setting is ignored and the default colour\nis used. The string is copied directly into the control string for setting\ncolour on a terminal, so it is your responsibility to ensure that the values\nmake sense. If no relevant environment variable is set, the default is \"1;31\",\nwhich gives red.\n.TP\n\\fB-D\\fP \\fIaction\\fP, \\fB--devices=\\fP\\fIaction\\fP\nIf an input path is not a regular file or a directory, \"action\" specifies how\nit is to be processed. Valid values are \"read\" (the default) or \"skip\"\n(silently skip the path).\n.TP\n\\fB-d\\fP \\fIaction\\fP, \\fB--directories=\\fP\\fIaction\\fP\nIf an input path is a directory, \"action\" specifies how it is to be processed.\nValid values are \"read\" (the default in non-Windows environments, for\ncompatibility with GNU grep), \"recurse\" (equivalent to the \\fB-r\\fP option), or\n\"skip\" (silently skip the path, the default in Windows environments). In the\n\"read\" case, directories are read as if they were ordinary files. In some\noperating systems the effect of reading a directory like this is an immediate\nend-of-file; in others it may provoke an error.\n.TP\n\\fB--depth-limit\\fP=\\fInumber\\fP\nSee \\fB--match-limit\\fP below.\n.TP\n\\fB-E\\fP, \\fB--case-restrict\\fP\nWhen case distinctions are being ignored in Unicode mode, two ASCII letters (K\nand S) will by default match Unicode characters U+212A (Kelvin sign) and U+017F\n(long S) respectively, as well as their lower case ASCII counterparts. When\nthis option is set, case equivalences are restricted such that no ASCII\ncharacter matches a non-ASCII character, and vice versa.\n.TP\n\\fB-e\\fP \\fIpattern\\fP, \\fB--regex=\\fP\\fIpattern\\fP, \\fB--regexp=\\fP\\fIpattern\\fP\nSpecify a pattern to be matched. This option can be used multiple times in\norder to specify several patterns. It can also be used as a way of specifying a\nsingle pattern that starts with a hyphen. When \\fB-e\\fP is used, no argument\npattern is taken from the command line; all arguments are treated as file\nnames. There is no limit to the number of patterns. They are applied to each\nline in the order in which they are defined.\n.sp\nIf \\fB-f\\fP is used with \\fB-e\\fP, the command line patterns are matched first,\nfollowed by the patterns from the file(s), independent of the order in which\nthese options are specified.\n.TP\n\\fB--exclude\\fP=\\fIpattern\\fP\nFiles (but not directories) whose names match the pattern are skipped without\nbeing processed. This applies to all files, whether listed on the command line,\nobtained from \\fB--file-list\\fP, or by scanning a directory. The pattern is a\nPCRE2 regular expression, and is matched against the final component of the\nfile name, not the entire path. The \\fB-F\\fP, \\fB-w\\fP, and \\fB-x\\fP options do\nnot apply to this pattern. The option may be given any number of times in order\nto specify multiple patterns. If a file name matches both an \\fB--include\\fP\nand an \\fB--exclude\\fP pattern, it is excluded. There is no short form for this\noption.\n.TP\n\\fB--exclude-from=\\fP\\fIfilename\\fP\nTreat each non-empty line of the file as the data for an \\fB--exclude\\fP\noption. What constitutes a newline when reading the file is the operating\nsystem's default. The \\fB--newline\\fP option has no effect on this option. This\noption may be given more than once in order to specify a number of files to\nread.\n.TP\n\\fB--exclude-dir\\fP=\\fIpattern\\fP\nDirectories whose names match the pattern are skipped without being processed,\nwhatever the setting of the \\fB--recursive\\fP option. This applies to all\ndirectories, whether listed on the command line, obtained from\n\\fB--file-list\\fP, or by scanning a parent directory. The pattern is a PCRE2\nregular expression, and is matched against the final component of the directory\nname, not the entire path. The \\fB-F\\fP, \\fB-w\\fP, and \\fB-x\\fP options do not\napply to this pattern. The option may be given any number of times in order to\nspecify more than one pattern. If a directory matches both \\fB--include-dir\\fP\nand \\fB--exclude-dir\\fP, it is excluded. There is no short form for this\noption.\n.TP\n\\fB-F\\fP, \\fB--fixed-strings\\fP\nInterpret each data-matching pattern as a list of fixed strings, separated by\nnewlines, instead of as a regular expression. What constitutes a newline for\nthis purpose is controlled by the \\fB--newline\\fP option. The \\fB-w\\fP (match\nas a word) and \\fB-x\\fP (match whole line) options can be used with \\fB-F\\fP.\nThey apply to each of the fixed strings. A line is selected if any of the fixed\nstrings are found in it (subject to \\fB-w\\fP or \\fB-x\\fP, if present). This\noption applies only to the patterns that are matched against the contents of\nfiles; it does not apply to patterns specified by any of the \\fB--include\\fP or\n\\fB--exclude\\fP options.\n.TP\n\\fB-f\\fP \\fIfilename\\fP, \\fB--file=\\fP\\fIfilename\\fP\nRead patterns from the file, one per line. As is the case with patterns on the\ncommand line, no delimiters should be used. What constitutes a newline when\nreading the file is the operating system's default interpretation of \\en. The\n\\fB--newline\\fP option has no effect on this option. Trailing white space is\nremoved from each line, and blank lines are ignored unless the\n\\fB--posix-pattern-file\\fP option is also provided. An empty file contains no\npatterns and therefore matches nothing. Patterns read from a file in this way\nmay contain binary zeros, which are treated as ordinary character literals.\n.sp\nIf this option is given more than once, all the specified files are read. A\ndata line is output if any of the patterns match it. A file name can be given\nas \"-\" to refer to the standard input. When \\fB-f\\fP is used, patterns\nspecified on the command line using \\fB-e\\fP may also be present; they are\nmatched before the file's patterns. However, no pattern is taken from the\ncommand line; all arguments are treated as the names of paths to be searched.\n.TP\n\\fB--file-list\\fP=\\fIfilename\\fP\nRead a list of files and/or directories that are to be scanned from the given\nfile, one per line. What constitutes a newline when reading the file is the\noperating system's default. Trailing white space is removed from each line, and\nblank lines are ignored. These paths are processed before any that are listed\non the command line. The file name can be given as \"-\" to refer to the standard\ninput. If \\fB--file\\fP and \\fB--file-list\\fP are both specified as \"-\",\npatterns are read first. This is useful only when the standard input is a\nterminal, from which further lines (the list of files) can be read after an\nend-of-file indication. If this option is given more than once, all the\nspecified files are read.\n.TP\n\\fB--file-offsets\\fP\nInstead of showing lines or parts of lines that match, show each match as an\noffset from the start of the file and a length, separated by a comma. In this\nmode, \\fB--colour\\fP has no effect, and no context is shown. That is, the\n\\fB-A\\fP, \\fB-B\\fP, and \\fB-C\\fP options are ignored. If there is more than one\nmatch in a line, each of them is shown separately. This option is mutually\nexclusive with \\fB--output\\fP, \\fB--line-offsets\\fP, and \\fB--only-matching\\fP.\n.TP\n\\fB--group-separator\\fP=\\fItext\\fP\nOutput this text string instead of two hyphens between groups of lines when\n\\fB-A\\fP, \\fB-B\\fP, or \\fB-C\\fP is in use. See also \\fB--no-group-separator\\fP.\n.TP\n\\fB-H\\fP, \\fB--with-filename\\fP\nForce the inclusion of the file name at the start of output lines when\nsearching a single file. The file name is not normally shown in this case.\nBy default, for matching lines, the file name is followed by a colon; for\ncontext lines, a hyphen separator is used. The \\fB-Z\\fP option can be used to\nchange the terminator to a zero byte. If a line number is also being output,\nit follows the file name. When the \\fB-M\\fP option causes a pattern to match\nmore than one line, only the first is preceded by the file name. This option\noverrides any previous \\fB-h\\fP, \\fB-l\\fP, or \\fB-L\\fP options.\n.TP\n\\fB-h\\fP, \\fB--no-filename\\fP\nSuppress the output file names when searching multiple files. File names are\nnormally shown when multiple files are searched. By default, for matching\nlines, the file name is followed by a colon; for context lines, a hyphen\nseparator is used. The \\fB-Z\\fP option can be used to change the terminator to\na zero byte. If a line number is also being output, it follows the file name.\nThis option overrides any previous \\fB-H\\fP, \\fB-L\\fP, or \\fB-l\\fP options.\n.TP\n\\fB--heap-limit\\fP=\\fInumber\\fP\nSee \\fB--match-limit\\fP below.\n.TP\n\\fB--help\\fP\nOutput a help message, giving brief details of the command options and file\ntype support, and then exit. Anything else on the command line is\nignored.\n.TP\n\\fB-I\\fP\nIgnore binary files. This is equivalent to\n\\fB--binary-files\\fP=\\fIwithout-match\\fP.\n.TP\n\\fB-i\\fP, \\fB--ignore-case\\fP\nIgnore upper/lower case distinctions when pattern matching. This applies when\nmatching path names for inclusion or exclusion as well as when matching lines\nin files.\n.TP\n\\fB--include\\fP=\\fIpattern\\fP\nIf any \\fB--include\\fP patterns are specified, the only files that are\nprocessed are those whose names match one of the patterns and do not match an\n\\fB--exclude\\fP pattern. This option does not affect directories, but it\napplies to all files, whether listed on the command line, obtained from\n\\fB--file-list\\fP, or by scanning a directory. The pattern is a PCRE2 regular\nexpression, and is matched against the final component of the file name, not\nthe entire path. The \\fB-F\\fP, \\fB-w\\fP, and \\fB-x\\fP options do not apply to\nthis pattern. The option may be given any number of times. If a file name\nmatches both an \\fB--include\\fP and an \\fB--exclude\\fP pattern, it is excluded.\nThere is no short form for this option.\n.TP\n\\fB--include-from=\\fP\\fIfilename\\fP\nTreat each non-empty line of the file as the data for an \\fB--include\\fP\noption. What constitutes a newline for this purpose is the operating system's\ndefault. The \\fB--newline\\fP option has no effect on this option. This option\nmay be given any number of times; all the files are read.\n.TP\n\\fB--include-dir\\fP=\\fIpattern\\fP\nIf any \\fB--include-dir\\fP patterns are specified, the only directories that\nare processed are those whose names match one of the patterns and do not match\nan \\fB--exclude-dir\\fP pattern. This applies to all directories, whether listed\non the command line, obtained from \\fB--file-list\\fP, or by scanning a parent\ndirectory. The pattern is a PCRE2 regular expression, and is matched against\nthe final component of the directory name, not the entire path. The \\fB-F\\fP,\n\\fB-w\\fP, and \\fB-x\\fP options do not apply to this pattern. The option may be\ngiven any number of times. If a directory matches both \\fB--include-dir\\fP and\n\\fB--exclude-dir\\fP, it is excluded. There is no short form for this option.\n.TP\n\\fB-L\\fP, \\fB--files-without-match\\fP\nInstead of outputting lines from the files, just output the names of the files\nthat do not contain any lines that would have been output. Each file name is\noutput once, on a separate line by default, but if the \\fB-Z\\fP option is set,\nthey are separated by zero bytes instead of newlines. This option overrides any\nprevious \\fB-H\\fP, \\fB-h\\fP, or \\fB-l\\fP options.\n.TP\n\\fB-l\\fP, \\fB--files-with-matches\\fP\nInstead of outputting lines from the files, just output the names of the files\ncontaining lines that would have been output. Each file name is output once, on\na separate line, but if the \\fB-Z\\fP option is set, they are separated by zero\nbytes instead of newlines. Searching normally stops as soon as a matching line\nis found in a file. However, if the \\fB-c\\fP (count) option is also used,\nmatching continues in order to obtain the correct count, and those files that\nhave at least one match are listed along with their counts. Using this option\nwith \\fB-c\\fP is a way of suppressing the listing of files with no matches that\noccurs with \\fB-c\\fP on its own. This option overrides any previous \\fB-H\\fP,\n\\fB-h\\fP, or \\fB-L\\fP options.\n.TP\n\\fB--label\\fP=\\fIname\\fP\nThis option supplies a name to be used for the standard input when file names\nare being output. If not supplied, \"(standard input)\" is used. There is no\nshort form for this option.\n.TP\n\\fB--line-buffered\\fP\nWhen this option is given, non-compressed input is read and processed line by\nline, and the output is flushed after each write. By default, input is read in\nlarge chunks, unless \\fBpcre2grep\\fP can determine that it is reading from a\nterminal, which is currently possible only in Unix-like environments or\nWindows. Output to terminal is normally automatically flushed by the operating\nsystem. This option can be useful when the input or output is attached to a\npipe and you do not want \\fBpcre2grep\\fP to buffer up large amounts of data.\nHowever, its use will affect performance, and the \\fB-M\\fP (multiline) option\nceases to work. When input is from a compressed .gz or .bz2 file,\n\\fB--line-buffered\\fP is ignored.\n.TP\n\\fB--line-offsets\\fP\nInstead of showing lines or parts of lines that match, show each match as a\nline number, the offset from the start of the line, and a length. The line\nnumber is terminated by a colon (as usual; see the \\fB-n\\fP option), and the\noffset and length are separated by a comma. In this mode, \\fB--colour\\fP has no\neffect, and no context is shown. That is, the \\fB-A\\fP, \\fB-B\\fP, and \\fB-C\\fP\noptions are ignored. If there is more than one match in a line, each of them is\nshown separately. This option is mutually exclusive with \\fB--output\\fP,\n\\fB--file-offsets\\fP, and \\fB--only-matching\\fP.\n.TP\n\\fB--locale\\fP=\\fIlocale-name\\fP\nThis option specifies a locale to be used for pattern matching. It overrides\nthe value in the \\fBLC_ALL\\fP or \\fBLC_CTYPE\\fP environment variables. If no\nlocale is specified, the PCRE2 library's default (usually the \"C\" locale) is\nused. There is no short form for this option.\n.TP\n\\fB-M\\fP, \\fB--multiline\\fP\nAllow patterns to match more than one line. When this option is set, the PCRE2\nlibrary is called in \"multiline\" mode, and a match is allowed to continue past\nthe end of the initial line and onto one or more subsequent lines.\n.sp\nPatterns used with \\fB-M\\fP may usefully contain literal newline characters and\ninternal occurrences of ^ and $ characters, because in multiline mode these can\nmatch at internal newlines. Because \\fBpcre2grep\\fP is scanning multiple lines,\nthe \\eZ and \\ez assertions match only at the end of the last line in the file.\nThe \\eA assertion matches at the start of the first line of a match. This can\nbe any line in the file; it is not anchored to the first line.\n.sp\nThe output for a successful match may consist of more than one line. The first\nline is the line in which the match started, and the last line is the line in\nwhich the match ended. If the matched string ends with a newline sequence, the\noutput ends at the end of that line. If \\fB-v\\fP is set, none of the lines in a\nmulti-line match are output. Once a match has been handled, scanning restarts\nat the beginning of the line after the one in which the match ended.\n.sp\nThe newline sequence that separates multiple lines must be matched as part of\nthe pattern. For example, to find the phrase \"regular expression\" in a file\nwhere \"regular\" might be at the end of a line and \"expression\" at the start of\nthe next line, you could use this command:\n.sp\n  pcre2grep -M 'regular\\es+expression' <file>\n.sp\nThe \\es escape sequence matches any white space character, including newlines,\nand is followed by + so as to match trailing white space on the first line as\nwell as possibly handling a two-character newline sequence.\n.sp\nThere is a limit to the number of lines that can be matched, imposed by the way\nthat \\fBpcre2grep\\fP buffers the input file as it scans it. With a sufficiently\nlarge processing buffer, this should not be a problem.\n.sp\nThe \\fB-M\\fP option does not work when input is read line by line (see\n\\fB--line-buffered\\fP.)\n.TP\n\\fB-m\\fP \\fInumber\\fP, \\fB--max-count\\fP=\\fInumber\\fP\nStop processing after finding \\fInumber\\fP matching lines, or non-matching\nlines if \\fB-v\\fP is also set. Any trailing context lines are output after the\nfinal match. In multiline mode, each multiline match counts as just one line\nfor this purpose. If this limit is reached when reading the standard input from\na regular file, the file is left positioned just after the last matching line.\nIf \\fB-c\\fP is also set, the count that is output is never greater than\n\\fInumber\\fP. This option has no effect if used with \\fB-L\\fP, \\fB-l\\fP, or\n\\fB-q\\fP, or when just checking for a match in a binary file.\n.TP\n\\fB--match-limit\\fP=\\fInumber\\fP\nProcessing some regular expression patterns may take a very long time to search\nfor all possible matching strings. Others may require a very large amount of\nmemory. There are three options that set resource limits for matching.\n.sp\nThe \\fB--match-limit\\fP option provides a means of limiting computing resource\nusage when processing patterns that are not going to match, but which have a\nvery large number of possibilities in their search trees. The classic example\nis a pattern that uses nested unlimited repeats. Internally, PCRE2 has a\ncounter that is incremented each time around its main processing loop. If the\nvalue set by \\fB--match-limit\\fP is reached, an error occurs.\n.sp\nThe \\fB--heap-limit\\fP option specifies, as a number of kibibytes (units of\n1024 bytes), the maximum amount of heap memory that may be used for matching.\n.sp\nThe \\fB--depth-limit\\fP option limits the depth of nested backtracking points,\nwhich indirectly limits the amount of memory that is used. The amount of memory\nneeded for each backtracking point depends on the number of capturing\nparentheses in the pattern, so the amount of memory that is used before this\nlimit acts varies from pattern to pattern. This limit is of use only if it is\nset smaller than \\fB--match-limit\\fP.\n.sp\nThere are no short forms for these options. The default limits can be set\nwhen the PCRE2 library is compiled; if they are not specified, the defaults\nare very large and so effectively unlimited.\n.TP\n\\fB--max-buffer-size\\fP=\\fInumber\\fP\nThis limits the expansion of the processing buffer, whose initial size can be\nset by \\fB--buffer-size\\fP. The maximum buffer size is silently forced to be no\nsmaller than the starting buffer size.\n.TP\n\\fB-N\\fP \\fInewline-type\\fP, \\fB--newline\\fP=\\fInewline-type\\fP\nSix different conventions for indicating the ends of lines in scanned files are\nsupported. For example:\n.sp\n  pcre2grep -N CRLF 'some pattern' <file>\n.sp\nThe newline type may be specified in upper, lower, or mixed case. If the\nnewline type is NUL, lines are separated by binary zero characters. The other\ntypes are the single-character sequences CR (carriage return) and LF\n(linefeed), the two-character sequence CRLF, an \"anycrlf\" type, which\nrecognizes any of the preceding three types, and an \"any\" type, for which any\nUnicode line ending sequence is assumed to end a line. The Unicode sequences\nare the three just mentioned, plus VT (vertical tab, U+000B), FF (form feed,\nU+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS\n(paragraph separator, U+2029).\n.sp\nWhen the PCRE2 library is built, a default line-ending sequence is specified.\nThis is normally the standard sequence for the operating system. Unless\notherwise specified by this option, \\fBpcre2grep\\fP uses the library's default.\n.sp\nThis option makes it possible to use \\fBpcre2grep\\fP to scan files that have\ncome from other environments without having to modify their line endings. If\nthe data that is being scanned does not agree with the convention set by this\noption, \\fBpcre2grep\\fP may behave in strange ways. Note that this option does\nnot apply to files specified by the \\fB-f\\fP, \\fB--exclude-from\\fP, or\n\\fB--include-from\\fP options, which are expected to use the operating system's\nstandard newline sequence.\n.TP\n\\fB-n\\fP, \\fB--line-number\\fP\nPrecede each output line by its line number in the file, followed by a colon\nfor matching lines or a hyphen for context lines. If the file name is also\nbeing output, it precedes the line number. When the \\fB-M\\fP option causes a\npattern to match more than one line, only the first is preceded by its line\nnumber. This option is forced if \\fB--line-offsets\\fP is used.\n.TP\n\\fB--no-group-separator\\fP\nDo not output a separator between groups of lines when \\fB-A\\fP, \\fB-B\\fP, or\n\\fB-C\\fP is in use. The default is to output a line containing two hyphens. See\nalso \\fB--group-separator\\fP.\n.TP\n\\fB--no-jit\\fP\nIf the PCRE2 library is built with support for just-in-time compiling (which\nspeeds up matching), \\fBpcre2grep\\fP automatically makes use of this, unless it\nwas explicitly disabled at build time. This option can be used to disable the\nuse of JIT at run time. It is provided for testing and working around problems.\nIt should never be needed in normal use.\n.TP\n\\fB-O\\fP \\fItext\\fP, \\fB--output\\fP=\\fItext\\fP\nWhen there is a match, instead of outputting the line that matched, output just\nthe text specified in this option, followed by an operating-system standard\nnewline. In this mode, \\fB--colour\\fP has no effect, and no context is shown.\nThat is, the \\fB-A\\fP, \\fB-B\\fP, and \\fB-C\\fP options are ignored. The\n\\fB--newline\\fP option has no effect on this option, which is mutually\nexclusive with \\fB--only-matching\\fP, \\fB--file-offsets\\fP, and\n\\fB--line-offsets\\fP. However, like \\fB--only-matching\\fP, if there is more\nthan one match in a line, each of them causes a line of output.\n.sp\nEscape sequences starting with a dollar character may be used to insert the\ncontents of the matched part of the line and/or captured substrings into the\ntext.\n.sp\n$<digits> or ${<digits>} is replaced by the captured substring of the given\ndecimal number; $& (or the legacy $0) substitutes the whole match. If the\nnumber is greater than the number of capturing substrings, or if the capture\nis unset, the replacement is empty.\n.sp\n$a is replaced by bell; $b by backspace; $e by escape; $f by form feed; $n by\nnewline; $r by carriage return; $t by tab; $v by vertical tab.\n.sp\n$o<digits> or $o{<digits>} is replaced by the character whose code point is the\ngiven octal number. In the first form, up to three octal digits are processed.\nWhen more digits are needed in Unicode mode to specify a wide character, the\nsecond form must be used.\n.sp\n$x<digits> or $x{<digits>} is replaced by the character represented by the\ngiven hexadecimal number. In the first form, up to two hexadecimal digits are\nprocessed. When more digits are needed in Unicode mode to specify a wide\ncharacter, the second form must be used.\n.sp\nAny other character is substituted by itself. In particular, $$ is replaced by\na single dollar.\n.TP\n\\fB-o\\fP, \\fB--only-matching\\fP\nShow only the part of the line that matched a pattern instead of the whole\nline. In this mode, no context is shown. That is, the \\fB-A\\fP, \\fB-B\\fP, and\n\\fB-C\\fP options are ignored. If there is more than one match in a line, each\nof them is shown separately, on a separate line of output. If \\fB-o\\fP is\ncombined with \\fB-v\\fP (invert the sense of the match to find non-matching\nlines), no output is generated, but the return code is set appropriately. If\nthe matched portion of the line is empty, nothing is output unless the file\nname or line number are being printed, in which case they are shown on an\notherwise empty line. This option is mutually exclusive with \\fB--output\\fP,\n\\fB--file-offsets\\fP and \\fB--line-offsets\\fP.\n.TP\n\\fB-o\\fP\\fInumber\\fP, \\fB--only-matching\\fP=\\fInumber\\fP\nShow only the part of the line that matched the capturing parentheses of the\ngiven number. Up to 50 capturing parentheses are supported by default. This\nlimit can be changed via the \\fB--om-capture\\fP option. A pattern may contain\nany number of capturing parentheses, but only those whose number is within the\nlimit can be accessed by \\fB-o\\fP. An error occurs if the number specified by\n\\fB-o\\fP is greater than the limit.\n.sp\n-o0 is the same as \\fB-o\\fP without a number. Because these options can be\ngiven without an argument (see above), if an argument is present, it must be\ngiven in the same shell item, for example, -o3 or --only-matching=2. The\ncomments given for the non-argument case above also apply to this option. If\nthe specified capturing parentheses do not exist in the pattern, or were not\nset in the match, nothing is output unless the file name or line number are\nbeing output.\n.sp\nIf this option is given multiple times, multiple substrings are output for each\nmatch, in the order the options are given, and all on one line. For example,\n-o3 -o1 -o3 causes the substrings matched by capturing parentheses 3 and 1 and\nthen 3 again to be output. By default, there is no separator (but see the next\nbut one option).\n.TP\n\\fB--om-capture\\fP=\\fInumber\\fP\nSet the number of capturing parentheses that can be accessed by \\fB-o\\fP. The\ndefault is 50.\n.TP\n\\fB--om-separator\\fP=\\fItext\\fP\nSpecify a separating string for multiple occurrences of \\fB-o\\fP. The default\nis an empty string. Separating strings are never coloured.\n.TP\n\\fB-P\\fP, \\fB--no-ucp\\fP\nStarting from release 10.43, when UTF/Unicode mode is specified with \\fB-u\\fP\nor \\fB-U\\fP, the PCRE2_UCP option is used by default. This means that the\nPOSIX classes in patterns match more than just ASCII characters. For example,\n[:digit:] matches any Unicode decimal digit. The \\fB--no-ucp\\fP option\nsuppresses PCRE2_UCP, thus restricting the POSIX classes to ASCII characters,\nas was the case in earlier releases. Note that there are now more fine-grained\noption settings within patterns that affect individual classes. For example,\nwhen in UCP mode, the sequence (?aP) restricts [:word:] to ASCII letters, while\nallowing \\ew to match Unicode letters and digits.\n.TP\n\\fB--posix-pattern-file\\fP\nWhen patterns are provided with the \\fB-f\\fP option, do not trim trailing\nspaces or ignore empty lines in a similar way than other grep tools. To keep\nthe behaviour consistent with older versions, if the pattern read was\nterminated with CRLF (as character literals) then both characters won't be\nincluded as part of it, so if you really need to have pattern ending in '\\er',\nuse a escape sequence or provide it by a different method.\n.TP\n\\fB-q\\fP, \\fB--quiet\\fP\nWork quietly, that is, display nothing except error messages. The exit\nstatus indicates whether or not any matches were found.\n.TP\n\\fB-r\\fP, \\fB--recursive\\fP\nIf any given path is a directory, recursively scan the files it contains,\ntaking note of any \\fB--include\\fP and \\fB--exclude\\fP settings. By default, a\ndirectory is read as a normal file; in some operating systems this gives an\nimmediate end-of-file. This option is a shorthand for setting the \\fB-d\\fP\noption to \"recurse\".\n.TP\n\\fB--recursion-limit\\fP=\\fInumber\\fP\nThis is an obsolete synonym for \\fB--depth-limit\\fP. See \\fB--match-limit\\fP\nabove for details.\n.TP\n\\fB-s\\fP, \\fB--no-messages\\fP\nSuppress error messages about non-existent or unreadable files. Such files are\nquietly skipped. However, the return code is still 2, even if matches were\nfound in other files.\n.TP\n\\fB-t\\fP, \\fB--total-count\\fP\nThis option is useful when scanning more than one file. If used on its own,\n\\fB-t\\fP suppresses all output except for a grand total number of matching\nlines (or non-matching lines if \\fB-v\\fP is used) in all the files. If \\fB-t\\fP\nis used with \\fB-c\\fP, a grand total is output except when the previous output\nis just one line. In other words, it is not output when just one file's count\nis listed. If file names are being output, the grand total is preceded by\n\"TOTAL:\". Otherwise, it appears as just another number. The \\fB-t\\fP option is\nignored when used with \\fB-L\\fP (list files without matches), because the grand\ntotal would always be zero.\n.TP\n\\fB-u\\fP, \\fB--utf\\fP\nOperate in UTF/Unicode mode. This option is available only if PCRE2 has been\ncompiled with UTF-8 support. All patterns (including those for any\n\\fB--exclude\\fP and \\fB--include\\fP options) and all lines that are scanned\nmust be valid strings of UTF-8 characters. If an invalid UTF-8 string is\nencountered, an error occurs.\n.TP\n\\fB-U\\fP, \\fB--utf-allow-invalid\\fP\nAs \\fB--utf\\fP, but in addition subject lines may contain invalid UTF-8 code\nunit sequences. These can never form part of any pattern match. Patterns\nthemselves, however, must still be valid UTF-8 strings. This facility allows\nvalid UTF-8 strings to be sought within arbitrary byte sequences in executable\nor other binary files. For more details about matching in non-valid UTF-8\nstrings, see the\n.\\\" HREF\n\\fBpcre2unicode\\fP(3)\n.\\\"\ndocumentation.\n.TP\n\\fB-V\\fP, \\fB--version\\fP\nWrite the version numbers of \\fBpcre2grep\\fP and the PCRE2 library to the\nstandard output and then exit. Anything else on the command line is\nignored.\n.TP\n\\fB-v\\fP, \\fB--invert-match\\fP\nInvert the sense of the match, so that lines which do \\fInot\\fP match any of\nthe patterns are the ones that are found. When this option is set, options such\nas \\fB--only-matching\\fP and \\fB--output\\fP, which specify parts of a match\nthat are to be output, are ignored.\n.TP\n\\fB-w\\fP, \\fB--word-regex\\fP, \\fB--word-regexp\\fP\nForce the patterns only to match \"words\". That is, there must be a word\nboundary at the start and end of each matched string. This is equivalent to\nhaving \"\\eb(?:\" at the start of each pattern, and \")\\eb\" at the end. This\noption applies only to the patterns that are matched against the contents of\nfiles; it does not apply to patterns specified by any of the \\fB--include\\fP or\n\\fB--exclude\\fP options.\n.TP\n\\fB-x\\fP, \\fB--line-regex\\fP, \\fB--line-regexp\\fP\nForce the patterns to start matching only at the beginnings of lines, and in\naddition, require them to match entire lines. In multiline mode the match may\nbe more than one line. This is equivalent to having \"^(?:\" at the start of each\npattern and \")$\" at the end. This option applies only to the patterns that are\nmatched against the contents of files; it does not apply to patterns specified\nby any of the \\fB--include\\fP or \\fB--exclude\\fP options.\n.TP\n\\fB-Z\\fP, \\fB--null\\fP\nTerminate files names in the regular output with a zero byte (the NUL\ncharacter) instead of what would normally appear. This is useful when file\nnames contain unusual characters such as colons, hyphens, or even newlines. The\noption does not apply to file names in error messages.\n.\n.\n.SH \"ENVIRONMENT VARIABLES\"\n.rs\n.sp\nThe environment variables \\fBLC_ALL\\fP and \\fBLC_CTYPE\\fP are examined, in that\norder, for a locale. The first one that is set is used. This can be overridden\nby the \\fB--locale\\fP option. If no locale is set, the PCRE2 library's default\n(usually the \"C\" locale) is used.\n.\n.\n.SH \"NEWLINES\"\n.rs\n.sp\nThe \\fB-N\\fP (\\fB--newline\\fP) option allows \\fBpcre2grep\\fP to scan files with\nnewline conventions that differ from the default. This option affects only the\nway scanned files are processed. It does not affect the interpretation of files\nspecified by the \\fB-f\\fP, \\fB--file-list\\fP, \\fB--exclude-from\\fP, or\n\\fB--include-from\\fP options.\n.P\nAny parts of the scanned input files that are written to the standard output\nare copied with whatever newline sequences they have in the input. However, if\nthe final line of a file is output, and it does not end with a newline\nsequence, a newline sequence is added. If the newline setting is CR, LF, CRLF\nor NUL, that line ending is output; for the other settings (ANYCRLF or ANY) a\nsingle NL is used.\n.P\nThe newline setting does not affect the way in which \\fBpcre2grep\\fP writes\nnewlines in informational messages to the standard output and error streams.\nUnder Windows, the standard output is set to be binary, so that \"\\er\\en\" at the\nends of output lines that are copied from the input is not converted to\n\"\\er\\er\\en\" by the C I/O library. This means that any messages written to the\nstandard output must end with \"\\er\\en\". For all other operating systems, and\nfor all messages to the standard error stream, \"\\en\" is used.\n.\n.\n.SH \"OPTIONS COMPATIBILITY WITH GNU GREP\"\n.rs\n.sp\nMany of the short and long forms of \\fBpcre2grep\\fP's options are the same as\nin the GNU \\fBgrep\\fP program. Any long option of the form \\fB--xxx-regexp\\fP\n(GNU terminology) is also available as \\fB--xxx-regex\\fP (PCRE2 terminology).\nHowever, the \\fB--case-restrict\\fP, \\fB--depth-limit\\fP, \\fB-E\\fP,\n\\fB--file-list\\fP, \\fB--file-offsets\\fP, \\fB--heap-limit\\fP,\n\\fB--include-dir\\fP, \\fB--line-offsets\\fP, \\fB--locale\\fP, \\fB--match-limit\\fP,\n\\fB-M\\fP, \\fB--multiline\\fP, \\fB-N\\fP, \\fB--newline\\fP, \\fB--no-ucp\\fP,\n\\fB--om-separator\\fP, \\fB--output\\fP, \\fB-P\\fP, \\fB-u\\fP, \\fB--utf\\fP,\n\\fB-U\\fP, and \\fB--utf-allow-invalid\\fP options are specific to\n\\fBpcre2grep\\fP, as is the use of the \\fB--only-matching\\fP option with a\ncapturing parentheses number.\n.P\nAlthough most of the common options work the same way, a few are different in\n\\fBpcre2grep\\fP. For example, the \\fB--include\\fP option's argument is a glob\nfor GNU \\fBgrep\\fP, but in \\fBpcre2grep\\fP it is a regular expression to which\nthe \\fB-i\\fP option applies. If both the \\fB-c\\fP and \\fB-l\\fP options are\ngiven, GNU grep lists only file names, without counts, but \\fBpcre2grep\\fP\ngives the counts as well.\n.\n.\n.SH \"OPTIONS WITH DATA\"\n.rs\n.sp\nThere are four different ways in which an option with data can be specified.\nIf a short form option is used, the data may follow immediately, or (with one\nexception) in the next command line item. For example:\n.sp\n  -f/some/file\n  -f /some/file\n.sp\nThe exception is the \\fB-o\\fP option, which may appear with or without data.\nBecause of this, if data is present, it must follow immediately in the same\nitem, for example -o3.\n.P\nIf a long form option is used, the data may appear in the same command line\nitem, separated by an equals character, or (with two exceptions) it may appear\nin the next command line item. For example:\n.sp\n  --file=/some/file\n  --file /some/file\n.sp\nNote, however, that if you want to supply a file name beginning with ~ as data\nin a shell command, and have the shell expand ~ to a home directory, you must\nseparate the file name from the option, because the shell does not treat ~\nspecially unless it is at the start of an item.\n.P\nThe exceptions to the above are the \\fB--colour\\fP (or \\fB--color\\fP) and\n\\fB--only-matching\\fP options, for which the data is optional. If one of these\noptions does have data, it must be given in the first form, using an equals\ncharacter. Otherwise \\fBpcre2grep\\fP will assume that it has no data.\n.\n.\n.SH \"USING PCRE2'S CALLOUT FACILITY\"\n.rs\n.sp\n\\fBpcre2grep\\fP has, by default, support for calling external programs or\nscripts or echoing specific strings during matching by making use of PCRE2's\ncallout facility. However, this support can be completely or partially disabled\nwhen \\fBpcre2grep\\fP is built. You can find out whether your binary has support\nfor callouts by running it with the \\fB--help\\fP option. If callout support is\ncompletely disabled, callouts in patterns are forbidden by \\fBpcre2grep\\fP.\nIf the facility is partially disabled, calling external programs is not\nsupported, and callouts that request it are ignored.\n.P\nA callout in a PCRE2 pattern is of the form (?C<arg>) where the argument is\neither a number or a quoted string (see the\n.\\\" HREF\n\\fBpcre2callout\\fP\n.\\\"\ndocumentation for details). Numbered callouts are ignored by \\fBpcre2grep\\fP;\nonly callouts with string arguments are useful.\n.\n.\n.SS \"Echoing a specific string\"\n.rs\n.sp\nStarting the callout string with a pipe character invokes an echoing facility\nthat avoids calling an external program or script. This facility is always\navailable, provided that callouts were not completely disabled when\n\\fBpcre2grep\\fP was built. The rest of the callout string is processed as a\nzero-terminated string, which means it should not contain any internal binary\nzeros. It is written to the output, having first been passed through the same\nescape processing as text from the \\fB--output\\fP (\\fB-O\\fP) option (see\nabove). However, $0 or $& cannot be used to insert a matched substring because\nthe match is still in progress. Instead, the single character '0' is inserted.\nAny syntax errors in the string (for example, a dollar not followed by another\ncharacter) causes the callout to be ignored. No terminator is added to the\noutput string, so if you want a newline, you must include it explicitly using\nthe escape $n. For example:\n.sp\n  pcre2grep '(.)(..(.))(?C\"|[$1] [$2] [$3]$n\")' <some file>\n.sp\nMatching continues normally after the string is output. If you want to see only\nthe callout output but not any output from an actual match, you should end the\npattern with (*FAIL).\n.\n.\n.SS \"Calling external programs or scripts\"\n.rs\n.sp\nThis facility can be independently disabled when \\fBpcre2grep\\fP is built. It\nis supported for Windows, where a call to \\fB_spawnvp()\\fP is used, for VMS,\nwhere \\fBlib$spawn()\\fP is used, and for any Unix-like environment where\n\\fBfork()\\fP and \\fBexecv()\\fP are available.\n.P\nIf the callout string does not start with a pipe (vertical bar) character, it\nis parsed into a list of substrings separated by pipe characters. The first\nsubstring must be an executable name, with the following substrings specifying\narguments:\n.sp\n  executable_name|arg1|arg2|...\n.sp\nAny substring (including the executable name) may contain escape sequences\nstarted by a dollar character. These are the same as for the \\fB--output\\fP\n(\\fB-O\\fP) option documented above, except that $0 or $& cannot insert the\nmatched string because the match is still in progress. Instead, the character\n\\&'0' is inserted. If you need a literal dollar or pipe character in any\nsubstring, use $$ or $| respectively. Here is an example:\n.sp\n  echo -e \"abcde\\en12345\" | pcre2grep \\e\n    '(?x)(.)(..(.))\n    (?C\"/bin/echo|Arg1: [$1] [$2] [$3]|Arg2: $|${1}$| ($4)\")()' -\n.sp\n  Output:\n.sp\n    Arg1: [a] [bcd] [d] Arg2: |a| ()\n    abcde\n    Arg1: [1] [234] [4] Arg2: |1| ()\n    12345\n.sp\nThe parameters for the system call that is used to run the program or script\nare zero-terminated strings. This means that binary zero characters in the\ncallout argument will cause premature termination of their substrings, and\ntherefore should not be present. Any syntax errors in the string (for example,\na dollar not followed by another character) causes the callout to be ignored.\nIf running the program fails for any reason (including the non-existence of the\nexecutable), a local matching failure occurs and the matcher backtracks in the\nnormal way.\n.\n.\n.SH \"MATCHING ERRORS\"\n.rs\n.sp\nIt is possible to supply a regular expression that takes a very long time to\nfail to match certain lines. Such patterns normally involve nested indefinite\nrepeats, for example: (a+)*\\ed when matched against a line of a's with no final\ndigit. The PCRE2 matching function has a resource limit that causes it to abort\nin these circumstances. If this happens, \\fBpcre2grep\\fP outputs an error\nmessage and the line that caused the problem to the standard error stream. If\nthere are more than 20 such errors, \\fBpcre2grep\\fP gives up.\n.P\nThe \\fB--match-limit\\fP option of \\fBpcre2grep\\fP can be used to set the\noverall resource limit. There are also other limits that affect the amount of\nmemory used during matching; see the discussion of \\fB--heap-limit\\fP and\n\\fB--depth-limit\\fP above.\n.\n.\n.SH DIAGNOSTICS\n.rs\n.sp\nExit status is 0 if any matches were found, 1 if no matches were found, and 2\nfor syntax errors, overlong lines, non-existent or inaccessible files (even if\nmatches were found in other files) or too many matching errors. Using the\n\\fB-s\\fP option to suppress error messages about inaccessible files does not\naffect the return code.\n.P\nWhen run under VMS, the return code is placed in the symbol PCRE2GREP_RC\nbecause VMS does not distinguish between exit(0) and exit(1).\n.\n.\n.SH \"SEE ALSO\"\n.rs\n.sp\n\\fBpcre2pattern\\fP(3), \\fBpcre2syntax\\fP(3), \\fBpcre2callout\\fP(3),\n\\fBpcre2unicode\\fP(3).\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 24 January 2025\nCopyright (c) 1997-2023 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2grep.txt",
    "content": "PCRE2GREP(1)                General Commands Manual               PCRE2GREP(1)\n\n\nNAME\n       pcre2grep - a grep with Perl-compatible regular expressions.\n\n\nSYNOPSIS\n       pcre2grep [options] [long options] [pattern] [path1 path2 ...]\n\n\nDESCRIPTION\n\n       pcre2grep  searches  files  for  character patterns, in the same way as\n       other grep commands do, but it uses the PCRE2  regular  expression  li-\n       brary  to support patterns that are compatible with the regular expres-\n       sions of Perl 5. See pcre2syntax(3) for a  quick-reference  summary  of\n       pattern syntax, or pcre2pattern(3) for a full description of the syntax\n       and semantics of the regular expressions that PCRE2 supports.\n\n       Patterns,  whether  supplied on the command line or in a separate file,\n       are given without delimiters. For example:\n\n         pcre2grep Thursday /etc/motd\n\n       If you attempt to use delimiters (for example, by surrounding a pattern\n       with slashes, as is common in Perl scripts), they  are  interpreted  as\n       part  of  the pattern. Quotes can of course be used to delimit patterns\n       on the command line because they are interpreted by the shell, and  in-\n       deed  quotes  are  required  if a pattern contains white space or shell\n       metacharacters.\n\n       The first argument that follows any option settings is treated  as  the\n       single  pattern  to be matched when neither -e nor -f is present.  Con-\n       versely, when one or both of these options are  used  to  specify  pat-\n       terns, all arguments are treated as path names. At least one of -e, -f,\n       or an argument pattern must be provided.\n\n       If  no  files  are  specified,  pcre2grep reads the standard input. The\n       standard input can also be referenced by a name consisting of a  single\n       hyphen.  For example:\n\n         pcre2grep some-pattern file1 - file3\n\n       By  default,  input  files are searched line by line, so pattern asser-\n       tions about the beginning and end of a subject string (^,  $,  \\A,  \\Z,\n       and  \\z)  match  at  the  beginning  and  end of each line. When a line\n       matches a pattern, it is copied to the standard output, and if there is\n       more than one file, the file name is output at the start of each  line,\n       followed  by  a  colon.  However, there are options that can change how\n       pcre2grep behaves. For example, the -M  option  makes  it  possible  to\n       search  for  strings  that  span  line  boundaries. What defines a line\n       boundary is controlled by the -N (--newline) option.  The -h and -H op-\n       tions control whether or not file names are shown, and  the  -Z  option\n       changes the file name terminator to a zero byte.\n\n       The amount of memory used for buffering files that are being scanned is\n       controlled  by  parameters  that  can  be  set by the --buffer-size and\n       --max-buffer-size options. The first of these sets the size  of  buffer\n       that  is obtained at the start of processing. If an input file contains\n       very long lines, a larger buffer may be needed; this is handled by  au-\n       tomatically  extending  the buffer, up to the limit specified by --max-\n       buffer-size. The default values for these parameters can  be  set  when\n       pcre2grep  is  built;  if nothing is specified, the defaults are set to\n       20KiB and 1MiB respectively. An error occurs if a line is too long  and\n       the buffer can no longer be expanded.\n\n       The  block  of  memory that is actually used is three times the \"buffer\n       size\", to allow for buffering \"before\" and \"after\" lines. If the buffer\n       size is too small, fewer than requested \"before\" and \"after\" lines  may\n       be output.\n\n       When  matching with a multiline pattern, the size of the buffer must be\n       at least half of the maximum match expected or the pattern  might  fail\n       to match.\n\n       Patterns  can  be no longer than 8KiB or BUFSIZ bytes, whichever is the\n       greater.  BUFSIZ is defined in <stdio.h>. When there is more  than  one\n       pattern (specified by the use of -e and/or -f), each pattern is applied\n       to  each  line  in the order in which they are defined, except that all\n       the -e patterns are tried before the -f patterns.\n\n       By default, as soon as one pattern matches a line, no further  patterns\n       are considered. However, if --colour (or --color) is used to colour the\n       matching substrings, or if --only-matching, --file-offsets, --line-off-\n       sets,  or  --output  is  used  to output only the part of the line that\n       matched (either shown literally, or as an  offset),  the  behaviour  is\n       different. In this situation, all the patterns are applied to the line.\n       If  there  is  more  than one match, the one that begins nearest to the\n       start of the subject is processed; if there is more than one  match  at\n       that   position,  the  one  with  the  longest  matching  substring  is\n       processed; if the matching substrings are equal, the first match  found\n       is processed.\n\n       Scanning with all the patterns resumes immediately following the match,\n       so  that  later  matches  on the same line can be found. Note, however,\n       that an overlapping match that starts in the middle  of  another  match\n       will not be processed.\n\n       The  above behaviour was changed at release 10.41 to be more compatible\n       with GNU grep. In earlier releases, pcre2grep did not recognize matches\n       from later patterns that were earlier in the subject.\n\n       Patterns that can match an empty string are accepted, but empty  string\n       matches   are  never  recognized.  An  example  is  the  pattern  \"(su-\n       per)?(man)?\", in which all components are optional. This pattern  finds\n       all  occurrences  of  both  \"super\"  and \"man\"; the output differs from\n       matching with \"super|man\" when only the matching substrings  are  being\n       shown.\n\n       If  the  LC_ALL or LC_CTYPE environment variable is set, pcre2grep uses\n       the value to set a locale when calling the PCRE2 library.  The --locale\n       option can be used to override this.\n\n\nSUPPORT FOR COMPRESSED FILES\n\n       Compile-time options for pcre2grep can set it up to use libz or  libbz2\n       for  reading  compressed  files whose names end in .gz or .bz2, respec-\n       tively. You can find out whether your pcre2grep binary has support  for\n       one  or  both of these file types by running it with the --help option.\n       If the appropriate support is not present, all  files  are  treated  as\n       plain  text.  The standard input is always so treated. If a file with a\n       .gz or .bz2 extension is not in fact compressed, it is read as a  plain\n       text  file.  When  input  is  from  a  compressed .gz or .bz2 file, the\n       --line-buffered option is ignored.\n\n\nBINARY FILES\n\n       By default, a file that contains a binary zero byte  within  the  first\n       1024  bytes is identified as a binary file, and is processed specially.\n       However, if the newline type is specified as NUL,  that  is,  the  line\n       terminator is a binary zero, the test for a binary file is not applied.\n       See  the  --binary-files  option for a means of changing the way binary\n       files are handled.\n\n\nBINARY ZEROS IN PATTERNS\n\n       Patterns passed from the command line are strings that  are  terminated\n       by  a  binary zero, so cannot contain internal zeros. However, patterns\n       that are read from a file via the -f option may contain binary zeros.\n\n\nOPTIONS\n\n       The order in which some of the options appear can  affect  the  output.\n       For  example,  both  the  -H and -l options affect the printing of file\n       names. Whichever comes later in the command line will be the  one  that\n       takes  effect.  Similarly,  except  where  noted below, if an option is\n       given twice, the later setting is used. Numerical  values  for  options\n       may  be  followed  by  K  or  M,  to  signify multiplication by 1024 or\n       1024*1024 respectively.\n\n       --        This terminates the list of options. It is useful if the next\n                 item on the command line starts with a hyphen but is  not  an\n                 option.  This  allows for the processing of patterns and file\n                 names that start with hyphens.\n\n       -A number, --after-context=number\n                 Output up to number lines  of  context  after  each  matching\n                 line.  Fewer lines are output if the next match or the end of\n                 the file is reached, or if the  processing  buffer  size  has\n                 been set too small. If file names and/or line numbers are be-\n                 ing output, a hyphen separator is used instead of a colon for\n                 the  context  lines  (the -Z option can be used to change the\n                 file name terminator to a zero byte). A line containing  \"--\"\n                 is  output  between  each  group of lines, unless they are in\n                 fact contiguous in the input file. The value of number is ex-\n                 pected to be relatively small. When -c is  used,  -A  is  ig-\n                 nored.\n\n       -a, --text\n                 Treat  binary  files as text. This is equivalent to --binary-\n                 files=text.\n\n       --allow-lookaround-bsk\n                 PCRE2 now forbids the use of \\K in lookarounds by default, in\n                 line with Perl.  This option  causes  pcre2grep  to  set  the\n                 PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK  option,  which enables this\n                 somewhat dangerous usage.\n\n       -B number, --before-context=number\n                 Output up to number lines of  context  before  each  matching\n                 line.  Fewer  lines  are  output if the previous match or the\n                 start of the file is within number lines, or if the  process-\n                 ing  buffer size has been set too small. If file names and/or\n                 line numbers are being output, a hyphen separator is used in-\n                 stead of a colon for the context lines (the -Z option can  be\n                 used  to  change  the file name terminator to a zero byte). A\n                 line containing \"--\" is output between each group  of  lines,\n                 unless  they  are  in  fact contiguous in the input file. The\n                 value of number is expected to be relatively small.  When  -c\n                 is used, -B is ignored.\n\n       --binary-files=word\n                 Specify  how binary files are to be processed. If the word is\n                 \"binary\" (the default), pattern matching is performed on  bi-\n                 nary  files,  but  the  only  output  is  \"Binary file <name>\n                 matches\" when a match succeeds. If the word is \"text\",  which\n                 is  equivalent  to  the -a or --text option, binary files are\n                 processed in the same way as any other file.  In  this  case,\n                 when  a  match  succeeds,  the  output may be binary garbage,\n                 which can have nasty effects if sent to a  terminal.  If  the\n                 word  is  \"without-match\",  which is equivalent to the -I op-\n                 tion, binary files are not processed at all; they are assumed\n                 not to be of interest and are  skipped  without  causing  any\n                 output or affecting the return code.\n\n       --buffer-size=number\n                 Set  the  parameter that controls how much memory is obtained\n                 at the start of processing for buffering files that are being\n                 scanned. See also --max-buffer-size below.\n\n       -C number, --context=number\n                 Output number lines of context both  before  and  after  each\n                 matching  line.  This is equivalent to setting both -A and -B\n                 to the same value.\n\n       -c, --count\n                 Do not output lines from the files that  are  being  scanned;\n                 instead  output  the  number  of  lines  that would have been\n                 shown, either because they matched, or, if -v is set, because\n                 they failed to match. By default, this count is  exactly  the\n                 same  as the number of lines that would have been output, but\n                 if the -M (multiline) option is used (without -v), there  may\n                 be  more suppressed lines than the count (that is, the number\n                 of matches).\n\n                 If no lines are selected, the number zero is output. If  sev-\n                 eral  files  are being scanned, a count is output for each of\n                 them and the -t option can be used to cause  a  total  to  be\n                 output  at  the end. However, if the --files-with-matches op-\n                 tion is also used, only those files whose counts are  greater\n                 than zero are listed. When -c is used, the -A, -B, and -C op-\n                 tions are ignored.\n\n       --colour, --color\n                 If this option is given without any data, it is equivalent to\n                 \"--colour=auto\".   If  data  is required, it must be given in\n                 the same shell item, separated by an equals sign.\n\n       --colour=value, --color=value\n                 This option specifies under what circumstances the parts of a\n                 line that matched a pattern should be coloured in the output.\n                 It is ignored if --file-offsets, --line-offsets, or  --output\n                 is set. By default, output is not coloured. The value for the\n                 --colour  option  (which  is  optional,  see  above)  may  be\n                 \"never\", \"always\", or \"auto\". In the latter  case,  colouring\n                 happens  only if the standard output is connected to a termi-\n                 nal.  More resources are used when colouring is enabled,  be-\n                 cause  pcre2grep  has to search for all possible matches in a\n                 line, not just one, in order to colour them all.\n\n                 The colour that is used can be specified by  setting  one  of\n                 the  environment variables PCRE2GREP_COLOUR, PCRE2GREP_COLOR,\n                 PCREGREP_COLOUR, or PCREGREP_COLOR, which are checked in that\n                 order.  If  none  of  these  are  set,  pcre2grep  looks  for\n                 GREP_COLORS  or  GREP_COLOR (in that order). The value of the\n                 variable should be a string of two numbers,  separated  by  a\n                 semicolon,  except  in  the  case  of GREP_COLORS, which must\n                 start with \"ms=\" or \"mt=\" followed by two semicolon-separated\n                 colours, terminated by the end of the string or by  a  colon.\n                 If  GREP_COLORS  does not start with \"ms=\" or \"mt=\" it is ig-\n                 nored, and GREP_COLOR is checked.\n\n                 If the string obtained from one of the above  variables  con-\n                 tains any characters other than semicolon or digits, the set-\n                 ting is ignored and the default colour is used. The string is\n                 copied directly into the control string for setting colour on\n                 a  terminal,  so it is your responsibility to ensure that the\n                 values make sense. If no  relevant  environment  variable  is\n                 set, the default is \"1;31\", which gives red.\n\n       -D action, --devices=action\n                 If  an  input path is not a regular file or a directory, \"ac-\n                 tion\" specifies how it is to be processed. Valid  values  are\n                 \"read\" (the default) or \"skip\" (silently skip the path).\n\n       -d action, --directories=action\n                 If an input path is a directory, \"action\" specifies how it is\n                 to  be  processed.   Valid  values are \"read\" (the default in\n                 non-Windows environments, for compatibility with  GNU  grep),\n                 \"recurse\"  (equivalent to the -r option), or \"skip\" (silently\n                 skip the path, the default in Windows environments).  In  the\n                 \"read\"  case,  directories  are read as if they were ordinary\n                 files. In some operating systems the effect of reading a  di-\n                 rectory  like  this is an immediate end-of-file; in others it\n                 may provoke an error.\n\n       --depth-limit=number\n                 See --match-limit below.\n\n       -E, --case-restrict\n                 When case distinctions are being ignored in Unicode mode, two\n                 ASCII letters (K and S) will by default match Unicode charac-\n                 ters U+212A (Kelvin sign) and U+017F (long  S)  respectively,\n                 as well as their lower case ASCII counterparts. When this op-\n                 tion  is  set,  case equivalences are restricted such that no\n                 ASCII character  matches  a  non-ASCII  character,  and  vice\n                 versa.\n\n       -e pattern, --regex=pattern, --regexp=pattern\n                 Specify a pattern to be matched. This option can be used mul-\n                 tiple times in order to specify several patterns. It can also\n                 be  used  as a way of specifying a single pattern that starts\n                 with a hyphen. When -e is used, no argument pattern is  taken\n                 from  the  command  line;  all  arguments are treated as file\n                 names. There is no limit to the number of patterns. They  are\n                 applied to each line in the order in which they are defined.\n\n                 If  -f is used with -e, the command line patterns are matched\n                 first, followed by the patterns from the file(s), independent\n                 of the order in which these options are specified.\n\n       --exclude=pattern\n                 Files (but not directories) whose names match the pattern are\n                 skipped without being processed. This applies to  all  files,\n                 whether  listed  on  the  command line, obtained from --file-\n                 list, or by scanning a directory. The pattern is a PCRE2 reg-\n                 ular expression, and is matched against the  final  component\n                 of the file name, not the entire path. The -F, -w, and -x op-\n                 tions  do  not apply to this pattern. The option may be given\n                 any number of times in order to specify multiple patterns. If\n                 a file name matches both an --include and an  --exclude  pat-\n                 tern, it is excluded. There is no short form for this option.\n\n       --exclude-from=filename\n                 Treat  each  non-empty  line  of  the file as the data for an\n                 --exclude option. What constitutes a newline when reading the\n                 file is the operating system's default. The --newline  option\n                 has  no  effect on this option. This option may be given more\n                 than once in order to specify a number of files to read.\n\n       --exclude-dir=pattern\n                 Directories whose names match the pattern are skipped without\n                 being processed, whatever the setting of the --recursive  op-\n                 tion.  This applies to all directories, whether listed on the\n                 command line, obtained from --file-list,  or  by  scanning  a\n                 parent  directory. The pattern is a PCRE2 regular expression,\n                 and is matched against the final component of  the  directory\n                 name,  not the entire path. The -F, -w, and -x options do not\n                 apply to this pattern. The option may be given any number  of\n                 times  in order to specify more than one pattern. If a direc-\n                 tory matches both --include-dir and --exclude-dir, it is  ex-\n                 cluded. There is no short form for this option.\n\n       -F, --fixed-strings\n                 Interpret  each  data-matching  pattern  as  a  list of fixed\n                 strings, separated by newlines, instead of as a  regular  ex-\n                 pression. What constitutes a newline for this purpose is con-\n                 trolled by the --newline option. The -w (match as a word) and\n                 -x  (match whole line) options can be used with -F.  They ap-\n                 ply to each of the fixed strings. A line is selected  if  any\n                 of the fixed strings are found in it (subject to -w or -x, if\n                 present).  This  option applies only to the patterns that are\n                 matched against the contents of files; it does not  apply  to\n                 patterns  specified  by any of the --include or --exclude op-\n                 tions.\n\n       -f filename, --file=filename\n                 Read patterns from the file, one per line.  As  is  the  case\n                 with  patterns  on  the command line, no delimiters should be\n                 used. What constitutes a newline when reading the file is the\n                 operating system's default interpretation of \\n.  The  --new-\n                 line  option  has  no  effect  on this option. Trailing white\n                 space is removed from each line, and blank lines are  ignored\n                 unless  the  --posix-pattern-file option is also provided. An\n                 empty file contains no patterns and therefore  matches  noth-\n                 ing. Patterns read from a file in this way may contain binary\n                 zeros, which are treated as ordinary character literals.\n\n                 If  this  option  is  given more than once, all the specified\n                 files are read. A data line is output if any of the  patterns\n                 match  it.  A  file  name can be given as \"-\" to refer to the\n                 standard input. When -f is used, patterns  specified  on  the\n                 command  line  using -e may also be present; they are matched\n                 before the file's patterns. However, no pattern is taken from\n                 the command line; all arguments are treated as the  names  of\n                 paths to be searched.\n\n       --file-list=filename\n                 Read  a  list  of  files  and/or  directories  that are to be\n                 scanned from the given file, one per line. What constitutes a\n                 newline when reading the file is the operating  system's  de-\n                 fault.  Trailing  white  space is removed from each line, and\n                 blank lines are ignored. These paths are processed before any\n                 that are listed on the command line. The  file  name  can  be\n                 given  as  \"-\"  to refer to the standard input. If --file and\n                 --file-list are both specified  as  \"-\",  patterns  are  read\n                 first.  This is useful only when the standard input is a ter-\n                 minal, from which further lines (the list of  files)  can  be\n                 read after an end-of-file indication. If this option is given\n                 more than once, all the specified files are read.\n\n       --file-offsets\n                 Instead  of  showing lines or parts of lines that match, show\n                 each match as an offset from the start  of  the  file  and  a\n                 length,  separated  by a comma. In this mode, --colour has no\n                 effect, and no context is shown. That is, the -A, -B, and  -C\n                 options  are  ignored.  If  there is more than one match in a\n                 line, each of them is shown separately. This option is  mutu-\n                 ally  exclusive  with  --output,  --line-offsets, and --only-\n                 matching.\n\n       --group-separator=text\n                 Output this text string instead of two hyphens between groups\n                 of lines when -A, -B, or -C is in use. See  also  --no-group-\n                 separator.\n\n       -H, --with-filename\n                 Force  the  inclusion of the file name at the start of output\n                 lines when searching a single file. The file name is not nor-\n                 mally shown in this case.  By default,  for  matching  lines,\n                 the  file  name  is followed by a colon; for context lines, a\n                 hyphen separator is used. The -Z option can be used to change\n                 the terminator to a zero byte. If a line number is also being\n                 output, it follows the file name. When the -M option causes a\n                 pattern to match more than one line, only the first  is  pre-\n                 ceded  by  the  file name. This option overrides any previous\n                 -h, -l, or -L options.\n\n       -h, --no-filename\n                 Suppress the output file names when searching multiple files.\n                 File  names  are  normally  shown  when  multiple  files  are\n                 searched.  By  default,  for matching lines, the file name is\n                 followed by a colon; for context lines, a hyphen separator is\n                 used. The -Z option can be used to change the terminator to a\n                 zero byte. If a line number is also being output, it  follows\n                 the file name.  This option overrides any previous -H, -L, or\n                 -l options.\n\n       --heap-limit=number\n                 See --match-limit below.\n\n       --help    Output  a  help  message, giving brief details of the command\n                 options and file type support, and then exit.  Anything  else\n                 on the command line is ignored.\n\n       -I        Ignore   binary   files.  This  is  equivalent  to  --binary-\n                 files=without-match.\n\n       -i, --ignore-case\n                 Ignore upper/lower case distinctions when  pattern  matching.\n                 This applies when matching path names for inclusion or exclu-\n                 sion as well as when matching lines in files.\n\n       --include=pattern\n                 If  any --include patterns are specified, the only files that\n                 are processed are those whose names match one of the patterns\n                 and do not match an --exclude pattern. This option  does  not\n                 affect  directories,  but  it  applies  to all files, whether\n                 listed on the command line, obtained from --file-list, or  by\n                 scanning  a directory. The pattern is a PCRE2 regular expres-\n                 sion, and is matched against the final component of the  file\n                 name,  not the entire path. The -F, -w, and -x options do not\n                 apply to this pattern. The option may be given any number  of\n                 times.  If a file name matches both an --include and an --ex-\n                 clude pattern, it is excluded.  There is no  short  form  for\n                 this option.\n\n       --include-from=filename\n                 Treat  each  non-empty  line  of  the file as the data for an\n                 --include option. What constitutes a newline for this purpose\n                 is the operating system's default. The --newline  option  has\n                 no effect on this option. This option may be given any number\n                 of times; all the files are read.\n\n       --include-dir=pattern\n                 If  any --include-dir patterns are specified, the only direc-\n                 tories that are processed are those whose names match one  of\n                 the  patterns and do not match an --exclude-dir pattern. This\n                 applies to all directories, whether  listed  on  the  command\n                 line,  obtained from --file-list, or by scanning a parent di-\n                 rectory. The pattern is a PCRE2 regular  expression,  and  is\n                 matched  against  the  final component of the directory name,\n                 not the entire path. The -F, -w, and -x options do not  apply\n                 to this pattern. The option may be given any number of times.\n                 If  a directory matches both --include-dir and --exclude-dir,\n                 it is excluded. There is no short form for this option.\n\n       -L, --files-without-match\n                 Instead of outputting lines from the files, just  output  the\n                 names  of  the files that do not contain any lines that would\n                 have been output. Each file name is output once, on  a  sepa-\n                 rate  line  by default, but if the -Z option is set, they are\n                 separated by zero bytes  instead  of  newlines.  This  option\n                 overrides any previous -H, -h, or -l options.\n\n       -l, --files-with-matches\n                 Instead  of  outputting lines from the files, just output the\n                 names of the files containing lines that would have been out-\n                 put. Each file name is output once, on a separate  line,  but\n                 if the -Z option is set, they are separated by zero bytes in-\n                 stead  of  newlines.  Searching  normally  stops as soon as a\n                 matching line is found in a file. However, if the -c  (count)\n                 option  is  also  used, matching continues in order to obtain\n                 the correct count, and those files that  have  at  least  one\n                 match  are  listed along with their counts. Using this option\n                 with -c is a way of suppressing the listing of files with  no\n                 matches that occurs with -c on its own. This option overrides\n                 any previous -H, -h, or -L options.\n\n       --label=name\n                 This option supplies a name to be used for the standard input\n                 when file names are being output. If not supplied, \"(standard\n                 input)\" is used. There is no short form for this option.\n\n       --line-buffered\n                 When  this  option is given, non-compressed input is read and\n                 processed line by line, and the output is flushed after  each\n                 write.  By  default,  input  is  read in large chunks, unless\n                 pcre2grep can determine that it is reading from  a  terminal,\n                 which is currently possible only in Unix-like environments or\n                 Windows. Output to terminal is normally automatically flushed\n                 by  the  operating system. This option can be useful when the\n                 input or output is attached to a pipe and  you  do  not  want\n                 pcre2grep  to  buffer up large amounts of data.  However, its\n                 use will affect performance, and the  -M  (multiline)  option\n                 ceases  to  work. When input is from a compressed .gz or .bz2\n                 file, --line-buffered is ignored.\n\n       --line-offsets\n                 Instead of showing lines or parts of lines that  match,  show\n                 each match as a line number, the offset from the start of the\n                 line,  and a length. The line number is terminated by a colon\n                 (as usual; see the -n option), and the offset and length  are\n                 separated  by  a comma. In this mode, --colour has no effect,\n                 and no context is shown. That is, the -A, -B, and -C  options\n                 are  ignored. If there is more than one match in a line, each\n                 of them is shown separately. This option is  mutually  exclu-\n                 sive with --output, --file-offsets, and --only-matching.\n\n       --locale=locale-name\n                 This  option specifies a locale to be used for pattern match-\n                 ing. It overrides the value in the LC_ALL or  LC_CTYPE  envi-\n                 ronment  variables.  If no locale is specified, the PCRE2 li-\n                 brary's default (usually the \"C\" locale) is used. There is no\n                 short form for this option.\n\n       -M, --multiline\n                 Allow patterns to match more than one line. When this  option\n                 is  set, the PCRE2 library is called in \"multiline\" mode, and\n                 a match is allowed to continue past the end  of  the  initial\n                 line and onto one or more subsequent lines.\n\n                 Patterns  used  with  -M may usefully contain literal newline\n                 characters and internal occurrences of ^  and  $  characters,\n                 because  in  multiline  mode these can match at internal new-\n                 lines. Because pcre2grep is scanning multiple lines,  the  \\Z\n                 and  \\z  assertions match only at the end of the last line in\n                 the file.  The \\A assertion matches at the start of the first\n                 line of a match. This can be any line in the file; it is  not\n                 anchored to the first line.\n\n                 The  output  for  a successful match may consist of more than\n                 one line. The first line is  the  line  in  which  the  match\n                 started,  and  the  last  line is the line in which the match\n                 ended. If the matched string ends with  a  newline  sequence,\n                 the  output  ends at the end of that line. If -v is set, none\n                 of the lines in a multi-line match are output. Once  a  match\n                 has  been  handled, scanning restarts at the beginning of the\n                 line after the one in which the match ended.\n\n                 The newline sequence that separates multiple  lines  must  be\n                 matched  as  part  of  the  pattern. For example, to find the\n                 phrase \"regular expression\" in a file where  \"regular\"  might\n                 be  at the end of a line and \"expression\" at the start of the\n                 next line, you could use this command:\n\n                   pcre2grep -M 'regular\\s+expression' <file>\n\n                 The \\s escape sequence matches any white space character, in-\n                 cluding newlines, and is followed by + so as to match  trail-\n                 ing  white  space  on the first line as well as possibly han-\n                 dling a two-character newline sequence.\n\n                 There is a limit to the number of lines that can be  matched,\n                 imposed  by  the way that pcre2grep buffers the input file as\n                 it scans it. With a  sufficiently  large  processing  buffer,\n                 this should not be a problem.\n\n                 The  -M  option does not work when input is read line by line\n                 (see --line-buffered.)\n\n       -m number, --max-count=number\n                 Stop processing after finding number matching lines, or  non-\n                 matching  lines if -v is also set. Any trailing context lines\n                 are output after the final match.  In  multiline  mode,  each\n                 multiline  match counts as just one line for this purpose. If\n                 this limit is reached when reading the standard input from  a\n                 regular file, the file is left positioned just after the last\n                 matching  line.   If -c is also set, the count that is output\n                 is never greater than number. This option has  no  effect  if\n                 used with -L, -l, or -q, or when just checking for a match in\n                 a binary file.\n\n       --match-limit=number\n                 Processing  some  regular expression patterns may take a very\n                 long time to search for all possible matching strings. Others\n                 may require a very large amount of memory.  There  are  three\n                 options that set resource limits for matching.\n\n                 The --match-limit option provides a means of limiting comput-\n                 ing  resource usage when processing patterns that are not go-\n                 ing to match, but which have a very large number of possibil-\n                 ities in their search trees. The classic example is a pattern\n                 that uses nested unlimited repeats. Internally, PCRE2  has  a\n                 counter  that  is  incremented each time around its main pro-\n                 cessing loop. If the value set by --match-limit  is  reached,\n                 an error occurs.\n\n                 The  --heap-limit  option specifies, as a number of kibibytes\n                 (units of 1024 bytes), the maximum amount of heap memory that\n                 may be used for matching.\n\n                 The --depth-limit option limits the  depth  of  nested  back-\n                 tracking points, which indirectly limits the amount of memory\n                 that is used. The amount of memory needed for each backtrack-\n                 ing  point  depends on the number of capturing parentheses in\n                 the pattern, so the amount of memory that is used before this\n                 limit acts varies from pattern to pattern. This limit  is  of\n                 use only if it is set smaller than --match-limit.\n\n                 There  are no short forms for these options. The default lim-\n                 its can be set when the PCRE2 library is  compiled;  if  they\n                 are  not specified, the defaults are very large and so effec-\n                 tively unlimited.\n\n       --max-buffer-size=number\n                 This limits the expansion of  the  processing  buffer,  whose\n                 initial  size can be set by --buffer-size. The maximum buffer\n                 size is silently forced to be no smaller  than  the  starting\n                 buffer size.\n\n       -N newline-type, --newline=newline-type\n                 Six different conventions for indicating the ends of lines in\n                 scanned files are supported. For example:\n\n                   pcre2grep -N CRLF 'some pattern' <file>\n\n                 The  newline  type may be specified in upper, lower, or mixed\n                 case. If the newline type is NUL, lines are separated by  bi-\n                 nary  zero characters. The other types are the single-charac-\n                 ter sequences CR (carriage return)  and  LF  (linefeed),  the\n                 two-character  sequence CRLF, an \"anycrlf\" type, which recog-\n                 nizes any of the preceding three types, and  an  \"any\"  type,\n                 for  which any Unicode line ending sequence is assumed to end\n                 a line. The Unicode sequences are the three  just  mentioned,\n                 plus  VT  (vertical tab, U+000B), FF (form feed, U+000C), NEL\n                 (next line, U+0085), LS  (line  separator,  U+2028),  and  PS\n                 (paragraph separator, U+2029).\n\n                 When  the  PCRE2  library is built, a default line-ending se-\n                 quence is specified.  This is normally the standard  sequence\n                 for  the operating system. Unless otherwise specified by this\n                 option, pcre2grep uses the library's default.\n\n                 This option makes it possible to use pcre2grep to scan  files\n                 that have come from other environments without having to mod-\n                 ify  their  line  endings.  If the data that is being scanned\n                 does not agree  with  the  convention  set  by  this  option,\n                 pcre2grep  may  behave in strange ways. Note that this option\n                 does not apply to files specified by the -f,  --exclude-from,\n                 or  --include-from options, which are expected to use the op-\n                 erating system's standard newline sequence.\n\n       -n, --line-number\n                 Precede each output line by its line number in the file, fol-\n                 lowed by a colon for matching lines or a hyphen  for  context\n                 lines. If the file name is also being output, it precedes the\n                 line  number.  When  the  -M option causes a pattern to match\n                 more than one line, only the first is preceded  by  its  line\n                 number. This option is forced if --line-offsets is used.\n\n       --no-group-separator\n                 Do  not  output  a separator between groups of lines when -A,\n                 -B, or -C is in use. The default is to output a line contain-\n                 ing two hyphens. See also --group-separator.\n\n       --no-jit  If the PCRE2 library is built with support  for  just-in-time\n                 compiling (which speeds up matching), pcre2grep automatically\n                 makes use of this, unless it was explicitly disabled at build\n                 time.  This  option  can be used to disable the use of JIT at\n                 run time. It is provided for testing and working around prob-\n                 lems.  It should never be needed in normal use.\n\n       -O text, --output=text\n                 When there is a match, instead of outputting  the  line  that\n                 matched,  output just the text specified in this option, fol-\n                 lowed by an operating-system standard newline. In this  mode,\n                 --colour  has  no  effect, and no context is shown.  That is,\n                 the -A, -B, and -C options are ignored. The --newline  option\n                 has  no  effect  on  this option, which is mutually exclusive\n                 with  --only-matching,  --file-offsets,  and  --line-offsets.\n                 However,  like  --only-matching,  if  there  is more than one\n                 match in a line, each of them causes a line of output.\n\n                 Escape sequences starting with a dollar character may be used\n                 to insert the contents of the matched part of the line and/or\n                 captured substrings into the text.\n\n                 $<digits> or ${<digits>} is replaced  by  the  captured  sub-\n                 string  of  the  given  decimal number; $& (or the legacy $0)\n                 substitutes the whole match. If the number  is  greater  than\n                 the  number of capturing substrings, or if the capture is un-\n                 set, the replacement is empty.\n\n                 $a is replaced by bell; $b by backspace; $e by escape; $f  by\n                 form  feed;  $n by newline; $r by carriage return; $t by tab;\n                 $v by vertical tab.\n\n                 $o<digits> or $o{<digits>} is replaced by the character whose\n                 code point is the given octal number. In the first  form,  up\n                 to  three  octal  digits are processed.  When more digits are\n                 needed in Unicode mode to specify a wide character, the  sec-\n                 ond form must be used.\n\n                 $x<digits>  or $x{<digits>} is replaced by the character rep-\n                 resented by the given hexadecimal number. In the first  form,\n                 up  to two hexadecimal digits are processed. When more digits\n                 are needed in Unicode mode to specify a wide  character,  the\n                 second form must be used.\n\n                 Any  other character is substituted by itself. In particular,\n                 $$ is replaced by a single dollar.\n\n       -o, --only-matching\n                 Show only the part of the line that matched a pattern instead\n                 of the whole line. In this mode, no context  is  shown.  That\n                 is,  the -A, -B, and -C options are ignored. If there is more\n                 than one match in a line, each of them is  shown  separately,\n                 on  a separate line of output. If -o is combined with -v (in-\n                 vert the sense of the match to find non-matching  lines),  no\n                 output  is  generated,  but  the return code is set appropri-\n                 ately. If the matched portion of the line is  empty,  nothing\n                 is  output  unless  the  file  name  or line number are being\n                 printed, in which case they are shown on an  otherwise  empty\n                 line.  This  option  is  mutually  exclusive  with  --output,\n                 --file-offsets and --line-offsets.\n\n       -onumber, --only-matching=number\n                 Show only the part of the line  that  matched  the  capturing\n                 parentheses of the given number. Up to 50 capturing parenthe-\n                 ses  are  supported by default. This limit can be changed via\n                 the --om-capture option. A pattern may contain any number  of\n                 capturing  parentheses, but only those whose number is within\n                 the limit can be accessed by -o. An error occurs if the  num-\n                 ber specified by -o is greater than the limit.\n\n                 -o0 is the same as -o without a number. Because these options\n                 can  be given without an argument (see above), if an argument\n                 is present, it must be given in the same shell item, for  ex-\n                 ample,  -o3  or --only-matching=2. The comments given for the\n                 non-argument case above also apply to  this  option.  If  the\n                 specified  capturing parentheses do not exist in the pattern,\n                 or were not set in the match, nothing is  output  unless  the\n                 file name or line number are being output.\n\n                 If  this  option is given multiple times, multiple substrings\n                 are output for each match,  in  the  order  the  options  are\n                 given,  and  all on one line. For example, -o3 -o1 -o3 causes\n                 the substrings matched by capturing parentheses 3 and  1  and\n                 then  3 again to be output. By default, there is no separator\n                 (but see the next but one option).\n\n       --om-capture=number\n                 Set the number of capturing parentheses that can be  accessed\n                 by -o. The default is 50.\n\n       --om-separator=text\n                 Specify  a  separating string for multiple occurrences of -o.\n                 The default is an empty string. Separating strings are  never\n                 coloured.\n\n       -P, --no-ucp\n                 Starting  from release 10.43, when UTF/Unicode mode is speci-\n                 fied with -u or -U, the PCRE2_UCP option is used by  default.\n                 This means that the POSIX classes in patterns match more than\n                 just  ASCII  characters.  For  example, [:digit:] matches any\n                 Unicode  decimal  digit.  The  --no-ucp   option   suppresses\n                 PCRE2_UCP,  thus restricting the POSIX classes to ASCII char-\n                 acters, as was the case in earlier releases. Note that  there\n                 are  now  more  fine-grained  option settings within patterns\n                 that affect individual classes.  For  example,  when  in  UCP\n                 mode, the sequence (?aP) restricts [:word:] to ASCII letters,\n                 while allowing \\w to match Unicode letters and digits.\n\n       --posix-pattern-file\n                 When  patterns  are  provided with the -f option, do not trim\n                 trailing spaces or ignore empty lines in a similar  way  than\n                 other grep tools. To keep the behaviour consistent with older\n                 versions,  if  the  pattern read was terminated with CRLF (as\n                 character literals) then both characters won't be included as\n                 part of it, so if you really need to have pattern  ending  in\n                 '\\r',  use  a  escape  sequence  or provide it by a different\n                 method.\n\n       -q, --quiet\n                 Work quietly, that is, display nothing except error messages.\n                 The exit status indicates whether or  not  any  matches  were\n                 found.\n\n       -r, --recursive\n                 If  any given path is a directory, recursively scan the files\n                 it contains, taking note of any --include and --exclude  set-\n                 tings.  By  default, a directory is read as a normal file; in\n                 some operating systems this gives an  immediate  end-of-file.\n                 This  option is a shorthand for setting the -d option to \"re-\n                 curse\".\n\n       --recursion-limit=number\n                 This is an obsolete synonym for --depth-limit.  See  --match-\n                 limit above for details.\n\n       -s, --no-messages\n                 Suppress  error  messages  about  non-existent  or unreadable\n                 files. Such files are quietly skipped.  However,  the  return\n                 code is still 2, even if matches were found in other files.\n\n       -t, --total-count\n                 This  option  is  useful when scanning more than one file. If\n                 used on its own, -t suppresses all output except for a  grand\n                 total  number  of matching lines (or non-matching lines if -v\n                 is used) in all the files. If -t is used with -c, a grand to-\n                 tal is output except when the previous  output  is  just  one\n                 line.  In  other words, it is not output when just one file's\n                 count is listed. If file names are being  output,  the  grand\n                 total  is preceded by \"TOTAL:\". Otherwise, it appears as just\n                 another number. The -t option is ignored when  used  with  -L\n                 (list  files  without matches), because the grand total would\n                 always be zero.\n\n       -u, --utf Operate in UTF/Unicode mode. This option is available only if\n                 PCRE2 has been compiled with UTF-8 support. All patterns (in-\n                 cluding those for any --exclude and  --include  options)  and\n                 all  lines  that  are  scanned must be valid strings of UTF-8\n                 characters. If an invalid UTF-8 string is encountered, an er-\n                 ror occurs.\n\n       -U, --utf-allow-invalid\n                 As --utf, but in addition subject lines may  contain  invalid\n                 UTF-8  code  unit sequences. These can never form part of any\n                 pattern match. Patterns themselves, however,  must  still  be\n                 valid UTF-8 strings. This facility allows valid UTF-8 strings\n                 to be sought within arbitrary byte sequences in executable or\n                 other  binary  files. For more details about matching in non-\n                 valid UTF-8 strings, see the pcre2unicode(3) documentation.\n\n       -V, --version\n                 Write the version numbers of pcre2grep and the PCRE2  library\n                 to  the  standard  output and then exit. Anything else on the\n                 command line is ignored.\n\n       -v, --invert-match\n                 Invert the sense of the match, so that  lines  which  do  not\n                 match  any  of the patterns are the ones that are found. When\n                 this option is  set,  options  such  as  --only-matching  and\n                 --output,  which specify parts of a match that are to be out-\n                 put, are ignored.\n\n       -w, --word-regex, --word-regexp\n                 Force the patterns only to match \"words\". That is, there must\n                 be a word boundary at the  start  and  end  of  each  matched\n                 string.  This is equivalent to having \"\\b(?:\" at the start of\n                 each pattern, and \")\\b\" at the end. This option applies  only\n                 to  the  patterns  that  are  matched against the contents of\n                 files; it does not apply to patterns specified by any of  the\n                 --include or --exclude options.\n\n       -x, --line-regex, --line-regexp\n                 Force  the  patterns to start matching only at the beginnings\n                 of lines, and in  addition,  require  them  to  match  entire\n                 lines. In multiline mode the match may be more than one line.\n                 This is equivalent to having \"^(?:\" at the start of each pat-\n                 tern  and  \")$\"  at  the end. This option applies only to the\n                 patterns that are matched against the contents of  files;  it\n                 does  not apply to patterns specified by any of the --include\n                 or --exclude options.\n\n       -Z, --null\n                 Terminate files names in the regular output with a zero  byte\n                 (the  NUL  character)  instead of what would normally appear.\n                 This is useful when file  names  contain  unusual  characters\n                 such  as  colons,  hyphens, or even newlines. The option does\n                 not apply to file names in error messages.\n\n\nENVIRONMENT VARIABLES\n\n       The environment variables LC_ALL and LC_CTYPE are examined, in that or-\n       der, for a locale. The first one that is set is used. This can be over-\n       ridden by the --locale option. If no locale is set, the PCRE2 library's\n       default (usually the \"C\" locale) is used.\n\n\nNEWLINES\n\n       The -N (--newline) option allows pcre2grep to scan files  with  newline\n       conventions  that differ from the default. This option affects only the\n       way scanned files are processed. It does not affect the  interpretation\n       of  files  specified  by  the -f, --file-list, --exclude-from, or --in-\n       clude-from options.\n\n       Any parts of the scanned input files that are written to  the  standard\n       output  are copied with whatever newline sequences they have in the in-\n       put. However, if the final line of a file is output, and  it  does  not\n       end  with  a newline sequence, a newline sequence is added. If the new-\n       line setting is CR, LF, CRLF or NUL, that line ending  is  output;  for\n       the other settings (ANYCRLF or ANY) a single NL is used.\n\n       The  newline  setting does not affect the way in which pcre2grep writes\n       newlines in informational messages to the  standard  output  and  error\n       streams.   Under  Windows,  the standard output is set to be binary, so\n       that \"\\r\\n\" at the ends of output lines that are copied from the  input\n       is  not converted to \"\\r\\r\\n\" by the C I/O library. This means that any\n       messages written to the standard output must end with \"\\r\\n\".  For  all\n       other  operating  systems,  and  for all messages to the standard error\n       stream, \"\\n\" is used.\n\n\nOPTIONS COMPATIBILITY WITH GNU GREP\n\n       Many of the short and long forms of pcre2grep's options are the same as\n       in the GNU grep program. Any long option of the form --xxx-regexp  (GNU\n       terminology)  is  also  available  as  --xxx-regex (PCRE2 terminology).\n       However, the --case-restrict, --depth-limit, -E,  --file-list,  --file-\n       offsets,   --heap-limit,   --include-dir,   --line-offsets,   --locale,\n       --match-limit, -M, --multiline, -N, --newline,  --no-ucp,  --om-separa-\n       tor,  --output,  -P, -u, --utf, -U, and --utf-allow-invalid options are\n       specific to pcre2grep, as is the use of the --only-matching option with\n       a capturing parentheses number.\n\n       Although most of the common options work the same way, a few  are  dif-\n       ferent  in pcre2grep. For example, the --include option's argument is a\n       glob for GNU grep, but in pcre2grep it is a regular expression to which\n       the -i option applies. If both the -c and -l  options  are  given,  GNU\n       grep  lists  only  file  names, without counts, but pcre2grep gives the\n       counts as well.\n\n\nOPTIONS WITH DATA\n\n       There are four different ways in which an option with data can be spec-\n       ified.  If a short form option is used, the  data  may  follow  immedi-\n       ately, or (with one exception) in the next command line item. For exam-\n       ple:\n\n         -f/some/file\n         -f /some/file\n\n       The  exception is the -o option, which may appear with or without data.\n       Because of this, if data is present, it must follow immediately in  the\n       same item, for example -o3.\n\n       If  a long form option is used, the data may appear in the same command\n       line item, separated by an equals character, or (with  two  exceptions)\n       it may appear in the next command line item. For example:\n\n         --file=/some/file\n         --file /some/file\n\n       Note,  however, that if you want to supply a file name beginning with ~\n       as data in a shell command, and have the shell expand ~ to a  home  di-\n       rectory,  you  must separate the file name from the option, because the\n       shell does not treat ~ specially unless it is at the start of an item.\n\n       The exceptions to the above are the --colour (or --color)  and  --only-\n       matching  options,  for which the data is optional. If one of these op-\n       tions does have data, it must be given in  the  first  form,  using  an\n       equals character. Otherwise pcre2grep will assume that it has no data.\n\n\nUSING PCRE2'S CALLOUT FACILITY\n\n       pcre2grep  has,  by  default,  support for calling external programs or\n       scripts or echoing specific strings during matching by  making  use  of\n       PCRE2's  callout  facility.  However, this support can be completely or\n       partially disabled when pcre2grep is built. You can  find  out  whether\n       your  binary has support for callouts by running it with the --help op-\n       tion. If callout support is completely disabled, callouts  in  patterns\n       are  forbidden  by  pcre2grep.   If the facility is partially disabled,\n       calling external programs is not supported, and callouts  that  request\n       it are ignored.\n\n       A  callout  in a PCRE2 pattern is of the form (?C<arg>) where the argu-\n       ment is either a number or a quoted string (see the pcre2callout  docu-\n       mentation  for  details).  Numbered  callouts are ignored by pcre2grep;\n       only callouts with string arguments are useful.\n\n   Echoing a specific string\n\n       Starting the callout string with a pipe character  invokes  an  echoing\n       facility that avoids calling an external program or script. This facil-\n       ity  is  always  available,  provided that callouts were not completely\n       disabled when pcre2grep was built. The rest of the  callout  string  is\n       processed  as  a zero-terminated string, which means it should not con-\n       tain any internal binary zeros. It is written  to  the  output,  having\n       first  been  passed through the same escape processing as text from the\n       --output (-O) option (see above). However, $0 or $& cannot be  used  to\n       insert  a matched substring because the match is still in progress. In-\n       stead, the single character '0' is inserted.  Any syntax errors in  the\n       string (for example, a dollar not followed by another character) causes\n       the callout to be ignored. No terminator is added to the output string,\n       so  if you want a newline, you must include it explicitly using the es-\n       cape $n. For example:\n\n         pcre2grep '(.)(..(.))(?C\"|[$1] [$2] [$3]$n\")' <some file>\n\n       Matching continues normally after the string is output. If you want  to\n       see  only  the  callout output but not any output from an actual match,\n       you should end the pattern with (*FAIL).\n\n   Calling external programs or scripts\n\n       This facility can be independently disabled when pcre2grep is built. It\n       is supported for Windows, where a call to _spawnvp() is used, for  VMS,\n       where  lib$spawn()  is  used,  and  for any Unix-like environment where\n       fork() and execv() are available.\n\n       If the callout string does not start with a pipe (vertical bar) charac-\n       ter, it is parsed into a list of substrings separated by  pipe  charac-\n       ters.  The first substring must be an executable name, with the follow-\n       ing substrings specifying arguments:\n\n         executable_name|arg1|arg2|...\n\n       Any substring (including the executable name) may  contain  escape  se-\n       quences  started  by  a dollar character. These are the same as for the\n       --output (-O) option documented above, except that $0 or $& cannot  in-\n       sert  the  matched  string  because the match is still in progress. In-\n       stead, the character '0' is inserted. If you need a literal  dollar  or\n       pipe  character in any substring, use $$ or $| respectively. Here is an\n       example:\n\n         echo -e \"abcde\\n12345\" | pcre2grep \\\n           '(?x)(.)(..(.))\n           (?C\"/bin/echo|Arg1: [$1] [$2] [$3]|Arg2: $|${1}$| ($4)\")()' -\n\n         Output:\n\n           Arg1: [a] [bcd] [d] Arg2: |a| ()\n           abcde\n           Arg1: [1] [234] [4] Arg2: |1| ()\n           12345\n\n       The parameters for the system call that is used to run the  program  or\n       script are zero-terminated strings. This means that binary zero charac-\n       ters  in the callout argument will cause premature termination of their\n       substrings, and therefore should not be present. Any syntax  errors  in\n       the  string  (for  example, a dollar not followed by another character)\n       causes the callout to be ignored.  If running the program fails for any\n       reason (including the non-existence of the executable), a local  match-\n       ing failure occurs and the matcher backtracks in the normal way.\n\n\nMATCHING ERRORS\n\n       It  is  possible  to supply a regular expression that takes a very long\n       time to fail to match certain lines.  Such  patterns  normally  involve\n       nested  indefinite repeats, for example: (a+)*\\d when matched against a\n       line of a's with no final digit. The PCRE2 matching function has a  re-\n       source  limit  that  causes it to abort in these circumstances. If this\n       happens, pcre2grep outputs an error message and the  line  that  caused\n       the  problem  to  the  standard error stream. If there are more than 20\n       such errors, pcre2grep gives up.\n\n       The --match-limit option of pcre2grep can be used to  set  the  overall\n       resource  limit.  There are also other limits that affect the amount of\n       memory used during matching; see the  discussion  of  --heap-limit  and\n       --depth-limit above.\n\n\nDIAGNOSTICS\n\n       Exit status is 0 if any matches were found, 1 if no matches were found,\n       and  2  for syntax errors, overlong lines, non-existent or inaccessible\n       files (even if matches were found in other files) or too many  matching\n       errors. Using the -s option to suppress error messages about inaccessi-\n       ble files does not affect the return code.\n\n       When   run  under  VMS,  the  return  code  is  placed  in  the  symbol\n       PCRE2GREP_RC because VMS  does  not  distinguish  between  exit(0)  and\n       exit(1).\n\n\nSEE ALSO\n\n       pcre2pattern(3), pcre2syntax(3), pcre2callout(3), pcre2unicode(3).\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 24 January 2025\n       Copyright (c) 1997-2023 University of Cambridge.\n\n\nPCRE2 10.48-DEV                 24 January 2025                   PCRE2GREP(1)\n"
  },
  {
    "path": "doc/pcre2jit.3",
    "content": ".TH PCRE2JIT 3 \"22 August 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"PCRE2 JUST-IN-TIME COMPILER SUPPORT\"\n.rs\n.sp\nJust-in-time compiling is a heavyweight optimization that can greatly speed up\npattern matching. However, it comes at the cost of extra processing before the\nmatch is performed, so it is of most benefit when the same pattern is going to\nbe matched many times. This does not necessarily mean many calls of a matching\nfunction; if the pattern is not anchored, matching attempts may take place many\ntimes at various positions in the subject, even for a single call. Therefore,\nif the subject string is very long, it may still pay to use JIT even for\none-off matches. JIT support is available for all of the 8-bit, 16-bit and\n32-bit PCRE2 libraries.\n.P\nJIT support applies only to the traditional Perl-compatible matching function.\nIt does not apply when the DFA matching function is being used. The code for\nJIT support was written by Zoltan Herczeg.\n.\n.\n.SH \"AVAILABILITY OF JIT SUPPORT\"\n.rs\n.sp\nJIT support is an optional feature of PCRE2. The \"configure\" option\n--enable-jit (or equivalent CMake option) must be set when PCRE2 is built if\nyou want to use JIT. The support is limited to the following hardware\nplatforms:\n.sp\n  ARM 32-bit (v7, and Thumb2)\n  ARM 64-bit\n  IBM s390x 64 bit\n  Intel x86 32-bit and 64-bit\n  LoongArch 64 bit\n  MIPS 32-bit and 64-bit\n  Power PC 32-bit and 64-bit\n  RISC-V 32-bit and 64-bit\n.sp\nIf --enable-jit is set on an unsupported platform, compilation fails.\n.P\nA client program can tell if JIT support has been compiled by calling\n\\fBpcre2_config()\\fP with the PCRE2_CONFIG_JIT option. The result is one if\nPCRE2 was built with JIT support, and zero otherwise. However, having the JIT\ncode available does not guarantee that it will be used for any particular\nmatch. One reason for this is that there are a number of options and pattern\nitems that are\n.\\\" HTML <a href=\"#unsupported\">\n.\\\" </a>\nnot supported by JIT\n.\\\"\n(see below). Another reason is that in some environments JIT is unable to get\nexecutable memory in which to build its compiled code. The only guarantee from\n\\fBpcre2_config()\\fP is that if it returns zero, JIT will definitely \\fInot\\fP\nbe used.\n.P\nAs of release 10.45 there is a more informative way to test for JIT support. If\n\\fBpcre2_compile_jit()\\fP is called with the single option PCRE2_JIT_TEST_ALLOC\nit returns zero if JIT is available and has a working allocator. Otherwise it\nreturns PCRE2_ERROR_NOMEMORY if JIT is available but cannot allocate executable\nmemory, or PCRE2_ERROR_JIT_UNSUPPORTED if JIT support is not compiled. The\ncode argument is ignored, so it can be a NULL value.\n.P\nA simple program does not need to check availability in order to use JIT when\npossible. The API is implemented in a way that falls back to the interpretive\ncode if JIT is not available or cannot be used for a given match. For programs\nthat need the best possible performance, there is a\n.\\\" HTML <a href=\"#fastpath\">\n.\\\" </a>\n\"fast path\"\n.\\\"\nAPI that is JIT-specific.\n.\n.\n.SH \"SIMPLE USE OF JIT\"\n.rs\n.sp\nTo make use of the JIT support in the simplest way, all you have to do is to\ncall \\fBpcre2_jit_compile()\\fP after successfully compiling a pattern with\n\\fBpcre2_compile()\\fP. This function has two arguments: the first is the\ncompiled pattern pointer that was returned by \\fBpcre2_compile()\\fP, and the\nsecond is zero or more of the following option bits: PCRE2_JIT_COMPLETE,\nPCRE2_JIT_PARTIAL_HARD, or PCRE2_JIT_PARTIAL_SOFT.\n.P\nIf JIT support is not available, a call to \\fBpcre2_jit_compile()\\fP does\nnothing and returns PCRE2_ERROR_JIT_BADOPTION. Otherwise, the compiled pattern\nis passed to the JIT compiler, which turns it into machine code that executes\nmuch faster than the normal interpretive code, but yields exactly the same\nresults. The returned value from \\fBpcre2_jit_compile()\\fP is zero on success,\nor a negative error code.\n.P\nThere is a limit to the size of pattern that JIT supports, imposed by the size\nof machine stack that it uses. The exact rules are not documented because they\nmay change at any time, in particular, when new optimizations are introduced.\nIf a pattern is too big, a call to \\fBpcre2_jit_compile()\\fP returns\nPCRE2_ERROR_NOMEMORY.\n.P\nPCRE2_JIT_COMPLETE requests the JIT compiler to generate code for complete\nmatches. If you want to run partial matches using the PCRE2_PARTIAL_HARD or\nPCRE2_PARTIAL_SOFT options of \\fBpcre2_match()\\fP, you should set one or both\nof the other options as well as, or instead of PCRE2_JIT_COMPLETE. The JIT\ncompiler generates different optimized code for each of the three modes\n(normal, soft partial, hard partial). When \\fBpcre2_match()\\fP is called, the\nappropriate code is run if it is available. Otherwise, the pattern is matched\nusing interpretive code.\n.P\nYou can call \\fBpcre2_jit_compile()\\fP multiple times for the same compiled\npattern. It does nothing if it has previously compiled code for any of the\noption bits. For example, you can call it once with PCRE2_JIT_COMPLETE and\n(perhaps later, when you find you need partial matching) again with\nPCRE2_JIT_COMPLETE and PCRE2_JIT_PARTIAL_HARD. This time it will ignore\nPCRE2_JIT_COMPLETE and just compile code for partial matching. If\n\\fBpcre2_jit_compile()\\fP is called with no option bits set, it immediately\nreturns zero. This is an alternative way of testing whether JIT support has\nbeen compiled.\n.P\nAt present, it is not possible to free JIT compiled code except when the entire\ncompiled pattern is freed by calling \\fBpcre2_code_free()\\fP.\n.P\nIn some circumstances you may need to call additional functions. These are\ndescribed in the section entitled\n.\\\" HTML <a href=\"#stackcontrol\">\n.\\\" </a>\n\"Controlling the JIT stack\"\n.\\\"\nbelow.\n.P\nThere are some \\fBpcre2_match()\\fP options that are not supported by JIT, and\nthere are also some pattern items that JIT cannot handle. Details are given\n.\\\" HTML <a href=\"#unsupported\">\n.\\\" </a>\nbelow.\n.\\\"\nIn both cases, matching automatically falls back to the interpretive code. If\nyou want to know whether JIT was actually used for a particular match, you\nshould arrange for a JIT callback function to be set up as described in the\nsection entitled\n.\\\" HTML <a href=\"#stackcontrol\">\n.\\\" </a>\n\"Controlling the JIT stack\"\n.\\\"\nbelow, even if you do not need to supply a non-default JIT stack. Such a\ncallback function is called whenever JIT code is about to be obeyed. If the\nmatch-time options are not right for JIT execution, the callback function is\nnot obeyed.\n.P\nIf the JIT compiler finds an unsupported item, no JIT data is generated. You\ncan find out if JIT compilation was successful for a compiled pattern by\ncalling \\fBpcre2_pattern_info()\\fP with the PCRE2_INFO_JITSIZE option. A\nnon-zero result means that JIT compilation was successful. A result of 0 means\nthat JIT support is not available, or the pattern was not processed by\n\\fBpcre2_jit_compile()\\fP, or the JIT compiler was not able to handle the\npattern. Successful JIT compilation does not, however, guarantee the use of JIT\nat match time because there are some match time options that are not supported\nby JIT.\n.\n.\n.SH \"MATCHING SUBJECTS CONTAINING INVALID UTF\"\n.rs\n.sp\nWhen a pattern is compiled with the PCRE2_UTF option, subject strings are\nnormally expected to be a valid sequence of UTF code units. By default, this is\nchecked at the start of matching and an error is generated if invalid UTF is\ndetected. The PCRE2_NO_UTF_CHECK option can be passed to \\fBpcre2_match()\\fP to\nskip the check (for improved performance) if you are sure that a subject string\nis valid. If this option is used with an invalid string, the result is\nundefined. The calling program may crash or loop or otherwise misbehave.\n.P\nHowever, a way of running matches on strings that may contain invalid UTF\nsequences is available. Calling \\fBpcre2_compile()\\fP with the\nPCRE2_MATCH_INVALID_UTF option has two effects: it tells the interpreter in\n\\fBpcre2_match()\\fP to support invalid UTF, and, if \\fBpcre2_jit_compile()\\fP\nis subsequently called, the compiled JIT code also supports invalid UTF.\nDetails of how this support works, in both the JIT and the interpretive cases,\nis given in the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\ndocumentation.\n.P\nThere is also an obsolete option for \\fBpcre2_jit_compile()\\fP called\nPCRE2_JIT_INVALID_UTF, which currently exists only for backward compatibility.\nIt is superseded by the \\fBpcre2_compile()\\fP option PCRE2_MATCH_INVALID_UTF\nand should no longer be used. It may be removed in future.\n.\n.\n.\\\" HTML <a name=\"unsupported\"></a>\n.SH \"UNSUPPORTED OPTIONS AND PATTERN ITEMS\"\n.rs\n.sp\nThe \\fBpcre2_match()\\fP options that are supported for JIT matching are\nPCRE2_COPY_MATCHED_SUBJECT, PCRE2_NOTBOL, PCRE2_NOTEOL, PCRE2_NOTEMPTY,\nPCRE2_NOTEMPTY_ATSTART, PCRE2_NO_UTF_CHECK, PCRE2_PARTIAL_HARD, and\nPCRE2_PARTIAL_SOFT. The PCRE2_ANCHORED and PCRE2_ENDANCHORED options are not\nsupported at match time.\n.P\nIf the PCRE2_NO_JIT option is passed to \\fBpcre2_match()\\fP it disables the\nuse of JIT, forcing matching by the interpreter code.\n.P\nThe only unsupported pattern items are \\eC (match a single data unit) when\nrunning in a UTF mode, and a callout immediately before an assertion condition\nin a conditional group.\n.\n.\n.SH \"RETURN VALUES FROM JIT MATCHING\"\n.rs\n.sp\nWhen a pattern is matched using JIT, the return values are the same as those\ngiven by the interpretive \\fBpcre2_match()\\fP code, with the addition of one\nnew error code: PCRE2_ERROR_JIT_STACKLIMIT. This means that the memory used for\nthe JIT stack was insufficient. See\n.\\\" HTML <a href=\"#stackcontrol\">\n.\\\" </a>\n\"Controlling the JIT stack\"\n.\\\"\nbelow for a discussion of JIT stack usage.\n.P\nThe error code PCRE2_ERROR_MATCHLIMIT is returned by the JIT code if searching\na very large pattern tree goes on for too long, as it is in the same\ncircumstance when JIT is not used, but the details of exactly what is counted\nare not the same. The PCRE2_ERROR_DEPTHLIMIT error code is never returned\nwhen JIT matching is used.\n.\n.\n.\\\" HTML <a name=\"stackcontrol\"></a>\n.SH \"CONTROLLING THE JIT STACK\"\n.rs\n.sp\nWhen the compiled JIT code runs, it needs a block of memory to use as a stack.\nBy default, it uses 32KiB on the machine stack. However, some large or\ncomplicated patterns need more than this. The error PCRE2_ERROR_JIT_STACKLIMIT\nis given when there is not enough stack. Three functions are provided for\nmanaging blocks of memory for use as JIT stacks. There is further discussion\nabout the use of JIT stacks in the section entitled\n.\\\" HTML <a href=\"#stackfaq\">\n.\\\" </a>\n\"JIT stack FAQ\"\n.\\\"\nbelow.\n.P\nThe \\fBpcre2_jit_stack_create()\\fP function creates a JIT stack. Its arguments\nare a starting size, a maximum size, and a general context (for memory\nallocation functions, or NULL for standard memory allocation). It returns a\npointer to an opaque structure of type \\fBpcre2_jit_stack\\fP, or NULL if there\nis an error. The \\fBpcre2_jit_stack_free()\\fP function is used to free a stack\nthat is no longer needed. If its argument is NULL, this function returns\nimmediately, without doing anything. (For the technically minded: the address\nspace is allocated by mmap or VirtualAlloc.) A maximum stack size of 512KiB to\n1MiB should be more than enough for any pattern.\n.P\nThe \\fBpcre2_jit_stack_assign()\\fP function specifies which stack JIT code\nshould use. Its arguments are as follows:\n.sp\n  pcre2_match_context  *mcontext\n  pcre2_jit_callback    callback\n  void                 *data\n.sp\nThe first argument is a pointer to a match context. When this is subsequently\npassed to a matching function, its information determines which JIT stack is\nused. If this argument is NULL, the function returns immediately, without doing\nanything. There are three cases for the values of the other two options:\n.sp\n  (1) If \\fIcallback\\fP is NULL and \\fIdata\\fP is NULL, an internal 32KiB block\n      on the machine stack is used. This is the default when a match\n      context is created.\n.sp\n  (2) If \\fIcallback\\fP is NULL and \\fIdata\\fP is not NULL, \\fIdata\\fP must be\n      a pointer to a valid JIT stack, the result of calling\n      \\fBpcre2_jit_stack_create()\\fP.\n.sp\n  (3) If \\fIcallback\\fP is not NULL, it must point to a function that is\n      called with \\fIdata\\fP as an argument at the start of matching, in\n      order to set up a JIT stack. If the return from the callback\n      function is NULL, the internal 32KiB stack is used; otherwise the\n      return value must be a valid JIT stack, the result of calling\n      \\fBpcre2_jit_stack_create()\\fP.\n.sp\nA callback function is obeyed whenever JIT code is about to be run; it is not\nobeyed when \\fBpcre2_match()\\fP is called with options that are incompatible\nfor JIT matching. A callback function can therefore be used to determine\nwhether a match operation was executed by JIT or by the interpreter.\n.P\nYou may safely use the same JIT stack for more than one pattern (either by\nassigning directly or by callback), as long as the patterns are matched\nsequentially in the same thread. Currently, the only way to set up\nnon-sequential matches in one thread is to use callouts: if a callout function\nstarts another match, that match must use a different JIT stack to the one used\nfor currently suspended match(es).\n.P\nIn a multithread application, if you do not specify a JIT stack, or if you\nassign or pass back NULL from a callback, that is thread-safe, because each\nthread has its own machine stack. However, if you assign or pass back a\nnon-NULL JIT stack, this must be a different stack for each thread so that the\napplication is thread-safe.\n.P\nStrictly speaking, even more is allowed. You can assign the same non-NULL stack\nto a match context that is used by any number of patterns, as long as they are\nnot used for matching by multiple threads at the same time. For example, you\ncould use the same stack in all compiled patterns, with a global mutex in the\ncallback to wait until the stack is available for use. However, this is an\ninefficient solution, and not recommended.\n.P\nThis is a suggestion for how a multithreaded program that needs to set up\nnon-default JIT stacks might operate:\n.sp\n  During thread initialization\n    thread_local_var = pcre2_jit_stack_create(...)\n.sp\n  During thread exit\n    pcre2_jit_stack_free(thread_local_var)\n.sp\n  Use a one-line callback function\n    return thread_local_var\n.sp\nAll the functions described in this section do nothing if JIT is not available.\n.\n.\n.\\\" HTML <a name=\"stackfaq\"></a>\n.SH \"JIT STACK FAQ\"\n.rs\n.sp\n(1) Why do we need JIT stacks?\n.sp\nPCRE2 (and JIT) is a recursive, depth-first engine, so it needs a stack where\nthe local data of the current node is pushed before checking its child nodes.\nAllocating real machine stack on some platforms is difficult. For example, the\nstack chain needs to be updated every time if we extend the stack on PowerPC.\nAlthough it is possible, its updating time overhead decreases performance. So\nwe do the recursion in memory.\n.P\n(2) Why don't we simply allocate blocks of memory with \\fBmalloc()\\fP?\n.sp\nModern operating systems have a nice feature: they can reserve an address space\ninstead of allocating memory. We can safely allocate memory pages inside this\naddress space, so the stack could grow without moving memory data (this is\nimportant because of pointers). Thus we can allocate 1MiB address space, and\nuse only a single memory page (usually 4KiB) if that is enough. However, we can\nstill grow up to 1MiB anytime if needed.\n.P\n(3) Who \"owns\" a JIT stack?\n.sp\nThe owner of the stack is the user program, not the JIT studied pattern or\nanything else. The user program must ensure that if a stack is being used by\n\\fBpcre2_match()\\fP, (that is, it is assigned to a match context that is passed\nto the pattern currently running), that stack must not be used by any other\nthreads (to avoid overwriting the same memory area). The best practice for\nmultithreaded programs is to allocate a stack for each thread, and return this\nstack through the JIT callback function.\n.P\n(4) When should a JIT stack be freed?\n.sp\nYou can free a JIT stack at any time, as long as it will not be used by\n\\fBpcre2_match()\\fP again. When you assign the stack to a match context, only a\npointer is set. There is no reference counting or any other magic. You can free\ncompiled patterns, contexts, and stacks in any order, anytime.\nJust \\fIdo not\\fP call \\fBpcre2_match()\\fP with a match context pointing to an\nalready freed stack, as that will cause SEGFAULT. (Also, do not free a stack\ncurrently used by \\fBpcre2_match()\\fP in another thread). You can also replace\nthe stack in a context at any time when it is not in use. You should free the\nprevious stack before assigning a replacement.\n.P\n(5) Should I allocate/free a stack every time before/after calling\n\\fBpcre2_match()\\fP?\n.sp\nNo, because this is too costly in terms of resources. However, you could\nimplement some clever idea which release the stack if it is not used in let's\nsay two minutes. The JIT callback can help to achieve this without keeping a\nlist of patterns.\n.P\n(6) OK, the stack is for long term memory allocation. But what happens if a\npattern causes stack overflow with a stack of 1MiB? Is that 1MiB kept until the\nstack is freed?\n.sp\nEspecially on embedded systems, it might be a good idea to release memory\nsometimes without freeing the stack. There is no API for this at the moment.\nProbably a function call which returns with the currently allocated memory for\nany stack and another which allows releasing memory (shrinking the stack) would\nbe a good idea if someone needs this.\n.P\n(7) This is too much of a headache. Isn't there any better solution for JIT\nstack handling?\n.sp\nNo, thanks to Windows. If POSIX threads were used everywhere, we could throw\nout this complicated API.\n.\n.\n.SH \"FREEING JIT SPECULATIVE MEMORY\"\n.rs\n.sp\n.nf\n.B void pcre2_jit_free_unused_memory(pcre2_general_context *\\fIgcontext\\fP);\n.fi\n.P\nThe JIT executable allocator does not free all memory when it is possible. It\nexpects new allocations, and keeps some free memory around to improve\nallocation speed. However, in low memory conditions, it might be better to free\nall possible memory. You can cause this to happen by calling\npcre2_jit_free_unused_memory(). Its argument is a general context, for custom\nmemory management, or NULL for standard memory management.\n.\n.\n.SH \"EXAMPLE CODE\"\n.rs\n.sp\nThis is a single-threaded example that specifies a JIT stack without using a\ncallback. A real program should include error checking after all the function\ncalls.\n.sp\n  int rc;\n  pcre2_code *re;\n  pcre2_match_data *match_data;\n  pcre2_match_context *mcontext;\n  pcre2_jit_stack *jit_stack;\n.sp\n  re = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, 0,\n    &errornumber, &erroffset, NULL);\n  rc = pcre2_jit_compile(re, PCRE2_JIT_COMPLETE);\n  mcontext = pcre2_match_context_create(NULL);\n  jit_stack = pcre2_jit_stack_create(32*1024, 512*1024, NULL);\n  pcre2_jit_stack_assign(mcontext, NULL, jit_stack);\n  match_data = pcre2_match_data_create(re, 10);\n  rc = pcre2_match(re, subject, length, 0, 0, match_data, mcontext);\n  /* Process result */\n.sp\n  pcre2_code_free(re);\n  pcre2_match_data_free(match_data);\n  pcre2_match_context_free(mcontext);\n  pcre2_jit_stack_free(jit_stack);\n.sp\n.\n.\n.\\\" HTML <a name=\"fastpath\"></a>\n.SH \"JIT FAST PATH API\"\n.rs\n.sp\nBecause the API described above falls back to interpreted matching when JIT is\nnot available, it is convenient for programs that are written for general use\nin many environments. However, calling JIT via \\fBpcre2_match()\\fP does have a\nperformance impact. Programs that are written for use where JIT is known to be\navailable, and which need the best possible performance, can instead use a\n\"fast path\" API to call JIT matching directly instead of calling\n\\fBpcre2_match()\\fP (obviously only for patterns that have been successfully\nprocessed by \\fBpcre2_jit_compile()\\fP).\n.P\nThe fast path function is called \\fBpcre2_jit_match()\\fP, and it takes exactly\nthe same arguments as \\fBpcre2_match()\\fP. However, the subject string must be\nspecified with a length; PCRE2_ZERO_TERMINATED is not supported. Unsupported\noption bits (for example, PCRE2_ANCHORED and PCRE2_ENDANCHORED) are ignored, as\nis the PCRE2_NO_JIT option. The return values are also the same as for\n\\fBpcre2_match()\\fP, plus PCRE2_ERROR_JIT_BADOPTION if a matching mode (partial\nor complete) is requested that was not compiled.\n.P\nWhen you call \\fBpcre2_match()\\fP, as well as testing for invalid options, a\nnumber of other sanity checks are performed on the arguments. For example, if\nthe subject pointer is NULL but the length is non-zero, an immediate error is\ngiven. Also, unless PCRE2_NO_UTF_CHECK is set, a UTF subject string is tested\nfor validity. In the interests of speed, these checks do not happen on the JIT\nfast path. If invalid UTF data is passed when PCRE2_MATCH_INVALID_UTF was not\nset for \\fBpcre2_compile()\\fP, the result is undefined. The program may crash\nor loop or give wrong results. In the absence of PCRE2_MATCH_INVALID_UTF you\nshould call \\fBpcre2_jit_match()\\fP in UTF mode only if you are sure the\nsubject is valid.\n.P\nBypassing the sanity checks and the \\fBpcre2_match()\\fP wrapping can give\nspeedups of more than 10%.\n.\n.\n.SH \"SEE ALSO\"\n.rs\n.sp\n\\fBpcre2api\\fP(3), \\fBpcre2unicode\\fP(3)\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel (FAQ by Zoltan Herczeg)\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 22 August 2024\nCopyright (c) 1997-2024 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2limits.3",
    "content": ".TH PCRE2LIMITS 3 \"03 September 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"SIZE AND OTHER LIMITATIONS\"\n.rs\n.sp\nThere are some size limitations in PCRE2 but it is hoped that they will never\nin practice be relevant.\n.P\nThe maximum size of a compiled pattern is approximately 64 thousand code units\nfor the 8-bit and 16-bit libraries if PCRE2 is compiled with the default\ninternal linkage size, which is 2 bytes for these libraries. If you want to\nprocess regular expressions that are truly enormous, you can compile PCRE2 with\nan internal linkage size of 3 or 4 (when building the 16-bit library, 3 is\nrounded up to 4). See the \\fBREADME\\fP file in the source distribution and the\n.\\\" HREF\n\\fBpcre2build\\fP\n.\\\"\ndocumentation for details. In these cases the limit is substantially larger.\nHowever, the speed of execution is slower. In the 32-bit library, the internal\nlinkage size is always 4.\n.P\nThe maximum length of a source pattern string is essentially unlimited; it is\nthe largest number a PCRE2_SIZE variable can hold. However, the program that\ncalls \\fBpcre2_compile()\\fP can specify a smaller limit.\n.P\nThe maximum length (in code units) of a subject string is one less than the\nlargest number a PCRE2_SIZE variable can hold. PCRE2_SIZE is an unsigned\ninteger type, usually defined as size_t. Its maximum value (that is\n~(PCRE2_SIZE)0) is reserved as a special indicator for zero-terminated strings\nand unset offsets.\n.P\nAll values in repeating quantifiers must be less than 65536.\n.P\nThere are two different limits that apply to branches of lookbehind assertions.\nIf every branch in such an assertion matches a fixed number of characters,\nthe maximum length of any branch is 65535 characters. If any branch matches a\nvariable number of characters, then the maximum matching length for every\nbranch is limited. The default limit is set at compile time, defaulting to 255,\nbut can be changed by the calling program.\n.P\nThere is no limit to the number of parenthesized groups, but there can be no\nmore than 65535 capture groups, and there is a limit to the depth of nesting of\nparenthesized subpatterns of all kinds. This is imposed in order to limit the\namount of system stack used at compile time. The default limit can be specified\nwhen PCRE2 is built; if not, the default is set to 250. An application can\nchange this limit by calling pcre2_set_parens_nest_limit() to set the limit in\na compile context.\n.P\nThe maximum length of the name for a named capture group as well as the number\nof such groups is configurable at build time. The maximum length for the name\ndefaults to\n.\\\" DEFINE MAX_NAME_SIZE\n128 code units, and the maximum number of such groups to\n.\\\" DEFINE MAX_NAME_COUNT\n10000.\n.P\nThe maximum length of a name in a (*MARK), (*PRUNE), (*SKIP), or (*THEN) verb\nis 255 code units for the 8-bit library and 65535 code units for the 16-bit and\n32-bit libraries.\n.P\nThe maximum length of a string argument to a callout is the largest number a\n32-bit unsigned integer can hold.\n.P\nThe maximum amount of heap memory used for matching is controlled by the heap\nlimit, which can be set in a pattern or in a match context. The default is a\nvery large number, effectively unlimited.\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 03 September 2025\nCopyright (c) 1997-2023 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2matching.3",
    "content": ".TH PCRE2MATCHING 3 \"22 February 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"PCRE2 MATCHING ALGORITHMS\"\n.rs\n.sp\nThis document describes the two different algorithms that are available in\nPCRE2 for matching a compiled regular expression against a given subject\nstring. The \"standard\" algorithm is the one provided by the \\fBpcre2_match()\\fP\nfunction. This works in the same way as Perl's matching function, and provides a\nPerl-compatible matching operation. The just-in-time (JIT) optimization that is\ndescribed in the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\ndocumentation is compatible with this function.\n.P\nAn alternative algorithm is provided by the \\fBpcre2_dfa_match()\\fP function;\nit operates in a different way, and is not Perl-compatible. This alternative\nhas advantages and disadvantages compared with the standard algorithm, and\nthese are described below.\n.P\nWhen there is only one possible way in which a given subject string can match a\npattern, the two algorithms give the same answer. A difference arises, however,\nwhen there are multiple possibilities. For example, if the anchored pattern\n.sp\n  ^<.*>\n.sp\nis matched against the string\n.sp\n  <something> <something else> <something further>\n.sp\nthere are three possible answers. The standard algorithm finds only one of\nthem, whereas the alternative algorithm finds all three.\n.\n.\n.SH \"REGULAR EXPRESSIONS AS TREES\"\n.rs\n.sp\nThe set of strings that are matched by a regular expression can be represented\nas a tree structure. An unlimited repetition in the pattern makes the tree of\ninfinite size, but it is still a tree. Matching the pattern to a given subject\nstring (from a given starting point) can be thought of as a search of the tree.\nThere are two ways to search a tree: depth-first and breadth-first, and these\ncorrespond to the two matching algorithms provided by PCRE2.\n.\n.\n.SH \"THE STANDARD MATCHING ALGORITHM\"\n.rs\n.sp\nIn the terminology of Jeffrey Friedl's book \"Mastering Regular Expressions\",\nthe standard algorithm is an \"NFA algorithm\". It conducts a depth-first search\nof the pattern tree. That is, it proceeds along a single path through the tree,\nchecking that the subject matches what is required. When there is a mismatch,\nthe algorithm tries any alternatives at the current point, and if they all\nfail, it backs up to the previous branch point in the tree, and tries the next\nalternative branch at that level. This often involves backing up (moving to the\nleft) in the subject string as well. The order in which repetition branches are\ntried is controlled by the greedy or ungreedy nature of the quantifier.\n.P\nIf a leaf node is reached, a matching string has been found, and at that point\nthe algorithm stops. Thus, if there is more than one possible match, this\nalgorithm returns the first one that it finds. Whether this is the shortest,\nthe longest, or some intermediate length depends on the way the alternations\nand the greedy or ungreedy repetition quantifiers are specified in the\npattern.\n.P\nBecause it ends up with a single path through the tree, it is relatively\nstraightforward for this algorithm to keep track of the substrings that are\nmatched by portions of the pattern in parentheses. This provides support for\ncapturing parentheses and backreferences.\n.\n.\n.SH \"THE ALTERNATIVE MATCHING ALGORITHM\"\n.rs\n.sp\nThis algorithm conducts a breadth-first search of the tree. Starting from the\nfirst matching point in the subject, it scans the subject string from left to\nright, once, character by character, and as it does this, it remembers all the\npaths through the tree that represent valid matches. In Friedl's terminology,\nthis is a kind of \"DFA algorithm\", though it is not implemented as a\ntraditional finite state machine (it keeps multiple states active\nsimultaneously).\n.P\nAlthough the general principle of this matching algorithm is that it scans the\nsubject string only once, without backtracking, there is one exception: when a\nlookaround assertion is encountered, the characters following or preceding the\ncurrent point have to be independently inspected.\n.P\nThe scan continues until either the end of the subject is reached, or there are\nno more unterminated paths. At this point, terminated paths represent the\ndifferent matching possibilities (if there are none, the match has failed).\nThus, if there is more than one possible match, this algorithm finds all of\nthem, and in particular, it finds the longest. The matches are returned in\nthe output vector in decreasing order of length. There is an option to stop the\nalgorithm after the first match (which is necessarily the shortest) is found.\n.P\nNote that the size of vector needed to contain all the results depends on the\nnumber of simultaneous matches, not on the number of capturing parentheses in\nthe pattern. Using \\fBpcre2_match_data_create_from_pattern()\\fP to create the\nmatch data block is therefore not advisable when doing DFA matching.\n.P\nNote also that all the matches that are found start at the same point in the\nsubject. If the pattern\n.sp\n  cat(er(pillar)?)?\n.sp\nis matched against the string \"the caterpillar catchment\", the result is the\nthree strings \"caterpillar\", \"cater\", and \"cat\" that start at the fifth\ncharacter of the subject. The algorithm does not automatically move on to find\nmatches that start at later positions.\n.P\nPCRE2's \"auto-possessification\" optimization usually applies to character\nrepeats at the end of a pattern (as well as internally). For example, the\npattern \"a\\ed+\" is compiled as if it were \"a\\ed++\" because there is no point\neven considering the possibility of backtracking into the repeated digits. For\nDFA matching, this means that only one possible match is found. If you really\ndo want multiple matches in such cases, either use an ungreedy repeat\n(\"a\\ed+?\") or set the PCRE2_NO_AUTO_POSSESS option when compiling.\n.P\nThere are a number of features of PCRE2 regular expressions that are not\nsupported or behave differently in the alternative matching function. Those\nthat are not supported cause an error if encountered.\n.P\n1. Because the algorithm finds all possible matches, the greedy or ungreedy\nnature of repetition quantifiers is not relevant (though it may affect\nauto-possessification, as just described). During matching, greedy and ungreedy\nquantifiers are treated in exactly the same way. However, possessive\nquantifiers can make a difference when what follows could also match what is\nquantified, for example in a pattern like this:\n.sp\n  ^a++\\ew!\n.sp\nThis pattern matches \"aaab!\" but not \"aaa!\", which would be matched by a\nnon-possessive quantifier. Similarly, if an atomic group is present, it is\nmatched as if it were a standalone pattern at the current point, and the\nlongest match is then \"locked in\" for the rest of the overall pattern.\n.P\n2. When dealing with multiple paths through the tree simultaneously, it is not\nstraightforward to keep track of captured substrings for the different matching\npossibilities, and PCRE2's implementation of this algorithm does not attempt to\ndo this. This means that no captured substrings are available.\n.P\n3. Because no substrings are captured, a number of related features are not\navailable:\n.sp\n(a) Backreferences;\n.sp\n(b) Conditional expressions that use a backreference as the condition or test\nfor a specific group recursion;\n.sp\n(c) Script runs;\n.sp\n(d) Scan substring assertions.\n.P\n4. Because many paths through the tree may be active, the \\eK escape sequence,\nwhich resets the start of the match when encountered (but may be on some paths\nand not on others), is not supported.\n.P\n5. Callouts are supported, but the value of the \\fIcapture_top\\fP field is\nalways 1, and the value of the \\fIcapture_last\\fP field is always 0.\n.P\n6. The \\eC escape sequence, which (in the standard algorithm) always matches a\nsingle code unit, even in a UTF mode, is not supported in UTF modes because\nthe alternative algorithm moves through the subject string one character (not\ncode unit) at a time, for all active paths through the tree.\n.P\n7. Except for (*FAIL), the backtracking control verbs such as (*PRUNE) are not\nsupported. (*FAIL) is supported, and behaves like a failing negative assertion.\n.P\n8. The PCRE2_MATCH_INVALID_UTF option for \\fBpcre2_compile()\\fP is not\nsupported by \\fBpcre2_dfa_match()\\fP.\n.\n.\n.SH \"ADVANTAGES OF THE ALTERNATIVE ALGORITHM\"\n.rs\n.sp\nThe main advantage of the alternative algorithm is that all possible matches\n(at a single point in the subject) are automatically found, and in particular,\nthe longest match is found. To find more than one match at the same point using\nthe standard algorithm, you have to do kludgy things with callouts.\n.P\nPartial matching is possible with this algorithm, though it has some\nlimitations. The\n.\\\" HREF\n\\fBpcre2partial\\fP\n.\\\"\ndocumentation gives details of partial matching and discusses multi-segment\nmatching.\n.\n.\n.SH \"DISADVANTAGES OF THE ALTERNATIVE ALGORITHM\"\n.rs\n.sp\nThe alternative algorithm suffers from a number of disadvantages:\n.P\n1. It is substantially slower than the standard algorithm. This is partly\nbecause it has to search for all possible matches, but is also because it is\nless susceptible to optimization.\n.P\n2. Capturing parentheses and other features such as backreferences that rely on\nthem are not supported.\n.P\n3. Matching within invalid UTF strings is not supported.\n.P\n4. Although atomic groups are supported, their use does not provide the\nperformance advantage that it does for the standard algorithm.\n.P\n5. JIT optimization is not supported.\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 22 February 2025\nCopyright (c) 1997-2024 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2partial.3",
    "content": ".TH PCRE2PARTIAL 3 \"27 November 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"PARTIAL MATCHING IN PCRE2\"\n.rs\n.sp\nIn normal use of PCRE2, if there is a match up to the end of a subject string,\nbut more characters are needed to match the entire pattern, PCRE2_ERROR_NOMATCH\nis returned, just like any other failing match. There are circumstances where\nit might be helpful to distinguish this \"partial match\" case.\n.P\nOne example is an application where the subject string is very long, and not\nall available at once. The requirement here is to be able to do the matching\nsegment by segment, but special action is needed when a matched substring spans\nthe boundary between two segments.\n.P\nAnother example is checking a user input string as it is typed, to ensure that\nit conforms to a required format. Invalid characters can be immediately\ndiagnosed and rejected, giving instant feedback.\n.P\nPartial matching is a PCRE2-specific feature; it is not Perl-compatible. It is\nrequested by setting one of the PCRE2_PARTIAL_HARD or PCRE2_PARTIAL_SOFT\noptions when calling a matching function. The difference between the two\noptions is whether or not a partial match is preferred to an alternative\ncomplete match, though the details differ between the two types of matching\nfunction. If both options are set, PCRE2_PARTIAL_HARD takes precedence.\n.P\nIf you want to use partial matching with just-in-time optimized code, as well\nas setting a partial match option for the matching function, you must also call\n\\fBpcre2_jit_compile()\\fP with one or both of these options:\n.sp\n  PCRE2_JIT_PARTIAL_HARD\n  PCRE2_JIT_PARTIAL_SOFT\n.sp\nPCRE2_JIT_COMPLETE should also be set if you are going to run non-partial\nmatches on the same pattern. Separate code is compiled for each mode. If the\nappropriate JIT mode has not been compiled, interpretive matching code is used.\n.P\nSetting a partial matching option disables two of PCRE2's standard\noptimization hints. PCRE2 remembers the last literal code unit in a pattern,\nand abandons matching immediately if it is not present in the subject string.\nThis optimization cannot be used for a subject string that might match only\npartially. PCRE2 also remembers a minimum length of a matching string, and does\nnot bother to run the matching function on shorter strings. This optimization\nis also disabled for partial matching.\n.\n.\n.SH \"REQUIREMENTS FOR A PARTIAL MATCH\"\n.rs\n.sp\nA possible partial match occurs during matching when the end of the subject\nstring is reached successfully, but either more characters are needed to\ncomplete the match, or the addition of more characters might change what is\nmatched.\n.P\nExample 1: if the pattern is /abc/ and the subject is \"ab\", more characters are\ndefinitely needed to complete a match. In this case both hard and soft matching\noptions yield a partial match.\n.P\nExample 2: if the pattern is /ab+/ and the subject is \"ab\", a complete match\ncan be found, but the addition of more characters might change what is\nmatched. In this case, only PCRE2_PARTIAL_HARD returns a partial match;\nPCRE2_PARTIAL_SOFT returns the complete match.\n.P\nOn reaching the end of the subject, when PCRE2_PARTIAL_HARD is set, if the next\npattern item is \\ez, \\eZ, \\eb, \\eB, or $ there is always a partial match.\nOtherwise, for both options, the next pattern item must be one that inspects a\ncharacter, and at least one of the following must be true:\n.P\n(1) At least one character has already been inspected. An inspected character\nneed not form part of the final matched string; lookbehind assertions and the\n\\eK escape sequence provide ways of inspecting characters before the start of a\nmatched string.\n.P\n(2) The pattern contains one or more lookbehind assertions. This condition\nexists in case there is a lookbehind that inspects characters before the start\nof the match.\n.P\n(3) There is a special case when the whole pattern can match an empty string.\nWhen the starting point is at the end of the subject, the empty string match is\na possibility, and if PCRE2_PARTIAL_SOFT is set and neither of the above\nconditions is true, it is returned. However, because adding more characters\nmight result in a non-empty match, PCRE2_PARTIAL_HARD returns a partial match,\nwhich in this case means \"there is going to be a match at this point, but until\nsome more characters are added, we do not know if it will be an empty string or\nsomething longer\".\n.\n.\n.\n.SH \"PARTIAL MATCHING USING pcre2_match()\"\n.rs\n.sp\nWhen a partial matching option is set, the result of calling\n\\fBpcre2_match()\\fP can be one of the following:\n.TP 2\n\\fBA successful match\\fP\nA complete match has been found, starting and ending within this subject.\n.TP\n\\fBPCRE2_ERROR_NOMATCH\\fP\nNo match can start anywhere in this subject.\n.TP\n\\fBPCRE2_ERROR_PARTIAL\\fP\nAdding more characters may result in a complete match that uses one or more\ncharacters from the end of this subject.\n.P\nWhen a partial match is returned, the first two elements in the ovector point\nto the portion of the subject that was matched, but the values in the rest of\nthe ovector are undefined. The appearance of \\eK in the pattern has no effect\nfor a partial match. Consider this pattern:\n.sp\n  /abc\\eK123/\n.sp\nIf it is matched against \"456abc123xyz\" the result is a complete match, and the\novector defines the matched string as \"123\", because \\eK resets the \"start of\nmatch\" point. However, if a partial match is requested and the subject string\nis \"456abc12\", a partial match is found for the string \"abc12\", because all\nthese characters are needed for a subsequent re-match with additional\ncharacters.\n.P\nIf there is more than one partial match, the first one that was found provides\nthe data that is returned. Consider this pattern:\n.sp\n  /123\\ew+X|dogY/\n.sp\nIf this is matched against the subject string \"abc123dog\", both alternatives\nfail to match, but the end of the subject is reached during matching, so\nPCRE2_ERROR_PARTIAL is returned. The offsets are set to 3 and 9, identifying\n\"123dog\" as the first partial match. (In this example, there are two partial\nmatches, because \"dog\" on its own partially matches the second alternative.)\n.\n.\n.SS \"How a partial match is processed by pcre2_match()\"\n.rs\n.sp\nWhat happens when a partial match is identified depends on which of the two\npartial matching options is set.\n.P\nIf PCRE2_PARTIAL_HARD is set, PCRE2_ERROR_PARTIAL is returned as soon as a\npartial match is found, without continuing to search for possible complete\nmatches. This option is \"hard\" because it prefers an earlier partial match over\na later complete match. For this reason, the assumption is made that the end of\nthe supplied subject string is not the true end of the available data, which is\nwhy \\ez, \\eZ, \\eb, \\eB, and $ always give a partial match.\n.P\nIf PCRE2_PARTIAL_SOFT is set, the partial match is remembered, but matching\ncontinues as normal, and other alternatives in the pattern are tried. If no\ncomplete match can be found, PCRE2_ERROR_PARTIAL is returned instead of\nPCRE2_ERROR_NOMATCH. This option is \"soft\" because it prefers a complete match\nover a partial match. All the various matching items in a pattern behave as if\nthe subject string is potentially complete; \\ez, \\eZ, and $ match at the end of\nthe subject, as normal, and for \\eb and \\eB the end of the subject is treated\nas a non-alphanumeric.\n.P\nThe difference between the two partial matching options can be illustrated by a\npattern such as:\n.sp\n  /dog(sbody)?/\n.sp\nThis matches either \"dog\" or \"dogsbody\", greedily (that is, it prefers the\nlonger string if possible). If it is matched against the string \"dog\" with\nPCRE2_PARTIAL_SOFT, it yields a complete match for \"dog\". However, if\nPCRE2_PARTIAL_HARD is set, the result is PCRE2_ERROR_PARTIAL. On the other\nhand, if the pattern is made ungreedy the result is different:\n.sp\n  /dog(sbody)??/\n.sp\nIn this case the result is always a complete match because that is found first,\nand matching never continues after finding a complete match. It might be easier\nto follow this explanation by thinking of the two patterns like this:\n.sp\n  /dog(sbody)?/    is the same as  /dogsbody|dog/\n  /dog(sbody)??/   is the same as  /dog|dogsbody/\n.sp\nThe second pattern will never match \"dogsbody\", because it will always find the\nshorter match first.\n.\n.\n.SS \"Example of partial matching using pcre2test\"\n.rs\n.sp\nThe \\fBpcre2test\\fP data modifiers \\fBpartial_hard\\fP (or \\fBph\\fP) and\n\\fBpartial_soft\\fP (or \\fBps\\fP) set PCRE2_PARTIAL_HARD and PCRE2_PARTIAL_SOFT,\nrespectively, when calling \\fBpcre2_match()\\fP. Here is a run of\n\\fBpcre2test\\fP using a pattern that matches the whole subject in the form of a\ndate:\n.sp\n    re> /^\\ed?\\ed(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\ed\\ed$/\n  data> 25dec3\\e=ph\n  Partial match: 23dec3\n  data> 3ju\\e=ph\n  Partial match: 3ju\n  data> 3juj\\e=ph\n  No match\n.sp\nThis example gives the same results for both hard and soft partial matching\noptions. Here is an example where there is a difference:\n.sp\n    re> /^\\ed?\\ed(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\ed\\ed$/\n  data> 25jun04\\e=ps\n   0: 25jun04\n   1: jun\n  data> 25jun04\\e=ph\n  Partial match: 25jun04\n.sp\nWith PCRE2_PARTIAL_SOFT, the subject is matched completely. For\nPCRE2_PARTIAL_HARD, however, the subject is assumed not to be complete, so\nthere is only a partial match.\n.\n.\n.\n.SH \"MULTI-SEGMENT MATCHING WITH pcre2_match()\"\n.rs\n.sp\nPCRE was not originally designed with multi-segment matching in mind. However,\nover time, features (including partial matching) that make multi-segment\nmatching possible have been added. A very long string can be searched segment\nby segment by calling \\fBpcre2_match()\\fP repeatedly, with the aim of achieving\nthe same results that would happen if the entire string was available for\nsearching all the time. Normally, the strings that are being sought are much\nshorter than each individual segment, and are in the middle of very long\nstrings, so the pattern is normally not anchored.\n.P\nSpecial logic must be implemented to handle a matched substring that spans a\nsegment boundary. PCRE2_PARTIAL_HARD should be used, because it returns a\npartial match at the end of a segment whenever there is the possibility of\nchanging the match by adding more characters. The PCRE2_NOTBOL option should\nalso be set for all but the first segment.\n.P\nWhen a partial match occurs, the next segment must be added to the current\nsubject and the match re-run, using the \\fIstartoffset\\fP argument of\n\\fBpcre2_match()\\fP to begin at the point where the partial match started.\nFor example:\n.sp\n    re> /\\ed?\\ed(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\ed\\ed/\n  data> ...the date is 23ja\\e=ph\n  Partial match: 23ja\n  data> ...the date is 23jan19 and on that day...\\e=offset=15\n   0: 23jan19\n   1: jan\n.sp\nNote the use of the \\fBoffset\\fP modifier to start the new match where the\npartial match was found. In this example, the next segment was added to the one\nin which the partial match was found. This is the most straightforward\napproach, typically using a memory buffer that is twice the size of each\nsegment. After a partial match, the first half of the buffer is discarded, the\nsecond half is moved to the start of the buffer, and a new segment is added\nbefore repeating the match as in the example above. After a no match, the\nentire buffer can be discarded.\n.P\nIf there are memory constraints, you may want to discard text that precedes a\npartial match before adding the next segment. Unfortunately, this is not at\npresent straightforward. In cases such as the above, where the pattern does not\ncontain any lookbehinds, it is sufficient to retain only the partially matched\nsubstring. However, if the pattern contains a lookbehind assertion, characters\nthat precede the start of the partial match may have been inspected during the\nmatching process. When \\fBpcre2test\\fP displays a partial match, it indicates\nthese characters with '<' if the \\fBallusedtext\\fP modifier is set:\n.sp\n    re> \"(?<=123)abc\"\n  data> xx123ab\\e=ph,allusedtext\n  Partial match: 123ab\n                 <<<\n.sp\nHowever, the \\fBallusedtext\\fP modifier is not available for JIT matching,\nbecause JIT matching does not record the first (or last) consulted characters.\nFor this reason, this information is not available via the API. It is therefore\nnot possible in general to obtain the exact number of characters that must be\nretained in order to get the right match result. If you cannot retain the\nentire segment, you must find some heuristic way of choosing.\n.P\nIf you know the approximate length of the matching substrings, you can use that\nto decide how much text to retain. The only lookbehind information that is\ncurrently available via the API is the length of the longest individual\nlookbehind in a pattern, but this can be misleading if there are nested\nlookbehinds. The value returned by calling \\fBpcre2_pattern_info()\\fP with the\nPCRE2_INFO_MAXLOOKBEHIND option is the maximum number of characters (not code\nunits) that any individual lookbehind moves back when it is processed. A\npattern such as \"(?<=(?<!b)a)\" has a maximum lookbehind value of one, but\ninspects two characters before its starting point.\n.P\nIn a non-UTF or a 32-bit case, moving back is just a subtraction, but in\nUTF-8 or UTF-16 you have to count characters while moving back through the code\nunits.\n.\n.\n.SH \"PARTIAL MATCHING USING pcre2_dfa_match()\"\n.rs\n.sp\nThe DFA function moves along the subject string character by character, without\nbacktracking, searching for all possible matches simultaneously. If the end of\nthe subject is reached before the end of the pattern, there is the possibility\nof a partial match.\n.P\nWhen PCRE2_PARTIAL_SOFT is set, PCRE2_ERROR_PARTIAL is returned only if there\nhave been no complete matches. Otherwise, the complete matches are returned.\nIf PCRE2_PARTIAL_HARD is set, a partial match takes precedence over any\ncomplete matches. The portion of the string that was matched when the longest\npartial match was found is set as the first matching string.\n.P\nBecause the DFA function always searches for all possible matches, and there is\nno difference between greedy and ungreedy repetition, its behaviour is\ndifferent from the \\fBpcre2_match()\\fP. Consider the string \"dog\" matched\nagainst this ungreedy pattern:\n.sp\n  /dog(sbody)??/\n.sp\nWhereas the standard function stops as soon as it finds the complete match for\n\"dog\", the DFA function also finds the partial match for \"dogsbody\", and so\nreturns that when PCRE2_PARTIAL_HARD is set.\n.\n.\n.SH \"MULTI-SEGMENT MATCHING WITH pcre2_dfa_match()\"\n.rs\n.sp\nWhen a partial match has been found using the DFA matching function, it is\npossible to continue the match by providing additional subject data and calling\nthe function again with the same compiled regular expression, this time setting\nthe PCRE2_DFA_RESTART option. You must pass the same working space as before,\nbecause this is where details of the previous partial match are stored. You can\nset the PCRE2_PARTIAL_SOFT or PCRE2_PARTIAL_HARD options with PCRE2_DFA_RESTART\nto continue partial matching over multiple segments. Here is an example using\n\\fBpcre2test\\fP:\n.sp\n    re> /^\\ed?\\ed(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\ed\\ed$/\n  data> 23ja\\e=dfa,ps\n  Partial match: 23ja\n  data> n05\\e=dfa,dfa_restart\n   0: n05\n.sp\nThe first call has \"23ja\" as the subject, and requests partial matching; the\nsecond call has \"n05\" as the subject for the continued (restarted) match.\nNotice that when the match is complete, only the last part is shown; PCRE2 does\nnot retain the previously partially-matched string. It is up to the calling\nprogram to do that if it needs to. This means that, for an unanchored pattern,\nif a continued match fails, it is not possible to try again at a new starting\npoint. All this facility is capable of doing is continuing with the previous\nmatch attempt. For example, consider this pattern:\n.sp\n  1234|3789\n.sp\nIf the first part of the subject is \"ABC123\", a partial match of the first\nalternative is found at offset 3. There is no partial match for the second\nalternative, because such a match does not start at the same point in the\nsubject string. Attempting to continue with the string \"7890\" does not yield a\nmatch because only those alternatives that match at one point in the subject\nare remembered. Depending on the application, this may or may not be what you\nwant.\n.P\nIf you do want to allow for starting again at the next character, one way of\ndoing it is to retain some or all of the segment and try a new complete match,\nas described for \\fBpcre2_match()\\fP above. Another possibility is to work with\ntwo buffers. If a partial match at offset \\fIn\\fP in the first buffer is\nfollowed by \"no match\" when PCRE2_DFA_RESTART is used on the second buffer, you\ncan then try a new match starting at offset \\fIn+1\\fP in the first buffer.\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 27 November 2024\nCopyright (c) 1997-2019 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2pattern.3",
    "content": ".TH PCRE2PATTERN 3 \"03 September 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"PCRE2 REGULAR EXPRESSION DETAILS\"\n.rs\n.sp\nThe syntax and semantics of the regular expressions that are supported by PCRE2\nare described in detail below. There is a quick-reference syntax summary in the\n.\\\" HREF\n\\fBpcre2syntax\\fP\n.\\\"\npage. PCRE2 tries to match Perl syntax and semantics as closely as it can.\nPCRE2 also supports some alternative regular expression syntax that does not\nconflict with the Perl syntax in order to provide some compatibility with\nregular expressions in Python, .NET, and Oniguruma. There are in addition some\noptions that enable alternative syntax and semantics that are not the same as\nin Perl.\n.P\nPerl's regular expressions are described in its own documentation, and regular\nexpressions in general are covered in a number of books, some of which have\ncopious examples. Jeffrey Friedl's \"Mastering Regular Expressions\", published\nby O'Reilly, covers regular expressions in great detail. This description of\nPCRE2's regular expressions is intended as reference material.\n.P\nThis document discusses the regular expression patterns that are supported by\nPCRE2 when its main matching function, \\fBpcre2_match()\\fP, is used. PCRE2 also\nhas an alternative matching function, \\fBpcre2_dfa_match()\\fP, which matches\nusing a different algorithm that is not Perl-compatible. Some of the features\ndiscussed below are not available when DFA matching is used. The advantages and\ndisadvantages of the alternative function, and how it differs from the normal\nfunction, are discussed in the\n.\\\" HREF\n\\fBpcre2matching\\fP\n.\\\"\npage.\n.\n.\n.SH \"EBCDIC CHARACTER CODES\"\n.rs\n.sp\nMost computers use ASCII or Unicode for encoding characters, and PCRE2 assumes\nthis by default. However, it can be compiled to run in an environment that uses\nthe EBCDIC code, which is the case for some IBM mainframe operating systems. In\nthe sections below, character code values are ASCII or Unicode; in an EBCDIC\nenvironment these characters may have different code values, and there are no\ncode points greater than 255. Differences in behaviour when PCRE2 is running in\nan EBCDIC environment are described in the section\n.\\\" HTML <a href=\"#ebcdicenvironments\">\n.\\\" </a>\n\"EBCDIC environments\"\n.\\\"\nbelow, which you can ignore unless you really are in an EBCDIC environment.\n.\n.\n.SH \"SPECIAL START-OF-PATTERN ITEMS\"\n.rs\n.sp\nA number of options that can be passed to \\fBpcre2_compile()\\fP can also be set\nby special items at the start of a pattern. These are not Perl-compatible, but\nare provided to make these options accessible to pattern writers who are not\nable to change the program that processes the pattern. Any number of these\nitems may appear, but they must all be together right at the start of the\npattern string, and the letters must be in upper case.\n.\n.\n.SS \"UTF support\"\n.rs\n.sp\nIn the 8-bit and 16-bit PCRE2 libraries, characters may be coded either as\nsingle code units, or as multiple UTF-8 or UTF-16 code units. UTF-32 can be\nspecified for the 32-bit library, in which case it constrains the character\nvalues to valid Unicode code points. To process UTF strings, PCRE2 must be\nbuilt to include Unicode support (which is the default). When using UTF strings\nyou must either call the compiling function with one or both of the PCRE2_UTF\nor PCRE2_MATCH_INVALID_UTF options, or the pattern must start with the special\nsequence (*UTF), which is equivalent to setting the relevant PCRE2_UTF. How\nsetting a UTF mode affects pattern matching is mentioned in several places\nbelow. There is also a summary of features in the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\npage.\n.P\nSome applications that allow their users to supply patterns may wish to\nrestrict them to non-UTF data for security reasons. If the PCRE2_NEVER_UTF\noption is passed to \\fBpcre2_compile()\\fP, (*UTF) is not allowed, and its\nappearance in a pattern causes an error.\n.\n.\n.SS \"Unicode property support\"\n.rs\n.sp\nAnother special sequence that may appear at the start of a pattern is (*UCP).\nThis has the same effect as setting the PCRE2_UCP option: it causes sequences\nsuch as \\ed and \\ew to use Unicode properties to determine character types,\ninstead of recognizing only characters with codes less than 256 via a lookup\ntable. If also causes upper/lower casing operations to use Unicode properties\nfor characters with code points greater than 127, even when UTF is not set.\nThese behaviours can be changed within the pattern; see the section entitled\n.\\\" HTML <a href=\"#internaloptions\">\n.\\\" </a>\n\"Internal Option Setting\"\n.\\\"\nbelow.\n.P\nSome applications that allow their users to supply patterns may wish to\nrestrict them for security reasons. If the PCRE2_NEVER_UCP option is passed to\n\\fBpcre2_compile()\\fP, (*UCP) is not allowed, and its appearance in a pattern\ncauses an error.\n.\n.\n.SS \"Locking out empty string matching\"\n.rs\n.sp\nStarting a pattern with (*NOTEMPTY) or (*NOTEMPTY_ATSTART) has the same effect\nas passing the PCRE2_NOTEMPTY or PCRE2_NOTEMPTY_ATSTART option to whichever\nmatching function is subsequently called to match the pattern. These options\nlock out the matching of empty strings, either entirely, or only at the start\nof the subject.\n.\n.\n.SS \"Disabling auto-possessification\"\n.rs\n.sp\nIf a pattern starts with (*NO_AUTO_POSSESS), it has the same effect as setting\nthe PCRE2_NO_AUTO_POSSESS option, or calling \\fBpcre2_set_optimize()\\fP with\na PCRE2_AUTO_POSSESS_OFF directive. This stops PCRE2 from making quantifiers\npossessive when what follows cannot match the repeated item. For example, by\ndefault a+b is treated as a++b. For more details, see the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation.\n.\n.\n.SS \"Disabling start-up optimizations\"\n.rs\n.sp\nIf a pattern starts with (*NO_START_OPT), it has the same effect as setting the\nPCRE2_NO_START_OPTIMIZE option, or calling \\fBpcre2_set_optimize()\\fP with\na PCRE2_START_OPTIMIZE_OFF directive. This disables several optimizations for\nquickly reaching \"no match\" results. For more details, see the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation.\n.\n.\n.SS \"Disabling automatic anchoring\"\n.rs\n.sp\nIf a pattern starts with (*NO_DOTSTAR_ANCHOR), it has the same effect as\nsetting the PCRE2_NO_DOTSTAR_ANCHOR option, or\ncalling \\fBpcre2_set_optimize()\\fP with a PCRE2_DOTSTAR_ANCHOR_OFF directive.\nThis disables optimizations that apply to patterns whose top-level branches\nall start with .* (match any number of arbitrary characters). For more details,\nsee the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation.\n.\n.\n.SS \"Disabling JIT compilation\"\n.rs\n.sp\nIf a pattern that starts with (*NO_JIT) is successfully compiled, an attempt by\nthe application to apply the JIT optimization by calling\n\\fBpcre2_jit_compile()\\fP is ignored.\n.\n.\n.SS \"Setting match resource limits\"\n.rs\n.sp\nThe \\fBpcre2_match()\\fP function contains a counter that is incremented every\ntime it goes round its main loop. The caller of \\fBpcre2_match()\\fP can set a\nlimit on this counter, which therefore limits the amount of computing resource\nused for a match. The maximum depth of nested backtracking can also be limited;\nthis indirectly restricts the amount of heap memory that is used, but there is\nalso an explicit memory limit that can be set.\n.P\nThese facilities are provided to catch runaway matches that are provoked by\npatterns with huge matching trees. A common example is a pattern with nested\nunlimited repeats applied to a long string that does not match. When one of\nthese limits is reached, \\fBpcre2_match()\\fP gives an error return. The limits\ncan also be set by items at the start of the pattern of the form\n.sp\n  (*LIMIT_HEAP=d)\n  (*LIMIT_MATCH=d)\n  (*LIMIT_DEPTH=d)\n.sp\nwhere d is any number of decimal digits. However, the value of the setting must\nbe less than the value set (or defaulted) by the caller of \\fBpcre2_match()\\fP\nfor it to have any effect. In other words, the pattern writer can lower the\nlimits set by the programmer, but not raise them. If there is more than one\nsetting of one of these limits, the lower value is used. The heap limit is\nspecified in kibibytes (units of 1024 bytes).\n.P\nPrior to release 10.30, LIMIT_DEPTH was called LIMIT_RECURSION. This name is\nstill recognized for backwards compatibility.\n.P\nThe heap limit applies only when the \\fBpcre2_match()\\fP or\n\\fBpcre2_dfa_match()\\fP interpreters are used for matching. It does not apply\nto JIT. The match limit is used (but in a different way) when JIT is being\nused, or when \\fBpcre2_dfa_match()\\fP is called, to limit computing resource\nusage by those matching functions. The depth limit is ignored by JIT but is\nrelevant for DFA matching, which uses function recursion for recursions within\nthe pattern and for lookaround assertions and atomic groups. In this case, the\ndepth limit controls the depth of such recursion.\n.\n.\n.\\\" HTML <a name=\"newlines\"></a>\n.SS \"Newline conventions\"\n.rs\n.sp\nPCRE2 supports six different conventions for indicating line breaks in\nstrings: a single CR (carriage return) character, a single LF (linefeed)\ncharacter, the two-character sequence CRLF, any of the three preceding, any\nUnicode newline sequence, or the NUL character (binary zero). The\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage has\n.\\\" HTML <a href=\"pcre2api.html#newlines\">\n.\\\" </a>\nfurther discussion\n.\\\"\nabout newlines, and shows how to set the newline convention when calling\n\\fBpcre2_compile()\\fP.\n.P\nIt is also possible to specify a newline convention by starting a pattern\nstring with one of the following sequences:\n.sp\n  (*CR)        carriage return\n  (*LF)        linefeed\n  (*CRLF)      carriage return, followed by linefeed\n  (*ANYCRLF)   any of the three above\n  (*ANY)       all Unicode newline sequences\n  (*NUL)       the NUL character (binary zero)\n.sp\nThese override the default and the options given to the compiling function. For\nexample, on a Unix system where LF is the default newline sequence, the pattern\n.sp\n  (*CR)a.b\n.sp\nchanges the convention to CR. That pattern matches \"a\\enb\" because LF is no\nlonger a newline. If more than one of these settings is present, the last one\nis used.\n.P\nThe newline convention affects where the circumflex and dollar assertions are\ntrue. It also affects the interpretation of the dot metacharacter when\nPCRE2_DOTALL is not set, and the behaviour of \\eN when not followed by an\nopening brace. However, it does not affect what the \\eR escape sequence\nmatches. By default, this is any Unicode newline sequence, for Perl\ncompatibility. However, this can be changed; see the next section and the\ndescription of \\eR in the section entitled\n.\\\" HTML <a href=\"#newlineseq\">\n.\\\" </a>\n\"Newline sequences\"\n.\\\"\nbelow. A change of \\eR setting can be combined with a change of newline\nconvention.\n.\n.\n.SS \"Specifying what \\eR matches\"\n.rs\n.sp\nIt is possible to restrict \\eR to match only CR, LF, or CRLF (instead of the\ncomplete set of Unicode line endings) by setting the option PCRE2_BSR_ANYCRLF\nat compile time. This effect can also be achieved by starting a pattern with\n(*BSR_ANYCRLF). For completeness, (*BSR_UNICODE) is also recognized,\ncorresponding to PCRE2_BSR_UNICODE.\n.\n.\n.SH \"CHARACTERS AND METACHARACTERS\"\n.rs\n.sp\nA regular expression is a pattern that is matched against a subject string from\nleft to right. Most characters stand for themselves in a pattern, and match the\ncorresponding characters in the subject. As a trivial example, the pattern\n.sp\n  The quick brown fox\n.sp\nmatches a portion of a subject string that is identical to itself. When\ncaseless matching is specified (the PCRE2_CASELESS option or (?i) within the\npattern), letters are matched independently of case. Note that there are two\nASCII characters, K and S, that, in addition to their lower case ASCII\nequivalents, are case-equivalent with Unicode U+212A (Kelvin sign) and U+017F\n(long S) respectively when either PCRE2_UTF or PCRE2_UCP is set, unless the\nPCRE2_EXTRA_CASELESS_RESTRICT option is in force (either passed to\n\\fBpcre2_compile()\\fP or set by (*CASELESS_RESTRICT) or (?r) within the\npattern). If the PCRE2_EXTRA_TURKISH_CASING option is in force (either passed\nto \\fBpcre2_compile()\\fP or set by (*TURKISH_CASING) within the pattern), then\nthe 'i' letters are matched according to Turkish and Azeri languages.\n.P\nThe power of regular expressions comes from the ability to include wild cards,\ncharacter classes, alternatives, and repetitions in the pattern. These are\nencoded in the pattern by the use of \\fImetacharacters\\fP, which do not stand\nfor themselves but instead are interpreted in some special way.\n.P\nThere are two different sets of metacharacters: those that are recognized\nanywhere in the pattern except within square brackets, and those that are\nrecognized within square brackets. Outside square brackets, the metacharacters\nare as follows:\n.sp\n  \\e      general escape character with several uses\n  ^      assert start of string (or line, in multiline mode)\n  $      assert end of string (or line, in multiline mode)\n  .      match any character except newline (by default)\n  [      start character class definition\n  |      start of alternative branch\n  (      start group or control verb\n  )      end group or control verb\n  *      0 or more quantifier\n  +      1 or more quantifier; also \"possessive quantifier\"\n  ?      0 or 1 quantifier; also quantifier minimizer\n  {      potential start of min/max quantifier\n.sp\nBrace characters { and } are also used to enclose data for constructions such\nas \\eg{2} or \\ek{name}. In almost all uses of braces, space and/or horizontal\ntab characters that follow { or precede } are allowed and are ignored. In the\ncase of quantifiers, they may also appear before or after the comma. The\nexception to this is \\eu{...} which is an ECMAScript compatibility feature\nthat is recognized only when the PCRE2_EXTRA_ALT_BSUX option is set. ECMAScript\ndoes not ignore such white space; it causes the item to be interpreted as\nliteral.\n.P\nPart of a pattern that is in square brackets is called a \"character class\". In\na character class the only metacharacters are:\n.sp\n  \\e      general escape character\n  ^      negate the class, but only if the first character\n  -      indicates character range\n  [      POSIX character class (if followed by POSIX syntax)\n  ]      terminates the character class\n.sp\nIf a pattern is compiled with the PCRE2_EXTENDED option, most white space in\nthe pattern, other than in a character class, within a \\eQ...\\eE sequence, or\nbetween a # outside a character class and the next newline, inclusive, is\nignored. An escaping backslash can be used to include a white space or a #\ncharacter as part of the pattern. If the PCRE2_EXTENDED_MORE option is set, the\nsame applies, but in addition unescaped space and horizontal tab characters are\nignored inside a character class. Note: only these two characters are ignored,\nnot the full set of pattern white space characters that are ignored outside a\ncharacter class. Option settings can be changed within a pattern; see the\nsection entitled\n.\\\" HTML <a href=\"#internaloptions\">\n.\\\" </a>\n\"Internal Option Setting\"\n.\\\"\nbelow.\n.P\nThe following sections describe the use of each of the metacharacters.\n.\n.\n.SH BACKSLASH\n.rs\n.sp\nThe backslash character has several uses. Firstly, if it is followed by a\ncharacter that is not a digit or a letter, it takes away any special meaning\nthat character may have. This use of backslash as an escape character applies\nboth inside and outside character classes.\n.P\nFor example, if you want to match a * character, you must write \\e* in the\npattern. This escaping action applies whether or not the following character\nwould otherwise be interpreted as a metacharacter, so it is always safe to\nprecede a non-alphanumeric with backslash to specify that it stands for itself.\nIn particular, if you want to match a backslash, you write \\e\\e.\n.P\nOnly ASCII digits and letters have any special meaning after a backslash. All\nother characters (in particular, those whose code points are greater than 127)\nare treated as literals.\n.P\nIf you want to treat all characters in a sequence as literals, you can do so by\nputting them between \\eQ and \\eE. Note that this includes white space even when\nthe PCRE2_EXTENDED option is set so that most other white space is ignored. The\nbehaviour is different from Perl in that $ and @ are handled as literals in\n\\eQ...\\eE sequences in PCRE2, whereas in Perl, $ and @ cause variable\ninterpolation. Also, Perl does \"double-quotish backslash interpolation\" on any\nbackslashes between \\eQ and \\eE which, its documentation says, \"may lead to\nconfusing results\". PCRE2 treats a backslash between \\eQ and \\eE just like any\nother character. Note the following examples:\n.sp\n  Pattern            PCRE2 matches   Perl matches\n.sp\n.\\\" JOIN\n  \\eQabc$xyz\\eE        abc$xyz        abc followed by the\n                                      contents of $xyz\n  \\eQabc\\e$xyz\\eE       abc\\e$xyz       abc\\e$xyz\n  \\eQabc\\eE\\e$\\eQxyz\\eE   abc$xyz        abc$xyz\n  \\eQA\\eB\\eE            A\\eB            A\\eB\n  \\eQ\\e\\eE              \\e              \\e\\eE\n.sp\nThe \\eQ...\\eE sequence is recognized both inside and outside character classes.\nAn isolated \\eE that is not preceded by \\eQ is ignored. If \\eQ is not followed\nby \\eE later in the pattern, the literal interpretation continues to the end of\nthe pattern (that is, \\eE is assumed at the end). If the isolated \\eQ is inside\na character class, this causes an error, because the character class is then\nnot terminated by a closing square bracket.\n.P\nAnother difference from Perl is that any appearance of \\eQ or \\eE inside what\nmight otherwise be a quantifier causes PCRE2 not to recognize the sequence as a\nquantifier. Perl recognizes a quantifier if (redundantly) either of the numbers\nis inside \\eQ...\\eE, but not if the separating comma is. When not recognized as\na quantifier a sequence such as {\\eQ1\\eE,2} is treated as the literal string\n\"{1,2}\".\n.\n.\n.\\\" HTML <a name=\"digitsafterbackslash\"></a>\n.SS \"Non-printing characters\"\n.rs\n.sp\nA second use of backslash provides a way of encoding non-printing characters\nin patterns in a visible manner. There is no restriction on the appearance of\nnon-printing characters in a pattern, but when a pattern is being prepared by\ntext editing, it is often easier to use one of the following escape sequences\ninstead of the binary character it represents. In an ASCII or Unicode\nenvironment, these escapes are as follows:\n.sp\n  \\ea          alarm, that is, the BEL character (hex 07)\n  \\ecx         \"control-x\", where x is a non-control ASCII character\n  \\ee          escape (hex 1B)\n  \\ef          form feed (hex 0C)\n  \\en          linefeed (hex 0A)\n  \\er          carriage return (hex 0D) (but see below)\n  \\et          tab (hex 09)\n  \\e0dd        character with octal code 0dd\n  \\eddd        character with octal code ddd, or back reference\n  \\eo{ddd..}   character with octal code ddd..\n  \\exhh        character with hex code hh\n  \\ex{hhh..}   character with hex code hhh..\n  \\eN{U+hhh..} character with Unicode hex code point hhh..\n.sp\nA description of how back references work is given\n.\\\" HTML <a href=\"#backreferences\">\n.\\\" </a>\nlater,\n.\\\"\nfollowing the discussion of\n.\\\" HTML <a href=\"#group\">\n.\\\" </a>\nparenthesized groups.\n.\\\"\n.P\nBy default, after \\ex that is not followed by {, one or two hexadecimal\ndigits are read (letters can be in upper or lower case). If the character that\nfollows \\ex is neither { nor a hexadecimal digit, an error occurs. This is\ndifferent from Perl's default behaviour, which generates a NUL character, but\nis in line with the behaviour of Perl's 'strict' mode in re.\n.P\nAny number of hexadecimal digits may appear between \\ex{ and }. If a character\nother than a hexadecimal digit appears between \\ex{ and }, or if there is no\nterminating }, an error occurs.\n.P\nCharacters whose code points are less than 256 can be defined by either of the\ntwo syntaxes for \\ex or by an octal sequence. There is no difference in the way\nthey are handled. For example, \\exdc is exactly the same as \\ex{dc} or \\e334.\nHowever, using the braced versions does make such sequences easier to read.\n.P\nSupport is available for some ECMAScript (aka JavaScript) escape sequences via\ntwo compile-time options. If PCRE2_ALT_BSUX is set, the sequence \\ex followed\nby { is not recognized. Only if \\ex is followed by two hexadecimal digits is it\nrecognized as a character escape. Otherwise it is interpreted as a literal \"x\"\ncharacter. In this mode, support for code points greater than 256 is provided\nby \\eu, which must be followed by four hexadecimal digits; otherwise it is\ninterpreted as a literal \"u\" character.\n.P\nPCRE2_EXTRA_ALT_BSUX has the same effect as PCRE2_ALT_BSUX and, in addition,\n\\eu{hhh..} is recognized as the character specified by hexadecimal code point.\nThere may be any number of hexadecimal digits, but unlike other places that\nalso use curly brackets, spaces are not allowed and would result in the string\nbeing interpreted as a literal. This syntax is from ECMAScript 6.\n.P\nThe \\eN{U+hhh..} escape sequence is recognized only when PCRE2 is operating in\nUTF mode. Perl also uses \\eN{name} to specify characters by Unicode name; PCRE2\ndoes not support this. Note that when \\eN is not followed by an opening brace\n(curly bracket) it has an entirely different meaning, matching any character\nthat is not a newline.\n.P\nThere are some legacy applications where the escape sequence \\er is expected to\nmatch a newline. If the PCRE2_EXTRA_ESCAPED_CR_IS_LF option is set, \\er in a\npattern is converted to \\en so that it matches a LF (linefeed) instead of a CR\n(carriage return) character.\n.P\nAn error occurs if \\ec is not followed by a character whose ASCII code point\nis in the range 32 to 126. The precise effect of \\ecx is as follows: if x is a\nlower case letter, it is converted to upper case. Then bit 6 of the character\n(hex 40) is inverted. Thus \\ecA to \\ecZ become hex 01 to hex 1A (A is 41, Z is\n5A), but \\ec{ becomes hex 3B ({ is 7B), and \\ec; becomes hex 7B (; is 3B). If\nthe code unit following \\ec has a code point less than 32 or greater than 126,\na compile-time error occurs.\n.P\nFor differences in the way some escapes behave in EBCDIC environments,\nsee section\n.\\\" HTML <a href=\"#ebcdicenvironments\">\n.\\\" </a>\n\"EBCDIC environments\"\n.\\\"\nbelow.\n.\n.\n.SS \"Octal escapes and back references\"\n.rs\n.sp\nThe escape \\eo must be followed by a sequence of octal digits, enclosed in\nbraces. An error occurs if this is not the case. This escape provides a way of\nspecifying character code points as octal numbers greater than 0777, and it\nalso allows octal numbers and backreferences to be unambiguously distinguished.\n.P\nIf braces are not used, after \\e0 up to two further octal digits are read.\nHowever, if the PCRE2_EXTRA_NO_BS0 option is set, at least one more octal digit\nmust follow \\e0 (use \\e00 to generate a NUL character). Make sure you supply\ntwo digits after the initial zero if the pattern character that follows is\nitself an octal digit.\n.P\nInside a character class, when a backslash is followed by any octal digit, up\nto three octal digits are read to generate a code point. Any subsequent digits\nstand for themselves. The sequences \\e8 and \\e9 are treated as the literal\ncharacters \"8\" and \"9\".\n.P\nOutside a character class, Perl's handling of a backslash followed by a digit\nother than 0 is complicated by ambiguity, and Perl has changed over time,\ncausing PCRE2 also to change. From PCRE2 release 10.45 there is an option\ncalled PCRE2_EXTRA_PYTHON_OCTAL that causes PCRE2 to use Python's unambiguous\nrules. The next two subsections describe the two sets of rules.\n.P\nFor greater clarity and unambiguity, it is best to avoid following \\e by a\ndigit greater than zero. Instead, use \\eo{...} or \\ex{...} to specify numerical\ncharacter code points, and \\eg{...} to specify backreferences.\n.\n.\n.SS \"Perl rules for non-class backslash 1-9\"\n.rs\n.sp\nAll the digits that follow the backslash are read as a decimal number. If the\nnumber is less than 10, begins with the digit 8 or 9, or if there are at least\nthat many previous capture groups in the expression, the entire sequence is\ntaken as a back reference. Otherwise, up to three octal digits are read to form\na character code. For example:\n.sp\n  \\e040   is another way of writing an ASCII space\n.\\\" JOIN\n  \\e40    is the same, provided there are fewer than 40\n            previous capture groups\n  \\e7     is always a backreference\n.\\\" JOIN\n  \\e11    might be a backreference, or another way of\n            writing a tab\n  \\e011   is always a tab\n  \\e0113  is a tab followed by the character \"3\"\n.\\\" JOIN\n  \\e113   might be a backreference, otherwise the\n            character with octal code 113\n.\\\" JOIN\n  \\e377   might be a backreference, otherwise\n            the value 255 (decimal)\n  \\e81    is always a backreference\n.sp\nNote that octal values of 100 or greater that are specified using this syntax\nmust not be introduced by a leading zero, because no more than three octal\ndigits are ever read.\n.\n.\n.SS \"Python rules for non_class backslash 1-9\"\n.rs\n.sp\nIf there are at least three octal digits after the backslash, exactly three are\nread as an octal code point number, but the value must be no greater than\n\\e377, even in modes where higher code point values are supported. Any\nsubsequent digits stand for themselves. If there are fewer than three octal\ndigits, the sequence is taken as a decimal back reference. Thus, for example,\n\\e12 is always a back reference, independent of how many captures there are in\nthe pattern. An error is generated for a reference to a non-existent capturing\ngroup.\n.\n.\n.SS \"Constraints on character values\"\n.rs\n.sp\nCharacters that are specified using octal or hexadecimal numbers are\nlimited to certain values, as follows:\n.sp\n  8-bit non-UTF mode    no greater than 0xff\n  16-bit non-UTF mode   no greater than 0xffff\n  32-bit non-UTF mode   no greater than 0xffffffff\n  All UTF modes         no greater than 0x10ffff and a valid code point\n.sp\nInvalid Unicode code points are all those in the range 0xd800 to 0xdfff (the\nso-called \"surrogate\" code points). The check for these can be disabled by the\ncaller of \\fBpcre2_compile()\\fP by setting the option\nPCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES. However, this is possible only in UTF-8\nand UTF-32 modes, because these values are not representable in UTF-16.\n.\n.\n.SS \"Escape sequences in character classes\"\n.rs\n.sp\nAll the sequences that define a single character value can be used both inside\nand outside character classes. In addition, inside a character class, \\eb is\ninterpreted as the backspace character (hex 08).\n.P\nWhen not followed by an opening brace, \\eN is not allowed in a character class.\n\\eB, \\eR, and \\eX are not special inside a character class. Like other\nunrecognized alphabetic escape sequences, they cause an error. Outside a\ncharacter class, these sequences have different meanings.\n.\n.\n.SS \"Unsupported escape sequences\"\n.rs\n.sp\nIn Perl, the sequences \\eF, \\el, \\eL, \\eu, and \\eU are recognized by its string\nhandler and used to modify the case of following characters. By default, PCRE2\ndoes not support these escape sequences in patterns. However, if either of the\nPCRE2_ALT_BSUX or PCRE2_EXTRA_ALT_BSUX options is set, \\eU matches a \"U\"\ncharacter, and \\eu can be used to define a character by code point, as\ndescribed above.\n.\n.\n.SS \"Absolute and relative backreferences\"\n.rs\n.sp\nThe sequence \\eg followed by a signed or unsigned number, optionally enclosed\nin braces, is an absolute or relative backreference. A named backreference\ncan be coded as \\eg{name}. Backreferences are discussed\n.\\\" HTML <a href=\"#backreferences\">\n.\\\" </a>\nlater,\n.\\\"\nfollowing the discussion of\n.\\\" HTML <a href=\"#group\">\n.\\\" </a>\nparenthesized groups.\n.\\\"\n.\n.\n.SS \"Absolute and relative subroutine calls\"\n.rs\n.sp\nFor compatibility with Oniguruma, the non-Perl syntax \\eg followed by a name or\na number enclosed either in angle brackets or single quotes, is an alternative\nsyntax for referencing a capture group as a subroutine. Details are discussed\n.\\\" HTML <a href=\"#onigurumasubroutines\">\n.\\\" </a>\nlater.\n.\\\"\nNote that \\eg{...} (Perl syntax) and \\eg<...> (Oniguruma syntax) are \\fInot\\fP\nsynonymous. The former is a backreference; the latter is a\n.\\\" HTML <a href=\"#groupsassubroutines\">\n.\\\" </a>\nsubroutine\n.\\\"\ncall.\n.\n.\n.\\\" HTML <a name=\"genericchartypes\"></a>\n.SS \"Generic character types\"\n.rs\n.sp\nAnother use of backslash is for specifying generic character types:\n.sp\n  \\ed     any decimal digit\n  \\eD     any character that is not a decimal digit\n  \\eh     any horizontal white space character\n  \\eH     any character that is not a horizontal white space character\n  \\eN     any character that is not a newline\n  \\es     any white space character\n  \\eS     any character that is not a white space character\n  \\ev     any vertical white space character\n  \\eV     any character that is not a vertical white space character\n  \\ew     any \"word\" character\n  \\eW     any \"non-word\" character\n.sp\nThe \\eN escape sequence has the same meaning as\n.\\\" HTML <a href=\"#fullstopdot\">\n.\\\" </a>\nthe \".\" metacharacter\n.\\\"\nwhen PCRE2_DOTALL is not set, but setting PCRE2_DOTALL does not change the\nmeaning of \\eN. Note that when \\eN is followed by an opening brace it has a\ndifferent meaning. See the section entitled\n.\\\" HTML <a href=\"#digitsafterbackslash\">\n.\\\" </a>\n\"Non-printing characters\"\n.\\\"\nabove for details. Perl also uses \\eN{name} to specify characters by Unicode\nname; PCRE2 does not support this.\n.P\nEach pair of lower and upper case escape sequences partitions the complete set\nof characters into two disjoint sets. Any given character matches one, and only\none, of each pair. The sequences can appear both inside and outside character\nclasses. They each match one character of the appropriate type. If the current\nmatching point is at the end of the subject string, all of them fail, because\nthere is no character to match.\n.P\nThe default \\es characters are HT (9), LF (10), VT (11), FF (12), CR (13), and\nspace (32), which are defined as white space in the \"C\" locale. This list may\nvary if locale-specific matching is taking place. For example, in some locales\nthe \"non-breaking space\" character (\\exA0) is recognized as white space, and in\nothers the VT character is not.\n.P\nA \"word\" character is an underscore or any character that is a letter or digit.\nBy default, the definition of letters and digits is controlled by PCRE2's\nlow-valued character tables, and may vary if locale-specific matching is taking\nplace (see\n.\\\" HTML <a href=\"pcre2api.html#localesupport\">\n.\\\" </a>\n\"Locale support\"\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage). For example, in a French locale such as \"fr_FR\" in Unix-like systems,\nor \"french\" in Windows, some character codes greater than 127 are used for\naccented letters, and these are then matched by \\ew. The use of locales with\nUnicode is discouraged.\n.P\nBy default, characters whose code points are greater than 127 never match \\ed,\n\\es, or \\ew, and always match \\eD, \\eS, and \\eW, although this may be different\nfor characters in the range 128-255 when locale-specific matching is happening.\nThese escape sequences retain their original meanings from before Unicode\nsupport was available, mainly for efficiency reasons. If the PCRE2_UCP option\nis set, the behaviour is changed so that Unicode properties are used to\ndetermine character types, as follows:\n.sp\n  \\ed  any character that matches \\ep{Nd} (decimal digit)\n  \\es  any character that matches \\ep{Z} or \\eh or \\ev\n  \\ew  any character that matches \\ep{L}, \\ep{N}, \\ep{Mn}, or \\ep{Pc}\n.sp\nThe addition of \\ep{Mn} (non-spacing mark) and the replacement of an explicit\ntest for underscore with a test for \\ep{Pc} (connector punctuation) happened in\nPCRE2 release 10.43. This brings PCRE2 into line with Perl.\n.P\nThe upper case escapes match the inverse sets of characters. Note that \\ed\nmatches only decimal digits, whereas \\ew matches any Unicode digit, as well as\nother character categories. Note also that PCRE2_UCP affects \\eb, and\n\\eB because they are defined in terms of \\ew and \\eW. Matching these sequences\nis noticeably slower when PCRE2_UCP is set.\n.P\nThe effect of PCRE2_UCP on any one of these escape sequences can be negated by\nthe options PCRE2_EXTRA_ASCII_BSD, PCRE2_EXTRA_ASCII_BSS, and\nPCRE2_EXTRA_ASCII_BSW, respectively. These options can be set and reset within\na pattern by means of an internal option setting\n.\\\" HTML <a href=\"#internaloptions\">\n.\\\" </a>\n(see below).\n.\\\"\n.P\nThe sequences \\eh, \\eH, \\ev, and \\eV, in contrast to the other sequences, which\nmatch only ASCII characters by default, always match a specific list of code\npoints, whether or not PCRE2_UCP is set. The horizontal space characters are:\n.sp\n  U+0009     Horizontal tab (HT)\n  U+0020     Space\n  U+00A0     Non-break space\n  U+1680     Ogham space mark\n  U+180E     Mongolian vowel separator\n  U+2000     En quad\n  U+2001     Em quad\n  U+2002     En space\n  U+2003     Em space\n  U+2004     Three-per-em space\n  U+2005     Four-per-em space\n  U+2006     Six-per-em space\n  U+2007     Figure space\n  U+2008     Punctuation space\n  U+2009     Thin space\n  U+200A     Hair space\n  U+202F     Narrow no-break space\n  U+205F     Medium mathematical space\n  U+3000     Ideographic space\n.sp\nThe vertical space characters are:\n.sp\n  U+000A     Linefeed (LF)\n  U+000B     Vertical tab (VT)\n  U+000C     Form feed (FF)\n  U+000D     Carriage return (CR)\n  U+0085     Next line (NEL)\n  U+2028     Line separator\n  U+2029     Paragraph separator\n.sp\nIn 8-bit, non-UTF-8 mode, only the characters with code points less than 256\nare relevant.\n.\n.\n.\\\" HTML <a name=\"newlineseq\"></a>\n.SS \"Newline sequences\"\n.rs\n.sp\nOutside a character class, by default, the escape sequence \\eR matches any\nUnicode newline sequence. In 8-bit non-UTF-8 mode \\eR is equivalent to the\nfollowing:\n.sp\n  (?>\\er\\en|\\en|\\ex0b|\\ef|\\er|\\ex85)\n.sp\nThis is an example of an \"atomic group\", details of which are given\n.\\\" HTML <a href=\"#atomicgroup\">\n.\\\" </a>\nbelow.\n.\\\"\nThis particular group matches either the two-character sequence CR followed by\nLF, or one of the single characters LF (linefeed, U+000A), VT (vertical tab,\nU+000B), FF (form feed, U+000C), CR (carriage return, U+000D), or NEL (next\nline, U+0085). Because this is an atomic group, the two-character sequence is\ntreated as a single unit that cannot be split.\n.P\nIn other modes, two additional characters whose code points are greater than 255\nare added: LS (line separator, U+2028) and PS (paragraph separator, U+2029).\nUnicode support is not needed for these characters to be recognized.\n.P\nIt is possible to restrict \\eR to match only CR, LF, or CRLF (instead of the\ncomplete set of Unicode line endings) by setting the option PCRE2_BSR_ANYCRLF\nat compile time. (BSR is an abbreviation for \"backslash R\".) This can be made\nthe default when PCRE2 is built; if this is the case, the other behaviour can\nbe requested via the PCRE2_BSR_UNICODE option. It is also possible to specify\nthese settings by starting a pattern string with one of the following\nsequences:\n.sp\n  (*BSR_ANYCRLF)   CR, LF, or CRLF only\n  (*BSR_UNICODE)   any Unicode newline sequence\n.sp\nThese override the default and the options given to the compiling function.\nNote that these special settings, which are not Perl-compatible, are recognized\nonly at the very start of a pattern, and that they must be in upper case. If\nmore than one of them is present, the last one is used. They can be combined\nwith a change of newline convention; for example, a pattern can start with:\n.sp\n  (*ANY)(*BSR_ANYCRLF)\n.sp\nThey can also be combined with the (*UTF) or (*UCP) special sequences. Inside a\ncharacter class, \\eR is treated as an unrecognized escape sequence, and causes\nan error.\n.\n.\n.\\\" HTML <a name=\"uniextseq\"></a>\n.SS Unicode character properties\n.rs\n.sp\nWhen PCRE2 is built with Unicode support (the default), three additional escape\nsequences that match characters with specific properties are available. They\ncan be used in any mode, though in 8-bit and 16-bit non-UTF modes these\nsequences are of course limited to testing characters whose code points are\nless than U+0100 or U+10000, respectively. In 32-bit non-UTF mode, code points\ngreater than 0x10ffff (the Unicode limit) may be encountered. These are all\ntreated as being in the Unknown script and with an unassigned type.\n.P\nMatching characters by Unicode property is not fast, because PCRE2 has to do a\nmultistage table lookup in order to find a character's property. That is why\nthe traditional escape sequences such as \\ed and \\ew do not use Unicode\nproperties in PCRE2 by default, though you can make them do so by setting the\nPCRE2_UCP option or by starting the pattern with (*UCP).\n.P\nThe extra escape sequences that provide property support are:\n.sp\n  \\ep{\\fIxx\\fP}   a character with the \\fIxx\\fP property\n  \\eP{\\fIxx\\fP}   a character without the \\fIxx\\fP property\n  \\eX       a Unicode extended grapheme cluster\n.sp\nFor compatibility with Perl, negation can be specified by including a\ncircumflex between the opening brace and the property. For example, \\ep{^Lu} is\nthe same as \\eP{Lu}.\n.P\nIn accordance with Unicode's \"loose matching\" rules, ASCII white space\ncharacters, hyphens, and underscores are ignored in the properties represented\nby \\fIxx\\fP above. As well as the space character, ASCII white space can be\ntab, linefeed, vertical tab, formfeed, or carriage return.\n.P\nSome properties are specified as a name only; others as a name and a value,\nseparated by a colon or an equals sign. The names and values consist of ASCII\nletters and digits (with one Perl-specific exception, see below). They are not\ncase sensitive. Note, however, that the escapes themselves, \\ep and \\eP,\n\\fIare\\fP case sensitive. There are abbreviations for many names. The following\nexamples are all equivalent:\n.sp\n  \\ep{bidiclass=al}\n  \\ep{BC=al}\n  \\ep{ Bidi_Class : AL }\n  \\ep{ Bi-di class = Al }\n  \\eP{ ^ Bi-di class = Al }\n.sp\nThere is support for Unicode script names, Unicode general category properties,\n\"Any\", which matches any character (including newline), Bidi_Class, a number of\nbinary (yes/no) properties, and some special PCRE2 properties (described\n.\\\" HTML <a href=\"#extraprops\">\n.\\\" </a>\nbelow).\n.\\\"\nCertain other Perl properties such as \"InMusicalSymbols\" are not supported by\nPCRE2. Note that \\eP{Any} does not match any characters, so always causes a\nmatch failure.\n.\n.\n.\n.SS \"Script properties for \\ep and \\eP\"\n.rs\n.sp\nThere are three different syntax forms for matching a script. Each Unicode\ncharacter has a basic script and, optionally, a list of other scripts (\"Script\nExtensions\") with which it is commonly used. Using the Adlam script as an\nexample, \\ep{sc:Adlam} matches characters whose basic script is Adlam, whereas\n\\ep{scx:Adlam} matches, in addition, characters that have Adlam in their\nextensions list. The full names \"script\" and \"script extensions\" for the\nproperty types are recognized and, as for all property specifications, an\nequals sign is an alternative to the colon. If a script name is given without a\nproperty type, for example, \\ep{Adlam}, it is treated as \\ep{scx:Adlam}. Perl\nchanged to this interpretation at release 5.26 and PCRE2 changed at release\n10.40.\n.P\nUnassigned characters (and in non-UTF 32-bit mode, characters with code points\ngreater than 0x10FFFF) are assigned the \"Unknown\" script. Others that are not\npart of an identified script are lumped together as \"Common\". The current list\nof recognized script names and their 4-character abbreviations can be obtained\nby running this command:\n.sp\n  pcre2test -LS\n.sp\n.\n.\n.\n.SS \"The general category property for \\ep and \\eP\"\n.rs\n.sp\nEach character has exactly one Unicode general category property, specified by\na two-letter abbreviation. If only one letter is specified with \\ep or \\eP, it\nincludes all the general category properties that start with that letter. In\nthis case, in the absence of negation, the curly brackets in the escape\nsequence are optional; these two examples have the same effect:\n.sp\n  \\ep{L}\n  \\epL\n.sp\nThe following general category property codes are supported:\n.sp\n  C     Other\n  Cc    Control\n  Cf    Format\n  Cn    Unassigned\n  Co    Private use\n  Cs    Surrogate\n.sp\n  L     Letter\n  Lc    Cased letter\n  Ll    Lower case letter\n  Lm    Modifier letter\n  Lo    Other letter\n  Lt    Title case letter\n  Lu    Upper case letter\n.sp\n  M     Mark\n  Mc    Spacing mark\n  Me    Enclosing mark\n  Mn    Non-spacing mark\n.sp\n  N     Number\n  Nd    Decimal number\n  Nl    Letter number\n  No    Other number\n.sp\n  P     Punctuation\n  Pc    Connector punctuation\n  Pd    Dash punctuation\n  Pe    Close punctuation\n  Pf    Final punctuation\n  Pi    Initial punctuation\n  Po    Other punctuation\n  Ps    Open punctuation\n.sp\n  S     Symbol\n  Sc    Currency symbol\n  Sk    Modifier symbol\n  Sm    Mathematical symbol\n  So    Other symbol\n.sp\n  Z     Separator\n  Zl    Line separator\n  Zp    Paragraph separator\n  Zs    Space separator\n.sp\nPerl originally used the name L& for the Lc property. This is still supported\nby Perl, but discouraged. PCRE2 also still supports it. This property matches\nany character that has the Lu, Ll, or Lt property, in other words, any letter\nthat is not classified as a modifier or \"other\". From release 10.45 of PCRE2\nthe properties Lu, Ll, and Lt are all treated as Lc when case-independent\nmatching is set by the PCRE2_CASELESS option or (?i) within the pattern. The\nother properties are not affected by caseless matching.\n.P\nThe Cs (Surrogate) property applies only to characters whose code points are in\nthe range U+D800 to U+DFFF. These characters are no different to any other\ncharacter when PCRE2 is not in UTF mode (using the 16-bit or 32-bit library).\nHowever, they are not valid in Unicode strings and so cannot be tested by PCRE2\nin UTF mode, unless UTF validity checking has been turned off (see the\ndiscussion of PCRE2_NO_UTF_CHECK in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\npage).\n.P\nThe long synonyms for property names that Perl supports (such as \\ep{Letter})\nare not supported by PCRE2, nor is it permitted to prefix any of these\nproperties with \"Is\".\n.P\nNo character that is in the Unicode table has the Cn (unassigned) property.\nInstead, this property is assumed for any code point that is not in the\nUnicode table.\n.\n.\n.SS \"Binary (yes/no) properties for \\ep and \\eP\"\n.rs\n.sp\nUnicode defines a number of binary properties, that is, properties whose only\nvalues are true or false. You can obtain a list of those that are recognized by\n\\ep and \\eP, along with their abbreviations, by running this command:\n.sp\n  pcre2test -LP\n.sp\n.\n.\n.SS \"The Bidi_Class property for \\ep and \\eP\"\n.rs\n.sp\n  \\ep{Bidi_Class:<class>}   matches a character with the given class\n  \\ep{BC:<class>}           matches a character with the given class\n.sp\nThe recognized classes are:\n.sp\n  AL          Arabic letter\n  AN          Arabic number\n  B           paragraph separator\n  BN          boundary neutral\n  CS          common separator\n  EN          European number\n  ES          European separator\n  ET          European terminator\n  FSI         first strong isolate\n  L           left-to-right\n  LRE         left-to-right embedding\n  LRI         left-to-right isolate\n  LRO         left-to-right override\n  NSM         non-spacing mark\n  ON          other neutral\n  PDF         pop directional format\n  PDI         pop directional isolate\n  R           right-to-left\n  RLE         right-to-left embedding\n  RLI         right-to-left isolate\n  RLO         right-to-left override\n  S           segment separator\n  WS          white space\n.sp\nAs in all property specifications, an equals sign may be used instead of a\ncolon and the class names are case-insensitive. Only the short names listed\nabove are recognized; PCRE2 does not at present support any long alternatives.\n.\n.\n.SS Extended grapheme clusters\n.rs\n.sp\nThe \\eX escape matches any number of Unicode characters that form an \"extended\ngrapheme cluster\", and treats the sequence as an atomic group\n.\\\" HTML <a href=\"#atomicgroup\">\n.\\\" </a>\n(see below).\n.\\\"\nUnicode supports various kinds of composite character by giving each character\na grapheme breaking property, and having rules that use these properties to\ndefine the boundaries of extended grapheme clusters. The rules are defined in\nUnicode Standard Annex 29, \"Unicode Text Segmentation\". Unicode 11.0.0\nabandoned the use of some previous properties that had been used for emojis.\nInstead it introduced various emoji-specific properties. PCRE2 uses only the\nExtended Pictographic property.\n.P\n\\eX always matches at least one character. Then it decides whether to add\nadditional characters according to the following rules for ending a cluster:\n.P\n1. End at the end of the subject string.\n.P\n2. Do not end between CR and LF; otherwise end after any control character.\n.P\n3. Do not break Hangul (a Korean script) syllable sequences. Hangul characters\nare of five types: L, V, T, LV, and LVT. An L character may be followed by an\nL, V, LV, or LVT character; an LV or V character may be followed by a V or T\ncharacter; an LVT or T character may be followed only by a T character.\n.P\n4. Do not end before extending characters or spacing marks or the zero-width\njoiner (ZWJ) character. Characters with the \"mark\" property always have the\n\"extend\" grapheme breaking property.\n.P\n5. Do not end after prepend characters.\n.P\n6. Do not end within emoji modifier sequences or emoji ZWJ (zero-width\njoiner) sequences. An emoji ZWJ sequence consists of a character with the\nExtended_Pictographic property, optionally followed by one or more characters\nwith the Extend property, followed by the ZWJ character, followed by another\nExtended_Pictographic character.\n.P\n7. Do not break within emoji flag sequences. That is, do not break between\nregional indicator (RI) characters if there are an odd number of RI characters\nbefore the break point.\n.P\n8. Otherwise, end the cluster.\n.\n.\n.\\\" HTML <a name=\"extraprops\"></a>\n.SS PCRE2's additional properties\n.rs\n.sp\nAs well as the standard Unicode properties described above, PCRE2 supports four\nmore that make it possible to convert traditional escape sequences such as \\ew\nand \\es to use Unicode properties. PCRE2 uses these non-standard, non-Perl\nproperties internally when PCRE2_UCP is set. However, they may also be used\nexplicitly. These properties are:\n.sp\n  Xan   Any alphanumeric character\n  Xps   Any POSIX space character\n  Xsp   Any Perl space character\n  Xwd   Any Perl \"word\" character\n.sp\nXan matches characters that have either the L (letter) or the N (number)\nproperty. Xps matches the characters tab, linefeed, vertical tab, form feed, or\ncarriage return, and any other character that has the Z (separator) property\n(this includes the space character). Xsp is the same as Xps; in PCRE1 it used\nto exclude vertical tab, for Perl compatibility, but Perl changed. Xwd matches\nthe same characters as Xan, plus those that match Mn (non-spacing mark) or Pc\n(connector punctuation, which includes underscore).\n.P\nThere is another non-standard property, Xuc, which matches any character that\ncan be represented by a Universal Character Name in C++ and other programming\nlanguages. These are the characters $, @, ` (grave accent), and all characters\nwith Unicode code points greater than or equal to U+00A0, except for the\nsurrogates U+D800 to U+DFFF. Note that most base (ASCII) characters are\nexcluded. (Universal Character Names are of the form \\euHHHH or \\eUHHHHHHHH\nwhere H is a hexadecimal digit. Note that the Xuc property does not match these\nsequences but the characters that they represent.)\n.\n.\n.\\\" HTML <a name=\"resetmatchstart\"></a>\n.SS \"Resetting the match start\"\n.rs\n.sp\nIn normal use, the escape sequence \\eK causes any previously matched characters\nnot to be included in the final matched sequence that is returned. For example,\nthe pattern:\n.sp\n  foo\\eKbar\n.sp\nmatches \"foobar\", but reports that it has matched \"bar\". \\eK does not interact\nwith anchoring in any way. The pattern:\n.sp\n  ^foo\\eKbar\n.sp\nmatches only when the subject begins with \"foobar\" (in single line mode),\nthough it again reports the matched string as \"bar\". This feature is similar to\na lookbehind assertion\n.\\\" HTML <a href=\"#lookbehind\">\n.\\\" </a>\n(described below),\n.\\\"\nbut the part of the pattern that precedes \\eK is not constrained to match a\nlimited number of characters, as is required for a lookbehind assertion. The\nuse of \\eK does not interfere with the setting of\n.\\\" HTML <a href=\"#group\">\n.\\\" </a>\ncaptured substrings.\n.\\\"\nFor example, when the pattern\n.sp\n  (foo)\\eKbar\n.sp\nmatches \"foobar\", the first substring is still set to \"foo\".\n.P\nFrom version 5.32.0 Perl forbids the use of \\eK in lookaround assertions. From\nrelease 10.38 PCRE2 also forbids this by default. However, the\nPCRE2_EXTRA_ALLOW_LOOKAROUND_BSK option can be used when calling\n\\fBpcre2_compile()\\fP to re-enable the previous behaviour. When this option is\nset, \\eK is acted upon when it occurs inside positive assertions, but is\nignored in negative assertions. Note that when a pattern such as (?=ab\\eK)\nmatches, the reported start of the match can be greater than the end of the\nmatch. Using \\eK in a lookbehind assertion at the start of a pattern can also\nlead to odd effects. For example, consider this pattern:\n.sp\n  (?<=\\eKfoo)bar\n.sp\nIf the subject is \"foobar\", a call to \\fBpcre2_match()\\fP with a starting\noffset of 3 succeeds and reports the matching string as \"foobar\", that is, the\nstart of the reported match is earlier than where the match started.\n.\n.\n.\\\" HTML <a name=\"smallassertions\"></a>\n.SS \"Simple assertions\"\n.rs\n.sp\nThe final use of backslash is for certain simple assertions. An assertion\nspecifies a condition that has to be met at a particular point in a match,\nwithout consuming any characters from the subject string. The use of\ngroups for more complicated assertions is described\n.\\\" HTML <a href=\"#bigassertions\">\n.\\\" </a>\nbelow.\n.\\\"\nThe backslashed assertions are:\n.sp\n  \\eb     matches at a word boundary\n  \\eB     matches when not at a word boundary\n  \\eA     matches at the start of the subject\n  \\eZ     matches at the end of the subject\n          also matches before a newline at the end of the subject\n  \\ez     matches only at the end of the subject\n  \\eG     matches at the first matching position in the subject\n.sp\nInside a character class, \\eb has a different meaning; it matches the backspace\ncharacter. If any other of these assertions appears in a character class, an\n\"invalid escape sequence\" error is generated.\n.P\nA word boundary is a position in the subject string where the current character\nand the previous character do not both match \\ew or \\eW (i.e. one matches\n\\ew and the other matches \\eW), or the start or end of the string if the\nfirst or last character matches \\ew, respectively. When PCRE2 is built with\nUnicode support, the meanings of \\ew and \\eW can be changed by setting the\nPCRE2_UCP option. When this is done, it also affects \\eb and \\eB. Neither PCRE2\nnor Perl has a separate \"start of word\" or \"end of word\" metasequence. However,\nwhatever follows \\eb normally determines which it is. For example, the fragment\n\\eba matches \"a\" at the start of a word.\n.P\nThe \\eA, \\eZ, and \\ez assertions differ from the traditional circumflex and\ndollar (described in the next section) in that they only ever match at the very\nstart and end of the subject string, whatever options are set. Thus, they are\nindependent of multiline mode. These three assertions are not affected by the\nPCRE2_NOTBOL or PCRE2_NOTEOL options, which affect only the behaviour of the\ncircumflex and dollar metacharacters. However, if the \\fIstartoffset\\fP\nargument of \\fBpcre2_match()\\fP is non-zero, indicating that matching is to\nstart at a point other than the beginning of the subject, \\eA can never match.\nThe difference between \\eZ and \\ez is that \\eZ matches before a newline at the\nend of the string as well as at the very end, whereas \\ez matches only at the\nend.\n.P\nThe \\eG assertion is true only when the current matching position is at the\nstart point of the matching process, as specified by the \\fIstartoffset\\fP\nargument of \\fBpcre2_match()\\fP. It differs from \\eA when the value of\n\\fIstartoffset\\fP is non-zero. By calling \\fBpcre2_match()\\fP multiple times\nwith appropriate arguments, you can mimic Perl's /g option, and it is in this\nkind of implementation where \\eG can be useful.\n.P\nNote, however, that PCRE2's implementation of \\eG, being true at the starting\ncharacter of the matching process, is subtly different from Perl's, which\ndefines it as true at the end of the previous match. In Perl, these can be\ndifferent when the previously matched string was empty. Because PCRE2 does just\none match at a time, it cannot reproduce this behaviour.\n.P\nIf all the alternatives of a pattern begin with \\eG, the expression is anchored\nto the starting match position, and the \"anchored\" flag is set in the compiled\nregular expression.\n.\n.\n.SH \"CIRCUMFLEX AND DOLLAR\"\n.rs\n.sp\nThe circumflex and dollar metacharacters are zero-width assertions. That is,\nthey test for a particular condition being true without consuming any\ncharacters from the subject string. These two metacharacters are concerned with\nmatching the starts and ends of lines. If the newline convention is set so that\nonly the two-character sequence CRLF is recognized as a newline, isolated CR\nand LF characters are treated as ordinary data characters, and are not\nrecognized as newlines.\n.P\nOutside a character class, in the default matching mode, the circumflex\ncharacter is an assertion that is true only if the current matching point is at\nthe start of the subject string. If the \\fIstartoffset\\fP argument of\n\\fBpcre2_match()\\fP is non-zero, or if PCRE2_NOTBOL is set, circumflex can\nnever match if the PCRE2_MULTILINE option is unset. Inside a character class,\ncircumflex has an entirely different meaning\n.\\\" HTML <a href=\"#characterclass\">\n.\\\" </a>\n(see below).\n.\\\"\n.P\nCircumflex need not be the first character of the pattern if a number of\nalternatives are involved, but it should be the first thing in each alternative\nin which it appears if the pattern is ever to match that branch. If all\npossible alternatives start with a circumflex, that is, if the pattern is\nconstrained to match only at the start of the subject, it is said to be an\n\"anchored\" pattern. (There are also other constructs that can cause a pattern\nto be anchored.)\n.P\nThe dollar character is an assertion that is true only if the current matching\npoint is at the end of the subject string, or immediately before a newline at\nthe end of the string (by default), unless PCRE2_NOTEOL is set. Note, however,\nthat it does not actually match the newline. Dollar need not be the last\ncharacter of the pattern if a number of alternatives are involved, but it\nshould be the last item in any branch in which it appears. Dollar has no\nspecial meaning in a character class.\n.P\nThe meaning of dollar can be changed so that it matches only at the very end of\nthe string, by setting the PCRE2_DOLLAR_ENDONLY option at compile time. This\ndoes not affect the \\eZ assertion.\n.P\nThe meanings of the circumflex and dollar metacharacters are changed if the\nPCRE2_MULTILINE option is set. When this is the case, a dollar character\nmatches before any newlines in the string, as well as at the very end, and a\ncircumflex matches immediately after internal newlines as well as at the start\nof the subject string. It does not match after a newline that ends the string,\nfor compatibility with Perl. However, this can be changed by setting the\nPCRE2_ALT_CIRCUMFLEX option.\n.P\nFor example, the pattern /^abc$/ matches the subject string \"def\\enabc\" (where\n\\en represents a newline) in multiline mode, but not otherwise. Consequently,\npatterns that are anchored in single line mode because all branches start with\n^ are not anchored in multiline mode, and a match for circumflex is possible\nwhen the \\fIstartoffset\\fP argument of \\fBpcre2_match()\\fP is non-zero. The\nPCRE2_DOLLAR_ENDONLY option is ignored if PCRE2_MULTILINE is set.\n.P\nWhen the newline convention (see\n.\\\" HTML <a href=\"#newlines\">\n.\\\" </a>\n\"Newline conventions\"\n.\\\"\nbelow) recognizes the two-character sequence CRLF as a newline, this is\npreferred, even if the single characters CR and LF are also recognized as\nnewlines. For example, if the newline convention is \"any\", a multiline mode\ncircumflex matches before \"xyz\" in the string \"abc\\er\\enxyz\" rather than after\nCR, even though CR on its own is a valid newline. (It also matches at the very\nstart of the string, of course.)\n.P\nNote that the sequences \\eA, \\eZ, and \\ez can be used to match the start and\nend of the subject in both modes, and if all branches of a pattern start with\n\\eA it is always anchored, whether or not PCRE2_MULTILINE is set.\n.\n.\n.\\\" HTML <a name=\"fullstopdot\"></a>\n.SH \"FULL STOP (PERIOD, DOT) AND \\eN\"\n.rs\n.sp\nOutside a character class, a dot in the pattern matches any one character in\nthe subject string except (by default) a character that signifies the end of a\nline. One or more characters may be specified as line terminators (see\n.\\\" HTML <a href=\"#newlines\">\n.\\\" </a>\n\"Newline conventions\"\n.\\\"\nabove).\n.P\nDot never matches a single line-ending character. When the two-character\nsequence CRLF is the only line ending, dot does not match CR if it is\nimmediately followed by LF, but otherwise it matches all characters (including\nisolated CRs and LFs). When ANYCRLF is selected for line endings, no occurrences\nof CR of LF match dot. When all Unicode line endings are being recognized, dot\ndoes not match CR or LF or any of the other line ending characters.\n.P\nThe behaviour of dot with regard to newlines can be changed. If the\nPCRE2_DOTALL option is set, a dot matches any one character, without exception.\nIf the two-character sequence CRLF is present in the subject string, it takes\ntwo dots to match it.\n.P\nThe handling of dot is entirely independent of the handling of circumflex and\ndollar, the only relationship being that they both involve newlines. Dot has no\nspecial meaning in a character class.\n.P\nThe escape sequence \\eN when not followed by an opening brace behaves like a\ndot, except that it is not affected by the PCRE2_DOTALL option. In other words,\nit matches any character except one that signifies the end of a line.\n.P\nWhen \\eN is followed by an opening brace it has a different meaning. See the\nsection entitled\n.\\\" HTML <a href=\"#digitsafterbackslash\">\n.\\\" </a>\n\"Non-printing characters\"\n.\\\"\nabove for details. Perl also uses \\eN{name} to specify characters by Unicode\nname; PCRE2 does not support this.\n.\n.\n.SH \"MATCHING A SINGLE CODE UNIT\"\n.rs\n.sp\nOutside a character class, the escape sequence \\eC matches any one code unit,\nwhether or not a UTF mode is set. In the 8-bit library, one code unit is one\nbyte; in the 16-bit library it is a 16-bit unit; in the 32-bit library it is a\n32-bit unit. Unlike a dot, \\eC always matches line-ending characters. The\nfeature is provided in Perl in order to match individual bytes in UTF-8 mode,\nbut it is unclear how it can usefully be used.\n.P\nBecause \\eC breaks up characters into individual code units, matching one unit\nwith \\eC in UTF-8 or UTF-16 mode means that the rest of the string may start\nwith a malformed UTF character. This has undefined results, because PCRE2\nassumes that it is matching character by character in a valid UTF string (by\ndefault it checks the subject string's validity at the start of processing\nunless the PCRE2_NO_UTF_CHECK or PCRE2_MATCH_INVALID_UTF option is used).\n.P\nAn application can lock out the use of \\eC by setting the\nPCRE2_NEVER_BACKSLASH_C option when compiling a pattern. It is also possible to\nbuild PCRE2 with the use of \\eC permanently disabled.\n.P\nPCRE2 does not allow \\eC to appear in lookbehind assertions\n.\\\" HTML <a href=\"#lookbehind\">\n.\\\" </a>\n(described below)\n.\\\"\nin UTF-8 or UTF-16 modes, because this would make it impossible to calculate\nthe length of the lookbehind. Neither the alternative matching function\n\\fBpcre2_dfa_match()\\fP nor the JIT optimizer support \\eC in these UTF modes.\nThe former gives a match-time error; the latter fails to optimize and so the\nmatch is always run using the interpreter.\n.P\nIn the 32-bit library, however, \\eC is always supported (when not explicitly\nlocked out) because it always matches a single code unit, whether or not UTF-32\nis specified.\n.P\nIn general, the \\eC escape sequence is best avoided. However, one way of using\nit that avoids the problem of malformed UTF-8 or UTF-16 characters is to use a\nlookahead to check the length of the next character, as in this pattern, which\ncould be used with a UTF-8 string (ignore white space and line breaks):\n.sp\n  (?| (?=[\\ex00-\\ex7f])(\\eC) |\n      (?=[\\ex80-\\ex{7ff}])(\\eC)(\\eC) |\n      (?=[\\ex{800}-\\ex{ffff}])(\\eC)(\\eC)(\\eC) |\n      (?=[\\ex{10000}-\\ex{1fffff}])(\\eC)(\\eC)(\\eC)(\\eC))\n.sp\nIn this example, a group that starts with (?| resets the capturing parentheses\nnumbers in each alternative (see\n.\\\" HTML <a href=\"#dupgroupnumber\">\n.\\\" </a>\n\"Duplicate Group Numbers\"\n.\\\"\nbelow). The assertions at the start of each branch check the next UTF-8\ncharacter for values whose encoding uses 1, 2, 3, or 4 bytes, respectively. The\ncharacter's individual bytes are then captured by the appropriate number of\n\\eC groups.\n.\n.\n.\\\" HTML <a name=\"characterclass\"></a>\n.SH \"SQUARE BRACKETS AND CHARACTER CLASSES\"\n.rs\n.sp\nAn opening square bracket introduces a character class, terminated by a closing\nsquare bracket. A closing square bracket on its own is not special by default.\nIf a closing square bracket is required as a member of the class, it should be\nthe first data character in the class (after an initial circumflex, if present)\nor escaped with a backslash. This means that, by default, an empty class cannot\nbe defined. However, if the PCRE2_ALLOW_EMPTY_CLASS option is set, a closing\nsquare bracket at the start does end the (empty) class.\n.P\nA character class matches a single character in the subject. A matched\ncharacter must be in the set of characters defined by the class, unless the\nfirst character in the class definition is a circumflex, in which case the\nsubject character must not be in the set defined by the class. If a circumflex\nis actually required as a member of the class, ensure it is not the first\ncharacter, or escape it with a backslash.\n.P\nFor example, the character class [aeiou] matches any lower case English vowel,\nwhereas [^aeiou] matches all other characters. Note that a circumflex is just a\nconvenient notation for specifying the characters that are in the class by\nenumerating those that are not. A class that starts with a circumflex is not an\nassertion; it still consumes a character from the subject string, and therefore\nit fails to match if the current pointer is at the end of the string.\n.P\nCharacters in a class may be specified by their code points using \\eo, \\ex, or\n\\eN{U+hh..} in the usual way. When caseless matching is set, any letters in a\nclass represent both their upper case and lower case versions, so for example,\na caseless [aeiou] matches \"A\" as well as \"a\", and a caseless [^aeiou] does not\nmatch \"A\", whereas a caseful version would. Note that there are two ASCII\ncharacters, K and S, that, in addition to their lower case ASCII equivalents,\nare case-equivalent with Unicode U+212A (Kelvin sign) and U+017F (long S)\nrespectively when either PCRE2_UTF or PCRE2_UCP is set. If you do not want\nthese ASCII/non-ASCII case equivalences, you can suppress them by setting\nPCRE2_EXTRA_CASELESS_RESTRICT, either as an option in a compile context, or by\nincluding (*CASELESS_RESTRICT) or (?r) within a pattern.\n.P\nCharacters that might indicate line breaks are never treated in any special way\nwhen matching character classes, whatever line-ending sequence is in use, and\nwhatever setting of the PCRE2_DOTALL and PCRE2_MULTILINE options is used. A\nclass such as [^a] always matches one of these characters.\n.P\nThe generic character type escape sequences \\ed, \\eD, \\eh, \\eH, \\ep, \\eP, \\es,\n\\eS, \\ev, \\eV, \\ew, and \\eW may appear in a character class, and add the\ncharacters that they match to the class. For example, [\\edABCDEF] matches any\nhexadecimal digit. In UTF modes, the PCRE2_UCP option affects the meanings of\n\\ed, \\es, \\ew and their upper case partners, just as it does when they appear\noutside a character class, as described in the section entitled\n.\\\" HTML <a href=\"#genericchartypes\">\n.\\\" </a>\n\"Generic character types\"\n.\\\"\nabove. The escape sequence \\eb has a different meaning inside a character\nclass; it matches the backspace character. The sequences \\eB, \\eR, and \\eX are\nnot special inside a character class. Like any other unrecognized escape\nsequences, they cause an error. The same is true for \\eN when not followed by\nan opening brace.\n.P\nThe minus (hyphen) character can be used to specify a range of characters in a\ncharacter class. For example, [d-m] matches any letter between d and m,\ninclusive. If a minus character is required in a class, it must be escaped with\na backslash or appear in a position where it cannot be interpreted as\nindicating a range, typically as the first or last character in the class,\nor immediately after a range. For example, [b-d-z] matches letters in the range\nb to d, a hyphen character, or z.\n.P\nThere is some special treatment for alphabetic ranges in EBCDIC environments;\nsee the section\n.\\\" HTML <a href=\"#ebcdicenvironments\">\n.\\\" </a>\n\"EBCDIC environments\"\n.\\\"\nbelow.\n.P\nPerl treats a hyphen as a literal if it appears before or after a POSIX class\n(see below) or before or after a character type escape such as \\ed or \\eH.\nHowever, unless the hyphen is the last character in the class, Perl outputs a\nwarning in its warning mode, as this is most likely a user error. As PCRE2 has\nno facility for warning, an error is given in these cases.\n.P\nIt is not possible to have the literal character \"]\" as the end character of a\nrange. A pattern such as [W-]46] is interpreted as a class of two characters\n(\"W\" and \"-\") followed by a literal string \"46]\", so it would match \"W46]\" or\n\"-46]\". However, if the \"]\" is escaped with a backslash it is interpreted as\nthe end of a range, so [W-\\e]46] is interpreted as a class containing a range\nand two other characters. The octal or hexadecimal representation of \"]\" can\nalso be used to end a range.\n.P\nRanges normally include all code points between the start and end characters,\ninclusive. They can also be used for code points specified numerically, for\nexample [\\e000-\\e037]. Ranges can include any characters that are valid for the\ncurrent mode. In any UTF mode, the so-called \"surrogate\" characters (those\nwhose code points lie between 0xd800 and 0xdfff inclusive) may not be specified\nexplicitly by default (the PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES option disables\nthis check). However, ranges such as [\\ex{d7ff}-\\ex{e000}], which include the\nsurrogates, are always permitted.\n.P\nIf a range that includes letters is used when caseless matching is set, it\nmatches the letters in either case. For example, [W-c] is equivalent to\n[][\\e\\e^_`wxyzabc], matched caselessly, and in a non-UTF mode, if character\ntables for a French locale are in use, [\\exc8-\\excb] matches accented E\ncharacters in both cases.\n.P\nA circumflex can conveniently be used with the upper case character types to\nspecify a more restricted set of characters than the matching lower case type.\nFor example, the class [^\\eW_] matches any letter or digit, but not underscore,\nwhereas [\\ew] includes underscore. A positive character class should be read as\n\"something OR something OR ...\" and a negative class as \"NOT something AND NOT\nsomething AND NOT ...\".\n.P\nThe metacharacters that are recognized in character classes are backslash,\nhyphen (when it can be interpreted as specifying a range), circumflex\n(only at the start), and the terminating closing square bracket. An opening\nsquare bracket is also special when it can be interpreted as introducing a\nPOSIX class (see\n.\\\" HTML <a href=\"#posixclasses\">\n.\\\" </a>\n\"Posix character classes\"\n.\\\"\nbelow), or a special compatibility feature (see\n.\\\" HTML <a href=\"#wordboundcompat\">\n.\\\" </a>\n\"Compatibility feature for word boundaries\"\n.\\\"\nbelow. Escaping any non-alphanumeric character in a class turns it into a\nliteral, whether or not it would otherwise be a metacharacter.\n.\n.\n.SH \"PERL EXTENDED CHARACTER CLASSES\"\n.rs\n.sp\nFrom release 10.45 PCRE2 supports Perl's (?[...]) extended character class\nsyntax. This can be used to perform set operations such as intersection on\ncharacter classes.\n.P\nThe syntax permitted within (?[...]) is quite different to ordinary character\nclasses. Inside the extended class, there is an expression syntax consisting of\n\"atoms\", operators, and ordinary parentheses \"()\" used for grouping. Such\nclasses always have the Perl /xx modifier (PCRE2 option PCRE2_EXTENDED_MORE)\nturned on within them. This means that literal space and tab characters are\nignored everywhere in the class.\n.P\nThe allowed atoms are individual characters specified by escape sequences such\nas \\en or \\ex{123}, character types such as \\ed, POSIX classes such as\n[:alpha:], and nested ordinary (non-extended) character classes. For example,\nin (?[\\ed & [...]]) the nested class [...] follows the usual rules for ordinary\ncharacter classes, in which parentheses are not metacharacters, and character\nliterals and ranges are permitted.\n.P\nCharacter literals and ranges may not appear outside a nested ordinary\ncharacter class because they are not atoms in the extended syntax. The extended\nsyntax does not introduce any additional escape sequences, so (?[\\ey]) is an\nunknown escape, as it would be in [\\ey].\n.P\nIn the extended syntax, ^ does not negate a class (except within an\nordinary class nested inside an extended class); it is instead a binary\noperator.\n.P\nThe binary operators are \"&\" (intersection), \"|\" or \"+\" (union), \"-\"\n(subtraction) and \"^\" (symmetric difference). These are left-associative and\n\"&\" has higher (tighter) precedence, while the others have equal lower\nprecedence. The one prefix unary operator is \"!\" (complement), with highest\nprecedence.\n.\n.\n.SH \"UTS#18 EXTENDED CHARACTER CLASSES\"\n.rs\n.sp\nThe PCRE2_ALT_EXTENDED_CLASS option enables an alternative to Perl's (?[...])\nsyntax, allowing instead extended class behaviour inside ordinary [...]\ncharacter classes. This altered syntax for [...] classes is loosely described\nby the Unicode standard UTS#18. The PCRE2_ALT_EXTENDED_CLASS option does not\nprevent use of (?[...]) classes; it just changes the meaning of all\n[...] classes that are not nested inside a Perl (?[...]) class.\n.P\nFirstly, in ordinary Perl [...] syntax, an expression such as \"[a[]\" is a\ncharacter class with two literal characters \"a\" and \"[\", but in UTS#18 extended\nclasses the \"[\" character becomes an additional metacharacter within classes,\ndenoting the start of a nested class, so a literal \"[\" must be escaped as \"\\e[\".\n.P\nSecondly, within the UTS#18 extended syntax, there are operators \"||\", \"&&\",\n\"--\" and \"~~\" which denote character class union, intersection, subtraction,\nand symmetric difference respectively. In standard Perl syntax, these would\nsimply be needlessly-repeated literals (except for \"--\" which could be the\nstart or end of a range). In UTS#18 extended classes these operators can be used\nin constructs such as [\\ep{L}--[QW]] for \"Unicode letters, other than Q and W\".\nA literal \"-\" at the start or end of a range must be escaped, so while \"[--1]\"\nin Perl syntax is the range from hyphen to \"1\", it must be escaped as \"[\\e--1]\"\nin UTS#18 extended classes.\n.P\nUnlike Perl's (?[...]) extended classes, the PCRE2_EXTENDED_MORE option to\nignore space and tab characters is not automatically enabled for UTS#18\nextended classes, but it is honoured if set.\n.P\nExtended UTS#18 classes can be nested, and nested classes are themselves\nextended classes (unlike Perl, where nested classes must be simple classes).\nFor example, [\\ep{L}&&[\\ep{Thai}||\\ep{Greek}]] matches any letter that is in\nthe Thai or Greek scripts. Note that this means that no special grouping\ncharacters (such as the parentheses used in Perl's (?[...]) class syntax) are\nneeded.\n.P\nIndividual class items (literal characters, literal ranges, properties such as\n\\ed or \\ep{...}, and nested classes) can be combined by juxtaposition or by an\noperator. Juxtaposition is the implicit union operator, and binds more tightly\nthan any explicit operator. Thus a sequence of literals and/or ranges behaves\nas if it is enclosed in square brackets. For example, [A-Z0-9&&[^E8]] is the\nsame as [[A-Z0-9]&&[^E8]], which matches any upper case alphanumeric character\nexcept \"E\" or \"8\".\n.P\nPrecedence between the explicit operators is not defined, so mixing operators\nis a syntax error. For example, [A&&B--C] is an error, but [A&&[B--C]] is\nvalid.\n.P\nThis is an emerging syntax which is being adopted gradually across the regex\necosystem: for example JavaScript adopted the \"/v\" flag in ECMAScript 2024;\nPython's \"re\" module reserves the syntax for future use with a FutureWarning\nfor unescaped use of \"[\" as a literal within character classes. Due to UTS#18\nproviding insufficient guidance, engines interpret the syntax differently.\nRust's \"regex\" crate and Python's \"regex\" PyPi module both implement UTS#18\nextended classes, but with slight incompatibilities ([A||B&&C] is parsed as\n[A||[B&&C]] in Python's \"regex\" but as [[A||B]&&C] in Rust's \"regex\").\n.P\nPCRE2's syntax adds syntax restrictions similar to ECMASCript's /v flag, so\nthat all the UTS#18 extended classes accepted as valid by PCRE2 have the\nproperty that they are interpreted either with the same behaviour, or as\ninvalid, by all other major engines. Please file an issue if you are aware of\ncross-engine differences in behaviour between PCRE2 and another major engine.\n.\n.\n.\\\" HTML <a name=\"posixclasses\"></a>\n.SH \"POSIX CHARACTER CLASSES\"\n.rs\n.sp\nPerl supports the POSIX notation for character classes. This uses names\nenclosed by [: and :] within the enclosing square brackets. PCRE2 also supports\nthis notation, in both ordinary and extended classes. For example,\n.sp\n  [01[:alpha:]%]\n.sp\nmatches \"0\", \"1\", any alphabetic character, or \"%\". The supported class names\nare:\n.sp\n  alnum    letters and digits\n  alpha    letters\n  ascii    character codes 0 - 127\n  blank    space or tab only\n  cntrl    control characters\n  digit    decimal digits (same as \\ed)\n  graph    printing characters, excluding space\n  lower    lower case letters\n  print    printing characters, including space\n  punct    printing characters, excluding letters and digits and space\n  space    white space (the same as \\es from PCRE2 8.34)\n  upper    upper case letters\n  word     \"word\" characters (same as \\ew)\n  xdigit   hexadecimal digits\n.sp\nThe default \"space\" characters are HT (9), LF (10), VT (11), FF (12), CR (13),\nand space (32). If locale-specific matching is taking place, the list of space\ncharacters may be different; there may be fewer or more of them. \"Space\" and\n\\es match the same set of characters, as do \"word\" and \\ew.\n.P\nThe name \"word\" is a Perl extension, and \"blank\" is a GNU extension from Perl\n5.8. Another Perl extension is negation, which is indicated by a ^ character\nafter the colon. For example,\n.sp\n  [12[:^digit:]]\n.sp\nmatches \"1\", \"2\", or any non-digit. PCRE2 (and Perl) also recognize the POSIX\nsyntax [.ch.] and [=ch=] where \"ch\" is a \"collating element\", but these are not\nsupported, and an error is given if they are encountered.\n.P\nBy default, characters with values greater than 127 do not match any of the\nPOSIX character classes, although this may be different for characters in the\nrange 128-255 when locale-specific matching is happening. However, in UCP mode,\nunless certain options are set (see below), some of the classes are changed so\nthat Unicode character properties are used. This is achieved by replacing\nPOSIX classes with other sequences, as follows:\n.sp\n  [:alnum:]  becomes  \\ep{Xan}\n  [:alpha:]  becomes  \\ep{L}\n  [:blank:]  becomes  \\eh\n  [:cntrl:]  becomes  \\ep{Cc}\n  [:digit:]  becomes  \\ep{Nd}\n  [:lower:]  becomes  \\ep{Ll}\n  [:space:]  becomes  \\ep{Xps}\n  [:upper:]  becomes  \\ep{Lu}\n  [:word:]   becomes  \\ep{Xwd}\n.sp\nNegated versions, such as [:^alpha:] use \\eP instead of \\ep. Four other POSIX\nclasses are handled specially in UCP mode:\n.TP 10\n[:graph:]\nThis matches characters that have glyphs that mark the page when printed. In\nUnicode property terms, it matches all characters with the L, M, N, P, S, or Cf\nproperties, except for:\n.sp\n  U+061C           Arabic Letter Mark\n  U+180E           Mongolian Vowel Separator\n  U+2066 - U+2069  Various \"isolate\"s\n.sp\n.TP 10\n[:print:]\nThis matches the same characters as [:graph:] plus space characters that are\nnot controls, that is, characters with the Zs property.\n.TP 10\n[:punct:]\nThis matches all characters that have the Unicode P (punctuation) property,\nplus those characters with code points less than 256 that have the S (Symbol)\nproperty.\n.TP 10\n[:xdigit:]\nIn addition to the ASCII hexadecimal digits, this also matches the \"fullwidth\"\nversions of those characters, whose Unicode code points start at U+FF10. This\nis a change that was made in PCRE2 release 10.43 for Perl compatibility.\n.P\nThe other POSIX classes are unchanged by PCRE2_UCP, and match only characters\nwith code points less than 256.\n.P\nThere are two options that can be used to restrict the POSIX classes to ASCII\ncharacters when PCRE2_UCP is set. The option PCRE2_EXTRA_ASCII_DIGIT affects\njust [:digit:] and [:xdigit:]. Within a pattern, this can be set and unset by\n(?aT) and (?-aT). The PCRE2_EXTRA_ASCII_POSIX option disables UCP processing\nfor all POSIX classes, including [:digit:] and [:xdigit:]. Within a pattern,\n(?aP) and (?-aP) set and unset both these options for consistency.\n.\n.\n.\\\" HTML <a name=\"wordboundcompat\"></a>\n.SH \"COMPATIBILITY FEATURE FOR WORD BOUNDARIES\"\n.rs\n.sp\nIn the POSIX.2 compliant library that was included in 4.4BSD Unix, the ugly\nsyntax [[:<:]] and [[:>:]] is used for matching \"start of word\" and \"end of\nword\". PCRE2 treats these items as follows:\n.sp\n  [[:<:]]  is converted to  \\eb(?=\\ew)\n  [[:>:]]  is converted to  \\eb(?<=\\ew)\n.sp\nOnly these exact character sequences are recognized. A sequence such as\n[a[:<:]b] provokes error for an unrecognized POSIX class name. This support is\nnot compatible with Perl. It is provided to help migrations from other\nenvironments, and is best not used in any new patterns. Note that \\eb matches\nat the start and the end of a word (see\n.\\\" HTML <a href=\"#smallassertions\">\n.\\\" </a>\n\"Simple assertions\"\n.\\\"\nabove), and in a Perl-style pattern the preceding or following character\nnormally shows which is wanted, without the need for the assertions that are\nused above in order to give exactly the POSIX behaviour. Note also that the\nPCRE2_UCP option changes the meaning of \\ew (and therefore \\eb) by default, so\nit also affects these POSIX sequences.\n.\n.\n.SH \"VERTICAL BAR\"\n.rs\n.sp\nVertical bar characters are used to separate alternative patterns. For example,\nthe pattern\n.sp\n  gilbert|sullivan\n.sp\nmatches either \"gilbert\" or \"sullivan\". Any number of alternatives may appear,\nand an empty alternative is permitted (matching the empty string). The matching\nprocess tries each alternative in turn, from left to right, and the first one\nthat succeeds is used. If the alternatives are within a group\n.\\\" HTML <a href=\"#group\">\n.\\\" </a>\n(defined below),\n.\\\"\n\"succeeds\" means matching the rest of the main pattern as well as the\nalternative in the group.\n.\n.\n.\\\" HTML <a name=\"internaloptions\"></a>\n.SH \"INTERNAL OPTION SETTING\"\n.rs\n.sp\nThe settings of several options can be changed within a pattern by a sequence\nof letters enclosed between \"(?\" and \")\". The following are Perl-compatible,\nand are described in detail in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation. The option letters are:\n.sp\n  i  for PCRE2_CASELESS\n  m  for PCRE2_MULTILINE\n  n  for PCRE2_NO_AUTO_CAPTURE\n  s  for PCRE2_DOTALL\n  x  for PCRE2_EXTENDED\n  xx for PCRE2_EXTENDED_MORE\n.sp\nFor example, (?im) sets caseless, multiline matching. It is also possible to\nunset these options by preceding the relevant letters with a hyphen, for\nexample (?-im). The two \"extended\" options are not independent; unsetting\neither one cancels the effects of both of them.\n.P\nA combined setting and unsetting such as (?im-sx), which sets PCRE2_CASELESS\nand PCRE2_MULTILINE while unsetting PCRE2_DOTALL and PCRE2_EXTENDED, is also\npermitted. Only one hyphen may appear in the options string. If a letter\nappears both before and after the hyphen, the option is unset. An empty options\nsetting \"(?)\" is allowed. Needless to say, it has no effect.\n.P\nIf the first character following (? is a circumflex, it causes all of the above\noptions to be unset. Letters may follow the circumflex to cause some options to\nbe re-instated, but a hyphen may not appear.\n.P\nSome PCRE2-specific options can be changed by the same mechanism using these\npairs or individual letters:\n.sp\n  aD for PCRE2_EXTRA_ASCII_BSD\n  aS for PCRE2_EXTRA_ASCII_BSS\n  aW for PCRE2_EXTRA_ASCII_BSW\n  aP for PCRE2_EXTRA_ASCII_POSIX and PCRE2_EXTRA_ASCII_DIGIT\n  aT for PCRE2_EXTRA_ASCII_DIGIT\n  r  for PCRE2_EXTRA_CASELESS_RESTRICT\n  J  for PCRE2_DUPNAMES\n  U  for PCRE2_UNGREEDY\n.sp\nHowever, except for 'r', these are not unset by (?^), which is equivalent to\n(?-imnrsx). If 'a' is not followed by any of the upper case letters shown\nabove, it sets (or unsets) all the ASCII options.\n.P\nPCRE2_EXTRA_ASCII_DIGIT has no additional effect when PCRE2_EXTRA_ASCII_POSIX\nis set, but including it in (?aP) means that (?-aP) suppresses all ASCII\nrestrictions for POSIX classes.\n.P\nWhen one of these option changes occurs at top level (that is, not inside group\nparentheses), the change applies until a subsequent change, or the end of the\npattern. An option change within a group (see below for a description of\ngroups) affects only that part of the group that follows it. At the end of the\ngroup these options are reset to the state they were before the group. For\nexample,\n.sp\n  (a(?i)b)c\n.sp\nmatches abc and aBc and no other strings (assuming PCRE2_CASELESS is not set\nexternally). Any changes made in one alternative do carry on into subsequent\nbranches within the same group. For example,\n.sp\n  (a(?i)b|c)\n.sp\nmatches \"ab\", \"aB\", \"c\", and \"C\", even though when matching \"C\" the first\nbranch is abandoned before the option setting. This is because the effects of\noption settings happen at compile time. There would be some very weird\nbehaviour otherwise.\n.P\nAs a convenient shorthand, if any option settings are required at the start of\na non-capturing group (see the next section), the option letters may\nappear between the \"?\" and the \":\". Thus the two patterns\n.sp\n  (?i:saturday|sunday)\n  (?:(?i)saturday|sunday)\n.sp\nmatch exactly the same set of strings.\n.P\n\\fBNote:\\fP There are other PCRE2-specific options, applying to the whole\npattern, which can be set by the application when the compiling function is\ncalled. In addition, the pattern can contain special leading sequences such as\n(*CRLF) to override what the application has set or what has been defaulted.\nDetails are given in the section entitled\n.\\\" HTML <a href=\"#newlineseq\">\n.\\\" </a>\n\"Newline sequences\"\n.\\\"\nabove. There are also the (*UTF) and (*UCP) leading sequences that can be used\nto set UTF and Unicode property modes; they are equivalent to setting the\nPCRE2_UTF and PCRE2_UCP options, respectively. However, the application can set\nthe PCRE2_NEVER_UTF or PCRE2_NEVER_UCP options, which lock out the use of the\n(*UTF) and (*UCP) sequences.\n.\n.\n.\\\" HTML <a name=\"group\"></a>\n.SH GROUPS\n.rs\n.sp\nGroups are delimited by parentheses (round brackets), which can be nested.\nTurning part of a pattern into a group does two things:\n.sp\n1. It localizes a set of alternatives. For example, the pattern\n.sp\n  cat(aract|erpillar|)\n.sp\nmatches \"cataract\", \"caterpillar\", or \"cat\". Without the parentheses, it would\nmatch \"cataract\", \"erpillar\" or an empty string.\n.sp\n2. It creates a \"capture group\". This means that, when the whole pattern\nmatches, the portion of the subject string that matched the group is passed\nback to the caller, separately from the portion that matched the whole pattern.\n(This applies only to the traditional matching function; the DFA matching\nfunction does not support capturing.)\n.P\nOpening parentheses are counted from left to right (starting from 1) to obtain\nnumbers for capture groups. For example, if the string \"the red king\" is\nmatched against the pattern\n.sp\n  the ((red|white) (king|queen))\n.sp\nthe captured substrings are \"red king\", \"red\", and \"king\", and are numbered 1,\n2, and 3, respectively.\n.P\nThe fact that plain parentheses fulfil two functions is not always helpful.\nThere are often times when grouping is required without capturing. If an\nopening parenthesis is followed by a question mark and a colon, the group\ndoes not do any capturing, and is not counted when computing the number of any\nsubsequent capture groups. For example, if the string \"the white queen\"\nis matched against the pattern\n.sp\n  the ((?:red|white) (king|queen))\n.sp\nthe captured substrings are \"white queen\" and \"queen\", and are numbered 1 and\n2. The maximum number of capture groups is 65535.\n.P\nAs a convenient shorthand, if any option settings are required at the start of\na non-capturing group, the option letters may appear between the \"?\" and the\n\":\". Thus the two patterns\n.sp\n  (?i:saturday|sunday)\n  (?:(?i)saturday|sunday)\n.sp\nmatch exactly the same set of strings. Because alternative branches are tried\nfrom left to right, and options are not reset until the end of the group is\nreached, an option setting in one branch does affect subsequent branches, so\nthe above patterns match \"SUNDAY\" as well as \"Saturday\".\n.\n.\n.\\\" HTML <a name=\"dupgroupnumber\"></a>\n.SH \"DUPLICATE GROUP NUMBERS\"\n.rs\n.sp\nPerl 5.10 introduced a feature whereby each alternative in a group uses the\nsame numbers for its capturing parentheses. Such a group starts with (?| and is\nitself a non-capturing group. For example, consider this pattern:\n.sp\n  (?|(Sat)ur|(Sun))day\n.sp\nBecause the two alternatives are inside a (?| group, both sets of capturing\nparentheses are numbered one. Thus, when the pattern matches, you can look\nat captured substring number one, whichever alternative matched. This construct\nis useful when you want to capture part, but not all, of one of a number of\nalternatives. Inside a (?| group, parentheses are numbered as usual, but the\nnumber is reset at the start of each branch. The numbers of any capturing\nparentheses that follow the whole group start after the highest number used in\nany branch. The following example is taken from the Perl documentation. The\nnumbers underneath show in which buffer the captured content will be stored.\n.sp\n  # before  ---------------branch-reset----------- after\n  / ( a )  (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x\n  # 1            2         2  3        2     3     4\n.sp\nA backreference to a capture group uses the most recent value that is set for\nthe group. The following pattern matches \"abcabc\" or \"defdef\":\n.sp\n  /(?|(abc)|(def))\\e1/\n.sp\nIn contrast, a subroutine call to a capture group always refers to the\nfirst one in the pattern with the given number. The following pattern matches\n\"abcabc\" or \"defabc\":\n.sp\n  /(?|(abc)|(def))(?1)/\n.sp\nA relative reference such as (?-1) is no different: it is just a convenient way\nof computing an absolute group number.\n.P\nIf a\n.\\\" HTML <a href=\"#conditions\">\n.\\\" </a>\ncondition test\n.\\\"\nfor a group's having matched refers to a non-unique number, the test is\ntrue if any group with that number has matched.\n.P\nAn alternative approach to using this \"branch reset\" feature is to use\nduplicate named groups, as described in the next section.\n.\n.\n.SH \"NAMED CAPTURE GROUPS\"\n.rs\n.sp\nIdentifying capture groups by number is simple, but it can be very hard to keep\ntrack of the numbers in complicated patterns. Furthermore, if an expression is\nmodified, the numbers may change. To help with this difficulty, PCRE2 supports\nthe naming of capture groups. This feature was not added to Perl until release\n5.10. Python had the feature earlier, and PCRE1 introduced it at release 4.0,\nusing the Python syntax. PCRE2 supports both the Perl and the Python syntax.\n.P\nIn PCRE2, a capture group can be named in one of three ways: (?<name>...) or\n(?'name'...) as in Perl, or (?P<name>...) as in Python. Names may be up to\n.\\\" DEFINE MAX_NAME_SIZE\n128 code units long. When PCRE2_UTF is not set, they may contain only ASCII\nalphanumeric characters and underscores, but must start with a non-digit. When\nPCRE2_UTF is set, the syntax of group names is extended to allow any Unicode\nletter or Unicode decimal digit. In other words, group names must match one of\nthese patterns:\n.sp\n  ^[_A-Za-z][_A-Za-z0-9]*\\ez   when PCRE2_UTF is not set\n  ^[_\\ep{L}][_\\ep{L}\\ep{Nd}]*\\ez  when PCRE2_UTF is set\n.sp\nReferences to capture groups from other parts of the pattern, such as\n.\\\" HTML <a href=\"#backreferences\">\n.\\\" </a>\nbackreferences,\n.\\\"\n.\\\" HTML <a href=\"#recursion\">\n.\\\" </a>\nrecursion,\n.\\\"\nand\n.\\\" HTML <a href=\"#conditions\">\n.\\\" </a>\nconditions,\n.\\\"\ncan all be made by name as well as by number.\n.P\nNamed capture groups are allocated numbers as well as names, exactly as\nif the names were not present. In both PCRE2 and Perl, capture groups\nare primarily identified by numbers; any names are just aliases for these\nnumbers. The PCRE2 API provides function calls for extracting the complete\nname-to-number translation table from a compiled pattern, as well as\nconvenience functions for extracting captured substrings by name.\n.P\n\\fBWarning:\\fP When more than one capture group has the same number, as\ndescribed in the previous section, a name given to one of them applies to all\nof them. Perl allows identically numbered groups to have different names.\nConsider this pattern, where there are two capture groups, both numbered 1:\n.sp\n  (?|(?<AA>aa)|(?<BB>bb))\n.sp\nPerl allows this, with both names AA and BB as aliases of group 1. Thus, after\na successful match, both names yield the same value (either \"aa\" or \"bb\").\n.P\nIn an attempt to reduce confusion, PCRE2 does not allow the same group number\nto be associated with more than one name. The example above provokes a\ncompile-time error. However, there is still scope for confusion. Consider this\npattern:\n.sp\n  (?|(?<AA>aa)|(bb))\n.sp\nAlthough the second group number 1 is not explicitly named, the name AA is\nstill an alias for any group 1. Whether the pattern matches \"aa\" or \"bb\", a\nreference by name to group AA yields the matched string.\n.P\nBy default, a name must be unique within a pattern, except that duplicate names\nare permitted for groups with the same number, for example:\n.sp\n  (?|(?<AA>aa)|(?<AA>bb))\n.sp\nThe duplicate name constraint can be disabled by setting the PCRE2_DUPNAMES\noption at compile time, or by the use of (?J) within the pattern, as described\nin the section entitled\n.\\\" HTML <a href=\"#internaloptions\">\n.\\\" </a>\n\"Internal Option Setting\"\n.\\\"\nabove.\n.P\nDuplicate names can be useful for patterns where only one instance of the named\ncapture group can match. Suppose you want to match the name of a weekday,\neither as a 3-letter abbreviation or as the full name, and in both cases you\nwant to extract the abbreviation. This pattern (ignoring the line breaks) does\nthe job:\n.sp\n  (?J)\n  (?<DN>Mon|Fri|Sun)(?:day)?|\n  (?<DN>Tue)(?:sday)?|\n  (?<DN>Wed)(?:nesday)?|\n  (?<DN>Thu)(?:rsday)?|\n  (?<DN>Sat)(?:urday)?\n.sp\nThere are five capture groups, but only one is ever set after a match. The\nconvenience functions for extracting the data by name returns the substring for\nthe first (and in this example, the only) group of that name that matched. This\nsaves searching to find which numbered group it was. (An alternative way of\nsolving this problem is to use a \"branch reset\" group, as described in the\nprevious section.)\n.P\nIf you make a backreference to a non-unique named group from elsewhere in the\npattern, the groups to which the name refers are checked in the order in which\nthey appear in the overall pattern. The first one that is set is used for the\nreference. For example, this pattern matches both \"foofoo\" and \"barbar\" but not\n\"foobar\" or \"barfoo\":\n.sp\n  (?J)(?:(?<n>foo)|(?<n>bar))\\ek<n>\n.sp\n.P\nIf you make a subroutine call to a non-unique named group, the one that\ncorresponds to the first occurrence of the name is used. In the absence of\nduplicate numbers this is the one with the lowest number.\n.P\nIf you use a named reference in a condition\ntest (see the\n.\\\"\n.\\\" HTML <a href=\"#conditions\">\n.\\\" </a>\nsection about conditions\n.\\\"\nbelow), either to check whether a capture group has matched, or to check for\nrecursion, all groups with the same name are tested. If the condition is true\nfor any one of them, the overall condition is true. This is the same behaviour\nas testing by number. For further details of the interfaces for handling named\ncapture groups, see the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation.\n.\n.\n.SH REPETITION\n.rs\n.sp\nRepetition is specified by quantifiers, which may follow any one of these\nitems:\n.sp\n  a literal data character\n  the dot metacharacter\n  the \\eC escape sequence\n  the \\eR escape sequence\n  the \\eX escape sequence\n  any escape sequence that matches a single character\n  a character class\n  a backreference\n  a parenthesized group (including lookaround assertions)\n  a subroutine call (recursive or otherwise)\n.sp\nIf a quantifier does not follow a repeatable item, an error occurs. The\ngeneral repetition quantifier specifies a minimum and maximum number of\npermitted matches by giving two numbers in curly brackets (braces), separated\nby a comma. The numbers must be less than 65536, and the first must be less\nthan or equal to the second. For example,\n.sp\n  z{2,4}\n.sp\nmatches \"zz\", \"zzz\", or \"zzzz\". A closing brace on its own is not a special\ncharacter. If the second number is omitted, but the comma is present, there is\nno upper limit; if the second number and the comma are both omitted, the\nquantifier specifies an exact number of required matches. Thus\n.sp\n  [aeiou]{3,}\n.sp\nmatches at least 3 successive vowels, but may match many more, whereas\n.sp\n  \\ed{8}\n.sp\nmatches exactly 8 digits. If the first number is omitted, the lower limit is\ntaken as zero; in this case the upper limit must be present.\n.sp\n  X{,4} is interpreted as X{0,4}\n.sp\nThis is a change in behaviour that happened in Perl 5.34.0 and PCRE2 10.43. In\nearlier versions such a sequence was not interpreted as a quantifier. Other\nregular expression engines may behave either way.\n.P\nIf the characters that follow an opening brace do not match the syntax of a\nquantifier, the brace is taken as a literal character. In particular, this\nmeans that {,} is a literal string of three characters.\n.P\nNote that not every opening brace is potentially the start of a quantifier\nbecause braces are used in other items such as \\eN{U+345} or \\ek{name}.\n.P\nIn UTF modes, quantifiers apply to characters rather than to individual code\nunits. Thus, for example, \\ex{100}{2} matches two characters, each of\nwhich is represented by a two-byte sequence in a UTF-8 string. Similarly,\n\\eX{3} matches three Unicode extended grapheme clusters, each of which may be\nseveral code units long (and they may be of different lengths).\n.P\nThe quantifier {0} is permitted, causing the expression to behave as if the\nprevious item and the quantifier were not present. This may be useful for\ncapture groups that are referenced as\n.\\\" HTML <a href=\"#groupsassubroutines\">\n.\\\" </a>\nsubroutines\n.\\\"\nfrom elsewhere in the pattern (but see also the section entitled\n.\\\" HTML <a href=\"#subdefine\">\n.\\\" </a>\n\"Defining capture groups for use by reference only\"\n.\\\"\nbelow). Except for parenthesized groups, items that have a {0} quantifier are\nomitted from the compiled pattern.\n.P\nFor convenience, the three most common quantifiers have single-character\nabbreviations:\n.sp\n  *    is equivalent to {0,}\n  +    is equivalent to {1,}\n  ?    is equivalent to {0,1}\n.sp\nIt is possible to construct infinite loops by following a group that can match\nno characters with a quantifier that has no upper limit, for example:\n.sp\n  (a?)*\n.sp\nEarlier versions of Perl and PCRE1 used to give an error at compile time for\nsuch patterns. However, because there are cases where this can be useful, such\npatterns are now accepted, but whenever an iteration of such a group matches no\ncharacters, matching moves on to the next item in the pattern instead of\nrepeatedly matching an empty string. This does not prevent backtracking into\nany of the iterations if a subsequent item fails to match.\n.P\nBy default, quantifiers are \"greedy\", that is, they match as much as possible\n(up to the maximum number of permitted repetitions), without causing the rest\nof the pattern to fail. The classic example of where this gives problems is in\ntrying to match comments in C programs. These appear between /* and */ and\nwithin the comment, individual * and / characters may appear. An attempt to\nmatch C comments by applying the pattern\n.sp\n  /\\e*.*\\e*/\n.sp\nto the string\n.sp\n  /* first comment */  not comment  /* second comment */\n.sp\nfails, because it matches the entire string owing to the greediness of the .*\nitem. However, if a quantifier is followed by a question mark, it ceases to be\ngreedy, and instead matches the minimum number of times possible, so the\npattern\n.sp\n  /\\e*.*?\\e*/\n.sp\ndoes the right thing with C comments. The meaning of the various quantifiers is\nnot otherwise changed, just the preferred number of matches. Do not confuse\nthis use of question mark with its use as a quantifier in its own right.\nBecause it has two uses, it can sometimes appear doubled, as in\n.sp\n  \\ed??\\ed\n.sp\nwhich matches one digit by preference, but can match two if that is the only\nway the rest of the pattern matches.\n.P\nIf the PCRE2_UNGREEDY option is set (an option that is not available in Perl),\nthe quantifiers are not greedy by default, but individual ones can be made\ngreedy by following them with a question mark. In other words, it inverts the\ndefault behaviour.\n.P\nWhen a parenthesized group is quantified with a minimum repeat count that\nis greater than 1 or with a limited maximum, more memory is required for the\ncompiled pattern, in proportion to the size of the minimum or maximum.\n.P\nIf a pattern starts with .* or .{0,} and the PCRE2_DOTALL option (equivalent\nto Perl's /s) is set, thus allowing the dot to match newlines, the pattern is\nimplicitly anchored, because whatever follows will be tried against every\ncharacter position in the subject string, so there is no point in retrying the\noverall match at any position after the first. PCRE2 normally treats such a\npattern as though it were preceded by \\eA.\n.P\nIn cases where it is known that the subject string contains no newlines, it is\nworth setting PCRE2_DOTALL in order to obtain this optimization, or\nalternatively, using ^ to indicate anchoring explicitly.\n.P\nHowever, there are some cases where the optimization cannot be used. When .*\nis inside capturing parentheses that are the subject of a backreference\nelsewhere in the pattern, a match at the start may fail where a later one\nsucceeds. Consider, for example:\n.sp\n  (.*)abc\\e1\n.sp\nIf the subject is \"xyz123abc123\" the match point is the fourth character. For\nthis reason, such a pattern is not implicitly anchored.\n.P\nAnother case where implicit anchoring is not applied is when the leading .* is\ninside an atomic group. Once again, a match at the start may fail where a later\none succeeds. Consider this pattern:\n.sp\n  (?>.*?a)b\n.sp\nIt matches \"ab\" in the subject \"aab\". The use of the backtracking control verbs\n(*PRUNE) and (*SKIP) also disable this optimization. To do so explicitly,\neither pass the compile option PCRE2_NO_DOTSTAR_ANCHOR, or call\n\\fBpcre2_set_optimize()\\fP with a PCRE2_DOTSTAR_ANCHOR_OFF directive.\n.P\nWhen a capture group is repeated, the value captured is the substring that\nmatched the final iteration. For example, after\n.sp\n  (tweedle[dume]{3}\\es*)+\n.sp\nhas matched \"tweedledum tweedledee\" the value of the captured substring is\n\"tweedledee\". However, if there are nested capture groups, the corresponding\ncaptured values may have been set in previous iterations. For example, after\n.sp\n  (a|(b))+\n.sp\nmatches \"aba\" the value of the second captured substring is \"b\".\n.\n.\n.\\\" HTML <a name=\"atomicgroup\"></a>\n.SH \"ATOMIC GROUPING AND POSSESSIVE QUANTIFIERS\"\n.rs\n.sp\nWith both maximizing (\"greedy\") and minimizing (\"ungreedy\" or \"lazy\")\nrepetition, failure of what follows normally causes the repeated item to be\nre-evaluated to see if a different number of repeats allows the rest of the\npattern to match. Sometimes it is useful to prevent this, either to change the\nnature of the match, or to cause it fail earlier than it otherwise might, when\nthe author of the pattern knows there is no point in carrying on.\n.P\nConsider, for example, the pattern \\ed+foo when applied to the subject line\n.sp\n  123456bar\n.sp\nAfter matching all 6 digits and then failing to match \"foo\", the normal\naction of the matcher is to try again with only 5 digits matching the \\ed+\nitem, and then with 4, and so on, before ultimately failing. \"Atomic grouping\"\n(a term taken from Jeffrey Friedl's book) provides the means for specifying\nthat once a group has matched, it is not to be re-evaluated in this way.\n.P\nIf we use atomic grouping for the previous example, the matcher gives up\nimmediately on failing to match \"foo\" the first time. The notation is a kind of\nspecial parenthesis, starting with (?> as in this example:\n.sp\n  (?>\\ed+)foo\n.sp\nPerl 5.28 introduced an experimental alphabetic form starting with (* which may\nbe easier to remember:\n.sp\n  (*atomic:\\ed+)foo\n.sp\nThis kind of parenthesized group \"locks up\" the part of the pattern it contains\nonce it has matched, and a failure further into the pattern is prevented from\nbacktracking into it. Backtracking past it to previous items, however, works as\nnormal.\n.P\nAn alternative description is that a group of this type matches exactly the\nstring of characters that an identical standalone pattern would match, if\nanchored at the current point in the subject string.\n.P\nAtomic groups are not capture groups. Simple cases such as the above example\ncan be thought of as a maximizing repeat that must swallow everything it can.\nSo, while both \\ed+ and \\ed+? are prepared to adjust the number of digits they\nmatch in order to make the rest of the pattern match, (?>\\ed+) can only match\nan entire sequence of digits.\n.P\nAtomic groups in general can of course contain arbitrarily complicated\nexpressions, and can be nested. However, when the contents of an atomic\ngroup is just a single repeated item, as in the example above, a simpler\nnotation, called a \"possessive quantifier\" can be used. This consists of an\nadditional + character following a quantifier. Using this notation, the\nprevious example can be rewritten as\n.sp\n  \\ed++foo\n.sp\nNote that a possessive quantifier can be used with an entire group, for\nexample:\n.sp\n  (abc|xyz){2,3}+\n.sp\nPossessive quantifiers are always greedy; the setting of the PCRE2_UNGREEDY\noption is ignored. They are a convenient notation for the simpler forms of\natomic group. However, there is no difference in the meaning of a possessive\nquantifier and the equivalent atomic group, though there may be a performance\ndifference; possessive quantifiers should be slightly faster.\n.P\nThe possessive quantifier syntax is an extension to the Perl 5.8 syntax.\nJeffrey Friedl originated the idea (and the name) in the first edition of his\nbook. Mike McCloskey liked it, so implemented it when he built Sun's Java\npackage, and PCRE1 copied it from there. It found its way into Perl at release\n5.10.\n.P\nPCRE2 has an optimization that automatically \"possessifies\" certain simple\npattern constructs. For example, the sequence A+B is treated as A++B because\nthere is no point in backtracking into a sequence of A's when B must follow.\nThis feature can be disabled by the PCRE2_NO_AUTO_POSSESS option, by calling\n\\fBpcre2_set_optimize()\\fP with a PCRE2_AUTO_POSSESS_OFF directive, or by\nstarting the pattern with (*NO_AUTO_POSSESS).\n.P\nWhen a pattern contains an unlimited repeat inside a group that can itself be\nrepeated an unlimited number of times, the use of an atomic group is the only\nway to avoid some failing matches taking a very long time indeed. The pattern\n.sp\n  (\\eD+|<\\ed+>)*[!?]\n.sp\nmatches an unlimited number of substrings that either consist of non-digits, or\ndigits enclosed in <>, followed by either ! or ?. When it matches, it runs\nquickly. However, if it is applied to\n.sp\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n.sp\nit takes a long time before reporting failure. This is because the string can\nbe divided between the internal \\eD+ repeat and the external * repeat in a\nlarge number of ways, and all have to be tried. (The example uses [!?] rather\nthan a single character at the end, because both PCRE2 and Perl have an\noptimization that allows for fast failure when a single character is used. They\nremember the last single character that is required for a match, and fail early\nif it is not present in the string.) If the pattern is changed so that it uses\nan atomic group, like this:\n.sp\n  ((?>\\eD+)|<\\ed+>)*[!?]\n.sp\nsequences of non-digits cannot be broken, and failure happens quickly.\n.\n.\n.\\\" HTML <a name=\"backreferences\"></a>\n.SH \"BACKREFERENCES\"\n.rs\n.sp\nOutside a character class, a backslash followed by a digit greater than 0 (and\npossibly further digits) is a backreference to a capture group earlier (that\nis, to its left) in the pattern, provided there have been that many previous\ncapture groups.\n.P\nHowever, if the decimal number following the backslash is less than 8, it is\nalways taken as a backreference, and causes an error only if there are not that\nmany capture groups in the entire pattern. In other words, the group that is\nreferenced need not be to the left of the reference for numbers less than 8. A\n\"forward backreference\" of this type can make sense when a repetition is\ninvolved and the group to the right has participated in an earlier iteration.\n.P\nIt is not possible to have a numerical \"forward backreference\" to a group whose\nnumber is 8 or more using this syntax because a sequence such as \\e50 is\ninterpreted as a character defined in octal. See the subsection entitled\n\"Non-printing characters\"\n.\\\" HTML <a href=\"#digitsafterbackslash\">\n.\\\" </a>\nabove\n.\\\"\nfor further details of the handling of digits following a backslash. Other\nforms of backreferencing do not suffer from this restriction. In particular,\nthere is no problem when named capture groups are used (see below).\n.P\nAnother way of avoiding the ambiguity inherent in the use of digits following a\nbackslash is to use the \\eg escape sequence. This escape must be followed by a\nsigned or unsigned number, optionally enclosed in braces. These examples are\nall identical:\n.sp\n  (ring), \\e1\n  (ring), \\eg1\n  (ring), \\eg{1}\n.sp\nAn unsigned number specifies an absolute reference without the ambiguity that\nis present in the older syntax. It is also useful when literal digits follow\nthe reference. A signed number is a relative reference. Consider this example:\n.sp\n  (abc(def)ghi)\\eg{-1}\n.sp\nThe sequence \\eg{-1} is a reference to the capture group whose number is one\nless than the number of the next group to be started, so in this example (where\nthe next group would be numbered 3) is it equivalent to \\e2, and \\eg{-2} would\nbe equivalent to \\e1. Note that if this construct is inside a capture group,\nthat group is included in the count, so in this example \\eg{-2} also refers to\ngroup 1:\n.sp\n  (A)(\\eg{-2}B)\n.sp\nThe use of relative references can be helpful in long patterns, and also in\npatterns that are created by joining together fragments that contain references\nwithin themselves.\n.P\nThe sequence \\eg{+1} is a reference to the next capture group that is started\nafter this item, and \\eg{+2} refers to the one after that, and so on. This kind\nof forward reference can be useful in patterns that repeat. Perl does not\nsupport the use of + in this way.\n.P\nA backreference matches whatever actually most recently matched the capture\ngroup in the current subject string, rather than anything at all that matches\nthe group (see\n.\\\" HTML <a href=\"#groupsassubroutines\">\n.\\\" </a>\n\"Groups as subroutines\"\n.\\\"\nbelow for a way of doing that). So the pattern\n.sp\n  (sens|respons)e and \\e1ibility\n.sp\nmatches \"sense and sensibility\" and \"response and responsibility\", but not\n\"sense and responsibility\". If caseful matching is in force at the time of the\nbackreference, the case of letters is relevant. For example,\n.sp\n  ((?i)rah)\\es+\\e1\n.sp\nmatches \"rah rah\" and \"RAH RAH\", but not \"RAH rah\", even though the original\ncapture group is matched caselessly.\n.P\nThere are several different ways of writing backreferences to named capture\ngroups. The .NET syntax is \\ek{name}, the Python syntax is (?=name), and the\noriginal Perl syntax is \\ek<name> or \\ek'name'. All of these are now supported\nby both Perl and PCRE2. Perl 5.10's unified backreference syntax, in which \\eg\ncan be used for both numeric and named references, is also supported by PCRE2.\nWe could rewrite the above example in any of the following ways:\n.sp\n  (?<p1>(?i)rah)\\es+\\ek<p1>\n  (?'p1'(?i)rah)\\es+\\ek{p1}\n  (?P<p1>(?i)rah)\\es+(?P=p1)\n  (?<p1>(?i)rah)\\es+\\eg{p1}\n.sp\nA capture group that is referenced by name may appear in the pattern before or\nafter the reference.\n.P\nThere may be more than one backreference to the same group. If a group has not\nactually been used in a particular match, backreferences to it always fail by\ndefault. For example, the pattern\n.sp\n  (a|(bc))\\e2\n.sp\nalways fails if it starts to match \"a\" rather than \"bc\". However, if the\nPCRE2_MATCH_UNSET_BACKREF option is set at compile time, a backreference to an\nunset value matches an empty string.\n.P\nBecause there may be many capture groups in a pattern, all digits following a\nbackslash are taken as part of a potential backreference number. If the pattern\ncontinues with a digit character, some delimiter must be used to terminate the\nbackreference. If the PCRE2_EXTENDED or PCRE2_EXTENDED_MORE option is set, this\ncan be white space. Otherwise, the \\eg{} syntax or an empty comment (see\n.\\\" HTML <a href=\"#comments\">\n.\\\" </a>\n\"Comments\"\n.\\\"\nbelow) can be used.\n.\n.\n.SS \"Recursive backreferences\"\n.rs\n.sp\nA backreference that occurs inside the group to which it refers fails when the\ngroup is first used, so, for example, (a\\e1) never matches. However, such\nreferences can be useful inside repeated groups. For example, the pattern\n.sp\n  (a|b\\e1)+\n.sp\nmatches any number of \"a\"s and also \"aba\", \"ababbaa\" etc. At each iteration of\nthe group, the backreference matches the character string corresponding to the\nprevious iteration. In order for this to work, the pattern must be such that\nthe first iteration does not need to match the backreference. This can be done\nusing alternation, as in the example above, or by a quantifier with a minimum\nof zero.\n.P\nFor versions of PCRE2 less than 10.25, backreferences of this type used to\ncause the group that they reference to be treated as an\n.\\\" HTML <a href=\"#atomicgroup\">\n.\\\" </a>\natomic group.\n.\\\"\nThis restriction no longer applies, and backtracking into such groups can occur\nas normal.\n.\n.\n.\\\" HTML <a name=\"bigassertions\"></a>\n.SH ASSERTIONS\n.rs\n.sp\nAn assertion is a test that does not consume any characters. The test must\nsucceed for the match to continue. The simple assertions coded as \\eb, \\eB,\n\\eA, \\eG, \\eZ, \\ez, ^ and $ are described\n.\\\" HTML <a href=\"#smallassertions\">\n.\\\" </a>\nabove.\n.\\\"\n.P\nMore complicated assertions are coded as parenthesized groups. If matching such\na group succeeds, matching continues after it, but with the matching position\nin the subject string reset to what it was before the assertion was processed.\n.P\nA special kind of assertion, called a \"scan substring\" assertion, matches a\nsubpattern against a previously captured substring. This is described in the\nsection entitled\n.\\\" HTML <a href=\"#scansubstringassertions\">\n.\\\" </a>\n\"Scan substring assertions\"\n.\\\"\nbelow. It is a PCRE2 extension, not compatible with Perl.\n.P\nThe other goup-based assertions are of two kinds: those that look ahead of the\ncurrent position in the subject string, and those that look behind it, and in\neach case an assertion may be positive (must match for the assertion to be\ntrue) or negative (must not match for the assertion to be true).\n.P\nThe Perl-compatible lookaround assertions are atomic. If an assertion is true,\nbut there is a subsequent matching failure, there is no backtracking into the\nassertion. However, there are some cases where non-atomic assertions can be\nuseful. PCRE2 has some support for these, described in the section entitled\n.\\\" HTML <a href=\"#nonatomicassertions\">\n.\\\" </a>\n\"Non-atomic assertions\"\n.\\\"\nbelow, but they are not Perl-compatible.\n.P\nA lookaround assertion may appear as the condition in a\n.\\\" HTML <a href=\"#conditions\">\n.\\\" </a>\nconditional group\n.\\\"\n(see below). In this case, the result of matching the assertion determines\nwhich branch of the condition is followed.\n.P\nAssertion groups are not capture groups. If an assertion contains capture\ngroups within it, these are counted for the purposes of numbering the capture\ngroups in the whole pattern. Within each branch of an assertion, locally\ncaptured substrings may be referenced in the usual way. For example, a sequence\nsuch as (.)\\eg{-1} can be used to check that two adjacent characters are the\nsame.\n.P\nWhen a branch within an assertion fails to match, any substrings that were\ncaptured are discarded (as happens with any pattern branch that fails to\nmatch). A negative assertion is true only when all its branches fail to match;\nthis means that no captured substrings are ever retained after a successful\nnegative assertion. When an assertion contains a matching branch, what happens\ndepends on the type of assertion.\n.P\nFor a positive assertion, internally captured substrings in the successful\nbranch are retained, and matching continues with the next pattern item after\nthe assertion. For a negative assertion, a matching branch means that the\nassertion is not true. If such an assertion is being used as a condition in a\n.\\\" HTML <a href=\"#conditions\">\n.\\\" </a>\nconditional group\n.\\\"\n(see below), captured substrings are retained, because matching continues with\nthe \"no\" branch of the condition. For other failing negative assertions,\ncontrol passes to the previous backtracking point, thus discarding any captured\nstrings within the assertion.\n.P\nMost assertion groups may be repeated; though it makes no sense to assert the\nsame thing several times, the side effect of capturing in positive assertions\nmay occasionally be useful. However, an assertion that forms the condition for\na conditional group may not be quantified. PCRE2 used to restrict the\nrepetition of assertions, but from release 10.35 the only restriction is that\nan unlimited maximum repetition is changed to be one more than the minimum. For\nexample, {3,} is treated as {3,4}.\n.\n.\n.SS \"Alphabetic assertion names\"\n.rs\n.sp\nTraditionally, symbolic sequences such as (?= and (?<= have been used to\nspecify lookaround assertions. Perl 5.28 introduced some experimental\nalphabetic alternatives which might be easier to remember. They all start with\n(* instead of (? and must be written using lower case letters. PCRE2 supports\nthe following synonyms:\n.sp\n  (*positive_lookahead:  or (*pla: is the same as (?=\n  (*negative_lookahead:  or (*nla: is the same as (?!\n  (*positive_lookbehind: or (*plb: is the same as (?<=\n  (*negative_lookbehind: or (*nlb: is the same as (?<!\n.sp\nFor example, (*pla:foo) is the same assertion as (?=foo). In the following\nsections, the various assertions are described using the original symbolic\nforms.\n.\n.\n.SS \"Lookahead assertions\"\n.rs\n.sp\nLookahead assertions start with (?= for positive assertions and (?! for\nnegative assertions. For example,\n.sp\n  \\ew+(?=;)\n.sp\nmatches a word followed by a semicolon, but does not include the semicolon in\nthe match, and\n.sp\n  foo(?!bar)\n.sp\nmatches any occurrence of \"foo\" that is not followed by \"bar\". Note that the\napparently similar pattern\n.sp\n  (?!foo)bar\n.sp\ndoes not find an occurrence of \"bar\" that is preceded by something other than\n\"foo\"; it finds any occurrence of \"bar\" whatsoever, because the assertion\n(?!foo) is always true when the next three characters are \"bar\". A\nlookbehind assertion is needed to achieve the other effect.\n.P\nIf you want to force a matching failure at some point in a pattern, the most\nconvenient way to do it is with (?!) because an empty string always matches, so\nan assertion that requires there not to be an empty string must always fail.\nThe backtracking control verb (*FAIL) or (*F) is a synonym for (?!).\n.\n.\n.\\\" HTML <a name=\"lookbehind\"></a>\n.SS \"Lookbehind assertions\"\n.rs\n.sp\nLookbehind assertions start with (?<= for positive assertions and (?<! for\nnegative assertions. For example,\n.sp\n  (?<!foo)bar\n.sp\ndoes find an occurrence of \"bar\" that is not preceded by \"foo\". The contents of\na lookbehind assertion are restricted such that there must be a known maximum\nto the lengths of all the strings it matches. There are two cases:\n.P\nIf every top-level alternative matches a fixed length, for example\n.sp\n  (?<=colour|color)\n.sp\nthere is a limit of 65535 characters to the lengths, which do not have to be\nthe same, as this example demonstrates. This is the only kind of lookbehind\nsupported by PCRE2 versions earlier than 10.43 and by the alternative matching\nfunction \\fBpcre2_dfa_match()\\fP.\n.P\nIn PCRE2 10.43 and later, \\fBpcre2_match()\\fP supports lookbehind assertions in\nwhich one or more top-level alternatives can match more than one string length,\nfor example\n.sp\n  (?<=colou?r)\n.sp\nThe maximum matching length for any branch of the lookbehind is limited to a\nvalue set by the calling program (default 255 characters). Unlimited repetition\n(for example \\ed*) is not supported. In some cases, the escape sequence \\eK\n.\\\" HTML <a href=\"#resetmatchstart\">\n.\\\" </a>\n(see above)\n.\\\"\ncan be used instead of a lookbehind assertion at the start of a pattern to get\nround the length limit restriction.\n.P\nIn UTF-8 and UTF-16 modes, PCRE2 does not allow the \\eC escape (which matches a\nsingle code unit even in a UTF mode) to appear in lookbehind assertions,\nbecause it makes it impossible to calculate the length of the lookbehind. The\n\\eX and \\eR escapes, which can match different numbers of code units, are never\npermitted in lookbehinds.\n.P\n.\\\" HTML <a href=\"#groupsassubroutines\">\n.\\\" </a>\n\"Subroutine\"\n.\\\"\ncalls (see below) such as (?2) or (?&X) are permitted in lookbehinds, as long\nas the called capture group matches a limited-length string. However,\n.\\\" HTML <a href=\"#recursion\">\n.\\\" </a>\nrecursion,\n.\\\"\nthat is, a \"subroutine\" call into a group that is already active,\nis not supported.\n.P\nPCRE2 supports backreferences in lookbehinds, but only if certain conditions\nare met. The PCRE2_MATCH_UNSET_BACKREF option must not be set, there must be no\nuse of (?| in the pattern (it creates duplicate group numbers), and if the\nbackreference is by name, the name must be unique. Of course, the referenced\ngroup must itself match a limited length substring. The following pattern\nmatches words containing at least two characters that begin and end with the\nsame character:\n.sp\n   \\eb(\\ew)\\ew++(?<=\\e1)\n.P\nPossessive quantifiers can be used in conjunction with lookbehind assertions to\nspecify efficient matching at the end of subject strings. Consider a simple\npattern such as\n.sp\n  abcd$\n.sp\nwhen applied to a long string that does not match. Because matching proceeds\nfrom left to right, PCRE2 will look for each \"a\" in the subject and then see if\nwhat follows matches the rest of the pattern. If the pattern is specified as\n.sp\n  ^.*abcd$\n.sp\nthe initial .* matches the entire string at first, but when this fails (because\nthere is no following \"a\"), it backtracks to match all but the last character,\nthen all but the last two characters, and so on. Once again the search for \"a\"\ncovers the entire string, from right to left, so we are no better off. However,\nif the pattern is written as\n.sp\n  ^.*+(?<=abcd)\n.sp\nthere can be no backtracking for the .*+ item because of the possessive\nquantifier; it can match only the entire string. The subsequent lookbehind\nassertion does a single test on the last four characters. If it fails, the\nmatch fails immediately. For long strings, this approach makes a significant\ndifference to the processing time.\n.\n.\n.SS \"Using multiple assertions\"\n.rs\n.sp\nSeveral assertions (of any sort) may occur in succession. For example,\n.sp\n  (?<=\\ed{3})(?<!999)foo\n.sp\nmatches \"foo\" preceded by three digits that are not \"999\". Notice that each of\nthe assertions is applied independently at the same point in the subject\nstring. First there is a check that the previous three characters are all\ndigits, and then there is a check that the same three characters are not \"999\".\nThis pattern does \\fInot\\fP match \"foo\" preceded by six characters, the first\nof which are digits and the last three of which are not \"999\". For example, it\ndoesn't match \"123abcfoo\". A pattern to do that is\n.sp\n  (?<=\\ed{3}...)(?<!999)foo\n.sp\nThis time the first assertion looks at the preceding six characters, checking\nthat the first three are digits, and then the second assertion checks that the\npreceding three characters are not \"999\".\n.P\nAssertions can be nested in any combination. For example,\n.sp\n  (?<=(?<!foo)bar)baz\n.sp\nmatches an occurrence of \"baz\" that is preceded by \"bar\" which in turn is not\npreceded by \"foo\", while\n.sp\n  (?<=\\ed{3}(?!999)...)foo\n.sp\nis another pattern that matches \"foo\" preceded by three digits and any three\ncharacters that are not \"999\".\n.\n.\n.\\\" HTML <a name=\"nonatomicassertions\"></a>\n.SH \"NON-ATOMIC ASSERTIONS\"\n.rs\n.sp\nTraditional lookaround assertions are atomic. That is, if an assertion is true,\nbut there is a subsequent matching failure, there is no backtracking into the\nassertion. However, there are some cases where non-atomic positive assertions\ncan be useful. PCRE2 provides these using the following syntax:\n.sp\n  (*non_atomic_positive_lookahead:  or (*napla: or (?*\n  (*non_atomic_positive_lookbehind: or (*naplb: or (?<*\n.sp\nConsider the problem of finding the right-most word in a string that also\nappears earlier in the string, that is, it must appear at least twice in total.\nThis pattern returns the required result as captured substring 1:\n.sp\n  ^(?x)(*napla: .* \\eb(\\ew++)) (?> .*? \\eb\\e1\\eb ){2}\n.sp\nFor a subject such as \"word1 word2 word3 word2 word3 word4\" the result is\n\"word3\". How does it work? At the start, ^(?x) anchors the pattern and sets the\n\"x\" option, which causes white space (introduced for readability) to be\nignored. Inside the assertion, the greedy .* at first consumes the entire\nstring, but then has to backtrack until the rest of the assertion can match a\nword, which is captured by group 1. In other words, when the assertion first\nsucceeds, it captures the right-most word in the string.\n.P\nThe current matching point is then reset to the start of the subject, and the\nrest of the pattern match checks for two occurrences of the captured word,\nusing an ungreedy .*? to scan from the left. If this succeeds, we are done, but\nif the last word in the string does not occur twice, this part of the pattern\nfails. If a traditional atomic lookahead (?= or (*pla: had been used, the\nassertion could not be re-entered, and the whole match would fail. The pattern\nwould succeed only if the very last word in the subject was found twice.\n.P\nUsing a non-atomic lookahead, however, means that when the last word does not\noccur twice in the string, the lookahead can backtrack and find the second-last\nword, and so on, until either the match succeeds, or all words have been\ntested.\n.P\nTwo conditions must be met for a non-atomic assertion to be useful: the\ncontents of one or more capturing groups must change after a backtrack into the\nassertion, and there must be a backreference to a changed group later in the\npattern. If this is not the case, the rest of the pattern match fails exactly\nas before because nothing has changed, so using a non-atomic assertion just\nwastes resources.\n.P\nThere is one exception to backtracking into a non-atomic assertion. If an\n(*ACCEPT) control verb is triggered, the assertion succeeds atomically. That\nis, a subsequent match failure cannot backtrack into the assertion.\n.P\nNon-atomic assertions are not supported by the alternative matching function\n\\fBpcre2_dfa_match()\\fP. They are supported by JIT, but only if they do not\ncontain any control verbs such as (*ACCEPT). (This may change in future). Note\nthat assertions that appear as conditions for\n.\\\" HTML <a href=\"#conditions\">\n.\\\" </a>\nconditional groups\n.\\\"\n(see below) must be atomic.\n.\n.\n.\\\" HTML <a name=\"scansubstringassertions\"></a>\n.SH \"SCAN SUBSTRING ASSERTIONS\"\n.rs\n.sp\nA special kind of assertion, not compatible with Perl, makes it possible to\ncheck the contents of a captured substring by matching it with a subpattern.\nBecause this involves capturing, this feature is not supported by\n\\fBpcre2_dfa_match()\\fP.\n.P\nA scan substring assertion starts with the sequence (*scan_substring: or\n(*scs: which is followed by a list of substring numbers (absolute or relative)\nand/or substring names enclosed in single quotes or angle brackets, all within\nparentheses. The rest of the item is the subpattern that is applied to the\nsubstring, as shown in these examples:\n.sp\n  (*scan_substring:(1)...)\n  (*scs:(-2)...)\n  (*scs:('AB')...)\n  (*scs:(1,'AB',-2)...)\n.sp\nThe list of groups is checked in the order they are given, and it is the\ncontents of the first one that is found to be set that are scanned. When\nPCRE2_DUPNAMES is set and there are ambiguous group names, all groups with the\nsame name are checked in numerical order. A scan substring assertion fails if\nnone of the groups it references have been set.\n.P\nThe pattern match on the substring is always anchored, that is, it must match\nfrom the start of the substring. There is no \"bumpalong\" if it does not match\nat the start. The end of the subject is temporarily reset to be the end of the\nsubstring, so \\eZ, \\ez, and $ will match there. However, the start of the\nsubject is \\fInot\\fP reset. This means that ^ matches only if the substring is\nactually at the start of the main subject, but it also means that lookbehind\nassertions into what precedes the substring are possible.\n.P\nHere is a very simple example: find a word that contains the rare (in English)\nsequence of letters \"rh\" not at the start:\n.sp\n  \\eb(\\ew++)(*scs:(1).+rh)\n.sp\nThe first group captures a word which is then scanned by the second group.\nThis example does not actually need this heavyweight feature; the same match\ncan be achieved with:\n.sp\n  \\eb\\ew+?rh\\ew*\\eb\n.sp\nWhen things are more complicated, however, scanning a captured substring can be\na useful way to describe the required match. For exmple, there is a rather\ncomplicated pattern in the PCRE2 test data that checks an entire subject string\nfor a palindrome, that is, the sequence of letters is the same in both\ndirections. Suppose you want to search for individual words of two or more\ncharacters such as \"level\" that are palindromes:\n.sp\n  (\\eb\\ew{2,}+\\eb)(*scs:(1)...palindrome-matching-pattern...)\n.sp\nWithin a substring scanning subpattern, references to other groups work as\nnormal. Capturing groups may appear, and will retain their values during\nongoing matching if the assertion succeeds.\n.\n.\n.SH \"SCRIPT RUNS\"\n.rs\n.sp\nIn concept, a script run is a sequence of characters that are all from the same\nUnicode script such as Latin or Greek. However, because some scripts are\ncommonly used together, and because some diacritical and other marks are used\nwith multiple scripts, it is not that simple. There is a full description of\nthe rules that PCRE2 uses in the section entitled\n.\\\" HTML <a href=\"pcre2unicode.html#scriptruns\">\n.\\\" </a>\n\"Script Runs\"\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2unicode\\fP\n.\\\"\ndocumentation.\n.P\nIf part of a pattern is enclosed between (*script_run: or (*sr: and a closing\nparenthesis, it fails if the sequence of characters that it matches are not a\nscript run. After a failure, normal backtracking occurs. Script runs can be\nused to detect spoofing attacks using characters that look the same, but are\nfrom different scripts. The string \"paypal.com\" is an infamous example, where\nthe letters could be a mixture of Latin and Cyrillic. This pattern ensures that\nthe matched characters in a sequence of non-spaces that follow white space are\na script run:\n.sp\n  \\es+(*sr:\\eS+)\n.sp\nTo be sure that they are all from the Latin script (for example), a lookahead\ncan be used:\n.sp\n  \\es+(?=\\ep{Latin})(*sr:\\eS+)\n.sp\nThis works as long as the first character is expected to be a character in that\nscript, and not (for example) punctuation, which is allowed with any script. If\nthis is not the case, a more creative lookahead is needed. For example, if\ndigits, underscore, and dots are permitted at the start:\n.sp\n  \\es+(?=[0-9_.]*\\ep{Latin})(*sr:\\eS+)\n.sp\n.P\nIn many cases, backtracking into a script run pattern fragment is not\ndesirable. The script run can employ an atomic group to prevent this. Because\nthis is a common requirement, a shorthand notation is provided by\n(*atomic_script_run: or (*asr:\n.sp\n  (*asr:...) is the same as (*sr:(?>...))\n.sp\nNote that the atomic group is inside the script run. Putting it outside would\nnot prevent backtracking into the script run pattern.\n.P\nSupport for script runs is not available if PCRE2 is compiled without Unicode\nsupport. A compile-time error is given if any of the above constructs is\nencountered. Script runs are not supported by the alternate matching function,\n\\fBpcre2_dfa_match()\\fP because they use the same mechanism as capturing\nparentheses.\n.P\n\\fBWarning:\\fP The (*ACCEPT) control verb\n.\\\" HTML <a href=\"#acceptverb\">\n.\\\" </a>\n(see below)\n.\\\"\nshould not be used within a script run group, because it causes an immediate\nexit from the group, bypassing the script run checking.\n.\n.\n.\\\" HTML <a name=\"conditions\"></a>\n.SH \"CONDITIONAL GROUPS\"\n.rs\n.sp\nIt is possible to cause the matching process to obey a pattern fragment\nconditionally or to choose between two alternative fragments, depending on\nthe result of an assertion, or whether a specific capture group has\nalready been matched. The two possible forms of conditional group are:\n.sp\n  (?(condition)yes-pattern)\n  (?(condition)yes-pattern|no-pattern)\n.sp\nIf the condition is satisfied, the yes-pattern is used; otherwise the\nno-pattern (if present) is used. An absent no-pattern is equivalent to an empty\nstring (it always matches). If there are more than two alternatives in the\ngroup, a compile-time error occurs. Each of the two alternatives may itself\ncontain nested groups of any form, including conditional groups; the\nrestriction to two alternatives applies only at the level of the condition\nitself. This pattern fragment is an example where the alternatives are complex:\n.sp\n  (?(1) (A|B|C) | (D | (?(2)E|F) | E) )\n.sp\n.P\nThere are five kinds of condition: references to capture groups, references to\nrecursion, two pseudo-conditions called DEFINE and VERSION, and assertions.\n.\n.\n.SS \"Checking for a used capture group by number\"\n.rs\n.sp\nIf the text between the parentheses consists of a sequence of digits, the\ncondition is true if a capture group of that number has previously matched. If\nthere is more than one capture group with the same number (see the earlier\n.\\\"\n.\\\" HTML <a href=\"#recursion\">\n.\\\" </a>\nsection about duplicate group numbers),\n.\\\"\nthe condition is true if any of them have matched. An alternative notation,\nwhich is a PCRE2 extension, not supported by Perl, is to precede the digits\nwith a plus or minus sign. In this case, the group number is relative rather\nthan absolute. The most recently opened capture group (which could be enclosing\nthis condition) can be referenced by (?(-1), the next most recent by (?(-2),\nand so on. Inside loops it can also make sense to refer to subsequent groups.\nThe next capture group to be opened can be referenced as (?(+1), and so on. The\nvalue zero in any of these forms is not used; it provokes a compile-time error.\n.P\nConsider the following pattern, which contains non-significant white space to\nmake it more readable (assume the PCRE2_EXTENDED option) and to divide it into\nthree parts for ease of discussion:\n.sp\n  ( \\e( )?    [^()]+    (?(1) \\e) )\n.sp\nThe first part matches an optional opening parenthesis, and if that\ncharacter is present, sets it as the first captured substring. The second part\nmatches one or more characters that are not parentheses. The third part is a\nconditional group that tests whether or not the first capture group\nmatched. If it did, that is, if subject started with an opening parenthesis,\nthe condition is true, and so the yes-pattern is executed and a closing\nparenthesis is required. Otherwise, since no-pattern is not present, the\nconditional group matches nothing. In other words, this pattern matches a\nsequence of non-parentheses, optionally enclosed in parentheses.\n.P\nIf you were embedding this pattern in a larger one, you could use a relative\nreference:\n.sp\n  ...other stuff... ( \\e( )?    [^()]+    (?(-1) \\e) ) ...\n.sp\nThis makes the fragment independent of the parentheses in the larger pattern.\n.\n.\n.SS \"Checking for a used capture group by name\"\n.rs\n.sp\nPerl uses the syntax (?(<name>)...) or (?('name')...) to test for a used\ncapture group by name. For compatibility with earlier versions of PCRE1, which\nhad this facility before Perl, the syntax (?(name)...) is also recognized.\nNote, however, that undelimited names consisting of the letter R followed by\ndigits are ambiguous (see the following section). Rewriting the above example\nto use a named group gives this:\n.sp\n  (?<OPEN> \\e( )?    [^()]+    (?(<OPEN>) \\e) )\n.sp\nIf the name used in a condition of this kind is a duplicate, the test is\napplied to all groups of the same name, and is true if any one of them has\nmatched.\n.\n.\n.SS \"Checking for pattern recursion\"\n.rs\n.sp\n\"Recursion\" in this sense refers to any subroutine-like call from one part of\nthe pattern to another, whether or not it is actually recursive. See the\nsections entitled\n.\\\" HTML <a href=\"#recursion\">\n.\\\" </a>\n\"Recursive patterns\"\n.\\\"\nand\n.\\\" HTML <a href=\"#groupsassubroutines\">\n.\\\" </a>\n\"Groups as subroutines\"\n.\\\"\nbelow for details of recursion and subroutine calls.\n.P\nIf a condition is the string (R), and there is no capture group with the name\nR, the condition is true if matching is currently in a recursion or subroutine\ncall to the whole pattern or any capture group. If digits follow the letter R,\nand there is no group with that name, the condition is true if the most recent\ncall is into a group with the given number, which must exist somewhere in the\noverall pattern. This is a contrived example that is equivalent to a+b:\n.sp\n  ((?(R1)a+|(?1)b))\n.sp\nHowever, in both cases, if there is a capture group with a matching name, the\ncondition tests for its being set, as described in the section above, instead\nof testing for recursion. For example, creating a group with the name R1 by\nadding (?<R1>) to the above pattern completely changes its meaning.\n.P\nIf a name preceded by ampersand follows the letter R, for example:\n.sp\n  (?(R&name)...)\n.sp\nthe condition is true if the most recent recursion is into a group of that name\n(which must exist within the pattern).\n.P\nThis condition does not check the entire recursion stack. It tests only the\ncurrent level. If the name used in a condition of this kind is a duplicate, the\ntest is applied to all groups of the same name, and is true if any one of\nthem is the most recent recursion.\n.P\nAt \"top level\", all these recursion test conditions are false.\n.\n.\n.\\\" HTML <a name=\"subdefine\"></a>\n.SS \"Defining capture groups for use by reference only\"\n.rs\n.sp\nIf the condition is the string (DEFINE), the condition is always false, even if\nthere is a group with the name DEFINE. In this case, there may be only one\nalternative in the rest of the conditional group. It is always skipped if\ncontrol reaches this point in the pattern; the idea of DEFINE is that it can be\nused to define subroutines that can be referenced from elsewhere. (The use of\n.\\\" HTML <a href=\"#groupsassubroutines\">\n.\\\" </a>\nsubroutines\n.\\\"\nis described below.) For example, a pattern to match an IPv4 address such as\n\"192.168.23.245\" could be written like this (ignore white space and line\nbreaks):\n.sp\n  (?(DEFINE) (?<byte> 2[0-4]\\ed | 25[0-5] | 1\\ed\\ed | [1-9]?\\ed) )\n  \\eb (?&byte) (\\e.(?&byte)){3} \\eb\n.sp\nThe first part of the pattern is a DEFINE group inside which another group\nnamed \"byte\" is defined. This matches an individual component of an IPv4\naddress (a number less than 256). When matching takes place, this part of the\npattern is skipped because DEFINE acts like a false condition. The rest of the\npattern uses references to the named group to match the four dot-separated\ncomponents of an IPv4 address, insisting on a word boundary at each end.\n.\n.\n.SS \"Checking the PCRE2 version\"\n.rs\n.sp\nPrograms that link with a PCRE2 library can check the version by calling\n\\fBpcre2_config()\\fP with appropriate arguments. Users of applications that do\nnot have access to the underlying code cannot do this. A special \"condition\"\ncalled VERSION exists to allow such users to discover which version of PCRE2\nthey are dealing with by using this condition to match a string such as\n\"yesno\". VERSION must be followed either by \"=\" or \">=\" and a version number.\nFor example:\n.sp\n  (?(VERSION>=10.4)yes|no)\n.sp\nThis pattern matches \"yes\" if the PCRE2 version is greater or equal to 10.4, or\n\"no\" otherwise. The fractional part of the version number could be ommited.\n.\n.\n.SS \"Assertion conditions\"\n.rs\n.sp\nIf the condition is not in any of the above formats, it must be a parenthesized\nassertion. This may be a positive or negative lookahead or lookbehind\nassertion. However, it must be a traditional atomic assertion, not one of the\n.\\\" HTML <a href=\"#nonatomicassertions\">\n.\\\" </a>\nnon-atomic assertions.\n.\\\"\n.P\nConsider this pattern, again containing non-significant white space, and with\nthe two alternatives on the second line:\n.sp\n  (?(?=[^a-z]*[a-z])\n  \\ed{2}-[a-z]{3}-\\ed{2}  |  \\ed{2}-\\ed{2}-\\ed{2} )\n.sp\nThe condition is a positive lookahead assertion that matches an optional\nsequence of non-letters followed by a letter. In other words, it tests for the\npresence of at least one letter in the subject. If a letter is found, the\nsubject is matched against the first alternative; otherwise it is matched\nagainst the second. This pattern matches strings in one of the two forms\ndd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.\n.P\nWhen an assertion that is a condition contains capture groups, any\ncapturing that occurs in a matching branch is retained afterwards, for both\npositive and negative assertions, because matching always continues after the\nassertion, whether it succeeds or fails. (Compare non-conditional assertions,\nfor which captures are retained only for positive assertions that succeed.)\n.\n.\n.\\\" HTML <a name=\"comments\"></a>\n.SH COMMENTS\n.rs\n.sp\nThere are two ways of including comments in patterns that are processed by\nPCRE2. In both cases, the start of the comment must not be in a character\nclass, nor in the middle of any other sequence of related characters such as\n(?: or a group name or number or a Unicode property name. The characters that\nmake up a comment play no part in the pattern matching.\n.P\nThe sequence (?# marks the start of a comment that continues up to the next\nclosing parenthesis. Nested parentheses are not permitted. If the\nPCRE2_EXTENDED or PCRE2_EXTENDED_MORE option is set, an unescaped # character\nalso introduces a comment, which in this case continues to immediately after\nthe next newline character or character sequence in the pattern. Which\ncharacters are interpreted as newlines is controlled by an option passed to the\ncompiling function or by a special sequence at the start of the pattern, as\ndescribed in the section entitled\n.\\\" HTML <a href=\"#newlines\">\n.\\\" </a>\n\"Newline conventions\"\n.\\\"\nabove. Note that the end of this type of comment is a literal newline sequence\nin the pattern; escape sequences that happen to represent a newline do not\ncount. For example, consider this pattern when PCRE2_EXTENDED is set, and the\ndefault newline convention (a single linefeed character) is in force:\n.sp\n  abc #comment \\en still comment\n.sp\nOn encountering the # character, \\fBpcre2_compile()\\fP skips along, looking for\na newline in the pattern. The sequence \\en is still literal at this stage, so\nit does not terminate the comment. Only an actual character with the code value\n0x0a (the default newline) does so.\n.\n.\n.\\\" HTML <a name=\"recursion\"></a>\n.SH \"RECURSIVE PATTERNS\"\n.rs\n.sp\nConsider the problem of matching a string in parentheses, allowing for\nunlimited nested parentheses. Without the use of recursion, the best that can\nbe done is to use a pattern that matches up to some fixed depth of nesting. It\nis not possible to handle an arbitrary nesting depth.\n.P\nFor some time, Perl has provided a facility that allows regular expressions to\nrecurse (amongst other things). It does this by interpolating Perl code in the\nexpression at run time, and the code can refer to the expression itself. A Perl\npattern using code interpolation to solve the parentheses problem can be\ncreated like this:\n.sp\n  $re = qr{\\e( (?: (?>[^()]+) | (?p{$re}) )* \\e)}x;\n.sp\nThe (?p{...}) item interpolates Perl code at run time, and in this case refers\nrecursively to the pattern in which it appears.\n.P\nObviously, PCRE2 cannot support the interpolation of Perl code. Instead, it\nsupports special syntax for recursion of the entire pattern, and also for\nindividual capture group recursion. After its introduction in PCRE1 and Python,\nthis kind of recursion was subsequently introduced into Perl at release 5.10.\n.P\nA special item that consists of (? followed by a number greater than zero and a\nclosing parenthesis is a recursive subroutine call of the capture group of the\ngiven number, provided that it occurs inside that group. (If not, it is a\n.\\\" HTML <a href=\"#groupsassubroutines\">\n.\\\" </a>\nnon-recursive subroutine\n.\\\"\ncall, which is described in the next section.) The special item (?R) or (?0) is\na recursive call of the entire regular expression.\n.P\nThis PCRE2 pattern solves the nested parentheses problem (assume the\nPCRE2_EXTENDED option is set so that white space is ignored):\n.sp\n  \\e( ( [^()]++ | (?R) )* \\e)\n.sp\nFirst it matches an opening parenthesis. Then it matches any number of\nsubstrings which can either be a sequence of non-parentheses, or a recursive\nmatch of the pattern itself (that is, a correctly parenthesized substring).\nFinally there is a closing parenthesis. Note the use of a possessive quantifier\nto avoid backtracking into sequences of non-parentheses.\n.P\nIf this were part of a larger pattern, you would not want to recurse the entire\npattern, so instead you could use this:\n.sp\n  ( \\e( ( [^()]++ | (?1) )* \\e) )\n.sp\nWe have put the pattern into parentheses, and caused the recursion to refer to\nthem instead of the whole pattern.\n.P\nIn a larger pattern, keeping track of parenthesis numbers can be tricky. This\nis made easier by the use of relative references. Instead of (?1) in the\npattern above you can write (?-2) to refer to the second most recently opened\nparentheses preceding the recursion. In other words, a negative number counts\ncapturing parentheses leftwards from the point at which it is encountered.\n.P\nBe aware however, that if\n.\\\" HTML <a href=\"#dupgroupnumber\">\n.\\\" </a>\nduplicate capture group numbers\n.\\\"\nare in use, relative references refer to the earliest group with the\nappropriate number. Consider, for example:\n.sp\n  (?|(a)|(b)) (c) (?-2)\n.sp\nThe first two capture groups (a) and (b) are both numbered 1, and group (c)\nis number 2. When the reference (?-2) is encountered, the second most recently\nopened parentheses has the number 1, but it is the first such group (the (a)\ngroup) to which the recursion refers. This would be the same if an absolute\nreference (?1) was used. In other words, relative references are just a\nshorthand for computing a group number.\n.P\nIt is also possible to refer to subsequent capture groups, by writing\nreferences such as (?+2). However, these cannot be recursive because the\nreference is not inside the parentheses that are referenced. They are always\n.\\\" HTML <a href=\"#groupsassubroutines\">\n.\\\" </a>\nnon-recursive subroutine\n.\\\"\ncalls, as described in the next section.\n.P\nAn alternative approach is to use named parentheses. The Perl syntax for this\nis (?&name); PCRE1's earlier syntax (?P>name) is also supported. We could\nrewrite the above example as follows:\n.sp\n  (?<pn> \\e( ( [^()]++ | (?&pn) )* \\e) )\n.sp\nIf there is more than one group with the same name, the earliest one is\nused.\n.P\nThe example pattern that we have been looking at contains nested unlimited\nrepeats, and so the use of a possessive quantifier for matching strings of\nnon-parentheses is important when applying the pattern to strings that do not\nmatch. For example, when this pattern is applied to\n.sp\n  (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()\n.sp\nit yields \"no match\" quickly. However, if a possessive quantifier is not used,\nthe match runs for a very long time indeed because there are so many different\nways the + and * repeats can carve up the subject, and all have to be tested\nbefore failure can be reported.\n.P\nAt the end of a match, the values of capturing parentheses are those from\nthe outermost level. If you want to obtain intermediate values, a callout\nfunction can be used (see below and the\n.\\\" HREF\n\\fBpcre2callout\\fP\n.\\\"\ndocumentation). If the pattern above is matched against\n.sp\n  (ab(cd)ef)\n.sp\nthe value for the inner capturing parentheses (numbered 2) is \"ef\", which is\nthe last value taken on at the top level. If a capture group is not matched at\nthe top level, its final captured value is unset, even if it was (temporarily)\nset at a deeper level during the matching process.\n.P\nDo not confuse the (?R) item with the condition (R), which tests for recursion.\nConsider this pattern, which matches text in angle brackets, allowing for\narbitrary nesting. Only digits are allowed in nested brackets (that is, when\nrecursing), whereas any characters are permitted at the outer level.\n.sp\n  < (?: (?(R) \\ed++  | [^<>]*+) | (?R)) * >\n.sp\nIn this pattern, (?(R) is the start of a conditional group, with two different\nalternatives for the recursive and non-recursive cases. The (?R) item is the\nactual recursive call.\n.\n.\n.\\\" HTML <a name=\"recursiondifference\"></a>\n.SS \"Differences in recursion processing between PCRE2 and Perl\"\n.rs\n.sp\nSome former differences between PCRE2 and Perl no longer exist.\n.P\nBefore release 10.30, recursion processing in PCRE2 differed from Perl in that\na recursive subroutine call was always treated as an atomic group. That is,\nonce it had matched some of the subject string, it was never re-entered, even\nif it contained untried alternatives and there was a subsequent matching\nfailure. (Historical note: PCRE implemented recursion before Perl did.)\n.P\nStarting with release 10.30, recursive subroutine calls are no longer treated\nas atomic. That is, they can be re-entered to try unused alternatives if there\nis a matching failure later in the pattern. This is now compatible with the way\nPerl works. If you want a subroutine call to be atomic, you must explicitly\nenclose it in an atomic group.\n.P\nSupporting backtracking into recursions simplifies certain types of recursive\npattern. For example, this pattern matches palindromic strings:\n.sp\n  ^((.)(?1)\\e2|.?)$\n.sp\nThe second branch in the group matches a single central character in the\npalindrome when there are an odd number of characters, or nothing when there\nare an even number of characters, but in order to work it has to be able to try\nthe second case when the rest of the pattern match fails. If you want to match\ntypical palindromic phrases, the pattern has to ignore all non-word characters,\nwhich can be done like this:\n.sp\n  ^\\eW*+((.)\\eW*+(?1)\\eW*+\\e2|\\eW*+.?)\\eW*+$\n.sp\nIf run with the PCRE2_CASELESS option, this pattern matches phrases such as \"A\nman, a plan, a canal: Panama!\". Note the use of the possessive quantifier *+ to\navoid backtracking into sequences of non-word characters. Without this, PCRE2\ntakes a great deal longer (ten times or more) to match typical phrases, and\nPerl takes so long that you think it has gone into a loop.\n.P\nAnother way in which PCRE2 and Perl used to differ in their recursion\nprocessing is in the handling of captured values. Formerly in Perl, when a\ngroup was called recursively or as a subroutine (see the next section), it\nhad no access to any values that were captured outside the recursion, whereas\nin PCRE2 these values can be referenced. Consider this pattern:\n.sp\n  ^(.)(\\e1|a(?2))\n.sp\nThis pattern matches \"bab\". The first capturing parentheses match \"b\", then in\nthe second group, when the backreference \\e1 fails to match \"b\", the second\nalternative matches \"a\" and then recurses. In the recursion, \\e1 does now match\n\"b\" and so the whole match succeeds. This match used to fail in Perl, but in\nlater versions (I tried 5.024) it now works.\n.\n.\n.\\\" HTML <a name=\"groupsassubroutines\"></a>\n.SS \"Groups as subroutines\"\n.rs\n.sp\nIf the syntax for a recursive group call (either by number or by name) is used\noutside the parentheses to which it refers, it operates a bit like a subroutine\nin a programming language. More accurately, PCRE2 treats the referenced group\nas an independent subpattern which it tries to match at the current matching\nposition. The called group may be defined before or after the reference. A\nnumbered reference can be absolute or relative, as in these examples:\n.sp\n  (...(absolute)...)...(?2)...\n  (...(relative)...)...(?-1)...\n  (...(?+1)...(relative)...\n.sp\nAn earlier example pointed out that the pattern\n.sp\n  (sens|respons)e and \\e1ibility\n.sp\nmatches \"sense and sensibility\" and \"response and responsibility\", but not\n\"sense and responsibility\". If instead the pattern\n.sp\n  (sens|respons)e and (?1)ibility\n.sp\nis used, it does match \"sense and responsibility\" as well as the other two\nstrings. Another example is given in the discussion of DEFINE above.\n.P\nLike recursions, subroutine calls used to be treated as atomic, but this\nchanged at PCRE2 release 10.30, so backtracking into subroutine calls can now\noccur. However, any capturing parentheses that are set during the subroutine\ncall revert to their previous values afterwards.\n.P\nProcessing options such as case-independence are fixed when a group is\ndefined, so if it is used as a subroutine, such options cannot be changed for\ndifferent calls. For example, consider this pattern:\n.sp\n  (abc)(?i:(?-1))\n.sp\nIt matches \"abcabc\". It does not match \"abcABC\" because the change of\nprocessing option does not affect the called group.\n.P\nThe behaviour of\n.\\\" HTML <a href=\"#backtrackcontrol\">\n.\\\" </a>\nbacktracking control verbs\n.\\\"\nin groups when called as subroutines is described in the section entitled\n.\\\" HTML <a href=\"#btsub\">\n.\\\" </a>\n\"Backtracking verbs in subroutines\"\n.\\\"\nbelow.\n.\n.\n.SS \"Recursion and subroutines with returned capture groups\"\n.rs\n.sp\nSince PCRE2 10.47, recursion and subroutine calls may also specify a list of\ncapture groups to return. This is a PCRE2 syntax extension not supported by\nPerl. The pattern matching recurses into the referenced expression as described\nabove, however, when the recursion returns to the calling expression the\nsubgroups captured during the recursion can be retained when the calling\nexpression's context is restored.\n.P\nWhen used as a subroutine, this allows the subroutine's capture groups to\nbe used as return values.\n.P\nOnly the specific capture groups listed by the caller will be retained, using\nthe following syntax:\n.sp\n  (?R(grouplist))       recurse whole pattern, returning capture groups\n  (?n(grouplist))       )\n  (?+n(grouplist))      )\n  (?-n(grouplist))      ) call subroutine, returning capture groups\n  (?&name(grouplist))   )\n  (?P>name(grouplist))  )\n.P\nThe list of capture groups \"grouplist\" is a comma-separated list of (absolute\nor relative) group numbers, and group names enclosed in single quotes or angle\nbrackets.\n.P\nHere is an example which first uses the DEFINE condition to create a re-usable\nroutine for matching a weekday, then calls that subroutine and retains the\ngroups it captures for use later:\n.sp\n  (?x: # ignore whitespace for clarity\n    # Define the routine \"weekendday\" which matches Saturday or\n    # Sunday, and returns the Sat/Sun prefix as \\ek<short>.\n    (?(DEFINE) (?<weekendday>\n        (?|(?<short>Sat)urday|(?<short>Sun)day) ) )\n    # Call the routine. Matches \"Saturday,Sat\" or \"Sunday,Sun\".\n    (?&weekendday(<short>)),\\ek<short> )\n.P\nThis feature is not available using the Oniguruma syntax \\eg<...> or \\eg'...'\nbelow.\n.\n.\n.\\\" HTML <a name=\"onigurumasubroutines\"></a>\n.SS \"Oniguruma subroutine syntax\"\n.rs\n.sp\nFor compatibility with Oniguruma, the non-Perl syntax \\eg followed by a name or\na number enclosed either in angle brackets or single quotes, is an alternative\nsyntax for calling a group as a subroutine, possibly recursively. Here are two\nof the examples used above, rewritten using this syntax:\n.sp\n  (?<pn> \\e( ( (?>[^()]+) | \\eg<pn> )* \\e) )\n  (sens|respons)e and \\eg'1'ibility\n.sp\nPCRE2 supports an extension to Oniguruma: if a number is preceded by a\nplus or a minus sign it is taken as a relative reference. For example:\n.sp\n  (abc)(?i:\\eg<-1>)\n.sp\nNote that \\eg{...} (Perl syntax) and \\eg<...> (Oniguruma syntax) are \\fInot\\fP\nsynonymous. The former is a backreference; the latter is a subroutine call.\n.\n.\n.SH CALLOUTS\n.rs\n.sp\nPerl has a feature whereby using the sequence (?{...}) causes arbitrary Perl\ncode to be obeyed in the middle of matching a regular expression. This makes it\npossible, amongst other things, to extract different substrings that match the\nsame pair of parentheses when there is a repetition.\n.P\nPCRE2 provides a similar feature, but of course it cannot obey arbitrary Perl\ncode. The feature is called \"callout\". The caller of PCRE2 provides an external\nfunction by putting its entry point in a match context using the function\n\\fBpcre2_set_callout()\\fP, and then passing that context to \\fBpcre2_match()\\fP\nor \\fBpcre2_dfa_match()\\fP. If no match context is passed, or if the callout\nentry point is set to NULL, callout points will be passed over silently during\nmatching. To disallow callouts in the pattern syntax, you may use the\nPCRE2_EXTRA_NEVER_CALLOUT option.\n.P\nWithin a regular expression, (?C<arg>) indicates a point at which the external\nfunction is to be called. There are two kinds of callout: those with a\nnumerical argument and those with a string argument. (?C) on its own with no\nargument is treated as (?C0). A numerical argument allows the application to\ndistinguish between different callouts. String arguments were added for release\n10.20 to make it possible for script languages that use PCRE2 to embed short\nscripts within patterns in a similar way to Perl.\n.P\nDuring matching, when PCRE2 reaches a callout point, the external function is\ncalled. It is provided with the number or string argument of the callout, the\nposition in the pattern, and one item of data that is also set in the match\nblock. The callout function may cause matching to proceed, to backtrack, or to\nfail.\n.P\nBy default, PCRE2 implements a number of optimizations at matching time, and\none side-effect is that sometimes callouts are skipped. If you need all\npossible callouts to happen, you need to set options that disable the relevant\noptimizations. More details, including a complete description of the\nprogramming interface to the callout function, are given in the\n.\\\" HREF\n\\fBpcre2callout\\fP\n.\\\"\ndocumentation.\n.\n.\n.SS \"Callouts with numerical arguments\"\n.rs\n.sp\nIf you just want to have a means of identifying different callout points, put a\nnumber less than 256 after the letter C. For example, this pattern has two\ncallout points:\n.sp\n  (?C1)abc(?C2)def\n.sp\nIf the PCRE2_AUTO_CALLOUT flag is passed to \\fBpcre2_compile()\\fP, numerical\ncallouts are automatically installed before each item in the pattern. They are\nall numbered 255. If there is a conditional group in the pattern whose\ncondition is an assertion, an additional callout is inserted just before the\ncondition. An explicit callout may also be set at this position, as in this\nexample:\n.sp\n  (?(?C9)(?=a)abc|def)\n.sp\nNote that this applies only to assertion conditions, not to other types of\ncondition.\n.\n.\n.SS \"Callouts with string arguments\"\n.rs\n.sp\nA delimited string may be used instead of a number as a callout argument. The\nstarting delimiter must be one of ` ' \" ^ % # $ { and the ending delimiter is\nthe same as the start, except for {, where the ending delimiter is }. If the\nending delimiter is needed within the string, it must be doubled. For\nexample:\n.sp\n  (?C'ab ''c'' d')xyz(?C{any text})pqr\n.sp\nThe doubling is removed before the string is passed to the callout function.\n.\n.\n.\\\" HTML <a name=\"backtrackcontrol\"></a>\n.SH \"BACKTRACKING CONTROL\"\n.rs\n.sp\nThere are a number of special \"Backtracking Control Verbs\" (to use Perl's\nterminology) that modify the behaviour of backtracking during matching. They\nare generally of the form (*VERB) or (*VERB:NAME). Some verbs take either form,\nand may behave differently depending on whether or not a name argument is\npresent. The names are not required to be unique within the pattern.\n.P\nBy default, for compatibility with Perl, a name is any sequence of characters\nthat does not include a closing parenthesis. The name is not processed in\nany way, and it is not possible to include a closing parenthesis in the name.\nThis can be changed by setting the PCRE2_ALT_VERBNAMES option, but the result\nis no longer Perl-compatible.\n.P\nWhen PCRE2_ALT_VERBNAMES is set, backslash processing is applied to verb names\nand only an unescaped closing parenthesis terminates the name. However, the\nonly backslash items that are permitted are \\eQ, \\eE, and sequences such as\n\\ex{100} that define character code points. Character type escapes such as \\ed\nare faulted.\n.P\nA closing parenthesis can be included in a name either as \\e) or between \\eQ\nand \\eE. In addition to backslash processing, if the PCRE2_EXTENDED or\nPCRE2_EXTENDED_MORE option is also set, unescaped white space in verb names is\nskipped, and #-comments are recognized, exactly as in the rest of the pattern.\nPCRE2_EXTENDED and PCRE2_EXTENDED_MORE do not affect verb names unless\nPCRE2_ALT_VERBNAMES is also set.\n.P\nThe maximum length of a name is 255 in the 8-bit library and 65535 in the\n16-bit and 32-bit libraries. If the name is empty, that is, if the closing\nparenthesis immediately follows the colon, the effect is as if the colon were\nnot there. Any number of these verbs may occur in a pattern. Except for\n(*ACCEPT), they may not be quantified.\n.P\nSince these verbs are specifically related to backtracking, most of them can be\nused only when the pattern is to be matched using the traditional matching\nfunction or JIT, because they use backtracking algorithms. With the exception\nof (*FAIL), which behaves like a failing negative assertion, the backtracking\ncontrol verbs cause an error if encountered by the DFA matching function.\n.P\nThe behaviour of these verbs in\n.\\\" HTML <a href=\"#btrepeat\">\n.\\\" </a>\nrepeated groups,\n.\\\"\n.\\\" HTML <a href=\"#btassert\">\n.\\\" </a>\nassertions,\n.\\\"\nand in\n.\\\" HTML <a href=\"#btsub\">\n.\\\" </a>\ncapture groups called as subroutines\n.\\\"\n(whether or not recursively) is documented below.\n.\n.\n.\\\" HTML <a name=\"nooptimize\"></a>\n.SS \"Optimizations that affect backtracking verbs\"\n.rs\n.sp\nPCRE2 contains some optimizations that are used to speed up matching by running\nsome checks at the start of each match attempt. For example, it may know the\nminimum length of matching subject, or that a particular character must be\npresent. When one of these optimizations bypasses the running of a match, any\nincluded backtracking verbs will not, of course, be processed. You can suppress\nthe start-of-match optimizations by setting the PCRE2_NO_START_OPTIMIZE option\nwhen calling \\fBpcre2_compile()\\fP, by calling \\fBpcre2_set_optimize()\\fP with a\nPCRE2_START_OPTIMIZE_OFF directive, or by starting the pattern with\n(*NO_START_OPT). There is more discussion of this option in the section\nentitled\n.\\\" HTML <a href=\"pcre2api.html#compiling\">\n.\\\" </a>\n\"Compiling a pattern\"\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation.\n.P\nExperiments with Perl suggest that it too has similar optimizations, and like\nPCRE2, turning them off can change the result of a match.\n.\n.\n.\\\" HTML <a name=\"acceptverb\"></a>\n.SS \"Verbs that act immediately\"\n.rs\n.sp\nThe following verbs act as soon as they are encountered.\n.sp\n   (*ACCEPT) or (*ACCEPT:NAME)\n.sp\nThis verb causes the match to end successfully, skipping the remainder of the\npattern. However, when it is inside a capture group that is called as a\nsubroutine, only that group is ended successfully. Matching then continues\nat the outer level. If (*ACCEPT) in triggered in a positive assertion, the\nassertion succeeds; in a negative assertion, the assertion fails.\n.P\nIf (*ACCEPT) is inside capturing parentheses, the data so far is captured. For\nexample:\n.sp\n  A((?:A|B(*ACCEPT)|C)D)\n.sp\nThis matches \"AB\", \"AAD\", or \"ACD\"; when it matches \"AB\", \"B\" is captured by\nthe outer parentheses.\n.P\n(*ACCEPT) is the only backtracking verb that is allowed to be quantified\nbecause an ungreedy quantification with a minimum of zero acts only when a\nbacktrack happens. Consider, for example,\n.sp\n  (A(*ACCEPT)??B)C\n.sp\nwhere A, B, and C may be complex expressions. After matching \"A\", the matcher\nprocesses \"BC\"; if that fails, causing a backtrack, (*ACCEPT) is triggered and\nthe match succeeds. In both cases, all but C is captured. Whereas (*COMMIT)\n(see below) means \"fail on backtrack\", a repeated (*ACCEPT) of this type means\n\"succeed on backtrack\".\n.P\n\\fBWarning:\\fP (*ACCEPT) should not be used within a script run group, because\nit causes an immediate exit from the group, bypassing the script run checking.\n.sp\n  (*FAIL) or (*FAIL:NAME)\n.sp\nThis verb causes a matching failure, forcing backtracking to occur. It may be\nabbreviated to (*F). It is equivalent to (?!) but easier to read. The Perl\ndocumentation notes that it is probably useful only when combined with (?{}) or\n(??{}). Those are, of course, Perl features that are not present in PCRE2. The\nnearest equivalent is the callout feature, as for example in this pattern:\n.sp\n  a+(?C)(*FAIL)\n.sp\nA match with the string \"aaaa\" always fails, but the callout is taken before\neach backtrack happens (in this example, 10 times).\n.P\n(*ACCEPT:NAME) and (*FAIL:NAME) behave the same as (*MARK:NAME)(*ACCEPT) and\n(*MARK:NAME)(*FAIL), respectively, that is, a (*MARK) is recorded just before\nthe verb acts.\n.\n.\n.SS \"Recording which path was taken\"\n.rs\n.sp\nThere is one verb whose main purpose is to track how a match was arrived at,\nthough it also has a secondary use in conjunction with advancing the match\nstarting point (see (*SKIP) below).\n.sp\n  (*MARK:NAME) or (*:NAME)\n.sp\nA name is always required with this verb. For all the other backtracking\ncontrol verbs, a NAME argument is optional.\n.P\nWhen a match succeeds, the name of the last-encountered mark name on the\nmatching path is passed back to the caller as described in the section entitled\n.\\\" HTML <a href=\"pcre2api.html#matchotherdata\">\n.\\\" </a>\n\"Other information about the match\"\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation. This applies to all instances of (*MARK) and other verbs,\nincluding those inside assertions and atomic groups. However, there are\ndifferences in those cases when (*MARK) is used in conjunction with (*SKIP) as\ndescribed below.\n.P\nThe mark name that was last encountered on the matching path is passed back. A\nverb without a NAME argument is ignored for this purpose. Here is an example of\n\\fBpcre2test\\fP output, where the \"mark\" modifier requests the retrieval and\noutputting of (*MARK) data:\n.sp\n    re> /X(*MARK:A)Y|X(*MARK:B)Z/mark\n  data> XY\n   0: XY\n  MK: A\n  XZ\n   0: XZ\n  MK: B\n.sp\nThe (*MARK) name is tagged with \"MK:\" in this output, and in this example it\nindicates which of the two alternatives matched. This is a more efficient way\nof obtaining this information than putting each alternative in its own\ncapturing parentheses.\n.P\nIf a verb with a name is encountered in a positive assertion that is true, the\nname is recorded and passed back if it is the last-encountered. This does not\nhappen for negative assertions or failing positive assertions.\n.P\nAfter a partial match or a failed match, the last encountered name in the\nentire match process is returned. For example:\n.sp\n    re> /X(*MARK:A)Y|X(*MARK:B)Z/mark\n  data> XP\n  No match, mark = B\n.sp\nNote that in this unanchored example the mark is retained from the match\nattempt that started at the letter \"X\" in the subject. Subsequent match\nattempts starting at \"P\" and then with an empty string do not get as far as the\n(*MARK) item, but nevertheless do not reset it.\n.P\nIf you are interested in (*MARK) values after failed matches, you should\nprobably either set the PCRE2_NO_START_OPTIMIZE option or call\n\\fBpcre2_set_optimize()\\fP with a PCRE2_START_OPTIMIZE_OFF directive\n.\\\" HTML <a href=\"#nooptimize\">\n.\\\" </a>\n(see above)\n.\\\"\nto ensure that the match is always attempted.\n.\n.\n.SS \"Verbs that act after backtracking\"\n.rs\n.sp\nThe following verbs do nothing when they are encountered. Matching continues\nwith what follows, but if there is a subsequent match failure, causing a\nbacktrack to the verb, a failure is forced. That is, backtracking cannot pass\nto the left of the verb. However, when one of these verbs appears inside an\natomic group or in an atomic lookaround assertion that is true, its effect is\nconfined to that group, because once the group has been matched, there is never\nany backtracking into it. Backtracking from beyond an atomic assertion or group\nignores the entire group, and seeks a preceding backtracking point.\n.P\nThese verbs differ in exactly what kind of failure occurs when backtracking\nreaches them. The behaviour described below is what happens when the verb is\nnot in a subroutine or an assertion. Subsequent sections cover these special\ncases.\n.sp\n  (*COMMIT) or (*COMMIT:NAME)\n.sp\nThis verb causes the whole match to fail outright if there is a later matching\nfailure that causes backtracking to reach it. Even if the pattern is\nunanchored, no further attempts to find a match by advancing the starting point\ntake place. If (*COMMIT) is the only backtracking verb that is encountered,\nonce it has been passed \\fBpcre2_match()\\fP is committed to finding a match at\nthe current starting point, or not at all. For example:\n.sp\n  a+(*COMMIT)b\n.sp\nThis matches \"xxaab\" but not \"aacaab\". It can be thought of as a kind of\ndynamic anchor, or \"I've started, so I must finish.\"\n.P\nThe behaviour of (*COMMIT:NAME) is not the same as (*MARK:NAME)(*COMMIT). It is\nlike (*MARK:NAME) in that the name is remembered for passing back to the\ncaller. However, (*SKIP:NAME) searches only for names that are set with\n(*MARK), ignoring those set by any of the other backtracking verbs.\n.P\nIf there is more than one backtracking verb in a pattern, a different one that\nfollows (*COMMIT) may be triggered first, so merely passing (*COMMIT) during a\nmatch does not always guarantee that a match must be at this starting point.\n.P\nNote that (*COMMIT) at the start of a pattern is not the same as an anchor,\nunless PCRE2's start-of-match optimizations are turned off, as shown in this\noutput from \\fBpcre2test\\fP:\n.sp\n    re> /(*COMMIT)abc/\n  data> xyzabc\n   0: abc\n  data>\n  re> /(*COMMIT)abc/no_start_optimize\n  data> xyzabc\n  No match\n.sp\nFor the first pattern, PCRE2 knows that any match must start with \"a\", so the\noptimization skips along the subject to \"a\" before applying the pattern to the\nfirst set of data. The match attempt then succeeds. The second pattern disables\nthe optimization that skips along to the first character. The pattern is now\napplied starting at \"x\", and so the (*COMMIT) causes the match to fail without\ntrying any other starting points.\n.sp\n  (*PRUNE) or (*PRUNE:NAME)\n.sp\nThis verb causes the match to fail at the current starting position in the\nsubject if there is a later matching failure that causes backtracking to reach\nit. If the pattern is unanchored, the normal \"bumpalong\" advance to the next\nstarting character then happens. Backtracking can occur as usual to the left of\n(*PRUNE), before it is reached, or when matching to the right of (*PRUNE), but\nif there is no match to the right, backtracking cannot cross (*PRUNE). In\nsimple cases, the use of (*PRUNE) is just an alternative to an atomic group or\npossessive quantifier, but there are some uses of (*PRUNE) that cannot be\nexpressed in any other way. In an anchored pattern (*PRUNE) has the same effect\nas (*COMMIT).\n.P\nThe behaviour of (*PRUNE:NAME) is not the same as (*MARK:NAME)(*PRUNE). It is\nlike (*MARK:NAME) in that the name is remembered for passing back to the\ncaller. However, (*SKIP:NAME) searches only for names set with (*MARK),\nignoring those set by other backtracking verbs.\n.sp\n  (*SKIP)\n.sp\nThis verb, when given without a name, is like (*PRUNE), except that if the\npattern is unanchored, the \"bumpalong\" advance is not to the next character,\nbut to the position in the subject where (*SKIP) was encountered. (*SKIP)\nsignifies that whatever text was matched leading up to it cannot be part of a\nsuccessful match if there is a later mismatch. Consider:\n.sp\n  a+(*SKIP)b\n.sp\nIf the subject is \"aaaac...\", after the first match attempt fails (starting at\nthe first character in the string), the starting point skips on to start the\nnext attempt at \"c\". Note that a possessive quantifier does not have the same\neffect as this example; although it would suppress backtracking during the\nfirst match attempt, the second attempt would start at the second character\ninstead of skipping on to \"c\".\n.P\nIf (*SKIP) is used to specify a new starting position that is the same as the\nstarting position of the current match, or (by being inside a lookbehind)\nearlier, the position specified by (*SKIP) is ignored, and instead the normal\n\"bumpalong\" occurs.\n.sp\n  (*SKIP:NAME)\n.sp\nWhen (*SKIP) has an associated name, its behaviour is modified. When such a\n(*SKIP) is triggered, the previous path through the pattern is searched for the\nmost recent (*MARK) that has the same name. If one is found, the \"bumpalong\"\nadvance is to the subject position that corresponds to that (*MARK) instead of\nto where (*SKIP) was encountered. If no (*MARK) with a matching name is found,\nthe (*SKIP) is ignored.\n.P\nThe search for a (*MARK) name uses the normal backtracking mechanism, which\nmeans that it does not see (*MARK) settings that are inside atomic groups or\nassertions, because they are never re-entered by backtracking. Compare the\nfollowing \\fBpcre2test\\fP examples:\n.sp\n    re> /a(?>(*MARK:X))(*SKIP:X)(*F)|(.)/\n  data: abc\n   0: a\n   1: a\n  data:\n    re> /a(?:(*MARK:X))(*SKIP:X)(*F)|(.)/\n  data: abc\n   0: b\n   1: b\n.sp\nIn the first example, the (*MARK) setting is in an atomic group, so it is not\nseen when (*SKIP:X) triggers, causing the (*SKIP) to be ignored. This allows\nthe second branch of the pattern to be tried at the first character position.\nIn the second example, the (*MARK) setting is not in an atomic group. This\nallows (*SKIP:X) to find the (*MARK) when it backtracks, and this causes a new\nmatching attempt to start at the second character. This time, the (*MARK) is\nnever seen because \"a\" does not match \"b\", so the matcher immediately jumps to\nthe second branch of the pattern.\n.P\nNote that (*SKIP:NAME) searches only for names set by (*MARK:NAME). It ignores\nnames that are set by other backtracking verbs.\n.sp\n  (*THEN) or (*THEN:NAME)\n.sp\nThis verb causes a skip to the next innermost alternative when backtracking\nreaches it. That is, it cancels any further backtracking within the current\nalternative. Its name comes from the observation that it can be used for a\npattern-based if-then-else block:\n.sp\n  ( COND1 (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ ) ...\n.sp\nIf the COND1 pattern matches, FOO is tried (and possibly further items after\nthe end of the group if FOO succeeds); on failure, the matcher skips to the\nsecond alternative and tries COND2, without backtracking into COND1. If that\nsucceeds and BAR fails, COND3 is tried. If subsequently BAZ fails, there are no\nmore alternatives, so there is a backtrack to whatever came before the entire\ngroup. If (*THEN) is not inside an alternation, it acts like (*PRUNE).\n.P\nThe behaviour of (*THEN:NAME) is not the same as (*MARK:NAME)(*THEN). It is\nlike (*MARK:NAME) in that the name is remembered for passing back to the\ncaller. However, (*SKIP:NAME) searches only for names set with (*MARK),\nignoring those set by other backtracking verbs.\n.P\nA group that does not contain a | character is just a part of the enclosing\nalternative; it is not a nested alternation with only one alternative. The\neffect of (*THEN) extends beyond such a group to the enclosing alternative.\nConsider this pattern, where A, B, etc. are complex pattern fragments that do\nnot contain any | characters at this level:\n.sp\n  A (B(*THEN)C) | D\n.sp\nIf A and B are matched, but there is a failure in C, matching does not\nbacktrack into A; instead it moves to the next alternative, that is, D.\nHowever, if the group containing (*THEN) is given an alternative, it\nbehaves differently:\n.sp\n  A (B(*THEN)C | (*FAIL)) | D\n.sp\nThe effect of (*THEN) is now confined to the inner group. After a failure in C,\nmatching moves to (*FAIL), which causes the whole group to fail because there\nare no more alternatives to try. In this case, matching does backtrack into A.\n.P\nNote that a conditional group is not considered as having two alternatives,\nbecause only one is ever used. In other words, the | character in a conditional\ngroup has a different meaning. Ignoring white space, consider:\n.sp\n  ^.*? (?(?=a) a | b(*THEN)c )\n.sp\nIf the subject is \"ba\", this pattern does not match. Because .*? is ungreedy,\nit initially matches zero characters. The condition (?=a) then fails, the\ncharacter \"b\" is matched, but \"c\" is not. At this point, matching does not\nbacktrack to .*? as might perhaps be expected from the presence of the |\ncharacter. The conditional group is part of the single alternative that\ncomprises the whole pattern, and so the match fails. (If there was a backtrack\ninto .*?, allowing it to match \"b\", the match would succeed.)\n.P\nThe verbs just described provide four different \"strengths\" of control when\nsubsequent matching fails. (*THEN) is the weakest, carrying on the match at the\nnext alternative. (*PRUNE) comes next, failing the match at the current\nstarting position, but allowing an advance to the next character (for an\nunanchored pattern). (*SKIP) is similar, except that the advance may be more\nthan one character. (*COMMIT) is the strongest, causing the entire match to\nfail.\n.\n.\n.SS \"More than one backtracking verb\"\n.rs\n.sp\nIf more than one backtracking verb is present in a pattern, the one that is\nbacktracked onto first acts. For example, consider this pattern, where A, B,\netc. are complex pattern fragments:\n.sp\n  (A(*COMMIT)B(*THEN)C|ABD)\n.sp\nIf A matches but B fails, the backtrack to (*COMMIT) causes the entire match to\nfail. However, if A and B match, but C fails, the backtrack to (*THEN) causes\nthe next alternative (ABD) to be tried. This behaviour is consistent, but is\nnot always the same as Perl's. It means that if two or more backtracking verbs\nappear in succession, all but the last of them has no effect. Consider this\nexample:\n.sp\n  ...(*COMMIT)(*PRUNE)...\n.sp\nIf there is a matching failure to the right, backtracking onto (*PRUNE) causes\nit to be triggered, and its action is taken. There can never be a backtrack\nonto (*COMMIT).\n.\n.\n.\\\" HTML <a name=\"btrepeat\"></a>\n.SS \"Backtracking verbs in repeated groups\"\n.rs\n.sp\nPCRE2 sometimes differs from Perl in its handling of backtracking verbs in\nrepeated groups. For example, consider:\n.sp\n  /(a(*COMMIT)b)+ac/\n.sp\nIf the subject is \"abac\", Perl matches unless its optimizations are disabled,\nbut PCRE2 always fails because the (*COMMIT) in the second repeat of the group\nacts.\n.\n.\n.\\\" HTML <a name=\"btassert\"></a>\n.SS \"Backtracking verbs in assertions\"\n.rs\n.sp\n(*FAIL) in any assertion has its normal effect: it forces an immediate\nbacktrack. The behaviour of the other backtracking verbs depends on whether or\nnot the assertion is standalone or acting as the condition in a conditional\ngroup.\n.P\n(*ACCEPT) in a standalone positive assertion causes the assertion to succeed\nwithout any further processing; captured strings and a mark name (if set) are\nretained. In a standalone negative assertion, (*ACCEPT) causes the assertion to\nfail without any further processing; captured substrings and any mark name are\ndiscarded.\n.P\nIf the assertion is a condition, (*ACCEPT) causes the condition to be true for\na positive assertion and false for a negative one; captured substrings are\nretained in both cases.\n.P\nThe remaining verbs act only when a later failure causes a backtrack to\nreach them. This means that, for the Perl-compatible assertions, their effect\nis confined to the assertion, because Perl lookaround assertions are atomic. A\nbacktrack that occurs after such an assertion is complete does not jump back\ninto the assertion. Note in particular that a (*MARK) name that is set in an\nassertion is not \"seen\" by an instance of (*SKIP:NAME) later in the pattern.\n.P\nPCRE2 now supports non-atomic positive assertions and also \"scan substring\"\nassertions, as described in the sections entitled\n.\\\" HTML <a href=\"#nonatomicassertions\">\n.\\\" </a>\n\"Non-atomic assertions\"\n.\\\"\nand\n.\\\" HTML <a href=\"#scansubstringassertions\">\n.\\\" </a>\n\"Scan substring assertions\"\n.\\\"\nabove. These assertions must be standalone (not used as conditions). They are\nnot Perl-compatible. For these assertions, a later backtrack does jump back\ninto the assertion, and therefore verbs such as (*COMMIT) can be triggered by\nbacktracks from later in the pattern.\n.P\nThe effect of (*THEN) is not allowed to escape beyond an assertion. If there\nare no more branches to try, (*THEN) causes a positive assertion to be false,\nand a negative assertion to be true. This behaviour differs from Perl when the\nassertion has only one branch.\n.P\nThe other backtracking verbs are not treated specially if they appear in a\nstandalone positive assertion. In a conditional positive assertion,\nbacktracking (from within the assertion) into (*COMMIT), (*SKIP), or (*PRUNE)\ncauses the condition to be false. However, for both standalone and conditional\nnegative assertions, backtracking into (*COMMIT), (*SKIP), or (*PRUNE) causes\nthe assertion to be true, without considering any further alternative branches.\n.\n.\n.\\\" HTML <a name=\"btsub\"></a>\n.SS \"Backtracking verbs in subroutines\"\n.rs\n.sp\nThese behaviours occur whether or not the group is called recursively.\n.P\n(*ACCEPT) in a group called as a subroutine causes the subroutine match to\nsucceed without any further processing. Matching then continues after the\nsubroutine call. Perl documents this behaviour. Perl's treatment of the other\nverbs in subroutines is different in some cases.\n.P\n(*FAIL) in a group called as a subroutine has its normal effect: it forces\nan immediate backtrack.\n.P\n(*COMMIT), (*SKIP), and (*PRUNE) cause the subroutine match to fail when\ntriggered by being backtracked to in a group called as a subroutine. There is\nthen a backtrack at the outer level.\n.P\n(*THEN), when triggered, skips to the next alternative in the innermost\nenclosing group that has alternatives (its normal behaviour). However, if there\nis no such group within the subroutine's group, the subroutine match fails and\nthere is a backtrack at the outer level.\n.\n.\n.\\\" HTML <a name=\"ebcdicenvironments\"></a>\n.SH \"EBCDIC ENVIRONMENTS\"\n.rs\n.sp\nDifferences in the way PCRE behaves when it is running in an EBCDIC environment\nare covered in this section.\n.\n.\n.SS \"Escape sequences\"\n.rs\n.sp\nWhen PCRE2 is compiled in EBCDIC mode, \\eN{U+hhh..} is not supported. \\ea, \\ee,\n\\ef, \\en, \\er, and \\et generate the appropriate EBCDIC code values. The \\ec\nescape is processed as specified for Perl in the \\fBperlebcdic\\fP document. The\nonly characters that are allowed after \\ec are A-Z, a-z, or one of @, [, \\e, ],\n^, _, or ?. Any other character provokes a compile-time error. The sequence\n\\ec@ encodes character code 0; after \\ec the letters (in either case) encode\ncharacters 1-26 (hex 01 to hex 1A); [, \\e, ], ^, and _ encode characters 27-31\n(hex 1B to hex 1F), and \\ec? becomes either 255 (hex FF) or 95 (hex 5F).\n.P\nThus, apart from \\ec?, these escapes generate the same character code values as\nthey do in an ASCII or Unicode environment, though the meanings of the values\nmostly differ. For example, \\ecG always generates code value 7, which is BEL in\nASCII but DEL in EBCDIC.\n.P\nThe sequence \\ec? generates DEL (127, hex 7F) in an ASCII environment, but\nbecause 127 is not a control character in EBCDIC, Perl makes it generate the\nAPC character. Unfortunately, there are several variants of EBCDIC. In most of\nthem the APC character has the value 255 (hex FF), but in the one Perl calls\nPOSIX-BC its value is 95 (hex 5F). If certain other characters have POSIX-BC\nvalues, PCRE2 makes \\ec? generate 95; otherwise it generates 255.\n.\n.\n.SS \"Character classes\"\n.rs\n.sp\nIn character classes there is a special case in EBCDIC environments for ranges\nwhose end points are both specified as literal letters in the same case. For\ncompatibility with Perl, EBCDIC code points within the range that are not\nletters are omitted. For example, [h-k] matches only four characters, even\nthough the EBCDIC codes for h and k are 0x88 and 0x92, a range of 11 code\npoints. However, if the range is specified numerically, for example,\n[\\ex88-\\ex92] or [h-\\ex92], all code points are included.\n.\n.\n.SH \"SEE ALSO\"\n.rs\n.sp\n\\fBpcre2api\\fP(3), \\fBpcre2callout\\fP(3), \\fBpcre2matching\\fP(3),\n\\fBpcre2syntax\\fP(3), \\fBpcre2\\fP(3).\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 03 September 2025\nCopyright (c) 1997-2024 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2perform.3",
    "content": ".TH PCRE2PERFORM 3 \"06 December 2022\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"PCRE2 PERFORMANCE\"\n.rs\n.sp\nTwo aspects of performance are discussed below: memory usage and processing\ntime. The way you express your pattern as a regular expression can affect both\nof them.\n.\n.SH \"COMPILED PATTERN MEMORY USAGE\"\n.rs\n.sp\nPatterns are compiled by PCRE2 into a reasonably efficient interpretive code,\nso that most simple patterns do not use much memory for storing the compiled\nversion. However, there is one case where the memory usage of a compiled\npattern can be unexpectedly large. If a parenthesized group has a quantifier\nwith a minimum greater than 1 and/or a limited maximum, the whole group is\nrepeated in the compiled code. For example, the pattern\n.sp\n  (abc|def){2,4}\n.sp\nis compiled as if it were\n.sp\n  (abc|def)(abc|def)((abc|def)(abc|def)?)?\n.sp\n(Technical aside: It is done this way so that backtrack points within each of\nthe repetitions can be independently maintained.)\n.P\nFor regular expressions whose quantifiers use only small numbers, this is not\nusually a problem. However, if the numbers are large, and particularly if such\nrepetitions are nested, the memory usage can become an embarrassment. For\nexample, the very simple pattern\n.sp\n  ((ab){1,1000}c){1,3}\n.sp\nuses over 50KiB when compiled using the 8-bit library. When PCRE2 is\ncompiled with its default internal pointer size of two bytes, the size limit on\na compiled pattern is 65535 code units in the 8-bit and 16-bit libraries, and\nthis is reached with the above pattern if the outer repetition is increased\nfrom 3 to 4. PCRE2 can be compiled to use larger internal pointers and thus\nhandle larger compiled patterns, but it is better to try to rewrite your\npattern to use less memory if you can.\n.P\nOne way of reducing the memory usage for such patterns is to make use of\nPCRE2's\n.\\\" HTML <a href=\"pcre2pattern.html#subpatternsassubroutines\">\n.\\\" </a>\n\"subroutine\"\n.\\\"\nfacility. Re-writing the above pattern as\n.sp\n  ((ab)(?2){0,999}c)(?1){0,2}\n.sp\nreduces the memory requirements to around 16KiB, and indeed it remains under\n20KiB even with the outer repetition increased to 100. However, this kind of\npattern is not always exactly equivalent, because any captures within\nsubroutine calls are lost when the subroutine completes. If this is not a\nproblem, this kind of rewriting will allow you to process patterns that PCRE2\ncannot otherwise handle. The matching performance of the two different versions\nof the pattern are roughly the same. (This applies from release 10.30 - things\nwere different in earlier releases.)\n.\n.\n.SH \"STACK AND HEAP USAGE AT RUN TIME\"\n.rs\n.sp\nFrom release 10.30, the interpretive (non-JIT) version of \\fBpcre2_match()\\fP\nuses very little system stack at run time. In earlier releases recursive\nfunction calls could use a great deal of stack, and this could cause problems,\nbut this usage has been eliminated. Backtracking positions are now explicitly\nremembered in memory frames controlled by the code.\n.P\nThe size of each frame depends on the size of pointer variables and the number\nof capturing parenthesized groups in the pattern being matched. On a 64-bit\nsystem the frame size for a pattern with no captures is 128 bytes. For each\ncapturing group the size increases by 16 bytes.\n.P\nUntil release 10.41, an initial 20KiB frames vector was allocated on the system\nstack, but this still caused some issues for multi-thread applications where\neach thread has a very small stack. From release 10.41 backtracking memory\nframes are always held in heap memory. An initial heap allocation is obtained\nthe first time any match data block is passed to \\fBpcre2_match()\\fP. This is\nremembered with the match data block and re-used if that block is used for\nanother match. It is freed when the match data block itself is freed.\n.P\nThe size of the initial block is the larger of 20KiB or ten times the pattern's\nframe size, unless the heap limit is less than this, in which case the heap\nlimit is used. If the initial block proves to be too small during matching, it\nis replaced by a larger block, subject to the heap limit. The heap limit is\nchecked only when a new block is to be allocated. Reducing the heap limit\nbetween calls to \\fBpcre2_match()\\fP with the same match data block does not\naffect the saved block.\n.P\nIn contrast to \\fBpcre2_match()\\fP, \\fBpcre2_dfa_match()\\fP does use recursive\nfunction calls, but only for processing atomic groups, lookaround assertions,\nand recursion within the pattern. The original version of the code used to\nallocate quite large internal workspace vectors on the stack, which caused some\nproblems for some patterns in environments with small stacks. From release\n10.32 the code for \\fBpcre2_dfa_match()\\fP has been re-factored to use heap\nmemory when necessary for internal workspace when recursing, though recursive\nfunction calls are still used.\n.P\nThe \"match depth\" parameter can be used to limit the depth of function\nrecursion, and the \"match heap\" parameter to limit heap memory in\n\\fBpcre2_dfa_match()\\fP.\n.\n.\n.SH \"PROCESSING TIME\"\n.rs\n.sp\nCertain items in regular expression patterns are processed more efficiently\nthan others. It is more efficient to use a character class like [aeiou] than a\nset of single-character alternatives such as (a|e|i|o|u). In general, the\nsimplest construction that provides the required behaviour is usually the most\nefficient. Jeffrey Friedl's book contains a lot of useful general discussion\nabout optimizing regular expressions for efficient performance. This document\ncontains a few observations about PCRE2.\n.P\nUsing Unicode character properties (the \\ep, \\eP, and \\eX escapes) is slow,\nbecause PCRE2 has to use a multi-stage table lookup whenever it needs a\ncharacter's property. If you can find an alternative pattern that does not use\ncharacter properties, it will probably be faster.\n.P\nBy default, the escape sequences \\eb, \\ed, \\es, and \\ew, and the POSIX\ncharacter classes such as [:alpha:] do not use Unicode properties, partly for\nbackwards compatibility, and partly for performance reasons. However, you can\nset the PCRE2_UCP option or start the pattern with (*UCP) if you want Unicode\ncharacter properties to be used. This can double the matching time for items\nsuch as \\ed, when matched with \\fBpcre2_match()\\fP; the performance loss is\nless with a DFA matching function, and in both cases there is not much\ndifference for \\eb.\n.P\nWhen a pattern begins with .* not in atomic parentheses, nor in parentheses\nthat are the subject of a backreference, and the PCRE2_DOTALL option is set,\nthe pattern is implicitly anchored by PCRE2, since it can match only at the\nstart of a subject string. If the pattern has multiple top-level branches, they\nmust all be anchorable. The optimization can be disabled by the\nPCRE2_NO_DOTSTAR_ANCHOR option, and is automatically disabled if the pattern\ncontains (*PRUNE) or (*SKIP).\n.P\nIf PCRE2_DOTALL is not set, PCRE2 cannot make this optimization, because the\ndot metacharacter does not then match a newline, and if the subject string\ncontains newlines, the pattern may match from the character immediately\nfollowing one of them instead of from the very start. For example, the pattern\n.sp\n  .*second\n.sp\nmatches the subject \"first\\enand second\" (where \\en stands for a newline\ncharacter), with the match starting at the seventh character. In order to do\nthis, PCRE2 has to retry the match starting after every newline in the subject.\n.P\nIf you are using such a pattern with subject strings that do not contain\nnewlines, the best performance is obtained by setting PCRE2_DOTALL, or starting\nthe pattern with ^.* or ^.*? to indicate explicit anchoring. That saves PCRE2\nfrom having to scan along the subject looking for a newline to restart at.\n.P\nBeware of patterns that contain nested indefinite repeats. These can take a\nlong time to run when applied to a string that does not match. Consider the\npattern fragment\n.sp\n  ^(a+)*\n.sp\nThis can match \"aaaa\" in 16 different ways, and this number increases very\nrapidly as the string gets longer. (The * repeat can match 0, 1, 2, 3, or 4\ntimes, and for each of those cases other than 0 or 4, the + repeats can match\ndifferent numbers of times.) When the remainder of the pattern is such that the\nentire match is going to fail, PCRE2 has in principle to try every possible\nvariation, and this can take an extremely long time, even for relatively short\nstrings.\n.P\nAn optimization catches some of the more simple cases such as\n.sp\n  (a+)*b\n.sp\nwhere a literal character follows. Before embarking on the standard matching\nprocedure, PCRE2 checks that there is a \"b\" later in the subject string, and if\nthere is not, it fails the match immediately. However, when there is no\nfollowing literal this optimization cannot be used. You can see the difference\nby comparing the behaviour of\n.sp\n  (a+)*\\ed\n.sp\nwith the pattern above. The former gives a failure almost instantly when\napplied to a whole line of \"a\" characters, whereas the latter takes an\nappreciable time with strings longer than about 20 characters.\n.P\nIn many cases, the solution to this kind of performance issue is to use an\natomic group or a possessive quantifier. This can often reduce memory\nrequirements as well. As another example, consider this pattern:\n.sp\n  ([^<]|<(?!inet))+\n.sp\nIt matches from wherever it starts until it encounters \"<inet\" or the end of\nthe data, and is the kind of pattern that might be used when processing an XML\nfile. Each iteration of the outer parentheses matches either one character that\nis not \"<\" or a \"<\" that is not followed by \"inet\". However, each time a\nparenthesis is processed, a backtracking position is passed, so this\nformulation uses a memory frame for each matched character. For a long string,\na lot of memory is required. Consider now this rewritten pattern, which matches\nexactly the same strings:\n.sp\n  ([^<]++|<(?!inet))+\n.sp\nThis runs much faster, because sequences of characters that do not contain \"<\"\nare \"swallowed\" in one item inside the parentheses, and a possessive quantifier\nis used to stop any backtracking into the runs of non-\"<\" characters. This\nversion also uses a lot less memory because entry to a new set of parentheses\nhappens only when a \"<\" character that is not followed by \"inet\" is encountered\n(and we assume this is relatively rare).\n.P\nThis example shows that one way of optimizing performance when matching long\nsubject strings is to write repeated parenthesized subpatterns to match more\nthan one character whenever possible.\n.\n.\n.SS \"SETTING RESOURCE LIMITS\"\n.rs\n.sp\nYou can set limits on the amount of processing that takes place when matching,\nand on the amount of heap memory that is used. The default values of the limits\nare very large, and unlikely ever to operate. They can be changed when PCRE2 is\nbuilt, and they can also be set when \\fBpcre2_match()\\fP or\n\\fBpcre2_dfa_match()\\fP is called. For details of these interfaces, see the\n.\\\" HREF\n\\fBpcre2build\\fP\n.\\\"\ndocumentation and the section entitled\n.\\\" HTML <a href=\"pcre2api.html#matchcontext\">\n.\\\" </a>\n\"The match context\"\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation.\n.P\nThe \\fBpcre2test\\fP test program has a modifier called \"find_limits\" which, if\napplied to a subject line, causes it to find the smallest limits that allow a\npattern to match. This is done by repeatedly matching with different limits.\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 06 December 2022\nCopyright (c) 1997-2022 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2posix.3",
    "content": ".TH PCRE2POSIX 3 \"27 November 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"SYNOPSIS\"\n.rs\n.sp\n.B #include <pcre2posix.h>\n.PP\n.nf\n.B int pcre2_regcomp(regex_t *\\fIpreg\\fP, const char *\\fIpattern\\fP,\n.B \"     int \\fIcflags\\fP);\"\n.sp\n.B int pcre2_regexec(const regex_t *\\fIpreg\\fP, const char *\\fIstring\\fP,\n.B \"     size_t \\fInmatch\\fP, regmatch_t \\fIpmatch\\fP[], int \\fIeflags\\fP);\"\n.sp\n.B \"size_t pcre2_regerror(int \\fIerrcode\\fP, const regex_t *\\fIpreg\\fP,\"\n.B \"     char *\\fIerrbuf\\fP, size_t \\fIerrbuf_size\\fP);\"\n.sp\n.B void pcre2_regfree(regex_t *\\fIpreg\\fP);\n.fi\n.\n.SH DESCRIPTION\n.rs\n.sp\nThis set of functions provides a POSIX-style API for the PCRE2 regular\nexpression 8-bit library. There are no POSIX-style wrappers for PCRE2's 16-bit\nand 32-bit libraries. See the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation for a description of PCRE2's native API, which contains much\nadditional functionality.\n.P\n\\fBIMPORTANT NOTE\\fP: The functions described here are NOT thread-safe, and\nshould not be used in multi-threaded applications. They are also limited to\nprocessing subjects that are not bigger than 2GB. Use the native API instead.\n.P\nThese functions are wrapper functions that ultimately call the PCRE2 native\nAPI. Their prototypes are defined in the \\fBpcre2posix.h\\fP header file, and\nthey all have unique names starting with \\fBpcre2_\\fP. However, the\n\\fBpcre2posix.h\\fP header also contains macro definitions that convert the\nstandard POSIX names such \\fBregcomp()\\fP into \\fBpcre2_regcomp()\\fP etc. This\nmeans that a program can use the usual POSIX names without running the risk of\naccidentally linking with POSIX functions from a different library.\n.P\nOn Unix-like systems the PCRE2 POSIX library is called \\fBlibpcre2-posix\\fP, so\ncan be accessed by adding \\fB-lpcre2-posix\\fP to the command for linking an\napplication. Because the POSIX functions call the native ones, it is also\nnecessary to add \\fB-lpcre2-8\\fP.\n.P\nOn Windows systems, if you are linking to a DLL version of the library, it is\nrecommended that \\fBPCRE2POSIX_SHARED\\fP is defined before including the\n\\fBpcre2posix.h\\fP header, as it will allow for a more efficient way to\ninvoke the functions by adding the \\fB__declspec(dllimport)\\fP decorator.\n.P\nAlthough they were not defined as prototypes in \\fBpcre2posix.h\\fP, releases\n10.33 to 10.36 of the library contained functions with the POSIX names\n\\fBregcomp()\\fP etc. These simply passed their arguments to the PCRE2\nfunctions. These functions were provided for backwards compatibility with\nearlier versions of PCRE2, which had only POSIX names. However, this has proved\ntroublesome in situations where a program links with several libraries, some of\nwhich use PCRE2's POSIX interface while others use the real POSIX functions.\nFor this reason, the POSIX names have been removed since release 10.37.\n.P\nCalling the header file \\fBpcre2posix.h\\fP avoids any conflict with other POSIX\nlibraries. It can, of course, be renamed or aliased as \\fBregex.h\\fP, which is\nthe \"correct\" name, if there is no clash. It provides two structure types,\n\\fIregex_t\\fP for compiled internal forms, and \\fIregmatch_t\\fP for returning\ncaptured substrings. It also defines some constants whose names start with\n\"REG_\"; these are used for setting options and identifying error codes.\n.\n.\n.SH \"USING THE POSIX FUNCTIONS\"\n.rs\n.sp\nNote that these functions are just POSIX-style wrappers for PCRE2's native API.\nThey do not give POSIX regular expression behaviour, and they are not\nthread-safe or even POSIX compatible.\n.P\nThose POSIX option bits that can reasonably be mapped to PCRE2 native options\nhave been implemented. In addition, the option REG_EXTENDED is defined with the\nvalue zero. This has no effect, but since programs that are written to the\nPOSIX interface often use it, this makes it easier to slot in PCRE2 as a\nreplacement library. Other POSIX options are not even defined.\n.P\nThere are also some options that are not defined by POSIX. These have been\nadded at the request of users who want to make use of certain PCRE2-specific\nfeatures via the POSIX calling interface or to add BSD or GNU functionality.\n.P\nWhen PCRE2 is called via these functions, it is only the API that is POSIX-like\nin style. The syntax and semantics of the regular expressions themselves are\nstill those of Perl, subject to the setting of various PCRE2 options, as\ndescribed below. \"POSIX-like in style\" means that the API approximates to the\nPOSIX definition; it is not fully POSIX-compatible, and in multi-unit encoding\ndomains it is probably even less compatible.\n.P\nThe descriptions below use the actual names of the functions, but, as described\nabove, the standard POSIX names (without the \\fBpcre2_\\fP prefix) may also be\nused.\n.\n.\n.SH \"COMPILING A PATTERN\"\n.rs\n.sp\nThe function \\fBpcre2_regcomp()\\fP is called to compile a pattern into an\ninternal form. By default, the pattern is a C string terminated by a binary\nzero (but see REG_PEND below). The \\fIpreg\\fP argument is a pointer to a\n\\fBregex_t\\fP structure that is used as a base for storing information about\nthe compiled regular expression. It is also used for input when REG_PEND is\nset. The \\fBregex_t\\fP structure used by \\fBpcre2_regcomp()\\fP is defined in\n\\fBpcre2posix.h\\fP and is not the same as the structure used by other libraries\nthat provide POSIX-style matching.\n.P\nThe argument \\fIcflags\\fP is either zero, or contains one or more of the bits\ndefined by the following macros:\n.sp\n  REG_DOTALL\n.sp\nThe PCRE2_DOTALL option is set when the regular expression is passed for\ncompilation to the native function. Note that REG_DOTALL is not part of the\nPOSIX standard.\n.sp\n  REG_ICASE\n.sp\nThe PCRE2_CASELESS option is set when the regular expression is passed for\ncompilation to the native function.\n.sp\n  REG_NEWLINE\n.sp\nThe PCRE2_MULTILINE option is set when the regular expression is passed for\ncompilation to the native function. Note that this does \\fInot\\fP mimic the\ndefined POSIX behaviour for REG_NEWLINE (see the following section).\n.sp\n  REG_NOSPEC\n.sp\nThe PCRE2_LITERAL option is set when the regular expression is passed for\ncompilation to the native function. This disables all meta characters in the\npattern, causing it to be treated as a literal string. The only other options\nthat are allowed with REG_NOSPEC are REG_ICASE, REG_NOSUB, REG_PEND, and\nREG_UTF. Note that REG_NOSPEC is not part of the POSIX standard.\n.sp\n  REG_NOSUB\n.sp\nWhen a pattern that is compiled with this flag is passed to\n\\fBpcre2_regexec()\\fP for matching, the \\fInmatch\\fP and \\fIpmatch\\fP arguments\nare ignored, and no captured strings are returned. Versions of the PCRE2 library\nprior to 10.22 used to set the PCRE2_NO_AUTO_CAPTURE compile option, but this\nno longer happens because it disables the use of backreferences.\n.sp\n  REG_PEND\n.sp\nIf this option is set, the \\fBreg_endp\\fP field in the \\fIpreg\\fP structure\n(which has the type const char *) must be set to point to the character beyond\nthe end of the pattern before calling \\fBpcre2_regcomp()\\fP. The pattern itself\nmay now contain binary zeros, which are treated as data characters. Without\nREG_PEND, a binary zero terminates the pattern and the \\fBre_endp\\fP field is\nignored. This is a GNU extension to the POSIX standard and should be used with\ncaution in software intended to be portable to other systems.\n.sp\n  REG_UCP\n.sp\nThe PCRE2_UCP option is set when the regular expression is passed for\ncompilation to the native function. This causes PCRE2 to use Unicode properties\nwhen matching \\ed, \\ew, etc., instead of just recognizing ASCII values. Note\nthat REG_UCP is not part of the POSIX standard.\n.sp\n  REG_UNGREEDY\n.sp\nThe PCRE2_UNGREEDY option is set when the regular expression is passed for\ncompilation to the native function. Note that REG_UNGREEDY is not part of the\nPOSIX standard.\n.sp\n  REG_UTF\n.sp\nThe PCRE2_UTF option is set when the regular expression is passed for\ncompilation to the native function. This causes the pattern itself and all data\nstrings used for matching it to be treated as UTF-8 strings. Note that REG_UTF\nis not part of the POSIX standard.\n.P\nIn the absence of these flags, no options are passed to the native function.\nThis means that the regex is compiled with PCRE2 default semantics. In\nparticular, the way it handles newline characters in the subject string is the\nPerl way, not the POSIX way. Note that setting PCRE2_MULTILINE has only\n\\fIsome\\fP of the effects specified for REG_NEWLINE. It does not affect the way\nnewlines are matched by the dot metacharacter (they are not) or by a negative\nclass such as [^a] (they are).\n.P\nThe yield of \\fBpcre2_regcomp()\\fP is zero on success, and non-zero otherwise.\nThe \\fIpreg\\fP structure is filled in on success, and one other member of the\nstructure (as well as \\fIre_endp\\fP) is public: \\fIre_nsub\\fP contains the\nnumber of capturing subpatterns in the regular expression. Various error codes\nare defined in the header file.\n.P\nNOTE: If the yield of \\fBpcre2_regcomp()\\fP is non-zero, you must not attempt\nto use the contents of the \\fIpreg\\fP structure. If, for example, you pass it\nto \\fBpcre2_regexec()\\fP, the result is undefined and your program is likely to\ncrash.\n.\n.\n.SH \"MATCHING NEWLINE CHARACTERS\"\n.rs\n.sp\nThis area is not simple, because POSIX and Perl take different views of things.\nIt is not possible to get PCRE2 to obey POSIX semantics, but then PCRE2 was\nnever intended to be a POSIX engine. The following table lists the different\npossibilities for matching newline characters in Perl and PCRE2:\n.sp\n                          Default   Change with\n.sp\n  . matches newline          no     PCRE2_DOTALL\n  newline matches [^a]       yes    not changeable\n  $ matches \\en at end        yes    PCRE2_DOLLAR_ENDONLY\n  $ matches \\en in middle     no     PCRE2_MULTILINE\n  ^ matches \\en in middle     no     PCRE2_MULTILINE\n.sp\nThis is the equivalent table for a POSIX-compatible pattern matcher:\n.sp\n                          Default   Change with\n.sp\n  . matches newline          yes    REG_NEWLINE\n  newline matches [^a]       yes    REG_NEWLINE\n  $ matches \\en at end        no     REG_NEWLINE\n  $ matches \\en in middle     no     REG_NEWLINE\n  ^ matches \\en in middle     no     REG_NEWLINE\n.sp\nThis behaviour is not what happens when PCRE2 is called via its POSIX\nAPI. By default, PCRE2's behaviour is the same as Perl's, except that there is\nno equivalent for PCRE2_DOLLAR_ENDONLY in Perl. In both PCRE2 and Perl, there\nis no way to stop newline from matching [^a].\n.P\nDefault POSIX newline handling can be obtained by setting PCRE2_DOTALL and\nPCRE2_DOLLAR_ENDONLY when calling \\fBpcre2_compile()\\fP directly, but there is\nno way to make PCRE2 behave exactly as for the REG_NEWLINE action. When using\nthe POSIX API, passing REG_NEWLINE to PCRE2's \\fBpcre2_regcomp()\\fP function\ncauses PCRE2_MULTILINE to be passed to \\fBpcre2_compile()\\fP, and REG_DOTALL\npasses PCRE2_DOTALL. There is no way to pass PCRE2_DOLLAR_ENDONLY.\n.\n.\n.SH \"MATCHING A PATTERN\"\n.rs\n.sp\nThe function \\fBpcre2_regexec()\\fP is called to match a compiled pattern\n\\fIpreg\\fP against a given \\fIstring\\fP, which is by default terminated by a\nzero byte (but see REG_STARTEND below), subject to the options in \\fIeflags\\fP.\nThese can be:\n.sp\n  REG_NOTBOL\n.sp\nThe PCRE2_NOTBOL option is set when calling the underlying PCRE2 matching\nfunction.\n.sp\n  REG_NOTEMPTY\n.sp\nThe PCRE2_NOTEMPTY option is set when calling the underlying PCRE2 matching\nfunction. Note that REG_NOTEMPTY is not part of the POSIX standard. However,\nsetting this option can give more POSIX-like behaviour in some situations.\n.sp\n  REG_NOTEOL\n.sp\nThe PCRE2_NOTEOL option is set when calling the underlying PCRE2 matching\nfunction.\n.sp\n  REG_STARTEND\n.sp\nWhen this option is set, the subject string starts at \\fIstring\\fP +\n\\fIpmatch[0].rm_so\\fP and ends at \\fIstring\\fP + \\fIpmatch[0].rm_eo\\fP, which\nshould point to the first character beyond the string. There may be binary\nzeros within the subject string, and indeed, using REG_STARTEND is the only\nway to pass a subject string that contains a binary zero.\n.P\nWhatever the value of \\fIpmatch[0].rm_so\\fP, the offsets of the matched string\nand any captured substrings are still given relative to the start of\n\\fIstring\\fP itself. (Before PCRE2 release 10.30 these were given relative to\n\\fIstring\\fP + \\fIpmatch[0].rm_so\\fP, but this differs from other\nimplementations.)\n.P\nThis is a BSD extension, compatible with but not specified by IEEE Standard\n1003.2 (POSIX.2), and should be used with caution in software intended to be\nportable to other systems. Note that a non-zero \\fIrm_so\\fP does not imply\nREG_NOTBOL; REG_STARTEND affects only the location and length of the string,\nnot how it is matched. Setting REG_STARTEND and passing \\fIpmatch\\fP as NULL\nare mutually exclusive; the error REG_INVARG is returned.\n.P\nIf the pattern was compiled with the REG_NOSUB flag, no data about any matched\nstrings is returned. The \\fInmatch\\fP and \\fIpmatch\\fP arguments of\n\\fBpcre2_regexec()\\fP are ignored (except possibly as input for REG_STARTEND).\n.P\nThe value of \\fInmatch\\fP may be zero, and the value \\fIpmatch\\fP may be NULL\n(unless REG_STARTEND is set); in both these cases no data about any matched\nstrings is returned.\n.P\nOtherwise, the portion of the string that was matched, and also any captured\nsubstrings, are returned via the \\fIpmatch\\fP argument, which points to an\narray of \\fInmatch\\fP structures of type \\fIregmatch_t\\fP, containing the\nmembers \\fIrm_so\\fP and \\fIrm_eo\\fP. These contain the byte offset to the first\ncharacter of each substring and the offset to the first character after the end\nof each substring, respectively. The 0th element of the vector relates to the\nentire portion of \\fIstring\\fP that was matched; subsequent elements relate to\nthe capturing subpatterns of the regular expression. Unused entries in the\narray have both structure members set to -1.\n.P\n\\fIregmatch_t\\fP as well as the \\fIregoff_t\\fP typedef it uses are defined in\n\\fBpcre2posix.h\\fP and are not warranted to have the same size or layout as other\nsimilarly named types from other libraries that provide POSIX-style matching.\n.P\nA successful match yields a zero return; various error codes are defined in the\nheader file, of which REG_NOMATCH is the \"expected\" failure code.\n.\n.\n.SH \"ERROR MESSAGES\"\n.rs\n.sp\nThe \\fBpcre2_regerror()\\fP function maps a non-zero errorcode from either\n\\fBpcre2_regcomp()\\fP or \\fBpcre2_regexec()\\fP to a printable message. If\n\\fIpreg\\fP is not NULL, the error should have arisen from the use of that\nstructure. A message terminated by a binary zero is placed in \\fIerrbuf\\fP. If\nthe buffer is too short, only the first \\fIerrbuf_size\\fP - 1 characters of the\nerror message are used. The yield of the function is the size of buffer needed\nto hold the whole message, including the terminating zero. This value is\ngreater than \\fIerrbuf_size\\fP if the message was truncated.\n.\n.\n.SH MEMORY USAGE\n.rs\n.sp\nCompiling a regular expression causes memory to be allocated and associated\nwith the \\fIpreg\\fP structure. The function \\fBpcre2_regfree()\\fP frees all\nsuch memory, after which \\fIpreg\\fP may no longer be used as a compiled\nexpression.\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 27 November 2024\nCopyright (c) 1997-2024 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2sample.3",
    "content": ".TH PCRE2SAMPLE 3 \"28 February 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"PCRE2 SAMPLE PROGRAM\"\n.rs\n.sp\nA simple, complete demonstration program to get you started with using PCRE2 is\nsupplied in the file \\fIpcre2demo.c\\fP in the \\fBsrc\\fP directory in the PCRE2\ndistribution. A listing of this program is given in the\n.\\\" HREF\n\\fBpcre2demo\\fP\n.\\\"\ndocumentation. If you do not have a copy of the PCRE2 distribution, you can\nsave this listing to recreate the contents of \\fIpcre2demo.c\\fP.\n.P\nThe demonstration program compiles the regular expression that is its\nfirst argument, and matches it against the subject string in its second\nargument. No PCRE2 options are set, and default character tables are used. If\nmatching succeeds, the program outputs the portion of the subject that matched,\ntogether with the contents of any captured substrings.\n.P\nIf the -g option is given on the command line, the program then goes on to\ncheck for further matches of the same regular expression in the same subject\nstring. The logic is a little bit tricky because of the possibility of matching\nan empty string. Comments in the code explain what is going on.\n.P\nThe code in \\fBpcre2demo.c\\fP is an 8-bit program that uses the PCRE2 8-bit\nlibrary. It handles strings and characters that are stored in 8-bit code units.\nBy default, one character corresponds to one code unit, but if the pattern\nstarts with \"(*UTF)\", both it and the subject are treated as UTF-8 strings,\nwhere characters may occupy multiple code units.\n.P\nIf PCRE2 is installed in the standard include and library directories for your\noperating system, you should be able to compile the demonstration program using\na command like this:\n.sp\n  cc -o pcre2demo pcre2demo.c -lpcre2-8\n.sp\nIf PCRE2 is installed elsewhere, you may need to add additional options to the\ncommand line. For example, on a Unix-like system that has PCRE2 installed in\n\\fI/usr/local\\fP, you can compile the demonstration program using a command\nlike this:\n.sp\n.\\\" JOINSH\n  cc -o pcre2demo -I/usr/local/include pcre2demo.c \\e\n     -L/usr/local/lib -lpcre2-8\n.sp\nOnce you have built the demonstration program, you can run simple tests like\nthis:\n.sp\n  ./pcre2demo 'cat|dog' 'the cat sat on the mat'\n  ./pcre2demo -g 'cat|dog' 'the dog sat on the cat'\n  ./pcre2demo -i 'cat' 'the dog sat on the CAT'\n.sp\nNote that there is a much more comprehensive test program, called\n.\\\" HREF\n\\fBpcre2test\\fP,\n.\\\"\nwhich supports many more facilities for testing regular expressions using all\nthree PCRE2 libraries (8-bit, 16-bit, and 32-bit, though not all three need be\ninstalled). The\n.\\\" HREF\n\\fBpcre2demo\\fP\n.\\\"\nprogram is provided as a relatively simple coding example.\n.P\nIf you try to run\n.\\\" HREF\n\\fBpcre2demo\\fP\n.\\\"\nwhen PCRE2 is not installed in the standard library directory, you may get an\nerror like this on some operating systems (e.g. Solaris):\n.sp\n  ld.so.1: pcre2demo: fatal: libpcre2-8.so.0: open failed: No such file or directory\n.sp\nThis is caused by the way shared library support works on those systems. You\nneed to add\n.sp\n  -R/usr/local/lib\n.sp\n(for example) to the compile command to get round this problem.\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 28 February 2025\nCopyright (c) 1997-2016 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2serialize.3",
    "content": ".TH PCRE2SERIALIZE 3 \"19 January 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"SAVING AND RE-USING PRECOMPILED PCRE2 PATTERNS\"\n.rs\n.sp\n.nf\n.B int32_t pcre2_serialize_decode(pcre2_code **\\fIcodes\\fP,\n.B \"  int32_t \\fInumber_of_codes\\fP, const uint8_t *\\fIbytes\\fP,\"\n.B \"  pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B int32_t pcre2_serialize_encode(const pcre2_code **\\fIcodes\\fP,\n.B \"  int32_t \\fInumber_of_codes\\fP, uint8_t **\\fIserialized_bytes\\fP,\"\n.B \"  PCRE2_SIZE *\\fIserialized_size\\fP, pcre2_general_context *\\fIgcontext\\fP);\"\n.sp\n.B void pcre2_serialize_free(uint8_t *\\fIbytes\\fP);\n.sp\n.B int32_t pcre2_serialize_get_number_of_codes(const uint8_t *\\fIbytes\\fP);\n.fi\n.sp\nIf you are running an application that uses a large number of regular\nexpression patterns, it may be useful to store them in a precompiled form\ninstead of having to compile them every time the application is run. However,\nif you are using the just-in-time optimization feature, it is not possible to\nsave and reload the JIT data, because it is position-dependent. The host on\nwhich the patterns are reloaded must be running the same version of PCRE2, with\nthe same code unit width, and must also have the same endianness, pointer width\nand PCRE2_SIZE type. For example, patterns compiled on a 32-bit system using\nPCRE2's 16-bit library cannot be reloaded on a 64-bit system, nor can they be\nreloaded using the 8-bit library.\n.P\nNote that \"serialization\" in PCRE2 does not convert compiled patterns to an\nabstract format like Java or .NET serialization. The serialized output is\nreally just a bytecode dump, which is why it can only be reloaded in the same\nenvironment as the one that created it. Hence the restrictions mentioned above.\nApplications that are not statically linked with a fixed version of PCRE2 must\nbe prepared to recompile patterns from their sources, in order to be immune to\nPCRE2 upgrades.\n.\n.\n.SH \"SECURITY CONCERNS\"\n.rs\n.sp\nThe facility for saving and restoring compiled patterns is intended for use\nwithin individual applications. As such, the data supplied to\n\\fBpcre2_serialize_decode()\\fP is expected to be trusted data, not data from\narbitrary external sources. There is only some simple consistency checking, not\ncomplete validation of what is being re-loaded. Corrupted data may cause\nundefined results. For example, if the length field of a pattern in the\nserialized data is corrupted, the deserializing code may read beyond the end of\nthe byte stream that is passed to it.\n.\n.\n.SH \"SAVING COMPILED PATTERNS\"\n.rs\n.sp\nBefore compiled patterns can be saved they must be serialized, which in PCRE2\nmeans converting the pattern to a stream of bytes. A single byte stream may\ncontain any number of compiled patterns, but they must all use the same\ncharacter tables. A single copy of the tables is included in the byte stream\n(its size is 1088 bytes). For more details of character tables, see the\n.\\\" HTML <a href=\"pcre2api.html#localesupport\">\n.\\\" </a>\nsection on locale support\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation.\n.P\nThe function \\fBpcre2_serialize_encode()\\fP creates a serialized byte stream\nfrom a list of compiled patterns. Its first two arguments specify the list,\nbeing a pointer to a vector of pointers to compiled patterns, and the length of\nthe vector. The third and fourth arguments point to variables which are set to\npoint to the created byte stream and its length, respectively. The final\nargument is a pointer to a general context, which can be used to specify custom\nmemory management functions. If this argument is NULL, \\fBmalloc()\\fP is used\nto obtain memory for the byte stream. The yield of the function is the number\nof serialized patterns, or one of the following negative error codes:\n.sp\n  PCRE2_ERROR_BADDATA      the number of patterns is zero or less\n  PCRE2_ERROR_BADMAGIC     mismatch of id bytes in one of the patterns\n  PCRE2_ERROR_NOMEMORY     memory allocation failed\n  PCRE2_ERROR_MIXEDTABLES  the patterns do not all use the same tables\n  PCRE2_ERROR_NULL         the 1st, 3rd, or 4th argument is NULL\n.sp\nPCRE2_ERROR_BADMAGIC means either that a pattern's code has been corrupted, or\nthat a slot in the vector does not point to a compiled pattern.\n.P\nOnce a set of patterns has been serialized you can save the data in any\nappropriate manner. Here is sample code that compiles two patterns and writes\nthem to a file. It assumes that the variable \\fIfd\\fP refers to a file that is\nopen for output. The error checking that should be present in a real\napplication has been omitted for simplicity.\n.sp\n  int errorcode;\n  uint8_t *bytes;\n  PCRE2_SIZE erroroffset;\n  PCRE2_SIZE bytescount;\n  pcre2_code *list_of_codes[2];\n  list_of_codes[0] = pcre2_compile(\"first pattern\",\n    PCRE2_ZERO_TERMINATED, 0, &errorcode, &erroroffset, NULL);\n  list_of_codes[1] = pcre2_compile(\"second pattern\",\n    PCRE2_ZERO_TERMINATED, 0, &errorcode, &erroroffset, NULL);\n  errorcode = pcre2_serialize_encode(list_of_codes, 2, &bytes,\n    &bytescount, NULL);\n  errorcode = fwrite(bytes, 1, bytescount, fd);\n.sp\nNote that the serialized data is binary data that may contain any of the 256\npossible byte values. On systems that make a distinction between binary and\nnon-binary data, be sure that the file is opened for binary output.\n.P\nSerializing a set of patterns leaves the original data untouched, so they can\nstill be used for matching. Their memory must eventually be freed in the usual\nway by calling \\fBpcre2_code_free()\\fP. When you have finished with the byte\nstream, it too must be freed by calling \\fBpcre2_serialize_free()\\fP. If this\nfunction is called with a NULL argument, it returns immediately without doing\nanything.\n.\n.\n.SH \"RE-USING PRECOMPILED PATTERNS\"\n.rs\n.sp\nIn order to re-use a set of saved patterns you must first make the serialized\nbyte stream available in main memory (for example, by reading from a file). The\nmanagement of this memory block is up to the application. You can use the\n\\fBpcre2_serialize_get_number_of_codes()\\fP function to find out how many\ncompiled patterns are in the serialized data without actually decoding the\npatterns:\n.sp\n  uint8_t *bytes = <serialized data>;\n  int32_t number_of_codes = pcre2_serialize_get_number_of_codes(bytes);\n.sp\nThe \\fBpcre2_serialize_decode()\\fP function reads a byte stream and recreates\nthe compiled patterns in new memory blocks, setting pointers to them in a\nvector. The first two arguments are a pointer to a suitable vector and its\nlength, and the third argument points to a byte stream. The final argument is a\npointer to a general context, which can be used to specify custom memory\nmanagement functions for the decoded patterns. If this argument is NULL,\n\\fBmalloc()\\fP and \\fBfree()\\fP are used. After deserialization, the byte\nstream is no longer needed and can be discarded.\n.sp\n  pcre2_code *list_of_codes[2];\n  uint8_t *bytes = <serialized data>;\n  int32_t number_of_codes =\n    pcre2_serialize_decode(list_of_codes, 2, bytes, NULL);\n.sp\nIf the vector is not large enough for all the patterns in the byte stream, it\nis filled with those that fit, and the remainder are ignored. The yield of the\nfunction is the number of decoded patterns, or one of the following negative\nerror codes:\n.sp\n  PCRE2_ERROR_BADDATA    second argument is zero or less\n  PCRE2_ERROR_BADMAGIC   mismatch of id bytes in the data\n  PCRE2_ERROR_BADMODE    mismatch of code unit size or PCRE2 version\n  PCRE2_ERROR_BADSERIALIZEDDATA  other sanity check failure\n  PCRE2_ERROR_MEMORY     memory allocation failed\n  PCRE2_ERROR_NULL       first or third argument is NULL\n.sp\nPCRE2_ERROR_BADMAGIC may mean that the data is corrupt, or that it was compiled\non a system with different endianness.\n.P\nDecoded patterns can be used for matching in the usual way, and must be freed\nby calling \\fBpcre2_code_free()\\fP. However, be aware that there is a potential\nrace issue if you are using multiple patterns that were decoded from a single\nbyte stream in a multithreaded application. A single copy of the character\ntables is used by all the decoded patterns and a reference count is used to\narrange for its memory to be automatically freed when the last pattern is\nfreed, but there is no locking on this reference count. Therefore, if you want\nto call \\fBpcre2_code_free()\\fP for these patterns in different threads, you\nmust arrange your own locking, and ensure that \\fBpcre2_code_free()\\fP cannot\nbe called by two threads at the same time.\n.P\nIf a pattern was processed by \\fBpcre2_jit_compile()\\fP before being\nserialized, the JIT data is discarded and so is no longer available after a\nsave/restore cycle. You can, however, process a restored pattern with\n\\fBpcre2_jit_compile()\\fP if you wish.\n.\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 19 January 2024\nCopyright (c) 1997-2018 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2syntax.3",
    "content": ".TH PCRE2SYNTAX 3 \"14 October 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"PCRE2 REGULAR EXPRESSION SYNTAX SUMMARY\"\n.rs\n.sp\nThe full syntax and semantics of the regular expression patterns that are\nsupported by PCRE2 are described in the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation. This document contains a quick-reference summary of the pattern\nsyntax followed by the syntax of replacement strings in substitution function.\nThe full description of the latter is in the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation.\n.\n.SH \"QUOTING\"\n.rs\n.sp\n  \\ex         where x is non-alphanumeric is a literal x\n  \\eQ...\\eE    treat enclosed characters as literal\n.sp\nNote that white space inside \\eQ...\\eE is always treated as literal, even if\nPCRE2_EXTENDED is set, causing most other white space to be ignored. Note also\nthat PCRE2's handling of \\eQ...\\eE has some differences from Perl's. See the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation for details.\n.\n.\n.SH \"BRACED ITEMS\"\n.rs\n.sp\nWith one exception, wherever brace characters { and } are required to enclose\ndata for constructions such as \\eg{2} or \\ek{name}, space and/or horizontal tab\ncharacters that follow { or precede } are allowed and are ignored. In the case\nof quantifiers, they may also appear before or after the comma. The exception\nis \\eu{...} which is not Perl-compatible and is recognized only when\nPCRE2_EXTRA_ALT_BSUX is set. This is an ECMAScript compatibility feature, and\nfollows ECMAScript's behaviour.\n.\n.\n.SH \"ESCAPED CHARACTERS\"\n.rs\n.sp\nThis table applies to ASCII and Unicode environments. An unrecognized escape\nsequence causes an error.\n.sp\n  \\ea         alarm, that is, the BEL character (hex 07)\n  \\ecx        \"control-x\", where x is a non-control ASCII character\n  \\ee         escape (hex 1B)\n  \\ef         form feed (hex 0C)\n  \\en         newline (hex 0A)\n  \\er         carriage return (hex 0D)\n  \\et         tab (hex 09)\n  \\e0dd       character with octal code 0dd\n  \\eddd       character with octal code ddd, or backreference\n  \\eo{ddd..}  character with octal code ddd..\n  \\eN{U+hh..} character with Unicode code point hh.. (Unicode mode only)\n  \\exhh       character with hex code hh\n  \\ex{hh..}   character with hex code hh..\n.sp\n\\eN{U+hh..} is synonymous with \\ex{hh..} but is not supported in environments\nthat use EBCDIC code (mainly IBM mainframes). Note that \\eN not followed by an\nopening curly bracket has a different meaning (see below).\n.P\nIf PCRE2_ALT_BSUX or PCRE2_EXTRA_ALT_BSUX is set (\"ALT_BSUX mode\"), the\nfollowing are also recognized:\n.sp\n  \\eU         the character \"U\"\n  \\euhhhh     character with hex code hhhh\n  \\eu{hh..}   character with hex code hh.. but only for EXTRA_ALT_BSUX\n.sp\nWhen \\ex is not followed by {, one or two hexadecimal digits are read,\nbut in ALT_BSUX mode \\ex must be followed by two hexadecimal digits to be\nrecognized as a hexadecimal escape; otherwise it matches a literal \"x\".\nLikewise, if \\eu (in ALT_BSUX mode) is not followed by four hexadecimal digits\nor (in EXTRA_ALT_BSUX mode) a sequence of hex digits in curly brackets, it\nmatches a literal \"u\".\n.P\nNote that \\e0dd is always an octal code. The treatment of backslash followed by\na non-zero digit is complicated; for details see the section\n.\\\" HTML <a href=\"pcre2pattern.html#digitsafterbackslash\">\n.\\\" </a>\n\"Non-printing characters\"\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation, where details of escape processing in EBCDIC environments are\nalso given.\n.\n.\n.SH \"CHARACTER TYPES\"\n.rs\n.sp\n  .          any character except newline;\n               in dotall mode, any character whatsoever\n  \\eC         one code unit, even in UTF mode (best avoided)\n  \\ed         a decimal digit\n  \\eD         a character that is not a decimal digit\n  \\eh         a horizontal white space character\n  \\eH         a character that is not a horizontal white space character\n  \\eN         a character that is not a newline\n  \\ep{\\fIxx\\fP}     a character with the \\fIxx\\fP property\n  \\eP{\\fIxx\\fP}     a character without the \\fIxx\\fP property\n  \\eR         a newline sequence\n  \\es         a white space character\n  \\eS         a character that is not a white space character\n  \\ev         a vertical white space character\n  \\eV         a character that is not a vertical white space character\n  \\ew         a \"word\" character\n  \\eW         a \"non-word\" character\n  \\eX         a Unicode extended grapheme cluster\n.sp\n\\eC is dangerous because it may leave the current matching point in the middle\nof a UTF-8 or UTF-16 character. The application can lock out the use of \\eC by\nsetting the PCRE2_NEVER_BACKSLASH_C option. It is also possible to build PCRE2\nwith the use of \\eC permanently disabled.\n.P\nBy default, \\ed, \\es, and \\ew match only ASCII characters, even in UTF-8 mode\nor in the 16-bit and 32-bit libraries. However, if locale-specific matching is\nhappening, \\es and \\ew may also match characters with code points in the range\n128-255. If the PCRE2_UCP option is set, the behaviour of these escape\nsequences is changed to use Unicode properties and they match many more\ncharacters, but there are some option settings that can restrict individual\nsequences to matching only ASCII characters.\n.P\nProperty descriptions in \\ep and \\eP are matched caselessly; hyphens,\nunderscores, and ASCII white space characters are ignored, in accordance with\nUnicode's \"loose matching\" rules. For example, \\ep{Bidi_Class=al} is the same\nas \\ep{ bidi class = AL }.\n.\n.\n.SH \"GENERAL CATEGORY PROPERTIES FOR \\ep and \\eP\"\n.rs\n.sp\n  C          Other\n  Cc         Control\n  Cf         Format\n  Cn         Unassigned\n  Co         Private use\n  Cs         Surrogate\n.sp\n  L          Letter\n  Lc         Cased letter, the union of Ll, Lu, and Lt\n  L&         Synonym of Lc\n  Ll         Lower case letter\n  Lm         Modifier letter\n  Lo         Other letter\n  Lt         Title case letter\n  Lu         Upper case letter\n.sp\n  M          Mark\n  Mc         Spacing mark\n  Me         Enclosing mark\n  Mn         Non-spacing mark\n.sp\n  N          Number\n  Nd         Decimal number\n  Nl         Letter number\n  No         Other number\n.sp\n  P          Punctuation\n  Pc         Connector punctuation\n  Pd         Dash punctuation\n  Pe         Close punctuation\n  Pf         Final punctuation\n  Pi         Initial punctuation\n  Po         Other punctuation\n  Ps         Open punctuation\n.sp\n  S          Symbol\n  Sc         Currency symbol\n  Sk         Modifier symbol\n  Sm         Mathematical symbol\n  So         Other symbol\n.sp\n  Z          Separator\n  Zl         Line separator\n  Zp         Paragraph separator\n  Zs         Space separator\n.sp\nFrom release 10.45, when caseless matching is set, Ll, Lu, and Lt are all\nequivalent to Lc.\n.\n.\n.SH \"PCRE2 SPECIAL CATEGORY PROPERTIES FOR \\ep and \\eP\"\n.rs\n.sp\n  Xan        Alphanumeric: union of properties L and N\n  Xps        POSIX space: property Z or tab, NL, VT, FF, CR\n  Xsp        Perl space: property Z or tab, NL, VT, FF, CR\n  Xuc        Universally-named character: one that can be\n               represented by a Universal Character Name\n  Xwd        Perl word: property Xan or underscore\n.sp\nPerl and POSIX space are now the same. Perl added VT to its space character set\nat release 5.18.\n.\n.\n.SH \"BINARY PROPERTIES FOR \\ep AND \\eP\"\n.rs\n.sp\nUnicode defines a number of binary properties, that is, properties whose only\nvalues are true or false. You can obtain a list of those that are recognized by\n\\ep and \\eP, along with their abbreviations, by running this command:\n.sp\n  pcre2test -LP\n.\n.\n.\n.SH \"SCRIPT MATCHING WITH \\ep AND \\eP\"\n.rs\n.sp\nMany script names and their 4-letter abbreviations are recognized in\n\\ep{sc:...} or \\ep{scx:...} items, or on their own with \\ep (and also \\eP of\ncourse). You can obtain a list of these scripts by running this command:\n.sp\n  pcre2test -LS\n.\n.\n.\n.SH \"THE BIDI_CLASS PROPERTY FOR \\ep AND \\eP\"\n.rs\n.sp\n  \\ep{Bidi_Class:<class>}   matches a character with the given class\n  \\ep{BC:<class>}           matches a character with the given class\n.sp\nThe recognized classes are:\n.sp\n  AL          Arabic letter\n  AN          Arabic number\n  B           paragraph separator\n  BN          boundary neutral\n  CS          common separator\n  EN          European number\n  ES          European separator\n  ET          European terminator\n  FSI         first strong isolate\n  L           left-to-right\n  LRE         left-to-right embedding\n  LRI         left-to-right isolate\n  LRO         left-to-right override\n  NSM         non-spacing mark\n  ON          other neutral\n  PDF         pop directional format\n  PDI         pop directional isolate\n  R           right-to-left\n  RLE         right-to-left embedding\n  RLI         right-to-left isolate\n  RLO         right-to-left override\n  S           segment separator\n  WS          white space\n.\n.\n.SH \"CHARACTER CLASSES\"\n.rs\n.sp\n  [...]       positive character class\n  [^...]      negative character class\n  [x-y]       range (can be used for hex characters)\n  [[:xxx:]]   positive POSIX named set\n  [[:^xxx:]]  negative POSIX named set\n.sp\n  alnum       alphanumeric\n  alpha       alphabetic\n  ascii       0-127\n  blank       space or tab\n  cntrl       control character\n  digit       decimal digit\n  graph       printing, excluding space\n  lower       lower case letter\n  print       printing, including space\n  punct       printing, excluding alphanumeric\n  space       white space\n  upper       upper case letter\n  word        same as \\ew\n  xdigit      hexadecimal digit\n.sp\nIn PCRE2, POSIX character set names recognize only ASCII characters by default,\nbut some of them use Unicode properties if PCRE2_UCP is set. You can use\n\\eQ...\\eE inside a character class.\n.P\nWhen PCRE2_ALT_EXTENDED_CLASS is set, UTS#18 extended character classes may be\nused, allowing nested character classes, combined using set operators.\n.sp\n  [x&&[^y]]   UTS#18 extended character class\n.sp\n  x||y        set union (OR)\n  x&&y        set intersection (AND)\n  x--y        set difference (AND NOT)\n  x~~y        set symmetric difference (XOR)\n.sp\n.\n.\n.SH \"PERL EXTENDED CHARACTER CLASSES\"\n.rs\n.sp\n  (?[...])                Perl extended character class\n  (?[\\ep{Thai} & \\ep{Nd}])  operators; white space ignored\n  (?[(x - y) & z])        parentheses for grouping\n.sp\n  (?[ [^3] & \\ep{Nd} ])    [...] is a nested ordinary class\n  (?[ [:alpha:] - [z] ])  POSIX set is allowed outside [...]\n  (?[ \\ed - [3] ])         backslash-escaped set is allowed outside [...]\n  (?[ !\\en & [:ascii:] ])  backslash-escaped character is allowed outside [...]\n                      all other characters or ranges must be enclosed in [...]\n.sp\n  x|y, x+y                set union (OR)\n  x&y                     set intersection (AND)\n  x-y                     set difference (AND NOT)\n  x^y                     set symmetric difference (XOR)\n  !x                      set complement (NOT)\n.sp\nInside a Perl extended character class, [...] switches mode to be interpreted\nas an ordinary character class. Outside of a nested [...], the only items\npermitted are backslash-escapes, POSIX sets, operators, and parentheses. Inside\na nested ordinary class, ^ has its usual meaning (inverts the class when used\nas the first character); outside of a nested class, ^ is the XOR operator.\n.\n.\n.SH \"QUANTIFIERS\"\n.rs\n.sp\n  ?           0 or 1, greedy\n  ?+          0 or 1, possessive\n  ??          0 or 1, lazy\n  *           0 or more, greedy\n  *+          0 or more, possessive\n  *?          0 or more, lazy\n  +           1 or more, greedy\n  ++          1 or more, possessive\n  +?          1 or more, lazy\n  {n}         exactly n\n  {n,m}       at least n, no more than m, greedy\n  {n,m}+      at least n, no more than m, possessive\n  {n,m}?      at least n, no more than m, lazy\n  {n,}        n or more, greedy\n  {n,}+       n or more, possessive\n  {n,}?       n or more, lazy\n  {,m}        zero up to m, greedy\n  {,m}+       zero up to m, possessive\n  {,m}?       zero up to m, lazy\n.\n.\n.SH \"ANCHORS AND SIMPLE ASSERTIONS\"\n.rs\n.sp\n  \\eb          word boundary\n  \\eB          not a word boundary\n  ^           start of subject\n                also after an internal newline in multiline mode\n                (after any newline if PCRE2_ALT_CIRCUMFLEX is set)\n  \\eA          start of subject\n  $           end of subject\n                also before newline at end of subject\n                also before internal newline in multiline mode\n  \\eZ          end of subject\n                also before newline at end of subject\n  \\ez          end of subject\n  \\eG          first matching position in subject\n.\n.\n.SH \"REPORTED MATCH POINT SETTING\"\n.rs\n.sp\n  \\eK          set reported start of match\n.sp\nFrom release 10.38 \\eK is not permitted by default in lookaround assertions,\nfor compatibility with Perl. However, if the PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK\noption is set, the previous behaviour is re-enabled. When this option is set,\n\\eK is honoured in positive assertions, but ignored in negative ones.\n.\n.\n.SH \"ALTERNATION\"\n.rs\n.sp\n  expr|expr|expr...\n.\n.\n.SH \"CAPTURING\"\n.rs\n.sp\n  (...)           capture group\n  (?<name>...)    named capture group (Perl)\n  (?'name'...)    named capture group (Perl)\n  (?P<name>...)   named capture group (Python)\n  (?:...)         non-capture group\n  (?|...)         non-capture group; reset group numbers for\n                   capture groups in each alternative\n.sp\nIn non-UTF modes, names may contain underscores and ASCII letters and digits;\nin UTF modes, any Unicode letters and Unicode decimal digits are permitted. In\nboth cases, a name must not start with a digit.\n.\n.\n.SH \"ATOMIC GROUPS\"\n.rs\n.sp\n  (?>...)         atomic non-capture group\n  (*atomic:...)   atomic non-capture group\n.\n.\n.SH \"COMMENT\"\n.rs\n.sp\n  (?#....)        comment (not nestable)\n.\n.\n.SH \"OPTION SETTING\"\n.rs\nChanges of these options within a group are automatically cancelled at the end\nof the group.\n.sp\n  (?a)            all ASCII options\n  (?aD)           restrict \\ed to ASCII in UCP mode\n  (?aS)           restrict \\es to ASCII in UCP mode\n  (?aW)           restrict \\ew to ASCII in UCP mode\n  (?aP)           restrict all POSIX classes to ASCII in UCP mode\n  (?aT)           restrict POSIX digit classes to ASCII in UCP mode\n  (?i)            caseless\n  (?J)            allow duplicate named groups\n  (?m)            multiline\n  (?n)            no auto capture\n  (?r)            restrict caseless to either ASCII or non-ASCII\n  (?s)            single line (dotall)\n  (?U)            default ungreedy (lazy)\n  (?x)            ignore white space except in classes or \\eQ...\\eE\n  (?xx)           as (?x) but also ignore space and tab in classes\n  (?-...)         unset the given option(s)\n  (?^)            unset imnrsx options\n.sp\n(?aP) implies (?aT) as well, though this has no additional effect. However, it\nmeans that (?-aP) also implies (?-aT) and disables all ASCII restrictions for\nPOSIX classes.\n.P\nUnsetting x or xx unsets both. Several options may be set at once, and a\nmixture of setting and unsetting such as (?i-x) is allowed, but there may be\nonly one hyphen. Setting (but no unsetting) is allowed after (?^ for example\n(?^in). An option setting may appear at the start of a non-capture group, for\nexample (?i:...).\n.P\nThe following are recognized only at the very start of a pattern or after one\nof the newline or \\eR sequences or options with similar syntax. More than one\nof them may appear. For the first three, d is a decimal number.\n.sp\n  (*LIMIT_DEPTH=d)     set the backtracking limit to d\n  (*LIMIT_HEAP=d)      set the heap size limit to d * 1024 bytes\n  (*LIMIT_MATCH=d)     set the match limit to d\n  (*CASELESS_RESTRICT) set PCRE2_EXTRA_CASELESS_RESTRICT when matching\n  (*NOTEMPTY)          set PCRE2_NOTEMPTY when matching\n  (*NOTEMPTY_ATSTART)  set PCRE2_NOTEMPTY_ATSTART when matching\n  (*NO_AUTO_POSSESS)   no auto-possessification (PCRE2_NO_AUTO_POSSESS)\n  (*NO_DOTSTAR_ANCHOR) no .* anchoring (PCRE2_NO_DOTSTAR_ANCHOR)\n  (*NO_JIT)            disable JIT optimization\n  (*NO_START_OPT)      no start-match optimization (PCRE2_NO_START_OPTIMIZE)\n  (*TURKISH_CASING)    set PCRE2_EXTRA_TURKISH_CASING when matching\n  (*UTF)               set appropriate UTF mode for the library in use\n  (*UCP)               set PCRE2_UCP (use Unicode properties for \\ed etc)\n.sp\nNote that LIMIT_DEPTH, LIMIT_HEAP, and LIMIT_MATCH can only reduce the value of\nthe limits set by the caller of \\fBpcre2_match()\\fP or \\fBpcre2_dfa_match()\\fP,\nnot increase them. LIMIT_RECURSION is an obsolete synonym for LIMIT_DEPTH. The\napplication can lock out the use of (*UTF) and (*UCP) by setting the\nPCRE2_NEVER_UTF or PCRE2_NEVER_UCP options, respectively, at compile time.\n.\n.\n.SH \"NEWLINE CONVENTION\"\n.rs\n.sp\nThese are recognized only at the very start of the pattern or after option\nsettings with a similar syntax.\n.sp\n  (*CR)           carriage return only\n  (*LF)           linefeed only\n  (*CRLF)         carriage return followed by linefeed\n  (*ANYCRLF)      all three of the above\n  (*ANY)          any Unicode newline sequence\n  (*NUL)          the NUL character (binary zero)\n.\n.\n.SH \"WHAT \\eR MATCHES\"\n.rs\n.sp\nThese are recognized only at the very start of the pattern or after option\nsetting with a similar syntax.\n.sp\n  (*BSR_ANYCRLF)  CR, LF, or CRLF\n  (*BSR_UNICODE)  any Unicode newline sequence\n.\n.\n.SH \"LOOKAHEAD AND LOOKBEHIND ASSERTIONS\"\n.rs\n.sp\n  (?=...)                     )\n  (*pla:...)                  ) positive lookahead\n  (*positive_lookahead:...)   )\n.sp\n  (?!...)                     )\n  (*nla:...)                  ) negative lookahead\n  (*negative_lookahead:...)   )\n.sp\n  (?<=...)                    )\n  (*plb:...)                  ) positive lookbehind\n  (*positive_lookbehind:...)  )\n.sp\n  (?<!...)                    )\n  (*nlb:...)                  ) negative lookbehind\n  (*negative_lookbehind:...)  )\n.sp\nEach top-level branch of a lookbehind must have a limit for the number of\ncharacters it matches. If any branch can match a variable number of characters,\nthe maximum for each branch is limited to a value set by the caller of\n\\fBpcre2_compile()\\fP or defaulted. The default is set when PCRE2 is built\n(ultimate default 255). If every branch matches a fixed number of characters,\nthe limit for each branch is 65535 characters.\n.\n.\n.SH \"NON-ATOMIC LOOKAROUND ASSERTIONS\"\n.rs\n.sp\nThese assertions are specific to PCRE2 and are not Perl-compatible.\n.sp\n  (?*...)                                )\n  (*napla:...)                           ) synonyms\n  (*non_atomic_positive_lookahead:...)   )\n.sp\n  (?<*...)                               )\n  (*naplb:...)                           ) synonyms\n  (*non_atomic_positive_lookbehind:...)  )\n.\n.\n.SH \"SUBSTRING SCAN ASSERTION\"\n.rs\nThis feature is not Perl-compatible.\n.sp\n  (*scan_substring:(grouplist)...)  scan captured substring\n  (*scs:(grouplist)...)             scan captured substring\n.sp\nThe comma-separated list \"grouplist\" may identify groups in any of the\nfollowing ways:\n.sp\n  n       absolute reference\n  +n      relative reference\n  -n      relative reference\n  <name>  name\n  'name'  name\n.\n.\n.SH \"SCRIPT RUNS\"\n.rs\n.sp\n  (*script_run:...)           ) script run, can be backtracked into\n  (*sr:...)                   )\n.sp\n  (*atomic_script_run:...)    ) atomic script run\n  (*asr:...)                  )\n.\n.\n.SH \"BACKREFERENCES\"\n.rs\n.sp\n  \\en              reference by number (can be ambiguous)\n  \\egn             reference by number\n  \\eg{n}           reference by number\n  \\eg+n            relative reference by number (PCRE2 extension)\n  \\eg-n            relative reference by number\n  \\eg{+n}          relative reference by number (PCRE2 extension)\n  \\eg{-n}          relative reference by number\n  \\ek<name>        reference by name (Perl)\n  \\ek'name'        reference by name (Perl)\n  \\eg{name}        reference by name (Perl)\n  \\ek{name}        reference by name (.NET)\n  (?P=name)       reference by name (Python)\n.\n.\n.SH \"SUBROUTINE REFERENCES (POSSIBLY RECURSIVE)\"\n.rs\n.sp\n  (?R)            recurse whole pattern\n  (?n)            call subroutine by absolute number\n  (?+n)           call subroutine by relative number\n  (?-n)           call subroutine by relative number\n  (?&name)        call subroutine by name (Perl)\n  (?P>name)       call subroutine by name (Python)\n  \\eg<name>        call subroutine by name (Oniguruma)\n  \\eg'name'        call subroutine by name (Oniguruma)\n  \\eg<n>           call subroutine by absolute number (Oniguruma)\n  \\eg'n'           call subroutine by absolute number (Oniguruma)\n  \\eg<+n>          call subroutine by relative number (PCRE2 extension)\n  \\eg'+n'          call subroutine by relative number (PCRE2 extension)\n  \\eg<-n>          call subroutine by relative number (PCRE2 extension)\n  \\eg'-n'          call subroutine by relative number (PCRE2 extension)\n.sp\nThe variants using parentheses (?...) may also specify a list of capture groups\nto return, which shall be retained in the calling subexpression if set during\nthe recursion (this feature is not supported by Perl).\n.sp\n  (?R(grouplist))       recurse whole pattern, returning capture groups\n                          (PCRE2 extension)\n  (?n(grouplist))       )\n  (?+n(grouplist))      ) call subroutine, returning capture groups\n  (?-n(grouplist))      )   (PCRE2 extension)\n  (?&name(grouplist))   )\n  (?P>name(grouplist))  )\n.sp\nThe comma-separated list \"grouplist\" uses the same syntax as\n(*scan_substring:(grouplist)...), and may identify groups in any of the\nfollowing ways:\n.sp\n  n       absolute reference\n  +n      relative reference\n  -n      relative reference\n  <name>  name\n  'name'  name\n.\n.\n.SH \"CONDITIONAL PATTERNS\"\n.rs\n.sp\n  (?(condition)yes-pattern)\n  (?(condition)yes-pattern|no-pattern)\n.sp\n  (?(n)                absolute reference condition\n  (?(+n)               relative reference condition (PCRE2 extension)\n  (?(-n)               relative reference condition (PCRE2 extension)\n  (?(<name>)           named reference condition (Perl)\n  (?('name')           named reference condition (Perl)\n  (?(name)             named reference condition (PCRE2, deprecated)\n  (?(R)                overall recursion condition\n  (?(Rn)               specific numbered group recursion condition\n  (?(R&name)           specific named group recursion condition\n  (?(DEFINE)           define groups for reference\n  (?(VERSION[>]=n[.m]) test PCRE2 version\n  (?(assert)           assertion condition\n.sp\nNote the ambiguity of (?(R) and (?(Rn) which might be named reference\nconditions or recursion tests. Such a condition is interpreted as a reference\ncondition if the relevant named group exists.\n.sp\nThe parts within brackets for the VERSION conditional syntax could be ommited.\nThe fractional part of the version number defaults to 0 in that case.\n.\n.\n.SH \"BACKTRACKING CONTROL\"\n.rs\n.sp\nAll backtracking control verbs may be in the form (*VERB:NAME). For (*MARK) the\nname is mandatory, for the others it is optional. (*SKIP) changes its behaviour\nif :NAME is present. The others just set a name for passing back to the caller,\nbut this is not a name that (*SKIP) can see. The following act immediately they\nare reached:\n.sp\n  (*ACCEPT)       force successful match\n  (*FAIL)         force backtrack; synonym (*F)\n  (*MARK:NAME)    set name to be passed back; synonym (*:NAME)\n.sp\nThe following act only when a subsequent match failure causes a backtrack to\nreach them. They all force a match failure, but they differ in what happens\nafterwards. Those that advance the start-of-match point do so only if the\npattern is not anchored.\n.sp\n  (*COMMIT)       overall failure, no advance of starting point\n  (*PRUNE)        advance to next starting character\n  (*SKIP)         advance to current matching position\n  (*SKIP:NAME)    advance to position corresponding to an earlier\n                  (*MARK:NAME); if not found, the (*SKIP) is ignored\n  (*THEN)         local failure, backtrack to next alternation\n.sp\nThe effect of one of these verbs in a group called as a subroutine is confined\nto the subroutine call.\n.\n.\n.SH \"CALLOUTS\"\n.rs\n.sp\n  (?C)            callout (assumed number 0)\n  (?Cn)           callout with numerical data n\n  (?C\"text\")      callout with string data\n.sp\nThe allowed string delimiters are ` ' \" ^ % # $ (which are the same for the\nstart and the end), and the starting delimiter { matched with the ending\ndelimiter }. To encode the ending delimiter within the string, double it.\n.\n.\n.SH \"REPLACEMENT STRINGS\"\n.rs\n.sp\nIf the PCRE2_SUBSTITUTE_LITERAL option is set, a replacement string for\n\\fBpcre2_substitute()\\fP is not interpreted. Otherwise, by default, the only\nspecial character is the dollar character in one of the following forms:\n.sp\n  $$                  insert a dollar character\n  $n or ${n}          insert the contents of group \\fIn\\fP\n  $<name>             insert the contents of named group\n  $0 or $&            insert the entire matched substring\n  $`                  insert the substring that precedes the match\n  $'                  insert the substring that follows the match\n  $_                  insert the entire input string\n  $+                  insert the highest-numbered capture group which matched\n  $*MARK or ${*MARK}  insert a control verb name\n.sp\nFor ${n}, n can be a name or a number. If PCRE2_SUBSTITUTE_EXTENDED is set,\nthere is additional interpretation:\n.P\n1. Backslash is an escape character, and the forms described in \"ESCAPED\nCHARACTERS\" above are recognized. Also:\n.sp\n  \\eQ...\\eE can be used to suppress interpretation\n  \\el      force the next character to lower case\n  \\eu      force the next character to upper case\n  \\eL      force subsequent characters to lower case\n  \\eU      force subsequent characters to upper case\n  \\eu\\eL    force next character to upper case, then all lower\n  \\el\\eU    force next character to lower case, then all upper\n  \\eE      end \\eL or \\eU case forcing\n  \\eb      backspace character (note: as in character class in pattern)\n  \\ev      vertical tab character (note: not the same as in a pattern)\n.sp\n2. The Python form \\eg<n>, where the angle brackets are part of the syntax and\n\\fIn\\fP is either a group name or a number, is recognized as an alternative way\nof inserting the contents of a group, for example \\eg<3>.\n.P\n3. Capture substitution supports the following additional forms:\n.sp\n  ${n:-string}             default for unset group\n  ${n:+string1:string2}    values for set/unset group\n.sp\nThe substitution strings themselves are expanded. Backslash can be used to\nescape colons and closing curly brackets.\n.\n.\n.SH \"SEE ALSO\"\n.rs\n.sp\n\\fBpcre2pattern\\fP(3), \\fBpcre2api\\fP(3), \\fBpcre2callout\\fP(3),\n\\fBpcre2matching\\fP(3), \\fBpcre2\\fP(3).\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 14 October 2025\nCopyright (c) 1997-2024 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2test.1",
    "content": ".TH PCRE2TEST 1 \"12 October 2025\" \"PCRE2 10.48-DEV\"\n.SH NAME\npcre2test - a program for testing Perl-compatible regular expressions.\n.SH SYNOPSIS\n.rs\n.sp\n.B pcre2test \"[options] [input file [output file]]\"\n.sp\n\\fBpcre2test\\fP is a test program for the PCRE2 regular expression libraries,\nbut it can also be used for experimenting with regular expressions. This\ndocument describes the features of the test program; for details of the regular\nexpressions themselves, see the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation. For details of the PCRE2 library function calls and their\noptions, see the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation.\n.P\nThe input for \\fBpcre2test\\fP is a sequence of regular expression patterns and\nsubject strings to be matched. There are also command lines for setting\ndefaults and controlling some special actions. The output shows the result of\neach match attempt. Modifiers on external or internal command lines, the\npatterns, and the subject lines specify PCRE2 function options, control how the\nsubject is processed, and what output is produced.\n.P\nThere are many obscure modifiers, some of which are specifically designed for\nuse in conjunction with the test script and data files that are distributed as\npart of PCRE2. All the modifiers are documented here, some without much\njustification, but many of them are unlikely to be of use except when testing\nthe libraries.\n.\n.\n.SH \"PCRE2's 8-BIT, 16-BIT AND 32-BIT LIBRARIES\"\n.rs\n.sp\nDifferent versions of the PCRE2 library can be built to support character\nstrings that are encoded in 8-bit, 16-bit, or 32-bit code units. One, two, or\nall three of these libraries may be simultaneously installed. The\n\\fBpcre2test\\fP program can be used to test all the libraries. However, its own\ninput and output are always in 8-bit format. When testing the 16-bit or 32-bit\nlibraries, patterns and subject strings are converted to 16-bit or 32-bit\nformat before being passed to the library functions. Results are converted back\nto 8-bit code units for output.\n.P\nIn the rest of this document, the names of library functions and structures\nare given in generic form, for example, \\fBpcre2_compile()\\fP. The actual\nnames used in the libraries have a suffix _8, _16, or _32, as appropriate.\n.\n.\n.\\\" HTML <a name=\"inputencoding\"></a>\n.SH \"INPUT ENCODING\"\n.rs\n.sp\nInput to \\fBpcre2test\\fP is processed line by line, either by calling the C\nlibrary's \\fBfgets()\\fP function, or via the \\fBlibreadline\\fP or \\fBlibedit\\fP\nlibrary. In some Windows environments character 26 (hex 1A) causes an immediate\nend of file, and no further data is read, so this character should be avoided\nunless you really want that action.\n.P\nThe input is processed using C's string functions, so must not contain binary\nzeros, even though in Unix-like environments, \\fBfgets()\\fP treats any bytes\nother than newline as data characters. An error is generated if a binary zero\nis encountered. By default subject lines are processed for backslash escapes,\nwhich makes it possible to include any data value in strings that are passed to\nthe library for matching. For patterns, there is a facility for specifying some\nor all of the 8-bit input characters as hexadecimal pairs, which makes it\npossible to include binary zeros.\n.\n.\n.SS \"Input for the 16-bit and 32-bit libraries\"\n.rs\n.sp\nWhen testing the 16-bit or 32-bit libraries, there is a need to be able to\ngenerate character code points greater than 255 in the strings that are passed\nto the library. For subject lines and some patterns, backslash escapes can be\nused. In addition, when the \\fButf\\fP modifier (see\n.\\\" HTML <a href=\"#optionmodifiers\">\n.\\\" </a>\n\"Setting compilation options\"\n.\\\"\nbelow) is set, the pattern and any following subject lines are interpreted as\nUTF-8 strings and translated to UTF-16 or UTF-32 as appropriate.\n.P\nFor non-UTF testing of wide characters, the \\fButf8_input\\fP modifier can be\nused. This is mutually exclusive with \\fButf\\fP, and is allowed only in 16-bit\nor 32-bit mode. It causes the pattern and following subject lines to be treated\nas UTF-8 according to the original definition (RFC 2279), which allows for\ncharacter values up to 0x7fffffff. Each character is placed in one 16-bit or\n32-bit code unit (in the 16-bit case, values greater than 0xffff cause an error\nto occur).\n.P\nUTF-8 (in its original definition) is not capable of encoding values greater\nthan 0x7fffffff, but such values can be handled by the 32-bit library. When\ntesting this library in non-UTF mode with \\fButf8_input\\fP set, if any\ncharacter is preceded by the byte 0xff (which is an invalid byte in UTF-8)\n0x80000000 is added to the character's value. For subject strings, using an\nescape sequence is preferable.\n.\n.\n.SH \"COMMAND LINE OPTIONS\"\n.rs\n.TP 10\n\\fB-8\\fP\nIf the 8-bit library has been built, this option causes it to be used (this is\nthe default). If the 8-bit library has not been built, this option causes an\nerror.\n.TP 10\n\\fB-16\\fP\nIf the 16-bit library has been built, this option causes it to be used. If the\n8-bit library has not been built, this is the default. If the 16-bit library\nhas not been built, this option causes an error.\n.TP 10\n\\fB-32\\fP\nIf the 32-bit library has been built, this option causes it to be used. If no\nother library has been built, this is the default. If the 32-bit library has\nnot been built, this option causes an error.\n.TP 10\n\\fB-ac\\fP\nBehave as if each pattern has the \\fBauto_callout\\fP modifier, that is, insert\nautomatic callouts into every pattern that is compiled.\n.TP 10\n\\fB-AC\\fP\nAs for \\fB-ac\\fP, but in addition behave as if each subject line has the\n\\fBcallout_extra\\fP modifier, that is, show additional information from\ncallouts.\n.TP 10\n\\fB-b\\fP\nBehave as if each pattern has the \\fBfullbincode\\fP modifier; the full\ninternal binary form of the pattern is output after compilation.\n.TP 10\n\\fB-C\\fP\nOutput the version number of the PCRE2 library, and all available information\nabout the optional features that are included, and then exit with zero exit\ncode. All other options are ignored. If both -C and -LM are present, whichever\nis first is recognized.\n.TP 10\n\\fB-C\\fP \\fIoption\\fP\nOutput information about a specific build-time option, then exit. This\nfunctionality is intended for use in scripts such as \\fBRunTest\\fP. The\nfollowing options output the value and set the exit code as indicated:\n.sp\n  linksize   the configured internal link size (2, 3, or 4)\n               exit code is set to the link size\n  newline    the default newline setting:\n               CR, LF, CRLF, ANYCRLF, ANY, or NUL\n               exit code is always 0\n  bsr        the default setting for what \\eR matches:\n               ANYCRLF or ANY\n               exit code is always 0\n.sp\nThe following options output 1 for true or 0 for false, and set the exit code\nto the same value:\n.sp\n  backslash-C  \\eC is supported (not locked out)\n  ebcdic       compiled for an EBCDIC environment\n  ebcdic-io    if PCRE2 is compiled for EBCDIC, whether pcre2test's input and\n                 output is EBCDIC or ASCII\n  ebcdic-nl25  if PCRE2 is compiled for EBCDIC, whether NL (= LF) is 0x25\n                 (otherwise it is 0x15, the default)\n  jit          just-in-time support is available\n  pcre2-16     the 16-bit library was built\n  pcre2-32     the 32-bit library was built\n  pcre2-8      the 8-bit library was built\n  unicode      Unicode support is available\n.sp\nNote that the availability of JIT support in the library does not guarantee\nthat it can actually be used because in some environments it is unable to\nallocate executable memory. The option \"jitusable\" gives more detailed\ninformation. It returns one of the following values:\n.sp\n  0  JIT is available and usable\n  1  JIT is available but cannot allocate executable memory\n  2  JIT is not available\n  3  Unexpected return from test call to \\fBpcre2_jit_compile()\\fP\n.sp\nIf an unknown option is given, an error message is output; the exit code is 0.\n.TP 10\n\\fB--colo[u]r[=<always,auto,never>]\\fP\nBy default, the output is coloured if the output file is a terminal (\\fBauto\\fP).\nForce or suppress output of ANSI colour escapes with \\fBalways\\fP and \\fBnever\\fP\nrespectively.\n.TP 10\n\\fB-d\\fP\nBehave as if each pattern has the \\fBdebug\\fP modifier; the internal\nform and information about the compiled pattern is output after compilation;\n\\fB-d\\fP is equivalent to \\fB-b -i\\fP.\n.TP 10\n\\fB-dfa\\fP\nBehave as if each subject line has the \\fBdfa\\fP modifier; matching is done\nusing the \\fBpcre2_dfa_match()\\fP function instead of the default\n\\fBpcre2_match()\\fP.\n.TP 10\n\\fB-E\\fP\nRun in \"preprocess only\" mode (similar to \"gcc -E\"). The \"#if ... #endif\"\ncommands are processed, and all other lines are printed verbatim.\n.TP 10\n\\fB-error\\fP \\fInumber[,number,...]\\fP\nCall \\fBpcre2_get_error_message()\\fP for each of the error numbers in the\ncomma-separated list, display the resulting messages on the standard output,\nthen exit with zero exit code. The numbers may be positive or negative. This is\na convenience facility for PCRE2 maintainers.\n.TP 10\n\\fB-help\\fP\nOutput a brief summary these options and then exit.\n.TP 10\n\\fB-i\\fP\nBehave as if each pattern has the \\fBinfo\\fP modifier; information about the\ncompiled pattern is given after compilation.\n.TP 10\n\\fB-jit\\fP\nBehave as if each pattern line has the \\fBjit\\fP modifier; after successful\ncompilation, each pattern is passed to the just-in-time compiler, if available.\n.TP 10\n\\fB-jitfast\\fP\nBehave as if each pattern line has the \\fBjitfast\\fP modifier; after\nsuccessful compilation, each pattern is passed to the just-in-time compiler, if\navailable, and each subject line is passed directly to the JIT matcher via its\n\"fast path\".\n.TP 10\n\\fB-jitverify\\fP\nBehave as if each pattern line has the \\fBjitverify\\fP modifier; after\nsuccessful compilation, each pattern is passed to the just-in-time compiler, if\navailable, and the use of JIT for matching is verified.\n.TP 10\n\\fB-LM\\fP\nList modifiers: write a list of available pattern and subject modifiers to the\nstandard output, then exit with zero exit code. All other options are ignored.\nIf both -C and any -Lx options are present, whichever is first is recognized.\n.TP 10\n\\fB-LP\\fP\nList properties: write a list of recognized Unicode properties to the standard\noutput, then exit with zero exit code. All other options are ignored. If both\n-C and any -Lx options are present, whichever is first is recognized.\n.TP 10\n\\fB-LS\\fP\nList scripts: write a list of recognized Unicode script names to the standard\noutput, then exit with zero exit code. All other options are ignored. If both\n-C and any -Lx options are present, whichever is first is recognized.\n.TP 10\n\\fB-malloc\\fP\nExercise malloc() failures, by first counting the number of calls made to malloc\nduring pattern compilation and matching, then re-running the compilation and\nmatching that many times, exercising a failure of each malloc() call.\n.TP 10\n\\fB-pattern\\fP \\fImodifier-list\\fP\nBehave as if each pattern line contains the given modifiers.\n.TP 10\n\\fB-q\\fP\nDo not output the version number of \\fBpcre2test\\fP at the start of execution.\n.TP 10\n\\fB-S\\fP \\fIsize\\fP\nOn Unix-like systems, set the size of the run-time stack to \\fIsize\\fP\nmebibytes (units of 1024*1024 bytes).\n.TP 10\n\\fB-subject\\fP \\fImodifier-list\\fP\nBehave as if each subject line contains the given modifiers.\n.TP 10\n\\fB-t\\fP\nRun each compile and match many times with a timer, and output the resulting\ntimes per compile or match. When JIT is used, separate times are given for the\ninitial compile and the JIT compile. You can control the number of iterations\nthat are used for timing by following \\fB-t\\fP with a number (as a separate\nitem on the command line). For example, \"-t 1000\" iterates 1000 times. The\ndefault is to iterate 500,000 times.\n.TP 10\n\\fB-tm\\fP\nThis is like \\fB-t\\fP except that it times only the matching phase, not the\ncompile phase.\n.TP 10\n\\fB-T\\fP \\fB-TM\\fP\nThese behave like \\fB-t\\fP and \\fB-tm\\fP, but in addition, at the end of a run,\nthe total times for all compiles and matches are output.\n.TP 10\n\\fB-unittest\\fP\nRun a fixed set of additional tests of the PCRE2 API which are not driven by\nthe test input files, and then exit.\n.TP 10\n\\fB-version\\fP\nOutput the PCRE2 version number and then exit.\n.\n.\n.SH \"DESCRIPTION\"\n.rs\n.sp\nIf \\fBpcre2test\\fP is given two filename arguments, it reads from the first and\nwrites to the second. If the first name is \"-\", input is taken from the\nstandard input. If \\fBpcre2test\\fP is given only one argument, it reads from\nthat file and writes to stdout. Otherwise, it reads from stdin and writes to\nstdout.\n.P\nWhen \\fBpcre2test\\fP is built, a configuration option can specify that it\nshould be linked with the \\fBlibreadline\\fP or \\fBlibedit\\fP library. When this\nis done, if the input is from a terminal, it is read using the \\fBreadline()\\fP\nfunction. This provides line-editing and history facilities. The output from\nthe \\fB-help\\fP option states whether or not \\fBreadline()\\fP will be used.\n.P\nThe program handles any number of tests, each of which consists of a set of\ninput lines. Each set starts with a regular expression pattern, followed by any\nnumber of subject lines to be matched against that pattern. In between sets of\ntest data, command lines that begin with # may appear. This file format, with\nsome restrictions, can also be processed by the \\fBperltest.sh\\fP script that\nis distributed with PCRE2 as a means of checking that the behaviour of PCRE2\nand Perl is the same. For a specification of \\fBperltest.sh\\fP, see the\ncomments near its beginning. See also the #perltest command below.\n.P\nWhen the input is a terminal, \\fBpcre2test\\fP prompts for each line of input,\nusing \"re>\" to prompt for regular expression patterns, and \"data>\" to prompt\nfor subject lines. Command lines starting with # can be entered only in\nresponse to the \"re>\" prompt.\n.P\nEach subject line is matched separately and independently. If you want to do\nmulti-line matches, you have to use the \\en escape sequence (or \\er or \\er\\en,\netc., depending on the newline setting) in a single line of input to encode the\nnewline sequences. There is no limit on the length of subject lines; the input\nbuffer is automatically extended if it is too small. There are replication\nfeatures that makes it possible to generate long repetitive pattern or subject\nlines without having to supply them explicitly.\n.P\nAn empty line or the end of the file signals the end of the subject lines for a\ntest, at which point a new pattern or command line is expected if there is\nstill input to be read.\n.\n.\n.SH \"COMMAND LINES\"\n.rs\n.sp\nIn between sets of test data, a line that begins with # is interpreted as a\ncommand line. If the first character is followed by white space or an\nexclamation mark, the line is treated as a comment, and ignored. Otherwise, the\nfollowing commands are recognized:\n.sp\n  #forbid_utf\n.sp\nSubsequent patterns automatically have the PCRE2_NEVER_UTF and PCRE2_NEVER_UCP\noptions set, which locks out the use of the PCRE2_UTF and PCRE2_UCP options and\nthe use of (*UTF) and (*UCP) at the start of patterns. This command also forces\nan error if a subsequent pattern contains any occurrences of \\eP, \\ep, or \\eX,\nwhich are still supported when PCRE2_UTF is not set, but which require Unicode\nproperty support to be included in the library.\n.P\nThis is a trigger guard that is used in test files to ensure that UTF or\nUnicode property tests are not accidentally added to files that are used when\nUnicode support is not included in the library. Setting PCRE2_NEVER_UTF and\nPCRE2_NEVER_UCP as a default can also be obtained by the use of \\fB#pattern\\fP;\nthe difference is that \\fB#forbid_utf\\fP cannot be unset, and the automatic\noptions are not displayed in pattern information, to avoid cluttering up test\noutput.\n.sp\n  #load <filename>\n.sp\nThis command is used to load a set of precompiled patterns from a file, as\ndescribed in the section entitled \"Saving and restoring compiled patterns\"\n.\\\" HTML <a href=\"#saverestore\">\n.\\\" </a>\nbelow.\n.\\\"\n.sp\n  #loadtables <filename>\n.sp\nThis command is used to load a set of binary character tables that can be\naccessed by the tables=3 qualifier. Such tables can be created by the\n\\fBpcre2_dftables\\fP program with the -b option.\n.sp\n  #newline_default [<newline-list>]\n.sp\nWhen PCRE2 is built, a default newline convention can be specified. This\ndetermines which characters and/or character pairs are recognized as indicating\na newline in a pattern or subject string. The default can be overridden when a\npattern is compiled. The standard test files contain tests of various newline\nconventions, but the majority of the tests expect a single linefeed to be\nrecognized as a newline by default. Without special action the tests would fail\nwhen PCRE2 is compiled with either CR or CRLF as the default newline.\n.P\nThe #newline_default command specifies a list of newline types that are\nacceptable as the default. The types must be one of CR, LF, CRLF, ANYCRLF,\nANY, or NUL (in upper or lower case), for example:\n.sp\n  #newline_default LF Any anyCRLF\n.sp\nIf the default newline is in the list, this command has no effect. Otherwise,\nexcept when testing the POSIX API, a \\fBnewline\\fP modifier that specifies the\nfirst newline convention in the list (LF in the above example) is added to any\npattern that does not already have a \\fBnewline\\fP modifier. If the newline\nlist is empty, the feature is turned off. This command is present in a number\nof the standard test input files.\n.P\nWhen the POSIX API is being tested there is no way to override the default\nnewline convention, though it is possible to set the newline convention from\nwithin the pattern. A warning is given if the \\fBposix\\fP or \\fBposix_nosub\\fP\nmodifier is used when \\fB#newline_default\\fP would set a default for the\nnon-POSIX API.\n.sp\n  #pattern <modifier-list>\n.sp\nThis command sets a default modifier list that applies to all subsequent\npatterns. Modifiers on a pattern can change these settings.\n.sp\n  #perltest\n.sp\nThis line is used in test files that can also be processed by \\fBperltest.sh\\fP\nto confirm that Perl gives the same results as PCRE2. Subsequent tests are\nchecked for the use of \\fBpcre2test\\fP features that are incompatible with the\n\\fBperltest.sh\\fP script.\n.P\nPatterns must use '/' as their delimiter, and only certain modifiers are\nsupported. Comment lines, #pattern commands, and #subject commands that set or\nunset \"mark\" are recognized and acted on. The #perltest, #forbid_utf, and\n#newline_default commands, which are needed in the relevant pcre2test files,\nare silently ignored. All other command lines are ignored, but give a warning\nmessage. The \\fB#perltest\\fP command helps detect tests that are accidentally\nput in the wrong file or use the wrong delimiter. For more details of the\n\\fBperltest.sh\\fP script see the comments it contains.\n.sp\n  #pop [<modifiers>]\n  #popcopy [<modifiers>]\n.sp\nThese commands are used to manipulate the stack of compiled patterns, as\ndescribed in the section entitled \"Saving and restoring compiled patterns\"\n.\\\" HTML <a href=\"#saverestore\">\n.\\\" </a>\nbelow.\n.\\\"\n.sp\n  #save <filename>\n.sp\nThis command is used to save a set of compiled patterns to a file, as described\nin the section entitled \"Saving and restoring compiled patterns\"\n.\\\" HTML <a href=\"#saverestore\">\n.\\\" </a>\nbelow.\n.\\\"\n.sp\n  #subject <modifier-list>\n.sp\nThis command sets a default modifier list that applies to all subsequent\nsubject lines. Modifiers on a subject line can change these settings.\n.sp\n  #if CONDITION\n  ...\n  #endif\n.sp\nIf CONDITION is true, then the command is printed, and its contents are\nprocessed as normal, including printing the commandlines to the output. If\nCONDITION is false, then all lines between the \"#if\" and \"#endif\" are skipped\nand not printed. The CONDITION can be any of the conditions which are tested by\nthe \"-C\" commandline option and which set pcre2test's exit code to a boolean\nvalue. The CONDITION may also be preceded by \"!\".\n.\n.\n.SH \"MODIFIER SYNTAX\"\n.rs\n.sp\nModifier lists are used with both pattern and subject lines. Items in a list\nare separated by commas followed by optional white space. Trailing white space\nin a modifier list is ignored. Some modifiers may be given for both patterns\nand subject lines, whereas others are valid only for one or the other. Each\nmodifier has a long name, for example \"anchored\", and some of them must be\nfollowed by an equals sign and a value, for example, \"offset=12\". Values cannot\ncontain comma characters, but may contain spaces. Modifiers that do not take\nvalues may be preceded by a minus sign to turn off a previous setting.\n.P\nA few of the more common modifiers can also be specified as single letters, for\nexample \"i\" for \"caseless\". In documentation, following the Perl convention,\nthese are written with a slash (\"the /i modifier\") for clarity. Abbreviated\nmodifiers must all be concatenated in the first item of a modifier list. If the\nfirst item is not recognized as a long modifier name, it is interpreted as a\nsequence of these abbreviations. For example:\n.sp\n  /abc/ig,newline=cr,jit=3\n.sp\nThis is a pattern line whose modifier list starts with two one-letter modifiers\n(/i and /g). The lower-case abbreviated modifiers are the same as used in Perl.\n.\n.\n.SH \"PATTERN SYNTAX\"\n.rs\n.sp\nA pattern line must start with one of the following characters (common symbols,\nexcluding pattern meta-characters):\n.sp\n  / ! \" ' ` - = _ : ; , % & @ ~\n.sp\nThis is interpreted as the pattern's delimiter. A regular expression may be\ncontinued over several input lines, in which case the newline characters are\nincluded within it. It is possible to include the delimiter as a literal within\nthe pattern by escaping it with a backslash, for example\n.sp\n  /abc\\e/def/\n.sp\nIf you do this, the escape and the delimiter form part of the pattern, but\nsince the delimiters are all non-alphanumeric, the inclusion of the backslash\ndoes not affect the pattern's interpretation. Note, however, that this trick\ndoes not work within \\eQ...\\eE literal bracketing because the backslash will\nitself be interpreted as a literal. If the terminating delimiter is immediately\nfollowed by a backslash, for example,\n.sp\n  /abc/\\e\n.sp\na backslash is added to the end of the pattern. This is done to provide a way\nof testing the error condition that arises if a pattern finishes with a\nbackslash, because\n.sp\n  /abc\\e/\n.sp\nis interpreted as the first line of a pattern that starts with \"abc/\", causing\npcre2test to read the next line as a continuation of the regular expression.\n.P\nA pattern can be followed by a modifier list (details below).\n.\n.\n.SH \"SUBJECT LINE SYNTAX\"\n.rs\n.sp\nBefore each subject line is passed to \\fBpcre2_match()\\fP,\n\\fBpcre2_dfa_match()\\fP, or \\fBpcre2_jit_match()\\fP, leading and trailing white\nspace is removed, and the line is scanned for backslash escapes, unless the\n\\fBsubject_literal\\fP modifier was set for the pattern. The following provide a\nmeans of encoding non-printing characters in a visible way:\n.sp\n  \\ea          alarm (BEL, \\ex07)\n  \\eb          backspace (\\ex08)\n  \\ee          escape (\\ex27)\n  \\ef          form feed (\\ex0c)\n  \\en          newline (\\ex0a)\n  \\eN{U+hh...} unicode character (any number of hex digits)\n  \\er          carriage return (\\ex0d)\n  \\et          tab (\\ex09)\n  \\ev          vertical tab (\\ex0b)\n  \\eddd        octal number (up to 3 octal digits); represent a single\n                code point unless larger than 255 with the 8-bit library\n  \\eo{dd...}   octal number (any number of octal digits} representing a\n                character in UTF mode or a code point\n  \\exhh        hexadecimal byte (up to 2 hex digits)\n  \\ex{hh...}   hexadecimal number (up to 8 hex digits) representing a\n                character in UTF mode or a code point\n.sp\nInvoking \\eN{U+hh...} or \\ex{hh...} doesn't require the use of the \\fButf\\fP\nmodifier on the pattern. It is always recognized. There may be any number of\nhexadecimal digits inside the braces; invalid values provoke error messages\nbut when using \\eN{U+hh...} with some invalid unicode characters they will\nbe accepted with a warning instead.\n.P\nNote that even in UTF-8 mode, \\exhh (and depending of how large, \\eddd)\ndescribe one byte rather than one character; this makes it possible to\nconstruct invalid UTF-8 sequences for testing purposes. On the other hand,\n\\ex{hh...} is interpreted as a UTF-8 character in UTF-8 mode, only generating\nmore than one byte if the value is greater than 127. To avoid the ambiguity\nit is preferred to use \\eN{U+hh...} when describing characters. When testing\nthe 8-bit library not in UTF-8 mode, \\ex{hh} generates one byte for values\nthat could fit on it, and causes an error for greater values.\n.P\nWhen testing the 16-bit library, not in UTF-16 mode, all 4-digit \\ex{hhhh}\nvalues are accepted. This makes it possible to construct invalid UTF-16\nsequences for testing purposes.\n.P\nWhen testing the 32-bit library, not in UTF-32 mode, all 4 to 8-digit \\ex{...}\nvalues are accepted. This makes it possible to construct invalid UTF-32\nsequences for testing purposes.\n.P\nThere is a special backslash sequence that specifies replication of one or more\ncharacters:\n.sp\n  \\e[<characters>]{<count>}\n.sp\nThis makes it possible to test long strings without having to provide them as\npart of the file. For example:\n.sp\n  \\e[abc]{4}\n.sp\nis converted to \"abcabcabcabc\". This feature does not support nesting. To\ninclude a closing square bracket in the characters, code it as \\ex5D.\n.P\nA backslash followed by an equals sign marks the end of the subject string and\nthe start of a modifier list. For example:\n.sp\n  abc\\e=notbol,notempty\n.sp\nIf the subject string is empty and \\e= is followed by white space, the line is\ntreated as a comment line, and is not used for matching. For example:\n.sp\n  \\e= This is a comment.\n  abc\\e= This is an invalid modifier list.\n.sp\nA backslash followed by any other non-alphanumeric character just escapes that\ncharacter. A backslash followed by anything else causes an error. However, if\nthe very last character in the line is a backslash (and there is no modifier\nlist), it is ignored. This gives a way of passing an empty line as data, since\na real empty line terminates the data input.\n.P\nIf the \\fBsubject_literal\\fP modifier is set for a pattern, all subject lines\nthat follow are treated as literals, with no special treatment of backslashes.\nNo replication is possible, and any subject modifiers must be set as defaults\nby a \\fB#subject\\fP command.\n.\n.\n.SH \"PATTERN MODIFIERS\"\n.rs\n.sp\nThere are several types of modifier that can appear in pattern lines. Except\nwhere noted below, they may also be used in \\fB#pattern\\fP commands. A\npattern's modifier list can add to or override default modifiers that were set\nby a previous \\fB#pattern\\fP command.\n.\n.\n.\\\" HTML <a name=\"optionmodifiers\"></a>\n.SS \"Setting compilation options\"\n.rs\n.sp\nThe following modifiers set options for \\fBpcre2_compile()\\fP. Most of them set\nbits in the options argument of that function, but those whose names start with\nPCRE2_EXTRA are additional options that are set in the compile context.\nSome of these options have single-letter abbreviations. There is special\nhandling for /x: if a second x is present, PCRE2_EXTENDED is converted into\nPCRE2_EXTENDED_MORE as in Perl. A third appearance adds PCRE2_EXTENDED as well,\nthough this makes no difference to the way \\fBpcre2_compile()\\fP behaves. See\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\nfor a description of the effects of these options.\n.sp\n      allow_empty_class         set PCRE2_ALLOW_EMPTY_CLASS\n      allow_lookaround_bsk      set PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK\n      allow_surrogate_escapes   set PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES\n      alt_bsux                  set PCRE2_ALT_BSUX\n      alt_circumflex            set PCRE2_ALT_CIRCUMFLEX\n      alt_extended_class        set PCRE2_ALT_EXTENDED_CLASS\n      alt_verbnames             set PCRE2_ALT_VERBNAMES\n      anchored                  set PCRE2_ANCHORED\n  /a  ascii_all                 set all ASCII options\n      ascii_bsd                 set PCRE2_EXTRA_ASCII_BSD\n      ascii_bss                 set PCRE2_EXTRA_ASCII_BSS\n      ascii_bsw                 set PCRE2_EXTRA_ASCII_BSW\n      ascii_digit               set PCRE2_EXTRA_ASCII_DIGIT\n      ascii_posix               set PCRE2_EXTRA_ASCII_POSIX\n      auto_callout              set PCRE2_AUTO_CALLOUT\n      bad_escape_is_literal     set PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL\n  /i  caseless                  set PCRE2_CASELESS\n  /r  caseless_restrict         set PCRE2_EXTRA_CASELESS_RESTRICT\n      dollar_endonly            set PCRE2_DOLLAR_ENDONLY\n  /s  dotall                    set PCRE2_DOTALL\n      dupnames                  set PCRE2_DUPNAMES\n      endanchored               set PCRE2_ENDANCHORED\n      escaped_cr_is_lf          set PCRE2_EXTRA_ESCAPED_CR_IS_LF\n  /x  extended                  set PCRE2_EXTENDED\n  /xx extended_more             set PCRE2_EXTENDED_MORE\n      extra_alt_bsux            set PCRE2_EXTRA_ALT_BSUX\n      firstline                 set PCRE2_FIRSTLINE\n      literal                   set PCRE2_LITERAL\n      match_line                set PCRE2_EXTRA_MATCH_LINE\n      match_invalid_utf         set PCRE2_MATCH_INVALID_UTF\n      match_unset_backref       set PCRE2_MATCH_UNSET_BACKREF\n      match_word                set PCRE2_EXTRA_MATCH_WORD\n  /m  multiline                 set PCRE2_MULTILINE\n      never_backslash_c         set PCRE2_NEVER_BACKSLASH_C\n      never_callout             set PCRE2_EXTRA_NEVER_CALLOUT\n      never_ucp                 set PCRE2_NEVER_UCP\n      never_utf                 set PCRE2_NEVER_UTF\n  /n  no_auto_capture           set PCRE2_NO_AUTO_CAPTURE\n      no_auto_possess           set PCRE2_NO_AUTO_POSSESS\n      no_bs0                    set PCRE2_EXTRA_NO_BS0\n      no_dotstar_anchor         set PCRE2_NO_DOTSTAR_ANCHOR\n      no_start_optimize         set PCRE2_NO_START_OPTIMIZE\n      no_utf_check              set PCRE2_NO_UTF_CHECK\n      python_octal              set PCRE2_EXTRA_PYTHON_OCTAL\n      turkish_casing            set PCRE2_EXTRA_TURKISH_CASING\n      ucp                       set PCRE2_UCP\n      ungreedy                  set PCRE2_UNGREEDY\n      use_offset_limit          set PCRE2_USE_OFFSET_LIMIT\n      utf                       set PCRE2_UTF\n.sp\nAs well as turning on the PCRE2_UTF option, the \\fButf\\fP modifier causes all\nnon-printing characters in output strings to be printed using the \\ex{hh...}\nnotation. Otherwise, those less than 0x100 are output in hex without the curly\nbrackets. Setting \\fButf\\fP in 16-bit or 32-bit mode also causes pattern and\nsubject strings to be translated to UTF-16 or UTF-32, respectively, before\nbeing passed to library functions.\n.sp\nThe following modifiers enable or disable performance optimizations by\ncalling \\fBpcre2_set_optimize()\\fP before invoking the regex compiler.\n.sp\n      optimization_full      enable all optional optimizations\n      optimization_none      disable all optional optimizations\n      auto_possess           auto-possessify variable quantifiers\n      auto_possess_off       don't auto-possessify variable quantifiers\n      dotstar_anchor         anchor patterns starting with .*\n      dotstar_anchor_off     don't anchor patterns starting with .*\n      start_optimize         enable pre-scan of subject string\n      start_optimize_off     disable pre-scan of subject string\n.sp\nSee the\n.\\\" HREF\n\\fBpcre2_set_optimize\\fP\n.\\\"\ndocumentation for details on these optimizations.\n.\n.\n.\\\" HTML <a name=\"controlmodifiers\"></a>\n.SS \"Setting compilation controls\"\n.rs\n.sp\nThe following modifiers affect the compilation process or request information\nabout the pattern. There are single-letter abbreviations for some that are\nheavily used in the test files.\n.sp\n  /B  bincode                   show binary code without lengths\n      bsr=[anycrlf|unicode]     specify \\eR handling\n      callout_info              show callout information\n      convert=<options>         request foreign pattern conversion\n      convert_glob_escape=c     set glob escape character\n      convert_glob_separator=c  set glob separator character\n      convert_length            set convert buffer length\n      debug                     same as info,fullbincode\n      expand                    expand repetition syntax in pattern\n      framesize                 show matching frame size\n      fullbincode               show binary code with lengths\n  /I  info                      show info about compiled pattern\n      hex                       unquoted characters are hexadecimal\n      jit[=<number>]            use JIT\n      jitfast                   use JIT fast path\n      jitverify                 verify JIT use\n      locale=<name>             use this locale\n      max_pattern_compiled      ) set maximum compiled pattern\n                 _length=<n>    )   length (bytes)\n      max_pattern_length=<n>    set maximum pattern length (code units)\n      max_varlookbehind=<n>     set maximum variable lookbehind length\n      memory                    show memory used\n      newline=<type>            set newline type\n      null_context              compile with a NULL context\n      null_pattern              pass pattern as NULL\n      parens_nest_limit=<n>     set maximum parentheses depth\n      posix                     use the POSIX API\n      posix_nosub               use the POSIX API with REG_NOSUB\n      push                      push compiled pattern onto the stack\n      pushcopy                  push a copy onto the stack\n      pushtablescopy            push a copy with tables onto the stack\n      stackguard=<number>       test the stackguard feature\n      subject_literal           treat all subject lines as literal\n      tables=[0|1|2|3]          select internal tables\n      use_length                do not zero-terminate the pattern\n      utf8_input                treat input as UTF-8\n.sp\nThe effects of these modifiers are described in the following sections.\n.\n.\n.SS \"Newline and \\eR handling\"\n.rs\n.sp\nThe \\fBbsr\\fP modifier specifies what \\eR in a pattern should match. If it is\nset to \"anycrlf\", \\eR matches CR, LF, or CRLF only. If it is set to \"unicode\",\n\\eR matches any Unicode newline sequence. The default can be specified when\nPCRE2 is built; if it is not, the default is set to Unicode.\n.P\nThe \\fBnewline\\fP modifier specifies which characters are to be interpreted as\nnewlines, both in the pattern and in subject lines. The type must be one of CR,\nLF, CRLF, ANYCRLF, ANY, or NUL (in upper or lower case).\n.\n.\n.SS \"Information about a pattern\"\n.rs\n.sp\nThe \\fBdebug\\fP modifier is a shorthand for \\fBinfo,fullbincode\\fP, requesting\nall available information.\n.P\nThe \\fBbincode\\fP modifier causes a representation of the compiled code to be\noutput after compilation. This information does not contain length and offset\nvalues, which ensures that the same output is generated for different internal\nlink sizes and different code unit widths. By using \\fBbincode\\fP, the same\nregression tests can be used in different environments.\n.P\nThe \\fBfullbincode\\fP modifier, by contrast, \\fIdoes\\fP include length and\noffset values. This is used in a few special tests that run only for specific\ncode unit widths and link sizes, and is also useful for one-off tests.\n.P\nThe \\fBinfo\\fP modifier requests information about the compiled pattern\n(whether it is anchored, has a fixed first character, and so on). The\ninformation is obtained from the \\fBpcre2_pattern_info()\\fP function. Here are\nsome typical examples:\n.sp\n    re> /(?i)(^a|^b)/m,info\n  Capture group count = 1\n  Compile options: multiline\n  Overall options: caseless multiline\n  First code unit at start or follows newline\n  Subject length lower bound = 1\n.sp\n    re> /(?i)abc/info\n  Capture group count = 0\n  Compile options: <none>\n  Overall options: caseless\n  First code unit = 'a' (caseless)\n  Last code unit = 'c' (caseless)\n  Subject length lower bound = 3\n.sp\n\"Compile options\" are those specified by modifiers; \"overall options\" have\nadded options that are taken or deduced from the pattern. If both sets of\noptions are the same, just a single \"options\" line is output; if there are no\noptions, the line is omitted. \"First code unit\" is where any match must start;\nif there is more than one they are listed as \"starting code units\". \"Last code\nunit\" is the last literal code unit that must be present in any match. This is\nnot necessarily the last character. These lines are omitted if no starting or\nending code units are recorded. The subject length line is omitted when\n\\fBno_start_optimize\\fP is set because the minimum length is not calculated\nwhen it can never be used.\n.P\nThe \\fBframesize\\fP modifier shows the size, in bytes, of each storage frame\nused by \\fBpcre2_match()\\fP for handling backtracking. The size depends on the\nnumber of capturing parentheses in the pattern. A vector of these frames is\nused at matching time; its overall size is shown when the \\fBheaframes_size\\fP\nsubject modifier is set.\n.P\nThe \\fBcallout_info\\fP modifier requests information about all the callouts in\nthe pattern. A list of them is output at the end of any other information that\nis requested. For each callout, either its number or string is given, followed\nby the item that follows it in the pattern.\n.\n.\n.SS \"Passing a NULL context\"\n.rs\n.sp\nNormally, \\fBpcre2test\\fP passes a context block to \\fBpcre2_compile()\\fP. If\nthe \\fBnull_context\\fP modifier is set, however, NULL is passed. This is for\ntesting that \\fBpcre2_compile()\\fP behaves correctly in this case (it uses\ndefault values).\n.\n.\n.SS \"Passing a NULL pattern\"\n.rs\n.sp\nThe \\fBnull_pattern\\fP modifier is for testing the behaviour of\n\\fBpcre2_compile()\\fP when the pattern argument is NULL. The length value\npassed is the default PCRE2_ZERO_TERMINATED unless \\fBuse_length\\fP is set.\nAny length other than zero causes an error.\n.\n.\n.SS \"Specifying pattern characters in hexadecimal\"\n.rs\n.sp\nThe \\fBhex\\fP modifier specifies that the characters of the pattern, except for\nsubstrings enclosed in single or double quotes, are to be interpreted as pairs\nof hexadecimal digits. This feature is provided as a way of creating patterns\nthat contain binary zeros and other non-printing characters. White space is\npermitted between pairs of digits. For example, this pattern contains three\ncharacters:\n.sp\n  /ab 32 59/hex\n.sp\nParts of such a pattern are taken literally if quoted. This pattern contains\nnine characters, only two of which are specified in hexadecimal:\n.sp\n  /ab \"literal\" 32/hex\n.sp\nEither single or double quotes may be used. There is no way of including\nthe delimiter within a substring. The \\fBhex\\fP and \\fBexpand\\fP modifiers are\nmutually exclusive.\n.\n.\n.SS \"Specifying the pattern's length\"\n.rs\n.sp\nBy default, patterns are passed to the compiling functions as zero-terminated\nstrings but can be passed by length instead of being zero-terminated. The\n\\fBuse_length\\fP modifier causes this to happen. Using a length happens\nautomatically (whether or not \\fBuse_length\\fP is set) when \\fBhex\\fP is set,\nbecause patterns specified in hexadecimal may contain binary zeros.\n.P\nIf \\fBhex\\fP or \\fBuse_length\\fP is used with the POSIX wrapper API (see\n.\\\" HTML <a href=\"#posixwrapper\">\n.\\\" </a>\n\"Using the POSIX wrapper API\"\n.\\\"\nbelow), the REG_PEND extension is used to pass the pattern's length.\n.\n.\n.SS \"Specifying a maximum for variable lookbehinds\"\n.rs\n.sp\nVariable lookbehind assertions are supported only if, for each one, there is a\nmaximum length (in characters) that it can match. There is a limit on this,\nwhose default can be set at build time, with an ultimate default of 255. The\n\\fBmax_varlookbehind\\fP modifier uses the \\fBpcre2_set_max_varlookbehind()\\fP\nfunction to change the limit. Lookbehinds whose branches each match a fixed\nlength are limited to 65535 characters per branch.\n.\n.\n.SS \"Specifying wide characters in 16-bit and 32-bit modes\"\n.rs\n.sp\nIn 16-bit and 32-bit modes, all input is automatically treated as UTF-8 and\ntranslated to UTF-16 or UTF-32 when the \\fButf\\fP modifier is set. For testing\nthe 16-bit and 32-bit libraries in non-UTF mode, the \\fButf8_input\\fP modifier\ncan be used. It is mutually exclusive with \\fButf\\fP. Input lines are\ninterpreted as UTF-8 as a means of specifying wide characters. More details are\ngiven in\n.\\\" HTML <a href=\"#inputencoding\">\n.\\\" </a>\n\"Input encoding\"\n.\\\"\nabove.\n.\n.\n.SS \"Generating long repetitive patterns\"\n.rs\n.sp\nSome tests use long patterns that are very repetitive. Instead of creating a\nvery long input line for such a pattern, you can use a special repetition\nfeature, similar to the one described for subject lines above. If the\n\\fBexpand\\fP modifier is present on a pattern, parts of the pattern that have\nthe form\n.sp\n  \\e[<characters>]{<count>}\n.sp\nare expanded before the pattern is passed to \\fBpcre2_compile()\\fP. For\nexample, \\e[AB]{6000} is expanded to \"ABAB...\" 6000 times. This construction\ncannot be nested. An initial \"\\e[\" sequence is recognized only if \"]{\" followed\nby decimal digits and \"}\" is found later in the pattern. If not, the characters\nremain in the pattern unaltered. The \\fBexpand\\fP and \\fBhex\\fP modifiers are\nmutually exclusive.\n.P\nIf part of an expanded pattern looks like an expansion, but is really part of\nthe actual pattern, unwanted expansion can be avoided by giving two values in\nthe quantifier. For example, \\e[AB]{6000,6000} is not recognized as an\nexpansion item.\n.P\nIf the \\fBinfo\\fP modifier is set on an expanded pattern, the result of the\nexpansion is included in the information that is output.\n.\n.\n.SS \"JIT compilation\"\n.rs\n.sp\nJust-in-time (JIT) compiling is a heavyweight optimization that can greatly\nspeed up pattern matching. See the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\ndocumentation for details. JIT compiling happens, optionally, after a pattern\nhas been successfully compiled into an internal form. The JIT compiler converts\nthis to optimized machine code. It needs to know whether the match-time options\nPCRE2_PARTIAL_HARD and PCRE2_PARTIAL_SOFT are going to be used, because\ndifferent code is generated for the different cases. See the \\fBpartial\\fP\nmodifier in \"Subject Modifiers\"\n.\\\" HTML <a href=\"#subjectmodifiers\">\n.\\\" </a>\nbelow\n.\\\"\nfor details of how these options are specified for each match attempt.\n.P\nJIT compilation is requested by the \\fBjit\\fP pattern modifier, which may\noptionally be followed by an equals sign and a number in the range 0 to 7.\nThe three bits that make up the number specify which of the three JIT operating\nmodes are to be compiled:\n.sp\n  1  compile JIT code for non-partial matching\n  2  compile JIT code for soft partial matching\n  4  compile JIT code for hard partial matching\n.sp\nThe possible values for the \\fBjit\\fP modifier are therefore:\n.sp\n  0  disable JIT\n  1  normal matching only\n  2  soft partial matching only\n  3  normal and soft partial matching\n  4  hard partial matching only\n  6  soft and hard partial matching only\n  7  all three modes\n.sp\nIf no number is given, 7 is assumed. The phrase \"partial matching\" means a call\nto \\fBpcre2_match()\\fP with either the PCRE2_PARTIAL_SOFT or the\nPCRE2_PARTIAL_HARD option set. Note that such a call may return a complete\nmatch; the options enable the possibility of a partial match, but do not\nrequire it. Note also that if you request JIT compilation only for partial\nmatching (for example, jit=2) but do not set the \\fBpartial\\fP modifier on a\nsubject line, that match will not use JIT code because none was compiled for\nnon-partial matching.\n.P\nIf JIT compilation is successful, the compiled JIT code will automatically be\nused when an appropriate type of match is run, except when incompatible\nrun-time options are specified. For more details, see the\n.\\\" HREF\n\\fBpcre2jit\\fP\n.\\\"\ndocumentation. See also the \\fBjitstack\\fP modifier below for a way of\nsetting the size of the JIT stack.\n.P\nIf the \\fBjitfast\\fP modifier is specified, matching is done using the JIT\n\"fast path\" interface, \\fBpcre2_jit_match()\\fP, which skips some of the sanity\nchecks that are done by \\fBpcre2_match()\\fP, and of course does not work when\nJIT is not supported. If \\fBjitfast\\fP is specified without \\fBjit\\fP, jit=7 is\nassumed.\n.P\nIf the \\fBjitverify\\fP modifier is specified, information about the compiled\npattern shows whether JIT compilation was or was not successful. If\n\\fBjitverify\\fP is specified without \\fBjit\\fP, jit=7 is assumed. If JIT\ncompilation is successful when \\fBjitverify\\fP is set, the text \"(JIT)\" is\nadded to the first output line after a match or non match when JIT-compiled\ncode was actually used in the match.\n.\n.\n.SS \"Setting a locale\"\n.rs\n.sp\nThe \\fBlocale\\fP modifier must specify the name of a locale, for example:\n.sp\n  /pattern/locale=fr_FR\n.sp\nThe given locale is set, \\fBpcre2_maketables()\\fP is called to build a set of\ncharacter tables for the locale, and this is then passed to\n\\fBpcre2_compile()\\fP when compiling the regular expression. The same tables\nare used when matching the following subject lines. The \\fBlocale\\fP modifier\napplies only to the pattern on which it appears, but can be given in a\n\\fB#pattern\\fP command if a default is needed. Setting a locale and alternate\ncharacter tables are mutually exclusive.\n.\n.\n.SS \"Showing pattern memory\"\n.rs\n.sp\nThe \\fBmemory\\fP modifier causes the size in bytes of the memory used to hold\nthe compiled pattern to be output. This does not include the size of the\n\\fBpcre2_code\\fP block; it is just the actual compiled data. If the pattern is\nsubsequently passed to the JIT compiler, the size of the JIT compiled code is\nalso output. Here is an example:\n.sp\n    re> /a(b)c/jit,memory\n  Memory allocation (code space): 21\n  Memory allocation (JIT code): 1910\n.sp\n.\n.\n.SS \"Limiting nested parentheses\"\n.rs\n.sp\nThe \\fBparens_nest_limit\\fP modifier sets a limit on the depth of nested\nparentheses in a pattern. Breaching the limit causes a compilation error.\nThe default for the library is set when PCRE2 is built, but \\fBpcre2test\\fP\nsets its own default of 220, which is required for running the standard test\nsuite.\n.\n.\n.SS \"Limiting the pattern length\"\n.rs\n.sp\nThe \\fBmax_pattern_length\\fP modifier sets a limit, in code units, to the\nlength of pattern that \\fBpcre2_compile()\\fP will accept. Breaching the limit\ncauses a compilation error. The default is the largest number a PCRE2_SIZE\nvariable can hold (essentially unlimited).\n.\n.\n.SS \"Limiting the size of a compiled pattern\"\n.rs\n.sp\nThe \\fBmax_pattern_compiled_length\\fP modifier sets a limit, in bytes, to the\namount of memory used by a compiled pattern. Breaching the limit causes a\ncompilation error. The default is the largest number a PCRE2_SIZE variable can\nhold (essentially unlimited).\n.\n.\n.\\\" HTML <a name=\"posixwrapper\"></a>\n.SS \"Using the POSIX wrapper API\"\n.rs\n.sp\nThe \\fBposix\\fP and \\fBposix_nosub\\fP modifiers cause \\fBpcre2test\\fP to call\nPCRE2 via the POSIX wrapper API rather than its native API. When\n\\fBposix_nosub\\fP is used, the POSIX option REG_NOSUB is passed to\n\\fBregcomp()\\fP. The POSIX wrapper supports only the 8-bit library. Note that\nit does not imply POSIX matching semantics; for more detail see the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\ndocumentation. The following pattern modifiers set options for the\n\\fBregcomp()\\fP function:\n.sp\n  caseless           REG_ICASE\n  multiline          REG_NEWLINE\n  dotall             REG_DOTALL     )\n  ungreedy           REG_UNGREEDY   ) These options are not part of\n  ucp                REG_UCP        )   the POSIX standard\n  utf                REG_UTF8       )\n.sp\nThe \\fBregerror_buffsize\\fP modifier specifies a size for the error buffer that\nis passed to \\fBregerror()\\fP in the event of a compilation error. For example:\n.sp\n  /abc/posix,regerror_buffsize=20\n.sp\nThis provides a means of testing the behaviour of \\fBregerror()\\fP when the\nbuffer is too small for the error message. If this modifier has not been set, a\nlarge buffer is used.\n.P\nThe \\fBaftertext\\fP and \\fBallaftertext\\fP subject modifiers work as described\nbelow. All other modifiers are either ignored, with a warning message, or cause\nan error.\n.P\nThe pattern is passed to \\fBregcomp()\\fP as a zero-terminated string by\ndefault, but if the \\fBuse_length\\fP or \\fBhex\\fP modifiers are set, the\nREG_PEND extension is used to pass it by length.\n.\n.\n.SS \"Testing the stack guard feature\"\n.rs\n.sp\nThe \\fBstackguard\\fP modifier is used to test the use of\n\\fBpcre2_set_compile_recursion_guard()\\fP, a function that is provided to\nenable stack availability to be checked during compilation (see the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation for details). If the number specified by the modifier is greater\nthan zero, \\fBpcre2_set_compile_recursion_guard()\\fP is called to set up\ncallback from \\fBpcre2_compile()\\fP to a local function. The argument it\nreceives is the current nesting parenthesis depth; if this is greater than the\nvalue given by the modifier, non-zero is returned, causing the compilation to\nbe aborted.\n.\n.\n.SS \"Using alternative character tables\"\n.rs\n.sp\nThe value specified for the \\fBtables\\fP modifier must be one of the digits 0,\n1, 2, or 3. It causes a specific set of built-in character tables to be passed\nto \\fBpcre2_compile()\\fP. This is used in the PCRE2 tests to check behaviour\nwith different character tables. The digit specifies the tables as follows:\n.sp\n  0   do not pass any special character tables\n  1   the default ASCII tables, as distributed in\n        pcre2_chartables.c.dist\n  2   a set of tables defining ISO 8859 characters\n  3   a set of tables loaded by the #loadtables command\n.sp\nIn tables 2, some characters whose codes are greater than 128 are identified as\nletters, digits, spaces, etc. Tables 3 can be used only after a\n\\fB#loadtables\\fP command has loaded them from a binary file. Setting alternate\ncharacter tables and a locale are mutually exclusive.\n.\n.\n.SS \"Setting certain match controls\"\n.rs\n.sp\nThe following modifiers are really subject modifiers, and are described under\n\"Subject Modifiers\" below. However, they may be included in a pattern's\nmodifier list, in which case they are applied to every subject line that is\nprocessed with that pattern. These modifiers do not affect the compilation\nprocess.\n.sp\n      aftertext                   show text after match\n      allaftertext                show text after captures\n      allcaptures                 show all captures\n      allvector                   show the entire ovector\n      allusedtext                 show all consulted text\n      altglobal                   alternative global matching\n  /g  global                      global matching\n      heapframes_size             show match data heapframes size\n      jitstack=<n>                set size of JIT stack\n      mark                        show mark values\n      null_substitute_match_data  substitute with NULL match data\n      replace=<str>               specify a replacement string\n      startchar                   show starting character when relevant\n      substitute_callout          use substitution callouts\n      substitute_case_callout     use substitution case callouts\n      substitute_extended         use PCRE2_SUBSTITUTE_EXTENDED\n      substitute_literal          use PCRE2_SUBSTITUTE_LITERAL\n      substitute_matched          use PCRE2_SUBSTITUTE_MATCHED\n      substitute_overflow_length  use PCRE2_SUBSTITUTE_OVERFLOW_LENGTH\n      substitute_replacement_only use PCRE2_SUBSTITUTE_REPLACEMENT_ONLY\n      substitute_skip=<n>         skip substitution <n>\n      substitute_stop=<n>         skip substitution <n> and following\n      substitute_unknown_unset    use PCRE2_SUBSTITUTE_UNKNOWN_UNSET\n      substitute_unset_empty      use PCRE2_SUBSTITUTE_UNSET_EMPTY\n.sp\nThese modifiers may not appear in a \\fB#pattern\\fP command. If you want them as\ndefaults, set them in a \\fB#subject\\fP command.\n.\n.\n.SS \"Specifying literal subject lines\"\n.rs\n.sp\nIf the \\fBsubject_literal\\fP modifier is present on a pattern, all the subject\nlines that it matches are taken as literal strings, with no interpretation of\nbackslashes. It is not possible to set subject modifiers on such lines, but any\nthat are set as defaults by a \\fB#subject\\fP command are recognized.\n.\n.\n.SS \"Saving a compiled pattern\"\n.rs\n.sp\nWhen a pattern with the \\fBpush\\fP modifier is successfully compiled, it is\npushed onto a stack of compiled patterns, and \\fBpcre2test\\fP expects the next\nline to contain a new pattern (or a command) instead of a subject line. This\nfacility is used when saving compiled patterns to a file, as described in the\nsection entitled \"Saving and restoring compiled patterns\"\n.\\\" HTML <a href=\"#saverestore\">\n.\\\" </a>\nbelow.\n.\\\"\nIf \\fBpushcopy\\fP is used instead of \\fBpush\\fP, a copy of the compiled\npattern is stacked, leaving the original as current, ready to match the\nfollowing input lines. This provides a way of testing the\n\\fBpcre2_code_copy()\\fP function.\n.\\\"\nThe \\fBpush\\fP and \\fBpushcopy \\fP modifiers are incompatible with compilation\nmodifiers such as \\fBglobal\\fP that act at match time. Any that are specified\nare ignored (for the stacked copy), with a warning message, except for\n\\fBreplace\\fP, which causes an error. Note that \\fBjitverify\\fP, which is\nallowed, does not carry through to any subsequent matching that uses a stacked\npattern.\n.\n.\n.SS \"Testing foreign pattern conversion\"\n.rs\n.sp\nThe experimental foreign pattern conversion functions in PCRE2 can be tested by\nsetting the \\fBconvert\\fP modifier. Its argument is a colon-separated list of\noptions, which set the equivalent option for the \\fBpcre2_pattern_convert()\\fP\nfunction:\n.sp\n  glob                    PCRE2_CONVERT_GLOB\n  glob_no_starstar        PCRE2_CONVERT_GLOB_NO_STARSTAR\n  glob_no_wild_separator  PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR\n  posix_basic             PCRE2_CONVERT_POSIX_BASIC\n  posix_extended          PCRE2_CONVERT_POSIX_EXTENDED\n  unset                   Unset all options\n.sp\nThe \"unset\" value is useful for turning off a default that has been set by a\n\\fB#pattern\\fP command. When one of these options is set, the input pattern is\npassed to \\fBpcre2_pattern_convert()\\fP. If the conversion is successful, the\nresult is reflected in the output and then passed to \\fBpcre2_compile()\\fP. The\nnormal \\fButf\\fP and \\fBno_utf_check\\fP options, if set, cause the\nPCRE2_CONVERT_UTF and PCRE2_CONVERT_NO_UTF_CHECK options to be passed to\n\\fBpcre2_pattern_convert()\\fP.\n.P\nBy default, the conversion function is allowed to allocate a buffer for its\noutput. However, if the \\fBconvert_length\\fP modifier is set to a value greater\nthan zero, \\fBpcre2test\\fP passes a buffer of the given length. This makes it\npossible to test the length check.\n.P\nThe \\fBconvert_glob_escape\\fP and \\fBconvert_glob_separator\\fP modifiers can be\nused to specify the escape and separator characters for glob processing,\noverriding the defaults, which are operating-system dependent.\n.\n.\n.\\\" HTML <a name=\"subjectmodifiers\"></a>\n.SH \"SUBJECT MODIFIERS\"\n.rs\n.sp\nThe modifiers that can appear in subject lines and the \\fB#subject\\fP\ncommand are of two types.\n.\n.\n.SS \"Setting match options\"\n.rs\n.sp\nThe following modifiers set options for \\fBpcre2_match()\\fP or\n\\fBpcre2_dfa_match()\\fP. See\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\nfor a description of their effects.\n.sp\n      anchored                   set PCRE2_ANCHORED\n      copy_matched_subject       set PCRE2_COPY_MATCHED_SUBJECT\n      endanchored                set PCRE2_ENDANCHORED\n      dfa_restart                set PCRE2_DFA_RESTART\n      dfa_shortest               set PCRE2_DFA_SHORTEST\n      disable_recurseloop_check  set PCRE2_DISABLE_RECURSELOOP_CHECK\n      no_jit                     set PCRE2_NO_JIT\n      no_utf_check               set PCRE2_NO_UTF_CHECK\n      notbol                     set PCRE2_NOTBOL\n      notempty                   set PCRE2_NOTEMPTY\n      notempty_atstart           set PCRE2_NOTEMPTY_ATSTART\n      noteol                     set PCRE2_NOTEOL\n      partial_hard (or ph)       set PCRE2_PARTIAL_HARD\n      partial_soft (or ps)       set PCRE2_PARTIAL_SOFT\n.sp\nThe partial matching modifiers are provided with abbreviations because they\nappear frequently in tests.\n.P\nIf the \\fBposix\\fP or \\fBposix_nosub\\fP modifier was present on the pattern,\ncausing the POSIX wrapper API to be used, the only option-setting modifiers\nthat have any effect are \\fBnotbol\\fP, \\fBnotempty\\fP, and \\fBnoteol\\fP,\ncausing REG_NOTBOL, REG_NOTEMPTY, and REG_NOTEOL, respectively, to be passed to\n\\fBregexec()\\fP. The other modifiers are ignored, with a warning message.\n.P\nThere is one additional modifier that can be used with the POSIX wrapper. It is\nignored (with a warning) if used for non-POSIX matching.\n.sp\n      posix_startend=<n>[:<m>]\n.sp\nThis causes the subject string to be passed to \\fBregexec()\\fP using the\nREG_STARTEND option, which uses offsets to specify which part of the string is\nsearched. If only one number is given, the end offset is passed as the end of\nthe subject string. For more detail of REG_STARTEND, see the\n.\\\" HREF\n\\fBpcre2posix\\fP\n.\\\"\ndocumentation. If the subject string contains binary zeros (coded as escapes\nsuch as \\ex{00} because \\fBpcre2test\\fP does not support actual binary zeros in\nits input), you must use \\fBposix_startend\\fP to specify its length.\n.\n.\n.SS \"Setting match controls\"\n.rs\n.sp\nThe following modifiers affect the matching process or request additional\ninformation. Some of them may also be specified on a pattern line (see above),\nin which case they apply to every subject line that is matched against that\npattern, but can be overridden by modifiers on the subject.\n.sp\n      aftertext                  show text after match\n      allaftertext               show text after captures\n      allcaptures                show all captures\n      allusedtext                show all consulted text (non-JIT only)\n      allvector                  show the entire ovector\n      altglobal                  alternative global matching\n      callout_capture            show captures at callout time\n      callout_data=<n>           set a value to pass via callouts\n      callout_error=<n>[:<m>]    control callout error\n      callout_extra              show extra callout information\n      callout_fail=<n>[:<m>]     control callout failure\n      callout_no_where           do not show position of a callout\n      callout_none               do not supply a callout function\n      copy=<number or name>      copy captured substring\n      depth_limit=<n>            set a depth limit\n      dfa                        use \\fBpcre2_dfa_match()\\fP\n      find_limits                find heap, match and depth limits\n      find_limits_noheap         find match and depth limits\n      get=<number or name>       extract captured substring\n      getall                     extract all captured substrings\n  /g  global                     global matching\n      heapframes_size            show match data heapframes size\n      heap_limit=<n>             set a limit on heap memory (Kbytes)\n      jitstack=<n>               set size of JIT stack\n      mark                       show mark values\n      match_limit=<n>            set a match limit\n      memory                     show heap memory usage\n      null_context               match with a NULL context\n      null_replacement           substitute with NULL replacement\n      null_subject               match with NULL subject\n      null_substitute_match_data substitute with NULL match data\n      offset=<n>                 set starting offset\n      offset_limit=<n>           set offset limit\n      ovector=<n>                set size of output vector\n      recursion_limit=<n>        obsolete synonym for depth_limit\n      replace=<str>              specify a replacement string\n      startchar                  show startchar when relevant\n      startoffset=<n>            same as offset=<n>\n      substitute_callout         use substitution callouts\n      substitute_case_callout    use substitution case callouts\n      substitute_extended        use PCRE2_SUBSTITUTE_EXTENDED\n      substitute_literal         use PCRE2_SUBSTITUTE_LITERAL\n      substitute_matched         use PCRE2_SUBSTITUTE_MATCHED\n      substitute_overflow_length use PCRE2_SUBSTITUTE_OVERFLOW_LENGTH\n      substitute_replacement_only use PCRE2_SUBSTITUTE_REPLACEMENT_ONLY\n      substitute_skip=<n>        skip substitution number n\n      substitute_stop=<n>        skip substitution number n and greater\n      substitute_subject=<str>   specify a different subject for substitution\n      substitute_unknown_unset   use PCRE2_SUBSTITUTE_UNKNOWN_UNSET\n      substitute_unset_empty     use PCRE2_SUBSTITUTE_UNSET_EMPTY\n      zero_terminate             pass the subject as zero-terminated\n.sp\nThe effects of these modifiers are described in the following sections. When\nmatching via the POSIX wrapper API, the \\fBaftertext\\fP, \\fBallaftertext\\fP,\nand \\fBovector\\fP subject modifiers work as described below. All other\nmodifiers are either ignored, with a warning message, or cause an error.\n.\n.\n.SS \"Showing more text\"\n.rs\n.sp\nThe \\fBaftertext\\fP modifier requests that as well as outputting the part of\nthe subject string that matched the entire pattern, \\fBpcre2test\\fP should in\naddition output the remainder of the subject string. This is useful for tests\nwhere the subject contains multiple copies of the same substring. The\n\\fBallaftertext\\fP modifier requests the same action for captured substrings as\nwell as the main matched substring. In each case the remainder is output on the\nfollowing line with a plus character following the capture number.\n.P\nThe \\fBallusedtext\\fP modifier requests that all the text that was consulted\nduring a successful pattern match by the interpreter should be shown, for both\nfull and partial matches. This feature is not supported for JIT matching, and\nif requested with JIT it is ignored (with a warning message). Setting this\nmodifier affects the output if there is a lookbehind at the start of a match,\nor, for a complete match, a lookahead at the end, or if \\eK is used in the\npattern. Characters that precede or follow the start and end of the actual\nmatch are indicated in the output by '<' or '>' characters underneath them.\nHere is an example:\n.sp\n    re> /(?<=pqr)abc(?=xyz)/\n  data> 123pqrabcxyz456\\e=allusedtext\n   0: pqrabcxyz\n      <<<   >>>\n  data> 123pqrabcxy\\e=ph,allusedtext\n  Partial match: pqrabcxy\n                 <<<\n.sp\nThe first, complete match shows that the matched string is \"abc\", with the\npreceding and following strings \"pqr\" and \"xyz\" having been consulted during\nthe match (when processing the assertions). The partial match can indicate only\nthe preceding string.\n.P\nThe \\fBstartchar\\fP modifier requests that the starting character for the match\nbe indicated, if it is different to the start of the matched string. The only\ntime when this occurs is when \\eK has been processed as part of the match. In\nthis situation, the output for the matched string is displayed from the\nstarting character instead of from the match point, with circumflex characters\nunder the earlier characters. For example:\n.sp\n    re> /abc\\eKxyz/\n  data> abcxyz\\e=startchar\n   0: abcxyz\n      ^^^\n.sp\nUnlike \\fBallusedtext\\fP, the \\fBstartchar\\fP modifier can be used with JIT.\nHowever, these two modifiers are mutually exclusive.\n.\n.\n.SS \"Showing the value of all capture groups\"\n.rs\n.sp\nThe \\fBallcaptures\\fP modifier requests that the values of all potential\ncaptured parentheses be output after a match. By default, only those up to the\nhighest one actually used in the match are output (corresponding to the return\ncode from \\fBpcre2_match()\\fP). Groups that did not take part in the match\nare output as \"<unset>\". This modifier is not relevant for DFA matching (which\ndoes no capturing) and does not apply when \\fBreplace\\fP is specified; it is\nignored, with a warning message, if present.\n.\n.\n.SS \"Showing the entire ovector, for all outcomes\"\n.rs\n.sp\nThe \\fBallvector\\fP modifier requests that the entire ovector be shown,\nwhatever the outcome of the match. Compare \\fBallcaptures\\fP, which shows only\nup to the maximum number of capture groups for the pattern, and then only for a\nsuccessful complete non-DFA match. This modifier, which acts after any match\nresult, and also for DFA matching, provides a means of checking that there are\nno unexpected modifications to ovector fields. Before each match attempt, the\novector is filled with a special value, and if this is found in both elements\nof a capturing pair, \"<unchanged>\" is output. After a successful match, this\napplies to all groups after the maximum capture group for the pattern. In other\ncases it applies to the entire ovector. After a partial match, the first two\nelements are the only ones that should be set. After a DFA match, the amount of\novector that is used depends on the number of matches that were found.\n.\n.\n.SS \"Testing pattern callouts\"\n.rs\n.sp\nA callout function is supplied when \\fBpcre2test\\fP calls the library matching\nfunctions, unless \\fBcallout_none\\fP is specified. Its behaviour can be\ncontrolled by various modifiers listed above whose names begin with\n\\fBcallout_\\fP. Details are given in the section entitled \"Callouts\"\n.\\\" HTML <a href=\"#callouts\">\n.\\\" </a>\nbelow.\n.\\\"\nTesting callouts from \\fBpcre2_substitute()\\fP is described separately in\n\"Testing the substitution function\"\n.\\\" HTML <a href=\"#substitution\">\n.\\\" </a>\nbelow.\n.\\\"\n.\n.\n.SS \"Finding all matches in a string\"\n.rs\n.sp\nSearching for all possible matches within a subject can be requested by the\n\\fBglobal\\fP or \\fBaltglobal\\fP modifier. After finding a match, the matching\nfunction is called again to search the remainder of the subject. The difference\nbetween \\fBglobal\\fP and \\fBaltglobal\\fP is that the former uses the\n\\fIstart_offset\\fP argument to \\fBpcre2_match()\\fP or \\fBpcre2_dfa_match()\\fP\nto start searching at a new point within the entire string (which is what Perl\ndoes), whereas the latter passes over a shortened subject. This makes a\ndifference to the matching process if the pattern begins with a lookbehind\nassertion (including \\eb or \\eB).\n.P\nIf an empty string is matched, the next match is done with the\nPCRE2_NOTEMPTY_ATSTART flag set, in order to search for another, non-empty,\nmatch at the same point in the subject. This imitates the way Perl handles such\ncases when using the \\fB/g\\fP modifier or the \\fBsplit()\\fP function.\n.\n.\n.SS \"Testing substring extraction functions\"\n.rs\n.sp\nThe \\fBcopy\\fP and \\fBget\\fP modifiers can be used to test the\n\\fBpcre2_substring_copy_xxx()\\fP and \\fBpcre2_substring_get_xxx()\\fP functions.\nThey can be given more than once, and each can specify a capture group name or\nnumber, for example:\n.sp\n   abcd\\e=copy=1,copy=3,get=G1\n.sp\nIf the \\fB#subject\\fP command is used to set default copy and/or get lists,\nthese can be unset by specifying a negative number to cancel all numbered\ngroups and an empty name to cancel all named groups.\n.P\nThe \\fBgetall\\fP modifier tests \\fBpcre2_substring_list_get()\\fP, which\nextracts all captured substrings.\n.P\nIf the subject line is successfully matched, the substrings extracted by the\nconvenience functions are output with C, G, or L after the string number\ninstead of a colon. This is in addition to the normal full list. The string\nlength (that is, the return from the extraction function) is given in\nparentheses after each substring, followed by the name when the extraction was\nby name.\n.\n.\n.\\\" HTML <a name=\"substitution\"></a>\n.SS \"Testing the substitution function\"\n.rs\n.sp\nIf the \\fBreplace\\fP modifier is set, the \\fBpcre2_substitute()\\fP function is\ncalled instead of one of the matching functions (or after one call of\n\\fBpcre2_match()\\fP in the case of PCRE2_SUBSTITUTE_MATCHED). Note that\nreplacement strings cannot contain commas, because a comma signifies the end of\na modifier. This is not thought to be an issue in a test program.\n.P\nSpecifying a completely empty replacement string disables this modifier.\nHowever, it is possible to specify an empty replacement by providing a buffer\nlength, as described below, for an otherwise empty replacement.\n.P\nUnlike subject strings, \\fBpcre2test\\fP does not process replacement strings\nfor escape sequences. In UTF mode, a replacement string is checked to see if it\nis a valid UTF-8 string. If so, it is correctly converted to a UTF string of\nthe appropriate code unit width. If it is not a valid UTF-8 string, the\nindividual code units are copied directly. This provides a means of passing an\ninvalid UTF-8 string for testing purposes.\n.P\nThe following modifiers set options (in additional to the normal match options)\nfor \\fBpcre2_substitute()\\fP:\n.sp\n  global                      PCRE2_SUBSTITUTE_GLOBAL\n  substitute_extended         PCRE2_SUBSTITUTE_EXTENDED\n  substitute_literal          PCRE2_SUBSTITUTE_LITERAL\n  substitute_matched          PCRE2_SUBSTITUTE_MATCHED\n  substitute_overflow_length  PCRE2_SUBSTITUTE_OVERFLOW_LENGTH\n  substitute_replacement_only PCRE2_SUBSTITUTE_REPLACEMENT_ONLY\n  substitute_unknown_unset    PCRE2_SUBSTITUTE_UNKNOWN_UNSET\n  substitute_unset_empty      PCRE2_SUBSTITUTE_UNSET_EMPTY\n.sp\nSee the\n.\\\" HREF\n\\fBpcre2api\\fP\n.\\\"\ndocumentation for details of these options.\n.P\nAfter a successful substitution, the modified string is output, preceded by the\nnumber of replacements. This may be zero if there were no matches. Here is a\nsimple example of a substitution test:\n.sp\n  /abc/replace=xxx\n      =abc=abc=\n   1: =xxx=abc=\n      =abc=abc=\\e=global\n   2: =xxx=xxx=\n.sp\nSubject and replacement strings should be kept relatively short (fewer than 256\ncharacters) for substitution tests, as fixed-size buffers are used. To make it\neasy to test for buffer overflow, if the replacement string starts with a\nnumber in square brackets, that number is passed to \\fBpcre2_substitute()\\fP as\nthe size of the output buffer, with the replacement string starting at the next\ncharacter. Here is an example that tests the edge case:\n.sp\n  /abc/\n      123abc123\\e=replace=[10]XYZ\n   1: 123XYZ123\n      123abc123\\e=replace=[9]XYZ\n  Failed: error -48: no more memory\n.sp\nThe default action of \\fBpcre2_substitute()\\fP is to return\nPCRE2_ERROR_NOMEMORY when the output buffer is too small. However, if the\nPCRE2_SUBSTITUTE_OVERFLOW_LENGTH option is set (by using the\n\\fBsubstitute_overflow_length\\fP modifier), \\fBpcre2_substitute()\\fP continues\nto go through the motions of matching and substituting (but not doing any\ncallouts), in order to compute the size of buffer that is required. When this\nhappens, \\fBpcre2test\\fP shows the required buffer length (which includes space\nfor the trailing zero) as part of the error message. For example:\n.sp\n  /abc/substitute_overflow_length\n      123abc123\\e=replace=[9]XYZ\n  Failed: error -48: no more memory: 10 code units are needed\n.sp\nA replacement string is ignored with POSIX and DFA matching. Specifying partial\nmatching provokes an error return (\"bad option value\") from\n\\fBpcre2_substitute()\\fP.\n.sp\nThe \\fBsubstitute_subject\\fP modifier may be used to test the use of the PCRE2\nAPI, in which a client calls \\fBpcre2_match()\\fP followed by \\fBpcre2_substitute()\\fP\nwith PCRE2_SUBSTITUTE_MATCHED, but the client performs an unexpected and\nunsupported modification of the subject buffer in-place, in between the match\nand substitution.\n.\n.\n.SS \"Testing substitute callouts\"\n.rs\n.sp\nIf the \\fBsubstitute_callout\\fP modifier is set, a substitution callout\nfunction is set up. The \\fBnull_context\\fP modifier must not be set, because\nthe address of the callout function is passed in a match context. When the\ncallout function is called (after each substitution), details of the input\nand output strings are output. For example:\n.sp\n  /abc/g,replace=<$0>,substitute_callout\n      abcdefabcpqr\n   1(1) Old 0 3 \"abc\" New 0 5 \"<abc>\"\n   2(1) Old 6 9 \"abc\" New 8 13 \"<abc>\"\n   2: <abc>def<abc>pqr\n.sp\nThe first number on each callout line is the count of matches. The\nparenthesized number is the number of pairs that are set in the ovector (that\nis, one more than the number of capturing groups that were set). Then are\nlisted the offsets of the old substring, its contents, and the same for the\nreplacement.\n.P\nBy default, the substitution callout function returns zero, which accepts the\nreplacement and causes matching to continue if /g was used. Two further\nmodifiers can be used to test other return values. If \\fBsubstitute_skip\\fP is\nset to a value greater than zero the callout function returns +1 for the match\nof that number, and similarly \\fBsubstitute_stop\\fP returns -1. These cause the\nreplacement to be rejected, and -1 causes no further matching to take place. If\neither of them are set, \\fBsubstitute_callout\\fP is assumed. For example:\n.sp\n  /abc/g,replace=<$0>,substitute_skip=1\n      abcdefabcpqr\n   1(1) Old 0 3 \"abc\" New 0 5 \"<abc> SKIPPED\"\n   2(1) Old 6 9 \"abc\" New 6 11 \"<abc>\"\n   2: abcdef<abc>pqr\n      abcdefabcpqr\\e=substitute_stop=1\n   1(1) Old 0 3 \"abc\" New 0 5 \"<abc> STOPPED\"\n   1: abcdefabcpqr\n.sp\nIf both are set for the same number, stop takes precedence. Only a single skip\nor stop is supported, which is sufficient for testing that the feature works.\n.\n.\n.SS \"Testing substitute case callouts\"\n.rs\n.sp\nIf the \\fBsubstitute_case_callout\\fP modifier is set, a substitution\ncase callout function is set up. The callout function is called for each\nsubstituted chunk which is to be case-transformed.\n.P\nThe callout function passed is a fixed function with implementation for certain\nbehaviours: inputs which shrink when case-transformed; inputs which grow; inputs\nwith distinct upper/lower/titlecase forms. The characters which are not\nspecial-cased for testing purposes are left unmodified, as if they are caseless\ncharacters.\n.\n.\n.SS \"Setting the JIT stack size\"\n.rs\n.sp\nThe \\fBjitstack\\fP modifier provides a way of setting the maximum stack size\nthat is used by the just-in-time optimization code. It is ignored if JIT\noptimization is not being used. The value is a number of kibibytes (units of\n1024 bytes). Setting zero reverts to the default of 32KiB. Providing a stack\nthat is larger than the default is necessary only for very complicated\npatterns. If \\fBjitstack\\fP is set non-zero on a subject line it overrides any\nvalue that was set on the pattern.\n.\n.\n.SS \"Setting heap, match, and depth limits\"\n.rs\n.sp\nThe \\fBheap_limit\\fP, \\fBmatch_limit\\fP, and \\fBdepth_limit\\fP modifiers set\nthe appropriate limits in the match context. These values are ignored when the\n\\fBfind_limits\\fP or \\fBfind_limits_noheap\\fP modifier is specified.\n.\n.\n.SS \"Finding minimum limits\"\n.rs\n.sp\nIf the \\fBfind_limits\\fP modifier is present on a subject line, \\fBpcre2test\\fP\ncalls the relevant matching function several times, setting different values in\nthe match context via \\fBpcre2_set_heap_limit()\\fP,\n\\fBpcre2_set_match_limit()\\fP, or \\fBpcre2_set_depth_limit()\\fP until it finds\nthe smallest value for each parameter that allows the match to complete without\na \"limit exceeded\" error. The match itself may succeed or fail. An alternative\nmodifier, \\fBfind_limits_noheap\\fP, omits the heap limit. This is used in the\nstandard tests, because the minimum heap limit varies between systems. If JIT\nis being used, only the match limit is relevant, and the other two are\nautomatically omitted.\n.P\nWhen using this modifier, the pattern should not contain any limit settings\nsuch as (*LIMIT_MATCH=...) within it. If such a setting is present and is\nlower than the minimum matching value, the minimum value cannot be found\nbecause \\fBpcre2_set_match_limit()\\fP etc. are only able to reduce the value of\nan in-pattern limit; they cannot increase it.\n.P\nFor non-DFA matching, the minimum \\fIdepth_limit\\fP number is a measure of how\nmuch nested backtracking happens (that is, how deeply the pattern's tree is\nsearched). In the case of DFA matching, \\fIdepth_limit\\fP controls the depth of\nrecursive calls of the internal function that is used for handling pattern\nrecursion, lookaround assertions, and atomic groups.\n.P\nFor non-DFA matching, the \\fImatch_limit\\fP number is a measure of the amount\nof backtracking that takes place, and learning the minimum value can be\ninstructive. For most simple matches, the number is quite small, but for\npatterns with very large numbers of matching possibilities, it can become large\nvery quickly with increasing length of subject string. In the case of DFA\nmatching, \\fImatch_limit\\fP controls the total number of calls, both recursive\nand non-recursive, to the internal matching function, thus controlling the\noverall amount of computing resource that is used.\n.P\nFor both kinds of matching, the \\fIheap_limit\\fP number, which is in kibibytes\n(units of 1024 bytes), limits the amount of heap memory used for matching.\n.\n.\n.SS \"Showing MARK names\"\n.rs\n.sp\n.P\nThe \\fBmark\\fP modifier causes the names from backtracking control verbs that\nare returned from calls to \\fBpcre2_match()\\fP to be displayed. If a mark is\nreturned for a match, non-match, or partial match, \\fBpcre2test\\fP shows it.\nFor a match, it is on a line by itself, tagged with \"MK:\". Otherwise, it\nis added to the non-match message.\n.\n.\n.SS \"Showing memory usage\"\n.rs\n.sp\nThe \\fBmemory\\fP modifier causes \\fBpcre2test\\fP to log the sizes of all heap\nmemory allocation and freeing calls that occur during a call to\n\\fBpcre2_match()\\fP or \\fBpcre2_dfa_match()\\fP. In the latter case, heap memory\nis used only when a match requires more internal workspace that the default\nallocation on the stack, so in many cases there will be no output. No heap\nmemory is allocated during matching with JIT. For this modifier to work, the\n\\fBnull_context\\fP modifier must not be set on both the pattern and the\nsubject, though it can be set on one or the other.\n.\n.\n.SS \"Showing the heap frame overall vector size\"\n.rs\n.sp\nThe \\fBheapframes_size\\fP modifier is relevant for matches using\n\\fBpcre2_match()\\fP without JIT. After a match has run (whether successful or\nnot) the size, in bytes, of the allocated heap frames vector that is left\nattached to the match data block is shown. If the matching action involved\nseveral calls to \\fBpcre2_match()\\fP (for example, global matching or for\ntiming) only the final value is shown.\n.P\nThis modifier is ignored, with a warning, for POSIX or DFA matching. JIT\nmatching does not use the heap frames vector, so the size is always zero,\nunless there was a previous non-JIT match. Note that specifing a size of zero\nfor the output vector (see below) causes \\fBpcre2test\\fP to free its match data\nblock (and associated heap frames vector) and allocate a new one.\n.\n.\n.SS \"Setting a starting offset\"\n.rs\n.sp\nThe \\fBoffset\\fP modifier sets an offset in the subject string at which\nmatching starts. Its value is a number of code units, not characters.\n.\n.\n.SS \"Setting an offset limit\"\n.rs\n.sp\nThe \\fBoffset_limit\\fP modifier sets a limit for unanchored matches. If a match\ncannot be found starting at or before this offset in the subject, a \"no match\"\nreturn is given. The data value is a number of code units, not characters. When\nthis modifier is used, the \\fBuse_offset_limit\\fP modifier must have been set\nfor the pattern; if not, an error is generated.\n.\n.\n.SS \"Setting the size of the output vector\"\n.rs\n.sp\nThe \\fBovector\\fP modifier applies only to the subject line in which it\nappears, though of course it can also be used to set a default in a\n\\fB#subject\\fP command. It specifies the number of pairs of offsets that are\navailable for storing matching information. The default is 15.\n.P\nA value of zero is useful when testing the POSIX API because it causes\n\\fBregexec()\\fP to be called with a NULL capture vector. When not testing the\nPOSIX API, a value of zero is used to cause\n\\fBpcre2_match_data_create_from_pattern()\\fP to be called, in order to create a\nnew match block of exactly the right size for the pattern. (It is not possible\nto create a match block with a zero-length ovector; there is always at least\none pair of offsets.) The old match data block is freed.\n.\n.\n.SS \"Passing the subject as zero-terminated\"\n.rs\n.sp\nBy default, the subject string is passed to a native API matching function with\nits correct length. In order to test the facility for passing a zero-terminated\nstring, the \\fBzero_terminate\\fP modifier is provided. It causes the length to\nbe passed as PCRE2_ZERO_TERMINATED. When matching via the POSIX interface,\nthis modifier is ignored, with a warning.\n.P\nWhen testing \\fBpcre2_substitute()\\fP, this modifier also has the effect of\npassing the replacement string as zero-terminated.\n.\n.\n.SS \"Passing a NULL context, subject, or replacement\"\n.rs\n.sp\nNormally, \\fBpcre2test\\fP passes a context block to \\fBpcre2_match()\\fP,\n\\fBpcre2_dfa_match()\\fP, \\fBpcre2_jit_match()\\fP or \\fBpcre2_substitute()\\fP.\nIf the \\fBnull_context\\fP modifier is set, however, NULL is passed. This is for\ntesting that the matching and substitution functions behave correctly in this\ncase (they use default values). This modifier cannot be used with the\n\\fBfind_limits\\fP, \\fBfind_limits_noheap\\fP, or \\fBsubstitute_callout\\fP\nmodifiers.\n.P\nSimilarly, for testing purposes, if the \\fBnull_subject\\fP or\n\\fBnull_replacement\\fP modifier is set, the subject or replacement string\npointers are passed as NULL, respectively, to the relevant functions.\n.\n.\n.SH \"THE ALTERNATIVE MATCHING FUNCTION\"\n.rs\n.sp\nBy default, \\fBpcre2test\\fP uses the standard PCRE2 matching function,\n\\fBpcre2_match()\\fP to match each subject line. PCRE2 also supports an\nalternative matching function, \\fBpcre2_dfa_match()\\fP, which operates in a\ndifferent way, and has some restrictions. The differences between the two\nfunctions are described in the\n.\\\" HREF\n\\fBpcre2matching\\fP\n.\\\"\ndocumentation.\n.P\nIf the \\fBdfa\\fP modifier is set, the alternative matching function is used.\nThis function finds all possible matches at a given point in the subject. If,\nhowever, the \\fBdfa_shortest\\fP modifier is set, processing stops after the\nfirst match is found. This is always the shortest possible match.\n.\n.\n.SH \"DEFAULT OUTPUT FROM pcre2test\"\n.rs\n.sp\nThis section describes the output when the normal matching function,\n\\fBpcre2_match()\\fP, is being used.\n.P\nWhen a match succeeds, \\fBpcre2test\\fP outputs the list of captured substrings,\nstarting with number 0 for the string that matched the whole pattern.\nOtherwise, it outputs \"No match\" when the return is PCRE2_ERROR_NOMATCH, or\n\"Partial match:\" followed by the partially matching substring when the\nreturn is PCRE2_ERROR_PARTIAL. (Note that this is the\nentire substring that was inspected during the partial match; it may include\ncharacters before the actual match start if a lookbehind assertion, \\eK, \\eb,\nor \\eB was involved.)\n.P\nFor any other return, \\fBpcre2test\\fP outputs the PCRE2 negative error number\nand a short descriptive phrase. If the error is a failed UTF string check, the\ncode unit offset of the start of the failing character is also output. Here is\nan example of an interactive \\fBpcre2test\\fP run.\n.sp\n  $ pcre2test\n  PCRE2 version 10.22 2016-07-29\n.sp\n    re> /^abc(\\ed+)/\n  data> abc123\n   0: abc123\n   1: 123\n  data> xyz\n  No match\n.sp\nUnset capturing substrings that are not followed by one that is set are not\nshown by \\fBpcre2test\\fP unless the \\fBallcaptures\\fP modifier is specified. In\nthe following example, there are two capturing substrings, but when the first\ndata line is matched, the second, unset substring is not shown. An \"internal\"\nunset substring is shown as \"<unset>\", as for the second data line.\n.sp\n    re> /(a)|(b)/\n  data> a\n   0: a\n   1: a\n  data> b\n   0: b\n   1: <unset>\n   2: b\n.sp\nIf the strings contain any non-printing characters, they are output as \\exhh\nescapes if the value is less than 256 and UTF mode is not set. Otherwise they\nare output as \\ex{hh...} escapes. See below for the definition of non-printing\ncharacters. If the \\fBaftertext\\fP modifier is set, the output for substring 0\nis followed by the rest of the subject string, identified by \"0+\" like this:\n.sp\n    re> /cat/aftertext\n  data> cataract\n   0: cat\n   0+ aract\n.sp\nIf global matching is requested, the results of successive matching attempts\nare output in sequence, like this:\n.sp\n    re> /\\eBi(\\ew\\ew)/g\n  data> Mississippi\n   0: iss\n   1: ss\n   0: iss\n   1: ss\n   0: ipp\n   1: pp\n.sp\n\"No match\" is output only if the first match attempt fails. Here is an example\nof a failure message (the offset 4 that is specified by the \\fBoffset\\fP\nmodifier is past the end of the subject string):\n.sp\n    re> /xyz/\n  data> xyz\\e=offset=4\n  Error -24 (bad offset value)\n.P\nNote that whereas patterns can be continued over several lines (a plain \">\"\nprompt is used for continuations), subject lines may not. However newlines can\nbe included in a subject by means of the \\en escape (or \\er, \\er\\en, etc.,\ndepending on the newline sequence setting).\n.\n.\n.\n.SH \"OUTPUT FROM THE ALTERNATIVE MATCHING FUNCTION\"\n.rs\n.sp\nWhen the alternative matching function, \\fBpcre2_dfa_match()\\fP, is used, the\noutput consists of a list of all the matches that start at the first point in\nthe subject where there is at least one match. For example:\n.sp\n    re> /(tang|tangerine|tan)/\n  data> yellow tangerine\\e=dfa\n   0: tangerine\n   1: tang\n   2: tan\n.sp\nUsing the normal matching function on this data finds only \"tang\". The\nlongest matching string is always given first (and numbered zero). After a\nPCRE2_ERROR_PARTIAL return, the output is \"Partial match:\", followed by the\npartially matching substring. Note that this is the entire substring that was\ninspected during the partial match; it may include characters before the actual\nmatch start if a lookbehind assertion, \\eb, or \\eB was involved. (\\eK is not\nsupported for DFA matching.)\n.P\nIf global matching is requested, the search for further matches resumes\nat the end of the longest match. For example:\n.sp\n    re> /(tang|tangerine|tan)/g\n  data> yellow tangerine and tangy sultana\\e=dfa\n   0: tangerine\n   1: tang\n   2: tan\n   0: tang\n   1: tan\n   0: tan\n.sp\nThe alternative matching function does not support substring capture, so the\nmodifiers that are concerned with captured substrings are not relevant.\n.\n.\n.SH \"RESTARTING AFTER A PARTIAL MATCH\"\n.rs\n.sp\nWhen the alternative matching function has given the PCRE2_ERROR_PARTIAL\nreturn, indicating that the subject partially matched the pattern, you can\nrestart the match with additional subject data by means of the\n\\fBdfa_restart\\fP modifier. For example:\n.sp\n    re> /^\\ed?\\ed(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\ed\\ed$/\n  data> 23ja\\e=ps,dfa\n  Partial match: 23ja\n  data> n05\\e=dfa,dfa_restart\n   0: n05\n.sp\nFor further information about partial matching, see the\n.\\\" HREF\n\\fBpcre2partial\\fP\n.\\\"\ndocumentation.\n.\n.\n.\\\" HTML <a name=\"callouts\"></a>\n.SH CALLOUTS\n.rs\n.sp\nIf the pattern contains any callout requests, \\fBpcre2test\\fP's callout\nfunction is called during matching unless \\fBcallout_none\\fP is specified. This\nworks with both matching functions, and with JIT, though there are some\ndifferences in behaviour. The output for callouts with numerical arguments and\nthose with string arguments is slightly different.\n.\n.\n.SS \"Callouts with numerical arguments\"\n.rs\n.sp\nBy default, the callout function displays the callout number, the start and\ncurrent positions in the subject text at the callout time, and the next pattern\nitem to be tested. For example:\n.sp\n  --->pqrabcdef\n    0    ^  ^     \\ed\n.sp\nThis output indicates that callout number 0 occurred for a match attempt\nstarting at the fourth character of the subject string, when the pointer was at\nthe seventh character, and when the next pattern item was \\ed. Just\none circumflex is output if the start and current positions are the same, or if\nthe current position precedes the start position, which can happen if the\ncallout is in a lookbehind assertion.\n.P\nCallouts numbered 255 are assumed to be automatic callouts, inserted as a\nresult of the \\fBauto_callout\\fP pattern modifier. In this case, instead of\nshowing the callout number, the offset in the pattern, preceded by a plus, is\noutput. For example:\n.sp\n    re> /\\ed?[A-E]\\e*/auto_callout\n  data> E*\n  --->E*\n   +0 ^      \\ed?\n   +3 ^      [A-E]\n   +8 ^^     \\e*\n  +10 ^ ^\n   0: E*\n.sp\nIf a pattern contains (*MARK) items, an additional line is output whenever\na change of latest mark is passed to the callout function. For example:\n.sp\n    re> /a(*MARK:X)bc/auto_callout\n  data> abc\n  --->abc\n   +0 ^       a\n   +1 ^^      (*MARK:X)\n  +10 ^^      b\n  Latest Mark: X\n  +11 ^ ^     c\n  +12 ^  ^\n   0: abc\n.sp\nThe mark changes between matching \"a\" and \"b\", but stays the same for the rest\nof the match, so nothing more is output. If, as a result of backtracking, the\nmark reverts to being unset, the text \"<unset>\" is output.\n.\n.\n.SS \"Callouts with string arguments\"\n.rs\n.sp\nThe output for a callout with a string argument is similar, except that instead\nof outputting a callout number before the position indicators, the callout\nstring and its offset in the pattern string are output before the reflection of\nthe subject string, and the subject string is reflected for each callout. For\nexample:\n.sp\n    re> /^ab(?C'first')cd(?C\"second\")ef/\n  data> abcdefg\n  Callout (7): 'first'\n  --->abcdefg\n      ^ ^         c\n  Callout (20): \"second\"\n  --->abcdefg\n      ^   ^       e\n   0: abcdef\n.sp\n.\n.\n.SS \"Callout modifiers\"\n.rs\n.sp\nThe callout function in \\fBpcre2test\\fP returns zero (carry on matching) by\ndefault, but you can use a \\fBcallout_fail\\fP modifier in a subject line to\nchange this and other parameters of the callout (see below).\n.P\nIf the \\fBcallout_capture\\fP modifier is set, the current captured groups are\noutput when a callout occurs. This is useful only for non-DFA matching, as\n\\fBpcre2_dfa_match()\\fP does not support capturing, so no captures are ever\nshown.\n.P\nThe normal callout output, showing the callout number or pattern offset (as\ndescribed above) is suppressed if the \\fBcallout_no_where\\fP modifier is set.\n.P\nWhen using the interpretive matching function \\fBpcre2_match()\\fP without JIT,\nsetting the \\fBcallout_extra\\fP modifier causes additional output from\n\\fBpcre2test\\fP's callout function to be generated. For the first callout in a\nmatch attempt at a new starting position in the subject, \"New match attempt\" is\noutput. If there has been a backtrack since the last callout (or start of\nmatching if this is the first callout), \"Backtrack\" is output, followed by \"No\nother matching paths\" if the backtrack ended the previous match attempt. For\nexample:\n.sp\n   re> /(a+)b/auto_callout,no_start_optimize,no_auto_possess\n  data> aac\\e=callout_extra\n  New match attempt\n  --->aac\n   +0 ^       (\n   +1 ^       a+\n   +3 ^ ^     )\n   +4 ^ ^     b\n  Backtrack\n  --->aac\n   +3 ^^      )\n   +4 ^^      b\n  Backtrack\n  No other matching paths\n  New match attempt\n  --->aac\n   +0  ^      (\n   +1  ^      a+\n   +3  ^^     )\n   +4  ^^     b\n  Backtrack\n  No other matching paths\n  New match attempt\n  --->aac\n   +0   ^     (\n   +1   ^     a+\n  Backtrack\n  No other matching paths\n  New match attempt\n  --->aac\n   +0    ^    (\n   +1    ^    a+\n  No match\n.sp\nNotice that various optimizations must be turned off if you want all possible\nmatching paths to be scanned. If \\fBno_start_optimize\\fP is not used, there is\nan immediate \"no match\", without any callouts, because the starting\noptimization fails to find \"b\" in the subject, which it knows must be present\nfor any match. If \\fBno_auto_possess\\fP is not used, the \"a+\" item is turned\ninto \"a++\", which reduces the number of backtracks.\n.P\nThe \\fBcallout_extra\\fP modifier has no effect if used with the DFA matching\nfunction, or with JIT.\n.\n.\n.SS \"Return values from callouts\"\n.rs\n.sp\nThe default return from the callout function is zero, which allows matching to\ncontinue. The \\fBcallout_fail\\fP modifier can be given one or two numbers. If\nthere is only one number, 1 is returned instead of 0 (causing matching to\nbacktrack) when a callout of that number is reached. If two numbers (<n>:<m>)\nare given, 1 is returned when callout <n> is reached and there have been at\nleast <m> callouts. The \\fBcallout_error\\fP modifier is similar, except that\nPCRE2_ERROR_CALLOUT is returned, causing the entire matching process to be\naborted. If both these modifiers are set for the same callout number,\n\\fBcallout_error\\fP takes precedence. Note that callouts with string arguments\nare always given the number zero.\n.P\nThe \\fBcallout_data\\fP modifier can be given an unsigned or a negative number.\nThis is set as the \"user data\" that is passed to the matching function, and\npassed back when the callout function is invoked. Any value other than zero is\nused as a return from \\fBpcre2test\\fP's callout function.\n.P\nInserting callouts can be helpful when using \\fBpcre2test\\fP to check\ncomplicated regular expressions. For further information about callouts, see\nthe\n.\\\" HREF\n\\fBpcre2callout\\fP\n.\\\"\ndocumentation.\n.\n.\n.\n.SH \"NON-PRINTING CHARACTERS\"\n.rs\n.sp\nWhen \\fBpcre2test\\fP is outputting text in the compiled version of a pattern,\nbytes other than 32-126 are always treated as non-printing characters and are\ntherefore shown as hex escapes.\n.P\nWhen \\fBpcre2test\\fP is outputting text that is a matched part of a subject\nstring, it behaves in the same way, unless a different locale has been set for\nthe pattern (using the \\fBlocale\\fP modifier). In this case, the\n\\fBisprint()\\fP function is used to distinguish printing and non-printing\ncharacters.\n.\n.\n.\n.\\\" HTML <a name=\"saverestore\"></a>\n.SH \"SAVING AND RESTORING COMPILED PATTERNS\"\n.rs\n.sp\nIt is possible to save compiled patterns on disc or elsewhere, and reload them\nlater, subject to a number of restrictions. JIT data cannot be saved. The host\non which the patterns are reloaded must be running the same version of PCRE2,\nwith the same code unit width, and must also have the same endianness, pointer\nwidth and PCRE2_SIZE type. Before compiled patterns can be saved they must be\nserialized, that is, converted to a stream of bytes. A single byte stream may\ncontain any number of compiled patterns, but they must all use the same\ncharacter tables. A single copy of the tables is included in the byte stream\n(its size is 1088 bytes).\n.P\nThe functions whose names begin with \\fBpcre2_serialize_\\fP are used\nfor serializing and de-serializing. They are described in the\n.\\\" HREF\n\\fBpcre2serialize\\fP\n.\\\"\ndocumentation. In this section we describe the features of \\fBpcre2test\\fP that\ncan be used to test these functions.\n.P\nNote that \"serialization\" in PCRE2 does not convert compiled patterns to an\nabstract format like Java or .NET. It just makes a reloadable byte code stream.\nHence the restrictions on reloading mentioned above.\n.P\nIn \\fBpcre2test\\fP, when a pattern with \\fBpush\\fP modifier is successfully\ncompiled, it is pushed onto a stack of compiled patterns, and \\fBpcre2test\\fP\nexpects the next line to contain a new pattern (or command) instead of a\nsubject line. By contrast, the \\fBpushcopy\\fP modifier causes a copy of the\ncompiled pattern to be stacked, leaving the original available for immediate\nmatching. By using \\fBpush\\fP and/or \\fBpushcopy\\fP, a number of patterns can\nbe compiled and retained. These modifiers are incompatible with \\fBposix\\fP,\nand control modifiers that act at match time are ignored (with a message) for\nthe stacked patterns. The \\fBjitverify\\fP modifier applies only at compile\ntime.\n.P\nThe command\n.sp\n  #save <filename>\n.sp\ncauses all the stacked patterns to be serialized and the result written to the\nnamed file. Afterwards, all the stacked patterns are freed. The command\n.sp\n  #load <filename>\n.sp\nreads the data in the file, and then arranges for it to be de-serialized, with\nthe resulting compiled patterns added to the pattern stack. The pattern on the\ntop of the stack can be retrieved by the #pop command, which must be followed\nby lines of subjects that are to be matched with the pattern, terminated as\nusual by an empty line or end of file. This command may be followed by a\nmodifier list containing only\n.\\\" HTML <a href=\"#controlmodifiers\">\n.\\\" </a>\ncontrol modifiers\n.\\\"\nthat act after a pattern has been compiled. In particular, \\fBhex\\fP,\n\\fBposix\\fP, \\fBposix_nosub\\fP, \\fBpush\\fP, and \\fBpushcopy\\fP are not allowed,\nnor are any\n.\\\" HTML <a href=\"#optionmodifiers\">\n.\\\" </a>\noption-setting modifiers.\n.\\\"\nThe JIT modifiers are, however permitted. Here is an example that saves and\nreloads two patterns.\n.sp\n  /abc/push\n  /xyz/push\n  #save tempfile\n  #load tempfile\n  #pop info\n  xyz\n.sp\n  #pop jit,bincode\n  abc\n.sp\nIf \\fBjitverify\\fP is used with #pop, it does not automatically imply\n\\fBjit\\fP, which is different behaviour from when it is used on a pattern.\n.P\nThe #popcopy command is analogous to the \\fBpushcopy\\fP modifier in that it\nmakes current a copy of the topmost stack pattern, leaving the original still\non the stack.\n.\n.\n.\n.SH \"SEE ALSO\"\n.rs\n.sp\n\\fBpcre2\\fP(3), \\fBpcre2api\\fP(3), \\fBpcre2callout\\fP(3),\n\\fBpcre2jit\\fP, \\fBpcre2matching\\fP(3), \\fBpcre2partial\\fP(d),\n\\fBpcre2pattern\\fP(3), \\fBpcre2serialize\\fP(3).\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 12 October 2025\nCopyright (c) 1997-2024 University of Cambridge.\n.fi\n"
  },
  {
    "path": "doc/pcre2test.txt",
    "content": "PCRE2TEST(1)                General Commands Manual               PCRE2TEST(1)\n\n\nNAME\n       pcre2test - a program for testing Perl-compatible regular expressions.\n\n\nSYNOPSIS\n\n       pcre2test [options] [input file [output file]]\n\n       pcre2test is a test program for the PCRE2 regular expression libraries,\n       but  it  can  also  be used for experimenting with regular expressions.\n       This document describes the features of the test program;  for  details\n       of  the regular expressions themselves, see the pcre2pattern documenta-\n       tion. For details of the PCRE2 library function  calls  and  their  op-\n       tions, see the pcre2api documentation.\n\n       The  input  for  pcre2test is a sequence of regular expression patterns\n       and subject strings to be matched. There are  also  command  lines  for\n       setting defaults and controlling some special actions. The output shows\n       the  result  of  each  match attempt. Modifiers on external or internal\n       command lines, the patterns, and the subject lines specify PCRE2  func-\n       tion  options, control how the subject is processed, and what output is\n       produced.\n\n       There are many obscure modifiers, some of which  are  specifically  de-\n       signed  for use in conjunction with the test script and data files that\n       are distributed as part of PCRE2.  All  the  modifiers  are  documented\n       here, some without much justification, but many of them are unlikely to\n       be of use except when testing the libraries.\n\n\nPCRE2's 8-BIT, 16-BIT AND 32-BIT LIBRARIES\n\n       Different versions of the PCRE2 library can be built to support charac-\n       ter  strings  that  are encoded in 8-bit, 16-bit, or 32-bit code units.\n       One, two, or all three of these libraries  may  be  simultaneously  in-\n       stalled.  The  pcre2test program can be used to test all the libraries.\n       However, its own input and output are  always  in  8-bit  format.  When\n       testing  the  16-bit  or 32-bit libraries, patterns and subject strings\n       are converted to 16-bit or 32-bit format before being passed to the li-\n       brary functions. Results are converted back to  8-bit  code  units  for\n       output.\n\n       In the rest of this document, the names of library functions and struc-\n       tures  are given in generic form, for example, pcre2_compile(). The ac-\n       tual names used in the libraries have a suffix _8, _16, or _32, as  ap-\n       propriate.\n\n\nINPUT ENCODING\n\n       Input  to  pcre2test is processed line by line, either by calling the C\n       library's fgets() function, or via the libreadline or libedit  library.\n       In  some Windows environments character 26 (hex 1A) causes an immediate\n       end of file, and no further data is read, so this character  should  be\n       avoided unless you really want that action.\n\n       The  input is processed using C's string functions, so must not contain\n       binary zeros, even though in Unix-like environments, fgets() treats any\n       bytes other than newline as data characters. An error is generated if a\n       binary zero is encountered. By default subject lines are processed  for\n       backslash escapes, which makes it possible to include any data value in\n       strings  that  are  passed  to  the library for matching. For patterns,\n       there is a facility for specifying some or all of the 8-bit input char-\n       acters as hexadecimal pairs, which makes it possible to include  binary\n       zeros.\n\n   Input for the 16-bit and 32-bit libraries\n\n       When testing the 16-bit or 32-bit libraries, there is a need to be able\n       to  generate character code points greater than 255 in the strings that\n       are passed to the library. For subject lines and some  patterns,  back-\n       slash  escapes  can  be  used.  In addition, when the utf modifier (see\n       \"Setting compilation options\" below) is set, the pattern and  any  fol-\n       lowing subject lines are interpreted as UTF-8 strings and translated to\n       UTF-16 or UTF-32 as appropriate.\n\n       For  non-UTF testing of wide characters, the utf8_input modifier can be\n       used. This is mutually exclusive with  utf,  and  is  allowed  only  in\n       16-bit  or  32-bit  mode.  It  causes the pattern and following subject\n       lines to be treated as UTF-8 according to the original definition  (RFC\n       2279), which allows for character values up to 0x7fffffff. Each charac-\n       ter  is  placed  in one 16-bit or 32-bit code unit (in the 16-bit case,\n       values greater than 0xffff cause an error to occur).\n\n       UTF-8 (in its original definition) is not capable  of  encoding  values\n       greater  than  0x7fffffff, but such values can be handled by the 32-bit\n       library. When testing this library in non-UTF mode with utf8_input set,\n       if any character is preceded by the byte 0xff (which is an invalid byte\n       in UTF-8) 0x80000000 is added to the  character's  value.  For  subject\n       strings, using an escape sequence is preferable.\n\n\nCOMMAND LINE OPTIONS\n\n       -8        If the 8-bit library has been built, this option causes it to\n                 be  used  (this is the default). If the 8-bit library has not\n                 been built, this option causes an error.\n\n       -16       If the 16-bit library has been built, this option  causes  it\n                 to  be used. If the 8-bit library has not been built, this is\n                 the default. If the 16-bit library has not been  built,  this\n                 option causes an error.\n\n       -32       If  the  32-bit library has been built, this option causes it\n                 to be used. If no other library has been built, this  is  the\n                 default.  If  the 32-bit library has not been built, this op-\n                 tion causes an error.\n\n       -ac       Behave as if each pattern has the auto_callout modifier, that\n                 is, insert automatic callouts into every pattern that is com-\n                 piled.\n\n       -AC       As for -ac, but in addition behave as if  each  subject  line\n                 has  the callout_extra modifier, that is, show additional in-\n                 formation from callouts.\n\n       -b        Behave as if each pattern has the fullbincode  modifier;  the\n                 full internal binary form of the pattern is output after com-\n                 pilation.\n\n       -C        Output  the  version  number  of  the  PCRE2 library, and all\n                 available information about the optional  features  that  are\n                 included,  and  then  exit with zero exit code. All other op-\n                 tions are ignored. If both -C and -LM are present,  whichever\n                 is first is recognized.\n\n       -C option Output  information  about a specific build-time option, then\n                 exit. This functionality is intended for use in scripts  such\n                 as  RunTest.  The  following options output the value and set\n                 the exit code as indicated:\n\n                   linksize   the configured internal link size (2, 3, or 4)\n                                exit code is set to the link size\n                   newline    the default newline setting:\n                                CR, LF, CRLF, ANYCRLF, ANY, or NUL\n                                exit code is always 0\n                   bsr        the default setting for what \\R matches:\n                                ANYCRLF or ANY\n                                exit code is always 0\n\n                 The following options output 1 for true or 0 for  false,  and\n                 set the exit code to the same value:\n\n                   backslash-C  \\C is supported (not locked out)\n                   ebcdic       compiled for an EBCDIC environment\n                   ebcdic-io     if  PCRE2  is  compiled  for  EBCDIC, whether\n                 pcre2test's input and\n                                  output is EBCDIC or ASCII\n                   ebcdic-nl25  if PCRE2 is compiled for EBCDIC, whether NL (=\n                 LF) is 0x25\n                                  (otherwise it is 0x15, the default)\n                   jit          just-in-time support is available\n                   pcre2-16     the 16-bit library was built\n                   pcre2-32     the 32-bit library was built\n                   pcre2-8      the 8-bit library was built\n                   unicode      Unicode support is available\n\n                 Note that the availability of JIT support in the library does\n                 not guarantee that it can actually be used  because  in  some\n                 environments  it is unable to allocate executable memory. The\n                 option \"jitusable\" gives more detailed  information.  It  re-\n                 turns one of the following values:\n\n                   0  JIT is available and usable\n                   1  JIT is available but cannot allocate executable memory\n                   2  JIT is not available\n                   3  Unexpected return from test call to pcre2_jit_compile()\n\n                 If  an  unknown  option is given, an error message is output;\n                 the exit code is 0.\n\n       --colo[u]r[=<always,auto,never>]\n                 By default, the output is coloured if the output  file  is  a\n                 terminal (auto).  Force or suppress output of ANSI colour es-\n                 capes with always and never respectively.\n\n       -d        Behave  as if each pattern has the debug modifier; the inter-\n                 nal form and information about the compiled pattern is output\n                 after compilation; -d is equivalent to -b -i.\n\n       -dfa      Behave as if each subject line has the dfa modifier; matching\n                 is done using the pcre2_dfa_match() function instead  of  the\n                 default pcre2_match().\n\n       -E        Run in \"preprocess only\" mode (similar to \"gcc -E\"). The \"#if\n                 ...  #endif\"  commands are processed, and all other lines are\n                 printed verbatim.\n\n       -error number[,number,...]\n                 Call pcre2_get_error_message() for each of the error  numbers\n                 in  the  comma-separated list, display the resulting messages\n                 on the standard output, then exit with zero  exit  code.  The\n                 numbers  may  be  positive or negative. This is a convenience\n                 facility for PCRE2 maintainers.\n\n       -help     Output a brief summary these options and then exit.\n\n       -i        Behave as if each pattern has the info modifier;  information\n                 about the compiled pattern is given after compilation.\n\n       -jit      Behave  as  if  each pattern line has the jit modifier; after\n                 successful compilation, each pattern is passed to  the  just-\n                 in-time compiler, if available.\n\n       -jitfast  Behave  as if each pattern line has the jitfast modifier; af-\n                 ter successful compilation, each pattern  is  passed  to  the\n                 just-in-time compiler, if available, and each subject line is\n                 passed directly to the JIT matcher via its \"fast path\".\n\n       -jitverify\n                 Behave  as  if  each pattern line has the jitverify modifier;\n                 after successful compilation, each pattern is passed  to  the\n                 just-in-time  compiler,  if available, and the use of JIT for\n                 matching is verified.\n\n       -LM       List modifiers: write a list of available pattern and subject\n                 modifiers to the standard output, then exit  with  zero  exit\n                 code.  All other options are ignored.  If both -C and any -Lx\n                 options are present, whichever is first is recognized.\n\n       -LP       List properties: write a list of recognized  Unicode  proper-\n                 ties  to  the standard output, then exit with zero exit code.\n                 All other options are ignored. If both -C and any -Lx options\n                 are present, whichever is first is recognized.\n\n       -LS       List scripts: write a list of recognized Unicode script names\n                 to the standard output, then exit with zero  exit  code.  All\n                 other options are ignored. If both -C and any -Lx options are\n                 present, whichever is first is recognized.\n\n       -malloc   Exercise  malloc()  failures, by first counting the number of\n                 calls made to malloc during pattern compilation and matching,\n                 then re-running the compilation and matching that many times,\n                 exercising a failure of each malloc() call.\n\n       -pattern modifier-list\n                 Behave as if each pattern line contains the given modifiers.\n\n       -q        Do not output the version number of pcre2test at the start of\n                 execution.\n\n       -S size   On Unix-like systems, set the size of the run-time  stack  to\n                 size mebibytes (units of 1024*1024 bytes).\n\n       -subject modifier-list\n                 Behave as if each subject line contains the given modifiers.\n\n       -t        Run  each compile and match many times with a timer, and out-\n                 put the resulting times per compile or  match.  When  JIT  is\n                 used,  separate  times  are given for the initial compile and\n                 the JIT compile. You can control  the  number  of  iterations\n                 that  are used for timing by following -t with a number (as a\n                 separate item on the command line). For  example,  \"-t  1000\"\n                 iterates 1000 times. The default is to iterate 500,000 times.\n\n       -tm       This is like -t except that it times only the matching phase,\n                 not the compile phase.\n\n       -T -TM    These  behave like -t and -tm, but in addition, at the end of\n                 a run, the total times for all compiles and matches are  out-\n                 put.\n\n       -unittest Run  a  fixed  set of additional tests of the PCRE2 API which\n                 are not driven by the test input files, and then exit.\n\n       -version  Output the PCRE2 version number and then exit.\n\n\nDESCRIPTION\n\n       If pcre2test is given two filename arguments, it reads from  the  first\n       and writes to the second. If the first name is \"-\", input is taken from\n       the  standard  input. If pcre2test is given only one argument, it reads\n       from that file and writes to stdout. Otherwise, it reads from stdin and\n       writes to stdout.\n\n       When pcre2test is built, a configuration option  can  specify  that  it\n       should  be linked with the libreadline or libedit library. When this is\n       done, if the input is from a terminal, it is read using the  readline()\n       function. This provides line-editing and history facilities. The output\n       from the -help option states whether or not readline() will be used.\n\n       The  program  handles  any number of tests, each of which consists of a\n       set of input lines. Each set starts with a regular expression  pattern,\n       followed by any number of subject lines to be matched against that pat-\n       tern. In between sets of test data, command lines that begin with # may\n       appear. This file format, with some restrictions, can also be processed\n       by  the perltest.sh script that is distributed with PCRE2 as a means of\n       checking that the behaviour of PCRE2 and Perl is the same. For a speci-\n       fication of perltest.sh, see the comments near its beginning. See  also\n       the #perltest command below.\n\n       When the input is a terminal, pcre2test prompts for each line of input,\n       using  \"re>\"  to prompt for regular expression patterns, and \"data>\" to\n       prompt for subject lines. Command lines starting with # can be  entered\n       only in response to the \"re>\" prompt.\n\n       Each  subject line is matched separately and independently. If you want\n       to do multi-line matches, you have to use the \\n escape sequence (or \\r\n       or \\r\\n, etc., depending on the newline setting) in a  single  line  of\n       input  to encode the newline sequences. There is no limit on the length\n       of subject lines; the input buffer is automatically extended if  it  is\n       too  small.  There  are  replication features that makes it possible to\n       generate long repetitive pattern or subject  lines  without  having  to\n       supply them explicitly.\n\n       An  empty  line  or  the end of the file signals the end of the subject\n       lines for a test, at which point a new pattern or command line  is  ex-\n       pected if there is still input to be read.\n\n\nCOMMAND LINES\n\n       In  between sets of test data, a line that begins with # is interpreted\n       as a command line. If the first character is followed by white space or\n       an exclamation mark, the line is treated as  a  comment,  and  ignored.\n       Otherwise, the following commands are recognized:\n\n         #forbid_utf\n\n       Subsequent   patterns   automatically   have  the  PCRE2_NEVER_UTF  and\n       PCRE2_NEVER_UCP options set, which locks out the use of  the  PCRE2_UTF\n       and  PCRE2_UCP options and the use of (*UTF) and (*UCP) at the start of\n       patterns. This command also forces an error  if  a  subsequent  pattern\n       contains  any  occurrences  of \\P, \\p, or \\X, which are still supported\n       when PCRE2_UTF is not set, but which require Unicode  property  support\n       to be included in the library.\n\n       This  is  a trigger guard that is used in test files to ensure that UTF\n       or Unicode property tests are not accidentally added to files that  are\n       used  when  Unicode  support  is  not  included in the library. Setting\n       PCRE2_NEVER_UTF and PCRE2_NEVER_UCP as a default can also  be  obtained\n       by  the  use  of #pattern; the difference is that #forbid_utf cannot be\n       unset, and the automatic options are not displayed in pattern  informa-\n       tion, to avoid cluttering up test output.\n\n         #load <filename>\n\n       This command is used to load a set of precompiled patterns from a file,\n       as  described  in  the  section entitled \"Saving and restoring compiled\n       patterns\" below.\n\n         #loadtables <filename>\n\n       This command is used to load a set of binary character tables that  can\n       be  accessed  by  the tables=3 qualifier. Such tables can be created by\n       the pcre2_dftables program with the -b option.\n\n         #newline_default [<newline-list>]\n\n       When PCRE2 is built, a default newline  convention  can  be  specified.\n       This  determines which characters and/or character pairs are recognized\n       as indicating a newline in a pattern or subject string. The default can\n       be overridden when a pattern is compiled. The standard test files  con-\n       tain  tests  of  various  newline  conventions, but the majority of the\n       tests expect a single linefeed to be recognized as  a  newline  by  de-\n       fault.  Without  special action the tests would fail when PCRE2 is com-\n       piled with either CR or CRLF as the default newline.\n\n       The #newline_default command specifies a list of newline types that are\n       acceptable as the default. The types must be one of CR, LF, CRLF,  ANY-\n       CRLF, ANY, or NUL (in upper or lower case), for example:\n\n         #newline_default LF Any anyCRLF\n\n       If the default newline is in the list, this command has no effect. Oth-\n       erwise,  except  when  testing  the  POSIX API, a newline modifier that\n       specifies the first newline convention in the list (LF in the above ex-\n       ample) is added to any pattern that does not  already  have  a  newline\n       modifier. If the newline list is empty, the feature is turned off. This\n       command is present in a number of the standard test input files.\n\n       When  the POSIX API is being tested there is no way to override the de-\n       fault newline convention, though it is possible to set the newline con-\n       vention from within the pattern. A warning is given  if  the  posix  or\n       posix_nosub  modifier is used when #newline_default would set a default\n       for the non-POSIX API.\n\n         #pattern <modifier-list>\n\n       This command sets a default modifier list that applies  to  all  subse-\n       quent patterns. Modifiers on a pattern can change these settings.\n\n         #perltest\n\n       This  line  is  used  in test files that can also be processed by perl-\n       test.sh to confirm that Perl gives the same results  as  PCRE2.  Subse-\n       quent  tests are checked for the use of pcre2test features that are in-\n       compatible with the perltest.sh script.\n\n       Patterns must use '/' as their delimiter, and  only  certain  modifiers\n       are  supported. Comment lines, #pattern commands, and #subject commands\n       that set or unset \"mark\" are recognized and acted  on.  The  #perltest,\n       #forbid_utf,  and  #newline_default  commands,  which are needed in the\n       relevant pcre2test files, are silently ignored. All other command lines\n       are ignored, but give a warning message. The  #perltest  command  helps\n       detect  tests  that  are  accidentally put in the wrong file or use the\n       wrong delimiter. For more details of the  perltest.sh  script  see  the\n       comments it contains.\n\n         #pop [<modifiers>]\n         #popcopy [<modifiers>]\n\n       These  commands  are used to manipulate the stack of compiled patterns,\n       as described in the section entitled  \"Saving  and  restoring  compiled\n       patterns\" below.\n\n         #save <filename>\n\n       This  command  is used to save a set of compiled patterns to a file, as\n       described in the section entitled \"Saving and restoring  compiled  pat-\n       terns\" below.\n\n         #subject <modifier-list>\n\n       This  command  sets  a default modifier list that applies to all subse-\n       quent subject lines. Modifiers on a subject line can change these  set-\n       tings.\n\n         #if CONDITION\n         ...\n         #endif\n\n       If CONDITION is true, then the command is printed, and its contents are\n       processed as normal, including printing the commandlines to the output.\n       If  CONDITION  is  false, then all lines between the \"#if\" and \"#endif\"\n       are skipped and not printed. The CONDITION can be any of the conditions\n       which  are  tested  by  the  \"-C\"  commandline  option  and  which  set\n       pcre2test's  exit  code  to  a boolean value. The CONDITION may also be\n       preceded by \"!\".\n\n\nMODIFIER SYNTAX\n\n       Modifier lists are used with both pattern and subject lines. Items in a\n       list are separated by commas followed by optional white space. Trailing\n       white space in a modifier list is ignored. Some modifiers may be  given\n       for  both patterns and subject lines, whereas others are valid only for\n       one or the other. Each modifier has  a  long  name,  for  example  \"an-\n       chored\",  and  some  of  them  must be followed by an equals sign and a\n       value, for example, \"offset=12\". Values cannot  contain  comma  charac-\n       ters,  but may contain spaces. Modifiers that do not take values may be\n       preceded by a minus sign to turn off a previous setting.\n\n       A few of the more common modifiers can also be specified as single let-\n       ters, for example \"i\" for \"caseless\". In documentation,  following  the\n       Perl convention, these are written with a slash (\"the /i modifier\") for\n       clarity.  Abbreviated  modifiers  must all be concatenated in the first\n       item of a modifier list. If the first item is not recognized as a  long\n       modifier  name, it is interpreted as a sequence of these abbreviations.\n       For example:\n\n         /abc/ig,newline=cr,jit=3\n\n       This is a pattern line whose modifier list starts with  two  one-letter\n       modifiers  (/i  and  /g).  The lower-case abbreviated modifiers are the\n       same as used in Perl.\n\n\nPATTERN SYNTAX\n\n       A pattern line must start with one of the following characters  (common\n       symbols, excluding pattern meta-characters):\n\n         / ! \" ' ` - = _ : ; , % & @ ~\n\n       This  is  interpreted  as the pattern's delimiter. A regular expression\n       may be continued over several input lines, in which  case  the  newline\n       characters are included within it. It is possible to include the delim-\n       iter  as  a literal within the pattern by escaping it with a backslash,\n       for example\n\n         /abc\\/def/\n\n       If you do this, the escape and the delimiter form part of the  pattern,\n       but since the delimiters are all non-alphanumeric, the inclusion of the\n       backslash  does not affect the pattern's interpretation. Note, however,\n       that this trick does not work within \\Q...\\E literal bracketing because\n       the backslash will itself be interpreted as a literal. If the terminat-\n       ing delimiter is immediately followed by a backslash, for example,\n\n         /abc/\\\n\n       a backslash is added to the end of the pattern. This is done to provide\n       a way of testing the error condition that arises if a pattern  finishes\n       with a backslash, because\n\n         /abc\\/\n\n       is  interpreted as the first line of a pattern that starts with \"abc/\",\n       causing pcre2test to read the next line as a continuation of the  regu-\n       lar expression.\n\n       A pattern can be followed by a modifier list (details below).\n\n\nSUBJECT LINE SYNTAX\n\n       Before each subject line is passed to pcre2_match(), pcre2_dfa_match(),\n       or  pcre2_jit_match(), leading and trailing white space is removed, and\n       the line is scanned for backslash escapes, unless  the  subject_literal\n       modifier  was set for the pattern. The following provide a means of en-\n       coding non-printing characters in a visible way:\n\n         \\a          alarm (BEL, \\x07)\n         \\b          backspace (\\x08)\n         \\e          escape (\\x27)\n         \\f          form feed (\\x0c)\n         \\n          newline (\\x0a)\n         \\N{U+hh...} unicode character (any number of hex digits)\n         \\r          carriage return (\\x0d)\n         \\t          tab (\\x09)\n         \\v          vertical tab (\\x0b)\n         \\ddd        octal number (up to 3 octal digits); represent a single\n                       code point unless larger than 255 with  the  8-bit  li-\n       brary\n         \\o{dd...}   octal number (any number of octal digits} representing a\n                       character in UTF mode or a code point\n         \\xhh        hexadecimal byte (up to 2 hex digits)\n         \\x{hh...}   hexadecimal number (up to 8 hex digits) representing a\n                       character in UTF mode or a code point\n\n       Invoking  \\N{U+hh...}  or  \\x{hh...} doesn't require the use of the utf\n       modifier on the pattern. It is always recognized. There may be any num-\n       ber of hexadecimal digits inside the braces; invalid values provoke er-\n       ror messages but when using \\N{U+hh...} with some invalid unicode char-\n       acters they will be accepted with a warning instead.\n\n       Note that even in UTF-8 mode, \\xhh (and depending of how  large,  \\ddd)\n       describe  one byte rather than one character; this makes it possible to\n       construct invalid UTF-8 sequences for testing purposes.  On  the  other\n       hand, \\x{hh...} is interpreted as a UTF-8 character in UTF-8 mode, only\n       generating  more  than  one  byte  if the value is greater than 127. To\n       avoid the ambiguity it is preferred to use \\N{U+hh...} when  describing\n       characters.  When  testing  the 8-bit library not in UTF-8 mode, \\x{hh}\n       generates one byte for values that could fit on it, and causes an error\n       for greater values.\n\n       When testing the 16-bit  library,  not  in  UTF-16  mode,  all  4-digit\n       \\x{hhhh}  values  are accepted. This makes it possible to construct in-\n       valid UTF-16 sequences for testing purposes.\n\n       When testing the 32-bit library, not in UTF-32 mode, all 4  to  8-digit\n       \\x{...}  values  are  accepted. This makes it possible to construct in-\n       valid UTF-32 sequences for testing purposes.\n\n       There is a special backslash sequence that specifies replication of one\n       or more characters:\n\n         \\[<characters>]{<count>}\n\n       This makes it possible to test long strings without having  to  provide\n       them as part of the file. For example:\n\n         \\[abc]{4}\n\n       is  converted to \"abcabcabcabc\". This feature does not support nesting.\n       To include a closing square bracket in the characters, code it as \\x5D.\n\n       A backslash followed by an equals sign marks the  end  of  the  subject\n       string and the start of a modifier list. For example:\n\n         abc\\=notbol,notempty\n\n       If  the  subject string is empty and \\= is followed by white space, the\n       line is treated as a comment line, and is not used  for  matching.  For\n       example:\n\n         \\= This is a comment.\n         abc\\= This is an invalid modifier list.\n\n       A  backslash  followed by any other non-alphanumeric character just es-\n       capes that character. A backslash followed by anything else  causes  an\n       error.  However,  if the very last character in the line is a backslash\n       (and there is no modifier list), it is ignored. This  gives  a  way  of\n       passing  an  empty line as data, since a real empty line terminates the\n       data input.\n\n       If the subject_literal modifier is set for a pattern, all subject lines\n       that follow are treated as literals, with no special treatment of back-\n       slashes.  No replication is possible, and any subject modifiers must be\n       set as defaults by a #subject command.\n\n\nPATTERN MODIFIERS\n\n       There are several types of modifier that can appear in  pattern  lines.\n       Except where noted below, they may also be used in #pattern commands. A\n       pattern's  modifier  list can add to or override default modifiers that\n       were set by a previous #pattern command.\n\n   Setting compilation options\n\n       The following modifiers set options for pcre2_compile(). Most  of  them\n       set  bits  in  the  options  argument of that function, but those whose\n       names start with PCRE2_EXTRA are additional options that are set in the\n       compile context.  Some of these options  have  single-letter  abbrevia-\n       tions.  There  is  special  handling  for /x: if a second x is present,\n       PCRE2_EXTENDED is converted into  PCRE2_EXTENDED_MORE  as  in  Perl.  A\n       third appearance adds PCRE2_EXTENDED as well, though this makes no dif-\n       ference to the way pcre2_compile() behaves. See pcre2api for a descrip-\n       tion of the effects of these options.\n\n             allow_empty_class         set PCRE2_ALLOW_EMPTY_CLASS\n             allow_lookaround_bsk      set PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK\n             allow_surrogate_escapes   set PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES\n             alt_bsux                  set PCRE2_ALT_BSUX\n             alt_circumflex            set PCRE2_ALT_CIRCUMFLEX\n             alt_extended_class        set PCRE2_ALT_EXTENDED_CLASS\n             alt_verbnames             set PCRE2_ALT_VERBNAMES\n             anchored                  set PCRE2_ANCHORED\n         /a  ascii_all                 set all ASCII options\n             ascii_bsd                 set PCRE2_EXTRA_ASCII_BSD\n             ascii_bss                 set PCRE2_EXTRA_ASCII_BSS\n             ascii_bsw                 set PCRE2_EXTRA_ASCII_BSW\n             ascii_digit               set PCRE2_EXTRA_ASCII_DIGIT\n             ascii_posix               set PCRE2_EXTRA_ASCII_POSIX\n             auto_callout              set PCRE2_AUTO_CALLOUT\n             bad_escape_is_literal     set PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL\n         /i  caseless                  set PCRE2_CASELESS\n         /r  caseless_restrict         set PCRE2_EXTRA_CASELESS_RESTRICT\n             dollar_endonly            set PCRE2_DOLLAR_ENDONLY\n         /s  dotall                    set PCRE2_DOTALL\n             dupnames                  set PCRE2_DUPNAMES\n             endanchored               set PCRE2_ENDANCHORED\n             escaped_cr_is_lf          set PCRE2_EXTRA_ESCAPED_CR_IS_LF\n         /x  extended                  set PCRE2_EXTENDED\n         /xx extended_more             set PCRE2_EXTENDED_MORE\n             extra_alt_bsux            set PCRE2_EXTRA_ALT_BSUX\n             firstline                 set PCRE2_FIRSTLINE\n             literal                   set PCRE2_LITERAL\n             match_line                set PCRE2_EXTRA_MATCH_LINE\n             match_invalid_utf         set PCRE2_MATCH_INVALID_UTF\n             match_unset_backref       set PCRE2_MATCH_UNSET_BACKREF\n             match_word                set PCRE2_EXTRA_MATCH_WORD\n         /m  multiline                 set PCRE2_MULTILINE\n             never_backslash_c         set PCRE2_NEVER_BACKSLASH_C\n             never_callout             set PCRE2_EXTRA_NEVER_CALLOUT\n             never_ucp                 set PCRE2_NEVER_UCP\n             never_utf                 set PCRE2_NEVER_UTF\n         /n  no_auto_capture           set PCRE2_NO_AUTO_CAPTURE\n             no_auto_possess           set PCRE2_NO_AUTO_POSSESS\n             no_bs0                    set PCRE2_EXTRA_NO_BS0\n             no_dotstar_anchor         set PCRE2_NO_DOTSTAR_ANCHOR\n             no_start_optimize         set PCRE2_NO_START_OPTIMIZE\n             no_utf_check              set PCRE2_NO_UTF_CHECK\n             python_octal              set PCRE2_EXTRA_PYTHON_OCTAL\n             turkish_casing            set PCRE2_EXTRA_TURKISH_CASING\n             ucp                       set PCRE2_UCP\n             ungreedy                  set PCRE2_UNGREEDY\n             use_offset_limit          set PCRE2_USE_OFFSET_LIMIT\n             utf                       set PCRE2_UTF\n\n       As well as turning on the PCRE2_UTF option, the utf modifier causes all\n       non-printing  characters  in  output  strings  to  be printed using the\n       \\x{hh...} notation. Otherwise, those less than 0x100 are output in  hex\n       without  the  curly brackets. Setting utf in 16-bit or 32-bit mode also\n       causes pattern and subject  strings  to  be  translated  to  UTF-16  or\n       UTF-32, respectively, before being passed to library functions.\n\n       The  following modifiers enable or disable performance optimizations by\n       calling pcre2_set_optimize() before invoking the regex compiler.\n\n             optimization_full      enable all optional optimizations\n             optimization_none      disable all optional optimizations\n             auto_possess           auto-possessify variable quantifiers\n             auto_possess_off       don't auto-possessify variable quantifiers\n             dotstar_anchor         anchor patterns starting with .*\n             dotstar_anchor_off     don't anchor patterns starting with .*\n             start_optimize         enable pre-scan of subject string\n             start_optimize_off     disable pre-scan of subject string\n\n       See the pcre2_set_optimize documentation for details on these optimiza-\n       tions.\n\n   Setting compilation controls\n\n       The following modifiers affect the compilation process or  request  in-\n       formation  about the pattern. There are single-letter abbreviations for\n       some that are heavily used in the test files.\n\n         /B  bincode                   show binary code without lengths\n             bsr=[anycrlf|unicode]     specify \\R handling\n             callout_info              show callout information\n             convert=<options>         request foreign pattern conversion\n             convert_glob_escape=c     set glob escape character\n             convert_glob_separator=c  set glob separator character\n             convert_length            set convert buffer length\n             debug                     same as info,fullbincode\n             expand                    expand repetition syntax in pattern\n             framesize                 show matching frame size\n             fullbincode               show binary code with lengths\n         /I  info                      show info about compiled pattern\n             hex                       unquoted characters are hexadecimal\n             jit[=<number>]            use JIT\n             jitfast                   use JIT fast path\n             jitverify                 verify JIT use\n             locale=<name>             use this locale\n             max_pattern_compiled      ) set maximum compiled pattern\n                        _length=<n>    )   length (bytes)\n             max_pattern_length=<n>    set maximum pattern length (code units)\n             max_varlookbehind=<n>     set maximum variable lookbehind length\n             memory                    show memory used\n             newline=<type>            set newline type\n             null_context              compile with a NULL context\n             null_pattern              pass pattern as NULL\n             parens_nest_limit=<n>     set maximum parentheses depth\n             posix                     use the POSIX API\n             posix_nosub               use the POSIX API with REG_NOSUB\n             push                      push compiled pattern onto the stack\n             pushcopy                  push a copy onto the stack\n             pushtablescopy            push a copy with tables onto the stack\n             stackguard=<number>       test the stackguard feature\n             subject_literal           treat all subject lines as literal\n             tables=[0|1|2|3]          select internal tables\n             use_length                do not zero-terminate the pattern\n             utf8_input                treat input as UTF-8\n\n       The effects of these modifiers are described in the following sections.\n\n   Newline and \\R handling\n\n       The bsr modifier specifies what \\R in a pattern should match. If it  is\n       set  to  \"anycrlf\",  \\R  matches  CR, LF, or CRLF only. If it is set to\n       \"unicode\", \\R matches any Unicode newline sequence. The default can  be\n       specified when PCRE2 is built; if it is not, the default is set to Uni-\n       code.\n\n       The  newline  modifier specifies which characters are to be interpreted\n       as newlines, both in the pattern and in subject lines. The type must be\n       one of CR, LF, CRLF, ANYCRLF, ANY, or NUL (in upper or lower case).\n\n   Information about a pattern\n\n       The debug modifier is a shorthand for info,fullbincode, requesting  all\n       available information.\n\n       The bincode modifier causes a representation of the compiled code to be\n       output  after compilation. This information does not contain length and\n       offset values, which ensures that the same output is generated for dif-\n       ferent internal link sizes and different code  unit  widths.  By  using\n       bincode,  the  same  regression tests can be used in different environ-\n       ments.\n\n       The fullbincode modifier, by contrast, does include length  and  offset\n       values.  This is used in a few special tests that run only for specific\n       code unit widths and link sizes, and is also useful for one-off tests.\n\n       The info modifier  requests  information  about  the  compiled  pattern\n       (whether  it  is anchored, has a fixed first character, and so on). The\n       information is obtained from the  pcre2_pattern_info()  function.  Here\n       are some typical examples:\n\n           re> /(?i)(^a|^b)/m,info\n         Capture group count = 1\n         Compile options: multiline\n         Overall options: caseless multiline\n         First code unit at start or follows newline\n         Subject length lower bound = 1\n\n           re> /(?i)abc/info\n         Capture group count = 0\n         Compile options: <none>\n         Overall options: caseless\n         First code unit = 'a' (caseless)\n         Last code unit = 'c' (caseless)\n         Subject length lower bound = 3\n\n       \"Compile  options\"  are those specified by modifiers; \"overall options\"\n       have added options that are taken or deduced from the pattern. If  both\n       sets  of  options are the same, just a single \"options\" line is output;\n       if there are no options, the line is  omitted.  \"First  code  unit\"  is\n       where  any  match must start; if there is more than one they are listed\n       as \"starting code units\". \"Last code unit\" is  the  last  literal  code\n       unit  that  must  be  present in any match. This is not necessarily the\n       last character. These lines are omitted if no starting or  ending  code\n       units   are   recorded.   The  subject  length  line  is  omitted  when\n       no_start_optimize is set because the minimum length is  not  calculated\n       when it can never be used.\n\n       The  framesize modifier shows the size, in bytes, of each storage frame\n       used by pcre2_match() for handling backtracking. The  size  depends  on\n       the  number  of capturing parentheses in the pattern. A vector of these\n       frames is used at matching time; its overall size  is  shown  when  the\n       heaframes_size subject modifier is set.\n\n       The  callout_info  modifier requests information about all the callouts\n       in the pattern. A list of them is output at the end of any other infor-\n       mation that is requested. For each callout, either its number or string\n       is given, followed by the item that follows it in the pattern.\n\n   Passing a NULL context\n\n       Normally, pcre2test passes a context block to pcre2_compile().  If  the\n       null_context  modifier  is  set,  however,  NULL is passed. This is for\n       testing that pcre2_compile() behaves correctly in this  case  (it  uses\n       default values).\n\n   Passing a NULL pattern\n\n       The  null_pattern  modifier  is for testing the behaviour of pcre2_com-\n       pile() when the pattern argument is NULL. The length  value  passed  is\n       the default PCRE2_ZERO_TERMINATED unless use_length is set.  Any length\n       other than zero causes an error.\n\n   Specifying pattern characters in hexadecimal\n\n       The  hex  modifier specifies that the characters of the pattern, except\n       for substrings enclosed in single or double quotes, are  to  be  inter-\n       preted  as  pairs  of hexadecimal digits. This feature is provided as a\n       way of creating patterns that contain binary zeros and other non-print-\n       ing characters. White space is permitted between pairs of  digits.  For\n       example, this pattern contains three characters:\n\n         /ab 32 59/hex\n\n       Parts  of  such  a  pattern are taken literally if quoted. This pattern\n       contains nine characters, only two of which are specified in  hexadeci-\n       mal:\n\n         /ab \"literal\" 32/hex\n\n       Either  single or double quotes may be used. There is no way of includ-\n       ing the delimiter within a substring. The hex and expand modifiers  are\n       mutually exclusive.\n\n   Specifying the pattern's length\n\n       By default, patterns are passed to the compiling functions as zero-ter-\n       minated  strings but can be passed by length instead of being zero-ter-\n       minated. The use_length modifier causes this to happen. Using a  length\n       happens  automatically  (whether  or not use_length is set) when hex is\n       set, because patterns specified in hexadecimal may contain  binary  ze-\n       ros.\n\n       If hex or use_length is used with the POSIX wrapper API (see \"Using the\n       POSIX  wrapper  API\" below), the REG_PEND extension is used to pass the\n       pattern's length.\n\n   Specifying a maximum for variable lookbehinds\n\n       Variable lookbehind assertions are supported only  if,  for  each  one,\n       there is a maximum length (in characters) that it can match. There is a\n       limit on this, whose default can be set at build time, with an ultimate\n       default    of    255.   The   max_varlookbehind   modifier   uses   the\n       pcre2_set_max_varlookbehind() function to change the limit. Lookbehinds\n       whose branches each match a fixed length are limited to  65535  charac-\n       ters per branch.\n\n   Specifying wide characters in 16-bit and 32-bit modes\n\n       In 16-bit and 32-bit modes, all input is automatically treated as UTF-8\n       and  translated  to  UTF-16 or UTF-32 when the utf modifier is set. For\n       testing the 16-bit and 32-bit libraries in non-UTF mode, the utf8_input\n       modifier can be used. It is mutually exclusive with  utf.  Input  lines\n       are interpreted as UTF-8 as a means of specifying wide characters. More\n       details are given in \"Input encoding\" above.\n\n   Generating long repetitive patterns\n\n       Some  tests use long patterns that are very repetitive. Instead of cre-\n       ating a very long input line for such a pattern, you can use a  special\n       repetition  feature,  similar  to  the  one described for subject lines\n       above. If the expand modifier is present on a  pattern,  parts  of  the\n       pattern that have the form\n\n         \\[<characters>]{<count>}\n\n       are expanded before the pattern is passed to pcre2_compile(). For exam-\n       ple, \\[AB]{6000} is expanded to \"ABAB...\" 6000 times. This construction\n       cannot  be  nested. An initial \"\\[\" sequence is recognized only if \"]{\"\n       followed by decimal digits and \"}\" is found later in  the  pattern.  If\n       not, the characters remain in the pattern unaltered. The expand and hex\n       modifiers are mutually exclusive.\n\n       If  part  of an expanded pattern looks like an expansion, but is really\n       part of the actual pattern, unwanted expansion can be avoided by giving\n       two values in the quantifier. For example, \\[AB]{6000,6000} is not rec-\n       ognized as an expansion item.\n\n       If the info modifier is set on an expanded pattern, the result  of  the\n       expansion is included in the information that is output.\n\n   JIT compilation\n\n       Just-in-time  (JIT)  compiling  is  a heavyweight optimization that can\n       greatly speed up pattern matching. See the pcre2jit  documentation  for\n       details.  JIT  compiling  happens, optionally, after a pattern has been\n       successfully compiled into an internal form. The JIT compiler  converts\n       this to optimized machine code. It needs to know whether the match-time\n       options PCRE2_PARTIAL_HARD and PCRE2_PARTIAL_SOFT are going to be used,\n       because  different  code  is generated for the different cases. See the\n       partial modifier in \"Subject Modifiers\" below for details of how  these\n       options are specified for each match attempt.\n\n       JIT compilation is requested by the jit pattern modifier, which may op-\n       tionally  be  followed by an equals sign and a number in the range 0 to\n       7.  The three bits that make up the number specify which of  the  three\n       JIT operating modes are to be compiled:\n\n         1  compile JIT code for non-partial matching\n         2  compile JIT code for soft partial matching\n         4  compile JIT code for hard partial matching\n\n       The possible values for the jit modifier are therefore:\n\n         0  disable JIT\n         1  normal matching only\n         2  soft partial matching only\n         3  normal and soft partial matching\n         4  hard partial matching only\n         6  soft and hard partial matching only\n         7  all three modes\n\n       If  no  number  is  given,  7 is assumed. The phrase \"partial matching\"\n       means a call to pcre2_match() with either the PCRE2_PARTIAL_SOFT or the\n       PCRE2_PARTIAL_HARD option set. Note that such a call may return a  com-\n       plete match; the options enable the possibility of a partial match, but\n       do  not  require it. Note also that if you request JIT compilation only\n       for partial matching (for example, jit=2) but do not  set  the  partial\n       modifier  on  a  subject line, that match will not use JIT code because\n       none was compiled for non-partial matching.\n\n       If JIT compilation is successful, the compiled JIT code will  automati-\n       cally be used when an appropriate type of match is run, except when in-\n       compatible  run-time  options  are specified. For more details, see the\n       pcre2jit documentation. See also the jitstack modifier below for a  way\n       of setting the size of the JIT stack.\n\n       If  the  jitfast  modifier is specified, matching is done using the JIT\n       \"fast path\" interface, pcre2_jit_match(), which skips some of the  san-\n       ity  checks that are done by pcre2_match(), and of course does not work\n       when JIT is not supported. If jitfast is specified without  jit,  jit=7\n       is assumed.\n\n       If  the jitverify modifier is specified, information about the compiled\n       pattern shows whether JIT compilation was or  was  not  successful.  If\n       jitverify  is  specified without jit, jit=7 is assumed. If JIT compila-\n       tion is successful when jitverify is set, the text \"(JIT)\" is added  to\n       the first output line after a match or non match when JIT-compiled code\n       was actually used in the match.\n\n   Setting a locale\n\n       The locale modifier must specify the name of a locale, for example:\n\n         /pattern/locale=fr_FR\n\n       The given locale is set, pcre2_maketables() is called to build a set of\n       character  tables for the locale, and this is then passed to pcre2_com-\n       pile() when compiling the regular expression. The same tables are  used\n       when  matching the following subject lines. The locale modifier applies\n       only to the pattern on which it appears, but can be given in a #pattern\n       command if a default is needed. Setting a locale and alternate  charac-\n       ter tables are mutually exclusive.\n\n   Showing pattern memory\n\n       The memory modifier causes the size in bytes of the memory used to hold\n       the  compiled  pattern  to be output. This does not include the size of\n       the pcre2_code block; it is just the actual compiled data. If the  pat-\n       tern  is  subsequently  passed to the JIT compiler, the size of the JIT\n       compiled code is also output. Here is an example:\n\n           re> /a(b)c/jit,memory\n         Memory allocation (code space): 21\n         Memory allocation (JIT code): 1910\n\n\n   Limiting nested parentheses\n\n       The parens_nest_limit modifier sets a limit  on  the  depth  of  nested\n       parentheses  in a pattern. Breaching the limit causes a compilation er-\n       ror.  The default for the library is  set  when  PCRE2  is  built,  but\n       pcre2test  sets  its  own default of 220, which is required for running\n       the standard test suite.\n\n   Limiting the pattern length\n\n       The max_pattern_length modifier sets a limit, in  code  units,  to  the\n       length of pattern that pcre2_compile() will accept. Breaching the limit\n       causes  a  compilation  error.  The  default  is  the  largest number a\n       PCRE2_SIZE variable can hold (essentially unlimited).\n\n   Limiting the size of a compiled pattern\n\n       The max_pattern_compiled_length modifier sets a limit, in bytes, to the\n       amount of memory used by a compiled pattern. Breaching the limit causes\n       a compilation error. The default is the  largest  number  a  PCRE2_SIZE\n       variable can hold (essentially unlimited).\n\n   Using the POSIX wrapper API\n\n       The  posix  and posix_nosub modifiers cause pcre2test to call PCRE2 via\n       the POSIX wrapper API rather than its native API. When  posix_nosub  is\n       used,  the  POSIX  option  REG_NOSUB  is passed to regcomp(). The POSIX\n       wrapper supports only the 8-bit library. Note that it  does  not  imply\n       POSIX matching semantics; for more detail see the pcre2posix documenta-\n       tion.  The  following  pattern  modifiers set options for the regcomp()\n       function:\n\n         caseless           REG_ICASE\n         multiline          REG_NEWLINE\n         dotall             REG_DOTALL     )\n         ungreedy           REG_UNGREEDY   ) These options are not part of\n         ucp                REG_UCP        )   the POSIX standard\n         utf                REG_UTF8       )\n\n       The regerror_buffsize modifier specifies a size for  the  error  buffer\n       that  is  passed to regerror() in the event of a compilation error. For\n       example:\n\n         /abc/posix,regerror_buffsize=20\n\n       This provides a means of testing the behaviour of regerror()  when  the\n       buffer  is  too  small  for the error message. If this modifier has not\n       been set, a large buffer is used.\n\n       The aftertext and allaftertext subject modifiers work as described  be-\n       low. All other modifiers are either ignored, with a warning message, or\n       cause an error.\n\n       The  pattern  is passed to regcomp() as a zero-terminated string by de-\n       fault, but if the use_length or hex modifiers are set, the REG_PEND ex-\n       tension is used to pass it by length.\n\n   Testing the stack guard feature\n\n       The stackguard modifier is used  to  test  the  use  of  pcre2_set_com-\n       pile_recursion_guard(),  a  function  that  is provided to enable stack\n       availability to be checked during compilation (see the  pcre2api  docu-\n       mentation  for  details).  If  the  number specified by the modifier is\n       greater than zero, pcre2_set_compile_recursion_guard() is called to set\n       up callback from pcre2_compile() to a local function. The  argument  it\n       receives  is  the current nesting parenthesis depth; if this is greater\n       than the value given by the modifier, non-zero is returned, causing the\n       compilation to be aborted.\n\n   Using alternative character tables\n\n       The value specified for the tables modifier must be one of  the  digits\n       0, 1, 2, or 3. It causes a specific set of built-in character tables to\n       be  passed to pcre2_compile(). This is used in the PCRE2 tests to check\n       behaviour with different character tables. The digit specifies the  ta-\n       bles as follows:\n\n         0   do not pass any special character tables\n         1   the default ASCII tables, as distributed in\n               pcre2_chartables.c.dist\n         2   a set of tables defining ISO 8859 characters\n         3   a set of tables loaded by the #loadtables command\n\n       In tables 2, some characters whose codes are greater than 128 are iden-\n       tified as letters, digits, spaces, etc. Tables 3 can be used only after\n       a  #loadtables  command has loaded them from a binary file. Setting al-\n       ternate character tables and a locale are mutually exclusive.\n\n   Setting certain match controls\n\n       The following modifiers are really subject modifiers, and are described\n       under \"Subject Modifiers\" below. However, they may  be  included  in  a\n       pattern's  modifier  list, in which case they are applied to every sub-\n       ject line that is processed with that pattern. These modifiers  do  not\n       affect the compilation process.\n\n             aftertext                   show text after match\n             allaftertext                show text after captures\n             allcaptures                 show all captures\n             allvector                   show the entire ovector\n             allusedtext                 show all consulted text\n             altglobal                   alternative global matching\n         /g  global                      global matching\n             heapframes_size             show match data heapframes size\n             jitstack=<n>                set size of JIT stack\n             mark                        show mark values\n             null_substitute_match_data  substitute with NULL match data\n             replace=<str>               specify a replacement string\n             startchar                   show starting character when relevant\n             substitute_callout          use substitution callouts\n             substitute_case_callout     use substitution case callouts\n             substitute_extended         use PCRE2_SUBSTITUTE_EXTENDED\n             substitute_literal          use PCRE2_SUBSTITUTE_LITERAL\n             substitute_matched          use PCRE2_SUBSTITUTE_MATCHED\n             substitute_overflow_length  use PCRE2_SUBSTITUTE_OVERFLOW_LENGTH\n             substitute_replacement_only use PCRE2_SUBSTITUTE_REPLACEMENT_ONLY\n             substitute_skip=<n>         skip substitution <n>\n             substitute_stop=<n>         skip substitution <n> and following\n             substitute_unknown_unset    use PCRE2_SUBSTITUTE_UNKNOWN_UNSET\n             substitute_unset_empty      use PCRE2_SUBSTITUTE_UNSET_EMPTY\n\n       These  modifiers may not appear in a #pattern command. If you want them\n       as defaults, set them in a #subject command.\n\n   Specifying literal subject lines\n\n       If the subject_literal modifier is present on a pattern, all  the  sub-\n       ject lines that it matches are taken as literal strings, with no inter-\n       pretation  of  backslashes. It is not possible to set subject modifiers\n       on such lines, but any that are set as defaults by a  #subject  command\n       are recognized.\n\n   Saving a compiled pattern\n\n       When  a  pattern with the push modifier is successfully compiled, it is\n       pushed onto a stack of compiled patterns,  and  pcre2test  expects  the\n       next  line to contain a new pattern (or a command) instead of a subject\n       line. This facility is used when saving compiled patterns to a file, as\n       described in the section entitled \"Saving and restoring  compiled  pat-\n       terns\"  below.  If pushcopy is used instead of push, a copy of the com-\n       piled pattern is stacked, leaving the original  as  current,  ready  to\n       match  the  following  input  lines. This provides a way of testing the\n       pcre2_code_copy() function.  The push and pushcopy  modifiers  are  in-\n       compatible  with compilation modifiers such as global that act at match\n       time. Any that are specified are ignored (for the stacked copy), with a\n       warning message, except for replace, which causes an error.  Note  that\n       jitverify,  which  is allowed, does not carry through to any subsequent\n       matching that uses a stacked pattern.\n\n   Testing foreign pattern conversion\n\n       The experimental foreign pattern conversion functions in PCRE2  can  be\n       tested  by  setting the convert modifier. Its argument is a colon-sepa-\n       rated list  of  options,  which  set  the  equivalent  option  for  the\n       pcre2_pattern_convert() function:\n\n         glob                    PCRE2_CONVERT_GLOB\n         glob_no_starstar        PCRE2_CONVERT_GLOB_NO_STARSTAR\n         glob_no_wild_separator  PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR\n         posix_basic             PCRE2_CONVERT_POSIX_BASIC\n         posix_extended          PCRE2_CONVERT_POSIX_EXTENDED\n         unset                   Unset all options\n\n       The \"unset\" value is useful for turning off a default that has been set\n       by a #pattern command. When one of these options is set, the input pat-\n       tern  is  passed  to pcre2_pattern_convert(). If the conversion is suc-\n       cessful, the result is reflected in  the  output  and  then  passed  to\n       pcre2_compile(). The normal utf and no_utf_check options, if set, cause\n       the  PCRE2_CONVERT_UTF  and  PCRE2_CONVERT_NO_UTF_CHECK  options  to be\n       passed to pcre2_pattern_convert().\n\n       By default, the conversion function is allowed to allocate a buffer for\n       its output. However, if the convert_length modifier is set to  a  value\n       greater  than zero, pcre2test passes a buffer of the given length. This\n       makes it possible to test the length check.\n\n       The convert_glob_escape and  convert_glob_separator  modifiers  can  be\n       used  to  specify the escape and separator characters for glob process-\n       ing, overriding the defaults, which are operating-system dependent.\n\n\nSUBJECT MODIFIERS\n\n       The modifiers that can appear in subject lines and the #subject command\n       are of two types.\n\n   Setting match options\n\n       The   following   modifiers   set   options   for   pcre2_match()    or\n       pcre2_dfa_match(). See pcre2api for a description of their effects.\n\n             anchored                   set PCRE2_ANCHORED\n             copy_matched_subject       set PCRE2_COPY_MATCHED_SUBJECT\n             endanchored                set PCRE2_ENDANCHORED\n             dfa_restart                set PCRE2_DFA_RESTART\n             dfa_shortest               set PCRE2_DFA_SHORTEST\n             disable_recurseloop_check  set PCRE2_DISABLE_RECURSELOOP_CHECK\n             no_jit                     set PCRE2_NO_JIT\n             no_utf_check               set PCRE2_NO_UTF_CHECK\n             notbol                     set PCRE2_NOTBOL\n             notempty                   set PCRE2_NOTEMPTY\n             notempty_atstart           set PCRE2_NOTEMPTY_ATSTART\n             noteol                     set PCRE2_NOTEOL\n             partial_hard (or ph)       set PCRE2_PARTIAL_HARD\n             partial_soft (or ps)       set PCRE2_PARTIAL_SOFT\n\n       The  partial matching modifiers are provided with abbreviations because\n       they appear frequently in tests.\n\n       If the posix or posix_nosub modifier was present on the pattern,  caus-\n       ing the POSIX wrapper API to be used, the only option-setting modifiers\n       that have any effect are notbol, notempty, and noteol, causing REG_NOT-\n       BOL,  REG_NOTEMPTY,  and  REG_NOTEOL,  respectively,  to  be  passed to\n       regexec(). The other modifiers are ignored, with a warning message.\n\n       There is one additional modifier that can be used with the POSIX  wrap-\n       per. It is ignored (with a warning) if used for non-POSIX matching.\n\n             posix_startend=<n>[:<m>]\n\n       This  causes  the  subject  string  to be passed to regexec() using the\n       REG_STARTEND option, which uses offsets to specify which  part  of  the\n       string  is  searched.  If  only  one number is given, the end offset is\n       passed as the end of the subject string. For more detail  of  REG_STAR-\n       TEND,  see the pcre2posix documentation. If the subject string contains\n       binary zeros (coded as escapes such as \\x{00}  because  pcre2test  does\n       not support actual binary zeros in its input), you must use posix_star-\n       tend to specify its length.\n\n   Setting match controls\n\n       The  following  modifiers  affect the matching process or request addi-\n       tional information. Some of them may also be  specified  on  a  pattern\n       line  (see  above), in which case they apply to every subject line that\n       is matched against that pattern, but can be overridden by modifiers  on\n       the subject.\n\n             aftertext                  show text after match\n             allaftertext               show text after captures\n             allcaptures                show all captures\n             allusedtext                show all consulted text (non-JIT only)\n             allvector                  show the entire ovector\n             altglobal                  alternative global matching\n             callout_capture            show captures at callout time\n             callout_data=<n>           set a value to pass via callouts\n             callout_error=<n>[:<m>]    control callout error\n             callout_extra              show extra callout information\n             callout_fail=<n>[:<m>]     control callout failure\n             callout_no_where           do not show position of a callout\n             callout_none               do not supply a callout function\n             copy=<number or name>      copy captured substring\n             depth_limit=<n>            set a depth limit\n             dfa                        use pcre2_dfa_match()\n             find_limits                find heap, match and depth limits\n             find_limits_noheap         find match and depth limits\n             get=<number or name>       extract captured substring\n             getall                     extract all captured substrings\n         /g  global                     global matching\n             heapframes_size            show match data heapframes size\n             heap_limit=<n>             set a limit on heap memory (Kbytes)\n             jitstack=<n>               set size of JIT stack\n             mark                       show mark values\n             match_limit=<n>            set a match limit\n             memory                     show heap memory usage\n             null_context               match with a NULL context\n             null_replacement           substitute with NULL replacement\n             null_subject               match with NULL subject\n             null_substitute_match_data substitute with NULL match data\n             offset=<n>                 set starting offset\n             offset_limit=<n>           set offset limit\n             ovector=<n>                set size of output vector\n             recursion_limit=<n>        obsolete synonym for depth_limit\n             replace=<str>              specify a replacement string\n             startchar                  show startchar when relevant\n             startoffset=<n>            same as offset=<n>\n             substitute_callout         use substitution callouts\n             substitute_case_callout    use substitution case callouts\n             substitute_extended        use PCRE2_SUBSTITUTE_EXTENDED\n             substitute_literal         use PCRE2_SUBSTITUTE_LITERAL\n             substitute_matched         use PCRE2_SUBSTITUTE_MATCHED\n             substitute_overflow_length use PCRE2_SUBSTITUTE_OVERFLOW_LENGTH\n             substitute_replacement_only use PCRE2_SUBSTITUTE_REPLACEMENT_ONLY\n             substitute_skip=<n>        skip substitution number n\n             substitute_stop=<n>        skip substitution number n and greater\n             substitute_subject=<str>    specify  a different subject for sub-\n       stitution\n             substitute_unknown_unset   use PCRE2_SUBSTITUTE_UNKNOWN_UNSET\n             substitute_unset_empty     use PCRE2_SUBSTITUTE_UNSET_EMPTY\n             zero_terminate             pass the subject as zero-terminated\n\n       The effects of these modifiers are described in the following sections.\n       When matching via the POSIX wrapper API, the  aftertext,  allaftertext,\n       and  ovector subject modifiers work as described below. All other modi-\n       fiers are either ignored, with a warning message, or cause an error.\n\n   Showing more text\n\n       The aftertext modifier requests that as well as outputting the part  of\n       the subject string that matched the entire pattern, pcre2test should in\n       addition output the remainder of the subject string. This is useful for\n       tests where the subject contains multiple copies of the same substring.\n       The  allaftertext  modifier  requests the same action for captured sub-\n       strings as well as the main matched substring. In each case the remain-\n       der is output on the following line with a plus character following the\n       capture number.\n\n       The allusedtext modifier requests that all the text that was  consulted\n       during  a  successful pattern match by the interpreter should be shown,\n       for both full and partial matches. This feature is  not  supported  for\n       JIT  matching,  and if requested with JIT it is ignored (with a warning\n       message). Setting this modifier affects the output if there is a  look-\n       behind  at  the start of a match, or, for a complete match, a lookahead\n       at the end, or if \\K is used in the pattern. Characters that precede or\n       follow the start and end of the actual match are indicated in the  out-\n       put by '<' or '>' characters underneath them.  Here is an example:\n\n           re> /(?<=pqr)abc(?=xyz)/\n         data> 123pqrabcxyz456\\=allusedtext\n          0: pqrabcxyz\n             <<<   >>>\n         data> 123pqrabcxy\\=ph,allusedtext\n         Partial match: pqrabcxy\n                        <<<\n\n       The  first, complete match shows that the matched string is \"abc\", with\n       the preceding and following strings \"pqr\" and \"xyz\"  having  been  con-\n       sulted  during  the match (when processing the assertions). The partial\n       match can indicate only the preceding string.\n\n       The startchar modifier requests that the  starting  character  for  the\n       match  be  indicated,  if  it  is different to the start of the matched\n       string. The only time when this occurs is when \\K has been processed as\n       part of the match. In this situation, the output for the matched string\n       is displayed from the starting character  instead  of  from  the  match\n       point, with circumflex characters under the earlier characters. For ex-\n       ample:\n\n           re> /abc\\Kxyz/\n         data> abcxyz\\=startchar\n          0: abcxyz\n             ^^^\n\n       Unlike  allusedtext, the startchar modifier can be used with JIT.  How-\n       ever, these two modifiers are mutually exclusive.\n\n   Showing the value of all capture groups\n\n       The allcaptures modifier requests that the values of all potential cap-\n       tured parentheses be output after a match. By default, only those up to\n       the highest one actually used in the match are output (corresponding to\n       the return code from pcre2_match()). Groups that did not take  part  in\n       the  match  are  output as \"<unset>\". This modifier is not relevant for\n       DFA matching (which does no capturing) and does not apply when  replace\n       is specified; it is ignored, with a warning message, if present.\n\n   Showing the entire ovector, for all outcomes\n\n       The allvector modifier requests that the entire ovector be shown, what-\n       ever the outcome of the match. Compare allcaptures, which shows only up\n       to  the maximum number of capture groups for the pattern, and then only\n       for a successful complete non-DFA match. This modifier, which acts  af-\n       ter  any  match  result, and also for DFA matching, provides a means of\n       checking that there are no unexpected modifications to ovector  fields.\n       Before  each match attempt, the ovector is filled with a special value,\n       and if this is found in  both  elements  of  a  capturing  pair,  \"<un-\n       changed>\"  is  output.  After  a  successful match, this applies to all\n       groups after the maximum capture group for the pattern. In other  cases\n       it  applies to the entire ovector. After a partial match, the first two\n       elements are the only ones that should be set. After a DFA  match,  the\n       amount  of  ovector  that is used depends on the number of matches that\n       were found.\n\n   Testing pattern callouts\n\n       A callout function is supplied when pcre2test calls the library  match-\n       ing  functions,  unless callout_none is specified. Its behaviour can be\n       controlled by various modifiers listed above  whose  names  begin  with\n       callout_.  Details  are given in the section entitled \"Callouts\" below.\n       Testing callouts from pcre2_substitute()  is  described  separately  in\n       \"Testing the substitution function\" below.\n\n   Finding all matches in a string\n\n       Searching for all possible matches within a subject can be requested by\n       the  global  or altglobal modifier. After finding a match, the matching\n       function is called again to search the remainder of  the  subject.  The\n       difference  between  global  and  altglobal is that the former uses the\n       start_offset argument to pcre2_match() or  pcre2_dfa_match()  to  start\n       searching  at  a new point within the entire string (which is what Perl\n       does), whereas the latter passes over a shortened subject. This makes a\n       difference to the matching process if the pattern begins with a lookbe-\n       hind assertion (including \\b or \\B).\n\n       If an empty string  is  matched,  the  next  match  is  done  with  the\n       PCRE2_NOTEMPTY_ATSTART  flag  set, in order to search for another, non-\n       empty, match at the same point in the subject. This  imitates  the  way\n       Perl handles such cases when using the /g modifier or the split() func-\n       tion.\n\n   Testing substring extraction functions\n\n       The  copy  and  get  modifiers  can  be  used  to  test  the pcre2_sub-\n       string_copy_xxx() and pcre2_substring_get_xxx() functions.  They can be\n       given more than once, and each can specify a capture group name or num-\n       ber, for example:\n\n          abcd\\=copy=1,copy=3,get=G1\n\n       If the #subject command is used to set default copy and/or  get  lists,\n       these  can  be unset by specifying a negative number to cancel all num-\n       bered groups and an empty name to cancel all named groups.\n\n       The getall modifier tests  pcre2_substring_list_get(),  which  extracts\n       all captured substrings.\n\n       If  the  subject line is successfully matched, the substrings extracted\n       by the convenience functions are output with  C,  G,  or  L  after  the\n       string  number  instead  of  a colon. This is in addition to the normal\n       full list. The string length (that is, the return from  the  extraction\n       function) is given in parentheses after each substring, followed by the\n       name when the extraction was by name.\n\n   Testing the substitution function\n\n       If  the  replace  modifier  is  set, the pcre2_substitute() function is\n       called instead of one of the matching functions (or after one  call  of\n       pcre2_match()  in  the case of PCRE2_SUBSTITUTE_MATCHED). Note that re-\n       placement strings cannot contain commas, because a comma signifies  the\n       end  of  a  modifier. This is not thought to be an issue in a test pro-\n       gram.\n\n       Specifying a completely empty replacement string  disables  this  modi-\n       fier.   However, it is possible to specify an empty replacement by pro-\n       viding a buffer length, as described below, for an otherwise empty  re-\n       placement.\n\n       Unlike  subject strings, pcre2test does not process replacement strings\n       for escape sequences. In UTF mode, a replacement string is  checked  to\n       see  if it is a valid UTF-8 string. If so, it is correctly converted to\n       a UTF string of the appropriate code unit width. If it is not  a  valid\n       UTF-8  string, the individual code units are copied directly. This pro-\n       vides a means of passing an invalid UTF-8 string for testing purposes.\n\n       The following modifiers set options (in additional to the normal  match\n       options) for pcre2_substitute():\n\n         global                      PCRE2_SUBSTITUTE_GLOBAL\n         substitute_extended         PCRE2_SUBSTITUTE_EXTENDED\n         substitute_literal          PCRE2_SUBSTITUTE_LITERAL\n         substitute_matched          PCRE2_SUBSTITUTE_MATCHED\n         substitute_overflow_length  PCRE2_SUBSTITUTE_OVERFLOW_LENGTH\n         substitute_replacement_only PCRE2_SUBSTITUTE_REPLACEMENT_ONLY\n         substitute_unknown_unset    PCRE2_SUBSTITUTE_UNKNOWN_UNSET\n         substitute_unset_empty      PCRE2_SUBSTITUTE_UNSET_EMPTY\n\n       See the pcre2api documentation for details of these options.\n\n       After  a  successful  substitution, the modified string is output, pre-\n       ceded by the number of replacements. This may be zero if there were  no\n       matches. Here is a simple example of a substitution test:\n\n         /abc/replace=xxx\n             =abc=abc=\n          1: =xxx=abc=\n             =abc=abc=\\=global\n          2: =xxx=xxx=\n\n       Subject  and replacement strings should be kept relatively short (fewer\n       than 256 characters) for substitution tests, as fixed-size buffers  are\n       used.  To  make it easy to test for buffer overflow, if the replacement\n       string starts with a number in square brackets, that number  is  passed\n       to  pcre2_substitute()  as  the size of the output buffer, with the re-\n       placement string starting at the next character.  Here  is  an  example\n       that tests the edge case:\n\n         /abc/\n             123abc123\\=replace=[10]XYZ\n          1: 123XYZ123\n             123abc123\\=replace=[9]XYZ\n         Failed: error -48: no more memory\n\n       The  default  action  of  pcre2_substitute()  is  to  return  PCRE2_ER-\n       ROR_NOMEMORY when the output buffer  is  too  small.  However,  if  the\n       PCRE2_SUBSTITUTE_OVERFLOW_LENGTH  option  is  set (by using the substi-\n       tute_overflow_length  modifier),  pcre2_substitute()  continues  to  go\n       through  the  motions  of  matching and substituting (but not doing any\n       callouts), in order to compute the size of  buffer  that  is  required.\n       When  this  happens,  pcre2test shows the required buffer length (which\n       includes space for the trailing zero) as part of the error message. For\n       example:\n\n         /abc/substitute_overflow_length\n             123abc123\\=replace=[9]XYZ\n         Failed: error -48: no more memory: 10 code units are needed\n\n       A replacement string is ignored with POSIX and DFA matching. Specifying\n       partial matching provokes an error return  (\"bad  option  value\")  from\n       pcre2_substitute().\n\n       The  substitute_subject  modifier  may  be  used to test the use of the\n       PCRE2 API, in which a client calls pcre2_match() followed by pcre2_sub-\n       stitute() with PCRE2_SUBSTITUTE_MATCHED, but the client performs an un-\n       expected and unsupported modification of the subject  buffer  in-place,\n       in between the match and substitution.\n\n   Testing substitute callouts\n\n       If the substitute_callout modifier is set, a substitution callout func-\n       tion  is set up. The null_context modifier must not be set, because the\n       address of the callout function is passed in a match context. When  the\n       callout  function  is  called (after each substitution), details of the\n       input and output strings are output. For example:\n\n         /abc/g,replace=<$0>,substitute_callout\n             abcdefabcpqr\n          1(1) Old 0 3 \"abc\" New 0 5 \"<abc>\"\n          2(1) Old 6 9 \"abc\" New 8 13 \"<abc>\"\n          2: <abc>def<abc>pqr\n\n       The first number on each callout line is  the  count  of  matches.  The\n       parenthesized number is the number of pairs that are set in the ovector\n       (that  is, one more than the number of capturing groups that were set).\n       Then are listed the offsets of the old substring, its contents, and the\n       same for the replacement.\n\n       By default, the substitution callout function returns zero,  which  ac-\n       cepts  the  replacement and causes matching to continue if /g was used.\n       Two further modifiers can be used to test other return values. If  sub-\n       stitute_skip  is  set to a value greater than zero the callout function\n       returns +1 for the match of that number, and similarly  substitute_stop\n       returns  -1.  These cause the replacement to be rejected, and -1 causes\n       no further matching to take place. If either of them are  set,  substi-\n       tute_callout is assumed. For example:\n\n         /abc/g,replace=<$0>,substitute_skip=1\n             abcdefabcpqr\n          1(1) Old 0 3 \"abc\" New 0 5 \"<abc> SKIPPED\"\n          2(1) Old 6 9 \"abc\" New 6 11 \"<abc>\"\n          2: abcdef<abc>pqr\n             abcdefabcpqr\\=substitute_stop=1\n          1(1) Old 0 3 \"abc\" New 0 5 \"<abc> STOPPED\"\n          1: abcdefabcpqr\n\n       If both are set for the same number, stop takes precedence. Only a sin-\n       gle skip or stop is supported, which is sufficient for testing that the\n       feature works.\n\n   Testing substitute case callouts\n\n       If  the  substitute_case_callout  modifier  is set, a substitution case\n       callout function is set up. The callout function  is  called  for  each\n       substituted chunk which is to be case-transformed.\n\n       The callout function passed is a fixed function with implementation for\n       certain  behaviours:  inputs which shrink when case-transformed; inputs\n       which grow; inputs with distinct upper/lower/titlecase forms. The char-\n       acters which are not special-cased for testing purposes are left unmod-\n       ified, as if they are caseless characters.\n\n   Setting the JIT stack size\n\n       The jitstack modifier provides a way of setting the maximum stack  size\n       that  is  used  by the just-in-time optimization code. It is ignored if\n       JIT optimization is not being used. The value is a number of  kibibytes\n       (units  of  1024  bytes). Setting zero reverts to the default of 32KiB.\n       Providing a stack that is larger than the default is necessary only for\n       very complicated patterns. If jitstack is set  non-zero  on  a  subject\n       line it overrides any value that was set on the pattern.\n\n   Setting heap, match, and depth limits\n\n       The  heap_limit,  match_limit, and depth_limit modifiers set the appro-\n       priate limits in the match context. These values are ignored  when  the\n       find_limits or find_limits_noheap modifier is specified.\n\n   Finding minimum limits\n\n       If  the  find_limits  modifier  is present on a subject line, pcre2test\n       calls the relevant matching function several times,  setting  different\n       values    in    the    match    context   via   pcre2_set_heap_limit(),\n       pcre2_set_match_limit(), or pcre2_set_depth_limit() until it finds  the\n       smallest  value  for  each  parameter that allows the match to complete\n       without a \"limit exceeded\" error. The match itself may succeed or fail.\n       An alternative modifier, find_limits_noheap, omits the heap limit. This\n       is used in the standard tests, because the minimum  heap  limit  varies\n       between  systems.  If  JIT is being used, only the match limit is rele-\n       vant, and the other two are automatically omitted.\n\n       When using this modifier, the pattern should not contain any limit set-\n       tings such as (*LIMIT_MATCH=...)  within  it.  If  such  a  setting  is\n       present and is lower than the minimum matching value, the minimum value\n       cannot  be  found because pcre2_set_match_limit() etc. are only able to\n       reduce the value of an in-pattern limit; they cannot increase it.\n\n       For non-DFA matching, the minimum depth_limit number is  a  measure  of\n       how much nested backtracking happens (that is, how deeply the pattern's\n       tree  is  searched).  In the case of DFA matching, depth_limit controls\n       the depth of recursive calls of the internal function that is used  for\n       handling pattern recursion, lookaround assertions, and atomic groups.\n\n       For non-DFA matching, the match_limit number is a measure of the amount\n       of backtracking that takes place, and learning the minimum value can be\n       instructive.  For  most  simple matches, the number is quite small, but\n       for patterns with very large numbers of matching possibilities, it  can\n       become  large very quickly with increasing length of subject string. In\n       the case of DFA matching, match_limit  controls  the  total  number  of\n       calls, both recursive and non-recursive, to the internal matching func-\n       tion, thus controlling the overall amount of computing resource that is\n       used.\n\n       For  both  kinds  of  matching,  the  heap_limit  number,  which  is in\n       kibibytes (units of 1024 bytes), limits the amount of heap memory  used\n       for matching.\n\n   Showing MARK names\n\n\n       The mark modifier causes the names from backtracking control verbs that\n       are  returned from calls to pcre2_match() to be displayed. If a mark is\n       returned for a match, non-match, or partial match, pcre2test shows  it.\n       For  a  match, it is on a line by itself, tagged with \"MK:\". Otherwise,\n       it is added to the non-match message.\n\n   Showing memory usage\n\n       The memory modifier causes pcre2test to log the sizes of all heap  mem-\n       ory   allocation  and  freeing  calls  that  occur  during  a  call  to\n       pcre2_match() or pcre2_dfa_match(). In the latter case, heap memory  is\n       used  only  when  a match requires more internal workspace that the de-\n       fault allocation on the stack, so in many cases there will be  no  out-\n       put.  No  heap  memory  is allocated during matching with JIT. For this\n       modifier to work, the null_context modifier must not be set on both the\n       pattern and the subject, though it can be set on one or the other.\n\n   Showing the heap frame overall vector size\n\n       The  heapframes_size   modifier   is   relevant   for   matches   using\n       pcre2_match() without JIT. After a match has run (whether successful or\n       not)  the  size,  in bytes, of the allocated heap frames vector that is\n       left attached to the match data block is shown. If the matching  action\n       involved  several  calls to pcre2_match() (for example, global matching\n       or for timing) only the final value is shown.\n\n       This modifier is ignored, with a warning, for POSIX  or  DFA  matching.\n       JIT matching does not use the heap frames vector, so the size is always\n       zero,  unless there was a previous non-JIT match. Note that specifing a\n       size of zero for the output vector (see below) causes pcre2test to free\n       its match data block (and associated heap frames vector) and allocate a\n       new one.\n\n   Setting a starting offset\n\n       The offset modifier sets an offset  in  the  subject  string  at  which\n       matching starts. Its value is a number of code units, not characters.\n\n   Setting an offset limit\n\n       The  offset_limit  modifier  sets  a limit for unanchored matches. If a\n       match cannot be found starting at or before this offset in the subject,\n       a \"no match\" return is given. The data value is a number of code units,\n       not characters. When this modifier is used, the use_offset_limit  modi-\n       fier must have been set for the pattern; if not, an error is generated.\n\n   Setting the size of the output vector\n\n       The  ovector  modifier applies only to the subject line in which it ap-\n       pears, though of course it can also be used to set a default in a #sub-\n       ject command. It specifies the number of  pairs  of  offsets  that  are\n       available for storing matching information. The default is 15.\n\n       A  value of zero is useful when testing the POSIX API because it causes\n       regexec() to be called with a NULL capture vector. When not testing the\n       POSIX API, a value of  zero  is  used  to  cause  pcre2_match_data_cre-\n       ate_from_pattern()  to  be called, in order to create a new match block\n       of exactly the right size for the pattern. (It is not possible to  cre-\n       ate  a match block with a zero-length ovector; there is always at least\n       one pair of offsets.) The old match data block is freed.\n\n   Passing the subject as zero-terminated\n\n       By default, the subject string is passed to a native API matching func-\n       tion with its correct length. In order to test the facility for passing\n       a zero-terminated string, the zero_terminate modifier is  provided.  It\n       causes  the length to be passed as PCRE2_ZERO_TERMINATED. When matching\n       via the POSIX interface, this modifier is ignored, with a warning.\n\n       When testing pcre2_substitute(), this modifier also has the  effect  of\n       passing the replacement string as zero-terminated.\n\n   Passing a NULL context, subject, or replacement\n\n       Normally,   pcre2test   passes   a   context  block  to  pcre2_match(),\n       pcre2_dfa_match(), pcre2_jit_match()  or  pcre2_substitute().   If  the\n       null_context  modifier  is  set,  however,  NULL is passed. This is for\n       testing that the matching and substitution functions  behave  correctly\n       in  this  case  (they use default values). This modifier cannot be used\n       with the find_limits, find_limits_noheap, or  substitute_callout  modi-\n       fiers.\n\n       Similarly,  for  testing purposes, if the null_subject or null_replace-\n       ment modifier is set, the subject or replacement  string  pointers  are\n       passed as NULL, respectively, to the relevant functions.\n\n\nTHE ALTERNATIVE MATCHING FUNCTION\n\n       By  default,  pcre2test  uses  the  standard  PCRE2  matching function,\n       pcre2_match() to match each subject line. PCRE2 also supports an alter-\n       native matching function, pcre2_dfa_match(), which operates in  a  dif-\n       ferent  way, and has some restrictions. The differences between the two\n       functions are described in the pcre2matching documentation.\n\n       If the dfa modifier is set, the alternative matching function is  used.\n       This  function  finds all possible matches at a given point in the sub-\n       ject. If, however, the dfa_shortest modifier is set,  processing  stops\n       after  the  first  match is found. This is always the shortest possible\n       match.\n\n\nDEFAULT OUTPUT FROM pcre2test\n\n       This section describes the output when the  normal  matching  function,\n       pcre2_match(), is being used.\n\n       When  a  match  succeeds,  pcre2test  outputs the list of captured sub-\n       strings, starting with number 0 for the string that matched  the  whole\n       pattern.  Otherwise, it outputs \"No match\" when the return is PCRE2_ER-\n       ROR_NOMATCH,  or  \"Partial  match:\"  followed by the partially matching\n       substring when the return is PCRE2_ERROR_PARTIAL. (Note  that  this  is\n       the  entire  substring  that was inspected during the partial match; it\n       may include characters before the actual match start  if  a  lookbehind\n       assertion, \\K, \\b, or \\B was involved.)\n\n       For any other return, pcre2test outputs the PCRE2 negative error number\n       and  a  short  descriptive  phrase. If the error is a failed UTF string\n       check, the code unit offset of the start of the  failing  character  is\n       also output. Here is an example of an interactive pcre2test run.\n\n         $ pcre2test\n         PCRE2 version 10.22 2016-07-29\n\n           re> /^abc(\\d+)/\n         data> abc123\n          0: abc123\n          1: 123\n         data> xyz\n         No match\n\n       Unset capturing substrings that are not followed by one that is set are\n       not shown by pcre2test unless the allcaptures modifier is specified. In\n       the following example, there are two capturing substrings, but when the\n       first  data  line is matched, the second, unset substring is not shown.\n       An \"internal\" unset substring is shown as \"<unset>\", as for the  second\n       data line.\n\n           re> /(a)|(b)/\n         data> a\n          0: a\n          1: a\n         data> b\n          0: b\n          1: <unset>\n          2: b\n\n       If  the strings contain any non-printing characters, they are output as\n       \\xhh escapes if the value is less than 256 and UTF  mode  is  not  set.\n       Otherwise they are output as \\x{hh...} escapes. See below for the defi-\n       nition  of  non-printing  characters. If the aftertext modifier is set,\n       the output for substring 0 is followed  by  the  rest  of  the  subject\n       string, identified by \"0+\" like this:\n\n           re> /cat/aftertext\n         data> cataract\n          0: cat\n          0+ aract\n\n       If global matching is requested, the results of successive matching at-\n       tempts are output in sequence, like this:\n\n           re> /\\Bi(\\w\\w)/g\n         data> Mississippi\n          0: iss\n          1: ss\n          0: iss\n          1: ss\n          0: ipp\n          1: pp\n\n       \"No  match\" is output only if the first match attempt fails. Here is an\n       example of a failure message (the offset 4 that  is  specified  by  the\n       offset modifier is past the end of the subject string):\n\n           re> /xyz/\n         data> xyz\\=offset=4\n         Error -24 (bad offset value)\n\n       Note that whereas patterns can be continued over several lines (a plain\n       \">\"  prompt  is used for continuations), subject lines may not. However\n       newlines can be included in a subject by means of the \\n escape (or \\r,\n       \\r\\n, etc., depending on the newline sequence setting).\n\n\nOUTPUT FROM THE ALTERNATIVE MATCHING FUNCTION\n\n       When the alternative matching function, pcre2_dfa_match(), is used, the\n       output consists of a list of all the matches that start  at  the  first\n       point in the subject where there is at least one match. For example:\n\n           re> /(tang|tangerine|tan)/\n         data> yellow tangerine\\=dfa\n          0: tangerine\n          1: tang\n          2: tan\n\n       Using  the normal matching function on this data finds only \"tang\". The\n       longest matching string is always given first (and numbered zero).  Af-\n       ter  a PCRE2_ERROR_PARTIAL return, the output is \"Partial match:\", fol-\n       lowed by the partially matching substring. Note that this is the entire\n       substring that was inspected during the partial match; it  may  include\n       characters before the actual match start if a lookbehind assertion, \\b,\n       or \\B was involved. (\\K is not supported for DFA matching.)\n\n       If global matching is requested, the search for further matches resumes\n       at the end of the longest match. For example:\n\n           re> /(tang|tangerine|tan)/g\n         data> yellow tangerine and tangy sultana\\=dfa\n          0: tangerine\n          1: tang\n          2: tan\n          0: tang\n          1: tan\n          0: tan\n\n       The  alternative  matching function does not support substring capture,\n       so the modifiers that are concerned with captured  substrings  are  not\n       relevant.\n\n\nRESTARTING AFTER A PARTIAL MATCH\n\n       When  the  alternative matching function has given the PCRE2_ERROR_PAR-\n       TIAL return, indicating that the subject partially matched the pattern,\n       you can restart the match with additional subject data by means of  the\n       dfa_restart modifier. For example:\n\n           re> /^\\d?\\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\d\\d$/\n         data> 23ja\\=ps,dfa\n         Partial match: 23ja\n         data> n05\\=dfa,dfa_restart\n          0: n05\n\n       For  further  information  about partial matching, see the pcre2partial\n       documentation.\n\n\nCALLOUTS\n\n       If the pattern contains any callout requests, pcre2test's callout func-\n       tion is called during matching unless callout_none is  specified.  This\n       works with both matching functions, and with JIT, though there are some\n       differences  in behaviour. The output for callouts with numerical argu-\n       ments and those with string arguments is slightly different.\n\n   Callouts with numerical arguments\n\n       By default, the callout function displays the callout number, the start\n       and current positions in the subject text at the callout time, and  the\n       next pattern item to be tested. For example:\n\n         --->pqrabcdef\n           0    ^  ^     \\d\n\n       This  output  indicates  that callout number 0 occurred for a match at-\n       tempt starting at the fourth character of the subject string, when  the\n       pointer  was  at  the seventh character, and when the next pattern item\n       was \\d. Just one circumflex is output if the start  and  current  posi-\n       tions are the same, or if the current position precedes the start posi-\n       tion, which can happen if the callout is in a lookbehind assertion.\n\n       Callouts numbered 255 are assumed to be automatic callouts, inserted as\n       a result of the auto_callout pattern modifier. In this case, instead of\n       showing  the  callout  number, the offset in the pattern, preceded by a\n       plus, is output. For example:\n\n           re> /\\d?[A-E]\\*/auto_callout\n         data> E*\n         --->E*\n          +0 ^      \\d?\n          +3 ^      [A-E]\n          +8 ^^     \\*\n         +10 ^ ^\n          0: E*\n\n       If a pattern contains (*MARK) items, an additional line is output when-\n       ever a change of latest mark is passed to the callout function. For ex-\n       ample:\n\n           re> /a(*MARK:X)bc/auto_callout\n         data> abc\n         --->abc\n          +0 ^       a\n          +1 ^^      (*MARK:X)\n         +10 ^^      b\n         Latest Mark: X\n         +11 ^ ^     c\n         +12 ^  ^\n          0: abc\n\n       The mark changes between matching \"a\" and \"b\", but stays the  same  for\n       the  rest  of  the match, so nothing more is output. If, as a result of\n       backtracking, the mark reverts to being unset, the  text  \"<unset>\"  is\n       output.\n\n   Callouts with string arguments\n\n       The output for a callout with a string argument is similar, except that\n       instead  of outputting a callout number before the position indicators,\n       the callout string and its offset in the pattern string are output  be-\n       fore  the  reflection  of the subject string, and the subject string is\n       reflected for each callout. For example:\n\n           re> /^ab(?C'first')cd(?C\"second\")ef/\n         data> abcdefg\n         Callout (7): 'first'\n         --->abcdefg\n             ^ ^         c\n         Callout (20): \"second\"\n         --->abcdefg\n             ^   ^       e\n          0: abcdef\n\n\n   Callout modifiers\n\n       The callout function in pcre2test returns zero (carry on  matching)  by\n       default,  but  you can use a callout_fail modifier in a subject line to\n       change this and other parameters of the callout (see below).\n\n       If the callout_capture modifier is set, the current captured groups are\n       output when a callout occurs. This is useful only for non-DFA matching,\n       as pcre2_dfa_match() does not support capturing,  so  no  captures  are\n       ever shown.\n\n       The normal callout output, showing the callout number or pattern offset\n       (as  described above) is suppressed if the callout_no_where modifier is\n       set.\n\n       When using the interpretive  matching  function  pcre2_match()  without\n       JIT,  setting  the callout_extra modifier causes additional output from\n       pcre2test's callout function to be generated. For the first callout  in\n       a  match  attempt at a new starting position in the subject, \"New match\n       attempt\" is output. If there has been a backtrack since the last  call-\n       out (or start of matching if this is the first callout), \"Backtrack\" is\n       output,  followed  by  \"No other matching paths\" if the backtrack ended\n       the previous match attempt. For example:\n\n          re> /(a+)b/auto_callout,no_start_optimize,no_auto_possess\n         data> aac\\=callout_extra\n         New match attempt\n         --->aac\n          +0 ^       (\n          +1 ^       a+\n          +3 ^ ^     )\n          +4 ^ ^     b\n         Backtrack\n         --->aac\n          +3 ^^      )\n          +4 ^^      b\n         Backtrack\n         No other matching paths\n         New match attempt\n         --->aac\n          +0  ^      (\n          +1  ^      a+\n          +3  ^^     )\n          +4  ^^     b\n         Backtrack\n         No other matching paths\n         New match attempt\n         --->aac\n          +0   ^     (\n          +1   ^     a+\n         Backtrack\n         No other matching paths\n         New match attempt\n         --->aac\n          +0    ^    (\n          +1    ^    a+\n         No match\n\n       Notice that various optimizations must be turned off if  you  want  all\n       possible  matching  paths  to  be  scanned. If no_start_optimize is not\n       used, there is an immediate \"no match\", without any  callouts,  because\n       the  starting  optimization  fails to find \"b\" in the subject, which it\n       knows must be present for any match. If no_auto_possess  is  not  used,\n       the  \"a+\"  item is turned into \"a++\", which reduces the number of back-\n       tracks.\n\n       The callout_extra modifier has no effect if used with the DFA  matching\n       function, or with JIT.\n\n   Return values from callouts\n\n       The  default  return  from  the  callout function is zero, which allows\n       matching to continue. The callout_fail modifier can be given one or two\n       numbers. If there is only one number, 1 is returned instead of 0 (caus-\n       ing matching to backtrack) when a callout of that number is reached. If\n       two numbers (<n>:<m>) are given, 1 is  returned  when  callout  <n>  is\n       reached  and  there  have been at least <m> callouts. The callout_error\n       modifier is similar, except that PCRE2_ERROR_CALLOUT is returned, caus-\n       ing the entire matching process to be aborted. If both these  modifiers\n       are  set  for  the same callout number, callout_error takes precedence.\n       Note that callouts with string arguments are always  given  the  number\n       zero.\n\n       The  callout_data  modifier can be given an unsigned or a negative num-\n       ber.  This is set as the \"user data\" that is  passed  to  the  matching\n       function,  and  passed  back  when the callout function is invoked. Any\n       value other than zero is used as  a  return  from  pcre2test's  callout\n       function.\n\n       Inserting callouts can be helpful when using pcre2test to check compli-\n       cated  regular expressions. For further information about callouts, see\n       the pcre2callout documentation.\n\n\nNON-PRINTING CHARACTERS\n\n       When pcre2test is outputting text in the compiled version of a pattern,\n       bytes other than 32-126 are always treated as  non-printing  characters\n       and are therefore shown as hex escapes.\n\n       When  pcre2test  is outputting text that is a matched part of a subject\n       string, it behaves in the same way, unless a different locale has  been\n       set  for the pattern (using the locale modifier). In this case, the is-\n       print() function is used to distinguish printing and non-printing char-\n       acters.\n\n\nSAVING AND RESTORING COMPILED PATTERNS\n\n       It is possible to save compiled patterns on disc or elsewhere, and  re-\n       load  them  later, subject to a number of restrictions. JIT data cannot\n       be saved. The host on which the patterns are reloaded must  be  running\n       the same version of PCRE2, with the same code unit width, and must also\n       have  the  same  endianness,  pointer width and PCRE2_SIZE type. Before\n       compiled patterns can be saved they must be serialized, that  is,  con-\n       verted  to a stream of bytes. A single byte stream may contain any num-\n       ber of compiled patterns, but they must all use the same character  ta-\n       bles.  A  single copy of the tables is included in the byte stream (its\n       size is 1088 bytes).\n\n       The functions whose names begin with pcre2_serialize_ are used for  se-\n       rializing  and de-serializing. They are described in the pcre2serialize\n       documentation. In this section we describe the  features  of  pcre2test\n       that can be used to test these functions.\n\n       Note  that  \"serialization\" in PCRE2 does not convert compiled patterns\n       to an abstract format like Java or .NET. It  just  makes  a  reloadable\n       byte code stream.  Hence the restrictions on reloading mentioned above.\n\n       In  pcre2test,  when  a pattern with push modifier is successfully com-\n       piled, it is pushed onto a stack of compiled  patterns,  and  pcre2test\n       expects  the next line to contain a new pattern (or command) instead of\n       a subject line. By contrast, the pushcopy modifier causes a copy of the\n       compiled pattern to be stacked, leaving the original available for  im-\n       mediate  matching.  By using push and/or pushcopy, a number of patterns\n       can be compiled and retained. These  modifiers  are  incompatible  with\n       posix, and control modifiers that act at match time are ignored (with a\n       message)  for the stacked patterns. The jitverify modifier applies only\n       at compile time.\n\n       The command\n\n         #save <filename>\n\n       causes all the stacked patterns to be serialized and the result written\n       to the named file. Afterwards, all the stacked patterns are freed.  The\n       command\n\n         #load <filename>\n\n       reads  the  data in the file, and then arranges for it to be de-serial-\n       ized, with the resulting compiled patterns added to the pattern  stack.\n       The  pattern  on the top of the stack can be retrieved by the #pop com-\n       mand, which must be followed by  lines  of  subjects  that  are  to  be\n       matched  with  the pattern, terminated as usual by an empty line or end\n       of file. This command may be followed by  a  modifier  list  containing\n       only  control  modifiers that act after a pattern has been compiled. In\n       particular, hex, posix, posix_nosub, push, and  pushcopy  are  not  al-\n       lowed,  nor  are  any option-setting modifiers.  The JIT modifiers are,\n       however permitted. Here is an example that saves and reloads  two  pat-\n       terns.\n\n         /abc/push\n         /xyz/push\n         #save tempfile\n         #load tempfile\n         #pop info\n         xyz\n\n         #pop jit,bincode\n         abc\n\n       If  jitverify  is  used with #pop, it does not automatically imply jit,\n       which is different behaviour from when it is used on a pattern.\n\n       The #popcopy command is analogous to the pushcopy modifier in  that  it\n       makes current a copy of the topmost stack pattern, leaving the original\n       still on the stack.\n\n\nSEE ALSO\n\n       pcre2(3),  pcre2api(3),  pcre2callout(3),  pcre2jit,  pcre2matching(3),\n       pcre2partial(d), pcre2pattern(3), pcre2serialize(3).\n\n\nAUTHOR\n\n       Philip Hazel\n       Retired from University Computing Service\n       Cambridge, England.\n\n\nREVISION\n\n       Last updated: 12 October 2025\n       Copyright (c) 1997-2024 University of Cambridge.\n\n\nPCRE2 10.48-DEV                 12 October 2025                   PCRE2TEST(1)\n"
  },
  {
    "path": "doc/pcre2unicode.3",
    "content": ".TH PCRE2UNICODE 3 \"27 November 2024\" \"PCRE2 10.48-DEV\"\n.SH NAME\nPCRE2 - Perl-compatible regular expressions (revised API)\n.SH \"UNICODE AND UTF SUPPORT\"\n.rs\n.sp\nPCRE2 is normally built with Unicode support, though if you do not need it, you\ncan build it without, in which case the library will be smaller. With Unicode\nsupport, PCRE2 has knowledge of Unicode character properties and can process\nstrings of text in UTF-8, UTF-16, and UTF-32 format (depending on the code unit\nwidth), but this is not the default. Unless specifically requested, PCRE2\ntreats each code unit in a string as one character.\n.P\nThere are two ways of telling PCRE2 to switch to UTF mode, where characters may\nconsist of more than one code unit and the range of values is constrained. The\nprogram can call\n.\\\" HREF\n\\fBpcre2_compile()\\fP\n.\\\"\nwith the PCRE2_UTF option, or the pattern may start with the sequence (*UTF).\nHowever, the latter facility can be locked out by the PCRE2_NEVER_UTF option.\nThat is, the programmer can prevent the supplier of the pattern from switching\nto UTF mode.\n.P\nNote that the PCRE2_MATCH_INVALID_UTF option (see\n.\\\" HTML <a href=\"#matchinvalid\">\n.\\\" </a>\nbelow)\n.\\\"\nforces PCRE2_UTF to be set.\n.P\nIn UTF mode, both the pattern and any subject strings that are matched against\nit are treated as UTF strings instead of strings of individual one-code-unit\ncharacters. There are also some other changes to the way characters are\nhandled, as documented below.\n.\n.\n.SH \"UNICODE PROPERTY SUPPORT\"\n.rs\n.sp\nWhen PCRE2 is built with Unicode support, the escape sequences \\ep{..},\n\\eP{..}, and \\eX can be used. This is not dependent on the PCRE2_UTF setting.\nThe Unicode properties that can be tested are a subset of those that Perl\nsupports. Currently they are limited to the general category properties such as\nLu for an upper case letter or Nd for a decimal number, the derived properties\nAny and Lc (synonym L&), the Unicode script names such as Arabic or Han,\nBidi_Class, Bidi_Control, and a few binary properties.\n.P\nThe full lists are given in the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\nand\n.\\\" HREF\n\\fBpcre2syntax\\fP\n.\\\"\ndocumentation. In general, only the short names for properties are supported.\nFor example, \\ep{L} matches a letter. Its longer synonym, \\ep{Letter}, is not\nsupported. Furthermore, in Perl, many properties may optionally be prefixed by\n\"Is\", for compatibility with Perl 5.6. PCRE2 does not support this.\n.\n.\n.SH \"WIDE CHARACTERS AND UTF MODES\"\n.rs\n.sp\nCode points less than 256 can be specified in patterns by either braced or\nunbraced hexadecimal escape sequences (for example, \\ex{b3} or \\exb3). Larger\nvalues have to use braced sequences. Unbraced octal code points up to \\e777 are\nalso recognized; larger ones can be coded using \\eo{...}.\n.P\nThe escape sequence \\eN{U+<hex digits>} is recognized as another way of\nspecifying a Unicode character by code point in a UTF mode. It is not allowed\nin non-UTF mode.\n.P\nIn UTF mode, repeat quantifiers apply to complete UTF characters, not to\nindividual code units.\n.P\nIn UTF mode, the dot metacharacter matches one UTF character instead of a\nsingle code unit.\n.P\nIn UTF mode, capture group names are not restricted to ASCII, and may contain\nany Unicode letters and decimal digits, as well as underscore.\n.P\nThe escape sequence \\eC can be used to match a single code unit in UTF mode,\nbut its use can lead to some strange effects because it breaks up multi-unit\ncharacters (see the description of \\eC in the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation). For this reason, there is a build-time option that disables\nsupport for \\eC completely. There is also a less draconian compile-time option\nfor locking out the use of \\eC when a pattern is compiled.\n.P\nThe use of \\eC is not supported by the alternative matching function\n\\fBpcre2_dfa_match()\\fP when in UTF-8 or UTF-16 mode, that is, when a character\nmay consist of more than one code unit. The use of \\eC in these modes provokes\na match-time error. Also, the JIT optimization does not support \\eC in these\nmodes. If JIT optimization is requested for a UTF-8 or UTF-16 pattern that\ncontains \\eC, it will not succeed, and so when \\fBpcre2_match()\\fP is called,\nthe matching will be carried out by the interpretive function.\n.P\nThe character escapes \\eb, \\eB, \\ed, \\eD, \\es, \\eS, \\ew, and \\eW correctly test\ncharacters of any code value, but, by default, the characters that PCRE2\nrecognizes as digits, spaces, or word characters remain the same set as in\nnon-UTF mode, all with code points less than 256. This remains true even when\nPCRE2 is built to include Unicode support, because to do otherwise would slow\ndown matching in many common cases. Note that this also applies to \\eb\nand \\eB, because they are defined in terms of \\ew and \\eW. If you want\nto test for a wider sense of, say, \"digit\", you can use explicit Unicode\nproperty tests such as \\ep{Nd}. Alternatively, if you set the PCRE2_UCP option,\nthe way that the character escapes work is changed so that Unicode properties\nare used to determine which characters match, though there are some options\nthat suppress this for individual escapes. For details see the section on\n.\\\" HTML <a href=\"pcre2pattern.html#genericchartypes\">\n.\\\" </a>\ngeneric character types\n.\\\"\nin the\n.\\\" HREF\n\\fBpcre2pattern\\fP\n.\\\"\ndocumentation.\n.P\nLike the escapes, characters that match the POSIX named character classes are\nall low-valued characters unless the PCRE2_UCP option is set, but there is an\noption to override this.\n.P\nIn contrast to the character escapes and character classes, the special\nhorizontal and vertical white space escapes (\\eh, \\eH, \\ev, and \\eV) do match\nall the appropriate Unicode characters, whether or not PCRE2_UCP is set.\n.\n.\n.SH \"UNICODE CASE-EQUIVALENCE\"\n.rs\n.sp\nIf either PCRE2_UTF or PCRE2_UCP is set, upper/lower case processing makes use\nof Unicode properties except for characters whose code points are less than 128\nand that have at most two case-equivalent values. For these, a direct table\nlookup is used for speed. A few Unicode characters such as Greek sigma have\nmore than two code points that are case-equivalent, and these are treated\nspecially. Setting PCRE2_UCP without PCRE2_UTF allows Unicode-style case\nprocessing for non-UTF character encodings such as UCS-2.\n.P\nThere are two ASCII characters (S and K) that, in addition to their ASCII lower\ncase equivalents, have a non-ASCII one as well (long S and Kelvin sign).\nRecognition of these non-ASCII characters as case-equivalent to their ASCII\ncounterparts can be disabled by setting the PCRE2_EXTRA_CASELESS_RESTRICT\noption. When this is set, all characters in a case equivalence must either be\nASCII or non-ASCII; there can be no mixing.\n.sp\n    Without PCRE2_EXTRA_CASELESS_RESTRICT:\n      'k' = 'K' = U+212A (Kelvin sign)\n      's' = 'S' = U+017F (long S)\n    With PCRE2_EXTRA_CASELESS_RESTRICT:\n      'k' = 'K'\n      U+212A (Kelvin sign)  only case-equivalent to itself\n      's' = 'S'\n      U+017F (long S)       only case-equivalent to itself\n.P\nOne language family, Turkish and Azeri, has its own case-insensitivity rules,\nwhich can be selected by setting PCRE2_EXTRA_TURKISH_CASING. This alters the\nbehaviour of the 'i', 'I', U+0130 (capital I with dot above), and U+0131\n(small dotless i) characters.\n.sp\n    Without PCRE2_EXTRA_TURKISH_CASING:\n      'i' = 'I'\n      U+0130 (capital I with dot above)  only case-equivalent to itself\n      U+0131 (small dotless i)           only case-equivalent to itself\n    With PCRE2_EXTRA_TURKISH_CASING:\n      'i' = U+0130 (capital I with dot above)\n      U+0131 (small dotless i) = 'I'\n.P\nIt is not allowed to specify both PCRE2_EXTRA_CASELESS_RESTRICT and\nPCRE2_EXTRA_TURKISH_CASING together.\n.P\nFrom release 10.45 the Unicode letter properties Lu (upper case), Ll (lower\ncase), and Lt (title case) are all treated as Lc (cased letter) when caseless\nmatching is set by the PCRE2_CASELESS option or (?i) within the pattern.\n.\n.\n.\\\" HTML <a name=\"scriptruns\"></a>\n.SH \"SCRIPT RUNS\"\n.rs\n.sp\nThe pattern constructs (*script_run:...) and (*atomic_script_run:...), with\nsynonyms (*sr:...) and (*asr:...), verify that the string matched within the\nparentheses is a script run. In concept, a script run is a sequence of\ncharacters that are all from the same Unicode script. However, because some\nscripts are commonly used together, and because some diacritical and other\nmarks are used with multiple scripts, it is not that simple.\n.P\nEvery Unicode character has a Script property, mostly with a value\ncorresponding to the name of a script, such as Latin, Greek, or Cyrillic. There\nare also three special values:\n.P\n\"Unknown\" is used for code points that have not been assigned, and also for the\nsurrogate code points. In the PCRE2 32-bit library, characters whose code\npoints are greater than the Unicode maximum (U+10FFFF), which are accessible\nonly in non-UTF mode, are assigned the Unknown script.\n.P\n\"Common\" is used for characters that are used with many scripts. These include\npunctuation, emoji, mathematical, musical, and currency symbols, and the ASCII\ndigits 0 to 9.\n.P\n\"Inherited\" is used for characters such as diacritical marks that modify a\nprevious character. These are considered to take on the script of the character\nthat they modify.\n.P\nSome Inherited characters are used with many scripts, but many of them are only\nnormally used with a small number of scripts. For example, U+102E0 (Coptic\nEpact thousands mark) is used only with Arabic and Coptic. In order to make it\npossible to check this, a Unicode property called Script Extension exists. Its\nvalue is a list of scripts that apply to the character. For the majority of\ncharacters, the list contains just one script, the same one as the Script\nproperty. However, for characters such as U+102E0 more than one Script is\nlisted. There are also some Common characters that have a single, non-Common\nscript in their Script Extension list.\n.P\nThe next section describes the basic rules for deciding whether a given string\nof characters is a script run. Note, however, that there are some special cases\ninvolving the Chinese Han script, and an additional constraint for decimal\ndigits. These are covered in subsequent sections.\n.\n.\n.SS \"Basic script run rules\"\n.rs\n.sp\nA string that is less than two characters long is a script run. This is the\nonly case in which an Unknown character can be part of a script run. Longer\nstrings are checked using only the Script Extensions property, not the basic\nScript property.\n.P\nIf a character's Script Extension property is the single value \"Inherited\", it\nis always accepted as part of a script run. This is also true for the property\n\"Common\", subject to the checking of decimal digits described below. All the\nremaining characters in a script run must have at least one script in common in\ntheir Script Extension lists. In set-theoretic terminology, the intersection of\nall the sets of scripts must not be empty.\n.P\nA simple example is an Internet name such as \"google.com\". The letters are all\nin the Latin script, and the dot is Common, so this string is a script run.\nHowever, the Cyrillic letter \"o\" looks exactly the same as the Latin \"o\"; a\nstring that looks the same, but with Cyrillic \"o\"s is not a script run.\n.P\nMore interesting examples involve characters with more than one script in their\nScript Extension. Consider the following characters:\n.sp\n  U+060C  Arabic comma\n  U+06D4  Arabic full stop\n.sp\nThe first has the Script Extension list Arabic, Hanifi Rohingya, Syriac, and\nThaana; the second has just Arabic and Hanifi Rohingya. Both of them could\nappear in script runs of either Arabic or Hanifi Rohingya. The first could also\nappear in Syriac or Thaana script runs, but the second could not.\n.\n.\n.SS \"The Chinese Han script\"\n.rs\n.sp\nThe Chinese Han script is commonly used in conjunction with other scripts for\nwriting certain languages. Japanese uses the Hiragana and Katakana scripts\ntogether with Han; Korean uses Hangul and Han; Taiwanese Mandarin uses Bopomofo\nand Han. These three combinations are treated as special cases when checking\nscript runs and are, in effect, \"virtual scripts\". Thus, a script run may\ncontain a mixture of Hiragana, Katakana, and Han, or a mixture of Hangul and\nHan, or a mixture of Bopomofo and Han, but not, for example, a mixture of\nHangul and Bopomofo and Han. PCRE2 (like Perl) follows Unicode's Technical\nStandard 39 (\"Unicode Security Mechanisms\", http://unicode.org/reports/tr39/)\nin allowing such mixtures.\n.\n.\n.SS \"Decimal digits\"\n.rs\n.sp\nUnicode contains many sets of 10 decimal digits in different scripts, and some\nscripts (including the Common script) contain more than one set. Some of these\ndecimal digits them are visually indistinguishable from the common ASCII\ndigits. In addition to the script checking described above, if a script run\ncontains any decimal digits, they must all come from the same set of 10\nadjacent characters.\n.\n.\n.SH \"VALIDITY OF UTF STRINGS\"\n.rs\n.sp\nWhen the PCRE2_UTF option is set, the strings passed as patterns and subjects\nare (by default) checked for validity on entry to the relevant functions. If an\ninvalid UTF string is passed, a negative error code is returned. The code unit\noffset to the offending character can be extracted from the match data block by\ncalling \\fBpcre2_get_startchar()\\fP, which is used for this purpose after a UTF\nerror.\n.P\nIn some situations, you may already know that your strings are valid, and\ntherefore want to skip these checks in order to improve performance, for\nexample in the case of a long subject string that is being scanned repeatedly.\nIf you set the PCRE2_NO_UTF_CHECK option at compile time or at match time,\nPCRE2 assumes that the pattern or subject it is given (respectively) contains\nonly valid UTF code unit sequences.\n.P\nIf you pass an invalid UTF string when PCRE2_NO_UTF_CHECK is set, the result\nis undefined and your program may crash or loop indefinitely or give incorrect\nresults. There is, however, one mode of matching that can handle invalid UTF\nsubject strings. This is enabled by passing PCRE2_MATCH_INVALID_UTF to\n\\fBpcre2_compile()\\fP and is discussed below in the next section. The rest of\nthis section covers the case when PCRE2_MATCH_INVALID_UTF is not set.\n.P\nPassing PCRE2_NO_UTF_CHECK to \\fBpcre2_compile()\\fP just disables the UTF check\nfor the pattern; it does not also apply to subject strings. If you want to\ndisable the check for a subject string you must pass this same option to\n\\fBpcre2_match()\\fP or \\fBpcre2_dfa_match()\\fP.\n.P\nUTF-16 and UTF-32 strings can indicate their endianness by special code knows\nas a byte-order mark (BOM). The PCRE2 functions do not handle this, expecting\nstrings to be in host byte order.\n.P\nUnless PCRE2_NO_UTF_CHECK is set, a UTF string is checked before any other\nprocessing takes place. In the case of \\fBpcre2_match()\\fP and\n\\fBpcre2_dfa_match()\\fP calls with a non-zero starting offset, the check is\napplied only to that part of the subject that could be inspected during\nmatching, and there is a check that the starting offset points to the first\ncode unit of a character or to the end of the subject. If there are no\nlookbehind assertions in the pattern, the check starts at the starting offset.\nOtherwise, it starts at the length of the longest lookbehind before the\nstarting offset, or at the start of the subject if there are not that many\ncharacters before the starting offset. Note that the sequences \\eb and \\eB are\none-character lookbehinds.\n.P\nIn addition to checking the format of the string, there is a check to ensure\nthat all code points lie in the range U+0 to U+10FFFF, excluding the surrogate\narea. The so-called \"non-character\" code points are not excluded because\nUnicode corrigendum #9 makes it clear that they should not be.\n.P\nCharacters in the \"Surrogate Area\" of Unicode are reserved for use by UTF-16,\nwhere they are used in pairs to encode code points with values greater than\n0xFFFF. The code points that are encoded by UTF-16 pairs are available\nindependently in the UTF-8 and UTF-32 encodings. (In other words, the whole\nsurrogate thing is a fudge for UTF-16 which unfortunately messes up UTF-8 and\nUTF-32.)\n.P\nSetting PCRE2_NO_UTF_CHECK at compile time does not disable the error that is\ngiven if an escape sequence for an invalid Unicode code point is encountered in\nthe pattern. If you want to allow escape sequences such as \\ex{d800} (a\nsurrogate code point) you can set the PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES extra\noption. However, this is possible only in UTF-8 and UTF-32 modes, because these\nvalues are not representable in UTF-16.\n.\n.\n.\\\" HTML <a name=\"utf8strings\"></a>\n.SS \"Errors in UTF-8 strings\"\n.rs\n.sp\nThe following negative error codes are given for invalid UTF-8 strings:\n.sp\n  PCRE2_ERROR_UTF8_ERR1\n  PCRE2_ERROR_UTF8_ERR2\n  PCRE2_ERROR_UTF8_ERR3\n  PCRE2_ERROR_UTF8_ERR4\n  PCRE2_ERROR_UTF8_ERR5\n.sp\nThe string ends with a truncated UTF-8 character; the code specifies how many\nbytes are missing (1 to 5). Although RFC 3629 restricts UTF-8 characters to be\nno longer than 4 bytes, the encoding scheme (originally defined by RFC 2279)\nallows for up to 6 bytes, and this is checked first; hence the possibility of\n4 or 5 missing bytes.\n.sp\n  PCRE2_ERROR_UTF8_ERR6\n  PCRE2_ERROR_UTF8_ERR7\n  PCRE2_ERROR_UTF8_ERR8\n  PCRE2_ERROR_UTF8_ERR9\n  PCRE2_ERROR_UTF8_ERR10\n.sp\nThe two most significant bits of the 2nd, 3rd, 4th, 5th, or 6th byte of the\ncharacter do not have the binary value 0b10 (that is, either the most\nsignificant bit is 0, or the next bit is 1).\n.sp\n  PCRE2_ERROR_UTF8_ERR11\n  PCRE2_ERROR_UTF8_ERR12\n.sp\nA character that is valid by the RFC 2279 rules is either 5 or 6 bytes long;\nthese code points are excluded by RFC 3629.\n.sp\n  PCRE2_ERROR_UTF8_ERR13\n.sp\nA 4-byte character has a value greater than 0x10ffff; these code points are\nexcluded by RFC 3629.\n.sp\n  PCRE2_ERROR_UTF8_ERR14\n.sp\nA 3-byte character has a value in the range 0xd800 to 0xdfff; this range of\ncode points are reserved by RFC 3629 for use with UTF-16, and so are excluded\nfrom UTF-8.\n.sp\n  PCRE2_ERROR_UTF8_ERR15\n  PCRE2_ERROR_UTF8_ERR16\n  PCRE2_ERROR_UTF8_ERR17\n  PCRE2_ERROR_UTF8_ERR18\n  PCRE2_ERROR_UTF8_ERR19\n.sp\nA 2-, 3-, 4-, 5-, or 6-byte character is \"overlong\", that is, it codes for a\nvalue that can be represented by fewer bytes, which is invalid. For example,\nthe two bytes 0xc0, 0xae give the value 0x2e, whose correct coding uses just\none byte.\n.sp\n  PCRE2_ERROR_UTF8_ERR20\n.sp\nThe two most significant bits of the first byte of a character have the binary\nvalue 0b10 (that is, the most significant bit is 1 and the second is 0). Such a\nbyte can only validly occur as the second or subsequent byte of a multi-byte\ncharacter.\n.sp\n  PCRE2_ERROR_UTF8_ERR21\n.sp\nThe first byte of a character has the value 0xfe or 0xff. These values can\nnever occur in a valid UTF-8 string.\n.\n.\n.\\\" HTML <a name=\"utf16strings\"></a>\n.SS \"Errors in UTF-16 strings\"\n.rs\n.sp\nThe following negative error codes are given for invalid UTF-16 strings:\n.sp\n  PCRE2_ERROR_UTF16_ERR1  Missing low surrogate at end of string\n  PCRE2_ERROR_UTF16_ERR2  Invalid low surrogate follows high surrogate\n  PCRE2_ERROR_UTF16_ERR3  Isolated low surrogate\n.sp\n.\n.\n.\\\" HTML <a name=\"utf32strings\"></a>\n.SS \"Errors in UTF-32 strings\"\n.rs\n.sp\nThe following negative error codes are given for invalid UTF-32 strings:\n.sp\n  PCRE2_ERROR_UTF32_ERR1  Surrogate character (0xd800 to 0xdfff)\n  PCRE2_ERROR_UTF32_ERR2  Code point is greater than 0x10ffff\n.sp\n.\n.\n.\\\" HTML <a name=\"matchinvalid\"></a>\n.SH \"MATCHING IN INVALID UTF STRINGS\"\n.rs\n.sp\nYou can run pattern matches on subject strings that may contain invalid UTF\nsequences if you call \\fBpcre2_compile()\\fP with the PCRE2_MATCH_INVALID_UTF\noption. This is supported by \\fBpcre2_match()\\fP, including JIT matching, but\nnot by \\fBpcre2_dfa_match()\\fP. When PCRE2_MATCH_INVALID_UTF is set, it forces\nPCRE2_UTF to be set as well. Note, however, that the pattern itself must be a\nvalid UTF string.\n.P\nIf you do not set PCRE2_MATCH_INVALID_UTF when calling \\fBpcre2_compile\\fP, and\nyou are not certain that your subject strings are valid UTF sequences, you\nshould not make use of the JIT \"fast path\" function \\fBpcre2_jit_match()\\fP\nbecause it bypasses sanity checks, including the one for UTF validity. An\ninvalid string may cause undefined behaviour, including looping, crashing, or\ngiving the wrong answer.\n.P\nSetting PCRE2_MATCH_INVALID_UTF does not affect what \\fBpcre2_compile()\\fP\ngenerates, but if \\fBpcre2_jit_compile()\\fP is subsequently called, it does\ngenerate different code. If JIT is not used, the option affects the behaviour\nof the interpretive code in \\fBpcre2_match()\\fP. When PCRE2_MATCH_INVALID_UTF\nis set at compile time, PCRE2_NO_UTF_CHECK is ignored at match time.\n.P\nIn this mode, an invalid code unit sequence in the subject never matches any\npattern item. It does not match dot, it does not match \\ep{Any}, it does not\neven match negative items such as [^X]. A lookbehind assertion fails if it\nencounters an invalid sequence while moving the current point backwards. In\nother words, an invalid UTF code unit sequence acts as a barrier which no match\ncan cross.\n.P\nYou can also think of this as the subject being split up into fragments of\nvalid UTF, delimited internally by invalid code unit sequences. The pattern is\nmatched fragment by fragment. The result of a successful match, however, is\ngiven as code unit offsets in the entire subject string in the usual way. There\nare a few points to consider:\n.P\nThe internal boundaries are not interpreted as the beginnings or ends of lines\nand so do not match circumflex or dollar characters in the pattern.\n.P\nIf \\fBpcre2_match()\\fP is called with an offset that points to an invalid\nUTF-sequence, that sequence is skipped, and the match starts at the next valid\nUTF character, or the end of the subject.\n.P\nAt internal fragment boundaries, \\eb and \\eB behave in the same way as at the\nbeginning and end of the subject. For example, a sequence such as \\ebWORD\\eb\nwould match an instance of WORD that is surrounded by invalid UTF code units.\n.P\nUsing PCRE2_MATCH_INVALID_UTF, an application can run matches on arbitrary\ndata, knowing that any matched strings that are returned are valid UTF. This\ncan be useful when searching for UTF text in executable or other binary files.\n.P\nNote, however, that the 16-bit and 32-bit PCRE2 libraries process strings as\nsequences of uint16_t or uint32_t code points. They cannot find valid UTF\nsequences within an arbitrary string of bytes unless such sequences are\nsuitably aligned.\n.\n.\n.SH AUTHOR\n.rs\n.sp\n.nf\nPhilip Hazel\nRetired from University Computing Service\nCambridge, England.\n.fi\n.\n.\n.SH REVISION\n.rs\n.sp\n.nf\nLast updated: 27 November 2024\nCopyright (c) 1997-2024 University of Cambridge.\n.fi\n"
  },
  {
    "path": "libpcre2-16.pc.in",
    "content": "# Package Information for pkg-config\n\nprefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: libpcre2-16\nDescription: PCRE2 - Perl compatible regular expressions C library (2nd API) with 16 bit character support\nVersion: @PACKAGE_VERSION@\nLicense: BSD-3-Clause WITH PCRE2-exception\nLibs: -L${libdir} -lpcre2-16@LIB_POSTFIX@\nLibs.private: @PTHREAD_CFLAGS@ @PTHREAD_LIBS@\nCflags: -I${includedir} @PCRE2_STATIC_CFLAG@\n"
  },
  {
    "path": "libpcre2-32.pc.in",
    "content": "# Package Information for pkg-config\n\nprefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: libpcre2-32\nDescription: PCRE2 - Perl compatible regular expressions C library (2nd API) with 32 bit character support\nVersion: @PACKAGE_VERSION@\nLicense: BSD-3-Clause WITH PCRE2-exception\nLibs: -L${libdir} -lpcre2-32@LIB_POSTFIX@\nLibs.private: @PTHREAD_CFLAGS@ @PTHREAD_LIBS@\nCflags: -I${includedir} @PCRE2_STATIC_CFLAG@\n"
  },
  {
    "path": "libpcre2-8.pc.in",
    "content": "# Package Information for pkg-config\n\nprefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: libpcre2-8\nDescription: PCRE2 - Perl compatible regular expressions C library (2nd API) with 8 bit character support\nVersion: @PACKAGE_VERSION@\nLicense: BSD-3-Clause WITH PCRE2-exception\nLibs: -L${libdir} -lpcre2-8@LIB_POSTFIX@\nLibs.private: @PTHREAD_CFLAGS@ @PTHREAD_LIBS@\nCflags: -I${includedir} @PCRE2_STATIC_CFLAG@\n"
  },
  {
    "path": "libpcre2-posix.pc.in",
    "content": "# Package Information for pkg-config\n\nprefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: libpcre2-posix\nDescription: Posix compatible interface to libpcre2-8\nVersion: @PACKAGE_VERSION@\nLicense: BSD-3-Clause WITH PCRE2-exception\nLibs: -L${libdir} -lpcre2-posix@LIB_POSTFIX@\nCflags: -I${includedir} @PCRE2POSIX_CFLAG@\nRequires.private: libpcre2-8\n"
  },
  {
    "path": "m4/ax_pthread.m4",
    "content": "# ===========================================================================\n#        https://www.gnu.org/software/autoconf-archive/ax_pthread.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])\n#\n# DESCRIPTION\n#\n#   This macro figures out how to build C programs using POSIX threads. It\n#   sets the PTHREAD_LIBS output variable to the threads library and linker\n#   flags, and the PTHREAD_CFLAGS output variable to any special C compiler\n#   flags that are needed. (The user can also force certain compiler\n#   flags/libs to be tested by setting these environment variables.)\n#\n#   Also sets PTHREAD_CC and PTHREAD_CXX to any special C compiler that is\n#   needed for multi-threaded programs (defaults to the value of CC\n#   respectively CXX otherwise). (This is necessary on e.g. AIX to use the\n#   special cc_r/CC_r compiler alias.)\n#\n#   NOTE: You are assumed to not only compile your program with these flags,\n#   but also to link with them as well. For example, you might link with\n#   $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS\n#   $PTHREAD_CXX $CXXFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS\n#\n#   If you are only building threaded programs, you may wish to use these\n#   variables in your default LIBS, CFLAGS, and CC:\n#\n#     LIBS=\"$PTHREAD_LIBS $LIBS\"\n#     CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS\"\n#     CXXFLAGS=\"$CXXFLAGS $PTHREAD_CFLAGS\"\n#     CC=\"$PTHREAD_CC\"\n#     CXX=\"$PTHREAD_CXX\"\n#\n#   In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant\n#   has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to\n#   that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).\n#\n#   Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the\n#   PTHREAD_PRIO_INHERIT symbol is defined when compiling with\n#   PTHREAD_CFLAGS.\n#\n#   ACTION-IF-FOUND is a list of shell commands to run if a threads library\n#   is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it\n#   is not found. If ACTION-IF-FOUND is not specified, the default action\n#   will define HAVE_PTHREAD.\n#\n#   Please let the authors know if this macro fails on any platform, or if\n#   you have any other suggestions or comments. This macro was based on work\n#   by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help\n#   from M. Frigo), as well as ac_pthread and hb_pthread macros posted by\n#   Alejandro Forero Cuervo to the autoconf macro repository. We are also\n#   grateful for the helpful feedback of numerous users.\n#\n#   Updated for Autoconf 2.68 by Daniel Richard G.\n#\n# LICENSE\n#\n#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>\n#   Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>\n#   Copyright (c) 2019 Marc Stevens <marc.stevens@cwi.nl>\n#\n#   This program is free software: you can redistribute it and/or modify it\n#   under the terms of the GNU General Public License as published by the\n#   Free Software Foundation, either version 3 of the License, or (at your\n#   option) any later version.\n#\n#   This program is distributed in the hope that it will be useful, but\n#   WITHOUT ANY WARRANTY; without even the implied warranty of\n#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\n#   Public License for more details.\n#\n#   You should have received a copy of the GNU General Public License along\n#   with this program. If not, see <https://www.gnu.org/licenses/>.\n#\n#   As a special exception, the respective Autoconf Macro's copyright owner\n#   gives unlimited permission to copy, distribute and modify the configure\n#   scripts that are the output of Autoconf when processing the Macro. You\n#   need not follow the terms of the GNU General Public License when using\n#   or distributing such scripts, even though portions of the text of the\n#   Macro appear in them. The GNU General Public License (GPL) does govern\n#   all other use of the material that constitutes the Autoconf Macro.\n#\n#   This special exception to the GPL applies to versions of the Autoconf\n#   Macro released by the Autoconf Archive. When you make and distribute a\n#   modified version of the Autoconf Macro, you may extend this special\n#   exception to the GPL to apply to your modified version as well.\n\n#serial 31\n\nAU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])\nAC_DEFUN([AX_PTHREAD], [\nAC_REQUIRE([AC_CANONICAL_HOST])\nAC_REQUIRE([AC_PROG_CC])\nAC_REQUIRE([AC_PROG_SED])\nAC_LANG_PUSH([C])\nax_pthread_ok=no\n\n# We used to check for pthread.h first, but this fails if pthread.h\n# requires special compiler flags (e.g. on Tru64 or Sequent).\n# It gets checked for in the link test anyway.\n\n# First of all, check if the user has set any of the PTHREAD_LIBS,\n# etcetera environment variables, and if threads linking works using\n# them:\nif test \"x$PTHREAD_CFLAGS$PTHREAD_LIBS\" != \"x\"; then\n        ax_pthread_save_CC=\"$CC\"\n        ax_pthread_save_CFLAGS=\"$CFLAGS\"\n        ax_pthread_save_LIBS=\"$LIBS\"\n        AS_IF([test \"x$PTHREAD_CC\" != \"x\"], [CC=\"$PTHREAD_CC\"])\n        AS_IF([test \"x$PTHREAD_CXX\" != \"x\"], [CXX=\"$PTHREAD_CXX\"])\n        CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS\"\n        LIBS=\"$PTHREAD_LIBS $LIBS\"\n        AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])\n        AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes])\n        AC_MSG_RESULT([$ax_pthread_ok])\n        if test \"x$ax_pthread_ok\" = \"xno\"; then\n                PTHREAD_LIBS=\"\"\n                PTHREAD_CFLAGS=\"\"\n        fi\n        CC=\"$ax_pthread_save_CC\"\n        CFLAGS=\"$ax_pthread_save_CFLAGS\"\n        LIBS=\"$ax_pthread_save_LIBS\"\nfi\n\n# We must check for the threads library under a number of different\n# names; the ordering is very important because some systems\n# (e.g. DEC) have both -lpthread and -lpthreads, where one of the\n# libraries is broken (non-POSIX).\n\n# Create a list of thread flags to try. Items with a \",\" contain both\n# C compiler flags (before \",\") and linker flags (after \",\"). Other items\n# starting with a \"-\" are C compiler flags, and remaining items are\n# library names, except for \"none\" which indicates that we try without\n# any flags at all, and \"pthread-config\" which is a program returning\n# the flags for the Pth emulation library.\n\nax_pthread_flags=\"pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config\"\n\n# The ordering *is* (sometimes) important.  Some notes on the\n# individual items follow:\n\n# pthreads: AIX (must check this before -lpthread)\n# none: in case threads are in libc; should be tried before -Kthread and\n#       other compiler flags to prevent continual compiler warnings\n# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)\n# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64\n#           (Note: HP C rejects this with \"bad form for `-t' option\")\n# -pthreads: Solaris/gcc (Note: HP C also rejects)\n# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it\n#      doesn't hurt to check since this sometimes defines pthreads and\n#      -D_REENTRANT too), HP C (must be checked before -lpthread, which\n#      is present but should not be used directly; and before -mthreads,\n#      because the compiler interprets this as \"-mt\" + \"-hreads\")\n# -mthreads: Mingw32/gcc, Lynx/gcc\n# pthread: Linux, etcetera\n# --thread-safe: KAI C++\n# pthread-config: use pthread-config program (for GNU Pth library)\n\ncase $host_os in\n\n        freebsd*)\n\n        # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)\n        # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)\n\n        ax_pthread_flags=\"-kthread lthread $ax_pthread_flags\"\n        ;;\n\n        hpux*)\n\n        # From the cc(1) man page: \"[-mt] Sets various -D flags to enable\n        # multi-threading and also sets -lpthread.\"\n\n        ax_pthread_flags=\"-mt -pthread pthread $ax_pthread_flags\"\n        ;;\n\n        openedition*)\n\n        # IBM z/OS requires a feature-test macro to be defined in order to\n        # enable POSIX threads at all, so give the user a hint if this is\n        # not set. (We don't define these ourselves, as they can affect\n        # other portions of the system API in unpredictable ways.)\n\n        AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING],\n            [\n#            if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)\n             AX_PTHREAD_ZOS_MISSING\n#            endif\n            ],\n            [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])])\n        ;;\n\n        solaris*)\n\n        # On Solaris (at least, for some versions), libc contains stubbed\n        # (non-functional) versions of the pthreads routines, so link-based\n        # tests will erroneously succeed. (N.B.: The stubs are missing\n        # pthread_cleanup_push, or rather a function called by this macro,\n        # so we could check for that, but who knows whether they'll stub\n        # that too in a future libc.)  So we'll check first for the\n        # standard Solaris way of linking pthreads (-mt -lpthread).\n\n        ax_pthread_flags=\"-mt,-lpthread pthread $ax_pthread_flags\"\n        ;;\nesac\n\n# Are we compiling with Clang?\n\nAC_CACHE_CHECK([whether $CC is Clang],\n    [ax_cv_PTHREAD_CLANG],\n    [ax_cv_PTHREAD_CLANG=no\n     # Note that Autoconf sets GCC=yes for Clang as well as GCC\n     if test \"x$GCC\" = \"xyes\"; then\n        AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],\n            [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */\n#            if defined(__clang__) && defined(__llvm__)\n             AX_PTHREAD_CC_IS_CLANG\n#            endif\n            ],\n            [ax_cv_PTHREAD_CLANG=yes])\n     fi\n    ])\nax_pthread_clang=\"$ax_cv_PTHREAD_CLANG\"\n\n\n# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)\n\n# Note that for GCC and Clang -pthread generally implies -lpthread,\n# except when -nostdlib is passed.\n# This is problematic using libtool to build C++ shared libraries with pthread:\n# [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460\n# [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333\n# [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555\n# To solve this, first try -pthread together with -lpthread for GCC\n\nAS_IF([test \"x$GCC\" = \"xyes\"],\n      [ax_pthread_flags=\"-pthread,-lpthread -pthread -pthreads $ax_pthread_flags\"])\n\n# Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first\n\nAS_IF([test \"x$ax_pthread_clang\" = \"xyes\"],\n      [ax_pthread_flags=\"-pthread,-lpthread -pthread\"])\n\n\n# The presence of a feature test macro requesting re-entrant function\n# definitions is, on some systems, a strong hint that pthreads support is\n# correctly enabled\n\ncase $host_os in\n        darwin* | hpux* | linux* | osf* | solaris*)\n        ax_pthread_check_macro=\"_REENTRANT\"\n        ;;\n\n        aix*)\n        ax_pthread_check_macro=\"_THREAD_SAFE\"\n        ;;\n\n        *)\n        ax_pthread_check_macro=\"--\"\n        ;;\nesac\nAS_IF([test \"x$ax_pthread_check_macro\" = \"x--\"],\n      [ax_pthread_check_cond=0],\n      [ax_pthread_check_cond=\"!defined($ax_pthread_check_macro)\"])\n\n\nif test \"x$ax_pthread_ok\" = \"xno\"; then\nfor ax_pthread_try_flag in $ax_pthread_flags; do\n\n        case $ax_pthread_try_flag in\n                none)\n                AC_MSG_CHECKING([whether pthreads work without any flags])\n                ;;\n\n                *,*)\n                PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed \"s/^\\(.*\\),\\(.*\\)$/\\1/\"`\n                PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed \"s/^\\(.*\\),\\(.*\\)$/\\2/\"`\n                AC_MSG_CHECKING([whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"])\n                ;;\n\n                -*)\n                AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])\n                PTHREAD_CFLAGS=\"$ax_pthread_try_flag\"\n                ;;\n\n                pthread-config)\n                AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])\n                AS_IF([test \"x$ax_pthread_config\" = \"xno\"], [continue])\n                PTHREAD_CFLAGS=\"`pthread-config --cflags`\"\n                PTHREAD_LIBS=\"`pthread-config --ldflags` `pthread-config --libs`\"\n                ;;\n\n                *)\n                AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])\n                PTHREAD_LIBS=\"-l$ax_pthread_try_flag\"\n                ;;\n        esac\n\n        ax_pthread_save_CFLAGS=\"$CFLAGS\"\n        ax_pthread_save_LIBS=\"$LIBS\"\n        CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS\"\n        LIBS=\"$PTHREAD_LIBS $LIBS\"\n\n        # Check for various functions.  We must include pthread.h,\n        # since some functions may be macros.  (On the Sequent, we\n        # need a special flag -Kthread to make this header compile.)\n        # We check for pthread_join because it is in -lpthread on IRIX\n        # while pthread_create is in libc.  We check for pthread_attr_init\n        # due to DEC craziness with -lpthreads.  We check for\n        # pthread_cleanup_push because it is one of the few pthread\n        # functions on Solaris that doesn't have a non-functional libc stub.\n        # We try pthread_create on general principles.\n\n        AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>\n#                       if $ax_pthread_check_cond\n#                        error \"$ax_pthread_check_macro must be defined\"\n#                       endif\n                        static void *some_global = NULL;\n                        static void routine(void *a)\n                          {\n                             /* To avoid any unused-parameter or\n                                unused-but-set-parameter warning.  */\n                             some_global = a;\n                          }\n                        static void *start_routine(void *a) { return a; }],\n                       [pthread_t th; pthread_attr_t attr;\n                        pthread_create(&th, 0, start_routine, 0);\n                        pthread_join(th, 0);\n                        pthread_attr_init(&attr);\n                        pthread_cleanup_push(routine, 0);\n                        pthread_cleanup_pop(0) /* ; */])],\n            [ax_pthread_ok=yes],\n            [])\n\n        CFLAGS=\"$ax_pthread_save_CFLAGS\"\n        LIBS=\"$ax_pthread_save_LIBS\"\n\n        AC_MSG_RESULT([$ax_pthread_ok])\n        AS_IF([test \"x$ax_pthread_ok\" = \"xyes\"], [break])\n\n        PTHREAD_LIBS=\"\"\n        PTHREAD_CFLAGS=\"\"\ndone\nfi\n\n\n# Clang needs special handling, because older versions handle the -pthread\n# option in a rather... idiosyncratic way\n\nif test \"x$ax_pthread_clang\" = \"xyes\"; then\n\n        # Clang takes -pthread; it has never supported any other flag\n\n        # (Note 1: This will need to be revisited if a system that Clang\n        # supports has POSIX threads in a separate library.  This tends not\n        # to be the way of modern systems, but it's conceivable.)\n\n        # (Note 2: On some systems, notably Darwin, -pthread is not needed\n        # to get POSIX threads support; the API is always present and\n        # active.  We could reasonably leave PTHREAD_CFLAGS empty.  But\n        # -pthread does define _REENTRANT, and while the Darwin headers\n        # ignore this macro, third-party headers might not.)\n\n        # However, older versions of Clang make a point of warning the user\n        # that, in an invocation where only linking and no compilation is\n        # taking place, the -pthread option has no effect (\"argument unused\n        # during compilation\").  They expect -pthread to be passed in only\n        # when source code is being compiled.\n        #\n        # Problem is, this is at odds with the way Automake and most other\n        # C build frameworks function, which is that the same flags used in\n        # compilation (CFLAGS) are also used in linking.  Many systems\n        # supported by AX_PTHREAD require exactly this for POSIX threads\n        # support, and in fact it is often not straightforward to specify a\n        # flag that is used only in the compilation phase and not in\n        # linking.  Such a scenario is extremely rare in practice.\n        #\n        # Even though use of the -pthread flag in linking would only print\n        # a warning, this can be a nuisance for well-run software projects\n        # that build with -Werror.  So if the active version of Clang has\n        # this misfeature, we search for an option to squash it.\n\n        AC_CACHE_CHECK([whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread],\n            [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG],\n            [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown\n             # Create an alternate version of $ac_link that compiles and\n             # links in two steps (.c -> .o, .o -> exe) instead of one\n             # (.c -> exe), because the warning occurs only in the second\n             # step\n             ax_pthread_save_ac_link=\"$ac_link\"\n             ax_pthread_sed='s/conftest\\.\\$ac_ext/conftest.$ac_objext/g'\n             ax_pthread_link_step=`AS_ECHO([\"$ac_link\"]) | sed \"$ax_pthread_sed\"`\n             ax_pthread_2step_ac_link=\"($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)\"\n             ax_pthread_save_CFLAGS=\"$CFLAGS\"\n             for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do\n                AS_IF([test \"x$ax_pthread_try\" = \"xunknown\"], [break])\n                CFLAGS=\"-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS\"\n                ac_link=\"$ax_pthread_save_ac_link\"\n                AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],\n                    [ac_link=\"$ax_pthread_2step_ac_link\"\n                     AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],\n                         [break])\n                    ])\n             done\n             ac_link=\"$ax_pthread_save_ac_link\"\n             CFLAGS=\"$ax_pthread_save_CFLAGS\"\n             AS_IF([test \"x$ax_pthread_try\" = \"x\"], [ax_pthread_try=no])\n             ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=\"$ax_pthread_try\"\n            ])\n\n        case \"$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG\" in\n                no | unknown) ;;\n                *) PTHREAD_CFLAGS=\"$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS\" ;;\n        esac\n\nfi # $ax_pthread_clang = yes\n\n\n\n# Various other checks:\nif test \"x$ax_pthread_ok\" = \"xyes\"; then\n        ax_pthread_save_CFLAGS=\"$CFLAGS\"\n        ax_pthread_save_LIBS=\"$LIBS\"\n        CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS\"\n        LIBS=\"$PTHREAD_LIBS $LIBS\"\n\n        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.\n        AC_CACHE_CHECK([for joinable pthread attribute],\n            [ax_cv_PTHREAD_JOINABLE_ATTR],\n            [ax_cv_PTHREAD_JOINABLE_ATTR=unknown\n             for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do\n                 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],\n                                                 [int attr = $ax_pthread_attr; return attr /* ; */])],\n                                [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break],\n                                [])\n             done\n            ])\n        AS_IF([test \"x$ax_cv_PTHREAD_JOINABLE_ATTR\" != \"xunknown\" && \\\n               test \"x$ax_cv_PTHREAD_JOINABLE_ATTR\" != \"xPTHREAD_CREATE_JOINABLE\" && \\\n               test \"x$ax_pthread_joinable_attr_defined\" != \"xyes\"],\n              [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE],\n                                  [$ax_cv_PTHREAD_JOINABLE_ATTR],\n                                  [Define to necessary symbol if this constant\n                                   uses a non-standard name on your system.])\n               ax_pthread_joinable_attr_defined=yes\n              ])\n\n        AC_CACHE_CHECK([whether more special flags are required for pthreads],\n            [ax_cv_PTHREAD_SPECIAL_FLAGS],\n            [ax_cv_PTHREAD_SPECIAL_FLAGS=no\n             case $host_os in\n             solaris*)\n             ax_cv_PTHREAD_SPECIAL_FLAGS=\"-D_POSIX_PTHREAD_SEMANTICS\"\n             ;;\n             esac\n            ])\n        AS_IF([test \"x$ax_cv_PTHREAD_SPECIAL_FLAGS\" != \"xno\" && \\\n               test \"x$ax_pthread_special_flags_added\" != \"xyes\"],\n              [PTHREAD_CFLAGS=\"$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS\"\n               ax_pthread_special_flags_added=yes])\n\n        AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],\n            [ax_cv_PTHREAD_PRIO_INHERIT],\n            [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],\n                                             [[int i = PTHREAD_PRIO_INHERIT;\n                                               return i;]])],\n                            [ax_cv_PTHREAD_PRIO_INHERIT=yes],\n                            [ax_cv_PTHREAD_PRIO_INHERIT=no])\n            ])\n        AS_IF([test \"x$ax_cv_PTHREAD_PRIO_INHERIT\" = \"xyes\" && \\\n               test \"x$ax_pthread_prio_inherit_defined\" != \"xyes\"],\n              [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])\n               ax_pthread_prio_inherit_defined=yes\n              ])\n\n        CFLAGS=\"$ax_pthread_save_CFLAGS\"\n        LIBS=\"$ax_pthread_save_LIBS\"\n\n        # More AIX lossage: compile with *_r variant\n        if test \"x$GCC\" != \"xyes\"; then\n            case $host_os in\n                aix*)\n                AS_CASE([\"x/$CC\"],\n                    [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],\n                    [#handle absolute path differently from PATH based program lookup\n                     AS_CASE([\"x$CC\"],\n                         [x/*],\n                         [\n\t\t\t   AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC=\"${CC}_r\"])\n\t\t\t   AS_IF([test \"x${CXX}\" != \"x\"], [AS_IF([AS_EXECUTABLE_P([${CXX}_r])],[PTHREAD_CXX=\"${CXX}_r\"])])\n\t\t\t ],\n                         [\n\t\t\t   AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])\n\t\t\t   AS_IF([test \"x${CXX}\" != \"x\"], [AC_CHECK_PROGS([PTHREAD_CXX],[${CXX}_r],[$CXX])])\n\t\t\t ]\n                     )\n                    ])\n                ;;\n            esac\n        fi\nfi\n\ntest -n \"$PTHREAD_CC\" || PTHREAD_CC=\"$CC\"\ntest -n \"$PTHREAD_CXX\" || PTHREAD_CXX=\"$CXX\"\n\nAC_SUBST([PTHREAD_LIBS])\nAC_SUBST([PTHREAD_CFLAGS])\nAC_SUBST([PTHREAD_CC])\nAC_SUBST([PTHREAD_CXX])\n\n# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:\nif test \"x$ax_pthread_ok\" = \"xyes\"; then\n        ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])\n        :\nelse\n        ax_pthread_ok=no\n        $2\nfi\nAC_LANG_POP\n])dnl AX_PTHREAD\n"
  },
  {
    "path": "m4/pcre2_check_vscript.m4",
    "content": "# ===========================================================================\n#     https://www.gnu.org/software/autoconf-archive/ax_check_vscript.html\n# ===========================================================================\n#\n# Our pcre2_check_vscript.m4 is derived from the upstream ax_check_vscript.m4,\n# with several modifications.\n#\n# The original upstream file requires the following notice:\n#\n# LICENSE\n#\n#   Copyright (c) 2014 Kevin Cernekee <cernekee@gmail.com>\n#\n#   Copying and distribution of this file, with or without modification, are\n#   permitted in any medium without royalty provided the copyright notice\n#   and this notice are preserved. This file is offered as-is, without any\n#   warranty.\n\n#serial 2.99 PCRE2\n\n# _PCRE2_CHECK_VSCRIPT_SHLIB(flag, map-contents, action-if-link-succeeds)\n# Build a shared library with the given linker flag and map file contents.\n# This properly tests version script support by building a shared library\n# rather than an executable, avoiding issues with executable-specific symbols\n# (e.g. FreeBSD's crt1.o symbols, Solaris linker symbols in values-Xc.o).\n# Uses libtool for portability across different platforms.\nAC_DEFUN([_PCRE2_CHECK_VSCRIPT_SHLIB], [\n  rm -rf conftest.vscript\n  mkdir conftest.vscript\n  cat > conftest.vscript/conftest.c <<_ACEOF\nint hidethis(void) { return 0; }\nint exposethis(void) { return hidethis(); }\n_ACEOF\n  echo \"$2\" > conftest.vscript/conftest.map\n  _pcre2_abs_top_builddir=\"$ac_pwd\"\n  _pcre2_vscript_libtool=\"$SHELL $_pcre2_abs_top_builddir/libtool\"\n  _pcre2_vscript_cc=\"$CC\"\n  _pcre2_vscript_compile_flags=\"$CFLAGS $CPPFLAGS\"\n  _pcre2_vscript_ld_flags=\"$CFLAGS $LDFLAGS\"\n  _pcre2_vscript_script_flag=\"$1\"\n  export _pcre2_vscript_libtool\n  export _pcre2_vscript_cc\n  export _pcre2_vscript_compile_flags\n  export _pcre2_vscript_ld_flags\n  export _pcre2_vscript_script_flag\n  AS_IF([(cd conftest.vscript && \\\n    $_pcre2_vscript_libtool --tag=CC --mode=compile $_pcre2_vscript_cc $_pcre2_vscript_compile_flags -c -o conftest.lo conftest.c && \\\n    $_pcre2_vscript_libtool --tag=CC --mode=link $_pcre2_vscript_cc $_pcre2_vscript_ld_flags -o libconftest.la conftest.lo -rpath /usr/lib -Wl,$_pcre2_vscript_script_flag,conftest.map) >&AS_MESSAGE_LOG_FD 2>&1], [$3])\n  unset _pcre2_vscript_libtool\n  unset _pcre2_vscript_cc\n  unset _pcre2_vscript_compile_flags\n  unset _pcre2_vscript_ld_flags\n  unset _pcre2_vscript_script_flag\n  rm -rf conftest.vscript\n]) dnl _PCRE2_CHECK_VSCRIPT_SHLIB\n\nAC_DEFUN([PCRE2_CHECK_VSCRIPT], [\n\n  AC_ARG_ENABLE([symvers],\n    AS_HELP_STRING([--disable-symvers],\n                   [disable library symbol versioning [default=auto]]),\n    [want_symvers=$enableval],\n    [want_symvers=yes]\n  )\n\n  AS_IF([test x$want_symvers = xyes], [\n\n    dnl First, test --version-script and -M with a simple wildcard.\n    AC_CACHE_CHECK([linker version script flag], pcre2_cv_check_vscript_flag, [\n      pcre2_cv_check_vscript_flag=unsupported\n\n      _PCRE2_CHECK_VSCRIPT_SHLIB([--version-script],\n        [PCRE2_10.00 { global: exposethis; local: *; };],\n        [pcre2_cv_check_vscript_flag=--version-script])\n      AS_IF([test x$pcre2_cv_check_vscript_flag = xunsupported], [\n        _PCRE2_CHECK_VSCRIPT_SHLIB([-M],\n          [PCRE2_10.00 { global: exposethis; local: *; };],\n          [pcre2_cv_check_vscript_flag=-M])\n      ])\n\n      dnl The linker may interpret -M (no argument) as \"produce a load map.\"\n      dnl If \"-M conftest.map\" doesn't fail when conftest.map contains\n      dnl obvious syntax errors, assume this is the case.\n\n      AS_IF([test x$pcre2_cv_check_vscript_flag != xunsupported], [\n        _PCRE2_CHECK_VSCRIPT_SHLIB([$pcre2_cv_check_vscript_flag],\n          [PCRE2_10.00 { global: exposethis; local: *; };  {],\n          [pcre2_cv_check_vscript_flag=unsupported])\n      ])\n    ])\n\n    AS_IF([test x$pcre2_cv_check_vscript_flag != xunsupported], [\n\n      dnl Test without wildcard - for detecting Solaris, which requires the\n      dnl wildcard (or else a much more complex and brittle configuration).\n      AC_CACHE_CHECK([if version scripts work without wildcard],\n                     pcre2_cv_check_vscript_no_star, [\n        pcre2_cv_check_vscript_no_star=no\n        _PCRE2_CHECK_VSCRIPT_SHLIB([$pcre2_cv_check_vscript_flag],\n          [PCRE2_10.00 { global: exposethis; local: hidethis; };],\n          [pcre2_cv_check_vscript_no_star=yes])\n      ])\n\n      pcre2_check_vscript_flag=$pcre2_cv_check_vscript_flag\n      pcre2_check_vscript_no_star=$pcre2_cv_check_vscript_no_star\n    ], [\n      pcre2_check_vscript_flag=\n      pcre2_check_vscript_no_star=no\n    ])\n  ], [\n    AC_MSG_CHECKING([linker version script flag])\n    AC_MSG_RESULT([disabled])\n\n    pcre2_check_vscript_flag=\n    pcre2_check_vscript_no_star=no\n  ])\n\n]) dnl PCRE2_CHECK_VSCRIPT\n"
  },
  {
    "path": "m4/pcre2_visibility.m4",
    "content": "# visibility.m4 serial 4 (gettext-0.18.2)\ndnl Copyright (C) 2005, 2008, 2010-2011 Free Software Foundation, Inc.\ndnl This file is free software; the Free Software Foundation\ndnl gives unlimited permission to copy and/or distribute it,\ndnl with or without modifications, as long as this notice is preserved.\n\ndnl Originally From Bruno Haible.\n\ndnl Tests whether the compiler supports the command-line option\ndnl -fvisibility=hidden and the function attribute\ndnl __attribute__((__visibility__(\"default\"))).\ndnl\ndnl Set the variable VISIBILITY_CFLAGS.\ndnl Defines and sets the variable HAVE_VISIBILITY.\ndnl Defines and sets the variable WORKING_WERROR.\n\ndnl Modified to fit with PCRE build environment by Cristian Rodríguez.\ndnl Adjusted for PCRE2 by PH.\ndnl Refactored to work with non GCC (but compatible) compilers.\n\nAC_DEFUN([PCRE2_VISIBILITY],\n[\n  AC_REQUIRE([AC_PROG_CC])\n  VISIBILITY_CFLAGS=\n  HAVE_VISIBILITY=0\n  dnl First, check whether -Werror can be added to the command line, or\n  dnl whether it leads to an error because of some other option that the\n  dnl user has put into $CC $CFLAGS $CPPFLAGS.\n  AC_MSG_CHECKING([whether the -Werror option is usable])\n  AC_CACHE_VAL([pcre2_cv_cc_vis_werror], [\n    pcre2_save_CFLAGS=\"$CFLAGS\"\n    CFLAGS=\"$CFLAGS -Werror\"\n    pcre2_cv_cc_vis_werror=no\n    AC_COMPILE_IFELSE(\n      [AC_LANG_PROGRAM([[]], [[]])],\n      [\n        AC_COMPILE_IFELSE(\n          [AC_LANG_PROGRAM([[]], [[ #warning e ]])],\n          [], [pcre2_cv_cc_vis_werror=yes]\n        )\n      ], [])\n    CFLAGS=\"$pcre2_save_CFLAGS\"])\n  AC_MSG_RESULT([$pcre2_cv_cc_vis_werror])\n  if test -n \"$pcre2_cv_cc_vis_werror\" && test $pcre2_cv_cc_vis_werror = yes\n  then\n    WORKING_WERROR=1\n  else\n    WORKING_WERROR=0\n  fi\n  if test $pcre2_cv_cc_vis_werror = yes; then\n    dnl Now check whether GCC compatible visibility declarations are supported.\n    AC_MSG_CHECKING([for GCC compatible visibility declarations])\n    AC_CACHE_VAL([pcre2_cv_cc_visibility], [\n      pcre2_save_CFLAGS=\"$CFLAGS\"\n      CFLAGS=\"$CFLAGS -Werror -fvisibility=hidden\"\n      dnl We use the option -Werror and a function dummyfunc, because on some\n      dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning\n      dnl \"visibility attribute not supported in this configuration; ignored\"\n      dnl at the first function definition in every compilation unit, and we\n      dnl don't want to use the option in this case.\n      AC_COMPILE_IFELSE(\n        [AC_LANG_PROGRAM(\n           [[extern __attribute__((__visibility__(\"hidden\"))) int hiddenfunc (void);\n             extern __attribute__((__visibility__(\"default\"))) int exportedfunc (void);\n             void dummyfunc (void) {}\n           ]],\n           [[]])],\n        [pcre2_cv_cc_visibility=yes],\n        [pcre2_cv_cc_visibility=no])\n      CFLAGS=\"$pcre2_save_CFLAGS\"])\n      AC_MSG_RESULT([$pcre2_cv_cc_visibility])\n  fi\n  if test -n \"$pcre2_cv_cc_visibility\" && test $pcre2_cv_cc_visibility = yes\n  then\n    VISIBILITY_CFLAGS=\"-fvisibility=hidden\"\n    HAVE_VISIBILITY=1\n    AC_DEFINE(PCRE2_EXPORT, [__attribute__ ((visibility (\"default\")))], [Define to the annotation for making a symbol visible.])\n  else\n    AC_DEFINE(PCRE2_EXPORT, [], [Define to the annotation for making a symbol visible.])\n  fi\n  AC_SUBST([VISIBILITY_CFLAGS])\n  AC_SUBST([HAVE_VISIBILITY])\n  AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],\n    [Define to 1 if the compiler supports GCC compatible visibility declarations.])\n])\n"
  },
  {
    "path": "m4/pcre2_zos.m4",
    "content": "dnl Tests whether the compiler requires an additional flag in order to fail on\ndnl undefined headers.\n\ndnl The concept of setting this commandline flag was learned from patches and\ndnl mailing list discussions of the gnulib and gawk projects (credit to\ndnl Bruno Haible).\n\nAC_DEFUN([PCRE2_ZOS_FIXES],\n[\n  AC_CACHE_CHECK([for OS/390 (z/OS)], [pcre2_cv_os390],\n    [if test \"`uname`\" = \"OS/390\"; then\n       pcre2_cv_os390=yes\n     else\n       pcre2_cv_os390=no\n     fi])\n  if test \"$pcre2_cv_os390\" = \"yes\"; then\n    AC_CACHE_CHECK([whether the compiler supports -qhaltonmsg=CCN3296], [pcre2_cv_xlc_qhaltonmsg_support],\n      [save_CFLAGS=\"$CFLAGS\"\n      CFLAGS=\"$CFLAGS -qhaltonmsg=CCN3296\"\n      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],\n                        [pcre2_cv_xlc_qhaltonmsg_support=yes],\n                        [pcre2_cv_xlc_qhaltonmsg_support=no])\n      CFLAGS=\"$save_CFLAGS\"\n      ])\n\n    AC_CACHE_CHECK([whether non-existent headers fail the compile], [pcre2_cv_xlc_nonexistent_fatal],\n      [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <thereshouldbenoheader.h>]])],\n                         [pcre2_cv_xlc_nonexistent_fatal=no],\n                         [pcre2_cv_xlc_nonexistent_fatal=yes])\n      ])\n\n    if test \"$pcre2_cv_xlc_nonexistent_fatal\" = \"no\" && test \"$pcre2_cv_xlc_qhaltonmsg_support\" = \"yes\"; then\n      AC_CACHE_CHECK([whether -qhaltonmsg=CCN3296 fixes the non-existent-header issue], [pcre2_cv_xlc_qhaltonmsg_fixes],\n        [save_CFLAGS=\"$CFLAGS\"\n        CFLAGS=\"$CFLAGS -qhaltonmsg=CCN3296\"\n        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <thereshouldbenoheader.h>]])],\n                          [pcre2_cv_xlc_qhaltonmsg_fixes=no],\n                          [pcre2_cv_xlc_qhaltonmsg_fixes=yes])\n        CFLAGS=\"$save_CFLAGS\"\n        ])\n\n      if test \"$pcre2_cv_xlc_qhaltonmsg_fixes\" = \"no\"; then\n        AC_MSG_ERROR([-qhaltonmsg=CCN3296 not effective on non-existent headers])\n      fi\n\n      CFLAGS=\"$CFLAGS -qhaltonmsg=CCN3296\"\n    fi\n\n  fi\n])\n"
  },
  {
    "path": "maint/.gitignore",
    "content": "ucptest\nutf8\nutf8.*\n\npcre2_ucp.h\npcre2_ucptables_inc.h\npcre2_ucd.c\n\ntestinput\ntestinput11\ntestoutput\n\n!build-interface\n"
  },
  {
    "path": "maint/132html",
    "content": "#! /usr/bin/perl -w\n\n# Script to turn PCRE2 man pages into HTML\n\n\n# Subroutine to handle font changes and other escapes\n\nsub do_line {\nmy($s) = $_[0];\n\n$s =~ s/</&#60;/g;                   # Deal with < and >\n$s =~ s/>/&#62;/g;\n$s =~ s\"\\\\fI(.*?)\\\\f[RP]\"<i>$1</i>\"g;\n$s =~ s\"\\\\fB(.*?)\\\\f[RP]\"<b>$1</b>\"g;\n$s =~ s\"\\\\e\"\\\\\"g;\n$s =~ s/(?<=Copyright )\\(c\\)/&copy;/g;\n$s =~ s/\\\\&//g;                     # Deal with the \\& 0-width space\n$s;\n}\n\n# Subroutine to ensure not in a paragraph\n\nsub end_para {\nif ($inpara)\n  {\n  print TEMP \"</pre>\\n\" if ($inpre);\n  print TEMP \"</p>\\n\";\n  }\n$inpara = $inpre = 0;\n$wrotetext = 0;\n}\n\n# Subroutine to start a new paragraph\n\nsub new_para {\n&end_para();\nprint TEMP \"<p>\\n\";\n$inpara = 1;\n}\n\n\n# Main program\n\n$innf = 0;\n$inpara = 0;\n$inpre = 0;\n$wrotetext = 0;\n$toc = 0;\n$header = 1;\n$ref = 1;\n\nwhile ($#ARGV >= 0 && $ARGV[0] =~ /^-/)\n  {\n  $toc = 1 if $ARGV[0] eq \"-toc\";\n  $header = 0 if $ARGV[0] eq \"-noheader\";\n  shift;\n  }\n\n# Initial output to STDOUT\n\nif ($header)\n  {\n  print <<End ;\n<html>\n<head>\n<title>$ARGV[0] specification</title>\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#00005A\" link=\"#0066FF\" alink=\"#3399FF\" vlink=\"#2222BB\">\n<h1>$ARGV[0] man page</h1>\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\n<p>\nThis page is part of the PCRE2 HTML documentation. It was generated\nautomatically from the original man page. If there is any nonsense in it,\nplease consult the man page, in case the conversion went wrong.\n<br>\nEnd\n  }\n\nprint \"<ul>\\n\" if ($toc);\n\nopen(TEMP, \">/tmp/$$\") || die \"Can't open /tmp/$$ for output\\n\";\n\nwhile (<STDIN>)\n  {\n  # Handle lines beginning with a dot\n\n  if (/^\\./)\n    {\n    # Some of the PCRE2 man pages used to contain instances of .br. However,\n    # they should have all been removed because they cause trouble in some\n    # (other) automated systems that translate man pages to HTML. Complain if\n    # we find .br or .in (another macro that is deprecated).\n\n    if (/^\\.br/ || /^\\.in/)\n      {\n      print STDERR \"\\n*** Deprecated macro encountered - rewrite needed\\n\";\n      print STDERR \"*** $_\\n\";\n      die \"*** Processing abandoned\\n\";\n      }\n\n    # Instead of .br, relevant \"literal\" sections are enclosed in .nf/.fi.\n\n    elsif (/^\\.nf/)\n      {\n      $innf = 1;\n      }\n\n    elsif (/^\\.fi/)\n      {\n      $innf = 0;\n      }\n\n    # Handling .sp is subtle. If it is inside a literal section, do nothing if\n    # the next line is a non literal text line; similarly, if not inside a\n    # literal section, do nothing if a literal follows, unless we are inside\n    # a .nf/.fi section or about to enter one. The point being that the <pre>\n    # and </pre> that delimit literal sections will do the spacing. Always skip\n    # if no previous output.\n\n    elsif (/^\\.sp/)\n      {\n      if ($wrotetext)\n        {\n        $_ = <STDIN>;\n        if ($inpre)\n          {\n          print TEMP \"\\n\" if (/^[\\s.]/);\n          }\n        else\n          {\n          print TEMP \"<br>\\n<br>\\n\" if ($innf || /^\\.nf/ || !/^[\\s.]/);\n          }\n        redo;    # Now process the lookahead line we just read\n        }\n      }\n    elsif (/^\\.TP/ || /^\\.PP/ || /^\\.P/)\n      {\n      &new_para();\n      }\n    elsif (/^\\.SH\\s*(\"?)(.*)\\1/)\n      {\n      # Ignore the NAME section\n      if ($2 =~ /^NAME\\b/)\n        {\n        <STDIN>;\n        next;\n        }\n\n      &end_para();\n      my($title) = &do_line($2);\n      if ($toc)\n        {\n        printf(\"<li><a name=\\\"TOC%d\\\" href=\\\"#SEC%d\\\">$title</a>\\n\",\n          $ref, $ref);\n        printf TEMP (\"<h2><a name=\\\"SEC%d\\\" href=\\\"#TOC1\\\">$title</a></h2>\\n\",\n          $ref);\n        $ref++;\n        }\n      else\n        {\n        print TEMP \"<h2>\\n$title\\n</h2>\\n\";\n        }\n      }\n    elsif (/^\\.SS\\s*(\"?)(.*)\\1/)\n      {\n      &end_para();\n      my($title) = &do_line($2);\n      print TEMP \"<h3>\\n$title\\n</h3>\\n\";\n      }\n    elsif (/^\\.B\\s*(.*)/)\n      {\n      &new_para() if (!$inpara);\n      $_ = &do_line($1);\n      s/\"(.*?)\"/$1/g;\n      print TEMP \"<b>$_</b>\\n\";\n      $wrotetext = 1;\n      }\n    elsif (/^\\.I\\s*(.*)/)\n      {\n      &new_para() if (!$inpara);\n      $_ = &do_line($1);\n      s/\"(.*?)\"/$1/g;\n      print TEMP \"<i>$_</i>\\n\";\n      $wrotetext = 1;\n      }\n\n    # Remove the \"AUTOMATICALLY GENERATED\" warning from pcre2demo.3\n    elsif (/^\\.\\\\\"AUTOMATICALLY GENERATED/) { next; }\n\n    # A comment that starts \"HREF\" takes the next line as a name that\n    # is turned into a hyperlink, using the text given, which might be\n    # in a special font. If it ends in () or (digits) or punctuation, they\n    # aren't part of the link.\n\n    elsif (/^\\.\\\\\"\\s*HREF/)\n      {\n      $_=<STDIN>;\n      chomp;\n      $_ = &do_line($_);\n      $_ =~ s/\\s+$//;\n      $_ =~ /^(?:<.>)?([^<(]+)(?:\\(\\))?(?:<\\/.>)?(?:\\(\\d+\\))?[.,;:]?$/;\n      print TEMP \"<a href=\\\"$1.html\\\">$_</a>\\n\";\n      }\n\n    # A comment that starts \"HTML\" inserts literal HTML\n\n    elsif (/^\\.\\\\\"\\s*HTML\\s*(.*)/)\n      {\n      print TEMP $1;\n      }\n\n    # A comment that starts < inserts that HTML at the end of the\n    # *next* input line - so as not to get a newline between them.\n\n    elsif (/^\\.\\\\\"\\s*(<.*>)/)\n      {\n      my($markup) = $1;\n      $_=<STDIN>;\n      chomp;\n      $_ = &do_line($_);\n      $_ =~ s/\\s+$//;\n      print TEMP \"$_$markup\\n\";\n      }\n\n    # A comment that starts JOIN joins the next two lines together, with one\n    # space between them. Then that line is processed. This is used in some\n    # displays where two lines are needed for the \"man\" version. JOINSH works\n    # the same, except that it assumes this is a shell command, so removes\n    # continuation backslashes.\n\n    elsif (/^\\.\\\\\"\\s*JOIN(SH)?/)\n      {\n      my($one,$two);\n      $one = <STDIN>;\n      $two = <STDIN>;\n      $one =~ s/\\s*\\\\e\\s*$// if (defined($1));\n      chomp($one);\n      $two =~ s/^\\s+//;\n      $_ = \"$one $two\";\n      redo;            # Process the joined lines\n      }\n\n    # .EX/.EE are used in the pcre2demo page to bracket the entire program,\n    # which is unmodified except for turning backslash into \"\\e\".\n\n    elsif (/^\\.EX\\s*$/)\n      {\n      print TEMP \"<pre>\\n\";\n      while (<STDIN>)\n        {\n        last if /^\\.EE\\s*$/;\n        s/\\\\e/\\\\/g;\n        s/&/&amp;/g;\n        s/</&lt;/g;\n        s/>/&gt;/g;\n        print TEMP;\n        }\n      }\n\n    # Ignore anything not recognized\n\n    next;\n    }\n\n  # Line does not begin with a dot. Replace blank lines with new paragraphs\n\n  if (/^\\s*$/)\n    {\n    &end_para() if ($wrotetext);\n    next;\n    }\n\n  # Convert fonts changes and output an ordinary line. Ensure that indented\n  # lines are marked as literal.\n\n  $_ = &do_line($_);\n  &new_para() if (!$inpara);\n\n  if (/^\\s/)\n    {\n    if (!$inpre)\n      {\n      print TEMP \"<pre>\\n\";\n      $inpre = 1;\n      }\n    }\n  elsif ($inpre)\n    {\n    print TEMP \"</pre>\\n\";\n    $inpre = 0;\n    }\n\n  # Add <br> to the end of a non-literal line if we are within .nf/.fi\n\n  $_ .= \"<br>\\n\" if (!$inpre && $innf);\n\n  print TEMP;\n  $wrotetext = 1;\n  }\n\n# The TOC, if present, will have been written - terminate it\n\nprint \"</ul>\\n\" if ($toc);\n\n# Copy the remainder to the standard output\n\nclose(TEMP);\nopen(TEMP, \"/tmp/$$\") || die \"Can't open /tmp/$$ for input\\n\";\n\nprint while (<TEMP>);\n\nif ($header)\n  {\n  print <<End ;\n<p>\nReturn to the <a href=\"index.html\">PCRE2 index page</a>.\n</p>\nEnd\n  }\n\nclose(TEMP);\nunlink(\"/tmp/$$\");\n\n# End\n"
  },
  {
    "path": "maint/CheckMan",
    "content": "#! /usr/bin/perl\n\n# A script to scan PCRE2's man pages to check for typos in the control\n# sequences. I use only a small set of the available repertoire, so it is \n# straightforward to check that nothing else has slipped in by mistake. This\n# script should be called in the doc directory.\n\n$yield = 0;\n\nwhile (scalar(@ARGV) > 0)\n  {\n  $line = 0; \n  $file = shift @ARGV;\n    \n  open (IN, $file) || die \"Failed to open $file\\n\";\n  \n  while (<IN>)\n    {  \n    $count = 0;\n    $line++; \n    if (/^\\s*$/)\n      {\n      printf \"Empty line $line of $file\\n\";\n      $yield = 1;  \n      }   \n    elsif (/^\\./)\n      {\n      if (!/^\\.\\s*$|\n            ^\\.B\\s+\\S| \n            ^\\.TH\\s\\S|\n            ^\\.SH\\s\\S|\n            ^\\.SS\\s\\S|\n            ^\\.TP(?:\\s?\\d+)?\\s*$|\n            ^\\.br\\s*$| \n            ^\\.rs\\s*$| \n            ^\\.sp\\s*$| \n            ^\\.nf\\s*$| \n            ^\\.fi\\s*$| \n            ^\\.P\\s*$| \n            ^\\.PP\\s*$| \n            ^\\.\\\\\"(?:\\ HREF)?\\s*$|\n            ^\\.\\\\\"\\sDEFINE\\s\\w+$|\n            ^\\.\\\\\"\\sHTML\\s<a\\shref=\"[^\"]+?\">\\s*$|\n            ^\\.\\\\\"\\sHTML\\s<a\\sname=\"[^\"]+?\"><\\/a>\\s*$|\n            ^\\.\\\\\"\\s<\\/a>\\s*$|\n            ^\\.\\\\\"\\sJOINSH\\s*$|\n            ^\\.\\\\\"\\sJOIN\\s*$/x  \n         )\n        {\n        printf \"Bad control line $line of $file\\n\";\n        $yield = 1;\n        }\n      }\n    elsif (/\\\\[^ef&]|\\\\f[^IBP]/)\n      {\n      printf \"Bad backslash in line $line of $file\\n\";\n      $yield = 1;\n      }\n    while (/\\\\f[BI]/g)\n      {\n      $count++;\n      }\n    while (/\\\\fP/g)\n      {\n      $count--;\n      }\n    if ($count != 0)\n      {\n      printf \"Mismatching formatting in line $line of $file\\n\";\n      $yield = 1;\n      }\n    }\n     \n  close(IN);   \n  }\n  \nexit $yield;\n# End  \n"
  },
  {
    "path": "maint/CheckTxt",
    "content": "#! /usr/bin/perl\n\n# This is a script for checking whether a file contains any carriage return\n# characters, and whether it is valid UTF-8.\n\nuse Encode;\n\n# This subroutine does the work for one file.\n\n$yield = 0;\n$ascii = 0; # bool\n$crlf = 0; # bool\n\nsub checktxt {\nmy($file) = $_[0];\nopen(IN, \"<:raw\", \"$file\") || die \"Can't open $file for input\";\n$bin = do { local $/ = undef; <IN> };\nclose(IN);\nmy $data;\neval\n  {\n  $data = Encode::decode(\"UTF-8\", $bin, Encode::FB_CROAK);\n  1; # return true\n  }\nor do\n  {\n  printf \"Bad UTF-8 in $file\\n\";\n  $yield = 1;\n  return;\n  };\nif (!$crlf && index($data, \"\\r\") != -1)\n  {\n  printf \"CR in $file\\n\";\n  $yield = 1;\n  }\nif ($ascii && $data =~ /[^\\x01-\\x7e]/)\n  {\n  printf \"Non-ASCII in $file\\n\";\n  $yield = 1;\n  }\n}\n\n# This is the main program\n\n$, = \"\";   # Output field separator\nfor ($i = 0; $i < @ARGV; $i++)\n  {\n  if ($ARGV[$i] eq \"-ascii\")\n    {\n    $ascii = 1;\n    }\n  elsif ($ARGV[$i] eq \"-crlf\")\n    {\n    $crlf = 1;\n    }\n  else\n    {\n    checktxt($ARGV[$i]);\n    }\n  }\n\nexit $yield;\n\n# End\n"
  },
  {
    "path": "maint/CleanTxt",
    "content": "#! /usr/bin/perl -w\n\n# Script to take the output of nroff -man and remove all the backspacing and\n# the page footers and the screen commands etc so that it is more usefully\n# readable online. In fact, in the latest nroff, intermediate footers don't\n# seem to be generated any more.\n\n$blankcount = 0;\n$lastwascut = 0;\n$firstheader = 1;\n\n# Input on STDIN; output to STDOUT.\n\nwhile (<STDIN>)\n  {\n  s/\\x1b\\[\\d+m//g;   # Remove screen controls \"ESC [ number m\"\n  s/.\\x8//g;         # Remove \"char, backspace\"\n\n  # Handle header lines. Retain only the first one we encounter, but remove\n  # the blank line that follows. Any others (e.g. at end of document) and the\n  # following blank line are dropped.\n\n  if (/^PCRE(\\w*)\\(([13])\\)\\s+PCRE\\1\\(\\2\\)$/)\n    {\n    if ($firstheader)\n      {\n      $firstheader = 0;\n      print;\n      $lastprinted = $_;\n      $lastwascut = 0;\n      }\n    $_=<STDIN>;       # Remove a blank that follows\n    next;\n    }\n\n  # Count runs of empty lines\n\n  if (/^\\s*$/)\n    {\n    $blankcount++;\n    $lastwascut = 0;\n    next;\n    }\n\n  # If a chunk of lines has been cut out (page footer) and the next line\n  # has a different indentation, put back one blank line.\n\n  if ($lastwascut && $blankcount < 1 && defined($lastprinted))\n    {\n    ($a) = $lastprinted =~ /^(\\s*)/;\n    ($b) = $_ =~ /^(\\s*)/;\n    $blankcount++ if ($a ne $b);\n    }\n\n  # We get here only when we have a non-blank line in hand. If it was preceded\n  # by 3 or more blank lines, read the next 3 lines and see if they are blank.\n  # If so, remove all 7 lines, and remember that we have just done a cut.\n\n  if ($blankcount >= 3)\n    {\n    for ($i = 0; $i < 3; $i++)\n      {\n      $next[$i] = <STDIN>;\n      $next[$i] = \"\" if !defined $next[$i];\n      $next[$i] =~ s/\\x1b\\[\\d+m//g;   # Remove screen controls \"ESC [ number m\"\n      $next[$i] =~ s/.\\x8//g;         # Remove \"char, backspace\"\n      }\n\n    # Cut out chunks of the form <3 blanks><non-blank><3 blanks>\n\n    if ($next[0] =~ /^\\s*$/ &&\n        $next[1] =~ /^\\s*$/ &&\n        $next[2] =~ /^\\s*$/)\n      {\n      $blankcount -= 3;\n      $lastwascut = 1;\n      }\n\n    # Otherwise output the saved blanks, the current, and the next three\n    # lines. Remember the last printed line.\n\n    else\n      {\n      for ($i = 0; $i < $blankcount; $i++) { print \"\\n\"; }\n      print;\n      for ($i = 0; $i < 3; $i++)\n        {\n        $next[$i] =~ s/.\\x8//g;\n        print $next[$i];\n        $lastprinted = $_;\n        }\n      $lastwascut = 0;\n      $blankcount = 0;\n      }\n    }\n\n  # This non-blank line is not preceded by 3 or more blank lines. Output\n  # any blanks there are, and the line. Remember it. Force two blank lines\n  # before headings.\n\n  else\n    {\n    $blankcount = 2 if /^\\S/ && !/^Last updated/ && !/^Copyright/ &&\n      defined($lastprinted);\n    for ($i = 0; $i < $blankcount; $i++) { print \"\\n\"; }\n    print;\n    $lastprinted = $_;\n    $lastwascut = 0;\n    $blankcount = 0;\n    }\n  }\n\n# End\n"
  },
  {
    "path": "maint/Detrail",
    "content": "#! /usr/bin/perl\n\n# This is a script for removing trailing whitespace from lines in files that\n# are listed on the command line.\n\n# This subroutine does the work for one file.\n\nsub detrail {\nmy($file) = $_[0];\nmy($changed) = 0;\nopen(IN, \"<\", \"$file\") || die \"Can't open $file for input\";\n@lines = <IN>;\nclose(IN);\nforeach (@lines)\n  {\n  if (/\\s+\\n$/)\n    {\n    s/\\s+\\n$/\\n/;\n    $changed = 1;\n    }\n  }\nif ($changed)\n  {\n  open(OUT, \">\", \"$file\") || die \"Can't open $file for output\";\n  print OUT @lines;\n  close(OUT);\n  }\n}\n\n# This is the main program\n\n$, = \"\";   # Output field separator\nfor ($i = 0; $i < @ARGV; $i++) { &detrail($ARGV[$i]); }\n\n# End\n"
  },
  {
    "path": "maint/FetchUcd.sh",
    "content": "#! /bin/sh\n\n# Small helper script to fetch the Unicode Character Database files\n\nVER=17.0.0\n\ncd \"$(dirname \"$0\")\"\npwd\n\nrm -rf Unicode.tables/\nmkdir Unicode.tables\n\nfetch_file()\n{\n  url=\"$1\"\n  i=\"$2\"\n\n  echo \"=== Downloading $i ===\"\n  # Download each file with curl and place into the Unicode.tables folder\n  # Reject the download if there is an HTTP error\n  if ! curl --fail -o Unicode.tables/$i -L \"$url\"; then\n    echo \"Error downloading $i\"\n    rm -f Unicode.tables/$i\n  fi\n}\n\nfor i in BidiMirroring.txt \\\n         CaseFolding.txt \\\n         DerivedCoreProperties.txt \\\n         PropertyAliases.txt \\\n         PropertyValueAliases.txt \\\n         PropList.txt \\\n         ScriptExtensions.txt \\\n         Scripts.txt \\\n         UnicodeData.txt \\\n         ; do\n  fetch_file \"https://www.unicode.org/Public/$VER/ucd/$i\" \"$i\"\ndone\n\nfor i in DerivedBidiClass.txt \\\n         DerivedGeneralCategory.txt \\\n         ; do\n  fetch_file \"https://www.unicode.org/Public/$VER/ucd/extracted/$i\" \"$i\"\ndone\n\nfor i in GraphemeBreakProperty.txt \\\n         ; do\n  fetch_file \"https://www.unicode.org/Public/$VER/ucd/auxiliary/$i\" \"$i\"\ndone\n\nfor i in emoji-data.txt \\\n         ; do\n  fetch_file \"https://www.unicode.org/Public/$VER/ucd/emoji/$i\" \"$i\"\ndone\n"
  },
  {
    "path": "maint/FilterCoverage.py",
    "content": "#! /usr/bin/env python3\n\n# Script which is a simple LCOV filter: removes DA/BRDA entries for lines marked in-source with\n# \"LCOV_EXCL_LINE\" or \"LCOV_EXCL_START\"/\"LCOV_EXCL_STOP\".\n#\n# Usage: python3 FilterCoverage.py coverage-lcov.info > coverage-lcov.filtered.info\n\nimport sys\nimport re\n\ndef scan_exclusions(srcpath):\n    \"\"\"Return a set of line numbers to exclude for this source file.\"\"\"\n    with open(srcpath, \"r\", encoding=\"utf-8\") as fh:\n        text = fh.readlines()\n    excl = set()\n    in_block = False\n    for i, line in enumerate(text, start=1):\n        if \"LCOV_EXCL_LINE\" in line:\n            excl.add(i)\n        if \"LCOV_EXCL_START\" in line:\n            in_block = True\n            excl.add(i)\n            continue\n        if \"LCOV_EXCL_STOP\" in line:\n            excl.add(i)\n            in_block = False\n            continue\n        if in_block:\n            excl.add(i)\n\n        # If line matches '^\\s*#(if|endif|else|elif)\\b', exclude it.\n        # For some reason, Clang likes to output coverage for these lines,\n        # even though they have no executable code.\n        if re.match(r'^\\s*#(if|endif|else|elif|ifdef|ifndef)\\b', line):\n            excl.add(i)\n\n        # Similarly, Clang seems to generate DA entries for \"}\" lines inside\n        # switch statements. Exclude these too.\n        if re.match(r'^\\s*}\\s*(/\\*.*?\\*/)?$', line):\n            excl.add(i)\n    return excl\n\nDA_RE = re.compile(r'^\\s*DA:(\\d+),(\\d+)(,.*)?\\s*$')\nLF_RE = re.compile(r'^\\s*LF:(\\d+)\\s*$')\nLH_RE = re.compile(r'^\\s*LH:(\\d+)\\s*$')\nBRDA_RE = re.compile(r'^\\s*BRDA:(\\d+),([e\\d]+),(.*),([-\\d]+)\\s*$')\nBRF_RE = re.compile(r'^\\s*BRF:(\\d+)\\s*$')\nBRH_RE = re.compile(r'^\\s*BRH:(\\d+)\\s*$')\nFN_RE = re.compile(r'^\\s*FN:(\\d+),([^,\\s]*)\\s*$')\nFNDA_RE = re.compile(r'^\\s*FNDA:(\\d+),([^,\\s]*)\\s*$')\nFNF_RE = re.compile(r'^\\s*FNF:(\\d+)\\s*$')\nFNH_RE = re.compile(r'^\\s*FNH:(\\d+)\\s*$')\n\ndef process_block(block_lines):\n    \"\"\"Return processed block lines with excluded DA/BRDA removed and LF/LH fixed.\"\"\"\n    if not block_lines:\n        return block_lines\n    # get SF path from first 'SF:' line (should be first)\n    first = block_lines[0]\n    assert first.lstrip().startswith('SF:')\n    sf_path = first.split(':', 1)[1].strip()\n    exclusions = scan_exclusions(sf_path)\n\n    new_lines = []\n    da_orig_found = 0\n    da_orig_hit = 0\n    da_new_found = 0\n    da_new_hit = 0\n    brda_orig_found = 0\n    brda_orig_hit = 0\n    brda_new_found = 0\n    brda_new_hit = 0\n    fnda_orig_found = 0\n    fnda_orig_hit = 0\n    fnda_new_found = 0\n    fnda_new_hit = 0\n\n    fn_exclusions = set()\n\n    # Pass 1: identify FN exclusions\n    for line in block_lines:\n        m_fn = FN_RE.match(line)\n        assert (m_fn is not None) == line.lstrip().startswith('FN:')\n        if m_fn:\n            fn_line = int(m_fn.group(1))\n            fn_name = m_fn.group(2)\n            if fn_line in exclusions:\n                fn_exclusions.add(fn_name)\n\n    # Pass 2: filter DA, BRDA, FN/FNDA; copy others verbatim\n    for line in block_lines:\n        m_da = DA_RE.match(line)\n        assert (m_da is not None) == line.lstrip().startswith('DA:')\n        if m_da:\n            line_num = int(m_da.group(1))\n            execution_count = int(m_da.group(2))\n            da_orig_found += 1\n            if execution_count > 0:\n                da_orig_hit += 1\n            if line_num in exclusions:\n                # drop this DA line\n                continue\n            da_new_found += 1\n            if execution_count > 0:\n                da_new_hit += 1\n            new_lines.append(line)\n            continue\n        m_brda = BRDA_RE.match(line)\n        assert (m_brda is not None) == line.lstrip().startswith('BRDA:')\n        if m_brda:\n            brda_orig_found += 1\n            taken = m_brda.group(4)\n            if taken != '-' and int(taken) > 0:\n                brda_orig_hit += 1\n            if int(m_brda.group(1)) in exclusions:\n                # drop this BRDA line\n                continue\n            brda_new_found += 1\n            if taken != '-' and int(taken) > 0:\n                brda_new_hit += 1\n            new_lines.append(line)\n            continue\n        m_fnda = FNDA_RE.match(line)\n        assert (m_fnda is not None) == line.lstrip().startswith('FNDA:')\n        if m_fnda:\n            fnda_orig_found += 1\n            fn_name = m_fnda.group(2)\n            count = int(m_fnda.group(1))\n            if count > 0:\n                fnda_orig_hit += 1\n            if fn_name in fn_exclusions:\n                # drop this FNDA line\n                continue\n            fnda_new_found += 1\n            if count > 0:\n                fnda_new_hit += 1\n            new_lines.append(line)\n            continue\n        m_fn = FN_RE.match(line)\n        assert (m_fn is not None) == line.lstrip().startswith('FN:')\n        if m_fn:\n            fn_line = int(m_fn.group(1))\n            fn_name = m_fn.group(2)\n            if fn_name in fn_exclusions:\n                # drop this FN line\n                continue\n            new_lines.append(line)\n            continue\n        # other lines: append unchanged\n        new_lines.append(line)\n\n    # Pass 3: fix LF/LH, BRF/BRH, FNF/FNH\n    # Mutate new_lines. If we find any LF/LH lines, check they have the expected original values.\n    # If so, replace with new values. If not, print a warning.\n    for i, line in enumerate(new_lines):\n        # LF\n        m_lf = LF_RE.match(line)\n        assert (m_lf is not None) == line.lstrip().startswith('LF:')\n        if m_lf:\n            # preserve leading whitespace exactly\n            leading = re.match(r'^(\\s*)', line).group(1)\n            # replace with recomputed value (number of DA entries remaining)\n            new_lines[i] = f\"{leading}LF:{da_new_found}\\n\"\n            # warn if original disagreed (useful for debugging)\n            try:\n                lf_orig = int(m_lf.group(1))\n                if lf_orig != da_orig_found:\n                    print(f\"warning: original LF ({lf_orig}) != counted DA entries ({da_orig_found}) for {sf_path}\", file=sys.stderr)\n            except Exception:\n                pass\n            continue\n\n        # LH\n        m_lh = LH_RE.match(line)\n        assert (m_lh is not None) == line.lstrip().startswith('LH:')\n        if m_lh:\n            leading = re.match(r'^(\\s*)', line).group(1)\n            new_lines[i] = f\"{leading}LH:{da_new_hit}\\n\"\n            try:\n                lh_orig = int(m_lh.group(1))\n                if lh_orig != da_orig_hit:\n                    print(f\"warning: original LH ({lh_orig}) != counted DA hits ({da_orig_hit}) for {sf_path}\", file=sys.stderr)\n            except Exception:\n                pass\n            continue\n\n        # BRF\n        m_brf = BRF_RE.match(line)\n        assert (m_brf is not None) == line.lstrip().startswith('BRF:')\n        if m_brf:\n            leading = re.match(r'^(\\s*)', line).group(1)\n            # replace with recomputed branch-found (if you computed brda_new_found above)\n            new_lines[i] = f\"{leading}BRF:{brda_new_found}\\n\"\n            try:\n                brf_orig = int(m_brf.group(1))\n                if brf_orig != brda_orig_found:\n                    print(f\"warning: original BRF ({brf_orig}) != counted BRDA entries ({brda_orig_found}) for {sf_path}\", file=sys.stderr)\n            except Exception:\n                pass\n            continue\n\n        # BRH\n        m_brh = BRH_RE.match(line)\n        assert (m_brh is not None) == line.lstrip().startswith('BRH:')\n        if m_brh:\n            leading = re.match(r'^(\\s*)', line).group(1)\n            new_lines[i] = f\"{leading}BRH:{brda_new_hit}\\n\"\n            try:\n                brh_orig = int(m_brh.group(1))\n                if brh_orig != brda_orig_hit:\n                    print(f\"warning: original BRH ({brh_orig}) != counted BRDA hits ({brda_orig_hit}) for {sf_path}\", file=sys.stderr)\n            except Exception:\n                pass\n            continue\n\n        # FNF\n        m_fnf = FNF_RE.match(line)\n        assert (m_fnf is not None) == line.lstrip().startswith('FNF:')\n        if m_fnf:\n            leading = re.match(r'^(\\s*)', line).group(1)\n            new_lines[i] = f\"{leading}FNF:{fnda_new_found}\\n\"\n            try:\n                fnf_orig = int(m_fnf.group(1))\n                if fnf_orig != fnda_orig_found:\n                    print(f\"warning: original FNF ({fnf_orig}) != counted FNDA entries ({fnda_orig_found}) for {sf_path}\", file=sys.stderr)\n            except Exception:\n                pass\n            continue\n\n        # FNH\n        m_fnh = FNH_RE.match(line)\n        assert (m_fnh is not None) == line.lstrip().startswith('FNH:')\n        if m_fnh:\n            leading = re.match(r'^(\\s*)', line).group(1)\n            new_lines[i] = f\"{leading}FNH:{fnda_new_hit}\\n\"\n            try:\n                fnh_orig = int(m_fnh.group(1))\n                if fnh_orig != fnda_orig_hit:\n                    print(f\"warning: original FNH ({fnh_orig}) != counted FNDA hits ({fnda_orig_hit}) for {sf_path}\", file=sys.stderr)\n            except Exception:\n                pass\n            continue\n\n    return new_lines\n\ndef filter_lcov(in_fh, out_fh):\n    lines = in_fh.readlines()\n\n    i = 0\n    out_lines = []\n    while i < len(lines):\n        line = lines[i]\n        if line.lstrip().startswith('SF:'):\n            # buffer block until end_of_record\n            block = []\n            while i < len(lines):\n                block.append(lines[i])\n                if lines[i].strip() == 'end_of_record':\n                    i += 1\n                    break\n                i += 1\n            processed = process_block(block)\n            out_lines.extend(processed)\n        else:\n            out_lines.append(line)\n            i += 1\n\n    out_fh.writelines(out_lines)\n\nif __name__ == \"__main__\":\n    if len(sys.argv) > 3:\n        print(\"Usage: python3 FilterCoverage.py [infile [outfile]]\", file=sys.stderr)\n        sys.exit(1)\n    if len(sys.argv) > 2:\n        with open(sys.argv[2], \"w\", encoding=\"utf-8\") as out_fh:\n            with open(sys.argv[1], \"r\", encoding=\"utf-8\") as in_fh:\n                filter_lcov(in_fh, out_fh)\n    elif len(sys.argv) > 1:\n        with open(sys.argv[1], \"r\", encoding=\"utf-8\") as fh:\n            filter_lcov(fh, sys.stdout)\n    else:\n        filter_lcov(sys.stdin, sys.stdout)\n"
  },
  {
    "path": "maint/GenerateCommon.py",
    "content": "#                   PCRE2 UNICODE PROPERTY SUPPORT\n#                   ------------------------------\n\n# This file is a Python module containing common lists and functions for the\n# GenerateXXX scripts that create various.c and .h files from Unicode data\n# files. It was created as part of a re-organizaton of these scripts in\n# December 2021.\n\n\nimport re\n\n\n# ---------------------------------------------------------------------------\n#                             DATA LISTS\n# ---------------------------------------------------------------------------\n\n# BIDI classes in the DerivedBidiClass.txt file, short and long identifiers.\n\nbidi_classes = [\n  'AL',  'Arabic_Letter',\n  'AN',  'Arabic_Number',\n  'B',   'Paragraph_Separator',\n  'BN',  'Boundary_Neutral',\n  'CS',  'Common_Separator',\n  'EN',  'European_Number',\n  'ES',  'European_Separator',\n  'ET',  'European_Terminator',\n  'FSI', 'First_Strong_Isolate',\n  'L',   'Left_To_Right',\n  'LRE', 'Left_To_Right_Embedding',\n  'LRI', 'Left_To_Right_Isolate',\n  'LRO', 'Left_To_Right_Override',\n  'NSM', 'Nonspacing_Mark',\n  'ON',  'Other_Neutral',\n  'PDF', 'Pop_Directional_Format',\n  'PDI', 'Pop_Directional_Isolate',\n  'R',   'Right_To_Left',\n  'RLE', 'Right_To_Left_Embedding',\n  'RLI', 'Right_To_Left_Isolate',\n  'RLO', 'Right_To_Left_Override',\n  'S',   'Segment_Separator',\n  'WS',  'White_Space'\n  ]\n\n# Particular category property names, with comments. NOTE: If ever this list\n# is changed, the table called \"catposstab\" in the pcre2_auto_possess.c file\n# must be edited to keep in step.\n\ncategory_names = [\n  'Cc', 'Control',\n  'Cf', 'Format',\n  'Cn', 'Unassigned',\n  'Co', 'Private use',\n  'Cs', 'Surrogate',\n  'Ll', 'Lower case letter',\n  'Lm', 'Modifier letter',\n  'Lo', 'Other letter',\n  'Lt', 'Title case letter',\n  'Lu', 'Upper case letter',\n  'Mc', 'Spacing mark',\n  'Me', 'Enclosing mark',\n  'Mn', 'Non-spacing mark',\n  'Nd', 'Decimal number',\n  'Nl', 'Letter number',\n  'No', 'Other number',\n  'Pc', 'Connector punctuation',\n  'Pd', 'Dash punctuation',\n  'Pe', 'Close punctuation',\n  'Pf', 'Final punctuation',\n  'Pi', 'Initial punctuation',\n  'Po', 'Other punctuation',\n  'Ps', 'Open punctuation',\n  'Sc', 'Currency symbol',\n  'Sk', 'Modifier symbol',\n  'Sm', 'Mathematical symbol',\n  'So', 'Other symbol',\n  'Zl', 'Line separator',\n  'Zp', 'Paragraph separator',\n  'Zs', 'Space separator'\n  ]\n\n# The Extended_Pictographic property is not found in the file where all the\n# others are (GraphemeBreakProperty.txt). It comes from the emoji-data.txt\n# file, but we list it here so that the name has the correct index value.\n\nbreak_properties = [\n  'CR',                    ' 0',\n  'LF',                    ' 1',\n  'Control',               ' 2',\n  'Extend',                ' 3',\n  'Prepend',               ' 4',\n  'SpacingMark',           ' 5',\n  'L',                     ' 6 Hangul syllable type L',\n  'V',                     ' 7 Hangul syllable type V',\n  'T',                     ' 8 Hangul syllable type T',\n  'LV',                    ' 9 Hangul syllable type LV',\n  'LVT',                   '10 Hangul syllable type LVT',\n  'Regional_Indicator',    '11',\n  'Other',                 '12',\n  'ZWJ',                   '13',\n  'Extended_Pictographic', '14'\n  ]\n\n# List of files from which the names of Boolean properties are obtained, along\n# with a list of regex patterns for properties to be ignored, and a list of\n# extra pattern names to add.\n\nbool_propsfiles = ['PropList.txt', 'DerivedCoreProperties.txt', 'emoji-data.txt']\nbool_propsignore = [r'^Other_', r'^Hyphen$']\nbool_propsextras = ['ASCII', 'Bidi_Mirrored']\n\n\n# ---------------------------------------------------------------------------\n#                   GET BOOLEAN PROPERTY NAMES\n# ---------------------------------------------------------------------------\n\n# Get a list of Boolean property names from a number of files.\n\ndef getbpropslist():\n  bplist = []\n  bplast = \"\"\n\n  for filename in bool_propsfiles:\n    try:\n      file = open('Unicode.tables/' + filename, 'r')\n    except IOError:\n      print(f\"** Couldn't open {'Unicode.tables/' + filename}\\n\")\n      sys.exit(1)\n\n    for line in file:\n      line = re.sub(r'#.*', '', line)\n      data = list(map(str.strip, line.split(';')))\n      if len(data) <= 1 or data[1] == bplast:\n        continue\n      bplast = data[1]\n      for pat in bool_propsignore:\n        if re.match(pat, bplast) != None:\n          break\n      else:\n        if bplast not in bplist:\n          bplist.append(bplast)\n\n    file.close()\n\n  bplist.extend(bool_propsextras)\n  bplist.sort()\n  return bplist\n\nbool_properties = getbpropslist()\nbool_props_list_item_size = (len(bool_properties) + 31) // 32\n\n\n\n# ---------------------------------------------------------------------------\n#                  COLLECTING PROPERTY NAMES AND ALIASES\n# ---------------------------------------------------------------------------\n\nscript_names = ['Unknown']\nabbreviations = {}\n\ndef collect_property_names():\n  global script_names\n  global abbreviations\n\n  names_re = re.compile(r'^[0-9A-F]{4,6}(?:\\.\\.[0-9A-F]{4,6})? +; ([A-Za-z_]+) #')\n\n  last_script_name = \"\"\n  with open(\"Unicode.tables/Scripts.txt\") as f:\n    for line in f:\n      match_obj = names_re.match(line)\n\n      if match_obj == None or match_obj.group(1) == last_script_name:\n        continue\n\n      last_script_name = match_obj.group(1)\n      script_names.append(last_script_name)\n\n  # Sometimes there is comment in the line\n  # so splitting around semicolon is not enough\n  value_alias_re = re.compile(r' *([A-Za-z_]+) *; *([A-Za-z_]+) *; *([A-Za-z_]+)(?: *; *([A-Za-z_ ]+))?')\n\n  with open(\"Unicode.tables/PropertyValueAliases.txt\") as f:\n    for line in f:\n      match_obj = value_alias_re.match(line)\n\n      if match_obj == None:\n        continue\n\n      if match_obj.group(1) == \"sc\":\n        if match_obj.group(2) == match_obj.group(3):\n          abbreviations[match_obj.group(3)] = ()\n        elif match_obj.group(4) == None:\n          abbreviations[match_obj.group(3)] = (match_obj.group(2),)\n        else:\n          abbreviations[match_obj.group(3)] = (match_obj.group(2), match_obj.group(4))\n\n  # We can also collect Boolean property abbreviations into the same dictionary\n\n  bin_alias_re = re.compile(r' *([A-Za-z_]+) *; *([A-Za-z_]+)(?: *; *([A-Za-z_]+))?')\n  with open(\"Unicode.tables/PropertyAliases.txt\") as f:\n    for line in f:\n      match_obj = bin_alias_re.match(line)\n      if match_obj == None:\n        continue\n\n      if match_obj.group(2) != match_obj.group(1) and match_obj.group(2) in bool_properties:\n        if match_obj.group(3) == None:\n          abbreviations[match_obj.group(2)] = (match_obj.group(1),)\n        else:\n          abbreviations[match_obj.group(2)] = (match_obj.group(1), match_obj.group(3))\n\ncollect_property_names()\n\n\n\n# ---------------------------------------------------------------------------\n#                      REORDERING SCRIPT NAMES\n# ---------------------------------------------------------------------------\n\nscript_abbrevs = []\n\ndef reorder_scripts():\n  global script_names\n  global script_abbrevs\n  global abbreviations\n\n  for name in script_names:\n    abbrevs = abbreviations[name]\n    script_abbrevs.append(name if len(abbrevs) == 0 else abbrevs[0])\n\n  extended_script_abbrevs = set()\n  with open(\"Unicode.tables/ScriptExtensions.txt\") as f:\n    names_re = re.compile(r'^[0-9A-F]{4,6}(?:\\.\\.[0-9A-F]{4,6})? +; ([A-Za-z_ ]+[A-Za-z]) +#')\n\n    for line in f:\n      match_obj = names_re.match(line)\n\n      if match_obj == None:\n        continue\n\n      for name in match_obj.group(1).split(\" \"):\n        extended_script_abbrevs.add(name)\n\n  new_script_names = []\n  new_script_abbrevs = []\n\n  for idx, abbrev in enumerate(script_abbrevs):\n    if abbrev in extended_script_abbrevs:\n      new_script_names.append(script_names[idx])\n      new_script_abbrevs.append(abbrev)\n\n  for idx, abbrev in enumerate(script_abbrevs):\n    if abbrev not in extended_script_abbrevs:\n      new_script_names.append(script_names[idx])\n      new_script_abbrevs.append(abbrev)\n\n  script_names = new_script_names\n  script_abbrevs = new_script_abbrevs\n\nreorder_scripts()\nscript_list_item_size = (script_names.index('Unknown') + 31) // 32\n\n\n# ---------------------------------------------------------------------------\n#                         DERIVED LISTS\n# ---------------------------------------------------------------------------\n\n# Create general character property names from the first letters of the\n# particular categories.\n\ngcn_set = set(category_names[i][0] for i in range(0, len(category_names), 2))\ngeneral_category_names = list(gcn_set)\ngeneral_category_names.sort()\n\n\n# ---------------------------------------------------------------------------\n#                           FUNCTIONS\n# ---------------------------------------------------------------------------\n\nimport sys\n\n# Open an output file, using the command's argument or a default. Write common\n# preliminary header information.\n\ndef open_output(default):\n  if len(sys.argv) > 2:\n    print('** Too many arguments: just give a file name')\n    sys.exit(1)\n  if len(sys.argv) == 2:\n    output_name = sys.argv[1]\n  else:\n    output_name = default\n  try:\n    file = open(output_name, \"w\")\n  except IOError:\n    print(\"** Couldn't open %s\" % output_name)\n    sys.exit(1)\n\n  script_name = sys.argv[0]\n  i = script_name.rfind('/')\n  if i >= 0:\n    script_name = script_name[i+1:]\n\n  file.write(\"\"\"\\\n/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2022 University of Cambridge\n\nThis module is auto-generated from Unicode data files. DO NOT EDIT MANUALLY!\n\"\"\")\n\n  file.write(\"Instead, modify the maint/%s script and run it to generate\\n\"\n  \"a new version of this code.\\n\\n\" % script_name)\n\n  file.write(\"\"\"\\\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\\n\\n\"\"\")\n  return file\n\n# End of UcpCommon.py\n"
  },
  {
    "path": "maint/GenerateTest.py",
    "content": "#! /usr/bin/env python3\n\n#                   PCRE2 UNICODE PROPERTY SUPPORT\n#                   ------------------------------\n#\n# This file auto-generates Unicode property tests and their expected output.\n# It is recommended to re-run this generator after the Unicode files are\n# updated. The names of the generated files are `testinput` and `testoutput`\n# and should be copied over to replace either test26 or test27 files.\n\nimport re\nimport sys\n\nfrom GenerateCommon import \\\n  script_names, \\\n  script_abbrevs\n\ndef write_both(text):\n  input_file.write(text)\n  output_file.write(text)\n\ndef to_string_char(ch_idx):\n  if ch_idx < 128:\n    if ch_idx < 16:\n      return \"\\\\x{0%x}\" % ch_idx\n    if ch_idx >= 32:\n      return chr(ch_idx)\n  return \"\\\\x{%x}\" % ch_idx\n\ntry:\n  input_file = open(\"testinput\", \"w\")\n  output_file = open(\"testoutput\", \"w\")\nexcept IOError:\n  print(\"** Couldn't create output files\")\n  sys.exit(1)\n\nwrite_both(\"# These tests were generated by maint/GenerateTest.py using PCRE2's UCP\\n\");\nwrite_both(\"# data, do not edit unless that data has changed and they are reflecting\\n\");\nwrite_both(\"# a previous version.\\n\\n\");\n\n# ---------------------------------------------------------------------------\n#                      UNICODE SCRIPT EXTENSION TESTS\n# ---------------------------------------------------------------------------\n\n\ndef gen_script_tests():\n  script_data = [None] * len(script_names)\n  char_data = [None] * 0x110000\n\n  property_re = re.compile(r\"^([0-9A-F]{4,6})(?:\\.\\.([0-9A-F]{4,6}))? +; ([A-Za-z_ ]+[A-Za-z]) +#\")\n  prev_name = \"\"\n  script_idx = -1\n\n  with open(\"Unicode.tables/Scripts.txt\") as f:\n    version_pat = r\"^# Scripts-(\\d+\\.\\d+\\.\\d+)\\.txt$\"\n    v = re.match(version_pat, f.readline())\n    unicode_version = v.group(1)\n\n    write_both(\"# Unicode Script Extension tests for version \" + unicode_version + \"\\n\\n\")\n    write_both(\"#perltest\\n\\n\")\n\n    for line in f:\n      match_obj = property_re.match(line)\n\n      if match_obj == None:\n        continue\n\n      name = match_obj.group(3)\n      if name != prev_name:\n        script_idx = script_names.index(name)\n        prev_name = name\n\n      low = int(match_obj.group(1), 16)\n      high = low\n      char_data[low] = name\n\n      if match_obj.group(2) != None:\n        high = int(match_obj.group(2), 16)\n        for idx in range(low + 1, high + 1):\n           char_data[idx] = name\n\n      if script_data[script_idx] == None:\n        script_data[script_idx] = [low, None, None, None, None]\n      script_data[script_idx][1] = high\n\n  extended_script_indicies = {}\n\n  with open(\"Unicode.tables/ScriptExtensions.txt\") as f:\n    for line in f:\n      match_obj = property_re.match(line)\n\n      if match_obj == None:\n        continue\n\n      low = int(match_obj.group(1), 16)\n      high = low\n      if match_obj.group(2) != None:\n        high = int(match_obj.group(2), 16)\n\n      for abbrev in match_obj.group(3).split(\" \"):\n        if abbrev not in extended_script_indicies:\n          idx = script_abbrevs.index(abbrev)\n          extended_script_indicies[abbrev] = idx\n          rec = script_data[idx]\n          rec[2] = low\n          rec[3] = high\n        else:\n          idx = extended_script_indicies[abbrev]\n          rec = script_data[idx]\n          if rec[2] > low:\n            rec[2] = low\n          if rec[3] < high:\n            rec[3] = high\n\n        if rec[4] == None:\n          name = script_names[idx]\n          for idx in range(low, high + 1):\n            if char_data[idx] != name:\n              rec[4] = idx\n              break\n\n  long_property_name = False\n\n  for idx, rec in enumerate(script_data):\n    script_name = script_names[idx]\n\n    if script_name == \"Unknown\":\n      continue\n\n    script_abbrev = script_abbrevs[idx]\n\n    write_both(\"# Base script check\\n\")\n    write_both(\"/^\\\\p{sc=%s}/utf\\n\" % script_name)\n    write_both(\"    %s\\n\" % to_string_char(rec[0]))\n    output_file.write(\" 0: %s\\n\" % to_string_char(rec[0]))\n    write_both(\"\\n\")\n\n    write_both(\"/^\\\\p{Script=%s}/utf\\n\" % script_abbrev)\n    write_both(\"    %s\\n\" % to_string_char(rec[1]))\n    output_file.write(\" 0: %s\\n\" % to_string_char(rec[1]))\n    write_both(\"\\n\")\n\n    if rec[2] != None:\n      property_name = \"scx\"\n      if long_property_name:\n        property_name = \"Script_Extensions\"\n\n      write_both(\"# Script extension check\\n\")\n      write_both(\"/^\\\\p{%s}/utf\\n\" % script_name)\n      write_both(\"    %s\\n\" % to_string_char(rec[2]))\n      output_file.write(\" 0: %s\\n\" % to_string_char(rec[2]))\n      write_both(\"\\n\")\n\n      write_both(\"/^\\\\p{%s=%s}/utf\\n\" % (property_name, script_abbrev))\n      write_both(\"    %s\\n\" % to_string_char(rec[3]))\n      output_file.write(\" 0: %s\\n\" % to_string_char(rec[3]))\n      write_both(\"\\n\")\n\n      long_property_name = not long_property_name\n\n      if rec[4] != None:\n        write_both(\"# Script extension only character\\n\")\n        write_both(\"/^\\\\p{%s}/utf\\n\" % script_name)\n        write_both(\"    %s\\n\" % to_string_char(rec[4]))\n        output_file.write(\" 0: %s\\n\" % to_string_char(rec[4]))\n        write_both(\"\\n\")\n\n        write_both(\"/^\\\\p{sc=%s}/utf\\n\" % script_name)\n        write_both(\"    %s\\n\" % to_string_char(rec[4]))\n        output_file.write(\"No match\\n\")\n        write_both(\"\\n\")\n      else:\n        print(\"External character has not found for %s\" % script_name)\n\n    high = rec[1]\n    if rec[3] != None and rec[3] > rec[1]:\n      high = rec[3]\n    write_both(\"# Character not in script\\n\")\n    write_both(\"/^\\\\p{%s}/utf\\n\" % script_name)\n    write_both(\"    %s\\n\" % to_string_char(high + 1))\n    output_file.write(\"No match\\n\")\n    write_both(\"\\n\")\n\ngen_script_tests()\n\nwrite_both(\"# End of test\\n\")\n"
  },
  {
    "path": "maint/GenerateUcd.py",
    "content": "#! /usr/bin/env python3\n\n#                   PCRE2 UNICODE PROPERTY SUPPORT\n#                   ------------------------------\n#\n# This script generates the pcre2_ucd.c file from Unicode data files. This is\n# the compressed Unicode property data used by PCRE2. The script was created in\n# December 2021 as part of the Unicode data generation refactoring. It is\n# basically a re-working of the MultiStage2.py script that was submitted to the\n# PCRE project by Peter Kankowski in 2008 as part of a previous upgrading of\n# Unicode property support. A number of extensions have since been added. The\n# main difference in the 2021 upgrade (apart from comments and layout) is that\n# the data tables (e.g. list of script names) are now listed in or generated by\n# a separate Python module that is shared with the other Generate scripts.\n#\n# This script must be run in the \"maint\" directory. It requires the following\n# Unicode data tables: BidiMirrorring.txt, CaseFolding.txt,\n# DerivedBidiClass.txt, DerivedCoreProperties.txt, DerivedGeneralCategory.txt,\n# GraphemeBreakProperty.txt, PropList.txt, PropertyAliases.txt,\n# PropertyValueAliases.txt, ScriptExtensions.txt, Scripts.txt, and\n# emoji-data.txt. These must be in the Unicode.tables subdirectory.\n#\n# The emoji-data.txt file is found in the \"emoji\" subdirectory even though it\n# is technically part of a different (but coordinated) standard as shown\n# in files associated with Unicode Technical Standard #51 (\"Unicode Emoji\"),\n# for example:\n#\n# http://unicode.org/Public/emoji/13.0/ReadMe.txt\n#\n# DerivedBidiClass.txt and DerivedGeneralCategory.txt are in the \"extracted\"\n# subdirectory of the Unicode database (UCD) on the Unicode web site;\n# GraphemeBreakProperty.txt is in the \"auxiliary\" subdirectory. The other files\n# are in the top-level UCD directory.\n#\n# -----------------------------------------------------------------------------\n# Minor modifications made to the original script:\n#  Added #! line at start\n#  Removed tabs\n#  Made it work with Python 2.4 by rewriting two statements that needed 2.5\n#  Consequent code tidy\n#  Adjusted data file names to take from the Unicode.tables directory\n#  Adjusted global table names by prefixing _pcre_.\n#  Commented out stuff relating to the casefolding table, which isn't used;\n#    removed completely in 2012.\n#  Corrected size calculation\n#  Add #ifndef SUPPORT_UCP to use dummy tables when no UCP support is needed.\n#  Update for PCRE2: name changes, and SUPPORT_UCP is abolished.\n#\n# Major modifications made to the original script:\n#  Added code to add a grapheme break property field to records.\n#\n#  Added code to search for sets of more than two characters that must match\n#  each other caselessly. A new table is output containing these sets, and\n#  offsets into the table are added to the main output records. This new\n#  code scans CaseFolding.txt instead of UnicodeData.txt, which is no longer\n#  used.\n#\n#  Update for Python3:\n#    . Processed with 2to3, but that didn't fix everything\n#    . Changed string.strip to str.strip\n#    . Added encoding='utf-8' to the open() call\n#    . Inserted 'int' before blocksize/ELEMS_PER_LINE because an int is\n#        required and the result of the division is a float\n#\n#  Added code to scan the emoji-data.txt file to find the Extended Pictographic\n#  property, which is used by PCRE2 as a grapheme breaking property. This was\n#  done when updating to Unicode 11.0.0 (July 2018).\n#\n#  Added code to add a Script Extensions field to records. This has increased\n#  their size from 8 to 12 bytes, only 10 of which are currently used.\n#\n#  Added code to add a bidi class field to records by scanning the\n#  DerivedBidiClass.txt and PropList.txt files. This uses one of the two spare\n#  bytes, so now 11 out of 12 are in use.\n#\n# 01-March-2010:     Updated list of scripts for Unicode 5.2.0\n# 30-April-2011:     Updated list of scripts for Unicode 6.0.0\n#     July-2012:     Updated list of scripts for Unicode 6.1.0\n# 20-August-2012:    Added scan of GraphemeBreakProperty.txt and added a new\n#                      field in the record to hold the value. Luckily, the\n#                      structure had a hole in it, so the resulting table is\n#                      not much bigger than before.\n# 18-September-2012: Added code for multiple caseless sets. This uses the\n#                      final hole in the structure.\n# 30-September-2012: Added RegionalIndicator break property from Unicode 6.2.0\n# 13-May-2014:       Updated for PCRE2\n# 03-June-2014:      Updated for Python 3\n# 20-June-2014:      Updated for Unicode 7.0.0\n# 12-August-2014:    Updated to put Unicode version into the file\n# 19-June-2015:      Updated for Unicode 8.0.0\n# 02-July-2017:      Updated for Unicode 10.0.0\n# 03-July-2018:      Updated for Unicode 11.0.0\n# 07-July-2018:      Added code to scan emoji-data.txt for the Extended\n#                      Pictographic property.\n# 01-October-2018:   Added the 'Unknown' script name\n# 03-October-2018:   Added new field for Script Extensions\n# 27-July-2019:      Updated for Unicode 12.1.0\n# 10-March-2020:     Updated for Unicode 13.0.0\n# PCRE2-10.39:       Updated for Unicode 14.0.0\n# 05-December-2021:  Added code to scan DerivedBidiClass.txt for bidi class,\n#                      and also PropList.txt for the Bidi_Control property\n# 19-December-2021:  Reworked script extensions lists to be bit maps instead\n#                      of zero-terminated lists of script numbers.\n# ----------------------------------------------------------------------------\n#\n# Changes to the refactored script:\n#\n# 26-December-2021:  Refactoring completed\n# 10-January-2022:   Addition of general Boolean property support\n# 12-January-2022:   Merge scriptx and bidiclass fields\n# 14-January-2022:   Enlarge Boolean property offset to 12 bits\n# 28-January-2023:   Remove ASCII \"other case\" from non-ASCII character that\n#                      are present in caseless sets.\n#\n# ----------------------------------------------------------------------------\n#\n#\n# The main tables generated by this script are used by macros defined in\n# pcre2_internal.h. They look up Unicode character properties using short\n# sequences of code that contains no branches, which makes for greater speed.\n#\n# Conceptually, there is a table of records (of type ucd_record), one for each\n# Unicode character. Each record contains the script number, script extension\n# value, character type, grapheme break type, offset to caseless matching set,\n# offset to the character's other case, the bidi class, and offset to bitmap of\n# Boolean properties.\n#\n# A real table covering all Unicode characters would be far too big. It can be\n# efficiently compressed by observing that many characters have the same\n# record, and many blocks of characters (taking 128 characters in a block) have\n# the same set of records as other blocks. This leads to a 2-stage lookup\n# process.\n#\n# This script constructs seven tables. The ucd_caseless_sets table contains\n# lists of characters that all match each other caselessly. Each list is\n# in order, and is terminated by NOTACHAR (0xffffffff), which is larger than\n# any valid character. The first list is empty; this is used for characters\n# that are not part of any list.\n#\n# The ucd_digit_sets table contains the code points of the '9' characters in\n# each set of 10 decimal digits in Unicode. This is used to ensure that digits\n# in script runs all come from the same set. The first element in the vector\n# contains the number of subsequent elements, which are in ascending order.\n#\n# Scripts are partitioned into two groups. Scripts that appear in at least one\n# character's script extension list come first, followed by \"Unknown\" and then\n# all the rest. This sorting is done automatically in the GenerateCommon.py\n# script. A script's number is its index in the script_names list.\n#\n# The ucd_script_sets table contains bitmaps that represent lists of scripts\n# for Script Extensions properties. Each bitmap consists of a fixed number of\n# unsigned 32-bit numbers, enough to allocate a bit for every script that is\n# used in any character's extension list, that is, enough for every script\n# whose number is less than ucp_Unknown. A character's script extension value\n# in its ucd record is an offset into the ucd_script_sets vector. The first\n# bitmap has no bits set; characters that have no script extensions have zero\n# as their script extensions value so that they use this map.\n#\n# The ucd_boolprop_sets table contains bitmaps that represent lists of Boolean\n# properties. Each bitmap consists of a fixed number of unsigned 32-bit\n# numbers, enough to allocate a bit for each supported Boolean property.\n#\n# The ucd_records table contains one instance of every unique character record\n# that is required. The ucd_stage1 table is indexed by a character's block\n# number, which is the character's code point divided by 128, since 128 is the\n# size of each block. The result of a lookup in ucd_stage1 a \"virtual\" block\n# number.\n#\n# The ucd_stage2 table is a table of \"virtual\" blocks; each block is indexed by\n# the offset of a character within its own block, and the result is the index\n# number of the required record in the ucd_records vector.\n#\n# The following examples are correct for the Unicode 14.0.0 database. Future\n# updates may make change the actual lookup values.\n#\n# Example: lowercase \"a\" (U+0061) is in block 0\n#          lookup 0 in stage1 table yields 0\n#          lookup 97 (0x61) in the first table in stage2 yields 35\n#          record 35 is { 0, 5, 12, 0, -32, 18432, 44 }\n#             0 = ucp_Latin   => Latin script\n#             5 = ucp_Ll      => Lower case letter\n#            12 = ucp_gbOther => Grapheme break property \"Other\"\n#             0               => Not part of a caseless set\n#           -32 (-0x20)       => Other case is U+0041\n#         18432 = 0x4800      => Combined Bidi class + script extension values\n#            44               => Offset to Boolean properties\n#\n# The top 5 bits of the sixth field are the Bidi class, with the rest being the\n# script extension value, giving:\n#\n#             9 = ucp_bidiL   => Bidi class left-to-right\n#             0               => No special script extension property\n#\n# Almost all lowercase latin characters resolve to the same record. One or two\n# are different because they are part of a multi-character caseless set (for\n# example, k, K and the Kelvin symbol are such a set).\n#\n# Example: hiragana letter A (U+3042) is in block 96 (0x60)\n#          lookup 96 in stage1 table yields 93\n#          lookup 66 (0x42) in table 93 in stage2 yields 819\n#          record 819 is { 20, 7, 12, 0, 0, 18432, 82 }\n#            20 = ucp_Hiragana => Hiragana script\n#             7 = ucp_Lo       => Other letter\n#            12 = ucp_gbOther  => Grapheme break property \"Other\"\n#             0                => Not part of a caseless set\n#             0                => No other case\n#         18432 = 0x4800       => Combined Bidi class + script extension values\n#            82                => Offset to Boolean properties\n#\n# The top 5 bits of the sixth field are the Bidi class, with the rest being the\n# script extension value, giving:\n#\n#             9 = ucp_bidiL   => Bidi class left-to-right\n#             0               => No special script extension property\n#\n# Example: vedic tone karshana (U+1CD0) is in block 57 (0x39)\n#          lookup 57 in stage1 table yields 55\n#          lookup 80 (0x50) in table 55 in stage2 yields 621\n#          record 621 is { 84, 12, 3, 0, 0, 26762, 96 }\n#            84 = ucp_Inherited => Script inherited from predecessor\n#            12 = ucp_Mn        => Non-spacing mark\n#             3 = ucp_gbExtend  => Grapheme break property \"Extend\"\n#             0                 => Not part of a caseless set\n#             0                 => No other case\n#         26762 = 0x688A        => Combined Bidi class + script extension values\n#            96                 => Offset to Boolean properties\n#\n# The top 5 bits of the sixth field are the Bidi class, with the rest being the\n# script extension value, giving:\n#\n#            13 = ucp_bidiNSM   => Bidi class non-spacing mark\n#           138                 => Script Extension list offset = 138\n#\n# At offset 138 in the ucd_script_sets vector we find a bitmap with bits 1, 8,\n# 18, and 47 set. This means that this character is expected to be used with\n# any of those scripts, which are Bengali, Devanagari, Kannada, and Grantha.\n#\n#  Philip Hazel, last updated 14 January 2022.\n##############################################################################\n\n\n# Import standard modules\n\nimport re\nimport string\nimport sys\n\n# Import common data lists and functions\n\nfrom GenerateCommon import \\\n  bidi_classes, \\\n  bool_properties, \\\n  bool_propsfiles, \\\n  bool_props_list_item_size, \\\n  break_properties, \\\n  category_names, \\\n  general_category_names, \\\n  script_abbrevs, \\\n  script_list_item_size, \\\n  script_names, \\\n  open_output\n\n# Some general parameters\n\nMAX_LIST = 8             # keep on sync with the value in pcre2_auto_possess.c\nMAX_UNICODE = 0x110000\nNOTACHAR = 0xffffffff\n\n\n# ---------------------------------------------------------------------------\n#                         DEFINE FUNCTIONS\n# ---------------------------------------------------------------------------\n\n\n# Parse a line of Scripts.txt, GraphemeBreakProperty.txt or DerivedGeneralCategory.txt\n\ndef make_get_names(enum):\n  return lambda chardata: enum.index(chardata[1])\n\n\n# Parse a line of DerivedBidiClass.txt\n\ndef get_bidi(chardata):\n  if len(chardata[1]) > 3:\n    return bidi_classes_long.index(chardata[1])\n  else:\n    return bidi_classes_short.index(chardata[1])\n\n\n# Parse a line of CaseFolding.txt\n\ndef get_other_case(chardata):\n  if chardata[1] == 'C' or chardata[1] == 'S':\n    return int(chardata[2], 16) - int(chardata[0], 16)\n  return None\n\n\n# Parse a line of ScriptExtensions.txt\n\ndef get_script_extension(chardata):\n  script_extension = tuple(script_abbrevs.index(abbrev) for abbrev in chardata[1].split(' '))\n\n  try:\n    index = script_lists.index(script_extension)\n  except ValueError:\n    index = len(script_lists)\n    script_lists.append(script_extension)\n\n  return index * script_list_item_size\n\n\n# Read a whole table in memory, setting/checking the Unicode version\n\ndef read_table(file_name, get_value, default_value):\n  global unicode_version\n\n  f = re.match(r'^[^/]+/([^.]+)\\.txt$', file_name)\n  file_base = f.group(1)\n  version_pat = r\"^# \" + re.escape(file_base) + r\"-(\\d+\\.\\d+\\.\\d+)\\.txt$\"\n  file = open(file_name, 'r', encoding='utf-8')\n  f = re.match(version_pat, file.readline())\n  version = f.group(1)\n  if unicode_version == \"\":\n    unicode_version = version\n  elif unicode_version != version:\n    print(\"WARNING: Unicode version differs in %s\", file_name, file=sys.stderr)\n\n  table = [default_value] * MAX_UNICODE\n  for line in file:\n    if file_base == 'DerivedBidiClass':\n      line = re.sub(r'# @missing: ', '', line)\n\n    line = re.sub(r'#.*', '', line)\n    chardata = list(map(str.strip, line.split(';')))\n    if len(chardata) <= 1:\n      continue\n    value = get_value(chardata)\n    if value is None:\n      continue\n    m = re.match(r'([0-9a-fA-F]+)(\\.\\.([0-9a-fA-F]+))?$', chardata[0])\n    char = int(m.group(1), 16)\n    if m.group(3) is None:\n      last = char\n    else:\n      last = int(m.group(3), 16)\n    for i in range(char, last + 1):\n      if file_base == 'CaseFolding' and table[i] != default_value:\n        print(\"WARNING: multiple rules for other_case[0x{:X}]\".format(i))\n      table[i] = value\n\n  file.close()\n  return table\n\n\n# Get the smallest possible C language type for the values in a table\n\ndef get_type_size(table):\n  type_size = [(\"uint8_t\", 1), (\"uint16_t\", 2), (\"uint32_t\", 4),\n    (\"signed char\", 1), (\"int16_t\", 2), (\"int32_t\", 4)]\n  limits = [(0, 255), (0, 65535), (0, 4294967295), (-128, 127),\n    (-32768, 32767), (-2147483648, 2147483647)]\n  minval = min(table)\n  maxval = max(table)\n  for num, (minlimit, maxlimit) in enumerate(limits):\n    if minlimit <= minval and maxval <= maxlimit:\n      return type_size[num]\n  raise OverflowError(\"Too large to fit into C types\")\n\n\n# Get the total size of a list of tables\n\ndef get_tables_size(*tables):\n  total_size = 0\n  for table in tables:\n    type, size = get_type_size(table)\n    total_size += size * len(table)\n  return total_size\n\n\n# Compress a table into the two stages\n\ndef compress_table(table, block_size):\n  blocks = {} # Dictionary for finding identical blocks\n  stage1 = [] # Stage 1 table contains block numbers (indices into stage 2 table)\n  stage2 = [] # Stage 2 table contains the blocks with property values\n  table = tuple(table)\n  for i in range(0, len(table), block_size):\n    block = table[i:i+block_size]\n    start = blocks.get(block)\n    if start is None:\n      # Allocate a new block\n      start = len(stage2) / block_size\n      stage2 += block\n      blocks[block] = start\n    stage1.append(start)\n  return stage1, stage2\n\n\n# Output a table\n\ndef write_table(table, table_name, block_size = None):\n  type, size = get_type_size(table)\n  ELEMS_PER_LINE = 16\n\n  s = \"const %s %s[] = { /* %d bytes\" % (type, table_name, size * len(table))\n  if block_size:\n    s += \", block = %d\" % block_size\n  f.write(s + \" */\\n\")\n  table = tuple(table)\n  if block_size is None:\n    fmt = \"%3d,\" * ELEMS_PER_LINE + \" /* U+%04X */\\n\"\n    mult = MAX_UNICODE / len(table)\n    for i in range(0, len(table), ELEMS_PER_LINE):\n      f.write(fmt % (table[i:i+ELEMS_PER_LINE] + (int(i * mult),)))\n  else:\n    if block_size > ELEMS_PER_LINE:\n      el = ELEMS_PER_LINE\n    else:\n      el = block_size\n    fmt = \"%3d,\" * el + \"\\n\"\n    if block_size > ELEMS_PER_LINE:\n      fmt = fmt * int(block_size / ELEMS_PER_LINE)\n    for i in range(0, len(table), block_size):\n      f.write((\"\\n/* block %d */\\n\" + fmt) % ((i / block_size,) + table[i:i+block_size]))\n  f.write(\"};\\n\\n\")\n\n\n# Extract the unique combinations of properties into records\n\ndef combine_tables(*tables):\n  records = {}\n  index = []\n  for t in zip(*tables):\n    i = records.get(t)\n    if i is None:\n      i = records[t] = len(records)\n    index.append(i)\n  return index, records\n\n\n# Create a record struct\n\ndef get_record_size_struct(records):\n  size = 0\n  structure = 'typedef struct {\\n'\n  for i in range(len(records[0])):\n    record_slice = [record[i] for record in records]\n    slice_type, slice_size = get_type_size(record_slice)\n    # add padding: round up to the nearest power of slice_size\n    size = (size + slice_size - 1) & -slice_size\n    size += slice_size\n    structure += '%s property_%d;\\n' % (slice_type, i)\n\n  # round up to the first item of the next structure in array\n  record_slice = [record[0] for record in records]\n  slice_type, slice_size = get_type_size(record_slice)\n  size = (size + slice_size - 1) & -slice_size\n\n  structure += '} ucd_record;\\n*/\\n'\n  return size, structure\n\n\n# Write records\n\ndef write_records(records, record_size):\n  f.write('const ucd_record PRIV(ucd_records)[] = { ' + \\\n    '/* %d bytes, record size %d */\\n' % (len(records) * record_size, record_size))\n  records = list(zip(list(records.keys()), list(records.values())))\n  records.sort(key = lambda x: x[1])\n  for i, record in enumerate(records):\n    f.write(('  {' + '%6d, ' * len(record[0]) + '}, /* %3d */\\n') % (record[0] + (i,)))\n  f.write('};\\n\\n')\n\n\n# Write a bit set\n\ndef write_bitsets(list, item_size):\n  for d in list:\n    bitwords = [0] * item_size\n    for idx in d:\n      bitwords[idx // 32] |= 1 << (idx & 31)\n    s = \" \"\n    for x in bitwords:\n      f.write(\"%s\" % s)\n      s = \", \"\n      f.write(\"0x%08xu\" % x)\n    f.write(\",\\n\")\n  f.write(\"};\\n\\n\")\n\n\n# ---------------------------------------------------------------------------\n# This bit of code must have been useful when the original script was being\n# developed. Retain it just in case it is ever needed again.\n\n# def test_record_size():\n#   tests = [ \\\n#     ( [(3,), (6,), (6,), (1,)], 1 ), \\\n#     ( [(300,), (600,), (600,), (100,)], 2 ), \\\n#     ( [(25, 3), (6, 6), (34, 6), (68, 1)], 2 ), \\\n#     ( [(300, 3), (6, 6), (340, 6), (690, 1)], 4 ), \\\n#     ( [(3, 300), (6, 6), (6, 340), (1, 690)], 4 ), \\\n#     ( [(300, 300), (6, 6), (6, 340), (1, 690)], 4 ), \\\n#     ( [(3, 100000), (6, 6), (6, 123456), (1, 690)], 8 ), \\\n#     ( [(100000, 300), (6, 6), (123456, 6), (1, 690)], 8 ), \\\n#   ]\n#   for test in tests:\n#     size, struct = get_record_size_struct(test[0])\n#     assert(size == test[1])\n# test_record_size()\n# ---------------------------------------------------------------------------\n\n\n\n# ---------------------------------------------------------------------------\n#                       MAIN CODE FOR CREATING TABLES\n# ---------------------------------------------------------------------------\n\nunicode_version = \"\"\n\n# Some of the tables imported from GenerateCommon.py have alternate comment\n# strings for use by GenerateUcpHeader. The comments are not wanted here, so\n# remove them.\n\nbidi_classes_short = bidi_classes[::2]\nbidi_classes_long = bidi_classes[1::2]\nbreak_properties = break_properties[::2]\ncategory_names = category_names[::2]\n\n# Create the various tables from Unicode data files\n\nscript = read_table('Unicode.tables/Scripts.txt', make_get_names(script_names), script_names.index('Unknown'))\ncategory = read_table('Unicode.tables/DerivedGeneralCategory.txt', make_get_names(category_names), category_names.index('Cn'))\nbreak_props = read_table('Unicode.tables/GraphemeBreakProperty.txt', make_get_names(break_properties), break_properties.index('Other'))\nother_case = read_table('Unicode.tables/CaseFolding.txt', get_other_case, 0)\nbidi_class = read_table('Unicode.tables/DerivedBidiClass.txt', get_bidi, bidi_classes_short.index('L'))\n\n# The grapheme breaking rules were changed for Unicode 11.0.0 (June 2018). Now\n# we need to find the Extended_Pictographic property for emoji characters. This\n# can be set as an additional grapheme break property, because the default for\n# all the emojis is \"other\". We scan the emoji-data.txt file and modify the\n# break-props table.\n\nfile = open('Unicode.tables/emoji-data.txt', 'r', encoding='utf-8')\nfor line in file:\n  line = re.sub(r'#.*', '', line)\n  chardata = list(map(str.strip, line.split(';')))\n  if len(chardata) <= 1:\n    continue\n  if chardata[1] != \"Extended_Pictographic\":\n    continue\n  m = re.match(r'([0-9a-fA-F]+)(\\.\\.([0-9a-fA-F]+))?$', chardata[0])\n  char = int(m.group(1), 16)\n  if m.group(3) is None:\n    last = char\n  else:\n    last = int(m.group(3), 16)\n  for i in range(char, last + 1):\n    if break_props[i] != break_properties.index('Other'):\n      print(\"WARNING: Emoji 0x%x has break property %s, not 'Other'\",\n        i, break_properties[break_props[i]], file=sys.stderr)\n    break_props[i] = break_properties.index('Extended_Pictographic')\nfile.close()\n\n# Handle script extensions. The get_script_extesion() function maintains a\n# list of unique bitmaps representing lists of scripts, returning the offset\n# in that list. Initialize the list with an empty set, which is used for\n# characters that have no script extensions.\n\nscript_lists = [[]]\nscriptx_bidi_class = read_table('Unicode.tables/ScriptExtensions.txt', get_script_extension, 0)\n\nfor idx in range(len(scriptx_bidi_class)):\n  scriptx_bidi_class[idx] = scriptx_bidi_class[idx] | (bidi_class[idx] << 11)\nbidi_class = None\n\n# Find the Boolean properties of each character. This next bit of magic creates\n# a list of empty lists. Using [[]] * MAX_UNICODE gives a list of references to\n# the *same* list, which is not what we want.\n\nbprops = [[] for _ in range(MAX_UNICODE)]\n\n# Collect the properties from the various files\n\nfor filename in bool_propsfiles:\n  try:\n    file = open('Unicode.tables/' + filename, 'r')\n  except IOError:\n    print(f\"** Couldn't open {'Unicode.tables/' + filename}\\n\")\n    sys.exit(1)\n\n  for line in file:\n    line = re.sub(r'#.*', '', line)\n    data = list(map(str.strip, line.split(';')))\n    if len(data) <= 1:\n      continue\n\n    try:\n      ix = bool_properties.index(data[1])\n    except ValueError:\n      continue\n\n    m = re.match(r'([0-9a-fA-F]+)(\\.\\.([0-9a-fA-F]+))?$', data[0])\n    char = int(m.group(1), 16)\n    if m.group(3) is None:\n      last = char\n    else:\n      last = int(m.group(3), 16)\n\n    for i in range(char, last + 1):\n      bprops[i].append(ix)\n\n  file.close()\n\n# The ASCII property isn't listed in any files, but it is easy enough to add\n# it manually.\n\nix = bool_properties.index(\"ASCII\")\nfor i in range(128):\n  bprops[i].append(ix)\n\n# The Bidi_Mirrored property isn't listed in any property files. We have to\n# deduce it from the file that lists the mirrored characters.\n\nix = bool_properties.index(\"Bidi_Mirrored\")\n\ntry:\n  file = open('Unicode.tables/BidiMirroring.txt', 'r')\nexcept IOError:\n  print(f\"** Couldn't open {'Unicode.tables/BidiMirroring.txt'}\\n\")\n  sys.exit(1)\n\nfor line in file:\n  line = re.sub(r'#.*', '', line)\n  data = list(map(str.strip, line.split(';')))\n  if len(data) <= 1:\n    continue\n  c = int(data[0], 16)\n  bprops[c].append(ix)\n\nfile.close()\n\n# Scan each character's boolean property list and created a list of unique\n# lists, at the same time, setting the index in that list for each property in\n# the bool_props vector.\n\nbool_props = [0] * MAX_UNICODE\nbool_props_lists = [[]]\n\nfor c in range(MAX_UNICODE):\n  s = set(bprops[c])\n  for i in range(len(bool_props_lists)):\n    if s == set(bool_props_lists[i]):\n      break\n  else:\n    bool_props_lists.append(bprops[c])\n    i += 1\n\n  bool_props[c] = i * bool_props_list_item_size\n\n# This block of code was added by PH in September 2012. It scans the other_case\n# table to find sets of more than two characters that must all match each other\n# caselessly. Later in this script a table of these sets is written out.\n# However, we have to do this work here in order to compute the offsets in the\n# table that are inserted into the main table.\n\n# The CaseFolding.txt file lists pairs, but the common logic for reading data\n# sets only one value, so first we go through the table and set \"return\"\n# offsets for those that are not already set.\n\nfor c in range(MAX_UNICODE):\n  if other_case[c] != 0 and other_case[c + other_case[c]] == 0:\n    other_case[c + other_case[c]] = -other_case[c]\n\n# Now scan again and create equivalence sets.\n\ncaseless_sets = []\n\nfor c in range(MAX_UNICODE):\n  o = c + other_case[c]\n\n  # Trigger when this character's other case does not point back here. We\n  # now have three characters that are case-equivalent.\n\n  if other_case[o] != -other_case[c]:\n    t = o + other_case[o]\n\n    # Scan the existing sets to see if any of the three characters are already\n    # part of a set. If so, unite the existing set with the new set.\n\n    appended = 0\n    for s in caseless_sets:\n      found = 0\n      for x in s:\n        if x == c or x == o or x == t:\n          found = 1\n\n      # Add new characters to an existing set\n\n      if found:\n        found = 0\n        for y in [c, o, t]:\n          for x in s:\n            if x == y:\n              found = 1\n          if not found:\n            s.append(y)\n        appended = 1\n\n    # If we have not added to an existing set, create a new one.\n\n    if not appended:\n      caseless_sets.append([c, o, t])\n\n# End of loop looking for caseless sets.\n\n# Now scan the sets and set appropriate offsets for the characters.\n\ncaseless_offsets = [0] * MAX_UNICODE\n\noffset = 1\nfor s in caseless_sets:\n  for x in s:\n    caseless_offsets[x] = offset\n  offset += len(s) + 1\n\n# End of block of code for creating offsets for caseless matching sets.\n\n# Scan the caseless sets, and for any non-ASCII character that has an ASCII\n# character as its \"base\" other case, remove the other case. This makes it\n# easier to handle those characters when the PCRE2 option for not mixing ASCII\n# and non-ASCII is enabled. In principle one should perhaps scan for a \n# non-ASCII alternative, but in practice these don't exist.\n\nfor s in caseless_sets:\n  for x in s:\n    if x > 127 and x + other_case[x] < 128:\n      other_case[x] = 0  \n\n# Append a couple of extra caseless sets (unreferenced by the record objects)\n# to hold the optional Turkish case equivalences.\nturkish_dotted_i_index = offset\ncaseless_sets.append([0x69, 0x0130])\ncaseless_sets.append([0x49, 0x0131])\n\n# Combine all the tables\n\ntable, records = combine_tables(script, category, break_props,\n  caseless_offsets, other_case, scriptx_bidi_class, bool_props)\n\n# Find the record size and create a string definition of the structure for\n# outputting as a comment.\n\nrecord_size, record_struct = get_record_size_struct(list(records.keys()))\n\n# Find the optimum block size for the two-stage table\n\nmin_size = sys.maxsize\nfor block_size in [2 ** i for i in range(5,10)]:\n  size = len(records) * record_size\n  stage1, stage2 = compress_table(table, block_size)\n  size += get_tables_size(stage1, stage2)\n  #print(\"/* block size {:3d} => {:5d} bytes */\".format(block_size, size))\n  if size < min_size:\n    min_size = size\n    min_stage1, min_stage2 = stage1, stage2\n    min_block_size = block_size\n\n\n# ---------------------------------------------------------------------------\n#                   MAIN CODE FOR WRITING THE OUTPUT FILE\n# ---------------------------------------------------------------------------\n\n# Open the output file (no return on failure). This call also writes standard\n# header boilerplate.\n\nf = open_output(\"pcre2_ucd.c\")\n\n# Output this file's heading text\n\nf.write(\"\"\"\\\n/* This file contains tables of Unicode properties that are extracted from\nUnicode data files. See the comments at the start of maint/GenerateUcd.py for\ndetails.\n\nAs well as being part of the PCRE2 library, this file is #included by the\npcre2test program, which redefines the PRIV macro to change table names from\n_pcre2_xxx to xxxx, thereby avoiding name clashes with the library. At present,\njust one of these tables is actually needed. When compiling the library, some\nheaders are needed. */\n\n\n#ifndef PCRE2_PCRE2TEST\n#include \"pcre2_internal.h\"\n#endif /* PCRE2_PCRE2TEST */\n\n\n\n/* The tables herein are needed only when UCP support is built, and in PCRE2\nthat happens automatically with UTF support. This module should not be\nreferenced otherwise, so it should not matter whether it is compiled or not.\nHowever a comment was received about space saving - maybe the guy linked all\nthe modules rather than using a library - so we include a condition to cut out\nthe tables when not needed. But don't leave a totally empty module because some\ncompilers barf at that. Instead, just supply some small dummy tables. */\n\n#ifndef SUPPORT_UNICODE\nconst ucd_record PRIV(ucd_records)[] = {{0,0,0,0,0,0,0}};\nconst uint16_t PRIV(ucd_stage1)[] = {0};\nconst uint16_t PRIV(ucd_stage2)[] = {0};\nconst uint32_t PRIV(ucd_caseless_sets)[] = {0};\nconst uint32_t PRIV(ucd_nocase_ranges)[] = {0};\nconst uint32_t PRIV(ucd_nocase_ranges_size) = 0;\n#else\n\\n\"\"\")\n\n# --- Output some variable heading stuff ---\n\nf.write(\"/* Total size: %d bytes, block size: %d. */\\n\\n\" % (min_size, min_block_size))\nf.write('const char *PRIV(unicode_version) = \"{}\";\\n\\n'.format(unicode_version))\n\nf.write(\"\"\"\\\n/* When recompiling tables with a new Unicode version, please check the types\nin this structure definition with those in pcre2_internal.h (the actual field\nnames will be different).\n\\n\"\"\")\n\nf.write(record_struct)\n\nf.write(\"\"\"\n/* If the 32-bit library is run in non-32-bit mode, character values greater\nthan 0x10ffff may be encountered. For these we set up a special record. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\nconst ucd_record PRIV(dummy_ucd_record)[] = {{\n  ucp_Unknown,    /* script */\n  ucp_Cn,         /* type unassigned */\n  ucp_gbOther,    /* grapheme break property */\n  0,              /* case set */\n  0,              /* other case */\n  0 | (ucp_bidiL << UCD_BIDICLASS_SHIFT), /* script extension and bidi class */\n  0,              /* bool properties offset */\n  }};\n#endif\n\\n\"\"\")\n\n# --- Output the table of caseless character sets ---\n\nf.write(\"\"\"\\\n/* This table contains lists of characters that are caseless sets of\nmore than one character. Each list is terminated by NOTACHAR. */\n\nconst uint32_t PRIV(ucd_caseless_sets)[] = {\n  NOTACHAR,\n\"\"\")\n\nfor s in caseless_sets:\n  s = sorted(s)\n  for x in s:\n    f.write('  0x%04x,' % x)\n  f.write('  NOTACHAR,\\n')\nf.write('};\\n\\n')\n\n# --- Output the indices of the Turkish caseless character sets ---\n\nf.write(\"\"\"\\\n/* This is the index, within ucd_caseless_sets, of the additional\nTurkish case-equivalences. The dotted I ones are this offset; the\ndotless I are +3 from here. */\n\nconst uint32_t PRIV(ucd_turkish_dotted_i_caseset) = %d;\n\n\"\"\" % (turkish_dotted_i_index))\n\n# --- Other tables are not needed by pcre2test ---\n\nf.write(\"\"\"\\\n/* When #included in pcre2test, we don't need the table of digit sets, nor the\nthe large main UCD tables. */\n\n#ifndef PCRE2_PCRE2TEST\n\\n\"\"\")\n\n# --- Output the nocase sets ---\n\nf.write(\"\"\"\\\n/* This table contains character ranges, where the characters in the range have\nno other case. Both start and end values are excluded from the range. */\n\nconst uint32_t PRIV(ucd_nocase_ranges)[] = {\n\"\"\")\n\nrange_start = 0\nsize = 0\n# The range size is bigger than eight characters.\nexpected_size = 8\ntotal = 0\n\nfor c in range(1, MAX_UNICODE):\n  if other_case[c] != 0 or c in [0x0130, 0x0131]: # add the two chars that gain casing in Turkish\n    if c - range_start > expected_size:\n      range_size = c - range_start - 1\n      f.write('  0x%04x, 0x%04x, /* %d */\\n' % (range_start, c, range_size))\n      total += range_size\n      size += 2\n    range_start = c\n\n# The else case is unlikely\nif other_case[MAX_UNICODE - 1] == 0 and MAX_UNICODE - range_start > expected_size:\n  range_size = MAX_UNICODE - range_start - 1\n  f.write('  0x%04x, 0x%04x, /* %d */\\n' % (range_start, MAX_UNICODE, range_size))\n  total += range_size\n  size += 2\n\nf.write('  0xffffffff, 0xffffffff /* terminator */\\n};\\n\\n');\nf.write('/* Total: %d characters. */\\nconst uint32_t PRIV(ucd_nocase_ranges_size) = %d;\\n\\n' % (total, size))\n\n# --- Read Scripts.txt again for the sets of 10 digits. ---\n\ndigitsets = []\nfile = open('Unicode.tables/Scripts.txt', 'r', encoding='utf-8')\n\nfor line in file:\n  m = re.match(r'([0-9a-fA-F]+)\\.\\.([0-9a-fA-F]+)\\s+;\\s+\\S+\\s+#\\s+Nd\\s+', line)\n  if m is None:\n    continue\n  first = int(m.group(1),16)\n  last  = int(m.group(2),16)\n  if ((last - first + 1) % 10) != 0:\n    f.write(\"ERROR: %04x..%04x does not contain a multiple of 10 characters\" % (first, last),\n      file=sys.stderr)\n  while first < last:\n    digitsets.append(first + 9)\n    first += 10\nfile.close()\ndigitsets.sort()\n\nf.write(\"\"\"\\\n/* This table lists the code points for the '9' characters in each set of\ndecimal digits. It is used to ensure that all the digits in a script run come\nfrom the same set. */\n\nconst uint32_t PRIV(ucd_digit_sets)[] = {\n\"\"\")\n\nf.write(\"  %d,  /* Number of subsequent values */\" % len(digitsets))\ncount = 8\nfor d in digitsets:\n  if count == 8:\n    f.write(\"\\n \")\n    count = 0\n  f.write(\" 0x%05x,\" % d)\n  count += 1\nf.write(\"\\n};\\n\\n\")\n\nf.write(\"\"\"\\\n/* This vector is a list of script bitsets for the Script Extension property.\nThe number of 32-bit words in each bitset is #defined in pcre2_ucp.h as\nucd_script_sets_item_size. */\n\nconst uint32_t PRIV(ucd_script_sets)[] = {\n\"\"\")\nwrite_bitsets(script_lists, script_list_item_size)\n\nf.write(\"\"\"\\\n/* This vector is a list of bitsets for Boolean properties. The number of\n32_bit words in each bitset is #defined as ucd_boolprop_sets_item_size in\npcre2_ucp.h. */\n\nconst uint32_t PRIV(ucd_boolprop_sets)[] = {\n\"\"\")\nwrite_bitsets(bool_props_lists, bool_props_list_item_size)\n\n\n# Output the main UCD tables.\n\nf.write(\"\"\"\\\n/* These are the main two-stage UCD tables. The fields in each record are:\nscript (8 bits), character type (8 bits), grapheme break property (8 bits),\noffset to multichar other cases or zero (8 bits), offset to other case or zero\n(32 bits, signed), bidi class (5 bits) and script extension (11 bits) packed\ninto a 16-bit field, and offset in binary properties table (16 bits). */\n\\n\"\"\")\n\nwrite_records(records, record_size)\nwrite_table(min_stage1, 'PRIV(ucd_stage1)')\nwrite_table(min_stage2, 'PRIV(ucd_stage2)', min_block_size)\n\nf.write(\"#if UCD_BLOCK_SIZE != %d\\n\" % min_block_size)\nf.write(\"\"\"\\\n#error Please correct UCD_BLOCK_SIZE in pcre2_internal.h\n#endif\n#endif  /* SUPPORT_UNICODE */\n\n#endif  /* PCRE2_PCRE2TEST */\n\n/* End of pcre2_ucd.c */\n\"\"\")\n\nf.close()\n\n# End\n"
  },
  {
    "path": "maint/GenerateUcpHeader.py",
    "content": "#! /usr/bin/env python3\n\n#                   PCRE2 UNICODE PROPERTY SUPPORT\n#                   ------------------------------\n\n# This script generates the pcre2_ucp.h file from Unicode data files. This\n# header uses enumerations to give names to Unicode property types and script\n# names.\n\n# This script was created in December 2021 as part of the Unicode data\n# generation refactoring.\n\n\n# Import common data lists and functions\n\nfrom GenerateCommon import \\\n  bidi_classes, \\\n  bool_properties, \\\n  bool_props_list_item_size, \\\n  break_properties, \\\n  category_names, \\\n  general_category_names, \\\n  script_list_item_size, \\\n  script_names, \\\n  open_output\n\n# Open the output file (no return on failure). This call also writes standard\n# header boilerplate.\n\nf = open_output(\"pcre2_ucp.h\")\n\n# Output this file's heading text\n\nf.write(\"\"\"\\\n#ifndef PCRE2_UCP_H_IDEMPOTENT_GUARD\n#define PCRE2_UCP_H_IDEMPOTENT_GUARD\n\n/* This file contains definitions of the Unicode property values that are\nreturned by the UCD access macros and used throughout PCRE2.\n\nIMPORTANT: The specific values of the first two enums (general and particular\ncharacter categories) are assumed by the table called catposstab in the file\npcre2_auto_possess.c. They are unlikely to change, but should be checked after\nan update. */\n\\n\"\"\")\n\nf.write(\"/* These are the general character categories. */\\n\\nenum {\\n\")\nfor i in general_category_names:\n  f.write(\"  ucp_%s,\\n\" % i)\nf.write(\"};\\n\\n\")\n\nf.write(\"/* These are the particular character categories. */\\n\\nenum {\\n\")\nfor i in range(0, len(category_names), 2):\n  f.write(\"  ucp_%s,    /* %s */\\n\" % (category_names[i], category_names[i+1]))\nf.write(\"};\\n\\n\")\n\nf.write(\"/* These are Boolean properties. */\\n\\nenum {\\n\")\nfor i in bool_properties:\n  f.write(\"  ucp_%s,\\n\" % i)\n\nf.write(\"  /* This must be last */\\n\")\nf.write(\"  ucp_Bprop_Count\\n};\\n\\n\")\n\nf.write(\"/* Size of entries in ucd_boolprop_sets[] */\\n\\n\")\nf.write(\"#define ucd_boolprop_sets_item_size %d\\n\\n\" % bool_props_list_item_size)\n\nf.write(\"/* These are the bidi class values. */\\n\\nenum {\\n\")\nfor i in range(0, len(bidi_classes), 2):\n  sp = ' ' * (4 - len(bidi_classes[i]))\n  f.write(\"  ucp_bidi%s,%s /* %s */\\n\" % (bidi_classes[i], sp, bidi_classes[i+1]))\nf.write(\"};\\n\\n\")\n\nf.write(\"/* These are grapheme break properties. The Extended Pictographic \"\n  \"property\\ncomes from the emoji-data.txt file. */\\n\\nenum {\\n\")\nfor i in range(0, len(break_properties), 2):\n  sp = ' ' * (21 - len(break_properties[i]))\n  f.write(\"  ucp_gb%s,%s /* %s */\\n\" % (break_properties[i], sp, break_properties[i+1]))\nf.write(\"};\\n\\n\")\n\nf.write(\"/* These are the script identifications. */\\n\\nenum {\\n  /* Scripts which has characters in other scripts. */\\n\")\nfor i in script_names:\n  if i == \"Unknown\":\n    f.write(\"\\n  /* Scripts which has no characters in other scripts. */\\n\")\n  f.write(\"  ucp_%s,\\n\" % i)\nf.write(\"\\n\")\n\nf.write(\"  /* This must be last */\\n\")\nf.write(\"  ucp_Script_Count\\n};\\n\\n\")\n\nf.write(\"/* Size of entries in ucd_script_sets[] */\\n\\n\")\nf.write(\"#define ucd_script_sets_item_size %d\\n\\n\" % script_list_item_size)\n\nf.write(\"#endif  /* PCRE2_UCP_H_IDEMPOTENT_GUARD */\\n\\n\")\nf.write(\"/* End of pcre2_ucp.h */\\n\")\n\nf.close()\n\n# End\n"
  },
  {
    "path": "maint/GenerateUcpTables.py",
    "content": "#! /usr/bin/env python3\n\n#                   PCRE2 UNICODE PROPERTY SUPPORT\n#                   ------------------------------\n\n# This script generates the pcre2_ucptables_inc.h file, which contains tables for\n# recognizing Unicode property names. It is #included by pcre2_tables.c. In\n# order to reduce the number of relocations when loading the PCRE2 library, the\n# names are held as a single large string, with offsets in the table. This is\n# tedious to maintain by hand. Therefore, a script is used to generate the\n# table.\n\n# This script was created in December 2021 based on the previous GenerateUtt\n# script, whose output had to be manually edited into pcre2_tables.c. Here is\n# the history of the original script:\n\n# -----------------------------------------------------------------------------\n# Modified by PH 17-March-2009 to generate the more verbose form that works\n# for UTF-support in EBCDIC as well as ASCII environments.\n# Modified by PH 01-March-2010 to add new scripts for Unicode 5.2.0.\n# Modified by PH 04-May-2010 to add new \"X..\" special categories.\n# Modified by PH 30-April-2011 to add new scripts for Unicode 6.0.0\n# Modified by ChPe 30-September-2012 to add this note; no other changes were\n# necessary for Unicode 6.2.0 support.\n# Modfied by PH 26-February-2013 to add the Xuc special category.\n# Comment modified by PH 13-May-2014 to update to PCRE2 file names.\n# Script updated to Python 3 by running it through the 2to3 converter.\n# Added script names for Unicode 7.0.0, 20-June-2014.\n# Added script names for Unicode 8.0.0, 19-June-2015.\n# Added script names for Unicode 10.0.0, 02-July-2017.\n# Added script names for Unicode 11.0.0, 03-July-2018.\n# Added 'Unknown' script, 01-October-2018.\n# Added script names for Unicode 12.1.0, 27-July-2019.\n# Added script names for Unicode 13.0.0, 10-March-2020.\n# Added Script names for Unicode 14.0.0, PCRE2-10.39\n# Added support for bidi class and bidi control, 06-December-2021\n#   This also involved lower casing strings and removing underscores, in\n#   accordance with Unicode's \"loose matching\" rules, which Perl observes.\n# Changed default script type from PT_SC to PT_SCX, 18-December-2021\n# -----------------------------------------------------------------------------\n#\n# Note subsequent changes here:\n#\n# 27-December-2021: Added support for 4-letter script abbreviations.\n# 10-January-2022:  Further updates for Boolean property support\n# -----------------------------------------------------------------------------\n\n\n# Import common data lists and functions\n\nfrom GenerateCommon import \\\n  abbreviations, \\\n  bool_properties, \\\n  bidi_classes, \\\n  category_names, \\\n  general_category_names, \\\n  script_names, \\\n  open_output\n\n# Open the output file (no return on failure). This call also writes standard\n# header boilerplate.\n\nf = open_output(\"pcre2_ucptables_inc.h\")\n\n# The list in bidi_classes contains just the Unicode classes such as AN, LRE,\n# etc., along with comments. We need to add \"bidi\" in front of each value, in\n# order to create names that don't clash with other types of property.\n\nbidi_class_names = []\nfor i in range(0, len(bidi_classes), 2):\n  bidi_class_names.append(\"bidi\" + bidi_classes[i])\n\n# Remove the comments from other lists that contain them.\n\ncategory_names = category_names[::2]\n\n# Create standardized versions of the names by lowercasing and removing\n# underscores.\n\ndef stdname(x):\n  return x.lower().replace('_', '')\n\ndef stdnames(x):\n  y = [''] * len(x)\n  for i in range(len(x)):\n    y[i] = stdname(x[i])\n  return y\n\nstd_category_names = stdnames(category_names)\nstd_general_category_names = stdnames(general_category_names)\nstd_bidi_class_names = stdnames(bidi_class_names)\nstd_bool_properties = stdnames(bool_properties)\n\n# Create the table, starting with the Unicode script, category and bidi class\n# names. We keep both the standardized name and the original, because the\n# latter is used for the ucp_xx names. NOTE: for the script abbreviations, we\n# still use the full original names.\n\nutt_table = []\n\nscx_end = script_names.index('Unknown')\n\nfor idx, name in enumerate(script_names):\n  pt_type = 'PT_SCX' if idx < scx_end else 'PT_SC'\n  utt_table.append((stdname(name), name, pt_type))\n  for abbrev in abbreviations[name]:\n    utt_table.append((stdname(abbrev), name, pt_type))\n\n# Add the remaining property lists\n\nutt_table += list(zip(std_category_names, category_names, ['PT_PC'] * len(category_names)))\nutt_table += list(zip(std_general_category_names, general_category_names, ['PT_GC'] * len(general_category_names)))\nutt_table += list(zip(std_bidi_class_names, bidi_class_names, ['PT_BIDICL'] * len(bidi_class_names)))\n\nfor name in bool_properties:\n  utt_table.append((stdname(name), name, 'PT_BOOL'))\n  if name in abbreviations:\n    for abbrev in abbreviations[name]:\n      utt_table.append((stdname(abbrev), name, 'PT_BOOL'))\n\n# Now add specials and synonyms. Note both the standardized and capitalized\n# forms are needed.\n\nutt_table.append(('any', 'Any', 'PT_ANY'))\nutt_table.append(('l&',  'L&',  'PT_LAMP'))\nutt_table.append(('lc',  'LC',  'PT_LAMP'))\nutt_table.append(('xan', 'Xan', 'PT_ALNUM'))\nutt_table.append(('xps', 'Xps', 'PT_PXSPACE'))\nutt_table.append(('xsp', 'Xsp', 'PT_SPACE'))\nutt_table.append(('xuc', 'Xuc', 'PT_UCNC'))\nutt_table.append(('xwd', 'Xwd', 'PT_WORD'))\n\n# Remove duplicates from the table and then sort it.\n\nutt_table = list(set(utt_table)) \nutt_table.sort()\n\n# Output file-specific heading\n\nf.write(\"\"\"\\\n#ifdef SUPPORT_UNICODE\n\n/* The PRIV(utt)[] table below translates Unicode property names into type and\ncode values. It is searched by binary chop, so must be in collating sequence of\nname. Originally, the table contained pointers to the name strings in the first\nfield of each entry. However, that leads to a large number of relocations when\na shared library is dynamically loaded. A significant reduction is made by\nputting all the names into a single, large string and using offsets instead.\nAll letters are lower cased, and underscores are removed, in accordance with\nthe \"loose matching\" rules that Unicode advises and Perl uses. */\n\\n\"\"\")\n\n# We have to use STR_ macros to define the strings so that it all works in\n# UTF-8 mode on EBCDIC platforms.\n\nfor utt in utt_table:\n  f.write('#define STRING_%s0' % (utt[0].replace('&', '_AMPERSAND')))\n  for c in utt[0]:\n    if c == '&':\n      f.write(' STR_AMPERSAND')\n    else:\n      f.write(' STR_%s' % c);\n  f.write(' \"\\\\0\"\\n')\n\n# Output the long string of concatenated names\n\nf.write('\\nconst char PRIV(utt_names)[] =\\n')\nlast = ''\nfor utt in utt_table:\n  if utt == utt_table[-1]:\n    last = ';'\n  f.write('  STRING_%s0%s\\n' % (utt[0].replace('&', '_AMPERSAND'), last))\n\n# Output the property type table\n\nf.write('\\nconst ucp_type_table PRIV(utt)[] = {\\n')\noffset = 0\nlast = ','\nfor utt in utt_table:\n  if utt[2] in ('PT_ANY', 'PT_LAMP', 'PT_ALNUM', 'PT_PXSPACE',\n      'PT_SPACE', 'PT_UCNC', 'PT_WORD'):\n    value = '0'\n  else:\n    value = 'ucp_' + utt[1]\n  if utt == utt_table[-1]:\n    last = ''\n  f.write('  { %3d, %s, %s }%s\\n' % (offset, utt[2], value, last))\n  offset += len(utt[0]) + 1\nf.write('};\\n\\n')\n\n# Ending text\n\nf.write(\"\"\"\\\nconst size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table);\n\n#endif /* SUPPORT_UNICODE */\n\n/* End of pcre2_ucptables_inc.h */\n\"\"\")\n\nf.close\n\n# End\n"
  },
  {
    "path": "maint/LintMan",
    "content": "#!/usr/bin/perl\n\nuse warnings;\nuse strict;\nuse Getopt::Long;\nuse vars qw /$opt_verbose/;\n\n# A script to scan PCRE2's man pages to check for values that might need to\n# be updated to match the code.\n#\n# It updates numerical values after \\\" DEFINE <name> or errors if name is\n# not found.\n\nmy $file;\nmy %defs;\n\nforeach $file (\"../src/config.h.generic\")\n  {\n  open (INCLUDE, $file) or die \"Failed to open include $file\\n\";\n\n  while (<INCLUDE>)\n    {\n    next unless /^#define ([[:upper:]_\\d]+)\\s+(\\d+)/a;\n    $defs{$1} = $2;\n    }\n\n  close(INCLUDE);\n  }\n\nGetOptions(\"verbose\");\nwhile (scalar(@ARGV) > 0)\n  {\n  $file = shift @ARGV;\n\n  open my $fh, \"+<\", $file or die \"Failed to open $file\\n\";\n\n  my @lines = <$fh>;\n  my $updated = 0;\n\n  foreach my $index (0 .. $#lines)\n    {\n    if ($lines[$index] =~ /^\\.\\\\\"\\sDEFINE\\s([[:upper:]_\\d]+)$/a)\n      {\n      my $l = $index + 1;\n      die \"Invalid DEFINE line $l of $file\\n\" unless defined $lines[$l];\n\n      my $key = $1;\n      die \"Bad DEFINE key $key line $l of $file\\n\" unless exists $defs{$key};\n\n      my $value = $defs{$key};\n      if ($lines[$index + 1] !~ /^$value\\b/)\n        {\n        $updated += $lines[$index + 1] =~ s/^\\d+/$value/a;\n        print \"Updated $key in $file to $value\\n\" if $opt_verbose;\n        }\n      }\n    }\n\n  if ($updated > 0)\n    {\n    seek($fh, 0, 0);\n    print $fh @lines;\n    truncate($fh, tell($fh));\n    }\n  close($fh);\n  }\n"
  },
  {
    "path": "maint/ManyConfigTests",
    "content": "#! /bin/sh\n\n# This is a script for the use of PCRE2 maintainers. It configures and builds\n# PCRE2 with a variety of configuration options, and in each case runs the\n# tests to ensure that all goes well. Every possible combination would take far\n# too long, so we use a representative sample. This script should be run in the\n# PCRE2 source directory.\n\n# While debugging, it is sometimes useful to be able to cut out some of the\n# tests, in order to run those that are giving errors. The following options\n# do this:\n#\n# -noasan         skip the test that uses -fsanitize=address\n# -nousan         skip the test that uses -fsanitize=undefined\n# -nodebug        skip the test that uses --enable-debug\n# -nojit          skip all JIT tests\n# -nojitmain      skip non-valgrind JIT tests\n# -nojitvalgrind  skip JIT tests with valgrind\n# -nomain         skip all the main (non-JIT) set of tests\n# -nomainvalgrind skip the main (non-JIT) valgrind tests\n# -notmp          skip the tests in a temporary directory\n# -notmpjit       skip the JIT test in a temporary directory\n# -noebcdic       skip the EBCDIC tests\n# -novalgrind     skip all the valgrind tests\n\n# Alternatively, if any of those names are given with '+' instead of '-no',\n# only those groups named with '+' are run (e.g. +jit). If -dummy is given,\n# no tests are actually run - this provides a means of testing the selectors.\n\n# The -v option causes a call to 'pcre2test -C' to happen for each\n# configuration.\n\nuseasan=1\nuseusan=1\nusedebug=1\nusejit=1\nusejitvalgrind=1\nusemain=1\nusemainvalgrind=1\nusetmp=1\nusetmpjit=1\nuseebcdic=1\nuseebcdicjit=1\nusevalgrind=1\n\ndummy=0\nseenplus=0\nverbose=0\n\nwhile [ $# -gt 0 ] ; do\n  case $1 in\n    +*) if [ $seenplus -eq 0 ]; then\n          useasan=0\n          useusan=0\n          usedebug=0\n          usejit=0\n          usejitvalgrind=0\n          usemain=0\n          usemainvalgrind=0\n          usetmp=0\n          usetmpjit=0\n          useebcdic=0\n          useebcdicjit=0\n          usevalgrind=0\n          seenplus=1\n        fi;;\n  esac\n\n  case $1 in\n    -dummy)          dummy=1;;\n    -v)              verbose=1;;\n    -noasan)         useasan=0;;\n    -nousan)         useusan=0;;\n    -nodebug)        usedebug=0;;\n    -nojit)          usejit=0; usejitvalgrind=0; usetmpjit=0; useebcdicjit=0;;\n    -nojitmain)      usejit=0;;\n    -nojitvalgrind)  usejitvalgrind=0;;\n    -nomain)         usemain=0; usemainvalgrind=0;;\n    -nomainvalgrind) usemainvalgrind=0;;\n    -notmp)          usetmp=0; usetmpjit=0;;\n    -notmpjit)       usetmpjit=0;;\n    -noebcdic)       useebcdic=0; useebcdicjit=0;;\n    -noebcdicjit)    useebcdicjit=0;;\n    -novalgrind)     usevalgrind=0;;\n    +asan)           useasan=1;;\n    +usan)           useusan=1;;\n    +debug)          usedebug=1;;\n    +jit)            usejit=1; usejitvalgrind=1; usetmpjit=1; useebcdicjit=1;;\n    +jitmain)        usejit=1;;\n    +jitvalgrind)    usejitvalgrind=1;;\n    +main)           usemain=1; usemainvalgrind=1;;\n    +mainvalgrind)   usemainvalgrind=1;;\n    +tmp)            usetmp=1;;\n    +tmpjit)         usetmpjit=1;;\n    +ebcdic)         useebcdic=1;;\n    +ebcdicjit)      useebcdicjit=1;;\n    +valgrind)       usevalgrind=1; usejitvalgrind=1; usemainvalgrind=1;;\n    *)               echo \"Unknown option '$1'\"; exit 1;;\n  esac\n  shift\ndone\n\nif [ $usejitvalgrind -eq 0 -a $usemainvalgrind -eq 0 ] ; then\n  usevalgrind=0\nfi\n\n# This is in case the caller has set aliases (as I do - PH)\n\nunset cp ls mv rm\n\n# This is a temporary directory for testing out-of-line builds\n\ntmp=/tmp/pcre2testing\n\n# Don't bother with compiler optimization for most tests; it just slows down\n# compilation a lot (and running the tests themselves is quick). However, one\n# special test turns optimization on, because it can provoke some compiler\n# warnings.\n\nCFLAGS=\"-g\"\nOFLAGS=\"-O0\"\nCC=\"${CC:=cc}\"\nISGCC=0\n\n# If the compiler is GCC, add a lot of warning switches.\n\nCC_VER_OUTPUT=`printf '#if defined(__GNUC__) && !defined(__clang__)\\nGCC=yes\\n#endif\\n' | $CC -E -`\nif [ $? -eq 0 ] && (echo \"$CC_VER_OUTPUT\" | grep GCC=yes) >/dev/null; then\n  echo \"Treating $CC as GCC\"\n  ISGCC=1\n  CFLAGS=\"$CFLAGS -Wall\"\n  CFLAGS=\"$CFLAGS -Wextra\"\n  CFLAGS=\"$CFLAGS -Wno-overlength-strings\"\n  CFLAGS=\"$CFLAGS -Wpointer-arith\"\n  CFLAGS=\"$CFLAGS -Wwrite-strings\"\n  CFLAGS=\"$CFLAGS -Wundef\"\n  CFLAGS=\"$CFLAGS -Wshadow\"\n  CFLAGS=\"$CFLAGS -Wmissing-field-initializers\"\n  CFLAGS=\"$CFLAGS -Wunused-parameter\"\n  CFLAGS=\"$CFLAGS -Wformat\"\n  CFLAGS=\"$CFLAGS -Wbad-function-cast\"\n  CFLAGS=\"$CFLAGS -Wmissing-declarations\"\n  CFLAGS=\"$CFLAGS -Wnested-externs\"\n  CFLAGS=\"$CFLAGS -pedantic\"\n  CFLAGS=\"$CFLAGS -Wuninitialized\"\n  CFLAGS=\"$CFLAGS -Wmaybe-uninitialized\"\n  CFLAGS=\"$CFLAGS -Wmissing-prototypes\"\n  CFLAGS=\"$CFLAGS -Wstrict-prototypes\"\n  CFLAGS=\"$CFLAGS -Warray-bounds\"\n  CFLAGS=\"$CFLAGS -Wformat-overflow=2\"\n  CFLAGS=\"$CFLAGS -Wformat-truncation=1\"\n  CFLAGS=\"$CFLAGS -Wdeclaration-after-statement\"\nfi\n\n# This function runs a single test with the set of configuration options that\n# are in $opts. The source directory must be set in srcdir. The function must\n# be defined as \"runtest()\" not \"function runtest()\" in order to run on\n# Solaris.\n\nruntest()\n  {\n  rm -f $srcdir/pcre2test $srcdir/pcre2grep $srcdir/pcre2_jit_test $srcdir/pcre2posix_test\n  testcount=`expr $testcount + 1`\n\n  if [ \"$opts\" = \"\" ] ; then\n    echo \"[$testcount/$testtotal] Configuring with: default settings\"\n  else\n    echo \"[$testcount/$testtotal] Configuring with:\"\n    echo \"  $opts\"\n  fi\n\n  if [ $dummy -eq 1 ]; then return; fi\n\n  CC=\"$CC\" CFLAGS=\"$CFLAGS\" \\\n    $srcdir/configure $opts >/dev/null 2>teststderrM\n  if [ $? -ne 0 ]; then\n    echo \" \"\n    echo \"******** Error while configuring ********\"\n    cat teststderrM\n    exit 1\n  fi\n\n# There is an infelicity in the Autotools world (as of October 2015) which\n# causes the message\n#\n# ar: `u' modifier ignored since `D' is the default (see `U')\n#\n# to be output while linking. This triggers an unwanted error report from this\n# script, because it expects no stderr output while making. To get round this\n# we filter the stderr output through sed, removing all occurrences of the\n# above lines. Just for paranoia, check that sed is available before doing\n# this.\n\n  echo \"Making\"\n  make -j >/dev/null 2>teststderrM\n  makeRC=$?\n  if command -v sed >/dev/null 2>&1 ; then\n    sed \"/\\`u' modifier ignored since \\`D' is the default/ d\" \\\n      teststderrM > teststderrMM\n    mv -f teststderrMM teststderrM\n  fi\n  if [ $makeRC -ne 0 -o -s teststderrM ]; then\n    echo \" \"\n    echo \"******** Errors or warnings while making ********\"\n    echo \" \"\n    cat teststderrM\n    exit 1\n  fi\n\n  if [ $verbose -eq 1 ]; then\n    ./pcre2test -C\n  fi\n\n  ./pcre2test -C jit >/dev/null\n  jit=$?\n  ./pcre2test -C pcre2-8 >/dev/null\n  pcre2_8=$?\n\n  echo \"Running PCRE2 library tests $withvalgrind $withmalloc\"\n  $srcdir/RunTest $valgrind $malloc >teststdoutM 2>teststderrM\n\n  if [ $? -ne 0 -o -s teststderrM ]; then\n    echo \" \"\n    echo \"**** Test failed ****\"\n    if [ -s teststderrM ] ; then\n      cat teststderrM\n    else\n      cat teststdoutM\n    fi\n    exit 1\n  fi\n\n  if [ $pcre2_8 -eq 0 ]; then\n    echo \"Skipping pcre2grep and pcre2posix tests: 8-bit library not compiled\"\n  elif [ \"x$withebcdic\" != x ]; then\n    echo \"Skipping pcre2grep and pcre2posix tests: tests not supported on EBCDIC\"\n  else\n    echo \"Running pcre2grep tests $withvalgrind\"\n    $srcdir/RunGrepTest $valgrind >teststdoutM 2>teststderrM\n    if [ $? -ne 0 -o -s teststderrM ]; then\n      echo \" \"\n      echo \"**** Test failed ****\"\n      cat teststderrM\n      cat teststdoutM\n      exit 1\n    fi\n    echo \"Running pcre2posix test $withvalgrind\"\n    $valgrind ./pcre2posix_test >teststdoutM 2>teststderrM\n\n    if [ $? -ne 0 ]; then\n      echo \" \"\n      echo \"**** Test failed ****\"\n      exit 1\n    fi\n  fi\n\n  if [ \"$jit\" -eq 0 ]; then\n    echo \"Skipping JIT regression tests: JIT is not enabled\"\n  elif [ \"x$withebcdic\" != x ]; then\n    echo \"Skipping JIT regression tests: tests not supported on EBCDIC\"\n  else\n    echo \"Running JIT regression tests $withvalgrind\"\n    $jrvalgrind ./pcre2_jit_test >teststdoutM 2>teststderrM\n    if [ $? -ne 0 -o -s teststderrM ]; then\n      echo \" \"\n      echo \"**** Test failed ****\"\n      cat teststderrM\n      cat teststdoutM\n      exit 1\n    fi\n  fi\n  }\n\n# Update the total count whenever a new test is added; it is used to show\n# progess as each test is run.\n\ntesttotal=`expr 17 \\* $usemain + \\\n  1 \\* $usemain \\* $usedebug + \\\n  1 \\* $usetmp + 1 \\* $usetmpjit + \\\n  1 \\* $ISGCC \\* $usemain + \\\n  1 \\* $ISGCC \\* $usemain \\* $useasan + \\\n  1 \\* $ISGCC \\* $usemain \\* $useusan + \\\n  13 \\* $usejit + \\\n  2 \\* $useebcdic + \\\n  1 \\* $useebcdicjit + \\\n  2 \\* $usemainvalgrind + \\\n  2 \\* $usejitvalgrind`\n\ntestcount=0\n\nif [ $testtotal -eq 0 ] ; then\n  echo \"** No tests selected\"\n  exit 1\nfi\n\nvalgrind=\njrvalgrind=\nwithvalgrind=\nmalloc=\nwithmalloc=\nsrcdir=.\nexport srcdir\n\nif [ $usejit -ne 0 ]; then\n  enable_jit=--enable-jit\nelse\n  enable_jit=\nfi\n\n# If gcc is in use, run a maximally configured test with -O2, because that can\n# throw up warnings that are not detected with -O0. Then run a second test with\n# -fsanitize=address, which also may throw up new warnings as well as checking\n# things at runtime. Finally, run another test using -fsanitize=undefined\n# -std-gnu99 to check for runtime actions that are not well defined.\n\nif [ $ISGCC -ne 0 -a $usemain -ne 0 ]; then\n  echo \"---------- Maximally configured test with -O2 ----------\"\n  SAVECFLAGS=\"$CFLAGS\"\n  CFLAGS=\"-O2 $CFLAGS\"\n  echo \"CFLAGS=$CFLAGS\"\n  opts=\"--disable-shared $enable_jit --enable-pcre2-16 --enable-pcre2-32\"\n  runtest\n  if [ $useasan -ne 0 ]; then\n    echo \"---------- Maximally configured test with -fsanitize=address ----------\"\n# Following a kernel change, sanitize address doesn't work unless the extra\n# PIE options are also set.\n    CFLAGS=\"$OFLAGS $SAVECFLAGS -no-pie -fno-PIE -fsanitize=address\"\n    echo \"CFLAGS=$CFLAGS\"\n    opts=\"--disable-shared $enable_jit --enable-pcre2-16 --enable-pcre2-32\"\n    runtest\n  fi\n# This also seems to be the case for sanitize undefined.\n  if [ $useusan -ne 0 ]; then\n    echo \"------- Maximally configured test with -fsanitize=undefined -fno-sanitize=alignment -std=gnu99 -------\"\n    CFLAGS=\"$OFLAGS $SAVECFLAGS -no-pie -fno-PIE -fsanitize=undefined -fno-sanitize=alignment -std=gnu99\"\n    echo \"CFLAGS=$CFLAGS\"\n    opts=\"--disable-shared $enable_jit --enable-pcre2-16 --enable-pcre2-32\"\n    runtest\n  fi\n  CFLAGS=\"$SAVECFLAGS\"\nfi\n\n# This set of tests builds PCRE2 and runs the tests with a variety of configure\n# options, in the current (source) directory. The empty configuration builds\n# with all the default settings. As well as testing that these options work, we\n# use --disable-shared or --disable-static except for the default test (which\n# builds both) to save a bit of time by building only one version of the\n# library for the subsequent tests.\n\necho \"---------- CFLAGS for the remaining tests ----------\"\nCFLAGS=\"$OFLAGS $CFLAGS\"\necho \"CFLAGS=$CFLAGS\"\n\nif [ $usemain -ne 0 ]; then\n  if [ $usedebug -ne 0 ]; then\n    echo \"---------- Maximally configured test with --enable-debug ----------\"\n    opts=\"--disable-shared $enable_jit --enable-pcre2-16 --enable-pcre2-32 --enable-debug\"\n    runtest\n  fi\n\n  echo \"---------- Non-JIT tests in the current directory ----------\"\n  for opts in \\\n    \"\" \\\n    \"--disable-static\" \\\n    \"--disable-shared\" \\\n    \"--disable-unicode --disable-shared --enable-never-backslash-C\" \\\n    \"--with-link-size=3 --disable-shared --disable-pcre2grep-callout\" \\\n    \"--disable-unicode --enable-rebuild-chartables --disable-shared\" \\\n    \"--disable-unicode --enable-newline-is-any --disable-shared\" \\\n    \"--disable-unicode --enable-newline-is-cr --disable-shared\" \\\n    \"--disable-unicode --enable-newline-is-crlf --disable-shared\" \\\n    \"--disable-unicode --enable-newline-is-anycrlf --enable-bsr-anycrlf --disable-shared\" \\\n    \"--enable-newline-is-any --disable-static\" \\\n    \"--disable-unicode --enable-pcre2-16 --enable-debug\" \\\n    \"--enable-pcre2-16 --disable-shared\" \\\n    \"--disable-unicode --enable-pcre2-32\" \\\n    \"--enable-pcre2-32 --disable-shared\" \\\n    \"--disable-unicode --enable-pcre2-32 --enable-pcre2-16 --disable-shared\" \\\n    \"--disable-unicode --enable-pcre2-32 --enable-pcre2-16 --disable-pcre2-8 --disable-shared\"\n  do\n    runtest\n  done\nfi\n\n# Now run the JIT tests unless disabled\n\nif [ $usejit -ne 0 ]; then\n  echo \"---------- JIT tests in the current directory ----------\"\n  for opts in \\\n    \"--disable-unicode --enable-jit --disable-shared\" \\\n    \"--enable-jit --disable-shared\" \\\n    \"--enable-jit --with-link-size=3 --disable-shared\" \\\n    \"--enable-jit --enable-pcre2-16 --disable-shared\" \\\n    \"--disable-unicode --enable-jit --enable-pcre2-16 --disable-pcre2-8 --disable-shared\" \\\n    \"--enable-jit --enable-pcre2-16 --disable-pcre2-8 --disable-shared\" \\\n    \"--enable-jit --enable-pcre2-16 --with-link-size=3 --disable-shared\" \\\n    \"--enable-jit --enable-pcre2-16 --with-link-size=4 --disable-shared\" \\\n    \"--enable-jit --enable-pcre2-32 --disable-shared\" \\\n    \"--disable-unicode --enable-jit --enable-pcre2-32 --disable-pcre2-8 --disable-shared\" \\\n    \"--enable-jit --enable-pcre2-32 --disable-pcre2-8 --disable-shared\" \\\n    \"--enable-jit --enable-pcre2-32 --with-link-size=4 --disable-shared\" \\\n    \"--enable-jit --enable-pcre2-32 --enable-pcre2-16 --disable-pcre2-8 --enable-newline-is-anycrlf --enable-bsr-anycrlf --disable-shared\"\n  do\n    runtest\n  done\nfi\n\n# Now run some tests with EBCDIC enabled\n\nif [ $useebcdic -ne 0 -o $useebcdicjit -ne 0 ]; then\n  echo \"---------- EBCDIC tests in the current directory ----------\"\n  withebcdic=\"with EBCDIC\"\n\n  if [ $useebcdic -ne 0 ]; then\n    for opts in \\\n      \"--disable-unicode --enable-ebcdic --enable-ebcdic-ignoring-compiler\" \\\n      \"--disable-unicode --enable-ebcdic --enable-ebcdic-ignoring-compiler --enable-ebcdic-nl25\"\n    do\n      runtest\n    done\n  fi\n\n  if [ $useebcdicjit -ne 0 ]; then\n    for opts in \\\n      \"--disable-unicode --enable-jit --enable-ebcdic --enable-ebcdic-ignoring-compiler\"\n    do\n      runtest\n    done\n  fi\nfi\n\nwithebcdic=\n\n# Now re-run some of the tests under valgrind.\n\nif [ $usevalgrind -ne 0 ]; then\n  echo \"---------- Tests in the current directory using valgrind ----------\"\n  valgrind=valgrind\n  withvalgrind=\"with valgrind\"\n\n  malloc=-malloc\n  withmalloc=\"with -malloc\"\n\n  if [ $usemainvalgrind -ne 0 ]; then\n    for opts in \\\n      \"--disable-shared\" \\\n      \"--with-link-size=3 --enable-pcre2-16 --enable-pcre2-32 --disable-shared\"\n    do\n      opts=\"--enable-valgrind $opts\"\n      runtest\n\n      # Only need to run the first test with -malloc.\n      malloc=\n      withmalloc=\n    done\n  fi\n\n  malloc=-malloc\n  withmalloc=\"with -malloc\"\n\n  if [ $usejitvalgrind -ne 0 ]; then\n    jrvalgrind=\"valgrind --tool=memcheck -q --smc-check=all-non-file --suppressions=$srcdir/testdata/valgrind-jit.supp\"\n    for opts in \\\n      \"--enable-jit --disable-shared\" \\\n      \"--enable-jit --enable-pcre2-16 --enable-pcre2-32\"\n    do\n      opts=\"--enable-valgrind $opts\"\n      runtest\n\n      # Only need to run the first test with -malloc.\n      malloc=\n      withmalloc=\n    done\n  fi\nfi\n\nvalgrind=\njrvalgrind=\nwithvalgrind=\nmalloc=\nwithmalloc=\n\n# Clean up the distribution and then do at least one build and test in a\n# directory other than the source directory. It doesn't work unless the\n# source directory is cleaned up first.\n\nif [ -f Makefile ]; then\n  echo \"Running 'make distclean'\"\n  make distclean >/dev/null 2>&1\n  if [ $? -ne 0 ]; then\n    echo \"** 'make distclean' failed\"\n    exit 1\n  fi\nfi\n\necho \"---------- End of tests in the source directory ----------\"\necho \"Removing teststdoutM and teststderrM\"\nrm -rf teststdoutM teststderrM\n\nif [ $usetmp -ne 0 -o $usetmpjit -ne 0 ]; then\n  srcdir=`pwd`\n  export srcdir\n\n  if [ ! -e $tmp ]; then\n    mkdir $tmp\n  fi\n\n  if [ ! -d $tmp ]; then\n    echo \"** Failed to create $tmp or it is not a directory\"\n    exit 1\n  fi\n\n  cd $tmp\n  if [ $? -ne 0 ]; then\n    echo \"** Failed to cd to $tmp\"\n    exit 1\n  fi\n\n  if [ $usetmp -ne 0 ]; then\n    echo \"---------- Tests in the $tmp directory ----------\"\n    for opts in \\\n      \"--disable-shared\"\n    do\n      runtest\n    done\n  fi\n\n  if [ $usetmpjit -ne 0 ]; then\n    echo \"---------- JIT tests in the $tmp directory ----------\"\n    for opts in \\\n      \"--enable-jit --disable-shared\"\n    do\n      runtest\n    done\n  fi\n\n  echo \"Removing $tmp\"\n  rm -rf $tmp\nfi\n\necho \"---------- All done ----------\"\n\n# End\n"
  },
  {
    "path": "maint/README",
    "content": "MAINTENANCE README FOR PCRE2\n============================\n\nThe files in the \"maint\" directory of the PCRE2 source contain data, scripts,\nand programs that are used for the maintenance of PCRE2, but which do not form\npart of the PCRE2 distribution tarballs. This document describes these files\nand also contains some notes for maintainers. Its contents are:\n\n  Files in the maint directory\n  Updating to a new Unicode release\n  Preparing for a PCRE2 release\n  Updating version info for libtool\n  Long-term ideas (wish list)\n\nFor a description of the way PCRE2 works, see the file called HACKING in the\ntop directory.\n\n\nFiles in the maint directory\n============================\n\n132html\n  A Perl script to convert man pages to HTML (.1 and .3 files \"two\" HTML),\n  used by UpdateAlways.\n\nCheckMan\n  A Perl script to validate the syntax in PCRE2 man pages, used by\n  UpdateAlways.\n\nCleanTxt\n  A Perl script to clean up the nroff output in PCRE2 man pages, used by\n  UpdateAlways.\n\nDetrail\n  A Perl script to remove trailing whitespace from PCRE2 files, used by\n  UpdateAlways.\n\nGenerateCommon.py\n  A Python module containing data and functions that are used by the other\n  Generate scripts.\n\nGenerateTest.py\n  A Python script that generates input and expected output test data for tests\n  26 or 27, which tests certain aspects of Unicode property support.\n\nGenerateUcd.py\n  A Python script that generates the file pcre2_ucd.c from GenerateCommon.py\n  and Unicode data files, which are themselves downloaded from the Unicode web\n  site. The generated file contains the tables for a 2-stage lookup of Unicode\n  properties, along with some auxiliary tables. The script starts with a long\n  comment that gives details of the tables it constructs.\n\nGenerateUcpHeader.py\n  A Python script that generates the file pcre2_ucp.h from GenerateCommon.py\n  and Unicode data files. The generated file defines constants for various\n  Unicode property values.\n\nGenerateUcpTables.py\n  A Python script that generates the file pcre2_ucptables_inc.h from\n  GenerateCommon.py and Unicode data files. The generated file contains tables\n  for looking up Unicode property names.\n\nFetchUcd.sh\n  A shell script to download the UCD data from the Unicode website into\n  the Unicode.tables directory.\n\nFilterCoverage.py\n  A small helper used by the RunCoverage script.\n\nLintMan\n  A Perl script to check and update magic numbers in the documentation that\n  correspond to configurable settings in the codebase.\n\nmanifest-*\n  Data files used to verify the contents of the distribution tarball and\n  `make install` file lists.\n\nManyConfigTests\n  A shell script that runs \"configure, make, test\" a number of times with\n  different configuration settings.\n\nUpdateAlways\n  A shell script to ensure that all auto-generated outputs are ready for\n  release.\n\n  It should be run often (by CI on each commit) to ensure that the repository\n  is in a clean and consistent state.\n\nUpdateDates.py\nUpdateRelease.py\n  Python scripts to be run less frequently than UpdateAlways. These should only\n  be needed immediately before a release, when finalising the repository.\n  UpdateDates.py checks in the last-updated times on documentation pages.\n  UpdateRelease.py is needed after any change to the version number in\n  configure.ac.\n\npcre2_chartables.c.non-standard\n  This is a set of character tables that came from a Windows system. It has\n  characters greater than 128 that are set as spaces, amongst other things. I\n  kept it so that it can be used for testing from time to time.\n\nREADME\n  This file.\n\nRunCoverage\n  A script used to generate the coverage report using Clang. It is called by\n  the GitHub CI actions, and can also be run by a developer locally.\n\nRunManifestTest\nRunManifestTest.ps1\n  Scripts to generate and verify a list of files against an expected 'manifest'\n  detailing what the directory should contain.\n\nUnicode.tables\n  The files in this directory were downloaded from the Unicode web site. They\n  contain information about Unicode characters and scripts, and are used by the\n  Generate scripts. There is also UnicodeData.txt, which is no longer used by\n  any script, because it is useful occasionally for manually looking up the\n  details of certain characters. However, note that character names in this\n  file such as \"Arabic sign sanah\" do NOT mean that the character is in a\n  particular script (in this case, Arabic). Scripts.txt and\n  ScriptExtensions.txt are where to look for script information.\n\nucptest.c\n  A program for testing the Unicode property macros that do lookups in the\n  pcre2_ucd.c data, mainly useful after rebuilding the Unicode property tables.\n  Compile and run this in the \"maint\" directory (see comments at its head).\n  This program can also be used to find characters with specific properties and\n  to list which properties are supported.\n\nucptestdata\n  A directory containing four files, testinput{1,2} and testoutput{1,2}, for\n  use in conjunction with the ucptest program.\n\nutf8.c\n  A short, freestanding C program for converting a Unicode code point into a\n  sequence of bytes in the UTF-8 encoding, and vice versa. If its argument is a\n  hex number such as 0x1234, it outputs a list of the equivalent UTF-8 bytes.\n  If its argument is a sequence of concatenated UTF-8 bytes (e.g. 12e188b4) it\n  treats them as a UTF-8 string and outputs the equivalent code points in hex.\n  See comments at its head for details.\n\n\nUpdating to a new Unicode release\n=================================\n\nWhen there is a new release of Unicode, the files in Unicode.tables must be\nrefreshed from the Unicode web site, which can be done with the script\nFetchUcd.sh. Once that is done, the four Python scripts that generate files from\nthe Unicode data can be run from within the \"maint\" directory. Note that the\nformat used for those files is not stable, and therefore changes to the scripts\nmight be needed to support new versions.\n\nNote: Previously, it was necessary to update lists of scripts and their\nabbreviations by hand before running the Python scripts. This is no longer\nnecessary because the scripts have been upgraded to extract this information\nthemselves. Also, there used to be explicit lists of scripts in two of the man\npages. This is no longer the case; the pcre2test program can now output a list\nof supported scripts, and the command to do so is part of the documentation.\n\nYou can give an output file name as an argument to the following scripts, but\nby default:\n\nGenerateUcd.py        creates pcre2_ucd.c            )\nGenerateUcpHeader.py  creates pcre2_ucp.h            ) in the current directory\nGenerateUcpTables.py  creates pcre2_ucptables_inc.h  )\n\nThese files can be compared against the existing versions in the src directory\nto check on any changes before replacing the old files, but you can also\ngenerate directly into the final location by running:\n\n./GenerateUcd.py       ../src/pcre2_ucd.c\n./GenerateUcpHeader.py ../src/pcre2_ucp.h\n./GenerateUcpTables.py ../src/pcre2_ucptables_inc.h\n\nOnce the .c and .h files are in the ../src directory, the ucptest program can\nbe compiled and used to check that the new tables work properly. The data files\nin ucptestdata are set up to check a number of test characters. See the\ncomments at the start of ucptest.c. Depending of the type of changes, adding\ntests for new scripts, properties or characters to the files in ucptestdata\nis recommended. Make sure to regenerate and validate the output files after.\n\nFinally, you should run the GenerateTest.py script to regenerate new versions\nof the input and expected output from a series of Unicode property tests that\nare automatically generated from the Unicode data files. By default, the files\nare written to testinput and testoutput in the current directory, but they\nshould be moved to replace the files inside the main testdata directory and\nthat are being used for tests 27 or 26.\n\nIn summary:\n\n```\n./GenerateUcd.py       ../src/pcre2_ucd.c\n./GenerateUcpHeader.py ../src/pcre2_ucp.h\n./GenerateUcpTables.py ../src/pcre2_ucptables_inc.h\n./GenerateTest.py\nmv testinput ../testdata/testinput27\nmv testoutput ../testdata/testoutput27\n\n...compile ucptest.c\nfor i in 1 2; do\n  ./ucptest < ucptestdata/testinput$i > testoutput$i\n  diff -U3 testoutput$i ucptestdata/testoutput$i\ndone\n```\n\n\nPreparing for a PCRE2 release\n=============================\n\nThis section contains a checklist of things that I (NCW) do before building a\nnew release.\n\n* First of all, make sure that the main branch is in good condition.\n\n  - Basically, test it. The CI jobs should all be passing. This ensures that\n    pcre2tests are passing, that the build is warning-free, and that all our\n    platforms are running correctly. The CI jobs should be running the Perl\n    tests (which assert that `testdata/testinput1` tests give the same results\n    using Perl's regex engine). The ManyConfigTests exercise a variety of\n    build options and combinations. The Autoconf and CMake builds must pass.\n\n  - If new build options have been added, ensure that they are added to the\n    CMake files as well as to the Autoconf files.\n\n  - Run perltest.sh on the test data for tests 1 and 4. The output should match\n    the PCRE2 test output, apart from the version identification at the start of\n    each test. Sometimes there are other differences in test 4 if PCRE2 and Perl\n    are using different Unicode releases. The other tests are not\n    Perl-compatible (they use various PCRE2-specific features or options). The\n    maint/RunPerlTest shell script can be used to do this testing in Unix-like\n    environment.\n\n  - Check the external testing tools. CodeQL & Clang Static Analyzer report\n    their results to the GitHub \"Security\" dashboard. Coverity has its own\n    external dashboard, as does OSS-Fuzz. Since we have these tools, we should\n    at least confirm they haven't flagged anything.\n\n  - Documentation: check the documentation is ready; and LICENCE,\n    NON-AUTOTOOLS-BUILD, and README. Many of these won't need changing, but over\n    the long term things do change.\n\n* Ensure the AUTHORS file is up-to-date with any new contributors since the\n  last release. I use this simple command:\n\n  ```sh\n  git log $GIT_TAG..HEAD --format='RealAuthor: %aN <%aE>%n%w(80,4,4)%b' | \\\n    grep -E '^RealAuthor: .*|Co-authored-by:' | \\\n    sed -E -e 's/RealAuthor: |.*Co-authored-by:\\s*//' | \\\n    sort -u\n  ```\n\n* Ensure the ChangeLog and NEWS files are updated with everything that you want\n  to announce in the new release.\n\n  This command helps dump the Git commits:\n\n  ```sh\n  git log --reverse -p -U10 --invert-grep --grep='#noupdate' $GIT_TAG..HEAD \\\n    -- ':!doc/*.txt' ':!doc/html'\n  ```\n\n* Update the library version numbers in configure.ac according to the rules\n  given below.\n\n* Add the new library version to the src/libpcre2-*.sym.in files (even if no new\n  symbols have been added since the last release).\n\n* Push all these changes to main.\n\n* Take a branch off main, named \"release/pcre2-10.XX-RC1\" or\n  \"release/pcre2-10.XX\".\n\n  All releases should come from main. The final release isn't branched off\n  from the RC branch; the RC branch is a \"throwaway\" release which can be pruned\n  from the linear history of the trunk of PCRE2's tree.\n\n* In the new branch, remove the \"-DEV\" prefix from the version number and set\n  the release date in configure.ac. Update the release date in the ChangeLog and\n  NEWS files.\n\n  ```\n  vim configure.ac\n  vim NEWS\n  vim ChangeLog\n  git add -u configure.ac NEWS ChangeLog\n  git commit -m\"Update version number and release date\"\n  ```\n\n* Perform updates of the automatically-generated files.\n\n  ```\n  ./autogen.sh && ./configure\n  rm src/config.h.generic src/pcre2.h.generic\n  make src/config.h.generic src/pcre2.h.generic\n  git clean -idx .\n  git add -u src/config.h.generic src/pcre2.h.generic\n  git commit -m\"Automatic update of .generic files\"\n\n  maint/UpdateRelease.py\n  maint/UpdateDates.py\n  maint/UpdateAlways\n  git add -u\n  git commit -m\"Automatic update of doc files #noupdate\"\n  ```\n\n* Commit the Autoconf files to the branch. This is required so that users can\n  check out the Git tag, and receive the same contents as the tarball users.\n\n  ```\n  ./autogen.sh\n  git add -f Makefile.in aclocal.m4 ar-lib compile config.guess config.sub \\\n    configure depcomp install-sh ltmain.sh m4/libtool.m4 m4/ltoptions.m4 \\\n    m4/ltsugar.m4 m4/ltversion.m4 m4/lt~obsolete.m4 missing src/config.h.in \\\n    test-driver\n  git commit -m\"Commit autogen.sh output\"\n  ```\n\n* Now, wait for the CI job to build the tarball. We can't do this locally: we\n  want to be releasing a tarball which is signed by GitHub. The GitHub signature\n  says, \"Yes, the developer did not tamper with this tarball, we certify that it\n  was derived solely from the contents of the Git repository at this commit\n  hash\".\n\n* Create the tag locally. We can't do this via the GitHub UI: it has no way to\n  create signed tags (since my GPG key lives on a Yubikey).\n\n  ```\n  git config user.signingkey 'FB63B406!'\n  git tag -s pcre2-10.XX -m\"Release 10.XX\"\n  git tag -v pcre2-10.XX\n  ```\n\n* Download the tarball from the CI artifacts. Sign these using the GPG key.\n\n  ```\n  KEYID=FB63B406\n  for i in pcre2-10.XX.{zip,tar.gz,tar.bz2}; do\n    gpg --output $i.sig --detach-sig --default-key $KEYID $i\n    gpg --verify $i.sig\n  done\n  ```\n\n* In the GitHub UI, create a \"release\" from the tag (which must have been\n  already pushed). Add the tarballs and GPG signatures.\n\n* Announce the release on the mailing list.\n\n* Bump the version number on main to the next release, plus -DEV.\n\n* After issuing a final release, merge the release tag back to main with:\n\n  ```\n  git merge -s ours release/pcre2-10.XX\n  ```\n\n  Do not do this for -RC releases, which are not included in the linear history\n  of the PCRE2 development trunk.\n\n  We want users with forks of PCRE2 to be able to update from release to the\n  next by simply doing a `git merge` in their fork. If the release tag is not\n  merged back to main, then users will see unnecessary Git conflicts when\n  trying to fast-forward from one release to the next.\n\n\nUpdating version info for libtool\n=================================\n\nThis set of rules for updating library version information came from a web page\nwhose URL I have forgotten. The version information consists of three parts:\n(current, revision, age).\n\n1. Start with version information of 0:0:0 for each libtool library.\n\n2. Update the version information only immediately before a public release of\n   your software. More frequent updates are unnecessary, and only guarantee\n   that the current interface number gets larger faster.\n\n3. If the library source code has changed at all since the last update, then\n   increment revision; c:r:a becomes c:r+1:a.\n\n4. If any interfaces have been added, removed, or changed since the last\n   update, increment current, and set revision to 0.\n\n5. If any interfaces have been added since the last public release, then\n   increment age.\n\n6. If any interfaces have been removed or changed since the last public\n   release, then set age to 0.\n\nThe following explanation may help in understanding the above rules a bit\nbetter. Consider that there are three possible kinds of reaction from users to\nchanges in a shared library:\n\n1. Programs using the previous version may use the new version as a drop-in\n   replacement, and programs using the new version can also work with the\n   previous one. In other words, no recompiling nor relinking is needed. In\n   this case, increment revision only, don't touch current or age.\n\n2. Programs using the previous version may use the new version as a drop-in\n   replacement, but programs using the new version may use APIs not present in\n   the previous one. In other words, a program linking against the new version\n   may fail if linked against the old version at run time. In this case, set\n   revision to 0, increment current and age.\n\n3. Programs may need to be changed, recompiled, relinked in order to use the\n   new version. Increment current, set revision and age to 0.\n\n\nFuture ideas (wish list)\n========================\n\nThis section records a list of ideas so that they do not get forgotten. They\nvary enormously in their usefulness and potential for implementation. Some are\nvery sensible; some are rather wacky. Some have been on this list for many\nyears.\n\n. Optimization\n\n  There are always ideas for new optimizations so as to speed up pattern\n  matching. Most of them try to save work by recognizing a non-match without\n  having to scan all the possibilities. These are some that I've recorded:\n\n  * /((A{0,5}){0,5}){0,5}(something complex)/ on a non-matching string is very\n    slow, though Perl is fast. Can we speed up somehow? Convert to {0,125}?\n    OTOH, this is pathological - the user could easily fix it.\n\n  * Turn ={4} into ==== ? (for speed). I once did an experiment, and it seems\n    to have little effect, and maybe makes things worse.\n\n  * \"Ends with literal string\" - note that a single character doesn't gain much\n    over the existing \"required code unit\" feature that just remembers one code\n    unit.\n\n  * Remember an initial string rather than just 1 code unit.\n\n  * A required code unit from alternatives - not just the last unit, but an\n    earlier one if common to all alternatives.\n\n  * Friedl contains other ideas.\n\n  * The code does not set initial code unit flags for Unicode property types\n    such as \\p; I don't know how much benefit there would be for, for example,\n    setting the bits for 0-9 and all values >= xC0 (in 8-bit mode) when a\n    pattern starts with \\p{N}.\n\n. Perl and PCRE2 sometimes differ in the settings of capturing subpatterns\n  inside repeats. One example of the difference is the matching of\n  /(main(O)?)+/ against mainOmain, where PCRE2 leaves $2 set. In Perl, it's\n  unset. Changing this in PCRE2 will be very hard because I think it needs much\n  more state to be remembered.\n\n. A feature to suspend a match via a callout was once requested.\n\n. An option to convert results into character offsets and character lengths.\n\n. A (non-Unix) user wanted pcregrep options to (a) list a file name just once,\n  preceded by a blank line, instead of adding it to every matched line, and (b)\n  support --outputfile=name.\n\n. Define a union for the results from pcre2_pattern_info().\n\n. Provide a \"random access to the subject\" facility so that the way in which it\n  is stored is independent of PCRE2. For efficiency, it probably isn't possible\n  to switch this dynamically. It would have to be specified when PCRE2 was\n  compiled. PCRE2 would then call a function every time it wanted a character.\n\n. pcre2grep: add -rs for a sorted recurse. Having to store file names and sort\n  them will of course slow it down.\n\n. Someone suggested --disable-callout to save code space when callouts are\n  never wanted. This seems rather marginal.\n\n. A user suggested a parameter to limit the length of string matched, for\n  example if the parameter is N, the current match should fail if the matched\n  substring exceeds N. This could apply to both match functions. The value\n  could be a new field in the match context. Compare the offset_limit feature,\n  which limits where a match must start.\n\n. Write a function that generates random matching strings for a compiled\n  pattern.\n\n. Pcre2grep: an option to specify the output line separator, either as a string\n  or select from a fixed list. This is not straightforward, because at the\n  moment it outputs whatever is in the input file.\n\n. Improve the code for duplicate checking in pcre2_dfa_match(). An incomplete,\n  non-thread-safe patch showed that this can help performance for patterns\n  where there are many alternatives. However, a simple thread-safe\n  implementation that I tried made things worse in many simple cases, so this\n  is not an obviously good thing.\n\n. PCRE2 cannot at present distinguish between subpatterns with different names,\n  but the same number (created by the use of ?|). In order to do so, a way of\n  remembering *which* subpattern numbered n matched is needed. (*MARK) can\n  perhaps be used as a way round this problem. However, note that Perl does not\n  distinguish: like PCRE2, a name is just an alias for a number in Perl.\n\n. Implement something like (?(R2+)... to check outer recursions.\n\n. If Perl ever supports the POSIX notation [[.something.]] PCRE2 should try\n  to follow.\n\n. A user wanted a way of ignoring all Unicode \"mark\" characters so that, for\n  example \"a\" followed by an accent would, together, match \"a\". This can only\n  be done clumsily at present by using a lookahead such as /(?=a)\\X/, which\n  works for \"combining\" characters.\n\n. Perl supports [\\N{x}-\\N{y}] as a Unicode range, even in EBCDIC. PCRE2\n  supports \\N{U+dd..} everywhere, but not in EBCDIC.\n\n. Unicode stuff from Perl:\n\n    \\b{gcb} or \\b{g}    grapheme cluster boundary\n    \\b{sb}              sentence boundary\n    \\b{wb}              word boundary\n\n  See Unicode TR 29. The last two are very much aimed at natural language.\n\n. Allow a callout to specify a number of characters to skip. This can be done\n  compatibly via an extra callout field.\n\n. Allow callouts to return *PRUNE, *COMMIT, *THEN, *SKIP, with and without\n  continuing (that is, with and without an implied *FAIL). A new option,\n  PCRE2_CALLOUT_EXTENDED say, would be needed. This is unlikely ever to be\n  implemented by JIT, so this could be an option for pcre2_match().\n\n. A limit on substitutions: a user suggested somehow finding a way of making\n  match_limit apply to the whole operation instead of each match separately.\n\n. Some #defines could be replaced with enums to improve robustness.\n\n. There was a request for an option for pcre2_match() to return the longest\n  match. This would mean searching for all possible matches, of course.\n\n. A neater way of handling recursion file names in pcre2grep, e.g. a single\n  buffer that can grow. See also GitHub issue #2 (recursion looping via\n  symlinks).\n\n. A user suggested that before/after parameters in pcre2grep could have\n  negative values, to list lines near to the matched line, but not necessarily\n  the line itself. For example, --before-context=-1 would list the line *after*\n  each matched line, without showing the matched line. The problem here is what\n  to do with matches that are close together. Maybe a simpler way would be a\n  flag to disable showing matched lines, only valid with either -A or -B?\n\n. There was a suggestion for a pcre2grep colour default, or possibly a more\n  general PCRE2GREP_OPT, but only for some options - not file names or patterns.\n\n. Breaking loops that match an empty string: perhaps find a way of continuing\n  if *something* has changed, but this might mean remembering additional data.\n  \"Something\" could be a capture value, but then a list of previous values\n  would be needed to avoid a cycle of changes.\n\n. If a function could be written to find 3-character (or other length) fixed\n  strings, at least one of which must be present for a match, efficient\n  pre-searching of large datasets could be implemented.\n\n. If pcre2grep had --first-line (match only in the first line) it could be\n  efficiently used to find files \"starting with xxx\". What about --last-line?\n  There was also the suggestion of an option for pcre2grep to scan only the\n  start of a file. I am not keen - this is the job of \"head\".\n\n. A user requested a means of determining whether a failed match was failed by\n  the start-of-match optimizations, or by running the match engine. Easy enough\n  to define a bit in the match data, but all three matchers would need work.\n\n. Would inlining \"simple\" recursions provide a useful performance boost for the\n  interpreters? JIT already does some of this, but it may not be worth it for\n  the interpreters.\n\n. Redesign handling of class/nclass/xclass because the compile code logic is\n  currently very contorted and obscure. Also there was a request for a way of\n  re-defining \\w (and therefore \\W, \\b, and \\B). An in-pattern sequence such as\n  (?w=[...]) was suggested. Easiest way would be simply to inline the class,\n  with lookarounds for \\b and \\B. Ideally the setting should last till the end\n  of the group, which means remembering all previous settings; maybe a fixed\n  amount of stack would do - how deep would anyone want to nest these things?\n\n. A user suggested something like --with-build-info to set a build information\n  string that could be retrieved by pcre2_config(). However, there's no\n  facility for a length limit in pcre2_config(), and what would be the\n  encoding?\n\n. Quantified groups with a fixed count currently operate by replicating the\n  group in the compiled bytecode. This may not really matter in these days of\n  gigabyte memory, but perhaps another implementation might be considered.\n  Needs coordination between the interpreters and JIT.\n\n. The POSIX interface is no longer POSIX compatible, because regoff_t is still\n  defined as an int.\n\n. The POSIX interface is not thread safe because it modifies a pcre2_match\n  inside its regex_t while doing matching. A thread safe version that uses\n  a thread local object has been proposed but it will require that the code\n  requires at least C11 compatibility.\n\n. See also any suggestions in the GitHub issues.\n\nPhilip Hazel\nEmail local part: Philip.Hazel\nEmail domain: gmail.com\nLast updated: 22 August 2024\n"
  },
  {
    "path": "maint/RunCoverage",
    "content": "#! /bin/sh\n\n# Script to run tests with coverage and filter the results.\n#\n# We assume that the source has been configured and built with LLVM's source-based\n# coverage instrumentation.\n#\n# Must be run in the build directory.\n\nset -e\n\nclang_report=0\nnomalloc=0\n\nwhile [ $# -gt 0 ] ; do\n  case $1 in\n   nomalloc|-nomalloc) nomalloc=1;;\n   clang|-clang|clang-report|-clang-report) clang_report=1;;\n   *) echo \"Unknown option or test selector '$1'\"; exit 1;;\n  esac\n  shift\ndone\n\nLLVM_VER=`clang --version | head -n1 | grep -Eo '[0-9]+\\.[0-9]+\\.[0-9]+' | cut -d. -f1`\necho \"(Using LLVM version $LLVM_VER)\"\necho \"\"\n\nrm -f coverage-*.profraw coverage.profdata coverage-lcov.info coverage-lcov.filtered.info\n[ -d testdata ] || rm -f ../coverage-*.profraw\nrm -rf coverage-html\n\necho \"== Running all tests with CTest ==\"\nLLVM_PROFILE_FILE=\"coverage-%m.profraw\" ctest -j1 --output-on-failure\necho \"\"\n\nif [ \"$nomalloc\" -eq 0 ]; then\n  echo \"== Re-running pcre2test with -malloc ==\"\n  LLVM_PROFILE_FILE=\"coverage-%m.profraw\" srcdir=.. pcre2test=./pcre2test ../RunTest -malloc\n  echo \"\"\nfi\n\n# Merge the profiles gathered\necho \"== Merging coverage data ==\"\nPROF_FILES=\"coverage-*.profraw\"\n[ -d testdata ] || PROF_FILES=\"$PROF_FILES ../coverage-*.profraw\"\nllvm-profdata-$LLVM_VER merge -sparse $PROF_FILES -o coverage.profdata\necho \"\"\n\nif [ \"$clang_report\" -eq 1 ]; then\n  echo \"== Generating Clang coverage report ==\"\n  llvm-cov-$LLVM_VER show \\\n    -format=html \\\n    -show-line-counts-or-regions -show-branches=percent \\\n    -instr-profile=coverage.profdata \\\n    ./pcre2test -object ./pcre2grep -object ./pcre2posix_test -object ./pcre2_jit_test \\\n    -sources ../src/ ./ \\\n    -output-dir=coverage-html\n  echo \"\"\n\nelse\n  # Output LCOV-compatible output, for downstream tools\n  echo \"== Generating LCOV report ==\"\n  llvm-cov-$LLVM_VER export \\\n    -format=lcov \\\n    -instr-profile=coverage.profdata \\\n    ./pcre2test -object ./pcre2grep -object ./pcre2posix_test -object ./pcre2_jit_test \\\n    -sources ../src/ ./ \\\n    > ./coverage-lcov.info\n  echo \"\"\n\n  # Filter out lines marked with \"LCOV_EXCL_LINE\" or \"LCOV_EXCL_START\"/\"LCOV_EXCL_STOP\"\n  echo \"== Filtering LCOV report ==\"\n  python3 ../maint/FilterCoverage.py ./coverage-lcov.info > ./coverage-lcov.filtered.info\n  mv ./coverage-lcov.filtered.info ./coverage-lcov.info\n  echo \"\"\n\n  # Use genhtml to generate an HTML report from the LCOV data\n  echo \"== Generating HTML report ==\"\n  mkdir -p coverage-html\n  genhtml \\\n    --highlight --branch-coverage --legend --title \"PCRE2 code coverage report\" --num-spaces 2 \\\n    -o coverage-html ./coverage-lcov.info\n  echo \"\"\n\nfi\n"
  },
  {
    "path": "maint/RunManifestTest",
    "content": "#! /bin/sh\n\n# Script to test a directory listing. We use this to verify that the list of\n# files installed by \"make install\" or \"cmake --install\" matches what we expect.\n\nset -e\n\n# Ensure stable ordering of `sort` output\nLANG=C\nLC_ALL=C\nexport LANG LC_ALL\n\nif [ \"$1\" = \"\" -o \"$2\" = \"\" ] ; then\n  echo \"Usage: $0 <dir> <manifest name> [<build type>]\" >&2\n  exit 1\nfi\n\ninput_dir=\"$1\"\nexpected_manifest=\"$2\"\nbuild_type=\"${3:-release}\"\n\nactual_file=`basename $expected_manifest`.actual\nexpected_file=`basename $expected_manifest`.expected\n\nsed=sed\n# Helper for Solaris\nif [ -f /usr/bin/gsed ] ; then\n  sed=/usr/bin/gsed\nfi\n\nfind \"$input_dir\" -print | \\\n  sort | \\\n  xargs -n1 -- ls -l -d -n | \\\n  $sed -E -e 's/ {2,}/ /g' | \\\n  cut -d' ' -f '1,9-' \\\n  > \"$actual_file\"\n\n# The CMake install is a bit annoying now. Its installed files are actually\n# dependent on the build type. So, if the build type is not \"release\", we need\n# to modify the expected manifest to match the actual one. \ncat \"$expected_manifest\" | \\\n  $sed -E -e \"s/pcre2-targets-release.cmake/pcre2-targets-$build_type.cmake/\" \\\n  > \"$expected_file\"\n\nif ! diff -u \"$expected_file\" \"$actual_file\"; then\n  echo \"Installed files differ from expected\"\n\n  echo \"===Actual===\"\n  cat \"$actual_file\"\n  echo \"===End===\"\n\n  exit 1\nfi\n\necho \"Installed files match expected\"\nrm -f \"$actual_file\" \"$expected_file\"\n"
  },
  {
    "path": "maint/RunManifestTest.ps1",
    "content": "# Script to test a directory listing. We use this to verify that the list of\n# files installed by \"make install\" or \"cmake --install\" matches what we expect.\n\nparam (\n  [Parameter(Mandatory=$true)]\n  [string]$inputDir,\n\n  [Parameter(Mandatory=$true)]\n  [string]$manifestName\n)\n\nif ((-not $inputDir) -or (-not $manifestName)) {\n  throw \"Usage: .\\RunManifestTest.ps1 <dir> <manifest name>\"\n}\n\n$base = [System.IO.Path]::GetFileName($manifestName)\n\n$installedFiles = Get-ChildItem -Recurse -Force -Path $inputDir |\n  Sort-Object {[System.BitConverter]::ToString([system.Text.Encoding]::UTF8.GetBytes($_.FullName))} |\n  ForEach-Object { $_.Mode.Substring(0,5) + \" \" + ($_.FullName | Resolve-Path -Relative) }\n\n$null = New-Item -Force $base -Value (($installedFiles | Out-String) -replace \"`r`n\", \"`n\")\n\n$expectedFiles = Get-Content -Path $manifestName -Raw\n$actualFiles = Get-Content -Path $base -Raw\n\nif ($expectedFiles -ne $actualFiles) {\n  Write-Host \"===Actual===\"\n  Write-Host $actualFiles\n  Write-Host \"===End===\"\n\n  throw \"Installed files differ from expected\"\n}\n\nWrite-Host \"Installed files match expected\"\nRemove-Item -Path $base -Force\n"
  },
  {
    "path": "maint/RunPerlTest",
    "content": "#! /bin/sh\n\n# Script to run the Perl-compatible PCRE2 tests through Perl. For testing\n# with different versions of Perl, if the first argument is \"-perl\" then the\n# second is taken as the Perl command to use, and both are then removed.\n#\n# The argument can be the number of the specific Perl compatible test to run\n# (ex: \"1\", \"4\", \"26\" or \"27\"), otherwise it runs all tests and returns at\n# exit, the test number with an incorrect output or the test number plus 32\n# if it failed to run completely. It returns with 0 on success.\n\n# This script should be run with the main PCRE2 directory current.\n\nif [ \"$1\" = \"-perl\" ]; then\n  PERL=\"$2\"\n  ARGS=\"$1 $PERL\"\n  shift 2\nelse\n  PERL=perl\n  ARGS=\"\"\nfi\n\nRC=0\n\nif [ -z \"$1\" ] || [ \"$1\" = \"1\" ]; then\necho \"-----------------------------------------------------------------\"\necho \"Perl test: main functionality (PCRE2 test 1)\"\nif ./perltest.sh $ARGS testdata/testinput1 testtry; then\n  tail -n +2 testtry > testtry2\n  diff -u testdata/testoutput1 testtry2 || RC=1\nelse\n  RC=33\nfi\n/bin/rm -f testtry testtry2\necho \"\"\nfi\n\nif [ -z \"$1\" ] || [ \"$1\" = \"4\" ]; then\necho \"-----------------------------------------------------------------\"\necho \"Perl test: UTF-8 and Unicode property features (PCRE2 test 4)\"\nif ./perltest.sh $ARGS -utf8 testdata/testinput4 testtry; then\n  tail -n +2 testtry > testtry2\n  diff -u testdata/testoutput4 testtry2 || RC=4\nelse\n  RC=36\nfi\n/bin/rm -f testtry testtry2\necho \"\"\nfi\n\nP=$($PERL -MUnicode::UCD -e 'print Unicode::UCD::UnicodeVersion, \"\\n\"')\n\nif [ -z \"$1\" ] || [ \"$1\" = \"26\" ]; then\necho \"-----------------------------------------------------------------\"\necho \"Perl test: Unicode property tests (PCRE2 test 26)\"\nU=$(head -5 testdata/testinput26 | $PERL -ne 'print \"$1\\n\" if /tests for version ([\\d.]+)$/')\nif [ \"$U\" != \"$P\" ]; then\n  echo \"SKIPPED: Perl uses Unicode $P but version $U was expected\"\nelse\n  if ./perltest.sh $ARGS testdata/testinput26 testtry; then\n    tail -n +2 testtry > testtry2\n    diff -u testdata/testoutput26 testtry2 || RC=26\n  else\n    RC=58\n  fi\n  /bin/rm -f testtry testtry2\n  echo \"\"\n  fi\nfi\n\nif [ -z \"$1\" ] || [ \"$1\" = \"27\" ]; then\necho \"-----------------------------------------------------------------\"\necho \"Perl test: Unicode property tests (PCRE2 test 27)\"\nU=$(head -5 testdata/testinput27 | $PERL -ne 'print \"$1\\n\" if /tests for version ([\\d.]+)$/')\nif [ \"$U\" != \"$P\" ]; then\n  echo \"SKIPPED: Perl uses Unicode $P but version $U was expected\"\nelse\n  if ./perltest.sh $ARGS testdata/testinput27 testtry; then\n    tail -n +2 testtry > testtry2\n    diff -u testdata/testoutput27 testtry2 || RC=27\n  else\n    RC=59\n  fi\n  /bin/rm -f testtry testtry2\n  echo \"\"\n  fi\nfi\n\nexit $RC\n# End\n"
  },
  {
    "path": "maint/RunSymbolTest",
    "content": "#! /bin/sh\n\n# Script to test that all the symbols of a shared object are as expected.\n\nset -e\n\n# Ensure stable ordering of `sort` output\nLANG=C\nLC_ALL=C\nexport LANG LC_ALL\n\nif [ \"$1\" = \"\" -o \"$2\" = \"\" ] ; then\n  echo \"Usage: $0 <so_dir> <manifest_dir>\" >&2\n  exit 1\nfi\n\ninput_dir=\"$1\"\nmanifest_dir=\"$2\"\n\nsed=sed\ngrep=grep\n# Helpers for Solaris\nif [ -f /usr/bin/gsed ] ; then\n  sed=/usr/bin/gsed\nfi\nif [ -f /usr/bin/ggrep ] ; then\n  grep=/usr/bin/ggrep\nfi\n\nnm=\"nm -B -D\"\nif [ \"`uname -s`\" = \"Linux\" ]; then\n  nm=\"$nm --with-symbol-versions\"\nelif [ \"`uname -s`\" = \"FreeBSD\" ]; then\n  # Use llvm-nm to get symbol version information\n  nm=\"llvm-nm -B -D\"\nelif [ \"`uname -s`\" = \"SunOS\" ]; then\n  # Highly annoyingly, Solaris' nm doesn't show symbol versions, so here is a\n  # laborious way to reformat the output of elfdump to be as we require.\n  #nm=\"nm -p -h -D -g\"\n  nm=emulated_nm\n  emulated_nm()\n    {\n    # Grab the versions from the version table, and convert into a sed script.\n    VERSUB=`elfdump -v \"$1\" | \\\n      $grep -E '^\\s*\\[[0-9]+\\]' | \\\n      $sed -E -e 's/\\s+/,/g' | \\\n      tr -d '\\[\\]' | \\\n      cut -d',' -f 2,3 | \\\n      $sed -E -e 's/([0-9]+),(.*)/s\\/@@\\1\\/@@\\2\\/;/'`\n\n    # Then grab the symbols and heavily reformat the output to match nm.\n    elfdump -T SHT_DYNSYM \"$1\" | \\\n      $grep -E '^\\s*\\[[0-9]+\\]' | \\\n      $sed -E -e 's/\\s+/ /g' | \\\n      cut -d' ' -f 3,8,9,10 | \\\n      $sed -E -e 's/^0x//;s/([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)/\\1 \\3 \\4@@\\2/;' | \\\n      $sed -E -e 's/^([^ ]*) .text /\\1 T /' | \\\n      $sed -E -e 's/^([^ ]*) ([UA])(NDEF|BS) /\\1 \\2 /' | \\\n      $sed -E -e \"$VERSUB\"\n    }\nelif [ \"`uname -s`\" = \"Darwin\" ]; then\n  nm=\"nm -B -g\"\nfi\n\nsupports_versions=1\nif [ \"`uname -s`\" = \"Darwin\" ]; then\n  supports_versions=0\nfi\n\nso_ext=so\nso_mangling() { cat; }\nif [ \"`uname -s`\" = \"Darwin\" ]; then\n  so_ext=dylib\n  so_mangling()\n    {\n    $sed -E -e 's/_([_0-9a-zA-Z]+)$/\\1/g'\n    }\nfi\n\nfor so_name in \"libpcre2-8\" \"libpcre2-16\" \"libpcre2-32\" \"libpcre2-posix\"; do\n  expected_file=\"$manifest_dir/manifest-$so_name.so\"\n  so_file=\"$input_dir/$so_name.$so_ext\"\n  base=`basename $expected_file`\n\n  $nm \"$so_file\" | \\\n    $sed -E -e 's/^[0-9a-fA-F]* *//g' | \\\n    $grep -E -v '^[Uw] ' | \\\n    $grep -E -v '^A PCRE2_' | \\\n    $grep -E -v ' (_init|_fini)($|@)' | \\\n    $grep -E -v ' (__bss_start|_end|_DYNAMIC|_GLOBAL_OFFSET_TABLE_|_PROCEDURE_LINKAGE_TABLE_|_edata|_etext)($|@)' | \\\n    so_mangling | \\\n    sort \\\n    > \"$base.actual\"\n\n  if [ $supports_versions -eq 0 ]; then\n    $sed -E -e 's/@.*$//' \"$expected_file\" \\\n      > \"$base.expected\"\n  else\n    cp \"$expected_file\" \"$base.expected\"\n  fi\n\n  if ! diff -u \"$base.expected\" \"$base.actual\"; then\n    echo \"Shared object contents for $so_file differ from expected\"\n\n    echo \"===Actual===\"\n    cat \"$base.actual\"\n    echo \"===End===\"\n\n    exit 1\n  fi\n\n  echo \"Shared object contents for $so_file match expected\"\n  rm -f \"$base.expected\" \"$base.actual\"\n\ndone\n"
  },
  {
    "path": "maint/RunSymbolTest.ps1",
    "content": "# Script to test that all the symbols of a DLL are as expected.\n\nparam (\n    [Parameter(Mandatory=$true)]\n    [string]$inputDir,\n\n    [Parameter(Mandatory=$true)]\n    [string]$manifestDir\n)\n\nif ((-not $inputDir) -or (-not $manifestDir)) {\n  throw \"Usage: .\\RunSymbolTest.ps1 <dll_dir> <manifest_dir>\"\n}\n\n$dllNames = @(\"pcre2-8\", \"pcre2-16\", \"pcre2-32\", \"pcre2-posix\")\n\nforeach ($dllName in $dllNames) {\n    $expectedFile = Join-Path $manifestDir (\"manifest-lib$dllName.so\")\n    $dllFile = Join-Path $inputDir (\"$dllName.dll\")\n    $base = [System.IO.Path]::GetFileName($expectedFile)\n\n    # Get path to dumpbin using vswhere\n    $vswhere = \"C:\\Program Files (x86)\\Microsoft Visual Studio\\Installer\\vswhere.exe\"\n    $dumpbin = & $vswhere -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -find VC\\Tools\\MSVC\\*\\bin\\Hostx64\\x64\\dumpbin.exe | Select-Object -First 1\n\n    $actualSymbols = & $dumpbin /exports $dllFile |\n        ForEach-Object {\n            if ($_ -match '^\\s*\\d+\\s+[0-9A-Fa-f]+\\s+[0-9A-Fa-f]+\\s+(\\S+)') {\n                \"T $($matches[1])\"\n            }\n        } |\n        Where-Object {\n            $_ -match '^T '\n        } |\n        Sort-Object\n\n    $actualOutput = ($actualSymbols -join \"`n\") + \"`n\"\n    $null = New-Item -Force $base -Value $actualOutput\n\n    $expectedSymbols = (Get-Content -Path $expectedFile -Raw).TrimEnd(\"`n\") |\n        ForEach-Object { $_ -replace '@@.*', '' }\n    $expectedOutput = ($expectedSymbols -join \"`n\") + \"`n\"\n\n    if ($expectedOutput -ne $actualOutput) {\n        Write-Host \"Shared object contents for $dllFile differ from expected\"\n        Write-Host \"===Actual===\"\n        Write-Host $actualOutput\n        Write-Host \"===End===\"\n        throw \"Symbol test failed\"\n    } else {\n        Write-Host \"Shared object contents for $dllFile match expected\"\n    }\n\n    Remove-Item -Path $base -Force\n}\n"
  },
  {
    "path": "maint/Unicode.tables/BidiMirroring.txt",
    "content": "# BidiMirroring-17.0.0.txt\n# Date: 2025-08-01\n# © 2025 Unicode®, Inc.\n# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.\n# For terms of use and license, see https://www.unicode.org/terms_of_use.html\n#\n# Unicode Character Database\n# For documentation, see https://www.unicode.org/reports/tr44/\n#\n# Bidi_Mirroring_Glyph Property\n#\n# This file is an informative contributory data file in the\n# Unicode Character Database.\n#\n# This data file lists characters that have the Bidi_Mirrored=Yes property\n# value, for which there is another Unicode character that typically has a glyph\n# that is the mirror image of the original character's glyph.\n#\n# The repertoire covered by the file is Unicode 17.0.0.\n#\n# The file contains a list of lines with mappings from one code point\n# to another one for character-based mirroring.\n# Note that for \"real\" mirroring, a rendering engine needs to select\n# appropriate alternative glyphs, and that many Unicode characters do not\n# have a mirror-image Unicode character.\n#\n# Each mapping line contains two fields, separated by a semicolon (';').\n# Each of the two fields contains a code point represented as a\n# variable-length hexadecimal value with 4 to 6 digits.\n# A comment indicates where the characters are \"BEST FIT\" mirroring.\n#\n# Code points for which Bidi_Mirrored=Yes, but for which no appropriate\n# characters exist with mirrored glyphs, are\n# listed as comments at the end of the file.\n#\n# Formally, the default value of the Bidi_Mirroring_Glyph property\n# for each code point is <none>, unless a mapping to\n# some other character is specified in this data file. When a code\n# point has the default value for the Bidi_Mirroring_Glyph property,\n# that means that no other character exists whose glyph is suitable\n# for character-based mirroring.\n#\n# For information on bidi mirroring, see UAX #9: Unicode Bidirectional Algorithm,\n# at https://www.unicode.org/reports/tr9/\n#\n# This file was originally created by Markus Scherer.\n# Extended for Unicode 3.2, 4.0, 4.1, 5.0, 5.1, 5.2, and 6.0 by Ken Whistler,\n# and for subsequent versions by Ken Whistler, Laurentiu Iancu, Roozbeh Pournader,\n# and Robin Leroy.\n#\n# Historical and Compatibility Information:\n#\n# The OpenType Mirroring Pairs List (OMPL) is frozen to match the\n# Unicode 5.1 version of the Bidi_Mirroring_Glyph property (2008).\n# See https://www.microsoft.com/typography/otspec/ompl.txt\n#\n# The Unicode 6.1 version of the Bidi_Mirroring_Glyph property (2011)\n# added one mirroring pair: 27CB <--> 27CD.\n#\n# The Unicode 11.0 version of the Bidi_Mirroring_Glyph property (2018)\n# underwent a substantial revision, to formally recognize all of the\n# exact mirroring pairs and \"BEST FIT\" mirroring pairs that had been\n# added after the freezing of the OMPL list. As a result, starting\n# with Unicode 11.0, the bmg mapping values more accurately reflect\n# the current status of glyphs for Bidi_Mirrored characters in\n# the Unicode Standard, but this listing now extends significantly\n# beyond the frozen OMPL list. Implementers should be aware of this\n# intentional distinction.\n#\n# ############################################################\n#\n# Property:\tBidi_Mirroring_Glyph\n#\n# @missing: 0000..10FFFF; <none>\n\n0028; 0029 # LEFT PARENTHESIS\n0029; 0028 # RIGHT PARENTHESIS\n003C; 003E # LESS-THAN SIGN\n003E; 003C # GREATER-THAN SIGN\n005B; 005D # LEFT SQUARE BRACKET\n005D; 005B # RIGHT SQUARE BRACKET\n007B; 007D # LEFT CURLY BRACKET\n007D; 007B # RIGHT CURLY BRACKET\n00AB; 00BB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\n00BB; 00AB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\n0F3A; 0F3B # TIBETAN MARK GUG RTAGS GYON\n0F3B; 0F3A # TIBETAN MARK GUG RTAGS GYAS\n0F3C; 0F3D # TIBETAN MARK ANG KHANG GYON\n0F3D; 0F3C # TIBETAN MARK ANG KHANG GYAS\n169B; 169C # OGHAM FEATHER MARK\n169C; 169B # OGHAM REVERSED FEATHER MARK\n2039; 203A # SINGLE LEFT-POINTING ANGLE QUOTATION MARK\n203A; 2039 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\n2045; 2046 # LEFT SQUARE BRACKET WITH QUILL\n2046; 2045 # RIGHT SQUARE BRACKET WITH QUILL\n207D; 207E # SUPERSCRIPT LEFT PARENTHESIS\n207E; 207D # SUPERSCRIPT RIGHT PARENTHESIS\n208D; 208E # SUBSCRIPT LEFT PARENTHESIS\n208E; 208D # SUBSCRIPT RIGHT PARENTHESIS\n2208; 220B # ELEMENT OF\n2209; 220C # [BEST FIT] NOT AN ELEMENT OF\n220A; 220D # SMALL ELEMENT OF\n220B; 2208 # CONTAINS AS MEMBER\n220C; 2209 # [BEST FIT] DOES NOT CONTAIN AS MEMBER\n220D; 220A # SMALL CONTAINS AS MEMBER\n2215; 29F5 # DIVISION SLASH\n221F; 2BFE # RIGHT ANGLE\n2220; 29A3 # ANGLE\n2221; 299B # MEASURED ANGLE\n2222; 29A0 # SPHERICAL ANGLE\n2224; 2AEE # DOES NOT DIVIDE\n223C; 223D # TILDE OPERATOR\n223D; 223C # REVERSED TILDE\n2243; 22CD # ASYMPTOTICALLY EQUAL TO\n2245; 224C # APPROXIMATELY EQUAL TO\n224C; 2245 # ALL EQUAL TO\n2252; 2253 # APPROXIMATELY EQUAL TO OR THE IMAGE OF\n2253; 2252 # IMAGE OF OR APPROXIMATELY EQUAL TO\n2254; 2255 # COLON EQUALS\n2255; 2254 # EQUALS COLON\n2264; 2265 # LESS-THAN OR EQUAL TO\n2265; 2264 # GREATER-THAN OR EQUAL TO\n2266; 2267 # LESS-THAN OVER EQUAL TO\n2267; 2266 # GREATER-THAN OVER EQUAL TO\n2268; 2269 # [BEST FIT] LESS-THAN BUT NOT EQUAL TO\n2269; 2268 # [BEST FIT] GREATER-THAN BUT NOT EQUAL TO\n226A; 226B # MUCH LESS-THAN\n226B; 226A # MUCH GREATER-THAN\n226E; 226F # [BEST FIT] NOT LESS-THAN\n226F; 226E # [BEST FIT] NOT GREATER-THAN\n2270; 2271 # [BEST FIT] NEITHER LESS-THAN NOR EQUAL TO\n2271; 2270 # [BEST FIT] NEITHER GREATER-THAN NOR EQUAL TO\n2272; 2273 # [BEST FIT] LESS-THAN OR EQUIVALENT TO\n2273; 2272 # [BEST FIT] GREATER-THAN OR EQUIVALENT TO\n2274; 2275 # [BEST FIT] NEITHER LESS-THAN NOR EQUIVALENT TO\n2275; 2274 # [BEST FIT] NEITHER GREATER-THAN NOR EQUIVALENT TO\n2276; 2277 # LESS-THAN OR GREATER-THAN\n2277; 2276 # GREATER-THAN OR LESS-THAN\n2278; 2279 # [BEST FIT] NEITHER LESS-THAN NOR GREATER-THAN\n2279; 2278 # [BEST FIT] NEITHER GREATER-THAN NOR LESS-THAN\n227A; 227B # PRECEDES\n227B; 227A # SUCCEEDS\n227C; 227D # PRECEDES OR EQUAL TO\n227D; 227C # SUCCEEDS OR EQUAL TO\n227E; 227F # [BEST FIT] PRECEDES OR EQUIVALENT TO\n227F; 227E # [BEST FIT] SUCCEEDS OR EQUIVALENT TO\n2280; 2281 # [BEST FIT] DOES NOT PRECEDE\n2281; 2280 # [BEST FIT] DOES NOT SUCCEED\n2282; 2283 # SUBSET OF\n2283; 2282 # SUPERSET OF\n2284; 2285 # [BEST FIT] NOT A SUBSET OF\n2285; 2284 # [BEST FIT] NOT A SUPERSET OF\n2286; 2287 # SUBSET OF OR EQUAL TO\n2287; 2286 # SUPERSET OF OR EQUAL TO\n2288; 2289 # [BEST FIT] NEITHER A SUBSET OF NOR EQUAL TO\n2289; 2288 # [BEST FIT] NEITHER A SUPERSET OF NOR EQUAL TO\n228A; 228B # [BEST FIT] SUBSET OF WITH NOT EQUAL TO\n228B; 228A # [BEST FIT] SUPERSET OF WITH NOT EQUAL TO\n228F; 2290 # SQUARE IMAGE OF\n2290; 228F # SQUARE ORIGINAL OF\n2291; 2292 # SQUARE IMAGE OF OR EQUAL TO\n2292; 2291 # SQUARE ORIGINAL OF OR EQUAL TO\n2298; 29B8 # CIRCLED DIVISION SLASH\n22A2; 22A3 # RIGHT TACK\n22A3; 22A2 # LEFT TACK\n22A6; 2ADE # ASSERTION\n22A8; 2AE4 # TRUE\n22A9; 2AE3 # FORCES\n22AB; 2AE5 # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE\n22B0; 22B1 # PRECEDES UNDER RELATION\n22B1; 22B0 # SUCCEEDS UNDER RELATION\n22B2; 22B3 # NORMAL SUBGROUP OF\n22B3; 22B2 # CONTAINS AS NORMAL SUBGROUP\n22B4; 22B5 # NORMAL SUBGROUP OF OR EQUAL TO\n22B5; 22B4 # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO\n22B6; 22B7 # ORIGINAL OF\n22B7; 22B6 # IMAGE OF\n22B8; 27DC # MULTIMAP\n22C9; 22CA # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT\n22CA; 22C9 # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT\n22CB; 22CC # LEFT SEMIDIRECT PRODUCT\n22CC; 22CB # RIGHT SEMIDIRECT PRODUCT\n22CD; 2243 # REVERSED TILDE EQUALS\n22D0; 22D1 # DOUBLE SUBSET\n22D1; 22D0 # DOUBLE SUPERSET\n22D6; 22D7 # LESS-THAN WITH DOT\n22D7; 22D6 # GREATER-THAN WITH DOT\n22D8; 22D9 # VERY MUCH LESS-THAN\n22D9; 22D8 # VERY MUCH GREATER-THAN\n22DA; 22DB # LESS-THAN EQUAL TO OR GREATER-THAN\n22DB; 22DA # GREATER-THAN EQUAL TO OR LESS-THAN\n22DC; 22DD # EQUAL TO OR LESS-THAN\n22DD; 22DC # EQUAL TO OR GREATER-THAN\n22DE; 22DF # EQUAL TO OR PRECEDES\n22DF; 22DE # EQUAL TO OR SUCCEEDS\n22E0; 22E1 # [BEST FIT] DOES NOT PRECEDE OR EQUAL\n22E1; 22E0 # [BEST FIT] DOES NOT SUCCEED OR EQUAL\n22E2; 22E3 # [BEST FIT] NOT SQUARE IMAGE OF OR EQUAL TO\n22E3; 22E2 # [BEST FIT] NOT SQUARE ORIGINAL OF OR EQUAL TO\n22E4; 22E5 # [BEST FIT] SQUARE IMAGE OF OR NOT EQUAL TO\n22E5; 22E4 # [BEST FIT] SQUARE ORIGINAL OF OR NOT EQUAL TO\n22E6; 22E7 # [BEST FIT] LESS-THAN BUT NOT EQUIVALENT TO\n22E7; 22E6 # [BEST FIT] GREATER-THAN BUT NOT EQUIVALENT TO\n22E8; 22E9 # [BEST FIT] PRECEDES BUT NOT EQUIVALENT TO\n22E9; 22E8 # [BEST FIT] SUCCEEDS BUT NOT EQUIVALENT TO\n22EA; 22EB # [BEST FIT] NOT NORMAL SUBGROUP OF\n22EB; 22EA # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP\n22EC; 22ED # [BEST FIT] NOT NORMAL SUBGROUP OF OR EQUAL TO\n22ED; 22EC # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL\n22F0; 22F1 # UP RIGHT DIAGONAL ELLIPSIS\n22F1; 22F0 # DOWN RIGHT DIAGONAL ELLIPSIS\n22F2; 22FA # ELEMENT OF WITH LONG HORIZONTAL STROKE\n22F3; 22FB # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE\n22F4; 22FC # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE\n22F6; 22FD # ELEMENT OF WITH OVERBAR\n22F7; 22FE # SMALL ELEMENT OF WITH OVERBAR\n22FA; 22F2 # CONTAINS WITH LONG HORIZONTAL STROKE\n22FB; 22F3 # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE\n22FC; 22F4 # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE\n22FD; 22F6 # CONTAINS WITH OVERBAR\n22FE; 22F7 # SMALL CONTAINS WITH OVERBAR\n2308; 2309 # LEFT CEILING\n2309; 2308 # RIGHT CEILING\n230A; 230B # LEFT FLOOR\n230B; 230A # RIGHT FLOOR\n2329; 232A # LEFT-POINTING ANGLE BRACKET\n232A; 2329 # RIGHT-POINTING ANGLE BRACKET\n2768; 2769 # MEDIUM LEFT PARENTHESIS ORNAMENT\n2769; 2768 # MEDIUM RIGHT PARENTHESIS ORNAMENT\n276A; 276B # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT\n276B; 276A # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT\n276C; 276D # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT\n276D; 276C # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT\n276E; 276F # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT\n276F; 276E # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT\n2770; 2771 # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT\n2771; 2770 # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT\n2772; 2773 # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT\n2773; 2772 # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT\n2774; 2775 # MEDIUM LEFT CURLY BRACKET ORNAMENT\n2775; 2774 # MEDIUM RIGHT CURLY BRACKET ORNAMENT\n27C3; 27C4 # OPEN SUBSET\n27C4; 27C3 # OPEN SUPERSET\n27C5; 27C6 # LEFT S-SHAPED BAG DELIMITER\n27C6; 27C5 # RIGHT S-SHAPED BAG DELIMITER\n27C8; 27C9 # REVERSE SOLIDUS PRECEDING SUBSET\n27C9; 27C8 # SUPERSET PRECEDING SOLIDUS\n27CB; 27CD # MATHEMATICAL RISING DIAGONAL\n27CD; 27CB # MATHEMATICAL FALLING DIAGONAL\n27D5; 27D6 # LEFT OUTER JOIN\n27D6; 27D5 # RIGHT OUTER JOIN\n27DC; 22B8 # LEFT MULTIMAP\n27DD; 27DE # LONG RIGHT TACK\n27DE; 27DD # LONG LEFT TACK\n27E2; 27E3 # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK\n27E3; 27E2 # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK\n27E4; 27E5 # WHITE SQUARE WITH LEFTWARDS TICK\n27E5; 27E4 # WHITE SQUARE WITH RIGHTWARDS TICK\n27E6; 27E7 # MATHEMATICAL LEFT WHITE SQUARE BRACKET\n27E7; 27E6 # MATHEMATICAL RIGHT WHITE SQUARE BRACKET\n27E8; 27E9 # MATHEMATICAL LEFT ANGLE BRACKET\n27E9; 27E8 # MATHEMATICAL RIGHT ANGLE BRACKET\n27EA; 27EB # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET\n27EB; 27EA # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET\n27EC; 27ED # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET\n27ED; 27EC # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET\n27EE; 27EF # MATHEMATICAL LEFT FLATTENED PARENTHESIS\n27EF; 27EE # MATHEMATICAL RIGHT FLATTENED PARENTHESIS\n2983; 2984 # LEFT WHITE CURLY BRACKET\n2984; 2983 # RIGHT WHITE CURLY BRACKET\n2985; 2986 # LEFT WHITE PARENTHESIS\n2986; 2985 # RIGHT WHITE PARENTHESIS\n2987; 2988 # Z NOTATION LEFT IMAGE BRACKET\n2988; 2987 # Z NOTATION RIGHT IMAGE BRACKET\n2989; 298A # Z NOTATION LEFT BINDING BRACKET\n298A; 2989 # Z NOTATION RIGHT BINDING BRACKET\n298B; 298C # LEFT SQUARE BRACKET WITH UNDERBAR\n298C; 298B # RIGHT SQUARE BRACKET WITH UNDERBAR\n298D; 2990 # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER\n298E; 298F # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n298F; 298E # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n2990; 298D # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER\n2991; 2992 # LEFT ANGLE BRACKET WITH DOT\n2992; 2991 # RIGHT ANGLE BRACKET WITH DOT\n2993; 2994 # LEFT ARC LESS-THAN BRACKET\n2994; 2993 # RIGHT ARC GREATER-THAN BRACKET\n2995; 2996 # DOUBLE LEFT ARC GREATER-THAN BRACKET\n2996; 2995 # DOUBLE RIGHT ARC LESS-THAN BRACKET\n2997; 2998 # LEFT BLACK TORTOISE SHELL BRACKET\n2998; 2997 # RIGHT BLACK TORTOISE SHELL BRACKET\n299B; 2221 # MEASURED ANGLE OPENING LEFT\n29A0; 2222 # SPHERICAL ANGLE OPENING LEFT\n29A3; 2220 # REVERSED ANGLE\n29A4; 29A5 # ANGLE WITH UNDERBAR\n29A5; 29A4 # REVERSED ANGLE WITH UNDERBAR\n29A8; 29A9 # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT\n29A9; 29A8 # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT\n29AA; 29AB # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT\n29AB; 29AA # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT\n29AC; 29AD # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP\n29AD; 29AC # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP\n29AE; 29AF # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN\n29AF; 29AE # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN\n29B8; 2298 # CIRCLED REVERSE SOLIDUS\n29C0; 29C1 # CIRCLED LESS-THAN\n29C1; 29C0 # CIRCLED GREATER-THAN\n29C4; 29C5 # SQUARED RISING DIAGONAL SLASH\n29C5; 29C4 # SQUARED FALLING DIAGONAL SLASH\n29CF; 29D0 # LEFT TRIANGLE BESIDE VERTICAL BAR\n29D0; 29CF # VERTICAL BAR BESIDE RIGHT TRIANGLE\n29D1; 29D2 # BOWTIE WITH LEFT HALF BLACK\n29D2; 29D1 # BOWTIE WITH RIGHT HALF BLACK\n29D4; 29D5 # TIMES WITH LEFT HALF BLACK\n29D5; 29D4 # TIMES WITH RIGHT HALF BLACK\n29D8; 29D9 # LEFT WIGGLY FENCE\n29D9; 29D8 # RIGHT WIGGLY FENCE\n29DA; 29DB # LEFT DOUBLE WIGGLY FENCE\n29DB; 29DA # RIGHT DOUBLE WIGGLY FENCE\n29E8; 29E9 # DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK\n29E9; 29E8 # DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK\n29F5; 2215 # REVERSE SOLIDUS OPERATOR\n29F8; 29F9 # BIG SOLIDUS\n29F9; 29F8 # BIG REVERSE SOLIDUS\n29FC; 29FD # LEFT-POINTING CURVED ANGLE BRACKET\n29FD; 29FC # RIGHT-POINTING CURVED ANGLE BRACKET\n2A2B; 2A2C # MINUS SIGN WITH FALLING DOTS\n2A2C; 2A2B # MINUS SIGN WITH RISING DOTS\n2A2D; 2A2E # PLUS SIGN IN LEFT HALF CIRCLE\n2A2E; 2A2D # PLUS SIGN IN RIGHT HALF CIRCLE\n2A34; 2A35 # MULTIPLICATION SIGN IN LEFT HALF CIRCLE\n2A35; 2A34 # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE\n2A3C; 2A3D # INTERIOR PRODUCT\n2A3D; 2A3C # RIGHTHAND INTERIOR PRODUCT\n2A64; 2A65 # Z NOTATION DOMAIN ANTIRESTRICTION\n2A65; 2A64 # Z NOTATION RANGE ANTIRESTRICTION\n2A79; 2A7A # LESS-THAN WITH CIRCLE INSIDE\n2A7A; 2A79 # GREATER-THAN WITH CIRCLE INSIDE\n2A7B; 2A7C # [BEST FIT] LESS-THAN WITH QUESTION MARK ABOVE\n2A7C; 2A7B # [BEST FIT] GREATER-THAN WITH QUESTION MARK ABOVE\n2A7D; 2A7E # LESS-THAN OR SLANTED EQUAL TO\n2A7E; 2A7D # GREATER-THAN OR SLANTED EQUAL TO\n2A7F; 2A80 # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE\n2A80; 2A7F # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE\n2A81; 2A82 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE\n2A82; 2A81 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE\n2A83; 2A84 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT\n2A84; 2A83 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT\n2A85; 2A86 # [BEST FIT] LESS-THAN OR APPROXIMATE\n2A86; 2A85 # [BEST FIT] GREATER-THAN OR APPROXIMATE\n2A87; 2A88 # [BEST FIT] LESS-THAN AND SINGLE-LINE NOT EQUAL TO\n2A88; 2A87 # [BEST FIT] GREATER-THAN AND SINGLE-LINE NOT EQUAL TO\n2A89; 2A8A # [BEST FIT] LESS-THAN AND NOT APPROXIMATE\n2A8A; 2A89 # [BEST FIT] GREATER-THAN AND NOT APPROXIMATE\n2A8B; 2A8C # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN\n2A8C; 2A8B # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN\n2A8D; 2A8E # [BEST FIT] LESS-THAN ABOVE SIMILAR OR EQUAL\n2A8E; 2A8D # [BEST FIT] GREATER-THAN ABOVE SIMILAR OR EQUAL\n2A8F; 2A90 # [BEST FIT] LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN\n2A90; 2A8F # [BEST FIT] GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN\n2A91; 2A92 # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL\n2A92; 2A91 # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL\n2A93; 2A94 # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL\n2A94; 2A93 # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL\n2A95; 2A96 # SLANTED EQUAL TO OR LESS-THAN\n2A96; 2A95 # SLANTED EQUAL TO OR GREATER-THAN\n2A97; 2A98 # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE\n2A98; 2A97 # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE\n2A99; 2A9A # DOUBLE-LINE EQUAL TO OR LESS-THAN\n2A9A; 2A99 # DOUBLE-LINE EQUAL TO OR GREATER-THAN\n2A9B; 2A9C # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN\n2A9C; 2A9B # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN\n2A9D; 2A9E # [BEST FIT] SIMILAR OR LESS-THAN\n2A9E; 2A9D # [BEST FIT] SIMILAR OR GREATER-THAN\n2A9F; 2AA0 # [BEST FIT] SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN\n2AA0; 2A9F # [BEST FIT] SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN\n2AA1; 2AA2 # DOUBLE NESTED LESS-THAN\n2AA2; 2AA1 # DOUBLE NESTED GREATER-THAN\n2AA6; 2AA7 # LESS-THAN CLOSED BY CURVE\n2AA7; 2AA6 # GREATER-THAN CLOSED BY CURVE\n2AA8; 2AA9 # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL\n2AA9; 2AA8 # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL\n2AAA; 2AAB # SMALLER THAN\n2AAB; 2AAA # LARGER THAN\n2AAC; 2AAD # SMALLER THAN OR EQUAL TO\n2AAD; 2AAC # LARGER THAN OR EQUAL TO\n2AAF; 2AB0 # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN\n2AB0; 2AAF # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN\n2AB1; 2AB2 # [BEST FIT] PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO\n2AB2; 2AB1 # [BEST FIT] SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO\n2AB3; 2AB4 # PRECEDES ABOVE EQUALS SIGN\n2AB4; 2AB3 # SUCCEEDS ABOVE EQUALS SIGN\n2AB5; 2AB6 # [BEST FIT] PRECEDES ABOVE NOT EQUAL TO\n2AB6; 2AB5 # [BEST FIT] SUCCEEDS ABOVE NOT EQUAL TO\n2AB7; 2AB8 # [BEST FIT] PRECEDES ABOVE ALMOST EQUAL TO\n2AB8; 2AB7 # [BEST FIT] SUCCEEDS ABOVE ALMOST EQUAL TO\n2AB9; 2ABA # [BEST FIT] PRECEDES ABOVE NOT ALMOST EQUAL TO\n2ABA; 2AB9 # [BEST FIT] SUCCEEDS ABOVE NOT ALMOST EQUAL TO\n2ABB; 2ABC # DOUBLE PRECEDES\n2ABC; 2ABB # DOUBLE SUCCEEDS\n2ABD; 2ABE # SUBSET WITH DOT\n2ABE; 2ABD # SUPERSET WITH DOT\n2ABF; 2AC0 # SUBSET WITH PLUS SIGN BELOW\n2AC0; 2ABF # SUPERSET WITH PLUS SIGN BELOW\n2AC1; 2AC2 # SUBSET WITH MULTIPLICATION SIGN BELOW\n2AC2; 2AC1 # SUPERSET WITH MULTIPLICATION SIGN BELOW\n2AC3; 2AC4 # SUBSET OF OR EQUAL TO WITH DOT ABOVE\n2AC4; 2AC3 # SUPERSET OF OR EQUAL TO WITH DOT ABOVE\n2AC5; 2AC6 # SUBSET OF ABOVE EQUALS SIGN\n2AC6; 2AC5 # SUPERSET OF ABOVE EQUALS SIGN\n2AC7; 2AC8 # [BEST FIT] SUBSET OF ABOVE TILDE OPERATOR\n2AC8; 2AC7 # [BEST FIT] SUPERSET OF ABOVE TILDE OPERATOR\n2AC9; 2ACA # [BEST FIT] SUBSET OF ABOVE ALMOST EQUAL TO\n2ACA; 2AC9 # [BEST FIT] SUPERSET OF ABOVE ALMOST EQUAL TO\n2ACB; 2ACC # [BEST FIT] SUBSET OF ABOVE NOT EQUAL TO\n2ACC; 2ACB # [BEST FIT] SUPERSET OF ABOVE NOT EQUAL TO\n2ACD; 2ACE # SQUARE LEFT OPEN BOX OPERATOR\n2ACE; 2ACD # SQUARE RIGHT OPEN BOX OPERATOR\n2ACF; 2AD0 # CLOSED SUBSET\n2AD0; 2ACF # CLOSED SUPERSET\n2AD1; 2AD2 # CLOSED SUBSET OR EQUAL TO\n2AD2; 2AD1 # CLOSED SUPERSET OR EQUAL TO\n2AD3; 2AD4 # SUBSET ABOVE SUPERSET\n2AD4; 2AD3 # SUPERSET ABOVE SUBSET\n2AD5; 2AD6 # SUBSET ABOVE SUBSET\n2AD6; 2AD5 # SUPERSET ABOVE SUPERSET\n2ADE; 22A6 # SHORT LEFT TACK\n2AE3; 22A9 # DOUBLE VERTICAL BAR LEFT TURNSTILE\n2AE4; 22A8 # VERTICAL BAR DOUBLE LEFT TURNSTILE\n2AE5; 22AB # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE\n2AEC; 2AED # DOUBLE STROKE NOT SIGN\n2AED; 2AEC # REVERSED DOUBLE STROKE NOT SIGN\n2AEE; 2224 # DOES NOT DIVIDE WITH REVERSED NEGATION SLASH\n2AF7; 2AF8 # TRIPLE NESTED LESS-THAN\n2AF8; 2AF7 # TRIPLE NESTED GREATER-THAN\n2AF9; 2AFA # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO\n2AFA; 2AF9 # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO\n2BFE; 221F # REVERSED RIGHT ANGLE\n2E02; 2E03 # LEFT SUBSTITUTION BRACKET\n2E03; 2E02 # RIGHT SUBSTITUTION BRACKET\n2E04; 2E05 # LEFT DOTTED SUBSTITUTION BRACKET\n2E05; 2E04 # RIGHT DOTTED SUBSTITUTION BRACKET\n2E09; 2E0A # LEFT TRANSPOSITION BRACKET\n2E0A; 2E09 # RIGHT TRANSPOSITION BRACKET\n2E0C; 2E0D # LEFT RAISED OMISSION BRACKET\n2E0D; 2E0C # RIGHT RAISED OMISSION BRACKET\n2E1C; 2E1D # LEFT LOW PARAPHRASE BRACKET\n2E1D; 2E1C # RIGHT LOW PARAPHRASE BRACKET\n2E20; 2E21 # LEFT VERTICAL BAR WITH QUILL\n2E21; 2E20 # RIGHT VERTICAL BAR WITH QUILL\n2E22; 2E23 # TOP LEFT HALF BRACKET\n2E23; 2E22 # TOP RIGHT HALF BRACKET\n2E24; 2E25 # BOTTOM LEFT HALF BRACKET\n2E25; 2E24 # BOTTOM RIGHT HALF BRACKET\n2E26; 2E27 # LEFT SIDEWAYS U BRACKET\n2E27; 2E26 # RIGHT SIDEWAYS U BRACKET\n2E28; 2E29 # LEFT DOUBLE PARENTHESIS\n2E29; 2E28 # RIGHT DOUBLE PARENTHESIS\n2E55; 2E56 # LEFT SQUARE BRACKET WITH STROKE\n2E56; 2E55 # RIGHT SQUARE BRACKET WITH STROKE\n2E57; 2E58 # LEFT SQUARE BRACKET WITH DOUBLE STROKE\n2E58; 2E57 # RIGHT SQUARE BRACKET WITH DOUBLE STROKE\n2E59; 2E5A # TOP HALF LEFT PARENTHESIS\n2E5A; 2E59 # TOP HALF RIGHT PARENTHESIS\n2E5B; 2E5C # BOTTOM HALF LEFT PARENTHESIS\n2E5C; 2E5B # BOTTOM HALF RIGHT PARENTHESIS\n3008; 3009 # LEFT ANGLE BRACKET\n3009; 3008 # RIGHT ANGLE BRACKET\n300A; 300B # LEFT DOUBLE ANGLE BRACKET\n300B; 300A # RIGHT DOUBLE ANGLE BRACKET\n300C; 300D # [BEST FIT] LEFT CORNER BRACKET\n300D; 300C # [BEST FIT] RIGHT CORNER BRACKET\n300E; 300F # [BEST FIT] LEFT WHITE CORNER BRACKET\n300F; 300E # [BEST FIT] RIGHT WHITE CORNER BRACKET\n3010; 3011 # LEFT BLACK LENTICULAR BRACKET\n3011; 3010 # RIGHT BLACK LENTICULAR BRACKET\n3014; 3015 # LEFT TORTOISE SHELL BRACKET\n3015; 3014 # RIGHT TORTOISE SHELL BRACKET\n3016; 3017 # LEFT WHITE LENTICULAR BRACKET\n3017; 3016 # RIGHT WHITE LENTICULAR BRACKET\n3018; 3019 # LEFT WHITE TORTOISE SHELL BRACKET\n3019; 3018 # RIGHT WHITE TORTOISE SHELL BRACKET\n301A; 301B # LEFT WHITE SQUARE BRACKET\n301B; 301A # RIGHT WHITE SQUARE BRACKET\nFE59; FE5A # SMALL LEFT PARENTHESIS\nFE5A; FE59 # SMALL RIGHT PARENTHESIS\nFE5B; FE5C # SMALL LEFT CURLY BRACKET\nFE5C; FE5B # SMALL RIGHT CURLY BRACKET\nFE5D; FE5E # SMALL LEFT TORTOISE SHELL BRACKET\nFE5E; FE5D # SMALL RIGHT TORTOISE SHELL BRACKET\nFE64; FE65 # SMALL LESS-THAN SIGN\nFE65; FE64 # SMALL GREATER-THAN SIGN\nFF08; FF09 # FULLWIDTH LEFT PARENTHESIS\nFF09; FF08 # FULLWIDTH RIGHT PARENTHESIS\nFF1C; FF1E # FULLWIDTH LESS-THAN SIGN\nFF1E; FF1C # FULLWIDTH GREATER-THAN SIGN\nFF3B; FF3D # FULLWIDTH LEFT SQUARE BRACKET\nFF3D; FF3B # FULLWIDTH RIGHT SQUARE BRACKET\nFF5B; FF5D # FULLWIDTH LEFT CURLY BRACKET\nFF5D; FF5B # FULLWIDTH RIGHT CURLY BRACKET\nFF5F; FF60 # FULLWIDTH LEFT WHITE PARENTHESIS\nFF60; FF5F # FULLWIDTH RIGHT WHITE PARENTHESIS\nFF62; FF63 # [BEST FIT] HALFWIDTH LEFT CORNER BRACKET\nFF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET\n\n# The following characters have no appropriate mirroring character.\n# For these characters it is up to the rendering system\n#   to provide mirrored glyphs.\n\n# 2140; DOUBLE-STRUCK N-ARY SUMMATION\n# 2201; COMPLEMENT\n# 2202; PARTIAL DIFFERENTIAL\n# 2203; THERE EXISTS\n# 2204; THERE DOES NOT EXIST\n# 2211; N-ARY SUMMATION\n# 2216; SET MINUS\n# 221A; SQUARE ROOT\n# 221B; CUBE ROOT\n# 221C; FOURTH ROOT\n# 221D; PROPORTIONAL TO\n# 2226; NOT PARALLEL TO\n# 222B; INTEGRAL\n# 222C; DOUBLE INTEGRAL\n# 222D; TRIPLE INTEGRAL\n# 222E; CONTOUR INTEGRAL\n# 222F; SURFACE INTEGRAL\n# 2230; VOLUME INTEGRAL\n# 2231; CLOCKWISE INTEGRAL\n# 2232; CLOCKWISE CONTOUR INTEGRAL\n# 2233; ANTICLOCKWISE CONTOUR INTEGRAL\n# 2239; EXCESS\n# 223B; HOMOTHETIC\n# 223E; INVERTED LAZY S\n# 223F; SINE WAVE\n# 2240; WREATH PRODUCT\n# 2241; NOT TILDE\n# 2242; MINUS TILDE\n# 2244; NOT ASYMPTOTICALLY EQUAL TO\n# 2246; APPROXIMATELY BUT NOT ACTUALLY EQUAL TO\n# 2247; NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO\n# 2248; ALMOST EQUAL TO\n# 2249; NOT ALMOST EQUAL TO\n# 224A; ALMOST EQUAL OR EQUAL TO\n# 224B; TRIPLE TILDE\n# 225F; QUESTIONED EQUAL TO\n# 2260; NOT EQUAL TO\n# 2262; NOT IDENTICAL TO\n# 226D; NOT EQUIVALENT TO\n# 228C; MULTISET\n# 22A7; MODELS\n# 22AA; TRIPLE VERTICAL BAR RIGHT TURNSTILE\n# 22AC; DOES NOT PROVE\n# 22AD; NOT TRUE\n# 22AE; DOES NOT FORCE\n# 22AF; NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE\n# 22BE; RIGHT ANGLE WITH ARC\n# 22BF; RIGHT TRIANGLE\n# 22F5; ELEMENT OF WITH DOT ABOVE\n# 22F8; ELEMENT OF WITH UNDERBAR\n# 22F9; ELEMENT OF WITH TWO HORIZONTAL STROKES\n# 22FF; Z NOTATION BAG MEMBERSHIP\n# 2320; TOP HALF INTEGRAL\n# 2321; BOTTOM HALF INTEGRAL\n# 27C0; THREE DIMENSIONAL ANGLE\n# 27CC; LONG DIVISION\n# 27D3; LOWER RIGHT CORNER WITH DOT\n# 27D4; UPPER LEFT CORNER WITH DOT\n# 299C; RIGHT ANGLE VARIANT WITH SQUARE\n# 299D; MEASURED RIGHT ANGLE WITH DOT\n# 299E; ANGLE WITH S INSIDE\n# 299F; ACUTE ANGLE\n# 29A2; TURNED ANGLE\n# 29A6; OBLIQUE ANGLE OPENING UP\n# 29A7; OBLIQUE ANGLE OPENING DOWN\n# 29C2; CIRCLE WITH SMALL CIRCLE TO THE RIGHT\n# 29C3; CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT\n# 29C9; TWO JOINED SQUARES\n# 29CE; RIGHT TRIANGLE ABOVE LEFT TRIANGLE\n# 29DC; INCOMPLETE INFINITY\n# 29E1; INCREASES AS\n# 29E3; EQUALS SIGN AND SLANTED PARALLEL\n# 29E4; EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE\n# 29E5; IDENTICAL TO AND SLANTED PARALLEL\n# 29F4; RULE-DELAYED\n# 29F6; SOLIDUS WITH OVERBAR\n# 29F7; REVERSE SOLIDUS WITH HORIZONTAL STROKE\n# 2A0A; MODULO TWO SUM\n# 2A0B; SUMMATION WITH INTEGRAL\n# 2A0C; QUADRUPLE INTEGRAL OPERATOR\n# 2A0D; FINITE PART INTEGRAL\n# 2A0E; INTEGRAL WITH DOUBLE STROKE\n# 2A0F; INTEGRAL AVERAGE WITH SLASH\n# 2A10; CIRCULATION FUNCTION\n# 2A11; ANTICLOCKWISE INTEGRATION\n# 2A12; LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE\n# 2A13; LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE\n# 2A14; LINE INTEGRATION NOT INCLUDING THE POLE\n# 2A15; INTEGRAL AROUND A POINT OPERATOR\n# 2A16; QUATERNION INTEGRAL OPERATOR\n# 2A17; INTEGRAL WITH LEFTWARDS ARROW WITH HOOK\n# 2A18; INTEGRAL WITH TIMES SIGN\n# 2A19; INTEGRAL WITH INTERSECTION\n# 2A1A; INTEGRAL WITH UNION\n# 2A1B; INTEGRAL WITH OVERBAR\n# 2A1C; INTEGRAL WITH UNDERBAR\n# 2A1E; LARGE LEFT TRIANGLE OPERATOR\n# 2A1F; Z NOTATION SCHEMA COMPOSITION\n# 2A20; Z NOTATION SCHEMA PIPING\n# 2A21; Z NOTATION SCHEMA PROJECTION\n# 2A24; PLUS SIGN WITH TILDE ABOVE\n# 2A26; PLUS SIGN WITH TILDE BELOW\n# 2A29; MINUS SIGN WITH COMMA ABOVE\n# 2A3E; Z NOTATION RELATIONAL COMPOSITION\n# 2A57; SLOPING LARGE OR\n# 2A58; SLOPING LARGE AND\n# 2A6A; TILDE OPERATOR WITH DOT ABOVE\n# 2A6B; TILDE OPERATOR WITH RISING DOTS\n# 2A6C; SIMILAR MINUS SIMILAR\n# 2A6D; CONGRUENT WITH DOT ABOVE\n# 2A6F; ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT\n# 2A70; APPROXIMATELY EQUAL OR EQUAL TO\n# 2A73; EQUALS SIGN ABOVE TILDE OPERATOR\n# 2A74; DOUBLE COLON EQUAL\n# 2AA3; DOUBLE NESTED LESS-THAN WITH UNDERBAR\n# 2ADC; FORKING\n# 2AE2; VERTICAL BAR TRIPLE RIGHT TURNSTILE\n# 2AE6; LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL\n# 2AF3; PARALLEL WITH TILDE OPERATOR\n# 2AFB; TRIPLE SOLIDUS BINARY RELATION\n# 2AFD; DOUBLE SOLIDUS OPERATOR\n# 1D6DB; MATHEMATICAL BOLD PARTIAL DIFFERENTIAL\n# 1D715; MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL\n# 1D74F; MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL\n# 1D789; MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL\n# 1D7C3; MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL\n\n# EOF\n"
  },
  {
    "path": "maint/Unicode.tables/CaseFolding.txt",
    "content": "# CaseFolding-17.0.0.txt\n# Date: 2025-07-30, 23:54:36 GMT\n# © 2025 Unicode®, Inc.\n# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.\n# For terms of use and license, see https://www.unicode.org/terms_of_use.html\n#\n# Unicode Character Database\n#   For documentation, see https://www.unicode.org/reports/tr44/\n#\n# Case Folding Properties\n#\n# This file is a supplement to the UnicodeData file.\n# It provides a case folding mapping generated from the Unicode Character Database.\n# If all characters are mapped according to the full mapping below, then\n# case differences (according to UnicodeData.txt and SpecialCasing.txt)\n# are eliminated.\n#\n# The data supports both implementations that require simple case foldings\n# (where string lengths don't change), and implementations that allow full case folding\n# (where string lengths may grow). Note that where they can be supported, the\n# full case foldings are superior: for example, they allow \"FUSS\" and \"Fuß\" to match.\n#\n# All code points not listed in this file map to themselves.\n#\n# NOTE: case folding does not preserve normalization formats!\n#\n# For information on case folding, including how to have case folding\n# preserve normalization formats, see the\n# \"Conformance\" / \"Default Case Algorithms\" section of the core specification.\n#\n# ================================================================================\n# Format\n# ================================================================================\n# The entries in this file are in the following machine-readable format:\n#\n# <code>; <status>; <mapping>; # <name>\n#\n# The status field is:\n# C: common case folding, common mappings shared by both simple and full mappings.\n# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces.\n# S: simple case folding, mappings to single characters where different from F.\n# T: special case for uppercase I and dotted uppercase I\n#    - For non-Turkic languages, this mapping is normally not used.\n#    - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters.\n#      Note that the Turkic mappings do not maintain canonical equivalence without additional processing.\n#      See the discussions of case mapping in the Unicode Standard for more information.\n#\n# Usage:\n#  A. To do a simple case folding, use the mappings with status C + S.\n#  B. To do a full case folding, use the mappings with status C + F.\n#\n#    The mappings with status T can be used or omitted depending on the desired case-folding\n#    behavior. (The default option is to exclude them.)\n#\n# =================================================================\n\n# Property: Case_Folding\n\n#  All code points not explicitly listed for Case_Folding\n#  have the value C for the status field, and the code point itself for the mapping field.\n\n# =================================================================\n0041; C; 0061; # LATIN CAPITAL LETTER A\n0042; C; 0062; # LATIN CAPITAL LETTER B\n0043; C; 0063; # LATIN CAPITAL LETTER C\n0044; C; 0064; # LATIN CAPITAL LETTER D\n0045; C; 0065; # LATIN CAPITAL LETTER E\n0046; C; 0066; # LATIN CAPITAL LETTER F\n0047; C; 0067; # LATIN CAPITAL LETTER G\n0048; C; 0068; # LATIN CAPITAL LETTER H\n0049; C; 0069; # LATIN CAPITAL LETTER I\n0049; T; 0131; # LATIN CAPITAL LETTER I\n004A; C; 006A; # LATIN CAPITAL LETTER J\n004B; C; 006B; # LATIN CAPITAL LETTER K\n004C; C; 006C; # LATIN CAPITAL LETTER L\n004D; C; 006D; # LATIN CAPITAL LETTER M\n004E; C; 006E; # LATIN CAPITAL LETTER N\n004F; C; 006F; # LATIN CAPITAL LETTER O\n0050; C; 0070; # LATIN CAPITAL LETTER P\n0051; C; 0071; # LATIN CAPITAL LETTER Q\n0052; C; 0072; # LATIN CAPITAL LETTER R\n0053; C; 0073; # LATIN CAPITAL LETTER S\n0054; C; 0074; # LATIN CAPITAL LETTER T\n0055; C; 0075; # LATIN CAPITAL LETTER U\n0056; C; 0076; # LATIN CAPITAL LETTER V\n0057; C; 0077; # LATIN CAPITAL LETTER W\n0058; C; 0078; # LATIN CAPITAL LETTER X\n0059; C; 0079; # LATIN CAPITAL LETTER Y\n005A; C; 007A; # LATIN CAPITAL LETTER Z\n00B5; C; 03BC; # MICRO SIGN\n00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE\n00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE\n00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX\n00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE\n00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS\n00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE\n00C6; C; 00E6; # LATIN CAPITAL LETTER AE\n00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA\n00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE\n00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE\n00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX\n00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS\n00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE\n00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE\n00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX\n00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS\n00D0; C; 00F0; # LATIN CAPITAL LETTER ETH\n00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE\n00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE\n00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE\n00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX\n00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE\n00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE\n00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE\n00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE\n00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX\n00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS\n00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE\n00DE; C; 00FE; # LATIN CAPITAL LETTER THORN\n00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S\n0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON\n0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE\n0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK\n0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE\n0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX\n010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE\n010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON\n010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON\n0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE\n0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON\n0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE\n0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE\n0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK\n011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON\n011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX\n011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE\n0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE\n0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA\n0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX\n0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE\n0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE\n012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON\n012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE\n012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK\n0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE\n0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE\n0132; C; 0133; # LATIN CAPITAL LIGATURE IJ\n0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX\n0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA\n0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE\n013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA\n013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON\n013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT\n0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE\n0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE\n0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA\n0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON\n0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE\n014A; C; 014B; # LATIN CAPITAL LETTER ENG\n014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON\n014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE\n0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE\n0152; C; 0153; # LATIN CAPITAL LIGATURE OE\n0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE\n0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA\n0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON\n015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE\n015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX\n015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA\n0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON\n0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA\n0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON\n0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE\n0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE\n016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON\n016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE\n016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE\n0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE\n0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK\n0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX\n0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX\n0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS\n0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE\n017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE\n017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON\n017F; C; 0073; # LATIN SMALL LETTER LONG S\n0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK\n0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR\n0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX\n0186; C; 0254; # LATIN CAPITAL LETTER OPEN O\n0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK\n0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D\n018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK\n018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR\n018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E\n018F; C; 0259; # LATIN CAPITAL LETTER SCHWA\n0190; C; 025B; # LATIN CAPITAL LETTER OPEN E\n0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK\n0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK\n0194; C; 0263; # LATIN CAPITAL LETTER GAMMA\n0196; C; 0269; # LATIN CAPITAL LETTER IOTA\n0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE\n0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK\n019C; C; 026F; # LATIN CAPITAL LETTER TURNED M\n019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK\n019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE\n01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN\n01A2; C; 01A3; # LATIN CAPITAL LETTER OI\n01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK\n01A6; C; 0280; # LATIN LETTER YR\n01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO\n01A9; C; 0283; # LATIN CAPITAL LETTER ESH\n01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK\n01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK\n01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN\n01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON\n01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK\n01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK\n01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE\n01B7; C; 0292; # LATIN CAPITAL LETTER EZH\n01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED\n01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE\n01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON\n01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON\n01C7; C; 01C9; # LATIN CAPITAL LETTER LJ\n01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J\n01CA; C; 01CC; # LATIN CAPITAL LETTER NJ\n01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J\n01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON\n01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON\n01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON\n01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON\n01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON\n01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE\n01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON\n01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE\n01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON\n01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON\n01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON\n01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE\n01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON\n01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON\n01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK\n01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON\n01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON\n01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON\n01F1; C; 01F3; # LATIN CAPITAL LETTER DZ\n01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z\n01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE\n01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR\n01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN\n01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE\n01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE\n01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE\n01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE\n0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE\n0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE\n0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE\n0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE\n0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE\n020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE\n020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE\n020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE\n0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE\n0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE\n0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE\n0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE\n0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW\n021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW\n021C; C; 021D; # LATIN CAPITAL LETTER YOGH\n021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON\n0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG\n0222; C; 0223; # LATIN CAPITAL LETTER OU\n0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK\n0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE\n0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA\n022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON\n022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON\n022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE\n0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON\n0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON\n023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE\n023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE\n023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR\n023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE\n0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP\n0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE\n0244; C; 0289; # LATIN CAPITAL LETTER U BAR\n0245; C; 028C; # LATIN CAPITAL LETTER TURNED V\n0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE\n0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE\n024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL\n024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE\n024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE\n0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI\n0370; C; 0371; # GREEK CAPITAL LETTER HETA\n0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI\n0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA\n037F; C; 03F3; # GREEK CAPITAL LETTER YOT\n0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS\n0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS\n0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS\n038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS\n038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS\n038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS\n0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS\n0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA\n0392; C; 03B2; # GREEK CAPITAL LETTER BETA\n0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA\n0394; C; 03B4; # GREEK CAPITAL LETTER DELTA\n0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON\n0396; C; 03B6; # GREEK CAPITAL LETTER ZETA\n0397; C; 03B7; # GREEK CAPITAL LETTER ETA\n0398; C; 03B8; # GREEK CAPITAL LETTER THETA\n0399; C; 03B9; # GREEK CAPITAL LETTER IOTA\n039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA\n039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA\n039C; C; 03BC; # GREEK CAPITAL LETTER MU\n039D; C; 03BD; # GREEK CAPITAL LETTER NU\n039E; C; 03BE; # GREEK CAPITAL LETTER XI\n039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON\n03A0; C; 03C0; # GREEK CAPITAL LETTER PI\n03A1; C; 03C1; # GREEK CAPITAL LETTER RHO\n03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA\n03A4; C; 03C4; # GREEK CAPITAL LETTER TAU\n03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON\n03A6; C; 03C6; # GREEK CAPITAL LETTER PHI\n03A7; C; 03C7; # GREEK CAPITAL LETTER CHI\n03A8; C; 03C8; # GREEK CAPITAL LETTER PSI\n03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA\n03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA\n03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA\n03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS\n03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA\n03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL\n03D0; C; 03B2; # GREEK BETA SYMBOL\n03D1; C; 03B8; # GREEK THETA SYMBOL\n03D5; C; 03C6; # GREEK PHI SYMBOL\n03D6; C; 03C0; # GREEK PI SYMBOL\n03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA\n03DA; C; 03DB; # GREEK LETTER STIGMA\n03DC; C; 03DD; # GREEK LETTER DIGAMMA\n03DE; C; 03DF; # GREEK LETTER KOPPA\n03E0; C; 03E1; # GREEK LETTER SAMPI\n03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI\n03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI\n03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI\n03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI\n03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA\n03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA\n03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI\n03F0; C; 03BA; # GREEK KAPPA SYMBOL\n03F1; C; 03C1; # GREEK RHO SYMBOL\n03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL\n03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL\n03F7; C; 03F8; # GREEK CAPITAL LETTER SHO\n03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL\n03FA; C; 03FB; # GREEK CAPITAL LETTER SAN\n03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL\n03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL\n03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL\n0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE\n0401; C; 0451; # CYRILLIC CAPITAL LETTER IO\n0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE\n0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE\n0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE\n0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE\n0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I\n0407; C; 0457; # CYRILLIC CAPITAL LETTER YI\n0408; C; 0458; # CYRILLIC CAPITAL LETTER JE\n0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE\n040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE\n040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE\n040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE\n040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE\n040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U\n040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE\n0410; C; 0430; # CYRILLIC CAPITAL LETTER A\n0411; C; 0431; # CYRILLIC CAPITAL LETTER BE\n0412; C; 0432; # CYRILLIC CAPITAL LETTER VE\n0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE\n0414; C; 0434; # CYRILLIC CAPITAL LETTER DE\n0415; C; 0435; # CYRILLIC CAPITAL LETTER IE\n0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE\n0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE\n0418; C; 0438; # CYRILLIC CAPITAL LETTER I\n0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I\n041A; C; 043A; # CYRILLIC CAPITAL LETTER KA\n041B; C; 043B; # CYRILLIC CAPITAL LETTER EL\n041C; C; 043C; # CYRILLIC CAPITAL LETTER EM\n041D; C; 043D; # CYRILLIC CAPITAL LETTER EN\n041E; C; 043E; # CYRILLIC CAPITAL LETTER O\n041F; C; 043F; # CYRILLIC CAPITAL LETTER PE\n0420; C; 0440; # CYRILLIC CAPITAL LETTER ER\n0421; C; 0441; # CYRILLIC CAPITAL LETTER ES\n0422; C; 0442; # CYRILLIC CAPITAL LETTER TE\n0423; C; 0443; # CYRILLIC CAPITAL LETTER U\n0424; C; 0444; # CYRILLIC CAPITAL LETTER EF\n0425; C; 0445; # CYRILLIC CAPITAL LETTER HA\n0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE\n0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE\n0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA\n0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA\n042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN\n042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU\n042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN\n042D; C; 044D; # CYRILLIC CAPITAL LETTER E\n042E; C; 044E; # CYRILLIC CAPITAL LETTER YU\n042F; C; 044F; # CYRILLIC CAPITAL LETTER YA\n0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA\n0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT\n0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E\n0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS\n0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS\n046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS\n046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS\n046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI\n0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI\n0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA\n0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA\n0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT\n0478; C; 0479; # CYRILLIC CAPITAL LETTER UK\n047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA\n047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO\n047E; C; 047F; # CYRILLIC CAPITAL LETTER OT\n0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA\n048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL\n048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN\n048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK\n0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN\n0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE\n0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK\n0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER\n0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER\n049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER\n049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE\n049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE\n04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA\n04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER\n04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE\n04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK\n04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA\n04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER\n04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER\n04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U\n04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE\n04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER\n04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE\n04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER\n04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE\n04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA\n04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE\n04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER\n04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA\n04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE\n04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK\n04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL\n04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK\n04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL\n04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE\n04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL\n04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE\n04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS\n04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE\n04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE\n04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA\n04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS\n04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS\n04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS\n04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE\n04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON\n04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS\n04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS\n04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O\n04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS\n04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS\n04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON\n04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS\n04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE\n04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS\n04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER\n04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS\n04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK\n04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK\n04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE\n0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE\n0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE\n0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE\n0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE\n0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE\n050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE\n050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE\n050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE\n0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE\n0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK\n0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA\n0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA\n0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE\n051A; C; 051B; # CYRILLIC CAPITAL LETTER QA\n051C; C; 051D; # CYRILLIC CAPITAL LETTER WE\n051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA\n0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK\n0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK\n0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER\n0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER\n0528; C; 0529; # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK\n052A; C; 052B; # CYRILLIC CAPITAL LETTER DZZHE\n052C; C; 052D; # CYRILLIC CAPITAL LETTER DCHE\n052E; C; 052F; # CYRILLIC CAPITAL LETTER EL WITH DESCENDER\n0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB\n0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN\n0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM\n0534; C; 0564; # ARMENIAN CAPITAL LETTER DA\n0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH\n0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA\n0537; C; 0567; # ARMENIAN CAPITAL LETTER EH\n0538; C; 0568; # ARMENIAN CAPITAL LETTER ET\n0539; C; 0569; # ARMENIAN CAPITAL LETTER TO\n053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE\n053B; C; 056B; # ARMENIAN CAPITAL LETTER INI\n053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN\n053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH\n053E; C; 056E; # ARMENIAN CAPITAL LETTER CA\n053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN\n0540; C; 0570; # ARMENIAN CAPITAL LETTER HO\n0541; C; 0571; # ARMENIAN CAPITAL LETTER JA\n0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD\n0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH\n0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN\n0545; C; 0575; # ARMENIAN CAPITAL LETTER YI\n0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW\n0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA\n0548; C; 0578; # ARMENIAN CAPITAL LETTER VO\n0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA\n054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH\n054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH\n054C; C; 057C; # ARMENIAN CAPITAL LETTER RA\n054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH\n054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW\n054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN\n0550; C; 0580; # ARMENIAN CAPITAL LETTER REH\n0551; C; 0581; # ARMENIAN CAPITAL LETTER CO\n0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN\n0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR\n0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH\n0555; C; 0585; # ARMENIAN CAPITAL LETTER OH\n0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH\n0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN\n10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN\n10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN\n10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN\n10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON\n10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN\n10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN\n10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN\n10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN\n10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN\n10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN\n10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS\n10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN\n10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR\n10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON\n10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR\n10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR\n10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE\n10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN\n10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR\n10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN\n10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR\n10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR\n10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN\n10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR\n10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN\n10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN\n10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN\n10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL\n10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL\n10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR\n10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN\n10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN\n10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE\n10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE\n10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE\n10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE\n10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR\n10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE\n10C7; C; 2D27; # GEORGIAN CAPITAL LETTER YN\n10CD; C; 2D2D; # GEORGIAN CAPITAL LETTER AEN\n13F8; C; 13F0; # CHEROKEE SMALL LETTER YE\n13F9; C; 13F1; # CHEROKEE SMALL LETTER YI\n13FA; C; 13F2; # CHEROKEE SMALL LETTER YO\n13FB; C; 13F3; # CHEROKEE SMALL LETTER YU\n13FC; C; 13F4; # CHEROKEE SMALL LETTER YV\n13FD; C; 13F5; # CHEROKEE SMALL LETTER MV\n1C80; C; 0432; # CYRILLIC SMALL LETTER ROUNDED VE\n1C81; C; 0434; # CYRILLIC SMALL LETTER LONG-LEGGED DE\n1C82; C; 043E; # CYRILLIC SMALL LETTER NARROW O\n1C83; C; 0441; # CYRILLIC SMALL LETTER WIDE ES\n1C84; C; 0442; # CYRILLIC SMALL LETTER TALL TE\n1C85; C; 0442; # CYRILLIC SMALL LETTER THREE-LEGGED TE\n1C86; C; 044A; # CYRILLIC SMALL LETTER TALL HARD SIGN\n1C87; C; 0463; # CYRILLIC SMALL LETTER TALL YAT\n1C88; C; A64B; # CYRILLIC SMALL LETTER UNBLENDED UK\n1C89; C; 1C8A; # CYRILLIC CAPITAL LETTER TJE\n1C90; C; 10D0; # GEORGIAN MTAVRULI CAPITAL LETTER AN\n1C91; C; 10D1; # GEORGIAN MTAVRULI CAPITAL LETTER BAN\n1C92; C; 10D2; # GEORGIAN MTAVRULI CAPITAL LETTER GAN\n1C93; C; 10D3; # GEORGIAN MTAVRULI CAPITAL LETTER DON\n1C94; C; 10D4; # GEORGIAN MTAVRULI CAPITAL LETTER EN\n1C95; C; 10D5; # GEORGIAN MTAVRULI CAPITAL LETTER VIN\n1C96; C; 10D6; # GEORGIAN MTAVRULI CAPITAL LETTER ZEN\n1C97; C; 10D7; # GEORGIAN MTAVRULI CAPITAL LETTER TAN\n1C98; C; 10D8; # GEORGIAN MTAVRULI CAPITAL LETTER IN\n1C99; C; 10D9; # GEORGIAN MTAVRULI CAPITAL LETTER KAN\n1C9A; C; 10DA; # GEORGIAN MTAVRULI CAPITAL LETTER LAS\n1C9B; C; 10DB; # GEORGIAN MTAVRULI CAPITAL LETTER MAN\n1C9C; C; 10DC; # GEORGIAN MTAVRULI CAPITAL LETTER NAR\n1C9D; C; 10DD; # GEORGIAN MTAVRULI CAPITAL LETTER ON\n1C9E; C; 10DE; # GEORGIAN MTAVRULI CAPITAL LETTER PAR\n1C9F; C; 10DF; # GEORGIAN MTAVRULI CAPITAL LETTER ZHAR\n1CA0; C; 10E0; # GEORGIAN MTAVRULI CAPITAL LETTER RAE\n1CA1; C; 10E1; # GEORGIAN MTAVRULI CAPITAL LETTER SAN\n1CA2; C; 10E2; # GEORGIAN MTAVRULI CAPITAL LETTER TAR\n1CA3; C; 10E3; # GEORGIAN MTAVRULI CAPITAL LETTER UN\n1CA4; C; 10E4; # GEORGIAN MTAVRULI CAPITAL LETTER PHAR\n1CA5; C; 10E5; # GEORGIAN MTAVRULI CAPITAL LETTER KHAR\n1CA6; C; 10E6; # GEORGIAN MTAVRULI CAPITAL LETTER GHAN\n1CA7; C; 10E7; # GEORGIAN MTAVRULI CAPITAL LETTER QAR\n1CA8; C; 10E8; # GEORGIAN MTAVRULI CAPITAL LETTER SHIN\n1CA9; C; 10E9; # GEORGIAN MTAVRULI CAPITAL LETTER CHIN\n1CAA; C; 10EA; # GEORGIAN MTAVRULI CAPITAL LETTER CAN\n1CAB; C; 10EB; # GEORGIAN MTAVRULI CAPITAL LETTER JIL\n1CAC; C; 10EC; # GEORGIAN MTAVRULI CAPITAL LETTER CIL\n1CAD; C; 10ED; # GEORGIAN MTAVRULI CAPITAL LETTER CHAR\n1CAE; C; 10EE; # GEORGIAN MTAVRULI CAPITAL LETTER XAN\n1CAF; C; 10EF; # GEORGIAN MTAVRULI CAPITAL LETTER JHAN\n1CB0; C; 10F0; # GEORGIAN MTAVRULI CAPITAL LETTER HAE\n1CB1; C; 10F1; # GEORGIAN MTAVRULI CAPITAL LETTER HE\n1CB2; C; 10F2; # GEORGIAN MTAVRULI CAPITAL LETTER HIE\n1CB3; C; 10F3; # GEORGIAN MTAVRULI CAPITAL LETTER WE\n1CB4; C; 10F4; # GEORGIAN MTAVRULI CAPITAL LETTER HAR\n1CB5; C; 10F5; # GEORGIAN MTAVRULI CAPITAL LETTER HOE\n1CB6; C; 10F6; # GEORGIAN MTAVRULI CAPITAL LETTER FI\n1CB7; C; 10F7; # GEORGIAN MTAVRULI CAPITAL LETTER YN\n1CB8; C; 10F8; # GEORGIAN MTAVRULI CAPITAL LETTER ELIFI\n1CB9; C; 10F9; # GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN\n1CBA; C; 10FA; # GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD; C; 10FD; # GEORGIAN MTAVRULI CAPITAL LETTER AEN\n1CBE; C; 10FE; # GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN\n1CBF; C; 10FF; # GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW\n1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE\n1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW\n1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW\n1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE\n1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE\n1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW\n1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW\n1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA\n1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW\n1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE\n1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE\n1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW\n1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW\n1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE\n1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE\n1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON\n1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE\n1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW\n1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS\n1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA\n1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW\n1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW\n1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE\n1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE\n1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW\n1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW\n1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW\n1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON\n1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW\n1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW\n1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE\n1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE\n1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW\n1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE\n1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW\n1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW\n1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW\n1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE\n1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS\n1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE\n1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE\n1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE\n1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE\n1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE\n1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW\n1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON\n1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW\n1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE\n1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW\n1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE\n1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE\n1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE\n1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE\n1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW\n1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW\n1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW\n1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW\n1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW\n1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW\n1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE\n1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS\n1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE\n1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW\n1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE\n1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE\n1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS\n1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE\n1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW\n1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE\n1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS\n1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE\n1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX\n1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW\n1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW\n1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW\n1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS\n1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE\n1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE\n1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING\n1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE\n1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S\n1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S\n1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW\n1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE\n1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE\n1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE\n1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE\n1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE\n1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW\n1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE\n1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE\n1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE\n1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE\n1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW\n1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW\n1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE\n1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE\n1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE\n1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE\n1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE\n1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE\n1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW\n1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE\n1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW\n1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW\n1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE\n1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE\n1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE\n1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE\n1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE\n1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW\n1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE\n1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE\n1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE\n1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE\n1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW\n1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW\n1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE\n1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE\n1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE\n1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE\n1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE\n1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW\n1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE\n1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW\n1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE\n1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE\n1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL\n1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V\n1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP\n1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI\n1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA\n1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA\n1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA\n1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA\n1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA\n1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI\n1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI\n1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI\n1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA\n1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA\n1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA\n1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA\n1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI\n1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA\n1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA\n1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA\n1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA\n1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA\n1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI\n1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI\n1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI\n1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA\n1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA\n1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA\n1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA\n1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA\n1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI\n1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI\n1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI\n1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA\n1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA\n1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA\n1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA\n1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI\n1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA\n1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA\n1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI\n1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI\n1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA\n1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA\n1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA\n1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA\n1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA\n1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI\n1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI\n1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI\n1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI\n1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI\n1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI\n1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI\n1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI\n1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI\n1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI\n1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI\n1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI\n1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI\n1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI\n1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI\n1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI\n1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI\n1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI\n1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI\n1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI\n1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI\n1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI\n1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI\n1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI\n1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI\n1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI\n1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI\n1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI\n1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI\n1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI\n1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI\n1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI\n1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI\n1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI\n1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI\n1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI\n1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI\n1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI\n1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI\n1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI\n1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI\n1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI\n1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI\n1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI\n1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI\n1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI\n1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI\n1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI\n1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI\n1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI\n1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI\n1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI\n1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI\n1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI\n1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI\n1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI\n1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI\n1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI\n1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI\n1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI\n1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI\n1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI\n1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI\n1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI\n1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI\n1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI\n1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI\n1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI\n1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI\n1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI\n1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI\n1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI\n1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY\n1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON\n1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA\n1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA\n1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBE; C; 03B9; # GREEK PROSGEGRAMMENI\n1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI\n1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI\n1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI\n1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI\n1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA\n1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA\n1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA\n1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA\n1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA\n1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD3; S; 0390; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI\n1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI\n1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY\n1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON\n1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA\n1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA\n1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA\n1FE3; S; 03B0; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA\n1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI\n1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI\n1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI\n1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY\n1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON\n1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA\n1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA\n1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA\n1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI\n1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI\n1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI\n1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI\n1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA\n1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA\n1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA\n1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA\n1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n2126; C; 03C9; # OHM SIGN\n212A; C; 006B; # KELVIN SIGN\n212B; C; 00E5; # ANGSTROM SIGN\n2132; C; 214E; # TURNED CAPITAL F\n2160; C; 2170; # ROMAN NUMERAL ONE\n2161; C; 2171; # ROMAN NUMERAL TWO\n2162; C; 2172; # ROMAN NUMERAL THREE\n2163; C; 2173; # ROMAN NUMERAL FOUR\n2164; C; 2174; # ROMAN NUMERAL FIVE\n2165; C; 2175; # ROMAN NUMERAL SIX\n2166; C; 2176; # ROMAN NUMERAL SEVEN\n2167; C; 2177; # ROMAN NUMERAL EIGHT\n2168; C; 2178; # ROMAN NUMERAL NINE\n2169; C; 2179; # ROMAN NUMERAL TEN\n216A; C; 217A; # ROMAN NUMERAL ELEVEN\n216B; C; 217B; # ROMAN NUMERAL TWELVE\n216C; C; 217C; # ROMAN NUMERAL FIFTY\n216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED\n216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED\n216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND\n2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED\n24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A\n24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B\n24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C\n24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D\n24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E\n24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F\n24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G\n24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H\n24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I\n24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J\n24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K\n24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L\n24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M\n24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N\n24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O\n24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P\n24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q\n24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R\n24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S\n24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T\n24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U\n24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V\n24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W\n24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X\n24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y\n24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z\n2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU\n2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY\n2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE\n2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI\n2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO\n2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU\n2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE\n2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO\n2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA\n2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE\n2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE\n2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I\n2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI\n2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO\n2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE\n2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE\n2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI\n2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU\n2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI\n2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI\n2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO\n2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO\n2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU\n2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU\n2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU\n2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU\n2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE\n2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA\n2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI\n2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI\n2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA\n2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU\n2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI\n2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI\n2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA\n2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU\n2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS\n2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL\n2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO\n2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS\n2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS\n2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS\n2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA\n2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA\n2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC\n2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A\n2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE\n2C2F; C; 2C5F; # GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI\n2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR\n2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE\n2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE\n2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL\n2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER\n2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER\n2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER\n2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA\n2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK\n2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A\n2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA\n2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK\n2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H\n2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL\n2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL\n2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA\n2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA\n2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA\n2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA\n2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE\n2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU\n2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA\n2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE\n2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE\n2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA\n2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA\n2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA\n2C98; C; 2C99; # COPTIC CAPITAL LETTER MI\n2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI\n2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI\n2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O\n2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI\n2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO\n2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA\n2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU\n2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA\n2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI\n2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI\n2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI\n2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU\n2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF\n2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN\n2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE\n2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA\n2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI\n2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI\n2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU\n2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI\n2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI\n2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI\n2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH\n2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI\n2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI\n2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI\n2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA\n2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA\n2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI\n2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT\n2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA\n2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA\n2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA\n2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA\n2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI\n2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI\n2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU\n2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI\n2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA\n2CF2; C; 2CF3; # COPTIC CAPITAL LETTER BOHAIRIC KHEI\nA640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA\nA642; C; A643; # CYRILLIC CAPITAL LETTER DZELO\nA644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE\nA646; C; A647; # CYRILLIC CAPITAL LETTER IOTA\nA648; C; A649; # CYRILLIC CAPITAL LETTER DJERV\nA64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK\nA64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA\nA64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER\nA650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER\nA652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT\nA654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU\nA656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A\nA658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS\nA65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS\nA65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS\nA65E; C; A65F; # CYRILLIC CAPITAL LETTER YN\nA660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE\nA662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE\nA664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL\nA666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM\nA668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O\nA66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O\nA66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O\nA680; C; A681; # CYRILLIC CAPITAL LETTER DWE\nA682; C; A683; # CYRILLIC CAPITAL LETTER DZWE\nA684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE\nA686; C; A687; # CYRILLIC CAPITAL LETTER CCHE\nA688; C; A689; # CYRILLIC CAPITAL LETTER DZZE\nA68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK\nA68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE\nA68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE\nA690; C; A691; # CYRILLIC CAPITAL LETTER TSSE\nA692; C; A693; # CYRILLIC CAPITAL LETTER TCHE\nA694; C; A695; # CYRILLIC CAPITAL LETTER HWE\nA696; C; A697; # CYRILLIC CAPITAL LETTER SHWE\nA698; C; A699; # CYRILLIC CAPITAL LETTER DOUBLE O\nA69A; C; A69B; # CYRILLIC CAPITAL LETTER CROSSED O\nA722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF\nA724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN\nA726; C; A727; # LATIN CAPITAL LETTER HENG\nA728; C; A729; # LATIN CAPITAL LETTER TZ\nA72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO\nA72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO\nA72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA\nA732; C; A733; # LATIN CAPITAL LETTER AA\nA734; C; A735; # LATIN CAPITAL LETTER AO\nA736; C; A737; # LATIN CAPITAL LETTER AU\nA738; C; A739; # LATIN CAPITAL LETTER AV\nA73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR\nA73C; C; A73D; # LATIN CAPITAL LETTER AY\nA73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT\nA740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE\nA742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE\nA744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE\nA746; C; A747; # LATIN CAPITAL LETTER BROKEN L\nA748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE\nA74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY\nA74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP\nA74E; C; A74F; # LATIN CAPITAL LETTER OO\nA750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER\nA752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH\nA754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL\nA756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER\nA758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE\nA75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA\nA75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA\nA75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE\nA760; C; A761; # LATIN CAPITAL LETTER VY\nA762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z\nA764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE\nA766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER\nA768; C; A769; # LATIN CAPITAL LETTER VEND\nA76A; C; A76B; # LATIN CAPITAL LETTER ET\nA76C; C; A76D; # LATIN CAPITAL LETTER IS\nA76E; C; A76F; # LATIN CAPITAL LETTER CON\nA779; C; A77A; # LATIN CAPITAL LETTER INSULAR D\nA77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F\nA77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G\nA77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G\nA780; C; A781; # LATIN CAPITAL LETTER TURNED L\nA782; C; A783; # LATIN CAPITAL LETTER INSULAR R\nA784; C; A785; # LATIN CAPITAL LETTER INSULAR S\nA786; C; A787; # LATIN CAPITAL LETTER INSULAR T\nA78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO\nA78D; C; 0265; # LATIN CAPITAL LETTER TURNED H\nA790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER\nA792; C; A793; # LATIN CAPITAL LETTER C WITH BAR\nA796; C; A797; # LATIN CAPITAL LETTER B WITH FLOURISH\nA798; C; A799; # LATIN CAPITAL LETTER F WITH STROKE\nA79A; C; A79B; # LATIN CAPITAL LETTER VOLAPUK AE\nA79C; C; A79D; # LATIN CAPITAL LETTER VOLAPUK OE\nA79E; C; A79F; # LATIN CAPITAL LETTER VOLAPUK UE\nA7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE\nA7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE\nA7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE\nA7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE\nA7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE\nA7AA; C; 0266; # LATIN CAPITAL LETTER H WITH HOOK\nA7AB; C; 025C; # LATIN CAPITAL LETTER REVERSED OPEN E\nA7AC; C; 0261; # LATIN CAPITAL LETTER SCRIPT G\nA7AD; C; 026C; # LATIN CAPITAL LETTER L WITH BELT\nA7AE; C; 026A; # LATIN CAPITAL LETTER SMALL CAPITAL I\nA7B0; C; 029E; # LATIN CAPITAL LETTER TURNED K\nA7B1; C; 0287; # LATIN CAPITAL LETTER TURNED T\nA7B2; C; 029D; # LATIN CAPITAL LETTER J WITH CROSSED-TAIL\nA7B3; C; AB53; # LATIN CAPITAL LETTER CHI\nA7B4; C; A7B5; # LATIN CAPITAL LETTER BETA\nA7B6; C; A7B7; # LATIN CAPITAL LETTER OMEGA\nA7B8; C; A7B9; # LATIN CAPITAL LETTER U WITH STROKE\nA7BA; C; A7BB; # LATIN CAPITAL LETTER GLOTTAL A\nA7BC; C; A7BD; # LATIN CAPITAL LETTER GLOTTAL I\nA7BE; C; A7BF; # LATIN CAPITAL LETTER GLOTTAL U\nA7C0; C; A7C1; # LATIN CAPITAL LETTER OLD POLISH O\nA7C2; C; A7C3; # LATIN CAPITAL LETTER ANGLICANA W\nA7C4; C; A794; # LATIN CAPITAL LETTER C WITH PALATAL HOOK\nA7C5; C; 0282; # LATIN CAPITAL LETTER S WITH HOOK\nA7C6; C; 1D8E; # LATIN CAPITAL LETTER Z WITH PALATAL HOOK\nA7C7; C; A7C8; # LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY\nA7C9; C; A7CA; # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY\nA7CB; C; 0264; # LATIN CAPITAL LETTER RAMS HORN\nA7CC; C; A7CD; # LATIN CAPITAL LETTER S WITH DIAGONAL STROKE\nA7CE; C; A7CF; # LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE\nA7D0; C; A7D1; # LATIN CAPITAL LETTER CLOSED INSULAR G\nA7D2; C; A7D3; # LATIN CAPITAL LETTER DOUBLE THORN\nA7D4; C; A7D5; # LATIN CAPITAL LETTER DOUBLE WYNN\nA7D6; C; A7D7; # LATIN CAPITAL LETTER MIDDLE SCOTS S\nA7D8; C; A7D9; # LATIN CAPITAL LETTER SIGMOID S\nA7DA; C; A7DB; # LATIN CAPITAL LETTER LAMBDA\nA7DC; C; 019B; # LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F5; C; A7F6; # LATIN CAPITAL LETTER REVERSED HALF H\nAB70; C; 13A0; # CHEROKEE SMALL LETTER A\nAB71; C; 13A1; # CHEROKEE SMALL LETTER E\nAB72; C; 13A2; # CHEROKEE SMALL LETTER I\nAB73; C; 13A3; # CHEROKEE SMALL LETTER O\nAB74; C; 13A4; # CHEROKEE SMALL LETTER U\nAB75; C; 13A5; # CHEROKEE SMALL LETTER V\nAB76; C; 13A6; # CHEROKEE SMALL LETTER GA\nAB77; C; 13A7; # CHEROKEE SMALL LETTER KA\nAB78; C; 13A8; # CHEROKEE SMALL LETTER GE\nAB79; C; 13A9; # CHEROKEE SMALL LETTER GI\nAB7A; C; 13AA; # CHEROKEE SMALL LETTER GO\nAB7B; C; 13AB; # CHEROKEE SMALL LETTER GU\nAB7C; C; 13AC; # CHEROKEE SMALL LETTER GV\nAB7D; C; 13AD; # CHEROKEE SMALL LETTER HA\nAB7E; C; 13AE; # CHEROKEE SMALL LETTER HE\nAB7F; C; 13AF; # CHEROKEE SMALL LETTER HI\nAB80; C; 13B0; # CHEROKEE SMALL LETTER HO\nAB81; C; 13B1; # CHEROKEE SMALL LETTER HU\nAB82; C; 13B2; # CHEROKEE SMALL LETTER HV\nAB83; C; 13B3; # CHEROKEE SMALL LETTER LA\nAB84; C; 13B4; # CHEROKEE SMALL LETTER LE\nAB85; C; 13B5; # CHEROKEE SMALL LETTER LI\nAB86; C; 13B6; # CHEROKEE SMALL LETTER LO\nAB87; C; 13B7; # CHEROKEE SMALL LETTER LU\nAB88; C; 13B8; # CHEROKEE SMALL LETTER LV\nAB89; C; 13B9; # CHEROKEE SMALL LETTER MA\nAB8A; C; 13BA; # CHEROKEE SMALL LETTER ME\nAB8B; C; 13BB; # CHEROKEE SMALL LETTER MI\nAB8C; C; 13BC; # CHEROKEE SMALL LETTER MO\nAB8D; C; 13BD; # CHEROKEE SMALL LETTER MU\nAB8E; C; 13BE; # CHEROKEE SMALL LETTER NA\nAB8F; C; 13BF; # CHEROKEE SMALL LETTER HNA\nAB90; C; 13C0; # CHEROKEE SMALL LETTER NAH\nAB91; C; 13C1; # CHEROKEE SMALL LETTER NE\nAB92; C; 13C2; # CHEROKEE SMALL LETTER NI\nAB93; C; 13C3; # CHEROKEE SMALL LETTER NO\nAB94; C; 13C4; # CHEROKEE SMALL LETTER NU\nAB95; C; 13C5; # CHEROKEE SMALL LETTER NV\nAB96; C; 13C6; # CHEROKEE SMALL LETTER QUA\nAB97; C; 13C7; # CHEROKEE SMALL LETTER QUE\nAB98; C; 13C8; # CHEROKEE SMALL LETTER QUI\nAB99; C; 13C9; # CHEROKEE SMALL LETTER QUO\nAB9A; C; 13CA; # CHEROKEE SMALL LETTER QUU\nAB9B; C; 13CB; # CHEROKEE SMALL LETTER QUV\nAB9C; C; 13CC; # CHEROKEE SMALL LETTER SA\nAB9D; C; 13CD; # CHEROKEE SMALL LETTER S\nAB9E; C; 13CE; # CHEROKEE SMALL LETTER SE\nAB9F; C; 13CF; # CHEROKEE SMALL LETTER SI\nABA0; C; 13D0; # CHEROKEE SMALL LETTER SO\nABA1; C; 13D1; # CHEROKEE SMALL LETTER SU\nABA2; C; 13D2; # CHEROKEE SMALL LETTER SV\nABA3; C; 13D3; # CHEROKEE SMALL LETTER DA\nABA4; C; 13D4; # CHEROKEE SMALL LETTER TA\nABA5; C; 13D5; # CHEROKEE SMALL LETTER DE\nABA6; C; 13D6; # CHEROKEE SMALL LETTER TE\nABA7; C; 13D7; # CHEROKEE SMALL LETTER DI\nABA8; C; 13D8; # CHEROKEE SMALL LETTER TI\nABA9; C; 13D9; # CHEROKEE SMALL LETTER DO\nABAA; C; 13DA; # CHEROKEE SMALL LETTER DU\nABAB; C; 13DB; # CHEROKEE SMALL LETTER DV\nABAC; C; 13DC; # CHEROKEE SMALL LETTER DLA\nABAD; C; 13DD; # CHEROKEE SMALL LETTER TLA\nABAE; C; 13DE; # CHEROKEE SMALL LETTER TLE\nABAF; C; 13DF; # CHEROKEE SMALL LETTER TLI\nABB0; C; 13E0; # CHEROKEE SMALL LETTER TLO\nABB1; C; 13E1; # CHEROKEE SMALL LETTER TLU\nABB2; C; 13E2; # CHEROKEE SMALL LETTER TLV\nABB3; C; 13E3; # CHEROKEE SMALL LETTER TSA\nABB4; C; 13E4; # CHEROKEE SMALL LETTER TSE\nABB5; C; 13E5; # CHEROKEE SMALL LETTER TSI\nABB6; C; 13E6; # CHEROKEE SMALL LETTER TSO\nABB7; C; 13E7; # CHEROKEE SMALL LETTER TSU\nABB8; C; 13E8; # CHEROKEE SMALL LETTER TSV\nABB9; C; 13E9; # CHEROKEE SMALL LETTER WA\nABBA; C; 13EA; # CHEROKEE SMALL LETTER WE\nABBB; C; 13EB; # CHEROKEE SMALL LETTER WI\nABBC; C; 13EC; # CHEROKEE SMALL LETTER WO\nABBD; C; 13ED; # CHEROKEE SMALL LETTER WU\nABBE; C; 13EE; # CHEROKEE SMALL LETTER WV\nABBF; C; 13EF; # CHEROKEE SMALL LETTER YA\nFB00; F; 0066 0066; # LATIN SMALL LIGATURE FF\nFB01; F; 0066 0069; # LATIN SMALL LIGATURE FI\nFB02; F; 0066 006C; # LATIN SMALL LIGATURE FL\nFB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI\nFB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL\nFB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T\nFB05; S; FB06; # LATIN SMALL LIGATURE LONG S T\nFB06; F; 0073 0074; # LATIN SMALL LIGATURE ST\nFB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW\nFB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH\nFB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI\nFB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW\nFB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH\nFF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A\nFF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B\nFF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C\nFF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D\nFF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E\nFF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F\nFF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G\nFF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H\nFF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I\nFF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J\nFF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K\nFF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L\nFF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M\nFF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N\nFF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O\nFF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P\nFF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q\nFF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R\nFF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S\nFF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T\nFF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U\nFF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V\nFF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W\nFF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X\nFF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y\nFF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z\n10400; C; 10428; # DESERET CAPITAL LETTER LONG I\n10401; C; 10429; # DESERET CAPITAL LETTER LONG E\n10402; C; 1042A; # DESERET CAPITAL LETTER LONG A\n10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH\n10404; C; 1042C; # DESERET CAPITAL LETTER LONG O\n10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO\n10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I\n10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E\n10408; C; 10430; # DESERET CAPITAL LETTER SHORT A\n10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH\n1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O\n1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO\n1040C; C; 10434; # DESERET CAPITAL LETTER AY\n1040D; C; 10435; # DESERET CAPITAL LETTER OW\n1040E; C; 10436; # DESERET CAPITAL LETTER WU\n1040F; C; 10437; # DESERET CAPITAL LETTER YEE\n10410; C; 10438; # DESERET CAPITAL LETTER H\n10411; C; 10439; # DESERET CAPITAL LETTER PEE\n10412; C; 1043A; # DESERET CAPITAL LETTER BEE\n10413; C; 1043B; # DESERET CAPITAL LETTER TEE\n10414; C; 1043C; # DESERET CAPITAL LETTER DEE\n10415; C; 1043D; # DESERET CAPITAL LETTER CHEE\n10416; C; 1043E; # DESERET CAPITAL LETTER JEE\n10417; C; 1043F; # DESERET CAPITAL LETTER KAY\n10418; C; 10440; # DESERET CAPITAL LETTER GAY\n10419; C; 10441; # DESERET CAPITAL LETTER EF\n1041A; C; 10442; # DESERET CAPITAL LETTER VEE\n1041B; C; 10443; # DESERET CAPITAL LETTER ETH\n1041C; C; 10444; # DESERET CAPITAL LETTER THEE\n1041D; C; 10445; # DESERET CAPITAL LETTER ES\n1041E; C; 10446; # DESERET CAPITAL LETTER ZEE\n1041F; C; 10447; # DESERET CAPITAL LETTER ESH\n10420; C; 10448; # DESERET CAPITAL LETTER ZHEE\n10421; C; 10449; # DESERET CAPITAL LETTER ER\n10422; C; 1044A; # DESERET CAPITAL LETTER EL\n10423; C; 1044B; # DESERET CAPITAL LETTER EM\n10424; C; 1044C; # DESERET CAPITAL LETTER EN\n10425; C; 1044D; # DESERET CAPITAL LETTER ENG\n10426; C; 1044E; # DESERET CAPITAL LETTER OI\n10427; C; 1044F; # DESERET CAPITAL LETTER EW\n104B0; C; 104D8; # OSAGE CAPITAL LETTER A\n104B1; C; 104D9; # OSAGE CAPITAL LETTER AI\n104B2; C; 104DA; # OSAGE CAPITAL LETTER AIN\n104B3; C; 104DB; # OSAGE CAPITAL LETTER AH\n104B4; C; 104DC; # OSAGE CAPITAL LETTER BRA\n104B5; C; 104DD; # OSAGE CAPITAL LETTER CHA\n104B6; C; 104DE; # OSAGE CAPITAL LETTER EHCHA\n104B7; C; 104DF; # OSAGE CAPITAL LETTER E\n104B8; C; 104E0; # OSAGE CAPITAL LETTER EIN\n104B9; C; 104E1; # OSAGE CAPITAL LETTER HA\n104BA; C; 104E2; # OSAGE CAPITAL LETTER HYA\n104BB; C; 104E3; # OSAGE CAPITAL LETTER I\n104BC; C; 104E4; # OSAGE CAPITAL LETTER KA\n104BD; C; 104E5; # OSAGE CAPITAL LETTER EHKA\n104BE; C; 104E6; # OSAGE CAPITAL LETTER KYA\n104BF; C; 104E7; # OSAGE CAPITAL LETTER LA\n104C0; C; 104E8; # OSAGE CAPITAL LETTER MA\n104C1; C; 104E9; # OSAGE CAPITAL LETTER NA\n104C2; C; 104EA; # OSAGE CAPITAL LETTER O\n104C3; C; 104EB; # OSAGE CAPITAL LETTER OIN\n104C4; C; 104EC; # OSAGE CAPITAL LETTER PA\n104C5; C; 104ED; # OSAGE CAPITAL LETTER EHPA\n104C6; C; 104EE; # OSAGE CAPITAL LETTER SA\n104C7; C; 104EF; # OSAGE CAPITAL LETTER SHA\n104C8; C; 104F0; # OSAGE CAPITAL LETTER TA\n104C9; C; 104F1; # OSAGE CAPITAL LETTER EHTA\n104CA; C; 104F2; # OSAGE CAPITAL LETTER TSA\n104CB; C; 104F3; # OSAGE CAPITAL LETTER EHTSA\n104CC; C; 104F4; # OSAGE CAPITAL LETTER TSHA\n104CD; C; 104F5; # OSAGE CAPITAL LETTER DHA\n104CE; C; 104F6; # OSAGE CAPITAL LETTER U\n104CF; C; 104F7; # OSAGE CAPITAL LETTER WA\n104D0; C; 104F8; # OSAGE CAPITAL LETTER KHA\n104D1; C; 104F9; # OSAGE CAPITAL LETTER GHA\n104D2; C; 104FA; # OSAGE CAPITAL LETTER ZA\n104D3; C; 104FB; # OSAGE CAPITAL LETTER ZHA\n10570; C; 10597; # VITHKUQI CAPITAL LETTER A\n10571; C; 10598; # VITHKUQI CAPITAL LETTER BBE\n10572; C; 10599; # VITHKUQI CAPITAL LETTER BE\n10573; C; 1059A; # VITHKUQI CAPITAL LETTER CE\n10574; C; 1059B; # VITHKUQI CAPITAL LETTER CHE\n10575; C; 1059C; # VITHKUQI CAPITAL LETTER DE\n10576; C; 1059D; # VITHKUQI CAPITAL LETTER DHE\n10577; C; 1059E; # VITHKUQI CAPITAL LETTER EI\n10578; C; 1059F; # VITHKUQI CAPITAL LETTER E\n10579; C; 105A0; # VITHKUQI CAPITAL LETTER FE\n1057A; C; 105A1; # VITHKUQI CAPITAL LETTER GA\n1057C; C; 105A3; # VITHKUQI CAPITAL LETTER HA\n1057D; C; 105A4; # VITHKUQI CAPITAL LETTER HHA\n1057E; C; 105A5; # VITHKUQI CAPITAL LETTER I\n1057F; C; 105A6; # VITHKUQI CAPITAL LETTER IJE\n10580; C; 105A7; # VITHKUQI CAPITAL LETTER JE\n10581; C; 105A8; # VITHKUQI CAPITAL LETTER KA\n10582; C; 105A9; # VITHKUQI CAPITAL LETTER LA\n10583; C; 105AA; # VITHKUQI CAPITAL LETTER LLA\n10584; C; 105AB; # VITHKUQI CAPITAL LETTER ME\n10585; C; 105AC; # VITHKUQI CAPITAL LETTER NE\n10586; C; 105AD; # VITHKUQI CAPITAL LETTER NJE\n10587; C; 105AE; # VITHKUQI CAPITAL LETTER O\n10588; C; 105AF; # VITHKUQI CAPITAL LETTER PE\n10589; C; 105B0; # VITHKUQI CAPITAL LETTER QA\n1058A; C; 105B1; # VITHKUQI CAPITAL LETTER RE\n1058C; C; 105B3; # VITHKUQI CAPITAL LETTER SE\n1058D; C; 105B4; # VITHKUQI CAPITAL LETTER SHE\n1058E; C; 105B5; # VITHKUQI CAPITAL LETTER TE\n1058F; C; 105B6; # VITHKUQI CAPITAL LETTER THE\n10590; C; 105B7; # VITHKUQI CAPITAL LETTER U\n10591; C; 105B8; # VITHKUQI CAPITAL LETTER VE\n10592; C; 105B9; # VITHKUQI CAPITAL LETTER XE\n10594; C; 105BB; # VITHKUQI CAPITAL LETTER Y\n10595; C; 105BC; # VITHKUQI CAPITAL LETTER ZE\n10C80; C; 10CC0; # OLD HUNGARIAN CAPITAL LETTER A\n10C81; C; 10CC1; # OLD HUNGARIAN CAPITAL LETTER AA\n10C82; C; 10CC2; # OLD HUNGARIAN CAPITAL LETTER EB\n10C83; C; 10CC3; # OLD HUNGARIAN CAPITAL LETTER AMB\n10C84; C; 10CC4; # OLD HUNGARIAN CAPITAL LETTER EC\n10C85; C; 10CC5; # OLD HUNGARIAN CAPITAL LETTER ENC\n10C86; C; 10CC6; # OLD HUNGARIAN CAPITAL LETTER ECS\n10C87; C; 10CC7; # OLD HUNGARIAN CAPITAL LETTER ED\n10C88; C; 10CC8; # OLD HUNGARIAN CAPITAL LETTER AND\n10C89; C; 10CC9; # OLD HUNGARIAN CAPITAL LETTER E\n10C8A; C; 10CCA; # OLD HUNGARIAN CAPITAL LETTER CLOSE E\n10C8B; C; 10CCB; # OLD HUNGARIAN CAPITAL LETTER EE\n10C8C; C; 10CCC; # OLD HUNGARIAN CAPITAL LETTER EF\n10C8D; C; 10CCD; # OLD HUNGARIAN CAPITAL LETTER EG\n10C8E; C; 10CCE; # OLD HUNGARIAN CAPITAL LETTER EGY\n10C8F; C; 10CCF; # OLD HUNGARIAN CAPITAL LETTER EH\n10C90; C; 10CD0; # OLD HUNGARIAN CAPITAL LETTER I\n10C91; C; 10CD1; # OLD HUNGARIAN CAPITAL LETTER II\n10C92; C; 10CD2; # OLD HUNGARIAN CAPITAL LETTER EJ\n10C93; C; 10CD3; # OLD HUNGARIAN CAPITAL LETTER EK\n10C94; C; 10CD4; # OLD HUNGARIAN CAPITAL LETTER AK\n10C95; C; 10CD5; # OLD HUNGARIAN CAPITAL LETTER UNK\n10C96; C; 10CD6; # OLD HUNGARIAN CAPITAL LETTER EL\n10C97; C; 10CD7; # OLD HUNGARIAN CAPITAL LETTER ELY\n10C98; C; 10CD8; # OLD HUNGARIAN CAPITAL LETTER EM\n10C99; C; 10CD9; # OLD HUNGARIAN CAPITAL LETTER EN\n10C9A; C; 10CDA; # OLD HUNGARIAN CAPITAL LETTER ENY\n10C9B; C; 10CDB; # OLD HUNGARIAN CAPITAL LETTER O\n10C9C; C; 10CDC; # OLD HUNGARIAN CAPITAL LETTER OO\n10C9D; C; 10CDD; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE\n10C9E; C; 10CDE; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE\n10C9F; C; 10CDF; # OLD HUNGARIAN CAPITAL LETTER OEE\n10CA0; C; 10CE0; # OLD HUNGARIAN CAPITAL LETTER EP\n10CA1; C; 10CE1; # OLD HUNGARIAN CAPITAL LETTER EMP\n10CA2; C; 10CE2; # OLD HUNGARIAN CAPITAL LETTER ER\n10CA3; C; 10CE3; # OLD HUNGARIAN CAPITAL LETTER SHORT ER\n10CA4; C; 10CE4; # OLD HUNGARIAN CAPITAL LETTER ES\n10CA5; C; 10CE5; # OLD HUNGARIAN CAPITAL LETTER ESZ\n10CA6; C; 10CE6; # OLD HUNGARIAN CAPITAL LETTER ET\n10CA7; C; 10CE7; # OLD HUNGARIAN CAPITAL LETTER ENT\n10CA8; C; 10CE8; # OLD HUNGARIAN CAPITAL LETTER ETY\n10CA9; C; 10CE9; # OLD HUNGARIAN CAPITAL LETTER ECH\n10CAA; C; 10CEA; # OLD HUNGARIAN CAPITAL LETTER U\n10CAB; C; 10CEB; # OLD HUNGARIAN CAPITAL LETTER UU\n10CAC; C; 10CEC; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE\n10CAD; C; 10CED; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE\n10CAE; C; 10CEE; # OLD HUNGARIAN CAPITAL LETTER EV\n10CAF; C; 10CEF; # OLD HUNGARIAN CAPITAL LETTER EZ\n10CB0; C; 10CF0; # OLD HUNGARIAN CAPITAL LETTER EZS\n10CB1; C; 10CF1; # OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN\n10CB2; C; 10CF2; # OLD HUNGARIAN CAPITAL LETTER US\n10D50; C; 10D70; # GARAY CAPITAL LETTER A\n10D51; C; 10D71; # GARAY CAPITAL LETTER CA\n10D52; C; 10D72; # GARAY CAPITAL LETTER MA\n10D53; C; 10D73; # GARAY CAPITAL LETTER KA\n10D54; C; 10D74; # GARAY CAPITAL LETTER BA\n10D55; C; 10D75; # GARAY CAPITAL LETTER JA\n10D56; C; 10D76; # GARAY CAPITAL LETTER SA\n10D57; C; 10D77; # GARAY CAPITAL LETTER WA\n10D58; C; 10D78; # GARAY CAPITAL LETTER LA\n10D59; C; 10D79; # GARAY CAPITAL LETTER GA\n10D5A; C; 10D7A; # GARAY CAPITAL LETTER DA\n10D5B; C; 10D7B; # GARAY CAPITAL LETTER XA\n10D5C; C; 10D7C; # GARAY CAPITAL LETTER YA\n10D5D; C; 10D7D; # GARAY CAPITAL LETTER TA\n10D5E; C; 10D7E; # GARAY CAPITAL LETTER RA\n10D5F; C; 10D7F; # GARAY CAPITAL LETTER NYA\n10D60; C; 10D80; # GARAY CAPITAL LETTER FA\n10D61; C; 10D81; # GARAY CAPITAL LETTER NA\n10D62; C; 10D82; # GARAY CAPITAL LETTER PA\n10D63; C; 10D83; # GARAY CAPITAL LETTER HA\n10D64; C; 10D84; # GARAY CAPITAL LETTER OLD KA\n10D65; C; 10D85; # GARAY CAPITAL LETTER OLD NA\n118A0; C; 118C0; # WARANG CITI CAPITAL LETTER NGAA\n118A1; C; 118C1; # WARANG CITI CAPITAL LETTER A\n118A2; C; 118C2; # WARANG CITI CAPITAL LETTER WI\n118A3; C; 118C3; # WARANG CITI CAPITAL LETTER YU\n118A4; C; 118C4; # WARANG CITI CAPITAL LETTER YA\n118A5; C; 118C5; # WARANG CITI CAPITAL LETTER YO\n118A6; C; 118C6; # WARANG CITI CAPITAL LETTER II\n118A7; C; 118C7; # WARANG CITI CAPITAL LETTER UU\n118A8; C; 118C8; # WARANG CITI CAPITAL LETTER E\n118A9; C; 118C9; # WARANG CITI CAPITAL LETTER O\n118AA; C; 118CA; # WARANG CITI CAPITAL LETTER ANG\n118AB; C; 118CB; # WARANG CITI CAPITAL LETTER GA\n118AC; C; 118CC; # WARANG CITI CAPITAL LETTER KO\n118AD; C; 118CD; # WARANG CITI CAPITAL LETTER ENY\n118AE; C; 118CE; # WARANG CITI CAPITAL LETTER YUJ\n118AF; C; 118CF; # WARANG CITI CAPITAL LETTER UC\n118B0; C; 118D0; # WARANG CITI CAPITAL LETTER ENN\n118B1; C; 118D1; # WARANG CITI CAPITAL LETTER ODD\n118B2; C; 118D2; # WARANG CITI CAPITAL LETTER TTE\n118B3; C; 118D3; # WARANG CITI CAPITAL LETTER NUNG\n118B4; C; 118D4; # WARANG CITI CAPITAL LETTER DA\n118B5; C; 118D5; # WARANG CITI CAPITAL LETTER AT\n118B6; C; 118D6; # WARANG CITI CAPITAL LETTER AM\n118B7; C; 118D7; # WARANG CITI CAPITAL LETTER BU\n118B8; C; 118D8; # WARANG CITI CAPITAL LETTER PU\n118B9; C; 118D9; # WARANG CITI CAPITAL LETTER HIYO\n118BA; C; 118DA; # WARANG CITI CAPITAL LETTER HOLO\n118BB; C; 118DB; # WARANG CITI CAPITAL LETTER HORR\n118BC; C; 118DC; # WARANG CITI CAPITAL LETTER HAR\n118BD; C; 118DD; # WARANG CITI CAPITAL LETTER SSUU\n118BE; C; 118DE; # WARANG CITI CAPITAL LETTER SII\n118BF; C; 118DF; # WARANG CITI CAPITAL LETTER VIYO\n16E40; C; 16E60; # MEDEFAIDRIN CAPITAL LETTER M\n16E41; C; 16E61; # MEDEFAIDRIN CAPITAL LETTER S\n16E42; C; 16E62; # MEDEFAIDRIN CAPITAL LETTER V\n16E43; C; 16E63; # MEDEFAIDRIN CAPITAL LETTER W\n16E44; C; 16E64; # MEDEFAIDRIN CAPITAL LETTER ATIU\n16E45; C; 16E65; # MEDEFAIDRIN CAPITAL LETTER Z\n16E46; C; 16E66; # MEDEFAIDRIN CAPITAL LETTER KP\n16E47; C; 16E67; # MEDEFAIDRIN CAPITAL LETTER P\n16E48; C; 16E68; # MEDEFAIDRIN CAPITAL LETTER T\n16E49; C; 16E69; # MEDEFAIDRIN CAPITAL LETTER G\n16E4A; C; 16E6A; # MEDEFAIDRIN CAPITAL LETTER F\n16E4B; C; 16E6B; # MEDEFAIDRIN CAPITAL LETTER I\n16E4C; C; 16E6C; # MEDEFAIDRIN CAPITAL LETTER K\n16E4D; C; 16E6D; # MEDEFAIDRIN CAPITAL LETTER A\n16E4E; C; 16E6E; # MEDEFAIDRIN CAPITAL LETTER J\n16E4F; C; 16E6F; # MEDEFAIDRIN CAPITAL LETTER E\n16E50; C; 16E70; # MEDEFAIDRIN CAPITAL LETTER B\n16E51; C; 16E71; # MEDEFAIDRIN CAPITAL LETTER C\n16E52; C; 16E72; # MEDEFAIDRIN CAPITAL LETTER U\n16E53; C; 16E73; # MEDEFAIDRIN CAPITAL LETTER YU\n16E54; C; 16E74; # MEDEFAIDRIN CAPITAL LETTER L\n16E55; C; 16E75; # MEDEFAIDRIN CAPITAL LETTER Q\n16E56; C; 16E76; # MEDEFAIDRIN CAPITAL LETTER HP\n16E57; C; 16E77; # MEDEFAIDRIN CAPITAL LETTER NY\n16E58; C; 16E78; # MEDEFAIDRIN CAPITAL LETTER X\n16E59; C; 16E79; # MEDEFAIDRIN CAPITAL LETTER D\n16E5A; C; 16E7A; # MEDEFAIDRIN CAPITAL LETTER OE\n16E5B; C; 16E7B; # MEDEFAIDRIN CAPITAL LETTER N\n16E5C; C; 16E7C; # MEDEFAIDRIN CAPITAL LETTER R\n16E5D; C; 16E7D; # MEDEFAIDRIN CAPITAL LETTER O\n16E5E; C; 16E7E; # MEDEFAIDRIN CAPITAL LETTER AI\n16E5F; C; 16E7F; # MEDEFAIDRIN CAPITAL LETTER Y\n16EA0; C; 16EBB; # BERIA ERFE CAPITAL LETTER ARKAB\n16EA1; C; 16EBC; # BERIA ERFE CAPITAL LETTER BASIGNA\n16EA2; C; 16EBD; # BERIA ERFE CAPITAL LETTER DARBAI\n16EA3; C; 16EBE; # BERIA ERFE CAPITAL LETTER EH\n16EA4; C; 16EBF; # BERIA ERFE CAPITAL LETTER FITKO\n16EA5; C; 16EC0; # BERIA ERFE CAPITAL LETTER GOWAY\n16EA6; C; 16EC1; # BERIA ERFE CAPITAL LETTER HIRDEABO\n16EA7; C; 16EC2; # BERIA ERFE CAPITAL LETTER I\n16EA8; C; 16EC3; # BERIA ERFE CAPITAL LETTER DJAI\n16EA9; C; 16EC4; # BERIA ERFE CAPITAL LETTER KOBO\n16EAA; C; 16EC5; # BERIA ERFE CAPITAL LETTER LAKKO\n16EAB; C; 16EC6; # BERIA ERFE CAPITAL LETTER MERI\n16EAC; C; 16EC7; # BERIA ERFE CAPITAL LETTER NINI\n16EAD; C; 16EC8; # BERIA ERFE CAPITAL LETTER GNA\n16EAE; C; 16EC9; # BERIA ERFE CAPITAL LETTER NGAY\n16EAF; C; 16ECA; # BERIA ERFE CAPITAL LETTER OI\n16EB0; C; 16ECB; # BERIA ERFE CAPITAL LETTER PI\n16EB1; C; 16ECC; # BERIA ERFE CAPITAL LETTER ERIGO\n16EB2; C; 16ECD; # BERIA ERFE CAPITAL LETTER ERIGO TAMURA\n16EB3; C; 16ECE; # BERIA ERFE CAPITAL LETTER SERI\n16EB4; C; 16ECF; # BERIA ERFE CAPITAL LETTER SHEP\n16EB5; C; 16ED0; # BERIA ERFE CAPITAL LETTER TATASOUE\n16EB6; C; 16ED1; # BERIA ERFE CAPITAL LETTER UI\n16EB7; C; 16ED2; # BERIA ERFE CAPITAL LETTER WASSE\n16EB8; C; 16ED3; # BERIA ERFE CAPITAL LETTER AY\n1E900; C; 1E922; # ADLAM CAPITAL LETTER ALIF\n1E901; C; 1E923; # ADLAM CAPITAL LETTER DAALI\n1E902; C; 1E924; # ADLAM CAPITAL LETTER LAAM\n1E903; C; 1E925; # ADLAM CAPITAL LETTER MIIM\n1E904; C; 1E926; # ADLAM CAPITAL LETTER BA\n1E905; C; 1E927; # ADLAM CAPITAL LETTER SINNYIIYHE\n1E906; C; 1E928; # ADLAM CAPITAL LETTER PE\n1E907; C; 1E929; # ADLAM CAPITAL LETTER BHE\n1E908; C; 1E92A; # ADLAM CAPITAL LETTER RA\n1E909; C; 1E92B; # ADLAM CAPITAL LETTER E\n1E90A; C; 1E92C; # ADLAM CAPITAL LETTER FA\n1E90B; C; 1E92D; # ADLAM CAPITAL LETTER I\n1E90C; C; 1E92E; # ADLAM CAPITAL LETTER O\n1E90D; C; 1E92F; # ADLAM CAPITAL LETTER DHA\n1E90E; C; 1E930; # ADLAM CAPITAL LETTER YHE\n1E90F; C; 1E931; # ADLAM CAPITAL LETTER WAW\n1E910; C; 1E932; # ADLAM CAPITAL LETTER NUN\n1E911; C; 1E933; # ADLAM CAPITAL LETTER KAF\n1E912; C; 1E934; # ADLAM CAPITAL LETTER YA\n1E913; C; 1E935; # ADLAM CAPITAL LETTER U\n1E914; C; 1E936; # ADLAM CAPITAL LETTER JIIM\n1E915; C; 1E937; # ADLAM CAPITAL LETTER CHI\n1E916; C; 1E938; # ADLAM CAPITAL LETTER HA\n1E917; C; 1E939; # ADLAM CAPITAL LETTER QAAF\n1E918; C; 1E93A; # ADLAM CAPITAL LETTER GA\n1E919; C; 1E93B; # ADLAM CAPITAL LETTER NYA\n1E91A; C; 1E93C; # ADLAM CAPITAL LETTER TU\n1E91B; C; 1E93D; # ADLAM CAPITAL LETTER NHA\n1E91C; C; 1E93E; # ADLAM CAPITAL LETTER VA\n1E91D; C; 1E93F; # ADLAM CAPITAL LETTER KHA\n1E91E; C; 1E940; # ADLAM CAPITAL LETTER GBE\n1E91F; C; 1E941; # ADLAM CAPITAL LETTER ZAL\n1E920; C; 1E942; # ADLAM CAPITAL LETTER KPO\n1E921; C; 1E943; # ADLAM CAPITAL LETTER SHA\n#\n# EOF\n"
  },
  {
    "path": "maint/Unicode.tables/DerivedBidiClass.txt",
    "content": "# DerivedBidiClass-17.0.0.txt\n# Date: 2025-07-24, 00:12:44 GMT\n# © 2025 Unicode®, Inc.\n# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.\n# For terms of use and license, see https://www.unicode.org/terms_of_use.html\n#\n# Unicode Character Database\n#   For documentation, see https://www.unicode.org/reports/tr44/\n\n# ================================================\n\n# Bidi Class (listing UnicodeData.txt, field 4: see UAX #44: https://www.unicode.org/reports/tr44/)\n# Unlike other properties, unassigned code points in blocks\n# reserved for right-to-left scripts are given either values R or AL,\n# and unassigned code points in the Currency Symbols block are given the value ET.\n# For details see the @missing lines below.\n#\n# The unassigned code points that default to BN have one of the following properties:\n#     Default_Ignorable_Code_Point\n#     Noncharacter_Code_Point\n#\n# For all other cases:\n\n#  All code points not explicitly listed for Bidi_Class\n#  have the value Left_To_Right (L).\n\n# @missing: 0000..10FFFF; Left_To_Right\n\n# 0590..05FF Hebrew\n# @missing: 0590..05FF; Right_To_Left\n\n# 0600..06FF Arabic\n# 0700..074F Syriac\n# 0750..077F Arabic_Supplement\n# 0780..07BF Thaana\n# @missing: 0600..07BF; Arabic_Letter\n\n# 07C0..07FF NKo\n# 0800..083F Samaritan\n# 0840..085F Mandaic\n# @missing: 07C0..085F; Right_To_Left\n\n# 0860..086F Syriac_Supplement\n# 0870..089F Arabic_Extended_B\n# 08A0..08FF Arabic_Extended_A\n# @missing: 0860..08FF; Arabic_Letter\n\n# 20A0..20CF Currency_Symbols\n# @missing: 20A0..20CF; European_Terminator\n\n# FB00..FB4F Alphabetic_Presentation_Forms (partial)\n# @missing: FB1D..FB4F; Right_To_Left\n\n# FB50..FDFF Arabic_Presentation_Forms_A (partial)\n# @missing: FB50..FDCF; Arabic_Letter\n\n# FB50..FDFF Arabic_Presentation_Forms_A (partial)\n# @missing: FDF0..FDFF; Arabic_Letter\n\n# FE70..FEFF Arabic_Presentation_Forms_B\n# @missing: FE70..FEFF; Arabic_Letter\n\n# 10800..1083F Cypriot_Syllabary\n# 10840..1085F Imperial_Aramaic\n# 10860..1087F Palmyrene\n# 10880..108AF Nabataean\n# 108E0..108FF Hatran\n# 10900..1091F Phoenician\n# 10920..1093F Lydian\n# 10940..1095F Sidetic\n# 10980..1099F Meroitic_Hieroglyphs\n# 109A0..109FF Meroitic_Cursive\n# 10A00..10A5F Kharoshthi\n# 10A60..10A7F Old_South_Arabian\n# 10A80..10A9F Old_North_Arabian\n# 10AC0..10AFF Manichaean\n# 10B00..10B3F Avestan\n# 10B40..10B5F Inscriptional_Parthian\n# 10B60..10B7F Inscriptional_Pahlavi\n# 10B80..10BAF Psalter_Pahlavi\n# 10C00..10C4F Old_Turkic\n# 10C80..10CFF Old_Hungarian\n# @missing: 10800..10CFF; Right_To_Left\n\n# 10D00..10D3F Hanifi_Rohingya\n# @missing: 10D00..10D3F; Arabic_Letter\n\n# 10D40..10D8F Garay\n# 10E60..10E7F Rumi_Numeral_Symbols\n# 10E80..10EBF Yezidi\n# @missing: 10D40..10EBF; Right_To_Left\n\n# 10EC0..10EFF Arabic_Extended_C\n# @missing: 10EC0..10EFF; Arabic_Letter\n\n# 10F00..10F2F Old_Sogdian\n# @missing: 10F00..10F2F; Right_To_Left\n\n# 10F30..10F6F Sogdian\n# @missing: 10F30..10F6F; Arabic_Letter\n\n# 10F70..10FAF Old_Uyghur\n# 10FB0..10FDF Chorasmian\n# 10FE0..10FFF Elymaic\n# @missing: 10F70..10FFF; Right_To_Left\n\n# 1E800..1E8DF Mende_Kikakui\n# 1E900..1E95F Adlam\n# @missing: 1E800..1EC6F; Right_To_Left\n\n# 1EC70..1ECBF Indic_Siyaq_Numbers\n# @missing: 1EC70..1ECBF; Arabic_Letter\n\n# @missing: 1ECC0..1ECFF; Right_To_Left\n\n# 1ED00..1ED4F Ottoman_Siyaq_Numbers\n# @missing: 1ED00..1ED4F; Arabic_Letter\n\n# @missing: 1ED50..1EDFF; Right_To_Left\n\n# 1EE00..1EEFF Arabic_Mathematical_Alphabetic_Symbols\n# @missing: 1EE00..1EEFF; Arabic_Letter\n\n# @missing: 1EF00..1EFFF; Right_To_Left\n\n# ================================================\n\n# Bidi_Class=Left_To_Right\n\n0041..005A    ; L # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n0061..007A    ; L # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00AA          ; L # Lo       FEMININE ORDINAL INDICATOR\n00B5          ; L # L&       MICRO SIGN\n00BA          ; L # Lo       MASCULINE ORDINAL INDICATOR\n00C0..00D6    ; L # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00F6    ; L # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..01BA    ; L # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL\n01BB          ; L # Lo       LATIN LETTER TWO WITH STROKE\n01BC..01BF    ; L # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN\n01C0..01C3    ; L # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK\n01C4..0293    ; L # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL\n0294..0295    ; L # Lo   [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE\n0296..02AF    ; L # L&  [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL\n02B0..02B8    ; L # Lm   [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y\n02BB..02C1    ; L # Lm   [7] MODIFIER LETTER TURNED COMMA..MODIFIER LETTER REVERSED GLOTTAL STOP\n02D0..02D1    ; L # Lm   [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON\n02E0..02E4    ; L # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n02EE          ; L # Lm       MODIFIER LETTER DOUBLE APOSTROPHE\n0370..0373    ; L # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI\n0376..0377    ; L # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037A          ; L # Lm       GREEK YPOGEGRAMMENI\n037B..037D    ; L # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n037F          ; L # L&       GREEK CAPITAL LETTER YOT\n0386          ; L # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0388..038A    ; L # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; L # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..03A1    ; L # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO\n03A3..03F5    ; L # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL\n03F7..0481    ; L # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA\n0482          ; L # So       CYRILLIC THOUSANDS SIGN\n048A..052F    ; L # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER\n0531..0556    ; L # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n0559          ; L # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING\n055A..055F    ; L # Po   [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK\n0560..0588    ; L # L&  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE\n0589          ; L # Po       ARMENIAN FULL STOP\n0903          ; L # Mc       DEVANAGARI SIGN VISARGA\n0904..0939    ; L # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA\n093B          ; L # Mc       DEVANAGARI VOWEL SIGN OOE\n093D          ; L # Lo       DEVANAGARI SIGN AVAGRAHA\n093E..0940    ; L # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\n0949..094C    ; L # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\n094E..094F    ; L # Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\n0950          ; L # Lo       DEVANAGARI OM\n0958..0961    ; L # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL\n0964..0965    ; L # Po   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA\n0966..096F    ; L # Nd  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE\n0970          ; L # Po       DEVANAGARI ABBREVIATION SIGN\n0971          ; L # Lm       DEVANAGARI SIGN HIGH SPACING DOT\n0972..0980    ; L # Lo  [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI\n0982..0983    ; L # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\n0985..098C    ; L # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L\n098F..0990    ; L # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI\n0993..09A8    ; L # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA\n09AA..09B0    ; L # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA\n09B2          ; L # Lo       BENGALI LETTER LA\n09B6..09B9    ; L # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA\n09BD          ; L # Lo       BENGALI SIGN AVAGRAHA\n09BE..09C0    ; L # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II\n09C7..09C8    ; L # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\n09CB..09CC    ; L # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\n09CE          ; L # Lo       BENGALI LETTER KHANDA TA\n09D7          ; L # Mc       BENGALI AU LENGTH MARK\n09DC..09DD    ; L # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA\n09DF..09E1    ; L # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL\n09E6..09EF    ; L # Nd  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE\n09F0..09F1    ; L # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL\n09F4..09F9    ; L # No   [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN\n09FA          ; L # So       BENGALI ISSHAR\n09FC          ; L # Lo       BENGALI LETTER VEDIC ANUSVARA\n09FD          ; L # Po       BENGALI ABBREVIATION SIGN\n0A03          ; L # Mc       GURMUKHI SIGN VISARGA\n0A05..0A0A    ; L # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU\n0A0F..0A10    ; L # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI\n0A13..0A28    ; L # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA\n0A2A..0A30    ; L # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA\n0A32..0A33    ; L # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA\n0A35..0A36    ; L # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA\n0A38..0A39    ; L # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA\n0A3E..0A40    ; L # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\n0A59..0A5C    ; L # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA\n0A5E          ; L # Lo       GURMUKHI LETTER FA\n0A66..0A6F    ; L # Nd  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE\n0A72..0A74    ; L # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR\n0A76          ; L # Po       GURMUKHI ABBREVIATION SIGN\n0A83          ; L # Mc       GUJARATI SIGN VISARGA\n0A85..0A8D    ; L # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E\n0A8F..0A91    ; L # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O\n0A93..0AA8    ; L # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA\n0AAA..0AB0    ; L # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA\n0AB2..0AB3    ; L # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA\n0AB5..0AB9    ; L # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA\n0ABD          ; L # Lo       GUJARATI SIGN AVAGRAHA\n0ABE..0AC0    ; L # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\n0AC9          ; L # Mc       GUJARATI VOWEL SIGN CANDRA O\n0ACB..0ACC    ; L # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\n0AD0          ; L # Lo       GUJARATI OM\n0AE0..0AE1    ; L # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL\n0AE6..0AEF    ; L # Nd  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE\n0AF0          ; L # Po       GUJARATI ABBREVIATION SIGN\n0AF9          ; L # Lo       GUJARATI LETTER ZHA\n0B02..0B03    ; L # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\n0B05..0B0C    ; L # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L\n0B0F..0B10    ; L # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI\n0B13..0B28    ; L # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA\n0B2A..0B30    ; L # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA\n0B32..0B33    ; L # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA\n0B35..0B39    ; L # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA\n0B3D          ; L # Lo       ORIYA SIGN AVAGRAHA\n0B3E          ; L # Mc       ORIYA VOWEL SIGN AA\n0B40          ; L # Mc       ORIYA VOWEL SIGN II\n0B47..0B48    ; L # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\n0B4B..0B4C    ; L # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\n0B57          ; L # Mc       ORIYA AU LENGTH MARK\n0B5C..0B5D    ; L # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA\n0B5F..0B61    ; L # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL\n0B66..0B6F    ; L # Nd  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE\n0B70          ; L # So       ORIYA ISSHAR\n0B71          ; L # Lo       ORIYA LETTER WA\n0B72..0B77    ; L # No   [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS\n0B83          ; L # Lo       TAMIL SIGN VISARGA\n0B85..0B8A    ; L # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU\n0B8E..0B90    ; L # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI\n0B92..0B95    ; L # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA\n0B99..0B9A    ; L # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA\n0B9C          ; L # Lo       TAMIL LETTER JA\n0B9E..0B9F    ; L # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA\n0BA3..0BA4    ; L # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA\n0BA8..0BAA    ; L # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA\n0BAE..0BB9    ; L # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA\n0BBE..0BBF    ; L # Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I\n0BC1..0BC2    ; L # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\n0BC6..0BC8    ; L # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\n0BCA..0BCC    ; L # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\n0BD0          ; L # Lo       TAMIL OM\n0BD7          ; L # Mc       TAMIL AU LENGTH MARK\n0BE6..0BEF    ; L # Nd  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE\n0BF0..0BF2    ; L # No   [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND\n0C01..0C03    ; L # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\n0C05..0C0C    ; L # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L\n0C0E..0C10    ; L # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI\n0C12..0C28    ; L # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA\n0C2A..0C39    ; L # Lo  [16] TELUGU LETTER PA..TELUGU LETTER HA\n0C3D          ; L # Lo       TELUGU SIGN AVAGRAHA\n0C41..0C44    ; L # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\n0C58..0C5A    ; L # Lo   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA\n0C5C..0C5D    ; L # Lo   [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU\n0C60..0C61    ; L # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL\n0C66..0C6F    ; L # Nd  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE\n0C77          ; L # Po       TELUGU SIGN SIDDHAM\n0C7F          ; L # So       TELUGU SIGN TUUMU\n0C80          ; L # Lo       KANNADA SIGN SPACING CANDRABINDU\n0C82..0C83    ; L # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\n0C84          ; L # Po       KANNADA SIGN SIDDHAM\n0C85..0C8C    ; L # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L\n0C8E..0C90    ; L # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI\n0C92..0CA8    ; L # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA\n0CAA..0CB3    ; L # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA\n0CB5..0CB9    ; L # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA\n0CBD          ; L # Lo       KANNADA SIGN AVAGRAHA\n0CBE          ; L # Mc       KANNADA VOWEL SIGN AA\n0CBF          ; L # Mn       KANNADA VOWEL SIGN I\n0CC0..0CC4    ; L # Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR\n0CC6          ; L # Mn       KANNADA VOWEL SIGN E\n0CC7..0CC8    ; L # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n0CCA..0CCB    ; L # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n0CD5..0CD6    ; L # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n0CDC..0CDE    ; L # Lo   [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA\n0CE0..0CE1    ; L # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL\n0CE6..0CEF    ; L # Nd  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE\n0CF1..0CF2    ; L # Lo   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA\n0CF3          ; L # Mc       KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT\n0D02..0D03    ; L # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\n0D04..0D0C    ; L # Lo   [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L\n0D0E..0D10    ; L # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI\n0D12..0D3A    ; L # Lo  [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA\n0D3D          ; L # Lo       MALAYALAM SIGN AVAGRAHA\n0D3E..0D40    ; L # Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II\n0D46..0D48    ; L # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\n0D4A..0D4C    ; L # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\n0D4E          ; L # Lo       MALAYALAM LETTER DOT REPH\n0D4F          ; L # So       MALAYALAM SIGN PARA\n0D54..0D56    ; L # Lo   [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL\n0D57          ; L # Mc       MALAYALAM AU LENGTH MARK\n0D58..0D5E    ; L # No   [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH\n0D5F..0D61    ; L # Lo   [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL\n0D66..0D6F    ; L # Nd  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE\n0D70..0D78    ; L # No   [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS\n0D79          ; L # So       MALAYALAM DATE MARK\n0D7A..0D7F    ; L # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K\n0D82..0D83    ; L # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\n0D85..0D96    ; L # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA\n0D9A..0DB1    ; L # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA\n0DB3..0DBB    ; L # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA\n0DBD          ; L # Lo       SINHALA LETTER DANTAJA LAYANNA\n0DC0..0DC6    ; L # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA\n0DCF..0DD1    ; L # Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\n0DD8..0DDF    ; L # Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA\n0DE6..0DEF    ; L # Nd  [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE\n0DF2..0DF3    ; L # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\n0DF4          ; L # Po       SINHALA PUNCTUATION KUNDDALIYA\n0E01..0E30    ; L # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A\n0E32..0E33    ; L # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM\n0E40..0E45    ; L # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO\n0E46          ; L # Lm       THAI CHARACTER MAIYAMOK\n0E4F          ; L # Po       THAI CHARACTER FONGMAN\n0E50..0E59    ; L # Nd  [10] THAI DIGIT ZERO..THAI DIGIT NINE\n0E5A..0E5B    ; L # Po   [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT\n0E81..0E82    ; L # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG\n0E84          ; L # Lo       LAO LETTER KHO TAM\n0E86..0E8A    ; L # Lo   [5] LAO LETTER PALI GHA..LAO LETTER SO TAM\n0E8C..0EA3    ; L # Lo  [24] LAO LETTER PALI JHA..LAO LETTER LO LING\n0EA5          ; L # Lo       LAO LETTER LO LOOT\n0EA7..0EB0    ; L # Lo  [10] LAO LETTER WO..LAO VOWEL SIGN A\n0EB2..0EB3    ; L # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM\n0EBD          ; L # Lo       LAO SEMIVOWEL SIGN NYO\n0EC0..0EC4    ; L # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI\n0EC6          ; L # Lm       LAO KO LA\n0ED0..0ED9    ; L # Nd  [10] LAO DIGIT ZERO..LAO DIGIT NINE\n0EDC..0EDF    ; L # Lo   [4] LAO HO NO..LAO LETTER KHMU NYO\n0F00          ; L # Lo       TIBETAN SYLLABLE OM\n0F01..0F03    ; L # So   [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA\n0F04..0F12    ; L # Po  [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD\n0F13          ; L # So       TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN\n0F14          ; L # Po       TIBETAN MARK GTER TSHEG\n0F15..0F17    ; L # So   [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS\n0F1A..0F1F    ; L # So   [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG\n0F20..0F29    ; L # Nd  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE\n0F2A..0F33    ; L # No  [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO\n0F34          ; L # So       TIBETAN MARK BSDUS RTAGS\n0F36          ; L # So       TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN\n0F38          ; L # So       TIBETAN MARK CHE MGO\n0F3E..0F3F    ; L # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES\n0F40..0F47    ; L # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA\n0F49..0F6C    ; L # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA\n0F7F          ; L # Mc       TIBETAN SIGN RNAM BCAD\n0F85          ; L # Po       TIBETAN MARK PALUTA\n0F88..0F8C    ; L # Lo   [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN\n0FBE..0FC5    ; L # So   [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE\n0FC7..0FCC    ; L # So   [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL\n0FCE..0FCF    ; L # So   [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM\n0FD0..0FD4    ; L # Po   [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA\n0FD5..0FD8    ; L # So   [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS\n0FD9..0FDA    ; L # Po   [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS\n1000..102A    ; L # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU\n102B..102C    ; L # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA\n1031          ; L # Mc       MYANMAR VOWEL SIGN E\n1038          ; L # Mc       MYANMAR SIGN VISARGA\n103B..103C    ; L # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\n103F          ; L # Lo       MYANMAR LETTER GREAT SA\n1040..1049    ; L # Nd  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE\n104A..104F    ; L # Po   [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE\n1050..1055    ; L # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL\n1056..1057    ; L # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\n105A..105D    ; L # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE\n1061          ; L # Lo       MYANMAR LETTER SGAW KAREN SHA\n1062..1064    ; L # Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO\n1065..1066    ; L # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA\n1067..106D    ; L # Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5\n106E..1070    ; L # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA\n1075..1081    ; L # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA\n1083..1084    ; L # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E\n1087..108C    ; L # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3\n108E          ; L # Lo       MYANMAR LETTER RUMAI PALAUNG FA\n108F          ; L # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5\n1090..1099    ; L # Nd  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE\n109A..109C    ; L # Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A\n109E..109F    ; L # So   [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION\n10A0..10C5    ; L # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; L # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; L # L&       GEORGIAN CAPITAL LETTER AEN\n10D0..10FA    ; L # L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FB          ; L # Po       GEORGIAN PARAGRAPH SEPARATOR\n10FC          ; L # Lm       MODIFIER LETTER GEORGIAN NAR\n10FD..10FF    ; L # L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n1100..1248    ; L # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA\n124A..124D    ; L # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE\n1250..1256    ; L # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO\n1258          ; L # Lo       ETHIOPIC SYLLABLE QHWA\n125A..125D    ; L # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE\n1260..1288    ; L # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA\n128A..128D    ; L # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE\n1290..12B0    ; L # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA\n12B2..12B5    ; L # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE\n12B8..12BE    ; L # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO\n12C0          ; L # Lo       ETHIOPIC SYLLABLE KXWA\n12C2..12C5    ; L # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE\n12C8..12D6    ; L # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O\n12D8..1310    ; L # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA\n1312..1315    ; L # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE\n1318..135A    ; L # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA\n1360..1368    ; L # Po   [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR\n1369..137C    ; L # No  [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND\n1380..138F    ; L # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE\n13A0..13F5    ; L # L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n13F8..13FD    ; L # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1401..166C    ; L # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA\n166D          ; L # So       CANADIAN SYLLABICS CHI SIGN\n166E          ; L # Po       CANADIAN SYLLABICS FULL STOP\n166F..167F    ; L # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W\n1681..169A    ; L # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH\n16A0..16EA    ; L # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X\n16EB..16ED    ; L # Po   [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION\n16EE..16F0    ; L # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL\n16F1..16F8    ; L # Lo   [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC\n1700..1711    ; L # Lo  [18] TAGALOG LETTER A..TAGALOG LETTER HA\n1715          ; L # Mc       TAGALOG SIGN PAMUDPOD\n171F..1731    ; L # Lo  [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA\n1734          ; L # Mc       HANUNOO SIGN PAMUDPOD\n1735..1736    ; L # Po   [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION\n1740..1751    ; L # Lo  [18] BUHID LETTER A..BUHID LETTER HA\n1760..176C    ; L # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA\n176E..1770    ; L # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA\n1780..17B3    ; L # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU\n17B6          ; L # Mc       KHMER VOWEL SIGN AA\n17BE..17C5    ; L # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\n17C7..17C8    ; L # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\n17D4..17D6    ; L # Po   [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH\n17D7          ; L # Lm       KHMER SIGN LEK TOO\n17D8..17DA    ; L # Po   [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT\n17DC          ; L # Lo       KHMER SIGN AVAKRAHASANYA\n17E0..17E9    ; L # Nd  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE\n1810..1819    ; L # Nd  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE\n1820..1842    ; L # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI\n1843          ; L # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN\n1844..1878    ; L # Lo  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS\n1880..1884    ; L # Lo   [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA\n1887..18A8    ; L # Lo  [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA\n18AA          ; L # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA\n18B0..18F5    ; L # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S\n1900..191E    ; L # Lo  [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA\n1923..1926    ; L # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\n1929..192B    ; L # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\n1930..1931    ; L # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\n1933..1938    ; L # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\n1946..194F    ; L # Nd  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE\n1950..196D    ; L # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI\n1970..1974    ; L # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6\n1980..19AB    ; L # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA\n19B0..19C9    ; L # Lo  [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2\n19D0..19D9    ; L # Nd  [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE\n19DA          ; L # No       NEW TAI LUE THAM DIGIT ONE\n1A00..1A16    ; L # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA\n1A19..1A1A    ; L # Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\n1A1E..1A1F    ; L # Po   [2] BUGINESE PALLAWA..BUGINESE END OF SECTION\n1A20..1A54    ; L # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA\n1A55          ; L # Mc       TAI THAM CONSONANT SIGN MEDIAL RA\n1A57          ; L # Mc       TAI THAM CONSONANT SIGN LA TANG LAI\n1A61          ; L # Mc       TAI THAM VOWEL SIGN A\n1A63..1A64    ; L # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA\n1A6D..1A72    ; L # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\n1A80..1A89    ; L # Nd  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE\n1A90..1A99    ; L # Nd  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE\n1AA0..1AA6    ; L # Po   [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA\n1AA7          ; L # Lm       TAI THAM SIGN MAI YAMOK\n1AA8..1AAD    ; L # Po   [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG\n1B04          ; L # Mc       BALINESE SIGN BISAH\n1B05..1B33    ; L # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA\n1B35          ; L # Mc       BALINESE VOWEL SIGN TEDUNG\n1B3B          ; L # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG\n1B3D..1B41    ; L # Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG\n1B43..1B44    ; L # Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG\n1B45..1B4C    ; L # Lo   [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA\n1B4E..1B4F    ; L # Po   [2] BALINESE INVERTED CARIK SIKI..BALINESE INVERTED CARIK PAREREN\n1B50..1B59    ; L # Nd  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE\n1B5A..1B60    ; L # Po   [7] BALINESE PANTI..BALINESE PAMENENG\n1B61..1B6A    ; L # So  [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE\n1B74..1B7C    ; L # So   [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING\n1B7D..1B7F    ; L # Po   [3] BALINESE PANTI LANTANG..BALINESE PANTI BAWAK\n1B82          ; L # Mc       SUNDANESE SIGN PANGWISAD\n1B83..1BA0    ; L # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA\n1BA1          ; L # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL\n1BA6..1BA7    ; L # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\n1BAA          ; L # Mc       SUNDANESE SIGN PAMAAEH\n1BAE..1BAF    ; L # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA\n1BB0..1BB9    ; L # Nd  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE\n1BBA..1BE5    ; L # Lo  [44] SUNDANESE AVAGRAHA..BATAK LETTER U\n1BE7          ; L # Mc       BATAK VOWEL SIGN E\n1BEA..1BEC    ; L # Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\n1BEE          ; L # Mc       BATAK VOWEL SIGN U\n1BF2..1BF3    ; L # Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN\n1BFC..1BFF    ; L # Po   [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT\n1C00..1C23    ; L # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A\n1C24..1C2B    ; L # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\n1C34..1C35    ; L # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\n1C3B..1C3F    ; L # Po   [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK\n1C40..1C49    ; L # Nd  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE\n1C4D..1C4F    ; L # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA\n1C50..1C59    ; L # Nd  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE\n1C5A..1C77    ; L # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH\n1C78..1C7D    ; L # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD\n1C7E..1C7F    ; L # Po   [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD\n1C80..1C8A    ; L # L&  [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE\n1C90..1CBA    ; L # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; L # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1CC0..1CC7    ; L # Po   [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA\n1CD3          ; L # Po       VEDIC SIGN NIHSHVASA\n1CE1          ; L # Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\n1CE9..1CEC    ; L # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL\n1CEE..1CF3    ; L # Lo   [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA\n1CF5..1CF6    ; L # Lo   [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA\n1CF7          ; L # Mc       VEDIC SIGN ATIKRAMA\n1CFA          ; L # Lo       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA\n1D00..1D2B    ; L # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL\n1D2C..1D6A    ; L # Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D6B..1D77    ; L # L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G\n1D78          ; L # Lm       MODIFIER LETTER CYRILLIC EN\n1D79..1D9A    ; L # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK\n1D9B..1DBF    ; L # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA\n1E00..1F15    ; L # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F18..1F1D    ; L # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F45    ; L # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F48..1F4D    ; L # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; L # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F59          ; L # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; L # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; L # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F..1F7D    ; L # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1FB4    ; L # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FBC    ; L # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBE          ; L # L&       GREEK PROSGEGRAMMENI\n1FC2..1FC4    ; L # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FCC    ; L # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FD0..1FD3    ; L # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FDB    ; L # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE0..1FEC    ; L # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FF2..1FF4    ; L # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FFC    ; L # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n200E          ; L # Cf       LEFT-TO-RIGHT MARK\n2071          ; L # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n207F          ; L # Lm       SUPERSCRIPT LATIN SMALL LETTER N\n2090..209C    ; L # Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n2102          ; L # L&       DOUBLE-STRUCK CAPITAL C\n2107          ; L # L&       EULER CONSTANT\n210A..2113    ; L # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L\n2115          ; L # L&       DOUBLE-STRUCK CAPITAL N\n2119..211D    ; L # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n2124          ; L # L&       DOUBLE-STRUCK CAPITAL Z\n2126          ; L # L&       OHM SIGN\n2128          ; L # L&       BLACK-LETTER CAPITAL Z\n212A..212D    ; L # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C\n212F..2134    ; L # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O\n2135..2138    ; L # Lo   [4] ALEF SYMBOL..DALET SYMBOL\n2139          ; L # L&       INFORMATION SOURCE\n213C..213F    ; L # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI\n2145..2149    ; L # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J\n214E          ; L # L&       TURNED SMALL F\n214F          ; L # So       SYMBOL FOR SAMARITAN SOURCE\n2160..2182    ; L # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND\n2183..2184    ; L # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C\n2185..2188    ; L # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND\n2336..237A    ; L # So  [69] APL FUNCTIONAL SYMBOL I-BEAM..APL FUNCTIONAL SYMBOL ALPHA\n2395          ; L # So       APL FUNCTIONAL SYMBOL QUAD\n249C..24E9    ; L # So  [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z\n26AC          ; L # So       MEDIUM SMALL WHITE CIRCLE\n2800..28FF    ; L # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678\n2C00..2C7B    ; L # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E\n2C7C..2C7D    ; L # Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\n2C7E..2CE4    ; L # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI\n2CEB..2CEE    ; L # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CF2..2CF3    ; L # L&   [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI\n2D00..2D25    ; L # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; L # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; L # L&       GEORGIAN SMALL LETTER AEN\n2D30..2D67    ; L # Lo  [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO\n2D6F          ; L # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK\n2D70          ; L # Po       TIFINAGH SEPARATOR MARK\n2D80..2D96    ; L # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE\n2DA0..2DA6    ; L # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO\n2DA8..2DAE    ; L # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO\n2DB0..2DB6    ; L # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO\n2DB8..2DBE    ; L # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO\n2DC0..2DC6    ; L # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO\n2DC8..2DCE    ; L # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO\n2DD0..2DD6    ; L # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO\n2DD8..2DDE    ; L # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO\n3005          ; L # Lm       IDEOGRAPHIC ITERATION MARK\n3006          ; L # Lo       IDEOGRAPHIC CLOSING MARK\n3007          ; L # Nl       IDEOGRAPHIC NUMBER ZERO\n3021..3029    ; L # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE\n302E..302F    ; L # Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\n3031..3035    ; L # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF\n3038..303A    ; L # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY\n303B          ; L # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK\n303C          ; L # Lo       MASU MARK\n3041..3096    ; L # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE\n309D..309E    ; L # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK\n309F          ; L # Lo       HIRAGANA DIGRAPH YORI\n30A1..30FA    ; L # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO\n30FC..30FE    ; L # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK\n30FF          ; L # Lo       KATAKANA DIGRAPH KOTO\n3105..312F    ; L # Lo  [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN\n3131..318E    ; L # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE\n3190..3191    ; L # So   [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK\n3192..3195    ; L # No   [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK\n3196..319F    ; L # So  [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK\n31A0..31BF    ; L # Lo  [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH\n31F0..31FF    ; L # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO\n3200..321C    ; L # So  [29] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED HANGUL CIEUC U\n3220..3229    ; L # No  [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN\n322A..3247    ; L # So  [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO\n3248..324F    ; L # No   [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE\n3260..327B    ; L # So  [28] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL HIEUH A\n327F          ; L # So       KOREAN STANDARD SYMBOL\n3280..3289    ; L # No  [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN\n328A..32B0    ; L # So  [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT\n32C0..32CB    ; L # So  [12] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER\n32D0..3376    ; L # So [167] CIRCLED KATAKANA A..SQUARE PC\n337B..33DD    ; L # So  [99] SQUARE ERA NAME HEISEI..SQUARE WB\n33E0..33FE    ; L # So  [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE\n3400..4DBF    ; L # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF\n4E00..A014    ; L # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E\nA015          ; L # Lm       YI SYLLABLE WU\nA016..A48C    ; L # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR\nA4D0..A4F7    ; L # Lo  [40] LISU LETTER BA..LISU LETTER OE\nA4F8..A4FD    ; L # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU\nA4FE..A4FF    ; L # Po   [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP\nA500..A60B    ; L # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG\nA60C          ; L # Lm       VAI SYLLABLE LENGTHENER\nA610..A61F    ; L # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG\nA620..A629    ; L # Nd  [10] VAI DIGIT ZERO..VAI DIGIT NINE\nA62A..A62B    ; L # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO\nA640..A66D    ; L # L&  [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA66E          ; L # Lo       CYRILLIC LETTER MULTIOCULAR O\nA680..A69B    ; L # L&  [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O\nA69C..A69D    ; L # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA6A0..A6E5    ; L # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI\nA6E6..A6EF    ; L # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM\nA6F2..A6F7    ; L # Po   [6] BAMUM NJAEMLI..BAMUM QUESTION MARK\nA722..A76F    ; L # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON\nA770          ; L # Lm       MODIFIER LETTER US\nA771..A787    ; L # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T\nA789..A78A    ; L # Sk   [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN\nA78B..A78E    ; L # L&   [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT\nA78F          ; L # Lo       LATIN LETTER SINOLOGICAL DOT\nA790..A7DC    ; L # L&  [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F1..A7F4    ; L # Lm   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F5..A7F6    ; L # L&   [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H\nA7F7          ; L # Lo       LATIN EPIGRAPHIC LETTER SIDEWAYS I\nA7F8..A7F9    ; L # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA7FA          ; L # L&       LATIN LETTER SMALL CAPITAL TURNED M\nA7FB..A801    ; L # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I\nA803..A805    ; L # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O\nA807..A80A    ; L # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO\nA80C..A822    ; L # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO\nA823..A824    ; L # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\nA827          ; L # Mc       SYLOTI NAGRI VOWEL SIGN OO\nA830..A835    ; L # No   [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS\nA836..A837    ; L # So   [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK\nA840..A873    ; L # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU\nA880..A881    ; L # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\nA882..A8B3    ; L # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA\nA8B4..A8C3    ; L # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\nA8CE..A8CF    ; L # Po   [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA\nA8D0..A8D9    ; L # Nd  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE\nA8F2..A8F7    ; L # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA\nA8F8..A8FA    ; L # Po   [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET\nA8FB          ; L # Lo       DEVANAGARI HEADSTROKE\nA8FC          ; L # Po       DEVANAGARI SIGN SIDDHAM\nA8FD..A8FE    ; L # Lo   [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY\nA900..A909    ; L # Nd  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE\nA90A..A925    ; L # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO\nA92E..A92F    ; L # Po   [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA\nA930..A946    ; L # Lo  [23] REJANG LETTER KA..REJANG LETTER A\nA952..A953    ; L # Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA\nA95F          ; L # Po       REJANG SECTION MARK\nA960..A97C    ; L # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\nA983          ; L # Mc       JAVANESE SIGN WIGNYAN\nA984..A9B2    ; L # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA\nA9B4..A9B5    ; L # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\nA9BA..A9BB    ; L # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\nA9BE..A9C0    ; L # Mc   [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON\nA9C1..A9CD    ; L # Po  [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH\nA9CF          ; L # Lm       JAVANESE PANGRANGKEP\nA9D0..A9D9    ; L # Nd  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE\nA9DE..A9DF    ; L # Po   [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN\nA9E0..A9E4    ; L # Lo   [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA\nA9E6          ; L # Lm       MYANMAR MODIFIER LETTER SHAN REDUPLICATION\nA9E7..A9EF    ; L # Lo   [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA\nA9F0..A9F9    ; L # Nd  [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE\nA9FA..A9FE    ; L # Lo   [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA\nAA00..AA28    ; L # Lo  [41] CHAM LETTER A..CHAM LETTER HA\nAA2F..AA30    ; L # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\nAA33..AA34    ; L # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\nAA40..AA42    ; L # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG\nAA44..AA4B    ; L # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS\nAA4D          ; L # Mc       CHAM CONSONANT SIGN FINAL H\nAA50..AA59    ; L # Nd  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE\nAA5C..AA5F    ; L # Po   [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA\nAA60..AA6F    ; L # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA\nAA70          ; L # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION\nAA71..AA76    ; L # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM\nAA77..AA79    ; L # So   [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO\nAA7A          ; L # Lo       MYANMAR LETTER AITON RA\nAA7B          ; L # Mc       MYANMAR SIGN PAO KAREN TONE\nAA7D          ; L # Mc       MYANMAR SIGN TAI LAING TONE-5\nAA7E..AAAF    ; L # Lo  [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O\nAAB1          ; L # Lo       TAI VIET VOWEL AA\nAAB5..AAB6    ; L # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O\nAAB9..AABD    ; L # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN\nAAC0          ; L # Lo       TAI VIET TONE MAI NUENG\nAAC2          ; L # Lo       TAI VIET TONE MAI SONG\nAADB..AADC    ; L # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG\nAADD          ; L # Lm       TAI VIET SYMBOL SAM\nAADE..AADF    ; L # Po   [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI\nAAE0..AAEA    ; L # Lo  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA\nAAEB          ; L # Mc       MEETEI MAYEK VOWEL SIGN II\nAAEE..AAEF    ; L # Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\nAAF0..AAF1    ; L # Po   [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM\nAAF2          ; L # Lo       MEETEI MAYEK ANJI\nAAF3..AAF4    ; L # Lm   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK\nAAF5          ; L # Mc       MEETEI MAYEK VOWEL SIGN VISARGA\nAB01..AB06    ; L # Lo   [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO\nAB09..AB0E    ; L # Lo   [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO\nAB11..AB16    ; L # Lo   [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO\nAB20..AB26    ; L # Lo   [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO\nAB28..AB2E    ; L # Lo   [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO\nAB30..AB5A    ; L # L&  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG\nAB5B          ; L # Sk       MODIFIER BREVE WITH INVERTED BREVE\nAB5C..AB5F    ; L # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB60..AB68    ; L # L&   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE\nAB69          ; L # Lm       MODIFIER LETTER SMALL TURNED W\nAB70..ABBF    ; L # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nABC0..ABE2    ; L # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM\nABE3..ABE4    ; L # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\nABE6..ABE7    ; L # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\nABE9..ABEA    ; L # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\nABEB          ; L # Po       MEETEI MAYEK CHEIKHEI\nABEC          ; L # Mc       MEETEI MAYEK LUM IYEK\nABF0..ABF9    ; L # Nd  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE\nAC00..D7A3    ; L # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH\nD7B0..D7C6    ; L # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\nD7CB..D7FB    ; L # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\nE000..F8FF    ; L # Co [6400] <private-use-E000>..<private-use-F8FF>\nF900..FA6D    ; L # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D\nFA70..FAD9    ; L # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9\nFB00..FB06    ; L # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; L # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFF21..FF3A    ; L # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\nFF41..FF5A    ; L # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\nFF66..FF6F    ; L # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU\nFF70          ; L # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF71..FF9D    ; L # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N\nFF9E..FF9F    ; L # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\nFFA0..FFBE    ; L # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH\nFFC2..FFC7    ; L # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E\nFFCA..FFCF    ; L # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE\nFFD2..FFD7    ; L # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU\nFFDA..FFDC    ; L # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I\n10000..1000B  ; L # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE\n1000D..10026  ; L # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO\n10028..1003A  ; L # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO\n1003C..1003D  ; L # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE\n1003F..1004D  ; L # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO\n10050..1005D  ; L # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089\n10080..100FA  ; L # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305\n10100         ; L # Po       AEGEAN WORD SEPARATOR LINE\n10102         ; L # Po       AEGEAN CHECK MARK\n10107..10133  ; L # No  [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND\n10137..1013F  ; L # So   [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT\n1018D..1018E  ; L # So   [2] GREEK INDICTION SIGN..NOMISMA SIGN\n101D0..101FC  ; L # So  [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND\n10280..1029C  ; L # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X\n102A0..102D0  ; L # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3\n10300..1031F  ; L # Lo  [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS\n10320..10323  ; L # No   [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY\n1032D..10340  ; L # Lo  [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA\n10341         ; L # Nl       GOTHIC LETTER NINETY\n10342..10349  ; L # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL\n1034A         ; L # Nl       GOTHIC LETTER NINE HUNDRED\n10350..10375  ; L # Lo  [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA\n10380..1039D  ; L # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU\n1039F         ; L # Po       UGARITIC WORD DIVIDER\n103A0..103C3  ; L # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA\n103C8..103CF  ; L # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH\n103D0         ; L # Po       OLD PERSIAN WORD DIVIDER\n103D1..103D5  ; L # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED\n10400..1044F  ; L # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW\n10450..1049D  ; L # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO\n104A0..104A9  ; L # Nd  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE\n104B0..104D3  ; L # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n104D8..104FB  ; L # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10500..10527  ; L # Lo  [40] ELBASAN LETTER A..ELBASAN LETTER KHE\n10530..10563  ; L # Lo  [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW\n1056F         ; L # Po       CAUCASIAN ALBANIAN CITATION MARK\n10570..1057A  ; L # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; L # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; L # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; L # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10597..105A1  ; L # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; L # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; L # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; L # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n105C0..105F3  ; L # Lo  [52] TODHRI LETTER A..TODHRI LETTER OO\n10600..10736  ; L # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664\n10740..10755  ; L # Lo  [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE\n10760..10767  ; L # Lo   [8] LINEAR A SIGN A800..LINEAR A SIGN A807\n10780..10785  ; L # Lm   [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; L # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; L # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n11000         ; L # Mc       BRAHMI SIGN CANDRABINDU\n11002         ; L # Mc       BRAHMI SIGN VISARGA\n11003..11037  ; L # Lo  [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA\n11047..1104D  ; L # Po   [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS\n11066..1106F  ; L # Nd  [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE\n11071..11072  ; L # Lo   [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O\n11075         ; L # Lo       BRAHMI LETTER OLD TAMIL LLA\n11082         ; L # Mc       KAITHI SIGN VISARGA\n11083..110AF  ; L # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA\n110B0..110B2  ; L # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\n110B7..110B8  ; L # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\n110BB..110BC  ; L # Po   [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN\n110BD         ; L # Cf       KAITHI NUMBER SIGN\n110BE..110C1  ; L # Po   [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA\n110CD         ; L # Cf       KAITHI NUMBER SIGN ABOVE\n110D0..110E8  ; L # Lo  [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE\n110F0..110F9  ; L # Nd  [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE\n11103..11126  ; L # Lo  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA\n1112C         ; L # Mc       CHAKMA VOWEL SIGN E\n11136..1113F  ; L # Nd  [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE\n11140..11143  ; L # Po   [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK\n11144         ; L # Lo       CHAKMA LETTER LHAA\n11145..11146  ; L # Mc   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI\n11147         ; L # Lo       CHAKMA LETTER VAA\n11150..11172  ; L # Lo  [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA\n11174..11175  ; L # Po   [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK\n11176         ; L # Lo       MAHAJANI LIGATURE SHRI\n11182         ; L # Mc       SHARADA SIGN VISARGA\n11183..111B2  ; L # Lo  [48] SHARADA LETTER A..SHARADA LETTER HA\n111B3..111B5  ; L # Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\n111BF..111C0  ; L # Mc   [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA\n111C1..111C4  ; L # Lo   [4] SHARADA SIGN AVAGRAHA..SHARADA OM\n111C5..111C8  ; L # Po   [4] SHARADA DANDA..SHARADA SEPARATOR\n111CD         ; L # Po       SHARADA SUTRA MARK\n111CE         ; L # Mc       SHARADA VOWEL SIGN PRISHTHAMATRA E\n111D0..111D9  ; L # Nd  [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE\n111DA         ; L # Lo       SHARADA EKAM\n111DB         ; L # Po       SHARADA SIGN SIDDHAM\n111DC         ; L # Lo       SHARADA HEADSTROKE\n111DD..111DF  ; L # Po   [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2\n111E1..111F4  ; L # No  [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND\n11200..11211  ; L # Lo  [18] KHOJKI LETTER A..KHOJKI LETTER JJA\n11213..1122B  ; L # Lo  [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA\n1122C..1122E  ; L # Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\n11232..11233  ; L # Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\n11235         ; L # Mc       KHOJKI SIGN VIRAMA\n11238..1123D  ; L # Po   [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN\n1123F..11240  ; L # Lo   [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I\n11280..11286  ; L # Lo   [7] MULTANI LETTER A..MULTANI LETTER GA\n11288         ; L # Lo       MULTANI LETTER GHA\n1128A..1128D  ; L # Lo   [4] MULTANI LETTER CA..MULTANI LETTER JJA\n1128F..1129D  ; L # Lo  [15] MULTANI LETTER NYA..MULTANI LETTER BA\n1129F..112A8  ; L # Lo  [10] MULTANI LETTER BHA..MULTANI LETTER RHA\n112A9         ; L # Po       MULTANI SECTION MARK\n112B0..112DE  ; L # Lo  [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA\n112E0..112E2  ; L # Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\n112F0..112F9  ; L # Nd  [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE\n11302..11303  ; L # Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\n11305..1130C  ; L # Lo   [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L\n1130F..11310  ; L # Lo   [2] GRANTHA LETTER EE..GRANTHA LETTER AI\n11313..11328  ; L # Lo  [22] GRANTHA LETTER OO..GRANTHA LETTER NA\n1132A..11330  ; L # Lo   [7] GRANTHA LETTER PA..GRANTHA LETTER RA\n11332..11333  ; L # Lo   [2] GRANTHA LETTER LA..GRANTHA LETTER LLA\n11335..11339  ; L # Lo   [5] GRANTHA LETTER VA..GRANTHA LETTER HA\n1133D         ; L # Lo       GRANTHA SIGN AVAGRAHA\n1133E..1133F  ; L # Mc   [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I\n11341..11344  ; L # Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\n11347..11348  ; L # Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\n1134B..1134D  ; L # Mc   [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA\n11350         ; L # Lo       GRANTHA OM\n11357         ; L # Mc       GRANTHA AU LENGTH MARK\n1135D..11361  ; L # Lo   [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL\n11362..11363  ; L # Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\n11380..11389  ; L # Lo  [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL\n1138B         ; L # Lo       TULU-TIGALARI LETTER EE\n1138E         ; L # Lo       TULU-TIGALARI LETTER AI\n11390..113B5  ; L # Lo  [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA\n113B7         ; L # Lo       TULU-TIGALARI SIGN AVAGRAHA\n113B8..113BA  ; L # Mc   [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II\n113C2         ; L # Mc       TULU-TIGALARI VOWEL SIGN EE\n113C5         ; L # Mc       TULU-TIGALARI VOWEL SIGN AI\n113C7..113CA  ; L # Mc   [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA\n113CC..113CD  ; L # Mc   [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA\n113CF         ; L # Mc       TULU-TIGALARI SIGN LOOPED VIRAMA\n113D1         ; L # Lo       TULU-TIGALARI REPHA\n113D3         ; L # Lo       TULU-TIGALARI SIGN PLUTA\n113D4..113D5  ; L # Po   [2] TULU-TIGALARI DANDA..TULU-TIGALARI DOUBLE DANDA\n113D7..113D8  ; L # Po   [2] TULU-TIGALARI SIGN OM PUSHPIKA..TULU-TIGALARI SIGN SHRII PUSHPIKA\n11400..11434  ; L # Lo  [53] NEWA LETTER A..NEWA LETTER HA\n11435..11437  ; L # Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\n11440..11441  ; L # Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\n11445         ; L # Mc       NEWA SIGN VISARGA\n11447..1144A  ; L # Lo   [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI\n1144B..1144F  ; L # Po   [5] NEWA DANDA..NEWA ABBREVIATION SIGN\n11450..11459  ; L # Nd  [10] NEWA DIGIT ZERO..NEWA DIGIT NINE\n1145A..1145B  ; L # Po   [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK\n1145D         ; L # Po       NEWA INSERTION SIGN\n1145F..11461  ; L # Lo   [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA\n11480..114AF  ; L # Lo  [48] TIRHUTA ANJI..TIRHUTA LETTER HA\n114B0..114B2  ; L # Mc   [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II\n114B9         ; L # Mc       TIRHUTA VOWEL SIGN E\n114BB..114BE  ; L # Mc   [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU\n114C1         ; L # Mc       TIRHUTA SIGN VISARGA\n114C4..114C5  ; L # Lo   [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG\n114C6         ; L # Po       TIRHUTA ABBREVIATION SIGN\n114C7         ; L # Lo       TIRHUTA OM\n114D0..114D9  ; L # Nd  [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE\n11580..115AE  ; L # Lo  [47] SIDDHAM LETTER A..SIDDHAM LETTER HA\n115AF..115B1  ; L # Mc   [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II\n115B8..115BB  ; L # Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\n115BE         ; L # Mc       SIDDHAM SIGN VISARGA\n115C1..115D7  ; L # Po  [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES\n115D8..115DB  ; L # Lo   [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U\n11600..1162F  ; L # Lo  [48] MODI LETTER A..MODI LETTER LLA\n11630..11632  ; L # Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\n1163B..1163C  ; L # Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\n1163E         ; L # Mc       MODI SIGN VISARGA\n11641..11643  ; L # Po   [3] MODI DANDA..MODI ABBREVIATION SIGN\n11644         ; L # Lo       MODI SIGN HUVA\n11650..11659  ; L # Nd  [10] MODI DIGIT ZERO..MODI DIGIT NINE\n11680..116AA  ; L # Lo  [43] TAKRI LETTER A..TAKRI LETTER RRA\n116AC         ; L # Mc       TAKRI SIGN VISARGA\n116AE..116AF  ; L # Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\n116B6         ; L # Mc       TAKRI SIGN VIRAMA\n116B8         ; L # Lo       TAKRI LETTER ARCHAIC KHA\n116B9         ; L # Po       TAKRI ABBREVIATION SIGN\n116C0..116C9  ; L # Nd  [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE\n116D0..116E3  ; L # Nd  [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE\n11700..1171A  ; L # Lo  [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA\n1171E         ; L # Mc       AHOM CONSONANT SIGN MEDIAL RA\n11720..11721  ; L # Mc   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA\n11726         ; L # Mc       AHOM VOWEL SIGN E\n11730..11739  ; L # Nd  [10] AHOM DIGIT ZERO..AHOM DIGIT NINE\n1173A..1173B  ; L # No   [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY\n1173C..1173E  ; L # Po   [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI\n1173F         ; L # So       AHOM SYMBOL VI\n11740..11746  ; L # Lo   [7] AHOM LETTER CA..AHOM LETTER LLA\n11800..1182B  ; L # Lo  [44] DOGRA LETTER A..DOGRA LETTER RRA\n1182C..1182E  ; L # Mc   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II\n11838         ; L # Mc       DOGRA SIGN VISARGA\n1183B         ; L # Po       DOGRA ABBREVIATION SIGN\n118A0..118DF  ; L # L&  [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n118E0..118E9  ; L # Nd  [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE\n118EA..118F2  ; L # No   [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY\n118FF..11906  ; L # Lo   [8] WARANG CITI OM..DIVES AKURU LETTER E\n11909         ; L # Lo       DIVES AKURU LETTER O\n1190C..11913  ; L # Lo   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA\n11915..11916  ; L # Lo   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA\n11918..1192F  ; L # Lo  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA\n11930..11935  ; L # Mc   [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E\n11937..11938  ; L # Mc   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O\n1193D         ; L # Mc       DIVES AKURU SIGN HALANTA\n1193F         ; L # Lo       DIVES AKURU PREFIXED NASAL SIGN\n11940         ; L # Mc       DIVES AKURU MEDIAL YA\n11941         ; L # Lo       DIVES AKURU INITIAL RA\n11942         ; L # Mc       DIVES AKURU MEDIAL RA\n11944..11946  ; L # Po   [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK\n11950..11959  ; L # Nd  [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE\n119A0..119A7  ; L # Lo   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR\n119AA..119D0  ; L # Lo  [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA\n119D1..119D3  ; L # Mc   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II\n119DC..119DF  ; L # Mc   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA\n119E1         ; L # Lo       NANDINAGARI SIGN AVAGRAHA\n119E2         ; L # Po       NANDINAGARI SIGN SIDDHAM\n119E3         ; L # Lo       NANDINAGARI HEADSTROKE\n119E4         ; L # Mc       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E\n11A00         ; L # Lo       ZANABAZAR SQUARE LETTER A\n11A07..11A08  ; L # Mn   [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU\n11A0B..11A32  ; L # Lo  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA\n11A39         ; L # Mc       ZANABAZAR SQUARE SIGN VISARGA\n11A3A         ; L # Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\n11A3F..11A46  ; L # Po   [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK\n11A50         ; L # Lo       SOYOMBO LETTER A\n11A57..11A58  ; L # Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\n11A5C..11A89  ; L # Lo  [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA\n11A97         ; L # Mc       SOYOMBO SIGN VISARGA\n11A9A..11A9C  ; L # Po   [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD\n11A9D         ; L # Lo       SOYOMBO MARK PLUTA\n11A9E..11AA2  ; L # Po   [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2\n11AB0..11AF8  ; L # Lo  [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL\n11B00..11B09  ; L # Po  [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU\n11B61         ; L # Mc       SHARADA VOWEL SIGN OOE\n11B65         ; L # Mc       SHARADA VOWEL SIGN SHORT O\n11B67         ; L # Mc       SHARADA VOWEL SIGN CANDRA O\n11BC0..11BE0  ; L # Lo  [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO\n11BE1         ; L # Po       SUNUWAR SIGN PVO\n11BF0..11BF9  ; L # Nd  [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE\n11C00..11C08  ; L # Lo   [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L\n11C0A..11C2E  ; L # Lo  [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA\n11C2F         ; L # Mc       BHAIKSUKI VOWEL SIGN AA\n11C3E         ; L # Mc       BHAIKSUKI SIGN VISARGA\n11C3F         ; L # Mn       BHAIKSUKI SIGN VIRAMA\n11C40         ; L # Lo       BHAIKSUKI SIGN AVAGRAHA\n11C41..11C45  ; L # Po   [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2\n11C50..11C59  ; L # Nd  [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE\n11C5A..11C6C  ; L # No  [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK\n11C70..11C71  ; L # Po   [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD\n11C72..11C8F  ; L # Lo  [30] MARCHEN LETTER KA..MARCHEN LETTER A\n11CA9         ; L # Mc       MARCHEN SUBJOINED LETTER YA\n11CB1         ; L # Mc       MARCHEN VOWEL SIGN I\n11CB4         ; L # Mc       MARCHEN VOWEL SIGN O\n11D00..11D06  ; L # Lo   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E\n11D08..11D09  ; L # Lo   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O\n11D0B..11D30  ; L # Lo  [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA\n11D46         ; L # Lo       MASARAM GONDI REPHA\n11D50..11D59  ; L # Nd  [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE\n11D60..11D65  ; L # Lo   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU\n11D67..11D68  ; L # Lo   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI\n11D6A..11D89  ; L # Lo  [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA\n11D8A..11D8E  ; L # Mc   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU\n11D93..11D94  ; L # Mc   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU\n11D96         ; L # Mc       GUNJALA GONDI SIGN VISARGA\n11D98         ; L # Lo       GUNJALA GONDI OM\n11DA0..11DA9  ; L # Nd  [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE\n11DB0..11DD8  ; L # Lo  [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH\n11DD9         ; L # Lm       TOLONG SIKI SIGN SELA\n11DDA..11DDB  ; L # Lo   [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA\n11DE0..11DE9  ; L # Nd  [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE\n11EE0..11EF2  ; L # Lo  [19] MAKASAR LETTER KA..MAKASAR ANGKA\n11EF5..11EF6  ; L # Mc   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O\n11EF7..11EF8  ; L # Po   [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION\n11F02         ; L # Lo       KAWI SIGN REPHA\n11F03         ; L # Mc       KAWI SIGN VISARGA\n11F04..11F10  ; L # Lo  [13] KAWI LETTER A..KAWI LETTER O\n11F12..11F33  ; L # Lo  [34] KAWI LETTER KA..KAWI LETTER JNYA\n11F34..11F35  ; L # Mc   [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA\n11F3E..11F3F  ; L # Mc   [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI\n11F41         ; L # Mc       KAWI SIGN KILLER\n11F43..11F4F  ; L # Po  [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL\n11F50..11F59  ; L # Nd  [10] KAWI DIGIT ZERO..KAWI DIGIT NINE\n11FB0         ; L # Lo       LISU LETTER YHA\n11FC0..11FD4  ; L # No  [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH\n11FFF         ; L # Po       TAMIL PUNCTUATION END OF TEXT\n12000..12399  ; L # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U\n12400..1246E  ; L # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM\n12470..12474  ; L # Po   [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON\n12480..12543  ; L # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU\n12F90..12FF0  ; L # Lo  [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114\n12FF1..12FF2  ; L # Po   [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302\n13000..1342F  ; L # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D\n13430..1343F  ; L # Cf  [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE\n13441..13446  ; L # Lo   [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN\n13460..143FA  ; L # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA\n14400..14646  ; L # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530\n16100..1611D  ; L # Lo  [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA\n1612A..1612C  ; L # Mc   [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA\n16130..16139  ; L # Nd  [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE\n16800..16A38  ; L # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ\n16A40..16A5E  ; L # Lo  [31] MRO LETTER TA..MRO LETTER TEK\n16A60..16A69  ; L # Nd  [10] MRO DIGIT ZERO..MRO DIGIT NINE\n16A6E..16A6F  ; L # Po   [2] MRO DANDA..MRO DOUBLE DANDA\n16A70..16ABE  ; L # Lo  [79] TANGSA LETTER OZ..TANGSA LETTER ZA\n16AC0..16AC9  ; L # Nd  [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE\n16AD0..16AED  ; L # Lo  [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I\n16AF5         ; L # Po       BASSA VAH FULL STOP\n16B00..16B2F  ; L # Lo  [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU\n16B37..16B3B  ; L # Po   [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM\n16B3C..16B3F  ; L # So   [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB\n16B40..16B43  ; L # Lm   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM\n16B44         ; L # Po       PAHAWH HMONG SIGN XAUS\n16B45         ; L # So       PAHAWH HMONG SIGN CIM TSOV ROG\n16B50..16B59  ; L # Nd  [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE\n16B5B..16B61  ; L # No   [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS\n16B63..16B77  ; L # Lo  [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS\n16B7D..16B8F  ; L # Lo  [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ\n16D40..16D42  ; L # Lm   [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA\n16D43..16D6A  ; L # Lo  [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU\n16D6B..16D6C  ; L # Lm   [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT\n16D6D..16D6F  ; L # Po   [3] KIRAT RAI SIGN YUPI..KIRAT RAI DOUBLE DANDA\n16D70..16D79  ; L # Nd  [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE\n16E40..16E7F  ; L # L&  [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16E80..16E96  ; L # No  [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM\n16E97..16E9A  ; L # Po   [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH\n16EA0..16EB8  ; L # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n16EBB..16ED3  ; L # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n16F00..16F4A  ; L # Lo  [75] MIAO LETTER PA..MIAO LETTER RTE\n16F50         ; L # Lo       MIAO LETTER NASALIZATION\n16F51..16F87  ; L # Mc  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI\n16F93..16F9F  ; L # Lm  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8\n16FE0..16FE1  ; L # Lm   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK\n16FE3         ; L # Lm       OLD CHINESE ITERATION MARK\n16FF0..16FF1  ; L # Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY\n16FF2..16FF3  ; L # Lm   [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER\n16FF4..16FF6  ; L # Nl   [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS\n17000..18CD5  ; L # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5\n18CFF..18D1E  ; L # Lo  [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E\n18D80..18DF2  ; L # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883\n1AFF0..1AFF3  ; L # Lm   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5\n1AFF5..1AFFB  ; L # Lm   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5\n1AFFD..1AFFE  ; L # Lm   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8\n1B000..1B122  ; L # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU\n1B132         ; L # Lo       HIRAGANA LETTER SMALL KO\n1B150..1B152  ; L # Lo   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO\n1B155         ; L # Lo       KATAKANA LETTER SMALL KO\n1B164..1B167  ; L # Lo   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N\n1B170..1B2FB  ; L # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB\n1BC00..1BC6A  ; L # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M\n1BC70..1BC7C  ; L # Lo  [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK\n1BC80..1BC88  ; L # Lo   [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL\n1BC90..1BC99  ; L # Lo  [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW\n1BC9C         ; L # So       DUPLOYAN SIGN O WITH CROSS\n1BC9F         ; L # Po       DUPLOYAN PUNCTUATION CHINOOK FULL STOP\n1CCD6..1CCEF  ; L # So  [26] OUTLINED LATIN CAPITAL LETTER A..OUTLINED LATIN CAPITAL LETTER Z\n1CF50..1CFC3  ; L # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK\n1D000..1D0F5  ; L # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO\n1D100..1D126  ; L # So  [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2\n1D129..1D164  ; L # So  [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE\n1D165..1D166  ; L # Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\n1D16A..1D16C  ; L # So   [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3\n1D16D..1D172  ; L # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5\n1D183..1D184  ; L # So   [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN\n1D18C..1D1A9  ; L # So  [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH\n1D1AE..1D1E8  ; L # So  [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN\n1D2C0..1D2D3  ; L # No  [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN\n1D2E0..1D2F3  ; L # No  [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN\n1D360..1D378  ; L # No  [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE\n1D400..1D454  ; L # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D49C  ; L # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; L # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; L # L&       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; L # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; L # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B9  ; L # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; L # L&       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; L # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D505  ; L # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; L # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; L # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; L # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D51E..1D539  ; L # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; L # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; L # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; L # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; L # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D552..1D6A5  ; L # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6A8..1D6C0  ; L # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6C2..1D6DA  ; L # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DC..1D6FA  ; L # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D6FC..1D714  ; L # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D716..1D734  ; L # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D736..1D74E  ; L # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D750..1D76E  ; L # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D770..1D788  ; L # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D78A..1D7A8  ; L # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7AA..1D7C2  ; L # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C4..1D7CB  ; L # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA\n1D800..1D9FF  ; L # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD\n1DA37..1DA3A  ; L # So   [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE\n1DA6D..1DA74  ; L # So   [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING\n1DA76..1DA83  ; L # So  [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH\n1DA85..1DA86  ; L # So   [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS\n1DA87..1DA8B  ; L # Po   [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS\n1DF00..1DF09  ; L # L&  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK\n1DF0A         ; L # Lo       LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK\n1DF0B..1DF1E  ; L # L&  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL\n1DF25..1DF2A  ; L # L&   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK\n1E030..1E06D  ; L # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E100..1E12C  ; L # Lo  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W\n1E137..1E13D  ; L # Lm   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER\n1E140..1E149  ; L # Nd  [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE\n1E14E         ; L # Lo       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ\n1E14F         ; L # So       NYIAKENG PUACHUE HMONG CIRCLED CA\n1E290..1E2AD  ; L # Lo  [30] TOTO LETTER PA..TOTO LETTER A\n1E2C0..1E2EB  ; L # Lo  [44] WANCHO LETTER AA..WANCHO LETTER YIH\n1E2F0..1E2F9  ; L # Nd  [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE\n1E4D0..1E4EA  ; L # Lo  [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL\n1E4EB         ; L # Lm       NAG MUNDARI SIGN OJOD\n1E4F0..1E4F9  ; L # Nd  [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE\n1E5D0..1E5ED  ; L # Lo  [30] OL ONAL LETTER O..OL ONAL LETTER EG\n1E5F0         ; L # Lo       OL ONAL SIGN HODDOND\n1E5F1..1E5FA  ; L # Nd  [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE\n1E5FF         ; L # Po       OL ONAL ABBREVIATION SIGN\n1E6C0..1E6DE  ; L # Lo  [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO\n1E6E0..1E6E2  ; L # Lo   [3] TAI YO LETTER AA..TAI YO LETTER UE\n1E6E4..1E6E5  ; L # Lo   [2] TAI YO LETTER U..TAI YO LETTER AE\n1E6E7..1E6ED  ; L # Lo   [7] TAI YO LETTER O..TAI YO LETTER AUE\n1E6F0..1E6F4  ; L # Lo   [5] TAI YO LETTER AN..TAI YO LETTER AP\n1E6FE         ; L # Lo       TAI YO SYMBOL MUEANG\n1E6FF         ; L # Lm       TAI YO XAM LAI\n1E7E0..1E7E6  ; L # Lo   [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO\n1E7E8..1E7EB  ; L # Lo   [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE\n1E7ED..1E7EE  ; L # Lo   [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE\n1E7F0..1E7FE  ; L # Lo  [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE\n1F110..1F12E  ; L # So  [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ\n1F130..1F169  ; L # So  [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z\n1F170..1F1AC  ; L # So  [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD\n1F1E6..1F202  ; L # So  [29] REGIONAL INDICATOR SYMBOL LETTER A..SQUARED KATAKANA SA\n1F210..1F23B  ; L # So  [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D\n1F240..1F248  ; L # So   [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557\n1F250..1F251  ; L # So   [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT\n20000..2A6DF  ; L # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF\n2A700..2B81D  ; L # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D\n2B820..2CEAD  ; L # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD\n2CEB0..2EBE0  ; L # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0\n2EBF0..2EE5D  ; L # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D\n2F800..2FA1D  ; L # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D\n30000..3134A  ; L # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A\n31350..33479  ; L # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479\nF0000..FFFFD  ; L # Co [65534] <private-use-F0000>..<private-use-FFFFD>\n100000..10FFFD; L # Co [65534] <private-use-100000>..<private-use-10FFFD>\n\n# The above property value applies to 810615 code points not listed here.\n# Total code points: 1095407\n\n# ================================================\n\n# Bidi_Class=Right_To_Left\n\n05BE          ; R # Pd       HEBREW PUNCTUATION MAQAF\n05C0          ; R # Po       HEBREW PUNCTUATION PASEQ\n05C3          ; R # Po       HEBREW PUNCTUATION SOF PASUQ\n05C6          ; R # Po       HEBREW PUNCTUATION NUN HAFUKHA\n05D0..05EA    ; R # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV\n05EF..05F2    ; R # Lo   [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD\n05F3..05F4    ; R # Po   [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM\n07C0..07C9    ; R # Nd  [10] NKO DIGIT ZERO..NKO DIGIT NINE\n07CA..07EA    ; R # Lo  [33] NKO LETTER A..NKO LETTER JONA RA\n07F4..07F5    ; R # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE\n07FA          ; R # Lm       NKO LAJANYALAN\n07FE..07FF    ; R # Sc   [2] NKO DOROME SIGN..NKO TAMAN SIGN\n0800..0815    ; R # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF\n081A          ; R # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT\n0824          ; R # Lm       SAMARITAN MODIFIER LETTER SHORT A\n0828          ; R # Lm       SAMARITAN MODIFIER LETTER I\n0830..083E    ; R # Po  [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU\n0840..0858    ; R # Lo  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN\n085E          ; R # Po       MANDAIC PUNCTUATION\n200F          ; R # Cf       RIGHT-TO-LEFT MARK\nFB1D          ; R # Lo       HEBREW LETTER YOD WITH HIRIQ\nFB1F..FB28    ; R # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV\nFB2A..FB36    ; R # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH\nFB38..FB3C    ; R # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH\nFB3E          ; R # Lo       HEBREW LETTER MEM WITH DAGESH\nFB40..FB41    ; R # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH\nFB43..FB44    ; R # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH\nFB46..FB4F    ; R # Lo  [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED\n10800..10805  ; R # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA\n10808         ; R # Lo       CYPRIOT SYLLABLE JO\n1080A..10835  ; R # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO\n10837..10838  ; R # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE\n1083C         ; R # Lo       CYPRIOT SYLLABLE ZA\n1083F..10855  ; R # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW\n10857         ; R # Po       IMPERIAL ARAMAIC SECTION SIGN\n10858..1085F  ; R # No   [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND\n10860..10876  ; R # Lo  [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW\n10877..10878  ; R # So   [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON\n10879..1087F  ; R # No   [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY\n10880..1089E  ; R # Lo  [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW\n108A7..108AF  ; R # No   [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED\n108E0..108F2  ; R # Lo  [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH\n108F4..108F5  ; R # Lo   [2] HATRAN LETTER SHIN..HATRAN LETTER TAW\n108FB..108FF  ; R # No   [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED\n10900..10915  ; R # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU\n10916..1091B  ; R # No   [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE\n10920..10939  ; R # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C\n1093F         ; R # Po       LYDIAN TRIANGULAR MARK\n10940..10959  ; R # Lo  [26] SIDETIC LETTER N01..SIDETIC LETTER N26\n10980..109B7  ; R # Lo  [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA\n109BC..109BD  ; R # No   [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF\n109BE..109BF  ; R # Lo   [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN\n109C0..109CF  ; R # No  [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY\n109D2..109FF  ; R # No  [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS\n10A00         ; R # Lo       KHAROSHTHI LETTER A\n10A10..10A13  ; R # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA\n10A15..10A17  ; R # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA\n10A19..10A35  ; R # Lo  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA\n10A40..10A48  ; R # No   [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF\n10A50..10A58  ; R # Po   [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES\n10A60..10A7C  ; R # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH\n10A7D..10A7E  ; R # No   [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY\n10A7F         ; R # Po       OLD SOUTH ARABIAN NUMERIC INDICATOR\n10A80..10A9C  ; R # Lo  [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH\n10A9D..10A9F  ; R # No   [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY\n10AC0..10AC7  ; R # Lo   [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW\n10AC8         ; R # So       MANICHAEAN SIGN UD\n10AC9..10AE4  ; R # Lo  [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW\n10AEB..10AEF  ; R # No   [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED\n10AF0..10AF6  ; R # Po   [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER\n10B00..10B35  ; R # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE\n10B40..10B55  ; R # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW\n10B58..10B5F  ; R # No   [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND\n10B60..10B72  ; R # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW\n10B78..10B7F  ; R # No   [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND\n10B80..10B91  ; R # Lo  [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW\n10B99..10B9C  ; R # Po   [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT\n10BA9..10BAF  ; R # No   [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED\n10C00..10C48  ; R # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH\n10C80..10CB2  ; R # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10CC0..10CF2  ; R # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10CFA..10CFF  ; R # No   [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND\n10D4A..10D4D  ; R # Lo   [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE\n10D4E         ; R # Lm       GARAY VOWEL LENGTH MARK\n10D4F         ; R # Lo       GARAY SUKUN\n10D50..10D65  ; R # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n10D6F         ; R # Lm       GARAY REDUPLICATION MARK\n10D70..10D85  ; R # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n10D8E..10D8F  ; R # Sm   [2] GARAY PLUS SIGN..GARAY MINUS SIGN\n10E80..10EA9  ; R # Lo  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET\n10EAD         ; R # Pd       YEZIDI HYPHENATION MARK\n10EB0..10EB1  ; R # Lo   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE\n10F00..10F1C  ; R # Lo  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL\n10F1D..10F26  ; R # No  [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF\n10F27         ; R # Lo       OLD SOGDIAN LIGATURE AYIN-DALETH\n10F70..10F81  ; R # Lo  [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH\n10F86..10F89  ; R # Po   [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS\n10FB0..10FC4  ; R # Lo  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW\n10FC5..10FCB  ; R # No   [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED\n10FE0..10FF6  ; R # Lo  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH\n1E800..1E8C4  ; R # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON\n1E8C7..1E8CF  ; R # No   [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE\n1E900..1E943  ; R # L&  [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA\n1E94B         ; R # Lm       ADLAM NASALIZATION MARK\n1E950..1E959  ; R # Nd  [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE\n1E95E..1E95F  ; R # Po   [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK\n\n# The above property value applies to 2061 code points not listed here.\n# Total code points: 3631\n\n# ================================================\n\n# Bidi_Class=European_Number\n\n0030..0039    ; EN # Nd  [10] DIGIT ZERO..DIGIT NINE\n00B2..00B3    ; EN # No   [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE\n00B9          ; EN # No       SUPERSCRIPT ONE\n06F0..06F9    ; EN # Nd  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE\n2070          ; EN # No       SUPERSCRIPT ZERO\n2074..2079    ; EN # No   [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE\n2080..2089    ; EN # No  [10] SUBSCRIPT ZERO..SUBSCRIPT NINE\n2488..249B    ; EN # No  [20] DIGIT ONE FULL STOP..NUMBER TWENTY FULL STOP\nFF10..FF19    ; EN # Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE\n102E1..102FB  ; EN # No  [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED\n1CCF0..1CCF9  ; EN # Nd  [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE\n1D7CE..1D7FF  ; EN # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE\n1F100..1F10A  ; EN # No  [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA\n1FBF0..1FBF9  ; EN # Nd  [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE\n\n# Total code points: 178\n\n# ================================================\n\n# Bidi_Class=European_Separator\n\n002B          ; ES # Sm       PLUS SIGN\n002D          ; ES # Pd       HYPHEN-MINUS\n207A..207B    ; ES # Sm   [2] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT MINUS\n208A..208B    ; ES # Sm   [2] SUBSCRIPT PLUS SIGN..SUBSCRIPT MINUS\n2212          ; ES # Sm       MINUS SIGN\nFB29          ; ES # Sm       HEBREW LETTER ALTERNATIVE PLUS SIGN\nFE62          ; ES # Sm       SMALL PLUS SIGN\nFE63          ; ES # Pd       SMALL HYPHEN-MINUS\nFF0B          ; ES # Sm       FULLWIDTH PLUS SIGN\nFF0D          ; ES # Pd       FULLWIDTH HYPHEN-MINUS\n\n# Total code points: 12\n\n# ================================================\n\n# Bidi_Class=European_Terminator\n\n0023          ; ET # Po       NUMBER SIGN\n0024          ; ET # Sc       DOLLAR SIGN\n0025          ; ET # Po       PERCENT SIGN\n00A2..00A5    ; ET # Sc   [4] CENT SIGN..YEN SIGN\n00B0          ; ET # So       DEGREE SIGN\n00B1          ; ET # Sm       PLUS-MINUS SIGN\n058F          ; ET # Sc       ARMENIAN DRAM SIGN\n0609..060A    ; ET # Po   [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN\n066A          ; ET # Po       ARABIC PERCENT SIGN\n09F2..09F3    ; ET # Sc   [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN\n09FB          ; ET # Sc       BENGALI GANDA MARK\n0AF1          ; ET # Sc       GUJARATI RUPEE SIGN\n0BF9          ; ET # Sc       TAMIL RUPEE SIGN\n0E3F          ; ET # Sc       THAI CURRENCY SYMBOL BAHT\n17DB          ; ET # Sc       KHMER CURRENCY SYMBOL RIEL\n2030..2034    ; ET # Po   [5] PER MILLE SIGN..TRIPLE PRIME\n20A0..20C1    ; ET # Sc  [34] EURO-CURRENCY SIGN..SAUDI RIYAL SIGN\n212E          ; ET # So       ESTIMATED SYMBOL\n2213          ; ET # Sm       MINUS-OR-PLUS SIGN\nA838          ; ET # Sc       NORTH INDIC RUPEE MARK\nA839          ; ET # So       NORTH INDIC QUANTITY MARK\nFE5F          ; ET # Po       SMALL NUMBER SIGN\nFE69          ; ET # Sc       SMALL DOLLAR SIGN\nFE6A          ; ET # Po       SMALL PERCENT SIGN\nFF03          ; ET # Po       FULLWIDTH NUMBER SIGN\nFF04          ; ET # Sc       FULLWIDTH DOLLAR SIGN\nFF05          ; ET # Po       FULLWIDTH PERCENT SIGN\nFFE0..FFE1    ; ET # Sc   [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN\nFFE5..FFE6    ; ET # Sc   [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN\n11FDD..11FE0  ; ET # Sc   [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN\n1E2FF         ; ET # Sc       WANCHO NGUN SIGN\n\n# The above property value applies to 14 code points not listed here.\n# Total code points: 92\n\n# ================================================\n\n# Bidi_Class=Arabic_Number\n\n0600..0605    ; AN # Cf   [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE\n0660..0669    ; AN # Nd  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE\n066B..066C    ; AN # Po   [2] ARABIC DECIMAL SEPARATOR..ARABIC THOUSANDS SEPARATOR\n06DD          ; AN # Cf       ARABIC END OF AYAH\n0890..0891    ; AN # Cf   [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE\n08E2          ; AN # Cf       ARABIC DISPUTED END OF AYAH\n10D30..10D39  ; AN # Nd  [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE\n10D40..10D49  ; AN # Nd  [10] GARAY DIGIT ZERO..GARAY DIGIT NINE\n10E60..10E7E  ; AN # No  [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS\n\n# Total code points: 73\n\n# ================================================\n\n# Bidi_Class=Common_Separator\n\n002C          ; CS # Po       COMMA\n002E..002F    ; CS # Po   [2] FULL STOP..SOLIDUS\n003A          ; CS # Po       COLON\n00A0          ; CS # Zs       NO-BREAK SPACE\n060C          ; CS # Po       ARABIC COMMA\n202F          ; CS # Zs       NARROW NO-BREAK SPACE\n2044          ; CS # Sm       FRACTION SLASH\nFE50          ; CS # Po       SMALL COMMA\nFE52          ; CS # Po       SMALL FULL STOP\nFE55          ; CS # Po       SMALL COLON\nFF0C          ; CS # Po       FULLWIDTH COMMA\nFF0E..FF0F    ; CS # Po   [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS\nFF1A          ; CS # Po       FULLWIDTH COLON\n\n# Total code points: 15\n\n# ================================================\n\n# Bidi_Class=Paragraph_Separator\n\n000A          ; B # Cc       <control-000A>\n000D          ; B # Cc       <control-000D>\n001C..001E    ; B # Cc   [3] <control-001C>..<control-001E>\n0085          ; B # Cc       <control-0085>\n2029          ; B # Zp       PARAGRAPH SEPARATOR\n\n# Total code points: 7\n\n# ================================================\n\n# Bidi_Class=Segment_Separator\n\n0009          ; S # Cc       <control-0009>\n000B          ; S # Cc       <control-000B>\n001F          ; S # Cc       <control-001F>\n\n# Total code points: 3\n\n# ================================================\n\n# Bidi_Class=White_Space\n\n000C          ; WS # Cc       <control-000C>\n0020          ; WS # Zs       SPACE\n1680          ; WS # Zs       OGHAM SPACE MARK\n2000..200A    ; WS # Zs  [11] EN QUAD..HAIR SPACE\n2028          ; WS # Zl       LINE SEPARATOR\n205F          ; WS # Zs       MEDIUM MATHEMATICAL SPACE\n3000          ; WS # Zs       IDEOGRAPHIC SPACE\n\n# Total code points: 17\n\n# ================================================\n\n# Bidi_Class=Other_Neutral\n\n0021..0022    ; ON # Po   [2] EXCLAMATION MARK..QUOTATION MARK\n0026..0027    ; ON # Po   [2] AMPERSAND..APOSTROPHE\n0028          ; ON # Ps       LEFT PARENTHESIS\n0029          ; ON # Pe       RIGHT PARENTHESIS\n002A          ; ON # Po       ASTERISK\n003B          ; ON # Po       SEMICOLON\n003C..003E    ; ON # Sm   [3] LESS-THAN SIGN..GREATER-THAN SIGN\n003F..0040    ; ON # Po   [2] QUESTION MARK..COMMERCIAL AT\n005B          ; ON # Ps       LEFT SQUARE BRACKET\n005C          ; ON # Po       REVERSE SOLIDUS\n005D          ; ON # Pe       RIGHT SQUARE BRACKET\n005E          ; ON # Sk       CIRCUMFLEX ACCENT\n005F          ; ON # Pc       LOW LINE\n0060          ; ON # Sk       GRAVE ACCENT\n007B          ; ON # Ps       LEFT CURLY BRACKET\n007C          ; ON # Sm       VERTICAL LINE\n007D          ; ON # Pe       RIGHT CURLY BRACKET\n007E          ; ON # Sm       TILDE\n00A1          ; ON # Po       INVERTED EXCLAMATION MARK\n00A6          ; ON # So       BROKEN BAR\n00A7          ; ON # Po       SECTION SIGN\n00A8          ; ON # Sk       DIAERESIS\n00A9          ; ON # So       COPYRIGHT SIGN\n00AB          ; ON # Pi       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\n00AC          ; ON # Sm       NOT SIGN\n00AE          ; ON # So       REGISTERED SIGN\n00AF          ; ON # Sk       MACRON\n00B4          ; ON # Sk       ACUTE ACCENT\n00B6..00B7    ; ON # Po   [2] PILCROW SIGN..MIDDLE DOT\n00B8          ; ON # Sk       CEDILLA\n00BB          ; ON # Pf       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\n00BC..00BE    ; ON # No   [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS\n00BF          ; ON # Po       INVERTED QUESTION MARK\n00D7          ; ON # Sm       MULTIPLICATION SIGN\n00F7          ; ON # Sm       DIVISION SIGN\n02B9..02BA    ; ON # Lm   [2] MODIFIER LETTER PRIME..MODIFIER LETTER DOUBLE PRIME\n02C2..02C5    ; ON # Sk   [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD\n02C6..02CF    ; ON # Lm  [10] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER LOW ACUTE ACCENT\n02D2..02DF    ; ON # Sk  [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT\n02E5..02EB    ; ON # Sk   [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK\n02EC          ; ON # Lm       MODIFIER LETTER VOICING\n02ED          ; ON # Sk       MODIFIER LETTER UNASPIRATED\n02EF..02FF    ; ON # Sk  [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW\n0374          ; ON # Lm       GREEK NUMERAL SIGN\n0375          ; ON # Sk       GREEK LOWER NUMERAL SIGN\n037E          ; ON # Po       GREEK QUESTION MARK\n0384..0385    ; ON # Sk   [2] GREEK TONOS..GREEK DIALYTIKA TONOS\n0387          ; ON # Po       GREEK ANO TELEIA\n03F6          ; ON # Sm       GREEK REVERSED LUNATE EPSILON SYMBOL\n058A          ; ON # Pd       ARMENIAN HYPHEN\n058D..058E    ; ON # So   [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN\n0606..0607    ; ON # Sm   [2] ARABIC-INDIC CUBE ROOT..ARABIC-INDIC FOURTH ROOT\n060E..060F    ; ON # So   [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA\n06DE          ; ON # So       ARABIC START OF RUB EL HIZB\n06E9          ; ON # So       ARABIC PLACE OF SAJDAH\n07F6          ; ON # So       NKO SYMBOL OO DENNEN\n07F7..07F9    ; ON # Po   [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK\n0BF3..0BF8    ; ON # So   [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN\n0BFA          ; ON # So       TAMIL NUMBER SIGN\n0C78..0C7E    ; ON # No   [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR\n0F3A          ; ON # Ps       TIBETAN MARK GUG RTAGS GYON\n0F3B          ; ON # Pe       TIBETAN MARK GUG RTAGS GYAS\n0F3C          ; ON # Ps       TIBETAN MARK ANG KHANG GYON\n0F3D          ; ON # Pe       TIBETAN MARK ANG KHANG GYAS\n1390..1399    ; ON # So  [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT\n1400          ; ON # Pd       CANADIAN SYLLABICS HYPHEN\n169B          ; ON # Ps       OGHAM FEATHER MARK\n169C          ; ON # Pe       OGHAM REVERSED FEATHER MARK\n17F0..17F9    ; ON # No  [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON\n1800..1805    ; ON # Po   [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS\n1806          ; ON # Pd       MONGOLIAN TODO SOFT HYPHEN\n1807..180A    ; ON # Po   [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU\n1940          ; ON # So       LIMBU SIGN LOO\n1944..1945    ; ON # Po   [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK\n19DE..19FF    ; ON # So  [34] NEW TAI LUE SIGN LAE..KHMER SYMBOL DAP-PRAM ROC\n1FBD          ; ON # Sk       GREEK KORONIS\n1FBF..1FC1    ; ON # Sk   [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI\n1FCD..1FCF    ; ON # Sk   [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI\n1FDD..1FDF    ; ON # Sk   [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI\n1FED..1FEF    ; ON # Sk   [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA\n1FFD..1FFE    ; ON # Sk   [2] GREEK OXIA..GREEK DASIA\n2010..2015    ; ON # Pd   [6] HYPHEN..HORIZONTAL BAR\n2016..2017    ; ON # Po   [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE\n2018          ; ON # Pi       LEFT SINGLE QUOTATION MARK\n2019          ; ON # Pf       RIGHT SINGLE QUOTATION MARK\n201A          ; ON # Ps       SINGLE LOW-9 QUOTATION MARK\n201B..201C    ; ON # Pi   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK\n201D          ; ON # Pf       RIGHT DOUBLE QUOTATION MARK\n201E          ; ON # Ps       DOUBLE LOW-9 QUOTATION MARK\n201F          ; ON # Pi       DOUBLE HIGH-REVERSED-9 QUOTATION MARK\n2020..2027    ; ON # Po   [8] DAGGER..HYPHENATION POINT\n2035..2038    ; ON # Po   [4] REVERSED PRIME..CARET\n2039          ; ON # Pi       SINGLE LEFT-POINTING ANGLE QUOTATION MARK\n203A          ; ON # Pf       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\n203B..203E    ; ON # Po   [4] REFERENCE MARK..OVERLINE\n203F..2040    ; ON # Pc   [2] UNDERTIE..CHARACTER TIE\n2041..2043    ; ON # Po   [3] CARET INSERTION POINT..HYPHEN BULLET\n2045          ; ON # Ps       LEFT SQUARE BRACKET WITH QUILL\n2046          ; ON # Pe       RIGHT SQUARE BRACKET WITH QUILL\n2047..2051    ; ON # Po  [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY\n2052          ; ON # Sm       COMMERCIAL MINUS SIGN\n2053          ; ON # Po       SWUNG DASH\n2054          ; ON # Pc       INVERTED UNDERTIE\n2055..205E    ; ON # Po  [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS\n207C          ; ON # Sm       SUPERSCRIPT EQUALS SIGN\n207D          ; ON # Ps       SUPERSCRIPT LEFT PARENTHESIS\n207E          ; ON # Pe       SUPERSCRIPT RIGHT PARENTHESIS\n208C          ; ON # Sm       SUBSCRIPT EQUALS SIGN\n208D          ; ON # Ps       SUBSCRIPT LEFT PARENTHESIS\n208E          ; ON # Pe       SUBSCRIPT RIGHT PARENTHESIS\n2100..2101    ; ON # So   [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT\n2103..2106    ; ON # So   [4] DEGREE CELSIUS..CADA UNA\n2108..2109    ; ON # So   [2] SCRUPLE..DEGREE FAHRENHEIT\n2114          ; ON # So       L B BAR SYMBOL\n2116..2117    ; ON # So   [2] NUMERO SIGN..SOUND RECORDING COPYRIGHT\n2118          ; ON # Sm       SCRIPT CAPITAL P\n211E..2123    ; ON # So   [6] PRESCRIPTION TAKE..VERSICLE\n2125          ; ON # So       OUNCE SIGN\n2127          ; ON # So       INVERTED OHM SIGN\n2129          ; ON # So       TURNED GREEK SMALL LETTER IOTA\n213A..213B    ; ON # So   [2] ROTATED CAPITAL Q..FACSIMILE SIGN\n2140..2144    ; ON # Sm   [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y\n214A          ; ON # So       PROPERTY LINE\n214B          ; ON # Sm       TURNED AMPERSAND\n214C..214D    ; ON # So   [2] PER SIGN..AKTIESELSKAB\n2150..215F    ; ON # No  [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE\n2189          ; ON # No       VULGAR FRACTION ZERO THIRDS\n218A..218B    ; ON # So   [2] TURNED DIGIT TWO..TURNED DIGIT THREE\n2190..2194    ; ON # Sm   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW\n2195..2199    ; ON # So   [5] UP DOWN ARROW..SOUTH WEST ARROW\n219A..219B    ; ON # Sm   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE\n219C..219F    ; ON # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW\n21A0          ; ON # Sm       RIGHTWARDS TWO HEADED ARROW\n21A1..21A2    ; ON # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL\n21A3          ; ON # Sm       RIGHTWARDS ARROW WITH TAIL\n21A4..21A5    ; ON # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR\n21A6          ; ON # Sm       RIGHTWARDS ARROW FROM BAR\n21A7..21AD    ; ON # So   [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW\n21AE          ; ON # Sm       LEFT RIGHT ARROW WITH STROKE\n21AF..21CD    ; ON # So  [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE\n21CE..21CF    ; ON # Sm   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE\n21D0..21D1    ; ON # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW\n21D2          ; ON # Sm       RIGHTWARDS DOUBLE ARROW\n21D3          ; ON # So       DOWNWARDS DOUBLE ARROW\n21D4          ; ON # Sm       LEFT RIGHT DOUBLE ARROW\n21D5..21F3    ; ON # So  [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW\n21F4..2211    ; ON # Sm  [30] RIGHT ARROW WITH SMALL CIRCLE..N-ARY SUMMATION\n2214..22FF    ; ON # Sm [236] DOT PLUS..Z NOTATION BAG MEMBERSHIP\n2300..2307    ; ON # So   [8] DIAMETER SIGN..WAVY LINE\n2308          ; ON # Ps       LEFT CEILING\n2309          ; ON # Pe       RIGHT CEILING\n230A          ; ON # Ps       LEFT FLOOR\n230B          ; ON # Pe       RIGHT FLOOR\n230C..231F    ; ON # So  [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER\n2320..2321    ; ON # Sm   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL\n2322..2328    ; ON # So   [7] FROWN..KEYBOARD\n2329          ; ON # Ps       LEFT-POINTING ANGLE BRACKET\n232A          ; ON # Pe       RIGHT-POINTING ANGLE BRACKET\n232B..2335    ; ON # So  [11] ERASE TO THE LEFT..COUNTERSINK\n237B          ; ON # So       NOT CHECK MARK\n237C          ; ON # Sm       RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW\n237D..2394    ; ON # So  [24] SHOULDERED OPEN BOX..SOFTWARE-FUNCTION SYMBOL\n2396..239A    ; ON # So   [5] DECIMAL SEPARATOR KEY SYMBOL..CLEAR SCREEN SYMBOL\n239B..23B3    ; ON # Sm  [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM\n23B4..23DB    ; ON # So  [40] TOP SQUARE BRACKET..FUSE\n23DC..23E1    ; ON # Sm   [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET\n23E2..2429    ; ON # So  [72] WHITE TRAPEZIUM..SYMBOL FOR DELETE MEDIUM SHADE FORM\n2440..244A    ; ON # So  [11] OCR HOOK..OCR DOUBLE BACKSLASH\n2460..2487    ; ON # No  [40] CIRCLED DIGIT ONE..PARENTHESIZED NUMBER TWENTY\n24EA..24FF    ; ON # No  [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO\n2500..25B6    ; ON # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE\n25B7          ; ON # Sm       WHITE RIGHT-POINTING TRIANGLE\n25B8..25C0    ; ON # So   [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE\n25C1          ; ON # Sm       WHITE LEFT-POINTING TRIANGLE\n25C2..25F7    ; ON # So  [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT\n25F8..25FF    ; ON # Sm   [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE\n2600..266E    ; ON # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN\n266F          ; ON # Sm       MUSIC SHARP SIGN\n2670..26AB    ; ON # So  [60] WEST SYRIAC CROSS..MEDIUM BLACK CIRCLE\n26AD..2767    ; ON # So [187] MARRIAGE SYMBOL..ROTATED FLORAL HEART BULLET\n2768          ; ON # Ps       MEDIUM LEFT PARENTHESIS ORNAMENT\n2769          ; ON # Pe       MEDIUM RIGHT PARENTHESIS ORNAMENT\n276A          ; ON # Ps       MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT\n276B          ; ON # Pe       MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT\n276C          ; ON # Ps       MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT\n276D          ; ON # Pe       MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT\n276E          ; ON # Ps       HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT\n276F          ; ON # Pe       HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT\n2770          ; ON # Ps       HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT\n2771          ; ON # Pe       HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT\n2772          ; ON # Ps       LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT\n2773          ; ON # Pe       LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT\n2774          ; ON # Ps       MEDIUM LEFT CURLY BRACKET ORNAMENT\n2775          ; ON # Pe       MEDIUM RIGHT CURLY BRACKET ORNAMENT\n2776..2793    ; ON # No  [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN\n2794..27BF    ; ON # So  [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP\n27C0..27C4    ; ON # Sm   [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET\n27C5          ; ON # Ps       LEFT S-SHAPED BAG DELIMITER\n27C6          ; ON # Pe       RIGHT S-SHAPED BAG DELIMITER\n27C7..27E5    ; ON # Sm  [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK\n27E6          ; ON # Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET\n27E7          ; ON # Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET\n27E8          ; ON # Ps       MATHEMATICAL LEFT ANGLE BRACKET\n27E9          ; ON # Pe       MATHEMATICAL RIGHT ANGLE BRACKET\n27EA          ; ON # Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET\n27EB          ; ON # Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET\n27EC          ; ON # Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET\n27ED          ; ON # Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET\n27EE          ; ON # Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS\n27EF          ; ON # Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS\n27F0..27FF    ; ON # Sm  [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW\n2900..2982    ; ON # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON\n2983          ; ON # Ps       LEFT WHITE CURLY BRACKET\n2984          ; ON # Pe       RIGHT WHITE CURLY BRACKET\n2985          ; ON # Ps       LEFT WHITE PARENTHESIS\n2986          ; ON # Pe       RIGHT WHITE PARENTHESIS\n2987          ; ON # Ps       Z NOTATION LEFT IMAGE BRACKET\n2988          ; ON # Pe       Z NOTATION RIGHT IMAGE BRACKET\n2989          ; ON # Ps       Z NOTATION LEFT BINDING BRACKET\n298A          ; ON # Pe       Z NOTATION RIGHT BINDING BRACKET\n298B          ; ON # Ps       LEFT SQUARE BRACKET WITH UNDERBAR\n298C          ; ON # Pe       RIGHT SQUARE BRACKET WITH UNDERBAR\n298D          ; ON # Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER\n298E          ; ON # Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n298F          ; ON # Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n2990          ; ON # Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER\n2991          ; ON # Ps       LEFT ANGLE BRACKET WITH DOT\n2992          ; ON # Pe       RIGHT ANGLE BRACKET WITH DOT\n2993          ; ON # Ps       LEFT ARC LESS-THAN BRACKET\n2994          ; ON # Pe       RIGHT ARC GREATER-THAN BRACKET\n2995          ; ON # Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET\n2996          ; ON # Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET\n2997          ; ON # Ps       LEFT BLACK TORTOISE SHELL BRACKET\n2998          ; ON # Pe       RIGHT BLACK TORTOISE SHELL BRACKET\n2999..29D7    ; ON # Sm  [63] DOTTED FENCE..BLACK HOURGLASS\n29D8          ; ON # Ps       LEFT WIGGLY FENCE\n29D9          ; ON # Pe       RIGHT WIGGLY FENCE\n29DA          ; ON # Ps       LEFT DOUBLE WIGGLY FENCE\n29DB          ; ON # Pe       RIGHT DOUBLE WIGGLY FENCE\n29DC..29FB    ; ON # Sm  [32] INCOMPLETE INFINITY..TRIPLE PLUS\n29FC          ; ON # Ps       LEFT-POINTING CURVED ANGLE BRACKET\n29FD          ; ON # Pe       RIGHT-POINTING CURVED ANGLE BRACKET\n29FE..2AFF    ; ON # Sm [258] TINY..N-ARY WHITE VERTICAL BAR\n2B00..2B2F    ; ON # So  [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE\n2B30..2B44    ; ON # Sm  [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET\n2B45..2B46    ; ON # So   [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW\n2B47..2B4C    ; ON # Sm   [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR\n2B4D..2B73    ; ON # So  [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR\n2B76..2BFF    ; ON # So [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL\n2CE5..2CEA    ; ON # So   [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA\n2CF9..2CFC    ; ON # Po   [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER\n2CFD          ; ON # No       COPTIC FRACTION ONE HALF\n2CFE..2CFF    ; ON # Po   [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER\n2E00..2E01    ; ON # Po   [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER\n2E02          ; ON # Pi       LEFT SUBSTITUTION BRACKET\n2E03          ; ON # Pf       RIGHT SUBSTITUTION BRACKET\n2E04          ; ON # Pi       LEFT DOTTED SUBSTITUTION BRACKET\n2E05          ; ON # Pf       RIGHT DOTTED SUBSTITUTION BRACKET\n2E06..2E08    ; ON # Po   [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER\n2E09          ; ON # Pi       LEFT TRANSPOSITION BRACKET\n2E0A          ; ON # Pf       RIGHT TRANSPOSITION BRACKET\n2E0B          ; ON # Po       RAISED SQUARE\n2E0C          ; ON # Pi       LEFT RAISED OMISSION BRACKET\n2E0D          ; ON # Pf       RIGHT RAISED OMISSION BRACKET\n2E0E..2E16    ; ON # Po   [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE\n2E17          ; ON # Pd       DOUBLE OBLIQUE HYPHEN\n2E18..2E19    ; ON # Po   [2] INVERTED INTERROBANG..PALM BRANCH\n2E1A          ; ON # Pd       HYPHEN WITH DIAERESIS\n2E1B          ; ON # Po       TILDE WITH RING ABOVE\n2E1C          ; ON # Pi       LEFT LOW PARAPHRASE BRACKET\n2E1D          ; ON # Pf       RIGHT LOW PARAPHRASE BRACKET\n2E1E..2E1F    ; ON # Po   [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW\n2E20          ; ON # Pi       LEFT VERTICAL BAR WITH QUILL\n2E21          ; ON # Pf       RIGHT VERTICAL BAR WITH QUILL\n2E22          ; ON # Ps       TOP LEFT HALF BRACKET\n2E23          ; ON # Pe       TOP RIGHT HALF BRACKET\n2E24          ; ON # Ps       BOTTOM LEFT HALF BRACKET\n2E25          ; ON # Pe       BOTTOM RIGHT HALF BRACKET\n2E26          ; ON # Ps       LEFT SIDEWAYS U BRACKET\n2E27          ; ON # Pe       RIGHT SIDEWAYS U BRACKET\n2E28          ; ON # Ps       LEFT DOUBLE PARENTHESIS\n2E29          ; ON # Pe       RIGHT DOUBLE PARENTHESIS\n2E2A..2E2E    ; ON # Po   [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK\n2E2F          ; ON # Lm       VERTICAL TILDE\n2E30..2E39    ; ON # Po  [10] RING POINT..TOP HALF SECTION SIGN\n2E3A..2E3B    ; ON # Pd   [2] TWO-EM DASH..THREE-EM DASH\n2E3C..2E3F    ; ON # Po   [4] STENOGRAPHIC FULL STOP..CAPITULUM\n2E40          ; ON # Pd       DOUBLE HYPHEN\n2E41          ; ON # Po       REVERSED COMMA\n2E42          ; ON # Ps       DOUBLE LOW-REVERSED-9 QUOTATION MARK\n2E43..2E4F    ; ON # Po  [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER\n2E50..2E51    ; ON # So   [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR\n2E52..2E54    ; ON # Po   [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK\n2E55          ; ON # Ps       LEFT SQUARE BRACKET WITH STROKE\n2E56          ; ON # Pe       RIGHT SQUARE BRACKET WITH STROKE\n2E57          ; ON # Ps       LEFT SQUARE BRACKET WITH DOUBLE STROKE\n2E58          ; ON # Pe       RIGHT SQUARE BRACKET WITH DOUBLE STROKE\n2E59          ; ON # Ps       TOP HALF LEFT PARENTHESIS\n2E5A          ; ON # Pe       TOP HALF RIGHT PARENTHESIS\n2E5B          ; ON # Ps       BOTTOM HALF LEFT PARENTHESIS\n2E5C          ; ON # Pe       BOTTOM HALF RIGHT PARENTHESIS\n2E5D          ; ON # Pd       OBLIQUE HYPHEN\n2E80..2E99    ; ON # So  [26] CJK RADICAL REPEAT..CJK RADICAL RAP\n2E9B..2EF3    ; ON # So  [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE\n2F00..2FD5    ; ON # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE\n2FF0..2FFF    ; ON # So  [16] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION\n3001..3003    ; ON # Po   [3] IDEOGRAPHIC COMMA..DITTO MARK\n3004          ; ON # So       JAPANESE INDUSTRIAL STANDARD SYMBOL\n3008          ; ON # Ps       LEFT ANGLE BRACKET\n3009          ; ON # Pe       RIGHT ANGLE BRACKET\n300A          ; ON # Ps       LEFT DOUBLE ANGLE BRACKET\n300B          ; ON # Pe       RIGHT DOUBLE ANGLE BRACKET\n300C          ; ON # Ps       LEFT CORNER BRACKET\n300D          ; ON # Pe       RIGHT CORNER BRACKET\n300E          ; ON # Ps       LEFT WHITE CORNER BRACKET\n300F          ; ON # Pe       RIGHT WHITE CORNER BRACKET\n3010          ; ON # Ps       LEFT BLACK LENTICULAR BRACKET\n3011          ; ON # Pe       RIGHT BLACK LENTICULAR BRACKET\n3012..3013    ; ON # So   [2] POSTAL MARK..GETA MARK\n3014          ; ON # Ps       LEFT TORTOISE SHELL BRACKET\n3015          ; ON # Pe       RIGHT TORTOISE SHELL BRACKET\n3016          ; ON # Ps       LEFT WHITE LENTICULAR BRACKET\n3017          ; ON # Pe       RIGHT WHITE LENTICULAR BRACKET\n3018          ; ON # Ps       LEFT WHITE TORTOISE SHELL BRACKET\n3019          ; ON # Pe       RIGHT WHITE TORTOISE SHELL BRACKET\n301A          ; ON # Ps       LEFT WHITE SQUARE BRACKET\n301B          ; ON # Pe       RIGHT WHITE SQUARE BRACKET\n301C          ; ON # Pd       WAVE DASH\n301D          ; ON # Ps       REVERSED DOUBLE PRIME QUOTATION MARK\n301E..301F    ; ON # Pe   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK\n3020          ; ON # So       POSTAL MARK FACE\n3030          ; ON # Pd       WAVY DASH\n3036..3037    ; ON # So   [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL\n303D          ; ON # Po       PART ALTERNATION MARK\n303E..303F    ; ON # So   [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE\n309B..309C    ; ON # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n30A0          ; ON # Pd       KATAKANA-HIRAGANA DOUBLE HYPHEN\n30FB          ; ON # Po       KATAKANA MIDDLE DOT\n31C0..31E5    ; ON # So  [38] CJK STROKE T..CJK STROKE SZP\n31EF          ; ON # So       IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION\n321D..321E    ; ON # So   [2] PARENTHESIZED KOREAN CHARACTER OJEON..PARENTHESIZED KOREAN CHARACTER O HU\n3250          ; ON # So       PARTNERSHIP SIGN\n3251..325F    ; ON # No  [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE\n327C..327E    ; ON # So   [3] CIRCLED KOREAN CHARACTER CHAMKO..CIRCLED HANGUL IEUNG U\n32B1..32BF    ; ON # No  [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY\n32CC..32CF    ; ON # So   [4] SQUARE HG..LIMITED LIABILITY SIGN\n3377..337A    ; ON # So   [4] SQUARE DM..SQUARE IU\n33DE..33DF    ; ON # So   [2] SQUARE V OVER M..SQUARE A OVER M\n33FF          ; ON # So       SQUARE GAL\n4DC0..4DFF    ; ON # So  [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION\nA490..A4C6    ; ON # So  [55] YI RADICAL QOT..YI RADICAL KE\nA60D..A60F    ; ON # Po   [3] VAI COMMA..VAI QUESTION MARK\nA673          ; ON # Po       SLAVONIC ASTERISK\nA67E          ; ON # Po       CYRILLIC KAVYKA\nA67F          ; ON # Lm       CYRILLIC PAYEROK\nA700..A716    ; ON # Sk  [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR\nA717..A71F    ; ON # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK\nA720..A721    ; ON # Sk   [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE\nA788          ; ON # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT\nA828..A82B    ; ON # So   [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4\nA874..A877    ; ON # Po   [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD\nAB6A..AB6B    ; ON # Sk   [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK\nFBC3..FBD2    ; ON # So  [16] ARABIC LIGATURE JALLA WA-ALAA..ARABIC LIGATURE ALAYHI AR-RAHMAH\nFD3E          ; ON # Pe       ORNATE LEFT PARENTHESIS\nFD3F          ; ON # Ps       ORNATE RIGHT PARENTHESIS\nFD40..FD4F    ; ON # So  [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH\nFD90..FD91    ; ON # So   [2] ARABIC LIGATURE RAHMATU ALLAAHI ALAYH..ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA\nFDC8..FDCF    ; ON # So   [8] ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA..ARABIC LIGATURE SALAAMUHU ALAYNAA\nFDFD..FDFF    ; ON # So   [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL\nFE10..FE16    ; ON # Po   [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK\nFE17          ; ON # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET\nFE18          ; ON # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET\nFE19          ; ON # Po       PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS\nFE30          ; ON # Po       PRESENTATION FORM FOR VERTICAL TWO DOT LEADER\nFE31..FE32    ; ON # Pd   [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH\nFE33..FE34    ; ON # Pc   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE\nFE35          ; ON # Ps       PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS\nFE36          ; ON # Pe       PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS\nFE37          ; ON # Ps       PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET\nFE38          ; ON # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET\nFE39          ; ON # Ps       PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET\nFE3A          ; ON # Pe       PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET\nFE3B          ; ON # Ps       PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET\nFE3C          ; ON # Pe       PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET\nFE3D          ; ON # Ps       PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET\nFE3E          ; ON # Pe       PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET\nFE3F          ; ON # Ps       PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET\nFE40          ; ON # Pe       PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET\nFE41          ; ON # Ps       PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET\nFE42          ; ON # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET\nFE43          ; ON # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET\nFE44          ; ON # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET\nFE45..FE46    ; ON # Po   [2] SESAME DOT..WHITE SESAME DOT\nFE47          ; ON # Ps       PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET\nFE48          ; ON # Pe       PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET\nFE49..FE4C    ; ON # Po   [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE\nFE4D..FE4F    ; ON # Pc   [3] DASHED LOW LINE..WAVY LOW LINE\nFE51          ; ON # Po       SMALL IDEOGRAPHIC COMMA\nFE54          ; ON # Po       SMALL SEMICOLON\nFE56..FE57    ; ON # Po   [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK\nFE58          ; ON # Pd       SMALL EM DASH\nFE59          ; ON # Ps       SMALL LEFT PARENTHESIS\nFE5A          ; ON # Pe       SMALL RIGHT PARENTHESIS\nFE5B          ; ON # Ps       SMALL LEFT CURLY BRACKET\nFE5C          ; ON # Pe       SMALL RIGHT CURLY BRACKET\nFE5D          ; ON # Ps       SMALL LEFT TORTOISE SHELL BRACKET\nFE5E          ; ON # Pe       SMALL RIGHT TORTOISE SHELL BRACKET\nFE60..FE61    ; ON # Po   [2] SMALL AMPERSAND..SMALL ASTERISK\nFE64..FE66    ; ON # Sm   [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN\nFE68          ; ON # Po       SMALL REVERSE SOLIDUS\nFE6B          ; ON # Po       SMALL COMMERCIAL AT\nFF01..FF02    ; ON # Po   [2] FULLWIDTH EXCLAMATION MARK..FULLWIDTH QUOTATION MARK\nFF06..FF07    ; ON # Po   [2] FULLWIDTH AMPERSAND..FULLWIDTH APOSTROPHE\nFF08          ; ON # Ps       FULLWIDTH LEFT PARENTHESIS\nFF09          ; ON # Pe       FULLWIDTH RIGHT PARENTHESIS\nFF0A          ; ON # Po       FULLWIDTH ASTERISK\nFF1B          ; ON # Po       FULLWIDTH SEMICOLON\nFF1C..FF1E    ; ON # Sm   [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN\nFF1F..FF20    ; ON # Po   [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT\nFF3B          ; ON # Ps       FULLWIDTH LEFT SQUARE BRACKET\nFF3C          ; ON # Po       FULLWIDTH REVERSE SOLIDUS\nFF3D          ; ON # Pe       FULLWIDTH RIGHT SQUARE BRACKET\nFF3E          ; ON # Sk       FULLWIDTH CIRCUMFLEX ACCENT\nFF3F          ; ON # Pc       FULLWIDTH LOW LINE\nFF40          ; ON # Sk       FULLWIDTH GRAVE ACCENT\nFF5B          ; ON # Ps       FULLWIDTH LEFT CURLY BRACKET\nFF5C          ; ON # Sm       FULLWIDTH VERTICAL LINE\nFF5D          ; ON # Pe       FULLWIDTH RIGHT CURLY BRACKET\nFF5E          ; ON # Sm       FULLWIDTH TILDE\nFF5F          ; ON # Ps       FULLWIDTH LEFT WHITE PARENTHESIS\nFF60          ; ON # Pe       FULLWIDTH RIGHT WHITE PARENTHESIS\nFF61          ; ON # Po       HALFWIDTH IDEOGRAPHIC FULL STOP\nFF62          ; ON # Ps       HALFWIDTH LEFT CORNER BRACKET\nFF63          ; ON # Pe       HALFWIDTH RIGHT CORNER BRACKET\nFF64..FF65    ; ON # Po   [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT\nFFE2          ; ON # Sm       FULLWIDTH NOT SIGN\nFFE3          ; ON # Sk       FULLWIDTH MACRON\nFFE4          ; ON # So       FULLWIDTH BROKEN BAR\nFFE8          ; ON # So       HALFWIDTH FORMS LIGHT VERTICAL\nFFE9..FFEC    ; ON # Sm   [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW\nFFED..FFEE    ; ON # So   [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE\nFFF9..FFFB    ; ON # Cf   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR\nFFFC..FFFD    ; ON # So   [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER\n10101         ; ON # Po       AEGEAN WORD SEPARATOR DOT\n10140..10174  ; ON # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS\n10175..10178  ; ON # No   [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN\n10179..10189  ; ON # So  [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN\n1018A..1018B  ; ON # No   [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN\n1018C         ; ON # So       GREEK SINUSOID SIGN\n10190..1019C  ; ON # So  [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL\n101A0         ; ON # So       GREEK SYMBOL TAU RHO\n1091F         ; ON # Po       PHOENICIAN WORD SEPARATOR\n10B39..10B3F  ; ON # Po   [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION\n10D6E         ; ON # Pd       GARAY HYPHEN\n10ED0         ; ON # Po       ARABIC BIBLICAL END OF VERSE\n10ED1..10ED8  ; ON # So   [8] ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM..ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH\n11052..11065  ; ON # No  [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND\n11660..1166C  ; ON # Po  [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT\n11FD5..11FDC  ; ON # So   [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI\n11FE1..11FF1  ; ON # So  [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA\n16FE2         ; ON # Po       OLD CHINESE HOOK MARK\n1CC00..1CCD5  ; ON # So [214] UP-POINTING GO-KART..LOWER RIGHT QUADRANT STANDING KNIGHT\n1CCFA..1CCFC  ; ON # So   [3] SNAKE SYMBOL..NOSE SYMBOL\n1CD00..1CEB3  ; ON # So [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET\n1CEBA..1CED0  ; ON # So  [23] FRAGILE SYMBOL..LEUKOTHEA\n1CEE0..1CEEF  ; ON # So  [16] GEOMANTIC FIGURE POPULUS..GEOMANTIC FIGURE VIA\n1CEF0         ; ON # Sm       MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR\n1D1E9..1D1EA  ; ON # So   [2] MUSICAL SYMBOL SORI..MUSICAL SYMBOL KORON\n1D200..1D241  ; ON # So  [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54\n1D245         ; ON # So       GREEK MUSICAL LEIMMA\n1D300..1D356  ; ON # So  [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING\n1D6C1         ; ON # Sm       MATHEMATICAL BOLD NABLA\n1D6DB         ; ON # Sm       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL\n1D6FB         ; ON # Sm       MATHEMATICAL ITALIC NABLA\n1D715         ; ON # Sm       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL\n1D735         ; ON # Sm       MATHEMATICAL BOLD ITALIC NABLA\n1D74F         ; ON # Sm       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL\n1D76F         ; ON # Sm       MATHEMATICAL SANS-SERIF BOLD NABLA\n1D789         ; ON # Sm       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL\n1D7A9         ; ON # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA\n1D7C3         ; ON # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL\n1EEF0..1EEF1  ; ON # Sm   [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL\n1F000..1F02B  ; ON # So  [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK\n1F030..1F093  ; ON # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06\n1F0A0..1F0AE  ; ON # So  [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES\n1F0B1..1F0BF  ; ON # So  [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER\n1F0C1..1F0CF  ; ON # So  [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER\n1F0D1..1F0F5  ; ON # So  [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21\n1F10B..1F10C  ; ON # No   [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO\n1F10D..1F10F  ; ON # So   [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH\n1F12F         ; ON # So       COPYLEFT SYMBOL\n1F16A..1F16F  ; ON # So   [6] RAISED MC SIGN..CIRCLED HUMAN FIGURE\n1F1AD         ; ON # So       MASK WORK SYMBOL\n1F260..1F265  ; ON # So   [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI\n1F300..1F3FA  ; ON # So [251] CYCLONE..AMPHORA\n1F3FB..1F3FF  ; ON # Sk   [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6\n1F400..1F6D8  ; ON # So [729] RAT..LANDSLIDE\n1F6DC..1F6EC  ; ON # So  [17] WIRELESS..AIRPLANE ARRIVING\n1F6F0..1F6FC  ; ON # So  [13] SATELLITE..ROLLER SKATE\n1F700..1F7D9  ; ON # So [218] ALCHEMICAL SYMBOL FOR QUINTESSENCE..NINE POINTED WHITE STAR\n1F7E0..1F7EB  ; ON # So  [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE\n1F7F0         ; ON # So       HEAVY EQUALS SIGN\n1F800..1F80B  ; ON # So  [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD\n1F810..1F847  ; ON # So  [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW\n1F850..1F859  ; ON # So  [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW\n1F860..1F887  ; ON # So  [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW\n1F890..1F8AD  ; ON # So  [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS\n1F8B0..1F8BB  ; ON # So  [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR\n1F8C0..1F8C1  ; ON # So   [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW\n1F8D0..1F8D8  ; ON # Sm   [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE\n1F900..1FA57  ; ON # So [344] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS ALFIL\n1FA60..1FA6D  ; ON # So  [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER\n1FA70..1FA7C  ; ON # So  [13] BALLET SHOES..CRUTCH\n1FA80..1FA8A  ; ON # So  [11] YO-YO..TROMBONE\n1FA8E..1FAC6  ; ON # So  [57] TREASURE CHEST..FINGERPRINT\n1FAC8         ; ON # So       HAIRY CREATURE\n1FACD..1FADC  ; ON # So  [16] ORCA..ROOT VEGETABLE\n1FADF..1FAEA  ; ON # So  [12] SPLATTER..DISTORTED FACE\n1FAEF..1FAF8  ; ON # So  [10] FIGHT CLOUD..RIGHTWARDS PUSHING HAND\n1FB00..1FB92  ; ON # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK\n1FB94..1FBEF  ; ON # So  [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE\n1FBFA         ; ON # So       ALARM BELL SYMBOL\n\n# Total code points: 6854\n\n# ================================================\n\n# Bidi_Class=Boundary_Neutral\n\n0000..0008    ; BN # Cc   [9] <control-0000>..<control-0008>\n000E..001B    ; BN # Cc  [14] <control-000E>..<control-001B>\n007F..0084    ; BN # Cc   [6] <control-007F>..<control-0084>\n0086..009F    ; BN # Cc  [26] <control-0086>..<control-009F>\n00AD          ; BN # Cf       SOFT HYPHEN\n180E          ; BN # Cf       MONGOLIAN VOWEL SEPARATOR\n200B..200D    ; BN # Cf   [3] ZERO WIDTH SPACE..ZERO WIDTH JOINER\n2060..2064    ; BN # Cf   [5] WORD JOINER..INVISIBLE PLUS\n2065          ; BN # Cn       <reserved-2065>\n206A..206F    ; BN # Cf   [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES\nFDD0..FDEF    ; BN # Cn  [32] <noncharacter-FDD0>..<noncharacter-FDEF>\nFEFF          ; BN # Cf       ZERO WIDTH NO-BREAK SPACE\nFFF0..FFF8    ; BN # Cn   [9] <reserved-FFF0>..<reserved-FFF8>\nFFFE..FFFF    ; BN # Cn   [2] <noncharacter-FFFE>..<noncharacter-FFFF>\n1BCA0..1BCA3  ; BN # Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP\n1D173..1D17A  ; BN # Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE\n1FFFE..1FFFF  ; BN # Cn   [2] <noncharacter-1FFFE>..<noncharacter-1FFFF>\n2FFFE..2FFFF  ; BN # Cn   [2] <noncharacter-2FFFE>..<noncharacter-2FFFF>\n3FFFE..3FFFF  ; BN # Cn   [2] <noncharacter-3FFFE>..<noncharacter-3FFFF>\n4FFFE..4FFFF  ; BN # Cn   [2] <noncharacter-4FFFE>..<noncharacter-4FFFF>\n5FFFE..5FFFF  ; BN # Cn   [2] <noncharacter-5FFFE>..<noncharacter-5FFFF>\n6FFFE..6FFFF  ; BN # Cn   [2] <noncharacter-6FFFE>..<noncharacter-6FFFF>\n7FFFE..7FFFF  ; BN # Cn   [2] <noncharacter-7FFFE>..<noncharacter-7FFFF>\n8FFFE..8FFFF  ; BN # Cn   [2] <noncharacter-8FFFE>..<noncharacter-8FFFF>\n9FFFE..9FFFF  ; BN # Cn   [2] <noncharacter-9FFFE>..<noncharacter-9FFFF>\nAFFFE..AFFFF  ; BN # Cn   [2] <noncharacter-AFFFE>..<noncharacter-AFFFF>\nBFFFE..BFFFF  ; BN # Cn   [2] <noncharacter-BFFFE>..<noncharacter-BFFFF>\nCFFFE..CFFFF  ; BN # Cn   [2] <noncharacter-CFFFE>..<noncharacter-CFFFF>\nDFFFE..E0000  ; BN # Cn   [3] <noncharacter-DFFFE>..<reserved-E0000>\nE0001         ; BN # Cf       LANGUAGE TAG\nE0002..E001F  ; BN # Cn  [30] <reserved-E0002>..<reserved-E001F>\nE0020..E007F  ; BN # Cf  [96] TAG SPACE..CANCEL TAG\nE0080..E00FF  ; BN # Cn [128] <reserved-E0080>..<reserved-E00FF>\nE01F0..E0FFF  ; BN # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>\nEFFFE..EFFFF  ; BN # Cn   [2] <noncharacter-EFFFE>..<noncharacter-EFFFF>\nFFFFE..FFFFF  ; BN # Cn   [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>\n10FFFE..10FFFF; BN # Cn   [2] <noncharacter-10FFFE>..<noncharacter-10FFFF>\n\n# Total code points: 4016\n\n# ================================================\n\n# Bidi_Class=Nonspacing_Mark\n\n0300..036F    ; NSM # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\n0483..0487    ; NSM # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\n0488..0489    ; NSM # Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN\n0591..05BD    ; NSM # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\n05BF          ; NSM # Mn       HEBREW POINT RAFE\n05C1..05C2    ; NSM # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n05C4..05C5    ; NSM # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n05C7          ; NSM # Mn       HEBREW POINT QAMATS QATAN\n0610..061A    ; NSM # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n064B..065F    ; NSM # Mn  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW\n0670          ; NSM # Mn       ARABIC LETTER SUPERSCRIPT ALEF\n06D6..06DC    ; NSM # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n06DF..06E4    ; NSM # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\n06E7..06E8    ; NSM # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n06EA..06ED    ; NSM # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\n0711          ; NSM # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH\n0730..074A    ; NSM # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\n07A6..07B0    ; NSM # Mn  [11] THAANA ABAFILI..THAANA SUKUN\n07EB..07F3    ; NSM # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\n07FD          ; NSM # Mn       NKO DANTAYALAN\n0816..0819    ; NSM # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\n081B..0823    ; NSM # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n0825..0827    ; NSM # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n0829..082D    ; NSM # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\n0859..085B    ; NSM # Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\n0897..089F    ; NSM # Mn   [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA\n08CA..08E1    ; NSM # Mn  [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA\n08E3..0902    ; NSM # Mn  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA\n093A          ; NSM # Mn       DEVANAGARI VOWEL SIGN OE\n093C          ; NSM # Mn       DEVANAGARI SIGN NUKTA\n0941..0948    ; NSM # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n094D          ; NSM # Mn       DEVANAGARI SIGN VIRAMA\n0951..0957    ; NSM # Mn   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE\n0962..0963    ; NSM # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n0981          ; NSM # Mn       BENGALI SIGN CANDRABINDU\n09BC          ; NSM # Mn       BENGALI SIGN NUKTA\n09C1..09C4    ; NSM # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n09CD          ; NSM # Mn       BENGALI SIGN VIRAMA\n09E2..09E3    ; NSM # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n09FE          ; NSM # Mn       BENGALI SANDHI MARK\n0A01..0A02    ; NSM # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n0A3C          ; NSM # Mn       GURMUKHI SIGN NUKTA\n0A41..0A42    ; NSM # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n0A47..0A48    ; NSM # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n0A4B..0A4D    ; NSM # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\n0A51          ; NSM # Mn       GURMUKHI SIGN UDAAT\n0A70..0A71    ; NSM # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n0A75          ; NSM # Mn       GURMUKHI SIGN YAKASH\n0A81..0A82    ; NSM # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n0ABC          ; NSM # Mn       GUJARATI SIGN NUKTA\n0AC1..0AC5    ; NSM # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n0AC7..0AC8    ; NSM # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n0ACD          ; NSM # Mn       GUJARATI SIGN VIRAMA\n0AE2..0AE3    ; NSM # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n0AFA..0AFF    ; NSM # Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\n0B01          ; NSM # Mn       ORIYA SIGN CANDRABINDU\n0B3C          ; NSM # Mn       ORIYA SIGN NUKTA\n0B3F          ; NSM # Mn       ORIYA VOWEL SIGN I\n0B41..0B44    ; NSM # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n0B4D          ; NSM # Mn       ORIYA SIGN VIRAMA\n0B55..0B56    ; NSM # Mn   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK\n0B62..0B63    ; NSM # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n0B82          ; NSM # Mn       TAMIL SIGN ANUSVARA\n0BC0          ; NSM # Mn       TAMIL VOWEL SIGN II\n0BCD          ; NSM # Mn       TAMIL SIGN VIRAMA\n0C00          ; NSM # Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE\n0C04          ; NSM # Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE\n0C3C          ; NSM # Mn       TELUGU SIGN NUKTA\n0C3E..0C40    ; NSM # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n0C46..0C48    ; NSM # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n0C4A..0C4D    ; NSM # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA\n0C55..0C56    ; NSM # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n0C62..0C63    ; NSM # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n0C81          ; NSM # Mn       KANNADA SIGN CANDRABINDU\n0CBC          ; NSM # Mn       KANNADA SIGN NUKTA\n0CCC..0CCD    ; NSM # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\n0CE2..0CE3    ; NSM # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n0D00..0D01    ; NSM # Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n0D3B..0D3C    ; NSM # Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n0D41..0D44    ; NSM # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n0D4D          ; NSM # Mn       MALAYALAM SIGN VIRAMA\n0D62..0D63    ; NSM # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n0D81          ; NSM # Mn       SINHALA SIGN CANDRABINDU\n0DCA          ; NSM # Mn       SINHALA SIGN AL-LAKUNA\n0DD2..0DD4    ; NSM # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n0DD6          ; NSM # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA\n0E31          ; NSM # Mn       THAI CHARACTER MAI HAN-AKAT\n0E34..0E3A    ; NSM # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n0E47..0E4E    ; NSM # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\n0EB1          ; NSM # Mn       LAO VOWEL SIGN MAI KAN\n0EB4..0EBC    ; NSM # Mn   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO\n0EC8..0ECE    ; NSM # Mn   [7] LAO TONE MAI EK..LAO YAMAKKAN\n0F18..0F19    ; NSM # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\n0F35          ; NSM # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA\n0F37          ; NSM # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS\n0F39          ; NSM # Mn       TIBETAN MARK TSA -PHRU\n0F71..0F7E    ; NSM # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n0F80..0F84    ; NSM # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\n0F86..0F87    ; NSM # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\n0F8D..0F97    ; NSM # Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n0F99..0FBC    ; NSM # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n0FC6          ; NSM # Mn       TIBETAN SYMBOL PADMA GDAN\n102D..1030    ; NSM # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n1032..1037    ; NSM # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\n1039..103A    ; NSM # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\n103D..103E    ; NSM # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n1058..1059    ; NSM # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n105E..1060    ; NSM # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n1071..1074    ; NSM # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n1082          ; NSM # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n1085..1086    ; NSM # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n108D          ; NSM # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n109D          ; NSM # Mn       MYANMAR VOWEL SIGN AITON AI\n135D..135F    ; NSM # Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\n1712..1714    ; NSM # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\n1732..1733    ; NSM # Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U\n1752..1753    ; NSM # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n1772..1773    ; NSM # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n17B4..17B5    ; NSM # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n17B7..17BD    ; NSM # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n17C6          ; NSM # Mn       KHMER SIGN NIKAHIT\n17C9..17D3    ; NSM # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\n17DD          ; NSM # Mn       KHMER SIGN ATTHACAN\n180B..180D    ; NSM # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n180F          ; NSM # Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR\n1885..1886    ; NSM # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n18A9          ; NSM # Mn       MONGOLIAN LETTER ALI GALI DAGALGA\n1920..1922    ; NSM # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n1927..1928    ; NSM # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n1932          ; NSM # Mn       LIMBU SMALL LETTER ANUSVARA\n1939..193B    ; NSM # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\n1A17..1A18    ; NSM # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n1A1B          ; NSM # Mn       BUGINESE VOWEL SIGN AE\n1A56          ; NSM # Mn       TAI THAM CONSONANT SIGN MEDIAL LA\n1A58..1A5E    ; NSM # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n1A60          ; NSM # Mn       TAI THAM SIGN SAKOT\n1A62          ; NSM # Mn       TAI THAM VOWEL SIGN MAI SAT\n1A65..1A6C    ; NSM # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n1A73..1A7C    ; NSM # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\n1A7F          ; NSM # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT\n1AB0..1ABD    ; NSM # Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\n1ABE          ; NSM # Me       COMBINING PARENTHESES OVERLAY\n1ABF..1ADD    ; NSM # Mn  [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW\n1AE0..1AEB    ; NSM # Mn  [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE\n1B00..1B03    ; NSM # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n1B34          ; NSM # Mn       BALINESE SIGN REREKAN\n1B36..1B3A    ; NSM # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n1B3C          ; NSM # Mn       BALINESE VOWEL SIGN LA LENGA\n1B42          ; NSM # Mn       BALINESE VOWEL SIGN PEPET\n1B6B..1B73    ; NSM # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\n1B80..1B81    ; NSM # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n1BA2..1BA5    ; NSM # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n1BA8..1BA9    ; NSM # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n1BAB..1BAD    ; NSM # Mn   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA\n1BE6          ; NSM # Mn       BATAK SIGN TOMPI\n1BE8..1BE9    ; NSM # Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n1BED          ; NSM # Mn       BATAK VOWEL SIGN KARO O\n1BEF..1BF1    ; NSM # Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n1C2C..1C33    ; NSM # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n1C36..1C37    ; NSM # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\n1CD0..1CD2    ; NSM # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\n1CD4..1CE0    ; NSM # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n1CE2..1CE8    ; NSM # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n1CED          ; NSM # Mn       VEDIC SIGN TIRYAK\n1CF4          ; NSM # Mn       VEDIC TONE CANDRA ABOVE\n1CF8..1CF9    ; NSM # Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n1DC0..1DFF    ; NSM # Mn  [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\n20D0..20DC    ; NSM # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n20DD..20E0    ; NSM # Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH\n20E1          ; NSM # Mn       COMBINING LEFT RIGHT ARROW ABOVE\n20E2..20E4    ; NSM # Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE\n20E5..20F0    ; NSM # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\n2CEF..2CF1    ; NSM # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\n2D7F          ; NSM # Mn       TIFINAGH CONSONANT JOINER\n2DE0..2DFF    ; NSM # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\n302A..302D    ; NSM # Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n3099..309A    ; NSM # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\nA66F          ; NSM # Mn       COMBINING CYRILLIC VZMET\nA670..A672    ; NSM # Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN\nA674..A67D    ; NSM # Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\nA69E..A69F    ; NSM # Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\nA6F0..A6F1    ; NSM # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\nA802          ; NSM # Mn       SYLOTI NAGRI SIGN DVISVARA\nA806          ; NSM # Mn       SYLOTI NAGRI SIGN HASANTA\nA80B          ; NSM # Mn       SYLOTI NAGRI SIGN ANUSVARA\nA825..A826    ; NSM # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\nA82C          ; NSM # Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA\nA8C4..A8C5    ; NSM # Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\nA8E0..A8F1    ; NSM # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\nA8FF          ; NSM # Mn       DEVANAGARI VOWEL SIGN AY\nA926..A92D    ; NSM # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\nA947..A951    ; NSM # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\nA980..A982    ; NSM # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\nA9B3          ; NSM # Mn       JAVANESE SIGN CECAK TELU\nA9B6..A9B9    ; NSM # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\nA9BC..A9BD    ; NSM # Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET\nA9E5          ; NSM # Mn       MYANMAR SIGN SHAN SAW\nAA29..AA2E    ; NSM # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\nAA31..AA32    ; NSM # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\nAA35..AA36    ; NSM # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\nAA43          ; NSM # Mn       CHAM CONSONANT SIGN FINAL NG\nAA4C          ; NSM # Mn       CHAM CONSONANT SIGN FINAL M\nAA7C          ; NSM # Mn       MYANMAR SIGN TAI LAING TONE-2\nAAB0          ; NSM # Mn       TAI VIET MAI KANG\nAAB2..AAB4    ; NSM # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\nAAB7..AAB8    ; NSM # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\nAABE..AABF    ; NSM # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\nAAC1          ; NSM # Mn       TAI VIET TONE MAI THO\nAAEC..AAED    ; NSM # Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\nAAF6          ; NSM # Mn       MEETEI MAYEK VIRAMA\nABE5          ; NSM # Mn       MEETEI MAYEK VOWEL SIGN ANAP\nABE8          ; NSM # Mn       MEETEI MAYEK VOWEL SIGN UNAP\nABED          ; NSM # Mn       MEETEI MAYEK APUN IYEK\nFB1E          ; NSM # Mn       HEBREW POINT JUDEO-SPANISH VARIKA\nFE00..FE0F    ; NSM # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\nFE20..FE2F    ; NSM # Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\n101FD         ; NSM # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\n102E0         ; NSM # Mn       COPTIC EPACT THOUSANDS MARK\n10376..1037A  ; NSM # Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n10A01..10A03  ; NSM # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n10A05..10A06  ; NSM # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n10A0C..10A0F  ; NSM # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n10A38..10A3A  ; NSM # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\n10A3F         ; NSM # Mn       KHAROSHTHI VIRAMA\n10AE5..10AE6  ; NSM # Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\n10D24..10D27  ; NSM # Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n10D69..10D6D  ; NSM # Mn   [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK\n10EAB..10EAC  ; NSM # Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK\n10EFA..10EFF  ; NSM # Mn   [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA\n10F46..10F50  ; NSM # Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW\n10F82..10F85  ; NSM # Mn   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW\n11001         ; NSM # Mn       BRAHMI SIGN ANUSVARA\n11038..11046  ; NSM # Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\n11070         ; NSM # Mn       BRAHMI SIGN OLD TAMIL VIRAMA\n11073..11074  ; NSM # Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O\n1107F..11081  ; NSM # Mn   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA\n110B3..110B6  ; NSM # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n110B9..110BA  ; NSM # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\n110C2         ; NSM # Mn       KAITHI VOWEL SIGN VOCALIC R\n11100..11102  ; NSM # Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n11127..1112B  ; NSM # Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n1112D..11134  ; NSM # Mn   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA\n11173         ; NSM # Mn       MAHAJANI SIGN NUKTA\n11180..11181  ; NSM # Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n111B6..111BE  ; NSM # Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n111C9..111CC  ; NSM # Mn   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK\n111CF         ; NSM # Mn       SHARADA SIGN INVERTED CANDRABINDU\n1122F..11231  ; NSM # Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n11234         ; NSM # Mn       KHOJKI SIGN ANUSVARA\n11236..11237  ; NSM # Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\n1123E         ; NSM # Mn       KHOJKI SIGN SUKUN\n11241         ; NSM # Mn       KHOJKI VOWEL SIGN VOCALIC R\n112DF         ; NSM # Mn       KHUDAWADI SIGN ANUSVARA\n112E3..112EA  ; NSM # Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\n11300..11301  ; NSM # Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n1133B..1133C  ; NSM # Mn   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA\n11340         ; NSM # Mn       GRANTHA VOWEL SIGN II\n11366..1136C  ; NSM # Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\n11370..11374  ; NSM # Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\n113BB..113C0  ; NSM # Mn   [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL\n113CE         ; NSM # Mn       TULU-TIGALARI SIGN VIRAMA\n113D0         ; NSM # Mn       TULU-TIGALARI CONJOINER\n113D2         ; NSM # Mn       TULU-TIGALARI GEMINATION MARK\n113E1..113E2  ; NSM # Mn   [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA\n11438..1143F  ; NSM # Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n11442..11444  ; NSM # Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\n11446         ; NSM # Mn       NEWA SIGN NUKTA\n1145E         ; NSM # Mn       NEWA SANDHI MARK\n114B3..114B8  ; NSM # Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n114BA         ; NSM # Mn       TIRHUTA VOWEL SIGN SHORT E\n114BF..114C0  ; NSM # Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n114C2..114C3  ; NSM # Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\n115B2..115B5  ; NSM # Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n115BC..115BD  ; NSM # Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n115BF..115C0  ; NSM # Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\n115DC..115DD  ; NSM # Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n11633..1163A  ; NSM # Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n1163D         ; NSM # Mn       MODI SIGN ANUSVARA\n1163F..11640  ; NSM # Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\n116AB         ; NSM # Mn       TAKRI SIGN ANUSVARA\n116AD         ; NSM # Mn       TAKRI VOWEL SIGN AA\n116B0..116B5  ; NSM # Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n116B7         ; NSM # Mn       TAKRI SIGN NUKTA\n1171D         ; NSM # Mn       AHOM CONSONANT SIGN MEDIAL LA\n1171F         ; NSM # Mn       AHOM CONSONANT SIGN MEDIAL LIGATING RA\n11722..11725  ; NSM # Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n11727..1172B  ; NSM # Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\n1182F..11837  ; NSM # Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA\n11839..1183A  ; NSM # Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA\n1193B..1193C  ; NSM # Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU\n1193E         ; NSM # Mn       DIVES AKURU VIRAMA\n11943         ; NSM # Mn       DIVES AKURU SIGN NUKTA\n119D4..119D7  ; NSM # Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR\n119DA..119DB  ; NSM # Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI\n119E0         ; NSM # Mn       NANDINAGARI SIGN VIRAMA\n11A01..11A06  ; NSM # Mn   [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O\n11A09..11A0A  ; NSM # Mn   [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n11A33..11A38  ; NSM # Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\n11A3B..11A3E  ; NSM # Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n11A47         ; NSM # Mn       ZANABAZAR SQUARE SUBJOINER\n11A51..11A56  ; NSM # Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n11A59..11A5B  ; NSM # Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n11A8A..11A96  ; NSM # Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n11A98..11A99  ; NSM # Mn   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER\n11B60         ; NSM # Mn       SHARADA VOWEL SIGN OE\n11B62..11B64  ; NSM # Mn   [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E\n11B66         ; NSM # Mn       SHARADA VOWEL SIGN CANDRA E\n11C30..11C36  ; NSM # Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n11C38..11C3D  ; NSM # Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n11C92..11CA7  ; NSM # Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n11CAA..11CB0  ; NSM # Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n11CB2..11CB3  ; NSM # Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n11CB5..11CB6  ; NSM # Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n11D31..11D36  ; NSM # Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n11D3A         ; NSM # Mn       MASARAM GONDI VOWEL SIGN E\n11D3C..11D3D  ; NSM # Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n11D3F..11D45  ; NSM # Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\n11D47         ; NSM # Mn       MASARAM GONDI RA-KARA\n11D90..11D91  ; NSM # Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI\n11D95         ; NSM # Mn       GUNJALA GONDI SIGN ANUSVARA\n11D97         ; NSM # Mn       GUNJALA GONDI VIRAMA\n11EF3..11EF4  ; NSM # Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U\n11F00..11F01  ; NSM # Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA\n11F36..11F3A  ; NSM # Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R\n11F40         ; NSM # Mn       KAWI VOWEL SIGN EU\n11F42         ; NSM # Mn       KAWI CONJOINER\n11F5A         ; NSM # Mn       KAWI SIGN NUKTA\n13440         ; NSM # Mn       EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY\n13447..13455  ; NSM # Mn  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED\n1611E..16129  ; NSM # Mn  [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK\n1612D..1612F  ; NSM # Mn   [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA\n16AF0..16AF4  ; NSM # Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\n16B30..16B36  ; NSM # Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\n16F4F         ; NSM # Mn       MIAO SIGN CONSONANT MODIFIER BAR\n16F8F..16F92  ; NSM # Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n16FE4         ; NSM # Mn       KHITAN SMALL SCRIPT FILLER\n1BC9D..1BC9E  ; NSM # Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\n1CF00..1CF2D  ; NSM # Mn  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT\n1CF30..1CF46  ; NSM # Mn  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG\n1D167..1D169  ; NSM # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\n1D17B..1D182  ; NSM # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\n1D185..1D18B  ; NSM # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\n1D1AA..1D1AD  ; NSM # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\n1D242..1D244  ; NSM # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\n1DA00..1DA36  ; NSM # Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\n1DA3B..1DA6C  ; NSM # Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\n1DA75         ; NSM # Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\n1DA84         ; NSM # Mn       SIGNWRITING LOCATION HEAD NECK\n1DA9B..1DA9F  ; NSM # Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\n1DAA1..1DAAF  ; NSM # Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\n1E000..1E006  ; NSM # Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n1E008..1E018  ; NSM # Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n1E01B..1E021  ; NSM # Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n1E023..1E024  ; NSM # Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n1E026..1E02A  ; NSM # Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n1E08F         ; NSM # Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n1E130..1E136  ; NSM # Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D\n1E2AE         ; NSM # Mn       TOTO SIGN RISING TONE\n1E2EC..1E2EF  ; NSM # Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI\n1E4EC..1E4EF  ; NSM # Mn   [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH\n1E5EE..1E5EF  ; NSM # Mn   [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR\n1E6E3         ; NSM # Mn       TAI YO SIGN UE\n1E6E6         ; NSM # Mn       TAI YO SIGN AU\n1E6EE..1E6EF  ; NSM # Mn   [2] TAI YO SIGN AY..TAI YO SIGN ANG\n1E6F5         ; NSM # Mn       TAI YO SIGN OM\n1E8D0..1E8D6  ; NSM # Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\n1E944..1E94A  ; NSM # Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\nE0100..E01EF  ; NSM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\n\n# Total code points: 2067\n\n# ================================================\n\n# Bidi_Class=Arabic_Letter\n\n0608          ; AL # Sm       ARABIC RAY\n060B          ; AL # Sc       AFGHANI SIGN\n060D          ; AL # Po       ARABIC DATE SEPARATOR\n061B          ; AL # Po       ARABIC SEMICOLON\n061C          ; AL # Cf       ARABIC LETTER MARK\n061D..061F    ; AL # Po   [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK\n0620..063F    ; AL # Lo  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE\n0640          ; AL # Lm       ARABIC TATWEEL\n0641..064A    ; AL # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH\n066D          ; AL # Po       ARABIC FIVE POINTED STAR\n066E..066F    ; AL # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF\n0671..06D3    ; AL # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n06D4          ; AL # Po       ARABIC FULL STOP\n06D5          ; AL # Lo       ARABIC LETTER AE\n06E5..06E6    ; AL # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH\n06EE..06EF    ; AL # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V\n06FA..06FC    ; AL # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW\n06FD..06FE    ; AL # So   [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN\n06FF          ; AL # Lo       ARABIC LETTER HEH WITH INVERTED V\n0700..070D    ; AL # Po  [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS\n070F          ; AL # Cf       SYRIAC ABBREVIATION MARK\n0710          ; AL # Lo       SYRIAC LETTER ALAPH\n0712..072F    ; AL # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH\n074D..07A5    ; AL # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU\n07B1          ; AL # Lo       THAANA LETTER NAA\n0860..086A    ; AL # Lo  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA\n0870..0887    ; AL # Lo  [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT\n0888          ; AL # Sk       ARABIC RAISED ROUND DOT\n0889..088F    ; AL # Lo   [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE\n08A0..08C8    ; AL # Lo  [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF\n08C9          ; AL # Lm       ARABIC SMALL FARSI YEH\nFB50..FBB1    ; AL # Lo  [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM\nFBB2..FBC2    ; AL # Sk  [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE\nFBD3..FD3D    ; AL # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM\nFD50..FD8F    ; AL # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM\nFD92..FDC7    ; AL # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM\nFDF0..FDFB    ; AL # Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU\nFDFC          ; AL # Sc       RIAL SIGN\nFE70..FE74    ; AL # Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM\nFE76..FEFC    ; AL # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM\n10D00..10D23  ; AL # Lo  [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA\n10EC2..10EC4  ; AL # Lo   [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW\n10EC5         ; AL # Lm       ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW\n10EC6..10EC7  ; AL # Lo   [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW\n10F30..10F45  ; AL # Lo  [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN\n10F51..10F54  ; AL # No   [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED\n10F55..10F59  ; AL # Po   [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT\n1EC71..1ECAB  ; AL # No  [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE\n1ECAC         ; AL # So       INDIC SIYAQ PLACEHOLDER\n1ECAD..1ECAF  ; AL # No   [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS\n1ECB0         ; AL # Sc       INDIC SIYAQ RUPEE MARK\n1ECB1..1ECB4  ; AL # No   [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK\n1ED01..1ED2D  ; AL # No  [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND\n1ED2E         ; AL # So       OTTOMAN SIYAQ MARRATAN\n1ED2F..1ED3D  ; AL # No  [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH\n1EE00..1EE03  ; AL # Lo   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL\n1EE05..1EE1F  ; AL # Lo  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF\n1EE21..1EE22  ; AL # Lo   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM\n1EE24         ; AL # Lo       ARABIC MATHEMATICAL INITIAL HEH\n1EE27         ; AL # Lo       ARABIC MATHEMATICAL INITIAL HAH\n1EE29..1EE32  ; AL # Lo  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF\n1EE34..1EE37  ; AL # Lo   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH\n1EE39         ; AL # Lo       ARABIC MATHEMATICAL INITIAL DAD\n1EE3B         ; AL # Lo       ARABIC MATHEMATICAL INITIAL GHAIN\n1EE42         ; AL # Lo       ARABIC MATHEMATICAL TAILED JEEM\n1EE47         ; AL # Lo       ARABIC MATHEMATICAL TAILED HAH\n1EE49         ; AL # Lo       ARABIC MATHEMATICAL TAILED YEH\n1EE4B         ; AL # Lo       ARABIC MATHEMATICAL TAILED LAM\n1EE4D..1EE4F  ; AL # Lo   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN\n1EE51..1EE52  ; AL # Lo   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF\n1EE54         ; AL # Lo       ARABIC MATHEMATICAL TAILED SHEEN\n1EE57         ; AL # Lo       ARABIC MATHEMATICAL TAILED KHAH\n1EE59         ; AL # Lo       ARABIC MATHEMATICAL TAILED DAD\n1EE5B         ; AL # Lo       ARABIC MATHEMATICAL TAILED GHAIN\n1EE5D         ; AL # Lo       ARABIC MATHEMATICAL TAILED DOTLESS NOON\n1EE5F         ; AL # Lo       ARABIC MATHEMATICAL TAILED DOTLESS QAF\n1EE61..1EE62  ; AL # Lo   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM\n1EE64         ; AL # Lo       ARABIC MATHEMATICAL STRETCHED HEH\n1EE67..1EE6A  ; AL # Lo   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF\n1EE6C..1EE72  ; AL # Lo   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF\n1EE74..1EE77  ; AL # Lo   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH\n1EE79..1EE7C  ; AL # Lo   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH\n1EE7E         ; AL # Lo       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH\n1EE80..1EE89  ; AL # Lo  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH\n1EE8B..1EE9B  ; AL # Lo  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN\n1EEA1..1EEA3  ; AL # Lo   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL\n1EEA5..1EEA9  ; AL # Lo   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH\n1EEAB..1EEBB  ; AL # Lo  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN\n\n# The above property value applies to 253 code points not listed here.\n# Total code points: 1731\n\n# ================================================\n\n# Bidi_Class=Left_To_Right_Override\n\n202D          ; LRO # Cf       LEFT-TO-RIGHT OVERRIDE\n\n# Total code points: 1\n\n# ================================================\n\n# Bidi_Class=Right_To_Left_Override\n\n202E          ; RLO # Cf       RIGHT-TO-LEFT OVERRIDE\n\n# Total code points: 1\n\n# ================================================\n\n# Bidi_Class=Left_To_Right_Embedding\n\n202A          ; LRE # Cf       LEFT-TO-RIGHT EMBEDDING\n\n# Total code points: 1\n\n# ================================================\n\n# Bidi_Class=Right_To_Left_Embedding\n\n202B          ; RLE # Cf       RIGHT-TO-LEFT EMBEDDING\n\n# Total code points: 1\n\n# ================================================\n\n# Bidi_Class=Pop_Directional_Format\n\n202C          ; PDF # Cf       POP DIRECTIONAL FORMATTING\n\n# Total code points: 1\n\n# ================================================\n\n# Bidi_Class=Left_To_Right_Isolate\n\n2066          ; LRI # Cf       LEFT-TO-RIGHT ISOLATE\n\n# Total code points: 1\n\n# ================================================\n\n# Bidi_Class=Right_To_Left_Isolate\n\n2067          ; RLI # Cf       RIGHT-TO-LEFT ISOLATE\n\n# Total code points: 1\n\n# ================================================\n\n# Bidi_Class=First_Strong_Isolate\n\n2068          ; FSI # Cf       FIRST STRONG ISOLATE\n\n# Total code points: 1\n\n# ================================================\n\n# Bidi_Class=Pop_Directional_Isolate\n\n2069          ; PDI # Cf       POP DIRECTIONAL ISOLATE\n\n# Total code points: 1\n\n# EOF\n"
  },
  {
    "path": "maint/Unicode.tables/DerivedCoreProperties.txt",
    "content": "# DerivedCoreProperties-17.0.0.txt\n# Date: 2025-07-30, 23:55:08 GMT\n# © 2025 Unicode®, Inc.\n# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.\n# For terms of use and license, see https://www.unicode.org/terms_of_use.html\n#\n# Unicode Character Database\n#   For documentation, see https://www.unicode.org/reports/tr44/\n\n# ================================================\n\n# Derived Property: Math\n#  Generated from: Sm + Other_Math\n\n002B          ; Math # Sm       PLUS SIGN\n003C..003E    ; Math # Sm   [3] LESS-THAN SIGN..GREATER-THAN SIGN\n005E          ; Math # Sk       CIRCUMFLEX ACCENT\n007C          ; Math # Sm       VERTICAL LINE\n007E          ; Math # Sm       TILDE\n00AC          ; Math # Sm       NOT SIGN\n00B1          ; Math # Sm       PLUS-MINUS SIGN\n00D7          ; Math # Sm       MULTIPLICATION SIGN\n00F7          ; Math # Sm       DIVISION SIGN\n03D0..03D2    ; Math # L&   [3] GREEK BETA SYMBOL..GREEK UPSILON WITH HOOK SYMBOL\n03D5          ; Math # L&       GREEK PHI SYMBOL\n03F0..03F1    ; Math # L&   [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL\n03F4..03F5    ; Math # L&   [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL\n03F6          ; Math # Sm       GREEK REVERSED LUNATE EPSILON SYMBOL\n0606..0608    ; Math # Sm   [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY\n2016          ; Math # Po       DOUBLE VERTICAL LINE\n2032..2034    ; Math # Po   [3] PRIME..TRIPLE PRIME\n2040          ; Math # Pc       CHARACTER TIE\n2044          ; Math # Sm       FRACTION SLASH\n2052          ; Math # Sm       COMMERCIAL MINUS SIGN\n2061..2064    ; Math # Cf   [4] FUNCTION APPLICATION..INVISIBLE PLUS\n207A..207C    ; Math # Sm   [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN\n207D          ; Math # Ps       SUPERSCRIPT LEFT PARENTHESIS\n207E          ; Math # Pe       SUPERSCRIPT RIGHT PARENTHESIS\n208A..208C    ; Math # Sm   [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN\n208D          ; Math # Ps       SUBSCRIPT LEFT PARENTHESIS\n208E          ; Math # Pe       SUBSCRIPT RIGHT PARENTHESIS\n20D0..20DC    ; Math # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n20E1          ; Math # Mn       COMBINING LEFT RIGHT ARROW ABOVE\n20E5..20E6    ; Math # Mn   [2] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING DOUBLE VERTICAL STROKE OVERLAY\n20EB..20EF    ; Math # Mn   [5] COMBINING LONG DOUBLE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW\n2102          ; Math # L&       DOUBLE-STRUCK CAPITAL C\n2107          ; Math # L&       EULER CONSTANT\n210A..2113    ; Math # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L\n2115          ; Math # L&       DOUBLE-STRUCK CAPITAL N\n2118          ; Math # Sm       SCRIPT CAPITAL P\n2119..211D    ; Math # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n2124          ; Math # L&       DOUBLE-STRUCK CAPITAL Z\n2128          ; Math # L&       BLACK-LETTER CAPITAL Z\n2129          ; Math # So       TURNED GREEK SMALL LETTER IOTA\n212C..212D    ; Math # L&   [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C\n212F..2131    ; Math # L&   [3] SCRIPT SMALL E..SCRIPT CAPITAL F\n2133..2134    ; Math # L&   [2] SCRIPT CAPITAL M..SCRIPT SMALL O\n2135..2138    ; Math # Lo   [4] ALEF SYMBOL..DALET SYMBOL\n213C..213F    ; Math # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI\n2140..2144    ; Math # Sm   [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y\n2145..2149    ; Math # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J\n214B          ; Math # Sm       TURNED AMPERSAND\n2190..2194    ; Math # Sm   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW\n2195..2199    ; Math # So   [5] UP DOWN ARROW..SOUTH WEST ARROW\n219A..219B    ; Math # Sm   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE\n219C..219F    ; Math # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW\n21A0          ; Math # Sm       RIGHTWARDS TWO HEADED ARROW\n21A1..21A2    ; Math # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL\n21A3          ; Math # Sm       RIGHTWARDS ARROW WITH TAIL\n21A4..21A5    ; Math # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR\n21A6          ; Math # Sm       RIGHTWARDS ARROW FROM BAR\n21A7          ; Math # So       DOWNWARDS ARROW FROM BAR\n21A9..21AD    ; Math # So   [5] LEFTWARDS ARROW WITH HOOK..LEFT RIGHT WAVE ARROW\n21AE          ; Math # Sm       LEFT RIGHT ARROW WITH STROKE\n21B0..21B1    ; Math # So   [2] UPWARDS ARROW WITH TIP LEFTWARDS..UPWARDS ARROW WITH TIP RIGHTWARDS\n21B6..21B7    ; Math # So   [2] ANTICLOCKWISE TOP SEMICIRCLE ARROW..CLOCKWISE TOP SEMICIRCLE ARROW\n21BC..21CD    ; Math # So  [18] LEFTWARDS HARPOON WITH BARB UPWARDS..LEFTWARDS DOUBLE ARROW WITH STROKE\n21CE..21CF    ; Math # Sm   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE\n21D0..21D1    ; Math # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW\n21D2          ; Math # Sm       RIGHTWARDS DOUBLE ARROW\n21D3          ; Math # So       DOWNWARDS DOUBLE ARROW\n21D4          ; Math # Sm       LEFT RIGHT DOUBLE ARROW\n21D5..21DB    ; Math # So   [7] UP DOWN DOUBLE ARROW..RIGHTWARDS TRIPLE ARROW\n21DD          ; Math # So       RIGHTWARDS SQUIGGLE ARROW\n21E4..21E5    ; Math # So   [2] LEFTWARDS ARROW TO BAR..RIGHTWARDS ARROW TO BAR\n21F4..22FF    ; Math # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP\n2308          ; Math # Ps       LEFT CEILING\n2309          ; Math # Pe       RIGHT CEILING\n230A          ; Math # Ps       LEFT FLOOR\n230B          ; Math # Pe       RIGHT FLOOR\n2320..2321    ; Math # Sm   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL\n237C          ; Math # Sm       RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW\n239B..23B3    ; Math # Sm  [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM\n23B4..23B5    ; Math # So   [2] TOP SQUARE BRACKET..BOTTOM SQUARE BRACKET\n23B7          ; Math # So       RADICAL SYMBOL BOTTOM\n23D0          ; Math # So       VERTICAL LINE EXTENSION\n23DC..23E1    ; Math # Sm   [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET\n23E2          ; Math # So       WHITE TRAPEZIUM\n25A0..25A1    ; Math # So   [2] BLACK SQUARE..WHITE SQUARE\n25AE..25B6    ; Math # So   [9] BLACK VERTICAL RECTANGLE..BLACK RIGHT-POINTING TRIANGLE\n25B7          ; Math # Sm       WHITE RIGHT-POINTING TRIANGLE\n25BC..25C0    ; Math # So   [5] BLACK DOWN-POINTING TRIANGLE..BLACK LEFT-POINTING TRIANGLE\n25C1          ; Math # Sm       WHITE LEFT-POINTING TRIANGLE\n25C6..25C7    ; Math # So   [2] BLACK DIAMOND..WHITE DIAMOND\n25CA..25CB    ; Math # So   [2] LOZENGE..WHITE CIRCLE\n25CF..25D3    ; Math # So   [5] BLACK CIRCLE..CIRCLE WITH UPPER HALF BLACK\n25E2          ; Math # So       BLACK LOWER RIGHT TRIANGLE\n25E4          ; Math # So       BLACK UPPER LEFT TRIANGLE\n25E7..25EC    ; Math # So   [6] SQUARE WITH LEFT HALF BLACK..WHITE UP-POINTING TRIANGLE WITH DOT\n25F8..25FF    ; Math # Sm   [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE\n2605..2606    ; Math # So   [2] BLACK STAR..WHITE STAR\n2640          ; Math # So       FEMALE SIGN\n2642          ; Math # So       MALE SIGN\n2660..2663    ; Math # So   [4] BLACK SPADE SUIT..BLACK CLUB SUIT\n266D..266E    ; Math # So   [2] MUSIC FLAT SIGN..MUSIC NATURAL SIGN\n266F          ; Math # Sm       MUSIC SHARP SIGN\n27C0..27C4    ; Math # Sm   [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET\n27C5          ; Math # Ps       LEFT S-SHAPED BAG DELIMITER\n27C6          ; Math # Pe       RIGHT S-SHAPED BAG DELIMITER\n27C7..27E5    ; Math # Sm  [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK\n27E6          ; Math # Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET\n27E7          ; Math # Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET\n27E8          ; Math # Ps       MATHEMATICAL LEFT ANGLE BRACKET\n27E9          ; Math # Pe       MATHEMATICAL RIGHT ANGLE BRACKET\n27EA          ; Math # Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET\n27EB          ; Math # Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET\n27EC          ; Math # Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET\n27ED          ; Math # Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET\n27EE          ; Math # Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS\n27EF          ; Math # Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS\n27F0..27FF    ; Math # Sm  [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW\n2900..2982    ; Math # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON\n2983          ; Math # Ps       LEFT WHITE CURLY BRACKET\n2984          ; Math # Pe       RIGHT WHITE CURLY BRACKET\n2985          ; Math # Ps       LEFT WHITE PARENTHESIS\n2986          ; Math # Pe       RIGHT WHITE PARENTHESIS\n2987          ; Math # Ps       Z NOTATION LEFT IMAGE BRACKET\n2988          ; Math # Pe       Z NOTATION RIGHT IMAGE BRACKET\n2989          ; Math # Ps       Z NOTATION LEFT BINDING BRACKET\n298A          ; Math # Pe       Z NOTATION RIGHT BINDING BRACKET\n298B          ; Math # Ps       LEFT SQUARE BRACKET WITH UNDERBAR\n298C          ; Math # Pe       RIGHT SQUARE BRACKET WITH UNDERBAR\n298D          ; Math # Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER\n298E          ; Math # Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n298F          ; Math # Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n2990          ; Math # Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER\n2991          ; Math # Ps       LEFT ANGLE BRACKET WITH DOT\n2992          ; Math # Pe       RIGHT ANGLE BRACKET WITH DOT\n2993          ; Math # Ps       LEFT ARC LESS-THAN BRACKET\n2994          ; Math # Pe       RIGHT ARC GREATER-THAN BRACKET\n2995          ; Math # Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET\n2996          ; Math # Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET\n2997          ; Math # Ps       LEFT BLACK TORTOISE SHELL BRACKET\n2998          ; Math # Pe       RIGHT BLACK TORTOISE SHELL BRACKET\n2999..29D7    ; Math # Sm  [63] DOTTED FENCE..BLACK HOURGLASS\n29D8          ; Math # Ps       LEFT WIGGLY FENCE\n29D9          ; Math # Pe       RIGHT WIGGLY FENCE\n29DA          ; Math # Ps       LEFT DOUBLE WIGGLY FENCE\n29DB          ; Math # Pe       RIGHT DOUBLE WIGGLY FENCE\n29DC..29FB    ; Math # Sm  [32] INCOMPLETE INFINITY..TRIPLE PLUS\n29FC          ; Math # Ps       LEFT-POINTING CURVED ANGLE BRACKET\n29FD          ; Math # Pe       RIGHT-POINTING CURVED ANGLE BRACKET\n29FE..2AFF    ; Math # Sm [258] TINY..N-ARY WHITE VERTICAL BAR\n2B30..2B44    ; Math # Sm  [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET\n2B47..2B4C    ; Math # Sm   [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR\nFB29          ; Math # Sm       HEBREW LETTER ALTERNATIVE PLUS SIGN\nFE61          ; Math # Po       SMALL ASTERISK\nFE62          ; Math # Sm       SMALL PLUS SIGN\nFE63          ; Math # Pd       SMALL HYPHEN-MINUS\nFE64..FE66    ; Math # Sm   [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN\nFE68          ; Math # Po       SMALL REVERSE SOLIDUS\nFF0B          ; Math # Sm       FULLWIDTH PLUS SIGN\nFF1C..FF1E    ; Math # Sm   [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN\nFF3C          ; Math # Po       FULLWIDTH REVERSE SOLIDUS\nFF3E          ; Math # Sk       FULLWIDTH CIRCUMFLEX ACCENT\nFF5C          ; Math # Sm       FULLWIDTH VERTICAL LINE\nFF5E          ; Math # Sm       FULLWIDTH TILDE\nFFE2          ; Math # Sm       FULLWIDTH NOT SIGN\nFFE9..FFEC    ; Math # Sm   [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW\n10D8E..10D8F  ; Math # Sm   [2] GARAY PLUS SIGN..GARAY MINUS SIGN\n1CEF0         ; Math # Sm       MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR\n1D400..1D454  ; Math # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D49C  ; Math # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; Math # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; Math # L&       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; Math # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; Math # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B9  ; Math # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; Math # L&       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; Math # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D505  ; Math # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; Math # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; Math # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; Math # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D51E..1D539  ; Math # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; Math # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; Math # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; Math # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; Math # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D552..1D6A5  ; Math # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6A8..1D6C0  ; Math # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6C1         ; Math # Sm       MATHEMATICAL BOLD NABLA\n1D6C2..1D6DA  ; Math # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DB         ; Math # Sm       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL\n1D6DC..1D6FA  ; Math # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D6FB         ; Math # Sm       MATHEMATICAL ITALIC NABLA\n1D6FC..1D714  ; Math # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D715         ; Math # Sm       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL\n1D716..1D734  ; Math # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D735         ; Math # Sm       MATHEMATICAL BOLD ITALIC NABLA\n1D736..1D74E  ; Math # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D74F         ; Math # Sm       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL\n1D750..1D76E  ; Math # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D76F         ; Math # Sm       MATHEMATICAL SANS-SERIF BOLD NABLA\n1D770..1D788  ; Math # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D789         ; Math # Sm       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL\n1D78A..1D7A8  ; Math # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7A9         ; Math # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA\n1D7AA..1D7C2  ; Math # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C3         ; Math # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL\n1D7C4..1D7CB  ; Math # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA\n1D7CE..1D7FF  ; Math # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE\n1EE00..1EE03  ; Math # Lo   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL\n1EE05..1EE1F  ; Math # Lo  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF\n1EE21..1EE22  ; Math # Lo   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM\n1EE24         ; Math # Lo       ARABIC MATHEMATICAL INITIAL HEH\n1EE27         ; Math # Lo       ARABIC MATHEMATICAL INITIAL HAH\n1EE29..1EE32  ; Math # Lo  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF\n1EE34..1EE37  ; Math # Lo   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH\n1EE39         ; Math # Lo       ARABIC MATHEMATICAL INITIAL DAD\n1EE3B         ; Math # Lo       ARABIC MATHEMATICAL INITIAL GHAIN\n1EE42         ; Math # Lo       ARABIC MATHEMATICAL TAILED JEEM\n1EE47         ; Math # Lo       ARABIC MATHEMATICAL TAILED HAH\n1EE49         ; Math # Lo       ARABIC MATHEMATICAL TAILED YEH\n1EE4B         ; Math # Lo       ARABIC MATHEMATICAL TAILED LAM\n1EE4D..1EE4F  ; Math # Lo   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN\n1EE51..1EE52  ; Math # Lo   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF\n1EE54         ; Math # Lo       ARABIC MATHEMATICAL TAILED SHEEN\n1EE57         ; Math # Lo       ARABIC MATHEMATICAL TAILED KHAH\n1EE59         ; Math # Lo       ARABIC MATHEMATICAL TAILED DAD\n1EE5B         ; Math # Lo       ARABIC MATHEMATICAL TAILED GHAIN\n1EE5D         ; Math # Lo       ARABIC MATHEMATICAL TAILED DOTLESS NOON\n1EE5F         ; Math # Lo       ARABIC MATHEMATICAL TAILED DOTLESS QAF\n1EE61..1EE62  ; Math # Lo   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM\n1EE64         ; Math # Lo       ARABIC MATHEMATICAL STRETCHED HEH\n1EE67..1EE6A  ; Math # Lo   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF\n1EE6C..1EE72  ; Math # Lo   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF\n1EE74..1EE77  ; Math # Lo   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH\n1EE79..1EE7C  ; Math # Lo   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH\n1EE7E         ; Math # Lo       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH\n1EE80..1EE89  ; Math # Lo  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH\n1EE8B..1EE9B  ; Math # Lo  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN\n1EEA1..1EEA3  ; Math # Lo   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL\n1EEA5..1EEA9  ; Math # Lo   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH\n1EEAB..1EEBB  ; Math # Lo  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN\n1EEF0..1EEF1  ; Math # Sm   [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL\n1F8D0..1F8D8  ; Math # Sm   [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE\n\n# Total code points: 2322\n\n# ================================================\n\n# Derived Property: Alphabetic\n#  Generated from: Uppercase + Lowercase + Lt + Lm + Lo + Nl + Other_Alphabetic\n\n0041..005A    ; Alphabetic # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n0061..007A    ; Alphabetic # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00AA          ; Alphabetic # Lo       FEMININE ORDINAL INDICATOR\n00B5          ; Alphabetic # L&       MICRO SIGN\n00BA          ; Alphabetic # Lo       MASCULINE ORDINAL INDICATOR\n00C0..00D6    ; Alphabetic # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00F6    ; Alphabetic # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..01BA    ; Alphabetic # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL\n01BB          ; Alphabetic # Lo       LATIN LETTER TWO WITH STROKE\n01BC..01BF    ; Alphabetic # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN\n01C0..01C3    ; Alphabetic # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK\n01C4..0293    ; Alphabetic # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL\n0294..0295    ; Alphabetic # Lo   [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE\n0296..02AF    ; Alphabetic # L&  [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL\n02B0..02C1    ; Alphabetic # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP\n02C6..02D1    ; Alphabetic # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON\n02E0..02E4    ; Alphabetic # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n02EC          ; Alphabetic # Lm       MODIFIER LETTER VOICING\n02EE          ; Alphabetic # Lm       MODIFIER LETTER DOUBLE APOSTROPHE\n0345          ; Alphabetic # Mn       COMBINING GREEK YPOGEGRAMMENI\n0363..036F    ; Alphabetic # Mn  [13] COMBINING LATIN SMALL LETTER A..COMBINING LATIN SMALL LETTER X\n0370..0373    ; Alphabetic # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI\n0374          ; Alphabetic # Lm       GREEK NUMERAL SIGN\n0376..0377    ; Alphabetic # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037A          ; Alphabetic # Lm       GREEK YPOGEGRAMMENI\n037B..037D    ; Alphabetic # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n037F          ; Alphabetic # L&       GREEK CAPITAL LETTER YOT\n0386          ; Alphabetic # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0388..038A    ; Alphabetic # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; Alphabetic # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..03A1    ; Alphabetic # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO\n03A3..03F5    ; Alphabetic # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL\n03F7..0481    ; Alphabetic # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA\n048A..052F    ; Alphabetic # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER\n0531..0556    ; Alphabetic # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n0559          ; Alphabetic # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING\n0560..0588    ; Alphabetic # L&  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE\n05B0..05BD    ; Alphabetic # Mn  [14] HEBREW POINT SHEVA..HEBREW POINT METEG\n05BF          ; Alphabetic # Mn       HEBREW POINT RAFE\n05C1..05C2    ; Alphabetic # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n05C4..05C5    ; Alphabetic # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n05C7          ; Alphabetic # Mn       HEBREW POINT QAMATS QATAN\n05D0..05EA    ; Alphabetic # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV\n05EF..05F2    ; Alphabetic # Lo   [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD\n0610..061A    ; Alphabetic # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n0620..063F    ; Alphabetic # Lo  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE\n0640          ; Alphabetic # Lm       ARABIC TATWEEL\n0641..064A    ; Alphabetic # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH\n064B..0657    ; Alphabetic # Mn  [13] ARABIC FATHATAN..ARABIC INVERTED DAMMA\n0659..065F    ; Alphabetic # Mn   [7] ARABIC ZWARAKAY..ARABIC WAVY HAMZA BELOW\n066E..066F    ; Alphabetic # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF\n0670          ; Alphabetic # Mn       ARABIC LETTER SUPERSCRIPT ALEF\n0671..06D3    ; Alphabetic # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n06D5          ; Alphabetic # Lo       ARABIC LETTER AE\n06D6..06DC    ; Alphabetic # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n06E1..06E4    ; Alphabetic # Mn   [4] ARABIC SMALL HIGH DOTLESS HEAD OF KHAH..ARABIC SMALL HIGH MADDA\n06E5..06E6    ; Alphabetic # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH\n06E7..06E8    ; Alphabetic # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n06ED          ; Alphabetic # Mn       ARABIC SMALL LOW MEEM\n06EE..06EF    ; Alphabetic # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V\n06FA..06FC    ; Alphabetic # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW\n06FF          ; Alphabetic # Lo       ARABIC LETTER HEH WITH INVERTED V\n0710          ; Alphabetic # Lo       SYRIAC LETTER ALAPH\n0711          ; Alphabetic # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH\n0712..072F    ; Alphabetic # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH\n0730..073F    ; Alphabetic # Mn  [16] SYRIAC PTHAHA ABOVE..SYRIAC RWAHA\n074D..07A5    ; Alphabetic # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU\n07A6..07B0    ; Alphabetic # Mn  [11] THAANA ABAFILI..THAANA SUKUN\n07B1          ; Alphabetic # Lo       THAANA LETTER NAA\n07CA..07EA    ; Alphabetic # Lo  [33] NKO LETTER A..NKO LETTER JONA RA\n07F4..07F5    ; Alphabetic # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE\n07FA          ; Alphabetic # Lm       NKO LAJANYALAN\n0800..0815    ; Alphabetic # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF\n0816..0817    ; Alphabetic # Mn   [2] SAMARITAN MARK IN..SAMARITAN MARK IN-ALAF\n081A          ; Alphabetic # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT\n081B..0823    ; Alphabetic # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n0824          ; Alphabetic # Lm       SAMARITAN MODIFIER LETTER SHORT A\n0825..0827    ; Alphabetic # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n0828          ; Alphabetic # Lm       SAMARITAN MODIFIER LETTER I\n0829..082C    ; Alphabetic # Mn   [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN\n0840..0858    ; Alphabetic # Lo  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN\n0860..086A    ; Alphabetic # Lo  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA\n0870..0887    ; Alphabetic # Lo  [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT\n0889..088F    ; Alphabetic # Lo   [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE\n0897          ; Alphabetic # Mn       ARABIC PEPET\n08A0..08C8    ; Alphabetic # Lo  [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF\n08C9          ; Alphabetic # Lm       ARABIC SMALL FARSI YEH\n08D4..08DF    ; Alphabetic # Mn  [12] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH WORD WAQFA\n08E3..08E9    ; Alphabetic # Mn   [7] ARABIC TURNED DAMMA BELOW..ARABIC CURLY KASRATAN\n08F0..0902    ; Alphabetic # Mn  [19] ARABIC OPEN FATHATAN..DEVANAGARI SIGN ANUSVARA\n0903          ; Alphabetic # Mc       DEVANAGARI SIGN VISARGA\n0904..0939    ; Alphabetic # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA\n093A          ; Alphabetic # Mn       DEVANAGARI VOWEL SIGN OE\n093B          ; Alphabetic # Mc       DEVANAGARI VOWEL SIGN OOE\n093D          ; Alphabetic # Lo       DEVANAGARI SIGN AVAGRAHA\n093E..0940    ; Alphabetic # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\n0941..0948    ; Alphabetic # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n0949..094C    ; Alphabetic # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\n094E..094F    ; Alphabetic # Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\n0950          ; Alphabetic # Lo       DEVANAGARI OM\n0955..0957    ; Alphabetic # Mn   [3] DEVANAGARI VOWEL SIGN CANDRA LONG E..DEVANAGARI VOWEL SIGN UUE\n0958..0961    ; Alphabetic # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL\n0962..0963    ; Alphabetic # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n0971          ; Alphabetic # Lm       DEVANAGARI SIGN HIGH SPACING DOT\n0972..0980    ; Alphabetic # Lo  [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI\n0981          ; Alphabetic # Mn       BENGALI SIGN CANDRABINDU\n0982..0983    ; Alphabetic # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\n0985..098C    ; Alphabetic # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L\n098F..0990    ; Alphabetic # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI\n0993..09A8    ; Alphabetic # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA\n09AA..09B0    ; Alphabetic # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA\n09B2          ; Alphabetic # Lo       BENGALI LETTER LA\n09B6..09B9    ; Alphabetic # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA\n09BD          ; Alphabetic # Lo       BENGALI SIGN AVAGRAHA\n09BE..09C0    ; Alphabetic # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II\n09C1..09C4    ; Alphabetic # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n09C7..09C8    ; Alphabetic # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\n09CB..09CC    ; Alphabetic # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\n09CE          ; Alphabetic # Lo       BENGALI LETTER KHANDA TA\n09D7          ; Alphabetic # Mc       BENGALI AU LENGTH MARK\n09DC..09DD    ; Alphabetic # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA\n09DF..09E1    ; Alphabetic # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL\n09E2..09E3    ; Alphabetic # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n09F0..09F1    ; Alphabetic # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL\n09FC          ; Alphabetic # Lo       BENGALI LETTER VEDIC ANUSVARA\n0A01..0A02    ; Alphabetic # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n0A03          ; Alphabetic # Mc       GURMUKHI SIGN VISARGA\n0A05..0A0A    ; Alphabetic # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU\n0A0F..0A10    ; Alphabetic # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI\n0A13..0A28    ; Alphabetic # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA\n0A2A..0A30    ; Alphabetic # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA\n0A32..0A33    ; Alphabetic # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA\n0A35..0A36    ; Alphabetic # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA\n0A38..0A39    ; Alphabetic # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA\n0A3E..0A40    ; Alphabetic # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\n0A41..0A42    ; Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n0A47..0A48    ; Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n0A4B..0A4C    ; Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN OO..GURMUKHI VOWEL SIGN AU\n0A51          ; Alphabetic # Mn       GURMUKHI SIGN UDAAT\n0A59..0A5C    ; Alphabetic # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA\n0A5E          ; Alphabetic # Lo       GURMUKHI LETTER FA\n0A70..0A71    ; Alphabetic # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n0A72..0A74    ; Alphabetic # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR\n0A75          ; Alphabetic # Mn       GURMUKHI SIGN YAKASH\n0A81..0A82    ; Alphabetic # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n0A83          ; Alphabetic # Mc       GUJARATI SIGN VISARGA\n0A85..0A8D    ; Alphabetic # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E\n0A8F..0A91    ; Alphabetic # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O\n0A93..0AA8    ; Alphabetic # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA\n0AAA..0AB0    ; Alphabetic # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA\n0AB2..0AB3    ; Alphabetic # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA\n0AB5..0AB9    ; Alphabetic # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA\n0ABD          ; Alphabetic # Lo       GUJARATI SIGN AVAGRAHA\n0ABE..0AC0    ; Alphabetic # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\n0AC1..0AC5    ; Alphabetic # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n0AC7..0AC8    ; Alphabetic # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n0AC9          ; Alphabetic # Mc       GUJARATI VOWEL SIGN CANDRA O\n0ACB..0ACC    ; Alphabetic # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\n0AD0          ; Alphabetic # Lo       GUJARATI OM\n0AE0..0AE1    ; Alphabetic # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL\n0AE2..0AE3    ; Alphabetic # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n0AF9          ; Alphabetic # Lo       GUJARATI LETTER ZHA\n0AFA..0AFC    ; Alphabetic # Mn   [3] GUJARATI SIGN SUKUN..GUJARATI SIGN MADDAH\n0B01          ; Alphabetic # Mn       ORIYA SIGN CANDRABINDU\n0B02..0B03    ; Alphabetic # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\n0B05..0B0C    ; Alphabetic # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L\n0B0F..0B10    ; Alphabetic # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI\n0B13..0B28    ; Alphabetic # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA\n0B2A..0B30    ; Alphabetic # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA\n0B32..0B33    ; Alphabetic # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA\n0B35..0B39    ; Alphabetic # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA\n0B3D          ; Alphabetic # Lo       ORIYA SIGN AVAGRAHA\n0B3E          ; Alphabetic # Mc       ORIYA VOWEL SIGN AA\n0B3F          ; Alphabetic # Mn       ORIYA VOWEL SIGN I\n0B40          ; Alphabetic # Mc       ORIYA VOWEL SIGN II\n0B41..0B44    ; Alphabetic # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n0B47..0B48    ; Alphabetic # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\n0B4B..0B4C    ; Alphabetic # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\n0B56          ; Alphabetic # Mn       ORIYA AI LENGTH MARK\n0B57          ; Alphabetic # Mc       ORIYA AU LENGTH MARK\n0B5C..0B5D    ; Alphabetic # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA\n0B5F..0B61    ; Alphabetic # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL\n0B62..0B63    ; Alphabetic # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n0B71          ; Alphabetic # Lo       ORIYA LETTER WA\n0B82          ; Alphabetic # Mn       TAMIL SIGN ANUSVARA\n0B83          ; Alphabetic # Lo       TAMIL SIGN VISARGA\n0B85..0B8A    ; Alphabetic # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU\n0B8E..0B90    ; Alphabetic # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI\n0B92..0B95    ; Alphabetic # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA\n0B99..0B9A    ; Alphabetic # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA\n0B9C          ; Alphabetic # Lo       TAMIL LETTER JA\n0B9E..0B9F    ; Alphabetic # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA\n0BA3..0BA4    ; Alphabetic # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA\n0BA8..0BAA    ; Alphabetic # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA\n0BAE..0BB9    ; Alphabetic # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA\n0BBE..0BBF    ; Alphabetic # Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I\n0BC0          ; Alphabetic # Mn       TAMIL VOWEL SIGN II\n0BC1..0BC2    ; Alphabetic # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\n0BC6..0BC8    ; Alphabetic # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\n0BCA..0BCC    ; Alphabetic # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\n0BD0          ; Alphabetic # Lo       TAMIL OM\n0BD7          ; Alphabetic # Mc       TAMIL AU LENGTH MARK\n0C00          ; Alphabetic # Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE\n0C01..0C03    ; Alphabetic # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\n0C04          ; Alphabetic # Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE\n0C05..0C0C    ; Alphabetic # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L\n0C0E..0C10    ; Alphabetic # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI\n0C12..0C28    ; Alphabetic # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA\n0C2A..0C39    ; Alphabetic # Lo  [16] TELUGU LETTER PA..TELUGU LETTER HA\n0C3D          ; Alphabetic # Lo       TELUGU SIGN AVAGRAHA\n0C3E..0C40    ; Alphabetic # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n0C41..0C44    ; Alphabetic # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\n0C46..0C48    ; Alphabetic # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n0C4A..0C4C    ; Alphabetic # Mn   [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU\n0C55..0C56    ; Alphabetic # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n0C58..0C5A    ; Alphabetic # Lo   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA\n0C5C..0C5D    ; Alphabetic # Lo   [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU\n0C60..0C61    ; Alphabetic # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL\n0C62..0C63    ; Alphabetic # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n0C80          ; Alphabetic # Lo       KANNADA SIGN SPACING CANDRABINDU\n0C81          ; Alphabetic # Mn       KANNADA SIGN CANDRABINDU\n0C82..0C83    ; Alphabetic # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\n0C85..0C8C    ; Alphabetic # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L\n0C8E..0C90    ; Alphabetic # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI\n0C92..0CA8    ; Alphabetic # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA\n0CAA..0CB3    ; Alphabetic # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA\n0CB5..0CB9    ; Alphabetic # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA\n0CBD          ; Alphabetic # Lo       KANNADA SIGN AVAGRAHA\n0CBE          ; Alphabetic # Mc       KANNADA VOWEL SIGN AA\n0CBF          ; Alphabetic # Mn       KANNADA VOWEL SIGN I\n0CC0..0CC4    ; Alphabetic # Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR\n0CC6          ; Alphabetic # Mn       KANNADA VOWEL SIGN E\n0CC7..0CC8    ; Alphabetic # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n0CCA..0CCB    ; Alphabetic # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n0CCC          ; Alphabetic # Mn       KANNADA VOWEL SIGN AU\n0CD5..0CD6    ; Alphabetic # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n0CDC..0CDE    ; Alphabetic # Lo   [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA\n0CE0..0CE1    ; Alphabetic # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL\n0CE2..0CE3    ; Alphabetic # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n0CF1..0CF2    ; Alphabetic # Lo   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA\n0CF3          ; Alphabetic # Mc       KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT\n0D00..0D01    ; Alphabetic # Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n0D02..0D03    ; Alphabetic # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\n0D04..0D0C    ; Alphabetic # Lo   [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L\n0D0E..0D10    ; Alphabetic # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI\n0D12..0D3A    ; Alphabetic # Lo  [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA\n0D3D          ; Alphabetic # Lo       MALAYALAM SIGN AVAGRAHA\n0D3E..0D40    ; Alphabetic # Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II\n0D41..0D44    ; Alphabetic # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n0D46..0D48    ; Alphabetic # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\n0D4A..0D4C    ; Alphabetic # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\n0D4E          ; Alphabetic # Lo       MALAYALAM LETTER DOT REPH\n0D54..0D56    ; Alphabetic # Lo   [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL\n0D57          ; Alphabetic # Mc       MALAYALAM AU LENGTH MARK\n0D5F..0D61    ; Alphabetic # Lo   [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL\n0D62..0D63    ; Alphabetic # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n0D7A..0D7F    ; Alphabetic # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K\n0D81          ; Alphabetic # Mn       SINHALA SIGN CANDRABINDU\n0D82..0D83    ; Alphabetic # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\n0D85..0D96    ; Alphabetic # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA\n0D9A..0DB1    ; Alphabetic # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA\n0DB3..0DBB    ; Alphabetic # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA\n0DBD          ; Alphabetic # Lo       SINHALA LETTER DANTAJA LAYANNA\n0DC0..0DC6    ; Alphabetic # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA\n0DCF..0DD1    ; Alphabetic # Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\n0DD2..0DD4    ; Alphabetic # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n0DD6          ; Alphabetic # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA\n0DD8..0DDF    ; Alphabetic # Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA\n0DF2..0DF3    ; Alphabetic # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\n0E01..0E30    ; Alphabetic # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A\n0E31          ; Alphabetic # Mn       THAI CHARACTER MAI HAN-AKAT\n0E32..0E33    ; Alphabetic # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM\n0E34..0E3A    ; Alphabetic # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n0E40..0E45    ; Alphabetic # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO\n0E46          ; Alphabetic # Lm       THAI CHARACTER MAIYAMOK\n0E4D          ; Alphabetic # Mn       THAI CHARACTER NIKHAHIT\n0E81..0E82    ; Alphabetic # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG\n0E84          ; Alphabetic # Lo       LAO LETTER KHO TAM\n0E86..0E8A    ; Alphabetic # Lo   [5] LAO LETTER PALI GHA..LAO LETTER SO TAM\n0E8C..0EA3    ; Alphabetic # Lo  [24] LAO LETTER PALI JHA..LAO LETTER LO LING\n0EA5          ; Alphabetic # Lo       LAO LETTER LO LOOT\n0EA7..0EB0    ; Alphabetic # Lo  [10] LAO LETTER WO..LAO VOWEL SIGN A\n0EB1          ; Alphabetic # Mn       LAO VOWEL SIGN MAI KAN\n0EB2..0EB3    ; Alphabetic # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM\n0EB4..0EB9    ; Alphabetic # Mn   [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU\n0EBB..0EBC    ; Alphabetic # Mn   [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO\n0EBD          ; Alphabetic # Lo       LAO SEMIVOWEL SIGN NYO\n0EC0..0EC4    ; Alphabetic # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI\n0EC6          ; Alphabetic # Lm       LAO KO LA\n0ECD          ; Alphabetic # Mn       LAO NIGGAHITA\n0EDC..0EDF    ; Alphabetic # Lo   [4] LAO HO NO..LAO LETTER KHMU NYO\n0F00          ; Alphabetic # Lo       TIBETAN SYLLABLE OM\n0F40..0F47    ; Alphabetic # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA\n0F49..0F6C    ; Alphabetic # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA\n0F71..0F7E    ; Alphabetic # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n0F7F          ; Alphabetic # Mc       TIBETAN SIGN RNAM BCAD\n0F80..0F83    ; Alphabetic # Mn   [4] TIBETAN VOWEL SIGN REVERSED I..TIBETAN SIGN SNA LDAN\n0F88..0F8C    ; Alphabetic # Lo   [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN\n0F8D..0F97    ; Alphabetic # Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n0F99..0FBC    ; Alphabetic # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n1000..102A    ; Alphabetic # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU\n102B..102C    ; Alphabetic # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA\n102D..1030    ; Alphabetic # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n1031          ; Alphabetic # Mc       MYANMAR VOWEL SIGN E\n1032..1036    ; Alphabetic # Mn   [5] MYANMAR VOWEL SIGN AI..MYANMAR SIGN ANUSVARA\n1038          ; Alphabetic # Mc       MYANMAR SIGN VISARGA\n103B..103C    ; Alphabetic # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\n103D..103E    ; Alphabetic # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n103F          ; Alphabetic # Lo       MYANMAR LETTER GREAT SA\n1050..1055    ; Alphabetic # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL\n1056..1057    ; Alphabetic # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\n1058..1059    ; Alphabetic # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n105A..105D    ; Alphabetic # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE\n105E..1060    ; Alphabetic # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n1061          ; Alphabetic # Lo       MYANMAR LETTER SGAW KAREN SHA\n1062..1064    ; Alphabetic # Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO\n1065..1066    ; Alphabetic # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA\n1067..106D    ; Alphabetic # Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5\n106E..1070    ; Alphabetic # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA\n1071..1074    ; Alphabetic # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n1075..1081    ; Alphabetic # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA\n1082          ; Alphabetic # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n1083..1084    ; Alphabetic # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E\n1085..1086    ; Alphabetic # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n1087..108C    ; Alphabetic # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3\n108D          ; Alphabetic # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n108E          ; Alphabetic # Lo       MYANMAR LETTER RUMAI PALAUNG FA\n108F          ; Alphabetic # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5\n109A..109C    ; Alphabetic # Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A\n109D          ; Alphabetic # Mn       MYANMAR VOWEL SIGN AITON AI\n10A0..10C5    ; Alphabetic # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; Alphabetic # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; Alphabetic # L&       GEORGIAN CAPITAL LETTER AEN\n10D0..10FA    ; Alphabetic # L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FC          ; Alphabetic # Lm       MODIFIER LETTER GEORGIAN NAR\n10FD..10FF    ; Alphabetic # L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n1100..1248    ; Alphabetic # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA\n124A..124D    ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE\n1250..1256    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO\n1258          ; Alphabetic # Lo       ETHIOPIC SYLLABLE QHWA\n125A..125D    ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE\n1260..1288    ; Alphabetic # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA\n128A..128D    ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE\n1290..12B0    ; Alphabetic # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA\n12B2..12B5    ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE\n12B8..12BE    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO\n12C0          ; Alphabetic # Lo       ETHIOPIC SYLLABLE KXWA\n12C2..12C5    ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE\n12C8..12D6    ; Alphabetic # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O\n12D8..1310    ; Alphabetic # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA\n1312..1315    ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE\n1318..135A    ; Alphabetic # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA\n1380..138F    ; Alphabetic # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE\n13A0..13F5    ; Alphabetic # L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n13F8..13FD    ; Alphabetic # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1401..166C    ; Alphabetic # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA\n166F..167F    ; Alphabetic # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W\n1681..169A    ; Alphabetic # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH\n16A0..16EA    ; Alphabetic # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X\n16EE..16F0    ; Alphabetic # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL\n16F1..16F8    ; Alphabetic # Lo   [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC\n1700..1711    ; Alphabetic # Lo  [18] TAGALOG LETTER A..TAGALOG LETTER HA\n1712..1713    ; Alphabetic # Mn   [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U\n171F..1731    ; Alphabetic # Lo  [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA\n1732..1733    ; Alphabetic # Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U\n1740..1751    ; Alphabetic # Lo  [18] BUHID LETTER A..BUHID LETTER HA\n1752..1753    ; Alphabetic # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n1760..176C    ; Alphabetic # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA\n176E..1770    ; Alphabetic # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA\n1772..1773    ; Alphabetic # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n1780..17B3    ; Alphabetic # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU\n17B6          ; Alphabetic # Mc       KHMER VOWEL SIGN AA\n17B7..17BD    ; Alphabetic # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n17BE..17C5    ; Alphabetic # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\n17C6          ; Alphabetic # Mn       KHMER SIGN NIKAHIT\n17C7..17C8    ; Alphabetic # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\n17D7          ; Alphabetic # Lm       KHMER SIGN LEK TOO\n17DC          ; Alphabetic # Lo       KHMER SIGN AVAKRAHASANYA\n1820..1842    ; Alphabetic # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI\n1843          ; Alphabetic # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN\n1844..1878    ; Alphabetic # Lo  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS\n1880..1884    ; Alphabetic # Lo   [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA\n1885..1886    ; Alphabetic # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n1887..18A8    ; Alphabetic # Lo  [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA\n18A9          ; Alphabetic # Mn       MONGOLIAN LETTER ALI GALI DAGALGA\n18AA          ; Alphabetic # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA\n18B0..18F5    ; Alphabetic # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S\n1900..191E    ; Alphabetic # Lo  [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA\n1920..1922    ; Alphabetic # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n1923..1926    ; Alphabetic # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\n1927..1928    ; Alphabetic # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n1929..192B    ; Alphabetic # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\n1930..1931    ; Alphabetic # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\n1932          ; Alphabetic # Mn       LIMBU SMALL LETTER ANUSVARA\n1933..1938    ; Alphabetic # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\n1950..196D    ; Alphabetic # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI\n1970..1974    ; Alphabetic # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6\n1980..19AB    ; Alphabetic # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA\n19B0..19C9    ; Alphabetic # Lo  [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2\n1A00..1A16    ; Alphabetic # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA\n1A17..1A18    ; Alphabetic # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n1A19..1A1A    ; Alphabetic # Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\n1A1B          ; Alphabetic # Mn       BUGINESE VOWEL SIGN AE\n1A20..1A54    ; Alphabetic # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA\n1A55          ; Alphabetic # Mc       TAI THAM CONSONANT SIGN MEDIAL RA\n1A56          ; Alphabetic # Mn       TAI THAM CONSONANT SIGN MEDIAL LA\n1A57          ; Alphabetic # Mc       TAI THAM CONSONANT SIGN LA TANG LAI\n1A58..1A5E    ; Alphabetic # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n1A61          ; Alphabetic # Mc       TAI THAM VOWEL SIGN A\n1A62          ; Alphabetic # Mn       TAI THAM VOWEL SIGN MAI SAT\n1A63..1A64    ; Alphabetic # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA\n1A65..1A6C    ; Alphabetic # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n1A6D..1A72    ; Alphabetic # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\n1A73..1A74    ; Alphabetic # Mn   [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG\n1AA7          ; Alphabetic # Lm       TAI THAM SIGN MAI YAMOK\n1ABF..1AC0    ; Alphabetic # Mn   [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW\n1ACC..1ACE    ; Alphabetic # Mn   [3] COMBINING LATIN SMALL LETTER INSULAR G..COMBINING LATIN SMALL LETTER INSULAR T\n1B00..1B03    ; Alphabetic # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n1B04          ; Alphabetic # Mc       BALINESE SIGN BISAH\n1B05..1B33    ; Alphabetic # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA\n1B35          ; Alphabetic # Mc       BALINESE VOWEL SIGN TEDUNG\n1B36..1B3A    ; Alphabetic # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n1B3B          ; Alphabetic # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG\n1B3C          ; Alphabetic # Mn       BALINESE VOWEL SIGN LA LENGA\n1B3D..1B41    ; Alphabetic # Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG\n1B42          ; Alphabetic # Mn       BALINESE VOWEL SIGN PEPET\n1B43          ; Alphabetic # Mc       BALINESE VOWEL SIGN PEPET TEDUNG\n1B45..1B4C    ; Alphabetic # Lo   [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA\n1B80..1B81    ; Alphabetic # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n1B82          ; Alphabetic # Mc       SUNDANESE SIGN PANGWISAD\n1B83..1BA0    ; Alphabetic # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA\n1BA1          ; Alphabetic # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL\n1BA2..1BA5    ; Alphabetic # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n1BA6..1BA7    ; Alphabetic # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\n1BA8..1BA9    ; Alphabetic # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n1BAC..1BAD    ; Alphabetic # Mn   [2] SUNDANESE CONSONANT SIGN PASANGAN MA..SUNDANESE CONSONANT SIGN PASANGAN WA\n1BAE..1BAF    ; Alphabetic # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA\n1BBA..1BE5    ; Alphabetic # Lo  [44] SUNDANESE AVAGRAHA..BATAK LETTER U\n1BE7          ; Alphabetic # Mc       BATAK VOWEL SIGN E\n1BE8..1BE9    ; Alphabetic # Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n1BEA..1BEC    ; Alphabetic # Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\n1BED          ; Alphabetic # Mn       BATAK VOWEL SIGN KARO O\n1BEE          ; Alphabetic # Mc       BATAK VOWEL SIGN U\n1BEF..1BF1    ; Alphabetic # Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n1C00..1C23    ; Alphabetic # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A\n1C24..1C2B    ; Alphabetic # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\n1C2C..1C33    ; Alphabetic # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n1C34..1C35    ; Alphabetic # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\n1C36          ; Alphabetic # Mn       LEPCHA SIGN RAN\n1C4D..1C4F    ; Alphabetic # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA\n1C5A..1C77    ; Alphabetic # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH\n1C78..1C7D    ; Alphabetic # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD\n1C80..1C8A    ; Alphabetic # L&  [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE\n1C90..1CBA    ; Alphabetic # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; Alphabetic # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1CE9..1CEC    ; Alphabetic # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL\n1CEE..1CF3    ; Alphabetic # Lo   [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA\n1CF5..1CF6    ; Alphabetic # Lo   [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA\n1CFA          ; Alphabetic # Lo       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA\n1D00..1D2B    ; Alphabetic # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL\n1D2C..1D6A    ; Alphabetic # Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D6B..1D77    ; Alphabetic # L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G\n1D78          ; Alphabetic # Lm       MODIFIER LETTER CYRILLIC EN\n1D79..1D9A    ; Alphabetic # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK\n1D9B..1DBF    ; Alphabetic # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA\n1DD3..1DF4    ; Alphabetic # Mn  [34] COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE..COMBINING LATIN SMALL LETTER U WITH DIAERESIS\n1E00..1F15    ; Alphabetic # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F18..1F1D    ; Alphabetic # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F45    ; Alphabetic # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F48..1F4D    ; Alphabetic # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; Alphabetic # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F59          ; Alphabetic # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; Alphabetic # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; Alphabetic # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F..1F7D    ; Alphabetic # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1FB4    ; Alphabetic # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FBC    ; Alphabetic # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBE          ; Alphabetic # L&       GREEK PROSGEGRAMMENI\n1FC2..1FC4    ; Alphabetic # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FCC    ; Alphabetic # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FD0..1FD3    ; Alphabetic # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FDB    ; Alphabetic # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE0..1FEC    ; Alphabetic # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FF2..1FF4    ; Alphabetic # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FFC    ; Alphabetic # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n2071          ; Alphabetic # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n207F          ; Alphabetic # Lm       SUPERSCRIPT LATIN SMALL LETTER N\n2090..209C    ; Alphabetic # Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n2102          ; Alphabetic # L&       DOUBLE-STRUCK CAPITAL C\n2107          ; Alphabetic # L&       EULER CONSTANT\n210A..2113    ; Alphabetic # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L\n2115          ; Alphabetic # L&       DOUBLE-STRUCK CAPITAL N\n2119..211D    ; Alphabetic # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n2124          ; Alphabetic # L&       DOUBLE-STRUCK CAPITAL Z\n2126          ; Alphabetic # L&       OHM SIGN\n2128          ; Alphabetic # L&       BLACK-LETTER CAPITAL Z\n212A..212D    ; Alphabetic # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C\n212F..2134    ; Alphabetic # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O\n2135..2138    ; Alphabetic # Lo   [4] ALEF SYMBOL..DALET SYMBOL\n2139          ; Alphabetic # L&       INFORMATION SOURCE\n213C..213F    ; Alphabetic # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI\n2145..2149    ; Alphabetic # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J\n214E          ; Alphabetic # L&       TURNED SMALL F\n2160..2182    ; Alphabetic # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND\n2183..2184    ; Alphabetic # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C\n2185..2188    ; Alphabetic # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND\n24B6..24E9    ; Alphabetic # So  [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z\n2C00..2C7B    ; Alphabetic # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E\n2C7C..2C7D    ; Alphabetic # Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\n2C7E..2CE4    ; Alphabetic # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI\n2CEB..2CEE    ; Alphabetic # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CF2..2CF3    ; Alphabetic # L&   [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI\n2D00..2D25    ; Alphabetic # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; Alphabetic # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; Alphabetic # L&       GEORGIAN SMALL LETTER AEN\n2D30..2D67    ; Alphabetic # Lo  [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO\n2D6F          ; Alphabetic # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK\n2D80..2D96    ; Alphabetic # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE\n2DA0..2DA6    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO\n2DA8..2DAE    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO\n2DB0..2DB6    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO\n2DB8..2DBE    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO\n2DC0..2DC6    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO\n2DC8..2DCE    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO\n2DD0..2DD6    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO\n2DD8..2DDE    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO\n2DE0..2DFF    ; Alphabetic # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\n2E2F          ; Alphabetic # Lm       VERTICAL TILDE\n3005          ; Alphabetic # Lm       IDEOGRAPHIC ITERATION MARK\n3006          ; Alphabetic # Lo       IDEOGRAPHIC CLOSING MARK\n3007          ; Alphabetic # Nl       IDEOGRAPHIC NUMBER ZERO\n3021..3029    ; Alphabetic # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE\n3031..3035    ; Alphabetic # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF\n3038..303A    ; Alphabetic # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY\n303B          ; Alphabetic # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK\n303C          ; Alphabetic # Lo       MASU MARK\n3041..3096    ; Alphabetic # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE\n309D..309E    ; Alphabetic # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK\n309F          ; Alphabetic # Lo       HIRAGANA DIGRAPH YORI\n30A1..30FA    ; Alphabetic # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO\n30FC..30FE    ; Alphabetic # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK\n30FF          ; Alphabetic # Lo       KATAKANA DIGRAPH KOTO\n3105..312F    ; Alphabetic # Lo  [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN\n3131..318E    ; Alphabetic # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE\n31A0..31BF    ; Alphabetic # Lo  [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH\n31F0..31FF    ; Alphabetic # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO\n3400..4DBF    ; Alphabetic # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF\n4E00..A014    ; Alphabetic # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E\nA015          ; Alphabetic # Lm       YI SYLLABLE WU\nA016..A48C    ; Alphabetic # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR\nA4D0..A4F7    ; Alphabetic # Lo  [40] LISU LETTER BA..LISU LETTER OE\nA4F8..A4FD    ; Alphabetic # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU\nA500..A60B    ; Alphabetic # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG\nA60C          ; Alphabetic # Lm       VAI SYLLABLE LENGTHENER\nA610..A61F    ; Alphabetic # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG\nA62A..A62B    ; Alphabetic # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO\nA640..A66D    ; Alphabetic # L&  [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA66E          ; Alphabetic # Lo       CYRILLIC LETTER MULTIOCULAR O\nA674..A67B    ; Alphabetic # Mn   [8] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC LETTER OMEGA\nA67F          ; Alphabetic # Lm       CYRILLIC PAYEROK\nA680..A69B    ; Alphabetic # L&  [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O\nA69C..A69D    ; Alphabetic # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA69E..A69F    ; Alphabetic # Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\nA6A0..A6E5    ; Alphabetic # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI\nA6E6..A6EF    ; Alphabetic # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM\nA717..A71F    ; Alphabetic # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK\nA722..A76F    ; Alphabetic # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON\nA770          ; Alphabetic # Lm       MODIFIER LETTER US\nA771..A787    ; Alphabetic # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T\nA788          ; Alphabetic # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT\nA78B..A78E    ; Alphabetic # L&   [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT\nA78F          ; Alphabetic # Lo       LATIN LETTER SINOLOGICAL DOT\nA790..A7DC    ; Alphabetic # L&  [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F1..A7F4    ; Alphabetic # Lm   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F5..A7F6    ; Alphabetic # L&   [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H\nA7F7          ; Alphabetic # Lo       LATIN EPIGRAPHIC LETTER SIDEWAYS I\nA7F8..A7F9    ; Alphabetic # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA7FA          ; Alphabetic # L&       LATIN LETTER SMALL CAPITAL TURNED M\nA7FB..A801    ; Alphabetic # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I\nA802          ; Alphabetic # Mn       SYLOTI NAGRI SIGN DVISVARA\nA803..A805    ; Alphabetic # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O\nA807..A80A    ; Alphabetic # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO\nA80B          ; Alphabetic # Mn       SYLOTI NAGRI SIGN ANUSVARA\nA80C..A822    ; Alphabetic # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO\nA823..A824    ; Alphabetic # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\nA825..A826    ; Alphabetic # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\nA827          ; Alphabetic # Mc       SYLOTI NAGRI VOWEL SIGN OO\nA840..A873    ; Alphabetic # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU\nA880..A881    ; Alphabetic # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\nA882..A8B3    ; Alphabetic # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA\nA8B4..A8C3    ; Alphabetic # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\nA8C5          ; Alphabetic # Mn       SAURASHTRA SIGN CANDRABINDU\nA8F2..A8F7    ; Alphabetic # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA\nA8FB          ; Alphabetic # Lo       DEVANAGARI HEADSTROKE\nA8FD..A8FE    ; Alphabetic # Lo   [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY\nA8FF          ; Alphabetic # Mn       DEVANAGARI VOWEL SIGN AY\nA90A..A925    ; Alphabetic # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO\nA926..A92A    ; Alphabetic # Mn   [5] KAYAH LI VOWEL UE..KAYAH LI VOWEL O\nA930..A946    ; Alphabetic # Lo  [23] REJANG LETTER KA..REJANG LETTER A\nA947..A951    ; Alphabetic # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\nA952          ; Alphabetic # Mc       REJANG CONSONANT SIGN H\nA960..A97C    ; Alphabetic # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\nA980..A982    ; Alphabetic # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\nA983          ; Alphabetic # Mc       JAVANESE SIGN WIGNYAN\nA984..A9B2    ; Alphabetic # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA\nA9B4..A9B5    ; Alphabetic # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\nA9B6..A9B9    ; Alphabetic # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\nA9BA..A9BB    ; Alphabetic # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\nA9BC..A9BD    ; Alphabetic # Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET\nA9BE..A9BF    ; Alphabetic # Mc   [2] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE CONSONANT SIGN CAKRA\nA9CF          ; Alphabetic # Lm       JAVANESE PANGRANGKEP\nA9E0..A9E4    ; Alphabetic # Lo   [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA\nA9E5          ; Alphabetic # Mn       MYANMAR SIGN SHAN SAW\nA9E6          ; Alphabetic # Lm       MYANMAR MODIFIER LETTER SHAN REDUPLICATION\nA9E7..A9EF    ; Alphabetic # Lo   [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA\nA9FA..A9FE    ; Alphabetic # Lo   [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA\nAA00..AA28    ; Alphabetic # Lo  [41] CHAM LETTER A..CHAM LETTER HA\nAA29..AA2E    ; Alphabetic # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\nAA2F..AA30    ; Alphabetic # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\nAA31..AA32    ; Alphabetic # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\nAA33..AA34    ; Alphabetic # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\nAA35..AA36    ; Alphabetic # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\nAA40..AA42    ; Alphabetic # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG\nAA43          ; Alphabetic # Mn       CHAM CONSONANT SIGN FINAL NG\nAA44..AA4B    ; Alphabetic # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS\nAA4C          ; Alphabetic # Mn       CHAM CONSONANT SIGN FINAL M\nAA4D          ; Alphabetic # Mc       CHAM CONSONANT SIGN FINAL H\nAA60..AA6F    ; Alphabetic # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA\nAA70          ; Alphabetic # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION\nAA71..AA76    ; Alphabetic # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM\nAA7A          ; Alphabetic # Lo       MYANMAR LETTER AITON RA\nAA7B          ; Alphabetic # Mc       MYANMAR SIGN PAO KAREN TONE\nAA7C          ; Alphabetic # Mn       MYANMAR SIGN TAI LAING TONE-2\nAA7D          ; Alphabetic # Mc       MYANMAR SIGN TAI LAING TONE-5\nAA7E..AAAF    ; Alphabetic # Lo  [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O\nAAB0          ; Alphabetic # Mn       TAI VIET MAI KANG\nAAB1          ; Alphabetic # Lo       TAI VIET VOWEL AA\nAAB2..AAB4    ; Alphabetic # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\nAAB5..AAB6    ; Alphabetic # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O\nAAB7..AAB8    ; Alphabetic # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\nAAB9..AABD    ; Alphabetic # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN\nAABE          ; Alphabetic # Mn       TAI VIET VOWEL AM\nAAC0          ; Alphabetic # Lo       TAI VIET TONE MAI NUENG\nAAC2          ; Alphabetic # Lo       TAI VIET TONE MAI SONG\nAADB..AADC    ; Alphabetic # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG\nAADD          ; Alphabetic # Lm       TAI VIET SYMBOL SAM\nAAE0..AAEA    ; Alphabetic # Lo  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA\nAAEB          ; Alphabetic # Mc       MEETEI MAYEK VOWEL SIGN II\nAAEC..AAED    ; Alphabetic # Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\nAAEE..AAEF    ; Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\nAAF2          ; Alphabetic # Lo       MEETEI MAYEK ANJI\nAAF3..AAF4    ; Alphabetic # Lm   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK\nAAF5          ; Alphabetic # Mc       MEETEI MAYEK VOWEL SIGN VISARGA\nAB01..AB06    ; Alphabetic # Lo   [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO\nAB09..AB0E    ; Alphabetic # Lo   [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO\nAB11..AB16    ; Alphabetic # Lo   [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO\nAB20..AB26    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO\nAB28..AB2E    ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO\nAB30..AB5A    ; Alphabetic # L&  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG\nAB5C..AB5F    ; Alphabetic # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB60..AB68    ; Alphabetic # L&   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE\nAB69          ; Alphabetic # Lm       MODIFIER LETTER SMALL TURNED W\nAB70..ABBF    ; Alphabetic # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nABC0..ABE2    ; Alphabetic # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM\nABE3..ABE4    ; Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\nABE5          ; Alphabetic # Mn       MEETEI MAYEK VOWEL SIGN ANAP\nABE6..ABE7    ; Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\nABE8          ; Alphabetic # Mn       MEETEI MAYEK VOWEL SIGN UNAP\nABE9..ABEA    ; Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\nAC00..D7A3    ; Alphabetic # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH\nD7B0..D7C6    ; Alphabetic # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\nD7CB..D7FB    ; Alphabetic # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\nF900..FA6D    ; Alphabetic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D\nFA70..FAD9    ; Alphabetic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9\nFB00..FB06    ; Alphabetic # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; Alphabetic # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFB1D          ; Alphabetic # Lo       HEBREW LETTER YOD WITH HIRIQ\nFB1E          ; Alphabetic # Mn       HEBREW POINT JUDEO-SPANISH VARIKA\nFB1F..FB28    ; Alphabetic # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV\nFB2A..FB36    ; Alphabetic # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH\nFB38..FB3C    ; Alphabetic # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH\nFB3E          ; Alphabetic # Lo       HEBREW LETTER MEM WITH DAGESH\nFB40..FB41    ; Alphabetic # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH\nFB43..FB44    ; Alphabetic # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH\nFB46..FBB1    ; Alphabetic # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM\nFBD3..FD3D    ; Alphabetic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM\nFD50..FD8F    ; Alphabetic # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM\nFD92..FDC7    ; Alphabetic # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM\nFDF0..FDFB    ; Alphabetic # Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU\nFE70..FE74    ; Alphabetic # Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM\nFE76..FEFC    ; Alphabetic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM\nFF21..FF3A    ; Alphabetic # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\nFF41..FF5A    ; Alphabetic # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\nFF66..FF6F    ; Alphabetic # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU\nFF70          ; Alphabetic # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF71..FF9D    ; Alphabetic # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N\nFF9E..FF9F    ; Alphabetic # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\nFFA0..FFBE    ; Alphabetic # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH\nFFC2..FFC7    ; Alphabetic # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E\nFFCA..FFCF    ; Alphabetic # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE\nFFD2..FFD7    ; Alphabetic # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU\nFFDA..FFDC    ; Alphabetic # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I\n10000..1000B  ; Alphabetic # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE\n1000D..10026  ; Alphabetic # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO\n10028..1003A  ; Alphabetic # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO\n1003C..1003D  ; Alphabetic # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE\n1003F..1004D  ; Alphabetic # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO\n10050..1005D  ; Alphabetic # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089\n10080..100FA  ; Alphabetic # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305\n10140..10174  ; Alphabetic # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS\n10280..1029C  ; Alphabetic # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X\n102A0..102D0  ; Alphabetic # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3\n10300..1031F  ; Alphabetic # Lo  [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS\n1032D..10340  ; Alphabetic # Lo  [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA\n10341         ; Alphabetic # Nl       GOTHIC LETTER NINETY\n10342..10349  ; Alphabetic # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL\n1034A         ; Alphabetic # Nl       GOTHIC LETTER NINE HUNDRED\n10350..10375  ; Alphabetic # Lo  [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA\n10376..1037A  ; Alphabetic # Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n10380..1039D  ; Alphabetic # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU\n103A0..103C3  ; Alphabetic # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA\n103C8..103CF  ; Alphabetic # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH\n103D1..103D5  ; Alphabetic # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED\n10400..1044F  ; Alphabetic # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW\n10450..1049D  ; Alphabetic # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO\n104B0..104D3  ; Alphabetic # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n104D8..104FB  ; Alphabetic # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10500..10527  ; Alphabetic # Lo  [40] ELBASAN LETTER A..ELBASAN LETTER KHE\n10530..10563  ; Alphabetic # Lo  [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW\n10570..1057A  ; Alphabetic # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; Alphabetic # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; Alphabetic # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; Alphabetic # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10597..105A1  ; Alphabetic # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; Alphabetic # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; Alphabetic # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; Alphabetic # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n105C0..105F3  ; Alphabetic # Lo  [52] TODHRI LETTER A..TODHRI LETTER OO\n10600..10736  ; Alphabetic # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664\n10740..10755  ; Alphabetic # Lo  [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE\n10760..10767  ; Alphabetic # Lo   [8] LINEAR A SIGN A800..LINEAR A SIGN A807\n10780..10785  ; Alphabetic # Lm   [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; Alphabetic # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; Alphabetic # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n10800..10805  ; Alphabetic # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA\n10808         ; Alphabetic # Lo       CYPRIOT SYLLABLE JO\n1080A..10835  ; Alphabetic # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO\n10837..10838  ; Alphabetic # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE\n1083C         ; Alphabetic # Lo       CYPRIOT SYLLABLE ZA\n1083F..10855  ; Alphabetic # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW\n10860..10876  ; Alphabetic # Lo  [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW\n10880..1089E  ; Alphabetic # Lo  [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW\n108E0..108F2  ; Alphabetic # Lo  [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH\n108F4..108F5  ; Alphabetic # Lo   [2] HATRAN LETTER SHIN..HATRAN LETTER TAW\n10900..10915  ; Alphabetic # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU\n10920..10939  ; Alphabetic # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C\n10940..10959  ; Alphabetic # Lo  [26] SIDETIC LETTER N01..SIDETIC LETTER N26\n10980..109B7  ; Alphabetic # Lo  [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA\n109BE..109BF  ; Alphabetic # Lo   [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN\n10A00         ; Alphabetic # Lo       KHAROSHTHI LETTER A\n10A01..10A03  ; Alphabetic # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n10A05..10A06  ; Alphabetic # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n10A0C..10A0F  ; Alphabetic # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n10A10..10A13  ; Alphabetic # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA\n10A15..10A17  ; Alphabetic # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA\n10A19..10A35  ; Alphabetic # Lo  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA\n10A60..10A7C  ; Alphabetic # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH\n10A80..10A9C  ; Alphabetic # Lo  [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH\n10AC0..10AC7  ; Alphabetic # Lo   [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW\n10AC9..10AE4  ; Alphabetic # Lo  [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW\n10B00..10B35  ; Alphabetic # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE\n10B40..10B55  ; Alphabetic # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW\n10B60..10B72  ; Alphabetic # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW\n10B80..10B91  ; Alphabetic # Lo  [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW\n10C00..10C48  ; Alphabetic # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH\n10C80..10CB2  ; Alphabetic # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10CC0..10CF2  ; Alphabetic # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10D00..10D23  ; Alphabetic # Lo  [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA\n10D24..10D27  ; Alphabetic # Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n10D4A..10D4D  ; Alphabetic # Lo   [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE\n10D4E         ; Alphabetic # Lm       GARAY VOWEL LENGTH MARK\n10D4F         ; Alphabetic # Lo       GARAY SUKUN\n10D50..10D65  ; Alphabetic # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n10D69         ; Alphabetic # Mn       GARAY VOWEL SIGN E\n10D6F         ; Alphabetic # Lm       GARAY REDUPLICATION MARK\n10D70..10D85  ; Alphabetic # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n10E80..10EA9  ; Alphabetic # Lo  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET\n10EAB..10EAC  ; Alphabetic # Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK\n10EB0..10EB1  ; Alphabetic # Lo   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE\n10EC2..10EC4  ; Alphabetic # Lo   [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW\n10EC5         ; Alphabetic # Lm       ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW\n10EC6..10EC7  ; Alphabetic # Lo   [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW\n10EFA..10EFC  ; Alphabetic # Mn   [3] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC COMBINING ALEF OVERLAY\n10F00..10F1C  ; Alphabetic # Lo  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL\n10F27         ; Alphabetic # Lo       OLD SOGDIAN LIGATURE AYIN-DALETH\n10F30..10F45  ; Alphabetic # Lo  [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN\n10F70..10F81  ; Alphabetic # Lo  [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH\n10FB0..10FC4  ; Alphabetic # Lo  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW\n10FE0..10FF6  ; Alphabetic # Lo  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH\n11000         ; Alphabetic # Mc       BRAHMI SIGN CANDRABINDU\n11001         ; Alphabetic # Mn       BRAHMI SIGN ANUSVARA\n11002         ; Alphabetic # Mc       BRAHMI SIGN VISARGA\n11003..11037  ; Alphabetic # Lo  [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA\n11038..11045  ; Alphabetic # Mn  [14] BRAHMI VOWEL SIGN AA..BRAHMI VOWEL SIGN AU\n11071..11072  ; Alphabetic # Lo   [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O\n11073..11074  ; Alphabetic # Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O\n11075         ; Alphabetic # Lo       BRAHMI LETTER OLD TAMIL LLA\n11080..11081  ; Alphabetic # Mn   [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA\n11082         ; Alphabetic # Mc       KAITHI SIGN VISARGA\n11083..110AF  ; Alphabetic # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA\n110B0..110B2  ; Alphabetic # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\n110B3..110B6  ; Alphabetic # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n110B7..110B8  ; Alphabetic # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\n110C2         ; Alphabetic # Mn       KAITHI VOWEL SIGN VOCALIC R\n110D0..110E8  ; Alphabetic # Lo  [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE\n11100..11102  ; Alphabetic # Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n11103..11126  ; Alphabetic # Lo  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA\n11127..1112B  ; Alphabetic # Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n1112C         ; Alphabetic # Mc       CHAKMA VOWEL SIGN E\n1112D..11132  ; Alphabetic # Mn   [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK\n11144         ; Alphabetic # Lo       CHAKMA LETTER LHAA\n11145..11146  ; Alphabetic # Mc   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI\n11147         ; Alphabetic # Lo       CHAKMA LETTER VAA\n11150..11172  ; Alphabetic # Lo  [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA\n11176         ; Alphabetic # Lo       MAHAJANI LIGATURE SHRI\n11180..11181  ; Alphabetic # Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n11182         ; Alphabetic # Mc       SHARADA SIGN VISARGA\n11183..111B2  ; Alphabetic # Lo  [48] SHARADA LETTER A..SHARADA LETTER HA\n111B3..111B5  ; Alphabetic # Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\n111B6..111BE  ; Alphabetic # Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n111BF         ; Alphabetic # Mc       SHARADA VOWEL SIGN AU\n111C1..111C4  ; Alphabetic # Lo   [4] SHARADA SIGN AVAGRAHA..SHARADA OM\n111CE         ; Alphabetic # Mc       SHARADA VOWEL SIGN PRISHTHAMATRA E\n111CF         ; Alphabetic # Mn       SHARADA SIGN INVERTED CANDRABINDU\n111DA         ; Alphabetic # Lo       SHARADA EKAM\n111DC         ; Alphabetic # Lo       SHARADA HEADSTROKE\n11200..11211  ; Alphabetic # Lo  [18] KHOJKI LETTER A..KHOJKI LETTER JJA\n11213..1122B  ; Alphabetic # Lo  [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA\n1122C..1122E  ; Alphabetic # Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\n1122F..11231  ; Alphabetic # Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n11232..11233  ; Alphabetic # Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\n11234         ; Alphabetic # Mn       KHOJKI SIGN ANUSVARA\n11237         ; Alphabetic # Mn       KHOJKI SIGN SHADDA\n1123E         ; Alphabetic # Mn       KHOJKI SIGN SUKUN\n1123F..11240  ; Alphabetic # Lo   [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I\n11241         ; Alphabetic # Mn       KHOJKI VOWEL SIGN VOCALIC R\n11280..11286  ; Alphabetic # Lo   [7] MULTANI LETTER A..MULTANI LETTER GA\n11288         ; Alphabetic # Lo       MULTANI LETTER GHA\n1128A..1128D  ; Alphabetic # Lo   [4] MULTANI LETTER CA..MULTANI LETTER JJA\n1128F..1129D  ; Alphabetic # Lo  [15] MULTANI LETTER NYA..MULTANI LETTER BA\n1129F..112A8  ; Alphabetic # Lo  [10] MULTANI LETTER BHA..MULTANI LETTER RHA\n112B0..112DE  ; Alphabetic # Lo  [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA\n112DF         ; Alphabetic # Mn       KHUDAWADI SIGN ANUSVARA\n112E0..112E2  ; Alphabetic # Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\n112E3..112E8  ; Alphabetic # Mn   [6] KHUDAWADI VOWEL SIGN U..KHUDAWADI VOWEL SIGN AU\n11300..11301  ; Alphabetic # Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n11302..11303  ; Alphabetic # Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\n11305..1130C  ; Alphabetic # Lo   [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L\n1130F..11310  ; Alphabetic # Lo   [2] GRANTHA LETTER EE..GRANTHA LETTER AI\n11313..11328  ; Alphabetic # Lo  [22] GRANTHA LETTER OO..GRANTHA LETTER NA\n1132A..11330  ; Alphabetic # Lo   [7] GRANTHA LETTER PA..GRANTHA LETTER RA\n11332..11333  ; Alphabetic # Lo   [2] GRANTHA LETTER LA..GRANTHA LETTER LLA\n11335..11339  ; Alphabetic # Lo   [5] GRANTHA LETTER VA..GRANTHA LETTER HA\n1133D         ; Alphabetic # Lo       GRANTHA SIGN AVAGRAHA\n1133E..1133F  ; Alphabetic # Mc   [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I\n11340         ; Alphabetic # Mn       GRANTHA VOWEL SIGN II\n11341..11344  ; Alphabetic # Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\n11347..11348  ; Alphabetic # Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\n1134B..1134C  ; Alphabetic # Mc   [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU\n11350         ; Alphabetic # Lo       GRANTHA OM\n11357         ; Alphabetic # Mc       GRANTHA AU LENGTH MARK\n1135D..11361  ; Alphabetic # Lo   [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL\n11362..11363  ; Alphabetic # Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\n11380..11389  ; Alphabetic # Lo  [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL\n1138B         ; Alphabetic # Lo       TULU-TIGALARI LETTER EE\n1138E         ; Alphabetic # Lo       TULU-TIGALARI LETTER AI\n11390..113B5  ; Alphabetic # Lo  [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA\n113B7         ; Alphabetic # Lo       TULU-TIGALARI SIGN AVAGRAHA\n113B8..113BA  ; Alphabetic # Mc   [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II\n113BB..113C0  ; Alphabetic # Mn   [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL\n113C2         ; Alphabetic # Mc       TULU-TIGALARI VOWEL SIGN EE\n113C5         ; Alphabetic # Mc       TULU-TIGALARI VOWEL SIGN AI\n113C7..113CA  ; Alphabetic # Mc   [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA\n113CC..113CD  ; Alphabetic # Mc   [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA\n113D1         ; Alphabetic # Lo       TULU-TIGALARI REPHA\n113D3         ; Alphabetic # Lo       TULU-TIGALARI SIGN PLUTA\n11400..11434  ; Alphabetic # Lo  [53] NEWA LETTER A..NEWA LETTER HA\n11435..11437  ; Alphabetic # Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\n11438..1143F  ; Alphabetic # Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n11440..11441  ; Alphabetic # Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\n11443..11444  ; Alphabetic # Mn   [2] NEWA SIGN CANDRABINDU..NEWA SIGN ANUSVARA\n11445         ; Alphabetic # Mc       NEWA SIGN VISARGA\n11447..1144A  ; Alphabetic # Lo   [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI\n1145F..11461  ; Alphabetic # Lo   [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA\n11480..114AF  ; Alphabetic # Lo  [48] TIRHUTA ANJI..TIRHUTA LETTER HA\n114B0..114B2  ; Alphabetic # Mc   [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II\n114B3..114B8  ; Alphabetic # Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n114B9         ; Alphabetic # Mc       TIRHUTA VOWEL SIGN E\n114BA         ; Alphabetic # Mn       TIRHUTA VOWEL SIGN SHORT E\n114BB..114BE  ; Alphabetic # Mc   [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU\n114BF..114C0  ; Alphabetic # Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n114C1         ; Alphabetic # Mc       TIRHUTA SIGN VISARGA\n114C4..114C5  ; Alphabetic # Lo   [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG\n114C7         ; Alphabetic # Lo       TIRHUTA OM\n11580..115AE  ; Alphabetic # Lo  [47] SIDDHAM LETTER A..SIDDHAM LETTER HA\n115AF..115B1  ; Alphabetic # Mc   [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II\n115B2..115B5  ; Alphabetic # Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n115B8..115BB  ; Alphabetic # Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\n115BC..115BD  ; Alphabetic # Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n115BE         ; Alphabetic # Mc       SIDDHAM SIGN VISARGA\n115D8..115DB  ; Alphabetic # Lo   [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U\n115DC..115DD  ; Alphabetic # Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n11600..1162F  ; Alphabetic # Lo  [48] MODI LETTER A..MODI LETTER LLA\n11630..11632  ; Alphabetic # Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\n11633..1163A  ; Alphabetic # Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n1163B..1163C  ; Alphabetic # Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\n1163D         ; Alphabetic # Mn       MODI SIGN ANUSVARA\n1163E         ; Alphabetic # Mc       MODI SIGN VISARGA\n11640         ; Alphabetic # Mn       MODI SIGN ARDHACANDRA\n11644         ; Alphabetic # Lo       MODI SIGN HUVA\n11680..116AA  ; Alphabetic # Lo  [43] TAKRI LETTER A..TAKRI LETTER RRA\n116AB         ; Alphabetic # Mn       TAKRI SIGN ANUSVARA\n116AC         ; Alphabetic # Mc       TAKRI SIGN VISARGA\n116AD         ; Alphabetic # Mn       TAKRI VOWEL SIGN AA\n116AE..116AF  ; Alphabetic # Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\n116B0..116B5  ; Alphabetic # Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n116B8         ; Alphabetic # Lo       TAKRI LETTER ARCHAIC KHA\n11700..1171A  ; Alphabetic # Lo  [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA\n1171D         ; Alphabetic # Mn       AHOM CONSONANT SIGN MEDIAL LA\n1171E         ; Alphabetic # Mc       AHOM CONSONANT SIGN MEDIAL RA\n1171F         ; Alphabetic # Mn       AHOM CONSONANT SIGN MEDIAL LIGATING RA\n11720..11721  ; Alphabetic # Mc   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA\n11722..11725  ; Alphabetic # Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n11726         ; Alphabetic # Mc       AHOM VOWEL SIGN E\n11727..1172A  ; Alphabetic # Mn   [4] AHOM VOWEL SIGN AW..AHOM VOWEL SIGN AM\n11740..11746  ; Alphabetic # Lo   [7] AHOM LETTER CA..AHOM LETTER LLA\n11800..1182B  ; Alphabetic # Lo  [44] DOGRA LETTER A..DOGRA LETTER RRA\n1182C..1182E  ; Alphabetic # Mc   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II\n1182F..11837  ; Alphabetic # Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA\n11838         ; Alphabetic # Mc       DOGRA SIGN VISARGA\n118A0..118DF  ; Alphabetic # L&  [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n118FF..11906  ; Alphabetic # Lo   [8] WARANG CITI OM..DIVES AKURU LETTER E\n11909         ; Alphabetic # Lo       DIVES AKURU LETTER O\n1190C..11913  ; Alphabetic # Lo   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA\n11915..11916  ; Alphabetic # Lo   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA\n11918..1192F  ; Alphabetic # Lo  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA\n11930..11935  ; Alphabetic # Mc   [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E\n11937..11938  ; Alphabetic # Mc   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O\n1193B..1193C  ; Alphabetic # Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU\n1193F         ; Alphabetic # Lo       DIVES AKURU PREFIXED NASAL SIGN\n11940         ; Alphabetic # Mc       DIVES AKURU MEDIAL YA\n11941         ; Alphabetic # Lo       DIVES AKURU INITIAL RA\n11942         ; Alphabetic # Mc       DIVES AKURU MEDIAL RA\n119A0..119A7  ; Alphabetic # Lo   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR\n119AA..119D0  ; Alphabetic # Lo  [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA\n119D1..119D3  ; Alphabetic # Mc   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II\n119D4..119D7  ; Alphabetic # Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR\n119DA..119DB  ; Alphabetic # Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI\n119DC..119DF  ; Alphabetic # Mc   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA\n119E1         ; Alphabetic # Lo       NANDINAGARI SIGN AVAGRAHA\n119E3         ; Alphabetic # Lo       NANDINAGARI HEADSTROKE\n119E4         ; Alphabetic # Mc       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E\n11A00         ; Alphabetic # Lo       ZANABAZAR SQUARE LETTER A\n11A01..11A0A  ; Alphabetic # Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n11A0B..11A32  ; Alphabetic # Lo  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA\n11A35..11A38  ; Alphabetic # Mn   [4] ZANABAZAR SQUARE SIGN CANDRABINDU..ZANABAZAR SQUARE SIGN ANUSVARA\n11A39         ; Alphabetic # Mc       ZANABAZAR SQUARE SIGN VISARGA\n11A3A         ; Alphabetic # Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\n11A3B..11A3E  ; Alphabetic # Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n11A50         ; Alphabetic # Lo       SOYOMBO LETTER A\n11A51..11A56  ; Alphabetic # Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n11A57..11A58  ; Alphabetic # Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\n11A59..11A5B  ; Alphabetic # Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n11A5C..11A89  ; Alphabetic # Lo  [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA\n11A8A..11A96  ; Alphabetic # Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n11A97         ; Alphabetic # Mc       SOYOMBO SIGN VISARGA\n11A9D         ; Alphabetic # Lo       SOYOMBO MARK PLUTA\n11AB0..11AF8  ; Alphabetic # Lo  [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL\n11B60         ; Alphabetic # Mn       SHARADA VOWEL SIGN OE\n11B61         ; Alphabetic # Mc       SHARADA VOWEL SIGN OOE\n11B62..11B64  ; Alphabetic # Mn   [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E\n11B65         ; Alphabetic # Mc       SHARADA VOWEL SIGN SHORT O\n11B66         ; Alphabetic # Mn       SHARADA VOWEL SIGN CANDRA E\n11B67         ; Alphabetic # Mc       SHARADA VOWEL SIGN CANDRA O\n11BC0..11BE0  ; Alphabetic # Lo  [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO\n11C00..11C08  ; Alphabetic # Lo   [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L\n11C0A..11C2E  ; Alphabetic # Lo  [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA\n11C2F         ; Alphabetic # Mc       BHAIKSUKI VOWEL SIGN AA\n11C30..11C36  ; Alphabetic # Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n11C38..11C3D  ; Alphabetic # Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n11C3E         ; Alphabetic # Mc       BHAIKSUKI SIGN VISARGA\n11C40         ; Alphabetic # Lo       BHAIKSUKI SIGN AVAGRAHA\n11C72..11C8F  ; Alphabetic # Lo  [30] MARCHEN LETTER KA..MARCHEN LETTER A\n11C92..11CA7  ; Alphabetic # Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n11CA9         ; Alphabetic # Mc       MARCHEN SUBJOINED LETTER YA\n11CAA..11CB0  ; Alphabetic # Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n11CB1         ; Alphabetic # Mc       MARCHEN VOWEL SIGN I\n11CB2..11CB3  ; Alphabetic # Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n11CB4         ; Alphabetic # Mc       MARCHEN VOWEL SIGN O\n11CB5..11CB6  ; Alphabetic # Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n11D00..11D06  ; Alphabetic # Lo   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E\n11D08..11D09  ; Alphabetic # Lo   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O\n11D0B..11D30  ; Alphabetic # Lo  [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA\n11D31..11D36  ; Alphabetic # Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n11D3A         ; Alphabetic # Mn       MASARAM GONDI VOWEL SIGN E\n11D3C..11D3D  ; Alphabetic # Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n11D3F..11D41  ; Alphabetic # Mn   [3] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI SIGN VISARGA\n11D43         ; Alphabetic # Mn       MASARAM GONDI SIGN CANDRA\n11D46         ; Alphabetic # Lo       MASARAM GONDI REPHA\n11D47         ; Alphabetic # Mn       MASARAM GONDI RA-KARA\n11D60..11D65  ; Alphabetic # Lo   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU\n11D67..11D68  ; Alphabetic # Lo   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI\n11D6A..11D89  ; Alphabetic # Lo  [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA\n11D8A..11D8E  ; Alphabetic # Mc   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU\n11D90..11D91  ; Alphabetic # Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI\n11D93..11D94  ; Alphabetic # Mc   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU\n11D95         ; Alphabetic # Mn       GUNJALA GONDI SIGN ANUSVARA\n11D96         ; Alphabetic # Mc       GUNJALA GONDI SIGN VISARGA\n11D98         ; Alphabetic # Lo       GUNJALA GONDI OM\n11DB0..11DD8  ; Alphabetic # Lo  [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH\n11DD9         ; Alphabetic # Lm       TOLONG SIKI SIGN SELA\n11DDA..11DDB  ; Alphabetic # Lo   [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA\n11EE0..11EF2  ; Alphabetic # Lo  [19] MAKASAR LETTER KA..MAKASAR ANGKA\n11EF3..11EF4  ; Alphabetic # Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U\n11EF5..11EF6  ; Alphabetic # Mc   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O\n11F00..11F01  ; Alphabetic # Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA\n11F02         ; Alphabetic # Lo       KAWI SIGN REPHA\n11F03         ; Alphabetic # Mc       KAWI SIGN VISARGA\n11F04..11F10  ; Alphabetic # Lo  [13] KAWI LETTER A..KAWI LETTER O\n11F12..11F33  ; Alphabetic # Lo  [34] KAWI LETTER KA..KAWI LETTER JNYA\n11F34..11F35  ; Alphabetic # Mc   [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA\n11F36..11F3A  ; Alphabetic # Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R\n11F3E..11F3F  ; Alphabetic # Mc   [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI\n11F40         ; Alphabetic # Mn       KAWI VOWEL SIGN EU\n11FB0         ; Alphabetic # Lo       LISU LETTER YHA\n12000..12399  ; Alphabetic # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U\n12400..1246E  ; Alphabetic # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM\n12480..12543  ; Alphabetic # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU\n12F90..12FF0  ; Alphabetic # Lo  [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114\n13000..1342F  ; Alphabetic # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D\n13441..13446  ; Alphabetic # Lo   [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN\n13460..143FA  ; Alphabetic # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA\n14400..14646  ; Alphabetic # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530\n16100..1611D  ; Alphabetic # Lo  [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA\n1611E..16129  ; Alphabetic # Mn  [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK\n1612A..1612C  ; Alphabetic # Mc   [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA\n1612D..1612E  ; Alphabetic # Mn   [2] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA CONSONANT SIGN MEDIAL RA\n16800..16A38  ; Alphabetic # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ\n16A40..16A5E  ; Alphabetic # Lo  [31] MRO LETTER TA..MRO LETTER TEK\n16A70..16ABE  ; Alphabetic # Lo  [79] TANGSA LETTER OZ..TANGSA LETTER ZA\n16AD0..16AED  ; Alphabetic # Lo  [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I\n16B00..16B2F  ; Alphabetic # Lo  [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU\n16B40..16B43  ; Alphabetic # Lm   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM\n16B63..16B77  ; Alphabetic # Lo  [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS\n16B7D..16B8F  ; Alphabetic # Lo  [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ\n16D40..16D42  ; Alphabetic # Lm   [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA\n16D43..16D6A  ; Alphabetic # Lo  [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU\n16D6B..16D6C  ; Alphabetic # Lm   [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT\n16E40..16E7F  ; Alphabetic # L&  [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16EA0..16EB8  ; Alphabetic # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n16EBB..16ED3  ; Alphabetic # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n16F00..16F4A  ; Alphabetic # Lo  [75] MIAO LETTER PA..MIAO LETTER RTE\n16F4F         ; Alphabetic # Mn       MIAO SIGN CONSONANT MODIFIER BAR\n16F50         ; Alphabetic # Lo       MIAO LETTER NASALIZATION\n16F51..16F87  ; Alphabetic # Mc  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI\n16F8F..16F92  ; Alphabetic # Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n16F93..16F9F  ; Alphabetic # Lm  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8\n16FE0..16FE1  ; Alphabetic # Lm   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK\n16FE3         ; Alphabetic # Lm       OLD CHINESE ITERATION MARK\n16FF0..16FF1  ; Alphabetic # Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY\n16FF2..16FF3  ; Alphabetic # Lm   [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER\n16FF4..16FF6  ; Alphabetic # Nl   [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS\n17000..18CD5  ; Alphabetic # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5\n18CFF..18D1E  ; Alphabetic # Lo  [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E\n18D80..18DF2  ; Alphabetic # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883\n1AFF0..1AFF3  ; Alphabetic # Lm   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5\n1AFF5..1AFFB  ; Alphabetic # Lm   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5\n1AFFD..1AFFE  ; Alphabetic # Lm   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8\n1B000..1B122  ; Alphabetic # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU\n1B132         ; Alphabetic # Lo       HIRAGANA LETTER SMALL KO\n1B150..1B152  ; Alphabetic # Lo   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO\n1B155         ; Alphabetic # Lo       KATAKANA LETTER SMALL KO\n1B164..1B167  ; Alphabetic # Lo   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N\n1B170..1B2FB  ; Alphabetic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB\n1BC00..1BC6A  ; Alphabetic # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M\n1BC70..1BC7C  ; Alphabetic # Lo  [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK\n1BC80..1BC88  ; Alphabetic # Lo   [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL\n1BC90..1BC99  ; Alphabetic # Lo  [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW\n1BC9E         ; Alphabetic # Mn       DUPLOYAN DOUBLE MARK\n1D400..1D454  ; Alphabetic # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D49C  ; Alphabetic # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; Alphabetic # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; Alphabetic # L&       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; Alphabetic # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; Alphabetic # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B9  ; Alphabetic # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; Alphabetic # L&       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; Alphabetic # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D505  ; Alphabetic # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; Alphabetic # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; Alphabetic # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; Alphabetic # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D51E..1D539  ; Alphabetic # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; Alphabetic # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; Alphabetic # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; Alphabetic # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; Alphabetic # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D552..1D6A5  ; Alphabetic # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6A8..1D6C0  ; Alphabetic # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6C2..1D6DA  ; Alphabetic # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DC..1D6FA  ; Alphabetic # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D6FC..1D714  ; Alphabetic # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D716..1D734  ; Alphabetic # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D736..1D74E  ; Alphabetic # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D750..1D76E  ; Alphabetic # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D770..1D788  ; Alphabetic # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D78A..1D7A8  ; Alphabetic # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7AA..1D7C2  ; Alphabetic # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C4..1D7CB  ; Alphabetic # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA\n1DF00..1DF09  ; Alphabetic # L&  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK\n1DF0A         ; Alphabetic # Lo       LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK\n1DF0B..1DF1E  ; Alphabetic # L&  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL\n1DF25..1DF2A  ; Alphabetic # L&   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK\n1E000..1E006  ; Alphabetic # Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n1E008..1E018  ; Alphabetic # Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n1E01B..1E021  ; Alphabetic # Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n1E023..1E024  ; Alphabetic # Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n1E026..1E02A  ; Alphabetic # Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n1E030..1E06D  ; Alphabetic # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E08F         ; Alphabetic # Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n1E100..1E12C  ; Alphabetic # Lo  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W\n1E137..1E13D  ; Alphabetic # Lm   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER\n1E14E         ; Alphabetic # Lo       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ\n1E290..1E2AD  ; Alphabetic # Lo  [30] TOTO LETTER PA..TOTO LETTER A\n1E2C0..1E2EB  ; Alphabetic # Lo  [44] WANCHO LETTER AA..WANCHO LETTER YIH\n1E4D0..1E4EA  ; Alphabetic # Lo  [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL\n1E4EB         ; Alphabetic # Lm       NAG MUNDARI SIGN OJOD\n1E5D0..1E5ED  ; Alphabetic # Lo  [30] OL ONAL LETTER O..OL ONAL LETTER EG\n1E5F0         ; Alphabetic # Lo       OL ONAL SIGN HODDOND\n1E6C0..1E6DE  ; Alphabetic # Lo  [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO\n1E6E0..1E6E2  ; Alphabetic # Lo   [3] TAI YO LETTER AA..TAI YO LETTER UE\n1E6E3         ; Alphabetic # Mn       TAI YO SIGN UE\n1E6E4..1E6E5  ; Alphabetic # Lo   [2] TAI YO LETTER U..TAI YO LETTER AE\n1E6E6         ; Alphabetic # Mn       TAI YO SIGN AU\n1E6E7..1E6ED  ; Alphabetic # Lo   [7] TAI YO LETTER O..TAI YO LETTER AUE\n1E6EE..1E6EF  ; Alphabetic # Mn   [2] TAI YO SIGN AY..TAI YO SIGN ANG\n1E6F0..1E6F4  ; Alphabetic # Lo   [5] TAI YO LETTER AN..TAI YO LETTER AP\n1E6F5         ; Alphabetic # Mn       TAI YO SIGN OM\n1E6FE         ; Alphabetic # Lo       TAI YO SYMBOL MUEANG\n1E6FF         ; Alphabetic # Lm       TAI YO XAM LAI\n1E7E0..1E7E6  ; Alphabetic # Lo   [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO\n1E7E8..1E7EB  ; Alphabetic # Lo   [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE\n1E7ED..1E7EE  ; Alphabetic # Lo   [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE\n1E7F0..1E7FE  ; Alphabetic # Lo  [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE\n1E800..1E8C4  ; Alphabetic # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON\n1E900..1E943  ; Alphabetic # L&  [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA\n1E947         ; Alphabetic # Mn       ADLAM HAMZA\n1E94B         ; Alphabetic # Lm       ADLAM NASALIZATION MARK\n1EE00..1EE03  ; Alphabetic # Lo   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL\n1EE05..1EE1F  ; Alphabetic # Lo  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF\n1EE21..1EE22  ; Alphabetic # Lo   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM\n1EE24         ; Alphabetic # Lo       ARABIC MATHEMATICAL INITIAL HEH\n1EE27         ; Alphabetic # Lo       ARABIC MATHEMATICAL INITIAL HAH\n1EE29..1EE32  ; Alphabetic # Lo  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF\n1EE34..1EE37  ; Alphabetic # Lo   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH\n1EE39         ; Alphabetic # Lo       ARABIC MATHEMATICAL INITIAL DAD\n1EE3B         ; Alphabetic # Lo       ARABIC MATHEMATICAL INITIAL GHAIN\n1EE42         ; Alphabetic # Lo       ARABIC MATHEMATICAL TAILED JEEM\n1EE47         ; Alphabetic # Lo       ARABIC MATHEMATICAL TAILED HAH\n1EE49         ; Alphabetic # Lo       ARABIC MATHEMATICAL TAILED YEH\n1EE4B         ; Alphabetic # Lo       ARABIC MATHEMATICAL TAILED LAM\n1EE4D..1EE4F  ; Alphabetic # Lo   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN\n1EE51..1EE52  ; Alphabetic # Lo   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF\n1EE54         ; Alphabetic # Lo       ARABIC MATHEMATICAL TAILED SHEEN\n1EE57         ; Alphabetic # Lo       ARABIC MATHEMATICAL TAILED KHAH\n1EE59         ; Alphabetic # Lo       ARABIC MATHEMATICAL TAILED DAD\n1EE5B         ; Alphabetic # Lo       ARABIC MATHEMATICAL TAILED GHAIN\n1EE5D         ; Alphabetic # Lo       ARABIC MATHEMATICAL TAILED DOTLESS NOON\n1EE5F         ; Alphabetic # Lo       ARABIC MATHEMATICAL TAILED DOTLESS QAF\n1EE61..1EE62  ; Alphabetic # Lo   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM\n1EE64         ; Alphabetic # Lo       ARABIC MATHEMATICAL STRETCHED HEH\n1EE67..1EE6A  ; Alphabetic # Lo   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF\n1EE6C..1EE72  ; Alphabetic # Lo   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF\n1EE74..1EE77  ; Alphabetic # Lo   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH\n1EE79..1EE7C  ; Alphabetic # Lo   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH\n1EE7E         ; Alphabetic # Lo       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH\n1EE80..1EE89  ; Alphabetic # Lo  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH\n1EE8B..1EE9B  ; Alphabetic # Lo  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN\n1EEA1..1EEA3  ; Alphabetic # Lo   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL\n1EEA5..1EEA9  ; Alphabetic # Lo   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH\n1EEAB..1EEBB  ; Alphabetic # Lo  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN\n1F130..1F149  ; Alphabetic # So  [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z\n1F150..1F169  ; Alphabetic # So  [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z\n1F170..1F189  ; Alphabetic # So  [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z\n20000..2A6DF  ; Alphabetic # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF\n2A700..2B81D  ; Alphabetic # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D\n2B820..2CEAD  ; Alphabetic # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD\n2CEB0..2EBE0  ; Alphabetic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0\n2EBF0..2EE5D  ; Alphabetic # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D\n2F800..2FA1D  ; Alphabetic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D\n30000..3134A  ; Alphabetic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A\n31350..33479  ; Alphabetic # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479\n\n# Total code points: 147421\n\n# ================================================\n\n# Derived Property: Lowercase\n#  Generated from: Ll + Other_Lowercase\n\n0061..007A    ; Lowercase # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00AA          ; Lowercase # Lo       FEMININE ORDINAL INDICATOR\n00B5          ; Lowercase # L&       MICRO SIGN\n00BA          ; Lowercase # Lo       MASCULINE ORDINAL INDICATOR\n00DF..00F6    ; Lowercase # L&  [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..00FF    ; Lowercase # L&   [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS\n0101          ; Lowercase # L&       LATIN SMALL LETTER A WITH MACRON\n0103          ; Lowercase # L&       LATIN SMALL LETTER A WITH BREVE\n0105          ; Lowercase # L&       LATIN SMALL LETTER A WITH OGONEK\n0107          ; Lowercase # L&       LATIN SMALL LETTER C WITH ACUTE\n0109          ; Lowercase # L&       LATIN SMALL LETTER C WITH CIRCUMFLEX\n010B          ; Lowercase # L&       LATIN SMALL LETTER C WITH DOT ABOVE\n010D          ; Lowercase # L&       LATIN SMALL LETTER C WITH CARON\n010F          ; Lowercase # L&       LATIN SMALL LETTER D WITH CARON\n0111          ; Lowercase # L&       LATIN SMALL LETTER D WITH STROKE\n0113          ; Lowercase # L&       LATIN SMALL LETTER E WITH MACRON\n0115          ; Lowercase # L&       LATIN SMALL LETTER E WITH BREVE\n0117          ; Lowercase # L&       LATIN SMALL LETTER E WITH DOT ABOVE\n0119          ; Lowercase # L&       LATIN SMALL LETTER E WITH OGONEK\n011B          ; Lowercase # L&       LATIN SMALL LETTER E WITH CARON\n011D          ; Lowercase # L&       LATIN SMALL LETTER G WITH CIRCUMFLEX\n011F          ; Lowercase # L&       LATIN SMALL LETTER G WITH BREVE\n0121          ; Lowercase # L&       LATIN SMALL LETTER G WITH DOT ABOVE\n0123          ; Lowercase # L&       LATIN SMALL LETTER G WITH CEDILLA\n0125          ; Lowercase # L&       LATIN SMALL LETTER H WITH CIRCUMFLEX\n0127          ; Lowercase # L&       LATIN SMALL LETTER H WITH STROKE\n0129          ; Lowercase # L&       LATIN SMALL LETTER I WITH TILDE\n012B          ; Lowercase # L&       LATIN SMALL LETTER I WITH MACRON\n012D          ; Lowercase # L&       LATIN SMALL LETTER I WITH BREVE\n012F          ; Lowercase # L&       LATIN SMALL LETTER I WITH OGONEK\n0131          ; Lowercase # L&       LATIN SMALL LETTER DOTLESS I\n0133          ; Lowercase # L&       LATIN SMALL LIGATURE IJ\n0135          ; Lowercase # L&       LATIN SMALL LETTER J WITH CIRCUMFLEX\n0137..0138    ; Lowercase # L&   [2] LATIN SMALL LETTER K WITH CEDILLA..LATIN SMALL LETTER KRA\n013A          ; Lowercase # L&       LATIN SMALL LETTER L WITH ACUTE\n013C          ; Lowercase # L&       LATIN SMALL LETTER L WITH CEDILLA\n013E          ; Lowercase # L&       LATIN SMALL LETTER L WITH CARON\n0140          ; Lowercase # L&       LATIN SMALL LETTER L WITH MIDDLE DOT\n0142          ; Lowercase # L&       LATIN SMALL LETTER L WITH STROKE\n0144          ; Lowercase # L&       LATIN SMALL LETTER N WITH ACUTE\n0146          ; Lowercase # L&       LATIN SMALL LETTER N WITH CEDILLA\n0148..0149    ; Lowercase # L&   [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE\n014B          ; Lowercase # L&       LATIN SMALL LETTER ENG\n014D          ; Lowercase # L&       LATIN SMALL LETTER O WITH MACRON\n014F          ; Lowercase # L&       LATIN SMALL LETTER O WITH BREVE\n0151          ; Lowercase # L&       LATIN SMALL LETTER O WITH DOUBLE ACUTE\n0153          ; Lowercase # L&       LATIN SMALL LIGATURE OE\n0155          ; Lowercase # L&       LATIN SMALL LETTER R WITH ACUTE\n0157          ; Lowercase # L&       LATIN SMALL LETTER R WITH CEDILLA\n0159          ; Lowercase # L&       LATIN SMALL LETTER R WITH CARON\n015B          ; Lowercase # L&       LATIN SMALL LETTER S WITH ACUTE\n015D          ; Lowercase # L&       LATIN SMALL LETTER S WITH CIRCUMFLEX\n015F          ; Lowercase # L&       LATIN SMALL LETTER S WITH CEDILLA\n0161          ; Lowercase # L&       LATIN SMALL LETTER S WITH CARON\n0163          ; Lowercase # L&       LATIN SMALL LETTER T WITH CEDILLA\n0165          ; Lowercase # L&       LATIN SMALL LETTER T WITH CARON\n0167          ; Lowercase # L&       LATIN SMALL LETTER T WITH STROKE\n0169          ; Lowercase # L&       LATIN SMALL LETTER U WITH TILDE\n016B          ; Lowercase # L&       LATIN SMALL LETTER U WITH MACRON\n016D          ; Lowercase # L&       LATIN SMALL LETTER U WITH BREVE\n016F          ; Lowercase # L&       LATIN SMALL LETTER U WITH RING ABOVE\n0171          ; Lowercase # L&       LATIN SMALL LETTER U WITH DOUBLE ACUTE\n0173          ; Lowercase # L&       LATIN SMALL LETTER U WITH OGONEK\n0175          ; Lowercase # L&       LATIN SMALL LETTER W WITH CIRCUMFLEX\n0177          ; Lowercase # L&       LATIN SMALL LETTER Y WITH CIRCUMFLEX\n017A          ; Lowercase # L&       LATIN SMALL LETTER Z WITH ACUTE\n017C          ; Lowercase # L&       LATIN SMALL LETTER Z WITH DOT ABOVE\n017E..0180    ; Lowercase # L&   [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE\n0183          ; Lowercase # L&       LATIN SMALL LETTER B WITH TOPBAR\n0185          ; Lowercase # L&       LATIN SMALL LETTER TONE SIX\n0188          ; Lowercase # L&       LATIN SMALL LETTER C WITH HOOK\n018C..018D    ; Lowercase # L&   [2] LATIN SMALL LETTER D WITH TOPBAR..LATIN SMALL LETTER TURNED DELTA\n0192          ; Lowercase # L&       LATIN SMALL LETTER F WITH HOOK\n0195          ; Lowercase # L&       LATIN SMALL LETTER HV\n0199..019B    ; Lowercase # L&   [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE\n019E          ; Lowercase # L&       LATIN SMALL LETTER N WITH LONG RIGHT LEG\n01A1          ; Lowercase # L&       LATIN SMALL LETTER O WITH HORN\n01A3          ; Lowercase # L&       LATIN SMALL LETTER OI\n01A5          ; Lowercase # L&       LATIN SMALL LETTER P WITH HOOK\n01A8          ; Lowercase # L&       LATIN SMALL LETTER TONE TWO\n01AA..01AB    ; Lowercase # L&   [2] LATIN LETTER REVERSED ESH LOOP..LATIN SMALL LETTER T WITH PALATAL HOOK\n01AD          ; Lowercase # L&       LATIN SMALL LETTER T WITH HOOK\n01B0          ; Lowercase # L&       LATIN SMALL LETTER U WITH HORN\n01B4          ; Lowercase # L&       LATIN SMALL LETTER Y WITH HOOK\n01B6          ; Lowercase # L&       LATIN SMALL LETTER Z WITH STROKE\n01B9..01BA    ; Lowercase # L&   [2] LATIN SMALL LETTER EZH REVERSED..LATIN SMALL LETTER EZH WITH TAIL\n01BD..01BF    ; Lowercase # L&   [3] LATIN SMALL LETTER TONE FIVE..LATIN LETTER WYNN\n01C6          ; Lowercase # L&       LATIN SMALL LETTER DZ WITH CARON\n01C9          ; Lowercase # L&       LATIN SMALL LETTER LJ\n01CC          ; Lowercase # L&       LATIN SMALL LETTER NJ\n01CE          ; Lowercase # L&       LATIN SMALL LETTER A WITH CARON\n01D0          ; Lowercase # L&       LATIN SMALL LETTER I WITH CARON\n01D2          ; Lowercase # L&       LATIN SMALL LETTER O WITH CARON\n01D4          ; Lowercase # L&       LATIN SMALL LETTER U WITH CARON\n01D6          ; Lowercase # L&       LATIN SMALL LETTER U WITH DIAERESIS AND MACRON\n01D8          ; Lowercase # L&       LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE\n01DA          ; Lowercase # L&       LATIN SMALL LETTER U WITH DIAERESIS AND CARON\n01DC..01DD    ; Lowercase # L&   [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E\n01DF          ; Lowercase # L&       LATIN SMALL LETTER A WITH DIAERESIS AND MACRON\n01E1          ; Lowercase # L&       LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON\n01E3          ; Lowercase # L&       LATIN SMALL LETTER AE WITH MACRON\n01E5          ; Lowercase # L&       LATIN SMALL LETTER G WITH STROKE\n01E7          ; Lowercase # L&       LATIN SMALL LETTER G WITH CARON\n01E9          ; Lowercase # L&       LATIN SMALL LETTER K WITH CARON\n01EB          ; Lowercase # L&       LATIN SMALL LETTER O WITH OGONEK\n01ED          ; Lowercase # L&       LATIN SMALL LETTER O WITH OGONEK AND MACRON\n01EF..01F0    ; Lowercase # L&   [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON\n01F3          ; Lowercase # L&       LATIN SMALL LETTER DZ\n01F5          ; Lowercase # L&       LATIN SMALL LETTER G WITH ACUTE\n01F9          ; Lowercase # L&       LATIN SMALL LETTER N WITH GRAVE\n01FB          ; Lowercase # L&       LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE\n01FD          ; Lowercase # L&       LATIN SMALL LETTER AE WITH ACUTE\n01FF          ; Lowercase # L&       LATIN SMALL LETTER O WITH STROKE AND ACUTE\n0201          ; Lowercase # L&       LATIN SMALL LETTER A WITH DOUBLE GRAVE\n0203          ; Lowercase # L&       LATIN SMALL LETTER A WITH INVERTED BREVE\n0205          ; Lowercase # L&       LATIN SMALL LETTER E WITH DOUBLE GRAVE\n0207          ; Lowercase # L&       LATIN SMALL LETTER E WITH INVERTED BREVE\n0209          ; Lowercase # L&       LATIN SMALL LETTER I WITH DOUBLE GRAVE\n020B          ; Lowercase # L&       LATIN SMALL LETTER I WITH INVERTED BREVE\n020D          ; Lowercase # L&       LATIN SMALL LETTER O WITH DOUBLE GRAVE\n020F          ; Lowercase # L&       LATIN SMALL LETTER O WITH INVERTED BREVE\n0211          ; Lowercase # L&       LATIN SMALL LETTER R WITH DOUBLE GRAVE\n0213          ; Lowercase # L&       LATIN SMALL LETTER R WITH INVERTED BREVE\n0215          ; Lowercase # L&       LATIN SMALL LETTER U WITH DOUBLE GRAVE\n0217          ; Lowercase # L&       LATIN SMALL LETTER U WITH INVERTED BREVE\n0219          ; Lowercase # L&       LATIN SMALL LETTER S WITH COMMA BELOW\n021B          ; Lowercase # L&       LATIN SMALL LETTER T WITH COMMA BELOW\n021D          ; Lowercase # L&       LATIN SMALL LETTER YOGH\n021F          ; Lowercase # L&       LATIN SMALL LETTER H WITH CARON\n0221          ; Lowercase # L&       LATIN SMALL LETTER D WITH CURL\n0223          ; Lowercase # L&       LATIN SMALL LETTER OU\n0225          ; Lowercase # L&       LATIN SMALL LETTER Z WITH HOOK\n0227          ; Lowercase # L&       LATIN SMALL LETTER A WITH DOT ABOVE\n0229          ; Lowercase # L&       LATIN SMALL LETTER E WITH CEDILLA\n022B          ; Lowercase # L&       LATIN SMALL LETTER O WITH DIAERESIS AND MACRON\n022D          ; Lowercase # L&       LATIN SMALL LETTER O WITH TILDE AND MACRON\n022F          ; Lowercase # L&       LATIN SMALL LETTER O WITH DOT ABOVE\n0231          ; Lowercase # L&       LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON\n0233..0239    ; Lowercase # L&   [7] LATIN SMALL LETTER Y WITH MACRON..LATIN SMALL LETTER QP DIGRAPH\n023C          ; Lowercase # L&       LATIN SMALL LETTER C WITH STROKE\n023F..0240    ; Lowercase # L&   [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL\n0242          ; Lowercase # L&       LATIN SMALL LETTER GLOTTAL STOP\n0247          ; Lowercase # L&       LATIN SMALL LETTER E WITH STROKE\n0249          ; Lowercase # L&       LATIN SMALL LETTER J WITH STROKE\n024B          ; Lowercase # L&       LATIN SMALL LETTER Q WITH HOOK TAIL\n024D          ; Lowercase # L&       LATIN SMALL LETTER R WITH STROKE\n024F..0293    ; Lowercase # L&  [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL\n0296..02AF    ; Lowercase # L&  [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL\n02B0..02B8    ; Lowercase # Lm   [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y\n02C0..02C1    ; Lowercase # Lm   [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP\n02E0..02E4    ; Lowercase # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n0345          ; Lowercase # Mn       COMBINING GREEK YPOGEGRAMMENI\n0371          ; Lowercase # L&       GREEK SMALL LETTER HETA\n0373          ; Lowercase # L&       GREEK SMALL LETTER ARCHAIC SAMPI\n0377          ; Lowercase # L&       GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037A          ; Lowercase # Lm       GREEK YPOGEGRAMMENI\n037B..037D    ; Lowercase # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n0390          ; Lowercase # L&       GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS\n03AC..03CE    ; Lowercase # L&  [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS\n03D0..03D1    ; Lowercase # L&   [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL\n03D5..03D7    ; Lowercase # L&   [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL\n03D9          ; Lowercase # L&       GREEK SMALL LETTER ARCHAIC KOPPA\n03DB          ; Lowercase # L&       GREEK SMALL LETTER STIGMA\n03DD          ; Lowercase # L&       GREEK SMALL LETTER DIGAMMA\n03DF          ; Lowercase # L&       GREEK SMALL LETTER KOPPA\n03E1          ; Lowercase # L&       GREEK SMALL LETTER SAMPI\n03E3          ; Lowercase # L&       COPTIC SMALL LETTER SHEI\n03E5          ; Lowercase # L&       COPTIC SMALL LETTER FEI\n03E7          ; Lowercase # L&       COPTIC SMALL LETTER KHEI\n03E9          ; Lowercase # L&       COPTIC SMALL LETTER HORI\n03EB          ; Lowercase # L&       COPTIC SMALL LETTER GANGIA\n03ED          ; Lowercase # L&       COPTIC SMALL LETTER SHIMA\n03EF..03F3    ; Lowercase # L&   [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT\n03F5          ; Lowercase # L&       GREEK LUNATE EPSILON SYMBOL\n03F8          ; Lowercase # L&       GREEK SMALL LETTER SHO\n03FB..03FC    ; Lowercase # L&   [2] GREEK SMALL LETTER SAN..GREEK RHO WITH STROKE SYMBOL\n0430..045F    ; Lowercase # L&  [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE\n0461          ; Lowercase # L&       CYRILLIC SMALL LETTER OMEGA\n0463          ; Lowercase # L&       CYRILLIC SMALL LETTER YAT\n0465          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTIFIED E\n0467          ; Lowercase # L&       CYRILLIC SMALL LETTER LITTLE YUS\n0469          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS\n046B          ; Lowercase # L&       CYRILLIC SMALL LETTER BIG YUS\n046D          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTIFIED BIG YUS\n046F          ; Lowercase # L&       CYRILLIC SMALL LETTER KSI\n0471          ; Lowercase # L&       CYRILLIC SMALL LETTER PSI\n0473          ; Lowercase # L&       CYRILLIC SMALL LETTER FITA\n0475          ; Lowercase # L&       CYRILLIC SMALL LETTER IZHITSA\n0477          ; Lowercase # L&       CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT\n0479          ; Lowercase # L&       CYRILLIC SMALL LETTER UK\n047B          ; Lowercase # L&       CYRILLIC SMALL LETTER ROUND OMEGA\n047D          ; Lowercase # L&       CYRILLIC SMALL LETTER OMEGA WITH TITLO\n047F          ; Lowercase # L&       CYRILLIC SMALL LETTER OT\n0481          ; Lowercase # L&       CYRILLIC SMALL LETTER KOPPA\n048B          ; Lowercase # L&       CYRILLIC SMALL LETTER SHORT I WITH TAIL\n048D          ; Lowercase # L&       CYRILLIC SMALL LETTER SEMISOFT SIGN\n048F          ; Lowercase # L&       CYRILLIC SMALL LETTER ER WITH TICK\n0491          ; Lowercase # L&       CYRILLIC SMALL LETTER GHE WITH UPTURN\n0493          ; Lowercase # L&       CYRILLIC SMALL LETTER GHE WITH STROKE\n0495          ; Lowercase # L&       CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK\n0497          ; Lowercase # L&       CYRILLIC SMALL LETTER ZHE WITH DESCENDER\n0499          ; Lowercase # L&       CYRILLIC SMALL LETTER ZE WITH DESCENDER\n049B          ; Lowercase # L&       CYRILLIC SMALL LETTER KA WITH DESCENDER\n049D          ; Lowercase # L&       CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE\n049F          ; Lowercase # L&       CYRILLIC SMALL LETTER KA WITH STROKE\n04A1          ; Lowercase # L&       CYRILLIC SMALL LETTER BASHKIR KA\n04A3          ; Lowercase # L&       CYRILLIC SMALL LETTER EN WITH DESCENDER\n04A5          ; Lowercase # L&       CYRILLIC SMALL LIGATURE EN GHE\n04A7          ; Lowercase # L&       CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK\n04A9          ; Lowercase # L&       CYRILLIC SMALL LETTER ABKHASIAN HA\n04AB          ; Lowercase # L&       CYRILLIC SMALL LETTER ES WITH DESCENDER\n04AD          ; Lowercase # L&       CYRILLIC SMALL LETTER TE WITH DESCENDER\n04AF          ; Lowercase # L&       CYRILLIC SMALL LETTER STRAIGHT U\n04B1          ; Lowercase # L&       CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE\n04B3          ; Lowercase # L&       CYRILLIC SMALL LETTER HA WITH DESCENDER\n04B5          ; Lowercase # L&       CYRILLIC SMALL LIGATURE TE TSE\n04B7          ; Lowercase # L&       CYRILLIC SMALL LETTER CHE WITH DESCENDER\n04B9          ; Lowercase # L&       CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE\n04BB          ; Lowercase # L&       CYRILLIC SMALL LETTER SHHA\n04BD          ; Lowercase # L&       CYRILLIC SMALL LETTER ABKHASIAN CHE\n04BF          ; Lowercase # L&       CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER\n04C2          ; Lowercase # L&       CYRILLIC SMALL LETTER ZHE WITH BREVE\n04C4          ; Lowercase # L&       CYRILLIC SMALL LETTER KA WITH HOOK\n04C6          ; Lowercase # L&       CYRILLIC SMALL LETTER EL WITH TAIL\n04C8          ; Lowercase # L&       CYRILLIC SMALL LETTER EN WITH HOOK\n04CA          ; Lowercase # L&       CYRILLIC SMALL LETTER EN WITH TAIL\n04CC          ; Lowercase # L&       CYRILLIC SMALL LETTER KHAKASSIAN CHE\n04CE..04CF    ; Lowercase # L&   [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA\n04D1          ; Lowercase # L&       CYRILLIC SMALL LETTER A WITH BREVE\n04D3          ; Lowercase # L&       CYRILLIC SMALL LETTER A WITH DIAERESIS\n04D5          ; Lowercase # L&       CYRILLIC SMALL LIGATURE A IE\n04D7          ; Lowercase # L&       CYRILLIC SMALL LETTER IE WITH BREVE\n04D9          ; Lowercase # L&       CYRILLIC SMALL LETTER SCHWA\n04DB          ; Lowercase # L&       CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS\n04DD          ; Lowercase # L&       CYRILLIC SMALL LETTER ZHE WITH DIAERESIS\n04DF          ; Lowercase # L&       CYRILLIC SMALL LETTER ZE WITH DIAERESIS\n04E1          ; Lowercase # L&       CYRILLIC SMALL LETTER ABKHASIAN DZE\n04E3          ; Lowercase # L&       CYRILLIC SMALL LETTER I WITH MACRON\n04E5          ; Lowercase # L&       CYRILLIC SMALL LETTER I WITH DIAERESIS\n04E7          ; Lowercase # L&       CYRILLIC SMALL LETTER O WITH DIAERESIS\n04E9          ; Lowercase # L&       CYRILLIC SMALL LETTER BARRED O\n04EB          ; Lowercase # L&       CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS\n04ED          ; Lowercase # L&       CYRILLIC SMALL LETTER E WITH DIAERESIS\n04EF          ; Lowercase # L&       CYRILLIC SMALL LETTER U WITH MACRON\n04F1          ; Lowercase # L&       CYRILLIC SMALL LETTER U WITH DIAERESIS\n04F3          ; Lowercase # L&       CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE\n04F5          ; Lowercase # L&       CYRILLIC SMALL LETTER CHE WITH DIAERESIS\n04F7          ; Lowercase # L&       CYRILLIC SMALL LETTER GHE WITH DESCENDER\n04F9          ; Lowercase # L&       CYRILLIC SMALL LETTER YERU WITH DIAERESIS\n04FB          ; Lowercase # L&       CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK\n04FD          ; Lowercase # L&       CYRILLIC SMALL LETTER HA WITH HOOK\n04FF          ; Lowercase # L&       CYRILLIC SMALL LETTER HA WITH STROKE\n0501          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI DE\n0503          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI DJE\n0505          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI ZJE\n0507          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI DZJE\n0509          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI LJE\n050B          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI NJE\n050D          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI SJE\n050F          ; Lowercase # L&       CYRILLIC SMALL LETTER KOMI TJE\n0511          ; Lowercase # L&       CYRILLIC SMALL LETTER REVERSED ZE\n0513          ; Lowercase # L&       CYRILLIC SMALL LETTER EL WITH HOOK\n0515          ; Lowercase # L&       CYRILLIC SMALL LETTER LHA\n0517          ; Lowercase # L&       CYRILLIC SMALL LETTER RHA\n0519          ; Lowercase # L&       CYRILLIC SMALL LETTER YAE\n051B          ; Lowercase # L&       CYRILLIC SMALL LETTER QA\n051D          ; Lowercase # L&       CYRILLIC SMALL LETTER WE\n051F          ; Lowercase # L&       CYRILLIC SMALL LETTER ALEUT KA\n0521          ; Lowercase # L&       CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK\n0523          ; Lowercase # L&       CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK\n0525          ; Lowercase # L&       CYRILLIC SMALL LETTER PE WITH DESCENDER\n0527          ; Lowercase # L&       CYRILLIC SMALL LETTER SHHA WITH DESCENDER\n0529          ; Lowercase # L&       CYRILLIC SMALL LETTER EN WITH LEFT HOOK\n052B          ; Lowercase # L&       CYRILLIC SMALL LETTER DZZHE\n052D          ; Lowercase # L&       CYRILLIC SMALL LETTER DCHE\n052F          ; Lowercase # L&       CYRILLIC SMALL LETTER EL WITH DESCENDER\n0560..0588    ; Lowercase # L&  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE\n10D0..10FA    ; Lowercase # L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FC          ; Lowercase # Lm       MODIFIER LETTER GEORGIAN NAR\n10FD..10FF    ; Lowercase # L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n13F8..13FD    ; Lowercase # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1C80..1C88    ; Lowercase # L&   [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK\n1C8A          ; Lowercase # L&       CYRILLIC SMALL LETTER TJE\n1D00..1D2B    ; Lowercase # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL\n1D2C..1D6A    ; Lowercase # Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D6B..1D77    ; Lowercase # L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G\n1D78          ; Lowercase # Lm       MODIFIER LETTER CYRILLIC EN\n1D79..1D9A    ; Lowercase # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK\n1D9B..1DBF    ; Lowercase # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA\n1E01          ; Lowercase # L&       LATIN SMALL LETTER A WITH RING BELOW\n1E03          ; Lowercase # L&       LATIN SMALL LETTER B WITH DOT ABOVE\n1E05          ; Lowercase # L&       LATIN SMALL LETTER B WITH DOT BELOW\n1E07          ; Lowercase # L&       LATIN SMALL LETTER B WITH LINE BELOW\n1E09          ; Lowercase # L&       LATIN SMALL LETTER C WITH CEDILLA AND ACUTE\n1E0B          ; Lowercase # L&       LATIN SMALL LETTER D WITH DOT ABOVE\n1E0D          ; Lowercase # L&       LATIN SMALL LETTER D WITH DOT BELOW\n1E0F          ; Lowercase # L&       LATIN SMALL LETTER D WITH LINE BELOW\n1E11          ; Lowercase # L&       LATIN SMALL LETTER D WITH CEDILLA\n1E13          ; Lowercase # L&       LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW\n1E15          ; Lowercase # L&       LATIN SMALL LETTER E WITH MACRON AND GRAVE\n1E17          ; Lowercase # L&       LATIN SMALL LETTER E WITH MACRON AND ACUTE\n1E19          ; Lowercase # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW\n1E1B          ; Lowercase # L&       LATIN SMALL LETTER E WITH TILDE BELOW\n1E1D          ; Lowercase # L&       LATIN SMALL LETTER E WITH CEDILLA AND BREVE\n1E1F          ; Lowercase # L&       LATIN SMALL LETTER F WITH DOT ABOVE\n1E21          ; Lowercase # L&       LATIN SMALL LETTER G WITH MACRON\n1E23          ; Lowercase # L&       LATIN SMALL LETTER H WITH DOT ABOVE\n1E25          ; Lowercase # L&       LATIN SMALL LETTER H WITH DOT BELOW\n1E27          ; Lowercase # L&       LATIN SMALL LETTER H WITH DIAERESIS\n1E29          ; Lowercase # L&       LATIN SMALL LETTER H WITH CEDILLA\n1E2B          ; Lowercase # L&       LATIN SMALL LETTER H WITH BREVE BELOW\n1E2D          ; Lowercase # L&       LATIN SMALL LETTER I WITH TILDE BELOW\n1E2F          ; Lowercase # L&       LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE\n1E31          ; Lowercase # L&       LATIN SMALL LETTER K WITH ACUTE\n1E33          ; Lowercase # L&       LATIN SMALL LETTER K WITH DOT BELOW\n1E35          ; Lowercase # L&       LATIN SMALL LETTER K WITH LINE BELOW\n1E37          ; Lowercase # L&       LATIN SMALL LETTER L WITH DOT BELOW\n1E39          ; Lowercase # L&       LATIN SMALL LETTER L WITH DOT BELOW AND MACRON\n1E3B          ; Lowercase # L&       LATIN SMALL LETTER L WITH LINE BELOW\n1E3D          ; Lowercase # L&       LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW\n1E3F          ; Lowercase # L&       LATIN SMALL LETTER M WITH ACUTE\n1E41          ; Lowercase # L&       LATIN SMALL LETTER M WITH DOT ABOVE\n1E43          ; Lowercase # L&       LATIN SMALL LETTER M WITH DOT BELOW\n1E45          ; Lowercase # L&       LATIN SMALL LETTER N WITH DOT ABOVE\n1E47          ; Lowercase # L&       LATIN SMALL LETTER N WITH DOT BELOW\n1E49          ; Lowercase # L&       LATIN SMALL LETTER N WITH LINE BELOW\n1E4B          ; Lowercase # L&       LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW\n1E4D          ; Lowercase # L&       LATIN SMALL LETTER O WITH TILDE AND ACUTE\n1E4F          ; Lowercase # L&       LATIN SMALL LETTER O WITH TILDE AND DIAERESIS\n1E51          ; Lowercase # L&       LATIN SMALL LETTER O WITH MACRON AND GRAVE\n1E53          ; Lowercase # L&       LATIN SMALL LETTER O WITH MACRON AND ACUTE\n1E55          ; Lowercase # L&       LATIN SMALL LETTER P WITH ACUTE\n1E57          ; Lowercase # L&       LATIN SMALL LETTER P WITH DOT ABOVE\n1E59          ; Lowercase # L&       LATIN SMALL LETTER R WITH DOT ABOVE\n1E5B          ; Lowercase # L&       LATIN SMALL LETTER R WITH DOT BELOW\n1E5D          ; Lowercase # L&       LATIN SMALL LETTER R WITH DOT BELOW AND MACRON\n1E5F          ; Lowercase # L&       LATIN SMALL LETTER R WITH LINE BELOW\n1E61          ; Lowercase # L&       LATIN SMALL LETTER S WITH DOT ABOVE\n1E63          ; Lowercase # L&       LATIN SMALL LETTER S WITH DOT BELOW\n1E65          ; Lowercase # L&       LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE\n1E67          ; Lowercase # L&       LATIN SMALL LETTER S WITH CARON AND DOT ABOVE\n1E69          ; Lowercase # L&       LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE\n1E6B          ; Lowercase # L&       LATIN SMALL LETTER T WITH DOT ABOVE\n1E6D          ; Lowercase # L&       LATIN SMALL LETTER T WITH DOT BELOW\n1E6F          ; Lowercase # L&       LATIN SMALL LETTER T WITH LINE BELOW\n1E71          ; Lowercase # L&       LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW\n1E73          ; Lowercase # L&       LATIN SMALL LETTER U WITH DIAERESIS BELOW\n1E75          ; Lowercase # L&       LATIN SMALL LETTER U WITH TILDE BELOW\n1E77          ; Lowercase # L&       LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW\n1E79          ; Lowercase # L&       LATIN SMALL LETTER U WITH TILDE AND ACUTE\n1E7B          ; Lowercase # L&       LATIN SMALL LETTER U WITH MACRON AND DIAERESIS\n1E7D          ; Lowercase # L&       LATIN SMALL LETTER V WITH TILDE\n1E7F          ; Lowercase # L&       LATIN SMALL LETTER V WITH DOT BELOW\n1E81          ; Lowercase # L&       LATIN SMALL LETTER W WITH GRAVE\n1E83          ; Lowercase # L&       LATIN SMALL LETTER W WITH ACUTE\n1E85          ; Lowercase # L&       LATIN SMALL LETTER W WITH DIAERESIS\n1E87          ; Lowercase # L&       LATIN SMALL LETTER W WITH DOT ABOVE\n1E89          ; Lowercase # L&       LATIN SMALL LETTER W WITH DOT BELOW\n1E8B          ; Lowercase # L&       LATIN SMALL LETTER X WITH DOT ABOVE\n1E8D          ; Lowercase # L&       LATIN SMALL LETTER X WITH DIAERESIS\n1E8F          ; Lowercase # L&       LATIN SMALL LETTER Y WITH DOT ABOVE\n1E91          ; Lowercase # L&       LATIN SMALL LETTER Z WITH CIRCUMFLEX\n1E93          ; Lowercase # L&       LATIN SMALL LETTER Z WITH DOT BELOW\n1E95..1E9D    ; Lowercase # L&   [9] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH HIGH STROKE\n1E9F          ; Lowercase # L&       LATIN SMALL LETTER DELTA\n1EA1          ; Lowercase # L&       LATIN SMALL LETTER A WITH DOT BELOW\n1EA3          ; Lowercase # L&       LATIN SMALL LETTER A WITH HOOK ABOVE\n1EA5          ; Lowercase # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE\n1EA7          ; Lowercase # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE\n1EA9          ; Lowercase # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE\n1EAB          ; Lowercase # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE\n1EAD          ; Lowercase # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW\n1EAF          ; Lowercase # L&       LATIN SMALL LETTER A WITH BREVE AND ACUTE\n1EB1          ; Lowercase # L&       LATIN SMALL LETTER A WITH BREVE AND GRAVE\n1EB3          ; Lowercase # L&       LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE\n1EB5          ; Lowercase # L&       LATIN SMALL LETTER A WITH BREVE AND TILDE\n1EB7          ; Lowercase # L&       LATIN SMALL LETTER A WITH BREVE AND DOT BELOW\n1EB9          ; Lowercase # L&       LATIN SMALL LETTER E WITH DOT BELOW\n1EBB          ; Lowercase # L&       LATIN SMALL LETTER E WITH HOOK ABOVE\n1EBD          ; Lowercase # L&       LATIN SMALL LETTER E WITH TILDE\n1EBF          ; Lowercase # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE\n1EC1          ; Lowercase # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE\n1EC3          ; Lowercase # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE\n1EC5          ; Lowercase # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE\n1EC7          ; Lowercase # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW\n1EC9          ; Lowercase # L&       LATIN SMALL LETTER I WITH HOOK ABOVE\n1ECB          ; Lowercase # L&       LATIN SMALL LETTER I WITH DOT BELOW\n1ECD          ; Lowercase # L&       LATIN SMALL LETTER O WITH DOT BELOW\n1ECF          ; Lowercase # L&       LATIN SMALL LETTER O WITH HOOK ABOVE\n1ED1          ; Lowercase # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE\n1ED3          ; Lowercase # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE\n1ED5          ; Lowercase # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE\n1ED7          ; Lowercase # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE\n1ED9          ; Lowercase # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW\n1EDB          ; Lowercase # L&       LATIN SMALL LETTER O WITH HORN AND ACUTE\n1EDD          ; Lowercase # L&       LATIN SMALL LETTER O WITH HORN AND GRAVE\n1EDF          ; Lowercase # L&       LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE\n1EE1          ; Lowercase # L&       LATIN SMALL LETTER O WITH HORN AND TILDE\n1EE3          ; Lowercase # L&       LATIN SMALL LETTER O WITH HORN AND DOT BELOW\n1EE5          ; Lowercase # L&       LATIN SMALL LETTER U WITH DOT BELOW\n1EE7          ; Lowercase # L&       LATIN SMALL LETTER U WITH HOOK ABOVE\n1EE9          ; Lowercase # L&       LATIN SMALL LETTER U WITH HORN AND ACUTE\n1EEB          ; Lowercase # L&       LATIN SMALL LETTER U WITH HORN AND GRAVE\n1EED          ; Lowercase # L&       LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE\n1EEF          ; Lowercase # L&       LATIN SMALL LETTER U WITH HORN AND TILDE\n1EF1          ; Lowercase # L&       LATIN SMALL LETTER U WITH HORN AND DOT BELOW\n1EF3          ; Lowercase # L&       LATIN SMALL LETTER Y WITH GRAVE\n1EF5          ; Lowercase # L&       LATIN SMALL LETTER Y WITH DOT BELOW\n1EF7          ; Lowercase # L&       LATIN SMALL LETTER Y WITH HOOK ABOVE\n1EF9          ; Lowercase # L&       LATIN SMALL LETTER Y WITH TILDE\n1EFB          ; Lowercase # L&       LATIN SMALL LETTER MIDDLE-WELSH LL\n1EFD          ; Lowercase # L&       LATIN SMALL LETTER MIDDLE-WELSH V\n1EFF..1F07    ; Lowercase # L&   [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI\n1F10..1F15    ; Lowercase # L&   [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F27    ; Lowercase # L&   [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI\n1F30..1F37    ; Lowercase # L&   [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI\n1F40..1F45    ; Lowercase # L&   [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; Lowercase # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F60..1F67    ; Lowercase # L&   [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI\n1F70..1F7D    ; Lowercase # L&  [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1F87    ; Lowercase # L&   [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI\n1F90..1F97    ; Lowercase # L&   [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI\n1FA0..1FA7    ; Lowercase # L&   [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI\n1FB0..1FB4    ; Lowercase # L&   [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FB7    ; Lowercase # L&   [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI\n1FBE          ; Lowercase # L&       GREEK PROSGEGRAMMENI\n1FC2..1FC4    ; Lowercase # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FC7    ; Lowercase # L&   [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI\n1FD0..1FD3    ; Lowercase # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FD7    ; Lowercase # L&   [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI\n1FE0..1FE7    ; Lowercase # L&   [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI\n1FF2..1FF4    ; Lowercase # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FF7    ; Lowercase # L&   [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI\n2071          ; Lowercase # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n207F          ; Lowercase # Lm       SUPERSCRIPT LATIN SMALL LETTER N\n2090..209C    ; Lowercase # Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n210A          ; Lowercase # L&       SCRIPT SMALL G\n210E..210F    ; Lowercase # L&   [2] PLANCK CONSTANT..PLANCK CONSTANT OVER TWO PI\n2113          ; Lowercase # L&       SCRIPT SMALL L\n212F          ; Lowercase # L&       SCRIPT SMALL E\n2134          ; Lowercase # L&       SCRIPT SMALL O\n2139          ; Lowercase # L&       INFORMATION SOURCE\n213C..213D    ; Lowercase # L&   [2] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK SMALL GAMMA\n2146..2149    ; Lowercase # L&   [4] DOUBLE-STRUCK ITALIC SMALL D..DOUBLE-STRUCK ITALIC SMALL J\n214E          ; Lowercase # L&       TURNED SMALL F\n2170..217F    ; Lowercase # Nl  [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND\n2184          ; Lowercase # L&       LATIN SMALL LETTER REVERSED C\n24D0..24E9    ; Lowercase # So  [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z\n2C30..2C5F    ; Lowercase # L&  [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI\n2C61          ; Lowercase # L&       LATIN SMALL LETTER L WITH DOUBLE BAR\n2C65..2C66    ; Lowercase # L&   [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE\n2C68          ; Lowercase # L&       LATIN SMALL LETTER H WITH DESCENDER\n2C6A          ; Lowercase # L&       LATIN SMALL LETTER K WITH DESCENDER\n2C6C          ; Lowercase # L&       LATIN SMALL LETTER Z WITH DESCENDER\n2C71          ; Lowercase # L&       LATIN SMALL LETTER V WITH RIGHT HOOK\n2C73..2C74    ; Lowercase # L&   [2] LATIN SMALL LETTER W WITH HOOK..LATIN SMALL LETTER V WITH CURL\n2C76..2C7B    ; Lowercase # L&   [6] LATIN SMALL LETTER HALF H..LATIN LETTER SMALL CAPITAL TURNED E\n2C7C..2C7D    ; Lowercase # Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\n2C81          ; Lowercase # L&       COPTIC SMALL LETTER ALFA\n2C83          ; Lowercase # L&       COPTIC SMALL LETTER VIDA\n2C85          ; Lowercase # L&       COPTIC SMALL LETTER GAMMA\n2C87          ; Lowercase # L&       COPTIC SMALL LETTER DALDA\n2C89          ; Lowercase # L&       COPTIC SMALL LETTER EIE\n2C8B          ; Lowercase # L&       COPTIC SMALL LETTER SOU\n2C8D          ; Lowercase # L&       COPTIC SMALL LETTER ZATA\n2C8F          ; Lowercase # L&       COPTIC SMALL LETTER HATE\n2C91          ; Lowercase # L&       COPTIC SMALL LETTER THETHE\n2C93          ; Lowercase # L&       COPTIC SMALL LETTER IAUDA\n2C95          ; Lowercase # L&       COPTIC SMALL LETTER KAPA\n2C97          ; Lowercase # L&       COPTIC SMALL LETTER LAULA\n2C99          ; Lowercase # L&       COPTIC SMALL LETTER MI\n2C9B          ; Lowercase # L&       COPTIC SMALL LETTER NI\n2C9D          ; Lowercase # L&       COPTIC SMALL LETTER KSI\n2C9F          ; Lowercase # L&       COPTIC SMALL LETTER O\n2CA1          ; Lowercase # L&       COPTIC SMALL LETTER PI\n2CA3          ; Lowercase # L&       COPTIC SMALL LETTER RO\n2CA5          ; Lowercase # L&       COPTIC SMALL LETTER SIMA\n2CA7          ; Lowercase # L&       COPTIC SMALL LETTER TAU\n2CA9          ; Lowercase # L&       COPTIC SMALL LETTER UA\n2CAB          ; Lowercase # L&       COPTIC SMALL LETTER FI\n2CAD          ; Lowercase # L&       COPTIC SMALL LETTER KHI\n2CAF          ; Lowercase # L&       COPTIC SMALL LETTER PSI\n2CB1          ; Lowercase # L&       COPTIC SMALL LETTER OOU\n2CB3          ; Lowercase # L&       COPTIC SMALL LETTER DIALECT-P ALEF\n2CB5          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC AIN\n2CB7          ; Lowercase # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC EIE\n2CB9          ; Lowercase # L&       COPTIC SMALL LETTER DIALECT-P KAPA\n2CBB          ; Lowercase # L&       COPTIC SMALL LETTER DIALECT-P NI\n2CBD          ; Lowercase # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC NI\n2CBF          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC OOU\n2CC1          ; Lowercase # L&       COPTIC SMALL LETTER SAMPI\n2CC3          ; Lowercase # L&       COPTIC SMALL LETTER CROSSED SHEI\n2CC5          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC SHEI\n2CC7          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC ESH\n2CC9          ; Lowercase # L&       COPTIC SMALL LETTER AKHMIMIC KHEI\n2CCB          ; Lowercase # L&       COPTIC SMALL LETTER DIALECT-P HORI\n2CCD          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC HORI\n2CCF          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC HA\n2CD1          ; Lowercase # L&       COPTIC SMALL LETTER L-SHAPED HA\n2CD3          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC HEI\n2CD5          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC HAT\n2CD7          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC GANGIA\n2CD9          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC DJA\n2CDB          ; Lowercase # L&       COPTIC SMALL LETTER OLD COPTIC SHIMA\n2CDD          ; Lowercase # L&       COPTIC SMALL LETTER OLD NUBIAN SHIMA\n2CDF          ; Lowercase # L&       COPTIC SMALL LETTER OLD NUBIAN NGI\n2CE1          ; Lowercase # L&       COPTIC SMALL LETTER OLD NUBIAN NYI\n2CE3..2CE4    ; Lowercase # L&   [2] COPTIC SMALL LETTER OLD NUBIAN WAU..COPTIC SYMBOL KAI\n2CEC          ; Lowercase # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI\n2CEE          ; Lowercase # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CF3          ; Lowercase # L&       COPTIC SMALL LETTER BOHAIRIC KHEI\n2D00..2D25    ; Lowercase # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; Lowercase # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; Lowercase # L&       GEORGIAN SMALL LETTER AEN\nA641          ; Lowercase # L&       CYRILLIC SMALL LETTER ZEMLYA\nA643          ; Lowercase # L&       CYRILLIC SMALL LETTER DZELO\nA645          ; Lowercase # L&       CYRILLIC SMALL LETTER REVERSED DZE\nA647          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTA\nA649          ; Lowercase # L&       CYRILLIC SMALL LETTER DJERV\nA64B          ; Lowercase # L&       CYRILLIC SMALL LETTER MONOGRAPH UK\nA64D          ; Lowercase # L&       CYRILLIC SMALL LETTER BROAD OMEGA\nA64F          ; Lowercase # L&       CYRILLIC SMALL LETTER NEUTRAL YER\nA651          ; Lowercase # L&       CYRILLIC SMALL LETTER YERU WITH BACK YER\nA653          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTIFIED YAT\nA655          ; Lowercase # L&       CYRILLIC SMALL LETTER REVERSED YU\nA657          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTIFIED A\nA659          ; Lowercase # L&       CYRILLIC SMALL LETTER CLOSED LITTLE YUS\nA65B          ; Lowercase # L&       CYRILLIC SMALL LETTER BLENDED YUS\nA65D          ; Lowercase # L&       CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS\nA65F          ; Lowercase # L&       CYRILLIC SMALL LETTER YN\nA661          ; Lowercase # L&       CYRILLIC SMALL LETTER REVERSED TSE\nA663          ; Lowercase # L&       CYRILLIC SMALL LETTER SOFT DE\nA665          ; Lowercase # L&       CYRILLIC SMALL LETTER SOFT EL\nA667          ; Lowercase # L&       CYRILLIC SMALL LETTER SOFT EM\nA669          ; Lowercase # L&       CYRILLIC SMALL LETTER MONOCULAR O\nA66B          ; Lowercase # L&       CYRILLIC SMALL LETTER BINOCULAR O\nA66D          ; Lowercase # L&       CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA681          ; Lowercase # L&       CYRILLIC SMALL LETTER DWE\nA683          ; Lowercase # L&       CYRILLIC SMALL LETTER DZWE\nA685          ; Lowercase # L&       CYRILLIC SMALL LETTER ZHWE\nA687          ; Lowercase # L&       CYRILLIC SMALL LETTER CCHE\nA689          ; Lowercase # L&       CYRILLIC SMALL LETTER DZZE\nA68B          ; Lowercase # L&       CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK\nA68D          ; Lowercase # L&       CYRILLIC SMALL LETTER TWE\nA68F          ; Lowercase # L&       CYRILLIC SMALL LETTER TSWE\nA691          ; Lowercase # L&       CYRILLIC SMALL LETTER TSSE\nA693          ; Lowercase # L&       CYRILLIC SMALL LETTER TCHE\nA695          ; Lowercase # L&       CYRILLIC SMALL LETTER HWE\nA697          ; Lowercase # L&       CYRILLIC SMALL LETTER SHWE\nA699          ; Lowercase # L&       CYRILLIC SMALL LETTER DOUBLE O\nA69B          ; Lowercase # L&       CYRILLIC SMALL LETTER CROSSED O\nA69C..A69D    ; Lowercase # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA723          ; Lowercase # L&       LATIN SMALL LETTER EGYPTOLOGICAL ALEF\nA725          ; Lowercase # L&       LATIN SMALL LETTER EGYPTOLOGICAL AIN\nA727          ; Lowercase # L&       LATIN SMALL LETTER HENG\nA729          ; Lowercase # L&       LATIN SMALL LETTER TZ\nA72B          ; Lowercase # L&       LATIN SMALL LETTER TRESILLO\nA72D          ; Lowercase # L&       LATIN SMALL LETTER CUATRILLO\nA72F..A731    ; Lowercase # L&   [3] LATIN SMALL LETTER CUATRILLO WITH COMMA..LATIN LETTER SMALL CAPITAL S\nA733          ; Lowercase # L&       LATIN SMALL LETTER AA\nA735          ; Lowercase # L&       LATIN SMALL LETTER AO\nA737          ; Lowercase # L&       LATIN SMALL LETTER AU\nA739          ; Lowercase # L&       LATIN SMALL LETTER AV\nA73B          ; Lowercase # L&       LATIN SMALL LETTER AV WITH HORIZONTAL BAR\nA73D          ; Lowercase # L&       LATIN SMALL LETTER AY\nA73F          ; Lowercase # L&       LATIN SMALL LETTER REVERSED C WITH DOT\nA741          ; Lowercase # L&       LATIN SMALL LETTER K WITH STROKE\nA743          ; Lowercase # L&       LATIN SMALL LETTER K WITH DIAGONAL STROKE\nA745          ; Lowercase # L&       LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE\nA747          ; Lowercase # L&       LATIN SMALL LETTER BROKEN L\nA749          ; Lowercase # L&       LATIN SMALL LETTER L WITH HIGH STROKE\nA74B          ; Lowercase # L&       LATIN SMALL LETTER O WITH LONG STROKE OVERLAY\nA74D          ; Lowercase # L&       LATIN SMALL LETTER O WITH LOOP\nA74F          ; Lowercase # L&       LATIN SMALL LETTER OO\nA751          ; Lowercase # L&       LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER\nA753          ; Lowercase # L&       LATIN SMALL LETTER P WITH FLOURISH\nA755          ; Lowercase # L&       LATIN SMALL LETTER P WITH SQUIRREL TAIL\nA757          ; Lowercase # L&       LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER\nA759          ; Lowercase # L&       LATIN SMALL LETTER Q WITH DIAGONAL STROKE\nA75B          ; Lowercase # L&       LATIN SMALL LETTER R ROTUNDA\nA75D          ; Lowercase # L&       LATIN SMALL LETTER RUM ROTUNDA\nA75F          ; Lowercase # L&       LATIN SMALL LETTER V WITH DIAGONAL STROKE\nA761          ; Lowercase # L&       LATIN SMALL LETTER VY\nA763          ; Lowercase # L&       LATIN SMALL LETTER VISIGOTHIC Z\nA765          ; Lowercase # L&       LATIN SMALL LETTER THORN WITH STROKE\nA767          ; Lowercase # L&       LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER\nA769          ; Lowercase # L&       LATIN SMALL LETTER VEND\nA76B          ; Lowercase # L&       LATIN SMALL LETTER ET\nA76D          ; Lowercase # L&       LATIN SMALL LETTER IS\nA76F          ; Lowercase # L&       LATIN SMALL LETTER CON\nA770          ; Lowercase # Lm       MODIFIER LETTER US\nA771..A778    ; Lowercase # L&   [8] LATIN SMALL LETTER DUM..LATIN SMALL LETTER UM\nA77A          ; Lowercase # L&       LATIN SMALL LETTER INSULAR D\nA77C          ; Lowercase # L&       LATIN SMALL LETTER INSULAR F\nA77F          ; Lowercase # L&       LATIN SMALL LETTER TURNED INSULAR G\nA781          ; Lowercase # L&       LATIN SMALL LETTER TURNED L\nA783          ; Lowercase # L&       LATIN SMALL LETTER INSULAR R\nA785          ; Lowercase # L&       LATIN SMALL LETTER INSULAR S\nA787          ; Lowercase # L&       LATIN SMALL LETTER INSULAR T\nA78C          ; Lowercase # L&       LATIN SMALL LETTER SALTILLO\nA78E          ; Lowercase # L&       LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT\nA791          ; Lowercase # L&       LATIN SMALL LETTER N WITH DESCENDER\nA793..A795    ; Lowercase # L&   [3] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER H WITH PALATAL HOOK\nA797          ; Lowercase # L&       LATIN SMALL LETTER B WITH FLOURISH\nA799          ; Lowercase # L&       LATIN SMALL LETTER F WITH STROKE\nA79B          ; Lowercase # L&       LATIN SMALL LETTER VOLAPUK AE\nA79D          ; Lowercase # L&       LATIN SMALL LETTER VOLAPUK OE\nA79F          ; Lowercase # L&       LATIN SMALL LETTER VOLAPUK UE\nA7A1          ; Lowercase # L&       LATIN SMALL LETTER G WITH OBLIQUE STROKE\nA7A3          ; Lowercase # L&       LATIN SMALL LETTER K WITH OBLIQUE STROKE\nA7A5          ; Lowercase # L&       LATIN SMALL LETTER N WITH OBLIQUE STROKE\nA7A7          ; Lowercase # L&       LATIN SMALL LETTER R WITH OBLIQUE STROKE\nA7A9          ; Lowercase # L&       LATIN SMALL LETTER S WITH OBLIQUE STROKE\nA7AF          ; Lowercase # L&       LATIN LETTER SMALL CAPITAL Q\nA7B5          ; Lowercase # L&       LATIN SMALL LETTER BETA\nA7B7          ; Lowercase # L&       LATIN SMALL LETTER OMEGA\nA7B9          ; Lowercase # L&       LATIN SMALL LETTER U WITH STROKE\nA7BB          ; Lowercase # L&       LATIN SMALL LETTER GLOTTAL A\nA7BD          ; Lowercase # L&       LATIN SMALL LETTER GLOTTAL I\nA7BF          ; Lowercase # L&       LATIN SMALL LETTER GLOTTAL U\nA7C1          ; Lowercase # L&       LATIN SMALL LETTER OLD POLISH O\nA7C3          ; Lowercase # L&       LATIN SMALL LETTER ANGLICANA W\nA7C8          ; Lowercase # L&       LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY\nA7CA          ; Lowercase # L&       LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY\nA7CD          ; Lowercase # L&       LATIN SMALL LETTER S WITH DIAGONAL STROKE\nA7CF          ; Lowercase # L&       LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE\nA7D1          ; Lowercase # L&       LATIN SMALL LETTER CLOSED INSULAR G\nA7D3          ; Lowercase # L&       LATIN SMALL LETTER DOUBLE THORN\nA7D5          ; Lowercase # L&       LATIN SMALL LETTER DOUBLE WYNN\nA7D7          ; Lowercase # L&       LATIN SMALL LETTER MIDDLE SCOTS S\nA7D9          ; Lowercase # L&       LATIN SMALL LETTER SIGMOID S\nA7DB          ; Lowercase # L&       LATIN SMALL LETTER LAMBDA\nA7F1..A7F4    ; Lowercase # Lm   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F6          ; Lowercase # L&       LATIN SMALL LETTER REVERSED HALF H\nA7F8..A7F9    ; Lowercase # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA7FA          ; Lowercase # L&       LATIN LETTER SMALL CAPITAL TURNED M\nAB30..AB5A    ; Lowercase # L&  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG\nAB5C..AB5F    ; Lowercase # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB60..AB68    ; Lowercase # L&   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE\nAB69          ; Lowercase # Lm       MODIFIER LETTER SMALL TURNED W\nAB70..ABBF    ; Lowercase # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nFB00..FB06    ; Lowercase # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; Lowercase # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFF41..FF5A    ; Lowercase # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\n10428..1044F  ; Lowercase # L&  [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW\n104D8..104FB  ; Lowercase # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10597..105A1  ; Lowercase # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; Lowercase # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; Lowercase # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; Lowercase # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n10780         ; Lowercase # Lm       MODIFIER LETTER SMALL CAPITAL AA\n10783..10785  ; Lowercase # Lm   [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; Lowercase # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; Lowercase # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n10CC0..10CF2  ; Lowercase # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10D70..10D85  ; Lowercase # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n118C0..118DF  ; Lowercase # L&  [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n16E60..16E7F  ; Lowercase # L&  [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16EBB..16ED3  ; Lowercase # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n1D41A..1D433  ; Lowercase # L&  [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z\n1D44E..1D454  ; Lowercase # L&   [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D467  ; Lowercase # L&  [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z\n1D482..1D49B  ; Lowercase # L&  [26] MATHEMATICAL BOLD ITALIC SMALL A..MATHEMATICAL BOLD ITALIC SMALL Z\n1D4B6..1D4B9  ; Lowercase # L&   [4] MATHEMATICAL SCRIPT SMALL A..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; Lowercase # L&       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; Lowercase # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D4CF  ; Lowercase # L&  [11] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL SCRIPT SMALL Z\n1D4EA..1D503  ; Lowercase # L&  [26] MATHEMATICAL BOLD SCRIPT SMALL A..MATHEMATICAL BOLD SCRIPT SMALL Z\n1D51E..1D537  ; Lowercase # L&  [26] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL FRAKTUR SMALL Z\n1D552..1D56B  ; Lowercase # L&  [26] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL DOUBLE-STRUCK SMALL Z\n1D586..1D59F  ; Lowercase # L&  [26] MATHEMATICAL BOLD FRAKTUR SMALL A..MATHEMATICAL BOLD FRAKTUR SMALL Z\n1D5BA..1D5D3  ; Lowercase # L&  [26] MATHEMATICAL SANS-SERIF SMALL A..MATHEMATICAL SANS-SERIF SMALL Z\n1D5EE..1D607  ; Lowercase # L&  [26] MATHEMATICAL SANS-SERIF BOLD SMALL A..MATHEMATICAL SANS-SERIF BOLD SMALL Z\n1D622..1D63B  ; Lowercase # L&  [26] MATHEMATICAL SANS-SERIF ITALIC SMALL A..MATHEMATICAL SANS-SERIF ITALIC SMALL Z\n1D656..1D66F  ; Lowercase # L&  [26] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z\n1D68A..1D6A5  ; Lowercase # L&  [28] MATHEMATICAL MONOSPACE SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6C2..1D6DA  ; Lowercase # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DC..1D6E1  ; Lowercase # L&   [6] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL BOLD PI SYMBOL\n1D6FC..1D714  ; Lowercase # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D716..1D71B  ; Lowercase # L&   [6] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL ITALIC PI SYMBOL\n1D736..1D74E  ; Lowercase # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D750..1D755  ; Lowercase # L&   [6] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC PI SYMBOL\n1D770..1D788  ; Lowercase # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D78A..1D78F  ; Lowercase # L&   [6] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD PI SYMBOL\n1D7AA..1D7C2  ; Lowercase # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C4..1D7C9  ; Lowercase # L&   [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL\n1D7CB         ; Lowercase # L&       MATHEMATICAL BOLD SMALL DIGAMMA\n1DF00..1DF09  ; Lowercase # L&  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK\n1DF0B..1DF1E  ; Lowercase # L&  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL\n1DF25..1DF2A  ; Lowercase # L&   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK\n1E030..1E06D  ; Lowercase # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E922..1E943  ; Lowercase # L&  [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA\n\n# Total code points: 2595\n\n# ================================================\n\n# Derived Property: Uppercase\n#  Generated from: Lu + Other_Uppercase\n\n0041..005A    ; Uppercase # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n00C0..00D6    ; Uppercase # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00DE    ; Uppercase # L&   [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN\n0100          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH MACRON\n0102          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH BREVE\n0104          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH OGONEK\n0106          ; Uppercase # L&       LATIN CAPITAL LETTER C WITH ACUTE\n0108          ; Uppercase # L&       LATIN CAPITAL LETTER C WITH CIRCUMFLEX\n010A          ; Uppercase # L&       LATIN CAPITAL LETTER C WITH DOT ABOVE\n010C          ; Uppercase # L&       LATIN CAPITAL LETTER C WITH CARON\n010E          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH CARON\n0110          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH STROKE\n0112          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH MACRON\n0114          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH BREVE\n0116          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH DOT ABOVE\n0118          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH OGONEK\n011A          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CARON\n011C          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH CIRCUMFLEX\n011E          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH BREVE\n0120          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH DOT ABOVE\n0122          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH CEDILLA\n0124          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH CIRCUMFLEX\n0126          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH STROKE\n0128          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH TILDE\n012A          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH MACRON\n012C          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH BREVE\n012E          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH OGONEK\n0130          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH DOT ABOVE\n0132          ; Uppercase # L&       LATIN CAPITAL LIGATURE IJ\n0134          ; Uppercase # L&       LATIN CAPITAL LETTER J WITH CIRCUMFLEX\n0136          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH CEDILLA\n0139          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH ACUTE\n013B          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH CEDILLA\n013D          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH CARON\n013F          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH MIDDLE DOT\n0141          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH STROKE\n0143          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH ACUTE\n0145          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH CEDILLA\n0147          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH CARON\n014A          ; Uppercase # L&       LATIN CAPITAL LETTER ENG\n014C          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH MACRON\n014E          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH BREVE\n0150          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH DOUBLE ACUTE\n0152          ; Uppercase # L&       LATIN CAPITAL LIGATURE OE\n0154          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH ACUTE\n0156          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH CEDILLA\n0158          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH CARON\n015A          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH ACUTE\n015C          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH CIRCUMFLEX\n015E          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH CEDILLA\n0160          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH CARON\n0162          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH CEDILLA\n0164          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH CARON\n0166          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH STROKE\n0168          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH TILDE\n016A          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH MACRON\n016C          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH BREVE\n016E          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH RING ABOVE\n0170          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DOUBLE ACUTE\n0172          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH OGONEK\n0174          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH CIRCUMFLEX\n0176          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH CIRCUMFLEX\n0178..0179    ; Uppercase # L&   [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE\n017B          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH DOT ABOVE\n017D          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH CARON\n0181..0182    ; Uppercase # L&   [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR\n0184          ; Uppercase # L&       LATIN CAPITAL LETTER TONE SIX\n0186..0187    ; Uppercase # L&   [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK\n0189..018B    ; Uppercase # L&   [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR\n018E..0191    ; Uppercase # L&   [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK\n0193..0194    ; Uppercase # L&   [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA\n0196..0198    ; Uppercase # L&   [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK\n019C..019D    ; Uppercase # L&   [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK\n019F..01A0    ; Uppercase # L&   [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN\n01A2          ; Uppercase # L&       LATIN CAPITAL LETTER OI\n01A4          ; Uppercase # L&       LATIN CAPITAL LETTER P WITH HOOK\n01A6..01A7    ; Uppercase # L&   [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO\n01A9          ; Uppercase # L&       LATIN CAPITAL LETTER ESH\n01AC          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH HOOK\n01AE..01AF    ; Uppercase # L&   [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN\n01B1..01B3    ; Uppercase # L&   [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK\n01B5          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH STROKE\n01B7..01B8    ; Uppercase # L&   [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED\n01BC          ; Uppercase # L&       LATIN CAPITAL LETTER TONE FIVE\n01C4          ; Uppercase # L&       LATIN CAPITAL LETTER DZ WITH CARON\n01C7          ; Uppercase # L&       LATIN CAPITAL LETTER LJ\n01CA          ; Uppercase # L&       LATIN CAPITAL LETTER NJ\n01CD          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH CARON\n01CF          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH CARON\n01D1          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH CARON\n01D3          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH CARON\n01D5          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON\n01D7          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE\n01D9          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON\n01DB          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE\n01DE          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON\n01E0          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON\n01E2          ; Uppercase # L&       LATIN CAPITAL LETTER AE WITH MACRON\n01E4          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH STROKE\n01E6          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH CARON\n01E8          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH CARON\n01EA          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH OGONEK\n01EC          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH OGONEK AND MACRON\n01EE          ; Uppercase # L&       LATIN CAPITAL LETTER EZH WITH CARON\n01F1          ; Uppercase # L&       LATIN CAPITAL LETTER DZ\n01F4          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH ACUTE\n01F6..01F8    ; Uppercase # L&   [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE\n01FA          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE\n01FC          ; Uppercase # L&       LATIN CAPITAL LETTER AE WITH ACUTE\n01FE          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH STROKE AND ACUTE\n0200          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH DOUBLE GRAVE\n0202          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH INVERTED BREVE\n0204          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH DOUBLE GRAVE\n0206          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH INVERTED BREVE\n0208          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH DOUBLE GRAVE\n020A          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH INVERTED BREVE\n020C          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH DOUBLE GRAVE\n020E          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH INVERTED BREVE\n0210          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH DOUBLE GRAVE\n0212          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH INVERTED BREVE\n0214          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DOUBLE GRAVE\n0216          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH INVERTED BREVE\n0218          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH COMMA BELOW\n021A          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH COMMA BELOW\n021C          ; Uppercase # L&       LATIN CAPITAL LETTER YOGH\n021E          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH CARON\n0220          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH LONG RIGHT LEG\n0222          ; Uppercase # L&       LATIN CAPITAL LETTER OU\n0224          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH HOOK\n0226          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH DOT ABOVE\n0228          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CEDILLA\n022A          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON\n022C          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH TILDE AND MACRON\n022E          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH DOT ABOVE\n0230          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON\n0232          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH MACRON\n023A..023B    ; Uppercase # L&   [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE\n023D..023E    ; Uppercase # L&   [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE\n0241          ; Uppercase # L&       LATIN CAPITAL LETTER GLOTTAL STOP\n0243..0246    ; Uppercase # L&   [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE\n0248          ; Uppercase # L&       LATIN CAPITAL LETTER J WITH STROKE\n024A          ; Uppercase # L&       LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL\n024C          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH STROKE\n024E          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH STROKE\n0370          ; Uppercase # L&       GREEK CAPITAL LETTER HETA\n0372          ; Uppercase # L&       GREEK CAPITAL LETTER ARCHAIC SAMPI\n0376          ; Uppercase # L&       GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA\n037F          ; Uppercase # L&       GREEK CAPITAL LETTER YOT\n0386          ; Uppercase # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0388..038A    ; Uppercase # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; Uppercase # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..038F    ; Uppercase # L&   [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS\n0391..03A1    ; Uppercase # L&  [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO\n03A3..03AB    ; Uppercase # L&   [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA\n03CF          ; Uppercase # L&       GREEK CAPITAL KAI SYMBOL\n03D2..03D4    ; Uppercase # L&   [3] GREEK UPSILON WITH HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL\n03D8          ; Uppercase # L&       GREEK LETTER ARCHAIC KOPPA\n03DA          ; Uppercase # L&       GREEK LETTER STIGMA\n03DC          ; Uppercase # L&       GREEK LETTER DIGAMMA\n03DE          ; Uppercase # L&       GREEK LETTER KOPPA\n03E0          ; Uppercase # L&       GREEK LETTER SAMPI\n03E2          ; Uppercase # L&       COPTIC CAPITAL LETTER SHEI\n03E4          ; Uppercase # L&       COPTIC CAPITAL LETTER FEI\n03E6          ; Uppercase # L&       COPTIC CAPITAL LETTER KHEI\n03E8          ; Uppercase # L&       COPTIC CAPITAL LETTER HORI\n03EA          ; Uppercase # L&       COPTIC CAPITAL LETTER GANGIA\n03EC          ; Uppercase # L&       COPTIC CAPITAL LETTER SHIMA\n03EE          ; Uppercase # L&       COPTIC CAPITAL LETTER DEI\n03F4          ; Uppercase # L&       GREEK CAPITAL THETA SYMBOL\n03F7          ; Uppercase # L&       GREEK CAPITAL LETTER SHO\n03F9..03FA    ; Uppercase # L&   [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN\n03FD..042F    ; Uppercase # L&  [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA\n0460          ; Uppercase # L&       CYRILLIC CAPITAL LETTER OMEGA\n0462          ; Uppercase # L&       CYRILLIC CAPITAL LETTER YAT\n0464          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTIFIED E\n0466          ; Uppercase # L&       CYRILLIC CAPITAL LETTER LITTLE YUS\n0468          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS\n046A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BIG YUS\n046C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS\n046E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KSI\n0470          ; Uppercase # L&       CYRILLIC CAPITAL LETTER PSI\n0472          ; Uppercase # L&       CYRILLIC CAPITAL LETTER FITA\n0474          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IZHITSA\n0476          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT\n0478          ; Uppercase # L&       CYRILLIC CAPITAL LETTER UK\n047A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ROUND OMEGA\n047C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER OMEGA WITH TITLO\n047E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER OT\n0480          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOPPA\n048A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SHORT I WITH TAIL\n048C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SEMISOFT SIGN\n048E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ER WITH TICK\n0490          ; Uppercase # L&       CYRILLIC CAPITAL LETTER GHE WITH UPTURN\n0492          ; Uppercase # L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE\n0494          ; Uppercase # L&       CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK\n0496          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER\n0498          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ZE WITH DESCENDER\n049A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KA WITH DESCENDER\n049C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE\n049E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KA WITH STROKE\n04A0          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BASHKIR KA\n04A2          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EN WITH DESCENDER\n04A4          ; Uppercase # L&       CYRILLIC CAPITAL LIGATURE EN GHE\n04A6          ; Uppercase # L&       CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK\n04A8          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ABKHASIAN HA\n04AA          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ES WITH DESCENDER\n04AC          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TE WITH DESCENDER\n04AE          ; Uppercase # L&       CYRILLIC CAPITAL LETTER STRAIGHT U\n04B0          ; Uppercase # L&       CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE\n04B2          ; Uppercase # L&       CYRILLIC CAPITAL LETTER HA WITH DESCENDER\n04B4          ; Uppercase # L&       CYRILLIC CAPITAL LIGATURE TE TSE\n04B6          ; Uppercase # L&       CYRILLIC CAPITAL LETTER CHE WITH DESCENDER\n04B8          ; Uppercase # L&       CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE\n04BA          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SHHA\n04BC          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE\n04BE          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER\n04C0..04C1    ; Uppercase # L&   [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE\n04C3          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KA WITH HOOK\n04C5          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EL WITH TAIL\n04C7          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EN WITH HOOK\n04C9          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EN WITH TAIL\n04CB          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KHAKASSIAN CHE\n04CD          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EM WITH TAIL\n04D0          ; Uppercase # L&       CYRILLIC CAPITAL LETTER A WITH BREVE\n04D2          ; Uppercase # L&       CYRILLIC CAPITAL LETTER A WITH DIAERESIS\n04D4          ; Uppercase # L&       CYRILLIC CAPITAL LIGATURE A IE\n04D6          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IE WITH BREVE\n04D8          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SCHWA\n04DA          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS\n04DC          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS\n04DE          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS\n04E0          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ABKHASIAN DZE\n04E2          ; Uppercase # L&       CYRILLIC CAPITAL LETTER I WITH MACRON\n04E4          ; Uppercase # L&       CYRILLIC CAPITAL LETTER I WITH DIAERESIS\n04E6          ; Uppercase # L&       CYRILLIC CAPITAL LETTER O WITH DIAERESIS\n04E8          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BARRED O\n04EA          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS\n04EC          ; Uppercase # L&       CYRILLIC CAPITAL LETTER E WITH DIAERESIS\n04EE          ; Uppercase # L&       CYRILLIC CAPITAL LETTER U WITH MACRON\n04F0          ; Uppercase # L&       CYRILLIC CAPITAL LETTER U WITH DIAERESIS\n04F2          ; Uppercase # L&       CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE\n04F4          ; Uppercase # L&       CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS\n04F6          ; Uppercase # L&       CYRILLIC CAPITAL LETTER GHE WITH DESCENDER\n04F8          ; Uppercase # L&       CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS\n04FA          ; Uppercase # L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK\n04FC          ; Uppercase # L&       CYRILLIC CAPITAL LETTER HA WITH HOOK\n04FE          ; Uppercase # L&       CYRILLIC CAPITAL LETTER HA WITH STROKE\n0500          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI DE\n0502          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI DJE\n0504          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI ZJE\n0506          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI DZJE\n0508          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI LJE\n050A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI NJE\n050C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI SJE\n050E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER KOMI TJE\n0510          ; Uppercase # L&       CYRILLIC CAPITAL LETTER REVERSED ZE\n0512          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EL WITH HOOK\n0514          ; Uppercase # L&       CYRILLIC CAPITAL LETTER LHA\n0516          ; Uppercase # L&       CYRILLIC CAPITAL LETTER RHA\n0518          ; Uppercase # L&       CYRILLIC CAPITAL LETTER YAE\n051A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER QA\n051C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER WE\n051E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ALEUT KA\n0520          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK\n0522          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK\n0524          ; Uppercase # L&       CYRILLIC CAPITAL LETTER PE WITH DESCENDER\n0526          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER\n0528          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK\n052A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DZZHE\n052C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DCHE\n052E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER EL WITH DESCENDER\n0531..0556    ; Uppercase # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n10A0..10C5    ; Uppercase # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; Uppercase # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; Uppercase # L&       GEORGIAN CAPITAL LETTER AEN\n13A0..13F5    ; Uppercase # L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n1C89          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TJE\n1C90..1CBA    ; Uppercase # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; Uppercase # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1E00          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH RING BELOW\n1E02          ; Uppercase # L&       LATIN CAPITAL LETTER B WITH DOT ABOVE\n1E04          ; Uppercase # L&       LATIN CAPITAL LETTER B WITH DOT BELOW\n1E06          ; Uppercase # L&       LATIN CAPITAL LETTER B WITH LINE BELOW\n1E08          ; Uppercase # L&       LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE\n1E0A          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH DOT ABOVE\n1E0C          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH DOT BELOW\n1E0E          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH LINE BELOW\n1E10          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH CEDILLA\n1E12          ; Uppercase # L&       LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW\n1E14          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH MACRON AND GRAVE\n1E16          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH MACRON AND ACUTE\n1E18          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW\n1E1A          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH TILDE BELOW\n1E1C          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE\n1E1E          ; Uppercase # L&       LATIN CAPITAL LETTER F WITH DOT ABOVE\n1E20          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH MACRON\n1E22          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH DOT ABOVE\n1E24          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH DOT BELOW\n1E26          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH DIAERESIS\n1E28          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH CEDILLA\n1E2A          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH BREVE BELOW\n1E2C          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH TILDE BELOW\n1E2E          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE\n1E30          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH ACUTE\n1E32          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH DOT BELOW\n1E34          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH LINE BELOW\n1E36          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH DOT BELOW\n1E38          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON\n1E3A          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH LINE BELOW\n1E3C          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW\n1E3E          ; Uppercase # L&       LATIN CAPITAL LETTER M WITH ACUTE\n1E40          ; Uppercase # L&       LATIN CAPITAL LETTER M WITH DOT ABOVE\n1E42          ; Uppercase # L&       LATIN CAPITAL LETTER M WITH DOT BELOW\n1E44          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH DOT ABOVE\n1E46          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH DOT BELOW\n1E48          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH LINE BELOW\n1E4A          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW\n1E4C          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH TILDE AND ACUTE\n1E4E          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS\n1E50          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH MACRON AND GRAVE\n1E52          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH MACRON AND ACUTE\n1E54          ; Uppercase # L&       LATIN CAPITAL LETTER P WITH ACUTE\n1E56          ; Uppercase # L&       LATIN CAPITAL LETTER P WITH DOT ABOVE\n1E58          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH DOT ABOVE\n1E5A          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH DOT BELOW\n1E5C          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON\n1E5E          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH LINE BELOW\n1E60          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH DOT ABOVE\n1E62          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH DOT BELOW\n1E64          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE\n1E66          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE\n1E68          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE\n1E6A          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH DOT ABOVE\n1E6C          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH DOT BELOW\n1E6E          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH LINE BELOW\n1E70          ; Uppercase # L&       LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW\n1E72          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DIAERESIS BELOW\n1E74          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH TILDE BELOW\n1E76          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW\n1E78          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH TILDE AND ACUTE\n1E7A          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS\n1E7C          ; Uppercase # L&       LATIN CAPITAL LETTER V WITH TILDE\n1E7E          ; Uppercase # L&       LATIN CAPITAL LETTER V WITH DOT BELOW\n1E80          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH GRAVE\n1E82          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH ACUTE\n1E84          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH DIAERESIS\n1E86          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH DOT ABOVE\n1E88          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH DOT BELOW\n1E8A          ; Uppercase # L&       LATIN CAPITAL LETTER X WITH DOT ABOVE\n1E8C          ; Uppercase # L&       LATIN CAPITAL LETTER X WITH DIAERESIS\n1E8E          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH DOT ABOVE\n1E90          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH CIRCUMFLEX\n1E92          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH DOT BELOW\n1E94          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH LINE BELOW\n1E9E          ; Uppercase # L&       LATIN CAPITAL LETTER SHARP S\n1EA0          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH DOT BELOW\n1EA2          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH HOOK ABOVE\n1EA4          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE\n1EA6          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE\n1EA8          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE\n1EAA          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE\n1EAC          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW\n1EAE          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH BREVE AND ACUTE\n1EB0          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH BREVE AND GRAVE\n1EB2          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE\n1EB4          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH BREVE AND TILDE\n1EB6          ; Uppercase # L&       LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW\n1EB8          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH DOT BELOW\n1EBA          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH HOOK ABOVE\n1EBC          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH TILDE\n1EBE          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE\n1EC0          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE\n1EC2          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE\n1EC4          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE\n1EC6          ; Uppercase # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW\n1EC8          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH HOOK ABOVE\n1ECA          ; Uppercase # L&       LATIN CAPITAL LETTER I WITH DOT BELOW\n1ECC          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH DOT BELOW\n1ECE          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH HOOK ABOVE\n1ED0          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE\n1ED2          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE\n1ED4          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE\n1ED6          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE\n1ED8          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW\n1EDA          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH HORN AND ACUTE\n1EDC          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH HORN AND GRAVE\n1EDE          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE\n1EE0          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH HORN AND TILDE\n1EE2          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW\n1EE4          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH DOT BELOW\n1EE6          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH HOOK ABOVE\n1EE8          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH HORN AND ACUTE\n1EEA          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH HORN AND GRAVE\n1EEC          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE\n1EEE          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH HORN AND TILDE\n1EF0          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW\n1EF2          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH GRAVE\n1EF4          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH DOT BELOW\n1EF6          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH HOOK ABOVE\n1EF8          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH TILDE\n1EFA          ; Uppercase # L&       LATIN CAPITAL LETTER MIDDLE-WELSH LL\n1EFC          ; Uppercase # L&       LATIN CAPITAL LETTER MIDDLE-WELSH V\n1EFE          ; Uppercase # L&       LATIN CAPITAL LETTER Y WITH LOOP\n1F08..1F0F    ; Uppercase # L&   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI\n1F18..1F1D    ; Uppercase # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F28..1F2F    ; Uppercase # L&   [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI\n1F38..1F3F    ; Uppercase # L&   [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI\n1F48..1F4D    ; Uppercase # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F59          ; Uppercase # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; Uppercase # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; Uppercase # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F          ; Uppercase # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F68..1F6F    ; Uppercase # L&   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI\n1FB8..1FBB    ; Uppercase # L&   [4] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH OXIA\n1FC8..1FCB    ; Uppercase # L&   [4] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH OXIA\n1FD8..1FDB    ; Uppercase # L&   [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE8..1FEC    ; Uppercase # L&   [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FF8..1FFB    ; Uppercase # L&   [4] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH OXIA\n2102          ; Uppercase # L&       DOUBLE-STRUCK CAPITAL C\n2107          ; Uppercase # L&       EULER CONSTANT\n210B..210D    ; Uppercase # L&   [3] SCRIPT CAPITAL H..DOUBLE-STRUCK CAPITAL H\n2110..2112    ; Uppercase # L&   [3] SCRIPT CAPITAL I..SCRIPT CAPITAL L\n2115          ; Uppercase # L&       DOUBLE-STRUCK CAPITAL N\n2119..211D    ; Uppercase # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n2124          ; Uppercase # L&       DOUBLE-STRUCK CAPITAL Z\n2126          ; Uppercase # L&       OHM SIGN\n2128          ; Uppercase # L&       BLACK-LETTER CAPITAL Z\n212A..212D    ; Uppercase # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C\n2130..2133    ; Uppercase # L&   [4] SCRIPT CAPITAL E..SCRIPT CAPITAL M\n213E..213F    ; Uppercase # L&   [2] DOUBLE-STRUCK CAPITAL GAMMA..DOUBLE-STRUCK CAPITAL PI\n2145          ; Uppercase # L&       DOUBLE-STRUCK ITALIC CAPITAL D\n2160..216F    ; Uppercase # Nl  [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND\n2183          ; Uppercase # L&       ROMAN NUMERAL REVERSED ONE HUNDRED\n24B6..24CF    ; Uppercase # So  [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z\n2C00..2C2F    ; Uppercase # L&  [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI\n2C60          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH DOUBLE BAR\n2C62..2C64    ; Uppercase # L&   [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL\n2C67          ; Uppercase # L&       LATIN CAPITAL LETTER H WITH DESCENDER\n2C69          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH DESCENDER\n2C6B          ; Uppercase # L&       LATIN CAPITAL LETTER Z WITH DESCENDER\n2C6D..2C70    ; Uppercase # L&   [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA\n2C72          ; Uppercase # L&       LATIN CAPITAL LETTER W WITH HOOK\n2C75          ; Uppercase # L&       LATIN CAPITAL LETTER HALF H\n2C7E..2C80    ; Uppercase # L&   [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA\n2C82          ; Uppercase # L&       COPTIC CAPITAL LETTER VIDA\n2C84          ; Uppercase # L&       COPTIC CAPITAL LETTER GAMMA\n2C86          ; Uppercase # L&       COPTIC CAPITAL LETTER DALDA\n2C88          ; Uppercase # L&       COPTIC CAPITAL LETTER EIE\n2C8A          ; Uppercase # L&       COPTIC CAPITAL LETTER SOU\n2C8C          ; Uppercase # L&       COPTIC CAPITAL LETTER ZATA\n2C8E          ; Uppercase # L&       COPTIC CAPITAL LETTER HATE\n2C90          ; Uppercase # L&       COPTIC CAPITAL LETTER THETHE\n2C92          ; Uppercase # L&       COPTIC CAPITAL LETTER IAUDA\n2C94          ; Uppercase # L&       COPTIC CAPITAL LETTER KAPA\n2C96          ; Uppercase # L&       COPTIC CAPITAL LETTER LAULA\n2C98          ; Uppercase # L&       COPTIC CAPITAL LETTER MI\n2C9A          ; Uppercase # L&       COPTIC CAPITAL LETTER NI\n2C9C          ; Uppercase # L&       COPTIC CAPITAL LETTER KSI\n2C9E          ; Uppercase # L&       COPTIC CAPITAL LETTER O\n2CA0          ; Uppercase # L&       COPTIC CAPITAL LETTER PI\n2CA2          ; Uppercase # L&       COPTIC CAPITAL LETTER RO\n2CA4          ; Uppercase # L&       COPTIC CAPITAL LETTER SIMA\n2CA6          ; Uppercase # L&       COPTIC CAPITAL LETTER TAU\n2CA8          ; Uppercase # L&       COPTIC CAPITAL LETTER UA\n2CAA          ; Uppercase # L&       COPTIC CAPITAL LETTER FI\n2CAC          ; Uppercase # L&       COPTIC CAPITAL LETTER KHI\n2CAE          ; Uppercase # L&       COPTIC CAPITAL LETTER PSI\n2CB0          ; Uppercase # L&       COPTIC CAPITAL LETTER OOU\n2CB2          ; Uppercase # L&       COPTIC CAPITAL LETTER DIALECT-P ALEF\n2CB4          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC AIN\n2CB6          ; Uppercase # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE\n2CB8          ; Uppercase # L&       COPTIC CAPITAL LETTER DIALECT-P KAPA\n2CBA          ; Uppercase # L&       COPTIC CAPITAL LETTER DIALECT-P NI\n2CBC          ; Uppercase # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI\n2CBE          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC OOU\n2CC0          ; Uppercase # L&       COPTIC CAPITAL LETTER SAMPI\n2CC2          ; Uppercase # L&       COPTIC CAPITAL LETTER CROSSED SHEI\n2CC4          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC SHEI\n2CC6          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC ESH\n2CC8          ; Uppercase # L&       COPTIC CAPITAL LETTER AKHMIMIC KHEI\n2CCA          ; Uppercase # L&       COPTIC CAPITAL LETTER DIALECT-P HORI\n2CCC          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC HORI\n2CCE          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC HA\n2CD0          ; Uppercase # L&       COPTIC CAPITAL LETTER L-SHAPED HA\n2CD2          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC HEI\n2CD4          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC HAT\n2CD6          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC GANGIA\n2CD8          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC DJA\n2CDA          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD COPTIC SHIMA\n2CDC          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD NUBIAN SHIMA\n2CDE          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD NUBIAN NGI\n2CE0          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD NUBIAN NYI\n2CE2          ; Uppercase # L&       COPTIC CAPITAL LETTER OLD NUBIAN WAU\n2CEB          ; Uppercase # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI\n2CED          ; Uppercase # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA\n2CF2          ; Uppercase # L&       COPTIC CAPITAL LETTER BOHAIRIC KHEI\nA640          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ZEMLYA\nA642          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DZELO\nA644          ; Uppercase # L&       CYRILLIC CAPITAL LETTER REVERSED DZE\nA646          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTA\nA648          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DJERV\nA64A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER MONOGRAPH UK\nA64C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BROAD OMEGA\nA64E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER NEUTRAL YER\nA650          ; Uppercase # L&       CYRILLIC CAPITAL LETTER YERU WITH BACK YER\nA652          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTIFIED YAT\nA654          ; Uppercase # L&       CYRILLIC CAPITAL LETTER REVERSED YU\nA656          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTIFIED A\nA658          ; Uppercase # L&       CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS\nA65A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BLENDED YUS\nA65C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS\nA65E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER YN\nA660          ; Uppercase # L&       CYRILLIC CAPITAL LETTER REVERSED TSE\nA662          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SOFT DE\nA664          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SOFT EL\nA666          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SOFT EM\nA668          ; Uppercase # L&       CYRILLIC CAPITAL LETTER MONOCULAR O\nA66A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER BINOCULAR O\nA66C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O\nA680          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DWE\nA682          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DZWE\nA684          ; Uppercase # L&       CYRILLIC CAPITAL LETTER ZHWE\nA686          ; Uppercase # L&       CYRILLIC CAPITAL LETTER CCHE\nA688          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DZZE\nA68A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK\nA68C          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TWE\nA68E          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TSWE\nA690          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TSSE\nA692          ; Uppercase # L&       CYRILLIC CAPITAL LETTER TCHE\nA694          ; Uppercase # L&       CYRILLIC CAPITAL LETTER HWE\nA696          ; Uppercase # L&       CYRILLIC CAPITAL LETTER SHWE\nA698          ; Uppercase # L&       CYRILLIC CAPITAL LETTER DOUBLE O\nA69A          ; Uppercase # L&       CYRILLIC CAPITAL LETTER CROSSED O\nA722          ; Uppercase # L&       LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF\nA724          ; Uppercase # L&       LATIN CAPITAL LETTER EGYPTOLOGICAL AIN\nA726          ; Uppercase # L&       LATIN CAPITAL LETTER HENG\nA728          ; Uppercase # L&       LATIN CAPITAL LETTER TZ\nA72A          ; Uppercase # L&       LATIN CAPITAL LETTER TRESILLO\nA72C          ; Uppercase # L&       LATIN CAPITAL LETTER CUATRILLO\nA72E          ; Uppercase # L&       LATIN CAPITAL LETTER CUATRILLO WITH COMMA\nA732          ; Uppercase # L&       LATIN CAPITAL LETTER AA\nA734          ; Uppercase # L&       LATIN CAPITAL LETTER AO\nA736          ; Uppercase # L&       LATIN CAPITAL LETTER AU\nA738          ; Uppercase # L&       LATIN CAPITAL LETTER AV\nA73A          ; Uppercase # L&       LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR\nA73C          ; Uppercase # L&       LATIN CAPITAL LETTER AY\nA73E          ; Uppercase # L&       LATIN CAPITAL LETTER REVERSED C WITH DOT\nA740          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH STROKE\nA742          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH DIAGONAL STROKE\nA744          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE\nA746          ; Uppercase # L&       LATIN CAPITAL LETTER BROKEN L\nA748          ; Uppercase # L&       LATIN CAPITAL LETTER L WITH HIGH STROKE\nA74A          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY\nA74C          ; Uppercase # L&       LATIN CAPITAL LETTER O WITH LOOP\nA74E          ; Uppercase # L&       LATIN CAPITAL LETTER OO\nA750          ; Uppercase # L&       LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER\nA752          ; Uppercase # L&       LATIN CAPITAL LETTER P WITH FLOURISH\nA754          ; Uppercase # L&       LATIN CAPITAL LETTER P WITH SQUIRREL TAIL\nA756          ; Uppercase # L&       LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER\nA758          ; Uppercase # L&       LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE\nA75A          ; Uppercase # L&       LATIN CAPITAL LETTER R ROTUNDA\nA75C          ; Uppercase # L&       LATIN CAPITAL LETTER RUM ROTUNDA\nA75E          ; Uppercase # L&       LATIN CAPITAL LETTER V WITH DIAGONAL STROKE\nA760          ; Uppercase # L&       LATIN CAPITAL LETTER VY\nA762          ; Uppercase # L&       LATIN CAPITAL LETTER VISIGOTHIC Z\nA764          ; Uppercase # L&       LATIN CAPITAL LETTER THORN WITH STROKE\nA766          ; Uppercase # L&       LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER\nA768          ; Uppercase # L&       LATIN CAPITAL LETTER VEND\nA76A          ; Uppercase # L&       LATIN CAPITAL LETTER ET\nA76C          ; Uppercase # L&       LATIN CAPITAL LETTER IS\nA76E          ; Uppercase # L&       LATIN CAPITAL LETTER CON\nA779          ; Uppercase # L&       LATIN CAPITAL LETTER INSULAR D\nA77B          ; Uppercase # L&       LATIN CAPITAL LETTER INSULAR F\nA77D..A77E    ; Uppercase # L&   [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G\nA780          ; Uppercase # L&       LATIN CAPITAL LETTER TURNED L\nA782          ; Uppercase # L&       LATIN CAPITAL LETTER INSULAR R\nA784          ; Uppercase # L&       LATIN CAPITAL LETTER INSULAR S\nA786          ; Uppercase # L&       LATIN CAPITAL LETTER INSULAR T\nA78B          ; Uppercase # L&       LATIN CAPITAL LETTER SALTILLO\nA78D          ; Uppercase # L&       LATIN CAPITAL LETTER TURNED H\nA790          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH DESCENDER\nA792          ; Uppercase # L&       LATIN CAPITAL LETTER C WITH BAR\nA796          ; Uppercase # L&       LATIN CAPITAL LETTER B WITH FLOURISH\nA798          ; Uppercase # L&       LATIN CAPITAL LETTER F WITH STROKE\nA79A          ; Uppercase # L&       LATIN CAPITAL LETTER VOLAPUK AE\nA79C          ; Uppercase # L&       LATIN CAPITAL LETTER VOLAPUK OE\nA79E          ; Uppercase # L&       LATIN CAPITAL LETTER VOLAPUK UE\nA7A0          ; Uppercase # L&       LATIN CAPITAL LETTER G WITH OBLIQUE STROKE\nA7A2          ; Uppercase # L&       LATIN CAPITAL LETTER K WITH OBLIQUE STROKE\nA7A4          ; Uppercase # L&       LATIN CAPITAL LETTER N WITH OBLIQUE STROKE\nA7A6          ; Uppercase # L&       LATIN CAPITAL LETTER R WITH OBLIQUE STROKE\nA7A8          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH OBLIQUE STROKE\nA7AA..A7AE    ; Uppercase # L&   [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I\nA7B0..A7B4    ; Uppercase # L&   [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA\nA7B6          ; Uppercase # L&       LATIN CAPITAL LETTER OMEGA\nA7B8          ; Uppercase # L&       LATIN CAPITAL LETTER U WITH STROKE\nA7BA          ; Uppercase # L&       LATIN CAPITAL LETTER GLOTTAL A\nA7BC          ; Uppercase # L&       LATIN CAPITAL LETTER GLOTTAL I\nA7BE          ; Uppercase # L&       LATIN CAPITAL LETTER GLOTTAL U\nA7C0          ; Uppercase # L&       LATIN CAPITAL LETTER OLD POLISH O\nA7C2          ; Uppercase # L&       LATIN CAPITAL LETTER ANGLICANA W\nA7C4..A7C7    ; Uppercase # L&   [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY\nA7C9          ; Uppercase # L&       LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY\nA7CB..A7CC    ; Uppercase # L&   [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE\nA7CE          ; Uppercase # L&       LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE\nA7D0          ; Uppercase # L&       LATIN CAPITAL LETTER CLOSED INSULAR G\nA7D2          ; Uppercase # L&       LATIN CAPITAL LETTER DOUBLE THORN\nA7D4          ; Uppercase # L&       LATIN CAPITAL LETTER DOUBLE WYNN\nA7D6          ; Uppercase # L&       LATIN CAPITAL LETTER MIDDLE SCOTS S\nA7D8          ; Uppercase # L&       LATIN CAPITAL LETTER SIGMOID S\nA7DA          ; Uppercase # L&       LATIN CAPITAL LETTER LAMBDA\nA7DC          ; Uppercase # L&       LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F5          ; Uppercase # L&       LATIN CAPITAL LETTER REVERSED HALF H\nFF21..FF3A    ; Uppercase # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\n10400..10427  ; Uppercase # L&  [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW\n104B0..104D3  ; Uppercase # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n10570..1057A  ; Uppercase # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; Uppercase # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; Uppercase # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; Uppercase # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10C80..10CB2  ; Uppercase # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10D50..10D65  ; Uppercase # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n118A0..118BF  ; Uppercase # L&  [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO\n16E40..16E5F  ; Uppercase # L&  [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y\n16EA0..16EB8  ; Uppercase # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n1D400..1D419  ; Uppercase # L&  [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z\n1D434..1D44D  ; Uppercase # L&  [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z\n1D468..1D481  ; Uppercase # L&  [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z\n1D49C         ; Uppercase # L&       MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; Uppercase # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; Uppercase # L&       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; Uppercase # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; Uppercase # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B5  ; Uppercase # L&   [8] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT CAPITAL Z\n1D4D0..1D4E9  ; Uppercase # L&  [26] MATHEMATICAL BOLD SCRIPT CAPITAL A..MATHEMATICAL BOLD SCRIPT CAPITAL Z\n1D504..1D505  ; Uppercase # L&   [2] MATHEMATICAL FRAKTUR CAPITAL A..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; Uppercase # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; Uppercase # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; Uppercase # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D538..1D539  ; Uppercase # L&   [2] MATHEMATICAL DOUBLE-STRUCK CAPITAL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; Uppercase # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; Uppercase # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; Uppercase # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; Uppercase # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D56C..1D585  ; Uppercase # L&  [26] MATHEMATICAL BOLD FRAKTUR CAPITAL A..MATHEMATICAL BOLD FRAKTUR CAPITAL Z\n1D5A0..1D5B9  ; Uppercase # L&  [26] MATHEMATICAL SANS-SERIF CAPITAL A..MATHEMATICAL SANS-SERIF CAPITAL Z\n1D5D4..1D5ED  ; Uppercase # L&  [26] MATHEMATICAL SANS-SERIF BOLD CAPITAL A..MATHEMATICAL SANS-SERIF BOLD CAPITAL Z\n1D608..1D621  ; Uppercase # L&  [26] MATHEMATICAL SANS-SERIF ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z\n1D63C..1D655  ; Uppercase # L&  [26] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z\n1D670..1D689  ; Uppercase # L&  [26] MATHEMATICAL MONOSPACE CAPITAL A..MATHEMATICAL MONOSPACE CAPITAL Z\n1D6A8..1D6C0  ; Uppercase # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6E2..1D6FA  ; Uppercase # L&  [25] MATHEMATICAL ITALIC CAPITAL ALPHA..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D71C..1D734  ; Uppercase # L&  [25] MATHEMATICAL BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D756..1D76E  ; Uppercase # L&  [25] MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D790..1D7A8  ; Uppercase # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7CA         ; Uppercase # L&       MATHEMATICAL BOLD CAPITAL DIGAMMA\n1E900..1E921  ; Uppercase # L&  [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA\n1F130..1F149  ; Uppercase # So  [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z\n1F150..1F169  ; Uppercase # So  [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z\n1F170..1F189  ; Uppercase # So  [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z\n\n# Total code points: 2006\n\n# ================================================\n\n# Derived Property:   Cased (Cased)\n#  As defined by Unicode Standard Definition D135\n#  C has the Lowercase or Uppercase property or has a General_Category value of Titlecase_Letter.\n\n0041..005A    ; Cased # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n0061..007A    ; Cased # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00AA          ; Cased # Lo       FEMININE ORDINAL INDICATOR\n00B5          ; Cased # L&       MICRO SIGN\n00BA          ; Cased # Lo       MASCULINE ORDINAL INDICATOR\n00C0..00D6    ; Cased # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00F6    ; Cased # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..01BA    ; Cased # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL\n01BC..01BF    ; Cased # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN\n01C4..0293    ; Cased # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL\n0296..02AF    ; Cased # L&  [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL\n02B0..02B8    ; Cased # Lm   [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y\n02C0..02C1    ; Cased # Lm   [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP\n02E0..02E4    ; Cased # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n0345          ; Cased # Mn       COMBINING GREEK YPOGEGRAMMENI\n0370..0373    ; Cased # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI\n0376..0377    ; Cased # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037A          ; Cased # Lm       GREEK YPOGEGRAMMENI\n037B..037D    ; Cased # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n037F          ; Cased # L&       GREEK CAPITAL LETTER YOT\n0386          ; Cased # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0388..038A    ; Cased # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; Cased # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..03A1    ; Cased # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO\n03A3..03F5    ; Cased # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL\n03F7..0481    ; Cased # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA\n048A..052F    ; Cased # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER\n0531..0556    ; Cased # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n0560..0588    ; Cased # L&  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE\n10A0..10C5    ; Cased # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; Cased # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; Cased # L&       GEORGIAN CAPITAL LETTER AEN\n10D0..10FA    ; Cased # L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FC          ; Cased # Lm       MODIFIER LETTER GEORGIAN NAR\n10FD..10FF    ; Cased # L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n13A0..13F5    ; Cased # L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n13F8..13FD    ; Cased # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1C80..1C8A    ; Cased # L&  [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE\n1C90..1CBA    ; Cased # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; Cased # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1D00..1D2B    ; Cased # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL\n1D2C..1D6A    ; Cased # Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D6B..1D77    ; Cased # L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G\n1D78          ; Cased # Lm       MODIFIER LETTER CYRILLIC EN\n1D79..1D9A    ; Cased # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK\n1D9B..1DBF    ; Cased # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA\n1E00..1F15    ; Cased # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F18..1F1D    ; Cased # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F45    ; Cased # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F48..1F4D    ; Cased # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; Cased # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F59          ; Cased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; Cased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; Cased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F..1F7D    ; Cased # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1FB4    ; Cased # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FBC    ; Cased # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBE          ; Cased # L&       GREEK PROSGEGRAMMENI\n1FC2..1FC4    ; Cased # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FCC    ; Cased # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FD0..1FD3    ; Cased # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FDB    ; Cased # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE0..1FEC    ; Cased # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FF2..1FF4    ; Cased # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FFC    ; Cased # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n2071          ; Cased # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n207F          ; Cased # Lm       SUPERSCRIPT LATIN SMALL LETTER N\n2090..209C    ; Cased # Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n2102          ; Cased # L&       DOUBLE-STRUCK CAPITAL C\n2107          ; Cased # L&       EULER CONSTANT\n210A..2113    ; Cased # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L\n2115          ; Cased # L&       DOUBLE-STRUCK CAPITAL N\n2119..211D    ; Cased # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n2124          ; Cased # L&       DOUBLE-STRUCK CAPITAL Z\n2126          ; Cased # L&       OHM SIGN\n2128          ; Cased # L&       BLACK-LETTER CAPITAL Z\n212A..212D    ; Cased # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C\n212F..2134    ; Cased # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O\n2139          ; Cased # L&       INFORMATION SOURCE\n213C..213F    ; Cased # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI\n2145..2149    ; Cased # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J\n214E          ; Cased # L&       TURNED SMALL F\n2160..217F    ; Cased # Nl  [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND\n2183..2184    ; Cased # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C\n24B6..24E9    ; Cased # So  [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z\n2C00..2C7B    ; Cased # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E\n2C7C..2C7D    ; Cased # Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\n2C7E..2CE4    ; Cased # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI\n2CEB..2CEE    ; Cased # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CF2..2CF3    ; Cased # L&   [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI\n2D00..2D25    ; Cased # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; Cased # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; Cased # L&       GEORGIAN SMALL LETTER AEN\nA640..A66D    ; Cased # L&  [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA680..A69B    ; Cased # L&  [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O\nA69C..A69D    ; Cased # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA722..A76F    ; Cased # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON\nA770          ; Cased # Lm       MODIFIER LETTER US\nA771..A787    ; Cased # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T\nA78B..A78E    ; Cased # L&   [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT\nA790..A7DC    ; Cased # L&  [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F1..A7F4    ; Cased # Lm   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F5..A7F6    ; Cased # L&   [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H\nA7F8..A7F9    ; Cased # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA7FA          ; Cased # L&       LATIN LETTER SMALL CAPITAL TURNED M\nAB30..AB5A    ; Cased # L&  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG\nAB5C..AB5F    ; Cased # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB60..AB68    ; Cased # L&   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE\nAB69          ; Cased # Lm       MODIFIER LETTER SMALL TURNED W\nAB70..ABBF    ; Cased # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nFB00..FB06    ; Cased # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; Cased # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFF21..FF3A    ; Cased # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\nFF41..FF5A    ; Cased # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\n10400..1044F  ; Cased # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW\n104B0..104D3  ; Cased # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n104D8..104FB  ; Cased # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10570..1057A  ; Cased # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; Cased # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; Cased # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; Cased # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10597..105A1  ; Cased # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; Cased # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; Cased # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; Cased # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n10780         ; Cased # Lm       MODIFIER LETTER SMALL CAPITAL AA\n10783..10785  ; Cased # Lm   [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; Cased # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; Cased # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n10C80..10CB2  ; Cased # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10CC0..10CF2  ; Cased # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10D50..10D65  ; Cased # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n10D70..10D85  ; Cased # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n118A0..118DF  ; Cased # L&  [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n16E40..16E7F  ; Cased # L&  [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16EA0..16EB8  ; Cased # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n16EBB..16ED3  ; Cased # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n1D400..1D454  ; Cased # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D49C  ; Cased # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; Cased # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; Cased # L&       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; Cased # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; Cased # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B9  ; Cased # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; Cased # L&       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; Cased # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D505  ; Cased # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; Cased # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; Cased # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; Cased # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D51E..1D539  ; Cased # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; Cased # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; Cased # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; Cased # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; Cased # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D552..1D6A5  ; Cased # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6A8..1D6C0  ; Cased # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6C2..1D6DA  ; Cased # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DC..1D6FA  ; Cased # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D6FC..1D714  ; Cased # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D716..1D734  ; Cased # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D736..1D74E  ; Cased # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D750..1D76E  ; Cased # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D770..1D788  ; Cased # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D78A..1D7A8  ; Cased # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7AA..1D7C2  ; Cased # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C4..1D7CB  ; Cased # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA\n1DF00..1DF09  ; Cased # L&  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK\n1DF0B..1DF1E  ; Cased # L&  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL\n1DF25..1DF2A  ; Cased # L&   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK\n1E030..1E06D  ; Cased # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E900..1E943  ; Cased # L&  [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA\n1F130..1F149  ; Cased # So  [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z\n1F150..1F169  ; Cased # So  [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z\n1F170..1F189  ; Cased # So  [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z\n\n# Total code points: 4632\n\n# ================================================\n\n# Derived Property:   Case_Ignorable (CI)\n#  As defined by Unicode Standard Definition D136\n#  C is defined to be case-ignorable if\n#    Word_Break(C) = MidLetter or MidNumLet or Single_Quote, or\n#    General_Category(C) = Nonspacing_Mark (Mn), Enclosing_Mark (Me), Format (Cf), Modifier_Letter (Lm), or Modifier_Symbol (Sk).\n\n0027          ; Case_Ignorable # Po       APOSTROPHE\n002E          ; Case_Ignorable # Po       FULL STOP\n003A          ; Case_Ignorable # Po       COLON\n005E          ; Case_Ignorable # Sk       CIRCUMFLEX ACCENT\n0060          ; Case_Ignorable # Sk       GRAVE ACCENT\n00A8          ; Case_Ignorable # Sk       DIAERESIS\n00AD          ; Case_Ignorable # Cf       SOFT HYPHEN\n00AF          ; Case_Ignorable # Sk       MACRON\n00B4          ; Case_Ignorable # Sk       ACUTE ACCENT\n00B7          ; Case_Ignorable # Po       MIDDLE DOT\n00B8          ; Case_Ignorable # Sk       CEDILLA\n02B0..02C1    ; Case_Ignorable # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP\n02C2..02C5    ; Case_Ignorable # Sk   [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD\n02C6..02D1    ; Case_Ignorable # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON\n02D2..02DF    ; Case_Ignorable # Sk  [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT\n02E0..02E4    ; Case_Ignorable # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n02E5..02EB    ; Case_Ignorable # Sk   [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK\n02EC          ; Case_Ignorable # Lm       MODIFIER LETTER VOICING\n02ED          ; Case_Ignorable # Sk       MODIFIER LETTER UNASPIRATED\n02EE          ; Case_Ignorable # Lm       MODIFIER LETTER DOUBLE APOSTROPHE\n02EF..02FF    ; Case_Ignorable # Sk  [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW\n0300..036F    ; Case_Ignorable # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\n0374          ; Case_Ignorable # Lm       GREEK NUMERAL SIGN\n0375          ; Case_Ignorable # Sk       GREEK LOWER NUMERAL SIGN\n037A          ; Case_Ignorable # Lm       GREEK YPOGEGRAMMENI\n0384..0385    ; Case_Ignorable # Sk   [2] GREEK TONOS..GREEK DIALYTIKA TONOS\n0387          ; Case_Ignorable # Po       GREEK ANO TELEIA\n0483..0487    ; Case_Ignorable # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\n0488..0489    ; Case_Ignorable # Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN\n0559          ; Case_Ignorable # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING\n055F          ; Case_Ignorable # Po       ARMENIAN ABBREVIATION MARK\n0591..05BD    ; Case_Ignorable # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\n05BF          ; Case_Ignorable # Mn       HEBREW POINT RAFE\n05C1..05C2    ; Case_Ignorable # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n05C4..05C5    ; Case_Ignorable # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n05C7          ; Case_Ignorable # Mn       HEBREW POINT QAMATS QATAN\n05F4          ; Case_Ignorable # Po       HEBREW PUNCTUATION GERSHAYIM\n0600..0605    ; Case_Ignorable # Cf   [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE\n0610..061A    ; Case_Ignorable # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n061C          ; Case_Ignorable # Cf       ARABIC LETTER MARK\n0640          ; Case_Ignorable # Lm       ARABIC TATWEEL\n064B..065F    ; Case_Ignorable # Mn  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW\n0670          ; Case_Ignorable # Mn       ARABIC LETTER SUPERSCRIPT ALEF\n06D6..06DC    ; Case_Ignorable # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n06DD          ; Case_Ignorable # Cf       ARABIC END OF AYAH\n06DF..06E4    ; Case_Ignorable # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\n06E5..06E6    ; Case_Ignorable # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH\n06E7..06E8    ; Case_Ignorable # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n06EA..06ED    ; Case_Ignorable # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\n070F          ; Case_Ignorable # Cf       SYRIAC ABBREVIATION MARK\n0711          ; Case_Ignorable # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH\n0730..074A    ; Case_Ignorable # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\n07A6..07B0    ; Case_Ignorable # Mn  [11] THAANA ABAFILI..THAANA SUKUN\n07EB..07F3    ; Case_Ignorable # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\n07F4..07F5    ; Case_Ignorable # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE\n07FA          ; Case_Ignorable # Lm       NKO LAJANYALAN\n07FD          ; Case_Ignorable # Mn       NKO DANTAYALAN\n0816..0819    ; Case_Ignorable # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\n081A          ; Case_Ignorable # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT\n081B..0823    ; Case_Ignorable # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n0824          ; Case_Ignorable # Lm       SAMARITAN MODIFIER LETTER SHORT A\n0825..0827    ; Case_Ignorable # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n0828          ; Case_Ignorable # Lm       SAMARITAN MODIFIER LETTER I\n0829..082D    ; Case_Ignorable # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\n0859..085B    ; Case_Ignorable # Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\n0888          ; Case_Ignorable # Sk       ARABIC RAISED ROUND DOT\n0890..0891    ; Case_Ignorable # Cf   [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE\n0897..089F    ; Case_Ignorable # Mn   [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA\n08C9          ; Case_Ignorable # Lm       ARABIC SMALL FARSI YEH\n08CA..08E1    ; Case_Ignorable # Mn  [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA\n08E2          ; Case_Ignorable # Cf       ARABIC DISPUTED END OF AYAH\n08E3..0902    ; Case_Ignorable # Mn  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA\n093A          ; Case_Ignorable # Mn       DEVANAGARI VOWEL SIGN OE\n093C          ; Case_Ignorable # Mn       DEVANAGARI SIGN NUKTA\n0941..0948    ; Case_Ignorable # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n094D          ; Case_Ignorable # Mn       DEVANAGARI SIGN VIRAMA\n0951..0957    ; Case_Ignorable # Mn   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE\n0962..0963    ; Case_Ignorable # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n0971          ; Case_Ignorable # Lm       DEVANAGARI SIGN HIGH SPACING DOT\n0981          ; Case_Ignorable # Mn       BENGALI SIGN CANDRABINDU\n09BC          ; Case_Ignorable # Mn       BENGALI SIGN NUKTA\n09C1..09C4    ; Case_Ignorable # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n09CD          ; Case_Ignorable # Mn       BENGALI SIGN VIRAMA\n09E2..09E3    ; Case_Ignorable # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n09FE          ; Case_Ignorable # Mn       BENGALI SANDHI MARK\n0A01..0A02    ; Case_Ignorable # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n0A3C          ; Case_Ignorable # Mn       GURMUKHI SIGN NUKTA\n0A41..0A42    ; Case_Ignorable # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n0A47..0A48    ; Case_Ignorable # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n0A4B..0A4D    ; Case_Ignorable # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\n0A51          ; Case_Ignorable # Mn       GURMUKHI SIGN UDAAT\n0A70..0A71    ; Case_Ignorable # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n0A75          ; Case_Ignorable # Mn       GURMUKHI SIGN YAKASH\n0A81..0A82    ; Case_Ignorable # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n0ABC          ; Case_Ignorable # Mn       GUJARATI SIGN NUKTA\n0AC1..0AC5    ; Case_Ignorable # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n0AC7..0AC8    ; Case_Ignorable # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n0ACD          ; Case_Ignorable # Mn       GUJARATI SIGN VIRAMA\n0AE2..0AE3    ; Case_Ignorable # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n0AFA..0AFF    ; Case_Ignorable # Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\n0B01          ; Case_Ignorable # Mn       ORIYA SIGN CANDRABINDU\n0B3C          ; Case_Ignorable # Mn       ORIYA SIGN NUKTA\n0B3F          ; Case_Ignorable # Mn       ORIYA VOWEL SIGN I\n0B41..0B44    ; Case_Ignorable # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n0B4D          ; Case_Ignorable # Mn       ORIYA SIGN VIRAMA\n0B55..0B56    ; Case_Ignorable # Mn   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK\n0B62..0B63    ; Case_Ignorable # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n0B82          ; Case_Ignorable # Mn       TAMIL SIGN ANUSVARA\n0BC0          ; Case_Ignorable # Mn       TAMIL VOWEL SIGN II\n0BCD          ; Case_Ignorable # Mn       TAMIL SIGN VIRAMA\n0C00          ; Case_Ignorable # Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE\n0C04          ; Case_Ignorable # Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE\n0C3C          ; Case_Ignorable # Mn       TELUGU SIGN NUKTA\n0C3E..0C40    ; Case_Ignorable # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n0C46..0C48    ; Case_Ignorable # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n0C4A..0C4D    ; Case_Ignorable # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA\n0C55..0C56    ; Case_Ignorable # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n0C62..0C63    ; Case_Ignorable # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n0C81          ; Case_Ignorable # Mn       KANNADA SIGN CANDRABINDU\n0CBC          ; Case_Ignorable # Mn       KANNADA SIGN NUKTA\n0CBF          ; Case_Ignorable # Mn       KANNADA VOWEL SIGN I\n0CC6          ; Case_Ignorable # Mn       KANNADA VOWEL SIGN E\n0CCC..0CCD    ; Case_Ignorable # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\n0CE2..0CE3    ; Case_Ignorable # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n0D00..0D01    ; Case_Ignorable # Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n0D3B..0D3C    ; Case_Ignorable # Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n0D41..0D44    ; Case_Ignorable # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n0D4D          ; Case_Ignorable # Mn       MALAYALAM SIGN VIRAMA\n0D62..0D63    ; Case_Ignorable # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n0D81          ; Case_Ignorable # Mn       SINHALA SIGN CANDRABINDU\n0DCA          ; Case_Ignorable # Mn       SINHALA SIGN AL-LAKUNA\n0DD2..0DD4    ; Case_Ignorable # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n0DD6          ; Case_Ignorable # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA\n0E31          ; Case_Ignorable # Mn       THAI CHARACTER MAI HAN-AKAT\n0E34..0E3A    ; Case_Ignorable # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n0E46          ; Case_Ignorable # Lm       THAI CHARACTER MAIYAMOK\n0E47..0E4E    ; Case_Ignorable # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\n0EB1          ; Case_Ignorable # Mn       LAO VOWEL SIGN MAI KAN\n0EB4..0EBC    ; Case_Ignorable # Mn   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO\n0EC6          ; Case_Ignorable # Lm       LAO KO LA\n0EC8..0ECE    ; Case_Ignorable # Mn   [7] LAO TONE MAI EK..LAO YAMAKKAN\n0F18..0F19    ; Case_Ignorable # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\n0F35          ; Case_Ignorable # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA\n0F37          ; Case_Ignorable # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS\n0F39          ; Case_Ignorable # Mn       TIBETAN MARK TSA -PHRU\n0F71..0F7E    ; Case_Ignorable # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n0F80..0F84    ; Case_Ignorable # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\n0F86..0F87    ; Case_Ignorable # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\n0F8D..0F97    ; Case_Ignorable # Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n0F99..0FBC    ; Case_Ignorable # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n0FC6          ; Case_Ignorable # Mn       TIBETAN SYMBOL PADMA GDAN\n102D..1030    ; Case_Ignorable # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n1032..1037    ; Case_Ignorable # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\n1039..103A    ; Case_Ignorable # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\n103D..103E    ; Case_Ignorable # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n1058..1059    ; Case_Ignorable # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n105E..1060    ; Case_Ignorable # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n1071..1074    ; Case_Ignorable # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n1082          ; Case_Ignorable # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n1085..1086    ; Case_Ignorable # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n108D          ; Case_Ignorable # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n109D          ; Case_Ignorable # Mn       MYANMAR VOWEL SIGN AITON AI\n10FC          ; Case_Ignorable # Lm       MODIFIER LETTER GEORGIAN NAR\n135D..135F    ; Case_Ignorable # Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\n1712..1714    ; Case_Ignorable # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\n1732..1733    ; Case_Ignorable # Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U\n1752..1753    ; Case_Ignorable # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n1772..1773    ; Case_Ignorable # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n17B4..17B5    ; Case_Ignorable # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n17B7..17BD    ; Case_Ignorable # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n17C6          ; Case_Ignorable # Mn       KHMER SIGN NIKAHIT\n17C9..17D3    ; Case_Ignorable # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\n17D7          ; Case_Ignorable # Lm       KHMER SIGN LEK TOO\n17DD          ; Case_Ignorable # Mn       KHMER SIGN ATTHACAN\n180B..180D    ; Case_Ignorable # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n180E          ; Case_Ignorable # Cf       MONGOLIAN VOWEL SEPARATOR\n180F          ; Case_Ignorable # Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR\n1843          ; Case_Ignorable # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN\n1885..1886    ; Case_Ignorable # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n18A9          ; Case_Ignorable # Mn       MONGOLIAN LETTER ALI GALI DAGALGA\n1920..1922    ; Case_Ignorable # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n1927..1928    ; Case_Ignorable # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n1932          ; Case_Ignorable # Mn       LIMBU SMALL LETTER ANUSVARA\n1939..193B    ; Case_Ignorable # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\n1A17..1A18    ; Case_Ignorable # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n1A1B          ; Case_Ignorable # Mn       BUGINESE VOWEL SIGN AE\n1A56          ; Case_Ignorable # Mn       TAI THAM CONSONANT SIGN MEDIAL LA\n1A58..1A5E    ; Case_Ignorable # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n1A60          ; Case_Ignorable # Mn       TAI THAM SIGN SAKOT\n1A62          ; Case_Ignorable # Mn       TAI THAM VOWEL SIGN MAI SAT\n1A65..1A6C    ; Case_Ignorable # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n1A73..1A7C    ; Case_Ignorable # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\n1A7F          ; Case_Ignorable # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT\n1AA7          ; Case_Ignorable # Lm       TAI THAM SIGN MAI YAMOK\n1AB0..1ABD    ; Case_Ignorable # Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\n1ABE          ; Case_Ignorable # Me       COMBINING PARENTHESES OVERLAY\n1ABF..1ADD    ; Case_Ignorable # Mn  [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW\n1AE0..1AEB    ; Case_Ignorable # Mn  [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE\n1B00..1B03    ; Case_Ignorable # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n1B34          ; Case_Ignorable # Mn       BALINESE SIGN REREKAN\n1B36..1B3A    ; Case_Ignorable # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n1B3C          ; Case_Ignorable # Mn       BALINESE VOWEL SIGN LA LENGA\n1B42          ; Case_Ignorable # Mn       BALINESE VOWEL SIGN PEPET\n1B6B..1B73    ; Case_Ignorable # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\n1B80..1B81    ; Case_Ignorable # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n1BA2..1BA5    ; Case_Ignorable # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n1BA8..1BA9    ; Case_Ignorable # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n1BAB..1BAD    ; Case_Ignorable # Mn   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA\n1BE6          ; Case_Ignorable # Mn       BATAK SIGN TOMPI\n1BE8..1BE9    ; Case_Ignorable # Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n1BED          ; Case_Ignorable # Mn       BATAK VOWEL SIGN KARO O\n1BEF..1BF1    ; Case_Ignorable # Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n1C2C..1C33    ; Case_Ignorable # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n1C36..1C37    ; Case_Ignorable # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\n1C78..1C7D    ; Case_Ignorable # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD\n1CD0..1CD2    ; Case_Ignorable # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\n1CD4..1CE0    ; Case_Ignorable # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n1CE2..1CE8    ; Case_Ignorable # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n1CED          ; Case_Ignorable # Mn       VEDIC SIGN TIRYAK\n1CF4          ; Case_Ignorable # Mn       VEDIC TONE CANDRA ABOVE\n1CF8..1CF9    ; Case_Ignorable # Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n1D2C..1D6A    ; Case_Ignorable # Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D78          ; Case_Ignorable # Lm       MODIFIER LETTER CYRILLIC EN\n1D9B..1DBF    ; Case_Ignorable # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA\n1DC0..1DFF    ; Case_Ignorable # Mn  [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\n1FBD          ; Case_Ignorable # Sk       GREEK KORONIS\n1FBF..1FC1    ; Case_Ignorable # Sk   [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI\n1FCD..1FCF    ; Case_Ignorable # Sk   [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI\n1FDD..1FDF    ; Case_Ignorable # Sk   [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI\n1FED..1FEF    ; Case_Ignorable # Sk   [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA\n1FFD..1FFE    ; Case_Ignorable # Sk   [2] GREEK OXIA..GREEK DASIA\n200B..200F    ; Case_Ignorable # Cf   [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK\n2018          ; Case_Ignorable # Pi       LEFT SINGLE QUOTATION MARK\n2019          ; Case_Ignorable # Pf       RIGHT SINGLE QUOTATION MARK\n2024          ; Case_Ignorable # Po       ONE DOT LEADER\n2027          ; Case_Ignorable # Po       HYPHENATION POINT\n202A..202E    ; Case_Ignorable # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE\n2060..2064    ; Case_Ignorable # Cf   [5] WORD JOINER..INVISIBLE PLUS\n2066..206F    ; Case_Ignorable # Cf  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES\n2071          ; Case_Ignorable # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n207F          ; Case_Ignorable # Lm       SUPERSCRIPT LATIN SMALL LETTER N\n2090..209C    ; Case_Ignorable # Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n20D0..20DC    ; Case_Ignorable # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n20DD..20E0    ; Case_Ignorable # Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH\n20E1          ; Case_Ignorable # Mn       COMBINING LEFT RIGHT ARROW ABOVE\n20E2..20E4    ; Case_Ignorable # Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE\n20E5..20F0    ; Case_Ignorable # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\n2C7C..2C7D    ; Case_Ignorable # Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\n2CEF..2CF1    ; Case_Ignorable # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\n2D6F          ; Case_Ignorable # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK\n2D7F          ; Case_Ignorable # Mn       TIFINAGH CONSONANT JOINER\n2DE0..2DFF    ; Case_Ignorable # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\n2E2F          ; Case_Ignorable # Lm       VERTICAL TILDE\n3005          ; Case_Ignorable # Lm       IDEOGRAPHIC ITERATION MARK\n302A..302D    ; Case_Ignorable # Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n3031..3035    ; Case_Ignorable # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF\n303B          ; Case_Ignorable # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK\n3099..309A    ; Case_Ignorable # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n309B..309C    ; Case_Ignorable # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n309D..309E    ; Case_Ignorable # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK\n30FC..30FE    ; Case_Ignorable # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK\nA015          ; Case_Ignorable # Lm       YI SYLLABLE WU\nA4F8..A4FD    ; Case_Ignorable # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU\nA60C          ; Case_Ignorable # Lm       VAI SYLLABLE LENGTHENER\nA66F          ; Case_Ignorable # Mn       COMBINING CYRILLIC VZMET\nA670..A672    ; Case_Ignorable # Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN\nA674..A67D    ; Case_Ignorable # Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\nA67F          ; Case_Ignorable # Lm       CYRILLIC PAYEROK\nA69C..A69D    ; Case_Ignorable # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA69E..A69F    ; Case_Ignorable # Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\nA6F0..A6F1    ; Case_Ignorable # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\nA700..A716    ; Case_Ignorable # Sk  [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR\nA717..A71F    ; Case_Ignorable # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK\nA720..A721    ; Case_Ignorable # Sk   [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE\nA770          ; Case_Ignorable # Lm       MODIFIER LETTER US\nA788          ; Case_Ignorable # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT\nA789..A78A    ; Case_Ignorable # Sk   [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN\nA7F1..A7F4    ; Case_Ignorable # Lm   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F8..A7F9    ; Case_Ignorable # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA802          ; Case_Ignorable # Mn       SYLOTI NAGRI SIGN DVISVARA\nA806          ; Case_Ignorable # Mn       SYLOTI NAGRI SIGN HASANTA\nA80B          ; Case_Ignorable # Mn       SYLOTI NAGRI SIGN ANUSVARA\nA825..A826    ; Case_Ignorable # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\nA82C          ; Case_Ignorable # Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA\nA8C4..A8C5    ; Case_Ignorable # Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\nA8E0..A8F1    ; Case_Ignorable # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\nA8FF          ; Case_Ignorable # Mn       DEVANAGARI VOWEL SIGN AY\nA926..A92D    ; Case_Ignorable # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\nA947..A951    ; Case_Ignorable # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\nA980..A982    ; Case_Ignorable # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\nA9B3          ; Case_Ignorable # Mn       JAVANESE SIGN CECAK TELU\nA9B6..A9B9    ; Case_Ignorable # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\nA9BC..A9BD    ; Case_Ignorable # Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET\nA9CF          ; Case_Ignorable # Lm       JAVANESE PANGRANGKEP\nA9E5          ; Case_Ignorable # Mn       MYANMAR SIGN SHAN SAW\nA9E6          ; Case_Ignorable # Lm       MYANMAR MODIFIER LETTER SHAN REDUPLICATION\nAA29..AA2E    ; Case_Ignorable # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\nAA31..AA32    ; Case_Ignorable # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\nAA35..AA36    ; Case_Ignorable # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\nAA43          ; Case_Ignorable # Mn       CHAM CONSONANT SIGN FINAL NG\nAA4C          ; Case_Ignorable # Mn       CHAM CONSONANT SIGN FINAL M\nAA70          ; Case_Ignorable # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION\nAA7C          ; Case_Ignorable # Mn       MYANMAR SIGN TAI LAING TONE-2\nAAB0          ; Case_Ignorable # Mn       TAI VIET MAI KANG\nAAB2..AAB4    ; Case_Ignorable # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\nAAB7..AAB8    ; Case_Ignorable # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\nAABE..AABF    ; Case_Ignorable # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\nAAC1          ; Case_Ignorable # Mn       TAI VIET TONE MAI THO\nAADD          ; Case_Ignorable # Lm       TAI VIET SYMBOL SAM\nAAEC..AAED    ; Case_Ignorable # Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\nAAF3..AAF4    ; Case_Ignorable # Lm   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK\nAAF6          ; Case_Ignorable # Mn       MEETEI MAYEK VIRAMA\nAB5B          ; Case_Ignorable # Sk       MODIFIER BREVE WITH INVERTED BREVE\nAB5C..AB5F    ; Case_Ignorable # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB69          ; Case_Ignorable # Lm       MODIFIER LETTER SMALL TURNED W\nAB6A..AB6B    ; Case_Ignorable # Sk   [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK\nABE5          ; Case_Ignorable # Mn       MEETEI MAYEK VOWEL SIGN ANAP\nABE8          ; Case_Ignorable # Mn       MEETEI MAYEK VOWEL SIGN UNAP\nABED          ; Case_Ignorable # Mn       MEETEI MAYEK APUN IYEK\nFB1E          ; Case_Ignorable # Mn       HEBREW POINT JUDEO-SPANISH VARIKA\nFBB2..FBC2    ; Case_Ignorable # Sk  [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE\nFE00..FE0F    ; Case_Ignorable # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\nFE13          ; Case_Ignorable # Po       PRESENTATION FORM FOR VERTICAL COLON\nFE20..FE2F    ; Case_Ignorable # Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\nFE52          ; Case_Ignorable # Po       SMALL FULL STOP\nFE55          ; Case_Ignorable # Po       SMALL COLON\nFEFF          ; Case_Ignorable # Cf       ZERO WIDTH NO-BREAK SPACE\nFF07          ; Case_Ignorable # Po       FULLWIDTH APOSTROPHE\nFF0E          ; Case_Ignorable # Po       FULLWIDTH FULL STOP\nFF1A          ; Case_Ignorable # Po       FULLWIDTH COLON\nFF3E          ; Case_Ignorable # Sk       FULLWIDTH CIRCUMFLEX ACCENT\nFF40          ; Case_Ignorable # Sk       FULLWIDTH GRAVE ACCENT\nFF70          ; Case_Ignorable # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF9E..FF9F    ; Case_Ignorable # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\nFFE3          ; Case_Ignorable # Sk       FULLWIDTH MACRON\nFFF9..FFFB    ; Case_Ignorable # Cf   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR\n101FD         ; Case_Ignorable # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\n102E0         ; Case_Ignorable # Mn       COPTIC EPACT THOUSANDS MARK\n10376..1037A  ; Case_Ignorable # Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n10780..10785  ; Case_Ignorable # Lm   [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; Case_Ignorable # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; Case_Ignorable # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n10A01..10A03  ; Case_Ignorable # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n10A05..10A06  ; Case_Ignorable # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n10A0C..10A0F  ; Case_Ignorable # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n10A38..10A3A  ; Case_Ignorable # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\n10A3F         ; Case_Ignorable # Mn       KHAROSHTHI VIRAMA\n10AE5..10AE6  ; Case_Ignorable # Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\n10D24..10D27  ; Case_Ignorable # Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n10D4E         ; Case_Ignorable # Lm       GARAY VOWEL LENGTH MARK\n10D69..10D6D  ; Case_Ignorable # Mn   [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK\n10D6F         ; Case_Ignorable # Lm       GARAY REDUPLICATION MARK\n10EAB..10EAC  ; Case_Ignorable # Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK\n10EC5         ; Case_Ignorable # Lm       ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW\n10EFA..10EFF  ; Case_Ignorable # Mn   [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA\n10F46..10F50  ; Case_Ignorable # Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW\n10F82..10F85  ; Case_Ignorable # Mn   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW\n11001         ; Case_Ignorable # Mn       BRAHMI SIGN ANUSVARA\n11038..11046  ; Case_Ignorable # Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\n11070         ; Case_Ignorable # Mn       BRAHMI SIGN OLD TAMIL VIRAMA\n11073..11074  ; Case_Ignorable # Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O\n1107F..11081  ; Case_Ignorable # Mn   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA\n110B3..110B6  ; Case_Ignorable # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n110B9..110BA  ; Case_Ignorable # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\n110BD         ; Case_Ignorable # Cf       KAITHI NUMBER SIGN\n110C2         ; Case_Ignorable # Mn       KAITHI VOWEL SIGN VOCALIC R\n110CD         ; Case_Ignorable # Cf       KAITHI NUMBER SIGN ABOVE\n11100..11102  ; Case_Ignorable # Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n11127..1112B  ; Case_Ignorable # Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n1112D..11134  ; Case_Ignorable # Mn   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA\n11173         ; Case_Ignorable # Mn       MAHAJANI SIGN NUKTA\n11180..11181  ; Case_Ignorable # Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n111B6..111BE  ; Case_Ignorable # Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n111C9..111CC  ; Case_Ignorable # Mn   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK\n111CF         ; Case_Ignorable # Mn       SHARADA SIGN INVERTED CANDRABINDU\n1122F..11231  ; Case_Ignorable # Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n11234         ; Case_Ignorable # Mn       KHOJKI SIGN ANUSVARA\n11236..11237  ; Case_Ignorable # Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\n1123E         ; Case_Ignorable # Mn       KHOJKI SIGN SUKUN\n11241         ; Case_Ignorable # Mn       KHOJKI VOWEL SIGN VOCALIC R\n112DF         ; Case_Ignorable # Mn       KHUDAWADI SIGN ANUSVARA\n112E3..112EA  ; Case_Ignorable # Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\n11300..11301  ; Case_Ignorable # Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n1133B..1133C  ; Case_Ignorable # Mn   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA\n11340         ; Case_Ignorable # Mn       GRANTHA VOWEL SIGN II\n11366..1136C  ; Case_Ignorable # Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\n11370..11374  ; Case_Ignorable # Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\n113BB..113C0  ; Case_Ignorable # Mn   [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL\n113CE         ; Case_Ignorable # Mn       TULU-TIGALARI SIGN VIRAMA\n113D0         ; Case_Ignorable # Mn       TULU-TIGALARI CONJOINER\n113D2         ; Case_Ignorable # Mn       TULU-TIGALARI GEMINATION MARK\n113E1..113E2  ; Case_Ignorable # Mn   [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA\n11438..1143F  ; Case_Ignorable # Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n11442..11444  ; Case_Ignorable # Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\n11446         ; Case_Ignorable # Mn       NEWA SIGN NUKTA\n1145E         ; Case_Ignorable # Mn       NEWA SANDHI MARK\n114B3..114B8  ; Case_Ignorable # Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n114BA         ; Case_Ignorable # Mn       TIRHUTA VOWEL SIGN SHORT E\n114BF..114C0  ; Case_Ignorable # Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n114C2..114C3  ; Case_Ignorable # Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\n115B2..115B5  ; Case_Ignorable # Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n115BC..115BD  ; Case_Ignorable # Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n115BF..115C0  ; Case_Ignorable # Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\n115DC..115DD  ; Case_Ignorable # Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n11633..1163A  ; Case_Ignorable # Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n1163D         ; Case_Ignorable # Mn       MODI SIGN ANUSVARA\n1163F..11640  ; Case_Ignorable # Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\n116AB         ; Case_Ignorable # Mn       TAKRI SIGN ANUSVARA\n116AD         ; Case_Ignorable # Mn       TAKRI VOWEL SIGN AA\n116B0..116B5  ; Case_Ignorable # Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n116B7         ; Case_Ignorable # Mn       TAKRI SIGN NUKTA\n1171D         ; Case_Ignorable # Mn       AHOM CONSONANT SIGN MEDIAL LA\n1171F         ; Case_Ignorable # Mn       AHOM CONSONANT SIGN MEDIAL LIGATING RA\n11722..11725  ; Case_Ignorable # Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n11727..1172B  ; Case_Ignorable # Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\n1182F..11837  ; Case_Ignorable # Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA\n11839..1183A  ; Case_Ignorable # Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA\n1193B..1193C  ; Case_Ignorable # Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU\n1193E         ; Case_Ignorable # Mn       DIVES AKURU VIRAMA\n11943         ; Case_Ignorable # Mn       DIVES AKURU SIGN NUKTA\n119D4..119D7  ; Case_Ignorable # Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR\n119DA..119DB  ; Case_Ignorable # Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI\n119E0         ; Case_Ignorable # Mn       NANDINAGARI SIGN VIRAMA\n11A01..11A0A  ; Case_Ignorable # Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n11A33..11A38  ; Case_Ignorable # Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\n11A3B..11A3E  ; Case_Ignorable # Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n11A47         ; Case_Ignorable # Mn       ZANABAZAR SQUARE SUBJOINER\n11A51..11A56  ; Case_Ignorable # Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n11A59..11A5B  ; Case_Ignorable # Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n11A8A..11A96  ; Case_Ignorable # Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n11A98..11A99  ; Case_Ignorable # Mn   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER\n11B60         ; Case_Ignorable # Mn       SHARADA VOWEL SIGN OE\n11B62..11B64  ; Case_Ignorable # Mn   [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E\n11B66         ; Case_Ignorable # Mn       SHARADA VOWEL SIGN CANDRA E\n11C30..11C36  ; Case_Ignorable # Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n11C38..11C3D  ; Case_Ignorable # Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n11C3F         ; Case_Ignorable # Mn       BHAIKSUKI SIGN VIRAMA\n11C92..11CA7  ; Case_Ignorable # Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n11CAA..11CB0  ; Case_Ignorable # Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n11CB2..11CB3  ; Case_Ignorable # Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n11CB5..11CB6  ; Case_Ignorable # Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n11D31..11D36  ; Case_Ignorable # Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n11D3A         ; Case_Ignorable # Mn       MASARAM GONDI VOWEL SIGN E\n11D3C..11D3D  ; Case_Ignorable # Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n11D3F..11D45  ; Case_Ignorable # Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\n11D47         ; Case_Ignorable # Mn       MASARAM GONDI RA-KARA\n11D90..11D91  ; Case_Ignorable # Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI\n11D95         ; Case_Ignorable # Mn       GUNJALA GONDI SIGN ANUSVARA\n11D97         ; Case_Ignorable # Mn       GUNJALA GONDI VIRAMA\n11DD9         ; Case_Ignorable # Lm       TOLONG SIKI SIGN SELA\n11EF3..11EF4  ; Case_Ignorable # Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U\n11F00..11F01  ; Case_Ignorable # Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA\n11F36..11F3A  ; Case_Ignorable # Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R\n11F40         ; Case_Ignorable # Mn       KAWI VOWEL SIGN EU\n11F42         ; Case_Ignorable # Mn       KAWI CONJOINER\n11F5A         ; Case_Ignorable # Mn       KAWI SIGN NUKTA\n13430..1343F  ; Case_Ignorable # Cf  [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE\n13440         ; Case_Ignorable # Mn       EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY\n13447..13455  ; Case_Ignorable # Mn  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED\n1611E..16129  ; Case_Ignorable # Mn  [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK\n1612D..1612F  ; Case_Ignorable # Mn   [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA\n16AF0..16AF4  ; Case_Ignorable # Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\n16B30..16B36  ; Case_Ignorable # Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\n16B40..16B43  ; Case_Ignorable # Lm   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM\n16D40..16D42  ; Case_Ignorable # Lm   [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA\n16D6B..16D6C  ; Case_Ignorable # Lm   [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT\n16F4F         ; Case_Ignorable # Mn       MIAO SIGN CONSONANT MODIFIER BAR\n16F8F..16F92  ; Case_Ignorable # Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n16F93..16F9F  ; Case_Ignorable # Lm  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8\n16FE0..16FE1  ; Case_Ignorable # Lm   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK\n16FE3         ; Case_Ignorable # Lm       OLD CHINESE ITERATION MARK\n16FE4         ; Case_Ignorable # Mn       KHITAN SMALL SCRIPT FILLER\n16FF2..16FF3  ; Case_Ignorable # Lm   [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER\n1AFF0..1AFF3  ; Case_Ignorable # Lm   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5\n1AFF5..1AFFB  ; Case_Ignorable # Lm   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5\n1AFFD..1AFFE  ; Case_Ignorable # Lm   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8\n1BC9D..1BC9E  ; Case_Ignorable # Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\n1BCA0..1BCA3  ; Case_Ignorable # Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP\n1CF00..1CF2D  ; Case_Ignorable # Mn  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT\n1CF30..1CF46  ; Case_Ignorable # Mn  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG\n1D167..1D169  ; Case_Ignorable # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\n1D173..1D17A  ; Case_Ignorable # Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE\n1D17B..1D182  ; Case_Ignorable # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\n1D185..1D18B  ; Case_Ignorable # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\n1D1AA..1D1AD  ; Case_Ignorable # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\n1D242..1D244  ; Case_Ignorable # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\n1DA00..1DA36  ; Case_Ignorable # Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\n1DA3B..1DA6C  ; Case_Ignorable # Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\n1DA75         ; Case_Ignorable # Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\n1DA84         ; Case_Ignorable # Mn       SIGNWRITING LOCATION HEAD NECK\n1DA9B..1DA9F  ; Case_Ignorable # Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\n1DAA1..1DAAF  ; Case_Ignorable # Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\n1E000..1E006  ; Case_Ignorable # Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n1E008..1E018  ; Case_Ignorable # Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n1E01B..1E021  ; Case_Ignorable # Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n1E023..1E024  ; Case_Ignorable # Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n1E026..1E02A  ; Case_Ignorable # Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n1E030..1E06D  ; Case_Ignorable # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E08F         ; Case_Ignorable # Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n1E130..1E136  ; Case_Ignorable # Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D\n1E137..1E13D  ; Case_Ignorable # Lm   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER\n1E2AE         ; Case_Ignorable # Mn       TOTO SIGN RISING TONE\n1E2EC..1E2EF  ; Case_Ignorable # Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI\n1E4EB         ; Case_Ignorable # Lm       NAG MUNDARI SIGN OJOD\n1E4EC..1E4EF  ; Case_Ignorable # Mn   [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH\n1E5EE..1E5EF  ; Case_Ignorable # Mn   [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR\n1E6E3         ; Case_Ignorable # Mn       TAI YO SIGN UE\n1E6E6         ; Case_Ignorable # Mn       TAI YO SIGN AU\n1E6EE..1E6EF  ; Case_Ignorable # Mn   [2] TAI YO SIGN AY..TAI YO SIGN ANG\n1E6F5         ; Case_Ignorable # Mn       TAI YO SIGN OM\n1E6FF         ; Case_Ignorable # Lm       TAI YO XAM LAI\n1E8D0..1E8D6  ; Case_Ignorable # Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\n1E944..1E94A  ; Case_Ignorable # Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\n1E94B         ; Case_Ignorable # Lm       ADLAM NASALIZATION MARK\n1F3FB..1F3FF  ; Case_Ignorable # Sk   [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6\nE0001         ; Case_Ignorable # Cf       LANGUAGE TAG\nE0020..E007F  ; Case_Ignorable # Cf  [96] TAG SPACE..CANCEL TAG\nE0100..E01EF  ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\n\n# Total code points: 2794\n\n# ================================================\n\n# Derived Property:   Changes_When_Lowercased (CWL)\n#  Characters whose normalized forms are not stable under a toLowercase mapping.\n#  For more information, see the definition of \"isLowercase(X)\"\n#  in the \"Conformance\" / \"Default Case Algorithms\" section of the core specification.\n#  Changes_When_Lowercased(X) is true when toLowercase(toNFD(X)) != toNFD(X)\n\n0041..005A    ; Changes_When_Lowercased # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n00C0..00D6    ; Changes_When_Lowercased # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00DE    ; Changes_When_Lowercased # L&   [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN\n0100          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH MACRON\n0102          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH BREVE\n0104          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH OGONEK\n0106          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER C WITH ACUTE\n0108          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER C WITH CIRCUMFLEX\n010A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER C WITH DOT ABOVE\n010C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER C WITH CARON\n010E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH CARON\n0110          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH STROKE\n0112          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH MACRON\n0114          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH BREVE\n0116          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH DOT ABOVE\n0118          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH OGONEK\n011A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CARON\n011C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH CIRCUMFLEX\n011E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH BREVE\n0120          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH DOT ABOVE\n0122          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH CEDILLA\n0124          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH CIRCUMFLEX\n0126          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH STROKE\n0128          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH TILDE\n012A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH MACRON\n012C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH BREVE\n012E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH OGONEK\n0130          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH DOT ABOVE\n0132          ; Changes_When_Lowercased # L&       LATIN CAPITAL LIGATURE IJ\n0134          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER J WITH CIRCUMFLEX\n0136          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH CEDILLA\n0139          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH ACUTE\n013B          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH CEDILLA\n013D          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH CARON\n013F          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH MIDDLE DOT\n0141          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH STROKE\n0143          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH ACUTE\n0145          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH CEDILLA\n0147          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH CARON\n014A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER ENG\n014C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH MACRON\n014E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH BREVE\n0150          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH DOUBLE ACUTE\n0152          ; Changes_When_Lowercased # L&       LATIN CAPITAL LIGATURE OE\n0154          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH ACUTE\n0156          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH CEDILLA\n0158          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH CARON\n015A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH ACUTE\n015C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH CIRCUMFLEX\n015E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH CEDILLA\n0160          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH CARON\n0162          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH CEDILLA\n0164          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH CARON\n0166          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH STROKE\n0168          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH TILDE\n016A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH MACRON\n016C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH BREVE\n016E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH RING ABOVE\n0170          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DOUBLE ACUTE\n0172          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH OGONEK\n0174          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH CIRCUMFLEX\n0176          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH CIRCUMFLEX\n0178..0179    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE\n017B          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH DOT ABOVE\n017D          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH CARON\n0181..0182    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR\n0184          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER TONE SIX\n0186..0187    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK\n0189..018B    ; Changes_When_Lowercased # L&   [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR\n018E..0191    ; Changes_When_Lowercased # L&   [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK\n0193..0194    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA\n0196..0198    ; Changes_When_Lowercased # L&   [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK\n019C..019D    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK\n019F..01A0    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN\n01A2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER OI\n01A4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER P WITH HOOK\n01A6..01A7    ; Changes_When_Lowercased # L&   [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO\n01A9          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER ESH\n01AC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH HOOK\n01AE..01AF    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN\n01B1..01B3    ; Changes_When_Lowercased # L&   [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK\n01B5          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH STROKE\n01B7..01B8    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED\n01BC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER TONE FIVE\n01C4..01C5    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON\n01C7..01C8    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER LJ..LATIN CAPITAL LETTER L WITH SMALL LETTER J\n01CA..01CB    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER NJ..LATIN CAPITAL LETTER N WITH SMALL LETTER J\n01CD          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH CARON\n01CF          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH CARON\n01D1          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH CARON\n01D3          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH CARON\n01D5          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON\n01D7          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE\n01D9          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON\n01DB          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE\n01DE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON\n01E0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON\n01E2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AE WITH MACRON\n01E4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH STROKE\n01E6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH CARON\n01E8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH CARON\n01EA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH OGONEK\n01EC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH OGONEK AND MACRON\n01EE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER EZH WITH CARON\n01F1..01F2    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER DZ..LATIN CAPITAL LETTER D WITH SMALL LETTER Z\n01F4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH ACUTE\n01F6..01F8    ; Changes_When_Lowercased # L&   [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE\n01FA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE\n01FC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AE WITH ACUTE\n01FE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH STROKE AND ACUTE\n0200          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH DOUBLE GRAVE\n0202          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH INVERTED BREVE\n0204          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH DOUBLE GRAVE\n0206          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH INVERTED BREVE\n0208          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH DOUBLE GRAVE\n020A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH INVERTED BREVE\n020C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH DOUBLE GRAVE\n020E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH INVERTED BREVE\n0210          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH DOUBLE GRAVE\n0212          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH INVERTED BREVE\n0214          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DOUBLE GRAVE\n0216          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH INVERTED BREVE\n0218          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH COMMA BELOW\n021A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH COMMA BELOW\n021C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER YOGH\n021E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH CARON\n0220          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH LONG RIGHT LEG\n0222          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER OU\n0224          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH HOOK\n0226          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH DOT ABOVE\n0228          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CEDILLA\n022A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON\n022C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH TILDE AND MACRON\n022E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH DOT ABOVE\n0230          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON\n0232          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH MACRON\n023A..023B    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE\n023D..023E    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE\n0241          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER GLOTTAL STOP\n0243..0246    ; Changes_When_Lowercased # L&   [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE\n0248          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER J WITH STROKE\n024A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL\n024C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH STROKE\n024E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH STROKE\n0370          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER HETA\n0372          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER ARCHAIC SAMPI\n0376          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA\n037F          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER YOT\n0386          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0388..038A    ; Changes_When_Lowercased # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..038F    ; Changes_When_Lowercased # L&   [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS\n0391..03A1    ; Changes_When_Lowercased # L&  [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO\n03A3..03AB    ; Changes_When_Lowercased # L&   [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA\n03CF          ; Changes_When_Lowercased # L&       GREEK CAPITAL KAI SYMBOL\n03D8          ; Changes_When_Lowercased # L&       GREEK LETTER ARCHAIC KOPPA\n03DA          ; Changes_When_Lowercased # L&       GREEK LETTER STIGMA\n03DC          ; Changes_When_Lowercased # L&       GREEK LETTER DIGAMMA\n03DE          ; Changes_When_Lowercased # L&       GREEK LETTER KOPPA\n03E0          ; Changes_When_Lowercased # L&       GREEK LETTER SAMPI\n03E2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER SHEI\n03E4          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER FEI\n03E6          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER KHEI\n03E8          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER HORI\n03EA          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER GANGIA\n03EC          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER SHIMA\n03EE          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER DEI\n03F4          ; Changes_When_Lowercased # L&       GREEK CAPITAL THETA SYMBOL\n03F7          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER SHO\n03F9..03FA    ; Changes_When_Lowercased # L&   [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN\n03FD..042F    ; Changes_When_Lowercased # L&  [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA\n0460          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER OMEGA\n0462          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER YAT\n0464          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTIFIED E\n0466          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER LITTLE YUS\n0468          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS\n046A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BIG YUS\n046C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS\n046E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KSI\n0470          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER PSI\n0472          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER FITA\n0474          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IZHITSA\n0476          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT\n0478          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER UK\n047A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ROUND OMEGA\n047C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER OMEGA WITH TITLO\n047E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER OT\n0480          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOPPA\n048A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SHORT I WITH TAIL\n048C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SEMISOFT SIGN\n048E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ER WITH TICK\n0490          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER GHE WITH UPTURN\n0492          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE\n0494          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK\n0496          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER\n0498          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ZE WITH DESCENDER\n049A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KA WITH DESCENDER\n049C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE\n049E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KA WITH STROKE\n04A0          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BASHKIR KA\n04A2          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EN WITH DESCENDER\n04A4          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LIGATURE EN GHE\n04A6          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK\n04A8          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ABKHASIAN HA\n04AA          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ES WITH DESCENDER\n04AC          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TE WITH DESCENDER\n04AE          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER STRAIGHT U\n04B0          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE\n04B2          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER HA WITH DESCENDER\n04B4          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LIGATURE TE TSE\n04B6          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER CHE WITH DESCENDER\n04B8          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE\n04BA          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SHHA\n04BC          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE\n04BE          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER\n04C0..04C1    ; Changes_When_Lowercased # L&   [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE\n04C3          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KA WITH HOOK\n04C5          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EL WITH TAIL\n04C7          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EN WITH HOOK\n04C9          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EN WITH TAIL\n04CB          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KHAKASSIAN CHE\n04CD          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EM WITH TAIL\n04D0          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER A WITH BREVE\n04D2          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER A WITH DIAERESIS\n04D4          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LIGATURE A IE\n04D6          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IE WITH BREVE\n04D8          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SCHWA\n04DA          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS\n04DC          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS\n04DE          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS\n04E0          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ABKHASIAN DZE\n04E2          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER I WITH MACRON\n04E4          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER I WITH DIAERESIS\n04E6          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER O WITH DIAERESIS\n04E8          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BARRED O\n04EA          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS\n04EC          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER E WITH DIAERESIS\n04EE          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER U WITH MACRON\n04F0          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER U WITH DIAERESIS\n04F2          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE\n04F4          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS\n04F6          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER GHE WITH DESCENDER\n04F8          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS\n04FA          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK\n04FC          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER HA WITH HOOK\n04FE          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER HA WITH STROKE\n0500          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI DE\n0502          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI DJE\n0504          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI ZJE\n0506          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI DZJE\n0508          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI LJE\n050A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI NJE\n050C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI SJE\n050E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER KOMI TJE\n0510          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER REVERSED ZE\n0512          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EL WITH HOOK\n0514          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER LHA\n0516          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER RHA\n0518          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER YAE\n051A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER QA\n051C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER WE\n051E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ALEUT KA\n0520          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK\n0522          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK\n0524          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER PE WITH DESCENDER\n0526          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER\n0528          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK\n052A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DZZHE\n052C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DCHE\n052E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER EL WITH DESCENDER\n0531..0556    ; Changes_When_Lowercased # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n10A0..10C5    ; Changes_When_Lowercased # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; Changes_When_Lowercased # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; Changes_When_Lowercased # L&       GEORGIAN CAPITAL LETTER AEN\n13A0..13F5    ; Changes_When_Lowercased # L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n1C89          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TJE\n1C90..1CBA    ; Changes_When_Lowercased # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; Changes_When_Lowercased # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1E00          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH RING BELOW\n1E02          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER B WITH DOT ABOVE\n1E04          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER B WITH DOT BELOW\n1E06          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER B WITH LINE BELOW\n1E08          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE\n1E0A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH DOT ABOVE\n1E0C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH DOT BELOW\n1E0E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH LINE BELOW\n1E10          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH CEDILLA\n1E12          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW\n1E14          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH MACRON AND GRAVE\n1E16          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH MACRON AND ACUTE\n1E18          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW\n1E1A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH TILDE BELOW\n1E1C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE\n1E1E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER F WITH DOT ABOVE\n1E20          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH MACRON\n1E22          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH DOT ABOVE\n1E24          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH DOT BELOW\n1E26          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH DIAERESIS\n1E28          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH CEDILLA\n1E2A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH BREVE BELOW\n1E2C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH TILDE BELOW\n1E2E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE\n1E30          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH ACUTE\n1E32          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH DOT BELOW\n1E34          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH LINE BELOW\n1E36          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH DOT BELOW\n1E38          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON\n1E3A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH LINE BELOW\n1E3C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW\n1E3E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER M WITH ACUTE\n1E40          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER M WITH DOT ABOVE\n1E42          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER M WITH DOT BELOW\n1E44          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH DOT ABOVE\n1E46          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH DOT BELOW\n1E48          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH LINE BELOW\n1E4A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW\n1E4C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH TILDE AND ACUTE\n1E4E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS\n1E50          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH MACRON AND GRAVE\n1E52          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH MACRON AND ACUTE\n1E54          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER P WITH ACUTE\n1E56          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER P WITH DOT ABOVE\n1E58          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH DOT ABOVE\n1E5A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH DOT BELOW\n1E5C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON\n1E5E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH LINE BELOW\n1E60          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH DOT ABOVE\n1E62          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH DOT BELOW\n1E64          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE\n1E66          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE\n1E68          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE\n1E6A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH DOT ABOVE\n1E6C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH DOT BELOW\n1E6E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH LINE BELOW\n1E70          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW\n1E72          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DIAERESIS BELOW\n1E74          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH TILDE BELOW\n1E76          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW\n1E78          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH TILDE AND ACUTE\n1E7A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS\n1E7C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER V WITH TILDE\n1E7E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER V WITH DOT BELOW\n1E80          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH GRAVE\n1E82          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH ACUTE\n1E84          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH DIAERESIS\n1E86          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH DOT ABOVE\n1E88          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH DOT BELOW\n1E8A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER X WITH DOT ABOVE\n1E8C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER X WITH DIAERESIS\n1E8E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH DOT ABOVE\n1E90          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH CIRCUMFLEX\n1E92          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH DOT BELOW\n1E94          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH LINE BELOW\n1E9E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER SHARP S\n1EA0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH DOT BELOW\n1EA2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH HOOK ABOVE\n1EA4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE\n1EA6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE\n1EA8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE\n1EAA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE\n1EAC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW\n1EAE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH BREVE AND ACUTE\n1EB0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH BREVE AND GRAVE\n1EB2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE\n1EB4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH BREVE AND TILDE\n1EB6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW\n1EB8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH DOT BELOW\n1EBA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH HOOK ABOVE\n1EBC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH TILDE\n1EBE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE\n1EC0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE\n1EC2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE\n1EC4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE\n1EC6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW\n1EC8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH HOOK ABOVE\n1ECA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER I WITH DOT BELOW\n1ECC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH DOT BELOW\n1ECE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH HOOK ABOVE\n1ED0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE\n1ED2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE\n1ED4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE\n1ED6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE\n1ED8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW\n1EDA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH HORN AND ACUTE\n1EDC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH HORN AND GRAVE\n1EDE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE\n1EE0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH HORN AND TILDE\n1EE2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW\n1EE4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH DOT BELOW\n1EE6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH HOOK ABOVE\n1EE8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH HORN AND ACUTE\n1EEA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH HORN AND GRAVE\n1EEC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE\n1EEE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH HORN AND TILDE\n1EF0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW\n1EF2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH GRAVE\n1EF4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH DOT BELOW\n1EF6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH HOOK ABOVE\n1EF8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH TILDE\n1EFA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER MIDDLE-WELSH LL\n1EFC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER MIDDLE-WELSH V\n1EFE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Y WITH LOOP\n1F08..1F0F    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI\n1F18..1F1D    ; Changes_When_Lowercased # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F28..1F2F    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI\n1F38..1F3F    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI\n1F48..1F4D    ; Changes_When_Lowercased # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F59          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F          ; Changes_When_Lowercased # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F68..1F6F    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI\n1F88..1F8F    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1F98..1F9F    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1FA8..1FAF    ; Changes_When_Lowercased # L&   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1FB8..1FBC    ; Changes_When_Lowercased # L&   [5] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FC8..1FCC    ; Changes_When_Lowercased # L&   [5] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FD8..1FDB    ; Changes_When_Lowercased # L&   [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE8..1FEC    ; Changes_When_Lowercased # L&   [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FF8..1FFC    ; Changes_When_Lowercased # L&   [5] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n2126          ; Changes_When_Lowercased # L&       OHM SIGN\n212A..212B    ; Changes_When_Lowercased # L&   [2] KELVIN SIGN..ANGSTROM SIGN\n2132          ; Changes_When_Lowercased # L&       TURNED CAPITAL F\n2160..216F    ; Changes_When_Lowercased # Nl  [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND\n2183          ; Changes_When_Lowercased # L&       ROMAN NUMERAL REVERSED ONE HUNDRED\n24B6..24CF    ; Changes_When_Lowercased # So  [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z\n2C00..2C2F    ; Changes_When_Lowercased # L&  [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI\n2C60          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH DOUBLE BAR\n2C62..2C64    ; Changes_When_Lowercased # L&   [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL\n2C67          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER H WITH DESCENDER\n2C69          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH DESCENDER\n2C6B          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Z WITH DESCENDER\n2C6D..2C70    ; Changes_When_Lowercased # L&   [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA\n2C72          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER W WITH HOOK\n2C75          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER HALF H\n2C7E..2C80    ; Changes_When_Lowercased # L&   [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA\n2C82          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER VIDA\n2C84          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER GAMMA\n2C86          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER DALDA\n2C88          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER EIE\n2C8A          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER SOU\n2C8C          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER ZATA\n2C8E          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER HATE\n2C90          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER THETHE\n2C92          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER IAUDA\n2C94          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER KAPA\n2C96          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER LAULA\n2C98          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER MI\n2C9A          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER NI\n2C9C          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER KSI\n2C9E          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER O\n2CA0          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER PI\n2CA2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER RO\n2CA4          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER SIMA\n2CA6          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER TAU\n2CA8          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER UA\n2CAA          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER FI\n2CAC          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER KHI\n2CAE          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER PSI\n2CB0          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OOU\n2CB2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER DIALECT-P ALEF\n2CB4          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC AIN\n2CB6          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE\n2CB8          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER DIALECT-P KAPA\n2CBA          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER DIALECT-P NI\n2CBC          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI\n2CBE          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC OOU\n2CC0          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER SAMPI\n2CC2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER CROSSED SHEI\n2CC4          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC SHEI\n2CC6          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC ESH\n2CC8          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER AKHMIMIC KHEI\n2CCA          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER DIALECT-P HORI\n2CCC          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC HORI\n2CCE          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC HA\n2CD0          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER L-SHAPED HA\n2CD2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC HEI\n2CD4          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC HAT\n2CD6          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC GANGIA\n2CD8          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC DJA\n2CDA          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD COPTIC SHIMA\n2CDC          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD NUBIAN SHIMA\n2CDE          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD NUBIAN NGI\n2CE0          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD NUBIAN NYI\n2CE2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER OLD NUBIAN WAU\n2CEB          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI\n2CED          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA\n2CF2          ; Changes_When_Lowercased # L&       COPTIC CAPITAL LETTER BOHAIRIC KHEI\nA640          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ZEMLYA\nA642          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DZELO\nA644          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER REVERSED DZE\nA646          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTA\nA648          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DJERV\nA64A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER MONOGRAPH UK\nA64C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BROAD OMEGA\nA64E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER NEUTRAL YER\nA650          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER YERU WITH BACK YER\nA652          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTIFIED YAT\nA654          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER REVERSED YU\nA656          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTIFIED A\nA658          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS\nA65A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BLENDED YUS\nA65C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS\nA65E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER YN\nA660          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER REVERSED TSE\nA662          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SOFT DE\nA664          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SOFT EL\nA666          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SOFT EM\nA668          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER MONOCULAR O\nA66A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER BINOCULAR O\nA66C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O\nA680          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DWE\nA682          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DZWE\nA684          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER ZHWE\nA686          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER CCHE\nA688          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DZZE\nA68A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK\nA68C          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TWE\nA68E          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TSWE\nA690          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TSSE\nA692          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER TCHE\nA694          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER HWE\nA696          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER SHWE\nA698          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER DOUBLE O\nA69A          ; Changes_When_Lowercased # L&       CYRILLIC CAPITAL LETTER CROSSED O\nA722          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF\nA724          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER EGYPTOLOGICAL AIN\nA726          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER HENG\nA728          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER TZ\nA72A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER TRESILLO\nA72C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER CUATRILLO\nA72E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER CUATRILLO WITH COMMA\nA732          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AA\nA734          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AO\nA736          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AU\nA738          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AV\nA73A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR\nA73C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER AY\nA73E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER REVERSED C WITH DOT\nA740          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH STROKE\nA742          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH DIAGONAL STROKE\nA744          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE\nA746          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER BROKEN L\nA748          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER L WITH HIGH STROKE\nA74A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY\nA74C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER O WITH LOOP\nA74E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER OO\nA750          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER\nA752          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER P WITH FLOURISH\nA754          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER P WITH SQUIRREL TAIL\nA756          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER\nA758          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE\nA75A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R ROTUNDA\nA75C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER RUM ROTUNDA\nA75E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER V WITH DIAGONAL STROKE\nA760          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER VY\nA762          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER VISIGOTHIC Z\nA764          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER THORN WITH STROKE\nA766          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER\nA768          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER VEND\nA76A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER ET\nA76C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER IS\nA76E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER CON\nA779          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER INSULAR D\nA77B          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER INSULAR F\nA77D..A77E    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G\nA780          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER TURNED L\nA782          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER INSULAR R\nA784          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER INSULAR S\nA786          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER INSULAR T\nA78B          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER SALTILLO\nA78D          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER TURNED H\nA790          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH DESCENDER\nA792          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER C WITH BAR\nA796          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER B WITH FLOURISH\nA798          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER F WITH STROKE\nA79A          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER VOLAPUK AE\nA79C          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER VOLAPUK OE\nA79E          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER VOLAPUK UE\nA7A0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER G WITH OBLIQUE STROKE\nA7A2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER K WITH OBLIQUE STROKE\nA7A4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER N WITH OBLIQUE STROKE\nA7A6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER R WITH OBLIQUE STROKE\nA7A8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH OBLIQUE STROKE\nA7AA..A7AE    ; Changes_When_Lowercased # L&   [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I\nA7B0..A7B4    ; Changes_When_Lowercased # L&   [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA\nA7B6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER OMEGA\nA7B8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER U WITH STROKE\nA7BA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER GLOTTAL A\nA7BC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER GLOTTAL I\nA7BE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER GLOTTAL U\nA7C0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER OLD POLISH O\nA7C2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER ANGLICANA W\nA7C4..A7C7    ; Changes_When_Lowercased # L&   [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY\nA7C9          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY\nA7CB..A7CC    ; Changes_When_Lowercased # L&   [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE\nA7CE          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE\nA7D0          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER CLOSED INSULAR G\nA7D2          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER DOUBLE THORN\nA7D4          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER DOUBLE WYNN\nA7D6          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER MIDDLE SCOTS S\nA7D8          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER SIGMOID S\nA7DA          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER LAMBDA\nA7DC          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F5          ; Changes_When_Lowercased # L&       LATIN CAPITAL LETTER REVERSED HALF H\nFF21..FF3A    ; Changes_When_Lowercased # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\n10400..10427  ; Changes_When_Lowercased # L&  [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW\n104B0..104D3  ; Changes_When_Lowercased # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n10570..1057A  ; Changes_When_Lowercased # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; Changes_When_Lowercased # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; Changes_When_Lowercased # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; Changes_When_Lowercased # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10C80..10CB2  ; Changes_When_Lowercased # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10D50..10D65  ; Changes_When_Lowercased # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n118A0..118BF  ; Changes_When_Lowercased # L&  [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO\n16E40..16E5F  ; Changes_When_Lowercased # L&  [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y\n16EA0..16EB8  ; Changes_When_Lowercased # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n1E900..1E921  ; Changes_When_Lowercased # L&  [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA\n\n# Total code points: 1488\n\n# ================================================\n\n# Derived Property:   Changes_When_Uppercased (CWU)\n#  Characters whose normalized forms are not stable under a toUppercase mapping.\n#  For more information, see the definition of \"isUppercase(X)\"\n#  in the \"Conformance\" / \"Default Case Algorithms\" section of the core specification.\n#  Changes_When_Uppercased(X) is true when toUppercase(toNFD(X)) != toNFD(X)\n\n0061..007A    ; Changes_When_Uppercased # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00B5          ; Changes_When_Uppercased # L&       MICRO SIGN\n00DF..00F6    ; Changes_When_Uppercased # L&  [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..00FF    ; Changes_When_Uppercased # L&   [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS\n0101          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH MACRON\n0103          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH BREVE\n0105          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH OGONEK\n0107          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH ACUTE\n0109          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH CIRCUMFLEX\n010B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH DOT ABOVE\n010D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH CARON\n010F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH CARON\n0111          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH STROKE\n0113          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH MACRON\n0115          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH BREVE\n0117          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH DOT ABOVE\n0119          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH OGONEK\n011B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CARON\n011D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH CIRCUMFLEX\n011F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH BREVE\n0121          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH DOT ABOVE\n0123          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH CEDILLA\n0125          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH CIRCUMFLEX\n0127          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH STROKE\n0129          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH TILDE\n012B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH MACRON\n012D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH BREVE\n012F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH OGONEK\n0131          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER DOTLESS I\n0133          ; Changes_When_Uppercased # L&       LATIN SMALL LIGATURE IJ\n0135          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER J WITH CIRCUMFLEX\n0137          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH CEDILLA\n013A          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH ACUTE\n013C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH CEDILLA\n013E          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH CARON\n0140          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH MIDDLE DOT\n0142          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH STROKE\n0144          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH ACUTE\n0146          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH CEDILLA\n0148..0149    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE\n014B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER ENG\n014D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH MACRON\n014F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH BREVE\n0151          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH DOUBLE ACUTE\n0153          ; Changes_When_Uppercased # L&       LATIN SMALL LIGATURE OE\n0155          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH ACUTE\n0157          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH CEDILLA\n0159          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH CARON\n015B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH ACUTE\n015D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH CIRCUMFLEX\n015F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH CEDILLA\n0161          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH CARON\n0163          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH CEDILLA\n0165          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH CARON\n0167          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH STROKE\n0169          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH TILDE\n016B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH MACRON\n016D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH BREVE\n016F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH RING ABOVE\n0171          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DOUBLE ACUTE\n0173          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH OGONEK\n0175          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH CIRCUMFLEX\n0177          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH CIRCUMFLEX\n017A          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH ACUTE\n017C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH DOT ABOVE\n017E..0180    ; Changes_When_Uppercased # L&   [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE\n0183          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER B WITH TOPBAR\n0185          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TONE SIX\n0188          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH HOOK\n018C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH TOPBAR\n0192          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER F WITH HOOK\n0195          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER HV\n0199..019B    ; Changes_When_Uppercased # L&   [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE\n019E          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH LONG RIGHT LEG\n01A1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HORN\n01A3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER OI\n01A5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH HOOK\n01A8          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TONE TWO\n01AD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH HOOK\n01B0          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HORN\n01B4          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH HOOK\n01B6          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH STROKE\n01B9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER EZH REVERSED\n01BD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TONE FIVE\n01BF          ; Changes_When_Uppercased # L&       LATIN LETTER WYNN\n01C5..01C6    ; Changes_When_Uppercased # L&   [2] LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON..LATIN SMALL LETTER DZ WITH CARON\n01C8..01C9    ; Changes_When_Uppercased # L&   [2] LATIN CAPITAL LETTER L WITH SMALL LETTER J..LATIN SMALL LETTER LJ\n01CB..01CC    ; Changes_When_Uppercased # L&   [2] LATIN CAPITAL LETTER N WITH SMALL LETTER J..LATIN SMALL LETTER NJ\n01CE          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH CARON\n01D0          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH CARON\n01D2          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH CARON\n01D4          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH CARON\n01D6          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DIAERESIS AND MACRON\n01D8          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE\n01DA          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DIAERESIS AND CARON\n01DC..01DD    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E\n01DF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH DIAERESIS AND MACRON\n01E1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON\n01E3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AE WITH MACRON\n01E5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH STROKE\n01E7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH CARON\n01E9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH CARON\n01EB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH OGONEK\n01ED          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH OGONEK AND MACRON\n01EF..01F0    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON\n01F2..01F3    ; Changes_When_Uppercased # L&   [2] LATIN CAPITAL LETTER D WITH SMALL LETTER Z..LATIN SMALL LETTER DZ\n01F5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH ACUTE\n01F9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH GRAVE\n01FB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE\n01FD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AE WITH ACUTE\n01FF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH STROKE AND ACUTE\n0201          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH DOUBLE GRAVE\n0203          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH INVERTED BREVE\n0205          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH DOUBLE GRAVE\n0207          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH INVERTED BREVE\n0209          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH DOUBLE GRAVE\n020B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH INVERTED BREVE\n020D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH DOUBLE GRAVE\n020F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH INVERTED BREVE\n0211          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH DOUBLE GRAVE\n0213          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH INVERTED BREVE\n0215          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DOUBLE GRAVE\n0217          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH INVERTED BREVE\n0219          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH COMMA BELOW\n021B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH COMMA BELOW\n021D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER YOGH\n021F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH CARON\n0223          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER OU\n0225          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH HOOK\n0227          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH DOT ABOVE\n0229          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CEDILLA\n022B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH DIAERESIS AND MACRON\n022D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH TILDE AND MACRON\n022F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH DOT ABOVE\n0231          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON\n0233          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH MACRON\n023C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH STROKE\n023F..0240    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL\n0242          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER GLOTTAL STOP\n0247          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH STROKE\n0249          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER J WITH STROKE\n024B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Q WITH HOOK TAIL\n024D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH STROKE\n024F..0254    ; Changes_When_Uppercased # L&   [6] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER OPEN O\n0256..0257    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK\n0259          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER SCHWA\n025B..025C    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER OPEN E..LATIN SMALL LETTER REVERSED OPEN E\n0260..0261    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER G WITH HOOK..LATIN SMALL LETTER SCRIPT G\n0263..0266    ; Changes_When_Uppercased # L&   [4] LATIN SMALL LETTER GAMMA..LATIN SMALL LETTER H WITH HOOK\n0268..026C    ; Changes_When_Uppercased # L&   [5] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER L WITH BELT\n026F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TURNED M\n0271..0272    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK\n0275          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER BARRED O\n027D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH TAIL\n0280          ; Changes_When_Uppercased # L&       LATIN LETTER SMALL CAPITAL R\n0282..0283    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER S WITH HOOK..LATIN SMALL LETTER ESH\n0287..028C    ; Changes_When_Uppercased # L&   [6] LATIN SMALL LETTER TURNED T..LATIN SMALL LETTER TURNED V\n0292          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER EZH\n029D..029E    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER J WITH CROSSED-TAIL..LATIN SMALL LETTER TURNED K\n0345          ; Changes_When_Uppercased # Mn       COMBINING GREEK YPOGEGRAMMENI\n0371          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER HETA\n0373          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER ARCHAIC SAMPI\n0377          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037B..037D    ; Changes_When_Uppercased # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n0390          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS\n03AC..03CE    ; Changes_When_Uppercased # L&  [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS\n03D0..03D1    ; Changes_When_Uppercased # L&   [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL\n03D5..03D7    ; Changes_When_Uppercased # L&   [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL\n03D9          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER ARCHAIC KOPPA\n03DB          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER STIGMA\n03DD          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER DIGAMMA\n03DF          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER KOPPA\n03E1          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER SAMPI\n03E3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER SHEI\n03E5          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER FEI\n03E7          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER KHEI\n03E9          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER HORI\n03EB          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER GANGIA\n03ED          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER SHIMA\n03EF..03F3    ; Changes_When_Uppercased # L&   [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT\n03F5          ; Changes_When_Uppercased # L&       GREEK LUNATE EPSILON SYMBOL\n03F8          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER SHO\n03FB          ; Changes_When_Uppercased # L&       GREEK SMALL LETTER SAN\n0430..045F    ; Changes_When_Uppercased # L&  [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE\n0461          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER OMEGA\n0463          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER YAT\n0465          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTIFIED E\n0467          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER LITTLE YUS\n0469          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS\n046B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BIG YUS\n046D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTIFIED BIG YUS\n046F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KSI\n0471          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER PSI\n0473          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER FITA\n0475          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IZHITSA\n0477          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT\n0479          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER UK\n047B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ROUND OMEGA\n047D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER OMEGA WITH TITLO\n047F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER OT\n0481          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOPPA\n048B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SHORT I WITH TAIL\n048D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SEMISOFT SIGN\n048F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ER WITH TICK\n0491          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER GHE WITH UPTURN\n0493          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER GHE WITH STROKE\n0495          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK\n0497          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZHE WITH DESCENDER\n0499          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZE WITH DESCENDER\n049B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KA WITH DESCENDER\n049D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE\n049F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KA WITH STROKE\n04A1          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BASHKIR KA\n04A3          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EN WITH DESCENDER\n04A5          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LIGATURE EN GHE\n04A7          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK\n04A9          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ABKHASIAN HA\n04AB          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ES WITH DESCENDER\n04AD          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TE WITH DESCENDER\n04AF          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER STRAIGHT U\n04B1          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE\n04B3          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER HA WITH DESCENDER\n04B5          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LIGATURE TE TSE\n04B7          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER CHE WITH DESCENDER\n04B9          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE\n04BB          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SHHA\n04BD          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ABKHASIAN CHE\n04BF          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER\n04C2          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZHE WITH BREVE\n04C4          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KA WITH HOOK\n04C6          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EL WITH TAIL\n04C8          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EN WITH HOOK\n04CA          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EN WITH TAIL\n04CC          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KHAKASSIAN CHE\n04CE..04CF    ; Changes_When_Uppercased # L&   [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA\n04D1          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER A WITH BREVE\n04D3          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER A WITH DIAERESIS\n04D5          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LIGATURE A IE\n04D7          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IE WITH BREVE\n04D9          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SCHWA\n04DB          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS\n04DD          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZHE WITH DIAERESIS\n04DF          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZE WITH DIAERESIS\n04E1          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ABKHASIAN DZE\n04E3          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER I WITH MACRON\n04E5          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER I WITH DIAERESIS\n04E7          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER O WITH DIAERESIS\n04E9          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BARRED O\n04EB          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS\n04ED          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER E WITH DIAERESIS\n04EF          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER U WITH MACRON\n04F1          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER U WITH DIAERESIS\n04F3          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE\n04F5          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER CHE WITH DIAERESIS\n04F7          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER GHE WITH DESCENDER\n04F9          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER YERU WITH DIAERESIS\n04FB          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK\n04FD          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER HA WITH HOOK\n04FF          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER HA WITH STROKE\n0501          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI DE\n0503          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI DJE\n0505          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI ZJE\n0507          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI DZJE\n0509          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI LJE\n050B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI NJE\n050D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI SJE\n050F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER KOMI TJE\n0511          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER REVERSED ZE\n0513          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EL WITH HOOK\n0515          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER LHA\n0517          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER RHA\n0519          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER YAE\n051B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER QA\n051D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER WE\n051F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ALEUT KA\n0521          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK\n0523          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK\n0525          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER PE WITH DESCENDER\n0527          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SHHA WITH DESCENDER\n0529          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EN WITH LEFT HOOK\n052B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DZZHE\n052D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DCHE\n052F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER EL WITH DESCENDER\n0561..0587    ; Changes_When_Uppercased # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN\n10D0..10FA    ; Changes_When_Uppercased # L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FD..10FF    ; Changes_When_Uppercased # L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n13F8..13FD    ; Changes_When_Uppercased # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1C80..1C88    ; Changes_When_Uppercased # L&   [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK\n1C8A          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TJE\n1D79          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER INSULAR G\n1D7D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH STROKE\n1D8E          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH PALATAL HOOK\n1E01          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH RING BELOW\n1E03          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER B WITH DOT ABOVE\n1E05          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER B WITH DOT BELOW\n1E07          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER B WITH LINE BELOW\n1E09          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER C WITH CEDILLA AND ACUTE\n1E0B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH DOT ABOVE\n1E0D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH DOT BELOW\n1E0F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH LINE BELOW\n1E11          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH CEDILLA\n1E13          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW\n1E15          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH MACRON AND GRAVE\n1E17          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH MACRON AND ACUTE\n1E19          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW\n1E1B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH TILDE BELOW\n1E1D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CEDILLA AND BREVE\n1E1F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER F WITH DOT ABOVE\n1E21          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH MACRON\n1E23          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH DOT ABOVE\n1E25          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH DOT BELOW\n1E27          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH DIAERESIS\n1E29          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH CEDILLA\n1E2B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH BREVE BELOW\n1E2D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH TILDE BELOW\n1E2F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE\n1E31          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH ACUTE\n1E33          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH DOT BELOW\n1E35          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH LINE BELOW\n1E37          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH DOT BELOW\n1E39          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH DOT BELOW AND MACRON\n1E3B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH LINE BELOW\n1E3D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW\n1E3F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER M WITH ACUTE\n1E41          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER M WITH DOT ABOVE\n1E43          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER M WITH DOT BELOW\n1E45          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH DOT ABOVE\n1E47          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH DOT BELOW\n1E49          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH LINE BELOW\n1E4B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW\n1E4D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH TILDE AND ACUTE\n1E4F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH TILDE AND DIAERESIS\n1E51          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH MACRON AND GRAVE\n1E53          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH MACRON AND ACUTE\n1E55          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH ACUTE\n1E57          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH DOT ABOVE\n1E59          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH DOT ABOVE\n1E5B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH DOT BELOW\n1E5D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH DOT BELOW AND MACRON\n1E5F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH LINE BELOW\n1E61          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH DOT ABOVE\n1E63          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH DOT BELOW\n1E65          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE\n1E67          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH CARON AND DOT ABOVE\n1E69          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE\n1E6B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH DOT ABOVE\n1E6D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH DOT BELOW\n1E6F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH LINE BELOW\n1E71          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW\n1E73          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DIAERESIS BELOW\n1E75          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH TILDE BELOW\n1E77          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW\n1E79          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH TILDE AND ACUTE\n1E7B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH MACRON AND DIAERESIS\n1E7D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER V WITH TILDE\n1E7F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER V WITH DOT BELOW\n1E81          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH GRAVE\n1E83          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH ACUTE\n1E85          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH DIAERESIS\n1E87          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH DOT ABOVE\n1E89          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH DOT BELOW\n1E8B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER X WITH DOT ABOVE\n1E8D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER X WITH DIAERESIS\n1E8F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH DOT ABOVE\n1E91          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH CIRCUMFLEX\n1E93          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH DOT BELOW\n1E95..1E9B    ; Changes_When_Uppercased # L&   [7] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE\n1EA1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH DOT BELOW\n1EA3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH HOOK ABOVE\n1EA5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE\n1EA7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE\n1EA9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE\n1EAB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE\n1EAD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW\n1EAF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH BREVE AND ACUTE\n1EB1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH BREVE AND GRAVE\n1EB3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE\n1EB5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH BREVE AND TILDE\n1EB7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER A WITH BREVE AND DOT BELOW\n1EB9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH DOT BELOW\n1EBB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH HOOK ABOVE\n1EBD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH TILDE\n1EBF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE\n1EC1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE\n1EC3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE\n1EC5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE\n1EC7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW\n1EC9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH HOOK ABOVE\n1ECB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER I WITH DOT BELOW\n1ECD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH DOT BELOW\n1ECF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HOOK ABOVE\n1ED1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE\n1ED3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE\n1ED5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE\n1ED7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE\n1ED9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW\n1EDB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HORN AND ACUTE\n1EDD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HORN AND GRAVE\n1EDF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE\n1EE1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HORN AND TILDE\n1EE3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH HORN AND DOT BELOW\n1EE5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH DOT BELOW\n1EE7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HOOK ABOVE\n1EE9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HORN AND ACUTE\n1EEB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HORN AND GRAVE\n1EED          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE\n1EEF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HORN AND TILDE\n1EF1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH HORN AND DOT BELOW\n1EF3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH GRAVE\n1EF5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH DOT BELOW\n1EF7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH HOOK ABOVE\n1EF9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Y WITH TILDE\n1EFB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER MIDDLE-WELSH LL\n1EFD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER MIDDLE-WELSH V\n1EFF..1F07    ; Changes_When_Uppercased # L&   [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI\n1F10..1F15    ; Changes_When_Uppercased # L&   [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F27    ; Changes_When_Uppercased # L&   [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI\n1F30..1F37    ; Changes_When_Uppercased # L&   [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI\n1F40..1F45    ; Changes_When_Uppercased # L&   [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; Changes_When_Uppercased # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F60..1F67    ; Changes_When_Uppercased # L&   [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI\n1F70..1F7D    ; Changes_When_Uppercased # L&  [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1FB4    ; Changes_When_Uppercased # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FB7    ; Changes_When_Uppercased # L&   [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI\n1FBC          ; Changes_When_Uppercased # L&       GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBE          ; Changes_When_Uppercased # L&       GREEK PROSGEGRAMMENI\n1FC2..1FC4    ; Changes_When_Uppercased # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FC7    ; Changes_When_Uppercased # L&   [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI\n1FCC          ; Changes_When_Uppercased # L&       GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FD0..1FD3    ; Changes_When_Uppercased # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FD7    ; Changes_When_Uppercased # L&   [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI\n1FE0..1FE7    ; Changes_When_Uppercased # L&   [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI\n1FF2..1FF4    ; Changes_When_Uppercased # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FF7    ; Changes_When_Uppercased # L&   [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI\n1FFC          ; Changes_When_Uppercased # L&       GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n214E          ; Changes_When_Uppercased # L&       TURNED SMALL F\n2170..217F    ; Changes_When_Uppercased # Nl  [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND\n2184          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER REVERSED C\n24D0..24E9    ; Changes_When_Uppercased # So  [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z\n2C30..2C5F    ; Changes_When_Uppercased # L&  [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI\n2C61          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH DOUBLE BAR\n2C65..2C66    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE\n2C68          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER H WITH DESCENDER\n2C6A          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH DESCENDER\n2C6C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Z WITH DESCENDER\n2C73          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER W WITH HOOK\n2C76          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER HALF H\n2C81          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER ALFA\n2C83          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER VIDA\n2C85          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER GAMMA\n2C87          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER DALDA\n2C89          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER EIE\n2C8B          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER SOU\n2C8D          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER ZATA\n2C8F          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER HATE\n2C91          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER THETHE\n2C93          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER IAUDA\n2C95          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER KAPA\n2C97          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER LAULA\n2C99          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER MI\n2C9B          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER NI\n2C9D          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER KSI\n2C9F          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER O\n2CA1          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER PI\n2CA3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER RO\n2CA5          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER SIMA\n2CA7          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER TAU\n2CA9          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER UA\n2CAB          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER FI\n2CAD          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER KHI\n2CAF          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER PSI\n2CB1          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OOU\n2CB3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER DIALECT-P ALEF\n2CB5          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC AIN\n2CB7          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC EIE\n2CB9          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER DIALECT-P KAPA\n2CBB          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER DIALECT-P NI\n2CBD          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC NI\n2CBF          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC OOU\n2CC1          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER SAMPI\n2CC3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER CROSSED SHEI\n2CC5          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC SHEI\n2CC7          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC ESH\n2CC9          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER AKHMIMIC KHEI\n2CCB          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER DIALECT-P HORI\n2CCD          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC HORI\n2CCF          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC HA\n2CD1          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER L-SHAPED HA\n2CD3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC HEI\n2CD5          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC HAT\n2CD7          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC GANGIA\n2CD9          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC DJA\n2CDB          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD COPTIC SHIMA\n2CDD          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD NUBIAN SHIMA\n2CDF          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD NUBIAN NGI\n2CE1          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD NUBIAN NYI\n2CE3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER OLD NUBIAN WAU\n2CEC          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI\n2CEE          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CF3          ; Changes_When_Uppercased # L&       COPTIC SMALL LETTER BOHAIRIC KHEI\n2D00..2D25    ; Changes_When_Uppercased # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; Changes_When_Uppercased # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; Changes_When_Uppercased # L&       GEORGIAN SMALL LETTER AEN\nA641          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZEMLYA\nA643          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DZELO\nA645          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER REVERSED DZE\nA647          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTA\nA649          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DJERV\nA64B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER MONOGRAPH UK\nA64D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BROAD OMEGA\nA64F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER NEUTRAL YER\nA651          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER YERU WITH BACK YER\nA653          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTIFIED YAT\nA655          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER REVERSED YU\nA657          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTIFIED A\nA659          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER CLOSED LITTLE YUS\nA65B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BLENDED YUS\nA65D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS\nA65F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER YN\nA661          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER REVERSED TSE\nA663          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SOFT DE\nA665          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SOFT EL\nA667          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SOFT EM\nA669          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER MONOCULAR O\nA66B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER BINOCULAR O\nA66D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA681          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DWE\nA683          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DZWE\nA685          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER ZHWE\nA687          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER CCHE\nA689          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DZZE\nA68B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK\nA68D          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TWE\nA68F          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TSWE\nA691          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TSSE\nA693          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER TCHE\nA695          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER HWE\nA697          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER SHWE\nA699          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER DOUBLE O\nA69B          ; Changes_When_Uppercased # L&       CYRILLIC SMALL LETTER CROSSED O\nA723          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER EGYPTOLOGICAL ALEF\nA725          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER EGYPTOLOGICAL AIN\nA727          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER HENG\nA729          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TZ\nA72B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TRESILLO\nA72D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER CUATRILLO\nA72F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER CUATRILLO WITH COMMA\nA733          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AA\nA735          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AO\nA737          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AU\nA739          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AV\nA73B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AV WITH HORIZONTAL BAR\nA73D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER AY\nA73F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER REVERSED C WITH DOT\nA741          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH STROKE\nA743          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH DIAGONAL STROKE\nA745          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE\nA747          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER BROKEN L\nA749          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER L WITH HIGH STROKE\nA74B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH LONG STROKE OVERLAY\nA74D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER O WITH LOOP\nA74F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER OO\nA751          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER\nA753          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH FLOURISH\nA755          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER P WITH SQUIRREL TAIL\nA757          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER\nA759          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER Q WITH DIAGONAL STROKE\nA75B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R ROTUNDA\nA75D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER RUM ROTUNDA\nA75F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER V WITH DIAGONAL STROKE\nA761          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER VY\nA763          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER VISIGOTHIC Z\nA765          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER THORN WITH STROKE\nA767          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER\nA769          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER VEND\nA76B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER ET\nA76D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER IS\nA76F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER CON\nA77A          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER INSULAR D\nA77C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER INSULAR F\nA77F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TURNED INSULAR G\nA781          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER TURNED L\nA783          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER INSULAR R\nA785          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER INSULAR S\nA787          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER INSULAR T\nA78C          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER SALTILLO\nA791          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH DESCENDER\nA793..A794    ; Changes_When_Uppercased # L&   [2] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER C WITH PALATAL HOOK\nA797          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER B WITH FLOURISH\nA799          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER F WITH STROKE\nA79B          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER VOLAPUK AE\nA79D          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER VOLAPUK OE\nA79F          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER VOLAPUK UE\nA7A1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER G WITH OBLIQUE STROKE\nA7A3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER K WITH OBLIQUE STROKE\nA7A5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER N WITH OBLIQUE STROKE\nA7A7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER R WITH OBLIQUE STROKE\nA7A9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH OBLIQUE STROKE\nA7B5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER BETA\nA7B7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER OMEGA\nA7B9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER U WITH STROKE\nA7BB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER GLOTTAL A\nA7BD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER GLOTTAL I\nA7BF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER GLOTTAL U\nA7C1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER OLD POLISH O\nA7C3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER ANGLICANA W\nA7C8          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY\nA7CA          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY\nA7CD          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER S WITH DIAGONAL STROKE\nA7CF          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE\nA7D1          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER CLOSED INSULAR G\nA7D3          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER DOUBLE THORN\nA7D5          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER DOUBLE WYNN\nA7D7          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER MIDDLE SCOTS S\nA7D9          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER SIGMOID S\nA7DB          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER LAMBDA\nA7F6          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER REVERSED HALF H\nAB53          ; Changes_When_Uppercased # L&       LATIN SMALL LETTER CHI\nAB70..ABBF    ; Changes_When_Uppercased # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nFB00..FB06    ; Changes_When_Uppercased # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; Changes_When_Uppercased # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFF41..FF5A    ; Changes_When_Uppercased # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\n10428..1044F  ; Changes_When_Uppercased # L&  [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW\n104D8..104FB  ; Changes_When_Uppercased # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10597..105A1  ; Changes_When_Uppercased # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; Changes_When_Uppercased # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; Changes_When_Uppercased # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; Changes_When_Uppercased # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n10CC0..10CF2  ; Changes_When_Uppercased # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10D70..10D85  ; Changes_When_Uppercased # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n118C0..118DF  ; Changes_When_Uppercased # L&  [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n16E60..16E7F  ; Changes_When_Uppercased # L&  [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16EBB..16ED3  ; Changes_When_Uppercased # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n1E922..1E943  ; Changes_When_Uppercased # L&  [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA\n\n# Total code points: 1580\n\n# ================================================\n\n# Derived Property:   Changes_When_Titlecased (CWT)\n#  Characters whose normalized forms are not stable under a toTitlecase mapping.\n#  For more information, see the definition of \"isTitlecase(X)\"\n#  in the \"Conformance\" / \"Default Case Algorithms\" section of the core specification.\n#  Changes_When_Titlecased(X) is true when toTitlecase(toNFD(X)) != toNFD(X)\n\n0061..007A    ; Changes_When_Titlecased # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00B5          ; Changes_When_Titlecased # L&       MICRO SIGN\n00DF..00F6    ; Changes_When_Titlecased # L&  [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..00FF    ; Changes_When_Titlecased # L&   [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS\n0101          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH MACRON\n0103          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH BREVE\n0105          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH OGONEK\n0107          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH ACUTE\n0109          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH CIRCUMFLEX\n010B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH DOT ABOVE\n010D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH CARON\n010F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH CARON\n0111          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH STROKE\n0113          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH MACRON\n0115          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH BREVE\n0117          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH DOT ABOVE\n0119          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH OGONEK\n011B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CARON\n011D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH CIRCUMFLEX\n011F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH BREVE\n0121          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH DOT ABOVE\n0123          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH CEDILLA\n0125          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH CIRCUMFLEX\n0127          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH STROKE\n0129          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH TILDE\n012B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH MACRON\n012D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH BREVE\n012F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH OGONEK\n0131          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER DOTLESS I\n0133          ; Changes_When_Titlecased # L&       LATIN SMALL LIGATURE IJ\n0135          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER J WITH CIRCUMFLEX\n0137          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH CEDILLA\n013A          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH ACUTE\n013C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH CEDILLA\n013E          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH CARON\n0140          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH MIDDLE DOT\n0142          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH STROKE\n0144          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH ACUTE\n0146          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH CEDILLA\n0148..0149    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE\n014B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER ENG\n014D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH MACRON\n014F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH BREVE\n0151          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH DOUBLE ACUTE\n0153          ; Changes_When_Titlecased # L&       LATIN SMALL LIGATURE OE\n0155          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH ACUTE\n0157          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH CEDILLA\n0159          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH CARON\n015B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH ACUTE\n015D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH CIRCUMFLEX\n015F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH CEDILLA\n0161          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH CARON\n0163          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH CEDILLA\n0165          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH CARON\n0167          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH STROKE\n0169          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH TILDE\n016B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH MACRON\n016D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH BREVE\n016F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH RING ABOVE\n0171          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DOUBLE ACUTE\n0173          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH OGONEK\n0175          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH CIRCUMFLEX\n0177          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH CIRCUMFLEX\n017A          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH ACUTE\n017C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH DOT ABOVE\n017E..0180    ; Changes_When_Titlecased # L&   [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE\n0183          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER B WITH TOPBAR\n0185          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TONE SIX\n0188          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH HOOK\n018C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH TOPBAR\n0192          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER F WITH HOOK\n0195          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER HV\n0199..019B    ; Changes_When_Titlecased # L&   [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE\n019E          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH LONG RIGHT LEG\n01A1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HORN\n01A3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER OI\n01A5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH HOOK\n01A8          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TONE TWO\n01AD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH HOOK\n01B0          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HORN\n01B4          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH HOOK\n01B6          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH STROKE\n01B9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER EZH REVERSED\n01BD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TONE FIVE\n01BF          ; Changes_When_Titlecased # L&       LATIN LETTER WYNN\n01C4          ; Changes_When_Titlecased # L&       LATIN CAPITAL LETTER DZ WITH CARON\n01C6..01C7    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER DZ WITH CARON..LATIN CAPITAL LETTER LJ\n01C9..01CA    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER LJ..LATIN CAPITAL LETTER NJ\n01CC          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER NJ\n01CE          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH CARON\n01D0          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH CARON\n01D2          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH CARON\n01D4          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH CARON\n01D6          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DIAERESIS AND MACRON\n01D8          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE\n01DA          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DIAERESIS AND CARON\n01DC..01DD    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E\n01DF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH DIAERESIS AND MACRON\n01E1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON\n01E3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AE WITH MACRON\n01E5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH STROKE\n01E7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH CARON\n01E9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH CARON\n01EB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH OGONEK\n01ED          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH OGONEK AND MACRON\n01EF..01F1    ; Changes_When_Titlecased # L&   [3] LATIN SMALL LETTER EZH WITH CARON..LATIN CAPITAL LETTER DZ\n01F3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER DZ\n01F5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH ACUTE\n01F9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH GRAVE\n01FB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE\n01FD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AE WITH ACUTE\n01FF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH STROKE AND ACUTE\n0201          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH DOUBLE GRAVE\n0203          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH INVERTED BREVE\n0205          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH DOUBLE GRAVE\n0207          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH INVERTED BREVE\n0209          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH DOUBLE GRAVE\n020B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH INVERTED BREVE\n020D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH DOUBLE GRAVE\n020F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH INVERTED BREVE\n0211          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH DOUBLE GRAVE\n0213          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH INVERTED BREVE\n0215          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DOUBLE GRAVE\n0217          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH INVERTED BREVE\n0219          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH COMMA BELOW\n021B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH COMMA BELOW\n021D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER YOGH\n021F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH CARON\n0223          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER OU\n0225          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH HOOK\n0227          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH DOT ABOVE\n0229          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CEDILLA\n022B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH DIAERESIS AND MACRON\n022D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH TILDE AND MACRON\n022F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH DOT ABOVE\n0231          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON\n0233          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH MACRON\n023C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH STROKE\n023F..0240    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL\n0242          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER GLOTTAL STOP\n0247          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH STROKE\n0249          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER J WITH STROKE\n024B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Q WITH HOOK TAIL\n024D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH STROKE\n024F..0254    ; Changes_When_Titlecased # L&   [6] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER OPEN O\n0256..0257    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK\n0259          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER SCHWA\n025B..025C    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER OPEN E..LATIN SMALL LETTER REVERSED OPEN E\n0260..0261    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER G WITH HOOK..LATIN SMALL LETTER SCRIPT G\n0263..0266    ; Changes_When_Titlecased # L&   [4] LATIN SMALL LETTER GAMMA..LATIN SMALL LETTER H WITH HOOK\n0268..026C    ; Changes_When_Titlecased # L&   [5] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER L WITH BELT\n026F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TURNED M\n0271..0272    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK\n0275          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER BARRED O\n027D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH TAIL\n0280          ; Changes_When_Titlecased # L&       LATIN LETTER SMALL CAPITAL R\n0282..0283    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER S WITH HOOK..LATIN SMALL LETTER ESH\n0287..028C    ; Changes_When_Titlecased # L&   [6] LATIN SMALL LETTER TURNED T..LATIN SMALL LETTER TURNED V\n0292          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER EZH\n029D..029E    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER J WITH CROSSED-TAIL..LATIN SMALL LETTER TURNED K\n0345          ; Changes_When_Titlecased # Mn       COMBINING GREEK YPOGEGRAMMENI\n0371          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER HETA\n0373          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER ARCHAIC SAMPI\n0377          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037B..037D    ; Changes_When_Titlecased # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n0390          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS\n03AC..03CE    ; Changes_When_Titlecased # L&  [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS\n03D0..03D1    ; Changes_When_Titlecased # L&   [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL\n03D5..03D7    ; Changes_When_Titlecased # L&   [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL\n03D9          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER ARCHAIC KOPPA\n03DB          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER STIGMA\n03DD          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER DIGAMMA\n03DF          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER KOPPA\n03E1          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER SAMPI\n03E3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER SHEI\n03E5          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER FEI\n03E7          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER KHEI\n03E9          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER HORI\n03EB          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER GANGIA\n03ED          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER SHIMA\n03EF..03F3    ; Changes_When_Titlecased # L&   [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT\n03F5          ; Changes_When_Titlecased # L&       GREEK LUNATE EPSILON SYMBOL\n03F8          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER SHO\n03FB          ; Changes_When_Titlecased # L&       GREEK SMALL LETTER SAN\n0430..045F    ; Changes_When_Titlecased # L&  [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE\n0461          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER OMEGA\n0463          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER YAT\n0465          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTIFIED E\n0467          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER LITTLE YUS\n0469          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS\n046B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BIG YUS\n046D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTIFIED BIG YUS\n046F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KSI\n0471          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER PSI\n0473          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER FITA\n0475          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IZHITSA\n0477          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT\n0479          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER UK\n047B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ROUND OMEGA\n047D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER OMEGA WITH TITLO\n047F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER OT\n0481          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOPPA\n048B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SHORT I WITH TAIL\n048D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SEMISOFT SIGN\n048F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ER WITH TICK\n0491          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER GHE WITH UPTURN\n0493          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER GHE WITH STROKE\n0495          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK\n0497          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZHE WITH DESCENDER\n0499          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZE WITH DESCENDER\n049B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KA WITH DESCENDER\n049D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE\n049F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KA WITH STROKE\n04A1          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BASHKIR KA\n04A3          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EN WITH DESCENDER\n04A5          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LIGATURE EN GHE\n04A7          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK\n04A9          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ABKHASIAN HA\n04AB          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ES WITH DESCENDER\n04AD          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TE WITH DESCENDER\n04AF          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER STRAIGHT U\n04B1          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE\n04B3          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER HA WITH DESCENDER\n04B5          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LIGATURE TE TSE\n04B7          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER CHE WITH DESCENDER\n04B9          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE\n04BB          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SHHA\n04BD          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ABKHASIAN CHE\n04BF          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER\n04C2          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZHE WITH BREVE\n04C4          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KA WITH HOOK\n04C6          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EL WITH TAIL\n04C8          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EN WITH HOOK\n04CA          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EN WITH TAIL\n04CC          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KHAKASSIAN CHE\n04CE..04CF    ; Changes_When_Titlecased # L&   [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA\n04D1          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER A WITH BREVE\n04D3          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER A WITH DIAERESIS\n04D5          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LIGATURE A IE\n04D7          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IE WITH BREVE\n04D9          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SCHWA\n04DB          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS\n04DD          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZHE WITH DIAERESIS\n04DF          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZE WITH DIAERESIS\n04E1          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ABKHASIAN DZE\n04E3          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER I WITH MACRON\n04E5          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER I WITH DIAERESIS\n04E7          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER O WITH DIAERESIS\n04E9          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BARRED O\n04EB          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS\n04ED          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER E WITH DIAERESIS\n04EF          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER U WITH MACRON\n04F1          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER U WITH DIAERESIS\n04F3          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE\n04F5          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER CHE WITH DIAERESIS\n04F7          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER GHE WITH DESCENDER\n04F9          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER YERU WITH DIAERESIS\n04FB          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK\n04FD          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER HA WITH HOOK\n04FF          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER HA WITH STROKE\n0501          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI DE\n0503          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI DJE\n0505          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI ZJE\n0507          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI DZJE\n0509          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI LJE\n050B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI NJE\n050D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI SJE\n050F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER KOMI TJE\n0511          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER REVERSED ZE\n0513          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EL WITH HOOK\n0515          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER LHA\n0517          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER RHA\n0519          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER YAE\n051B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER QA\n051D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER WE\n051F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ALEUT KA\n0521          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK\n0523          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK\n0525          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER PE WITH DESCENDER\n0527          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SHHA WITH DESCENDER\n0529          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EN WITH LEFT HOOK\n052B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DZZHE\n052D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DCHE\n052F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER EL WITH DESCENDER\n0561..0587    ; Changes_When_Titlecased # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN\n13F8..13FD    ; Changes_When_Titlecased # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1C80..1C88    ; Changes_When_Titlecased # L&   [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK\n1C8A          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TJE\n1D79          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER INSULAR G\n1D7D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH STROKE\n1D8E          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH PALATAL HOOK\n1E01          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH RING BELOW\n1E03          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER B WITH DOT ABOVE\n1E05          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER B WITH DOT BELOW\n1E07          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER B WITH LINE BELOW\n1E09          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER C WITH CEDILLA AND ACUTE\n1E0B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH DOT ABOVE\n1E0D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH DOT BELOW\n1E0F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH LINE BELOW\n1E11          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH CEDILLA\n1E13          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW\n1E15          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH MACRON AND GRAVE\n1E17          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH MACRON AND ACUTE\n1E19          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW\n1E1B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH TILDE BELOW\n1E1D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CEDILLA AND BREVE\n1E1F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER F WITH DOT ABOVE\n1E21          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH MACRON\n1E23          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH DOT ABOVE\n1E25          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH DOT BELOW\n1E27          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH DIAERESIS\n1E29          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH CEDILLA\n1E2B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH BREVE BELOW\n1E2D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH TILDE BELOW\n1E2F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE\n1E31          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH ACUTE\n1E33          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH DOT BELOW\n1E35          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH LINE BELOW\n1E37          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH DOT BELOW\n1E39          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH DOT BELOW AND MACRON\n1E3B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH LINE BELOW\n1E3D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW\n1E3F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER M WITH ACUTE\n1E41          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER M WITH DOT ABOVE\n1E43          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER M WITH DOT BELOW\n1E45          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH DOT ABOVE\n1E47          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH DOT BELOW\n1E49          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH LINE BELOW\n1E4B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW\n1E4D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH TILDE AND ACUTE\n1E4F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH TILDE AND DIAERESIS\n1E51          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH MACRON AND GRAVE\n1E53          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH MACRON AND ACUTE\n1E55          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH ACUTE\n1E57          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH DOT ABOVE\n1E59          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH DOT ABOVE\n1E5B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH DOT BELOW\n1E5D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH DOT BELOW AND MACRON\n1E5F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH LINE BELOW\n1E61          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH DOT ABOVE\n1E63          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH DOT BELOW\n1E65          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE\n1E67          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH CARON AND DOT ABOVE\n1E69          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE\n1E6B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH DOT ABOVE\n1E6D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH DOT BELOW\n1E6F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH LINE BELOW\n1E71          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW\n1E73          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DIAERESIS BELOW\n1E75          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH TILDE BELOW\n1E77          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW\n1E79          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH TILDE AND ACUTE\n1E7B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH MACRON AND DIAERESIS\n1E7D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER V WITH TILDE\n1E7F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER V WITH DOT BELOW\n1E81          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH GRAVE\n1E83          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH ACUTE\n1E85          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH DIAERESIS\n1E87          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH DOT ABOVE\n1E89          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH DOT BELOW\n1E8B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER X WITH DOT ABOVE\n1E8D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER X WITH DIAERESIS\n1E8F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH DOT ABOVE\n1E91          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH CIRCUMFLEX\n1E93          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH DOT BELOW\n1E95..1E9B    ; Changes_When_Titlecased # L&   [7] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE\n1EA1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH DOT BELOW\n1EA3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH HOOK ABOVE\n1EA5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE\n1EA7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE\n1EA9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE\n1EAB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE\n1EAD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW\n1EAF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH BREVE AND ACUTE\n1EB1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH BREVE AND GRAVE\n1EB3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE\n1EB5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH BREVE AND TILDE\n1EB7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER A WITH BREVE AND DOT BELOW\n1EB9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH DOT BELOW\n1EBB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH HOOK ABOVE\n1EBD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH TILDE\n1EBF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE\n1EC1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE\n1EC3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE\n1EC5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE\n1EC7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW\n1EC9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH HOOK ABOVE\n1ECB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER I WITH DOT BELOW\n1ECD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH DOT BELOW\n1ECF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HOOK ABOVE\n1ED1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE\n1ED3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE\n1ED5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE\n1ED7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE\n1ED9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW\n1EDB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HORN AND ACUTE\n1EDD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HORN AND GRAVE\n1EDF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE\n1EE1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HORN AND TILDE\n1EE3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH HORN AND DOT BELOW\n1EE5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH DOT BELOW\n1EE7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HOOK ABOVE\n1EE9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HORN AND ACUTE\n1EEB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HORN AND GRAVE\n1EED          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE\n1EEF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HORN AND TILDE\n1EF1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH HORN AND DOT BELOW\n1EF3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH GRAVE\n1EF5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH DOT BELOW\n1EF7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH HOOK ABOVE\n1EF9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Y WITH TILDE\n1EFB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER MIDDLE-WELSH LL\n1EFD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER MIDDLE-WELSH V\n1EFF..1F07    ; Changes_When_Titlecased # L&   [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI\n1F10..1F15    ; Changes_When_Titlecased # L&   [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F27    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI\n1F30..1F37    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI\n1F40..1F45    ; Changes_When_Titlecased # L&   [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F60..1F67    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI\n1F70..1F7D    ; Changes_When_Titlecased # L&  [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1F87    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI\n1F90..1F97    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI\n1FA0..1FA7    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI\n1FB0..1FB4    ; Changes_When_Titlecased # L&   [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FB7    ; Changes_When_Titlecased # L&   [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI\n1FBE          ; Changes_When_Titlecased # L&       GREEK PROSGEGRAMMENI\n1FC2..1FC4    ; Changes_When_Titlecased # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FC7    ; Changes_When_Titlecased # L&   [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI\n1FD0..1FD3    ; Changes_When_Titlecased # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FD7    ; Changes_When_Titlecased # L&   [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI\n1FE0..1FE7    ; Changes_When_Titlecased # L&   [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI\n1FF2..1FF4    ; Changes_When_Titlecased # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FF7    ; Changes_When_Titlecased # L&   [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI\n214E          ; Changes_When_Titlecased # L&       TURNED SMALL F\n2170..217F    ; Changes_When_Titlecased # Nl  [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND\n2184          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER REVERSED C\n24D0..24E9    ; Changes_When_Titlecased # So  [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z\n2C30..2C5F    ; Changes_When_Titlecased # L&  [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI\n2C61          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH DOUBLE BAR\n2C65..2C66    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE\n2C68          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER H WITH DESCENDER\n2C6A          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH DESCENDER\n2C6C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Z WITH DESCENDER\n2C73          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER W WITH HOOK\n2C76          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER HALF H\n2C81          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER ALFA\n2C83          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER VIDA\n2C85          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER GAMMA\n2C87          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER DALDA\n2C89          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER EIE\n2C8B          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER SOU\n2C8D          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER ZATA\n2C8F          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER HATE\n2C91          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER THETHE\n2C93          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER IAUDA\n2C95          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER KAPA\n2C97          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER LAULA\n2C99          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER MI\n2C9B          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER NI\n2C9D          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER KSI\n2C9F          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER O\n2CA1          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER PI\n2CA3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER RO\n2CA5          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER SIMA\n2CA7          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER TAU\n2CA9          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER UA\n2CAB          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER FI\n2CAD          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER KHI\n2CAF          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER PSI\n2CB1          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OOU\n2CB3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER DIALECT-P ALEF\n2CB5          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC AIN\n2CB7          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC EIE\n2CB9          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER DIALECT-P KAPA\n2CBB          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER DIALECT-P NI\n2CBD          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC NI\n2CBF          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC OOU\n2CC1          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER SAMPI\n2CC3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER CROSSED SHEI\n2CC5          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC SHEI\n2CC7          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC ESH\n2CC9          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER AKHMIMIC KHEI\n2CCB          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER DIALECT-P HORI\n2CCD          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC HORI\n2CCF          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC HA\n2CD1          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER L-SHAPED HA\n2CD3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC HEI\n2CD5          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC HAT\n2CD7          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC GANGIA\n2CD9          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC DJA\n2CDB          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD COPTIC SHIMA\n2CDD          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD NUBIAN SHIMA\n2CDF          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD NUBIAN NGI\n2CE1          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD NUBIAN NYI\n2CE3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER OLD NUBIAN WAU\n2CEC          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI\n2CEE          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CF3          ; Changes_When_Titlecased # L&       COPTIC SMALL LETTER BOHAIRIC KHEI\n2D00..2D25    ; Changes_When_Titlecased # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; Changes_When_Titlecased # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; Changes_When_Titlecased # L&       GEORGIAN SMALL LETTER AEN\nA641          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZEMLYA\nA643          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DZELO\nA645          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER REVERSED DZE\nA647          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTA\nA649          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DJERV\nA64B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER MONOGRAPH UK\nA64D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BROAD OMEGA\nA64F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER NEUTRAL YER\nA651          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER YERU WITH BACK YER\nA653          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTIFIED YAT\nA655          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER REVERSED YU\nA657          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTIFIED A\nA659          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER CLOSED LITTLE YUS\nA65B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BLENDED YUS\nA65D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS\nA65F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER YN\nA661          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER REVERSED TSE\nA663          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SOFT DE\nA665          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SOFT EL\nA667          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SOFT EM\nA669          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER MONOCULAR O\nA66B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER BINOCULAR O\nA66D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA681          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DWE\nA683          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DZWE\nA685          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER ZHWE\nA687          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER CCHE\nA689          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DZZE\nA68B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK\nA68D          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TWE\nA68F          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TSWE\nA691          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TSSE\nA693          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER TCHE\nA695          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER HWE\nA697          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER SHWE\nA699          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER DOUBLE O\nA69B          ; Changes_When_Titlecased # L&       CYRILLIC SMALL LETTER CROSSED O\nA723          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER EGYPTOLOGICAL ALEF\nA725          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER EGYPTOLOGICAL AIN\nA727          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER HENG\nA729          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TZ\nA72B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TRESILLO\nA72D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER CUATRILLO\nA72F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER CUATRILLO WITH COMMA\nA733          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AA\nA735          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AO\nA737          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AU\nA739          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AV\nA73B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AV WITH HORIZONTAL BAR\nA73D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER AY\nA73F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER REVERSED C WITH DOT\nA741          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH STROKE\nA743          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH DIAGONAL STROKE\nA745          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE\nA747          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER BROKEN L\nA749          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER L WITH HIGH STROKE\nA74B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH LONG STROKE OVERLAY\nA74D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER O WITH LOOP\nA74F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER OO\nA751          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER\nA753          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH FLOURISH\nA755          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER P WITH SQUIRREL TAIL\nA757          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER\nA759          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER Q WITH DIAGONAL STROKE\nA75B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R ROTUNDA\nA75D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER RUM ROTUNDA\nA75F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER V WITH DIAGONAL STROKE\nA761          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER VY\nA763          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER VISIGOTHIC Z\nA765          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER THORN WITH STROKE\nA767          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER\nA769          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER VEND\nA76B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER ET\nA76D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER IS\nA76F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER CON\nA77A          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER INSULAR D\nA77C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER INSULAR F\nA77F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TURNED INSULAR G\nA781          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER TURNED L\nA783          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER INSULAR R\nA785          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER INSULAR S\nA787          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER INSULAR T\nA78C          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER SALTILLO\nA791          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH DESCENDER\nA793..A794    ; Changes_When_Titlecased # L&   [2] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER C WITH PALATAL HOOK\nA797          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER B WITH FLOURISH\nA799          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER F WITH STROKE\nA79B          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER VOLAPUK AE\nA79D          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER VOLAPUK OE\nA79F          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER VOLAPUK UE\nA7A1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER G WITH OBLIQUE STROKE\nA7A3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER K WITH OBLIQUE STROKE\nA7A5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER N WITH OBLIQUE STROKE\nA7A7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER R WITH OBLIQUE STROKE\nA7A9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH OBLIQUE STROKE\nA7B5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER BETA\nA7B7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER OMEGA\nA7B9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER U WITH STROKE\nA7BB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER GLOTTAL A\nA7BD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER GLOTTAL I\nA7BF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER GLOTTAL U\nA7C1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER OLD POLISH O\nA7C3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER ANGLICANA W\nA7C8          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY\nA7CA          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY\nA7CD          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER S WITH DIAGONAL STROKE\nA7CF          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE\nA7D1          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER CLOSED INSULAR G\nA7D3          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER DOUBLE THORN\nA7D5          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER DOUBLE WYNN\nA7D7          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER MIDDLE SCOTS S\nA7D9          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER SIGMOID S\nA7DB          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER LAMBDA\nA7F6          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER REVERSED HALF H\nAB53          ; Changes_When_Titlecased # L&       LATIN SMALL LETTER CHI\nAB70..ABBF    ; Changes_When_Titlecased # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nFB00..FB06    ; Changes_When_Titlecased # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; Changes_When_Titlecased # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFF41..FF5A    ; Changes_When_Titlecased # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\n10428..1044F  ; Changes_When_Titlecased # L&  [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW\n104D8..104FB  ; Changes_When_Titlecased # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10597..105A1  ; Changes_When_Titlecased # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; Changes_When_Titlecased # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; Changes_When_Titlecased # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; Changes_When_Titlecased # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n10CC0..10CF2  ; Changes_When_Titlecased # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10D70..10D85  ; Changes_When_Titlecased # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n118C0..118DF  ; Changes_When_Titlecased # L&  [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n16E60..16E7F  ; Changes_When_Titlecased # L&  [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16EBB..16ED3  ; Changes_When_Titlecased # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n1E922..1E943  ; Changes_When_Titlecased # L&  [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA\n\n# Total code points: 1507\n\n# ================================================\n\n# Derived Property:   Changes_When_Casefolded (CWCF)\n#  Characters whose normalized forms are not stable under case folding.\n#  For more information, see the definition of \"isCasefolded(X)\"\n#  in the \"Conformance\" / \"Default Case Algorithms\" section of the core specification.\n#  Changes_When_Casefolded(X) is true when toCasefold(toNFD(X)) != toNFD(X)\n\n0041..005A    ; Changes_When_Casefolded # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n00B5          ; Changes_When_Casefolded # L&       MICRO SIGN\n00C0..00D6    ; Changes_When_Casefolded # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00DF    ; Changes_When_Casefolded # L&   [8] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER SHARP S\n0100          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH MACRON\n0102          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH BREVE\n0104          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH OGONEK\n0106          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER C WITH ACUTE\n0108          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER C WITH CIRCUMFLEX\n010A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER C WITH DOT ABOVE\n010C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER C WITH CARON\n010E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH CARON\n0110          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH STROKE\n0112          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH MACRON\n0114          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH BREVE\n0116          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH DOT ABOVE\n0118          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH OGONEK\n011A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CARON\n011C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH CIRCUMFLEX\n011E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH BREVE\n0120          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH DOT ABOVE\n0122          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH CEDILLA\n0124          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH CIRCUMFLEX\n0126          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH STROKE\n0128          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH TILDE\n012A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH MACRON\n012C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH BREVE\n012E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH OGONEK\n0130          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH DOT ABOVE\n0132          ; Changes_When_Casefolded # L&       LATIN CAPITAL LIGATURE IJ\n0134          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER J WITH CIRCUMFLEX\n0136          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH CEDILLA\n0139          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH ACUTE\n013B          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH CEDILLA\n013D          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH CARON\n013F          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH MIDDLE DOT\n0141          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH STROKE\n0143          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH ACUTE\n0145          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH CEDILLA\n0147          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH CARON\n0149..014A    ; Changes_When_Casefolded # L&   [2] LATIN SMALL LETTER N PRECEDED BY APOSTROPHE..LATIN CAPITAL LETTER ENG\n014C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH MACRON\n014E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH BREVE\n0150          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH DOUBLE ACUTE\n0152          ; Changes_When_Casefolded # L&       LATIN CAPITAL LIGATURE OE\n0154          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH ACUTE\n0156          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH CEDILLA\n0158          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH CARON\n015A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH ACUTE\n015C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH CIRCUMFLEX\n015E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH CEDILLA\n0160          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH CARON\n0162          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH CEDILLA\n0164          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH CARON\n0166          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH STROKE\n0168          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH TILDE\n016A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH MACRON\n016C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH BREVE\n016E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH RING ABOVE\n0170          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DOUBLE ACUTE\n0172          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH OGONEK\n0174          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH CIRCUMFLEX\n0176          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH CIRCUMFLEX\n0178..0179    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE\n017B          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH DOT ABOVE\n017D          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH CARON\n017F          ; Changes_When_Casefolded # L&       LATIN SMALL LETTER LONG S\n0181..0182    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR\n0184          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER TONE SIX\n0186..0187    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK\n0189..018B    ; Changes_When_Casefolded # L&   [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR\n018E..0191    ; Changes_When_Casefolded # L&   [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK\n0193..0194    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA\n0196..0198    ; Changes_When_Casefolded # L&   [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK\n019C..019D    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK\n019F..01A0    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN\n01A2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER OI\n01A4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER P WITH HOOK\n01A6..01A7    ; Changes_When_Casefolded # L&   [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO\n01A9          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER ESH\n01AC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH HOOK\n01AE..01AF    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN\n01B1..01B3    ; Changes_When_Casefolded # L&   [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK\n01B5          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH STROKE\n01B7..01B8    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED\n01BC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER TONE FIVE\n01C4..01C5    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON\n01C7..01C8    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER LJ..LATIN CAPITAL LETTER L WITH SMALL LETTER J\n01CA..01CB    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER NJ..LATIN CAPITAL LETTER N WITH SMALL LETTER J\n01CD          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH CARON\n01CF          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH CARON\n01D1          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH CARON\n01D3          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH CARON\n01D5          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON\n01D7          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE\n01D9          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON\n01DB          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE\n01DE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON\n01E0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON\n01E2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AE WITH MACRON\n01E4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH STROKE\n01E6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH CARON\n01E8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH CARON\n01EA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH OGONEK\n01EC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH OGONEK AND MACRON\n01EE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER EZH WITH CARON\n01F1..01F2    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER DZ..LATIN CAPITAL LETTER D WITH SMALL LETTER Z\n01F4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH ACUTE\n01F6..01F8    ; Changes_When_Casefolded # L&   [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE\n01FA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE\n01FC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AE WITH ACUTE\n01FE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH STROKE AND ACUTE\n0200          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH DOUBLE GRAVE\n0202          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH INVERTED BREVE\n0204          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH DOUBLE GRAVE\n0206          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH INVERTED BREVE\n0208          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH DOUBLE GRAVE\n020A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH INVERTED BREVE\n020C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH DOUBLE GRAVE\n020E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH INVERTED BREVE\n0210          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH DOUBLE GRAVE\n0212          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH INVERTED BREVE\n0214          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DOUBLE GRAVE\n0216          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH INVERTED BREVE\n0218          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH COMMA BELOW\n021A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH COMMA BELOW\n021C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER YOGH\n021E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH CARON\n0220          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH LONG RIGHT LEG\n0222          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER OU\n0224          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH HOOK\n0226          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH DOT ABOVE\n0228          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CEDILLA\n022A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON\n022C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH TILDE AND MACRON\n022E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH DOT ABOVE\n0230          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON\n0232          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH MACRON\n023A..023B    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE\n023D..023E    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE\n0241          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER GLOTTAL STOP\n0243..0246    ; Changes_When_Casefolded # L&   [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE\n0248          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER J WITH STROKE\n024A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL\n024C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH STROKE\n024E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH STROKE\n0345          ; Changes_When_Casefolded # Mn       COMBINING GREEK YPOGEGRAMMENI\n0370          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER HETA\n0372          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER ARCHAIC SAMPI\n0376          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA\n037F          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER YOT\n0386          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0388..038A    ; Changes_When_Casefolded # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..038F    ; Changes_When_Casefolded # L&   [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS\n0391..03A1    ; Changes_When_Casefolded # L&  [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO\n03A3..03AB    ; Changes_When_Casefolded # L&   [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA\n03C2          ; Changes_When_Casefolded # L&       GREEK SMALL LETTER FINAL SIGMA\n03CF..03D1    ; Changes_When_Casefolded # L&   [3] GREEK CAPITAL KAI SYMBOL..GREEK THETA SYMBOL\n03D5..03D6    ; Changes_When_Casefolded # L&   [2] GREEK PHI SYMBOL..GREEK PI SYMBOL\n03D8          ; Changes_When_Casefolded # L&       GREEK LETTER ARCHAIC KOPPA\n03DA          ; Changes_When_Casefolded # L&       GREEK LETTER STIGMA\n03DC          ; Changes_When_Casefolded # L&       GREEK LETTER DIGAMMA\n03DE          ; Changes_When_Casefolded # L&       GREEK LETTER KOPPA\n03E0          ; Changes_When_Casefolded # L&       GREEK LETTER SAMPI\n03E2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER SHEI\n03E4          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER FEI\n03E6          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER KHEI\n03E8          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER HORI\n03EA          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER GANGIA\n03EC          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER SHIMA\n03EE          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER DEI\n03F0..03F1    ; Changes_When_Casefolded # L&   [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL\n03F4..03F5    ; Changes_When_Casefolded # L&   [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL\n03F7          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER SHO\n03F9..03FA    ; Changes_When_Casefolded # L&   [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN\n03FD..042F    ; Changes_When_Casefolded # L&  [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA\n0460          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER OMEGA\n0462          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER YAT\n0464          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTIFIED E\n0466          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER LITTLE YUS\n0468          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS\n046A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BIG YUS\n046C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS\n046E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KSI\n0470          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER PSI\n0472          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER FITA\n0474          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IZHITSA\n0476          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT\n0478          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER UK\n047A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ROUND OMEGA\n047C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER OMEGA WITH TITLO\n047E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER OT\n0480          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOPPA\n048A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SHORT I WITH TAIL\n048C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SEMISOFT SIGN\n048E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ER WITH TICK\n0490          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER GHE WITH UPTURN\n0492          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE\n0494          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK\n0496          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER\n0498          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ZE WITH DESCENDER\n049A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KA WITH DESCENDER\n049C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE\n049E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KA WITH STROKE\n04A0          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BASHKIR KA\n04A2          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EN WITH DESCENDER\n04A4          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LIGATURE EN GHE\n04A6          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK\n04A8          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ABKHASIAN HA\n04AA          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ES WITH DESCENDER\n04AC          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER TE WITH DESCENDER\n04AE          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER STRAIGHT U\n04B0          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE\n04B2          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER HA WITH DESCENDER\n04B4          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LIGATURE TE TSE\n04B6          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER CHE WITH DESCENDER\n04B8          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE\n04BA          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SHHA\n04BC          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE\n04BE          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER\n04C0..04C1    ; Changes_When_Casefolded # L&   [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE\n04C3          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KA WITH HOOK\n04C5          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EL WITH TAIL\n04C7          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EN WITH HOOK\n04C9          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EN WITH TAIL\n04CB          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KHAKASSIAN CHE\n04CD          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EM WITH TAIL\n04D0          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER A WITH BREVE\n04D2          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER A WITH DIAERESIS\n04D4          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LIGATURE A IE\n04D6          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IE WITH BREVE\n04D8          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SCHWA\n04DA          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS\n04DC          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS\n04DE          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS\n04E0          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ABKHASIAN DZE\n04E2          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER I WITH MACRON\n04E4          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER I WITH DIAERESIS\n04E6          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER O WITH DIAERESIS\n04E8          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BARRED O\n04EA          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS\n04EC          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER E WITH DIAERESIS\n04EE          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER U WITH MACRON\n04F0          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER U WITH DIAERESIS\n04F2          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE\n04F4          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS\n04F6          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER GHE WITH DESCENDER\n04F8          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS\n04FA          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK\n04FC          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER HA WITH HOOK\n04FE          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER HA WITH STROKE\n0500          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI DE\n0502          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI DJE\n0504          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI ZJE\n0506          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI DZJE\n0508          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI LJE\n050A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI NJE\n050C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI SJE\n050E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER KOMI TJE\n0510          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER REVERSED ZE\n0512          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EL WITH HOOK\n0514          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER LHA\n0516          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER RHA\n0518          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER YAE\n051A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER QA\n051C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER WE\n051E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ALEUT KA\n0520          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK\n0522          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK\n0524          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER PE WITH DESCENDER\n0526          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER\n0528          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK\n052A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DZZHE\n052C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DCHE\n052E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER EL WITH DESCENDER\n0531..0556    ; Changes_When_Casefolded # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n0587          ; Changes_When_Casefolded # L&       ARMENIAN SMALL LIGATURE ECH YIWN\n10A0..10C5    ; Changes_When_Casefolded # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; Changes_When_Casefolded # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; Changes_When_Casefolded # L&       GEORGIAN CAPITAL LETTER AEN\n13F8..13FD    ; Changes_When_Casefolded # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1C80..1C89    ; Changes_When_Casefolded # L&  [10] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC CAPITAL LETTER TJE\n1C90..1CBA    ; Changes_When_Casefolded # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; Changes_When_Casefolded # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1E00          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH RING BELOW\n1E02          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER B WITH DOT ABOVE\n1E04          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER B WITH DOT BELOW\n1E06          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER B WITH LINE BELOW\n1E08          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE\n1E0A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH DOT ABOVE\n1E0C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH DOT BELOW\n1E0E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH LINE BELOW\n1E10          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH CEDILLA\n1E12          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW\n1E14          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH MACRON AND GRAVE\n1E16          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH MACRON AND ACUTE\n1E18          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW\n1E1A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH TILDE BELOW\n1E1C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE\n1E1E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER F WITH DOT ABOVE\n1E20          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH MACRON\n1E22          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH DOT ABOVE\n1E24          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH DOT BELOW\n1E26          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH DIAERESIS\n1E28          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH CEDILLA\n1E2A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH BREVE BELOW\n1E2C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH TILDE BELOW\n1E2E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE\n1E30          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH ACUTE\n1E32          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH DOT BELOW\n1E34          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH LINE BELOW\n1E36          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH DOT BELOW\n1E38          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON\n1E3A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH LINE BELOW\n1E3C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW\n1E3E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER M WITH ACUTE\n1E40          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER M WITH DOT ABOVE\n1E42          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER M WITH DOT BELOW\n1E44          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH DOT ABOVE\n1E46          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH DOT BELOW\n1E48          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH LINE BELOW\n1E4A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW\n1E4C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH TILDE AND ACUTE\n1E4E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS\n1E50          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH MACRON AND GRAVE\n1E52          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH MACRON AND ACUTE\n1E54          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER P WITH ACUTE\n1E56          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER P WITH DOT ABOVE\n1E58          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH DOT ABOVE\n1E5A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH DOT BELOW\n1E5C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON\n1E5E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH LINE BELOW\n1E60          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH DOT ABOVE\n1E62          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH DOT BELOW\n1E64          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE\n1E66          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE\n1E68          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE\n1E6A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH DOT ABOVE\n1E6C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH DOT BELOW\n1E6E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH LINE BELOW\n1E70          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW\n1E72          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DIAERESIS BELOW\n1E74          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH TILDE BELOW\n1E76          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW\n1E78          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH TILDE AND ACUTE\n1E7A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS\n1E7C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER V WITH TILDE\n1E7E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER V WITH DOT BELOW\n1E80          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH GRAVE\n1E82          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH ACUTE\n1E84          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH DIAERESIS\n1E86          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH DOT ABOVE\n1E88          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH DOT BELOW\n1E8A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER X WITH DOT ABOVE\n1E8C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER X WITH DIAERESIS\n1E8E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH DOT ABOVE\n1E90          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH CIRCUMFLEX\n1E92          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH DOT BELOW\n1E94          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH LINE BELOW\n1E9A..1E9B    ; Changes_When_Casefolded # L&   [2] LATIN SMALL LETTER A WITH RIGHT HALF RING..LATIN SMALL LETTER LONG S WITH DOT ABOVE\n1E9E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER SHARP S\n1EA0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH DOT BELOW\n1EA2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH HOOK ABOVE\n1EA4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE\n1EA6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE\n1EA8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE\n1EAA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE\n1EAC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW\n1EAE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH BREVE AND ACUTE\n1EB0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH BREVE AND GRAVE\n1EB2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE\n1EB4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH BREVE AND TILDE\n1EB6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW\n1EB8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH DOT BELOW\n1EBA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH HOOK ABOVE\n1EBC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH TILDE\n1EBE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE\n1EC0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE\n1EC2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE\n1EC4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE\n1EC6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW\n1EC8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH HOOK ABOVE\n1ECA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER I WITH DOT BELOW\n1ECC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH DOT BELOW\n1ECE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH HOOK ABOVE\n1ED0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE\n1ED2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE\n1ED4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE\n1ED6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE\n1ED8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW\n1EDA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH HORN AND ACUTE\n1EDC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH HORN AND GRAVE\n1EDE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE\n1EE0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH HORN AND TILDE\n1EE2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW\n1EE4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH DOT BELOW\n1EE6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH HOOK ABOVE\n1EE8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH HORN AND ACUTE\n1EEA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH HORN AND GRAVE\n1EEC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE\n1EEE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH HORN AND TILDE\n1EF0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW\n1EF2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH GRAVE\n1EF4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH DOT BELOW\n1EF6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH HOOK ABOVE\n1EF8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH TILDE\n1EFA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER MIDDLE-WELSH LL\n1EFC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER MIDDLE-WELSH V\n1EFE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Y WITH LOOP\n1F08..1F0F    ; Changes_When_Casefolded # L&   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI\n1F18..1F1D    ; Changes_When_Casefolded # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F28..1F2F    ; Changes_When_Casefolded # L&   [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI\n1F38..1F3F    ; Changes_When_Casefolded # L&   [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI\n1F48..1F4D    ; Changes_When_Casefolded # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F59          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F          ; Changes_When_Casefolded # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F68..1F6F    ; Changes_When_Casefolded # L&   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI\n1F80..1FAF    ; Changes_When_Casefolded # L&  [48] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1FB2..1FB4    ; Changes_When_Casefolded # L&   [3] GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB7..1FBC    ; Changes_When_Casefolded # L&   [6] GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FC2..1FC4    ; Changes_When_Casefolded # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC7..1FCC    ; Changes_When_Casefolded # L&   [6] GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FD8..1FDB    ; Changes_When_Casefolded # L&   [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE8..1FEC    ; Changes_When_Casefolded # L&   [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FF2..1FF4    ; Changes_When_Casefolded # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF7..1FFC    ; Changes_When_Casefolded # L&   [6] GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n2126          ; Changes_When_Casefolded # L&       OHM SIGN\n212A..212B    ; Changes_When_Casefolded # L&   [2] KELVIN SIGN..ANGSTROM SIGN\n2132          ; Changes_When_Casefolded # L&       TURNED CAPITAL F\n2160..216F    ; Changes_When_Casefolded # Nl  [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND\n2183          ; Changes_When_Casefolded # L&       ROMAN NUMERAL REVERSED ONE HUNDRED\n24B6..24CF    ; Changes_When_Casefolded # So  [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z\n2C00..2C2F    ; Changes_When_Casefolded # L&  [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI\n2C60          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH DOUBLE BAR\n2C62..2C64    ; Changes_When_Casefolded # L&   [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL\n2C67          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER H WITH DESCENDER\n2C69          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH DESCENDER\n2C6B          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Z WITH DESCENDER\n2C6D..2C70    ; Changes_When_Casefolded # L&   [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA\n2C72          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER W WITH HOOK\n2C75          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER HALF H\n2C7E..2C80    ; Changes_When_Casefolded # L&   [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA\n2C82          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER VIDA\n2C84          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER GAMMA\n2C86          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER DALDA\n2C88          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER EIE\n2C8A          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER SOU\n2C8C          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER ZATA\n2C8E          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER HATE\n2C90          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER THETHE\n2C92          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER IAUDA\n2C94          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER KAPA\n2C96          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER LAULA\n2C98          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER MI\n2C9A          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER NI\n2C9C          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER KSI\n2C9E          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER O\n2CA0          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER PI\n2CA2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER RO\n2CA4          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER SIMA\n2CA6          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER TAU\n2CA8          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER UA\n2CAA          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER FI\n2CAC          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER KHI\n2CAE          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER PSI\n2CB0          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OOU\n2CB2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER DIALECT-P ALEF\n2CB4          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC AIN\n2CB6          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE\n2CB8          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER DIALECT-P KAPA\n2CBA          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER DIALECT-P NI\n2CBC          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI\n2CBE          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC OOU\n2CC0          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER SAMPI\n2CC2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER CROSSED SHEI\n2CC4          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC SHEI\n2CC6          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC ESH\n2CC8          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER AKHMIMIC KHEI\n2CCA          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER DIALECT-P HORI\n2CCC          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC HORI\n2CCE          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC HA\n2CD0          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER L-SHAPED HA\n2CD2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC HEI\n2CD4          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC HAT\n2CD6          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC GANGIA\n2CD8          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC DJA\n2CDA          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD COPTIC SHIMA\n2CDC          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD NUBIAN SHIMA\n2CDE          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD NUBIAN NGI\n2CE0          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD NUBIAN NYI\n2CE2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER OLD NUBIAN WAU\n2CEB          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI\n2CED          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA\n2CF2          ; Changes_When_Casefolded # L&       COPTIC CAPITAL LETTER BOHAIRIC KHEI\nA640          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ZEMLYA\nA642          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DZELO\nA644          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER REVERSED DZE\nA646          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTA\nA648          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DJERV\nA64A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER MONOGRAPH UK\nA64C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BROAD OMEGA\nA64E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER NEUTRAL YER\nA650          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER YERU WITH BACK YER\nA652          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTIFIED YAT\nA654          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER REVERSED YU\nA656          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTIFIED A\nA658          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS\nA65A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BLENDED YUS\nA65C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS\nA65E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER YN\nA660          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER REVERSED TSE\nA662          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SOFT DE\nA664          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SOFT EL\nA666          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SOFT EM\nA668          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER MONOCULAR O\nA66A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER BINOCULAR O\nA66C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O\nA680          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DWE\nA682          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DZWE\nA684          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER ZHWE\nA686          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER CCHE\nA688          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DZZE\nA68A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK\nA68C          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER TWE\nA68E          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER TSWE\nA690          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER TSSE\nA692          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER TCHE\nA694          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER HWE\nA696          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER SHWE\nA698          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER DOUBLE O\nA69A          ; Changes_When_Casefolded # L&       CYRILLIC CAPITAL LETTER CROSSED O\nA722          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF\nA724          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER EGYPTOLOGICAL AIN\nA726          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER HENG\nA728          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER TZ\nA72A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER TRESILLO\nA72C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER CUATRILLO\nA72E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER CUATRILLO WITH COMMA\nA732          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AA\nA734          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AO\nA736          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AU\nA738          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AV\nA73A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR\nA73C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER AY\nA73E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER REVERSED C WITH DOT\nA740          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH STROKE\nA742          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH DIAGONAL STROKE\nA744          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE\nA746          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER BROKEN L\nA748          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER L WITH HIGH STROKE\nA74A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY\nA74C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER O WITH LOOP\nA74E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER OO\nA750          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER\nA752          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER P WITH FLOURISH\nA754          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER P WITH SQUIRREL TAIL\nA756          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER\nA758          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE\nA75A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R ROTUNDA\nA75C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER RUM ROTUNDA\nA75E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER V WITH DIAGONAL STROKE\nA760          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER VY\nA762          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER VISIGOTHIC Z\nA764          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER THORN WITH STROKE\nA766          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER\nA768          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER VEND\nA76A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER ET\nA76C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER IS\nA76E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER CON\nA779          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER INSULAR D\nA77B          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER INSULAR F\nA77D..A77E    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G\nA780          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER TURNED L\nA782          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER INSULAR R\nA784          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER INSULAR S\nA786          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER INSULAR T\nA78B          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER SALTILLO\nA78D          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER TURNED H\nA790          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH DESCENDER\nA792          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER C WITH BAR\nA796          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER B WITH FLOURISH\nA798          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER F WITH STROKE\nA79A          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER VOLAPUK AE\nA79C          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER VOLAPUK OE\nA79E          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER VOLAPUK UE\nA7A0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER G WITH OBLIQUE STROKE\nA7A2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER K WITH OBLIQUE STROKE\nA7A4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER N WITH OBLIQUE STROKE\nA7A6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER R WITH OBLIQUE STROKE\nA7A8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH OBLIQUE STROKE\nA7AA..A7AE    ; Changes_When_Casefolded # L&   [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I\nA7B0..A7B4    ; Changes_When_Casefolded # L&   [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA\nA7B6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER OMEGA\nA7B8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER U WITH STROKE\nA7BA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER GLOTTAL A\nA7BC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER GLOTTAL I\nA7BE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER GLOTTAL U\nA7C0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER OLD POLISH O\nA7C2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER ANGLICANA W\nA7C4..A7C7    ; Changes_When_Casefolded # L&   [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY\nA7C9          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY\nA7CB..A7CC    ; Changes_When_Casefolded # L&   [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE\nA7CE          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE\nA7D0          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER CLOSED INSULAR G\nA7D2          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER DOUBLE THORN\nA7D4          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER DOUBLE WYNN\nA7D6          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER MIDDLE SCOTS S\nA7D8          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER SIGMOID S\nA7DA          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER LAMBDA\nA7DC          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F5          ; Changes_When_Casefolded # L&       LATIN CAPITAL LETTER REVERSED HALF H\nAB70..ABBF    ; Changes_When_Casefolded # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nFB00..FB06    ; Changes_When_Casefolded # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; Changes_When_Casefolded # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFF21..FF3A    ; Changes_When_Casefolded # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\n10400..10427  ; Changes_When_Casefolded # L&  [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW\n104B0..104D3  ; Changes_When_Casefolded # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n10570..1057A  ; Changes_When_Casefolded # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; Changes_When_Casefolded # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; Changes_When_Casefolded # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; Changes_When_Casefolded # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10C80..10CB2  ; Changes_When_Casefolded # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10D50..10D65  ; Changes_When_Casefolded # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n118A0..118BF  ; Changes_When_Casefolded # L&  [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO\n16E40..16E5F  ; Changes_When_Casefolded # L&  [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y\n16EA0..16EB8  ; Changes_When_Casefolded # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n1E900..1E921  ; Changes_When_Casefolded # L&  [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA\n\n# Total code points: 1561\n\n# ================================================\n\n# Derived Property:   Changes_When_Casemapped (CWCM)\n#  Characters whose normalized forms are not stable under case mapping.\n#  For more information, see the definition of \"isCased(X)\"\n#  in the \"Conformance\" / \"Default Case Algorithms\" section of the core specification.\n#  Changes_When_Casemapped(X) is true when CWL(X), or CWT(X), or CWU(X)\n\n0041..005A    ; Changes_When_Casemapped # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n0061..007A    ; Changes_When_Casemapped # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00B5          ; Changes_When_Casemapped # L&       MICRO SIGN\n00C0..00D6    ; Changes_When_Casemapped # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00F6    ; Changes_When_Casemapped # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..0137    ; Changes_When_Casemapped # L&  [64] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER K WITH CEDILLA\n0139..018C    ; Changes_When_Casemapped # L&  [84] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER D WITH TOPBAR\n018E..01A9    ; Changes_When_Casemapped # L&  [28] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER ESH\n01AC..01B9    ; Changes_When_Casemapped # L&  [14] LATIN CAPITAL LETTER T WITH HOOK..LATIN SMALL LETTER EZH REVERSED\n01BC..01BD    ; Changes_When_Casemapped # L&   [2] LATIN CAPITAL LETTER TONE FIVE..LATIN SMALL LETTER TONE FIVE\n01BF          ; Changes_When_Casemapped # L&       LATIN LETTER WYNN\n01C4..0220    ; Changes_When_Casemapped # L&  [93] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER N WITH LONG RIGHT LEG\n0222..0233    ; Changes_When_Casemapped # L&  [18] LATIN CAPITAL LETTER OU..LATIN SMALL LETTER Y WITH MACRON\n023A..0254    ; Changes_When_Casemapped # L&  [27] LATIN CAPITAL LETTER A WITH STROKE..LATIN SMALL LETTER OPEN O\n0256..0257    ; Changes_When_Casemapped # L&   [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK\n0259          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER SCHWA\n025B..025C    ; Changes_When_Casemapped # L&   [2] LATIN SMALL LETTER OPEN E..LATIN SMALL LETTER REVERSED OPEN E\n0260..0261    ; Changes_When_Casemapped # L&   [2] LATIN SMALL LETTER G WITH HOOK..LATIN SMALL LETTER SCRIPT G\n0263..0266    ; Changes_When_Casemapped # L&   [4] LATIN SMALL LETTER GAMMA..LATIN SMALL LETTER H WITH HOOK\n0268..026C    ; Changes_When_Casemapped # L&   [5] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER L WITH BELT\n026F          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER TURNED M\n0271..0272    ; Changes_When_Casemapped # L&   [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK\n0275          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER BARRED O\n027D          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER R WITH TAIL\n0280          ; Changes_When_Casemapped # L&       LATIN LETTER SMALL CAPITAL R\n0282..0283    ; Changes_When_Casemapped # L&   [2] LATIN SMALL LETTER S WITH HOOK..LATIN SMALL LETTER ESH\n0287..028C    ; Changes_When_Casemapped # L&   [6] LATIN SMALL LETTER TURNED T..LATIN SMALL LETTER TURNED V\n0292          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER EZH\n029D..029E    ; Changes_When_Casemapped # L&   [2] LATIN SMALL LETTER J WITH CROSSED-TAIL..LATIN SMALL LETTER TURNED K\n0345          ; Changes_When_Casemapped # Mn       COMBINING GREEK YPOGEGRAMMENI\n0370..0373    ; Changes_When_Casemapped # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI\n0376..0377    ; Changes_When_Casemapped # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037B..037D    ; Changes_When_Casemapped # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n037F          ; Changes_When_Casemapped # L&       GREEK CAPITAL LETTER YOT\n0386          ; Changes_When_Casemapped # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0388..038A    ; Changes_When_Casemapped # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; Changes_When_Casemapped # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..03A1    ; Changes_When_Casemapped # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO\n03A3..03D1    ; Changes_When_Casemapped # L&  [47] GREEK CAPITAL LETTER SIGMA..GREEK THETA SYMBOL\n03D5..03F5    ; Changes_When_Casemapped # L&  [33] GREEK PHI SYMBOL..GREEK LUNATE EPSILON SYMBOL\n03F7..03FB    ; Changes_When_Casemapped # L&   [5] GREEK CAPITAL LETTER SHO..GREEK SMALL LETTER SAN\n03FD..0481    ; Changes_When_Casemapped # L& [133] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC SMALL LETTER KOPPA\n048A..052F    ; Changes_When_Casemapped # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER\n0531..0556    ; Changes_When_Casemapped # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n0561..0587    ; Changes_When_Casemapped # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN\n10A0..10C5    ; Changes_When_Casemapped # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; Changes_When_Casemapped # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; Changes_When_Casemapped # L&       GEORGIAN CAPITAL LETTER AEN\n10D0..10FA    ; Changes_When_Casemapped # L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FD..10FF    ; Changes_When_Casemapped # L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n13A0..13F5    ; Changes_When_Casemapped # L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n13F8..13FD    ; Changes_When_Casemapped # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1C80..1C8A    ; Changes_When_Casemapped # L&  [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE\n1C90..1CBA    ; Changes_When_Casemapped # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; Changes_When_Casemapped # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1D79          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER INSULAR G\n1D7D          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER P WITH STROKE\n1D8E          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER Z WITH PALATAL HOOK\n1E00..1E9B    ; Changes_When_Casemapped # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE\n1E9E          ; Changes_When_Casemapped # L&       LATIN CAPITAL LETTER SHARP S\n1EA0..1F15    ; Changes_When_Casemapped # L& [118] LATIN CAPITAL LETTER A WITH DOT BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F18..1F1D    ; Changes_When_Casemapped # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F45    ; Changes_When_Casemapped # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F48..1F4D    ; Changes_When_Casemapped # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; Changes_When_Casemapped # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F59          ; Changes_When_Casemapped # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; Changes_When_Casemapped # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; Changes_When_Casemapped # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F..1F7D    ; Changes_When_Casemapped # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1FB4    ; Changes_When_Casemapped # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FBC    ; Changes_When_Casemapped # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBE          ; Changes_When_Casemapped # L&       GREEK PROSGEGRAMMENI\n1FC2..1FC4    ; Changes_When_Casemapped # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FCC    ; Changes_When_Casemapped # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FD0..1FD3    ; Changes_When_Casemapped # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FDB    ; Changes_When_Casemapped # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE0..1FEC    ; Changes_When_Casemapped # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FF2..1FF4    ; Changes_When_Casemapped # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FFC    ; Changes_When_Casemapped # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n2126          ; Changes_When_Casemapped # L&       OHM SIGN\n212A..212B    ; Changes_When_Casemapped # L&   [2] KELVIN SIGN..ANGSTROM SIGN\n2132          ; Changes_When_Casemapped # L&       TURNED CAPITAL F\n214E          ; Changes_When_Casemapped # L&       TURNED SMALL F\n2160..217F    ; Changes_When_Casemapped # Nl  [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND\n2183..2184    ; Changes_When_Casemapped # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C\n24B6..24E9    ; Changes_When_Casemapped # So  [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z\n2C00..2C70    ; Changes_When_Casemapped # L& [113] GLAGOLITIC CAPITAL LETTER AZU..LATIN CAPITAL LETTER TURNED ALPHA\n2C72..2C73    ; Changes_When_Casemapped # L&   [2] LATIN CAPITAL LETTER W WITH HOOK..LATIN SMALL LETTER W WITH HOOK\n2C75..2C76    ; Changes_When_Casemapped # L&   [2] LATIN CAPITAL LETTER HALF H..LATIN SMALL LETTER HALF H\n2C7E..2CE3    ; Changes_When_Casemapped # L& [102] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SMALL LETTER OLD NUBIAN WAU\n2CEB..2CEE    ; Changes_When_Casemapped # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CF2..2CF3    ; Changes_When_Casemapped # L&   [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI\n2D00..2D25    ; Changes_When_Casemapped # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; Changes_When_Casemapped # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; Changes_When_Casemapped # L&       GEORGIAN SMALL LETTER AEN\nA640..A66D    ; Changes_When_Casemapped # L&  [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA680..A69B    ; Changes_When_Casemapped # L&  [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O\nA722..A72F    ; Changes_When_Casemapped # L&  [14] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CUATRILLO WITH COMMA\nA732..A76F    ; Changes_When_Casemapped # L&  [62] LATIN CAPITAL LETTER AA..LATIN SMALL LETTER CON\nA779..A787    ; Changes_When_Casemapped # L&  [15] LATIN CAPITAL LETTER INSULAR D..LATIN SMALL LETTER INSULAR T\nA78B..A78D    ; Changes_When_Casemapped # L&   [3] LATIN CAPITAL LETTER SALTILLO..LATIN CAPITAL LETTER TURNED H\nA790..A794    ; Changes_When_Casemapped # L&   [5] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER C WITH PALATAL HOOK\nA796..A7AE    ; Changes_When_Casemapped # L&  [25] LATIN CAPITAL LETTER B WITH FLOURISH..LATIN CAPITAL LETTER SMALL CAPITAL I\nA7B0..A7DC    ; Changes_When_Casemapped # L&  [45] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F5..A7F6    ; Changes_When_Casemapped # L&   [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H\nAB53          ; Changes_When_Casemapped # L&       LATIN SMALL LETTER CHI\nAB70..ABBF    ; Changes_When_Casemapped # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nFB00..FB06    ; Changes_When_Casemapped # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; Changes_When_Casemapped # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFF21..FF3A    ; Changes_When_Casemapped # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\nFF41..FF5A    ; Changes_When_Casemapped # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\n10400..1044F  ; Changes_When_Casemapped # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW\n104B0..104D3  ; Changes_When_Casemapped # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n104D8..104FB  ; Changes_When_Casemapped # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10570..1057A  ; Changes_When_Casemapped # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; Changes_When_Casemapped # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; Changes_When_Casemapped # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; Changes_When_Casemapped # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10597..105A1  ; Changes_When_Casemapped # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; Changes_When_Casemapped # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; Changes_When_Casemapped # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; Changes_When_Casemapped # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n10C80..10CB2  ; Changes_When_Casemapped # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10CC0..10CF2  ; Changes_When_Casemapped # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10D50..10D65  ; Changes_When_Casemapped # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n10D70..10D85  ; Changes_When_Casemapped # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n118A0..118DF  ; Changes_When_Casemapped # L&  [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n16E40..16E7F  ; Changes_When_Casemapped # L&  [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16EA0..16EB8  ; Changes_When_Casemapped # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n16EBB..16ED3  ; Changes_When_Casemapped # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n1E900..1E943  ; Changes_When_Casemapped # L&  [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA\n\n# Total code points: 3037\n\n# ================================================\n\n# Derived Property: ID_Start\n#  Characters that can start an identifier.\n#  Generated from:\n#      Lu + Ll + Lt + Lm + Lo + Nl\n#    + Other_ID_Start\n#    - Pattern_Syntax\n#    - Pattern_White_Space\n#  NOTE: See UAX #31 for more information\n\n0041..005A    ; ID_Start # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n0061..007A    ; ID_Start # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00AA          ; ID_Start # Lo       FEMININE ORDINAL INDICATOR\n00B5          ; ID_Start # L&       MICRO SIGN\n00BA          ; ID_Start # Lo       MASCULINE ORDINAL INDICATOR\n00C0..00D6    ; ID_Start # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00F6    ; ID_Start # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..01BA    ; ID_Start # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL\n01BB          ; ID_Start # Lo       LATIN LETTER TWO WITH STROKE\n01BC..01BF    ; ID_Start # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN\n01C0..01C3    ; ID_Start # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK\n01C4..0293    ; ID_Start # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL\n0294..0295    ; ID_Start # Lo   [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE\n0296..02AF    ; ID_Start # L&  [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL\n02B0..02C1    ; ID_Start # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP\n02C6..02D1    ; ID_Start # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON\n02E0..02E4    ; ID_Start # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n02EC          ; ID_Start # Lm       MODIFIER LETTER VOICING\n02EE          ; ID_Start # Lm       MODIFIER LETTER DOUBLE APOSTROPHE\n0370..0373    ; ID_Start # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI\n0374          ; ID_Start # Lm       GREEK NUMERAL SIGN\n0376..0377    ; ID_Start # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037A          ; ID_Start # Lm       GREEK YPOGEGRAMMENI\n037B..037D    ; ID_Start # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n037F          ; ID_Start # L&       GREEK CAPITAL LETTER YOT\n0386          ; ID_Start # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0388..038A    ; ID_Start # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; ID_Start # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..03A1    ; ID_Start # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO\n03A3..03F5    ; ID_Start # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL\n03F7..0481    ; ID_Start # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA\n048A..052F    ; ID_Start # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER\n0531..0556    ; ID_Start # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n0559          ; ID_Start # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING\n0560..0588    ; ID_Start # L&  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE\n05D0..05EA    ; ID_Start # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV\n05EF..05F2    ; ID_Start # Lo   [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD\n0620..063F    ; ID_Start # Lo  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE\n0640          ; ID_Start # Lm       ARABIC TATWEEL\n0641..064A    ; ID_Start # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH\n066E..066F    ; ID_Start # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF\n0671..06D3    ; ID_Start # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n06D5          ; ID_Start # Lo       ARABIC LETTER AE\n06E5..06E6    ; ID_Start # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH\n06EE..06EF    ; ID_Start # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V\n06FA..06FC    ; ID_Start # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW\n06FF          ; ID_Start # Lo       ARABIC LETTER HEH WITH INVERTED V\n0710          ; ID_Start # Lo       SYRIAC LETTER ALAPH\n0712..072F    ; ID_Start # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH\n074D..07A5    ; ID_Start # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU\n07B1          ; ID_Start # Lo       THAANA LETTER NAA\n07CA..07EA    ; ID_Start # Lo  [33] NKO LETTER A..NKO LETTER JONA RA\n07F4..07F5    ; ID_Start # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE\n07FA          ; ID_Start # Lm       NKO LAJANYALAN\n0800..0815    ; ID_Start # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF\n081A          ; ID_Start # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT\n0824          ; ID_Start # Lm       SAMARITAN MODIFIER LETTER SHORT A\n0828          ; ID_Start # Lm       SAMARITAN MODIFIER LETTER I\n0840..0858    ; ID_Start # Lo  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN\n0860..086A    ; ID_Start # Lo  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA\n0870..0887    ; ID_Start # Lo  [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT\n0889..088F    ; ID_Start # Lo   [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE\n08A0..08C8    ; ID_Start # Lo  [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF\n08C9          ; ID_Start # Lm       ARABIC SMALL FARSI YEH\n0904..0939    ; ID_Start # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA\n093D          ; ID_Start # Lo       DEVANAGARI SIGN AVAGRAHA\n0950          ; ID_Start # Lo       DEVANAGARI OM\n0958..0961    ; ID_Start # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL\n0971          ; ID_Start # Lm       DEVANAGARI SIGN HIGH SPACING DOT\n0972..0980    ; ID_Start # Lo  [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI\n0985..098C    ; ID_Start # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L\n098F..0990    ; ID_Start # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI\n0993..09A8    ; ID_Start # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA\n09AA..09B0    ; ID_Start # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA\n09B2          ; ID_Start # Lo       BENGALI LETTER LA\n09B6..09B9    ; ID_Start # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA\n09BD          ; ID_Start # Lo       BENGALI SIGN AVAGRAHA\n09CE          ; ID_Start # Lo       BENGALI LETTER KHANDA TA\n09DC..09DD    ; ID_Start # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA\n09DF..09E1    ; ID_Start # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL\n09F0..09F1    ; ID_Start # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL\n09FC          ; ID_Start # Lo       BENGALI LETTER VEDIC ANUSVARA\n0A05..0A0A    ; ID_Start # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU\n0A0F..0A10    ; ID_Start # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI\n0A13..0A28    ; ID_Start # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA\n0A2A..0A30    ; ID_Start # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA\n0A32..0A33    ; ID_Start # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA\n0A35..0A36    ; ID_Start # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA\n0A38..0A39    ; ID_Start # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA\n0A59..0A5C    ; ID_Start # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA\n0A5E          ; ID_Start # Lo       GURMUKHI LETTER FA\n0A72..0A74    ; ID_Start # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR\n0A85..0A8D    ; ID_Start # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E\n0A8F..0A91    ; ID_Start # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O\n0A93..0AA8    ; ID_Start # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA\n0AAA..0AB0    ; ID_Start # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA\n0AB2..0AB3    ; ID_Start # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA\n0AB5..0AB9    ; ID_Start # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA\n0ABD          ; ID_Start # Lo       GUJARATI SIGN AVAGRAHA\n0AD0          ; ID_Start # Lo       GUJARATI OM\n0AE0..0AE1    ; ID_Start # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL\n0AF9          ; ID_Start # Lo       GUJARATI LETTER ZHA\n0B05..0B0C    ; ID_Start # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L\n0B0F..0B10    ; ID_Start # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI\n0B13..0B28    ; ID_Start # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA\n0B2A..0B30    ; ID_Start # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA\n0B32..0B33    ; ID_Start # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA\n0B35..0B39    ; ID_Start # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA\n0B3D          ; ID_Start # Lo       ORIYA SIGN AVAGRAHA\n0B5C..0B5D    ; ID_Start # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA\n0B5F..0B61    ; ID_Start # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL\n0B71          ; ID_Start # Lo       ORIYA LETTER WA\n0B83          ; ID_Start # Lo       TAMIL SIGN VISARGA\n0B85..0B8A    ; ID_Start # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU\n0B8E..0B90    ; ID_Start # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI\n0B92..0B95    ; ID_Start # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA\n0B99..0B9A    ; ID_Start # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA\n0B9C          ; ID_Start # Lo       TAMIL LETTER JA\n0B9E..0B9F    ; ID_Start # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA\n0BA3..0BA4    ; ID_Start # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA\n0BA8..0BAA    ; ID_Start # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA\n0BAE..0BB9    ; ID_Start # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA\n0BD0          ; ID_Start # Lo       TAMIL OM\n0C05..0C0C    ; ID_Start # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L\n0C0E..0C10    ; ID_Start # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI\n0C12..0C28    ; ID_Start # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA\n0C2A..0C39    ; ID_Start # Lo  [16] TELUGU LETTER PA..TELUGU LETTER HA\n0C3D          ; ID_Start # Lo       TELUGU SIGN AVAGRAHA\n0C58..0C5A    ; ID_Start # Lo   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA\n0C5C..0C5D    ; ID_Start # Lo   [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU\n0C60..0C61    ; ID_Start # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL\n0C80          ; ID_Start # Lo       KANNADA SIGN SPACING CANDRABINDU\n0C85..0C8C    ; ID_Start # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L\n0C8E..0C90    ; ID_Start # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI\n0C92..0CA8    ; ID_Start # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA\n0CAA..0CB3    ; ID_Start # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA\n0CB5..0CB9    ; ID_Start # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA\n0CBD          ; ID_Start # Lo       KANNADA SIGN AVAGRAHA\n0CDC..0CDE    ; ID_Start # Lo   [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA\n0CE0..0CE1    ; ID_Start # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL\n0CF1..0CF2    ; ID_Start # Lo   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA\n0D04..0D0C    ; ID_Start # Lo   [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L\n0D0E..0D10    ; ID_Start # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI\n0D12..0D3A    ; ID_Start # Lo  [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA\n0D3D          ; ID_Start # Lo       MALAYALAM SIGN AVAGRAHA\n0D4E          ; ID_Start # Lo       MALAYALAM LETTER DOT REPH\n0D54..0D56    ; ID_Start # Lo   [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL\n0D5F..0D61    ; ID_Start # Lo   [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL\n0D7A..0D7F    ; ID_Start # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K\n0D85..0D96    ; ID_Start # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA\n0D9A..0DB1    ; ID_Start # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA\n0DB3..0DBB    ; ID_Start # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA\n0DBD          ; ID_Start # Lo       SINHALA LETTER DANTAJA LAYANNA\n0DC0..0DC6    ; ID_Start # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA\n0E01..0E30    ; ID_Start # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A\n0E32..0E33    ; ID_Start # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM\n0E40..0E45    ; ID_Start # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO\n0E46          ; ID_Start # Lm       THAI CHARACTER MAIYAMOK\n0E81..0E82    ; ID_Start # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG\n0E84          ; ID_Start # Lo       LAO LETTER KHO TAM\n0E86..0E8A    ; ID_Start # Lo   [5] LAO LETTER PALI GHA..LAO LETTER SO TAM\n0E8C..0EA3    ; ID_Start # Lo  [24] LAO LETTER PALI JHA..LAO LETTER LO LING\n0EA5          ; ID_Start # Lo       LAO LETTER LO LOOT\n0EA7..0EB0    ; ID_Start # Lo  [10] LAO LETTER WO..LAO VOWEL SIGN A\n0EB2..0EB3    ; ID_Start # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM\n0EBD          ; ID_Start # Lo       LAO SEMIVOWEL SIGN NYO\n0EC0..0EC4    ; ID_Start # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI\n0EC6          ; ID_Start # Lm       LAO KO LA\n0EDC..0EDF    ; ID_Start # Lo   [4] LAO HO NO..LAO LETTER KHMU NYO\n0F00          ; ID_Start # Lo       TIBETAN SYLLABLE OM\n0F40..0F47    ; ID_Start # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA\n0F49..0F6C    ; ID_Start # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA\n0F88..0F8C    ; ID_Start # Lo   [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN\n1000..102A    ; ID_Start # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU\n103F          ; ID_Start # Lo       MYANMAR LETTER GREAT SA\n1050..1055    ; ID_Start # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL\n105A..105D    ; ID_Start # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE\n1061          ; ID_Start # Lo       MYANMAR LETTER SGAW KAREN SHA\n1065..1066    ; ID_Start # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA\n106E..1070    ; ID_Start # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA\n1075..1081    ; ID_Start # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA\n108E          ; ID_Start # Lo       MYANMAR LETTER RUMAI PALAUNG FA\n10A0..10C5    ; ID_Start # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; ID_Start # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; ID_Start # L&       GEORGIAN CAPITAL LETTER AEN\n10D0..10FA    ; ID_Start # L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FC          ; ID_Start # Lm       MODIFIER LETTER GEORGIAN NAR\n10FD..10FF    ; ID_Start # L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n1100..1248    ; ID_Start # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA\n124A..124D    ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE\n1250..1256    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO\n1258          ; ID_Start # Lo       ETHIOPIC SYLLABLE QHWA\n125A..125D    ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE\n1260..1288    ; ID_Start # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA\n128A..128D    ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE\n1290..12B0    ; ID_Start # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA\n12B2..12B5    ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE\n12B8..12BE    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO\n12C0          ; ID_Start # Lo       ETHIOPIC SYLLABLE KXWA\n12C2..12C5    ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE\n12C8..12D6    ; ID_Start # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O\n12D8..1310    ; ID_Start # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA\n1312..1315    ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE\n1318..135A    ; ID_Start # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA\n1380..138F    ; ID_Start # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE\n13A0..13F5    ; ID_Start # L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n13F8..13FD    ; ID_Start # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1401..166C    ; ID_Start # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA\n166F..167F    ; ID_Start # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W\n1681..169A    ; ID_Start # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH\n16A0..16EA    ; ID_Start # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X\n16EE..16F0    ; ID_Start # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL\n16F1..16F8    ; ID_Start # Lo   [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC\n1700..1711    ; ID_Start # Lo  [18] TAGALOG LETTER A..TAGALOG LETTER HA\n171F..1731    ; ID_Start # Lo  [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA\n1740..1751    ; ID_Start # Lo  [18] BUHID LETTER A..BUHID LETTER HA\n1760..176C    ; ID_Start # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA\n176E..1770    ; ID_Start # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA\n1780..17B3    ; ID_Start # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU\n17D7          ; ID_Start # Lm       KHMER SIGN LEK TOO\n17DC          ; ID_Start # Lo       KHMER SIGN AVAKRAHASANYA\n1820..1842    ; ID_Start # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI\n1843          ; ID_Start # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN\n1844..1878    ; ID_Start # Lo  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS\n1880..1884    ; ID_Start # Lo   [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA\n1885..1886    ; ID_Start # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n1887..18A8    ; ID_Start # Lo  [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA\n18AA          ; ID_Start # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA\n18B0..18F5    ; ID_Start # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S\n1900..191E    ; ID_Start # Lo  [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA\n1950..196D    ; ID_Start # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI\n1970..1974    ; ID_Start # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6\n1980..19AB    ; ID_Start # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA\n19B0..19C9    ; ID_Start # Lo  [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2\n1A00..1A16    ; ID_Start # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA\n1A20..1A54    ; ID_Start # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA\n1AA7          ; ID_Start # Lm       TAI THAM SIGN MAI YAMOK\n1B05..1B33    ; ID_Start # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA\n1B45..1B4C    ; ID_Start # Lo   [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA\n1B83..1BA0    ; ID_Start # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA\n1BAE..1BAF    ; ID_Start # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA\n1BBA..1BE5    ; ID_Start # Lo  [44] SUNDANESE AVAGRAHA..BATAK LETTER U\n1C00..1C23    ; ID_Start # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A\n1C4D..1C4F    ; ID_Start # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA\n1C5A..1C77    ; ID_Start # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH\n1C78..1C7D    ; ID_Start # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD\n1C80..1C8A    ; ID_Start # L&  [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE\n1C90..1CBA    ; ID_Start # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; ID_Start # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1CE9..1CEC    ; ID_Start # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL\n1CEE..1CF3    ; ID_Start # Lo   [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA\n1CF5..1CF6    ; ID_Start # Lo   [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA\n1CFA          ; ID_Start # Lo       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA\n1D00..1D2B    ; ID_Start # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL\n1D2C..1D6A    ; ID_Start # Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D6B..1D77    ; ID_Start # L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G\n1D78          ; ID_Start # Lm       MODIFIER LETTER CYRILLIC EN\n1D79..1D9A    ; ID_Start # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK\n1D9B..1DBF    ; ID_Start # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA\n1E00..1F15    ; ID_Start # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F18..1F1D    ; ID_Start # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F45    ; ID_Start # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F48..1F4D    ; ID_Start # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; ID_Start # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F59          ; ID_Start # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; ID_Start # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; ID_Start # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F..1F7D    ; ID_Start # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1FB4    ; ID_Start # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FBC    ; ID_Start # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBE          ; ID_Start # L&       GREEK PROSGEGRAMMENI\n1FC2..1FC4    ; ID_Start # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FCC    ; ID_Start # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FD0..1FD3    ; ID_Start # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FDB    ; ID_Start # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE0..1FEC    ; ID_Start # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FF2..1FF4    ; ID_Start # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FFC    ; ID_Start # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n2071          ; ID_Start # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n207F          ; ID_Start # Lm       SUPERSCRIPT LATIN SMALL LETTER N\n2090..209C    ; ID_Start # Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n2102          ; ID_Start # L&       DOUBLE-STRUCK CAPITAL C\n2107          ; ID_Start # L&       EULER CONSTANT\n210A..2113    ; ID_Start # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L\n2115          ; ID_Start # L&       DOUBLE-STRUCK CAPITAL N\n2118          ; ID_Start # Sm       SCRIPT CAPITAL P\n2119..211D    ; ID_Start # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n2124          ; ID_Start # L&       DOUBLE-STRUCK CAPITAL Z\n2126          ; ID_Start # L&       OHM SIGN\n2128          ; ID_Start # L&       BLACK-LETTER CAPITAL Z\n212A..212D    ; ID_Start # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C\n212E          ; ID_Start # So       ESTIMATED SYMBOL\n212F..2134    ; ID_Start # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O\n2135..2138    ; ID_Start # Lo   [4] ALEF SYMBOL..DALET SYMBOL\n2139          ; ID_Start # L&       INFORMATION SOURCE\n213C..213F    ; ID_Start # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI\n2145..2149    ; ID_Start # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J\n214E          ; ID_Start # L&       TURNED SMALL F\n2160..2182    ; ID_Start # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND\n2183..2184    ; ID_Start # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C\n2185..2188    ; ID_Start # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND\n2C00..2C7B    ; ID_Start # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E\n2C7C..2C7D    ; ID_Start # Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\n2C7E..2CE4    ; ID_Start # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI\n2CEB..2CEE    ; ID_Start # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CF2..2CF3    ; ID_Start # L&   [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI\n2D00..2D25    ; ID_Start # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; ID_Start # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; ID_Start # L&       GEORGIAN SMALL LETTER AEN\n2D30..2D67    ; ID_Start # Lo  [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO\n2D6F          ; ID_Start # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK\n2D80..2D96    ; ID_Start # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE\n2DA0..2DA6    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO\n2DA8..2DAE    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO\n2DB0..2DB6    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO\n2DB8..2DBE    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO\n2DC0..2DC6    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO\n2DC8..2DCE    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO\n2DD0..2DD6    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO\n2DD8..2DDE    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO\n3005          ; ID_Start # Lm       IDEOGRAPHIC ITERATION MARK\n3006          ; ID_Start # Lo       IDEOGRAPHIC CLOSING MARK\n3007          ; ID_Start # Nl       IDEOGRAPHIC NUMBER ZERO\n3021..3029    ; ID_Start # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE\n3031..3035    ; ID_Start # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF\n3038..303A    ; ID_Start # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY\n303B          ; ID_Start # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK\n303C          ; ID_Start # Lo       MASU MARK\n3041..3096    ; ID_Start # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE\n309B..309C    ; ID_Start # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n309D..309E    ; ID_Start # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK\n309F          ; ID_Start # Lo       HIRAGANA DIGRAPH YORI\n30A1..30FA    ; ID_Start # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO\n30FC..30FE    ; ID_Start # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK\n30FF          ; ID_Start # Lo       KATAKANA DIGRAPH KOTO\n3105..312F    ; ID_Start # Lo  [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN\n3131..318E    ; ID_Start # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE\n31A0..31BF    ; ID_Start # Lo  [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH\n31F0..31FF    ; ID_Start # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO\n3400..4DBF    ; ID_Start # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF\n4E00..A014    ; ID_Start # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E\nA015          ; ID_Start # Lm       YI SYLLABLE WU\nA016..A48C    ; ID_Start # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR\nA4D0..A4F7    ; ID_Start # Lo  [40] LISU LETTER BA..LISU LETTER OE\nA4F8..A4FD    ; ID_Start # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU\nA500..A60B    ; ID_Start # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG\nA60C          ; ID_Start # Lm       VAI SYLLABLE LENGTHENER\nA610..A61F    ; ID_Start # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG\nA62A..A62B    ; ID_Start # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO\nA640..A66D    ; ID_Start # L&  [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA66E          ; ID_Start # Lo       CYRILLIC LETTER MULTIOCULAR O\nA67F          ; ID_Start # Lm       CYRILLIC PAYEROK\nA680..A69B    ; ID_Start # L&  [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O\nA69C..A69D    ; ID_Start # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA6A0..A6E5    ; ID_Start # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI\nA6E6..A6EF    ; ID_Start # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM\nA717..A71F    ; ID_Start # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK\nA722..A76F    ; ID_Start # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON\nA770          ; ID_Start # Lm       MODIFIER LETTER US\nA771..A787    ; ID_Start # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T\nA788          ; ID_Start # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT\nA78B..A78E    ; ID_Start # L&   [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT\nA78F          ; ID_Start # Lo       LATIN LETTER SINOLOGICAL DOT\nA790..A7DC    ; ID_Start # L&  [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F1..A7F4    ; ID_Start # Lm   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F5..A7F6    ; ID_Start # L&   [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H\nA7F7          ; ID_Start # Lo       LATIN EPIGRAPHIC LETTER SIDEWAYS I\nA7F8..A7F9    ; ID_Start # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA7FA          ; ID_Start # L&       LATIN LETTER SMALL CAPITAL TURNED M\nA7FB..A801    ; ID_Start # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I\nA803..A805    ; ID_Start # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O\nA807..A80A    ; ID_Start # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO\nA80C..A822    ; ID_Start # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO\nA840..A873    ; ID_Start # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU\nA882..A8B3    ; ID_Start # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA\nA8F2..A8F7    ; ID_Start # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA\nA8FB          ; ID_Start # Lo       DEVANAGARI HEADSTROKE\nA8FD..A8FE    ; ID_Start # Lo   [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY\nA90A..A925    ; ID_Start # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO\nA930..A946    ; ID_Start # Lo  [23] REJANG LETTER KA..REJANG LETTER A\nA960..A97C    ; ID_Start # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\nA984..A9B2    ; ID_Start # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA\nA9CF          ; ID_Start # Lm       JAVANESE PANGRANGKEP\nA9E0..A9E4    ; ID_Start # Lo   [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA\nA9E6          ; ID_Start # Lm       MYANMAR MODIFIER LETTER SHAN REDUPLICATION\nA9E7..A9EF    ; ID_Start # Lo   [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA\nA9FA..A9FE    ; ID_Start # Lo   [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA\nAA00..AA28    ; ID_Start # Lo  [41] CHAM LETTER A..CHAM LETTER HA\nAA40..AA42    ; ID_Start # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG\nAA44..AA4B    ; ID_Start # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS\nAA60..AA6F    ; ID_Start # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA\nAA70          ; ID_Start # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION\nAA71..AA76    ; ID_Start # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM\nAA7A          ; ID_Start # Lo       MYANMAR LETTER AITON RA\nAA7E..AAAF    ; ID_Start # Lo  [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O\nAAB1          ; ID_Start # Lo       TAI VIET VOWEL AA\nAAB5..AAB6    ; ID_Start # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O\nAAB9..AABD    ; ID_Start # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN\nAAC0          ; ID_Start # Lo       TAI VIET TONE MAI NUENG\nAAC2          ; ID_Start # Lo       TAI VIET TONE MAI SONG\nAADB..AADC    ; ID_Start # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG\nAADD          ; ID_Start # Lm       TAI VIET SYMBOL SAM\nAAE0..AAEA    ; ID_Start # Lo  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA\nAAF2          ; ID_Start # Lo       MEETEI MAYEK ANJI\nAAF3..AAF4    ; ID_Start # Lm   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK\nAB01..AB06    ; ID_Start # Lo   [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO\nAB09..AB0E    ; ID_Start # Lo   [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO\nAB11..AB16    ; ID_Start # Lo   [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO\nAB20..AB26    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO\nAB28..AB2E    ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO\nAB30..AB5A    ; ID_Start # L&  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG\nAB5C..AB5F    ; ID_Start # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB60..AB68    ; ID_Start # L&   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE\nAB69          ; ID_Start # Lm       MODIFIER LETTER SMALL TURNED W\nAB70..ABBF    ; ID_Start # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nABC0..ABE2    ; ID_Start # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM\nAC00..D7A3    ; ID_Start # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH\nD7B0..D7C6    ; ID_Start # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\nD7CB..D7FB    ; ID_Start # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\nF900..FA6D    ; ID_Start # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D\nFA70..FAD9    ; ID_Start # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9\nFB00..FB06    ; ID_Start # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; ID_Start # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFB1D          ; ID_Start # Lo       HEBREW LETTER YOD WITH HIRIQ\nFB1F..FB28    ; ID_Start # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV\nFB2A..FB36    ; ID_Start # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH\nFB38..FB3C    ; ID_Start # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH\nFB3E          ; ID_Start # Lo       HEBREW LETTER MEM WITH DAGESH\nFB40..FB41    ; ID_Start # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH\nFB43..FB44    ; ID_Start # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH\nFB46..FBB1    ; ID_Start # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM\nFBD3..FD3D    ; ID_Start # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM\nFD50..FD8F    ; ID_Start # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM\nFD92..FDC7    ; ID_Start # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM\nFDF0..FDFB    ; ID_Start # Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU\nFE70..FE74    ; ID_Start # Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM\nFE76..FEFC    ; ID_Start # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM\nFF21..FF3A    ; ID_Start # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\nFF41..FF5A    ; ID_Start # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\nFF66..FF6F    ; ID_Start # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU\nFF70          ; ID_Start # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF71..FF9D    ; ID_Start # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N\nFF9E..FF9F    ; ID_Start # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\nFFA0..FFBE    ; ID_Start # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH\nFFC2..FFC7    ; ID_Start # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E\nFFCA..FFCF    ; ID_Start # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE\nFFD2..FFD7    ; ID_Start # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU\nFFDA..FFDC    ; ID_Start # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I\n10000..1000B  ; ID_Start # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE\n1000D..10026  ; ID_Start # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO\n10028..1003A  ; ID_Start # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO\n1003C..1003D  ; ID_Start # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE\n1003F..1004D  ; ID_Start # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO\n10050..1005D  ; ID_Start # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089\n10080..100FA  ; ID_Start # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305\n10140..10174  ; ID_Start # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS\n10280..1029C  ; ID_Start # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X\n102A0..102D0  ; ID_Start # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3\n10300..1031F  ; ID_Start # Lo  [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS\n1032D..10340  ; ID_Start # Lo  [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA\n10341         ; ID_Start # Nl       GOTHIC LETTER NINETY\n10342..10349  ; ID_Start # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL\n1034A         ; ID_Start # Nl       GOTHIC LETTER NINE HUNDRED\n10350..10375  ; ID_Start # Lo  [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA\n10380..1039D  ; ID_Start # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU\n103A0..103C3  ; ID_Start # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA\n103C8..103CF  ; ID_Start # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH\n103D1..103D5  ; ID_Start # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED\n10400..1044F  ; ID_Start # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW\n10450..1049D  ; ID_Start # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO\n104B0..104D3  ; ID_Start # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n104D8..104FB  ; ID_Start # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10500..10527  ; ID_Start # Lo  [40] ELBASAN LETTER A..ELBASAN LETTER KHE\n10530..10563  ; ID_Start # Lo  [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW\n10570..1057A  ; ID_Start # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; ID_Start # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; ID_Start # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; ID_Start # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10597..105A1  ; ID_Start # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; ID_Start # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; ID_Start # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; ID_Start # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n105C0..105F3  ; ID_Start # Lo  [52] TODHRI LETTER A..TODHRI LETTER OO\n10600..10736  ; ID_Start # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664\n10740..10755  ; ID_Start # Lo  [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE\n10760..10767  ; ID_Start # Lo   [8] LINEAR A SIGN A800..LINEAR A SIGN A807\n10780..10785  ; ID_Start # Lm   [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; ID_Start # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; ID_Start # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n10800..10805  ; ID_Start # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA\n10808         ; ID_Start # Lo       CYPRIOT SYLLABLE JO\n1080A..10835  ; ID_Start # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO\n10837..10838  ; ID_Start # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE\n1083C         ; ID_Start # Lo       CYPRIOT SYLLABLE ZA\n1083F..10855  ; ID_Start # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW\n10860..10876  ; ID_Start # Lo  [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW\n10880..1089E  ; ID_Start # Lo  [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW\n108E0..108F2  ; ID_Start # Lo  [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH\n108F4..108F5  ; ID_Start # Lo   [2] HATRAN LETTER SHIN..HATRAN LETTER TAW\n10900..10915  ; ID_Start # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU\n10920..10939  ; ID_Start # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C\n10940..10959  ; ID_Start # Lo  [26] SIDETIC LETTER N01..SIDETIC LETTER N26\n10980..109B7  ; ID_Start # Lo  [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA\n109BE..109BF  ; ID_Start # Lo   [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN\n10A00         ; ID_Start # Lo       KHAROSHTHI LETTER A\n10A10..10A13  ; ID_Start # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA\n10A15..10A17  ; ID_Start # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA\n10A19..10A35  ; ID_Start # Lo  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA\n10A60..10A7C  ; ID_Start # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH\n10A80..10A9C  ; ID_Start # Lo  [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH\n10AC0..10AC7  ; ID_Start # Lo   [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW\n10AC9..10AE4  ; ID_Start # Lo  [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW\n10B00..10B35  ; ID_Start # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE\n10B40..10B55  ; ID_Start # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW\n10B60..10B72  ; ID_Start # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW\n10B80..10B91  ; ID_Start # Lo  [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW\n10C00..10C48  ; ID_Start # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH\n10C80..10CB2  ; ID_Start # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10CC0..10CF2  ; ID_Start # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10D00..10D23  ; ID_Start # Lo  [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA\n10D4A..10D4D  ; ID_Start # Lo   [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE\n10D4E         ; ID_Start # Lm       GARAY VOWEL LENGTH MARK\n10D4F         ; ID_Start # Lo       GARAY SUKUN\n10D50..10D65  ; ID_Start # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n10D6F         ; ID_Start # Lm       GARAY REDUPLICATION MARK\n10D70..10D85  ; ID_Start # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n10E80..10EA9  ; ID_Start # Lo  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET\n10EB0..10EB1  ; ID_Start # Lo   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE\n10EC2..10EC4  ; ID_Start # Lo   [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW\n10EC5         ; ID_Start # Lm       ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW\n10EC6..10EC7  ; ID_Start # Lo   [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW\n10F00..10F1C  ; ID_Start # Lo  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL\n10F27         ; ID_Start # Lo       OLD SOGDIAN LIGATURE AYIN-DALETH\n10F30..10F45  ; ID_Start # Lo  [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN\n10F70..10F81  ; ID_Start # Lo  [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH\n10FB0..10FC4  ; ID_Start # Lo  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW\n10FE0..10FF6  ; ID_Start # Lo  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH\n11003..11037  ; ID_Start # Lo  [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA\n11071..11072  ; ID_Start # Lo   [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O\n11075         ; ID_Start # Lo       BRAHMI LETTER OLD TAMIL LLA\n11083..110AF  ; ID_Start # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA\n110D0..110E8  ; ID_Start # Lo  [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE\n11103..11126  ; ID_Start # Lo  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA\n11144         ; ID_Start # Lo       CHAKMA LETTER LHAA\n11147         ; ID_Start # Lo       CHAKMA LETTER VAA\n11150..11172  ; ID_Start # Lo  [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA\n11176         ; ID_Start # Lo       MAHAJANI LIGATURE SHRI\n11183..111B2  ; ID_Start # Lo  [48] SHARADA LETTER A..SHARADA LETTER HA\n111C1..111C4  ; ID_Start # Lo   [4] SHARADA SIGN AVAGRAHA..SHARADA OM\n111DA         ; ID_Start # Lo       SHARADA EKAM\n111DC         ; ID_Start # Lo       SHARADA HEADSTROKE\n11200..11211  ; ID_Start # Lo  [18] KHOJKI LETTER A..KHOJKI LETTER JJA\n11213..1122B  ; ID_Start # Lo  [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA\n1123F..11240  ; ID_Start # Lo   [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I\n11280..11286  ; ID_Start # Lo   [7] MULTANI LETTER A..MULTANI LETTER GA\n11288         ; ID_Start # Lo       MULTANI LETTER GHA\n1128A..1128D  ; ID_Start # Lo   [4] MULTANI LETTER CA..MULTANI LETTER JJA\n1128F..1129D  ; ID_Start # Lo  [15] MULTANI LETTER NYA..MULTANI LETTER BA\n1129F..112A8  ; ID_Start # Lo  [10] MULTANI LETTER BHA..MULTANI LETTER RHA\n112B0..112DE  ; ID_Start # Lo  [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA\n11305..1130C  ; ID_Start # Lo   [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L\n1130F..11310  ; ID_Start # Lo   [2] GRANTHA LETTER EE..GRANTHA LETTER AI\n11313..11328  ; ID_Start # Lo  [22] GRANTHA LETTER OO..GRANTHA LETTER NA\n1132A..11330  ; ID_Start # Lo   [7] GRANTHA LETTER PA..GRANTHA LETTER RA\n11332..11333  ; ID_Start # Lo   [2] GRANTHA LETTER LA..GRANTHA LETTER LLA\n11335..11339  ; ID_Start # Lo   [5] GRANTHA LETTER VA..GRANTHA LETTER HA\n1133D         ; ID_Start # Lo       GRANTHA SIGN AVAGRAHA\n11350         ; ID_Start # Lo       GRANTHA OM\n1135D..11361  ; ID_Start # Lo   [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL\n11380..11389  ; ID_Start # Lo  [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL\n1138B         ; ID_Start # Lo       TULU-TIGALARI LETTER EE\n1138E         ; ID_Start # Lo       TULU-TIGALARI LETTER AI\n11390..113B5  ; ID_Start # Lo  [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA\n113B7         ; ID_Start # Lo       TULU-TIGALARI SIGN AVAGRAHA\n113D1         ; ID_Start # Lo       TULU-TIGALARI REPHA\n113D3         ; ID_Start # Lo       TULU-TIGALARI SIGN PLUTA\n11400..11434  ; ID_Start # Lo  [53] NEWA LETTER A..NEWA LETTER HA\n11447..1144A  ; ID_Start # Lo   [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI\n1145F..11461  ; ID_Start # Lo   [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA\n11480..114AF  ; ID_Start # Lo  [48] TIRHUTA ANJI..TIRHUTA LETTER HA\n114C4..114C5  ; ID_Start # Lo   [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG\n114C7         ; ID_Start # Lo       TIRHUTA OM\n11580..115AE  ; ID_Start # Lo  [47] SIDDHAM LETTER A..SIDDHAM LETTER HA\n115D8..115DB  ; ID_Start # Lo   [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U\n11600..1162F  ; ID_Start # Lo  [48] MODI LETTER A..MODI LETTER LLA\n11644         ; ID_Start # Lo       MODI SIGN HUVA\n11680..116AA  ; ID_Start # Lo  [43] TAKRI LETTER A..TAKRI LETTER RRA\n116B8         ; ID_Start # Lo       TAKRI LETTER ARCHAIC KHA\n11700..1171A  ; ID_Start # Lo  [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA\n11740..11746  ; ID_Start # Lo   [7] AHOM LETTER CA..AHOM LETTER LLA\n11800..1182B  ; ID_Start # Lo  [44] DOGRA LETTER A..DOGRA LETTER RRA\n118A0..118DF  ; ID_Start # L&  [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n118FF..11906  ; ID_Start # Lo   [8] WARANG CITI OM..DIVES AKURU LETTER E\n11909         ; ID_Start # Lo       DIVES AKURU LETTER O\n1190C..11913  ; ID_Start # Lo   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA\n11915..11916  ; ID_Start # Lo   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA\n11918..1192F  ; ID_Start # Lo  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA\n1193F         ; ID_Start # Lo       DIVES AKURU PREFIXED NASAL SIGN\n11941         ; ID_Start # Lo       DIVES AKURU INITIAL RA\n119A0..119A7  ; ID_Start # Lo   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR\n119AA..119D0  ; ID_Start # Lo  [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA\n119E1         ; ID_Start # Lo       NANDINAGARI SIGN AVAGRAHA\n119E3         ; ID_Start # Lo       NANDINAGARI HEADSTROKE\n11A00         ; ID_Start # Lo       ZANABAZAR SQUARE LETTER A\n11A0B..11A32  ; ID_Start # Lo  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA\n11A3A         ; ID_Start # Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\n11A50         ; ID_Start # Lo       SOYOMBO LETTER A\n11A5C..11A89  ; ID_Start # Lo  [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA\n11A9D         ; ID_Start # Lo       SOYOMBO MARK PLUTA\n11AB0..11AF8  ; ID_Start # Lo  [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL\n11BC0..11BE0  ; ID_Start # Lo  [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO\n11C00..11C08  ; ID_Start # Lo   [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L\n11C0A..11C2E  ; ID_Start # Lo  [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA\n11C40         ; ID_Start # Lo       BHAIKSUKI SIGN AVAGRAHA\n11C72..11C8F  ; ID_Start # Lo  [30] MARCHEN LETTER KA..MARCHEN LETTER A\n11D00..11D06  ; ID_Start # Lo   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E\n11D08..11D09  ; ID_Start # Lo   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O\n11D0B..11D30  ; ID_Start # Lo  [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA\n11D46         ; ID_Start # Lo       MASARAM GONDI REPHA\n11D60..11D65  ; ID_Start # Lo   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU\n11D67..11D68  ; ID_Start # Lo   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI\n11D6A..11D89  ; ID_Start # Lo  [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA\n11D98         ; ID_Start # Lo       GUNJALA GONDI OM\n11DB0..11DD8  ; ID_Start # Lo  [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH\n11DD9         ; ID_Start # Lm       TOLONG SIKI SIGN SELA\n11DDA..11DDB  ; ID_Start # Lo   [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA\n11EE0..11EF2  ; ID_Start # Lo  [19] MAKASAR LETTER KA..MAKASAR ANGKA\n11F02         ; ID_Start # Lo       KAWI SIGN REPHA\n11F04..11F10  ; ID_Start # Lo  [13] KAWI LETTER A..KAWI LETTER O\n11F12..11F33  ; ID_Start # Lo  [34] KAWI LETTER KA..KAWI LETTER JNYA\n11FB0         ; ID_Start # Lo       LISU LETTER YHA\n12000..12399  ; ID_Start # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U\n12400..1246E  ; ID_Start # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM\n12480..12543  ; ID_Start # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU\n12F90..12FF0  ; ID_Start # Lo  [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114\n13000..1342F  ; ID_Start # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D\n13441..13446  ; ID_Start # Lo   [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN\n13460..143FA  ; ID_Start # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA\n14400..14646  ; ID_Start # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530\n16100..1611D  ; ID_Start # Lo  [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA\n16800..16A38  ; ID_Start # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ\n16A40..16A5E  ; ID_Start # Lo  [31] MRO LETTER TA..MRO LETTER TEK\n16A70..16ABE  ; ID_Start # Lo  [79] TANGSA LETTER OZ..TANGSA LETTER ZA\n16AD0..16AED  ; ID_Start # Lo  [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I\n16B00..16B2F  ; ID_Start # Lo  [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU\n16B40..16B43  ; ID_Start # Lm   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM\n16B63..16B77  ; ID_Start # Lo  [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS\n16B7D..16B8F  ; ID_Start # Lo  [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ\n16D40..16D42  ; ID_Start # Lm   [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA\n16D43..16D6A  ; ID_Start # Lo  [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU\n16D6B..16D6C  ; ID_Start # Lm   [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT\n16E40..16E7F  ; ID_Start # L&  [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16EA0..16EB8  ; ID_Start # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n16EBB..16ED3  ; ID_Start # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n16F00..16F4A  ; ID_Start # Lo  [75] MIAO LETTER PA..MIAO LETTER RTE\n16F50         ; ID_Start # Lo       MIAO LETTER NASALIZATION\n16F93..16F9F  ; ID_Start # Lm  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8\n16FE0..16FE1  ; ID_Start # Lm   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK\n16FE3         ; ID_Start # Lm       OLD CHINESE ITERATION MARK\n16FF2..16FF3  ; ID_Start # Lm   [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER\n16FF4..16FF6  ; ID_Start # Nl   [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS\n17000..18CD5  ; ID_Start # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5\n18CFF..18D1E  ; ID_Start # Lo  [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E\n18D80..18DF2  ; ID_Start # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883\n1AFF0..1AFF3  ; ID_Start # Lm   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5\n1AFF5..1AFFB  ; ID_Start # Lm   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5\n1AFFD..1AFFE  ; ID_Start # Lm   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8\n1B000..1B122  ; ID_Start # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU\n1B132         ; ID_Start # Lo       HIRAGANA LETTER SMALL KO\n1B150..1B152  ; ID_Start # Lo   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO\n1B155         ; ID_Start # Lo       KATAKANA LETTER SMALL KO\n1B164..1B167  ; ID_Start # Lo   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N\n1B170..1B2FB  ; ID_Start # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB\n1BC00..1BC6A  ; ID_Start # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M\n1BC70..1BC7C  ; ID_Start # Lo  [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK\n1BC80..1BC88  ; ID_Start # Lo   [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL\n1BC90..1BC99  ; ID_Start # Lo  [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW\n1D400..1D454  ; ID_Start # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D49C  ; ID_Start # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; ID_Start # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; ID_Start # L&       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; ID_Start # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; ID_Start # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B9  ; ID_Start # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; ID_Start # L&       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; ID_Start # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D505  ; ID_Start # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; ID_Start # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; ID_Start # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; ID_Start # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D51E..1D539  ; ID_Start # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; ID_Start # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; ID_Start # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; ID_Start # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; ID_Start # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D552..1D6A5  ; ID_Start # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6A8..1D6C0  ; ID_Start # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6C2..1D6DA  ; ID_Start # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DC..1D6FA  ; ID_Start # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D6FC..1D714  ; ID_Start # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D716..1D734  ; ID_Start # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D736..1D74E  ; ID_Start # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D750..1D76E  ; ID_Start # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D770..1D788  ; ID_Start # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D78A..1D7A8  ; ID_Start # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7AA..1D7C2  ; ID_Start # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C4..1D7CB  ; ID_Start # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA\n1DF00..1DF09  ; ID_Start # L&  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK\n1DF0A         ; ID_Start # Lo       LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK\n1DF0B..1DF1E  ; ID_Start # L&  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL\n1DF25..1DF2A  ; ID_Start # L&   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK\n1E030..1E06D  ; ID_Start # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E100..1E12C  ; ID_Start # Lo  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W\n1E137..1E13D  ; ID_Start # Lm   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER\n1E14E         ; ID_Start # Lo       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ\n1E290..1E2AD  ; ID_Start # Lo  [30] TOTO LETTER PA..TOTO LETTER A\n1E2C0..1E2EB  ; ID_Start # Lo  [44] WANCHO LETTER AA..WANCHO LETTER YIH\n1E4D0..1E4EA  ; ID_Start # Lo  [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL\n1E4EB         ; ID_Start # Lm       NAG MUNDARI SIGN OJOD\n1E5D0..1E5ED  ; ID_Start # Lo  [30] OL ONAL LETTER O..OL ONAL LETTER EG\n1E5F0         ; ID_Start # Lo       OL ONAL SIGN HODDOND\n1E6C0..1E6DE  ; ID_Start # Lo  [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO\n1E6E0..1E6E2  ; ID_Start # Lo   [3] TAI YO LETTER AA..TAI YO LETTER UE\n1E6E4..1E6E5  ; ID_Start # Lo   [2] TAI YO LETTER U..TAI YO LETTER AE\n1E6E7..1E6ED  ; ID_Start # Lo   [7] TAI YO LETTER O..TAI YO LETTER AUE\n1E6F0..1E6F4  ; ID_Start # Lo   [5] TAI YO LETTER AN..TAI YO LETTER AP\n1E6FE         ; ID_Start # Lo       TAI YO SYMBOL MUEANG\n1E6FF         ; ID_Start # Lm       TAI YO XAM LAI\n1E7E0..1E7E6  ; ID_Start # Lo   [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO\n1E7E8..1E7EB  ; ID_Start # Lo   [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE\n1E7ED..1E7EE  ; ID_Start # Lo   [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE\n1E7F0..1E7FE  ; ID_Start # Lo  [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE\n1E800..1E8C4  ; ID_Start # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON\n1E900..1E943  ; ID_Start # L&  [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA\n1E94B         ; ID_Start # Lm       ADLAM NASALIZATION MARK\n1EE00..1EE03  ; ID_Start # Lo   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL\n1EE05..1EE1F  ; ID_Start # Lo  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF\n1EE21..1EE22  ; ID_Start # Lo   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM\n1EE24         ; ID_Start # Lo       ARABIC MATHEMATICAL INITIAL HEH\n1EE27         ; ID_Start # Lo       ARABIC MATHEMATICAL INITIAL HAH\n1EE29..1EE32  ; ID_Start # Lo  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF\n1EE34..1EE37  ; ID_Start # Lo   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH\n1EE39         ; ID_Start # Lo       ARABIC MATHEMATICAL INITIAL DAD\n1EE3B         ; ID_Start # Lo       ARABIC MATHEMATICAL INITIAL GHAIN\n1EE42         ; ID_Start # Lo       ARABIC MATHEMATICAL TAILED JEEM\n1EE47         ; ID_Start # Lo       ARABIC MATHEMATICAL TAILED HAH\n1EE49         ; ID_Start # Lo       ARABIC MATHEMATICAL TAILED YEH\n1EE4B         ; ID_Start # Lo       ARABIC MATHEMATICAL TAILED LAM\n1EE4D..1EE4F  ; ID_Start # Lo   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN\n1EE51..1EE52  ; ID_Start # Lo   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF\n1EE54         ; ID_Start # Lo       ARABIC MATHEMATICAL TAILED SHEEN\n1EE57         ; ID_Start # Lo       ARABIC MATHEMATICAL TAILED KHAH\n1EE59         ; ID_Start # Lo       ARABIC MATHEMATICAL TAILED DAD\n1EE5B         ; ID_Start # Lo       ARABIC MATHEMATICAL TAILED GHAIN\n1EE5D         ; ID_Start # Lo       ARABIC MATHEMATICAL TAILED DOTLESS NOON\n1EE5F         ; ID_Start # Lo       ARABIC MATHEMATICAL TAILED DOTLESS QAF\n1EE61..1EE62  ; ID_Start # Lo   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM\n1EE64         ; ID_Start # Lo       ARABIC MATHEMATICAL STRETCHED HEH\n1EE67..1EE6A  ; ID_Start # Lo   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF\n1EE6C..1EE72  ; ID_Start # Lo   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF\n1EE74..1EE77  ; ID_Start # Lo   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH\n1EE79..1EE7C  ; ID_Start # Lo   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH\n1EE7E         ; ID_Start # Lo       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH\n1EE80..1EE89  ; ID_Start # Lo  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH\n1EE8B..1EE9B  ; ID_Start # Lo  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN\n1EEA1..1EEA3  ; ID_Start # Lo   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL\n1EEA5..1EEA9  ; ID_Start # Lo   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH\n1EEAB..1EEBB  ; ID_Start # Lo  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN\n20000..2A6DF  ; ID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF\n2A700..2B81D  ; ID_Start # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D\n2B820..2CEAD  ; ID_Start # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD\n2CEB0..2EBE0  ; ID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0\n2EBF0..2EE5D  ; ID_Start # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D\n2F800..2FA1D  ; ID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D\n30000..3134A  ; ID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A\n31350..33479  ; ID_Start # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479\n\n# Total code points: 145916\n\n# ================================================\n\n# Derived Property: ID_Continue\n#  Characters that can continue an identifier.\n#  Generated from:\n#      ID_Start\n#    + Mn + Mc + Nd + Pc\n#    + Other_ID_Continue\n#    - Pattern_Syntax\n#    - Pattern_White_Space\n#  NOTE: See UAX #31 for more information\n\n0030..0039    ; ID_Continue # Nd  [10] DIGIT ZERO..DIGIT NINE\n0041..005A    ; ID_Continue # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n005F          ; ID_Continue # Pc       LOW LINE\n0061..007A    ; ID_Continue # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00AA          ; ID_Continue # Lo       FEMININE ORDINAL INDICATOR\n00B5          ; ID_Continue # L&       MICRO SIGN\n00B7          ; ID_Continue # Po       MIDDLE DOT\n00BA          ; ID_Continue # Lo       MASCULINE ORDINAL INDICATOR\n00C0..00D6    ; ID_Continue # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00F6    ; ID_Continue # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..01BA    ; ID_Continue # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL\n01BB          ; ID_Continue # Lo       LATIN LETTER TWO WITH STROKE\n01BC..01BF    ; ID_Continue # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN\n01C0..01C3    ; ID_Continue # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK\n01C4..0293    ; ID_Continue # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL\n0294..0295    ; ID_Continue # Lo   [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE\n0296..02AF    ; ID_Continue # L&  [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL\n02B0..02C1    ; ID_Continue # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP\n02C6..02D1    ; ID_Continue # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON\n02E0..02E4    ; ID_Continue # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n02EC          ; ID_Continue # Lm       MODIFIER LETTER VOICING\n02EE          ; ID_Continue # Lm       MODIFIER LETTER DOUBLE APOSTROPHE\n0300..036F    ; ID_Continue # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\n0370..0373    ; ID_Continue # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI\n0374          ; ID_Continue # Lm       GREEK NUMERAL SIGN\n0376..0377    ; ID_Continue # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037A          ; ID_Continue # Lm       GREEK YPOGEGRAMMENI\n037B..037D    ; ID_Continue # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n037F          ; ID_Continue # L&       GREEK CAPITAL LETTER YOT\n0386          ; ID_Continue # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0387          ; ID_Continue # Po       GREEK ANO TELEIA\n0388..038A    ; ID_Continue # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; ID_Continue # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..03A1    ; ID_Continue # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO\n03A3..03F5    ; ID_Continue # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL\n03F7..0481    ; ID_Continue # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA\n0483..0487    ; ID_Continue # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\n048A..052F    ; ID_Continue # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER\n0531..0556    ; ID_Continue # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n0559          ; ID_Continue # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING\n0560..0588    ; ID_Continue # L&  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE\n0591..05BD    ; ID_Continue # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\n05BF          ; ID_Continue # Mn       HEBREW POINT RAFE\n05C1..05C2    ; ID_Continue # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n05C4..05C5    ; ID_Continue # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n05C7          ; ID_Continue # Mn       HEBREW POINT QAMATS QATAN\n05D0..05EA    ; ID_Continue # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV\n05EF..05F2    ; ID_Continue # Lo   [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD\n0610..061A    ; ID_Continue # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n0620..063F    ; ID_Continue # Lo  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE\n0640          ; ID_Continue # Lm       ARABIC TATWEEL\n0641..064A    ; ID_Continue # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH\n064B..065F    ; ID_Continue # Mn  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW\n0660..0669    ; ID_Continue # Nd  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE\n066E..066F    ; ID_Continue # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF\n0670          ; ID_Continue # Mn       ARABIC LETTER SUPERSCRIPT ALEF\n0671..06D3    ; ID_Continue # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n06D5          ; ID_Continue # Lo       ARABIC LETTER AE\n06D6..06DC    ; ID_Continue # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n06DF..06E4    ; ID_Continue # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\n06E5..06E6    ; ID_Continue # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH\n06E7..06E8    ; ID_Continue # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n06EA..06ED    ; ID_Continue # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\n06EE..06EF    ; ID_Continue # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V\n06F0..06F9    ; ID_Continue # Nd  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE\n06FA..06FC    ; ID_Continue # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW\n06FF          ; ID_Continue # Lo       ARABIC LETTER HEH WITH INVERTED V\n0710          ; ID_Continue # Lo       SYRIAC LETTER ALAPH\n0711          ; ID_Continue # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH\n0712..072F    ; ID_Continue # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH\n0730..074A    ; ID_Continue # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\n074D..07A5    ; ID_Continue # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU\n07A6..07B0    ; ID_Continue # Mn  [11] THAANA ABAFILI..THAANA SUKUN\n07B1          ; ID_Continue # Lo       THAANA LETTER NAA\n07C0..07C9    ; ID_Continue # Nd  [10] NKO DIGIT ZERO..NKO DIGIT NINE\n07CA..07EA    ; ID_Continue # Lo  [33] NKO LETTER A..NKO LETTER JONA RA\n07EB..07F3    ; ID_Continue # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\n07F4..07F5    ; ID_Continue # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE\n07FA          ; ID_Continue # Lm       NKO LAJANYALAN\n07FD          ; ID_Continue # Mn       NKO DANTAYALAN\n0800..0815    ; ID_Continue # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF\n0816..0819    ; ID_Continue # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\n081A          ; ID_Continue # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT\n081B..0823    ; ID_Continue # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n0824          ; ID_Continue # Lm       SAMARITAN MODIFIER LETTER SHORT A\n0825..0827    ; ID_Continue # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n0828          ; ID_Continue # Lm       SAMARITAN MODIFIER LETTER I\n0829..082D    ; ID_Continue # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\n0840..0858    ; ID_Continue # Lo  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN\n0859..085B    ; ID_Continue # Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\n0860..086A    ; ID_Continue # Lo  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA\n0870..0887    ; ID_Continue # Lo  [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT\n0889..088F    ; ID_Continue # Lo   [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE\n0897..089F    ; ID_Continue # Mn   [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA\n08A0..08C8    ; ID_Continue # Lo  [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF\n08C9          ; ID_Continue # Lm       ARABIC SMALL FARSI YEH\n08CA..08E1    ; ID_Continue # Mn  [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA\n08E3..0902    ; ID_Continue # Mn  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA\n0903          ; ID_Continue # Mc       DEVANAGARI SIGN VISARGA\n0904..0939    ; ID_Continue # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA\n093A          ; ID_Continue # Mn       DEVANAGARI VOWEL SIGN OE\n093B          ; ID_Continue # Mc       DEVANAGARI VOWEL SIGN OOE\n093C          ; ID_Continue # Mn       DEVANAGARI SIGN NUKTA\n093D          ; ID_Continue # Lo       DEVANAGARI SIGN AVAGRAHA\n093E..0940    ; ID_Continue # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\n0941..0948    ; ID_Continue # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n0949..094C    ; ID_Continue # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\n094D          ; ID_Continue # Mn       DEVANAGARI SIGN VIRAMA\n094E..094F    ; ID_Continue # Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\n0950          ; ID_Continue # Lo       DEVANAGARI OM\n0951..0957    ; ID_Continue # Mn   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE\n0958..0961    ; ID_Continue # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL\n0962..0963    ; ID_Continue # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n0966..096F    ; ID_Continue # Nd  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE\n0971          ; ID_Continue # Lm       DEVANAGARI SIGN HIGH SPACING DOT\n0972..0980    ; ID_Continue # Lo  [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI\n0981          ; ID_Continue # Mn       BENGALI SIGN CANDRABINDU\n0982..0983    ; ID_Continue # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\n0985..098C    ; ID_Continue # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L\n098F..0990    ; ID_Continue # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI\n0993..09A8    ; ID_Continue # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA\n09AA..09B0    ; ID_Continue # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA\n09B2          ; ID_Continue # Lo       BENGALI LETTER LA\n09B6..09B9    ; ID_Continue # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA\n09BC          ; ID_Continue # Mn       BENGALI SIGN NUKTA\n09BD          ; ID_Continue # Lo       BENGALI SIGN AVAGRAHA\n09BE..09C0    ; ID_Continue # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II\n09C1..09C4    ; ID_Continue # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n09C7..09C8    ; ID_Continue # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\n09CB..09CC    ; ID_Continue # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\n09CD          ; ID_Continue # Mn       BENGALI SIGN VIRAMA\n09CE          ; ID_Continue # Lo       BENGALI LETTER KHANDA TA\n09D7          ; ID_Continue # Mc       BENGALI AU LENGTH MARK\n09DC..09DD    ; ID_Continue # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA\n09DF..09E1    ; ID_Continue # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL\n09E2..09E3    ; ID_Continue # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n09E6..09EF    ; ID_Continue # Nd  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE\n09F0..09F1    ; ID_Continue # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL\n09FC          ; ID_Continue # Lo       BENGALI LETTER VEDIC ANUSVARA\n09FE          ; ID_Continue # Mn       BENGALI SANDHI MARK\n0A01..0A02    ; ID_Continue # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n0A03          ; ID_Continue # Mc       GURMUKHI SIGN VISARGA\n0A05..0A0A    ; ID_Continue # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU\n0A0F..0A10    ; ID_Continue # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI\n0A13..0A28    ; ID_Continue # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA\n0A2A..0A30    ; ID_Continue # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA\n0A32..0A33    ; ID_Continue # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA\n0A35..0A36    ; ID_Continue # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA\n0A38..0A39    ; ID_Continue # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA\n0A3C          ; ID_Continue # Mn       GURMUKHI SIGN NUKTA\n0A3E..0A40    ; ID_Continue # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\n0A41..0A42    ; ID_Continue # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n0A47..0A48    ; ID_Continue # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n0A4B..0A4D    ; ID_Continue # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\n0A51          ; ID_Continue # Mn       GURMUKHI SIGN UDAAT\n0A59..0A5C    ; ID_Continue # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA\n0A5E          ; ID_Continue # Lo       GURMUKHI LETTER FA\n0A66..0A6F    ; ID_Continue # Nd  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE\n0A70..0A71    ; ID_Continue # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n0A72..0A74    ; ID_Continue # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR\n0A75          ; ID_Continue # Mn       GURMUKHI SIGN YAKASH\n0A81..0A82    ; ID_Continue # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n0A83          ; ID_Continue # Mc       GUJARATI SIGN VISARGA\n0A85..0A8D    ; ID_Continue # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E\n0A8F..0A91    ; ID_Continue # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O\n0A93..0AA8    ; ID_Continue # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA\n0AAA..0AB0    ; ID_Continue # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA\n0AB2..0AB3    ; ID_Continue # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA\n0AB5..0AB9    ; ID_Continue # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA\n0ABC          ; ID_Continue # Mn       GUJARATI SIGN NUKTA\n0ABD          ; ID_Continue # Lo       GUJARATI SIGN AVAGRAHA\n0ABE..0AC0    ; ID_Continue # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\n0AC1..0AC5    ; ID_Continue # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n0AC7..0AC8    ; ID_Continue # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n0AC9          ; ID_Continue # Mc       GUJARATI VOWEL SIGN CANDRA O\n0ACB..0ACC    ; ID_Continue # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\n0ACD          ; ID_Continue # Mn       GUJARATI SIGN VIRAMA\n0AD0          ; ID_Continue # Lo       GUJARATI OM\n0AE0..0AE1    ; ID_Continue # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL\n0AE2..0AE3    ; ID_Continue # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n0AE6..0AEF    ; ID_Continue # Nd  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE\n0AF9          ; ID_Continue # Lo       GUJARATI LETTER ZHA\n0AFA..0AFF    ; ID_Continue # Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\n0B01          ; ID_Continue # Mn       ORIYA SIGN CANDRABINDU\n0B02..0B03    ; ID_Continue # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\n0B05..0B0C    ; ID_Continue # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L\n0B0F..0B10    ; ID_Continue # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI\n0B13..0B28    ; ID_Continue # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA\n0B2A..0B30    ; ID_Continue # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA\n0B32..0B33    ; ID_Continue # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA\n0B35..0B39    ; ID_Continue # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA\n0B3C          ; ID_Continue # Mn       ORIYA SIGN NUKTA\n0B3D          ; ID_Continue # Lo       ORIYA SIGN AVAGRAHA\n0B3E          ; ID_Continue # Mc       ORIYA VOWEL SIGN AA\n0B3F          ; ID_Continue # Mn       ORIYA VOWEL SIGN I\n0B40          ; ID_Continue # Mc       ORIYA VOWEL SIGN II\n0B41..0B44    ; ID_Continue # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n0B47..0B48    ; ID_Continue # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\n0B4B..0B4C    ; ID_Continue # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\n0B4D          ; ID_Continue # Mn       ORIYA SIGN VIRAMA\n0B55..0B56    ; ID_Continue # Mn   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK\n0B57          ; ID_Continue # Mc       ORIYA AU LENGTH MARK\n0B5C..0B5D    ; ID_Continue # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA\n0B5F..0B61    ; ID_Continue # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL\n0B62..0B63    ; ID_Continue # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n0B66..0B6F    ; ID_Continue # Nd  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE\n0B71          ; ID_Continue # Lo       ORIYA LETTER WA\n0B82          ; ID_Continue # Mn       TAMIL SIGN ANUSVARA\n0B83          ; ID_Continue # Lo       TAMIL SIGN VISARGA\n0B85..0B8A    ; ID_Continue # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU\n0B8E..0B90    ; ID_Continue # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI\n0B92..0B95    ; ID_Continue # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA\n0B99..0B9A    ; ID_Continue # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA\n0B9C          ; ID_Continue # Lo       TAMIL LETTER JA\n0B9E..0B9F    ; ID_Continue # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA\n0BA3..0BA4    ; ID_Continue # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA\n0BA8..0BAA    ; ID_Continue # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA\n0BAE..0BB9    ; ID_Continue # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA\n0BBE..0BBF    ; ID_Continue # Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I\n0BC0          ; ID_Continue # Mn       TAMIL VOWEL SIGN II\n0BC1..0BC2    ; ID_Continue # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\n0BC6..0BC8    ; ID_Continue # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\n0BCA..0BCC    ; ID_Continue # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\n0BCD          ; ID_Continue # Mn       TAMIL SIGN VIRAMA\n0BD0          ; ID_Continue # Lo       TAMIL OM\n0BD7          ; ID_Continue # Mc       TAMIL AU LENGTH MARK\n0BE6..0BEF    ; ID_Continue # Nd  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE\n0C00          ; ID_Continue # Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE\n0C01..0C03    ; ID_Continue # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\n0C04          ; ID_Continue # Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE\n0C05..0C0C    ; ID_Continue # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L\n0C0E..0C10    ; ID_Continue # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI\n0C12..0C28    ; ID_Continue # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA\n0C2A..0C39    ; ID_Continue # Lo  [16] TELUGU LETTER PA..TELUGU LETTER HA\n0C3C          ; ID_Continue # Mn       TELUGU SIGN NUKTA\n0C3D          ; ID_Continue # Lo       TELUGU SIGN AVAGRAHA\n0C3E..0C40    ; ID_Continue # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n0C41..0C44    ; ID_Continue # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\n0C46..0C48    ; ID_Continue # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n0C4A..0C4D    ; ID_Continue # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA\n0C55..0C56    ; ID_Continue # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n0C58..0C5A    ; ID_Continue # Lo   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA\n0C5C..0C5D    ; ID_Continue # Lo   [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU\n0C60..0C61    ; ID_Continue # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL\n0C62..0C63    ; ID_Continue # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n0C66..0C6F    ; ID_Continue # Nd  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE\n0C80          ; ID_Continue # Lo       KANNADA SIGN SPACING CANDRABINDU\n0C81          ; ID_Continue # Mn       KANNADA SIGN CANDRABINDU\n0C82..0C83    ; ID_Continue # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\n0C85..0C8C    ; ID_Continue # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L\n0C8E..0C90    ; ID_Continue # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI\n0C92..0CA8    ; ID_Continue # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA\n0CAA..0CB3    ; ID_Continue # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA\n0CB5..0CB9    ; ID_Continue # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA\n0CBC          ; ID_Continue # Mn       KANNADA SIGN NUKTA\n0CBD          ; ID_Continue # Lo       KANNADA SIGN AVAGRAHA\n0CBE          ; ID_Continue # Mc       KANNADA VOWEL SIGN AA\n0CBF          ; ID_Continue # Mn       KANNADA VOWEL SIGN I\n0CC0..0CC4    ; ID_Continue # Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR\n0CC6          ; ID_Continue # Mn       KANNADA VOWEL SIGN E\n0CC7..0CC8    ; ID_Continue # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n0CCA..0CCB    ; ID_Continue # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n0CCC..0CCD    ; ID_Continue # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\n0CD5..0CD6    ; ID_Continue # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n0CDC..0CDE    ; ID_Continue # Lo   [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA\n0CE0..0CE1    ; ID_Continue # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL\n0CE2..0CE3    ; ID_Continue # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n0CE6..0CEF    ; ID_Continue # Nd  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE\n0CF1..0CF2    ; ID_Continue # Lo   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA\n0CF3          ; ID_Continue # Mc       KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT\n0D00..0D01    ; ID_Continue # Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n0D02..0D03    ; ID_Continue # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\n0D04..0D0C    ; ID_Continue # Lo   [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L\n0D0E..0D10    ; ID_Continue # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI\n0D12..0D3A    ; ID_Continue # Lo  [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA\n0D3B..0D3C    ; ID_Continue # Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n0D3D          ; ID_Continue # Lo       MALAYALAM SIGN AVAGRAHA\n0D3E..0D40    ; ID_Continue # Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II\n0D41..0D44    ; ID_Continue # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n0D46..0D48    ; ID_Continue # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\n0D4A..0D4C    ; ID_Continue # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\n0D4D          ; ID_Continue # Mn       MALAYALAM SIGN VIRAMA\n0D4E          ; ID_Continue # Lo       MALAYALAM LETTER DOT REPH\n0D54..0D56    ; ID_Continue # Lo   [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL\n0D57          ; ID_Continue # Mc       MALAYALAM AU LENGTH MARK\n0D5F..0D61    ; ID_Continue # Lo   [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL\n0D62..0D63    ; ID_Continue # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n0D66..0D6F    ; ID_Continue # Nd  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE\n0D7A..0D7F    ; ID_Continue # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K\n0D81          ; ID_Continue # Mn       SINHALA SIGN CANDRABINDU\n0D82..0D83    ; ID_Continue # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\n0D85..0D96    ; ID_Continue # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA\n0D9A..0DB1    ; ID_Continue # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA\n0DB3..0DBB    ; ID_Continue # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA\n0DBD          ; ID_Continue # Lo       SINHALA LETTER DANTAJA LAYANNA\n0DC0..0DC6    ; ID_Continue # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA\n0DCA          ; ID_Continue # Mn       SINHALA SIGN AL-LAKUNA\n0DCF..0DD1    ; ID_Continue # Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\n0DD2..0DD4    ; ID_Continue # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n0DD6          ; ID_Continue # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA\n0DD8..0DDF    ; ID_Continue # Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA\n0DE6..0DEF    ; ID_Continue # Nd  [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE\n0DF2..0DF3    ; ID_Continue # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\n0E01..0E30    ; ID_Continue # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A\n0E31          ; ID_Continue # Mn       THAI CHARACTER MAI HAN-AKAT\n0E32..0E33    ; ID_Continue # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM\n0E34..0E3A    ; ID_Continue # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n0E40..0E45    ; ID_Continue # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO\n0E46          ; ID_Continue # Lm       THAI CHARACTER MAIYAMOK\n0E47..0E4E    ; ID_Continue # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\n0E50..0E59    ; ID_Continue # Nd  [10] THAI DIGIT ZERO..THAI DIGIT NINE\n0E81..0E82    ; ID_Continue # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG\n0E84          ; ID_Continue # Lo       LAO LETTER KHO TAM\n0E86..0E8A    ; ID_Continue # Lo   [5] LAO LETTER PALI GHA..LAO LETTER SO TAM\n0E8C..0EA3    ; ID_Continue # Lo  [24] LAO LETTER PALI JHA..LAO LETTER LO LING\n0EA5          ; ID_Continue # Lo       LAO LETTER LO LOOT\n0EA7..0EB0    ; ID_Continue # Lo  [10] LAO LETTER WO..LAO VOWEL SIGN A\n0EB1          ; ID_Continue # Mn       LAO VOWEL SIGN MAI KAN\n0EB2..0EB3    ; ID_Continue # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM\n0EB4..0EBC    ; ID_Continue # Mn   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO\n0EBD          ; ID_Continue # Lo       LAO SEMIVOWEL SIGN NYO\n0EC0..0EC4    ; ID_Continue # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI\n0EC6          ; ID_Continue # Lm       LAO KO LA\n0EC8..0ECE    ; ID_Continue # Mn   [7] LAO TONE MAI EK..LAO YAMAKKAN\n0ED0..0ED9    ; ID_Continue # Nd  [10] LAO DIGIT ZERO..LAO DIGIT NINE\n0EDC..0EDF    ; ID_Continue # Lo   [4] LAO HO NO..LAO LETTER KHMU NYO\n0F00          ; ID_Continue # Lo       TIBETAN SYLLABLE OM\n0F18..0F19    ; ID_Continue # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\n0F20..0F29    ; ID_Continue # Nd  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE\n0F35          ; ID_Continue # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA\n0F37          ; ID_Continue # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS\n0F39          ; ID_Continue # Mn       TIBETAN MARK TSA -PHRU\n0F3E..0F3F    ; ID_Continue # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES\n0F40..0F47    ; ID_Continue # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA\n0F49..0F6C    ; ID_Continue # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA\n0F71..0F7E    ; ID_Continue # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n0F7F          ; ID_Continue # Mc       TIBETAN SIGN RNAM BCAD\n0F80..0F84    ; ID_Continue # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\n0F86..0F87    ; ID_Continue # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\n0F88..0F8C    ; ID_Continue # Lo   [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN\n0F8D..0F97    ; ID_Continue # Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n0F99..0FBC    ; ID_Continue # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n0FC6          ; ID_Continue # Mn       TIBETAN SYMBOL PADMA GDAN\n1000..102A    ; ID_Continue # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU\n102B..102C    ; ID_Continue # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA\n102D..1030    ; ID_Continue # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n1031          ; ID_Continue # Mc       MYANMAR VOWEL SIGN E\n1032..1037    ; ID_Continue # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\n1038          ; ID_Continue # Mc       MYANMAR SIGN VISARGA\n1039..103A    ; ID_Continue # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\n103B..103C    ; ID_Continue # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\n103D..103E    ; ID_Continue # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n103F          ; ID_Continue # Lo       MYANMAR LETTER GREAT SA\n1040..1049    ; ID_Continue # Nd  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE\n1050..1055    ; ID_Continue # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL\n1056..1057    ; ID_Continue # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\n1058..1059    ; ID_Continue # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n105A..105D    ; ID_Continue # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE\n105E..1060    ; ID_Continue # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n1061          ; ID_Continue # Lo       MYANMAR LETTER SGAW KAREN SHA\n1062..1064    ; ID_Continue # Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO\n1065..1066    ; ID_Continue # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA\n1067..106D    ; ID_Continue # Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5\n106E..1070    ; ID_Continue # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA\n1071..1074    ; ID_Continue # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n1075..1081    ; ID_Continue # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA\n1082          ; ID_Continue # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n1083..1084    ; ID_Continue # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E\n1085..1086    ; ID_Continue # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n1087..108C    ; ID_Continue # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3\n108D          ; ID_Continue # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n108E          ; ID_Continue # Lo       MYANMAR LETTER RUMAI PALAUNG FA\n108F          ; ID_Continue # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5\n1090..1099    ; ID_Continue # Nd  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE\n109A..109C    ; ID_Continue # Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A\n109D          ; ID_Continue # Mn       MYANMAR VOWEL SIGN AITON AI\n10A0..10C5    ; ID_Continue # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; ID_Continue # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; ID_Continue # L&       GEORGIAN CAPITAL LETTER AEN\n10D0..10FA    ; ID_Continue # L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FC          ; ID_Continue # Lm       MODIFIER LETTER GEORGIAN NAR\n10FD..10FF    ; ID_Continue # L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n1100..1248    ; ID_Continue # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA\n124A..124D    ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE\n1250..1256    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO\n1258          ; ID_Continue # Lo       ETHIOPIC SYLLABLE QHWA\n125A..125D    ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE\n1260..1288    ; ID_Continue # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA\n128A..128D    ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE\n1290..12B0    ; ID_Continue # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA\n12B2..12B5    ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE\n12B8..12BE    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO\n12C0          ; ID_Continue # Lo       ETHIOPIC SYLLABLE KXWA\n12C2..12C5    ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE\n12C8..12D6    ; ID_Continue # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O\n12D8..1310    ; ID_Continue # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA\n1312..1315    ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE\n1318..135A    ; ID_Continue # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA\n135D..135F    ; ID_Continue # Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\n1369..1371    ; ID_Continue # No   [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE\n1380..138F    ; ID_Continue # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE\n13A0..13F5    ; ID_Continue # L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n13F8..13FD    ; ID_Continue # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1401..166C    ; ID_Continue # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA\n166F..167F    ; ID_Continue # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W\n1681..169A    ; ID_Continue # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH\n16A0..16EA    ; ID_Continue # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X\n16EE..16F0    ; ID_Continue # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL\n16F1..16F8    ; ID_Continue # Lo   [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC\n1700..1711    ; ID_Continue # Lo  [18] TAGALOG LETTER A..TAGALOG LETTER HA\n1712..1714    ; ID_Continue # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\n1715          ; ID_Continue # Mc       TAGALOG SIGN PAMUDPOD\n171F..1731    ; ID_Continue # Lo  [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA\n1732..1733    ; ID_Continue # Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U\n1734          ; ID_Continue # Mc       HANUNOO SIGN PAMUDPOD\n1740..1751    ; ID_Continue # Lo  [18] BUHID LETTER A..BUHID LETTER HA\n1752..1753    ; ID_Continue # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n1760..176C    ; ID_Continue # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA\n176E..1770    ; ID_Continue # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA\n1772..1773    ; ID_Continue # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n1780..17B3    ; ID_Continue # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU\n17B4..17B5    ; ID_Continue # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n17B6          ; ID_Continue # Mc       KHMER VOWEL SIGN AA\n17B7..17BD    ; ID_Continue # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n17BE..17C5    ; ID_Continue # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\n17C6          ; ID_Continue # Mn       KHMER SIGN NIKAHIT\n17C7..17C8    ; ID_Continue # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\n17C9..17D3    ; ID_Continue # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\n17D7          ; ID_Continue # Lm       KHMER SIGN LEK TOO\n17DC          ; ID_Continue # Lo       KHMER SIGN AVAKRAHASANYA\n17DD          ; ID_Continue # Mn       KHMER SIGN ATTHACAN\n17E0..17E9    ; ID_Continue # Nd  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE\n180B..180D    ; ID_Continue # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n180F          ; ID_Continue # Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR\n1810..1819    ; ID_Continue # Nd  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE\n1820..1842    ; ID_Continue # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI\n1843          ; ID_Continue # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN\n1844..1878    ; ID_Continue # Lo  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS\n1880..1884    ; ID_Continue # Lo   [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA\n1885..1886    ; ID_Continue # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n1887..18A8    ; ID_Continue # Lo  [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA\n18A9          ; ID_Continue # Mn       MONGOLIAN LETTER ALI GALI DAGALGA\n18AA          ; ID_Continue # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA\n18B0..18F5    ; ID_Continue # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S\n1900..191E    ; ID_Continue # Lo  [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA\n1920..1922    ; ID_Continue # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n1923..1926    ; ID_Continue # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\n1927..1928    ; ID_Continue # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n1929..192B    ; ID_Continue # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\n1930..1931    ; ID_Continue # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\n1932          ; ID_Continue # Mn       LIMBU SMALL LETTER ANUSVARA\n1933..1938    ; ID_Continue # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\n1939..193B    ; ID_Continue # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\n1946..194F    ; ID_Continue # Nd  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE\n1950..196D    ; ID_Continue # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI\n1970..1974    ; ID_Continue # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6\n1980..19AB    ; ID_Continue # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA\n19B0..19C9    ; ID_Continue # Lo  [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2\n19D0..19D9    ; ID_Continue # Nd  [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE\n19DA          ; ID_Continue # No       NEW TAI LUE THAM DIGIT ONE\n1A00..1A16    ; ID_Continue # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA\n1A17..1A18    ; ID_Continue # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n1A19..1A1A    ; ID_Continue # Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\n1A1B          ; ID_Continue # Mn       BUGINESE VOWEL SIGN AE\n1A20..1A54    ; ID_Continue # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA\n1A55          ; ID_Continue # Mc       TAI THAM CONSONANT SIGN MEDIAL RA\n1A56          ; ID_Continue # Mn       TAI THAM CONSONANT SIGN MEDIAL LA\n1A57          ; ID_Continue # Mc       TAI THAM CONSONANT SIGN LA TANG LAI\n1A58..1A5E    ; ID_Continue # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n1A60          ; ID_Continue # Mn       TAI THAM SIGN SAKOT\n1A61          ; ID_Continue # Mc       TAI THAM VOWEL SIGN A\n1A62          ; ID_Continue # Mn       TAI THAM VOWEL SIGN MAI SAT\n1A63..1A64    ; ID_Continue # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA\n1A65..1A6C    ; ID_Continue # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n1A6D..1A72    ; ID_Continue # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\n1A73..1A7C    ; ID_Continue # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\n1A7F          ; ID_Continue # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT\n1A80..1A89    ; ID_Continue # Nd  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE\n1A90..1A99    ; ID_Continue # Nd  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE\n1AA7          ; ID_Continue # Lm       TAI THAM SIGN MAI YAMOK\n1AB0..1ABD    ; ID_Continue # Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\n1ABF..1ADD    ; ID_Continue # Mn  [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW\n1AE0..1AEB    ; ID_Continue # Mn  [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE\n1B00..1B03    ; ID_Continue # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n1B04          ; ID_Continue # Mc       BALINESE SIGN BISAH\n1B05..1B33    ; ID_Continue # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA\n1B34          ; ID_Continue # Mn       BALINESE SIGN REREKAN\n1B35          ; ID_Continue # Mc       BALINESE VOWEL SIGN TEDUNG\n1B36..1B3A    ; ID_Continue # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n1B3B          ; ID_Continue # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG\n1B3C          ; ID_Continue # Mn       BALINESE VOWEL SIGN LA LENGA\n1B3D..1B41    ; ID_Continue # Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG\n1B42          ; ID_Continue # Mn       BALINESE VOWEL SIGN PEPET\n1B43..1B44    ; ID_Continue # Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG\n1B45..1B4C    ; ID_Continue # Lo   [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA\n1B50..1B59    ; ID_Continue # Nd  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE\n1B6B..1B73    ; ID_Continue # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\n1B80..1B81    ; ID_Continue # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n1B82          ; ID_Continue # Mc       SUNDANESE SIGN PANGWISAD\n1B83..1BA0    ; ID_Continue # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA\n1BA1          ; ID_Continue # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL\n1BA2..1BA5    ; ID_Continue # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n1BA6..1BA7    ; ID_Continue # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\n1BA8..1BA9    ; ID_Continue # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n1BAA          ; ID_Continue # Mc       SUNDANESE SIGN PAMAAEH\n1BAB..1BAD    ; ID_Continue # Mn   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA\n1BAE..1BAF    ; ID_Continue # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA\n1BB0..1BB9    ; ID_Continue # Nd  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE\n1BBA..1BE5    ; ID_Continue # Lo  [44] SUNDANESE AVAGRAHA..BATAK LETTER U\n1BE6          ; ID_Continue # Mn       BATAK SIGN TOMPI\n1BE7          ; ID_Continue # Mc       BATAK VOWEL SIGN E\n1BE8..1BE9    ; ID_Continue # Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n1BEA..1BEC    ; ID_Continue # Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\n1BED          ; ID_Continue # Mn       BATAK VOWEL SIGN KARO O\n1BEE          ; ID_Continue # Mc       BATAK VOWEL SIGN U\n1BEF..1BF1    ; ID_Continue # Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n1BF2..1BF3    ; ID_Continue # Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN\n1C00..1C23    ; ID_Continue # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A\n1C24..1C2B    ; ID_Continue # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\n1C2C..1C33    ; ID_Continue # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n1C34..1C35    ; ID_Continue # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\n1C36..1C37    ; ID_Continue # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\n1C40..1C49    ; ID_Continue # Nd  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE\n1C4D..1C4F    ; ID_Continue # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA\n1C50..1C59    ; ID_Continue # Nd  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE\n1C5A..1C77    ; ID_Continue # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH\n1C78..1C7D    ; ID_Continue # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD\n1C80..1C8A    ; ID_Continue # L&  [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE\n1C90..1CBA    ; ID_Continue # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; ID_Continue # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1CD0..1CD2    ; ID_Continue # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\n1CD4..1CE0    ; ID_Continue # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n1CE1          ; ID_Continue # Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\n1CE2..1CE8    ; ID_Continue # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n1CE9..1CEC    ; ID_Continue # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL\n1CED          ; ID_Continue # Mn       VEDIC SIGN TIRYAK\n1CEE..1CF3    ; ID_Continue # Lo   [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA\n1CF4          ; ID_Continue # Mn       VEDIC TONE CANDRA ABOVE\n1CF5..1CF6    ; ID_Continue # Lo   [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA\n1CF7          ; ID_Continue # Mc       VEDIC SIGN ATIKRAMA\n1CF8..1CF9    ; ID_Continue # Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n1CFA          ; ID_Continue # Lo       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA\n1D00..1D2B    ; ID_Continue # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL\n1D2C..1D6A    ; ID_Continue # Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D6B..1D77    ; ID_Continue # L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G\n1D78          ; ID_Continue # Lm       MODIFIER LETTER CYRILLIC EN\n1D79..1D9A    ; ID_Continue # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK\n1D9B..1DBF    ; ID_Continue # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA\n1DC0..1DFF    ; ID_Continue # Mn  [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\n1E00..1F15    ; ID_Continue # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F18..1F1D    ; ID_Continue # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F45    ; ID_Continue # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F48..1F4D    ; ID_Continue # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; ID_Continue # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F59          ; ID_Continue # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; ID_Continue # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; ID_Continue # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F..1F7D    ; ID_Continue # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1FB4    ; ID_Continue # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FBC    ; ID_Continue # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBE          ; ID_Continue # L&       GREEK PROSGEGRAMMENI\n1FC2..1FC4    ; ID_Continue # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FCC    ; ID_Continue # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FD0..1FD3    ; ID_Continue # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FDB    ; ID_Continue # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE0..1FEC    ; ID_Continue # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FF2..1FF4    ; ID_Continue # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FFC    ; ID_Continue # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n200C..200D    ; ID_Continue # Cf   [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER\n203F..2040    ; ID_Continue # Pc   [2] UNDERTIE..CHARACTER TIE\n2054          ; ID_Continue # Pc       INVERTED UNDERTIE\n2071          ; ID_Continue # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n207F          ; ID_Continue # Lm       SUPERSCRIPT LATIN SMALL LETTER N\n2090..209C    ; ID_Continue # Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n20D0..20DC    ; ID_Continue # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n20E1          ; ID_Continue # Mn       COMBINING LEFT RIGHT ARROW ABOVE\n20E5..20F0    ; ID_Continue # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\n2102          ; ID_Continue # L&       DOUBLE-STRUCK CAPITAL C\n2107          ; ID_Continue # L&       EULER CONSTANT\n210A..2113    ; ID_Continue # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L\n2115          ; ID_Continue # L&       DOUBLE-STRUCK CAPITAL N\n2118          ; ID_Continue # Sm       SCRIPT CAPITAL P\n2119..211D    ; ID_Continue # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n2124          ; ID_Continue # L&       DOUBLE-STRUCK CAPITAL Z\n2126          ; ID_Continue # L&       OHM SIGN\n2128          ; ID_Continue # L&       BLACK-LETTER CAPITAL Z\n212A..212D    ; ID_Continue # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C\n212E          ; ID_Continue # So       ESTIMATED SYMBOL\n212F..2134    ; ID_Continue # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O\n2135..2138    ; ID_Continue # Lo   [4] ALEF SYMBOL..DALET SYMBOL\n2139          ; ID_Continue # L&       INFORMATION SOURCE\n213C..213F    ; ID_Continue # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI\n2145..2149    ; ID_Continue # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J\n214E          ; ID_Continue # L&       TURNED SMALL F\n2160..2182    ; ID_Continue # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND\n2183..2184    ; ID_Continue # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C\n2185..2188    ; ID_Continue # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND\n2C00..2C7B    ; ID_Continue # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E\n2C7C..2C7D    ; ID_Continue # Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\n2C7E..2CE4    ; ID_Continue # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI\n2CEB..2CEE    ; ID_Continue # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CEF..2CF1    ; ID_Continue # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\n2CF2..2CF3    ; ID_Continue # L&   [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI\n2D00..2D25    ; ID_Continue # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; ID_Continue # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; ID_Continue # L&       GEORGIAN SMALL LETTER AEN\n2D30..2D67    ; ID_Continue # Lo  [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO\n2D6F          ; ID_Continue # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK\n2D7F          ; ID_Continue # Mn       TIFINAGH CONSONANT JOINER\n2D80..2D96    ; ID_Continue # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE\n2DA0..2DA6    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO\n2DA8..2DAE    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO\n2DB0..2DB6    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO\n2DB8..2DBE    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO\n2DC0..2DC6    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO\n2DC8..2DCE    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO\n2DD0..2DD6    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO\n2DD8..2DDE    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO\n2DE0..2DFF    ; ID_Continue # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\n3005          ; ID_Continue # Lm       IDEOGRAPHIC ITERATION MARK\n3006          ; ID_Continue # Lo       IDEOGRAPHIC CLOSING MARK\n3007          ; ID_Continue # Nl       IDEOGRAPHIC NUMBER ZERO\n3021..3029    ; ID_Continue # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE\n302A..302D    ; ID_Continue # Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n302E..302F    ; ID_Continue # Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\n3031..3035    ; ID_Continue # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF\n3038..303A    ; ID_Continue # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY\n303B          ; ID_Continue # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK\n303C          ; ID_Continue # Lo       MASU MARK\n3041..3096    ; ID_Continue # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE\n3099..309A    ; ID_Continue # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n309B..309C    ; ID_Continue # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n309D..309E    ; ID_Continue # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK\n309F          ; ID_Continue # Lo       HIRAGANA DIGRAPH YORI\n30A1..30FA    ; ID_Continue # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO\n30FB          ; ID_Continue # Po       KATAKANA MIDDLE DOT\n30FC..30FE    ; ID_Continue # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK\n30FF          ; ID_Continue # Lo       KATAKANA DIGRAPH KOTO\n3105..312F    ; ID_Continue # Lo  [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN\n3131..318E    ; ID_Continue # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE\n31A0..31BF    ; ID_Continue # Lo  [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH\n31F0..31FF    ; ID_Continue # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO\n3400..4DBF    ; ID_Continue # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF\n4E00..A014    ; ID_Continue # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E\nA015          ; ID_Continue # Lm       YI SYLLABLE WU\nA016..A48C    ; ID_Continue # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR\nA4D0..A4F7    ; ID_Continue # Lo  [40] LISU LETTER BA..LISU LETTER OE\nA4F8..A4FD    ; ID_Continue # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU\nA500..A60B    ; ID_Continue # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG\nA60C          ; ID_Continue # Lm       VAI SYLLABLE LENGTHENER\nA610..A61F    ; ID_Continue # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG\nA620..A629    ; ID_Continue # Nd  [10] VAI DIGIT ZERO..VAI DIGIT NINE\nA62A..A62B    ; ID_Continue # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO\nA640..A66D    ; ID_Continue # L&  [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA66E          ; ID_Continue # Lo       CYRILLIC LETTER MULTIOCULAR O\nA66F          ; ID_Continue # Mn       COMBINING CYRILLIC VZMET\nA674..A67D    ; ID_Continue # Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\nA67F          ; ID_Continue # Lm       CYRILLIC PAYEROK\nA680..A69B    ; ID_Continue # L&  [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O\nA69C..A69D    ; ID_Continue # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA69E..A69F    ; ID_Continue # Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\nA6A0..A6E5    ; ID_Continue # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI\nA6E6..A6EF    ; ID_Continue # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM\nA6F0..A6F1    ; ID_Continue # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\nA717..A71F    ; ID_Continue # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK\nA722..A76F    ; ID_Continue # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON\nA770          ; ID_Continue # Lm       MODIFIER LETTER US\nA771..A787    ; ID_Continue # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T\nA788          ; ID_Continue # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT\nA78B..A78E    ; ID_Continue # L&   [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT\nA78F          ; ID_Continue # Lo       LATIN LETTER SINOLOGICAL DOT\nA790..A7DC    ; ID_Continue # L&  [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F1..A7F4    ; ID_Continue # Lm   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F5..A7F6    ; ID_Continue # L&   [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H\nA7F7          ; ID_Continue # Lo       LATIN EPIGRAPHIC LETTER SIDEWAYS I\nA7F8..A7F9    ; ID_Continue # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA7FA          ; ID_Continue # L&       LATIN LETTER SMALL CAPITAL TURNED M\nA7FB..A801    ; ID_Continue # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I\nA802          ; ID_Continue # Mn       SYLOTI NAGRI SIGN DVISVARA\nA803..A805    ; ID_Continue # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O\nA806          ; ID_Continue # Mn       SYLOTI NAGRI SIGN HASANTA\nA807..A80A    ; ID_Continue # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO\nA80B          ; ID_Continue # Mn       SYLOTI NAGRI SIGN ANUSVARA\nA80C..A822    ; ID_Continue # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO\nA823..A824    ; ID_Continue # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\nA825..A826    ; ID_Continue # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\nA827          ; ID_Continue # Mc       SYLOTI NAGRI VOWEL SIGN OO\nA82C          ; ID_Continue # Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA\nA840..A873    ; ID_Continue # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU\nA880..A881    ; ID_Continue # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\nA882..A8B3    ; ID_Continue # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA\nA8B4..A8C3    ; ID_Continue # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\nA8C4..A8C5    ; ID_Continue # Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\nA8D0..A8D9    ; ID_Continue # Nd  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE\nA8E0..A8F1    ; ID_Continue # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\nA8F2..A8F7    ; ID_Continue # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA\nA8FB          ; ID_Continue # Lo       DEVANAGARI HEADSTROKE\nA8FD..A8FE    ; ID_Continue # Lo   [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY\nA8FF          ; ID_Continue # Mn       DEVANAGARI VOWEL SIGN AY\nA900..A909    ; ID_Continue # Nd  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE\nA90A..A925    ; ID_Continue # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO\nA926..A92D    ; ID_Continue # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\nA930..A946    ; ID_Continue # Lo  [23] REJANG LETTER KA..REJANG LETTER A\nA947..A951    ; ID_Continue # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\nA952..A953    ; ID_Continue # Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA\nA960..A97C    ; ID_Continue # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\nA980..A982    ; ID_Continue # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\nA983          ; ID_Continue # Mc       JAVANESE SIGN WIGNYAN\nA984..A9B2    ; ID_Continue # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA\nA9B3          ; ID_Continue # Mn       JAVANESE SIGN CECAK TELU\nA9B4..A9B5    ; ID_Continue # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\nA9B6..A9B9    ; ID_Continue # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\nA9BA..A9BB    ; ID_Continue # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\nA9BC..A9BD    ; ID_Continue # Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET\nA9BE..A9C0    ; ID_Continue # Mc   [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON\nA9CF          ; ID_Continue # Lm       JAVANESE PANGRANGKEP\nA9D0..A9D9    ; ID_Continue # Nd  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE\nA9E0..A9E4    ; ID_Continue # Lo   [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA\nA9E5          ; ID_Continue # Mn       MYANMAR SIGN SHAN SAW\nA9E6          ; ID_Continue # Lm       MYANMAR MODIFIER LETTER SHAN REDUPLICATION\nA9E7..A9EF    ; ID_Continue # Lo   [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA\nA9F0..A9F9    ; ID_Continue # Nd  [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE\nA9FA..A9FE    ; ID_Continue # Lo   [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA\nAA00..AA28    ; ID_Continue # Lo  [41] CHAM LETTER A..CHAM LETTER HA\nAA29..AA2E    ; ID_Continue # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\nAA2F..AA30    ; ID_Continue # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\nAA31..AA32    ; ID_Continue # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\nAA33..AA34    ; ID_Continue # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\nAA35..AA36    ; ID_Continue # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\nAA40..AA42    ; ID_Continue # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG\nAA43          ; ID_Continue # Mn       CHAM CONSONANT SIGN FINAL NG\nAA44..AA4B    ; ID_Continue # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS\nAA4C          ; ID_Continue # Mn       CHAM CONSONANT SIGN FINAL M\nAA4D          ; ID_Continue # Mc       CHAM CONSONANT SIGN FINAL H\nAA50..AA59    ; ID_Continue # Nd  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE\nAA60..AA6F    ; ID_Continue # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA\nAA70          ; ID_Continue # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION\nAA71..AA76    ; ID_Continue # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM\nAA7A          ; ID_Continue # Lo       MYANMAR LETTER AITON RA\nAA7B          ; ID_Continue # Mc       MYANMAR SIGN PAO KAREN TONE\nAA7C          ; ID_Continue # Mn       MYANMAR SIGN TAI LAING TONE-2\nAA7D          ; ID_Continue # Mc       MYANMAR SIGN TAI LAING TONE-5\nAA7E..AAAF    ; ID_Continue # Lo  [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O\nAAB0          ; ID_Continue # Mn       TAI VIET MAI KANG\nAAB1          ; ID_Continue # Lo       TAI VIET VOWEL AA\nAAB2..AAB4    ; ID_Continue # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\nAAB5..AAB6    ; ID_Continue # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O\nAAB7..AAB8    ; ID_Continue # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\nAAB9..AABD    ; ID_Continue # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN\nAABE..AABF    ; ID_Continue # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\nAAC0          ; ID_Continue # Lo       TAI VIET TONE MAI NUENG\nAAC1          ; ID_Continue # Mn       TAI VIET TONE MAI THO\nAAC2          ; ID_Continue # Lo       TAI VIET TONE MAI SONG\nAADB..AADC    ; ID_Continue # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG\nAADD          ; ID_Continue # Lm       TAI VIET SYMBOL SAM\nAAE0..AAEA    ; ID_Continue # Lo  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA\nAAEB          ; ID_Continue # Mc       MEETEI MAYEK VOWEL SIGN II\nAAEC..AAED    ; ID_Continue # Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\nAAEE..AAEF    ; ID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\nAAF2          ; ID_Continue # Lo       MEETEI MAYEK ANJI\nAAF3..AAF4    ; ID_Continue # Lm   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK\nAAF5          ; ID_Continue # Mc       MEETEI MAYEK VOWEL SIGN VISARGA\nAAF6          ; ID_Continue # Mn       MEETEI MAYEK VIRAMA\nAB01..AB06    ; ID_Continue # Lo   [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO\nAB09..AB0E    ; ID_Continue # Lo   [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO\nAB11..AB16    ; ID_Continue # Lo   [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO\nAB20..AB26    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO\nAB28..AB2E    ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO\nAB30..AB5A    ; ID_Continue # L&  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG\nAB5C..AB5F    ; ID_Continue # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB60..AB68    ; ID_Continue # L&   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE\nAB69          ; ID_Continue # Lm       MODIFIER LETTER SMALL TURNED W\nAB70..ABBF    ; ID_Continue # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nABC0..ABE2    ; ID_Continue # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM\nABE3..ABE4    ; ID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\nABE5          ; ID_Continue # Mn       MEETEI MAYEK VOWEL SIGN ANAP\nABE6..ABE7    ; ID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\nABE8          ; ID_Continue # Mn       MEETEI MAYEK VOWEL SIGN UNAP\nABE9..ABEA    ; ID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\nABEC          ; ID_Continue # Mc       MEETEI MAYEK LUM IYEK\nABED          ; ID_Continue # Mn       MEETEI MAYEK APUN IYEK\nABF0..ABF9    ; ID_Continue # Nd  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE\nAC00..D7A3    ; ID_Continue # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH\nD7B0..D7C6    ; ID_Continue # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\nD7CB..D7FB    ; ID_Continue # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\nF900..FA6D    ; ID_Continue # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D\nFA70..FAD9    ; ID_Continue # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9\nFB00..FB06    ; ID_Continue # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; ID_Continue # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFB1D          ; ID_Continue # Lo       HEBREW LETTER YOD WITH HIRIQ\nFB1E          ; ID_Continue # Mn       HEBREW POINT JUDEO-SPANISH VARIKA\nFB1F..FB28    ; ID_Continue # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV\nFB2A..FB36    ; ID_Continue # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH\nFB38..FB3C    ; ID_Continue # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH\nFB3E          ; ID_Continue # Lo       HEBREW LETTER MEM WITH DAGESH\nFB40..FB41    ; ID_Continue # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH\nFB43..FB44    ; ID_Continue # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH\nFB46..FBB1    ; ID_Continue # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM\nFBD3..FD3D    ; ID_Continue # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM\nFD50..FD8F    ; ID_Continue # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM\nFD92..FDC7    ; ID_Continue # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM\nFDF0..FDFB    ; ID_Continue # Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU\nFE00..FE0F    ; ID_Continue # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\nFE20..FE2F    ; ID_Continue # Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\nFE33..FE34    ; ID_Continue # Pc   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE\nFE4D..FE4F    ; ID_Continue # Pc   [3] DASHED LOW LINE..WAVY LOW LINE\nFE70..FE74    ; ID_Continue # Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM\nFE76..FEFC    ; ID_Continue # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM\nFF10..FF19    ; ID_Continue # Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE\nFF21..FF3A    ; ID_Continue # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\nFF3F          ; ID_Continue # Pc       FULLWIDTH LOW LINE\nFF41..FF5A    ; ID_Continue # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\nFF65          ; ID_Continue # Po       HALFWIDTH KATAKANA MIDDLE DOT\nFF66..FF6F    ; ID_Continue # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU\nFF70          ; ID_Continue # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF71..FF9D    ; ID_Continue # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N\nFF9E..FF9F    ; ID_Continue # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\nFFA0..FFBE    ; ID_Continue # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH\nFFC2..FFC7    ; ID_Continue # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E\nFFCA..FFCF    ; ID_Continue # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE\nFFD2..FFD7    ; ID_Continue # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU\nFFDA..FFDC    ; ID_Continue # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I\n10000..1000B  ; ID_Continue # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE\n1000D..10026  ; ID_Continue # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO\n10028..1003A  ; ID_Continue # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO\n1003C..1003D  ; ID_Continue # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE\n1003F..1004D  ; ID_Continue # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO\n10050..1005D  ; ID_Continue # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089\n10080..100FA  ; ID_Continue # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305\n10140..10174  ; ID_Continue # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS\n101FD         ; ID_Continue # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\n10280..1029C  ; ID_Continue # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X\n102A0..102D0  ; ID_Continue # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3\n102E0         ; ID_Continue # Mn       COPTIC EPACT THOUSANDS MARK\n10300..1031F  ; ID_Continue # Lo  [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS\n1032D..10340  ; ID_Continue # Lo  [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA\n10341         ; ID_Continue # Nl       GOTHIC LETTER NINETY\n10342..10349  ; ID_Continue # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL\n1034A         ; ID_Continue # Nl       GOTHIC LETTER NINE HUNDRED\n10350..10375  ; ID_Continue # Lo  [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA\n10376..1037A  ; ID_Continue # Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n10380..1039D  ; ID_Continue # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU\n103A0..103C3  ; ID_Continue # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA\n103C8..103CF  ; ID_Continue # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH\n103D1..103D5  ; ID_Continue # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED\n10400..1044F  ; ID_Continue # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW\n10450..1049D  ; ID_Continue # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO\n104A0..104A9  ; ID_Continue # Nd  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE\n104B0..104D3  ; ID_Continue # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n104D8..104FB  ; ID_Continue # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10500..10527  ; ID_Continue # Lo  [40] ELBASAN LETTER A..ELBASAN LETTER KHE\n10530..10563  ; ID_Continue # Lo  [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW\n10570..1057A  ; ID_Continue # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; ID_Continue # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; ID_Continue # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; ID_Continue # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10597..105A1  ; ID_Continue # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; ID_Continue # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; ID_Continue # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; ID_Continue # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n105C0..105F3  ; ID_Continue # Lo  [52] TODHRI LETTER A..TODHRI LETTER OO\n10600..10736  ; ID_Continue # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664\n10740..10755  ; ID_Continue # Lo  [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE\n10760..10767  ; ID_Continue # Lo   [8] LINEAR A SIGN A800..LINEAR A SIGN A807\n10780..10785  ; ID_Continue # Lm   [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; ID_Continue # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; ID_Continue # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n10800..10805  ; ID_Continue # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA\n10808         ; ID_Continue # Lo       CYPRIOT SYLLABLE JO\n1080A..10835  ; ID_Continue # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO\n10837..10838  ; ID_Continue # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE\n1083C         ; ID_Continue # Lo       CYPRIOT SYLLABLE ZA\n1083F..10855  ; ID_Continue # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW\n10860..10876  ; ID_Continue # Lo  [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW\n10880..1089E  ; ID_Continue # Lo  [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW\n108E0..108F2  ; ID_Continue # Lo  [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH\n108F4..108F5  ; ID_Continue # Lo   [2] HATRAN LETTER SHIN..HATRAN LETTER TAW\n10900..10915  ; ID_Continue # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU\n10920..10939  ; ID_Continue # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C\n10940..10959  ; ID_Continue # Lo  [26] SIDETIC LETTER N01..SIDETIC LETTER N26\n10980..109B7  ; ID_Continue # Lo  [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA\n109BE..109BF  ; ID_Continue # Lo   [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN\n10A00         ; ID_Continue # Lo       KHAROSHTHI LETTER A\n10A01..10A03  ; ID_Continue # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n10A05..10A06  ; ID_Continue # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n10A0C..10A0F  ; ID_Continue # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n10A10..10A13  ; ID_Continue # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA\n10A15..10A17  ; ID_Continue # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA\n10A19..10A35  ; ID_Continue # Lo  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA\n10A38..10A3A  ; ID_Continue # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\n10A3F         ; ID_Continue # Mn       KHAROSHTHI VIRAMA\n10A60..10A7C  ; ID_Continue # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH\n10A80..10A9C  ; ID_Continue # Lo  [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH\n10AC0..10AC7  ; ID_Continue # Lo   [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW\n10AC9..10AE4  ; ID_Continue # Lo  [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW\n10AE5..10AE6  ; ID_Continue # Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\n10B00..10B35  ; ID_Continue # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE\n10B40..10B55  ; ID_Continue # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW\n10B60..10B72  ; ID_Continue # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW\n10B80..10B91  ; ID_Continue # Lo  [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW\n10C00..10C48  ; ID_Continue # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH\n10C80..10CB2  ; ID_Continue # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10CC0..10CF2  ; ID_Continue # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10D00..10D23  ; ID_Continue # Lo  [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA\n10D24..10D27  ; ID_Continue # Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n10D30..10D39  ; ID_Continue # Nd  [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE\n10D40..10D49  ; ID_Continue # Nd  [10] GARAY DIGIT ZERO..GARAY DIGIT NINE\n10D4A..10D4D  ; ID_Continue # Lo   [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE\n10D4E         ; ID_Continue # Lm       GARAY VOWEL LENGTH MARK\n10D4F         ; ID_Continue # Lo       GARAY SUKUN\n10D50..10D65  ; ID_Continue # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n10D69..10D6D  ; ID_Continue # Mn   [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK\n10D6F         ; ID_Continue # Lm       GARAY REDUPLICATION MARK\n10D70..10D85  ; ID_Continue # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n10E80..10EA9  ; ID_Continue # Lo  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET\n10EAB..10EAC  ; ID_Continue # Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK\n10EB0..10EB1  ; ID_Continue # Lo   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE\n10EC2..10EC4  ; ID_Continue # Lo   [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW\n10EC5         ; ID_Continue # Lm       ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW\n10EC6..10EC7  ; ID_Continue # Lo   [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW\n10EFA..10EFF  ; ID_Continue # Mn   [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA\n10F00..10F1C  ; ID_Continue # Lo  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL\n10F27         ; ID_Continue # Lo       OLD SOGDIAN LIGATURE AYIN-DALETH\n10F30..10F45  ; ID_Continue # Lo  [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN\n10F46..10F50  ; ID_Continue # Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW\n10F70..10F81  ; ID_Continue # Lo  [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH\n10F82..10F85  ; ID_Continue # Mn   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW\n10FB0..10FC4  ; ID_Continue # Lo  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW\n10FE0..10FF6  ; ID_Continue # Lo  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH\n11000         ; ID_Continue # Mc       BRAHMI SIGN CANDRABINDU\n11001         ; ID_Continue # Mn       BRAHMI SIGN ANUSVARA\n11002         ; ID_Continue # Mc       BRAHMI SIGN VISARGA\n11003..11037  ; ID_Continue # Lo  [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA\n11038..11046  ; ID_Continue # Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\n11066..1106F  ; ID_Continue # Nd  [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE\n11070         ; ID_Continue # Mn       BRAHMI SIGN OLD TAMIL VIRAMA\n11071..11072  ; ID_Continue # Lo   [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O\n11073..11074  ; ID_Continue # Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O\n11075         ; ID_Continue # Lo       BRAHMI LETTER OLD TAMIL LLA\n1107F..11081  ; ID_Continue # Mn   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA\n11082         ; ID_Continue # Mc       KAITHI SIGN VISARGA\n11083..110AF  ; ID_Continue # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA\n110B0..110B2  ; ID_Continue # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\n110B3..110B6  ; ID_Continue # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n110B7..110B8  ; ID_Continue # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\n110B9..110BA  ; ID_Continue # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\n110C2         ; ID_Continue # Mn       KAITHI VOWEL SIGN VOCALIC R\n110D0..110E8  ; ID_Continue # Lo  [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE\n110F0..110F9  ; ID_Continue # Nd  [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE\n11100..11102  ; ID_Continue # Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n11103..11126  ; ID_Continue # Lo  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA\n11127..1112B  ; ID_Continue # Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n1112C         ; ID_Continue # Mc       CHAKMA VOWEL SIGN E\n1112D..11134  ; ID_Continue # Mn   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA\n11136..1113F  ; ID_Continue # Nd  [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE\n11144         ; ID_Continue # Lo       CHAKMA LETTER LHAA\n11145..11146  ; ID_Continue # Mc   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI\n11147         ; ID_Continue # Lo       CHAKMA LETTER VAA\n11150..11172  ; ID_Continue # Lo  [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA\n11173         ; ID_Continue # Mn       MAHAJANI SIGN NUKTA\n11176         ; ID_Continue # Lo       MAHAJANI LIGATURE SHRI\n11180..11181  ; ID_Continue # Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n11182         ; ID_Continue # Mc       SHARADA SIGN VISARGA\n11183..111B2  ; ID_Continue # Lo  [48] SHARADA LETTER A..SHARADA LETTER HA\n111B3..111B5  ; ID_Continue # Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\n111B6..111BE  ; ID_Continue # Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n111BF..111C0  ; ID_Continue # Mc   [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA\n111C1..111C4  ; ID_Continue # Lo   [4] SHARADA SIGN AVAGRAHA..SHARADA OM\n111C9..111CC  ; ID_Continue # Mn   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK\n111CE         ; ID_Continue # Mc       SHARADA VOWEL SIGN PRISHTHAMATRA E\n111CF         ; ID_Continue # Mn       SHARADA SIGN INVERTED CANDRABINDU\n111D0..111D9  ; ID_Continue # Nd  [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE\n111DA         ; ID_Continue # Lo       SHARADA EKAM\n111DC         ; ID_Continue # Lo       SHARADA HEADSTROKE\n11200..11211  ; ID_Continue # Lo  [18] KHOJKI LETTER A..KHOJKI LETTER JJA\n11213..1122B  ; ID_Continue # Lo  [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA\n1122C..1122E  ; ID_Continue # Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\n1122F..11231  ; ID_Continue # Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n11232..11233  ; ID_Continue # Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\n11234         ; ID_Continue # Mn       KHOJKI SIGN ANUSVARA\n11235         ; ID_Continue # Mc       KHOJKI SIGN VIRAMA\n11236..11237  ; ID_Continue # Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\n1123E         ; ID_Continue # Mn       KHOJKI SIGN SUKUN\n1123F..11240  ; ID_Continue # Lo   [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I\n11241         ; ID_Continue # Mn       KHOJKI VOWEL SIGN VOCALIC R\n11280..11286  ; ID_Continue # Lo   [7] MULTANI LETTER A..MULTANI LETTER GA\n11288         ; ID_Continue # Lo       MULTANI LETTER GHA\n1128A..1128D  ; ID_Continue # Lo   [4] MULTANI LETTER CA..MULTANI LETTER JJA\n1128F..1129D  ; ID_Continue # Lo  [15] MULTANI LETTER NYA..MULTANI LETTER BA\n1129F..112A8  ; ID_Continue # Lo  [10] MULTANI LETTER BHA..MULTANI LETTER RHA\n112B0..112DE  ; ID_Continue # Lo  [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA\n112DF         ; ID_Continue # Mn       KHUDAWADI SIGN ANUSVARA\n112E0..112E2  ; ID_Continue # Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\n112E3..112EA  ; ID_Continue # Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\n112F0..112F9  ; ID_Continue # Nd  [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE\n11300..11301  ; ID_Continue # Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n11302..11303  ; ID_Continue # Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\n11305..1130C  ; ID_Continue # Lo   [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L\n1130F..11310  ; ID_Continue # Lo   [2] GRANTHA LETTER EE..GRANTHA LETTER AI\n11313..11328  ; ID_Continue # Lo  [22] GRANTHA LETTER OO..GRANTHA LETTER NA\n1132A..11330  ; ID_Continue # Lo   [7] GRANTHA LETTER PA..GRANTHA LETTER RA\n11332..11333  ; ID_Continue # Lo   [2] GRANTHA LETTER LA..GRANTHA LETTER LLA\n11335..11339  ; ID_Continue # Lo   [5] GRANTHA LETTER VA..GRANTHA LETTER HA\n1133B..1133C  ; ID_Continue # Mn   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA\n1133D         ; ID_Continue # Lo       GRANTHA SIGN AVAGRAHA\n1133E..1133F  ; ID_Continue # Mc   [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I\n11340         ; ID_Continue # Mn       GRANTHA VOWEL SIGN II\n11341..11344  ; ID_Continue # Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\n11347..11348  ; ID_Continue # Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\n1134B..1134D  ; ID_Continue # Mc   [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA\n11350         ; ID_Continue # Lo       GRANTHA OM\n11357         ; ID_Continue # Mc       GRANTHA AU LENGTH MARK\n1135D..11361  ; ID_Continue # Lo   [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL\n11362..11363  ; ID_Continue # Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\n11366..1136C  ; ID_Continue # Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\n11370..11374  ; ID_Continue # Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\n11380..11389  ; ID_Continue # Lo  [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL\n1138B         ; ID_Continue # Lo       TULU-TIGALARI LETTER EE\n1138E         ; ID_Continue # Lo       TULU-TIGALARI LETTER AI\n11390..113B5  ; ID_Continue # Lo  [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA\n113B7         ; ID_Continue # Lo       TULU-TIGALARI SIGN AVAGRAHA\n113B8..113BA  ; ID_Continue # Mc   [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II\n113BB..113C0  ; ID_Continue # Mn   [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL\n113C2         ; ID_Continue # Mc       TULU-TIGALARI VOWEL SIGN EE\n113C5         ; ID_Continue # Mc       TULU-TIGALARI VOWEL SIGN AI\n113C7..113CA  ; ID_Continue # Mc   [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA\n113CC..113CD  ; ID_Continue # Mc   [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA\n113CE         ; ID_Continue # Mn       TULU-TIGALARI SIGN VIRAMA\n113CF         ; ID_Continue # Mc       TULU-TIGALARI SIGN LOOPED VIRAMA\n113D0         ; ID_Continue # Mn       TULU-TIGALARI CONJOINER\n113D1         ; ID_Continue # Lo       TULU-TIGALARI REPHA\n113D2         ; ID_Continue # Mn       TULU-TIGALARI GEMINATION MARK\n113D3         ; ID_Continue # Lo       TULU-TIGALARI SIGN PLUTA\n113E1..113E2  ; ID_Continue # Mn   [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA\n11400..11434  ; ID_Continue # Lo  [53] NEWA LETTER A..NEWA LETTER HA\n11435..11437  ; ID_Continue # Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\n11438..1143F  ; ID_Continue # Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n11440..11441  ; ID_Continue # Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\n11442..11444  ; ID_Continue # Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\n11445         ; ID_Continue # Mc       NEWA SIGN VISARGA\n11446         ; ID_Continue # Mn       NEWA SIGN NUKTA\n11447..1144A  ; ID_Continue # Lo   [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI\n11450..11459  ; ID_Continue # Nd  [10] NEWA DIGIT ZERO..NEWA DIGIT NINE\n1145E         ; ID_Continue # Mn       NEWA SANDHI MARK\n1145F..11461  ; ID_Continue # Lo   [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA\n11480..114AF  ; ID_Continue # Lo  [48] TIRHUTA ANJI..TIRHUTA LETTER HA\n114B0..114B2  ; ID_Continue # Mc   [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II\n114B3..114B8  ; ID_Continue # Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n114B9         ; ID_Continue # Mc       TIRHUTA VOWEL SIGN E\n114BA         ; ID_Continue # Mn       TIRHUTA VOWEL SIGN SHORT E\n114BB..114BE  ; ID_Continue # Mc   [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU\n114BF..114C0  ; ID_Continue # Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n114C1         ; ID_Continue # Mc       TIRHUTA SIGN VISARGA\n114C2..114C3  ; ID_Continue # Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\n114C4..114C5  ; ID_Continue # Lo   [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG\n114C7         ; ID_Continue # Lo       TIRHUTA OM\n114D0..114D9  ; ID_Continue # Nd  [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE\n11580..115AE  ; ID_Continue # Lo  [47] SIDDHAM LETTER A..SIDDHAM LETTER HA\n115AF..115B1  ; ID_Continue # Mc   [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II\n115B2..115B5  ; ID_Continue # Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n115B8..115BB  ; ID_Continue # Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\n115BC..115BD  ; ID_Continue # Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n115BE         ; ID_Continue # Mc       SIDDHAM SIGN VISARGA\n115BF..115C0  ; ID_Continue # Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\n115D8..115DB  ; ID_Continue # Lo   [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U\n115DC..115DD  ; ID_Continue # Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n11600..1162F  ; ID_Continue # Lo  [48] MODI LETTER A..MODI LETTER LLA\n11630..11632  ; ID_Continue # Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\n11633..1163A  ; ID_Continue # Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n1163B..1163C  ; ID_Continue # Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\n1163D         ; ID_Continue # Mn       MODI SIGN ANUSVARA\n1163E         ; ID_Continue # Mc       MODI SIGN VISARGA\n1163F..11640  ; ID_Continue # Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\n11644         ; ID_Continue # Lo       MODI SIGN HUVA\n11650..11659  ; ID_Continue # Nd  [10] MODI DIGIT ZERO..MODI DIGIT NINE\n11680..116AA  ; ID_Continue # Lo  [43] TAKRI LETTER A..TAKRI LETTER RRA\n116AB         ; ID_Continue # Mn       TAKRI SIGN ANUSVARA\n116AC         ; ID_Continue # Mc       TAKRI SIGN VISARGA\n116AD         ; ID_Continue # Mn       TAKRI VOWEL SIGN AA\n116AE..116AF  ; ID_Continue # Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\n116B0..116B5  ; ID_Continue # Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n116B6         ; ID_Continue # Mc       TAKRI SIGN VIRAMA\n116B7         ; ID_Continue # Mn       TAKRI SIGN NUKTA\n116B8         ; ID_Continue # Lo       TAKRI LETTER ARCHAIC KHA\n116C0..116C9  ; ID_Continue # Nd  [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE\n116D0..116E3  ; ID_Continue # Nd  [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE\n11700..1171A  ; ID_Continue # Lo  [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA\n1171D         ; ID_Continue # Mn       AHOM CONSONANT SIGN MEDIAL LA\n1171E         ; ID_Continue # Mc       AHOM CONSONANT SIGN MEDIAL RA\n1171F         ; ID_Continue # Mn       AHOM CONSONANT SIGN MEDIAL LIGATING RA\n11720..11721  ; ID_Continue # Mc   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA\n11722..11725  ; ID_Continue # Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n11726         ; ID_Continue # Mc       AHOM VOWEL SIGN E\n11727..1172B  ; ID_Continue # Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\n11730..11739  ; ID_Continue # Nd  [10] AHOM DIGIT ZERO..AHOM DIGIT NINE\n11740..11746  ; ID_Continue # Lo   [7] AHOM LETTER CA..AHOM LETTER LLA\n11800..1182B  ; ID_Continue # Lo  [44] DOGRA LETTER A..DOGRA LETTER RRA\n1182C..1182E  ; ID_Continue # Mc   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II\n1182F..11837  ; ID_Continue # Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA\n11838         ; ID_Continue # Mc       DOGRA SIGN VISARGA\n11839..1183A  ; ID_Continue # Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA\n118A0..118DF  ; ID_Continue # L&  [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n118E0..118E9  ; ID_Continue # Nd  [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE\n118FF..11906  ; ID_Continue # Lo   [8] WARANG CITI OM..DIVES AKURU LETTER E\n11909         ; ID_Continue # Lo       DIVES AKURU LETTER O\n1190C..11913  ; ID_Continue # Lo   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA\n11915..11916  ; ID_Continue # Lo   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA\n11918..1192F  ; ID_Continue # Lo  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA\n11930..11935  ; ID_Continue # Mc   [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E\n11937..11938  ; ID_Continue # Mc   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O\n1193B..1193C  ; ID_Continue # Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU\n1193D         ; ID_Continue # Mc       DIVES AKURU SIGN HALANTA\n1193E         ; ID_Continue # Mn       DIVES AKURU VIRAMA\n1193F         ; ID_Continue # Lo       DIVES AKURU PREFIXED NASAL SIGN\n11940         ; ID_Continue # Mc       DIVES AKURU MEDIAL YA\n11941         ; ID_Continue # Lo       DIVES AKURU INITIAL RA\n11942         ; ID_Continue # Mc       DIVES AKURU MEDIAL RA\n11943         ; ID_Continue # Mn       DIVES AKURU SIGN NUKTA\n11950..11959  ; ID_Continue # Nd  [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE\n119A0..119A7  ; ID_Continue # Lo   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR\n119AA..119D0  ; ID_Continue # Lo  [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA\n119D1..119D3  ; ID_Continue # Mc   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II\n119D4..119D7  ; ID_Continue # Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR\n119DA..119DB  ; ID_Continue # Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI\n119DC..119DF  ; ID_Continue # Mc   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA\n119E0         ; ID_Continue # Mn       NANDINAGARI SIGN VIRAMA\n119E1         ; ID_Continue # Lo       NANDINAGARI SIGN AVAGRAHA\n119E3         ; ID_Continue # Lo       NANDINAGARI HEADSTROKE\n119E4         ; ID_Continue # Mc       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E\n11A00         ; ID_Continue # Lo       ZANABAZAR SQUARE LETTER A\n11A01..11A0A  ; ID_Continue # Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n11A0B..11A32  ; ID_Continue # Lo  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA\n11A33..11A38  ; ID_Continue # Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\n11A39         ; ID_Continue # Mc       ZANABAZAR SQUARE SIGN VISARGA\n11A3A         ; ID_Continue # Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\n11A3B..11A3E  ; ID_Continue # Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n11A47         ; ID_Continue # Mn       ZANABAZAR SQUARE SUBJOINER\n11A50         ; ID_Continue # Lo       SOYOMBO LETTER A\n11A51..11A56  ; ID_Continue # Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n11A57..11A58  ; ID_Continue # Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\n11A59..11A5B  ; ID_Continue # Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n11A5C..11A89  ; ID_Continue # Lo  [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA\n11A8A..11A96  ; ID_Continue # Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n11A97         ; ID_Continue # Mc       SOYOMBO SIGN VISARGA\n11A98..11A99  ; ID_Continue # Mn   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER\n11A9D         ; ID_Continue # Lo       SOYOMBO MARK PLUTA\n11AB0..11AF8  ; ID_Continue # Lo  [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL\n11B60         ; ID_Continue # Mn       SHARADA VOWEL SIGN OE\n11B61         ; ID_Continue # Mc       SHARADA VOWEL SIGN OOE\n11B62..11B64  ; ID_Continue # Mn   [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E\n11B65         ; ID_Continue # Mc       SHARADA VOWEL SIGN SHORT O\n11B66         ; ID_Continue # Mn       SHARADA VOWEL SIGN CANDRA E\n11B67         ; ID_Continue # Mc       SHARADA VOWEL SIGN CANDRA O\n11BC0..11BE0  ; ID_Continue # Lo  [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO\n11BF0..11BF9  ; ID_Continue # Nd  [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE\n11C00..11C08  ; ID_Continue # Lo   [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L\n11C0A..11C2E  ; ID_Continue # Lo  [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA\n11C2F         ; ID_Continue # Mc       BHAIKSUKI VOWEL SIGN AA\n11C30..11C36  ; ID_Continue # Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n11C38..11C3D  ; ID_Continue # Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n11C3E         ; ID_Continue # Mc       BHAIKSUKI SIGN VISARGA\n11C3F         ; ID_Continue # Mn       BHAIKSUKI SIGN VIRAMA\n11C40         ; ID_Continue # Lo       BHAIKSUKI SIGN AVAGRAHA\n11C50..11C59  ; ID_Continue # Nd  [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE\n11C72..11C8F  ; ID_Continue # Lo  [30] MARCHEN LETTER KA..MARCHEN LETTER A\n11C92..11CA7  ; ID_Continue # Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n11CA9         ; ID_Continue # Mc       MARCHEN SUBJOINED LETTER YA\n11CAA..11CB0  ; ID_Continue # Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n11CB1         ; ID_Continue # Mc       MARCHEN VOWEL SIGN I\n11CB2..11CB3  ; ID_Continue # Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n11CB4         ; ID_Continue # Mc       MARCHEN VOWEL SIGN O\n11CB5..11CB6  ; ID_Continue # Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n11D00..11D06  ; ID_Continue # Lo   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E\n11D08..11D09  ; ID_Continue # Lo   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O\n11D0B..11D30  ; ID_Continue # Lo  [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA\n11D31..11D36  ; ID_Continue # Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n11D3A         ; ID_Continue # Mn       MASARAM GONDI VOWEL SIGN E\n11D3C..11D3D  ; ID_Continue # Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n11D3F..11D45  ; ID_Continue # Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\n11D46         ; ID_Continue # Lo       MASARAM GONDI REPHA\n11D47         ; ID_Continue # Mn       MASARAM GONDI RA-KARA\n11D50..11D59  ; ID_Continue # Nd  [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE\n11D60..11D65  ; ID_Continue # Lo   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU\n11D67..11D68  ; ID_Continue # Lo   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI\n11D6A..11D89  ; ID_Continue # Lo  [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA\n11D8A..11D8E  ; ID_Continue # Mc   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU\n11D90..11D91  ; ID_Continue # Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI\n11D93..11D94  ; ID_Continue # Mc   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU\n11D95         ; ID_Continue # Mn       GUNJALA GONDI SIGN ANUSVARA\n11D96         ; ID_Continue # Mc       GUNJALA GONDI SIGN VISARGA\n11D97         ; ID_Continue # Mn       GUNJALA GONDI VIRAMA\n11D98         ; ID_Continue # Lo       GUNJALA GONDI OM\n11DA0..11DA9  ; ID_Continue # Nd  [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE\n11DB0..11DD8  ; ID_Continue # Lo  [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH\n11DD9         ; ID_Continue # Lm       TOLONG SIKI SIGN SELA\n11DDA..11DDB  ; ID_Continue # Lo   [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA\n11DE0..11DE9  ; ID_Continue # Nd  [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE\n11EE0..11EF2  ; ID_Continue # Lo  [19] MAKASAR LETTER KA..MAKASAR ANGKA\n11EF3..11EF4  ; ID_Continue # Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U\n11EF5..11EF6  ; ID_Continue # Mc   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O\n11F00..11F01  ; ID_Continue # Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA\n11F02         ; ID_Continue # Lo       KAWI SIGN REPHA\n11F03         ; ID_Continue # Mc       KAWI SIGN VISARGA\n11F04..11F10  ; ID_Continue # Lo  [13] KAWI LETTER A..KAWI LETTER O\n11F12..11F33  ; ID_Continue # Lo  [34] KAWI LETTER KA..KAWI LETTER JNYA\n11F34..11F35  ; ID_Continue # Mc   [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA\n11F36..11F3A  ; ID_Continue # Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R\n11F3E..11F3F  ; ID_Continue # Mc   [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI\n11F40         ; ID_Continue # Mn       KAWI VOWEL SIGN EU\n11F41         ; ID_Continue # Mc       KAWI SIGN KILLER\n11F42         ; ID_Continue # Mn       KAWI CONJOINER\n11F50..11F59  ; ID_Continue # Nd  [10] KAWI DIGIT ZERO..KAWI DIGIT NINE\n11F5A         ; ID_Continue # Mn       KAWI SIGN NUKTA\n11FB0         ; ID_Continue # Lo       LISU LETTER YHA\n12000..12399  ; ID_Continue # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U\n12400..1246E  ; ID_Continue # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM\n12480..12543  ; ID_Continue # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU\n12F90..12FF0  ; ID_Continue # Lo  [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114\n13000..1342F  ; ID_Continue # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D\n13440         ; ID_Continue # Mn       EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY\n13441..13446  ; ID_Continue # Lo   [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN\n13447..13455  ; ID_Continue # Mn  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED\n13460..143FA  ; ID_Continue # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA\n14400..14646  ; ID_Continue # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530\n16100..1611D  ; ID_Continue # Lo  [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA\n1611E..16129  ; ID_Continue # Mn  [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK\n1612A..1612C  ; ID_Continue # Mc   [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA\n1612D..1612F  ; ID_Continue # Mn   [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA\n16130..16139  ; ID_Continue # Nd  [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE\n16800..16A38  ; ID_Continue # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ\n16A40..16A5E  ; ID_Continue # Lo  [31] MRO LETTER TA..MRO LETTER TEK\n16A60..16A69  ; ID_Continue # Nd  [10] MRO DIGIT ZERO..MRO DIGIT NINE\n16A70..16ABE  ; ID_Continue # Lo  [79] TANGSA LETTER OZ..TANGSA LETTER ZA\n16AC0..16AC9  ; ID_Continue # Nd  [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE\n16AD0..16AED  ; ID_Continue # Lo  [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I\n16AF0..16AF4  ; ID_Continue # Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\n16B00..16B2F  ; ID_Continue # Lo  [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU\n16B30..16B36  ; ID_Continue # Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\n16B40..16B43  ; ID_Continue # Lm   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM\n16B50..16B59  ; ID_Continue # Nd  [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE\n16B63..16B77  ; ID_Continue # Lo  [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS\n16B7D..16B8F  ; ID_Continue # Lo  [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ\n16D40..16D42  ; ID_Continue # Lm   [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA\n16D43..16D6A  ; ID_Continue # Lo  [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU\n16D6B..16D6C  ; ID_Continue # Lm   [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT\n16D70..16D79  ; ID_Continue # Nd  [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE\n16E40..16E7F  ; ID_Continue # L&  [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16EA0..16EB8  ; ID_Continue # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n16EBB..16ED3  ; ID_Continue # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n16F00..16F4A  ; ID_Continue # Lo  [75] MIAO LETTER PA..MIAO LETTER RTE\n16F4F         ; ID_Continue # Mn       MIAO SIGN CONSONANT MODIFIER BAR\n16F50         ; ID_Continue # Lo       MIAO LETTER NASALIZATION\n16F51..16F87  ; ID_Continue # Mc  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI\n16F8F..16F92  ; ID_Continue # Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n16F93..16F9F  ; ID_Continue # Lm  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8\n16FE0..16FE1  ; ID_Continue # Lm   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK\n16FE3         ; ID_Continue # Lm       OLD CHINESE ITERATION MARK\n16FE4         ; ID_Continue # Mn       KHITAN SMALL SCRIPT FILLER\n16FF0..16FF1  ; ID_Continue # Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY\n16FF2..16FF3  ; ID_Continue # Lm   [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER\n16FF4..16FF6  ; ID_Continue # Nl   [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS\n17000..18CD5  ; ID_Continue # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5\n18CFF..18D1E  ; ID_Continue # Lo  [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E\n18D80..18DF2  ; ID_Continue # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883\n1AFF0..1AFF3  ; ID_Continue # Lm   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5\n1AFF5..1AFFB  ; ID_Continue # Lm   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5\n1AFFD..1AFFE  ; ID_Continue # Lm   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8\n1B000..1B122  ; ID_Continue # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU\n1B132         ; ID_Continue # Lo       HIRAGANA LETTER SMALL KO\n1B150..1B152  ; ID_Continue # Lo   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO\n1B155         ; ID_Continue # Lo       KATAKANA LETTER SMALL KO\n1B164..1B167  ; ID_Continue # Lo   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N\n1B170..1B2FB  ; ID_Continue # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB\n1BC00..1BC6A  ; ID_Continue # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M\n1BC70..1BC7C  ; ID_Continue # Lo  [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK\n1BC80..1BC88  ; ID_Continue # Lo   [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL\n1BC90..1BC99  ; ID_Continue # Lo  [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW\n1BC9D..1BC9E  ; ID_Continue # Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\n1CCF0..1CCF9  ; ID_Continue # Nd  [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE\n1CF00..1CF2D  ; ID_Continue # Mn  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT\n1CF30..1CF46  ; ID_Continue # Mn  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG\n1D165..1D166  ; ID_Continue # Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\n1D167..1D169  ; ID_Continue # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\n1D16D..1D172  ; ID_Continue # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5\n1D17B..1D182  ; ID_Continue # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\n1D185..1D18B  ; ID_Continue # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\n1D1AA..1D1AD  ; ID_Continue # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\n1D242..1D244  ; ID_Continue # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\n1D400..1D454  ; ID_Continue # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D49C  ; ID_Continue # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; ID_Continue # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; ID_Continue # L&       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; ID_Continue # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; ID_Continue # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B9  ; ID_Continue # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; ID_Continue # L&       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; ID_Continue # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D505  ; ID_Continue # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; ID_Continue # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; ID_Continue # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; ID_Continue # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D51E..1D539  ; ID_Continue # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; ID_Continue # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; ID_Continue # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; ID_Continue # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; ID_Continue # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D552..1D6A5  ; ID_Continue # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6A8..1D6C0  ; ID_Continue # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6C2..1D6DA  ; ID_Continue # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DC..1D6FA  ; ID_Continue # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D6FC..1D714  ; ID_Continue # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D716..1D734  ; ID_Continue # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D736..1D74E  ; ID_Continue # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D750..1D76E  ; ID_Continue # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D770..1D788  ; ID_Continue # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D78A..1D7A8  ; ID_Continue # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7AA..1D7C2  ; ID_Continue # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C4..1D7CB  ; ID_Continue # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA\n1D7CE..1D7FF  ; ID_Continue # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE\n1DA00..1DA36  ; ID_Continue # Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\n1DA3B..1DA6C  ; ID_Continue # Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\n1DA75         ; ID_Continue # Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\n1DA84         ; ID_Continue # Mn       SIGNWRITING LOCATION HEAD NECK\n1DA9B..1DA9F  ; ID_Continue # Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\n1DAA1..1DAAF  ; ID_Continue # Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\n1DF00..1DF09  ; ID_Continue # L&  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK\n1DF0A         ; ID_Continue # Lo       LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK\n1DF0B..1DF1E  ; ID_Continue # L&  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL\n1DF25..1DF2A  ; ID_Continue # L&   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK\n1E000..1E006  ; ID_Continue # Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n1E008..1E018  ; ID_Continue # Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n1E01B..1E021  ; ID_Continue # Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n1E023..1E024  ; ID_Continue # Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n1E026..1E02A  ; ID_Continue # Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n1E030..1E06D  ; ID_Continue # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E08F         ; ID_Continue # Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n1E100..1E12C  ; ID_Continue # Lo  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W\n1E130..1E136  ; ID_Continue # Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D\n1E137..1E13D  ; ID_Continue # Lm   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER\n1E140..1E149  ; ID_Continue # Nd  [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE\n1E14E         ; ID_Continue # Lo       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ\n1E290..1E2AD  ; ID_Continue # Lo  [30] TOTO LETTER PA..TOTO LETTER A\n1E2AE         ; ID_Continue # Mn       TOTO SIGN RISING TONE\n1E2C0..1E2EB  ; ID_Continue # Lo  [44] WANCHO LETTER AA..WANCHO LETTER YIH\n1E2EC..1E2EF  ; ID_Continue # Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI\n1E2F0..1E2F9  ; ID_Continue # Nd  [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE\n1E4D0..1E4EA  ; ID_Continue # Lo  [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL\n1E4EB         ; ID_Continue # Lm       NAG MUNDARI SIGN OJOD\n1E4EC..1E4EF  ; ID_Continue # Mn   [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH\n1E4F0..1E4F9  ; ID_Continue # Nd  [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE\n1E5D0..1E5ED  ; ID_Continue # Lo  [30] OL ONAL LETTER O..OL ONAL LETTER EG\n1E5EE..1E5EF  ; ID_Continue # Mn   [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR\n1E5F0         ; ID_Continue # Lo       OL ONAL SIGN HODDOND\n1E5F1..1E5FA  ; ID_Continue # Nd  [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE\n1E6C0..1E6DE  ; ID_Continue # Lo  [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO\n1E6E0..1E6E2  ; ID_Continue # Lo   [3] TAI YO LETTER AA..TAI YO LETTER UE\n1E6E3         ; ID_Continue # Mn       TAI YO SIGN UE\n1E6E4..1E6E5  ; ID_Continue # Lo   [2] TAI YO LETTER U..TAI YO LETTER AE\n1E6E6         ; ID_Continue # Mn       TAI YO SIGN AU\n1E6E7..1E6ED  ; ID_Continue # Lo   [7] TAI YO LETTER O..TAI YO LETTER AUE\n1E6EE..1E6EF  ; ID_Continue # Mn   [2] TAI YO SIGN AY..TAI YO SIGN ANG\n1E6F0..1E6F4  ; ID_Continue # Lo   [5] TAI YO LETTER AN..TAI YO LETTER AP\n1E6F5         ; ID_Continue # Mn       TAI YO SIGN OM\n1E6FE         ; ID_Continue # Lo       TAI YO SYMBOL MUEANG\n1E6FF         ; ID_Continue # Lm       TAI YO XAM LAI\n1E7E0..1E7E6  ; ID_Continue # Lo   [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO\n1E7E8..1E7EB  ; ID_Continue # Lo   [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE\n1E7ED..1E7EE  ; ID_Continue # Lo   [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE\n1E7F0..1E7FE  ; ID_Continue # Lo  [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE\n1E800..1E8C4  ; ID_Continue # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON\n1E8D0..1E8D6  ; ID_Continue # Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\n1E900..1E943  ; ID_Continue # L&  [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA\n1E944..1E94A  ; ID_Continue # Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\n1E94B         ; ID_Continue # Lm       ADLAM NASALIZATION MARK\n1E950..1E959  ; ID_Continue # Nd  [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE\n1EE00..1EE03  ; ID_Continue # Lo   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL\n1EE05..1EE1F  ; ID_Continue # Lo  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF\n1EE21..1EE22  ; ID_Continue # Lo   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM\n1EE24         ; ID_Continue # Lo       ARABIC MATHEMATICAL INITIAL HEH\n1EE27         ; ID_Continue # Lo       ARABIC MATHEMATICAL INITIAL HAH\n1EE29..1EE32  ; ID_Continue # Lo  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF\n1EE34..1EE37  ; ID_Continue # Lo   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH\n1EE39         ; ID_Continue # Lo       ARABIC MATHEMATICAL INITIAL DAD\n1EE3B         ; ID_Continue # Lo       ARABIC MATHEMATICAL INITIAL GHAIN\n1EE42         ; ID_Continue # Lo       ARABIC MATHEMATICAL TAILED JEEM\n1EE47         ; ID_Continue # Lo       ARABIC MATHEMATICAL TAILED HAH\n1EE49         ; ID_Continue # Lo       ARABIC MATHEMATICAL TAILED YEH\n1EE4B         ; ID_Continue # Lo       ARABIC MATHEMATICAL TAILED LAM\n1EE4D..1EE4F  ; ID_Continue # Lo   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN\n1EE51..1EE52  ; ID_Continue # Lo   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF\n1EE54         ; ID_Continue # Lo       ARABIC MATHEMATICAL TAILED SHEEN\n1EE57         ; ID_Continue # Lo       ARABIC MATHEMATICAL TAILED KHAH\n1EE59         ; ID_Continue # Lo       ARABIC MATHEMATICAL TAILED DAD\n1EE5B         ; ID_Continue # Lo       ARABIC MATHEMATICAL TAILED GHAIN\n1EE5D         ; ID_Continue # Lo       ARABIC MATHEMATICAL TAILED DOTLESS NOON\n1EE5F         ; ID_Continue # Lo       ARABIC MATHEMATICAL TAILED DOTLESS QAF\n1EE61..1EE62  ; ID_Continue # Lo   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM\n1EE64         ; ID_Continue # Lo       ARABIC MATHEMATICAL STRETCHED HEH\n1EE67..1EE6A  ; ID_Continue # Lo   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF\n1EE6C..1EE72  ; ID_Continue # Lo   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF\n1EE74..1EE77  ; ID_Continue # Lo   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH\n1EE79..1EE7C  ; ID_Continue # Lo   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH\n1EE7E         ; ID_Continue # Lo       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH\n1EE80..1EE89  ; ID_Continue # Lo  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH\n1EE8B..1EE9B  ; ID_Continue # Lo  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN\n1EEA1..1EEA3  ; ID_Continue # Lo   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL\n1EEA5..1EEA9  ; ID_Continue # Lo   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH\n1EEAB..1EEBB  ; ID_Continue # Lo  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN\n1FBF0..1FBF9  ; ID_Continue # Nd  [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE\n20000..2A6DF  ; ID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF\n2A700..2B81D  ; ID_Continue # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D\n2B820..2CEAD  ; ID_Continue # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD\n2CEB0..2EBE0  ; ID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0\n2EBF0..2EE5D  ; ID_Continue # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D\n2F800..2FA1D  ; ID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D\n30000..3134A  ; ID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A\n31350..33479  ; ID_Continue # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479\nE0100..E01EF  ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\n\n# Total code points: 149240\n\n# ================================================\n\n# Derived Property: XID_Start\n#  ID_Start modified for closure under NFKx\n#  Modified as described in UAX #15\n#  NOTE: Does NOT remove the non-NFKx characters.\n#        Merely ensures that if isIdentifer(string) then isIdentifier(NFKx(string))\n#  NOTE: See UAX #31 for more information\n\n0041..005A    ; XID_Start # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n0061..007A    ; XID_Start # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00AA          ; XID_Start # Lo       FEMININE ORDINAL INDICATOR\n00B5          ; XID_Start # L&       MICRO SIGN\n00BA          ; XID_Start # Lo       MASCULINE ORDINAL INDICATOR\n00C0..00D6    ; XID_Start # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00F6    ; XID_Start # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..01BA    ; XID_Start # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL\n01BB          ; XID_Start # Lo       LATIN LETTER TWO WITH STROKE\n01BC..01BF    ; XID_Start # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN\n01C0..01C3    ; XID_Start # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK\n01C4..0293    ; XID_Start # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL\n0294..0295    ; XID_Start # Lo   [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE\n0296..02AF    ; XID_Start # L&  [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL\n02B0..02C1    ; XID_Start # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP\n02C6..02D1    ; XID_Start # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON\n02E0..02E4    ; XID_Start # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n02EC          ; XID_Start # Lm       MODIFIER LETTER VOICING\n02EE          ; XID_Start # Lm       MODIFIER LETTER DOUBLE APOSTROPHE\n0370..0373    ; XID_Start # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI\n0374          ; XID_Start # Lm       GREEK NUMERAL SIGN\n0376..0377    ; XID_Start # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037B..037D    ; XID_Start # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n037F          ; XID_Start # L&       GREEK CAPITAL LETTER YOT\n0386          ; XID_Start # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0388..038A    ; XID_Start # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; XID_Start # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..03A1    ; XID_Start # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO\n03A3..03F5    ; XID_Start # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL\n03F7..0481    ; XID_Start # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA\n048A..052F    ; XID_Start # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER\n0531..0556    ; XID_Start # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n0559          ; XID_Start # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING\n0560..0588    ; XID_Start # L&  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE\n05D0..05EA    ; XID_Start # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV\n05EF..05F2    ; XID_Start # Lo   [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD\n0620..063F    ; XID_Start # Lo  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE\n0640          ; XID_Start # Lm       ARABIC TATWEEL\n0641..064A    ; XID_Start # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH\n066E..066F    ; XID_Start # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF\n0671..06D3    ; XID_Start # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n06D5          ; XID_Start # Lo       ARABIC LETTER AE\n06E5..06E6    ; XID_Start # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH\n06EE..06EF    ; XID_Start # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V\n06FA..06FC    ; XID_Start # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW\n06FF          ; XID_Start # Lo       ARABIC LETTER HEH WITH INVERTED V\n0710          ; XID_Start # Lo       SYRIAC LETTER ALAPH\n0712..072F    ; XID_Start # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH\n074D..07A5    ; XID_Start # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU\n07B1          ; XID_Start # Lo       THAANA LETTER NAA\n07CA..07EA    ; XID_Start # Lo  [33] NKO LETTER A..NKO LETTER JONA RA\n07F4..07F5    ; XID_Start # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE\n07FA          ; XID_Start # Lm       NKO LAJANYALAN\n0800..0815    ; XID_Start # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF\n081A          ; XID_Start # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT\n0824          ; XID_Start # Lm       SAMARITAN MODIFIER LETTER SHORT A\n0828          ; XID_Start # Lm       SAMARITAN MODIFIER LETTER I\n0840..0858    ; XID_Start # Lo  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN\n0860..086A    ; XID_Start # Lo  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA\n0870..0887    ; XID_Start # Lo  [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT\n0889..088F    ; XID_Start # Lo   [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE\n08A0..08C8    ; XID_Start # Lo  [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF\n08C9          ; XID_Start # Lm       ARABIC SMALL FARSI YEH\n0904..0939    ; XID_Start # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA\n093D          ; XID_Start # Lo       DEVANAGARI SIGN AVAGRAHA\n0950          ; XID_Start # Lo       DEVANAGARI OM\n0958..0961    ; XID_Start # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL\n0971          ; XID_Start # Lm       DEVANAGARI SIGN HIGH SPACING DOT\n0972..0980    ; XID_Start # Lo  [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI\n0985..098C    ; XID_Start # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L\n098F..0990    ; XID_Start # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI\n0993..09A8    ; XID_Start # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA\n09AA..09B0    ; XID_Start # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA\n09B2          ; XID_Start # Lo       BENGALI LETTER LA\n09B6..09B9    ; XID_Start # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA\n09BD          ; XID_Start # Lo       BENGALI SIGN AVAGRAHA\n09CE          ; XID_Start # Lo       BENGALI LETTER KHANDA TA\n09DC..09DD    ; XID_Start # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA\n09DF..09E1    ; XID_Start # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL\n09F0..09F1    ; XID_Start # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL\n09FC          ; XID_Start # Lo       BENGALI LETTER VEDIC ANUSVARA\n0A05..0A0A    ; XID_Start # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU\n0A0F..0A10    ; XID_Start # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI\n0A13..0A28    ; XID_Start # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA\n0A2A..0A30    ; XID_Start # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA\n0A32..0A33    ; XID_Start # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA\n0A35..0A36    ; XID_Start # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA\n0A38..0A39    ; XID_Start # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA\n0A59..0A5C    ; XID_Start # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA\n0A5E          ; XID_Start # Lo       GURMUKHI LETTER FA\n0A72..0A74    ; XID_Start # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR\n0A85..0A8D    ; XID_Start # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E\n0A8F..0A91    ; XID_Start # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O\n0A93..0AA8    ; XID_Start # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA\n0AAA..0AB0    ; XID_Start # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA\n0AB2..0AB3    ; XID_Start # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA\n0AB5..0AB9    ; XID_Start # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA\n0ABD          ; XID_Start # Lo       GUJARATI SIGN AVAGRAHA\n0AD0          ; XID_Start # Lo       GUJARATI OM\n0AE0..0AE1    ; XID_Start # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL\n0AF9          ; XID_Start # Lo       GUJARATI LETTER ZHA\n0B05..0B0C    ; XID_Start # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L\n0B0F..0B10    ; XID_Start # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI\n0B13..0B28    ; XID_Start # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA\n0B2A..0B30    ; XID_Start # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA\n0B32..0B33    ; XID_Start # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA\n0B35..0B39    ; XID_Start # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA\n0B3D          ; XID_Start # Lo       ORIYA SIGN AVAGRAHA\n0B5C..0B5D    ; XID_Start # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA\n0B5F..0B61    ; XID_Start # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL\n0B71          ; XID_Start # Lo       ORIYA LETTER WA\n0B83          ; XID_Start # Lo       TAMIL SIGN VISARGA\n0B85..0B8A    ; XID_Start # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU\n0B8E..0B90    ; XID_Start # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI\n0B92..0B95    ; XID_Start # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA\n0B99..0B9A    ; XID_Start # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA\n0B9C          ; XID_Start # Lo       TAMIL LETTER JA\n0B9E..0B9F    ; XID_Start # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA\n0BA3..0BA4    ; XID_Start # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA\n0BA8..0BAA    ; XID_Start # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA\n0BAE..0BB9    ; XID_Start # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA\n0BD0          ; XID_Start # Lo       TAMIL OM\n0C05..0C0C    ; XID_Start # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L\n0C0E..0C10    ; XID_Start # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI\n0C12..0C28    ; XID_Start # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA\n0C2A..0C39    ; XID_Start # Lo  [16] TELUGU LETTER PA..TELUGU LETTER HA\n0C3D          ; XID_Start # Lo       TELUGU SIGN AVAGRAHA\n0C58..0C5A    ; XID_Start # Lo   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA\n0C5C..0C5D    ; XID_Start # Lo   [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU\n0C60..0C61    ; XID_Start # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL\n0C80          ; XID_Start # Lo       KANNADA SIGN SPACING CANDRABINDU\n0C85..0C8C    ; XID_Start # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L\n0C8E..0C90    ; XID_Start # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI\n0C92..0CA8    ; XID_Start # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA\n0CAA..0CB3    ; XID_Start # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA\n0CB5..0CB9    ; XID_Start # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA\n0CBD          ; XID_Start # Lo       KANNADA SIGN AVAGRAHA\n0CDC..0CDE    ; XID_Start # Lo   [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA\n0CE0..0CE1    ; XID_Start # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL\n0CF1..0CF2    ; XID_Start # Lo   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA\n0D04..0D0C    ; XID_Start # Lo   [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L\n0D0E..0D10    ; XID_Start # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI\n0D12..0D3A    ; XID_Start # Lo  [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA\n0D3D          ; XID_Start # Lo       MALAYALAM SIGN AVAGRAHA\n0D4E          ; XID_Start # Lo       MALAYALAM LETTER DOT REPH\n0D54..0D56    ; XID_Start # Lo   [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL\n0D5F..0D61    ; XID_Start # Lo   [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL\n0D7A..0D7F    ; XID_Start # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K\n0D85..0D96    ; XID_Start # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA\n0D9A..0DB1    ; XID_Start # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA\n0DB3..0DBB    ; XID_Start # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA\n0DBD          ; XID_Start # Lo       SINHALA LETTER DANTAJA LAYANNA\n0DC0..0DC6    ; XID_Start # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA\n0E01..0E30    ; XID_Start # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A\n0E32          ; XID_Start # Lo       THAI CHARACTER SARA AA\n0E40..0E45    ; XID_Start # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO\n0E46          ; XID_Start # Lm       THAI CHARACTER MAIYAMOK\n0E81..0E82    ; XID_Start # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG\n0E84          ; XID_Start # Lo       LAO LETTER KHO TAM\n0E86..0E8A    ; XID_Start # Lo   [5] LAO LETTER PALI GHA..LAO LETTER SO TAM\n0E8C..0EA3    ; XID_Start # Lo  [24] LAO LETTER PALI JHA..LAO LETTER LO LING\n0EA5          ; XID_Start # Lo       LAO LETTER LO LOOT\n0EA7..0EB0    ; XID_Start # Lo  [10] LAO LETTER WO..LAO VOWEL SIGN A\n0EB2          ; XID_Start # Lo       LAO VOWEL SIGN AA\n0EBD          ; XID_Start # Lo       LAO SEMIVOWEL SIGN NYO\n0EC0..0EC4    ; XID_Start # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI\n0EC6          ; XID_Start # Lm       LAO KO LA\n0EDC..0EDF    ; XID_Start # Lo   [4] LAO HO NO..LAO LETTER KHMU NYO\n0F00          ; XID_Start # Lo       TIBETAN SYLLABLE OM\n0F40..0F47    ; XID_Start # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA\n0F49..0F6C    ; XID_Start # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA\n0F88..0F8C    ; XID_Start # Lo   [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN\n1000..102A    ; XID_Start # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU\n103F          ; XID_Start # Lo       MYANMAR LETTER GREAT SA\n1050..1055    ; XID_Start # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL\n105A..105D    ; XID_Start # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE\n1061          ; XID_Start # Lo       MYANMAR LETTER SGAW KAREN SHA\n1065..1066    ; XID_Start # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA\n106E..1070    ; XID_Start # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA\n1075..1081    ; XID_Start # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA\n108E          ; XID_Start # Lo       MYANMAR LETTER RUMAI PALAUNG FA\n10A0..10C5    ; XID_Start # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; XID_Start # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; XID_Start # L&       GEORGIAN CAPITAL LETTER AEN\n10D0..10FA    ; XID_Start # L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FC          ; XID_Start # Lm       MODIFIER LETTER GEORGIAN NAR\n10FD..10FF    ; XID_Start # L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n1100..1248    ; XID_Start # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA\n124A..124D    ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE\n1250..1256    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO\n1258          ; XID_Start # Lo       ETHIOPIC SYLLABLE QHWA\n125A..125D    ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE\n1260..1288    ; XID_Start # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA\n128A..128D    ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE\n1290..12B0    ; XID_Start # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA\n12B2..12B5    ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE\n12B8..12BE    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO\n12C0          ; XID_Start # Lo       ETHIOPIC SYLLABLE KXWA\n12C2..12C5    ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE\n12C8..12D6    ; XID_Start # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O\n12D8..1310    ; XID_Start # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA\n1312..1315    ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE\n1318..135A    ; XID_Start # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA\n1380..138F    ; XID_Start # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE\n13A0..13F5    ; XID_Start # L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n13F8..13FD    ; XID_Start # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1401..166C    ; XID_Start # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA\n166F..167F    ; XID_Start # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W\n1681..169A    ; XID_Start # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH\n16A0..16EA    ; XID_Start # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X\n16EE..16F0    ; XID_Start # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL\n16F1..16F8    ; XID_Start # Lo   [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC\n1700..1711    ; XID_Start # Lo  [18] TAGALOG LETTER A..TAGALOG LETTER HA\n171F..1731    ; XID_Start # Lo  [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA\n1740..1751    ; XID_Start # Lo  [18] BUHID LETTER A..BUHID LETTER HA\n1760..176C    ; XID_Start # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA\n176E..1770    ; XID_Start # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA\n1780..17B3    ; XID_Start # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU\n17D7          ; XID_Start # Lm       KHMER SIGN LEK TOO\n17DC          ; XID_Start # Lo       KHMER SIGN AVAKRAHASANYA\n1820..1842    ; XID_Start # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI\n1843          ; XID_Start # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN\n1844..1878    ; XID_Start # Lo  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS\n1880..1884    ; XID_Start # Lo   [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA\n1885..1886    ; XID_Start # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n1887..18A8    ; XID_Start # Lo  [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA\n18AA          ; XID_Start # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA\n18B0..18F5    ; XID_Start # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S\n1900..191E    ; XID_Start # Lo  [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA\n1950..196D    ; XID_Start # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI\n1970..1974    ; XID_Start # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6\n1980..19AB    ; XID_Start # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA\n19B0..19C9    ; XID_Start # Lo  [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2\n1A00..1A16    ; XID_Start # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA\n1A20..1A54    ; XID_Start # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA\n1AA7          ; XID_Start # Lm       TAI THAM SIGN MAI YAMOK\n1B05..1B33    ; XID_Start # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA\n1B45..1B4C    ; XID_Start # Lo   [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA\n1B83..1BA0    ; XID_Start # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA\n1BAE..1BAF    ; XID_Start # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA\n1BBA..1BE5    ; XID_Start # Lo  [44] SUNDANESE AVAGRAHA..BATAK LETTER U\n1C00..1C23    ; XID_Start # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A\n1C4D..1C4F    ; XID_Start # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA\n1C5A..1C77    ; XID_Start # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH\n1C78..1C7D    ; XID_Start # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD\n1C80..1C8A    ; XID_Start # L&  [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE\n1C90..1CBA    ; XID_Start # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; XID_Start # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1CE9..1CEC    ; XID_Start # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL\n1CEE..1CF3    ; XID_Start # Lo   [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA\n1CF5..1CF6    ; XID_Start # Lo   [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA\n1CFA          ; XID_Start # Lo       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA\n1D00..1D2B    ; XID_Start # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL\n1D2C..1D6A    ; XID_Start # Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D6B..1D77    ; XID_Start # L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G\n1D78          ; XID_Start # Lm       MODIFIER LETTER CYRILLIC EN\n1D79..1D9A    ; XID_Start # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK\n1D9B..1DBF    ; XID_Start # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA\n1E00..1F15    ; XID_Start # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F18..1F1D    ; XID_Start # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F45    ; XID_Start # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F48..1F4D    ; XID_Start # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; XID_Start # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F59          ; XID_Start # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; XID_Start # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; XID_Start # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F..1F7D    ; XID_Start # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1FB4    ; XID_Start # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FBC    ; XID_Start # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBE          ; XID_Start # L&       GREEK PROSGEGRAMMENI\n1FC2..1FC4    ; XID_Start # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FCC    ; XID_Start # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FD0..1FD3    ; XID_Start # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FDB    ; XID_Start # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE0..1FEC    ; XID_Start # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FF2..1FF4    ; XID_Start # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FFC    ; XID_Start # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n2071          ; XID_Start # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n207F          ; XID_Start # Lm       SUPERSCRIPT LATIN SMALL LETTER N\n2090..209C    ; XID_Start # Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n2102          ; XID_Start # L&       DOUBLE-STRUCK CAPITAL C\n2107          ; XID_Start # L&       EULER CONSTANT\n210A..2113    ; XID_Start # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L\n2115          ; XID_Start # L&       DOUBLE-STRUCK CAPITAL N\n2118          ; XID_Start # Sm       SCRIPT CAPITAL P\n2119..211D    ; XID_Start # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n2124          ; XID_Start # L&       DOUBLE-STRUCK CAPITAL Z\n2126          ; XID_Start # L&       OHM SIGN\n2128          ; XID_Start # L&       BLACK-LETTER CAPITAL Z\n212A..212D    ; XID_Start # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C\n212E          ; XID_Start # So       ESTIMATED SYMBOL\n212F..2134    ; XID_Start # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O\n2135..2138    ; XID_Start # Lo   [4] ALEF SYMBOL..DALET SYMBOL\n2139          ; XID_Start # L&       INFORMATION SOURCE\n213C..213F    ; XID_Start # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI\n2145..2149    ; XID_Start # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J\n214E          ; XID_Start # L&       TURNED SMALL F\n2160..2182    ; XID_Start # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND\n2183..2184    ; XID_Start # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C\n2185..2188    ; XID_Start # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND\n2C00..2C7B    ; XID_Start # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E\n2C7C..2C7D    ; XID_Start # Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\n2C7E..2CE4    ; XID_Start # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI\n2CEB..2CEE    ; XID_Start # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CF2..2CF3    ; XID_Start # L&   [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI\n2D00..2D25    ; XID_Start # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; XID_Start # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; XID_Start # L&       GEORGIAN SMALL LETTER AEN\n2D30..2D67    ; XID_Start # Lo  [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO\n2D6F          ; XID_Start # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK\n2D80..2D96    ; XID_Start # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE\n2DA0..2DA6    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO\n2DA8..2DAE    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO\n2DB0..2DB6    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO\n2DB8..2DBE    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO\n2DC0..2DC6    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO\n2DC8..2DCE    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO\n2DD0..2DD6    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO\n2DD8..2DDE    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO\n3005          ; XID_Start # Lm       IDEOGRAPHIC ITERATION MARK\n3006          ; XID_Start # Lo       IDEOGRAPHIC CLOSING MARK\n3007          ; XID_Start # Nl       IDEOGRAPHIC NUMBER ZERO\n3021..3029    ; XID_Start # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE\n3031..3035    ; XID_Start # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF\n3038..303A    ; XID_Start # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY\n303B          ; XID_Start # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK\n303C          ; XID_Start # Lo       MASU MARK\n3041..3096    ; XID_Start # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE\n309D..309E    ; XID_Start # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK\n309F          ; XID_Start # Lo       HIRAGANA DIGRAPH YORI\n30A1..30FA    ; XID_Start # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO\n30FC..30FE    ; XID_Start # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK\n30FF          ; XID_Start # Lo       KATAKANA DIGRAPH KOTO\n3105..312F    ; XID_Start # Lo  [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN\n3131..318E    ; XID_Start # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE\n31A0..31BF    ; XID_Start # Lo  [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH\n31F0..31FF    ; XID_Start # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO\n3400..4DBF    ; XID_Start # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF\n4E00..A014    ; XID_Start # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E\nA015          ; XID_Start # Lm       YI SYLLABLE WU\nA016..A48C    ; XID_Start # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR\nA4D0..A4F7    ; XID_Start # Lo  [40] LISU LETTER BA..LISU LETTER OE\nA4F8..A4FD    ; XID_Start # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU\nA500..A60B    ; XID_Start # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG\nA60C          ; XID_Start # Lm       VAI SYLLABLE LENGTHENER\nA610..A61F    ; XID_Start # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG\nA62A..A62B    ; XID_Start # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO\nA640..A66D    ; XID_Start # L&  [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA66E          ; XID_Start # Lo       CYRILLIC LETTER MULTIOCULAR O\nA67F          ; XID_Start # Lm       CYRILLIC PAYEROK\nA680..A69B    ; XID_Start # L&  [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O\nA69C..A69D    ; XID_Start # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA6A0..A6E5    ; XID_Start # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI\nA6E6..A6EF    ; XID_Start # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM\nA717..A71F    ; XID_Start # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK\nA722..A76F    ; XID_Start # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON\nA770          ; XID_Start # Lm       MODIFIER LETTER US\nA771..A787    ; XID_Start # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T\nA788          ; XID_Start # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT\nA78B..A78E    ; XID_Start # L&   [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT\nA78F          ; XID_Start # Lo       LATIN LETTER SINOLOGICAL DOT\nA790..A7DC    ; XID_Start # L&  [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F1..A7F4    ; XID_Start # Lm   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F5..A7F6    ; XID_Start # L&   [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H\nA7F7          ; XID_Start # Lo       LATIN EPIGRAPHIC LETTER SIDEWAYS I\nA7F8..A7F9    ; XID_Start # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA7FA          ; XID_Start # L&       LATIN LETTER SMALL CAPITAL TURNED M\nA7FB..A801    ; XID_Start # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I\nA803..A805    ; XID_Start # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O\nA807..A80A    ; XID_Start # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO\nA80C..A822    ; XID_Start # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO\nA840..A873    ; XID_Start # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU\nA882..A8B3    ; XID_Start # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA\nA8F2..A8F7    ; XID_Start # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA\nA8FB          ; XID_Start # Lo       DEVANAGARI HEADSTROKE\nA8FD..A8FE    ; XID_Start # Lo   [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY\nA90A..A925    ; XID_Start # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO\nA930..A946    ; XID_Start # Lo  [23] REJANG LETTER KA..REJANG LETTER A\nA960..A97C    ; XID_Start # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\nA984..A9B2    ; XID_Start # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA\nA9CF          ; XID_Start # Lm       JAVANESE PANGRANGKEP\nA9E0..A9E4    ; XID_Start # Lo   [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA\nA9E6          ; XID_Start # Lm       MYANMAR MODIFIER LETTER SHAN REDUPLICATION\nA9E7..A9EF    ; XID_Start # Lo   [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA\nA9FA..A9FE    ; XID_Start # Lo   [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA\nAA00..AA28    ; XID_Start # Lo  [41] CHAM LETTER A..CHAM LETTER HA\nAA40..AA42    ; XID_Start # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG\nAA44..AA4B    ; XID_Start # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS\nAA60..AA6F    ; XID_Start # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA\nAA70          ; XID_Start # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION\nAA71..AA76    ; XID_Start # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM\nAA7A          ; XID_Start # Lo       MYANMAR LETTER AITON RA\nAA7E..AAAF    ; XID_Start # Lo  [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O\nAAB1          ; XID_Start # Lo       TAI VIET VOWEL AA\nAAB5..AAB6    ; XID_Start # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O\nAAB9..AABD    ; XID_Start # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN\nAAC0          ; XID_Start # Lo       TAI VIET TONE MAI NUENG\nAAC2          ; XID_Start # Lo       TAI VIET TONE MAI SONG\nAADB..AADC    ; XID_Start # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG\nAADD          ; XID_Start # Lm       TAI VIET SYMBOL SAM\nAAE0..AAEA    ; XID_Start # Lo  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA\nAAF2          ; XID_Start # Lo       MEETEI MAYEK ANJI\nAAF3..AAF4    ; XID_Start # Lm   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK\nAB01..AB06    ; XID_Start # Lo   [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO\nAB09..AB0E    ; XID_Start # Lo   [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO\nAB11..AB16    ; XID_Start # Lo   [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO\nAB20..AB26    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO\nAB28..AB2E    ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO\nAB30..AB5A    ; XID_Start # L&  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG\nAB5C..AB5F    ; XID_Start # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB60..AB68    ; XID_Start # L&   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE\nAB69          ; XID_Start # Lm       MODIFIER LETTER SMALL TURNED W\nAB70..ABBF    ; XID_Start # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nABC0..ABE2    ; XID_Start # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM\nAC00..D7A3    ; XID_Start # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH\nD7B0..D7C6    ; XID_Start # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\nD7CB..D7FB    ; XID_Start # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\nF900..FA6D    ; XID_Start # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D\nFA70..FAD9    ; XID_Start # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9\nFB00..FB06    ; XID_Start # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; XID_Start # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFB1D          ; XID_Start # Lo       HEBREW LETTER YOD WITH HIRIQ\nFB1F..FB28    ; XID_Start # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV\nFB2A..FB36    ; XID_Start # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH\nFB38..FB3C    ; XID_Start # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH\nFB3E          ; XID_Start # Lo       HEBREW LETTER MEM WITH DAGESH\nFB40..FB41    ; XID_Start # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH\nFB43..FB44    ; XID_Start # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH\nFB46..FBB1    ; XID_Start # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM\nFBD3..FC5D    ; XID_Start # Lo [139] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM\nFC64..FD3D    ; XID_Start # Lo [218] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM\nFD50..FD8F    ; XID_Start # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM\nFD92..FDC7    ; XID_Start # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM\nFDF0..FDF9    ; XID_Start # Lo  [10] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE SALLA ISOLATED FORM\nFE71          ; XID_Start # Lo       ARABIC TATWEEL WITH FATHATAN ABOVE\nFE73          ; XID_Start # Lo       ARABIC TAIL FRAGMENT\nFE77          ; XID_Start # Lo       ARABIC FATHA MEDIAL FORM\nFE79          ; XID_Start # Lo       ARABIC DAMMA MEDIAL FORM\nFE7B          ; XID_Start # Lo       ARABIC KASRA MEDIAL FORM\nFE7D          ; XID_Start # Lo       ARABIC SHADDA MEDIAL FORM\nFE7F..FEFC    ; XID_Start # Lo [126] ARABIC SUKUN MEDIAL FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM\nFF21..FF3A    ; XID_Start # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\nFF41..FF5A    ; XID_Start # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\nFF66..FF6F    ; XID_Start # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU\nFF70          ; XID_Start # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF71..FF9D    ; XID_Start # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N\nFFA0..FFBE    ; XID_Start # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH\nFFC2..FFC7    ; XID_Start # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E\nFFCA..FFCF    ; XID_Start # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE\nFFD2..FFD7    ; XID_Start # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU\nFFDA..FFDC    ; XID_Start # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I\n10000..1000B  ; XID_Start # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE\n1000D..10026  ; XID_Start # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO\n10028..1003A  ; XID_Start # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO\n1003C..1003D  ; XID_Start # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE\n1003F..1004D  ; XID_Start # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO\n10050..1005D  ; XID_Start # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089\n10080..100FA  ; XID_Start # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305\n10140..10174  ; XID_Start # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS\n10280..1029C  ; XID_Start # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X\n102A0..102D0  ; XID_Start # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3\n10300..1031F  ; XID_Start # Lo  [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS\n1032D..10340  ; XID_Start # Lo  [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA\n10341         ; XID_Start # Nl       GOTHIC LETTER NINETY\n10342..10349  ; XID_Start # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL\n1034A         ; XID_Start # Nl       GOTHIC LETTER NINE HUNDRED\n10350..10375  ; XID_Start # Lo  [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA\n10380..1039D  ; XID_Start # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU\n103A0..103C3  ; XID_Start # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA\n103C8..103CF  ; XID_Start # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH\n103D1..103D5  ; XID_Start # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED\n10400..1044F  ; XID_Start # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW\n10450..1049D  ; XID_Start # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO\n104B0..104D3  ; XID_Start # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n104D8..104FB  ; XID_Start # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10500..10527  ; XID_Start # Lo  [40] ELBASAN LETTER A..ELBASAN LETTER KHE\n10530..10563  ; XID_Start # Lo  [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW\n10570..1057A  ; XID_Start # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; XID_Start # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; XID_Start # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; XID_Start # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10597..105A1  ; XID_Start # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; XID_Start # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; XID_Start # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; XID_Start # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n105C0..105F3  ; XID_Start # Lo  [52] TODHRI LETTER A..TODHRI LETTER OO\n10600..10736  ; XID_Start # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664\n10740..10755  ; XID_Start # Lo  [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE\n10760..10767  ; XID_Start # Lo   [8] LINEAR A SIGN A800..LINEAR A SIGN A807\n10780..10785  ; XID_Start # Lm   [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; XID_Start # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; XID_Start # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n10800..10805  ; XID_Start # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA\n10808         ; XID_Start # Lo       CYPRIOT SYLLABLE JO\n1080A..10835  ; XID_Start # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO\n10837..10838  ; XID_Start # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE\n1083C         ; XID_Start # Lo       CYPRIOT SYLLABLE ZA\n1083F..10855  ; XID_Start # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW\n10860..10876  ; XID_Start # Lo  [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW\n10880..1089E  ; XID_Start # Lo  [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW\n108E0..108F2  ; XID_Start # Lo  [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH\n108F4..108F5  ; XID_Start # Lo   [2] HATRAN LETTER SHIN..HATRAN LETTER TAW\n10900..10915  ; XID_Start # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU\n10920..10939  ; XID_Start # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C\n10940..10959  ; XID_Start # Lo  [26] SIDETIC LETTER N01..SIDETIC LETTER N26\n10980..109B7  ; XID_Start # Lo  [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA\n109BE..109BF  ; XID_Start # Lo   [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN\n10A00         ; XID_Start # Lo       KHAROSHTHI LETTER A\n10A10..10A13  ; XID_Start # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA\n10A15..10A17  ; XID_Start # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA\n10A19..10A35  ; XID_Start # Lo  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA\n10A60..10A7C  ; XID_Start # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH\n10A80..10A9C  ; XID_Start # Lo  [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH\n10AC0..10AC7  ; XID_Start # Lo   [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW\n10AC9..10AE4  ; XID_Start # Lo  [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW\n10B00..10B35  ; XID_Start # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE\n10B40..10B55  ; XID_Start # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW\n10B60..10B72  ; XID_Start # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW\n10B80..10B91  ; XID_Start # Lo  [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW\n10C00..10C48  ; XID_Start # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH\n10C80..10CB2  ; XID_Start # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10CC0..10CF2  ; XID_Start # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10D00..10D23  ; XID_Start # Lo  [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA\n10D4A..10D4D  ; XID_Start # Lo   [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE\n10D4E         ; XID_Start # Lm       GARAY VOWEL LENGTH MARK\n10D4F         ; XID_Start # Lo       GARAY SUKUN\n10D50..10D65  ; XID_Start # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n10D6F         ; XID_Start # Lm       GARAY REDUPLICATION MARK\n10D70..10D85  ; XID_Start # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n10E80..10EA9  ; XID_Start # Lo  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET\n10EB0..10EB1  ; XID_Start # Lo   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE\n10EC2..10EC4  ; XID_Start # Lo   [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW\n10EC5         ; XID_Start # Lm       ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW\n10EC6..10EC7  ; XID_Start # Lo   [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW\n10F00..10F1C  ; XID_Start # Lo  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL\n10F27         ; XID_Start # Lo       OLD SOGDIAN LIGATURE AYIN-DALETH\n10F30..10F45  ; XID_Start # Lo  [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN\n10F70..10F81  ; XID_Start # Lo  [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH\n10FB0..10FC4  ; XID_Start # Lo  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW\n10FE0..10FF6  ; XID_Start # Lo  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH\n11003..11037  ; XID_Start # Lo  [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA\n11071..11072  ; XID_Start # Lo   [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O\n11075         ; XID_Start # Lo       BRAHMI LETTER OLD TAMIL LLA\n11083..110AF  ; XID_Start # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA\n110D0..110E8  ; XID_Start # Lo  [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE\n11103..11126  ; XID_Start # Lo  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA\n11144         ; XID_Start # Lo       CHAKMA LETTER LHAA\n11147         ; XID_Start # Lo       CHAKMA LETTER VAA\n11150..11172  ; XID_Start # Lo  [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA\n11176         ; XID_Start # Lo       MAHAJANI LIGATURE SHRI\n11183..111B2  ; XID_Start # Lo  [48] SHARADA LETTER A..SHARADA LETTER HA\n111C1..111C4  ; XID_Start # Lo   [4] SHARADA SIGN AVAGRAHA..SHARADA OM\n111DA         ; XID_Start # Lo       SHARADA EKAM\n111DC         ; XID_Start # Lo       SHARADA HEADSTROKE\n11200..11211  ; XID_Start # Lo  [18] KHOJKI LETTER A..KHOJKI LETTER JJA\n11213..1122B  ; XID_Start # Lo  [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA\n1123F..11240  ; XID_Start # Lo   [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I\n11280..11286  ; XID_Start # Lo   [7] MULTANI LETTER A..MULTANI LETTER GA\n11288         ; XID_Start # Lo       MULTANI LETTER GHA\n1128A..1128D  ; XID_Start # Lo   [4] MULTANI LETTER CA..MULTANI LETTER JJA\n1128F..1129D  ; XID_Start # Lo  [15] MULTANI LETTER NYA..MULTANI LETTER BA\n1129F..112A8  ; XID_Start # Lo  [10] MULTANI LETTER BHA..MULTANI LETTER RHA\n112B0..112DE  ; XID_Start # Lo  [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA\n11305..1130C  ; XID_Start # Lo   [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L\n1130F..11310  ; XID_Start # Lo   [2] GRANTHA LETTER EE..GRANTHA LETTER AI\n11313..11328  ; XID_Start # Lo  [22] GRANTHA LETTER OO..GRANTHA LETTER NA\n1132A..11330  ; XID_Start # Lo   [7] GRANTHA LETTER PA..GRANTHA LETTER RA\n11332..11333  ; XID_Start # Lo   [2] GRANTHA LETTER LA..GRANTHA LETTER LLA\n11335..11339  ; XID_Start # Lo   [5] GRANTHA LETTER VA..GRANTHA LETTER HA\n1133D         ; XID_Start # Lo       GRANTHA SIGN AVAGRAHA\n11350         ; XID_Start # Lo       GRANTHA OM\n1135D..11361  ; XID_Start # Lo   [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL\n11380..11389  ; XID_Start # Lo  [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL\n1138B         ; XID_Start # Lo       TULU-TIGALARI LETTER EE\n1138E         ; XID_Start # Lo       TULU-TIGALARI LETTER AI\n11390..113B5  ; XID_Start # Lo  [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA\n113B7         ; XID_Start # Lo       TULU-TIGALARI SIGN AVAGRAHA\n113D1         ; XID_Start # Lo       TULU-TIGALARI REPHA\n113D3         ; XID_Start # Lo       TULU-TIGALARI SIGN PLUTA\n11400..11434  ; XID_Start # Lo  [53] NEWA LETTER A..NEWA LETTER HA\n11447..1144A  ; XID_Start # Lo   [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI\n1145F..11461  ; XID_Start # Lo   [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA\n11480..114AF  ; XID_Start # Lo  [48] TIRHUTA ANJI..TIRHUTA LETTER HA\n114C4..114C5  ; XID_Start # Lo   [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG\n114C7         ; XID_Start # Lo       TIRHUTA OM\n11580..115AE  ; XID_Start # Lo  [47] SIDDHAM LETTER A..SIDDHAM LETTER HA\n115D8..115DB  ; XID_Start # Lo   [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U\n11600..1162F  ; XID_Start # Lo  [48] MODI LETTER A..MODI LETTER LLA\n11644         ; XID_Start # Lo       MODI SIGN HUVA\n11680..116AA  ; XID_Start # Lo  [43] TAKRI LETTER A..TAKRI LETTER RRA\n116B8         ; XID_Start # Lo       TAKRI LETTER ARCHAIC KHA\n11700..1171A  ; XID_Start # Lo  [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA\n11740..11746  ; XID_Start # Lo   [7] AHOM LETTER CA..AHOM LETTER LLA\n11800..1182B  ; XID_Start # Lo  [44] DOGRA LETTER A..DOGRA LETTER RRA\n118A0..118DF  ; XID_Start # L&  [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n118FF..11906  ; XID_Start # Lo   [8] WARANG CITI OM..DIVES AKURU LETTER E\n11909         ; XID_Start # Lo       DIVES AKURU LETTER O\n1190C..11913  ; XID_Start # Lo   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA\n11915..11916  ; XID_Start # Lo   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA\n11918..1192F  ; XID_Start # Lo  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA\n1193F         ; XID_Start # Lo       DIVES AKURU PREFIXED NASAL SIGN\n11941         ; XID_Start # Lo       DIVES AKURU INITIAL RA\n119A0..119A7  ; XID_Start # Lo   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR\n119AA..119D0  ; XID_Start # Lo  [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA\n119E1         ; XID_Start # Lo       NANDINAGARI SIGN AVAGRAHA\n119E3         ; XID_Start # Lo       NANDINAGARI HEADSTROKE\n11A00         ; XID_Start # Lo       ZANABAZAR SQUARE LETTER A\n11A0B..11A32  ; XID_Start # Lo  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA\n11A3A         ; XID_Start # Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\n11A50         ; XID_Start # Lo       SOYOMBO LETTER A\n11A5C..11A89  ; XID_Start # Lo  [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA\n11A9D         ; XID_Start # Lo       SOYOMBO MARK PLUTA\n11AB0..11AF8  ; XID_Start # Lo  [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL\n11BC0..11BE0  ; XID_Start # Lo  [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO\n11C00..11C08  ; XID_Start # Lo   [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L\n11C0A..11C2E  ; XID_Start # Lo  [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA\n11C40         ; XID_Start # Lo       BHAIKSUKI SIGN AVAGRAHA\n11C72..11C8F  ; XID_Start # Lo  [30] MARCHEN LETTER KA..MARCHEN LETTER A\n11D00..11D06  ; XID_Start # Lo   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E\n11D08..11D09  ; XID_Start # Lo   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O\n11D0B..11D30  ; XID_Start # Lo  [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA\n11D46         ; XID_Start # Lo       MASARAM GONDI REPHA\n11D60..11D65  ; XID_Start # Lo   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU\n11D67..11D68  ; XID_Start # Lo   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI\n11D6A..11D89  ; XID_Start # Lo  [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA\n11D98         ; XID_Start # Lo       GUNJALA GONDI OM\n11DB0..11DD8  ; XID_Start # Lo  [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH\n11DD9         ; XID_Start # Lm       TOLONG SIKI SIGN SELA\n11DDA..11DDB  ; XID_Start # Lo   [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA\n11EE0..11EF2  ; XID_Start # Lo  [19] MAKASAR LETTER KA..MAKASAR ANGKA\n11F02         ; XID_Start # Lo       KAWI SIGN REPHA\n11F04..11F10  ; XID_Start # Lo  [13] KAWI LETTER A..KAWI LETTER O\n11F12..11F33  ; XID_Start # Lo  [34] KAWI LETTER KA..KAWI LETTER JNYA\n11FB0         ; XID_Start # Lo       LISU LETTER YHA\n12000..12399  ; XID_Start # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U\n12400..1246E  ; XID_Start # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM\n12480..12543  ; XID_Start # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU\n12F90..12FF0  ; XID_Start # Lo  [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114\n13000..1342F  ; XID_Start # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D\n13441..13446  ; XID_Start # Lo   [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN\n13460..143FA  ; XID_Start # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA\n14400..14646  ; XID_Start # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530\n16100..1611D  ; XID_Start # Lo  [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA\n16800..16A38  ; XID_Start # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ\n16A40..16A5E  ; XID_Start # Lo  [31] MRO LETTER TA..MRO LETTER TEK\n16A70..16ABE  ; XID_Start # Lo  [79] TANGSA LETTER OZ..TANGSA LETTER ZA\n16AD0..16AED  ; XID_Start # Lo  [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I\n16B00..16B2F  ; XID_Start # Lo  [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU\n16B40..16B43  ; XID_Start # Lm   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM\n16B63..16B77  ; XID_Start # Lo  [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS\n16B7D..16B8F  ; XID_Start # Lo  [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ\n16D40..16D42  ; XID_Start # Lm   [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA\n16D43..16D6A  ; XID_Start # Lo  [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU\n16D6B..16D6C  ; XID_Start # Lm   [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT\n16E40..16E7F  ; XID_Start # L&  [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16EA0..16EB8  ; XID_Start # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n16EBB..16ED3  ; XID_Start # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n16F00..16F4A  ; XID_Start # Lo  [75] MIAO LETTER PA..MIAO LETTER RTE\n16F50         ; XID_Start # Lo       MIAO LETTER NASALIZATION\n16F93..16F9F  ; XID_Start # Lm  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8\n16FE0..16FE1  ; XID_Start # Lm   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK\n16FE3         ; XID_Start # Lm       OLD CHINESE ITERATION MARK\n16FF2..16FF3  ; XID_Start # Lm   [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER\n16FF4..16FF6  ; XID_Start # Nl   [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS\n17000..18CD5  ; XID_Start # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5\n18CFF..18D1E  ; XID_Start # Lo  [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E\n18D80..18DF2  ; XID_Start # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883\n1AFF0..1AFF3  ; XID_Start # Lm   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5\n1AFF5..1AFFB  ; XID_Start # Lm   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5\n1AFFD..1AFFE  ; XID_Start # Lm   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8\n1B000..1B122  ; XID_Start # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU\n1B132         ; XID_Start # Lo       HIRAGANA LETTER SMALL KO\n1B150..1B152  ; XID_Start # Lo   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO\n1B155         ; XID_Start # Lo       KATAKANA LETTER SMALL KO\n1B164..1B167  ; XID_Start # Lo   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N\n1B170..1B2FB  ; XID_Start # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB\n1BC00..1BC6A  ; XID_Start # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M\n1BC70..1BC7C  ; XID_Start # Lo  [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK\n1BC80..1BC88  ; XID_Start # Lo   [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL\n1BC90..1BC99  ; XID_Start # Lo  [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW\n1D400..1D454  ; XID_Start # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D49C  ; XID_Start # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; XID_Start # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; XID_Start # L&       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; XID_Start # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; XID_Start # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B9  ; XID_Start # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; XID_Start # L&       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; XID_Start # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D505  ; XID_Start # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; XID_Start # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; XID_Start # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; XID_Start # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D51E..1D539  ; XID_Start # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; XID_Start # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; XID_Start # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; XID_Start # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; XID_Start # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D552..1D6A5  ; XID_Start # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6A8..1D6C0  ; XID_Start # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6C2..1D6DA  ; XID_Start # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DC..1D6FA  ; XID_Start # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D6FC..1D714  ; XID_Start # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D716..1D734  ; XID_Start # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D736..1D74E  ; XID_Start # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D750..1D76E  ; XID_Start # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D770..1D788  ; XID_Start # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D78A..1D7A8  ; XID_Start # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7AA..1D7C2  ; XID_Start # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C4..1D7CB  ; XID_Start # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA\n1DF00..1DF09  ; XID_Start # L&  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK\n1DF0A         ; XID_Start # Lo       LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK\n1DF0B..1DF1E  ; XID_Start # L&  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL\n1DF25..1DF2A  ; XID_Start # L&   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK\n1E030..1E06D  ; XID_Start # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E100..1E12C  ; XID_Start # Lo  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W\n1E137..1E13D  ; XID_Start # Lm   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER\n1E14E         ; XID_Start # Lo       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ\n1E290..1E2AD  ; XID_Start # Lo  [30] TOTO LETTER PA..TOTO LETTER A\n1E2C0..1E2EB  ; XID_Start # Lo  [44] WANCHO LETTER AA..WANCHO LETTER YIH\n1E4D0..1E4EA  ; XID_Start # Lo  [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL\n1E4EB         ; XID_Start # Lm       NAG MUNDARI SIGN OJOD\n1E5D0..1E5ED  ; XID_Start # Lo  [30] OL ONAL LETTER O..OL ONAL LETTER EG\n1E5F0         ; XID_Start # Lo       OL ONAL SIGN HODDOND\n1E6C0..1E6DE  ; XID_Start # Lo  [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO\n1E6E0..1E6E2  ; XID_Start # Lo   [3] TAI YO LETTER AA..TAI YO LETTER UE\n1E6E4..1E6E5  ; XID_Start # Lo   [2] TAI YO LETTER U..TAI YO LETTER AE\n1E6E7..1E6ED  ; XID_Start # Lo   [7] TAI YO LETTER O..TAI YO LETTER AUE\n1E6F0..1E6F4  ; XID_Start # Lo   [5] TAI YO LETTER AN..TAI YO LETTER AP\n1E6FE         ; XID_Start # Lo       TAI YO SYMBOL MUEANG\n1E6FF         ; XID_Start # Lm       TAI YO XAM LAI\n1E7E0..1E7E6  ; XID_Start # Lo   [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO\n1E7E8..1E7EB  ; XID_Start # Lo   [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE\n1E7ED..1E7EE  ; XID_Start # Lo   [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE\n1E7F0..1E7FE  ; XID_Start # Lo  [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE\n1E800..1E8C4  ; XID_Start # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON\n1E900..1E943  ; XID_Start # L&  [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA\n1E94B         ; XID_Start # Lm       ADLAM NASALIZATION MARK\n1EE00..1EE03  ; XID_Start # Lo   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL\n1EE05..1EE1F  ; XID_Start # Lo  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF\n1EE21..1EE22  ; XID_Start # Lo   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM\n1EE24         ; XID_Start # Lo       ARABIC MATHEMATICAL INITIAL HEH\n1EE27         ; XID_Start # Lo       ARABIC MATHEMATICAL INITIAL HAH\n1EE29..1EE32  ; XID_Start # Lo  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF\n1EE34..1EE37  ; XID_Start # Lo   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH\n1EE39         ; XID_Start # Lo       ARABIC MATHEMATICAL INITIAL DAD\n1EE3B         ; XID_Start # Lo       ARABIC MATHEMATICAL INITIAL GHAIN\n1EE42         ; XID_Start # Lo       ARABIC MATHEMATICAL TAILED JEEM\n1EE47         ; XID_Start # Lo       ARABIC MATHEMATICAL TAILED HAH\n1EE49         ; XID_Start # Lo       ARABIC MATHEMATICAL TAILED YEH\n1EE4B         ; XID_Start # Lo       ARABIC MATHEMATICAL TAILED LAM\n1EE4D..1EE4F  ; XID_Start # Lo   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN\n1EE51..1EE52  ; XID_Start # Lo   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF\n1EE54         ; XID_Start # Lo       ARABIC MATHEMATICAL TAILED SHEEN\n1EE57         ; XID_Start # Lo       ARABIC MATHEMATICAL TAILED KHAH\n1EE59         ; XID_Start # Lo       ARABIC MATHEMATICAL TAILED DAD\n1EE5B         ; XID_Start # Lo       ARABIC MATHEMATICAL TAILED GHAIN\n1EE5D         ; XID_Start # Lo       ARABIC MATHEMATICAL TAILED DOTLESS NOON\n1EE5F         ; XID_Start # Lo       ARABIC MATHEMATICAL TAILED DOTLESS QAF\n1EE61..1EE62  ; XID_Start # Lo   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM\n1EE64         ; XID_Start # Lo       ARABIC MATHEMATICAL STRETCHED HEH\n1EE67..1EE6A  ; XID_Start # Lo   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF\n1EE6C..1EE72  ; XID_Start # Lo   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF\n1EE74..1EE77  ; XID_Start # Lo   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH\n1EE79..1EE7C  ; XID_Start # Lo   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH\n1EE7E         ; XID_Start # Lo       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH\n1EE80..1EE89  ; XID_Start # Lo  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH\n1EE8B..1EE9B  ; XID_Start # Lo  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN\n1EEA1..1EEA3  ; XID_Start # Lo   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL\n1EEA5..1EEA9  ; XID_Start # Lo   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH\n1EEAB..1EEBB  ; XID_Start # Lo  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN\n20000..2A6DF  ; XID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF\n2A700..2B81D  ; XID_Start # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D\n2B820..2CEAD  ; XID_Start # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD\n2CEB0..2EBE0  ; XID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0\n2EBF0..2EE5D  ; XID_Start # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D\n2F800..2FA1D  ; XID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D\n30000..3134A  ; XID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A\n31350..33479  ; XID_Start # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479\n\n# Total code points: 145893\n\n# ================================================\n\n# Derived Property: XID_Continue\n#  Mod_ID_Continue modified for closure under NFKx\n#  Modified as described in UAX #15\n#  NOTE: Does NOT remove the non-NFKx characters.\n#        Merely ensures that if isIdentifer(string) then isIdentifier(NFKx(string))\n#  NOTE: See UAX #31 for more information\n\n0030..0039    ; XID_Continue # Nd  [10] DIGIT ZERO..DIGIT NINE\n0041..005A    ; XID_Continue # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n005F          ; XID_Continue # Pc       LOW LINE\n0061..007A    ; XID_Continue # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00AA          ; XID_Continue # Lo       FEMININE ORDINAL INDICATOR\n00B5          ; XID_Continue # L&       MICRO SIGN\n00B7          ; XID_Continue # Po       MIDDLE DOT\n00BA          ; XID_Continue # Lo       MASCULINE ORDINAL INDICATOR\n00C0..00D6    ; XID_Continue # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00F6    ; XID_Continue # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..01BA    ; XID_Continue # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL\n01BB          ; XID_Continue # Lo       LATIN LETTER TWO WITH STROKE\n01BC..01BF    ; XID_Continue # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN\n01C0..01C3    ; XID_Continue # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK\n01C4..0293    ; XID_Continue # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL\n0294..0295    ; XID_Continue # Lo   [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE\n0296..02AF    ; XID_Continue # L&  [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL\n02B0..02C1    ; XID_Continue # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP\n02C6..02D1    ; XID_Continue # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON\n02E0..02E4    ; XID_Continue # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n02EC          ; XID_Continue # Lm       MODIFIER LETTER VOICING\n02EE          ; XID_Continue # Lm       MODIFIER LETTER DOUBLE APOSTROPHE\n0300..036F    ; XID_Continue # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\n0370..0373    ; XID_Continue # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI\n0374          ; XID_Continue # Lm       GREEK NUMERAL SIGN\n0376..0377    ; XID_Continue # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037B..037D    ; XID_Continue # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n037F          ; XID_Continue # L&       GREEK CAPITAL LETTER YOT\n0386          ; XID_Continue # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0387          ; XID_Continue # Po       GREEK ANO TELEIA\n0388..038A    ; XID_Continue # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; XID_Continue # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..03A1    ; XID_Continue # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO\n03A3..03F5    ; XID_Continue # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL\n03F7..0481    ; XID_Continue # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA\n0483..0487    ; XID_Continue # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\n048A..052F    ; XID_Continue # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER\n0531..0556    ; XID_Continue # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n0559          ; XID_Continue # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING\n0560..0588    ; XID_Continue # L&  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE\n0591..05BD    ; XID_Continue # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\n05BF          ; XID_Continue # Mn       HEBREW POINT RAFE\n05C1..05C2    ; XID_Continue # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n05C4..05C5    ; XID_Continue # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n05C7          ; XID_Continue # Mn       HEBREW POINT QAMATS QATAN\n05D0..05EA    ; XID_Continue # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV\n05EF..05F2    ; XID_Continue # Lo   [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD\n0610..061A    ; XID_Continue # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n0620..063F    ; XID_Continue # Lo  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE\n0640          ; XID_Continue # Lm       ARABIC TATWEEL\n0641..064A    ; XID_Continue # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH\n064B..065F    ; XID_Continue # Mn  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW\n0660..0669    ; XID_Continue # Nd  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE\n066E..066F    ; XID_Continue # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF\n0670          ; XID_Continue # Mn       ARABIC LETTER SUPERSCRIPT ALEF\n0671..06D3    ; XID_Continue # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n06D5          ; XID_Continue # Lo       ARABIC LETTER AE\n06D6..06DC    ; XID_Continue # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n06DF..06E4    ; XID_Continue # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\n06E5..06E6    ; XID_Continue # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH\n06E7..06E8    ; XID_Continue # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n06EA..06ED    ; XID_Continue # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\n06EE..06EF    ; XID_Continue # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V\n06F0..06F9    ; XID_Continue # Nd  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE\n06FA..06FC    ; XID_Continue # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW\n06FF          ; XID_Continue # Lo       ARABIC LETTER HEH WITH INVERTED V\n0710          ; XID_Continue # Lo       SYRIAC LETTER ALAPH\n0711          ; XID_Continue # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH\n0712..072F    ; XID_Continue # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH\n0730..074A    ; XID_Continue # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\n074D..07A5    ; XID_Continue # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU\n07A6..07B0    ; XID_Continue # Mn  [11] THAANA ABAFILI..THAANA SUKUN\n07B1          ; XID_Continue # Lo       THAANA LETTER NAA\n07C0..07C9    ; XID_Continue # Nd  [10] NKO DIGIT ZERO..NKO DIGIT NINE\n07CA..07EA    ; XID_Continue # Lo  [33] NKO LETTER A..NKO LETTER JONA RA\n07EB..07F3    ; XID_Continue # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\n07F4..07F5    ; XID_Continue # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE\n07FA          ; XID_Continue # Lm       NKO LAJANYALAN\n07FD          ; XID_Continue # Mn       NKO DANTAYALAN\n0800..0815    ; XID_Continue # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF\n0816..0819    ; XID_Continue # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\n081A          ; XID_Continue # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT\n081B..0823    ; XID_Continue # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n0824          ; XID_Continue # Lm       SAMARITAN MODIFIER LETTER SHORT A\n0825..0827    ; XID_Continue # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n0828          ; XID_Continue # Lm       SAMARITAN MODIFIER LETTER I\n0829..082D    ; XID_Continue # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\n0840..0858    ; XID_Continue # Lo  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN\n0859..085B    ; XID_Continue # Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\n0860..086A    ; XID_Continue # Lo  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA\n0870..0887    ; XID_Continue # Lo  [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT\n0889..088F    ; XID_Continue # Lo   [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE\n0897..089F    ; XID_Continue # Mn   [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA\n08A0..08C8    ; XID_Continue # Lo  [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF\n08C9          ; XID_Continue # Lm       ARABIC SMALL FARSI YEH\n08CA..08E1    ; XID_Continue # Mn  [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA\n08E3..0902    ; XID_Continue # Mn  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA\n0903          ; XID_Continue # Mc       DEVANAGARI SIGN VISARGA\n0904..0939    ; XID_Continue # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA\n093A          ; XID_Continue # Mn       DEVANAGARI VOWEL SIGN OE\n093B          ; XID_Continue # Mc       DEVANAGARI VOWEL SIGN OOE\n093C          ; XID_Continue # Mn       DEVANAGARI SIGN NUKTA\n093D          ; XID_Continue # Lo       DEVANAGARI SIGN AVAGRAHA\n093E..0940    ; XID_Continue # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\n0941..0948    ; XID_Continue # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n0949..094C    ; XID_Continue # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\n094D          ; XID_Continue # Mn       DEVANAGARI SIGN VIRAMA\n094E..094F    ; XID_Continue # Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\n0950          ; XID_Continue # Lo       DEVANAGARI OM\n0951..0957    ; XID_Continue # Mn   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE\n0958..0961    ; XID_Continue # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL\n0962..0963    ; XID_Continue # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n0966..096F    ; XID_Continue # Nd  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE\n0971          ; XID_Continue # Lm       DEVANAGARI SIGN HIGH SPACING DOT\n0972..0980    ; XID_Continue # Lo  [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI\n0981          ; XID_Continue # Mn       BENGALI SIGN CANDRABINDU\n0982..0983    ; XID_Continue # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\n0985..098C    ; XID_Continue # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L\n098F..0990    ; XID_Continue # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI\n0993..09A8    ; XID_Continue # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA\n09AA..09B0    ; XID_Continue # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA\n09B2          ; XID_Continue # Lo       BENGALI LETTER LA\n09B6..09B9    ; XID_Continue # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA\n09BC          ; XID_Continue # Mn       BENGALI SIGN NUKTA\n09BD          ; XID_Continue # Lo       BENGALI SIGN AVAGRAHA\n09BE..09C0    ; XID_Continue # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II\n09C1..09C4    ; XID_Continue # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n09C7..09C8    ; XID_Continue # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\n09CB..09CC    ; XID_Continue # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\n09CD          ; XID_Continue # Mn       BENGALI SIGN VIRAMA\n09CE          ; XID_Continue # Lo       BENGALI LETTER KHANDA TA\n09D7          ; XID_Continue # Mc       BENGALI AU LENGTH MARK\n09DC..09DD    ; XID_Continue # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA\n09DF..09E1    ; XID_Continue # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL\n09E2..09E3    ; XID_Continue # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n09E6..09EF    ; XID_Continue # Nd  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE\n09F0..09F1    ; XID_Continue # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL\n09FC          ; XID_Continue # Lo       BENGALI LETTER VEDIC ANUSVARA\n09FE          ; XID_Continue # Mn       BENGALI SANDHI MARK\n0A01..0A02    ; XID_Continue # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n0A03          ; XID_Continue # Mc       GURMUKHI SIGN VISARGA\n0A05..0A0A    ; XID_Continue # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU\n0A0F..0A10    ; XID_Continue # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI\n0A13..0A28    ; XID_Continue # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA\n0A2A..0A30    ; XID_Continue # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA\n0A32..0A33    ; XID_Continue # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA\n0A35..0A36    ; XID_Continue # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA\n0A38..0A39    ; XID_Continue # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA\n0A3C          ; XID_Continue # Mn       GURMUKHI SIGN NUKTA\n0A3E..0A40    ; XID_Continue # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\n0A41..0A42    ; XID_Continue # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n0A47..0A48    ; XID_Continue # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n0A4B..0A4D    ; XID_Continue # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\n0A51          ; XID_Continue # Mn       GURMUKHI SIGN UDAAT\n0A59..0A5C    ; XID_Continue # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA\n0A5E          ; XID_Continue # Lo       GURMUKHI LETTER FA\n0A66..0A6F    ; XID_Continue # Nd  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE\n0A70..0A71    ; XID_Continue # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n0A72..0A74    ; XID_Continue # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR\n0A75          ; XID_Continue # Mn       GURMUKHI SIGN YAKASH\n0A81..0A82    ; XID_Continue # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n0A83          ; XID_Continue # Mc       GUJARATI SIGN VISARGA\n0A85..0A8D    ; XID_Continue # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E\n0A8F..0A91    ; XID_Continue # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O\n0A93..0AA8    ; XID_Continue # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA\n0AAA..0AB0    ; XID_Continue # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA\n0AB2..0AB3    ; XID_Continue # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA\n0AB5..0AB9    ; XID_Continue # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA\n0ABC          ; XID_Continue # Mn       GUJARATI SIGN NUKTA\n0ABD          ; XID_Continue # Lo       GUJARATI SIGN AVAGRAHA\n0ABE..0AC0    ; XID_Continue # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\n0AC1..0AC5    ; XID_Continue # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n0AC7..0AC8    ; XID_Continue # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n0AC9          ; XID_Continue # Mc       GUJARATI VOWEL SIGN CANDRA O\n0ACB..0ACC    ; XID_Continue # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\n0ACD          ; XID_Continue # Mn       GUJARATI SIGN VIRAMA\n0AD0          ; XID_Continue # Lo       GUJARATI OM\n0AE0..0AE1    ; XID_Continue # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL\n0AE2..0AE3    ; XID_Continue # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n0AE6..0AEF    ; XID_Continue # Nd  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE\n0AF9          ; XID_Continue # Lo       GUJARATI LETTER ZHA\n0AFA..0AFF    ; XID_Continue # Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\n0B01          ; XID_Continue # Mn       ORIYA SIGN CANDRABINDU\n0B02..0B03    ; XID_Continue # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\n0B05..0B0C    ; XID_Continue # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L\n0B0F..0B10    ; XID_Continue # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI\n0B13..0B28    ; XID_Continue # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA\n0B2A..0B30    ; XID_Continue # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA\n0B32..0B33    ; XID_Continue # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA\n0B35..0B39    ; XID_Continue # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA\n0B3C          ; XID_Continue # Mn       ORIYA SIGN NUKTA\n0B3D          ; XID_Continue # Lo       ORIYA SIGN AVAGRAHA\n0B3E          ; XID_Continue # Mc       ORIYA VOWEL SIGN AA\n0B3F          ; XID_Continue # Mn       ORIYA VOWEL SIGN I\n0B40          ; XID_Continue # Mc       ORIYA VOWEL SIGN II\n0B41..0B44    ; XID_Continue # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n0B47..0B48    ; XID_Continue # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\n0B4B..0B4C    ; XID_Continue # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\n0B4D          ; XID_Continue # Mn       ORIYA SIGN VIRAMA\n0B55..0B56    ; XID_Continue # Mn   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK\n0B57          ; XID_Continue # Mc       ORIYA AU LENGTH MARK\n0B5C..0B5D    ; XID_Continue # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA\n0B5F..0B61    ; XID_Continue # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL\n0B62..0B63    ; XID_Continue # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n0B66..0B6F    ; XID_Continue # Nd  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE\n0B71          ; XID_Continue # Lo       ORIYA LETTER WA\n0B82          ; XID_Continue # Mn       TAMIL SIGN ANUSVARA\n0B83          ; XID_Continue # Lo       TAMIL SIGN VISARGA\n0B85..0B8A    ; XID_Continue # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU\n0B8E..0B90    ; XID_Continue # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI\n0B92..0B95    ; XID_Continue # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA\n0B99..0B9A    ; XID_Continue # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA\n0B9C          ; XID_Continue # Lo       TAMIL LETTER JA\n0B9E..0B9F    ; XID_Continue # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA\n0BA3..0BA4    ; XID_Continue # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA\n0BA8..0BAA    ; XID_Continue # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA\n0BAE..0BB9    ; XID_Continue # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA\n0BBE..0BBF    ; XID_Continue # Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I\n0BC0          ; XID_Continue # Mn       TAMIL VOWEL SIGN II\n0BC1..0BC2    ; XID_Continue # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\n0BC6..0BC8    ; XID_Continue # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\n0BCA..0BCC    ; XID_Continue # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\n0BCD          ; XID_Continue # Mn       TAMIL SIGN VIRAMA\n0BD0          ; XID_Continue # Lo       TAMIL OM\n0BD7          ; XID_Continue # Mc       TAMIL AU LENGTH MARK\n0BE6..0BEF    ; XID_Continue # Nd  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE\n0C00          ; XID_Continue # Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE\n0C01..0C03    ; XID_Continue # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\n0C04          ; XID_Continue # Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE\n0C05..0C0C    ; XID_Continue # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L\n0C0E..0C10    ; XID_Continue # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI\n0C12..0C28    ; XID_Continue # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA\n0C2A..0C39    ; XID_Continue # Lo  [16] TELUGU LETTER PA..TELUGU LETTER HA\n0C3C          ; XID_Continue # Mn       TELUGU SIGN NUKTA\n0C3D          ; XID_Continue # Lo       TELUGU SIGN AVAGRAHA\n0C3E..0C40    ; XID_Continue # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n0C41..0C44    ; XID_Continue # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\n0C46..0C48    ; XID_Continue # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n0C4A..0C4D    ; XID_Continue # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA\n0C55..0C56    ; XID_Continue # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n0C58..0C5A    ; XID_Continue # Lo   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA\n0C5C..0C5D    ; XID_Continue # Lo   [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU\n0C60..0C61    ; XID_Continue # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL\n0C62..0C63    ; XID_Continue # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n0C66..0C6F    ; XID_Continue # Nd  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE\n0C80          ; XID_Continue # Lo       KANNADA SIGN SPACING CANDRABINDU\n0C81          ; XID_Continue # Mn       KANNADA SIGN CANDRABINDU\n0C82..0C83    ; XID_Continue # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\n0C85..0C8C    ; XID_Continue # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L\n0C8E..0C90    ; XID_Continue # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI\n0C92..0CA8    ; XID_Continue # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA\n0CAA..0CB3    ; XID_Continue # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA\n0CB5..0CB9    ; XID_Continue # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA\n0CBC          ; XID_Continue # Mn       KANNADA SIGN NUKTA\n0CBD          ; XID_Continue # Lo       KANNADA SIGN AVAGRAHA\n0CBE          ; XID_Continue # Mc       KANNADA VOWEL SIGN AA\n0CBF          ; XID_Continue # Mn       KANNADA VOWEL SIGN I\n0CC0..0CC4    ; XID_Continue # Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR\n0CC6          ; XID_Continue # Mn       KANNADA VOWEL SIGN E\n0CC7..0CC8    ; XID_Continue # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n0CCA..0CCB    ; XID_Continue # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n0CCC..0CCD    ; XID_Continue # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\n0CD5..0CD6    ; XID_Continue # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n0CDC..0CDE    ; XID_Continue # Lo   [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA\n0CE0..0CE1    ; XID_Continue # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL\n0CE2..0CE3    ; XID_Continue # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n0CE6..0CEF    ; XID_Continue # Nd  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE\n0CF1..0CF2    ; XID_Continue # Lo   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA\n0CF3          ; XID_Continue # Mc       KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT\n0D00..0D01    ; XID_Continue # Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n0D02..0D03    ; XID_Continue # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\n0D04..0D0C    ; XID_Continue # Lo   [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L\n0D0E..0D10    ; XID_Continue # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI\n0D12..0D3A    ; XID_Continue # Lo  [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA\n0D3B..0D3C    ; XID_Continue # Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n0D3D          ; XID_Continue # Lo       MALAYALAM SIGN AVAGRAHA\n0D3E..0D40    ; XID_Continue # Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II\n0D41..0D44    ; XID_Continue # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n0D46..0D48    ; XID_Continue # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\n0D4A..0D4C    ; XID_Continue # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\n0D4D          ; XID_Continue # Mn       MALAYALAM SIGN VIRAMA\n0D4E          ; XID_Continue # Lo       MALAYALAM LETTER DOT REPH\n0D54..0D56    ; XID_Continue # Lo   [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL\n0D57          ; XID_Continue # Mc       MALAYALAM AU LENGTH MARK\n0D5F..0D61    ; XID_Continue # Lo   [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL\n0D62..0D63    ; XID_Continue # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n0D66..0D6F    ; XID_Continue # Nd  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE\n0D7A..0D7F    ; XID_Continue # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K\n0D81          ; XID_Continue # Mn       SINHALA SIGN CANDRABINDU\n0D82..0D83    ; XID_Continue # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\n0D85..0D96    ; XID_Continue # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA\n0D9A..0DB1    ; XID_Continue # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA\n0DB3..0DBB    ; XID_Continue # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA\n0DBD          ; XID_Continue # Lo       SINHALA LETTER DANTAJA LAYANNA\n0DC0..0DC6    ; XID_Continue # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA\n0DCA          ; XID_Continue # Mn       SINHALA SIGN AL-LAKUNA\n0DCF..0DD1    ; XID_Continue # Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\n0DD2..0DD4    ; XID_Continue # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n0DD6          ; XID_Continue # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA\n0DD8..0DDF    ; XID_Continue # Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA\n0DE6..0DEF    ; XID_Continue # Nd  [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE\n0DF2..0DF3    ; XID_Continue # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\n0E01..0E30    ; XID_Continue # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A\n0E31          ; XID_Continue # Mn       THAI CHARACTER MAI HAN-AKAT\n0E32..0E33    ; XID_Continue # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM\n0E34..0E3A    ; XID_Continue # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n0E40..0E45    ; XID_Continue # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO\n0E46          ; XID_Continue # Lm       THAI CHARACTER MAIYAMOK\n0E47..0E4E    ; XID_Continue # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\n0E50..0E59    ; XID_Continue # Nd  [10] THAI DIGIT ZERO..THAI DIGIT NINE\n0E81..0E82    ; XID_Continue # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG\n0E84          ; XID_Continue # Lo       LAO LETTER KHO TAM\n0E86..0E8A    ; XID_Continue # Lo   [5] LAO LETTER PALI GHA..LAO LETTER SO TAM\n0E8C..0EA3    ; XID_Continue # Lo  [24] LAO LETTER PALI JHA..LAO LETTER LO LING\n0EA5          ; XID_Continue # Lo       LAO LETTER LO LOOT\n0EA7..0EB0    ; XID_Continue # Lo  [10] LAO LETTER WO..LAO VOWEL SIGN A\n0EB1          ; XID_Continue # Mn       LAO VOWEL SIGN MAI KAN\n0EB2..0EB3    ; XID_Continue # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM\n0EB4..0EBC    ; XID_Continue # Mn   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO\n0EBD          ; XID_Continue # Lo       LAO SEMIVOWEL SIGN NYO\n0EC0..0EC4    ; XID_Continue # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI\n0EC6          ; XID_Continue # Lm       LAO KO LA\n0EC8..0ECE    ; XID_Continue # Mn   [7] LAO TONE MAI EK..LAO YAMAKKAN\n0ED0..0ED9    ; XID_Continue # Nd  [10] LAO DIGIT ZERO..LAO DIGIT NINE\n0EDC..0EDF    ; XID_Continue # Lo   [4] LAO HO NO..LAO LETTER KHMU NYO\n0F00          ; XID_Continue # Lo       TIBETAN SYLLABLE OM\n0F18..0F19    ; XID_Continue # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\n0F20..0F29    ; XID_Continue # Nd  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE\n0F35          ; XID_Continue # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA\n0F37          ; XID_Continue # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS\n0F39          ; XID_Continue # Mn       TIBETAN MARK TSA -PHRU\n0F3E..0F3F    ; XID_Continue # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES\n0F40..0F47    ; XID_Continue # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA\n0F49..0F6C    ; XID_Continue # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA\n0F71..0F7E    ; XID_Continue # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n0F7F          ; XID_Continue # Mc       TIBETAN SIGN RNAM BCAD\n0F80..0F84    ; XID_Continue # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\n0F86..0F87    ; XID_Continue # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\n0F88..0F8C    ; XID_Continue # Lo   [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN\n0F8D..0F97    ; XID_Continue # Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n0F99..0FBC    ; XID_Continue # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n0FC6          ; XID_Continue # Mn       TIBETAN SYMBOL PADMA GDAN\n1000..102A    ; XID_Continue # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU\n102B..102C    ; XID_Continue # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA\n102D..1030    ; XID_Continue # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n1031          ; XID_Continue # Mc       MYANMAR VOWEL SIGN E\n1032..1037    ; XID_Continue # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\n1038          ; XID_Continue # Mc       MYANMAR SIGN VISARGA\n1039..103A    ; XID_Continue # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\n103B..103C    ; XID_Continue # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\n103D..103E    ; XID_Continue # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n103F          ; XID_Continue # Lo       MYANMAR LETTER GREAT SA\n1040..1049    ; XID_Continue # Nd  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE\n1050..1055    ; XID_Continue # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL\n1056..1057    ; XID_Continue # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\n1058..1059    ; XID_Continue # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n105A..105D    ; XID_Continue # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE\n105E..1060    ; XID_Continue # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n1061          ; XID_Continue # Lo       MYANMAR LETTER SGAW KAREN SHA\n1062..1064    ; XID_Continue # Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO\n1065..1066    ; XID_Continue # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA\n1067..106D    ; XID_Continue # Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5\n106E..1070    ; XID_Continue # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA\n1071..1074    ; XID_Continue # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n1075..1081    ; XID_Continue # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA\n1082          ; XID_Continue # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n1083..1084    ; XID_Continue # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E\n1085..1086    ; XID_Continue # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n1087..108C    ; XID_Continue # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3\n108D          ; XID_Continue # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n108E          ; XID_Continue # Lo       MYANMAR LETTER RUMAI PALAUNG FA\n108F          ; XID_Continue # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5\n1090..1099    ; XID_Continue # Nd  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE\n109A..109C    ; XID_Continue # Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A\n109D          ; XID_Continue # Mn       MYANMAR VOWEL SIGN AITON AI\n10A0..10C5    ; XID_Continue # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; XID_Continue # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; XID_Continue # L&       GEORGIAN CAPITAL LETTER AEN\n10D0..10FA    ; XID_Continue # L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FC          ; XID_Continue # Lm       MODIFIER LETTER GEORGIAN NAR\n10FD..10FF    ; XID_Continue # L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n1100..1248    ; XID_Continue # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA\n124A..124D    ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE\n1250..1256    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO\n1258          ; XID_Continue # Lo       ETHIOPIC SYLLABLE QHWA\n125A..125D    ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE\n1260..1288    ; XID_Continue # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA\n128A..128D    ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE\n1290..12B0    ; XID_Continue # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA\n12B2..12B5    ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE\n12B8..12BE    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO\n12C0          ; XID_Continue # Lo       ETHIOPIC SYLLABLE KXWA\n12C2..12C5    ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE\n12C8..12D6    ; XID_Continue # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O\n12D8..1310    ; XID_Continue # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA\n1312..1315    ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE\n1318..135A    ; XID_Continue # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA\n135D..135F    ; XID_Continue # Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\n1369..1371    ; XID_Continue # No   [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE\n1380..138F    ; XID_Continue # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE\n13A0..13F5    ; XID_Continue # L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n13F8..13FD    ; XID_Continue # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1401..166C    ; XID_Continue # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA\n166F..167F    ; XID_Continue # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W\n1681..169A    ; XID_Continue # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH\n16A0..16EA    ; XID_Continue # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X\n16EE..16F0    ; XID_Continue # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL\n16F1..16F8    ; XID_Continue # Lo   [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC\n1700..1711    ; XID_Continue # Lo  [18] TAGALOG LETTER A..TAGALOG LETTER HA\n1712..1714    ; XID_Continue # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\n1715          ; XID_Continue # Mc       TAGALOG SIGN PAMUDPOD\n171F..1731    ; XID_Continue # Lo  [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA\n1732..1733    ; XID_Continue # Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U\n1734          ; XID_Continue # Mc       HANUNOO SIGN PAMUDPOD\n1740..1751    ; XID_Continue # Lo  [18] BUHID LETTER A..BUHID LETTER HA\n1752..1753    ; XID_Continue # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n1760..176C    ; XID_Continue # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA\n176E..1770    ; XID_Continue # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA\n1772..1773    ; XID_Continue # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n1780..17B3    ; XID_Continue # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU\n17B4..17B5    ; XID_Continue # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n17B6          ; XID_Continue # Mc       KHMER VOWEL SIGN AA\n17B7..17BD    ; XID_Continue # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n17BE..17C5    ; XID_Continue # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\n17C6          ; XID_Continue # Mn       KHMER SIGN NIKAHIT\n17C7..17C8    ; XID_Continue # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\n17C9..17D3    ; XID_Continue # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\n17D7          ; XID_Continue # Lm       KHMER SIGN LEK TOO\n17DC          ; XID_Continue # Lo       KHMER SIGN AVAKRAHASANYA\n17DD          ; XID_Continue # Mn       KHMER SIGN ATTHACAN\n17E0..17E9    ; XID_Continue # Nd  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE\n180B..180D    ; XID_Continue # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n180F          ; XID_Continue # Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR\n1810..1819    ; XID_Continue # Nd  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE\n1820..1842    ; XID_Continue # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI\n1843          ; XID_Continue # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN\n1844..1878    ; XID_Continue # Lo  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS\n1880..1884    ; XID_Continue # Lo   [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA\n1885..1886    ; XID_Continue # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n1887..18A8    ; XID_Continue # Lo  [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA\n18A9          ; XID_Continue # Mn       MONGOLIAN LETTER ALI GALI DAGALGA\n18AA          ; XID_Continue # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA\n18B0..18F5    ; XID_Continue # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S\n1900..191E    ; XID_Continue # Lo  [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA\n1920..1922    ; XID_Continue # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n1923..1926    ; XID_Continue # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\n1927..1928    ; XID_Continue # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n1929..192B    ; XID_Continue # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\n1930..1931    ; XID_Continue # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\n1932          ; XID_Continue # Mn       LIMBU SMALL LETTER ANUSVARA\n1933..1938    ; XID_Continue # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\n1939..193B    ; XID_Continue # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\n1946..194F    ; XID_Continue # Nd  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE\n1950..196D    ; XID_Continue # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI\n1970..1974    ; XID_Continue # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6\n1980..19AB    ; XID_Continue # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA\n19B0..19C9    ; XID_Continue # Lo  [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2\n19D0..19D9    ; XID_Continue # Nd  [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE\n19DA          ; XID_Continue # No       NEW TAI LUE THAM DIGIT ONE\n1A00..1A16    ; XID_Continue # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA\n1A17..1A18    ; XID_Continue # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n1A19..1A1A    ; XID_Continue # Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\n1A1B          ; XID_Continue # Mn       BUGINESE VOWEL SIGN AE\n1A20..1A54    ; XID_Continue # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA\n1A55          ; XID_Continue # Mc       TAI THAM CONSONANT SIGN MEDIAL RA\n1A56          ; XID_Continue # Mn       TAI THAM CONSONANT SIGN MEDIAL LA\n1A57          ; XID_Continue # Mc       TAI THAM CONSONANT SIGN LA TANG LAI\n1A58..1A5E    ; XID_Continue # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n1A60          ; XID_Continue # Mn       TAI THAM SIGN SAKOT\n1A61          ; XID_Continue # Mc       TAI THAM VOWEL SIGN A\n1A62          ; XID_Continue # Mn       TAI THAM VOWEL SIGN MAI SAT\n1A63..1A64    ; XID_Continue # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA\n1A65..1A6C    ; XID_Continue # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n1A6D..1A72    ; XID_Continue # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\n1A73..1A7C    ; XID_Continue # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\n1A7F          ; XID_Continue # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT\n1A80..1A89    ; XID_Continue # Nd  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE\n1A90..1A99    ; XID_Continue # Nd  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE\n1AA7          ; XID_Continue # Lm       TAI THAM SIGN MAI YAMOK\n1AB0..1ABD    ; XID_Continue # Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\n1ABF..1ADD    ; XID_Continue # Mn  [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW\n1AE0..1AEB    ; XID_Continue # Mn  [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE\n1B00..1B03    ; XID_Continue # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n1B04          ; XID_Continue # Mc       BALINESE SIGN BISAH\n1B05..1B33    ; XID_Continue # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA\n1B34          ; XID_Continue # Mn       BALINESE SIGN REREKAN\n1B35          ; XID_Continue # Mc       BALINESE VOWEL SIGN TEDUNG\n1B36..1B3A    ; XID_Continue # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n1B3B          ; XID_Continue # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG\n1B3C          ; XID_Continue # Mn       BALINESE VOWEL SIGN LA LENGA\n1B3D..1B41    ; XID_Continue # Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG\n1B42          ; XID_Continue # Mn       BALINESE VOWEL SIGN PEPET\n1B43..1B44    ; XID_Continue # Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG\n1B45..1B4C    ; XID_Continue # Lo   [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA\n1B50..1B59    ; XID_Continue # Nd  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE\n1B6B..1B73    ; XID_Continue # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\n1B80..1B81    ; XID_Continue # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n1B82          ; XID_Continue # Mc       SUNDANESE SIGN PANGWISAD\n1B83..1BA0    ; XID_Continue # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA\n1BA1          ; XID_Continue # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL\n1BA2..1BA5    ; XID_Continue # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n1BA6..1BA7    ; XID_Continue # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\n1BA8..1BA9    ; XID_Continue # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n1BAA          ; XID_Continue # Mc       SUNDANESE SIGN PAMAAEH\n1BAB..1BAD    ; XID_Continue # Mn   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA\n1BAE..1BAF    ; XID_Continue # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA\n1BB0..1BB9    ; XID_Continue # Nd  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE\n1BBA..1BE5    ; XID_Continue # Lo  [44] SUNDANESE AVAGRAHA..BATAK LETTER U\n1BE6          ; XID_Continue # Mn       BATAK SIGN TOMPI\n1BE7          ; XID_Continue # Mc       BATAK VOWEL SIGN E\n1BE8..1BE9    ; XID_Continue # Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n1BEA..1BEC    ; XID_Continue # Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\n1BED          ; XID_Continue # Mn       BATAK VOWEL SIGN KARO O\n1BEE          ; XID_Continue # Mc       BATAK VOWEL SIGN U\n1BEF..1BF1    ; XID_Continue # Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n1BF2..1BF3    ; XID_Continue # Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN\n1C00..1C23    ; XID_Continue # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A\n1C24..1C2B    ; XID_Continue # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\n1C2C..1C33    ; XID_Continue # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n1C34..1C35    ; XID_Continue # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\n1C36..1C37    ; XID_Continue # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\n1C40..1C49    ; XID_Continue # Nd  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE\n1C4D..1C4F    ; XID_Continue # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA\n1C50..1C59    ; XID_Continue # Nd  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE\n1C5A..1C77    ; XID_Continue # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH\n1C78..1C7D    ; XID_Continue # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD\n1C80..1C8A    ; XID_Continue # L&  [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE\n1C90..1CBA    ; XID_Continue # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; XID_Continue # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1CD0..1CD2    ; XID_Continue # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\n1CD4..1CE0    ; XID_Continue # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n1CE1          ; XID_Continue # Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\n1CE2..1CE8    ; XID_Continue # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n1CE9..1CEC    ; XID_Continue # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL\n1CED          ; XID_Continue # Mn       VEDIC SIGN TIRYAK\n1CEE..1CF3    ; XID_Continue # Lo   [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA\n1CF4          ; XID_Continue # Mn       VEDIC TONE CANDRA ABOVE\n1CF5..1CF6    ; XID_Continue # Lo   [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA\n1CF7          ; XID_Continue # Mc       VEDIC SIGN ATIKRAMA\n1CF8..1CF9    ; XID_Continue # Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n1CFA          ; XID_Continue # Lo       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA\n1D00..1D2B    ; XID_Continue # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL\n1D2C..1D6A    ; XID_Continue # Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D6B..1D77    ; XID_Continue # L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G\n1D78          ; XID_Continue # Lm       MODIFIER LETTER CYRILLIC EN\n1D79..1D9A    ; XID_Continue # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK\n1D9B..1DBF    ; XID_Continue # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA\n1DC0..1DFF    ; XID_Continue # Mn  [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\n1E00..1F15    ; XID_Continue # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F18..1F1D    ; XID_Continue # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F45    ; XID_Continue # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F48..1F4D    ; XID_Continue # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; XID_Continue # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F59          ; XID_Continue # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; XID_Continue # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; XID_Continue # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F..1F7D    ; XID_Continue # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1FB4    ; XID_Continue # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FBC    ; XID_Continue # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBE          ; XID_Continue # L&       GREEK PROSGEGRAMMENI\n1FC2..1FC4    ; XID_Continue # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FCC    ; XID_Continue # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FD0..1FD3    ; XID_Continue # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FDB    ; XID_Continue # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE0..1FEC    ; XID_Continue # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FF2..1FF4    ; XID_Continue # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FFC    ; XID_Continue # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n200C..200D    ; XID_Continue # Cf   [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER\n203F..2040    ; XID_Continue # Pc   [2] UNDERTIE..CHARACTER TIE\n2054          ; XID_Continue # Pc       INVERTED UNDERTIE\n2071          ; XID_Continue # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n207F          ; XID_Continue # Lm       SUPERSCRIPT LATIN SMALL LETTER N\n2090..209C    ; XID_Continue # Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n20D0..20DC    ; XID_Continue # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n20E1          ; XID_Continue # Mn       COMBINING LEFT RIGHT ARROW ABOVE\n20E5..20F0    ; XID_Continue # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\n2102          ; XID_Continue # L&       DOUBLE-STRUCK CAPITAL C\n2107          ; XID_Continue # L&       EULER CONSTANT\n210A..2113    ; XID_Continue # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L\n2115          ; XID_Continue # L&       DOUBLE-STRUCK CAPITAL N\n2118          ; XID_Continue # Sm       SCRIPT CAPITAL P\n2119..211D    ; XID_Continue # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n2124          ; XID_Continue # L&       DOUBLE-STRUCK CAPITAL Z\n2126          ; XID_Continue # L&       OHM SIGN\n2128          ; XID_Continue # L&       BLACK-LETTER CAPITAL Z\n212A..212D    ; XID_Continue # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C\n212E          ; XID_Continue # So       ESTIMATED SYMBOL\n212F..2134    ; XID_Continue # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O\n2135..2138    ; XID_Continue # Lo   [4] ALEF SYMBOL..DALET SYMBOL\n2139          ; XID_Continue # L&       INFORMATION SOURCE\n213C..213F    ; XID_Continue # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI\n2145..2149    ; XID_Continue # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J\n214E          ; XID_Continue # L&       TURNED SMALL F\n2160..2182    ; XID_Continue # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND\n2183..2184    ; XID_Continue # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C\n2185..2188    ; XID_Continue # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND\n2C00..2C7B    ; XID_Continue # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E\n2C7C..2C7D    ; XID_Continue # Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\n2C7E..2CE4    ; XID_Continue # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI\n2CEB..2CEE    ; XID_Continue # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CEF..2CF1    ; XID_Continue # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\n2CF2..2CF3    ; XID_Continue # L&   [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI\n2D00..2D25    ; XID_Continue # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; XID_Continue # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; XID_Continue # L&       GEORGIAN SMALL LETTER AEN\n2D30..2D67    ; XID_Continue # Lo  [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO\n2D6F          ; XID_Continue # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK\n2D7F          ; XID_Continue # Mn       TIFINAGH CONSONANT JOINER\n2D80..2D96    ; XID_Continue # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE\n2DA0..2DA6    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO\n2DA8..2DAE    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO\n2DB0..2DB6    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO\n2DB8..2DBE    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO\n2DC0..2DC6    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO\n2DC8..2DCE    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO\n2DD0..2DD6    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO\n2DD8..2DDE    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO\n2DE0..2DFF    ; XID_Continue # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\n3005          ; XID_Continue # Lm       IDEOGRAPHIC ITERATION MARK\n3006          ; XID_Continue # Lo       IDEOGRAPHIC CLOSING MARK\n3007          ; XID_Continue # Nl       IDEOGRAPHIC NUMBER ZERO\n3021..3029    ; XID_Continue # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE\n302A..302D    ; XID_Continue # Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n302E..302F    ; XID_Continue # Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\n3031..3035    ; XID_Continue # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF\n3038..303A    ; XID_Continue # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY\n303B          ; XID_Continue # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK\n303C          ; XID_Continue # Lo       MASU MARK\n3041..3096    ; XID_Continue # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE\n3099..309A    ; XID_Continue # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n309D..309E    ; XID_Continue # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK\n309F          ; XID_Continue # Lo       HIRAGANA DIGRAPH YORI\n30A1..30FA    ; XID_Continue # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO\n30FB          ; XID_Continue # Po       KATAKANA MIDDLE DOT\n30FC..30FE    ; XID_Continue # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK\n30FF          ; XID_Continue # Lo       KATAKANA DIGRAPH KOTO\n3105..312F    ; XID_Continue # Lo  [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN\n3131..318E    ; XID_Continue # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE\n31A0..31BF    ; XID_Continue # Lo  [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH\n31F0..31FF    ; XID_Continue # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO\n3400..4DBF    ; XID_Continue # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF\n4E00..A014    ; XID_Continue # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E\nA015          ; XID_Continue # Lm       YI SYLLABLE WU\nA016..A48C    ; XID_Continue # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR\nA4D0..A4F7    ; XID_Continue # Lo  [40] LISU LETTER BA..LISU LETTER OE\nA4F8..A4FD    ; XID_Continue # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU\nA500..A60B    ; XID_Continue # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG\nA60C          ; XID_Continue # Lm       VAI SYLLABLE LENGTHENER\nA610..A61F    ; XID_Continue # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG\nA620..A629    ; XID_Continue # Nd  [10] VAI DIGIT ZERO..VAI DIGIT NINE\nA62A..A62B    ; XID_Continue # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO\nA640..A66D    ; XID_Continue # L&  [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA66E          ; XID_Continue # Lo       CYRILLIC LETTER MULTIOCULAR O\nA66F          ; XID_Continue # Mn       COMBINING CYRILLIC VZMET\nA674..A67D    ; XID_Continue # Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\nA67F          ; XID_Continue # Lm       CYRILLIC PAYEROK\nA680..A69B    ; XID_Continue # L&  [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O\nA69C..A69D    ; XID_Continue # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA69E..A69F    ; XID_Continue # Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\nA6A0..A6E5    ; XID_Continue # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI\nA6E6..A6EF    ; XID_Continue # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM\nA6F0..A6F1    ; XID_Continue # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\nA717..A71F    ; XID_Continue # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK\nA722..A76F    ; XID_Continue # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON\nA770          ; XID_Continue # Lm       MODIFIER LETTER US\nA771..A787    ; XID_Continue # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T\nA788          ; XID_Continue # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT\nA78B..A78E    ; XID_Continue # L&   [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT\nA78F          ; XID_Continue # Lo       LATIN LETTER SINOLOGICAL DOT\nA790..A7DC    ; XID_Continue # L&  [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F1..A7F4    ; XID_Continue # Lm   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F5..A7F6    ; XID_Continue # L&   [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H\nA7F7          ; XID_Continue # Lo       LATIN EPIGRAPHIC LETTER SIDEWAYS I\nA7F8..A7F9    ; XID_Continue # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA7FA          ; XID_Continue # L&       LATIN LETTER SMALL CAPITAL TURNED M\nA7FB..A801    ; XID_Continue # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I\nA802          ; XID_Continue # Mn       SYLOTI NAGRI SIGN DVISVARA\nA803..A805    ; XID_Continue # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O\nA806          ; XID_Continue # Mn       SYLOTI NAGRI SIGN HASANTA\nA807..A80A    ; XID_Continue # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO\nA80B          ; XID_Continue # Mn       SYLOTI NAGRI SIGN ANUSVARA\nA80C..A822    ; XID_Continue # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO\nA823..A824    ; XID_Continue # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\nA825..A826    ; XID_Continue # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\nA827          ; XID_Continue # Mc       SYLOTI NAGRI VOWEL SIGN OO\nA82C          ; XID_Continue # Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA\nA840..A873    ; XID_Continue # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU\nA880..A881    ; XID_Continue # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\nA882..A8B3    ; XID_Continue # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA\nA8B4..A8C3    ; XID_Continue # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\nA8C4..A8C5    ; XID_Continue # Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\nA8D0..A8D9    ; XID_Continue # Nd  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE\nA8E0..A8F1    ; XID_Continue # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\nA8F2..A8F7    ; XID_Continue # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA\nA8FB          ; XID_Continue # Lo       DEVANAGARI HEADSTROKE\nA8FD..A8FE    ; XID_Continue # Lo   [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY\nA8FF          ; XID_Continue # Mn       DEVANAGARI VOWEL SIGN AY\nA900..A909    ; XID_Continue # Nd  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE\nA90A..A925    ; XID_Continue # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO\nA926..A92D    ; XID_Continue # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\nA930..A946    ; XID_Continue # Lo  [23] REJANG LETTER KA..REJANG LETTER A\nA947..A951    ; XID_Continue # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\nA952..A953    ; XID_Continue # Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA\nA960..A97C    ; XID_Continue # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\nA980..A982    ; XID_Continue # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\nA983          ; XID_Continue # Mc       JAVANESE SIGN WIGNYAN\nA984..A9B2    ; XID_Continue # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA\nA9B3          ; XID_Continue # Mn       JAVANESE SIGN CECAK TELU\nA9B4..A9B5    ; XID_Continue # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\nA9B6..A9B9    ; XID_Continue # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\nA9BA..A9BB    ; XID_Continue # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\nA9BC..A9BD    ; XID_Continue # Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET\nA9BE..A9C0    ; XID_Continue # Mc   [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON\nA9CF          ; XID_Continue # Lm       JAVANESE PANGRANGKEP\nA9D0..A9D9    ; XID_Continue # Nd  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE\nA9E0..A9E4    ; XID_Continue # Lo   [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA\nA9E5          ; XID_Continue # Mn       MYANMAR SIGN SHAN SAW\nA9E6          ; XID_Continue # Lm       MYANMAR MODIFIER LETTER SHAN REDUPLICATION\nA9E7..A9EF    ; XID_Continue # Lo   [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA\nA9F0..A9F9    ; XID_Continue # Nd  [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE\nA9FA..A9FE    ; XID_Continue # Lo   [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA\nAA00..AA28    ; XID_Continue # Lo  [41] CHAM LETTER A..CHAM LETTER HA\nAA29..AA2E    ; XID_Continue # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\nAA2F..AA30    ; XID_Continue # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\nAA31..AA32    ; XID_Continue # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\nAA33..AA34    ; XID_Continue # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\nAA35..AA36    ; XID_Continue # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\nAA40..AA42    ; XID_Continue # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG\nAA43          ; XID_Continue # Mn       CHAM CONSONANT SIGN FINAL NG\nAA44..AA4B    ; XID_Continue # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS\nAA4C          ; XID_Continue # Mn       CHAM CONSONANT SIGN FINAL M\nAA4D          ; XID_Continue # Mc       CHAM CONSONANT SIGN FINAL H\nAA50..AA59    ; XID_Continue # Nd  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE\nAA60..AA6F    ; XID_Continue # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA\nAA70          ; XID_Continue # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION\nAA71..AA76    ; XID_Continue # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM\nAA7A          ; XID_Continue # Lo       MYANMAR LETTER AITON RA\nAA7B          ; XID_Continue # Mc       MYANMAR SIGN PAO KAREN TONE\nAA7C          ; XID_Continue # Mn       MYANMAR SIGN TAI LAING TONE-2\nAA7D          ; XID_Continue # Mc       MYANMAR SIGN TAI LAING TONE-5\nAA7E..AAAF    ; XID_Continue # Lo  [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O\nAAB0          ; XID_Continue # Mn       TAI VIET MAI KANG\nAAB1          ; XID_Continue # Lo       TAI VIET VOWEL AA\nAAB2..AAB4    ; XID_Continue # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\nAAB5..AAB6    ; XID_Continue # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O\nAAB7..AAB8    ; XID_Continue # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\nAAB9..AABD    ; XID_Continue # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN\nAABE..AABF    ; XID_Continue # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\nAAC0          ; XID_Continue # Lo       TAI VIET TONE MAI NUENG\nAAC1          ; XID_Continue # Mn       TAI VIET TONE MAI THO\nAAC2          ; XID_Continue # Lo       TAI VIET TONE MAI SONG\nAADB..AADC    ; XID_Continue # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG\nAADD          ; XID_Continue # Lm       TAI VIET SYMBOL SAM\nAAE0..AAEA    ; XID_Continue # Lo  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA\nAAEB          ; XID_Continue # Mc       MEETEI MAYEK VOWEL SIGN II\nAAEC..AAED    ; XID_Continue # Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\nAAEE..AAEF    ; XID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\nAAF2          ; XID_Continue # Lo       MEETEI MAYEK ANJI\nAAF3..AAF4    ; XID_Continue # Lm   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK\nAAF5          ; XID_Continue # Mc       MEETEI MAYEK VOWEL SIGN VISARGA\nAAF6          ; XID_Continue # Mn       MEETEI MAYEK VIRAMA\nAB01..AB06    ; XID_Continue # Lo   [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO\nAB09..AB0E    ; XID_Continue # Lo   [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO\nAB11..AB16    ; XID_Continue # Lo   [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO\nAB20..AB26    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO\nAB28..AB2E    ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO\nAB30..AB5A    ; XID_Continue # L&  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG\nAB5C..AB5F    ; XID_Continue # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB60..AB68    ; XID_Continue # L&   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE\nAB69          ; XID_Continue # Lm       MODIFIER LETTER SMALL TURNED W\nAB70..ABBF    ; XID_Continue # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nABC0..ABE2    ; XID_Continue # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM\nABE3..ABE4    ; XID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\nABE5          ; XID_Continue # Mn       MEETEI MAYEK VOWEL SIGN ANAP\nABE6..ABE7    ; XID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\nABE8          ; XID_Continue # Mn       MEETEI MAYEK VOWEL SIGN UNAP\nABE9..ABEA    ; XID_Continue # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\nABEC          ; XID_Continue # Mc       MEETEI MAYEK LUM IYEK\nABED          ; XID_Continue # Mn       MEETEI MAYEK APUN IYEK\nABF0..ABF9    ; XID_Continue # Nd  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE\nAC00..D7A3    ; XID_Continue # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH\nD7B0..D7C6    ; XID_Continue # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\nD7CB..D7FB    ; XID_Continue # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\nF900..FA6D    ; XID_Continue # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D\nFA70..FAD9    ; XID_Continue # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9\nFB00..FB06    ; XID_Continue # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; XID_Continue # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFB1D          ; XID_Continue # Lo       HEBREW LETTER YOD WITH HIRIQ\nFB1E          ; XID_Continue # Mn       HEBREW POINT JUDEO-SPANISH VARIKA\nFB1F..FB28    ; XID_Continue # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV\nFB2A..FB36    ; XID_Continue # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH\nFB38..FB3C    ; XID_Continue # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH\nFB3E          ; XID_Continue # Lo       HEBREW LETTER MEM WITH DAGESH\nFB40..FB41    ; XID_Continue # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH\nFB43..FB44    ; XID_Continue # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH\nFB46..FBB1    ; XID_Continue # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM\nFBD3..FC5D    ; XID_Continue # Lo [139] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM\nFC64..FD3D    ; XID_Continue # Lo [218] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM\nFD50..FD8F    ; XID_Continue # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM\nFD92..FDC7    ; XID_Continue # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM\nFDF0..FDF9    ; XID_Continue # Lo  [10] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE SALLA ISOLATED FORM\nFE00..FE0F    ; XID_Continue # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\nFE20..FE2F    ; XID_Continue # Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\nFE33..FE34    ; XID_Continue # Pc   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE\nFE4D..FE4F    ; XID_Continue # Pc   [3] DASHED LOW LINE..WAVY LOW LINE\nFE71          ; XID_Continue # Lo       ARABIC TATWEEL WITH FATHATAN ABOVE\nFE73          ; XID_Continue # Lo       ARABIC TAIL FRAGMENT\nFE77          ; XID_Continue # Lo       ARABIC FATHA MEDIAL FORM\nFE79          ; XID_Continue # Lo       ARABIC DAMMA MEDIAL FORM\nFE7B          ; XID_Continue # Lo       ARABIC KASRA MEDIAL FORM\nFE7D          ; XID_Continue # Lo       ARABIC SHADDA MEDIAL FORM\nFE7F..FEFC    ; XID_Continue # Lo [126] ARABIC SUKUN MEDIAL FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM\nFF10..FF19    ; XID_Continue # Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE\nFF21..FF3A    ; XID_Continue # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\nFF3F          ; XID_Continue # Pc       FULLWIDTH LOW LINE\nFF41..FF5A    ; XID_Continue # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\nFF65          ; XID_Continue # Po       HALFWIDTH KATAKANA MIDDLE DOT\nFF66..FF6F    ; XID_Continue # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU\nFF70          ; XID_Continue # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF71..FF9D    ; XID_Continue # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N\nFF9E..FF9F    ; XID_Continue # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\nFFA0..FFBE    ; XID_Continue # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH\nFFC2..FFC7    ; XID_Continue # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E\nFFCA..FFCF    ; XID_Continue # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE\nFFD2..FFD7    ; XID_Continue # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU\nFFDA..FFDC    ; XID_Continue # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I\n10000..1000B  ; XID_Continue # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE\n1000D..10026  ; XID_Continue # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO\n10028..1003A  ; XID_Continue # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO\n1003C..1003D  ; XID_Continue # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE\n1003F..1004D  ; XID_Continue # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO\n10050..1005D  ; XID_Continue # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089\n10080..100FA  ; XID_Continue # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305\n10140..10174  ; XID_Continue # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS\n101FD         ; XID_Continue # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\n10280..1029C  ; XID_Continue # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X\n102A0..102D0  ; XID_Continue # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3\n102E0         ; XID_Continue # Mn       COPTIC EPACT THOUSANDS MARK\n10300..1031F  ; XID_Continue # Lo  [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS\n1032D..10340  ; XID_Continue # Lo  [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA\n10341         ; XID_Continue # Nl       GOTHIC LETTER NINETY\n10342..10349  ; XID_Continue # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL\n1034A         ; XID_Continue # Nl       GOTHIC LETTER NINE HUNDRED\n10350..10375  ; XID_Continue # Lo  [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA\n10376..1037A  ; XID_Continue # Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n10380..1039D  ; XID_Continue # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU\n103A0..103C3  ; XID_Continue # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA\n103C8..103CF  ; XID_Continue # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH\n103D1..103D5  ; XID_Continue # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED\n10400..1044F  ; XID_Continue # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW\n10450..1049D  ; XID_Continue # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO\n104A0..104A9  ; XID_Continue # Nd  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE\n104B0..104D3  ; XID_Continue # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n104D8..104FB  ; XID_Continue # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10500..10527  ; XID_Continue # Lo  [40] ELBASAN LETTER A..ELBASAN LETTER KHE\n10530..10563  ; XID_Continue # Lo  [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW\n10570..1057A  ; XID_Continue # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; XID_Continue # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; XID_Continue # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; XID_Continue # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10597..105A1  ; XID_Continue # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; XID_Continue # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; XID_Continue # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; XID_Continue # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n105C0..105F3  ; XID_Continue # Lo  [52] TODHRI LETTER A..TODHRI LETTER OO\n10600..10736  ; XID_Continue # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664\n10740..10755  ; XID_Continue # Lo  [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE\n10760..10767  ; XID_Continue # Lo   [8] LINEAR A SIGN A800..LINEAR A SIGN A807\n10780..10785  ; XID_Continue # Lm   [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; XID_Continue # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; XID_Continue # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n10800..10805  ; XID_Continue # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA\n10808         ; XID_Continue # Lo       CYPRIOT SYLLABLE JO\n1080A..10835  ; XID_Continue # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO\n10837..10838  ; XID_Continue # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE\n1083C         ; XID_Continue # Lo       CYPRIOT SYLLABLE ZA\n1083F..10855  ; XID_Continue # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW\n10860..10876  ; XID_Continue # Lo  [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW\n10880..1089E  ; XID_Continue # Lo  [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW\n108E0..108F2  ; XID_Continue # Lo  [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH\n108F4..108F5  ; XID_Continue # Lo   [2] HATRAN LETTER SHIN..HATRAN LETTER TAW\n10900..10915  ; XID_Continue # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU\n10920..10939  ; XID_Continue # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C\n10940..10959  ; XID_Continue # Lo  [26] SIDETIC LETTER N01..SIDETIC LETTER N26\n10980..109B7  ; XID_Continue # Lo  [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA\n109BE..109BF  ; XID_Continue # Lo   [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN\n10A00         ; XID_Continue # Lo       KHAROSHTHI LETTER A\n10A01..10A03  ; XID_Continue # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n10A05..10A06  ; XID_Continue # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n10A0C..10A0F  ; XID_Continue # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n10A10..10A13  ; XID_Continue # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA\n10A15..10A17  ; XID_Continue # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA\n10A19..10A35  ; XID_Continue # Lo  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA\n10A38..10A3A  ; XID_Continue # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\n10A3F         ; XID_Continue # Mn       KHAROSHTHI VIRAMA\n10A60..10A7C  ; XID_Continue # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH\n10A80..10A9C  ; XID_Continue # Lo  [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH\n10AC0..10AC7  ; XID_Continue # Lo   [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW\n10AC9..10AE4  ; XID_Continue # Lo  [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW\n10AE5..10AE6  ; XID_Continue # Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\n10B00..10B35  ; XID_Continue # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE\n10B40..10B55  ; XID_Continue # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW\n10B60..10B72  ; XID_Continue # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW\n10B80..10B91  ; XID_Continue # Lo  [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW\n10C00..10C48  ; XID_Continue # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH\n10C80..10CB2  ; XID_Continue # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10CC0..10CF2  ; XID_Continue # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10D00..10D23  ; XID_Continue # Lo  [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA\n10D24..10D27  ; XID_Continue # Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n10D30..10D39  ; XID_Continue # Nd  [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE\n10D40..10D49  ; XID_Continue # Nd  [10] GARAY DIGIT ZERO..GARAY DIGIT NINE\n10D4A..10D4D  ; XID_Continue # Lo   [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE\n10D4E         ; XID_Continue # Lm       GARAY VOWEL LENGTH MARK\n10D4F         ; XID_Continue # Lo       GARAY SUKUN\n10D50..10D65  ; XID_Continue # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n10D69..10D6D  ; XID_Continue # Mn   [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK\n10D6F         ; XID_Continue # Lm       GARAY REDUPLICATION MARK\n10D70..10D85  ; XID_Continue # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n10E80..10EA9  ; XID_Continue # Lo  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET\n10EAB..10EAC  ; XID_Continue # Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK\n10EB0..10EB1  ; XID_Continue # Lo   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE\n10EC2..10EC4  ; XID_Continue # Lo   [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW\n10EC5         ; XID_Continue # Lm       ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW\n10EC6..10EC7  ; XID_Continue # Lo   [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW\n10EFA..10EFF  ; XID_Continue # Mn   [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA\n10F00..10F1C  ; XID_Continue # Lo  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL\n10F27         ; XID_Continue # Lo       OLD SOGDIAN LIGATURE AYIN-DALETH\n10F30..10F45  ; XID_Continue # Lo  [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN\n10F46..10F50  ; XID_Continue # Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW\n10F70..10F81  ; XID_Continue # Lo  [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH\n10F82..10F85  ; XID_Continue # Mn   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW\n10FB0..10FC4  ; XID_Continue # Lo  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW\n10FE0..10FF6  ; XID_Continue # Lo  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH\n11000         ; XID_Continue # Mc       BRAHMI SIGN CANDRABINDU\n11001         ; XID_Continue # Mn       BRAHMI SIGN ANUSVARA\n11002         ; XID_Continue # Mc       BRAHMI SIGN VISARGA\n11003..11037  ; XID_Continue # Lo  [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA\n11038..11046  ; XID_Continue # Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\n11066..1106F  ; XID_Continue # Nd  [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE\n11070         ; XID_Continue # Mn       BRAHMI SIGN OLD TAMIL VIRAMA\n11071..11072  ; XID_Continue # Lo   [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O\n11073..11074  ; XID_Continue # Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O\n11075         ; XID_Continue # Lo       BRAHMI LETTER OLD TAMIL LLA\n1107F..11081  ; XID_Continue # Mn   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA\n11082         ; XID_Continue # Mc       KAITHI SIGN VISARGA\n11083..110AF  ; XID_Continue # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA\n110B0..110B2  ; XID_Continue # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\n110B3..110B6  ; XID_Continue # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n110B7..110B8  ; XID_Continue # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\n110B9..110BA  ; XID_Continue # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\n110C2         ; XID_Continue # Mn       KAITHI VOWEL SIGN VOCALIC R\n110D0..110E8  ; XID_Continue # Lo  [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE\n110F0..110F9  ; XID_Continue # Nd  [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE\n11100..11102  ; XID_Continue # Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n11103..11126  ; XID_Continue # Lo  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA\n11127..1112B  ; XID_Continue # Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n1112C         ; XID_Continue # Mc       CHAKMA VOWEL SIGN E\n1112D..11134  ; XID_Continue # Mn   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA\n11136..1113F  ; XID_Continue # Nd  [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE\n11144         ; XID_Continue # Lo       CHAKMA LETTER LHAA\n11145..11146  ; XID_Continue # Mc   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI\n11147         ; XID_Continue # Lo       CHAKMA LETTER VAA\n11150..11172  ; XID_Continue # Lo  [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA\n11173         ; XID_Continue # Mn       MAHAJANI SIGN NUKTA\n11176         ; XID_Continue # Lo       MAHAJANI LIGATURE SHRI\n11180..11181  ; XID_Continue # Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n11182         ; XID_Continue # Mc       SHARADA SIGN VISARGA\n11183..111B2  ; XID_Continue # Lo  [48] SHARADA LETTER A..SHARADA LETTER HA\n111B3..111B5  ; XID_Continue # Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\n111B6..111BE  ; XID_Continue # Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n111BF..111C0  ; XID_Continue # Mc   [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA\n111C1..111C4  ; XID_Continue # Lo   [4] SHARADA SIGN AVAGRAHA..SHARADA OM\n111C9..111CC  ; XID_Continue # Mn   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK\n111CE         ; XID_Continue # Mc       SHARADA VOWEL SIGN PRISHTHAMATRA E\n111CF         ; XID_Continue # Mn       SHARADA SIGN INVERTED CANDRABINDU\n111D0..111D9  ; XID_Continue # Nd  [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE\n111DA         ; XID_Continue # Lo       SHARADA EKAM\n111DC         ; XID_Continue # Lo       SHARADA HEADSTROKE\n11200..11211  ; XID_Continue # Lo  [18] KHOJKI LETTER A..KHOJKI LETTER JJA\n11213..1122B  ; XID_Continue # Lo  [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA\n1122C..1122E  ; XID_Continue # Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\n1122F..11231  ; XID_Continue # Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n11232..11233  ; XID_Continue # Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\n11234         ; XID_Continue # Mn       KHOJKI SIGN ANUSVARA\n11235         ; XID_Continue # Mc       KHOJKI SIGN VIRAMA\n11236..11237  ; XID_Continue # Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\n1123E         ; XID_Continue # Mn       KHOJKI SIGN SUKUN\n1123F..11240  ; XID_Continue # Lo   [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I\n11241         ; XID_Continue # Mn       KHOJKI VOWEL SIGN VOCALIC R\n11280..11286  ; XID_Continue # Lo   [7] MULTANI LETTER A..MULTANI LETTER GA\n11288         ; XID_Continue # Lo       MULTANI LETTER GHA\n1128A..1128D  ; XID_Continue # Lo   [4] MULTANI LETTER CA..MULTANI LETTER JJA\n1128F..1129D  ; XID_Continue # Lo  [15] MULTANI LETTER NYA..MULTANI LETTER BA\n1129F..112A8  ; XID_Continue # Lo  [10] MULTANI LETTER BHA..MULTANI LETTER RHA\n112B0..112DE  ; XID_Continue # Lo  [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA\n112DF         ; XID_Continue # Mn       KHUDAWADI SIGN ANUSVARA\n112E0..112E2  ; XID_Continue # Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\n112E3..112EA  ; XID_Continue # Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\n112F0..112F9  ; XID_Continue # Nd  [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE\n11300..11301  ; XID_Continue # Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n11302..11303  ; XID_Continue # Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\n11305..1130C  ; XID_Continue # Lo   [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L\n1130F..11310  ; XID_Continue # Lo   [2] GRANTHA LETTER EE..GRANTHA LETTER AI\n11313..11328  ; XID_Continue # Lo  [22] GRANTHA LETTER OO..GRANTHA LETTER NA\n1132A..11330  ; XID_Continue # Lo   [7] GRANTHA LETTER PA..GRANTHA LETTER RA\n11332..11333  ; XID_Continue # Lo   [2] GRANTHA LETTER LA..GRANTHA LETTER LLA\n11335..11339  ; XID_Continue # Lo   [5] GRANTHA LETTER VA..GRANTHA LETTER HA\n1133B..1133C  ; XID_Continue # Mn   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA\n1133D         ; XID_Continue # Lo       GRANTHA SIGN AVAGRAHA\n1133E..1133F  ; XID_Continue # Mc   [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I\n11340         ; XID_Continue # Mn       GRANTHA VOWEL SIGN II\n11341..11344  ; XID_Continue # Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\n11347..11348  ; XID_Continue # Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\n1134B..1134D  ; XID_Continue # Mc   [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA\n11350         ; XID_Continue # Lo       GRANTHA OM\n11357         ; XID_Continue # Mc       GRANTHA AU LENGTH MARK\n1135D..11361  ; XID_Continue # Lo   [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL\n11362..11363  ; XID_Continue # Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\n11366..1136C  ; XID_Continue # Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\n11370..11374  ; XID_Continue # Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\n11380..11389  ; XID_Continue # Lo  [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL\n1138B         ; XID_Continue # Lo       TULU-TIGALARI LETTER EE\n1138E         ; XID_Continue # Lo       TULU-TIGALARI LETTER AI\n11390..113B5  ; XID_Continue # Lo  [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA\n113B7         ; XID_Continue # Lo       TULU-TIGALARI SIGN AVAGRAHA\n113B8..113BA  ; XID_Continue # Mc   [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II\n113BB..113C0  ; XID_Continue # Mn   [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL\n113C2         ; XID_Continue # Mc       TULU-TIGALARI VOWEL SIGN EE\n113C5         ; XID_Continue # Mc       TULU-TIGALARI VOWEL SIGN AI\n113C7..113CA  ; XID_Continue # Mc   [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA\n113CC..113CD  ; XID_Continue # Mc   [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA\n113CE         ; XID_Continue # Mn       TULU-TIGALARI SIGN VIRAMA\n113CF         ; XID_Continue # Mc       TULU-TIGALARI SIGN LOOPED VIRAMA\n113D0         ; XID_Continue # Mn       TULU-TIGALARI CONJOINER\n113D1         ; XID_Continue # Lo       TULU-TIGALARI REPHA\n113D2         ; XID_Continue # Mn       TULU-TIGALARI GEMINATION MARK\n113D3         ; XID_Continue # Lo       TULU-TIGALARI SIGN PLUTA\n113E1..113E2  ; XID_Continue # Mn   [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA\n11400..11434  ; XID_Continue # Lo  [53] NEWA LETTER A..NEWA LETTER HA\n11435..11437  ; XID_Continue # Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\n11438..1143F  ; XID_Continue # Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n11440..11441  ; XID_Continue # Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\n11442..11444  ; XID_Continue # Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\n11445         ; XID_Continue # Mc       NEWA SIGN VISARGA\n11446         ; XID_Continue # Mn       NEWA SIGN NUKTA\n11447..1144A  ; XID_Continue # Lo   [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI\n11450..11459  ; XID_Continue # Nd  [10] NEWA DIGIT ZERO..NEWA DIGIT NINE\n1145E         ; XID_Continue # Mn       NEWA SANDHI MARK\n1145F..11461  ; XID_Continue # Lo   [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA\n11480..114AF  ; XID_Continue # Lo  [48] TIRHUTA ANJI..TIRHUTA LETTER HA\n114B0..114B2  ; XID_Continue # Mc   [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II\n114B3..114B8  ; XID_Continue # Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n114B9         ; XID_Continue # Mc       TIRHUTA VOWEL SIGN E\n114BA         ; XID_Continue # Mn       TIRHUTA VOWEL SIGN SHORT E\n114BB..114BE  ; XID_Continue # Mc   [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU\n114BF..114C0  ; XID_Continue # Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n114C1         ; XID_Continue # Mc       TIRHUTA SIGN VISARGA\n114C2..114C3  ; XID_Continue # Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\n114C4..114C5  ; XID_Continue # Lo   [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG\n114C7         ; XID_Continue # Lo       TIRHUTA OM\n114D0..114D9  ; XID_Continue # Nd  [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE\n11580..115AE  ; XID_Continue # Lo  [47] SIDDHAM LETTER A..SIDDHAM LETTER HA\n115AF..115B1  ; XID_Continue # Mc   [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II\n115B2..115B5  ; XID_Continue # Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n115B8..115BB  ; XID_Continue # Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\n115BC..115BD  ; XID_Continue # Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n115BE         ; XID_Continue # Mc       SIDDHAM SIGN VISARGA\n115BF..115C0  ; XID_Continue # Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\n115D8..115DB  ; XID_Continue # Lo   [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U\n115DC..115DD  ; XID_Continue # Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n11600..1162F  ; XID_Continue # Lo  [48] MODI LETTER A..MODI LETTER LLA\n11630..11632  ; XID_Continue # Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\n11633..1163A  ; XID_Continue # Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n1163B..1163C  ; XID_Continue # Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\n1163D         ; XID_Continue # Mn       MODI SIGN ANUSVARA\n1163E         ; XID_Continue # Mc       MODI SIGN VISARGA\n1163F..11640  ; XID_Continue # Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\n11644         ; XID_Continue # Lo       MODI SIGN HUVA\n11650..11659  ; XID_Continue # Nd  [10] MODI DIGIT ZERO..MODI DIGIT NINE\n11680..116AA  ; XID_Continue # Lo  [43] TAKRI LETTER A..TAKRI LETTER RRA\n116AB         ; XID_Continue # Mn       TAKRI SIGN ANUSVARA\n116AC         ; XID_Continue # Mc       TAKRI SIGN VISARGA\n116AD         ; XID_Continue # Mn       TAKRI VOWEL SIGN AA\n116AE..116AF  ; XID_Continue # Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\n116B0..116B5  ; XID_Continue # Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n116B6         ; XID_Continue # Mc       TAKRI SIGN VIRAMA\n116B7         ; XID_Continue # Mn       TAKRI SIGN NUKTA\n116B8         ; XID_Continue # Lo       TAKRI LETTER ARCHAIC KHA\n116C0..116C9  ; XID_Continue # Nd  [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE\n116D0..116E3  ; XID_Continue # Nd  [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE\n11700..1171A  ; XID_Continue # Lo  [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA\n1171D         ; XID_Continue # Mn       AHOM CONSONANT SIGN MEDIAL LA\n1171E         ; XID_Continue # Mc       AHOM CONSONANT SIGN MEDIAL RA\n1171F         ; XID_Continue # Mn       AHOM CONSONANT SIGN MEDIAL LIGATING RA\n11720..11721  ; XID_Continue # Mc   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA\n11722..11725  ; XID_Continue # Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n11726         ; XID_Continue # Mc       AHOM VOWEL SIGN E\n11727..1172B  ; XID_Continue # Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\n11730..11739  ; XID_Continue # Nd  [10] AHOM DIGIT ZERO..AHOM DIGIT NINE\n11740..11746  ; XID_Continue # Lo   [7] AHOM LETTER CA..AHOM LETTER LLA\n11800..1182B  ; XID_Continue # Lo  [44] DOGRA LETTER A..DOGRA LETTER RRA\n1182C..1182E  ; XID_Continue # Mc   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II\n1182F..11837  ; XID_Continue # Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA\n11838         ; XID_Continue # Mc       DOGRA SIGN VISARGA\n11839..1183A  ; XID_Continue # Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA\n118A0..118DF  ; XID_Continue # L&  [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n118E0..118E9  ; XID_Continue # Nd  [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE\n118FF..11906  ; XID_Continue # Lo   [8] WARANG CITI OM..DIVES AKURU LETTER E\n11909         ; XID_Continue # Lo       DIVES AKURU LETTER O\n1190C..11913  ; XID_Continue # Lo   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA\n11915..11916  ; XID_Continue # Lo   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA\n11918..1192F  ; XID_Continue # Lo  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA\n11930..11935  ; XID_Continue # Mc   [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E\n11937..11938  ; XID_Continue # Mc   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O\n1193B..1193C  ; XID_Continue # Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU\n1193D         ; XID_Continue # Mc       DIVES AKURU SIGN HALANTA\n1193E         ; XID_Continue # Mn       DIVES AKURU VIRAMA\n1193F         ; XID_Continue # Lo       DIVES AKURU PREFIXED NASAL SIGN\n11940         ; XID_Continue # Mc       DIVES AKURU MEDIAL YA\n11941         ; XID_Continue # Lo       DIVES AKURU INITIAL RA\n11942         ; XID_Continue # Mc       DIVES AKURU MEDIAL RA\n11943         ; XID_Continue # Mn       DIVES AKURU SIGN NUKTA\n11950..11959  ; XID_Continue # Nd  [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE\n119A0..119A7  ; XID_Continue # Lo   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR\n119AA..119D0  ; XID_Continue # Lo  [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA\n119D1..119D3  ; XID_Continue # Mc   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II\n119D4..119D7  ; XID_Continue # Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR\n119DA..119DB  ; XID_Continue # Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI\n119DC..119DF  ; XID_Continue # Mc   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA\n119E0         ; XID_Continue # Mn       NANDINAGARI SIGN VIRAMA\n119E1         ; XID_Continue # Lo       NANDINAGARI SIGN AVAGRAHA\n119E3         ; XID_Continue # Lo       NANDINAGARI HEADSTROKE\n119E4         ; XID_Continue # Mc       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E\n11A00         ; XID_Continue # Lo       ZANABAZAR SQUARE LETTER A\n11A01..11A0A  ; XID_Continue # Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n11A0B..11A32  ; XID_Continue # Lo  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA\n11A33..11A38  ; XID_Continue # Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\n11A39         ; XID_Continue # Mc       ZANABAZAR SQUARE SIGN VISARGA\n11A3A         ; XID_Continue # Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\n11A3B..11A3E  ; XID_Continue # Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n11A47         ; XID_Continue # Mn       ZANABAZAR SQUARE SUBJOINER\n11A50         ; XID_Continue # Lo       SOYOMBO LETTER A\n11A51..11A56  ; XID_Continue # Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n11A57..11A58  ; XID_Continue # Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\n11A59..11A5B  ; XID_Continue # Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n11A5C..11A89  ; XID_Continue # Lo  [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA\n11A8A..11A96  ; XID_Continue # Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n11A97         ; XID_Continue # Mc       SOYOMBO SIGN VISARGA\n11A98..11A99  ; XID_Continue # Mn   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER\n11A9D         ; XID_Continue # Lo       SOYOMBO MARK PLUTA\n11AB0..11AF8  ; XID_Continue # Lo  [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL\n11B60         ; XID_Continue # Mn       SHARADA VOWEL SIGN OE\n11B61         ; XID_Continue # Mc       SHARADA VOWEL SIGN OOE\n11B62..11B64  ; XID_Continue # Mn   [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E\n11B65         ; XID_Continue # Mc       SHARADA VOWEL SIGN SHORT O\n11B66         ; XID_Continue # Mn       SHARADA VOWEL SIGN CANDRA E\n11B67         ; XID_Continue # Mc       SHARADA VOWEL SIGN CANDRA O\n11BC0..11BE0  ; XID_Continue # Lo  [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO\n11BF0..11BF9  ; XID_Continue # Nd  [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE\n11C00..11C08  ; XID_Continue # Lo   [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L\n11C0A..11C2E  ; XID_Continue # Lo  [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA\n11C2F         ; XID_Continue # Mc       BHAIKSUKI VOWEL SIGN AA\n11C30..11C36  ; XID_Continue # Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n11C38..11C3D  ; XID_Continue # Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n11C3E         ; XID_Continue # Mc       BHAIKSUKI SIGN VISARGA\n11C3F         ; XID_Continue # Mn       BHAIKSUKI SIGN VIRAMA\n11C40         ; XID_Continue # Lo       BHAIKSUKI SIGN AVAGRAHA\n11C50..11C59  ; XID_Continue # Nd  [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE\n11C72..11C8F  ; XID_Continue # Lo  [30] MARCHEN LETTER KA..MARCHEN LETTER A\n11C92..11CA7  ; XID_Continue # Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n11CA9         ; XID_Continue # Mc       MARCHEN SUBJOINED LETTER YA\n11CAA..11CB0  ; XID_Continue # Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n11CB1         ; XID_Continue # Mc       MARCHEN VOWEL SIGN I\n11CB2..11CB3  ; XID_Continue # Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n11CB4         ; XID_Continue # Mc       MARCHEN VOWEL SIGN O\n11CB5..11CB6  ; XID_Continue # Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n11D00..11D06  ; XID_Continue # Lo   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E\n11D08..11D09  ; XID_Continue # Lo   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O\n11D0B..11D30  ; XID_Continue # Lo  [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA\n11D31..11D36  ; XID_Continue # Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n11D3A         ; XID_Continue # Mn       MASARAM GONDI VOWEL SIGN E\n11D3C..11D3D  ; XID_Continue # Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n11D3F..11D45  ; XID_Continue # Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\n11D46         ; XID_Continue # Lo       MASARAM GONDI REPHA\n11D47         ; XID_Continue # Mn       MASARAM GONDI RA-KARA\n11D50..11D59  ; XID_Continue # Nd  [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE\n11D60..11D65  ; XID_Continue # Lo   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU\n11D67..11D68  ; XID_Continue # Lo   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI\n11D6A..11D89  ; XID_Continue # Lo  [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA\n11D8A..11D8E  ; XID_Continue # Mc   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU\n11D90..11D91  ; XID_Continue # Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI\n11D93..11D94  ; XID_Continue # Mc   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU\n11D95         ; XID_Continue # Mn       GUNJALA GONDI SIGN ANUSVARA\n11D96         ; XID_Continue # Mc       GUNJALA GONDI SIGN VISARGA\n11D97         ; XID_Continue # Mn       GUNJALA GONDI VIRAMA\n11D98         ; XID_Continue # Lo       GUNJALA GONDI OM\n11DA0..11DA9  ; XID_Continue # Nd  [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE\n11DB0..11DD8  ; XID_Continue # Lo  [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH\n11DD9         ; XID_Continue # Lm       TOLONG SIKI SIGN SELA\n11DDA..11DDB  ; XID_Continue # Lo   [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA\n11DE0..11DE9  ; XID_Continue # Nd  [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE\n11EE0..11EF2  ; XID_Continue # Lo  [19] MAKASAR LETTER KA..MAKASAR ANGKA\n11EF3..11EF4  ; XID_Continue # Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U\n11EF5..11EF6  ; XID_Continue # Mc   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O\n11F00..11F01  ; XID_Continue # Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA\n11F02         ; XID_Continue # Lo       KAWI SIGN REPHA\n11F03         ; XID_Continue # Mc       KAWI SIGN VISARGA\n11F04..11F10  ; XID_Continue # Lo  [13] KAWI LETTER A..KAWI LETTER O\n11F12..11F33  ; XID_Continue # Lo  [34] KAWI LETTER KA..KAWI LETTER JNYA\n11F34..11F35  ; XID_Continue # Mc   [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA\n11F36..11F3A  ; XID_Continue # Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R\n11F3E..11F3F  ; XID_Continue # Mc   [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI\n11F40         ; XID_Continue # Mn       KAWI VOWEL SIGN EU\n11F41         ; XID_Continue # Mc       KAWI SIGN KILLER\n11F42         ; XID_Continue # Mn       KAWI CONJOINER\n11F50..11F59  ; XID_Continue # Nd  [10] KAWI DIGIT ZERO..KAWI DIGIT NINE\n11F5A         ; XID_Continue # Mn       KAWI SIGN NUKTA\n11FB0         ; XID_Continue # Lo       LISU LETTER YHA\n12000..12399  ; XID_Continue # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U\n12400..1246E  ; XID_Continue # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM\n12480..12543  ; XID_Continue # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU\n12F90..12FF0  ; XID_Continue # Lo  [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114\n13000..1342F  ; XID_Continue # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D\n13440         ; XID_Continue # Mn       EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY\n13441..13446  ; XID_Continue # Lo   [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN\n13447..13455  ; XID_Continue # Mn  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED\n13460..143FA  ; XID_Continue # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA\n14400..14646  ; XID_Continue # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530\n16100..1611D  ; XID_Continue # Lo  [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA\n1611E..16129  ; XID_Continue # Mn  [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK\n1612A..1612C  ; XID_Continue # Mc   [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA\n1612D..1612F  ; XID_Continue # Mn   [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA\n16130..16139  ; XID_Continue # Nd  [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE\n16800..16A38  ; XID_Continue # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ\n16A40..16A5E  ; XID_Continue # Lo  [31] MRO LETTER TA..MRO LETTER TEK\n16A60..16A69  ; XID_Continue # Nd  [10] MRO DIGIT ZERO..MRO DIGIT NINE\n16A70..16ABE  ; XID_Continue # Lo  [79] TANGSA LETTER OZ..TANGSA LETTER ZA\n16AC0..16AC9  ; XID_Continue # Nd  [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE\n16AD0..16AED  ; XID_Continue # Lo  [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I\n16AF0..16AF4  ; XID_Continue # Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\n16B00..16B2F  ; XID_Continue # Lo  [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU\n16B30..16B36  ; XID_Continue # Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\n16B40..16B43  ; XID_Continue # Lm   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM\n16B50..16B59  ; XID_Continue # Nd  [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE\n16B63..16B77  ; XID_Continue # Lo  [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS\n16B7D..16B8F  ; XID_Continue # Lo  [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ\n16D40..16D42  ; XID_Continue # Lm   [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA\n16D43..16D6A  ; XID_Continue # Lo  [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU\n16D6B..16D6C  ; XID_Continue # Lm   [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT\n16D70..16D79  ; XID_Continue # Nd  [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE\n16E40..16E7F  ; XID_Continue # L&  [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16EA0..16EB8  ; XID_Continue # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n16EBB..16ED3  ; XID_Continue # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n16F00..16F4A  ; XID_Continue # Lo  [75] MIAO LETTER PA..MIAO LETTER RTE\n16F4F         ; XID_Continue # Mn       MIAO SIGN CONSONANT MODIFIER BAR\n16F50         ; XID_Continue # Lo       MIAO LETTER NASALIZATION\n16F51..16F87  ; XID_Continue # Mc  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI\n16F8F..16F92  ; XID_Continue # Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n16F93..16F9F  ; XID_Continue # Lm  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8\n16FE0..16FE1  ; XID_Continue # Lm   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK\n16FE3         ; XID_Continue # Lm       OLD CHINESE ITERATION MARK\n16FE4         ; XID_Continue # Mn       KHITAN SMALL SCRIPT FILLER\n16FF0..16FF1  ; XID_Continue # Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY\n16FF2..16FF3  ; XID_Continue # Lm   [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER\n16FF4..16FF6  ; XID_Continue # Nl   [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS\n17000..18CD5  ; XID_Continue # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5\n18CFF..18D1E  ; XID_Continue # Lo  [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E\n18D80..18DF2  ; XID_Continue # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883\n1AFF0..1AFF3  ; XID_Continue # Lm   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5\n1AFF5..1AFFB  ; XID_Continue # Lm   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5\n1AFFD..1AFFE  ; XID_Continue # Lm   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8\n1B000..1B122  ; XID_Continue # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU\n1B132         ; XID_Continue # Lo       HIRAGANA LETTER SMALL KO\n1B150..1B152  ; XID_Continue # Lo   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO\n1B155         ; XID_Continue # Lo       KATAKANA LETTER SMALL KO\n1B164..1B167  ; XID_Continue # Lo   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N\n1B170..1B2FB  ; XID_Continue # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB\n1BC00..1BC6A  ; XID_Continue # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M\n1BC70..1BC7C  ; XID_Continue # Lo  [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK\n1BC80..1BC88  ; XID_Continue # Lo   [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL\n1BC90..1BC99  ; XID_Continue # Lo  [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW\n1BC9D..1BC9E  ; XID_Continue # Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\n1CCF0..1CCF9  ; XID_Continue # Nd  [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE\n1CF00..1CF2D  ; XID_Continue # Mn  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT\n1CF30..1CF46  ; XID_Continue # Mn  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG\n1D165..1D166  ; XID_Continue # Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\n1D167..1D169  ; XID_Continue # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\n1D16D..1D172  ; XID_Continue # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5\n1D17B..1D182  ; XID_Continue # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\n1D185..1D18B  ; XID_Continue # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\n1D1AA..1D1AD  ; XID_Continue # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\n1D242..1D244  ; XID_Continue # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\n1D400..1D454  ; XID_Continue # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D49C  ; XID_Continue # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; XID_Continue # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; XID_Continue # L&       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; XID_Continue # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; XID_Continue # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B9  ; XID_Continue # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; XID_Continue # L&       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; XID_Continue # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D505  ; XID_Continue # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; XID_Continue # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; XID_Continue # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; XID_Continue # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D51E..1D539  ; XID_Continue # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; XID_Continue # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; XID_Continue # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; XID_Continue # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; XID_Continue # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D552..1D6A5  ; XID_Continue # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6A8..1D6C0  ; XID_Continue # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6C2..1D6DA  ; XID_Continue # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DC..1D6FA  ; XID_Continue # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D6FC..1D714  ; XID_Continue # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D716..1D734  ; XID_Continue # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D736..1D74E  ; XID_Continue # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D750..1D76E  ; XID_Continue # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D770..1D788  ; XID_Continue # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D78A..1D7A8  ; XID_Continue # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7AA..1D7C2  ; XID_Continue # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C4..1D7CB  ; XID_Continue # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA\n1D7CE..1D7FF  ; XID_Continue # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE\n1DA00..1DA36  ; XID_Continue # Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\n1DA3B..1DA6C  ; XID_Continue # Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\n1DA75         ; XID_Continue # Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\n1DA84         ; XID_Continue # Mn       SIGNWRITING LOCATION HEAD NECK\n1DA9B..1DA9F  ; XID_Continue # Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\n1DAA1..1DAAF  ; XID_Continue # Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\n1DF00..1DF09  ; XID_Continue # L&  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK\n1DF0A         ; XID_Continue # Lo       LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK\n1DF0B..1DF1E  ; XID_Continue # L&  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL\n1DF25..1DF2A  ; XID_Continue # L&   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK\n1E000..1E006  ; XID_Continue # Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n1E008..1E018  ; XID_Continue # Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n1E01B..1E021  ; XID_Continue # Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n1E023..1E024  ; XID_Continue # Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n1E026..1E02A  ; XID_Continue # Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n1E030..1E06D  ; XID_Continue # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E08F         ; XID_Continue # Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n1E100..1E12C  ; XID_Continue # Lo  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W\n1E130..1E136  ; XID_Continue # Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D\n1E137..1E13D  ; XID_Continue # Lm   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER\n1E140..1E149  ; XID_Continue # Nd  [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE\n1E14E         ; XID_Continue # Lo       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ\n1E290..1E2AD  ; XID_Continue # Lo  [30] TOTO LETTER PA..TOTO LETTER A\n1E2AE         ; XID_Continue # Mn       TOTO SIGN RISING TONE\n1E2C0..1E2EB  ; XID_Continue # Lo  [44] WANCHO LETTER AA..WANCHO LETTER YIH\n1E2EC..1E2EF  ; XID_Continue # Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI\n1E2F0..1E2F9  ; XID_Continue # Nd  [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE\n1E4D0..1E4EA  ; XID_Continue # Lo  [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL\n1E4EB         ; XID_Continue # Lm       NAG MUNDARI SIGN OJOD\n1E4EC..1E4EF  ; XID_Continue # Mn   [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH\n1E4F0..1E4F9  ; XID_Continue # Nd  [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE\n1E5D0..1E5ED  ; XID_Continue # Lo  [30] OL ONAL LETTER O..OL ONAL LETTER EG\n1E5EE..1E5EF  ; XID_Continue # Mn   [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR\n1E5F0         ; XID_Continue # Lo       OL ONAL SIGN HODDOND\n1E5F1..1E5FA  ; XID_Continue # Nd  [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE\n1E6C0..1E6DE  ; XID_Continue # Lo  [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO\n1E6E0..1E6E2  ; XID_Continue # Lo   [3] TAI YO LETTER AA..TAI YO LETTER UE\n1E6E3         ; XID_Continue # Mn       TAI YO SIGN UE\n1E6E4..1E6E5  ; XID_Continue # Lo   [2] TAI YO LETTER U..TAI YO LETTER AE\n1E6E6         ; XID_Continue # Mn       TAI YO SIGN AU\n1E6E7..1E6ED  ; XID_Continue # Lo   [7] TAI YO LETTER O..TAI YO LETTER AUE\n1E6EE..1E6EF  ; XID_Continue # Mn   [2] TAI YO SIGN AY..TAI YO SIGN ANG\n1E6F0..1E6F4  ; XID_Continue # Lo   [5] TAI YO LETTER AN..TAI YO LETTER AP\n1E6F5         ; XID_Continue # Mn       TAI YO SIGN OM\n1E6FE         ; XID_Continue # Lo       TAI YO SYMBOL MUEANG\n1E6FF         ; XID_Continue # Lm       TAI YO XAM LAI\n1E7E0..1E7E6  ; XID_Continue # Lo   [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO\n1E7E8..1E7EB  ; XID_Continue # Lo   [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE\n1E7ED..1E7EE  ; XID_Continue # Lo   [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE\n1E7F0..1E7FE  ; XID_Continue # Lo  [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE\n1E800..1E8C4  ; XID_Continue # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON\n1E8D0..1E8D6  ; XID_Continue # Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\n1E900..1E943  ; XID_Continue # L&  [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA\n1E944..1E94A  ; XID_Continue # Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\n1E94B         ; XID_Continue # Lm       ADLAM NASALIZATION MARK\n1E950..1E959  ; XID_Continue # Nd  [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE\n1EE00..1EE03  ; XID_Continue # Lo   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL\n1EE05..1EE1F  ; XID_Continue # Lo  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF\n1EE21..1EE22  ; XID_Continue # Lo   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM\n1EE24         ; XID_Continue # Lo       ARABIC MATHEMATICAL INITIAL HEH\n1EE27         ; XID_Continue # Lo       ARABIC MATHEMATICAL INITIAL HAH\n1EE29..1EE32  ; XID_Continue # Lo  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF\n1EE34..1EE37  ; XID_Continue # Lo   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH\n1EE39         ; XID_Continue # Lo       ARABIC MATHEMATICAL INITIAL DAD\n1EE3B         ; XID_Continue # Lo       ARABIC MATHEMATICAL INITIAL GHAIN\n1EE42         ; XID_Continue # Lo       ARABIC MATHEMATICAL TAILED JEEM\n1EE47         ; XID_Continue # Lo       ARABIC MATHEMATICAL TAILED HAH\n1EE49         ; XID_Continue # Lo       ARABIC MATHEMATICAL TAILED YEH\n1EE4B         ; XID_Continue # Lo       ARABIC MATHEMATICAL TAILED LAM\n1EE4D..1EE4F  ; XID_Continue # Lo   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN\n1EE51..1EE52  ; XID_Continue # Lo   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF\n1EE54         ; XID_Continue # Lo       ARABIC MATHEMATICAL TAILED SHEEN\n1EE57         ; XID_Continue # Lo       ARABIC MATHEMATICAL TAILED KHAH\n1EE59         ; XID_Continue # Lo       ARABIC MATHEMATICAL TAILED DAD\n1EE5B         ; XID_Continue # Lo       ARABIC MATHEMATICAL TAILED GHAIN\n1EE5D         ; XID_Continue # Lo       ARABIC MATHEMATICAL TAILED DOTLESS NOON\n1EE5F         ; XID_Continue # Lo       ARABIC MATHEMATICAL TAILED DOTLESS QAF\n1EE61..1EE62  ; XID_Continue # Lo   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM\n1EE64         ; XID_Continue # Lo       ARABIC MATHEMATICAL STRETCHED HEH\n1EE67..1EE6A  ; XID_Continue # Lo   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF\n1EE6C..1EE72  ; XID_Continue # Lo   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF\n1EE74..1EE77  ; XID_Continue # Lo   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH\n1EE79..1EE7C  ; XID_Continue # Lo   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH\n1EE7E         ; XID_Continue # Lo       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH\n1EE80..1EE89  ; XID_Continue # Lo  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH\n1EE8B..1EE9B  ; XID_Continue # Lo  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN\n1EEA1..1EEA3  ; XID_Continue # Lo   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL\n1EEA5..1EEA9  ; XID_Continue # Lo   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH\n1EEAB..1EEBB  ; XID_Continue # Lo  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN\n1FBF0..1FBF9  ; XID_Continue # Nd  [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE\n20000..2A6DF  ; XID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF\n2A700..2B81D  ; XID_Continue # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D\n2B820..2CEAD  ; XID_Continue # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD\n2CEB0..2EBE0  ; XID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0\n2EBF0..2EE5D  ; XID_Continue # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D\n2F800..2FA1D  ; XID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D\n30000..3134A  ; XID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A\n31350..33479  ; XID_Continue # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479\nE0100..E01EF  ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\n\n# Total code points: 149221\n\n# ================================================\n\n# Derived Property: Default_Ignorable_Code_Point\n#  Generated from\n#    Other_Default_Ignorable_Code_Point\n#  + Cf (Format characters)\n#  + Variation_Selector\n#  - White_Space\n#  - FFF9..FFFB (Interlinear annotation format characters)\n#  - 13430..13440 (Egyptian hieroglyph format characters)\n#  - Prepended_Concatenation_Mark (Exceptional format characters that should be visible)\n#\n# There are currently no stability guarantees for DICP. However, the\n# values of DICP interact with the derivation of XID_Continue\n# and NFKC_CF, for which there are stability guarantees.\n# Maintainers of this property should note that in the\n# unlikely case that the DICP value changes for an existing character\n# which is also XID_Continue=Yes, then exceptions must be put\n# in place to ensure that the NFKC_CF mapping value for that\n# existing character does not change.\n\n00AD          ; Default_Ignorable_Code_Point # Cf       SOFT HYPHEN\n034F          ; Default_Ignorable_Code_Point # Mn       COMBINING GRAPHEME JOINER\n061C          ; Default_Ignorable_Code_Point # Cf       ARABIC LETTER MARK\n115F..1160    ; Default_Ignorable_Code_Point # Lo   [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER\n17B4..17B5    ; Default_Ignorable_Code_Point # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n180B..180D    ; Default_Ignorable_Code_Point # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n180E          ; Default_Ignorable_Code_Point # Cf       MONGOLIAN VOWEL SEPARATOR\n180F          ; Default_Ignorable_Code_Point # Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR\n200B..200F    ; Default_Ignorable_Code_Point # Cf   [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK\n202A..202E    ; Default_Ignorable_Code_Point # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE\n2060..2064    ; Default_Ignorable_Code_Point # Cf   [5] WORD JOINER..INVISIBLE PLUS\n2065          ; Default_Ignorable_Code_Point # Cn       <reserved-2065>\n2066..206F    ; Default_Ignorable_Code_Point # Cf  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES\n3164          ; Default_Ignorable_Code_Point # Lo       HANGUL FILLER\nFE00..FE0F    ; Default_Ignorable_Code_Point # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\nFEFF          ; Default_Ignorable_Code_Point # Cf       ZERO WIDTH NO-BREAK SPACE\nFFA0          ; Default_Ignorable_Code_Point # Lo       HALFWIDTH HANGUL FILLER\nFFF0..FFF8    ; Default_Ignorable_Code_Point # Cn   [9] <reserved-FFF0>..<reserved-FFF8>\n1BCA0..1BCA3  ; Default_Ignorable_Code_Point # Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP\n1D173..1D17A  ; Default_Ignorable_Code_Point # Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE\nE0000         ; Default_Ignorable_Code_Point # Cn       <reserved-E0000>\nE0001         ; Default_Ignorable_Code_Point # Cf       LANGUAGE TAG\nE0002..E001F  ; Default_Ignorable_Code_Point # Cn  [30] <reserved-E0002>..<reserved-E001F>\nE0020..E007F  ; Default_Ignorable_Code_Point # Cf  [96] TAG SPACE..CANCEL TAG\nE0080..E00FF  ; Default_Ignorable_Code_Point # Cn [128] <reserved-E0080>..<reserved-E00FF>\nE0100..E01EF  ; Default_Ignorable_Code_Point # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\nE01F0..E0FFF  ; Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>\n\n# Total code points: 4174\n\n# ================================================\n\n# Derived Property: Grapheme_Extend\n#  Generated from: Me + Mn + Other_Grapheme_Extend\n#  Note: depending on an application's interpretation of Co (private use),\n#  they may be either in Grapheme_Base, or in Grapheme_Extend, or in neither.\n\n0300..036F    ; Grapheme_Extend # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\n0483..0487    ; Grapheme_Extend # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\n0488..0489    ; Grapheme_Extend # Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN\n0591..05BD    ; Grapheme_Extend # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\n05BF          ; Grapheme_Extend # Mn       HEBREW POINT RAFE\n05C1..05C2    ; Grapheme_Extend # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n05C4..05C5    ; Grapheme_Extend # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n05C7          ; Grapheme_Extend # Mn       HEBREW POINT QAMATS QATAN\n0610..061A    ; Grapheme_Extend # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n064B..065F    ; Grapheme_Extend # Mn  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW\n0670          ; Grapheme_Extend # Mn       ARABIC LETTER SUPERSCRIPT ALEF\n06D6..06DC    ; Grapheme_Extend # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n06DF..06E4    ; Grapheme_Extend # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\n06E7..06E8    ; Grapheme_Extend # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n06EA..06ED    ; Grapheme_Extend # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\n0711          ; Grapheme_Extend # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH\n0730..074A    ; Grapheme_Extend # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\n07A6..07B0    ; Grapheme_Extend # Mn  [11] THAANA ABAFILI..THAANA SUKUN\n07EB..07F3    ; Grapheme_Extend # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\n07FD          ; Grapheme_Extend # Mn       NKO DANTAYALAN\n0816..0819    ; Grapheme_Extend # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\n081B..0823    ; Grapheme_Extend # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n0825..0827    ; Grapheme_Extend # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n0829..082D    ; Grapheme_Extend # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\n0859..085B    ; Grapheme_Extend # Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\n0897..089F    ; Grapheme_Extend # Mn   [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA\n08CA..08E1    ; Grapheme_Extend # Mn  [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA\n08E3..0902    ; Grapheme_Extend # Mn  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA\n093A          ; Grapheme_Extend # Mn       DEVANAGARI VOWEL SIGN OE\n093C          ; Grapheme_Extend # Mn       DEVANAGARI SIGN NUKTA\n0941..0948    ; Grapheme_Extend # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n094D          ; Grapheme_Extend # Mn       DEVANAGARI SIGN VIRAMA\n0951..0957    ; Grapheme_Extend # Mn   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE\n0962..0963    ; Grapheme_Extend # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n0981          ; Grapheme_Extend # Mn       BENGALI SIGN CANDRABINDU\n09BC          ; Grapheme_Extend # Mn       BENGALI SIGN NUKTA\n09BE          ; Grapheme_Extend # Mc       BENGALI VOWEL SIGN AA\n09C1..09C4    ; Grapheme_Extend # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n09CD          ; Grapheme_Extend # Mn       BENGALI SIGN VIRAMA\n09D7          ; Grapheme_Extend # Mc       BENGALI AU LENGTH MARK\n09E2..09E3    ; Grapheme_Extend # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n09FE          ; Grapheme_Extend # Mn       BENGALI SANDHI MARK\n0A01..0A02    ; Grapheme_Extend # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n0A3C          ; Grapheme_Extend # Mn       GURMUKHI SIGN NUKTA\n0A41..0A42    ; Grapheme_Extend # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n0A47..0A48    ; Grapheme_Extend # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n0A4B..0A4D    ; Grapheme_Extend # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\n0A51          ; Grapheme_Extend # Mn       GURMUKHI SIGN UDAAT\n0A70..0A71    ; Grapheme_Extend # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n0A75          ; Grapheme_Extend # Mn       GURMUKHI SIGN YAKASH\n0A81..0A82    ; Grapheme_Extend # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n0ABC          ; Grapheme_Extend # Mn       GUJARATI SIGN NUKTA\n0AC1..0AC5    ; Grapheme_Extend # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n0AC7..0AC8    ; Grapheme_Extend # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n0ACD          ; Grapheme_Extend # Mn       GUJARATI SIGN VIRAMA\n0AE2..0AE3    ; Grapheme_Extend # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n0AFA..0AFF    ; Grapheme_Extend # Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\n0B01          ; Grapheme_Extend # Mn       ORIYA SIGN CANDRABINDU\n0B3C          ; Grapheme_Extend # Mn       ORIYA SIGN NUKTA\n0B3E          ; Grapheme_Extend # Mc       ORIYA VOWEL SIGN AA\n0B3F          ; Grapheme_Extend # Mn       ORIYA VOWEL SIGN I\n0B41..0B44    ; Grapheme_Extend # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n0B4D          ; Grapheme_Extend # Mn       ORIYA SIGN VIRAMA\n0B55..0B56    ; Grapheme_Extend # Mn   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK\n0B57          ; Grapheme_Extend # Mc       ORIYA AU LENGTH MARK\n0B62..0B63    ; Grapheme_Extend # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n0B82          ; Grapheme_Extend # Mn       TAMIL SIGN ANUSVARA\n0BBE          ; Grapheme_Extend # Mc       TAMIL VOWEL SIGN AA\n0BC0          ; Grapheme_Extend # Mn       TAMIL VOWEL SIGN II\n0BCD          ; Grapheme_Extend # Mn       TAMIL SIGN VIRAMA\n0BD7          ; Grapheme_Extend # Mc       TAMIL AU LENGTH MARK\n0C00          ; Grapheme_Extend # Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE\n0C04          ; Grapheme_Extend # Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE\n0C3C          ; Grapheme_Extend # Mn       TELUGU SIGN NUKTA\n0C3E..0C40    ; Grapheme_Extend # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n0C46..0C48    ; Grapheme_Extend # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n0C4A..0C4D    ; Grapheme_Extend # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA\n0C55..0C56    ; Grapheme_Extend # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n0C62..0C63    ; Grapheme_Extend # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n0C81          ; Grapheme_Extend # Mn       KANNADA SIGN CANDRABINDU\n0CBC          ; Grapheme_Extend # Mn       KANNADA SIGN NUKTA\n0CBF          ; Grapheme_Extend # Mn       KANNADA VOWEL SIGN I\n0CC0          ; Grapheme_Extend # Mc       KANNADA VOWEL SIGN II\n0CC2          ; Grapheme_Extend # Mc       KANNADA VOWEL SIGN UU\n0CC6          ; Grapheme_Extend # Mn       KANNADA VOWEL SIGN E\n0CC7..0CC8    ; Grapheme_Extend # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n0CCA..0CCB    ; Grapheme_Extend # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n0CCC..0CCD    ; Grapheme_Extend # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\n0CD5..0CD6    ; Grapheme_Extend # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n0CE2..0CE3    ; Grapheme_Extend # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n0D00..0D01    ; Grapheme_Extend # Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n0D3B..0D3C    ; Grapheme_Extend # Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n0D3E          ; Grapheme_Extend # Mc       MALAYALAM VOWEL SIGN AA\n0D41..0D44    ; Grapheme_Extend # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n0D4D          ; Grapheme_Extend # Mn       MALAYALAM SIGN VIRAMA\n0D57          ; Grapheme_Extend # Mc       MALAYALAM AU LENGTH MARK\n0D62..0D63    ; Grapheme_Extend # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n0D81          ; Grapheme_Extend # Mn       SINHALA SIGN CANDRABINDU\n0DCA          ; Grapheme_Extend # Mn       SINHALA SIGN AL-LAKUNA\n0DCF          ; Grapheme_Extend # Mc       SINHALA VOWEL SIGN AELA-PILLA\n0DD2..0DD4    ; Grapheme_Extend # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n0DD6          ; Grapheme_Extend # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA\n0DDF          ; Grapheme_Extend # Mc       SINHALA VOWEL SIGN GAYANUKITTA\n0E31          ; Grapheme_Extend # Mn       THAI CHARACTER MAI HAN-AKAT\n0E34..0E3A    ; Grapheme_Extend # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n0E47..0E4E    ; Grapheme_Extend # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\n0EB1          ; Grapheme_Extend # Mn       LAO VOWEL SIGN MAI KAN\n0EB4..0EBC    ; Grapheme_Extend # Mn   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO\n0EC8..0ECE    ; Grapheme_Extend # Mn   [7] LAO TONE MAI EK..LAO YAMAKKAN\n0F18..0F19    ; Grapheme_Extend # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\n0F35          ; Grapheme_Extend # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA\n0F37          ; Grapheme_Extend # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS\n0F39          ; Grapheme_Extend # Mn       TIBETAN MARK TSA -PHRU\n0F71..0F7E    ; Grapheme_Extend # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n0F80..0F84    ; Grapheme_Extend # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\n0F86..0F87    ; Grapheme_Extend # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\n0F8D..0F97    ; Grapheme_Extend # Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n0F99..0FBC    ; Grapheme_Extend # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n0FC6          ; Grapheme_Extend # Mn       TIBETAN SYMBOL PADMA GDAN\n102D..1030    ; Grapheme_Extend # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n1032..1037    ; Grapheme_Extend # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\n1039..103A    ; Grapheme_Extend # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\n103D..103E    ; Grapheme_Extend # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n1058..1059    ; Grapheme_Extend # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n105E..1060    ; Grapheme_Extend # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n1071..1074    ; Grapheme_Extend # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n1082          ; Grapheme_Extend # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n1085..1086    ; Grapheme_Extend # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n108D          ; Grapheme_Extend # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n109D          ; Grapheme_Extend # Mn       MYANMAR VOWEL SIGN AITON AI\n135D..135F    ; Grapheme_Extend # Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\n1712..1714    ; Grapheme_Extend # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\n1715          ; Grapheme_Extend # Mc       TAGALOG SIGN PAMUDPOD\n1732..1733    ; Grapheme_Extend # Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U\n1734          ; Grapheme_Extend # Mc       HANUNOO SIGN PAMUDPOD\n1752..1753    ; Grapheme_Extend # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n1772..1773    ; Grapheme_Extend # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n17B4..17B5    ; Grapheme_Extend # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n17B7..17BD    ; Grapheme_Extend # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n17C6          ; Grapheme_Extend # Mn       KHMER SIGN NIKAHIT\n17C9..17D3    ; Grapheme_Extend # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\n17DD          ; Grapheme_Extend # Mn       KHMER SIGN ATTHACAN\n180B..180D    ; Grapheme_Extend # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n180F          ; Grapheme_Extend # Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR\n1885..1886    ; Grapheme_Extend # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n18A9          ; Grapheme_Extend # Mn       MONGOLIAN LETTER ALI GALI DAGALGA\n1920..1922    ; Grapheme_Extend # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n1927..1928    ; Grapheme_Extend # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n1932          ; Grapheme_Extend # Mn       LIMBU SMALL LETTER ANUSVARA\n1939..193B    ; Grapheme_Extend # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\n1A17..1A18    ; Grapheme_Extend # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n1A1B          ; Grapheme_Extend # Mn       BUGINESE VOWEL SIGN AE\n1A56          ; Grapheme_Extend # Mn       TAI THAM CONSONANT SIGN MEDIAL LA\n1A58..1A5E    ; Grapheme_Extend # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n1A60          ; Grapheme_Extend # Mn       TAI THAM SIGN SAKOT\n1A62          ; Grapheme_Extend # Mn       TAI THAM VOWEL SIGN MAI SAT\n1A65..1A6C    ; Grapheme_Extend # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n1A73..1A7C    ; Grapheme_Extend # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\n1A7F          ; Grapheme_Extend # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT\n1AB0..1ABD    ; Grapheme_Extend # Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\n1ABE          ; Grapheme_Extend # Me       COMBINING PARENTHESES OVERLAY\n1ABF..1ADD    ; Grapheme_Extend # Mn  [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW\n1AE0..1AEB    ; Grapheme_Extend # Mn  [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE\n1B00..1B03    ; Grapheme_Extend # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n1B34          ; Grapheme_Extend # Mn       BALINESE SIGN REREKAN\n1B35          ; Grapheme_Extend # Mc       BALINESE VOWEL SIGN TEDUNG\n1B36..1B3A    ; Grapheme_Extend # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n1B3B          ; Grapheme_Extend # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG\n1B3C          ; Grapheme_Extend # Mn       BALINESE VOWEL SIGN LA LENGA\n1B3D          ; Grapheme_Extend # Mc       BALINESE VOWEL SIGN LA LENGA TEDUNG\n1B42          ; Grapheme_Extend # Mn       BALINESE VOWEL SIGN PEPET\n1B43..1B44    ; Grapheme_Extend # Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG\n1B6B..1B73    ; Grapheme_Extend # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\n1B80..1B81    ; Grapheme_Extend # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n1BA2..1BA5    ; Grapheme_Extend # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n1BA8..1BA9    ; Grapheme_Extend # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n1BAA          ; Grapheme_Extend # Mc       SUNDANESE SIGN PAMAAEH\n1BAB..1BAD    ; Grapheme_Extend # Mn   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA\n1BE6          ; Grapheme_Extend # Mn       BATAK SIGN TOMPI\n1BE8..1BE9    ; Grapheme_Extend # Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n1BED          ; Grapheme_Extend # Mn       BATAK VOWEL SIGN KARO O\n1BEF..1BF1    ; Grapheme_Extend # Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n1BF2..1BF3    ; Grapheme_Extend # Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN\n1C2C..1C33    ; Grapheme_Extend # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n1C36..1C37    ; Grapheme_Extend # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\n1CD0..1CD2    ; Grapheme_Extend # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\n1CD4..1CE0    ; Grapheme_Extend # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n1CE2..1CE8    ; Grapheme_Extend # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n1CED          ; Grapheme_Extend # Mn       VEDIC SIGN TIRYAK\n1CF4          ; Grapheme_Extend # Mn       VEDIC TONE CANDRA ABOVE\n1CF8..1CF9    ; Grapheme_Extend # Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n1DC0..1DFF    ; Grapheme_Extend # Mn  [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\n200C          ; Grapheme_Extend # Cf       ZERO WIDTH NON-JOINER\n20D0..20DC    ; Grapheme_Extend # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n20DD..20E0    ; Grapheme_Extend # Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH\n20E1          ; Grapheme_Extend # Mn       COMBINING LEFT RIGHT ARROW ABOVE\n20E2..20E4    ; Grapheme_Extend # Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE\n20E5..20F0    ; Grapheme_Extend # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\n2CEF..2CF1    ; Grapheme_Extend # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\n2D7F          ; Grapheme_Extend # Mn       TIFINAGH CONSONANT JOINER\n2DE0..2DFF    ; Grapheme_Extend # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\n302A..302D    ; Grapheme_Extend # Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n302E..302F    ; Grapheme_Extend # Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\n3099..309A    ; Grapheme_Extend # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\nA66F          ; Grapheme_Extend # Mn       COMBINING CYRILLIC VZMET\nA670..A672    ; Grapheme_Extend # Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN\nA674..A67D    ; Grapheme_Extend # Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\nA69E..A69F    ; Grapheme_Extend # Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\nA6F0..A6F1    ; Grapheme_Extend # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\nA802          ; Grapheme_Extend # Mn       SYLOTI NAGRI SIGN DVISVARA\nA806          ; Grapheme_Extend # Mn       SYLOTI NAGRI SIGN HASANTA\nA80B          ; Grapheme_Extend # Mn       SYLOTI NAGRI SIGN ANUSVARA\nA825..A826    ; Grapheme_Extend # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\nA82C          ; Grapheme_Extend # Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA\nA8C4..A8C5    ; Grapheme_Extend # Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\nA8E0..A8F1    ; Grapheme_Extend # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\nA8FF          ; Grapheme_Extend # Mn       DEVANAGARI VOWEL SIGN AY\nA926..A92D    ; Grapheme_Extend # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\nA947..A951    ; Grapheme_Extend # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\nA953          ; Grapheme_Extend # Mc       REJANG VIRAMA\nA980..A982    ; Grapheme_Extend # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\nA9B3          ; Grapheme_Extend # Mn       JAVANESE SIGN CECAK TELU\nA9B6..A9B9    ; Grapheme_Extend # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\nA9BC..A9BD    ; Grapheme_Extend # Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET\nA9C0          ; Grapheme_Extend # Mc       JAVANESE PANGKON\nA9E5          ; Grapheme_Extend # Mn       MYANMAR SIGN SHAN SAW\nAA29..AA2E    ; Grapheme_Extend # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\nAA31..AA32    ; Grapheme_Extend # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\nAA35..AA36    ; Grapheme_Extend # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\nAA43          ; Grapheme_Extend # Mn       CHAM CONSONANT SIGN FINAL NG\nAA4C          ; Grapheme_Extend # Mn       CHAM CONSONANT SIGN FINAL M\nAA7C          ; Grapheme_Extend # Mn       MYANMAR SIGN TAI LAING TONE-2\nAAB0          ; Grapheme_Extend # Mn       TAI VIET MAI KANG\nAAB2..AAB4    ; Grapheme_Extend # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\nAAB7..AAB8    ; Grapheme_Extend # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\nAABE..AABF    ; Grapheme_Extend # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\nAAC1          ; Grapheme_Extend # Mn       TAI VIET TONE MAI THO\nAAEC..AAED    ; Grapheme_Extend # Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\nAAF6          ; Grapheme_Extend # Mn       MEETEI MAYEK VIRAMA\nABE5          ; Grapheme_Extend # Mn       MEETEI MAYEK VOWEL SIGN ANAP\nABE8          ; Grapheme_Extend # Mn       MEETEI MAYEK VOWEL SIGN UNAP\nABED          ; Grapheme_Extend # Mn       MEETEI MAYEK APUN IYEK\nFB1E          ; Grapheme_Extend # Mn       HEBREW POINT JUDEO-SPANISH VARIKA\nFE00..FE0F    ; Grapheme_Extend # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\nFE20..FE2F    ; Grapheme_Extend # Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\nFF9E..FF9F    ; Grapheme_Extend # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\n101FD         ; Grapheme_Extend # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\n102E0         ; Grapheme_Extend # Mn       COPTIC EPACT THOUSANDS MARK\n10376..1037A  ; Grapheme_Extend # Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n10A01..10A03  ; Grapheme_Extend # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n10A05..10A06  ; Grapheme_Extend # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n10A0C..10A0F  ; Grapheme_Extend # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n10A38..10A3A  ; Grapheme_Extend # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\n10A3F         ; Grapheme_Extend # Mn       KHAROSHTHI VIRAMA\n10AE5..10AE6  ; Grapheme_Extend # Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\n10D24..10D27  ; Grapheme_Extend # Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n10D69..10D6D  ; Grapheme_Extend # Mn   [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK\n10EAB..10EAC  ; Grapheme_Extend # Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK\n10EFA..10EFF  ; Grapheme_Extend # Mn   [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA\n10F46..10F50  ; Grapheme_Extend # Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW\n10F82..10F85  ; Grapheme_Extend # Mn   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW\n11001         ; Grapheme_Extend # Mn       BRAHMI SIGN ANUSVARA\n11038..11046  ; Grapheme_Extend # Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\n11070         ; Grapheme_Extend # Mn       BRAHMI SIGN OLD TAMIL VIRAMA\n11073..11074  ; Grapheme_Extend # Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O\n1107F..11081  ; Grapheme_Extend # Mn   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA\n110B3..110B6  ; Grapheme_Extend # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n110B9..110BA  ; Grapheme_Extend # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\n110C2         ; Grapheme_Extend # Mn       KAITHI VOWEL SIGN VOCALIC R\n11100..11102  ; Grapheme_Extend # Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n11127..1112B  ; Grapheme_Extend # Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n1112D..11134  ; Grapheme_Extend # Mn   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA\n11173         ; Grapheme_Extend # Mn       MAHAJANI SIGN NUKTA\n11180..11181  ; Grapheme_Extend # Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n111B6..111BE  ; Grapheme_Extend # Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n111C0         ; Grapheme_Extend # Mc       SHARADA SIGN VIRAMA\n111C9..111CC  ; Grapheme_Extend # Mn   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK\n111CF         ; Grapheme_Extend # Mn       SHARADA SIGN INVERTED CANDRABINDU\n1122F..11231  ; Grapheme_Extend # Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n11234         ; Grapheme_Extend # Mn       KHOJKI SIGN ANUSVARA\n11235         ; Grapheme_Extend # Mc       KHOJKI SIGN VIRAMA\n11236..11237  ; Grapheme_Extend # Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\n1123E         ; Grapheme_Extend # Mn       KHOJKI SIGN SUKUN\n11241         ; Grapheme_Extend # Mn       KHOJKI VOWEL SIGN VOCALIC R\n112DF         ; Grapheme_Extend # Mn       KHUDAWADI SIGN ANUSVARA\n112E3..112EA  ; Grapheme_Extend # Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\n11300..11301  ; Grapheme_Extend # Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n1133B..1133C  ; Grapheme_Extend # Mn   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA\n1133E         ; Grapheme_Extend # Mc       GRANTHA VOWEL SIGN AA\n11340         ; Grapheme_Extend # Mn       GRANTHA VOWEL SIGN II\n1134D         ; Grapheme_Extend # Mc       GRANTHA SIGN VIRAMA\n11357         ; Grapheme_Extend # Mc       GRANTHA AU LENGTH MARK\n11366..1136C  ; Grapheme_Extend # Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\n11370..11374  ; Grapheme_Extend # Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\n113B8         ; Grapheme_Extend # Mc       TULU-TIGALARI VOWEL SIGN AA\n113BB..113C0  ; Grapheme_Extend # Mn   [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL\n113C2         ; Grapheme_Extend # Mc       TULU-TIGALARI VOWEL SIGN EE\n113C5         ; Grapheme_Extend # Mc       TULU-TIGALARI VOWEL SIGN AI\n113C7..113C9  ; Grapheme_Extend # Mc   [3] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI AU LENGTH MARK\n113CE         ; Grapheme_Extend # Mn       TULU-TIGALARI SIGN VIRAMA\n113CF         ; Grapheme_Extend # Mc       TULU-TIGALARI SIGN LOOPED VIRAMA\n113D0         ; Grapheme_Extend # Mn       TULU-TIGALARI CONJOINER\n113D2         ; Grapheme_Extend # Mn       TULU-TIGALARI GEMINATION MARK\n113E1..113E2  ; Grapheme_Extend # Mn   [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA\n11438..1143F  ; Grapheme_Extend # Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n11442..11444  ; Grapheme_Extend # Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\n11446         ; Grapheme_Extend # Mn       NEWA SIGN NUKTA\n1145E         ; Grapheme_Extend # Mn       NEWA SANDHI MARK\n114B0         ; Grapheme_Extend # Mc       TIRHUTA VOWEL SIGN AA\n114B3..114B8  ; Grapheme_Extend # Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n114BA         ; Grapheme_Extend # Mn       TIRHUTA VOWEL SIGN SHORT E\n114BD         ; Grapheme_Extend # Mc       TIRHUTA VOWEL SIGN SHORT O\n114BF..114C0  ; Grapheme_Extend # Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n114C2..114C3  ; Grapheme_Extend # Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\n115AF         ; Grapheme_Extend # Mc       SIDDHAM VOWEL SIGN AA\n115B2..115B5  ; Grapheme_Extend # Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n115BC..115BD  ; Grapheme_Extend # Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n115BF..115C0  ; Grapheme_Extend # Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\n115DC..115DD  ; Grapheme_Extend # Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n11633..1163A  ; Grapheme_Extend # Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n1163D         ; Grapheme_Extend # Mn       MODI SIGN ANUSVARA\n1163F..11640  ; Grapheme_Extend # Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\n116AB         ; Grapheme_Extend # Mn       TAKRI SIGN ANUSVARA\n116AD         ; Grapheme_Extend # Mn       TAKRI VOWEL SIGN AA\n116B0..116B5  ; Grapheme_Extend # Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n116B6         ; Grapheme_Extend # Mc       TAKRI SIGN VIRAMA\n116B7         ; Grapheme_Extend # Mn       TAKRI SIGN NUKTA\n1171D         ; Grapheme_Extend # Mn       AHOM CONSONANT SIGN MEDIAL LA\n1171F         ; Grapheme_Extend # Mn       AHOM CONSONANT SIGN MEDIAL LIGATING RA\n11722..11725  ; Grapheme_Extend # Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n11727..1172B  ; Grapheme_Extend # Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\n1182F..11837  ; Grapheme_Extend # Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA\n11839..1183A  ; Grapheme_Extend # Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA\n11930         ; Grapheme_Extend # Mc       DIVES AKURU VOWEL SIGN AA\n1193B..1193C  ; Grapheme_Extend # Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU\n1193D         ; Grapheme_Extend # Mc       DIVES AKURU SIGN HALANTA\n1193E         ; Grapheme_Extend # Mn       DIVES AKURU VIRAMA\n11943         ; Grapheme_Extend # Mn       DIVES AKURU SIGN NUKTA\n119D4..119D7  ; Grapheme_Extend # Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR\n119DA..119DB  ; Grapheme_Extend # Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI\n119E0         ; Grapheme_Extend # Mn       NANDINAGARI SIGN VIRAMA\n11A01..11A0A  ; Grapheme_Extend # Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n11A33..11A38  ; Grapheme_Extend # Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\n11A3B..11A3E  ; Grapheme_Extend # Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n11A47         ; Grapheme_Extend # Mn       ZANABAZAR SQUARE SUBJOINER\n11A51..11A56  ; Grapheme_Extend # Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n11A59..11A5B  ; Grapheme_Extend # Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n11A8A..11A96  ; Grapheme_Extend # Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n11A98..11A99  ; Grapheme_Extend # Mn   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER\n11B60         ; Grapheme_Extend # Mn       SHARADA VOWEL SIGN OE\n11B62..11B64  ; Grapheme_Extend # Mn   [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E\n11B66         ; Grapheme_Extend # Mn       SHARADA VOWEL SIGN CANDRA E\n11C30..11C36  ; Grapheme_Extend # Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n11C38..11C3D  ; Grapheme_Extend # Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n11C3F         ; Grapheme_Extend # Mn       BHAIKSUKI SIGN VIRAMA\n11C92..11CA7  ; Grapheme_Extend # Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n11CAA..11CB0  ; Grapheme_Extend # Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n11CB2..11CB3  ; Grapheme_Extend # Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n11CB5..11CB6  ; Grapheme_Extend # Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n11D31..11D36  ; Grapheme_Extend # Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n11D3A         ; Grapheme_Extend # Mn       MASARAM GONDI VOWEL SIGN E\n11D3C..11D3D  ; Grapheme_Extend # Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n11D3F..11D45  ; Grapheme_Extend # Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\n11D47         ; Grapheme_Extend # Mn       MASARAM GONDI RA-KARA\n11D90..11D91  ; Grapheme_Extend # Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI\n11D95         ; Grapheme_Extend # Mn       GUNJALA GONDI SIGN ANUSVARA\n11D97         ; Grapheme_Extend # Mn       GUNJALA GONDI VIRAMA\n11EF3..11EF4  ; Grapheme_Extend # Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U\n11F00..11F01  ; Grapheme_Extend # Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA\n11F36..11F3A  ; Grapheme_Extend # Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R\n11F40         ; Grapheme_Extend # Mn       KAWI VOWEL SIGN EU\n11F41         ; Grapheme_Extend # Mc       KAWI SIGN KILLER\n11F42         ; Grapheme_Extend # Mn       KAWI CONJOINER\n11F5A         ; Grapheme_Extend # Mn       KAWI SIGN NUKTA\n13440         ; Grapheme_Extend # Mn       EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY\n13447..13455  ; Grapheme_Extend # Mn  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED\n1611E..16129  ; Grapheme_Extend # Mn  [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK\n1612D..1612F  ; Grapheme_Extend # Mn   [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA\n16AF0..16AF4  ; Grapheme_Extend # Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\n16B30..16B36  ; Grapheme_Extend # Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\n16F4F         ; Grapheme_Extend # Mn       MIAO SIGN CONSONANT MODIFIER BAR\n16F8F..16F92  ; Grapheme_Extend # Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n16FE4         ; Grapheme_Extend # Mn       KHITAN SMALL SCRIPT FILLER\n16FF0..16FF1  ; Grapheme_Extend # Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY\n1BC9D..1BC9E  ; Grapheme_Extend # Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\n1CF00..1CF2D  ; Grapheme_Extend # Mn  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT\n1CF30..1CF46  ; Grapheme_Extend # Mn  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG\n1D165..1D166  ; Grapheme_Extend # Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\n1D167..1D169  ; Grapheme_Extend # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\n1D16D..1D172  ; Grapheme_Extend # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5\n1D17B..1D182  ; Grapheme_Extend # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\n1D185..1D18B  ; Grapheme_Extend # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\n1D1AA..1D1AD  ; Grapheme_Extend # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\n1D242..1D244  ; Grapheme_Extend # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\n1DA00..1DA36  ; Grapheme_Extend # Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\n1DA3B..1DA6C  ; Grapheme_Extend # Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\n1DA75         ; Grapheme_Extend # Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\n1DA84         ; Grapheme_Extend # Mn       SIGNWRITING LOCATION HEAD NECK\n1DA9B..1DA9F  ; Grapheme_Extend # Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\n1DAA1..1DAAF  ; Grapheme_Extend # Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\n1E000..1E006  ; Grapheme_Extend # Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n1E008..1E018  ; Grapheme_Extend # Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n1E01B..1E021  ; Grapheme_Extend # Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n1E023..1E024  ; Grapheme_Extend # Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n1E026..1E02A  ; Grapheme_Extend # Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n1E08F         ; Grapheme_Extend # Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n1E130..1E136  ; Grapheme_Extend # Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D\n1E2AE         ; Grapheme_Extend # Mn       TOTO SIGN RISING TONE\n1E2EC..1E2EF  ; Grapheme_Extend # Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI\n1E4EC..1E4EF  ; Grapheme_Extend # Mn   [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH\n1E5EE..1E5EF  ; Grapheme_Extend # Mn   [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR\n1E6E3         ; Grapheme_Extend # Mn       TAI YO SIGN UE\n1E6E6         ; Grapheme_Extend # Mn       TAI YO SIGN AU\n1E6EE..1E6EF  ; Grapheme_Extend # Mn   [2] TAI YO SIGN AY..TAI YO SIGN ANG\n1E6F5         ; Grapheme_Extend # Mn       TAI YO SIGN OM\n1E8D0..1E8D6  ; Grapheme_Extend # Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\n1E944..1E94A  ; Grapheme_Extend # Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\nE0020..E007F  ; Grapheme_Extend # Cf  [96] TAG SPACE..CANCEL TAG\nE0100..E01EF  ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\n\n# Total code points: 2232\n\n# ================================================\n\n# Derived Property: Grapheme_Base\n#  Generated from: [0..10FFFF] - Cc - Cf - Cs - Co - Cn - Zl - Zp - Grapheme_Extend\n#  Note: depending on an application's interpretation of Co (private use),\n#  they may be either in Grapheme_Base, or in Grapheme_Extend, or in neither.\n\n0020          ; Grapheme_Base # Zs       SPACE\n0021..0023    ; Grapheme_Base # Po   [3] EXCLAMATION MARK..NUMBER SIGN\n0024          ; Grapheme_Base # Sc       DOLLAR SIGN\n0025..0027    ; Grapheme_Base # Po   [3] PERCENT SIGN..APOSTROPHE\n0028          ; Grapheme_Base # Ps       LEFT PARENTHESIS\n0029          ; Grapheme_Base # Pe       RIGHT PARENTHESIS\n002A          ; Grapheme_Base # Po       ASTERISK\n002B          ; Grapheme_Base # Sm       PLUS SIGN\n002C          ; Grapheme_Base # Po       COMMA\n002D          ; Grapheme_Base # Pd       HYPHEN-MINUS\n002E..002F    ; Grapheme_Base # Po   [2] FULL STOP..SOLIDUS\n0030..0039    ; Grapheme_Base # Nd  [10] DIGIT ZERO..DIGIT NINE\n003A..003B    ; Grapheme_Base # Po   [2] COLON..SEMICOLON\n003C..003E    ; Grapheme_Base # Sm   [3] LESS-THAN SIGN..GREATER-THAN SIGN\n003F..0040    ; Grapheme_Base # Po   [2] QUESTION MARK..COMMERCIAL AT\n0041..005A    ; Grapheme_Base # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n005B          ; Grapheme_Base # Ps       LEFT SQUARE BRACKET\n005C          ; Grapheme_Base # Po       REVERSE SOLIDUS\n005D          ; Grapheme_Base # Pe       RIGHT SQUARE BRACKET\n005E          ; Grapheme_Base # Sk       CIRCUMFLEX ACCENT\n005F          ; Grapheme_Base # Pc       LOW LINE\n0060          ; Grapheme_Base # Sk       GRAVE ACCENT\n0061..007A    ; Grapheme_Base # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n007B          ; Grapheme_Base # Ps       LEFT CURLY BRACKET\n007C          ; Grapheme_Base # Sm       VERTICAL LINE\n007D          ; Grapheme_Base # Pe       RIGHT CURLY BRACKET\n007E          ; Grapheme_Base # Sm       TILDE\n00A0          ; Grapheme_Base # Zs       NO-BREAK SPACE\n00A1          ; Grapheme_Base # Po       INVERTED EXCLAMATION MARK\n00A2..00A5    ; Grapheme_Base # Sc   [4] CENT SIGN..YEN SIGN\n00A6          ; Grapheme_Base # So       BROKEN BAR\n00A7          ; Grapheme_Base # Po       SECTION SIGN\n00A8          ; Grapheme_Base # Sk       DIAERESIS\n00A9          ; Grapheme_Base # So       COPYRIGHT SIGN\n00AA          ; Grapheme_Base # Lo       FEMININE ORDINAL INDICATOR\n00AB          ; Grapheme_Base # Pi       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\n00AC          ; Grapheme_Base # Sm       NOT SIGN\n00AE          ; Grapheme_Base # So       REGISTERED SIGN\n00AF          ; Grapheme_Base # Sk       MACRON\n00B0          ; Grapheme_Base # So       DEGREE SIGN\n00B1          ; Grapheme_Base # Sm       PLUS-MINUS SIGN\n00B2..00B3    ; Grapheme_Base # No   [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE\n00B4          ; Grapheme_Base # Sk       ACUTE ACCENT\n00B5          ; Grapheme_Base # L&       MICRO SIGN\n00B6..00B7    ; Grapheme_Base # Po   [2] PILCROW SIGN..MIDDLE DOT\n00B8          ; Grapheme_Base # Sk       CEDILLA\n00B9          ; Grapheme_Base # No       SUPERSCRIPT ONE\n00BA          ; Grapheme_Base # Lo       MASCULINE ORDINAL INDICATOR\n00BB          ; Grapheme_Base # Pf       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\n00BC..00BE    ; Grapheme_Base # No   [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS\n00BF          ; Grapheme_Base # Po       INVERTED QUESTION MARK\n00C0..00D6    ; Grapheme_Base # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D7          ; Grapheme_Base # Sm       MULTIPLICATION SIGN\n00D8..00F6    ; Grapheme_Base # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS\n00F7          ; Grapheme_Base # Sm       DIVISION SIGN\n00F8..01BA    ; Grapheme_Base # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL\n01BB          ; Grapheme_Base # Lo       LATIN LETTER TWO WITH STROKE\n01BC..01BF    ; Grapheme_Base # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN\n01C0..01C3    ; Grapheme_Base # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK\n01C4..0293    ; Grapheme_Base # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL\n0294..0295    ; Grapheme_Base # Lo   [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE\n0296..02AF    ; Grapheme_Base # L&  [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL\n02B0..02C1    ; Grapheme_Base # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP\n02C2..02C5    ; Grapheme_Base # Sk   [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD\n02C6..02D1    ; Grapheme_Base # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON\n02D2..02DF    ; Grapheme_Base # Sk  [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT\n02E0..02E4    ; Grapheme_Base # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n02E5..02EB    ; Grapheme_Base # Sk   [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK\n02EC          ; Grapheme_Base # Lm       MODIFIER LETTER VOICING\n02ED          ; Grapheme_Base # Sk       MODIFIER LETTER UNASPIRATED\n02EE          ; Grapheme_Base # Lm       MODIFIER LETTER DOUBLE APOSTROPHE\n02EF..02FF    ; Grapheme_Base # Sk  [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW\n0370..0373    ; Grapheme_Base # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI\n0374          ; Grapheme_Base # Lm       GREEK NUMERAL SIGN\n0375          ; Grapheme_Base # Sk       GREEK LOWER NUMERAL SIGN\n0376..0377    ; Grapheme_Base # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037A          ; Grapheme_Base # Lm       GREEK YPOGEGRAMMENI\n037B..037D    ; Grapheme_Base # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n037E          ; Grapheme_Base # Po       GREEK QUESTION MARK\n037F          ; Grapheme_Base # L&       GREEK CAPITAL LETTER YOT\n0384..0385    ; Grapheme_Base # Sk   [2] GREEK TONOS..GREEK DIALYTIKA TONOS\n0386          ; Grapheme_Base # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0387          ; Grapheme_Base # Po       GREEK ANO TELEIA\n0388..038A    ; Grapheme_Base # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; Grapheme_Base # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..03A1    ; Grapheme_Base # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO\n03A3..03F5    ; Grapheme_Base # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL\n03F6          ; Grapheme_Base # Sm       GREEK REVERSED LUNATE EPSILON SYMBOL\n03F7..0481    ; Grapheme_Base # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA\n0482          ; Grapheme_Base # So       CYRILLIC THOUSANDS SIGN\n048A..052F    ; Grapheme_Base # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER\n0531..0556    ; Grapheme_Base # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n0559          ; Grapheme_Base # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING\n055A..055F    ; Grapheme_Base # Po   [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK\n0560..0588    ; Grapheme_Base # L&  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE\n0589          ; Grapheme_Base # Po       ARMENIAN FULL STOP\n058A          ; Grapheme_Base # Pd       ARMENIAN HYPHEN\n058D..058E    ; Grapheme_Base # So   [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN\n058F          ; Grapheme_Base # Sc       ARMENIAN DRAM SIGN\n05BE          ; Grapheme_Base # Pd       HEBREW PUNCTUATION MAQAF\n05C0          ; Grapheme_Base # Po       HEBREW PUNCTUATION PASEQ\n05C3          ; Grapheme_Base # Po       HEBREW PUNCTUATION SOF PASUQ\n05C6          ; Grapheme_Base # Po       HEBREW PUNCTUATION NUN HAFUKHA\n05D0..05EA    ; Grapheme_Base # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV\n05EF..05F2    ; Grapheme_Base # Lo   [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD\n05F3..05F4    ; Grapheme_Base # Po   [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM\n0606..0608    ; Grapheme_Base # Sm   [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY\n0609..060A    ; Grapheme_Base # Po   [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN\n060B          ; Grapheme_Base # Sc       AFGHANI SIGN\n060C..060D    ; Grapheme_Base # Po   [2] ARABIC COMMA..ARABIC DATE SEPARATOR\n060E..060F    ; Grapheme_Base # So   [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA\n061B          ; Grapheme_Base # Po       ARABIC SEMICOLON\n061D..061F    ; Grapheme_Base # Po   [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK\n0620..063F    ; Grapheme_Base # Lo  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE\n0640          ; Grapheme_Base # Lm       ARABIC TATWEEL\n0641..064A    ; Grapheme_Base # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH\n0660..0669    ; Grapheme_Base # Nd  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE\n066A..066D    ; Grapheme_Base # Po   [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR\n066E..066F    ; Grapheme_Base # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF\n0671..06D3    ; Grapheme_Base # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n06D4          ; Grapheme_Base # Po       ARABIC FULL STOP\n06D5          ; Grapheme_Base # Lo       ARABIC LETTER AE\n06DE          ; Grapheme_Base # So       ARABIC START OF RUB EL HIZB\n06E5..06E6    ; Grapheme_Base # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH\n06E9          ; Grapheme_Base # So       ARABIC PLACE OF SAJDAH\n06EE..06EF    ; Grapheme_Base # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V\n06F0..06F9    ; Grapheme_Base # Nd  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE\n06FA..06FC    ; Grapheme_Base # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW\n06FD..06FE    ; Grapheme_Base # So   [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN\n06FF          ; Grapheme_Base # Lo       ARABIC LETTER HEH WITH INVERTED V\n0700..070D    ; Grapheme_Base # Po  [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS\n0710          ; Grapheme_Base # Lo       SYRIAC LETTER ALAPH\n0712..072F    ; Grapheme_Base # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH\n074D..07A5    ; Grapheme_Base # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU\n07B1          ; Grapheme_Base # Lo       THAANA LETTER NAA\n07C0..07C9    ; Grapheme_Base # Nd  [10] NKO DIGIT ZERO..NKO DIGIT NINE\n07CA..07EA    ; Grapheme_Base # Lo  [33] NKO LETTER A..NKO LETTER JONA RA\n07F4..07F5    ; Grapheme_Base # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE\n07F6          ; Grapheme_Base # So       NKO SYMBOL OO DENNEN\n07F7..07F9    ; Grapheme_Base # Po   [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK\n07FA          ; Grapheme_Base # Lm       NKO LAJANYALAN\n07FE..07FF    ; Grapheme_Base # Sc   [2] NKO DOROME SIGN..NKO TAMAN SIGN\n0800..0815    ; Grapheme_Base # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF\n081A          ; Grapheme_Base # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT\n0824          ; Grapheme_Base # Lm       SAMARITAN MODIFIER LETTER SHORT A\n0828          ; Grapheme_Base # Lm       SAMARITAN MODIFIER LETTER I\n0830..083E    ; Grapheme_Base # Po  [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU\n0840..0858    ; Grapheme_Base # Lo  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN\n085E          ; Grapheme_Base # Po       MANDAIC PUNCTUATION\n0860..086A    ; Grapheme_Base # Lo  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA\n0870..0887    ; Grapheme_Base # Lo  [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT\n0888          ; Grapheme_Base # Sk       ARABIC RAISED ROUND DOT\n0889..088F    ; Grapheme_Base # Lo   [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE\n08A0..08C8    ; Grapheme_Base # Lo  [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF\n08C9          ; Grapheme_Base # Lm       ARABIC SMALL FARSI YEH\n0903          ; Grapheme_Base # Mc       DEVANAGARI SIGN VISARGA\n0904..0939    ; Grapheme_Base # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA\n093B          ; Grapheme_Base # Mc       DEVANAGARI VOWEL SIGN OOE\n093D          ; Grapheme_Base # Lo       DEVANAGARI SIGN AVAGRAHA\n093E..0940    ; Grapheme_Base # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\n0949..094C    ; Grapheme_Base # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\n094E..094F    ; Grapheme_Base # Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\n0950          ; Grapheme_Base # Lo       DEVANAGARI OM\n0958..0961    ; Grapheme_Base # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL\n0964..0965    ; Grapheme_Base # Po   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA\n0966..096F    ; Grapheme_Base # Nd  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE\n0970          ; Grapheme_Base # Po       DEVANAGARI ABBREVIATION SIGN\n0971          ; Grapheme_Base # Lm       DEVANAGARI SIGN HIGH SPACING DOT\n0972..0980    ; Grapheme_Base # Lo  [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI\n0982..0983    ; Grapheme_Base # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\n0985..098C    ; Grapheme_Base # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L\n098F..0990    ; Grapheme_Base # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI\n0993..09A8    ; Grapheme_Base # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA\n09AA..09B0    ; Grapheme_Base # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA\n09B2          ; Grapheme_Base # Lo       BENGALI LETTER LA\n09B6..09B9    ; Grapheme_Base # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA\n09BD          ; Grapheme_Base # Lo       BENGALI SIGN AVAGRAHA\n09BF..09C0    ; Grapheme_Base # Mc   [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II\n09C7..09C8    ; Grapheme_Base # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\n09CB..09CC    ; Grapheme_Base # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\n09CE          ; Grapheme_Base # Lo       BENGALI LETTER KHANDA TA\n09DC..09DD    ; Grapheme_Base # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA\n09DF..09E1    ; Grapheme_Base # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL\n09E6..09EF    ; Grapheme_Base # Nd  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE\n09F0..09F1    ; Grapheme_Base # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL\n09F2..09F3    ; Grapheme_Base # Sc   [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN\n09F4..09F9    ; Grapheme_Base # No   [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN\n09FA          ; Grapheme_Base # So       BENGALI ISSHAR\n09FB          ; Grapheme_Base # Sc       BENGALI GANDA MARK\n09FC          ; Grapheme_Base # Lo       BENGALI LETTER VEDIC ANUSVARA\n09FD          ; Grapheme_Base # Po       BENGALI ABBREVIATION SIGN\n0A03          ; Grapheme_Base # Mc       GURMUKHI SIGN VISARGA\n0A05..0A0A    ; Grapheme_Base # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU\n0A0F..0A10    ; Grapheme_Base # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI\n0A13..0A28    ; Grapheme_Base # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA\n0A2A..0A30    ; Grapheme_Base # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA\n0A32..0A33    ; Grapheme_Base # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA\n0A35..0A36    ; Grapheme_Base # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA\n0A38..0A39    ; Grapheme_Base # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA\n0A3E..0A40    ; Grapheme_Base # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\n0A59..0A5C    ; Grapheme_Base # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA\n0A5E          ; Grapheme_Base # Lo       GURMUKHI LETTER FA\n0A66..0A6F    ; Grapheme_Base # Nd  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE\n0A72..0A74    ; Grapheme_Base # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR\n0A76          ; Grapheme_Base # Po       GURMUKHI ABBREVIATION SIGN\n0A83          ; Grapheme_Base # Mc       GUJARATI SIGN VISARGA\n0A85..0A8D    ; Grapheme_Base # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E\n0A8F..0A91    ; Grapheme_Base # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O\n0A93..0AA8    ; Grapheme_Base # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA\n0AAA..0AB0    ; Grapheme_Base # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA\n0AB2..0AB3    ; Grapheme_Base # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA\n0AB5..0AB9    ; Grapheme_Base # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA\n0ABD          ; Grapheme_Base # Lo       GUJARATI SIGN AVAGRAHA\n0ABE..0AC0    ; Grapheme_Base # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\n0AC9          ; Grapheme_Base # Mc       GUJARATI VOWEL SIGN CANDRA O\n0ACB..0ACC    ; Grapheme_Base # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\n0AD0          ; Grapheme_Base # Lo       GUJARATI OM\n0AE0..0AE1    ; Grapheme_Base # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL\n0AE6..0AEF    ; Grapheme_Base # Nd  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE\n0AF0          ; Grapheme_Base # Po       GUJARATI ABBREVIATION SIGN\n0AF1          ; Grapheme_Base # Sc       GUJARATI RUPEE SIGN\n0AF9          ; Grapheme_Base # Lo       GUJARATI LETTER ZHA\n0B02..0B03    ; Grapheme_Base # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\n0B05..0B0C    ; Grapheme_Base # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L\n0B0F..0B10    ; Grapheme_Base # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI\n0B13..0B28    ; Grapheme_Base # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA\n0B2A..0B30    ; Grapheme_Base # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA\n0B32..0B33    ; Grapheme_Base # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA\n0B35..0B39    ; Grapheme_Base # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA\n0B3D          ; Grapheme_Base # Lo       ORIYA SIGN AVAGRAHA\n0B40          ; Grapheme_Base # Mc       ORIYA VOWEL SIGN II\n0B47..0B48    ; Grapheme_Base # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\n0B4B..0B4C    ; Grapheme_Base # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\n0B5C..0B5D    ; Grapheme_Base # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA\n0B5F..0B61    ; Grapheme_Base # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL\n0B66..0B6F    ; Grapheme_Base # Nd  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE\n0B70          ; Grapheme_Base # So       ORIYA ISSHAR\n0B71          ; Grapheme_Base # Lo       ORIYA LETTER WA\n0B72..0B77    ; Grapheme_Base # No   [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS\n0B83          ; Grapheme_Base # Lo       TAMIL SIGN VISARGA\n0B85..0B8A    ; Grapheme_Base # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU\n0B8E..0B90    ; Grapheme_Base # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI\n0B92..0B95    ; Grapheme_Base # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA\n0B99..0B9A    ; Grapheme_Base # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA\n0B9C          ; Grapheme_Base # Lo       TAMIL LETTER JA\n0B9E..0B9F    ; Grapheme_Base # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA\n0BA3..0BA4    ; Grapheme_Base # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA\n0BA8..0BAA    ; Grapheme_Base # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA\n0BAE..0BB9    ; Grapheme_Base # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA\n0BBF          ; Grapheme_Base # Mc       TAMIL VOWEL SIGN I\n0BC1..0BC2    ; Grapheme_Base # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\n0BC6..0BC8    ; Grapheme_Base # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\n0BCA..0BCC    ; Grapheme_Base # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\n0BD0          ; Grapheme_Base # Lo       TAMIL OM\n0BE6..0BEF    ; Grapheme_Base # Nd  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE\n0BF0..0BF2    ; Grapheme_Base # No   [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND\n0BF3..0BF8    ; Grapheme_Base # So   [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN\n0BF9          ; Grapheme_Base # Sc       TAMIL RUPEE SIGN\n0BFA          ; Grapheme_Base # So       TAMIL NUMBER SIGN\n0C01..0C03    ; Grapheme_Base # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\n0C05..0C0C    ; Grapheme_Base # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L\n0C0E..0C10    ; Grapheme_Base # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI\n0C12..0C28    ; Grapheme_Base # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA\n0C2A..0C39    ; Grapheme_Base # Lo  [16] TELUGU LETTER PA..TELUGU LETTER HA\n0C3D          ; Grapheme_Base # Lo       TELUGU SIGN AVAGRAHA\n0C41..0C44    ; Grapheme_Base # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\n0C58..0C5A    ; Grapheme_Base # Lo   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA\n0C5C..0C5D    ; Grapheme_Base # Lo   [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU\n0C60..0C61    ; Grapheme_Base # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL\n0C66..0C6F    ; Grapheme_Base # Nd  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE\n0C77          ; Grapheme_Base # Po       TELUGU SIGN SIDDHAM\n0C78..0C7E    ; Grapheme_Base # No   [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR\n0C7F          ; Grapheme_Base # So       TELUGU SIGN TUUMU\n0C80          ; Grapheme_Base # Lo       KANNADA SIGN SPACING CANDRABINDU\n0C82..0C83    ; Grapheme_Base # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\n0C84          ; Grapheme_Base # Po       KANNADA SIGN SIDDHAM\n0C85..0C8C    ; Grapheme_Base # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L\n0C8E..0C90    ; Grapheme_Base # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI\n0C92..0CA8    ; Grapheme_Base # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA\n0CAA..0CB3    ; Grapheme_Base # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA\n0CB5..0CB9    ; Grapheme_Base # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA\n0CBD          ; Grapheme_Base # Lo       KANNADA SIGN AVAGRAHA\n0CBE          ; Grapheme_Base # Mc       KANNADA VOWEL SIGN AA\n0CC1          ; Grapheme_Base # Mc       KANNADA VOWEL SIGN U\n0CC3..0CC4    ; Grapheme_Base # Mc   [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR\n0CDC..0CDE    ; Grapheme_Base # Lo   [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA\n0CE0..0CE1    ; Grapheme_Base # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL\n0CE6..0CEF    ; Grapheme_Base # Nd  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE\n0CF1..0CF2    ; Grapheme_Base # Lo   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA\n0CF3          ; Grapheme_Base # Mc       KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT\n0D02..0D03    ; Grapheme_Base # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\n0D04..0D0C    ; Grapheme_Base # Lo   [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L\n0D0E..0D10    ; Grapheme_Base # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI\n0D12..0D3A    ; Grapheme_Base # Lo  [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA\n0D3D          ; Grapheme_Base # Lo       MALAYALAM SIGN AVAGRAHA\n0D3F..0D40    ; Grapheme_Base # Mc   [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II\n0D46..0D48    ; Grapheme_Base # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\n0D4A..0D4C    ; Grapheme_Base # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\n0D4E          ; Grapheme_Base # Lo       MALAYALAM LETTER DOT REPH\n0D4F          ; Grapheme_Base # So       MALAYALAM SIGN PARA\n0D54..0D56    ; Grapheme_Base # Lo   [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL\n0D58..0D5E    ; Grapheme_Base # No   [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH\n0D5F..0D61    ; Grapheme_Base # Lo   [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL\n0D66..0D6F    ; Grapheme_Base # Nd  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE\n0D70..0D78    ; Grapheme_Base # No   [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS\n0D79          ; Grapheme_Base # So       MALAYALAM DATE MARK\n0D7A..0D7F    ; Grapheme_Base # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K\n0D82..0D83    ; Grapheme_Base # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\n0D85..0D96    ; Grapheme_Base # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA\n0D9A..0DB1    ; Grapheme_Base # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA\n0DB3..0DBB    ; Grapheme_Base # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA\n0DBD          ; Grapheme_Base # Lo       SINHALA LETTER DANTAJA LAYANNA\n0DC0..0DC6    ; Grapheme_Base # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA\n0DD0..0DD1    ; Grapheme_Base # Mc   [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\n0DD8..0DDE    ; Grapheme_Base # Mc   [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA\n0DE6..0DEF    ; Grapheme_Base # Nd  [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE\n0DF2..0DF3    ; Grapheme_Base # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\n0DF4          ; Grapheme_Base # Po       SINHALA PUNCTUATION KUNDDALIYA\n0E01..0E30    ; Grapheme_Base # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A\n0E32..0E33    ; Grapheme_Base # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM\n0E3F          ; Grapheme_Base # Sc       THAI CURRENCY SYMBOL BAHT\n0E40..0E45    ; Grapheme_Base # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO\n0E46          ; Grapheme_Base # Lm       THAI CHARACTER MAIYAMOK\n0E4F          ; Grapheme_Base # Po       THAI CHARACTER FONGMAN\n0E50..0E59    ; Grapheme_Base # Nd  [10] THAI DIGIT ZERO..THAI DIGIT NINE\n0E5A..0E5B    ; Grapheme_Base # Po   [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT\n0E81..0E82    ; Grapheme_Base # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG\n0E84          ; Grapheme_Base # Lo       LAO LETTER KHO TAM\n0E86..0E8A    ; Grapheme_Base # Lo   [5] LAO LETTER PALI GHA..LAO LETTER SO TAM\n0E8C..0EA3    ; Grapheme_Base # Lo  [24] LAO LETTER PALI JHA..LAO LETTER LO LING\n0EA5          ; Grapheme_Base # Lo       LAO LETTER LO LOOT\n0EA7..0EB0    ; Grapheme_Base # Lo  [10] LAO LETTER WO..LAO VOWEL SIGN A\n0EB2..0EB3    ; Grapheme_Base # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM\n0EBD          ; Grapheme_Base # Lo       LAO SEMIVOWEL SIGN NYO\n0EC0..0EC4    ; Grapheme_Base # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI\n0EC6          ; Grapheme_Base # Lm       LAO KO LA\n0ED0..0ED9    ; Grapheme_Base # Nd  [10] LAO DIGIT ZERO..LAO DIGIT NINE\n0EDC..0EDF    ; Grapheme_Base # Lo   [4] LAO HO NO..LAO LETTER KHMU NYO\n0F00          ; Grapheme_Base # Lo       TIBETAN SYLLABLE OM\n0F01..0F03    ; Grapheme_Base # So   [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA\n0F04..0F12    ; Grapheme_Base # Po  [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD\n0F13          ; Grapheme_Base # So       TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN\n0F14          ; Grapheme_Base # Po       TIBETAN MARK GTER TSHEG\n0F15..0F17    ; Grapheme_Base # So   [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS\n0F1A..0F1F    ; Grapheme_Base # So   [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG\n0F20..0F29    ; Grapheme_Base # Nd  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE\n0F2A..0F33    ; Grapheme_Base # No  [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO\n0F34          ; Grapheme_Base # So       TIBETAN MARK BSDUS RTAGS\n0F36          ; Grapheme_Base # So       TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN\n0F38          ; Grapheme_Base # So       TIBETAN MARK CHE MGO\n0F3A          ; Grapheme_Base # Ps       TIBETAN MARK GUG RTAGS GYON\n0F3B          ; Grapheme_Base # Pe       TIBETAN MARK GUG RTAGS GYAS\n0F3C          ; Grapheme_Base # Ps       TIBETAN MARK ANG KHANG GYON\n0F3D          ; Grapheme_Base # Pe       TIBETAN MARK ANG KHANG GYAS\n0F3E..0F3F    ; Grapheme_Base # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES\n0F40..0F47    ; Grapheme_Base # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA\n0F49..0F6C    ; Grapheme_Base # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA\n0F7F          ; Grapheme_Base # Mc       TIBETAN SIGN RNAM BCAD\n0F85          ; Grapheme_Base # Po       TIBETAN MARK PALUTA\n0F88..0F8C    ; Grapheme_Base # Lo   [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN\n0FBE..0FC5    ; Grapheme_Base # So   [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE\n0FC7..0FCC    ; Grapheme_Base # So   [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL\n0FCE..0FCF    ; Grapheme_Base # So   [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM\n0FD0..0FD4    ; Grapheme_Base # Po   [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA\n0FD5..0FD8    ; Grapheme_Base # So   [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS\n0FD9..0FDA    ; Grapheme_Base # Po   [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS\n1000..102A    ; Grapheme_Base # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU\n102B..102C    ; Grapheme_Base # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA\n1031          ; Grapheme_Base # Mc       MYANMAR VOWEL SIGN E\n1038          ; Grapheme_Base # Mc       MYANMAR SIGN VISARGA\n103B..103C    ; Grapheme_Base # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\n103F          ; Grapheme_Base # Lo       MYANMAR LETTER GREAT SA\n1040..1049    ; Grapheme_Base # Nd  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE\n104A..104F    ; Grapheme_Base # Po   [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE\n1050..1055    ; Grapheme_Base # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL\n1056..1057    ; Grapheme_Base # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\n105A..105D    ; Grapheme_Base # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE\n1061          ; Grapheme_Base # Lo       MYANMAR LETTER SGAW KAREN SHA\n1062..1064    ; Grapheme_Base # Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO\n1065..1066    ; Grapheme_Base # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA\n1067..106D    ; Grapheme_Base # Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5\n106E..1070    ; Grapheme_Base # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA\n1075..1081    ; Grapheme_Base # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA\n1083..1084    ; Grapheme_Base # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E\n1087..108C    ; Grapheme_Base # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3\n108E          ; Grapheme_Base # Lo       MYANMAR LETTER RUMAI PALAUNG FA\n108F          ; Grapheme_Base # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5\n1090..1099    ; Grapheme_Base # Nd  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE\n109A..109C    ; Grapheme_Base # Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A\n109E..109F    ; Grapheme_Base # So   [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION\n10A0..10C5    ; Grapheme_Base # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; Grapheme_Base # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; Grapheme_Base # L&       GEORGIAN CAPITAL LETTER AEN\n10D0..10FA    ; Grapheme_Base # L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FB          ; Grapheme_Base # Po       GEORGIAN PARAGRAPH SEPARATOR\n10FC          ; Grapheme_Base # Lm       MODIFIER LETTER GEORGIAN NAR\n10FD..10FF    ; Grapheme_Base # L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n1100..1248    ; Grapheme_Base # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA\n124A..124D    ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE\n1250..1256    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO\n1258          ; Grapheme_Base # Lo       ETHIOPIC SYLLABLE QHWA\n125A..125D    ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE\n1260..1288    ; Grapheme_Base # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA\n128A..128D    ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE\n1290..12B0    ; Grapheme_Base # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA\n12B2..12B5    ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE\n12B8..12BE    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO\n12C0          ; Grapheme_Base # Lo       ETHIOPIC SYLLABLE KXWA\n12C2..12C5    ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE\n12C8..12D6    ; Grapheme_Base # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O\n12D8..1310    ; Grapheme_Base # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA\n1312..1315    ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE\n1318..135A    ; Grapheme_Base # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA\n1360..1368    ; Grapheme_Base # Po   [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR\n1369..137C    ; Grapheme_Base # No  [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND\n1380..138F    ; Grapheme_Base # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE\n1390..1399    ; Grapheme_Base # So  [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT\n13A0..13F5    ; Grapheme_Base # L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n13F8..13FD    ; Grapheme_Base # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1400          ; Grapheme_Base # Pd       CANADIAN SYLLABICS HYPHEN\n1401..166C    ; Grapheme_Base # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA\n166D          ; Grapheme_Base # So       CANADIAN SYLLABICS CHI SIGN\n166E          ; Grapheme_Base # Po       CANADIAN SYLLABICS FULL STOP\n166F..167F    ; Grapheme_Base # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W\n1680          ; Grapheme_Base # Zs       OGHAM SPACE MARK\n1681..169A    ; Grapheme_Base # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH\n169B          ; Grapheme_Base # Ps       OGHAM FEATHER MARK\n169C          ; Grapheme_Base # Pe       OGHAM REVERSED FEATHER MARK\n16A0..16EA    ; Grapheme_Base # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X\n16EB..16ED    ; Grapheme_Base # Po   [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION\n16EE..16F0    ; Grapheme_Base # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL\n16F1..16F8    ; Grapheme_Base # Lo   [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC\n1700..1711    ; Grapheme_Base # Lo  [18] TAGALOG LETTER A..TAGALOG LETTER HA\n171F..1731    ; Grapheme_Base # Lo  [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA\n1735..1736    ; Grapheme_Base # Po   [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION\n1740..1751    ; Grapheme_Base # Lo  [18] BUHID LETTER A..BUHID LETTER HA\n1760..176C    ; Grapheme_Base # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA\n176E..1770    ; Grapheme_Base # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA\n1780..17B3    ; Grapheme_Base # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU\n17B6          ; Grapheme_Base # Mc       KHMER VOWEL SIGN AA\n17BE..17C5    ; Grapheme_Base # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\n17C7..17C8    ; Grapheme_Base # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\n17D4..17D6    ; Grapheme_Base # Po   [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH\n17D7          ; Grapheme_Base # Lm       KHMER SIGN LEK TOO\n17D8..17DA    ; Grapheme_Base # Po   [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT\n17DB          ; Grapheme_Base # Sc       KHMER CURRENCY SYMBOL RIEL\n17DC          ; Grapheme_Base # Lo       KHMER SIGN AVAKRAHASANYA\n17E0..17E9    ; Grapheme_Base # Nd  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE\n17F0..17F9    ; Grapheme_Base # No  [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON\n1800..1805    ; Grapheme_Base # Po   [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS\n1806          ; Grapheme_Base # Pd       MONGOLIAN TODO SOFT HYPHEN\n1807..180A    ; Grapheme_Base # Po   [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU\n1810..1819    ; Grapheme_Base # Nd  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE\n1820..1842    ; Grapheme_Base # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI\n1843          ; Grapheme_Base # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN\n1844..1878    ; Grapheme_Base # Lo  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS\n1880..1884    ; Grapheme_Base # Lo   [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA\n1887..18A8    ; Grapheme_Base # Lo  [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA\n18AA          ; Grapheme_Base # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA\n18B0..18F5    ; Grapheme_Base # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S\n1900..191E    ; Grapheme_Base # Lo  [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA\n1923..1926    ; Grapheme_Base # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\n1929..192B    ; Grapheme_Base # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\n1930..1931    ; Grapheme_Base # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\n1933..1938    ; Grapheme_Base # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\n1940          ; Grapheme_Base # So       LIMBU SIGN LOO\n1944..1945    ; Grapheme_Base # Po   [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK\n1946..194F    ; Grapheme_Base # Nd  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE\n1950..196D    ; Grapheme_Base # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI\n1970..1974    ; Grapheme_Base # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6\n1980..19AB    ; Grapheme_Base # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA\n19B0..19C9    ; Grapheme_Base # Lo  [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2\n19D0..19D9    ; Grapheme_Base # Nd  [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE\n19DA          ; Grapheme_Base # No       NEW TAI LUE THAM DIGIT ONE\n19DE..19FF    ; Grapheme_Base # So  [34] NEW TAI LUE SIGN LAE..KHMER SYMBOL DAP-PRAM ROC\n1A00..1A16    ; Grapheme_Base # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA\n1A19..1A1A    ; Grapheme_Base # Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\n1A1E..1A1F    ; Grapheme_Base # Po   [2] BUGINESE PALLAWA..BUGINESE END OF SECTION\n1A20..1A54    ; Grapheme_Base # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA\n1A55          ; Grapheme_Base # Mc       TAI THAM CONSONANT SIGN MEDIAL RA\n1A57          ; Grapheme_Base # Mc       TAI THAM CONSONANT SIGN LA TANG LAI\n1A61          ; Grapheme_Base # Mc       TAI THAM VOWEL SIGN A\n1A63..1A64    ; Grapheme_Base # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA\n1A6D..1A72    ; Grapheme_Base # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\n1A80..1A89    ; Grapheme_Base # Nd  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE\n1A90..1A99    ; Grapheme_Base # Nd  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE\n1AA0..1AA6    ; Grapheme_Base # Po   [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA\n1AA7          ; Grapheme_Base # Lm       TAI THAM SIGN MAI YAMOK\n1AA8..1AAD    ; Grapheme_Base # Po   [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG\n1B04          ; Grapheme_Base # Mc       BALINESE SIGN BISAH\n1B05..1B33    ; Grapheme_Base # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA\n1B3E..1B41    ; Grapheme_Base # Mc   [4] BALINESE VOWEL SIGN TALING..BALINESE VOWEL SIGN TALING REPA TEDUNG\n1B45..1B4C    ; Grapheme_Base # Lo   [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA\n1B4E..1B4F    ; Grapheme_Base # Po   [2] BALINESE INVERTED CARIK SIKI..BALINESE INVERTED CARIK PAREREN\n1B50..1B59    ; Grapheme_Base # Nd  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE\n1B5A..1B60    ; Grapheme_Base # Po   [7] BALINESE PANTI..BALINESE PAMENENG\n1B61..1B6A    ; Grapheme_Base # So  [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE\n1B74..1B7C    ; Grapheme_Base # So   [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING\n1B7D..1B7F    ; Grapheme_Base # Po   [3] BALINESE PANTI LANTANG..BALINESE PANTI BAWAK\n1B82          ; Grapheme_Base # Mc       SUNDANESE SIGN PANGWISAD\n1B83..1BA0    ; Grapheme_Base # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA\n1BA1          ; Grapheme_Base # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL\n1BA6..1BA7    ; Grapheme_Base # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\n1BAE..1BAF    ; Grapheme_Base # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA\n1BB0..1BB9    ; Grapheme_Base # Nd  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE\n1BBA..1BE5    ; Grapheme_Base # Lo  [44] SUNDANESE AVAGRAHA..BATAK LETTER U\n1BE7          ; Grapheme_Base # Mc       BATAK VOWEL SIGN E\n1BEA..1BEC    ; Grapheme_Base # Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\n1BEE          ; Grapheme_Base # Mc       BATAK VOWEL SIGN U\n1BFC..1BFF    ; Grapheme_Base # Po   [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT\n1C00..1C23    ; Grapheme_Base # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A\n1C24..1C2B    ; Grapheme_Base # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\n1C34..1C35    ; Grapheme_Base # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\n1C3B..1C3F    ; Grapheme_Base # Po   [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK\n1C40..1C49    ; Grapheme_Base # Nd  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE\n1C4D..1C4F    ; Grapheme_Base # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA\n1C50..1C59    ; Grapheme_Base # Nd  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE\n1C5A..1C77    ; Grapheme_Base # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH\n1C78..1C7D    ; Grapheme_Base # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD\n1C7E..1C7F    ; Grapheme_Base # Po   [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD\n1C80..1C8A    ; Grapheme_Base # L&  [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE\n1C90..1CBA    ; Grapheme_Base # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; Grapheme_Base # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1CC0..1CC7    ; Grapheme_Base # Po   [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA\n1CD3          ; Grapheme_Base # Po       VEDIC SIGN NIHSHVASA\n1CE1          ; Grapheme_Base # Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\n1CE9..1CEC    ; Grapheme_Base # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL\n1CEE..1CF3    ; Grapheme_Base # Lo   [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA\n1CF5..1CF6    ; Grapheme_Base # Lo   [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA\n1CF7          ; Grapheme_Base # Mc       VEDIC SIGN ATIKRAMA\n1CFA          ; Grapheme_Base # Lo       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA\n1D00..1D2B    ; Grapheme_Base # L&  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL\n1D2C..1D6A    ; Grapheme_Base # Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D6B..1D77    ; Grapheme_Base # L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G\n1D78          ; Grapheme_Base # Lm       MODIFIER LETTER CYRILLIC EN\n1D79..1D9A    ; Grapheme_Base # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK\n1D9B..1DBF    ; Grapheme_Base # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA\n1E00..1F15    ; Grapheme_Base # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F18..1F1D    ; Grapheme_Base # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F45    ; Grapheme_Base # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F48..1F4D    ; Grapheme_Base # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; Grapheme_Base # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F59          ; Grapheme_Base # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; Grapheme_Base # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; Grapheme_Base # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F..1F7D    ; Grapheme_Base # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1FB4    ; Grapheme_Base # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FBC    ; Grapheme_Base # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBD          ; Grapheme_Base # Sk       GREEK KORONIS\n1FBE          ; Grapheme_Base # L&       GREEK PROSGEGRAMMENI\n1FBF..1FC1    ; Grapheme_Base # Sk   [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI\n1FC2..1FC4    ; Grapheme_Base # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FCC    ; Grapheme_Base # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FCD..1FCF    ; Grapheme_Base # Sk   [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI\n1FD0..1FD3    ; Grapheme_Base # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FDB    ; Grapheme_Base # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FDD..1FDF    ; Grapheme_Base # Sk   [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI\n1FE0..1FEC    ; Grapheme_Base # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FED..1FEF    ; Grapheme_Base # Sk   [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA\n1FF2..1FF4    ; Grapheme_Base # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FFC    ; Grapheme_Base # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n1FFD..1FFE    ; Grapheme_Base # Sk   [2] GREEK OXIA..GREEK DASIA\n2000..200A    ; Grapheme_Base # Zs  [11] EN QUAD..HAIR SPACE\n2010..2015    ; Grapheme_Base # Pd   [6] HYPHEN..HORIZONTAL BAR\n2016..2017    ; Grapheme_Base # Po   [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE\n2018          ; Grapheme_Base # Pi       LEFT SINGLE QUOTATION MARK\n2019          ; Grapheme_Base # Pf       RIGHT SINGLE QUOTATION MARK\n201A          ; Grapheme_Base # Ps       SINGLE LOW-9 QUOTATION MARK\n201B..201C    ; Grapheme_Base # Pi   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK\n201D          ; Grapheme_Base # Pf       RIGHT DOUBLE QUOTATION MARK\n201E          ; Grapheme_Base # Ps       DOUBLE LOW-9 QUOTATION MARK\n201F          ; Grapheme_Base # Pi       DOUBLE HIGH-REVERSED-9 QUOTATION MARK\n2020..2027    ; Grapheme_Base # Po   [8] DAGGER..HYPHENATION POINT\n202F          ; Grapheme_Base # Zs       NARROW NO-BREAK SPACE\n2030..2038    ; Grapheme_Base # Po   [9] PER MILLE SIGN..CARET\n2039          ; Grapheme_Base # Pi       SINGLE LEFT-POINTING ANGLE QUOTATION MARK\n203A          ; Grapheme_Base # Pf       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\n203B..203E    ; Grapheme_Base # Po   [4] REFERENCE MARK..OVERLINE\n203F..2040    ; Grapheme_Base # Pc   [2] UNDERTIE..CHARACTER TIE\n2041..2043    ; Grapheme_Base # Po   [3] CARET INSERTION POINT..HYPHEN BULLET\n2044          ; Grapheme_Base # Sm       FRACTION SLASH\n2045          ; Grapheme_Base # Ps       LEFT SQUARE BRACKET WITH QUILL\n2046          ; Grapheme_Base # Pe       RIGHT SQUARE BRACKET WITH QUILL\n2047..2051    ; Grapheme_Base # Po  [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY\n2052          ; Grapheme_Base # Sm       COMMERCIAL MINUS SIGN\n2053          ; Grapheme_Base # Po       SWUNG DASH\n2054          ; Grapheme_Base # Pc       INVERTED UNDERTIE\n2055..205E    ; Grapheme_Base # Po  [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS\n205F          ; Grapheme_Base # Zs       MEDIUM MATHEMATICAL SPACE\n2070          ; Grapheme_Base # No       SUPERSCRIPT ZERO\n2071          ; Grapheme_Base # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n2074..2079    ; Grapheme_Base # No   [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE\n207A..207C    ; Grapheme_Base # Sm   [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN\n207D          ; Grapheme_Base # Ps       SUPERSCRIPT LEFT PARENTHESIS\n207E          ; Grapheme_Base # Pe       SUPERSCRIPT RIGHT PARENTHESIS\n207F          ; Grapheme_Base # Lm       SUPERSCRIPT LATIN SMALL LETTER N\n2080..2089    ; Grapheme_Base # No  [10] SUBSCRIPT ZERO..SUBSCRIPT NINE\n208A..208C    ; Grapheme_Base # Sm   [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN\n208D          ; Grapheme_Base # Ps       SUBSCRIPT LEFT PARENTHESIS\n208E          ; Grapheme_Base # Pe       SUBSCRIPT RIGHT PARENTHESIS\n2090..209C    ; Grapheme_Base # Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n20A0..20C1    ; Grapheme_Base # Sc  [34] EURO-CURRENCY SIGN..SAUDI RIYAL SIGN\n2100..2101    ; Grapheme_Base # So   [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT\n2102          ; Grapheme_Base # L&       DOUBLE-STRUCK CAPITAL C\n2103..2106    ; Grapheme_Base # So   [4] DEGREE CELSIUS..CADA UNA\n2107          ; Grapheme_Base # L&       EULER CONSTANT\n2108..2109    ; Grapheme_Base # So   [2] SCRUPLE..DEGREE FAHRENHEIT\n210A..2113    ; Grapheme_Base # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L\n2114          ; Grapheme_Base # So       L B BAR SYMBOL\n2115          ; Grapheme_Base # L&       DOUBLE-STRUCK CAPITAL N\n2116..2117    ; Grapheme_Base # So   [2] NUMERO SIGN..SOUND RECORDING COPYRIGHT\n2118          ; Grapheme_Base # Sm       SCRIPT CAPITAL P\n2119..211D    ; Grapheme_Base # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n211E..2123    ; Grapheme_Base # So   [6] PRESCRIPTION TAKE..VERSICLE\n2124          ; Grapheme_Base # L&       DOUBLE-STRUCK CAPITAL Z\n2125          ; Grapheme_Base # So       OUNCE SIGN\n2126          ; Grapheme_Base # L&       OHM SIGN\n2127          ; Grapheme_Base # So       INVERTED OHM SIGN\n2128          ; Grapheme_Base # L&       BLACK-LETTER CAPITAL Z\n2129          ; Grapheme_Base # So       TURNED GREEK SMALL LETTER IOTA\n212A..212D    ; Grapheme_Base # L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C\n212E          ; Grapheme_Base # So       ESTIMATED SYMBOL\n212F..2134    ; Grapheme_Base # L&   [6] SCRIPT SMALL E..SCRIPT SMALL O\n2135..2138    ; Grapheme_Base # Lo   [4] ALEF SYMBOL..DALET SYMBOL\n2139          ; Grapheme_Base # L&       INFORMATION SOURCE\n213A..213B    ; Grapheme_Base # So   [2] ROTATED CAPITAL Q..FACSIMILE SIGN\n213C..213F    ; Grapheme_Base # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI\n2140..2144    ; Grapheme_Base # Sm   [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y\n2145..2149    ; Grapheme_Base # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J\n214A          ; Grapheme_Base # So       PROPERTY LINE\n214B          ; Grapheme_Base # Sm       TURNED AMPERSAND\n214C..214D    ; Grapheme_Base # So   [2] PER SIGN..AKTIESELSKAB\n214E          ; Grapheme_Base # L&       TURNED SMALL F\n214F          ; Grapheme_Base # So       SYMBOL FOR SAMARITAN SOURCE\n2150..215F    ; Grapheme_Base # No  [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE\n2160..2182    ; Grapheme_Base # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND\n2183..2184    ; Grapheme_Base # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C\n2185..2188    ; Grapheme_Base # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND\n2189          ; Grapheme_Base # No       VULGAR FRACTION ZERO THIRDS\n218A..218B    ; Grapheme_Base # So   [2] TURNED DIGIT TWO..TURNED DIGIT THREE\n2190..2194    ; Grapheme_Base # Sm   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW\n2195..2199    ; Grapheme_Base # So   [5] UP DOWN ARROW..SOUTH WEST ARROW\n219A..219B    ; Grapheme_Base # Sm   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE\n219C..219F    ; Grapheme_Base # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW\n21A0          ; Grapheme_Base # Sm       RIGHTWARDS TWO HEADED ARROW\n21A1..21A2    ; Grapheme_Base # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL\n21A3          ; Grapheme_Base # Sm       RIGHTWARDS ARROW WITH TAIL\n21A4..21A5    ; Grapheme_Base # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR\n21A6          ; Grapheme_Base # Sm       RIGHTWARDS ARROW FROM BAR\n21A7..21AD    ; Grapheme_Base # So   [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW\n21AE          ; Grapheme_Base # Sm       LEFT RIGHT ARROW WITH STROKE\n21AF..21CD    ; Grapheme_Base # So  [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE\n21CE..21CF    ; Grapheme_Base # Sm   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE\n21D0..21D1    ; Grapheme_Base # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW\n21D2          ; Grapheme_Base # Sm       RIGHTWARDS DOUBLE ARROW\n21D3          ; Grapheme_Base # So       DOWNWARDS DOUBLE ARROW\n21D4          ; Grapheme_Base # Sm       LEFT RIGHT DOUBLE ARROW\n21D5..21F3    ; Grapheme_Base # So  [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW\n21F4..22FF    ; Grapheme_Base # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP\n2300..2307    ; Grapheme_Base # So   [8] DIAMETER SIGN..WAVY LINE\n2308          ; Grapheme_Base # Ps       LEFT CEILING\n2309          ; Grapheme_Base # Pe       RIGHT CEILING\n230A          ; Grapheme_Base # Ps       LEFT FLOOR\n230B          ; Grapheme_Base # Pe       RIGHT FLOOR\n230C..231F    ; Grapheme_Base # So  [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER\n2320..2321    ; Grapheme_Base # Sm   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL\n2322..2328    ; Grapheme_Base # So   [7] FROWN..KEYBOARD\n2329          ; Grapheme_Base # Ps       LEFT-POINTING ANGLE BRACKET\n232A          ; Grapheme_Base # Pe       RIGHT-POINTING ANGLE BRACKET\n232B..237B    ; Grapheme_Base # So  [81] ERASE TO THE LEFT..NOT CHECK MARK\n237C          ; Grapheme_Base # Sm       RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW\n237D..239A    ; Grapheme_Base # So  [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL\n239B..23B3    ; Grapheme_Base # Sm  [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM\n23B4..23DB    ; Grapheme_Base # So  [40] TOP SQUARE BRACKET..FUSE\n23DC..23E1    ; Grapheme_Base # Sm   [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET\n23E2..2429    ; Grapheme_Base # So  [72] WHITE TRAPEZIUM..SYMBOL FOR DELETE MEDIUM SHADE FORM\n2440..244A    ; Grapheme_Base # So  [11] OCR HOOK..OCR DOUBLE BACKSLASH\n2460..249B    ; Grapheme_Base # No  [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP\n249C..24E9    ; Grapheme_Base # So  [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z\n24EA..24FF    ; Grapheme_Base # No  [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO\n2500..25B6    ; Grapheme_Base # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE\n25B7          ; Grapheme_Base # Sm       WHITE RIGHT-POINTING TRIANGLE\n25B8..25C0    ; Grapheme_Base # So   [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE\n25C1          ; Grapheme_Base # Sm       WHITE LEFT-POINTING TRIANGLE\n25C2..25F7    ; Grapheme_Base # So  [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT\n25F8..25FF    ; Grapheme_Base # Sm   [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE\n2600..266E    ; Grapheme_Base # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN\n266F          ; Grapheme_Base # Sm       MUSIC SHARP SIGN\n2670..2767    ; Grapheme_Base # So [248] WEST SYRIAC CROSS..ROTATED FLORAL HEART BULLET\n2768          ; Grapheme_Base # Ps       MEDIUM LEFT PARENTHESIS ORNAMENT\n2769          ; Grapheme_Base # Pe       MEDIUM RIGHT PARENTHESIS ORNAMENT\n276A          ; Grapheme_Base # Ps       MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT\n276B          ; Grapheme_Base # Pe       MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT\n276C          ; Grapheme_Base # Ps       MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT\n276D          ; Grapheme_Base # Pe       MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT\n276E          ; Grapheme_Base # Ps       HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT\n276F          ; Grapheme_Base # Pe       HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT\n2770          ; Grapheme_Base # Ps       HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT\n2771          ; Grapheme_Base # Pe       HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT\n2772          ; Grapheme_Base # Ps       LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT\n2773          ; Grapheme_Base # Pe       LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT\n2774          ; Grapheme_Base # Ps       MEDIUM LEFT CURLY BRACKET ORNAMENT\n2775          ; Grapheme_Base # Pe       MEDIUM RIGHT CURLY BRACKET ORNAMENT\n2776..2793    ; Grapheme_Base # No  [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN\n2794..27BF    ; Grapheme_Base # So  [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP\n27C0..27C4    ; Grapheme_Base # Sm   [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET\n27C5          ; Grapheme_Base # Ps       LEFT S-SHAPED BAG DELIMITER\n27C6          ; Grapheme_Base # Pe       RIGHT S-SHAPED BAG DELIMITER\n27C7..27E5    ; Grapheme_Base # Sm  [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK\n27E6          ; Grapheme_Base # Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET\n27E7          ; Grapheme_Base # Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET\n27E8          ; Grapheme_Base # Ps       MATHEMATICAL LEFT ANGLE BRACKET\n27E9          ; Grapheme_Base # Pe       MATHEMATICAL RIGHT ANGLE BRACKET\n27EA          ; Grapheme_Base # Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET\n27EB          ; Grapheme_Base # Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET\n27EC          ; Grapheme_Base # Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET\n27ED          ; Grapheme_Base # Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET\n27EE          ; Grapheme_Base # Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS\n27EF          ; Grapheme_Base # Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS\n27F0..27FF    ; Grapheme_Base # Sm  [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW\n2800..28FF    ; Grapheme_Base # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678\n2900..2982    ; Grapheme_Base # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON\n2983          ; Grapheme_Base # Ps       LEFT WHITE CURLY BRACKET\n2984          ; Grapheme_Base # Pe       RIGHT WHITE CURLY BRACKET\n2985          ; Grapheme_Base # Ps       LEFT WHITE PARENTHESIS\n2986          ; Grapheme_Base # Pe       RIGHT WHITE PARENTHESIS\n2987          ; Grapheme_Base # Ps       Z NOTATION LEFT IMAGE BRACKET\n2988          ; Grapheme_Base # Pe       Z NOTATION RIGHT IMAGE BRACKET\n2989          ; Grapheme_Base # Ps       Z NOTATION LEFT BINDING BRACKET\n298A          ; Grapheme_Base # Pe       Z NOTATION RIGHT BINDING BRACKET\n298B          ; Grapheme_Base # Ps       LEFT SQUARE BRACKET WITH UNDERBAR\n298C          ; Grapheme_Base # Pe       RIGHT SQUARE BRACKET WITH UNDERBAR\n298D          ; Grapheme_Base # Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER\n298E          ; Grapheme_Base # Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n298F          ; Grapheme_Base # Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n2990          ; Grapheme_Base # Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER\n2991          ; Grapheme_Base # Ps       LEFT ANGLE BRACKET WITH DOT\n2992          ; Grapheme_Base # Pe       RIGHT ANGLE BRACKET WITH DOT\n2993          ; Grapheme_Base # Ps       LEFT ARC LESS-THAN BRACKET\n2994          ; Grapheme_Base # Pe       RIGHT ARC GREATER-THAN BRACKET\n2995          ; Grapheme_Base # Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET\n2996          ; Grapheme_Base # Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET\n2997          ; Grapheme_Base # Ps       LEFT BLACK TORTOISE SHELL BRACKET\n2998          ; Grapheme_Base # Pe       RIGHT BLACK TORTOISE SHELL BRACKET\n2999..29D7    ; Grapheme_Base # Sm  [63] DOTTED FENCE..BLACK HOURGLASS\n29D8          ; Grapheme_Base # Ps       LEFT WIGGLY FENCE\n29D9          ; Grapheme_Base # Pe       RIGHT WIGGLY FENCE\n29DA          ; Grapheme_Base # Ps       LEFT DOUBLE WIGGLY FENCE\n29DB          ; Grapheme_Base # Pe       RIGHT DOUBLE WIGGLY FENCE\n29DC..29FB    ; Grapheme_Base # Sm  [32] INCOMPLETE INFINITY..TRIPLE PLUS\n29FC          ; Grapheme_Base # Ps       LEFT-POINTING CURVED ANGLE BRACKET\n29FD          ; Grapheme_Base # Pe       RIGHT-POINTING CURVED ANGLE BRACKET\n29FE..2AFF    ; Grapheme_Base # Sm [258] TINY..N-ARY WHITE VERTICAL BAR\n2B00..2B2F    ; Grapheme_Base # So  [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE\n2B30..2B44    ; Grapheme_Base # Sm  [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET\n2B45..2B46    ; Grapheme_Base # So   [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW\n2B47..2B4C    ; Grapheme_Base # Sm   [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR\n2B4D..2B73    ; Grapheme_Base # So  [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR\n2B76..2BFF    ; Grapheme_Base # So [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL\n2C00..2C7B    ; Grapheme_Base # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E\n2C7C..2C7D    ; Grapheme_Base # Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\n2C7E..2CE4    ; Grapheme_Base # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI\n2CE5..2CEA    ; Grapheme_Base # So   [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA\n2CEB..2CEE    ; Grapheme_Base # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CF2..2CF3    ; Grapheme_Base # L&   [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI\n2CF9..2CFC    ; Grapheme_Base # Po   [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER\n2CFD          ; Grapheme_Base # No       COPTIC FRACTION ONE HALF\n2CFE..2CFF    ; Grapheme_Base # Po   [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER\n2D00..2D25    ; Grapheme_Base # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; Grapheme_Base # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; Grapheme_Base # L&       GEORGIAN SMALL LETTER AEN\n2D30..2D67    ; Grapheme_Base # Lo  [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO\n2D6F          ; Grapheme_Base # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK\n2D70          ; Grapheme_Base # Po       TIFINAGH SEPARATOR MARK\n2D80..2D96    ; Grapheme_Base # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE\n2DA0..2DA6    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO\n2DA8..2DAE    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO\n2DB0..2DB6    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO\n2DB8..2DBE    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO\n2DC0..2DC6    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO\n2DC8..2DCE    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO\n2DD0..2DD6    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO\n2DD8..2DDE    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO\n2E00..2E01    ; Grapheme_Base # Po   [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER\n2E02          ; Grapheme_Base # Pi       LEFT SUBSTITUTION BRACKET\n2E03          ; Grapheme_Base # Pf       RIGHT SUBSTITUTION BRACKET\n2E04          ; Grapheme_Base # Pi       LEFT DOTTED SUBSTITUTION BRACKET\n2E05          ; Grapheme_Base # Pf       RIGHT DOTTED SUBSTITUTION BRACKET\n2E06..2E08    ; Grapheme_Base # Po   [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER\n2E09          ; Grapheme_Base # Pi       LEFT TRANSPOSITION BRACKET\n2E0A          ; Grapheme_Base # Pf       RIGHT TRANSPOSITION BRACKET\n2E0B          ; Grapheme_Base # Po       RAISED SQUARE\n2E0C          ; Grapheme_Base # Pi       LEFT RAISED OMISSION BRACKET\n2E0D          ; Grapheme_Base # Pf       RIGHT RAISED OMISSION BRACKET\n2E0E..2E16    ; Grapheme_Base # Po   [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE\n2E17          ; Grapheme_Base # Pd       DOUBLE OBLIQUE HYPHEN\n2E18..2E19    ; Grapheme_Base # Po   [2] INVERTED INTERROBANG..PALM BRANCH\n2E1A          ; Grapheme_Base # Pd       HYPHEN WITH DIAERESIS\n2E1B          ; Grapheme_Base # Po       TILDE WITH RING ABOVE\n2E1C          ; Grapheme_Base # Pi       LEFT LOW PARAPHRASE BRACKET\n2E1D          ; Grapheme_Base # Pf       RIGHT LOW PARAPHRASE BRACKET\n2E1E..2E1F    ; Grapheme_Base # Po   [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW\n2E20          ; Grapheme_Base # Pi       LEFT VERTICAL BAR WITH QUILL\n2E21          ; Grapheme_Base # Pf       RIGHT VERTICAL BAR WITH QUILL\n2E22          ; Grapheme_Base # Ps       TOP LEFT HALF BRACKET\n2E23          ; Grapheme_Base # Pe       TOP RIGHT HALF BRACKET\n2E24          ; Grapheme_Base # Ps       BOTTOM LEFT HALF BRACKET\n2E25          ; Grapheme_Base # Pe       BOTTOM RIGHT HALF BRACKET\n2E26          ; Grapheme_Base # Ps       LEFT SIDEWAYS U BRACKET\n2E27          ; Grapheme_Base # Pe       RIGHT SIDEWAYS U BRACKET\n2E28          ; Grapheme_Base # Ps       LEFT DOUBLE PARENTHESIS\n2E29          ; Grapheme_Base # Pe       RIGHT DOUBLE PARENTHESIS\n2E2A..2E2E    ; Grapheme_Base # Po   [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK\n2E2F          ; Grapheme_Base # Lm       VERTICAL TILDE\n2E30..2E39    ; Grapheme_Base # Po  [10] RING POINT..TOP HALF SECTION SIGN\n2E3A..2E3B    ; Grapheme_Base # Pd   [2] TWO-EM DASH..THREE-EM DASH\n2E3C..2E3F    ; Grapheme_Base # Po   [4] STENOGRAPHIC FULL STOP..CAPITULUM\n2E40          ; Grapheme_Base # Pd       DOUBLE HYPHEN\n2E41          ; Grapheme_Base # Po       REVERSED COMMA\n2E42          ; Grapheme_Base # Ps       DOUBLE LOW-REVERSED-9 QUOTATION MARK\n2E43..2E4F    ; Grapheme_Base # Po  [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER\n2E50..2E51    ; Grapheme_Base # So   [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR\n2E52..2E54    ; Grapheme_Base # Po   [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK\n2E55          ; Grapheme_Base # Ps       LEFT SQUARE BRACKET WITH STROKE\n2E56          ; Grapheme_Base # Pe       RIGHT SQUARE BRACKET WITH STROKE\n2E57          ; Grapheme_Base # Ps       LEFT SQUARE BRACKET WITH DOUBLE STROKE\n2E58          ; Grapheme_Base # Pe       RIGHT SQUARE BRACKET WITH DOUBLE STROKE\n2E59          ; Grapheme_Base # Ps       TOP HALF LEFT PARENTHESIS\n2E5A          ; Grapheme_Base # Pe       TOP HALF RIGHT PARENTHESIS\n2E5B          ; Grapheme_Base # Ps       BOTTOM HALF LEFT PARENTHESIS\n2E5C          ; Grapheme_Base # Pe       BOTTOM HALF RIGHT PARENTHESIS\n2E5D          ; Grapheme_Base # Pd       OBLIQUE HYPHEN\n2E80..2E99    ; Grapheme_Base # So  [26] CJK RADICAL REPEAT..CJK RADICAL RAP\n2E9B..2EF3    ; Grapheme_Base # So  [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE\n2F00..2FD5    ; Grapheme_Base # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE\n2FF0..2FFF    ; Grapheme_Base # So  [16] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION\n3000          ; Grapheme_Base # Zs       IDEOGRAPHIC SPACE\n3001..3003    ; Grapheme_Base # Po   [3] IDEOGRAPHIC COMMA..DITTO MARK\n3004          ; Grapheme_Base # So       JAPANESE INDUSTRIAL STANDARD SYMBOL\n3005          ; Grapheme_Base # Lm       IDEOGRAPHIC ITERATION MARK\n3006          ; Grapheme_Base # Lo       IDEOGRAPHIC CLOSING MARK\n3007          ; Grapheme_Base # Nl       IDEOGRAPHIC NUMBER ZERO\n3008          ; Grapheme_Base # Ps       LEFT ANGLE BRACKET\n3009          ; Grapheme_Base # Pe       RIGHT ANGLE BRACKET\n300A          ; Grapheme_Base # Ps       LEFT DOUBLE ANGLE BRACKET\n300B          ; Grapheme_Base # Pe       RIGHT DOUBLE ANGLE BRACKET\n300C          ; Grapheme_Base # Ps       LEFT CORNER BRACKET\n300D          ; Grapheme_Base # Pe       RIGHT CORNER BRACKET\n300E          ; Grapheme_Base # Ps       LEFT WHITE CORNER BRACKET\n300F          ; Grapheme_Base # Pe       RIGHT WHITE CORNER BRACKET\n3010          ; Grapheme_Base # Ps       LEFT BLACK LENTICULAR BRACKET\n3011          ; Grapheme_Base # Pe       RIGHT BLACK LENTICULAR BRACKET\n3012..3013    ; Grapheme_Base # So   [2] POSTAL MARK..GETA MARK\n3014          ; Grapheme_Base # Ps       LEFT TORTOISE SHELL BRACKET\n3015          ; Grapheme_Base # Pe       RIGHT TORTOISE SHELL BRACKET\n3016          ; Grapheme_Base # Ps       LEFT WHITE LENTICULAR BRACKET\n3017          ; Grapheme_Base # Pe       RIGHT WHITE LENTICULAR BRACKET\n3018          ; Grapheme_Base # Ps       LEFT WHITE TORTOISE SHELL BRACKET\n3019          ; Grapheme_Base # Pe       RIGHT WHITE TORTOISE SHELL BRACKET\n301A          ; Grapheme_Base # Ps       LEFT WHITE SQUARE BRACKET\n301B          ; Grapheme_Base # Pe       RIGHT WHITE SQUARE BRACKET\n301C          ; Grapheme_Base # Pd       WAVE DASH\n301D          ; Grapheme_Base # Ps       REVERSED DOUBLE PRIME QUOTATION MARK\n301E..301F    ; Grapheme_Base # Pe   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK\n3020          ; Grapheme_Base # So       POSTAL MARK FACE\n3021..3029    ; Grapheme_Base # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE\n3030          ; Grapheme_Base # Pd       WAVY DASH\n3031..3035    ; Grapheme_Base # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF\n3036..3037    ; Grapheme_Base # So   [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL\n3038..303A    ; Grapheme_Base # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY\n303B          ; Grapheme_Base # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK\n303C          ; Grapheme_Base # Lo       MASU MARK\n303D          ; Grapheme_Base # Po       PART ALTERNATION MARK\n303E..303F    ; Grapheme_Base # So   [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE\n3041..3096    ; Grapheme_Base # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE\n309B..309C    ; Grapheme_Base # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n309D..309E    ; Grapheme_Base # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK\n309F          ; Grapheme_Base # Lo       HIRAGANA DIGRAPH YORI\n30A0          ; Grapheme_Base # Pd       KATAKANA-HIRAGANA DOUBLE HYPHEN\n30A1..30FA    ; Grapheme_Base # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO\n30FB          ; Grapheme_Base # Po       KATAKANA MIDDLE DOT\n30FC..30FE    ; Grapheme_Base # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK\n30FF          ; Grapheme_Base # Lo       KATAKANA DIGRAPH KOTO\n3105..312F    ; Grapheme_Base # Lo  [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN\n3131..318E    ; Grapheme_Base # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE\n3190..3191    ; Grapheme_Base # So   [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK\n3192..3195    ; Grapheme_Base # No   [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK\n3196..319F    ; Grapheme_Base # So  [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK\n31A0..31BF    ; Grapheme_Base # Lo  [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH\n31C0..31E5    ; Grapheme_Base # So  [38] CJK STROKE T..CJK STROKE SZP\n31EF          ; Grapheme_Base # So       IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION\n31F0..31FF    ; Grapheme_Base # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO\n3200..321E    ; Grapheme_Base # So  [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU\n3220..3229    ; Grapheme_Base # No  [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN\n322A..3247    ; Grapheme_Base # So  [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO\n3248..324F    ; Grapheme_Base # No   [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE\n3250          ; Grapheme_Base # So       PARTNERSHIP SIGN\n3251..325F    ; Grapheme_Base # No  [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE\n3260..327F    ; Grapheme_Base # So  [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL\n3280..3289    ; Grapheme_Base # No  [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN\n328A..32B0    ; Grapheme_Base # So  [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT\n32B1..32BF    ; Grapheme_Base # No  [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY\n32C0..33FF    ; Grapheme_Base # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL\n3400..4DBF    ; Grapheme_Base # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF\n4DC0..4DFF    ; Grapheme_Base # So  [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION\n4E00..A014    ; Grapheme_Base # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E\nA015          ; Grapheme_Base # Lm       YI SYLLABLE WU\nA016..A48C    ; Grapheme_Base # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR\nA490..A4C6    ; Grapheme_Base # So  [55] YI RADICAL QOT..YI RADICAL KE\nA4D0..A4F7    ; Grapheme_Base # Lo  [40] LISU LETTER BA..LISU LETTER OE\nA4F8..A4FD    ; Grapheme_Base # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU\nA4FE..A4FF    ; Grapheme_Base # Po   [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP\nA500..A60B    ; Grapheme_Base # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG\nA60C          ; Grapheme_Base # Lm       VAI SYLLABLE LENGTHENER\nA60D..A60F    ; Grapheme_Base # Po   [3] VAI COMMA..VAI QUESTION MARK\nA610..A61F    ; Grapheme_Base # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG\nA620..A629    ; Grapheme_Base # Nd  [10] VAI DIGIT ZERO..VAI DIGIT NINE\nA62A..A62B    ; Grapheme_Base # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO\nA640..A66D    ; Grapheme_Base # L&  [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA66E          ; Grapheme_Base # Lo       CYRILLIC LETTER MULTIOCULAR O\nA673          ; Grapheme_Base # Po       SLAVONIC ASTERISK\nA67E          ; Grapheme_Base # Po       CYRILLIC KAVYKA\nA67F          ; Grapheme_Base # Lm       CYRILLIC PAYEROK\nA680..A69B    ; Grapheme_Base # L&  [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O\nA69C..A69D    ; Grapheme_Base # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA6A0..A6E5    ; Grapheme_Base # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI\nA6E6..A6EF    ; Grapheme_Base # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM\nA6F2..A6F7    ; Grapheme_Base # Po   [6] BAMUM NJAEMLI..BAMUM QUESTION MARK\nA700..A716    ; Grapheme_Base # Sk  [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR\nA717..A71F    ; Grapheme_Base # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK\nA720..A721    ; Grapheme_Base # Sk   [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE\nA722..A76F    ; Grapheme_Base # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON\nA770          ; Grapheme_Base # Lm       MODIFIER LETTER US\nA771..A787    ; Grapheme_Base # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T\nA788          ; Grapheme_Base # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT\nA789..A78A    ; Grapheme_Base # Sk   [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN\nA78B..A78E    ; Grapheme_Base # L&   [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT\nA78F          ; Grapheme_Base # Lo       LATIN LETTER SINOLOGICAL DOT\nA790..A7DC    ; Grapheme_Base # L&  [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F1..A7F4    ; Grapheme_Base # Lm   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F5..A7F6    ; Grapheme_Base # L&   [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H\nA7F7          ; Grapheme_Base # Lo       LATIN EPIGRAPHIC LETTER SIDEWAYS I\nA7F8..A7F9    ; Grapheme_Base # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA7FA          ; Grapheme_Base # L&       LATIN LETTER SMALL CAPITAL TURNED M\nA7FB..A801    ; Grapheme_Base # Lo   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I\nA803..A805    ; Grapheme_Base # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O\nA807..A80A    ; Grapheme_Base # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO\nA80C..A822    ; Grapheme_Base # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO\nA823..A824    ; Grapheme_Base # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\nA827          ; Grapheme_Base # Mc       SYLOTI NAGRI VOWEL SIGN OO\nA828..A82B    ; Grapheme_Base # So   [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4\nA830..A835    ; Grapheme_Base # No   [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS\nA836..A837    ; Grapheme_Base # So   [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK\nA838          ; Grapheme_Base # Sc       NORTH INDIC RUPEE MARK\nA839          ; Grapheme_Base # So       NORTH INDIC QUANTITY MARK\nA840..A873    ; Grapheme_Base # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU\nA874..A877    ; Grapheme_Base # Po   [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD\nA880..A881    ; Grapheme_Base # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\nA882..A8B3    ; Grapheme_Base # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA\nA8B4..A8C3    ; Grapheme_Base # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\nA8CE..A8CF    ; Grapheme_Base # Po   [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA\nA8D0..A8D9    ; Grapheme_Base # Nd  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE\nA8F2..A8F7    ; Grapheme_Base # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA\nA8F8..A8FA    ; Grapheme_Base # Po   [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET\nA8FB          ; Grapheme_Base # Lo       DEVANAGARI HEADSTROKE\nA8FC          ; Grapheme_Base # Po       DEVANAGARI SIGN SIDDHAM\nA8FD..A8FE    ; Grapheme_Base # Lo   [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY\nA900..A909    ; Grapheme_Base # Nd  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE\nA90A..A925    ; Grapheme_Base # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO\nA92E..A92F    ; Grapheme_Base # Po   [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA\nA930..A946    ; Grapheme_Base # Lo  [23] REJANG LETTER KA..REJANG LETTER A\nA952          ; Grapheme_Base # Mc       REJANG CONSONANT SIGN H\nA95F          ; Grapheme_Base # Po       REJANG SECTION MARK\nA960..A97C    ; Grapheme_Base # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\nA983          ; Grapheme_Base # Mc       JAVANESE SIGN WIGNYAN\nA984..A9B2    ; Grapheme_Base # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA\nA9B4..A9B5    ; Grapheme_Base # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\nA9BA..A9BB    ; Grapheme_Base # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\nA9BE..A9BF    ; Grapheme_Base # Mc   [2] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE CONSONANT SIGN CAKRA\nA9C1..A9CD    ; Grapheme_Base # Po  [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH\nA9CF          ; Grapheme_Base # Lm       JAVANESE PANGRANGKEP\nA9D0..A9D9    ; Grapheme_Base # Nd  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE\nA9DE..A9DF    ; Grapheme_Base # Po   [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN\nA9E0..A9E4    ; Grapheme_Base # Lo   [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA\nA9E6          ; Grapheme_Base # Lm       MYANMAR MODIFIER LETTER SHAN REDUPLICATION\nA9E7..A9EF    ; Grapheme_Base # Lo   [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA\nA9F0..A9F9    ; Grapheme_Base # Nd  [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE\nA9FA..A9FE    ; Grapheme_Base # Lo   [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA\nAA00..AA28    ; Grapheme_Base # Lo  [41] CHAM LETTER A..CHAM LETTER HA\nAA2F..AA30    ; Grapheme_Base # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\nAA33..AA34    ; Grapheme_Base # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\nAA40..AA42    ; Grapheme_Base # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG\nAA44..AA4B    ; Grapheme_Base # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS\nAA4D          ; Grapheme_Base # Mc       CHAM CONSONANT SIGN FINAL H\nAA50..AA59    ; Grapheme_Base # Nd  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE\nAA5C..AA5F    ; Grapheme_Base # Po   [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA\nAA60..AA6F    ; Grapheme_Base # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA\nAA70          ; Grapheme_Base # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION\nAA71..AA76    ; Grapheme_Base # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM\nAA77..AA79    ; Grapheme_Base # So   [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO\nAA7A          ; Grapheme_Base # Lo       MYANMAR LETTER AITON RA\nAA7B          ; Grapheme_Base # Mc       MYANMAR SIGN PAO KAREN TONE\nAA7D          ; Grapheme_Base # Mc       MYANMAR SIGN TAI LAING TONE-5\nAA7E..AAAF    ; Grapheme_Base # Lo  [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O\nAAB1          ; Grapheme_Base # Lo       TAI VIET VOWEL AA\nAAB5..AAB6    ; Grapheme_Base # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O\nAAB9..AABD    ; Grapheme_Base # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN\nAAC0          ; Grapheme_Base # Lo       TAI VIET TONE MAI NUENG\nAAC2          ; Grapheme_Base # Lo       TAI VIET TONE MAI SONG\nAADB..AADC    ; Grapheme_Base # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG\nAADD          ; Grapheme_Base # Lm       TAI VIET SYMBOL SAM\nAADE..AADF    ; Grapheme_Base # Po   [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI\nAAE0..AAEA    ; Grapheme_Base # Lo  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA\nAAEB          ; Grapheme_Base # Mc       MEETEI MAYEK VOWEL SIGN II\nAAEE..AAEF    ; Grapheme_Base # Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\nAAF0..AAF1    ; Grapheme_Base # Po   [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM\nAAF2          ; Grapheme_Base # Lo       MEETEI MAYEK ANJI\nAAF3..AAF4    ; Grapheme_Base # Lm   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK\nAAF5          ; Grapheme_Base # Mc       MEETEI MAYEK VOWEL SIGN VISARGA\nAB01..AB06    ; Grapheme_Base # Lo   [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO\nAB09..AB0E    ; Grapheme_Base # Lo   [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO\nAB11..AB16    ; Grapheme_Base # Lo   [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO\nAB20..AB26    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO\nAB28..AB2E    ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO\nAB30..AB5A    ; Grapheme_Base # L&  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG\nAB5B          ; Grapheme_Base # Sk       MODIFIER BREVE WITH INVERTED BREVE\nAB5C..AB5F    ; Grapheme_Base # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB60..AB68    ; Grapheme_Base # L&   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE\nAB69          ; Grapheme_Base # Lm       MODIFIER LETTER SMALL TURNED W\nAB6A..AB6B    ; Grapheme_Base # Sk   [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK\nAB70..ABBF    ; Grapheme_Base # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nABC0..ABE2    ; Grapheme_Base # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM\nABE3..ABE4    ; Grapheme_Base # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\nABE6..ABE7    ; Grapheme_Base # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\nABE9..ABEA    ; Grapheme_Base # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\nABEB          ; Grapheme_Base # Po       MEETEI MAYEK CHEIKHEI\nABEC          ; Grapheme_Base # Mc       MEETEI MAYEK LUM IYEK\nABF0..ABF9    ; Grapheme_Base # Nd  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE\nAC00..D7A3    ; Grapheme_Base # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH\nD7B0..D7C6    ; Grapheme_Base # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\nD7CB..D7FB    ; Grapheme_Base # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\nF900..FA6D    ; Grapheme_Base # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D\nFA70..FAD9    ; Grapheme_Base # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9\nFB00..FB06    ; Grapheme_Base # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; Grapheme_Base # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFB1D          ; Grapheme_Base # Lo       HEBREW LETTER YOD WITH HIRIQ\nFB1F..FB28    ; Grapheme_Base # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV\nFB29          ; Grapheme_Base # Sm       HEBREW LETTER ALTERNATIVE PLUS SIGN\nFB2A..FB36    ; Grapheme_Base # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH\nFB38..FB3C    ; Grapheme_Base # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH\nFB3E          ; Grapheme_Base # Lo       HEBREW LETTER MEM WITH DAGESH\nFB40..FB41    ; Grapheme_Base # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH\nFB43..FB44    ; Grapheme_Base # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH\nFB46..FBB1    ; Grapheme_Base # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM\nFBB2..FBC2    ; Grapheme_Base # Sk  [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE\nFBC3..FBD2    ; Grapheme_Base # So  [16] ARABIC LIGATURE JALLA WA-ALAA..ARABIC LIGATURE ALAYHI AR-RAHMAH\nFBD3..FD3D    ; Grapheme_Base # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM\nFD3E          ; Grapheme_Base # Pe       ORNATE LEFT PARENTHESIS\nFD3F          ; Grapheme_Base # Ps       ORNATE RIGHT PARENTHESIS\nFD40..FD4F    ; Grapheme_Base # So  [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH\nFD50..FD8F    ; Grapheme_Base # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM\nFD90..FD91    ; Grapheme_Base # So   [2] ARABIC LIGATURE RAHMATU ALLAAHI ALAYH..ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA\nFD92..FDC7    ; Grapheme_Base # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM\nFDC8..FDCF    ; Grapheme_Base # So   [8] ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA..ARABIC LIGATURE SALAAMUHU ALAYNAA\nFDF0..FDFB    ; Grapheme_Base # Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU\nFDFC          ; Grapheme_Base # Sc       RIAL SIGN\nFDFD..FDFF    ; Grapheme_Base # So   [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL\nFE10..FE16    ; Grapheme_Base # Po   [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK\nFE17          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET\nFE18          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET\nFE19          ; Grapheme_Base # Po       PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS\nFE30          ; Grapheme_Base # Po       PRESENTATION FORM FOR VERTICAL TWO DOT LEADER\nFE31..FE32    ; Grapheme_Base # Pd   [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH\nFE33..FE34    ; Grapheme_Base # Pc   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE\nFE35          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS\nFE36          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS\nFE37          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET\nFE38          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET\nFE39          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET\nFE3A          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET\nFE3B          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET\nFE3C          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET\nFE3D          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET\nFE3E          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET\nFE3F          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET\nFE40          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET\nFE41          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET\nFE42          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET\nFE43          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET\nFE44          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET\nFE45..FE46    ; Grapheme_Base # Po   [2] SESAME DOT..WHITE SESAME DOT\nFE47          ; Grapheme_Base # Ps       PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET\nFE48          ; Grapheme_Base # Pe       PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET\nFE49..FE4C    ; Grapheme_Base # Po   [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE\nFE4D..FE4F    ; Grapheme_Base # Pc   [3] DASHED LOW LINE..WAVY LOW LINE\nFE50..FE52    ; Grapheme_Base # Po   [3] SMALL COMMA..SMALL FULL STOP\nFE54..FE57    ; Grapheme_Base # Po   [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK\nFE58          ; Grapheme_Base # Pd       SMALL EM DASH\nFE59          ; Grapheme_Base # Ps       SMALL LEFT PARENTHESIS\nFE5A          ; Grapheme_Base # Pe       SMALL RIGHT PARENTHESIS\nFE5B          ; Grapheme_Base # Ps       SMALL LEFT CURLY BRACKET\nFE5C          ; Grapheme_Base # Pe       SMALL RIGHT CURLY BRACKET\nFE5D          ; Grapheme_Base # Ps       SMALL LEFT TORTOISE SHELL BRACKET\nFE5E          ; Grapheme_Base # Pe       SMALL RIGHT TORTOISE SHELL BRACKET\nFE5F..FE61    ; Grapheme_Base # Po   [3] SMALL NUMBER SIGN..SMALL ASTERISK\nFE62          ; Grapheme_Base # Sm       SMALL PLUS SIGN\nFE63          ; Grapheme_Base # Pd       SMALL HYPHEN-MINUS\nFE64..FE66    ; Grapheme_Base # Sm   [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN\nFE68          ; Grapheme_Base # Po       SMALL REVERSE SOLIDUS\nFE69          ; Grapheme_Base # Sc       SMALL DOLLAR SIGN\nFE6A..FE6B    ; Grapheme_Base # Po   [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT\nFE70..FE74    ; Grapheme_Base # Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM\nFE76..FEFC    ; Grapheme_Base # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM\nFF01..FF03    ; Grapheme_Base # Po   [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN\nFF04          ; Grapheme_Base # Sc       FULLWIDTH DOLLAR SIGN\nFF05..FF07    ; Grapheme_Base # Po   [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE\nFF08          ; Grapheme_Base # Ps       FULLWIDTH LEFT PARENTHESIS\nFF09          ; Grapheme_Base # Pe       FULLWIDTH RIGHT PARENTHESIS\nFF0A          ; Grapheme_Base # Po       FULLWIDTH ASTERISK\nFF0B          ; Grapheme_Base # Sm       FULLWIDTH PLUS SIGN\nFF0C          ; Grapheme_Base # Po       FULLWIDTH COMMA\nFF0D          ; Grapheme_Base # Pd       FULLWIDTH HYPHEN-MINUS\nFF0E..FF0F    ; Grapheme_Base # Po   [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS\nFF10..FF19    ; Grapheme_Base # Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE\nFF1A..FF1B    ; Grapheme_Base # Po   [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON\nFF1C..FF1E    ; Grapheme_Base # Sm   [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN\nFF1F..FF20    ; Grapheme_Base # Po   [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT\nFF21..FF3A    ; Grapheme_Base # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\nFF3B          ; Grapheme_Base # Ps       FULLWIDTH LEFT SQUARE BRACKET\nFF3C          ; Grapheme_Base # Po       FULLWIDTH REVERSE SOLIDUS\nFF3D          ; Grapheme_Base # Pe       FULLWIDTH RIGHT SQUARE BRACKET\nFF3E          ; Grapheme_Base # Sk       FULLWIDTH CIRCUMFLEX ACCENT\nFF3F          ; Grapheme_Base # Pc       FULLWIDTH LOW LINE\nFF40          ; Grapheme_Base # Sk       FULLWIDTH GRAVE ACCENT\nFF41..FF5A    ; Grapheme_Base # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\nFF5B          ; Grapheme_Base # Ps       FULLWIDTH LEFT CURLY BRACKET\nFF5C          ; Grapheme_Base # Sm       FULLWIDTH VERTICAL LINE\nFF5D          ; Grapheme_Base # Pe       FULLWIDTH RIGHT CURLY BRACKET\nFF5E          ; Grapheme_Base # Sm       FULLWIDTH TILDE\nFF5F          ; Grapheme_Base # Ps       FULLWIDTH LEFT WHITE PARENTHESIS\nFF60          ; Grapheme_Base # Pe       FULLWIDTH RIGHT WHITE PARENTHESIS\nFF61          ; Grapheme_Base # Po       HALFWIDTH IDEOGRAPHIC FULL STOP\nFF62          ; Grapheme_Base # Ps       HALFWIDTH LEFT CORNER BRACKET\nFF63          ; Grapheme_Base # Pe       HALFWIDTH RIGHT CORNER BRACKET\nFF64..FF65    ; Grapheme_Base # Po   [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT\nFF66..FF6F    ; Grapheme_Base # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU\nFF70          ; Grapheme_Base # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF71..FF9D    ; Grapheme_Base # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N\nFFA0..FFBE    ; Grapheme_Base # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH\nFFC2..FFC7    ; Grapheme_Base # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E\nFFCA..FFCF    ; Grapheme_Base # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE\nFFD2..FFD7    ; Grapheme_Base # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU\nFFDA..FFDC    ; Grapheme_Base # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I\nFFE0..FFE1    ; Grapheme_Base # Sc   [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN\nFFE2          ; Grapheme_Base # Sm       FULLWIDTH NOT SIGN\nFFE3          ; Grapheme_Base # Sk       FULLWIDTH MACRON\nFFE4          ; Grapheme_Base # So       FULLWIDTH BROKEN BAR\nFFE5..FFE6    ; Grapheme_Base # Sc   [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN\nFFE8          ; Grapheme_Base # So       HALFWIDTH FORMS LIGHT VERTICAL\nFFE9..FFEC    ; Grapheme_Base # Sm   [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW\nFFED..FFEE    ; Grapheme_Base # So   [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE\nFFFC..FFFD    ; Grapheme_Base # So   [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER\n10000..1000B  ; Grapheme_Base # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE\n1000D..10026  ; Grapheme_Base # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO\n10028..1003A  ; Grapheme_Base # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO\n1003C..1003D  ; Grapheme_Base # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE\n1003F..1004D  ; Grapheme_Base # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO\n10050..1005D  ; Grapheme_Base # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089\n10080..100FA  ; Grapheme_Base # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305\n10100..10102  ; Grapheme_Base # Po   [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK\n10107..10133  ; Grapheme_Base # No  [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND\n10137..1013F  ; Grapheme_Base # So   [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT\n10140..10174  ; Grapheme_Base # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS\n10175..10178  ; Grapheme_Base # No   [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN\n10179..10189  ; Grapheme_Base # So  [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN\n1018A..1018B  ; Grapheme_Base # No   [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN\n1018C..1018E  ; Grapheme_Base # So   [3] GREEK SINUSOID SIGN..NOMISMA SIGN\n10190..1019C  ; Grapheme_Base # So  [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL\n101A0         ; Grapheme_Base # So       GREEK SYMBOL TAU RHO\n101D0..101FC  ; Grapheme_Base # So  [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND\n10280..1029C  ; Grapheme_Base # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X\n102A0..102D0  ; Grapheme_Base # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3\n102E1..102FB  ; Grapheme_Base # No  [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED\n10300..1031F  ; Grapheme_Base # Lo  [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS\n10320..10323  ; Grapheme_Base # No   [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY\n1032D..10340  ; Grapheme_Base # Lo  [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA\n10341         ; Grapheme_Base # Nl       GOTHIC LETTER NINETY\n10342..10349  ; Grapheme_Base # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL\n1034A         ; Grapheme_Base # Nl       GOTHIC LETTER NINE HUNDRED\n10350..10375  ; Grapheme_Base # Lo  [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA\n10380..1039D  ; Grapheme_Base # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU\n1039F         ; Grapheme_Base # Po       UGARITIC WORD DIVIDER\n103A0..103C3  ; Grapheme_Base # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA\n103C8..103CF  ; Grapheme_Base # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH\n103D0         ; Grapheme_Base # Po       OLD PERSIAN WORD DIVIDER\n103D1..103D5  ; Grapheme_Base # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED\n10400..1044F  ; Grapheme_Base # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW\n10450..1049D  ; Grapheme_Base # Lo  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO\n104A0..104A9  ; Grapheme_Base # Nd  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE\n104B0..104D3  ; Grapheme_Base # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n104D8..104FB  ; Grapheme_Base # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10500..10527  ; Grapheme_Base # Lo  [40] ELBASAN LETTER A..ELBASAN LETTER KHE\n10530..10563  ; Grapheme_Base # Lo  [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW\n1056F         ; Grapheme_Base # Po       CAUCASIAN ALBANIAN CITATION MARK\n10570..1057A  ; Grapheme_Base # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; Grapheme_Base # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; Grapheme_Base # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; Grapheme_Base # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10597..105A1  ; Grapheme_Base # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; Grapheme_Base # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; Grapheme_Base # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; Grapheme_Base # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n105C0..105F3  ; Grapheme_Base # Lo  [52] TODHRI LETTER A..TODHRI LETTER OO\n10600..10736  ; Grapheme_Base # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664\n10740..10755  ; Grapheme_Base # Lo  [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE\n10760..10767  ; Grapheme_Base # Lo   [8] LINEAR A SIGN A800..LINEAR A SIGN A807\n10780..10785  ; Grapheme_Base # Lm   [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; Grapheme_Base # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; Grapheme_Base # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n10800..10805  ; Grapheme_Base # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA\n10808         ; Grapheme_Base # Lo       CYPRIOT SYLLABLE JO\n1080A..10835  ; Grapheme_Base # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO\n10837..10838  ; Grapheme_Base # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE\n1083C         ; Grapheme_Base # Lo       CYPRIOT SYLLABLE ZA\n1083F..10855  ; Grapheme_Base # Lo  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW\n10857         ; Grapheme_Base # Po       IMPERIAL ARAMAIC SECTION SIGN\n10858..1085F  ; Grapheme_Base # No   [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND\n10860..10876  ; Grapheme_Base # Lo  [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW\n10877..10878  ; Grapheme_Base # So   [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON\n10879..1087F  ; Grapheme_Base # No   [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY\n10880..1089E  ; Grapheme_Base # Lo  [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW\n108A7..108AF  ; Grapheme_Base # No   [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED\n108E0..108F2  ; Grapheme_Base # Lo  [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH\n108F4..108F5  ; Grapheme_Base # Lo   [2] HATRAN LETTER SHIN..HATRAN LETTER TAW\n108FB..108FF  ; Grapheme_Base # No   [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED\n10900..10915  ; Grapheme_Base # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU\n10916..1091B  ; Grapheme_Base # No   [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE\n1091F         ; Grapheme_Base # Po       PHOENICIAN WORD SEPARATOR\n10920..10939  ; Grapheme_Base # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C\n1093F         ; Grapheme_Base # Po       LYDIAN TRIANGULAR MARK\n10940..10959  ; Grapheme_Base # Lo  [26] SIDETIC LETTER N01..SIDETIC LETTER N26\n10980..109B7  ; Grapheme_Base # Lo  [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA\n109BC..109BD  ; Grapheme_Base # No   [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF\n109BE..109BF  ; Grapheme_Base # Lo   [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN\n109C0..109CF  ; Grapheme_Base # No  [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY\n109D2..109FF  ; Grapheme_Base # No  [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS\n10A00         ; Grapheme_Base # Lo       KHAROSHTHI LETTER A\n10A10..10A13  ; Grapheme_Base # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA\n10A15..10A17  ; Grapheme_Base # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA\n10A19..10A35  ; Grapheme_Base # Lo  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA\n10A40..10A48  ; Grapheme_Base # No   [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF\n10A50..10A58  ; Grapheme_Base # Po   [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES\n10A60..10A7C  ; Grapheme_Base # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH\n10A7D..10A7E  ; Grapheme_Base # No   [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY\n10A7F         ; Grapheme_Base # Po       OLD SOUTH ARABIAN NUMERIC INDICATOR\n10A80..10A9C  ; Grapheme_Base # Lo  [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH\n10A9D..10A9F  ; Grapheme_Base # No   [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY\n10AC0..10AC7  ; Grapheme_Base # Lo   [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW\n10AC8         ; Grapheme_Base # So       MANICHAEAN SIGN UD\n10AC9..10AE4  ; Grapheme_Base # Lo  [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW\n10AEB..10AEF  ; Grapheme_Base # No   [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED\n10AF0..10AF6  ; Grapheme_Base # Po   [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER\n10B00..10B35  ; Grapheme_Base # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE\n10B39..10B3F  ; Grapheme_Base # Po   [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION\n10B40..10B55  ; Grapheme_Base # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW\n10B58..10B5F  ; Grapheme_Base # No   [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND\n10B60..10B72  ; Grapheme_Base # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW\n10B78..10B7F  ; Grapheme_Base # No   [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND\n10B80..10B91  ; Grapheme_Base # Lo  [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW\n10B99..10B9C  ; Grapheme_Base # Po   [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT\n10BA9..10BAF  ; Grapheme_Base # No   [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED\n10C00..10C48  ; Grapheme_Base # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH\n10C80..10CB2  ; Grapheme_Base # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10CC0..10CF2  ; Grapheme_Base # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10CFA..10CFF  ; Grapheme_Base # No   [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND\n10D00..10D23  ; Grapheme_Base # Lo  [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA\n10D30..10D39  ; Grapheme_Base # Nd  [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE\n10D40..10D49  ; Grapheme_Base # Nd  [10] GARAY DIGIT ZERO..GARAY DIGIT NINE\n10D4A..10D4D  ; Grapheme_Base # Lo   [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE\n10D4E         ; Grapheme_Base # Lm       GARAY VOWEL LENGTH MARK\n10D4F         ; Grapheme_Base # Lo       GARAY SUKUN\n10D50..10D65  ; Grapheme_Base # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n10D6E         ; Grapheme_Base # Pd       GARAY HYPHEN\n10D6F         ; Grapheme_Base # Lm       GARAY REDUPLICATION MARK\n10D70..10D85  ; Grapheme_Base # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n10D8E..10D8F  ; Grapheme_Base # Sm   [2] GARAY PLUS SIGN..GARAY MINUS SIGN\n10E60..10E7E  ; Grapheme_Base # No  [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS\n10E80..10EA9  ; Grapheme_Base # Lo  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET\n10EAD         ; Grapheme_Base # Pd       YEZIDI HYPHENATION MARK\n10EB0..10EB1  ; Grapheme_Base # Lo   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE\n10EC2..10EC4  ; Grapheme_Base # Lo   [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW\n10EC5         ; Grapheme_Base # Lm       ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW\n10EC6..10EC7  ; Grapheme_Base # Lo   [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW\n10ED0         ; Grapheme_Base # Po       ARABIC BIBLICAL END OF VERSE\n10ED1..10ED8  ; Grapheme_Base # So   [8] ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM..ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH\n10F00..10F1C  ; Grapheme_Base # Lo  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL\n10F1D..10F26  ; Grapheme_Base # No  [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF\n10F27         ; Grapheme_Base # Lo       OLD SOGDIAN LIGATURE AYIN-DALETH\n10F30..10F45  ; Grapheme_Base # Lo  [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN\n10F51..10F54  ; Grapheme_Base # No   [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED\n10F55..10F59  ; Grapheme_Base # Po   [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT\n10F70..10F81  ; Grapheme_Base # Lo  [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH\n10F86..10F89  ; Grapheme_Base # Po   [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS\n10FB0..10FC4  ; Grapheme_Base # Lo  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW\n10FC5..10FCB  ; Grapheme_Base # No   [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED\n10FE0..10FF6  ; Grapheme_Base # Lo  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH\n11000         ; Grapheme_Base # Mc       BRAHMI SIGN CANDRABINDU\n11002         ; Grapheme_Base # Mc       BRAHMI SIGN VISARGA\n11003..11037  ; Grapheme_Base # Lo  [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA\n11047..1104D  ; Grapheme_Base # Po   [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS\n11052..11065  ; Grapheme_Base # No  [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND\n11066..1106F  ; Grapheme_Base # Nd  [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE\n11071..11072  ; Grapheme_Base # Lo   [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O\n11075         ; Grapheme_Base # Lo       BRAHMI LETTER OLD TAMIL LLA\n11082         ; Grapheme_Base # Mc       KAITHI SIGN VISARGA\n11083..110AF  ; Grapheme_Base # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA\n110B0..110B2  ; Grapheme_Base # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\n110B7..110B8  ; Grapheme_Base # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\n110BB..110BC  ; Grapheme_Base # Po   [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN\n110BE..110C1  ; Grapheme_Base # Po   [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA\n110D0..110E8  ; Grapheme_Base # Lo  [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE\n110F0..110F9  ; Grapheme_Base # Nd  [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE\n11103..11126  ; Grapheme_Base # Lo  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA\n1112C         ; Grapheme_Base # Mc       CHAKMA VOWEL SIGN E\n11136..1113F  ; Grapheme_Base # Nd  [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE\n11140..11143  ; Grapheme_Base # Po   [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK\n11144         ; Grapheme_Base # Lo       CHAKMA LETTER LHAA\n11145..11146  ; Grapheme_Base # Mc   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI\n11147         ; Grapheme_Base # Lo       CHAKMA LETTER VAA\n11150..11172  ; Grapheme_Base # Lo  [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA\n11174..11175  ; Grapheme_Base # Po   [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK\n11176         ; Grapheme_Base # Lo       MAHAJANI LIGATURE SHRI\n11182         ; Grapheme_Base # Mc       SHARADA SIGN VISARGA\n11183..111B2  ; Grapheme_Base # Lo  [48] SHARADA LETTER A..SHARADA LETTER HA\n111B3..111B5  ; Grapheme_Base # Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\n111BF         ; Grapheme_Base # Mc       SHARADA VOWEL SIGN AU\n111C1..111C4  ; Grapheme_Base # Lo   [4] SHARADA SIGN AVAGRAHA..SHARADA OM\n111C5..111C8  ; Grapheme_Base # Po   [4] SHARADA DANDA..SHARADA SEPARATOR\n111CD         ; Grapheme_Base # Po       SHARADA SUTRA MARK\n111CE         ; Grapheme_Base # Mc       SHARADA VOWEL SIGN PRISHTHAMATRA E\n111D0..111D9  ; Grapheme_Base # Nd  [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE\n111DA         ; Grapheme_Base # Lo       SHARADA EKAM\n111DB         ; Grapheme_Base # Po       SHARADA SIGN SIDDHAM\n111DC         ; Grapheme_Base # Lo       SHARADA HEADSTROKE\n111DD..111DF  ; Grapheme_Base # Po   [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2\n111E1..111F4  ; Grapheme_Base # No  [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND\n11200..11211  ; Grapheme_Base # Lo  [18] KHOJKI LETTER A..KHOJKI LETTER JJA\n11213..1122B  ; Grapheme_Base # Lo  [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA\n1122C..1122E  ; Grapheme_Base # Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\n11232..11233  ; Grapheme_Base # Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\n11238..1123D  ; Grapheme_Base # Po   [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN\n1123F..11240  ; Grapheme_Base # Lo   [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I\n11280..11286  ; Grapheme_Base # Lo   [7] MULTANI LETTER A..MULTANI LETTER GA\n11288         ; Grapheme_Base # Lo       MULTANI LETTER GHA\n1128A..1128D  ; Grapheme_Base # Lo   [4] MULTANI LETTER CA..MULTANI LETTER JJA\n1128F..1129D  ; Grapheme_Base # Lo  [15] MULTANI LETTER NYA..MULTANI LETTER BA\n1129F..112A8  ; Grapheme_Base # Lo  [10] MULTANI LETTER BHA..MULTANI LETTER RHA\n112A9         ; Grapheme_Base # Po       MULTANI SECTION MARK\n112B0..112DE  ; Grapheme_Base # Lo  [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA\n112E0..112E2  ; Grapheme_Base # Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\n112F0..112F9  ; Grapheme_Base # Nd  [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE\n11302..11303  ; Grapheme_Base # Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\n11305..1130C  ; Grapheme_Base # Lo   [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L\n1130F..11310  ; Grapheme_Base # Lo   [2] GRANTHA LETTER EE..GRANTHA LETTER AI\n11313..11328  ; Grapheme_Base # Lo  [22] GRANTHA LETTER OO..GRANTHA LETTER NA\n1132A..11330  ; Grapheme_Base # Lo   [7] GRANTHA LETTER PA..GRANTHA LETTER RA\n11332..11333  ; Grapheme_Base # Lo   [2] GRANTHA LETTER LA..GRANTHA LETTER LLA\n11335..11339  ; Grapheme_Base # Lo   [5] GRANTHA LETTER VA..GRANTHA LETTER HA\n1133D         ; Grapheme_Base # Lo       GRANTHA SIGN AVAGRAHA\n1133F         ; Grapheme_Base # Mc       GRANTHA VOWEL SIGN I\n11341..11344  ; Grapheme_Base # Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\n11347..11348  ; Grapheme_Base # Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\n1134B..1134C  ; Grapheme_Base # Mc   [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU\n11350         ; Grapheme_Base # Lo       GRANTHA OM\n1135D..11361  ; Grapheme_Base # Lo   [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL\n11362..11363  ; Grapheme_Base # Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\n11380..11389  ; Grapheme_Base # Lo  [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL\n1138B         ; Grapheme_Base # Lo       TULU-TIGALARI LETTER EE\n1138E         ; Grapheme_Base # Lo       TULU-TIGALARI LETTER AI\n11390..113B5  ; Grapheme_Base # Lo  [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA\n113B7         ; Grapheme_Base # Lo       TULU-TIGALARI SIGN AVAGRAHA\n113B9..113BA  ; Grapheme_Base # Mc   [2] TULU-TIGALARI VOWEL SIGN I..TULU-TIGALARI VOWEL SIGN II\n113CA         ; Grapheme_Base # Mc       TULU-TIGALARI SIGN CANDRA ANUNASIKA\n113CC..113CD  ; Grapheme_Base # Mc   [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA\n113D1         ; Grapheme_Base # Lo       TULU-TIGALARI REPHA\n113D3         ; Grapheme_Base # Lo       TULU-TIGALARI SIGN PLUTA\n113D4..113D5  ; Grapheme_Base # Po   [2] TULU-TIGALARI DANDA..TULU-TIGALARI DOUBLE DANDA\n113D7..113D8  ; Grapheme_Base # Po   [2] TULU-TIGALARI SIGN OM PUSHPIKA..TULU-TIGALARI SIGN SHRII PUSHPIKA\n11400..11434  ; Grapheme_Base # Lo  [53] NEWA LETTER A..NEWA LETTER HA\n11435..11437  ; Grapheme_Base # Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\n11440..11441  ; Grapheme_Base # Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\n11445         ; Grapheme_Base # Mc       NEWA SIGN VISARGA\n11447..1144A  ; Grapheme_Base # Lo   [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI\n1144B..1144F  ; Grapheme_Base # Po   [5] NEWA DANDA..NEWA ABBREVIATION SIGN\n11450..11459  ; Grapheme_Base # Nd  [10] NEWA DIGIT ZERO..NEWA DIGIT NINE\n1145A..1145B  ; Grapheme_Base # Po   [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK\n1145D         ; Grapheme_Base # Po       NEWA INSERTION SIGN\n1145F..11461  ; Grapheme_Base # Lo   [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA\n11480..114AF  ; Grapheme_Base # Lo  [48] TIRHUTA ANJI..TIRHUTA LETTER HA\n114B1..114B2  ; Grapheme_Base # Mc   [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II\n114B9         ; Grapheme_Base # Mc       TIRHUTA VOWEL SIGN E\n114BB..114BC  ; Grapheme_Base # Mc   [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O\n114BE         ; Grapheme_Base # Mc       TIRHUTA VOWEL SIGN AU\n114C1         ; Grapheme_Base # Mc       TIRHUTA SIGN VISARGA\n114C4..114C5  ; Grapheme_Base # Lo   [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG\n114C6         ; Grapheme_Base # Po       TIRHUTA ABBREVIATION SIGN\n114C7         ; Grapheme_Base # Lo       TIRHUTA OM\n114D0..114D9  ; Grapheme_Base # Nd  [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE\n11580..115AE  ; Grapheme_Base # Lo  [47] SIDDHAM LETTER A..SIDDHAM LETTER HA\n115B0..115B1  ; Grapheme_Base # Mc   [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II\n115B8..115BB  ; Grapheme_Base # Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\n115BE         ; Grapheme_Base # Mc       SIDDHAM SIGN VISARGA\n115C1..115D7  ; Grapheme_Base # Po  [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES\n115D8..115DB  ; Grapheme_Base # Lo   [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U\n11600..1162F  ; Grapheme_Base # Lo  [48] MODI LETTER A..MODI LETTER LLA\n11630..11632  ; Grapheme_Base # Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\n1163B..1163C  ; Grapheme_Base # Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\n1163E         ; Grapheme_Base # Mc       MODI SIGN VISARGA\n11641..11643  ; Grapheme_Base # Po   [3] MODI DANDA..MODI ABBREVIATION SIGN\n11644         ; Grapheme_Base # Lo       MODI SIGN HUVA\n11650..11659  ; Grapheme_Base # Nd  [10] MODI DIGIT ZERO..MODI DIGIT NINE\n11660..1166C  ; Grapheme_Base # Po  [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT\n11680..116AA  ; Grapheme_Base # Lo  [43] TAKRI LETTER A..TAKRI LETTER RRA\n116AC         ; Grapheme_Base # Mc       TAKRI SIGN VISARGA\n116AE..116AF  ; Grapheme_Base # Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\n116B8         ; Grapheme_Base # Lo       TAKRI LETTER ARCHAIC KHA\n116B9         ; Grapheme_Base # Po       TAKRI ABBREVIATION SIGN\n116C0..116C9  ; Grapheme_Base # Nd  [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE\n116D0..116E3  ; Grapheme_Base # Nd  [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE\n11700..1171A  ; Grapheme_Base # Lo  [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA\n1171E         ; Grapheme_Base # Mc       AHOM CONSONANT SIGN MEDIAL RA\n11720..11721  ; Grapheme_Base # Mc   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA\n11726         ; Grapheme_Base # Mc       AHOM VOWEL SIGN E\n11730..11739  ; Grapheme_Base # Nd  [10] AHOM DIGIT ZERO..AHOM DIGIT NINE\n1173A..1173B  ; Grapheme_Base # No   [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY\n1173C..1173E  ; Grapheme_Base # Po   [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI\n1173F         ; Grapheme_Base # So       AHOM SYMBOL VI\n11740..11746  ; Grapheme_Base # Lo   [7] AHOM LETTER CA..AHOM LETTER LLA\n11800..1182B  ; Grapheme_Base # Lo  [44] DOGRA LETTER A..DOGRA LETTER RRA\n1182C..1182E  ; Grapheme_Base # Mc   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II\n11838         ; Grapheme_Base # Mc       DOGRA SIGN VISARGA\n1183B         ; Grapheme_Base # Po       DOGRA ABBREVIATION SIGN\n118A0..118DF  ; Grapheme_Base # L&  [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n118E0..118E9  ; Grapheme_Base # Nd  [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE\n118EA..118F2  ; Grapheme_Base # No   [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY\n118FF..11906  ; Grapheme_Base # Lo   [8] WARANG CITI OM..DIVES AKURU LETTER E\n11909         ; Grapheme_Base # Lo       DIVES AKURU LETTER O\n1190C..11913  ; Grapheme_Base # Lo   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA\n11915..11916  ; Grapheme_Base # Lo   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA\n11918..1192F  ; Grapheme_Base # Lo  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA\n11931..11935  ; Grapheme_Base # Mc   [5] DIVES AKURU VOWEL SIGN I..DIVES AKURU VOWEL SIGN E\n11937..11938  ; Grapheme_Base # Mc   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O\n1193F         ; Grapheme_Base # Lo       DIVES AKURU PREFIXED NASAL SIGN\n11940         ; Grapheme_Base # Mc       DIVES AKURU MEDIAL YA\n11941         ; Grapheme_Base # Lo       DIVES AKURU INITIAL RA\n11942         ; Grapheme_Base # Mc       DIVES AKURU MEDIAL RA\n11944..11946  ; Grapheme_Base # Po   [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK\n11950..11959  ; Grapheme_Base # Nd  [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE\n119A0..119A7  ; Grapheme_Base # Lo   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR\n119AA..119D0  ; Grapheme_Base # Lo  [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA\n119D1..119D3  ; Grapheme_Base # Mc   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II\n119DC..119DF  ; Grapheme_Base # Mc   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA\n119E1         ; Grapheme_Base # Lo       NANDINAGARI SIGN AVAGRAHA\n119E2         ; Grapheme_Base # Po       NANDINAGARI SIGN SIDDHAM\n119E3         ; Grapheme_Base # Lo       NANDINAGARI HEADSTROKE\n119E4         ; Grapheme_Base # Mc       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E\n11A00         ; Grapheme_Base # Lo       ZANABAZAR SQUARE LETTER A\n11A0B..11A32  ; Grapheme_Base # Lo  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA\n11A39         ; Grapheme_Base # Mc       ZANABAZAR SQUARE SIGN VISARGA\n11A3A         ; Grapheme_Base # Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\n11A3F..11A46  ; Grapheme_Base # Po   [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK\n11A50         ; Grapheme_Base # Lo       SOYOMBO LETTER A\n11A57..11A58  ; Grapheme_Base # Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\n11A5C..11A89  ; Grapheme_Base # Lo  [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA\n11A97         ; Grapheme_Base # Mc       SOYOMBO SIGN VISARGA\n11A9A..11A9C  ; Grapheme_Base # Po   [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD\n11A9D         ; Grapheme_Base # Lo       SOYOMBO MARK PLUTA\n11A9E..11AA2  ; Grapheme_Base # Po   [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2\n11AB0..11AF8  ; Grapheme_Base # Lo  [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL\n11B00..11B09  ; Grapheme_Base # Po  [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU\n11B61         ; Grapheme_Base # Mc       SHARADA VOWEL SIGN OOE\n11B65         ; Grapheme_Base # Mc       SHARADA VOWEL SIGN SHORT O\n11B67         ; Grapheme_Base # Mc       SHARADA VOWEL SIGN CANDRA O\n11BC0..11BE0  ; Grapheme_Base # Lo  [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO\n11BE1         ; Grapheme_Base # Po       SUNUWAR SIGN PVO\n11BF0..11BF9  ; Grapheme_Base # Nd  [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE\n11C00..11C08  ; Grapheme_Base # Lo   [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L\n11C0A..11C2E  ; Grapheme_Base # Lo  [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA\n11C2F         ; Grapheme_Base # Mc       BHAIKSUKI VOWEL SIGN AA\n11C3E         ; Grapheme_Base # Mc       BHAIKSUKI SIGN VISARGA\n11C40         ; Grapheme_Base # Lo       BHAIKSUKI SIGN AVAGRAHA\n11C41..11C45  ; Grapheme_Base # Po   [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2\n11C50..11C59  ; Grapheme_Base # Nd  [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE\n11C5A..11C6C  ; Grapheme_Base # No  [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK\n11C70..11C71  ; Grapheme_Base # Po   [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD\n11C72..11C8F  ; Grapheme_Base # Lo  [30] MARCHEN LETTER KA..MARCHEN LETTER A\n11CA9         ; Grapheme_Base # Mc       MARCHEN SUBJOINED LETTER YA\n11CB1         ; Grapheme_Base # Mc       MARCHEN VOWEL SIGN I\n11CB4         ; Grapheme_Base # Mc       MARCHEN VOWEL SIGN O\n11D00..11D06  ; Grapheme_Base # Lo   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E\n11D08..11D09  ; Grapheme_Base # Lo   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O\n11D0B..11D30  ; Grapheme_Base # Lo  [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA\n11D46         ; Grapheme_Base # Lo       MASARAM GONDI REPHA\n11D50..11D59  ; Grapheme_Base # Nd  [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE\n11D60..11D65  ; Grapheme_Base # Lo   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU\n11D67..11D68  ; Grapheme_Base # Lo   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI\n11D6A..11D89  ; Grapheme_Base # Lo  [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA\n11D8A..11D8E  ; Grapheme_Base # Mc   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU\n11D93..11D94  ; Grapheme_Base # Mc   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU\n11D96         ; Grapheme_Base # Mc       GUNJALA GONDI SIGN VISARGA\n11D98         ; Grapheme_Base # Lo       GUNJALA GONDI OM\n11DA0..11DA9  ; Grapheme_Base # Nd  [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE\n11DB0..11DD8  ; Grapheme_Base # Lo  [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH\n11DD9         ; Grapheme_Base # Lm       TOLONG SIKI SIGN SELA\n11DDA..11DDB  ; Grapheme_Base # Lo   [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA\n11DE0..11DE9  ; Grapheme_Base # Nd  [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE\n11EE0..11EF2  ; Grapheme_Base # Lo  [19] MAKASAR LETTER KA..MAKASAR ANGKA\n11EF5..11EF6  ; Grapheme_Base # Mc   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O\n11EF7..11EF8  ; Grapheme_Base # Po   [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION\n11F02         ; Grapheme_Base # Lo       KAWI SIGN REPHA\n11F03         ; Grapheme_Base # Mc       KAWI SIGN VISARGA\n11F04..11F10  ; Grapheme_Base # Lo  [13] KAWI LETTER A..KAWI LETTER O\n11F12..11F33  ; Grapheme_Base # Lo  [34] KAWI LETTER KA..KAWI LETTER JNYA\n11F34..11F35  ; Grapheme_Base # Mc   [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA\n11F3E..11F3F  ; Grapheme_Base # Mc   [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI\n11F43..11F4F  ; Grapheme_Base # Po  [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL\n11F50..11F59  ; Grapheme_Base # Nd  [10] KAWI DIGIT ZERO..KAWI DIGIT NINE\n11FB0         ; Grapheme_Base # Lo       LISU LETTER YHA\n11FC0..11FD4  ; Grapheme_Base # No  [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH\n11FD5..11FDC  ; Grapheme_Base # So   [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI\n11FDD..11FE0  ; Grapheme_Base # Sc   [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN\n11FE1..11FF1  ; Grapheme_Base # So  [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA\n11FFF         ; Grapheme_Base # Po       TAMIL PUNCTUATION END OF TEXT\n12000..12399  ; Grapheme_Base # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U\n12400..1246E  ; Grapheme_Base # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM\n12470..12474  ; Grapheme_Base # Po   [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON\n12480..12543  ; Grapheme_Base # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU\n12F90..12FF0  ; Grapheme_Base # Lo  [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114\n12FF1..12FF2  ; Grapheme_Base # Po   [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302\n13000..1342F  ; Grapheme_Base # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D\n13441..13446  ; Grapheme_Base # Lo   [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN\n13460..143FA  ; Grapheme_Base # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA\n14400..14646  ; Grapheme_Base # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530\n16100..1611D  ; Grapheme_Base # Lo  [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA\n1612A..1612C  ; Grapheme_Base # Mc   [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA\n16130..16139  ; Grapheme_Base # Nd  [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE\n16800..16A38  ; Grapheme_Base # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ\n16A40..16A5E  ; Grapheme_Base # Lo  [31] MRO LETTER TA..MRO LETTER TEK\n16A60..16A69  ; Grapheme_Base # Nd  [10] MRO DIGIT ZERO..MRO DIGIT NINE\n16A6E..16A6F  ; Grapheme_Base # Po   [2] MRO DANDA..MRO DOUBLE DANDA\n16A70..16ABE  ; Grapheme_Base # Lo  [79] TANGSA LETTER OZ..TANGSA LETTER ZA\n16AC0..16AC9  ; Grapheme_Base # Nd  [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE\n16AD0..16AED  ; Grapheme_Base # Lo  [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I\n16AF5         ; Grapheme_Base # Po       BASSA VAH FULL STOP\n16B00..16B2F  ; Grapheme_Base # Lo  [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU\n16B37..16B3B  ; Grapheme_Base # Po   [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM\n16B3C..16B3F  ; Grapheme_Base # So   [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB\n16B40..16B43  ; Grapheme_Base # Lm   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM\n16B44         ; Grapheme_Base # Po       PAHAWH HMONG SIGN XAUS\n16B45         ; Grapheme_Base # So       PAHAWH HMONG SIGN CIM TSOV ROG\n16B50..16B59  ; Grapheme_Base # Nd  [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE\n16B5B..16B61  ; Grapheme_Base # No   [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS\n16B63..16B77  ; Grapheme_Base # Lo  [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS\n16B7D..16B8F  ; Grapheme_Base # Lo  [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ\n16D40..16D42  ; Grapheme_Base # Lm   [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA\n16D43..16D6A  ; Grapheme_Base # Lo  [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU\n16D6B..16D6C  ; Grapheme_Base # Lm   [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT\n16D6D..16D6F  ; Grapheme_Base # Po   [3] KIRAT RAI SIGN YUPI..KIRAT RAI DOUBLE DANDA\n16D70..16D79  ; Grapheme_Base # Nd  [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE\n16E40..16E7F  ; Grapheme_Base # L&  [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16E80..16E96  ; Grapheme_Base # No  [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM\n16E97..16E9A  ; Grapheme_Base # Po   [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH\n16EA0..16EB8  ; Grapheme_Base # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n16EBB..16ED3  ; Grapheme_Base # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n16F00..16F4A  ; Grapheme_Base # Lo  [75] MIAO LETTER PA..MIAO LETTER RTE\n16F50         ; Grapheme_Base # Lo       MIAO LETTER NASALIZATION\n16F51..16F87  ; Grapheme_Base # Mc  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI\n16F93..16F9F  ; Grapheme_Base # Lm  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8\n16FE0..16FE1  ; Grapheme_Base # Lm   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK\n16FE2         ; Grapheme_Base # Po       OLD CHINESE HOOK MARK\n16FE3         ; Grapheme_Base # Lm       OLD CHINESE ITERATION MARK\n16FF2..16FF3  ; Grapheme_Base # Lm   [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER\n16FF4..16FF6  ; Grapheme_Base # Nl   [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS\n17000..18CD5  ; Grapheme_Base # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5\n18CFF..18D1E  ; Grapheme_Base # Lo  [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E\n18D80..18DF2  ; Grapheme_Base # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883\n1AFF0..1AFF3  ; Grapheme_Base # Lm   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5\n1AFF5..1AFFB  ; Grapheme_Base # Lm   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5\n1AFFD..1AFFE  ; Grapheme_Base # Lm   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8\n1B000..1B122  ; Grapheme_Base # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU\n1B132         ; Grapheme_Base # Lo       HIRAGANA LETTER SMALL KO\n1B150..1B152  ; Grapheme_Base # Lo   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO\n1B155         ; Grapheme_Base # Lo       KATAKANA LETTER SMALL KO\n1B164..1B167  ; Grapheme_Base # Lo   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N\n1B170..1B2FB  ; Grapheme_Base # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB\n1BC00..1BC6A  ; Grapheme_Base # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M\n1BC70..1BC7C  ; Grapheme_Base # Lo  [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK\n1BC80..1BC88  ; Grapheme_Base # Lo   [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL\n1BC90..1BC99  ; Grapheme_Base # Lo  [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW\n1BC9C         ; Grapheme_Base # So       DUPLOYAN SIGN O WITH CROSS\n1BC9F         ; Grapheme_Base # Po       DUPLOYAN PUNCTUATION CHINOOK FULL STOP\n1CC00..1CCEF  ; Grapheme_Base # So [240] UP-POINTING GO-KART..OUTLINED LATIN CAPITAL LETTER Z\n1CCF0..1CCF9  ; Grapheme_Base # Nd  [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE\n1CCFA..1CCFC  ; Grapheme_Base # So   [3] SNAKE SYMBOL..NOSE SYMBOL\n1CD00..1CEB3  ; Grapheme_Base # So [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET\n1CEBA..1CED0  ; Grapheme_Base # So  [23] FRAGILE SYMBOL..LEUKOTHEA\n1CEE0..1CEEF  ; Grapheme_Base # So  [16] GEOMANTIC FIGURE POPULUS..GEOMANTIC FIGURE VIA\n1CEF0         ; Grapheme_Base # Sm       MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR\n1CF50..1CFC3  ; Grapheme_Base # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK\n1D000..1D0F5  ; Grapheme_Base # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO\n1D100..1D126  ; Grapheme_Base # So  [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2\n1D129..1D164  ; Grapheme_Base # So  [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE\n1D16A..1D16C  ; Grapheme_Base # So   [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3\n1D183..1D184  ; Grapheme_Base # So   [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN\n1D18C..1D1A9  ; Grapheme_Base # So  [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH\n1D1AE..1D1EA  ; Grapheme_Base # So  [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON\n1D200..1D241  ; Grapheme_Base # So  [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54\n1D245         ; Grapheme_Base # So       GREEK MUSICAL LEIMMA\n1D2C0..1D2D3  ; Grapheme_Base # No  [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN\n1D2E0..1D2F3  ; Grapheme_Base # No  [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN\n1D300..1D356  ; Grapheme_Base # So  [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING\n1D360..1D378  ; Grapheme_Base # No  [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE\n1D400..1D454  ; Grapheme_Base # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D49C  ; Grapheme_Base # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; Grapheme_Base # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; Grapheme_Base # L&       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; Grapheme_Base # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; Grapheme_Base # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B9  ; Grapheme_Base # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; Grapheme_Base # L&       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; Grapheme_Base # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D505  ; Grapheme_Base # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; Grapheme_Base # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; Grapheme_Base # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; Grapheme_Base # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D51E..1D539  ; Grapheme_Base # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; Grapheme_Base # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; Grapheme_Base # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; Grapheme_Base # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; Grapheme_Base # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D552..1D6A5  ; Grapheme_Base # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6A8..1D6C0  ; Grapheme_Base # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6C1         ; Grapheme_Base # Sm       MATHEMATICAL BOLD NABLA\n1D6C2..1D6DA  ; Grapheme_Base # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DB         ; Grapheme_Base # Sm       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL\n1D6DC..1D6FA  ; Grapheme_Base # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D6FB         ; Grapheme_Base # Sm       MATHEMATICAL ITALIC NABLA\n1D6FC..1D714  ; Grapheme_Base # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D715         ; Grapheme_Base # Sm       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL\n1D716..1D734  ; Grapheme_Base # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D735         ; Grapheme_Base # Sm       MATHEMATICAL BOLD ITALIC NABLA\n1D736..1D74E  ; Grapheme_Base # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D74F         ; Grapheme_Base # Sm       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL\n1D750..1D76E  ; Grapheme_Base # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D76F         ; Grapheme_Base # Sm       MATHEMATICAL SANS-SERIF BOLD NABLA\n1D770..1D788  ; Grapheme_Base # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D789         ; Grapheme_Base # Sm       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL\n1D78A..1D7A8  ; Grapheme_Base # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7A9         ; Grapheme_Base # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA\n1D7AA..1D7C2  ; Grapheme_Base # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C3         ; Grapheme_Base # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL\n1D7C4..1D7CB  ; Grapheme_Base # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA\n1D7CE..1D7FF  ; Grapheme_Base # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE\n1D800..1D9FF  ; Grapheme_Base # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD\n1DA37..1DA3A  ; Grapheme_Base # So   [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE\n1DA6D..1DA74  ; Grapheme_Base # So   [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING\n1DA76..1DA83  ; Grapheme_Base # So  [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH\n1DA85..1DA86  ; Grapheme_Base # So   [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS\n1DA87..1DA8B  ; Grapheme_Base # Po   [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS\n1DF00..1DF09  ; Grapheme_Base # L&  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK\n1DF0A         ; Grapheme_Base # Lo       LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK\n1DF0B..1DF1E  ; Grapheme_Base # L&  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL\n1DF25..1DF2A  ; Grapheme_Base # L&   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK\n1E030..1E06D  ; Grapheme_Base # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E100..1E12C  ; Grapheme_Base # Lo  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W\n1E137..1E13D  ; Grapheme_Base # Lm   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER\n1E140..1E149  ; Grapheme_Base # Nd  [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE\n1E14E         ; Grapheme_Base # Lo       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ\n1E14F         ; Grapheme_Base # So       NYIAKENG PUACHUE HMONG CIRCLED CA\n1E290..1E2AD  ; Grapheme_Base # Lo  [30] TOTO LETTER PA..TOTO LETTER A\n1E2C0..1E2EB  ; Grapheme_Base # Lo  [44] WANCHO LETTER AA..WANCHO LETTER YIH\n1E2F0..1E2F9  ; Grapheme_Base # Nd  [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE\n1E2FF         ; Grapheme_Base # Sc       WANCHO NGUN SIGN\n1E4D0..1E4EA  ; Grapheme_Base # Lo  [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL\n1E4EB         ; Grapheme_Base # Lm       NAG MUNDARI SIGN OJOD\n1E4F0..1E4F9  ; Grapheme_Base # Nd  [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE\n1E5D0..1E5ED  ; Grapheme_Base # Lo  [30] OL ONAL LETTER O..OL ONAL LETTER EG\n1E5F0         ; Grapheme_Base # Lo       OL ONAL SIGN HODDOND\n1E5F1..1E5FA  ; Grapheme_Base # Nd  [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE\n1E5FF         ; Grapheme_Base # Po       OL ONAL ABBREVIATION SIGN\n1E6C0..1E6DE  ; Grapheme_Base # Lo  [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO\n1E6E0..1E6E2  ; Grapheme_Base # Lo   [3] TAI YO LETTER AA..TAI YO LETTER UE\n1E6E4..1E6E5  ; Grapheme_Base # Lo   [2] TAI YO LETTER U..TAI YO LETTER AE\n1E6E7..1E6ED  ; Grapheme_Base # Lo   [7] TAI YO LETTER O..TAI YO LETTER AUE\n1E6F0..1E6F4  ; Grapheme_Base # Lo   [5] TAI YO LETTER AN..TAI YO LETTER AP\n1E6FE         ; Grapheme_Base # Lo       TAI YO SYMBOL MUEANG\n1E6FF         ; Grapheme_Base # Lm       TAI YO XAM LAI\n1E7E0..1E7E6  ; Grapheme_Base # Lo   [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO\n1E7E8..1E7EB  ; Grapheme_Base # Lo   [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE\n1E7ED..1E7EE  ; Grapheme_Base # Lo   [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE\n1E7F0..1E7FE  ; Grapheme_Base # Lo  [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE\n1E800..1E8C4  ; Grapheme_Base # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON\n1E8C7..1E8CF  ; Grapheme_Base # No   [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE\n1E900..1E943  ; Grapheme_Base # L&  [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA\n1E94B         ; Grapheme_Base # Lm       ADLAM NASALIZATION MARK\n1E950..1E959  ; Grapheme_Base # Nd  [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE\n1E95E..1E95F  ; Grapheme_Base # Po   [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK\n1EC71..1ECAB  ; Grapheme_Base # No  [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE\n1ECAC         ; Grapheme_Base # So       INDIC SIYAQ PLACEHOLDER\n1ECAD..1ECAF  ; Grapheme_Base # No   [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS\n1ECB0         ; Grapheme_Base # Sc       INDIC SIYAQ RUPEE MARK\n1ECB1..1ECB4  ; Grapheme_Base # No   [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK\n1ED01..1ED2D  ; Grapheme_Base # No  [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND\n1ED2E         ; Grapheme_Base # So       OTTOMAN SIYAQ MARRATAN\n1ED2F..1ED3D  ; Grapheme_Base # No  [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH\n1EE00..1EE03  ; Grapheme_Base # Lo   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL\n1EE05..1EE1F  ; Grapheme_Base # Lo  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF\n1EE21..1EE22  ; Grapheme_Base # Lo   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM\n1EE24         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL INITIAL HEH\n1EE27         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL INITIAL HAH\n1EE29..1EE32  ; Grapheme_Base # Lo  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF\n1EE34..1EE37  ; Grapheme_Base # Lo   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH\n1EE39         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL INITIAL DAD\n1EE3B         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL INITIAL GHAIN\n1EE42         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL TAILED JEEM\n1EE47         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL TAILED HAH\n1EE49         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL TAILED YEH\n1EE4B         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL TAILED LAM\n1EE4D..1EE4F  ; Grapheme_Base # Lo   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN\n1EE51..1EE52  ; Grapheme_Base # Lo   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF\n1EE54         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL TAILED SHEEN\n1EE57         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL TAILED KHAH\n1EE59         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL TAILED DAD\n1EE5B         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL TAILED GHAIN\n1EE5D         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL TAILED DOTLESS NOON\n1EE5F         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL TAILED DOTLESS QAF\n1EE61..1EE62  ; Grapheme_Base # Lo   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM\n1EE64         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL STRETCHED HEH\n1EE67..1EE6A  ; Grapheme_Base # Lo   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF\n1EE6C..1EE72  ; Grapheme_Base # Lo   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF\n1EE74..1EE77  ; Grapheme_Base # Lo   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH\n1EE79..1EE7C  ; Grapheme_Base # Lo   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH\n1EE7E         ; Grapheme_Base # Lo       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH\n1EE80..1EE89  ; Grapheme_Base # Lo  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH\n1EE8B..1EE9B  ; Grapheme_Base # Lo  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN\n1EEA1..1EEA3  ; Grapheme_Base # Lo   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL\n1EEA5..1EEA9  ; Grapheme_Base # Lo   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH\n1EEAB..1EEBB  ; Grapheme_Base # Lo  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN\n1EEF0..1EEF1  ; Grapheme_Base # Sm   [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL\n1F000..1F02B  ; Grapheme_Base # So  [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK\n1F030..1F093  ; Grapheme_Base # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06\n1F0A0..1F0AE  ; Grapheme_Base # So  [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES\n1F0B1..1F0BF  ; Grapheme_Base # So  [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER\n1F0C1..1F0CF  ; Grapheme_Base # So  [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER\n1F0D1..1F0F5  ; Grapheme_Base # So  [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21\n1F100..1F10C  ; Grapheme_Base # No  [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO\n1F10D..1F1AD  ; Grapheme_Base # So [161] CIRCLED ZERO WITH SLASH..MASK WORK SYMBOL\n1F1E6..1F202  ; Grapheme_Base # So  [29] REGIONAL INDICATOR SYMBOL LETTER A..SQUARED KATAKANA SA\n1F210..1F23B  ; Grapheme_Base # So  [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D\n1F240..1F248  ; Grapheme_Base # So   [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557\n1F250..1F251  ; Grapheme_Base # So   [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT\n1F260..1F265  ; Grapheme_Base # So   [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI\n1F300..1F3FA  ; Grapheme_Base # So [251] CYCLONE..AMPHORA\n1F3FB..1F3FF  ; Grapheme_Base # Sk   [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6\n1F400..1F6D8  ; Grapheme_Base # So [729] RAT..LANDSLIDE\n1F6DC..1F6EC  ; Grapheme_Base # So  [17] WIRELESS..AIRPLANE ARRIVING\n1F6F0..1F6FC  ; Grapheme_Base # So  [13] SATELLITE..ROLLER SKATE\n1F700..1F7D9  ; Grapheme_Base # So [218] ALCHEMICAL SYMBOL FOR QUINTESSENCE..NINE POINTED WHITE STAR\n1F7E0..1F7EB  ; Grapheme_Base # So  [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE\n1F7F0         ; Grapheme_Base # So       HEAVY EQUALS SIGN\n1F800..1F80B  ; Grapheme_Base # So  [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD\n1F810..1F847  ; Grapheme_Base # So  [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW\n1F850..1F859  ; Grapheme_Base # So  [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW\n1F860..1F887  ; Grapheme_Base # So  [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW\n1F890..1F8AD  ; Grapheme_Base # So  [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS\n1F8B0..1F8BB  ; Grapheme_Base # So  [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR\n1F8C0..1F8C1  ; Grapheme_Base # So   [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW\n1F8D0..1F8D8  ; Grapheme_Base # Sm   [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE\n1F900..1FA57  ; Grapheme_Base # So [344] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS ALFIL\n1FA60..1FA6D  ; Grapheme_Base # So  [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER\n1FA70..1FA7C  ; Grapheme_Base # So  [13] BALLET SHOES..CRUTCH\n1FA80..1FA8A  ; Grapheme_Base # So  [11] YO-YO..TROMBONE\n1FA8E..1FAC6  ; Grapheme_Base # So  [57] TREASURE CHEST..FINGERPRINT\n1FAC8         ; Grapheme_Base # So       HAIRY CREATURE\n1FACD..1FADC  ; Grapheme_Base # So  [16] ORCA..ROOT VEGETABLE\n1FADF..1FAEA  ; Grapheme_Base # So  [12] SPLATTER..DISTORTED FACE\n1FAEF..1FAF8  ; Grapheme_Base # So  [10] FIGHT CLOUD..RIGHTWARDS PUSHING HAND\n1FB00..1FB92  ; Grapheme_Base # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK\n1FB94..1FBEF  ; Grapheme_Base # So  [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE\n1FBF0..1FBF9  ; Grapheme_Base # Nd  [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE\n1FBFA         ; Grapheme_Base # So       ALARM BELL SYMBOL\n20000..2A6DF  ; Grapheme_Base # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF\n2A700..2B81D  ; Grapheme_Base # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D\n2B820..2CEAD  ; Grapheme_Base # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD\n2CEB0..2EBE0  ; Grapheme_Base # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0\n2EBF0..2EE5D  ; Grapheme_Base # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D\n2F800..2FA1D  ; Grapheme_Base # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D\n30000..3134A  ; Grapheme_Base # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A\n31350..33479  ; Grapheme_Base # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479\n\n# Total code points: 157494\n\n# ================================================\n\n# Derived Property: Grapheme_Link (deprecated)\n#  Generated from: Canonical_Combining_Class=Virama\n#  Use Canonical_Combining_Class=Virama directly instead\n\n094D          ; Grapheme_Link # Mn       DEVANAGARI SIGN VIRAMA\n09CD          ; Grapheme_Link # Mn       BENGALI SIGN VIRAMA\n0A4D          ; Grapheme_Link # Mn       GURMUKHI SIGN VIRAMA\n0ACD          ; Grapheme_Link # Mn       GUJARATI SIGN VIRAMA\n0B4D          ; Grapheme_Link # Mn       ORIYA SIGN VIRAMA\n0BCD          ; Grapheme_Link # Mn       TAMIL SIGN VIRAMA\n0C4D          ; Grapheme_Link # Mn       TELUGU SIGN VIRAMA\n0CCD          ; Grapheme_Link # Mn       KANNADA SIGN VIRAMA\n0D3B..0D3C    ; Grapheme_Link # Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n0D4D          ; Grapheme_Link # Mn       MALAYALAM SIGN VIRAMA\n0DCA          ; Grapheme_Link # Mn       SINHALA SIGN AL-LAKUNA\n0E3A          ; Grapheme_Link # Mn       THAI CHARACTER PHINTHU\n0EBA          ; Grapheme_Link # Mn       LAO SIGN PALI VIRAMA\n0F84          ; Grapheme_Link # Mn       TIBETAN MARK HALANTA\n1039..103A    ; Grapheme_Link # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\n1714          ; Grapheme_Link # Mn       TAGALOG SIGN VIRAMA\n1715          ; Grapheme_Link # Mc       TAGALOG SIGN PAMUDPOD\n1734          ; Grapheme_Link # Mc       HANUNOO SIGN PAMUDPOD\n17D2          ; Grapheme_Link # Mn       KHMER SIGN COENG\n1A60          ; Grapheme_Link # Mn       TAI THAM SIGN SAKOT\n1B44          ; Grapheme_Link # Mc       BALINESE ADEG ADEG\n1BAA          ; Grapheme_Link # Mc       SUNDANESE SIGN PAMAAEH\n1BAB          ; Grapheme_Link # Mn       SUNDANESE SIGN VIRAMA\n1BF2..1BF3    ; Grapheme_Link # Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN\n2D7F          ; Grapheme_Link # Mn       TIFINAGH CONSONANT JOINER\nA806          ; Grapheme_Link # Mn       SYLOTI NAGRI SIGN HASANTA\nA82C          ; Grapheme_Link # Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA\nA8C4          ; Grapheme_Link # Mn       SAURASHTRA SIGN VIRAMA\nA953          ; Grapheme_Link # Mc       REJANG VIRAMA\nA9C0          ; Grapheme_Link # Mc       JAVANESE PANGKON\nAAF6          ; Grapheme_Link # Mn       MEETEI MAYEK VIRAMA\nABED          ; Grapheme_Link # Mn       MEETEI MAYEK APUN IYEK\n10A3F         ; Grapheme_Link # Mn       KHAROSHTHI VIRAMA\n11046         ; Grapheme_Link # Mn       BRAHMI VIRAMA\n11070         ; Grapheme_Link # Mn       BRAHMI SIGN OLD TAMIL VIRAMA\n1107F         ; Grapheme_Link # Mn       BRAHMI NUMBER JOINER\n110B9         ; Grapheme_Link # Mn       KAITHI SIGN VIRAMA\n11133..11134  ; Grapheme_Link # Mn   [2] CHAKMA VIRAMA..CHAKMA MAAYYAA\n111C0         ; Grapheme_Link # Mc       SHARADA SIGN VIRAMA\n11235         ; Grapheme_Link # Mc       KHOJKI SIGN VIRAMA\n112EA         ; Grapheme_Link # Mn       KHUDAWADI SIGN VIRAMA\n1134D         ; Grapheme_Link # Mc       GRANTHA SIGN VIRAMA\n113CE         ; Grapheme_Link # Mn       TULU-TIGALARI SIGN VIRAMA\n113CF         ; Grapheme_Link # Mc       TULU-TIGALARI SIGN LOOPED VIRAMA\n113D0         ; Grapheme_Link # Mn       TULU-TIGALARI CONJOINER\n11442         ; Grapheme_Link # Mn       NEWA SIGN VIRAMA\n114C2         ; Grapheme_Link # Mn       TIRHUTA SIGN VIRAMA\n115BF         ; Grapheme_Link # Mn       SIDDHAM SIGN VIRAMA\n1163F         ; Grapheme_Link # Mn       MODI SIGN VIRAMA\n116B6         ; Grapheme_Link # Mc       TAKRI SIGN VIRAMA\n1172B         ; Grapheme_Link # Mn       AHOM SIGN KILLER\n11839         ; Grapheme_Link # Mn       DOGRA SIGN VIRAMA\n1193D         ; Grapheme_Link # Mc       DIVES AKURU SIGN HALANTA\n1193E         ; Grapheme_Link # Mn       DIVES AKURU VIRAMA\n119E0         ; Grapheme_Link # Mn       NANDINAGARI SIGN VIRAMA\n11A34         ; Grapheme_Link # Mn       ZANABAZAR SQUARE SIGN VIRAMA\n11A47         ; Grapheme_Link # Mn       ZANABAZAR SQUARE SUBJOINER\n11A99         ; Grapheme_Link # Mn       SOYOMBO SUBJOINER\n11C3F         ; Grapheme_Link # Mn       BHAIKSUKI SIGN VIRAMA\n11D44..11D45  ; Grapheme_Link # Mn   [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA\n11D97         ; Grapheme_Link # Mn       GUNJALA GONDI VIRAMA\n11F41         ; Grapheme_Link # Mc       KAWI SIGN KILLER\n11F42         ; Grapheme_Link # Mn       KAWI CONJOINER\n1612F         ; Grapheme_Link # Mn       GURUNG KHEMA SIGN THOLHOMA\n\n# Total code points: 69\n\n# ================================================\n\n# Derived Property: Indic_Conjunct_Break\n#  Generated from the Grapheme_Cluster_Break, Indic_Syllabic_Category,\n#  Canonical_Combining_Class, and Script properties as described in UAX #44:\n#  https://www.unicode.org/reports/tr44/.\n\n#  All code points not explicitly listed for Indic_Conjunct_Break\n#  have the value None.\n\n# @missing: 0000..10FFFF; InCB; None\n\n# ================================================\n\n# Indic_Conjunct_Break=Linker\n\n094D          ; InCB; Linker # Mn       DEVANAGARI SIGN VIRAMA\n09CD          ; InCB; Linker # Mn       BENGALI SIGN VIRAMA\n0ACD          ; InCB; Linker # Mn       GUJARATI SIGN VIRAMA\n0B4D          ; InCB; Linker # Mn       ORIYA SIGN VIRAMA\n0C4D          ; InCB; Linker # Mn       TELUGU SIGN VIRAMA\n0D4D          ; InCB; Linker # Mn       MALAYALAM SIGN VIRAMA\n1039          ; InCB; Linker # Mn       MYANMAR SIGN VIRAMA\n17D2          ; InCB; Linker # Mn       KHMER SIGN COENG\n1A60          ; InCB; Linker # Mn       TAI THAM SIGN SAKOT\n1B44          ; InCB; Linker # Mc       BALINESE ADEG ADEG\n1BAB          ; InCB; Linker # Mn       SUNDANESE SIGN VIRAMA\nA9C0          ; InCB; Linker # Mc       JAVANESE PANGKON\nAAF6          ; InCB; Linker # Mn       MEETEI MAYEK VIRAMA\n10A3F         ; InCB; Linker # Mn       KHAROSHTHI VIRAMA\n11133         ; InCB; Linker # Mn       CHAKMA VIRAMA\n113D0         ; InCB; Linker # Mn       TULU-TIGALARI CONJOINER\n1193E         ; InCB; Linker # Mn       DIVES AKURU VIRAMA\n11A47         ; InCB; Linker # Mn       ZANABAZAR SQUARE SUBJOINER\n11A99         ; InCB; Linker # Mn       SOYOMBO SUBJOINER\n11F42         ; InCB; Linker # Mn       KAWI CONJOINER\n\n# Total code points: 20\n\n# ================================================\n\n# Indic_Conjunct_Break=Consonant\n\n0915..0939    ; InCB; Consonant # Lo  [37] DEVANAGARI LETTER KA..DEVANAGARI LETTER HA\n0958..095F    ; InCB; Consonant # Lo   [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA\n0978..097F    ; InCB; Consonant # Lo   [8] DEVANAGARI LETTER MARWARI DDA..DEVANAGARI LETTER BBA\n0995..09A8    ; InCB; Consonant # Lo  [20] BENGALI LETTER KA..BENGALI LETTER NA\n09AA..09B0    ; InCB; Consonant # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA\n09B2          ; InCB; Consonant # Lo       BENGALI LETTER LA\n09B6..09B9    ; InCB; Consonant # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA\n09DC..09DD    ; InCB; Consonant # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA\n09DF          ; InCB; Consonant # Lo       BENGALI LETTER YYA\n09F0..09F1    ; InCB; Consonant # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL\n0A95..0AA8    ; InCB; Consonant # Lo  [20] GUJARATI LETTER KA..GUJARATI LETTER NA\n0AAA..0AB0    ; InCB; Consonant # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA\n0AB2..0AB3    ; InCB; Consonant # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA\n0AB5..0AB9    ; InCB; Consonant # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA\n0AF9          ; InCB; Consonant # Lo       GUJARATI LETTER ZHA\n0B15..0B28    ; InCB; Consonant # Lo  [20] ORIYA LETTER KA..ORIYA LETTER NA\n0B2A..0B30    ; InCB; Consonant # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA\n0B32..0B33    ; InCB; Consonant # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA\n0B35..0B39    ; InCB; Consonant # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA\n0B5C..0B5D    ; InCB; Consonant # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA\n0B5F          ; InCB; Consonant # Lo       ORIYA LETTER YYA\n0B71          ; InCB; Consonant # Lo       ORIYA LETTER WA\n0C15..0C28    ; InCB; Consonant # Lo  [20] TELUGU LETTER KA..TELUGU LETTER NA\n0C2A..0C39    ; InCB; Consonant # Lo  [16] TELUGU LETTER PA..TELUGU LETTER HA\n0C58..0C5A    ; InCB; Consonant # Lo   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA\n0D15..0D3A    ; InCB; Consonant # Lo  [38] MALAYALAM LETTER KA..MALAYALAM LETTER TTTA\n1000..102A    ; InCB; Consonant # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU\n103F          ; InCB; Consonant # Lo       MYANMAR LETTER GREAT SA\n1050..1055    ; InCB; Consonant # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL\n105A..105D    ; InCB; Consonant # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE\n1061          ; InCB; Consonant # Lo       MYANMAR LETTER SGAW KAREN SHA\n1065..1066    ; InCB; Consonant # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA\n106E..1070    ; InCB; Consonant # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA\n1075..1081    ; InCB; Consonant # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA\n108E          ; InCB; Consonant # Lo       MYANMAR LETTER RUMAI PALAUNG FA\n1780..17B3    ; InCB; Consonant # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU\n1A20..1A54    ; InCB; Consonant # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA\n1B0B..1B0C    ; InCB; Consonant # Lo   [2] BALINESE LETTER RA REPA..BALINESE LETTER RA REPA TEDUNG\n1B13..1B33    ; InCB; Consonant # Lo  [33] BALINESE LETTER KA..BALINESE LETTER HA\n1B45..1B4C    ; InCB; Consonant # Lo   [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA\n1B83..1BA0    ; InCB; Consonant # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA\n1BAE..1BAF    ; InCB; Consonant # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA\n1BBB..1BBD    ; InCB; Consonant # Lo   [3] SUNDANESE LETTER REU..SUNDANESE LETTER BHA\nA989..A98B    ; InCB; Consonant # Lo   [3] JAVANESE LETTER PA CEREK..JAVANESE LETTER NGA LELET RASWADI\nA98F..A9B2    ; InCB; Consonant # Lo  [36] JAVANESE LETTER KA..JAVANESE LETTER HA\nA9E0..A9E4    ; InCB; Consonant # Lo   [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA\nA9E7..A9EF    ; InCB; Consonant # Lo   [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA\nA9FA..A9FE    ; InCB; Consonant # Lo   [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA\nAA60..AA6F    ; InCB; Consonant # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA\nAA71..AA73    ; InCB; Consonant # Lo   [3] MYANMAR LETTER KHAMTI XA..MYANMAR LETTER KHAMTI RA\nAA7A          ; InCB; Consonant # Lo       MYANMAR LETTER AITON RA\nAA7E..AA7F    ; InCB; Consonant # Lo   [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA\nAAE0..AAEA    ; InCB; Consonant # Lo  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA\nABC0..ABDA    ; InCB; Consonant # Lo  [27] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER BHAM\n10A00         ; InCB; Consonant # Lo       KHAROSHTHI LETTER A\n10A10..10A13  ; InCB; Consonant # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA\n10A15..10A17  ; InCB; Consonant # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA\n10A19..10A35  ; InCB; Consonant # Lo  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA\n11103..11126  ; InCB; Consonant # Lo  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA\n11144         ; InCB; Consonant # Lo       CHAKMA LETTER LHAA\n11147         ; InCB; Consonant # Lo       CHAKMA LETTER VAA\n11380..11389  ; InCB; Consonant # Lo  [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL\n1138B         ; InCB; Consonant # Lo       TULU-TIGALARI LETTER EE\n1138E         ; InCB; Consonant # Lo       TULU-TIGALARI LETTER AI\n11390..113B5  ; InCB; Consonant # Lo  [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA\n11900..11906  ; InCB; Consonant # Lo   [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E\n11909         ; InCB; Consonant # Lo       DIVES AKURU LETTER O\n1190C..11913  ; InCB; Consonant # Lo   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA\n11915..11916  ; InCB; Consonant # Lo   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA\n11918..1192F  ; InCB; Consonant # Lo  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA\n11A00         ; InCB; Consonant # Lo       ZANABAZAR SQUARE LETTER A\n11A0B..11A32  ; InCB; Consonant # Lo  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA\n11A50         ; InCB; Consonant # Lo       SOYOMBO LETTER A\n11A5C..11A83  ; InCB; Consonant # Lo  [40] SOYOMBO LETTER KA..SOYOMBO LETTER KSSA\n11F04..11F10  ; InCB; Consonant # Lo  [13] KAWI LETTER A..KAWI LETTER O\n11F12..11F33  ; InCB; Consonant # Lo  [34] KAWI LETTER KA..KAWI LETTER JNYA\n\n# Total code points: 911\n\n# ================================================\n\n# Indic_Conjunct_Break=Extend\n\n0300..036F    ; InCB; Extend # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\n0483..0487    ; InCB; Extend # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\n0488..0489    ; InCB; Extend # Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN\n0591..05BD    ; InCB; Extend # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\n05BF          ; InCB; Extend # Mn       HEBREW POINT RAFE\n05C1..05C2    ; InCB; Extend # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n05C4..05C5    ; InCB; Extend # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n05C7          ; InCB; Extend # Mn       HEBREW POINT QAMATS QATAN\n0610..061A    ; InCB; Extend # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n064B..065F    ; InCB; Extend # Mn  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW\n0670          ; InCB; Extend # Mn       ARABIC LETTER SUPERSCRIPT ALEF\n06D6..06DC    ; InCB; Extend # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n06DF..06E4    ; InCB; Extend # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\n06E7..06E8    ; InCB; Extend # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n06EA..06ED    ; InCB; Extend # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\n0711          ; InCB; Extend # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH\n0730..074A    ; InCB; Extend # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\n07A6..07B0    ; InCB; Extend # Mn  [11] THAANA ABAFILI..THAANA SUKUN\n07EB..07F3    ; InCB; Extend # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\n07FD          ; InCB; Extend # Mn       NKO DANTAYALAN\n0816..0819    ; InCB; Extend # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\n081B..0823    ; InCB; Extend # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n0825..0827    ; InCB; Extend # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n0829..082D    ; InCB; Extend # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\n0859..085B    ; InCB; Extend # Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\n0897..089F    ; InCB; Extend # Mn   [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA\n08CA..08E1    ; InCB; Extend # Mn  [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA\n08E3..0902    ; InCB; Extend # Mn  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA\n093A          ; InCB; Extend # Mn       DEVANAGARI VOWEL SIGN OE\n093C          ; InCB; Extend # Mn       DEVANAGARI SIGN NUKTA\n0941..0948    ; InCB; Extend # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n0951..0957    ; InCB; Extend # Mn   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE\n0962..0963    ; InCB; Extend # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n0981          ; InCB; Extend # Mn       BENGALI SIGN CANDRABINDU\n09BC          ; InCB; Extend # Mn       BENGALI SIGN NUKTA\n09BE          ; InCB; Extend # Mc       BENGALI VOWEL SIGN AA\n09C1..09C4    ; InCB; Extend # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n09D7          ; InCB; Extend # Mc       BENGALI AU LENGTH MARK\n09E2..09E3    ; InCB; Extend # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n09FE          ; InCB; Extend # Mn       BENGALI SANDHI MARK\n0A01..0A02    ; InCB; Extend # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n0A3C          ; InCB; Extend # Mn       GURMUKHI SIGN NUKTA\n0A41..0A42    ; InCB; Extend # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n0A47..0A48    ; InCB; Extend # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n0A4B..0A4D    ; InCB; Extend # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\n0A51          ; InCB; Extend # Mn       GURMUKHI SIGN UDAAT\n0A70..0A71    ; InCB; Extend # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n0A75          ; InCB; Extend # Mn       GURMUKHI SIGN YAKASH\n0A81..0A82    ; InCB; Extend # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n0ABC          ; InCB; Extend # Mn       GUJARATI SIGN NUKTA\n0AC1..0AC5    ; InCB; Extend # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n0AC7..0AC8    ; InCB; Extend # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n0AE2..0AE3    ; InCB; Extend # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n0AFA..0AFF    ; InCB; Extend # Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\n0B01          ; InCB; Extend # Mn       ORIYA SIGN CANDRABINDU\n0B3C          ; InCB; Extend # Mn       ORIYA SIGN NUKTA\n0B3E          ; InCB; Extend # Mc       ORIYA VOWEL SIGN AA\n0B3F          ; InCB; Extend # Mn       ORIYA VOWEL SIGN I\n0B41..0B44    ; InCB; Extend # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n0B55..0B56    ; InCB; Extend # Mn   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK\n0B57          ; InCB; Extend # Mc       ORIYA AU LENGTH MARK\n0B62..0B63    ; InCB; Extend # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n0B82          ; InCB; Extend # Mn       TAMIL SIGN ANUSVARA\n0BBE          ; InCB; Extend # Mc       TAMIL VOWEL SIGN AA\n0BC0          ; InCB; Extend # Mn       TAMIL VOWEL SIGN II\n0BCD          ; InCB; Extend # Mn       TAMIL SIGN VIRAMA\n0BD7          ; InCB; Extend # Mc       TAMIL AU LENGTH MARK\n0C00          ; InCB; Extend # Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE\n0C04          ; InCB; Extend # Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE\n0C3C          ; InCB; Extend # Mn       TELUGU SIGN NUKTA\n0C3E..0C40    ; InCB; Extend # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n0C46..0C48    ; InCB; Extend # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n0C4A..0C4C    ; InCB; Extend # Mn   [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU\n0C55..0C56    ; InCB; Extend # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n0C62..0C63    ; InCB; Extend # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n0C81          ; InCB; Extend # Mn       KANNADA SIGN CANDRABINDU\n0CBC          ; InCB; Extend # Mn       KANNADA SIGN NUKTA\n0CBF          ; InCB; Extend # Mn       KANNADA VOWEL SIGN I\n0CC0          ; InCB; Extend # Mc       KANNADA VOWEL SIGN II\n0CC2          ; InCB; Extend # Mc       KANNADA VOWEL SIGN UU\n0CC6          ; InCB; Extend # Mn       KANNADA VOWEL SIGN E\n0CC7..0CC8    ; InCB; Extend # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n0CCA..0CCB    ; InCB; Extend # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n0CCC..0CCD    ; InCB; Extend # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\n0CD5..0CD6    ; InCB; Extend # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n0CE2..0CE3    ; InCB; Extend # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n0D00..0D01    ; InCB; Extend # Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n0D3B..0D3C    ; InCB; Extend # Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n0D3E          ; InCB; Extend # Mc       MALAYALAM VOWEL SIGN AA\n0D41..0D44    ; InCB; Extend # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n0D57          ; InCB; Extend # Mc       MALAYALAM AU LENGTH MARK\n0D62..0D63    ; InCB; Extend # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n0D81          ; InCB; Extend # Mn       SINHALA SIGN CANDRABINDU\n0DCA          ; InCB; Extend # Mn       SINHALA SIGN AL-LAKUNA\n0DCF          ; InCB; Extend # Mc       SINHALA VOWEL SIGN AELA-PILLA\n0DD2..0DD4    ; InCB; Extend # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n0DD6          ; InCB; Extend # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA\n0DDF          ; InCB; Extend # Mc       SINHALA VOWEL SIGN GAYANUKITTA\n0E31          ; InCB; Extend # Mn       THAI CHARACTER MAI HAN-AKAT\n0E34..0E3A    ; InCB; Extend # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n0E47..0E4E    ; InCB; Extend # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\n0EB1          ; InCB; Extend # Mn       LAO VOWEL SIGN MAI KAN\n0EB4..0EBC    ; InCB; Extend # Mn   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO\n0EC8..0ECE    ; InCB; Extend # Mn   [7] LAO TONE MAI EK..LAO YAMAKKAN\n0F18..0F19    ; InCB; Extend # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\n0F35          ; InCB; Extend # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA\n0F37          ; InCB; Extend # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS\n0F39          ; InCB; Extend # Mn       TIBETAN MARK TSA -PHRU\n0F71..0F7E    ; InCB; Extend # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n0F80..0F84    ; InCB; Extend # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\n0F86..0F87    ; InCB; Extend # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\n0F8D..0F97    ; InCB; Extend # Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n0F99..0FBC    ; InCB; Extend # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n0FC6          ; InCB; Extend # Mn       TIBETAN SYMBOL PADMA GDAN\n102D..1030    ; InCB; Extend # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n1032..1037    ; InCB; Extend # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\n103A          ; InCB; Extend # Mn       MYANMAR SIGN ASAT\n103D..103E    ; InCB; Extend # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n1058..1059    ; InCB; Extend # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n105E..1060    ; InCB; Extend # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n1071..1074    ; InCB; Extend # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n1082          ; InCB; Extend # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n1085..1086    ; InCB; Extend # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n108D          ; InCB; Extend # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n109D          ; InCB; Extend # Mn       MYANMAR VOWEL SIGN AITON AI\n135D..135F    ; InCB; Extend # Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\n1712..1714    ; InCB; Extend # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\n1715          ; InCB; Extend # Mc       TAGALOG SIGN PAMUDPOD\n1732..1733    ; InCB; Extend # Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U\n1734          ; InCB; Extend # Mc       HANUNOO SIGN PAMUDPOD\n1752..1753    ; InCB; Extend # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n1772..1773    ; InCB; Extend # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n17B4..17B5    ; InCB; Extend # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n17B7..17BD    ; InCB; Extend # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n17C6          ; InCB; Extend # Mn       KHMER SIGN NIKAHIT\n17C9..17D1    ; InCB; Extend # Mn   [9] KHMER SIGN MUUSIKATOAN..KHMER SIGN VIRIAM\n17D3          ; InCB; Extend # Mn       KHMER SIGN BATHAMASAT\n17DD          ; InCB; Extend # Mn       KHMER SIGN ATTHACAN\n180B..180D    ; InCB; Extend # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n180F          ; InCB; Extend # Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR\n1885..1886    ; InCB; Extend # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n18A9          ; InCB; Extend # Mn       MONGOLIAN LETTER ALI GALI DAGALGA\n1920..1922    ; InCB; Extend # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n1927..1928    ; InCB; Extend # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n1932          ; InCB; Extend # Mn       LIMBU SMALL LETTER ANUSVARA\n1939..193B    ; InCB; Extend # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\n1A17..1A18    ; InCB; Extend # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n1A1B          ; InCB; Extend # Mn       BUGINESE VOWEL SIGN AE\n1A56          ; InCB; Extend # Mn       TAI THAM CONSONANT SIGN MEDIAL LA\n1A58..1A5E    ; InCB; Extend # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n1A62          ; InCB; Extend # Mn       TAI THAM VOWEL SIGN MAI SAT\n1A65..1A6C    ; InCB; Extend # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n1A73..1A7C    ; InCB; Extend # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\n1A7F          ; InCB; Extend # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT\n1AB0..1ABD    ; InCB; Extend # Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\n1ABE          ; InCB; Extend # Me       COMBINING PARENTHESES OVERLAY\n1ABF..1ADD    ; InCB; Extend # Mn  [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW\n1AE0..1AEB    ; InCB; Extend # Mn  [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE\n1B00..1B03    ; InCB; Extend # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n1B34          ; InCB; Extend # Mn       BALINESE SIGN REREKAN\n1B35          ; InCB; Extend # Mc       BALINESE VOWEL SIGN TEDUNG\n1B36..1B3A    ; InCB; Extend # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n1B3B          ; InCB; Extend # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG\n1B3C          ; InCB; Extend # Mn       BALINESE VOWEL SIGN LA LENGA\n1B3D          ; InCB; Extend # Mc       BALINESE VOWEL SIGN LA LENGA TEDUNG\n1B42          ; InCB; Extend # Mn       BALINESE VOWEL SIGN PEPET\n1B43          ; InCB; Extend # Mc       BALINESE VOWEL SIGN PEPET TEDUNG\n1B6B..1B73    ; InCB; Extend # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\n1B80..1B81    ; InCB; Extend # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n1BA2..1BA5    ; InCB; Extend # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n1BA8..1BA9    ; InCB; Extend # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n1BAA          ; InCB; Extend # Mc       SUNDANESE SIGN PAMAAEH\n1BAC..1BAD    ; InCB; Extend # Mn   [2] SUNDANESE CONSONANT SIGN PASANGAN MA..SUNDANESE CONSONANT SIGN PASANGAN WA\n1BE6          ; InCB; Extend # Mn       BATAK SIGN TOMPI\n1BE8..1BE9    ; InCB; Extend # Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n1BED          ; InCB; Extend # Mn       BATAK VOWEL SIGN KARO O\n1BEF..1BF1    ; InCB; Extend # Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n1BF2..1BF3    ; InCB; Extend # Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN\n1C2C..1C33    ; InCB; Extend # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n1C36..1C37    ; InCB; Extend # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\n1CD0..1CD2    ; InCB; Extend # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\n1CD4..1CE0    ; InCB; Extend # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n1CE2..1CE8    ; InCB; Extend # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n1CED          ; InCB; Extend # Mn       VEDIC SIGN TIRYAK\n1CF4          ; InCB; Extend # Mn       VEDIC TONE CANDRA ABOVE\n1CF8..1CF9    ; InCB; Extend # Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n1DC0..1DFF    ; InCB; Extend # Mn  [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\n200D          ; InCB; Extend # Cf       ZERO WIDTH JOINER\n20D0..20DC    ; InCB; Extend # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n20DD..20E0    ; InCB; Extend # Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH\n20E1          ; InCB; Extend # Mn       COMBINING LEFT RIGHT ARROW ABOVE\n20E2..20E4    ; InCB; Extend # Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE\n20E5..20F0    ; InCB; Extend # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\n2CEF..2CF1    ; InCB; Extend # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\n2D7F          ; InCB; Extend # Mn       TIFINAGH CONSONANT JOINER\n2DE0..2DFF    ; InCB; Extend # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\n302A..302D    ; InCB; Extend # Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n302E..302F    ; InCB; Extend # Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\n3099..309A    ; InCB; Extend # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\nA66F          ; InCB; Extend # Mn       COMBINING CYRILLIC VZMET\nA670..A672    ; InCB; Extend # Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN\nA674..A67D    ; InCB; Extend # Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\nA69E..A69F    ; InCB; Extend # Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\nA6F0..A6F1    ; InCB; Extend # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\nA802          ; InCB; Extend # Mn       SYLOTI NAGRI SIGN DVISVARA\nA806          ; InCB; Extend # Mn       SYLOTI NAGRI SIGN HASANTA\nA80B          ; InCB; Extend # Mn       SYLOTI NAGRI SIGN ANUSVARA\nA825..A826    ; InCB; Extend # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\nA82C          ; InCB; Extend # Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA\nA8C4..A8C5    ; InCB; Extend # Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\nA8E0..A8F1    ; InCB; Extend # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\nA8FF          ; InCB; Extend # Mn       DEVANAGARI VOWEL SIGN AY\nA926..A92D    ; InCB; Extend # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\nA947..A951    ; InCB; Extend # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\nA953          ; InCB; Extend # Mc       REJANG VIRAMA\nA980..A982    ; InCB; Extend # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\nA9B3          ; InCB; Extend # Mn       JAVANESE SIGN CECAK TELU\nA9B6..A9B9    ; InCB; Extend # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\nA9BC..A9BD    ; InCB; Extend # Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET\nA9E5          ; InCB; Extend # Mn       MYANMAR SIGN SHAN SAW\nAA29..AA2E    ; InCB; Extend # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\nAA31..AA32    ; InCB; Extend # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\nAA35..AA36    ; InCB; Extend # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\nAA43          ; InCB; Extend # Mn       CHAM CONSONANT SIGN FINAL NG\nAA4C          ; InCB; Extend # Mn       CHAM CONSONANT SIGN FINAL M\nAA7C          ; InCB; Extend # Mn       MYANMAR SIGN TAI LAING TONE-2\nAAB0          ; InCB; Extend # Mn       TAI VIET MAI KANG\nAAB2..AAB4    ; InCB; Extend # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\nAAB7..AAB8    ; InCB; Extend # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\nAABE..AABF    ; InCB; Extend # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\nAAC1          ; InCB; Extend # Mn       TAI VIET TONE MAI THO\nAAEC..AAED    ; InCB; Extend # Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\nABE5          ; InCB; Extend # Mn       MEETEI MAYEK VOWEL SIGN ANAP\nABE8          ; InCB; Extend # Mn       MEETEI MAYEK VOWEL SIGN UNAP\nABED          ; InCB; Extend # Mn       MEETEI MAYEK APUN IYEK\nFB1E          ; InCB; Extend # Mn       HEBREW POINT JUDEO-SPANISH VARIKA\nFE00..FE0F    ; InCB; Extend # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\nFE20..FE2F    ; InCB; Extend # Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\nFF9E..FF9F    ; InCB; Extend # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\n101FD         ; InCB; Extend # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\n102E0         ; InCB; Extend # Mn       COPTIC EPACT THOUSANDS MARK\n10376..1037A  ; InCB; Extend # Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n10A01..10A03  ; InCB; Extend # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n10A05..10A06  ; InCB; Extend # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n10A0C..10A0F  ; InCB; Extend # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n10A38..10A3A  ; InCB; Extend # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\n10AE5..10AE6  ; InCB; Extend # Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\n10D24..10D27  ; InCB; Extend # Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n10D69..10D6D  ; InCB; Extend # Mn   [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK\n10EAB..10EAC  ; InCB; Extend # Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK\n10EFA..10EFF  ; InCB; Extend # Mn   [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA\n10F46..10F50  ; InCB; Extend # Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW\n10F82..10F85  ; InCB; Extend # Mn   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW\n11001         ; InCB; Extend # Mn       BRAHMI SIGN ANUSVARA\n11038..11046  ; InCB; Extend # Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\n11070         ; InCB; Extend # Mn       BRAHMI SIGN OLD TAMIL VIRAMA\n11073..11074  ; InCB; Extend # Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O\n1107F..11081  ; InCB; Extend # Mn   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA\n110B3..110B6  ; InCB; Extend # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n110B9..110BA  ; InCB; Extend # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\n110C2         ; InCB; Extend # Mn       KAITHI VOWEL SIGN VOCALIC R\n11100..11102  ; InCB; Extend # Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n11127..1112B  ; InCB; Extend # Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n1112D..11132  ; InCB; Extend # Mn   [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK\n11134         ; InCB; Extend # Mn       CHAKMA MAAYYAA\n11173         ; InCB; Extend # Mn       MAHAJANI SIGN NUKTA\n11180..11181  ; InCB; Extend # Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n111B6..111BE  ; InCB; Extend # Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n111C0         ; InCB; Extend # Mc       SHARADA SIGN VIRAMA\n111C9..111CC  ; InCB; Extend # Mn   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK\n111CF         ; InCB; Extend # Mn       SHARADA SIGN INVERTED CANDRABINDU\n1122F..11231  ; InCB; Extend # Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n11234         ; InCB; Extend # Mn       KHOJKI SIGN ANUSVARA\n11235         ; InCB; Extend # Mc       KHOJKI SIGN VIRAMA\n11236..11237  ; InCB; Extend # Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\n1123E         ; InCB; Extend # Mn       KHOJKI SIGN SUKUN\n11241         ; InCB; Extend # Mn       KHOJKI VOWEL SIGN VOCALIC R\n112DF         ; InCB; Extend # Mn       KHUDAWADI SIGN ANUSVARA\n112E3..112EA  ; InCB; Extend # Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\n11300..11301  ; InCB; Extend # Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n1133B..1133C  ; InCB; Extend # Mn   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA\n1133E         ; InCB; Extend # Mc       GRANTHA VOWEL SIGN AA\n11340         ; InCB; Extend # Mn       GRANTHA VOWEL SIGN II\n1134D         ; InCB; Extend # Mc       GRANTHA SIGN VIRAMA\n11357         ; InCB; Extend # Mc       GRANTHA AU LENGTH MARK\n11366..1136C  ; InCB; Extend # Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\n11370..11374  ; InCB; Extend # Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\n113B8         ; InCB; Extend # Mc       TULU-TIGALARI VOWEL SIGN AA\n113BB..113C0  ; InCB; Extend # Mn   [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL\n113C2         ; InCB; Extend # Mc       TULU-TIGALARI VOWEL SIGN EE\n113C5         ; InCB; Extend # Mc       TULU-TIGALARI VOWEL SIGN AI\n113C7..113C9  ; InCB; Extend # Mc   [3] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI AU LENGTH MARK\n113CE         ; InCB; Extend # Mn       TULU-TIGALARI SIGN VIRAMA\n113CF         ; InCB; Extend # Mc       TULU-TIGALARI SIGN LOOPED VIRAMA\n113D2         ; InCB; Extend # Mn       TULU-TIGALARI GEMINATION MARK\n113E1..113E2  ; InCB; Extend # Mn   [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA\n11438..1143F  ; InCB; Extend # Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n11442..11444  ; InCB; Extend # Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\n11446         ; InCB; Extend # Mn       NEWA SIGN NUKTA\n1145E         ; InCB; Extend # Mn       NEWA SANDHI MARK\n114B0         ; InCB; Extend # Mc       TIRHUTA VOWEL SIGN AA\n114B3..114B8  ; InCB; Extend # Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n114BA         ; InCB; Extend # Mn       TIRHUTA VOWEL SIGN SHORT E\n114BD         ; InCB; Extend # Mc       TIRHUTA VOWEL SIGN SHORT O\n114BF..114C0  ; InCB; Extend # Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n114C2..114C3  ; InCB; Extend # Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\n115AF         ; InCB; Extend # Mc       SIDDHAM VOWEL SIGN AA\n115B2..115B5  ; InCB; Extend # Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n115BC..115BD  ; InCB; Extend # Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n115BF..115C0  ; InCB; Extend # Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\n115DC..115DD  ; InCB; Extend # Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n11633..1163A  ; InCB; Extend # Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n1163D         ; InCB; Extend # Mn       MODI SIGN ANUSVARA\n1163F..11640  ; InCB; Extend # Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\n116AB         ; InCB; Extend # Mn       TAKRI SIGN ANUSVARA\n116AD         ; InCB; Extend # Mn       TAKRI VOWEL SIGN AA\n116B0..116B5  ; InCB; Extend # Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n116B6         ; InCB; Extend # Mc       TAKRI SIGN VIRAMA\n116B7         ; InCB; Extend # Mn       TAKRI SIGN NUKTA\n1171D         ; InCB; Extend # Mn       AHOM CONSONANT SIGN MEDIAL LA\n1171F         ; InCB; Extend # Mn       AHOM CONSONANT SIGN MEDIAL LIGATING RA\n11722..11725  ; InCB; Extend # Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n11727..1172B  ; InCB; Extend # Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\n1182F..11837  ; InCB; Extend # Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA\n11839..1183A  ; InCB; Extend # Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA\n11930         ; InCB; Extend # Mc       DIVES AKURU VOWEL SIGN AA\n1193B..1193C  ; InCB; Extend # Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU\n1193D         ; InCB; Extend # Mc       DIVES AKURU SIGN HALANTA\n11943         ; InCB; Extend # Mn       DIVES AKURU SIGN NUKTA\n119D4..119D7  ; InCB; Extend # Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR\n119DA..119DB  ; InCB; Extend # Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI\n119E0         ; InCB; Extend # Mn       NANDINAGARI SIGN VIRAMA\n11A01..11A0A  ; InCB; Extend # Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n11A33..11A38  ; InCB; Extend # Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\n11A3B..11A3E  ; InCB; Extend # Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n11A51..11A56  ; InCB; Extend # Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n11A59..11A5B  ; InCB; Extend # Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n11A8A..11A96  ; InCB; Extend # Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n11A98         ; InCB; Extend # Mn       SOYOMBO GEMINATION MARK\n11B60         ; InCB; Extend # Mn       SHARADA VOWEL SIGN OE\n11B62..11B64  ; InCB; Extend # Mn   [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E\n11B66         ; InCB; Extend # Mn       SHARADA VOWEL SIGN CANDRA E\n11C30..11C36  ; InCB; Extend # Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n11C38..11C3D  ; InCB; Extend # Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n11C3F         ; InCB; Extend # Mn       BHAIKSUKI SIGN VIRAMA\n11C92..11CA7  ; InCB; Extend # Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n11CAA..11CB0  ; InCB; Extend # Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n11CB2..11CB3  ; InCB; Extend # Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n11CB5..11CB6  ; InCB; Extend # Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n11D31..11D36  ; InCB; Extend # Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n11D3A         ; InCB; Extend # Mn       MASARAM GONDI VOWEL SIGN E\n11D3C..11D3D  ; InCB; Extend # Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n11D3F..11D45  ; InCB; Extend # Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\n11D47         ; InCB; Extend # Mn       MASARAM GONDI RA-KARA\n11D90..11D91  ; InCB; Extend # Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI\n11D95         ; InCB; Extend # Mn       GUNJALA GONDI SIGN ANUSVARA\n11D97         ; InCB; Extend # Mn       GUNJALA GONDI VIRAMA\n11EF3..11EF4  ; InCB; Extend # Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U\n11F00..11F01  ; InCB; Extend # Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA\n11F36..11F3A  ; InCB; Extend # Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R\n11F40         ; InCB; Extend # Mn       KAWI VOWEL SIGN EU\n11F41         ; InCB; Extend # Mc       KAWI SIGN KILLER\n11F5A         ; InCB; Extend # Mn       KAWI SIGN NUKTA\n13440         ; InCB; Extend # Mn       EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY\n13447..13455  ; InCB; Extend # Mn  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED\n1611E..16129  ; InCB; Extend # Mn  [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK\n1612D..1612F  ; InCB; Extend # Mn   [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA\n16AF0..16AF4  ; InCB; Extend # Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\n16B30..16B36  ; InCB; Extend # Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\n16F4F         ; InCB; Extend # Mn       MIAO SIGN CONSONANT MODIFIER BAR\n16F8F..16F92  ; InCB; Extend # Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n16FE4         ; InCB; Extend # Mn       KHITAN SMALL SCRIPT FILLER\n16FF0..16FF1  ; InCB; Extend # Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY\n1BC9D..1BC9E  ; InCB; Extend # Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\n1CF00..1CF2D  ; InCB; Extend # Mn  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT\n1CF30..1CF46  ; InCB; Extend # Mn  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG\n1D165..1D166  ; InCB; Extend # Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\n1D167..1D169  ; InCB; Extend # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\n1D16D..1D172  ; InCB; Extend # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5\n1D17B..1D182  ; InCB; Extend # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\n1D185..1D18B  ; InCB; Extend # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\n1D1AA..1D1AD  ; InCB; Extend # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\n1D242..1D244  ; InCB; Extend # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\n1DA00..1DA36  ; InCB; Extend # Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\n1DA3B..1DA6C  ; InCB; Extend # Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\n1DA75         ; InCB; Extend # Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\n1DA84         ; InCB; Extend # Mn       SIGNWRITING LOCATION HEAD NECK\n1DA9B..1DA9F  ; InCB; Extend # Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\n1DAA1..1DAAF  ; InCB; Extend # Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\n1E000..1E006  ; InCB; Extend # Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n1E008..1E018  ; InCB; Extend # Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n1E01B..1E021  ; InCB; Extend # Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n1E023..1E024  ; InCB; Extend # Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n1E026..1E02A  ; InCB; Extend # Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n1E08F         ; InCB; Extend # Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n1E130..1E136  ; InCB; Extend # Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D\n1E2AE         ; InCB; Extend # Mn       TOTO SIGN RISING TONE\n1E2EC..1E2EF  ; InCB; Extend # Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI\n1E4EC..1E4EF  ; InCB; Extend # Mn   [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH\n1E5EE..1E5EF  ; InCB; Extend # Mn   [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR\n1E6E3         ; InCB; Extend # Mn       TAI YO SIGN UE\n1E6E6         ; InCB; Extend # Mn       TAI YO SIGN AU\n1E6EE..1E6EF  ; InCB; Extend # Mn   [2] TAI YO SIGN AY..TAI YO SIGN ANG\n1E6F5         ; InCB; Extend # Mn       TAI YO SIGN OM\n1E8D0..1E8D6  ; InCB; Extend # Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\n1E944..1E94A  ; InCB; Extend # Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\n1F3FB..1F3FF  ; InCB; Extend # Sk   [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6\nE0020..E007F  ; InCB; Extend # Cf  [96] TAG SPACE..CANCEL TAG\nE0100..E01EF  ; InCB; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\n\n# Total code points: 2217\n\n# EOF\n"
  },
  {
    "path": "maint/Unicode.tables/DerivedGeneralCategory.txt",
    "content": "# DerivedGeneralCategory-17.0.0.txt\n# Date: 2025-07-24, 00:12:50 GMT\n# © 2025 Unicode®, Inc.\n# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.\n# For terms of use and license, see https://www.unicode.org/terms_of_use.html\n#\n# Unicode Character Database\n#   For documentation, see https://www.unicode.org/reports/tr44/\n\n# ================================================\n\n# Property:\tGeneral_Category\n\n# ================================================\n\n# General_Category=Unassigned\n\n0378..0379    ; Cn #   [2] <reserved-0378>..<reserved-0379>\n0380..0383    ; Cn #   [4] <reserved-0380>..<reserved-0383>\n038B          ; Cn #       <reserved-038B>\n038D          ; Cn #       <reserved-038D>\n03A2          ; Cn #       <reserved-03A2>\n0530          ; Cn #       <reserved-0530>\n0557..0558    ; Cn #   [2] <reserved-0557>..<reserved-0558>\n058B..058C    ; Cn #   [2] <reserved-058B>..<reserved-058C>\n0590          ; Cn #       <reserved-0590>\n05C8..05CF    ; Cn #   [8] <reserved-05C8>..<reserved-05CF>\n05EB..05EE    ; Cn #   [4] <reserved-05EB>..<reserved-05EE>\n05F5..05FF    ; Cn #  [11] <reserved-05F5>..<reserved-05FF>\n070E          ; Cn #       <reserved-070E>\n074B..074C    ; Cn #   [2] <reserved-074B>..<reserved-074C>\n07B2..07BF    ; Cn #  [14] <reserved-07B2>..<reserved-07BF>\n07FB..07FC    ; Cn #   [2] <reserved-07FB>..<reserved-07FC>\n082E..082F    ; Cn #   [2] <reserved-082E>..<reserved-082F>\n083F          ; Cn #       <reserved-083F>\n085C..085D    ; Cn #   [2] <reserved-085C>..<reserved-085D>\n085F          ; Cn #       <reserved-085F>\n086B..086F    ; Cn #   [5] <reserved-086B>..<reserved-086F>\n0892..0896    ; Cn #   [5] <reserved-0892>..<reserved-0896>\n0984          ; Cn #       <reserved-0984>\n098D..098E    ; Cn #   [2] <reserved-098D>..<reserved-098E>\n0991..0992    ; Cn #   [2] <reserved-0991>..<reserved-0992>\n09A9          ; Cn #       <reserved-09A9>\n09B1          ; Cn #       <reserved-09B1>\n09B3..09B5    ; Cn #   [3] <reserved-09B3>..<reserved-09B5>\n09BA..09BB    ; Cn #   [2] <reserved-09BA>..<reserved-09BB>\n09C5..09C6    ; Cn #   [2] <reserved-09C5>..<reserved-09C6>\n09C9..09CA    ; Cn #   [2] <reserved-09C9>..<reserved-09CA>\n09CF..09D6    ; Cn #   [8] <reserved-09CF>..<reserved-09D6>\n09D8..09DB    ; Cn #   [4] <reserved-09D8>..<reserved-09DB>\n09DE          ; Cn #       <reserved-09DE>\n09E4..09E5    ; Cn #   [2] <reserved-09E4>..<reserved-09E5>\n09FF..0A00    ; Cn #   [2] <reserved-09FF>..<reserved-0A00>\n0A04          ; Cn #       <reserved-0A04>\n0A0B..0A0E    ; Cn #   [4] <reserved-0A0B>..<reserved-0A0E>\n0A11..0A12    ; Cn #   [2] <reserved-0A11>..<reserved-0A12>\n0A29          ; Cn #       <reserved-0A29>\n0A31          ; Cn #       <reserved-0A31>\n0A34          ; Cn #       <reserved-0A34>\n0A37          ; Cn #       <reserved-0A37>\n0A3A..0A3B    ; Cn #   [2] <reserved-0A3A>..<reserved-0A3B>\n0A3D          ; Cn #       <reserved-0A3D>\n0A43..0A46    ; Cn #   [4] <reserved-0A43>..<reserved-0A46>\n0A49..0A4A    ; Cn #   [2] <reserved-0A49>..<reserved-0A4A>\n0A4E..0A50    ; Cn #   [3] <reserved-0A4E>..<reserved-0A50>\n0A52..0A58    ; Cn #   [7] <reserved-0A52>..<reserved-0A58>\n0A5D          ; Cn #       <reserved-0A5D>\n0A5F..0A65    ; Cn #   [7] <reserved-0A5F>..<reserved-0A65>\n0A77..0A80    ; Cn #  [10] <reserved-0A77>..<reserved-0A80>\n0A84          ; Cn #       <reserved-0A84>\n0A8E          ; Cn #       <reserved-0A8E>\n0A92          ; Cn #       <reserved-0A92>\n0AA9          ; Cn #       <reserved-0AA9>\n0AB1          ; Cn #       <reserved-0AB1>\n0AB4          ; Cn #       <reserved-0AB4>\n0ABA..0ABB    ; Cn #   [2] <reserved-0ABA>..<reserved-0ABB>\n0AC6          ; Cn #       <reserved-0AC6>\n0ACA          ; Cn #       <reserved-0ACA>\n0ACE..0ACF    ; Cn #   [2] <reserved-0ACE>..<reserved-0ACF>\n0AD1..0ADF    ; Cn #  [15] <reserved-0AD1>..<reserved-0ADF>\n0AE4..0AE5    ; Cn #   [2] <reserved-0AE4>..<reserved-0AE5>\n0AF2..0AF8    ; Cn #   [7] <reserved-0AF2>..<reserved-0AF8>\n0B00          ; Cn #       <reserved-0B00>\n0B04          ; Cn #       <reserved-0B04>\n0B0D..0B0E    ; Cn #   [2] <reserved-0B0D>..<reserved-0B0E>\n0B11..0B12    ; Cn #   [2] <reserved-0B11>..<reserved-0B12>\n0B29          ; Cn #       <reserved-0B29>\n0B31          ; Cn #       <reserved-0B31>\n0B34          ; Cn #       <reserved-0B34>\n0B3A..0B3B    ; Cn #   [2] <reserved-0B3A>..<reserved-0B3B>\n0B45..0B46    ; Cn #   [2] <reserved-0B45>..<reserved-0B46>\n0B49..0B4A    ; Cn #   [2] <reserved-0B49>..<reserved-0B4A>\n0B4E..0B54    ; Cn #   [7] <reserved-0B4E>..<reserved-0B54>\n0B58..0B5B    ; Cn #   [4] <reserved-0B58>..<reserved-0B5B>\n0B5E          ; Cn #       <reserved-0B5E>\n0B64..0B65    ; Cn #   [2] <reserved-0B64>..<reserved-0B65>\n0B78..0B81    ; Cn #  [10] <reserved-0B78>..<reserved-0B81>\n0B84          ; Cn #       <reserved-0B84>\n0B8B..0B8D    ; Cn #   [3] <reserved-0B8B>..<reserved-0B8D>\n0B91          ; Cn #       <reserved-0B91>\n0B96..0B98    ; Cn #   [3] <reserved-0B96>..<reserved-0B98>\n0B9B          ; Cn #       <reserved-0B9B>\n0B9D          ; Cn #       <reserved-0B9D>\n0BA0..0BA2    ; Cn #   [3] <reserved-0BA0>..<reserved-0BA2>\n0BA5..0BA7    ; Cn #   [3] <reserved-0BA5>..<reserved-0BA7>\n0BAB..0BAD    ; Cn #   [3] <reserved-0BAB>..<reserved-0BAD>\n0BBA..0BBD    ; Cn #   [4] <reserved-0BBA>..<reserved-0BBD>\n0BC3..0BC5    ; Cn #   [3] <reserved-0BC3>..<reserved-0BC5>\n0BC9          ; Cn #       <reserved-0BC9>\n0BCE..0BCF    ; Cn #   [2] <reserved-0BCE>..<reserved-0BCF>\n0BD1..0BD6    ; Cn #   [6] <reserved-0BD1>..<reserved-0BD6>\n0BD8..0BE5    ; Cn #  [14] <reserved-0BD8>..<reserved-0BE5>\n0BFB..0BFF    ; Cn #   [5] <reserved-0BFB>..<reserved-0BFF>\n0C0D          ; Cn #       <reserved-0C0D>\n0C11          ; Cn #       <reserved-0C11>\n0C29          ; Cn #       <reserved-0C29>\n0C3A..0C3B    ; Cn #   [2] <reserved-0C3A>..<reserved-0C3B>\n0C45          ; Cn #       <reserved-0C45>\n0C49          ; Cn #       <reserved-0C49>\n0C4E..0C54    ; Cn #   [7] <reserved-0C4E>..<reserved-0C54>\n0C57          ; Cn #       <reserved-0C57>\n0C5B          ; Cn #       <reserved-0C5B>\n0C5E..0C5F    ; Cn #   [2] <reserved-0C5E>..<reserved-0C5F>\n0C64..0C65    ; Cn #   [2] <reserved-0C64>..<reserved-0C65>\n0C70..0C76    ; Cn #   [7] <reserved-0C70>..<reserved-0C76>\n0C8D          ; Cn #       <reserved-0C8D>\n0C91          ; Cn #       <reserved-0C91>\n0CA9          ; Cn #       <reserved-0CA9>\n0CB4          ; Cn #       <reserved-0CB4>\n0CBA..0CBB    ; Cn #   [2] <reserved-0CBA>..<reserved-0CBB>\n0CC5          ; Cn #       <reserved-0CC5>\n0CC9          ; Cn #       <reserved-0CC9>\n0CCE..0CD4    ; Cn #   [7] <reserved-0CCE>..<reserved-0CD4>\n0CD7..0CDB    ; Cn #   [5] <reserved-0CD7>..<reserved-0CDB>\n0CDF          ; Cn #       <reserved-0CDF>\n0CE4..0CE5    ; Cn #   [2] <reserved-0CE4>..<reserved-0CE5>\n0CF0          ; Cn #       <reserved-0CF0>\n0CF4..0CFF    ; Cn #  [12] <reserved-0CF4>..<reserved-0CFF>\n0D0D          ; Cn #       <reserved-0D0D>\n0D11          ; Cn #       <reserved-0D11>\n0D45          ; Cn #       <reserved-0D45>\n0D49          ; Cn #       <reserved-0D49>\n0D50..0D53    ; Cn #   [4] <reserved-0D50>..<reserved-0D53>\n0D64..0D65    ; Cn #   [2] <reserved-0D64>..<reserved-0D65>\n0D80          ; Cn #       <reserved-0D80>\n0D84          ; Cn #       <reserved-0D84>\n0D97..0D99    ; Cn #   [3] <reserved-0D97>..<reserved-0D99>\n0DB2          ; Cn #       <reserved-0DB2>\n0DBC          ; Cn #       <reserved-0DBC>\n0DBE..0DBF    ; Cn #   [2] <reserved-0DBE>..<reserved-0DBF>\n0DC7..0DC9    ; Cn #   [3] <reserved-0DC7>..<reserved-0DC9>\n0DCB..0DCE    ; Cn #   [4] <reserved-0DCB>..<reserved-0DCE>\n0DD5          ; Cn #       <reserved-0DD5>\n0DD7          ; Cn #       <reserved-0DD7>\n0DE0..0DE5    ; Cn #   [6] <reserved-0DE0>..<reserved-0DE5>\n0DF0..0DF1    ; Cn #   [2] <reserved-0DF0>..<reserved-0DF1>\n0DF5..0E00    ; Cn #  [12] <reserved-0DF5>..<reserved-0E00>\n0E3B..0E3E    ; Cn #   [4] <reserved-0E3B>..<reserved-0E3E>\n0E5C..0E80    ; Cn #  [37] <reserved-0E5C>..<reserved-0E80>\n0E83          ; Cn #       <reserved-0E83>\n0E85          ; Cn #       <reserved-0E85>\n0E8B          ; Cn #       <reserved-0E8B>\n0EA4          ; Cn #       <reserved-0EA4>\n0EA6          ; Cn #       <reserved-0EA6>\n0EBE..0EBF    ; Cn #   [2] <reserved-0EBE>..<reserved-0EBF>\n0EC5          ; Cn #       <reserved-0EC5>\n0EC7          ; Cn #       <reserved-0EC7>\n0ECF          ; Cn #       <reserved-0ECF>\n0EDA..0EDB    ; Cn #   [2] <reserved-0EDA>..<reserved-0EDB>\n0EE0..0EFF    ; Cn #  [32] <reserved-0EE0>..<reserved-0EFF>\n0F48          ; Cn #       <reserved-0F48>\n0F6D..0F70    ; Cn #   [4] <reserved-0F6D>..<reserved-0F70>\n0F98          ; Cn #       <reserved-0F98>\n0FBD          ; Cn #       <reserved-0FBD>\n0FCD          ; Cn #       <reserved-0FCD>\n0FDB..0FFF    ; Cn #  [37] <reserved-0FDB>..<reserved-0FFF>\n10C6          ; Cn #       <reserved-10C6>\n10C8..10CC    ; Cn #   [5] <reserved-10C8>..<reserved-10CC>\n10CE..10CF    ; Cn #   [2] <reserved-10CE>..<reserved-10CF>\n1249          ; Cn #       <reserved-1249>\n124E..124F    ; Cn #   [2] <reserved-124E>..<reserved-124F>\n1257          ; Cn #       <reserved-1257>\n1259          ; Cn #       <reserved-1259>\n125E..125F    ; Cn #   [2] <reserved-125E>..<reserved-125F>\n1289          ; Cn #       <reserved-1289>\n128E..128F    ; Cn #   [2] <reserved-128E>..<reserved-128F>\n12B1          ; Cn #       <reserved-12B1>\n12B6..12B7    ; Cn #   [2] <reserved-12B6>..<reserved-12B7>\n12BF          ; Cn #       <reserved-12BF>\n12C1          ; Cn #       <reserved-12C1>\n12C6..12C7    ; Cn #   [2] <reserved-12C6>..<reserved-12C7>\n12D7          ; Cn #       <reserved-12D7>\n1311          ; Cn #       <reserved-1311>\n1316..1317    ; Cn #   [2] <reserved-1316>..<reserved-1317>\n135B..135C    ; Cn #   [2] <reserved-135B>..<reserved-135C>\n137D..137F    ; Cn #   [3] <reserved-137D>..<reserved-137F>\n139A..139F    ; Cn #   [6] <reserved-139A>..<reserved-139F>\n13F6..13F7    ; Cn #   [2] <reserved-13F6>..<reserved-13F7>\n13FE..13FF    ; Cn #   [2] <reserved-13FE>..<reserved-13FF>\n169D..169F    ; Cn #   [3] <reserved-169D>..<reserved-169F>\n16F9..16FF    ; Cn #   [7] <reserved-16F9>..<reserved-16FF>\n1716..171E    ; Cn #   [9] <reserved-1716>..<reserved-171E>\n1737..173F    ; Cn #   [9] <reserved-1737>..<reserved-173F>\n1754..175F    ; Cn #  [12] <reserved-1754>..<reserved-175F>\n176D          ; Cn #       <reserved-176D>\n1771          ; Cn #       <reserved-1771>\n1774..177F    ; Cn #  [12] <reserved-1774>..<reserved-177F>\n17DE..17DF    ; Cn #   [2] <reserved-17DE>..<reserved-17DF>\n17EA..17EF    ; Cn #   [6] <reserved-17EA>..<reserved-17EF>\n17FA..17FF    ; Cn #   [6] <reserved-17FA>..<reserved-17FF>\n181A..181F    ; Cn #   [6] <reserved-181A>..<reserved-181F>\n1879..187F    ; Cn #   [7] <reserved-1879>..<reserved-187F>\n18AB..18AF    ; Cn #   [5] <reserved-18AB>..<reserved-18AF>\n18F6..18FF    ; Cn #  [10] <reserved-18F6>..<reserved-18FF>\n191F          ; Cn #       <reserved-191F>\n192C..192F    ; Cn #   [4] <reserved-192C>..<reserved-192F>\n193C..193F    ; Cn #   [4] <reserved-193C>..<reserved-193F>\n1941..1943    ; Cn #   [3] <reserved-1941>..<reserved-1943>\n196E..196F    ; Cn #   [2] <reserved-196E>..<reserved-196F>\n1975..197F    ; Cn #  [11] <reserved-1975>..<reserved-197F>\n19AC..19AF    ; Cn #   [4] <reserved-19AC>..<reserved-19AF>\n19CA..19CF    ; Cn #   [6] <reserved-19CA>..<reserved-19CF>\n19DB..19DD    ; Cn #   [3] <reserved-19DB>..<reserved-19DD>\n1A1C..1A1D    ; Cn #   [2] <reserved-1A1C>..<reserved-1A1D>\n1A5F          ; Cn #       <reserved-1A5F>\n1A7D..1A7E    ; Cn #   [2] <reserved-1A7D>..<reserved-1A7E>\n1A8A..1A8F    ; Cn #   [6] <reserved-1A8A>..<reserved-1A8F>\n1A9A..1A9F    ; Cn #   [6] <reserved-1A9A>..<reserved-1A9F>\n1AAE..1AAF    ; Cn #   [2] <reserved-1AAE>..<reserved-1AAF>\n1ADE..1ADF    ; Cn #   [2] <reserved-1ADE>..<reserved-1ADF>\n1AEC..1AFF    ; Cn #  [20] <reserved-1AEC>..<reserved-1AFF>\n1B4D          ; Cn #       <reserved-1B4D>\n1BF4..1BFB    ; Cn #   [8] <reserved-1BF4>..<reserved-1BFB>\n1C38..1C3A    ; Cn #   [3] <reserved-1C38>..<reserved-1C3A>\n1C4A..1C4C    ; Cn #   [3] <reserved-1C4A>..<reserved-1C4C>\n1C8B..1C8F    ; Cn #   [5] <reserved-1C8B>..<reserved-1C8F>\n1CBB..1CBC    ; Cn #   [2] <reserved-1CBB>..<reserved-1CBC>\n1CC8..1CCF    ; Cn #   [8] <reserved-1CC8>..<reserved-1CCF>\n1CFB..1CFF    ; Cn #   [5] <reserved-1CFB>..<reserved-1CFF>\n1F16..1F17    ; Cn #   [2] <reserved-1F16>..<reserved-1F17>\n1F1E..1F1F    ; Cn #   [2] <reserved-1F1E>..<reserved-1F1F>\n1F46..1F47    ; Cn #   [2] <reserved-1F46>..<reserved-1F47>\n1F4E..1F4F    ; Cn #   [2] <reserved-1F4E>..<reserved-1F4F>\n1F58          ; Cn #       <reserved-1F58>\n1F5A          ; Cn #       <reserved-1F5A>\n1F5C          ; Cn #       <reserved-1F5C>\n1F5E          ; Cn #       <reserved-1F5E>\n1F7E..1F7F    ; Cn #   [2] <reserved-1F7E>..<reserved-1F7F>\n1FB5          ; Cn #       <reserved-1FB5>\n1FC5          ; Cn #       <reserved-1FC5>\n1FD4..1FD5    ; Cn #   [2] <reserved-1FD4>..<reserved-1FD5>\n1FDC          ; Cn #       <reserved-1FDC>\n1FF0..1FF1    ; Cn #   [2] <reserved-1FF0>..<reserved-1FF1>\n1FF5          ; Cn #       <reserved-1FF5>\n1FFF          ; Cn #       <reserved-1FFF>\n2065          ; Cn #       <reserved-2065>\n2072..2073    ; Cn #   [2] <reserved-2072>..<reserved-2073>\n208F          ; Cn #       <reserved-208F>\n209D..209F    ; Cn #   [3] <reserved-209D>..<reserved-209F>\n20C2..20CF    ; Cn #  [14] <reserved-20C2>..<reserved-20CF>\n20F1..20FF    ; Cn #  [15] <reserved-20F1>..<reserved-20FF>\n218C..218F    ; Cn #   [4] <reserved-218C>..<reserved-218F>\n242A..243F    ; Cn #  [22] <reserved-242A>..<reserved-243F>\n244B..245F    ; Cn #  [21] <reserved-244B>..<reserved-245F>\n2B74..2B75    ; Cn #   [2] <reserved-2B74>..<reserved-2B75>\n2CF4..2CF8    ; Cn #   [5] <reserved-2CF4>..<reserved-2CF8>\n2D26          ; Cn #       <reserved-2D26>\n2D28..2D2C    ; Cn #   [5] <reserved-2D28>..<reserved-2D2C>\n2D2E..2D2F    ; Cn #   [2] <reserved-2D2E>..<reserved-2D2F>\n2D68..2D6E    ; Cn #   [7] <reserved-2D68>..<reserved-2D6E>\n2D71..2D7E    ; Cn #  [14] <reserved-2D71>..<reserved-2D7E>\n2D97..2D9F    ; Cn #   [9] <reserved-2D97>..<reserved-2D9F>\n2DA7          ; Cn #       <reserved-2DA7>\n2DAF          ; Cn #       <reserved-2DAF>\n2DB7          ; Cn #       <reserved-2DB7>\n2DBF          ; Cn #       <reserved-2DBF>\n2DC7          ; Cn #       <reserved-2DC7>\n2DCF          ; Cn #       <reserved-2DCF>\n2DD7          ; Cn #       <reserved-2DD7>\n2DDF          ; Cn #       <reserved-2DDF>\n2E5E..2E7F    ; Cn #  [34] <reserved-2E5E>..<reserved-2E7F>\n2E9A          ; Cn #       <reserved-2E9A>\n2EF4..2EFF    ; Cn #  [12] <reserved-2EF4>..<reserved-2EFF>\n2FD6..2FEF    ; Cn #  [26] <reserved-2FD6>..<reserved-2FEF>\n3040          ; Cn #       <reserved-3040>\n3097..3098    ; Cn #   [2] <reserved-3097>..<reserved-3098>\n3100..3104    ; Cn #   [5] <reserved-3100>..<reserved-3104>\n3130          ; Cn #       <reserved-3130>\n318F          ; Cn #       <reserved-318F>\n31E6..31EE    ; Cn #   [9] <reserved-31E6>..<reserved-31EE>\n321F          ; Cn #       <reserved-321F>\nA48D..A48F    ; Cn #   [3] <reserved-A48D>..<reserved-A48F>\nA4C7..A4CF    ; Cn #   [9] <reserved-A4C7>..<reserved-A4CF>\nA62C..A63F    ; Cn #  [20] <reserved-A62C>..<reserved-A63F>\nA6F8..A6FF    ; Cn #   [8] <reserved-A6F8>..<reserved-A6FF>\nA7DD..A7F0    ; Cn #  [20] <reserved-A7DD>..<reserved-A7F0>\nA82D..A82F    ; Cn #   [3] <reserved-A82D>..<reserved-A82F>\nA83A..A83F    ; Cn #   [6] <reserved-A83A>..<reserved-A83F>\nA878..A87F    ; Cn #   [8] <reserved-A878>..<reserved-A87F>\nA8C6..A8CD    ; Cn #   [8] <reserved-A8C6>..<reserved-A8CD>\nA8DA..A8DF    ; Cn #   [6] <reserved-A8DA>..<reserved-A8DF>\nA954..A95E    ; Cn #  [11] <reserved-A954>..<reserved-A95E>\nA97D..A97F    ; Cn #   [3] <reserved-A97D>..<reserved-A97F>\nA9CE          ; Cn #       <reserved-A9CE>\nA9DA..A9DD    ; Cn #   [4] <reserved-A9DA>..<reserved-A9DD>\nA9FF          ; Cn #       <reserved-A9FF>\nAA37..AA3F    ; Cn #   [9] <reserved-AA37>..<reserved-AA3F>\nAA4E..AA4F    ; Cn #   [2] <reserved-AA4E>..<reserved-AA4F>\nAA5A..AA5B    ; Cn #   [2] <reserved-AA5A>..<reserved-AA5B>\nAAC3..AADA    ; Cn #  [24] <reserved-AAC3>..<reserved-AADA>\nAAF7..AB00    ; Cn #  [10] <reserved-AAF7>..<reserved-AB00>\nAB07..AB08    ; Cn #   [2] <reserved-AB07>..<reserved-AB08>\nAB0F..AB10    ; Cn #   [2] <reserved-AB0F>..<reserved-AB10>\nAB17..AB1F    ; Cn #   [9] <reserved-AB17>..<reserved-AB1F>\nAB27          ; Cn #       <reserved-AB27>\nAB2F          ; Cn #       <reserved-AB2F>\nAB6C..AB6F    ; Cn #   [4] <reserved-AB6C>..<reserved-AB6F>\nABEE..ABEF    ; Cn #   [2] <reserved-ABEE>..<reserved-ABEF>\nABFA..ABFF    ; Cn #   [6] <reserved-ABFA>..<reserved-ABFF>\nD7A4..D7AF    ; Cn #  [12] <reserved-D7A4>..<reserved-D7AF>\nD7C7..D7CA    ; Cn #   [4] <reserved-D7C7>..<reserved-D7CA>\nD7FC..D7FF    ; Cn #   [4] <reserved-D7FC>..<reserved-D7FF>\nFA6E..FA6F    ; Cn #   [2] <reserved-FA6E>..<reserved-FA6F>\nFADA..FAFF    ; Cn #  [38] <reserved-FADA>..<reserved-FAFF>\nFB07..FB12    ; Cn #  [12] <reserved-FB07>..<reserved-FB12>\nFB18..FB1C    ; Cn #   [5] <reserved-FB18>..<reserved-FB1C>\nFB37          ; Cn #       <reserved-FB37>\nFB3D          ; Cn #       <reserved-FB3D>\nFB3F          ; Cn #       <reserved-FB3F>\nFB42          ; Cn #       <reserved-FB42>\nFB45          ; Cn #       <reserved-FB45>\nFDD0..FDEF    ; Cn #  [32] <noncharacter-FDD0>..<noncharacter-FDEF>\nFE1A..FE1F    ; Cn #   [6] <reserved-FE1A>..<reserved-FE1F>\nFE53          ; Cn #       <reserved-FE53>\nFE67          ; Cn #       <reserved-FE67>\nFE6C..FE6F    ; Cn #   [4] <reserved-FE6C>..<reserved-FE6F>\nFE75          ; Cn #       <reserved-FE75>\nFEFD..FEFE    ; Cn #   [2] <reserved-FEFD>..<reserved-FEFE>\nFF00          ; Cn #       <reserved-FF00>\nFFBF..FFC1    ; Cn #   [3] <reserved-FFBF>..<reserved-FFC1>\nFFC8..FFC9    ; Cn #   [2] <reserved-FFC8>..<reserved-FFC9>\nFFD0..FFD1    ; Cn #   [2] <reserved-FFD0>..<reserved-FFD1>\nFFD8..FFD9    ; Cn #   [2] <reserved-FFD8>..<reserved-FFD9>\nFFDD..FFDF    ; Cn #   [3] <reserved-FFDD>..<reserved-FFDF>\nFFE7          ; Cn #       <reserved-FFE7>\nFFEF..FFF8    ; Cn #  [10] <reserved-FFEF>..<reserved-FFF8>\nFFFE..FFFF    ; Cn #   [2] <noncharacter-FFFE>..<noncharacter-FFFF>\n1000C         ; Cn #       <reserved-1000C>\n10027         ; Cn #       <reserved-10027>\n1003B         ; Cn #       <reserved-1003B>\n1003E         ; Cn #       <reserved-1003E>\n1004E..1004F  ; Cn #   [2] <reserved-1004E>..<reserved-1004F>\n1005E..1007F  ; Cn #  [34] <reserved-1005E>..<reserved-1007F>\n100FB..100FF  ; Cn #   [5] <reserved-100FB>..<reserved-100FF>\n10103..10106  ; Cn #   [4] <reserved-10103>..<reserved-10106>\n10134..10136  ; Cn #   [3] <reserved-10134>..<reserved-10136>\n1018F         ; Cn #       <reserved-1018F>\n1019D..1019F  ; Cn #   [3] <reserved-1019D>..<reserved-1019F>\n101A1..101CF  ; Cn #  [47] <reserved-101A1>..<reserved-101CF>\n101FE..1027F  ; Cn # [130] <reserved-101FE>..<reserved-1027F>\n1029D..1029F  ; Cn #   [3] <reserved-1029D>..<reserved-1029F>\n102D1..102DF  ; Cn #  [15] <reserved-102D1>..<reserved-102DF>\n102FC..102FF  ; Cn #   [4] <reserved-102FC>..<reserved-102FF>\n10324..1032C  ; Cn #   [9] <reserved-10324>..<reserved-1032C>\n1034B..1034F  ; Cn #   [5] <reserved-1034B>..<reserved-1034F>\n1037B..1037F  ; Cn #   [5] <reserved-1037B>..<reserved-1037F>\n1039E         ; Cn #       <reserved-1039E>\n103C4..103C7  ; Cn #   [4] <reserved-103C4>..<reserved-103C7>\n103D6..103FF  ; Cn #  [42] <reserved-103D6>..<reserved-103FF>\n1049E..1049F  ; Cn #   [2] <reserved-1049E>..<reserved-1049F>\n104AA..104AF  ; Cn #   [6] <reserved-104AA>..<reserved-104AF>\n104D4..104D7  ; Cn #   [4] <reserved-104D4>..<reserved-104D7>\n104FC..104FF  ; Cn #   [4] <reserved-104FC>..<reserved-104FF>\n10528..1052F  ; Cn #   [8] <reserved-10528>..<reserved-1052F>\n10564..1056E  ; Cn #  [11] <reserved-10564>..<reserved-1056E>\n1057B         ; Cn #       <reserved-1057B>\n1058B         ; Cn #       <reserved-1058B>\n10593         ; Cn #       <reserved-10593>\n10596         ; Cn #       <reserved-10596>\n105A2         ; Cn #       <reserved-105A2>\n105B2         ; Cn #       <reserved-105B2>\n105BA         ; Cn #       <reserved-105BA>\n105BD..105BF  ; Cn #   [3] <reserved-105BD>..<reserved-105BF>\n105F4..105FF  ; Cn #  [12] <reserved-105F4>..<reserved-105FF>\n10737..1073F  ; Cn #   [9] <reserved-10737>..<reserved-1073F>\n10756..1075F  ; Cn #  [10] <reserved-10756>..<reserved-1075F>\n10768..1077F  ; Cn #  [24] <reserved-10768>..<reserved-1077F>\n10786         ; Cn #       <reserved-10786>\n107B1         ; Cn #       <reserved-107B1>\n107BB..107FF  ; Cn #  [69] <reserved-107BB>..<reserved-107FF>\n10806..10807  ; Cn #   [2] <reserved-10806>..<reserved-10807>\n10809         ; Cn #       <reserved-10809>\n10836         ; Cn #       <reserved-10836>\n10839..1083B  ; Cn #   [3] <reserved-10839>..<reserved-1083B>\n1083D..1083E  ; Cn #   [2] <reserved-1083D>..<reserved-1083E>\n10856         ; Cn #       <reserved-10856>\n1089F..108A6  ; Cn #   [8] <reserved-1089F>..<reserved-108A6>\n108B0..108DF  ; Cn #  [48] <reserved-108B0>..<reserved-108DF>\n108F3         ; Cn #       <reserved-108F3>\n108F6..108FA  ; Cn #   [5] <reserved-108F6>..<reserved-108FA>\n1091C..1091E  ; Cn #   [3] <reserved-1091C>..<reserved-1091E>\n1093A..1093E  ; Cn #   [5] <reserved-1093A>..<reserved-1093E>\n1095A..1097F  ; Cn #  [38] <reserved-1095A>..<reserved-1097F>\n109B8..109BB  ; Cn #   [4] <reserved-109B8>..<reserved-109BB>\n109D0..109D1  ; Cn #   [2] <reserved-109D0>..<reserved-109D1>\n10A04         ; Cn #       <reserved-10A04>\n10A07..10A0B  ; Cn #   [5] <reserved-10A07>..<reserved-10A0B>\n10A14         ; Cn #       <reserved-10A14>\n10A18         ; Cn #       <reserved-10A18>\n10A36..10A37  ; Cn #   [2] <reserved-10A36>..<reserved-10A37>\n10A3B..10A3E  ; Cn #   [4] <reserved-10A3B>..<reserved-10A3E>\n10A49..10A4F  ; Cn #   [7] <reserved-10A49>..<reserved-10A4F>\n10A59..10A5F  ; Cn #   [7] <reserved-10A59>..<reserved-10A5F>\n10AA0..10ABF  ; Cn #  [32] <reserved-10AA0>..<reserved-10ABF>\n10AE7..10AEA  ; Cn #   [4] <reserved-10AE7>..<reserved-10AEA>\n10AF7..10AFF  ; Cn #   [9] <reserved-10AF7>..<reserved-10AFF>\n10B36..10B38  ; Cn #   [3] <reserved-10B36>..<reserved-10B38>\n10B56..10B57  ; Cn #   [2] <reserved-10B56>..<reserved-10B57>\n10B73..10B77  ; Cn #   [5] <reserved-10B73>..<reserved-10B77>\n10B92..10B98  ; Cn #   [7] <reserved-10B92>..<reserved-10B98>\n10B9D..10BA8  ; Cn #  [12] <reserved-10B9D>..<reserved-10BA8>\n10BB0..10BFF  ; Cn #  [80] <reserved-10BB0>..<reserved-10BFF>\n10C49..10C7F  ; Cn #  [55] <reserved-10C49>..<reserved-10C7F>\n10CB3..10CBF  ; Cn #  [13] <reserved-10CB3>..<reserved-10CBF>\n10CF3..10CF9  ; Cn #   [7] <reserved-10CF3>..<reserved-10CF9>\n10D28..10D2F  ; Cn #   [8] <reserved-10D28>..<reserved-10D2F>\n10D3A..10D3F  ; Cn #   [6] <reserved-10D3A>..<reserved-10D3F>\n10D66..10D68  ; Cn #   [3] <reserved-10D66>..<reserved-10D68>\n10D86..10D8D  ; Cn #   [8] <reserved-10D86>..<reserved-10D8D>\n10D90..10E5F  ; Cn # [208] <reserved-10D90>..<reserved-10E5F>\n10E7F         ; Cn #       <reserved-10E7F>\n10EAA         ; Cn #       <reserved-10EAA>\n10EAE..10EAF  ; Cn #   [2] <reserved-10EAE>..<reserved-10EAF>\n10EB2..10EC1  ; Cn #  [16] <reserved-10EB2>..<reserved-10EC1>\n10EC8..10ECF  ; Cn #   [8] <reserved-10EC8>..<reserved-10ECF>\n10ED9..10EF9  ; Cn #  [33] <reserved-10ED9>..<reserved-10EF9>\n10F28..10F2F  ; Cn #   [8] <reserved-10F28>..<reserved-10F2F>\n10F5A..10F6F  ; Cn #  [22] <reserved-10F5A>..<reserved-10F6F>\n10F8A..10FAF  ; Cn #  [38] <reserved-10F8A>..<reserved-10FAF>\n10FCC..10FDF  ; Cn #  [20] <reserved-10FCC>..<reserved-10FDF>\n10FF7..10FFF  ; Cn #   [9] <reserved-10FF7>..<reserved-10FFF>\n1104E..11051  ; Cn #   [4] <reserved-1104E>..<reserved-11051>\n11076..1107E  ; Cn #   [9] <reserved-11076>..<reserved-1107E>\n110C3..110CC  ; Cn #  [10] <reserved-110C3>..<reserved-110CC>\n110CE..110CF  ; Cn #   [2] <reserved-110CE>..<reserved-110CF>\n110E9..110EF  ; Cn #   [7] <reserved-110E9>..<reserved-110EF>\n110FA..110FF  ; Cn #   [6] <reserved-110FA>..<reserved-110FF>\n11135         ; Cn #       <reserved-11135>\n11148..1114F  ; Cn #   [8] <reserved-11148>..<reserved-1114F>\n11177..1117F  ; Cn #   [9] <reserved-11177>..<reserved-1117F>\n111E0         ; Cn #       <reserved-111E0>\n111F5..111FF  ; Cn #  [11] <reserved-111F5>..<reserved-111FF>\n11212         ; Cn #       <reserved-11212>\n11242..1127F  ; Cn #  [62] <reserved-11242>..<reserved-1127F>\n11287         ; Cn #       <reserved-11287>\n11289         ; Cn #       <reserved-11289>\n1128E         ; Cn #       <reserved-1128E>\n1129E         ; Cn #       <reserved-1129E>\n112AA..112AF  ; Cn #   [6] <reserved-112AA>..<reserved-112AF>\n112EB..112EF  ; Cn #   [5] <reserved-112EB>..<reserved-112EF>\n112FA..112FF  ; Cn #   [6] <reserved-112FA>..<reserved-112FF>\n11304         ; Cn #       <reserved-11304>\n1130D..1130E  ; Cn #   [2] <reserved-1130D>..<reserved-1130E>\n11311..11312  ; Cn #   [2] <reserved-11311>..<reserved-11312>\n11329         ; Cn #       <reserved-11329>\n11331         ; Cn #       <reserved-11331>\n11334         ; Cn #       <reserved-11334>\n1133A         ; Cn #       <reserved-1133A>\n11345..11346  ; Cn #   [2] <reserved-11345>..<reserved-11346>\n11349..1134A  ; Cn #   [2] <reserved-11349>..<reserved-1134A>\n1134E..1134F  ; Cn #   [2] <reserved-1134E>..<reserved-1134F>\n11351..11356  ; Cn #   [6] <reserved-11351>..<reserved-11356>\n11358..1135C  ; Cn #   [5] <reserved-11358>..<reserved-1135C>\n11364..11365  ; Cn #   [2] <reserved-11364>..<reserved-11365>\n1136D..1136F  ; Cn #   [3] <reserved-1136D>..<reserved-1136F>\n11375..1137F  ; Cn #  [11] <reserved-11375>..<reserved-1137F>\n1138A         ; Cn #       <reserved-1138A>\n1138C..1138D  ; Cn #   [2] <reserved-1138C>..<reserved-1138D>\n1138F         ; Cn #       <reserved-1138F>\n113B6         ; Cn #       <reserved-113B6>\n113C1         ; Cn #       <reserved-113C1>\n113C3..113C4  ; Cn #   [2] <reserved-113C3>..<reserved-113C4>\n113C6         ; Cn #       <reserved-113C6>\n113CB         ; Cn #       <reserved-113CB>\n113D6         ; Cn #       <reserved-113D6>\n113D9..113E0  ; Cn #   [8] <reserved-113D9>..<reserved-113E0>\n113E3..113FF  ; Cn #  [29] <reserved-113E3>..<reserved-113FF>\n1145C         ; Cn #       <reserved-1145C>\n11462..1147F  ; Cn #  [30] <reserved-11462>..<reserved-1147F>\n114C8..114CF  ; Cn #   [8] <reserved-114C8>..<reserved-114CF>\n114DA..1157F  ; Cn # [166] <reserved-114DA>..<reserved-1157F>\n115B6..115B7  ; Cn #   [2] <reserved-115B6>..<reserved-115B7>\n115DE..115FF  ; Cn #  [34] <reserved-115DE>..<reserved-115FF>\n11645..1164F  ; Cn #  [11] <reserved-11645>..<reserved-1164F>\n1165A..1165F  ; Cn #   [6] <reserved-1165A>..<reserved-1165F>\n1166D..1167F  ; Cn #  [19] <reserved-1166D>..<reserved-1167F>\n116BA..116BF  ; Cn #   [6] <reserved-116BA>..<reserved-116BF>\n116CA..116CF  ; Cn #   [6] <reserved-116CA>..<reserved-116CF>\n116E4..116FF  ; Cn #  [28] <reserved-116E4>..<reserved-116FF>\n1171B..1171C  ; Cn #   [2] <reserved-1171B>..<reserved-1171C>\n1172C..1172F  ; Cn #   [4] <reserved-1172C>..<reserved-1172F>\n11747..117FF  ; Cn # [185] <reserved-11747>..<reserved-117FF>\n1183C..1189F  ; Cn # [100] <reserved-1183C>..<reserved-1189F>\n118F3..118FE  ; Cn #  [12] <reserved-118F3>..<reserved-118FE>\n11907..11908  ; Cn #   [2] <reserved-11907>..<reserved-11908>\n1190A..1190B  ; Cn #   [2] <reserved-1190A>..<reserved-1190B>\n11914         ; Cn #       <reserved-11914>\n11917         ; Cn #       <reserved-11917>\n11936         ; Cn #       <reserved-11936>\n11939..1193A  ; Cn #   [2] <reserved-11939>..<reserved-1193A>\n11947..1194F  ; Cn #   [9] <reserved-11947>..<reserved-1194F>\n1195A..1199F  ; Cn #  [70] <reserved-1195A>..<reserved-1199F>\n119A8..119A9  ; Cn #   [2] <reserved-119A8>..<reserved-119A9>\n119D8..119D9  ; Cn #   [2] <reserved-119D8>..<reserved-119D9>\n119E5..119FF  ; Cn #  [27] <reserved-119E5>..<reserved-119FF>\n11A48..11A4F  ; Cn #   [8] <reserved-11A48>..<reserved-11A4F>\n11AA3..11AAF  ; Cn #  [13] <reserved-11AA3>..<reserved-11AAF>\n11AF9..11AFF  ; Cn #   [7] <reserved-11AF9>..<reserved-11AFF>\n11B0A..11B5F  ; Cn #  [86] <reserved-11B0A>..<reserved-11B5F>\n11B68..11BBF  ; Cn #  [88] <reserved-11B68>..<reserved-11BBF>\n11BE2..11BEF  ; Cn #  [14] <reserved-11BE2>..<reserved-11BEF>\n11BFA..11BFF  ; Cn #   [6] <reserved-11BFA>..<reserved-11BFF>\n11C09         ; Cn #       <reserved-11C09>\n11C37         ; Cn #       <reserved-11C37>\n11C46..11C4F  ; Cn #  [10] <reserved-11C46>..<reserved-11C4F>\n11C6D..11C6F  ; Cn #   [3] <reserved-11C6D>..<reserved-11C6F>\n11C90..11C91  ; Cn #   [2] <reserved-11C90>..<reserved-11C91>\n11CA8         ; Cn #       <reserved-11CA8>\n11CB7..11CFF  ; Cn #  [73] <reserved-11CB7>..<reserved-11CFF>\n11D07         ; Cn #       <reserved-11D07>\n11D0A         ; Cn #       <reserved-11D0A>\n11D37..11D39  ; Cn #   [3] <reserved-11D37>..<reserved-11D39>\n11D3B         ; Cn #       <reserved-11D3B>\n11D3E         ; Cn #       <reserved-11D3E>\n11D48..11D4F  ; Cn #   [8] <reserved-11D48>..<reserved-11D4F>\n11D5A..11D5F  ; Cn #   [6] <reserved-11D5A>..<reserved-11D5F>\n11D66         ; Cn #       <reserved-11D66>\n11D69         ; Cn #       <reserved-11D69>\n11D8F         ; Cn #       <reserved-11D8F>\n11D92         ; Cn #       <reserved-11D92>\n11D99..11D9F  ; Cn #   [7] <reserved-11D99>..<reserved-11D9F>\n11DAA..11DAF  ; Cn #   [6] <reserved-11DAA>..<reserved-11DAF>\n11DDC..11DDF  ; Cn #   [4] <reserved-11DDC>..<reserved-11DDF>\n11DEA..11EDF  ; Cn # [246] <reserved-11DEA>..<reserved-11EDF>\n11EF9..11EFF  ; Cn #   [7] <reserved-11EF9>..<reserved-11EFF>\n11F11         ; Cn #       <reserved-11F11>\n11F3B..11F3D  ; Cn #   [3] <reserved-11F3B>..<reserved-11F3D>\n11F5B..11FAF  ; Cn #  [85] <reserved-11F5B>..<reserved-11FAF>\n11FB1..11FBF  ; Cn #  [15] <reserved-11FB1>..<reserved-11FBF>\n11FF2..11FFE  ; Cn #  [13] <reserved-11FF2>..<reserved-11FFE>\n1239A..123FF  ; Cn # [102] <reserved-1239A>..<reserved-123FF>\n1246F         ; Cn #       <reserved-1246F>\n12475..1247F  ; Cn #  [11] <reserved-12475>..<reserved-1247F>\n12544..12F8F  ; Cn # [2636] <reserved-12544>..<reserved-12F8F>\n12FF3..12FFF  ; Cn #  [13] <reserved-12FF3>..<reserved-12FFF>\n13456..1345F  ; Cn #  [10] <reserved-13456>..<reserved-1345F>\n143FB..143FF  ; Cn #   [5] <reserved-143FB>..<reserved-143FF>\n14647..160FF  ; Cn # [6841] <reserved-14647>..<reserved-160FF>\n1613A..167FF  ; Cn # [1734] <reserved-1613A>..<reserved-167FF>\n16A39..16A3F  ; Cn #   [7] <reserved-16A39>..<reserved-16A3F>\n16A5F         ; Cn #       <reserved-16A5F>\n16A6A..16A6D  ; Cn #   [4] <reserved-16A6A>..<reserved-16A6D>\n16ABF         ; Cn #       <reserved-16ABF>\n16ACA..16ACF  ; Cn #   [6] <reserved-16ACA>..<reserved-16ACF>\n16AEE..16AEF  ; Cn #   [2] <reserved-16AEE>..<reserved-16AEF>\n16AF6..16AFF  ; Cn #  [10] <reserved-16AF6>..<reserved-16AFF>\n16B46..16B4F  ; Cn #  [10] <reserved-16B46>..<reserved-16B4F>\n16B5A         ; Cn #       <reserved-16B5A>\n16B62         ; Cn #       <reserved-16B62>\n16B78..16B7C  ; Cn #   [5] <reserved-16B78>..<reserved-16B7C>\n16B90..16D3F  ; Cn # [432] <reserved-16B90>..<reserved-16D3F>\n16D7A..16E3F  ; Cn # [198] <reserved-16D7A>..<reserved-16E3F>\n16E9B..16E9F  ; Cn #   [5] <reserved-16E9B>..<reserved-16E9F>\n16EB9..16EBA  ; Cn #   [2] <reserved-16EB9>..<reserved-16EBA>\n16ED4..16EFF  ; Cn #  [44] <reserved-16ED4>..<reserved-16EFF>\n16F4B..16F4E  ; Cn #   [4] <reserved-16F4B>..<reserved-16F4E>\n16F88..16F8E  ; Cn #   [7] <reserved-16F88>..<reserved-16F8E>\n16FA0..16FDF  ; Cn #  [64] <reserved-16FA0>..<reserved-16FDF>\n16FE5..16FEF  ; Cn #  [11] <reserved-16FE5>..<reserved-16FEF>\n16FF7..16FFF  ; Cn #   [9] <reserved-16FF7>..<reserved-16FFF>\n18CD6..18CFE  ; Cn #  [41] <reserved-18CD6>..<reserved-18CFE>\n18D1F..18D7F  ; Cn #  [97] <reserved-18D1F>..<reserved-18D7F>\n18DF3..1AFEF  ; Cn # [8701] <reserved-18DF3>..<reserved-1AFEF>\n1AFF4         ; Cn #       <reserved-1AFF4>\n1AFFC         ; Cn #       <reserved-1AFFC>\n1AFFF         ; Cn #       <reserved-1AFFF>\n1B123..1B131  ; Cn #  [15] <reserved-1B123>..<reserved-1B131>\n1B133..1B14F  ; Cn #  [29] <reserved-1B133>..<reserved-1B14F>\n1B153..1B154  ; Cn #   [2] <reserved-1B153>..<reserved-1B154>\n1B156..1B163  ; Cn #  [14] <reserved-1B156>..<reserved-1B163>\n1B168..1B16F  ; Cn #   [8] <reserved-1B168>..<reserved-1B16F>\n1B2FC..1BBFF  ; Cn # [2308] <reserved-1B2FC>..<reserved-1BBFF>\n1BC6B..1BC6F  ; Cn #   [5] <reserved-1BC6B>..<reserved-1BC6F>\n1BC7D..1BC7F  ; Cn #   [3] <reserved-1BC7D>..<reserved-1BC7F>\n1BC89..1BC8F  ; Cn #   [7] <reserved-1BC89>..<reserved-1BC8F>\n1BC9A..1BC9B  ; Cn #   [2] <reserved-1BC9A>..<reserved-1BC9B>\n1BCA4..1CBFF  ; Cn # [3932] <reserved-1BCA4>..<reserved-1CBFF>\n1CCFD..1CCFF  ; Cn #   [3] <reserved-1CCFD>..<reserved-1CCFF>\n1CEB4..1CEB9  ; Cn #   [6] <reserved-1CEB4>..<reserved-1CEB9>\n1CED1..1CEDF  ; Cn #  [15] <reserved-1CED1>..<reserved-1CEDF>\n1CEF1..1CEFF  ; Cn #  [15] <reserved-1CEF1>..<reserved-1CEFF>\n1CF2E..1CF2F  ; Cn #   [2] <reserved-1CF2E>..<reserved-1CF2F>\n1CF47..1CF4F  ; Cn #   [9] <reserved-1CF47>..<reserved-1CF4F>\n1CFC4..1CFFF  ; Cn #  [60] <reserved-1CFC4>..<reserved-1CFFF>\n1D0F6..1D0FF  ; Cn #  [10] <reserved-1D0F6>..<reserved-1D0FF>\n1D127..1D128  ; Cn #   [2] <reserved-1D127>..<reserved-1D128>\n1D1EB..1D1FF  ; Cn #  [21] <reserved-1D1EB>..<reserved-1D1FF>\n1D246..1D2BF  ; Cn # [122] <reserved-1D246>..<reserved-1D2BF>\n1D2D4..1D2DF  ; Cn #  [12] <reserved-1D2D4>..<reserved-1D2DF>\n1D2F4..1D2FF  ; Cn #  [12] <reserved-1D2F4>..<reserved-1D2FF>\n1D357..1D35F  ; Cn #   [9] <reserved-1D357>..<reserved-1D35F>\n1D379..1D3FF  ; Cn # [135] <reserved-1D379>..<reserved-1D3FF>\n1D455         ; Cn #       <reserved-1D455>\n1D49D         ; Cn #       <reserved-1D49D>\n1D4A0..1D4A1  ; Cn #   [2] <reserved-1D4A0>..<reserved-1D4A1>\n1D4A3..1D4A4  ; Cn #   [2] <reserved-1D4A3>..<reserved-1D4A4>\n1D4A7..1D4A8  ; Cn #   [2] <reserved-1D4A7>..<reserved-1D4A8>\n1D4AD         ; Cn #       <reserved-1D4AD>\n1D4BA         ; Cn #       <reserved-1D4BA>\n1D4BC         ; Cn #       <reserved-1D4BC>\n1D4C4         ; Cn #       <reserved-1D4C4>\n1D506         ; Cn #       <reserved-1D506>\n1D50B..1D50C  ; Cn #   [2] <reserved-1D50B>..<reserved-1D50C>\n1D515         ; Cn #       <reserved-1D515>\n1D51D         ; Cn #       <reserved-1D51D>\n1D53A         ; Cn #       <reserved-1D53A>\n1D53F         ; Cn #       <reserved-1D53F>\n1D545         ; Cn #       <reserved-1D545>\n1D547..1D549  ; Cn #   [3] <reserved-1D547>..<reserved-1D549>\n1D551         ; Cn #       <reserved-1D551>\n1D6A6..1D6A7  ; Cn #   [2] <reserved-1D6A6>..<reserved-1D6A7>\n1D7CC..1D7CD  ; Cn #   [2] <reserved-1D7CC>..<reserved-1D7CD>\n1DA8C..1DA9A  ; Cn #  [15] <reserved-1DA8C>..<reserved-1DA9A>\n1DAA0         ; Cn #       <reserved-1DAA0>\n1DAB0..1DEFF  ; Cn # [1104] <reserved-1DAB0>..<reserved-1DEFF>\n1DF1F..1DF24  ; Cn #   [6] <reserved-1DF1F>..<reserved-1DF24>\n1DF2B..1DFFF  ; Cn # [213] <reserved-1DF2B>..<reserved-1DFFF>\n1E007         ; Cn #       <reserved-1E007>\n1E019..1E01A  ; Cn #   [2] <reserved-1E019>..<reserved-1E01A>\n1E022         ; Cn #       <reserved-1E022>\n1E025         ; Cn #       <reserved-1E025>\n1E02B..1E02F  ; Cn #   [5] <reserved-1E02B>..<reserved-1E02F>\n1E06E..1E08E  ; Cn #  [33] <reserved-1E06E>..<reserved-1E08E>\n1E090..1E0FF  ; Cn # [112] <reserved-1E090>..<reserved-1E0FF>\n1E12D..1E12F  ; Cn #   [3] <reserved-1E12D>..<reserved-1E12F>\n1E13E..1E13F  ; Cn #   [2] <reserved-1E13E>..<reserved-1E13F>\n1E14A..1E14D  ; Cn #   [4] <reserved-1E14A>..<reserved-1E14D>\n1E150..1E28F  ; Cn # [320] <reserved-1E150>..<reserved-1E28F>\n1E2AF..1E2BF  ; Cn #  [17] <reserved-1E2AF>..<reserved-1E2BF>\n1E2FA..1E2FE  ; Cn #   [5] <reserved-1E2FA>..<reserved-1E2FE>\n1E300..1E4CF  ; Cn # [464] <reserved-1E300>..<reserved-1E4CF>\n1E4FA..1E5CF  ; Cn # [214] <reserved-1E4FA>..<reserved-1E5CF>\n1E5FB..1E5FE  ; Cn #   [4] <reserved-1E5FB>..<reserved-1E5FE>\n1E600..1E6BF  ; Cn # [192] <reserved-1E600>..<reserved-1E6BF>\n1E6DF         ; Cn #       <reserved-1E6DF>\n1E6F6..1E6FD  ; Cn #   [8] <reserved-1E6F6>..<reserved-1E6FD>\n1E700..1E7DF  ; Cn # [224] <reserved-1E700>..<reserved-1E7DF>\n1E7E7         ; Cn #       <reserved-1E7E7>\n1E7EC         ; Cn #       <reserved-1E7EC>\n1E7EF         ; Cn #       <reserved-1E7EF>\n1E7FF         ; Cn #       <reserved-1E7FF>\n1E8C5..1E8C6  ; Cn #   [2] <reserved-1E8C5>..<reserved-1E8C6>\n1E8D7..1E8FF  ; Cn #  [41] <reserved-1E8D7>..<reserved-1E8FF>\n1E94C..1E94F  ; Cn #   [4] <reserved-1E94C>..<reserved-1E94F>\n1E95A..1E95D  ; Cn #   [4] <reserved-1E95A>..<reserved-1E95D>\n1E960..1EC70  ; Cn # [785] <reserved-1E960>..<reserved-1EC70>\n1ECB5..1ED00  ; Cn #  [76] <reserved-1ECB5>..<reserved-1ED00>\n1ED3E..1EDFF  ; Cn # [194] <reserved-1ED3E>..<reserved-1EDFF>\n1EE04         ; Cn #       <reserved-1EE04>\n1EE20         ; Cn #       <reserved-1EE20>\n1EE23         ; Cn #       <reserved-1EE23>\n1EE25..1EE26  ; Cn #   [2] <reserved-1EE25>..<reserved-1EE26>\n1EE28         ; Cn #       <reserved-1EE28>\n1EE33         ; Cn #       <reserved-1EE33>\n1EE38         ; Cn #       <reserved-1EE38>\n1EE3A         ; Cn #       <reserved-1EE3A>\n1EE3C..1EE41  ; Cn #   [6] <reserved-1EE3C>..<reserved-1EE41>\n1EE43..1EE46  ; Cn #   [4] <reserved-1EE43>..<reserved-1EE46>\n1EE48         ; Cn #       <reserved-1EE48>\n1EE4A         ; Cn #       <reserved-1EE4A>\n1EE4C         ; Cn #       <reserved-1EE4C>\n1EE50         ; Cn #       <reserved-1EE50>\n1EE53         ; Cn #       <reserved-1EE53>\n1EE55..1EE56  ; Cn #   [2] <reserved-1EE55>..<reserved-1EE56>\n1EE58         ; Cn #       <reserved-1EE58>\n1EE5A         ; Cn #       <reserved-1EE5A>\n1EE5C         ; Cn #       <reserved-1EE5C>\n1EE5E         ; Cn #       <reserved-1EE5E>\n1EE60         ; Cn #       <reserved-1EE60>\n1EE63         ; Cn #       <reserved-1EE63>\n1EE65..1EE66  ; Cn #   [2] <reserved-1EE65>..<reserved-1EE66>\n1EE6B         ; Cn #       <reserved-1EE6B>\n1EE73         ; Cn #       <reserved-1EE73>\n1EE78         ; Cn #       <reserved-1EE78>\n1EE7D         ; Cn #       <reserved-1EE7D>\n1EE7F         ; Cn #       <reserved-1EE7F>\n1EE8A         ; Cn #       <reserved-1EE8A>\n1EE9C..1EEA0  ; Cn #   [5] <reserved-1EE9C>..<reserved-1EEA0>\n1EEA4         ; Cn #       <reserved-1EEA4>\n1EEAA         ; Cn #       <reserved-1EEAA>\n1EEBC..1EEEF  ; Cn #  [52] <reserved-1EEBC>..<reserved-1EEEF>\n1EEF2..1EFFF  ; Cn # [270] <reserved-1EEF2>..<reserved-1EFFF>\n1F02C..1F02F  ; Cn #   [4] <reserved-1F02C>..<reserved-1F02F>\n1F094..1F09F  ; Cn #  [12] <reserved-1F094>..<reserved-1F09F>\n1F0AF..1F0B0  ; Cn #   [2] <reserved-1F0AF>..<reserved-1F0B0>\n1F0C0         ; Cn #       <reserved-1F0C0>\n1F0D0         ; Cn #       <reserved-1F0D0>\n1F0F6..1F0FF  ; Cn #  [10] <reserved-1F0F6>..<reserved-1F0FF>\n1F1AE..1F1E5  ; Cn #  [56] <reserved-1F1AE>..<reserved-1F1E5>\n1F203..1F20F  ; Cn #  [13] <reserved-1F203>..<reserved-1F20F>\n1F23C..1F23F  ; Cn #   [4] <reserved-1F23C>..<reserved-1F23F>\n1F249..1F24F  ; Cn #   [7] <reserved-1F249>..<reserved-1F24F>\n1F252..1F25F  ; Cn #  [14] <reserved-1F252>..<reserved-1F25F>\n1F266..1F2FF  ; Cn # [154] <reserved-1F266>..<reserved-1F2FF>\n1F6D9..1F6DB  ; Cn #   [3] <reserved-1F6D9>..<reserved-1F6DB>\n1F6ED..1F6EF  ; Cn #   [3] <reserved-1F6ED>..<reserved-1F6EF>\n1F6FD..1F6FF  ; Cn #   [3] <reserved-1F6FD>..<reserved-1F6FF>\n1F7DA..1F7DF  ; Cn #   [6] <reserved-1F7DA>..<reserved-1F7DF>\n1F7EC..1F7EF  ; Cn #   [4] <reserved-1F7EC>..<reserved-1F7EF>\n1F7F1..1F7FF  ; Cn #  [15] <reserved-1F7F1>..<reserved-1F7FF>\n1F80C..1F80F  ; Cn #   [4] <reserved-1F80C>..<reserved-1F80F>\n1F848..1F84F  ; Cn #   [8] <reserved-1F848>..<reserved-1F84F>\n1F85A..1F85F  ; Cn #   [6] <reserved-1F85A>..<reserved-1F85F>\n1F888..1F88F  ; Cn #   [8] <reserved-1F888>..<reserved-1F88F>\n1F8AE..1F8AF  ; Cn #   [2] <reserved-1F8AE>..<reserved-1F8AF>\n1F8BC..1F8BF  ; Cn #   [4] <reserved-1F8BC>..<reserved-1F8BF>\n1F8C2..1F8CF  ; Cn #  [14] <reserved-1F8C2>..<reserved-1F8CF>\n1F8D9..1F8FF  ; Cn #  [39] <reserved-1F8D9>..<reserved-1F8FF>\n1FA58..1FA5F  ; Cn #   [8] <reserved-1FA58>..<reserved-1FA5F>\n1FA6E..1FA6F  ; Cn #   [2] <reserved-1FA6E>..<reserved-1FA6F>\n1FA7D..1FA7F  ; Cn #   [3] <reserved-1FA7D>..<reserved-1FA7F>\n1FA8B..1FA8D  ; Cn #   [3] <reserved-1FA8B>..<reserved-1FA8D>\n1FAC7         ; Cn #       <reserved-1FAC7>\n1FAC9..1FACC  ; Cn #   [4] <reserved-1FAC9>..<reserved-1FACC>\n1FADD..1FADE  ; Cn #   [2] <reserved-1FADD>..<reserved-1FADE>\n1FAEB..1FAEE  ; Cn #   [4] <reserved-1FAEB>..<reserved-1FAEE>\n1FAF9..1FAFF  ; Cn #   [7] <reserved-1FAF9>..<reserved-1FAFF>\n1FB93         ; Cn #       <reserved-1FB93>\n1FBFB..1FFFF  ; Cn # [1029] <reserved-1FBFB>..<noncharacter-1FFFF>\n2A6E0..2A6FF  ; Cn #  [32] <reserved-2A6E0>..<reserved-2A6FF>\n2B81E..2B81F  ; Cn #   [2] <reserved-2B81E>..<reserved-2B81F>\n2CEAE..2CEAF  ; Cn #   [2] <reserved-2CEAE>..<reserved-2CEAF>\n2EBE1..2EBEF  ; Cn #  [15] <reserved-2EBE1>..<reserved-2EBEF>\n2EE5E..2F7FF  ; Cn # [2466] <reserved-2EE5E>..<reserved-2F7FF>\n2FA1E..2FFFF  ; Cn # [1506] <reserved-2FA1E>..<noncharacter-2FFFF>\n3134B..3134F  ; Cn #   [5] <reserved-3134B>..<reserved-3134F>\n3347A..E0000  ; Cn # [707463] <reserved-3347A>..<reserved-E0000>\nE0002..E001F  ; Cn #  [30] <reserved-E0002>..<reserved-E001F>\nE0080..E00FF  ; Cn # [128] <reserved-E0080>..<reserved-E00FF>\nE01F0..EFFFF  ; Cn # [65040] <reserved-E01F0>..<noncharacter-EFFFF>\nFFFFE..FFFFF  ; Cn #   [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>\n10FFFE..10FFFF; Cn #   [2] <noncharacter-10FFFE>..<noncharacter-10FFFF>\n\n# Total code points: 814730\n\n# ================================================\n\n# General_Category=Uppercase_Letter\n\n0041..005A    ; Lu #  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n00C0..00D6    ; Lu #  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00DE    ; Lu #   [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN\n0100          ; Lu #       LATIN CAPITAL LETTER A WITH MACRON\n0102          ; Lu #       LATIN CAPITAL LETTER A WITH BREVE\n0104          ; Lu #       LATIN CAPITAL LETTER A WITH OGONEK\n0106          ; Lu #       LATIN CAPITAL LETTER C WITH ACUTE\n0108          ; Lu #       LATIN CAPITAL LETTER C WITH CIRCUMFLEX\n010A          ; Lu #       LATIN CAPITAL LETTER C WITH DOT ABOVE\n010C          ; Lu #       LATIN CAPITAL LETTER C WITH CARON\n010E          ; Lu #       LATIN CAPITAL LETTER D WITH CARON\n0110          ; Lu #       LATIN CAPITAL LETTER D WITH STROKE\n0112          ; Lu #       LATIN CAPITAL LETTER E WITH MACRON\n0114          ; Lu #       LATIN CAPITAL LETTER E WITH BREVE\n0116          ; Lu #       LATIN CAPITAL LETTER E WITH DOT ABOVE\n0118          ; Lu #       LATIN CAPITAL LETTER E WITH OGONEK\n011A          ; Lu #       LATIN CAPITAL LETTER E WITH CARON\n011C          ; Lu #       LATIN CAPITAL LETTER G WITH CIRCUMFLEX\n011E          ; Lu #       LATIN CAPITAL LETTER G WITH BREVE\n0120          ; Lu #       LATIN CAPITAL LETTER G WITH DOT ABOVE\n0122          ; Lu #       LATIN CAPITAL LETTER G WITH CEDILLA\n0124          ; Lu #       LATIN CAPITAL LETTER H WITH CIRCUMFLEX\n0126          ; Lu #       LATIN CAPITAL LETTER H WITH STROKE\n0128          ; Lu #       LATIN CAPITAL LETTER I WITH TILDE\n012A          ; Lu #       LATIN CAPITAL LETTER I WITH MACRON\n012C          ; Lu #       LATIN CAPITAL LETTER I WITH BREVE\n012E          ; Lu #       LATIN CAPITAL LETTER I WITH OGONEK\n0130          ; Lu #       LATIN CAPITAL LETTER I WITH DOT ABOVE\n0132          ; Lu #       LATIN CAPITAL LIGATURE IJ\n0134          ; Lu #       LATIN CAPITAL LETTER J WITH CIRCUMFLEX\n0136          ; Lu #       LATIN CAPITAL LETTER K WITH CEDILLA\n0139          ; Lu #       LATIN CAPITAL LETTER L WITH ACUTE\n013B          ; Lu #       LATIN CAPITAL LETTER L WITH CEDILLA\n013D          ; Lu #       LATIN CAPITAL LETTER L WITH CARON\n013F          ; Lu #       LATIN CAPITAL LETTER L WITH MIDDLE DOT\n0141          ; Lu #       LATIN CAPITAL LETTER L WITH STROKE\n0143          ; Lu #       LATIN CAPITAL LETTER N WITH ACUTE\n0145          ; Lu #       LATIN CAPITAL LETTER N WITH CEDILLA\n0147          ; Lu #       LATIN CAPITAL LETTER N WITH CARON\n014A          ; Lu #       LATIN CAPITAL LETTER ENG\n014C          ; Lu #       LATIN CAPITAL LETTER O WITH MACRON\n014E          ; Lu #       LATIN CAPITAL LETTER O WITH BREVE\n0150          ; Lu #       LATIN CAPITAL LETTER O WITH DOUBLE ACUTE\n0152          ; Lu #       LATIN CAPITAL LIGATURE OE\n0154          ; Lu #       LATIN CAPITAL LETTER R WITH ACUTE\n0156          ; Lu #       LATIN CAPITAL LETTER R WITH CEDILLA\n0158          ; Lu #       LATIN CAPITAL LETTER R WITH CARON\n015A          ; Lu #       LATIN CAPITAL LETTER S WITH ACUTE\n015C          ; Lu #       LATIN CAPITAL LETTER S WITH CIRCUMFLEX\n015E          ; Lu #       LATIN CAPITAL LETTER S WITH CEDILLA\n0160          ; Lu #       LATIN CAPITAL LETTER S WITH CARON\n0162          ; Lu #       LATIN CAPITAL LETTER T WITH CEDILLA\n0164          ; Lu #       LATIN CAPITAL LETTER T WITH CARON\n0166          ; Lu #       LATIN CAPITAL LETTER T WITH STROKE\n0168          ; Lu #       LATIN CAPITAL LETTER U WITH TILDE\n016A          ; Lu #       LATIN CAPITAL LETTER U WITH MACRON\n016C          ; Lu #       LATIN CAPITAL LETTER U WITH BREVE\n016E          ; Lu #       LATIN CAPITAL LETTER U WITH RING ABOVE\n0170          ; Lu #       LATIN CAPITAL LETTER U WITH DOUBLE ACUTE\n0172          ; Lu #       LATIN CAPITAL LETTER U WITH OGONEK\n0174          ; Lu #       LATIN CAPITAL LETTER W WITH CIRCUMFLEX\n0176          ; Lu #       LATIN CAPITAL LETTER Y WITH CIRCUMFLEX\n0178..0179    ; Lu #   [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE\n017B          ; Lu #       LATIN CAPITAL LETTER Z WITH DOT ABOVE\n017D          ; Lu #       LATIN CAPITAL LETTER Z WITH CARON\n0181..0182    ; Lu #   [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR\n0184          ; Lu #       LATIN CAPITAL LETTER TONE SIX\n0186..0187    ; Lu #   [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK\n0189..018B    ; Lu #   [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR\n018E..0191    ; Lu #   [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK\n0193..0194    ; Lu #   [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA\n0196..0198    ; Lu #   [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK\n019C..019D    ; Lu #   [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK\n019F..01A0    ; Lu #   [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN\n01A2          ; Lu #       LATIN CAPITAL LETTER OI\n01A4          ; Lu #       LATIN CAPITAL LETTER P WITH HOOK\n01A6..01A7    ; Lu #   [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO\n01A9          ; Lu #       LATIN CAPITAL LETTER ESH\n01AC          ; Lu #       LATIN CAPITAL LETTER T WITH HOOK\n01AE..01AF    ; Lu #   [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN\n01B1..01B3    ; Lu #   [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK\n01B5          ; Lu #       LATIN CAPITAL LETTER Z WITH STROKE\n01B7..01B8    ; Lu #   [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED\n01BC          ; Lu #       LATIN CAPITAL LETTER TONE FIVE\n01C4          ; Lu #       LATIN CAPITAL LETTER DZ WITH CARON\n01C7          ; Lu #       LATIN CAPITAL LETTER LJ\n01CA          ; Lu #       LATIN CAPITAL LETTER NJ\n01CD          ; Lu #       LATIN CAPITAL LETTER A WITH CARON\n01CF          ; Lu #       LATIN CAPITAL LETTER I WITH CARON\n01D1          ; Lu #       LATIN CAPITAL LETTER O WITH CARON\n01D3          ; Lu #       LATIN CAPITAL LETTER U WITH CARON\n01D5          ; Lu #       LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON\n01D7          ; Lu #       LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE\n01D9          ; Lu #       LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON\n01DB          ; Lu #       LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE\n01DE          ; Lu #       LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON\n01E0          ; Lu #       LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON\n01E2          ; Lu #       LATIN CAPITAL LETTER AE WITH MACRON\n01E4          ; Lu #       LATIN CAPITAL LETTER G WITH STROKE\n01E6          ; Lu #       LATIN CAPITAL LETTER G WITH CARON\n01E8          ; Lu #       LATIN CAPITAL LETTER K WITH CARON\n01EA          ; Lu #       LATIN CAPITAL LETTER O WITH OGONEK\n01EC          ; Lu #       LATIN CAPITAL LETTER O WITH OGONEK AND MACRON\n01EE          ; Lu #       LATIN CAPITAL LETTER EZH WITH CARON\n01F1          ; Lu #       LATIN CAPITAL LETTER DZ\n01F4          ; Lu #       LATIN CAPITAL LETTER G WITH ACUTE\n01F6..01F8    ; Lu #   [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE\n01FA          ; Lu #       LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE\n01FC          ; Lu #       LATIN CAPITAL LETTER AE WITH ACUTE\n01FE          ; Lu #       LATIN CAPITAL LETTER O WITH STROKE AND ACUTE\n0200          ; Lu #       LATIN CAPITAL LETTER A WITH DOUBLE GRAVE\n0202          ; Lu #       LATIN CAPITAL LETTER A WITH INVERTED BREVE\n0204          ; Lu #       LATIN CAPITAL LETTER E WITH DOUBLE GRAVE\n0206          ; Lu #       LATIN CAPITAL LETTER E WITH INVERTED BREVE\n0208          ; Lu #       LATIN CAPITAL LETTER I WITH DOUBLE GRAVE\n020A          ; Lu #       LATIN CAPITAL LETTER I WITH INVERTED BREVE\n020C          ; Lu #       LATIN CAPITAL LETTER O WITH DOUBLE GRAVE\n020E          ; Lu #       LATIN CAPITAL LETTER O WITH INVERTED BREVE\n0210          ; Lu #       LATIN CAPITAL LETTER R WITH DOUBLE GRAVE\n0212          ; Lu #       LATIN CAPITAL LETTER R WITH INVERTED BREVE\n0214          ; Lu #       LATIN CAPITAL LETTER U WITH DOUBLE GRAVE\n0216          ; Lu #       LATIN CAPITAL LETTER U WITH INVERTED BREVE\n0218          ; Lu #       LATIN CAPITAL LETTER S WITH COMMA BELOW\n021A          ; Lu #       LATIN CAPITAL LETTER T WITH COMMA BELOW\n021C          ; Lu #       LATIN CAPITAL LETTER YOGH\n021E          ; Lu #       LATIN CAPITAL LETTER H WITH CARON\n0220          ; Lu #       LATIN CAPITAL LETTER N WITH LONG RIGHT LEG\n0222          ; Lu #       LATIN CAPITAL LETTER OU\n0224          ; Lu #       LATIN CAPITAL LETTER Z WITH HOOK\n0226          ; Lu #       LATIN CAPITAL LETTER A WITH DOT ABOVE\n0228          ; Lu #       LATIN CAPITAL LETTER E WITH CEDILLA\n022A          ; Lu #       LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON\n022C          ; Lu #       LATIN CAPITAL LETTER O WITH TILDE AND MACRON\n022E          ; Lu #       LATIN CAPITAL LETTER O WITH DOT ABOVE\n0230          ; Lu #       LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON\n0232          ; Lu #       LATIN CAPITAL LETTER Y WITH MACRON\n023A..023B    ; Lu #   [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE\n023D..023E    ; Lu #   [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE\n0241          ; Lu #       LATIN CAPITAL LETTER GLOTTAL STOP\n0243..0246    ; Lu #   [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE\n0248          ; Lu #       LATIN CAPITAL LETTER J WITH STROKE\n024A          ; Lu #       LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL\n024C          ; Lu #       LATIN CAPITAL LETTER R WITH STROKE\n024E          ; Lu #       LATIN CAPITAL LETTER Y WITH STROKE\n0370          ; Lu #       GREEK CAPITAL LETTER HETA\n0372          ; Lu #       GREEK CAPITAL LETTER ARCHAIC SAMPI\n0376          ; Lu #       GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA\n037F          ; Lu #       GREEK CAPITAL LETTER YOT\n0386          ; Lu #       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0388..038A    ; Lu #   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; Lu #       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..038F    ; Lu #   [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS\n0391..03A1    ; Lu #  [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO\n03A3..03AB    ; Lu #   [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA\n03CF          ; Lu #       GREEK CAPITAL KAI SYMBOL\n03D2..03D4    ; Lu #   [3] GREEK UPSILON WITH HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL\n03D8          ; Lu #       GREEK LETTER ARCHAIC KOPPA\n03DA          ; Lu #       GREEK LETTER STIGMA\n03DC          ; Lu #       GREEK LETTER DIGAMMA\n03DE          ; Lu #       GREEK LETTER KOPPA\n03E0          ; Lu #       GREEK LETTER SAMPI\n03E2          ; Lu #       COPTIC CAPITAL LETTER SHEI\n03E4          ; Lu #       COPTIC CAPITAL LETTER FEI\n03E6          ; Lu #       COPTIC CAPITAL LETTER KHEI\n03E8          ; Lu #       COPTIC CAPITAL LETTER HORI\n03EA          ; Lu #       COPTIC CAPITAL LETTER GANGIA\n03EC          ; Lu #       COPTIC CAPITAL LETTER SHIMA\n03EE          ; Lu #       COPTIC CAPITAL LETTER DEI\n03F4          ; Lu #       GREEK CAPITAL THETA SYMBOL\n03F7          ; Lu #       GREEK CAPITAL LETTER SHO\n03F9..03FA    ; Lu #   [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN\n03FD..042F    ; Lu #  [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA\n0460          ; Lu #       CYRILLIC CAPITAL LETTER OMEGA\n0462          ; Lu #       CYRILLIC CAPITAL LETTER YAT\n0464          ; Lu #       CYRILLIC CAPITAL LETTER IOTIFIED E\n0466          ; Lu #       CYRILLIC CAPITAL LETTER LITTLE YUS\n0468          ; Lu #       CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS\n046A          ; Lu #       CYRILLIC CAPITAL LETTER BIG YUS\n046C          ; Lu #       CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS\n046E          ; Lu #       CYRILLIC CAPITAL LETTER KSI\n0470          ; Lu #       CYRILLIC CAPITAL LETTER PSI\n0472          ; Lu #       CYRILLIC CAPITAL LETTER FITA\n0474          ; Lu #       CYRILLIC CAPITAL LETTER IZHITSA\n0476          ; Lu #       CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT\n0478          ; Lu #       CYRILLIC CAPITAL LETTER UK\n047A          ; Lu #       CYRILLIC CAPITAL LETTER ROUND OMEGA\n047C          ; Lu #       CYRILLIC CAPITAL LETTER OMEGA WITH TITLO\n047E          ; Lu #       CYRILLIC CAPITAL LETTER OT\n0480          ; Lu #       CYRILLIC CAPITAL LETTER KOPPA\n048A          ; Lu #       CYRILLIC CAPITAL LETTER SHORT I WITH TAIL\n048C          ; Lu #       CYRILLIC CAPITAL LETTER SEMISOFT SIGN\n048E          ; Lu #       CYRILLIC CAPITAL LETTER ER WITH TICK\n0490          ; Lu #       CYRILLIC CAPITAL LETTER GHE WITH UPTURN\n0492          ; Lu #       CYRILLIC CAPITAL LETTER GHE WITH STROKE\n0494          ; Lu #       CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK\n0496          ; Lu #       CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER\n0498          ; Lu #       CYRILLIC CAPITAL LETTER ZE WITH DESCENDER\n049A          ; Lu #       CYRILLIC CAPITAL LETTER KA WITH DESCENDER\n049C          ; Lu #       CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE\n049E          ; Lu #       CYRILLIC CAPITAL LETTER KA WITH STROKE\n04A0          ; Lu #       CYRILLIC CAPITAL LETTER BASHKIR KA\n04A2          ; Lu #       CYRILLIC CAPITAL LETTER EN WITH DESCENDER\n04A4          ; Lu #       CYRILLIC CAPITAL LIGATURE EN GHE\n04A6          ; Lu #       CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK\n04A8          ; Lu #       CYRILLIC CAPITAL LETTER ABKHASIAN HA\n04AA          ; Lu #       CYRILLIC CAPITAL LETTER ES WITH DESCENDER\n04AC          ; Lu #       CYRILLIC CAPITAL LETTER TE WITH DESCENDER\n04AE          ; Lu #       CYRILLIC CAPITAL LETTER STRAIGHT U\n04B0          ; Lu #       CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE\n04B2          ; Lu #       CYRILLIC CAPITAL LETTER HA WITH DESCENDER\n04B4          ; Lu #       CYRILLIC CAPITAL LIGATURE TE TSE\n04B6          ; Lu #       CYRILLIC CAPITAL LETTER CHE WITH DESCENDER\n04B8          ; Lu #       CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE\n04BA          ; Lu #       CYRILLIC CAPITAL LETTER SHHA\n04BC          ; Lu #       CYRILLIC CAPITAL LETTER ABKHASIAN CHE\n04BE          ; Lu #       CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER\n04C0..04C1    ; Lu #   [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE\n04C3          ; Lu #       CYRILLIC CAPITAL LETTER KA WITH HOOK\n04C5          ; Lu #       CYRILLIC CAPITAL LETTER EL WITH TAIL\n04C7          ; Lu #       CYRILLIC CAPITAL LETTER EN WITH HOOK\n04C9          ; Lu #       CYRILLIC CAPITAL LETTER EN WITH TAIL\n04CB          ; Lu #       CYRILLIC CAPITAL LETTER KHAKASSIAN CHE\n04CD          ; Lu #       CYRILLIC CAPITAL LETTER EM WITH TAIL\n04D0          ; Lu #       CYRILLIC CAPITAL LETTER A WITH BREVE\n04D2          ; Lu #       CYRILLIC CAPITAL LETTER A WITH DIAERESIS\n04D4          ; Lu #       CYRILLIC CAPITAL LIGATURE A IE\n04D6          ; Lu #       CYRILLIC CAPITAL LETTER IE WITH BREVE\n04D8          ; Lu #       CYRILLIC CAPITAL LETTER SCHWA\n04DA          ; Lu #       CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS\n04DC          ; Lu #       CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS\n04DE          ; Lu #       CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS\n04E0          ; Lu #       CYRILLIC CAPITAL LETTER ABKHASIAN DZE\n04E2          ; Lu #       CYRILLIC CAPITAL LETTER I WITH MACRON\n04E4          ; Lu #       CYRILLIC CAPITAL LETTER I WITH DIAERESIS\n04E6          ; Lu #       CYRILLIC CAPITAL LETTER O WITH DIAERESIS\n04E8          ; Lu #       CYRILLIC CAPITAL LETTER BARRED O\n04EA          ; Lu #       CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS\n04EC          ; Lu #       CYRILLIC CAPITAL LETTER E WITH DIAERESIS\n04EE          ; Lu #       CYRILLIC CAPITAL LETTER U WITH MACRON\n04F0          ; Lu #       CYRILLIC CAPITAL LETTER U WITH DIAERESIS\n04F2          ; Lu #       CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE\n04F4          ; Lu #       CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS\n04F6          ; Lu #       CYRILLIC CAPITAL LETTER GHE WITH DESCENDER\n04F8          ; Lu #       CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS\n04FA          ; Lu #       CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK\n04FC          ; Lu #       CYRILLIC CAPITAL LETTER HA WITH HOOK\n04FE          ; Lu #       CYRILLIC CAPITAL LETTER HA WITH STROKE\n0500          ; Lu #       CYRILLIC CAPITAL LETTER KOMI DE\n0502          ; Lu #       CYRILLIC CAPITAL LETTER KOMI DJE\n0504          ; Lu #       CYRILLIC CAPITAL LETTER KOMI ZJE\n0506          ; Lu #       CYRILLIC CAPITAL LETTER KOMI DZJE\n0508          ; Lu #       CYRILLIC CAPITAL LETTER KOMI LJE\n050A          ; Lu #       CYRILLIC CAPITAL LETTER KOMI NJE\n050C          ; Lu #       CYRILLIC CAPITAL LETTER KOMI SJE\n050E          ; Lu #       CYRILLIC CAPITAL LETTER KOMI TJE\n0510          ; Lu #       CYRILLIC CAPITAL LETTER REVERSED ZE\n0512          ; Lu #       CYRILLIC CAPITAL LETTER EL WITH HOOK\n0514          ; Lu #       CYRILLIC CAPITAL LETTER LHA\n0516          ; Lu #       CYRILLIC CAPITAL LETTER RHA\n0518          ; Lu #       CYRILLIC CAPITAL LETTER YAE\n051A          ; Lu #       CYRILLIC CAPITAL LETTER QA\n051C          ; Lu #       CYRILLIC CAPITAL LETTER WE\n051E          ; Lu #       CYRILLIC CAPITAL LETTER ALEUT KA\n0520          ; Lu #       CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK\n0522          ; Lu #       CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK\n0524          ; Lu #       CYRILLIC CAPITAL LETTER PE WITH DESCENDER\n0526          ; Lu #       CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER\n0528          ; Lu #       CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK\n052A          ; Lu #       CYRILLIC CAPITAL LETTER DZZHE\n052C          ; Lu #       CYRILLIC CAPITAL LETTER DCHE\n052E          ; Lu #       CYRILLIC CAPITAL LETTER EL WITH DESCENDER\n0531..0556    ; Lu #  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n10A0..10C5    ; Lu #  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; Lu #       GEORGIAN CAPITAL LETTER YN\n10CD          ; Lu #       GEORGIAN CAPITAL LETTER AEN\n13A0..13F5    ; Lu #  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n1C89          ; Lu #       CYRILLIC CAPITAL LETTER TJE\n1C90..1CBA    ; Lu #  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; Lu #   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n1E00          ; Lu #       LATIN CAPITAL LETTER A WITH RING BELOW\n1E02          ; Lu #       LATIN CAPITAL LETTER B WITH DOT ABOVE\n1E04          ; Lu #       LATIN CAPITAL LETTER B WITH DOT BELOW\n1E06          ; Lu #       LATIN CAPITAL LETTER B WITH LINE BELOW\n1E08          ; Lu #       LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE\n1E0A          ; Lu #       LATIN CAPITAL LETTER D WITH DOT ABOVE\n1E0C          ; Lu #       LATIN CAPITAL LETTER D WITH DOT BELOW\n1E0E          ; Lu #       LATIN CAPITAL LETTER D WITH LINE BELOW\n1E10          ; Lu #       LATIN CAPITAL LETTER D WITH CEDILLA\n1E12          ; Lu #       LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW\n1E14          ; Lu #       LATIN CAPITAL LETTER E WITH MACRON AND GRAVE\n1E16          ; Lu #       LATIN CAPITAL LETTER E WITH MACRON AND ACUTE\n1E18          ; Lu #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW\n1E1A          ; Lu #       LATIN CAPITAL LETTER E WITH TILDE BELOW\n1E1C          ; Lu #       LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE\n1E1E          ; Lu #       LATIN CAPITAL LETTER F WITH DOT ABOVE\n1E20          ; Lu #       LATIN CAPITAL LETTER G WITH MACRON\n1E22          ; Lu #       LATIN CAPITAL LETTER H WITH DOT ABOVE\n1E24          ; Lu #       LATIN CAPITAL LETTER H WITH DOT BELOW\n1E26          ; Lu #       LATIN CAPITAL LETTER H WITH DIAERESIS\n1E28          ; Lu #       LATIN CAPITAL LETTER H WITH CEDILLA\n1E2A          ; Lu #       LATIN CAPITAL LETTER H WITH BREVE BELOW\n1E2C          ; Lu #       LATIN CAPITAL LETTER I WITH TILDE BELOW\n1E2E          ; Lu #       LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE\n1E30          ; Lu #       LATIN CAPITAL LETTER K WITH ACUTE\n1E32          ; Lu #       LATIN CAPITAL LETTER K WITH DOT BELOW\n1E34          ; Lu #       LATIN CAPITAL LETTER K WITH LINE BELOW\n1E36          ; Lu #       LATIN CAPITAL LETTER L WITH DOT BELOW\n1E38          ; Lu #       LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON\n1E3A          ; Lu #       LATIN CAPITAL LETTER L WITH LINE BELOW\n1E3C          ; Lu #       LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW\n1E3E          ; Lu #       LATIN CAPITAL LETTER M WITH ACUTE\n1E40          ; Lu #       LATIN CAPITAL LETTER M WITH DOT ABOVE\n1E42          ; Lu #       LATIN CAPITAL LETTER M WITH DOT BELOW\n1E44          ; Lu #       LATIN CAPITAL LETTER N WITH DOT ABOVE\n1E46          ; Lu #       LATIN CAPITAL LETTER N WITH DOT BELOW\n1E48          ; Lu #       LATIN CAPITAL LETTER N WITH LINE BELOW\n1E4A          ; Lu #       LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW\n1E4C          ; Lu #       LATIN CAPITAL LETTER O WITH TILDE AND ACUTE\n1E4E          ; Lu #       LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS\n1E50          ; Lu #       LATIN CAPITAL LETTER O WITH MACRON AND GRAVE\n1E52          ; Lu #       LATIN CAPITAL LETTER O WITH MACRON AND ACUTE\n1E54          ; Lu #       LATIN CAPITAL LETTER P WITH ACUTE\n1E56          ; Lu #       LATIN CAPITAL LETTER P WITH DOT ABOVE\n1E58          ; Lu #       LATIN CAPITAL LETTER R WITH DOT ABOVE\n1E5A          ; Lu #       LATIN CAPITAL LETTER R WITH DOT BELOW\n1E5C          ; Lu #       LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON\n1E5E          ; Lu #       LATIN CAPITAL LETTER R WITH LINE BELOW\n1E60          ; Lu #       LATIN CAPITAL LETTER S WITH DOT ABOVE\n1E62          ; Lu #       LATIN CAPITAL LETTER S WITH DOT BELOW\n1E64          ; Lu #       LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE\n1E66          ; Lu #       LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE\n1E68          ; Lu #       LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE\n1E6A          ; Lu #       LATIN CAPITAL LETTER T WITH DOT ABOVE\n1E6C          ; Lu #       LATIN CAPITAL LETTER T WITH DOT BELOW\n1E6E          ; Lu #       LATIN CAPITAL LETTER T WITH LINE BELOW\n1E70          ; Lu #       LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW\n1E72          ; Lu #       LATIN CAPITAL LETTER U WITH DIAERESIS BELOW\n1E74          ; Lu #       LATIN CAPITAL LETTER U WITH TILDE BELOW\n1E76          ; Lu #       LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW\n1E78          ; Lu #       LATIN CAPITAL LETTER U WITH TILDE AND ACUTE\n1E7A          ; Lu #       LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS\n1E7C          ; Lu #       LATIN CAPITAL LETTER V WITH TILDE\n1E7E          ; Lu #       LATIN CAPITAL LETTER V WITH DOT BELOW\n1E80          ; Lu #       LATIN CAPITAL LETTER W WITH GRAVE\n1E82          ; Lu #       LATIN CAPITAL LETTER W WITH ACUTE\n1E84          ; Lu #       LATIN CAPITAL LETTER W WITH DIAERESIS\n1E86          ; Lu #       LATIN CAPITAL LETTER W WITH DOT ABOVE\n1E88          ; Lu #       LATIN CAPITAL LETTER W WITH DOT BELOW\n1E8A          ; Lu #       LATIN CAPITAL LETTER X WITH DOT ABOVE\n1E8C          ; Lu #       LATIN CAPITAL LETTER X WITH DIAERESIS\n1E8E          ; Lu #       LATIN CAPITAL LETTER Y WITH DOT ABOVE\n1E90          ; Lu #       LATIN CAPITAL LETTER Z WITH CIRCUMFLEX\n1E92          ; Lu #       LATIN CAPITAL LETTER Z WITH DOT BELOW\n1E94          ; Lu #       LATIN CAPITAL LETTER Z WITH LINE BELOW\n1E9E          ; Lu #       LATIN CAPITAL LETTER SHARP S\n1EA0          ; Lu #       LATIN CAPITAL LETTER A WITH DOT BELOW\n1EA2          ; Lu #       LATIN CAPITAL LETTER A WITH HOOK ABOVE\n1EA4          ; Lu #       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE\n1EA6          ; Lu #       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE\n1EA8          ; Lu #       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE\n1EAA          ; Lu #       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE\n1EAC          ; Lu #       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW\n1EAE          ; Lu #       LATIN CAPITAL LETTER A WITH BREVE AND ACUTE\n1EB0          ; Lu #       LATIN CAPITAL LETTER A WITH BREVE AND GRAVE\n1EB2          ; Lu #       LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE\n1EB4          ; Lu #       LATIN CAPITAL LETTER A WITH BREVE AND TILDE\n1EB6          ; Lu #       LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW\n1EB8          ; Lu #       LATIN CAPITAL LETTER E WITH DOT BELOW\n1EBA          ; Lu #       LATIN CAPITAL LETTER E WITH HOOK ABOVE\n1EBC          ; Lu #       LATIN CAPITAL LETTER E WITH TILDE\n1EBE          ; Lu #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE\n1EC0          ; Lu #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE\n1EC2          ; Lu #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE\n1EC4          ; Lu #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE\n1EC6          ; Lu #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW\n1EC8          ; Lu #       LATIN CAPITAL LETTER I WITH HOOK ABOVE\n1ECA          ; Lu #       LATIN CAPITAL LETTER I WITH DOT BELOW\n1ECC          ; Lu #       LATIN CAPITAL LETTER O WITH DOT BELOW\n1ECE          ; Lu #       LATIN CAPITAL LETTER O WITH HOOK ABOVE\n1ED0          ; Lu #       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE\n1ED2          ; Lu #       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE\n1ED4          ; Lu #       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE\n1ED6          ; Lu #       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE\n1ED8          ; Lu #       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW\n1EDA          ; Lu #       LATIN CAPITAL LETTER O WITH HORN AND ACUTE\n1EDC          ; Lu #       LATIN CAPITAL LETTER O WITH HORN AND GRAVE\n1EDE          ; Lu #       LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE\n1EE0          ; Lu #       LATIN CAPITAL LETTER O WITH HORN AND TILDE\n1EE2          ; Lu #       LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW\n1EE4          ; Lu #       LATIN CAPITAL LETTER U WITH DOT BELOW\n1EE6          ; Lu #       LATIN CAPITAL LETTER U WITH HOOK ABOVE\n1EE8          ; Lu #       LATIN CAPITAL LETTER U WITH HORN AND ACUTE\n1EEA          ; Lu #       LATIN CAPITAL LETTER U WITH HORN AND GRAVE\n1EEC          ; Lu #       LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE\n1EEE          ; Lu #       LATIN CAPITAL LETTER U WITH HORN AND TILDE\n1EF0          ; Lu #       LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW\n1EF2          ; Lu #       LATIN CAPITAL LETTER Y WITH GRAVE\n1EF4          ; Lu #       LATIN CAPITAL LETTER Y WITH DOT BELOW\n1EF6          ; Lu #       LATIN CAPITAL LETTER Y WITH HOOK ABOVE\n1EF8          ; Lu #       LATIN CAPITAL LETTER Y WITH TILDE\n1EFA          ; Lu #       LATIN CAPITAL LETTER MIDDLE-WELSH LL\n1EFC          ; Lu #       LATIN CAPITAL LETTER MIDDLE-WELSH V\n1EFE          ; Lu #       LATIN CAPITAL LETTER Y WITH LOOP\n1F08..1F0F    ; Lu #   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI\n1F18..1F1D    ; Lu #   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F28..1F2F    ; Lu #   [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI\n1F38..1F3F    ; Lu #   [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI\n1F48..1F4D    ; Lu #   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F59          ; Lu #       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; Lu #       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; Lu #       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F          ; Lu #       GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F68..1F6F    ; Lu #   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI\n1FB8..1FBB    ; Lu #   [4] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH OXIA\n1FC8..1FCB    ; Lu #   [4] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH OXIA\n1FD8..1FDB    ; Lu #   [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FE8..1FEC    ; Lu #   [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FF8..1FFB    ; Lu #   [4] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH OXIA\n2102          ; Lu #       DOUBLE-STRUCK CAPITAL C\n2107          ; Lu #       EULER CONSTANT\n210B..210D    ; Lu #   [3] SCRIPT CAPITAL H..DOUBLE-STRUCK CAPITAL H\n2110..2112    ; Lu #   [3] SCRIPT CAPITAL I..SCRIPT CAPITAL L\n2115          ; Lu #       DOUBLE-STRUCK CAPITAL N\n2119..211D    ; Lu #   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n2124          ; Lu #       DOUBLE-STRUCK CAPITAL Z\n2126          ; Lu #       OHM SIGN\n2128          ; Lu #       BLACK-LETTER CAPITAL Z\n212A..212D    ; Lu #   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C\n2130..2133    ; Lu #   [4] SCRIPT CAPITAL E..SCRIPT CAPITAL M\n213E..213F    ; Lu #   [2] DOUBLE-STRUCK CAPITAL GAMMA..DOUBLE-STRUCK CAPITAL PI\n2145          ; Lu #       DOUBLE-STRUCK ITALIC CAPITAL D\n2183          ; Lu #       ROMAN NUMERAL REVERSED ONE HUNDRED\n2C00..2C2F    ; Lu #  [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI\n2C60          ; Lu #       LATIN CAPITAL LETTER L WITH DOUBLE BAR\n2C62..2C64    ; Lu #   [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL\n2C67          ; Lu #       LATIN CAPITAL LETTER H WITH DESCENDER\n2C69          ; Lu #       LATIN CAPITAL LETTER K WITH DESCENDER\n2C6B          ; Lu #       LATIN CAPITAL LETTER Z WITH DESCENDER\n2C6D..2C70    ; Lu #   [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA\n2C72          ; Lu #       LATIN CAPITAL LETTER W WITH HOOK\n2C75          ; Lu #       LATIN CAPITAL LETTER HALF H\n2C7E..2C80    ; Lu #   [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA\n2C82          ; Lu #       COPTIC CAPITAL LETTER VIDA\n2C84          ; Lu #       COPTIC CAPITAL LETTER GAMMA\n2C86          ; Lu #       COPTIC CAPITAL LETTER DALDA\n2C88          ; Lu #       COPTIC CAPITAL LETTER EIE\n2C8A          ; Lu #       COPTIC CAPITAL LETTER SOU\n2C8C          ; Lu #       COPTIC CAPITAL LETTER ZATA\n2C8E          ; Lu #       COPTIC CAPITAL LETTER HATE\n2C90          ; Lu #       COPTIC CAPITAL LETTER THETHE\n2C92          ; Lu #       COPTIC CAPITAL LETTER IAUDA\n2C94          ; Lu #       COPTIC CAPITAL LETTER KAPA\n2C96          ; Lu #       COPTIC CAPITAL LETTER LAULA\n2C98          ; Lu #       COPTIC CAPITAL LETTER MI\n2C9A          ; Lu #       COPTIC CAPITAL LETTER NI\n2C9C          ; Lu #       COPTIC CAPITAL LETTER KSI\n2C9E          ; Lu #       COPTIC CAPITAL LETTER O\n2CA0          ; Lu #       COPTIC CAPITAL LETTER PI\n2CA2          ; Lu #       COPTIC CAPITAL LETTER RO\n2CA4          ; Lu #       COPTIC CAPITAL LETTER SIMA\n2CA6          ; Lu #       COPTIC CAPITAL LETTER TAU\n2CA8          ; Lu #       COPTIC CAPITAL LETTER UA\n2CAA          ; Lu #       COPTIC CAPITAL LETTER FI\n2CAC          ; Lu #       COPTIC CAPITAL LETTER KHI\n2CAE          ; Lu #       COPTIC CAPITAL LETTER PSI\n2CB0          ; Lu #       COPTIC CAPITAL LETTER OOU\n2CB2          ; Lu #       COPTIC CAPITAL LETTER DIALECT-P ALEF\n2CB4          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC AIN\n2CB6          ; Lu #       COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE\n2CB8          ; Lu #       COPTIC CAPITAL LETTER DIALECT-P KAPA\n2CBA          ; Lu #       COPTIC CAPITAL LETTER DIALECT-P NI\n2CBC          ; Lu #       COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI\n2CBE          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC OOU\n2CC0          ; Lu #       COPTIC CAPITAL LETTER SAMPI\n2CC2          ; Lu #       COPTIC CAPITAL LETTER CROSSED SHEI\n2CC4          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC SHEI\n2CC6          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC ESH\n2CC8          ; Lu #       COPTIC CAPITAL LETTER AKHMIMIC KHEI\n2CCA          ; Lu #       COPTIC CAPITAL LETTER DIALECT-P HORI\n2CCC          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC HORI\n2CCE          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC HA\n2CD0          ; Lu #       COPTIC CAPITAL LETTER L-SHAPED HA\n2CD2          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC HEI\n2CD4          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC HAT\n2CD6          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC GANGIA\n2CD8          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC DJA\n2CDA          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC SHIMA\n2CDC          ; Lu #       COPTIC CAPITAL LETTER OLD NUBIAN SHIMA\n2CDE          ; Lu #       COPTIC CAPITAL LETTER OLD NUBIAN NGI\n2CE0          ; Lu #       COPTIC CAPITAL LETTER OLD NUBIAN NYI\n2CE2          ; Lu #       COPTIC CAPITAL LETTER OLD NUBIAN WAU\n2CEB          ; Lu #       COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI\n2CED          ; Lu #       COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA\n2CF2          ; Lu #       COPTIC CAPITAL LETTER BOHAIRIC KHEI\nA640          ; Lu #       CYRILLIC CAPITAL LETTER ZEMLYA\nA642          ; Lu #       CYRILLIC CAPITAL LETTER DZELO\nA644          ; Lu #       CYRILLIC CAPITAL LETTER REVERSED DZE\nA646          ; Lu #       CYRILLIC CAPITAL LETTER IOTA\nA648          ; Lu #       CYRILLIC CAPITAL LETTER DJERV\nA64A          ; Lu #       CYRILLIC CAPITAL LETTER MONOGRAPH UK\nA64C          ; Lu #       CYRILLIC CAPITAL LETTER BROAD OMEGA\nA64E          ; Lu #       CYRILLIC CAPITAL LETTER NEUTRAL YER\nA650          ; Lu #       CYRILLIC CAPITAL LETTER YERU WITH BACK YER\nA652          ; Lu #       CYRILLIC CAPITAL LETTER IOTIFIED YAT\nA654          ; Lu #       CYRILLIC CAPITAL LETTER REVERSED YU\nA656          ; Lu #       CYRILLIC CAPITAL LETTER IOTIFIED A\nA658          ; Lu #       CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS\nA65A          ; Lu #       CYRILLIC CAPITAL LETTER BLENDED YUS\nA65C          ; Lu #       CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS\nA65E          ; Lu #       CYRILLIC CAPITAL LETTER YN\nA660          ; Lu #       CYRILLIC CAPITAL LETTER REVERSED TSE\nA662          ; Lu #       CYRILLIC CAPITAL LETTER SOFT DE\nA664          ; Lu #       CYRILLIC CAPITAL LETTER SOFT EL\nA666          ; Lu #       CYRILLIC CAPITAL LETTER SOFT EM\nA668          ; Lu #       CYRILLIC CAPITAL LETTER MONOCULAR O\nA66A          ; Lu #       CYRILLIC CAPITAL LETTER BINOCULAR O\nA66C          ; Lu #       CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O\nA680          ; Lu #       CYRILLIC CAPITAL LETTER DWE\nA682          ; Lu #       CYRILLIC CAPITAL LETTER DZWE\nA684          ; Lu #       CYRILLIC CAPITAL LETTER ZHWE\nA686          ; Lu #       CYRILLIC CAPITAL LETTER CCHE\nA688          ; Lu #       CYRILLIC CAPITAL LETTER DZZE\nA68A          ; Lu #       CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK\nA68C          ; Lu #       CYRILLIC CAPITAL LETTER TWE\nA68E          ; Lu #       CYRILLIC CAPITAL LETTER TSWE\nA690          ; Lu #       CYRILLIC CAPITAL LETTER TSSE\nA692          ; Lu #       CYRILLIC CAPITAL LETTER TCHE\nA694          ; Lu #       CYRILLIC CAPITAL LETTER HWE\nA696          ; Lu #       CYRILLIC CAPITAL LETTER SHWE\nA698          ; Lu #       CYRILLIC CAPITAL LETTER DOUBLE O\nA69A          ; Lu #       CYRILLIC CAPITAL LETTER CROSSED O\nA722          ; Lu #       LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF\nA724          ; Lu #       LATIN CAPITAL LETTER EGYPTOLOGICAL AIN\nA726          ; Lu #       LATIN CAPITAL LETTER HENG\nA728          ; Lu #       LATIN CAPITAL LETTER TZ\nA72A          ; Lu #       LATIN CAPITAL LETTER TRESILLO\nA72C          ; Lu #       LATIN CAPITAL LETTER CUATRILLO\nA72E          ; Lu #       LATIN CAPITAL LETTER CUATRILLO WITH COMMA\nA732          ; Lu #       LATIN CAPITAL LETTER AA\nA734          ; Lu #       LATIN CAPITAL LETTER AO\nA736          ; Lu #       LATIN CAPITAL LETTER AU\nA738          ; Lu #       LATIN CAPITAL LETTER AV\nA73A          ; Lu #       LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR\nA73C          ; Lu #       LATIN CAPITAL LETTER AY\nA73E          ; Lu #       LATIN CAPITAL LETTER REVERSED C WITH DOT\nA740          ; Lu #       LATIN CAPITAL LETTER K WITH STROKE\nA742          ; Lu #       LATIN CAPITAL LETTER K WITH DIAGONAL STROKE\nA744          ; Lu #       LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE\nA746          ; Lu #       LATIN CAPITAL LETTER BROKEN L\nA748          ; Lu #       LATIN CAPITAL LETTER L WITH HIGH STROKE\nA74A          ; Lu #       LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY\nA74C          ; Lu #       LATIN CAPITAL LETTER O WITH LOOP\nA74E          ; Lu #       LATIN CAPITAL LETTER OO\nA750          ; Lu #       LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER\nA752          ; Lu #       LATIN CAPITAL LETTER P WITH FLOURISH\nA754          ; Lu #       LATIN CAPITAL LETTER P WITH SQUIRREL TAIL\nA756          ; Lu #       LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER\nA758          ; Lu #       LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE\nA75A          ; Lu #       LATIN CAPITAL LETTER R ROTUNDA\nA75C          ; Lu #       LATIN CAPITAL LETTER RUM ROTUNDA\nA75E          ; Lu #       LATIN CAPITAL LETTER V WITH DIAGONAL STROKE\nA760          ; Lu #       LATIN CAPITAL LETTER VY\nA762          ; Lu #       LATIN CAPITAL LETTER VISIGOTHIC Z\nA764          ; Lu #       LATIN CAPITAL LETTER THORN WITH STROKE\nA766          ; Lu #       LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER\nA768          ; Lu #       LATIN CAPITAL LETTER VEND\nA76A          ; Lu #       LATIN CAPITAL LETTER ET\nA76C          ; Lu #       LATIN CAPITAL LETTER IS\nA76E          ; Lu #       LATIN CAPITAL LETTER CON\nA779          ; Lu #       LATIN CAPITAL LETTER INSULAR D\nA77B          ; Lu #       LATIN CAPITAL LETTER INSULAR F\nA77D..A77E    ; Lu #   [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G\nA780          ; Lu #       LATIN CAPITAL LETTER TURNED L\nA782          ; Lu #       LATIN CAPITAL LETTER INSULAR R\nA784          ; Lu #       LATIN CAPITAL LETTER INSULAR S\nA786          ; Lu #       LATIN CAPITAL LETTER INSULAR T\nA78B          ; Lu #       LATIN CAPITAL LETTER SALTILLO\nA78D          ; Lu #       LATIN CAPITAL LETTER TURNED H\nA790          ; Lu #       LATIN CAPITAL LETTER N WITH DESCENDER\nA792          ; Lu #       LATIN CAPITAL LETTER C WITH BAR\nA796          ; Lu #       LATIN CAPITAL LETTER B WITH FLOURISH\nA798          ; Lu #       LATIN CAPITAL LETTER F WITH STROKE\nA79A          ; Lu #       LATIN CAPITAL LETTER VOLAPUK AE\nA79C          ; Lu #       LATIN CAPITAL LETTER VOLAPUK OE\nA79E          ; Lu #       LATIN CAPITAL LETTER VOLAPUK UE\nA7A0          ; Lu #       LATIN CAPITAL LETTER G WITH OBLIQUE STROKE\nA7A2          ; Lu #       LATIN CAPITAL LETTER K WITH OBLIQUE STROKE\nA7A4          ; Lu #       LATIN CAPITAL LETTER N WITH OBLIQUE STROKE\nA7A6          ; Lu #       LATIN CAPITAL LETTER R WITH OBLIQUE STROKE\nA7A8          ; Lu #       LATIN CAPITAL LETTER S WITH OBLIQUE STROKE\nA7AA..A7AE    ; Lu #   [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I\nA7B0..A7B4    ; Lu #   [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA\nA7B6          ; Lu #       LATIN CAPITAL LETTER OMEGA\nA7B8          ; Lu #       LATIN CAPITAL LETTER U WITH STROKE\nA7BA          ; Lu #       LATIN CAPITAL LETTER GLOTTAL A\nA7BC          ; Lu #       LATIN CAPITAL LETTER GLOTTAL I\nA7BE          ; Lu #       LATIN CAPITAL LETTER GLOTTAL U\nA7C0          ; Lu #       LATIN CAPITAL LETTER OLD POLISH O\nA7C2          ; Lu #       LATIN CAPITAL LETTER ANGLICANA W\nA7C4..A7C7    ; Lu #   [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY\nA7C9          ; Lu #       LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY\nA7CB..A7CC    ; Lu #   [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE\nA7CE          ; Lu #       LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE\nA7D0          ; Lu #       LATIN CAPITAL LETTER CLOSED INSULAR G\nA7D2          ; Lu #       LATIN CAPITAL LETTER DOUBLE THORN\nA7D4          ; Lu #       LATIN CAPITAL LETTER DOUBLE WYNN\nA7D6          ; Lu #       LATIN CAPITAL LETTER MIDDLE SCOTS S\nA7D8          ; Lu #       LATIN CAPITAL LETTER SIGMOID S\nA7DA          ; Lu #       LATIN CAPITAL LETTER LAMBDA\nA7DC          ; Lu #       LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F5          ; Lu #       LATIN CAPITAL LETTER REVERSED HALF H\nFF21..FF3A    ; Lu #  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\n10400..10427  ; Lu #  [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW\n104B0..104D3  ; Lu #  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n10570..1057A  ; Lu #  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; Lu #  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; Lu #   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; Lu #   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10C80..10CB2  ; Lu #  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10D50..10D65  ; Lu #  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n118A0..118BF  ; Lu #  [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO\n16E40..16E5F  ; Lu #  [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y\n16EA0..16EB8  ; Lu #  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n1D400..1D419  ; Lu #  [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z\n1D434..1D44D  ; Lu #  [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z\n1D468..1D481  ; Lu #  [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z\n1D49C         ; Lu #       MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; Lu #   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; Lu #       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; Lu #   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; Lu #   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B5  ; Lu #   [8] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT CAPITAL Z\n1D4D0..1D4E9  ; Lu #  [26] MATHEMATICAL BOLD SCRIPT CAPITAL A..MATHEMATICAL BOLD SCRIPT CAPITAL Z\n1D504..1D505  ; Lu #   [2] MATHEMATICAL FRAKTUR CAPITAL A..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; Lu #   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; Lu #   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; Lu #   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D538..1D539  ; Lu #   [2] MATHEMATICAL DOUBLE-STRUCK CAPITAL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; Lu #   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; Lu #   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; Lu #       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; Lu #   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D56C..1D585  ; Lu #  [26] MATHEMATICAL BOLD FRAKTUR CAPITAL A..MATHEMATICAL BOLD FRAKTUR CAPITAL Z\n1D5A0..1D5B9  ; Lu #  [26] MATHEMATICAL SANS-SERIF CAPITAL A..MATHEMATICAL SANS-SERIF CAPITAL Z\n1D5D4..1D5ED  ; Lu #  [26] MATHEMATICAL SANS-SERIF BOLD CAPITAL A..MATHEMATICAL SANS-SERIF BOLD CAPITAL Z\n1D608..1D621  ; Lu #  [26] MATHEMATICAL SANS-SERIF ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z\n1D63C..1D655  ; Lu #  [26] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z\n1D670..1D689  ; Lu #  [26] MATHEMATICAL MONOSPACE CAPITAL A..MATHEMATICAL MONOSPACE CAPITAL Z\n1D6A8..1D6C0  ; Lu #  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6E2..1D6FA  ; Lu #  [25] MATHEMATICAL ITALIC CAPITAL ALPHA..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D71C..1D734  ; Lu #  [25] MATHEMATICAL BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D756..1D76E  ; Lu #  [25] MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D790..1D7A8  ; Lu #  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7CA         ; Lu #       MATHEMATICAL BOLD CAPITAL DIGAMMA\n1E900..1E921  ; Lu #  [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA\n\n# Total code points: 1886\n\n# ================================================\n\n# General_Category=Lowercase_Letter\n\n0061..007A    ; Ll #  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00B5          ; Ll #       MICRO SIGN\n00DF..00F6    ; Ll #  [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..00FF    ; Ll #   [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS\n0101          ; Ll #       LATIN SMALL LETTER A WITH MACRON\n0103          ; Ll #       LATIN SMALL LETTER A WITH BREVE\n0105          ; Ll #       LATIN SMALL LETTER A WITH OGONEK\n0107          ; Ll #       LATIN SMALL LETTER C WITH ACUTE\n0109          ; Ll #       LATIN SMALL LETTER C WITH CIRCUMFLEX\n010B          ; Ll #       LATIN SMALL LETTER C WITH DOT ABOVE\n010D          ; Ll #       LATIN SMALL LETTER C WITH CARON\n010F          ; Ll #       LATIN SMALL LETTER D WITH CARON\n0111          ; Ll #       LATIN SMALL LETTER D WITH STROKE\n0113          ; Ll #       LATIN SMALL LETTER E WITH MACRON\n0115          ; Ll #       LATIN SMALL LETTER E WITH BREVE\n0117          ; Ll #       LATIN SMALL LETTER E WITH DOT ABOVE\n0119          ; Ll #       LATIN SMALL LETTER E WITH OGONEK\n011B          ; Ll #       LATIN SMALL LETTER E WITH CARON\n011D          ; Ll #       LATIN SMALL LETTER G WITH CIRCUMFLEX\n011F          ; Ll #       LATIN SMALL LETTER G WITH BREVE\n0121          ; Ll #       LATIN SMALL LETTER G WITH DOT ABOVE\n0123          ; Ll #       LATIN SMALL LETTER G WITH CEDILLA\n0125          ; Ll #       LATIN SMALL LETTER H WITH CIRCUMFLEX\n0127          ; Ll #       LATIN SMALL LETTER H WITH STROKE\n0129          ; Ll #       LATIN SMALL LETTER I WITH TILDE\n012B          ; Ll #       LATIN SMALL LETTER I WITH MACRON\n012D          ; Ll #       LATIN SMALL LETTER I WITH BREVE\n012F          ; Ll #       LATIN SMALL LETTER I WITH OGONEK\n0131          ; Ll #       LATIN SMALL LETTER DOTLESS I\n0133          ; Ll #       LATIN SMALL LIGATURE IJ\n0135          ; Ll #       LATIN SMALL LETTER J WITH CIRCUMFLEX\n0137..0138    ; Ll #   [2] LATIN SMALL LETTER K WITH CEDILLA..LATIN SMALL LETTER KRA\n013A          ; Ll #       LATIN SMALL LETTER L WITH ACUTE\n013C          ; Ll #       LATIN SMALL LETTER L WITH CEDILLA\n013E          ; Ll #       LATIN SMALL LETTER L WITH CARON\n0140          ; Ll #       LATIN SMALL LETTER L WITH MIDDLE DOT\n0142          ; Ll #       LATIN SMALL LETTER L WITH STROKE\n0144          ; Ll #       LATIN SMALL LETTER N WITH ACUTE\n0146          ; Ll #       LATIN SMALL LETTER N WITH CEDILLA\n0148..0149    ; Ll #   [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE\n014B          ; Ll #       LATIN SMALL LETTER ENG\n014D          ; Ll #       LATIN SMALL LETTER O WITH MACRON\n014F          ; Ll #       LATIN SMALL LETTER O WITH BREVE\n0151          ; Ll #       LATIN SMALL LETTER O WITH DOUBLE ACUTE\n0153          ; Ll #       LATIN SMALL LIGATURE OE\n0155          ; Ll #       LATIN SMALL LETTER R WITH ACUTE\n0157          ; Ll #       LATIN SMALL LETTER R WITH CEDILLA\n0159          ; Ll #       LATIN SMALL LETTER R WITH CARON\n015B          ; Ll #       LATIN SMALL LETTER S WITH ACUTE\n015D          ; Ll #       LATIN SMALL LETTER S WITH CIRCUMFLEX\n015F          ; Ll #       LATIN SMALL LETTER S WITH CEDILLA\n0161          ; Ll #       LATIN SMALL LETTER S WITH CARON\n0163          ; Ll #       LATIN SMALL LETTER T WITH CEDILLA\n0165          ; Ll #       LATIN SMALL LETTER T WITH CARON\n0167          ; Ll #       LATIN SMALL LETTER T WITH STROKE\n0169          ; Ll #       LATIN SMALL LETTER U WITH TILDE\n016B          ; Ll #       LATIN SMALL LETTER U WITH MACRON\n016D          ; Ll #       LATIN SMALL LETTER U WITH BREVE\n016F          ; Ll #       LATIN SMALL LETTER U WITH RING ABOVE\n0171          ; Ll #       LATIN SMALL LETTER U WITH DOUBLE ACUTE\n0173          ; Ll #       LATIN SMALL LETTER U WITH OGONEK\n0175          ; Ll #       LATIN SMALL LETTER W WITH CIRCUMFLEX\n0177          ; Ll #       LATIN SMALL LETTER Y WITH CIRCUMFLEX\n017A          ; Ll #       LATIN SMALL LETTER Z WITH ACUTE\n017C          ; Ll #       LATIN SMALL LETTER Z WITH DOT ABOVE\n017E..0180    ; Ll #   [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE\n0183          ; Ll #       LATIN SMALL LETTER B WITH TOPBAR\n0185          ; Ll #       LATIN SMALL LETTER TONE SIX\n0188          ; Ll #       LATIN SMALL LETTER C WITH HOOK\n018C..018D    ; Ll #   [2] LATIN SMALL LETTER D WITH TOPBAR..LATIN SMALL LETTER TURNED DELTA\n0192          ; Ll #       LATIN SMALL LETTER F WITH HOOK\n0195          ; Ll #       LATIN SMALL LETTER HV\n0199..019B    ; Ll #   [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE\n019E          ; Ll #       LATIN SMALL LETTER N WITH LONG RIGHT LEG\n01A1          ; Ll #       LATIN SMALL LETTER O WITH HORN\n01A3          ; Ll #       LATIN SMALL LETTER OI\n01A5          ; Ll #       LATIN SMALL LETTER P WITH HOOK\n01A8          ; Ll #       LATIN SMALL LETTER TONE TWO\n01AA..01AB    ; Ll #   [2] LATIN LETTER REVERSED ESH LOOP..LATIN SMALL LETTER T WITH PALATAL HOOK\n01AD          ; Ll #       LATIN SMALL LETTER T WITH HOOK\n01B0          ; Ll #       LATIN SMALL LETTER U WITH HORN\n01B4          ; Ll #       LATIN SMALL LETTER Y WITH HOOK\n01B6          ; Ll #       LATIN SMALL LETTER Z WITH STROKE\n01B9..01BA    ; Ll #   [2] LATIN SMALL LETTER EZH REVERSED..LATIN SMALL LETTER EZH WITH TAIL\n01BD..01BF    ; Ll #   [3] LATIN SMALL LETTER TONE FIVE..LATIN LETTER WYNN\n01C6          ; Ll #       LATIN SMALL LETTER DZ WITH CARON\n01C9          ; Ll #       LATIN SMALL LETTER LJ\n01CC          ; Ll #       LATIN SMALL LETTER NJ\n01CE          ; Ll #       LATIN SMALL LETTER A WITH CARON\n01D0          ; Ll #       LATIN SMALL LETTER I WITH CARON\n01D2          ; Ll #       LATIN SMALL LETTER O WITH CARON\n01D4          ; Ll #       LATIN SMALL LETTER U WITH CARON\n01D6          ; Ll #       LATIN SMALL LETTER U WITH DIAERESIS AND MACRON\n01D8          ; Ll #       LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE\n01DA          ; Ll #       LATIN SMALL LETTER U WITH DIAERESIS AND CARON\n01DC..01DD    ; Ll #   [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E\n01DF          ; Ll #       LATIN SMALL LETTER A WITH DIAERESIS AND MACRON\n01E1          ; Ll #       LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON\n01E3          ; Ll #       LATIN SMALL LETTER AE WITH MACRON\n01E5          ; Ll #       LATIN SMALL LETTER G WITH STROKE\n01E7          ; Ll #       LATIN SMALL LETTER G WITH CARON\n01E9          ; Ll #       LATIN SMALL LETTER K WITH CARON\n01EB          ; Ll #       LATIN SMALL LETTER O WITH OGONEK\n01ED          ; Ll #       LATIN SMALL LETTER O WITH OGONEK AND MACRON\n01EF..01F0    ; Ll #   [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON\n01F3          ; Ll #       LATIN SMALL LETTER DZ\n01F5          ; Ll #       LATIN SMALL LETTER G WITH ACUTE\n01F9          ; Ll #       LATIN SMALL LETTER N WITH GRAVE\n01FB          ; Ll #       LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE\n01FD          ; Ll #       LATIN SMALL LETTER AE WITH ACUTE\n01FF          ; Ll #       LATIN SMALL LETTER O WITH STROKE AND ACUTE\n0201          ; Ll #       LATIN SMALL LETTER A WITH DOUBLE GRAVE\n0203          ; Ll #       LATIN SMALL LETTER A WITH INVERTED BREVE\n0205          ; Ll #       LATIN SMALL LETTER E WITH DOUBLE GRAVE\n0207          ; Ll #       LATIN SMALL LETTER E WITH INVERTED BREVE\n0209          ; Ll #       LATIN SMALL LETTER I WITH DOUBLE GRAVE\n020B          ; Ll #       LATIN SMALL LETTER I WITH INVERTED BREVE\n020D          ; Ll #       LATIN SMALL LETTER O WITH DOUBLE GRAVE\n020F          ; Ll #       LATIN SMALL LETTER O WITH INVERTED BREVE\n0211          ; Ll #       LATIN SMALL LETTER R WITH DOUBLE GRAVE\n0213          ; Ll #       LATIN SMALL LETTER R WITH INVERTED BREVE\n0215          ; Ll #       LATIN SMALL LETTER U WITH DOUBLE GRAVE\n0217          ; Ll #       LATIN SMALL LETTER U WITH INVERTED BREVE\n0219          ; Ll #       LATIN SMALL LETTER S WITH COMMA BELOW\n021B          ; Ll #       LATIN SMALL LETTER T WITH COMMA BELOW\n021D          ; Ll #       LATIN SMALL LETTER YOGH\n021F          ; Ll #       LATIN SMALL LETTER H WITH CARON\n0221          ; Ll #       LATIN SMALL LETTER D WITH CURL\n0223          ; Ll #       LATIN SMALL LETTER OU\n0225          ; Ll #       LATIN SMALL LETTER Z WITH HOOK\n0227          ; Ll #       LATIN SMALL LETTER A WITH DOT ABOVE\n0229          ; Ll #       LATIN SMALL LETTER E WITH CEDILLA\n022B          ; Ll #       LATIN SMALL LETTER O WITH DIAERESIS AND MACRON\n022D          ; Ll #       LATIN SMALL LETTER O WITH TILDE AND MACRON\n022F          ; Ll #       LATIN SMALL LETTER O WITH DOT ABOVE\n0231          ; Ll #       LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON\n0233..0239    ; Ll #   [7] LATIN SMALL LETTER Y WITH MACRON..LATIN SMALL LETTER QP DIGRAPH\n023C          ; Ll #       LATIN SMALL LETTER C WITH STROKE\n023F..0240    ; Ll #   [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL\n0242          ; Ll #       LATIN SMALL LETTER GLOTTAL STOP\n0247          ; Ll #       LATIN SMALL LETTER E WITH STROKE\n0249          ; Ll #       LATIN SMALL LETTER J WITH STROKE\n024B          ; Ll #       LATIN SMALL LETTER Q WITH HOOK TAIL\n024D          ; Ll #       LATIN SMALL LETTER R WITH STROKE\n024F..0293    ; Ll #  [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL\n0296..02AF    ; Ll #  [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL\n0371          ; Ll #       GREEK SMALL LETTER HETA\n0373          ; Ll #       GREEK SMALL LETTER ARCHAIC SAMPI\n0377          ; Ll #       GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037B..037D    ; Ll #   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n0390          ; Ll #       GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS\n03AC..03CE    ; Ll #  [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS\n03D0..03D1    ; Ll #   [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL\n03D5..03D7    ; Ll #   [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL\n03D9          ; Ll #       GREEK SMALL LETTER ARCHAIC KOPPA\n03DB          ; Ll #       GREEK SMALL LETTER STIGMA\n03DD          ; Ll #       GREEK SMALL LETTER DIGAMMA\n03DF          ; Ll #       GREEK SMALL LETTER KOPPA\n03E1          ; Ll #       GREEK SMALL LETTER SAMPI\n03E3          ; Ll #       COPTIC SMALL LETTER SHEI\n03E5          ; Ll #       COPTIC SMALL LETTER FEI\n03E7          ; Ll #       COPTIC SMALL LETTER KHEI\n03E9          ; Ll #       COPTIC SMALL LETTER HORI\n03EB          ; Ll #       COPTIC SMALL LETTER GANGIA\n03ED          ; Ll #       COPTIC SMALL LETTER SHIMA\n03EF..03F3    ; Ll #   [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT\n03F5          ; Ll #       GREEK LUNATE EPSILON SYMBOL\n03F8          ; Ll #       GREEK SMALL LETTER SHO\n03FB..03FC    ; Ll #   [2] GREEK SMALL LETTER SAN..GREEK RHO WITH STROKE SYMBOL\n0430..045F    ; Ll #  [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE\n0461          ; Ll #       CYRILLIC SMALL LETTER OMEGA\n0463          ; Ll #       CYRILLIC SMALL LETTER YAT\n0465          ; Ll #       CYRILLIC SMALL LETTER IOTIFIED E\n0467          ; Ll #       CYRILLIC SMALL LETTER LITTLE YUS\n0469          ; Ll #       CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS\n046B          ; Ll #       CYRILLIC SMALL LETTER BIG YUS\n046D          ; Ll #       CYRILLIC SMALL LETTER IOTIFIED BIG YUS\n046F          ; Ll #       CYRILLIC SMALL LETTER KSI\n0471          ; Ll #       CYRILLIC SMALL LETTER PSI\n0473          ; Ll #       CYRILLIC SMALL LETTER FITA\n0475          ; Ll #       CYRILLIC SMALL LETTER IZHITSA\n0477          ; Ll #       CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT\n0479          ; Ll #       CYRILLIC SMALL LETTER UK\n047B          ; Ll #       CYRILLIC SMALL LETTER ROUND OMEGA\n047D          ; Ll #       CYRILLIC SMALL LETTER OMEGA WITH TITLO\n047F          ; Ll #       CYRILLIC SMALL LETTER OT\n0481          ; Ll #       CYRILLIC SMALL LETTER KOPPA\n048B          ; Ll #       CYRILLIC SMALL LETTER SHORT I WITH TAIL\n048D          ; Ll #       CYRILLIC SMALL LETTER SEMISOFT SIGN\n048F          ; Ll #       CYRILLIC SMALL LETTER ER WITH TICK\n0491          ; Ll #       CYRILLIC SMALL LETTER GHE WITH UPTURN\n0493          ; Ll #       CYRILLIC SMALL LETTER GHE WITH STROKE\n0495          ; Ll #       CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK\n0497          ; Ll #       CYRILLIC SMALL LETTER ZHE WITH DESCENDER\n0499          ; Ll #       CYRILLIC SMALL LETTER ZE WITH DESCENDER\n049B          ; Ll #       CYRILLIC SMALL LETTER KA WITH DESCENDER\n049D          ; Ll #       CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE\n049F          ; Ll #       CYRILLIC SMALL LETTER KA WITH STROKE\n04A1          ; Ll #       CYRILLIC SMALL LETTER BASHKIR KA\n04A3          ; Ll #       CYRILLIC SMALL LETTER EN WITH DESCENDER\n04A5          ; Ll #       CYRILLIC SMALL LIGATURE EN GHE\n04A7          ; Ll #       CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK\n04A9          ; Ll #       CYRILLIC SMALL LETTER ABKHASIAN HA\n04AB          ; Ll #       CYRILLIC SMALL LETTER ES WITH DESCENDER\n04AD          ; Ll #       CYRILLIC SMALL LETTER TE WITH DESCENDER\n04AF          ; Ll #       CYRILLIC SMALL LETTER STRAIGHT U\n04B1          ; Ll #       CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE\n04B3          ; Ll #       CYRILLIC SMALL LETTER HA WITH DESCENDER\n04B5          ; Ll #       CYRILLIC SMALL LIGATURE TE TSE\n04B7          ; Ll #       CYRILLIC SMALL LETTER CHE WITH DESCENDER\n04B9          ; Ll #       CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE\n04BB          ; Ll #       CYRILLIC SMALL LETTER SHHA\n04BD          ; Ll #       CYRILLIC SMALL LETTER ABKHASIAN CHE\n04BF          ; Ll #       CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER\n04C2          ; Ll #       CYRILLIC SMALL LETTER ZHE WITH BREVE\n04C4          ; Ll #       CYRILLIC SMALL LETTER KA WITH HOOK\n04C6          ; Ll #       CYRILLIC SMALL LETTER EL WITH TAIL\n04C8          ; Ll #       CYRILLIC SMALL LETTER EN WITH HOOK\n04CA          ; Ll #       CYRILLIC SMALL LETTER EN WITH TAIL\n04CC          ; Ll #       CYRILLIC SMALL LETTER KHAKASSIAN CHE\n04CE..04CF    ; Ll #   [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA\n04D1          ; Ll #       CYRILLIC SMALL LETTER A WITH BREVE\n04D3          ; Ll #       CYRILLIC SMALL LETTER A WITH DIAERESIS\n04D5          ; Ll #       CYRILLIC SMALL LIGATURE A IE\n04D7          ; Ll #       CYRILLIC SMALL LETTER IE WITH BREVE\n04D9          ; Ll #       CYRILLIC SMALL LETTER SCHWA\n04DB          ; Ll #       CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS\n04DD          ; Ll #       CYRILLIC SMALL LETTER ZHE WITH DIAERESIS\n04DF          ; Ll #       CYRILLIC SMALL LETTER ZE WITH DIAERESIS\n04E1          ; Ll #       CYRILLIC SMALL LETTER ABKHASIAN DZE\n04E3          ; Ll #       CYRILLIC SMALL LETTER I WITH MACRON\n04E5          ; Ll #       CYRILLIC SMALL LETTER I WITH DIAERESIS\n04E7          ; Ll #       CYRILLIC SMALL LETTER O WITH DIAERESIS\n04E9          ; Ll #       CYRILLIC SMALL LETTER BARRED O\n04EB          ; Ll #       CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS\n04ED          ; Ll #       CYRILLIC SMALL LETTER E WITH DIAERESIS\n04EF          ; Ll #       CYRILLIC SMALL LETTER U WITH MACRON\n04F1          ; Ll #       CYRILLIC SMALL LETTER U WITH DIAERESIS\n04F3          ; Ll #       CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE\n04F5          ; Ll #       CYRILLIC SMALL LETTER CHE WITH DIAERESIS\n04F7          ; Ll #       CYRILLIC SMALL LETTER GHE WITH DESCENDER\n04F9          ; Ll #       CYRILLIC SMALL LETTER YERU WITH DIAERESIS\n04FB          ; Ll #       CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK\n04FD          ; Ll #       CYRILLIC SMALL LETTER HA WITH HOOK\n04FF          ; Ll #       CYRILLIC SMALL LETTER HA WITH STROKE\n0501          ; Ll #       CYRILLIC SMALL LETTER KOMI DE\n0503          ; Ll #       CYRILLIC SMALL LETTER KOMI DJE\n0505          ; Ll #       CYRILLIC SMALL LETTER KOMI ZJE\n0507          ; Ll #       CYRILLIC SMALL LETTER KOMI DZJE\n0509          ; Ll #       CYRILLIC SMALL LETTER KOMI LJE\n050B          ; Ll #       CYRILLIC SMALL LETTER KOMI NJE\n050D          ; Ll #       CYRILLIC SMALL LETTER KOMI SJE\n050F          ; Ll #       CYRILLIC SMALL LETTER KOMI TJE\n0511          ; Ll #       CYRILLIC SMALL LETTER REVERSED ZE\n0513          ; Ll #       CYRILLIC SMALL LETTER EL WITH HOOK\n0515          ; Ll #       CYRILLIC SMALL LETTER LHA\n0517          ; Ll #       CYRILLIC SMALL LETTER RHA\n0519          ; Ll #       CYRILLIC SMALL LETTER YAE\n051B          ; Ll #       CYRILLIC SMALL LETTER QA\n051D          ; Ll #       CYRILLIC SMALL LETTER WE\n051F          ; Ll #       CYRILLIC SMALL LETTER ALEUT KA\n0521          ; Ll #       CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK\n0523          ; Ll #       CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK\n0525          ; Ll #       CYRILLIC SMALL LETTER PE WITH DESCENDER\n0527          ; Ll #       CYRILLIC SMALL LETTER SHHA WITH DESCENDER\n0529          ; Ll #       CYRILLIC SMALL LETTER EN WITH LEFT HOOK\n052B          ; Ll #       CYRILLIC SMALL LETTER DZZHE\n052D          ; Ll #       CYRILLIC SMALL LETTER DCHE\n052F          ; Ll #       CYRILLIC SMALL LETTER EL WITH DESCENDER\n0560..0588    ; Ll #  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE\n10D0..10FA    ; Ll #  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FD..10FF    ; Ll #   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n13F8..13FD    ; Ll #   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\n1C80..1C88    ; Ll #   [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK\n1C8A          ; Ll #       CYRILLIC SMALL LETTER TJE\n1D00..1D2B    ; Ll #  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL\n1D6B..1D77    ; Ll #  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G\n1D79..1D9A    ; Ll #  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK\n1E01          ; Ll #       LATIN SMALL LETTER A WITH RING BELOW\n1E03          ; Ll #       LATIN SMALL LETTER B WITH DOT ABOVE\n1E05          ; Ll #       LATIN SMALL LETTER B WITH DOT BELOW\n1E07          ; Ll #       LATIN SMALL LETTER B WITH LINE BELOW\n1E09          ; Ll #       LATIN SMALL LETTER C WITH CEDILLA AND ACUTE\n1E0B          ; Ll #       LATIN SMALL LETTER D WITH DOT ABOVE\n1E0D          ; Ll #       LATIN SMALL LETTER D WITH DOT BELOW\n1E0F          ; Ll #       LATIN SMALL LETTER D WITH LINE BELOW\n1E11          ; Ll #       LATIN SMALL LETTER D WITH CEDILLA\n1E13          ; Ll #       LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW\n1E15          ; Ll #       LATIN SMALL LETTER E WITH MACRON AND GRAVE\n1E17          ; Ll #       LATIN SMALL LETTER E WITH MACRON AND ACUTE\n1E19          ; Ll #       LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW\n1E1B          ; Ll #       LATIN SMALL LETTER E WITH TILDE BELOW\n1E1D          ; Ll #       LATIN SMALL LETTER E WITH CEDILLA AND BREVE\n1E1F          ; Ll #       LATIN SMALL LETTER F WITH DOT ABOVE\n1E21          ; Ll #       LATIN SMALL LETTER G WITH MACRON\n1E23          ; Ll #       LATIN SMALL LETTER H WITH DOT ABOVE\n1E25          ; Ll #       LATIN SMALL LETTER H WITH DOT BELOW\n1E27          ; Ll #       LATIN SMALL LETTER H WITH DIAERESIS\n1E29          ; Ll #       LATIN SMALL LETTER H WITH CEDILLA\n1E2B          ; Ll #       LATIN SMALL LETTER H WITH BREVE BELOW\n1E2D          ; Ll #       LATIN SMALL LETTER I WITH TILDE BELOW\n1E2F          ; Ll #       LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE\n1E31          ; Ll #       LATIN SMALL LETTER K WITH ACUTE\n1E33          ; Ll #       LATIN SMALL LETTER K WITH DOT BELOW\n1E35          ; Ll #       LATIN SMALL LETTER K WITH LINE BELOW\n1E37          ; Ll #       LATIN SMALL LETTER L WITH DOT BELOW\n1E39          ; Ll #       LATIN SMALL LETTER L WITH DOT BELOW AND MACRON\n1E3B          ; Ll #       LATIN SMALL LETTER L WITH LINE BELOW\n1E3D          ; Ll #       LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW\n1E3F          ; Ll #       LATIN SMALL LETTER M WITH ACUTE\n1E41          ; Ll #       LATIN SMALL LETTER M WITH DOT ABOVE\n1E43          ; Ll #       LATIN SMALL LETTER M WITH DOT BELOW\n1E45          ; Ll #       LATIN SMALL LETTER N WITH DOT ABOVE\n1E47          ; Ll #       LATIN SMALL LETTER N WITH DOT BELOW\n1E49          ; Ll #       LATIN SMALL LETTER N WITH LINE BELOW\n1E4B          ; Ll #       LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW\n1E4D          ; Ll #       LATIN SMALL LETTER O WITH TILDE AND ACUTE\n1E4F          ; Ll #       LATIN SMALL LETTER O WITH TILDE AND DIAERESIS\n1E51          ; Ll #       LATIN SMALL LETTER O WITH MACRON AND GRAVE\n1E53          ; Ll #       LATIN SMALL LETTER O WITH MACRON AND ACUTE\n1E55          ; Ll #       LATIN SMALL LETTER P WITH ACUTE\n1E57          ; Ll #       LATIN SMALL LETTER P WITH DOT ABOVE\n1E59          ; Ll #       LATIN SMALL LETTER R WITH DOT ABOVE\n1E5B          ; Ll #       LATIN SMALL LETTER R WITH DOT BELOW\n1E5D          ; Ll #       LATIN SMALL LETTER R WITH DOT BELOW AND MACRON\n1E5F          ; Ll #       LATIN SMALL LETTER R WITH LINE BELOW\n1E61          ; Ll #       LATIN SMALL LETTER S WITH DOT ABOVE\n1E63          ; Ll #       LATIN SMALL LETTER S WITH DOT BELOW\n1E65          ; Ll #       LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE\n1E67          ; Ll #       LATIN SMALL LETTER S WITH CARON AND DOT ABOVE\n1E69          ; Ll #       LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE\n1E6B          ; Ll #       LATIN SMALL LETTER T WITH DOT ABOVE\n1E6D          ; Ll #       LATIN SMALL LETTER T WITH DOT BELOW\n1E6F          ; Ll #       LATIN SMALL LETTER T WITH LINE BELOW\n1E71          ; Ll #       LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW\n1E73          ; Ll #       LATIN SMALL LETTER U WITH DIAERESIS BELOW\n1E75          ; Ll #       LATIN SMALL LETTER U WITH TILDE BELOW\n1E77          ; Ll #       LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW\n1E79          ; Ll #       LATIN SMALL LETTER U WITH TILDE AND ACUTE\n1E7B          ; Ll #       LATIN SMALL LETTER U WITH MACRON AND DIAERESIS\n1E7D          ; Ll #       LATIN SMALL LETTER V WITH TILDE\n1E7F          ; Ll #       LATIN SMALL LETTER V WITH DOT BELOW\n1E81          ; Ll #       LATIN SMALL LETTER W WITH GRAVE\n1E83          ; Ll #       LATIN SMALL LETTER W WITH ACUTE\n1E85          ; Ll #       LATIN SMALL LETTER W WITH DIAERESIS\n1E87          ; Ll #       LATIN SMALL LETTER W WITH DOT ABOVE\n1E89          ; Ll #       LATIN SMALL LETTER W WITH DOT BELOW\n1E8B          ; Ll #       LATIN SMALL LETTER X WITH DOT ABOVE\n1E8D          ; Ll #       LATIN SMALL LETTER X WITH DIAERESIS\n1E8F          ; Ll #       LATIN SMALL LETTER Y WITH DOT ABOVE\n1E91          ; Ll #       LATIN SMALL LETTER Z WITH CIRCUMFLEX\n1E93          ; Ll #       LATIN SMALL LETTER Z WITH DOT BELOW\n1E95..1E9D    ; Ll #   [9] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH HIGH STROKE\n1E9F          ; Ll #       LATIN SMALL LETTER DELTA\n1EA1          ; Ll #       LATIN SMALL LETTER A WITH DOT BELOW\n1EA3          ; Ll #       LATIN SMALL LETTER A WITH HOOK ABOVE\n1EA5          ; Ll #       LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE\n1EA7          ; Ll #       LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE\n1EA9          ; Ll #       LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE\n1EAB          ; Ll #       LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE\n1EAD          ; Ll #       LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW\n1EAF          ; Ll #       LATIN SMALL LETTER A WITH BREVE AND ACUTE\n1EB1          ; Ll #       LATIN SMALL LETTER A WITH BREVE AND GRAVE\n1EB3          ; Ll #       LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE\n1EB5          ; Ll #       LATIN SMALL LETTER A WITH BREVE AND TILDE\n1EB7          ; Ll #       LATIN SMALL LETTER A WITH BREVE AND DOT BELOW\n1EB9          ; Ll #       LATIN SMALL LETTER E WITH DOT BELOW\n1EBB          ; Ll #       LATIN SMALL LETTER E WITH HOOK ABOVE\n1EBD          ; Ll #       LATIN SMALL LETTER E WITH TILDE\n1EBF          ; Ll #       LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE\n1EC1          ; Ll #       LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE\n1EC3          ; Ll #       LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE\n1EC5          ; Ll #       LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE\n1EC7          ; Ll #       LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW\n1EC9          ; Ll #       LATIN SMALL LETTER I WITH HOOK ABOVE\n1ECB          ; Ll #       LATIN SMALL LETTER I WITH DOT BELOW\n1ECD          ; Ll #       LATIN SMALL LETTER O WITH DOT BELOW\n1ECF          ; Ll #       LATIN SMALL LETTER O WITH HOOK ABOVE\n1ED1          ; Ll #       LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE\n1ED3          ; Ll #       LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE\n1ED5          ; Ll #       LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE\n1ED7          ; Ll #       LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE\n1ED9          ; Ll #       LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW\n1EDB          ; Ll #       LATIN SMALL LETTER O WITH HORN AND ACUTE\n1EDD          ; Ll #       LATIN SMALL LETTER O WITH HORN AND GRAVE\n1EDF          ; Ll #       LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE\n1EE1          ; Ll #       LATIN SMALL LETTER O WITH HORN AND TILDE\n1EE3          ; Ll #       LATIN SMALL LETTER O WITH HORN AND DOT BELOW\n1EE5          ; Ll #       LATIN SMALL LETTER U WITH DOT BELOW\n1EE7          ; Ll #       LATIN SMALL LETTER U WITH HOOK ABOVE\n1EE9          ; Ll #       LATIN SMALL LETTER U WITH HORN AND ACUTE\n1EEB          ; Ll #       LATIN SMALL LETTER U WITH HORN AND GRAVE\n1EED          ; Ll #       LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE\n1EEF          ; Ll #       LATIN SMALL LETTER U WITH HORN AND TILDE\n1EF1          ; Ll #       LATIN SMALL LETTER U WITH HORN AND DOT BELOW\n1EF3          ; Ll #       LATIN SMALL LETTER Y WITH GRAVE\n1EF5          ; Ll #       LATIN SMALL LETTER Y WITH DOT BELOW\n1EF7          ; Ll #       LATIN SMALL LETTER Y WITH HOOK ABOVE\n1EF9          ; Ll #       LATIN SMALL LETTER Y WITH TILDE\n1EFB          ; Ll #       LATIN SMALL LETTER MIDDLE-WELSH LL\n1EFD          ; Ll #       LATIN SMALL LETTER MIDDLE-WELSH V\n1EFF..1F07    ; Ll #   [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI\n1F10..1F15    ; Ll #   [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F27    ; Ll #   [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI\n1F30..1F37    ; Ll #   [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI\n1F40..1F45    ; Ll #   [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; Ll #   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F60..1F67    ; Ll #   [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI\n1F70..1F7D    ; Ll #  [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1F87    ; Ll #   [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI\n1F90..1F97    ; Ll #   [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI\n1FA0..1FA7    ; Ll #   [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI\n1FB0..1FB4    ; Ll #   [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FB7    ; Ll #   [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI\n1FBE          ; Ll #       GREEK PROSGEGRAMMENI\n1FC2..1FC4    ; Ll #   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FC7    ; Ll #   [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI\n1FD0..1FD3    ; Ll #   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FD7    ; Ll #   [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI\n1FE0..1FE7    ; Ll #   [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI\n1FF2..1FF4    ; Ll #   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FF7    ; Ll #   [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI\n210A          ; Ll #       SCRIPT SMALL G\n210E..210F    ; Ll #   [2] PLANCK CONSTANT..PLANCK CONSTANT OVER TWO PI\n2113          ; Ll #       SCRIPT SMALL L\n212F          ; Ll #       SCRIPT SMALL E\n2134          ; Ll #       SCRIPT SMALL O\n2139          ; Ll #       INFORMATION SOURCE\n213C..213D    ; Ll #   [2] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK SMALL GAMMA\n2146..2149    ; Ll #   [4] DOUBLE-STRUCK ITALIC SMALL D..DOUBLE-STRUCK ITALIC SMALL J\n214E          ; Ll #       TURNED SMALL F\n2184          ; Ll #       LATIN SMALL LETTER REVERSED C\n2C30..2C5F    ; Ll #  [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI\n2C61          ; Ll #       LATIN SMALL LETTER L WITH DOUBLE BAR\n2C65..2C66    ; Ll #   [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE\n2C68          ; Ll #       LATIN SMALL LETTER H WITH DESCENDER\n2C6A          ; Ll #       LATIN SMALL LETTER K WITH DESCENDER\n2C6C          ; Ll #       LATIN SMALL LETTER Z WITH DESCENDER\n2C71          ; Ll #       LATIN SMALL LETTER V WITH RIGHT HOOK\n2C73..2C74    ; Ll #   [2] LATIN SMALL LETTER W WITH HOOK..LATIN SMALL LETTER V WITH CURL\n2C76..2C7B    ; Ll #   [6] LATIN SMALL LETTER HALF H..LATIN LETTER SMALL CAPITAL TURNED E\n2C81          ; Ll #       COPTIC SMALL LETTER ALFA\n2C83          ; Ll #       COPTIC SMALL LETTER VIDA\n2C85          ; Ll #       COPTIC SMALL LETTER GAMMA\n2C87          ; Ll #       COPTIC SMALL LETTER DALDA\n2C89          ; Ll #       COPTIC SMALL LETTER EIE\n2C8B          ; Ll #       COPTIC SMALL LETTER SOU\n2C8D          ; Ll #       COPTIC SMALL LETTER ZATA\n2C8F          ; Ll #       COPTIC SMALL LETTER HATE\n2C91          ; Ll #       COPTIC SMALL LETTER THETHE\n2C93          ; Ll #       COPTIC SMALL LETTER IAUDA\n2C95          ; Ll #       COPTIC SMALL LETTER KAPA\n2C97          ; Ll #       COPTIC SMALL LETTER LAULA\n2C99          ; Ll #       COPTIC SMALL LETTER MI\n2C9B          ; Ll #       COPTIC SMALL LETTER NI\n2C9D          ; Ll #       COPTIC SMALL LETTER KSI\n2C9F          ; Ll #       COPTIC SMALL LETTER O\n2CA1          ; Ll #       COPTIC SMALL LETTER PI\n2CA3          ; Ll #       COPTIC SMALL LETTER RO\n2CA5          ; Ll #       COPTIC SMALL LETTER SIMA\n2CA7          ; Ll #       COPTIC SMALL LETTER TAU\n2CA9          ; Ll #       COPTIC SMALL LETTER UA\n2CAB          ; Ll #       COPTIC SMALL LETTER FI\n2CAD          ; Ll #       COPTIC SMALL LETTER KHI\n2CAF          ; Ll #       COPTIC SMALL LETTER PSI\n2CB1          ; Ll #       COPTIC SMALL LETTER OOU\n2CB3          ; Ll #       COPTIC SMALL LETTER DIALECT-P ALEF\n2CB5          ; Ll #       COPTIC SMALL LETTER OLD COPTIC AIN\n2CB7          ; Ll #       COPTIC SMALL LETTER CRYPTOGRAMMIC EIE\n2CB9          ; Ll #       COPTIC SMALL LETTER DIALECT-P KAPA\n2CBB          ; Ll #       COPTIC SMALL LETTER DIALECT-P NI\n2CBD          ; Ll #       COPTIC SMALL LETTER CRYPTOGRAMMIC NI\n2CBF          ; Ll #       COPTIC SMALL LETTER OLD COPTIC OOU\n2CC1          ; Ll #       COPTIC SMALL LETTER SAMPI\n2CC3          ; Ll #       COPTIC SMALL LETTER CROSSED SHEI\n2CC5          ; Ll #       COPTIC SMALL LETTER OLD COPTIC SHEI\n2CC7          ; Ll #       COPTIC SMALL LETTER OLD COPTIC ESH\n2CC9          ; Ll #       COPTIC SMALL LETTER AKHMIMIC KHEI\n2CCB          ; Ll #       COPTIC SMALL LETTER DIALECT-P HORI\n2CCD          ; Ll #       COPTIC SMALL LETTER OLD COPTIC HORI\n2CCF          ; Ll #       COPTIC SMALL LETTER OLD COPTIC HA\n2CD1          ; Ll #       COPTIC SMALL LETTER L-SHAPED HA\n2CD3          ; Ll #       COPTIC SMALL LETTER OLD COPTIC HEI\n2CD5          ; Ll #       COPTIC SMALL LETTER OLD COPTIC HAT\n2CD7          ; Ll #       COPTIC SMALL LETTER OLD COPTIC GANGIA\n2CD9          ; Ll #       COPTIC SMALL LETTER OLD COPTIC DJA\n2CDB          ; Ll #       COPTIC SMALL LETTER OLD COPTIC SHIMA\n2CDD          ; Ll #       COPTIC SMALL LETTER OLD NUBIAN SHIMA\n2CDF          ; Ll #       COPTIC SMALL LETTER OLD NUBIAN NGI\n2CE1          ; Ll #       COPTIC SMALL LETTER OLD NUBIAN NYI\n2CE3..2CE4    ; Ll #   [2] COPTIC SMALL LETTER OLD NUBIAN WAU..COPTIC SYMBOL KAI\n2CEC          ; Ll #       COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI\n2CEE          ; Ll #       COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CF3          ; Ll #       COPTIC SMALL LETTER BOHAIRIC KHEI\n2D00..2D25    ; Ll #  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; Ll #       GEORGIAN SMALL LETTER YN\n2D2D          ; Ll #       GEORGIAN SMALL LETTER AEN\nA641          ; Ll #       CYRILLIC SMALL LETTER ZEMLYA\nA643          ; Ll #       CYRILLIC SMALL LETTER DZELO\nA645          ; Ll #       CYRILLIC SMALL LETTER REVERSED DZE\nA647          ; Ll #       CYRILLIC SMALL LETTER IOTA\nA649          ; Ll #       CYRILLIC SMALL LETTER DJERV\nA64B          ; Ll #       CYRILLIC SMALL LETTER MONOGRAPH UK\nA64D          ; Ll #       CYRILLIC SMALL LETTER BROAD OMEGA\nA64F          ; Ll #       CYRILLIC SMALL LETTER NEUTRAL YER\nA651          ; Ll #       CYRILLIC SMALL LETTER YERU WITH BACK YER\nA653          ; Ll #       CYRILLIC SMALL LETTER IOTIFIED YAT\nA655          ; Ll #       CYRILLIC SMALL LETTER REVERSED YU\nA657          ; Ll #       CYRILLIC SMALL LETTER IOTIFIED A\nA659          ; Ll #       CYRILLIC SMALL LETTER CLOSED LITTLE YUS\nA65B          ; Ll #       CYRILLIC SMALL LETTER BLENDED YUS\nA65D          ; Ll #       CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS\nA65F          ; Ll #       CYRILLIC SMALL LETTER YN\nA661          ; Ll #       CYRILLIC SMALL LETTER REVERSED TSE\nA663          ; Ll #       CYRILLIC SMALL LETTER SOFT DE\nA665          ; Ll #       CYRILLIC SMALL LETTER SOFT EL\nA667          ; Ll #       CYRILLIC SMALL LETTER SOFT EM\nA669          ; Ll #       CYRILLIC SMALL LETTER MONOCULAR O\nA66B          ; Ll #       CYRILLIC SMALL LETTER BINOCULAR O\nA66D          ; Ll #       CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA681          ; Ll #       CYRILLIC SMALL LETTER DWE\nA683          ; Ll #       CYRILLIC SMALL LETTER DZWE\nA685          ; Ll #       CYRILLIC SMALL LETTER ZHWE\nA687          ; Ll #       CYRILLIC SMALL LETTER CCHE\nA689          ; Ll #       CYRILLIC SMALL LETTER DZZE\nA68B          ; Ll #       CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK\nA68D          ; Ll #       CYRILLIC SMALL LETTER TWE\nA68F          ; Ll #       CYRILLIC SMALL LETTER TSWE\nA691          ; Ll #       CYRILLIC SMALL LETTER TSSE\nA693          ; Ll #       CYRILLIC SMALL LETTER TCHE\nA695          ; Ll #       CYRILLIC SMALL LETTER HWE\nA697          ; Ll #       CYRILLIC SMALL LETTER SHWE\nA699          ; Ll #       CYRILLIC SMALL LETTER DOUBLE O\nA69B          ; Ll #       CYRILLIC SMALL LETTER CROSSED O\nA723          ; Ll #       LATIN SMALL LETTER EGYPTOLOGICAL ALEF\nA725          ; Ll #       LATIN SMALL LETTER EGYPTOLOGICAL AIN\nA727          ; Ll #       LATIN SMALL LETTER HENG\nA729          ; Ll #       LATIN SMALL LETTER TZ\nA72B          ; Ll #       LATIN SMALL LETTER TRESILLO\nA72D          ; Ll #       LATIN SMALL LETTER CUATRILLO\nA72F..A731    ; Ll #   [3] LATIN SMALL LETTER CUATRILLO WITH COMMA..LATIN LETTER SMALL CAPITAL S\nA733          ; Ll #       LATIN SMALL LETTER AA\nA735          ; Ll #       LATIN SMALL LETTER AO\nA737          ; Ll #       LATIN SMALL LETTER AU\nA739          ; Ll #       LATIN SMALL LETTER AV\nA73B          ; Ll #       LATIN SMALL LETTER AV WITH HORIZONTAL BAR\nA73D          ; Ll #       LATIN SMALL LETTER AY\nA73F          ; Ll #       LATIN SMALL LETTER REVERSED C WITH DOT\nA741          ; Ll #       LATIN SMALL LETTER K WITH STROKE\nA743          ; Ll #       LATIN SMALL LETTER K WITH DIAGONAL STROKE\nA745          ; Ll #       LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE\nA747          ; Ll #       LATIN SMALL LETTER BROKEN L\nA749          ; Ll #       LATIN SMALL LETTER L WITH HIGH STROKE\nA74B          ; Ll #       LATIN SMALL LETTER O WITH LONG STROKE OVERLAY\nA74D          ; Ll #       LATIN SMALL LETTER O WITH LOOP\nA74F          ; Ll #       LATIN SMALL LETTER OO\nA751          ; Ll #       LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER\nA753          ; Ll #       LATIN SMALL LETTER P WITH FLOURISH\nA755          ; Ll #       LATIN SMALL LETTER P WITH SQUIRREL TAIL\nA757          ; Ll #       LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER\nA759          ; Ll #       LATIN SMALL LETTER Q WITH DIAGONAL STROKE\nA75B          ; Ll #       LATIN SMALL LETTER R ROTUNDA\nA75D          ; Ll #       LATIN SMALL LETTER RUM ROTUNDA\nA75F          ; Ll #       LATIN SMALL LETTER V WITH DIAGONAL STROKE\nA761          ; Ll #       LATIN SMALL LETTER VY\nA763          ; Ll #       LATIN SMALL LETTER VISIGOTHIC Z\nA765          ; Ll #       LATIN SMALL LETTER THORN WITH STROKE\nA767          ; Ll #       LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER\nA769          ; Ll #       LATIN SMALL LETTER VEND\nA76B          ; Ll #       LATIN SMALL LETTER ET\nA76D          ; Ll #       LATIN SMALL LETTER IS\nA76F          ; Ll #       LATIN SMALL LETTER CON\nA771..A778    ; Ll #   [8] LATIN SMALL LETTER DUM..LATIN SMALL LETTER UM\nA77A          ; Ll #       LATIN SMALL LETTER INSULAR D\nA77C          ; Ll #       LATIN SMALL LETTER INSULAR F\nA77F          ; Ll #       LATIN SMALL LETTER TURNED INSULAR G\nA781          ; Ll #       LATIN SMALL LETTER TURNED L\nA783          ; Ll #       LATIN SMALL LETTER INSULAR R\nA785          ; Ll #       LATIN SMALL LETTER INSULAR S\nA787          ; Ll #       LATIN SMALL LETTER INSULAR T\nA78C          ; Ll #       LATIN SMALL LETTER SALTILLO\nA78E          ; Ll #       LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT\nA791          ; Ll #       LATIN SMALL LETTER N WITH DESCENDER\nA793..A795    ; Ll #   [3] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER H WITH PALATAL HOOK\nA797          ; Ll #       LATIN SMALL LETTER B WITH FLOURISH\nA799          ; Ll #       LATIN SMALL LETTER F WITH STROKE\nA79B          ; Ll #       LATIN SMALL LETTER VOLAPUK AE\nA79D          ; Ll #       LATIN SMALL LETTER VOLAPUK OE\nA79F          ; Ll #       LATIN SMALL LETTER VOLAPUK UE\nA7A1          ; Ll #       LATIN SMALL LETTER G WITH OBLIQUE STROKE\nA7A3          ; Ll #       LATIN SMALL LETTER K WITH OBLIQUE STROKE\nA7A5          ; Ll #       LATIN SMALL LETTER N WITH OBLIQUE STROKE\nA7A7          ; Ll #       LATIN SMALL LETTER R WITH OBLIQUE STROKE\nA7A9          ; Ll #       LATIN SMALL LETTER S WITH OBLIQUE STROKE\nA7AF          ; Ll #       LATIN LETTER SMALL CAPITAL Q\nA7B5          ; Ll #       LATIN SMALL LETTER BETA\nA7B7          ; Ll #       LATIN SMALL LETTER OMEGA\nA7B9          ; Ll #       LATIN SMALL LETTER U WITH STROKE\nA7BB          ; Ll #       LATIN SMALL LETTER GLOTTAL A\nA7BD          ; Ll #       LATIN SMALL LETTER GLOTTAL I\nA7BF          ; Ll #       LATIN SMALL LETTER GLOTTAL U\nA7C1          ; Ll #       LATIN SMALL LETTER OLD POLISH O\nA7C3          ; Ll #       LATIN SMALL LETTER ANGLICANA W\nA7C8          ; Ll #       LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY\nA7CA          ; Ll #       LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY\nA7CD          ; Ll #       LATIN SMALL LETTER S WITH DIAGONAL STROKE\nA7CF          ; Ll #       LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE\nA7D1          ; Ll #       LATIN SMALL LETTER CLOSED INSULAR G\nA7D3          ; Ll #       LATIN SMALL LETTER DOUBLE THORN\nA7D5          ; Ll #       LATIN SMALL LETTER DOUBLE WYNN\nA7D7          ; Ll #       LATIN SMALL LETTER MIDDLE SCOTS S\nA7D9          ; Ll #       LATIN SMALL LETTER SIGMOID S\nA7DB          ; Ll #       LATIN SMALL LETTER LAMBDA\nA7F6          ; Ll #       LATIN SMALL LETTER REVERSED HALF H\nA7FA          ; Ll #       LATIN LETTER SMALL CAPITAL TURNED M\nAB30..AB5A    ; Ll #  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG\nAB60..AB68    ; Ll #   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE\nAB70..ABBF    ; Ll #  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\nFB00..FB06    ; Ll #   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFB13..FB17    ; Ll #   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\nFF41..FF5A    ; Ll #  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\n10428..1044F  ; Ll #  [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW\n104D8..104FB  ; Ll #  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n10597..105A1  ; Ll #  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; Ll #  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; Ll #   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; Ll #   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n10CC0..10CF2  ; Ll #  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10D70..10D85  ; Ll #  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n118C0..118DF  ; Ll #  [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n16E60..16E7F  ; Ll #  [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16EBB..16ED3  ; Ll #  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n1D41A..1D433  ; Ll #  [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z\n1D44E..1D454  ; Ll #   [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D467  ; Ll #  [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z\n1D482..1D49B  ; Ll #  [26] MATHEMATICAL BOLD ITALIC SMALL A..MATHEMATICAL BOLD ITALIC SMALL Z\n1D4B6..1D4B9  ; Ll #   [4] MATHEMATICAL SCRIPT SMALL A..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; Ll #       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; Ll #   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D4CF  ; Ll #  [11] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL SCRIPT SMALL Z\n1D4EA..1D503  ; Ll #  [26] MATHEMATICAL BOLD SCRIPT SMALL A..MATHEMATICAL BOLD SCRIPT SMALL Z\n1D51E..1D537  ; Ll #  [26] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL FRAKTUR SMALL Z\n1D552..1D56B  ; Ll #  [26] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL DOUBLE-STRUCK SMALL Z\n1D586..1D59F  ; Ll #  [26] MATHEMATICAL BOLD FRAKTUR SMALL A..MATHEMATICAL BOLD FRAKTUR SMALL Z\n1D5BA..1D5D3  ; Ll #  [26] MATHEMATICAL SANS-SERIF SMALL A..MATHEMATICAL SANS-SERIF SMALL Z\n1D5EE..1D607  ; Ll #  [26] MATHEMATICAL SANS-SERIF BOLD SMALL A..MATHEMATICAL SANS-SERIF BOLD SMALL Z\n1D622..1D63B  ; Ll #  [26] MATHEMATICAL SANS-SERIF ITALIC SMALL A..MATHEMATICAL SANS-SERIF ITALIC SMALL Z\n1D656..1D66F  ; Ll #  [26] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z\n1D68A..1D6A5  ; Ll #  [28] MATHEMATICAL MONOSPACE SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6C2..1D6DA  ; Ll #  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DC..1D6E1  ; Ll #   [6] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL BOLD PI SYMBOL\n1D6FC..1D714  ; Ll #  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D716..1D71B  ; Ll #   [6] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL ITALIC PI SYMBOL\n1D736..1D74E  ; Ll #  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D750..1D755  ; Ll #   [6] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC PI SYMBOL\n1D770..1D788  ; Ll #  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D78A..1D78F  ; Ll #   [6] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD PI SYMBOL\n1D7AA..1D7C2  ; Ll #  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C4..1D7C9  ; Ll #   [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL\n1D7CB         ; Ll #       MATHEMATICAL BOLD SMALL DIGAMMA\n1DF00..1DF09  ; Ll #  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK\n1DF0B..1DF1E  ; Ll #  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL\n1DF25..1DF2A  ; Ll #   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK\n1E922..1E943  ; Ll #  [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA\n\n# Total code points: 2283\n\n# ================================================\n\n# General_Category=Titlecase_Letter\n\n01C5          ; Lt #       LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON\n01C8          ; Lt #       LATIN CAPITAL LETTER L WITH SMALL LETTER J\n01CB          ; Lt #       LATIN CAPITAL LETTER N WITH SMALL LETTER J\n01F2          ; Lt #       LATIN CAPITAL LETTER D WITH SMALL LETTER Z\n1F88..1F8F    ; Lt #   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1F98..1F9F    ; Lt #   [8] GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1FA8..1FAF    ; Lt #   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI\n1FBC          ; Lt #       GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FCC          ; Lt #       GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FFC          ; Lt #       GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n\n# Total code points: 31\n\n# ================================================\n\n# General_Category=Modifier_Letter\n\n02B0..02C1    ; Lm #  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP\n02C6..02D1    ; Lm #  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON\n02E0..02E4    ; Lm #   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n02EC          ; Lm #       MODIFIER LETTER VOICING\n02EE          ; Lm #       MODIFIER LETTER DOUBLE APOSTROPHE\n0374          ; Lm #       GREEK NUMERAL SIGN\n037A          ; Lm #       GREEK YPOGEGRAMMENI\n0559          ; Lm #       ARMENIAN MODIFIER LETTER LEFT HALF RING\n0640          ; Lm #       ARABIC TATWEEL\n06E5..06E6    ; Lm #   [2] ARABIC SMALL WAW..ARABIC SMALL YEH\n07F4..07F5    ; Lm #   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE\n07FA          ; Lm #       NKO LAJANYALAN\n081A          ; Lm #       SAMARITAN MODIFIER LETTER EPENTHETIC YUT\n0824          ; Lm #       SAMARITAN MODIFIER LETTER SHORT A\n0828          ; Lm #       SAMARITAN MODIFIER LETTER I\n08C9          ; Lm #       ARABIC SMALL FARSI YEH\n0971          ; Lm #       DEVANAGARI SIGN HIGH SPACING DOT\n0E46          ; Lm #       THAI CHARACTER MAIYAMOK\n0EC6          ; Lm #       LAO KO LA\n10FC          ; Lm #       MODIFIER LETTER GEORGIAN NAR\n17D7          ; Lm #       KHMER SIGN LEK TOO\n1843          ; Lm #       MONGOLIAN LETTER TODO LONG VOWEL SIGN\n1AA7          ; Lm #       TAI THAM SIGN MAI YAMOK\n1C78..1C7D    ; Lm #   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD\n1D2C..1D6A    ; Lm #  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D78          ; Lm #       MODIFIER LETTER CYRILLIC EN\n1D9B..1DBF    ; Lm #  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA\n2071          ; Lm #       SUPERSCRIPT LATIN SMALL LETTER I\n207F          ; Lm #       SUPERSCRIPT LATIN SMALL LETTER N\n2090..209C    ; Lm #  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n2C7C..2C7D    ; Lm #   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\n2D6F          ; Lm #       TIFINAGH MODIFIER LETTER LABIALIZATION MARK\n2E2F          ; Lm #       VERTICAL TILDE\n3005          ; Lm #       IDEOGRAPHIC ITERATION MARK\n3031..3035    ; Lm #   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF\n303B          ; Lm #       VERTICAL IDEOGRAPHIC ITERATION MARK\n309D..309E    ; Lm #   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK\n30FC..30FE    ; Lm #   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK\nA015          ; Lm #       YI SYLLABLE WU\nA4F8..A4FD    ; Lm #   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU\nA60C          ; Lm #       VAI SYLLABLE LENGTHENER\nA67F          ; Lm #       CYRILLIC PAYEROK\nA69C..A69D    ; Lm #   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA717..A71F    ; Lm #   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK\nA770          ; Lm #       MODIFIER LETTER US\nA788          ; Lm #       MODIFIER LETTER LOW CIRCUMFLEX ACCENT\nA7F1..A7F4    ; Lm #   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F8..A7F9    ; Lm #   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA9CF          ; Lm #       JAVANESE PANGRANGKEP\nA9E6          ; Lm #       MYANMAR MODIFIER LETTER SHAN REDUPLICATION\nAA70          ; Lm #       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION\nAADD          ; Lm #       TAI VIET SYMBOL SAM\nAAF3..AAF4    ; Lm #   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK\nAB5C..AB5F    ; Lm #   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB69          ; Lm #       MODIFIER LETTER SMALL TURNED W\nFF70          ; Lm #       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF9E..FF9F    ; Lm #   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\n10780..10785  ; Lm #   [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; Lm #  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; Lm #   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n10D4E         ; Lm #       GARAY VOWEL LENGTH MARK\n10D6F         ; Lm #       GARAY REDUPLICATION MARK\n10EC5         ; Lm #       ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW\n11DD9         ; Lm #       TOLONG SIKI SIGN SELA\n16B40..16B43  ; Lm #   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM\n16D40..16D42  ; Lm #   [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA\n16D6B..16D6C  ; Lm #   [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT\n16F93..16F9F  ; Lm #  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8\n16FE0..16FE1  ; Lm #   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK\n16FE3         ; Lm #       OLD CHINESE ITERATION MARK\n16FF2..16FF3  ; Lm #   [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER\n1AFF0..1AFF3  ; Lm #   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5\n1AFF5..1AFFB  ; Lm #   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5\n1AFFD..1AFFE  ; Lm #   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8\n1E030..1E06D  ; Lm #  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E137..1E13D  ; Lm #   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER\n1E4EB         ; Lm #       NAG MUNDARI SIGN OJOD\n1E6FF         ; Lm #       TAI YO XAM LAI\n1E94B         ; Lm #       ADLAM NASALIZATION MARK\n\n# Total code points: 410\n\n# ================================================\n\n# General_Category=Other_Letter\n\n00AA          ; Lo #       FEMININE ORDINAL INDICATOR\n00BA          ; Lo #       MASCULINE ORDINAL INDICATOR\n01BB          ; Lo #       LATIN LETTER TWO WITH STROKE\n01C0..01C3    ; Lo #   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK\n0294..0295    ; Lo #   [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE\n05D0..05EA    ; Lo #  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV\n05EF..05F2    ; Lo #   [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD\n0620..063F    ; Lo #  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE\n0641..064A    ; Lo #  [10] ARABIC LETTER FEH..ARABIC LETTER YEH\n066E..066F    ; Lo #   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF\n0671..06D3    ; Lo #  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n06D5          ; Lo #       ARABIC LETTER AE\n06EE..06EF    ; Lo #   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V\n06FA..06FC    ; Lo #   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW\n06FF          ; Lo #       ARABIC LETTER HEH WITH INVERTED V\n0710          ; Lo #       SYRIAC LETTER ALAPH\n0712..072F    ; Lo #  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH\n074D..07A5    ; Lo #  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU\n07B1          ; Lo #       THAANA LETTER NAA\n07CA..07EA    ; Lo #  [33] NKO LETTER A..NKO LETTER JONA RA\n0800..0815    ; Lo #  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF\n0840..0858    ; Lo #  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN\n0860..086A    ; Lo #  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA\n0870..0887    ; Lo #  [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT\n0889..088F    ; Lo #   [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE\n08A0..08C8    ; Lo #  [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF\n0904..0939    ; Lo #  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA\n093D          ; Lo #       DEVANAGARI SIGN AVAGRAHA\n0950          ; Lo #       DEVANAGARI OM\n0958..0961    ; Lo #  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL\n0972..0980    ; Lo #  [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI\n0985..098C    ; Lo #   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L\n098F..0990    ; Lo #   [2] BENGALI LETTER E..BENGALI LETTER AI\n0993..09A8    ; Lo #  [22] BENGALI LETTER O..BENGALI LETTER NA\n09AA..09B0    ; Lo #   [7] BENGALI LETTER PA..BENGALI LETTER RA\n09B2          ; Lo #       BENGALI LETTER LA\n09B6..09B9    ; Lo #   [4] BENGALI LETTER SHA..BENGALI LETTER HA\n09BD          ; Lo #       BENGALI SIGN AVAGRAHA\n09CE          ; Lo #       BENGALI LETTER KHANDA TA\n09DC..09DD    ; Lo #   [2] BENGALI LETTER RRA..BENGALI LETTER RHA\n09DF..09E1    ; Lo #   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL\n09F0..09F1    ; Lo #   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL\n09FC          ; Lo #       BENGALI LETTER VEDIC ANUSVARA\n0A05..0A0A    ; Lo #   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU\n0A0F..0A10    ; Lo #   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI\n0A13..0A28    ; Lo #  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA\n0A2A..0A30    ; Lo #   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA\n0A32..0A33    ; Lo #   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA\n0A35..0A36    ; Lo #   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA\n0A38..0A39    ; Lo #   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA\n0A59..0A5C    ; Lo #   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA\n0A5E          ; Lo #       GURMUKHI LETTER FA\n0A72..0A74    ; Lo #   [3] GURMUKHI IRI..GURMUKHI EK ONKAR\n0A85..0A8D    ; Lo #   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E\n0A8F..0A91    ; Lo #   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O\n0A93..0AA8    ; Lo #  [22] GUJARATI LETTER O..GUJARATI LETTER NA\n0AAA..0AB0    ; Lo #   [7] GUJARATI LETTER PA..GUJARATI LETTER RA\n0AB2..0AB3    ; Lo #   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA\n0AB5..0AB9    ; Lo #   [5] GUJARATI LETTER VA..GUJARATI LETTER HA\n0ABD          ; Lo #       GUJARATI SIGN AVAGRAHA\n0AD0          ; Lo #       GUJARATI OM\n0AE0..0AE1    ; Lo #   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL\n0AF9          ; Lo #       GUJARATI LETTER ZHA\n0B05..0B0C    ; Lo #   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L\n0B0F..0B10    ; Lo #   [2] ORIYA LETTER E..ORIYA LETTER AI\n0B13..0B28    ; Lo #  [22] ORIYA LETTER O..ORIYA LETTER NA\n0B2A..0B30    ; Lo #   [7] ORIYA LETTER PA..ORIYA LETTER RA\n0B32..0B33    ; Lo #   [2] ORIYA LETTER LA..ORIYA LETTER LLA\n0B35..0B39    ; Lo #   [5] ORIYA LETTER VA..ORIYA LETTER HA\n0B3D          ; Lo #       ORIYA SIGN AVAGRAHA\n0B5C..0B5D    ; Lo #   [2] ORIYA LETTER RRA..ORIYA LETTER RHA\n0B5F..0B61    ; Lo #   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL\n0B71          ; Lo #       ORIYA LETTER WA\n0B83          ; Lo #       TAMIL SIGN VISARGA\n0B85..0B8A    ; Lo #   [6] TAMIL LETTER A..TAMIL LETTER UU\n0B8E..0B90    ; Lo #   [3] TAMIL LETTER E..TAMIL LETTER AI\n0B92..0B95    ; Lo #   [4] TAMIL LETTER O..TAMIL LETTER KA\n0B99..0B9A    ; Lo #   [2] TAMIL LETTER NGA..TAMIL LETTER CA\n0B9C          ; Lo #       TAMIL LETTER JA\n0B9E..0B9F    ; Lo #   [2] TAMIL LETTER NYA..TAMIL LETTER TTA\n0BA3..0BA4    ; Lo #   [2] TAMIL LETTER NNA..TAMIL LETTER TA\n0BA8..0BAA    ; Lo #   [3] TAMIL LETTER NA..TAMIL LETTER PA\n0BAE..0BB9    ; Lo #  [12] TAMIL LETTER MA..TAMIL LETTER HA\n0BD0          ; Lo #       TAMIL OM\n0C05..0C0C    ; Lo #   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L\n0C0E..0C10    ; Lo #   [3] TELUGU LETTER E..TELUGU LETTER AI\n0C12..0C28    ; Lo #  [23] TELUGU LETTER O..TELUGU LETTER NA\n0C2A..0C39    ; Lo #  [16] TELUGU LETTER PA..TELUGU LETTER HA\n0C3D          ; Lo #       TELUGU SIGN AVAGRAHA\n0C58..0C5A    ; Lo #   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA\n0C5C..0C5D    ; Lo #   [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU\n0C60..0C61    ; Lo #   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL\n0C80          ; Lo #       KANNADA SIGN SPACING CANDRABINDU\n0C85..0C8C    ; Lo #   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L\n0C8E..0C90    ; Lo #   [3] KANNADA LETTER E..KANNADA LETTER AI\n0C92..0CA8    ; Lo #  [23] KANNADA LETTER O..KANNADA LETTER NA\n0CAA..0CB3    ; Lo #  [10] KANNADA LETTER PA..KANNADA LETTER LLA\n0CB5..0CB9    ; Lo #   [5] KANNADA LETTER VA..KANNADA LETTER HA\n0CBD          ; Lo #       KANNADA SIGN AVAGRAHA\n0CDC..0CDE    ; Lo #   [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA\n0CE0..0CE1    ; Lo #   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL\n0CF1..0CF2    ; Lo #   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA\n0D04..0D0C    ; Lo #   [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L\n0D0E..0D10    ; Lo #   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI\n0D12..0D3A    ; Lo #  [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA\n0D3D          ; Lo #       MALAYALAM SIGN AVAGRAHA\n0D4E          ; Lo #       MALAYALAM LETTER DOT REPH\n0D54..0D56    ; Lo #   [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL\n0D5F..0D61    ; Lo #   [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL\n0D7A..0D7F    ; Lo #   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K\n0D85..0D96    ; Lo #  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA\n0D9A..0DB1    ; Lo #  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA\n0DB3..0DBB    ; Lo #   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA\n0DBD          ; Lo #       SINHALA LETTER DANTAJA LAYANNA\n0DC0..0DC6    ; Lo #   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA\n0E01..0E30    ; Lo #  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A\n0E32..0E33    ; Lo #   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM\n0E40..0E45    ; Lo #   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO\n0E81..0E82    ; Lo #   [2] LAO LETTER KO..LAO LETTER KHO SUNG\n0E84          ; Lo #       LAO LETTER KHO TAM\n0E86..0E8A    ; Lo #   [5] LAO LETTER PALI GHA..LAO LETTER SO TAM\n0E8C..0EA3    ; Lo #  [24] LAO LETTER PALI JHA..LAO LETTER LO LING\n0EA5          ; Lo #       LAO LETTER LO LOOT\n0EA7..0EB0    ; Lo #  [10] LAO LETTER WO..LAO VOWEL SIGN A\n0EB2..0EB3    ; Lo #   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM\n0EBD          ; Lo #       LAO SEMIVOWEL SIGN NYO\n0EC0..0EC4    ; Lo #   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI\n0EDC..0EDF    ; Lo #   [4] LAO HO NO..LAO LETTER KHMU NYO\n0F00          ; Lo #       TIBETAN SYLLABLE OM\n0F40..0F47    ; Lo #   [8] TIBETAN LETTER KA..TIBETAN LETTER JA\n0F49..0F6C    ; Lo #  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA\n0F88..0F8C    ; Lo #   [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN\n1000..102A    ; Lo #  [43] MYANMAR LETTER KA..MYANMAR LETTER AU\n103F          ; Lo #       MYANMAR LETTER GREAT SA\n1050..1055    ; Lo #   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL\n105A..105D    ; Lo #   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE\n1061          ; Lo #       MYANMAR LETTER SGAW KAREN SHA\n1065..1066    ; Lo #   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA\n106E..1070    ; Lo #   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA\n1075..1081    ; Lo #  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA\n108E          ; Lo #       MYANMAR LETTER RUMAI PALAUNG FA\n1100..1248    ; Lo # [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA\n124A..124D    ; Lo #   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE\n1250..1256    ; Lo #   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO\n1258          ; Lo #       ETHIOPIC SYLLABLE QHWA\n125A..125D    ; Lo #   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE\n1260..1288    ; Lo #  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA\n128A..128D    ; Lo #   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE\n1290..12B0    ; Lo #  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA\n12B2..12B5    ; Lo #   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE\n12B8..12BE    ; Lo #   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO\n12C0          ; Lo #       ETHIOPIC SYLLABLE KXWA\n12C2..12C5    ; Lo #   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE\n12C8..12D6    ; Lo #  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O\n12D8..1310    ; Lo #  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA\n1312..1315    ; Lo #   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE\n1318..135A    ; Lo #  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA\n1380..138F    ; Lo #  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE\n1401..166C    ; Lo # [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA\n166F..167F    ; Lo #  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W\n1681..169A    ; Lo #  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH\n16A0..16EA    ; Lo #  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X\n16F1..16F8    ; Lo #   [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC\n1700..1711    ; Lo #  [18] TAGALOG LETTER A..TAGALOG LETTER HA\n171F..1731    ; Lo #  [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA\n1740..1751    ; Lo #  [18] BUHID LETTER A..BUHID LETTER HA\n1760..176C    ; Lo #  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA\n176E..1770    ; Lo #   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA\n1780..17B3    ; Lo #  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU\n17DC          ; Lo #       KHMER SIGN AVAKRAHASANYA\n1820..1842    ; Lo #  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI\n1844..1878    ; Lo #  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS\n1880..1884    ; Lo #   [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA\n1887..18A8    ; Lo #  [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA\n18AA          ; Lo #       MONGOLIAN LETTER MANCHU ALI GALI LHA\n18B0..18F5    ; Lo #  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S\n1900..191E    ; Lo #  [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA\n1950..196D    ; Lo #  [30] TAI LE LETTER KA..TAI LE LETTER AI\n1970..1974    ; Lo #   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6\n1980..19AB    ; Lo #  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA\n19B0..19C9    ; Lo #  [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2\n1A00..1A16    ; Lo #  [23] BUGINESE LETTER KA..BUGINESE LETTER HA\n1A20..1A54    ; Lo #  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA\n1B05..1B33    ; Lo #  [47] BALINESE LETTER AKARA..BALINESE LETTER HA\n1B45..1B4C    ; Lo #   [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA\n1B83..1BA0    ; Lo #  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA\n1BAE..1BAF    ; Lo #   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA\n1BBA..1BE5    ; Lo #  [44] SUNDANESE AVAGRAHA..BATAK LETTER U\n1C00..1C23    ; Lo #  [36] LEPCHA LETTER KA..LEPCHA LETTER A\n1C4D..1C4F    ; Lo #   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA\n1C5A..1C77    ; Lo #  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH\n1CE9..1CEC    ; Lo #   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL\n1CEE..1CF3    ; Lo #   [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA\n1CF5..1CF6    ; Lo #   [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA\n1CFA          ; Lo #       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA\n2135..2138    ; Lo #   [4] ALEF SYMBOL..DALET SYMBOL\n2D30..2D67    ; Lo #  [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO\n2D80..2D96    ; Lo #  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE\n2DA0..2DA6    ; Lo #   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO\n2DA8..2DAE    ; Lo #   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO\n2DB0..2DB6    ; Lo #   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO\n2DB8..2DBE    ; Lo #   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO\n2DC0..2DC6    ; Lo #   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO\n2DC8..2DCE    ; Lo #   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO\n2DD0..2DD6    ; Lo #   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO\n2DD8..2DDE    ; Lo #   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO\n3006          ; Lo #       IDEOGRAPHIC CLOSING MARK\n303C          ; Lo #       MASU MARK\n3041..3096    ; Lo #  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE\n309F          ; Lo #       HIRAGANA DIGRAPH YORI\n30A1..30FA    ; Lo #  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO\n30FF          ; Lo #       KATAKANA DIGRAPH KOTO\n3105..312F    ; Lo #  [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN\n3131..318E    ; Lo #  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE\n31A0..31BF    ; Lo #  [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH\n31F0..31FF    ; Lo #  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO\n3400..4DBF    ; Lo # [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF\n4E00..A014    ; Lo # [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E\nA016..A48C    ; Lo # [1143] YI SYLLABLE BIT..YI SYLLABLE YYR\nA4D0..A4F7    ; Lo #  [40] LISU LETTER BA..LISU LETTER OE\nA500..A60B    ; Lo # [268] VAI SYLLABLE EE..VAI SYLLABLE NG\nA610..A61F    ; Lo #  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG\nA62A..A62B    ; Lo #   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO\nA66E          ; Lo #       CYRILLIC LETTER MULTIOCULAR O\nA6A0..A6E5    ; Lo #  [70] BAMUM LETTER A..BAMUM LETTER KI\nA78F          ; Lo #       LATIN LETTER SINOLOGICAL DOT\nA7F7          ; Lo #       LATIN EPIGRAPHIC LETTER SIDEWAYS I\nA7FB..A801    ; Lo #   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I\nA803..A805    ; Lo #   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O\nA807..A80A    ; Lo #   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO\nA80C..A822    ; Lo #  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO\nA840..A873    ; Lo #  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU\nA882..A8B3    ; Lo #  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA\nA8F2..A8F7    ; Lo #   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA\nA8FB          ; Lo #       DEVANAGARI HEADSTROKE\nA8FD..A8FE    ; Lo #   [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY\nA90A..A925    ; Lo #  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO\nA930..A946    ; Lo #  [23] REJANG LETTER KA..REJANG LETTER A\nA960..A97C    ; Lo #  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\nA984..A9B2    ; Lo #  [47] JAVANESE LETTER A..JAVANESE LETTER HA\nA9E0..A9E4    ; Lo #   [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA\nA9E7..A9EF    ; Lo #   [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA\nA9FA..A9FE    ; Lo #   [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA\nAA00..AA28    ; Lo #  [41] CHAM LETTER A..CHAM LETTER HA\nAA40..AA42    ; Lo #   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG\nAA44..AA4B    ; Lo #   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS\nAA60..AA6F    ; Lo #  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA\nAA71..AA76    ; Lo #   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM\nAA7A          ; Lo #       MYANMAR LETTER AITON RA\nAA7E..AAAF    ; Lo #  [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O\nAAB1          ; Lo #       TAI VIET VOWEL AA\nAAB5..AAB6    ; Lo #   [2] TAI VIET VOWEL E..TAI VIET VOWEL O\nAAB9..AABD    ; Lo #   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN\nAAC0          ; Lo #       TAI VIET TONE MAI NUENG\nAAC2          ; Lo #       TAI VIET TONE MAI SONG\nAADB..AADC    ; Lo #   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG\nAAE0..AAEA    ; Lo #  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA\nAAF2          ; Lo #       MEETEI MAYEK ANJI\nAB01..AB06    ; Lo #   [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO\nAB09..AB0E    ; Lo #   [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO\nAB11..AB16    ; Lo #   [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO\nAB20..AB26    ; Lo #   [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO\nAB28..AB2E    ; Lo #   [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO\nABC0..ABE2    ; Lo #  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM\nAC00..D7A3    ; Lo # [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH\nD7B0..D7C6    ; Lo #  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\nD7CB..D7FB    ; Lo #  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\nF900..FA6D    ; Lo # [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D\nFA70..FAD9    ; Lo # [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9\nFB1D          ; Lo #       HEBREW LETTER YOD WITH HIRIQ\nFB1F..FB28    ; Lo #  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV\nFB2A..FB36    ; Lo #  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH\nFB38..FB3C    ; Lo #   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH\nFB3E          ; Lo #       HEBREW LETTER MEM WITH DAGESH\nFB40..FB41    ; Lo #   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH\nFB43..FB44    ; Lo #   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH\nFB46..FBB1    ; Lo # [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM\nFBD3..FD3D    ; Lo # [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM\nFD50..FD8F    ; Lo #  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM\nFD92..FDC7    ; Lo #  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM\nFDF0..FDFB    ; Lo #  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU\nFE70..FE74    ; Lo #   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM\nFE76..FEFC    ; Lo # [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM\nFF66..FF6F    ; Lo #  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU\nFF71..FF9D    ; Lo #  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N\nFFA0..FFBE    ; Lo #  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH\nFFC2..FFC7    ; Lo #   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E\nFFCA..FFCF    ; Lo #   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE\nFFD2..FFD7    ; Lo #   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU\nFFDA..FFDC    ; Lo #   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I\n10000..1000B  ; Lo #  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE\n1000D..10026  ; Lo #  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO\n10028..1003A  ; Lo #  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO\n1003C..1003D  ; Lo #   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE\n1003F..1004D  ; Lo #  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO\n10050..1005D  ; Lo #  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089\n10080..100FA  ; Lo # [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305\n10280..1029C  ; Lo #  [29] LYCIAN LETTER A..LYCIAN LETTER X\n102A0..102D0  ; Lo #  [49] CARIAN LETTER A..CARIAN LETTER UUU3\n10300..1031F  ; Lo #  [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS\n1032D..10340  ; Lo #  [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA\n10342..10349  ; Lo #   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL\n10350..10375  ; Lo #  [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA\n10380..1039D  ; Lo #  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU\n103A0..103C3  ; Lo #  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA\n103C8..103CF  ; Lo #   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH\n10450..1049D  ; Lo #  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO\n10500..10527  ; Lo #  [40] ELBASAN LETTER A..ELBASAN LETTER KHE\n10530..10563  ; Lo #  [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW\n105C0..105F3  ; Lo #  [52] TODHRI LETTER A..TODHRI LETTER OO\n10600..10736  ; Lo # [311] LINEAR A SIGN AB001..LINEAR A SIGN A664\n10740..10755  ; Lo #  [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE\n10760..10767  ; Lo #   [8] LINEAR A SIGN A800..LINEAR A SIGN A807\n10800..10805  ; Lo #   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA\n10808         ; Lo #       CYPRIOT SYLLABLE JO\n1080A..10835  ; Lo #  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO\n10837..10838  ; Lo #   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE\n1083C         ; Lo #       CYPRIOT SYLLABLE ZA\n1083F..10855  ; Lo #  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW\n10860..10876  ; Lo #  [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW\n10880..1089E  ; Lo #  [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW\n108E0..108F2  ; Lo #  [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH\n108F4..108F5  ; Lo #   [2] HATRAN LETTER SHIN..HATRAN LETTER TAW\n10900..10915  ; Lo #  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU\n10920..10939  ; Lo #  [26] LYDIAN LETTER A..LYDIAN LETTER C\n10940..10959  ; Lo #  [26] SIDETIC LETTER N01..SIDETIC LETTER N26\n10980..109B7  ; Lo #  [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA\n109BE..109BF  ; Lo #   [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN\n10A00         ; Lo #       KHAROSHTHI LETTER A\n10A10..10A13  ; Lo #   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA\n10A15..10A17  ; Lo #   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA\n10A19..10A35  ; Lo #  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA\n10A60..10A7C  ; Lo #  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH\n10A80..10A9C  ; Lo #  [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH\n10AC0..10AC7  ; Lo #   [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW\n10AC9..10AE4  ; Lo #  [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW\n10B00..10B35  ; Lo #  [54] AVESTAN LETTER A..AVESTAN LETTER HE\n10B40..10B55  ; Lo #  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW\n10B60..10B72  ; Lo #  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW\n10B80..10B91  ; Lo #  [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW\n10C00..10C48  ; Lo #  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH\n10D00..10D23  ; Lo #  [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA\n10D4A..10D4D  ; Lo #   [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE\n10D4F         ; Lo #       GARAY SUKUN\n10E80..10EA9  ; Lo #  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET\n10EB0..10EB1  ; Lo #   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE\n10EC2..10EC4  ; Lo #   [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW\n10EC6..10EC7  ; Lo #   [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW\n10F00..10F1C  ; Lo #  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL\n10F27         ; Lo #       OLD SOGDIAN LIGATURE AYIN-DALETH\n10F30..10F45  ; Lo #  [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN\n10F70..10F81  ; Lo #  [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH\n10FB0..10FC4  ; Lo #  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW\n10FE0..10FF6  ; Lo #  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH\n11003..11037  ; Lo #  [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA\n11071..11072  ; Lo #   [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O\n11075         ; Lo #       BRAHMI LETTER OLD TAMIL LLA\n11083..110AF  ; Lo #  [45] KAITHI LETTER A..KAITHI LETTER HA\n110D0..110E8  ; Lo #  [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE\n11103..11126  ; Lo #  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA\n11144         ; Lo #       CHAKMA LETTER LHAA\n11147         ; Lo #       CHAKMA LETTER VAA\n11150..11172  ; Lo #  [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA\n11176         ; Lo #       MAHAJANI LIGATURE SHRI\n11183..111B2  ; Lo #  [48] SHARADA LETTER A..SHARADA LETTER HA\n111C1..111C4  ; Lo #   [4] SHARADA SIGN AVAGRAHA..SHARADA OM\n111DA         ; Lo #       SHARADA EKAM\n111DC         ; Lo #       SHARADA HEADSTROKE\n11200..11211  ; Lo #  [18] KHOJKI LETTER A..KHOJKI LETTER JJA\n11213..1122B  ; Lo #  [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA\n1123F..11240  ; Lo #   [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I\n11280..11286  ; Lo #   [7] MULTANI LETTER A..MULTANI LETTER GA\n11288         ; Lo #       MULTANI LETTER GHA\n1128A..1128D  ; Lo #   [4] MULTANI LETTER CA..MULTANI LETTER JJA\n1128F..1129D  ; Lo #  [15] MULTANI LETTER NYA..MULTANI LETTER BA\n1129F..112A8  ; Lo #  [10] MULTANI LETTER BHA..MULTANI LETTER RHA\n112B0..112DE  ; Lo #  [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA\n11305..1130C  ; Lo #   [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L\n1130F..11310  ; Lo #   [2] GRANTHA LETTER EE..GRANTHA LETTER AI\n11313..11328  ; Lo #  [22] GRANTHA LETTER OO..GRANTHA LETTER NA\n1132A..11330  ; Lo #   [7] GRANTHA LETTER PA..GRANTHA LETTER RA\n11332..11333  ; Lo #   [2] GRANTHA LETTER LA..GRANTHA LETTER LLA\n11335..11339  ; Lo #   [5] GRANTHA LETTER VA..GRANTHA LETTER HA\n1133D         ; Lo #       GRANTHA SIGN AVAGRAHA\n11350         ; Lo #       GRANTHA OM\n1135D..11361  ; Lo #   [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL\n11380..11389  ; Lo #  [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL\n1138B         ; Lo #       TULU-TIGALARI LETTER EE\n1138E         ; Lo #       TULU-TIGALARI LETTER AI\n11390..113B5  ; Lo #  [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA\n113B7         ; Lo #       TULU-TIGALARI SIGN AVAGRAHA\n113D1         ; Lo #       TULU-TIGALARI REPHA\n113D3         ; Lo #       TULU-TIGALARI SIGN PLUTA\n11400..11434  ; Lo #  [53] NEWA LETTER A..NEWA LETTER HA\n11447..1144A  ; Lo #   [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI\n1145F..11461  ; Lo #   [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA\n11480..114AF  ; Lo #  [48] TIRHUTA ANJI..TIRHUTA LETTER HA\n114C4..114C5  ; Lo #   [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG\n114C7         ; Lo #       TIRHUTA OM\n11580..115AE  ; Lo #  [47] SIDDHAM LETTER A..SIDDHAM LETTER HA\n115D8..115DB  ; Lo #   [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U\n11600..1162F  ; Lo #  [48] MODI LETTER A..MODI LETTER LLA\n11644         ; Lo #       MODI SIGN HUVA\n11680..116AA  ; Lo #  [43] TAKRI LETTER A..TAKRI LETTER RRA\n116B8         ; Lo #       TAKRI LETTER ARCHAIC KHA\n11700..1171A  ; Lo #  [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA\n11740..11746  ; Lo #   [7] AHOM LETTER CA..AHOM LETTER LLA\n11800..1182B  ; Lo #  [44] DOGRA LETTER A..DOGRA LETTER RRA\n118FF..11906  ; Lo #   [8] WARANG CITI OM..DIVES AKURU LETTER E\n11909         ; Lo #       DIVES AKURU LETTER O\n1190C..11913  ; Lo #   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA\n11915..11916  ; Lo #   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA\n11918..1192F  ; Lo #  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA\n1193F         ; Lo #       DIVES AKURU PREFIXED NASAL SIGN\n11941         ; Lo #       DIVES AKURU INITIAL RA\n119A0..119A7  ; Lo #   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR\n119AA..119D0  ; Lo #  [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA\n119E1         ; Lo #       NANDINAGARI SIGN AVAGRAHA\n119E3         ; Lo #       NANDINAGARI HEADSTROKE\n11A00         ; Lo #       ZANABAZAR SQUARE LETTER A\n11A0B..11A32  ; Lo #  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA\n11A3A         ; Lo #       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\n11A50         ; Lo #       SOYOMBO LETTER A\n11A5C..11A89  ; Lo #  [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA\n11A9D         ; Lo #       SOYOMBO MARK PLUTA\n11AB0..11AF8  ; Lo #  [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL\n11BC0..11BE0  ; Lo #  [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO\n11C00..11C08  ; Lo #   [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L\n11C0A..11C2E  ; Lo #  [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA\n11C40         ; Lo #       BHAIKSUKI SIGN AVAGRAHA\n11C72..11C8F  ; Lo #  [30] MARCHEN LETTER KA..MARCHEN LETTER A\n11D00..11D06  ; Lo #   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E\n11D08..11D09  ; Lo #   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O\n11D0B..11D30  ; Lo #  [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA\n11D46         ; Lo #       MASARAM GONDI REPHA\n11D60..11D65  ; Lo #   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU\n11D67..11D68  ; Lo #   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI\n11D6A..11D89  ; Lo #  [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA\n11D98         ; Lo #       GUNJALA GONDI OM\n11DB0..11DD8  ; Lo #  [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH\n11DDA..11DDB  ; Lo #   [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA\n11EE0..11EF2  ; Lo #  [19] MAKASAR LETTER KA..MAKASAR ANGKA\n11F02         ; Lo #       KAWI SIGN REPHA\n11F04..11F10  ; Lo #  [13] KAWI LETTER A..KAWI LETTER O\n11F12..11F33  ; Lo #  [34] KAWI LETTER KA..KAWI LETTER JNYA\n11FB0         ; Lo #       LISU LETTER YHA\n12000..12399  ; Lo # [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U\n12480..12543  ; Lo # [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU\n12F90..12FF0  ; Lo #  [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114\n13000..1342F  ; Lo # [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D\n13441..13446  ; Lo #   [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN\n13460..143FA  ; Lo # [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA\n14400..14646  ; Lo # [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530\n16100..1611D  ; Lo #  [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA\n16800..16A38  ; Lo # [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ\n16A40..16A5E  ; Lo #  [31] MRO LETTER TA..MRO LETTER TEK\n16A70..16ABE  ; Lo #  [79] TANGSA LETTER OZ..TANGSA LETTER ZA\n16AD0..16AED  ; Lo #  [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I\n16B00..16B2F  ; Lo #  [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU\n16B63..16B77  ; Lo #  [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS\n16B7D..16B8F  ; Lo #  [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ\n16D43..16D6A  ; Lo #  [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU\n16F00..16F4A  ; Lo #  [75] MIAO LETTER PA..MIAO LETTER RTE\n16F50         ; Lo #       MIAO LETTER NASALIZATION\n17000..18CD5  ; Lo # [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5\n18CFF..18D1E  ; Lo #  [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E\n18D80..18DF2  ; Lo # [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883\n1B000..1B122  ; Lo # [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU\n1B132         ; Lo #       HIRAGANA LETTER SMALL KO\n1B150..1B152  ; Lo #   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO\n1B155         ; Lo #       KATAKANA LETTER SMALL KO\n1B164..1B167  ; Lo #   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N\n1B170..1B2FB  ; Lo # [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB\n1BC00..1BC6A  ; Lo # [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M\n1BC70..1BC7C  ; Lo #  [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK\n1BC80..1BC88  ; Lo #   [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL\n1BC90..1BC99  ; Lo #  [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW\n1DF0A         ; Lo #       LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK\n1E100..1E12C  ; Lo #  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W\n1E14E         ; Lo #       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ\n1E290..1E2AD  ; Lo #  [30] TOTO LETTER PA..TOTO LETTER A\n1E2C0..1E2EB  ; Lo #  [44] WANCHO LETTER AA..WANCHO LETTER YIH\n1E4D0..1E4EA  ; Lo #  [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL\n1E5D0..1E5ED  ; Lo #  [30] OL ONAL LETTER O..OL ONAL LETTER EG\n1E5F0         ; Lo #       OL ONAL SIGN HODDOND\n1E6C0..1E6DE  ; Lo #  [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO\n1E6E0..1E6E2  ; Lo #   [3] TAI YO LETTER AA..TAI YO LETTER UE\n1E6E4..1E6E5  ; Lo #   [2] TAI YO LETTER U..TAI YO LETTER AE\n1E6E7..1E6ED  ; Lo #   [7] TAI YO LETTER O..TAI YO LETTER AUE\n1E6F0..1E6F4  ; Lo #   [5] TAI YO LETTER AN..TAI YO LETTER AP\n1E6FE         ; Lo #       TAI YO SYMBOL MUEANG\n1E7E0..1E7E6  ; Lo #   [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO\n1E7E8..1E7EB  ; Lo #   [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE\n1E7ED..1E7EE  ; Lo #   [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE\n1E7F0..1E7FE  ; Lo #  [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE\n1E800..1E8C4  ; Lo # [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON\n1EE00..1EE03  ; Lo #   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL\n1EE05..1EE1F  ; Lo #  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF\n1EE21..1EE22  ; Lo #   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM\n1EE24         ; Lo #       ARABIC MATHEMATICAL INITIAL HEH\n1EE27         ; Lo #       ARABIC MATHEMATICAL INITIAL HAH\n1EE29..1EE32  ; Lo #  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF\n1EE34..1EE37  ; Lo #   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH\n1EE39         ; Lo #       ARABIC MATHEMATICAL INITIAL DAD\n1EE3B         ; Lo #       ARABIC MATHEMATICAL INITIAL GHAIN\n1EE42         ; Lo #       ARABIC MATHEMATICAL TAILED JEEM\n1EE47         ; Lo #       ARABIC MATHEMATICAL TAILED HAH\n1EE49         ; Lo #       ARABIC MATHEMATICAL TAILED YEH\n1EE4B         ; Lo #       ARABIC MATHEMATICAL TAILED LAM\n1EE4D..1EE4F  ; Lo #   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN\n1EE51..1EE52  ; Lo #   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF\n1EE54         ; Lo #       ARABIC MATHEMATICAL TAILED SHEEN\n1EE57         ; Lo #       ARABIC MATHEMATICAL TAILED KHAH\n1EE59         ; Lo #       ARABIC MATHEMATICAL TAILED DAD\n1EE5B         ; Lo #       ARABIC MATHEMATICAL TAILED GHAIN\n1EE5D         ; Lo #       ARABIC MATHEMATICAL TAILED DOTLESS NOON\n1EE5F         ; Lo #       ARABIC MATHEMATICAL TAILED DOTLESS QAF\n1EE61..1EE62  ; Lo #   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM\n1EE64         ; Lo #       ARABIC MATHEMATICAL STRETCHED HEH\n1EE67..1EE6A  ; Lo #   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF\n1EE6C..1EE72  ; Lo #   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF\n1EE74..1EE77  ; Lo #   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH\n1EE79..1EE7C  ; Lo #   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH\n1EE7E         ; Lo #       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH\n1EE80..1EE89  ; Lo #  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH\n1EE8B..1EE9B  ; Lo #  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN\n1EEA1..1EEA3  ; Lo #   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL\n1EEA5..1EEA9  ; Lo #   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH\n1EEAB..1EEBB  ; Lo #  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN\n20000..2A6DF  ; Lo # [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF\n2A700..2B81D  ; Lo # [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D\n2B820..2CEAD  ; Lo # [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD\n2CEB0..2EBE0  ; Lo # [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0\n2EBF0..2EE5D  ; Lo # [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D\n2F800..2FA1D  ; Lo # [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D\n30000..3134A  ; Lo # [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A\n31350..33479  ; Lo # [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479\n\n# Total code points: 141062\n\n# ================================================\n\n# General_Category=Nonspacing_Mark\n\n0300..036F    ; Mn # [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\n0483..0487    ; Mn #   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\n0591..05BD    ; Mn #  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\n05BF          ; Mn #       HEBREW POINT RAFE\n05C1..05C2    ; Mn #   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n05C4..05C5    ; Mn #   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n05C7          ; Mn #       HEBREW POINT QAMATS QATAN\n0610..061A    ; Mn #  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n064B..065F    ; Mn #  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW\n0670          ; Mn #       ARABIC LETTER SUPERSCRIPT ALEF\n06D6..06DC    ; Mn #   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n06DF..06E4    ; Mn #   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\n06E7..06E8    ; Mn #   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n06EA..06ED    ; Mn #   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\n0711          ; Mn #       SYRIAC LETTER SUPERSCRIPT ALAPH\n0730..074A    ; Mn #  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\n07A6..07B0    ; Mn #  [11] THAANA ABAFILI..THAANA SUKUN\n07EB..07F3    ; Mn #   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\n07FD          ; Mn #       NKO DANTAYALAN\n0816..0819    ; Mn #   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\n081B..0823    ; Mn #   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n0825..0827    ; Mn #   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n0829..082D    ; Mn #   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\n0859..085B    ; Mn #   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\n0897..089F    ; Mn #   [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA\n08CA..08E1    ; Mn #  [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA\n08E3..0902    ; Mn #  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA\n093A          ; Mn #       DEVANAGARI VOWEL SIGN OE\n093C          ; Mn #       DEVANAGARI SIGN NUKTA\n0941..0948    ; Mn #   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n094D          ; Mn #       DEVANAGARI SIGN VIRAMA\n0951..0957    ; Mn #   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE\n0962..0963    ; Mn #   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n0981          ; Mn #       BENGALI SIGN CANDRABINDU\n09BC          ; Mn #       BENGALI SIGN NUKTA\n09C1..09C4    ; Mn #   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n09CD          ; Mn #       BENGALI SIGN VIRAMA\n09E2..09E3    ; Mn #   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n09FE          ; Mn #       BENGALI SANDHI MARK\n0A01..0A02    ; Mn #   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n0A3C          ; Mn #       GURMUKHI SIGN NUKTA\n0A41..0A42    ; Mn #   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n0A47..0A48    ; Mn #   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n0A4B..0A4D    ; Mn #   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\n0A51          ; Mn #       GURMUKHI SIGN UDAAT\n0A70..0A71    ; Mn #   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n0A75          ; Mn #       GURMUKHI SIGN YAKASH\n0A81..0A82    ; Mn #   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n0ABC          ; Mn #       GUJARATI SIGN NUKTA\n0AC1..0AC5    ; Mn #   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n0AC7..0AC8    ; Mn #   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n0ACD          ; Mn #       GUJARATI SIGN VIRAMA\n0AE2..0AE3    ; Mn #   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n0AFA..0AFF    ; Mn #   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\n0B01          ; Mn #       ORIYA SIGN CANDRABINDU\n0B3C          ; Mn #       ORIYA SIGN NUKTA\n0B3F          ; Mn #       ORIYA VOWEL SIGN I\n0B41..0B44    ; Mn #   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n0B4D          ; Mn #       ORIYA SIGN VIRAMA\n0B55..0B56    ; Mn #   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK\n0B62..0B63    ; Mn #   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n0B82          ; Mn #       TAMIL SIGN ANUSVARA\n0BC0          ; Mn #       TAMIL VOWEL SIGN II\n0BCD          ; Mn #       TAMIL SIGN VIRAMA\n0C00          ; Mn #       TELUGU SIGN COMBINING CANDRABINDU ABOVE\n0C04          ; Mn #       TELUGU SIGN COMBINING ANUSVARA ABOVE\n0C3C          ; Mn #       TELUGU SIGN NUKTA\n0C3E..0C40    ; Mn #   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n0C46..0C48    ; Mn #   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n0C4A..0C4D    ; Mn #   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA\n0C55..0C56    ; Mn #   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n0C62..0C63    ; Mn #   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n0C81          ; Mn #       KANNADA SIGN CANDRABINDU\n0CBC          ; Mn #       KANNADA SIGN NUKTA\n0CBF          ; Mn #       KANNADA VOWEL SIGN I\n0CC6          ; Mn #       KANNADA VOWEL SIGN E\n0CCC..0CCD    ; Mn #   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\n0CE2..0CE3    ; Mn #   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n0D00..0D01    ; Mn #   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n0D3B..0D3C    ; Mn #   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n0D41..0D44    ; Mn #   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n0D4D          ; Mn #       MALAYALAM SIGN VIRAMA\n0D62..0D63    ; Mn #   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n0D81          ; Mn #       SINHALA SIGN CANDRABINDU\n0DCA          ; Mn #       SINHALA SIGN AL-LAKUNA\n0DD2..0DD4    ; Mn #   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n0DD6          ; Mn #       SINHALA VOWEL SIGN DIGA PAA-PILLA\n0E31          ; Mn #       THAI CHARACTER MAI HAN-AKAT\n0E34..0E3A    ; Mn #   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n0E47..0E4E    ; Mn #   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\n0EB1          ; Mn #       LAO VOWEL SIGN MAI KAN\n0EB4..0EBC    ; Mn #   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO\n0EC8..0ECE    ; Mn #   [7] LAO TONE MAI EK..LAO YAMAKKAN\n0F18..0F19    ; Mn #   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\n0F35          ; Mn #       TIBETAN MARK NGAS BZUNG NYI ZLA\n0F37          ; Mn #       TIBETAN MARK NGAS BZUNG SGOR RTAGS\n0F39          ; Mn #       TIBETAN MARK TSA -PHRU\n0F71..0F7E    ; Mn #  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n0F80..0F84    ; Mn #   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\n0F86..0F87    ; Mn #   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\n0F8D..0F97    ; Mn #  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n0F99..0FBC    ; Mn #  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n0FC6          ; Mn #       TIBETAN SYMBOL PADMA GDAN\n102D..1030    ; Mn #   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n1032..1037    ; Mn #   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\n1039..103A    ; Mn #   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\n103D..103E    ; Mn #   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n1058..1059    ; Mn #   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n105E..1060    ; Mn #   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n1071..1074    ; Mn #   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n1082          ; Mn #       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n1085..1086    ; Mn #   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n108D          ; Mn #       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n109D          ; Mn #       MYANMAR VOWEL SIGN AITON AI\n135D..135F    ; Mn #   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\n1712..1714    ; Mn #   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\n1732..1733    ; Mn #   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U\n1752..1753    ; Mn #   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n1772..1773    ; Mn #   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n17B4..17B5    ; Mn #   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n17B7..17BD    ; Mn #   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n17C6          ; Mn #       KHMER SIGN NIKAHIT\n17C9..17D3    ; Mn #  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\n17DD          ; Mn #       KHMER SIGN ATTHACAN\n180B..180D    ; Mn #   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n180F          ; Mn #       MONGOLIAN FREE VARIATION SELECTOR FOUR\n1885..1886    ; Mn #   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n18A9          ; Mn #       MONGOLIAN LETTER ALI GALI DAGALGA\n1920..1922    ; Mn #   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n1927..1928    ; Mn #   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n1932          ; Mn #       LIMBU SMALL LETTER ANUSVARA\n1939..193B    ; Mn #   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\n1A17..1A18    ; Mn #   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n1A1B          ; Mn #       BUGINESE VOWEL SIGN AE\n1A56          ; Mn #       TAI THAM CONSONANT SIGN MEDIAL LA\n1A58..1A5E    ; Mn #   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n1A60          ; Mn #       TAI THAM SIGN SAKOT\n1A62          ; Mn #       TAI THAM VOWEL SIGN MAI SAT\n1A65..1A6C    ; Mn #   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n1A73..1A7C    ; Mn #  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\n1A7F          ; Mn #       TAI THAM COMBINING CRYPTOGRAMMIC DOT\n1AB0..1ABD    ; Mn #  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\n1ABF..1ADD    ; Mn #  [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW\n1AE0..1AEB    ; Mn #  [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE\n1B00..1B03    ; Mn #   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n1B34          ; Mn #       BALINESE SIGN REREKAN\n1B36..1B3A    ; Mn #   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n1B3C          ; Mn #       BALINESE VOWEL SIGN LA LENGA\n1B42          ; Mn #       BALINESE VOWEL SIGN PEPET\n1B6B..1B73    ; Mn #   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\n1B80..1B81    ; Mn #   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n1BA2..1BA5    ; Mn #   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n1BA8..1BA9    ; Mn #   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n1BAB..1BAD    ; Mn #   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA\n1BE6          ; Mn #       BATAK SIGN TOMPI\n1BE8..1BE9    ; Mn #   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n1BED          ; Mn #       BATAK VOWEL SIGN KARO O\n1BEF..1BF1    ; Mn #   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n1C2C..1C33    ; Mn #   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n1C36..1C37    ; Mn #   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\n1CD0..1CD2    ; Mn #   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\n1CD4..1CE0    ; Mn #  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n1CE2..1CE8    ; Mn #   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n1CED          ; Mn #       VEDIC SIGN TIRYAK\n1CF4          ; Mn #       VEDIC TONE CANDRA ABOVE\n1CF8..1CF9    ; Mn #   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n1DC0..1DFF    ; Mn #  [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\n20D0..20DC    ; Mn #  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n20E1          ; Mn #       COMBINING LEFT RIGHT ARROW ABOVE\n20E5..20F0    ; Mn #  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\n2CEF..2CF1    ; Mn #   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\n2D7F          ; Mn #       TIFINAGH CONSONANT JOINER\n2DE0..2DFF    ; Mn #  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\n302A..302D    ; Mn #   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n3099..309A    ; Mn #   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\nA66F          ; Mn #       COMBINING CYRILLIC VZMET\nA674..A67D    ; Mn #  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\nA69E..A69F    ; Mn #   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\nA6F0..A6F1    ; Mn #   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\nA802          ; Mn #       SYLOTI NAGRI SIGN DVISVARA\nA806          ; Mn #       SYLOTI NAGRI SIGN HASANTA\nA80B          ; Mn #       SYLOTI NAGRI SIGN ANUSVARA\nA825..A826    ; Mn #   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\nA82C          ; Mn #       SYLOTI NAGRI SIGN ALTERNATE HASANTA\nA8C4..A8C5    ; Mn #   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\nA8E0..A8F1    ; Mn #  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\nA8FF          ; Mn #       DEVANAGARI VOWEL SIGN AY\nA926..A92D    ; Mn #   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\nA947..A951    ; Mn #  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\nA980..A982    ; Mn #   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\nA9B3          ; Mn #       JAVANESE SIGN CECAK TELU\nA9B6..A9B9    ; Mn #   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\nA9BC..A9BD    ; Mn #   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET\nA9E5          ; Mn #       MYANMAR SIGN SHAN SAW\nAA29..AA2E    ; Mn #   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\nAA31..AA32    ; Mn #   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\nAA35..AA36    ; Mn #   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\nAA43          ; Mn #       CHAM CONSONANT SIGN FINAL NG\nAA4C          ; Mn #       CHAM CONSONANT SIGN FINAL M\nAA7C          ; Mn #       MYANMAR SIGN TAI LAING TONE-2\nAAB0          ; Mn #       TAI VIET MAI KANG\nAAB2..AAB4    ; Mn #   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\nAAB7..AAB8    ; Mn #   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\nAABE..AABF    ; Mn #   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\nAAC1          ; Mn #       TAI VIET TONE MAI THO\nAAEC..AAED    ; Mn #   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\nAAF6          ; Mn #       MEETEI MAYEK VIRAMA\nABE5          ; Mn #       MEETEI MAYEK VOWEL SIGN ANAP\nABE8          ; Mn #       MEETEI MAYEK VOWEL SIGN UNAP\nABED          ; Mn #       MEETEI MAYEK APUN IYEK\nFB1E          ; Mn #       HEBREW POINT JUDEO-SPANISH VARIKA\nFE00..FE0F    ; Mn #  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\nFE20..FE2F    ; Mn #  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\n101FD         ; Mn #       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\n102E0         ; Mn #       COPTIC EPACT THOUSANDS MARK\n10376..1037A  ; Mn #   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n10A01..10A03  ; Mn #   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n10A05..10A06  ; Mn #   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n10A0C..10A0F  ; Mn #   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n10A38..10A3A  ; Mn #   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\n10A3F         ; Mn #       KHAROSHTHI VIRAMA\n10AE5..10AE6  ; Mn #   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\n10D24..10D27  ; Mn #   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n10D69..10D6D  ; Mn #   [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK\n10EAB..10EAC  ; Mn #   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK\n10EFA..10EFF  ; Mn #   [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA\n10F46..10F50  ; Mn #  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW\n10F82..10F85  ; Mn #   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW\n11001         ; Mn #       BRAHMI SIGN ANUSVARA\n11038..11046  ; Mn #  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\n11070         ; Mn #       BRAHMI SIGN OLD TAMIL VIRAMA\n11073..11074  ; Mn #   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O\n1107F..11081  ; Mn #   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA\n110B3..110B6  ; Mn #   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n110B9..110BA  ; Mn #   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\n110C2         ; Mn #       KAITHI VOWEL SIGN VOCALIC R\n11100..11102  ; Mn #   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n11127..1112B  ; Mn #   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n1112D..11134  ; Mn #   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA\n11173         ; Mn #       MAHAJANI SIGN NUKTA\n11180..11181  ; Mn #   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n111B6..111BE  ; Mn #   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n111C9..111CC  ; Mn #   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK\n111CF         ; Mn #       SHARADA SIGN INVERTED CANDRABINDU\n1122F..11231  ; Mn #   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n11234         ; Mn #       KHOJKI SIGN ANUSVARA\n11236..11237  ; Mn #   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\n1123E         ; Mn #       KHOJKI SIGN SUKUN\n11241         ; Mn #       KHOJKI VOWEL SIGN VOCALIC R\n112DF         ; Mn #       KHUDAWADI SIGN ANUSVARA\n112E3..112EA  ; Mn #   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\n11300..11301  ; Mn #   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n1133B..1133C  ; Mn #   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA\n11340         ; Mn #       GRANTHA VOWEL SIGN II\n11366..1136C  ; Mn #   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\n11370..11374  ; Mn #   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\n113BB..113C0  ; Mn #   [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL\n113CE         ; Mn #       TULU-TIGALARI SIGN VIRAMA\n113D0         ; Mn #       TULU-TIGALARI CONJOINER\n113D2         ; Mn #       TULU-TIGALARI GEMINATION MARK\n113E1..113E2  ; Mn #   [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA\n11438..1143F  ; Mn #   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n11442..11444  ; Mn #   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\n11446         ; Mn #       NEWA SIGN NUKTA\n1145E         ; Mn #       NEWA SANDHI MARK\n114B3..114B8  ; Mn #   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n114BA         ; Mn #       TIRHUTA VOWEL SIGN SHORT E\n114BF..114C0  ; Mn #   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n114C2..114C3  ; Mn #   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\n115B2..115B5  ; Mn #   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n115BC..115BD  ; Mn #   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n115BF..115C0  ; Mn #   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\n115DC..115DD  ; Mn #   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n11633..1163A  ; Mn #   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n1163D         ; Mn #       MODI SIGN ANUSVARA\n1163F..11640  ; Mn #   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\n116AB         ; Mn #       TAKRI SIGN ANUSVARA\n116AD         ; Mn #       TAKRI VOWEL SIGN AA\n116B0..116B5  ; Mn #   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n116B7         ; Mn #       TAKRI SIGN NUKTA\n1171D         ; Mn #       AHOM CONSONANT SIGN MEDIAL LA\n1171F         ; Mn #       AHOM CONSONANT SIGN MEDIAL LIGATING RA\n11722..11725  ; Mn #   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n11727..1172B  ; Mn #   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\n1182F..11837  ; Mn #   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA\n11839..1183A  ; Mn #   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA\n1193B..1193C  ; Mn #   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU\n1193E         ; Mn #       DIVES AKURU VIRAMA\n11943         ; Mn #       DIVES AKURU SIGN NUKTA\n119D4..119D7  ; Mn #   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR\n119DA..119DB  ; Mn #   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI\n119E0         ; Mn #       NANDINAGARI SIGN VIRAMA\n11A01..11A0A  ; Mn #  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n11A33..11A38  ; Mn #   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\n11A3B..11A3E  ; Mn #   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n11A47         ; Mn #       ZANABAZAR SQUARE SUBJOINER\n11A51..11A56  ; Mn #   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n11A59..11A5B  ; Mn #   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n11A8A..11A96  ; Mn #  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n11A98..11A99  ; Mn #   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER\n11B60         ; Mn #       SHARADA VOWEL SIGN OE\n11B62..11B64  ; Mn #   [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E\n11B66         ; Mn #       SHARADA VOWEL SIGN CANDRA E\n11C30..11C36  ; Mn #   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n11C38..11C3D  ; Mn #   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n11C3F         ; Mn #       BHAIKSUKI SIGN VIRAMA\n11C92..11CA7  ; Mn #  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n11CAA..11CB0  ; Mn #   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n11CB2..11CB3  ; Mn #   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n11CB5..11CB6  ; Mn #   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n11D31..11D36  ; Mn #   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n11D3A         ; Mn #       MASARAM GONDI VOWEL SIGN E\n11D3C..11D3D  ; Mn #   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n11D3F..11D45  ; Mn #   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\n11D47         ; Mn #       MASARAM GONDI RA-KARA\n11D90..11D91  ; Mn #   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI\n11D95         ; Mn #       GUNJALA GONDI SIGN ANUSVARA\n11D97         ; Mn #       GUNJALA GONDI VIRAMA\n11EF3..11EF4  ; Mn #   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U\n11F00..11F01  ; Mn #   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA\n11F36..11F3A  ; Mn #   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R\n11F40         ; Mn #       KAWI VOWEL SIGN EU\n11F42         ; Mn #       KAWI CONJOINER\n11F5A         ; Mn #       KAWI SIGN NUKTA\n13440         ; Mn #       EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY\n13447..13455  ; Mn #  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED\n1611E..16129  ; Mn #  [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK\n1612D..1612F  ; Mn #   [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA\n16AF0..16AF4  ; Mn #   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\n16B30..16B36  ; Mn #   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\n16F4F         ; Mn #       MIAO SIGN CONSONANT MODIFIER BAR\n16F8F..16F92  ; Mn #   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n16FE4         ; Mn #       KHITAN SMALL SCRIPT FILLER\n1BC9D..1BC9E  ; Mn #   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\n1CF00..1CF2D  ; Mn #  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT\n1CF30..1CF46  ; Mn #  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG\n1D167..1D169  ; Mn #   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\n1D17B..1D182  ; Mn #   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\n1D185..1D18B  ; Mn #   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\n1D1AA..1D1AD  ; Mn #   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\n1D242..1D244  ; Mn #   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\n1DA00..1DA36  ; Mn #  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\n1DA3B..1DA6C  ; Mn #  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\n1DA75         ; Mn #       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\n1DA84         ; Mn #       SIGNWRITING LOCATION HEAD NECK\n1DA9B..1DA9F  ; Mn #   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\n1DAA1..1DAAF  ; Mn #  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\n1E000..1E006  ; Mn #   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n1E008..1E018  ; Mn #  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n1E01B..1E021  ; Mn #   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n1E023..1E024  ; Mn #   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n1E026..1E02A  ; Mn #   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n1E08F         ; Mn #       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n1E130..1E136  ; Mn #   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D\n1E2AE         ; Mn #       TOTO SIGN RISING TONE\n1E2EC..1E2EF  ; Mn #   [4] WANCHO TONE TUP..WANCHO TONE KOINI\n1E4EC..1E4EF  ; Mn #   [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH\n1E5EE..1E5EF  ; Mn #   [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR\n1E6E3         ; Mn #       TAI YO SIGN UE\n1E6E6         ; Mn #       TAI YO SIGN AU\n1E6EE..1E6EF  ; Mn #   [2] TAI YO SIGN AY..TAI YO SIGN ANG\n1E6F5         ; Mn #       TAI YO SIGN OM\n1E8D0..1E8D6  ; Mn #   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\n1E944..1E94A  ; Mn #   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\nE0100..E01EF  ; Mn # [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\n\n# Total code points: 2059\n\n# ================================================\n\n# General_Category=Enclosing_Mark\n\n0488..0489    ; Me #   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN\n1ABE          ; Me #       COMBINING PARENTHESES OVERLAY\n20DD..20E0    ; Me #   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH\n20E2..20E4    ; Me #   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE\nA670..A672    ; Me #   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN\n\n# Total code points: 13\n\n# ================================================\n\n# General_Category=Spacing_Mark\n\n0903          ; Mc #       DEVANAGARI SIGN VISARGA\n093B          ; Mc #       DEVANAGARI VOWEL SIGN OOE\n093E..0940    ; Mc #   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\n0949..094C    ; Mc #   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\n094E..094F    ; Mc #   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\n0982..0983    ; Mc #   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\n09BE..09C0    ; Mc #   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II\n09C7..09C8    ; Mc #   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\n09CB..09CC    ; Mc #   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\n09D7          ; Mc #       BENGALI AU LENGTH MARK\n0A03          ; Mc #       GURMUKHI SIGN VISARGA\n0A3E..0A40    ; Mc #   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\n0A83          ; Mc #       GUJARATI SIGN VISARGA\n0ABE..0AC0    ; Mc #   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\n0AC9          ; Mc #       GUJARATI VOWEL SIGN CANDRA O\n0ACB..0ACC    ; Mc #   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\n0B02..0B03    ; Mc #   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\n0B3E          ; Mc #       ORIYA VOWEL SIGN AA\n0B40          ; Mc #       ORIYA VOWEL SIGN II\n0B47..0B48    ; Mc #   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\n0B4B..0B4C    ; Mc #   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\n0B57          ; Mc #       ORIYA AU LENGTH MARK\n0BBE..0BBF    ; Mc #   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I\n0BC1..0BC2    ; Mc #   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\n0BC6..0BC8    ; Mc #   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\n0BCA..0BCC    ; Mc #   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\n0BD7          ; Mc #       TAMIL AU LENGTH MARK\n0C01..0C03    ; Mc #   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\n0C41..0C44    ; Mc #   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\n0C82..0C83    ; Mc #   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\n0CBE          ; Mc #       KANNADA VOWEL SIGN AA\n0CC0..0CC4    ; Mc #   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR\n0CC7..0CC8    ; Mc #   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n0CCA..0CCB    ; Mc #   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n0CD5..0CD6    ; Mc #   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n0CF3          ; Mc #       KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT\n0D02..0D03    ; Mc #   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\n0D3E..0D40    ; Mc #   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II\n0D46..0D48    ; Mc #   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\n0D4A..0D4C    ; Mc #   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\n0D57          ; Mc #       MALAYALAM AU LENGTH MARK\n0D82..0D83    ; Mc #   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\n0DCF..0DD1    ; Mc #   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\n0DD8..0DDF    ; Mc #   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA\n0DF2..0DF3    ; Mc #   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\n0F3E..0F3F    ; Mc #   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES\n0F7F          ; Mc #       TIBETAN SIGN RNAM BCAD\n102B..102C    ; Mc #   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA\n1031          ; Mc #       MYANMAR VOWEL SIGN E\n1038          ; Mc #       MYANMAR SIGN VISARGA\n103B..103C    ; Mc #   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\n1056..1057    ; Mc #   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\n1062..1064    ; Mc #   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO\n1067..106D    ; Mc #   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5\n1083..1084    ; Mc #   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E\n1087..108C    ; Mc #   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3\n108F          ; Mc #       MYANMAR SIGN RUMAI PALAUNG TONE-5\n109A..109C    ; Mc #   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A\n1715          ; Mc #       TAGALOG SIGN PAMUDPOD\n1734          ; Mc #       HANUNOO SIGN PAMUDPOD\n17B6          ; Mc #       KHMER VOWEL SIGN AA\n17BE..17C5    ; Mc #   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\n17C7..17C8    ; Mc #   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\n1923..1926    ; Mc #   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\n1929..192B    ; Mc #   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\n1930..1931    ; Mc #   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\n1933..1938    ; Mc #   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\n1A19..1A1A    ; Mc #   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\n1A55          ; Mc #       TAI THAM CONSONANT SIGN MEDIAL RA\n1A57          ; Mc #       TAI THAM CONSONANT SIGN LA TANG LAI\n1A61          ; Mc #       TAI THAM VOWEL SIGN A\n1A63..1A64    ; Mc #   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA\n1A6D..1A72    ; Mc #   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\n1B04          ; Mc #       BALINESE SIGN BISAH\n1B35          ; Mc #       BALINESE VOWEL SIGN TEDUNG\n1B3B          ; Mc #       BALINESE VOWEL SIGN RA REPA TEDUNG\n1B3D..1B41    ; Mc #   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG\n1B43..1B44    ; Mc #   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG\n1B82          ; Mc #       SUNDANESE SIGN PANGWISAD\n1BA1          ; Mc #       SUNDANESE CONSONANT SIGN PAMINGKAL\n1BA6..1BA7    ; Mc #   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\n1BAA          ; Mc #       SUNDANESE SIGN PAMAAEH\n1BE7          ; Mc #       BATAK VOWEL SIGN E\n1BEA..1BEC    ; Mc #   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\n1BEE          ; Mc #       BATAK VOWEL SIGN U\n1BF2..1BF3    ; Mc #   [2] BATAK PANGOLAT..BATAK PANONGONAN\n1C24..1C2B    ; Mc #   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\n1C34..1C35    ; Mc #   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\n1CE1          ; Mc #       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\n1CF7          ; Mc #       VEDIC SIGN ATIKRAMA\n302E..302F    ; Mc #   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\nA823..A824    ; Mc #   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\nA827          ; Mc #       SYLOTI NAGRI VOWEL SIGN OO\nA880..A881    ; Mc #   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\nA8B4..A8C3    ; Mc #  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\nA952..A953    ; Mc #   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA\nA983          ; Mc #       JAVANESE SIGN WIGNYAN\nA9B4..A9B5    ; Mc #   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\nA9BA..A9BB    ; Mc #   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\nA9BE..A9C0    ; Mc #   [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON\nAA2F..AA30    ; Mc #   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\nAA33..AA34    ; Mc #   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\nAA4D          ; Mc #       CHAM CONSONANT SIGN FINAL H\nAA7B          ; Mc #       MYANMAR SIGN PAO KAREN TONE\nAA7D          ; Mc #       MYANMAR SIGN TAI LAING TONE-5\nAAEB          ; Mc #       MEETEI MAYEK VOWEL SIGN II\nAAEE..AAEF    ; Mc #   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\nAAF5          ; Mc #       MEETEI MAYEK VOWEL SIGN VISARGA\nABE3..ABE4    ; Mc #   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\nABE6..ABE7    ; Mc #   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\nABE9..ABEA    ; Mc #   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\nABEC          ; Mc #       MEETEI MAYEK LUM IYEK\n11000         ; Mc #       BRAHMI SIGN CANDRABINDU\n11002         ; Mc #       BRAHMI SIGN VISARGA\n11082         ; Mc #       KAITHI SIGN VISARGA\n110B0..110B2  ; Mc #   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\n110B7..110B8  ; Mc #   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\n1112C         ; Mc #       CHAKMA VOWEL SIGN E\n11145..11146  ; Mc #   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI\n11182         ; Mc #       SHARADA SIGN VISARGA\n111B3..111B5  ; Mc #   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\n111BF..111C0  ; Mc #   [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA\n111CE         ; Mc #       SHARADA VOWEL SIGN PRISHTHAMATRA E\n1122C..1122E  ; Mc #   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\n11232..11233  ; Mc #   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\n11235         ; Mc #       KHOJKI SIGN VIRAMA\n112E0..112E2  ; Mc #   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\n11302..11303  ; Mc #   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\n1133E..1133F  ; Mc #   [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I\n11341..11344  ; Mc #   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\n11347..11348  ; Mc #   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\n1134B..1134D  ; Mc #   [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA\n11357         ; Mc #       GRANTHA AU LENGTH MARK\n11362..11363  ; Mc #   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\n113B8..113BA  ; Mc #   [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II\n113C2         ; Mc #       TULU-TIGALARI VOWEL SIGN EE\n113C5         ; Mc #       TULU-TIGALARI VOWEL SIGN AI\n113C7..113CA  ; Mc #   [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA\n113CC..113CD  ; Mc #   [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA\n113CF         ; Mc #       TULU-TIGALARI SIGN LOOPED VIRAMA\n11435..11437  ; Mc #   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\n11440..11441  ; Mc #   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\n11445         ; Mc #       NEWA SIGN VISARGA\n114B0..114B2  ; Mc #   [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II\n114B9         ; Mc #       TIRHUTA VOWEL SIGN E\n114BB..114BE  ; Mc #   [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU\n114C1         ; Mc #       TIRHUTA SIGN VISARGA\n115AF..115B1  ; Mc #   [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II\n115B8..115BB  ; Mc #   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\n115BE         ; Mc #       SIDDHAM SIGN VISARGA\n11630..11632  ; Mc #   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\n1163B..1163C  ; Mc #   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\n1163E         ; Mc #       MODI SIGN VISARGA\n116AC         ; Mc #       TAKRI SIGN VISARGA\n116AE..116AF  ; Mc #   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\n116B6         ; Mc #       TAKRI SIGN VIRAMA\n1171E         ; Mc #       AHOM CONSONANT SIGN MEDIAL RA\n11720..11721  ; Mc #   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA\n11726         ; Mc #       AHOM VOWEL SIGN E\n1182C..1182E  ; Mc #   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II\n11838         ; Mc #       DOGRA SIGN VISARGA\n11930..11935  ; Mc #   [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E\n11937..11938  ; Mc #   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O\n1193D         ; Mc #       DIVES AKURU SIGN HALANTA\n11940         ; Mc #       DIVES AKURU MEDIAL YA\n11942         ; Mc #       DIVES AKURU MEDIAL RA\n119D1..119D3  ; Mc #   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II\n119DC..119DF  ; Mc #   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA\n119E4         ; Mc #       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E\n11A39         ; Mc #       ZANABAZAR SQUARE SIGN VISARGA\n11A57..11A58  ; Mc #   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\n11A97         ; Mc #       SOYOMBO SIGN VISARGA\n11B61         ; Mc #       SHARADA VOWEL SIGN OOE\n11B65         ; Mc #       SHARADA VOWEL SIGN SHORT O\n11B67         ; Mc #       SHARADA VOWEL SIGN CANDRA O\n11C2F         ; Mc #       BHAIKSUKI VOWEL SIGN AA\n11C3E         ; Mc #       BHAIKSUKI SIGN VISARGA\n11CA9         ; Mc #       MARCHEN SUBJOINED LETTER YA\n11CB1         ; Mc #       MARCHEN VOWEL SIGN I\n11CB4         ; Mc #       MARCHEN VOWEL SIGN O\n11D8A..11D8E  ; Mc #   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU\n11D93..11D94  ; Mc #   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU\n11D96         ; Mc #       GUNJALA GONDI SIGN VISARGA\n11EF5..11EF6  ; Mc #   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O\n11F03         ; Mc #       KAWI SIGN VISARGA\n11F34..11F35  ; Mc #   [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA\n11F3E..11F3F  ; Mc #   [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI\n11F41         ; Mc #       KAWI SIGN KILLER\n1612A..1612C  ; Mc #   [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA\n16F51..16F87  ; Mc #  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI\n16FF0..16FF1  ; Mc #   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY\n1D165..1D166  ; Mc #   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\n1D16D..1D172  ; Mc #   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5\n\n# Total code points: 471\n\n# ================================================\n\n# General_Category=Decimal_Number\n\n0030..0039    ; Nd #  [10] DIGIT ZERO..DIGIT NINE\n0660..0669    ; Nd #  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE\n06F0..06F9    ; Nd #  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE\n07C0..07C9    ; Nd #  [10] NKO DIGIT ZERO..NKO DIGIT NINE\n0966..096F    ; Nd #  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE\n09E6..09EF    ; Nd #  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE\n0A66..0A6F    ; Nd #  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE\n0AE6..0AEF    ; Nd #  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE\n0B66..0B6F    ; Nd #  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE\n0BE6..0BEF    ; Nd #  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE\n0C66..0C6F    ; Nd #  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE\n0CE6..0CEF    ; Nd #  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE\n0D66..0D6F    ; Nd #  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE\n0DE6..0DEF    ; Nd #  [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE\n0E50..0E59    ; Nd #  [10] THAI DIGIT ZERO..THAI DIGIT NINE\n0ED0..0ED9    ; Nd #  [10] LAO DIGIT ZERO..LAO DIGIT NINE\n0F20..0F29    ; Nd #  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE\n1040..1049    ; Nd #  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE\n1090..1099    ; Nd #  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE\n17E0..17E9    ; Nd #  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE\n1810..1819    ; Nd #  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE\n1946..194F    ; Nd #  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE\n19D0..19D9    ; Nd #  [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE\n1A80..1A89    ; Nd #  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE\n1A90..1A99    ; Nd #  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE\n1B50..1B59    ; Nd #  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE\n1BB0..1BB9    ; Nd #  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE\n1C40..1C49    ; Nd #  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE\n1C50..1C59    ; Nd #  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE\nA620..A629    ; Nd #  [10] VAI DIGIT ZERO..VAI DIGIT NINE\nA8D0..A8D9    ; Nd #  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE\nA900..A909    ; Nd #  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE\nA9D0..A9D9    ; Nd #  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE\nA9F0..A9F9    ; Nd #  [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE\nAA50..AA59    ; Nd #  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE\nABF0..ABF9    ; Nd #  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE\nFF10..FF19    ; Nd #  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE\n104A0..104A9  ; Nd #  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE\n10D30..10D39  ; Nd #  [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE\n10D40..10D49  ; Nd #  [10] GARAY DIGIT ZERO..GARAY DIGIT NINE\n11066..1106F  ; Nd #  [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE\n110F0..110F9  ; Nd #  [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE\n11136..1113F  ; Nd #  [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE\n111D0..111D9  ; Nd #  [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE\n112F0..112F9  ; Nd #  [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE\n11450..11459  ; Nd #  [10] NEWA DIGIT ZERO..NEWA DIGIT NINE\n114D0..114D9  ; Nd #  [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE\n11650..11659  ; Nd #  [10] MODI DIGIT ZERO..MODI DIGIT NINE\n116C0..116C9  ; Nd #  [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE\n116D0..116E3  ; Nd #  [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE\n11730..11739  ; Nd #  [10] AHOM DIGIT ZERO..AHOM DIGIT NINE\n118E0..118E9  ; Nd #  [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE\n11950..11959  ; Nd #  [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE\n11BF0..11BF9  ; Nd #  [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE\n11C50..11C59  ; Nd #  [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE\n11D50..11D59  ; Nd #  [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE\n11DA0..11DA9  ; Nd #  [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE\n11DE0..11DE9  ; Nd #  [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE\n11F50..11F59  ; Nd #  [10] KAWI DIGIT ZERO..KAWI DIGIT NINE\n16130..16139  ; Nd #  [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE\n16A60..16A69  ; Nd #  [10] MRO DIGIT ZERO..MRO DIGIT NINE\n16AC0..16AC9  ; Nd #  [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE\n16B50..16B59  ; Nd #  [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE\n16D70..16D79  ; Nd #  [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE\n1CCF0..1CCF9  ; Nd #  [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE\n1D7CE..1D7FF  ; Nd #  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE\n1E140..1E149  ; Nd #  [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE\n1E2F0..1E2F9  ; Nd #  [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE\n1E4F0..1E4F9  ; Nd #  [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE\n1E5F1..1E5FA  ; Nd #  [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE\n1E950..1E959  ; Nd #  [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE\n1FBF0..1FBF9  ; Nd #  [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE\n\n# Total code points: 770\n\n# ================================================\n\n# General_Category=Letter_Number\n\n16EE..16F0    ; Nl #   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL\n2160..2182    ; Nl #  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND\n2185..2188    ; Nl #   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND\n3007          ; Nl #       IDEOGRAPHIC NUMBER ZERO\n3021..3029    ; Nl #   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE\n3038..303A    ; Nl #   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY\nA6E6..A6EF    ; Nl #  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM\n10140..10174  ; Nl #  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS\n10341         ; Nl #       GOTHIC LETTER NINETY\n1034A         ; Nl #       GOTHIC LETTER NINE HUNDRED\n103D1..103D5  ; Nl #   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED\n12400..1246E  ; Nl # [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM\n16FF4..16FF6  ; Nl #   [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS\n\n# Total code points: 239\n\n# ================================================\n\n# General_Category=Other_Number\n\n00B2..00B3    ; No #   [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE\n00B9          ; No #       SUPERSCRIPT ONE\n00BC..00BE    ; No #   [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS\n09F4..09F9    ; No #   [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN\n0B72..0B77    ; No #   [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS\n0BF0..0BF2    ; No #   [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND\n0C78..0C7E    ; No #   [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR\n0D58..0D5E    ; No #   [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH\n0D70..0D78    ; No #   [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS\n0F2A..0F33    ; No #  [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO\n1369..137C    ; No #  [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND\n17F0..17F9    ; No #  [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON\n19DA          ; No #       NEW TAI LUE THAM DIGIT ONE\n2070          ; No #       SUPERSCRIPT ZERO\n2074..2079    ; No #   [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE\n2080..2089    ; No #  [10] SUBSCRIPT ZERO..SUBSCRIPT NINE\n2150..215F    ; No #  [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE\n2189          ; No #       VULGAR FRACTION ZERO THIRDS\n2460..249B    ; No #  [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP\n24EA..24FF    ; No #  [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO\n2776..2793    ; No #  [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN\n2CFD          ; No #       COPTIC FRACTION ONE HALF\n3192..3195    ; No #   [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK\n3220..3229    ; No #  [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN\n3248..324F    ; No #   [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE\n3251..325F    ; No #  [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE\n3280..3289    ; No #  [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN\n32B1..32BF    ; No #  [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY\nA830..A835    ; No #   [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS\n10107..10133  ; No #  [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND\n10175..10178  ; No #   [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN\n1018A..1018B  ; No #   [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN\n102E1..102FB  ; No #  [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED\n10320..10323  ; No #   [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY\n10858..1085F  ; No #   [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND\n10879..1087F  ; No #   [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY\n108A7..108AF  ; No #   [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED\n108FB..108FF  ; No #   [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED\n10916..1091B  ; No #   [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE\n109BC..109BD  ; No #   [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF\n109C0..109CF  ; No #  [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY\n109D2..109FF  ; No #  [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS\n10A40..10A48  ; No #   [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF\n10A7D..10A7E  ; No #   [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY\n10A9D..10A9F  ; No #   [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY\n10AEB..10AEF  ; No #   [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED\n10B58..10B5F  ; No #   [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND\n10B78..10B7F  ; No #   [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND\n10BA9..10BAF  ; No #   [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED\n10CFA..10CFF  ; No #   [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND\n10E60..10E7E  ; No #  [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS\n10F1D..10F26  ; No #  [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF\n10F51..10F54  ; No #   [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED\n10FC5..10FCB  ; No #   [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED\n11052..11065  ; No #  [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND\n111E1..111F4  ; No #  [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND\n1173A..1173B  ; No #   [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY\n118EA..118F2  ; No #   [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY\n11C5A..11C6C  ; No #  [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK\n11FC0..11FD4  ; No #  [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH\n16B5B..16B61  ; No #   [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS\n16E80..16E96  ; No #  [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM\n1D2C0..1D2D3  ; No #  [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN\n1D2E0..1D2F3  ; No #  [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN\n1D360..1D378  ; No #  [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE\n1E8C7..1E8CF  ; No #   [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE\n1EC71..1ECAB  ; No #  [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE\n1ECAD..1ECAF  ; No #   [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS\n1ECB1..1ECB4  ; No #   [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK\n1ED01..1ED2D  ; No #  [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND\n1ED2F..1ED3D  ; No #  [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH\n1F100..1F10C  ; No #  [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO\n\n# Total code points: 915\n\n# ================================================\n\n# General_Category=Space_Separator\n\n0020          ; Zs #       SPACE\n00A0          ; Zs #       NO-BREAK SPACE\n1680          ; Zs #       OGHAM SPACE MARK\n2000..200A    ; Zs #  [11] EN QUAD..HAIR SPACE\n202F          ; Zs #       NARROW NO-BREAK SPACE\n205F          ; Zs #       MEDIUM MATHEMATICAL SPACE\n3000          ; Zs #       IDEOGRAPHIC SPACE\n\n# Total code points: 17\n\n# ================================================\n\n# General_Category=Line_Separator\n\n2028          ; Zl #       LINE SEPARATOR\n\n# Total code points: 1\n\n# ================================================\n\n# General_Category=Paragraph_Separator\n\n2029          ; Zp #       PARAGRAPH SEPARATOR\n\n# Total code points: 1\n\n# ================================================\n\n# General_Category=Control\n\n0000..001F    ; Cc #  [32] <control-0000>..<control-001F>\n007F..009F    ; Cc #  [33] <control-007F>..<control-009F>\n\n# Total code points: 65\n\n# ================================================\n\n# General_Category=Format\n\n00AD          ; Cf #       SOFT HYPHEN\n0600..0605    ; Cf #   [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE\n061C          ; Cf #       ARABIC LETTER MARK\n06DD          ; Cf #       ARABIC END OF AYAH\n070F          ; Cf #       SYRIAC ABBREVIATION MARK\n0890..0891    ; Cf #   [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE\n08E2          ; Cf #       ARABIC DISPUTED END OF AYAH\n180E          ; Cf #       MONGOLIAN VOWEL SEPARATOR\n200B..200F    ; Cf #   [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK\n202A..202E    ; Cf #   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE\n2060..2064    ; Cf #   [5] WORD JOINER..INVISIBLE PLUS\n2066..206F    ; Cf #  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES\nFEFF          ; Cf #       ZERO WIDTH NO-BREAK SPACE\nFFF9..FFFB    ; Cf #   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR\n110BD         ; Cf #       KAITHI NUMBER SIGN\n110CD         ; Cf #       KAITHI NUMBER SIGN ABOVE\n13430..1343F  ; Cf #  [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE\n1BCA0..1BCA3  ; Cf #   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP\n1D173..1D17A  ; Cf #   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE\nE0001         ; Cf #       LANGUAGE TAG\nE0020..E007F  ; Cf #  [96] TAG SPACE..CANCEL TAG\n\n# Total code points: 170\n\n# ================================================\n\n# General_Category=Private_Use\n\nE000..F8FF    ; Co # [6400] <private-use-E000>..<private-use-F8FF>\nF0000..FFFFD  ; Co # [65534] <private-use-F0000>..<private-use-FFFFD>\n100000..10FFFD; Co # [65534] <private-use-100000>..<private-use-10FFFD>\n\n# Total code points: 137468\n\n# ================================================\n\n# General_Category=Surrogate\n\nD800..DFFF    ; Cs # [2048] <surrogate-D800>..<surrogate-DFFF>\n\n# Total code points: 2048\n\n# ================================================\n\n# General_Category=Dash_Punctuation\n\n002D          ; Pd #       HYPHEN-MINUS\n058A          ; Pd #       ARMENIAN HYPHEN\n05BE          ; Pd #       HEBREW PUNCTUATION MAQAF\n1400          ; Pd #       CANADIAN SYLLABICS HYPHEN\n1806          ; Pd #       MONGOLIAN TODO SOFT HYPHEN\n2010..2015    ; Pd #   [6] HYPHEN..HORIZONTAL BAR\n2E17          ; Pd #       DOUBLE OBLIQUE HYPHEN\n2E1A          ; Pd #       HYPHEN WITH DIAERESIS\n2E3A..2E3B    ; Pd #   [2] TWO-EM DASH..THREE-EM DASH\n2E40          ; Pd #       DOUBLE HYPHEN\n2E5D          ; Pd #       OBLIQUE HYPHEN\n301C          ; Pd #       WAVE DASH\n3030          ; Pd #       WAVY DASH\n30A0          ; Pd #       KATAKANA-HIRAGANA DOUBLE HYPHEN\nFE31..FE32    ; Pd #   [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH\nFE58          ; Pd #       SMALL EM DASH\nFE63          ; Pd #       SMALL HYPHEN-MINUS\nFF0D          ; Pd #       FULLWIDTH HYPHEN-MINUS\n10D6E         ; Pd #       GARAY HYPHEN\n10EAD         ; Pd #       YEZIDI HYPHENATION MARK\n\n# Total code points: 27\n\n# ================================================\n\n# General_Category=Open_Punctuation\n\n0028          ; Ps #       LEFT PARENTHESIS\n005B          ; Ps #       LEFT SQUARE BRACKET\n007B          ; Ps #       LEFT CURLY BRACKET\n0F3A          ; Ps #       TIBETAN MARK GUG RTAGS GYON\n0F3C          ; Ps #       TIBETAN MARK ANG KHANG GYON\n169B          ; Ps #       OGHAM FEATHER MARK\n201A          ; Ps #       SINGLE LOW-9 QUOTATION MARK\n201E          ; Ps #       DOUBLE LOW-9 QUOTATION MARK\n2045          ; Ps #       LEFT SQUARE BRACKET WITH QUILL\n207D          ; Ps #       SUPERSCRIPT LEFT PARENTHESIS\n208D          ; Ps #       SUBSCRIPT LEFT PARENTHESIS\n2308          ; Ps #       LEFT CEILING\n230A          ; Ps #       LEFT FLOOR\n2329          ; Ps #       LEFT-POINTING ANGLE BRACKET\n2768          ; Ps #       MEDIUM LEFT PARENTHESIS ORNAMENT\n276A          ; Ps #       MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT\n276C          ; Ps #       MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT\n276E          ; Ps #       HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT\n2770          ; Ps #       HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT\n2772          ; Ps #       LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT\n2774          ; Ps #       MEDIUM LEFT CURLY BRACKET ORNAMENT\n27C5          ; Ps #       LEFT S-SHAPED BAG DELIMITER\n27E6          ; Ps #       MATHEMATICAL LEFT WHITE SQUARE BRACKET\n27E8          ; Ps #       MATHEMATICAL LEFT ANGLE BRACKET\n27EA          ; Ps #       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET\n27EC          ; Ps #       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET\n27EE          ; Ps #       MATHEMATICAL LEFT FLATTENED PARENTHESIS\n2983          ; Ps #       LEFT WHITE CURLY BRACKET\n2985          ; Ps #       LEFT WHITE PARENTHESIS\n2987          ; Ps #       Z NOTATION LEFT IMAGE BRACKET\n2989          ; Ps #       Z NOTATION LEFT BINDING BRACKET\n298B          ; Ps #       LEFT SQUARE BRACKET WITH UNDERBAR\n298D          ; Ps #       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER\n298F          ; Ps #       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n2991          ; Ps #       LEFT ANGLE BRACKET WITH DOT\n2993          ; Ps #       LEFT ARC LESS-THAN BRACKET\n2995          ; Ps #       DOUBLE LEFT ARC GREATER-THAN BRACKET\n2997          ; Ps #       LEFT BLACK TORTOISE SHELL BRACKET\n29D8          ; Ps #       LEFT WIGGLY FENCE\n29DA          ; Ps #       LEFT DOUBLE WIGGLY FENCE\n29FC          ; Ps #       LEFT-POINTING CURVED ANGLE BRACKET\n2E22          ; Ps #       TOP LEFT HALF BRACKET\n2E24          ; Ps #       BOTTOM LEFT HALF BRACKET\n2E26          ; Ps #       LEFT SIDEWAYS U BRACKET\n2E28          ; Ps #       LEFT DOUBLE PARENTHESIS\n2E42          ; Ps #       DOUBLE LOW-REVERSED-9 QUOTATION MARK\n2E55          ; Ps #       LEFT SQUARE BRACKET WITH STROKE\n2E57          ; Ps #       LEFT SQUARE BRACKET WITH DOUBLE STROKE\n2E59          ; Ps #       TOP HALF LEFT PARENTHESIS\n2E5B          ; Ps #       BOTTOM HALF LEFT PARENTHESIS\n3008          ; Ps #       LEFT ANGLE BRACKET\n300A          ; Ps #       LEFT DOUBLE ANGLE BRACKET\n300C          ; Ps #       LEFT CORNER BRACKET\n300E          ; Ps #       LEFT WHITE CORNER BRACKET\n3010          ; Ps #       LEFT BLACK LENTICULAR BRACKET\n3014          ; Ps #       LEFT TORTOISE SHELL BRACKET\n3016          ; Ps #       LEFT WHITE LENTICULAR BRACKET\n3018          ; Ps #       LEFT WHITE TORTOISE SHELL BRACKET\n301A          ; Ps #       LEFT WHITE SQUARE BRACKET\n301D          ; Ps #       REVERSED DOUBLE PRIME QUOTATION MARK\nFD3F          ; Ps #       ORNATE RIGHT PARENTHESIS\nFE17          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET\nFE35          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS\nFE37          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET\nFE39          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET\nFE3B          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET\nFE3D          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET\nFE3F          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET\nFE41          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET\nFE43          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET\nFE47          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET\nFE59          ; Ps #       SMALL LEFT PARENTHESIS\nFE5B          ; Ps #       SMALL LEFT CURLY BRACKET\nFE5D          ; Ps #       SMALL LEFT TORTOISE SHELL BRACKET\nFF08          ; Ps #       FULLWIDTH LEFT PARENTHESIS\nFF3B          ; Ps #       FULLWIDTH LEFT SQUARE BRACKET\nFF5B          ; Ps #       FULLWIDTH LEFT CURLY BRACKET\nFF5F          ; Ps #       FULLWIDTH LEFT WHITE PARENTHESIS\nFF62          ; Ps #       HALFWIDTH LEFT CORNER BRACKET\n\n# Total code points: 79\n\n# ================================================\n\n# General_Category=Close_Punctuation\n\n0029          ; Pe #       RIGHT PARENTHESIS\n005D          ; Pe #       RIGHT SQUARE BRACKET\n007D          ; Pe #       RIGHT CURLY BRACKET\n0F3B          ; Pe #       TIBETAN MARK GUG RTAGS GYAS\n0F3D          ; Pe #       TIBETAN MARK ANG KHANG GYAS\n169C          ; Pe #       OGHAM REVERSED FEATHER MARK\n2046          ; Pe #       RIGHT SQUARE BRACKET WITH QUILL\n207E          ; Pe #       SUPERSCRIPT RIGHT PARENTHESIS\n208E          ; Pe #       SUBSCRIPT RIGHT PARENTHESIS\n2309          ; Pe #       RIGHT CEILING\n230B          ; Pe #       RIGHT FLOOR\n232A          ; Pe #       RIGHT-POINTING ANGLE BRACKET\n2769          ; Pe #       MEDIUM RIGHT PARENTHESIS ORNAMENT\n276B          ; Pe #       MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT\n276D          ; Pe #       MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT\n276F          ; Pe #       HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT\n2771          ; Pe #       HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT\n2773          ; Pe #       LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT\n2775          ; Pe #       MEDIUM RIGHT CURLY BRACKET ORNAMENT\n27C6          ; Pe #       RIGHT S-SHAPED BAG DELIMITER\n27E7          ; Pe #       MATHEMATICAL RIGHT WHITE SQUARE BRACKET\n27E9          ; Pe #       MATHEMATICAL RIGHT ANGLE BRACKET\n27EB          ; Pe #       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET\n27ED          ; Pe #       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET\n27EF          ; Pe #       MATHEMATICAL RIGHT FLATTENED PARENTHESIS\n2984          ; Pe #       RIGHT WHITE CURLY BRACKET\n2986          ; Pe #       RIGHT WHITE PARENTHESIS\n2988          ; Pe #       Z NOTATION RIGHT IMAGE BRACKET\n298A          ; Pe #       Z NOTATION RIGHT BINDING BRACKET\n298C          ; Pe #       RIGHT SQUARE BRACKET WITH UNDERBAR\n298E          ; Pe #       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n2990          ; Pe #       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER\n2992          ; Pe #       RIGHT ANGLE BRACKET WITH DOT\n2994          ; Pe #       RIGHT ARC GREATER-THAN BRACKET\n2996          ; Pe #       DOUBLE RIGHT ARC LESS-THAN BRACKET\n2998          ; Pe #       RIGHT BLACK TORTOISE SHELL BRACKET\n29D9          ; Pe #       RIGHT WIGGLY FENCE\n29DB          ; Pe #       RIGHT DOUBLE WIGGLY FENCE\n29FD          ; Pe #       RIGHT-POINTING CURVED ANGLE BRACKET\n2E23          ; Pe #       TOP RIGHT HALF BRACKET\n2E25          ; Pe #       BOTTOM RIGHT HALF BRACKET\n2E27          ; Pe #       RIGHT SIDEWAYS U BRACKET\n2E29          ; Pe #       RIGHT DOUBLE PARENTHESIS\n2E56          ; Pe #       RIGHT SQUARE BRACKET WITH STROKE\n2E58          ; Pe #       RIGHT SQUARE BRACKET WITH DOUBLE STROKE\n2E5A          ; Pe #       TOP HALF RIGHT PARENTHESIS\n2E5C          ; Pe #       BOTTOM HALF RIGHT PARENTHESIS\n3009          ; Pe #       RIGHT ANGLE BRACKET\n300B          ; Pe #       RIGHT DOUBLE ANGLE BRACKET\n300D          ; Pe #       RIGHT CORNER BRACKET\n300F          ; Pe #       RIGHT WHITE CORNER BRACKET\n3011          ; Pe #       RIGHT BLACK LENTICULAR BRACKET\n3015          ; Pe #       RIGHT TORTOISE SHELL BRACKET\n3017          ; Pe #       RIGHT WHITE LENTICULAR BRACKET\n3019          ; Pe #       RIGHT WHITE TORTOISE SHELL BRACKET\n301B          ; Pe #       RIGHT WHITE SQUARE BRACKET\n301E..301F    ; Pe #   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK\nFD3E          ; Pe #       ORNATE LEFT PARENTHESIS\nFE18          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET\nFE36          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS\nFE38          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET\nFE3A          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET\nFE3C          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET\nFE3E          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET\nFE40          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET\nFE42          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET\nFE44          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET\nFE48          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET\nFE5A          ; Pe #       SMALL RIGHT PARENTHESIS\nFE5C          ; Pe #       SMALL RIGHT CURLY BRACKET\nFE5E          ; Pe #       SMALL RIGHT TORTOISE SHELL BRACKET\nFF09          ; Pe #       FULLWIDTH RIGHT PARENTHESIS\nFF3D          ; Pe #       FULLWIDTH RIGHT SQUARE BRACKET\nFF5D          ; Pe #       FULLWIDTH RIGHT CURLY BRACKET\nFF60          ; Pe #       FULLWIDTH RIGHT WHITE PARENTHESIS\nFF63          ; Pe #       HALFWIDTH RIGHT CORNER BRACKET\n\n# Total code points: 77\n\n# ================================================\n\n# General_Category=Connector_Punctuation\n\n005F          ; Pc #       LOW LINE\n203F..2040    ; Pc #   [2] UNDERTIE..CHARACTER TIE\n2054          ; Pc #       INVERTED UNDERTIE\nFE33..FE34    ; Pc #   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE\nFE4D..FE4F    ; Pc #   [3] DASHED LOW LINE..WAVY LOW LINE\nFF3F          ; Pc #       FULLWIDTH LOW LINE\n\n# Total code points: 10\n\n# ================================================\n\n# General_Category=Other_Punctuation\n\n0021..0023    ; Po #   [3] EXCLAMATION MARK..NUMBER SIGN\n0025..0027    ; Po #   [3] PERCENT SIGN..APOSTROPHE\n002A          ; Po #       ASTERISK\n002C          ; Po #       COMMA\n002E..002F    ; Po #   [2] FULL STOP..SOLIDUS\n003A..003B    ; Po #   [2] COLON..SEMICOLON\n003F..0040    ; Po #   [2] QUESTION MARK..COMMERCIAL AT\n005C          ; Po #       REVERSE SOLIDUS\n00A1          ; Po #       INVERTED EXCLAMATION MARK\n00A7          ; Po #       SECTION SIGN\n00B6..00B7    ; Po #   [2] PILCROW SIGN..MIDDLE DOT\n00BF          ; Po #       INVERTED QUESTION MARK\n037E          ; Po #       GREEK QUESTION MARK\n0387          ; Po #       GREEK ANO TELEIA\n055A..055F    ; Po #   [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK\n0589          ; Po #       ARMENIAN FULL STOP\n05C0          ; Po #       HEBREW PUNCTUATION PASEQ\n05C3          ; Po #       HEBREW PUNCTUATION SOF PASUQ\n05C6          ; Po #       HEBREW PUNCTUATION NUN HAFUKHA\n05F3..05F4    ; Po #   [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM\n0609..060A    ; Po #   [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN\n060C..060D    ; Po #   [2] ARABIC COMMA..ARABIC DATE SEPARATOR\n061B          ; Po #       ARABIC SEMICOLON\n061D..061F    ; Po #   [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK\n066A..066D    ; Po #   [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR\n06D4          ; Po #       ARABIC FULL STOP\n0700..070D    ; Po #  [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS\n07F7..07F9    ; Po #   [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK\n0830..083E    ; Po #  [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU\n085E          ; Po #       MANDAIC PUNCTUATION\n0964..0965    ; Po #   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA\n0970          ; Po #       DEVANAGARI ABBREVIATION SIGN\n09FD          ; Po #       BENGALI ABBREVIATION SIGN\n0A76          ; Po #       GURMUKHI ABBREVIATION SIGN\n0AF0          ; Po #       GUJARATI ABBREVIATION SIGN\n0C77          ; Po #       TELUGU SIGN SIDDHAM\n0C84          ; Po #       KANNADA SIGN SIDDHAM\n0DF4          ; Po #       SINHALA PUNCTUATION KUNDDALIYA\n0E4F          ; Po #       THAI CHARACTER FONGMAN\n0E5A..0E5B    ; Po #   [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT\n0F04..0F12    ; Po #  [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD\n0F14          ; Po #       TIBETAN MARK GTER TSHEG\n0F85          ; Po #       TIBETAN MARK PALUTA\n0FD0..0FD4    ; Po #   [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA\n0FD9..0FDA    ; Po #   [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS\n104A..104F    ; Po #   [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE\n10FB          ; Po #       GEORGIAN PARAGRAPH SEPARATOR\n1360..1368    ; Po #   [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR\n166E          ; Po #       CANADIAN SYLLABICS FULL STOP\n16EB..16ED    ; Po #   [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION\n1735..1736    ; Po #   [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION\n17D4..17D6    ; Po #   [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH\n17D8..17DA    ; Po #   [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT\n1800..1805    ; Po #   [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS\n1807..180A    ; Po #   [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU\n1944..1945    ; Po #   [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK\n1A1E..1A1F    ; Po #   [2] BUGINESE PALLAWA..BUGINESE END OF SECTION\n1AA0..1AA6    ; Po #   [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA\n1AA8..1AAD    ; Po #   [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG\n1B4E..1B4F    ; Po #   [2] BALINESE INVERTED CARIK SIKI..BALINESE INVERTED CARIK PAREREN\n1B5A..1B60    ; Po #   [7] BALINESE PANTI..BALINESE PAMENENG\n1B7D..1B7F    ; Po #   [3] BALINESE PANTI LANTANG..BALINESE PANTI BAWAK\n1BFC..1BFF    ; Po #   [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT\n1C3B..1C3F    ; Po #   [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK\n1C7E..1C7F    ; Po #   [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD\n1CC0..1CC7    ; Po #   [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA\n1CD3          ; Po #       VEDIC SIGN NIHSHVASA\n2016..2017    ; Po #   [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE\n2020..2027    ; Po #   [8] DAGGER..HYPHENATION POINT\n2030..2038    ; Po #   [9] PER MILLE SIGN..CARET\n203B..203E    ; Po #   [4] REFERENCE MARK..OVERLINE\n2041..2043    ; Po #   [3] CARET INSERTION POINT..HYPHEN BULLET\n2047..2051    ; Po #  [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY\n2053          ; Po #       SWUNG DASH\n2055..205E    ; Po #  [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS\n2CF9..2CFC    ; Po #   [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER\n2CFE..2CFF    ; Po #   [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER\n2D70          ; Po #       TIFINAGH SEPARATOR MARK\n2E00..2E01    ; Po #   [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER\n2E06..2E08    ; Po #   [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER\n2E0B          ; Po #       RAISED SQUARE\n2E0E..2E16    ; Po #   [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE\n2E18..2E19    ; Po #   [2] INVERTED INTERROBANG..PALM BRANCH\n2E1B          ; Po #       TILDE WITH RING ABOVE\n2E1E..2E1F    ; Po #   [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW\n2E2A..2E2E    ; Po #   [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK\n2E30..2E39    ; Po #  [10] RING POINT..TOP HALF SECTION SIGN\n2E3C..2E3F    ; Po #   [4] STENOGRAPHIC FULL STOP..CAPITULUM\n2E41          ; Po #       REVERSED COMMA\n2E43..2E4F    ; Po #  [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER\n2E52..2E54    ; Po #   [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK\n3001..3003    ; Po #   [3] IDEOGRAPHIC COMMA..DITTO MARK\n303D          ; Po #       PART ALTERNATION MARK\n30FB          ; Po #       KATAKANA MIDDLE DOT\nA4FE..A4FF    ; Po #   [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP\nA60D..A60F    ; Po #   [3] VAI COMMA..VAI QUESTION MARK\nA673          ; Po #       SLAVONIC ASTERISK\nA67E          ; Po #       CYRILLIC KAVYKA\nA6F2..A6F7    ; Po #   [6] BAMUM NJAEMLI..BAMUM QUESTION MARK\nA874..A877    ; Po #   [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD\nA8CE..A8CF    ; Po #   [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA\nA8F8..A8FA    ; Po #   [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET\nA8FC          ; Po #       DEVANAGARI SIGN SIDDHAM\nA92E..A92F    ; Po #   [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA\nA95F          ; Po #       REJANG SECTION MARK\nA9C1..A9CD    ; Po #  [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH\nA9DE..A9DF    ; Po #   [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN\nAA5C..AA5F    ; Po #   [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA\nAADE..AADF    ; Po #   [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI\nAAF0..AAF1    ; Po #   [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM\nABEB          ; Po #       MEETEI MAYEK CHEIKHEI\nFE10..FE16    ; Po #   [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK\nFE19          ; Po #       PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS\nFE30          ; Po #       PRESENTATION FORM FOR VERTICAL TWO DOT LEADER\nFE45..FE46    ; Po #   [2] SESAME DOT..WHITE SESAME DOT\nFE49..FE4C    ; Po #   [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE\nFE50..FE52    ; Po #   [3] SMALL COMMA..SMALL FULL STOP\nFE54..FE57    ; Po #   [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK\nFE5F..FE61    ; Po #   [3] SMALL NUMBER SIGN..SMALL ASTERISK\nFE68          ; Po #       SMALL REVERSE SOLIDUS\nFE6A..FE6B    ; Po #   [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT\nFF01..FF03    ; Po #   [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN\nFF05..FF07    ; Po #   [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE\nFF0A          ; Po #       FULLWIDTH ASTERISK\nFF0C          ; Po #       FULLWIDTH COMMA\nFF0E..FF0F    ; Po #   [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS\nFF1A..FF1B    ; Po #   [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON\nFF1F..FF20    ; Po #   [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT\nFF3C          ; Po #       FULLWIDTH REVERSE SOLIDUS\nFF61          ; Po #       HALFWIDTH IDEOGRAPHIC FULL STOP\nFF64..FF65    ; Po #   [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT\n10100..10102  ; Po #   [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK\n1039F         ; Po #       UGARITIC WORD DIVIDER\n103D0         ; Po #       OLD PERSIAN WORD DIVIDER\n1056F         ; Po #       CAUCASIAN ALBANIAN CITATION MARK\n10857         ; Po #       IMPERIAL ARAMAIC SECTION SIGN\n1091F         ; Po #       PHOENICIAN WORD SEPARATOR\n1093F         ; Po #       LYDIAN TRIANGULAR MARK\n10A50..10A58  ; Po #   [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES\n10A7F         ; Po #       OLD SOUTH ARABIAN NUMERIC INDICATOR\n10AF0..10AF6  ; Po #   [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER\n10B39..10B3F  ; Po #   [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION\n10B99..10B9C  ; Po #   [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT\n10ED0         ; Po #       ARABIC BIBLICAL END OF VERSE\n10F55..10F59  ; Po #   [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT\n10F86..10F89  ; Po #   [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS\n11047..1104D  ; Po #   [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS\n110BB..110BC  ; Po #   [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN\n110BE..110C1  ; Po #   [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA\n11140..11143  ; Po #   [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK\n11174..11175  ; Po #   [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK\n111C5..111C8  ; Po #   [4] SHARADA DANDA..SHARADA SEPARATOR\n111CD         ; Po #       SHARADA SUTRA MARK\n111DB         ; Po #       SHARADA SIGN SIDDHAM\n111DD..111DF  ; Po #   [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2\n11238..1123D  ; Po #   [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN\n112A9         ; Po #       MULTANI SECTION MARK\n113D4..113D5  ; Po #   [2] TULU-TIGALARI DANDA..TULU-TIGALARI DOUBLE DANDA\n113D7..113D8  ; Po #   [2] TULU-TIGALARI SIGN OM PUSHPIKA..TULU-TIGALARI SIGN SHRII PUSHPIKA\n1144B..1144F  ; Po #   [5] NEWA DANDA..NEWA ABBREVIATION SIGN\n1145A..1145B  ; Po #   [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK\n1145D         ; Po #       NEWA INSERTION SIGN\n114C6         ; Po #       TIRHUTA ABBREVIATION SIGN\n115C1..115D7  ; Po #  [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES\n11641..11643  ; Po #   [3] MODI DANDA..MODI ABBREVIATION SIGN\n11660..1166C  ; Po #  [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT\n116B9         ; Po #       TAKRI ABBREVIATION SIGN\n1173C..1173E  ; Po #   [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI\n1183B         ; Po #       DOGRA ABBREVIATION SIGN\n11944..11946  ; Po #   [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK\n119E2         ; Po #       NANDINAGARI SIGN SIDDHAM\n11A3F..11A46  ; Po #   [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK\n11A9A..11A9C  ; Po #   [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD\n11A9E..11AA2  ; Po #   [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2\n11B00..11B09  ; Po #  [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU\n11BE1         ; Po #       SUNUWAR SIGN PVO\n11C41..11C45  ; Po #   [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2\n11C70..11C71  ; Po #   [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD\n11EF7..11EF8  ; Po #   [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION\n11F43..11F4F  ; Po #  [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL\n11FFF         ; Po #       TAMIL PUNCTUATION END OF TEXT\n12470..12474  ; Po #   [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON\n12FF1..12FF2  ; Po #   [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302\n16A6E..16A6F  ; Po #   [2] MRO DANDA..MRO DOUBLE DANDA\n16AF5         ; Po #       BASSA VAH FULL STOP\n16B37..16B3B  ; Po #   [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM\n16B44         ; Po #       PAHAWH HMONG SIGN XAUS\n16D6D..16D6F  ; Po #   [3] KIRAT RAI SIGN YUPI..KIRAT RAI DOUBLE DANDA\n16E97..16E9A  ; Po #   [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH\n16FE2         ; Po #       OLD CHINESE HOOK MARK\n1BC9F         ; Po #       DUPLOYAN PUNCTUATION CHINOOK FULL STOP\n1DA87..1DA8B  ; Po #   [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS\n1E5FF         ; Po #       OL ONAL ABBREVIATION SIGN\n1E95E..1E95F  ; Po #   [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK\n\n# Total code points: 641\n\n# ================================================\n\n# General_Category=Math_Symbol\n\n002B          ; Sm #       PLUS SIGN\n003C..003E    ; Sm #   [3] LESS-THAN SIGN..GREATER-THAN SIGN\n007C          ; Sm #       VERTICAL LINE\n007E          ; Sm #       TILDE\n00AC          ; Sm #       NOT SIGN\n00B1          ; Sm #       PLUS-MINUS SIGN\n00D7          ; Sm #       MULTIPLICATION SIGN\n00F7          ; Sm #       DIVISION SIGN\n03F6          ; Sm #       GREEK REVERSED LUNATE EPSILON SYMBOL\n0606..0608    ; Sm #   [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY\n2044          ; Sm #       FRACTION SLASH\n2052          ; Sm #       COMMERCIAL MINUS SIGN\n207A..207C    ; Sm #   [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN\n208A..208C    ; Sm #   [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN\n2118          ; Sm #       SCRIPT CAPITAL P\n2140..2144    ; Sm #   [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y\n214B          ; Sm #       TURNED AMPERSAND\n2190..2194    ; Sm #   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW\n219A..219B    ; Sm #   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE\n21A0          ; Sm #       RIGHTWARDS TWO HEADED ARROW\n21A3          ; Sm #       RIGHTWARDS ARROW WITH TAIL\n21A6          ; Sm #       RIGHTWARDS ARROW FROM BAR\n21AE          ; Sm #       LEFT RIGHT ARROW WITH STROKE\n21CE..21CF    ; Sm #   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE\n21D2          ; Sm #       RIGHTWARDS DOUBLE ARROW\n21D4          ; Sm #       LEFT RIGHT DOUBLE ARROW\n21F4..22FF    ; Sm # [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP\n2320..2321    ; Sm #   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL\n237C          ; Sm #       RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW\n239B..23B3    ; Sm #  [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM\n23DC..23E1    ; Sm #   [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET\n25B7          ; Sm #       WHITE RIGHT-POINTING TRIANGLE\n25C1          ; Sm #       WHITE LEFT-POINTING TRIANGLE\n25F8..25FF    ; Sm #   [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE\n266F          ; Sm #       MUSIC SHARP SIGN\n27C0..27C4    ; Sm #   [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET\n27C7..27E5    ; Sm #  [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK\n27F0..27FF    ; Sm #  [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW\n2900..2982    ; Sm # [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON\n2999..29D7    ; Sm #  [63] DOTTED FENCE..BLACK HOURGLASS\n29DC..29FB    ; Sm #  [32] INCOMPLETE INFINITY..TRIPLE PLUS\n29FE..2AFF    ; Sm # [258] TINY..N-ARY WHITE VERTICAL BAR\n2B30..2B44    ; Sm #  [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET\n2B47..2B4C    ; Sm #   [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR\nFB29          ; Sm #       HEBREW LETTER ALTERNATIVE PLUS SIGN\nFE62          ; Sm #       SMALL PLUS SIGN\nFE64..FE66    ; Sm #   [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN\nFF0B          ; Sm #       FULLWIDTH PLUS SIGN\nFF1C..FF1E    ; Sm #   [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN\nFF5C          ; Sm #       FULLWIDTH VERTICAL LINE\nFF5E          ; Sm #       FULLWIDTH TILDE\nFFE2          ; Sm #       FULLWIDTH NOT SIGN\nFFE9..FFEC    ; Sm #   [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW\n10D8E..10D8F  ; Sm #   [2] GARAY PLUS SIGN..GARAY MINUS SIGN\n1CEF0         ; Sm #       MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR\n1D6C1         ; Sm #       MATHEMATICAL BOLD NABLA\n1D6DB         ; Sm #       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL\n1D6FB         ; Sm #       MATHEMATICAL ITALIC NABLA\n1D715         ; Sm #       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL\n1D735         ; Sm #       MATHEMATICAL BOLD ITALIC NABLA\n1D74F         ; Sm #       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL\n1D76F         ; Sm #       MATHEMATICAL SANS-SERIF BOLD NABLA\n1D789         ; Sm #       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL\n1D7A9         ; Sm #       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA\n1D7C3         ; Sm #       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL\n1EEF0..1EEF1  ; Sm #   [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL\n1F8D0..1F8D8  ; Sm #   [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE\n\n# Total code points: 960\n\n# ================================================\n\n# General_Category=Currency_Symbol\n\n0024          ; Sc #       DOLLAR SIGN\n00A2..00A5    ; Sc #   [4] CENT SIGN..YEN SIGN\n058F          ; Sc #       ARMENIAN DRAM SIGN\n060B          ; Sc #       AFGHANI SIGN\n07FE..07FF    ; Sc #   [2] NKO DOROME SIGN..NKO TAMAN SIGN\n09F2..09F3    ; Sc #   [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN\n09FB          ; Sc #       BENGALI GANDA MARK\n0AF1          ; Sc #       GUJARATI RUPEE SIGN\n0BF9          ; Sc #       TAMIL RUPEE SIGN\n0E3F          ; Sc #       THAI CURRENCY SYMBOL BAHT\n17DB          ; Sc #       KHMER CURRENCY SYMBOL RIEL\n20A0..20C1    ; Sc #  [34] EURO-CURRENCY SIGN..SAUDI RIYAL SIGN\nA838          ; Sc #       NORTH INDIC RUPEE MARK\nFDFC          ; Sc #       RIAL SIGN\nFE69          ; Sc #       SMALL DOLLAR SIGN\nFF04          ; Sc #       FULLWIDTH DOLLAR SIGN\nFFE0..FFE1    ; Sc #   [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN\nFFE5..FFE6    ; Sc #   [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN\n11FDD..11FE0  ; Sc #   [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN\n1E2FF         ; Sc #       WANCHO NGUN SIGN\n1ECB0         ; Sc #       INDIC SIYAQ RUPEE MARK\n\n# Total code points: 64\n\n# ================================================\n\n# General_Category=Modifier_Symbol\n\n005E          ; Sk #       CIRCUMFLEX ACCENT\n0060          ; Sk #       GRAVE ACCENT\n00A8          ; Sk #       DIAERESIS\n00AF          ; Sk #       MACRON\n00B4          ; Sk #       ACUTE ACCENT\n00B8          ; Sk #       CEDILLA\n02C2..02C5    ; Sk #   [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD\n02D2..02DF    ; Sk #  [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT\n02E5..02EB    ; Sk #   [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK\n02ED          ; Sk #       MODIFIER LETTER UNASPIRATED\n02EF..02FF    ; Sk #  [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW\n0375          ; Sk #       GREEK LOWER NUMERAL SIGN\n0384..0385    ; Sk #   [2] GREEK TONOS..GREEK DIALYTIKA TONOS\n0888          ; Sk #       ARABIC RAISED ROUND DOT\n1FBD          ; Sk #       GREEK KORONIS\n1FBF..1FC1    ; Sk #   [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI\n1FCD..1FCF    ; Sk #   [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI\n1FDD..1FDF    ; Sk #   [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI\n1FED..1FEF    ; Sk #   [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA\n1FFD..1FFE    ; Sk #   [2] GREEK OXIA..GREEK DASIA\n309B..309C    ; Sk #   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\nA700..A716    ; Sk #  [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR\nA720..A721    ; Sk #   [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE\nA789..A78A    ; Sk #   [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN\nAB5B          ; Sk #       MODIFIER BREVE WITH INVERTED BREVE\nAB6A..AB6B    ; Sk #   [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK\nFBB2..FBC2    ; Sk #  [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE\nFF3E          ; Sk #       FULLWIDTH CIRCUMFLEX ACCENT\nFF40          ; Sk #       FULLWIDTH GRAVE ACCENT\nFFE3          ; Sk #       FULLWIDTH MACRON\n1F3FB..1F3FF  ; Sk #   [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6\n\n# Total code points: 125\n\n# ================================================\n\n# General_Category=Other_Symbol\n\n00A6          ; So #       BROKEN BAR\n00A9          ; So #       COPYRIGHT SIGN\n00AE          ; So #       REGISTERED SIGN\n00B0          ; So #       DEGREE SIGN\n0482          ; So #       CYRILLIC THOUSANDS SIGN\n058D..058E    ; So #   [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN\n060E..060F    ; So #   [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA\n06DE          ; So #       ARABIC START OF RUB EL HIZB\n06E9          ; So #       ARABIC PLACE OF SAJDAH\n06FD..06FE    ; So #   [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN\n07F6          ; So #       NKO SYMBOL OO DENNEN\n09FA          ; So #       BENGALI ISSHAR\n0B70          ; So #       ORIYA ISSHAR\n0BF3..0BF8    ; So #   [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN\n0BFA          ; So #       TAMIL NUMBER SIGN\n0C7F          ; So #       TELUGU SIGN TUUMU\n0D4F          ; So #       MALAYALAM SIGN PARA\n0D79          ; So #       MALAYALAM DATE MARK\n0F01..0F03    ; So #   [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA\n0F13          ; So #       TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN\n0F15..0F17    ; So #   [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS\n0F1A..0F1F    ; So #   [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG\n0F34          ; So #       TIBETAN MARK BSDUS RTAGS\n0F36          ; So #       TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN\n0F38          ; So #       TIBETAN MARK CHE MGO\n0FBE..0FC5    ; So #   [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE\n0FC7..0FCC    ; So #   [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL\n0FCE..0FCF    ; So #   [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM\n0FD5..0FD8    ; So #   [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS\n109E..109F    ; So #   [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION\n1390..1399    ; So #  [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT\n166D          ; So #       CANADIAN SYLLABICS CHI SIGN\n1940          ; So #       LIMBU SIGN LOO\n19DE..19FF    ; So #  [34] NEW TAI LUE SIGN LAE..KHMER SYMBOL DAP-PRAM ROC\n1B61..1B6A    ; So #  [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE\n1B74..1B7C    ; So #   [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING\n2100..2101    ; So #   [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT\n2103..2106    ; So #   [4] DEGREE CELSIUS..CADA UNA\n2108..2109    ; So #   [2] SCRUPLE..DEGREE FAHRENHEIT\n2114          ; So #       L B BAR SYMBOL\n2116..2117    ; So #   [2] NUMERO SIGN..SOUND RECORDING COPYRIGHT\n211E..2123    ; So #   [6] PRESCRIPTION TAKE..VERSICLE\n2125          ; So #       OUNCE SIGN\n2127          ; So #       INVERTED OHM SIGN\n2129          ; So #       TURNED GREEK SMALL LETTER IOTA\n212E          ; So #       ESTIMATED SYMBOL\n213A..213B    ; So #   [2] ROTATED CAPITAL Q..FACSIMILE SIGN\n214A          ; So #       PROPERTY LINE\n214C..214D    ; So #   [2] PER SIGN..AKTIESELSKAB\n214F          ; So #       SYMBOL FOR SAMARITAN SOURCE\n218A..218B    ; So #   [2] TURNED DIGIT TWO..TURNED DIGIT THREE\n2195..2199    ; So #   [5] UP DOWN ARROW..SOUTH WEST ARROW\n219C..219F    ; So #   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW\n21A1..21A2    ; So #   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL\n21A4..21A5    ; So #   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR\n21A7..21AD    ; So #   [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW\n21AF..21CD    ; So #  [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE\n21D0..21D1    ; So #   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW\n21D3          ; So #       DOWNWARDS DOUBLE ARROW\n21D5..21F3    ; So #  [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW\n2300..2307    ; So #   [8] DIAMETER SIGN..WAVY LINE\n230C..231F    ; So #  [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER\n2322..2328    ; So #   [7] FROWN..KEYBOARD\n232B..237B    ; So #  [81] ERASE TO THE LEFT..NOT CHECK MARK\n237D..239A    ; So #  [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL\n23B4..23DB    ; So #  [40] TOP SQUARE BRACKET..FUSE\n23E2..2429    ; So #  [72] WHITE TRAPEZIUM..SYMBOL FOR DELETE MEDIUM SHADE FORM\n2440..244A    ; So #  [11] OCR HOOK..OCR DOUBLE BACKSLASH\n249C..24E9    ; So #  [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z\n2500..25B6    ; So # [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE\n25B8..25C0    ; So #   [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE\n25C2..25F7    ; So #  [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT\n2600..266E    ; So # [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN\n2670..2767    ; So # [248] WEST SYRIAC CROSS..ROTATED FLORAL HEART BULLET\n2794..27BF    ; So #  [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP\n2800..28FF    ; So # [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678\n2B00..2B2F    ; So #  [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE\n2B45..2B46    ; So #   [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW\n2B4D..2B73    ; So #  [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR\n2B76..2BFF    ; So # [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL\n2CE5..2CEA    ; So #   [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA\n2E50..2E51    ; So #   [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR\n2E80..2E99    ; So #  [26] CJK RADICAL REPEAT..CJK RADICAL RAP\n2E9B..2EF3    ; So #  [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE\n2F00..2FD5    ; So # [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE\n2FF0..2FFF    ; So #  [16] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION\n3004          ; So #       JAPANESE INDUSTRIAL STANDARD SYMBOL\n3012..3013    ; So #   [2] POSTAL MARK..GETA MARK\n3020          ; So #       POSTAL MARK FACE\n3036..3037    ; So #   [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL\n303E..303F    ; So #   [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE\n3190..3191    ; So #   [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK\n3196..319F    ; So #  [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK\n31C0..31E5    ; So #  [38] CJK STROKE T..CJK STROKE SZP\n31EF          ; So #       IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION\n3200..321E    ; So #  [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU\n322A..3247    ; So #  [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO\n3250          ; So #       PARTNERSHIP SIGN\n3260..327F    ; So #  [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL\n328A..32B0    ; So #  [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT\n32C0..33FF    ; So # [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL\n4DC0..4DFF    ; So #  [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION\nA490..A4C6    ; So #  [55] YI RADICAL QOT..YI RADICAL KE\nA828..A82B    ; So #   [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4\nA836..A837    ; So #   [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK\nA839          ; So #       NORTH INDIC QUANTITY MARK\nAA77..AA79    ; So #   [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO\nFBC3..FBD2    ; So #  [16] ARABIC LIGATURE JALLA WA-ALAA..ARABIC LIGATURE ALAYHI AR-RAHMAH\nFD40..FD4F    ; So #  [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH\nFD90..FD91    ; So #   [2] ARABIC LIGATURE RAHMATU ALLAAHI ALAYH..ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA\nFDC8..FDCF    ; So #   [8] ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA..ARABIC LIGATURE SALAAMUHU ALAYNAA\nFDFD..FDFF    ; So #   [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL\nFFE4          ; So #       FULLWIDTH BROKEN BAR\nFFE8          ; So #       HALFWIDTH FORMS LIGHT VERTICAL\nFFED..FFEE    ; So #   [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE\nFFFC..FFFD    ; So #   [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER\n10137..1013F  ; So #   [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT\n10179..10189  ; So #  [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN\n1018C..1018E  ; So #   [3] GREEK SINUSOID SIGN..NOMISMA SIGN\n10190..1019C  ; So #  [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL\n101A0         ; So #       GREEK SYMBOL TAU RHO\n101D0..101FC  ; So #  [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND\n10877..10878  ; So #   [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON\n10AC8         ; So #       MANICHAEAN SIGN UD\n10ED1..10ED8  ; So #   [8] ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM..ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH\n1173F         ; So #       AHOM SYMBOL VI\n11FD5..11FDC  ; So #   [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI\n11FE1..11FF1  ; So #  [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA\n16B3C..16B3F  ; So #   [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB\n16B45         ; So #       PAHAWH HMONG SIGN CIM TSOV ROG\n1BC9C         ; So #       DUPLOYAN SIGN O WITH CROSS\n1CC00..1CCEF  ; So # [240] UP-POINTING GO-KART..OUTLINED LATIN CAPITAL LETTER Z\n1CCFA..1CCFC  ; So #   [3] SNAKE SYMBOL..NOSE SYMBOL\n1CD00..1CEB3  ; So # [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET\n1CEBA..1CED0  ; So #  [23] FRAGILE SYMBOL..LEUKOTHEA\n1CEE0..1CEEF  ; So #  [16] GEOMANTIC FIGURE POPULUS..GEOMANTIC FIGURE VIA\n1CF50..1CFC3  ; So # [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK\n1D000..1D0F5  ; So # [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO\n1D100..1D126  ; So #  [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2\n1D129..1D164  ; So #  [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE\n1D16A..1D16C  ; So #   [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3\n1D183..1D184  ; So #   [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN\n1D18C..1D1A9  ; So #  [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH\n1D1AE..1D1EA  ; So #  [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON\n1D200..1D241  ; So #  [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54\n1D245         ; So #       GREEK MUSICAL LEIMMA\n1D300..1D356  ; So #  [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING\n1D800..1D9FF  ; So # [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD\n1DA37..1DA3A  ; So #   [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE\n1DA6D..1DA74  ; So #   [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING\n1DA76..1DA83  ; So #  [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH\n1DA85..1DA86  ; So #   [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS\n1E14F         ; So #       NYIAKENG PUACHUE HMONG CIRCLED CA\n1ECAC         ; So #       INDIC SIYAQ PLACEHOLDER\n1ED2E         ; So #       OTTOMAN SIYAQ MARRATAN\n1F000..1F02B  ; So #  [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK\n1F030..1F093  ; So # [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06\n1F0A0..1F0AE  ; So #  [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES\n1F0B1..1F0BF  ; So #  [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER\n1F0C1..1F0CF  ; So #  [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER\n1F0D1..1F0F5  ; So #  [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21\n1F10D..1F1AD  ; So # [161] CIRCLED ZERO WITH SLASH..MASK WORK SYMBOL\n1F1E6..1F202  ; So #  [29] REGIONAL INDICATOR SYMBOL LETTER A..SQUARED KATAKANA SA\n1F210..1F23B  ; So #  [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D\n1F240..1F248  ; So #   [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557\n1F250..1F251  ; So #   [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT\n1F260..1F265  ; So #   [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI\n1F300..1F3FA  ; So # [251] CYCLONE..AMPHORA\n1F400..1F6D8  ; So # [729] RAT..LANDSLIDE\n1F6DC..1F6EC  ; So #  [17] WIRELESS..AIRPLANE ARRIVING\n1F6F0..1F6FC  ; So #  [13] SATELLITE..ROLLER SKATE\n1F700..1F7D9  ; So # [218] ALCHEMICAL SYMBOL FOR QUINTESSENCE..NINE POINTED WHITE STAR\n1F7E0..1F7EB  ; So #  [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE\n1F7F0         ; So #       HEAVY EQUALS SIGN\n1F800..1F80B  ; So #  [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD\n1F810..1F847  ; So #  [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW\n1F850..1F859  ; So #  [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW\n1F860..1F887  ; So #  [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW\n1F890..1F8AD  ; So #  [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS\n1F8B0..1F8BB  ; So #  [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR\n1F8C0..1F8C1  ; So #   [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW\n1F900..1FA57  ; So # [344] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS ALFIL\n1FA60..1FA6D  ; So #  [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER\n1FA70..1FA7C  ; So #  [13] BALLET SHOES..CRUTCH\n1FA80..1FA8A  ; So #  [11] YO-YO..TROMBONE\n1FA8E..1FAC6  ; So #  [57] TREASURE CHEST..FINGERPRINT\n1FAC8         ; So #       HAIRY CREATURE\n1FACD..1FADC  ; So #  [16] ORCA..ROOT VEGETABLE\n1FADF..1FAEA  ; So #  [12] SPLATTER..DISTORTED FACE\n1FAEF..1FAF8  ; So #  [10] FIGHT CLOUD..RIGHTWARDS PUSHING HAND\n1FB00..1FB92  ; So # [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK\n1FB94..1FBEF  ; So #  [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE\n1FBFA         ; So #       ALARM BELL SYMBOL\n\n# Total code points: 7468\n\n# ================================================\n\n# General_Category=Initial_Punctuation\n\n00AB          ; Pi #       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\n2018          ; Pi #       LEFT SINGLE QUOTATION MARK\n201B..201C    ; Pi #   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK\n201F          ; Pi #       DOUBLE HIGH-REVERSED-9 QUOTATION MARK\n2039          ; Pi #       SINGLE LEFT-POINTING ANGLE QUOTATION MARK\n2E02          ; Pi #       LEFT SUBSTITUTION BRACKET\n2E04          ; Pi #       LEFT DOTTED SUBSTITUTION BRACKET\n2E09          ; Pi #       LEFT TRANSPOSITION BRACKET\n2E0C          ; Pi #       LEFT RAISED OMISSION BRACKET\n2E1C          ; Pi #       LEFT LOW PARAPHRASE BRACKET\n2E20          ; Pi #       LEFT VERTICAL BAR WITH QUILL\n\n# Total code points: 12\n\n# ================================================\n\n# General_Category=Final_Punctuation\n\n00BB          ; Pf #       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\n2019          ; Pf #       RIGHT SINGLE QUOTATION MARK\n201D          ; Pf #       RIGHT DOUBLE QUOTATION MARK\n203A          ; Pf #       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\n2E03          ; Pf #       RIGHT SUBSTITUTION BRACKET\n2E05          ; Pf #       RIGHT DOTTED SUBSTITUTION BRACKET\n2E0A          ; Pf #       RIGHT TRANSPOSITION BRACKET\n2E0D          ; Pf #       RIGHT RAISED OMISSION BRACKET\n2E1D          ; Pf #       RIGHT LOW PARAPHRASE BRACKET\n2E21          ; Pf #       RIGHT VERTICAL BAR WITH QUILL\n\n# Total code points: 10\n\n# EOF\n"
  },
  {
    "path": "maint/Unicode.tables/GraphemeBreakProperty.txt",
    "content": "# GraphemeBreakProperty-17.0.0.txt\n# Date: 2025-06-30, 06:20:23 GMT\n# © 2025 Unicode®, Inc.\n# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.\n# For terms of use and license, see https://www.unicode.org/terms_of_use.html\n#\n# Unicode Character Database\n#   For documentation, see https://www.unicode.org/reports/tr44/\n\n# ================================================\n\n# Property:\tGrapheme_Cluster_Break\n\n#  All code points not explicitly listed for Grapheme_Cluster_Break\n#  have the value Other (XX).\n\n# @missing: 0000..10FFFF; Other\n\n# ================================================\n\n0600..0605    ; Prepend # Cf   [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE\n06DD          ; Prepend # Cf       ARABIC END OF AYAH\n070F          ; Prepend # Cf       SYRIAC ABBREVIATION MARK\n0890..0891    ; Prepend # Cf   [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE\n08E2          ; Prepend # Cf       ARABIC DISPUTED END OF AYAH\n0D4E          ; Prepend # Lo       MALAYALAM LETTER DOT REPH\n110BD         ; Prepend # Cf       KAITHI NUMBER SIGN\n110CD         ; Prepend # Cf       KAITHI NUMBER SIGN ABOVE\n111C2..111C3  ; Prepend # Lo   [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA\n113D1         ; Prepend # Lo       TULU-TIGALARI REPHA\n1193F         ; Prepend # Lo       DIVES AKURU PREFIXED NASAL SIGN\n11941         ; Prepend # Lo       DIVES AKURU INITIAL RA\n11A84..11A89  ; Prepend # Lo   [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA\n11D46         ; Prepend # Lo       MASARAM GONDI REPHA\n11F02         ; Prepend # Lo       KAWI SIGN REPHA\n\n# Total code points: 27\n\n# ================================================\n\n000D          ; CR # Cc       <control-000D>\n\n# Total code points: 1\n\n# ================================================\n\n000A          ; LF # Cc       <control-000A>\n\n# Total code points: 1\n\n# ================================================\n\n0000..0009    ; Control # Cc  [10] <control-0000>..<control-0009>\n000B..000C    ; Control # Cc   [2] <control-000B>..<control-000C>\n000E..001F    ; Control # Cc  [18] <control-000E>..<control-001F>\n007F..009F    ; Control # Cc  [33] <control-007F>..<control-009F>\n00AD          ; Control # Cf       SOFT HYPHEN\n061C          ; Control # Cf       ARABIC LETTER MARK\n180E          ; Control # Cf       MONGOLIAN VOWEL SEPARATOR\n200B          ; Control # Cf       ZERO WIDTH SPACE\n200E..200F    ; Control # Cf   [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK\n2028          ; Control # Zl       LINE SEPARATOR\n2029          ; Control # Zp       PARAGRAPH SEPARATOR\n202A..202E    ; Control # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE\n2060..2064    ; Control # Cf   [5] WORD JOINER..INVISIBLE PLUS\n2065          ; Control # Cn       <reserved-2065>\n2066..206F    ; Control # Cf  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES\nFEFF          ; Control # Cf       ZERO WIDTH NO-BREAK SPACE\nFFF0..FFF8    ; Control # Cn   [9] <reserved-FFF0>..<reserved-FFF8>\nFFF9..FFFB    ; Control # Cf   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR\n13430..1343F  ; Control # Cf  [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE\n1BCA0..1BCA3  ; Control # Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP\n1D173..1D17A  ; Control # Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE\nE0000         ; Control # Cn       <reserved-E0000>\nE0001         ; Control # Cf       LANGUAGE TAG\nE0002..E001F  ; Control # Cn  [30] <reserved-E0002>..<reserved-E001F>\nE0080..E00FF  ; Control # Cn [128] <reserved-E0080>..<reserved-E00FF>\nE01F0..E0FFF  ; Control # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>\n\n# Total code points: 3893\n\n# ================================================\n\n0300..036F    ; Extend # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\n0483..0487    ; Extend # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\n0488..0489    ; Extend # Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN\n0591..05BD    ; Extend # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\n05BF          ; Extend # Mn       HEBREW POINT RAFE\n05C1..05C2    ; Extend # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n05C4..05C5    ; Extend # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n05C7          ; Extend # Mn       HEBREW POINT QAMATS QATAN\n0610..061A    ; Extend # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n064B..065F    ; Extend # Mn  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW\n0670          ; Extend # Mn       ARABIC LETTER SUPERSCRIPT ALEF\n06D6..06DC    ; Extend # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n06DF..06E4    ; Extend # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\n06E7..06E8    ; Extend # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n06EA..06ED    ; Extend # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\n0711          ; Extend # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH\n0730..074A    ; Extend # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\n07A6..07B0    ; Extend # Mn  [11] THAANA ABAFILI..THAANA SUKUN\n07EB..07F3    ; Extend # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\n07FD          ; Extend # Mn       NKO DANTAYALAN\n0816..0819    ; Extend # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\n081B..0823    ; Extend # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n0825..0827    ; Extend # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n0829..082D    ; Extend # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\n0859..085B    ; Extend # Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\n0897..089F    ; Extend # Mn   [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA\n08CA..08E1    ; Extend # Mn  [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA\n08E3..0902    ; Extend # Mn  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA\n093A          ; Extend # Mn       DEVANAGARI VOWEL SIGN OE\n093C          ; Extend # Mn       DEVANAGARI SIGN NUKTA\n0941..0948    ; Extend # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n094D          ; Extend # Mn       DEVANAGARI SIGN VIRAMA\n0951..0957    ; Extend # Mn   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE\n0962..0963    ; Extend # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n0981          ; Extend # Mn       BENGALI SIGN CANDRABINDU\n09BC          ; Extend # Mn       BENGALI SIGN NUKTA\n09BE          ; Extend # Mc       BENGALI VOWEL SIGN AA\n09C1..09C4    ; Extend # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n09CD          ; Extend # Mn       BENGALI SIGN VIRAMA\n09D7          ; Extend # Mc       BENGALI AU LENGTH MARK\n09E2..09E3    ; Extend # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n09FE          ; Extend # Mn       BENGALI SANDHI MARK\n0A01..0A02    ; Extend # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n0A3C          ; Extend # Mn       GURMUKHI SIGN NUKTA\n0A41..0A42    ; Extend # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n0A47..0A48    ; Extend # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n0A4B..0A4D    ; Extend # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\n0A51          ; Extend # Mn       GURMUKHI SIGN UDAAT\n0A70..0A71    ; Extend # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n0A75          ; Extend # Mn       GURMUKHI SIGN YAKASH\n0A81..0A82    ; Extend # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n0ABC          ; Extend # Mn       GUJARATI SIGN NUKTA\n0AC1..0AC5    ; Extend # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n0AC7..0AC8    ; Extend # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n0ACD          ; Extend # Mn       GUJARATI SIGN VIRAMA\n0AE2..0AE3    ; Extend # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n0AFA..0AFF    ; Extend # Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\n0B01          ; Extend # Mn       ORIYA SIGN CANDRABINDU\n0B3C          ; Extend # Mn       ORIYA SIGN NUKTA\n0B3E          ; Extend # Mc       ORIYA VOWEL SIGN AA\n0B3F          ; Extend # Mn       ORIYA VOWEL SIGN I\n0B41..0B44    ; Extend # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n0B4D          ; Extend # Mn       ORIYA SIGN VIRAMA\n0B55..0B56    ; Extend # Mn   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK\n0B57          ; Extend # Mc       ORIYA AU LENGTH MARK\n0B62..0B63    ; Extend # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n0B82          ; Extend # Mn       TAMIL SIGN ANUSVARA\n0BBE          ; Extend # Mc       TAMIL VOWEL SIGN AA\n0BC0          ; Extend # Mn       TAMIL VOWEL SIGN II\n0BCD          ; Extend # Mn       TAMIL SIGN VIRAMA\n0BD7          ; Extend # Mc       TAMIL AU LENGTH MARK\n0C00          ; Extend # Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE\n0C04          ; Extend # Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE\n0C3C          ; Extend # Mn       TELUGU SIGN NUKTA\n0C3E..0C40    ; Extend # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n0C46..0C48    ; Extend # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n0C4A..0C4D    ; Extend # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA\n0C55..0C56    ; Extend # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n0C62..0C63    ; Extend # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n0C81          ; Extend # Mn       KANNADA SIGN CANDRABINDU\n0CBC          ; Extend # Mn       KANNADA SIGN NUKTA\n0CBF          ; Extend # Mn       KANNADA VOWEL SIGN I\n0CC0          ; Extend # Mc       KANNADA VOWEL SIGN II\n0CC2          ; Extend # Mc       KANNADA VOWEL SIGN UU\n0CC6          ; Extend # Mn       KANNADA VOWEL SIGN E\n0CC7..0CC8    ; Extend # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n0CCA..0CCB    ; Extend # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n0CCC..0CCD    ; Extend # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\n0CD5..0CD6    ; Extend # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n0CE2..0CE3    ; Extend # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n0D00..0D01    ; Extend # Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n0D3B..0D3C    ; Extend # Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n0D3E          ; Extend # Mc       MALAYALAM VOWEL SIGN AA\n0D41..0D44    ; Extend # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n0D4D          ; Extend # Mn       MALAYALAM SIGN VIRAMA\n0D57          ; Extend # Mc       MALAYALAM AU LENGTH MARK\n0D62..0D63    ; Extend # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n0D81          ; Extend # Mn       SINHALA SIGN CANDRABINDU\n0DCA          ; Extend # Mn       SINHALA SIGN AL-LAKUNA\n0DCF          ; Extend # Mc       SINHALA VOWEL SIGN AELA-PILLA\n0DD2..0DD4    ; Extend # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n0DD6          ; Extend # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA\n0DDF          ; Extend # Mc       SINHALA VOWEL SIGN GAYANUKITTA\n0E31          ; Extend # Mn       THAI CHARACTER MAI HAN-AKAT\n0E34..0E3A    ; Extend # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n0E47..0E4E    ; Extend # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\n0EB1          ; Extend # Mn       LAO VOWEL SIGN MAI KAN\n0EB4..0EBC    ; Extend # Mn   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO\n0EC8..0ECE    ; Extend # Mn   [7] LAO TONE MAI EK..LAO YAMAKKAN\n0F18..0F19    ; Extend # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\n0F35          ; Extend # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA\n0F37          ; Extend # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS\n0F39          ; Extend # Mn       TIBETAN MARK TSA -PHRU\n0F71..0F7E    ; Extend # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n0F80..0F84    ; Extend # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\n0F86..0F87    ; Extend # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\n0F8D..0F97    ; Extend # Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n0F99..0FBC    ; Extend # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n0FC6          ; Extend # Mn       TIBETAN SYMBOL PADMA GDAN\n102D..1030    ; Extend # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n1032..1037    ; Extend # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\n1039..103A    ; Extend # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\n103D..103E    ; Extend # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n1058..1059    ; Extend # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n105E..1060    ; Extend # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n1071..1074    ; Extend # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n1082          ; Extend # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n1085..1086    ; Extend # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n108D          ; Extend # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n109D          ; Extend # Mn       MYANMAR VOWEL SIGN AITON AI\n135D..135F    ; Extend # Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\n1712..1714    ; Extend # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\n1715          ; Extend # Mc       TAGALOG SIGN PAMUDPOD\n1732..1733    ; Extend # Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U\n1734          ; Extend # Mc       HANUNOO SIGN PAMUDPOD\n1752..1753    ; Extend # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n1772..1773    ; Extend # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n17B4..17B5    ; Extend # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n17B7..17BD    ; Extend # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n17C6          ; Extend # Mn       KHMER SIGN NIKAHIT\n17C9..17D3    ; Extend # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\n17DD          ; Extend # Mn       KHMER SIGN ATTHACAN\n180B..180D    ; Extend # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n180F          ; Extend # Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR\n1885..1886    ; Extend # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n18A9          ; Extend # Mn       MONGOLIAN LETTER ALI GALI DAGALGA\n1920..1922    ; Extend # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n1927..1928    ; Extend # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n1932          ; Extend # Mn       LIMBU SMALL LETTER ANUSVARA\n1939..193B    ; Extend # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\n1A17..1A18    ; Extend # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n1A1B          ; Extend # Mn       BUGINESE VOWEL SIGN AE\n1A56          ; Extend # Mn       TAI THAM CONSONANT SIGN MEDIAL LA\n1A58..1A5E    ; Extend # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n1A60          ; Extend # Mn       TAI THAM SIGN SAKOT\n1A62          ; Extend # Mn       TAI THAM VOWEL SIGN MAI SAT\n1A65..1A6C    ; Extend # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n1A73..1A7C    ; Extend # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\n1A7F          ; Extend # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT\n1AB0..1ABD    ; Extend # Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\n1ABE          ; Extend # Me       COMBINING PARENTHESES OVERLAY\n1ABF..1ADD    ; Extend # Mn  [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW\n1AE0..1AEB    ; Extend # Mn  [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE\n1B00..1B03    ; Extend # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n1B34          ; Extend # Mn       BALINESE SIGN REREKAN\n1B35          ; Extend # Mc       BALINESE VOWEL SIGN TEDUNG\n1B36..1B3A    ; Extend # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n1B3B          ; Extend # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG\n1B3C          ; Extend # Mn       BALINESE VOWEL SIGN LA LENGA\n1B3D          ; Extend # Mc       BALINESE VOWEL SIGN LA LENGA TEDUNG\n1B42          ; Extend # Mn       BALINESE VOWEL SIGN PEPET\n1B43..1B44    ; Extend # Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG\n1B6B..1B73    ; Extend # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\n1B80..1B81    ; Extend # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n1BA2..1BA5    ; Extend # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n1BA8..1BA9    ; Extend # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n1BAA          ; Extend # Mc       SUNDANESE SIGN PAMAAEH\n1BAB..1BAD    ; Extend # Mn   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA\n1BE6          ; Extend # Mn       BATAK SIGN TOMPI\n1BE8..1BE9    ; Extend # Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n1BED          ; Extend # Mn       BATAK VOWEL SIGN KARO O\n1BEF..1BF1    ; Extend # Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n1BF2..1BF3    ; Extend # Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN\n1C2C..1C33    ; Extend # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n1C36..1C37    ; Extend # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\n1CD0..1CD2    ; Extend # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\n1CD4..1CE0    ; Extend # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n1CE2..1CE8    ; Extend # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n1CED          ; Extend # Mn       VEDIC SIGN TIRYAK\n1CF4          ; Extend # Mn       VEDIC TONE CANDRA ABOVE\n1CF8..1CF9    ; Extend # Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n1DC0..1DFF    ; Extend # Mn  [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\n200C          ; Extend # Cf       ZERO WIDTH NON-JOINER\n20D0..20DC    ; Extend # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n20DD..20E0    ; Extend # Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH\n20E1          ; Extend # Mn       COMBINING LEFT RIGHT ARROW ABOVE\n20E2..20E4    ; Extend # Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE\n20E5..20F0    ; Extend # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\n2CEF..2CF1    ; Extend # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\n2D7F          ; Extend # Mn       TIFINAGH CONSONANT JOINER\n2DE0..2DFF    ; Extend # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\n302A..302D    ; Extend # Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n302E..302F    ; Extend # Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\n3099..309A    ; Extend # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\nA66F          ; Extend # Mn       COMBINING CYRILLIC VZMET\nA670..A672    ; Extend # Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN\nA674..A67D    ; Extend # Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\nA69E..A69F    ; Extend # Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\nA6F0..A6F1    ; Extend # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\nA802          ; Extend # Mn       SYLOTI NAGRI SIGN DVISVARA\nA806          ; Extend # Mn       SYLOTI NAGRI SIGN HASANTA\nA80B          ; Extend # Mn       SYLOTI NAGRI SIGN ANUSVARA\nA825..A826    ; Extend # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\nA82C          ; Extend # Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA\nA8C4..A8C5    ; Extend # Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\nA8E0..A8F1    ; Extend # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\nA8FF          ; Extend # Mn       DEVANAGARI VOWEL SIGN AY\nA926..A92D    ; Extend # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\nA947..A951    ; Extend # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\nA953          ; Extend # Mc       REJANG VIRAMA\nA980..A982    ; Extend # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\nA9B3          ; Extend # Mn       JAVANESE SIGN CECAK TELU\nA9B6..A9B9    ; Extend # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\nA9BC..A9BD    ; Extend # Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET\nA9C0          ; Extend # Mc       JAVANESE PANGKON\nA9E5          ; Extend # Mn       MYANMAR SIGN SHAN SAW\nAA29..AA2E    ; Extend # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\nAA31..AA32    ; Extend # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\nAA35..AA36    ; Extend # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\nAA43          ; Extend # Mn       CHAM CONSONANT SIGN FINAL NG\nAA4C          ; Extend # Mn       CHAM CONSONANT SIGN FINAL M\nAA7C          ; Extend # Mn       MYANMAR SIGN TAI LAING TONE-2\nAAB0          ; Extend # Mn       TAI VIET MAI KANG\nAAB2..AAB4    ; Extend # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\nAAB7..AAB8    ; Extend # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\nAABE..AABF    ; Extend # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\nAAC1          ; Extend # Mn       TAI VIET TONE MAI THO\nAAEC..AAED    ; Extend # Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\nAAF6          ; Extend # Mn       MEETEI MAYEK VIRAMA\nABE5          ; Extend # Mn       MEETEI MAYEK VOWEL SIGN ANAP\nABE8          ; Extend # Mn       MEETEI MAYEK VOWEL SIGN UNAP\nABED          ; Extend # Mn       MEETEI MAYEK APUN IYEK\nFB1E          ; Extend # Mn       HEBREW POINT JUDEO-SPANISH VARIKA\nFE00..FE0F    ; Extend # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\nFE20..FE2F    ; Extend # Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\nFF9E..FF9F    ; Extend # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\n101FD         ; Extend # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\n102E0         ; Extend # Mn       COPTIC EPACT THOUSANDS MARK\n10376..1037A  ; Extend # Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n10A01..10A03  ; Extend # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n10A05..10A06  ; Extend # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n10A0C..10A0F  ; Extend # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n10A38..10A3A  ; Extend # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\n10A3F         ; Extend # Mn       KHAROSHTHI VIRAMA\n10AE5..10AE6  ; Extend # Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\n10D24..10D27  ; Extend # Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n10D69..10D6D  ; Extend # Mn   [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK\n10EAB..10EAC  ; Extend # Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK\n10EFA..10EFF  ; Extend # Mn   [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA\n10F46..10F50  ; Extend # Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW\n10F82..10F85  ; Extend # Mn   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW\n11001         ; Extend # Mn       BRAHMI SIGN ANUSVARA\n11038..11046  ; Extend # Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\n11070         ; Extend # Mn       BRAHMI SIGN OLD TAMIL VIRAMA\n11073..11074  ; Extend # Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O\n1107F..11081  ; Extend # Mn   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA\n110B3..110B6  ; Extend # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n110B9..110BA  ; Extend # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\n110C2         ; Extend # Mn       KAITHI VOWEL SIGN VOCALIC R\n11100..11102  ; Extend # Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n11127..1112B  ; Extend # Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n1112D..11134  ; Extend # Mn   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA\n11173         ; Extend # Mn       MAHAJANI SIGN NUKTA\n11180..11181  ; Extend # Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n111B6..111BE  ; Extend # Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n111C0         ; Extend # Mc       SHARADA SIGN VIRAMA\n111C9..111CC  ; Extend # Mn   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK\n111CF         ; Extend # Mn       SHARADA SIGN INVERTED CANDRABINDU\n1122F..11231  ; Extend # Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n11234         ; Extend # Mn       KHOJKI SIGN ANUSVARA\n11235         ; Extend # Mc       KHOJKI SIGN VIRAMA\n11236..11237  ; Extend # Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\n1123E         ; Extend # Mn       KHOJKI SIGN SUKUN\n11241         ; Extend # Mn       KHOJKI VOWEL SIGN VOCALIC R\n112DF         ; Extend # Mn       KHUDAWADI SIGN ANUSVARA\n112E3..112EA  ; Extend # Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\n11300..11301  ; Extend # Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n1133B..1133C  ; Extend # Mn   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA\n1133E         ; Extend # Mc       GRANTHA VOWEL SIGN AA\n11340         ; Extend # Mn       GRANTHA VOWEL SIGN II\n1134D         ; Extend # Mc       GRANTHA SIGN VIRAMA\n11357         ; Extend # Mc       GRANTHA AU LENGTH MARK\n11366..1136C  ; Extend # Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\n11370..11374  ; Extend # Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\n113B8         ; Extend # Mc       TULU-TIGALARI VOWEL SIGN AA\n113BB..113C0  ; Extend # Mn   [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL\n113C2         ; Extend # Mc       TULU-TIGALARI VOWEL SIGN EE\n113C5         ; Extend # Mc       TULU-TIGALARI VOWEL SIGN AI\n113C7..113C9  ; Extend # Mc   [3] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI AU LENGTH MARK\n113CE         ; Extend # Mn       TULU-TIGALARI SIGN VIRAMA\n113CF         ; Extend # Mc       TULU-TIGALARI SIGN LOOPED VIRAMA\n113D0         ; Extend # Mn       TULU-TIGALARI CONJOINER\n113D2         ; Extend # Mn       TULU-TIGALARI GEMINATION MARK\n113E1..113E2  ; Extend # Mn   [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA\n11438..1143F  ; Extend # Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n11442..11444  ; Extend # Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\n11446         ; Extend # Mn       NEWA SIGN NUKTA\n1145E         ; Extend # Mn       NEWA SANDHI MARK\n114B0         ; Extend # Mc       TIRHUTA VOWEL SIGN AA\n114B3..114B8  ; Extend # Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n114BA         ; Extend # Mn       TIRHUTA VOWEL SIGN SHORT E\n114BD         ; Extend # Mc       TIRHUTA VOWEL SIGN SHORT O\n114BF..114C0  ; Extend # Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n114C2..114C3  ; Extend # Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\n115AF         ; Extend # Mc       SIDDHAM VOWEL SIGN AA\n115B2..115B5  ; Extend # Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n115BC..115BD  ; Extend # Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n115BF..115C0  ; Extend # Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\n115DC..115DD  ; Extend # Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n11633..1163A  ; Extend # Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n1163D         ; Extend # Mn       MODI SIGN ANUSVARA\n1163F..11640  ; Extend # Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\n116AB         ; Extend # Mn       TAKRI SIGN ANUSVARA\n116AD         ; Extend # Mn       TAKRI VOWEL SIGN AA\n116B0..116B5  ; Extend # Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n116B6         ; Extend # Mc       TAKRI SIGN VIRAMA\n116B7         ; Extend # Mn       TAKRI SIGN NUKTA\n1171D         ; Extend # Mn       AHOM CONSONANT SIGN MEDIAL LA\n1171F         ; Extend # Mn       AHOM CONSONANT SIGN MEDIAL LIGATING RA\n11722..11725  ; Extend # Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n11727..1172B  ; Extend # Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\n1182F..11837  ; Extend # Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA\n11839..1183A  ; Extend # Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA\n11930         ; Extend # Mc       DIVES AKURU VOWEL SIGN AA\n1193B..1193C  ; Extend # Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU\n1193D         ; Extend # Mc       DIVES AKURU SIGN HALANTA\n1193E         ; Extend # Mn       DIVES AKURU VIRAMA\n11943         ; Extend # Mn       DIVES AKURU SIGN NUKTA\n119D4..119D7  ; Extend # Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR\n119DA..119DB  ; Extend # Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI\n119E0         ; Extend # Mn       NANDINAGARI SIGN VIRAMA\n11A01..11A0A  ; Extend # Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n11A33..11A38  ; Extend # Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\n11A3B..11A3E  ; Extend # Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n11A47         ; Extend # Mn       ZANABAZAR SQUARE SUBJOINER\n11A51..11A56  ; Extend # Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n11A59..11A5B  ; Extend # Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n11A8A..11A96  ; Extend # Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n11A98..11A99  ; Extend # Mn   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER\n11B60         ; Extend # Mn       SHARADA VOWEL SIGN OE\n11B62..11B64  ; Extend # Mn   [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E\n11B66         ; Extend # Mn       SHARADA VOWEL SIGN CANDRA E\n11C30..11C36  ; Extend # Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n11C38..11C3D  ; Extend # Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n11C3F         ; Extend # Mn       BHAIKSUKI SIGN VIRAMA\n11C92..11CA7  ; Extend # Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n11CAA..11CB0  ; Extend # Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n11CB2..11CB3  ; Extend # Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n11CB5..11CB6  ; Extend # Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n11D31..11D36  ; Extend # Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n11D3A         ; Extend # Mn       MASARAM GONDI VOWEL SIGN E\n11D3C..11D3D  ; Extend # Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n11D3F..11D45  ; Extend # Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\n11D47         ; Extend # Mn       MASARAM GONDI RA-KARA\n11D90..11D91  ; Extend # Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI\n11D95         ; Extend # Mn       GUNJALA GONDI SIGN ANUSVARA\n11D97         ; Extend # Mn       GUNJALA GONDI VIRAMA\n11EF3..11EF4  ; Extend # Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U\n11F00..11F01  ; Extend # Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA\n11F36..11F3A  ; Extend # Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R\n11F40         ; Extend # Mn       KAWI VOWEL SIGN EU\n11F41         ; Extend # Mc       KAWI SIGN KILLER\n11F42         ; Extend # Mn       KAWI CONJOINER\n11F5A         ; Extend # Mn       KAWI SIGN NUKTA\n13440         ; Extend # Mn       EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY\n13447..13455  ; Extend # Mn  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED\n1611E..16129  ; Extend # Mn  [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK\n1612D..1612F  ; Extend # Mn   [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA\n16AF0..16AF4  ; Extend # Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\n16B30..16B36  ; Extend # Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\n16F4F         ; Extend # Mn       MIAO SIGN CONSONANT MODIFIER BAR\n16F8F..16F92  ; Extend # Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n16FE4         ; Extend # Mn       KHITAN SMALL SCRIPT FILLER\n16FF0..16FF1  ; Extend # Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY\n1BC9D..1BC9E  ; Extend # Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\n1CF00..1CF2D  ; Extend # Mn  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT\n1CF30..1CF46  ; Extend # Mn  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG\n1D165..1D166  ; Extend # Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\n1D167..1D169  ; Extend # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\n1D16D..1D172  ; Extend # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5\n1D17B..1D182  ; Extend # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\n1D185..1D18B  ; Extend # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\n1D1AA..1D1AD  ; Extend # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\n1D242..1D244  ; Extend # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\n1DA00..1DA36  ; Extend # Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\n1DA3B..1DA6C  ; Extend # Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\n1DA75         ; Extend # Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\n1DA84         ; Extend # Mn       SIGNWRITING LOCATION HEAD NECK\n1DA9B..1DA9F  ; Extend # Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\n1DAA1..1DAAF  ; Extend # Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\n1E000..1E006  ; Extend # Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n1E008..1E018  ; Extend # Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n1E01B..1E021  ; Extend # Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n1E023..1E024  ; Extend # Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n1E026..1E02A  ; Extend # Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n1E08F         ; Extend # Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n1E130..1E136  ; Extend # Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D\n1E2AE         ; Extend # Mn       TOTO SIGN RISING TONE\n1E2EC..1E2EF  ; Extend # Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI\n1E4EC..1E4EF  ; Extend # Mn   [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH\n1E5EE..1E5EF  ; Extend # Mn   [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR\n1E6E3         ; Extend # Mn       TAI YO SIGN UE\n1E6E6         ; Extend # Mn       TAI YO SIGN AU\n1E6EE..1E6EF  ; Extend # Mn   [2] TAI YO SIGN AY..TAI YO SIGN ANG\n1E6F5         ; Extend # Mn       TAI YO SIGN OM\n1E8D0..1E8D6  ; Extend # Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\n1E944..1E94A  ; Extend # Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\n1F3FB..1F3FF  ; Extend # Sk   [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6\nE0020..E007F  ; Extend # Cf  [96] TAG SPACE..CANCEL TAG\nE0100..E01EF  ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\n\n# Total code points: 2237\n\n# ================================================\n\n1F1E6..1F1FF  ; Regional_Indicator # So  [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z\n\n# Total code points: 26\n\n# ================================================\n\n0903          ; SpacingMark # Mc       DEVANAGARI SIGN VISARGA\n093B          ; SpacingMark # Mc       DEVANAGARI VOWEL SIGN OOE\n093E..0940    ; SpacingMark # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\n0949..094C    ; SpacingMark # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\n094E..094F    ; SpacingMark # Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\n0982..0983    ; SpacingMark # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\n09BF..09C0    ; SpacingMark # Mc   [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II\n09C7..09C8    ; SpacingMark # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\n09CB..09CC    ; SpacingMark # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\n0A03          ; SpacingMark # Mc       GURMUKHI SIGN VISARGA\n0A3E..0A40    ; SpacingMark # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\n0A83          ; SpacingMark # Mc       GUJARATI SIGN VISARGA\n0ABE..0AC0    ; SpacingMark # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\n0AC9          ; SpacingMark # Mc       GUJARATI VOWEL SIGN CANDRA O\n0ACB..0ACC    ; SpacingMark # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\n0B02..0B03    ; SpacingMark # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\n0B40          ; SpacingMark # Mc       ORIYA VOWEL SIGN II\n0B47..0B48    ; SpacingMark # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\n0B4B..0B4C    ; SpacingMark # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\n0BBF          ; SpacingMark # Mc       TAMIL VOWEL SIGN I\n0BC1..0BC2    ; SpacingMark # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\n0BC6..0BC8    ; SpacingMark # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\n0BCA..0BCC    ; SpacingMark # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\n0C01..0C03    ; SpacingMark # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\n0C41..0C44    ; SpacingMark # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\n0C82..0C83    ; SpacingMark # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\n0CBE          ; SpacingMark # Mc       KANNADA VOWEL SIGN AA\n0CC1          ; SpacingMark # Mc       KANNADA VOWEL SIGN U\n0CC3..0CC4    ; SpacingMark # Mc   [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR\n0CF3          ; SpacingMark # Mc       KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT\n0D02..0D03    ; SpacingMark # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\n0D3F..0D40    ; SpacingMark # Mc   [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II\n0D46..0D48    ; SpacingMark # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\n0D4A..0D4C    ; SpacingMark # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\n0D82..0D83    ; SpacingMark # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\n0DD0..0DD1    ; SpacingMark # Mc   [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\n0DD8..0DDE    ; SpacingMark # Mc   [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA\n0DF2..0DF3    ; SpacingMark # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\n0E33          ; SpacingMark # Lo       THAI CHARACTER SARA AM\n0EB3          ; SpacingMark # Lo       LAO VOWEL SIGN AM\n0F3E..0F3F    ; SpacingMark # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES\n0F7F          ; SpacingMark # Mc       TIBETAN SIGN RNAM BCAD\n1031          ; SpacingMark # Mc       MYANMAR VOWEL SIGN E\n103B..103C    ; SpacingMark # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\n1056..1057    ; SpacingMark # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\n1084          ; SpacingMark # Mc       MYANMAR VOWEL SIGN SHAN E\n17B6          ; SpacingMark # Mc       KHMER VOWEL SIGN AA\n17BE..17C5    ; SpacingMark # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\n17C7..17C8    ; SpacingMark # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\n1923..1926    ; SpacingMark # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\n1929..192B    ; SpacingMark # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\n1930..1931    ; SpacingMark # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\n1933..1938    ; SpacingMark # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\n1A19..1A1A    ; SpacingMark # Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\n1A55          ; SpacingMark # Mc       TAI THAM CONSONANT SIGN MEDIAL RA\n1A57          ; SpacingMark # Mc       TAI THAM CONSONANT SIGN LA TANG LAI\n1A6D..1A72    ; SpacingMark # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\n1B04          ; SpacingMark # Mc       BALINESE SIGN BISAH\n1B3E..1B41    ; SpacingMark # Mc   [4] BALINESE VOWEL SIGN TALING..BALINESE VOWEL SIGN TALING REPA TEDUNG\n1B82          ; SpacingMark # Mc       SUNDANESE SIGN PANGWISAD\n1BA1          ; SpacingMark # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL\n1BA6..1BA7    ; SpacingMark # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\n1BE7          ; SpacingMark # Mc       BATAK VOWEL SIGN E\n1BEA..1BEC    ; SpacingMark # Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\n1BEE          ; SpacingMark # Mc       BATAK VOWEL SIGN U\n1C24..1C2B    ; SpacingMark # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\n1C34..1C35    ; SpacingMark # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\n1CE1          ; SpacingMark # Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\n1CF7          ; SpacingMark # Mc       VEDIC SIGN ATIKRAMA\nA823..A824    ; SpacingMark # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\nA827          ; SpacingMark # Mc       SYLOTI NAGRI VOWEL SIGN OO\nA880..A881    ; SpacingMark # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\nA8B4..A8C3    ; SpacingMark # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\nA952          ; SpacingMark # Mc       REJANG CONSONANT SIGN H\nA983          ; SpacingMark # Mc       JAVANESE SIGN WIGNYAN\nA9B4..A9B5    ; SpacingMark # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\nA9BA..A9BB    ; SpacingMark # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\nA9BE..A9BF    ; SpacingMark # Mc   [2] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE CONSONANT SIGN CAKRA\nAA2F..AA30    ; SpacingMark # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\nAA33..AA34    ; SpacingMark # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\nAA4D          ; SpacingMark # Mc       CHAM CONSONANT SIGN FINAL H\nAAEB          ; SpacingMark # Mc       MEETEI MAYEK VOWEL SIGN II\nAAEE..AAEF    ; SpacingMark # Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\nAAF5          ; SpacingMark # Mc       MEETEI MAYEK VOWEL SIGN VISARGA\nABE3..ABE4    ; SpacingMark # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\nABE6..ABE7    ; SpacingMark # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\nABE9..ABEA    ; SpacingMark # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\nABEC          ; SpacingMark # Mc       MEETEI MAYEK LUM IYEK\n11000         ; SpacingMark # Mc       BRAHMI SIGN CANDRABINDU\n11002         ; SpacingMark # Mc       BRAHMI SIGN VISARGA\n11082         ; SpacingMark # Mc       KAITHI SIGN VISARGA\n110B0..110B2  ; SpacingMark # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\n110B7..110B8  ; SpacingMark # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\n1112C         ; SpacingMark # Mc       CHAKMA VOWEL SIGN E\n11145..11146  ; SpacingMark # Mc   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI\n11182         ; SpacingMark # Mc       SHARADA SIGN VISARGA\n111B3..111B5  ; SpacingMark # Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\n111BF         ; SpacingMark # Mc       SHARADA VOWEL SIGN AU\n111CE         ; SpacingMark # Mc       SHARADA VOWEL SIGN PRISHTHAMATRA E\n1122C..1122E  ; SpacingMark # Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\n11232..11233  ; SpacingMark # Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\n112E0..112E2  ; SpacingMark # Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\n11302..11303  ; SpacingMark # Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\n1133F         ; SpacingMark # Mc       GRANTHA VOWEL SIGN I\n11341..11344  ; SpacingMark # Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\n11347..11348  ; SpacingMark # Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\n1134B..1134C  ; SpacingMark # Mc   [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU\n11362..11363  ; SpacingMark # Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\n113B9..113BA  ; SpacingMark # Mc   [2] TULU-TIGALARI VOWEL SIGN I..TULU-TIGALARI VOWEL SIGN II\n113CA         ; SpacingMark # Mc       TULU-TIGALARI SIGN CANDRA ANUNASIKA\n113CC..113CD  ; SpacingMark # Mc   [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA\n11435..11437  ; SpacingMark # Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\n11440..11441  ; SpacingMark # Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\n11445         ; SpacingMark # Mc       NEWA SIGN VISARGA\n114B1..114B2  ; SpacingMark # Mc   [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II\n114B9         ; SpacingMark # Mc       TIRHUTA VOWEL SIGN E\n114BB..114BC  ; SpacingMark # Mc   [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O\n114BE         ; SpacingMark # Mc       TIRHUTA VOWEL SIGN AU\n114C1         ; SpacingMark # Mc       TIRHUTA SIGN VISARGA\n115B0..115B1  ; SpacingMark # Mc   [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II\n115B8..115BB  ; SpacingMark # Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\n115BE         ; SpacingMark # Mc       SIDDHAM SIGN VISARGA\n11630..11632  ; SpacingMark # Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\n1163B..1163C  ; SpacingMark # Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\n1163E         ; SpacingMark # Mc       MODI SIGN VISARGA\n116AC         ; SpacingMark # Mc       TAKRI SIGN VISARGA\n116AE..116AF  ; SpacingMark # Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\n1171E         ; SpacingMark # Mc       AHOM CONSONANT SIGN MEDIAL RA\n11726         ; SpacingMark # Mc       AHOM VOWEL SIGN E\n1182C..1182E  ; SpacingMark # Mc   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II\n11838         ; SpacingMark # Mc       DOGRA SIGN VISARGA\n11931..11935  ; SpacingMark # Mc   [5] DIVES AKURU VOWEL SIGN I..DIVES AKURU VOWEL SIGN E\n11937..11938  ; SpacingMark # Mc   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O\n11940         ; SpacingMark # Mc       DIVES AKURU MEDIAL YA\n11942         ; SpacingMark # Mc       DIVES AKURU MEDIAL RA\n119D1..119D3  ; SpacingMark # Mc   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II\n119DC..119DF  ; SpacingMark # Mc   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA\n119E4         ; SpacingMark # Mc       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E\n11A39         ; SpacingMark # Mc       ZANABAZAR SQUARE SIGN VISARGA\n11A57..11A58  ; SpacingMark # Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\n11A97         ; SpacingMark # Mc       SOYOMBO SIGN VISARGA\n11B61         ; SpacingMark # Mc       SHARADA VOWEL SIGN OOE\n11B65         ; SpacingMark # Mc       SHARADA VOWEL SIGN SHORT O\n11B67         ; SpacingMark # Mc       SHARADA VOWEL SIGN CANDRA O\n11C2F         ; SpacingMark # Mc       BHAIKSUKI VOWEL SIGN AA\n11C3E         ; SpacingMark # Mc       BHAIKSUKI SIGN VISARGA\n11CA9         ; SpacingMark # Mc       MARCHEN SUBJOINED LETTER YA\n11CB1         ; SpacingMark # Mc       MARCHEN VOWEL SIGN I\n11CB4         ; SpacingMark # Mc       MARCHEN VOWEL SIGN O\n11D8A..11D8E  ; SpacingMark # Mc   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU\n11D93..11D94  ; SpacingMark # Mc   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU\n11D96         ; SpacingMark # Mc       GUNJALA GONDI SIGN VISARGA\n11EF5..11EF6  ; SpacingMark # Mc   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O\n11F03         ; SpacingMark # Mc       KAWI SIGN VISARGA\n11F34..11F35  ; SpacingMark # Mc   [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA\n11F3E..11F3F  ; SpacingMark # Mc   [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI\n1612A..1612C  ; SpacingMark # Mc   [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA\n16F51..16F87  ; SpacingMark # Mc  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI\n\n# Total code points: 381\n\n# ================================================\n\n1100..115F    ; L # Lo  [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER\nA960..A97C    ; L # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\n\n# Total code points: 125\n\n# ================================================\n\n1160..11A7    ; V # Lo  [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE\nD7B0..D7C6    ; V # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\n16D63         ; V # Lo       KIRAT RAI VOWEL SIGN AA\n16D67..16D6A  ; V # Lo   [4] KIRAT RAI VOWEL SIGN E..KIRAT RAI VOWEL SIGN AU\n\n# Total code points: 100\n\n# ================================================\n\n11A8..11FF    ; T # Lo  [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN\nD7CB..D7FB    ; T # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\n\n# Total code points: 137\n\n# ================================================\n\nAC00          ; LV # Lo       HANGUL SYLLABLE GA\nAC1C          ; LV # Lo       HANGUL SYLLABLE GAE\nAC38          ; LV # Lo       HANGUL SYLLABLE GYA\nAC54          ; LV # Lo       HANGUL SYLLABLE GYAE\nAC70          ; LV # Lo       HANGUL SYLLABLE GEO\nAC8C          ; LV # Lo       HANGUL SYLLABLE GE\nACA8          ; LV # Lo       HANGUL SYLLABLE GYEO\nACC4          ; LV # Lo       HANGUL SYLLABLE GYE\nACE0          ; LV # Lo       HANGUL SYLLABLE GO\nACFC          ; LV # Lo       HANGUL SYLLABLE GWA\nAD18          ; LV # Lo       HANGUL SYLLABLE GWAE\nAD34          ; LV # Lo       HANGUL SYLLABLE GOE\nAD50          ; LV # Lo       HANGUL SYLLABLE GYO\nAD6C          ; LV # Lo       HANGUL SYLLABLE GU\nAD88          ; LV # Lo       HANGUL SYLLABLE GWEO\nADA4          ; LV # Lo       HANGUL SYLLABLE GWE\nADC0          ; LV # Lo       HANGUL SYLLABLE GWI\nADDC          ; LV # Lo       HANGUL SYLLABLE GYU\nADF8          ; LV # Lo       HANGUL SYLLABLE GEU\nAE14          ; LV # Lo       HANGUL SYLLABLE GYI\nAE30          ; LV # Lo       HANGUL SYLLABLE GI\nAE4C          ; LV # Lo       HANGUL SYLLABLE GGA\nAE68          ; LV # Lo       HANGUL SYLLABLE GGAE\nAE84          ; LV # Lo       HANGUL SYLLABLE GGYA\nAEA0          ; LV # Lo       HANGUL SYLLABLE GGYAE\nAEBC          ; LV # Lo       HANGUL SYLLABLE GGEO\nAED8          ; LV # Lo       HANGUL SYLLABLE GGE\nAEF4          ; LV # Lo       HANGUL SYLLABLE GGYEO\nAF10          ; LV # Lo       HANGUL SYLLABLE GGYE\nAF2C          ; LV # Lo       HANGUL SYLLABLE GGO\nAF48          ; LV # Lo       HANGUL SYLLABLE GGWA\nAF64          ; LV # Lo       HANGUL SYLLABLE GGWAE\nAF80          ; LV # Lo       HANGUL SYLLABLE GGOE\nAF9C          ; LV # Lo       HANGUL SYLLABLE GGYO\nAFB8          ; LV # Lo       HANGUL SYLLABLE GGU\nAFD4          ; LV # Lo       HANGUL SYLLABLE GGWEO\nAFF0          ; LV # Lo       HANGUL SYLLABLE GGWE\nB00C          ; LV # Lo       HANGUL SYLLABLE GGWI\nB028          ; LV # Lo       HANGUL SYLLABLE GGYU\nB044          ; LV # Lo       HANGUL SYLLABLE GGEU\nB060          ; LV # Lo       HANGUL SYLLABLE GGYI\nB07C          ; LV # Lo       HANGUL SYLLABLE GGI\nB098          ; LV # Lo       HANGUL SYLLABLE NA\nB0B4          ; LV # Lo       HANGUL SYLLABLE NAE\nB0D0          ; LV # Lo       HANGUL SYLLABLE NYA\nB0EC          ; LV # Lo       HANGUL SYLLABLE NYAE\nB108          ; LV # Lo       HANGUL SYLLABLE NEO\nB124          ; LV # Lo       HANGUL SYLLABLE NE\nB140          ; LV # Lo       HANGUL SYLLABLE NYEO\nB15C          ; LV # Lo       HANGUL SYLLABLE NYE\nB178          ; LV # Lo       HANGUL SYLLABLE NO\nB194          ; LV # Lo       HANGUL SYLLABLE NWA\nB1B0          ; LV # Lo       HANGUL SYLLABLE NWAE\nB1CC          ; LV # Lo       HANGUL SYLLABLE NOE\nB1E8          ; LV # Lo       HANGUL SYLLABLE NYO\nB204          ; LV # Lo       HANGUL SYLLABLE NU\nB220          ; LV # Lo       HANGUL SYLLABLE NWEO\nB23C          ; LV # Lo       HANGUL SYLLABLE NWE\nB258          ; LV # Lo       HANGUL SYLLABLE NWI\nB274          ; LV # Lo       HANGUL SYLLABLE NYU\nB290          ; LV # Lo       HANGUL SYLLABLE NEU\nB2AC          ; LV # Lo       HANGUL SYLLABLE NYI\nB2C8          ; LV # Lo       HANGUL SYLLABLE NI\nB2E4          ; LV # Lo       HANGUL SYLLABLE DA\nB300          ; LV # Lo       HANGUL SYLLABLE DAE\nB31C          ; LV # Lo       HANGUL SYLLABLE DYA\nB338          ; LV # Lo       HANGUL SYLLABLE DYAE\nB354          ; LV # Lo       HANGUL SYLLABLE DEO\nB370          ; LV # Lo       HANGUL SYLLABLE DE\nB38C          ; LV # Lo       HANGUL SYLLABLE DYEO\nB3A8          ; LV # Lo       HANGUL SYLLABLE DYE\nB3C4          ; LV # Lo       HANGUL SYLLABLE DO\nB3E0          ; LV # Lo       HANGUL SYLLABLE DWA\nB3FC          ; LV # Lo       HANGUL SYLLABLE DWAE\nB418          ; LV # Lo       HANGUL SYLLABLE DOE\nB434          ; LV # Lo       HANGUL SYLLABLE DYO\nB450          ; LV # Lo       HANGUL SYLLABLE DU\nB46C          ; LV # Lo       HANGUL SYLLABLE DWEO\nB488          ; LV # Lo       HANGUL SYLLABLE DWE\nB4A4          ; LV # Lo       HANGUL SYLLABLE DWI\nB4C0          ; LV # Lo       HANGUL SYLLABLE DYU\nB4DC          ; LV # Lo       HANGUL SYLLABLE DEU\nB4F8          ; LV # Lo       HANGUL SYLLABLE DYI\nB514          ; LV # Lo       HANGUL SYLLABLE DI\nB530          ; LV # Lo       HANGUL SYLLABLE DDA\nB54C          ; LV # Lo       HANGUL SYLLABLE DDAE\nB568          ; LV # Lo       HANGUL SYLLABLE DDYA\nB584          ; LV # Lo       HANGUL SYLLABLE DDYAE\nB5A0          ; LV # Lo       HANGUL SYLLABLE DDEO\nB5BC          ; LV # Lo       HANGUL SYLLABLE DDE\nB5D8          ; LV # Lo       HANGUL SYLLABLE DDYEO\nB5F4          ; LV # Lo       HANGUL SYLLABLE DDYE\nB610          ; LV # Lo       HANGUL SYLLABLE DDO\nB62C          ; LV # Lo       HANGUL SYLLABLE DDWA\nB648          ; LV # Lo       HANGUL SYLLABLE DDWAE\nB664          ; LV # Lo       HANGUL SYLLABLE DDOE\nB680          ; LV # Lo       HANGUL SYLLABLE DDYO\nB69C          ; LV # Lo       HANGUL SYLLABLE DDU\nB6B8          ; LV # Lo       HANGUL SYLLABLE DDWEO\nB6D4          ; LV # Lo       HANGUL SYLLABLE DDWE\nB6F0          ; LV # Lo       HANGUL SYLLABLE DDWI\nB70C          ; LV # Lo       HANGUL SYLLABLE DDYU\nB728          ; LV # Lo       HANGUL SYLLABLE DDEU\nB744          ; LV # Lo       HANGUL SYLLABLE DDYI\nB760          ; LV # Lo       HANGUL SYLLABLE DDI\nB77C          ; LV # Lo       HANGUL SYLLABLE RA\nB798          ; LV # Lo       HANGUL SYLLABLE RAE\nB7B4          ; LV # Lo       HANGUL SYLLABLE RYA\nB7D0          ; LV # Lo       HANGUL SYLLABLE RYAE\nB7EC          ; LV # Lo       HANGUL SYLLABLE REO\nB808          ; LV # Lo       HANGUL SYLLABLE RE\nB824          ; LV # Lo       HANGUL SYLLABLE RYEO\nB840          ; LV # Lo       HANGUL SYLLABLE RYE\nB85C          ; LV # Lo       HANGUL SYLLABLE RO\nB878          ; LV # Lo       HANGUL SYLLABLE RWA\nB894          ; LV # Lo       HANGUL SYLLABLE RWAE\nB8B0          ; LV # Lo       HANGUL SYLLABLE ROE\nB8CC          ; LV # Lo       HANGUL SYLLABLE RYO\nB8E8          ; LV # Lo       HANGUL SYLLABLE RU\nB904          ; LV # Lo       HANGUL SYLLABLE RWEO\nB920          ; LV # Lo       HANGUL SYLLABLE RWE\nB93C          ; LV # Lo       HANGUL SYLLABLE RWI\nB958          ; LV # Lo       HANGUL SYLLABLE RYU\nB974          ; LV # Lo       HANGUL SYLLABLE REU\nB990          ; LV # Lo       HANGUL SYLLABLE RYI\nB9AC          ; LV # Lo       HANGUL SYLLABLE RI\nB9C8          ; LV # Lo       HANGUL SYLLABLE MA\nB9E4          ; LV # Lo       HANGUL SYLLABLE MAE\nBA00          ; LV # Lo       HANGUL SYLLABLE MYA\nBA1C          ; LV # Lo       HANGUL SYLLABLE MYAE\nBA38          ; LV # Lo       HANGUL SYLLABLE MEO\nBA54          ; LV # Lo       HANGUL SYLLABLE ME\nBA70          ; LV # Lo       HANGUL SYLLABLE MYEO\nBA8C          ; LV # Lo       HANGUL SYLLABLE MYE\nBAA8          ; LV # Lo       HANGUL SYLLABLE MO\nBAC4          ; LV # Lo       HANGUL SYLLABLE MWA\nBAE0          ; LV # Lo       HANGUL SYLLABLE MWAE\nBAFC          ; LV # Lo       HANGUL SYLLABLE MOE\nBB18          ; LV # Lo       HANGUL SYLLABLE MYO\nBB34          ; LV # Lo       HANGUL SYLLABLE MU\nBB50          ; LV # Lo       HANGUL SYLLABLE MWEO\nBB6C          ; LV # Lo       HANGUL SYLLABLE MWE\nBB88          ; LV # Lo       HANGUL SYLLABLE MWI\nBBA4          ; LV # Lo       HANGUL SYLLABLE MYU\nBBC0          ; LV # Lo       HANGUL SYLLABLE MEU\nBBDC          ; LV # Lo       HANGUL SYLLABLE MYI\nBBF8          ; LV # Lo       HANGUL SYLLABLE MI\nBC14          ; LV # Lo       HANGUL SYLLABLE BA\nBC30          ; LV # Lo       HANGUL SYLLABLE BAE\nBC4C          ; LV # Lo       HANGUL SYLLABLE BYA\nBC68          ; LV # Lo       HANGUL SYLLABLE BYAE\nBC84          ; LV # Lo       HANGUL SYLLABLE BEO\nBCA0          ; LV # Lo       HANGUL SYLLABLE BE\nBCBC          ; LV # Lo       HANGUL SYLLABLE BYEO\nBCD8          ; LV # Lo       HANGUL SYLLABLE BYE\nBCF4          ; LV # Lo       HANGUL SYLLABLE BO\nBD10          ; LV # Lo       HANGUL SYLLABLE BWA\nBD2C          ; LV # Lo       HANGUL SYLLABLE BWAE\nBD48          ; LV # Lo       HANGUL SYLLABLE BOE\nBD64          ; LV # Lo       HANGUL SYLLABLE BYO\nBD80          ; LV # Lo       HANGUL SYLLABLE BU\nBD9C          ; LV # Lo       HANGUL SYLLABLE BWEO\nBDB8          ; LV # Lo       HANGUL SYLLABLE BWE\nBDD4          ; LV # Lo       HANGUL SYLLABLE BWI\nBDF0          ; LV # Lo       HANGUL SYLLABLE BYU\nBE0C          ; LV # Lo       HANGUL SYLLABLE BEU\nBE28          ; LV # Lo       HANGUL SYLLABLE BYI\nBE44          ; LV # Lo       HANGUL SYLLABLE BI\nBE60          ; LV # Lo       HANGUL SYLLABLE BBA\nBE7C          ; LV # Lo       HANGUL SYLLABLE BBAE\nBE98          ; LV # Lo       HANGUL SYLLABLE BBYA\nBEB4          ; LV # Lo       HANGUL SYLLABLE BBYAE\nBED0          ; LV # Lo       HANGUL SYLLABLE BBEO\nBEEC          ; LV # Lo       HANGUL SYLLABLE BBE\nBF08          ; LV # Lo       HANGUL SYLLABLE BBYEO\nBF24          ; LV # Lo       HANGUL SYLLABLE BBYE\nBF40          ; LV # Lo       HANGUL SYLLABLE BBO\nBF5C          ; LV # Lo       HANGUL SYLLABLE BBWA\nBF78          ; LV # Lo       HANGUL SYLLABLE BBWAE\nBF94          ; LV # Lo       HANGUL SYLLABLE BBOE\nBFB0          ; LV # Lo       HANGUL SYLLABLE BBYO\nBFCC          ; LV # Lo       HANGUL SYLLABLE BBU\nBFE8          ; LV # Lo       HANGUL SYLLABLE BBWEO\nC004          ; LV # Lo       HANGUL SYLLABLE BBWE\nC020          ; LV # Lo       HANGUL SYLLABLE BBWI\nC03C          ; LV # Lo       HANGUL SYLLABLE BBYU\nC058          ; LV # Lo       HANGUL SYLLABLE BBEU\nC074          ; LV # Lo       HANGUL SYLLABLE BBYI\nC090          ; LV # Lo       HANGUL SYLLABLE BBI\nC0AC          ; LV # Lo       HANGUL SYLLABLE SA\nC0C8          ; LV # Lo       HANGUL SYLLABLE SAE\nC0E4          ; LV # Lo       HANGUL SYLLABLE SYA\nC100          ; LV # Lo       HANGUL SYLLABLE SYAE\nC11C          ; LV # Lo       HANGUL SYLLABLE SEO\nC138          ; LV # Lo       HANGUL SYLLABLE SE\nC154          ; LV # Lo       HANGUL SYLLABLE SYEO\nC170          ; LV # Lo       HANGUL SYLLABLE SYE\nC18C          ; LV # Lo       HANGUL SYLLABLE SO\nC1A8          ; LV # Lo       HANGUL SYLLABLE SWA\nC1C4          ; LV # Lo       HANGUL SYLLABLE SWAE\nC1E0          ; LV # Lo       HANGUL SYLLABLE SOE\nC1FC          ; LV # Lo       HANGUL SYLLABLE SYO\nC218          ; LV # Lo       HANGUL SYLLABLE SU\nC234          ; LV # Lo       HANGUL SYLLABLE SWEO\nC250          ; LV # Lo       HANGUL SYLLABLE SWE\nC26C          ; LV # Lo       HANGUL SYLLABLE SWI\nC288          ; LV # Lo       HANGUL SYLLABLE SYU\nC2A4          ; LV # Lo       HANGUL SYLLABLE SEU\nC2C0          ; LV # Lo       HANGUL SYLLABLE SYI\nC2DC          ; LV # Lo       HANGUL SYLLABLE SI\nC2F8          ; LV # Lo       HANGUL SYLLABLE SSA\nC314          ; LV # Lo       HANGUL SYLLABLE SSAE\nC330          ; LV # Lo       HANGUL SYLLABLE SSYA\nC34C          ; LV # Lo       HANGUL SYLLABLE SSYAE\nC368          ; LV # Lo       HANGUL SYLLABLE SSEO\nC384          ; LV # Lo       HANGUL SYLLABLE SSE\nC3A0          ; LV # Lo       HANGUL SYLLABLE SSYEO\nC3BC          ; LV # Lo       HANGUL SYLLABLE SSYE\nC3D8          ; LV # Lo       HANGUL SYLLABLE SSO\nC3F4          ; LV # Lo       HANGUL SYLLABLE SSWA\nC410          ; LV # Lo       HANGUL SYLLABLE SSWAE\nC42C          ; LV # Lo       HANGUL SYLLABLE SSOE\nC448          ; LV # Lo       HANGUL SYLLABLE SSYO\nC464          ; LV # Lo       HANGUL SYLLABLE SSU\nC480          ; LV # Lo       HANGUL SYLLABLE SSWEO\nC49C          ; LV # Lo       HANGUL SYLLABLE SSWE\nC4B8          ; LV # Lo       HANGUL SYLLABLE SSWI\nC4D4          ; LV # Lo       HANGUL SYLLABLE SSYU\nC4F0          ; LV # Lo       HANGUL SYLLABLE SSEU\nC50C          ; LV # Lo       HANGUL SYLLABLE SSYI\nC528          ; LV # Lo       HANGUL SYLLABLE SSI\nC544          ; LV # Lo       HANGUL SYLLABLE A\nC560          ; LV # Lo       HANGUL SYLLABLE AE\nC57C          ; LV # Lo       HANGUL SYLLABLE YA\nC598          ; LV # Lo       HANGUL SYLLABLE YAE\nC5B4          ; LV # Lo       HANGUL SYLLABLE EO\nC5D0          ; LV # Lo       HANGUL SYLLABLE E\nC5EC          ; LV # Lo       HANGUL SYLLABLE YEO\nC608          ; LV # Lo       HANGUL SYLLABLE YE\nC624          ; LV # Lo       HANGUL SYLLABLE O\nC640          ; LV # Lo       HANGUL SYLLABLE WA\nC65C          ; LV # Lo       HANGUL SYLLABLE WAE\nC678          ; LV # Lo       HANGUL SYLLABLE OE\nC694          ; LV # Lo       HANGUL SYLLABLE YO\nC6B0          ; LV # Lo       HANGUL SYLLABLE U\nC6CC          ; LV # Lo       HANGUL SYLLABLE WEO\nC6E8          ; LV # Lo       HANGUL SYLLABLE WE\nC704          ; LV # Lo       HANGUL SYLLABLE WI\nC720          ; LV # Lo       HANGUL SYLLABLE YU\nC73C          ; LV # Lo       HANGUL SYLLABLE EU\nC758          ; LV # Lo       HANGUL SYLLABLE YI\nC774          ; LV # Lo       HANGUL SYLLABLE I\nC790          ; LV # Lo       HANGUL SYLLABLE JA\nC7AC          ; LV # Lo       HANGUL SYLLABLE JAE\nC7C8          ; LV # Lo       HANGUL SYLLABLE JYA\nC7E4          ; LV # Lo       HANGUL SYLLABLE JYAE\nC800          ; LV # Lo       HANGUL SYLLABLE JEO\nC81C          ; LV # Lo       HANGUL SYLLABLE JE\nC838          ; LV # Lo       HANGUL SYLLABLE JYEO\nC854          ; LV # Lo       HANGUL SYLLABLE JYE\nC870          ; LV # Lo       HANGUL SYLLABLE JO\nC88C          ; LV # Lo       HANGUL SYLLABLE JWA\nC8A8          ; LV # Lo       HANGUL SYLLABLE JWAE\nC8C4          ; LV # Lo       HANGUL SYLLABLE JOE\nC8E0          ; LV # Lo       HANGUL SYLLABLE JYO\nC8FC          ; LV # Lo       HANGUL SYLLABLE JU\nC918          ; LV # Lo       HANGUL SYLLABLE JWEO\nC934          ; LV # Lo       HANGUL SYLLABLE JWE\nC950          ; LV # Lo       HANGUL SYLLABLE JWI\nC96C          ; LV # Lo       HANGUL SYLLABLE JYU\nC988          ; LV # Lo       HANGUL SYLLABLE JEU\nC9A4          ; LV # Lo       HANGUL SYLLABLE JYI\nC9C0          ; LV # Lo       HANGUL SYLLABLE JI\nC9DC          ; LV # Lo       HANGUL SYLLABLE JJA\nC9F8          ; LV # Lo       HANGUL SYLLABLE JJAE\nCA14          ; LV # Lo       HANGUL SYLLABLE JJYA\nCA30          ; LV # Lo       HANGUL SYLLABLE JJYAE\nCA4C          ; LV # Lo       HANGUL SYLLABLE JJEO\nCA68          ; LV # Lo       HANGUL SYLLABLE JJE\nCA84          ; LV # Lo       HANGUL SYLLABLE JJYEO\nCAA0          ; LV # Lo       HANGUL SYLLABLE JJYE\nCABC          ; LV # Lo       HANGUL SYLLABLE JJO\nCAD8          ; LV # Lo       HANGUL SYLLABLE JJWA\nCAF4          ; LV # Lo       HANGUL SYLLABLE JJWAE\nCB10          ; LV # Lo       HANGUL SYLLABLE JJOE\nCB2C          ; LV # Lo       HANGUL SYLLABLE JJYO\nCB48          ; LV # Lo       HANGUL SYLLABLE JJU\nCB64          ; LV # Lo       HANGUL SYLLABLE JJWEO\nCB80          ; LV # Lo       HANGUL SYLLABLE JJWE\nCB9C          ; LV # Lo       HANGUL SYLLABLE JJWI\nCBB8          ; LV # Lo       HANGUL SYLLABLE JJYU\nCBD4          ; LV # Lo       HANGUL SYLLABLE JJEU\nCBF0          ; LV # Lo       HANGUL SYLLABLE JJYI\nCC0C          ; LV # Lo       HANGUL SYLLABLE JJI\nCC28          ; LV # Lo       HANGUL SYLLABLE CA\nCC44          ; LV # Lo       HANGUL SYLLABLE CAE\nCC60          ; LV # Lo       HANGUL SYLLABLE CYA\nCC7C          ; LV # Lo       HANGUL SYLLABLE CYAE\nCC98          ; LV # Lo       HANGUL SYLLABLE CEO\nCCB4          ; LV # Lo       HANGUL SYLLABLE CE\nCCD0          ; LV # Lo       HANGUL SYLLABLE CYEO\nCCEC          ; LV # Lo       HANGUL SYLLABLE CYE\nCD08          ; LV # Lo       HANGUL SYLLABLE CO\nCD24          ; LV # Lo       HANGUL SYLLABLE CWA\nCD40          ; LV # Lo       HANGUL SYLLABLE CWAE\nCD5C          ; LV # Lo       HANGUL SYLLABLE COE\nCD78          ; LV # Lo       HANGUL SYLLABLE CYO\nCD94          ; LV # Lo       HANGUL SYLLABLE CU\nCDB0          ; LV # Lo       HANGUL SYLLABLE CWEO\nCDCC          ; LV # Lo       HANGUL SYLLABLE CWE\nCDE8          ; LV # Lo       HANGUL SYLLABLE CWI\nCE04          ; LV # Lo       HANGUL SYLLABLE CYU\nCE20          ; LV # Lo       HANGUL SYLLABLE CEU\nCE3C          ; LV # Lo       HANGUL SYLLABLE CYI\nCE58          ; LV # Lo       HANGUL SYLLABLE CI\nCE74          ; LV # Lo       HANGUL SYLLABLE KA\nCE90          ; LV # Lo       HANGUL SYLLABLE KAE\nCEAC          ; LV # Lo       HANGUL SYLLABLE KYA\nCEC8          ; LV # Lo       HANGUL SYLLABLE KYAE\nCEE4          ; LV # Lo       HANGUL SYLLABLE KEO\nCF00          ; LV # Lo       HANGUL SYLLABLE KE\nCF1C          ; LV # Lo       HANGUL SYLLABLE KYEO\nCF38          ; LV # Lo       HANGUL SYLLABLE KYE\nCF54          ; LV # Lo       HANGUL SYLLABLE KO\nCF70          ; LV # Lo       HANGUL SYLLABLE KWA\nCF8C          ; LV # Lo       HANGUL SYLLABLE KWAE\nCFA8          ; LV # Lo       HANGUL SYLLABLE KOE\nCFC4          ; LV # Lo       HANGUL SYLLABLE KYO\nCFE0          ; LV # Lo       HANGUL SYLLABLE KU\nCFFC          ; LV # Lo       HANGUL SYLLABLE KWEO\nD018          ; LV # Lo       HANGUL SYLLABLE KWE\nD034          ; LV # Lo       HANGUL SYLLABLE KWI\nD050          ; LV # Lo       HANGUL SYLLABLE KYU\nD06C          ; LV # Lo       HANGUL SYLLABLE KEU\nD088          ; LV # Lo       HANGUL SYLLABLE KYI\nD0A4          ; LV # Lo       HANGUL SYLLABLE KI\nD0C0          ; LV # Lo       HANGUL SYLLABLE TA\nD0DC          ; LV # Lo       HANGUL SYLLABLE TAE\nD0F8          ; LV # Lo       HANGUL SYLLABLE TYA\nD114          ; LV # Lo       HANGUL SYLLABLE TYAE\nD130          ; LV # Lo       HANGUL SYLLABLE TEO\nD14C          ; LV # Lo       HANGUL SYLLABLE TE\nD168          ; LV # Lo       HANGUL SYLLABLE TYEO\nD184          ; LV # Lo       HANGUL SYLLABLE TYE\nD1A0          ; LV # Lo       HANGUL SYLLABLE TO\nD1BC          ; LV # Lo       HANGUL SYLLABLE TWA\nD1D8          ; LV # Lo       HANGUL SYLLABLE TWAE\nD1F4          ; LV # Lo       HANGUL SYLLABLE TOE\nD210          ; LV # Lo       HANGUL SYLLABLE TYO\nD22C          ; LV # Lo       HANGUL SYLLABLE TU\nD248          ; LV # Lo       HANGUL SYLLABLE TWEO\nD264          ; LV # Lo       HANGUL SYLLABLE TWE\nD280          ; LV # Lo       HANGUL SYLLABLE TWI\nD29C          ; LV # Lo       HANGUL SYLLABLE TYU\nD2B8          ; LV # Lo       HANGUL SYLLABLE TEU\nD2D4          ; LV # Lo       HANGUL SYLLABLE TYI\nD2F0          ; LV # Lo       HANGUL SYLLABLE TI\nD30C          ; LV # Lo       HANGUL SYLLABLE PA\nD328          ; LV # Lo       HANGUL SYLLABLE PAE\nD344          ; LV # Lo       HANGUL SYLLABLE PYA\nD360          ; LV # Lo       HANGUL SYLLABLE PYAE\nD37C          ; LV # Lo       HANGUL SYLLABLE PEO\nD398          ; LV # Lo       HANGUL SYLLABLE PE\nD3B4          ; LV # Lo       HANGUL SYLLABLE PYEO\nD3D0          ; LV # Lo       HANGUL SYLLABLE PYE\nD3EC          ; LV # Lo       HANGUL SYLLABLE PO\nD408          ; LV # Lo       HANGUL SYLLABLE PWA\nD424          ; LV # Lo       HANGUL SYLLABLE PWAE\nD440          ; LV # Lo       HANGUL SYLLABLE POE\nD45C          ; LV # Lo       HANGUL SYLLABLE PYO\nD478          ; LV # Lo       HANGUL SYLLABLE PU\nD494          ; LV # Lo       HANGUL SYLLABLE PWEO\nD4B0          ; LV # Lo       HANGUL SYLLABLE PWE\nD4CC          ; LV # Lo       HANGUL SYLLABLE PWI\nD4E8          ; LV # Lo       HANGUL SYLLABLE PYU\nD504          ; LV # Lo       HANGUL SYLLABLE PEU\nD520          ; LV # Lo       HANGUL SYLLABLE PYI\nD53C          ; LV # Lo       HANGUL SYLLABLE PI\nD558          ; LV # Lo       HANGUL SYLLABLE HA\nD574          ; LV # Lo       HANGUL SYLLABLE HAE\nD590          ; LV # Lo       HANGUL SYLLABLE HYA\nD5AC          ; LV # Lo       HANGUL SYLLABLE HYAE\nD5C8          ; LV # Lo       HANGUL SYLLABLE HEO\nD5E4          ; LV # Lo       HANGUL SYLLABLE HE\nD600          ; LV # Lo       HANGUL SYLLABLE HYEO\nD61C          ; LV # Lo       HANGUL SYLLABLE HYE\nD638          ; LV # Lo       HANGUL SYLLABLE HO\nD654          ; LV # Lo       HANGUL SYLLABLE HWA\nD670          ; LV # Lo       HANGUL SYLLABLE HWAE\nD68C          ; LV # Lo       HANGUL SYLLABLE HOE\nD6A8          ; LV # Lo       HANGUL SYLLABLE HYO\nD6C4          ; LV # Lo       HANGUL SYLLABLE HU\nD6E0          ; LV # Lo       HANGUL SYLLABLE HWEO\nD6FC          ; LV # Lo       HANGUL SYLLABLE HWE\nD718          ; LV # Lo       HANGUL SYLLABLE HWI\nD734          ; LV # Lo       HANGUL SYLLABLE HYU\nD750          ; LV # Lo       HANGUL SYLLABLE HEU\nD76C          ; LV # Lo       HANGUL SYLLABLE HYI\nD788          ; LV # Lo       HANGUL SYLLABLE HI\n\n# Total code points: 399\n\n# ================================================\n\nAC01..AC1B    ; LVT # Lo  [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH\nAC1D..AC37    ; LVT # Lo  [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH\nAC39..AC53    ; LVT # Lo  [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH\nAC55..AC6F    ; LVT # Lo  [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH\nAC71..AC8B    ; LVT # Lo  [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH\nAC8D..ACA7    ; LVT # Lo  [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH\nACA9..ACC3    ; LVT # Lo  [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH\nACC5..ACDF    ; LVT # Lo  [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH\nACE1..ACFB    ; LVT # Lo  [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH\nACFD..AD17    ; LVT # Lo  [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH\nAD19..AD33    ; LVT # Lo  [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH\nAD35..AD4F    ; LVT # Lo  [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH\nAD51..AD6B    ; LVT # Lo  [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH\nAD6D..AD87    ; LVT # Lo  [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH\nAD89..ADA3    ; LVT # Lo  [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH\nADA5..ADBF    ; LVT # Lo  [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH\nADC1..ADDB    ; LVT # Lo  [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH\nADDD..ADF7    ; LVT # Lo  [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH\nADF9..AE13    ; LVT # Lo  [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH\nAE15..AE2F    ; LVT # Lo  [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH\nAE31..AE4B    ; LVT # Lo  [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH\nAE4D..AE67    ; LVT # Lo  [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH\nAE69..AE83    ; LVT # Lo  [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH\nAE85..AE9F    ; LVT # Lo  [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH\nAEA1..AEBB    ; LVT # Lo  [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH\nAEBD..AED7    ; LVT # Lo  [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH\nAED9..AEF3    ; LVT # Lo  [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH\nAEF5..AF0F    ; LVT # Lo  [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH\nAF11..AF2B    ; LVT # Lo  [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH\nAF2D..AF47    ; LVT # Lo  [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH\nAF49..AF63    ; LVT # Lo  [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH\nAF65..AF7F    ; LVT # Lo  [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH\nAF81..AF9B    ; LVT # Lo  [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH\nAF9D..AFB7    ; LVT # Lo  [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH\nAFB9..AFD3    ; LVT # Lo  [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH\nAFD5..AFEF    ; LVT # Lo  [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH\nAFF1..B00B    ; LVT # Lo  [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH\nB00D..B027    ; LVT # Lo  [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH\nB029..B043    ; LVT # Lo  [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH\nB045..B05F    ; LVT # Lo  [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH\nB061..B07B    ; LVT # Lo  [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH\nB07D..B097    ; LVT # Lo  [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH\nB099..B0B3    ; LVT # Lo  [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH\nB0B5..B0CF    ; LVT # Lo  [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH\nB0D1..B0EB    ; LVT # Lo  [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH\nB0ED..B107    ; LVT # Lo  [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH\nB109..B123    ; LVT # Lo  [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH\nB125..B13F    ; LVT # Lo  [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH\nB141..B15B    ; LVT # Lo  [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH\nB15D..B177    ; LVT # Lo  [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH\nB179..B193    ; LVT # Lo  [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH\nB195..B1AF    ; LVT # Lo  [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH\nB1B1..B1CB    ; LVT # Lo  [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH\nB1CD..B1E7    ; LVT # Lo  [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH\nB1E9..B203    ; LVT # Lo  [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH\nB205..B21F    ; LVT # Lo  [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH\nB221..B23B    ; LVT # Lo  [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH\nB23D..B257    ; LVT # Lo  [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH\nB259..B273    ; LVT # Lo  [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH\nB275..B28F    ; LVT # Lo  [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH\nB291..B2AB    ; LVT # Lo  [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH\nB2AD..B2C7    ; LVT # Lo  [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH\nB2C9..B2E3    ; LVT # Lo  [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH\nB2E5..B2FF    ; LVT # Lo  [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH\nB301..B31B    ; LVT # Lo  [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH\nB31D..B337    ; LVT # Lo  [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH\nB339..B353    ; LVT # Lo  [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH\nB355..B36F    ; LVT # Lo  [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH\nB371..B38B    ; LVT # Lo  [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH\nB38D..B3A7    ; LVT # Lo  [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH\nB3A9..B3C3    ; LVT # Lo  [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH\nB3C5..B3DF    ; LVT # Lo  [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH\nB3E1..B3FB    ; LVT # Lo  [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH\nB3FD..B417    ; LVT # Lo  [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH\nB419..B433    ; LVT # Lo  [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH\nB435..B44F    ; LVT # Lo  [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH\nB451..B46B    ; LVT # Lo  [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH\nB46D..B487    ; LVT # Lo  [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH\nB489..B4A3    ; LVT # Lo  [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH\nB4A5..B4BF    ; LVT # Lo  [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH\nB4C1..B4DB    ; LVT # Lo  [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH\nB4DD..B4F7    ; LVT # Lo  [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH\nB4F9..B513    ; LVT # Lo  [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH\nB515..B52F    ; LVT # Lo  [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH\nB531..B54B    ; LVT # Lo  [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH\nB54D..B567    ; LVT # Lo  [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH\nB569..B583    ; LVT # Lo  [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH\nB585..B59F    ; LVT # Lo  [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH\nB5A1..B5BB    ; LVT # Lo  [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH\nB5BD..B5D7    ; LVT # Lo  [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH\nB5D9..B5F3    ; LVT # Lo  [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH\nB5F5..B60F    ; LVT # Lo  [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH\nB611..B62B    ; LVT # Lo  [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH\nB62D..B647    ; LVT # Lo  [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH\nB649..B663    ; LVT # Lo  [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH\nB665..B67F    ; LVT # Lo  [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH\nB681..B69B    ; LVT # Lo  [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH\nB69D..B6B7    ; LVT # Lo  [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH\nB6B9..B6D3    ; LVT # Lo  [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH\nB6D5..B6EF    ; LVT # Lo  [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH\nB6F1..B70B    ; LVT # Lo  [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH\nB70D..B727    ; LVT # Lo  [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH\nB729..B743    ; LVT # Lo  [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH\nB745..B75F    ; LVT # Lo  [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH\nB761..B77B    ; LVT # Lo  [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH\nB77D..B797    ; LVT # Lo  [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH\nB799..B7B3    ; LVT # Lo  [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH\nB7B5..B7CF    ; LVT # Lo  [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH\nB7D1..B7EB    ; LVT # Lo  [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH\nB7ED..B807    ; LVT # Lo  [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH\nB809..B823    ; LVT # Lo  [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH\nB825..B83F    ; LVT # Lo  [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH\nB841..B85B    ; LVT # Lo  [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH\nB85D..B877    ; LVT # Lo  [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH\nB879..B893    ; LVT # Lo  [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH\nB895..B8AF    ; LVT # Lo  [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH\nB8B1..B8CB    ; LVT # Lo  [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH\nB8CD..B8E7    ; LVT # Lo  [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH\nB8E9..B903    ; LVT # Lo  [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH\nB905..B91F    ; LVT # Lo  [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH\nB921..B93B    ; LVT # Lo  [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH\nB93D..B957    ; LVT # Lo  [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH\nB959..B973    ; LVT # Lo  [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH\nB975..B98F    ; LVT # Lo  [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH\nB991..B9AB    ; LVT # Lo  [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH\nB9AD..B9C7    ; LVT # Lo  [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH\nB9C9..B9E3    ; LVT # Lo  [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH\nB9E5..B9FF    ; LVT # Lo  [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH\nBA01..BA1B    ; LVT # Lo  [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH\nBA1D..BA37    ; LVT # Lo  [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH\nBA39..BA53    ; LVT # Lo  [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH\nBA55..BA6F    ; LVT # Lo  [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH\nBA71..BA8B    ; LVT # Lo  [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH\nBA8D..BAA7    ; LVT # Lo  [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH\nBAA9..BAC3    ; LVT # Lo  [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH\nBAC5..BADF    ; LVT # Lo  [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH\nBAE1..BAFB    ; LVT # Lo  [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH\nBAFD..BB17    ; LVT # Lo  [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH\nBB19..BB33    ; LVT # Lo  [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH\nBB35..BB4F    ; LVT # Lo  [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH\nBB51..BB6B    ; LVT # Lo  [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH\nBB6D..BB87    ; LVT # Lo  [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH\nBB89..BBA3    ; LVT # Lo  [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH\nBBA5..BBBF    ; LVT # Lo  [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH\nBBC1..BBDB    ; LVT # Lo  [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH\nBBDD..BBF7    ; LVT # Lo  [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH\nBBF9..BC13    ; LVT # Lo  [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH\nBC15..BC2F    ; LVT # Lo  [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH\nBC31..BC4B    ; LVT # Lo  [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH\nBC4D..BC67    ; LVT # Lo  [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH\nBC69..BC83    ; LVT # Lo  [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH\nBC85..BC9F    ; LVT # Lo  [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH\nBCA1..BCBB    ; LVT # Lo  [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH\nBCBD..BCD7    ; LVT # Lo  [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH\nBCD9..BCF3    ; LVT # Lo  [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH\nBCF5..BD0F    ; LVT # Lo  [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH\nBD11..BD2B    ; LVT # Lo  [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH\nBD2D..BD47    ; LVT # Lo  [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH\nBD49..BD63    ; LVT # Lo  [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH\nBD65..BD7F    ; LVT # Lo  [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH\nBD81..BD9B    ; LVT # Lo  [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH\nBD9D..BDB7    ; LVT # Lo  [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH\nBDB9..BDD3    ; LVT # Lo  [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH\nBDD5..BDEF    ; LVT # Lo  [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH\nBDF1..BE0B    ; LVT # Lo  [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH\nBE0D..BE27    ; LVT # Lo  [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH\nBE29..BE43    ; LVT # Lo  [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH\nBE45..BE5F    ; LVT # Lo  [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH\nBE61..BE7B    ; LVT # Lo  [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH\nBE7D..BE97    ; LVT # Lo  [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH\nBE99..BEB3    ; LVT # Lo  [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH\nBEB5..BECF    ; LVT # Lo  [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH\nBED1..BEEB    ; LVT # Lo  [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH\nBEED..BF07    ; LVT # Lo  [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH\nBF09..BF23    ; LVT # Lo  [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH\nBF25..BF3F    ; LVT # Lo  [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH\nBF41..BF5B    ; LVT # Lo  [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH\nBF5D..BF77    ; LVT # Lo  [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH\nBF79..BF93    ; LVT # Lo  [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH\nBF95..BFAF    ; LVT # Lo  [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH\nBFB1..BFCB    ; LVT # Lo  [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH\nBFCD..BFE7    ; LVT # Lo  [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH\nBFE9..C003    ; LVT # Lo  [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH\nC005..C01F    ; LVT # Lo  [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH\nC021..C03B    ; LVT # Lo  [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH\nC03D..C057    ; LVT # Lo  [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH\nC059..C073    ; LVT # Lo  [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH\nC075..C08F    ; LVT # Lo  [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH\nC091..C0AB    ; LVT # Lo  [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH\nC0AD..C0C7    ; LVT # Lo  [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH\nC0C9..C0E3    ; LVT # Lo  [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH\nC0E5..C0FF    ; LVT # Lo  [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH\nC101..C11B    ; LVT # Lo  [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH\nC11D..C137    ; LVT # Lo  [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH\nC139..C153    ; LVT # Lo  [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH\nC155..C16F    ; LVT # Lo  [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH\nC171..C18B    ; LVT # Lo  [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH\nC18D..C1A7    ; LVT # Lo  [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH\nC1A9..C1C3    ; LVT # Lo  [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH\nC1C5..C1DF    ; LVT # Lo  [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH\nC1E1..C1FB    ; LVT # Lo  [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH\nC1FD..C217    ; LVT # Lo  [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH\nC219..C233    ; LVT # Lo  [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH\nC235..C24F    ; LVT # Lo  [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH\nC251..C26B    ; LVT # Lo  [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH\nC26D..C287    ; LVT # Lo  [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH\nC289..C2A3    ; LVT # Lo  [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH\nC2A5..C2BF    ; LVT # Lo  [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH\nC2C1..C2DB    ; LVT # Lo  [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH\nC2DD..C2F7    ; LVT # Lo  [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH\nC2F9..C313    ; LVT # Lo  [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH\nC315..C32F    ; LVT # Lo  [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH\nC331..C34B    ; LVT # Lo  [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH\nC34D..C367    ; LVT # Lo  [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH\nC369..C383    ; LVT # Lo  [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH\nC385..C39F    ; LVT # Lo  [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH\nC3A1..C3BB    ; LVT # Lo  [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH\nC3BD..C3D7    ; LVT # Lo  [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH\nC3D9..C3F3    ; LVT # Lo  [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH\nC3F5..C40F    ; LVT # Lo  [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH\nC411..C42B    ; LVT # Lo  [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH\nC42D..C447    ; LVT # Lo  [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH\nC449..C463    ; LVT # Lo  [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH\nC465..C47F    ; LVT # Lo  [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH\nC481..C49B    ; LVT # Lo  [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH\nC49D..C4B7    ; LVT # Lo  [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH\nC4B9..C4D3    ; LVT # Lo  [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH\nC4D5..C4EF    ; LVT # Lo  [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH\nC4F1..C50B    ; LVT # Lo  [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH\nC50D..C527    ; LVT # Lo  [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH\nC529..C543    ; LVT # Lo  [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH\nC545..C55F    ; LVT # Lo  [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH\nC561..C57B    ; LVT # Lo  [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH\nC57D..C597    ; LVT # Lo  [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH\nC599..C5B3    ; LVT # Lo  [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH\nC5B5..C5CF    ; LVT # Lo  [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH\nC5D1..C5EB    ; LVT # Lo  [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH\nC5ED..C607    ; LVT # Lo  [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH\nC609..C623    ; LVT # Lo  [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH\nC625..C63F    ; LVT # Lo  [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH\nC641..C65B    ; LVT # Lo  [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH\nC65D..C677    ; LVT # Lo  [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH\nC679..C693    ; LVT # Lo  [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH\nC695..C6AF    ; LVT # Lo  [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH\nC6B1..C6CB    ; LVT # Lo  [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH\nC6CD..C6E7    ; LVT # Lo  [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH\nC6E9..C703    ; LVT # Lo  [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH\nC705..C71F    ; LVT # Lo  [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH\nC721..C73B    ; LVT # Lo  [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH\nC73D..C757    ; LVT # Lo  [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH\nC759..C773    ; LVT # Lo  [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH\nC775..C78F    ; LVT # Lo  [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH\nC791..C7AB    ; LVT # Lo  [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH\nC7AD..C7C7    ; LVT # Lo  [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH\nC7C9..C7E3    ; LVT # Lo  [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH\nC7E5..C7FF    ; LVT # Lo  [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH\nC801..C81B    ; LVT # Lo  [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH\nC81D..C837    ; LVT # Lo  [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH\nC839..C853    ; LVT # Lo  [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH\nC855..C86F    ; LVT # Lo  [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH\nC871..C88B    ; LVT # Lo  [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH\nC88D..C8A7    ; LVT # Lo  [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH\nC8A9..C8C3    ; LVT # Lo  [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH\nC8C5..C8DF    ; LVT # Lo  [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH\nC8E1..C8FB    ; LVT # Lo  [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH\nC8FD..C917    ; LVT # Lo  [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH\nC919..C933    ; LVT # Lo  [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH\nC935..C94F    ; LVT # Lo  [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH\nC951..C96B    ; LVT # Lo  [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH\nC96D..C987    ; LVT # Lo  [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH\nC989..C9A3    ; LVT # Lo  [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH\nC9A5..C9BF    ; LVT # Lo  [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH\nC9C1..C9DB    ; LVT # Lo  [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH\nC9DD..C9F7    ; LVT # Lo  [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH\nC9F9..CA13    ; LVT # Lo  [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH\nCA15..CA2F    ; LVT # Lo  [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH\nCA31..CA4B    ; LVT # Lo  [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH\nCA4D..CA67    ; LVT # Lo  [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH\nCA69..CA83    ; LVT # Lo  [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH\nCA85..CA9F    ; LVT # Lo  [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH\nCAA1..CABB    ; LVT # Lo  [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH\nCABD..CAD7    ; LVT # Lo  [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH\nCAD9..CAF3    ; LVT # Lo  [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH\nCAF5..CB0F    ; LVT # Lo  [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH\nCB11..CB2B    ; LVT # Lo  [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH\nCB2D..CB47    ; LVT # Lo  [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH\nCB49..CB63    ; LVT # Lo  [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH\nCB65..CB7F    ; LVT # Lo  [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH\nCB81..CB9B    ; LVT # Lo  [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH\nCB9D..CBB7    ; LVT # Lo  [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH\nCBB9..CBD3    ; LVT # Lo  [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH\nCBD5..CBEF    ; LVT # Lo  [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH\nCBF1..CC0B    ; LVT # Lo  [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH\nCC0D..CC27    ; LVT # Lo  [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH\nCC29..CC43    ; LVT # Lo  [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH\nCC45..CC5F    ; LVT # Lo  [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH\nCC61..CC7B    ; LVT # Lo  [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH\nCC7D..CC97    ; LVT # Lo  [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH\nCC99..CCB3    ; LVT # Lo  [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH\nCCB5..CCCF    ; LVT # Lo  [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH\nCCD1..CCEB    ; LVT # Lo  [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH\nCCED..CD07    ; LVT # Lo  [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH\nCD09..CD23    ; LVT # Lo  [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH\nCD25..CD3F    ; LVT # Lo  [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH\nCD41..CD5B    ; LVT # Lo  [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH\nCD5D..CD77    ; LVT # Lo  [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH\nCD79..CD93    ; LVT # Lo  [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH\nCD95..CDAF    ; LVT # Lo  [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH\nCDB1..CDCB    ; LVT # Lo  [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH\nCDCD..CDE7    ; LVT # Lo  [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH\nCDE9..CE03    ; LVT # Lo  [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH\nCE05..CE1F    ; LVT # Lo  [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH\nCE21..CE3B    ; LVT # Lo  [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH\nCE3D..CE57    ; LVT # Lo  [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH\nCE59..CE73    ; LVT # Lo  [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH\nCE75..CE8F    ; LVT # Lo  [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH\nCE91..CEAB    ; LVT # Lo  [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH\nCEAD..CEC7    ; LVT # Lo  [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH\nCEC9..CEE3    ; LVT # Lo  [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH\nCEE5..CEFF    ; LVT # Lo  [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH\nCF01..CF1B    ; LVT # Lo  [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH\nCF1D..CF37    ; LVT # Lo  [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH\nCF39..CF53    ; LVT # Lo  [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH\nCF55..CF6F    ; LVT # Lo  [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH\nCF71..CF8B    ; LVT # Lo  [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH\nCF8D..CFA7    ; LVT # Lo  [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH\nCFA9..CFC3    ; LVT # Lo  [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH\nCFC5..CFDF    ; LVT # Lo  [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH\nCFE1..CFFB    ; LVT # Lo  [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH\nCFFD..D017    ; LVT # Lo  [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH\nD019..D033    ; LVT # Lo  [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH\nD035..D04F    ; LVT # Lo  [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH\nD051..D06B    ; LVT # Lo  [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH\nD06D..D087    ; LVT # Lo  [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH\nD089..D0A3    ; LVT # Lo  [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH\nD0A5..D0BF    ; LVT # Lo  [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH\nD0C1..D0DB    ; LVT # Lo  [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH\nD0DD..D0F7    ; LVT # Lo  [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH\nD0F9..D113    ; LVT # Lo  [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH\nD115..D12F    ; LVT # Lo  [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH\nD131..D14B    ; LVT # Lo  [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH\nD14D..D167    ; LVT # Lo  [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH\nD169..D183    ; LVT # Lo  [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH\nD185..D19F    ; LVT # Lo  [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH\nD1A1..D1BB    ; LVT # Lo  [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH\nD1BD..D1D7    ; LVT # Lo  [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH\nD1D9..D1F3    ; LVT # Lo  [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH\nD1F5..D20F    ; LVT # Lo  [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH\nD211..D22B    ; LVT # Lo  [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH\nD22D..D247    ; LVT # Lo  [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH\nD249..D263    ; LVT # Lo  [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH\nD265..D27F    ; LVT # Lo  [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH\nD281..D29B    ; LVT # Lo  [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH\nD29D..D2B7    ; LVT # Lo  [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH\nD2B9..D2D3    ; LVT # Lo  [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH\nD2D5..D2EF    ; LVT # Lo  [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH\nD2F1..D30B    ; LVT # Lo  [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH\nD30D..D327    ; LVT # Lo  [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH\nD329..D343    ; LVT # Lo  [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH\nD345..D35F    ; LVT # Lo  [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH\nD361..D37B    ; LVT # Lo  [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH\nD37D..D397    ; LVT # Lo  [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH\nD399..D3B3    ; LVT # Lo  [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH\nD3B5..D3CF    ; LVT # Lo  [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH\nD3D1..D3EB    ; LVT # Lo  [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH\nD3ED..D407    ; LVT # Lo  [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH\nD409..D423    ; LVT # Lo  [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH\nD425..D43F    ; LVT # Lo  [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH\nD441..D45B    ; LVT # Lo  [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH\nD45D..D477    ; LVT # Lo  [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH\nD479..D493    ; LVT # Lo  [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH\nD495..D4AF    ; LVT # Lo  [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH\nD4B1..D4CB    ; LVT # Lo  [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH\nD4CD..D4E7    ; LVT # Lo  [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH\nD4E9..D503    ; LVT # Lo  [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH\nD505..D51F    ; LVT # Lo  [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH\nD521..D53B    ; LVT # Lo  [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH\nD53D..D557    ; LVT # Lo  [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH\nD559..D573    ; LVT # Lo  [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH\nD575..D58F    ; LVT # Lo  [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH\nD591..D5AB    ; LVT # Lo  [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH\nD5AD..D5C7    ; LVT # Lo  [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH\nD5C9..D5E3    ; LVT # Lo  [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH\nD5E5..D5FF    ; LVT # Lo  [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH\nD601..D61B    ; LVT # Lo  [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH\nD61D..D637    ; LVT # Lo  [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH\nD639..D653    ; LVT # Lo  [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH\nD655..D66F    ; LVT # Lo  [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH\nD671..D68B    ; LVT # Lo  [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH\nD68D..D6A7    ; LVT # Lo  [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH\nD6A9..D6C3    ; LVT # Lo  [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH\nD6C5..D6DF    ; LVT # Lo  [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH\nD6E1..D6FB    ; LVT # Lo  [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH\nD6FD..D717    ; LVT # Lo  [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH\nD719..D733    ; LVT # Lo  [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH\nD735..D74F    ; LVT # Lo  [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH\nD751..D76B    ; LVT # Lo  [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH\nD76D..D787    ; LVT # Lo  [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH\nD789..D7A3    ; LVT # Lo  [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH\n\n# Total code points: 10773\n\n# ================================================\n\n200D          ; ZWJ # Cf       ZERO WIDTH JOINER\n\n# Total code points: 1\n\n# EOF\n"
  },
  {
    "path": "maint/Unicode.tables/PropList.txt",
    "content": "# PropList-17.0.0.txt\n# Date: 2025-06-30, 06:19:01 GMT\n# © 2025 Unicode®, Inc.\n# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.\n# For terms of use and license, see https://www.unicode.org/terms_of_use.html\n#\n# Unicode Character Database\n#   For documentation, see https://www.unicode.org/reports/tr44/\n\n# ================================================\n\n0009..000D    ; White_Space # Cc   [5] <control-0009>..<control-000D>\n0020          ; White_Space # Zs       SPACE\n0085          ; White_Space # Cc       <control-0085>\n00A0          ; White_Space # Zs       NO-BREAK SPACE\n1680          ; White_Space # Zs       OGHAM SPACE MARK\n2000..200A    ; White_Space # Zs  [11] EN QUAD..HAIR SPACE\n2028          ; White_Space # Zl       LINE SEPARATOR\n2029          ; White_Space # Zp       PARAGRAPH SEPARATOR\n202F          ; White_Space # Zs       NARROW NO-BREAK SPACE\n205F          ; White_Space # Zs       MEDIUM MATHEMATICAL SPACE\n3000          ; White_Space # Zs       IDEOGRAPHIC SPACE\n\n# Total code points: 25\n\n# ================================================\n\n061C          ; Bidi_Control # Cf       ARABIC LETTER MARK\n200E..200F    ; Bidi_Control # Cf   [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK\n202A..202E    ; Bidi_Control # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE\n2066..2069    ; Bidi_Control # Cf   [4] LEFT-TO-RIGHT ISOLATE..POP DIRECTIONAL ISOLATE\n\n# Total code points: 12\n\n# ================================================\n\n200C..200D    ; Join_Control # Cf   [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER\n\n# Total code points: 2\n\n# ================================================\n\n002D          ; Dash # Pd       HYPHEN-MINUS\n058A          ; Dash # Pd       ARMENIAN HYPHEN\n05BE          ; Dash # Pd       HEBREW PUNCTUATION MAQAF\n1400          ; Dash # Pd       CANADIAN SYLLABICS HYPHEN\n1806          ; Dash # Pd       MONGOLIAN TODO SOFT HYPHEN\n2010..2015    ; Dash # Pd   [6] HYPHEN..HORIZONTAL BAR\n2053          ; Dash # Po       SWUNG DASH\n207B          ; Dash # Sm       SUPERSCRIPT MINUS\n208B          ; Dash # Sm       SUBSCRIPT MINUS\n2212          ; Dash # Sm       MINUS SIGN\n2E17          ; Dash # Pd       DOUBLE OBLIQUE HYPHEN\n2E1A          ; Dash # Pd       HYPHEN WITH DIAERESIS\n2E3A..2E3B    ; Dash # Pd   [2] TWO-EM DASH..THREE-EM DASH\n2E40          ; Dash # Pd       DOUBLE HYPHEN\n2E5D          ; Dash # Pd       OBLIQUE HYPHEN\n301C          ; Dash # Pd       WAVE DASH\n3030          ; Dash # Pd       WAVY DASH\n30A0          ; Dash # Pd       KATAKANA-HIRAGANA DOUBLE HYPHEN\nFE31..FE32    ; Dash # Pd   [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH\nFE58          ; Dash # Pd       SMALL EM DASH\nFE63          ; Dash # Pd       SMALL HYPHEN-MINUS\nFF0D          ; Dash # Pd       FULLWIDTH HYPHEN-MINUS\n10D6E         ; Dash # Pd       GARAY HYPHEN\n10EAD         ; Dash # Pd       YEZIDI HYPHENATION MARK\n\n# Total code points: 31\n\n# ================================================\n\n002D          ; Hyphen # Pd       HYPHEN-MINUS\n00AD          ; Hyphen # Cf       SOFT HYPHEN\n058A          ; Hyphen # Pd       ARMENIAN HYPHEN\n1806          ; Hyphen # Pd       MONGOLIAN TODO SOFT HYPHEN\n2010..2011    ; Hyphen # Pd   [2] HYPHEN..NON-BREAKING HYPHEN\n2E17          ; Hyphen # Pd       DOUBLE OBLIQUE HYPHEN\n30FB          ; Hyphen # Po       KATAKANA MIDDLE DOT\nFE63          ; Hyphen # Pd       SMALL HYPHEN-MINUS\nFF0D          ; Hyphen # Pd       FULLWIDTH HYPHEN-MINUS\nFF65          ; Hyphen # Po       HALFWIDTH KATAKANA MIDDLE DOT\n\n# Total code points: 11\n\n# ================================================\n\n0022          ; Quotation_Mark # Po       QUOTATION MARK\n0027          ; Quotation_Mark # Po       APOSTROPHE\n00AB          ; Quotation_Mark # Pi       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\n00BB          ; Quotation_Mark # Pf       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\n2018          ; Quotation_Mark # Pi       LEFT SINGLE QUOTATION MARK\n2019          ; Quotation_Mark # Pf       RIGHT SINGLE QUOTATION MARK\n201A          ; Quotation_Mark # Ps       SINGLE LOW-9 QUOTATION MARK\n201B..201C    ; Quotation_Mark # Pi   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK\n201D          ; Quotation_Mark # Pf       RIGHT DOUBLE QUOTATION MARK\n201E          ; Quotation_Mark # Ps       DOUBLE LOW-9 QUOTATION MARK\n201F          ; Quotation_Mark # Pi       DOUBLE HIGH-REVERSED-9 QUOTATION MARK\n2039          ; Quotation_Mark # Pi       SINGLE LEFT-POINTING ANGLE QUOTATION MARK\n203A          ; Quotation_Mark # Pf       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\n2E42          ; Quotation_Mark # Ps       DOUBLE LOW-REVERSED-9 QUOTATION MARK\n300C          ; Quotation_Mark # Ps       LEFT CORNER BRACKET\n300D          ; Quotation_Mark # Pe       RIGHT CORNER BRACKET\n300E          ; Quotation_Mark # Ps       LEFT WHITE CORNER BRACKET\n300F          ; Quotation_Mark # Pe       RIGHT WHITE CORNER BRACKET\n301D          ; Quotation_Mark # Ps       REVERSED DOUBLE PRIME QUOTATION MARK\n301E..301F    ; Quotation_Mark # Pe   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK\nFE41          ; Quotation_Mark # Ps       PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET\nFE42          ; Quotation_Mark # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET\nFE43          ; Quotation_Mark # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET\nFE44          ; Quotation_Mark # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET\nFF02          ; Quotation_Mark # Po       FULLWIDTH QUOTATION MARK\nFF07          ; Quotation_Mark # Po       FULLWIDTH APOSTROPHE\nFF62          ; Quotation_Mark # Ps       HALFWIDTH LEFT CORNER BRACKET\nFF63          ; Quotation_Mark # Pe       HALFWIDTH RIGHT CORNER BRACKET\n\n# Total code points: 30\n\n# ================================================\n\n0021          ; Terminal_Punctuation # Po       EXCLAMATION MARK\n002C          ; Terminal_Punctuation # Po       COMMA\n002E          ; Terminal_Punctuation # Po       FULL STOP\n003A..003B    ; Terminal_Punctuation # Po   [2] COLON..SEMICOLON\n003F          ; Terminal_Punctuation # Po       QUESTION MARK\n037E          ; Terminal_Punctuation # Po       GREEK QUESTION MARK\n0387          ; Terminal_Punctuation # Po       GREEK ANO TELEIA\n0589          ; Terminal_Punctuation # Po       ARMENIAN FULL STOP\n05C3          ; Terminal_Punctuation # Po       HEBREW PUNCTUATION SOF PASUQ\n060C          ; Terminal_Punctuation # Po       ARABIC COMMA\n061B          ; Terminal_Punctuation # Po       ARABIC SEMICOLON\n061D..061F    ; Terminal_Punctuation # Po   [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK\n06D4          ; Terminal_Punctuation # Po       ARABIC FULL STOP\n0700..070A    ; Terminal_Punctuation # Po  [11] SYRIAC END OF PARAGRAPH..SYRIAC CONTRACTION\n070C          ; Terminal_Punctuation # Po       SYRIAC HARKLEAN METOBELUS\n07F8..07F9    ; Terminal_Punctuation # Po   [2] NKO COMMA..NKO EXCLAMATION MARK\n0830..0835    ; Terminal_Punctuation # Po   [6] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION SHIYYAALAA\n0837..083E    ; Terminal_Punctuation # Po   [8] SAMARITAN PUNCTUATION MELODIC QITSA..SAMARITAN PUNCTUATION ANNAAU\n085E          ; Terminal_Punctuation # Po       MANDAIC PUNCTUATION\n0964..0965    ; Terminal_Punctuation # Po   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA\n0E5A..0E5B    ; Terminal_Punctuation # Po   [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT\n0F08          ; Terminal_Punctuation # Po       TIBETAN MARK SBRUL SHAD\n0F0D..0F12    ; Terminal_Punctuation # Po   [6] TIBETAN MARK SHAD..TIBETAN MARK RGYA GRAM SHAD\n104A..104B    ; Terminal_Punctuation # Po   [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION\n1361..1368    ; Terminal_Punctuation # Po   [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR\n166E          ; Terminal_Punctuation # Po       CANADIAN SYLLABICS FULL STOP\n16EB..16ED    ; Terminal_Punctuation # Po   [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION\n1735..1736    ; Terminal_Punctuation # Po   [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION\n17D4..17D6    ; Terminal_Punctuation # Po   [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH\n17DA          ; Terminal_Punctuation # Po       KHMER SIGN KOOMUUT\n1802..1805    ; Terminal_Punctuation # Po   [4] MONGOLIAN COMMA..MONGOLIAN FOUR DOTS\n1808..1809    ; Terminal_Punctuation # Po   [2] MONGOLIAN MANCHU COMMA..MONGOLIAN MANCHU FULL STOP\n1944..1945    ; Terminal_Punctuation # Po   [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK\n1AA8..1AAB    ; Terminal_Punctuation # Po   [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU\n1B4E..1B4F    ; Terminal_Punctuation # Po   [2] BALINESE INVERTED CARIK SIKI..BALINESE INVERTED CARIK PAREREN\n1B5A..1B5B    ; Terminal_Punctuation # Po   [2] BALINESE PANTI..BALINESE PAMADA\n1B5D..1B5F    ; Terminal_Punctuation # Po   [3] BALINESE CARIK PAMUNGKAH..BALINESE CARIK PAREREN\n1B7D..1B7F    ; Terminal_Punctuation # Po   [3] BALINESE PANTI LANTANG..BALINESE PANTI BAWAK\n1C3B..1C3F    ; Terminal_Punctuation # Po   [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK\n1C7E..1C7F    ; Terminal_Punctuation # Po   [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD\n2024          ; Terminal_Punctuation # Po       ONE DOT LEADER\n203C..203D    ; Terminal_Punctuation # Po   [2] DOUBLE EXCLAMATION MARK..INTERROBANG\n2047..2049    ; Terminal_Punctuation # Po   [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK\n2CF9..2CFB    ; Terminal_Punctuation # Po   [3] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN INDIRECT QUESTION MARK\n2E2E          ; Terminal_Punctuation # Po       REVERSED QUESTION MARK\n2E3C          ; Terminal_Punctuation # Po       STENOGRAPHIC FULL STOP\n2E41          ; Terminal_Punctuation # Po       REVERSED COMMA\n2E4C          ; Terminal_Punctuation # Po       MEDIEVAL COMMA\n2E4E..2E4F    ; Terminal_Punctuation # Po   [2] PUNCTUS ELEVATUS MARK..CORNISH VERSE DIVIDER\n2E53..2E54    ; Terminal_Punctuation # Po   [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK\n3001..3002    ; Terminal_Punctuation # Po   [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP\nA4FE..A4FF    ; Terminal_Punctuation # Po   [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP\nA60D..A60F    ; Terminal_Punctuation # Po   [3] VAI COMMA..VAI QUESTION MARK\nA6F3..A6F7    ; Terminal_Punctuation # Po   [5] BAMUM FULL STOP..BAMUM QUESTION MARK\nA876..A877    ; Terminal_Punctuation # Po   [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD\nA8CE..A8CF    ; Terminal_Punctuation # Po   [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA\nA92F          ; Terminal_Punctuation # Po       KAYAH LI SIGN SHYA\nA9C7..A9C9    ; Terminal_Punctuation # Po   [3] JAVANESE PADA PANGKAT..JAVANESE PADA LUNGSI\nAA5D..AA5F    ; Terminal_Punctuation # Po   [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA\nAADF          ; Terminal_Punctuation # Po       TAI VIET SYMBOL KOI KOI\nAAF0..AAF1    ; Terminal_Punctuation # Po   [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM\nABEB          ; Terminal_Punctuation # Po       MEETEI MAYEK CHEIKHEI\nFE12          ; Terminal_Punctuation # Po       PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP\nFE15..FE16    ; Terminal_Punctuation # Po   [2] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK..PRESENTATION FORM FOR VERTICAL QUESTION MARK\nFE50..FE52    ; Terminal_Punctuation # Po   [3] SMALL COMMA..SMALL FULL STOP\nFE54..FE57    ; Terminal_Punctuation # Po   [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK\nFF01          ; Terminal_Punctuation # Po       FULLWIDTH EXCLAMATION MARK\nFF0C          ; Terminal_Punctuation # Po       FULLWIDTH COMMA\nFF0E          ; Terminal_Punctuation # Po       FULLWIDTH FULL STOP\nFF1A..FF1B    ; Terminal_Punctuation # Po   [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON\nFF1F          ; Terminal_Punctuation # Po       FULLWIDTH QUESTION MARK\nFF61          ; Terminal_Punctuation # Po       HALFWIDTH IDEOGRAPHIC FULL STOP\nFF64          ; Terminal_Punctuation # Po       HALFWIDTH IDEOGRAPHIC COMMA\n1039F         ; Terminal_Punctuation # Po       UGARITIC WORD DIVIDER\n103D0         ; Terminal_Punctuation # Po       OLD PERSIAN WORD DIVIDER\n10857         ; Terminal_Punctuation # Po       IMPERIAL ARAMAIC SECTION SIGN\n1091F         ; Terminal_Punctuation # Po       PHOENICIAN WORD SEPARATOR\n10A56..10A57  ; Terminal_Punctuation # Po   [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA\n10AF0..10AF5  ; Terminal_Punctuation # Po   [6] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION TWO DOTS\n10B3A..10B3F  ; Terminal_Punctuation # Po   [6] TINY TWO DOTS OVER ONE DOT PUNCTUATION..LARGE ONE RING OVER TWO RINGS PUNCTUATION\n10B99..10B9C  ; Terminal_Punctuation # Po   [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT\n10F55..10F59  ; Terminal_Punctuation # Po   [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT\n10F86..10F89  ; Terminal_Punctuation # Po   [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS\n11047..1104D  ; Terminal_Punctuation # Po   [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS\n110BE..110C1  ; Terminal_Punctuation # Po   [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA\n11141..11143  ; Terminal_Punctuation # Po   [3] CHAKMA DANDA..CHAKMA QUESTION MARK\n111C5..111C6  ; Terminal_Punctuation # Po   [2] SHARADA DANDA..SHARADA DOUBLE DANDA\n111CD         ; Terminal_Punctuation # Po       SHARADA SUTRA MARK\n111DE..111DF  ; Terminal_Punctuation # Po   [2] SHARADA SECTION MARK-1..SHARADA SECTION MARK-2\n11238..1123C  ; Terminal_Punctuation # Po   [5] KHOJKI DANDA..KHOJKI DOUBLE SECTION MARK\n112A9         ; Terminal_Punctuation # Po       MULTANI SECTION MARK\n113D4..113D5  ; Terminal_Punctuation # Po   [2] TULU-TIGALARI DANDA..TULU-TIGALARI DOUBLE DANDA\n1144B..1144D  ; Terminal_Punctuation # Po   [3] NEWA DANDA..NEWA COMMA\n1145A..1145B  ; Terminal_Punctuation # Po   [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK\n115C2..115C5  ; Terminal_Punctuation # Po   [4] SIDDHAM DANDA..SIDDHAM SEPARATOR BAR\n115C9..115D7  ; Terminal_Punctuation # Po  [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES\n11641..11642  ; Terminal_Punctuation # Po   [2] MODI DANDA..MODI DOUBLE DANDA\n1173C..1173E  ; Terminal_Punctuation # Po   [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI\n11944         ; Terminal_Punctuation # Po       DIVES AKURU DOUBLE DANDA\n11946         ; Terminal_Punctuation # Po       DIVES AKURU END OF TEXT MARK\n11A42..11A43  ; Terminal_Punctuation # Po   [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD\n11A9B..11A9C  ; Terminal_Punctuation # Po   [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD\n11AA1..11AA2  ; Terminal_Punctuation # Po   [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2\n11C41..11C43  ; Terminal_Punctuation # Po   [3] BHAIKSUKI DANDA..BHAIKSUKI WORD SEPARATOR\n11C71         ; Terminal_Punctuation # Po       MARCHEN MARK SHAD\n11EF7..11EF8  ; Terminal_Punctuation # Po   [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION\n11F43..11F44  ; Terminal_Punctuation # Po   [2] KAWI DANDA..KAWI DOUBLE DANDA\n12470..12474  ; Terminal_Punctuation # Po   [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON\n16A6E..16A6F  ; Terminal_Punctuation # Po   [2] MRO DANDA..MRO DOUBLE DANDA\n16AF5         ; Terminal_Punctuation # Po       BASSA VAH FULL STOP\n16B37..16B39  ; Terminal_Punctuation # Po   [3] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN CIM CHEEM\n16B44         ; Terminal_Punctuation # Po       PAHAWH HMONG SIGN XAUS\n16D6E..16D6F  ; Terminal_Punctuation # Po   [2] KIRAT RAI DANDA..KIRAT RAI DOUBLE DANDA\n16E97..16E98  ; Terminal_Punctuation # Po   [2] MEDEFAIDRIN COMMA..MEDEFAIDRIN FULL STOP\n1BC9F         ; Terminal_Punctuation # Po       DUPLOYAN PUNCTUATION CHINOOK FULL STOP\n1DA87..1DA8A  ; Terminal_Punctuation # Po   [4] SIGNWRITING COMMA..SIGNWRITING COLON\n\n# Total code points: 291\n\n# ================================================\n\n005E          ; Other_Math # Sk       CIRCUMFLEX ACCENT\n03D0..03D2    ; Other_Math # L&   [3] GREEK BETA SYMBOL..GREEK UPSILON WITH HOOK SYMBOL\n03D5          ; Other_Math # L&       GREEK PHI SYMBOL\n03F0..03F1    ; Other_Math # L&   [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL\n03F4..03F5    ; Other_Math # L&   [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL\n2016          ; Other_Math # Po       DOUBLE VERTICAL LINE\n2032..2034    ; Other_Math # Po   [3] PRIME..TRIPLE PRIME\n2040          ; Other_Math # Pc       CHARACTER TIE\n2061..2064    ; Other_Math # Cf   [4] FUNCTION APPLICATION..INVISIBLE PLUS\n207D          ; Other_Math # Ps       SUPERSCRIPT LEFT PARENTHESIS\n207E          ; Other_Math # Pe       SUPERSCRIPT RIGHT PARENTHESIS\n208D          ; Other_Math # Ps       SUBSCRIPT LEFT PARENTHESIS\n208E          ; Other_Math # Pe       SUBSCRIPT RIGHT PARENTHESIS\n20D0..20DC    ; Other_Math # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n20E1          ; Other_Math # Mn       COMBINING LEFT RIGHT ARROW ABOVE\n20E5..20E6    ; Other_Math # Mn   [2] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING DOUBLE VERTICAL STROKE OVERLAY\n20EB..20EF    ; Other_Math # Mn   [5] COMBINING LONG DOUBLE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW\n2102          ; Other_Math # L&       DOUBLE-STRUCK CAPITAL C\n2107          ; Other_Math # L&       EULER CONSTANT\n210A..2113    ; Other_Math # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L\n2115          ; Other_Math # L&       DOUBLE-STRUCK CAPITAL N\n2119..211D    ; Other_Math # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n2124          ; Other_Math # L&       DOUBLE-STRUCK CAPITAL Z\n2128          ; Other_Math # L&       BLACK-LETTER CAPITAL Z\n2129          ; Other_Math # So       TURNED GREEK SMALL LETTER IOTA\n212C..212D    ; Other_Math # L&   [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C\n212F..2131    ; Other_Math # L&   [3] SCRIPT SMALL E..SCRIPT CAPITAL F\n2133..2134    ; Other_Math # L&   [2] SCRIPT CAPITAL M..SCRIPT SMALL O\n2135..2138    ; Other_Math # Lo   [4] ALEF SYMBOL..DALET SYMBOL\n213C..213F    ; Other_Math # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI\n2145..2149    ; Other_Math # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J\n2195..2199    ; Other_Math # So   [5] UP DOWN ARROW..SOUTH WEST ARROW\n219C..219F    ; Other_Math # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW\n21A1..21A2    ; Other_Math # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL\n21A4..21A5    ; Other_Math # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR\n21A7          ; Other_Math # So       DOWNWARDS ARROW FROM BAR\n21A9..21AD    ; Other_Math # So   [5] LEFTWARDS ARROW WITH HOOK..LEFT RIGHT WAVE ARROW\n21B0..21B1    ; Other_Math # So   [2] UPWARDS ARROW WITH TIP LEFTWARDS..UPWARDS ARROW WITH TIP RIGHTWARDS\n21B6..21B7    ; Other_Math # So   [2] ANTICLOCKWISE TOP SEMICIRCLE ARROW..CLOCKWISE TOP SEMICIRCLE ARROW\n21BC..21CD    ; Other_Math # So  [18] LEFTWARDS HARPOON WITH BARB UPWARDS..LEFTWARDS DOUBLE ARROW WITH STROKE\n21D0..21D1    ; Other_Math # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW\n21D3          ; Other_Math # So       DOWNWARDS DOUBLE ARROW\n21D5..21DB    ; Other_Math # So   [7] UP DOWN DOUBLE ARROW..RIGHTWARDS TRIPLE ARROW\n21DD          ; Other_Math # So       RIGHTWARDS SQUIGGLE ARROW\n21E4..21E5    ; Other_Math # So   [2] LEFTWARDS ARROW TO BAR..RIGHTWARDS ARROW TO BAR\n2308          ; Other_Math # Ps       LEFT CEILING\n2309          ; Other_Math # Pe       RIGHT CEILING\n230A          ; Other_Math # Ps       LEFT FLOOR\n230B          ; Other_Math # Pe       RIGHT FLOOR\n23B4..23B5    ; Other_Math # So   [2] TOP SQUARE BRACKET..BOTTOM SQUARE BRACKET\n23B7          ; Other_Math # So       RADICAL SYMBOL BOTTOM\n23D0          ; Other_Math # So       VERTICAL LINE EXTENSION\n23E2          ; Other_Math # So       WHITE TRAPEZIUM\n25A0..25A1    ; Other_Math # So   [2] BLACK SQUARE..WHITE SQUARE\n25AE..25B6    ; Other_Math # So   [9] BLACK VERTICAL RECTANGLE..BLACK RIGHT-POINTING TRIANGLE\n25BC..25C0    ; Other_Math # So   [5] BLACK DOWN-POINTING TRIANGLE..BLACK LEFT-POINTING TRIANGLE\n25C6..25C7    ; Other_Math # So   [2] BLACK DIAMOND..WHITE DIAMOND\n25CA..25CB    ; Other_Math # So   [2] LOZENGE..WHITE CIRCLE\n25CF..25D3    ; Other_Math # So   [5] BLACK CIRCLE..CIRCLE WITH UPPER HALF BLACK\n25E2          ; Other_Math # So       BLACK LOWER RIGHT TRIANGLE\n25E4          ; Other_Math # So       BLACK UPPER LEFT TRIANGLE\n25E7..25EC    ; Other_Math # So   [6] SQUARE WITH LEFT HALF BLACK..WHITE UP-POINTING TRIANGLE WITH DOT\n2605..2606    ; Other_Math # So   [2] BLACK STAR..WHITE STAR\n2640          ; Other_Math # So       FEMALE SIGN\n2642          ; Other_Math # So       MALE SIGN\n2660..2663    ; Other_Math # So   [4] BLACK SPADE SUIT..BLACK CLUB SUIT\n266D..266E    ; Other_Math # So   [2] MUSIC FLAT SIGN..MUSIC NATURAL SIGN\n27C5          ; Other_Math # Ps       LEFT S-SHAPED BAG DELIMITER\n27C6          ; Other_Math # Pe       RIGHT S-SHAPED BAG DELIMITER\n27E6          ; Other_Math # Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET\n27E7          ; Other_Math # Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET\n27E8          ; Other_Math # Ps       MATHEMATICAL LEFT ANGLE BRACKET\n27E9          ; Other_Math # Pe       MATHEMATICAL RIGHT ANGLE BRACKET\n27EA          ; Other_Math # Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET\n27EB          ; Other_Math # Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET\n27EC          ; Other_Math # Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET\n27ED          ; Other_Math # Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET\n27EE          ; Other_Math # Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS\n27EF          ; Other_Math # Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS\n2983          ; Other_Math # Ps       LEFT WHITE CURLY BRACKET\n2984          ; Other_Math # Pe       RIGHT WHITE CURLY BRACKET\n2985          ; Other_Math # Ps       LEFT WHITE PARENTHESIS\n2986          ; Other_Math # Pe       RIGHT WHITE PARENTHESIS\n2987          ; Other_Math # Ps       Z NOTATION LEFT IMAGE BRACKET\n2988          ; Other_Math # Pe       Z NOTATION RIGHT IMAGE BRACKET\n2989          ; Other_Math # Ps       Z NOTATION LEFT BINDING BRACKET\n298A          ; Other_Math # Pe       Z NOTATION RIGHT BINDING BRACKET\n298B          ; Other_Math # Ps       LEFT SQUARE BRACKET WITH UNDERBAR\n298C          ; Other_Math # Pe       RIGHT SQUARE BRACKET WITH UNDERBAR\n298D          ; Other_Math # Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER\n298E          ; Other_Math # Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n298F          ; Other_Math # Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n2990          ; Other_Math # Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER\n2991          ; Other_Math # Ps       LEFT ANGLE BRACKET WITH DOT\n2992          ; Other_Math # Pe       RIGHT ANGLE BRACKET WITH DOT\n2993          ; Other_Math # Ps       LEFT ARC LESS-THAN BRACKET\n2994          ; Other_Math # Pe       RIGHT ARC GREATER-THAN BRACKET\n2995          ; Other_Math # Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET\n2996          ; Other_Math # Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET\n2997          ; Other_Math # Ps       LEFT BLACK TORTOISE SHELL BRACKET\n2998          ; Other_Math # Pe       RIGHT BLACK TORTOISE SHELL BRACKET\n29D8          ; Other_Math # Ps       LEFT WIGGLY FENCE\n29D9          ; Other_Math # Pe       RIGHT WIGGLY FENCE\n29DA          ; Other_Math # Ps       LEFT DOUBLE WIGGLY FENCE\n29DB          ; Other_Math # Pe       RIGHT DOUBLE WIGGLY FENCE\n29FC          ; Other_Math # Ps       LEFT-POINTING CURVED ANGLE BRACKET\n29FD          ; Other_Math # Pe       RIGHT-POINTING CURVED ANGLE BRACKET\nFE61          ; Other_Math # Po       SMALL ASTERISK\nFE63          ; Other_Math # Pd       SMALL HYPHEN-MINUS\nFE68          ; Other_Math # Po       SMALL REVERSE SOLIDUS\nFF3C          ; Other_Math # Po       FULLWIDTH REVERSE SOLIDUS\nFF3E          ; Other_Math # Sk       FULLWIDTH CIRCUMFLEX ACCENT\n1D400..1D454  ; Other_Math # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D49C  ; Other_Math # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; Other_Math # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; Other_Math # L&       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; Other_Math # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; Other_Math # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B9  ; Other_Math # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; Other_Math # L&       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; Other_Math # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D505  ; Other_Math # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; Other_Math # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; Other_Math # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; Other_Math # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D51E..1D539  ; Other_Math # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; Other_Math # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; Other_Math # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; Other_Math # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; Other_Math # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D552..1D6A5  ; Other_Math # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6A8..1D6C0  ; Other_Math # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6C2..1D6DA  ; Other_Math # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DC..1D6FA  ; Other_Math # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D6FC..1D714  ; Other_Math # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D716..1D734  ; Other_Math # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D736..1D74E  ; Other_Math # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D750..1D76E  ; Other_Math # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D770..1D788  ; Other_Math # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D78A..1D7A8  ; Other_Math # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7AA..1D7C2  ; Other_Math # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C4..1D7CB  ; Other_Math # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA\n1D7CE..1D7FF  ; Other_Math # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE\n1EE00..1EE03  ; Other_Math # Lo   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL\n1EE05..1EE1F  ; Other_Math # Lo  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF\n1EE21..1EE22  ; Other_Math # Lo   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM\n1EE24         ; Other_Math # Lo       ARABIC MATHEMATICAL INITIAL HEH\n1EE27         ; Other_Math # Lo       ARABIC MATHEMATICAL INITIAL HAH\n1EE29..1EE32  ; Other_Math # Lo  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF\n1EE34..1EE37  ; Other_Math # Lo   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH\n1EE39         ; Other_Math # Lo       ARABIC MATHEMATICAL INITIAL DAD\n1EE3B         ; Other_Math # Lo       ARABIC MATHEMATICAL INITIAL GHAIN\n1EE42         ; Other_Math # Lo       ARABIC MATHEMATICAL TAILED JEEM\n1EE47         ; Other_Math # Lo       ARABIC MATHEMATICAL TAILED HAH\n1EE49         ; Other_Math # Lo       ARABIC MATHEMATICAL TAILED YEH\n1EE4B         ; Other_Math # Lo       ARABIC MATHEMATICAL TAILED LAM\n1EE4D..1EE4F  ; Other_Math # Lo   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN\n1EE51..1EE52  ; Other_Math # Lo   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF\n1EE54         ; Other_Math # Lo       ARABIC MATHEMATICAL TAILED SHEEN\n1EE57         ; Other_Math # Lo       ARABIC MATHEMATICAL TAILED KHAH\n1EE59         ; Other_Math # Lo       ARABIC MATHEMATICAL TAILED DAD\n1EE5B         ; Other_Math # Lo       ARABIC MATHEMATICAL TAILED GHAIN\n1EE5D         ; Other_Math # Lo       ARABIC MATHEMATICAL TAILED DOTLESS NOON\n1EE5F         ; Other_Math # Lo       ARABIC MATHEMATICAL TAILED DOTLESS QAF\n1EE61..1EE62  ; Other_Math # Lo   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM\n1EE64         ; Other_Math # Lo       ARABIC MATHEMATICAL STRETCHED HEH\n1EE67..1EE6A  ; Other_Math # Lo   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF\n1EE6C..1EE72  ; Other_Math # Lo   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF\n1EE74..1EE77  ; Other_Math # Lo   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH\n1EE79..1EE7C  ; Other_Math # Lo   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH\n1EE7E         ; Other_Math # Lo       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH\n1EE80..1EE89  ; Other_Math # Lo  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH\n1EE8B..1EE9B  ; Other_Math # Lo  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN\n1EEA1..1EEA3  ; Other_Math # Lo   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL\n1EEA5..1EEA9  ; Other_Math # Lo   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH\n1EEAB..1EEBB  ; Other_Math # Lo  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN\n\n# Total code points: 1362\n\n# ================================================\n\n0030..0039    ; Hex_Digit # Nd  [10] DIGIT ZERO..DIGIT NINE\n0041..0046    ; Hex_Digit # L&   [6] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER F\n0061..0066    ; Hex_Digit # L&   [6] LATIN SMALL LETTER A..LATIN SMALL LETTER F\nFF10..FF19    ; Hex_Digit # Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE\nFF21..FF26    ; Hex_Digit # L&   [6] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER F\nFF41..FF46    ; Hex_Digit # L&   [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER F\n\n# Total code points: 44\n\n# ================================================\n\n0030..0039    ; ASCII_Hex_Digit # Nd  [10] DIGIT ZERO..DIGIT NINE\n0041..0046    ; ASCII_Hex_Digit # L&   [6] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER F\n0061..0066    ; ASCII_Hex_Digit # L&   [6] LATIN SMALL LETTER A..LATIN SMALL LETTER F\n\n# Total code points: 22\n\n# ================================================\n\n0345          ; Other_Alphabetic # Mn       COMBINING GREEK YPOGEGRAMMENI\n0363..036F    ; Other_Alphabetic # Mn  [13] COMBINING LATIN SMALL LETTER A..COMBINING LATIN SMALL LETTER X\n05B0..05BD    ; Other_Alphabetic # Mn  [14] HEBREW POINT SHEVA..HEBREW POINT METEG\n05BF          ; Other_Alphabetic # Mn       HEBREW POINT RAFE\n05C1..05C2    ; Other_Alphabetic # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n05C4..05C5    ; Other_Alphabetic # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n05C7          ; Other_Alphabetic # Mn       HEBREW POINT QAMATS QATAN\n0610..061A    ; Other_Alphabetic # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n064B..0657    ; Other_Alphabetic # Mn  [13] ARABIC FATHATAN..ARABIC INVERTED DAMMA\n0659..065F    ; Other_Alphabetic # Mn   [7] ARABIC ZWARAKAY..ARABIC WAVY HAMZA BELOW\n0670          ; Other_Alphabetic # Mn       ARABIC LETTER SUPERSCRIPT ALEF\n06D6..06DC    ; Other_Alphabetic # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n06E1..06E4    ; Other_Alphabetic # Mn   [4] ARABIC SMALL HIGH DOTLESS HEAD OF KHAH..ARABIC SMALL HIGH MADDA\n06E7..06E8    ; Other_Alphabetic # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n06ED          ; Other_Alphabetic # Mn       ARABIC SMALL LOW MEEM\n0711          ; Other_Alphabetic # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH\n0730..073F    ; Other_Alphabetic # Mn  [16] SYRIAC PTHAHA ABOVE..SYRIAC RWAHA\n07A6..07B0    ; Other_Alphabetic # Mn  [11] THAANA ABAFILI..THAANA SUKUN\n0816..0817    ; Other_Alphabetic # Mn   [2] SAMARITAN MARK IN..SAMARITAN MARK IN-ALAF\n081B..0823    ; Other_Alphabetic # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n0825..0827    ; Other_Alphabetic # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n0829..082C    ; Other_Alphabetic # Mn   [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN\n0897          ; Other_Alphabetic # Mn       ARABIC PEPET\n08D4..08DF    ; Other_Alphabetic # Mn  [12] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH WORD WAQFA\n08E3..08E9    ; Other_Alphabetic # Mn   [7] ARABIC TURNED DAMMA BELOW..ARABIC CURLY KASRATAN\n08F0..0902    ; Other_Alphabetic # Mn  [19] ARABIC OPEN FATHATAN..DEVANAGARI SIGN ANUSVARA\n0903          ; Other_Alphabetic # Mc       DEVANAGARI SIGN VISARGA\n093A          ; Other_Alphabetic # Mn       DEVANAGARI VOWEL SIGN OE\n093B          ; Other_Alphabetic # Mc       DEVANAGARI VOWEL SIGN OOE\n093E..0940    ; Other_Alphabetic # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\n0941..0948    ; Other_Alphabetic # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n0949..094C    ; Other_Alphabetic # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\n094E..094F    ; Other_Alphabetic # Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\n0955..0957    ; Other_Alphabetic # Mn   [3] DEVANAGARI VOWEL SIGN CANDRA LONG E..DEVANAGARI VOWEL SIGN UUE\n0962..0963    ; Other_Alphabetic # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n0981          ; Other_Alphabetic # Mn       BENGALI SIGN CANDRABINDU\n0982..0983    ; Other_Alphabetic # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\n09BE..09C0    ; Other_Alphabetic # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II\n09C1..09C4    ; Other_Alphabetic # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n09C7..09C8    ; Other_Alphabetic # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\n09CB..09CC    ; Other_Alphabetic # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\n09D7          ; Other_Alphabetic # Mc       BENGALI AU LENGTH MARK\n09E2..09E3    ; Other_Alphabetic # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n0A01..0A02    ; Other_Alphabetic # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n0A03          ; Other_Alphabetic # Mc       GURMUKHI SIGN VISARGA\n0A3E..0A40    ; Other_Alphabetic # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\n0A41..0A42    ; Other_Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n0A47..0A48    ; Other_Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n0A4B..0A4C    ; Other_Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN OO..GURMUKHI VOWEL SIGN AU\n0A51          ; Other_Alphabetic # Mn       GURMUKHI SIGN UDAAT\n0A70..0A71    ; Other_Alphabetic # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n0A75          ; Other_Alphabetic # Mn       GURMUKHI SIGN YAKASH\n0A81..0A82    ; Other_Alphabetic # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n0A83          ; Other_Alphabetic # Mc       GUJARATI SIGN VISARGA\n0ABE..0AC0    ; Other_Alphabetic # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\n0AC1..0AC5    ; Other_Alphabetic # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n0AC7..0AC8    ; Other_Alphabetic # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n0AC9          ; Other_Alphabetic # Mc       GUJARATI VOWEL SIGN CANDRA O\n0ACB..0ACC    ; Other_Alphabetic # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\n0AE2..0AE3    ; Other_Alphabetic # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n0AFA..0AFC    ; Other_Alphabetic # Mn   [3] GUJARATI SIGN SUKUN..GUJARATI SIGN MADDAH\n0B01          ; Other_Alphabetic # Mn       ORIYA SIGN CANDRABINDU\n0B02..0B03    ; Other_Alphabetic # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\n0B3E          ; Other_Alphabetic # Mc       ORIYA VOWEL SIGN AA\n0B3F          ; Other_Alphabetic # Mn       ORIYA VOWEL SIGN I\n0B40          ; Other_Alphabetic # Mc       ORIYA VOWEL SIGN II\n0B41..0B44    ; Other_Alphabetic # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n0B47..0B48    ; Other_Alphabetic # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\n0B4B..0B4C    ; Other_Alphabetic # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\n0B56          ; Other_Alphabetic # Mn       ORIYA AI LENGTH MARK\n0B57          ; Other_Alphabetic # Mc       ORIYA AU LENGTH MARK\n0B62..0B63    ; Other_Alphabetic # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n0B82          ; Other_Alphabetic # Mn       TAMIL SIGN ANUSVARA\n0BBE..0BBF    ; Other_Alphabetic # Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I\n0BC0          ; Other_Alphabetic # Mn       TAMIL VOWEL SIGN II\n0BC1..0BC2    ; Other_Alphabetic # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\n0BC6..0BC8    ; Other_Alphabetic # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\n0BCA..0BCC    ; Other_Alphabetic # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\n0BD7          ; Other_Alphabetic # Mc       TAMIL AU LENGTH MARK\n0C00          ; Other_Alphabetic # Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE\n0C01..0C03    ; Other_Alphabetic # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\n0C04          ; Other_Alphabetic # Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE\n0C3E..0C40    ; Other_Alphabetic # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n0C41..0C44    ; Other_Alphabetic # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\n0C46..0C48    ; Other_Alphabetic # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n0C4A..0C4C    ; Other_Alphabetic # Mn   [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU\n0C55..0C56    ; Other_Alphabetic # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n0C62..0C63    ; Other_Alphabetic # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n0C81          ; Other_Alphabetic # Mn       KANNADA SIGN CANDRABINDU\n0C82..0C83    ; Other_Alphabetic # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\n0CBE          ; Other_Alphabetic # Mc       KANNADA VOWEL SIGN AA\n0CBF          ; Other_Alphabetic # Mn       KANNADA VOWEL SIGN I\n0CC0..0CC4    ; Other_Alphabetic # Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR\n0CC6          ; Other_Alphabetic # Mn       KANNADA VOWEL SIGN E\n0CC7..0CC8    ; Other_Alphabetic # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n0CCA..0CCB    ; Other_Alphabetic # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n0CCC          ; Other_Alphabetic # Mn       KANNADA VOWEL SIGN AU\n0CD5..0CD6    ; Other_Alphabetic # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n0CE2..0CE3    ; Other_Alphabetic # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n0CF3          ; Other_Alphabetic # Mc       KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT\n0D00..0D01    ; Other_Alphabetic # Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n0D02..0D03    ; Other_Alphabetic # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\n0D3E..0D40    ; Other_Alphabetic # Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II\n0D41..0D44    ; Other_Alphabetic # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n0D46..0D48    ; Other_Alphabetic # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\n0D4A..0D4C    ; Other_Alphabetic # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\n0D57          ; Other_Alphabetic # Mc       MALAYALAM AU LENGTH MARK\n0D62..0D63    ; Other_Alphabetic # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n0D81          ; Other_Alphabetic # Mn       SINHALA SIGN CANDRABINDU\n0D82..0D83    ; Other_Alphabetic # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\n0DCF..0DD1    ; Other_Alphabetic # Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\n0DD2..0DD4    ; Other_Alphabetic # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n0DD6          ; Other_Alphabetic # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA\n0DD8..0DDF    ; Other_Alphabetic # Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA\n0DF2..0DF3    ; Other_Alphabetic # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\n0E31          ; Other_Alphabetic # Mn       THAI CHARACTER MAI HAN-AKAT\n0E34..0E3A    ; Other_Alphabetic # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n0E4D          ; Other_Alphabetic # Mn       THAI CHARACTER NIKHAHIT\n0EB1          ; Other_Alphabetic # Mn       LAO VOWEL SIGN MAI KAN\n0EB4..0EB9    ; Other_Alphabetic # Mn   [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU\n0EBB..0EBC    ; Other_Alphabetic # Mn   [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO\n0ECD          ; Other_Alphabetic # Mn       LAO NIGGAHITA\n0F71..0F7E    ; Other_Alphabetic # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n0F7F          ; Other_Alphabetic # Mc       TIBETAN SIGN RNAM BCAD\n0F80..0F83    ; Other_Alphabetic # Mn   [4] TIBETAN VOWEL SIGN REVERSED I..TIBETAN SIGN SNA LDAN\n0F8D..0F97    ; Other_Alphabetic # Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n0F99..0FBC    ; Other_Alphabetic # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n102B..102C    ; Other_Alphabetic # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA\n102D..1030    ; Other_Alphabetic # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n1031          ; Other_Alphabetic # Mc       MYANMAR VOWEL SIGN E\n1032..1036    ; Other_Alphabetic # Mn   [5] MYANMAR VOWEL SIGN AI..MYANMAR SIGN ANUSVARA\n1038          ; Other_Alphabetic # Mc       MYANMAR SIGN VISARGA\n103B..103C    ; Other_Alphabetic # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\n103D..103E    ; Other_Alphabetic # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n1056..1057    ; Other_Alphabetic # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\n1058..1059    ; Other_Alphabetic # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n105E..1060    ; Other_Alphabetic # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n1062..1064    ; Other_Alphabetic # Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO\n1067..106D    ; Other_Alphabetic # Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5\n1071..1074    ; Other_Alphabetic # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n1082          ; Other_Alphabetic # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n1083..1084    ; Other_Alphabetic # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E\n1085..1086    ; Other_Alphabetic # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n1087..108C    ; Other_Alphabetic # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3\n108D          ; Other_Alphabetic # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n108F          ; Other_Alphabetic # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5\n109A..109C    ; Other_Alphabetic # Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A\n109D          ; Other_Alphabetic # Mn       MYANMAR VOWEL SIGN AITON AI\n1712..1713    ; Other_Alphabetic # Mn   [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U\n1732..1733    ; Other_Alphabetic # Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U\n1752..1753    ; Other_Alphabetic # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n1772..1773    ; Other_Alphabetic # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n17B6          ; Other_Alphabetic # Mc       KHMER VOWEL SIGN AA\n17B7..17BD    ; Other_Alphabetic # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n17BE..17C5    ; Other_Alphabetic # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\n17C6          ; Other_Alphabetic # Mn       KHMER SIGN NIKAHIT\n17C7..17C8    ; Other_Alphabetic # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\n1885..1886    ; Other_Alphabetic # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n18A9          ; Other_Alphabetic # Mn       MONGOLIAN LETTER ALI GALI DAGALGA\n1920..1922    ; Other_Alphabetic # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n1923..1926    ; Other_Alphabetic # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\n1927..1928    ; Other_Alphabetic # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n1929..192B    ; Other_Alphabetic # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\n1930..1931    ; Other_Alphabetic # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\n1932          ; Other_Alphabetic # Mn       LIMBU SMALL LETTER ANUSVARA\n1933..1938    ; Other_Alphabetic # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\n1A17..1A18    ; Other_Alphabetic # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n1A19..1A1A    ; Other_Alphabetic # Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\n1A1B          ; Other_Alphabetic # Mn       BUGINESE VOWEL SIGN AE\n1A55          ; Other_Alphabetic # Mc       TAI THAM CONSONANT SIGN MEDIAL RA\n1A56          ; Other_Alphabetic # Mn       TAI THAM CONSONANT SIGN MEDIAL LA\n1A57          ; Other_Alphabetic # Mc       TAI THAM CONSONANT SIGN LA TANG LAI\n1A58..1A5E    ; Other_Alphabetic # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n1A61          ; Other_Alphabetic # Mc       TAI THAM VOWEL SIGN A\n1A62          ; Other_Alphabetic # Mn       TAI THAM VOWEL SIGN MAI SAT\n1A63..1A64    ; Other_Alphabetic # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA\n1A65..1A6C    ; Other_Alphabetic # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n1A6D..1A72    ; Other_Alphabetic # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\n1A73..1A74    ; Other_Alphabetic # Mn   [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG\n1ABF..1AC0    ; Other_Alphabetic # Mn   [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW\n1ACC..1ACE    ; Other_Alphabetic # Mn   [3] COMBINING LATIN SMALL LETTER INSULAR G..COMBINING LATIN SMALL LETTER INSULAR T\n1B00..1B03    ; Other_Alphabetic # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n1B04          ; Other_Alphabetic # Mc       BALINESE SIGN BISAH\n1B35          ; Other_Alphabetic # Mc       BALINESE VOWEL SIGN TEDUNG\n1B36..1B3A    ; Other_Alphabetic # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n1B3B          ; Other_Alphabetic # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG\n1B3C          ; Other_Alphabetic # Mn       BALINESE VOWEL SIGN LA LENGA\n1B3D..1B41    ; Other_Alphabetic # Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG\n1B42          ; Other_Alphabetic # Mn       BALINESE VOWEL SIGN PEPET\n1B43          ; Other_Alphabetic # Mc       BALINESE VOWEL SIGN PEPET TEDUNG\n1B80..1B81    ; Other_Alphabetic # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n1B82          ; Other_Alphabetic # Mc       SUNDANESE SIGN PANGWISAD\n1BA1          ; Other_Alphabetic # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL\n1BA2..1BA5    ; Other_Alphabetic # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n1BA6..1BA7    ; Other_Alphabetic # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\n1BA8..1BA9    ; Other_Alphabetic # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n1BAC..1BAD    ; Other_Alphabetic # Mn   [2] SUNDANESE CONSONANT SIGN PASANGAN MA..SUNDANESE CONSONANT SIGN PASANGAN WA\n1BE7          ; Other_Alphabetic # Mc       BATAK VOWEL SIGN E\n1BE8..1BE9    ; Other_Alphabetic # Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n1BEA..1BEC    ; Other_Alphabetic # Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\n1BED          ; Other_Alphabetic # Mn       BATAK VOWEL SIGN KARO O\n1BEE          ; Other_Alphabetic # Mc       BATAK VOWEL SIGN U\n1BEF..1BF1    ; Other_Alphabetic # Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n1C24..1C2B    ; Other_Alphabetic # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\n1C2C..1C33    ; Other_Alphabetic # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n1C34..1C35    ; Other_Alphabetic # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\n1C36          ; Other_Alphabetic # Mn       LEPCHA SIGN RAN\n1DD3..1DF4    ; Other_Alphabetic # Mn  [34] COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE..COMBINING LATIN SMALL LETTER U WITH DIAERESIS\n24B6..24E9    ; Other_Alphabetic # So  [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z\n2DE0..2DFF    ; Other_Alphabetic # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\nA674..A67B    ; Other_Alphabetic # Mn   [8] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC LETTER OMEGA\nA69E..A69F    ; Other_Alphabetic # Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\nA802          ; Other_Alphabetic # Mn       SYLOTI NAGRI SIGN DVISVARA\nA80B          ; Other_Alphabetic # Mn       SYLOTI NAGRI SIGN ANUSVARA\nA823..A824    ; Other_Alphabetic # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\nA825..A826    ; Other_Alphabetic # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\nA827          ; Other_Alphabetic # Mc       SYLOTI NAGRI VOWEL SIGN OO\nA880..A881    ; Other_Alphabetic # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\nA8B4..A8C3    ; Other_Alphabetic # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\nA8C5          ; Other_Alphabetic # Mn       SAURASHTRA SIGN CANDRABINDU\nA8FF          ; Other_Alphabetic # Mn       DEVANAGARI VOWEL SIGN AY\nA926..A92A    ; Other_Alphabetic # Mn   [5] KAYAH LI VOWEL UE..KAYAH LI VOWEL O\nA947..A951    ; Other_Alphabetic # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\nA952          ; Other_Alphabetic # Mc       REJANG CONSONANT SIGN H\nA980..A982    ; Other_Alphabetic # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\nA983          ; Other_Alphabetic # Mc       JAVANESE SIGN WIGNYAN\nA9B4..A9B5    ; Other_Alphabetic # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\nA9B6..A9B9    ; Other_Alphabetic # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\nA9BA..A9BB    ; Other_Alphabetic # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\nA9BC..A9BD    ; Other_Alphabetic # Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET\nA9BE..A9BF    ; Other_Alphabetic # Mc   [2] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE CONSONANT SIGN CAKRA\nA9E5          ; Other_Alphabetic # Mn       MYANMAR SIGN SHAN SAW\nAA29..AA2E    ; Other_Alphabetic # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\nAA2F..AA30    ; Other_Alphabetic # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\nAA31..AA32    ; Other_Alphabetic # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\nAA33..AA34    ; Other_Alphabetic # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\nAA35..AA36    ; Other_Alphabetic # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\nAA43          ; Other_Alphabetic # Mn       CHAM CONSONANT SIGN FINAL NG\nAA4C          ; Other_Alphabetic # Mn       CHAM CONSONANT SIGN FINAL M\nAA4D          ; Other_Alphabetic # Mc       CHAM CONSONANT SIGN FINAL H\nAA7B          ; Other_Alphabetic # Mc       MYANMAR SIGN PAO KAREN TONE\nAA7C          ; Other_Alphabetic # Mn       MYANMAR SIGN TAI LAING TONE-2\nAA7D          ; Other_Alphabetic # Mc       MYANMAR SIGN TAI LAING TONE-5\nAAB0          ; Other_Alphabetic # Mn       TAI VIET MAI KANG\nAAB2..AAB4    ; Other_Alphabetic # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\nAAB7..AAB8    ; Other_Alphabetic # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\nAABE          ; Other_Alphabetic # Mn       TAI VIET VOWEL AM\nAAEB          ; Other_Alphabetic # Mc       MEETEI MAYEK VOWEL SIGN II\nAAEC..AAED    ; Other_Alphabetic # Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\nAAEE..AAEF    ; Other_Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\nAAF5          ; Other_Alphabetic # Mc       MEETEI MAYEK VOWEL SIGN VISARGA\nABE3..ABE4    ; Other_Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\nABE5          ; Other_Alphabetic # Mn       MEETEI MAYEK VOWEL SIGN ANAP\nABE6..ABE7    ; Other_Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\nABE8          ; Other_Alphabetic # Mn       MEETEI MAYEK VOWEL SIGN UNAP\nABE9..ABEA    ; Other_Alphabetic # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\nFB1E          ; Other_Alphabetic # Mn       HEBREW POINT JUDEO-SPANISH VARIKA\n10376..1037A  ; Other_Alphabetic # Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n10A01..10A03  ; Other_Alphabetic # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n10A05..10A06  ; Other_Alphabetic # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n10A0C..10A0F  ; Other_Alphabetic # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n10D24..10D27  ; Other_Alphabetic # Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n10D69         ; Other_Alphabetic # Mn       GARAY VOWEL SIGN E\n10EAB..10EAC  ; Other_Alphabetic # Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK\n10EFA..10EFC  ; Other_Alphabetic # Mn   [3] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC COMBINING ALEF OVERLAY\n11000         ; Other_Alphabetic # Mc       BRAHMI SIGN CANDRABINDU\n11001         ; Other_Alphabetic # Mn       BRAHMI SIGN ANUSVARA\n11002         ; Other_Alphabetic # Mc       BRAHMI SIGN VISARGA\n11038..11045  ; Other_Alphabetic # Mn  [14] BRAHMI VOWEL SIGN AA..BRAHMI VOWEL SIGN AU\n11073..11074  ; Other_Alphabetic # Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O\n11080..11081  ; Other_Alphabetic # Mn   [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA\n11082         ; Other_Alphabetic # Mc       KAITHI SIGN VISARGA\n110B0..110B2  ; Other_Alphabetic # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\n110B3..110B6  ; Other_Alphabetic # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n110B7..110B8  ; Other_Alphabetic # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\n110C2         ; Other_Alphabetic # Mn       KAITHI VOWEL SIGN VOCALIC R\n11100..11102  ; Other_Alphabetic # Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n11127..1112B  ; Other_Alphabetic # Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n1112C         ; Other_Alphabetic # Mc       CHAKMA VOWEL SIGN E\n1112D..11132  ; Other_Alphabetic # Mn   [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK\n11145..11146  ; Other_Alphabetic # Mc   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI\n11180..11181  ; Other_Alphabetic # Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n11182         ; Other_Alphabetic # Mc       SHARADA SIGN VISARGA\n111B3..111B5  ; Other_Alphabetic # Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\n111B6..111BE  ; Other_Alphabetic # Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n111BF         ; Other_Alphabetic # Mc       SHARADA VOWEL SIGN AU\n111CE         ; Other_Alphabetic # Mc       SHARADA VOWEL SIGN PRISHTHAMATRA E\n111CF         ; Other_Alphabetic # Mn       SHARADA SIGN INVERTED CANDRABINDU\n1122C..1122E  ; Other_Alphabetic # Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\n1122F..11231  ; Other_Alphabetic # Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n11232..11233  ; Other_Alphabetic # Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\n11234         ; Other_Alphabetic # Mn       KHOJKI SIGN ANUSVARA\n11237         ; Other_Alphabetic # Mn       KHOJKI SIGN SHADDA\n1123E         ; Other_Alphabetic # Mn       KHOJKI SIGN SUKUN\n11241         ; Other_Alphabetic # Mn       KHOJKI VOWEL SIGN VOCALIC R\n112DF         ; Other_Alphabetic # Mn       KHUDAWADI SIGN ANUSVARA\n112E0..112E2  ; Other_Alphabetic # Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\n112E3..112E8  ; Other_Alphabetic # Mn   [6] KHUDAWADI VOWEL SIGN U..KHUDAWADI VOWEL SIGN AU\n11300..11301  ; Other_Alphabetic # Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n11302..11303  ; Other_Alphabetic # Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\n1133E..1133F  ; Other_Alphabetic # Mc   [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I\n11340         ; Other_Alphabetic # Mn       GRANTHA VOWEL SIGN II\n11341..11344  ; Other_Alphabetic # Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\n11347..11348  ; Other_Alphabetic # Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\n1134B..1134C  ; Other_Alphabetic # Mc   [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU\n11357         ; Other_Alphabetic # Mc       GRANTHA AU LENGTH MARK\n11362..11363  ; Other_Alphabetic # Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\n113B8..113BA  ; Other_Alphabetic # Mc   [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II\n113BB..113C0  ; Other_Alphabetic # Mn   [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL\n113C2         ; Other_Alphabetic # Mc       TULU-TIGALARI VOWEL SIGN EE\n113C5         ; Other_Alphabetic # Mc       TULU-TIGALARI VOWEL SIGN AI\n113C7..113CA  ; Other_Alphabetic # Mc   [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA\n113CC..113CD  ; Other_Alphabetic # Mc   [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA\n11435..11437  ; Other_Alphabetic # Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\n11438..1143F  ; Other_Alphabetic # Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n11440..11441  ; Other_Alphabetic # Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\n11443..11444  ; Other_Alphabetic # Mn   [2] NEWA SIGN CANDRABINDU..NEWA SIGN ANUSVARA\n11445         ; Other_Alphabetic # Mc       NEWA SIGN VISARGA\n114B0..114B2  ; Other_Alphabetic # Mc   [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II\n114B3..114B8  ; Other_Alphabetic # Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n114B9         ; Other_Alphabetic # Mc       TIRHUTA VOWEL SIGN E\n114BA         ; Other_Alphabetic # Mn       TIRHUTA VOWEL SIGN SHORT E\n114BB..114BE  ; Other_Alphabetic # Mc   [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU\n114BF..114C0  ; Other_Alphabetic # Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n114C1         ; Other_Alphabetic # Mc       TIRHUTA SIGN VISARGA\n115AF..115B1  ; Other_Alphabetic # Mc   [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II\n115B2..115B5  ; Other_Alphabetic # Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n115B8..115BB  ; Other_Alphabetic # Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\n115BC..115BD  ; Other_Alphabetic # Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n115BE         ; Other_Alphabetic # Mc       SIDDHAM SIGN VISARGA\n115DC..115DD  ; Other_Alphabetic # Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n11630..11632  ; Other_Alphabetic # Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\n11633..1163A  ; Other_Alphabetic # Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n1163B..1163C  ; Other_Alphabetic # Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\n1163D         ; Other_Alphabetic # Mn       MODI SIGN ANUSVARA\n1163E         ; Other_Alphabetic # Mc       MODI SIGN VISARGA\n11640         ; Other_Alphabetic # Mn       MODI SIGN ARDHACANDRA\n116AB         ; Other_Alphabetic # Mn       TAKRI SIGN ANUSVARA\n116AC         ; Other_Alphabetic # Mc       TAKRI SIGN VISARGA\n116AD         ; Other_Alphabetic # Mn       TAKRI VOWEL SIGN AA\n116AE..116AF  ; Other_Alphabetic # Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\n116B0..116B5  ; Other_Alphabetic # Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n1171D         ; Other_Alphabetic # Mn       AHOM CONSONANT SIGN MEDIAL LA\n1171E         ; Other_Alphabetic # Mc       AHOM CONSONANT SIGN MEDIAL RA\n1171F         ; Other_Alphabetic # Mn       AHOM CONSONANT SIGN MEDIAL LIGATING RA\n11720..11721  ; Other_Alphabetic # Mc   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA\n11722..11725  ; Other_Alphabetic # Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n11726         ; Other_Alphabetic # Mc       AHOM VOWEL SIGN E\n11727..1172A  ; Other_Alphabetic # Mn   [4] AHOM VOWEL SIGN AW..AHOM VOWEL SIGN AM\n1182C..1182E  ; Other_Alphabetic # Mc   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II\n1182F..11837  ; Other_Alphabetic # Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA\n11838         ; Other_Alphabetic # Mc       DOGRA SIGN VISARGA\n11930..11935  ; Other_Alphabetic # Mc   [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E\n11937..11938  ; Other_Alphabetic # Mc   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O\n1193B..1193C  ; Other_Alphabetic # Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU\n11940         ; Other_Alphabetic # Mc       DIVES AKURU MEDIAL YA\n11942         ; Other_Alphabetic # Mc       DIVES AKURU MEDIAL RA\n119D1..119D3  ; Other_Alphabetic # Mc   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II\n119D4..119D7  ; Other_Alphabetic # Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR\n119DA..119DB  ; Other_Alphabetic # Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI\n119DC..119DF  ; Other_Alphabetic # Mc   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA\n119E4         ; Other_Alphabetic # Mc       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E\n11A01..11A0A  ; Other_Alphabetic # Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n11A35..11A38  ; Other_Alphabetic # Mn   [4] ZANABAZAR SQUARE SIGN CANDRABINDU..ZANABAZAR SQUARE SIGN ANUSVARA\n11A39         ; Other_Alphabetic # Mc       ZANABAZAR SQUARE SIGN VISARGA\n11A3B..11A3E  ; Other_Alphabetic # Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n11A51..11A56  ; Other_Alphabetic # Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n11A57..11A58  ; Other_Alphabetic # Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\n11A59..11A5B  ; Other_Alphabetic # Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n11A8A..11A96  ; Other_Alphabetic # Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n11A97         ; Other_Alphabetic # Mc       SOYOMBO SIGN VISARGA\n11B60         ; Other_Alphabetic # Mn       SHARADA VOWEL SIGN OE\n11B61         ; Other_Alphabetic # Mc       SHARADA VOWEL SIGN OOE\n11B62..11B64  ; Other_Alphabetic # Mn   [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E\n11B65         ; Other_Alphabetic # Mc       SHARADA VOWEL SIGN SHORT O\n11B66         ; Other_Alphabetic # Mn       SHARADA VOWEL SIGN CANDRA E\n11B67         ; Other_Alphabetic # Mc       SHARADA VOWEL SIGN CANDRA O\n11C2F         ; Other_Alphabetic # Mc       BHAIKSUKI VOWEL SIGN AA\n11C30..11C36  ; Other_Alphabetic # Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n11C38..11C3D  ; Other_Alphabetic # Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n11C3E         ; Other_Alphabetic # Mc       BHAIKSUKI SIGN VISARGA\n11C92..11CA7  ; Other_Alphabetic # Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n11CA9         ; Other_Alphabetic # Mc       MARCHEN SUBJOINED LETTER YA\n11CAA..11CB0  ; Other_Alphabetic # Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n11CB1         ; Other_Alphabetic # Mc       MARCHEN VOWEL SIGN I\n11CB2..11CB3  ; Other_Alphabetic # Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n11CB4         ; Other_Alphabetic # Mc       MARCHEN VOWEL SIGN O\n11CB5..11CB6  ; Other_Alphabetic # Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n11D31..11D36  ; Other_Alphabetic # Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n11D3A         ; Other_Alphabetic # Mn       MASARAM GONDI VOWEL SIGN E\n11D3C..11D3D  ; Other_Alphabetic # Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n11D3F..11D41  ; Other_Alphabetic # Mn   [3] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI SIGN VISARGA\n11D43         ; Other_Alphabetic # Mn       MASARAM GONDI SIGN CANDRA\n11D47         ; Other_Alphabetic # Mn       MASARAM GONDI RA-KARA\n11D8A..11D8E  ; Other_Alphabetic # Mc   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU\n11D90..11D91  ; Other_Alphabetic # Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI\n11D93..11D94  ; Other_Alphabetic # Mc   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU\n11D95         ; Other_Alphabetic # Mn       GUNJALA GONDI SIGN ANUSVARA\n11D96         ; Other_Alphabetic # Mc       GUNJALA GONDI SIGN VISARGA\n11EF3..11EF4  ; Other_Alphabetic # Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U\n11EF5..11EF6  ; Other_Alphabetic # Mc   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O\n11F00..11F01  ; Other_Alphabetic # Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA\n11F03         ; Other_Alphabetic # Mc       KAWI SIGN VISARGA\n11F34..11F35  ; Other_Alphabetic # Mc   [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA\n11F36..11F3A  ; Other_Alphabetic # Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R\n11F3E..11F3F  ; Other_Alphabetic # Mc   [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI\n11F40         ; Other_Alphabetic # Mn       KAWI VOWEL SIGN EU\n1611E..16129  ; Other_Alphabetic # Mn  [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK\n1612A..1612C  ; Other_Alphabetic # Mc   [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA\n1612D..1612E  ; Other_Alphabetic # Mn   [2] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA CONSONANT SIGN MEDIAL RA\n16F4F         ; Other_Alphabetic # Mn       MIAO SIGN CONSONANT MODIFIER BAR\n16F51..16F87  ; Other_Alphabetic # Mc  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI\n16F8F..16F92  ; Other_Alphabetic # Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n16FF0..16FF1  ; Other_Alphabetic # Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY\n1BC9E         ; Other_Alphabetic # Mn       DUPLOYAN DOUBLE MARK\n1E000..1E006  ; Other_Alphabetic # Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n1E008..1E018  ; Other_Alphabetic # Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n1E01B..1E021  ; Other_Alphabetic # Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n1E023..1E024  ; Other_Alphabetic # Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n1E026..1E02A  ; Other_Alphabetic # Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n1E08F         ; Other_Alphabetic # Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n1E6E3         ; Other_Alphabetic # Mn       TAI YO SIGN UE\n1E6E6         ; Other_Alphabetic # Mn       TAI YO SIGN AU\n1E6EE..1E6EF  ; Other_Alphabetic # Mn   [2] TAI YO SIGN AY..TAI YO SIGN ANG\n1E6F5         ; Other_Alphabetic # Mn       TAI YO SIGN OM\n1E947         ; Other_Alphabetic # Mn       ADLAM HAMZA\n1F130..1F149  ; Other_Alphabetic # So  [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z\n1F150..1F169  ; Other_Alphabetic # So  [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z\n1F170..1F189  ; Other_Alphabetic # So  [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z\n\n# Total code points: 1510\n\n# ================================================\n\n3006          ; Ideographic # Lo       IDEOGRAPHIC CLOSING MARK\n3007          ; Ideographic # Nl       IDEOGRAPHIC NUMBER ZERO\n3021..3029    ; Ideographic # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE\n3038..303A    ; Ideographic # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY\n3400..4DBF    ; Ideographic # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF\n4E00..9FFF    ; Ideographic # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF\nF900..FA6D    ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D\nFA70..FAD9    ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9\n16FE4         ; Ideographic # Mn       KHITAN SMALL SCRIPT FILLER\n16FF2..16FF3  ; Ideographic # Lm   [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER\n16FF4..16FF6  ; Ideographic # Nl   [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS\n17000..18CD5  ; Ideographic # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5\n18CFF..18D1E  ; Ideographic # Lo  [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E\n18D80..18DF2  ; Ideographic # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883\n1B170..1B2FB  ; Ideographic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB\n20000..2A6DF  ; Ideographic # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF\n2A700..2B81D  ; Ideographic # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D\n2B820..2CEAD  ; Ideographic # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD\n2CEB0..2EBE0  ; Ideographic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0\n2EBF0..2EE5D  ; Ideographic # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D\n2F800..2FA1D  ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D\n30000..3134A  ; Ideographic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A\n31350..33479  ; Ideographic # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479\n\n# Total code points: 110943\n\n# ================================================\n\n005E          ; Diacritic # Sk       CIRCUMFLEX ACCENT\n0060          ; Diacritic # Sk       GRAVE ACCENT\n00A8          ; Diacritic # Sk       DIAERESIS\n00AF          ; Diacritic # Sk       MACRON\n00B4          ; Diacritic # Sk       ACUTE ACCENT\n00B7          ; Diacritic # Po       MIDDLE DOT\n00B8          ; Diacritic # Sk       CEDILLA\n02B0..02C1    ; Diacritic # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP\n02C2..02C5    ; Diacritic # Sk   [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD\n02C6..02D1    ; Diacritic # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON\n02D2..02DF    ; Diacritic # Sk  [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT\n02E0..02E4    ; Diacritic # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n02E5..02EB    ; Diacritic # Sk   [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK\n02EC          ; Diacritic # Lm       MODIFIER LETTER VOICING\n02ED          ; Diacritic # Sk       MODIFIER LETTER UNASPIRATED\n02EE          ; Diacritic # Lm       MODIFIER LETTER DOUBLE APOSTROPHE\n02EF..02FF    ; Diacritic # Sk  [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW\n0300..034E    ; Diacritic # Mn  [79] COMBINING GRAVE ACCENT..COMBINING UPWARDS ARROW BELOW\n0350..0357    ; Diacritic # Mn   [8] COMBINING RIGHT ARROWHEAD ABOVE..COMBINING RIGHT HALF RING ABOVE\n035D..0362    ; Diacritic # Mn   [6] COMBINING DOUBLE BREVE..COMBINING DOUBLE RIGHTWARDS ARROW BELOW\n0374          ; Diacritic # Lm       GREEK NUMERAL SIGN\n0375          ; Diacritic # Sk       GREEK LOWER NUMERAL SIGN\n037A          ; Diacritic # Lm       GREEK YPOGEGRAMMENI\n0384..0385    ; Diacritic # Sk   [2] GREEK TONOS..GREEK DIALYTIKA TONOS\n0483..0487    ; Diacritic # Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\n0559          ; Diacritic # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING\n0591..05BD    ; Diacritic # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\n05BF          ; Diacritic # Mn       HEBREW POINT RAFE\n05C1..05C2    ; Diacritic # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n05C4..05C5    ; Diacritic # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n05C7          ; Diacritic # Mn       HEBREW POINT QAMATS QATAN\n064B..0652    ; Diacritic # Mn   [8] ARABIC FATHATAN..ARABIC SUKUN\n0657..0658    ; Diacritic # Mn   [2] ARABIC INVERTED DAMMA..ARABIC MARK NOON GHUNNA\n06DF..06E0    ; Diacritic # Mn   [2] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO\n06E5..06E6    ; Diacritic # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH\n06EA..06EC    ; Diacritic # Mn   [3] ARABIC EMPTY CENTRE LOW STOP..ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE\n0730..074A    ; Diacritic # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\n07A6..07B0    ; Diacritic # Mn  [11] THAANA ABAFILI..THAANA SUKUN\n07EB..07F3    ; Diacritic # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\n07F4..07F5    ; Diacritic # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE\n0818..0819    ; Diacritic # Mn   [2] SAMARITAN MARK OCCLUSION..SAMARITAN MARK DAGESH\n0898..089F    ; Diacritic # Mn   [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA\n08C9          ; Diacritic # Lm       ARABIC SMALL FARSI YEH\n08CA..08D2    ; Diacritic # Mn   [9] ARABIC SMALL HIGH FARSI YEH..ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW\n08E3..08FE    ; Diacritic # Mn  [28] ARABIC TURNED DAMMA BELOW..ARABIC DAMMA WITH DOT\n093C          ; Diacritic # Mn       DEVANAGARI SIGN NUKTA\n094D          ; Diacritic # Mn       DEVANAGARI SIGN VIRAMA\n0951..0954    ; Diacritic # Mn   [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT\n0971          ; Diacritic # Lm       DEVANAGARI SIGN HIGH SPACING DOT\n09BC          ; Diacritic # Mn       BENGALI SIGN NUKTA\n09CD          ; Diacritic # Mn       BENGALI SIGN VIRAMA\n0A3C          ; Diacritic # Mn       GURMUKHI SIGN NUKTA\n0A4D          ; Diacritic # Mn       GURMUKHI SIGN VIRAMA\n0ABC          ; Diacritic # Mn       GUJARATI SIGN NUKTA\n0ACD          ; Diacritic # Mn       GUJARATI SIGN VIRAMA\n0AFD..0AFF    ; Diacritic # Mn   [3] GUJARATI SIGN THREE-DOT NUKTA ABOVE..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\n0B3C          ; Diacritic # Mn       ORIYA SIGN NUKTA\n0B4D          ; Diacritic # Mn       ORIYA SIGN VIRAMA\n0B55          ; Diacritic # Mn       ORIYA SIGN OVERLINE\n0BCD          ; Diacritic # Mn       TAMIL SIGN VIRAMA\n0C3C          ; Diacritic # Mn       TELUGU SIGN NUKTA\n0C4D          ; Diacritic # Mn       TELUGU SIGN VIRAMA\n0CBC          ; Diacritic # Mn       KANNADA SIGN NUKTA\n0CCD          ; Diacritic # Mn       KANNADA SIGN VIRAMA\n0D3B..0D3C    ; Diacritic # Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n0D4D          ; Diacritic # Mn       MALAYALAM SIGN VIRAMA\n0DCA          ; Diacritic # Mn       SINHALA SIGN AL-LAKUNA\n0E3A          ; Diacritic # Mn       THAI CHARACTER PHINTHU\n0E47..0E4C    ; Diacritic # Mn   [6] THAI CHARACTER MAITAIKHU..THAI CHARACTER THANTHAKHAT\n0E4E          ; Diacritic # Mn       THAI CHARACTER YAMAKKAN\n0EBA          ; Diacritic # Mn       LAO SIGN PALI VIRAMA\n0EC8..0ECC    ; Diacritic # Mn   [5] LAO TONE MAI EK..LAO CANCELLATION MARK\n0F18..0F19    ; Diacritic # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\n0F35          ; Diacritic # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA\n0F37          ; Diacritic # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS\n0F39          ; Diacritic # Mn       TIBETAN MARK TSA -PHRU\n0F3E..0F3F    ; Diacritic # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES\n0F82..0F84    ; Diacritic # Mn   [3] TIBETAN SIGN NYI ZLA NAA DA..TIBETAN MARK HALANTA\n0F86..0F87    ; Diacritic # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\n0FC6          ; Diacritic # Mn       TIBETAN SYMBOL PADMA GDAN\n1037          ; Diacritic # Mn       MYANMAR SIGN DOT BELOW\n1039..103A    ; Diacritic # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\n1063..1064    ; Diacritic # Mc   [2] MYANMAR TONE MARK SGAW KAREN HATHI..MYANMAR TONE MARK SGAW KAREN KE PHO\n1069..106D    ; Diacritic # Mc   [5] MYANMAR SIGN WESTERN PWO KAREN TONE-1..MYANMAR SIGN WESTERN PWO KAREN TONE-5\n1087..108C    ; Diacritic # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3\n108D          ; Diacritic # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n108F          ; Diacritic # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5\n109A..109B    ; Diacritic # Mc   [2] MYANMAR SIGN KHAMTI TONE-1..MYANMAR SIGN KHAMTI TONE-3\n135D..135F    ; Diacritic # Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\n1714          ; Diacritic # Mn       TAGALOG SIGN VIRAMA\n1715          ; Diacritic # Mc       TAGALOG SIGN PAMUDPOD\n1734          ; Diacritic # Mc       HANUNOO SIGN PAMUDPOD\n17C9..17D3    ; Diacritic # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\n17DD          ; Diacritic # Mn       KHMER SIGN ATTHACAN\n1939..193B    ; Diacritic # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\n1A60          ; Diacritic # Mn       TAI THAM SIGN SAKOT\n1A75..1A7C    ; Diacritic # Mn   [8] TAI THAM SIGN TONE-1..TAI THAM SIGN KHUEN-LUE KARAN\n1A7F          ; Diacritic # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT\n1AB0..1ABD    ; Diacritic # Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\n1ABE          ; Diacritic # Me       COMBINING PARENTHESES OVERLAY\n1AC1..1ACB    ; Diacritic # Mn  [11] COMBINING LEFT PARENTHESIS ABOVE LEFT..COMBINING TRIPLE ACUTE ACCENT\n1ACF..1ADD    ; Diacritic # Mn  [15] COMBINING DOUBLE CARON..COMBINING DOT-AND-RING BELOW\n1AE0..1AEB    ; Diacritic # Mn  [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE\n1B34          ; Diacritic # Mn       BALINESE SIGN REREKAN\n1B44          ; Diacritic # Mc       BALINESE ADEG ADEG\n1B6B..1B73    ; Diacritic # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\n1BAA          ; Diacritic # Mc       SUNDANESE SIGN PAMAAEH\n1BAB          ; Diacritic # Mn       SUNDANESE SIGN VIRAMA\n1BE6          ; Diacritic # Mn       BATAK SIGN TOMPI\n1BF2..1BF3    ; Diacritic # Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN\n1C36..1C37    ; Diacritic # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\n1C78..1C7D    ; Diacritic # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD\n1CD0..1CD2    ; Diacritic # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\n1CD3          ; Diacritic # Po       VEDIC SIGN NIHSHVASA\n1CD4..1CE0    ; Diacritic # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n1CE1          ; Diacritic # Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\n1CE2..1CE8    ; Diacritic # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n1CED          ; Diacritic # Mn       VEDIC SIGN TIRYAK\n1CF4          ; Diacritic # Mn       VEDIC TONE CANDRA ABOVE\n1CF7          ; Diacritic # Mc       VEDIC SIGN ATIKRAMA\n1CF8..1CF9    ; Diacritic # Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n1D2C..1D6A    ; Diacritic # Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D9B..1DBE    ; Diacritic # Lm  [36] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL EZH\n1DC4..1DCF    ; Diacritic # Mn  [12] COMBINING MACRON-ACUTE..COMBINING ZIGZAG BELOW\n1DF5..1DFF    ; Diacritic # Mn  [11] COMBINING UP TACK ABOVE..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\n1FBD          ; Diacritic # Sk       GREEK KORONIS\n1FBF..1FC1    ; Diacritic # Sk   [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI\n1FCD..1FCF    ; Diacritic # Sk   [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI\n1FDD..1FDF    ; Diacritic # Sk   [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI\n1FED..1FEF    ; Diacritic # Sk   [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA\n1FFD..1FFE    ; Diacritic # Sk   [2] GREEK OXIA..GREEK DASIA\n2CEF..2CF1    ; Diacritic # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\n2E2F          ; Diacritic # Lm       VERTICAL TILDE\n302A..302D    ; Diacritic # Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n302E..302F    ; Diacritic # Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\n3099..309A    ; Diacritic # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n309B..309C    ; Diacritic # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n30FC          ; Diacritic # Lm       KATAKANA-HIRAGANA PROLONGED SOUND MARK\nA66F          ; Diacritic # Mn       COMBINING CYRILLIC VZMET\nA67C..A67D    ; Diacritic # Mn   [2] COMBINING CYRILLIC KAVYKA..COMBINING CYRILLIC PAYEROK\nA67F          ; Diacritic # Lm       CYRILLIC PAYEROK\nA69C..A69D    ; Diacritic # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA6F0..A6F1    ; Diacritic # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\nA700..A716    ; Diacritic # Sk  [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR\nA717..A71F    ; Diacritic # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK\nA720..A721    ; Diacritic # Sk   [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE\nA788          ; Diacritic # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT\nA789..A78A    ; Diacritic # Sk   [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN\nA7F1          ; Diacritic # Lm       MODIFIER LETTER CAPITAL S\nA7F8..A7F9    ; Diacritic # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA806          ; Diacritic # Mn       SYLOTI NAGRI SIGN HASANTA\nA82C          ; Diacritic # Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA\nA8C4          ; Diacritic # Mn       SAURASHTRA SIGN VIRAMA\nA8E0..A8F1    ; Diacritic # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\nA92B..A92D    ; Diacritic # Mn   [3] KAYAH LI TONE PLOPHU..KAYAH LI TONE CALYA PLOPHU\nA92E          ; Diacritic # Po       KAYAH LI SIGN CWI\nA953          ; Diacritic # Mc       REJANG VIRAMA\nA9B3          ; Diacritic # Mn       JAVANESE SIGN CECAK TELU\nA9C0          ; Diacritic # Mc       JAVANESE PANGKON\nA9E5          ; Diacritic # Mn       MYANMAR SIGN SHAN SAW\nAA7B          ; Diacritic # Mc       MYANMAR SIGN PAO KAREN TONE\nAA7C          ; Diacritic # Mn       MYANMAR SIGN TAI LAING TONE-2\nAA7D          ; Diacritic # Mc       MYANMAR SIGN TAI LAING TONE-5\nAABF          ; Diacritic # Mn       TAI VIET TONE MAI EK\nAAC0          ; Diacritic # Lo       TAI VIET TONE MAI NUENG\nAAC1          ; Diacritic # Mn       TAI VIET TONE MAI THO\nAAC2          ; Diacritic # Lo       TAI VIET TONE MAI SONG\nAAF6          ; Diacritic # Mn       MEETEI MAYEK VIRAMA\nAB5B          ; Diacritic # Sk       MODIFIER BREVE WITH INVERTED BREVE\nAB5C..AB5F    ; Diacritic # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB69          ; Diacritic # Lm       MODIFIER LETTER SMALL TURNED W\nAB6A..AB6B    ; Diacritic # Sk   [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK\nABEC          ; Diacritic # Mc       MEETEI MAYEK LUM IYEK\nABED          ; Diacritic # Mn       MEETEI MAYEK APUN IYEK\nFB1E          ; Diacritic # Mn       HEBREW POINT JUDEO-SPANISH VARIKA\nFE20..FE2F    ; Diacritic # Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\nFF3E          ; Diacritic # Sk       FULLWIDTH CIRCUMFLEX ACCENT\nFF40          ; Diacritic # Sk       FULLWIDTH GRAVE ACCENT\nFF70          ; Diacritic # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF9E..FF9F    ; Diacritic # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\nFFE3          ; Diacritic # Sk       FULLWIDTH MACRON\n102E0         ; Diacritic # Mn       COPTIC EPACT THOUSANDS MARK\n10780..10785  ; Diacritic # Lm   [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; Diacritic # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; Diacritic # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n10A38..10A3A  ; Diacritic # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\n10A3F         ; Diacritic # Mn       KHAROSHTHI VIRAMA\n10AE5..10AE6  ; Diacritic # Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\n10D22..10D23  ; Diacritic # Lo   [2] HANIFI ROHINGYA MARK SAKIN..HANIFI ROHINGYA MARK NA KHONNA\n10D24..10D27  ; Diacritic # Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n10D4E         ; Diacritic # Lm       GARAY VOWEL LENGTH MARK\n10D69..10D6D  ; Diacritic # Mn   [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK\n10EFA         ; Diacritic # Mn       ARABIC DOUBLE VERTICAL BAR BELOW\n10EFD..10EFF  ; Diacritic # Mn   [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA\n10F46..10F50  ; Diacritic # Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW\n10F82..10F85  ; Diacritic # Mn   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW\n11046         ; Diacritic # Mn       BRAHMI VIRAMA\n11070         ; Diacritic # Mn       BRAHMI SIGN OLD TAMIL VIRAMA\n110B9..110BA  ; Diacritic # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\n11133..11134  ; Diacritic # Mn   [2] CHAKMA VIRAMA..CHAKMA MAAYYAA\n11173         ; Diacritic # Mn       MAHAJANI SIGN NUKTA\n111C0         ; Diacritic # Mc       SHARADA SIGN VIRAMA\n111CA..111CC  ; Diacritic # Mn   [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK\n11235         ; Diacritic # Mc       KHOJKI SIGN VIRAMA\n11236         ; Diacritic # Mn       KHOJKI SIGN NUKTA\n112E9..112EA  ; Diacritic # Mn   [2] KHUDAWADI SIGN NUKTA..KHUDAWADI SIGN VIRAMA\n1133B..1133C  ; Diacritic # Mn   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA\n1134D         ; Diacritic # Mc       GRANTHA SIGN VIRAMA\n11366..1136C  ; Diacritic # Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\n11370..11374  ; Diacritic # Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\n113CE         ; Diacritic # Mn       TULU-TIGALARI SIGN VIRAMA\n113CF         ; Diacritic # Mc       TULU-TIGALARI SIGN LOOPED VIRAMA\n113D0         ; Diacritic # Mn       TULU-TIGALARI CONJOINER\n113D2         ; Diacritic # Mn       TULU-TIGALARI GEMINATION MARK\n113D3         ; Diacritic # Lo       TULU-TIGALARI SIGN PLUTA\n113E1..113E2  ; Diacritic # Mn   [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA\n11442         ; Diacritic # Mn       NEWA SIGN VIRAMA\n11446         ; Diacritic # Mn       NEWA SIGN NUKTA\n114C2..114C3  ; Diacritic # Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\n115BF..115C0  ; Diacritic # Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\n1163F         ; Diacritic # Mn       MODI SIGN VIRAMA\n116B6         ; Diacritic # Mc       TAKRI SIGN VIRAMA\n116B7         ; Diacritic # Mn       TAKRI SIGN NUKTA\n1172B         ; Diacritic # Mn       AHOM SIGN KILLER\n11839..1183A  ; Diacritic # Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA\n1193D         ; Diacritic # Mc       DIVES AKURU SIGN HALANTA\n1193E         ; Diacritic # Mn       DIVES AKURU VIRAMA\n11943         ; Diacritic # Mn       DIVES AKURU SIGN NUKTA\n119E0         ; Diacritic # Mn       NANDINAGARI SIGN VIRAMA\n11A34         ; Diacritic # Mn       ZANABAZAR SQUARE SIGN VIRAMA\n11A47         ; Diacritic # Mn       ZANABAZAR SQUARE SUBJOINER\n11A99         ; Diacritic # Mn       SOYOMBO SUBJOINER\n11C3F         ; Diacritic # Mn       BHAIKSUKI SIGN VIRAMA\n11D42         ; Diacritic # Mn       MASARAM GONDI SIGN NUKTA\n11D44..11D45  ; Diacritic # Mn   [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA\n11D97         ; Diacritic # Mn       GUNJALA GONDI VIRAMA\n11DD9         ; Diacritic # Lm       TOLONG SIKI SIGN SELA\n11F41         ; Diacritic # Mc       KAWI SIGN KILLER\n11F42         ; Diacritic # Mn       KAWI CONJOINER\n11F5A         ; Diacritic # Mn       KAWI SIGN NUKTA\n13447..13455  ; Diacritic # Mn  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED\n1612F         ; Diacritic # Mn       GURUNG KHEMA SIGN THOLHOMA\n16AF0..16AF4  ; Diacritic # Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\n16B30..16B36  ; Diacritic # Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\n16D6B..16D6C  ; Diacritic # Lm   [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT\n16F8F..16F92  ; Diacritic # Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n16F93..16F9F  ; Diacritic # Lm  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8\n16FF0..16FF1  ; Diacritic # Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY\n1AFF0..1AFF3  ; Diacritic # Lm   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5\n1AFF5..1AFFB  ; Diacritic # Lm   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5\n1AFFD..1AFFE  ; Diacritic # Lm   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8\n1CF00..1CF2D  ; Diacritic # Mn  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT\n1CF30..1CF46  ; Diacritic # Mn  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG\n1D167..1D169  ; Diacritic # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\n1D16D..1D172  ; Diacritic # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5\n1D17B..1D182  ; Diacritic # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\n1D185..1D18B  ; Diacritic # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\n1D1AA..1D1AD  ; Diacritic # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\n1E030..1E06D  ; Diacritic # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E130..1E136  ; Diacritic # Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D\n1E2AE         ; Diacritic # Mn       TOTO SIGN RISING TONE\n1E2EC..1E2EF  ; Diacritic # Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI\n1E5EE..1E5EF  ; Diacritic # Mn   [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR\n1E8D0..1E8D6  ; Diacritic # Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\n1E944..1E946  ; Diacritic # Mn   [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK\n1E948..1E94A  ; Diacritic # Mn   [3] ADLAM CONSONANT MODIFIER..ADLAM NUKTA\n\n# Total code points: 1247\n\n# ================================================\n\n00B7          ; Extender # Po       MIDDLE DOT\n02D0..02D1    ; Extender # Lm   [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON\n0640          ; Extender # Lm       ARABIC TATWEEL\n07FA          ; Extender # Lm       NKO LAJANYALAN\n0A71          ; Extender # Mn       GURMUKHI ADDAK\n0AFB          ; Extender # Mn       GUJARATI SIGN SHADDA\n0B55          ; Extender # Mn       ORIYA SIGN OVERLINE\n0E46          ; Extender # Lm       THAI CHARACTER MAIYAMOK\n0EC6          ; Extender # Lm       LAO KO LA\n180A          ; Extender # Po       MONGOLIAN NIRUGU\n1843          ; Extender # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN\n1AA7          ; Extender # Lm       TAI THAM SIGN MAI YAMOK\n1C36          ; Extender # Mn       LEPCHA SIGN RAN\n1C7B          ; Extender # Lm       OL CHIKI RELAA\n3005          ; Extender # Lm       IDEOGRAPHIC ITERATION MARK\n3031..3035    ; Extender # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF\n309D..309E    ; Extender # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK\n30FC..30FE    ; Extender # Lm   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK\nA015          ; Extender # Lm       YI SYLLABLE WU\nA60C          ; Extender # Lm       VAI SYLLABLE LENGTHENER\nA9CF          ; Extender # Lm       JAVANESE PANGRANGKEP\nA9E6          ; Extender # Lm       MYANMAR MODIFIER LETTER SHAN REDUPLICATION\nAA70          ; Extender # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION\nAADD          ; Extender # Lm       TAI VIET SYMBOL SAM\nAAF3..AAF4    ; Extender # Lm   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK\nFF70          ; Extender # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\n10781..10782  ; Extender # Lm   [2] MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON..MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON\n10D4E         ; Extender # Lm       GARAY VOWEL LENGTH MARK\n10D6A         ; Extender # Mn       GARAY CONSONANT GEMINATION MARK\n10D6F         ; Extender # Lm       GARAY REDUPLICATION MARK\n11237         ; Extender # Mn       KHOJKI SIGN SHADDA\n1135D         ; Extender # Lo       GRANTHA SIGN PLUTA\n113D2         ; Extender # Mn       TULU-TIGALARI GEMINATION MARK\n113D3         ; Extender # Lo       TULU-TIGALARI SIGN PLUTA\n115C6..115C8  ; Extender # Po   [3] SIDDHAM REPETITION MARK-1..SIDDHAM REPETITION MARK-3\n11A98         ; Extender # Mn       SOYOMBO GEMINATION MARK\n11DD9         ; Extender # Lm       TOLONG SIKI SIGN SELA\n16B42..16B43  ; Extender # Lm   [2] PAHAWH HMONG SIGN VOS NRUA..PAHAWH HMONG SIGN IB YAM\n16FE0..16FE1  ; Extender # Lm   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK\n16FE3         ; Extender # Lm       OLD CHINESE ITERATION MARK\n16FF2..16FF3  ; Extender # Lm   [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER\n1E13C..1E13D  ; Extender # Lm   [2] NYIAKENG PUACHUE HMONG SIGN XW XW..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER\n1E5EF         ; Extender # Mn       OL ONAL SIGN IKIR\n1E944..1E946  ; Extender # Mn   [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK\n\n# Total code points: 62\n\n# ================================================\n\n00AA          ; Other_Lowercase # Lo       FEMININE ORDINAL INDICATOR\n00BA          ; Other_Lowercase # Lo       MASCULINE ORDINAL INDICATOR\n02B0..02B8    ; Other_Lowercase # Lm   [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y\n02C0..02C1    ; Other_Lowercase # Lm   [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP\n02E0..02E4    ; Other_Lowercase # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n0345          ; Other_Lowercase # Mn       COMBINING GREEK YPOGEGRAMMENI\n037A          ; Other_Lowercase # Lm       GREEK YPOGEGRAMMENI\n10FC          ; Other_Lowercase # Lm       MODIFIER LETTER GEORGIAN NAR\n1D2C..1D6A    ; Other_Lowercase # Lm  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI\n1D78          ; Other_Lowercase # Lm       MODIFIER LETTER CYRILLIC EN\n1D9B..1DBF    ; Other_Lowercase # Lm  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA\n2071          ; Other_Lowercase # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n207F          ; Other_Lowercase # Lm       SUPERSCRIPT LATIN SMALL LETTER N\n2090..209C    ; Other_Lowercase # Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n2170..217F    ; Other_Lowercase # Nl  [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND\n24D0..24E9    ; Other_Lowercase # So  [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z\n2C7C..2C7D    ; Other_Lowercase # Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\nA69C..A69D    ; Other_Lowercase # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA770          ; Other_Lowercase # Lm       MODIFIER LETTER US\nA7F1..A7F4    ; Other_Lowercase # Lm   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F8..A7F9    ; Other_Lowercase # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nAB5C..AB5F    ; Other_Lowercase # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB69          ; Other_Lowercase # Lm       MODIFIER LETTER SMALL TURNED W\n10780         ; Other_Lowercase # Lm       MODIFIER LETTER SMALL CAPITAL AA\n10783..10785  ; Other_Lowercase # Lm   [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; Other_Lowercase # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; Other_Lowercase # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n1E030..1E06D  ; Other_Lowercase # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n\n# Total code points: 312\n\n# ================================================\n\n2160..216F    ; Other_Uppercase # Nl  [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND\n24B6..24CF    ; Other_Uppercase # So  [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z\n1F130..1F149  ; Other_Uppercase # So  [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z\n1F150..1F169  ; Other_Uppercase # So  [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z\n1F170..1F189  ; Other_Uppercase # So  [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z\n\n# Total code points: 120\n\n# ================================================\n\nFDD0..FDEF    ; Noncharacter_Code_Point # Cn  [32] <noncharacter-FDD0>..<noncharacter-FDEF>\nFFFE..FFFF    ; Noncharacter_Code_Point # Cn   [2] <noncharacter-FFFE>..<noncharacter-FFFF>\n1FFFE..1FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-1FFFE>..<noncharacter-1FFFF>\n2FFFE..2FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-2FFFE>..<noncharacter-2FFFF>\n3FFFE..3FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-3FFFE>..<noncharacter-3FFFF>\n4FFFE..4FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-4FFFE>..<noncharacter-4FFFF>\n5FFFE..5FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-5FFFE>..<noncharacter-5FFFF>\n6FFFE..6FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-6FFFE>..<noncharacter-6FFFF>\n7FFFE..7FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-7FFFE>..<noncharacter-7FFFF>\n8FFFE..8FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-8FFFE>..<noncharacter-8FFFF>\n9FFFE..9FFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-9FFFE>..<noncharacter-9FFFF>\nAFFFE..AFFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-AFFFE>..<noncharacter-AFFFF>\nBFFFE..BFFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-BFFFE>..<noncharacter-BFFFF>\nCFFFE..CFFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-CFFFE>..<noncharacter-CFFFF>\nDFFFE..DFFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-DFFFE>..<noncharacter-DFFFF>\nEFFFE..EFFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-EFFFE>..<noncharacter-EFFFF>\nFFFFE..FFFFF  ; Noncharacter_Code_Point # Cn   [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>\n10FFFE..10FFFF; Noncharacter_Code_Point # Cn   [2] <noncharacter-10FFFE>..<noncharacter-10FFFF>\n\n# Total code points: 66\n\n# ================================================\n\n09BE          ; Other_Grapheme_Extend # Mc       BENGALI VOWEL SIGN AA\n09D7          ; Other_Grapheme_Extend # Mc       BENGALI AU LENGTH MARK\n0B3E          ; Other_Grapheme_Extend # Mc       ORIYA VOWEL SIGN AA\n0B57          ; Other_Grapheme_Extend # Mc       ORIYA AU LENGTH MARK\n0BBE          ; Other_Grapheme_Extend # Mc       TAMIL VOWEL SIGN AA\n0BD7          ; Other_Grapheme_Extend # Mc       TAMIL AU LENGTH MARK\n0CC0          ; Other_Grapheme_Extend # Mc       KANNADA VOWEL SIGN II\n0CC2          ; Other_Grapheme_Extend # Mc       KANNADA VOWEL SIGN UU\n0CC7..0CC8    ; Other_Grapheme_Extend # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n0CCA..0CCB    ; Other_Grapheme_Extend # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n0CD5..0CD6    ; Other_Grapheme_Extend # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n0D3E          ; Other_Grapheme_Extend # Mc       MALAYALAM VOWEL SIGN AA\n0D57          ; Other_Grapheme_Extend # Mc       MALAYALAM AU LENGTH MARK\n0DCF          ; Other_Grapheme_Extend # Mc       SINHALA VOWEL SIGN AELA-PILLA\n0DDF          ; Other_Grapheme_Extend # Mc       SINHALA VOWEL SIGN GAYANUKITTA\n1715          ; Other_Grapheme_Extend # Mc       TAGALOG SIGN PAMUDPOD\n1734          ; Other_Grapheme_Extend # Mc       HANUNOO SIGN PAMUDPOD\n1B35          ; Other_Grapheme_Extend # Mc       BALINESE VOWEL SIGN TEDUNG\n1B3B          ; Other_Grapheme_Extend # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG\n1B3D          ; Other_Grapheme_Extend # Mc       BALINESE VOWEL SIGN LA LENGA TEDUNG\n1B43..1B44    ; Other_Grapheme_Extend # Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG\n1BAA          ; Other_Grapheme_Extend # Mc       SUNDANESE SIGN PAMAAEH\n1BF2..1BF3    ; Other_Grapheme_Extend # Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN\n200C          ; Other_Grapheme_Extend # Cf       ZERO WIDTH NON-JOINER\n302E..302F    ; Other_Grapheme_Extend # Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\nA953          ; Other_Grapheme_Extend # Mc       REJANG VIRAMA\nA9C0          ; Other_Grapheme_Extend # Mc       JAVANESE PANGKON\nFF9E..FF9F    ; Other_Grapheme_Extend # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\n111C0         ; Other_Grapheme_Extend # Mc       SHARADA SIGN VIRAMA\n11235         ; Other_Grapheme_Extend # Mc       KHOJKI SIGN VIRAMA\n1133E         ; Other_Grapheme_Extend # Mc       GRANTHA VOWEL SIGN AA\n1134D         ; Other_Grapheme_Extend # Mc       GRANTHA SIGN VIRAMA\n11357         ; Other_Grapheme_Extend # Mc       GRANTHA AU LENGTH MARK\n113B8         ; Other_Grapheme_Extend # Mc       TULU-TIGALARI VOWEL SIGN AA\n113C2         ; Other_Grapheme_Extend # Mc       TULU-TIGALARI VOWEL SIGN EE\n113C5         ; Other_Grapheme_Extend # Mc       TULU-TIGALARI VOWEL SIGN AI\n113C7..113C9  ; Other_Grapheme_Extend # Mc   [3] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI AU LENGTH MARK\n113CF         ; Other_Grapheme_Extend # Mc       TULU-TIGALARI SIGN LOOPED VIRAMA\n114B0         ; Other_Grapheme_Extend # Mc       TIRHUTA VOWEL SIGN AA\n114BD         ; Other_Grapheme_Extend # Mc       TIRHUTA VOWEL SIGN SHORT O\n115AF         ; Other_Grapheme_Extend # Mc       SIDDHAM VOWEL SIGN AA\n116B6         ; Other_Grapheme_Extend # Mc       TAKRI SIGN VIRAMA\n11930         ; Other_Grapheme_Extend # Mc       DIVES AKURU VOWEL SIGN AA\n1193D         ; Other_Grapheme_Extend # Mc       DIVES AKURU SIGN HALANTA\n11F41         ; Other_Grapheme_Extend # Mc       KAWI SIGN KILLER\n16FF0..16FF1  ; Other_Grapheme_Extend # Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY\n1D165..1D166  ; Other_Grapheme_Extend # Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\n1D16D..1D172  ; Other_Grapheme_Extend # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5\nE0020..E007F  ; Other_Grapheme_Extend # Cf  [96] TAG SPACE..CANCEL TAG\n\n# Total code points: 160\n\n# ================================================\n\n2FF0..2FF1    ; IDS_Binary_Operator # So   [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW\n2FF4..2FFD    ; IDS_Binary_Operator # So  [10] IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND..IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER RIGHT\n31EF          ; IDS_Binary_Operator # So       IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION\n\n# Total code points: 13\n\n# ================================================\n\n2FF2..2FF3    ; IDS_Trinary_Operator # So   [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW\n\n# Total code points: 2\n\n# ================================================\n\n2FFE..2FFF    ; IDS_Unary_Operator # So   [2] IDEOGRAPHIC DESCRIPTION CHARACTER HORIZONTAL REFLECTION..IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION\n\n# Total code points: 2\n\n# ================================================\n\n2E80..2E99    ; Radical # So  [26] CJK RADICAL REPEAT..CJK RADICAL RAP\n2E9B..2EF3    ; Radical # So  [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE\n2F00..2FD5    ; Radical # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE\n\n# Total code points: 329\n\n# ================================================\n\n3400..4DBF    ; Unified_Ideograph # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF\n4E00..9FFF    ; Unified_Ideograph # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF\nFA0E..FA0F    ; Unified_Ideograph # Lo   [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F\nFA11          ; Unified_Ideograph # Lo       CJK COMPATIBILITY IDEOGRAPH-FA11\nFA13..FA14    ; Unified_Ideograph # Lo   [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14\nFA1F          ; Unified_Ideograph # Lo       CJK COMPATIBILITY IDEOGRAPH-FA1F\nFA21          ; Unified_Ideograph # Lo       CJK COMPATIBILITY IDEOGRAPH-FA21\nFA23..FA24    ; Unified_Ideograph # Lo   [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24\nFA27..FA29    ; Unified_Ideograph # Lo   [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29\n20000..2A6DF  ; Unified_Ideograph # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF\n2A700..2B81D  ; Unified_Ideograph # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D\n2B820..2CEAD  ; Unified_Ideograph # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD\n2CEB0..2EBE0  ; Unified_Ideograph # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0\n2EBF0..2EE5D  ; Unified_Ideograph # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D\n30000..3134A  ; Unified_Ideograph # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A\n31350..33479  ; Unified_Ideograph # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479\n\n# Total code points: 101996\n\n# ================================================\n\n034F          ; Other_Default_Ignorable_Code_Point # Mn       COMBINING GRAPHEME JOINER\n115F..1160    ; Other_Default_Ignorable_Code_Point # Lo   [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER\n17B4..17B5    ; Other_Default_Ignorable_Code_Point # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n2065          ; Other_Default_Ignorable_Code_Point # Cn       <reserved-2065>\n3164          ; Other_Default_Ignorable_Code_Point # Lo       HANGUL FILLER\nFFA0          ; Other_Default_Ignorable_Code_Point # Lo       HALFWIDTH HANGUL FILLER\nFFF0..FFF8    ; Other_Default_Ignorable_Code_Point # Cn   [9] <reserved-FFF0>..<reserved-FFF8>\nE0000         ; Other_Default_Ignorable_Code_Point # Cn       <reserved-E0000>\nE0002..E001F  ; Other_Default_Ignorable_Code_Point # Cn  [30] <reserved-E0002>..<reserved-E001F>\nE0080..E00FF  ; Other_Default_Ignorable_Code_Point # Cn [128] <reserved-E0080>..<reserved-E00FF>\nE01F0..E0FFF  ; Other_Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>\n\n# Total code points: 3776\n\n# ================================================\n\n0149          ; Deprecated # L&       LATIN SMALL LETTER N PRECEDED BY APOSTROPHE\n0673          ; Deprecated # Lo       ARABIC LETTER ALEF WITH WAVY HAMZA BELOW\n0F77          ; Deprecated # Mn       TIBETAN VOWEL SIGN VOCALIC RR\n0F79          ; Deprecated # Mn       TIBETAN VOWEL SIGN VOCALIC LL\n17A3..17A4    ; Deprecated # Lo   [2] KHMER INDEPENDENT VOWEL QAQ..KHMER INDEPENDENT VOWEL QAA\n206A..206F    ; Deprecated # Cf   [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES\n2329          ; Deprecated # Ps       LEFT-POINTING ANGLE BRACKET\n232A          ; Deprecated # Pe       RIGHT-POINTING ANGLE BRACKET\nE0001         ; Deprecated # Cf       LANGUAGE TAG\n\n# Total code points: 15\n\n# ================================================\n\n0069..006A    ; Soft_Dotted # L&   [2] LATIN SMALL LETTER I..LATIN SMALL LETTER J\n012F          ; Soft_Dotted # L&       LATIN SMALL LETTER I WITH OGONEK\n0249          ; Soft_Dotted # L&       LATIN SMALL LETTER J WITH STROKE\n0268          ; Soft_Dotted # L&       LATIN SMALL LETTER I WITH STROKE\n029D          ; Soft_Dotted # L&       LATIN SMALL LETTER J WITH CROSSED-TAIL\n02B2          ; Soft_Dotted # Lm       MODIFIER LETTER SMALL J\n03F3          ; Soft_Dotted # L&       GREEK LETTER YOT\n0456          ; Soft_Dotted # L&       CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n0458          ; Soft_Dotted # L&       CYRILLIC SMALL LETTER JE\n1D62          ; Soft_Dotted # Lm       LATIN SUBSCRIPT SMALL LETTER I\n1D96          ; Soft_Dotted # L&       LATIN SMALL LETTER I WITH RETROFLEX HOOK\n1DA4          ; Soft_Dotted # Lm       MODIFIER LETTER SMALL I WITH STROKE\n1DA8          ; Soft_Dotted # Lm       MODIFIER LETTER SMALL J WITH CROSSED-TAIL\n1E2D          ; Soft_Dotted # L&       LATIN SMALL LETTER I WITH TILDE BELOW\n1ECB          ; Soft_Dotted # L&       LATIN SMALL LETTER I WITH DOT BELOW\n2071          ; Soft_Dotted # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n2148..2149    ; Soft_Dotted # L&   [2] DOUBLE-STRUCK ITALIC SMALL I..DOUBLE-STRUCK ITALIC SMALL J\n2C7C          ; Soft_Dotted # Lm       LATIN SUBSCRIPT SMALL LETTER J\n1D422..1D423  ; Soft_Dotted # L&   [2] MATHEMATICAL BOLD SMALL I..MATHEMATICAL BOLD SMALL J\n1D456..1D457  ; Soft_Dotted # L&   [2] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL J\n1D48A..1D48B  ; Soft_Dotted # L&   [2] MATHEMATICAL BOLD ITALIC SMALL I..MATHEMATICAL BOLD ITALIC SMALL J\n1D4BE..1D4BF  ; Soft_Dotted # L&   [2] MATHEMATICAL SCRIPT SMALL I..MATHEMATICAL SCRIPT SMALL J\n1D4F2..1D4F3  ; Soft_Dotted # L&   [2] MATHEMATICAL BOLD SCRIPT SMALL I..MATHEMATICAL BOLD SCRIPT SMALL J\n1D526..1D527  ; Soft_Dotted # L&   [2] MATHEMATICAL FRAKTUR SMALL I..MATHEMATICAL FRAKTUR SMALL J\n1D55A..1D55B  ; Soft_Dotted # L&   [2] MATHEMATICAL DOUBLE-STRUCK SMALL I..MATHEMATICAL DOUBLE-STRUCK SMALL J\n1D58E..1D58F  ; Soft_Dotted # L&   [2] MATHEMATICAL BOLD FRAKTUR SMALL I..MATHEMATICAL BOLD FRAKTUR SMALL J\n1D5C2..1D5C3  ; Soft_Dotted # L&   [2] MATHEMATICAL SANS-SERIF SMALL I..MATHEMATICAL SANS-SERIF SMALL J\n1D5F6..1D5F7  ; Soft_Dotted # L&   [2] MATHEMATICAL SANS-SERIF BOLD SMALL I..MATHEMATICAL SANS-SERIF BOLD SMALL J\n1D62A..1D62B  ; Soft_Dotted # L&   [2] MATHEMATICAL SANS-SERIF ITALIC SMALL I..MATHEMATICAL SANS-SERIF ITALIC SMALL J\n1D65E..1D65F  ; Soft_Dotted # L&   [2] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J\n1D692..1D693  ; Soft_Dotted # L&   [2] MATHEMATICAL MONOSPACE SMALL I..MATHEMATICAL MONOSPACE SMALL J\n1DF1A         ; Soft_Dotted # L&       LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK\n1E04C..1E04D  ; Soft_Dotted # Lm   [2] MODIFIER LETTER CYRILLIC SMALL BYELORUSSIAN-UKRAINIAN I..MODIFIER LETTER CYRILLIC SMALL JE\n1E068         ; Soft_Dotted # Lm       CYRILLIC SUBSCRIPT SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n\n# Total code points: 50\n\n# ================================================\n\n0E40..0E44    ; Logical_Order_Exception # Lo   [5] THAI CHARACTER SARA E..THAI CHARACTER SARA AI MAIMALAI\n0EC0..0EC4    ; Logical_Order_Exception # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI\n19B5..19B7    ; Logical_Order_Exception # Lo   [3] NEW TAI LUE VOWEL SIGN E..NEW TAI LUE VOWEL SIGN O\n19BA          ; Logical_Order_Exception # Lo       NEW TAI LUE VOWEL SIGN AY\nAAB5..AAB6    ; Logical_Order_Exception # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O\nAAB9          ; Logical_Order_Exception # Lo       TAI VIET VOWEL UEA\nAABB..AABC    ; Logical_Order_Exception # Lo   [2] TAI VIET VOWEL AUE..TAI VIET VOWEL AY\n\n# Total code points: 19\n\n# ================================================\n\n1885..1886    ; Other_ID_Start # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n2118          ; Other_ID_Start # Sm       SCRIPT CAPITAL P\n212E          ; Other_ID_Start # So       ESTIMATED SYMBOL\n309B..309C    ; Other_ID_Start # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n\n# Total code points: 6\n\n# ================================================\n\n00B7          ; Other_ID_Continue # Po       MIDDLE DOT\n0387          ; Other_ID_Continue # Po       GREEK ANO TELEIA\n1369..1371    ; Other_ID_Continue # No   [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE\n19DA          ; Other_ID_Continue # No       NEW TAI LUE THAM DIGIT ONE\n200C..200D    ; Other_ID_Continue # Cf   [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER\n30FB          ; Other_ID_Continue # Po       KATAKANA MIDDLE DOT\nFF65          ; Other_ID_Continue # Po       HALFWIDTH KATAKANA MIDDLE DOT\n\n# Total code points: 16\n\n# ================================================\n\n00B2..00B3    ; ID_Compat_Math_Continue # No   [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE\n00B9          ; ID_Compat_Math_Continue # No       SUPERSCRIPT ONE\n2070          ; ID_Compat_Math_Continue # No       SUPERSCRIPT ZERO\n2074..2079    ; ID_Compat_Math_Continue # No   [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE\n207A..207C    ; ID_Compat_Math_Continue # Sm   [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN\n207D          ; ID_Compat_Math_Continue # Ps       SUPERSCRIPT LEFT PARENTHESIS\n207E          ; ID_Compat_Math_Continue # Pe       SUPERSCRIPT RIGHT PARENTHESIS\n2080..2089    ; ID_Compat_Math_Continue # No  [10] SUBSCRIPT ZERO..SUBSCRIPT NINE\n208A..208C    ; ID_Compat_Math_Continue # Sm   [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN\n208D          ; ID_Compat_Math_Continue # Ps       SUBSCRIPT LEFT PARENTHESIS\n208E          ; ID_Compat_Math_Continue # Pe       SUBSCRIPT RIGHT PARENTHESIS\n2202          ; ID_Compat_Math_Continue # Sm       PARTIAL DIFFERENTIAL\n2207          ; ID_Compat_Math_Continue # Sm       NABLA\n221E          ; ID_Compat_Math_Continue # Sm       INFINITY\n1D6C1         ; ID_Compat_Math_Continue # Sm       MATHEMATICAL BOLD NABLA\n1D6DB         ; ID_Compat_Math_Continue # Sm       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL\n1D6FB         ; ID_Compat_Math_Continue # Sm       MATHEMATICAL ITALIC NABLA\n1D715         ; ID_Compat_Math_Continue # Sm       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL\n1D735         ; ID_Compat_Math_Continue # Sm       MATHEMATICAL BOLD ITALIC NABLA\n1D74F         ; ID_Compat_Math_Continue # Sm       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL\n1D76F         ; ID_Compat_Math_Continue # Sm       MATHEMATICAL SANS-SERIF BOLD NABLA\n1D789         ; ID_Compat_Math_Continue # Sm       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL\n1D7A9         ; ID_Compat_Math_Continue # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA\n1D7C3         ; ID_Compat_Math_Continue # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL\n\n# Total code points: 43\n\n# ================================================\n\n2202          ; ID_Compat_Math_Start # Sm       PARTIAL DIFFERENTIAL\n2207          ; ID_Compat_Math_Start # Sm       NABLA\n221E          ; ID_Compat_Math_Start # Sm       INFINITY\n1D6C1         ; ID_Compat_Math_Start # Sm       MATHEMATICAL BOLD NABLA\n1D6DB         ; ID_Compat_Math_Start # Sm       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL\n1D6FB         ; ID_Compat_Math_Start # Sm       MATHEMATICAL ITALIC NABLA\n1D715         ; ID_Compat_Math_Start # Sm       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL\n1D735         ; ID_Compat_Math_Start # Sm       MATHEMATICAL BOLD ITALIC NABLA\n1D74F         ; ID_Compat_Math_Start # Sm       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL\n1D76F         ; ID_Compat_Math_Start # Sm       MATHEMATICAL SANS-SERIF BOLD NABLA\n1D789         ; ID_Compat_Math_Start # Sm       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL\n1D7A9         ; ID_Compat_Math_Start # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA\n1D7C3         ; ID_Compat_Math_Start # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL\n\n# Total code points: 13\n\n# ================================================\n\n0021          ; Sentence_Terminal # Po       EXCLAMATION MARK\n002E          ; Sentence_Terminal # Po       FULL STOP\n003F          ; Sentence_Terminal # Po       QUESTION MARK\n0589          ; Sentence_Terminal # Po       ARMENIAN FULL STOP\n061D..061F    ; Sentence_Terminal # Po   [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK\n06D4          ; Sentence_Terminal # Po       ARABIC FULL STOP\n0700..0702    ; Sentence_Terminal # Po   [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP\n07F9          ; Sentence_Terminal # Po       NKO EXCLAMATION MARK\n0837          ; Sentence_Terminal # Po       SAMARITAN PUNCTUATION MELODIC QITSA\n0839          ; Sentence_Terminal # Po       SAMARITAN PUNCTUATION QITSA\n083D..083E    ; Sentence_Terminal # Po   [2] SAMARITAN PUNCTUATION SOF MASHFAAT..SAMARITAN PUNCTUATION ANNAAU\n0964..0965    ; Sentence_Terminal # Po   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA\n104A..104B    ; Sentence_Terminal # Po   [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION\n1362          ; Sentence_Terminal # Po       ETHIOPIC FULL STOP\n1367..1368    ; Sentence_Terminal # Po   [2] ETHIOPIC QUESTION MARK..ETHIOPIC PARAGRAPH SEPARATOR\n166E          ; Sentence_Terminal # Po       CANADIAN SYLLABICS FULL STOP\n1735..1736    ; Sentence_Terminal # Po   [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION\n17D4..17D5    ; Sentence_Terminal # Po   [2] KHMER SIGN KHAN..KHMER SIGN BARIYOOSAN\n1803          ; Sentence_Terminal # Po       MONGOLIAN FULL STOP\n1809          ; Sentence_Terminal # Po       MONGOLIAN MANCHU FULL STOP\n1944..1945    ; Sentence_Terminal # Po   [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK\n1AA8..1AAB    ; Sentence_Terminal # Po   [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU\n1B4E..1B4F    ; Sentence_Terminal # Po   [2] BALINESE INVERTED CARIK SIKI..BALINESE INVERTED CARIK PAREREN\n1B5A..1B5B    ; Sentence_Terminal # Po   [2] BALINESE PANTI..BALINESE PAMADA\n1B5E..1B5F    ; Sentence_Terminal # Po   [2] BALINESE CARIK SIKI..BALINESE CARIK PAREREN\n1B7D..1B7F    ; Sentence_Terminal # Po   [3] BALINESE PANTI LANTANG..BALINESE PANTI BAWAK\n1C3B..1C3C    ; Sentence_Terminal # Po   [2] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION NYET THYOOM TA-ROL\n1C7E..1C7F    ; Sentence_Terminal # Po   [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD\n2024          ; Sentence_Terminal # Po       ONE DOT LEADER\n203C..203D    ; Sentence_Terminal # Po   [2] DOUBLE EXCLAMATION MARK..INTERROBANG\n2047..2049    ; Sentence_Terminal # Po   [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK\n2CF9..2CFB    ; Sentence_Terminal # Po   [3] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN INDIRECT QUESTION MARK\n2E2E          ; Sentence_Terminal # Po       REVERSED QUESTION MARK\n2E3C          ; Sentence_Terminal # Po       STENOGRAPHIC FULL STOP\n2E53..2E54    ; Sentence_Terminal # Po   [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK\n3002          ; Sentence_Terminal # Po       IDEOGRAPHIC FULL STOP\nA4FF          ; Sentence_Terminal # Po       LISU PUNCTUATION FULL STOP\nA60E..A60F    ; Sentence_Terminal # Po   [2] VAI FULL STOP..VAI QUESTION MARK\nA6F3          ; Sentence_Terminal # Po       BAMUM FULL STOP\nA6F7          ; Sentence_Terminal # Po       BAMUM QUESTION MARK\nA876..A877    ; Sentence_Terminal # Po   [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD\nA8CE..A8CF    ; Sentence_Terminal # Po   [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA\nA92F          ; Sentence_Terminal # Po       KAYAH LI SIGN SHYA\nA9C8..A9C9    ; Sentence_Terminal # Po   [2] JAVANESE PADA LINGSA..JAVANESE PADA LUNGSI\nAA5D..AA5F    ; Sentence_Terminal # Po   [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA\nAAF0..AAF1    ; Sentence_Terminal # Po   [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM\nABEB          ; Sentence_Terminal # Po       MEETEI MAYEK CHEIKHEI\nFE12          ; Sentence_Terminal # Po       PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP\nFE15..FE16    ; Sentence_Terminal # Po   [2] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK..PRESENTATION FORM FOR VERTICAL QUESTION MARK\nFE52          ; Sentence_Terminal # Po       SMALL FULL STOP\nFE56..FE57    ; Sentence_Terminal # Po   [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK\nFF01          ; Sentence_Terminal # Po       FULLWIDTH EXCLAMATION MARK\nFF0E          ; Sentence_Terminal # Po       FULLWIDTH FULL STOP\nFF1F          ; Sentence_Terminal # Po       FULLWIDTH QUESTION MARK\nFF61          ; Sentence_Terminal # Po       HALFWIDTH IDEOGRAPHIC FULL STOP\n10A56..10A57  ; Sentence_Terminal # Po   [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA\n10F55..10F59  ; Sentence_Terminal # Po   [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT\n10F86..10F89  ; Sentence_Terminal # Po   [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS\n11047..11048  ; Sentence_Terminal # Po   [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA\n110BE..110C1  ; Sentence_Terminal # Po   [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA\n11141..11143  ; Sentence_Terminal # Po   [3] CHAKMA DANDA..CHAKMA QUESTION MARK\n111C5..111C6  ; Sentence_Terminal # Po   [2] SHARADA DANDA..SHARADA DOUBLE DANDA\n111CD         ; Sentence_Terminal # Po       SHARADA SUTRA MARK\n111DE..111DF  ; Sentence_Terminal # Po   [2] SHARADA SECTION MARK-1..SHARADA SECTION MARK-2\n11238..11239  ; Sentence_Terminal # Po   [2] KHOJKI DANDA..KHOJKI DOUBLE DANDA\n1123B..1123C  ; Sentence_Terminal # Po   [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK\n112A9         ; Sentence_Terminal # Po       MULTANI SECTION MARK\n113D4..113D5  ; Sentence_Terminal # Po   [2] TULU-TIGALARI DANDA..TULU-TIGALARI DOUBLE DANDA\n1144B..1144C  ; Sentence_Terminal # Po   [2] NEWA DANDA..NEWA DOUBLE DANDA\n115C2..115C3  ; Sentence_Terminal # Po   [2] SIDDHAM DANDA..SIDDHAM DOUBLE DANDA\n115C9..115D7  ; Sentence_Terminal # Po  [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES\n11641..11642  ; Sentence_Terminal # Po   [2] MODI DANDA..MODI DOUBLE DANDA\n1173C..1173E  ; Sentence_Terminal # Po   [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI\n11944         ; Sentence_Terminal # Po       DIVES AKURU DOUBLE DANDA\n11946         ; Sentence_Terminal # Po       DIVES AKURU END OF TEXT MARK\n11A42..11A43  ; Sentence_Terminal # Po   [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD\n11A9B..11A9C  ; Sentence_Terminal # Po   [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD\n11C41..11C42  ; Sentence_Terminal # Po   [2] BHAIKSUKI DANDA..BHAIKSUKI DOUBLE DANDA\n11EF7..11EF8  ; Sentence_Terminal # Po   [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION\n11F43..11F44  ; Sentence_Terminal # Po   [2] KAWI DANDA..KAWI DOUBLE DANDA\n16A6E..16A6F  ; Sentence_Terminal # Po   [2] MRO DANDA..MRO DOUBLE DANDA\n16AF5         ; Sentence_Terminal # Po       BASSA VAH FULL STOP\n16B37..16B38  ; Sentence_Terminal # Po   [2] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS TSHAB CEEB\n16B44         ; Sentence_Terminal # Po       PAHAWH HMONG SIGN XAUS\n16D6E..16D6F  ; Sentence_Terminal # Po   [2] KIRAT RAI DANDA..KIRAT RAI DOUBLE DANDA\n16E98         ; Sentence_Terminal # Po       MEDEFAIDRIN FULL STOP\n1BC9F         ; Sentence_Terminal # Po       DUPLOYAN PUNCTUATION CHINOOK FULL STOP\n1DA88         ; Sentence_Terminal # Po       SIGNWRITING FULL STOP\n\n# Total code points: 170\n\n# ================================================\n\n180B..180D    ; Variation_Selector # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n180F          ; Variation_Selector # Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR\nFE00..FE0F    ; Variation_Selector # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\nE0100..E01EF  ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\n\n# Total code points: 260\n\n# ================================================\n\n0009..000D    ; Pattern_White_Space # Cc   [5] <control-0009>..<control-000D>\n0020          ; Pattern_White_Space # Zs       SPACE\n0085          ; Pattern_White_Space # Cc       <control-0085>\n200E..200F    ; Pattern_White_Space # Cf   [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK\n2028          ; Pattern_White_Space # Zl       LINE SEPARATOR\n2029          ; Pattern_White_Space # Zp       PARAGRAPH SEPARATOR\n\n# Total code points: 11\n\n# ================================================\n\n0021..0023    ; Pattern_Syntax # Po   [3] EXCLAMATION MARK..NUMBER SIGN\n0024          ; Pattern_Syntax # Sc       DOLLAR SIGN\n0025..0027    ; Pattern_Syntax # Po   [3] PERCENT SIGN..APOSTROPHE\n0028          ; Pattern_Syntax # Ps       LEFT PARENTHESIS\n0029          ; Pattern_Syntax # Pe       RIGHT PARENTHESIS\n002A          ; Pattern_Syntax # Po       ASTERISK\n002B          ; Pattern_Syntax # Sm       PLUS SIGN\n002C          ; Pattern_Syntax # Po       COMMA\n002D          ; Pattern_Syntax # Pd       HYPHEN-MINUS\n002E..002F    ; Pattern_Syntax # Po   [2] FULL STOP..SOLIDUS\n003A..003B    ; Pattern_Syntax # Po   [2] COLON..SEMICOLON\n003C..003E    ; Pattern_Syntax # Sm   [3] LESS-THAN SIGN..GREATER-THAN SIGN\n003F..0040    ; Pattern_Syntax # Po   [2] QUESTION MARK..COMMERCIAL AT\n005B          ; Pattern_Syntax # Ps       LEFT SQUARE BRACKET\n005C          ; Pattern_Syntax # Po       REVERSE SOLIDUS\n005D          ; Pattern_Syntax # Pe       RIGHT SQUARE BRACKET\n005E          ; Pattern_Syntax # Sk       CIRCUMFLEX ACCENT\n0060          ; Pattern_Syntax # Sk       GRAVE ACCENT\n007B          ; Pattern_Syntax # Ps       LEFT CURLY BRACKET\n007C          ; Pattern_Syntax # Sm       VERTICAL LINE\n007D          ; Pattern_Syntax # Pe       RIGHT CURLY BRACKET\n007E          ; Pattern_Syntax # Sm       TILDE\n00A1          ; Pattern_Syntax # Po       INVERTED EXCLAMATION MARK\n00A2..00A5    ; Pattern_Syntax # Sc   [4] CENT SIGN..YEN SIGN\n00A6          ; Pattern_Syntax # So       BROKEN BAR\n00A7          ; Pattern_Syntax # Po       SECTION SIGN\n00A9          ; Pattern_Syntax # So       COPYRIGHT SIGN\n00AB          ; Pattern_Syntax # Pi       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\n00AC          ; Pattern_Syntax # Sm       NOT SIGN\n00AE          ; Pattern_Syntax # So       REGISTERED SIGN\n00B0          ; Pattern_Syntax # So       DEGREE SIGN\n00B1          ; Pattern_Syntax # Sm       PLUS-MINUS SIGN\n00B6          ; Pattern_Syntax # Po       PILCROW SIGN\n00BB          ; Pattern_Syntax # Pf       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\n00BF          ; Pattern_Syntax # Po       INVERTED QUESTION MARK\n00D7          ; Pattern_Syntax # Sm       MULTIPLICATION SIGN\n00F7          ; Pattern_Syntax # Sm       DIVISION SIGN\n2010..2015    ; Pattern_Syntax # Pd   [6] HYPHEN..HORIZONTAL BAR\n2016..2017    ; Pattern_Syntax # Po   [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE\n2018          ; Pattern_Syntax # Pi       LEFT SINGLE QUOTATION MARK\n2019          ; Pattern_Syntax # Pf       RIGHT SINGLE QUOTATION MARK\n201A          ; Pattern_Syntax # Ps       SINGLE LOW-9 QUOTATION MARK\n201B..201C    ; Pattern_Syntax # Pi   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK\n201D          ; Pattern_Syntax # Pf       RIGHT DOUBLE QUOTATION MARK\n201E          ; Pattern_Syntax # Ps       DOUBLE LOW-9 QUOTATION MARK\n201F          ; Pattern_Syntax # Pi       DOUBLE HIGH-REVERSED-9 QUOTATION MARK\n2020..2027    ; Pattern_Syntax # Po   [8] DAGGER..HYPHENATION POINT\n2030..2038    ; Pattern_Syntax # Po   [9] PER MILLE SIGN..CARET\n2039          ; Pattern_Syntax # Pi       SINGLE LEFT-POINTING ANGLE QUOTATION MARK\n203A          ; Pattern_Syntax # Pf       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\n203B..203E    ; Pattern_Syntax # Po   [4] REFERENCE MARK..OVERLINE\n2041..2043    ; Pattern_Syntax # Po   [3] CARET INSERTION POINT..HYPHEN BULLET\n2044          ; Pattern_Syntax # Sm       FRACTION SLASH\n2045          ; Pattern_Syntax # Ps       LEFT SQUARE BRACKET WITH QUILL\n2046          ; Pattern_Syntax # Pe       RIGHT SQUARE BRACKET WITH QUILL\n2047..2051    ; Pattern_Syntax # Po  [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY\n2052          ; Pattern_Syntax # Sm       COMMERCIAL MINUS SIGN\n2053          ; Pattern_Syntax # Po       SWUNG DASH\n2055..205E    ; Pattern_Syntax # Po  [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS\n2190..2194    ; Pattern_Syntax # Sm   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW\n2195..2199    ; Pattern_Syntax # So   [5] UP DOWN ARROW..SOUTH WEST ARROW\n219A..219B    ; Pattern_Syntax # Sm   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE\n219C..219F    ; Pattern_Syntax # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW\n21A0          ; Pattern_Syntax # Sm       RIGHTWARDS TWO HEADED ARROW\n21A1..21A2    ; Pattern_Syntax # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL\n21A3          ; Pattern_Syntax # Sm       RIGHTWARDS ARROW WITH TAIL\n21A4..21A5    ; Pattern_Syntax # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR\n21A6          ; Pattern_Syntax # Sm       RIGHTWARDS ARROW FROM BAR\n21A7..21AD    ; Pattern_Syntax # So   [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW\n21AE          ; Pattern_Syntax # Sm       LEFT RIGHT ARROW WITH STROKE\n21AF..21CD    ; Pattern_Syntax # So  [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE\n21CE..21CF    ; Pattern_Syntax # Sm   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE\n21D0..21D1    ; Pattern_Syntax # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW\n21D2          ; Pattern_Syntax # Sm       RIGHTWARDS DOUBLE ARROW\n21D3          ; Pattern_Syntax # So       DOWNWARDS DOUBLE ARROW\n21D4          ; Pattern_Syntax # Sm       LEFT RIGHT DOUBLE ARROW\n21D5..21F3    ; Pattern_Syntax # So  [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW\n21F4..22FF    ; Pattern_Syntax # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP\n2300..2307    ; Pattern_Syntax # So   [8] DIAMETER SIGN..WAVY LINE\n2308          ; Pattern_Syntax # Ps       LEFT CEILING\n2309          ; Pattern_Syntax # Pe       RIGHT CEILING\n230A          ; Pattern_Syntax # Ps       LEFT FLOOR\n230B          ; Pattern_Syntax # Pe       RIGHT FLOOR\n230C..231F    ; Pattern_Syntax # So  [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER\n2320..2321    ; Pattern_Syntax # Sm   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL\n2322..2328    ; Pattern_Syntax # So   [7] FROWN..KEYBOARD\n2329          ; Pattern_Syntax # Ps       LEFT-POINTING ANGLE BRACKET\n232A          ; Pattern_Syntax # Pe       RIGHT-POINTING ANGLE BRACKET\n232B..237B    ; Pattern_Syntax # So  [81] ERASE TO THE LEFT..NOT CHECK MARK\n237C          ; Pattern_Syntax # Sm       RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW\n237D..239A    ; Pattern_Syntax # So  [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL\n239B..23B3    ; Pattern_Syntax # Sm  [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM\n23B4..23DB    ; Pattern_Syntax # So  [40] TOP SQUARE BRACKET..FUSE\n23DC..23E1    ; Pattern_Syntax # Sm   [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET\n23E2..2429    ; Pattern_Syntax # So  [72] WHITE TRAPEZIUM..SYMBOL FOR DELETE MEDIUM SHADE FORM\n242A..243F    ; Pattern_Syntax # Cn  [22] <reserved-242A>..<reserved-243F>\n2440..244A    ; Pattern_Syntax # So  [11] OCR HOOK..OCR DOUBLE BACKSLASH\n244B..245F    ; Pattern_Syntax # Cn  [21] <reserved-244B>..<reserved-245F>\n2500..25B6    ; Pattern_Syntax # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE\n25B7          ; Pattern_Syntax # Sm       WHITE RIGHT-POINTING TRIANGLE\n25B8..25C0    ; Pattern_Syntax # So   [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE\n25C1          ; Pattern_Syntax # Sm       WHITE LEFT-POINTING TRIANGLE\n25C2..25F7    ; Pattern_Syntax # So  [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT\n25F8..25FF    ; Pattern_Syntax # Sm   [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE\n2600..266E    ; Pattern_Syntax # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN\n266F          ; Pattern_Syntax # Sm       MUSIC SHARP SIGN\n2670..2767    ; Pattern_Syntax # So [248] WEST SYRIAC CROSS..ROTATED FLORAL HEART BULLET\n2768          ; Pattern_Syntax # Ps       MEDIUM LEFT PARENTHESIS ORNAMENT\n2769          ; Pattern_Syntax # Pe       MEDIUM RIGHT PARENTHESIS ORNAMENT\n276A          ; Pattern_Syntax # Ps       MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT\n276B          ; Pattern_Syntax # Pe       MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT\n276C          ; Pattern_Syntax # Ps       MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT\n276D          ; Pattern_Syntax # Pe       MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT\n276E          ; Pattern_Syntax # Ps       HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT\n276F          ; Pattern_Syntax # Pe       HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT\n2770          ; Pattern_Syntax # Ps       HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT\n2771          ; Pattern_Syntax # Pe       HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT\n2772          ; Pattern_Syntax # Ps       LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT\n2773          ; Pattern_Syntax # Pe       LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT\n2774          ; Pattern_Syntax # Ps       MEDIUM LEFT CURLY BRACKET ORNAMENT\n2775          ; Pattern_Syntax # Pe       MEDIUM RIGHT CURLY BRACKET ORNAMENT\n2794..27BF    ; Pattern_Syntax # So  [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP\n27C0..27C4    ; Pattern_Syntax # Sm   [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET\n27C5          ; Pattern_Syntax # Ps       LEFT S-SHAPED BAG DELIMITER\n27C6          ; Pattern_Syntax # Pe       RIGHT S-SHAPED BAG DELIMITER\n27C7..27E5    ; Pattern_Syntax # Sm  [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK\n27E6          ; Pattern_Syntax # Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET\n27E7          ; Pattern_Syntax # Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET\n27E8          ; Pattern_Syntax # Ps       MATHEMATICAL LEFT ANGLE BRACKET\n27E9          ; Pattern_Syntax # Pe       MATHEMATICAL RIGHT ANGLE BRACKET\n27EA          ; Pattern_Syntax # Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET\n27EB          ; Pattern_Syntax # Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET\n27EC          ; Pattern_Syntax # Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET\n27ED          ; Pattern_Syntax # Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET\n27EE          ; Pattern_Syntax # Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS\n27EF          ; Pattern_Syntax # Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS\n27F0..27FF    ; Pattern_Syntax # Sm  [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW\n2800..28FF    ; Pattern_Syntax # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678\n2900..2982    ; Pattern_Syntax # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON\n2983          ; Pattern_Syntax # Ps       LEFT WHITE CURLY BRACKET\n2984          ; Pattern_Syntax # Pe       RIGHT WHITE CURLY BRACKET\n2985          ; Pattern_Syntax # Ps       LEFT WHITE PARENTHESIS\n2986          ; Pattern_Syntax # Pe       RIGHT WHITE PARENTHESIS\n2987          ; Pattern_Syntax # Ps       Z NOTATION LEFT IMAGE BRACKET\n2988          ; Pattern_Syntax # Pe       Z NOTATION RIGHT IMAGE BRACKET\n2989          ; Pattern_Syntax # Ps       Z NOTATION LEFT BINDING BRACKET\n298A          ; Pattern_Syntax # Pe       Z NOTATION RIGHT BINDING BRACKET\n298B          ; Pattern_Syntax # Ps       LEFT SQUARE BRACKET WITH UNDERBAR\n298C          ; Pattern_Syntax # Pe       RIGHT SQUARE BRACKET WITH UNDERBAR\n298D          ; Pattern_Syntax # Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER\n298E          ; Pattern_Syntax # Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n298F          ; Pattern_Syntax # Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n2990          ; Pattern_Syntax # Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER\n2991          ; Pattern_Syntax # Ps       LEFT ANGLE BRACKET WITH DOT\n2992          ; Pattern_Syntax # Pe       RIGHT ANGLE BRACKET WITH DOT\n2993          ; Pattern_Syntax # Ps       LEFT ARC LESS-THAN BRACKET\n2994          ; Pattern_Syntax # Pe       RIGHT ARC GREATER-THAN BRACKET\n2995          ; Pattern_Syntax # Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET\n2996          ; Pattern_Syntax # Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET\n2997          ; Pattern_Syntax # Ps       LEFT BLACK TORTOISE SHELL BRACKET\n2998          ; Pattern_Syntax # Pe       RIGHT BLACK TORTOISE SHELL BRACKET\n2999..29D7    ; Pattern_Syntax # Sm  [63] DOTTED FENCE..BLACK HOURGLASS\n29D8          ; Pattern_Syntax # Ps       LEFT WIGGLY FENCE\n29D9          ; Pattern_Syntax # Pe       RIGHT WIGGLY FENCE\n29DA          ; Pattern_Syntax # Ps       LEFT DOUBLE WIGGLY FENCE\n29DB          ; Pattern_Syntax # Pe       RIGHT DOUBLE WIGGLY FENCE\n29DC..29FB    ; Pattern_Syntax # Sm  [32] INCOMPLETE INFINITY..TRIPLE PLUS\n29FC          ; Pattern_Syntax # Ps       LEFT-POINTING CURVED ANGLE BRACKET\n29FD          ; Pattern_Syntax # Pe       RIGHT-POINTING CURVED ANGLE BRACKET\n29FE..2AFF    ; Pattern_Syntax # Sm [258] TINY..N-ARY WHITE VERTICAL BAR\n2B00..2B2F    ; Pattern_Syntax # So  [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE\n2B30..2B44    ; Pattern_Syntax # Sm  [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET\n2B45..2B46    ; Pattern_Syntax # So   [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW\n2B47..2B4C    ; Pattern_Syntax # Sm   [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR\n2B4D..2B73    ; Pattern_Syntax # So  [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR\n2B74..2B75    ; Pattern_Syntax # Cn   [2] <reserved-2B74>..<reserved-2B75>\n2B76..2BFF    ; Pattern_Syntax # So [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL\n2E00..2E01    ; Pattern_Syntax # Po   [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER\n2E02          ; Pattern_Syntax # Pi       LEFT SUBSTITUTION BRACKET\n2E03          ; Pattern_Syntax # Pf       RIGHT SUBSTITUTION BRACKET\n2E04          ; Pattern_Syntax # Pi       LEFT DOTTED SUBSTITUTION BRACKET\n2E05          ; Pattern_Syntax # Pf       RIGHT DOTTED SUBSTITUTION BRACKET\n2E06..2E08    ; Pattern_Syntax # Po   [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER\n2E09          ; Pattern_Syntax # Pi       LEFT TRANSPOSITION BRACKET\n2E0A          ; Pattern_Syntax # Pf       RIGHT TRANSPOSITION BRACKET\n2E0B          ; Pattern_Syntax # Po       RAISED SQUARE\n2E0C          ; Pattern_Syntax # Pi       LEFT RAISED OMISSION BRACKET\n2E0D          ; Pattern_Syntax # Pf       RIGHT RAISED OMISSION BRACKET\n2E0E..2E16    ; Pattern_Syntax # Po   [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE\n2E17          ; Pattern_Syntax # Pd       DOUBLE OBLIQUE HYPHEN\n2E18..2E19    ; Pattern_Syntax # Po   [2] INVERTED INTERROBANG..PALM BRANCH\n2E1A          ; Pattern_Syntax # Pd       HYPHEN WITH DIAERESIS\n2E1B          ; Pattern_Syntax # Po       TILDE WITH RING ABOVE\n2E1C          ; Pattern_Syntax # Pi       LEFT LOW PARAPHRASE BRACKET\n2E1D          ; Pattern_Syntax # Pf       RIGHT LOW PARAPHRASE BRACKET\n2E1E..2E1F    ; Pattern_Syntax # Po   [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW\n2E20          ; Pattern_Syntax # Pi       LEFT VERTICAL BAR WITH QUILL\n2E21          ; Pattern_Syntax # Pf       RIGHT VERTICAL BAR WITH QUILL\n2E22          ; Pattern_Syntax # Ps       TOP LEFT HALF BRACKET\n2E23          ; Pattern_Syntax # Pe       TOP RIGHT HALF BRACKET\n2E24          ; Pattern_Syntax # Ps       BOTTOM LEFT HALF BRACKET\n2E25          ; Pattern_Syntax # Pe       BOTTOM RIGHT HALF BRACKET\n2E26          ; Pattern_Syntax # Ps       LEFT SIDEWAYS U BRACKET\n2E27          ; Pattern_Syntax # Pe       RIGHT SIDEWAYS U BRACKET\n2E28          ; Pattern_Syntax # Ps       LEFT DOUBLE PARENTHESIS\n2E29          ; Pattern_Syntax # Pe       RIGHT DOUBLE PARENTHESIS\n2E2A..2E2E    ; Pattern_Syntax # Po   [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK\n2E2F          ; Pattern_Syntax # Lm       VERTICAL TILDE\n2E30..2E39    ; Pattern_Syntax # Po  [10] RING POINT..TOP HALF SECTION SIGN\n2E3A..2E3B    ; Pattern_Syntax # Pd   [2] TWO-EM DASH..THREE-EM DASH\n2E3C..2E3F    ; Pattern_Syntax # Po   [4] STENOGRAPHIC FULL STOP..CAPITULUM\n2E40          ; Pattern_Syntax # Pd       DOUBLE HYPHEN\n2E41          ; Pattern_Syntax # Po       REVERSED COMMA\n2E42          ; Pattern_Syntax # Ps       DOUBLE LOW-REVERSED-9 QUOTATION MARK\n2E43..2E4F    ; Pattern_Syntax # Po  [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER\n2E50..2E51    ; Pattern_Syntax # So   [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR\n2E52..2E54    ; Pattern_Syntax # Po   [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK\n2E55          ; Pattern_Syntax # Ps       LEFT SQUARE BRACKET WITH STROKE\n2E56          ; Pattern_Syntax # Pe       RIGHT SQUARE BRACKET WITH STROKE\n2E57          ; Pattern_Syntax # Ps       LEFT SQUARE BRACKET WITH DOUBLE STROKE\n2E58          ; Pattern_Syntax # Pe       RIGHT SQUARE BRACKET WITH DOUBLE STROKE\n2E59          ; Pattern_Syntax # Ps       TOP HALF LEFT PARENTHESIS\n2E5A          ; Pattern_Syntax # Pe       TOP HALF RIGHT PARENTHESIS\n2E5B          ; Pattern_Syntax # Ps       BOTTOM HALF LEFT PARENTHESIS\n2E5C          ; Pattern_Syntax # Pe       BOTTOM HALF RIGHT PARENTHESIS\n2E5D          ; Pattern_Syntax # Pd       OBLIQUE HYPHEN\n2E5E..2E7F    ; Pattern_Syntax # Cn  [34] <reserved-2E5E>..<reserved-2E7F>\n3001..3003    ; Pattern_Syntax # Po   [3] IDEOGRAPHIC COMMA..DITTO MARK\n3008          ; Pattern_Syntax # Ps       LEFT ANGLE BRACKET\n3009          ; Pattern_Syntax # Pe       RIGHT ANGLE BRACKET\n300A          ; Pattern_Syntax # Ps       LEFT DOUBLE ANGLE BRACKET\n300B          ; Pattern_Syntax # Pe       RIGHT DOUBLE ANGLE BRACKET\n300C          ; Pattern_Syntax # Ps       LEFT CORNER BRACKET\n300D          ; Pattern_Syntax # Pe       RIGHT CORNER BRACKET\n300E          ; Pattern_Syntax # Ps       LEFT WHITE CORNER BRACKET\n300F          ; Pattern_Syntax # Pe       RIGHT WHITE CORNER BRACKET\n3010          ; Pattern_Syntax # Ps       LEFT BLACK LENTICULAR BRACKET\n3011          ; Pattern_Syntax # Pe       RIGHT BLACK LENTICULAR BRACKET\n3012..3013    ; Pattern_Syntax # So   [2] POSTAL MARK..GETA MARK\n3014          ; Pattern_Syntax # Ps       LEFT TORTOISE SHELL BRACKET\n3015          ; Pattern_Syntax # Pe       RIGHT TORTOISE SHELL BRACKET\n3016          ; Pattern_Syntax # Ps       LEFT WHITE LENTICULAR BRACKET\n3017          ; Pattern_Syntax # Pe       RIGHT WHITE LENTICULAR BRACKET\n3018          ; Pattern_Syntax # Ps       LEFT WHITE TORTOISE SHELL BRACKET\n3019          ; Pattern_Syntax # Pe       RIGHT WHITE TORTOISE SHELL BRACKET\n301A          ; Pattern_Syntax # Ps       LEFT WHITE SQUARE BRACKET\n301B          ; Pattern_Syntax # Pe       RIGHT WHITE SQUARE BRACKET\n301C          ; Pattern_Syntax # Pd       WAVE DASH\n301D          ; Pattern_Syntax # Ps       REVERSED DOUBLE PRIME QUOTATION MARK\n301E..301F    ; Pattern_Syntax # Pe   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK\n3020          ; Pattern_Syntax # So       POSTAL MARK FACE\n3030          ; Pattern_Syntax # Pd       WAVY DASH\nFD3E          ; Pattern_Syntax # Pe       ORNATE LEFT PARENTHESIS\nFD3F          ; Pattern_Syntax # Ps       ORNATE RIGHT PARENTHESIS\nFE45..FE46    ; Pattern_Syntax # Po   [2] SESAME DOT..WHITE SESAME DOT\n\n# Total code points: 2760\n\n# ================================================\n\n0600..0605    ; Prepended_Concatenation_Mark # Cf   [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE\n06DD          ; Prepended_Concatenation_Mark # Cf       ARABIC END OF AYAH\n070F          ; Prepended_Concatenation_Mark # Cf       SYRIAC ABBREVIATION MARK\n0890..0891    ; Prepended_Concatenation_Mark # Cf   [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE\n08E2          ; Prepended_Concatenation_Mark # Cf       ARABIC DISPUTED END OF AYAH\n110BD         ; Prepended_Concatenation_Mark # Cf       KAITHI NUMBER SIGN\n110CD         ; Prepended_Concatenation_Mark # Cf       KAITHI NUMBER SIGN ABOVE\n\n# Total code points: 13\n\n# ================================================\n\n1F1E6..1F1FF  ; Regional_Indicator # So  [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z\n\n# Total code points: 26\n\n# ================================================\n\n0654..0655    ; Modifier_Combining_Mark # Mn   [2] ARABIC HAMZA ABOVE..ARABIC HAMZA BELOW\n0658          ; Modifier_Combining_Mark # Mn       ARABIC MARK NOON GHUNNA\n06DC          ; Modifier_Combining_Mark # Mn       ARABIC SMALL HIGH SEEN\n06E3          ; Modifier_Combining_Mark # Mn       ARABIC SMALL LOW SEEN\n06E7..06E8    ; Modifier_Combining_Mark # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n08CA..08CB    ; Modifier_Combining_Mark # Mn   [2] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW\n08CD..08CF    ; Modifier_Combining_Mark # Mn   [3] ARABIC SMALL HIGH ZAH..ARABIC LARGE ROUND DOT BELOW\n08D3          ; Modifier_Combining_Mark # Mn       ARABIC SMALL LOW WAW\n08F3          ; Modifier_Combining_Mark # Mn       ARABIC SMALL HIGH WAW\n\n# Total code points: 14\n\n# EOF\n"
  },
  {
    "path": "maint/Unicode.tables/PropertyAliases.txt",
    "content": "# PropertyAliases-17.0.0.txt\n# Date: 2025-04-25, 14:00:52 GMT\n# © 2025 Unicode®, Inc.\n# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.\n# For terms of use and license, see https://www.unicode.org/terms_of_use.html\n#\n# Unicode Character Database\n#   For documentation, see https://www.unicode.org/reports/tr44/\n#\n# This file contains aliases for properties used in the UCD.\n# These names can be used for XML formats of UCD data, for regular-expression\n# property tests, and other programmatic textual descriptions of Unicode data.\n#\n# The names may be translated in appropriate environments, and additional\n# aliases may be useful.\n#\n# FORMAT\n#\n# Each line has two or more fields, separated by semicolons.\n#\n# First Field: The first field is the short name for the property.\n# It is typically an abbreviation, but in a number of cases it is simply\n# a duplicate of the \"long name\" in the second field.\n# For Unihan database tags, the short name is actually a longer string than\n# the tag specified in the second field.\n#\n# Second Field: The second field is the long name for the property,\n# typically the formal name used in documentation about the property.\n#\n# The above are the preferred aliases. Other aliases may be listed in additional fields.\n#\n# Loose matching should be applied to all property names and property values, with\n# the exception of String Property values. With loose matching of property names and\n# values, the case distinctions, whitespace, and '_' are ignored. For Numeric Property\n# values, numeric equivalencies are applied: thus \"01.00\" is equivalent to \"1\".\n#\n# NOTE: Property value names are NOT unique across properties. For example:\n#\n#   AL means Arabic Letter for the Bidi_Class property, and\n#   AL means Above_Left for the Combining_Class property, and\n#   AL means Alphabetic for the Line_Break property.\n#\n# In addition, some property names may be the same as some property value names.\n# For example:\n#\n#   sc means the Script property, and\n#   Sc means the General_Category property value Currency_Symbol (Sc)\n#\n# The combination of property value and property name is, however, unique.\n#\n# For more information, see:\n# - UAX #44, Unicode Character Database;\n# - UAX #38, Unicode Han Database (Unihan);\n# - UAX #57, Unicode Egyptian Hieroglyph Database (Unikemet);\n# - UTS #18, Unicode Regular Expressions.\n# ================================================\n\n\n# ================================================\n# Numeric Properties\n# ================================================\ncjkAccountingNumeric     ; kAccountingNumeric\ncjkOtherNumeric          ; kOtherNumeric\ncjkPrimaryNumeric        ; kPrimaryNumeric\nnv                       ; Numeric_Value\n\n# ================================================\n# String Properties\n# ================================================\nbmg                      ; Bidi_Mirroring_Glyph\nbpb                      ; Bidi_Paired_Bracket\ncf                       ; Case_Folding\ncjkCompatibilityVariant  ; kCompatibilityVariant\ndm                       ; Decomposition_Mapping\nEqUIdeo                  ; Equivalent_Unified_Ideograph\nFC_NFKC                  ; FC_NFKC_Closure\nlc                       ; Lowercase_Mapping\nNFKC_CF                  ; NFKC_Casefold\nNFKC_SCF                 ; NFKC_Simple_Casefold\nscf                      ; Simple_Case_Folding         ; sfc\nslc                      ; Simple_Lowercase_Mapping\nstc                      ; Simple_Titlecase_Mapping\nsuc                      ; Simple_Uppercase_Mapping\ntc                       ; Titlecase_Mapping\nuc                       ; Uppercase_Mapping\n\n# ================================================\n# Miscellaneous Properties\n# ================================================\ncjkIICore                ; kIICore\ncjkIRG_GSource           ; kIRG_GSource\ncjkIRG_HSource           ; kIRG_HSource\ncjkIRG_JSource           ; kIRG_JSource\ncjkIRG_KPSource          ; kIRG_KPSource\ncjkIRG_KSource           ; kIRG_KSource\ncjkIRG_MSource           ; kIRG_MSource\ncjkIRG_SSource           ; kIRG_SSource\ncjkIRG_TSource           ; kIRG_TSource\ncjkIRG_UKSource          ; kIRG_UKSource\ncjkIRG_USource           ; kIRG_USource\ncjkIRG_VSource           ; kIRG_VSource\ncjkMandarin              ; kMandarin\ncjkRSUnicode             ; kRSUnicode                  ; Unicode_Radical_Stroke; URS\ncjkTotalStrokes          ; kTotalStrokes\ncjkUnihanCore2020        ; kUnihanCore2020\nisc                      ; ISO_Comment\nJSN                      ; Jamo_Short_Name\nkEH_Cat                  ; kEH_Cat\nkEH_Desc                 ; kEH_Desc\nkEH_HG                   ; kEH_HG\nkEH_IFAO                 ; kEH_IFAO\nkEH_JSesh                ; kEH_JSesh\nna                       ; Name\nna1                      ; Unicode_1_Name\nName_Alias               ; Name_Alias\nscx                      ; Script_Extensions\n\n# ================================================\n# Catalog Properties\n# ================================================\nage                      ; Age\nblk                      ; Block\nsc                       ; Script\n\n# ================================================\n# Enumerated Properties\n# ================================================\nbc                       ; Bidi_Class\nbpt                      ; Bidi_Paired_Bracket_Type\nccc                      ; Canonical_Combining_Class\ndt                       ; Decomposition_Type\nea                       ; East_Asian_Width\ngc                       ; General_Category\nGCB                      ; Grapheme_Cluster_Break\nhst                      ; Hangul_Syllable_Type\nInCB                     ; Indic_Conjunct_Break\nInPC                     ; Indic_Positional_Category\nInSC                     ; Indic_Syllabic_Category\njg                       ; Joining_Group\njt                       ; Joining_Type\nlb                       ; Line_Break\nNFC_QC                   ; NFC_Quick_Check\nNFD_QC                   ; NFD_Quick_Check\nNFKC_QC                  ; NFKC_Quick_Check\nNFKD_QC                  ; NFKD_Quick_Check\nnt                       ; Numeric_Type\nSB                       ; Sentence_Break\nvo                       ; Vertical_Orientation\nWB                       ; Word_Break\n\n# ================================================\n# Binary Properties\n# ================================================\nAHex                     ; ASCII_Hex_Digit\nAlpha                    ; Alphabetic\nBidi_C                   ; Bidi_Control\nBidi_M                   ; Bidi_Mirrored\nCased                    ; Cased\nCE                       ; Composition_Exclusion\nCI                       ; Case_Ignorable\nComp_Ex                  ; Full_Composition_Exclusion\nCWCF                     ; Changes_When_Casefolded\nCWCM                     ; Changes_When_Casemapped\nCWKCF                    ; Changes_When_NFKC_Casefolded\nCWL                      ; Changes_When_Lowercased\nCWT                      ; Changes_When_Titlecased\nCWU                      ; Changes_When_Uppercased\nDash                     ; Dash\nDep                      ; Deprecated\nDI                       ; Default_Ignorable_Code_Point\nDia                      ; Diacritic\nEBase                    ; Emoji_Modifier_Base\nEComp                    ; Emoji_Component\nEMod                     ; Emoji_Modifier\nEmoji                    ; Emoji\nEPres                    ; Emoji_Presentation\nExt                      ; Extender\nExtPict                  ; Extended_Pictographic\nGr_Base                  ; Grapheme_Base\nGr_Ext                   ; Grapheme_Extend\nGr_Link                  ; Grapheme_Link\nHex                      ; Hex_Digit\nHyphen                   ; Hyphen\nID_Compat_Math_Continue  ; ID_Compat_Math_Continue\nID_Compat_Math_Start     ; ID_Compat_Math_Start\nIDC                      ; ID_Continue\nIdeo                     ; Ideographic\nIDS                      ; ID_Start\nIDSB                     ; IDS_Binary_Operator\nIDST                     ; IDS_Trinary_Operator\nIDSU                     ; IDS_Unary_Operator\nJoin_C                   ; Join_Control\nkEH_NoMirror             ; kEH_NoMirror\nkEH_NoRotate             ; kEH_NoRotate\nLOE                      ; Logical_Order_Exception\nLower                    ; Lowercase\nMath                     ; Math\nMCM                      ; Modifier_Combining_Mark\nNChar                    ; Noncharacter_Code_Point\nOAlpha                   ; Other_Alphabetic\nODI                      ; Other_Default_Ignorable_Code_Point\nOGr_Ext                  ; Other_Grapheme_Extend\nOIDC                     ; Other_ID_Continue\nOIDS                     ; Other_ID_Start\nOLower                   ; Other_Lowercase\nOMath                    ; Other_Math\nOUpper                   ; Other_Uppercase\nPat_Syn                  ; Pattern_Syntax\nPat_WS                   ; Pattern_White_Space\nPCM                      ; Prepended_Concatenation_Mark\nQMark                    ; Quotation_Mark\nRadical                  ; Radical\nRI                       ; Regional_Indicator\nSD                       ; Soft_Dotted\nSTerm                    ; Sentence_Terminal\nTerm                     ; Terminal_Punctuation\nUIdeo                    ; Unified_Ideograph\nUpper                    ; Uppercase\nVS                       ; Variation_Selector\nWSpace                   ; White_Space                 ; space\nXIDC                     ; XID_Continue\nXIDS                     ; XID_Start\nXO_NFC                   ; Expands_On_NFC\nXO_NFD                   ; Expands_On_NFD\nXO_NFKC                  ; Expands_On_NFKC\nXO_NFKD                  ; Expands_On_NFKD\n\n# ================================================\n# Total:    145\n\n# EOF\n"
  },
  {
    "path": "maint/Unicode.tables/PropertyValueAliases.txt",
    "content": "# PropertyValueAliases-17.0.0.txt\n# Date: 2025-06-30, 06:16:21 GMT\n# © 2025 Unicode®, Inc.\n# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.\n# For terms of use and license, see https://www.unicode.org/terms_of_use.html\n#\n# Unicode Character Database\n#   For documentation, see https://www.unicode.org/reports/tr44/\n#\n# This file contains aliases for property values used in the UCD.\n# These names can be used for XML formats of UCD data, for regular-expression\n# property tests, and other programmatic textual descriptions of Unicode data.\n#\n# The names may be translated in appropriate environments, and additional\n# aliases may be useful.\n#\n# FORMAT\n#\n# Each line describes a property value name.\n# This consists of three or more fields, separated by semicolons.\n#\n# First Field: The first field describes the property for which that\n# property value name is used.\n#\n# Second Field: The second field is the short name for the property value.\n# It is typically an abbreviation, but in a number of cases it is simply\n# a duplicate of the \"long name\" in the third field.\n#\n# Third Field: The third field is the long name for the property value, \n# typically the formal name used in documentation about the property value.\n#\n# In the case of Canonical_Combining_Class (ccc), there are 4 fields: \n# The second field is numeric, the third is the short name, and the fourth is the long name.\n#\n# The above are the preferred aliases. Other aliases may be listed in additional fields.\n#\n# Loose matching should be applied to all property names and property values, with\n# the exception of String Property values. With loose matching of property names and\n# values, the case distinctions, whitespace, hyphens, and '_' are ignored.\n# For Numeric Property values, numeric equivalence is applied: thus \"01.00\"\n# is equivalent to \"1\".\n#\n# NOTE: Property value names are NOT unique across properties. For example:\n#\n#   AL means Arabic Letter for the Bidi_Class property, and\n#   AL means Above_Left for the Canonical_Combining_Class property, and\n#   AL means Alphabetic for the Line_Break property.\n#\n# In addition, some property names may be the same as some property value names.\n# For example:\n#\n#   sc means the Script property, and\n#   Sc means the General_Category property value Currency_Symbol (Sc)\n#\n# The combination of property value and property name is, however, unique.\n#\n# For more information, see UAX #44, Unicode Character Database, and\n# UTS #18, Unicode Regular Expressions.\n# ================================================\n\n\n# ASCII_Hex_Digit (AHex)\n\nAHex; N                               ; No                               ; F                                ; False\nAHex; Y                               ; Yes                              ; T                                ; True\n\n# Age (age)\n\nage; 1.1                              ; V1_1\nage; 2.0                              ; V2_0\nage; 2.1                              ; V2_1\nage; 3.0                              ; V3_0\nage; 3.1                              ; V3_1\nage; 3.2                              ; V3_2\nage; 4.0                              ; V4_0\nage; 4.1                              ; V4_1\nage; 5.0                              ; V5_0\nage; 5.1                              ; V5_1\nage; 5.2                              ; V5_2\nage; 6.0                              ; V6_0\nage; 6.1                              ; V6_1\nage; 6.2                              ; V6_2\nage; 6.3                              ; V6_3\nage; 7.0                              ; V7_0\nage; 8.0                              ; V8_0\nage; 9.0                              ; V9_0\nage; 10.0                             ; V10_0\nage; 11.0                             ; V11_0\nage; 12.0                             ; V12_0\nage; 12.1                             ; V12_1\nage; 13.0                             ; V13_0\nage; 14.0                             ; V14_0\nage; 15.0                             ; V15_0\nage; 15.1                             ; V15_1\nage; 16.0                             ; V16_0\nage; 17.0                             ; V17_0\nage; NA                               ; Unassigned\n\n# Alphabetic (Alpha)\n\nAlpha; N                              ; No                               ; F                                ; False\nAlpha; Y                              ; Yes                              ; T                                ; True\n\n# Bidi_Class (bc)\n\nbc ; AL                               ; Arabic_Letter\nbc ; AN                               ; Arabic_Number\nbc ; B                                ; Paragraph_Separator\nbc ; BN                               ; Boundary_Neutral\nbc ; CS                               ; Common_Separator\nbc ; EN                               ; European_Number\nbc ; ES                               ; European_Separator\nbc ; ET                               ; European_Terminator\nbc ; FSI                              ; First_Strong_Isolate\nbc ; L                                ; Left_To_Right\nbc ; LRE                              ; Left_To_Right_Embedding\nbc ; LRI                              ; Left_To_Right_Isolate\nbc ; LRO                              ; Left_To_Right_Override\nbc ; NSM                              ; Nonspacing_Mark\nbc ; ON                               ; Other_Neutral\nbc ; PDF                              ; Pop_Directional_Format\nbc ; PDI                              ; Pop_Directional_Isolate\nbc ; R                                ; Right_To_Left\nbc ; RLE                              ; Right_To_Left_Embedding\nbc ; RLI                              ; Right_To_Left_Isolate\nbc ; RLO                              ; Right_To_Left_Override\nbc ; S                                ; Segment_Separator\nbc ; WS                               ; White_Space\n\n# Bidi_Control (Bidi_C)\n\nBidi_C; N                             ; No                               ; F                                ; False\nBidi_C; Y                             ; Yes                              ; T                                ; True\n\n# Bidi_Mirrored (Bidi_M)\n\nBidi_M; N                             ; No                               ; F                                ; False\nBidi_M; Y                             ; Yes                              ; T                                ; True\n\n# Bidi_Mirroring_Glyph (bmg)\n\n\n# Bidi_Paired_Bracket (bpb)\n\n# @missing: 0000..10FFFF; Bidi_Paired_Bracket; <none>\n\n# Bidi_Paired_Bracket_Type (bpt)\n\nbpt; c                                ; Close\nbpt; n                                ; None\nbpt; o                                ; Open\n# @missing: 0000..10FFFF; Bidi_Paired_Bracket_Type; n\n\n# Block (blk)\n\nblk; Adlam                            ; Adlam\nblk; Aegean_Numbers                   ; Aegean_Numbers\nblk; Ahom                             ; Ahom\nblk; Alchemical                       ; Alchemical_Symbols\nblk; Alphabetic_PF                    ; Alphabetic_Presentation_Forms\nblk; Anatolian_Hieroglyphs            ; Anatolian_Hieroglyphs\nblk; Ancient_Greek_Music              ; Ancient_Greek_Musical_Notation\nblk; Ancient_Greek_Numbers            ; Ancient_Greek_Numbers\nblk; Ancient_Symbols                  ; Ancient_Symbols\nblk; Arabic                           ; Arabic\nblk; Arabic_Ext_A                     ; Arabic_Extended_A\nblk; Arabic_Ext_B                     ; Arabic_Extended_B\nblk; Arabic_Ext_C                     ; Arabic_Extended_C\nblk; Arabic_Math                      ; Arabic_Mathematical_Alphabetic_Symbols\nblk; Arabic_PF_A                      ; Arabic_Presentation_Forms_A      ; Arabic_Presentation_Forms-A\nblk; Arabic_PF_B                      ; Arabic_Presentation_Forms_B\nblk; Arabic_Sup                       ; Arabic_Supplement\nblk; Armenian                         ; Armenian\nblk; Arrows                           ; Arrows\nblk; ASCII                            ; Basic_Latin\nblk; Avestan                          ; Avestan\nblk; Balinese                         ; Balinese\nblk; Bamum                            ; Bamum\nblk; Bamum_Sup                        ; Bamum_Supplement\nblk; Bassa_Vah                        ; Bassa_Vah\nblk; Batak                            ; Batak\nblk; Bengali                          ; Bengali\nblk; Beria_Erfe                       ; Beria_Erfe\nblk; Bhaiksuki                        ; Bhaiksuki\nblk; Block_Elements                   ; Block_Elements\nblk; Bopomofo                         ; Bopomofo\nblk; Bopomofo_Ext                     ; Bopomofo_Extended\nblk; Box_Drawing                      ; Box_Drawing\nblk; Brahmi                           ; Brahmi\nblk; Braille                          ; Braille_Patterns\nblk; Buginese                         ; Buginese\nblk; Buhid                            ; Buhid\nblk; Byzantine_Music                  ; Byzantine_Musical_Symbols\nblk; Carian                           ; Carian\nblk; Caucasian_Albanian               ; Caucasian_Albanian\nblk; Chakma                           ; Chakma\nblk; Cham                             ; Cham\nblk; Cherokee                         ; Cherokee\nblk; Cherokee_Sup                     ; Cherokee_Supplement\nblk; Chess_Symbols                    ; Chess_Symbols\nblk; Chorasmian                       ; Chorasmian\nblk; CJK                              ; CJK_Unified_Ideographs\nblk; CJK_Compat                       ; CJK_Compatibility\nblk; CJK_Compat_Forms                 ; CJK_Compatibility_Forms\nblk; CJK_Compat_Ideographs            ; CJK_Compatibility_Ideographs\nblk; CJK_Compat_Ideographs_Sup        ; CJK_Compatibility_Ideographs_Supplement\nblk; CJK_Ext_A                        ; CJK_Unified_Ideographs_Extension_A\nblk; CJK_Ext_B                        ; CJK_Unified_Ideographs_Extension_B\nblk; CJK_Ext_C                        ; CJK_Unified_Ideographs_Extension_C\nblk; CJK_Ext_D                        ; CJK_Unified_Ideographs_Extension_D\nblk; CJK_Ext_E                        ; CJK_Unified_Ideographs_Extension_E\nblk; CJK_Ext_F                        ; CJK_Unified_Ideographs_Extension_F\nblk; CJK_Ext_G                        ; CJK_Unified_Ideographs_Extension_G\nblk; CJK_Ext_H                        ; CJK_Unified_Ideographs_Extension_H\nblk; CJK_Ext_I                        ; CJK_Unified_Ideographs_Extension_I\nblk; CJK_Ext_J                        ; CJK_Unified_Ideographs_Extension_J\nblk; CJK_Radicals_Sup                 ; CJK_Radicals_Supplement\nblk; CJK_Strokes                      ; CJK_Strokes\nblk; CJK_Symbols                      ; CJK_Symbols_And_Punctuation\nblk; Compat_Jamo                      ; Hangul_Compatibility_Jamo\nblk; Control_Pictures                 ; Control_Pictures\nblk; Coptic                           ; Coptic\nblk; Coptic_Epact_Numbers             ; Coptic_Epact_Numbers\nblk; Counting_Rod                     ; Counting_Rod_Numerals\nblk; Cuneiform                        ; Cuneiform\nblk; Cuneiform_Numbers                ; Cuneiform_Numbers_And_Punctuation\nblk; Currency_Symbols                 ; Currency_Symbols\nblk; Cypriot_Syllabary                ; Cypriot_Syllabary\nblk; Cypro_Minoan                     ; Cypro_Minoan\nblk; Cyrillic                         ; Cyrillic\nblk; Cyrillic_Ext_A                   ; Cyrillic_Extended_A\nblk; Cyrillic_Ext_B                   ; Cyrillic_Extended_B\nblk; Cyrillic_Ext_C                   ; Cyrillic_Extended_C\nblk; Cyrillic_Ext_D                   ; Cyrillic_Extended_D\nblk; Cyrillic_Sup                     ; Cyrillic_Supplement              ; Cyrillic_Supplementary\nblk; Deseret                          ; Deseret\nblk; Devanagari                       ; Devanagari\nblk; Devanagari_Ext                   ; Devanagari_Extended\nblk; Devanagari_Ext_A                 ; Devanagari_Extended_A\nblk; Diacriticals                     ; Combining_Diacritical_Marks\nblk; Diacriticals_Ext                 ; Combining_Diacritical_Marks_Extended\nblk; Diacriticals_For_Symbols         ; Combining_Diacritical_Marks_For_Symbols; Combining_Marks_For_Symbols\nblk; Diacriticals_Sup                 ; Combining_Diacritical_Marks_Supplement\nblk; Dingbats                         ; Dingbats\nblk; Dives_Akuru                      ; Dives_Akuru\nblk; Dogra                            ; Dogra\nblk; Domino                           ; Domino_Tiles\nblk; Duployan                         ; Duployan\nblk; Early_Dynastic_Cuneiform         ; Early_Dynastic_Cuneiform\nblk; Egyptian_Hieroglyph_Format_Controls; Egyptian_Hieroglyph_Format_Controls\nblk; Egyptian_Hieroglyphs             ; Egyptian_Hieroglyphs\nblk; Egyptian_Hieroglyphs_Ext_A       ; Egyptian_Hieroglyphs_Extended_A\nblk; Elbasan                          ; Elbasan\nblk; Elymaic                          ; Elymaic\nblk; Emoticons                        ; Emoticons\nblk; Enclosed_Alphanum                ; Enclosed_Alphanumerics\nblk; Enclosed_Alphanum_Sup            ; Enclosed_Alphanumeric_Supplement\nblk; Enclosed_CJK                     ; Enclosed_CJK_Letters_And_Months\nblk; Enclosed_Ideographic_Sup         ; Enclosed_Ideographic_Supplement\nblk; Ethiopic                         ; Ethiopic\nblk; Ethiopic_Ext                     ; Ethiopic_Extended\nblk; Ethiopic_Ext_A                   ; Ethiopic_Extended_A\nblk; Ethiopic_Ext_B                   ; Ethiopic_Extended_B\nblk; Ethiopic_Sup                     ; Ethiopic_Supplement\nblk; Garay                            ; Garay\nblk; Geometric_Shapes                 ; Geometric_Shapes\nblk; Geometric_Shapes_Ext             ; Geometric_Shapes_Extended\nblk; Georgian                         ; Georgian\nblk; Georgian_Ext                     ; Georgian_Extended\nblk; Georgian_Sup                     ; Georgian_Supplement\nblk; Glagolitic                       ; Glagolitic\nblk; Glagolitic_Sup                   ; Glagolitic_Supplement\nblk; Gothic                           ; Gothic\nblk; Grantha                          ; Grantha\nblk; Greek                            ; Greek_And_Coptic\nblk; Greek_Ext                        ; Greek_Extended\nblk; Gujarati                         ; Gujarati\nblk; Gunjala_Gondi                    ; Gunjala_Gondi\nblk; Gurmukhi                         ; Gurmukhi\nblk; Gurung_Khema                     ; Gurung_Khema\nblk; Half_And_Full_Forms              ; Halfwidth_And_Fullwidth_Forms\nblk; Half_Marks                       ; Combining_Half_Marks\nblk; Hangul                           ; Hangul_Syllables\nblk; Hanifi_Rohingya                  ; Hanifi_Rohingya\nblk; Hanunoo                          ; Hanunoo\nblk; Hatran                           ; Hatran\nblk; Hebrew                           ; Hebrew\nblk; High_PU_Surrogates               ; High_Private_Use_Surrogates\nblk; High_Surrogates                  ; High_Surrogates\nblk; Hiragana                         ; Hiragana\nblk; IDC                              ; Ideographic_Description_Characters\nblk; Ideographic_Symbols              ; Ideographic_Symbols_And_Punctuation\nblk; Imperial_Aramaic                 ; Imperial_Aramaic\nblk; Indic_Number_Forms               ; Common_Indic_Number_Forms\nblk; Indic_Siyaq_Numbers              ; Indic_Siyaq_Numbers\nblk; Inscriptional_Pahlavi            ; Inscriptional_Pahlavi\nblk; Inscriptional_Parthian           ; Inscriptional_Parthian\nblk; IPA_Ext                          ; IPA_Extensions\nblk; Jamo                             ; Hangul_Jamo\nblk; Jamo_Ext_A                       ; Hangul_Jamo_Extended_A\nblk; Jamo_Ext_B                       ; Hangul_Jamo_Extended_B\nblk; Javanese                         ; Javanese\nblk; Kaithi                           ; Kaithi\nblk; Kaktovik_Numerals                ; Kaktovik_Numerals\nblk; Kana_Ext_A                       ; Kana_Extended_A\nblk; Kana_Ext_B                       ; Kana_Extended_B\nblk; Kana_Sup                         ; Kana_Supplement\nblk; Kanbun                           ; Kanbun\nblk; Kangxi                           ; Kangxi_Radicals\nblk; Kannada                          ; Kannada\nblk; Katakana                         ; Katakana\nblk; Katakana_Ext                     ; Katakana_Phonetic_Extensions\nblk; Kawi                             ; Kawi\nblk; Kayah_Li                         ; Kayah_Li\nblk; Kharoshthi                       ; Kharoshthi\nblk; Khitan_Small_Script              ; Khitan_Small_Script\nblk; Khmer                            ; Khmer\nblk; Khmer_Symbols                    ; Khmer_Symbols\nblk; Khojki                           ; Khojki\nblk; Khudawadi                        ; Khudawadi\nblk; Kirat_Rai                        ; Kirat_Rai\nblk; Lao                              ; Lao\nblk; Latin_1_Sup                      ; Latin_1_Supplement               ; Latin_1\nblk; Latin_Ext_A                      ; Latin_Extended_A\nblk; Latin_Ext_Additional             ; Latin_Extended_Additional\nblk; Latin_Ext_B                      ; Latin_Extended_B\nblk; Latin_Ext_C                      ; Latin_Extended_C\nblk; Latin_Ext_D                      ; Latin_Extended_D\nblk; Latin_Ext_E                      ; Latin_Extended_E\nblk; Latin_Ext_F                      ; Latin_Extended_F\nblk; Latin_Ext_G                      ; Latin_Extended_G\nblk; Lepcha                           ; Lepcha\nblk; Letterlike_Symbols               ; Letterlike_Symbols\nblk; Limbu                            ; Limbu\nblk; Linear_A                         ; Linear_A\nblk; Linear_B_Ideograms               ; Linear_B_Ideograms\nblk; Linear_B_Syllabary               ; Linear_B_Syllabary\nblk; Lisu                             ; Lisu\nblk; Lisu_Sup                         ; Lisu_Supplement\nblk; Low_Surrogates                   ; Low_Surrogates\nblk; Lycian                           ; Lycian\nblk; Lydian                           ; Lydian\nblk; Mahajani                         ; Mahajani\nblk; Mahjong                          ; Mahjong_Tiles\nblk; Makasar                          ; Makasar\nblk; Malayalam                        ; Malayalam\nblk; Mandaic                          ; Mandaic\nblk; Manichaean                       ; Manichaean\nblk; Marchen                          ; Marchen\nblk; Masaram_Gondi                    ; Masaram_Gondi\nblk; Math_Alphanum                    ; Mathematical_Alphanumeric_Symbols\nblk; Math_Operators                   ; Mathematical_Operators\nblk; Mayan_Numerals                   ; Mayan_Numerals\nblk; Medefaidrin                      ; Medefaidrin\nblk; Meetei_Mayek                     ; Meetei_Mayek\nblk; Meetei_Mayek_Ext                 ; Meetei_Mayek_Extensions\nblk; Mende_Kikakui                    ; Mende_Kikakui\nblk; Meroitic_Cursive                 ; Meroitic_Cursive\nblk; Meroitic_Hieroglyphs             ; Meroitic_Hieroglyphs\nblk; Miao                             ; Miao\nblk; Misc_Arrows                      ; Miscellaneous_Symbols_And_Arrows\nblk; Misc_Math_Symbols_A              ; Miscellaneous_Mathematical_Symbols_A\nblk; Misc_Math_Symbols_B              ; Miscellaneous_Mathematical_Symbols_B\nblk; Misc_Pictographs                 ; Miscellaneous_Symbols_And_Pictographs\nblk; Misc_Symbols                     ; Miscellaneous_Symbols\nblk; Misc_Symbols_Sup                 ; Miscellaneous_Symbols_Supplement\nblk; Misc_Technical                   ; Miscellaneous_Technical\nblk; Modi                             ; Modi\nblk; Modifier_Letters                 ; Spacing_Modifier_Letters\nblk; Modifier_Tone_Letters            ; Modifier_Tone_Letters\nblk; Mongolian                        ; Mongolian\nblk; Mongolian_Sup                    ; Mongolian_Supplement\nblk; Mro                              ; Mro\nblk; Multani                          ; Multani\nblk; Music                            ; Musical_Symbols\nblk; Myanmar                          ; Myanmar\nblk; Myanmar_Ext_A                    ; Myanmar_Extended_A\nblk; Myanmar_Ext_B                    ; Myanmar_Extended_B\nblk; Myanmar_Ext_C                    ; Myanmar_Extended_C\nblk; Nabataean                        ; Nabataean\nblk; Nag_Mundari                      ; Nag_Mundari\nblk; Nandinagari                      ; Nandinagari\nblk; NB                               ; No_Block\nblk; New_Tai_Lue                      ; New_Tai_Lue\nblk; Newa                             ; Newa\nblk; NKo                              ; NKo\nblk; Number_Forms                     ; Number_Forms\nblk; Nushu                            ; Nushu\nblk; Nyiakeng_Puachue_Hmong           ; Nyiakeng_Puachue_Hmong\nblk; OCR                              ; Optical_Character_Recognition\nblk; Ogham                            ; Ogham\nblk; Ol_Chiki                         ; Ol_Chiki\nblk; Ol_Onal                          ; Ol_Onal\nblk; Old_Hungarian                    ; Old_Hungarian\nblk; Old_Italic                       ; Old_Italic\nblk; Old_North_Arabian                ; Old_North_Arabian\nblk; Old_Permic                       ; Old_Permic\nblk; Old_Persian                      ; Old_Persian\nblk; Old_Sogdian                      ; Old_Sogdian\nblk; Old_South_Arabian                ; Old_South_Arabian\nblk; Old_Turkic                       ; Old_Turkic\nblk; Old_Uyghur                       ; Old_Uyghur\nblk; Oriya                            ; Oriya\nblk; Ornamental_Dingbats              ; Ornamental_Dingbats\nblk; Osage                            ; Osage\nblk; Osmanya                          ; Osmanya\nblk; Ottoman_Siyaq_Numbers            ; Ottoman_Siyaq_Numbers\nblk; Pahawh_Hmong                     ; Pahawh_Hmong\nblk; Palmyrene                        ; Palmyrene\nblk; Pau_Cin_Hau                      ; Pau_Cin_Hau\nblk; Phags_Pa                         ; Phags_Pa\nblk; Phaistos                         ; Phaistos_Disc\nblk; Phoenician                       ; Phoenician\nblk; Phonetic_Ext                     ; Phonetic_Extensions\nblk; Phonetic_Ext_Sup                 ; Phonetic_Extensions_Supplement\nblk; Playing_Cards                    ; Playing_Cards\nblk; Psalter_Pahlavi                  ; Psalter_Pahlavi\nblk; PUA                              ; Private_Use_Area                 ; Private_Use\nblk; Punctuation                      ; General_Punctuation\nblk; Rejang                           ; Rejang\nblk; Rumi                             ; Rumi_Numeral_Symbols\nblk; Runic                            ; Runic\nblk; Samaritan                        ; Samaritan\nblk; Saurashtra                       ; Saurashtra\nblk; Sharada                          ; Sharada\nblk; Sharada_Sup                      ; Sharada_Supplement\nblk; Shavian                          ; Shavian\nblk; Shorthand_Format_Controls        ; Shorthand_Format_Controls\nblk; Siddham                          ; Siddham\nblk; Sidetic                          ; Sidetic\nblk; Sinhala                          ; Sinhala\nblk; Sinhala_Archaic_Numbers          ; Sinhala_Archaic_Numbers\nblk; Small_Forms                      ; Small_Form_Variants\nblk; Small_Kana_Ext                   ; Small_Kana_Extension\nblk; Sogdian                          ; Sogdian\nblk; Sora_Sompeng                     ; Sora_Sompeng\nblk; Soyombo                          ; Soyombo\nblk; Specials                         ; Specials\nblk; Sundanese                        ; Sundanese\nblk; Sundanese_Sup                    ; Sundanese_Supplement\nblk; Sunuwar                          ; Sunuwar\nblk; Sup_Arrows_A                     ; Supplemental_Arrows_A\nblk; Sup_Arrows_B                     ; Supplemental_Arrows_B\nblk; Sup_Arrows_C                     ; Supplemental_Arrows_C\nblk; Sup_Math_Operators               ; Supplemental_Mathematical_Operators\nblk; Sup_PUA_A                        ; Supplementary_Private_Use_Area_A\nblk; Sup_PUA_B                        ; Supplementary_Private_Use_Area_B\nblk; Sup_Punctuation                  ; Supplemental_Punctuation\nblk; Sup_Symbols_And_Pictographs      ; Supplemental_Symbols_And_Pictographs\nblk; Super_And_Sub                    ; Superscripts_And_Subscripts\nblk; Sutton_SignWriting               ; Sutton_SignWriting\nblk; Syloti_Nagri                     ; Syloti_Nagri\nblk; Symbols_And_Pictographs_Ext_A    ; Symbols_And_Pictographs_Extended_A\nblk; Symbols_For_Legacy_Computing     ; Symbols_For_Legacy_Computing\nblk; Symbols_For_Legacy_Computing_Sup ; Symbols_For_Legacy_Computing_Supplement\nblk; Syriac                           ; Syriac\nblk; Syriac_Sup                       ; Syriac_Supplement\nblk; Tagalog                          ; Tagalog\nblk; Tagbanwa                         ; Tagbanwa\nblk; Tags                             ; Tags\nblk; Tai_Le                           ; Tai_Le\nblk; Tai_Tham                         ; Tai_Tham\nblk; Tai_Viet                         ; Tai_Viet\nblk; Tai_Xuan_Jing                    ; Tai_Xuan_Jing_Symbols\nblk; Tai_Yo                           ; Tai_Yo\nblk; Takri                            ; Takri\nblk; Tamil                            ; Tamil\nblk; Tamil_Sup                        ; Tamil_Supplement\nblk; Tangsa                           ; Tangsa\nblk; Tangut                           ; Tangut\nblk; Tangut_Components                ; Tangut_Components\nblk; Tangut_Components_Sup            ; Tangut_Components_Supplement\nblk; Tangut_Sup                       ; Tangut_Supplement\nblk; Telugu                           ; Telugu\nblk; Thaana                           ; Thaana\nblk; Thai                             ; Thai\nblk; Tibetan                          ; Tibetan\nblk; Tifinagh                         ; Tifinagh\nblk; Tirhuta                          ; Tirhuta\nblk; Todhri                           ; Todhri\nblk; Tolong_Siki                      ; Tolong_Siki\nblk; Toto                             ; Toto\nblk; Transport_And_Map                ; Transport_And_Map_Symbols\nblk; Tulu_Tigalari                    ; Tulu_Tigalari\nblk; UCAS                             ; Unified_Canadian_Aboriginal_Syllabics; Canadian_Syllabics\nblk; UCAS_Ext                         ; Unified_Canadian_Aboriginal_Syllabics_Extended\nblk; UCAS_Ext_A                       ; Unified_Canadian_Aboriginal_Syllabics_Extended_A\nblk; Ugaritic                         ; Ugaritic\nblk; Vai                              ; Vai\nblk; Vedic_Ext                        ; Vedic_Extensions\nblk; Vertical_Forms                   ; Vertical_Forms\nblk; Vithkuqi                         ; Vithkuqi\nblk; VS                               ; Variation_Selectors\nblk; VS_Sup                           ; Variation_Selectors_Supplement\nblk; Wancho                           ; Wancho\nblk; Warang_Citi                      ; Warang_Citi\nblk; Yezidi                           ; Yezidi\nblk; Yi_Radicals                      ; Yi_Radicals\nblk; Yi_Syllables                     ; Yi_Syllables\nblk; Yijing                           ; Yijing_Hexagram_Symbols\nblk; Zanabazar_Square                 ; Zanabazar_Square\nblk; Znamenny_Music                   ; Znamenny_Musical_Notation\n\n# Canonical_Combining_Class (ccc)\n\nccc;   0; NR                         ; Not_Reordered\nccc;   1; OV                         ; Overlay\nccc;   6; HANR                       ; Han_Reading\nccc;   7; NK                         ; Nukta\nccc;   8; KV                         ; Kana_Voicing\nccc;   9; VR                         ; Virama\nccc;  10; CCC10                      ; CCC10\nccc;  11; CCC11                      ; CCC11\nccc;  12; CCC12                      ; CCC12\nccc;  13; CCC13                      ; CCC13\nccc;  14; CCC14                      ; CCC14\nccc;  15; CCC15                      ; CCC15\nccc;  16; CCC16                      ; CCC16\nccc;  17; CCC17                      ; CCC17\nccc;  18; CCC18                      ; CCC18\nccc;  19; CCC19                      ; CCC19\nccc;  20; CCC20                      ; CCC20\nccc;  21; CCC21                      ; CCC21\nccc;  22; CCC22                      ; CCC22\nccc;  23; CCC23                      ; CCC23\nccc;  24; CCC24                      ; CCC24\nccc;  25; CCC25                      ; CCC25\nccc;  26; CCC26                      ; CCC26\nccc;  27; CCC27                      ; CCC27\nccc;  28; CCC28                      ; CCC28\nccc;  29; CCC29                      ; CCC29\nccc;  30; CCC30                      ; CCC30\nccc;  31; CCC31                      ; CCC31\nccc;  32; CCC32                      ; CCC32\nccc;  33; CCC33                      ; CCC33\nccc;  34; CCC34                      ; CCC34\nccc;  35; CCC35                      ; CCC35\nccc;  36; CCC36                      ; CCC36\nccc;  84; CCC84                      ; CCC84\nccc;  91; CCC91                      ; CCC91\nccc; 103; CCC103                     ; CCC103\nccc; 107; CCC107                     ; CCC107\nccc; 118; CCC118                     ; CCC118\nccc; 122; CCC122                     ; CCC122\nccc; 129; CCC129                     ; CCC129\nccc; 130; CCC130                     ; CCC130\nccc; 132; CCC132                     ; CCC132\nccc; 133; CCC133                     ; CCC133 # RESERVED\nccc; 200; ATBL                       ; Attached_Below_Left\nccc; 202; ATB                        ; Attached_Below\nccc; 214; ATA                        ; Attached_Above\nccc; 216; ATAR                       ; Attached_Above_Right\nccc; 218; BL                         ; Below_Left\nccc; 220; B                          ; Below\nccc; 222; BR                         ; Below_Right\nccc; 224; L                          ; Left\nccc; 226; R                          ; Right\nccc; 228; AL                         ; Above_Left\nccc; 230; A                          ; Above\nccc; 232; AR                         ; Above_Right\nccc; 233; DB                         ; Double_Below\nccc; 234; DA                         ; Double_Above\nccc; 240; IS                         ; Iota_Subscript\n\n# Case_Folding (cf)\n\n# @missing: 0000..10FFFF; Case_Folding; <code point>\n\n# Case_Ignorable (CI)\n\nCI ; N                                ; No                               ; F                                ; False\nCI ; Y                                ; Yes                              ; T                                ; True\n\n# Cased (Cased)\n\nCased; N                              ; No                               ; F                                ; False\nCased; Y                              ; Yes                              ; T                                ; True\n\n# Changes_When_Casefolded (CWCF)\n\nCWCF; N                               ; No                               ; F                                ; False\nCWCF; Y                               ; Yes                              ; T                                ; True\n\n# Changes_When_Casemapped (CWCM)\n\nCWCM; N                               ; No                               ; F                                ; False\nCWCM; Y                               ; Yes                              ; T                                ; True\n\n# Changes_When_Lowercased (CWL)\n\nCWL; N                                ; No                               ; F                                ; False\nCWL; Y                                ; Yes                              ; T                                ; True\n\n# Changes_When_NFKC_Casefolded (CWKCF)\n\nCWKCF; N                              ; No                               ; F                                ; False\nCWKCF; Y                              ; Yes                              ; T                                ; True\n\n# Changes_When_Titlecased (CWT)\n\nCWT; N                                ; No                               ; F                                ; False\nCWT; Y                                ; Yes                              ; T                                ; True\n\n# Changes_When_Uppercased (CWU)\n\nCWU; N                                ; No                               ; F                                ; False\nCWU; Y                                ; Yes                              ; T                                ; True\n\n# Composition_Exclusion (CE)\n\nCE ; N                                ; No                               ; F                                ; False\nCE ; Y                                ; Yes                              ; T                                ; True\n\n# Dash (Dash)\n\nDash; N                               ; No                               ; F                                ; False\nDash; Y                               ; Yes                              ; T                                ; True\n\n# Decomposition_Mapping (dm)\n\n# @missing: 0000..10FFFF; Decomposition_Mapping; <code point>\n\n# Decomposition_Type (dt)\n\ndt ; Can                              ; Canonical                        ; can\ndt ; Com                              ; Compat                           ; com\ndt ; Enc                              ; Circle                           ; enc\ndt ; Fin                              ; Final                            ; fin\ndt ; Font                             ; Font                             ; font\ndt ; Fra                              ; Fraction                         ; fra\ndt ; Init                             ; Initial                          ; init\ndt ; Iso                              ; Isolated                         ; iso\ndt ; Med                              ; Medial                           ; med\ndt ; Nar                              ; Narrow                           ; nar\ndt ; Nb                               ; Nobreak                          ; nb\ndt ; None                             ; None                             ; none\ndt ; Sml                              ; Small                            ; sml\ndt ; Sqr                              ; Square                           ; sqr\ndt ; Sub                              ; Sub                              ; sub\ndt ; Sup                              ; Super                            ; sup\ndt ; Vert                             ; Vertical                         ; vert\ndt ; Wide                             ; Wide                             ; wide\n\n# Default_Ignorable_Code_Point (DI)\n\nDI ; N                                ; No                               ; F                                ; False\nDI ; Y                                ; Yes                              ; T                                ; True\n\n# Deprecated (Dep)\n\nDep; N                                ; No                               ; F                                ; False\nDep; Y                                ; Yes                              ; T                                ; True\n\n# Diacritic (Dia)\n\nDia; N                                ; No                               ; F                                ; False\nDia; Y                                ; Yes                              ; T                                ; True\n\n# East_Asian_Width (ea)\n\nea ; A                                ; Ambiguous\nea ; F                                ; Fullwidth\nea ; H                                ; Halfwidth\nea ; N                                ; Neutral\nea ; Na                               ; Narrow\nea ; W                                ; Wide\n\n# Emoji (Emoji)\n\nEmoji; N                              ; No                               ; F                                ; False\nEmoji; Y                              ; Yes                              ; T                                ; True\n\n# Emoji_Component (EComp)\n\nEComp; N                              ; No                               ; F                                ; False\nEComp; Y                              ; Yes                              ; T                                ; True\n\n# Emoji_Modifier (EMod)\n\nEMod; N                               ; No                               ; F                                ; False\nEMod; Y                               ; Yes                              ; T                                ; True\n\n# Emoji_Modifier_Base (EBase)\n\nEBase; N                              ; No                               ; F                                ; False\nEBase; Y                              ; Yes                              ; T                                ; True\n\n# Emoji_Presentation (EPres)\n\nEPres; N                              ; No                               ; F                                ; False\nEPres; Y                              ; Yes                              ; T                                ; True\n\n# Equivalent_Unified_Ideograph (EqUIdeo)\n\n\n# Expands_On_NFC (XO_NFC)\n\nXO_NFC; N                             ; No                               ; F                                ; False\nXO_NFC; Y                             ; Yes                              ; T                                ; True\n\n# Expands_On_NFD (XO_NFD)\n\nXO_NFD; N                             ; No                               ; F                                ; False\nXO_NFD; Y                             ; Yes                              ; T                                ; True\n\n# Expands_On_NFKC (XO_NFKC)\n\nXO_NFKC; N                            ; No                               ; F                                ; False\nXO_NFKC; Y                            ; Yes                              ; T                                ; True\n\n# Expands_On_NFKD (XO_NFKD)\n\nXO_NFKD; N                            ; No                               ; F                                ; False\nXO_NFKD; Y                            ; Yes                              ; T                                ; True\n\n# Extended_Pictographic (ExtPict)\n\nExtPict; N                            ; No                               ; F                                ; False\nExtPict; Y                            ; Yes                              ; T                                ; True\n\n# Extender (Ext)\n\nExt; N                                ; No                               ; F                                ; False\nExt; Y                                ; Yes                              ; T                                ; True\n\n# FC_NFKC_Closure (FC_NFKC)\n\n# @missing: 0000..10FFFF; FC_NFKC_Closure; <code point>\n\n# Full_Composition_Exclusion (Comp_Ex)\n\nComp_Ex; N                            ; No                               ; F                                ; False\nComp_Ex; Y                            ; Yes                              ; T                                ; True\n\n# General_Category (gc)\n\ngc ; C                                ; Other                            # Cc | Cf | Cn | Co | Cs\ngc ; Cc                               ; Control                          ; cntrl\ngc ; Cf                               ; Format\ngc ; Cn                               ; Unassigned\ngc ; Co                               ; Private_Use\ngc ; Cs                               ; Surrogate\ngc ; L                                ; Letter                           # Ll | Lm | Lo | Lt | Lu\ngc ; LC                               ; Cased_Letter                     # Ll | Lt | Lu\ngc ; Ll                               ; Lowercase_Letter\ngc ; Lm                               ; Modifier_Letter\ngc ; Lo                               ; Other_Letter\ngc ; Lt                               ; Titlecase_Letter\ngc ; Lu                               ; Uppercase_Letter\ngc ; M                                ; Mark                             ; Combining_Mark                   # Mc | Me | Mn\ngc ; Mc                               ; Spacing_Mark\ngc ; Me                               ; Enclosing_Mark\ngc ; Mn                               ; Nonspacing_Mark\ngc ; N                                ; Number                           # Nd | Nl | No\ngc ; Nd                               ; Decimal_Number                   ; digit\ngc ; Nl                               ; Letter_Number\ngc ; No                               ; Other_Number\ngc ; P                                ; Punctuation                      ; punct                            # Pc | Pd | Pe | Pf | Pi | Po | Ps\ngc ; Pc                               ; Connector_Punctuation\ngc ; Pd                               ; Dash_Punctuation\ngc ; Pe                               ; Close_Punctuation\ngc ; Pf                               ; Final_Punctuation\ngc ; Pi                               ; Initial_Punctuation\ngc ; Po                               ; Other_Punctuation\ngc ; Ps                               ; Open_Punctuation\ngc ; S                                ; Symbol                           # Sc | Sk | Sm | So\ngc ; Sc                               ; Currency_Symbol\ngc ; Sk                               ; Modifier_Symbol\ngc ; Sm                               ; Math_Symbol\ngc ; So                               ; Other_Symbol\ngc ; Z                                ; Separator                        # Zl | Zp | Zs\ngc ; Zl                               ; Line_Separator\ngc ; Zp                               ; Paragraph_Separator\ngc ; Zs                               ; Space_Separator\n# @missing: 0000..10FFFF; General_Category; Unassigned\n\n# Grapheme_Base (Gr_Base)\n\nGr_Base; N                            ; No                               ; F                                ; False\nGr_Base; Y                            ; Yes                              ; T                                ; True\n\n# Grapheme_Cluster_Break (GCB)\n\nGCB; CN                               ; Control\nGCB; CR                               ; CR\nGCB; EB                               ; E_Base\nGCB; EBG                              ; E_Base_GAZ\nGCB; EM                               ; E_Modifier\nGCB; EX                               ; Extend\nGCB; GAZ                              ; Glue_After_Zwj\nGCB; L                                ; L\nGCB; LF                               ; LF\nGCB; LV                               ; LV\nGCB; LVT                              ; LVT\nGCB; PP                               ; Prepend\nGCB; RI                               ; Regional_Indicator\nGCB; SM                               ; SpacingMark\nGCB; T                                ; T\nGCB; V                                ; V\nGCB; XX                               ; Other\nGCB; ZWJ                              ; ZWJ\n\n# Grapheme_Extend (Gr_Ext)\n\nGr_Ext; N                             ; No                               ; F                                ; False\nGr_Ext; Y                             ; Yes                              ; T                                ; True\n\n# Grapheme_Link (Gr_Link)\n\nGr_Link; N                            ; No                               ; F                                ; False\nGr_Link; Y                            ; Yes                              ; T                                ; True\n\n# Hangul_Syllable_Type (hst)\n\nhst; L                                ; Leading_Jamo\nhst; LV                               ; LV_Syllable\nhst; LVT                              ; LVT_Syllable\nhst; NA                               ; Not_Applicable\nhst; T                                ; Trailing_Jamo\nhst; V                                ; Vowel_Jamo\n\n# Hex_Digit (Hex)\n\nHex; N                                ; No                               ; F                                ; False\nHex; Y                                ; Yes                              ; T                                ; True\n\n# Hyphen (Hyphen)\n\nHyphen; N                             ; No                               ; F                                ; False\nHyphen; Y                             ; Yes                              ; T                                ; True\n\n# IDS_Binary_Operator (IDSB)\n\nIDSB; N                               ; No                               ; F                                ; False\nIDSB; Y                               ; Yes                              ; T                                ; True\n\n# IDS_Trinary_Operator (IDST)\n\nIDST; N                               ; No                               ; F                                ; False\nIDST; Y                               ; Yes                              ; T                                ; True\n\n# IDS_Unary_Operator (IDSU)\n\nIDSU; N                               ; No                               ; F                                ; False\nIDSU; Y                               ; Yes                              ; T                                ; True\n\n# ID_Compat_Math_Continue (ID_Compat_Math_Continue)\n\nID_Compat_Math_Continue; N            ; No                               ; F                                ; False\nID_Compat_Math_Continue; Y            ; Yes                              ; T                                ; True\n\n# ID_Compat_Math_Start (ID_Compat_Math_Start)\n\nID_Compat_Math_Start; N               ; No                               ; F                                ; False\nID_Compat_Math_Start; Y               ; Yes                              ; T                                ; True\n\n# ID_Continue (IDC)\n\nIDC; N                                ; No                               ; F                                ; False\nIDC; Y                                ; Yes                              ; T                                ; True\n\n# ID_Start (IDS)\n\nIDS; N                                ; No                               ; F                                ; False\nIDS; Y                                ; Yes                              ; T                                ; True\n\n# ISO_Comment (isc)\n\n# @missing: 0000..10FFFF; ISO_Comment; <none>\n\n# Ideographic (Ideo)\n\nIdeo; N                               ; No                               ; F                                ; False\nIdeo; Y                               ; Yes                              ; T                                ; True\n\n# Indic_Conjunct_Break (InCB)\n\nInCB; Consonant                       ; Consonant\nInCB; Extend                          ; Extend\nInCB; Linker                          ; Linker\nInCB; None                            ; None\n\n# Indic_Positional_Category (InPC)\n\nInPC; Bottom                          ; Bottom\nInPC; Bottom_And_Left                 ; Bottom_And_Left\nInPC; Bottom_And_Right                ; Bottom_And_Right\nInPC; Left                            ; Left\nInPC; Left_And_Right                  ; Left_And_Right\nInPC; NA                              ; Not_Applicable\nInPC; Overstruck                      ; Overstruck\nInPC; Right                           ; Right\nInPC; Top                             ; Top\nInPC; Top_And_Bottom                  ; Top_And_Bottom\nInPC; Top_And_Bottom_And_Left         ; Top_And_Bottom_And_Left\nInPC; Top_And_Bottom_And_Right        ; Top_And_Bottom_And_Right\nInPC; Top_And_Left                    ; Top_And_Left\nInPC; Top_And_Left_And_Right          ; Top_And_Left_And_Right\nInPC; Top_And_Right                   ; Top_And_Right\nInPC; Visual_Order_Left               ; Visual_Order_Left\n\n# Indic_Syllabic_Category (InSC)\n\nInSC; Avagraha                        ; Avagraha\nInSC; Bindu                           ; Bindu\nInSC; Brahmi_Joining_Number           ; Brahmi_Joining_Number\nInSC; Cantillation_Mark               ; Cantillation_Mark\nInSC; Consonant                       ; Consonant\nInSC; Consonant_Dead                  ; Consonant_Dead\nInSC; Consonant_Final                 ; Consonant_Final\nInSC; Consonant_Head_Letter           ; Consonant_Head_Letter\nInSC; Consonant_Initial_Postfixed     ; Consonant_Initial_Postfixed\nInSC; Consonant_Killer                ; Consonant_Killer\nInSC; Consonant_Medial                ; Consonant_Medial\nInSC; Consonant_Placeholder           ; Consonant_Placeholder\nInSC; Consonant_Preceding_Repha       ; Consonant_Preceding_Repha\nInSC; Consonant_Prefixed              ; Consonant_Prefixed\nInSC; Consonant_Subjoined             ; Consonant_Subjoined\nInSC; Consonant_Succeeding_Repha      ; Consonant_Succeeding_Repha\nInSC; Consonant_With_Stacker          ; Consonant_With_Stacker\nInSC; Gemination_Mark                 ; Gemination_Mark\nInSC; Invisible_Stacker               ; Invisible_Stacker\nInSC; Joiner                          ; Joiner\nInSC; Modifying_Letter                ; Modifying_Letter\nInSC; Non_Joiner                      ; Non_Joiner\nInSC; Nukta                           ; Nukta\nInSC; Number                          ; Number\nInSC; Number_Joiner                   ; Number_Joiner\nInSC; Other                           ; Other\nInSC; Pure_Killer                     ; Pure_Killer\nInSC; Register_Shifter                ; Register_Shifter\nInSC; Reordering_Killer               ; Reordering_Killer\nInSC; Syllable_Modifier               ; Syllable_Modifier\nInSC; Tone_Letter                     ; Tone_Letter\nInSC; Tone_Mark                       ; Tone_Mark\nInSC; Virama                          ; Virama\nInSC; Visarga                         ; Visarga\nInSC; Vowel                           ; Vowel\nInSC; Vowel_Dependent                 ; Vowel_Dependent\nInSC; Vowel_Independent               ; Vowel_Independent\n\n# Jamo_Short_Name (JSN)\n\nJSN; A                                ; A\nJSN; AE                               ; AE\nJSN; B                                ; B\nJSN; BB                               ; BB\nJSN; BS                               ; BS\nJSN; C                                ; C\nJSN; D                                ; D\nJSN; DD                               ; DD\nJSN; E                                ; E\nJSN; EO                               ; EO\nJSN; EU                               ; EU\nJSN; G                                ; G\nJSN; GG                               ; GG\nJSN; GS                               ; GS\nJSN; H                                ; H\nJSN; I                                ; I\nJSN; J                                ; J\nJSN; JJ                               ; JJ\nJSN; K                                ; K\nJSN; L                                ; L\nJSN; LB                               ; LB\nJSN; LG                               ; LG\nJSN; LH                               ; LH\nJSN; LM                               ; LM\nJSN; LP                               ; LP\nJSN; LS                               ; LS\nJSN; LT                               ; LT\nJSN; M                                ; M\nJSN; N                                ; N\nJSN; NG                               ; NG\nJSN; NH                               ; NH\nJSN; NJ                               ; NJ\nJSN; O                                ; O\nJSN; OE                               ; OE\nJSN; P                                ; P\nJSN; R                                ; R\nJSN; S                                ; S\nJSN; SS                               ; SS\nJSN; T                                ; T\nJSN; U                                ; U\nJSN; WA                               ; WA\nJSN; WAE                              ; WAE\nJSN; WE                               ; WE\nJSN; WEO                              ; WEO\nJSN; WI                               ; WI\nJSN; YA                               ; YA\nJSN; YAE                              ; YAE\nJSN; YE                               ; YE\nJSN; YEO                              ; YEO\nJSN; YI                               ; YI\nJSN; YO                               ; YO\nJSN; YU                               ; YU\n# @missing: 0000..10FFFF; Jamo_Short_Name; <none>\n\n# Join_Control (Join_C)\n\nJoin_C; N                             ; No                               ; F                                ; False\nJoin_C; Y                             ; Yes                              ; T                                ; True\n\n# Joining_Group (jg)\n\njg ; African_Feh                      ; African_Feh\njg ; African_Noon                     ; African_Noon\njg ; African_Qaf                      ; African_Qaf\njg ; Ain                              ; Ain\njg ; Alaph                            ; Alaph\njg ; Alef                             ; Alef\njg ; Beh                              ; Beh\njg ; Beth                             ; Beth\njg ; Burushaski_Yeh_Barree            ; Burushaski_Yeh_Barree\njg ; Dal                              ; Dal\njg ; Dalath_Rish                      ; Dalath_Rish\njg ; E                                ; E\njg ; Farsi_Yeh                        ; Farsi_Yeh\njg ; Fe                               ; Fe\njg ; Feh                              ; Feh\njg ; Final_Semkath                    ; Final_Semkath\njg ; Gaf                              ; Gaf\njg ; Gamal                            ; Gamal\njg ; Hah                              ; Hah\njg ; Hanifi_Rohingya_Kinna_Ya         ; Hanifi_Rohingya_Kinna_Ya\njg ; Hanifi_Rohingya_Pa               ; Hanifi_Rohingya_Pa\njg ; He                               ; He\njg ; Heh                              ; Heh\njg ; Heh_Goal                         ; Heh_Goal\njg ; Heth                             ; Heth\njg ; Kaf                              ; Kaf\njg ; Kaph                             ; Kaph\njg ; Kashmiri_Yeh                     ; Kashmiri_Yeh\njg ; Khaph                            ; Khaph\njg ; Knotted_Heh                      ; Knotted_Heh\njg ; Lam                              ; Lam\njg ; Lamadh                           ; Lamadh\njg ; Malayalam_Bha                    ; Malayalam_Bha\njg ; Malayalam_Ja                     ; Malayalam_Ja\njg ; Malayalam_Lla                    ; Malayalam_Lla\njg ; Malayalam_Llla                   ; Malayalam_Llla\njg ; Malayalam_Nga                    ; Malayalam_Nga\njg ; Malayalam_Nna                    ; Malayalam_Nna\njg ; Malayalam_Nnna                   ; Malayalam_Nnna\njg ; Malayalam_Nya                    ; Malayalam_Nya\njg ; Malayalam_Ra                     ; Malayalam_Ra\njg ; Malayalam_Ssa                    ; Malayalam_Ssa\njg ; Malayalam_Tta                    ; Malayalam_Tta\njg ; Manichaean_Aleph                 ; Manichaean_Aleph\njg ; Manichaean_Ayin                  ; Manichaean_Ayin\njg ; Manichaean_Beth                  ; Manichaean_Beth\njg ; Manichaean_Daleth                ; Manichaean_Daleth\njg ; Manichaean_Dhamedh               ; Manichaean_Dhamedh\njg ; Manichaean_Five                  ; Manichaean_Five\njg ; Manichaean_Gimel                 ; Manichaean_Gimel\njg ; Manichaean_Heth                  ; Manichaean_Heth\njg ; Manichaean_Hundred               ; Manichaean_Hundred\njg ; Manichaean_Kaph                  ; Manichaean_Kaph\njg ; Manichaean_Lamedh                ; Manichaean_Lamedh\njg ; Manichaean_Mem                   ; Manichaean_Mem\njg ; Manichaean_Nun                   ; Manichaean_Nun\njg ; Manichaean_One                   ; Manichaean_One\njg ; Manichaean_Pe                    ; Manichaean_Pe\njg ; Manichaean_Qoph                  ; Manichaean_Qoph\njg ; Manichaean_Resh                  ; Manichaean_Resh\njg ; Manichaean_Sadhe                 ; Manichaean_Sadhe\njg ; Manichaean_Samekh                ; Manichaean_Samekh\njg ; Manichaean_Taw                   ; Manichaean_Taw\njg ; Manichaean_Ten                   ; Manichaean_Ten\njg ; Manichaean_Teth                  ; Manichaean_Teth\njg ; Manichaean_Thamedh               ; Manichaean_Thamedh\njg ; Manichaean_Twenty                ; Manichaean_Twenty\njg ; Manichaean_Waw                   ; Manichaean_Waw\njg ; Manichaean_Yodh                  ; Manichaean_Yodh\njg ; Manichaean_Zayin                 ; Manichaean_Zayin\njg ; Meem                             ; Meem\njg ; Mim                              ; Mim\njg ; No_Joining_Group                 ; No_Joining_Group\njg ; Noon                             ; Noon\njg ; Nun                              ; Nun\njg ; Nya                              ; Nya\njg ; Pe                               ; Pe\njg ; Qaf                              ; Qaf\njg ; Qaph                             ; Qaph\njg ; Reh                              ; Reh\njg ; Reversed_Pe                      ; Reversed_Pe\njg ; Rohingya_Yeh                     ; Rohingya_Yeh\njg ; Sad                              ; Sad\njg ; Sadhe                            ; Sadhe\njg ; Seen                             ; Seen\njg ; Semkath                          ; Semkath\njg ; Shin                             ; Shin\njg ; Straight_Waw                     ; Straight_Waw\njg ; Swash_Kaf                        ; Swash_Kaf\njg ; Syriac_Waw                       ; Syriac_Waw\njg ; Tah                              ; Tah\njg ; Taw                              ; Taw\njg ; Teh_Marbuta                      ; Teh_Marbuta\njg ; Teh_Marbuta_Goal                 ; Teh_Marbuta_Goal                 ; Hamza_On_Heh_Goal\njg ; Teth                             ; Teth\njg ; Thin_Noon                        ; Thin_Noon\njg ; Thin_Yeh                         ; Thin_Yeh\njg ; Vertical_Tail                    ; Vertical_Tail\njg ; Waw                              ; Waw\njg ; Yeh                              ; Yeh\njg ; Yeh_Barree                       ; Yeh_Barree\njg ; Yeh_With_Tail                    ; Yeh_With_Tail\njg ; Yudh                             ; Yudh\njg ; Yudh_He                          ; Yudh_He\njg ; Zain                             ; Zain\njg ; Zhain                            ; Zhain\n\n# Joining_Type (jt)\n\njt ; C                                ; Join_Causing\njt ; D                                ; Dual_Joining\njt ; L                                ; Left_Joining\njt ; R                                ; Right_Joining\njt ; T                                ; Transparent\njt ; U                                ; Non_Joining\n\n# Line_Break (lb)\n\nlb ; AI                               ; Ambiguous\nlb ; AK                               ; Aksara\nlb ; AL                               ; Alphabetic\nlb ; AP                               ; Aksara_Prebase\nlb ; AS                               ; Aksara_Start\nlb ; B2                               ; Break_Both\nlb ; BA                               ; Break_After\nlb ; BB                               ; Break_Before\nlb ; BK                               ; Mandatory_Break\nlb ; CB                               ; Contingent_Break\nlb ; CJ                               ; Conditional_Japanese_Starter\nlb ; CL                               ; Close_Punctuation\nlb ; CM                               ; Combining_Mark\nlb ; CP                               ; Close_Parenthesis\nlb ; CR                               ; Carriage_Return\nlb ; EB                               ; E_Base\nlb ; EM                               ; E_Modifier\nlb ; EX                               ; Exclamation\nlb ; GL                               ; Glue\nlb ; H2                               ; H2\nlb ; H3                               ; H3\nlb ; HH                               ; Unambiguous_Hyphen\nlb ; HL                               ; Hebrew_Letter\nlb ; HY                               ; Hyphen\nlb ; ID                               ; Ideographic\nlb ; IN                               ; Inseparable                      ; Inseperable\nlb ; IS                               ; Infix_Numeric\nlb ; JL                               ; JL\nlb ; JT                               ; JT\nlb ; JV                               ; JV\nlb ; LF                               ; Line_Feed\nlb ; NL                               ; Next_Line\nlb ; NS                               ; Nonstarter\nlb ; NU                               ; Numeric\nlb ; OP                               ; Open_Punctuation\nlb ; PO                               ; Postfix_Numeric\nlb ; PR                               ; Prefix_Numeric\nlb ; QU                               ; Quotation\nlb ; RI                               ; Regional_Indicator\nlb ; SA                               ; Complex_Context\nlb ; SG                               ; Surrogate\nlb ; SP                               ; Space\nlb ; SY                               ; Break_Symbols\nlb ; VF                               ; Virama_Final\nlb ; VI                               ; Virama\nlb ; WJ                               ; Word_Joiner\nlb ; XX                               ; Unknown\nlb ; ZW                               ; ZWSpace\nlb ; ZWJ                              ; ZWJ\n\n# Logical_Order_Exception (LOE)\n\nLOE; N                                ; No                               ; F                                ; False\nLOE; Y                                ; Yes                              ; T                                ; True\n\n# Lowercase (Lower)\n\nLower; N                              ; No                               ; F                                ; False\nLower; Y                              ; Yes                              ; T                                ; True\n\n# Lowercase_Mapping (lc)\n\n# @missing: 0000..10FFFF; Lowercase_Mapping; <code point>\n\n# Math (Math)\n\nMath; N                               ; No                               ; F                                ; False\nMath; Y                               ; Yes                              ; T                                ; True\n\n# Modifier_Combining_Mark (MCM)\n\nMCM; N                                ; No                               ; F                                ; False\nMCM; Y                                ; Yes                              ; T                                ; True\n\n# NFC_Quick_Check (NFC_QC)\n\nNFC_QC; M                             ; Maybe\nNFC_QC; N                             ; No\nNFC_QC; Y                             ; Yes\n\n# NFD_Quick_Check (NFD_QC)\n\nNFD_QC; N                             ; No\nNFD_QC; Y                             ; Yes\n\n# NFKC_Casefold (NFKC_CF)\n\n\n# NFKC_Quick_Check (NFKC_QC)\n\nNFKC_QC; M                            ; Maybe\nNFKC_QC; N                            ; No\nNFKC_QC; Y                            ; Yes\n\n# NFKC_Simple_Casefold (NFKC_SCF)\n\n\n# NFKD_Quick_Check (NFKD_QC)\n\nNFKD_QC; N                            ; No\nNFKD_QC; Y                            ; Yes\n\n# Name (na)\n\n# @missing: 0000..10FFFF; Name; <none>\n\n# Name_Alias (Name_Alias)\n\n# @missing: 0000..10FFFF; Name_Alias; <none>\n\n# Noncharacter_Code_Point (NChar)\n\nNChar; N                              ; No                               ; F                                ; False\nNChar; Y                              ; Yes                              ; T                                ; True\n\n# Numeric_Type (nt)\n\nnt ; De                               ; Decimal\nnt ; Di                               ; Digit\nnt ; None                             ; None\nnt ; Nu                               ; Numeric\n\n# Numeric_Value (nv)\n\n# @missing: 0000..10FFFF; Numeric_Value; NaN\n\n# Other_Alphabetic (OAlpha)\n\nOAlpha; N                             ; No                               ; F                                ; False\nOAlpha; Y                             ; Yes                              ; T                                ; True\n\n# Other_Default_Ignorable_Code_Point (ODI)\n\nODI; N                                ; No                               ; F                                ; False\nODI; Y                                ; Yes                              ; T                                ; True\n\n# Other_Grapheme_Extend (OGr_Ext)\n\nOGr_Ext; N                            ; No                               ; F                                ; False\nOGr_Ext; Y                            ; Yes                              ; T                                ; True\n\n# Other_ID_Continue (OIDC)\n\nOIDC; N                               ; No                               ; F                                ; False\nOIDC; Y                               ; Yes                              ; T                                ; True\n\n# Other_ID_Start (OIDS)\n\nOIDS; N                               ; No                               ; F                                ; False\nOIDS; Y                               ; Yes                              ; T                                ; True\n\n# Other_Lowercase (OLower)\n\nOLower; N                             ; No                               ; F                                ; False\nOLower; Y                             ; Yes                              ; T                                ; True\n\n# Other_Math (OMath)\n\nOMath; N                              ; No                               ; F                                ; False\nOMath; Y                              ; Yes                              ; T                                ; True\n\n# Other_Uppercase (OUpper)\n\nOUpper; N                             ; No                               ; F                                ; False\nOUpper; Y                             ; Yes                              ; T                                ; True\n\n# Pattern_Syntax (Pat_Syn)\n\nPat_Syn; N                            ; No                               ; F                                ; False\nPat_Syn; Y                            ; Yes                              ; T                                ; True\n\n# Pattern_White_Space (Pat_WS)\n\nPat_WS; N                             ; No                               ; F                                ; False\nPat_WS; Y                             ; Yes                              ; T                                ; True\n\n# Prepended_Concatenation_Mark (PCM)\n\nPCM; N                                ; No                               ; F                                ; False\nPCM; Y                                ; Yes                              ; T                                ; True\n\n# Quotation_Mark (QMark)\n\nQMark; N                              ; No                               ; F                                ; False\nQMark; Y                              ; Yes                              ; T                                ; True\n\n# Radical (Radical)\n\nRadical; N                            ; No                               ; F                                ; False\nRadical; Y                            ; Yes                              ; T                                ; True\n\n# Regional_Indicator (RI)\n\nRI ; N                                ; No                               ; F                                ; False\nRI ; Y                                ; Yes                              ; T                                ; True\n\n# Script (sc)\n\nsc ; Adlm                             ; Adlam\nsc ; Aghb                             ; Caucasian_Albanian\nsc ; Ahom                             ; Ahom\nsc ; Arab                             ; Arabic\nsc ; Armi                             ; Imperial_Aramaic\nsc ; Armn                             ; Armenian\nsc ; Avst                             ; Avestan\nsc ; Bali                             ; Balinese\nsc ; Bamu                             ; Bamum\nsc ; Bass                             ; Bassa_Vah\nsc ; Batk                             ; Batak\nsc ; Beng                             ; Bengali\nsc ; Berf                             ; Beria_Erfe\nsc ; Bhks                             ; Bhaiksuki\nsc ; Bopo                             ; Bopomofo\nsc ; Brah                             ; Brahmi\nsc ; Brai                             ; Braille\nsc ; Bugi                             ; Buginese\nsc ; Buhd                             ; Buhid\nsc ; Cakm                             ; Chakma\nsc ; Cans                             ; Canadian_Aboriginal\nsc ; Cari                             ; Carian\nsc ; Cham                             ; Cham\nsc ; Cher                             ; Cherokee\nsc ; Chrs                             ; Chorasmian\nsc ; Copt                             ; Coptic                           ; Qaac\nsc ; Cpmn                             ; Cypro_Minoan\nsc ; Cprt                             ; Cypriot\nsc ; Cyrl                             ; Cyrillic\nsc ; Deva                             ; Devanagari\nsc ; Diak                             ; Dives_Akuru\nsc ; Dogr                             ; Dogra\nsc ; Dsrt                             ; Deseret\nsc ; Dupl                             ; Duployan\nsc ; Egyp                             ; Egyptian_Hieroglyphs\nsc ; Elba                             ; Elbasan\nsc ; Elym                             ; Elymaic\nsc ; Ethi                             ; Ethiopic\nsc ; Gara                             ; Garay\nsc ; Geor                             ; Georgian\nsc ; Glag                             ; Glagolitic\nsc ; Gong                             ; Gunjala_Gondi\nsc ; Gonm                             ; Masaram_Gondi\nsc ; Goth                             ; Gothic\nsc ; Gran                             ; Grantha\nsc ; Grek                             ; Greek\nsc ; Gujr                             ; Gujarati\nsc ; Gukh                             ; Gurung_Khema\nsc ; Guru                             ; Gurmukhi\nsc ; Hang                             ; Hangul\nsc ; Hani                             ; Han\nsc ; Hano                             ; Hanunoo\nsc ; Hatr                             ; Hatran\nsc ; Hebr                             ; Hebrew\nsc ; Hira                             ; Hiragana\nsc ; Hluw                             ; Anatolian_Hieroglyphs\nsc ; Hmng                             ; Pahawh_Hmong\nsc ; Hmnp                             ; Nyiakeng_Puachue_Hmong\nsc ; Hrkt                             ; Katakana_Or_Hiragana\nsc ; Hung                             ; Old_Hungarian\nsc ; Ital                             ; Old_Italic\nsc ; Java                             ; Javanese\nsc ; Kali                             ; Kayah_Li\nsc ; Kana                             ; Katakana\nsc ; Kawi                             ; Kawi\nsc ; Khar                             ; Kharoshthi\nsc ; Khmr                             ; Khmer\nsc ; Khoj                             ; Khojki\nsc ; Kits                             ; Khitan_Small_Script\nsc ; Knda                             ; Kannada\nsc ; Krai                             ; Kirat_Rai\nsc ; Kthi                             ; Kaithi\nsc ; Lana                             ; Tai_Tham\nsc ; Laoo                             ; Lao\nsc ; Latn                             ; Latin\nsc ; Lepc                             ; Lepcha\nsc ; Limb                             ; Limbu\nsc ; Lina                             ; Linear_A\nsc ; Linb                             ; Linear_B\nsc ; Lisu                             ; Lisu\nsc ; Lyci                             ; Lycian\nsc ; Lydi                             ; Lydian\nsc ; Mahj                             ; Mahajani\nsc ; Maka                             ; Makasar\nsc ; Mand                             ; Mandaic\nsc ; Mani                             ; Manichaean\nsc ; Marc                             ; Marchen\nsc ; Medf                             ; Medefaidrin\nsc ; Mend                             ; Mende_Kikakui\nsc ; Merc                             ; Meroitic_Cursive\nsc ; Mero                             ; Meroitic_Hieroglyphs\nsc ; Mlym                             ; Malayalam\nsc ; Modi                             ; Modi\nsc ; Mong                             ; Mongolian\nsc ; Mroo                             ; Mro\nsc ; Mtei                             ; Meetei_Mayek\nsc ; Mult                             ; Multani\nsc ; Mymr                             ; Myanmar\nsc ; Nagm                             ; Nag_Mundari\nsc ; Nand                             ; Nandinagari\nsc ; Narb                             ; Old_North_Arabian\nsc ; Nbat                             ; Nabataean\nsc ; Newa                             ; Newa\nsc ; Nkoo                             ; Nko\nsc ; Nshu                             ; Nushu\nsc ; Ogam                             ; Ogham\nsc ; Olck                             ; Ol_Chiki\nsc ; Onao                             ; Ol_Onal\nsc ; Orkh                             ; Old_Turkic\nsc ; Orya                             ; Oriya\nsc ; Osge                             ; Osage\nsc ; Osma                             ; Osmanya\nsc ; Ougr                             ; Old_Uyghur\nsc ; Palm                             ; Palmyrene\nsc ; Pauc                             ; Pau_Cin_Hau\nsc ; Perm                             ; Old_Permic\nsc ; Phag                             ; Phags_Pa\nsc ; Phli                             ; Inscriptional_Pahlavi\nsc ; Phlp                             ; Psalter_Pahlavi\nsc ; Phnx                             ; Phoenician\nsc ; Plrd                             ; Miao\nsc ; Prti                             ; Inscriptional_Parthian\nsc ; Rjng                             ; Rejang\nsc ; Rohg                             ; Hanifi_Rohingya\nsc ; Runr                             ; Runic\nsc ; Samr                             ; Samaritan\nsc ; Sarb                             ; Old_South_Arabian\nsc ; Saur                             ; Saurashtra\nsc ; Sgnw                             ; SignWriting\nsc ; Shaw                             ; Shavian\nsc ; Shrd                             ; Sharada\nsc ; Sidd                             ; Siddham\nsc ; Sidt                             ; Sidetic\nsc ; Sind                             ; Khudawadi\nsc ; Sinh                             ; Sinhala\nsc ; Sogd                             ; Sogdian\nsc ; Sogo                             ; Old_Sogdian\nsc ; Sora                             ; Sora_Sompeng\nsc ; Soyo                             ; Soyombo\nsc ; Sund                             ; Sundanese\nsc ; Sunu                             ; Sunuwar\nsc ; Sylo                             ; Syloti_Nagri\nsc ; Syrc                             ; Syriac\nsc ; Tagb                             ; Tagbanwa\nsc ; Takr                             ; Takri\nsc ; Tale                             ; Tai_Le\nsc ; Talu                             ; New_Tai_Lue\nsc ; Taml                             ; Tamil\nsc ; Tang                             ; Tangut\nsc ; Tavt                             ; Tai_Viet\nsc ; Tayo                             ; Tai_Yo\nsc ; Telu                             ; Telugu\nsc ; Tfng                             ; Tifinagh\nsc ; Tglg                             ; Tagalog\nsc ; Thaa                             ; Thaana\nsc ; Thai                             ; Thai\nsc ; Tibt                             ; Tibetan\nsc ; Tirh                             ; Tirhuta\nsc ; Tnsa                             ; Tangsa\nsc ; Todr                             ; Todhri\nsc ; Tols                             ; Tolong_Siki\nsc ; Toto                             ; Toto\nsc ; Tutg                             ; Tulu_Tigalari\nsc ; Ugar                             ; Ugaritic\nsc ; Vaii                             ; Vai\nsc ; Vith                             ; Vithkuqi\nsc ; Wara                             ; Warang_Citi\nsc ; Wcho                             ; Wancho\nsc ; Xpeo                             ; Old_Persian\nsc ; Xsux                             ; Cuneiform\nsc ; Yezi                             ; Yezidi\nsc ; Yiii                             ; Yi\nsc ; Zanb                             ; Zanabazar_Square\nsc ; Zinh                             ; Inherited                        ; Qaai\nsc ; Zyyy                             ; Common\nsc ; Zzzz                             ; Unknown\n\n# Script_Extensions (scx)\n\n\n# Sentence_Break (SB)\n\nSB ; AT                               ; ATerm\nSB ; CL                               ; Close\nSB ; CR                               ; CR\nSB ; EX                               ; Extend\nSB ; FO                               ; Format\nSB ; LE                               ; OLetter\nSB ; LF                               ; LF\nSB ; LO                               ; Lower\nSB ; NU                               ; Numeric\nSB ; SC                               ; SContinue\nSB ; SE                               ; Sep\nSB ; SP                               ; Sp\nSB ; ST                               ; STerm\nSB ; UP                               ; Upper\nSB ; XX                               ; Other\n\n# Sentence_Terminal (STerm)\n\nSTerm; N                              ; No                               ; F                                ; False\nSTerm; Y                              ; Yes                              ; T                                ; True\n\n# Simple_Case_Folding (scf)\n\n# @missing: 0000..10FFFF; Simple_Case_Folding; <code point>\n\n# Simple_Lowercase_Mapping (slc)\n\n# @missing: 0000..10FFFF; Simple_Lowercase_Mapping; <code point>\n\n# Simple_Titlecase_Mapping (stc)\n\n# @missing: 0000..10FFFF; Simple_Titlecase_Mapping; <code point>\n\n# Simple_Uppercase_Mapping (suc)\n\n# @missing: 0000..10FFFF; Simple_Uppercase_Mapping; <code point>\n\n# Soft_Dotted (SD)\n\nSD ; N                                ; No                               ; F                                ; False\nSD ; Y                                ; Yes                              ; T                                ; True\n\n# Terminal_Punctuation (Term)\n\nTerm; N                               ; No                               ; F                                ; False\nTerm; Y                               ; Yes                              ; T                                ; True\n\n# Titlecase_Mapping (tc)\n\n# @missing: 0000..10FFFF; Titlecase_Mapping; <code point>\n\n# Unicode_1_Name (na1)\n\n# @missing: 0000..10FFFF; Unicode_1_Name; <none>\n\n# Unified_Ideograph (UIdeo)\n\nUIdeo; N                              ; No                               ; F                                ; False\nUIdeo; Y                              ; Yes                              ; T                                ; True\n\n# Uppercase (Upper)\n\nUpper; N                              ; No                               ; F                                ; False\nUpper; Y                              ; Yes                              ; T                                ; True\n\n# Uppercase_Mapping (uc)\n\n# @missing: 0000..10FFFF; Uppercase_Mapping; <code point>\n\n# Variation_Selector (VS)\n\nVS ; N                                ; No                               ; F                                ; False\nVS ; Y                                ; Yes                              ; T                                ; True\n\n# Vertical_Orientation (vo)\n\nvo ; R                                ; Rotated\nvo ; Tr                               ; Transformed_Rotated\nvo ; Tu                               ; Transformed_Upright\nvo ; U                                ; Upright\n\n# White_Space (WSpace)\n\nWSpace; N                             ; No                               ; F                                ; False\nWSpace; Y                             ; Yes                              ; T                                ; True\n\n# Word_Break (WB)\n\nWB ; CR                               ; CR\nWB ; DQ                               ; Double_Quote\nWB ; EB                               ; E_Base\nWB ; EBG                              ; E_Base_GAZ\nWB ; EM                               ; E_Modifier\nWB ; EX                               ; ExtendNumLet\nWB ; Extend                           ; Extend\nWB ; FO                               ; Format\nWB ; GAZ                              ; Glue_After_Zwj\nWB ; HL                               ; Hebrew_Letter\nWB ; KA                               ; Katakana\nWB ; LE                               ; ALetter\nWB ; LF                               ; LF\nWB ; MB                               ; MidNumLet\nWB ; ML                               ; MidLetter\nWB ; MN                               ; MidNum\nWB ; NL                               ; Newline\nWB ; NU                               ; Numeric\nWB ; RI                               ; Regional_Indicator\nWB ; SQ                               ; Single_Quote\nWB ; WSegSpace                        ; WSegSpace\nWB ; XX                               ; Other\nWB ; ZWJ                              ; ZWJ\n\n# XID_Continue (XIDC)\n\nXIDC; N                               ; No                               ; F                                ; False\nXIDC; Y                               ; Yes                              ; T                                ; True\n\n# XID_Start (XIDS)\n\nXIDS; N                               ; No                               ; F                                ; False\nXIDS; Y                               ; Yes                              ; T                                ; True\n\n# cjkAccountingNumeric (cjkAccountingNumeric)\n\n# @missing: 0000..10FFFF; cjkAccountingNumeric; NaN\n\n# cjkCompatibilityVariant (cjkCompatibilityVariant)\n\n# @missing: 0000..10FFFF; cjkCompatibilityVariant; <code point>\n\n# cjkIICore (cjkIICore)\n\n# @missing: 0000..10FFFF; cjkIICore; <none>\n\n# cjkIRG_GSource (cjkIRG_GSource)\n\n# @missing: 0000..10FFFF; cjkIRG_GSource; <none>\n\n# cjkIRG_HSource (cjkIRG_HSource)\n\n# @missing: 0000..10FFFF; cjkIRG_HSource; <none>\n\n# cjkIRG_JSource (cjkIRG_JSource)\n\n# @missing: 0000..10FFFF; cjkIRG_JSource; <none>\n\n# cjkIRG_KPSource (cjkIRG_KPSource)\n\n# @missing: 0000..10FFFF; cjkIRG_KPSource; <none>\n\n# cjkIRG_KSource (cjkIRG_KSource)\n\n# @missing: 0000..10FFFF; cjkIRG_KSource; <none>\n\n# cjkIRG_MSource (cjkIRG_MSource)\n\n# @missing: 0000..10FFFF; cjkIRG_MSource; <none>\n\n# cjkIRG_SSource (cjkIRG_SSource)\n\n# @missing: 0000..10FFFF; cjkIRG_SSource; <none>\n\n# cjkIRG_TSource (cjkIRG_TSource)\n\n# @missing: 0000..10FFFF; cjkIRG_TSource; <none>\n\n# cjkIRG_UKSource (cjkIRG_UKSource)\n\n# @missing: 0000..10FFFF; cjkIRG_UKSource; <none>\n\n# cjkIRG_USource (cjkIRG_USource)\n\n# @missing: 0000..10FFFF; cjkIRG_USource; <none>\n\n# cjkIRG_VSource (cjkIRG_VSource)\n\n# @missing: 0000..10FFFF; cjkIRG_VSource; <none>\n\n# cjkOtherNumeric (cjkOtherNumeric)\n\n# @missing: 0000..10FFFF; cjkOtherNumeric; NaN\n\n# cjkPrimaryNumeric (cjkPrimaryNumeric)\n\n# @missing: 0000..10FFFF; cjkPrimaryNumeric; NaN\n\n# cjkRSUnicode (cjkRSUnicode)\n\n# @missing: 0000..10FFFF; cjkRSUnicode; <none>\n\n# kEH_Cat (kEH_Cat)\n\n# @missing: 0000..10FFFF; kEH_Cat; <none>\n\n# kEH_Desc (kEH_Desc)\n\n# @missing: 0000..10FFFF; kEH_Desc; <none>\n\n# kEH_HG (kEH_HG)\n\n# @missing: 0000..10FFFF; kEH_HG; <none>\n\n# kEH_IFAO (kEH_IFAO)\n\n# @missing: 0000..10FFFF; kEH_IFAO; <none>\n\n# kEH_JSesh (kEH_JSesh)\n\n# @missing: 0000..10FFFF; kEH_JSesh; <none>\n\n# kEH_NoMirror (kEH_NoMirror)\n\nkEH_NoMirror; N                       ; No                               ; F                                ; False\nkEH_NoMirror; Y                       ; Yes                              ; T                                ; True\n\n# kEH_NoRotate (kEH_NoRotate)\n\nkEH_NoRotate; N                       ; No                               ; F                                ; False\nkEH_NoRotate; Y                       ; Yes                              ; T                                ; True\n\n# kMandarin (cjkMandarin)\n\n# @missing: 0000..10FFFF; kMandarin; <none>\n\n# kTotalStrokes (cjkTotalStrokes)\n\n# @missing: 0000..10FFFF; kTotalStrokes; <none>\n\n# kUnihanCore2020 (cjkUnihanCore2020)\n\n# @missing: 0000..10FFFF; kUnihanCore2020; <none>\n\n# EOF\n"
  },
  {
    "path": "maint/Unicode.tables/ScriptExtensions.txt",
    "content": "# ScriptExtensions-17.0.0.txt\n# Date: 2025-08-01, 21:42:00 GMT\n# © 2025 Unicode®, Inc.\n# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.\n# For terms of use and license, see https://www.unicode.org/terms_of_use.html\n#\n# Unicode Character Database\n#   For documentation, see https://www.unicode.org/reports/tr44/\n#\n# The Script_Extensions property indicates which characters are commonly used\n# with more than one script, but with a limited number of scripts.\n# For each code point, there is one or more property values.  Each such value is a Script property value.\n# For more information, see:\n#   UAX #24, Unicode Script Property: https://www.unicode.org/reports/tr24/\n#     Especially the sections:\n#       https://www.unicode.org/reports/tr24/#Assignment_Script_Values\n#       https://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values\n#\n# Each Script_Extensions value in this file consists of a set\n# of one or more abbreviated Script property values. The ordering of the\n# values in that set is not material, but for stability in presentation\n# it is given here as alphabetical.\n#\n# All code points not explicitly listed for Script_Extensions\n# have as their value the corresponding Script property value.\n#\n# @missing: 0000..10FFFF; <script>\n00B7          ; Avst Cari Copt Dupl Elba Geor Glag Gong Goth Grek Hani Latn Lydi Mahj Perm Shaw #Po MIDDLE DOT\n02BC          ; Beng Cyrl Deva Latn Lisu Thai Toto #Lm   MODIFIER LETTER APOSTROPHE\n02C7          ; Bopo Latn                      # Lm      CARON\n02C9..02CB    ; Bopo Latn                      # Lm  [3] MODIFIER LETTER MACRON..MODIFIER LETTER GRAVE ACCENT\n02CD          ; Latn Lisu                      # Lm      MODIFIER LETTER LOW MACRON\n02D7          ; Latn Thai                      # Sk      MODIFIER LETTER MINUS SIGN\n02D9          ; Bopo Latn                      # Sk      DOT ABOVE\n0300          ; Cher Copt Cyrl Grek Latn Perm Sunu Tale #Mn COMBINING GRAVE ACCENT\n0301          ; Cher Cyrl Grek Latn Osge Sunu Tale Todr #Mn COMBINING ACUTE ACCENT\n0302          ; Cher Cyrl Latn Tfng            # Mn      COMBINING CIRCUMFLEX ACCENT\n0303          ; Glag Latn Sunu Syrc Thai       # Mn      COMBINING TILDE\n0304          ; Aghb Cher Copt Cyrl Goth Grek Latn Osge Syrc Tfng Todr #Mn COMBINING MACRON\n0305          ; Copt Elba Glag Goth Kana Latn  # Mn      COMBINING OVERLINE\n0306          ; Cyrl Grek Latn Perm Tfng       # Mn      COMBINING BREVE\n0307          ; Copt Dupl Hebr Latn Perm Syrc Tale Tfng Todr #Mn COMBINING DOT ABOVE\n0308          ; Armn Cyrl Dupl Goth Grek Hebr Latn Perm Syrc Tale Tfng #Mn COMBINING DIAERESIS\n0309          ; Latn Tfng                      # Mn      COMBINING HOOK ABOVE\n030A          ; Dupl Latn Syrc                 # Mn      COMBINING RING ABOVE\n030B          ; Cher Cyrl Latn Osge            # Mn      COMBINING DOUBLE ACUTE ACCENT\n030C          ; Cher Latn Tale                 # Mn      COMBINING CARON\n030D          ; Latn Sunu                      # Mn      COMBINING VERTICAL LINE ABOVE\n030E          ; Ethi Latn                      # Mn      COMBINING DOUBLE VERTICAL LINE ABOVE\n0310          ; Latn Sunu                      # Mn      COMBINING CANDRABINDU\n0311          ; Cyrl Latn Todr                 # Mn      COMBINING INVERTED BREVE\n0313          ; Grek Latn Perm Todr            # Mn      COMBINING COMMA ABOVE\n0323          ; Cher Dupl Kana Latn Syrc Tfng  # Mn      COMBINING DOT BELOW\n0324          ; Cher Dupl Latn Syrc            # Mn      COMBINING DIAERESIS BELOW\n0325          ; Latn Syrc                      # Mn      COMBINING RING BELOW\n032D          ; Latn Sunu Syrc                 # Mn      COMBINING CIRCUMFLEX ACCENT BELOW\n032E          ; Latn Syrc                      # Mn      COMBINING BREVE BELOW\n0330          ; Cher Latn Syrc                 # Mn      COMBINING TILDE BELOW\n0331          ; Aghb Cher Goth Latn Sunu Syrc Thai #Mn   COMBINING MACRON BELOW\n0342          ; Grek                           # Mn      COMBINING GREEK PERISPOMENI\n0345          ; Grek                           # Mn      COMBINING GREEK YPOGEGRAMMENI\n0358          ; Latn Osge                      # Mn      COMBINING DOT ABOVE RIGHT\n035E          ; Aghb Latn Todr                 # Mn      COMBINING DOUBLE MACRON\n0363..036F    ; Latn                           # Mn [13] COMBINING LATIN SMALL LETTER A..COMBINING LATIN SMALL LETTER X\n0374          ; Copt Grek                      # Lm      GREEK NUMERAL SIGN\n0375          ; Copt Grek                      # Sk      GREEK LOWER NUMERAL SIGN\n0483          ; Cyrl Perm                      # Mn      COMBINING CYRILLIC TITLO\n0484          ; Cyrl Glag                      # Mn      COMBINING CYRILLIC PALATALIZATION\n0485..0486    ; Cyrl Latn                      # Mn  [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA\n0487          ; Cyrl Glag                      # Mn      COMBINING CYRILLIC POKRYTIE\n0589          ; Armn Geor Glag                 # Po      ARMENIAN FULL STOP\n060C          ; Arab Gara Nkoo Rohg Syrc Thaa Yezi #Po   ARABIC COMMA\n061B          ; Arab Gara Nkoo Rohg Syrc Thaa Yezi #Po   ARABIC SEMICOLON\n061C          ; Arab Syrc Thaa                 # Cf      ARABIC LETTER MARK\n061F          ; Adlm Arab Gara Nkoo Rohg Syrc Thaa Yezi #Po ARABIC QUESTION MARK\n0640          ; Adlm Arab Mand Mani Ougr Phlp Rohg Sogd Syrc #Lm ARABIC TATWEEL\n064B..0655    ; Arab Syrc                      # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW\n0660..0669    ; Arab Thaa Yezi                 # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE\n0670          ; Arab Syrc                      # Mn      ARABIC LETTER SUPERSCRIPT ALEF\n06D4          ; Arab Rohg                      # Po      ARABIC FULL STOP\n0951          ; Beng Deva Gran Gujr Guru Knda Latn Mlym Nand Newa Orya Shrd Taml Telu Tirh #Mn DEVANAGARI STRESS SIGN UDATTA\n0952          ; Beng Deva Gran Gujr Guru Knda Latn Mlym Newa Orya Taml Telu Tirh #Mn DEVANAGARI STRESS SIGN ANUDATTA\n0964          ; Beng Deva Dogr Gong Gonm Gran Gujr Guru Knda Mahj Mlym Nand Onao Orya Sind Sinh Sylo Takr Taml Telu Tirh #Po DEVANAGARI DANDA\n0965          ; Beng Deva Dogr Gong Gonm Gran Gujr Gukh Guru Knda Limb Mahj Mlym Nand Onao Orya Sind Sinh Sylo Takr Taml Telu Tirh #Po DEVANAGARI DOUBLE DANDA\n0966..096F    ; Deva Dogr Kthi Mahj            # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE\n09E6..09EF    ; Beng Cakm Sylo                 # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE\n0A66..0A6F    ; Guru Mult                      # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE\n0AE6..0AEF    ; Gujr Khoj                      # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE\n0BE6..0BEF    ; Gran Taml                      # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE\n0BF0..0BF2    ; Gran Taml                      # No  [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND\n0BF3          ; Gran Taml                      # So      TAMIL DAY SIGN\n0CE6..0CEF    ; Knda Nand Tutg                 # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE\n1040..1049    ; Cakm Mymr Tale                 # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE\n10FB          ; Geor Glag Latn                 # Po      GEORGIAN PARAGRAPH SEPARATOR\n16EB..16ED    ; Runr                           # Po  [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION\n1735..1736    ; Buhd Hano Tagb Tglg            # Po  [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION\n1802..1803    ; Mong Phag                      # Po  [2] MONGOLIAN COMMA..MONGOLIAN FULL STOP\n1805          ; Mong Phag                      # Po      MONGOLIAN FOUR DOTS\n1CD0          ; Beng Deva Gran Knda            # Mn      VEDIC TONE KARSHANA\n1CD1          ; Deva                           # Mn      VEDIC TONE SHARA\n1CD2          ; Beng Deva Gran Knda            # Mn      VEDIC TONE PRENKHA\n1CD3          ; Deva Gran Knda                 # Po      VEDIC SIGN NIHSHVASA\n1CD4          ; Deva                           # Mn      VEDIC SIGN YAJURVEDIC MIDLINE SVARITA\n1CD5          ; Beng Deva Newa Telu Tirh       # Mn      VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA\n1CD6          ; Beng Deva Telu                 # Mn      VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA\n1CD7          ; Deva Newa Shrd                 # Mn      VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA\n1CD8          ; Beng Deva Newa Telu            # Mn      VEDIC TONE CANDRA BELOW\n1CD9          ; Deva Shrd                      # Mn      VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER\n1CDA          ; Deva Knda Mlym Orya Taml Telu  # Mn      VEDIC TONE DOUBLE SVARITA\n1CDB          ; Deva                           # Mn      VEDIC TONE TRIPLE SVARITA\n1CDC..1CDD    ; Deva Shrd                      # Mn  [2] VEDIC TONE KATHAKA ANUDATTA..VEDIC TONE DOT BELOW\n1CDE..1CDF    ; Deva                           # Mn  [2] VEDIC TONE TWO DOTS BELOW..VEDIC TONE THREE DOTS BELOW\n1CE0          ; Deva Shrd                      # Mn      VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n1CE1          ; Beng Deva                      # Mc      VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\n1CE2          ; Deva Newa Tirh                 # Mn      VEDIC SIGN VISARGA SVARITA\n1CE3..1CE8    ; Deva                           # Mn  [6] VEDIC SIGN VISARGA UDATTA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n1CE9          ; Deva Nand Newa                 # Lo      VEDIC SIGN ANUSVARA ANTARGOMUKHA\n1CEA          ; Beng Deva Shrd                 # Lo      VEDIC SIGN ANUSVARA BAHIRGOMUKHA\n1CEB          ; Deva Newa                      # Lo      VEDIC SIGN ANUSVARA VAMAGOMUKHA\n1CEC          ; Deva                           # Lo      VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL\n1CED          ; Beng Deva Newa Shrd            # Mn      VEDIC SIGN TIRYAK\n1CEE..1CF1    ; Deva                           # Lo  [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA\n1CF2          ; Beng Deva Gran Knda Mlym Nand Orya Sinh Telu Tirh Tutg #Lo VEDIC SIGN ARDHAVISARGA\n1CF3          ; Deva Gran                      # Lo      VEDIC SIGN ROTATED ARDHAVISARGA\n1CF4          ; Deva Gran Knda Tutg            # Mn      VEDIC TONE CANDRA ABOVE\n1CF5..1CF6    ; Beng Deva                      # Lo  [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA\n1CF7          ; Beng                           # Mc      VEDIC SIGN ATIKRAMA\n1CF8..1CF9    ; Deva Gran                      # Mn  [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n1CFA          ; Nand                           # Lo      VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA\n1DC0..1DC1    ; Grek                           # Mn  [2] COMBINING DOTTED GRAVE ACCENT..COMBINING DOTTED ACUTE ACCENT\n1DF8          ; Cyrl Latn Syrc                 # Mn      COMBINING DOT ABOVE LEFT\n1DFA          ; Syrc                           # Mn      COMBINING DOT BELOW LEFT\n202F          ; Latn Mong Phag                 # Zs      NARROW NO-BREAK SPACE\n204F          ; Adlm Arab                      # Po      REVERSED SEMICOLON\n205A          ; Cari Geor Glag Hung Lyci Orkh  # Po      TWO DOT PUNCTUATION\n205D          ; Cari Grek Hung Mero            # Po      TRICOLON\n20F0          ; Deva Gran Latn                 # Mn      COMBINING ASTERISK ABOVE\n2E17          ; Copt Latn                      # Pd      DOUBLE OBLIQUE HYPHEN\n2E30          ; Avst Orkh                      # Po      RING POINT\n2E31          ; Avst Cari Geor Hung Kthi Lydi Samr #Po   WORD SEPARATOR MIDDLE DOT\n2E3C          ; Dupl                           # Po      STENOGRAPHIC FULL STOP\n2E41          ; Adlm Arab Hung                 # Po      REVERSED COMMA\n2E43          ; Cyrl Glag                      # Po      DASH WITH LEFT UPTURN\n2FF0..2FFF    ; Hani Tang                      # So [16] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION\n3001          ; Bopo Hang Hani Hira Kana Mong Yiii #Po   IDEOGRAPHIC COMMA\n3002          ; Bopo Hang Hani Hira Kana Mong Phag Yiii #Po IDEOGRAPHIC FULL STOP\n3003          ; Bopo Hang Hani Hira Kana       # Po      DITTO MARK\n3006          ; Hani                           # Lo      IDEOGRAPHIC CLOSING MARK\n3008          ; Bopo Hang Hani Hira Kana Mong Tibt Yiii #Ps LEFT ANGLE BRACKET\n3009          ; Bopo Hang Hani Hira Kana Mong Tibt Yiii #Pe RIGHT ANGLE BRACKET\n300A          ; Bopo Hang Hani Hira Kana Lisu Mong Tibt Yiii #Ps LEFT DOUBLE ANGLE BRACKET\n300B          ; Bopo Hang Hani Hira Kana Lisu Mong Tibt Yiii #Pe RIGHT DOUBLE ANGLE BRACKET\n300C          ; Bopo Hang Hani Hira Kana Yiii  # Ps      LEFT CORNER BRACKET\n300D          ; Bopo Hang Hani Hira Kana Yiii  # Pe      RIGHT CORNER BRACKET\n300E          ; Bopo Hang Hani Hira Kana Yiii  # Ps      LEFT WHITE CORNER BRACKET\n300F          ; Bopo Hang Hani Hira Kana Yiii  # Pe      RIGHT WHITE CORNER BRACKET\n3010          ; Bopo Hang Hani Hira Kana Yiii  # Ps      LEFT BLACK LENTICULAR BRACKET\n3011          ; Bopo Hang Hani Hira Kana Yiii  # Pe      RIGHT BLACK LENTICULAR BRACKET\n3013          ; Bopo Hang Hani Hira Kana       # So      GETA MARK\n3014          ; Bopo Hang Hani Hira Kana Yiii  # Ps      LEFT TORTOISE SHELL BRACKET\n3015          ; Bopo Hang Hani Hira Kana Yiii  # Pe      RIGHT TORTOISE SHELL BRACKET\n3016          ; Bopo Hang Hani Hira Kana Yiii  # Ps      LEFT WHITE LENTICULAR BRACKET\n3017          ; Bopo Hang Hani Hira Kana Yiii  # Pe      RIGHT WHITE LENTICULAR BRACKET\n3018          ; Bopo Hang Hani Hira Kana Yiii  # Ps      LEFT WHITE TORTOISE SHELL BRACKET\n3019          ; Bopo Hang Hani Hira Kana Yiii  # Pe      RIGHT WHITE TORTOISE SHELL BRACKET\n301A          ; Bopo Hang Hani Hira Kana Yiii  # Ps      LEFT WHITE SQUARE BRACKET\n301B          ; Bopo Hang Hani Hira Kana Yiii  # Pe      RIGHT WHITE SQUARE BRACKET\n301C          ; Bopo Hang Hani Hira Kana       # Pd      WAVE DASH\n301D          ; Bopo Hang Hani Hira Kana       # Ps      REVERSED DOUBLE PRIME QUOTATION MARK\n301E..301F    ; Bopo Hang Hani Hira Kana       # Pe  [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK\n302A..302D    ; Bopo Hani                      # Mn  [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n3030          ; Bopo Hang Hani Hira Kana       # Pd      WAVY DASH\n3031..3035    ; Hira Kana                      # Lm  [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF\n3037          ; Bopo Hang Hani Hira Kana       # So      IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL\n303C          ; Hani Hira Kana                 # Lo      MASU MARK\n303D          ; Hani Hira Kana                 # Po      PART ALTERNATION MARK\n303E..303F    ; Hani                           # So  [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE\n3099..309A    ; Hira Kana                      # Mn  [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n309B..309C    ; Hira Kana                      # Sk  [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n30A0          ; Hira Kana                      # Pd      KATAKANA-HIRAGANA DOUBLE HYPHEN\n30FB          ; Bopo Hang Hani Hira Kana Yiii  # Po      KATAKANA MIDDLE DOT\n30FC          ; Hira Kana                      # Lm      KATAKANA-HIRAGANA PROLONGED SOUND MARK\n3190..3191    ; Hani                           # So  [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK\n3192..3195    ; Hani                           # No  [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK\n3196..319F    ; Hani                           # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK\n31C0..31E5    ; Hani                           # So [38] CJK STROKE T..CJK STROKE SZP\n31EF          ; Hani Tang                      # So      IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION\n3220..3229    ; Hani                           # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN\n322A..3247    ; Hani                           # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO\n3280..3289    ; Hani                           # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN\n328A..32B0    ; Hani                           # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT\n32C0..32CB    ; Hani                           # So [12] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER\n32FF          ; Hani                           # So      SQUARE ERA NAME REIWA\n3358..3370    ; Hani                           # So [25] IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO..IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR\n337B..337F    ; Hani                           # So  [5] SQUARE ERA NAME HEISEI..SQUARE CORPORATION\n33E0..33FE    ; Hani                           # So [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE\nA66F          ; Cyrl Glag                      # Mn      COMBINING CYRILLIC VZMET\nA700..A707    ; Hani Latn                      # Sk  [8] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER CHINESE TONE YANG RU\nA830..A832    ; Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Mlym Modi Nand Shrd Sind Takr Tirh Tutg #No [3] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE QUARTERS\nA833..A835    ; Deva Dogr Gujr Guru Khoj Knda Kthi Mahj Modi Nand Shrd Sind Takr Tirh Tutg #No [3] NORTH INDIC FRACTION ONE SIXTEENTH..NORTH INDIC FRACTION THREE SIXTEENTHS\nA836..A837    ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh #So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK\nA838          ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Shrd Sind Takr Tirh #Sc NORTH INDIC RUPEE MARK\nA839          ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh #So NORTH INDIC QUANTITY MARK\nA8F1          ; Beng Deva Tutg                 # Mn      COMBINING DEVANAGARI SIGN AVAGRAHA\nA8F3          ; Deva Taml                      # Lo      DEVANAGARI SIGN CANDRABINDU VIRAMA\nA92E          ; Kali Latn Mymr                 # Po      KAYAH LI SIGN CWI\nA9CF          ; Bugi Java                      # Lm      JAVANESE PANGRANGKEP\nFD3E          ; Arab Nkoo                      # Pe      ORNATE LEFT PARENTHESIS\nFD3F          ; Arab Nkoo                      # Ps      ORNATE RIGHT PARENTHESIS\nFDF2          ; Arab Thaa                      # Lo      ARABIC LIGATURE ALLAH ISOLATED FORM\nFDFD          ; Arab Thaa                      # So      ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM\nFE45..FE46    ; Bopo Hang Hani Hira Kana       # Po  [2] SESAME DOT..WHITE SESAME DOT\nFF61          ; Bopo Hang Hani Hira Kana Yiii  # Po      HALFWIDTH IDEOGRAPHIC FULL STOP\nFF62          ; Bopo Hang Hani Hira Kana Yiii  # Ps      HALFWIDTH LEFT CORNER BRACKET\nFF63          ; Bopo Hang Hani Hira Kana Yiii  # Pe      HALFWIDTH RIGHT CORNER BRACKET\nFF64..FF65    ; Bopo Hang Hani Hira Kana Yiii  # Po  [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT\nFF70          ; Hira Kana                      # Lm      HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF9E..FF9F    ; Hira Kana                      # Lm  [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\n10100..10101  ; Cpmn Cprt Linb                 # Po  [2] AEGEAN WORD SEPARATOR LINE..AEGEAN WORD SEPARATOR DOT\n10102         ; Cprt Linb                      # Po      AEGEAN CHECK MARK\n10107..10133  ; Cprt Lina Linb                 # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND\n10137..1013F  ; Cprt Linb                      # So  [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT\n102E0         ; Arab Copt                      # Mn      COPTIC EPACT THOUSANDS MARK\n102E1..102FB  ; Arab Copt                      # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED\n10AF2         ; Mani Ougr                      # Po      MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT\n11301         ; Gran Taml                      # Mn      GRANTHA SIGN CANDRABINDU\n11303         ; Gran Taml                      # Mc      GRANTHA SIGN VISARGA\n1133B..1133C  ; Gran Taml                      # Mn  [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA\n11FD0..11FD1  ; Gran Taml                      # No  [2] TAMIL FRACTION ONE QUARTER..TAMIL FRACTION ONE HALF-1\n11FD3         ; Gran Taml                      # No      TAMIL FRACTION THREE QUARTERS\n1BCA0..1BCA3  ; Dupl                           # Cf  [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP\n1D360..1D371  ; Hani                           # No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE\n1F250..1F251  ; Hani                           # So  [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT\n\n# EOF\n"
  },
  {
    "path": "maint/Unicode.tables/Scripts.txt",
    "content": "# Scripts-17.0.0.txt\n# Date: 2025-07-24, 13:28:55 GMT\n# © 2025 Unicode®, Inc.\n# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.\n# For terms of use and license, see https://www.unicode.org/terms_of_use.html\n#\n# Unicode Character Database\n#   For documentation, see https://www.unicode.org/reports/tr44/\n# For more information, see:\n#   UAX #24, Unicode Script Property: https://www.unicode.org/reports/tr24/\n#     Especially the sections:\n#       https://www.unicode.org/reports/tr24/#Assignment_Script_Values\n#       https://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values\n#\n\n# ================================================\n\n# Property:\tScript\n\n#  All code points not explicitly listed for Script\n#  have the value Unknown (Zzzz).\n\n# @missing: 0000..10FFFF; Unknown\n\n# ================================================\n\n0000..001F    ; Common # Cc  [32] <control-0000>..<control-001F>\n0020          ; Common # Zs       SPACE\n0021..0023    ; Common # Po   [3] EXCLAMATION MARK..NUMBER SIGN\n0024          ; Common # Sc       DOLLAR SIGN\n0025..0027    ; Common # Po   [3] PERCENT SIGN..APOSTROPHE\n0028          ; Common # Ps       LEFT PARENTHESIS\n0029          ; Common # Pe       RIGHT PARENTHESIS\n002A          ; Common # Po       ASTERISK\n002B          ; Common # Sm       PLUS SIGN\n002C          ; Common # Po       COMMA\n002D          ; Common # Pd       HYPHEN-MINUS\n002E..002F    ; Common # Po   [2] FULL STOP..SOLIDUS\n0030..0039    ; Common # Nd  [10] DIGIT ZERO..DIGIT NINE\n003A..003B    ; Common # Po   [2] COLON..SEMICOLON\n003C..003E    ; Common # Sm   [3] LESS-THAN SIGN..GREATER-THAN SIGN\n003F..0040    ; Common # Po   [2] QUESTION MARK..COMMERCIAL AT\n005B          ; Common # Ps       LEFT SQUARE BRACKET\n005C          ; Common # Po       REVERSE SOLIDUS\n005D          ; Common # Pe       RIGHT SQUARE BRACKET\n005E          ; Common # Sk       CIRCUMFLEX ACCENT\n005F          ; Common # Pc       LOW LINE\n0060          ; Common # Sk       GRAVE ACCENT\n007B          ; Common # Ps       LEFT CURLY BRACKET\n007C          ; Common # Sm       VERTICAL LINE\n007D          ; Common # Pe       RIGHT CURLY BRACKET\n007E          ; Common # Sm       TILDE\n007F..009F    ; Common # Cc  [33] <control-007F>..<control-009F>\n00A0          ; Common # Zs       NO-BREAK SPACE\n00A1          ; Common # Po       INVERTED EXCLAMATION MARK\n00A2..00A5    ; Common # Sc   [4] CENT SIGN..YEN SIGN\n00A6          ; Common # So       BROKEN BAR\n00A7          ; Common # Po       SECTION SIGN\n00A8          ; Common # Sk       DIAERESIS\n00A9          ; Common # So       COPYRIGHT SIGN\n00AB          ; Common # Pi       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\n00AC          ; Common # Sm       NOT SIGN\n00AD          ; Common # Cf       SOFT HYPHEN\n00AE          ; Common # So       REGISTERED SIGN\n00AF          ; Common # Sk       MACRON\n00B0          ; Common # So       DEGREE SIGN\n00B1          ; Common # Sm       PLUS-MINUS SIGN\n00B2..00B3    ; Common # No   [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE\n00B4          ; Common # Sk       ACUTE ACCENT\n00B5          ; Common # L&       MICRO SIGN\n00B6..00B7    ; Common # Po   [2] PILCROW SIGN..MIDDLE DOT\n00B8          ; Common # Sk       CEDILLA\n00B9          ; Common # No       SUPERSCRIPT ONE\n00BB          ; Common # Pf       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\n00BC..00BE    ; Common # No   [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS\n00BF          ; Common # Po       INVERTED QUESTION MARK\n00D7          ; Common # Sm       MULTIPLICATION SIGN\n00F7          ; Common # Sm       DIVISION SIGN\n02B9..02C1    ; Common # Lm   [9] MODIFIER LETTER PRIME..MODIFIER LETTER REVERSED GLOTTAL STOP\n02C2..02C5    ; Common # Sk   [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD\n02C6..02D1    ; Common # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON\n02D2..02DF    ; Common # Sk  [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT\n02E5..02E9    ; Common # Sk   [5] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER EXTRA-LOW TONE BAR\n02EC          ; Common # Lm       MODIFIER LETTER VOICING\n02ED          ; Common # Sk       MODIFIER LETTER UNASPIRATED\n02EE          ; Common # Lm       MODIFIER LETTER DOUBLE APOSTROPHE\n02EF..02FF    ; Common # Sk  [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW\n0374          ; Common # Lm       GREEK NUMERAL SIGN\n037E          ; Common # Po       GREEK QUESTION MARK\n0385          ; Common # Sk       GREEK DIALYTIKA TONOS\n0387          ; Common # Po       GREEK ANO TELEIA\n0605          ; Common # Cf       ARABIC NUMBER MARK ABOVE\n060C          ; Common # Po       ARABIC COMMA\n061B          ; Common # Po       ARABIC SEMICOLON\n061F          ; Common # Po       ARABIC QUESTION MARK\n0640          ; Common # Lm       ARABIC TATWEEL\n06DD          ; Common # Cf       ARABIC END OF AYAH\n08E2          ; Common # Cf       ARABIC DISPUTED END OF AYAH\n0964..0965    ; Common # Po   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA\n0E3F          ; Common # Sc       THAI CURRENCY SYMBOL BAHT\n0FD5..0FD8    ; Common # So   [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS\n10FB          ; Common # Po       GEORGIAN PARAGRAPH SEPARATOR\n16EB..16ED    ; Common # Po   [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION\n1735..1736    ; Common # Po   [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION\n1802..1803    ; Common # Po   [2] MONGOLIAN COMMA..MONGOLIAN FULL STOP\n1805          ; Common # Po       MONGOLIAN FOUR DOTS\n1CD3          ; Common # Po       VEDIC SIGN NIHSHVASA\n1CE1          ; Common # Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\n1CE9..1CEC    ; Common # Lo   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL\n1CEE..1CF3    ; Common # Lo   [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA\n1CF5..1CF6    ; Common # Lo   [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA\n1CF7          ; Common # Mc       VEDIC SIGN ATIKRAMA\n1CFA          ; Common # Lo       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA\n2000..200A    ; Common # Zs  [11] EN QUAD..HAIR SPACE\n200B          ; Common # Cf       ZERO WIDTH SPACE\n200E..200F    ; Common # Cf   [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK\n2010..2015    ; Common # Pd   [6] HYPHEN..HORIZONTAL BAR\n2016..2017    ; Common # Po   [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE\n2018          ; Common # Pi       LEFT SINGLE QUOTATION MARK\n2019          ; Common # Pf       RIGHT SINGLE QUOTATION MARK\n201A          ; Common # Ps       SINGLE LOW-9 QUOTATION MARK\n201B..201C    ; Common # Pi   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK\n201D          ; Common # Pf       RIGHT DOUBLE QUOTATION MARK\n201E          ; Common # Ps       DOUBLE LOW-9 QUOTATION MARK\n201F          ; Common # Pi       DOUBLE HIGH-REVERSED-9 QUOTATION MARK\n2020..2027    ; Common # Po   [8] DAGGER..HYPHENATION POINT\n2028          ; Common # Zl       LINE SEPARATOR\n2029          ; Common # Zp       PARAGRAPH SEPARATOR\n202A..202E    ; Common # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE\n202F          ; Common # Zs       NARROW NO-BREAK SPACE\n2030..2038    ; Common # Po   [9] PER MILLE SIGN..CARET\n2039          ; Common # Pi       SINGLE LEFT-POINTING ANGLE QUOTATION MARK\n203A          ; Common # Pf       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\n203B..203E    ; Common # Po   [4] REFERENCE MARK..OVERLINE\n203F..2040    ; Common # Pc   [2] UNDERTIE..CHARACTER TIE\n2041..2043    ; Common # Po   [3] CARET INSERTION POINT..HYPHEN BULLET\n2044          ; Common # Sm       FRACTION SLASH\n2045          ; Common # Ps       LEFT SQUARE BRACKET WITH QUILL\n2046          ; Common # Pe       RIGHT SQUARE BRACKET WITH QUILL\n2047..2051    ; Common # Po  [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY\n2052          ; Common # Sm       COMMERCIAL MINUS SIGN\n2053          ; Common # Po       SWUNG DASH\n2054          ; Common # Pc       INVERTED UNDERTIE\n2055..205E    ; Common # Po  [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS\n205F          ; Common # Zs       MEDIUM MATHEMATICAL SPACE\n2060..2064    ; Common # Cf   [5] WORD JOINER..INVISIBLE PLUS\n2066..206F    ; Common # Cf  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES\n2070          ; Common # No       SUPERSCRIPT ZERO\n2074..2079    ; Common # No   [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE\n207A..207C    ; Common # Sm   [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN\n207D          ; Common # Ps       SUPERSCRIPT LEFT PARENTHESIS\n207E          ; Common # Pe       SUPERSCRIPT RIGHT PARENTHESIS\n2080..2089    ; Common # No  [10] SUBSCRIPT ZERO..SUBSCRIPT NINE\n208A..208C    ; Common # Sm   [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN\n208D          ; Common # Ps       SUBSCRIPT LEFT PARENTHESIS\n208E          ; Common # Pe       SUBSCRIPT RIGHT PARENTHESIS\n20A0..20C1    ; Common # Sc  [34] EURO-CURRENCY SIGN..SAUDI RIYAL SIGN\n2100..2101    ; Common # So   [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT\n2102          ; Common # L&       DOUBLE-STRUCK CAPITAL C\n2103..2106    ; Common # So   [4] DEGREE CELSIUS..CADA UNA\n2107          ; Common # L&       EULER CONSTANT\n2108..2109    ; Common # So   [2] SCRUPLE..DEGREE FAHRENHEIT\n210A..2113    ; Common # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L\n2114          ; Common # So       L B BAR SYMBOL\n2115          ; Common # L&       DOUBLE-STRUCK CAPITAL N\n2116..2117    ; Common # So   [2] NUMERO SIGN..SOUND RECORDING COPYRIGHT\n2118          ; Common # Sm       SCRIPT CAPITAL P\n2119..211D    ; Common # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R\n211E..2123    ; Common # So   [6] PRESCRIPTION TAKE..VERSICLE\n2124          ; Common # L&       DOUBLE-STRUCK CAPITAL Z\n2125          ; Common # So       OUNCE SIGN\n2127          ; Common # So       INVERTED OHM SIGN\n2128          ; Common # L&       BLACK-LETTER CAPITAL Z\n2129          ; Common # So       TURNED GREEK SMALL LETTER IOTA\n212C..212D    ; Common # L&   [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C\n212E          ; Common # So       ESTIMATED SYMBOL\n212F..2131    ; Common # L&   [3] SCRIPT SMALL E..SCRIPT CAPITAL F\n2133..2134    ; Common # L&   [2] SCRIPT CAPITAL M..SCRIPT SMALL O\n2135..2138    ; Common # Lo   [4] ALEF SYMBOL..DALET SYMBOL\n2139          ; Common # L&       INFORMATION SOURCE\n213A..213B    ; Common # So   [2] ROTATED CAPITAL Q..FACSIMILE SIGN\n213C..213F    ; Common # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI\n2140..2144    ; Common # Sm   [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y\n2145..2149    ; Common # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J\n214A          ; Common # So       PROPERTY LINE\n214B          ; Common # Sm       TURNED AMPERSAND\n214C..214D    ; Common # So   [2] PER SIGN..AKTIESELSKAB\n214F          ; Common # So       SYMBOL FOR SAMARITAN SOURCE\n2150..215F    ; Common # No  [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE\n2189          ; Common # No       VULGAR FRACTION ZERO THIRDS\n218A..218B    ; Common # So   [2] TURNED DIGIT TWO..TURNED DIGIT THREE\n2190..2194    ; Common # Sm   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW\n2195..2199    ; Common # So   [5] UP DOWN ARROW..SOUTH WEST ARROW\n219A..219B    ; Common # Sm   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE\n219C..219F    ; Common # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW\n21A0          ; Common # Sm       RIGHTWARDS TWO HEADED ARROW\n21A1..21A2    ; Common # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL\n21A3          ; Common # Sm       RIGHTWARDS ARROW WITH TAIL\n21A4..21A5    ; Common # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR\n21A6          ; Common # Sm       RIGHTWARDS ARROW FROM BAR\n21A7..21AD    ; Common # So   [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW\n21AE          ; Common # Sm       LEFT RIGHT ARROW WITH STROKE\n21AF..21CD    ; Common # So  [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE\n21CE..21CF    ; Common # Sm   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE\n21D0..21D1    ; Common # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW\n21D2          ; Common # Sm       RIGHTWARDS DOUBLE ARROW\n21D3          ; Common # So       DOWNWARDS DOUBLE ARROW\n21D4          ; Common # Sm       LEFT RIGHT DOUBLE ARROW\n21D5..21F3    ; Common # So  [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW\n21F4..22FF    ; Common # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP\n2300..2307    ; Common # So   [8] DIAMETER SIGN..WAVY LINE\n2308          ; Common # Ps       LEFT CEILING\n2309          ; Common # Pe       RIGHT CEILING\n230A          ; Common # Ps       LEFT FLOOR\n230B          ; Common # Pe       RIGHT FLOOR\n230C..231F    ; Common # So  [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER\n2320..2321    ; Common # Sm   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL\n2322..2328    ; Common # So   [7] FROWN..KEYBOARD\n2329          ; Common # Ps       LEFT-POINTING ANGLE BRACKET\n232A          ; Common # Pe       RIGHT-POINTING ANGLE BRACKET\n232B..237B    ; Common # So  [81] ERASE TO THE LEFT..NOT CHECK MARK\n237C          ; Common # Sm       RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW\n237D..239A    ; Common # So  [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL\n239B..23B3    ; Common # Sm  [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM\n23B4..23DB    ; Common # So  [40] TOP SQUARE BRACKET..FUSE\n23DC..23E1    ; Common # Sm   [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET\n23E2..2429    ; Common # So  [72] WHITE TRAPEZIUM..SYMBOL FOR DELETE MEDIUM SHADE FORM\n2440..244A    ; Common # So  [11] OCR HOOK..OCR DOUBLE BACKSLASH\n2460..249B    ; Common # No  [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP\n249C..24E9    ; Common # So  [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z\n24EA..24FF    ; Common # No  [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO\n2500..25B6    ; Common # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE\n25B7          ; Common # Sm       WHITE RIGHT-POINTING TRIANGLE\n25B8..25C0    ; Common # So   [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE\n25C1          ; Common # Sm       WHITE LEFT-POINTING TRIANGLE\n25C2..25F7    ; Common # So  [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT\n25F8..25FF    ; Common # Sm   [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE\n2600..266E    ; Common # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN\n266F          ; Common # Sm       MUSIC SHARP SIGN\n2670..2767    ; Common # So [248] WEST SYRIAC CROSS..ROTATED FLORAL HEART BULLET\n2768          ; Common # Ps       MEDIUM LEFT PARENTHESIS ORNAMENT\n2769          ; Common # Pe       MEDIUM RIGHT PARENTHESIS ORNAMENT\n276A          ; Common # Ps       MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT\n276B          ; Common # Pe       MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT\n276C          ; Common # Ps       MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT\n276D          ; Common # Pe       MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT\n276E          ; Common # Ps       HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT\n276F          ; Common # Pe       HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT\n2770          ; Common # Ps       HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT\n2771          ; Common # Pe       HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT\n2772          ; Common # Ps       LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT\n2773          ; Common # Pe       LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT\n2774          ; Common # Ps       MEDIUM LEFT CURLY BRACKET ORNAMENT\n2775          ; Common # Pe       MEDIUM RIGHT CURLY BRACKET ORNAMENT\n2776..2793    ; Common # No  [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN\n2794..27BF    ; Common # So  [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP\n27C0..27C4    ; Common # Sm   [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET\n27C5          ; Common # Ps       LEFT S-SHAPED BAG DELIMITER\n27C6          ; Common # Pe       RIGHT S-SHAPED BAG DELIMITER\n27C7..27E5    ; Common # Sm  [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK\n27E6          ; Common # Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET\n27E7          ; Common # Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET\n27E8          ; Common # Ps       MATHEMATICAL LEFT ANGLE BRACKET\n27E9          ; Common # Pe       MATHEMATICAL RIGHT ANGLE BRACKET\n27EA          ; Common # Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET\n27EB          ; Common # Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET\n27EC          ; Common # Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET\n27ED          ; Common # Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET\n27EE          ; Common # Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS\n27EF          ; Common # Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS\n27F0..27FF    ; Common # Sm  [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW\n2900..2982    ; Common # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON\n2983          ; Common # Ps       LEFT WHITE CURLY BRACKET\n2984          ; Common # Pe       RIGHT WHITE CURLY BRACKET\n2985          ; Common # Ps       LEFT WHITE PARENTHESIS\n2986          ; Common # Pe       RIGHT WHITE PARENTHESIS\n2987          ; Common # Ps       Z NOTATION LEFT IMAGE BRACKET\n2988          ; Common # Pe       Z NOTATION RIGHT IMAGE BRACKET\n2989          ; Common # Ps       Z NOTATION LEFT BINDING BRACKET\n298A          ; Common # Pe       Z NOTATION RIGHT BINDING BRACKET\n298B          ; Common # Ps       LEFT SQUARE BRACKET WITH UNDERBAR\n298C          ; Common # Pe       RIGHT SQUARE BRACKET WITH UNDERBAR\n298D          ; Common # Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER\n298E          ; Common # Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n298F          ; Common # Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER\n2990          ; Common # Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER\n2991          ; Common # Ps       LEFT ANGLE BRACKET WITH DOT\n2992          ; Common # Pe       RIGHT ANGLE BRACKET WITH DOT\n2993          ; Common # Ps       LEFT ARC LESS-THAN BRACKET\n2994          ; Common # Pe       RIGHT ARC GREATER-THAN BRACKET\n2995          ; Common # Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET\n2996          ; Common # Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET\n2997          ; Common # Ps       LEFT BLACK TORTOISE SHELL BRACKET\n2998          ; Common # Pe       RIGHT BLACK TORTOISE SHELL BRACKET\n2999..29D7    ; Common # Sm  [63] DOTTED FENCE..BLACK HOURGLASS\n29D8          ; Common # Ps       LEFT WIGGLY FENCE\n29D9          ; Common # Pe       RIGHT WIGGLY FENCE\n29DA          ; Common # Ps       LEFT DOUBLE WIGGLY FENCE\n29DB          ; Common # Pe       RIGHT DOUBLE WIGGLY FENCE\n29DC..29FB    ; Common # Sm  [32] INCOMPLETE INFINITY..TRIPLE PLUS\n29FC          ; Common # Ps       LEFT-POINTING CURVED ANGLE BRACKET\n29FD          ; Common # Pe       RIGHT-POINTING CURVED ANGLE BRACKET\n29FE..2AFF    ; Common # Sm [258] TINY..N-ARY WHITE VERTICAL BAR\n2B00..2B2F    ; Common # So  [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE\n2B30..2B44    ; Common # Sm  [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET\n2B45..2B46    ; Common # So   [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW\n2B47..2B4C    ; Common # Sm   [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR\n2B4D..2B73    ; Common # So  [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR\n2B76..2BFF    ; Common # So [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL\n2E00..2E01    ; Common # Po   [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER\n2E02          ; Common # Pi       LEFT SUBSTITUTION BRACKET\n2E03          ; Common # Pf       RIGHT SUBSTITUTION BRACKET\n2E04          ; Common # Pi       LEFT DOTTED SUBSTITUTION BRACKET\n2E05          ; Common # Pf       RIGHT DOTTED SUBSTITUTION BRACKET\n2E06..2E08    ; Common # Po   [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER\n2E09          ; Common # Pi       LEFT TRANSPOSITION BRACKET\n2E0A          ; Common # Pf       RIGHT TRANSPOSITION BRACKET\n2E0B          ; Common # Po       RAISED SQUARE\n2E0C          ; Common # Pi       LEFT RAISED OMISSION BRACKET\n2E0D          ; Common # Pf       RIGHT RAISED OMISSION BRACKET\n2E0E..2E16    ; Common # Po   [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE\n2E17          ; Common # Pd       DOUBLE OBLIQUE HYPHEN\n2E18..2E19    ; Common # Po   [2] INVERTED INTERROBANG..PALM BRANCH\n2E1A          ; Common # Pd       HYPHEN WITH DIAERESIS\n2E1B          ; Common # Po       TILDE WITH RING ABOVE\n2E1C          ; Common # Pi       LEFT LOW PARAPHRASE BRACKET\n2E1D          ; Common # Pf       RIGHT LOW PARAPHRASE BRACKET\n2E1E..2E1F    ; Common # Po   [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW\n2E20          ; Common # Pi       LEFT VERTICAL BAR WITH QUILL\n2E21          ; Common # Pf       RIGHT VERTICAL BAR WITH QUILL\n2E22          ; Common # Ps       TOP LEFT HALF BRACKET\n2E23          ; Common # Pe       TOP RIGHT HALF BRACKET\n2E24          ; Common # Ps       BOTTOM LEFT HALF BRACKET\n2E25          ; Common # Pe       BOTTOM RIGHT HALF BRACKET\n2E26          ; Common # Ps       LEFT SIDEWAYS U BRACKET\n2E27          ; Common # Pe       RIGHT SIDEWAYS U BRACKET\n2E28          ; Common # Ps       LEFT DOUBLE PARENTHESIS\n2E29          ; Common # Pe       RIGHT DOUBLE PARENTHESIS\n2E2A..2E2E    ; Common # Po   [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK\n2E2F          ; Common # Lm       VERTICAL TILDE\n2E30..2E39    ; Common # Po  [10] RING POINT..TOP HALF SECTION SIGN\n2E3A..2E3B    ; Common # Pd   [2] TWO-EM DASH..THREE-EM DASH\n2E3C..2E3F    ; Common # Po   [4] STENOGRAPHIC FULL STOP..CAPITULUM\n2E40          ; Common # Pd       DOUBLE HYPHEN\n2E41          ; Common # Po       REVERSED COMMA\n2E42          ; Common # Ps       DOUBLE LOW-REVERSED-9 QUOTATION MARK\n2E43..2E4F    ; Common # Po  [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER\n2E50..2E51    ; Common # So   [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR\n2E52..2E54    ; Common # Po   [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK\n2E55          ; Common # Ps       LEFT SQUARE BRACKET WITH STROKE\n2E56          ; Common # Pe       RIGHT SQUARE BRACKET WITH STROKE\n2E57          ; Common # Ps       LEFT SQUARE BRACKET WITH DOUBLE STROKE\n2E58          ; Common # Pe       RIGHT SQUARE BRACKET WITH DOUBLE STROKE\n2E59          ; Common # Ps       TOP HALF LEFT PARENTHESIS\n2E5A          ; Common # Pe       TOP HALF RIGHT PARENTHESIS\n2E5B          ; Common # Ps       BOTTOM HALF LEFT PARENTHESIS\n2E5C          ; Common # Pe       BOTTOM HALF RIGHT PARENTHESIS\n2E5D          ; Common # Pd       OBLIQUE HYPHEN\n2FF0..2FFF    ; Common # So  [16] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION\n3000          ; Common # Zs       IDEOGRAPHIC SPACE\n3001..3003    ; Common # Po   [3] IDEOGRAPHIC COMMA..DITTO MARK\n3004          ; Common # So       JAPANESE INDUSTRIAL STANDARD SYMBOL\n3006          ; Common # Lo       IDEOGRAPHIC CLOSING MARK\n3008          ; Common # Ps       LEFT ANGLE BRACKET\n3009          ; Common # Pe       RIGHT ANGLE BRACKET\n300A          ; Common # Ps       LEFT DOUBLE ANGLE BRACKET\n300B          ; Common # Pe       RIGHT DOUBLE ANGLE BRACKET\n300C          ; Common # Ps       LEFT CORNER BRACKET\n300D          ; Common # Pe       RIGHT CORNER BRACKET\n300E          ; Common # Ps       LEFT WHITE CORNER BRACKET\n300F          ; Common # Pe       RIGHT WHITE CORNER BRACKET\n3010          ; Common # Ps       LEFT BLACK LENTICULAR BRACKET\n3011          ; Common # Pe       RIGHT BLACK LENTICULAR BRACKET\n3012..3013    ; Common # So   [2] POSTAL MARK..GETA MARK\n3014          ; Common # Ps       LEFT TORTOISE SHELL BRACKET\n3015          ; Common # Pe       RIGHT TORTOISE SHELL BRACKET\n3016          ; Common # Ps       LEFT WHITE LENTICULAR BRACKET\n3017          ; Common # Pe       RIGHT WHITE LENTICULAR BRACKET\n3018          ; Common # Ps       LEFT WHITE TORTOISE SHELL BRACKET\n3019          ; Common # Pe       RIGHT WHITE TORTOISE SHELL BRACKET\n301A          ; Common # Ps       LEFT WHITE SQUARE BRACKET\n301B          ; Common # Pe       RIGHT WHITE SQUARE BRACKET\n301C          ; Common # Pd       WAVE DASH\n301D          ; Common # Ps       REVERSED DOUBLE PRIME QUOTATION MARK\n301E..301F    ; Common # Pe   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK\n3020          ; Common # So       POSTAL MARK FACE\n3030          ; Common # Pd       WAVY DASH\n3031..3035    ; Common # Lm   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF\n3036..3037    ; Common # So   [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL\n303C          ; Common # Lo       MASU MARK\n303D          ; Common # Po       PART ALTERNATION MARK\n303E..303F    ; Common # So   [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE\n309B..309C    ; Common # Sk   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n30A0          ; Common # Pd       KATAKANA-HIRAGANA DOUBLE HYPHEN\n30FB          ; Common # Po       KATAKANA MIDDLE DOT\n30FC          ; Common # Lm       KATAKANA-HIRAGANA PROLONGED SOUND MARK\n3190..3191    ; Common # So   [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK\n3192..3195    ; Common # No   [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK\n3196..319F    ; Common # So  [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK\n31C0..31E5    ; Common # So  [38] CJK STROKE T..CJK STROKE SZP\n31EF          ; Common # So       IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION\n3220..3229    ; Common # No  [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN\n322A..3247    ; Common # So  [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO\n3248..324F    ; Common # No   [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE\n3250          ; Common # So       PARTNERSHIP SIGN\n3251..325F    ; Common # No  [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE\n327F          ; Common # So       KOREAN STANDARD SYMBOL\n3280..3289    ; Common # No  [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN\n328A..32B0    ; Common # So  [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT\n32B1..32BF    ; Common # No  [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY\n32C0..32CF    ; Common # So  [16] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..LIMITED LIABILITY SIGN\n32FF          ; Common # So       SQUARE ERA NAME REIWA\n3358..33FF    ; Common # So [168] IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO..SQUARE GAL\n4DC0..4DFF    ; Common # So  [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION\nA700..A716    ; Common # Sk  [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR\nA717..A71F    ; Common # Lm   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK\nA720..A721    ; Common # Sk   [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE\nA788          ; Common # Lm       MODIFIER LETTER LOW CIRCUMFLEX ACCENT\nA789..A78A    ; Common # Sk   [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN\nA830..A835    ; Common # No   [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS\nA836..A837    ; Common # So   [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK\nA838          ; Common # Sc       NORTH INDIC RUPEE MARK\nA839          ; Common # So       NORTH INDIC QUANTITY MARK\nA92E          ; Common # Po       KAYAH LI SIGN CWI\nA9CF          ; Common # Lm       JAVANESE PANGRANGKEP\nAB5B          ; Common # Sk       MODIFIER BREVE WITH INVERTED BREVE\nAB6A..AB6B    ; Common # Sk   [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK\nFD3E          ; Common # Pe       ORNATE LEFT PARENTHESIS\nFD3F          ; Common # Ps       ORNATE RIGHT PARENTHESIS\nFE10..FE16    ; Common # Po   [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK\nFE17          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET\nFE18          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET\nFE19          ; Common # Po       PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS\nFE30          ; Common # Po       PRESENTATION FORM FOR VERTICAL TWO DOT LEADER\nFE31..FE32    ; Common # Pd   [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH\nFE33..FE34    ; Common # Pc   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE\nFE35          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS\nFE36          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS\nFE37          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET\nFE38          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET\nFE39          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET\nFE3A          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET\nFE3B          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET\nFE3C          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET\nFE3D          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET\nFE3E          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET\nFE3F          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET\nFE40          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET\nFE41          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET\nFE42          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET\nFE43          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET\nFE44          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET\nFE45..FE46    ; Common # Po   [2] SESAME DOT..WHITE SESAME DOT\nFE47          ; Common # Ps       PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET\nFE48          ; Common # Pe       PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET\nFE49..FE4C    ; Common # Po   [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE\nFE4D..FE4F    ; Common # Pc   [3] DASHED LOW LINE..WAVY LOW LINE\nFE50..FE52    ; Common # Po   [3] SMALL COMMA..SMALL FULL STOP\nFE54..FE57    ; Common # Po   [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK\nFE58          ; Common # Pd       SMALL EM DASH\nFE59          ; Common # Ps       SMALL LEFT PARENTHESIS\nFE5A          ; Common # Pe       SMALL RIGHT PARENTHESIS\nFE5B          ; Common # Ps       SMALL LEFT CURLY BRACKET\nFE5C          ; Common # Pe       SMALL RIGHT CURLY BRACKET\nFE5D          ; Common # Ps       SMALL LEFT TORTOISE SHELL BRACKET\nFE5E          ; Common # Pe       SMALL RIGHT TORTOISE SHELL BRACKET\nFE5F..FE61    ; Common # Po   [3] SMALL NUMBER SIGN..SMALL ASTERISK\nFE62          ; Common # Sm       SMALL PLUS SIGN\nFE63          ; Common # Pd       SMALL HYPHEN-MINUS\nFE64..FE66    ; Common # Sm   [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN\nFE68          ; Common # Po       SMALL REVERSE SOLIDUS\nFE69          ; Common # Sc       SMALL DOLLAR SIGN\nFE6A..FE6B    ; Common # Po   [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT\nFEFF          ; Common # Cf       ZERO WIDTH NO-BREAK SPACE\nFF01..FF03    ; Common # Po   [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN\nFF04          ; Common # Sc       FULLWIDTH DOLLAR SIGN\nFF05..FF07    ; Common # Po   [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE\nFF08          ; Common # Ps       FULLWIDTH LEFT PARENTHESIS\nFF09          ; Common # Pe       FULLWIDTH RIGHT PARENTHESIS\nFF0A          ; Common # Po       FULLWIDTH ASTERISK\nFF0B          ; Common # Sm       FULLWIDTH PLUS SIGN\nFF0C          ; Common # Po       FULLWIDTH COMMA\nFF0D          ; Common # Pd       FULLWIDTH HYPHEN-MINUS\nFF0E..FF0F    ; Common # Po   [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS\nFF10..FF19    ; Common # Nd  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE\nFF1A..FF1B    ; Common # Po   [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON\nFF1C..FF1E    ; Common # Sm   [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN\nFF1F..FF20    ; Common # Po   [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT\nFF3B          ; Common # Ps       FULLWIDTH LEFT SQUARE BRACKET\nFF3C          ; Common # Po       FULLWIDTH REVERSE SOLIDUS\nFF3D          ; Common # Pe       FULLWIDTH RIGHT SQUARE BRACKET\nFF3E          ; Common # Sk       FULLWIDTH CIRCUMFLEX ACCENT\nFF3F          ; Common # Pc       FULLWIDTH LOW LINE\nFF40          ; Common # Sk       FULLWIDTH GRAVE ACCENT\nFF5B          ; Common # Ps       FULLWIDTH LEFT CURLY BRACKET\nFF5C          ; Common # Sm       FULLWIDTH VERTICAL LINE\nFF5D          ; Common # Pe       FULLWIDTH RIGHT CURLY BRACKET\nFF5E          ; Common # Sm       FULLWIDTH TILDE\nFF5F          ; Common # Ps       FULLWIDTH LEFT WHITE PARENTHESIS\nFF60          ; Common # Pe       FULLWIDTH RIGHT WHITE PARENTHESIS\nFF61          ; Common # Po       HALFWIDTH IDEOGRAPHIC FULL STOP\nFF62          ; Common # Ps       HALFWIDTH LEFT CORNER BRACKET\nFF63          ; Common # Pe       HALFWIDTH RIGHT CORNER BRACKET\nFF64..FF65    ; Common # Po   [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT\nFF70          ; Common # Lm       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK\nFF9E..FF9F    ; Common # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\nFFE0..FFE1    ; Common # Sc   [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN\nFFE2          ; Common # Sm       FULLWIDTH NOT SIGN\nFFE3          ; Common # Sk       FULLWIDTH MACRON\nFFE4          ; Common # So       FULLWIDTH BROKEN BAR\nFFE5..FFE6    ; Common # Sc   [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN\nFFE8          ; Common # So       HALFWIDTH FORMS LIGHT VERTICAL\nFFE9..FFEC    ; Common # Sm   [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW\nFFED..FFEE    ; Common # So   [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE\nFFF9..FFFB    ; Common # Cf   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR\nFFFC..FFFD    ; Common # So   [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER\n10100..10102  ; Common # Po   [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK\n10107..10133  ; Common # No  [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND\n10137..1013F  ; Common # So   [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT\n10190..1019C  ; Common # So  [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL\n101D0..101FC  ; Common # So  [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND\n102E1..102FB  ; Common # No  [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED\n1BCA0..1BCA3  ; Common # Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP\n1CC00..1CCEF  ; Common # So [240] UP-POINTING GO-KART..OUTLINED LATIN CAPITAL LETTER Z\n1CCF0..1CCF9  ; Common # Nd  [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE\n1CCFA..1CCFC  ; Common # So   [3] SNAKE SYMBOL..NOSE SYMBOL\n1CD00..1CEB3  ; Common # So [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET\n1CEBA..1CED0  ; Common # So  [23] FRAGILE SYMBOL..LEUKOTHEA\n1CEE0..1CEEF  ; Common # So  [16] GEOMANTIC FIGURE POPULUS..GEOMANTIC FIGURE VIA\n1CEF0         ; Common # Sm       MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR\n1CF50..1CFC3  ; Common # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK\n1D000..1D0F5  ; Common # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO\n1D100..1D126  ; Common # So  [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2\n1D129..1D164  ; Common # So  [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE\n1D165..1D166  ; Common # Mc   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\n1D16A..1D16C  ; Common # So   [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3\n1D16D..1D172  ; Common # Mc   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5\n1D173..1D17A  ; Common # Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE\n1D183..1D184  ; Common # So   [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN\n1D18C..1D1A9  ; Common # So  [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH\n1D1AE..1D1EA  ; Common # So  [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON\n1D2C0..1D2D3  ; Common # No  [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN\n1D2E0..1D2F3  ; Common # No  [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN\n1D300..1D356  ; Common # So  [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING\n1D360..1D378  ; Common # No  [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE\n1D400..1D454  ; Common # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G\n1D456..1D49C  ; Common # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A\n1D49E..1D49F  ; Common # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D\n1D4A2         ; Common # L&       MATHEMATICAL SCRIPT CAPITAL G\n1D4A5..1D4A6  ; Common # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K\n1D4A9..1D4AC  ; Common # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q\n1D4AE..1D4B9  ; Common # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D\n1D4BB         ; Common # L&       MATHEMATICAL SCRIPT SMALL F\n1D4BD..1D4C3  ; Common # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N\n1D4C5..1D505  ; Common # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B\n1D507..1D50A  ; Common # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G\n1D50D..1D514  ; Common # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q\n1D516..1D51C  ; Common # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y\n1D51E..1D539  ; Common # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B\n1D53B..1D53E  ; Common # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G\n1D540..1D544  ; Common # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M\n1D546         ; Common # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O\n1D54A..1D550  ; Common # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y\n1D552..1D6A5  ; Common # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J\n1D6A8..1D6C0  ; Common # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA\n1D6C1         ; Common # Sm       MATHEMATICAL BOLD NABLA\n1D6C2..1D6DA  ; Common # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA\n1D6DB         ; Common # Sm       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL\n1D6DC..1D6FA  ; Common # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA\n1D6FB         ; Common # Sm       MATHEMATICAL ITALIC NABLA\n1D6FC..1D714  ; Common # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA\n1D715         ; Common # Sm       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL\n1D716..1D734  ; Common # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA\n1D735         ; Common # Sm       MATHEMATICAL BOLD ITALIC NABLA\n1D736..1D74E  ; Common # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA\n1D74F         ; Common # Sm       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL\n1D750..1D76E  ; Common # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA\n1D76F         ; Common # Sm       MATHEMATICAL SANS-SERIF BOLD NABLA\n1D770..1D788  ; Common # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA\n1D789         ; Common # Sm       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL\n1D78A..1D7A8  ; Common # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA\n1D7A9         ; Common # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA\n1D7AA..1D7C2  ; Common # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA\n1D7C3         ; Common # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL\n1D7C4..1D7CB  ; Common # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA\n1D7CE..1D7FF  ; Common # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE\n1EC71..1ECAB  ; Common # No  [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE\n1ECAC         ; Common # So       INDIC SIYAQ PLACEHOLDER\n1ECAD..1ECAF  ; Common # No   [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS\n1ECB0         ; Common # Sc       INDIC SIYAQ RUPEE MARK\n1ECB1..1ECB4  ; Common # No   [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK\n1ED01..1ED2D  ; Common # No  [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND\n1ED2E         ; Common # So       OTTOMAN SIYAQ MARRATAN\n1ED2F..1ED3D  ; Common # No  [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH\n1F000..1F02B  ; Common # So  [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK\n1F030..1F093  ; Common # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06\n1F0A0..1F0AE  ; Common # So  [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES\n1F0B1..1F0BF  ; Common # So  [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER\n1F0C1..1F0CF  ; Common # So  [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER\n1F0D1..1F0F5  ; Common # So  [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21\n1F100..1F10C  ; Common # No  [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO\n1F10D..1F1AD  ; Common # So [161] CIRCLED ZERO WITH SLASH..MASK WORK SYMBOL\n1F1E6..1F1FF  ; Common # So  [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z\n1F201..1F202  ; Common # So   [2] SQUARED KATAKANA KOKO..SQUARED KATAKANA SA\n1F210..1F23B  ; Common # So  [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D\n1F240..1F248  ; Common # So   [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557\n1F250..1F251  ; Common # So   [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT\n1F260..1F265  ; Common # So   [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI\n1F300..1F3FA  ; Common # So [251] CYCLONE..AMPHORA\n1F3FB..1F3FF  ; Common # Sk   [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6\n1F400..1F6D8  ; Common # So [729] RAT..LANDSLIDE\n1F6DC..1F6EC  ; Common # So  [17] WIRELESS..AIRPLANE ARRIVING\n1F6F0..1F6FC  ; Common # So  [13] SATELLITE..ROLLER SKATE\n1F700..1F7D9  ; Common # So [218] ALCHEMICAL SYMBOL FOR QUINTESSENCE..NINE POINTED WHITE STAR\n1F7E0..1F7EB  ; Common # So  [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE\n1F7F0         ; Common # So       HEAVY EQUALS SIGN\n1F800..1F80B  ; Common # So  [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD\n1F810..1F847  ; Common # So  [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW\n1F850..1F859  ; Common # So  [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW\n1F860..1F887  ; Common # So  [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW\n1F890..1F8AD  ; Common # So  [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS\n1F8B0..1F8BB  ; Common # So  [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR\n1F8C0..1F8C1  ; Common # So   [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW\n1F8D0..1F8D8  ; Common # Sm   [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE\n1F900..1FA57  ; Common # So [344] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS ALFIL\n1FA60..1FA6D  ; Common # So  [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER\n1FA70..1FA7C  ; Common # So  [13] BALLET SHOES..CRUTCH\n1FA80..1FA8A  ; Common # So  [11] YO-YO..TROMBONE\n1FA8E..1FAC6  ; Common # So  [57] TREASURE CHEST..FINGERPRINT\n1FAC8         ; Common # So       HAIRY CREATURE\n1FACD..1FADC  ; Common # So  [16] ORCA..ROOT VEGETABLE\n1FADF..1FAEA  ; Common # So  [12] SPLATTER..DISTORTED FACE\n1FAEF..1FAF8  ; Common # So  [10] FIGHT CLOUD..RIGHTWARDS PUSHING HAND\n1FB00..1FB92  ; Common # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK\n1FB94..1FBEF  ; Common # So  [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE\n1FBF0..1FBF9  ; Common # Nd  [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE\n1FBFA         ; Common # So       ALARM BELL SYMBOL\nE0001         ; Common # Cf       LANGUAGE TAG\nE0020..E007F  ; Common # Cf  [96] TAG SPACE..CANCEL TAG\n\n# Total code points: 9123\n\n# ================================================\n\n0041..005A    ; Latin # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z\n0061..007A    ; Latin # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z\n00AA          ; Latin # Lo       FEMININE ORDINAL INDICATOR\n00BA          ; Latin # Lo       MASCULINE ORDINAL INDICATOR\n00C0..00D6    ; Latin # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS\n00D8..00F6    ; Latin # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS\n00F8..01BA    ; Latin # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL\n01BB          ; Latin # Lo       LATIN LETTER TWO WITH STROKE\n01BC..01BF    ; Latin # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN\n01C0..01C3    ; Latin # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK\n01C4..0293    ; Latin # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL\n0294..0295    ; Latin # Lo   [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE\n0296..02AF    ; Latin # L&  [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL\n02B0..02B8    ; Latin # Lm   [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y\n02E0..02E4    ; Latin # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP\n1D00..1D25    ; Latin # L&  [38] LATIN LETTER SMALL CAPITAL A..LATIN LETTER AIN\n1D2C..1D5C    ; Latin # Lm  [49] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL AIN\n1D62..1D65    ; Latin # Lm   [4] LATIN SUBSCRIPT SMALL LETTER I..LATIN SUBSCRIPT SMALL LETTER V\n1D6B..1D77    ; Latin # L&  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G\n1D79..1D9A    ; Latin # L&  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK\n1D9B..1DBE    ; Latin # Lm  [36] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL EZH\n1E00..1EFF    ; Latin # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP\n2071          ; Latin # Lm       SUPERSCRIPT LATIN SMALL LETTER I\n207F          ; Latin # Lm       SUPERSCRIPT LATIN SMALL LETTER N\n2090..209C    ; Latin # Lm  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T\n212A..212B    ; Latin # L&   [2] KELVIN SIGN..ANGSTROM SIGN\n2132          ; Latin # L&       TURNED CAPITAL F\n214E          ; Latin # L&       TURNED SMALL F\n2160..2182    ; Latin # Nl  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND\n2183..2184    ; Latin # L&   [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C\n2185..2188    ; Latin # Nl   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND\n2C60..2C7B    ; Latin # L&  [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E\n2C7C..2C7D    ; Latin # Lm   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V\n2C7E..2C7F    ; Latin # L&   [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL\nA722..A76F    ; Latin # L&  [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON\nA770          ; Latin # Lm       MODIFIER LETTER US\nA771..A787    ; Latin # L&  [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T\nA78B..A78E    ; Latin # L&   [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT\nA78F          ; Latin # Lo       LATIN LETTER SINOLOGICAL DOT\nA790..A7DC    ; Latin # L&  [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE\nA7F1..A7F4    ; Latin # Lm   [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q\nA7F5..A7F6    ; Latin # L&   [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H\nA7F7          ; Latin # Lo       LATIN EPIGRAPHIC LETTER SIDEWAYS I\nA7F8..A7F9    ; Latin # Lm   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE\nA7FA          ; Latin # L&       LATIN LETTER SMALL CAPITAL TURNED M\nA7FB..A7FF    ; Latin # Lo   [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M\nAB30..AB5A    ; Latin # L&  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG\nAB5C..AB5F    ; Latin # Lm   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK\nAB60..AB64    ; Latin # L&   [5] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER INVERTED ALPHA\nAB66..AB68    ; Latin # L&   [3] LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE\nAB69          ; Latin # Lm       MODIFIER LETTER SMALL TURNED W\nFB00..FB06    ; Latin # L&   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST\nFF21..FF3A    ; Latin # L&  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z\nFF41..FF5A    ; Latin # L&  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z\n10780..10785  ; Latin # Lm   [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK\n10787..107B0  ; Latin # Lm  [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK\n107B2..107BA  ; Latin # Lm   [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL\n1DF00..1DF09  ; Latin # L&  [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK\n1DF0A         ; Latin # Lo       LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK\n1DF0B..1DF1E  ; Latin # L&  [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL\n1DF25..1DF2A  ; Latin # L&   [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK\n\n# Total code points: 1492\n\n# ================================================\n\n0370..0373    ; Greek # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI\n0375          ; Greek # Sk       GREEK LOWER NUMERAL SIGN\n0376..0377    ; Greek # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA\n037A          ; Greek # Lm       GREEK YPOGEGRAMMENI\n037B..037D    ; Greek # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL\n037F          ; Greek # L&       GREEK CAPITAL LETTER YOT\n0384          ; Greek # Sk       GREEK TONOS\n0386          ; Greek # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS\n0388..038A    ; Greek # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS\n038C          ; Greek # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS\n038E..03A1    ; Greek # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO\n03A3..03E1    ; Greek # L&  [63] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER SAMPI\n03F0..03F5    ; Greek # L&   [6] GREEK KAPPA SYMBOL..GREEK LUNATE EPSILON SYMBOL\n03F6          ; Greek # Sm       GREEK REVERSED LUNATE EPSILON SYMBOL\n03F7..03FF    ; Greek # L&   [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL\n1D26..1D2A    ; Greek # L&   [5] GREEK LETTER SMALL CAPITAL GAMMA..GREEK LETTER SMALL CAPITAL PSI\n1D5D..1D61    ; Greek # Lm   [5] MODIFIER LETTER SMALL BETA..MODIFIER LETTER SMALL CHI\n1D66..1D6A    ; Greek # Lm   [5] GREEK SUBSCRIPT SMALL LETTER BETA..GREEK SUBSCRIPT SMALL LETTER CHI\n1DBF          ; Greek # Lm       MODIFIER LETTER SMALL THETA\n1F00..1F15    ; Greek # L&  [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA\n1F18..1F1D    ; Greek # L&   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA\n1F20..1F45    ; Greek # L&  [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA\n1F48..1F4D    ; Greek # L&   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA\n1F50..1F57    ; Greek # L&   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI\n1F59          ; Greek # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA\n1F5B          ; Greek # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA\n1F5D          ; Greek # L&       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA\n1F5F..1F7D    ; Greek # L&  [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA\n1F80..1FB4    ; Greek # L&  [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI\n1FB6..1FBC    ; Greek # L&   [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI\n1FBD          ; Greek # Sk       GREEK KORONIS\n1FBE          ; Greek # L&       GREEK PROSGEGRAMMENI\n1FBF..1FC1    ; Greek # Sk   [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI\n1FC2..1FC4    ; Greek # L&   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI\n1FC6..1FCC    ; Greek # L&   [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI\n1FCD..1FCF    ; Greek # Sk   [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI\n1FD0..1FD3    ; Greek # L&   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA\n1FD6..1FDB    ; Greek # L&   [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA\n1FDD..1FDF    ; Greek # Sk   [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI\n1FE0..1FEC    ; Greek # L&  [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA\n1FED..1FEF    ; Greek # Sk   [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA\n1FF2..1FF4    ; Greek # L&   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI\n1FF6..1FFC    ; Greek # L&   [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI\n1FFD..1FFE    ; Greek # Sk   [2] GREEK OXIA..GREEK DASIA\n2126          ; Greek # L&       OHM SIGN\nAB65          ; Greek # L&       GREEK LETTER SMALL CAPITAL OMEGA\n10140..10174  ; Greek # Nl  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS\n10175..10178  ; Greek # No   [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN\n10179..10189  ; Greek # So  [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN\n1018A..1018B  ; Greek # No   [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN\n1018C..1018E  ; Greek # So   [3] GREEK SINUSOID SIGN..NOMISMA SIGN\n101A0         ; Greek # So       GREEK SYMBOL TAU RHO\n1D200..1D241  ; Greek # So  [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54\n1D242..1D244  ; Greek # Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\n1D245         ; Greek # So       GREEK MUSICAL LEIMMA\n\n# Total code points: 518\n\n# ================================================\n\n0400..0481    ; Cyrillic # L& [130] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER KOPPA\n0482          ; Cyrillic # So       CYRILLIC THOUSANDS SIGN\n0483..0484    ; Cyrillic # Mn   [2] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PALATALIZATION\n0487          ; Cyrillic # Mn       COMBINING CYRILLIC POKRYTIE\n0488..0489    ; Cyrillic # Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN\n048A..052F    ; Cyrillic # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER\n1C80..1C8A    ; Cyrillic # L&  [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE\n1D2B          ; Cyrillic # L&       CYRILLIC LETTER SMALL CAPITAL EL\n1D78          ; Cyrillic # Lm       MODIFIER LETTER CYRILLIC EN\n2DE0..2DFF    ; Cyrillic # Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\nA640..A66D    ; Cyrillic # L&  [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O\nA66E          ; Cyrillic # Lo       CYRILLIC LETTER MULTIOCULAR O\nA66F          ; Cyrillic # Mn       COMBINING CYRILLIC VZMET\nA670..A672    ; Cyrillic # Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN\nA673          ; Cyrillic # Po       SLAVONIC ASTERISK\nA674..A67D    ; Cyrillic # Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\nA67E          ; Cyrillic # Po       CYRILLIC KAVYKA\nA67F          ; Cyrillic # Lm       CYRILLIC PAYEROK\nA680..A69B    ; Cyrillic # L&  [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O\nA69C..A69D    ; Cyrillic # Lm   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN\nA69E..A69F    ; Cyrillic # Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\nFE2E..FE2F    ; Cyrillic # Mn   [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\n1E030..1E06D  ; Cyrillic # Lm  [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE\n1E08F         ; Cyrillic # Mn       COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I\n\n# Total code points: 508\n\n# ================================================\n\n0531..0556    ; Armenian # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH\n0559          ; Armenian # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING\n055A..055F    ; Armenian # Po   [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK\n0560..0588    ; Armenian # L&  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE\n0589          ; Armenian # Po       ARMENIAN FULL STOP\n058A          ; Armenian # Pd       ARMENIAN HYPHEN\n058D..058E    ; Armenian # So   [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN\n058F          ; Armenian # Sc       ARMENIAN DRAM SIGN\nFB13..FB17    ; Armenian # L&   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH\n\n# Total code points: 96\n\n# ================================================\n\n0591..05BD    ; Hebrew # Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\n05BE          ; Hebrew # Pd       HEBREW PUNCTUATION MAQAF\n05BF          ; Hebrew # Mn       HEBREW POINT RAFE\n05C0          ; Hebrew # Po       HEBREW PUNCTUATION PASEQ\n05C1..05C2    ; Hebrew # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n05C3          ; Hebrew # Po       HEBREW PUNCTUATION SOF PASUQ\n05C4..05C5    ; Hebrew # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n05C6          ; Hebrew # Po       HEBREW PUNCTUATION NUN HAFUKHA\n05C7          ; Hebrew # Mn       HEBREW POINT QAMATS QATAN\n05D0..05EA    ; Hebrew # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV\n05EF..05F2    ; Hebrew # Lo   [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD\n05F3..05F4    ; Hebrew # Po   [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM\nFB1D          ; Hebrew # Lo       HEBREW LETTER YOD WITH HIRIQ\nFB1E          ; Hebrew # Mn       HEBREW POINT JUDEO-SPANISH VARIKA\nFB1F..FB28    ; Hebrew # Lo  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV\nFB29          ; Hebrew # Sm       HEBREW LETTER ALTERNATIVE PLUS SIGN\nFB2A..FB36    ; Hebrew # Lo  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH\nFB38..FB3C    ; Hebrew # Lo   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH\nFB3E          ; Hebrew # Lo       HEBREW LETTER MEM WITH DAGESH\nFB40..FB41    ; Hebrew # Lo   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH\nFB43..FB44    ; Hebrew # Lo   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH\nFB46..FB4F    ; Hebrew # Lo  [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED\n\n# Total code points: 134\n\n# ================================================\n\n0600..0604    ; Arabic # Cf   [5] ARABIC NUMBER SIGN..ARABIC SIGN SAMVAT\n0606..0608    ; Arabic # Sm   [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY\n0609..060A    ; Arabic # Po   [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN\n060B          ; Arabic # Sc       AFGHANI SIGN\n060D          ; Arabic # Po       ARABIC DATE SEPARATOR\n060E..060F    ; Arabic # So   [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA\n0610..061A    ; Arabic # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n061C          ; Arabic # Cf       ARABIC LETTER MARK\n061D..061E    ; Arabic # Po   [2] ARABIC END OF TEXT MARK..ARABIC TRIPLE DOT PUNCTUATION MARK\n0620..063F    ; Arabic # Lo  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE\n0641..064A    ; Arabic # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH\n0656..065F    ; Arabic # Mn  [10] ARABIC SUBSCRIPT ALEF..ARABIC WAVY HAMZA BELOW\n0660..0669    ; Arabic # Nd  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE\n066A..066D    ; Arabic # Po   [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR\n066E..066F    ; Arabic # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF\n0671..06D3    ; Arabic # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n06D4          ; Arabic # Po       ARABIC FULL STOP\n06D5          ; Arabic # Lo       ARABIC LETTER AE\n06D6..06DC    ; Arabic # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n06DE          ; Arabic # So       ARABIC START OF RUB EL HIZB\n06DF..06E4    ; Arabic # Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\n06E5..06E6    ; Arabic # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH\n06E7..06E8    ; Arabic # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n06E9          ; Arabic # So       ARABIC PLACE OF SAJDAH\n06EA..06ED    ; Arabic # Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\n06EE..06EF    ; Arabic # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V\n06F0..06F9    ; Arabic # Nd  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE\n06FA..06FC    ; Arabic # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW\n06FD..06FE    ; Arabic # So   [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN\n06FF          ; Arabic # Lo       ARABIC LETTER HEH WITH INVERTED V\n0750..077F    ; Arabic # Lo  [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE\n0870..0887    ; Arabic # Lo  [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT\n0888          ; Arabic # Sk       ARABIC RAISED ROUND DOT\n0889..088F    ; Arabic # Lo   [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE\n0890..0891    ; Arabic # Cf   [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE\n0897..089F    ; Arabic # Mn   [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA\n08A0..08C8    ; Arabic # Lo  [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF\n08C9          ; Arabic # Lm       ARABIC SMALL FARSI YEH\n08CA..08E1    ; Arabic # Mn  [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA\n08E3..08FF    ; Arabic # Mn  [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA\nFB50..FBB1    ; Arabic # Lo  [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM\nFBB2..FBC2    ; Arabic # Sk  [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE\nFBC3..FBD2    ; Arabic # So  [16] ARABIC LIGATURE JALLA WA-ALAA..ARABIC LIGATURE ALAYHI AR-RAHMAH\nFBD3..FD3D    ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM\nFD40..FD4F    ; Arabic # So  [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH\nFD50..FD8F    ; Arabic # Lo  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM\nFD90..FD91    ; Arabic # So   [2] ARABIC LIGATURE RAHMATU ALLAAHI ALAYH..ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA\nFD92..FDC7    ; Arabic # Lo  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM\nFDC8..FDCF    ; Arabic # So   [8] ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA..ARABIC LIGATURE SALAAMUHU ALAYNAA\nFDF0..FDFB    ; Arabic # Lo  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU\nFDFC          ; Arabic # Sc       RIAL SIGN\nFDFD..FDFF    ; Arabic # So   [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL\nFE70..FE74    ; Arabic # Lo   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM\nFE76..FEFC    ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM\n10E60..10E7E  ; Arabic # No  [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS\n10EC2..10EC4  ; Arabic # Lo   [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW\n10EC5         ; Arabic # Lm       ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW\n10EC6..10EC7  ; Arabic # Lo   [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW\n10ED0         ; Arabic # Po       ARABIC BIBLICAL END OF VERSE\n10ED1..10ED8  ; Arabic # So   [8] ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM..ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH\n10EFA..10EFF  ; Arabic # Mn   [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA\n1EE00..1EE03  ; Arabic # Lo   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL\n1EE05..1EE1F  ; Arabic # Lo  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF\n1EE21..1EE22  ; Arabic # Lo   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM\n1EE24         ; Arabic # Lo       ARABIC MATHEMATICAL INITIAL HEH\n1EE27         ; Arabic # Lo       ARABIC MATHEMATICAL INITIAL HAH\n1EE29..1EE32  ; Arabic # Lo  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF\n1EE34..1EE37  ; Arabic # Lo   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH\n1EE39         ; Arabic # Lo       ARABIC MATHEMATICAL INITIAL DAD\n1EE3B         ; Arabic # Lo       ARABIC MATHEMATICAL INITIAL GHAIN\n1EE42         ; Arabic # Lo       ARABIC MATHEMATICAL TAILED JEEM\n1EE47         ; Arabic # Lo       ARABIC MATHEMATICAL TAILED HAH\n1EE49         ; Arabic # Lo       ARABIC MATHEMATICAL TAILED YEH\n1EE4B         ; Arabic # Lo       ARABIC MATHEMATICAL TAILED LAM\n1EE4D..1EE4F  ; Arabic # Lo   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN\n1EE51..1EE52  ; Arabic # Lo   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF\n1EE54         ; Arabic # Lo       ARABIC MATHEMATICAL TAILED SHEEN\n1EE57         ; Arabic # Lo       ARABIC MATHEMATICAL TAILED KHAH\n1EE59         ; Arabic # Lo       ARABIC MATHEMATICAL TAILED DAD\n1EE5B         ; Arabic # Lo       ARABIC MATHEMATICAL TAILED GHAIN\n1EE5D         ; Arabic # Lo       ARABIC MATHEMATICAL TAILED DOTLESS NOON\n1EE5F         ; Arabic # Lo       ARABIC MATHEMATICAL TAILED DOTLESS QAF\n1EE61..1EE62  ; Arabic # Lo   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM\n1EE64         ; Arabic # Lo       ARABIC MATHEMATICAL STRETCHED HEH\n1EE67..1EE6A  ; Arabic # Lo   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF\n1EE6C..1EE72  ; Arabic # Lo   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF\n1EE74..1EE77  ; Arabic # Lo   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH\n1EE79..1EE7C  ; Arabic # Lo   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH\n1EE7E         ; Arabic # Lo       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH\n1EE80..1EE89  ; Arabic # Lo  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH\n1EE8B..1EE9B  ; Arabic # Lo  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN\n1EEA1..1EEA3  ; Arabic # Lo   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL\n1EEA5..1EEA9  ; Arabic # Lo   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH\n1EEAB..1EEBB  ; Arabic # Lo  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN\n1EEF0..1EEF1  ; Arabic # Sm   [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL\n\n# Total code points: 1413\n\n# ================================================\n\n0700..070D    ; Syriac # Po  [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS\n070F          ; Syriac # Cf       SYRIAC ABBREVIATION MARK\n0710          ; Syriac # Lo       SYRIAC LETTER ALAPH\n0711          ; Syriac # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH\n0712..072F    ; Syriac # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH\n0730..074A    ; Syriac # Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\n074D..074F    ; Syriac # Lo   [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE\n0860..086A    ; Syriac # Lo  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA\n\n# Total code points: 88\n\n# ================================================\n\n0780..07A5    ; Thaana # Lo  [38] THAANA LETTER HAA..THAANA LETTER WAAVU\n07A6..07B0    ; Thaana # Mn  [11] THAANA ABAFILI..THAANA SUKUN\n07B1          ; Thaana # Lo       THAANA LETTER NAA\n\n# Total code points: 50\n\n# ================================================\n\n0900..0902    ; Devanagari # Mn   [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA\n0903          ; Devanagari # Mc       DEVANAGARI SIGN VISARGA\n0904..0939    ; Devanagari # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA\n093A          ; Devanagari # Mn       DEVANAGARI VOWEL SIGN OE\n093B          ; Devanagari # Mc       DEVANAGARI VOWEL SIGN OOE\n093C          ; Devanagari # Mn       DEVANAGARI SIGN NUKTA\n093D          ; Devanagari # Lo       DEVANAGARI SIGN AVAGRAHA\n093E..0940    ; Devanagari # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\n0941..0948    ; Devanagari # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n0949..094C    ; Devanagari # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\n094D          ; Devanagari # Mn       DEVANAGARI SIGN VIRAMA\n094E..094F    ; Devanagari # Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\n0950          ; Devanagari # Lo       DEVANAGARI OM\n0955..0957    ; Devanagari # Mn   [3] DEVANAGARI VOWEL SIGN CANDRA LONG E..DEVANAGARI VOWEL SIGN UUE\n0958..0961    ; Devanagari # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL\n0962..0963    ; Devanagari # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n0966..096F    ; Devanagari # Nd  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE\n0970          ; Devanagari # Po       DEVANAGARI ABBREVIATION SIGN\n0971          ; Devanagari # Lm       DEVANAGARI SIGN HIGH SPACING DOT\n0972..097F    ; Devanagari # Lo  [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA\nA8E0..A8F1    ; Devanagari # Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\nA8F2..A8F7    ; Devanagari # Lo   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA\nA8F8..A8FA    ; Devanagari # Po   [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET\nA8FB          ; Devanagari # Lo       DEVANAGARI HEADSTROKE\nA8FC          ; Devanagari # Po       DEVANAGARI SIGN SIDDHAM\nA8FD..A8FE    ; Devanagari # Lo   [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY\nA8FF          ; Devanagari # Mn       DEVANAGARI VOWEL SIGN AY\n11B00..11B09  ; Devanagari # Po  [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU\n\n# Total code points: 164\n\n# ================================================\n\n0980          ; Bengali # Lo       BENGALI ANJI\n0981          ; Bengali # Mn       BENGALI SIGN CANDRABINDU\n0982..0983    ; Bengali # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\n0985..098C    ; Bengali # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L\n098F..0990    ; Bengali # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI\n0993..09A8    ; Bengali # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA\n09AA..09B0    ; Bengali # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA\n09B2          ; Bengali # Lo       BENGALI LETTER LA\n09B6..09B9    ; Bengali # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA\n09BC          ; Bengali # Mn       BENGALI SIGN NUKTA\n09BD          ; Bengali # Lo       BENGALI SIGN AVAGRAHA\n09BE..09C0    ; Bengali # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II\n09C1..09C4    ; Bengali # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n09C7..09C8    ; Bengali # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\n09CB..09CC    ; Bengali # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\n09CD          ; Bengali # Mn       BENGALI SIGN VIRAMA\n09CE          ; Bengali # Lo       BENGALI LETTER KHANDA TA\n09D7          ; Bengali # Mc       BENGALI AU LENGTH MARK\n09DC..09DD    ; Bengali # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA\n09DF..09E1    ; Bengali # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL\n09E2..09E3    ; Bengali # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n09E6..09EF    ; Bengali # Nd  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE\n09F0..09F1    ; Bengali # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL\n09F2..09F3    ; Bengali # Sc   [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN\n09F4..09F9    ; Bengali # No   [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN\n09FA          ; Bengali # So       BENGALI ISSHAR\n09FB          ; Bengali # Sc       BENGALI GANDA MARK\n09FC          ; Bengali # Lo       BENGALI LETTER VEDIC ANUSVARA\n09FD          ; Bengali # Po       BENGALI ABBREVIATION SIGN\n09FE          ; Bengali # Mn       BENGALI SANDHI MARK\n\n# Total code points: 96\n\n# ================================================\n\n0A01..0A02    ; Gurmukhi # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n0A03          ; Gurmukhi # Mc       GURMUKHI SIGN VISARGA\n0A05..0A0A    ; Gurmukhi # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU\n0A0F..0A10    ; Gurmukhi # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI\n0A13..0A28    ; Gurmukhi # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA\n0A2A..0A30    ; Gurmukhi # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA\n0A32..0A33    ; Gurmukhi # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA\n0A35..0A36    ; Gurmukhi # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA\n0A38..0A39    ; Gurmukhi # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA\n0A3C          ; Gurmukhi # Mn       GURMUKHI SIGN NUKTA\n0A3E..0A40    ; Gurmukhi # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\n0A41..0A42    ; Gurmukhi # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n0A47..0A48    ; Gurmukhi # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n0A4B..0A4D    ; Gurmukhi # Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\n0A51          ; Gurmukhi # Mn       GURMUKHI SIGN UDAAT\n0A59..0A5C    ; Gurmukhi # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA\n0A5E          ; Gurmukhi # Lo       GURMUKHI LETTER FA\n0A66..0A6F    ; Gurmukhi # Nd  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE\n0A70..0A71    ; Gurmukhi # Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n0A72..0A74    ; Gurmukhi # Lo   [3] GURMUKHI IRI..GURMUKHI EK ONKAR\n0A75          ; Gurmukhi # Mn       GURMUKHI SIGN YAKASH\n0A76          ; Gurmukhi # Po       GURMUKHI ABBREVIATION SIGN\n\n# Total code points: 80\n\n# ================================================\n\n0A81..0A82    ; Gujarati # Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n0A83          ; Gujarati # Mc       GUJARATI SIGN VISARGA\n0A85..0A8D    ; Gujarati # Lo   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E\n0A8F..0A91    ; Gujarati # Lo   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O\n0A93..0AA8    ; Gujarati # Lo  [22] GUJARATI LETTER O..GUJARATI LETTER NA\n0AAA..0AB0    ; Gujarati # Lo   [7] GUJARATI LETTER PA..GUJARATI LETTER RA\n0AB2..0AB3    ; Gujarati # Lo   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA\n0AB5..0AB9    ; Gujarati # Lo   [5] GUJARATI LETTER VA..GUJARATI LETTER HA\n0ABC          ; Gujarati # Mn       GUJARATI SIGN NUKTA\n0ABD          ; Gujarati # Lo       GUJARATI SIGN AVAGRAHA\n0ABE..0AC0    ; Gujarati # Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\n0AC1..0AC5    ; Gujarati # Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n0AC7..0AC8    ; Gujarati # Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n0AC9          ; Gujarati # Mc       GUJARATI VOWEL SIGN CANDRA O\n0ACB..0ACC    ; Gujarati # Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\n0ACD          ; Gujarati # Mn       GUJARATI SIGN VIRAMA\n0AD0          ; Gujarati # Lo       GUJARATI OM\n0AE0..0AE1    ; Gujarati # Lo   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL\n0AE2..0AE3    ; Gujarati # Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n0AE6..0AEF    ; Gujarati # Nd  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE\n0AF0          ; Gujarati # Po       GUJARATI ABBREVIATION SIGN\n0AF1          ; Gujarati # Sc       GUJARATI RUPEE SIGN\n0AF9          ; Gujarati # Lo       GUJARATI LETTER ZHA\n0AFA..0AFF    ; Gujarati # Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\n\n# Total code points: 91\n\n# ================================================\n\n0B01          ; Oriya # Mn       ORIYA SIGN CANDRABINDU\n0B02..0B03    ; Oriya # Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\n0B05..0B0C    ; Oriya # Lo   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L\n0B0F..0B10    ; Oriya # Lo   [2] ORIYA LETTER E..ORIYA LETTER AI\n0B13..0B28    ; Oriya # Lo  [22] ORIYA LETTER O..ORIYA LETTER NA\n0B2A..0B30    ; Oriya # Lo   [7] ORIYA LETTER PA..ORIYA LETTER RA\n0B32..0B33    ; Oriya # Lo   [2] ORIYA LETTER LA..ORIYA LETTER LLA\n0B35..0B39    ; Oriya # Lo   [5] ORIYA LETTER VA..ORIYA LETTER HA\n0B3C          ; Oriya # Mn       ORIYA SIGN NUKTA\n0B3D          ; Oriya # Lo       ORIYA SIGN AVAGRAHA\n0B3E          ; Oriya # Mc       ORIYA VOWEL SIGN AA\n0B3F          ; Oriya # Mn       ORIYA VOWEL SIGN I\n0B40          ; Oriya # Mc       ORIYA VOWEL SIGN II\n0B41..0B44    ; Oriya # Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n0B47..0B48    ; Oriya # Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\n0B4B..0B4C    ; Oriya # Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\n0B4D          ; Oriya # Mn       ORIYA SIGN VIRAMA\n0B55..0B56    ; Oriya # Mn   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK\n0B57          ; Oriya # Mc       ORIYA AU LENGTH MARK\n0B5C..0B5D    ; Oriya # Lo   [2] ORIYA LETTER RRA..ORIYA LETTER RHA\n0B5F..0B61    ; Oriya # Lo   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL\n0B62..0B63    ; Oriya # Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n0B66..0B6F    ; Oriya # Nd  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE\n0B70          ; Oriya # So       ORIYA ISSHAR\n0B71          ; Oriya # Lo       ORIYA LETTER WA\n0B72..0B77    ; Oriya # No   [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS\n\n# Total code points: 91\n\n# ================================================\n\n0B82          ; Tamil # Mn       TAMIL SIGN ANUSVARA\n0B83          ; Tamil # Lo       TAMIL SIGN VISARGA\n0B85..0B8A    ; Tamil # Lo   [6] TAMIL LETTER A..TAMIL LETTER UU\n0B8E..0B90    ; Tamil # Lo   [3] TAMIL LETTER E..TAMIL LETTER AI\n0B92..0B95    ; Tamil # Lo   [4] TAMIL LETTER O..TAMIL LETTER KA\n0B99..0B9A    ; Tamil # Lo   [2] TAMIL LETTER NGA..TAMIL LETTER CA\n0B9C          ; Tamil # Lo       TAMIL LETTER JA\n0B9E..0B9F    ; Tamil # Lo   [2] TAMIL LETTER NYA..TAMIL LETTER TTA\n0BA3..0BA4    ; Tamil # Lo   [2] TAMIL LETTER NNA..TAMIL LETTER TA\n0BA8..0BAA    ; Tamil # Lo   [3] TAMIL LETTER NA..TAMIL LETTER PA\n0BAE..0BB9    ; Tamil # Lo  [12] TAMIL LETTER MA..TAMIL LETTER HA\n0BBE..0BBF    ; Tamil # Mc   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I\n0BC0          ; Tamil # Mn       TAMIL VOWEL SIGN II\n0BC1..0BC2    ; Tamil # Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\n0BC6..0BC8    ; Tamil # Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\n0BCA..0BCC    ; Tamil # Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\n0BCD          ; Tamil # Mn       TAMIL SIGN VIRAMA\n0BD0          ; Tamil # Lo       TAMIL OM\n0BD7          ; Tamil # Mc       TAMIL AU LENGTH MARK\n0BE6..0BEF    ; Tamil # Nd  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE\n0BF0..0BF2    ; Tamil # No   [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND\n0BF3..0BF8    ; Tamil # So   [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN\n0BF9          ; Tamil # Sc       TAMIL RUPEE SIGN\n0BFA          ; Tamil # So       TAMIL NUMBER SIGN\n11FC0..11FD4  ; Tamil # No  [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH\n11FD5..11FDC  ; Tamil # So   [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI\n11FDD..11FE0  ; Tamil # Sc   [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN\n11FE1..11FF1  ; Tamil # So  [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA\n11FFF         ; Tamil # Po       TAMIL PUNCTUATION END OF TEXT\n\n# Total code points: 123\n\n# ================================================\n\n0C00          ; Telugu # Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE\n0C01..0C03    ; Telugu # Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\n0C04          ; Telugu # Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE\n0C05..0C0C    ; Telugu # Lo   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L\n0C0E..0C10    ; Telugu # Lo   [3] TELUGU LETTER E..TELUGU LETTER AI\n0C12..0C28    ; Telugu # Lo  [23] TELUGU LETTER O..TELUGU LETTER NA\n0C2A..0C39    ; Telugu # Lo  [16] TELUGU LETTER PA..TELUGU LETTER HA\n0C3C          ; Telugu # Mn       TELUGU SIGN NUKTA\n0C3D          ; Telugu # Lo       TELUGU SIGN AVAGRAHA\n0C3E..0C40    ; Telugu # Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n0C41..0C44    ; Telugu # Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\n0C46..0C48    ; Telugu # Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n0C4A..0C4D    ; Telugu # Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA\n0C55..0C56    ; Telugu # Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n0C58..0C5A    ; Telugu # Lo   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA\n0C5C..0C5D    ; Telugu # Lo   [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU\n0C60..0C61    ; Telugu # Lo   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL\n0C62..0C63    ; Telugu # Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n0C66..0C6F    ; Telugu # Nd  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE\n0C77          ; Telugu # Po       TELUGU SIGN SIDDHAM\n0C78..0C7E    ; Telugu # No   [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR\n0C7F          ; Telugu # So       TELUGU SIGN TUUMU\n\n# Total code points: 101\n\n# ================================================\n\n0C80          ; Kannada # Lo       KANNADA SIGN SPACING CANDRABINDU\n0C81          ; Kannada # Mn       KANNADA SIGN CANDRABINDU\n0C82..0C83    ; Kannada # Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\n0C84          ; Kannada # Po       KANNADA SIGN SIDDHAM\n0C85..0C8C    ; Kannada # Lo   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L\n0C8E..0C90    ; Kannada # Lo   [3] KANNADA LETTER E..KANNADA LETTER AI\n0C92..0CA8    ; Kannada # Lo  [23] KANNADA LETTER O..KANNADA LETTER NA\n0CAA..0CB3    ; Kannada # Lo  [10] KANNADA LETTER PA..KANNADA LETTER LLA\n0CB5..0CB9    ; Kannada # Lo   [5] KANNADA LETTER VA..KANNADA LETTER HA\n0CBC          ; Kannada # Mn       KANNADA SIGN NUKTA\n0CBD          ; Kannada # Lo       KANNADA SIGN AVAGRAHA\n0CBE          ; Kannada # Mc       KANNADA VOWEL SIGN AA\n0CBF          ; Kannada # Mn       KANNADA VOWEL SIGN I\n0CC0..0CC4    ; Kannada # Mc   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR\n0CC6          ; Kannada # Mn       KANNADA VOWEL SIGN E\n0CC7..0CC8    ; Kannada # Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n0CCA..0CCB    ; Kannada # Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n0CCC..0CCD    ; Kannada # Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\n0CD5..0CD6    ; Kannada # Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n0CDC..0CDE    ; Kannada # Lo   [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA\n0CE0..0CE1    ; Kannada # Lo   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL\n0CE2..0CE3    ; Kannada # Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n0CE6..0CEF    ; Kannada # Nd  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE\n0CF1..0CF2    ; Kannada # Lo   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA\n0CF3          ; Kannada # Mc       KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT\n\n# Total code points: 92\n\n# ================================================\n\n0D00..0D01    ; Malayalam # Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n0D02..0D03    ; Malayalam # Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\n0D04..0D0C    ; Malayalam # Lo   [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L\n0D0E..0D10    ; Malayalam # Lo   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI\n0D12..0D3A    ; Malayalam # Lo  [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA\n0D3B..0D3C    ; Malayalam # Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n0D3D          ; Malayalam # Lo       MALAYALAM SIGN AVAGRAHA\n0D3E..0D40    ; Malayalam # Mc   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II\n0D41..0D44    ; Malayalam # Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n0D46..0D48    ; Malayalam # Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\n0D4A..0D4C    ; Malayalam # Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\n0D4D          ; Malayalam # Mn       MALAYALAM SIGN VIRAMA\n0D4E          ; Malayalam # Lo       MALAYALAM LETTER DOT REPH\n0D4F          ; Malayalam # So       MALAYALAM SIGN PARA\n0D54..0D56    ; Malayalam # Lo   [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL\n0D57          ; Malayalam # Mc       MALAYALAM AU LENGTH MARK\n0D58..0D5E    ; Malayalam # No   [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH\n0D5F..0D61    ; Malayalam # Lo   [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL\n0D62..0D63    ; Malayalam # Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n0D66..0D6F    ; Malayalam # Nd  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE\n0D70..0D78    ; Malayalam # No   [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS\n0D79          ; Malayalam # So       MALAYALAM DATE MARK\n0D7A..0D7F    ; Malayalam # Lo   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K\n\n# Total code points: 118\n\n# ================================================\n\n0D81          ; Sinhala # Mn       SINHALA SIGN CANDRABINDU\n0D82..0D83    ; Sinhala # Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\n0D85..0D96    ; Sinhala # Lo  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA\n0D9A..0DB1    ; Sinhala # Lo  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA\n0DB3..0DBB    ; Sinhala # Lo   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA\n0DBD          ; Sinhala # Lo       SINHALA LETTER DANTAJA LAYANNA\n0DC0..0DC6    ; Sinhala # Lo   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA\n0DCA          ; Sinhala # Mn       SINHALA SIGN AL-LAKUNA\n0DCF..0DD1    ; Sinhala # Mc   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\n0DD2..0DD4    ; Sinhala # Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n0DD6          ; Sinhala # Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA\n0DD8..0DDF    ; Sinhala # Mc   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA\n0DE6..0DEF    ; Sinhala # Nd  [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE\n0DF2..0DF3    ; Sinhala # Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\n0DF4          ; Sinhala # Po       SINHALA PUNCTUATION KUNDDALIYA\n111E1..111F4  ; Sinhala # No  [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND\n\n# Total code points: 111\n\n# ================================================\n\n0E01..0E30    ; Thai # Lo  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A\n0E31          ; Thai # Mn       THAI CHARACTER MAI HAN-AKAT\n0E32..0E33    ; Thai # Lo   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM\n0E34..0E3A    ; Thai # Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n0E40..0E45    ; Thai # Lo   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO\n0E46          ; Thai # Lm       THAI CHARACTER MAIYAMOK\n0E47..0E4E    ; Thai # Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\n0E4F          ; Thai # Po       THAI CHARACTER FONGMAN\n0E50..0E59    ; Thai # Nd  [10] THAI DIGIT ZERO..THAI DIGIT NINE\n0E5A..0E5B    ; Thai # Po   [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT\n\n# Total code points: 86\n\n# ================================================\n\n0E81..0E82    ; Lao # Lo   [2] LAO LETTER KO..LAO LETTER KHO SUNG\n0E84          ; Lao # Lo       LAO LETTER KHO TAM\n0E86..0E8A    ; Lao # Lo   [5] LAO LETTER PALI GHA..LAO LETTER SO TAM\n0E8C..0EA3    ; Lao # Lo  [24] LAO LETTER PALI JHA..LAO LETTER LO LING\n0EA5          ; Lao # Lo       LAO LETTER LO LOOT\n0EA7..0EB0    ; Lao # Lo  [10] LAO LETTER WO..LAO VOWEL SIGN A\n0EB1          ; Lao # Mn       LAO VOWEL SIGN MAI KAN\n0EB2..0EB3    ; Lao # Lo   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM\n0EB4..0EBC    ; Lao # Mn   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO\n0EBD          ; Lao # Lo       LAO SEMIVOWEL SIGN NYO\n0EC0..0EC4    ; Lao # Lo   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI\n0EC6          ; Lao # Lm       LAO KO LA\n0EC8..0ECE    ; Lao # Mn   [7] LAO TONE MAI EK..LAO YAMAKKAN\n0ED0..0ED9    ; Lao # Nd  [10] LAO DIGIT ZERO..LAO DIGIT NINE\n0EDC..0EDF    ; Lao # Lo   [4] LAO HO NO..LAO LETTER KHMU NYO\n\n# Total code points: 83\n\n# ================================================\n\n0F00          ; Tibetan # Lo       TIBETAN SYLLABLE OM\n0F01..0F03    ; Tibetan # So   [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA\n0F04..0F12    ; Tibetan # Po  [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD\n0F13          ; Tibetan # So       TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN\n0F14          ; Tibetan # Po       TIBETAN MARK GTER TSHEG\n0F15..0F17    ; Tibetan # So   [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS\n0F18..0F19    ; Tibetan # Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\n0F1A..0F1F    ; Tibetan # So   [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG\n0F20..0F29    ; Tibetan # Nd  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE\n0F2A..0F33    ; Tibetan # No  [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO\n0F34          ; Tibetan # So       TIBETAN MARK BSDUS RTAGS\n0F35          ; Tibetan # Mn       TIBETAN MARK NGAS BZUNG NYI ZLA\n0F36          ; Tibetan # So       TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN\n0F37          ; Tibetan # Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS\n0F38          ; Tibetan # So       TIBETAN MARK CHE MGO\n0F39          ; Tibetan # Mn       TIBETAN MARK TSA -PHRU\n0F3A          ; Tibetan # Ps       TIBETAN MARK GUG RTAGS GYON\n0F3B          ; Tibetan # Pe       TIBETAN MARK GUG RTAGS GYAS\n0F3C          ; Tibetan # Ps       TIBETAN MARK ANG KHANG GYON\n0F3D          ; Tibetan # Pe       TIBETAN MARK ANG KHANG GYAS\n0F3E..0F3F    ; Tibetan # Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES\n0F40..0F47    ; Tibetan # Lo   [8] TIBETAN LETTER KA..TIBETAN LETTER JA\n0F49..0F6C    ; Tibetan # Lo  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA\n0F71..0F7E    ; Tibetan # Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n0F7F          ; Tibetan # Mc       TIBETAN SIGN RNAM BCAD\n0F80..0F84    ; Tibetan # Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\n0F85          ; Tibetan # Po       TIBETAN MARK PALUTA\n0F86..0F87    ; Tibetan # Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\n0F88..0F8C    ; Tibetan # Lo   [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN\n0F8D..0F97    ; Tibetan # Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n0F99..0FBC    ; Tibetan # Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n0FBE..0FC5    ; Tibetan # So   [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE\n0FC6          ; Tibetan # Mn       TIBETAN SYMBOL PADMA GDAN\n0FC7..0FCC    ; Tibetan # So   [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL\n0FCE..0FCF    ; Tibetan # So   [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM\n0FD0..0FD4    ; Tibetan # Po   [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA\n0FD9..0FDA    ; Tibetan # Po   [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS\n\n# Total code points: 207\n\n# ================================================\n\n1000..102A    ; Myanmar # Lo  [43] MYANMAR LETTER KA..MYANMAR LETTER AU\n102B..102C    ; Myanmar # Mc   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA\n102D..1030    ; Myanmar # Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n1031          ; Myanmar # Mc       MYANMAR VOWEL SIGN E\n1032..1037    ; Myanmar # Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\n1038          ; Myanmar # Mc       MYANMAR SIGN VISARGA\n1039..103A    ; Myanmar # Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\n103B..103C    ; Myanmar # Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\n103D..103E    ; Myanmar # Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n103F          ; Myanmar # Lo       MYANMAR LETTER GREAT SA\n1040..1049    ; Myanmar # Nd  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE\n104A..104F    ; Myanmar # Po   [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE\n1050..1055    ; Myanmar # Lo   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL\n1056..1057    ; Myanmar # Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\n1058..1059    ; Myanmar # Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n105A..105D    ; Myanmar # Lo   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE\n105E..1060    ; Myanmar # Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n1061          ; Myanmar # Lo       MYANMAR LETTER SGAW KAREN SHA\n1062..1064    ; Myanmar # Mc   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO\n1065..1066    ; Myanmar # Lo   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA\n1067..106D    ; Myanmar # Mc   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5\n106E..1070    ; Myanmar # Lo   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA\n1071..1074    ; Myanmar # Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n1075..1081    ; Myanmar # Lo  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA\n1082          ; Myanmar # Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n1083..1084    ; Myanmar # Mc   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E\n1085..1086    ; Myanmar # Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n1087..108C    ; Myanmar # Mc   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3\n108D          ; Myanmar # Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n108E          ; Myanmar # Lo       MYANMAR LETTER RUMAI PALAUNG FA\n108F          ; Myanmar # Mc       MYANMAR SIGN RUMAI PALAUNG TONE-5\n1090..1099    ; Myanmar # Nd  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE\n109A..109C    ; Myanmar # Mc   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A\n109D          ; Myanmar # Mn       MYANMAR VOWEL SIGN AITON AI\n109E..109F    ; Myanmar # So   [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION\nA9E0..A9E4    ; Myanmar # Lo   [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA\nA9E5          ; Myanmar # Mn       MYANMAR SIGN SHAN SAW\nA9E6          ; Myanmar # Lm       MYANMAR MODIFIER LETTER SHAN REDUPLICATION\nA9E7..A9EF    ; Myanmar # Lo   [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA\nA9F0..A9F9    ; Myanmar # Nd  [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE\nA9FA..A9FE    ; Myanmar # Lo   [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA\nAA60..AA6F    ; Myanmar # Lo  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA\nAA70          ; Myanmar # Lm       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION\nAA71..AA76    ; Myanmar # Lo   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM\nAA77..AA79    ; Myanmar # So   [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO\nAA7A          ; Myanmar # Lo       MYANMAR LETTER AITON RA\nAA7B          ; Myanmar # Mc       MYANMAR SIGN PAO KAREN TONE\nAA7C          ; Myanmar # Mn       MYANMAR SIGN TAI LAING TONE-2\nAA7D          ; Myanmar # Mc       MYANMAR SIGN TAI LAING TONE-5\nAA7E..AA7F    ; Myanmar # Lo   [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA\n116D0..116E3  ; Myanmar # Nd  [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE\n\n# Total code points: 243\n\n# ================================================\n\n10A0..10C5    ; Georgian # L&  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE\n10C7          ; Georgian # L&       GEORGIAN CAPITAL LETTER YN\n10CD          ; Georgian # L&       GEORGIAN CAPITAL LETTER AEN\n10D0..10FA    ; Georgian # L&  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN\n10FC          ; Georgian # Lm       MODIFIER LETTER GEORGIAN NAR\n10FD..10FF    ; Georgian # L&   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN\n1C90..1CBA    ; Georgian # L&  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN\n1CBD..1CBF    ; Georgian # L&   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN\n2D00..2D25    ; Georgian # L&  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE\n2D27          ; Georgian # L&       GEORGIAN SMALL LETTER YN\n2D2D          ; Georgian # L&       GEORGIAN SMALL LETTER AEN\n\n# Total code points: 173\n\n# ================================================\n\n1100..11FF    ; Hangul # Lo [256] HANGUL CHOSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN\n302E..302F    ; Hangul # Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\n3131..318E    ; Hangul # Lo  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE\n3200..321E    ; Hangul # So  [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU\n3260..327E    ; Hangul # So  [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U\nA960..A97C    ; Hangul # Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\nAC00..D7A3    ; Hangul # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH\nD7B0..D7C6    ; Hangul # Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\nD7CB..D7FB    ; Hangul # Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\nFFA0..FFBE    ; Hangul # Lo  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH\nFFC2..FFC7    ; Hangul # Lo   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E\nFFCA..FFCF    ; Hangul # Lo   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE\nFFD2..FFD7    ; Hangul # Lo   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU\nFFDA..FFDC    ; Hangul # Lo   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I\n\n# Total code points: 11739\n\n# ================================================\n\n1200..1248    ; Ethiopic # Lo  [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA\n124A..124D    ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE\n1250..1256    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO\n1258          ; Ethiopic # Lo       ETHIOPIC SYLLABLE QHWA\n125A..125D    ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE\n1260..1288    ; Ethiopic # Lo  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA\n128A..128D    ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE\n1290..12B0    ; Ethiopic # Lo  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA\n12B2..12B5    ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE\n12B8..12BE    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO\n12C0          ; Ethiopic # Lo       ETHIOPIC SYLLABLE KXWA\n12C2..12C5    ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE\n12C8..12D6    ; Ethiopic # Lo  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O\n12D8..1310    ; Ethiopic # Lo  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA\n1312..1315    ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE\n1318..135A    ; Ethiopic # Lo  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA\n135D..135F    ; Ethiopic # Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\n1360..1368    ; Ethiopic # Po   [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR\n1369..137C    ; Ethiopic # No  [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND\n1380..138F    ; Ethiopic # Lo  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE\n1390..1399    ; Ethiopic # So  [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT\n2D80..2D96    ; Ethiopic # Lo  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE\n2DA0..2DA6    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO\n2DA8..2DAE    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO\n2DB0..2DB6    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO\n2DB8..2DBE    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO\n2DC0..2DC6    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO\n2DC8..2DCE    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO\n2DD0..2DD6    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO\n2DD8..2DDE    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO\nAB01..AB06    ; Ethiopic # Lo   [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO\nAB09..AB0E    ; Ethiopic # Lo   [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO\nAB11..AB16    ; Ethiopic # Lo   [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO\nAB20..AB26    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO\nAB28..AB2E    ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO\n1E7E0..1E7E6  ; Ethiopic # Lo   [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO\n1E7E8..1E7EB  ; Ethiopic # Lo   [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE\n1E7ED..1E7EE  ; Ethiopic # Lo   [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE\n1E7F0..1E7FE  ; Ethiopic # Lo  [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE\n\n# Total code points: 523\n\n# ================================================\n\n13A0..13F5    ; Cherokee # L&  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV\n13F8..13FD    ; Cherokee # L&   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV\nAB70..ABBF    ; Cherokee # L&  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA\n\n# Total code points: 172\n\n# ================================================\n\n1400          ; Canadian_Aboriginal # Pd       CANADIAN SYLLABICS HYPHEN\n1401..166C    ; Canadian_Aboriginal # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA\n166D          ; Canadian_Aboriginal # So       CANADIAN SYLLABICS CHI SIGN\n166E          ; Canadian_Aboriginal # Po       CANADIAN SYLLABICS FULL STOP\n166F..167F    ; Canadian_Aboriginal # Lo  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W\n18B0..18F5    ; Canadian_Aboriginal # Lo  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S\n11AB0..11ABF  ; Canadian_Aboriginal # Lo  [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA\n\n# Total code points: 726\n\n# ================================================\n\n1680          ; Ogham # Zs       OGHAM SPACE MARK\n1681..169A    ; Ogham # Lo  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH\n169B          ; Ogham # Ps       OGHAM FEATHER MARK\n169C          ; Ogham # Pe       OGHAM REVERSED FEATHER MARK\n\n# Total code points: 29\n\n# ================================================\n\n16A0..16EA    ; Runic # Lo  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X\n16EE..16F0    ; Runic # Nl   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL\n16F1..16F8    ; Runic # Lo   [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC\n\n# Total code points: 86\n\n# ================================================\n\n1780..17B3    ; Khmer # Lo  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU\n17B4..17B5    ; Khmer # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n17B6          ; Khmer # Mc       KHMER VOWEL SIGN AA\n17B7..17BD    ; Khmer # Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n17BE..17C5    ; Khmer # Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\n17C6          ; Khmer # Mn       KHMER SIGN NIKAHIT\n17C7..17C8    ; Khmer # Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\n17C9..17D3    ; Khmer # Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\n17D4..17D6    ; Khmer # Po   [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH\n17D7          ; Khmer # Lm       KHMER SIGN LEK TOO\n17D8..17DA    ; Khmer # Po   [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT\n17DB          ; Khmer # Sc       KHMER CURRENCY SYMBOL RIEL\n17DC          ; Khmer # Lo       KHMER SIGN AVAKRAHASANYA\n17DD          ; Khmer # Mn       KHMER SIGN ATTHACAN\n17E0..17E9    ; Khmer # Nd  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE\n17F0..17F9    ; Khmer # No  [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON\n19E0..19FF    ; Khmer # So  [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC\n\n# Total code points: 146\n\n# ================================================\n\n1800..1801    ; Mongolian # Po   [2] MONGOLIAN BIRGA..MONGOLIAN ELLIPSIS\n1804          ; Mongolian # Po       MONGOLIAN COLON\n1806          ; Mongolian # Pd       MONGOLIAN TODO SOFT HYPHEN\n1807..180A    ; Mongolian # Po   [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU\n180B..180D    ; Mongolian # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n180E          ; Mongolian # Cf       MONGOLIAN VOWEL SEPARATOR\n180F          ; Mongolian # Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR\n1810..1819    ; Mongolian # Nd  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE\n1820..1842    ; Mongolian # Lo  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI\n1843          ; Mongolian # Lm       MONGOLIAN LETTER TODO LONG VOWEL SIGN\n1844..1878    ; Mongolian # Lo  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS\n1880..1884    ; Mongolian # Lo   [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA\n1885..1886    ; Mongolian # Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n1887..18A8    ; Mongolian # Lo  [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA\n18A9          ; Mongolian # Mn       MONGOLIAN LETTER ALI GALI DAGALGA\n18AA          ; Mongolian # Lo       MONGOLIAN LETTER MANCHU ALI GALI LHA\n11660..1166C  ; Mongolian # Po  [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT\n\n# Total code points: 168\n\n# ================================================\n\n3041..3096    ; Hiragana # Lo  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE\n309D..309E    ; Hiragana # Lm   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK\n309F          ; Hiragana # Lo       HIRAGANA DIGRAPH YORI\n1B001..1B11F  ; Hiragana # Lo [287] HIRAGANA LETTER ARCHAIC YE..HIRAGANA LETTER ARCHAIC WU\n1B132         ; Hiragana # Lo       HIRAGANA LETTER SMALL KO\n1B150..1B152  ; Hiragana # Lo   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO\n1F200         ; Hiragana # So       SQUARE HIRAGANA HOKA\n\n# Total code points: 381\n\n# ================================================\n\n30A1..30FA    ; Katakana # Lo  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO\n30FD..30FE    ; Katakana # Lm   [2] KATAKANA ITERATION MARK..KATAKANA VOICED ITERATION MARK\n30FF          ; Katakana # Lo       KATAKANA DIGRAPH KOTO\n31F0..31FF    ; Katakana # Lo  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO\n32D0..32FE    ; Katakana # So  [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO\n3300..3357    ; Katakana # So  [88] SQUARE APAATO..SQUARE WATTO\nFF66..FF6F    ; Katakana # Lo  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU\nFF71..FF9D    ; Katakana # Lo  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N\n1AFF0..1AFF3  ; Katakana # Lm   [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5\n1AFF5..1AFFB  ; Katakana # Lm   [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5\n1AFFD..1AFFE  ; Katakana # Lm   [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8\n1B000         ; Katakana # Lo       KATAKANA LETTER ARCHAIC E\n1B120..1B122  ; Katakana # Lo   [3] KATAKANA LETTER ARCHAIC YI..KATAKANA LETTER ARCHAIC WU\n1B155         ; Katakana # Lo       KATAKANA LETTER SMALL KO\n1B164..1B167  ; Katakana # Lo   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N\n\n# Total code points: 321\n\n# ================================================\n\n02EA..02EB    ; Bopomofo # Sk   [2] MODIFIER LETTER YIN DEPARTING TONE MARK..MODIFIER LETTER YANG DEPARTING TONE MARK\n3105..312F    ; Bopomofo # Lo  [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN\n31A0..31BF    ; Bopomofo # Lo  [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH\n\n# Total code points: 77\n\n# ================================================\n\n2E80..2E99    ; Han # So  [26] CJK RADICAL REPEAT..CJK RADICAL RAP\n2E9B..2EF3    ; Han # So  [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE\n2F00..2FD5    ; Han # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE\n3005          ; Han # Lm       IDEOGRAPHIC ITERATION MARK\n3007          ; Han # Nl       IDEOGRAPHIC NUMBER ZERO\n3021..3029    ; Han # Nl   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE\n3038..303A    ; Han # Nl   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY\n303B          ; Han # Lm       VERTICAL IDEOGRAPHIC ITERATION MARK\n3400..4DBF    ; Han # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF\n4E00..9FFF    ; Han # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF\nF900..FA6D    ; Han # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D\nFA70..FAD9    ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9\n16FE2         ; Han # Po       OLD CHINESE HOOK MARK\n16FE3         ; Han # Lm       OLD CHINESE ITERATION MARK\n16FF0..16FF1  ; Han # Mc   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY\n16FF2..16FF3  ; Han # Lm   [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER\n16FF4..16FF6  ; Han # Nl   [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS\n20000..2A6DF  ; Han # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF\n2A700..2B81D  ; Han # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D\n2B820..2CEAD  ; Han # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD\n2CEB0..2EBE0  ; Han # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0\n2EBF0..2EE5D  ; Han # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D\n2F800..2FA1D  ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D\n30000..3134A  ; Han # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A\n31350..33479  ; Han # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479\n\n# Total code points: 103351\n\n# ================================================\n\nA000..A014    ; Yi # Lo  [21] YI SYLLABLE IT..YI SYLLABLE E\nA015          ; Yi # Lm       YI SYLLABLE WU\nA016..A48C    ; Yi # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR\nA490..A4C6    ; Yi # So  [55] YI RADICAL QOT..YI RADICAL KE\n\n# Total code points: 1220\n\n# ================================================\n\n10300..1031F  ; Old_Italic # Lo  [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS\n10320..10323  ; Old_Italic # No   [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY\n1032D..1032F  ; Old_Italic # Lo   [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE\n\n# Total code points: 39\n\n# ================================================\n\n10330..10340  ; Gothic # Lo  [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA\n10341         ; Gothic # Nl       GOTHIC LETTER NINETY\n10342..10349  ; Gothic # Lo   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL\n1034A         ; Gothic # Nl       GOTHIC LETTER NINE HUNDRED\n\n# Total code points: 27\n\n# ================================================\n\n10400..1044F  ; Deseret # L&  [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW\n\n# Total code points: 80\n\n# ================================================\n\n0300..036F    ; Inherited # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\n0485..0486    ; Inherited # Mn   [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA\n064B..0655    ; Inherited # Mn  [11] ARABIC FATHATAN..ARABIC HAMZA BELOW\n0670          ; Inherited # Mn       ARABIC LETTER SUPERSCRIPT ALEF\n0951..0954    ; Inherited # Mn   [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT\n1AB0..1ABD    ; Inherited # Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\n1ABE          ; Inherited # Me       COMBINING PARENTHESES OVERLAY\n1ABF..1ADD    ; Inherited # Mn  [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW\n1AE0..1AEB    ; Inherited # Mn  [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE\n1CD0..1CD2    ; Inherited # Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\n1CD4..1CE0    ; Inherited # Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n1CE2..1CE8    ; Inherited # Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n1CED          ; Inherited # Mn       VEDIC SIGN TIRYAK\n1CF4          ; Inherited # Mn       VEDIC TONE CANDRA ABOVE\n1CF8..1CF9    ; Inherited # Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n1DC0..1DFF    ; Inherited # Mn  [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\n200C..200D    ; Inherited # Cf   [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER\n20D0..20DC    ; Inherited # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n20DD..20E0    ; Inherited # Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH\n20E1          ; Inherited # Mn       COMBINING LEFT RIGHT ARROW ABOVE\n20E2..20E4    ; Inherited # Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE\n20E5..20F0    ; Inherited # Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\n302A..302D    ; Inherited # Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n3099..309A    ; Inherited # Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\nFE00..FE0F    ; Inherited # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\nFE20..FE2D    ; Inherited # Mn  [14] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON BELOW\n101FD         ; Inherited # Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\n102E0         ; Inherited # Mn       COPTIC EPACT THOUSANDS MARK\n1133B         ; Inherited # Mn       COMBINING BINDU BELOW\n1CF00..1CF2D  ; Inherited # Mn  [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT\n1CF30..1CF46  ; Inherited # Mn  [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG\n1D167..1D169  ; Inherited # Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\n1D17B..1D182  ; Inherited # Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\n1D185..1D18B  ; Inherited # Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\n1D1AA..1D1AD  ; Inherited # Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\nE0100..E01EF  ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\n\n# Total code points: 684\n\n# ================================================\n\n1700..1711    ; Tagalog # Lo  [18] TAGALOG LETTER A..TAGALOG LETTER HA\n1712..1714    ; Tagalog # Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\n1715          ; Tagalog # Mc       TAGALOG SIGN PAMUDPOD\n171F          ; Tagalog # Lo       TAGALOG LETTER ARCHAIC RA\n\n# Total code points: 23\n\n# ================================================\n\n1720..1731    ; Hanunoo # Lo  [18] HANUNOO LETTER A..HANUNOO LETTER HA\n1732..1733    ; Hanunoo # Mn   [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U\n1734          ; Hanunoo # Mc       HANUNOO SIGN PAMUDPOD\n\n# Total code points: 21\n\n# ================================================\n\n1740..1751    ; Buhid # Lo  [18] BUHID LETTER A..BUHID LETTER HA\n1752..1753    ; Buhid # Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n\n# Total code points: 20\n\n# ================================================\n\n1760..176C    ; Tagbanwa # Lo  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA\n176E..1770    ; Tagbanwa # Lo   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA\n1772..1773    ; Tagbanwa # Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n\n# Total code points: 18\n\n# ================================================\n\n1900..191E    ; Limbu # Lo  [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA\n1920..1922    ; Limbu # Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n1923..1926    ; Limbu # Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\n1927..1928    ; Limbu # Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n1929..192B    ; Limbu # Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\n1930..1931    ; Limbu # Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\n1932          ; Limbu # Mn       LIMBU SMALL LETTER ANUSVARA\n1933..1938    ; Limbu # Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\n1939..193B    ; Limbu # Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\n1940          ; Limbu # So       LIMBU SIGN LOO\n1944..1945    ; Limbu # Po   [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK\n1946..194F    ; Limbu # Nd  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE\n\n# Total code points: 68\n\n# ================================================\n\n1950..196D    ; Tai_Le # Lo  [30] TAI LE LETTER KA..TAI LE LETTER AI\n1970..1974    ; Tai_Le # Lo   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6\n\n# Total code points: 35\n\n# ================================================\n\n10000..1000B  ; Linear_B # Lo  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE\n1000D..10026  ; Linear_B # Lo  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO\n10028..1003A  ; Linear_B # Lo  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO\n1003C..1003D  ; Linear_B # Lo   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE\n1003F..1004D  ; Linear_B # Lo  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO\n10050..1005D  ; Linear_B # Lo  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089\n10080..100FA  ; Linear_B # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305\n\n# Total code points: 211\n\n# ================================================\n\n10380..1039D  ; Ugaritic # Lo  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU\n1039F         ; Ugaritic # Po       UGARITIC WORD DIVIDER\n\n# Total code points: 31\n\n# ================================================\n\n10450..1047F  ; Shavian # Lo  [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW\n\n# Total code points: 48\n\n# ================================================\n\n10480..1049D  ; Osmanya # Lo  [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO\n104A0..104A9  ; Osmanya # Nd  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE\n\n# Total code points: 40\n\n# ================================================\n\n10800..10805  ; Cypriot # Lo   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA\n10808         ; Cypriot # Lo       CYPRIOT SYLLABLE JO\n1080A..10835  ; Cypriot # Lo  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO\n10837..10838  ; Cypriot # Lo   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE\n1083C         ; Cypriot # Lo       CYPRIOT SYLLABLE ZA\n1083F         ; Cypriot # Lo       CYPRIOT SYLLABLE ZO\n\n# Total code points: 55\n\n# ================================================\n\n2800..28FF    ; Braille # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678\n\n# Total code points: 256\n\n# ================================================\n\n1A00..1A16    ; Buginese # Lo  [23] BUGINESE LETTER KA..BUGINESE LETTER HA\n1A17..1A18    ; Buginese # Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n1A19..1A1A    ; Buginese # Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\n1A1B          ; Buginese # Mn       BUGINESE VOWEL SIGN AE\n1A1E..1A1F    ; Buginese # Po   [2] BUGINESE PALLAWA..BUGINESE END OF SECTION\n\n# Total code points: 30\n\n# ================================================\n\n03E2..03EF    ; Coptic # L&  [14] COPTIC CAPITAL LETTER SHEI..COPTIC SMALL LETTER DEI\n2C80..2CE4    ; Coptic # L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI\n2CE5..2CEA    ; Coptic # So   [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA\n2CEB..2CEE    ; Coptic # L&   [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA\n2CEF..2CF1    ; Coptic # Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\n2CF2..2CF3    ; Coptic # L&   [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI\n2CF9..2CFC    ; Coptic # Po   [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER\n2CFD          ; Coptic # No       COPTIC FRACTION ONE HALF\n2CFE..2CFF    ; Coptic # Po   [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER\n\n# Total code points: 137\n\n# ================================================\n\n1980..19AB    ; New_Tai_Lue # Lo  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA\n19B0..19C9    ; New_Tai_Lue # Lo  [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2\n19D0..19D9    ; New_Tai_Lue # Nd  [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE\n19DA          ; New_Tai_Lue # No       NEW TAI LUE THAM DIGIT ONE\n19DE..19DF    ; New_Tai_Lue # So   [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV\n\n# Total code points: 83\n\n# ================================================\n\n2C00..2C5F    ; Glagolitic # L&  [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI\n1E000..1E006  ; Glagolitic # Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n1E008..1E018  ; Glagolitic # Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n1E01B..1E021  ; Glagolitic # Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n1E023..1E024  ; Glagolitic # Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n1E026..1E02A  ; Glagolitic # Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n\n# Total code points: 134\n\n# ================================================\n\n2D30..2D67    ; Tifinagh # Lo  [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO\n2D6F          ; Tifinagh # Lm       TIFINAGH MODIFIER LETTER LABIALIZATION MARK\n2D70          ; Tifinagh # Po       TIFINAGH SEPARATOR MARK\n2D7F          ; Tifinagh # Mn       TIFINAGH CONSONANT JOINER\n\n# Total code points: 59\n\n# ================================================\n\nA800..A801    ; Syloti_Nagri # Lo   [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I\nA802          ; Syloti_Nagri # Mn       SYLOTI NAGRI SIGN DVISVARA\nA803..A805    ; Syloti_Nagri # Lo   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O\nA806          ; Syloti_Nagri # Mn       SYLOTI NAGRI SIGN HASANTA\nA807..A80A    ; Syloti_Nagri # Lo   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO\nA80B          ; Syloti_Nagri # Mn       SYLOTI NAGRI SIGN ANUSVARA\nA80C..A822    ; Syloti_Nagri # Lo  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO\nA823..A824    ; Syloti_Nagri # Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\nA825..A826    ; Syloti_Nagri # Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\nA827          ; Syloti_Nagri # Mc       SYLOTI NAGRI VOWEL SIGN OO\nA828..A82B    ; Syloti_Nagri # So   [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4\nA82C          ; Syloti_Nagri # Mn       SYLOTI NAGRI SIGN ALTERNATE HASANTA\n\n# Total code points: 45\n\n# ================================================\n\n103A0..103C3  ; Old_Persian # Lo  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA\n103C8..103CF  ; Old_Persian # Lo   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH\n103D0         ; Old_Persian # Po       OLD PERSIAN WORD DIVIDER\n103D1..103D5  ; Old_Persian # Nl   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED\n\n# Total code points: 50\n\n# ================================================\n\n10A00         ; Kharoshthi # Lo       KHAROSHTHI LETTER A\n10A01..10A03  ; Kharoshthi # Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n10A05..10A06  ; Kharoshthi # Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n10A0C..10A0F  ; Kharoshthi # Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n10A10..10A13  ; Kharoshthi # Lo   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA\n10A15..10A17  ; Kharoshthi # Lo   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA\n10A19..10A35  ; Kharoshthi # Lo  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA\n10A38..10A3A  ; Kharoshthi # Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\n10A3F         ; Kharoshthi # Mn       KHAROSHTHI VIRAMA\n10A40..10A48  ; Kharoshthi # No   [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF\n10A50..10A58  ; Kharoshthi # Po   [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES\n\n# Total code points: 68\n\n# ================================================\n\n1B00..1B03    ; Balinese # Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n1B04          ; Balinese # Mc       BALINESE SIGN BISAH\n1B05..1B33    ; Balinese # Lo  [47] BALINESE LETTER AKARA..BALINESE LETTER HA\n1B34          ; Balinese # Mn       BALINESE SIGN REREKAN\n1B35          ; Balinese # Mc       BALINESE VOWEL SIGN TEDUNG\n1B36..1B3A    ; Balinese # Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n1B3B          ; Balinese # Mc       BALINESE VOWEL SIGN RA REPA TEDUNG\n1B3C          ; Balinese # Mn       BALINESE VOWEL SIGN LA LENGA\n1B3D..1B41    ; Balinese # Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG\n1B42          ; Balinese # Mn       BALINESE VOWEL SIGN PEPET\n1B43..1B44    ; Balinese # Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG\n1B45..1B4C    ; Balinese # Lo   [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA\n1B4E..1B4F    ; Balinese # Po   [2] BALINESE INVERTED CARIK SIKI..BALINESE INVERTED CARIK PAREREN\n1B50..1B59    ; Balinese # Nd  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE\n1B5A..1B60    ; Balinese # Po   [7] BALINESE PANTI..BALINESE PAMENENG\n1B61..1B6A    ; Balinese # So  [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE\n1B6B..1B73    ; Balinese # Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\n1B74..1B7C    ; Balinese # So   [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING\n1B7D..1B7F    ; Balinese # Po   [3] BALINESE PANTI LANTANG..BALINESE PANTI BAWAK\n\n# Total code points: 127\n\n# ================================================\n\n12000..12399  ; Cuneiform # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U\n12400..1246E  ; Cuneiform # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM\n12470..12474  ; Cuneiform # Po   [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON\n12480..12543  ; Cuneiform # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU\n\n# Total code points: 1234\n\n# ================================================\n\n10900..10915  ; Phoenician # Lo  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU\n10916..1091B  ; Phoenician # No   [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE\n1091F         ; Phoenician # Po       PHOENICIAN WORD SEPARATOR\n\n# Total code points: 29\n\n# ================================================\n\nA840..A873    ; Phags_Pa # Lo  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU\nA874..A877    ; Phags_Pa # Po   [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD\n\n# Total code points: 56\n\n# ================================================\n\n07C0..07C9    ; Nko # Nd  [10] NKO DIGIT ZERO..NKO DIGIT NINE\n07CA..07EA    ; Nko # Lo  [33] NKO LETTER A..NKO LETTER JONA RA\n07EB..07F3    ; Nko # Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\n07F4..07F5    ; Nko # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE\n07F6          ; Nko # So       NKO SYMBOL OO DENNEN\n07F7..07F9    ; Nko # Po   [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK\n07FA          ; Nko # Lm       NKO LAJANYALAN\n07FD          ; Nko # Mn       NKO DANTAYALAN\n07FE..07FF    ; Nko # Sc   [2] NKO DOROME SIGN..NKO TAMAN SIGN\n\n# Total code points: 62\n\n# ================================================\n\n1B80..1B81    ; Sundanese # Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n1B82          ; Sundanese # Mc       SUNDANESE SIGN PANGWISAD\n1B83..1BA0    ; Sundanese # Lo  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA\n1BA1          ; Sundanese # Mc       SUNDANESE CONSONANT SIGN PAMINGKAL\n1BA2..1BA5    ; Sundanese # Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n1BA6..1BA7    ; Sundanese # Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\n1BA8..1BA9    ; Sundanese # Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n1BAA          ; Sundanese # Mc       SUNDANESE SIGN PAMAAEH\n1BAB..1BAD    ; Sundanese # Mn   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA\n1BAE..1BAF    ; Sundanese # Lo   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA\n1BB0..1BB9    ; Sundanese # Nd  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE\n1BBA..1BBF    ; Sundanese # Lo   [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M\n1CC0..1CC7    ; Sundanese # Po   [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA\n\n# Total code points: 72\n\n# ================================================\n\n1C00..1C23    ; Lepcha # Lo  [36] LEPCHA LETTER KA..LEPCHA LETTER A\n1C24..1C2B    ; Lepcha # Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\n1C2C..1C33    ; Lepcha # Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n1C34..1C35    ; Lepcha # Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\n1C36..1C37    ; Lepcha # Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\n1C3B..1C3F    ; Lepcha # Po   [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK\n1C40..1C49    ; Lepcha # Nd  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE\n1C4D..1C4F    ; Lepcha # Lo   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA\n\n# Total code points: 74\n\n# ================================================\n\n1C50..1C59    ; Ol_Chiki # Nd  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE\n1C5A..1C77    ; Ol_Chiki # Lo  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH\n1C78..1C7D    ; Ol_Chiki # Lm   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD\n1C7E..1C7F    ; Ol_Chiki # Po   [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD\n\n# Total code points: 48\n\n# ================================================\n\nA500..A60B    ; Vai # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG\nA60C          ; Vai # Lm       VAI SYLLABLE LENGTHENER\nA60D..A60F    ; Vai # Po   [3] VAI COMMA..VAI QUESTION MARK\nA610..A61F    ; Vai # Lo  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG\nA620..A629    ; Vai # Nd  [10] VAI DIGIT ZERO..VAI DIGIT NINE\nA62A..A62B    ; Vai # Lo   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO\n\n# Total code points: 300\n\n# ================================================\n\nA880..A881    ; Saurashtra # Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\nA882..A8B3    ; Saurashtra # Lo  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA\nA8B4..A8C3    ; Saurashtra # Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\nA8C4..A8C5    ; Saurashtra # Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\nA8CE..A8CF    ; Saurashtra # Po   [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA\nA8D0..A8D9    ; Saurashtra # Nd  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE\n\n# Total code points: 82\n\n# ================================================\n\nA900..A909    ; Kayah_Li # Nd  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE\nA90A..A925    ; Kayah_Li # Lo  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO\nA926..A92D    ; Kayah_Li # Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\nA92F          ; Kayah_Li # Po       KAYAH LI SIGN SHYA\n\n# Total code points: 47\n\n# ================================================\n\nA930..A946    ; Rejang # Lo  [23] REJANG LETTER KA..REJANG LETTER A\nA947..A951    ; Rejang # Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\nA952..A953    ; Rejang # Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA\nA95F          ; Rejang # Po       REJANG SECTION MARK\n\n# Total code points: 37\n\n# ================================================\n\n10280..1029C  ; Lycian # Lo  [29] LYCIAN LETTER A..LYCIAN LETTER X\n\n# Total code points: 29\n\n# ================================================\n\n102A0..102D0  ; Carian # Lo  [49] CARIAN LETTER A..CARIAN LETTER UUU3\n\n# Total code points: 49\n\n# ================================================\n\n10920..10939  ; Lydian # Lo  [26] LYDIAN LETTER A..LYDIAN LETTER C\n1093F         ; Lydian # Po       LYDIAN TRIANGULAR MARK\n\n# Total code points: 27\n\n# ================================================\n\nAA00..AA28    ; Cham # Lo  [41] CHAM LETTER A..CHAM LETTER HA\nAA29..AA2E    ; Cham # Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\nAA2F..AA30    ; Cham # Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\nAA31..AA32    ; Cham # Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\nAA33..AA34    ; Cham # Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\nAA35..AA36    ; Cham # Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\nAA40..AA42    ; Cham # Lo   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG\nAA43          ; Cham # Mn       CHAM CONSONANT SIGN FINAL NG\nAA44..AA4B    ; Cham # Lo   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS\nAA4C          ; Cham # Mn       CHAM CONSONANT SIGN FINAL M\nAA4D          ; Cham # Mc       CHAM CONSONANT SIGN FINAL H\nAA50..AA59    ; Cham # Nd  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE\nAA5C..AA5F    ; Cham # Po   [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA\n\n# Total code points: 83\n\n# ================================================\n\n1A20..1A54    ; Tai_Tham # Lo  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA\n1A55          ; Tai_Tham # Mc       TAI THAM CONSONANT SIGN MEDIAL RA\n1A56          ; Tai_Tham # Mn       TAI THAM CONSONANT SIGN MEDIAL LA\n1A57          ; Tai_Tham # Mc       TAI THAM CONSONANT SIGN LA TANG LAI\n1A58..1A5E    ; Tai_Tham # Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n1A60          ; Tai_Tham # Mn       TAI THAM SIGN SAKOT\n1A61          ; Tai_Tham # Mc       TAI THAM VOWEL SIGN A\n1A62          ; Tai_Tham # Mn       TAI THAM VOWEL SIGN MAI SAT\n1A63..1A64    ; Tai_Tham # Mc   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA\n1A65..1A6C    ; Tai_Tham # Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n1A6D..1A72    ; Tai_Tham # Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\n1A73..1A7C    ; Tai_Tham # Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\n1A7F          ; Tai_Tham # Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT\n1A80..1A89    ; Tai_Tham # Nd  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE\n1A90..1A99    ; Tai_Tham # Nd  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE\n1AA0..1AA6    ; Tai_Tham # Po   [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA\n1AA7          ; Tai_Tham # Lm       TAI THAM SIGN MAI YAMOK\n1AA8..1AAD    ; Tai_Tham # Po   [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG\n\n# Total code points: 127\n\n# ================================================\n\nAA80..AAAF    ; Tai_Viet # Lo  [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O\nAAB0          ; Tai_Viet # Mn       TAI VIET MAI KANG\nAAB1          ; Tai_Viet # Lo       TAI VIET VOWEL AA\nAAB2..AAB4    ; Tai_Viet # Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\nAAB5..AAB6    ; Tai_Viet # Lo   [2] TAI VIET VOWEL E..TAI VIET VOWEL O\nAAB7..AAB8    ; Tai_Viet # Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\nAAB9..AABD    ; Tai_Viet # Lo   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN\nAABE..AABF    ; Tai_Viet # Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\nAAC0          ; Tai_Viet # Lo       TAI VIET TONE MAI NUENG\nAAC1          ; Tai_Viet # Mn       TAI VIET TONE MAI THO\nAAC2          ; Tai_Viet # Lo       TAI VIET TONE MAI SONG\nAADB..AADC    ; Tai_Viet # Lo   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG\nAADD          ; Tai_Viet # Lm       TAI VIET SYMBOL SAM\nAADE..AADF    ; Tai_Viet # Po   [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI\n\n# Total code points: 72\n\n# ================================================\n\n10B00..10B35  ; Avestan # Lo  [54] AVESTAN LETTER A..AVESTAN LETTER HE\n10B39..10B3F  ; Avestan # Po   [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION\n\n# Total code points: 61\n\n# ================================================\n\n13000..1342F  ; Egyptian_Hieroglyphs # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D\n13430..1343F  ; Egyptian_Hieroglyphs # Cf  [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE\n13440         ; Egyptian_Hieroglyphs # Mn       EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY\n13441..13446  ; Egyptian_Hieroglyphs # Lo   [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN\n13447..13455  ; Egyptian_Hieroglyphs # Mn  [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED\n13460..143FA  ; Egyptian_Hieroglyphs # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA\n\n# Total code points: 5105\n\n# ================================================\n\n0800..0815    ; Samaritan # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF\n0816..0819    ; Samaritan # Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\n081A          ; Samaritan # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT\n081B..0823    ; Samaritan # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n0824          ; Samaritan # Lm       SAMARITAN MODIFIER LETTER SHORT A\n0825..0827    ; Samaritan # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n0828          ; Samaritan # Lm       SAMARITAN MODIFIER LETTER I\n0829..082D    ; Samaritan # Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\n0830..083E    ; Samaritan # Po  [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU\n\n# Total code points: 61\n\n# ================================================\n\nA4D0..A4F7    ; Lisu # Lo  [40] LISU LETTER BA..LISU LETTER OE\nA4F8..A4FD    ; Lisu # Lm   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU\nA4FE..A4FF    ; Lisu # Po   [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP\n11FB0         ; Lisu # Lo       LISU LETTER YHA\n\n# Total code points: 49\n\n# ================================================\n\nA6A0..A6E5    ; Bamum # Lo  [70] BAMUM LETTER A..BAMUM LETTER KI\nA6E6..A6EF    ; Bamum # Nl  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM\nA6F0..A6F1    ; Bamum # Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\nA6F2..A6F7    ; Bamum # Po   [6] BAMUM NJAEMLI..BAMUM QUESTION MARK\n16800..16A38  ; Bamum # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ\n\n# Total code points: 657\n\n# ================================================\n\nA980..A982    ; Javanese # Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\nA983          ; Javanese # Mc       JAVANESE SIGN WIGNYAN\nA984..A9B2    ; Javanese # Lo  [47] JAVANESE LETTER A..JAVANESE LETTER HA\nA9B3          ; Javanese # Mn       JAVANESE SIGN CECAK TELU\nA9B4..A9B5    ; Javanese # Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\nA9B6..A9B9    ; Javanese # Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\nA9BA..A9BB    ; Javanese # Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\nA9BC..A9BD    ; Javanese # Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET\nA9BE..A9C0    ; Javanese # Mc   [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON\nA9C1..A9CD    ; Javanese # Po  [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH\nA9D0..A9D9    ; Javanese # Nd  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE\nA9DE..A9DF    ; Javanese # Po   [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN\n\n# Total code points: 90\n\n# ================================================\n\nAAE0..AAEA    ; Meetei_Mayek # Lo  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA\nAAEB          ; Meetei_Mayek # Mc       MEETEI MAYEK VOWEL SIGN II\nAAEC..AAED    ; Meetei_Mayek # Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\nAAEE..AAEF    ; Meetei_Mayek # Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\nAAF0..AAF1    ; Meetei_Mayek # Po   [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM\nAAF2          ; Meetei_Mayek # Lo       MEETEI MAYEK ANJI\nAAF3..AAF4    ; Meetei_Mayek # Lm   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK\nAAF5          ; Meetei_Mayek # Mc       MEETEI MAYEK VOWEL SIGN VISARGA\nAAF6          ; Meetei_Mayek # Mn       MEETEI MAYEK VIRAMA\nABC0..ABE2    ; Meetei_Mayek # Lo  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM\nABE3..ABE4    ; Meetei_Mayek # Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\nABE5          ; Meetei_Mayek # Mn       MEETEI MAYEK VOWEL SIGN ANAP\nABE6..ABE7    ; Meetei_Mayek # Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\nABE8          ; Meetei_Mayek # Mn       MEETEI MAYEK VOWEL SIGN UNAP\nABE9..ABEA    ; Meetei_Mayek # Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\nABEB          ; Meetei_Mayek # Po       MEETEI MAYEK CHEIKHEI\nABEC          ; Meetei_Mayek # Mc       MEETEI MAYEK LUM IYEK\nABED          ; Meetei_Mayek # Mn       MEETEI MAYEK APUN IYEK\nABF0..ABF9    ; Meetei_Mayek # Nd  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE\n\n# Total code points: 79\n\n# ================================================\n\n10840..10855  ; Imperial_Aramaic # Lo  [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW\n10857         ; Imperial_Aramaic # Po       IMPERIAL ARAMAIC SECTION SIGN\n10858..1085F  ; Imperial_Aramaic # No   [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND\n\n# Total code points: 31\n\n# ================================================\n\n10A60..10A7C  ; Old_South_Arabian # Lo  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH\n10A7D..10A7E  ; Old_South_Arabian # No   [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY\n10A7F         ; Old_South_Arabian # Po       OLD SOUTH ARABIAN NUMERIC INDICATOR\n\n# Total code points: 32\n\n# ================================================\n\n10B40..10B55  ; Inscriptional_Parthian # Lo  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW\n10B58..10B5F  ; Inscriptional_Parthian # No   [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND\n\n# Total code points: 30\n\n# ================================================\n\n10B60..10B72  ; Inscriptional_Pahlavi # Lo  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW\n10B78..10B7F  ; Inscriptional_Pahlavi # No   [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND\n\n# Total code points: 27\n\n# ================================================\n\n10C00..10C48  ; Old_Turkic # Lo  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH\n\n# Total code points: 73\n\n# ================================================\n\n11080..11081  ; Kaithi # Mn   [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA\n11082         ; Kaithi # Mc       KAITHI SIGN VISARGA\n11083..110AF  ; Kaithi # Lo  [45] KAITHI LETTER A..KAITHI LETTER HA\n110B0..110B2  ; Kaithi # Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\n110B3..110B6  ; Kaithi # Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n110B7..110B8  ; Kaithi # Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\n110B9..110BA  ; Kaithi # Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\n110BB..110BC  ; Kaithi # Po   [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN\n110BD         ; Kaithi # Cf       KAITHI NUMBER SIGN\n110BE..110C1  ; Kaithi # Po   [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA\n110C2         ; Kaithi # Mn       KAITHI VOWEL SIGN VOCALIC R\n110CD         ; Kaithi # Cf       KAITHI NUMBER SIGN ABOVE\n\n# Total code points: 68\n\n# ================================================\n\n1BC0..1BE5    ; Batak # Lo  [38] BATAK LETTER A..BATAK LETTER U\n1BE6          ; Batak # Mn       BATAK SIGN TOMPI\n1BE7          ; Batak # Mc       BATAK VOWEL SIGN E\n1BE8..1BE9    ; Batak # Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n1BEA..1BEC    ; Batak # Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\n1BED          ; Batak # Mn       BATAK VOWEL SIGN KARO O\n1BEE          ; Batak # Mc       BATAK VOWEL SIGN U\n1BEF..1BF1    ; Batak # Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n1BF2..1BF3    ; Batak # Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN\n1BFC..1BFF    ; Batak # Po   [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT\n\n# Total code points: 56\n\n# ================================================\n\n11000         ; Brahmi # Mc       BRAHMI SIGN CANDRABINDU\n11001         ; Brahmi # Mn       BRAHMI SIGN ANUSVARA\n11002         ; Brahmi # Mc       BRAHMI SIGN VISARGA\n11003..11037  ; Brahmi # Lo  [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA\n11038..11046  ; Brahmi # Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\n11047..1104D  ; Brahmi # Po   [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS\n11052..11065  ; Brahmi # No  [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND\n11066..1106F  ; Brahmi # Nd  [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE\n11070         ; Brahmi # Mn       BRAHMI SIGN OLD TAMIL VIRAMA\n11071..11072  ; Brahmi # Lo   [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O\n11073..11074  ; Brahmi # Mn   [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O\n11075         ; Brahmi # Lo       BRAHMI LETTER OLD TAMIL LLA\n1107F         ; Brahmi # Mn       BRAHMI NUMBER JOINER\n\n# Total code points: 115\n\n# ================================================\n\n0840..0858    ; Mandaic # Lo  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN\n0859..085B    ; Mandaic # Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\n085E          ; Mandaic # Po       MANDAIC PUNCTUATION\n\n# Total code points: 29\n\n# ================================================\n\n11100..11102  ; Chakma # Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n11103..11126  ; Chakma # Lo  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA\n11127..1112B  ; Chakma # Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n1112C         ; Chakma # Mc       CHAKMA VOWEL SIGN E\n1112D..11134  ; Chakma # Mn   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA\n11136..1113F  ; Chakma # Nd  [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE\n11140..11143  ; Chakma # Po   [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK\n11144         ; Chakma # Lo       CHAKMA LETTER LHAA\n11145..11146  ; Chakma # Mc   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI\n11147         ; Chakma # Lo       CHAKMA LETTER VAA\n\n# Total code points: 71\n\n# ================================================\n\n109A0..109B7  ; Meroitic_Cursive # Lo  [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA\n109BC..109BD  ; Meroitic_Cursive # No   [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF\n109BE..109BF  ; Meroitic_Cursive # Lo   [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN\n109C0..109CF  ; Meroitic_Cursive # No  [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY\n109D2..109FF  ; Meroitic_Cursive # No  [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS\n\n# Total code points: 90\n\n# ================================================\n\n10980..1099F  ; Meroitic_Hieroglyphs # Lo  [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2\n\n# Total code points: 32\n\n# ================================================\n\n16F00..16F4A  ; Miao # Lo  [75] MIAO LETTER PA..MIAO LETTER RTE\n16F4F         ; Miao # Mn       MIAO SIGN CONSONANT MODIFIER BAR\n16F50         ; Miao # Lo       MIAO LETTER NASALIZATION\n16F51..16F87  ; Miao # Mc  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI\n16F8F..16F92  ; Miao # Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n16F93..16F9F  ; Miao # Lm  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8\n\n# Total code points: 149\n\n# ================================================\n\n11180..11181  ; Sharada # Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n11182         ; Sharada # Mc       SHARADA SIGN VISARGA\n11183..111B2  ; Sharada # Lo  [48] SHARADA LETTER A..SHARADA LETTER HA\n111B3..111B5  ; Sharada # Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\n111B6..111BE  ; Sharada # Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n111BF..111C0  ; Sharada # Mc   [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA\n111C1..111C4  ; Sharada # Lo   [4] SHARADA SIGN AVAGRAHA..SHARADA OM\n111C5..111C8  ; Sharada # Po   [4] SHARADA DANDA..SHARADA SEPARATOR\n111C9..111CC  ; Sharada # Mn   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK\n111CD         ; Sharada # Po       SHARADA SUTRA MARK\n111CE         ; Sharada # Mc       SHARADA VOWEL SIGN PRISHTHAMATRA E\n111CF         ; Sharada # Mn       SHARADA SIGN INVERTED CANDRABINDU\n111D0..111D9  ; Sharada # Nd  [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE\n111DA         ; Sharada # Lo       SHARADA EKAM\n111DB         ; Sharada # Po       SHARADA SIGN SIDDHAM\n111DC         ; Sharada # Lo       SHARADA HEADSTROKE\n111DD..111DF  ; Sharada # Po   [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2\n11B60         ; Sharada # Mn       SHARADA VOWEL SIGN OE\n11B61         ; Sharada # Mc       SHARADA VOWEL SIGN OOE\n11B62..11B64  ; Sharada # Mn   [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E\n11B65         ; Sharada # Mc       SHARADA VOWEL SIGN SHORT O\n11B66         ; Sharada # Mn       SHARADA VOWEL SIGN CANDRA E\n11B67         ; Sharada # Mc       SHARADA VOWEL SIGN CANDRA O\n\n# Total code points: 104\n\n# ================================================\n\n110D0..110E8  ; Sora_Sompeng # Lo  [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE\n110F0..110F9  ; Sora_Sompeng # Nd  [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE\n\n# Total code points: 35\n\n# ================================================\n\n11680..116AA  ; Takri # Lo  [43] TAKRI LETTER A..TAKRI LETTER RRA\n116AB         ; Takri # Mn       TAKRI SIGN ANUSVARA\n116AC         ; Takri # Mc       TAKRI SIGN VISARGA\n116AD         ; Takri # Mn       TAKRI VOWEL SIGN AA\n116AE..116AF  ; Takri # Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\n116B0..116B5  ; Takri # Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n116B6         ; Takri # Mc       TAKRI SIGN VIRAMA\n116B7         ; Takri # Mn       TAKRI SIGN NUKTA\n116B8         ; Takri # Lo       TAKRI LETTER ARCHAIC KHA\n116B9         ; Takri # Po       TAKRI ABBREVIATION SIGN\n116C0..116C9  ; Takri # Nd  [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE\n\n# Total code points: 68\n\n# ================================================\n\n10530..10563  ; Caucasian_Albanian # Lo  [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW\n1056F         ; Caucasian_Albanian # Po       CAUCASIAN ALBANIAN CITATION MARK\n\n# Total code points: 53\n\n# ================================================\n\n16AD0..16AED  ; Bassa_Vah # Lo  [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I\n16AF0..16AF4  ; Bassa_Vah # Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\n16AF5         ; Bassa_Vah # Po       BASSA VAH FULL STOP\n\n# Total code points: 36\n\n# ================================================\n\n1BC00..1BC6A  ; Duployan # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M\n1BC70..1BC7C  ; Duployan # Lo  [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK\n1BC80..1BC88  ; Duployan # Lo   [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL\n1BC90..1BC99  ; Duployan # Lo  [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW\n1BC9C         ; Duployan # So       DUPLOYAN SIGN O WITH CROSS\n1BC9D..1BC9E  ; Duployan # Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\n1BC9F         ; Duployan # Po       DUPLOYAN PUNCTUATION CHINOOK FULL STOP\n\n# Total code points: 143\n\n# ================================================\n\n10500..10527  ; Elbasan # Lo  [40] ELBASAN LETTER A..ELBASAN LETTER KHE\n\n# Total code points: 40\n\n# ================================================\n\n11300..11301  ; Grantha # Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n11302..11303  ; Grantha # Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\n11305..1130C  ; Grantha # Lo   [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L\n1130F..11310  ; Grantha # Lo   [2] GRANTHA LETTER EE..GRANTHA LETTER AI\n11313..11328  ; Grantha # Lo  [22] GRANTHA LETTER OO..GRANTHA LETTER NA\n1132A..11330  ; Grantha # Lo   [7] GRANTHA LETTER PA..GRANTHA LETTER RA\n11332..11333  ; Grantha # Lo   [2] GRANTHA LETTER LA..GRANTHA LETTER LLA\n11335..11339  ; Grantha # Lo   [5] GRANTHA LETTER VA..GRANTHA LETTER HA\n1133C         ; Grantha # Mn       GRANTHA SIGN NUKTA\n1133D         ; Grantha # Lo       GRANTHA SIGN AVAGRAHA\n1133E..1133F  ; Grantha # Mc   [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I\n11340         ; Grantha # Mn       GRANTHA VOWEL SIGN II\n11341..11344  ; Grantha # Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\n11347..11348  ; Grantha # Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\n1134B..1134D  ; Grantha # Mc   [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA\n11350         ; Grantha # Lo       GRANTHA OM\n11357         ; Grantha # Mc       GRANTHA AU LENGTH MARK\n1135D..11361  ; Grantha # Lo   [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL\n11362..11363  ; Grantha # Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\n11366..1136C  ; Grantha # Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\n11370..11374  ; Grantha # Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\n\n# Total code points: 85\n\n# ================================================\n\n16B00..16B2F  ; Pahawh_Hmong # Lo  [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU\n16B30..16B36  ; Pahawh_Hmong # Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\n16B37..16B3B  ; Pahawh_Hmong # Po   [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM\n16B3C..16B3F  ; Pahawh_Hmong # So   [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB\n16B40..16B43  ; Pahawh_Hmong # Lm   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM\n16B44         ; Pahawh_Hmong # Po       PAHAWH HMONG SIGN XAUS\n16B45         ; Pahawh_Hmong # So       PAHAWH HMONG SIGN CIM TSOV ROG\n16B50..16B59  ; Pahawh_Hmong # Nd  [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE\n16B5B..16B61  ; Pahawh_Hmong # No   [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS\n16B63..16B77  ; Pahawh_Hmong # Lo  [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS\n16B7D..16B8F  ; Pahawh_Hmong # Lo  [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ\n\n# Total code points: 127\n\n# ================================================\n\n11200..11211  ; Khojki # Lo  [18] KHOJKI LETTER A..KHOJKI LETTER JJA\n11213..1122B  ; Khojki # Lo  [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA\n1122C..1122E  ; Khojki # Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\n1122F..11231  ; Khojki # Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n11232..11233  ; Khojki # Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\n11234         ; Khojki # Mn       KHOJKI SIGN ANUSVARA\n11235         ; Khojki # Mc       KHOJKI SIGN VIRAMA\n11236..11237  ; Khojki # Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\n11238..1123D  ; Khojki # Po   [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN\n1123E         ; Khojki # Mn       KHOJKI SIGN SUKUN\n1123F..11240  ; Khojki # Lo   [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I\n11241         ; Khojki # Mn       KHOJKI VOWEL SIGN VOCALIC R\n\n# Total code points: 65\n\n# ================================================\n\n10600..10736  ; Linear_A # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664\n10740..10755  ; Linear_A # Lo  [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE\n10760..10767  ; Linear_A # Lo   [8] LINEAR A SIGN A800..LINEAR A SIGN A807\n\n# Total code points: 341\n\n# ================================================\n\n11150..11172  ; Mahajani # Lo  [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA\n11173         ; Mahajani # Mn       MAHAJANI SIGN NUKTA\n11174..11175  ; Mahajani # Po   [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK\n11176         ; Mahajani # Lo       MAHAJANI LIGATURE SHRI\n\n# Total code points: 39\n\n# ================================================\n\n10AC0..10AC7  ; Manichaean # Lo   [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW\n10AC8         ; Manichaean # So       MANICHAEAN SIGN UD\n10AC9..10AE4  ; Manichaean # Lo  [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW\n10AE5..10AE6  ; Manichaean # Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\n10AEB..10AEF  ; Manichaean # No   [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED\n10AF0..10AF6  ; Manichaean # Po   [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER\n\n# Total code points: 51\n\n# ================================================\n\n1E800..1E8C4  ; Mende_Kikakui # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON\n1E8C7..1E8CF  ; Mende_Kikakui # No   [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE\n1E8D0..1E8D6  ; Mende_Kikakui # Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\n\n# Total code points: 213\n\n# ================================================\n\n11600..1162F  ; Modi # Lo  [48] MODI LETTER A..MODI LETTER LLA\n11630..11632  ; Modi # Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\n11633..1163A  ; Modi # Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n1163B..1163C  ; Modi # Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\n1163D         ; Modi # Mn       MODI SIGN ANUSVARA\n1163E         ; Modi # Mc       MODI SIGN VISARGA\n1163F..11640  ; Modi # Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\n11641..11643  ; Modi # Po   [3] MODI DANDA..MODI ABBREVIATION SIGN\n11644         ; Modi # Lo       MODI SIGN HUVA\n11650..11659  ; Modi # Nd  [10] MODI DIGIT ZERO..MODI DIGIT NINE\n\n# Total code points: 79\n\n# ================================================\n\n16A40..16A5E  ; Mro # Lo  [31] MRO LETTER TA..MRO LETTER TEK\n16A60..16A69  ; Mro # Nd  [10] MRO DIGIT ZERO..MRO DIGIT NINE\n16A6E..16A6F  ; Mro # Po   [2] MRO DANDA..MRO DOUBLE DANDA\n\n# Total code points: 43\n\n# ================================================\n\n10A80..10A9C  ; Old_North_Arabian # Lo  [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH\n10A9D..10A9F  ; Old_North_Arabian # No   [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY\n\n# Total code points: 32\n\n# ================================================\n\n10880..1089E  ; Nabataean # Lo  [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW\n108A7..108AF  ; Nabataean # No   [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED\n\n# Total code points: 40\n\n# ================================================\n\n10860..10876  ; Palmyrene # Lo  [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW\n10877..10878  ; Palmyrene # So   [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON\n10879..1087F  ; Palmyrene # No   [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY\n\n# Total code points: 32\n\n# ================================================\n\n11AC0..11AF8  ; Pau_Cin_Hau # Lo  [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL\n\n# Total code points: 57\n\n# ================================================\n\n10350..10375  ; Old_Permic # Lo  [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA\n10376..1037A  ; Old_Permic # Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n\n# Total code points: 43\n\n# ================================================\n\n10B80..10B91  ; Psalter_Pahlavi # Lo  [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW\n10B99..10B9C  ; Psalter_Pahlavi # Po   [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT\n10BA9..10BAF  ; Psalter_Pahlavi # No   [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED\n\n# Total code points: 29\n\n# ================================================\n\n11580..115AE  ; Siddham # Lo  [47] SIDDHAM LETTER A..SIDDHAM LETTER HA\n115AF..115B1  ; Siddham # Mc   [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II\n115B2..115B5  ; Siddham # Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n115B8..115BB  ; Siddham # Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\n115BC..115BD  ; Siddham # Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n115BE         ; Siddham # Mc       SIDDHAM SIGN VISARGA\n115BF..115C0  ; Siddham # Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\n115C1..115D7  ; Siddham # Po  [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES\n115D8..115DB  ; Siddham # Lo   [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U\n115DC..115DD  ; Siddham # Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n\n# Total code points: 92\n\n# ================================================\n\n112B0..112DE  ; Khudawadi # Lo  [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA\n112DF         ; Khudawadi # Mn       KHUDAWADI SIGN ANUSVARA\n112E0..112E2  ; Khudawadi # Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\n112E3..112EA  ; Khudawadi # Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\n112F0..112F9  ; Khudawadi # Nd  [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE\n\n# Total code points: 69\n\n# ================================================\n\n11480..114AF  ; Tirhuta # Lo  [48] TIRHUTA ANJI..TIRHUTA LETTER HA\n114B0..114B2  ; Tirhuta # Mc   [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II\n114B3..114B8  ; Tirhuta # Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n114B9         ; Tirhuta # Mc       TIRHUTA VOWEL SIGN E\n114BA         ; Tirhuta # Mn       TIRHUTA VOWEL SIGN SHORT E\n114BB..114BE  ; Tirhuta # Mc   [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU\n114BF..114C0  ; Tirhuta # Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n114C1         ; Tirhuta # Mc       TIRHUTA SIGN VISARGA\n114C2..114C3  ; Tirhuta # Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\n114C4..114C5  ; Tirhuta # Lo   [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG\n114C6         ; Tirhuta # Po       TIRHUTA ABBREVIATION SIGN\n114C7         ; Tirhuta # Lo       TIRHUTA OM\n114D0..114D9  ; Tirhuta # Nd  [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE\n\n# Total code points: 82\n\n# ================================================\n\n118A0..118DF  ; Warang_Citi # L&  [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO\n118E0..118E9  ; Warang_Citi # Nd  [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE\n118EA..118F2  ; Warang_Citi # No   [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY\n118FF         ; Warang_Citi # Lo       WARANG CITI OM\n\n# Total code points: 84\n\n# ================================================\n\n11700..1171A  ; Ahom # Lo  [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA\n1171D         ; Ahom # Mn       AHOM CONSONANT SIGN MEDIAL LA\n1171E         ; Ahom # Mc       AHOM CONSONANT SIGN MEDIAL RA\n1171F         ; Ahom # Mn       AHOM CONSONANT SIGN MEDIAL LIGATING RA\n11720..11721  ; Ahom # Mc   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA\n11722..11725  ; Ahom # Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n11726         ; Ahom # Mc       AHOM VOWEL SIGN E\n11727..1172B  ; Ahom # Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\n11730..11739  ; Ahom # Nd  [10] AHOM DIGIT ZERO..AHOM DIGIT NINE\n1173A..1173B  ; Ahom # No   [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY\n1173C..1173E  ; Ahom # Po   [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI\n1173F         ; Ahom # So       AHOM SYMBOL VI\n11740..11746  ; Ahom # Lo   [7] AHOM LETTER CA..AHOM LETTER LLA\n\n# Total code points: 65\n\n# ================================================\n\n14400..14646  ; Anatolian_Hieroglyphs # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530\n\n# Total code points: 583\n\n# ================================================\n\n108E0..108F2  ; Hatran # Lo  [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH\n108F4..108F5  ; Hatran # Lo   [2] HATRAN LETTER SHIN..HATRAN LETTER TAW\n108FB..108FF  ; Hatran # No   [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED\n\n# Total code points: 26\n\n# ================================================\n\n11280..11286  ; Multani # Lo   [7] MULTANI LETTER A..MULTANI LETTER GA\n11288         ; Multani # Lo       MULTANI LETTER GHA\n1128A..1128D  ; Multani # Lo   [4] MULTANI LETTER CA..MULTANI LETTER JJA\n1128F..1129D  ; Multani # Lo  [15] MULTANI LETTER NYA..MULTANI LETTER BA\n1129F..112A8  ; Multani # Lo  [10] MULTANI LETTER BHA..MULTANI LETTER RHA\n112A9         ; Multani # Po       MULTANI SECTION MARK\n\n# Total code points: 38\n\n# ================================================\n\n10C80..10CB2  ; Old_Hungarian # L&  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US\n10CC0..10CF2  ; Old_Hungarian # L&  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US\n10CFA..10CFF  ; Old_Hungarian # No   [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND\n\n# Total code points: 108\n\n# ================================================\n\n1D800..1D9FF  ; SignWriting # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD\n1DA00..1DA36  ; SignWriting # Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\n1DA37..1DA3A  ; SignWriting # So   [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE\n1DA3B..1DA6C  ; SignWriting # Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\n1DA6D..1DA74  ; SignWriting # So   [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING\n1DA75         ; SignWriting # Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\n1DA76..1DA83  ; SignWriting # So  [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH\n1DA84         ; SignWriting # Mn       SIGNWRITING LOCATION HEAD NECK\n1DA85..1DA86  ; SignWriting # So   [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS\n1DA87..1DA8B  ; SignWriting # Po   [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS\n1DA9B..1DA9F  ; SignWriting # Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\n1DAA1..1DAAF  ; SignWriting # Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\n\n# Total code points: 672\n\n# ================================================\n\n1E900..1E943  ; Adlam # L&  [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA\n1E944..1E94A  ; Adlam # Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\n1E94B         ; Adlam # Lm       ADLAM NASALIZATION MARK\n1E950..1E959  ; Adlam # Nd  [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE\n1E95E..1E95F  ; Adlam # Po   [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK\n\n# Total code points: 88\n\n# ================================================\n\n11C00..11C08  ; Bhaiksuki # Lo   [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L\n11C0A..11C2E  ; Bhaiksuki # Lo  [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA\n11C2F         ; Bhaiksuki # Mc       BHAIKSUKI VOWEL SIGN AA\n11C30..11C36  ; Bhaiksuki # Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n11C38..11C3D  ; Bhaiksuki # Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n11C3E         ; Bhaiksuki # Mc       BHAIKSUKI SIGN VISARGA\n11C3F         ; Bhaiksuki # Mn       BHAIKSUKI SIGN VIRAMA\n11C40         ; Bhaiksuki # Lo       BHAIKSUKI SIGN AVAGRAHA\n11C41..11C45  ; Bhaiksuki # Po   [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2\n11C50..11C59  ; Bhaiksuki # Nd  [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE\n11C5A..11C6C  ; Bhaiksuki # No  [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK\n\n# Total code points: 97\n\n# ================================================\n\n11C70..11C71  ; Marchen # Po   [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD\n11C72..11C8F  ; Marchen # Lo  [30] MARCHEN LETTER KA..MARCHEN LETTER A\n11C92..11CA7  ; Marchen # Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n11CA9         ; Marchen # Mc       MARCHEN SUBJOINED LETTER YA\n11CAA..11CB0  ; Marchen # Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n11CB1         ; Marchen # Mc       MARCHEN VOWEL SIGN I\n11CB2..11CB3  ; Marchen # Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n11CB4         ; Marchen # Mc       MARCHEN VOWEL SIGN O\n11CB5..11CB6  ; Marchen # Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n\n# Total code points: 68\n\n# ================================================\n\n11400..11434  ; Newa # Lo  [53] NEWA LETTER A..NEWA LETTER HA\n11435..11437  ; Newa # Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\n11438..1143F  ; Newa # Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n11440..11441  ; Newa # Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\n11442..11444  ; Newa # Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\n11445         ; Newa # Mc       NEWA SIGN VISARGA\n11446         ; Newa # Mn       NEWA SIGN NUKTA\n11447..1144A  ; Newa # Lo   [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI\n1144B..1144F  ; Newa # Po   [5] NEWA DANDA..NEWA ABBREVIATION SIGN\n11450..11459  ; Newa # Nd  [10] NEWA DIGIT ZERO..NEWA DIGIT NINE\n1145A..1145B  ; Newa # Po   [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK\n1145D         ; Newa # Po       NEWA INSERTION SIGN\n1145E         ; Newa # Mn       NEWA SANDHI MARK\n1145F..11461  ; Newa # Lo   [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA\n\n# Total code points: 97\n\n# ================================================\n\n104B0..104D3  ; Osage # L&  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA\n104D8..104FB  ; Osage # L&  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA\n\n# Total code points: 72\n\n# ================================================\n\n16FE0         ; Tangut # Lm       TANGUT ITERATION MARK\n17000..18AFF  ; Tangut # Lo [6912] TANGUT IDEOGRAPH-17000..TANGUT COMPONENT-768\n18D00..18D1E  ; Tangut # Lo  [31] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D1E\n18D80..18DF2  ; Tangut # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883\n\n# Total code points: 7059\n\n# ================================================\n\n11D00..11D06  ; Masaram_Gondi # Lo   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E\n11D08..11D09  ; Masaram_Gondi # Lo   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O\n11D0B..11D30  ; Masaram_Gondi # Lo  [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA\n11D31..11D36  ; Masaram_Gondi # Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n11D3A         ; Masaram_Gondi # Mn       MASARAM GONDI VOWEL SIGN E\n11D3C..11D3D  ; Masaram_Gondi # Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n11D3F..11D45  ; Masaram_Gondi # Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\n11D46         ; Masaram_Gondi # Lo       MASARAM GONDI REPHA\n11D47         ; Masaram_Gondi # Mn       MASARAM GONDI RA-KARA\n11D50..11D59  ; Masaram_Gondi # Nd  [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE\n\n# Total code points: 75\n\n# ================================================\n\n16FE1         ; Nushu # Lm       NUSHU ITERATION MARK\n1B170..1B2FB  ; Nushu # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB\n\n# Total code points: 397\n\n# ================================================\n\n11A50         ; Soyombo # Lo       SOYOMBO LETTER A\n11A51..11A56  ; Soyombo # Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n11A57..11A58  ; Soyombo # Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\n11A59..11A5B  ; Soyombo # Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n11A5C..11A89  ; Soyombo # Lo  [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA\n11A8A..11A96  ; Soyombo # Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n11A97         ; Soyombo # Mc       SOYOMBO SIGN VISARGA\n11A98..11A99  ; Soyombo # Mn   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER\n11A9A..11A9C  ; Soyombo # Po   [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD\n11A9D         ; Soyombo # Lo       SOYOMBO MARK PLUTA\n11A9E..11AA2  ; Soyombo # Po   [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2\n\n# Total code points: 83\n\n# ================================================\n\n11A00         ; Zanabazar_Square # Lo       ZANABAZAR SQUARE LETTER A\n11A01..11A0A  ; Zanabazar_Square # Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n11A0B..11A32  ; Zanabazar_Square # Lo  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA\n11A33..11A38  ; Zanabazar_Square # Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\n11A39         ; Zanabazar_Square # Mc       ZANABAZAR SQUARE SIGN VISARGA\n11A3A         ; Zanabazar_Square # Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\n11A3B..11A3E  ; Zanabazar_Square # Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n11A3F..11A46  ; Zanabazar_Square # Po   [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK\n11A47         ; Zanabazar_Square # Mn       ZANABAZAR SQUARE SUBJOINER\n\n# Total code points: 72\n\n# ================================================\n\n11800..1182B  ; Dogra # Lo  [44] DOGRA LETTER A..DOGRA LETTER RRA\n1182C..1182E  ; Dogra # Mc   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II\n1182F..11837  ; Dogra # Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA\n11838         ; Dogra # Mc       DOGRA SIGN VISARGA\n11839..1183A  ; Dogra # Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA\n1183B         ; Dogra # Po       DOGRA ABBREVIATION SIGN\n\n# Total code points: 60\n\n# ================================================\n\n11D60..11D65  ; Gunjala_Gondi # Lo   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU\n11D67..11D68  ; Gunjala_Gondi # Lo   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI\n11D6A..11D89  ; Gunjala_Gondi # Lo  [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA\n11D8A..11D8E  ; Gunjala_Gondi # Mc   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU\n11D90..11D91  ; Gunjala_Gondi # Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI\n11D93..11D94  ; Gunjala_Gondi # Mc   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU\n11D95         ; Gunjala_Gondi # Mn       GUNJALA GONDI SIGN ANUSVARA\n11D96         ; Gunjala_Gondi # Mc       GUNJALA GONDI SIGN VISARGA\n11D97         ; Gunjala_Gondi # Mn       GUNJALA GONDI VIRAMA\n11D98         ; Gunjala_Gondi # Lo       GUNJALA GONDI OM\n11DA0..11DA9  ; Gunjala_Gondi # Nd  [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE\n\n# Total code points: 63\n\n# ================================================\n\n11EE0..11EF2  ; Makasar # Lo  [19] MAKASAR LETTER KA..MAKASAR ANGKA\n11EF3..11EF4  ; Makasar # Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U\n11EF5..11EF6  ; Makasar # Mc   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O\n11EF7..11EF8  ; Makasar # Po   [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION\n\n# Total code points: 25\n\n# ================================================\n\n16E40..16E7F  ; Medefaidrin # L&  [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y\n16E80..16E96  ; Medefaidrin # No  [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM\n16E97..16E9A  ; Medefaidrin # Po   [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH\n\n# Total code points: 91\n\n# ================================================\n\n10D00..10D23  ; Hanifi_Rohingya # Lo  [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA\n10D24..10D27  ; Hanifi_Rohingya # Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n10D30..10D39  ; Hanifi_Rohingya # Nd  [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE\n\n# Total code points: 50\n\n# ================================================\n\n10F30..10F45  ; Sogdian # Lo  [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN\n10F46..10F50  ; Sogdian # Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW\n10F51..10F54  ; Sogdian # No   [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED\n10F55..10F59  ; Sogdian # Po   [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT\n\n# Total code points: 42\n\n# ================================================\n\n10F00..10F1C  ; Old_Sogdian # Lo  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL\n10F1D..10F26  ; Old_Sogdian # No  [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF\n10F27         ; Old_Sogdian # Lo       OLD SOGDIAN LIGATURE AYIN-DALETH\n\n# Total code points: 40\n\n# ================================================\n\n10FE0..10FF6  ; Elymaic # Lo  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH\n\n# Total code points: 23\n\n# ================================================\n\n119A0..119A7  ; Nandinagari # Lo   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR\n119AA..119D0  ; Nandinagari # Lo  [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA\n119D1..119D3  ; Nandinagari # Mc   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II\n119D4..119D7  ; Nandinagari # Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR\n119DA..119DB  ; Nandinagari # Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI\n119DC..119DF  ; Nandinagari # Mc   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA\n119E0         ; Nandinagari # Mn       NANDINAGARI SIGN VIRAMA\n119E1         ; Nandinagari # Lo       NANDINAGARI SIGN AVAGRAHA\n119E2         ; Nandinagari # Po       NANDINAGARI SIGN SIDDHAM\n119E3         ; Nandinagari # Lo       NANDINAGARI HEADSTROKE\n119E4         ; Nandinagari # Mc       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E\n\n# Total code points: 65\n\n# ================================================\n\n1E100..1E12C  ; Nyiakeng_Puachue_Hmong # Lo  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W\n1E130..1E136  ; Nyiakeng_Puachue_Hmong # Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D\n1E137..1E13D  ; Nyiakeng_Puachue_Hmong # Lm   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER\n1E140..1E149  ; Nyiakeng_Puachue_Hmong # Nd  [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE\n1E14E         ; Nyiakeng_Puachue_Hmong # Lo       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ\n1E14F         ; Nyiakeng_Puachue_Hmong # So       NYIAKENG PUACHUE HMONG CIRCLED CA\n\n# Total code points: 71\n\n# ================================================\n\n1E2C0..1E2EB  ; Wancho # Lo  [44] WANCHO LETTER AA..WANCHO LETTER YIH\n1E2EC..1E2EF  ; Wancho # Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI\n1E2F0..1E2F9  ; Wancho # Nd  [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE\n1E2FF         ; Wancho # Sc       WANCHO NGUN SIGN\n\n# Total code points: 59\n\n# ================================================\n\n10FB0..10FC4  ; Chorasmian # Lo  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW\n10FC5..10FCB  ; Chorasmian # No   [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED\n\n# Total code points: 28\n\n# ================================================\n\n11900..11906  ; Dives_Akuru # Lo   [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E\n11909         ; Dives_Akuru # Lo       DIVES AKURU LETTER O\n1190C..11913  ; Dives_Akuru # Lo   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA\n11915..11916  ; Dives_Akuru # Lo   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA\n11918..1192F  ; Dives_Akuru # Lo  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA\n11930..11935  ; Dives_Akuru # Mc   [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E\n11937..11938  ; Dives_Akuru # Mc   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O\n1193B..1193C  ; Dives_Akuru # Mn   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU\n1193D         ; Dives_Akuru # Mc       DIVES AKURU SIGN HALANTA\n1193E         ; Dives_Akuru # Mn       DIVES AKURU VIRAMA\n1193F         ; Dives_Akuru # Lo       DIVES AKURU PREFIXED NASAL SIGN\n11940         ; Dives_Akuru # Mc       DIVES AKURU MEDIAL YA\n11941         ; Dives_Akuru # Lo       DIVES AKURU INITIAL RA\n11942         ; Dives_Akuru # Mc       DIVES AKURU MEDIAL RA\n11943         ; Dives_Akuru # Mn       DIVES AKURU SIGN NUKTA\n11944..11946  ; Dives_Akuru # Po   [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK\n11950..11959  ; Dives_Akuru # Nd  [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE\n\n# Total code points: 72\n\n# ================================================\n\n16FE4         ; Khitan_Small_Script # Mn       KHITAN SMALL SCRIPT FILLER\n18B00..18CD5  ; Khitan_Small_Script # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5\n18CFF         ; Khitan_Small_Script # Lo       KHITAN SMALL SCRIPT CHARACTER-18CFF\n\n# Total code points: 472\n\n# ================================================\n\n10E80..10EA9  ; Yezidi # Lo  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET\n10EAB..10EAC  ; Yezidi # Mn   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK\n10EAD         ; Yezidi # Pd       YEZIDI HYPHENATION MARK\n10EB0..10EB1  ; Yezidi # Lo   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE\n\n# Total code points: 47\n\n# ================================================\n\n12F90..12FF0  ; Cypro_Minoan # Lo  [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114\n12FF1..12FF2  ; Cypro_Minoan # Po   [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302\n\n# Total code points: 99\n\n# ================================================\n\n10F70..10F81  ; Old_Uyghur # Lo  [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH\n10F82..10F85  ; Old_Uyghur # Mn   [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW\n10F86..10F89  ; Old_Uyghur # Po   [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS\n\n# Total code points: 26\n\n# ================================================\n\n16A70..16ABE  ; Tangsa # Lo  [79] TANGSA LETTER OZ..TANGSA LETTER ZA\n16AC0..16AC9  ; Tangsa # Nd  [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE\n\n# Total code points: 89\n\n# ================================================\n\n1E290..1E2AD  ; Toto # Lo  [30] TOTO LETTER PA..TOTO LETTER A\n1E2AE         ; Toto # Mn       TOTO SIGN RISING TONE\n\n# Total code points: 31\n\n# ================================================\n\n10570..1057A  ; Vithkuqi # L&  [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA\n1057C..1058A  ; Vithkuqi # L&  [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE\n1058C..10592  ; Vithkuqi # L&   [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE\n10594..10595  ; Vithkuqi # L&   [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE\n10597..105A1  ; Vithkuqi # L&  [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA\n105A3..105B1  ; Vithkuqi # L&  [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE\n105B3..105B9  ; Vithkuqi # L&   [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE\n105BB..105BC  ; Vithkuqi # L&   [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE\n\n# Total code points: 70\n\n# ================================================\n\n11F00..11F01  ; Kawi # Mn   [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA\n11F02         ; Kawi # Lo       KAWI SIGN REPHA\n11F03         ; Kawi # Mc       KAWI SIGN VISARGA\n11F04..11F10  ; Kawi # Lo  [13] KAWI LETTER A..KAWI LETTER O\n11F12..11F33  ; Kawi # Lo  [34] KAWI LETTER KA..KAWI LETTER JNYA\n11F34..11F35  ; Kawi # Mc   [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA\n11F36..11F3A  ; Kawi # Mn   [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R\n11F3E..11F3F  ; Kawi # Mc   [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI\n11F40         ; Kawi # Mn       KAWI VOWEL SIGN EU\n11F41         ; Kawi # Mc       KAWI SIGN KILLER\n11F42         ; Kawi # Mn       KAWI CONJOINER\n11F43..11F4F  ; Kawi # Po  [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL\n11F50..11F59  ; Kawi # Nd  [10] KAWI DIGIT ZERO..KAWI DIGIT NINE\n11F5A         ; Kawi # Mn       KAWI SIGN NUKTA\n\n# Total code points: 87\n\n# ================================================\n\n1E4D0..1E4EA  ; Nag_Mundari # Lo  [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL\n1E4EB         ; Nag_Mundari # Lm       NAG MUNDARI SIGN OJOD\n1E4EC..1E4EF  ; Nag_Mundari # Mn   [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH\n1E4F0..1E4F9  ; Nag_Mundari # Nd  [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE\n\n# Total code points: 42\n\n# ================================================\n\n10D40..10D49  ; Garay # Nd  [10] GARAY DIGIT ZERO..GARAY DIGIT NINE\n10D4A..10D4D  ; Garay # Lo   [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE\n10D4E         ; Garay # Lm       GARAY VOWEL LENGTH MARK\n10D4F         ; Garay # Lo       GARAY SUKUN\n10D50..10D65  ; Garay # L&  [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA\n10D69..10D6D  ; Garay # Mn   [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK\n10D6E         ; Garay # Pd       GARAY HYPHEN\n10D6F         ; Garay # Lm       GARAY REDUPLICATION MARK\n10D70..10D85  ; Garay # L&  [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA\n10D8E..10D8F  ; Garay # Sm   [2] GARAY PLUS SIGN..GARAY MINUS SIGN\n\n# Total code points: 69\n\n# ================================================\n\n16100..1611D  ; Gurung_Khema # Lo  [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA\n1611E..16129  ; Gurung_Khema # Mn  [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK\n1612A..1612C  ; Gurung_Khema # Mc   [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA\n1612D..1612F  ; Gurung_Khema # Mn   [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA\n16130..16139  ; Gurung_Khema # Nd  [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE\n\n# Total code points: 58\n\n# ================================================\n\n16D40..16D42  ; Kirat_Rai # Lm   [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA\n16D43..16D6A  ; Kirat_Rai # Lo  [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU\n16D6B..16D6C  ; Kirat_Rai # Lm   [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT\n16D6D..16D6F  ; Kirat_Rai # Po   [3] KIRAT RAI SIGN YUPI..KIRAT RAI DOUBLE DANDA\n16D70..16D79  ; Kirat_Rai # Nd  [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE\n\n# Total code points: 58\n\n# ================================================\n\n1E5D0..1E5ED  ; Ol_Onal # Lo  [30] OL ONAL LETTER O..OL ONAL LETTER EG\n1E5EE..1E5EF  ; Ol_Onal # Mn   [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR\n1E5F0         ; Ol_Onal # Lo       OL ONAL SIGN HODDOND\n1E5F1..1E5FA  ; Ol_Onal # Nd  [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE\n1E5FF         ; Ol_Onal # Po       OL ONAL ABBREVIATION SIGN\n\n# Total code points: 44\n\n# ================================================\n\n11BC0..11BE0  ; Sunuwar # Lo  [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO\n11BE1         ; Sunuwar # Po       SUNUWAR SIGN PVO\n11BF0..11BF9  ; Sunuwar # Nd  [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE\n\n# Total code points: 44\n\n# ================================================\n\n105C0..105F3  ; Todhri # Lo  [52] TODHRI LETTER A..TODHRI LETTER OO\n\n# Total code points: 52\n\n# ================================================\n\n11380..11389  ; Tulu_Tigalari # Lo  [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL\n1138B         ; Tulu_Tigalari # Lo       TULU-TIGALARI LETTER EE\n1138E         ; Tulu_Tigalari # Lo       TULU-TIGALARI LETTER AI\n11390..113B5  ; Tulu_Tigalari # Lo  [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA\n113B7         ; Tulu_Tigalari # Lo       TULU-TIGALARI SIGN AVAGRAHA\n113B8..113BA  ; Tulu_Tigalari # Mc   [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II\n113BB..113C0  ; Tulu_Tigalari # Mn   [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL\n113C2         ; Tulu_Tigalari # Mc       TULU-TIGALARI VOWEL SIGN EE\n113C5         ; Tulu_Tigalari # Mc       TULU-TIGALARI VOWEL SIGN AI\n113C7..113CA  ; Tulu_Tigalari # Mc   [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA\n113CC..113CD  ; Tulu_Tigalari # Mc   [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA\n113CE         ; Tulu_Tigalari # Mn       TULU-TIGALARI SIGN VIRAMA\n113CF         ; Tulu_Tigalari # Mc       TULU-TIGALARI SIGN LOOPED VIRAMA\n113D0         ; Tulu_Tigalari # Mn       TULU-TIGALARI CONJOINER\n113D1         ; Tulu_Tigalari # Lo       TULU-TIGALARI REPHA\n113D2         ; Tulu_Tigalari # Mn       TULU-TIGALARI GEMINATION MARK\n113D3         ; Tulu_Tigalari # Lo       TULU-TIGALARI SIGN PLUTA\n113D4..113D5  ; Tulu_Tigalari # Po   [2] TULU-TIGALARI DANDA..TULU-TIGALARI DOUBLE DANDA\n113D7..113D8  ; Tulu_Tigalari # Po   [2] TULU-TIGALARI SIGN OM PUSHPIKA..TULU-TIGALARI SIGN SHRII PUSHPIKA\n113E1..113E2  ; Tulu_Tigalari # Mn   [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA\n\n# Total code points: 80\n\n# ================================================\n\n10940..10959  ; Sidetic # Lo  [26] SIDETIC LETTER N01..SIDETIC LETTER N26\n\n# Total code points: 26\n\n# ================================================\n\n1E6C0..1E6DE  ; Tai_Yo # Lo  [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO\n1E6E0..1E6E2  ; Tai_Yo # Lo   [3] TAI YO LETTER AA..TAI YO LETTER UE\n1E6E3         ; Tai_Yo # Mn       TAI YO SIGN UE\n1E6E4..1E6E5  ; Tai_Yo # Lo   [2] TAI YO LETTER U..TAI YO LETTER AE\n1E6E6         ; Tai_Yo # Mn       TAI YO SIGN AU\n1E6E7..1E6ED  ; Tai_Yo # Lo   [7] TAI YO LETTER O..TAI YO LETTER AUE\n1E6EE..1E6EF  ; Tai_Yo # Mn   [2] TAI YO SIGN AY..TAI YO SIGN ANG\n1E6F0..1E6F4  ; Tai_Yo # Lo   [5] TAI YO LETTER AN..TAI YO LETTER AP\n1E6F5         ; Tai_Yo # Mn       TAI YO SIGN OM\n1E6FE         ; Tai_Yo # Lo       TAI YO SYMBOL MUEANG\n1E6FF         ; Tai_Yo # Lm       TAI YO XAM LAI\n\n# Total code points: 55\n\n# ================================================\n\n11DB0..11DD8  ; Tolong_Siki # Lo  [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH\n11DD9         ; Tolong_Siki # Lm       TOLONG SIKI SIGN SELA\n11DDA..11DDB  ; Tolong_Siki # Lo   [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA\n11DE0..11DE9  ; Tolong_Siki # Nd  [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE\n\n# Total code points: 54\n\n# ================================================\n\n16EA0..16EB8  ; Beria_Erfe # L&  [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY\n16EBB..16ED3  ; Beria_Erfe # L&  [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY\n\n# Total code points: 50\n\n# EOF\n"
  },
  {
    "path": "maint/Unicode.tables/UnicodeData.txt",
    "content": "0000;<control>;Cc;0;BN;;;;;N;NULL;;;;\n0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;\n0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;\n0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;\n0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;\n0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;\n0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;\n0007;<control>;Cc;0;BN;;;;;N;BELL;;;;\n0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;\n0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATION;;;;\n000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;;\n000B;<control>;Cc;0;S;;;;;N;LINE TABULATION;;;;\n000C;<control>;Cc;0;WS;;;;;N;FORM FEED (FF);;;;\n000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;;\n000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;\n000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;\n0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;\n0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;\n0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;\n0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;\n0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;\n0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;\n0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;\n0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;\n0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;\n0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;\n001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;\n001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;\n001C;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;;\n001D;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;;\n001E;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;;\n001F;<control>;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;;\n0020;SPACE;Zs;0;WS;;;;;N;;;;;\n0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;\n0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;\n0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;\n0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;\n0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;\n0026;AMPERSAND;Po;0;ON;;;;;N;;;;;\n0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;\n0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;\n0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;\n002A;ASTERISK;Po;0;ON;;;;;N;;;;;\n002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;;\n002C;COMMA;Po;0;CS;;;;;N;;;;;\n002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;;\n002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;\n002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;;\n0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;\n0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;\n0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;\n0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;\n0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;\n0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;\n0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;\n0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;\n0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;\n0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;\n003A;COLON;Po;0;CS;;;;;N;;;;;\n003B;SEMICOLON;Po;0;ON;;;;;N;;;;;\n003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;\n003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;\n003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;\n003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;\n0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;\n0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;\n0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;\n0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;\n0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;\n0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;\n0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;\n0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;\n0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;\n0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;\n004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;\n004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;\n004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;\n004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;\n004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;\n004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;\n0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;\n0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;\n0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;\n0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;\n0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;\n0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;\n0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;\n0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;\n0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;\n0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;\n005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;\n005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;\n005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;\n005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;\n005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;\n005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;\n0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;\n0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041\n0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042\n0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043\n0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044\n0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045\n0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046\n0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047\n0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048\n0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049\n006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A\n006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B\n006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C\n006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D\n006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E\n006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F\n0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050\n0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051\n0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052\n0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053\n0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054\n0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055\n0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056\n0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057\n0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058\n0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059\n007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A\n007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;\n007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;\n007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;\n007E;TILDE;Sm;0;ON;;;;;N;;;;;\n007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;\n0080;<control>;Cc;0;BN;;;;;N;;;;;\n0081;<control>;Cc;0;BN;;;;;N;;;;;\n0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;\n0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;\n0084;<control>;Cc;0;BN;;;;;N;;;;;\n0085;<control>;Cc;0;B;;;;;N;NEXT LINE (NEL);;;;\n0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;\n0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;\n0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;\n0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;\n008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;\n008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE FORWARD;;;;\n008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE BACKWARD;;;;\n008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;\n008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;\n008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;\n0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;\n0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;\n0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;\n0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;\n0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;\n0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;\n0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;\n0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;\n0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;\n0099;<control>;Cc;0;BN;;;;;N;;;;;\n009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;\n009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;\n009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;\n009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;\n009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;\n009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;\n00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;\n00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;\n00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;\n00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;\n00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;\n00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;\n00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;\n00A7;SECTION SIGN;Po;0;ON;;;;;N;;;;;\n00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;\n00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;\n00AA;FEMININE ORDINAL INDICATOR;Lo;0;L;<super> 0061;;;;N;;;;;\n00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;;;;\n00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;\n00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;;\n00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;\n00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;\n00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;\n00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;\n00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;;\n00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;;\n00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;\n00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C\n00B6;PILCROW SIGN;Po;0;ON;;;;;N;PARAGRAPH SIGN;;;;\n00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;\n00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;\n00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;;\n00BA;MASCULINE ORDINAL INDICATOR;Lo;0;L;<super> 006F;;;;N;;;;;\n00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;;;;\n00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;\n00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;\n00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;\n00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;\n00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;\n00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;\n00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;\n00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;\n00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;\n00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;\n00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6;\n00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;\n00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;\n00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;\n00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;\n00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;\n00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;\n00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;\n00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;\n00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;\n00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;00F0;\n00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;\n00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;\n00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;\n00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;\n00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;\n00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;\n00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;\n00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;\n00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;\n00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;\n00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;\n00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;\n00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;\n00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;;;00FE;\n00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;;;;\n00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0\n00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1\n00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2\n00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3\n00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4\n00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5\n00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6\n00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7\n00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8\n00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9\n00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA\n00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB\n00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC\n00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD\n00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE\n00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF\n00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;;00D0;;00D0\n00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1\n00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2\n00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3\n00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4\n00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5\n00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6\n00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;\n00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8\n00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9\n00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA\n00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB\n00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC\n00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD\n00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;;00DE;;00DE\n00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178\n0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;\n0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100\n0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;\n0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102\n0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;\n0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104\n0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;\n0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106\n0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;\n0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108\n010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;\n010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A\n010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;\n010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C\n010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;\n010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E\n0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;\n0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110\n0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;\n0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112\n0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;\n0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114\n0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;\n0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116\n0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;\n0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118\n011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;\n011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A\n011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;\n011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C\n011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;\n011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E\n0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;\n0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120\n0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;\n0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122\n0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;\n0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124\n0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;\n0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126\n0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;\n0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128\n012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;\n012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A\n012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;\n012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C\n012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;\n012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E\n0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;\n0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049\n0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;\n0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132\n0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;\n0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134\n0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;\n0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136\n0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;;;;\n0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;\n013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139\n013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;\n013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B\n013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;\n013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D\n013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;\n0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F\n0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;\n0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141\n0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;\n0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143\n0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;\n0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145\n0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;\n0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147\n0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;\n014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;014B;\n014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;;014A;;014A\n014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;\n014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C\n014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;\n014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E\n0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;\n0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150\n0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;\n0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152\n0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;\n0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154\n0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;\n0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156\n0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;\n0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158\n015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;\n015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A\n015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;\n015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C\n015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F;\n015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E\n0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;\n0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160\n0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163;\n0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162\n0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;\n0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164\n0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;\n0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166\n0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;\n0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168\n016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;\n016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A\n016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;\n016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C\n016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;\n016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E\n0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;\n0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170\n0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;\n0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172\n0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;\n0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174\n0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;\n0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176\n0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;\n0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;\n017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179\n017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;\n017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B\n017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;\n017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D\n017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053\n0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243\n0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;\n0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;\n0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182\n0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;\n0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184\n0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;\n0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;\n0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187\n0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256;\n018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;\n018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;\n018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B\n018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;\n018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;\n018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;\n0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;\n0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;\n0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191\n0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;\n0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;\n0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;01F6;;01F6\n0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;\n0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;\n0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;\n0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198\n019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D\n019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;A7DC;;A7DC\n019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;\n019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;\n019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220\n019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;0275;\n01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;\n01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0\n01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3;\n01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2\n01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;\n01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4\n01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280;\n01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;\n01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7\n01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;\n01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;\n01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;\n01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;\n01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC\n01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;\n01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;\n01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF\n01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;\n01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;\n01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;\n01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3\n01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;\n01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5\n01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;\n01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;\n01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8\n01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;\n01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;\n01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;\n01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC\n01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;\n01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7\n01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;\n01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;\n01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;\n01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;\n01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5\n01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5\n01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5\n01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8\n01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8\n01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8\n01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB\n01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB\n01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB\n01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;\n01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD\n01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;\n01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF\n01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;\n01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1\n01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;\n01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3\n01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;\n01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5\n01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;\n01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7\n01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;\n01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9\n01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;\n01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB\n01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E\n01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;\n01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE\n01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;\n01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0\n01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3;\n01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2\n01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;\n01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4\n01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;\n01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6\n01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;\n01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8\n01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;\n01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA\n01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;\n01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC\n01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;\n01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE\n01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;\n01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2\n01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;01F2\n01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2\n01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;\n01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4\n01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;\n01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;\n01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;\n01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8\n01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;\n01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA\n01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD;\n01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC\n01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;\n01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE\n0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;\n0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200\n0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;\n0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202\n0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;\n0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204\n0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;\n0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206\n0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;\n0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208\n020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;\n020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A\n020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;\n020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C\n020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;\n020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E\n0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;\n0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210\n0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;\n0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212\n0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;\n0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214\n0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;\n0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216\n0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;;;0219;\n0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;;0218;;0218\n021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;;;021B;\n021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;;021A;;021A\n021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;\n021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C\n021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;\n021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E\n0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E;\n0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;;\n0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;\n0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222\n0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;\n0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224\n0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;\n0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226\n0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;\n0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228\n022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;\n022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A\n022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;\n022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C\n022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;\n022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E\n0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;\n0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230\n0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;\n0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232\n0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;;\n0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;;\n0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;;\n0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;;\n0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;;\n0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;;\n023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65;\n023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C;\n023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B\n023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A;\n023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66;\n023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7E;;2C7E\n0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7F;;2C7F\n0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242;\n0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241\n0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180;\n0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289;\n0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C;\n0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247;\n0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246\n0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249;\n0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248\n024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B;\n024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A\n024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D;\n024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C\n024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F;\n024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E\n0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;2C6F;;2C6F\n0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;2C6D;;2C6D\n0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;2C70;;2C70\n0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181\n0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186\n0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;\n0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189\n0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A\n0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;\n0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F\n025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;\n025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190\n025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;A7AB;;A7AB\n025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;\n025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;\n025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;\n0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193\n0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;A7AC;;A7AC\n0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;\n0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194\n0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;A7CB;;A7CB\n0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;A78D;;A78D\n0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;A7AA;;A7AA\n0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;\n0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197\n0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196\n026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;A7AE;;A7AE\n026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62\n026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;A7AD;;A7AD\n026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;\n026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;\n026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C\n0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;\n0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;2C6E;;2C6E\n0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D\n0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;\n0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;\n0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F\n0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;\n0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;\n0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;\n0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;\n027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;\n027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;\n027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;\n027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64\n027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;\n027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;\n0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6\n0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;\n0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;A7C5;;A7C5\n0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9\n0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;\n0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;\n0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;\n0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;A7B1;;A7B1\n0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE\n0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244\n028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1\n028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2\n028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245\n028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;\n028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;\n028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;\n0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;\n0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;\n0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7\n0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;\n0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;\n0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Lo;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;\n0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;\n0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;\n0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;\n0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;\n029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;\n029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;\n029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;\n029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;A7B2;;A7B2\n029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;A7B0;;A7B0\n029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;\n02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;\n02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;\n02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;\n02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;\n02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;\n02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;\n02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;\n02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;\n02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;\n02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;\n02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;\n02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;\n02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;\n02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;\n02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;;\n02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;;\n02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;\n02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;\n02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;\n02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;\n02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;\n02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;\n02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;\n02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;\n02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;\n02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;;\n02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;;\n02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;\n02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;\n02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;\n02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;\n02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;\n02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;\n02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;\n02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;\n02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;\n02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;\n02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;\n02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;\n02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;;;;\n02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;;\n02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;;;;\n02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;;;;\n02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;;;;\n02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;;\n02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;;\n02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;\n02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;\n02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;\n02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;\n02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;\n02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;\n02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;\n02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;\n02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;\n02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;\n02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;\n02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;;;;\n02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;\n02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;\n02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;\n02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;\n02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;\n02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;\n02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;\n02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;\n02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;\n02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;\n02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;\n02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;\n02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;\n02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;\n02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;\n02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;\n02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;\n02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;\n02EC;MODIFIER LETTER VOICING;Lm;0;ON;;;;;N;;;;;\n02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;\n02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;\n02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;\n02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;\n02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;\n02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;\n02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;;\n02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;\n02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;\n02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;;\n02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;;\n02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;;\n02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;;\n02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;;\n02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;;\n02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;;\n02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;;\n02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;;\n02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;;\n0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;;;;\n0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;;;;\n0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;\n0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;\n0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;\n0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;\n0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;;;;\n0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;\n0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;;;;\n0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;\n030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;\n030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;\n030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;\n030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;;\n030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;\n030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;\n0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;\n0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;\n0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;\n0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;;;;\n0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;;;;\n0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;\n0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;\n0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;\n0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;\n0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;\n031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;\n031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;\n031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;\n031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;\n031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;\n031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;\n0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;\n0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;\n0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;\n0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;\n0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;\n0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;\n0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;\n0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;\n0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;\n0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;\n032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;\n032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;\n032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;\n032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;\n032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;\n032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;\n0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;\n0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;\n0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;\n0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;\n0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;\n0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;\n0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;\n0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;\n0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;\n0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;\n033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;\n033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;\n033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;\n033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;\n033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;\n033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;\n0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;;;;\n0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;;;;\n0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;\n0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;\n0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;\n0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399\n0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;\n0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;\n0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;\n0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;\n034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;\n034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;\n034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;\n034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;\n034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;\n034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;;\n0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;\n0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;\n0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;;\n0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;;\n0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;\n0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;\n0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;\n0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;\n0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;;\n0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;;\n035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;\n035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;;\n035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;;\n035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;;\n035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;;\n035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;;\n0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;\n0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;\n0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;\n0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;;\n0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;;\n0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;;\n0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;;\n0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;;\n0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;;\n0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;;\n036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;;\n036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;;\n036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;;\n036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;;\n036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;;\n036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;;\n0370;GREEK CAPITAL LETTER HETA;Lu;0;L;;;;;N;;;;0371;\n0371;GREEK SMALL LETTER HETA;Ll;0;L;;;;;N;;;0370;;0370\n0372;GREEK CAPITAL LETTER ARCHAIC SAMPI;Lu;0;L;;;;;N;;;;0373;\n0373;GREEK SMALL LETTER ARCHAIC SAMPI;Ll;0;L;;;;;N;;;0372;;0372\n0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;;;;\n0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;;;;\n0376;GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA;Lu;0;L;;;;;N;;;;0377;\n0377;GREEK SMALL LETTER PAMPHYLIAN DIGAMMA;Ll;0;L;;;;;N;;;0376;;0376\n037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;\n037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD\n037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE\n037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF\n037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;;;;\n037F;GREEK CAPITAL LETTER YOT;Lu;0;L;;;;;N;;;;03F3;\n0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;\n0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;\n0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;\n0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;\n0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;\n0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;\n038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;\n038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;\n038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;\n038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;\n0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;\n0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;\n0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;\n0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;\n0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;\n0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;\n0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;\n0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;\n0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;\n039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;\n039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;\n039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;\n039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;\n039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;\n039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;\n03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;\n03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;\n03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;\n03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;\n03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;\n03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;\n03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;\n03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;\n03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;\n03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;\n03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;\n03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386\n03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388\n03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389\n03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A\n03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;\n03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391\n03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392\n03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393\n03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394\n03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395\n03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396\n03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397\n03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399\n03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A\n03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B\n03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C\n03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D\n03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E\n03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F\n03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0\n03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1\n03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3\n03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3\n03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4\n03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5\n03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6\n03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7\n03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8\n03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9\n03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA\n03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB\n03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C\n03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E\n03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F\n03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7;\n03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392\n03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;\n03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;\n03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;\n03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6\n03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0\n03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF\n03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;;;03D9;\n03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;;03D8;;03D8\n03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;\n03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA\n03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;\n03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC\n03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;\n03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE\n03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;\n03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0\n03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;\n03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2\n03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;\n03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4\n03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;\n03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6\n03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;\n03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8\n03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;\n03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA\n03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;\n03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC\n03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;\n03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE\n03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A\n03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1\n03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9\n03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;037F;;037F\n03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L;<compat> 03B5;;;;N;;;0395;;0395\n03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;;\n03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8;\n03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7\n03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2;\n03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB;\n03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA\n03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;;\n03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B;\n03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C;\n03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D;\n0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;\n0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;\n0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;;;0452;\n0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;\n0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;\n0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;\n0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;\n0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;;;0457;\n0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;\n0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;\n040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;\n040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;;;045B;\n040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;\n040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;\n040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;;;045E;\n040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;\n0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;\n0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;\n0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;\n0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;\n0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;\n0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;\n0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;\n0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;\n0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;\n0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;\n041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;\n041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;\n041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;\n041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;\n041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;\n041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;\n0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;\n0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;\n0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;\n0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;\n0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;\n0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;\n0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;\n0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;\n0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;\n0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;\n042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;\n042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;\n042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;\n042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;\n042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;\n042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;\n0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410\n0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411\n0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412\n0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413\n0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414\n0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415\n0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416\n0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417\n0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418\n0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419\n043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A\n043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B\n043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C\n043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D\n043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E\n043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F\n0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420\n0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421\n0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422\n0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423\n0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424\n0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425\n0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426\n0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427\n0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428\n0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429\n044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A\n044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B\n044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C\n044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D\n044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E\n044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F\n0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400\n0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401\n0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;;0402;;0402\n0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403\n0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404\n0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405\n0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406\n0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;;0407;;0407\n0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408\n0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409\n045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A\n045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;;040B;;040B\n045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C\n045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D\n045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;;040E;;040E\n045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F\n0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;\n0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460\n0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;\n0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462\n0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;\n0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464\n0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;\n0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466\n0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;\n0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468\n046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;\n046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A\n046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;\n046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C\n046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;\n046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E\n0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;\n0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470\n0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;\n0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472\n0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;\n0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474\n0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;\n0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476\n0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;\n0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478\n047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;\n047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A\n047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;\n047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C\n047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;\n047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E\n0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;\n0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480\n0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;\n0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;\n0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;\n0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;\n0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;\n0487;COMBINING CYRILLIC POKRYTIE;Mn;230;NSM;;;;;N;;;;;\n0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;\n0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;\n048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B;\n048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A\n048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;\n048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C\n048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;\n048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E\n0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;\n0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490\n0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;\n0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492\n0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;\n0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494\n0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;\n0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496\n0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;\n0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498\n049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;\n049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A\n049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;\n049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C\n049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;\n049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E\n04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;\n04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0\n04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;\n04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2\n04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;\n04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4\n04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;;;04A7;\n04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;;04A6;;04A6\n04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;\n04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8\n04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;\n04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA\n04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;\n04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC\n04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;\n04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE\n04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;\n04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0\n04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;\n04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2\n04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;;;04B5;\n04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;;04B4;;04B4\n04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;\n04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6\n04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;\n04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8\n04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;\n04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA\n04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;\n04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC\n04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;\n04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE\n04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF;\n04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;\n04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1\n04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;\n04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3\n04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6;\n04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5\n04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;\n04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7\n04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA;\n04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9\n04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;\n04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB\n04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE;\n04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD\n04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0\n04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;\n04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0\n04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;\n04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2\n04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;\n04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4\n04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;\n04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6\n04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;\n04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8\n04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;\n04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA\n04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;\n04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC\n04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;\n04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE\n04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;\n04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0\n04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;\n04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2\n04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;\n04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4\n04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;\n04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6\n04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;\n04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8\n04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;\n04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA\n04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;\n04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC\n04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;\n04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE\n04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;\n04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0\n04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;\n04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2\n04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;\n04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4\n04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7;\n04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6\n04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;\n04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8\n04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB;\n04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA\n04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD;\n04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC\n04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF;\n04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE\n0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501;\n0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500\n0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503;\n0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502\n0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505;\n0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504\n0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507;\n0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506\n0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509;\n0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508\n050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B;\n050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A\n050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D;\n050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C\n050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F;\n050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E\n0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511;\n0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510\n0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513;\n0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512\n0514;CYRILLIC CAPITAL LETTER LHA;Lu;0;L;;;;;N;;;;0515;\n0515;CYRILLIC SMALL LETTER LHA;Ll;0;L;;;;;N;;;0514;;0514\n0516;CYRILLIC CAPITAL LETTER RHA;Lu;0;L;;;;;N;;;;0517;\n0517;CYRILLIC SMALL LETTER RHA;Ll;0;L;;;;;N;;;0516;;0516\n0518;CYRILLIC CAPITAL LETTER YAE;Lu;0;L;;;;;N;;;;0519;\n0519;CYRILLIC SMALL LETTER YAE;Ll;0;L;;;;;N;;;0518;;0518\n051A;CYRILLIC CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;051B;\n051B;CYRILLIC SMALL LETTER QA;Ll;0;L;;;;;N;;;051A;;051A\n051C;CYRILLIC CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;051D;\n051D;CYRILLIC SMALL LETTER WE;Ll;0;L;;;;;N;;;051C;;051C\n051E;CYRILLIC CAPITAL LETTER ALEUT KA;Lu;0;L;;;;;N;;;;051F;\n051F;CYRILLIC SMALL LETTER ALEUT KA;Ll;0;L;;;;;N;;;051E;;051E\n0520;CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0521;\n0521;CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0520;;0520\n0522;CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0523;\n0523;CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0522;;0522\n0524;CYRILLIC CAPITAL LETTER PE WITH DESCENDER;Lu;0;L;;;;;N;;;;0525;\n0525;CYRILLIC SMALL LETTER PE WITH DESCENDER;Ll;0;L;;;;;N;;;0524;;0524\n0526;CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER;Lu;0;L;;;;;N;;;;0527;\n0527;CYRILLIC SMALL LETTER SHHA WITH DESCENDER;Ll;0;L;;;;;N;;;0526;;0526\n0528;CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK;Lu;0;L;;;;;N;;;;0529;\n0529;CYRILLIC SMALL LETTER EN WITH LEFT HOOK;Ll;0;L;;;;;N;;;0528;;0528\n052A;CYRILLIC CAPITAL LETTER DZZHE;Lu;0;L;;;;;N;;;;052B;\n052B;CYRILLIC SMALL LETTER DZZHE;Ll;0;L;;;;;N;;;052A;;052A\n052C;CYRILLIC CAPITAL LETTER DCHE;Lu;0;L;;;;;N;;;;052D;\n052D;CYRILLIC SMALL LETTER DCHE;Ll;0;L;;;;;N;;;052C;;052C\n052E;CYRILLIC CAPITAL LETTER EL WITH DESCENDER;Lu;0;L;;;;;N;;;;052F;\n052F;CYRILLIC SMALL LETTER EL WITH DESCENDER;Ll;0;L;;;;;N;;;052E;;052E\n0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;\n0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;\n0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;\n0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;\n0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;\n0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;\n0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;\n0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;\n0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;\n053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;\n053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;\n053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;\n053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;\n053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;\n053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;\n0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;\n0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;\n0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;\n0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;\n0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;\n0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;\n0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;\n0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;\n0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;\n0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;\n054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;\n054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;\n054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;\n054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;\n054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;\n054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;\n0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;\n0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;\n0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;\n0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;\n0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;\n0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;\n0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;\n0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;\n055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;\n055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;\n055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;\n055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;\n055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;\n055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;\n0560;ARMENIAN SMALL LETTER TURNED AYB;Ll;0;L;;;;;N;;;;;\n0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531\n0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532\n0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533\n0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534\n0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535\n0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536\n0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537\n0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538\n0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539\n056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A\n056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B\n056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C\n056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D\n056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E\n056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F\n0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540\n0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541\n0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542\n0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543\n0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544\n0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545\n0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546\n0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547\n0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548\n0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549\n057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A\n057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B\n057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C\n057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D\n057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E\n057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F\n0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550\n0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551\n0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552\n0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553\n0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554\n0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555\n0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556\n0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;\n0588;ARMENIAN SMALL LETTER YI WITH STROKE;Ll;0;L;;;;;N;;;;;\n0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;\n058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;\n058D;RIGHT-FACING ARMENIAN ETERNITY SIGN;So;0;ON;;;;;N;;;;;\n058E;LEFT-FACING ARMENIAN ETERNITY SIGN;So;0;ON;;;;;N;;;;;\n058F;ARMENIAN DRAM SIGN;Sc;0;ET;;;;;N;;;;;\n0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;\n0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;\n0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;\n0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;\n0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;\n0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;;;;\n0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;\n0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;;;;\n0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;\n059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;\n059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;\n059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;\n059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;\n059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;\n059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;\n05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;\n05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;\n05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;;\n05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;\n05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;\n05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;;;;\n05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;\n05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;\n05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;;;;\n05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;\n05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;;;;\n05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;\n05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;\n05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;\n05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;\n05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;\n05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;\n05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;\n05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;\n05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;\n05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;\n05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;\n05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;\n05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;\n05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;\n05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;\n05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;;\n05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;\n05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;;;;\n05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;;;;\n05BE;HEBREW PUNCTUATION MAQAF;Pd;0;R;;;;;N;;;;;\n05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;\n05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;;\n05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;\n05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;\n05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;;\n05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;\n05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;;\n05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;;\n05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;;\n05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;\n05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;\n05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;\n05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;\n05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;\n05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;\n05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;\n05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;\n05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;\n05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;\n05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;\n05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;\n05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;\n05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;\n05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;\n05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;\n05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;\n05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;\n05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;\n05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;\n05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;\n05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;\n05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;\n05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;\n05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;\n05EF;HEBREW YOD TRIANGLE;Lo;0;R;;;;;N;;;;;\n05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;\n05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;\n05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;\n05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;\n05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;\n0600;ARABIC NUMBER SIGN;Cf;0;AN;;;;;N;;;;;\n0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;;\n0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;;\n0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;;\n0604;ARABIC SIGN SAMVAT;Cf;0;AN;;;;;N;;;;;\n0605;ARABIC NUMBER MARK ABOVE;Cf;0;AN;;;;;N;;;;;\n0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;;\n0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;;\n0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;;\n0609;ARABIC-INDIC PER MILLE SIGN;Po;0;ET;;;;;N;;;;;\n060A;ARABIC-INDIC PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;\n060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;;\n060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;\n060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;;\n060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;;\n060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;;\n0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;;\n0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;;\n0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;;\n0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;;\n0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;;\n0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;;\n0616;ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH;Mn;230;NSM;;;;;N;;;;;\n0617;ARABIC SMALL HIGH ZAIN;Mn;230;NSM;;;;;N;;;;;\n0618;ARABIC SMALL FATHA;Mn;30;NSM;;;;;N;;;;;\n0619;ARABIC SMALL DAMMA;Mn;31;NSM;;;;;N;;;;;\n061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;;\n061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;\n061C;ARABIC LETTER MARK;Cf;0;AL;;;;;N;;;;;\n061D;ARABIC END OF TEXT MARK;Po;0;AL;;;;;N;;;;;\n061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;;\n061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;\n0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;;\n0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;\n0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;\n0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;\n0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;\n0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;\n0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;\n0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;\n0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;\n0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;\n062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;\n062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;\n062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;\n062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;\n062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;\n062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;\n0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;\n0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;\n0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;\n0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;\n0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;\n0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;\n0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;\n0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;\n0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;\n0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;\n063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;\n063B;ARABIC LETTER KEHEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n063C;ARABIC LETTER KEHEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n063D;ARABIC LETTER FARSI YEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;\n063E;ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n063F;ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;\n0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;\n0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;\n0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;\n0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;\n0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;\n0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;\n0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;\n0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;\n0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;\n064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;\n064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;\n064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;\n064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;\n064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;\n064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;\n0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;\n0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;\n0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;\n0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;\n0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;\n0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;\n0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;;\n0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;;\n0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;\n0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;;\n065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;\n065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;\n065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;\n065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;;\n065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;;\n065F;ARABIC WAVY HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;\n0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;\n0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;\n0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;\n0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;\n0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;\n0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;\n0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;\n0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;\n0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;\n0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;\n066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;\n066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;\n066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;\n066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;\n066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;;\n066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;;\n0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;\n0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;\n0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;\n0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;\n0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;\n0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;\n0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;\n0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;\n0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;\n0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;\n067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;\n067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;\n067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;\n067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;\n067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;\n067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;\n0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;\n0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;\n0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;\n0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;\n0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;\n0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;\n0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;\n0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;\n0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;\n0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;\n068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;\n068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;\n068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;\n068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;\n068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;\n068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;\n0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;\n0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;\n0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;\n0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;\n0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;\n0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;\n0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;\n0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;\n0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;\n069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;\n06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;\n06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;\n06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;\n06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;\n06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;\n06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;\n06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;\n06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;\n06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;\n06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;\n06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;\n06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;;;;\n06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;\n06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;\n06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;\n06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;\n06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;\n06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;\n06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;\n06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;\n06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;\n06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;\n06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;\n06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;\n06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;\n06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;\n06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;\n06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;\n06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;\n06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;\n06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;\n06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;\n06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;\n06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;\n06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;\n06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;;\n06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;\n06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;\n06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;\n06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;\n06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;\n06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;\n06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;\n06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;\n06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;\n06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;\n06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;\n06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;\n06DD;ARABIC END OF AYAH;Cf;0;AN;;;;;N;;;;;\n06DE;ARABIC START OF RUB EL HIZB;So;0;ON;;;;;N;;;;;\n06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;\n06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;\n06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;\n06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;\n06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;\n06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;\n06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;\n06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;\n06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;\n06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;\n06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;\n06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;\n06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;\n06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;\n06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;\n06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;;\n06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;\n06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;\n06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;\n06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;\n06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;\n06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;\n06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;\n06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;\n06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;\n06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;\n06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;\n06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;\n06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;\n06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;\n06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;\n06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;\n06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;\n0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;\n0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;\n0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;\n0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;\n0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;\n0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;\n0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;\n0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;\n0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;\n0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;\n070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;\n070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;\n070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;\n070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;\n070F;SYRIAC ABBREVIATION MARK;Cf;0;AL;;;;;N;;;;;\n0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;\n0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;\n0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;\n0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;\n0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;\n0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;\n0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;\n0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;\n0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;\n0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;\n071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;\n071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;\n071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;\n071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;\n071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;\n071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;\n0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;\n0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;\n0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;\n0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;\n0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;\n0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;\n0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;\n0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;\n0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;\n0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;\n072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;\n072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;\n072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;\n072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;;\n072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;;\n072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;;\n0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;\n0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;\n0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;\n0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;\n0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;\n0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;\n0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;\n0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;\n0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;\n0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;\n073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;\n073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;\n073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;\n073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;\n073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;\n073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;\n0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;\n0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;\n0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;\n0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;\n0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;\n0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;\n0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;\n0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;\n0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;\n0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;\n074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;\n074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;;\n074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;;\n074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;;\n0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;;\n0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;\n0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;\n0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;\n0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;\n0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;\n075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;\n075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;;\n075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;;\n075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;\n0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;\n0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;\n0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;\n0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;;\n0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;;\n076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;;\n076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;\n076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;\n076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;\n076E;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW;Lo;0;AL;;;;;N;;;;;\n076F;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;\n0770;ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;\n0771;ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;\n0772;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;;\n0773;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;\n0774;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;\n0775;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;\n0776;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;\n0777;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;;\n0778;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;\n0779;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;\n077A;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;\n077B;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;\n077C;ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;;\n077D;ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE;Lo;0;AL;;;;;N;;;;;\n077E;ARABIC LETTER SEEN WITH INVERTED V;Lo;0;AL;;;;;N;;;;;\n077F;ARABIC LETTER KAF WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;\n0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;\n0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;\n0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;\n0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;\n0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;\n0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;\n0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;\n0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;\n0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;\n078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;\n078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;\n078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;\n078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;\n078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;\n078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;\n0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;\n0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;\n0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;\n0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;\n0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;\n0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;\n0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;\n0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;\n0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;\n0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;\n079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;\n079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;\n079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;\n079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;\n079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;\n079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;\n07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;\n07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;\n07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;\n07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;\n07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;\n07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;\n07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;\n07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;\n07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;\n07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;\n07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;\n07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;\n07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;\n07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;\n07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;\n07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;\n07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;\n07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;;\n07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;;\n07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;;\n07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;;\n07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;;\n07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;;\n07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;;\n07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;;\n07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;;\n07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;;\n07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;;\n07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;;\n07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;;\n07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;;\n07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;;\n07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;;\n07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;;\n07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;;\n07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;;\n07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;;\n07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;;\n07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;;\n07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;;\n07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;;\n07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;;\n07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;;\n07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;;\n07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;;\n07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;;\n07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;;\n07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;;\n07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;;\n07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;;\n07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;;\n07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;;\n07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;;\n07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;;\n07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;;\n07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;;\n07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;;\n07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;;\n07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;;\n07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;;\n07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;;\n07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;;\n07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;;\n07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;;\n07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;;\n07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;;\n07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;;\n07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;;\n07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;;\n07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;;\n07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;\n07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;\n07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;;\n07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;;\n07F8;NKO COMMA;Po;0;ON;;;;;N;;;;;\n07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;\n07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;;\n07FD;NKO DANTAYALAN;Mn;220;NSM;;;;;N;;;;;\n07FE;NKO DOROME SIGN;Sc;0;R;;;;;N;;;;;\n07FF;NKO TAMAN SIGN;Sc;0;R;;;;;N;;;;;\n0800;SAMARITAN LETTER ALAF;Lo;0;R;;;;;N;;;;;\n0801;SAMARITAN LETTER BIT;Lo;0;R;;;;;N;;;;;\n0802;SAMARITAN LETTER GAMAN;Lo;0;R;;;;;N;;;;;\n0803;SAMARITAN LETTER DALAT;Lo;0;R;;;;;N;;;;;\n0804;SAMARITAN LETTER IY;Lo;0;R;;;;;N;;;;;\n0805;SAMARITAN LETTER BAA;Lo;0;R;;;;;N;;;;;\n0806;SAMARITAN LETTER ZEN;Lo;0;R;;;;;N;;;;;\n0807;SAMARITAN LETTER IT;Lo;0;R;;;;;N;;;;;\n0808;SAMARITAN LETTER TIT;Lo;0;R;;;;;N;;;;;\n0809;SAMARITAN LETTER YUT;Lo;0;R;;;;;N;;;;;\n080A;SAMARITAN LETTER KAAF;Lo;0;R;;;;;N;;;;;\n080B;SAMARITAN LETTER LABAT;Lo;0;R;;;;;N;;;;;\n080C;SAMARITAN LETTER MIM;Lo;0;R;;;;;N;;;;;\n080D;SAMARITAN LETTER NUN;Lo;0;R;;;;;N;;;;;\n080E;SAMARITAN LETTER SINGAAT;Lo;0;R;;;;;N;;;;;\n080F;SAMARITAN LETTER IN;Lo;0;R;;;;;N;;;;;\n0810;SAMARITAN LETTER FI;Lo;0;R;;;;;N;;;;;\n0811;SAMARITAN LETTER TSAADIY;Lo;0;R;;;;;N;;;;;\n0812;SAMARITAN LETTER QUF;Lo;0;R;;;;;N;;;;;\n0813;SAMARITAN LETTER RISH;Lo;0;R;;;;;N;;;;;\n0814;SAMARITAN LETTER SHAN;Lo;0;R;;;;;N;;;;;\n0815;SAMARITAN LETTER TAAF;Lo;0;R;;;;;N;;;;;\n0816;SAMARITAN MARK IN;Mn;230;NSM;;;;;N;;;;;\n0817;SAMARITAN MARK IN-ALAF;Mn;230;NSM;;;;;N;;;;;\n0818;SAMARITAN MARK OCCLUSION;Mn;230;NSM;;;;;N;;;;;\n0819;SAMARITAN MARK DAGESH;Mn;230;NSM;;;;;N;;;;;\n081A;SAMARITAN MODIFIER LETTER EPENTHETIC YUT;Lm;0;R;;;;;N;;;;;\n081B;SAMARITAN MARK EPENTHETIC YUT;Mn;230;NSM;;;;;N;;;;;\n081C;SAMARITAN VOWEL SIGN LONG E;Mn;230;NSM;;;;;N;;;;;\n081D;SAMARITAN VOWEL SIGN E;Mn;230;NSM;;;;;N;;;;;\n081E;SAMARITAN VOWEL SIGN OVERLONG AA;Mn;230;NSM;;;;;N;;;;;\n081F;SAMARITAN VOWEL SIGN LONG AA;Mn;230;NSM;;;;;N;;;;;\n0820;SAMARITAN VOWEL SIGN AA;Mn;230;NSM;;;;;N;;;;;\n0821;SAMARITAN VOWEL SIGN OVERLONG A;Mn;230;NSM;;;;;N;;;;;\n0822;SAMARITAN VOWEL SIGN LONG A;Mn;230;NSM;;;;;N;;;;;\n0823;SAMARITAN VOWEL SIGN A;Mn;230;NSM;;;;;N;;;;;\n0824;SAMARITAN MODIFIER LETTER SHORT A;Lm;0;R;;;;;N;;;;;\n0825;SAMARITAN VOWEL SIGN SHORT A;Mn;230;NSM;;;;;N;;;;;\n0826;SAMARITAN VOWEL SIGN LONG U;Mn;230;NSM;;;;;N;;;;;\n0827;SAMARITAN VOWEL SIGN U;Mn;230;NSM;;;;;N;;;;;\n0828;SAMARITAN MODIFIER LETTER I;Lm;0;R;;;;;N;;;;;\n0829;SAMARITAN VOWEL SIGN LONG I;Mn;230;NSM;;;;;N;;;;;\n082A;SAMARITAN VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;;\n082B;SAMARITAN VOWEL SIGN O;Mn;230;NSM;;;;;N;;;;;\n082C;SAMARITAN VOWEL SIGN SUKUN;Mn;230;NSM;;;;;N;;;;;\n082D;SAMARITAN MARK NEQUDAA;Mn;230;NSM;;;;;N;;;;;\n0830;SAMARITAN PUNCTUATION NEQUDAA;Po;0;R;;;;;N;;;;;\n0831;SAMARITAN PUNCTUATION AFSAAQ;Po;0;R;;;;;N;;;;;\n0832;SAMARITAN PUNCTUATION ANGED;Po;0;R;;;;;N;;;;;\n0833;SAMARITAN PUNCTUATION BAU;Po;0;R;;;;;N;;;;;\n0834;SAMARITAN PUNCTUATION ATMAAU;Po;0;R;;;;;N;;;;;\n0835;SAMARITAN PUNCTUATION SHIYYAALAA;Po;0;R;;;;;N;;;;;\n0836;SAMARITAN ABBREVIATION MARK;Po;0;R;;;;;N;;;;;\n0837;SAMARITAN PUNCTUATION MELODIC QITSA;Po;0;R;;;;;N;;;;;\n0838;SAMARITAN PUNCTUATION ZIQAA;Po;0;R;;;;;N;;;;;\n0839;SAMARITAN PUNCTUATION QITSA;Po;0;R;;;;;N;;;;;\n083A;SAMARITAN PUNCTUATION ZAEF;Po;0;R;;;;;N;;;;;\n083B;SAMARITAN PUNCTUATION TURU;Po;0;R;;;;;N;;;;;\n083C;SAMARITAN PUNCTUATION ARKAANU;Po;0;R;;;;;N;;;;;\n083D;SAMARITAN PUNCTUATION SOF MASHFAAT;Po;0;R;;;;;N;;;;;\n083E;SAMARITAN PUNCTUATION ANNAAU;Po;0;R;;;;;N;;;;;\n0840;MANDAIC LETTER HALQA;Lo;0;R;;;;;N;;;;;\n0841;MANDAIC LETTER AB;Lo;0;R;;;;;N;;;;;\n0842;MANDAIC LETTER AG;Lo;0;R;;;;;N;;;;;\n0843;MANDAIC LETTER AD;Lo;0;R;;;;;N;;;;;\n0844;MANDAIC LETTER AH;Lo;0;R;;;;;N;;;;;\n0845;MANDAIC LETTER USHENNA;Lo;0;R;;;;;N;;;;;\n0846;MANDAIC LETTER AZ;Lo;0;R;;;;;N;;;;;\n0847;MANDAIC LETTER IT;Lo;0;R;;;;;N;;;;;\n0848;MANDAIC LETTER ATT;Lo;0;R;;;;;N;;;;;\n0849;MANDAIC LETTER AKSA;Lo;0;R;;;;;N;;;;;\n084A;MANDAIC LETTER AK;Lo;0;R;;;;;N;;;;;\n084B;MANDAIC LETTER AL;Lo;0;R;;;;;N;;;;;\n084C;MANDAIC LETTER AM;Lo;0;R;;;;;N;;;;;\n084D;MANDAIC LETTER AN;Lo;0;R;;;;;N;;;;;\n084E;MANDAIC LETTER AS;Lo;0;R;;;;;N;;;;;\n084F;MANDAIC LETTER IN;Lo;0;R;;;;;N;;;;;\n0850;MANDAIC LETTER AP;Lo;0;R;;;;;N;;;;;\n0851;MANDAIC LETTER ASZ;Lo;0;R;;;;;N;;;;;\n0852;MANDAIC LETTER AQ;Lo;0;R;;;;;N;;;;;\n0853;MANDAIC LETTER AR;Lo;0;R;;;;;N;;;;;\n0854;MANDAIC LETTER ASH;Lo;0;R;;;;;N;;;;;\n0855;MANDAIC LETTER AT;Lo;0;R;;;;;N;;;;;\n0856;MANDAIC LETTER DUSHENNA;Lo;0;R;;;;;N;;;;;\n0857;MANDAIC LETTER KAD;Lo;0;R;;;;;N;;;;;\n0858;MANDAIC LETTER AIN;Lo;0;R;;;;;N;;;;;\n0859;MANDAIC AFFRICATION MARK;Mn;220;NSM;;;;;N;;;;;\n085A;MANDAIC VOCALIZATION MARK;Mn;220;NSM;;;;;N;;;;;\n085B;MANDAIC GEMINATION MARK;Mn;220;NSM;;;;;N;;;;;\n085E;MANDAIC PUNCTUATION;Po;0;R;;;;;N;;;;;\n0860;SYRIAC LETTER MALAYALAM NGA;Lo;0;AL;;;;;N;;;;;\n0861;SYRIAC LETTER MALAYALAM JA;Lo;0;AL;;;;;N;;;;;\n0862;SYRIAC LETTER MALAYALAM NYA;Lo;0;AL;;;;;N;;;;;\n0863;SYRIAC LETTER MALAYALAM TTA;Lo;0;AL;;;;;N;;;;;\n0864;SYRIAC LETTER MALAYALAM NNA;Lo;0;AL;;;;;N;;;;;\n0865;SYRIAC LETTER MALAYALAM NNNA;Lo;0;AL;;;;;N;;;;;\n0866;SYRIAC LETTER MALAYALAM BHA;Lo;0;AL;;;;;N;;;;;\n0867;SYRIAC LETTER MALAYALAM RA;Lo;0;AL;;;;;N;;;;;\n0868;SYRIAC LETTER MALAYALAM LLA;Lo;0;AL;;;;;N;;;;;\n0869;SYRIAC LETTER MALAYALAM LLLA;Lo;0;AL;;;;;N;;;;;\n086A;SYRIAC LETTER MALAYALAM SSA;Lo;0;AL;;;;;N;;;;;\n0870;ARABIC LETTER ALEF WITH ATTACHED FATHA;Lo;0;AL;;;;;N;;;;;\n0871;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA;Lo;0;AL;;;;;N;;;;;\n0872;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;;\n0873;ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;;\n0874;ARABIC LETTER ALEF WITH ATTACHED KASRA;Lo;0;AL;;;;;N;;;;;\n0875;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA;Lo;0;AL;;;;;N;;;;;\n0876;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n0877;ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT;Lo;0;AL;;;;;N;;;;;\n0878;ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT;Lo;0;AL;;;;;N;;;;;\n0879;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW;Lo;0;AL;;;;;N;;;;;\n087A;ARABIC LETTER ALEF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n087B;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n087C;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n087D;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n087E;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING;Lo;0;AL;;;;;N;;;;;\n087F;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING;Lo;0;AL;;;;;N;;;;;\n0880;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING;Lo;0;AL;;;;;N;;;;;\n0881;ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA;Lo;0;AL;;;;;N;;;;;\n0882;ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA;Lo;0;AL;;;;;N;;;;;\n0883;ARABIC TATWEEL WITH OVERSTRUCK HAMZA;Lo;0;AL;;;;;N;;;;;\n0884;ARABIC TATWEEL WITH OVERSTRUCK WAW;Lo;0;AL;;;;;N;;;;;\n0885;ARABIC TATWEEL WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n0886;ARABIC LETTER THIN YEH;Lo;0;AL;;;;;N;;;;;\n0887;ARABIC BASELINE ROUND DOT;Lo;0;AL;;;;;N;;;;;\n0888;ARABIC RAISED ROUND DOT;Sk;0;AL;;;;;N;;;;;\n0889;ARABIC LETTER NOON WITH INVERTED SMALL V;Lo;0;AL;;;;;N;;;;;\n088A;ARABIC LETTER HAH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;\n088B;ARABIC LETTER TAH WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;\n088C;ARABIC LETTER TAH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n088D;ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;;\n088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;;\n088F;ARABIC LETTER NOON WITH RING ABOVE;Lo;0;AL;;;;;N;;;;;\n0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;;\n0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;;\n0897;ARABIC PEPET;Mn;230;NSM;;;;;N;;;;;\n0898;ARABIC SMALL HIGH WORD AL-JUZ;Mn;230;NSM;;;;;N;;;;;\n0899;ARABIC SMALL LOW WORD ISHMAAM;Mn;220;NSM;;;;;N;;;;;\n089A;ARABIC SMALL LOW WORD IMAALA;Mn;220;NSM;;;;;N;;;;;\n089B;ARABIC SMALL LOW WORD TASHEEL;Mn;220;NSM;;;;;N;;;;;\n089C;ARABIC MADDA WAAJIB;Mn;230;NSM;;;;;N;;;;;\n089D;ARABIC SUPERSCRIPT ALEF MOKHASSAS;Mn;230;NSM;;;;;N;;;;;\n089E;ARABIC DOUBLED MADDA;Mn;230;NSM;;;;;N;;;;;\n089F;ARABIC HALF MADDA OVER MADDA;Mn;230;NSM;;;;;N;;;;;\n08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;;\n08A1;ARABIC LETTER BEH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;\n08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n08A3;ARABIC LETTER TAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n08A4;ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n08A5;ARABIC LETTER QAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;\n08A6;ARABIC LETTER LAM WITH DOUBLE BAR;Lo;0;AL;;;;;N;;;;;\n08A7;ARABIC LETTER MEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n08A8;ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;\n08A9;ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;\n08AA;ARABIC LETTER REH WITH LOOP;Lo;0;AL;;;;;N;;;;;\n08AB;ARABIC LETTER WAW WITH DOT WITHIN;Lo;0;AL;;;;;N;;;;;\n08AC;ARABIC LETTER ROHINGYA YEH;Lo;0;AL;;;;;N;;;;;\n08AD;ARABIC LETTER LOW ALEF;Lo;0;AL;;;;;N;;;;;\n08AE;ARABIC LETTER DAL WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n08AF;ARABIC LETTER SAD WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n08B0;ARABIC LETTER GAF WITH INVERTED STROKE;Lo;0;AL;;;;;N;;;;;\n08B1;ARABIC LETTER STRAIGHT WAW;Lo;0;AL;;;;;N;;;;;\n08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;;\n08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;\n08B5;ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n08B6;ARABIC LETTER BEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;;\n08B7;ARABIC LETTER PEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;;\n08B8;ARABIC LETTER TEH WITH SMALL TEH ABOVE;Lo;0;AL;;;;;N;;;;;\n08B9;ARABIC LETTER REH WITH SMALL NOON ABOVE;Lo;0;AL;;;;;N;;;;;\n08BA;ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE;Lo;0;AL;;;;;N;;;;;\n08BB;ARABIC LETTER AFRICAN FEH;Lo;0;AL;;;;;N;;;;;\n08BC;ARABIC LETTER AFRICAN QAF;Lo;0;AL;;;;;N;;;;;\n08BD;ARABIC LETTER AFRICAN NOON;Lo;0;AL;;;;;N;;;;;\n08BE;ARABIC LETTER PEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;\n08BF;ARABIC LETTER TEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;\n08C0;ARABIC LETTER TTEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;\n08C1;ARABIC LETTER TCHEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;\n08C2;ARABIC LETTER KEHEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;\n08C3;ARABIC LETTER GHAIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n08C4;ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n08C5;ARABIC LETTER JEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;\n08C6;ARABIC LETTER JEEM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n08C7;ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;;\n08C8;ARABIC LETTER GRAF;Lo;0;AL;;;;;N;;;;;\n08C9;ARABIC SMALL FARSI YEH;Lm;0;AL;;;;;N;;;;;\n08CA;ARABIC SMALL HIGH FARSI YEH;Mn;230;NSM;;;;;N;;;;;\n08CB;ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW;Mn;230;NSM;;;;;N;;;;;\n08CC;ARABIC SMALL HIGH WORD SAH;Mn;230;NSM;;;;;N;;;;;\n08CD;ARABIC SMALL HIGH ZAH;Mn;230;NSM;;;;;N;;;;;\n08CE;ARABIC LARGE ROUND DOT ABOVE;Mn;230;NSM;;;;;N;;;;;\n08CF;ARABIC LARGE ROUND DOT BELOW;Mn;220;NSM;;;;;N;;;;;\n08D0;ARABIC SUKUN BELOW;Mn;220;NSM;;;;;N;;;;;\n08D1;ARABIC LARGE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;;\n08D2;ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;;\n08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;;\n08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;;\n08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;;\n08D6;ARABIC SMALL HIGH AIN;Mn;230;NSM;;;;;N;;;;;\n08D7;ARABIC SMALL HIGH QAF;Mn;230;NSM;;;;;N;;;;;\n08D8;ARABIC SMALL HIGH NOON WITH KASRA;Mn;230;NSM;;;;;N;;;;;\n08D9;ARABIC SMALL LOW NOON WITH KASRA;Mn;230;NSM;;;;;N;;;;;\n08DA;ARABIC SMALL HIGH WORD ATH-THALATHA;Mn;230;NSM;;;;;N;;;;;\n08DB;ARABIC SMALL HIGH WORD AS-SAJDA;Mn;230;NSM;;;;;N;;;;;\n08DC;ARABIC SMALL HIGH WORD AN-NISF;Mn;230;NSM;;;;;N;;;;;\n08DD;ARABIC SMALL HIGH WORD SAKTA;Mn;230;NSM;;;;;N;;;;;\n08DE;ARABIC SMALL HIGH WORD QIF;Mn;230;NSM;;;;;N;;;;;\n08DF;ARABIC SMALL HIGH WORD WAQFA;Mn;230;NSM;;;;;N;;;;;\n08E0;ARABIC SMALL HIGH FOOTNOTE MARKER;Mn;230;NSM;;;;;N;;;;;\n08E1;ARABIC SMALL HIGH SIGN SAFHA;Mn;230;NSM;;;;;N;;;;;\n08E2;ARABIC DISPUTED END OF AYAH;Cf;0;AN;;;;;N;;;;;\n08E3;ARABIC TURNED DAMMA BELOW;Mn;220;NSM;;;;;N;;;;;\n08E4;ARABIC CURLY FATHA;Mn;230;NSM;;;;;N;;;;;\n08E5;ARABIC CURLY DAMMA;Mn;230;NSM;;;;;N;;;;;\n08E6;ARABIC CURLY KASRA;Mn;220;NSM;;;;;N;;;;;\n08E7;ARABIC CURLY FATHATAN;Mn;230;NSM;;;;;N;;;;;\n08E8;ARABIC CURLY DAMMATAN;Mn;230;NSM;;;;;N;;;;;\n08E9;ARABIC CURLY KASRATAN;Mn;220;NSM;;;;;N;;;;;\n08EA;ARABIC TONE ONE DOT ABOVE;Mn;230;NSM;;;;;N;;;;;\n08EB;ARABIC TONE TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;\n08EC;ARABIC TONE LOOP ABOVE;Mn;230;NSM;;;;;N;;;;;\n08ED;ARABIC TONE ONE DOT BELOW;Mn;220;NSM;;;;;N;;;;;\n08EE;ARABIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;\n08EF;ARABIC TONE LOOP BELOW;Mn;220;NSM;;;;;N;;;;;\n08F0;ARABIC OPEN FATHATAN;Mn;27;NSM;;;;;N;;;;;\n08F1;ARABIC OPEN DAMMATAN;Mn;28;NSM;;;;;N;;;;;\n08F2;ARABIC OPEN KASRATAN;Mn;29;NSM;;;;;N;;;;;\n08F3;ARABIC SMALL HIGH WAW;Mn;230;NSM;;;;;N;;;;;\n08F4;ARABIC FATHA WITH RING;Mn;230;NSM;;;;;N;;;;;\n08F5;ARABIC FATHA WITH DOT ABOVE;Mn;230;NSM;;;;;N;;;;;\n08F6;ARABIC KASRA WITH DOT BELOW;Mn;220;NSM;;;;;N;;;;;\n08F7;ARABIC LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;\n08F8;ARABIC RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;\n08F9;ARABIC LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;\n08FA;ARABIC RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;\n08FB;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;\n08FC;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;;\n08FD;ARABIC RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;;\n08FE;ARABIC DAMMA WITH DOT;Mn;230;NSM;;;;;N;;;;;\n08FF;ARABIC MARK SIDEWAYS NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;\n0900;DEVANAGARI SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;;\n0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;\n0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;\n0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;\n0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;\n0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;\n090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;\n090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;\n090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;\n090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;\n0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;\n0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;\n0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;\n0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;\n0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;\n0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;\n0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;\n0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;\n0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;\n0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;\n091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;\n091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;\n091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;\n091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;\n091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;\n091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;\n0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;\n0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;\n0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;\n0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;\n0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;\n0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;\n0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;\n0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;\n092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;\n092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;\n092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;\n092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;\n092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;\n092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;\n0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;\n0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;\n0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;\n0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;\n0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;\n0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;\n0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;\n0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;\n0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;\n0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;\n093A;DEVANAGARI VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;\n093B;DEVANAGARI VOWEL SIGN OOE;Mc;0;L;;;;;N;;;;;\n093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;\n0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;\n0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;\n094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;\n094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n094E;DEVANAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;;\n094F;DEVANAGARI VOWEL SIGN AW;Mc;0;L;;;;;N;;;;;\n0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;\n0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;\n0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;\n0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;\n0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;\n0955;DEVANAGARI VOWEL SIGN CANDRA LONG E;Mn;0;NSM;;;;;N;;;;;\n0956;DEVANAGARI VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;\n0957;DEVANAGARI VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;;\n0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;\n0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;\n095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;\n095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;\n095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;\n095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;\n095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;\n095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;\n0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;\n0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n0971;DEVANAGARI SIGN HIGH SPACING DOT;Lm;0;L;;;;;N;;;;;\n0972;DEVANAGARI LETTER CANDRA A;Lo;0;L;;;;;N;;;;;\n0973;DEVANAGARI LETTER OE;Lo;0;L;;;;;N;;;;;\n0974;DEVANAGARI LETTER OOE;Lo;0;L;;;;;N;;;;;\n0975;DEVANAGARI LETTER AW;Lo;0;L;;;;;N;;;;;\n0976;DEVANAGARI LETTER UE;Lo;0;L;;;;;N;;;;;\n0977;DEVANAGARI LETTER UUE;Lo;0;L;;;;;N;;;;;\n0978;DEVANAGARI LETTER MARWARI DDA;Lo;0;L;;;;;N;;;;;\n0979;DEVANAGARI LETTER ZHA;Lo;0;L;;;;;N;;;;;\n097A;DEVANAGARI LETTER HEAVY YA;Lo;0;L;;;;;N;;;;;\n097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;;\n097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;;\n097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;\n097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;;\n097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;;\n0980;BENGALI ANJI;Lo;0;L;;;;;N;;;;;\n0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;\n0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;\n0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;\n0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;\n0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;\n0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;\n098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;\n098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;\n0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;\n0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;\n0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;\n0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;\n0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;\n0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;\n0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;\n0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;\n099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;\n099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;\n099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;\n099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;\n099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;\n099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;\n09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;\n09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;\n09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;\n09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;\n09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;\n09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;\n09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;\n09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;\n09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;\n09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;\n09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;\n09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;\n09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;\n09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;\n09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;\n09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;\n09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;\n09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;\n09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;\n09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\n09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;\n09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;\n09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;;\n09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;\n09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;\n09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;\n09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;\n09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;;;;\n09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;;;;\n09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;\n09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;\n09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1/16;N;;;;;\n09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;1/8;N;;;;;\n09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3/16;N;;;;;\n09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;1/4;N;;;;;\n09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;3/4;N;;;;;\n09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;\n09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;\n09FB;BENGALI GANDA MARK;Sc;0;ET;;;;;N;;;;;\n09FC;BENGALI LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;\n09FD;BENGALI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n09FE;BENGALI SANDHI MARK;Mn;230;NSM;;;;;N;;;;;\n0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;;\n0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;\n0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;\n0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;\n0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;\n0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;\n0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;\n0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;\n0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;\n0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;\n0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;\n0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;\n0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;\n0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;\n0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;\n0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;\n0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;\n0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;\n0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;\n0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;\n0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;\n0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;\n0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;\n0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;\n0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;\n0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;\n0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;\n0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;\n0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;\n0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;\n0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;\n0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;\n0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;\n0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;\n0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;\n0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;\n0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;\n0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;\n0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;\n0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;\n0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;\n0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;\n0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;\n0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;\n0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;\n0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;\n0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n0A51;GURMUKHI SIGN UDAAT;Mn;0;NSM;;;;;N;;;;;\n0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;\n0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;\n0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;\n0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;\n0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;\n0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;\n0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;\n0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;\n0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;\n0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;\n0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;;\n0A76;GURMUKHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;\n0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;\n0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;\n0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;\n0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;\n0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;\n0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;\n0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;\n0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;\n0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;\n0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;\n0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;\n0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;\n0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;\n0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;\n0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;\n0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;\n0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;\n0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;\n0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;\n0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;\n0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;\n0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;\n0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;\n0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;\n0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;\n0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;\n0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;\n0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;\n0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;\n0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;\n0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;\n0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;\n0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;\n0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;\n0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;\n0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;\n0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;\n0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;\n0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;\n0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;\n0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;\n0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;\n0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;\n0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;\n0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;\n0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;\n0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n0AF0;GUJARATI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;\n0AF9;GUJARATI LETTER ZHA;Lo;0;L;;;;;N;;;;;\n0AFA;GUJARATI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;;\n0AFB;GUJARATI SIGN SHADDA;Mn;0;NSM;;;;;N;;;;;\n0AFC;GUJARATI SIGN MADDAH;Mn;0;NSM;;;;;N;;;;;\n0AFD;GUJARATI SIGN THREE-DOT NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;;\n0AFE;GUJARATI SIGN CIRCLE NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;;\n0AFF;GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;;\n0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;\n0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;\n0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;\n0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;\n0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;\n0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;\n0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;\n0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;\n0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;\n0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;\n0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;\n0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;\n0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;\n0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;\n0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;\n0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;\n0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;\n0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;\n0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;\n0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;\n0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;\n0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;\n0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;\n0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;\n0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;\n0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;\n0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;\n0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;\n0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;\n0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;\n0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;\n0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;\n0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;\n0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;\n0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;\n0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;\n0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;\n0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;\n0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;\n0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;\n0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;;\n0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;\n0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;\n0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;\n0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;\n0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n0B44;ORIYA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;\n0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;\n0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;\n0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n0B55;ORIYA SIGN OVERLINE;Mn;0;NSM;;;;;N;;;;;\n0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;\n0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;\n0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;\n0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;\n0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;\n0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n0B62;ORIYA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n0B63;ORIYA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;\n0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;;\n0B72;ORIYA FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;\n0B73;ORIYA FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;\n0B74;ORIYA FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;\n0B75;ORIYA FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;;\n0B76;ORIYA FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;;\n0B77;ORIYA FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;;\n0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;;\n0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;\n0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;\n0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;\n0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;\n0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;\n0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;\n0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;\n0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;\n0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;\n0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;\n0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;\n0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;\n0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;\n0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;\n0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;\n0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;\n0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;\n0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;\n0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;\n0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;\n0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;\n0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;\n0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;\n0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;\n0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;\n0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;\n0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;\n0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;\n0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;\n0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;\n0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;\n0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;;\n0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;\n0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;\n0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;\n0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;\n0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;\n0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;\n0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\n0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;\n0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;\n0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;\n0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n0BD0;TAMIL OM;Lo;0;L;;;;;N;;;;;\n0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;\n0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;\n0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;\n0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;\n0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;;;;\n0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;;;;\n0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;;;;\n0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;;;;\n0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;;;;\n0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;;;;\n0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;;;;\n0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;;;;\n0C00;TELUGU SIGN COMBINING CANDRABINDU ABOVE;Mn;0;NSM;;;;;N;;;;;\n0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;\n0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;\n0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n0C04;TELUGU SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;;\n0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;\n0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;\n0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;\n0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;\n0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;\n0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;\n0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;\n0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;\n0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;\n0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;\n0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;\n0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;\n0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;\n0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;\n0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;\n0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;\n0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;\n0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;\n0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;\n0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;\n0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;\n0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;\n0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;\n0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;\n0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;\n0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;\n0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;\n0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;\n0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;\n0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;\n0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;\n0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;\n0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;\n0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;\n0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;\n0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;\n0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;\n0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;\n0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;\n0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;\n0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;\n0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;\n0C34;TELUGU LETTER LLLA;Lo;0;L;;;;;N;;;;;\n0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;\n0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;\n0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;\n0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;\n0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;\n0C3C;TELUGU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;\n0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;\n0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;\n0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;\n0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;\n0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;\n0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;\n0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;\n0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;\n0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;\n0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;\n0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;;\n0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;;\n0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;;\n0C5C;TELUGU ARCHAIC SHRII;Lo;0;L;;;;;N;;;;;\n0C5D;TELUGU LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;;\n0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n0C63;TELUGU VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n0C77;TELUGU SIGN SIDDHAM;Po;0;L;;;;;N;;;;;\n0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;;\n0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;;\n0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;;\n0C7B;TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR;No;0;ON;;;;3;N;;;;;\n0C7C;TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR;No;0;ON;;;;1;N;;;;;\n0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;;\n0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;;\n0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;;\n0C80;KANNADA SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;;\n0C81;KANNADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;\n0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n0C84;KANNADA SIGN SIDDHAM;Po;0;L;;;;;N;;;;;\n0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;\n0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;\n0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;\n0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;\n0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;\n0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;\n0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;\n0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;\n0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;\n0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;\n0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;\n0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;\n0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;\n0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;\n0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;\n0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;\n0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;\n0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;\n0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;\n0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;\n0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;\n0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;\n0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;\n0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;\n0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;\n0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;\n0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;\n0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;\n0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;\n0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;\n0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;\n0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;\n0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;\n0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;\n0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;\n0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;\n0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;\n0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;\n0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;\n0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;\n0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;\n0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;\n0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;\n0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;\n0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;\n0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;\n0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;\n0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;;\n0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;\n0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;\n0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;\n0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;\n0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;\n0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;;\n0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;\n0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;\n0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;\n0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;\n0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;\n0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;\n0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;\n0CDC;KANNADA ARCHAIC SHRII;Lo;0;L;;;;;N;;;;;\n0CDD;KANNADA LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;;\n0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;\n0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n0CF1;KANNADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;\n0CF2;KANNADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;\n0CF3;KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT;Mc;0;L;;;;;N;;;;;\n0D00;MALAYALAM SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;;\n0D01;MALAYALAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;\n0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n0D04;MALAYALAM LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;\n0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;\n0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;\n0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;\n0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;\n0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;\n0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;\n0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;\n0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;\n0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;\n0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;\n0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;\n0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;\n0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;\n0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;\n0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;\n0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;\n0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;\n0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;\n0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;\n0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;\n0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;\n0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;\n0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;\n0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;\n0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;\n0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;\n0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;\n0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;\n0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;\n0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;\n0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;\n0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;\n0D29;MALAYALAM LETTER NNNA;Lo;0;L;;;;;N;;;;;\n0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;\n0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;\n0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;\n0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;\n0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;\n0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;\n0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;\n0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;\n0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;\n0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;\n0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;\n0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;\n0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;\n0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;\n0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;\n0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;\n0D3A;MALAYALAM LETTER TTTA;Lo;0;L;;;;;N;;;;;\n0D3B;MALAYALAM SIGN VERTICAL BAR VIRAMA;Mn;9;NSM;;;;;N;;;;;\n0D3C;MALAYALAM SIGN CIRCULAR VIRAMA;Mn;9;NSM;;;;;N;;;;;\n0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n0D44;MALAYALAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;\n0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\n0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;\n0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;\n0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;\n0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n0D4E;MALAYALAM LETTER DOT REPH;Lo;0;L;;;;;N;;;;;\n0D4F;MALAYALAM SIGN PARA;So;0;L;;;;;N;;;;;\n0D54;MALAYALAM LETTER CHILLU M;Lo;0;L;;;;;N;;;;;\n0D55;MALAYALAM LETTER CHILLU Y;Lo;0;L;;;;;N;;;;;\n0D56;MALAYALAM LETTER CHILLU LLL;Lo;0;L;;;;;N;;;;;\n0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;\n0D58;MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;;\n0D59;MALAYALAM FRACTION ONE FORTIETH;No;0;L;;;;1/40;N;;;;;\n0D5A;MALAYALAM FRACTION THREE EIGHTIETHS;No;0;L;;;;3/80;N;;;;;\n0D5B;MALAYALAM FRACTION ONE TWENTIETH;No;0;L;;;;1/20;N;;;;;\n0D5C;MALAYALAM FRACTION ONE TENTH;No;0;L;;;;1/10;N;;;;;\n0D5D;MALAYALAM FRACTION THREE TWENTIETHS;No;0;L;;;;3/20;N;;;;;\n0D5E;MALAYALAM FRACTION ONE FIFTH;No;0;L;;;;1/5;N;;;;;\n0D5F;MALAYALAM LETTER ARCHAIC II;Lo;0;L;;;;;N;;;;;\n0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n0D63;MALAYALAM VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n0D70;MALAYALAM NUMBER TEN;No;0;L;;;;10;N;;;;;\n0D71;MALAYALAM NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;\n0D72;MALAYALAM NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;\n0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;\n0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;\n0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;\n0D76;MALAYALAM FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;;\n0D77;MALAYALAM FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;;\n0D78;MALAYALAM FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;;\n0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;;\n0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;;\n0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;;\n0D7C;MALAYALAM LETTER CHILLU RR;Lo;0;L;;;;;N;;;;;\n0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;;\n0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;;\n0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;;\n0D81;SINHALA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;\n0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;\n0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;\n0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;\n0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;\n0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;\n0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;\n0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;\n0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;\n0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;\n0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;\n0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;\n0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;\n0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;\n0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;\n0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;\n0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;\n0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;\n0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;\n0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;\n0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;\n0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;\n0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;\n0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;\n0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;\n0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;\n0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;\n0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;\n0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;\n0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;\n0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;\n0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;\n0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;\n0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;\n0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;\n0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;\n0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;\n0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;\n0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;\n0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;\n0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;\n0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;\n0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;\n0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;\n0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;\n0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;\n0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;\n0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;\n0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;\n0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;\n0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;\n0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;\n0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;\n0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;\n0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;\n0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;\n0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;\n0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;\n0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;\n0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;\n0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;\n0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;\n0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;\n0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;\n0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;\n0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;\n0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;\n0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;\n0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;\n0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;\n0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;\n0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;\n0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;\n0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;\n0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;\n0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;\n0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;\n0DE6;SINHALA LITH DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n0DE7;SINHALA LITH DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n0DE8;SINHALA LITH DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n0DE9;SINHALA LITH DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n0DEA;SINHALA LITH DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n0DEB;SINHALA LITH DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n0DEC;SINHALA LITH DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n0DED;SINHALA LITH DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n0DEE;SINHALA LITH DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n0DEF;SINHALA LITH DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;\n0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;\n0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;\n0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;\n0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;\n0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;\n0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;\n0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;\n0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;\n0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;\n0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;\n0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;\n0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;\n0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;\n0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;\n0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;\n0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;\n0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;\n0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;\n0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;\n0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;\n0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;\n0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;\n0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;\n0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;\n0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;\n0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;\n0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;\n0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;\n0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;\n0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;\n0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;\n0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;\n0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;\n0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;\n0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;\n0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;\n0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;\n0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;\n0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;\n0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;\n0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;\n0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;\n0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;\n0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;\n0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;\n0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;\n0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;\n0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;\n0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;;;;\n0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;\n0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;\n0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;\n0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;\n0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;\n0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;\n0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;\n0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;;;;\n0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;\n0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;\n0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;\n0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;\n0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;\n0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;\n0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;\n0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;;\n0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;;\n0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;;\n0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;;;;\n0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;;\n0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;\n0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;\n0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;\n0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;\n0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;\n0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;;;;\n0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;\n0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;\n0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;\n0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;\n0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;\n0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;\n0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;\n0E86;LAO LETTER PALI GHA;Lo;0;L;;;;;N;;;;;\n0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;\n0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;\n0E89;LAO LETTER PALI CHA;Lo;0;L;;;;;N;;;;;\n0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;\n0E8C;LAO LETTER PALI JHA;Lo;0;L;;;;;N;;;;;\n0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;\n0E8E;LAO LETTER PALI NYA;Lo;0;L;;;;;N;;;;;\n0E8F;LAO LETTER PALI TTA;Lo;0;L;;;;;N;;;;;\n0E90;LAO LETTER PALI TTHA;Lo;0;L;;;;;N;;;;;\n0E91;LAO LETTER PALI DDA;Lo;0;L;;;;;N;;;;;\n0E92;LAO LETTER PALI DDHA;Lo;0;L;;;;;N;;;;;\n0E93;LAO LETTER PALI NNA;Lo;0;L;;;;;N;;;;;\n0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;\n0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;\n0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;\n0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;\n0E98;LAO LETTER PALI DHA;Lo;0;L;;;;;N;;;;;\n0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;\n0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;\n0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;\n0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;\n0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;\n0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;\n0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;\n0EA0;LAO LETTER PALI BHA;Lo;0;L;;;;;N;;;;;\n0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;\n0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;\n0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;\n0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;\n0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;\n0EA8;LAO LETTER SANSKRIT SHA;Lo;0;L;;;;;N;;;;;\n0EA9;LAO LETTER SANSKRIT SSA;Lo;0;L;;;;;N;;;;;\n0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;\n0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;\n0EAC;LAO LETTER PALI LLA;Lo;0;L;;;;;N;;;;;\n0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;\n0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;\n0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;\n0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;\n0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;\n0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;\n0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;\n0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;\n0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;\n0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;\n0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;\n0EBA;LAO SIGN PALI VIRAMA;Mn;9;NSM;;;;;N;;;;;\n0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;\n0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;\n0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;\n0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;\n0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;\n0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;\n0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;\n0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;\n0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;\n0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;\n0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;\n0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;\n0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;\n0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;\n0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;\n0ECE;LAO YAMAKKAN;Mn;0;NSM;;;;;N;;;;;\n0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;\n0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;\n0EDE;LAO LETTER KHMU GO;Lo;0;L;;;;;N;;;;;\n0EDF;LAO LETTER KHMU NYO;Lo;0;L;;;;;N;;;;;\n0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;\n0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;;;;\n0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;;;;\n0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;;;;\n0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;;;;\n0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;;\n0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;;;;\n0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;;;;\n0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;;;;\n0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;;;;\n0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;;;;\n0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;;;;\n0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;;;;\n0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;;;;\n0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;;;;\n0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;;;;\n0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;;;;\n0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;;;;\n0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;;;;\n0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;;;;\n0F14;TIBETAN MARK GTER TSHEG;Po;0;L;;;;;N;TIBETAN COMMA;;;;\n0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;;;;\n0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;;;;\n0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;;;;\n0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;;;;\n0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;;;;\n0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;;;;\n0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;;;;\n0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;;;;\n0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;;;;\n0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;;;;\n0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;;;;\n0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;;\n0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;;\n0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;;\n0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;;\n0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;;\n0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;;\n0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;;\n0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;;\n0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;;\n0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;;\n0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;;;;\n0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;;;;\n0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;;;;\n0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;;;;\n0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;;;;\n0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;;;;\n0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;;;;\n0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;;;;\n0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;;;;\n0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;;;;\n0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;;;;\n0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;;;;\n0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;\n0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;\n0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;\n0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;\n0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;\n0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;\n0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;\n0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;\n0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;\n0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;\n0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;\n0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;\n0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;\n0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;\n0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;\n0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;\n0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;\n0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;\n0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;\n0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;\n0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;\n0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;\n0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;\n0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;\n0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;\n0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;\n0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;\n0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;\n0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;\n0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;\n0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;\n0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;\n0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;\n0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;;\n0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;\n0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;\n0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;\n0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;\n0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;\n0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;\n0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;\n0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;;;;\n0F6B;TIBETAN LETTER KKA;Lo;0;L;;;;;N;;;;;\n0F6C;TIBETAN LETTER RRA;Lo;0;L;;;;;N;;;;;\n0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;\n0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;\n0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;\n0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;\n0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;\n0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;\n0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;\n0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;\n0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;\n0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;\n0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;\n0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;\n0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;\n0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;;;;\n0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;;;;\n0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;\n0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;\n0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;;;;\n0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;;;;\n0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;\n0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;\n0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;;;;\n0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;;;;\n0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;;;;\n0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;;;;\n0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;;;;\n0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;;;;\n0F8C;TIBETAN SIGN INVERTED MCHU CAN;Lo;0;L;;;;;N;;;;;\n0F8D;TIBETAN SUBJOINED SIGN LCE TSA CAN;Mn;0;NSM;;;;;N;;;;;\n0F8E;TIBETAN SUBJOINED SIGN MCHU CAN;Mn;0;NSM;;;;;N;;;;;\n0F8F;TIBETAN SUBJOINED SIGN INVERTED MCHU CAN;Mn;0;NSM;;;;;N;;;;;\n0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;\n0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;\n0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;\n0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;\n0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;\n0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;\n0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;\n0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;\n0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;\n0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;\n0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;\n0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;\n0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;\n0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;\n0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;\n0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;\n0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;\n0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;\n0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;\n0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;\n0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;\n0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;\n0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;\n0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;\n0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;\n0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;\n0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;\n0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;\n0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;;\n0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;\n0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;\n0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;\n0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;;;;\n0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;;\n0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;\n0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;\n0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;\n0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;\n0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;\n0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;\n0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;\n0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;;;;\n0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;;;;\n0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;;;;\n0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;;;;\n0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;;;;\n0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;\n0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;\n0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;;;;\n0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;;;;\n0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;;;;\n0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;;;;\n0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;;;;\n0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;;;;\n0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;;;;\n0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;;;;\n0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;;;;\n0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;;;;\n0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;;;;\n0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;;;;\n0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;;\n0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;;;;\n0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;;;;\n0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;;;;\n0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;;;;\n0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;;\n0FD5;RIGHT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;;\n0FD6;LEFT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;;\n0FD7;RIGHT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;;\n0FD8;LEFT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;;\n0FD9;TIBETAN MARK LEADING MCHAN RTAGS;Po;0;L;;;;;N;;;;;\n0FDA;TIBETAN MARK TRAILING MCHAN RTAGS;Po;0;L;;;;;N;;;;;\n1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;\n1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;\n1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;\n1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;\n1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;\n1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;\n1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;\n1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;\n1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;\n1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;\n100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;\n100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;\n100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;\n100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;\n100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;\n100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;\n1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;\n1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;\n1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;\n1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;\n1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;\n1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;\n1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;\n1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;\n1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;\n1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;\n101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;\n101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;\n101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;\n101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;\n101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;\n101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;\n1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;\n1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;\n1022;MYANMAR LETTER SHAN A;Lo;0;L;;;;;N;;;;;\n1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;\n1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;\n1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;\n1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;\n1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;\n1028;MYANMAR LETTER MON E;Lo;0;L;;;;;N;;;;;\n1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;\n102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;\n102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;;\n102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n1033;MYANMAR VOWEL SIGN MON II;Mn;0;NSM;;;;;N;;;;;\n1034;MYANMAR VOWEL SIGN MON O;Mn;0;NSM;;;;;N;;;;;\n1035;MYANMAR VOWEL SIGN E ABOVE;Mn;0;NSM;;;;;N;;;;;\n1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;\n1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n103A;MYANMAR SIGN ASAT;Mn;9;NSM;;;;;N;;;;;\n103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;;\n103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;;\n103D;MYANMAR CONSONANT SIGN MEDIAL WA;Mn;0;NSM;;;;;N;;;;;\n103E;MYANMAR CONSONANT SIGN MEDIAL HA;Mn;0;NSM;;;;;N;;;;;\n103F;MYANMAR LETTER GREAT SA;Lo;0;L;;;;;N;;;;;\n1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;\n104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;\n104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;\n104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;\n104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;\n104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;\n1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;\n1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;\n1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;\n1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;\n1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n105A;MYANMAR LETTER MON NGA;Lo;0;L;;;;;N;;;;;\n105B;MYANMAR LETTER MON JHA;Lo;0;L;;;;;N;;;;;\n105C;MYANMAR LETTER MON BBA;Lo;0;L;;;;;N;;;;;\n105D;MYANMAR LETTER MON BBE;Lo;0;L;;;;;N;;;;;\n105E;MYANMAR CONSONANT SIGN MON MEDIAL NA;Mn;0;NSM;;;;;N;;;;;\n105F;MYANMAR CONSONANT SIGN MON MEDIAL MA;Mn;0;NSM;;;;;N;;;;;\n1060;MYANMAR CONSONANT SIGN MON MEDIAL LA;Mn;0;NSM;;;;;N;;;;;\n1061;MYANMAR LETTER SGAW KAREN SHA;Lo;0;L;;;;;N;;;;;\n1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;;\n1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;;\n1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;;\n1065;MYANMAR LETTER WESTERN PWO KAREN THA;Lo;0;L;;;;;N;;;;;\n1066;MYANMAR LETTER WESTERN PWO KAREN PWA;Lo;0;L;;;;;N;;;;;\n1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;;\n1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;;\n1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;;\n106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;;\n106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;;\n106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;;\n106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;;\n106E;MYANMAR LETTER EASTERN PWO KAREN NNA;Lo;0;L;;;;;N;;;;;\n106F;MYANMAR LETTER EASTERN PWO KAREN YWA;Lo;0;L;;;;;N;;;;;\n1070;MYANMAR LETTER EASTERN PWO KAREN GHWA;Lo;0;L;;;;;N;;;;;\n1071;MYANMAR VOWEL SIGN GEBA KAREN I;Mn;0;NSM;;;;;N;;;;;\n1072;MYANMAR VOWEL SIGN KAYAH OE;Mn;0;NSM;;;;;N;;;;;\n1073;MYANMAR VOWEL SIGN KAYAH U;Mn;0;NSM;;;;;N;;;;;\n1074;MYANMAR VOWEL SIGN KAYAH EE;Mn;0;NSM;;;;;N;;;;;\n1075;MYANMAR LETTER SHAN KA;Lo;0;L;;;;;N;;;;;\n1076;MYANMAR LETTER SHAN KHA;Lo;0;L;;;;;N;;;;;\n1077;MYANMAR LETTER SHAN GA;Lo;0;L;;;;;N;;;;;\n1078;MYANMAR LETTER SHAN CA;Lo;0;L;;;;;N;;;;;\n1079;MYANMAR LETTER SHAN ZA;Lo;0;L;;;;;N;;;;;\n107A;MYANMAR LETTER SHAN NYA;Lo;0;L;;;;;N;;;;;\n107B;MYANMAR LETTER SHAN DA;Lo;0;L;;;;;N;;;;;\n107C;MYANMAR LETTER SHAN NA;Lo;0;L;;;;;N;;;;;\n107D;MYANMAR LETTER SHAN PHA;Lo;0;L;;;;;N;;;;;\n107E;MYANMAR LETTER SHAN FA;Lo;0;L;;;;;N;;;;;\n107F;MYANMAR LETTER SHAN BA;Lo;0;L;;;;;N;;;;;\n1080;MYANMAR LETTER SHAN THA;Lo;0;L;;;;;N;;;;;\n1081;MYANMAR LETTER SHAN HA;Lo;0;L;;;;;N;;;;;\n1082;MYANMAR CONSONANT SIGN SHAN MEDIAL WA;Mn;0;NSM;;;;;N;;;;;\n1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;;\n1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;;\n1085;MYANMAR VOWEL SIGN SHAN E ABOVE;Mn;0;NSM;;;;;N;;;;;\n1086;MYANMAR VOWEL SIGN SHAN FINAL Y;Mn;0;NSM;;;;;N;;;;;\n1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;;\n1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;;\n1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;;\n108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;;\n108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;;\n108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;;\n108D;MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE;Mn;220;NSM;;;;;N;;;;;\n108E;MYANMAR LETTER RUMAI PALAUNG FA;Lo;0;L;;;;;N;;;;;\n108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;;\n1090;MYANMAR SHAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1091;MYANMAR SHAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1092;MYANMAR SHAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1093;MYANMAR SHAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1094;MYANMAR SHAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1095;MYANMAR SHAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1096;MYANMAR SHAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1097;MYANMAR SHAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1098;MYANMAR SHAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1099;MYANMAR SHAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n109A;MYANMAR SIGN KHAMTI TONE-1;Mc;0;L;;;;;N;;;;;\n109B;MYANMAR SIGN KHAMTI TONE-3;Mc;0;L;;;;;N;;;;;\n109C;MYANMAR VOWEL SIGN AITON A;Mc;0;L;;;;;N;;;;;\n109D;MYANMAR VOWEL SIGN AITON AI;Mn;0;NSM;;;;;N;;;;;\n109E;MYANMAR SYMBOL SHAN ONE;So;0;L;;;;;N;;;;;\n109F;MYANMAR SYMBOL SHAN EXCLAMATION;So;0;L;;;;;N;;;;;\n10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;2D00;\n10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;2D01;\n10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;2D02;\n10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;2D03;\n10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;2D04;\n10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;2D05;\n10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;2D06;\n10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;2D07;\n10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;2D08;\n10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;2D09;\n10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;2D0A;\n10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;2D0B;\n10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;2D0C;\n10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;2D0D;\n10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;2D0E;\n10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;2D0F;\n10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;2D10;\n10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;2D11;\n10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;2D12;\n10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;2D13;\n10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;2D14;\n10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;2D15;\n10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;2D16;\n10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;2D17;\n10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;2D18;\n10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;2D19;\n10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;2D1A;\n10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;2D1B;\n10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;2D1C;\n10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;2D1D;\n10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;2D1E;\n10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;2D1F;\n10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;2D20;\n10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;2D21;\n10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;2D22;\n10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;2D23;\n10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;2D24;\n10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;2D25;\n10C7;GEORGIAN CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;2D27;\n10CD;GEORGIAN CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;2D2D;\n10D0;GEORGIAN LETTER AN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;1C90;;10D0\n10D1;GEORGIAN LETTER BAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;1C91;;10D1\n10D2;GEORGIAN LETTER GAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;1C92;;10D2\n10D3;GEORGIAN LETTER DON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;1C93;;10D3\n10D4;GEORGIAN LETTER EN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;1C94;;10D4\n10D5;GEORGIAN LETTER VIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;1C95;;10D5\n10D6;GEORGIAN LETTER ZEN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;1C96;;10D6\n10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;1C97;;10D7\n10D8;GEORGIAN LETTER IN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;1C98;;10D8\n10D9;GEORGIAN LETTER KAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;1C99;;10D9\n10DA;GEORGIAN LETTER LAS;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;1C9A;;10DA\n10DB;GEORGIAN LETTER MAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;1C9B;;10DB\n10DC;GEORGIAN LETTER NAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;1C9C;;10DC\n10DD;GEORGIAN LETTER ON;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;1C9D;;10DD\n10DE;GEORGIAN LETTER PAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;1C9E;;10DE\n10DF;GEORGIAN LETTER ZHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;1C9F;;10DF\n10E0;GEORGIAN LETTER RAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;1CA0;;10E0\n10E1;GEORGIAN LETTER SAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;1CA1;;10E1\n10E2;GEORGIAN LETTER TAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;1CA2;;10E2\n10E3;GEORGIAN LETTER UN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;1CA3;;10E3\n10E4;GEORGIAN LETTER PHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;1CA4;;10E4\n10E5;GEORGIAN LETTER KHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;1CA5;;10E5\n10E6;GEORGIAN LETTER GHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;1CA6;;10E6\n10E7;GEORGIAN LETTER QAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;1CA7;;10E7\n10E8;GEORGIAN LETTER SHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;1CA8;;10E8\n10E9;GEORGIAN LETTER CHIN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;1CA9;;10E9\n10EA;GEORGIAN LETTER CAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;1CAA;;10EA\n10EB;GEORGIAN LETTER JIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;1CAB;;10EB\n10EC;GEORGIAN LETTER CIL;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;1CAC;;10EC\n10ED;GEORGIAN LETTER CHAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;1CAD;;10ED\n10EE;GEORGIAN LETTER XAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;1CAE;;10EE\n10EF;GEORGIAN LETTER JHAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;1CAF;;10EF\n10F0;GEORGIAN LETTER HAE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;1CB0;;10F0\n10F1;GEORGIAN LETTER HE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;1CB1;;10F1\n10F2;GEORGIAN LETTER HIE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;1CB2;;10F2\n10F3;GEORGIAN LETTER WE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;1CB3;;10F3\n10F4;GEORGIAN LETTER HAR;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;1CB4;;10F4\n10F5;GEORGIAN LETTER HOE;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;1CB5;;10F5\n10F6;GEORGIAN LETTER FI;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;1CB6;;10F6\n10F7;GEORGIAN LETTER YN;Ll;0;L;;;;;N;;;1CB7;;10F7\n10F8;GEORGIAN LETTER ELIFI;Ll;0;L;;;;;N;;;1CB8;;10F8\n10F9;GEORGIAN LETTER TURNED GAN;Ll;0;L;;;;;N;;;1CB9;;10F9\n10FA;GEORGIAN LETTER AIN;Ll;0;L;;;;;N;;;1CBA;;10FA\n10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;\n10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;;\n10FD;GEORGIAN LETTER AEN;Ll;0;L;;;;;N;;;1CBD;;10FD\n10FE;GEORGIAN LETTER HARD SIGN;Ll;0;L;;;;;N;;;1CBE;;10FE\n10FF;GEORGIAN LETTER LABIAL SIGN;Ll;0;L;;;;;N;;;1CBF;;10FF\n1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;;\n1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;;\n1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;;\n1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;;\n1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;;\n1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;;\n1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;;\n1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;;\n1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;;\n1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;;\n110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;;\n110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;\n110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;;\n110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;;\n110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;\n110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;\n1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;;\n1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;\n1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;;\n1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;\n1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;\n1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;\n1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;\n1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;\n1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;\n1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;\n111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;\n111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;\n111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;\n111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;\n111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;\n111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;\n1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;\n1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;\n1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;\n1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;\n1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;\n1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;\n1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;\n1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;\n1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;\n1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;\n112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;\n112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;\n112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;\n112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;\n112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;\n112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;\n1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;\n1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;\n1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;\n1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;\n1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;\n1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;\n1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;\n1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;\n1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;\n1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;\n113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;\n113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;\n113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;\n113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;\n113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;\n113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;\n1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;\n1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;\n1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;\n1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;\n1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;\n1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;\n1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;\n1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;\n1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;\n1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;\n114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;\n114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;\n114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;\n114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;\n114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;\n114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;\n1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;\n1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;\n1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;\n1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;\n1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;\n1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;\n1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;\n1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;\n1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;\n1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;\n115A;HANGUL CHOSEONG KIYEOK-TIKEUT;Lo;0;L;;;;;N;;;;;\n115B;HANGUL CHOSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;\n115C;HANGUL CHOSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;;\n115D;HANGUL CHOSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;;\n115E;HANGUL CHOSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;\n115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;\n1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;\n1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;\n1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;\n1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;\n1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;\n1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;\n1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;\n1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;\n1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;\n1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;\n116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;\n116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;\n116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;\n116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;\n116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;\n116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;\n1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;\n1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;\n1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;\n1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;\n1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;\n1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;\n1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;\n1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;\n1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;\n1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;\n117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;\n117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;\n117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;\n117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;\n117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;\n117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;\n1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;\n1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;\n1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;\n1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;\n1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;\n1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;\n1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;\n1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;\n1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;\n1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;\n118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;\n118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;\n118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;\n118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;\n118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;\n118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;\n1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;\n1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;\n1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;\n1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;\n1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;\n1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;\n1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;\n1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;\n1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;\n1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;\n119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;\n119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;\n119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;\n119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;\n119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;\n119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;\n11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;\n11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;\n11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;\n11A3;HANGUL JUNGSEONG A-EU;Lo;0;L;;;;;N;;;;;\n11A4;HANGUL JUNGSEONG YA-U;Lo;0;L;;;;;N;;;;;\n11A5;HANGUL JUNGSEONG YEO-YA;Lo;0;L;;;;;N;;;;;\n11A6;HANGUL JUNGSEONG O-YA;Lo;0;L;;;;;N;;;;;\n11A7;HANGUL JUNGSEONG O-YAE;Lo;0;L;;;;;N;;;;;\n11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;;\n11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;;\n11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;\n11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;;\n11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;;\n11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;;\n11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;;\n11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;;\n11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;;\n11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;;\n11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;;\n11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;;\n11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;;;;\n11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;;\n11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;\n11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;;\n11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;;\n11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;\n11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;;\n11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;;\n11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;;\n11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;;\n11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;;\n11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;;\n11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;;\n11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;;\n11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;;\n11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;\n11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;\n11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;\n11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;\n11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;\n11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;\n11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;\n11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;\n11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;\n11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;\n11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;\n11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;\n11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;\n11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;\n11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;\n11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;\n11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;\n11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;\n11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;\n11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;\n11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;\n11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;\n11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;\n11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;\n11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;\n11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;\n11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;\n11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;\n11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;\n11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;\n11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;\n11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;\n11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;\n11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;\n11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;\n11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;\n11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;\n11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;\n11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;\n11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;\n11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;\n11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;\n11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;\n11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;\n11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;\n11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;\n11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;\n11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;\n11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;\n11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;\n11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;\n11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;\n11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;\n11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;\n11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;\n11FA;HANGUL JONGSEONG KIYEOK-NIEUN;Lo;0;L;;;;;N;;;;;\n11FB;HANGUL JONGSEONG KIYEOK-PIEUP;Lo;0;L;;;;;N;;;;;\n11FC;HANGUL JONGSEONG KIYEOK-CHIEUCH;Lo;0;L;;;;;N;;;;;\n11FD;HANGUL JONGSEONG KIYEOK-KHIEUKH;Lo;0;L;;;;;N;;;;;\n11FE;HANGUL JONGSEONG KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;;\n11FF;HANGUL JONGSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;\n1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;\n1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;\n1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;\n1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;\n1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;\n1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;\n1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;\n1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;;\n1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;\n1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;\n120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;\n120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;\n120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;\n120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;\n120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;\n120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;\n1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;\n1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;\n1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;\n1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;\n1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;\n1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;\n1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;\n1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;\n1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;\n1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;\n121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;\n121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;\n121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;\n121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;\n121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;\n121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;\n1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;\n1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;\n1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;\n1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;\n1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;\n1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;\n1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;\n1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;\n1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;\n1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;\n122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;\n122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;\n122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;\n122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;\n122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;\n122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;\n1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;\n1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;\n1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;\n1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;\n1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;\n1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;\n1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;\n1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;\n1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;\n1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;\n123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;\n123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;\n123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;\n123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;\n123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;\n123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;\n1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;\n1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;\n1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;\n1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;\n1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;\n1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;\n1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;\n1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;;\n1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;\n124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;\n124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;\n124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;\n124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;\n1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;\n1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;\n1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;\n1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;\n1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;\n1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;\n1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;\n1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;\n125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;\n125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;\n125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;\n125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;\n1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;\n1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;\n1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;\n1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;\n1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;\n1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;\n1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;\n1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;\n1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;\n1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;\n126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;\n126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;\n126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;\n126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;\n126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;\n126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;\n1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;\n1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;\n1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;\n1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;\n1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;\n1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;\n1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;\n1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;\n1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;\n1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;\n127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;\n127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;\n127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;\n127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;\n127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;\n127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;\n1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;\n1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;\n1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;\n1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;\n1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;\n1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;\n1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;\n1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;;\n1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;\n128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;\n128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;\n128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;\n128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;\n1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;\n1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;\n1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;\n1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;\n1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;\n1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;\n1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;\n1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;\n1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;\n1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;\n129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;\n129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;\n129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;\n129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;\n129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;\n129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;\n12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;\n12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;\n12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;\n12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;\n12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;\n12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;\n12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;\n12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;\n12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;\n12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;\n12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;\n12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;\n12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;\n12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;\n12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;\n12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;;\n12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;\n12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;\n12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;\n12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;\n12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;\n12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;\n12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;\n12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;\n12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;\n12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;\n12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;\n12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;\n12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;\n12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;\n12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;\n12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;\n12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;\n12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;\n12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;\n12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;\n12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;\n12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;\n12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;\n12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;\n12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;;\n12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;\n12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;\n12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;\n12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;\n12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;\n12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;\n12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;\n12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;\n12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;\n12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;\n12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;\n12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;\n12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;\n12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;\n12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;\n12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;\n12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;\n12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;\n12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;\n12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;\n12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;\n12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;\n12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;\n12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;\n12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;\n12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;\n12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;\n12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;\n12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;\n12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;\n12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;;\n12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;\n12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;\n12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;\n12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;\n12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;\n12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;\n12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;\n12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;\n12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;\n12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;\n12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;\n12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;\n12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;\n12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;\n12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;\n12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;\n1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;\n1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;\n1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;\n1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;\n1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;\n1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;\n1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;\n1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;\n1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;\n1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;\n130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;\n130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;\n130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;\n130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;\n130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;\n130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;;\n1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;\n1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;\n1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;\n1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;\n1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;\n1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;\n1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;\n131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;\n131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;\n131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;\n131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;\n131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;\n131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;;\n1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;\n1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;\n1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;\n1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;\n1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;\n1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;\n1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;\n1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;\n1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;\n1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;\n132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;\n132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;\n132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;\n132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;\n132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;\n132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;\n1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;\n1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;\n1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;\n1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;\n1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;\n1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;\n1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;\n1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;\n1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;\n1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;\n133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;\n133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;\n133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;\n133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;\n133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;\n133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;\n1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;\n1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;\n1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;\n1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;\n1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;\n1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;\n1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;\n1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;;\n1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;\n1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;\n134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;\n134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;\n134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;\n134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;\n134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;\n134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;\n1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;\n1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;\n1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;\n1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;\n1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;\n1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;\n1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;\n1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;\n1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;\n1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;\n135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;\n135D;ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;;\n135E;ETHIOPIC COMBINING VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;;\n135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;\n1360;ETHIOPIC SECTION MARK;Po;0;L;;;;;N;;;;;\n1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;\n1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;\n1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;\n1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;\n1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;\n1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;\n1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;\n1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;\n1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;;\n136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;;\n136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;;\n136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;;\n136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;;\n136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;;\n136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;;\n1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;;\n1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;;\n1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;\n1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;\n1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;\n1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;\n1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;\n1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;\n1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;\n1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;\n137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;\n137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;\n137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;\n1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;;\n1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;;\n1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;;\n1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;;\n1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;;\n1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;;\n1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;;\n1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;;\n1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;;\n1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;;\n138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;;\n138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;;\n138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;;\n138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;;\n138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;;\n138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;;\n1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;;\n1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;;\n1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;;\n1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;;\n1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;;\n1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;;\n1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;;\n1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;;\n1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;;\n1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;;\n13A0;CHEROKEE LETTER A;Lu;0;L;;;;;N;;;;AB70;\n13A1;CHEROKEE LETTER E;Lu;0;L;;;;;N;;;;AB71;\n13A2;CHEROKEE LETTER I;Lu;0;L;;;;;N;;;;AB72;\n13A3;CHEROKEE LETTER O;Lu;0;L;;;;;N;;;;AB73;\n13A4;CHEROKEE LETTER U;Lu;0;L;;;;;N;;;;AB74;\n13A5;CHEROKEE LETTER V;Lu;0;L;;;;;N;;;;AB75;\n13A6;CHEROKEE LETTER GA;Lu;0;L;;;;;N;;;;AB76;\n13A7;CHEROKEE LETTER KA;Lu;0;L;;;;;N;;;;AB77;\n13A8;CHEROKEE LETTER GE;Lu;0;L;;;;;N;;;;AB78;\n13A9;CHEROKEE LETTER GI;Lu;0;L;;;;;N;;;;AB79;\n13AA;CHEROKEE LETTER GO;Lu;0;L;;;;;N;;;;AB7A;\n13AB;CHEROKEE LETTER GU;Lu;0;L;;;;;N;;;;AB7B;\n13AC;CHEROKEE LETTER GV;Lu;0;L;;;;;N;;;;AB7C;\n13AD;CHEROKEE LETTER HA;Lu;0;L;;;;;N;;;;AB7D;\n13AE;CHEROKEE LETTER HE;Lu;0;L;;;;;N;;;;AB7E;\n13AF;CHEROKEE LETTER HI;Lu;0;L;;;;;N;;;;AB7F;\n13B0;CHEROKEE LETTER HO;Lu;0;L;;;;;N;;;;AB80;\n13B1;CHEROKEE LETTER HU;Lu;0;L;;;;;N;;;;AB81;\n13B2;CHEROKEE LETTER HV;Lu;0;L;;;;;N;;;;AB82;\n13B3;CHEROKEE LETTER LA;Lu;0;L;;;;;N;;;;AB83;\n13B4;CHEROKEE LETTER LE;Lu;0;L;;;;;N;;;;AB84;\n13B5;CHEROKEE LETTER LI;Lu;0;L;;;;;N;;;;AB85;\n13B6;CHEROKEE LETTER LO;Lu;0;L;;;;;N;;;;AB86;\n13B7;CHEROKEE LETTER LU;Lu;0;L;;;;;N;;;;AB87;\n13B8;CHEROKEE LETTER LV;Lu;0;L;;;;;N;;;;AB88;\n13B9;CHEROKEE LETTER MA;Lu;0;L;;;;;N;;;;AB89;\n13BA;CHEROKEE LETTER ME;Lu;0;L;;;;;N;;;;AB8A;\n13BB;CHEROKEE LETTER MI;Lu;0;L;;;;;N;;;;AB8B;\n13BC;CHEROKEE LETTER MO;Lu;0;L;;;;;N;;;;AB8C;\n13BD;CHEROKEE LETTER MU;Lu;0;L;;;;;N;;;;AB8D;\n13BE;CHEROKEE LETTER NA;Lu;0;L;;;;;N;;;;AB8E;\n13BF;CHEROKEE LETTER HNA;Lu;0;L;;;;;N;;;;AB8F;\n13C0;CHEROKEE LETTER NAH;Lu;0;L;;;;;N;;;;AB90;\n13C1;CHEROKEE LETTER NE;Lu;0;L;;;;;N;;;;AB91;\n13C2;CHEROKEE LETTER NI;Lu;0;L;;;;;N;;;;AB92;\n13C3;CHEROKEE LETTER NO;Lu;0;L;;;;;N;;;;AB93;\n13C4;CHEROKEE LETTER NU;Lu;0;L;;;;;N;;;;AB94;\n13C5;CHEROKEE LETTER NV;Lu;0;L;;;;;N;;;;AB95;\n13C6;CHEROKEE LETTER QUA;Lu;0;L;;;;;N;;;;AB96;\n13C7;CHEROKEE LETTER QUE;Lu;0;L;;;;;N;;;;AB97;\n13C8;CHEROKEE LETTER QUI;Lu;0;L;;;;;N;;;;AB98;\n13C9;CHEROKEE LETTER QUO;Lu;0;L;;;;;N;;;;AB99;\n13CA;CHEROKEE LETTER QUU;Lu;0;L;;;;;N;;;;AB9A;\n13CB;CHEROKEE LETTER QUV;Lu;0;L;;;;;N;;;;AB9B;\n13CC;CHEROKEE LETTER SA;Lu;0;L;;;;;N;;;;AB9C;\n13CD;CHEROKEE LETTER S;Lu;0;L;;;;;N;;;;AB9D;\n13CE;CHEROKEE LETTER SE;Lu;0;L;;;;;N;;;;AB9E;\n13CF;CHEROKEE LETTER SI;Lu;0;L;;;;;N;;;;AB9F;\n13D0;CHEROKEE LETTER SO;Lu;0;L;;;;;N;;;;ABA0;\n13D1;CHEROKEE LETTER SU;Lu;0;L;;;;;N;;;;ABA1;\n13D2;CHEROKEE LETTER SV;Lu;0;L;;;;;N;;;;ABA2;\n13D3;CHEROKEE LETTER DA;Lu;0;L;;;;;N;;;;ABA3;\n13D4;CHEROKEE LETTER TA;Lu;0;L;;;;;N;;;;ABA4;\n13D5;CHEROKEE LETTER DE;Lu;0;L;;;;;N;;;;ABA5;\n13D6;CHEROKEE LETTER TE;Lu;0;L;;;;;N;;;;ABA6;\n13D7;CHEROKEE LETTER DI;Lu;0;L;;;;;N;;;;ABA7;\n13D8;CHEROKEE LETTER TI;Lu;0;L;;;;;N;;;;ABA8;\n13D9;CHEROKEE LETTER DO;Lu;0;L;;;;;N;;;;ABA9;\n13DA;CHEROKEE LETTER DU;Lu;0;L;;;;;N;;;;ABAA;\n13DB;CHEROKEE LETTER DV;Lu;0;L;;;;;N;;;;ABAB;\n13DC;CHEROKEE LETTER DLA;Lu;0;L;;;;;N;;;;ABAC;\n13DD;CHEROKEE LETTER TLA;Lu;0;L;;;;;N;;;;ABAD;\n13DE;CHEROKEE LETTER TLE;Lu;0;L;;;;;N;;;;ABAE;\n13DF;CHEROKEE LETTER TLI;Lu;0;L;;;;;N;;;;ABAF;\n13E0;CHEROKEE LETTER TLO;Lu;0;L;;;;;N;;;;ABB0;\n13E1;CHEROKEE LETTER TLU;Lu;0;L;;;;;N;;;;ABB1;\n13E2;CHEROKEE LETTER TLV;Lu;0;L;;;;;N;;;;ABB2;\n13E3;CHEROKEE LETTER TSA;Lu;0;L;;;;;N;;;;ABB3;\n13E4;CHEROKEE LETTER TSE;Lu;0;L;;;;;N;;;;ABB4;\n13E5;CHEROKEE LETTER TSI;Lu;0;L;;;;;N;;;;ABB5;\n13E6;CHEROKEE LETTER TSO;Lu;0;L;;;;;N;;;;ABB6;\n13E7;CHEROKEE LETTER TSU;Lu;0;L;;;;;N;;;;ABB7;\n13E8;CHEROKEE LETTER TSV;Lu;0;L;;;;;N;;;;ABB8;\n13E9;CHEROKEE LETTER WA;Lu;0;L;;;;;N;;;;ABB9;\n13EA;CHEROKEE LETTER WE;Lu;0;L;;;;;N;;;;ABBA;\n13EB;CHEROKEE LETTER WI;Lu;0;L;;;;;N;;;;ABBB;\n13EC;CHEROKEE LETTER WO;Lu;0;L;;;;;N;;;;ABBC;\n13ED;CHEROKEE LETTER WU;Lu;0;L;;;;;N;;;;ABBD;\n13EE;CHEROKEE LETTER WV;Lu;0;L;;;;;N;;;;ABBE;\n13EF;CHEROKEE LETTER YA;Lu;0;L;;;;;N;;;;ABBF;\n13F0;CHEROKEE LETTER YE;Lu;0;L;;;;;N;;;;13F8;\n13F1;CHEROKEE LETTER YI;Lu;0;L;;;;;N;;;;13F9;\n13F2;CHEROKEE LETTER YO;Lu;0;L;;;;;N;;;;13FA;\n13F3;CHEROKEE LETTER YU;Lu;0;L;;;;;N;;;;13FB;\n13F4;CHEROKEE LETTER YV;Lu;0;L;;;;;N;;;;13FC;\n13F5;CHEROKEE LETTER MV;Lu;0;L;;;;;N;;;;13FD;\n13F8;CHEROKEE SMALL LETTER YE;Ll;0;L;;;;;N;;;13F0;;13F0\n13F9;CHEROKEE SMALL LETTER YI;Ll;0;L;;;;;N;;;13F1;;13F1\n13FA;CHEROKEE SMALL LETTER YO;Ll;0;L;;;;;N;;;13F2;;13F2\n13FB;CHEROKEE SMALL LETTER YU;Ll;0;L;;;;;N;;;13F3;;13F3\n13FC;CHEROKEE SMALL LETTER YV;Ll;0;L;;;;;N;;;13F4;;13F4\n13FD;CHEROKEE SMALL LETTER MV;Ll;0;L;;;;;N;;;13F5;;13F5\n1400;CANADIAN SYLLABICS HYPHEN;Pd;0;ON;;;;;N;;;;;\n1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;\n1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;\n1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;\n1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;\n1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;\n1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;\n1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;\n1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;\n1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;\n140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;\n140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;\n140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;\n140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;\n140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;\n140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;\n1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;\n1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;\n1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;\n1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;\n1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;\n1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;\n1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;\n1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;\n1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;\n1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;\n141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;\n141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;\n141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;\n141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;\n141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;\n141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;\n1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;\n1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;\n1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;\n1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;\n1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;\n1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;\n1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;\n1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;\n1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;\n1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;\n142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;\n142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;\n142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;\n142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;\n142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;\n142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;\n1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;\n1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;\n1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;\n1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;\n1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;\n1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;\n1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;\n1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;\n1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;\n1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;\n143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;\n143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;\n143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;\n143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;\n143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;\n143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;\n1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;\n1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;\n1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;\n1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;\n1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;\n1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;\n1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;\n1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;\n1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;\n1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;\n144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;\n144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;\n144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;\n144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;\n144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;\n144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;\n1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;\n1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;\n1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;\n1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;\n1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;\n1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;\n1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;\n1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;\n1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;\n1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;\n145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;\n145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;\n145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;\n145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;\n145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;\n145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;\n1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;\n1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;\n1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;\n1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;\n1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;\n1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;\n1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;\n1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;\n1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;\n1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;\n146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;\n146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;\n146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;\n146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;\n146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;\n146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;\n1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;\n1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;\n1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;\n1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;\n1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;\n1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;\n1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;\n1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;\n1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;\n1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;\n147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;\n147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;\n147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;\n147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;\n147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;\n147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;\n1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;\n1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;\n1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;\n1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;\n1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;\n1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;\n1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;\n1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;\n1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;\n1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;\n148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;\n148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;\n148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;\n148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;\n148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;\n148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;\n1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;\n1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;\n1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;\n1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;\n1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;\n1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;\n1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;\n1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;\n1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;\n1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;\n149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;\n149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;\n149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;\n149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;\n149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;\n149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;\n14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;\n14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;\n14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;\n14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;\n14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;\n14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;\n14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;\n14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;\n14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;\n14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;\n14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;\n14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;\n14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;\n14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;\n14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;\n14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;\n14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;\n14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;\n14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;\n14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;\n14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;\n14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;\n14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;\n14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;\n14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;\n14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;\n14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;\n14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;\n14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;\n14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;\n14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;\n14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;\n14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;\n14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;\n14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;\n14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;\n14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;\n14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;\n14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;\n14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;\n14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;\n14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;\n14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;\n14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;\n14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;\n14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;\n14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;\n14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;\n14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;\n14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;\n14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;\n14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;\n14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;\n14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;\n14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;\n14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;\n14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;\n14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;\n14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;\n14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;\n14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;\n14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;\n14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;\n14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;\n14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;\n14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;\n14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;\n14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;\n14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;\n14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;\n14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;\n14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;\n14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;\n14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;\n14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;\n14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;\n14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;\n14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;\n14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;\n14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;\n14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;\n14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;\n14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;\n14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;\n14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;\n14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;\n14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;\n14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;\n14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;\n14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;\n14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;\n14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;\n14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;\n14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;\n14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;\n14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;\n1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;\n1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;\n1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;\n1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;\n1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;\n1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;\n1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;\n1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;\n1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;\n1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;\n150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;\n150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;\n150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;\n150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;\n150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;\n150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;\n1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;\n1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;\n1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;\n1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;\n1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;\n1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;\n1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;\n1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;\n1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;\n1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;\n151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;\n151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;\n151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;\n151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;\n151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;\n151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;\n1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;\n1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;\n1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;\n1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;\n1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;\n1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;\n1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;\n1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;\n1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;\n1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;\n152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;\n152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;\n152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;\n152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;\n152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;\n152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;\n1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;\n1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;\n1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;\n1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;\n1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;\n1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;\n1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;\n1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;\n1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;\n1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;\n153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;\n153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;\n153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;\n153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;\n153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;\n153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;\n1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;\n1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;\n1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;\n1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;\n1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;\n1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;\n1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;\n1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;\n1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;\n1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;\n154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;\n154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;\n154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;\n154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;\n154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;\n154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;\n1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;\n1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;\n1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;\n1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;\n1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;\n1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;\n1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;\n1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;\n1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;\n1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;\n155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;\n155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;\n155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;\n155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;\n155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;\n155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;\n1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;\n1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;\n1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;\n1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;\n1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;\n1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;\n1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;\n1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;\n1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;\n1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;\n156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;\n156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;\n156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;\n156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;\n156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;\n156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;\n1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;\n1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;\n1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;\n1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;\n1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;\n1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;\n1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;\n1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;\n1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;\n1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;\n157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;\n157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;\n157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;\n157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;\n157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;\n157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;\n1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;\n1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;\n1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;\n1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;\n1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;\n1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;\n1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;\n1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;\n1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;\n1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;\n158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;\n158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;\n158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;\n158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;\n158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;\n158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;\n1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;\n1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;\n1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;\n1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;\n1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;\n1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;\n1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;\n1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;\n1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;\n1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;\n159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;\n159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;\n159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;\n159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;\n159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;\n159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;\n15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;\n15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;\n15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;\n15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;\n15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;\n15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;\n15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;\n15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;\n15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;\n15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;\n15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;\n15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;\n15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;\n15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;\n15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;\n15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;\n15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;\n15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;\n15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;\n15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;\n15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;\n15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;\n15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;\n15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;\n15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;\n15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;\n15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;\n15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;\n15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;\n15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;\n15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;\n15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;\n15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;\n15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;\n15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;\n15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;\n15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;\n15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;\n15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;\n15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;\n15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;\n15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;\n15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;\n15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;\n15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;\n15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;\n15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;\n15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;\n15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;\n15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;\n15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;\n15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;\n15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;\n15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;\n15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;\n15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;\n15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;\n15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;\n15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;\n15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;\n15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;\n15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;\n15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;\n15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;\n15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;\n15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;\n15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;\n15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;\n15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;\n15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;\n15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;\n15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;\n15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;\n15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;\n15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;\n15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;\n15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;\n15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;\n15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;\n15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;\n15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;\n15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;\n15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;\n15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;\n15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;\n15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;\n15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;\n15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;\n15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;\n15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;\n15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;\n15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;\n15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;\n15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;\n15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;\n15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;\n1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;\n1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;\n1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;\n1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;\n1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;\n1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;\n1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;\n1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;\n1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;\n1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;\n160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;\n160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;\n160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;\n160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;\n160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;\n160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;\n1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;\n1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;\n1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;\n1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;\n1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;\n1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;\n1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;\n1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;\n1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;\n1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;\n161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;\n161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;\n161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;\n161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;\n161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;\n161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;\n1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;\n1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;\n1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;\n1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;\n1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;\n1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;\n1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;\n1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;\n1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;\n1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;\n162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;\n162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;\n162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;\n162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;\n162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;\n162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;\n1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;\n1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;\n1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;\n1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;\n1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;\n1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;\n1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;\n1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;\n1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;\n1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;\n163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;\n163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;\n163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;\n163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;\n163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;\n163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;\n1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;\n1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;\n1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;\n1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;\n1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;\n1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;\n1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;\n1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;\n1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;\n1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;\n164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;\n164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;\n164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;\n164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;\n164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;\n164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;\n1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;\n1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;\n1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;\n1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;\n1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;\n1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;\n1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;\n1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;\n1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;\n1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;\n165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;\n165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;\n165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;\n165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;\n165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;\n165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;\n1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;\n1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;\n1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;\n1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;\n1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;\n1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;\n1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;\n1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;\n1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;\n1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;\n166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;\n166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;\n166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;\n166D;CANADIAN SYLLABICS CHI SIGN;So;0;L;;;;;N;;;;;\n166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;\n166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;\n1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;\n1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;\n1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;\n1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;\n1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;\n1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;\n1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;\n1677;CANADIAN SYLLABICS WOODS-CREE THWEE;Lo;0;L;;;;;N;;;;;\n1678;CANADIAN SYLLABICS WOODS-CREE THWI;Lo;0;L;;;;;N;;;;;\n1679;CANADIAN SYLLABICS WOODS-CREE THWII;Lo;0;L;;;;;N;;;;;\n167A;CANADIAN SYLLABICS WOODS-CREE THWO;Lo;0;L;;;;;N;;;;;\n167B;CANADIAN SYLLABICS WOODS-CREE THWOO;Lo;0;L;;;;;N;;;;;\n167C;CANADIAN SYLLABICS WOODS-CREE THWA;Lo;0;L;;;;;N;;;;;\n167D;CANADIAN SYLLABICS WOODS-CREE THWAA;Lo;0;L;;;;;N;;;;;\n167E;CANADIAN SYLLABICS WOODS-CREE FINAL TH;Lo;0;L;;;;;N;;;;;\n167F;CANADIAN SYLLABICS BLACKFOOT W;Lo;0;L;;;;;N;;;;;\n1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;\n1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;\n1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;\n1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;\n1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;\n1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;\n1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;\n1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;\n1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;\n1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;\n168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;\n168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;\n168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;\n168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;\n168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;\n168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;\n1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;\n1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;\n1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;\n1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;\n1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;\n1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;\n1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;\n1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;\n1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;\n1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;\n169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;\n169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;;\n169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;;\n16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;\n16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;\n16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;\n16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;\n16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;\n16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;\n16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;\n16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;\n16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;\n16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;\n16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;\n16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;\n16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;\n16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;\n16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;\n16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;\n16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;\n16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;\n16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;\n16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;\n16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;\n16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;\n16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;\n16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;\n16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;\n16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;\n16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;\n16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;\n16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;\n16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;\n16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;\n16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;\n16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;\n16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;\n16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;\n16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;\n16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;\n16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;\n16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;\n16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;\n16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;\n16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;\n16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;\n16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;\n16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;\n16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;\n16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;\n16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;\n16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;\n16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;\n16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;\n16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;\n16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;\n16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;\n16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;\n16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;\n16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;\n16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;\n16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;\n16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;\n16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;\n16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;\n16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;\n16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;\n16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;\n16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;\n16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;\n16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;\n16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;\n16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;\n16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;\n16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;\n16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;\n16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;\n16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;\n16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;\n16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;\n16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;\n16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;;;;\n16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;;;;\n16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;;;;\n16F1;RUNIC LETTER K;Lo;0;L;;;;;N;;;;;\n16F2;RUNIC LETTER SH;Lo;0;L;;;;;N;;;;;\n16F3;RUNIC LETTER OO;Lo;0;L;;;;;N;;;;;\n16F4;RUNIC LETTER FRANKS CASKET OS;Lo;0;L;;;;;N;;;;;\n16F5;RUNIC LETTER FRANKS CASKET IS;Lo;0;L;;;;;N;;;;;\n16F6;RUNIC LETTER FRANKS CASKET EH;Lo;0;L;;;;;N;;;;;\n16F7;RUNIC LETTER FRANKS CASKET AC;Lo;0;L;;;;;N;;;;;\n16F8;RUNIC LETTER FRANKS CASKET AESC;Lo;0;L;;;;;N;;;;;\n1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;;\n1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;;\n1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;;\n1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;;\n1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;;\n1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;;\n1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;;\n1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;;\n1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;;\n1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;;\n170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;;\n170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;;\n170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;;\n170D;TAGALOG LETTER RA;Lo;0;L;;;;;N;;;;;\n170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;;\n170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;;\n1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;;\n1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;;\n1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n1715;TAGALOG SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;;\n171F;TAGALOG LETTER ARCHAIC RA;Lo;0;L;;;;;N;;;;;\n1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;;\n1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;;\n1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;;\n1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;;\n1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;;\n1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;;\n1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;;\n1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;;\n1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;;\n1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;;\n172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;;\n172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;;\n172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;;\n172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;;\n172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;;\n172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;;\n1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;;\n1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;;\n1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n1734;HANUNOO SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;;\n1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;\n1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;;\n1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;;\n1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;;\n1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;;\n1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;;\n1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;;\n1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;;\n1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;;\n1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;;\n1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;;\n1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;;\n174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;;\n174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;;\n174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;;\n174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;;\n174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;;\n174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;;\n1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;;\n1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;;\n1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;;\n1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;;\n1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;;\n1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;;\n1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;;\n1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;;\n1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;;\n1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;;\n1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;;\n1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;;\n176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;;\n176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;;\n176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;;\n176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;;\n176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;;\n1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;;\n1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;\n1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;\n1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;\n1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;\n1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;\n1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;\n1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;\n1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;\n1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;\n1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;\n178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;\n178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;\n178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;\n178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;\n178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;\n178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;\n1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;\n1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;\n1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;\n1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;\n1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;\n1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;\n1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;\n1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;\n1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;\n1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;\n179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;\n179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;\n179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;\n179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;\n179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;\n179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;\n17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;\n17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;\n17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;\n17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;;\n17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;;\n17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;\n17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;\n17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;\n17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;\n17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;\n17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;\n17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;\n17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;\n17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;\n17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;\n17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;\n17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;\n17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;\n17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;\n17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;\n17B4;KHMER VOWEL INHERENT AQ;Mn;0;NSM;;;;;N;;;;;\n17B5;KHMER VOWEL INHERENT AA;Mn;0;NSM;;;;;N;;;;;\n17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;\n17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;\n17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;\n17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;\n17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;\n17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;\n17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;\n17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\n17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;\n17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;\n17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;\n17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;\n17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;\n17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;\n17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;\n17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;\n17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;\n17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;\n17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;\n17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;\n17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;\n17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;\n17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;;\n17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;\n17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;\n17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;\n17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;;\n17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;;\n17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;\n17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;\n17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;\n17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;;\n17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;;\n17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;;\n17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;;\n17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;;\n17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;;\n17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;;\n17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;;\n17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;;\n17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;;\n17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;;\n17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;;\n1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;\n1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;\n1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;\n1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;\n1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;\n1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;\n1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;\n1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;\n1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;\n1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;\n180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;\n180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;;\n180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;;\n180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;;\n180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;;\n180F;MONGOLIAN FREE VARIATION SELECTOR FOUR;Mn;0;NSM;;;;;N;;;;;\n1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;\n1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;\n1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;\n1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;\n1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;\n1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;\n1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;\n1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;\n1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;\n1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;\n182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;\n182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;\n182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;\n182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;\n182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;\n182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;\n1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;\n1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;\n1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;\n1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;\n1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;\n1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;\n1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;\n1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;\n1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;\n1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;\n183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;\n183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;\n183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;\n183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;\n183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;\n183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;\n1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;\n1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;\n1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;\n1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;\n1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;\n1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;\n1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;\n1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;\n1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;\n1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;\n184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;\n184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;\n184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;\n184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;\n184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;\n184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;\n1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;\n1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;\n1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;\n1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;\n1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;\n1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;\n1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;\n1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;\n1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;\n1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;\n185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;\n185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;\n185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;\n185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;\n185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;\n185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;\n1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;\n1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;\n1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;\n1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;\n1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;\n1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;\n1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;\n1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;\n1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;\n1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;\n186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;\n186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;\n186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;\n186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;\n186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;\n186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;\n1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;\n1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;\n1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;\n1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;\n1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;\n1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;\n1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;\n1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;\n1878;MONGOLIAN LETTER CHA WITH TWO DOTS;Lo;0;L;;;;;N;;;;;\n1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;\n1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;\n1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;\n1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;\n1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;\n1885;MONGOLIAN LETTER ALI GALI BALUDA;Mn;0;NSM;;;;;N;;;;;\n1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Mn;0;NSM;;;;;N;;;;;\n1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;\n1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;\n1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;\n188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;\n188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;\n188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;\n188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;\n188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;\n188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;\n1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;\n1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;\n1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;\n1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;\n1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;\n1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;\n1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;\n1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;\n1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;\n1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;\n189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;\n189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;\n189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;\n189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;\n189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;\n189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;\n18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;\n18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;\n18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;\n18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;\n18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;\n18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;\n18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;\n18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;\n18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;\n18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;\n18AA;MONGOLIAN LETTER MANCHU ALI GALI LHA;Lo;0;L;;;;;N;;;;;\n18B0;CANADIAN SYLLABICS OY;Lo;0;L;;;;;N;;;;;\n18B1;CANADIAN SYLLABICS AY;Lo;0;L;;;;;N;;;;;\n18B2;CANADIAN SYLLABICS AAY;Lo;0;L;;;;;N;;;;;\n18B3;CANADIAN SYLLABICS WAY;Lo;0;L;;;;;N;;;;;\n18B4;CANADIAN SYLLABICS POY;Lo;0;L;;;;;N;;;;;\n18B5;CANADIAN SYLLABICS PAY;Lo;0;L;;;;;N;;;;;\n18B6;CANADIAN SYLLABICS PWOY;Lo;0;L;;;;;N;;;;;\n18B7;CANADIAN SYLLABICS TAY;Lo;0;L;;;;;N;;;;;\n18B8;CANADIAN SYLLABICS KAY;Lo;0;L;;;;;N;;;;;\n18B9;CANADIAN SYLLABICS KWAY;Lo;0;L;;;;;N;;;;;\n18BA;CANADIAN SYLLABICS MAY;Lo;0;L;;;;;N;;;;;\n18BB;CANADIAN SYLLABICS NOY;Lo;0;L;;;;;N;;;;;\n18BC;CANADIAN SYLLABICS NAY;Lo;0;L;;;;;N;;;;;\n18BD;CANADIAN SYLLABICS LAY;Lo;0;L;;;;;N;;;;;\n18BE;CANADIAN SYLLABICS SOY;Lo;0;L;;;;;N;;;;;\n18BF;CANADIAN SYLLABICS SAY;Lo;0;L;;;;;N;;;;;\n18C0;CANADIAN SYLLABICS SHOY;Lo;0;L;;;;;N;;;;;\n18C1;CANADIAN SYLLABICS SHAY;Lo;0;L;;;;;N;;;;;\n18C2;CANADIAN SYLLABICS SHWOY;Lo;0;L;;;;;N;;;;;\n18C3;CANADIAN SYLLABICS YOY;Lo;0;L;;;;;N;;;;;\n18C4;CANADIAN SYLLABICS YAY;Lo;0;L;;;;;N;;;;;\n18C5;CANADIAN SYLLABICS RAY;Lo;0;L;;;;;N;;;;;\n18C6;CANADIAN SYLLABICS NWI;Lo;0;L;;;;;N;;;;;\n18C7;CANADIAN SYLLABICS OJIBWAY NWI;Lo;0;L;;;;;N;;;;;\n18C8;CANADIAN SYLLABICS NWII;Lo;0;L;;;;;N;;;;;\n18C9;CANADIAN SYLLABICS OJIBWAY NWII;Lo;0;L;;;;;N;;;;;\n18CA;CANADIAN SYLLABICS NWO;Lo;0;L;;;;;N;;;;;\n18CB;CANADIAN SYLLABICS OJIBWAY NWO;Lo;0;L;;;;;N;;;;;\n18CC;CANADIAN SYLLABICS NWOO;Lo;0;L;;;;;N;;;;;\n18CD;CANADIAN SYLLABICS OJIBWAY NWOO;Lo;0;L;;;;;N;;;;;\n18CE;CANADIAN SYLLABICS RWEE;Lo;0;L;;;;;N;;;;;\n18CF;CANADIAN SYLLABICS RWI;Lo;0;L;;;;;N;;;;;\n18D0;CANADIAN SYLLABICS RWII;Lo;0;L;;;;;N;;;;;\n18D1;CANADIAN SYLLABICS RWO;Lo;0;L;;;;;N;;;;;\n18D2;CANADIAN SYLLABICS RWOO;Lo;0;L;;;;;N;;;;;\n18D3;CANADIAN SYLLABICS RWA;Lo;0;L;;;;;N;;;;;\n18D4;CANADIAN SYLLABICS OJIBWAY P;Lo;0;L;;;;;N;;;;;\n18D5;CANADIAN SYLLABICS OJIBWAY T;Lo;0;L;;;;;N;;;;;\n18D6;CANADIAN SYLLABICS OJIBWAY K;Lo;0;L;;;;;N;;;;;\n18D7;CANADIAN SYLLABICS OJIBWAY C;Lo;0;L;;;;;N;;;;;\n18D8;CANADIAN SYLLABICS OJIBWAY M;Lo;0;L;;;;;N;;;;;\n18D9;CANADIAN SYLLABICS OJIBWAY N;Lo;0;L;;;;;N;;;;;\n18DA;CANADIAN SYLLABICS OJIBWAY S;Lo;0;L;;;;;N;;;;;\n18DB;CANADIAN SYLLABICS OJIBWAY SH;Lo;0;L;;;;;N;;;;;\n18DC;CANADIAN SYLLABICS EASTERN W;Lo;0;L;;;;;N;;;;;\n18DD;CANADIAN SYLLABICS WESTERN W;Lo;0;L;;;;;N;;;;;\n18DE;CANADIAN SYLLABICS FINAL SMALL RING;Lo;0;L;;;;;N;;;;;\n18DF;CANADIAN SYLLABICS FINAL RAISED DOT;Lo;0;L;;;;;N;;;;;\n18E0;CANADIAN SYLLABICS R-CREE RWE;Lo;0;L;;;;;N;;;;;\n18E1;CANADIAN SYLLABICS WEST-CREE LOO;Lo;0;L;;;;;N;;;;;\n18E2;CANADIAN SYLLABICS WEST-CREE LAA;Lo;0;L;;;;;N;;;;;\n18E3;CANADIAN SYLLABICS THWE;Lo;0;L;;;;;N;;;;;\n18E4;CANADIAN SYLLABICS THWA;Lo;0;L;;;;;N;;;;;\n18E5;CANADIAN SYLLABICS TTHWE;Lo;0;L;;;;;N;;;;;\n18E6;CANADIAN SYLLABICS TTHOO;Lo;0;L;;;;;N;;;;;\n18E7;CANADIAN SYLLABICS TTHAA;Lo;0;L;;;;;N;;;;;\n18E8;CANADIAN SYLLABICS TLHWE;Lo;0;L;;;;;N;;;;;\n18E9;CANADIAN SYLLABICS TLHOO;Lo;0;L;;;;;N;;;;;\n18EA;CANADIAN SYLLABICS SAYISI SHWE;Lo;0;L;;;;;N;;;;;\n18EB;CANADIAN SYLLABICS SAYISI SHOO;Lo;0;L;;;;;N;;;;;\n18EC;CANADIAN SYLLABICS SAYISI HOO;Lo;0;L;;;;;N;;;;;\n18ED;CANADIAN SYLLABICS CARRIER GWU;Lo;0;L;;;;;N;;;;;\n18EE;CANADIAN SYLLABICS CARRIER DENE GEE;Lo;0;L;;;;;N;;;;;\n18EF;CANADIAN SYLLABICS CARRIER GAA;Lo;0;L;;;;;N;;;;;\n18F0;CANADIAN SYLLABICS CARRIER GWA;Lo;0;L;;;;;N;;;;;\n18F1;CANADIAN SYLLABICS SAYISI JUU;Lo;0;L;;;;;N;;;;;\n18F2;CANADIAN SYLLABICS CARRIER JWA;Lo;0;L;;;;;N;;;;;\n18F3;CANADIAN SYLLABICS BEAVER DENE L;Lo;0;L;;;;;N;;;;;\n18F4;CANADIAN SYLLABICS BEAVER DENE R;Lo;0;L;;;;;N;;;;;\n18F5;CANADIAN SYLLABICS CARRIER DENTAL S;Lo;0;L;;;;;N;;;;;\n1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;;\n1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;;\n1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;;\n1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;;\n1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;;\n1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;;\n1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;;\n1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;;\n1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;;\n1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;;\n190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;;\n190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;;\n190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;;\n190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;;\n190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;;\n190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;;\n1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;;\n1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;;\n1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;;\n1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;;\n1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;;\n1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;;\n1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;;\n1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;;\n1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;;\n1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;;\n191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;;\n191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;;\n191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;;\n191D;LIMBU LETTER GYAN;Lo;0;L;;;;;N;;;;;\n191E;LIMBU LETTER TRA;Lo;0;L;;;;;N;;;;;\n1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;;\n1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;\n1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\n1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;\n1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;\n192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;\n192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;;\n1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;;\n1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;;\n1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;;\n1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;;\n1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;;\n1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;;\n1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;;\n1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;;\n1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;;\n193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;;\n193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;;\n1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;;\n1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;\n1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;;\n1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;;\n1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;;\n1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;;\n1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;;\n1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;;\n1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;;\n1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;;\n1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;;\n1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;;\n1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;;\n195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;;\n195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;;\n195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;;\n195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;;\n195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;;\n195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;;\n1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;;\n1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;;\n1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;;\n1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;;\n1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;;\n1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;;\n1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;;\n1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;;\n1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;;\n1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;;\n196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;;\n196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;;\n196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;;\n196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;;\n1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;;\n1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;;\n1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;;\n1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;;\n1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;;\n1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;;\n1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;;\n1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;;\n1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;;\n1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;;\n1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;;\n1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;;\n1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;;\n1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;;\n1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;;\n198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;;\n198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;;\n198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;;\n198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;;\n198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;;\n198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;;\n1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;;\n1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;;\n1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;;\n1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;;\n1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;;\n1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;;\n1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;;\n1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;;\n1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;;\n1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;;\n199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;;\n199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;;\n199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;;\n199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;;\n199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;;\n199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;;\n19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;;\n19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;;\n19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;;\n19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;;\n19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;;\n19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;;\n19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;;\n19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;;\n19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;;\n19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;;\n19AA;NEW TAI LUE LETTER HIGH SUA;Lo;0;L;;;;;N;;;;;\n19AB;NEW TAI LUE LETTER LOW SUA;Lo;0;L;;;;;N;;;;;\n19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Lo;0;L;;;;;N;;;;;\n19B1;NEW TAI LUE VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;\n19B2;NEW TAI LUE VOWEL SIGN II;Lo;0;L;;;;;N;;;;;\n19B3;NEW TAI LUE VOWEL SIGN U;Lo;0;L;;;;;N;;;;;\n19B4;NEW TAI LUE VOWEL SIGN UU;Lo;0;L;;;;;N;;;;;\n19B5;NEW TAI LUE VOWEL SIGN E;Lo;0;L;;;;;N;;;;;\n19B6;NEW TAI LUE VOWEL SIGN AE;Lo;0;L;;;;;N;;;;;\n19B7;NEW TAI LUE VOWEL SIGN O;Lo;0;L;;;;;N;;;;;\n19B8;NEW TAI LUE VOWEL SIGN OA;Lo;0;L;;;;;N;;;;;\n19B9;NEW TAI LUE VOWEL SIGN UE;Lo;0;L;;;;;N;;;;;\n19BA;NEW TAI LUE VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;\n19BB;NEW TAI LUE VOWEL SIGN AAY;Lo;0;L;;;;;N;;;;;\n19BC;NEW TAI LUE VOWEL SIGN UY;Lo;0;L;;;;;N;;;;;\n19BD;NEW TAI LUE VOWEL SIGN OY;Lo;0;L;;;;;N;;;;;\n19BE;NEW TAI LUE VOWEL SIGN OAY;Lo;0;L;;;;;N;;;;;\n19BF;NEW TAI LUE VOWEL SIGN UEY;Lo;0;L;;;;;N;;;;;\n19C0;NEW TAI LUE VOWEL SIGN IY;Lo;0;L;;;;;N;;;;;\n19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;;\n19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;;\n19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;;\n19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;;\n19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;;\n19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;;\n19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;;\n19C8;NEW TAI LUE TONE MARK-1;Lo;0;L;;;;;N;;;;;\n19C9;NEW TAI LUE TONE MARK-2;Lo;0;L;;;;;N;;;;;\n19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n19DA;NEW TAI LUE THAM DIGIT ONE;No;0;L;;;1;1;N;;;;;\n19DE;NEW TAI LUE SIGN LAE;So;0;ON;;;;;N;;;;;\n19DF;NEW TAI LUE SIGN LAEV;So;0;ON;;;;;N;;;;;\n19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;;\n19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;;\n19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;;\n19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;;\n19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;;\n19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;;\n19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;;\n19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;;\n19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;;\n19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;;\n19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;;\n19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;;\n19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;;\n19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;;\n19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;;\n19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;;\n19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;;\n19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;;\n19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;;\n19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;;\n19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;;\n19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;;\n19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;;\n19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;;\n19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;;\n19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;;\n19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;;\n19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;;\n19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;;\n19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;;\n19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;;\n19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;;\n1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;;\n1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;;\n1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;;\n1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;;\n1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;;\n1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;;\n1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;;\n1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;;\n1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;;\n1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;;\n1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;;\n1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;;\n1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;;\n1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;;\n1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;;\n1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;;\n1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;;\n1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;;\n1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;;\n1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;;\n1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;;\n1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;;\n1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;;\n1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;;\n1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;;\n1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n1A1B;BUGINESE VOWEL SIGN AE;Mn;0;NSM;;;;;N;;;;;\n1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;;\n1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;;\n1A20;TAI THAM LETTER HIGH KA;Lo;0;L;;;;;N;;;;;\n1A21;TAI THAM LETTER HIGH KHA;Lo;0;L;;;;;N;;;;;\n1A22;TAI THAM LETTER HIGH KXA;Lo;0;L;;;;;N;;;;;\n1A23;TAI THAM LETTER LOW KA;Lo;0;L;;;;;N;;;;;\n1A24;TAI THAM LETTER LOW KXA;Lo;0;L;;;;;N;;;;;\n1A25;TAI THAM LETTER LOW KHA;Lo;0;L;;;;;N;;;;;\n1A26;TAI THAM LETTER NGA;Lo;0;L;;;;;N;;;;;\n1A27;TAI THAM LETTER HIGH CA;Lo;0;L;;;;;N;;;;;\n1A28;TAI THAM LETTER HIGH CHA;Lo;0;L;;;;;N;;;;;\n1A29;TAI THAM LETTER LOW CA;Lo;0;L;;;;;N;;;;;\n1A2A;TAI THAM LETTER LOW SA;Lo;0;L;;;;;N;;;;;\n1A2B;TAI THAM LETTER LOW CHA;Lo;0;L;;;;;N;;;;;\n1A2C;TAI THAM LETTER NYA;Lo;0;L;;;;;N;;;;;\n1A2D;TAI THAM LETTER RATA;Lo;0;L;;;;;N;;;;;\n1A2E;TAI THAM LETTER HIGH RATHA;Lo;0;L;;;;;N;;;;;\n1A2F;TAI THAM LETTER DA;Lo;0;L;;;;;N;;;;;\n1A30;TAI THAM LETTER LOW RATHA;Lo;0;L;;;;;N;;;;;\n1A31;TAI THAM LETTER RANA;Lo;0;L;;;;;N;;;;;\n1A32;TAI THAM LETTER HIGH TA;Lo;0;L;;;;;N;;;;;\n1A33;TAI THAM LETTER HIGH THA;Lo;0;L;;;;;N;;;;;\n1A34;TAI THAM LETTER LOW TA;Lo;0;L;;;;;N;;;;;\n1A35;TAI THAM LETTER LOW THA;Lo;0;L;;;;;N;;;;;\n1A36;TAI THAM LETTER NA;Lo;0;L;;;;;N;;;;;\n1A37;TAI THAM LETTER BA;Lo;0;L;;;;;N;;;;;\n1A38;TAI THAM LETTER HIGH PA;Lo;0;L;;;;;N;;;;;\n1A39;TAI THAM LETTER HIGH PHA;Lo;0;L;;;;;N;;;;;\n1A3A;TAI THAM LETTER HIGH FA;Lo;0;L;;;;;N;;;;;\n1A3B;TAI THAM LETTER LOW PA;Lo;0;L;;;;;N;;;;;\n1A3C;TAI THAM LETTER LOW FA;Lo;0;L;;;;;N;;;;;\n1A3D;TAI THAM LETTER LOW PHA;Lo;0;L;;;;;N;;;;;\n1A3E;TAI THAM LETTER MA;Lo;0;L;;;;;N;;;;;\n1A3F;TAI THAM LETTER LOW YA;Lo;0;L;;;;;N;;;;;\n1A40;TAI THAM LETTER HIGH YA;Lo;0;L;;;;;N;;;;;\n1A41;TAI THAM LETTER RA;Lo;0;L;;;;;N;;;;;\n1A42;TAI THAM LETTER RUE;Lo;0;L;;;;;N;;;;;\n1A43;TAI THAM LETTER LA;Lo;0;L;;;;;N;;;;;\n1A44;TAI THAM LETTER LUE;Lo;0;L;;;;;N;;;;;\n1A45;TAI THAM LETTER WA;Lo;0;L;;;;;N;;;;;\n1A46;TAI THAM LETTER HIGH SHA;Lo;0;L;;;;;N;;;;;\n1A47;TAI THAM LETTER HIGH SSA;Lo;0;L;;;;;N;;;;;\n1A48;TAI THAM LETTER HIGH SA;Lo;0;L;;;;;N;;;;;\n1A49;TAI THAM LETTER HIGH HA;Lo;0;L;;;;;N;;;;;\n1A4A;TAI THAM LETTER LLA;Lo;0;L;;;;;N;;;;;\n1A4B;TAI THAM LETTER A;Lo;0;L;;;;;N;;;;;\n1A4C;TAI THAM LETTER LOW HA;Lo;0;L;;;;;N;;;;;\n1A4D;TAI THAM LETTER I;Lo;0;L;;;;;N;;;;;\n1A4E;TAI THAM LETTER II;Lo;0;L;;;;;N;;;;;\n1A4F;TAI THAM LETTER U;Lo;0;L;;;;;N;;;;;\n1A50;TAI THAM LETTER UU;Lo;0;L;;;;;N;;;;;\n1A51;TAI THAM LETTER EE;Lo;0;L;;;;;N;;;;;\n1A52;TAI THAM LETTER OO;Lo;0;L;;;;;N;;;;;\n1A53;TAI THAM LETTER LAE;Lo;0;L;;;;;N;;;;;\n1A54;TAI THAM LETTER GREAT SA;Lo;0;L;;;;;N;;;;;\n1A55;TAI THAM CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;;\n1A56;TAI THAM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;;\n1A57;TAI THAM CONSONANT SIGN LA TANG LAI;Mc;0;L;;;;;N;;;;;\n1A58;TAI THAM SIGN MAI KANG LAI;Mn;0;NSM;;;;;N;;;;;\n1A59;TAI THAM CONSONANT SIGN FINAL NGA;Mn;0;NSM;;;;;N;;;;;\n1A5A;TAI THAM CONSONANT SIGN LOW PA;Mn;0;NSM;;;;;N;;;;;\n1A5B;TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA;Mn;0;NSM;;;;;N;;;;;\n1A5C;TAI THAM CONSONANT SIGN MA;Mn;0;NSM;;;;;N;;;;;\n1A5D;TAI THAM CONSONANT SIGN BA;Mn;0;NSM;;;;;N;;;;;\n1A5E;TAI THAM CONSONANT SIGN SA;Mn;0;NSM;;;;;N;;;;;\n1A60;TAI THAM SIGN SAKOT;Mn;9;NSM;;;;;N;;;;;\n1A61;TAI THAM VOWEL SIGN A;Mc;0;L;;;;;N;;;;;\n1A62;TAI THAM VOWEL SIGN MAI SAT;Mn;0;NSM;;;;;N;;;;;\n1A63;TAI THAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n1A64;TAI THAM VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;;\n1A65;TAI THAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n1A66;TAI THAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n1A67;TAI THAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;\n1A68;TAI THAM VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;;\n1A69;TAI THAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n1A6A;TAI THAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n1A6B;TAI THAM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n1A6C;TAI THAM VOWEL SIGN OA BELOW;Mn;0;NSM;;;;;N;;;;;\n1A6D;TAI THAM VOWEL SIGN OY;Mc;0;L;;;;;N;;;;;\n1A6E;TAI THAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n1A6F;TAI THAM VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;\n1A70;TAI THAM VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;\n1A71;TAI THAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\n1A72;TAI THAM VOWEL SIGN THAM AI;Mc;0;L;;;;;N;;;;;\n1A73;TAI THAM VOWEL SIGN OA ABOVE;Mn;0;NSM;;;;;N;;;;;\n1A74;TAI THAM SIGN MAI KANG;Mn;0;NSM;;;;;N;;;;;\n1A75;TAI THAM SIGN TONE-1;Mn;230;NSM;;;;;N;;;;;\n1A76;TAI THAM SIGN TONE-2;Mn;230;NSM;;;;;N;;;;;\n1A77;TAI THAM SIGN KHUEN TONE-3;Mn;230;NSM;;;;;N;;;;;\n1A78;TAI THAM SIGN KHUEN TONE-4;Mn;230;NSM;;;;;N;;;;;\n1A79;TAI THAM SIGN KHUEN TONE-5;Mn;230;NSM;;;;;N;;;;;\n1A7A;TAI THAM SIGN RA HAAM;Mn;230;NSM;;;;;N;;;;;\n1A7B;TAI THAM SIGN MAI SAM;Mn;230;NSM;;;;;N;;;;;\n1A7C;TAI THAM SIGN KHUEN-LUE KARAN;Mn;230;NSM;;;;;N;;;;;\n1A7F;TAI THAM COMBINING CRYPTOGRAMMIC DOT;Mn;220;NSM;;;;;N;;;;;\n1A80;TAI THAM HORA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1A81;TAI THAM HORA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1A82;TAI THAM HORA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1A83;TAI THAM HORA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1A84;TAI THAM HORA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1A85;TAI THAM HORA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1A86;TAI THAM HORA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1A87;TAI THAM HORA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1A88;TAI THAM HORA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1A89;TAI THAM HORA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1A90;TAI THAM THAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1A91;TAI THAM THAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1A92;TAI THAM THAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1A93;TAI THAM THAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1A94;TAI THAM THAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1A95;TAI THAM THAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1A96;TAI THAM THAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1A97;TAI THAM THAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1A98;TAI THAM THAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1A99;TAI THAM THAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1AA0;TAI THAM SIGN WIANG;Po;0;L;;;;;N;;;;;\n1AA1;TAI THAM SIGN WIANGWAAK;Po;0;L;;;;;N;;;;;\n1AA2;TAI THAM SIGN SAWAN;Po;0;L;;;;;N;;;;;\n1AA3;TAI THAM SIGN KEOW;Po;0;L;;;;;N;;;;;\n1AA4;TAI THAM SIGN HOY;Po;0;L;;;;;N;;;;;\n1AA5;TAI THAM SIGN DOKMAI;Po;0;L;;;;;N;;;;;\n1AA6;TAI THAM SIGN REVERSED ROTATED RANA;Po;0;L;;;;;N;;;;;\n1AA7;TAI THAM SIGN MAI YAMOK;Lm;0;L;;;;;N;;;;;\n1AA8;TAI THAM SIGN KAAN;Po;0;L;;;;;N;;;;;\n1AA9;TAI THAM SIGN KAANKUU;Po;0;L;;;;;N;;;;;\n1AAA;TAI THAM SIGN SATKAAN;Po;0;L;;;;;N;;;;;\n1AAB;TAI THAM SIGN SATKAANKUU;Po;0;L;;;;;N;;;;;\n1AAC;TAI THAM SIGN HANG;Po;0;L;;;;;N;;;;;\n1AAD;TAI THAM SIGN CAANG;Po;0;L;;;;;N;;;;;\n1AB0;COMBINING DOUBLED CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;;;;;\n1AB1;COMBINING DIAERESIS-RING;Mn;230;NSM;;;;;N;;;;;\n1AB2;COMBINING INFINITY;Mn;230;NSM;;;;;N;;;;;\n1AB3;COMBINING DOWNWARDS ARROW;Mn;230;NSM;;;;;N;;;;;\n1AB4;COMBINING TRIPLE DOT;Mn;230;NSM;;;;;N;;;;;\n1AB5;COMBINING X-X BELOW;Mn;220;NSM;;;;;N;;;;;\n1AB6;COMBINING WIGGLY LINE BELOW;Mn;220;NSM;;;;;N;;;;;\n1AB7;COMBINING OPEN MARK BELOW;Mn;220;NSM;;;;;N;;;;;\n1AB8;COMBINING DOUBLE OPEN MARK BELOW;Mn;220;NSM;;;;;N;;;;;\n1AB9;COMBINING LIGHT CENTRALIZATION STROKE BELOW;Mn;220;NSM;;;;;N;;;;;\n1ABA;COMBINING STRONG CENTRALIZATION STROKE BELOW;Mn;220;NSM;;;;;N;;;;;\n1ABB;COMBINING PARENTHESES ABOVE;Mn;230;NSM;;;;;N;;;;;\n1ABC;COMBINING DOUBLE PARENTHESES ABOVE;Mn;230;NSM;;;;;N;;;;;\n1ABD;COMBINING PARENTHESES BELOW;Mn;220;NSM;;;;;N;;;;;\n1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;;\n1ABF;COMBINING LATIN SMALL LETTER W BELOW;Mn;220;NSM;;;;;N;;;;;\n1AC0;COMBINING LATIN SMALL LETTER TURNED W BELOW;Mn;220;NSM;;;;;N;;;;;\n1AC1;COMBINING LEFT PARENTHESIS ABOVE LEFT;Mn;230;NSM;;;;;N;;;;;\n1AC2;COMBINING RIGHT PARENTHESIS ABOVE RIGHT;Mn;230;NSM;;;;;N;;;;;\n1AC3;COMBINING LEFT PARENTHESIS BELOW LEFT;Mn;220;NSM;;;;;N;;;;;\n1AC4;COMBINING RIGHT PARENTHESIS BELOW RIGHT;Mn;220;NSM;;;;;N;;;;;\n1AC5;COMBINING SQUARE BRACKETS ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AC6;COMBINING NUMBER SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AC7;COMBINING INVERTED DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AC8;COMBINING PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AC9;COMBINING DOUBLE PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;\n1ACA;COMBINING DOUBLE PLUS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;\n1ACB;COMBINING TRIPLE ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;\n1ACC;COMBINING LATIN SMALL LETTER INSULAR G;Mn;230;NSM;;;;;N;;;;;\n1ACD;COMBINING LATIN SMALL LETTER INSULAR R;Mn;230;NSM;;;;;N;;;;;\n1ACE;COMBINING LATIN SMALL LETTER INSULAR T;Mn;230;NSM;;;;;N;;;;;\n1ACF;COMBINING DOUBLE CARON;Mn;230;NSM;;;;;N;;;;;\n1AD0;COMBINING VERTICAL-LINE-ACUTE;Mn;230;NSM;;;;;N;;;;;\n1AD1;COMBINING GRAVE-VERTICAL-LINE;Mn;230;NSM;;;;;N;;;;;\n1AD2;COMBINING VERTICAL-LINE-GRAVE;Mn;230;NSM;;;;;N;;;;;\n1AD3;COMBINING ACUTE-VERTICAL-LINE;Mn;230;NSM;;;;;N;;;;;\n1AD4;COMBINING VERTICAL-LINE-MACRON;Mn;230;NSM;;;;;N;;;;;\n1AD5;COMBINING MACRON-VERTICAL-LINE;Mn;230;NSM;;;;;N;;;;;\n1AD6;COMBINING VERTICAL-LINE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;;\n1AD7;COMBINING VERTICAL-LINE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;;\n1AD8;COMBINING MACRON-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;;\n1AD9;COMBINING SHARP SIGN;Mn;230;NSM;;;;;N;;;;;\n1ADA;COMBINING FLAT SIGN;Mn;230;NSM;;;;;N;;;;;\n1ADB;COMBINING DOWN TACK ABOVE;Mn;230;NSM;;;;;N;;;;;\n1ADC;COMBINING DIAERESIS WITH RAISED LEFT DOT;Mn;230;NSM;;;;;N;;;;;\n1ADD;COMBINING DOT-AND-RING BELOW;Mn;220;NSM;;;;;N;;;;;\n1AE0;COMBINING LEFT TACK ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AE1;COMBINING RIGHT TACK ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AE2;COMBINING MINUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AE3;COMBINING INVERTED BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AE4;COMBINING SQUARE ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AE5;COMBINING SEAGULL ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AE6;COMBINING DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;;;;;\n1AE7;COMBINING DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AE8;COMBINING EQUALS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AE9;COMBINING LEFT ANGLE CENTRED ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AEA;COMBINING UPWARDS ARROW ABOVE;Mn;230;NSM;;;;;N;;;;;\n1AEB;COMBINING DOUBLE RIGHTWARDS ARROW ABOVE;Mn;234;NSM;;;;;N;;;;;\n1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;;\n1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;;\n1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;;\n1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;;;;\n1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;;;;\n1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;;;;\n1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;;;;\n1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;;;;\n1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;;;;\n1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;;;;\n1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;;;;\n1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;;;;\n1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;;;;\n1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;;;;\n1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;;;;\n1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;;;;\n1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;;;;\n1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;;;;\n1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;;;;\n1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;;\n1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;;;;\n1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;;\n1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;;;;\n1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;;\n1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;;\n1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;;;;\n1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;;\n1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;;;;\n1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;;\n1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;;;;\n1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;;\n1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;;;;\n1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;;\n1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;;;;\n1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;;\n1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;;;;\n1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;;\n1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;;;;\n1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;;\n1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;;\n1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;;;;\n1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;;\n1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;;;;\n1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;;\n1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;;\n1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;;\n1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;;\n1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;;\n1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;;;;\n1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;;;;\n1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;;\n1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;;\n1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;;;;\n1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;;;;\n1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;;;;\n1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;;;;\n1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;;\n1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;;;;\n1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;;;;\n1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;;;;\n1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;;;;\n1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;;;;\n1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;;\n1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;;;;\n1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;;;;\n1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;;;;\n1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;;\n1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;;;;\n1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;;;;\n1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;;\n1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;;\n1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;;\n1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;;\n1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;;\n1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;;\n1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;;\n1B4C;BALINESE LETTER ARCHAIC JNYA;Lo;0;L;;;;;N;;;;;\n1B4E;BALINESE INVERTED CARIK SIKI;Po;0;L;;;;;N;;;;;\n1B4F;BALINESE INVERTED CARIK PAREREN;Po;0;L;;;;;N;;;;;\n1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1B5A;BALINESE PANTI;Po;0;L;;;;;N;;;;;\n1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;;;;\n1B5C;BALINESE WINDU;Po;0;L;;;;;N;;;;;\n1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;;;;\n1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;;;;\n1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;;;;\n1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;;;;\n1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;;\n1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;;\n1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;;\n1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;;\n1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;;\n1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;;\n1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;;\n1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;;\n1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;;\n1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;;\n1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;;\n1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;;\n1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;;\n1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;;\n1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;;\n1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;\n1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;\n1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;;\n1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;;\n1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;;\n1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;;\n1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;;\n1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;;\n1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;;\n1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;;\n1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;;\n1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;;\n1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;;\n1B7D;BALINESE PANTI LANTANG;Po;0;L;;;;;N;;;;;\n1B7E;BALINESE PAMADA LANTANG;Po;0;L;;;;;N;;;;;\n1B7F;BALINESE PANTI BAWAK;Po;0;L;;;;;N;;;;;\n1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;;\n1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;;\n1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;;\n1B83;SUNDANESE LETTER A;Lo;0;L;;;;;N;;;;;\n1B84;SUNDANESE LETTER I;Lo;0;L;;;;;N;;;;;\n1B85;SUNDANESE LETTER U;Lo;0;L;;;;;N;;;;;\n1B86;SUNDANESE LETTER AE;Lo;0;L;;;;;N;;;;;\n1B87;SUNDANESE LETTER O;Lo;0;L;;;;;N;;;;;\n1B88;SUNDANESE LETTER E;Lo;0;L;;;;;N;;;;;\n1B89;SUNDANESE LETTER EU;Lo;0;L;;;;;N;;;;;\n1B8A;SUNDANESE LETTER KA;Lo;0;L;;;;;N;;;;;\n1B8B;SUNDANESE LETTER QA;Lo;0;L;;;;;N;;;;;\n1B8C;SUNDANESE LETTER GA;Lo;0;L;;;;;N;;;;;\n1B8D;SUNDANESE LETTER NGA;Lo;0;L;;;;;N;;;;;\n1B8E;SUNDANESE LETTER CA;Lo;0;L;;;;;N;;;;;\n1B8F;SUNDANESE LETTER JA;Lo;0;L;;;;;N;;;;;\n1B90;SUNDANESE LETTER ZA;Lo;0;L;;;;;N;;;;;\n1B91;SUNDANESE LETTER NYA;Lo;0;L;;;;;N;;;;;\n1B92;SUNDANESE LETTER TA;Lo;0;L;;;;;N;;;;;\n1B93;SUNDANESE LETTER DA;Lo;0;L;;;;;N;;;;;\n1B94;SUNDANESE LETTER NA;Lo;0;L;;;;;N;;;;;\n1B95;SUNDANESE LETTER PA;Lo;0;L;;;;;N;;;;;\n1B96;SUNDANESE LETTER FA;Lo;0;L;;;;;N;;;;;\n1B97;SUNDANESE LETTER VA;Lo;0;L;;;;;N;;;;;\n1B98;SUNDANESE LETTER BA;Lo;0;L;;;;;N;;;;;\n1B99;SUNDANESE LETTER MA;Lo;0;L;;;;;N;;;;;\n1B9A;SUNDANESE LETTER YA;Lo;0;L;;;;;N;;;;;\n1B9B;SUNDANESE LETTER RA;Lo;0;L;;;;;N;;;;;\n1B9C;SUNDANESE LETTER LA;Lo;0;L;;;;;N;;;;;\n1B9D;SUNDANESE LETTER WA;Lo;0;L;;;;;N;;;;;\n1B9E;SUNDANESE LETTER SA;Lo;0;L;;;;;N;;;;;\n1B9F;SUNDANESE LETTER XA;Lo;0;L;;;;;N;;;;;\n1BA0;SUNDANESE LETTER HA;Lo;0;L;;;;;N;;;;;\n1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;;\n1BA2;SUNDANESE CONSONANT SIGN PANYAKRA;Mn;0;NSM;;;;;N;;;;;\n1BA3;SUNDANESE CONSONANT SIGN PANYIKU;Mn;0;NSM;;;;;N;;;;;\n1BA4;SUNDANESE VOWEL SIGN PANGHULU;Mn;0;NSM;;;;;N;;;;;\n1BA5;SUNDANESE VOWEL SIGN PANYUKU;Mn;0;NSM;;;;;N;;;;;\n1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;;\n1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;;\n1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;;\n1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;;\n1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;;\n1BAB;SUNDANESE SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n1BAC;SUNDANESE CONSONANT SIGN PASANGAN MA;Mn;0;NSM;;;;;N;;;;;\n1BAD;SUNDANESE CONSONANT SIGN PASANGAN WA;Mn;0;NSM;;;;;N;;;;;\n1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;;\n1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;;\n1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1BB1;SUNDANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1BB2;SUNDANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1BB3;SUNDANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1BB4;SUNDANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1BB5;SUNDANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1BB6;SUNDANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1BBA;SUNDANESE AVAGRAHA;Lo;0;L;;;;;N;;;;;\n1BBB;SUNDANESE LETTER REU;Lo;0;L;;;;;N;;;;;\n1BBC;SUNDANESE LETTER LEU;Lo;0;L;;;;;N;;;;;\n1BBD;SUNDANESE LETTER BHA;Lo;0;L;;;;;N;;;;;\n1BBE;SUNDANESE LETTER FINAL K;Lo;0;L;;;;;N;;;;;\n1BBF;SUNDANESE LETTER FINAL M;Lo;0;L;;;;;N;;;;;\n1BC0;BATAK LETTER A;Lo;0;L;;;;;N;;;;;\n1BC1;BATAK LETTER SIMALUNGUN A;Lo;0;L;;;;;N;;;;;\n1BC2;BATAK LETTER HA;Lo;0;L;;;;;N;;;;;\n1BC3;BATAK LETTER SIMALUNGUN HA;Lo;0;L;;;;;N;;;;;\n1BC4;BATAK LETTER MANDAILING HA;Lo;0;L;;;;;N;;;;;\n1BC5;BATAK LETTER BA;Lo;0;L;;;;;N;;;;;\n1BC6;BATAK LETTER KARO BA;Lo;0;L;;;;;N;;;;;\n1BC7;BATAK LETTER PA;Lo;0;L;;;;;N;;;;;\n1BC8;BATAK LETTER SIMALUNGUN PA;Lo;0;L;;;;;N;;;;;\n1BC9;BATAK LETTER NA;Lo;0;L;;;;;N;;;;;\n1BCA;BATAK LETTER MANDAILING NA;Lo;0;L;;;;;N;;;;;\n1BCB;BATAK LETTER WA;Lo;0;L;;;;;N;;;;;\n1BCC;BATAK LETTER SIMALUNGUN WA;Lo;0;L;;;;;N;;;;;\n1BCD;BATAK LETTER PAKPAK WA;Lo;0;L;;;;;N;;;;;\n1BCE;BATAK LETTER GA;Lo;0;L;;;;;N;;;;;\n1BCF;BATAK LETTER SIMALUNGUN GA;Lo;0;L;;;;;N;;;;;\n1BD0;BATAK LETTER JA;Lo;0;L;;;;;N;;;;;\n1BD1;BATAK LETTER DA;Lo;0;L;;;;;N;;;;;\n1BD2;BATAK LETTER RA;Lo;0;L;;;;;N;;;;;\n1BD3;BATAK LETTER SIMALUNGUN RA;Lo;0;L;;;;;N;;;;;\n1BD4;BATAK LETTER MA;Lo;0;L;;;;;N;;;;;\n1BD5;BATAK LETTER SIMALUNGUN MA;Lo;0;L;;;;;N;;;;;\n1BD6;BATAK LETTER SOUTHERN TA;Lo;0;L;;;;;N;;;;;\n1BD7;BATAK LETTER NORTHERN TA;Lo;0;L;;;;;N;;;;;\n1BD8;BATAK LETTER SA;Lo;0;L;;;;;N;;;;;\n1BD9;BATAK LETTER SIMALUNGUN SA;Lo;0;L;;;;;N;;;;;\n1BDA;BATAK LETTER MANDAILING SA;Lo;0;L;;;;;N;;;;;\n1BDB;BATAK LETTER YA;Lo;0;L;;;;;N;;;;;\n1BDC;BATAK LETTER SIMALUNGUN YA;Lo;0;L;;;;;N;;;;;\n1BDD;BATAK LETTER NGA;Lo;0;L;;;;;N;;;;;\n1BDE;BATAK LETTER LA;Lo;0;L;;;;;N;;;;;\n1BDF;BATAK LETTER SIMALUNGUN LA;Lo;0;L;;;;;N;;;;;\n1BE0;BATAK LETTER NYA;Lo;0;L;;;;;N;;;;;\n1BE1;BATAK LETTER CA;Lo;0;L;;;;;N;;;;;\n1BE2;BATAK LETTER NDA;Lo;0;L;;;;;N;;;;;\n1BE3;BATAK LETTER MBA;Lo;0;L;;;;;N;;;;;\n1BE4;BATAK LETTER I;Lo;0;L;;;;;N;;;;;\n1BE5;BATAK LETTER U;Lo;0;L;;;;;N;;;;;\n1BE6;BATAK SIGN TOMPI;Mn;7;NSM;;;;;N;;;;;\n1BE7;BATAK VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n1BE8;BATAK VOWEL SIGN PAKPAK E;Mn;0;NSM;;;;;N;;;;;\n1BE9;BATAK VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;\n1BEA;BATAK VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n1BEB;BATAK VOWEL SIGN KARO I;Mc;0;L;;;;;N;;;;;\n1BEC;BATAK VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n1BED;BATAK VOWEL SIGN KARO O;Mn;0;NSM;;;;;N;;;;;\n1BEE;BATAK VOWEL SIGN U;Mc;0;L;;;;;N;;;;;\n1BEF;BATAK VOWEL SIGN U FOR SIMALUNGUN SA;Mn;0;NSM;;;;;N;;;;;\n1BF0;BATAK CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;;\n1BF1;BATAK CONSONANT SIGN H;Mn;0;NSM;;;;;N;;;;;\n1BF2;BATAK PANGOLAT;Mc;9;L;;;;;N;;;;;\n1BF3;BATAK PANONGONAN;Mc;9;L;;;;;N;;;;;\n1BFC;BATAK SYMBOL BINDU NA METEK;Po;0;L;;;;;N;;;;;\n1BFD;BATAK SYMBOL BINDU PINARBORAS;Po;0;L;;;;;N;;;;;\n1BFE;BATAK SYMBOL BINDU JUDUL;Po;0;L;;;;;N;;;;;\n1BFF;BATAK SYMBOL BINDU PANGOLAT;Po;0;L;;;;;N;;;;;\n1C00;LEPCHA LETTER KA;Lo;0;L;;;;;N;;;;;\n1C01;LEPCHA LETTER KLA;Lo;0;L;;;;;N;;;;;\n1C02;LEPCHA LETTER KHA;Lo;0;L;;;;;N;;;;;\n1C03;LEPCHA LETTER GA;Lo;0;L;;;;;N;;;;;\n1C04;LEPCHA LETTER GLA;Lo;0;L;;;;;N;;;;;\n1C05;LEPCHA LETTER NGA;Lo;0;L;;;;;N;;;;;\n1C06;LEPCHA LETTER CA;Lo;0;L;;;;;N;;;;;\n1C07;LEPCHA LETTER CHA;Lo;0;L;;;;;N;;;;;\n1C08;LEPCHA LETTER JA;Lo;0;L;;;;;N;;;;;\n1C09;LEPCHA LETTER NYA;Lo;0;L;;;;;N;;;;;\n1C0A;LEPCHA LETTER TA;Lo;0;L;;;;;N;;;;;\n1C0B;LEPCHA LETTER THA;Lo;0;L;;;;;N;;;;;\n1C0C;LEPCHA LETTER DA;Lo;0;L;;;;;N;;;;;\n1C0D;LEPCHA LETTER NA;Lo;0;L;;;;;N;;;;;\n1C0E;LEPCHA LETTER PA;Lo;0;L;;;;;N;;;;;\n1C0F;LEPCHA LETTER PLA;Lo;0;L;;;;;N;;;;;\n1C10;LEPCHA LETTER PHA;Lo;0;L;;;;;N;;;;;\n1C11;LEPCHA LETTER FA;Lo;0;L;;;;;N;;;;;\n1C12;LEPCHA LETTER FLA;Lo;0;L;;;;;N;;;;;\n1C13;LEPCHA LETTER BA;Lo;0;L;;;;;N;;;;;\n1C14;LEPCHA LETTER BLA;Lo;0;L;;;;;N;;;;;\n1C15;LEPCHA LETTER MA;Lo;0;L;;;;;N;;;;;\n1C16;LEPCHA LETTER MLA;Lo;0;L;;;;;N;;;;;\n1C17;LEPCHA LETTER TSA;Lo;0;L;;;;;N;;;;;\n1C18;LEPCHA LETTER TSHA;Lo;0;L;;;;;N;;;;;\n1C19;LEPCHA LETTER DZA;Lo;0;L;;;;;N;;;;;\n1C1A;LEPCHA LETTER YA;Lo;0;L;;;;;N;;;;;\n1C1B;LEPCHA LETTER RA;Lo;0;L;;;;;N;;;;;\n1C1C;LEPCHA LETTER LA;Lo;0;L;;;;;N;;;;;\n1C1D;LEPCHA LETTER HA;Lo;0;L;;;;;N;;;;;\n1C1E;LEPCHA LETTER HLA;Lo;0;L;;;;;N;;;;;\n1C1F;LEPCHA LETTER VA;Lo;0;L;;;;;N;;;;;\n1C20;LEPCHA LETTER SA;Lo;0;L;;;;;N;;;;;\n1C21;LEPCHA LETTER SHA;Lo;0;L;;;;;N;;;;;\n1C22;LEPCHA LETTER WA;Lo;0;L;;;;;N;;;;;\n1C23;LEPCHA LETTER A;Lo;0;L;;;;;N;;;;;\n1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;\n1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;\n1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;\n1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;\n1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;\n1C2C;LEPCHA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n1C2D;LEPCHA CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;;\n1C2E;LEPCHA CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;;\n1C2F;LEPCHA CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;;\n1C30;LEPCHA CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;\n1C31;LEPCHA CONSONANT SIGN P;Mn;0;NSM;;;;;N;;;;;\n1C32;LEPCHA CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;\n1C33;LEPCHA CONSONANT SIGN T;Mn;0;NSM;;;;;N;;;;;\n1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;;\n1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;;\n1C36;LEPCHA SIGN RAN;Mn;0;NSM;;;;;N;;;;;\n1C37;LEPCHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n1C3B;LEPCHA PUNCTUATION TA-ROL;Po;0;L;;;;;N;;;;;\n1C3C;LEPCHA PUNCTUATION NYET THYOOM TA-ROL;Po;0;L;;;;;N;;;;;\n1C3D;LEPCHA PUNCTUATION CER-WA;Po;0;L;;;;;N;;;;;\n1C3E;LEPCHA PUNCTUATION TSHOOK CER-WA;Po;0;L;;;;;N;;;;;\n1C3F;LEPCHA PUNCTUATION TSHOOK;Po;0;L;;;;;N;;;;;\n1C40;LEPCHA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1C41;LEPCHA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1C42;LEPCHA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1C43;LEPCHA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1C44;LEPCHA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1C45;LEPCHA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1C46;LEPCHA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1C47;LEPCHA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1C48;LEPCHA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1C49;LEPCHA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1C4D;LEPCHA LETTER TTA;Lo;0;L;;;;;N;;;;;\n1C4E;LEPCHA LETTER TTHA;Lo;0;L;;;;;N;;;;;\n1C4F;LEPCHA LETTER DDA;Lo;0;L;;;;;N;;;;;\n1C50;OL CHIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1C51;OL CHIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1C52;OL CHIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1C53;OL CHIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1C54;OL CHIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1C55;OL CHIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1C56;OL CHIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1C57;OL CHIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1C58;OL CHIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1C59;OL CHIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1C5A;OL CHIKI LETTER LA;Lo;0;L;;;;;N;;;;;\n1C5B;OL CHIKI LETTER AT;Lo;0;L;;;;;N;;;;;\n1C5C;OL CHIKI LETTER AG;Lo;0;L;;;;;N;;;;;\n1C5D;OL CHIKI LETTER ANG;Lo;0;L;;;;;N;;;;;\n1C5E;OL CHIKI LETTER AL;Lo;0;L;;;;;N;;;;;\n1C5F;OL CHIKI LETTER LAA;Lo;0;L;;;;;N;;;;;\n1C60;OL CHIKI LETTER AAK;Lo;0;L;;;;;N;;;;;\n1C61;OL CHIKI LETTER AAJ;Lo;0;L;;;;;N;;;;;\n1C62;OL CHIKI LETTER AAM;Lo;0;L;;;;;N;;;;;\n1C63;OL CHIKI LETTER AAW;Lo;0;L;;;;;N;;;;;\n1C64;OL CHIKI LETTER LI;Lo;0;L;;;;;N;;;;;\n1C65;OL CHIKI LETTER IS;Lo;0;L;;;;;N;;;;;\n1C66;OL CHIKI LETTER IH;Lo;0;L;;;;;N;;;;;\n1C67;OL CHIKI LETTER INY;Lo;0;L;;;;;N;;;;;\n1C68;OL CHIKI LETTER IR;Lo;0;L;;;;;N;;;;;\n1C69;OL CHIKI LETTER LU;Lo;0;L;;;;;N;;;;;\n1C6A;OL CHIKI LETTER UC;Lo;0;L;;;;;N;;;;;\n1C6B;OL CHIKI LETTER UD;Lo;0;L;;;;;N;;;;;\n1C6C;OL CHIKI LETTER UNN;Lo;0;L;;;;;N;;;;;\n1C6D;OL CHIKI LETTER UY;Lo;0;L;;;;;N;;;;;\n1C6E;OL CHIKI LETTER LE;Lo;0;L;;;;;N;;;;;\n1C6F;OL CHIKI LETTER EP;Lo;0;L;;;;;N;;;;;\n1C70;OL CHIKI LETTER EDD;Lo;0;L;;;;;N;;;;;\n1C71;OL CHIKI LETTER EN;Lo;0;L;;;;;N;;;;;\n1C72;OL CHIKI LETTER ERR;Lo;0;L;;;;;N;;;;;\n1C73;OL CHIKI LETTER LO;Lo;0;L;;;;;N;;;;;\n1C74;OL CHIKI LETTER OTT;Lo;0;L;;;;;N;;;;;\n1C75;OL CHIKI LETTER OB;Lo;0;L;;;;;N;;;;;\n1C76;OL CHIKI LETTER OV;Lo;0;L;;;;;N;;;;;\n1C77;OL CHIKI LETTER OH;Lo;0;L;;;;;N;;;;;\n1C78;OL CHIKI MU TTUDDAG;Lm;0;L;;;;;N;;;;;\n1C79;OL CHIKI GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;;\n1C7A;OL CHIKI MU-GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;;\n1C7B;OL CHIKI RELAA;Lm;0;L;;;;;N;;;;;\n1C7C;OL CHIKI PHAARKAA;Lm;0;L;;;;;N;;;;;\n1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;;\n1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;;\n1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;;\n1C80;CYRILLIC SMALL LETTER ROUNDED VE;Ll;0;L;;;;;N;;;0412;;0412\n1C81;CYRILLIC SMALL LETTER LONG-LEGGED DE;Ll;0;L;;;;;N;;;0414;;0414\n1C82;CYRILLIC SMALL LETTER NARROW O;Ll;0;L;;;;;N;;;041E;;041E\n1C83;CYRILLIC SMALL LETTER WIDE ES;Ll;0;L;;;;;N;;;0421;;0421\n1C84;CYRILLIC SMALL LETTER TALL TE;Ll;0;L;;;;;N;;;0422;;0422\n1C85;CYRILLIC SMALL LETTER THREE-LEGGED TE;Ll;0;L;;;;;N;;;0422;;0422\n1C86;CYRILLIC SMALL LETTER TALL HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A\n1C87;CYRILLIC SMALL LETTER TALL YAT;Ll;0;L;;;;;N;;;0462;;0462\n1C88;CYRILLIC SMALL LETTER UNBLENDED UK;Ll;0;L;;;;;N;;;A64A;;A64A\n1C89;CYRILLIC CAPITAL LETTER TJE;Lu;0;L;;;;;N;;;;1C8A;\n1C8A;CYRILLIC SMALL LETTER TJE;Ll;0;L;;;;;N;;;1C89;;1C89\n1C90;GEORGIAN MTAVRULI CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;10D0;\n1C91;GEORGIAN MTAVRULI CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;10D1;\n1C92;GEORGIAN MTAVRULI CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;10D2;\n1C93;GEORGIAN MTAVRULI CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;10D3;\n1C94;GEORGIAN MTAVRULI CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;10D4;\n1C95;GEORGIAN MTAVRULI CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;10D5;\n1C96;GEORGIAN MTAVRULI CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;10D6;\n1C97;GEORGIAN MTAVRULI CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;10D7;\n1C98;GEORGIAN MTAVRULI CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;10D8;\n1C99;GEORGIAN MTAVRULI CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;10D9;\n1C9A;GEORGIAN MTAVRULI CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;10DA;\n1C9B;GEORGIAN MTAVRULI CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;10DB;\n1C9C;GEORGIAN MTAVRULI CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;10DC;\n1C9D;GEORGIAN MTAVRULI CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;10DD;\n1C9E;GEORGIAN MTAVRULI CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;10DE;\n1C9F;GEORGIAN MTAVRULI CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;10DF;\n1CA0;GEORGIAN MTAVRULI CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;10E0;\n1CA1;GEORGIAN MTAVRULI CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;10E1;\n1CA2;GEORGIAN MTAVRULI CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;10E2;\n1CA3;GEORGIAN MTAVRULI CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;10E3;\n1CA4;GEORGIAN MTAVRULI CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;10E4;\n1CA5;GEORGIAN MTAVRULI CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;10E5;\n1CA6;GEORGIAN MTAVRULI CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;10E6;\n1CA7;GEORGIAN MTAVRULI CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;10E7;\n1CA8;GEORGIAN MTAVRULI CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;10E8;\n1CA9;GEORGIAN MTAVRULI CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;10E9;\n1CAA;GEORGIAN MTAVRULI CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;10EA;\n1CAB;GEORGIAN MTAVRULI CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;10EB;\n1CAC;GEORGIAN MTAVRULI CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;10EC;\n1CAD;GEORGIAN MTAVRULI CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;10ED;\n1CAE;GEORGIAN MTAVRULI CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;10EE;\n1CAF;GEORGIAN MTAVRULI CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;10EF;\n1CB0;GEORGIAN MTAVRULI CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;10F0;\n1CB1;GEORGIAN MTAVRULI CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;10F1;\n1CB2;GEORGIAN MTAVRULI CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;10F2;\n1CB3;GEORGIAN MTAVRULI CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;10F3;\n1CB4;GEORGIAN MTAVRULI CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;10F4;\n1CB5;GEORGIAN MTAVRULI CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;10F5;\n1CB6;GEORGIAN MTAVRULI CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;10F6;\n1CB7;GEORGIAN MTAVRULI CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;10F7;\n1CB8;GEORGIAN MTAVRULI CAPITAL LETTER ELIFI;Lu;0;L;;;;;N;;;;10F8;\n1CB9;GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN;Lu;0;L;;;;;N;;;;10F9;\n1CBA;GEORGIAN MTAVRULI CAPITAL LETTER AIN;Lu;0;L;;;;;N;;;;10FA;\n1CBD;GEORGIAN MTAVRULI CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;10FD;\n1CBE;GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;10FE;\n1CBF;GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN;Lu;0;L;;;;;N;;;;10FF;\n1CC0;SUNDANESE PUNCTUATION BINDU SURYA;Po;0;L;;;;;N;;;;;\n1CC1;SUNDANESE PUNCTUATION BINDU PANGLONG;Po;0;L;;;;;N;;;;;\n1CC2;SUNDANESE PUNCTUATION BINDU PURNAMA;Po;0;L;;;;;N;;;;;\n1CC3;SUNDANESE PUNCTUATION BINDU CAKRA;Po;0;L;;;;;N;;;;;\n1CC4;SUNDANESE PUNCTUATION BINDU LEU SATANGA;Po;0;L;;;;;N;;;;;\n1CC5;SUNDANESE PUNCTUATION BINDU KA SATANGA;Po;0;L;;;;;N;;;;;\n1CC6;SUNDANESE PUNCTUATION BINDU DA SATANGA;Po;0;L;;;;;N;;;;;\n1CC7;SUNDANESE PUNCTUATION BINDU BA SATANGA;Po;0;L;;;;;N;;;;;\n1CD0;VEDIC TONE KARSHANA;Mn;230;NSM;;;;;N;;;;;\n1CD1;VEDIC TONE SHARA;Mn;230;NSM;;;;;N;;;;;\n1CD2;VEDIC TONE PRENKHA;Mn;230;NSM;;;;;N;;;;;\n1CD3;VEDIC SIGN NIHSHVASA;Po;0;L;;;;;N;;;;;\n1CD4;VEDIC SIGN YAJURVEDIC MIDLINE SVARITA;Mn;1;NSM;;;;;N;;;;;\n1CD5;VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;;\n1CD6;VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;;\n1CD7;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;;\n1CD8;VEDIC TONE CANDRA BELOW;Mn;220;NSM;;;;;N;;;;;\n1CD9;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER;Mn;220;NSM;;;;;N;;;;;\n1CDA;VEDIC TONE DOUBLE SVARITA;Mn;230;NSM;;;;;N;;;;;\n1CDB;VEDIC TONE TRIPLE SVARITA;Mn;230;NSM;;;;;N;;;;;\n1CDC;VEDIC TONE KATHAKA ANUDATTA;Mn;220;NSM;;;;;N;;;;;\n1CDD;VEDIC TONE DOT BELOW;Mn;220;NSM;;;;;N;;;;;\n1CDE;VEDIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;\n1CDF;VEDIC TONE THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;\n1CE0;VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA;Mn;230;NSM;;;;;N;;;;;\n1CE1;VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA;Mc;0;L;;;;;N;;;;;\n1CE2;VEDIC SIGN VISARGA SVARITA;Mn;1;NSM;;;;;N;;;;;\n1CE3;VEDIC SIGN VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;;\n1CE4;VEDIC SIGN REVERSED VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;;\n1CE5;VEDIC SIGN VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;;\n1CE6;VEDIC SIGN REVERSED VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;;\n1CE7;VEDIC SIGN VISARGA UDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;;\n1CE8;VEDIC SIGN VISARGA ANUDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;;\n1CE9;VEDIC SIGN ANUSVARA ANTARGOMUKHA;Lo;0;L;;;;;N;;;;;\n1CEA;VEDIC SIGN ANUSVARA BAHIRGOMUKHA;Lo;0;L;;;;;N;;;;;\n1CEB;VEDIC SIGN ANUSVARA VAMAGOMUKHA;Lo;0;L;;;;;N;;;;;\n1CEC;VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL;Lo;0;L;;;;;N;;;;;\n1CED;VEDIC SIGN TIRYAK;Mn;220;NSM;;;;;N;;;;;\n1CEE;VEDIC SIGN HEXIFORM LONG ANUSVARA;Lo;0;L;;;;;N;;;;;\n1CEF;VEDIC SIGN LONG ANUSVARA;Lo;0;L;;;;;N;;;;;\n1CF0;VEDIC SIGN RTHANG LONG ANUSVARA;Lo;0;L;;;;;N;;;;;\n1CF1;VEDIC SIGN ANUSVARA UBHAYATO MUKHA;Lo;0;L;;;;;N;;;;;\n1CF2;VEDIC SIGN ARDHAVISARGA;Lo;0;L;;;;;N;;;;;\n1CF3;VEDIC SIGN ROTATED ARDHAVISARGA;Lo;0;L;;;;;N;;;;;\n1CF4;VEDIC TONE CANDRA ABOVE;Mn;230;NSM;;;;;N;;;;;\n1CF5;VEDIC SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;\n1CF6;VEDIC SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;\n1CF7;VEDIC SIGN ATIKRAMA;Mc;0;L;;;;;N;;;;;\n1CF8;VEDIC TONE RING ABOVE;Mn;230;NSM;;;;;N;;;;;\n1CF9;VEDIC TONE DOUBLE RING ABOVE;Mn;230;NSM;;;;;N;;;;;\n1CFA;VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA;Lo;0;L;;;;;N;;;;;\n1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;;\n1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;;\n1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;;\n1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;;\n1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;;\n1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;;\n1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;;\n1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;;\n1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;;\n1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;;\n1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;;\n1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;;\n1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;;\n1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;;\n1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;;\n1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;;\n1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;;\n1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;;\n1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;;\n1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;;\n1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;;\n1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;;\n1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;;\n1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;;\n1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;;\n1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;;\n1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;;\n1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;;\n1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;;\n1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;;\n1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;;\n1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;;\n1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;;\n1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;;\n1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;;\n1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;;\n1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;;\n1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;;\n1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;;\n1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;;\n1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;;\n1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;;\n1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;;\n1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;;\n1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L;<super> 0041;;;;N;;;;;\n1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L;<super> 00C6;;;;N;;;;;\n1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L;<super> 0042;;;;N;;;;;\n1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;;\n1D30;MODIFIER LETTER CAPITAL D;Lm;0;L;<super> 0044;;;;N;;;;;\n1D31;MODIFIER LETTER CAPITAL E;Lm;0;L;<super> 0045;;;;N;;;;;\n1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L;<super> 018E;;;;N;;;;;\n1D33;MODIFIER LETTER CAPITAL G;Lm;0;L;<super> 0047;;;;N;;;;;\n1D34;MODIFIER LETTER CAPITAL H;Lm;0;L;<super> 0048;;;;N;;;;;\n1D35;MODIFIER LETTER CAPITAL I;Lm;0;L;<super> 0049;;;;N;;;;;\n1D36;MODIFIER LETTER CAPITAL J;Lm;0;L;<super> 004A;;;;N;;;;;\n1D37;MODIFIER LETTER CAPITAL K;Lm;0;L;<super> 004B;;;;N;;;;;\n1D38;MODIFIER LETTER CAPITAL L;Lm;0;L;<super> 004C;;;;N;;;;;\n1D39;MODIFIER LETTER CAPITAL M;Lm;0;L;<super> 004D;;;;N;;;;;\n1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L;<super> 004E;;;;N;;;;;\n1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;;\n1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L;<super> 004F;;;;N;;;;;\n1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L;<super> 0222;;;;N;;;;;\n1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L;<super> 0050;;;;N;;;;;\n1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L;<super> 0052;;;;N;;;;;\n1D40;MODIFIER LETTER CAPITAL T;Lm;0;L;<super> 0054;;;;N;;;;;\n1D41;MODIFIER LETTER CAPITAL U;Lm;0;L;<super> 0055;;;;N;;;;;\n1D42;MODIFIER LETTER CAPITAL W;Lm;0;L;<super> 0057;;;;N;;;;;\n1D43;MODIFIER LETTER SMALL A;Lm;0;L;<super> 0061;;;;N;;;;;\n1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L;<super> 0250;;;;N;;;;;\n1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L;<super> 0251;;;;N;;;;;\n1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L;<super> 1D02;;;;N;;;;;\n1D47;MODIFIER LETTER SMALL B;Lm;0;L;<super> 0062;;;;N;;;;;\n1D48;MODIFIER LETTER SMALL D;Lm;0;L;<super> 0064;;;;N;;;;;\n1D49;MODIFIER LETTER SMALL E;Lm;0;L;<super> 0065;;;;N;;;;;\n1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L;<super> 0259;;;;N;;;;;\n1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L;<super> 025B;;;;N;;;;;\n1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;\n1D4D;MODIFIER LETTER SMALL G;Lm;0;L;<super> 0067;;;;N;;;;;\n1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;;\n1D4F;MODIFIER LETTER SMALL K;Lm;0;L;<super> 006B;;;;N;;;;;\n1D50;MODIFIER LETTER SMALL M;Lm;0;L;<super> 006D;;;;N;;;;;\n1D51;MODIFIER LETTER SMALL ENG;Lm;0;L;<super> 014B;;;;N;;;;;\n1D52;MODIFIER LETTER SMALL O;Lm;0;L;<super> 006F;;;;N;;;;;\n1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L;<super> 0254;;;;N;;;;;\n1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L;<super> 1D16;;;;N;;;;;\n1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L;<super> 1D17;;;;N;;;;;\n1D56;MODIFIER LETTER SMALL P;Lm;0;L;<super> 0070;;;;N;;;;;\n1D57;MODIFIER LETTER SMALL T;Lm;0;L;<super> 0074;;;;N;;;;;\n1D58;MODIFIER LETTER SMALL U;Lm;0;L;<super> 0075;;;;N;;;;;\n1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L;<super> 1D1D;;;;N;;;;;\n1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L;<super> 026F;;;;N;;;;;\n1D5B;MODIFIER LETTER SMALL V;Lm;0;L;<super> 0076;;;;N;;;;;\n1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L;<super> 1D25;;;;N;;;;;\n1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L;<super> 03B2;;;;N;;;;;\n1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L;<super> 03B3;;;;N;;;;;\n1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L;<super> 03B4;;;;N;;;;;\n1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L;<super> 03C6;;;;N;;;;;\n1D61;MODIFIER LETTER SMALL CHI;Lm;0;L;<super> 03C7;;;;N;;;;;\n1D62;LATIN SUBSCRIPT SMALL LETTER I;Lm;0;L;<sub> 0069;;;;N;;;;;\n1D63;LATIN SUBSCRIPT SMALL LETTER R;Lm;0;L;<sub> 0072;;;;N;;;;;\n1D64;LATIN SUBSCRIPT SMALL LETTER U;Lm;0;L;<sub> 0075;;;;N;;;;;\n1D65;LATIN SUBSCRIPT SMALL LETTER V;Lm;0;L;<sub> 0076;;;;N;;;;;\n1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Lm;0;L;<sub> 03B2;;;;N;;;;;\n1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Lm;0;L;<sub> 03B3;;;;N;;;;;\n1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Lm;0;L;<sub> 03C1;;;;N;;;;;\n1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Lm;0;L;<sub> 03C6;;;;N;;;;;\n1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Lm;0;L;<sub> 03C7;;;;N;;;;;\n1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;;\n1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\n1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\n1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\n1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\n1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\n1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\n1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\n1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\n1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\n1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\n1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\n1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;;\n1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;;\n1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;A77D;;A77D\n1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;;\n1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;;\n1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;;\n1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63\n1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;;\n1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;;\n1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;A7C6;;A7C6\n1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;;\n1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;;\n1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;;\n1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;;\n1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;;\n1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;\n1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;;\n1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;;\n1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;;\n1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;;\n1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;;\n1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;;\n1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;;\n1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;;\n1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;;\n1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;;\n1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;;\n1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;;\n1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;;\n1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;;\n1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;;\n1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;;\n1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;;\n1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;;\n1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;;\n1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;;\n1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;;\n1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;;\n1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;;\n1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;;\n1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;;\n1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;;\n1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;;\n1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;;\n1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;;\n1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;;\n1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;;\n1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;;\n1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;\n1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;\n1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;;\n1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;;\n1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;;\n1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;;\n1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;;\n1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;;\n1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;;\n1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;;\n1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;;\n1DCB;COMBINING BREVE-MACRON;Mn;230;NSM;;;;;N;;;;;\n1DCC;COMBINING MACRON-BREVE;Mn;230;NSM;;;;;N;;;;;\n1DCD;COMBINING DOUBLE CIRCUMFLEX ABOVE;Mn;234;NSM;;;;;N;;;;;\n1DCE;COMBINING OGONEK ABOVE;Mn;214;NSM;;;;;N;;;;;\n1DCF;COMBINING ZIGZAG BELOW;Mn;220;NSM;;;;;N;;;;;\n1DD0;COMBINING IS BELOW;Mn;202;NSM;;;;;N;;;;;\n1DD1;COMBINING UR ABOVE;Mn;230;NSM;;;;;N;;;;;\n1DD2;COMBINING US ABOVE;Mn;230;NSM;;;;;N;;;;;\n1DD3;COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE;Mn;230;NSM;;;;;N;;;;;\n1DD4;COMBINING LATIN SMALL LETTER AE;Mn;230;NSM;;;;;N;;;;;\n1DD5;COMBINING LATIN SMALL LETTER AO;Mn;230;NSM;;;;;N;;;;;\n1DD6;COMBINING LATIN SMALL LETTER AV;Mn;230;NSM;;;;;N;;;;;\n1DD7;COMBINING LATIN SMALL LETTER C CEDILLA;Mn;230;NSM;;;;;N;;;;;\n1DD8;COMBINING LATIN SMALL LETTER INSULAR D;Mn;230;NSM;;;;;N;;;;;\n1DD9;COMBINING LATIN SMALL LETTER ETH;Mn;230;NSM;;;;;N;;;;;\n1DDA;COMBINING LATIN SMALL LETTER G;Mn;230;NSM;;;;;N;;;;;\n1DDB;COMBINING LATIN LETTER SMALL CAPITAL G;Mn;230;NSM;;;;;N;;;;;\n1DDC;COMBINING LATIN SMALL LETTER K;Mn;230;NSM;;;;;N;;;;;\n1DDD;COMBINING LATIN SMALL LETTER L;Mn;230;NSM;;;;;N;;;;;\n1DDE;COMBINING LATIN LETTER SMALL CAPITAL L;Mn;230;NSM;;;;;N;;;;;\n1DDF;COMBINING LATIN LETTER SMALL CAPITAL M;Mn;230;NSM;;;;;N;;;;;\n1DE0;COMBINING LATIN SMALL LETTER N;Mn;230;NSM;;;;;N;;;;;\n1DE1;COMBINING LATIN LETTER SMALL CAPITAL N;Mn;230;NSM;;;;;N;;;;;\n1DE2;COMBINING LATIN LETTER SMALL CAPITAL R;Mn;230;NSM;;;;;N;;;;;\n1DE3;COMBINING LATIN SMALL LETTER R ROTUNDA;Mn;230;NSM;;;;;N;;;;;\n1DE4;COMBINING LATIN SMALL LETTER S;Mn;230;NSM;;;;;N;;;;;\n1DE5;COMBINING LATIN SMALL LETTER LONG S;Mn;230;NSM;;;;;N;;;;;\n1DE6;COMBINING LATIN SMALL LETTER Z;Mn;230;NSM;;;;;N;;;;;\n1DE7;COMBINING LATIN SMALL LETTER ALPHA;Mn;230;NSM;;;;;N;;;;;\n1DE8;COMBINING LATIN SMALL LETTER B;Mn;230;NSM;;;;;N;;;;;\n1DE9;COMBINING LATIN SMALL LETTER BETA;Mn;230;NSM;;;;;N;;;;;\n1DEA;COMBINING LATIN SMALL LETTER SCHWA;Mn;230;NSM;;;;;N;;;;;\n1DEB;COMBINING LATIN SMALL LETTER F;Mn;230;NSM;;;;;N;;;;;\n1DEC;COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE;Mn;230;NSM;;;;;N;;;;;\n1DED;COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE;Mn;230;NSM;;;;;N;;;;;\n1DEE;COMBINING LATIN SMALL LETTER P;Mn;230;NSM;;;;;N;;;;;\n1DEF;COMBINING LATIN SMALL LETTER ESH;Mn;230;NSM;;;;;N;;;;;\n1DF0;COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE;Mn;230;NSM;;;;;N;;;;;\n1DF1;COMBINING LATIN SMALL LETTER W;Mn;230;NSM;;;;;N;;;;;\n1DF2;COMBINING LATIN SMALL LETTER A WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;;\n1DF3;COMBINING LATIN SMALL LETTER O WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;;\n1DF4;COMBINING LATIN SMALL LETTER U WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;;\n1DF5;COMBINING UP TACK ABOVE;Mn;230;NSM;;;;;N;;;;;\n1DF6;COMBINING KAVYKA ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;;\n1DF7;COMBINING KAVYKA ABOVE LEFT;Mn;228;NSM;;;;;N;;;;;\n1DF8;COMBINING DOT ABOVE LEFT;Mn;228;NSM;;;;;N;;;;;\n1DF9;COMBINING WIDE INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;;;;;\n1DFA;COMBINING DOT BELOW LEFT;Mn;218;NSM;;;;;N;;;;;\n1DFB;COMBINING DELETION MARK;Mn;230;NSM;;;;;N;;;;;\n1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;;\n1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;;\n1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;\n1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;\n1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;\n1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00\n1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;\n1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02\n1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;\n1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04\n1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;\n1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06\n1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;\n1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08\n1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;\n1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A\n1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;\n1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C\n1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;\n1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E\n1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;\n1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10\n1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;\n1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12\n1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;\n1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14\n1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;\n1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16\n1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;\n1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18\n1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;\n1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A\n1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;\n1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C\n1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;\n1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E\n1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;\n1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20\n1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;\n1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22\n1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;\n1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24\n1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;\n1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26\n1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;\n1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28\n1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;\n1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A\n1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;\n1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C\n1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;\n1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E\n1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;\n1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30\n1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;\n1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32\n1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;\n1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34\n1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;\n1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36\n1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;\n1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38\n1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;\n1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A\n1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;\n1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C\n1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;\n1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E\n1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;\n1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40\n1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;\n1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42\n1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;\n1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44\n1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;\n1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46\n1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;\n1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48\n1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;\n1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A\n1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;\n1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C\n1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;\n1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E\n1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;\n1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50\n1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;\n1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52\n1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;\n1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54\n1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;\n1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56\n1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;\n1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58\n1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;\n1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A\n1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;\n1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C\n1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;\n1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E\n1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;\n1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60\n1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;\n1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62\n1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;\n1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64\n1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;\n1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66\n1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;\n1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68\n1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;\n1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A\n1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;\n1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C\n1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;\n1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E\n1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;\n1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70\n1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;\n1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72\n1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;\n1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74\n1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;\n1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76\n1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;\n1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78\n1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;\n1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A\n1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;\n1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C\n1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;\n1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E\n1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;\n1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80\n1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;\n1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82\n1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;\n1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84\n1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;\n1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86\n1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;\n1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88\n1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;\n1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A\n1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;\n1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C\n1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;\n1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E\n1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;\n1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90\n1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;\n1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92\n1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;\n1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94\n1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;\n1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;\n1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;\n1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;\n1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;\n1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60\n1E9C;LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;;;\n1E9D;LATIN SMALL LETTER LONG S WITH HIGH STROKE;Ll;0;L;;;;;N;;;;;\n1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF;\n1E9F;LATIN SMALL LETTER DELTA;Ll;0;L;;;;;N;;;;;\n1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;\n1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0\n1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;\n1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2\n1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;\n1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4\n1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;\n1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6\n1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;\n1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8\n1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;\n1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA\n1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;\n1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC\n1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;\n1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE\n1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;\n1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0\n1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;\n1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2\n1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;\n1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4\n1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;\n1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6\n1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;\n1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8\n1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;\n1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA\n1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;\n1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC\n1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;\n1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE\n1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;\n1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0\n1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;\n1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2\n1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;\n1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4\n1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;\n1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6\n1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;\n1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8\n1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;\n1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA\n1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;\n1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC\n1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;\n1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE\n1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;\n1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0\n1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;\n1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2\n1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;\n1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4\n1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;\n1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6\n1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;\n1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8\n1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;\n1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA\n1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;\n1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC\n1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;\n1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE\n1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;\n1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0\n1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;\n1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2\n1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;\n1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4\n1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;\n1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6\n1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;\n1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8\n1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;\n1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA\n1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;\n1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC\n1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;\n1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE\n1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;\n1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0\n1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;\n1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2\n1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;\n1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4\n1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;\n1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6\n1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;\n1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8\n1EFA;LATIN CAPITAL LETTER MIDDLE-WELSH LL;Lu;0;L;;;;;N;;;;1EFB;\n1EFB;LATIN SMALL LETTER MIDDLE-WELSH LL;Ll;0;L;;;;;N;;;1EFA;;1EFA\n1EFC;LATIN CAPITAL LETTER MIDDLE-WELSH V;Lu;0;L;;;;;N;;;;1EFD;\n1EFD;LATIN SMALL LETTER MIDDLE-WELSH V;Ll;0;L;;;;;N;;;1EFC;;1EFC\n1EFE;LATIN CAPITAL LETTER Y WITH LOOP;Lu;0;L;;;;;N;;;;1EFF;\n1EFF;LATIN SMALL LETTER Y WITH LOOP;Ll;0;L;;;;;N;;;1EFE;;1EFE\n1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08\n1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09\n1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A\n1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B\n1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C\n1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D\n1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E\n1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F\n1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;\n1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;\n1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;\n1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;\n1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;\n1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;\n1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;\n1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;\n1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18\n1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19\n1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A\n1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B\n1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C\n1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D\n1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;\n1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;\n1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;\n1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;\n1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;\n1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;\n1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28\n1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29\n1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A\n1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B\n1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C\n1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D\n1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E\n1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F\n1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;\n1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;\n1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;\n1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;\n1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;\n1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;\n1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;\n1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;\n1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38\n1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39\n1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A\n1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B\n1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C\n1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D\n1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E\n1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F\n1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;\n1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;\n1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;\n1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;\n1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;\n1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;\n1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;\n1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;\n1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48\n1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49\n1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A\n1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B\n1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C\n1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D\n1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;\n1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;\n1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;\n1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;\n1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;\n1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;\n1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;\n1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59\n1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;\n1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B\n1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;\n1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D\n1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;\n1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F\n1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;\n1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;\n1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;\n1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;\n1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68\n1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69\n1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A\n1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B\n1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C\n1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D\n1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E\n1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F\n1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;\n1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;\n1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;\n1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;\n1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;\n1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;\n1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;\n1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;\n1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA\n1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB\n1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8\n1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9\n1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA\n1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB\n1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA\n1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB\n1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8\n1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9\n1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA\n1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB\n1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA\n1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB\n1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88\n1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89\n1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A\n1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B\n1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C\n1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D\n1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E\n1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F\n1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;\n1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;\n1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;\n1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;\n1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;\n1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;\n1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;\n1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;\n1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98\n1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99\n1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A\n1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B\n1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C\n1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D\n1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E\n1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F\n1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;\n1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;\n1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;\n1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;\n1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;\n1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;\n1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;\n1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;\n1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8\n1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9\n1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA\n1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB\n1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC\n1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD\n1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE\n1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF\n1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;\n1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;\n1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;\n1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;\n1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;\n1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;\n1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;\n1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;\n1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8\n1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9\n1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;\n1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC\n1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;\n1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;\n1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;\n1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;\n1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;\n1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;\n1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;\n1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;\n1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;\n1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399\n1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;\n1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;\n1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;\n1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;\n1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC\n1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;\n1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;\n1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;\n1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;\n1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;\n1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;\n1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;\n1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;\n1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;\n1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;\n1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;\n1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8\n1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9\n1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;\n1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;\n1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;\n1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;\n1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;\n1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;\n1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;\n1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;\n1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;\n1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;\n1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;\n1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8\n1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9\n1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;\n1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;\n1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;\n1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC\n1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;\n1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;\n1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;\n1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;\n1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;\n1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;\n1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;\n1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;\n1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;\n1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;\n1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;\n1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC\n1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;\n1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;\n1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;\n1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;\n1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;\n1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;\n1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;\n1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;\n1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;\n1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;\n2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;\n2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;\n2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;\n2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;\n2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;\n2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;\n2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;\n2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;\n2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;\n2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;\n200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;\n200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;;\n200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;\n200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;\n200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;\n200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;\n2010;HYPHEN;Pd;0;ON;;;;;N;;;;;\n2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;\n2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;\n2013;EN DASH;Pd;0;ON;;;;;N;;;;;\n2014;EM DASH;Pd;0;ON;;;;;N;;;;;\n2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;\n2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;\n2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;\n2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;\n2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;\n201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;\n201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;\n201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;\n201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;\n201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;\n201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;\n2020;DAGGER;Po;0;ON;;;;;N;;;;;\n2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;\n2022;BULLET;Po;0;ON;;;;;N;;;;;\n2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;\n2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;\n2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;\n2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;\n2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;\n2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;\n2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;\n202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;\n202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;\n202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;\n202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;\n202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;\n202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;\n2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;\n2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;\n2032;PRIME;Po;0;ET;;;;;N;;;;;\n2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;\n2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;\n2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;\n2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;\n2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;\n2038;CARET;Po;0;ON;;;;;N;;;;;\n2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;\n203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;\n203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;\n203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;\n203D;INTERROBANG;Po;0;ON;;;;;N;;;;;\n203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;\n203F;UNDERTIE;Pc;0;ON;;;;;N;;;;;\n2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;\n2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;\n2042;ASTERISM;Po;0;ON;;;;;N;;;;;\n2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;\n2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;;\n2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;\n2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;\n2047;DOUBLE QUESTION MARK;Po;0;ON;<compat> 003F 003F;;;;N;;;;;\n2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;\n2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;\n204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;\n204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;\n204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;\n204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;\n204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;;\n204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;;\n2050;CLOSE UP;Po;0;ON;;;;;N;;;;;\n2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;;\n2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;;\n2053;SWUNG DASH;Po;0;ON;;;;;N;;;;;\n2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;;\n2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;;\n2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;\n2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;;\n2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;\n2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;\n205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;\n205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;;\n205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;;\n205D;TRICOLON;Po;0;ON;;;;;N;;;;;\n205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;;\n205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;\n2060;WORD JOINER;Cf;0;BN;;;;;N;;;;;\n2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;;\n2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;;\n2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;;\n2064;INVISIBLE PLUS;Cf;0;BN;;;;;N;;;;;\n2066;LEFT-TO-RIGHT ISOLATE;Cf;0;LRI;;;;;N;;;;;\n2067;RIGHT-TO-LEFT ISOLATE;Cf;0;RLI;;;;;N;;;;;\n2068;FIRST STRONG ISOLATE;Cf;0;FSI;;;;;N;;;;;\n2069;POP DIRECTIONAL ISOLATE;Cf;0;PDI;;;;;N;;;;;\n206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;\n206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;\n206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;\n206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;\n206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;\n206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;\n2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;\n2071;SUPERSCRIPT LATIN SMALL LETTER I;Lm;0;L;<super> 0069;;;;N;;;;;\n2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;\n2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;\n2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;;\n2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;\n2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;\n2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;;\n207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;;\n207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;\n207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;\n207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;\n207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;\n207F;SUPERSCRIPT LATIN SMALL LETTER N;Lm;0;L;<super> 006E;;;;N;;;;;\n2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;;\n2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;;\n2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;;\n2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;;\n2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;;\n2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;;\n2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;;\n2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;\n2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;\n2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;;\n208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;;\n208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;\n208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;\n208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;\n208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;\n2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;;\n2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;;\n2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;;\n2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;;\n2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;;\n2095;LATIN SUBSCRIPT SMALL LETTER H;Lm;0;L;<sub> 0068;;;;N;;;;;\n2096;LATIN SUBSCRIPT SMALL LETTER K;Lm;0;L;<sub> 006B;;;;N;;;;;\n2097;LATIN SUBSCRIPT SMALL LETTER L;Lm;0;L;<sub> 006C;;;;N;;;;;\n2098;LATIN SUBSCRIPT SMALL LETTER M;Lm;0;L;<sub> 006D;;;;N;;;;;\n2099;LATIN SUBSCRIPT SMALL LETTER N;Lm;0;L;<sub> 006E;;;;N;;;;;\n209A;LATIN SUBSCRIPT SMALL LETTER P;Lm;0;L;<sub> 0070;;;;N;;;;;\n209B;LATIN SUBSCRIPT SMALL LETTER S;Lm;0;L;<sub> 0073;;;;N;;;;;\n209C;LATIN SUBSCRIPT SMALL LETTER T;Lm;0;L;<sub> 0074;;;;N;;;;;\n20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;\n20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;\n20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;\n20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;\n20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;\n20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;\n20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;\n20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;\n20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;\n20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;\n20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;\n20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;\n20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;\n20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;\n20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;\n20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;\n20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;;\n20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;;\n20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;;\n20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;;\n20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;;\n20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;;\n20B6;LIVRE TOURNOIS SIGN;Sc;0;ET;;;;;N;;;;;\n20B7;SPESMILO SIGN;Sc;0;ET;;;;;N;;;;;\n20B8;TENGE SIGN;Sc;0;ET;;;;;N;;;;;\n20B9;INDIAN RUPEE SIGN;Sc;0;ET;;;;;N;;;;;\n20BA;TURKISH LIRA SIGN;Sc;0;ET;;;;;N;;;;;\n20BB;NORDIC MARK SIGN;Sc;0;ET;;;;;N;;;;;\n20BC;MANAT SIGN;Sc;0;ET;;;;;N;;;;;\n20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;;\n20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;;\n20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;;\n20C0;SOM SIGN;Sc;0;ET;;;;;N;;;;;\n20C1;SAUDI RIYAL SIGN;Sc;0;ET;;;;;N;;;;;\n20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;\n20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;\n20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;\n20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;\n20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;\n20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;\n20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;\n20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;\n20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;\n20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;\n20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;\n20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;\n20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;\n20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;\n20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;\n20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;\n20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;\n20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;\n20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;\n20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;\n20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;;\n20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;\n20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;;\n20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;;\n20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;;\n20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;\n20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;;\n20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;\n20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;\n20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;\n20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;\n20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;\n20F0;COMBINING ASTERISK ABOVE;Mn;230;NSM;;;;;N;;;;;\n2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;\n2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;\n2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;\n2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;\n2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;\n2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;\n2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;\n2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;\n2108;SCRUPLE;So;0;ON;;;;;N;;;;;\n2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;\n210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;\n210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;\n210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;\n210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;\n210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;\n2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;\n2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;\n2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;\n2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;\n2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;\n2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;\n2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;\n2118;SCRIPT CAPITAL P;Sm;0;ON;;;;;N;SCRIPT P;;;;\n2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;\n211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;\n211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;\n211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;\n211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;\n211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;\n211F;RESPONSE;So;0;ON;;;;;N;;;;;\n2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;\n2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;\n2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;\n2123;VERSICLE;So;0;ON;;;;;N;;;;;\n2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;\n2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;\n2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;\n2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;\n2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;\n2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;\n212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;\n212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;\n212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;\n212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;\n212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;\n212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;\n2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;\n2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E;\n2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;\n2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;\n2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;\n2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;\n2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;\n2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;\n213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;\n213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;;\n213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;\n213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;\n213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;\n213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;\n2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON;<font> 2211;;;;Y;;;;;\n2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;;\n2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;\n2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;\n2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;;\n2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n214A;PROPERTY LINE;So;0;ON;;;;;N;;;;;\n214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;;\n214C;PER SIGN;So;0;ON;;;;;N;;;;;\n214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;;\n214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132\n214F;SYMBOL FOR SAMARITAN SOURCE;So;0;L;;;;;N;;;;;\n2150;VULGAR FRACTION ONE SEVENTH;No;0;ON;<fraction> 0031 2044 0037;;;1/7;N;;;;;\n2151;VULGAR FRACTION ONE NINTH;No;0;ON;<fraction> 0031 2044 0039;;;1/9;N;;;;;\n2152;VULGAR FRACTION ONE TENTH;No;0;ON;<fraction> 0031 2044 0031 0030;;;1/10;N;;;;;\n2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;\n2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;\n2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;\n2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;\n2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;\n2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;\n2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;\n215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;\n215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;\n215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;\n215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;\n215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;\n215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;\n2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;\n2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;\n2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;\n2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;\n2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;\n2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;\n2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;\n2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;\n2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;\n2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;\n216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;\n216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;\n216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;\n216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;\n216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;\n216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;\n2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160\n2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161\n2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162\n2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163\n2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164\n2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165\n2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166\n2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167\n2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168\n2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169\n217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A\n217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B\n217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C\n217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D\n217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E\n217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F\n2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;\n2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;\n2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;\n2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184;\n2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183\n2185;ROMAN NUMERAL SIX LATE FORM;Nl;0;L;;;;6;N;;;;;\n2186;ROMAN NUMERAL FIFTY EARLY FORM;Nl;0;L;;;;50;N;;;;;\n2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;;\n2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;;\n2189;VULGAR FRACTION ZERO THIRDS;No;0;ON;<fraction> 0030 2044 0033;;;0;N;;;;;\n218A;TURNED DIGIT TWO;So;0;ON;;;;;N;;;;;\n218B;TURNED DIGIT THREE;So;0;ON;;;;;N;;;;;\n2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;\n2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;\n2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;\n2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;\n2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;\n2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;\n2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;\n2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;\n2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;\n2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;\n219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;\n219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;\n219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;\n219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;\n219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;\n219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;\n21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;\n21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;\n21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;\n21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;\n21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;\n21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;\n21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;\n21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;\n21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;\n21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;\n21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;\n21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;\n21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;\n21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;\n21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;\n21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;\n21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;\n21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;\n21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;\n21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;\n21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;\n21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;\n21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;\n21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;\n21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;\n21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;\n21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;\n21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;\n21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;\n21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;\n21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;\n21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;\n21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;\n21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;\n21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;\n21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;\n21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;\n21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;\n21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;\n21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;\n21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;\n21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;\n21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;\n21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;\n21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;\n21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;\n21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;\n21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;\n21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;\n21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;\n21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;\n21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;\n21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;\n21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;\n21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;\n21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;\n21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;\n21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;\n21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;\n21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;\n21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;\n21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;\n21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;\n21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;\n21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;\n21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;\n21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;\n21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;\n21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;\n21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;\n21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;\n21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;\n21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;\n21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;\n21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;\n21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;\n21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;\n21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;\n21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;\n21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;\n21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;\n21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;\n21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;\n21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;\n21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;\n21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;\n21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;\n21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;\n21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;\n2200;FOR ALL;Sm;0;ON;;;;;N;;;;;\n2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;\n2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;\n2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;\n2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;\n2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;\n2206;INCREMENT;Sm;0;ON;;;;;N;;;;;\n2207;NABLA;Sm;0;ON;;;;;N;;;;;\n2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;\n2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;\n220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;\n220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;\n220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;\n220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;\n220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;\n220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;\n2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;\n2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;\n2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;;\n2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;\n2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;\n2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;\n2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;\n2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;\n2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;\n2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;\n221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;\n221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;\n221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;\n221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;\n221E;INFINITY;Sm;0;ON;;;;;N;;;;;\n221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;\n2220;ANGLE;Sm;0;ON;;;;;Y;;;;;\n2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;\n2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;\n2223;DIVIDES;Sm;0;ON;;;;;N;;;;;\n2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;\n2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;\n2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;\n2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;\n2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;\n2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;\n222A;UNION;Sm;0;ON;;;;;N;;;;;\n222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;\n222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;\n222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;\n222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;\n222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;\n2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;\n2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;\n2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;\n2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;\n2234;THEREFORE;Sm;0;ON;;;;;N;;;;;\n2235;BECAUSE;Sm;0;ON;;;;;N;;;;;\n2236;RATIO;Sm;0;ON;;;;;N;;;;;\n2237;PROPORTION;Sm;0;ON;;;;;N;;;;;\n2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;\n2239;EXCESS;Sm;0;ON;;;;;Y;;;;;\n223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;\n223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;\n223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;\n223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;;\n223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;\n223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;\n2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;\n2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;\n2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;\n2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;\n2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;\n2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;\n224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;\n224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;\n224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;\n224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;\n2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;\n2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;\n2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;\n2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;\n2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;\n2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;\n2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;\n2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;\n2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;\n225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;\n225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;\n225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;\n225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;\n225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;\n225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;\n2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;\n2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;\n2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;\n2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;\n2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;\n2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;\n2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;\n2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;\n2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;\n226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;\n226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;\n226C;BETWEEN;Sm;0;ON;;;;;N;;;;;\n226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;Y;;;;;\n226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;\n226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;\n2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;\n2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;\n2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;\n2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;\n2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;\n2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;\n2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;\n2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;\n2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;\n2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;\n227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;\n227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;\n227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;\n227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;\n2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;\n2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;\n2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;\n2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;\n2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;\n2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;\n2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;\n2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;\n228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;\n228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;\n228C;MULTISET;Sm;0;ON;;;;;Y;;;;;\n228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;\n228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;\n228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;\n2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;\n2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;\n2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;\n2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;\n2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;\n2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;\n2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;\n2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;\n229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;\n229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;\n229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;\n229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;\n229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;\n229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;\n22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;\n22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;\n22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;\n22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;\n22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;\n22A5;UP TACK;Sm;0;ON;;;;;N;;;;;\n22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;\n22A7;MODELS;Sm;0;ON;;;;;Y;;;;;\n22A8;TRUE;Sm;0;ON;;;;;Y;;;;;\n22A9;FORCES;Sm;0;ON;;;;;Y;;;;;\n22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;\n22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;\n22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;\n22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;\n22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;\n22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;\n22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;\n22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;\n22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;\n22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;\n22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;\n22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;\n22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;\n22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;\n22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;\n22BB;XOR;Sm;0;ON;;;;;N;;;;;\n22BC;NAND;Sm;0;ON;;;;;N;;;;;\n22BD;NOR;Sm;0;ON;;;;;N;;;;;\n22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;\n22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;\n22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;\n22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;\n22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;\n22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;\n22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;\n22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;\n22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;\n22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;\n22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;\n22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;\n22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;\n22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;\n22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;\n22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;\n22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;\n22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;\n22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;\n22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;\n22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;\n22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;\n22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;\n22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;\n22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;\n22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;\n22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;\n22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;\n22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;\n22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;\n22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;\n22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;\n22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;\n22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;\n22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;\n22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;\n22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;\n22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;\n22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;\n22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;\n22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;\n22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;\n22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;\n22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;\n22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;\n22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;\n22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;\n22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;\n22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;\n22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;\n22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;\n22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;\n22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;\n22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;\n22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;\n22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;\n22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;\n22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;;\n22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;\n22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;\n22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;\n22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;\n22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;\n22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;;\n2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;\n2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;\n2302;HOUSE;So;0;ON;;;;;N;;;;;\n2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;\n2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;\n2305;PROJECTIVE;So;0;ON;;;;;N;;;;;\n2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;\n2307;WAVY LINE;So;0;ON;;;;;N;;;;;\n2308;LEFT CEILING;Ps;0;ON;;;;;Y;;;;;\n2309;RIGHT CEILING;Pe;0;ON;;;;;Y;;;;;\n230A;LEFT FLOOR;Ps;0;ON;;;;;Y;;;;;\n230B;RIGHT FLOOR;Pe;0;ON;;;;;Y;;;;;\n230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;\n230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;\n230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;\n230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;\n2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;\n2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;\n2312;ARC;So;0;ON;;;;;N;;;;;\n2313;SEGMENT;So;0;ON;;;;;N;;;;;\n2314;SECTOR;So;0;ON;;;;;N;;;;;\n2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;\n2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;\n2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;\n2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;\n2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;\n231A;WATCH;So;0;ON;;;;;N;;;;;\n231B;HOURGLASS;So;0;ON;;;;;N;;;;;\n231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;\n231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;\n231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;\n231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;\n2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;\n2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;\n2322;FROWN;So;0;ON;;;;;N;;;;;\n2323;SMILE;So;0;ON;;;;;N;;;;;\n2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;\n2325;OPTION KEY;So;0;ON;;;;;N;;;;;\n2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;\n2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;\n2328;KEYBOARD;So;0;ON;;;;;N;;;;;\n2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;\n232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;\n232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;\n232C;BENZENE RING;So;0;ON;;;;;N;;;;;\n232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;\n232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;\n232F;SYMMETRY;So;0;ON;;;;;N;;;;;\n2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;\n2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;\n2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;\n2333;SLOPE;So;0;ON;;;;;N;;;;;\n2334;COUNTERBORE;So;0;ON;;;;;N;;;;;\n2335;COUNTERSINK;So;0;ON;;;;;N;;;;;\n2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;\n2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;\n2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;\n2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;\n233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;\n233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;\n233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;\n233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;\n233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;\n233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;\n2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;\n2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;\n2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;\n2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;\n2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;\n2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;\n2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;\n2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;\n2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;\n2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;\n234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;;\n234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;\n234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;\n234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;\n234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;;\n234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;\n2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;\n2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;;\n2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;\n2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;\n2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;\n2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;;\n2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;\n2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;\n2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;\n2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;\n235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;\n235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;\n235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;\n235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;\n235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;\n235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;\n2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;\n2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;;\n2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;\n2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;\n2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;\n2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;\n2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;\n2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;\n2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;\n2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;\n236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;\n236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;\n236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;\n236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;\n236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;\n236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;\n2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;\n2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;\n2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;\n2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;\n2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;\n2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;\n2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;\n2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;\n2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;\n2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;\n237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;\n237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;\n237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;;\n237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;\n237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;\n237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;\n2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;\n2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;\n2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;\n2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;\n2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;\n2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;\n2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;\n2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;\n2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;\n2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;;;;\n238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;;;;\n238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;;;;\n238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;\n238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;\n238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;\n238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;\n2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;\n2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;\n2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;\n2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;\n2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;\n2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;\n2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;\n2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;\n2398;NEXT PAGE;So;0;ON;;;;;N;;;;;\n2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;\n239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;\n239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;\n239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;\n239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;\n239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;\n239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;\n23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;\n23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;\n23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;\n23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;\n23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;\n23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;\n23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;\n23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;\n23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;\n23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;\n23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;\n23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;\n23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;\n23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;\n23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;;\n23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;;\n23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;\n23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;\n23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;;\n23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;;\n23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;\n23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;;\n23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;\n23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;;\n23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;\n23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;\n23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;;\n23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;;\n23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;;\n23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;;\n23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;;\n23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;;\n23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;;\n23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;\n23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;\n23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;\n23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;\n23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;\n23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;;\n23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;\n23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;\n23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;;\n23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;;\n23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;;\n23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;;\n23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;;\n23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;;\n23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;;\n23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;;\n23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;;\n23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;;\n23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;;\n23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;;\n23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;;\n23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;;\n23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;;\n23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;;\n23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;;\n23DA;EARTH GROUND;So;0;ON;;;;;N;;;;;\n23DB;FUSE;So;0;ON;;;;;N;;;;;\n23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;;;;\n23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;;;;\n23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;;;;\n23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;;;;\n23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;;\n23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;;\n23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;;\n23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;;\n23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;;\n23E5;FLATNESS;So;0;ON;;;;;N;;;;;\n23E6;AC CURRENT;So;0;ON;;;;;N;;;;;\n23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;;\n23E8;DECIMAL EXPONENT SYMBOL;So;0;ON;;;;;N;;;;;\n23E9;BLACK RIGHT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;;\n23EA;BLACK LEFT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;;\n23EB;BLACK UP-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;;\n23EC;BLACK DOWN-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;;\n23ED;BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;\n23EE;BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;\n23EF;BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;;\n23F0;ALARM CLOCK;So;0;ON;;;;;N;;;;;\n23F1;STOPWATCH;So;0;ON;;;;;N;;;;;\n23F2;TIMER CLOCK;So;0;ON;;;;;N;;;;;\n23F3;HOURGLASS WITH FLOWING SAND;So;0;ON;;;;;N;;;;;\n23F4;BLACK MEDIUM LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;\n23F5;BLACK MEDIUM RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;\n23F6;BLACK MEDIUM UP-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;\n23F7;BLACK MEDIUM DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;\n23F8;DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;;\n23F9;BLACK SQUARE FOR STOP;So;0;ON;;;;;N;;;;;\n23FA;BLACK CIRCLE FOR RECORD;So;0;ON;;;;;N;;;;;\n23FB;POWER SYMBOL;So;0;ON;;;;;N;;;;;\n23FC;POWER ON-OFF SYMBOL;So;0;ON;;;;;N;;;;;\n23FD;POWER ON SYMBOL;So;0;ON;;;;;N;;;;;\n23FE;POWER SLEEP SYMBOL;So;0;ON;;;;;N;;;;;\n23FF;OBSERVER EYE SYMBOL;So;0;ON;;;;;N;;;;;\n2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;\n2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;\n2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;\n2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;\n2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;\n2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;\n2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;\n2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;\n2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;\n2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;\n240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;\n240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;\n240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;\n240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;\n240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;\n240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;\n2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;\n2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;\n2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;\n2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;\n2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;\n2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;\n2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;\n2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;\n2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;\n2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;\n241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;\n241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;\n241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;\n241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;\n241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;\n241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;\n2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;\n2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;\n2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;\n2423;OPEN BOX;So;0;ON;;;;;N;;;;;\n2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;\n2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;\n2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;\n2427;SYMBOL FOR DELETE SQUARE CHECKER BOARD FORM;So;0;ON;;;;;N;;;;;\n2428;SYMBOL FOR DELETE RECTANGULAR CHECKER BOARD FORM;So;0;ON;;;;;N;;;;;\n2429;SYMBOL FOR DELETE MEDIUM SHADE FORM;So;0;ON;;;;;N;;;;;\n2440;OCR HOOK;So;0;ON;;;;;N;;;;;\n2441;OCR CHAIR;So;0;ON;;;;;N;;;;;\n2442;OCR FORK;So;0;ON;;;;;N;;;;;\n2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;\n2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;\n2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;\n2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;\n2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;\n2448;OCR DASH;So;0;ON;;;;;N;;;;;\n2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;\n244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;\n2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;;\n2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;;\n2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;;\n2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;;\n2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;;\n2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;;\n2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;;\n2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;;\n2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;;\n2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;;\n246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;;\n246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;;\n246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;;\n246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;;\n246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;;\n246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;;\n2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;;\n2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;;\n2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;;\n2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;;\n2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;;\n2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;;\n2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;;\n2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;;\n2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;;\n2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;;\n247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;;\n247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;;\n247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;;\n247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;;\n247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;;\n247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;;\n2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;;\n2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;;\n2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;;\n2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;;\n2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;;\n2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;;\n2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;;\n2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;;\n2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;\n2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;\n248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;\n248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;\n248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;\n248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;\n248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;\n248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;\n2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;\n2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;\n2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;\n2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;\n2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;\n2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;\n2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;\n2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;\n2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;\n2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;\n249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;\n249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;\n249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;\n249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;\n249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;\n249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;\n24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;\n24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;\n24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;\n24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;\n24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;\n24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;\n24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;\n24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;\n24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;\n24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;\n24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;\n24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;\n24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;\n24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;\n24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;\n24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;\n24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;\n24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;\n24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;\n24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;\n24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;\n24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;\n24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;\n24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;\n24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;\n24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;\n24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;\n24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;\n24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;\n24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;\n24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;\n24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;\n24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;\n24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;\n24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;\n24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;\n24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;\n24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;\n24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;\n24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;\n24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;\n24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;\n24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;\n24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;\n24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;\n24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;\n24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;\n24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;\n24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6\n24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7\n24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8\n24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9\n24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA\n24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB\n24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC\n24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD\n24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE\n24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF\n24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0\n24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1\n24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2\n24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3\n24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4\n24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5\n24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6\n24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7\n24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8\n24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9\n24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA\n24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB\n24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC\n24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD\n24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE\n24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF\n24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;;\n24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;;\n24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;;\n24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;;\n24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;;\n24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;;\n24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;;\n24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;;\n24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;;\n24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;;\n24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;;\n24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;;\n24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;;\n24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;;\n24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;;\n24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;;\n24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;;\n24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;;\n24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;;\n24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;;\n24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;;\n24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;;\n2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;\n2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;\n2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;\n2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;\n2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;\n2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;\n2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;\n2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;\n2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;\n2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;\n250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;\n250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;\n250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;\n250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;\n250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;\n250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;\n2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;\n2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;\n2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;\n2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;\n2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;\n2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;\n2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;\n2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;\n2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;\n2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;\n251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;\n251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;\n251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;\n251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;\n251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;\n251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;\n2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;\n2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;\n2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;\n2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;\n2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;\n2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;\n2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;\n2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;\n2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;\n2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;\n252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;\n252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;\n252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;\n252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;\n252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;\n252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;\n2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;\n2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;\n2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;\n2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;\n2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;\n2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;\n2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;\n2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;\n2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;\n2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;\n253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;\n253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;\n253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;\n253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;\n253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;\n253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;\n2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;\n2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;\n2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;\n2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;\n2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;\n2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;\n2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;\n2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;\n2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;\n2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;\n254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;\n254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;\n254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;\n254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;\n254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;\n254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;\n2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;\n2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;\n2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;\n2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;\n2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;\n2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;\n2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;\n2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;\n2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;\n2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;\n255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;\n255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;\n255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;\n255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;\n255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;\n255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;\n2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;\n2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;\n2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;\n2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;\n2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;\n2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;\n2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;\n2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;\n2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;\n2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;\n256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;\n256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;\n256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;\n256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;\n256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;\n256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;\n2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;\n2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;\n2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;\n2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;\n2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;\n2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;\n2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;\n2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;\n2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;\n2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;\n257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;\n257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;\n257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;\n257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;\n257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;\n257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;\n2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;\n2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;\n2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;\n2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;\n2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;\n2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;\n2588;FULL BLOCK;So;0;ON;;;;;N;;;;;\n2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;\n258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;\n258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;\n258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;\n258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;\n258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;\n2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;\n2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;\n2593;DARK SHADE;So;0;ON;;;;;N;;;;;\n2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;;\n2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;;\n2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;;\n2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;\n259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;\n259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;\n259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;\n259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;;\n259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;\n259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;\n25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;\n25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;\n25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;\n25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;\n25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;\n25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;\n25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;\n25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;\n25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;\n25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;\n25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;\n25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;\n25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;\n25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;\n25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;\n25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;\n25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;\n25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;\n25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;\n25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;\n25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;\n25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;\n25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;\n25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;\n25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;\n25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;\n25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;\n25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;\n25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;\n25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;\n25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;\n25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;\n25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;\n25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;\n25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;\n25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;\n25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;\n25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;\n25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;\n25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;\n25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;\n25C9;FISHEYE;So;0;ON;;;;;N;;;;;\n25CA;LOZENGE;So;0;ON;;;;;N;;;;;\n25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;\n25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;\n25CE;BULLSEYE;So;0;ON;;;;;N;;;;;\n25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;\n25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;\n25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;\n25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;\n25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;\n25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;\n25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;\n25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;\n25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;\n25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;\n25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;\n25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;\n25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;\n25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;\n25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;\n25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;\n25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;\n25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;\n25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;\n25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;\n25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;\n25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;\n25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;\n25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;\n25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;\n25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;\n25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;\n25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;\n25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;\n25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;\n25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;\n25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;\n25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;\n25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;\n25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;\n25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;\n25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;\n25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;\n25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;\n25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;\n25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;\n25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;\n25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;\n2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;\n2601;CLOUD;So;0;ON;;;;;N;;;;;\n2602;UMBRELLA;So;0;ON;;;;;N;;;;;\n2603;SNOWMAN;So;0;ON;;;;;N;;;;;\n2604;COMET;So;0;ON;;;;;N;;;;;\n2605;BLACK STAR;So;0;ON;;;;;N;;;;;\n2606;WHITE STAR;So;0;ON;;;;;N;;;;;\n2607;LIGHTNING;So;0;ON;;;;;N;;;;;\n2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;\n2609;SUN;So;0;ON;;;;;N;;;;;\n260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;\n260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;\n260C;CONJUNCTION;So;0;ON;;;;;N;;;;;\n260D;OPPOSITION;So;0;ON;;;;;N;;;;;\n260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;\n260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;\n2610;BALLOT BOX;So;0;ON;;;;;N;;;;;\n2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;\n2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;\n2613;SALTIRE;So;0;ON;;;;;N;;;;;\n2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;;\n2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;;\n2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;\n2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;\n2618;SHAMROCK;So;0;ON;;;;;N;;;;;\n2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;\n261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;\n261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;\n261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;\n261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;\n261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;\n261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;\n2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;\n2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;\n2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;\n2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;\n2624;CADUCEUS;So;0;ON;;;;;N;;;;;\n2625;ANKH;So;0;ON;;;;;N;;;;;\n2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;\n2627;CHI RHO;So;0;ON;;;;;N;;;;;\n2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;\n2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;\n262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;\n262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;\n262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;\n262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;\n262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;\n262F;YIN YANG;So;0;ON;;;;;N;;;;;\n2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;\n2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;\n2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;\n2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;\n2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;\n2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;\n2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;\n2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;\n2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;\n2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;\n263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;\n263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;\n263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;\n263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;\n263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;\n263F;MERCURY;So;0;ON;;;;;N;;;;;\n2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;\n2641;EARTH;So;0;ON;;;;;N;;;;;\n2642;MALE SIGN;So;0;ON;;;;;N;;;;;\n2643;JUPITER;So;0;ON;;;;;N;;;;;\n2644;SATURN;So;0;ON;;;;;N;;;;;\n2645;URANUS;So;0;ON;;;;;N;;;;;\n2646;NEPTUNE;So;0;ON;;;;;N;;;;;\n2647;PLUTO;So;0;ON;;;;;N;;;;;\n2648;ARIES;So;0;ON;;;;;N;;;;;\n2649;TAURUS;So;0;ON;;;;;N;;;;;\n264A;GEMINI;So;0;ON;;;;;N;;;;;\n264B;CANCER;So;0;ON;;;;;N;;;;;\n264C;LEO;So;0;ON;;;;;N;;;;;\n264D;VIRGO;So;0;ON;;;;;N;;;;;\n264E;LIBRA;So;0;ON;;;;;N;;;;;\n264F;SCORPIUS;So;0;ON;;;;;N;;;;;\n2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;\n2651;CAPRICORN;So;0;ON;;;;;N;;;;;\n2652;AQUARIUS;So;0;ON;;;;;N;;;;;\n2653;PISCES;So;0;ON;;;;;N;;;;;\n2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;\n2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;\n2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;\n2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;\n2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;\n2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;\n265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;\n265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;\n265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;\n265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;\n265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;\n265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;\n2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;\n2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;\n2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;\n2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;\n2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;\n2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;\n2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;\n2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;\n2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;\n2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;\n266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;\n266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;\n266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;\n266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;\n266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;\n266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;\n2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;\n2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;\n2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;\n2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;;;;\n2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;;;;\n2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;;;;\n2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;;;;\n2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;;;;\n2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;;;;\n2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;;;;\n267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;;\n267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;\n267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;\n267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;\n267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;;\n267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;;\n2680;DIE FACE-1;So;0;ON;;;;;N;;;;;\n2681;DIE FACE-2;So;0;ON;;;;;N;;;;;\n2682;DIE FACE-3;So;0;ON;;;;;N;;;;;\n2683;DIE FACE-4;So;0;ON;;;;;N;;;;;\n2684;DIE FACE-5;So;0;ON;;;;;N;;;;;\n2685;DIE FACE-6;So;0;ON;;;;;N;;;;;\n2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;;\n2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;;\n2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;;\n2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;;\n268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;;\n268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;;\n268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;;\n268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;;\n268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;;\n268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;;\n2690;WHITE FLAG;So;0;ON;;;;;N;;;;;\n2691;BLACK FLAG;So;0;ON;;;;;N;;;;;\n2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;;\n2693;ANCHOR;So;0;ON;;;;;N;;;;;\n2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;;\n2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;;\n2696;SCALES;So;0;ON;;;;;N;;;;;\n2697;ALEMBIC;So;0;ON;;;;;N;;;;;\n2698;FLOWER;So;0;ON;;;;;N;;;;;\n2699;GEAR;So;0;ON;;;;;N;;;;;\n269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;;\n269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;;\n269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;;\n269D;OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;\n269E;THREE LINES CONVERGING RIGHT;So;0;ON;;;;;N;;;;;\n269F;THREE LINES CONVERGING LEFT;So;0;ON;;;;;N;;;;;\n26A0;WARNING SIGN;So;0;ON;;;;;N;;;;;\n26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;;\n26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;;\n26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;;\n26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;;\n26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;\n26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;\n26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;\n26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;\n26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;\n26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;;\n26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;;\n26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;;\n26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;;\n26B0;COFFIN;So;0;ON;;;;;N;;;;;\n26B1;FUNERAL URN;So;0;ON;;;;;N;;;;;\n26B2;NEUTER;So;0;ON;;;;;N;;;;;\n26B3;CERES;So;0;ON;;;;;N;;;;;\n26B4;PALLAS;So;0;ON;;;;;N;;;;;\n26B5;JUNO;So;0;ON;;;;;N;;;;;\n26B6;VESTA;So;0;ON;;;;;N;;;;;\n26B7;CHIRON;So;0;ON;;;;;N;;;;;\n26B8;BLACK MOON LILITH;So;0;ON;;;;;N;;;;;\n26B9;SEXTILE;So;0;ON;;;;;N;;;;;\n26BA;SEMISEXTILE;So;0;ON;;;;;N;;;;;\n26BB;QUINCUNX;So;0;ON;;;;;N;;;;;\n26BC;SESQUIQUADRATE;So;0;ON;;;;;N;;;;;\n26BD;SOCCER BALL;So;0;ON;;;;;N;;;;;\n26BE;BASEBALL;So;0;ON;;;;;N;;;;;\n26BF;SQUARED KEY;So;0;ON;;;;;N;;;;;\n26C0;WHITE DRAUGHTS MAN;So;0;ON;;;;;N;;;;;\n26C1;WHITE DRAUGHTS KING;So;0;ON;;;;;N;;;;;\n26C2;BLACK DRAUGHTS MAN;So;0;ON;;;;;N;;;;;\n26C3;BLACK DRAUGHTS KING;So;0;ON;;;;;N;;;;;\n26C4;SNOWMAN WITHOUT SNOW;So;0;ON;;;;;N;;;;;\n26C5;SUN BEHIND CLOUD;So;0;ON;;;;;N;;;;;\n26C6;RAIN;So;0;ON;;;;;N;;;;;\n26C7;BLACK SNOWMAN;So;0;ON;;;;;N;;;;;\n26C8;THUNDER CLOUD AND RAIN;So;0;ON;;;;;N;;;;;\n26C9;TURNED WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;\n26CA;TURNED BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;\n26CB;WHITE DIAMOND IN SQUARE;So;0;ON;;;;;N;;;;;\n26CC;CROSSING LANES;So;0;ON;;;;;N;;;;;\n26CD;DISABLED CAR;So;0;ON;;;;;N;;;;;\n26CE;OPHIUCHUS;So;0;ON;;;;;N;;;;;\n26CF;PICK;So;0;ON;;;;;N;;;;;\n26D0;CAR SLIDING;So;0;ON;;;;;N;;;;;\n26D1;HELMET WITH WHITE CROSS;So;0;ON;;;;;N;;;;;\n26D2;CIRCLED CROSSING LANES;So;0;ON;;;;;N;;;;;\n26D3;CHAINS;So;0;ON;;;;;N;;;;;\n26D4;NO ENTRY;So;0;ON;;;;;N;;;;;\n26D5;ALTERNATE ONE-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;;\n26D6;BLACK TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;;\n26D7;WHITE TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;;\n26D8;BLACK LEFT LANE MERGE;So;0;ON;;;;;N;;;;;\n26D9;WHITE LEFT LANE MERGE;So;0;ON;;;;;N;;;;;\n26DA;DRIVE SLOW SIGN;So;0;ON;;;;;N;;;;;\n26DB;HEAVY WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;\n26DC;LEFT CLOSED ENTRY;So;0;ON;;;;;N;;;;;\n26DD;SQUARED SALTIRE;So;0;ON;;;;;N;;;;;\n26DE;FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE;So;0;ON;;;;;N;;;;;\n26DF;BLACK TRUCK;So;0;ON;;;;;N;;;;;\n26E0;RESTRICTED LEFT ENTRY-1;So;0;ON;;;;;N;;;;;\n26E1;RESTRICTED LEFT ENTRY-2;So;0;ON;;;;;N;;;;;\n26E2;ASTRONOMICAL SYMBOL FOR URANUS;So;0;ON;;;;;N;;;;;\n26E3;HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE;So;0;ON;;;;;N;;;;;\n26E4;PENTAGRAM;So;0;ON;;;;;N;;;;;\n26E5;RIGHT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;;\n26E6;LEFT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;;\n26E7;INVERTED PENTAGRAM;So;0;ON;;;;;N;;;;;\n26E8;BLACK CROSS ON SHIELD;So;0;ON;;;;;N;;;;;\n26E9;SHINTO SHRINE;So;0;ON;;;;;N;;;;;\n26EA;CHURCH;So;0;ON;;;;;N;;;;;\n26EB;CASTLE;So;0;ON;;;;;N;;;;;\n26EC;HISTORIC SITE;So;0;ON;;;;;N;;;;;\n26ED;GEAR WITHOUT HUB;So;0;ON;;;;;N;;;;;\n26EE;GEAR WITH HANDLES;So;0;ON;;;;;N;;;;;\n26EF;MAP SYMBOL FOR LIGHTHOUSE;So;0;ON;;;;;N;;;;;\n26F0;MOUNTAIN;So;0;ON;;;;;N;;;;;\n26F1;UMBRELLA ON GROUND;So;0;ON;;;;;N;;;;;\n26F2;FOUNTAIN;So;0;ON;;;;;N;;;;;\n26F3;FLAG IN HOLE;So;0;ON;;;;;N;;;;;\n26F4;FERRY;So;0;ON;;;;;N;;;;;\n26F5;SAILBOAT;So;0;ON;;;;;N;;;;;\n26F6;SQUARE FOUR CORNERS;So;0;ON;;;;;N;;;;;\n26F7;SKIER;So;0;ON;;;;;N;;;;;\n26F8;ICE SKATE;So;0;ON;;;;;N;;;;;\n26F9;PERSON WITH BALL;So;0;ON;;;;;N;;;;;\n26FA;TENT;So;0;ON;;;;;N;;;;;\n26FB;JAPANESE BANK SYMBOL;So;0;ON;;;;;N;;;;;\n26FC;HEADSTONE GRAVEYARD SYMBOL;So;0;ON;;;;;N;;;;;\n26FD;FUEL PUMP;So;0;ON;;;;;N;;;;;\n26FE;CUP ON BLACK SQUARE;So;0;ON;;;;;N;;;;;\n26FF;WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE;So;0;ON;;;;;N;;;;;\n2700;BLACK SAFETY SCISSORS;So;0;ON;;;;;N;;;;;\n2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;\n2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;\n2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;\n2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;\n2705;WHITE HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;\n2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;\n2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;\n2708;AIRPLANE;So;0;ON;;;;;N;;;;;\n2709;ENVELOPE;So;0;ON;;;;;N;;;;;\n270A;RAISED FIST;So;0;ON;;;;;N;;;;;\n270B;RAISED HAND;So;0;ON;;;;;N;;;;;\n270C;VICTORY HAND;So;0;ON;;;;;N;;;;;\n270D;WRITING HAND;So;0;ON;;;;;N;;;;;\n270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;\n270F;PENCIL;So;0;ON;;;;;N;;;;;\n2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;\n2711;WHITE NIB;So;0;ON;;;;;N;;;;;\n2712;BLACK NIB;So;0;ON;;;;;N;;;;;\n2713;CHECK MARK;So;0;ON;;;;;N;;;;;\n2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;\n2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;\n2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;\n2717;BALLOT X;So;0;ON;;;;;N;;;;;\n2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;\n2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;\n271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;\n271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;\n271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;\n271D;LATIN CROSS;So;0;ON;;;;;N;;;;;\n271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;\n271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;\n2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;\n2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;\n2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;\n2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;\n2728;SPARKLES;So;0;ON;;;;;N;;;;;\n2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;\n272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;\n272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;\n272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;\n272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;\n272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;\n272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;\n2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;\n2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;\n2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;\n2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;\n2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;\n2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;\n2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;\n273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;\n273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;\n273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;\n2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;\n2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;\n2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;\n2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;\n2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;\n2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;\n2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;\n2747;SPARKLE;So;0;ON;;;;;N;;;;;\n2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;\n2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;\n274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;\n274C;CROSS MARK;So;0;ON;;;;;N;;;;;\n274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n274E;NEGATIVE SQUARED CROSS MARK;So;0;ON;;;;;N;;;;;\n274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;\n2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;\n2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;\n2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;\n2753;BLACK QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n2754;WHITE QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n2755;WHITE EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;\n2757;HEAVY EXCLAMATION MARK SYMBOL;So;0;ON;;;;;N;;;;;\n2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;\n2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;\n275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;\n275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n275F;HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n2760;HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;\n2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;\n2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;\n2766;FLORAL HEART;So;0;ON;;;;;N;;;;;\n2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;\n2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;\n2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;\n276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;\n276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;\n276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;\n276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;\n276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;;\n276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;;\n2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;\n2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;\n2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;\n2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;\n2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;\n2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;\n2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;\n2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;\n2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;\n2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;\n277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;\n277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;\n277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;\n277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;\n277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;\n277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;\n2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;\n2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;\n2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;\n2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;\n2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;\n2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;\n2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;\n2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;\n2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;\n2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;\n278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;\n278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;\n278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;\n278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;\n278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;\n278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;\n2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;\n2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;\n2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;\n2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;\n2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;\n2795;HEAVY PLUS SIGN;So;0;ON;;;;;N;;;;;\n2796;HEAVY MINUS SIGN;So;0;ON;;;;;N;;;;;\n2797;HEAVY DIVISION SIGN;So;0;ON;;;;;N;;;;;\n2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;\n2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;\n279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;\n279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;\n279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;\n279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;\n279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;\n279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;\n27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;\n27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;\n27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;\n27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;\n27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;\n27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;\n27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;\n27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;\n27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;\n27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;\n27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;\n27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;\n27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;\n27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;\n27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;\n27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;\n27B0;CURLY LOOP;So;0;ON;;;;;N;;;;;\n27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;\n27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;\n27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;\n27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;\n27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;\n27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;\n27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;\n27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;\n27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;\n27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;\n27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;\n27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;\n27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;\n27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;\n27BF;DOUBLE CURLY LOOP;So;0;ON;;;;;N;;;;;\n27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;;\n27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;;\n27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;;\n27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;;\n27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;;\n27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;;\n27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;;\n27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;;\n27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;;\n27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;;\n27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;\n27CB;MATHEMATICAL RISING DIAGONAL;Sm;0;ON;;;;;Y;;;;;\n27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;;\n27CD;MATHEMATICAL FALLING DIAGONAL;Sm;0;ON;;;;;Y;;;;;\n27CE;SQUARED LOGICAL AND;Sm;0;ON;;;;;N;;;;;\n27CF;SQUARED LOGICAL OR;Sm;0;ON;;;;;N;;;;;\n27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;;\n27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;;\n27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;;\n27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;\n27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;\n27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;\n27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;\n27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;;\n27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;;\n27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;;\n27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;;\n27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;;\n27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;;\n27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;;\n27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;;\n27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;\n27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;;\n27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;;\n27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;\n27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;\n27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;\n27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;\n27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;;\n27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;;\n27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;\n27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;\n27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;\n27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;\n27EC;MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;\n27ED;MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;\n27EE;MATHEMATICAL LEFT FLATTENED PARENTHESIS;Ps;0;ON;;;;;Y;;;;;\n27EF;MATHEMATICAL RIGHT FLATTENED PARENTHESIS;Pe;0;ON;;;;;Y;;;;;\n27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;\n27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;\n27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;\n27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;\n27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;\n27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;\n27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;\n27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;\n27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;\n27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;\n27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;\n27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;\n27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;\n27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;\n2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;;\n2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;;\n2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;;\n2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;;\n2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;;\n2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;;\n2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;;\n2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;;\n2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;;\n2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;;\n280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;;\n280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;;\n280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;;\n280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;;\n280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;;\n280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;;\n2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;;\n2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;;\n2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;;\n2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;;\n2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;;\n2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;;\n2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;;\n2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;;\n2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;;\n2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;;\n281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;;\n281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;;\n281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;;\n281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;;\n281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;;\n281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;;\n2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;;\n2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;;\n2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;;\n2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;;\n2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;;\n2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;;\n2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;;\n2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;;\n2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;;\n2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;;\n282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;;\n282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;;\n282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;;\n282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;;\n282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;;\n282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;;\n2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;;\n2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;;\n2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;;\n2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;;\n2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;;\n2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;;\n2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;;\n2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;;\n2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;;\n2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;;\n283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;;\n283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;;\n283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;;\n283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;;\n283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;;\n283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;;\n2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;;\n2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;;\n2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;;\n2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;;\n2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;;\n2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;;\n2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;;\n2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;;\n2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;;\n2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;;\n284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;;\n284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;;\n284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;;\n284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;;\n284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;;\n284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;;\n2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;;\n2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;;\n2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;;\n2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;;\n2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;;\n2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;;\n2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;;\n2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;;\n2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;;\n2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;;\n285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;;\n285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;;\n285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;;\n285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;;\n285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;;\n285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;;\n2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;;\n2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;;\n2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;;\n2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;;\n2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;;\n2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;;\n2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;;\n2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;;\n2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;;\n2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;;\n286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;;\n286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;;\n286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;;\n286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;;\n286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;;\n286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;;\n2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;;\n2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;;\n2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;;\n2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;;\n2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;;\n2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;;\n2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;;\n2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;;\n2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;;\n2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;;\n287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;;\n287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;;\n287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;;\n287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;;\n287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;;\n287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;;\n2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;;\n2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;;\n2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;;\n2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;;\n2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;;\n2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;;\n2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;;\n2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;;\n2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;;\n2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;;\n288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;;\n288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;;\n288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;;\n288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;;\n288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;;\n288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;;\n2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;;\n2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;;\n2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;;\n2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;;\n2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;;\n2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;;\n2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;;\n2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;;\n2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;;\n2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;;\n289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;;\n289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;;\n289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;;\n289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;;\n289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;;\n289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;;\n28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;;\n28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;;\n28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;;\n28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;;\n28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;;\n28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;;\n28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;;\n28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;;\n28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;;\n28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;;\n28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;;\n28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;;\n28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;;\n28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;;\n28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;;\n28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;;\n28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;;\n28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;;\n28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;;\n28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;;\n28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;;\n28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;;\n28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;;\n28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;;\n28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;;\n28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;;\n28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;;\n28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;;\n28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;;\n28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;;\n28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;;\n28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;;\n28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;;\n28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;;\n28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;;\n28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;;\n28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;;\n28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;;\n28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;;\n28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;;\n28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;;\n28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;;\n28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;;\n28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;;\n28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;;\n28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;;\n28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;;\n28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;;\n28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;;\n28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;;\n28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;;\n28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;;\n28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;;\n28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;;\n28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;;\n28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;;\n28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;;\n28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;;\n28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;;\n28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;;\n28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;;\n28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;;\n28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;;\n28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;;\n28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;;\n28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;;\n28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;;\n28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;;\n28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;;\n28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;;\n28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;;\n28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;;\n28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;;\n28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;;\n28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;;\n28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;;\n28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;;\n28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;;\n28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;;\n28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;;\n28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;;\n28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;;\n28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;;\n28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;;\n28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;;\n28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;;\n28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;;\n28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;;\n28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;;\n28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;;\n28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;;\n28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;;\n28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;;\n28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;;\n28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;;\n28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;;\n2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;\n2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;\n2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;\n2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;\n2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;\n290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;\n290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;\n290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;\n290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;\n290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;\n290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;\n2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;\n2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;\n2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;\n2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;\n2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;\n2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;\n291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;\n291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;\n291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;\n291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;\n291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;\n291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;\n2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;\n2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;\n2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;\n2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;\n2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;\n2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;\n2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;\n2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;\n2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;\n2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;\n292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;\n292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;;\n292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;;\n292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;\n292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;\n292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;\n2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;\n2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;\n2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;\n2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;;\n2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;;\n2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;;\n2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;;\n2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;;\n2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;\n2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;\n293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;\n293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;\n293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;;\n293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;;\n293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;\n293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;\n2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;\n2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;\n2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;\n2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;\n2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;\n2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;\n2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;\n294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;\n294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;\n294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;\n294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;\n294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;\n294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;\n2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;\n2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;\n2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;\n2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;\n2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;\n2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;\n2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;\n2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;\n2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;\n2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;\n295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;\n295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;\n295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;\n295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;\n295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;\n295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;\n2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;\n2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;\n2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;\n2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;\n2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;\n2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;\n2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;\n2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;\n2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;\n2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;\n296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;\n296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;\n296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;\n296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;\n296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;\n296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;\n2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;;\n2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;\n2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;\n2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;\n2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;;\n2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;;\n297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;;\n297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;;\n297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;;\n297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;;\n2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;;\n2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;;\n2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;;\n2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;;\n2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;;\n2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;\n2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;\n2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;;\n2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;;\n2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;;\n298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;;\n298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;;\n298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;;\n298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;;\n298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;;\n298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;;\n2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;;\n2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;;\n2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;;\n2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;\n2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;\n2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;\n2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;\n2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;\n2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;\n2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;;\n299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;;\n299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;\n299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;;\n299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;;\n299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;;\n299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;;\n29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;\n29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;N;;;;;\n29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;;\n29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;;\n29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;\n29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;\n29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;\n29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;;\n29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;;\n29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;;\n29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;;\n29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;;\n29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;;\n29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;;\n29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;;\n29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;;\n29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;;\n29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;;\n29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;\n29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;\n29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;\n29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;;\n29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;;\n29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;;\n29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;\n29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;;\n29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;;\n29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;;\n29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;\n29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;;\n29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;;\n29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;;\n29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;;\n29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;\n29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;\n29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;\n29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;\n29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;\n29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;;\n29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;\n29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;;\n29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;;\n29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;\n29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;\n29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;;\n29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;;\n29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;;\n29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;;\n29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;\n29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;\n29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;\n29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;;\n29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;\n29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;\n29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;;\n29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;;\n29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;\n29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;\n29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;\n29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;\n29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;;\n29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;;\n29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;;\n29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;;\n29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;;\n29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;;\n29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;;\n29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;\n29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;\n29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;\n29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;;\n29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;;\n29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;\n29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;\n29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;\n29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;;\n29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;\n29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;\n29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;;\n29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;;\n29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;;\n29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;\n29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;;\n29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;;\n29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;;\n29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;\n29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;\n29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;\n29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;;\n29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;\n29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;;\n29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;;\n29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;\n29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;\n29FE;TINY;Sm;0;ON;;;;;N;;;;;\n29FF;MINY;Sm;0;ON;;;;;N;;;;;\n2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;\n2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;;\n2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;\n2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;;\n2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;;\n2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;;\n2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;;\n2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;;\n2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;;\n2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;\n2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;;\n2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;;\n2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON;<compat> 222B 222B 222B 222B;;;;Y;;;;;\n2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;;\n2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;;\n2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;;\n2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;;\n2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;;\n2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;\n2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;\n2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;;\n2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;;\n2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;;\n2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;;\n2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;;\n2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;;\n2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;;\n2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;\n2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;\n2A1D;JOIN;Sm;0;ON;;;;;N;;;;;\n2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;;\n2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;;\n2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;;\n2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;;\n2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;\n2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;;\n2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;\n2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;\n2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;;\n2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;;\n2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;;\n2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;;\n2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;\n2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;;\n2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;\n2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;\n2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;\n2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;;\n2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;\n2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;\n2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;;\n2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;\n2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;\n2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;\n2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;;\n2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;;\n2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;\n2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;\n2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;\n2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;\n2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;\n2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;\n2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;;\n2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;;\n2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;;\n2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;;\n2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;\n2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;\n2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;;\n2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;;\n2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;\n2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;;\n2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;\n2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;;\n2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;;\n2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;;\n2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;;\n2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;;\n2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;;\n2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;;\n2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;\n2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;\n2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;\n2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;;\n2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;;\n2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;;\n2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;;\n2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;;\n2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;;\n2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;;\n2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;\n2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;\n2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;\n2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;\n2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;\n2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;\n2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;\n2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;\n2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;\n2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;\n2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;\n2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;\n2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;\n2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;\n2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;\n2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;\n2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;;\n2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;\n2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;;\n2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;;\n2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;;\n2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;;\n2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;\n2A74;DOUBLE COLON EQUAL;Sm;0;ON;<compat> 003A 003A 003D;;;;Y;;;;;\n2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D;;;;N;;;;;\n2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D 003D;;;;N;;;;;\n2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;;\n2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;;\n2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;\n2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;\n2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;\n2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;\n2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;\n2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;\n2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;\n2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;\n2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;;\n2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;;\n2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;\n2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;\n2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;\n2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;\n2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;\n2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;\n2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;\n2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;\n2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;\n2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;\n2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;\n2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;\n2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;\n2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;\n2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;\n2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;\n2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;\n2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;\n2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;\n2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;\n2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;\n2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;\n2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;\n2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;\n2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;\n2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;\n2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;\n2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;\n2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;\n2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;;\n2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;;\n2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;\n2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;\n2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;\n2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;\n2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;;\n2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;;\n2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;;\n2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;\n2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;\n2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;\n2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;\n2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;;\n2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;;\n2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;;\n2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;;\n2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;\n2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;\n2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;\n2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;\n2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;\n2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;\n2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;\n2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;\n2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;\n2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;\n2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;\n2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;\n2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;;\n2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;;\n2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;\n2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;\n2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;\n2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;\n2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;;\n2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;;\n2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;;\n2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;;\n2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;;\n2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;;;;\n2ADD;NONFORKING;Sm;0;ON;;;;;N;;;;;\n2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;;\n2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;\n2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;;\n2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;;\n2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;\n2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;\n2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;\n2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;\n2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;;\n2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;;\n2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;\n2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;\n2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;;\n2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;;\n2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;\n2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;\n2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;;\n2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;\n2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;\n2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;\n2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;\n2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;\n2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;;\n2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;\n2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;;\n2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;\n2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;\n2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;\n2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;;\n2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;;\n2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;\n2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;\n2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;\n2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;\n2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;\n2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;\n2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;\n2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;;\n2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;\n2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;\n2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;\n2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;\n2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;\n2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;\n2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;\n2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;;\n2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;;\n2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;\n2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;\n2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;\n2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;\n2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;\n2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;\n2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;\n2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;\n2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;\n2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;\n2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;\n2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;\n2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;;\n2B1B;BLACK LARGE SQUARE;So;0;ON;;;;;N;;;;;\n2B1C;WHITE LARGE SQUARE;So;0;ON;;;;;N;;;;;\n2B1D;BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;\n2B1E;WHITE VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;\n2B1F;BLACK PENTAGON;So;0;ON;;;;;N;;;;;\n2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;;\n2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;;\n2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;;\n2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;;\n2B24;BLACK LARGE CIRCLE;So;0;ON;;;;;N;;;;;\n2B25;BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;\n2B26;WHITE MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;\n2B27;BLACK MEDIUM LOZENGE;So;0;ON;;;;;N;;;;;\n2B28;WHITE MEDIUM LOZENGE;So;0;ON;;;;;N;;;;;\n2B29;BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;\n2B2A;BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;;\n2B2B;WHITE SMALL LOZENGE;So;0;ON;;;;;N;;;;;\n2B2C;BLACK HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;;\n2B2D;WHITE HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;;\n2B2E;BLACK VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;;\n2B2F;WHITE VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;;\n2B30;LEFT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;\n2B31;THREE LEFTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;\n2B32;LEFT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;\n2B33;LONG LEFTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;\n2B34;LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2B35;LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2B36;LEFTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;\n2B37;LEFTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;\n2B38;LEFTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;\n2B39;LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2B3A;LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2B3B;LEFTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;\n2B3C;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2B3D;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;\n2B3E;LEFTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;\n2B3F;WAVE ARROW POINTING DIRECTLY LEFT;Sm;0;ON;;;;;N;;;;;\n2B40;EQUALS SIGN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n2B41;REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n2B42;LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;\n2B43;RIGHTWARDS ARROW THROUGH GREATER-THAN;Sm;0;ON;;;;;N;;;;;\n2B44;RIGHTWARDS ARROW THROUGH SUPERSET;Sm;0;ON;;;;;N;;;;;\n2B45;LEFTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;;\n2B46;RIGHTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;;\n2B47;REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n2B48;RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;\n2B49;TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n2B4A;LEFTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;\n2B4B;LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;\n2B4C;RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;\n2B4D;DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW;So;0;ON;;;;;N;;;;;\n2B4E;SHORT SLANTED NORTH ARROW;So;0;ON;;;;;N;;;;;\n2B4F;SHORT BACKSLANTED SOUTH ARROW;So;0;ON;;;;;N;;;;;\n2B50;WHITE MEDIUM STAR;So;0;ON;;;;;N;;;;;\n2B51;BLACK SMALL STAR;So;0;ON;;;;;N;;;;;\n2B52;WHITE SMALL STAR;So;0;ON;;;;;N;;;;;\n2B53;BLACK RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;;\n2B54;WHITE RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;;\n2B55;HEAVY LARGE CIRCLE;So;0;ON;;;;;N;;;;;\n2B56;HEAVY OVAL WITH OVAL INSIDE;So;0;ON;;;;;N;;;;;\n2B57;HEAVY CIRCLE WITH CIRCLE INSIDE;So;0;ON;;;;;N;;;;;\n2B58;HEAVY CIRCLE;So;0;ON;;;;;N;;;;;\n2B59;HEAVY CIRCLED SALTIRE;So;0;ON;;;;;N;;;;;\n2B5A;SLANTED NORTH ARROW WITH HOOKED HEAD;So;0;ON;;;;;N;;;;;\n2B5B;BACKSLANTED SOUTH ARROW WITH HOOKED TAIL;So;0;ON;;;;;N;;;;;\n2B5C;SLANTED NORTH ARROW WITH HORIZONTAL TAIL;So;0;ON;;;;;N;;;;;\n2B5D;BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL;So;0;ON;;;;;N;;;;;\n2B5E;BENT ARROW POINTING DOWNWARDS THEN NORTH EAST;So;0;ON;;;;;N;;;;;\n2B5F;SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST;So;0;ON;;;;;N;;;;;\n2B60;LEFTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B61;UPWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B62;RIGHTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B63;DOWNWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B64;LEFT RIGHT TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B65;UP DOWN TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B66;NORTH WEST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B67;NORTH EAST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B68;SOUTH EAST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B69;SOUTH WEST TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B6A;LEFTWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;;\n2B6B;UPWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;;\n2B6C;RIGHTWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;;\n2B6D;DOWNWARDS TRIANGLE-HEADED DASHED ARROW;So;0;ON;;;;;N;;;;;\n2B6E;CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;\n2B6F;ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;\n2B70;LEFTWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;\n2B71;UPWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;\n2B72;RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;\n2B73;DOWNWARDS TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;\n2B76;NORTH WEST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;\n2B77;NORTH EAST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;\n2B78;SOUTH EAST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;\n2B79;SOUTH WEST TRIANGLE-HEADED ARROW TO BAR;So;0;ON;;;;;N;;;;;\n2B7A;LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;;\n2B7B;UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;;\n2B7C;RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;;\n2B7D;DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE;So;0;ON;;;;;N;;;;;\n2B7E;HORIZONTAL TAB KEY;So;0;ON;;;;;N;;;;;\n2B7F;VERTICAL TAB KEY;So;0;ON;;;;;N;;;;;\n2B80;LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B81;UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B82;RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B83;DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW;So;0;ON;;;;;N;;;;;\n2B84;LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;;\n2B85;UPWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;;\n2B86;RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;;\n2B87;DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS;So;0;ON;;;;;N;;;;;\n2B88;LEFTWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;;\n2B89;UPWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;;\n2B8A;RIGHTWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;;\n2B8B;DOWNWARDS BLACK CIRCLED WHITE ARROW;So;0;ON;;;;;N;;;;;\n2B8C;ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW;So;0;ON;;;;;N;;;;;\n2B8D;ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW;So;0;ON;;;;;N;;;;;\n2B8E;ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW;So;0;ON;;;;;N;;;;;\n2B8F;ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW;So;0;ON;;;;;N;;;;;\n2B90;RETURN LEFT;So;0;ON;;;;;N;;;;;\n2B91;RETURN RIGHT;So;0;ON;;;;;N;;;;;\n2B92;NEWLINE LEFT;So;0;ON;;;;;N;;;;;\n2B93;NEWLINE RIGHT;So;0;ON;;;;;N;;;;;\n2B94;FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE;So;0;ON;;;;;N;;;;;\n2B95;RIGHTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;\n2B96;EQUALS SIGN WITH INFINITY ABOVE;So;0;ON;;;;;N;;;;;\n2B97;SYMBOL FOR TYPE A ELECTRONICS;So;0;ON;;;;;N;;;;;\n2B98;THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n2B99;THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n2B9A;THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n2B9B;THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n2B9C;BLACK LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n2B9D;BLACK UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n2B9E;BLACK RIGHTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n2B9F;BLACK DOWNWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n2BA0;DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS;So;0;ON;;;;;N;;;;;\n2BA1;DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS;So;0;ON;;;;;N;;;;;\n2BA2;UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS;So;0;ON;;;;;N;;;;;\n2BA3;UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS;So;0;ON;;;;;N;;;;;\n2BA4;LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS;So;0;ON;;;;;N;;;;;\n2BA5;RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS;So;0;ON;;;;;N;;;;;\n2BA6;LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS;So;0;ON;;;;;N;;;;;\n2BA7;RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS;So;0;ON;;;;;N;;;;;\n2BA8;BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW;So;0;ON;;;;;N;;;;;\n2BA9;BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;;\n2BAA;BLACK CURVED UPWARDS AND LEFTWARDS ARROW;So;0;ON;;;;;N;;;;;\n2BAB;BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;;\n2BAC;BLACK CURVED LEFTWARDS AND UPWARDS ARROW;So;0;ON;;;;;N;;;;;\n2BAD;BLACK CURVED RIGHTWARDS AND UPWARDS ARROW;So;0;ON;;;;;N;;;;;\n2BAE;BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW;So;0;ON;;;;;N;;;;;\n2BAF;BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW;So;0;ON;;;;;N;;;;;\n2BB0;RIBBON ARROW DOWN LEFT;So;0;ON;;;;;N;;;;;\n2BB1;RIBBON ARROW DOWN RIGHT;So;0;ON;;;;;N;;;;;\n2BB2;RIBBON ARROW UP LEFT;So;0;ON;;;;;N;;;;;\n2BB3;RIBBON ARROW UP RIGHT;So;0;ON;;;;;N;;;;;\n2BB4;RIBBON ARROW LEFT UP;So;0;ON;;;;;N;;;;;\n2BB5;RIBBON ARROW RIGHT UP;So;0;ON;;;;;N;;;;;\n2BB6;RIBBON ARROW LEFT DOWN;So;0;ON;;;;;N;;;;;\n2BB7;RIBBON ARROW RIGHT DOWN;So;0;ON;;;;;N;;;;;\n2BB8;UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;\n2BB9;UP ARROWHEAD IN A RECTANGLE BOX;So;0;ON;;;;;N;;;;;\n2BBA;OVERLAPPING WHITE SQUARES;So;0;ON;;;;;N;;;;;\n2BBB;OVERLAPPING WHITE AND BLACK SQUARES;So;0;ON;;;;;N;;;;;\n2BBC;OVERLAPPING BLACK SQUARES;So;0;ON;;;;;N;;;;;\n2BBD;BALLOT BOX WITH LIGHT X;So;0;ON;;;;;N;;;;;\n2BBE;CIRCLED X;So;0;ON;;;;;N;;;;;\n2BBF;CIRCLED BOLD X;So;0;ON;;;;;N;;;;;\n2BC0;BLACK SQUARE CENTRED;So;0;ON;;;;;N;;;;;\n2BC1;BLACK DIAMOND CENTRED;So;0;ON;;;;;N;;;;;\n2BC2;TURNED BLACK PENTAGON;So;0;ON;;;;;N;;;;;\n2BC3;HORIZONTAL BLACK OCTAGON;So;0;ON;;;;;N;;;;;\n2BC4;BLACK OCTAGON;So;0;ON;;;;;N;;;;;\n2BC5;BLACK MEDIUM UP-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;;\n2BC6;BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;;\n2BC7;BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;;\n2BC8;BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED;So;0;ON;;;;;N;;;;;\n2BC9;NEPTUNE FORM TWO;So;0;ON;;;;;N;;;;;\n2BCA;TOP HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n2BCB;BOTTOM HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n2BCC;LIGHT FOUR POINTED BLACK CUSP;So;0;ON;;;;;N;;;;;\n2BCD;ROTATED LIGHT FOUR POINTED BLACK CUSP;So;0;ON;;;;;N;;;;;\n2BCE;WHITE FOUR POINTED CUSP;So;0;ON;;;;;N;;;;;\n2BCF;ROTATED WHITE FOUR POINTED CUSP;So;0;ON;;;;;N;;;;;\n2BD0;SQUARE POSITION INDICATOR;So;0;ON;;;;;N;;;;;\n2BD1;UNCERTAINTY SIGN;So;0;ON;;;;;N;;;;;\n2BD2;GROUP MARK;So;0;ON;;;;;N;;;;;\n2BD3;PLUTO FORM TWO;So;0;ON;;;;;N;;;;;\n2BD4;PLUTO FORM THREE;So;0;ON;;;;;N;;;;;\n2BD5;PLUTO FORM FOUR;So;0;ON;;;;;N;;;;;\n2BD6;PLUTO FORM FIVE;So;0;ON;;;;;N;;;;;\n2BD7;TRANSPLUTO;So;0;ON;;;;;N;;;;;\n2BD8;PROSERPINA;So;0;ON;;;;;N;;;;;\n2BD9;ASTRAEA;So;0;ON;;;;;N;;;;;\n2BDA;HYGIEA;So;0;ON;;;;;N;;;;;\n2BDB;PHOLUS;So;0;ON;;;;;N;;;;;\n2BDC;NESSUS;So;0;ON;;;;;N;;;;;\n2BDD;WHITE MOON SELENA;So;0;ON;;;;;N;;;;;\n2BDE;BLACK DIAMOND ON CROSS;So;0;ON;;;;;N;;;;;\n2BDF;TRUE LIGHT MOON ARTA;So;0;ON;;;;;N;;;;;\n2BE0;CUPIDO;So;0;ON;;;;;N;;;;;\n2BE1;HADES;So;0;ON;;;;;N;;;;;\n2BE2;ZEUS;So;0;ON;;;;;N;;;;;\n2BE3;KRONOS;So;0;ON;;;;;N;;;;;\n2BE4;APOLLON;So;0;ON;;;;;N;;;;;\n2BE5;ADMETOS;So;0;ON;;;;;N;;;;;\n2BE6;VULCANUS;So;0;ON;;;;;N;;;;;\n2BE7;POSEIDON;So;0;ON;;;;;N;;;;;\n2BE8;LEFT HALF BLACK STAR;So;0;ON;;;;;N;;;;;\n2BE9;RIGHT HALF BLACK STAR;So;0;ON;;;;;N;;;;;\n2BEA;STAR WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;\n2BEB;STAR WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;\n2BEC;LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;\n2BED;UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;\n2BEE;RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;\n2BEF;DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;\n2BF0;ERIS FORM ONE;So;0;ON;;;;;N;;;;;\n2BF1;ERIS FORM TWO;So;0;ON;;;;;N;;;;;\n2BF2;SEDNA;So;0;ON;;;;;N;;;;;\n2BF3;RUSSIAN ASTROLOGICAL SYMBOL VIGINTILE;So;0;ON;;;;;N;;;;;\n2BF4;RUSSIAN ASTROLOGICAL SYMBOL NOVILE;So;0;ON;;;;;N;;;;;\n2BF5;RUSSIAN ASTROLOGICAL SYMBOL QUINTILE;So;0;ON;;;;;N;;;;;\n2BF6;RUSSIAN ASTROLOGICAL SYMBOL BINOVILE;So;0;ON;;;;;N;;;;;\n2BF7;RUSSIAN ASTROLOGICAL SYMBOL SENTAGON;So;0;ON;;;;;N;;;;;\n2BF8;RUSSIAN ASTROLOGICAL SYMBOL TREDECILE;So;0;ON;;;;;N;;;;;\n2BF9;EQUALS SIGN WITH INFINITY BELOW;So;0;ON;;;;;N;;;;;\n2BFA;UNITED SYMBOL;So;0;ON;;;;;N;;;;;\n2BFB;SEPARATED SYMBOL;So;0;ON;;;;;N;;;;;\n2BFC;DOUBLED SYMBOL;So;0;ON;;;;;N;;;;;\n2BFD;PASSED SYMBOL;So;0;ON;;;;;N;;;;;\n2BFE;REVERSED RIGHT ANGLE;So;0;ON;;;;;Y;;;;;\n2BFF;HELLSCHREIBER PAUSE SYMBOL;So;0;ON;;;;;N;;;;;\n2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30;\n2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31;\n2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32;\n2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33;\n2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34;\n2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35;\n2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36;\n2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37;\n2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38;\n2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39;\n2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A;\n2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B;\n2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C;\n2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D;\n2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E;\n2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F;\n2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40;\n2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41;\n2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42;\n2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43;\n2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44;\n2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45;\n2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46;\n2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47;\n2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48;\n2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49;\n2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A;\n2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B;\n2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C;\n2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D;\n2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E;\n2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F;\n2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50;\n2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51;\n2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52;\n2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53;\n2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54;\n2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55;\n2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56;\n2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57;\n2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58;\n2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59;\n2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A;\n2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B;\n2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C;\n2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D;\n2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E;\n2C2F;GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI;Lu;0;L;;;;;N;;;;2C5F;\n2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00\n2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01\n2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02\n2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03\n2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04\n2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05\n2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06\n2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07\n2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08\n2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09\n2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A\n2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B\n2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C\n2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D\n2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E\n2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F\n2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10\n2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11\n2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12\n2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13\n2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14\n2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15\n2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16\n2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17\n2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18\n2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19\n2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A\n2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B\n2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C\n2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D\n2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E\n2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F\n2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20\n2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21\n2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22\n2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23\n2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24\n2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25\n2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26\n2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27\n2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28\n2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29\n2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A\n2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B\n2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C\n2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D\n2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E\n2C5F;GLAGOLITIC SMALL LETTER CAUDATE CHRIVI;Ll;0;L;;;;;N;;;2C2F;;2C2F\n2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61;\n2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60\n2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B;\n2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D;\n2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D;\n2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A\n2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E\n2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68;\n2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67\n2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A;\n2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69\n2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C;\n2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B\n2C6D;LATIN CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;0251;\n2C6E;LATIN CAPITAL LETTER M WITH HOOK;Lu;0;L;;;;;N;;;;0271;\n2C6F;LATIN CAPITAL LETTER TURNED A;Lu;0;L;;;;;N;;;;0250;\n2C70;LATIN CAPITAL LETTER TURNED ALPHA;Lu;0;L;;;;;N;;;;0252;\n2C71;LATIN SMALL LETTER V WITH RIGHT HOOK;Ll;0;L;;;;;N;;;;;\n2C72;LATIN CAPITAL LETTER W WITH HOOK;Lu;0;L;;;;;N;;;;2C73;\n2C73;LATIN SMALL LETTER W WITH HOOK;Ll;0;L;;;;;N;;;2C72;;2C72\n2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;;\n2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76;\n2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75\n2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;;\n2C78;LATIN SMALL LETTER E WITH NOTCH;Ll;0;L;;;;;N;;;;;\n2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;;\n2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;;\n2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;;\n2C7C;LATIN SUBSCRIPT SMALL LETTER J;Lm;0;L;<sub> 006A;;;;N;;;;;\n2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L;<super> 0056;;;;N;;;;;\n2C7E;LATIN CAPITAL LETTER S WITH SWASH TAIL;Lu;0;L;;;;;N;;;;023F;\n2C7F;LATIN CAPITAL LETTER Z WITH SWASH TAIL;Lu;0;L;;;;;N;;;;0240;\n2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81;\n2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80\n2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83;\n2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82\n2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85;\n2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84\n2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87;\n2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86\n2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89;\n2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88\n2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B;\n2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A\n2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D;\n2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C\n2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F;\n2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E\n2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91;\n2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90\n2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93;\n2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92\n2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95;\n2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94\n2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97;\n2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96\n2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99;\n2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98\n2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B;\n2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A\n2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D;\n2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C\n2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F;\n2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E\n2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1;\n2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0\n2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3;\n2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2\n2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5;\n2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4\n2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7;\n2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6\n2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9;\n2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8\n2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB;\n2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA\n2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD;\n2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC\n2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF;\n2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE\n2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1;\n2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0\n2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3;\n2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2\n2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5;\n2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4\n2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7;\n2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6\n2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9;\n2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8\n2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB;\n2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA\n2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD;\n2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC\n2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF;\n2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE\n2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1;\n2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0\n2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3;\n2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2\n2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5;\n2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4\n2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7;\n2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6\n2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9;\n2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8\n2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB;\n2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA\n2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD;\n2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC\n2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF;\n2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE\n2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1;\n2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0\n2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3;\n2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2\n2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5;\n2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4\n2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7;\n2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6\n2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9;\n2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8\n2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB;\n2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA\n2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD;\n2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC\n2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF;\n2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE\n2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1;\n2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0\n2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3;\n2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2\n2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;;\n2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;;\n2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;;\n2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;;\n2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;;\n2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;;\n2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;;\n2CEB;COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI;Lu;0;L;;;;;N;;;;2CEC;\n2CEC;COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI;Ll;0;L;;;;;N;;;2CEB;;2CEB\n2CED;COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA;Lu;0;L;;;;;N;;;;2CEE;\n2CEE;COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA;Ll;0;L;;;;;N;;;2CED;;2CED\n2CEF;COPTIC COMBINING NI ABOVE;Mn;230;NSM;;;;;N;;;;;\n2CF0;COPTIC COMBINING SPIRITUS ASPER;Mn;230;NSM;;;;;N;;;;;\n2CF1;COPTIC COMBINING SPIRITUS LENIS;Mn;230;NSM;;;;;N;;;;;\n2CF2;COPTIC CAPITAL LETTER BOHAIRIC KHEI;Lu;0;L;;;;;N;;;;2CF3;\n2CF3;COPTIC SMALL LETTER BOHAIRIC KHEI;Ll;0;L;;;;;N;;;2CF2;;2CF2\n2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;;\n2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;\n2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;\n2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;;\n2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;;\n2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;;\n2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;;\n2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;;10A0;;10A0\n2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;;10A1;;10A1\n2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;;10A2;;10A2\n2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;;10A3;;10A3\n2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;;10A4;;10A4\n2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;;10A5;;10A5\n2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;;10A6;;10A6\n2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;;10A7;;10A7\n2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;;10A8;;10A8\n2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;;10A9;;10A9\n2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;;10AA;;10AA\n2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;;10AB;;10AB\n2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;;10AC;;10AC\n2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;;10AD;;10AD\n2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;;10AE;;10AE\n2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;;10AF;;10AF\n2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;;10B0;;10B0\n2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;;10B1;;10B1\n2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;;10B2;;10B2\n2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;;10B3;;10B3\n2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;;10B4;;10B4\n2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;;10B5;;10B5\n2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;;10B6;;10B6\n2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;;10B7;;10B7\n2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;;10B8;;10B8\n2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;;10B9;;10B9\n2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;;10BA;;10BA\n2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;;10BB;;10BB\n2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;;10BC;;10BC\n2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;;10BD;;10BD\n2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;;10BE;;10BE\n2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;;10BF;;10BF\n2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;;10C0;;10C0\n2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;;10C1;;10C1\n2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;;10C2;;10C2\n2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;;10C3;;10C3\n2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;;10C4;;10C4\n2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;;10C5;;10C5\n2D27;GEORGIAN SMALL LETTER YN;Ll;0;L;;;;;N;;;10C7;;10C7\n2D2D;GEORGIAN SMALL LETTER AEN;Ll;0;L;;;;;N;;;10CD;;10CD\n2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;;\n2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;;\n2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;;\n2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;;\n2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;;\n2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;;\n2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;;\n2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;;\n2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;;\n2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;;\n2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;;\n2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;;\n2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;;\n2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;;\n2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;;\n2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;;\n2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;;;;\n2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;;\n2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;;\n2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;;\n2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;;\n2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;;\n2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;;\n2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;;\n2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;;\n2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;;\n2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;;\n2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;;\n2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;;\n2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;;\n2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;;\n2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;;\n2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;;\n2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;;\n2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;;\n2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;;;;\n2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;;\n2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;;\n2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;;\n2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;;\n2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;;;;\n2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;;\n2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;;\n2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;;\n2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;;\n2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;;\n2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;;\n2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;;\n2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;;\n2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;;\n2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;;\n2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;;\n2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;;;;\n2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;;\n2D66;TIFINAGH LETTER YE;Lo;0;L;;;;;N;;;;;\n2D67;TIFINAGH LETTER YO;Lo;0;L;;;;;N;;;;;\n2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;;;;\n2D70;TIFINAGH SEPARATOR MARK;Po;0;L;;;;;N;;;;;\n2D7F;TIFINAGH CONSONANT JOINER;Mn;9;NSM;;;;;N;;;;;\n2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;;\n2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;;\n2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;;\n2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;;\n2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;;\n2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;;\n2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;;\n2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;;\n2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;;\n2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;;\n2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;;\n2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;;\n2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;;\n2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;;\n2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;;\n2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;;\n2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;;\n2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;;\n2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;;\n2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;;\n2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;;\n2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;;\n2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;;\n2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;;\n2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;;\n2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;;\n2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;;\n2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;;\n2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;;\n2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;;\n2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;;\n2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;;\n2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;;\n2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;;\n2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;;\n2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;;\n2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;;\n2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;\n2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;\n2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;\n2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;;\n2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;;\n2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;\n2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;\n2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;;\n2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;;\n2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;;\n2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;;\n2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;;\n2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;;\n2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;;\n2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;;\n2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;;\n2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;;\n2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;;\n2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;;\n2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;;\n2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;;\n2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;;\n2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;;\n2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;;\n2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;;\n2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;;\n2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;;\n2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;;\n2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;;\n2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;;\n2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;;\n2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;;\n2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;;\n2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;;\n2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;;\n2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;;\n2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;;\n2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;;\n2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;;\n2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;;\n2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;;\n2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;;\n2DE0;COMBINING CYRILLIC LETTER BE;Mn;230;NSM;;;;;N;;;;;\n2DE1;COMBINING CYRILLIC LETTER VE;Mn;230;NSM;;;;;N;;;;;\n2DE2;COMBINING CYRILLIC LETTER GHE;Mn;230;NSM;;;;;N;;;;;\n2DE3;COMBINING CYRILLIC LETTER DE;Mn;230;NSM;;;;;N;;;;;\n2DE4;COMBINING CYRILLIC LETTER ZHE;Mn;230;NSM;;;;;N;;;;;\n2DE5;COMBINING CYRILLIC LETTER ZE;Mn;230;NSM;;;;;N;;;;;\n2DE6;COMBINING CYRILLIC LETTER KA;Mn;230;NSM;;;;;N;;;;;\n2DE7;COMBINING CYRILLIC LETTER EL;Mn;230;NSM;;;;;N;;;;;\n2DE8;COMBINING CYRILLIC LETTER EM;Mn;230;NSM;;;;;N;;;;;\n2DE9;COMBINING CYRILLIC LETTER EN;Mn;230;NSM;;;;;N;;;;;\n2DEA;COMBINING CYRILLIC LETTER O;Mn;230;NSM;;;;;N;;;;;\n2DEB;COMBINING CYRILLIC LETTER PE;Mn;230;NSM;;;;;N;;;;;\n2DEC;COMBINING CYRILLIC LETTER ER;Mn;230;NSM;;;;;N;;;;;\n2DED;COMBINING CYRILLIC LETTER ES;Mn;230;NSM;;;;;N;;;;;\n2DEE;COMBINING CYRILLIC LETTER TE;Mn;230;NSM;;;;;N;;;;;\n2DEF;COMBINING CYRILLIC LETTER HA;Mn;230;NSM;;;;;N;;;;;\n2DF0;COMBINING CYRILLIC LETTER TSE;Mn;230;NSM;;;;;N;;;;;\n2DF1;COMBINING CYRILLIC LETTER CHE;Mn;230;NSM;;;;;N;;;;;\n2DF2;COMBINING CYRILLIC LETTER SHA;Mn;230;NSM;;;;;N;;;;;\n2DF3;COMBINING CYRILLIC LETTER SHCHA;Mn;230;NSM;;;;;N;;;;;\n2DF4;COMBINING CYRILLIC LETTER FITA;Mn;230;NSM;;;;;N;;;;;\n2DF5;COMBINING CYRILLIC LETTER ES-TE;Mn;230;NSM;;;;;N;;;;;\n2DF6;COMBINING CYRILLIC LETTER A;Mn;230;NSM;;;;;N;;;;;\n2DF7;COMBINING CYRILLIC LETTER IE;Mn;230;NSM;;;;;N;;;;;\n2DF8;COMBINING CYRILLIC LETTER DJERV;Mn;230;NSM;;;;;N;;;;;\n2DF9;COMBINING CYRILLIC LETTER MONOGRAPH UK;Mn;230;NSM;;;;;N;;;;;\n2DFA;COMBINING CYRILLIC LETTER YAT;Mn;230;NSM;;;;;N;;;;;\n2DFB;COMBINING CYRILLIC LETTER YU;Mn;230;NSM;;;;;N;;;;;\n2DFC;COMBINING CYRILLIC LETTER IOTIFIED A;Mn;230;NSM;;;;;N;;;;;\n2DFD;COMBINING CYRILLIC LETTER LITTLE YUS;Mn;230;NSM;;;;;N;;;;;\n2DFE;COMBINING CYRILLIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;;\n2DFF;COMBINING CYRILLIC LETTER IOTIFIED BIG YUS;Mn;230;NSM;;;;;N;;;;;\n2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;\n2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;\n2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;\n2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;\n2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;\n2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;\n2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;\n2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;\n2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;;\n2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;;\n2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;;\n2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;;\n2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;;\n2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;;\n2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;;\n2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;;\n2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;\n2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;\n2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;;\n2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;;\n2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;;\n2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;;\n2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;;\n2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;\n2E18;INVERTED INTERROBANG;Po;0;ON;;;;;N;;;;;\n2E19;PALM BRANCH;Po;0;ON;;;;;N;;;;;\n2E1A;HYPHEN WITH DIAERESIS;Pd;0;ON;;;;;N;;;;;\n2E1B;TILDE WITH RING ABOVE;Po;0;ON;;;;;N;;;;;\n2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;;\n2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;;\n2E1E;TILDE WITH DOT ABOVE;Po;0;ON;;;;;N;;;;;\n2E1F;TILDE WITH DOT BELOW;Po;0;ON;;;;;N;;;;;\n2E20;LEFT VERTICAL BAR WITH QUILL;Pi;0;ON;;;;;Y;;;;;\n2E21;RIGHT VERTICAL BAR WITH QUILL;Pf;0;ON;;;;;Y;;;;;\n2E22;TOP LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;;\n2E23;TOP RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;;\n2E24;BOTTOM LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;;\n2E25;BOTTOM RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;;\n2E26;LEFT SIDEWAYS U BRACKET;Ps;0;ON;;;;;Y;;;;;\n2E27;RIGHT SIDEWAYS U BRACKET;Pe;0;ON;;;;;Y;;;;;\n2E28;LEFT DOUBLE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;\n2E29;RIGHT DOUBLE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;\n2E2A;TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;\n2E2B;ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;;\n2E2C;SQUARED FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;\n2E2D;FIVE DOT MARK;Po;0;ON;;;;;N;;;;;\n2E2E;REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;;\n2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;;\n2E30;RING POINT;Po;0;ON;;;;;N;;;;;\n2E31;WORD SEPARATOR MIDDLE DOT;Po;0;ON;;;;;N;;;;;\n2E32;TURNED COMMA;Po;0;ON;;;;;N;;;;;\n2E33;RAISED DOT;Po;0;ON;;;;;N;;;;;\n2E34;RAISED COMMA;Po;0;ON;;;;;N;;;;;\n2E35;TURNED SEMICOLON;Po;0;ON;;;;;N;;;;;\n2E36;DAGGER WITH LEFT GUARD;Po;0;ON;;;;;N;;;;;\n2E37;DAGGER WITH RIGHT GUARD;Po;0;ON;;;;;N;;;;;\n2E38;TURNED DAGGER;Po;0;ON;;;;;N;;;;;\n2E39;TOP HALF SECTION SIGN;Po;0;ON;;;;;N;;;;;\n2E3A;TWO-EM DASH;Pd;0;ON;;;;;N;;;;;\n2E3B;THREE-EM DASH;Pd;0;ON;;;;;N;;;;;\n2E3C;STENOGRAPHIC FULL STOP;Po;0;ON;;;;;N;;;;;\n2E3D;VERTICAL SIX DOTS;Po;0;ON;;;;;N;;;;;\n2E3E;WIGGLY VERTICAL LINE;Po;0;ON;;;;;N;;;;;\n2E3F;CAPITULUM;Po;0;ON;;;;;N;;;;;\n2E40;DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;;\n2E41;REVERSED COMMA;Po;0;ON;;;;;N;;;;;\n2E42;DOUBLE LOW-REVERSED-9 QUOTATION MARK;Ps;0;ON;;;;;N;;;;;\n2E43;DASH WITH LEFT UPTURN;Po;0;ON;;;;;N;;;;;\n2E44;DOUBLE SUSPENSION MARK;Po;0;ON;;;;;N;;;;;\n2E45;INVERTED LOW KAVYKA;Po;0;ON;;;;;N;;;;;\n2E46;INVERTED LOW KAVYKA WITH KAVYKA ABOVE;Po;0;ON;;;;;N;;;;;\n2E47;LOW KAVYKA;Po;0;ON;;;;;N;;;;;\n2E48;LOW KAVYKA WITH DOT;Po;0;ON;;;;;N;;;;;\n2E49;DOUBLE STACKED COMMA;Po;0;ON;;;;;N;;;;;\n2E4A;DOTTED SOLIDUS;Po;0;ON;;;;;N;;;;;\n2E4B;TRIPLE DAGGER;Po;0;ON;;;;;N;;;;;\n2E4C;MEDIEVAL COMMA;Po;0;ON;;;;;N;;;;;\n2E4D;PARAGRAPHUS MARK;Po;0;ON;;;;;N;;;;;\n2E4E;PUNCTUS ELEVATUS MARK;Po;0;ON;;;;;N;;;;;\n2E4F;CORNISH VERSE DIVIDER;Po;0;ON;;;;;N;;;;;\n2E50;CROSS PATTY WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;;\n2E51;CROSS PATTY WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;;\n2E52;TIRONIAN SIGN CAPITAL ET;Po;0;ON;;;;;N;;;;;\n2E53;MEDIEVAL EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;\n2E54;MEDIEVAL QUESTION MARK;Po;0;ON;;;;;N;;;;;\n2E55;LEFT SQUARE BRACKET WITH STROKE;Ps;0;ON;;;;;Y;;;;;\n2E56;RIGHT SQUARE BRACKET WITH STROKE;Pe;0;ON;;;;;Y;;;;;\n2E57;LEFT SQUARE BRACKET WITH DOUBLE STROKE;Ps;0;ON;;;;;Y;;;;;\n2E58;RIGHT SQUARE BRACKET WITH DOUBLE STROKE;Pe;0;ON;;;;;Y;;;;;\n2E59;TOP HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;;\n2E5A;TOP HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;;\n2E5B;BOTTOM HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;;\n2E5C;BOTTOM HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;;\n2E5D;OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;\n2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;\n2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;\n2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;\n2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;\n2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;\n2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;\n2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;\n2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;\n2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;\n2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;\n2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;\n2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;\n2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;\n2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;\n2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;\n2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;\n2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;\n2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;\n2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;\n2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;\n2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;\n2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;\n2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;\n2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;\n2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;\n2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;\n2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;\n2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;\n2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;\n2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;\n2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;\n2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;\n2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;\n2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;\n2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;\n2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;\n2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;\n2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;\n2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;\n2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;\n2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;\n2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;\n2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;\n2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;\n2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;\n2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;\n2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;\n2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;\n2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;\n2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;\n2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;\n2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;\n2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;\n2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;\n2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;\n2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;\n2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;\n2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;\n2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;\n2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;\n2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;\n2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;\n2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;\n2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;\n2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;\n2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;\n2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;\n2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;\n2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;\n2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;\n2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;\n2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;\n2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;\n2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;\n2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;\n2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;\n2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;\n2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;\n2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;\n2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;\n2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;\n2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;\n2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;\n2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;\n2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;\n2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;\n2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;\n2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;\n2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;\n2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;\n2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;\n2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;\n2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;\n2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;\n2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;\n2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;\n2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;\n2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;\n2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;\n2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;\n2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;\n2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;\n2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;\n2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;\n2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;\n2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;\n2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;\n2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;\n2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;\n2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;\n2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;\n2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;\n2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;\n2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;\n2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;\n2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;\n2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;\n2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;\n2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;\n2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;\n2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;\n2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;\n2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;\n2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;\n2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;\n2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;\n2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;\n2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;\n2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;\n2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;\n2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;\n2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;\n2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;\n2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;\n2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;\n2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;\n2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;\n2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;\n2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;\n2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;\n2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;\n2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;\n2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;\n2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;\n2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;\n2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;\n2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;\n2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;\n2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;\n2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;\n2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;\n2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;\n2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;\n2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;\n2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;\n2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;\n2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;\n2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;\n2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;\n2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;\n2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;\n2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;\n2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;\n2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;\n2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;\n2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;\n2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;\n2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;\n2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;\n2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;\n2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;\n2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;\n2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;\n2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;\n2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;\n2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;\n2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;\n2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;\n2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;\n2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;\n2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;\n2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;\n2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;\n2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;\n2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;\n2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;\n2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;\n2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;\n2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;\n2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;\n2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;\n2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;\n2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;\n2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;\n2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;\n2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;\n2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;\n2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;\n2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;\n2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;\n2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;\n2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;\n2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;\n2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;\n2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;\n2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;\n2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;\n2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;\n2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;\n2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;\n2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;\n2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;\n2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;\n2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;\n2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;\n2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;\n2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;\n2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;\n2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;\n2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;\n2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;\n2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;\n2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;\n2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;\n2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;\n2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;\n2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;\n2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;\n2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;\n2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;\n2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;\n2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;\n2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;\n2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;\n2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;\n2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;\n2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;\n2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;\n2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;\n2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;\n2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;\n2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;\n2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;\n2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;\n2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;\n2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;\n2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;\n2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;\n2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;\n2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;\n2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;\n2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;\n2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;\n2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;\n2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;\n2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;\n2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;\n2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;\n2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;\n2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;\n2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;\n2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;\n2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;\n2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;\n2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;\n2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;\n2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;\n2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;\n2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;\n2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;\n2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;\n2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;\n2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;\n2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;\n2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;\n2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;\n2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;\n2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;\n2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;\n2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;\n2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;\n2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;\n2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;\n2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;\n2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;\n2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;\n2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;\n2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;\n2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;\n2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;\n2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;\n2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;\n2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;\n2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;\n2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;\n2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;\n2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;\n2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;\n2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;\n2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;\n2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;\n2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;\n2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;\n2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;\n2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;\n2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;\n2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;\n2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;\n2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;\n2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;\n2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;\n2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;\n2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;\n2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;\n2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;\n2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;\n2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;\n2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;\n2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;\n2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;\n2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;\n2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;\n2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;\n2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;\n2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;\n2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;\n2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;\n2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;\n2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;\n2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;\n2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;\n2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;\n2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;\n2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;\n2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;\n2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;\n2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;\n2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;\n2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;\n2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;\n2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;\n2FFC;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM RIGHT;So;0;ON;;;;;N;;;;;\n2FFD;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER RIGHT;So;0;ON;;;;;N;;;;;\n2FFE;IDEOGRAPHIC DESCRIPTION CHARACTER HORIZONTAL REFLECTION;So;0;ON;;;;;N;;;;;\n2FFF;IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION;So;0;ON;;;;;N;;;;;\n3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;\n3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;\n3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;\n3003;DITTO MARK;Po;0;ON;;;;;N;;;;;\n3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;\n3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;\n3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;\n3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;\n3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;\n3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;\n300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;\n300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;\n300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;\n300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;\n300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;\n300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;\n3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;\n3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;\n3012;POSTAL MARK;So;0;ON;;;;;N;;;;;\n3013;GETA MARK;So;0;ON;;;;;N;;;;;\n3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;\n3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;\n3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;\n3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;\n3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;\n3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;\n301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;\n301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;\n301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;\n301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;\n301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;\n301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;\n3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;\n3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;\n3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;\n3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;\n3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;\n3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;\n3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;\n3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;\n3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;\n3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;\n302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;\n302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;\n302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;\n302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;\n302E;HANGUL SINGLE DOT TONE MARK;Mc;224;L;;;;;N;;;;;\n302F;HANGUL DOUBLE DOT TONE MARK;Mc;224;L;;;;;N;;;;;\n3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;\n3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;\n3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;\n3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;\n3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;\n3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;\n3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;\n3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;\n3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;\n3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;\n303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;\n303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;\n303C;MASU MARK;Lo;0;L;;;;;N;;;;;\n303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;;\n303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;\n303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;\n3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;\n3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;\n3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;\n3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;\n3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;\n3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;\n3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;\n3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;\n3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;\n304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;\n304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;\n304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;\n304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;\n304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;\n304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;\n3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;\n3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;\n3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;\n3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;\n3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;\n3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;\n3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;\n3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;\n3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;\n3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;\n305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;\n305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;\n305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;\n305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;\n305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;\n305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;\n3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;\n3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;\n3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;\n3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;\n3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;\n3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;\n3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;\n3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;\n3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;\n3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;\n306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;\n306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;\n306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;\n306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;\n306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;\n306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;\n3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;\n3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;\n3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;\n3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;\n3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;\n3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;\n3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;\n3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;\n3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;\n3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;\n307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;\n307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;\n307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;\n307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;\n307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;\n307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;\n3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;\n3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;\n3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;\n3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;\n3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;\n3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;\n3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;\n3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;\n3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;\n3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;\n308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;\n308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;\n308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;\n308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;\n308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;\n308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;\n3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;\n3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;\n3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;\n3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;\n3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;\n3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;\n3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;\n3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;\n309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;\n309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;\n309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;\n309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;\n309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;\n309F;HIRAGANA DIGRAPH YORI;Lo;0;L;<vertical> 3088 308A;;;;N;;;;;\n30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;;\n30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;\n30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;\n30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;\n30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;\n30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;\n30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;\n30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;\n30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;\n30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;\n30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;\n30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;\n30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;\n30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;\n30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;\n30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;\n30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;\n30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;\n30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;\n30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;\n30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;\n30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;\n30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;\n30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;\n30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;\n30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;\n30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;\n30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;\n30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;\n30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;\n30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;\n30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;\n30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;\n30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;\n30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;\n30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;\n30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;\n30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;\n30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;\n30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;\n30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;\n30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;\n30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;\n30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;\n30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;\n30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;\n30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;\n30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;\n30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;\n30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;\n30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;\n30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;\n30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;\n30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;\n30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;\n30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;\n30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;\n30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;\n30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;\n30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;\n30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;\n30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;\n30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;\n30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;\n30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;\n30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;\n30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;\n30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;\n30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;\n30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;\n30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;\n30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;\n30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;\n30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;\n30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;\n30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;\n30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;\n30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;\n30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;\n30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;\n30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;\n30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;\n30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;\n30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;\n30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;\n30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;\n30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;\n30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;\n30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;\n30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;\n30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;\n30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;;\n30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;\n30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;\n30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;\n30FF;KATAKANA DIGRAPH KOTO;Lo;0;L;<vertical> 30B3 30C8;;;;N;;;;;\n3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;\n3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;\n3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;\n3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;\n3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;\n310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;\n310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;\n310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;\n310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;\n310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;\n310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;\n3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;\n3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;\n3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;\n3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;\n3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;\n3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;\n3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;\n3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;\n3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;\n3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;\n311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;\n311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;\n311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;\n311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;\n311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;\n311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;\n3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;\n3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;\n3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;\n3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;\n3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;\n3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;\n3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;\n3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;\n3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;\n3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;\n312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;\n312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;\n312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;\n312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;;\n312E;BOPOMOFO LETTER O WITH DOT ABOVE;Lo;0;L;;;;;N;;;;;\n312F;BOPOMOFO LETTER NN;Lo;0;L;;;;;N;;;;;\n3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;\n3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;\n3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;\n3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;\n3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;\n3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;\n3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;\n3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;\n3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;\n313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;\n313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;\n313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;\n313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;\n313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;\n313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;\n3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;\n3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;\n3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;\n3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;\n3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;\n3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;\n3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;\n3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;\n3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;\n3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;\n314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;\n314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;\n314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;\n314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;\n314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;\n314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;\n3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;\n3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;\n3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;\n3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;\n3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;\n3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;\n3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;\n3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;\n3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;\n3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;\n315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;\n315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;\n315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;\n315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;\n315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;\n315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;\n3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;\n3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;\n3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;\n3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;\n3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;\n3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;\n3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;\n3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;\n3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;\n3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;\n316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;\n316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;\n316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;\n316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;\n316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;\n316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;\n3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;\n3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;\n3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;\n3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;\n3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;\n3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;\n3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;\n3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;\n3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;\n3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;\n317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;\n317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;\n317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;\n317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;\n317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;\n317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;\n3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;\n3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;\n3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;\n3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;\n3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;\n3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;\n3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;\n3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;\n3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;\n3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;\n318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;\n318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;\n318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;\n318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;\n318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;\n3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;;;;\n3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;;;;\n3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;1;N;KAERITEN ITI;;;;\n3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;2;N;KAERITEN NI;;;;\n3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;3;N;KAERITEN SAN;;;;\n3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;4;N;KAERITEN SI;;;;\n3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;;;;\n3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;;;;\n3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;;;;\n3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;;;;\n319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;;;;\n319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;;;;\n319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;;;;\n319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;;;;\n319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;;;;\n319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;;;;\n31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;\n31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;\n31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;\n31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;\n31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;\n31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;\n31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;\n31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;\n31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;\n31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;\n31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;\n31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;\n31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;\n31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;\n31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;\n31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;\n31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;\n31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;\n31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;\n31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;\n31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;\n31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;\n31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;\n31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;\n31B8;BOPOMOFO LETTER GH;Lo;0;L;;;;;N;;;;;\n31B9;BOPOMOFO LETTER LH;Lo;0;L;;;;;N;;;;;\n31BA;BOPOMOFO LETTER ZY;Lo;0;L;;;;;N;;;;;\n31BB;BOPOMOFO FINAL LETTER G;Lo;0;L;;;;;N;;;;;\n31BC;BOPOMOFO LETTER GW;Lo;0;L;;;;;N;;;;;\n31BD;BOPOMOFO LETTER KW;Lo;0;L;;;;;N;;;;;\n31BE;BOPOMOFO LETTER OE;Lo;0;L;;;;;N;;;;;\n31BF;BOPOMOFO LETTER AH;Lo;0;L;;;;;N;;;;;\n31C0;CJK STROKE T;So;0;ON;;;;;N;;;;;\n31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;;\n31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;;\n31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;;\n31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;;\n31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;;\n31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;;\n31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;;\n31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;;\n31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;;\n31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;;\n31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;;\n31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;;\n31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;;\n31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;;\n31CF;CJK STROKE N;So;0;ON;;;;;N;;;;;\n31D0;CJK STROKE H;So;0;ON;;;;;N;;;;;\n31D1;CJK STROKE S;So;0;ON;;;;;N;;;;;\n31D2;CJK STROKE P;So;0;ON;;;;;N;;;;;\n31D3;CJK STROKE SP;So;0;ON;;;;;N;;;;;\n31D4;CJK STROKE D;So;0;ON;;;;;N;;;;;\n31D5;CJK STROKE HZ;So;0;ON;;;;;N;;;;;\n31D6;CJK STROKE HG;So;0;ON;;;;;N;;;;;\n31D7;CJK STROKE SZ;So;0;ON;;;;;N;;;;;\n31D8;CJK STROKE SWZ;So;0;ON;;;;;N;;;;;\n31D9;CJK STROKE ST;So;0;ON;;;;;N;;;;;\n31DA;CJK STROKE SG;So;0;ON;;;;;N;;;;;\n31DB;CJK STROKE PD;So;0;ON;;;;;N;;;;;\n31DC;CJK STROKE PZ;So;0;ON;;;;;N;;;;;\n31DD;CJK STROKE TN;So;0;ON;;;;;N;;;;;\n31DE;CJK STROKE SZZ;So;0;ON;;;;;N;;;;;\n31DF;CJK STROKE SWG;So;0;ON;;;;;N;;;;;\n31E0;CJK STROKE HXWG;So;0;ON;;;;;N;;;;;\n31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;;\n31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;;\n31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;;\n31E4;CJK STROKE HXG;So;0;ON;;;;;N;;;;;\n31E5;CJK STROKE SZP;So;0;ON;;;;;N;;;;;\n31EF;IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION;So;0;ON;;;;;N;;;;;\n31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;;\n31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;;\n31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;;\n31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;;\n31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;;\n31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;;\n31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;;\n31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;;\n31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;;\n31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;;\n31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;;\n31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;;\n31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;;\n31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;;\n31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;;\n31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;;\n3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;\n3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;\n3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;\n3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;\n3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;\n3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;\n3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;\n3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;\n3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;\n3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;\n320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;\n320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;\n320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;\n320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;\n320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;\n320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;\n3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;\n3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;\n3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;\n3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;\n3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;\n3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;\n3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;\n3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;\n3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;\n3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;\n321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;\n321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;\n321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;\n321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON;<compat> 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;;\n321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON;<compat> 0028 110B 1169 1112 116E 0029;;;;N;;;;;\n3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;1;N;;;;;\n3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;2;N;;;;;\n3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;3;N;;;;;\n3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;4;N;;;;;\n3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;5;N;;;;;\n3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;6;N;;;;;\n3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;7;N;;;;;\n3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;8;N;;;;;\n3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;9;N;;;;;\n3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;10;N;;;;;\n322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;\n322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;\n322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;\n322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;\n322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;\n322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;\n3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;\n3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;\n3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;\n3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;\n3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;\n3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;\n3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;\n3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;\n3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;\n3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;\n323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;\n323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;\n323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;\n323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;\n323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;\n323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;\n3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;\n3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;\n3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;\n3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;\n3244;CIRCLED IDEOGRAPH QUESTION;So;0;L;<circle> 554F;;;;N;;;;;\n3245;CIRCLED IDEOGRAPH KINDERGARTEN;So;0;L;<circle> 5E7C;;;;N;;;;;\n3246;CIRCLED IDEOGRAPH SCHOOL;So;0;L;<circle> 6587;;;;N;;;;;\n3247;CIRCLED IDEOGRAPH KOTO;So;0;L;<circle> 7B8F;;;;N;;;;;\n3248;CIRCLED NUMBER TEN ON BLACK SQUARE;No;0;L;;;;10;N;;;;;\n3249;CIRCLED NUMBER TWENTY ON BLACK SQUARE;No;0;L;;;;20;N;;;;;\n324A;CIRCLED NUMBER THIRTY ON BLACK SQUARE;No;0;L;;;;30;N;;;;;\n324B;CIRCLED NUMBER FORTY ON BLACK SQUARE;No;0;L;;;;40;N;;;;;\n324C;CIRCLED NUMBER FIFTY ON BLACK SQUARE;No;0;L;;;;50;N;;;;;\n324D;CIRCLED NUMBER SIXTY ON BLACK SQUARE;No;0;L;;;;60;N;;;;;\n324E;CIRCLED NUMBER SEVENTY ON BLACK SQUARE;No;0;L;;;;70;N;;;;;\n324F;CIRCLED NUMBER EIGHTY ON BLACK SQUARE;No;0;L;;;;80;N;;;;;\n3250;PARTNERSHIP SIGN;So;0;ON;<square> 0050 0054 0045;;;;N;;;;;\n3251;CIRCLED NUMBER TWENTY ONE;No;0;ON;<circle> 0032 0031;;;21;N;;;;;\n3252;CIRCLED NUMBER TWENTY TWO;No;0;ON;<circle> 0032 0032;;;22;N;;;;;\n3253;CIRCLED NUMBER TWENTY THREE;No;0;ON;<circle> 0032 0033;;;23;N;;;;;\n3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON;<circle> 0032 0034;;;24;N;;;;;\n3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON;<circle> 0032 0035;;;25;N;;;;;\n3256;CIRCLED NUMBER TWENTY SIX;No;0;ON;<circle> 0032 0036;;;26;N;;;;;\n3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON;<circle> 0032 0037;;;27;N;;;;;\n3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON;<circle> 0032 0038;;;28;N;;;;;\n3259;CIRCLED NUMBER TWENTY NINE;No;0;ON;<circle> 0032 0039;;;29;N;;;;;\n325A;CIRCLED NUMBER THIRTY;No;0;ON;<circle> 0033 0030;;;30;N;;;;;\n325B;CIRCLED NUMBER THIRTY ONE;No;0;ON;<circle> 0033 0031;;;31;N;;;;;\n325C;CIRCLED NUMBER THIRTY TWO;No;0;ON;<circle> 0033 0032;;;32;N;;;;;\n325D;CIRCLED NUMBER THIRTY THREE;No;0;ON;<circle> 0033 0033;;;33;N;;;;;\n325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON;<circle> 0033 0034;;;34;N;;;;;\n325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON;<circle> 0033 0035;;;35;N;;;;;\n3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;\n3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;\n3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;\n3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;\n3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;\n3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;\n3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;\n3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;\n3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;\n3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;\n326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;\n326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;\n326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;\n326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;\n326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;\n326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;\n3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;\n3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;\n3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;\n3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;\n3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;\n3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;\n3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;\n3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;\n3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;\n3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;\n327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;\n327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;\n327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;;\n327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;;\n327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;;\n327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;\n3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;\n3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;\n3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;\n3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;\n3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;\n3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;\n3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;\n3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;\n3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;\n3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;\n328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;\n328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;\n328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;\n328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;\n328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;\n328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;\n3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;\n3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;\n3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;\n3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;\n3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;\n3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;\n3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;\n3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;\n3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;\n3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;\n329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;\n329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;\n329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;\n329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;\n329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;\n329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;\n32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;\n32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;\n32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;\n32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;\n32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;\n32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;\n32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;\n32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;\n32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;\n32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;\n32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;\n32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;\n32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;\n32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;\n32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;\n32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;\n32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;\n32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON;<circle> 0033 0036;;;36;N;;;;;\n32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON;<circle> 0033 0037;;;37;N;;;;;\n32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON;<circle> 0033 0038;;;38;N;;;;;\n32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON;<circle> 0033 0039;;;39;N;;;;;\n32B5;CIRCLED NUMBER FORTY;No;0;ON;<circle> 0034 0030;;;40;N;;;;;\n32B6;CIRCLED NUMBER FORTY ONE;No;0;ON;<circle> 0034 0031;;;41;N;;;;;\n32B7;CIRCLED NUMBER FORTY TWO;No;0;ON;<circle> 0034 0032;;;42;N;;;;;\n32B8;CIRCLED NUMBER FORTY THREE;No;0;ON;<circle> 0034 0033;;;43;N;;;;;\n32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON;<circle> 0034 0034;;;44;N;;;;;\n32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON;<circle> 0034 0035;;;45;N;;;;;\n32BB;CIRCLED NUMBER FORTY SIX;No;0;ON;<circle> 0034 0036;;;46;N;;;;;\n32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON;<circle> 0034 0037;;;47;N;;;;;\n32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON;<circle> 0034 0038;;;48;N;;;;;\n32BE;CIRCLED NUMBER FORTY NINE;No;0;ON;<circle> 0034 0039;;;49;N;;;;;\n32BF;CIRCLED NUMBER FIFTY;No;0;ON;<circle> 0035 0030;;;50;N;;;;;\n32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;\n32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;\n32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;\n32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;\n32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;\n32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;\n32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;\n32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;\n32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;\n32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;\n32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;\n32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;\n32CC;SQUARE HG;So;0;ON;<square> 0048 0067;;;;N;;;;;\n32CD;SQUARE ERG;So;0;ON;<square> 0065 0072 0067;;;;N;;;;;\n32CE;SQUARE EV;So;0;ON;<square> 0065 0056;;;;N;;;;;\n32CF;LIMITED LIABILITY SIGN;So;0;ON;<square> 004C 0054 0044;;;;N;;;;;\n32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;\n32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;\n32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;\n32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;\n32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;\n32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;\n32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;\n32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;\n32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;\n32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;\n32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;\n32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;\n32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;\n32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;\n32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;\n32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;\n32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;\n32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;\n32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;\n32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;\n32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;\n32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;\n32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;\n32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;\n32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;\n32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;\n32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;\n32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;\n32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;\n32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;\n32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;\n32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;\n32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;\n32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;\n32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;\n32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;\n32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;\n32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;\n32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;\n32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;\n32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;\n32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;\n32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;\n32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;\n32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;\n32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;\n32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;\n32FF;SQUARE ERA NAME REIWA;So;0;L;<square> 4EE4 548C;;;;N;;;;;\n3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;\n3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;\n3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;\n3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;\n3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;\n3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;\n3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;\n3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;\n3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;\n3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;\n330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;\n330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;\n330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;\n330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;\n330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;\n330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;\n3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;\n3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;\n3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;\n3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;\n3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;\n3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;\n3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;\n3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;\n3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;\n3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;\n331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;\n331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;\n331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;\n331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;\n331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;\n331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;\n3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;\n3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;\n3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;\n3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;\n3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;\n3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;\n3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;\n3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;\n3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;\n3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;\n332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;\n332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;\n332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;\n332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;\n332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;\n332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;\n3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;\n3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;\n3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;\n3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;\n3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;\n3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;\n3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;\n3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;\n3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;\n3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;\n333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;\n333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;\n333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;\n333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;\n333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;\n333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;\n3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;\n3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;\n3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;\n3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;\n3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;\n3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;\n3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;\n3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;\n3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;\n3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;\n334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;\n334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;\n334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;\n334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;\n334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;\n334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;\n3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;\n3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;\n3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;\n3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;\n3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;\n3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;\n3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;\n3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;\n3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;\n3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;\n335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;\n335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;\n335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;\n335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;\n335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;\n335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;\n3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;\n3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;\n3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;\n3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;\n3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;\n3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;\n3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;\n3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;\n3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;\n3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;\n336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;\n336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;\n336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;\n336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;\n336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;\n336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;\n3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;\n3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;\n3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;\n3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;\n3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;\n3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;\n3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;\n3377;SQUARE DM;So;0;ON;<square> 0064 006D;;;;N;;;;;\n3378;SQUARE DM SQUARED;So;0;ON;<square> 0064 006D 00B2;;;;N;;;;;\n3379;SQUARE DM CUBED;So;0;ON;<square> 0064 006D 00B3;;;;N;;;;;\n337A;SQUARE IU;So;0;ON;<square> 0049 0055;;;;N;;;;;\n337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;\n337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;\n337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;\n337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;\n337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;\n3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;\n3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;\n3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;\n3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;\n3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;\n3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;\n3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;\n3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;\n3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;\n3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;\n338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;\n338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;\n338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;\n338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;\n338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;\n338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;\n3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;\n3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;\n3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;\n3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;\n3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;\n3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;\n3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;\n3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;\n3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;\n3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;\n339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;\n339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;\n339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;\n339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;\n339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;\n339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;\n33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;\n33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;\n33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;\n33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;\n33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;\n33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;\n33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;\n33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;\n33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;\n33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;\n33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;\n33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;\n33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;\n33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;\n33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;\n33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;\n33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;\n33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;\n33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;\n33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;\n33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;\n33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;\n33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;\n33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;\n33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;\n33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;\n33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;\n33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;\n33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;\n33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;\n33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;\n33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;\n33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;\n33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;\n33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;\n33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;\n33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;\n33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;\n33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;\n33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;\n33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;\n33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;\n33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;\n33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;\n33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;\n33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;\n33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;\n33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;\n33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;\n33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;\n33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;\n33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;\n33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;\n33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;\n33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;\n33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;\n33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;\n33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;\n33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;\n33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;\n33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;\n33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;\n33DE;SQUARE V OVER M;So;0;ON;<square> 0056 2215 006D;;;;N;;;;;\n33DF;SQUARE A OVER M;So;0;ON;<square> 0041 2215 006D;;;;N;;;;;\n33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;\n33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;\n33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;\n33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;\n33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;\n33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;\n33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;\n33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;\n33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;\n33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;\n33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;\n33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;\n33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;\n33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;\n33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;\n33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;\n33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;\n33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;\n33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;\n33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;\n33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;\n33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;\n33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;\n33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;\n33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;\n33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;\n33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;\n33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;\n33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;\n33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;\n33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;\n33FF;SQUARE GAL;So;0;ON;<square> 0067 0061 006C;;;;N;;;;;\n3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;\n4DBF;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;\n4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;;\n4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;;\n4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;;\n4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;;\n4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;\n4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;;\n4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;;\n4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;;\n4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;;\n4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;;\n4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;;\n4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;;\n4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;;\n4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;;\n4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;;\n4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;;\n4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;\n4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;;\n4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;;\n4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;;\n4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;;\n4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;;\n4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;;\n4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;;\n4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;;\n4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;;\n4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;;\n4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;;\n4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;;\n4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;;\n4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;;\n4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;;\n4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;;\n4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;;\n4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;;\n4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;;\n4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;;\n4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;\n4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;;\n4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;;\n4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;;\n4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;\n4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;;\n4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;;\n4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;;\n4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;;\n4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;;\n4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;;\n4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;;\n4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;;\n4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;;\n4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;;\n4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;;\n4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;;\n4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;;\n4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;;\n4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;;\n4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;;\n4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;;\n4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;;\n4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;;\n4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;;\n4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;\n4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;\n4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;\n9FFF;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;\nA000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;\nA001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;\nA002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;\nA003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;\nA004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;\nA005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;\nA006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;\nA007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;\nA008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;\nA009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;\nA00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;\nA00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;\nA00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;\nA00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;\nA00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;\nA00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;\nA010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;\nA011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;\nA012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;\nA013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;\nA014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;\nA015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;;\nA016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;\nA017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;\nA018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;\nA019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;\nA01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;\nA01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;\nA01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;\nA01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;\nA01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;\nA01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;\nA020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;\nA021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;\nA022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;\nA023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;\nA024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;\nA025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;\nA026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;\nA027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;\nA028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;\nA029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;\nA02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;\nA02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;\nA02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;\nA02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;\nA02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;\nA02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;\nA030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;\nA031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;\nA032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;\nA033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;\nA034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;\nA035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;\nA036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;\nA037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;\nA038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;\nA039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;\nA03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;\nA03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;\nA03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;\nA03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;\nA03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;\nA03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;\nA040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;\nA041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;\nA042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;\nA043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;\nA044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;\nA045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;\nA046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;\nA047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;\nA048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;\nA049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;\nA04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;\nA04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;\nA04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;\nA04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;\nA04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;\nA04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;\nA050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;\nA051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;\nA052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;\nA053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;\nA054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;\nA055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;\nA056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;\nA057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;\nA058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;\nA059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;\nA05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;\nA05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;\nA05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;\nA05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;\nA05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;\nA05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;\nA060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;\nA061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;\nA062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;\nA063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;\nA064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;\nA065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;\nA066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;\nA067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;\nA068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;\nA069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;\nA06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;\nA06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;\nA06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;\nA06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;\nA06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;\nA06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;\nA070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;\nA071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;\nA072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;\nA073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;\nA074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;\nA075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;\nA076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;\nA077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;\nA078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;\nA079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;\nA07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;\nA07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;\nA07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;\nA07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;\nA07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;\nA07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;\nA080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;\nA081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;\nA082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;\nA083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;\nA084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;\nA085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;\nA086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;\nA087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;\nA088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;\nA089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;\nA08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;\nA08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;\nA08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;\nA08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;\nA08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;\nA08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;\nA090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;\nA091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;\nA092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;\nA093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;\nA094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;\nA095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;\nA096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;\nA097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;\nA098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;\nA099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;\nA09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;\nA09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;\nA09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;\nA09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;\nA09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;\nA09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;\nA0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;\nA0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;\nA0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;\nA0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;\nA0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;\nA0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;\nA0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;\nA0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;\nA0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;\nA0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;\nA0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;\nA0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;\nA0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;\nA0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;\nA0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;\nA0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;\nA0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;\nA0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;\nA0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;\nA0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;\nA0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;\nA0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;\nA0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;\nA0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;\nA0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;\nA0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;\nA0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;\nA0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;\nA0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;\nA0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;\nA0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;\nA0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;\nA0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;\nA0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;\nA0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;\nA0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;\nA0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;\nA0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;\nA0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;\nA0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;\nA0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;\nA0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;\nA0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;\nA0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;\nA0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;\nA0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;\nA0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;\nA0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;\nA0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;\nA0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;\nA0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;\nA0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;\nA0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;\nA0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;\nA0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;\nA0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;\nA0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;\nA0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;\nA0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;\nA0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;\nA0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;\nA0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;\nA0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;\nA0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;\nA0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;\nA0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;\nA0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;\nA0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;\nA0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;\nA0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;\nA0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;\nA0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;\nA0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;\nA0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;\nA0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;\nA0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;\nA0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;\nA0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;\nA0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;\nA0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;\nA0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;\nA0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;\nA0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;\nA0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;\nA0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;\nA0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;\nA0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;\nA0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;\nA0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;\nA0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;\nA0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;\nA0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;\nA0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;\nA0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;\nA0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;\nA0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;\nA100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;\nA101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;\nA102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;\nA103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;\nA104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;\nA105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;\nA106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;\nA107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;\nA108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;\nA109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;\nA10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;\nA10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;\nA10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;\nA10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;\nA10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;\nA10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;\nA110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;\nA111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;\nA112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;\nA113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;\nA114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;\nA115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;\nA116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;\nA117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;\nA118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;\nA119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;\nA11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;\nA11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;\nA11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;\nA11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;\nA11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;\nA11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;\nA120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;\nA121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;\nA122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;\nA123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;\nA124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;\nA125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;\nA126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;\nA127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;\nA128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;\nA129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;\nA12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;\nA12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;\nA12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;\nA12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;\nA12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;\nA12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;\nA130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;\nA131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;\nA132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;\nA133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;\nA134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;\nA135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;\nA136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;\nA137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;\nA138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;\nA139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;\nA13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;\nA13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;\nA13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;\nA13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;\nA13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;\nA13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;\nA140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;\nA141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;\nA142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;\nA143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;\nA144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;\nA145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;\nA146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;\nA147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;\nA148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;\nA149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;\nA14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;\nA14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;\nA14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;\nA14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;\nA14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;\nA14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;\nA150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;\nA151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;\nA152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;\nA153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;\nA154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;\nA155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;\nA156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;\nA157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;\nA158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;\nA159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;\nA15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;\nA15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;\nA15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;\nA15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;\nA15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;\nA15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;\nA160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;\nA161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;\nA162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;\nA163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;\nA164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;\nA165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;\nA166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;\nA167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;\nA168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;\nA169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;\nA16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;\nA16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;\nA16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;\nA16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;\nA16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;\nA16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;\nA170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;\nA171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;\nA172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;\nA173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;\nA174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;\nA175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;\nA176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;\nA177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;\nA178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;\nA179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;\nA17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;\nA17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;\nA17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;\nA17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;\nA17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;\nA17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;\nA180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;\nA181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;\nA182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;\nA183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;\nA184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;\nA185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;\nA186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;\nA187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;\nA188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;\nA189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;\nA18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;\nA18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;\nA18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;\nA18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;\nA18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;\nA18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;\nA190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;\nA191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;\nA192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;\nA193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;\nA194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;\nA195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;\nA196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;\nA197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;\nA198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;\nA199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;\nA19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;\nA19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;\nA19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;\nA19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;\nA19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;\nA19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;\nA1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;\nA1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;\nA1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;\nA1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;\nA1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;\nA1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;\nA1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;\nA1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;\nA1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;\nA1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;\nA1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;\nA1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;\nA1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;\nA1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;\nA1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;\nA1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;\nA1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;\nA1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;\nA1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;\nA1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;\nA1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;\nA1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;\nA1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;\nA1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;\nA1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;\nA1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;\nA1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;\nA1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;\nA1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;\nA1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;\nA1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;\nA1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;\nA1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;\nA1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;\nA1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;\nA1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;\nA1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;\nA1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;\nA1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;\nA1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;\nA1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;\nA1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;\nA1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;\nA1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;\nA1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;\nA1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;\nA1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;\nA1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;\nA1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;\nA1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;\nA1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;\nA1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;\nA1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;\nA1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;\nA1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;\nA1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;\nA1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;\nA1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;\nA1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;\nA1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;\nA1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;\nA1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;\nA1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;\nA1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;\nA1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;\nA1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;\nA1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;\nA1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;\nA1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;\nA1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;\nA1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;\nA1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;\nA1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;\nA1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;\nA1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;\nA1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;\nA1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;\nA1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;\nA1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;\nA1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;\nA1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;\nA1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;\nA1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;\nA1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;\nA1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;\nA1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;\nA1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;\nA1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;\nA1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;\nA1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;\nA1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;\nA1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;\nA1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;\nA1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;\nA1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;\nA1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;\nA200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;\nA201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;\nA202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;\nA203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;\nA204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;\nA205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;\nA206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;\nA207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;\nA208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;\nA209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;\nA20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;\nA20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;\nA20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;\nA20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;\nA20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;\nA20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;\nA210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;\nA211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;\nA212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;\nA213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;\nA214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;\nA215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;\nA216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;\nA217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;\nA218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;\nA219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;\nA21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;\nA21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;\nA21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;\nA21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;\nA21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;\nA21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;\nA220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;\nA221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;\nA222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;\nA223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;\nA224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;\nA225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;\nA226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;\nA227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;\nA228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;\nA229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;\nA22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;\nA22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;\nA22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;\nA22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;\nA22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;\nA22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;\nA230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;\nA231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;\nA232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;\nA233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;\nA234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;\nA235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;\nA236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;\nA237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;\nA238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;\nA239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;\nA23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;\nA23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;\nA23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;\nA23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;\nA23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;\nA23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;\nA240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;\nA241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;\nA242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;\nA243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;\nA244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;\nA245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;\nA246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;\nA247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;\nA248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;\nA249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;\nA24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;\nA24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;\nA24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;\nA24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;\nA24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;\nA24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;\nA250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;\nA251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;\nA252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;\nA253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;\nA254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;\nA255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;\nA256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;\nA257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;\nA258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;\nA259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;\nA25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;\nA25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;\nA25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;\nA25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;\nA25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;\nA25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;\nA260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;\nA261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;\nA262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;\nA263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;\nA264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;\nA265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;\nA266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;\nA267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;\nA268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;\nA269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;\nA26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;\nA26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;\nA26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;\nA26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;\nA26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;\nA26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;\nA270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;\nA271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;\nA272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;\nA273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;\nA274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;\nA275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;\nA276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;\nA277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;\nA278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;\nA279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;\nA27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;\nA27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;\nA27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;\nA27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;\nA27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;\nA27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;\nA280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;\nA281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;\nA282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;\nA283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;\nA284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;\nA285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;\nA286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;\nA287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;\nA288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;\nA289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;\nA28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;\nA28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;\nA28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;\nA28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;\nA28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;\nA28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;\nA290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;\nA291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;\nA292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;\nA293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;\nA294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;\nA295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;\nA296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;\nA297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;\nA298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;\nA299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;\nA29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;\nA29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;\nA29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;\nA29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;\nA29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;\nA29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;\nA2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;\nA2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;\nA2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;\nA2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;\nA2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;\nA2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;\nA2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;\nA2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;\nA2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;\nA2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;\nA2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;\nA2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;\nA2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;\nA2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;\nA2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;\nA2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;\nA2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;\nA2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;\nA2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;\nA2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;\nA2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;\nA2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;\nA2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;\nA2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;\nA2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;\nA2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;\nA2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;\nA2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;\nA2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;\nA2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;\nA2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;\nA2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;\nA2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;\nA2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;\nA2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;\nA2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;\nA2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;\nA2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;\nA2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;\nA2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;\nA2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;\nA2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;\nA2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;\nA2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;\nA2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;\nA2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;\nA2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;\nA2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;\nA2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;\nA2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;\nA2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;\nA2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;\nA2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;\nA2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;\nA2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;\nA2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;\nA2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;\nA2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;\nA2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;\nA2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;\nA2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;\nA2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;\nA2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;\nA2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;\nA2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;\nA2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;\nA2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;\nA2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;\nA2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;\nA2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;\nA2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;\nA2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;\nA2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;\nA2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;\nA2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;\nA2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;\nA2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;\nA2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;\nA2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;\nA2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;\nA2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;\nA2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;\nA2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;\nA2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;\nA2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;\nA2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;\nA2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;\nA2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;\nA2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;\nA2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;\nA2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;\nA2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;\nA2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;\nA2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;\nA2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;\nA2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;\nA300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;\nA301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;\nA302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;\nA303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;\nA304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;\nA305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;\nA306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;\nA307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;\nA308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;\nA309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;\nA30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;\nA30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;\nA30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;\nA30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;\nA30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;\nA30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;\nA310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;\nA311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;\nA312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;\nA313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;\nA314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;\nA315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;\nA316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;\nA317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;\nA318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;\nA319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;\nA31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;\nA31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;\nA31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;\nA31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;\nA31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;\nA31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;\nA320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;\nA321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;\nA322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;\nA323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;\nA324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;\nA325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;\nA326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;\nA327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;\nA328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;\nA329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;\nA32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;\nA32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;\nA32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;\nA32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;\nA32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;\nA32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;\nA330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;\nA331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;\nA332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;\nA333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;\nA334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;\nA335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;\nA336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;\nA337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;\nA338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;\nA339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;\nA33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;\nA33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;\nA33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;\nA33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;\nA33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;\nA33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;\nA340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;\nA341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;\nA342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;\nA343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;\nA344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;\nA345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;\nA346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;\nA347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;\nA348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;\nA349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;\nA34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;\nA34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;\nA34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;\nA34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;\nA34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;\nA34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;\nA350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;\nA351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;\nA352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;\nA353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;\nA354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;\nA355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;\nA356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;\nA357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;\nA358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;\nA359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;\nA35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;\nA35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;\nA35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;\nA35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;\nA35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;\nA35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;\nA360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;\nA361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;\nA362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;\nA363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;\nA364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;\nA365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;\nA366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;\nA367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;\nA368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;\nA369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;\nA36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;\nA36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;\nA36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;\nA36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;\nA36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;\nA36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;\nA370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;\nA371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;\nA372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;\nA373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;\nA374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;\nA375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;\nA376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;\nA377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;\nA378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;\nA379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;\nA37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;\nA37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;\nA37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;\nA37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;\nA37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;\nA37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;\nA380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;\nA381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;\nA382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;\nA383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;\nA384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;\nA385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;\nA386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;\nA387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;\nA388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;\nA389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;\nA38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;\nA38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;\nA38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;\nA38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;\nA38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;\nA38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;\nA390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;\nA391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;\nA392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;\nA393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;\nA394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;\nA395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;\nA396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;\nA397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;\nA398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;\nA399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;\nA39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;\nA39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;\nA39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;\nA39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;\nA39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;\nA39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;\nA3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;\nA3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;\nA3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;\nA3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;\nA3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;\nA3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;\nA3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;\nA3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;\nA3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;\nA3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;\nA3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;\nA3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;\nA3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;\nA3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;\nA3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;\nA3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;\nA3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;\nA3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;\nA3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;\nA3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;\nA3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;\nA3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;\nA3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;\nA3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;\nA3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;\nA3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;\nA3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;\nA3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;\nA3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;\nA3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;\nA3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;\nA3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;\nA3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;\nA3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;\nA3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;\nA3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;\nA3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;\nA3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;\nA3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;\nA3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;\nA3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;\nA3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;\nA3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;\nA3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;\nA3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;\nA3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;\nA3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;\nA3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;\nA3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;\nA3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;\nA3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;\nA3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;\nA3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;\nA3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;\nA3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;\nA3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;\nA3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;\nA3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;\nA3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;\nA3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;\nA3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;\nA3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;\nA3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;\nA3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;\nA3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;\nA3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;\nA3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;\nA3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;\nA3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;\nA3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;\nA3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;\nA3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;\nA3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;\nA3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;\nA3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;\nA3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;\nA3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;\nA3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;\nA3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;\nA3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;\nA3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;\nA3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;\nA3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;\nA3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;\nA3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;\nA3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;\nA3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;\nA3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;\nA3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;\nA3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;\nA3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;\nA3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;\nA3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;\nA3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;\nA3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;\nA3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;\nA400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;\nA401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;\nA402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;\nA403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;\nA404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;\nA405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;\nA406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;\nA407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;\nA408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;\nA409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;\nA40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;\nA40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;\nA40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;\nA40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;\nA40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;\nA40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;\nA410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;\nA411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;\nA412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;\nA413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;\nA414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;\nA415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;\nA416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;\nA417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;\nA418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;\nA419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;\nA41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;\nA41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;\nA41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;\nA41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;\nA41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;\nA41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;\nA420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;\nA421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;\nA422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;\nA423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;\nA424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;\nA425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;\nA426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;\nA427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;\nA428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;\nA429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;\nA42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;\nA42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;\nA42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;\nA42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;\nA42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;\nA42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;\nA430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;\nA431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;\nA432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;\nA433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;\nA434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;\nA435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;\nA436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;\nA437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;\nA438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;\nA439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;\nA43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;\nA43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;\nA43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;\nA43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;\nA43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;\nA43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;\nA440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;\nA441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;\nA442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;\nA443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;\nA444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;\nA445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;\nA446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;\nA447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;\nA448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;\nA449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;\nA44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;\nA44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;\nA44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;\nA44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;\nA44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;\nA44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;\nA450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;\nA451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;\nA452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;\nA453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;\nA454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;\nA455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;\nA456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;\nA457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;\nA458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;\nA459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;\nA45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;\nA45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;\nA45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;\nA45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;\nA45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;\nA45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;\nA460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;\nA461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;\nA462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;\nA463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;\nA464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;\nA465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;\nA466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;\nA467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;\nA468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;\nA469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;\nA46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;\nA46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;\nA46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;\nA46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;\nA46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;\nA46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;\nA470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;\nA471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;\nA472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;\nA473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;\nA474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;\nA475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;\nA476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;\nA477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;\nA478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;\nA479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;\nA47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;\nA47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;\nA47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;\nA47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;\nA47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;\nA47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;\nA480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;\nA481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;\nA482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;\nA483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;\nA484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;\nA485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;\nA486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;\nA487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;\nA488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;\nA489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;\nA48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;\nA48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;\nA48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;\nA490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;\nA491;YI RADICAL LI;So;0;ON;;;;;N;;;;;\nA492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;\nA493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;\nA494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;\nA495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;\nA496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;\nA497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;\nA498;YI RADICAL MI;So;0;ON;;;;;N;;;;;\nA499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;\nA49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;\nA49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;\nA49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;\nA49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;\nA49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;\nA49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;\nA4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;\nA4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;\nA4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;;\nA4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;;\nA4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;\nA4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;\nA4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;\nA4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;\nA4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;\nA4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;\nA4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;\nA4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;\nA4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;\nA4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;\nA4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;\nA4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;\nA4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;\nA4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;\nA4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;\nA4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;\nA4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;;\nA4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;\nA4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;\nA4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;\nA4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;\nA4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;\nA4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;\nA4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;\nA4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;\nA4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;\nA4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;\nA4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;\nA4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;\nA4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;;\nA4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;\nA4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;\nA4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;\nA4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;;\nA4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;\nA4D0;LISU LETTER BA;Lo;0;L;;;;;N;;;;;\nA4D1;LISU LETTER PA;Lo;0;L;;;;;N;;;;;\nA4D2;LISU LETTER PHA;Lo;0;L;;;;;N;;;;;\nA4D3;LISU LETTER DA;Lo;0;L;;;;;N;;;;;\nA4D4;LISU LETTER TA;Lo;0;L;;;;;N;;;;;\nA4D5;LISU LETTER THA;Lo;0;L;;;;;N;;;;;\nA4D6;LISU LETTER GA;Lo;0;L;;;;;N;;;;;\nA4D7;LISU LETTER KA;Lo;0;L;;;;;N;;;;;\nA4D8;LISU LETTER KHA;Lo;0;L;;;;;N;;;;;\nA4D9;LISU LETTER JA;Lo;0;L;;;;;N;;;;;\nA4DA;LISU LETTER CA;Lo;0;L;;;;;N;;;;;\nA4DB;LISU LETTER CHA;Lo;0;L;;;;;N;;;;;\nA4DC;LISU LETTER DZA;Lo;0;L;;;;;N;;;;;\nA4DD;LISU LETTER TSA;Lo;0;L;;;;;N;;;;;\nA4DE;LISU LETTER TSHA;Lo;0;L;;;;;N;;;;;\nA4DF;LISU LETTER MA;Lo;0;L;;;;;N;;;;;\nA4E0;LISU LETTER NA;Lo;0;L;;;;;N;;;;;\nA4E1;LISU LETTER LA;Lo;0;L;;;;;N;;;;;\nA4E2;LISU LETTER SA;Lo;0;L;;;;;N;;;;;\nA4E3;LISU LETTER ZHA;Lo;0;L;;;;;N;;;;;\nA4E4;LISU LETTER ZA;Lo;0;L;;;;;N;;;;;\nA4E5;LISU LETTER NGA;Lo;0;L;;;;;N;;;;;\nA4E6;LISU LETTER HA;Lo;0;L;;;;;N;;;;;\nA4E7;LISU LETTER XA;Lo;0;L;;;;;N;;;;;\nA4E8;LISU LETTER HHA;Lo;0;L;;;;;N;;;;;\nA4E9;LISU LETTER FA;Lo;0;L;;;;;N;;;;;\nA4EA;LISU LETTER WA;Lo;0;L;;;;;N;;;;;\nA4EB;LISU LETTER SHA;Lo;0;L;;;;;N;;;;;\nA4EC;LISU LETTER YA;Lo;0;L;;;;;N;;;;;\nA4ED;LISU LETTER GHA;Lo;0;L;;;;;N;;;;;\nA4EE;LISU LETTER A;Lo;0;L;;;;;N;;;;;\nA4EF;LISU LETTER AE;Lo;0;L;;;;;N;;;;;\nA4F0;LISU LETTER E;Lo;0;L;;;;;N;;;;;\nA4F1;LISU LETTER EU;Lo;0;L;;;;;N;;;;;\nA4F2;LISU LETTER I;Lo;0;L;;;;;N;;;;;\nA4F3;LISU LETTER O;Lo;0;L;;;;;N;;;;;\nA4F4;LISU LETTER U;Lo;0;L;;;;;N;;;;;\nA4F5;LISU LETTER UE;Lo;0;L;;;;;N;;;;;\nA4F6;LISU LETTER UH;Lo;0;L;;;;;N;;;;;\nA4F7;LISU LETTER OE;Lo;0;L;;;;;N;;;;;\nA4F8;LISU LETTER TONE MYA TI;Lm;0;L;;;;;N;;;;;\nA4F9;LISU LETTER TONE NA PO;Lm;0;L;;;;;N;;;;;\nA4FA;LISU LETTER TONE MYA CYA;Lm;0;L;;;;;N;;;;;\nA4FB;LISU LETTER TONE MYA BO;Lm;0;L;;;;;N;;;;;\nA4FC;LISU LETTER TONE MYA NA;Lm;0;L;;;;;N;;;;;\nA4FD;LISU LETTER TONE MYA JEU;Lm;0;L;;;;;N;;;;;\nA4FE;LISU PUNCTUATION COMMA;Po;0;L;;;;;N;;;;;\nA4FF;LISU PUNCTUATION FULL STOP;Po;0;L;;;;;N;;;;;\nA500;VAI SYLLABLE EE;Lo;0;L;;;;;N;;;;;\nA501;VAI SYLLABLE EEN;Lo;0;L;;;;;N;;;;;\nA502;VAI SYLLABLE HEE;Lo;0;L;;;;;N;;;;;\nA503;VAI SYLLABLE WEE;Lo;0;L;;;;;N;;;;;\nA504;VAI SYLLABLE WEEN;Lo;0;L;;;;;N;;;;;\nA505;VAI SYLLABLE PEE;Lo;0;L;;;;;N;;;;;\nA506;VAI SYLLABLE BHEE;Lo;0;L;;;;;N;;;;;\nA507;VAI SYLLABLE BEE;Lo;0;L;;;;;N;;;;;\nA508;VAI SYLLABLE MBEE;Lo;0;L;;;;;N;;;;;\nA509;VAI SYLLABLE KPEE;Lo;0;L;;;;;N;;;;;\nA50A;VAI SYLLABLE MGBEE;Lo;0;L;;;;;N;;;;;\nA50B;VAI SYLLABLE GBEE;Lo;0;L;;;;;N;;;;;\nA50C;VAI SYLLABLE FEE;Lo;0;L;;;;;N;;;;;\nA50D;VAI SYLLABLE VEE;Lo;0;L;;;;;N;;;;;\nA50E;VAI SYLLABLE TEE;Lo;0;L;;;;;N;;;;;\nA50F;VAI SYLLABLE THEE;Lo;0;L;;;;;N;;;;;\nA510;VAI SYLLABLE DHEE;Lo;0;L;;;;;N;;;;;\nA511;VAI SYLLABLE DHHEE;Lo;0;L;;;;;N;;;;;\nA512;VAI SYLLABLE LEE;Lo;0;L;;;;;N;;;;;\nA513;VAI SYLLABLE REE;Lo;0;L;;;;;N;;;;;\nA514;VAI SYLLABLE DEE;Lo;0;L;;;;;N;;;;;\nA515;VAI SYLLABLE NDEE;Lo;0;L;;;;;N;;;;;\nA516;VAI SYLLABLE SEE;Lo;0;L;;;;;N;;;;;\nA517;VAI SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;\nA518;VAI SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;\nA519;VAI SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;\nA51A;VAI SYLLABLE CEE;Lo;0;L;;;;;N;;;;;\nA51B;VAI SYLLABLE JEE;Lo;0;L;;;;;N;;;;;\nA51C;VAI SYLLABLE NJEE;Lo;0;L;;;;;N;;;;;\nA51D;VAI SYLLABLE YEE;Lo;0;L;;;;;N;;;;;\nA51E;VAI SYLLABLE KEE;Lo;0;L;;;;;N;;;;;\nA51F;VAI SYLLABLE NGGEE;Lo;0;L;;;;;N;;;;;\nA520;VAI SYLLABLE GEE;Lo;0;L;;;;;N;;;;;\nA521;VAI SYLLABLE MEE;Lo;0;L;;;;;N;;;;;\nA522;VAI SYLLABLE NEE;Lo;0;L;;;;;N;;;;;\nA523;VAI SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;\nA524;VAI SYLLABLE I;Lo;0;L;;;;;N;;;;;\nA525;VAI SYLLABLE IN;Lo;0;L;;;;;N;;;;;\nA526;VAI SYLLABLE HI;Lo;0;L;;;;;N;;;;;\nA527;VAI SYLLABLE HIN;Lo;0;L;;;;;N;;;;;\nA528;VAI SYLLABLE WI;Lo;0;L;;;;;N;;;;;\nA529;VAI SYLLABLE WIN;Lo;0;L;;;;;N;;;;;\nA52A;VAI SYLLABLE PI;Lo;0;L;;;;;N;;;;;\nA52B;VAI SYLLABLE BHI;Lo;0;L;;;;;N;;;;;\nA52C;VAI SYLLABLE BI;Lo;0;L;;;;;N;;;;;\nA52D;VAI SYLLABLE MBI;Lo;0;L;;;;;N;;;;;\nA52E;VAI SYLLABLE KPI;Lo;0;L;;;;;N;;;;;\nA52F;VAI SYLLABLE MGBI;Lo;0;L;;;;;N;;;;;\nA530;VAI SYLLABLE GBI;Lo;0;L;;;;;N;;;;;\nA531;VAI SYLLABLE FI;Lo;0;L;;;;;N;;;;;\nA532;VAI SYLLABLE VI;Lo;0;L;;;;;N;;;;;\nA533;VAI SYLLABLE TI;Lo;0;L;;;;;N;;;;;\nA534;VAI SYLLABLE THI;Lo;0;L;;;;;N;;;;;\nA535;VAI SYLLABLE DHI;Lo;0;L;;;;;N;;;;;\nA536;VAI SYLLABLE DHHI;Lo;0;L;;;;;N;;;;;\nA537;VAI SYLLABLE LI;Lo;0;L;;;;;N;;;;;\nA538;VAI SYLLABLE RI;Lo;0;L;;;;;N;;;;;\nA539;VAI SYLLABLE DI;Lo;0;L;;;;;N;;;;;\nA53A;VAI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;\nA53B;VAI SYLLABLE SI;Lo;0;L;;;;;N;;;;;\nA53C;VAI SYLLABLE SHI;Lo;0;L;;;;;N;;;;;\nA53D;VAI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;\nA53E;VAI SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;\nA53F;VAI SYLLABLE CI;Lo;0;L;;;;;N;;;;;\nA540;VAI SYLLABLE JI;Lo;0;L;;;;;N;;;;;\nA541;VAI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;\nA542;VAI SYLLABLE YI;Lo;0;L;;;;;N;;;;;\nA543;VAI SYLLABLE KI;Lo;0;L;;;;;N;;;;;\nA544;VAI SYLLABLE NGGI;Lo;0;L;;;;;N;;;;;\nA545;VAI SYLLABLE GI;Lo;0;L;;;;;N;;;;;\nA546;VAI SYLLABLE MI;Lo;0;L;;;;;N;;;;;\nA547;VAI SYLLABLE NI;Lo;0;L;;;;;N;;;;;\nA548;VAI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;\nA549;VAI SYLLABLE A;Lo;0;L;;;;;N;;;;;\nA54A;VAI SYLLABLE AN;Lo;0;L;;;;;N;;;;;\nA54B;VAI SYLLABLE NGAN;Lo;0;L;;;;;N;;;;;\nA54C;VAI SYLLABLE HA;Lo;0;L;;;;;N;;;;;\nA54D;VAI SYLLABLE HAN;Lo;0;L;;;;;N;;;;;\nA54E;VAI SYLLABLE WA;Lo;0;L;;;;;N;;;;;\nA54F;VAI SYLLABLE WAN;Lo;0;L;;;;;N;;;;;\nA550;VAI SYLLABLE PA;Lo;0;L;;;;;N;;;;;\nA551;VAI SYLLABLE BHA;Lo;0;L;;;;;N;;;;;\nA552;VAI SYLLABLE BA;Lo;0;L;;;;;N;;;;;\nA553;VAI SYLLABLE MBA;Lo;0;L;;;;;N;;;;;\nA554;VAI SYLLABLE KPA;Lo;0;L;;;;;N;;;;;\nA555;VAI SYLLABLE KPAN;Lo;0;L;;;;;N;;;;;\nA556;VAI SYLLABLE MGBA;Lo;0;L;;;;;N;;;;;\nA557;VAI SYLLABLE GBA;Lo;0;L;;;;;N;;;;;\nA558;VAI SYLLABLE FA;Lo;0;L;;;;;N;;;;;\nA559;VAI SYLLABLE VA;Lo;0;L;;;;;N;;;;;\nA55A;VAI SYLLABLE TA;Lo;0;L;;;;;N;;;;;\nA55B;VAI SYLLABLE THA;Lo;0;L;;;;;N;;;;;\nA55C;VAI SYLLABLE DHA;Lo;0;L;;;;;N;;;;;\nA55D;VAI SYLLABLE DHHA;Lo;0;L;;;;;N;;;;;\nA55E;VAI SYLLABLE LA;Lo;0;L;;;;;N;;;;;\nA55F;VAI SYLLABLE RA;Lo;0;L;;;;;N;;;;;\nA560;VAI SYLLABLE DA;Lo;0;L;;;;;N;;;;;\nA561;VAI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;\nA562;VAI SYLLABLE SA;Lo;0;L;;;;;N;;;;;\nA563;VAI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;\nA564;VAI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;\nA565;VAI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;\nA566;VAI SYLLABLE CA;Lo;0;L;;;;;N;;;;;\nA567;VAI SYLLABLE JA;Lo;0;L;;;;;N;;;;;\nA568;VAI SYLLABLE NJA;Lo;0;L;;;;;N;;;;;\nA569;VAI SYLLABLE YA;Lo;0;L;;;;;N;;;;;\nA56A;VAI SYLLABLE KA;Lo;0;L;;;;;N;;;;;\nA56B;VAI SYLLABLE KAN;Lo;0;L;;;;;N;;;;;\nA56C;VAI SYLLABLE NGGA;Lo;0;L;;;;;N;;;;;\nA56D;VAI SYLLABLE GA;Lo;0;L;;;;;N;;;;;\nA56E;VAI SYLLABLE MA;Lo;0;L;;;;;N;;;;;\nA56F;VAI SYLLABLE NA;Lo;0;L;;;;;N;;;;;\nA570;VAI SYLLABLE NYA;Lo;0;L;;;;;N;;;;;\nA571;VAI SYLLABLE OO;Lo;0;L;;;;;N;;;;;\nA572;VAI SYLLABLE OON;Lo;0;L;;;;;N;;;;;\nA573;VAI SYLLABLE HOO;Lo;0;L;;;;;N;;;;;\nA574;VAI SYLLABLE WOO;Lo;0;L;;;;;N;;;;;\nA575;VAI SYLLABLE WOON;Lo;0;L;;;;;N;;;;;\nA576;VAI SYLLABLE POO;Lo;0;L;;;;;N;;;;;\nA577;VAI SYLLABLE BHOO;Lo;0;L;;;;;N;;;;;\nA578;VAI SYLLABLE BOO;Lo;0;L;;;;;N;;;;;\nA579;VAI SYLLABLE MBOO;Lo;0;L;;;;;N;;;;;\nA57A;VAI SYLLABLE KPOO;Lo;0;L;;;;;N;;;;;\nA57B;VAI SYLLABLE MGBOO;Lo;0;L;;;;;N;;;;;\nA57C;VAI SYLLABLE GBOO;Lo;0;L;;;;;N;;;;;\nA57D;VAI SYLLABLE FOO;Lo;0;L;;;;;N;;;;;\nA57E;VAI SYLLABLE VOO;Lo;0;L;;;;;N;;;;;\nA57F;VAI SYLLABLE TOO;Lo;0;L;;;;;N;;;;;\nA580;VAI SYLLABLE THOO;Lo;0;L;;;;;N;;;;;\nA581;VAI SYLLABLE DHOO;Lo;0;L;;;;;N;;;;;\nA582;VAI SYLLABLE DHHOO;Lo;0;L;;;;;N;;;;;\nA583;VAI SYLLABLE LOO;Lo;0;L;;;;;N;;;;;\nA584;VAI SYLLABLE ROO;Lo;0;L;;;;;N;;;;;\nA585;VAI SYLLABLE DOO;Lo;0;L;;;;;N;;;;;\nA586;VAI SYLLABLE NDOO;Lo;0;L;;;;;N;;;;;\nA587;VAI SYLLABLE SOO;Lo;0;L;;;;;N;;;;;\nA588;VAI SYLLABLE SHOO;Lo;0;L;;;;;N;;;;;\nA589;VAI SYLLABLE ZOO;Lo;0;L;;;;;N;;;;;\nA58A;VAI SYLLABLE ZHOO;Lo;0;L;;;;;N;;;;;\nA58B;VAI SYLLABLE COO;Lo;0;L;;;;;N;;;;;\nA58C;VAI SYLLABLE JOO;Lo;0;L;;;;;N;;;;;\nA58D;VAI SYLLABLE NJOO;Lo;0;L;;;;;N;;;;;\nA58E;VAI SYLLABLE YOO;Lo;0;L;;;;;N;;;;;\nA58F;VAI SYLLABLE KOO;Lo;0;L;;;;;N;;;;;\nA590;VAI SYLLABLE NGGOO;Lo;0;L;;;;;N;;;;;\nA591;VAI SYLLABLE GOO;Lo;0;L;;;;;N;;;;;\nA592;VAI SYLLABLE MOO;Lo;0;L;;;;;N;;;;;\nA593;VAI SYLLABLE NOO;Lo;0;L;;;;;N;;;;;\nA594;VAI SYLLABLE NYOO;Lo;0;L;;;;;N;;;;;\nA595;VAI SYLLABLE U;Lo;0;L;;;;;N;;;;;\nA596;VAI SYLLABLE UN;Lo;0;L;;;;;N;;;;;\nA597;VAI SYLLABLE HU;Lo;0;L;;;;;N;;;;;\nA598;VAI SYLLABLE HUN;Lo;0;L;;;;;N;;;;;\nA599;VAI SYLLABLE WU;Lo;0;L;;;;;N;;;;;\nA59A;VAI SYLLABLE WUN;Lo;0;L;;;;;N;;;;;\nA59B;VAI SYLLABLE PU;Lo;0;L;;;;;N;;;;;\nA59C;VAI SYLLABLE BHU;Lo;0;L;;;;;N;;;;;\nA59D;VAI SYLLABLE BU;Lo;0;L;;;;;N;;;;;\nA59E;VAI SYLLABLE MBU;Lo;0;L;;;;;N;;;;;\nA59F;VAI SYLLABLE KPU;Lo;0;L;;;;;N;;;;;\nA5A0;VAI SYLLABLE MGBU;Lo;0;L;;;;;N;;;;;\nA5A1;VAI SYLLABLE GBU;Lo;0;L;;;;;N;;;;;\nA5A2;VAI SYLLABLE FU;Lo;0;L;;;;;N;;;;;\nA5A3;VAI SYLLABLE VU;Lo;0;L;;;;;N;;;;;\nA5A4;VAI SYLLABLE TU;Lo;0;L;;;;;N;;;;;\nA5A5;VAI SYLLABLE THU;Lo;0;L;;;;;N;;;;;\nA5A6;VAI SYLLABLE DHU;Lo;0;L;;;;;N;;;;;\nA5A7;VAI SYLLABLE DHHU;Lo;0;L;;;;;N;;;;;\nA5A8;VAI SYLLABLE LU;Lo;0;L;;;;;N;;;;;\nA5A9;VAI SYLLABLE RU;Lo;0;L;;;;;N;;;;;\nA5AA;VAI SYLLABLE DU;Lo;0;L;;;;;N;;;;;\nA5AB;VAI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;\nA5AC;VAI SYLLABLE SU;Lo;0;L;;;;;N;;;;;\nA5AD;VAI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;\nA5AE;VAI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;\nA5AF;VAI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;\nA5B0;VAI SYLLABLE CU;Lo;0;L;;;;;N;;;;;\nA5B1;VAI SYLLABLE JU;Lo;0;L;;;;;N;;;;;\nA5B2;VAI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;\nA5B3;VAI SYLLABLE YU;Lo;0;L;;;;;N;;;;;\nA5B4;VAI SYLLABLE KU;Lo;0;L;;;;;N;;;;;\nA5B5;VAI SYLLABLE NGGU;Lo;0;L;;;;;N;;;;;\nA5B6;VAI SYLLABLE GU;Lo;0;L;;;;;N;;;;;\nA5B7;VAI SYLLABLE MU;Lo;0;L;;;;;N;;;;;\nA5B8;VAI SYLLABLE NU;Lo;0;L;;;;;N;;;;;\nA5B9;VAI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;\nA5BA;VAI SYLLABLE O;Lo;0;L;;;;;N;;;;;\nA5BB;VAI SYLLABLE ON;Lo;0;L;;;;;N;;;;;\nA5BC;VAI SYLLABLE NGON;Lo;0;L;;;;;N;;;;;\nA5BD;VAI SYLLABLE HO;Lo;0;L;;;;;N;;;;;\nA5BE;VAI SYLLABLE HON;Lo;0;L;;;;;N;;;;;\nA5BF;VAI SYLLABLE WO;Lo;0;L;;;;;N;;;;;\nA5C0;VAI SYLLABLE WON;Lo;0;L;;;;;N;;;;;\nA5C1;VAI SYLLABLE PO;Lo;0;L;;;;;N;;;;;\nA5C2;VAI SYLLABLE BHO;Lo;0;L;;;;;N;;;;;\nA5C3;VAI SYLLABLE BO;Lo;0;L;;;;;N;;;;;\nA5C4;VAI SYLLABLE MBO;Lo;0;L;;;;;N;;;;;\nA5C5;VAI SYLLABLE KPO;Lo;0;L;;;;;N;;;;;\nA5C6;VAI SYLLABLE MGBO;Lo;0;L;;;;;N;;;;;\nA5C7;VAI SYLLABLE GBO;Lo;0;L;;;;;N;;;;;\nA5C8;VAI SYLLABLE GBON;Lo;0;L;;;;;N;;;;;\nA5C9;VAI SYLLABLE FO;Lo;0;L;;;;;N;;;;;\nA5CA;VAI SYLLABLE VO;Lo;0;L;;;;;N;;;;;\nA5CB;VAI SYLLABLE TO;Lo;0;L;;;;;N;;;;;\nA5CC;VAI SYLLABLE THO;Lo;0;L;;;;;N;;;;;\nA5CD;VAI SYLLABLE DHO;Lo;0;L;;;;;N;;;;;\nA5CE;VAI SYLLABLE DHHO;Lo;0;L;;;;;N;;;;;\nA5CF;VAI SYLLABLE LO;Lo;0;L;;;;;N;;;;;\nA5D0;VAI SYLLABLE RO;Lo;0;L;;;;;N;;;;;\nA5D1;VAI SYLLABLE DO;Lo;0;L;;;;;N;;;;;\nA5D2;VAI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;\nA5D3;VAI SYLLABLE SO;Lo;0;L;;;;;N;;;;;\nA5D4;VAI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;\nA5D5;VAI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;\nA5D6;VAI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;\nA5D7;VAI SYLLABLE CO;Lo;0;L;;;;;N;;;;;\nA5D8;VAI SYLLABLE JO;Lo;0;L;;;;;N;;;;;\nA5D9;VAI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;\nA5DA;VAI SYLLABLE YO;Lo;0;L;;;;;N;;;;;\nA5DB;VAI SYLLABLE KO;Lo;0;L;;;;;N;;;;;\nA5DC;VAI SYLLABLE NGGO;Lo;0;L;;;;;N;;;;;\nA5DD;VAI SYLLABLE GO;Lo;0;L;;;;;N;;;;;\nA5DE;VAI SYLLABLE MO;Lo;0;L;;;;;N;;;;;\nA5DF;VAI SYLLABLE NO;Lo;0;L;;;;;N;;;;;\nA5E0;VAI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;\nA5E1;VAI SYLLABLE E;Lo;0;L;;;;;N;;;;;\nA5E2;VAI SYLLABLE EN;Lo;0;L;;;;;N;;;;;\nA5E3;VAI SYLLABLE NGEN;Lo;0;L;;;;;N;;;;;\nA5E4;VAI SYLLABLE HE;Lo;0;L;;;;;N;;;;;\nA5E5;VAI SYLLABLE HEN;Lo;0;L;;;;;N;;;;;\nA5E6;VAI SYLLABLE WE;Lo;0;L;;;;;N;;;;;\nA5E7;VAI SYLLABLE WEN;Lo;0;L;;;;;N;;;;;\nA5E8;VAI SYLLABLE PE;Lo;0;L;;;;;N;;;;;\nA5E9;VAI SYLLABLE BHE;Lo;0;L;;;;;N;;;;;\nA5EA;VAI SYLLABLE BE;Lo;0;L;;;;;N;;;;;\nA5EB;VAI SYLLABLE MBE;Lo;0;L;;;;;N;;;;;\nA5EC;VAI SYLLABLE KPE;Lo;0;L;;;;;N;;;;;\nA5ED;VAI SYLLABLE KPEN;Lo;0;L;;;;;N;;;;;\nA5EE;VAI SYLLABLE MGBE;Lo;0;L;;;;;N;;;;;\nA5EF;VAI SYLLABLE GBE;Lo;0;L;;;;;N;;;;;\nA5F0;VAI SYLLABLE GBEN;Lo;0;L;;;;;N;;;;;\nA5F1;VAI SYLLABLE FE;Lo;0;L;;;;;N;;;;;\nA5F2;VAI SYLLABLE VE;Lo;0;L;;;;;N;;;;;\nA5F3;VAI SYLLABLE TE;Lo;0;L;;;;;N;;;;;\nA5F4;VAI SYLLABLE THE;Lo;0;L;;;;;N;;;;;\nA5F5;VAI SYLLABLE DHE;Lo;0;L;;;;;N;;;;;\nA5F6;VAI SYLLABLE DHHE;Lo;0;L;;;;;N;;;;;\nA5F7;VAI SYLLABLE LE;Lo;0;L;;;;;N;;;;;\nA5F8;VAI SYLLABLE RE;Lo;0;L;;;;;N;;;;;\nA5F9;VAI SYLLABLE DE;Lo;0;L;;;;;N;;;;;\nA5FA;VAI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;\nA5FB;VAI SYLLABLE SE;Lo;0;L;;;;;N;;;;;\nA5FC;VAI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;\nA5FD;VAI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;\nA5FE;VAI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;\nA5FF;VAI SYLLABLE CE;Lo;0;L;;;;;N;;;;;\nA600;VAI SYLLABLE JE;Lo;0;L;;;;;N;;;;;\nA601;VAI SYLLABLE NJE;Lo;0;L;;;;;N;;;;;\nA602;VAI SYLLABLE YE;Lo;0;L;;;;;N;;;;;\nA603;VAI SYLLABLE KE;Lo;0;L;;;;;N;;;;;\nA604;VAI SYLLABLE NGGE;Lo;0;L;;;;;N;;;;;\nA605;VAI SYLLABLE NGGEN;Lo;0;L;;;;;N;;;;;\nA606;VAI SYLLABLE GE;Lo;0;L;;;;;N;;;;;\nA607;VAI SYLLABLE GEN;Lo;0;L;;;;;N;;;;;\nA608;VAI SYLLABLE ME;Lo;0;L;;;;;N;;;;;\nA609;VAI SYLLABLE NE;Lo;0;L;;;;;N;;;;;\nA60A;VAI SYLLABLE NYE;Lo;0;L;;;;;N;;;;;\nA60B;VAI SYLLABLE NG;Lo;0;L;;;;;N;;;;;\nA60C;VAI SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;;\nA60D;VAI COMMA;Po;0;ON;;;;;N;;;;;\nA60E;VAI FULL STOP;Po;0;ON;;;;;N;;;;;\nA60F;VAI QUESTION MARK;Po;0;ON;;;;;N;;;;;\nA610;VAI SYLLABLE NDOLE FA;Lo;0;L;;;;;N;;;;;\nA611;VAI SYLLABLE NDOLE KA;Lo;0;L;;;;;N;;;;;\nA612;VAI SYLLABLE NDOLE SOO;Lo;0;L;;;;;N;;;;;\nA613;VAI SYMBOL FEENG;Lo;0;L;;;;;N;;;;;\nA614;VAI SYMBOL KEENG;Lo;0;L;;;;;N;;;;;\nA615;VAI SYMBOL TING;Lo;0;L;;;;;N;;;;;\nA616;VAI SYMBOL NII;Lo;0;L;;;;;N;;;;;\nA617;VAI SYMBOL BANG;Lo;0;L;;;;;N;;;;;\nA618;VAI SYMBOL FAA;Lo;0;L;;;;;N;;;;;\nA619;VAI SYMBOL TAA;Lo;0;L;;;;;N;;;;;\nA61A;VAI SYMBOL DANG;Lo;0;L;;;;;N;;;;;\nA61B;VAI SYMBOL DOONG;Lo;0;L;;;;;N;;;;;\nA61C;VAI SYMBOL KUNG;Lo;0;L;;;;;N;;;;;\nA61D;VAI SYMBOL TONG;Lo;0;L;;;;;N;;;;;\nA61E;VAI SYMBOL DO-O;Lo;0;L;;;;;N;;;;;\nA61F;VAI SYMBOL JONG;Lo;0;L;;;;;N;;;;;\nA620;VAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\nA621;VAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\nA622;VAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\nA623;VAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\nA624;VAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\nA625;VAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\nA626;VAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\nA627;VAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\nA628;VAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\nA629;VAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\nA62A;VAI SYLLABLE NDOLE MA;Lo;0;L;;;;;N;;;;;\nA62B;VAI SYLLABLE NDOLE DO;Lo;0;L;;;;;N;;;;;\nA640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641;\nA641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640\nA642;CYRILLIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;A643;\nA643;CYRILLIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;A642;;A642\nA644;CYRILLIC CAPITAL LETTER REVERSED DZE;Lu;0;L;;;;;N;;;;A645;\nA645;CYRILLIC SMALL LETTER REVERSED DZE;Ll;0;L;;;;;N;;;A644;;A644\nA646;CYRILLIC CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;A647;\nA647;CYRILLIC SMALL LETTER IOTA;Ll;0;L;;;;;N;;;A646;;A646\nA648;CYRILLIC CAPITAL LETTER DJERV;Lu;0;L;;;;;N;;;;A649;\nA649;CYRILLIC SMALL LETTER DJERV;Ll;0;L;;;;;N;;;A648;;A648\nA64A;CYRILLIC CAPITAL LETTER MONOGRAPH UK;Lu;0;L;;;;;N;;;;A64B;\nA64B;CYRILLIC SMALL LETTER MONOGRAPH UK;Ll;0;L;;;;;N;;;A64A;;A64A\nA64C;CYRILLIC CAPITAL LETTER BROAD OMEGA;Lu;0;L;;;;;N;;;;A64D;\nA64D;CYRILLIC SMALL LETTER BROAD OMEGA;Ll;0;L;;;;;N;;;A64C;;A64C\nA64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F;\nA64F;CYRILLIC SMALL LETTER NEUTRAL YER;Ll;0;L;;;;;N;;;A64E;;A64E\nA650;CYRILLIC CAPITAL LETTER YERU WITH BACK YER;Lu;0;L;;;;;N;;;;A651;\nA651;CYRILLIC SMALL LETTER YERU WITH BACK YER;Ll;0;L;;;;;N;;;A650;;A650\nA652;CYRILLIC CAPITAL LETTER IOTIFIED YAT;Lu;0;L;;;;;N;;;;A653;\nA653;CYRILLIC SMALL LETTER IOTIFIED YAT;Ll;0;L;;;;;N;;;A652;;A652\nA654;CYRILLIC CAPITAL LETTER REVERSED YU;Lu;0;L;;;;;N;;;;A655;\nA655;CYRILLIC SMALL LETTER REVERSED YU;Ll;0;L;;;;;N;;;A654;;A654\nA656;CYRILLIC CAPITAL LETTER IOTIFIED A;Lu;0;L;;;;;N;;;;A657;\nA657;CYRILLIC SMALL LETTER IOTIFIED A;Ll;0;L;;;;;N;;;A656;;A656\nA658;CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A659;\nA659;CYRILLIC SMALL LETTER CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A658;;A658\nA65A;CYRILLIC CAPITAL LETTER BLENDED YUS;Lu;0;L;;;;;N;;;;A65B;\nA65B;CYRILLIC SMALL LETTER BLENDED YUS;Ll;0;L;;;;;N;;;A65A;;A65A\nA65C;CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A65D;\nA65D;CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A65C;;A65C\nA65E;CYRILLIC CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;A65F;\nA65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E\nA660;CYRILLIC CAPITAL LETTER REVERSED TSE;Lu;0;L;;;;;N;;;;A661;\nA661;CYRILLIC SMALL LETTER REVERSED TSE;Ll;0;L;;;;;N;;;A660;;A660\nA662;CYRILLIC CAPITAL LETTER SOFT DE;Lu;0;L;;;;;N;;;;A663;\nA663;CYRILLIC SMALL LETTER SOFT DE;Ll;0;L;;;;;N;;;A662;;A662\nA664;CYRILLIC CAPITAL LETTER SOFT EL;Lu;0;L;;;;;N;;;;A665;\nA665;CYRILLIC SMALL LETTER SOFT EL;Ll;0;L;;;;;N;;;A664;;A664\nA666;CYRILLIC CAPITAL LETTER SOFT EM;Lu;0;L;;;;;N;;;;A667;\nA667;CYRILLIC SMALL LETTER SOFT EM;Ll;0;L;;;;;N;;;A666;;A666\nA668;CYRILLIC CAPITAL LETTER MONOCULAR O;Lu;0;L;;;;;N;;;;A669;\nA669;CYRILLIC SMALL LETTER MONOCULAR O;Ll;0;L;;;;;N;;;A668;;A668\nA66A;CYRILLIC CAPITAL LETTER BINOCULAR O;Lu;0;L;;;;;N;;;;A66B;\nA66B;CYRILLIC SMALL LETTER BINOCULAR O;Ll;0;L;;;;;N;;;A66A;;A66A\nA66C;CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O;Lu;0;L;;;;;N;;;;A66D;\nA66D;CYRILLIC SMALL LETTER DOUBLE MONOCULAR O;Ll;0;L;;;;;N;;;A66C;;A66C\nA66E;CYRILLIC LETTER MULTIOCULAR O;Lo;0;L;;;;;N;;;;;\nA66F;COMBINING CYRILLIC VZMET;Mn;230;NSM;;;;;N;;;;;\nA670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;\nA671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;\nA672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;\nA673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;;\nA674;COMBINING CYRILLIC LETTER UKRAINIAN IE;Mn;230;NSM;;;;;N;;;;;\nA675;COMBINING CYRILLIC LETTER I;Mn;230;NSM;;;;;N;;;;;\nA676;COMBINING CYRILLIC LETTER YI;Mn;230;NSM;;;;;N;;;;;\nA677;COMBINING CYRILLIC LETTER U;Mn;230;NSM;;;;;N;;;;;\nA678;COMBINING CYRILLIC LETTER HARD SIGN;Mn;230;NSM;;;;;N;;;;;\nA679;COMBINING CYRILLIC LETTER YERU;Mn;230;NSM;;;;;N;;;;;\nA67A;COMBINING CYRILLIC LETTER SOFT SIGN;Mn;230;NSM;;;;;N;;;;;\nA67B;COMBINING CYRILLIC LETTER OMEGA;Mn;230;NSM;;;;;N;;;;;\nA67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;;\nA67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;;\nA67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;;\nA67F;CYRILLIC PAYEROK;Lm;0;ON;;;;;N;;;;;\nA680;CYRILLIC CAPITAL LETTER DWE;Lu;0;L;;;;;N;;;;A681;\nA681;CYRILLIC SMALL LETTER DWE;Ll;0;L;;;;;N;;;A680;;A680\nA682;CYRILLIC CAPITAL LETTER DZWE;Lu;0;L;;;;;N;;;;A683;\nA683;CYRILLIC SMALL LETTER DZWE;Ll;0;L;;;;;N;;;A682;;A682\nA684;CYRILLIC CAPITAL LETTER ZHWE;Lu;0;L;;;;;N;;;;A685;\nA685;CYRILLIC SMALL LETTER ZHWE;Ll;0;L;;;;;N;;;A684;;A684\nA686;CYRILLIC CAPITAL LETTER CCHE;Lu;0;L;;;;;N;;;;A687;\nA687;CYRILLIC SMALL LETTER CCHE;Ll;0;L;;;;;N;;;A686;;A686\nA688;CYRILLIC CAPITAL LETTER DZZE;Lu;0;L;;;;;N;;;;A689;\nA689;CYRILLIC SMALL LETTER DZZE;Ll;0;L;;;;;N;;;A688;;A688\nA68A;CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;A68B;\nA68B;CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;A68A;;A68A\nA68C;CYRILLIC CAPITAL LETTER TWE;Lu;0;L;;;;;N;;;;A68D;\nA68D;CYRILLIC SMALL LETTER TWE;Ll;0;L;;;;;N;;;A68C;;A68C\nA68E;CYRILLIC CAPITAL LETTER TSWE;Lu;0;L;;;;;N;;;;A68F;\nA68F;CYRILLIC SMALL LETTER TSWE;Ll;0;L;;;;;N;;;A68E;;A68E\nA690;CYRILLIC CAPITAL LETTER TSSE;Lu;0;L;;;;;N;;;;A691;\nA691;CYRILLIC SMALL LETTER TSSE;Ll;0;L;;;;;N;;;A690;;A690\nA692;CYRILLIC CAPITAL LETTER TCHE;Lu;0;L;;;;;N;;;;A693;\nA693;CYRILLIC SMALL LETTER TCHE;Ll;0;L;;;;;N;;;A692;;A692\nA694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695;\nA695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694\nA696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697;\nA697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696\nA698;CYRILLIC CAPITAL LETTER DOUBLE O;Lu;0;L;;;;;N;;;;A699;\nA699;CYRILLIC SMALL LETTER DOUBLE O;Ll;0;L;;;;;N;;;A698;;A698\nA69A;CYRILLIC CAPITAL LETTER CROSSED O;Lu;0;L;;;;;N;;;;A69B;\nA69B;CYRILLIC SMALL LETTER CROSSED O;Ll;0;L;;;;;N;;;A69A;;A69A\nA69C;MODIFIER LETTER CYRILLIC HARD SIGN;Lm;0;L;<super> 044A;;;;N;;;;;\nA69D;MODIFIER LETTER CYRILLIC SOFT SIGN;Lm;0;L;<super> 044C;;;;N;;;;;\nA69E;COMBINING CYRILLIC LETTER EF;Mn;230;NSM;;;;;N;;;;;\nA69F;COMBINING CYRILLIC LETTER IOTIFIED E;Mn;230;NSM;;;;;N;;;;;\nA6A0;BAMUM LETTER A;Lo;0;L;;;;;N;;;;;\nA6A1;BAMUM LETTER KA;Lo;0;L;;;;;N;;;;;\nA6A2;BAMUM LETTER U;Lo;0;L;;;;;N;;;;;\nA6A3;BAMUM LETTER KU;Lo;0;L;;;;;N;;;;;\nA6A4;BAMUM LETTER EE;Lo;0;L;;;;;N;;;;;\nA6A5;BAMUM LETTER REE;Lo;0;L;;;;;N;;;;;\nA6A6;BAMUM LETTER TAE;Lo;0;L;;;;;N;;;;;\nA6A7;BAMUM LETTER O;Lo;0;L;;;;;N;;;;;\nA6A8;BAMUM LETTER NYI;Lo;0;L;;;;;N;;;;;\nA6A9;BAMUM LETTER I;Lo;0;L;;;;;N;;;;;\nA6AA;BAMUM LETTER LA;Lo;0;L;;;;;N;;;;;\nA6AB;BAMUM LETTER PA;Lo;0;L;;;;;N;;;;;\nA6AC;BAMUM LETTER RII;Lo;0;L;;;;;N;;;;;\nA6AD;BAMUM LETTER RIEE;Lo;0;L;;;;;N;;;;;\nA6AE;BAMUM LETTER LEEEE;Lo;0;L;;;;;N;;;;;\nA6AF;BAMUM LETTER MEEEE;Lo;0;L;;;;;N;;;;;\nA6B0;BAMUM LETTER TAA;Lo;0;L;;;;;N;;;;;\nA6B1;BAMUM LETTER NDAA;Lo;0;L;;;;;N;;;;;\nA6B2;BAMUM LETTER NJAEM;Lo;0;L;;;;;N;;;;;\nA6B3;BAMUM LETTER M;Lo;0;L;;;;;N;;;;;\nA6B4;BAMUM LETTER SUU;Lo;0;L;;;;;N;;;;;\nA6B5;BAMUM LETTER MU;Lo;0;L;;;;;N;;;;;\nA6B6;BAMUM LETTER SHII;Lo;0;L;;;;;N;;;;;\nA6B7;BAMUM LETTER SI;Lo;0;L;;;;;N;;;;;\nA6B8;BAMUM LETTER SHEUX;Lo;0;L;;;;;N;;;;;\nA6B9;BAMUM LETTER SEUX;Lo;0;L;;;;;N;;;;;\nA6BA;BAMUM LETTER KYEE;Lo;0;L;;;;;N;;;;;\nA6BB;BAMUM LETTER KET;Lo;0;L;;;;;N;;;;;\nA6BC;BAMUM LETTER NUAE;Lo;0;L;;;;;N;;;;;\nA6BD;BAMUM LETTER NU;Lo;0;L;;;;;N;;;;;\nA6BE;BAMUM LETTER NJUAE;Lo;0;L;;;;;N;;;;;\nA6BF;BAMUM LETTER YOQ;Lo;0;L;;;;;N;;;;;\nA6C0;BAMUM LETTER SHU;Lo;0;L;;;;;N;;;;;\nA6C1;BAMUM LETTER YUQ;Lo;0;L;;;;;N;;;;;\nA6C2;BAMUM LETTER YA;Lo;0;L;;;;;N;;;;;\nA6C3;BAMUM LETTER NSHA;Lo;0;L;;;;;N;;;;;\nA6C4;BAMUM LETTER KEUX;Lo;0;L;;;;;N;;;;;\nA6C5;BAMUM LETTER PEUX;Lo;0;L;;;;;N;;;;;\nA6C6;BAMUM LETTER NJEE;Lo;0;L;;;;;N;;;;;\nA6C7;BAMUM LETTER NTEE;Lo;0;L;;;;;N;;;;;\nA6C8;BAMUM LETTER PUE;Lo;0;L;;;;;N;;;;;\nA6C9;BAMUM LETTER WUE;Lo;0;L;;;;;N;;;;;\nA6CA;BAMUM LETTER PEE;Lo;0;L;;;;;N;;;;;\nA6CB;BAMUM LETTER FEE;Lo;0;L;;;;;N;;;;;\nA6CC;BAMUM LETTER RU;Lo;0;L;;;;;N;;;;;\nA6CD;BAMUM LETTER LU;Lo;0;L;;;;;N;;;;;\nA6CE;BAMUM LETTER MI;Lo;0;L;;;;;N;;;;;\nA6CF;BAMUM LETTER NI;Lo;0;L;;;;;N;;;;;\nA6D0;BAMUM LETTER REUX;Lo;0;L;;;;;N;;;;;\nA6D1;BAMUM LETTER RAE;Lo;0;L;;;;;N;;;;;\nA6D2;BAMUM LETTER KEN;Lo;0;L;;;;;N;;;;;\nA6D3;BAMUM LETTER NGKWAEN;Lo;0;L;;;;;N;;;;;\nA6D4;BAMUM LETTER NGGA;Lo;0;L;;;;;N;;;;;\nA6D5;BAMUM LETTER NGA;Lo;0;L;;;;;N;;;;;\nA6D6;BAMUM LETTER SHO;Lo;0;L;;;;;N;;;;;\nA6D7;BAMUM LETTER PUAE;Lo;0;L;;;;;N;;;;;\nA6D8;BAMUM LETTER FU;Lo;0;L;;;;;N;;;;;\nA6D9;BAMUM LETTER FOM;Lo;0;L;;;;;N;;;;;\nA6DA;BAMUM LETTER WA;Lo;0;L;;;;;N;;;;;\nA6DB;BAMUM LETTER NA;Lo;0;L;;;;;N;;;;;\nA6DC;BAMUM LETTER LI;Lo;0;L;;;;;N;;;;;\nA6DD;BAMUM LETTER PI;Lo;0;L;;;;;N;;;;;\nA6DE;BAMUM LETTER LOQ;Lo;0;L;;;;;N;;;;;\nA6DF;BAMUM LETTER KO;Lo;0;L;;;;;N;;;;;\nA6E0;BAMUM LETTER MBEN;Lo;0;L;;;;;N;;;;;\nA6E1;BAMUM LETTER REN;Lo;0;L;;;;;N;;;;;\nA6E2;BAMUM LETTER MEN;Lo;0;L;;;;;N;;;;;\nA6E3;BAMUM LETTER MA;Lo;0;L;;;;;N;;;;;\nA6E4;BAMUM LETTER TI;Lo;0;L;;;;;N;;;;;\nA6E5;BAMUM LETTER KI;Lo;0;L;;;;;N;;;;;\nA6E6;BAMUM LETTER MO;Nl;0;L;;;;1;N;;;;;\nA6E7;BAMUM LETTER MBAA;Nl;0;L;;;;2;N;;;;;\nA6E8;BAMUM LETTER TET;Nl;0;L;;;;3;N;;;;;\nA6E9;BAMUM LETTER KPA;Nl;0;L;;;;4;N;;;;;\nA6EA;BAMUM LETTER TEN;Nl;0;L;;;;5;N;;;;;\nA6EB;BAMUM LETTER NTUU;Nl;0;L;;;;6;N;;;;;\nA6EC;BAMUM LETTER SAMBA;Nl;0;L;;;;7;N;;;;;\nA6ED;BAMUM LETTER FAAMAE;Nl;0;L;;;;8;N;;;;;\nA6EE;BAMUM LETTER KOVUU;Nl;0;L;;;;9;N;;;;;\nA6EF;BAMUM LETTER KOGHOM;Nl;0;L;;;;0;N;;;;;\nA6F0;BAMUM COMBINING MARK KOQNDON;Mn;230;NSM;;;;;N;;;;;\nA6F1;BAMUM COMBINING MARK TUKWENTIS;Mn;230;NSM;;;;;N;;;;;\nA6F2;BAMUM NJAEMLI;Po;0;L;;;;;N;;;;;\nA6F3;BAMUM FULL STOP;Po;0;L;;;;;N;;;;;\nA6F4;BAMUM COLON;Po;0;L;;;;;N;;;;;\nA6F5;BAMUM COMMA;Po;0;L;;;;;N;;;;;\nA6F6;BAMUM SEMICOLON;Po;0;L;;;;;N;;;;;\nA6F7;BAMUM QUESTION MARK;Po;0;L;;;;;N;;;;;\nA700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;;\nA701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;;\nA702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;;\nA703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;;\nA704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;;\nA705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;;\nA706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;;\nA707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;;\nA708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;\nA709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;\nA70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;\nA70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;\nA70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;\nA70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;\nA70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;\nA70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;\nA710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;\nA711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;\nA712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;\nA713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;\nA714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;\nA715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;\nA716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;\nA717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;;\nA718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;;\nA719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;;\nA71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;;\nA71B;MODIFIER LETTER RAISED UP ARROW;Lm;0;ON;;;;;N;;;;;\nA71C;MODIFIER LETTER RAISED DOWN ARROW;Lm;0;ON;;;;;N;;;;;\nA71D;MODIFIER LETTER RAISED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;\nA71E;MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;\nA71F;MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;\nA720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;;\nA721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;;\nA722;LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF;Lu;0;L;;;;;N;;;;A723;\nA723;LATIN SMALL LETTER EGYPTOLOGICAL ALEF;Ll;0;L;;;;;N;;;A722;;A722\nA724;LATIN CAPITAL LETTER EGYPTOLOGICAL AIN;Lu;0;L;;;;;N;;;;A725;\nA725;LATIN SMALL LETTER EGYPTOLOGICAL AIN;Ll;0;L;;;;;N;;;A724;;A724\nA726;LATIN CAPITAL LETTER HENG;Lu;0;L;;;;;N;;;;A727;\nA727;LATIN SMALL LETTER HENG;Ll;0;L;;;;;N;;;A726;;A726\nA728;LATIN CAPITAL LETTER TZ;Lu;0;L;;;;;N;;;;A729;\nA729;LATIN SMALL LETTER TZ;Ll;0;L;;;;;N;;;A728;;A728\nA72A;LATIN CAPITAL LETTER TRESILLO;Lu;0;L;;;;;N;;;;A72B;\nA72B;LATIN SMALL LETTER TRESILLO;Ll;0;L;;;;;N;;;A72A;;A72A\nA72C;LATIN CAPITAL LETTER CUATRILLO;Lu;0;L;;;;;N;;;;A72D;\nA72D;LATIN SMALL LETTER CUATRILLO;Ll;0;L;;;;;N;;;A72C;;A72C\nA72E;LATIN CAPITAL LETTER CUATRILLO WITH COMMA;Lu;0;L;;;;;N;;;;A72F;\nA72F;LATIN SMALL LETTER CUATRILLO WITH COMMA;Ll;0;L;;;;;N;;;A72E;;A72E\nA730;LATIN LETTER SMALL CAPITAL F;Ll;0;L;;;;;N;;;;;\nA731;LATIN LETTER SMALL CAPITAL S;Ll;0;L;;;;;N;;;;;\nA732;LATIN CAPITAL LETTER AA;Lu;0;L;;;;;N;;;;A733;\nA733;LATIN SMALL LETTER AA;Ll;0;L;;;;;N;;;A732;;A732\nA734;LATIN CAPITAL LETTER AO;Lu;0;L;;;;;N;;;;A735;\nA735;LATIN SMALL LETTER AO;Ll;0;L;;;;;N;;;A734;;A734\nA736;LATIN CAPITAL LETTER AU;Lu;0;L;;;;;N;;;;A737;\nA737;LATIN SMALL LETTER AU;Ll;0;L;;;;;N;;;A736;;A736\nA738;LATIN CAPITAL LETTER AV;Lu;0;L;;;;;N;;;;A739;\nA739;LATIN SMALL LETTER AV;Ll;0;L;;;;;N;;;A738;;A738\nA73A;LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR;Lu;0;L;;;;;N;;;;A73B;\nA73B;LATIN SMALL LETTER AV WITH HORIZONTAL BAR;Ll;0;L;;;;;N;;;A73A;;A73A\nA73C;LATIN CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;A73D;\nA73D;LATIN SMALL LETTER AY;Ll;0;L;;;;;N;;;A73C;;A73C\nA73E;LATIN CAPITAL LETTER REVERSED C WITH DOT;Lu;0;L;;;;;N;;;;A73F;\nA73F;LATIN SMALL LETTER REVERSED C WITH DOT;Ll;0;L;;;;;N;;;A73E;;A73E\nA740;LATIN CAPITAL LETTER K WITH STROKE;Lu;0;L;;;;;N;;;;A741;\nA741;LATIN SMALL LETTER K WITH STROKE;Ll;0;L;;;;;N;;;A740;;A740\nA742;LATIN CAPITAL LETTER K WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A743;\nA743;LATIN SMALL LETTER K WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A742;;A742\nA744;LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A745;\nA745;LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE;Ll;0;L;;;;;N;;;A744;;A744\nA746;LATIN CAPITAL LETTER BROKEN L;Lu;0;L;;;;;N;;;;A747;\nA747;LATIN SMALL LETTER BROKEN L;Ll;0;L;;;;;N;;;A746;;A746\nA748;LATIN CAPITAL LETTER L WITH HIGH STROKE;Lu;0;L;;;;;N;;;;A749;\nA749;LATIN SMALL LETTER L WITH HIGH STROKE;Ll;0;L;;;;;N;;;A748;;A748\nA74A;LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY;Lu;0;L;;;;;N;;;;A74B;\nA74B;LATIN SMALL LETTER O WITH LONG STROKE OVERLAY;Ll;0;L;;;;;N;;;A74A;;A74A\nA74C;LATIN CAPITAL LETTER O WITH LOOP;Lu;0;L;;;;;N;;;;A74D;\nA74D;LATIN SMALL LETTER O WITH LOOP;Ll;0;L;;;;;N;;;A74C;;A74C\nA74E;LATIN CAPITAL LETTER OO;Lu;0;L;;;;;N;;;;A74F;\nA74F;LATIN SMALL LETTER OO;Ll;0;L;;;;;N;;;A74E;;A74E\nA750;LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A751;\nA751;LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A750;;A750\nA752;LATIN CAPITAL LETTER P WITH FLOURISH;Lu;0;L;;;;;N;;;;A753;\nA753;LATIN SMALL LETTER P WITH FLOURISH;Ll;0;L;;;;;N;;;A752;;A752\nA754;LATIN CAPITAL LETTER P WITH SQUIRREL TAIL;Lu;0;L;;;;;N;;;;A755;\nA755;LATIN SMALL LETTER P WITH SQUIRREL TAIL;Ll;0;L;;;;;N;;;A754;;A754\nA756;LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A757;\nA757;LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A756;;A756\nA758;LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A759;\nA759;LATIN SMALL LETTER Q WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A758;;A758\nA75A;LATIN CAPITAL LETTER R ROTUNDA;Lu;0;L;;;;;N;;;;A75B;\nA75B;LATIN SMALL LETTER R ROTUNDA;Ll;0;L;;;;;N;;;A75A;;A75A\nA75C;LATIN CAPITAL LETTER RUM ROTUNDA;Lu;0;L;;;;;N;;;;A75D;\nA75D;LATIN SMALL LETTER RUM ROTUNDA;Ll;0;L;;;;;N;;;A75C;;A75C\nA75E;LATIN CAPITAL LETTER V WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A75F;\nA75F;LATIN SMALL LETTER V WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A75E;;A75E\nA760;LATIN CAPITAL LETTER VY;Lu;0;L;;;;;N;;;;A761;\nA761;LATIN SMALL LETTER VY;Ll;0;L;;;;;N;;;A760;;A760\nA762;LATIN CAPITAL LETTER VISIGOTHIC Z;Lu;0;L;;;;;N;;;;A763;\nA763;LATIN SMALL LETTER VISIGOTHIC Z;Ll;0;L;;;;;N;;;A762;;A762\nA764;LATIN CAPITAL LETTER THORN WITH STROKE;Lu;0;L;;;;;N;;;;A765;\nA765;LATIN SMALL LETTER THORN WITH STROKE;Ll;0;L;;;;;N;;;A764;;A764\nA766;LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A767;\nA767;LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A766;;A766\nA768;LATIN CAPITAL LETTER VEND;Lu;0;L;;;;;N;;;;A769;\nA769;LATIN SMALL LETTER VEND;Ll;0;L;;;;;N;;;A768;;A768\nA76A;LATIN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;A76B;\nA76B;LATIN SMALL LETTER ET;Ll;0;L;;;;;N;;;A76A;;A76A\nA76C;LATIN CAPITAL LETTER IS;Lu;0;L;;;;;N;;;;A76D;\nA76D;LATIN SMALL LETTER IS;Ll;0;L;;;;;N;;;A76C;;A76C\nA76E;LATIN CAPITAL LETTER CON;Lu;0;L;;;;;N;;;;A76F;\nA76F;LATIN SMALL LETTER CON;Ll;0;L;;;;;N;;;A76E;;A76E\nA770;MODIFIER LETTER US;Lm;0;L;<super> A76F;;;;N;;;;;\nA771;LATIN SMALL LETTER DUM;Ll;0;L;;;;;N;;;;;\nA772;LATIN SMALL LETTER LUM;Ll;0;L;;;;;N;;;;;\nA773;LATIN SMALL LETTER MUM;Ll;0;L;;;;;N;;;;;\nA774;LATIN SMALL LETTER NUM;Ll;0;L;;;;;N;;;;;\nA775;LATIN SMALL LETTER RUM;Ll;0;L;;;;;N;;;;;\nA776;LATIN LETTER SMALL CAPITAL RUM;Ll;0;L;;;;;N;;;;;\nA777;LATIN SMALL LETTER TUM;Ll;0;L;;;;;N;;;;;\nA778;LATIN SMALL LETTER UM;Ll;0;L;;;;;N;;;;;\nA779;LATIN CAPITAL LETTER INSULAR D;Lu;0;L;;;;;N;;;;A77A;\nA77A;LATIN SMALL LETTER INSULAR D;Ll;0;L;;;;;N;;;A779;;A779\nA77B;LATIN CAPITAL LETTER INSULAR F;Lu;0;L;;;;;N;;;;A77C;\nA77C;LATIN SMALL LETTER INSULAR F;Ll;0;L;;;;;N;;;A77B;;A77B\nA77D;LATIN CAPITAL LETTER INSULAR G;Lu;0;L;;;;;N;;;;1D79;\nA77E;LATIN CAPITAL LETTER TURNED INSULAR G;Lu;0;L;;;;;N;;;;A77F;\nA77F;LATIN SMALL LETTER TURNED INSULAR G;Ll;0;L;;;;;N;;;A77E;;A77E\nA780;LATIN CAPITAL LETTER TURNED L;Lu;0;L;;;;;N;;;;A781;\nA781;LATIN SMALL LETTER TURNED L;Ll;0;L;;;;;N;;;A780;;A780\nA782;LATIN CAPITAL LETTER INSULAR R;Lu;0;L;;;;;N;;;;A783;\nA783;LATIN SMALL LETTER INSULAR R;Ll;0;L;;;;;N;;;A782;;A782\nA784;LATIN CAPITAL LETTER INSULAR S;Lu;0;L;;;;;N;;;;A785;\nA785;LATIN SMALL LETTER INSULAR S;Ll;0;L;;;;;N;;;A784;;A784\nA786;LATIN CAPITAL LETTER INSULAR T;Lu;0;L;;;;;N;;;;A787;\nA787;LATIN SMALL LETTER INSULAR T;Ll;0;L;;;;;N;;;A786;;A786\nA788;MODIFIER LETTER LOW CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;;;;;\nA789;MODIFIER LETTER COLON;Sk;0;L;;;;;N;;;;;\nA78A;MODIFIER LETTER SHORT EQUALS SIGN;Sk;0;L;;;;;N;;;;;\nA78B;LATIN CAPITAL LETTER SALTILLO;Lu;0;L;;;;;N;;;;A78C;\nA78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B\nA78D;LATIN CAPITAL LETTER TURNED H;Lu;0;L;;;;;N;;;;0265;\nA78E;LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT;Ll;0;L;;;;;N;;;;;\nA78F;LATIN LETTER SINOLOGICAL DOT;Lo;0;L;;;;;N;;;;;\nA790;LATIN CAPITAL LETTER N WITH DESCENDER;Lu;0;L;;;;;N;;;;A791;\nA791;LATIN SMALL LETTER N WITH DESCENDER;Ll;0;L;;;;;N;;;A790;;A790\nA792;LATIN CAPITAL LETTER C WITH BAR;Lu;0;L;;;;;N;;;;A793;\nA793;LATIN SMALL LETTER C WITH BAR;Ll;0;L;;;;;N;;;A792;;A792\nA794;LATIN SMALL LETTER C WITH PALATAL HOOK;Ll;0;L;;;;;N;;;A7C4;;A7C4\nA795;LATIN SMALL LETTER H WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\nA796;LATIN CAPITAL LETTER B WITH FLOURISH;Lu;0;L;;;;;N;;;;A797;\nA797;LATIN SMALL LETTER B WITH FLOURISH;Ll;0;L;;;;;N;;;A796;;A796\nA798;LATIN CAPITAL LETTER F WITH STROKE;Lu;0;L;;;;;N;;;;A799;\nA799;LATIN SMALL LETTER F WITH STROKE;Ll;0;L;;;;;N;;;A798;;A798\nA79A;LATIN CAPITAL LETTER VOLAPUK AE;Lu;0;L;;;;;N;;;;A79B;\nA79B;LATIN SMALL LETTER VOLAPUK AE;Ll;0;L;;;;;N;;;A79A;;A79A\nA79C;LATIN CAPITAL LETTER VOLAPUK OE;Lu;0;L;;;;;N;;;;A79D;\nA79D;LATIN SMALL LETTER VOLAPUK OE;Ll;0;L;;;;;N;;;A79C;;A79C\nA79E;LATIN CAPITAL LETTER VOLAPUK UE;Lu;0;L;;;;;N;;;;A79F;\nA79F;LATIN SMALL LETTER VOLAPUK UE;Ll;0;L;;;;;N;;;A79E;;A79E\nA7A0;LATIN CAPITAL LETTER G WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A1;\nA7A1;LATIN SMALL LETTER G WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A0;;A7A0\nA7A2;LATIN CAPITAL LETTER K WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A3;\nA7A3;LATIN SMALL LETTER K WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A2;;A7A2\nA7A4;LATIN CAPITAL LETTER N WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A5;\nA7A5;LATIN SMALL LETTER N WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A4;;A7A4\nA7A6;LATIN CAPITAL LETTER R WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A7;\nA7A7;LATIN SMALL LETTER R WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A6;;A7A6\nA7A8;LATIN CAPITAL LETTER S WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A9;\nA7A9;LATIN SMALL LETTER S WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A8;;A7A8\nA7AA;LATIN CAPITAL LETTER H WITH HOOK;Lu;0;L;;;;;N;;;;0266;\nA7AB;LATIN CAPITAL LETTER REVERSED OPEN E;Lu;0;L;;;;;N;;;;025C;\nA7AC;LATIN CAPITAL LETTER SCRIPT G;Lu;0;L;;;;;N;;;;0261;\nA7AD;LATIN CAPITAL LETTER L WITH BELT;Lu;0;L;;;;;N;;;;026C;\nA7AE;LATIN CAPITAL LETTER SMALL CAPITAL I;Lu;0;L;;;;;N;;;;026A;\nA7AF;LATIN LETTER SMALL CAPITAL Q;Ll;0;L;;;;;N;;;;;\nA7B0;LATIN CAPITAL LETTER TURNED K;Lu;0;L;;;;;N;;;;029E;\nA7B1;LATIN CAPITAL LETTER TURNED T;Lu;0;L;;;;;N;;;;0287;\nA7B2;LATIN CAPITAL LETTER J WITH CROSSED-TAIL;Lu;0;L;;;;;N;;;;029D;\nA7B3;LATIN CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;AB53;\nA7B4;LATIN CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;A7B5;\nA7B5;LATIN SMALL LETTER BETA;Ll;0;L;;;;;N;;;A7B4;;A7B4\nA7B6;LATIN CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;A7B7;\nA7B7;LATIN SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;A7B6;;A7B6\nA7B8;LATIN CAPITAL LETTER U WITH STROKE;Lu;0;L;;;;;N;;;;A7B9;\nA7B9;LATIN SMALL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;A7B8;;A7B8\nA7BA;LATIN CAPITAL LETTER GLOTTAL A;Lu;0;L;;;;;N;;;;A7BB;\nA7BB;LATIN SMALL LETTER GLOTTAL A;Ll;0;L;;;;;N;;;A7BA;;A7BA\nA7BC;LATIN CAPITAL LETTER GLOTTAL I;Lu;0;L;;;;;N;;;;A7BD;\nA7BD;LATIN SMALL LETTER GLOTTAL I;Ll;0;L;;;;;N;;;A7BC;;A7BC\nA7BE;LATIN CAPITAL LETTER GLOTTAL U;Lu;0;L;;;;;N;;;;A7BF;\nA7BF;LATIN SMALL LETTER GLOTTAL U;Ll;0;L;;;;;N;;;A7BE;;A7BE\nA7C0;LATIN CAPITAL LETTER OLD POLISH O;Lu;0;L;;;;;N;;;;A7C1;\nA7C1;LATIN SMALL LETTER OLD POLISH O;Ll;0;L;;;;;N;;;A7C0;;A7C0\nA7C2;LATIN CAPITAL LETTER ANGLICANA W;Lu;0;L;;;;;N;;;;A7C3;\nA7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2\nA7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794;\nA7C5;LATIN CAPITAL LETTER S WITH HOOK;Lu;0;L;;;;;N;;;;0282;\nA7C6;LATIN CAPITAL LETTER Z WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;1D8E;\nA7C7;LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7C8;\nA7C8;LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C7;;A7C7\nA7C9;LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7CA;\nA7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9\nA7CB;LATIN CAPITAL LETTER RAMS HORN;Lu;0;L;;;;;N;;;;0264;\nA7CC;LATIN CAPITAL LETTER S WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A7CD;\nA7CD;LATIN SMALL LETTER S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A7CC;;A7CC\nA7CE;LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE;Lu;0;L;;;;;N;;;;A7CF;\nA7CF;LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;;;A7CE;;A7CE\nA7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1;\nA7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0\nA7D2;LATIN CAPITAL LETTER DOUBLE THORN;Lu;0;L;;;;;N;;;;A7D3;\nA7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;A7D2;;A7D2\nA7D4;LATIN CAPITAL LETTER DOUBLE WYNN;Lu;0;L;;;;;N;;;;A7D5;\nA7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;A7D4;;A7D4\nA7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7;\nA7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6\nA7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9;\nA7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8\nA7DA;LATIN CAPITAL LETTER LAMBDA;Lu;0;L;;;;;N;;;;A7DB;\nA7DB;LATIN SMALL LETTER LAMBDA;Ll;0;L;;;;;N;;;A7DA;;A7DA\nA7DC;LATIN CAPITAL LETTER LAMBDA WITH STROKE;Lu;0;L;;;;;N;;;;019B;\nA7F1;MODIFIER LETTER CAPITAL S;Lm;0;L;<super> 0053;;;;N;;;;;\nA7F2;MODIFIER LETTER CAPITAL C;Lm;0;L;<super> 0043;;;;N;;;;;\nA7F3;MODIFIER LETTER CAPITAL F;Lm;0;L;<super> 0046;;;;N;;;;;\nA7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L;<super> 0051;;;;N;;;;;\nA7F5;LATIN CAPITAL LETTER REVERSED HALF H;Lu;0;L;;;;;N;;;;A7F6;\nA7F6;LATIN SMALL LETTER REVERSED HALF H;Ll;0;L;;;;;N;;;A7F5;;A7F5\nA7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;;\nA7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L;<super> 0126;;;;N;;;;;\nA7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L;<super> 0153;;;;N;;;;;\nA7FA;LATIN LETTER SMALL CAPITAL TURNED M;Ll;0;L;;;;;N;;;;;\nA7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;;\nA7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;;\nA7FD;LATIN EPIGRAPHIC LETTER INVERTED M;Lo;0;L;;;;;N;;;;;\nA7FE;LATIN EPIGRAPHIC LETTER I LONGA;Lo;0;L;;;;;N;;;;;\nA7FF;LATIN EPIGRAPHIC LETTER ARCHAIC M;Lo;0;L;;;;;N;;;;;\nA800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;;\nA801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;;\nA802;SYLOTI NAGRI SIGN DVISVARA;Mn;0;NSM;;;;;N;;;;;\nA803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;;\nA804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;;\nA805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;;\nA806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;;\nA807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;;\nA808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;;\nA809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;;\nA80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;;\nA80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\nA80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;;\nA80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;;\nA80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;;\nA80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;;\nA810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;;\nA811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;;\nA812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;;\nA813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;;\nA814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;;\nA815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;;\nA816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;;\nA817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;;\nA818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;;\nA819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;;\nA81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;;\nA81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;;\nA81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;;\nA81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;;\nA81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;;\nA81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;;\nA820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;;\nA821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;;\nA822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;;\nA823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;;\nA824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\nA825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\nA826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\nA827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;\nA828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;;\nA829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;;\nA82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;;\nA82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;;\nA82C;SYLOTI NAGRI SIGN ALTERNATE HASANTA;Mn;9;NSM;;;;;N;;;;;\nA830;NORTH INDIC FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;\nA831;NORTH INDIC FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;\nA832;NORTH INDIC FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;\nA833;NORTH INDIC FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;;\nA834;NORTH INDIC FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;;\nA835;NORTH INDIC FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;;\nA836;NORTH INDIC QUARTER MARK;So;0;L;;;;;N;;;;;\nA837;NORTH INDIC PLACEHOLDER MARK;So;0;L;;;;;N;;;;;\nA838;NORTH INDIC RUPEE MARK;Sc;0;ET;;;;;N;;;;;\nA839;NORTH INDIC QUANTITY MARK;So;0;ET;;;;;N;;;;;\nA840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;;\nA841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;;\nA842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;;\nA843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;;\nA844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;;\nA845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;;\nA846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;;\nA847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;;\nA848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;;\nA849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;;\nA84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;;\nA84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;;\nA84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;;\nA84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;;\nA84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;;\nA84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;;\nA850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;;\nA851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;;\nA852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;;\nA853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;;\nA854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;;\nA855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;;\nA856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;;\nA857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;;\nA858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;;\nA859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;;\nA85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;;\nA85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;;\nA85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;;\nA85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;;\nA85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;;\nA85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;;\nA860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;;\nA861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;;\nA862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;;\nA863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;;\nA864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;;\nA865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;;\nA866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;;\nA867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;;\nA868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;;\nA869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;;\nA86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;;\nA86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;;\nA86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;;\nA86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;;\nA86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;;\nA86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;;\nA870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;;\nA871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;;\nA872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;;\nA873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;;\nA874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;;\nA875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;;\nA876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;;\nA877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;;\nA880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;\nA881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;;\nA882;SAURASHTRA LETTER A;Lo;0;L;;;;;N;;;;;\nA883;SAURASHTRA LETTER AA;Lo;0;L;;;;;N;;;;;\nA884;SAURASHTRA LETTER I;Lo;0;L;;;;;N;;;;;\nA885;SAURASHTRA LETTER II;Lo;0;L;;;;;N;;;;;\nA886;SAURASHTRA LETTER U;Lo;0;L;;;;;N;;;;;\nA887;SAURASHTRA LETTER UU;Lo;0;L;;;;;N;;;;;\nA888;SAURASHTRA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\nA889;SAURASHTRA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\nA88A;SAURASHTRA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\nA88B;SAURASHTRA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\nA88C;SAURASHTRA LETTER E;Lo;0;L;;;;;N;;;;;\nA88D;SAURASHTRA LETTER EE;Lo;0;L;;;;;N;;;;;\nA88E;SAURASHTRA LETTER AI;Lo;0;L;;;;;N;;;;;\nA88F;SAURASHTRA LETTER O;Lo;0;L;;;;;N;;;;;\nA890;SAURASHTRA LETTER OO;Lo;0;L;;;;;N;;;;;\nA891;SAURASHTRA LETTER AU;Lo;0;L;;;;;N;;;;;\nA892;SAURASHTRA LETTER KA;Lo;0;L;;;;;N;;;;;\nA893;SAURASHTRA LETTER KHA;Lo;0;L;;;;;N;;;;;\nA894;SAURASHTRA LETTER GA;Lo;0;L;;;;;N;;;;;\nA895;SAURASHTRA LETTER GHA;Lo;0;L;;;;;N;;;;;\nA896;SAURASHTRA LETTER NGA;Lo;0;L;;;;;N;;;;;\nA897;SAURASHTRA LETTER CA;Lo;0;L;;;;;N;;;;;\nA898;SAURASHTRA LETTER CHA;Lo;0;L;;;;;N;;;;;\nA899;SAURASHTRA LETTER JA;Lo;0;L;;;;;N;;;;;\nA89A;SAURASHTRA LETTER JHA;Lo;0;L;;;;;N;;;;;\nA89B;SAURASHTRA LETTER NYA;Lo;0;L;;;;;N;;;;;\nA89C;SAURASHTRA LETTER TTA;Lo;0;L;;;;;N;;;;;\nA89D;SAURASHTRA LETTER TTHA;Lo;0;L;;;;;N;;;;;\nA89E;SAURASHTRA LETTER DDA;Lo;0;L;;;;;N;;;;;\nA89F;SAURASHTRA LETTER DDHA;Lo;0;L;;;;;N;;;;;\nA8A0;SAURASHTRA LETTER NNA;Lo;0;L;;;;;N;;;;;\nA8A1;SAURASHTRA LETTER TA;Lo;0;L;;;;;N;;;;;\nA8A2;SAURASHTRA LETTER THA;Lo;0;L;;;;;N;;;;;\nA8A3;SAURASHTRA LETTER DA;Lo;0;L;;;;;N;;;;;\nA8A4;SAURASHTRA LETTER DHA;Lo;0;L;;;;;N;;;;;\nA8A5;SAURASHTRA LETTER NA;Lo;0;L;;;;;N;;;;;\nA8A6;SAURASHTRA LETTER PA;Lo;0;L;;;;;N;;;;;\nA8A7;SAURASHTRA LETTER PHA;Lo;0;L;;;;;N;;;;;\nA8A8;SAURASHTRA LETTER BA;Lo;0;L;;;;;N;;;;;\nA8A9;SAURASHTRA LETTER BHA;Lo;0;L;;;;;N;;;;;\nA8AA;SAURASHTRA LETTER MA;Lo;0;L;;;;;N;;;;;\nA8AB;SAURASHTRA LETTER YA;Lo;0;L;;;;;N;;;;;\nA8AC;SAURASHTRA LETTER RA;Lo;0;L;;;;;N;;;;;\nA8AD;SAURASHTRA LETTER LA;Lo;0;L;;;;;N;;;;;\nA8AE;SAURASHTRA LETTER VA;Lo;0;L;;;;;N;;;;;\nA8AF;SAURASHTRA LETTER SHA;Lo;0;L;;;;;N;;;;;\nA8B0;SAURASHTRA LETTER SSA;Lo;0;L;;;;;N;;;;;\nA8B1;SAURASHTRA LETTER SA;Lo;0;L;;;;;N;;;;;\nA8B2;SAURASHTRA LETTER HA;Lo;0;L;;;;;N;;;;;\nA8B3;SAURASHTRA LETTER LLA;Lo;0;L;;;;;N;;;;;\nA8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;;\nA8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\nA8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\nA8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\nA8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;\nA8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;\nA8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;\nA8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;\nA8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;;\nA8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;;\nA8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\nA8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;\nA8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\nA8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\nA8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;\nA8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\nA8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\nA8C5;SAURASHTRA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\nA8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;;\nA8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;;\nA8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\nA8D1;SAURASHTRA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\nA8D2;SAURASHTRA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\nA8D3;SAURASHTRA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\nA8D4;SAURASHTRA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\nA8D5;SAURASHTRA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\nA8D6;SAURASHTRA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\nA8D7;SAURASHTRA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\nA8D8;SAURASHTRA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\nA8D9;SAURASHTRA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\nA8E0;COMBINING DEVANAGARI DIGIT ZERO;Mn;230;NSM;;;;;N;;;;;\nA8E1;COMBINING DEVANAGARI DIGIT ONE;Mn;230;NSM;;;;;N;;;;;\nA8E2;COMBINING DEVANAGARI DIGIT TWO;Mn;230;NSM;;;;;N;;;;;\nA8E3;COMBINING DEVANAGARI DIGIT THREE;Mn;230;NSM;;;;;N;;;;;\nA8E4;COMBINING DEVANAGARI DIGIT FOUR;Mn;230;NSM;;;;;N;;;;;\nA8E5;COMBINING DEVANAGARI DIGIT FIVE;Mn;230;NSM;;;;;N;;;;;\nA8E6;COMBINING DEVANAGARI DIGIT SIX;Mn;230;NSM;;;;;N;;;;;\nA8E7;COMBINING DEVANAGARI DIGIT SEVEN;Mn;230;NSM;;;;;N;;;;;\nA8E8;COMBINING DEVANAGARI DIGIT EIGHT;Mn;230;NSM;;;;;N;;;;;\nA8E9;COMBINING DEVANAGARI DIGIT NINE;Mn;230;NSM;;;;;N;;;;;\nA8EA;COMBINING DEVANAGARI LETTER A;Mn;230;NSM;;;;;N;;;;;\nA8EB;COMBINING DEVANAGARI LETTER U;Mn;230;NSM;;;;;N;;;;;\nA8EC;COMBINING DEVANAGARI LETTER KA;Mn;230;NSM;;;;;N;;;;;\nA8ED;COMBINING DEVANAGARI LETTER NA;Mn;230;NSM;;;;;N;;;;;\nA8EE;COMBINING DEVANAGARI LETTER PA;Mn;230;NSM;;;;;N;;;;;\nA8EF;COMBINING DEVANAGARI LETTER RA;Mn;230;NSM;;;;;N;;;;;\nA8F0;COMBINING DEVANAGARI LETTER VI;Mn;230;NSM;;;;;N;;;;;\nA8F1;COMBINING DEVANAGARI SIGN AVAGRAHA;Mn;230;NSM;;;;;N;;;;;\nA8F2;DEVANAGARI SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;;\nA8F3;DEVANAGARI SIGN CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;;\nA8F4;DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;;\nA8F5;DEVANAGARI SIGN CANDRABINDU TWO;Lo;0;L;;;;;N;;;;;\nA8F6;DEVANAGARI SIGN CANDRABINDU THREE;Lo;0;L;;;;;N;;;;;\nA8F7;DEVANAGARI SIGN CANDRABINDU AVAGRAHA;Lo;0;L;;;;;N;;;;;\nA8F8;DEVANAGARI SIGN PUSHPIKA;Po;0;L;;;;;N;;;;;\nA8F9;DEVANAGARI GAP FILLER;Po;0;L;;;;;N;;;;;\nA8FA;DEVANAGARI CARET;Po;0;L;;;;;N;;;;;\nA8FB;DEVANAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;;\nA8FC;DEVANAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;;\nA8FD;DEVANAGARI JAIN OM;Lo;0;L;;;;;N;;;;;\nA8FE;DEVANAGARI LETTER AY;Lo;0;L;;;;;N;;;;;\nA8FF;DEVANAGARI VOWEL SIGN AY;Mn;0;NSM;;;;;N;;;;;\nA900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\nA901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\nA902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\nA903;KAYAH LI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\nA904;KAYAH LI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\nA905;KAYAH LI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\nA906;KAYAH LI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\nA907;KAYAH LI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\nA908;KAYAH LI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\nA909;KAYAH LI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\nA90A;KAYAH LI LETTER KA;Lo;0;L;;;;;N;;;;;\nA90B;KAYAH LI LETTER KHA;Lo;0;L;;;;;N;;;;;\nA90C;KAYAH LI LETTER GA;Lo;0;L;;;;;N;;;;;\nA90D;KAYAH LI LETTER NGA;Lo;0;L;;;;;N;;;;;\nA90E;KAYAH LI LETTER SA;Lo;0;L;;;;;N;;;;;\nA90F;KAYAH LI LETTER SHA;Lo;0;L;;;;;N;;;;;\nA910;KAYAH LI LETTER ZA;Lo;0;L;;;;;N;;;;;\nA911;KAYAH LI LETTER NYA;Lo;0;L;;;;;N;;;;;\nA912;KAYAH LI LETTER TA;Lo;0;L;;;;;N;;;;;\nA913;KAYAH LI LETTER HTA;Lo;0;L;;;;;N;;;;;\nA914;KAYAH LI LETTER NA;Lo;0;L;;;;;N;;;;;\nA915;KAYAH LI LETTER PA;Lo;0;L;;;;;N;;;;;\nA916;KAYAH LI LETTER PHA;Lo;0;L;;;;;N;;;;;\nA917;KAYAH LI LETTER MA;Lo;0;L;;;;;N;;;;;\nA918;KAYAH LI LETTER DA;Lo;0;L;;;;;N;;;;;\nA919;KAYAH LI LETTER BA;Lo;0;L;;;;;N;;;;;\nA91A;KAYAH LI LETTER RA;Lo;0;L;;;;;N;;;;;\nA91B;KAYAH LI LETTER YA;Lo;0;L;;;;;N;;;;;\nA91C;KAYAH LI LETTER LA;Lo;0;L;;;;;N;;;;;\nA91D;KAYAH LI LETTER WA;Lo;0;L;;;;;N;;;;;\nA91E;KAYAH LI LETTER THA;Lo;0;L;;;;;N;;;;;\nA91F;KAYAH LI LETTER HA;Lo;0;L;;;;;N;;;;;\nA920;KAYAH LI LETTER VA;Lo;0;L;;;;;N;;;;;\nA921;KAYAH LI LETTER CA;Lo;0;L;;;;;N;;;;;\nA922;KAYAH LI LETTER A;Lo;0;L;;;;;N;;;;;\nA923;KAYAH LI LETTER OE;Lo;0;L;;;;;N;;;;;\nA924;KAYAH LI LETTER I;Lo;0;L;;;;;N;;;;;\nA925;KAYAH LI LETTER OO;Lo;0;L;;;;;N;;;;;\nA926;KAYAH LI VOWEL UE;Mn;0;NSM;;;;;N;;;;;\nA927;KAYAH LI VOWEL E;Mn;0;NSM;;;;;N;;;;;\nA928;KAYAH LI VOWEL U;Mn;0;NSM;;;;;N;;;;;\nA929;KAYAH LI VOWEL EE;Mn;0;NSM;;;;;N;;;;;\nA92A;KAYAH LI VOWEL O;Mn;0;NSM;;;;;N;;;;;\nA92B;KAYAH LI TONE PLOPHU;Mn;220;NSM;;;;;N;;;;;\nA92C;KAYAH LI TONE CALYA;Mn;220;NSM;;;;;N;;;;;\nA92D;KAYAH LI TONE CALYA PLOPHU;Mn;220;NSM;;;;;N;;;;;\nA92E;KAYAH LI SIGN CWI;Po;0;L;;;;;N;;;;;\nA92F;KAYAH LI SIGN SHYA;Po;0;L;;;;;N;;;;;\nA930;REJANG LETTER KA;Lo;0;L;;;;;N;;;;;\nA931;REJANG LETTER GA;Lo;0;L;;;;;N;;;;;\nA932;REJANG LETTER NGA;Lo;0;L;;;;;N;;;;;\nA933;REJANG LETTER TA;Lo;0;L;;;;;N;;;;;\nA934;REJANG LETTER DA;Lo;0;L;;;;;N;;;;;\nA935;REJANG LETTER NA;Lo;0;L;;;;;N;;;;;\nA936;REJANG LETTER PA;Lo;0;L;;;;;N;;;;;\nA937;REJANG LETTER BA;Lo;0;L;;;;;N;;;;;\nA938;REJANG LETTER MA;Lo;0;L;;;;;N;;;;;\nA939;REJANG LETTER CA;Lo;0;L;;;;;N;;;;;\nA93A;REJANG LETTER JA;Lo;0;L;;;;;N;;;;;\nA93B;REJANG LETTER NYA;Lo;0;L;;;;;N;;;;;\nA93C;REJANG LETTER SA;Lo;0;L;;;;;N;;;;;\nA93D;REJANG LETTER RA;Lo;0;L;;;;;N;;;;;\nA93E;REJANG LETTER LA;Lo;0;L;;;;;N;;;;;\nA93F;REJANG LETTER YA;Lo;0;L;;;;;N;;;;;\nA940;REJANG LETTER WA;Lo;0;L;;;;;N;;;;;\nA941;REJANG LETTER HA;Lo;0;L;;;;;N;;;;;\nA942;REJANG LETTER MBA;Lo;0;L;;;;;N;;;;;\nA943;REJANG LETTER NGGA;Lo;0;L;;;;;N;;;;;\nA944;REJANG LETTER NDA;Lo;0;L;;;;;N;;;;;\nA945;REJANG LETTER NYJA;Lo;0;L;;;;;N;;;;;\nA946;REJANG LETTER A;Lo;0;L;;;;;N;;;;;\nA947;REJANG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\nA948;REJANG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\nA949;REJANG VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\nA94A;REJANG VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\nA94B;REJANG VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\nA94C;REJANG VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;\nA94D;REJANG VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;;\nA94E;REJANG VOWEL SIGN EA;Mn;0;NSM;;;;;N;;;;;\nA94F;REJANG CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;;\nA950;REJANG CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;\nA951;REJANG CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;\nA952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;;\nA953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;;\nA95F;REJANG SECTION MARK;Po;0;L;;;;;N;;;;;\nA960;HANGUL CHOSEONG TIKEUT-MIEUM;Lo;0;L;;;;;N;;;;;\nA961;HANGUL CHOSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;;\nA962;HANGUL CHOSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;;\nA963;HANGUL CHOSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;;\nA964;HANGUL CHOSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;;\nA965;HANGUL CHOSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;\nA966;HANGUL CHOSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;\nA967;HANGUL CHOSEONG RIEUL-SSANGTIKEUT;Lo;0;L;;;;;N;;;;;\nA968;HANGUL CHOSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;;\nA969;HANGUL CHOSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;;\nA96A;HANGUL CHOSEONG RIEUL-SSANGPIEUP;Lo;0;L;;;;;N;;;;;\nA96B;HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;\nA96C;HANGUL CHOSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;;\nA96D;HANGUL CHOSEONG RIEUL-CIEUC;Lo;0;L;;;;;N;;;;;\nA96E;HANGUL CHOSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;\nA96F;HANGUL CHOSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;\nA970;HANGUL CHOSEONG MIEUM-TIKEUT;Lo;0;L;;;;;N;;;;;\nA971;HANGUL CHOSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;\nA972;HANGUL CHOSEONG PIEUP-SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;\nA973;HANGUL CHOSEONG PIEUP-KHIEUKH;Lo;0;L;;;;;N;;;;;\nA974;HANGUL CHOSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;\nA975;HANGUL CHOSEONG SSANGSIOS-PIEUP;Lo;0;L;;;;;N;;;;;\nA976;HANGUL CHOSEONG IEUNG-RIEUL;Lo;0;L;;;;;N;;;;;\nA977;HANGUL CHOSEONG IEUNG-HIEUH;Lo;0;L;;;;;N;;;;;\nA978;HANGUL CHOSEONG SSANGCIEUC-HIEUH;Lo;0;L;;;;;N;;;;;\nA979;HANGUL CHOSEONG SSANGTHIEUTH;Lo;0;L;;;;;N;;;;;\nA97A;HANGUL CHOSEONG PHIEUPH-HIEUH;Lo;0;L;;;;;N;;;;;\nA97B;HANGUL CHOSEONG HIEUH-SIOS;Lo;0;L;;;;;N;;;;;\nA97C;HANGUL CHOSEONG SSANGYEORINHIEUH;Lo;0;L;;;;;N;;;;;\nA980;JAVANESE SIGN PANYANGGA;Mn;0;NSM;;;;;N;;;;;\nA981;JAVANESE SIGN CECAK;Mn;0;NSM;;;;;N;;;;;\nA982;JAVANESE SIGN LAYAR;Mn;0;NSM;;;;;N;;;;;\nA983;JAVANESE SIGN WIGNYAN;Mc;0;L;;;;;N;;;;;\nA984;JAVANESE LETTER A;Lo;0;L;;;;;N;;;;;\nA985;JAVANESE LETTER I KAWI;Lo;0;L;;;;;N;;;;;\nA986;JAVANESE LETTER I;Lo;0;L;;;;;N;;;;;\nA987;JAVANESE LETTER II;Lo;0;L;;;;;N;;;;;\nA988;JAVANESE LETTER U;Lo;0;L;;;;;N;;;;;\nA989;JAVANESE LETTER PA CEREK;Lo;0;L;;;;;N;;;;;\nA98A;JAVANESE LETTER NGA LELET;Lo;0;L;;;;;N;;;;;\nA98B;JAVANESE LETTER NGA LELET RASWADI;Lo;0;L;;;;;N;;;;;\nA98C;JAVANESE LETTER E;Lo;0;L;;;;;N;;;;;\nA98D;JAVANESE LETTER AI;Lo;0;L;;;;;N;;;;;\nA98E;JAVANESE LETTER O;Lo;0;L;;;;;N;;;;;\nA98F;JAVANESE LETTER KA;Lo;0;L;;;;;N;;;;;\nA990;JAVANESE LETTER KA SASAK;Lo;0;L;;;;;N;;;;;\nA991;JAVANESE LETTER KA MURDA;Lo;0;L;;;;;N;;;;;\nA992;JAVANESE LETTER GA;Lo;0;L;;;;;N;;;;;\nA993;JAVANESE LETTER GA MURDA;Lo;0;L;;;;;N;;;;;\nA994;JAVANESE LETTER NGA;Lo;0;L;;;;;N;;;;;\nA995;JAVANESE LETTER CA;Lo;0;L;;;;;N;;;;;\nA996;JAVANESE LETTER CA MURDA;Lo;0;L;;;;;N;;;;;\nA997;JAVANESE LETTER JA;Lo;0;L;;;;;N;;;;;\nA998;JAVANESE LETTER NYA MURDA;Lo;0;L;;;;;N;;;;;\nA999;JAVANESE LETTER JA MAHAPRANA;Lo;0;L;;;;;N;;;;;\nA99A;JAVANESE LETTER NYA;Lo;0;L;;;;;N;;;;;\nA99B;JAVANESE LETTER TTA;Lo;0;L;;;;;N;;;;;\nA99C;JAVANESE LETTER TTA MAHAPRANA;Lo;0;L;;;;;N;;;;;\nA99D;JAVANESE LETTER DDA;Lo;0;L;;;;;N;;;;;\nA99E;JAVANESE LETTER DDA MAHAPRANA;Lo;0;L;;;;;N;;;;;\nA99F;JAVANESE LETTER NA MURDA;Lo;0;L;;;;;N;;;;;\nA9A0;JAVANESE LETTER TA;Lo;0;L;;;;;N;;;;;\nA9A1;JAVANESE LETTER TA MURDA;Lo;0;L;;;;;N;;;;;\nA9A2;JAVANESE LETTER DA;Lo;0;L;;;;;N;;;;;\nA9A3;JAVANESE LETTER DA MAHAPRANA;Lo;0;L;;;;;N;;;;;\nA9A4;JAVANESE LETTER NA;Lo;0;L;;;;;N;;;;;\nA9A5;JAVANESE LETTER PA;Lo;0;L;;;;;N;;;;;\nA9A6;JAVANESE LETTER PA MURDA;Lo;0;L;;;;;N;;;;;\nA9A7;JAVANESE LETTER BA;Lo;0;L;;;;;N;;;;;\nA9A8;JAVANESE LETTER BA MURDA;Lo;0;L;;;;;N;;;;;\nA9A9;JAVANESE LETTER MA;Lo;0;L;;;;;N;;;;;\nA9AA;JAVANESE LETTER YA;Lo;0;L;;;;;N;;;;;\nA9AB;JAVANESE LETTER RA;Lo;0;L;;;;;N;;;;;\nA9AC;JAVANESE LETTER RA AGUNG;Lo;0;L;;;;;N;;;;;\nA9AD;JAVANESE LETTER LA;Lo;0;L;;;;;N;;;;;\nA9AE;JAVANESE LETTER WA;Lo;0;L;;;;;N;;;;;\nA9AF;JAVANESE LETTER SA MURDA;Lo;0;L;;;;;N;;;;;\nA9B0;JAVANESE LETTER SA MAHAPRANA;Lo;0;L;;;;;N;;;;;\nA9B1;JAVANESE LETTER SA;Lo;0;L;;;;;N;;;;;\nA9B2;JAVANESE LETTER HA;Lo;0;L;;;;;N;;;;;\nA9B3;JAVANESE SIGN CECAK TELU;Mn;7;NSM;;;;;N;;;;;\nA9B4;JAVANESE VOWEL SIGN TARUNG;Mc;0;L;;;;;N;;;;;\nA9B5;JAVANESE VOWEL SIGN TOLONG;Mc;0;L;;;;;N;;;;;\nA9B6;JAVANESE VOWEL SIGN WULU;Mn;0;NSM;;;;;N;;;;;\nA9B7;JAVANESE VOWEL SIGN WULU MELIK;Mn;0;NSM;;;;;N;;;;;\nA9B8;JAVANESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;;\nA9B9;JAVANESE VOWEL SIGN SUKU MENDUT;Mn;0;NSM;;;;;N;;;;;\nA9BA;JAVANESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;;\nA9BB;JAVANESE VOWEL SIGN DIRGA MURE;Mc;0;L;;;;;N;;;;;\nA9BC;JAVANESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;;\nA9BD;JAVANESE CONSONANT SIGN KERET;Mn;0;NSM;;;;;N;;;;;\nA9BE;JAVANESE CONSONANT SIGN PENGKAL;Mc;0;L;;;;;N;;;;;\nA9BF;JAVANESE CONSONANT SIGN CAKRA;Mc;0;L;;;;;N;;;;;\nA9C0;JAVANESE PANGKON;Mc;9;L;;;;;N;;;;;\nA9C1;JAVANESE LEFT RERENGGAN;Po;0;L;;;;;N;;;;;\nA9C2;JAVANESE RIGHT RERENGGAN;Po;0;L;;;;;N;;;;;\nA9C3;JAVANESE PADA ANDAP;Po;0;L;;;;;N;;;;;\nA9C4;JAVANESE PADA MADYA;Po;0;L;;;;;N;;;;;\nA9C5;JAVANESE PADA LUHUR;Po;0;L;;;;;N;;;;;\nA9C6;JAVANESE PADA WINDU;Po;0;L;;;;;N;;;;;\nA9C7;JAVANESE PADA PANGKAT;Po;0;L;;;;;N;;;;;\nA9C8;JAVANESE PADA LINGSA;Po;0;L;;;;;N;;;;;\nA9C9;JAVANESE PADA LUNGSI;Po;0;L;;;;;N;;;;;\nA9CA;JAVANESE PADA ADEG;Po;0;L;;;;;N;;;;;\nA9CB;JAVANESE PADA ADEG ADEG;Po;0;L;;;;;N;;;;;\nA9CC;JAVANESE PADA PISELEH;Po;0;L;;;;;N;;;;;\nA9CD;JAVANESE TURNED PADA PISELEH;Po;0;L;;;;;N;;;;;\nA9CF;JAVANESE PANGRANGKEP;Lm;0;L;;;;;N;;;;;\nA9D0;JAVANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\nA9D1;JAVANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\nA9D2;JAVANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\nA9D3;JAVANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\nA9D4;JAVANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\nA9D5;JAVANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\nA9D6;JAVANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\nA9D7;JAVANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\nA9D8;JAVANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\nA9D9;JAVANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\nA9DE;JAVANESE PADA TIRTA TUMETES;Po;0;L;;;;;N;;;;;\nA9DF;JAVANESE PADA ISEN-ISEN;Po;0;L;;;;;N;;;;;\nA9E0;MYANMAR LETTER SHAN GHA;Lo;0;L;;;;;N;;;;;\nA9E1;MYANMAR LETTER SHAN CHA;Lo;0;L;;;;;N;;;;;\nA9E2;MYANMAR LETTER SHAN JHA;Lo;0;L;;;;;N;;;;;\nA9E3;MYANMAR LETTER SHAN NNA;Lo;0;L;;;;;N;;;;;\nA9E4;MYANMAR LETTER SHAN BHA;Lo;0;L;;;;;N;;;;;\nA9E5;MYANMAR SIGN SHAN SAW;Mn;0;NSM;;;;;N;;;;;\nA9E6;MYANMAR MODIFIER LETTER SHAN REDUPLICATION;Lm;0;L;;;;;N;;;;;\nA9E7;MYANMAR LETTER TAI LAING NYA;Lo;0;L;;;;;N;;;;;\nA9E8;MYANMAR LETTER TAI LAING FA;Lo;0;L;;;;;N;;;;;\nA9E9;MYANMAR LETTER TAI LAING GA;Lo;0;L;;;;;N;;;;;\nA9EA;MYANMAR LETTER TAI LAING GHA;Lo;0;L;;;;;N;;;;;\nA9EB;MYANMAR LETTER TAI LAING JA;Lo;0;L;;;;;N;;;;;\nA9EC;MYANMAR LETTER TAI LAING JHA;Lo;0;L;;;;;N;;;;;\nA9ED;MYANMAR LETTER TAI LAING DDA;Lo;0;L;;;;;N;;;;;\nA9EE;MYANMAR LETTER TAI LAING DDHA;Lo;0;L;;;;;N;;;;;\nA9EF;MYANMAR LETTER TAI LAING NNA;Lo;0;L;;;;;N;;;;;\nA9F0;MYANMAR TAI LAING DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\nA9F1;MYANMAR TAI LAING DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\nA9F2;MYANMAR TAI LAING DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\nA9F3;MYANMAR TAI LAING DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\nA9F4;MYANMAR TAI LAING DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\nA9F5;MYANMAR TAI LAING DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\nA9F6;MYANMAR TAI LAING DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\nA9F7;MYANMAR TAI LAING DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\nA9F8;MYANMAR TAI LAING DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\nA9F9;MYANMAR TAI LAING DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\nA9FA;MYANMAR LETTER TAI LAING LLA;Lo;0;L;;;;;N;;;;;\nA9FB;MYANMAR LETTER TAI LAING DA;Lo;0;L;;;;;N;;;;;\nA9FC;MYANMAR LETTER TAI LAING DHA;Lo;0;L;;;;;N;;;;;\nA9FD;MYANMAR LETTER TAI LAING BA;Lo;0;L;;;;;N;;;;;\nA9FE;MYANMAR LETTER TAI LAING BHA;Lo;0;L;;;;;N;;;;;\nAA00;CHAM LETTER A;Lo;0;L;;;;;N;;;;;\nAA01;CHAM LETTER I;Lo;0;L;;;;;N;;;;;\nAA02;CHAM LETTER U;Lo;0;L;;;;;N;;;;;\nAA03;CHAM LETTER E;Lo;0;L;;;;;N;;;;;\nAA04;CHAM LETTER AI;Lo;0;L;;;;;N;;;;;\nAA05;CHAM LETTER O;Lo;0;L;;;;;N;;;;;\nAA06;CHAM LETTER KA;Lo;0;L;;;;;N;;;;;\nAA07;CHAM LETTER KHA;Lo;0;L;;;;;N;;;;;\nAA08;CHAM LETTER GA;Lo;0;L;;;;;N;;;;;\nAA09;CHAM LETTER GHA;Lo;0;L;;;;;N;;;;;\nAA0A;CHAM LETTER NGUE;Lo;0;L;;;;;N;;;;;\nAA0B;CHAM LETTER NGA;Lo;0;L;;;;;N;;;;;\nAA0C;CHAM LETTER CHA;Lo;0;L;;;;;N;;;;;\nAA0D;CHAM LETTER CHHA;Lo;0;L;;;;;N;;;;;\nAA0E;CHAM LETTER JA;Lo;0;L;;;;;N;;;;;\nAA0F;CHAM LETTER JHA;Lo;0;L;;;;;N;;;;;\nAA10;CHAM LETTER NHUE;Lo;0;L;;;;;N;;;;;\nAA11;CHAM LETTER NHA;Lo;0;L;;;;;N;;;;;\nAA12;CHAM LETTER NHJA;Lo;0;L;;;;;N;;;;;\nAA13;CHAM LETTER TA;Lo;0;L;;;;;N;;;;;\nAA14;CHAM LETTER THA;Lo;0;L;;;;;N;;;;;\nAA15;CHAM LETTER DA;Lo;0;L;;;;;N;;;;;\nAA16;CHAM LETTER DHA;Lo;0;L;;;;;N;;;;;\nAA17;CHAM LETTER NUE;Lo;0;L;;;;;N;;;;;\nAA18;CHAM LETTER NA;Lo;0;L;;;;;N;;;;;\nAA19;CHAM LETTER DDA;Lo;0;L;;;;;N;;;;;\nAA1A;CHAM LETTER PA;Lo;0;L;;;;;N;;;;;\nAA1B;CHAM LETTER PPA;Lo;0;L;;;;;N;;;;;\nAA1C;CHAM LETTER PHA;Lo;0;L;;;;;N;;;;;\nAA1D;CHAM LETTER BA;Lo;0;L;;;;;N;;;;;\nAA1E;CHAM LETTER BHA;Lo;0;L;;;;;N;;;;;\nAA1F;CHAM LETTER MUE;Lo;0;L;;;;;N;;;;;\nAA20;CHAM LETTER MA;Lo;0;L;;;;;N;;;;;\nAA21;CHAM LETTER BBA;Lo;0;L;;;;;N;;;;;\nAA22;CHAM LETTER YA;Lo;0;L;;;;;N;;;;;\nAA23;CHAM LETTER RA;Lo;0;L;;;;;N;;;;;\nAA24;CHAM LETTER LA;Lo;0;L;;;;;N;;;;;\nAA25;CHAM LETTER VA;Lo;0;L;;;;;N;;;;;\nAA26;CHAM LETTER SSA;Lo;0;L;;;;;N;;;;;\nAA27;CHAM LETTER SA;Lo;0;L;;;;;N;;;;;\nAA28;CHAM LETTER HA;Lo;0;L;;;;;N;;;;;\nAA29;CHAM VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;\nAA2A;CHAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\nAA2B;CHAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\nAA2C;CHAM VOWEL SIGN EI;Mn;0;NSM;;;;;N;;;;;\nAA2D;CHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\nAA2E;CHAM VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;\nAA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\nAA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\nAA31;CHAM VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;\nAA32;CHAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;\nAA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;;\nAA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;;\nAA35;CHAM CONSONANT SIGN LA;Mn;0;NSM;;;;;N;;;;;\nAA36;CHAM CONSONANT SIGN WA;Mn;0;NSM;;;;;N;;;;;\nAA40;CHAM LETTER FINAL K;Lo;0;L;;;;;N;;;;;\nAA41;CHAM LETTER FINAL G;Lo;0;L;;;;;N;;;;;\nAA42;CHAM LETTER FINAL NG;Lo;0;L;;;;;N;;;;;\nAA43;CHAM CONSONANT SIGN FINAL NG;Mn;0;NSM;;;;;N;;;;;\nAA44;CHAM LETTER FINAL CH;Lo;0;L;;;;;N;;;;;\nAA45;CHAM LETTER FINAL T;Lo;0;L;;;;;N;;;;;\nAA46;CHAM LETTER FINAL N;Lo;0;L;;;;;N;;;;;\nAA47;CHAM LETTER FINAL P;Lo;0;L;;;;;N;;;;;\nAA48;CHAM LETTER FINAL Y;Lo;0;L;;;;;N;;;;;\nAA49;CHAM LETTER FINAL R;Lo;0;L;;;;;N;;;;;\nAA4A;CHAM LETTER FINAL L;Lo;0;L;;;;;N;;;;;\nAA4B;CHAM LETTER FINAL SS;Lo;0;L;;;;;N;;;;;\nAA4C;CHAM CONSONANT SIGN FINAL M;Mn;0;NSM;;;;;N;;;;;\nAA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;;\nAA50;CHAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\nAA51;CHAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\nAA52;CHAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\nAA53;CHAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\nAA54;CHAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\nAA55;CHAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\nAA56;CHAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\nAA57;CHAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\nAA58;CHAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\nAA59;CHAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\nAA5C;CHAM PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;;\nAA5D;CHAM PUNCTUATION DANDA;Po;0;L;;;;;N;;;;;\nAA5E;CHAM PUNCTUATION DOUBLE DANDA;Po;0;L;;;;;N;;;;;\nAA5F;CHAM PUNCTUATION TRIPLE DANDA;Po;0;L;;;;;N;;;;;\nAA60;MYANMAR LETTER KHAMTI GA;Lo;0;L;;;;;N;;;;;\nAA61;MYANMAR LETTER KHAMTI CA;Lo;0;L;;;;;N;;;;;\nAA62;MYANMAR LETTER KHAMTI CHA;Lo;0;L;;;;;N;;;;;\nAA63;MYANMAR LETTER KHAMTI JA;Lo;0;L;;;;;N;;;;;\nAA64;MYANMAR LETTER KHAMTI JHA;Lo;0;L;;;;;N;;;;;\nAA65;MYANMAR LETTER KHAMTI NYA;Lo;0;L;;;;;N;;;;;\nAA66;MYANMAR LETTER KHAMTI TTA;Lo;0;L;;;;;N;;;;;\nAA67;MYANMAR LETTER KHAMTI TTHA;Lo;0;L;;;;;N;;;;;\nAA68;MYANMAR LETTER KHAMTI DDA;Lo;0;L;;;;;N;;;;;\nAA69;MYANMAR LETTER KHAMTI DDHA;Lo;0;L;;;;;N;;;;;\nAA6A;MYANMAR LETTER KHAMTI DHA;Lo;0;L;;;;;N;;;;;\nAA6B;MYANMAR LETTER KHAMTI NA;Lo;0;L;;;;;N;;;;;\nAA6C;MYANMAR LETTER KHAMTI SA;Lo;0;L;;;;;N;;;;;\nAA6D;MYANMAR LETTER KHAMTI HA;Lo;0;L;;;;;N;;;;;\nAA6E;MYANMAR LETTER KHAMTI HHA;Lo;0;L;;;;;N;;;;;\nAA6F;MYANMAR LETTER KHAMTI FA;Lo;0;L;;;;;N;;;;;\nAA70;MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION;Lm;0;L;;;;;N;;;;;\nAA71;MYANMAR LETTER KHAMTI XA;Lo;0;L;;;;;N;;;;;\nAA72;MYANMAR LETTER KHAMTI ZA;Lo;0;L;;;;;N;;;;;\nAA73;MYANMAR LETTER KHAMTI RA;Lo;0;L;;;;;N;;;;;\nAA74;MYANMAR LOGOGRAM KHAMTI OAY;Lo;0;L;;;;;N;;;;;\nAA75;MYANMAR LOGOGRAM KHAMTI QN;Lo;0;L;;;;;N;;;;;\nAA76;MYANMAR LOGOGRAM KHAMTI HM;Lo;0;L;;;;;N;;;;;\nAA77;MYANMAR SYMBOL AITON EXCLAMATION;So;0;L;;;;;N;;;;;\nAA78;MYANMAR SYMBOL AITON ONE;So;0;L;;;;;N;;;;;\nAA79;MYANMAR SYMBOL AITON TWO;So;0;L;;;;;N;;;;;\nAA7A;MYANMAR LETTER AITON RA;Lo;0;L;;;;;N;;;;;\nAA7B;MYANMAR SIGN PAO KAREN TONE;Mc;0;L;;;;;N;;;;;\nAA7C;MYANMAR SIGN TAI LAING TONE-2;Mn;0;NSM;;;;;N;;;;;\nAA7D;MYANMAR SIGN TAI LAING TONE-5;Mc;0;L;;;;;N;;;;;\nAA7E;MYANMAR LETTER SHWE PALAUNG CHA;Lo;0;L;;;;;N;;;;;\nAA7F;MYANMAR LETTER SHWE PALAUNG SHA;Lo;0;L;;;;;N;;;;;\nAA80;TAI VIET LETTER LOW KO;Lo;0;L;;;;;N;;;;;\nAA81;TAI VIET LETTER HIGH KO;Lo;0;L;;;;;N;;;;;\nAA82;TAI VIET LETTER LOW KHO;Lo;0;L;;;;;N;;;;;\nAA83;TAI VIET LETTER HIGH KHO;Lo;0;L;;;;;N;;;;;\nAA84;TAI VIET LETTER LOW KHHO;Lo;0;L;;;;;N;;;;;\nAA85;TAI VIET LETTER HIGH KHHO;Lo;0;L;;;;;N;;;;;\nAA86;TAI VIET LETTER LOW GO;Lo;0;L;;;;;N;;;;;\nAA87;TAI VIET LETTER HIGH GO;Lo;0;L;;;;;N;;;;;\nAA88;TAI VIET LETTER LOW NGO;Lo;0;L;;;;;N;;;;;\nAA89;TAI VIET LETTER HIGH NGO;Lo;0;L;;;;;N;;;;;\nAA8A;TAI VIET LETTER LOW CO;Lo;0;L;;;;;N;;;;;\nAA8B;TAI VIET LETTER HIGH CO;Lo;0;L;;;;;N;;;;;\nAA8C;TAI VIET LETTER LOW CHO;Lo;0;L;;;;;N;;;;;\nAA8D;TAI VIET LETTER HIGH CHO;Lo;0;L;;;;;N;;;;;\nAA8E;TAI VIET LETTER LOW SO;Lo;0;L;;;;;N;;;;;\nAA8F;TAI VIET LETTER HIGH SO;Lo;0;L;;;;;N;;;;;\nAA90;TAI VIET LETTER LOW NYO;Lo;0;L;;;;;N;;;;;\nAA91;TAI VIET LETTER HIGH NYO;Lo;0;L;;;;;N;;;;;\nAA92;TAI VIET LETTER LOW DO;Lo;0;L;;;;;N;;;;;\nAA93;TAI VIET LETTER HIGH DO;Lo;0;L;;;;;N;;;;;\nAA94;TAI VIET LETTER LOW TO;Lo;0;L;;;;;N;;;;;\nAA95;TAI VIET LETTER HIGH TO;Lo;0;L;;;;;N;;;;;\nAA96;TAI VIET LETTER LOW THO;Lo;0;L;;;;;N;;;;;\nAA97;TAI VIET LETTER HIGH THO;Lo;0;L;;;;;N;;;;;\nAA98;TAI VIET LETTER LOW NO;Lo;0;L;;;;;N;;;;;\nAA99;TAI VIET LETTER HIGH NO;Lo;0;L;;;;;N;;;;;\nAA9A;TAI VIET LETTER LOW BO;Lo;0;L;;;;;N;;;;;\nAA9B;TAI VIET LETTER HIGH BO;Lo;0;L;;;;;N;;;;;\nAA9C;TAI VIET LETTER LOW PO;Lo;0;L;;;;;N;;;;;\nAA9D;TAI VIET LETTER HIGH PO;Lo;0;L;;;;;N;;;;;\nAA9E;TAI VIET LETTER LOW PHO;Lo;0;L;;;;;N;;;;;\nAA9F;TAI VIET LETTER HIGH PHO;Lo;0;L;;;;;N;;;;;\nAAA0;TAI VIET LETTER LOW FO;Lo;0;L;;;;;N;;;;;\nAAA1;TAI VIET LETTER HIGH FO;Lo;0;L;;;;;N;;;;;\nAAA2;TAI VIET LETTER LOW MO;Lo;0;L;;;;;N;;;;;\nAAA3;TAI VIET LETTER HIGH MO;Lo;0;L;;;;;N;;;;;\nAAA4;TAI VIET LETTER LOW YO;Lo;0;L;;;;;N;;;;;\nAAA5;TAI VIET LETTER HIGH YO;Lo;0;L;;;;;N;;;;;\nAAA6;TAI VIET LETTER LOW RO;Lo;0;L;;;;;N;;;;;\nAAA7;TAI VIET LETTER HIGH RO;Lo;0;L;;;;;N;;;;;\nAAA8;TAI VIET LETTER LOW LO;Lo;0;L;;;;;N;;;;;\nAAA9;TAI VIET LETTER HIGH LO;Lo;0;L;;;;;N;;;;;\nAAAA;TAI VIET LETTER LOW VO;Lo;0;L;;;;;N;;;;;\nAAAB;TAI VIET LETTER HIGH VO;Lo;0;L;;;;;N;;;;;\nAAAC;TAI VIET LETTER LOW HO;Lo;0;L;;;;;N;;;;;\nAAAD;TAI VIET LETTER HIGH HO;Lo;0;L;;;;;N;;;;;\nAAAE;TAI VIET LETTER LOW O;Lo;0;L;;;;;N;;;;;\nAAAF;TAI VIET LETTER HIGH O;Lo;0;L;;;;;N;;;;;\nAAB0;TAI VIET MAI KANG;Mn;230;NSM;;;;;N;;;;;\nAAB1;TAI VIET VOWEL AA;Lo;0;L;;;;;N;;;;;\nAAB2;TAI VIET VOWEL I;Mn;230;NSM;;;;;N;;;;;\nAAB3;TAI VIET VOWEL UE;Mn;230;NSM;;;;;N;;;;;\nAAB4;TAI VIET VOWEL U;Mn;220;NSM;;;;;N;;;;;\nAAB5;TAI VIET VOWEL E;Lo;0;L;;;;;N;;;;;\nAAB6;TAI VIET VOWEL O;Lo;0;L;;;;;N;;;;;\nAAB7;TAI VIET MAI KHIT;Mn;230;NSM;;;;;N;;;;;\nAAB8;TAI VIET VOWEL IA;Mn;230;NSM;;;;;N;;;;;\nAAB9;TAI VIET VOWEL UEA;Lo;0;L;;;;;N;;;;;\nAABA;TAI VIET VOWEL UA;Lo;0;L;;;;;N;;;;;\nAABB;TAI VIET VOWEL AUE;Lo;0;L;;;;;N;;;;;\nAABC;TAI VIET VOWEL AY;Lo;0;L;;;;;N;;;;;\nAABD;TAI VIET VOWEL AN;Lo;0;L;;;;;N;;;;;\nAABE;TAI VIET VOWEL AM;Mn;230;NSM;;;;;N;;;;;\nAABF;TAI VIET TONE MAI EK;Mn;230;NSM;;;;;N;;;;;\nAAC0;TAI VIET TONE MAI NUENG;Lo;0;L;;;;;N;;;;;\nAAC1;TAI VIET TONE MAI THO;Mn;230;NSM;;;;;N;;;;;\nAAC2;TAI VIET TONE MAI SONG;Lo;0;L;;;;;N;;;;;\nAADB;TAI VIET SYMBOL KON;Lo;0;L;;;;;N;;;;;\nAADC;TAI VIET SYMBOL NUENG;Lo;0;L;;;;;N;;;;;\nAADD;TAI VIET SYMBOL SAM;Lm;0;L;;;;;N;;;;;\nAADE;TAI VIET SYMBOL HO HOI;Po;0;L;;;;;N;;;;;\nAADF;TAI VIET SYMBOL KOI KOI;Po;0;L;;;;;N;;;;;\nAAE0;MEETEI MAYEK LETTER E;Lo;0;L;;;;;N;;;;;\nAAE1;MEETEI MAYEK LETTER O;Lo;0;L;;;;;N;;;;;\nAAE2;MEETEI MAYEK LETTER CHA;Lo;0;L;;;;;N;;;;;\nAAE3;MEETEI MAYEK LETTER NYA;Lo;0;L;;;;;N;;;;;\nAAE4;MEETEI MAYEK LETTER TTA;Lo;0;L;;;;;N;;;;;\nAAE5;MEETEI MAYEK LETTER TTHA;Lo;0;L;;;;;N;;;;;\nAAE6;MEETEI MAYEK LETTER DDA;Lo;0;L;;;;;N;;;;;\nAAE7;MEETEI MAYEK LETTER DDHA;Lo;0;L;;;;;N;;;;;\nAAE8;MEETEI MAYEK LETTER NNA;Lo;0;L;;;;;N;;;;;\nAAE9;MEETEI MAYEK LETTER SHA;Lo;0;L;;;;;N;;;;;\nAAEA;MEETEI MAYEK LETTER SSA;Lo;0;L;;;;;N;;;;;\nAAEB;MEETEI MAYEK VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\nAAEC;MEETEI MAYEK VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\nAAED;MEETEI MAYEK VOWEL SIGN AAI;Mn;0;NSM;;;;;N;;;;;\nAAEE;MEETEI MAYEK VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\nAAEF;MEETEI MAYEK VOWEL SIGN AAU;Mc;0;L;;;;;N;;;;;\nAAF0;MEETEI MAYEK CHEIKHAN;Po;0;L;;;;;N;;;;;\nAAF1;MEETEI MAYEK AHANG KHUDAM;Po;0;L;;;;;N;;;;;\nAAF2;MEETEI MAYEK ANJI;Lo;0;L;;;;;N;;;;;\nAAF3;MEETEI MAYEK SYLLABLE REPETITION MARK;Lm;0;L;;;;;N;;;;;\nAAF4;MEETEI MAYEK WORD REPETITION MARK;Lm;0;L;;;;;N;;;;;\nAAF5;MEETEI MAYEK VOWEL SIGN VISARGA;Mc;0;L;;;;;N;;;;;\nAAF6;MEETEI MAYEK VIRAMA;Mn;9;NSM;;;;;N;;;;;\nAB01;ETHIOPIC SYLLABLE TTHU;Lo;0;L;;;;;N;;;;;\nAB02;ETHIOPIC SYLLABLE TTHI;Lo;0;L;;;;;N;;;;;\nAB03;ETHIOPIC SYLLABLE TTHAA;Lo;0;L;;;;;N;;;;;\nAB04;ETHIOPIC SYLLABLE TTHEE;Lo;0;L;;;;;N;;;;;\nAB05;ETHIOPIC SYLLABLE TTHE;Lo;0;L;;;;;N;;;;;\nAB06;ETHIOPIC SYLLABLE TTHO;Lo;0;L;;;;;N;;;;;\nAB09;ETHIOPIC SYLLABLE DDHU;Lo;0;L;;;;;N;;;;;\nAB0A;ETHIOPIC SYLLABLE DDHI;Lo;0;L;;;;;N;;;;;\nAB0B;ETHIOPIC SYLLABLE DDHAA;Lo;0;L;;;;;N;;;;;\nAB0C;ETHIOPIC SYLLABLE DDHEE;Lo;0;L;;;;;N;;;;;\nAB0D;ETHIOPIC SYLLABLE DDHE;Lo;0;L;;;;;N;;;;;\nAB0E;ETHIOPIC SYLLABLE DDHO;Lo;0;L;;;;;N;;;;;\nAB11;ETHIOPIC SYLLABLE DZU;Lo;0;L;;;;;N;;;;;\nAB12;ETHIOPIC SYLLABLE DZI;Lo;0;L;;;;;N;;;;;\nAB13;ETHIOPIC SYLLABLE DZAA;Lo;0;L;;;;;N;;;;;\nAB14;ETHIOPIC SYLLABLE DZEE;Lo;0;L;;;;;N;;;;;\nAB15;ETHIOPIC SYLLABLE DZE;Lo;0;L;;;;;N;;;;;\nAB16;ETHIOPIC SYLLABLE DZO;Lo;0;L;;;;;N;;;;;\nAB20;ETHIOPIC SYLLABLE CCHHA;Lo;0;L;;;;;N;;;;;\nAB21;ETHIOPIC SYLLABLE CCHHU;Lo;0;L;;;;;N;;;;;\nAB22;ETHIOPIC SYLLABLE CCHHI;Lo;0;L;;;;;N;;;;;\nAB23;ETHIOPIC SYLLABLE CCHHAA;Lo;0;L;;;;;N;;;;;\nAB24;ETHIOPIC SYLLABLE CCHHEE;Lo;0;L;;;;;N;;;;;\nAB25;ETHIOPIC SYLLABLE CCHHE;Lo;0;L;;;;;N;;;;;\nAB26;ETHIOPIC SYLLABLE CCHHO;Lo;0;L;;;;;N;;;;;\nAB28;ETHIOPIC SYLLABLE BBA;Lo;0;L;;;;;N;;;;;\nAB29;ETHIOPIC SYLLABLE BBU;Lo;0;L;;;;;N;;;;;\nAB2A;ETHIOPIC SYLLABLE BBI;Lo;0;L;;;;;N;;;;;\nAB2B;ETHIOPIC SYLLABLE BBAA;Lo;0;L;;;;;N;;;;;\nAB2C;ETHIOPIC SYLLABLE BBEE;Lo;0;L;;;;;N;;;;;\nAB2D;ETHIOPIC SYLLABLE BBE;Lo;0;L;;;;;N;;;;;\nAB2E;ETHIOPIC SYLLABLE BBO;Lo;0;L;;;;;N;;;;;\nAB30;LATIN SMALL LETTER BARRED ALPHA;Ll;0;L;;;;;N;;;;;\nAB31;LATIN SMALL LETTER A REVERSED-SCHWA;Ll;0;L;;;;;N;;;;;\nAB32;LATIN SMALL LETTER BLACKLETTER E;Ll;0;L;;;;;N;;;;;\nAB33;LATIN SMALL LETTER BARRED E;Ll;0;L;;;;;N;;;;;\nAB34;LATIN SMALL LETTER E WITH FLOURISH;Ll;0;L;;;;;N;;;;;\nAB35;LATIN SMALL LETTER LENIS F;Ll;0;L;;;;;N;;;;;\nAB36;LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;;\nAB37;LATIN SMALL LETTER L WITH INVERTED LAZY S;Ll;0;L;;;;;N;;;;;\nAB38;LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\nAB39;LATIN SMALL LETTER L WITH MIDDLE RING;Ll;0;L;;;;;N;;;;;\nAB3A;LATIN SMALL LETTER M WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;;\nAB3B;LATIN SMALL LETTER N WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;;\nAB3C;LATIN SMALL LETTER ENG WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;;\nAB3D;LATIN SMALL LETTER BLACKLETTER O;Ll;0;L;;;;;N;;;;;\nAB3E;LATIN SMALL LETTER BLACKLETTER O WITH STROKE;Ll;0;L;;;;;N;;;;;\nAB3F;LATIN SMALL LETTER OPEN O WITH STROKE;Ll;0;L;;;;;N;;;;;\nAB40;LATIN SMALL LETTER INVERTED OE;Ll;0;L;;;;;N;;;;;\nAB41;LATIN SMALL LETTER TURNED OE WITH STROKE;Ll;0;L;;;;;N;;;;;\nAB42;LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE;Ll;0;L;;;;;N;;;;;\nAB43;LATIN SMALL LETTER TURNED O OPEN-O;Ll;0;L;;;;;N;;;;;\nAB44;LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE;Ll;0;L;;;;;N;;;;;\nAB45;LATIN SMALL LETTER STIRRUP R;Ll;0;L;;;;;N;;;;;\nAB46;LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG;Ll;0;L;;;;;N;;;;;\nAB47;LATIN SMALL LETTER R WITHOUT HANDLE;Ll;0;L;;;;;N;;;;;\nAB48;LATIN SMALL LETTER DOUBLE R;Ll;0;L;;;;;N;;;;;\nAB49;LATIN SMALL LETTER R WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;;\nAB4A;LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL;Ll;0;L;;;;;N;;;;;\nAB4B;LATIN SMALL LETTER SCRIPT R;Ll;0;L;;;;;N;;;;;\nAB4C;LATIN SMALL LETTER SCRIPT R WITH RING;Ll;0;L;;;;;N;;;;;\nAB4D;LATIN SMALL LETTER BASELINE ESH;Ll;0;L;;;;;N;;;;;\nAB4E;LATIN SMALL LETTER U WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;;\nAB4F;LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;;\nAB50;LATIN SMALL LETTER UI;Ll;0;L;;;;;N;;;;;\nAB51;LATIN SMALL LETTER TURNED UI;Ll;0;L;;;;;N;;;;;\nAB52;LATIN SMALL LETTER U WITH LEFT HOOK;Ll;0;L;;;;;N;;;;;\nAB53;LATIN SMALL LETTER CHI;Ll;0;L;;;;;N;;;A7B3;;A7B3\nAB54;LATIN SMALL LETTER CHI WITH LOW RIGHT RING;Ll;0;L;;;;;N;;;;;\nAB55;LATIN SMALL LETTER CHI WITH LOW LEFT SERIF;Ll;0;L;;;;;N;;;;;\nAB56;LATIN SMALL LETTER X WITH LOW RIGHT RING;Ll;0;L;;;;;N;;;;;\nAB57;LATIN SMALL LETTER X WITH LONG LEFT LEG;Ll;0;L;;;;;N;;;;;\nAB58;LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING;Ll;0;L;;;;;N;;;;;\nAB59;LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF;Ll;0;L;;;;;N;;;;;\nAB5A;LATIN SMALL LETTER Y WITH SHORT RIGHT LEG;Ll;0;L;;;;;N;;;;;\nAB5B;MODIFIER BREVE WITH INVERTED BREVE;Sk;0;L;;;;;N;;;;;\nAB5C;MODIFIER LETTER SMALL HENG;Lm;0;L;<super> A727;;;;N;;;;;\nAB5D;MODIFIER LETTER SMALL L WITH INVERTED LAZY S;Lm;0;L;<super> AB37;;;;N;;;;;\nAB5E;MODIFIER LETTER SMALL L WITH MIDDLE TILDE;Lm;0;L;<super> 026B;;;;N;;;;;\nAB5F;MODIFIER LETTER SMALL U WITH LEFT HOOK;Lm;0;L;<super> AB52;;;;N;;;;;\nAB60;LATIN SMALL LETTER SAKHA YAT;Ll;0;L;;;;;N;;;;;\nAB61;LATIN SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;;;\nAB62;LATIN SMALL LETTER OPEN OE;Ll;0;L;;;;;N;;;;;\nAB63;LATIN SMALL LETTER UO;Ll;0;L;;;;;N;;;;;\nAB64;LATIN SMALL LETTER INVERTED ALPHA;Ll;0;L;;;;;N;;;;;\nAB65;GREEK LETTER SMALL CAPITAL OMEGA;Ll;0;L;;;;;N;;;;;\nAB66;LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\nAB67;LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\nAB68;LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;\nAB69;MODIFIER LETTER SMALL TURNED W;Lm;0;L;<super> 028D;;;;N;;;;;\nAB6A;MODIFIER LETTER LEFT TACK;Sk;0;ON;;;;;N;;;;;\nAB6B;MODIFIER LETTER RIGHT TACK;Sk;0;ON;;;;;N;;;;;\nAB70;CHEROKEE SMALL LETTER A;Ll;0;L;;;;;N;;;13A0;;13A0\nAB71;CHEROKEE SMALL LETTER E;Ll;0;L;;;;;N;;;13A1;;13A1\nAB72;CHEROKEE SMALL LETTER I;Ll;0;L;;;;;N;;;13A2;;13A2\nAB73;CHEROKEE SMALL LETTER O;Ll;0;L;;;;;N;;;13A3;;13A3\nAB74;CHEROKEE SMALL LETTER U;Ll;0;L;;;;;N;;;13A4;;13A4\nAB75;CHEROKEE SMALL LETTER V;Ll;0;L;;;;;N;;;13A5;;13A5\nAB76;CHEROKEE SMALL LETTER GA;Ll;0;L;;;;;N;;;13A6;;13A6\nAB77;CHEROKEE SMALL LETTER KA;Ll;0;L;;;;;N;;;13A7;;13A7\nAB78;CHEROKEE SMALL LETTER GE;Ll;0;L;;;;;N;;;13A8;;13A8\nAB79;CHEROKEE SMALL LETTER GI;Ll;0;L;;;;;N;;;13A9;;13A9\nAB7A;CHEROKEE SMALL LETTER GO;Ll;0;L;;;;;N;;;13AA;;13AA\nAB7B;CHEROKEE SMALL LETTER GU;Ll;0;L;;;;;N;;;13AB;;13AB\nAB7C;CHEROKEE SMALL LETTER GV;Ll;0;L;;;;;N;;;13AC;;13AC\nAB7D;CHEROKEE SMALL LETTER HA;Ll;0;L;;;;;N;;;13AD;;13AD\nAB7E;CHEROKEE SMALL LETTER HE;Ll;0;L;;;;;N;;;13AE;;13AE\nAB7F;CHEROKEE SMALL LETTER HI;Ll;0;L;;;;;N;;;13AF;;13AF\nAB80;CHEROKEE SMALL LETTER HO;Ll;0;L;;;;;N;;;13B0;;13B0\nAB81;CHEROKEE SMALL LETTER HU;Ll;0;L;;;;;N;;;13B1;;13B1\nAB82;CHEROKEE SMALL LETTER HV;Ll;0;L;;;;;N;;;13B2;;13B2\nAB83;CHEROKEE SMALL LETTER LA;Ll;0;L;;;;;N;;;13B3;;13B3\nAB84;CHEROKEE SMALL LETTER LE;Ll;0;L;;;;;N;;;13B4;;13B4\nAB85;CHEROKEE SMALL LETTER LI;Ll;0;L;;;;;N;;;13B5;;13B5\nAB86;CHEROKEE SMALL LETTER LO;Ll;0;L;;;;;N;;;13B6;;13B6\nAB87;CHEROKEE SMALL LETTER LU;Ll;0;L;;;;;N;;;13B7;;13B7\nAB88;CHEROKEE SMALL LETTER LV;Ll;0;L;;;;;N;;;13B8;;13B8\nAB89;CHEROKEE SMALL LETTER MA;Ll;0;L;;;;;N;;;13B9;;13B9\nAB8A;CHEROKEE SMALL LETTER ME;Ll;0;L;;;;;N;;;13BA;;13BA\nAB8B;CHEROKEE SMALL LETTER MI;Ll;0;L;;;;;N;;;13BB;;13BB\nAB8C;CHEROKEE SMALL LETTER MO;Ll;0;L;;;;;N;;;13BC;;13BC\nAB8D;CHEROKEE SMALL LETTER MU;Ll;0;L;;;;;N;;;13BD;;13BD\nAB8E;CHEROKEE SMALL LETTER NA;Ll;0;L;;;;;N;;;13BE;;13BE\nAB8F;CHEROKEE SMALL LETTER HNA;Ll;0;L;;;;;N;;;13BF;;13BF\nAB90;CHEROKEE SMALL LETTER NAH;Ll;0;L;;;;;N;;;13C0;;13C0\nAB91;CHEROKEE SMALL LETTER NE;Ll;0;L;;;;;N;;;13C1;;13C1\nAB92;CHEROKEE SMALL LETTER NI;Ll;0;L;;;;;N;;;13C2;;13C2\nAB93;CHEROKEE SMALL LETTER NO;Ll;0;L;;;;;N;;;13C3;;13C3\nAB94;CHEROKEE SMALL LETTER NU;Ll;0;L;;;;;N;;;13C4;;13C4\nAB95;CHEROKEE SMALL LETTER NV;Ll;0;L;;;;;N;;;13C5;;13C5\nAB96;CHEROKEE SMALL LETTER QUA;Ll;0;L;;;;;N;;;13C6;;13C6\nAB97;CHEROKEE SMALL LETTER QUE;Ll;0;L;;;;;N;;;13C7;;13C7\nAB98;CHEROKEE SMALL LETTER QUI;Ll;0;L;;;;;N;;;13C8;;13C8\nAB99;CHEROKEE SMALL LETTER QUO;Ll;0;L;;;;;N;;;13C9;;13C9\nAB9A;CHEROKEE SMALL LETTER QUU;Ll;0;L;;;;;N;;;13CA;;13CA\nAB9B;CHEROKEE SMALL LETTER QUV;Ll;0;L;;;;;N;;;13CB;;13CB\nAB9C;CHEROKEE SMALL LETTER SA;Ll;0;L;;;;;N;;;13CC;;13CC\nAB9D;CHEROKEE SMALL LETTER S;Ll;0;L;;;;;N;;;13CD;;13CD\nAB9E;CHEROKEE SMALL LETTER SE;Ll;0;L;;;;;N;;;13CE;;13CE\nAB9F;CHEROKEE SMALL LETTER SI;Ll;0;L;;;;;N;;;13CF;;13CF\nABA0;CHEROKEE SMALL LETTER SO;Ll;0;L;;;;;N;;;13D0;;13D0\nABA1;CHEROKEE SMALL LETTER SU;Ll;0;L;;;;;N;;;13D1;;13D1\nABA2;CHEROKEE SMALL LETTER SV;Ll;0;L;;;;;N;;;13D2;;13D2\nABA3;CHEROKEE SMALL LETTER DA;Ll;0;L;;;;;N;;;13D3;;13D3\nABA4;CHEROKEE SMALL LETTER TA;Ll;0;L;;;;;N;;;13D4;;13D4\nABA5;CHEROKEE SMALL LETTER DE;Ll;0;L;;;;;N;;;13D5;;13D5\nABA6;CHEROKEE SMALL LETTER TE;Ll;0;L;;;;;N;;;13D6;;13D6\nABA7;CHEROKEE SMALL LETTER DI;Ll;0;L;;;;;N;;;13D7;;13D7\nABA8;CHEROKEE SMALL LETTER TI;Ll;0;L;;;;;N;;;13D8;;13D8\nABA9;CHEROKEE SMALL LETTER DO;Ll;0;L;;;;;N;;;13D9;;13D9\nABAA;CHEROKEE SMALL LETTER DU;Ll;0;L;;;;;N;;;13DA;;13DA\nABAB;CHEROKEE SMALL LETTER DV;Ll;0;L;;;;;N;;;13DB;;13DB\nABAC;CHEROKEE SMALL LETTER DLA;Ll;0;L;;;;;N;;;13DC;;13DC\nABAD;CHEROKEE SMALL LETTER TLA;Ll;0;L;;;;;N;;;13DD;;13DD\nABAE;CHEROKEE SMALL LETTER TLE;Ll;0;L;;;;;N;;;13DE;;13DE\nABAF;CHEROKEE SMALL LETTER TLI;Ll;0;L;;;;;N;;;13DF;;13DF\nABB0;CHEROKEE SMALL LETTER TLO;Ll;0;L;;;;;N;;;13E0;;13E0\nABB1;CHEROKEE SMALL LETTER TLU;Ll;0;L;;;;;N;;;13E1;;13E1\nABB2;CHEROKEE SMALL LETTER TLV;Ll;0;L;;;;;N;;;13E2;;13E2\nABB3;CHEROKEE SMALL LETTER TSA;Ll;0;L;;;;;N;;;13E3;;13E3\nABB4;CHEROKEE SMALL LETTER TSE;Ll;0;L;;;;;N;;;13E4;;13E4\nABB5;CHEROKEE SMALL LETTER TSI;Ll;0;L;;;;;N;;;13E5;;13E5\nABB6;CHEROKEE SMALL LETTER TSO;Ll;0;L;;;;;N;;;13E6;;13E6\nABB7;CHEROKEE SMALL LETTER TSU;Ll;0;L;;;;;N;;;13E7;;13E7\nABB8;CHEROKEE SMALL LETTER TSV;Ll;0;L;;;;;N;;;13E8;;13E8\nABB9;CHEROKEE SMALL LETTER WA;Ll;0;L;;;;;N;;;13E9;;13E9\nABBA;CHEROKEE SMALL LETTER WE;Ll;0;L;;;;;N;;;13EA;;13EA\nABBB;CHEROKEE SMALL LETTER WI;Ll;0;L;;;;;N;;;13EB;;13EB\nABBC;CHEROKEE SMALL LETTER WO;Ll;0;L;;;;;N;;;13EC;;13EC\nABBD;CHEROKEE SMALL LETTER WU;Ll;0;L;;;;;N;;;13ED;;13ED\nABBE;CHEROKEE SMALL LETTER WV;Ll;0;L;;;;;N;;;13EE;;13EE\nABBF;CHEROKEE SMALL LETTER YA;Ll;0;L;;;;;N;;;13EF;;13EF\nABC0;MEETEI MAYEK LETTER KOK;Lo;0;L;;;;;N;;;;;\nABC1;MEETEI MAYEK LETTER SAM;Lo;0;L;;;;;N;;;;;\nABC2;MEETEI MAYEK LETTER LAI;Lo;0;L;;;;;N;;;;;\nABC3;MEETEI MAYEK LETTER MIT;Lo;0;L;;;;;N;;;;;\nABC4;MEETEI MAYEK LETTER PA;Lo;0;L;;;;;N;;;;;\nABC5;MEETEI MAYEK LETTER NA;Lo;0;L;;;;;N;;;;;\nABC6;MEETEI MAYEK LETTER CHIL;Lo;0;L;;;;;N;;;;;\nABC7;MEETEI MAYEK LETTER TIL;Lo;0;L;;;;;N;;;;;\nABC8;MEETEI MAYEK LETTER KHOU;Lo;0;L;;;;;N;;;;;\nABC9;MEETEI MAYEK LETTER NGOU;Lo;0;L;;;;;N;;;;;\nABCA;MEETEI MAYEK LETTER THOU;Lo;0;L;;;;;N;;;;;\nABCB;MEETEI MAYEK LETTER WAI;Lo;0;L;;;;;N;;;;;\nABCC;MEETEI MAYEK LETTER YANG;Lo;0;L;;;;;N;;;;;\nABCD;MEETEI MAYEK LETTER HUK;Lo;0;L;;;;;N;;;;;\nABCE;MEETEI MAYEK LETTER UN;Lo;0;L;;;;;N;;;;;\nABCF;MEETEI MAYEK LETTER I;Lo;0;L;;;;;N;;;;;\nABD0;MEETEI MAYEK LETTER PHAM;Lo;0;L;;;;;N;;;;;\nABD1;MEETEI MAYEK LETTER ATIYA;Lo;0;L;;;;;N;;;;;\nABD2;MEETEI MAYEK LETTER GOK;Lo;0;L;;;;;N;;;;;\nABD3;MEETEI MAYEK LETTER JHAM;Lo;0;L;;;;;N;;;;;\nABD4;MEETEI MAYEK LETTER RAI;Lo;0;L;;;;;N;;;;;\nABD5;MEETEI MAYEK LETTER BA;Lo;0;L;;;;;N;;;;;\nABD6;MEETEI MAYEK LETTER JIL;Lo;0;L;;;;;N;;;;;\nABD7;MEETEI MAYEK LETTER DIL;Lo;0;L;;;;;N;;;;;\nABD8;MEETEI MAYEK LETTER GHOU;Lo;0;L;;;;;N;;;;;\nABD9;MEETEI MAYEK LETTER DHOU;Lo;0;L;;;;;N;;;;;\nABDA;MEETEI MAYEK LETTER BHAM;Lo;0;L;;;;;N;;;;;\nABDB;MEETEI MAYEK LETTER KOK LONSUM;Lo;0;L;;;;;N;;;;;\nABDC;MEETEI MAYEK LETTER LAI LONSUM;Lo;0;L;;;;;N;;;;;\nABDD;MEETEI MAYEK LETTER MIT LONSUM;Lo;0;L;;;;;N;;;;;\nABDE;MEETEI MAYEK LETTER PA LONSUM;Lo;0;L;;;;;N;;;;;\nABDF;MEETEI MAYEK LETTER NA LONSUM;Lo;0;L;;;;;N;;;;;\nABE0;MEETEI MAYEK LETTER TIL LONSUM;Lo;0;L;;;;;N;;;;;\nABE1;MEETEI MAYEK LETTER NGOU LONSUM;Lo;0;L;;;;;N;;;;;\nABE2;MEETEI MAYEK LETTER I LONSUM;Lo;0;L;;;;;N;;;;;\nABE3;MEETEI MAYEK VOWEL SIGN ONAP;Mc;0;L;;;;;N;;;;;\nABE4;MEETEI MAYEK VOWEL SIGN INAP;Mc;0;L;;;;;N;;;;;\nABE5;MEETEI MAYEK VOWEL SIGN ANAP;Mn;0;NSM;;;;;N;;;;;\nABE6;MEETEI MAYEK VOWEL SIGN YENAP;Mc;0;L;;;;;N;;;;;\nABE7;MEETEI MAYEK VOWEL SIGN SOUNAP;Mc;0;L;;;;;N;;;;;\nABE8;MEETEI MAYEK VOWEL SIGN UNAP;Mn;0;NSM;;;;;N;;;;;\nABE9;MEETEI MAYEK VOWEL SIGN CHEINAP;Mc;0;L;;;;;N;;;;;\nABEA;MEETEI MAYEK VOWEL SIGN NUNG;Mc;0;L;;;;;N;;;;;\nABEB;MEETEI MAYEK CHEIKHEI;Po;0;L;;;;;N;;;;;\nABEC;MEETEI MAYEK LUM IYEK;Mc;0;L;;;;;N;;;;;\nABED;MEETEI MAYEK APUN IYEK;Mn;9;NSM;;;;;N;;;;;\nABF0;MEETEI MAYEK DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\nABF1;MEETEI MAYEK DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\nABF2;MEETEI MAYEK DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\nABF3;MEETEI MAYEK DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\nABF4;MEETEI MAYEK DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\nABF5;MEETEI MAYEK DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\nABF6;MEETEI MAYEK DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\nABF7;MEETEI MAYEK DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\nABF8;MEETEI MAYEK DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\nABF9;MEETEI MAYEK DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\nAC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;\nD7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;\nD7B0;HANGUL JUNGSEONG O-YEO;Lo;0;L;;;;;N;;;;;\nD7B1;HANGUL JUNGSEONG O-O-I;Lo;0;L;;;;;N;;;;;\nD7B2;HANGUL JUNGSEONG YO-A;Lo;0;L;;;;;N;;;;;\nD7B3;HANGUL JUNGSEONG YO-AE;Lo;0;L;;;;;N;;;;;\nD7B4;HANGUL JUNGSEONG YO-EO;Lo;0;L;;;;;N;;;;;\nD7B5;HANGUL JUNGSEONG U-YEO;Lo;0;L;;;;;N;;;;;\nD7B6;HANGUL JUNGSEONG U-I-I;Lo;0;L;;;;;N;;;;;\nD7B7;HANGUL JUNGSEONG YU-AE;Lo;0;L;;;;;N;;;;;\nD7B8;HANGUL JUNGSEONG YU-O;Lo;0;L;;;;;N;;;;;\nD7B9;HANGUL JUNGSEONG EU-A;Lo;0;L;;;;;N;;;;;\nD7BA;HANGUL JUNGSEONG EU-EO;Lo;0;L;;;;;N;;;;;\nD7BB;HANGUL JUNGSEONG EU-E;Lo;0;L;;;;;N;;;;;\nD7BC;HANGUL JUNGSEONG EU-O;Lo;0;L;;;;;N;;;;;\nD7BD;HANGUL JUNGSEONG I-YA-O;Lo;0;L;;;;;N;;;;;\nD7BE;HANGUL JUNGSEONG I-YAE;Lo;0;L;;;;;N;;;;;\nD7BF;HANGUL JUNGSEONG I-YEO;Lo;0;L;;;;;N;;;;;\nD7C0;HANGUL JUNGSEONG I-YE;Lo;0;L;;;;;N;;;;;\nD7C1;HANGUL JUNGSEONG I-O-I;Lo;0;L;;;;;N;;;;;\nD7C2;HANGUL JUNGSEONG I-YO;Lo;0;L;;;;;N;;;;;\nD7C3;HANGUL JUNGSEONG I-YU;Lo;0;L;;;;;N;;;;;\nD7C4;HANGUL JUNGSEONG I-I;Lo;0;L;;;;;N;;;;;\nD7C5;HANGUL JUNGSEONG ARAEA-A;Lo;0;L;;;;;N;;;;;\nD7C6;HANGUL JUNGSEONG ARAEA-E;Lo;0;L;;;;;N;;;;;\nD7CB;HANGUL JONGSEONG NIEUN-RIEUL;Lo;0;L;;;;;N;;;;;\nD7CC;HANGUL JONGSEONG NIEUN-CHIEUCH;Lo;0;L;;;;;N;;;;;\nD7CD;HANGUL JONGSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;;\nD7CE;HANGUL JONGSEONG SSANGTIKEUT-PIEUP;Lo;0;L;;;;;N;;;;;\nD7CF;HANGUL JONGSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;;\nD7D0;HANGUL JONGSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;;\nD7D1;HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;\nD7D2;HANGUL JONGSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;;\nD7D3;HANGUL JONGSEONG TIKEUT-CHIEUCH;Lo;0;L;;;;;N;;;;;\nD7D4;HANGUL JONGSEONG TIKEUT-THIEUTH;Lo;0;L;;;;;N;;;;;\nD7D5;HANGUL JONGSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;\nD7D6;HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;;\nD7D7;HANGUL JONGSEONG SSANGRIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;\nD7D8;HANGUL JONGSEONG RIEUL-MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;\nD7D9;HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;\nD7DA;HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;\nD7DB;HANGUL JONGSEONG RIEUL-YESIEUNG;Lo;0;L;;;;;N;;;;;\nD7DC;HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH;Lo;0;L;;;;;N;;;;;\nD7DD;HANGUL JONGSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;\nD7DE;HANGUL JONGSEONG MIEUM-NIEUN;Lo;0;L;;;;;N;;;;;\nD7DF;HANGUL JONGSEONG MIEUM-SSANGNIEUN;Lo;0;L;;;;;N;;;;;\nD7E0;HANGUL JONGSEONG SSANGMIEUM;Lo;0;L;;;;;N;;;;;\nD7E1;HANGUL JONGSEONG MIEUM-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;\nD7E2;HANGUL JONGSEONG MIEUM-CIEUC;Lo;0;L;;;;;N;;;;;\nD7E3;HANGUL JONGSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;\nD7E4;HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;;\nD7E5;HANGUL JONGSEONG PIEUP-MIEUM;Lo;0;L;;;;;N;;;;;\nD7E6;HANGUL JONGSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;;\nD7E7;HANGUL JONGSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;\nD7E8;HANGUL JONGSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;\nD7E9;HANGUL JONGSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;\nD7EA;HANGUL JONGSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;\nD7EB;HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;\nD7EC;HANGUL JONGSEONG SSANGSIOS-KIYEOK;Lo;0;L;;;;;N;;;;;\nD7ED;HANGUL JONGSEONG SSANGSIOS-TIKEUT;Lo;0;L;;;;;N;;;;;\nD7EE;HANGUL JONGSEONG SIOS-PANSIOS;Lo;0;L;;;;;N;;;;;\nD7EF;HANGUL JONGSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;\nD7F0;HANGUL JONGSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;\nD7F1;HANGUL JONGSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;\nD7F2;HANGUL JONGSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;\nD7F3;HANGUL JONGSEONG PANSIOS-PIEUP;Lo;0;L;;;;;N;;;;;\nD7F4;HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;\nD7F5;HANGUL JONGSEONG YESIEUNG-MIEUM;Lo;0;L;;;;;N;;;;;\nD7F6;HANGUL JONGSEONG YESIEUNG-HIEUH;Lo;0;L;;;;;N;;;;;\nD7F7;HANGUL JONGSEONG CIEUC-PIEUP;Lo;0;L;;;;;N;;;;;\nD7F8;HANGUL JONGSEONG CIEUC-SSANGPIEUP;Lo;0;L;;;;;N;;;;;\nD7F9;HANGUL JONGSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;;\nD7FA;HANGUL JONGSEONG PHIEUPH-SIOS;Lo;0;L;;;;;N;;;;;\nD7FB;HANGUL JONGSEONG PHIEUPH-THIEUTH;Lo;0;L;;;;;N;;;;;\nD800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;\nDB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;\nDB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;\nDBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;\nDC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;\nDFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;\nE000;<Private Use, First>;Co;0;L;;;;;N;;;;;\nF8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;\nF900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;\nF901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;\nF902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;\nF903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;\nF904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;\nF905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;\nF906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;\nF907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;\nF908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;\nF909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;\nF90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;\nF90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;\nF90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;\nF90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;\nF90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;\nF90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;\nF910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;\nF911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;\nF912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;\nF913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;\nF914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;\nF915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;\nF916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;\nF917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;\nF918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;\nF919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;\nF91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;\nF91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;\nF91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;\nF91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;\nF91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;\nF91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;\nF920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;\nF921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;\nF922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;\nF923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;\nF924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;\nF925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;\nF926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;\nF927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;\nF928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;\nF929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;\nF92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;\nF92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;\nF92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;\nF92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;\nF92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;\nF92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;\nF930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;\nF931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;\nF932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;\nF933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;\nF934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;\nF935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;\nF936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;\nF937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;\nF938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;\nF939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;\nF93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;\nF93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;\nF93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;\nF93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;\nF93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;\nF93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;\nF940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;\nF941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;\nF942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;\nF943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;\nF944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;\nF945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;\nF946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;\nF947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;\nF948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;\nF949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;\nF94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;\nF94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;\nF94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;\nF94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;\nF94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;\nF94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;\nF950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;\nF951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;;\nF952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;\nF953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;\nF954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;\nF955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;\nF956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;\nF957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;\nF958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;\nF959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;\nF95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;\nF95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;\nF95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;\nF95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;\nF95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;\nF95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;\nF960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;\nF961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;\nF962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;\nF963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;\nF964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;\nF965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;\nF966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;\nF967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;\nF968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;\nF969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;\nF96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;\nF96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;3;N;;;;;\nF96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;\nF96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;\nF96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;\nF96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;\nF970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;\nF971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;\nF972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;\nF973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;10;N;;;;;\nF974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;\nF975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;\nF976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;\nF977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;\nF978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;2;N;;;;;\nF979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;\nF97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;\nF97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;\nF97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;\nF97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;\nF97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;\nF97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;\nF980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;\nF981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;\nF982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;\nF983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;\nF984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;\nF985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;\nF986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;\nF987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;\nF988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;\nF989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;\nF98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;\nF98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;\nF98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;\nF98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;\nF98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;\nF98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;\nF990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;\nF991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;\nF992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;\nF993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;\nF994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;\nF995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;\nF996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;\nF997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;\nF998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;\nF999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;\nF99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;\nF99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;\nF99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;\nF99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;\nF99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;\nF99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;\nF9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;\nF9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;\nF9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;\nF9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;\nF9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;\nF9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;\nF9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;\nF9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;\nF9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;\nF9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;\nF9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;\nF9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;\nF9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;\nF9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;\nF9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;\nF9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;\nF9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;\nF9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;\nF9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;0;N;;;;;\nF9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;\nF9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;\nF9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;\nF9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;\nF9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;\nF9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;\nF9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;\nF9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;\nF9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;\nF9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;\nF9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;\nF9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;\nF9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;\nF9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;\nF9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;\nF9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;\nF9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;\nF9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;\nF9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;\nF9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;\nF9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;\nF9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;\nF9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;\nF9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;\nF9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;\nF9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;\nF9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;\nF9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;\nF9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;\nF9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;\nF9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;6;N;;;;;\nF9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;\nF9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;6;N;;;;;\nF9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;\nF9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;\nF9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;\nF9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;\nF9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;\nF9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;\nF9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;\nF9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;\nF9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;\nF9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;\nF9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;\nF9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;\nF9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;\nF9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;\nF9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;\nF9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;\nF9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;\nF9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;\nF9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;\nF9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;\nF9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;\nF9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;\nF9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;\nF9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;\nF9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;\nF9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;\nF9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;\nF9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;\nF9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;\nF9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;\nF9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;\nF9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;\nF9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;\nF9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;\nF9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;\nF9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;\nF9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;\nF9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;\nF9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;\nF9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;\nF9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;\nF9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;10;N;;;;;\nF9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;\nF9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;\nFA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;\nFA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;\nFA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;\nFA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;\nFA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;\nFA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;\nFA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;\nFA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;\nFA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;\nFA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;\nFA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;\nFA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;\nFA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;\nFA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;\nFA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;\nFA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;\nFA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;\nFA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;\nFA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;\nFA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;\nFA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;\nFA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;\nFA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;\nFA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;\nFA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;\nFA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;\nFA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;\nFA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;\nFA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;\nFA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;\nFA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;\nFA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;;;;\nFA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;\nFA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;\nFA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;\nFA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;;;;\nFA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;\nFA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;\nFA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;\nFA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;\nFA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;\nFA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;\nFA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;\nFA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;\nFA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;\nFA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;\nFA2E;CJK COMPATIBILITY IDEOGRAPH-FA2E;Lo;0;L;90DE;;;;N;;;;;\nFA2F;CJK COMPATIBILITY IDEOGRAPH-FA2F;Lo;0;L;96B7;;;;N;;;;;\nFA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;;\nFA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;;\nFA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;;\nFA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;;\nFA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;;\nFA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;;\nFA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;;\nFA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;;\nFA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;;\nFA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;;\nFA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;;\nFA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;;\nFA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;;\nFA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;;\nFA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;;\nFA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;;\nFA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;;\nFA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;;\nFA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;;\nFA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;;\nFA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;;\nFA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;;\nFA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;;\nFA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;;\nFA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;;\nFA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;;\nFA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;;\nFA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;;\nFA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;;\nFA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;;\nFA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;;\nFA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;;\nFA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;;\nFA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;;\nFA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;;\nFA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;;\nFA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;;\nFA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;;\nFA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;;\nFA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;;\nFA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;;\nFA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;;\nFA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;;\nFA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;;\nFA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;;\nFA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;;\nFA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;;\nFA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;;\nFA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;;\nFA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;;\nFA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;;\nFA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;;\nFA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;;\nFA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;;\nFA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;;\nFA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;;\nFA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;;\nFA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;;\nFA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;;\nFA6B;CJK COMPATIBILITY IDEOGRAPH-FA6B;Lo;0;L;6075;;;;N;;;;;\nFA6C;CJK COMPATIBILITY IDEOGRAPH-FA6C;Lo;0;L;242EE;;;;N;;;;;\nFA6D;CJK COMPATIBILITY IDEOGRAPH-FA6D;Lo;0;L;8218;;;;N;;;;;\nFA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;;\nFA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;;\nFA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;;\nFA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;;\nFA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;;\nFA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;;\nFA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;;\nFA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;;\nFA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;;\nFA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;;\nFA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;;\nFA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;;\nFA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;;\nFA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;;\nFA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;;\nFA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;;\nFA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;;\nFA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;;\nFA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;;\nFA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;;\nFA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;;\nFA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;;\nFA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;;\nFA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;;\nFA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;;\nFA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;;\nFA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;;\nFA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;;\nFA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;;\nFA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;;\nFA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;;\nFA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;;\nFA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;;\nFA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;;\nFA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;;\nFA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;;\nFA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;;\nFA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;;\nFA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;;\nFA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;;\nFA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;;\nFA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;;\nFA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;;\nFA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;;\nFA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;;\nFA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;;\nFA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;;\nFA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;;\nFAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;;\nFAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;;\nFAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;;\nFAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;;\nFAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;;\nFAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;;\nFAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;;\nFAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;;\nFAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;;\nFAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;;\nFAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;;\nFAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;;\nFAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;;\nFAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;;\nFAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;;\nFAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;;\nFAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;;\nFAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;;\nFAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;;\nFAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;;\nFAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;;\nFAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;;\nFAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;;\nFAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;;\nFAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;;\nFAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;;\nFABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;;\nFABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;;\nFABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;;\nFABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;;\nFABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;;\nFABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;;\nFAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;;\nFAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;;\nFAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;;\nFAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;;\nFAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;;\nFAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;;\nFAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;;\nFAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;;\nFAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;;\nFAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;;\nFACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;;\nFACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;;\nFACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;;\nFACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;;\nFACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;;\nFACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;;\nFAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;;\nFAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;;\nFAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;;\nFAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;;\nFAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;;\nFAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;;\nFAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;;\nFAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;;\nFAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;;\nFAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;;\nFB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;\nFB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;\nFB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;\nFB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;\nFB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;\nFB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;\nFB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;\nFB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;\nFB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;\nFB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;\nFB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;\nFB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;\nFB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;\nFB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;\nFB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;\nFB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;\nFB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;\nFB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;\nFB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;\nFB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;\nFB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;\nFB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;\nFB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;\nFB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;\nFB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;;\nFB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;\nFB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;\nFB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;\nFB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;\nFB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;\nFB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;\nFB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;\nFB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;\nFB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;\nFB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;\nFB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;\nFB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;\nFB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;\nFB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;\nFB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;\nFB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;\nFB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;\nFB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;\nFB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;\nFB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;\nFB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;\nFB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;\nFB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;\nFB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;\nFB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;\nFB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;\nFB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;\nFB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;\nFB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;\nFB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;\nFB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;\nFB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;\nFB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;\nFB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;\nFB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;\nFB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;\nFB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;\nFB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;\nFB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;\nFB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;\nFB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;\nFB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;\nFB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;\nFB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;\nFB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;\nFB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;\nFB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;\nFB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;\nFB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;\nFB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;\nFB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;\nFB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;\nFB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;\nFB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;\nFB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;\nFB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;\nFB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;\nFB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;\nFB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;\nFB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;\nFB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;\nFB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;\nFB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;\nFB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;\nFB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;\nFB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;\nFB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;\nFB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;\nFB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;\nFB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;\nFB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;\nFB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;\nFB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;\nFB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;\nFB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;\nFB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;\nFB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;\nFB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;\nFB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;\nFB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;\nFB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;\nFB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;\nFB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;\nFB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;\nFB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;\nFB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;\nFB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;\nFB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;\nFB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;\nFB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;\nFB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;\nFB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;\nFB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;\nFB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;\nFB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;\nFB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;\nFB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;\nFB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;\nFB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;\nFB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;\nFB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;\nFB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;\nFB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;\nFB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;\nFB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;\nFB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;\nFB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;\nFB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;\nFB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;\nFB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;\nFB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;\nFB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;\nFB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;\nFBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;\nFBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;\nFBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;\nFBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;\nFBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;\nFBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;\nFBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;\nFBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;\nFBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;\nFBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;\nFBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;\nFBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;\nFBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;\nFBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;\nFBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;\nFBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;\nFBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;\nFBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;\nFBB2;ARABIC SYMBOL DOT ABOVE;Sk;0;AL;;;;;N;;;;;\nFBB3;ARABIC SYMBOL DOT BELOW;Sk;0;AL;;;;;N;;;;;\nFBB4;ARABIC SYMBOL TWO DOTS ABOVE;Sk;0;AL;;;;;N;;;;;\nFBB5;ARABIC SYMBOL TWO DOTS BELOW;Sk;0;AL;;;;;N;;;;;\nFBB6;ARABIC SYMBOL THREE DOTS ABOVE;Sk;0;AL;;;;;N;;;;;\nFBB7;ARABIC SYMBOL THREE DOTS BELOW;Sk;0;AL;;;;;N;;;;;\nFBB8;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE;Sk;0;AL;;;;;N;;;;;\nFBB9;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW;Sk;0;AL;;;;;N;;;;;\nFBBA;ARABIC SYMBOL FOUR DOTS ABOVE;Sk;0;AL;;;;;N;;;;;\nFBBB;ARABIC SYMBOL FOUR DOTS BELOW;Sk;0;AL;;;;;N;;;;;\nFBBC;ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW;Sk;0;AL;;;;;N;;;;;\nFBBD;ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE;Sk;0;AL;;;;;N;;;;;\nFBBE;ARABIC SYMBOL TWO DOTS VERTICALLY BELOW;Sk;0;AL;;;;;N;;;;;\nFBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;;\nFBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;;\nFBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;;\nFBC2;ARABIC SYMBOL WASLA ABOVE;Sk;0;AL;;;;;N;;;;;\nFBC3;ARABIC LIGATURE JALLA WA-ALAA;So;0;ON;;;;;N;;;;;\nFBC4;ARABIC LIGATURE DAAMAT BARAKAATUHUM;So;0;ON;;;;;N;;;;;\nFBC5;ARABIC LIGATURE RAHMATU ALLAAHI TAAALAA ALAYH;So;0;ON;;;;;N;;;;;\nFBC6;ARABIC LIGATURE RAHMATU ALLAAHI ALAYHIM;So;0;ON;;;;;N;;;;;\nFBC7;ARABIC LIGATURE RAHMATU ALLAAHI ALAYHIMAA;So;0;ON;;;;;N;;;;;\nFBC8;ARABIC LIGATURE RAHIMAHUM ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;;\nFBC9;ARABIC LIGATURE RAHIMAHUMAA ALLAAH;So;0;ON;;;;;N;;;;;\nFBCA;ARABIC LIGATURE RAHIMAHUMAA ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;;\nFBCB;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANHUM;So;0;ON;;;;;N;;;;;\nFBCC;ARABIC LIGATURE HAFIZAHU ALLAAH;So;0;ON;;;;;N;;;;;\nFBCD;ARABIC LIGATURE HAFIZAHU ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;;\nFBCE;ARABIC LIGATURE HAFIZAHUM ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;;\nFBCF;ARABIC LIGATURE HAFIZAHUMAA ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;;\nFBD0;ARABIC LIGATURE SALLALLAAHU TAAALAA ALAYHI WA-SALLAM;So;0;ON;;;;;N;;;;;\nFBD1;ARABIC LIGATURE AJJAL ALLAAHU FARAJAHU ASH-SHAREEF;So;0;ON;;;;;N;;;;;\nFBD2;ARABIC LIGATURE ALAYHI AR-RAHMAH;So;0;ON;;;;;N;;;;;\nFBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;\nFBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;\nFBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;\nFBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;\nFBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;\nFBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;\nFBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;\nFBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;\nFBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;\nFBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;\nFBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;\nFBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;\nFBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;\nFBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;\nFBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;\nFBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;\nFBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;\nFBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;\nFBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;\nFBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;\nFBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;\nFBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;\nFBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;\nFBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;\nFBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;\nFBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;\nFBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;\nFBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;\nFBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;\nFBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;\nFBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;\nFBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;\nFBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;\nFBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;\nFBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;\nFBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;\nFBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;\nFBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;\nFBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;\nFBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;\nFBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;\nFBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;\nFBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;\nFBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;\nFBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;\nFC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;\nFC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;\nFC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;\nFC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;\nFC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;\nFC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;\nFC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;\nFC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;\nFC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;\nFC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;\nFC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;\nFC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;\nFC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;\nFC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;\nFC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;\nFC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;\nFC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;\nFC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;\nFC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;\nFC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;\nFC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;\nFC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;\nFC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;\nFC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;\nFC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;\nFC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;\nFC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;\nFC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;\nFC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;\nFC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;\nFC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;\nFC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;\nFC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;\nFC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;\nFC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;\nFC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;\nFC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;\nFC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;\nFC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;\nFC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;\nFC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;\nFC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;\nFC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;\nFC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;\nFC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;\nFC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;\nFC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;\nFC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;\nFC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;\nFC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;\nFC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;\nFC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;\nFC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;\nFC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;\nFC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;\nFC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;\nFC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;\nFC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;\nFC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;\nFC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;\nFC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;\nFC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;\nFC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;\nFC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;\nFC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;\nFC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;\nFC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;\nFC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;\nFC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;\nFC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;\nFC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;\nFC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;\nFC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;\nFC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;\nFC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;\nFC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;\nFC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;\nFC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;\nFC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;\nFC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;\nFC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;\nFC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;\nFC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;\nFC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;\nFC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;\nFC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;\nFC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;\nFC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;\nFC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;\nFC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;\nFC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;\nFC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;\nFC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;\nFC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;\nFC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;\nFC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;\nFC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;\nFC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;\nFC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;\nFC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;\nFC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;\nFC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;\nFC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;\nFC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;\nFC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;\nFC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;\nFC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;\nFC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;\nFC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;\nFC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;\nFC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;\nFC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;\nFC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;\nFC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;\nFC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;\nFC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;\nFC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;\nFC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;\nFC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;\nFC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;\nFC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;\nFC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;\nFC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;\nFC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;\nFC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;\nFC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;\nFC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;\nFC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;\nFC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;\nFC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;\nFC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;\nFC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;\nFC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;\nFC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;\nFC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;\nFC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;\nFC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;\nFC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;\nFC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;\nFC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;\nFC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;\nFC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;\nFC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;\nFC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;\nFC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;\nFC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;\nFC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;\nFC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;\nFC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;\nFC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;\nFC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;\nFC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;\nFC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;\nFC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;\nFC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;\nFC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;\nFC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;\nFC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;\nFC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;\nFC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;\nFCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;\nFCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;\nFCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;\nFCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;\nFCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;\nFCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;\nFCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;\nFCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;\nFCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;\nFCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;\nFCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;\nFCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;\nFCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;\nFCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;\nFCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;\nFCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;\nFCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;\nFCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;\nFCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;\nFCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;\nFCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;\nFCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;\nFCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;\nFCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;\nFCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;\nFCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;\nFCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;\nFCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;\nFCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;\nFCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;\nFCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;\nFCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;\nFCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;\nFCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;\nFCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;\nFCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;\nFCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;\nFCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;\nFCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;\nFCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;\nFCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;\nFCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;\nFCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;\nFCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;\nFCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;\nFCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;\nFCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;\nFCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;\nFCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;\nFCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;\nFCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;\nFCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;\nFCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;\nFCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;\nFCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;\nFCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;\nFCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;\nFCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;\nFCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;\nFCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;\nFCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;\nFCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;\nFCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;\nFCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;\nFCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;\nFCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;\nFCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;\nFCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;\nFCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;\nFCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;\nFCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;\nFCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;\nFCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;\nFCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;\nFCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;\nFCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;\nFCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;\nFCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;\nFCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;\nFCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;\nFCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;\nFCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;\nFCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;\nFCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;\nFCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;\nFCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;\nFCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;\nFCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;\nFCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;\nFCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;\nFCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;\nFCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;\nFCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;\nFCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;\nFCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;\nFCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;\nFD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;\nFD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;\nFD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;\nFD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;\nFD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;\nFD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;\nFD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;\nFD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;\nFD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;\nFD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;\nFD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;\nFD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;\nFD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;\nFD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;\nFD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;\nFD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;\nFD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;\nFD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;\nFD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;\nFD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;\nFD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;\nFD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;\nFD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;\nFD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;\nFD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;\nFD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;\nFD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;\nFD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;\nFD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;\nFD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;\nFD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;\nFD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;\nFD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;\nFD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;\nFD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;\nFD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;\nFD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;\nFD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;\nFD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;\nFD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;\nFD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;\nFD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;\nFD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;\nFD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;\nFD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;\nFD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;\nFD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;\nFD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;\nFD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;\nFD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;\nFD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;\nFD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;\nFD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;\nFD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;\nFD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;\nFD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;\nFD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;\nFD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;\nFD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;\nFD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;\nFD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;\nFD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;\nFD3E;ORNATE LEFT PARENTHESIS;Pe;0;ON;;;;;N;;;;;\nFD3F;ORNATE RIGHT PARENTHESIS;Ps;0;ON;;;;;N;;;;;\nFD40;ARABIC LIGATURE RAHIMAHU ALLAAH;So;0;ON;;;;;N;;;;;\nFD41;ARABIC LIGATURE RADI ALLAAHU ANH;So;0;ON;;;;;N;;;;;\nFD42;ARABIC LIGATURE RADI ALLAAHU ANHAA;So;0;ON;;;;;N;;;;;\nFD43;ARABIC LIGATURE RADI ALLAAHU ANHUM;So;0;ON;;;;;N;;;;;\nFD44;ARABIC LIGATURE RADI ALLAAHU ANHUMAA;So;0;ON;;;;;N;;;;;\nFD45;ARABIC LIGATURE RADI ALLAAHU ANHUNNA;So;0;ON;;;;;N;;;;;\nFD46;ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH;So;0;ON;;;;;N;;;;;\nFD47;ARABIC LIGATURE ALAYHI AS-SALAAM;So;0;ON;;;;;N;;;;;\nFD48;ARABIC LIGATURE ALAYHIM AS-SALAAM;So;0;ON;;;;;N;;;;;\nFD49;ARABIC LIGATURE ALAYHIMAA AS-SALAAM;So;0;ON;;;;;N;;;;;\nFD4A;ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;;\nFD4B;ARABIC LIGATURE QUDDISA SIRRAH;So;0;ON;;;;;N;;;;;\nFD4C;ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;;\nFD4D;ARABIC LIGATURE ALAYHAA AS-SALAAM;So;0;ON;;;;;N;;;;;\nFD4E;ARABIC LIGATURE TABAARAKA WA-TAAALAA;So;0;ON;;;;;N;;;;;\nFD4F;ARABIC LIGATURE RAHIMAHUM ALLAAH;So;0;ON;;;;;N;;;;;\nFD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;\nFD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;\nFD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;\nFD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;\nFD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;\nFD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;\nFD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;\nFD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;\nFD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;\nFD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;\nFD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;\nFD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;\nFD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;\nFD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;\nFD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;\nFD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;\nFD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;\nFD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;\nFD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;\nFD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;\nFD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;\nFD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;\nFD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;\nFD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;\nFD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;\nFD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;\nFD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;\nFD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;\nFD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;\nFD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;\nFD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;\nFD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;\nFD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;\nFD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;\nFD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;\nFD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;\nFD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;\nFD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;\nFD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;\nFD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;\nFD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;\nFD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;\nFD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;\nFD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;\nFD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;\nFD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;\nFD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;\nFD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;\nFD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;\nFD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;\nFD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;\nFD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;\nFD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;\nFD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;\nFD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;\nFD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;\nFD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;\nFD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;\nFD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;\nFD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;\nFD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;\nFD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;\nFD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;\nFD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;\nFD90;ARABIC LIGATURE RAHMATU ALLAAHI ALAYH;So;0;ON;;;;;N;;;;;\nFD91;ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA;So;0;ON;;;;;N;;;;;\nFD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;\nFD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;\nFD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;\nFD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;\nFD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;\nFD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;\nFD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;\nFD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;\nFD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;\nFD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;\nFD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;\nFD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;\nFD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;\nFD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;\nFDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;\nFDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;\nFDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;\nFDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;\nFDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;\nFDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;\nFDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;\nFDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;\nFDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;\nFDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;\nFDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;\nFDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;\nFDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;\nFDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;\nFDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;\nFDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;\nFDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;\nFDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;\nFDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;\nFDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;\nFDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;\nFDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;\nFDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;\nFDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;\nFDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;\nFDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;\nFDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;\nFDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;\nFDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;\nFDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;\nFDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;\nFDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;\nFDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;\nFDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;\nFDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;\nFDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;\nFDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;\nFDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;\nFDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;\nFDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;\nFDC8;ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA;So;0;ON;;;;;N;;;;;\nFDC9;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANH;So;0;ON;;;;;N;;;;;\nFDCA;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANHAA;So;0;ON;;;;;N;;;;;\nFDCB;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANHUMAA;So;0;ON;;;;;N;;;;;\nFDCC;ARABIC LIGATURE SALLALLAHU ALAYHI WA-ALAA AALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;;\nFDCD;ARABIC LIGATURE AJJAL ALLAAHU TAAALAA FARAJAHU ASH-SHAREEF;So;0;ON;;;;;N;;;;;\nFDCE;ARABIC LIGATURE KARRAMA ALLAAHU WAJHAH;So;0;ON;;;;;N;;;;;\nFDCF;ARABIC LIGATURE SALAAMUHU ALAYNAA;So;0;ON;;;;;N;;;;;\nFDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;\nFDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;\nFDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;\nFDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;\nFDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;\nFDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;\nFDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;\nFDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;\nFDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;\nFDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;\nFDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;\nFDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;\nFDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;;\nFDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;;\nFDFE;ARABIC LIGATURE SUBHAANAHU WA TAAALAA;So;0;ON;;;;;N;;;;;\nFDFF;ARABIC LIGATURE AZZA WA JALL;So;0;ON;;;;;N;;;;;\nFE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;;\nFE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;;\nFE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;;\nFE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;;\nFE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;;\nFE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;;\nFE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;;\nFE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;;\nFE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;;\nFE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;;\nFE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;;\nFE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;;\nFE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;;\nFE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;;\nFE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;;\nFE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;;\nFE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;;\nFE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;;\nFE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;;\nFE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;;\nFE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;;\nFE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;;\nFE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;;\nFE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;;\nFE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;;\nFE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;;\nFE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;\nFE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;\nFE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;\nFE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;\nFE24;COMBINING MACRON LEFT HALF;Mn;230;NSM;;;;;N;;;;;\nFE25;COMBINING MACRON RIGHT HALF;Mn;230;NSM;;;;;N;;;;;\nFE26;COMBINING CONJOINING MACRON;Mn;230;NSM;;;;;N;;;;;\nFE27;COMBINING LIGATURE LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;;\nFE28;COMBINING LIGATURE RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;;\nFE29;COMBINING TILDE LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;;\nFE2A;COMBINING TILDE RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;;\nFE2B;COMBINING MACRON LEFT HALF BELOW;Mn;220;NSM;;;;;N;;;;;\nFE2C;COMBINING MACRON RIGHT HALF BELOW;Mn;220;NSM;;;;;N;;;;;\nFE2D;COMBINING CONJOINING MACRON BELOW;Mn;220;NSM;;;;;N;;;;;\nFE2E;COMBINING CYRILLIC TITLO LEFT HALF;Mn;230;NSM;;;;;N;;;;;\nFE2F;COMBINING CYRILLIC TITLO RIGHT HALF;Mn;230;NSM;;;;;N;;;;;\nFE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;\nFE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;\nFE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;\nFE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;\nFE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;\nFE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;\nFE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;\nFE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;\nFE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;\nFE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;\nFE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;\nFE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;\nFE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;\nFE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;\nFE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;\nFE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;\nFE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;\nFE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;\nFE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;\nFE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;\nFE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;\nFE45;SESAME DOT;Po;0;ON;;;;;N;;;;;\nFE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;;\nFE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON;<vertical> 005B;;;;N;;;;;\nFE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON;<vertical> 005D;;;;N;;;;;\nFE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;\nFE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;\nFE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;\nFE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;\nFE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;\nFE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;\nFE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;\nFE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;\nFE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;\nFE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;\nFE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;\nFE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;\nFE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;\nFE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;\nFE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;\nFE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;Y;SMALL OPENING PARENTHESIS;;;;\nFE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;;\nFE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;;\nFE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;;\nFE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;;\nFE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;;\nFE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;\nFE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;\nFE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;\nFE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;;\nFE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;;\nFE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;Y;;;;;\nFE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;Y;;;;;\nFE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;\nFE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;\nFE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;\nFE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;\nFE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;\nFE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;\nFE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;\nFE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;\nFE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;;\nFE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;\nFE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;\nFE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;\nFE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;\nFE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;\nFE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;\nFE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;\nFE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;\nFE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;\nFE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;\nFE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;\nFE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;\nFE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;\nFE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;\nFE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;\nFE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;\nFE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;\nFE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;\nFE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;\nFE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;\nFE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;\nFE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;\nFE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;\nFE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;\nFE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;\nFE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;\nFE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;\nFE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;\nFE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;\nFE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;\nFE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;\nFE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;\nFE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;\nFE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;\nFE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;\nFE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;\nFE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;\nFE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;\nFE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;\nFE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;\nFE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;\nFE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;\nFE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;\nFEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;\nFEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;\nFEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;\nFEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;\nFEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;\nFEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;\nFEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;\nFEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;\nFEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;\nFEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;\nFEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;\nFEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;\nFEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;\nFEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;\nFEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;\nFEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;\nFEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;\nFEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;\nFEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;\nFEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;\nFEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;\nFEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;\nFEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;\nFEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;\nFEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;\nFEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;\nFEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;\nFEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;\nFEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;\nFEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;\nFEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;\nFEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;\nFEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;\nFEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;\nFEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;\nFEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;\nFEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;\nFEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;\nFEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;\nFEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;\nFEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;\nFEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;\nFECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;\nFECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;\nFECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;\nFECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;\nFECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;\nFECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;\nFED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;\nFED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;\nFED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;\nFED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;\nFED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;\nFED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;\nFED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;\nFED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;\nFED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;\nFED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;\nFEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;\nFEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;\nFEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;\nFEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;\nFEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;\nFEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;\nFEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;\nFEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;\nFEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;\nFEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;\nFEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;\nFEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;\nFEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;\nFEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;\nFEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;\nFEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;\nFEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;\nFEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;\nFEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;\nFEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;\nFEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;\nFEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;\nFEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;\nFEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;\nFEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;\nFEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;\nFEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;\nFEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;\nFEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;\nFEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;\nFEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;\nFEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;\nFEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;\nFEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;\nFEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;\nFEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;\nFF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;\nFF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;\nFF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;\nFF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;\nFF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;\nFF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;\nFF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;\nFF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;;\nFF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;;\nFF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;\nFF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;;\nFF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;\nFF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;;\nFF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;\nFF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;\nFF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;\nFF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;\nFF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;\nFF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;\nFF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;\nFF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;\nFF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;\nFF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;\nFF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;\nFF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;\nFF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;\nFF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;\nFF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;Y;;;;;\nFF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;\nFF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;Y;;;;;\nFF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;\nFF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;\nFF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;\nFF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;\nFF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;\nFF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;\nFF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;\nFF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;\nFF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;\nFF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;\nFF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;\nFF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;\nFF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;\nFF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;\nFF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;\nFF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;\nFF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;\nFF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;\nFF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;\nFF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;\nFF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;\nFF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;\nFF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;\nFF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;\nFF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;\nFF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;\nFF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;\nFF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;\nFF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;;\nFF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;\nFF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;;\nFF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;\nFF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;\nFF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;\nFF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21\nFF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22\nFF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23\nFF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24\nFF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25\nFF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26\nFF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27\nFF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28\nFF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29\nFF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A\nFF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B\nFF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C\nFF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D\nFF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E\nFF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F\nFF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30\nFF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31\nFF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32\nFF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33\nFF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34\nFF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35\nFF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36\nFF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37\nFF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38\nFF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39\nFF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A\nFF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;;\nFF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;\nFF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;;\nFF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;\nFF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON;<wide> 2985;;;;Y;;;;;\nFF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON;<wide> 2986;;;;Y;;;;;\nFF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;\nFF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;;\nFF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;;\nFF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;\nFF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;;\nFF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;\nFF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;\nFF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;\nFF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;\nFF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;\nFF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;\nFF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;\nFF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;\nFF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;\nFF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;\nFF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;\nFF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;\nFF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;\nFF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;\nFF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;\nFF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;\nFF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;\nFF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;\nFF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;\nFF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;\nFF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;\nFF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;\nFF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;\nFF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;\nFF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;\nFF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;\nFF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;\nFF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;\nFF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;\nFF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;\nFF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;\nFF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;\nFF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;\nFF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;\nFF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;\nFF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;\nFF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;\nFF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;\nFF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;\nFF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;\nFF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;\nFF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;\nFF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;\nFF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;\nFF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;\nFF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;\nFF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;\nFF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;\nFF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;\nFF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;\nFF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;\nFF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;\nFF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;\nFF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;\nFF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;\nFF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;\nFF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;;;;\nFF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;;;;\nFFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;\nFFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;\nFFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;\nFFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;\nFFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;\nFFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;\nFFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;\nFFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;\nFFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;\nFFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;\nFFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;\nFFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;\nFFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;\nFFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;\nFFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;\nFFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;\nFFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;\nFFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;\nFFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;\nFFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;\nFFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;\nFFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;\nFFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;\nFFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;\nFFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;\nFFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;\nFFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;\nFFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;\nFFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;\nFFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;\nFFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;\nFFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;\nFFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;\nFFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;\nFFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;\nFFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;\nFFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;\nFFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;\nFFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;\nFFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;\nFFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;\nFFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;\nFFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;\nFFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;\nFFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;\nFFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;\nFFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;\nFFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;\nFFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;\nFFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;\nFFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;\nFFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;\nFFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;\nFFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;\nFFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;\nFFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;;;;\nFFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;\nFFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;\nFFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;\nFFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;\nFFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;\nFFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;\nFFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;\nFFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;\nFFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;\nFFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;\nFFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;;\nFFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;;\nFFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;;\nFFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;\nFFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;\n10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;;\n10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;;\n10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;;\n10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;;\n10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;;\n10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;;\n10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;;\n10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;;\n10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;;\n10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;;\n1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;;\n1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;;\n1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;;\n1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;;\n1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;;\n10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;;\n10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;;\n10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;;\n10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;;\n10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;;\n10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;;\n10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;;\n10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;;\n10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;;\n10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;;\n1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;;\n1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;;\n1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;;\n1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;;\n1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;;\n1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;;\n10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;;\n10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;;\n10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;;\n10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;;\n10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;;\n10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;;\n10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;;\n10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;;\n10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;;\n1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;;\n1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;;\n1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;;\n1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;;\n1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;;\n1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;;\n10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;;\n10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;;\n10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;;\n10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;;\n10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;;\n10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;;\n10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;;\n10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;;\n10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;;\n10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;;\n1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;;\n1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;;\n1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;;\n1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;;\n10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;;\n10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;;\n10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;;\n10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;;\n10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;;\n10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;;\n10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;;\n10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;;\n10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;;\n10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;;\n1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;;\n1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;;\n1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;;\n1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;;\n10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;;\n10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;;\n10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;;\n10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;;\n10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;;\n10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;;\n10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;;\n10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;;\n10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;;\n10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;;\n1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;;\n1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;;\n1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;;\n1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;;\n10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;;\n10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;;\n10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;;\n10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;;\n10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;;\n10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;;\n10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;;\n10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;;\n10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;;\n10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;;\n1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;;\n1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;;\n1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;;\n1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;;\n1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;;\n1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;;\n10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;;\n10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;;\n10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;;\n10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;;\n10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;;\n10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;;\n10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;;\n10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;;\n10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;;\n10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;;\n1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;;\n1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;;\n1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;;\n1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;;\n1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;;\n1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;;\n100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;;\n100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;;\n100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;;\n100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;;\n100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;;\n100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;;\n100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;;\n100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;;\n100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;;\n100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;;\n100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;;\n100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;;\n100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;;\n100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;;\n100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;;\n100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;;\n100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;;\n100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;;\n100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;;\n100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;;\n100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;;\n100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;;\n100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;;\n100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;;\n100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;;\n100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;;\n100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;;\n100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;;\n100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;;\n100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;;\n100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;;\n100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;;\n100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;;\n100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;;\n100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;;\n100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;;\n100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;;\n100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;;\n100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;;\n100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;;\n100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;;\n100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;;;;\n100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;;\n100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;;;;\n100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;;\n100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;;\n100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;;\n100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;;\n100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;;\n100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;;\n100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;;\n100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;;\n100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;;\n100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;;\n100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;;\n100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;;\n100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;;\n100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;;\n100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;;\n100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;;\n100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;;\n100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;;\n100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;;\n100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;;\n100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;;\n100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;;\n100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;;\n100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;;\n100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;;\n100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;;\n100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;;\n100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;;\n100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;;\n100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;;\n100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;;\n100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;;\n100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;;\n100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;;\n100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;;\n100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;;\n100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;;\n100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;;\n100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;;\n100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;;\n100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;;\n100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;;\n100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;;\n100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;;\n100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;;\n100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;;\n100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;;\n10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;;\n10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;;\n10102;AEGEAN CHECK MARK;Po;0;L;;;;;N;;;;;\n10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;;\n10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;;\n10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;;\n1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;;\n1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;;\n1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;;\n1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;;\n1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;;\n1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;;\n10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;;\n10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;;\n10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;;\n10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;;\n10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;;\n10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;;\n10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;;\n10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;;\n10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;;\n10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;\n1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;;\n1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;;\n1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;;\n1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;;\n1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;;\n1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;;\n10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;;\n10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;;\n10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;\n10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;;\n10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;;\n10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;;\n10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;;\n10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;;\n10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;;\n10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;;\n1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;;\n1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;\n1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;;\n1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;;\n1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;;\n1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;;\n10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;;\n10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;;\n10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;;\n10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;;\n10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;;\n10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;;\n10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;;\n1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;;\n1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;;\n1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;\n1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;\n1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;;\n1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;;\n10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;;\n10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;;\n10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;;\n10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;;\n10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;;\n10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;\n10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;\n10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;;\n10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;;\n10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;;\n1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;;\n1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;;\n1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;;\n1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;;\n1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;;\n1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;;\n10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;;\n10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;;\n10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;;\n10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;;\n10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;;\n10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;;\n10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;;\n10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;;\n10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;;\n10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;;\n1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;;\n1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;;\n1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;;\n1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;\n1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;\n1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;;\n10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;;\n10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;;\n10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;;\n10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;;\n10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;;\n10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;;\n10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;;\n10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;;\n10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;;\n10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;;\n1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;;\n1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;;\n1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;\n1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;\n1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;\n1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;\n10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;\n10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;;\n10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;\n10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;;\n10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;;\n10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;;\n10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;;\n10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;;\n10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;;\n10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;;\n1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;;\n1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;;\n1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;;\n1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;;\n1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;;\n1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;;\n10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;;\n10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;;\n10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;;\n10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;;\n10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;;\n10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;;\n10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;;\n10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;;\n10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;;\n10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;;\n1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;;\n1018B;GREEK ONE QUARTER SIGN;No;0;ON;;;;1/4;N;;;;;\n1018C;GREEK SINUSOID SIGN;So;0;ON;;;;;N;;;;;\n1018D;GREEK INDICTION SIGN;So;0;L;;;;;N;;;;;\n1018E;NOMISMA SIGN;So;0;L;;;;;N;;;;;\n10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;;\n10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;;\n10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;;\n10193;ROMAN SEXTULA SIGN;So;0;ON;;;;;N;;;;;\n10194;ROMAN DIMIDIA SEXTULA SIGN;So;0;ON;;;;;N;;;;;\n10195;ROMAN SILIQUA SIGN;So;0;ON;;;;;N;;;;;\n10196;ROMAN DENARIUS SIGN;So;0;ON;;;;;N;;;;;\n10197;ROMAN QUINARIUS SIGN;So;0;ON;;;;;N;;;;;\n10198;ROMAN SESTERTIUS SIGN;So;0;ON;;;;;N;;;;;\n10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;;\n1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;;\n1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;;\n1019C;ASCIA SYMBOL;So;0;ON;;;;;N;;;;;\n101A0;GREEK SYMBOL TAU RHO;So;0;ON;;;;;N;;;;;\n101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;;\n101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;;\n101D2;PHAISTOS DISC SIGN TATTOOED HEAD;So;0;L;;;;;N;;;;;\n101D3;PHAISTOS DISC SIGN CAPTIVE;So;0;L;;;;;N;;;;;\n101D4;PHAISTOS DISC SIGN CHILD;So;0;L;;;;;N;;;;;\n101D5;PHAISTOS DISC SIGN WOMAN;So;0;L;;;;;N;;;;;\n101D6;PHAISTOS DISC SIGN HELMET;So;0;L;;;;;N;;;;;\n101D7;PHAISTOS DISC SIGN GAUNTLET;So;0;L;;;;;N;;;;;\n101D8;PHAISTOS DISC SIGN TIARA;So;0;L;;;;;N;;;;;\n101D9;PHAISTOS DISC SIGN ARROW;So;0;L;;;;;N;;;;;\n101DA;PHAISTOS DISC SIGN BOW;So;0;L;;;;;N;;;;;\n101DB;PHAISTOS DISC SIGN SHIELD;So;0;L;;;;;N;;;;;\n101DC;PHAISTOS DISC SIGN CLUB;So;0;L;;;;;N;;;;;\n101DD;PHAISTOS DISC SIGN MANACLES;So;0;L;;;;;N;;;;;\n101DE;PHAISTOS DISC SIGN MATTOCK;So;0;L;;;;;N;;;;;\n101DF;PHAISTOS DISC SIGN SAW;So;0;L;;;;;N;;;;;\n101E0;PHAISTOS DISC SIGN LID;So;0;L;;;;;N;;;;;\n101E1;PHAISTOS DISC SIGN BOOMERANG;So;0;L;;;;;N;;;;;\n101E2;PHAISTOS DISC SIGN CARPENTRY PLANE;So;0;L;;;;;N;;;;;\n101E3;PHAISTOS DISC SIGN DOLIUM;So;0;L;;;;;N;;;;;\n101E4;PHAISTOS DISC SIGN COMB;So;0;L;;;;;N;;;;;\n101E5;PHAISTOS DISC SIGN SLING;So;0;L;;;;;N;;;;;\n101E6;PHAISTOS DISC SIGN COLUMN;So;0;L;;;;;N;;;;;\n101E7;PHAISTOS DISC SIGN BEEHIVE;So;0;L;;;;;N;;;;;\n101E8;PHAISTOS DISC SIGN SHIP;So;0;L;;;;;N;;;;;\n101E9;PHAISTOS DISC SIGN HORN;So;0;L;;;;;N;;;;;\n101EA;PHAISTOS DISC SIGN HIDE;So;0;L;;;;;N;;;;;\n101EB;PHAISTOS DISC SIGN BULLS LEG;So;0;L;;;;;N;;;;;\n101EC;PHAISTOS DISC SIGN CAT;So;0;L;;;;;N;;;;;\n101ED;PHAISTOS DISC SIGN RAM;So;0;L;;;;;N;;;;;\n101EE;PHAISTOS DISC SIGN EAGLE;So;0;L;;;;;N;;;;;\n101EF;PHAISTOS DISC SIGN DOVE;So;0;L;;;;;N;;;;;\n101F0;PHAISTOS DISC SIGN TUNNY;So;0;L;;;;;N;;;;;\n101F1;PHAISTOS DISC SIGN BEE;So;0;L;;;;;N;;;;;\n101F2;PHAISTOS DISC SIGN PLANE TREE;So;0;L;;;;;N;;;;;\n101F3;PHAISTOS DISC SIGN VINE;So;0;L;;;;;N;;;;;\n101F4;PHAISTOS DISC SIGN PAPYRUS;So;0;L;;;;;N;;;;;\n101F5;PHAISTOS DISC SIGN ROSETTE;So;0;L;;;;;N;;;;;\n101F6;PHAISTOS DISC SIGN LILY;So;0;L;;;;;N;;;;;\n101F7;PHAISTOS DISC SIGN OX BACK;So;0;L;;;;;N;;;;;\n101F8;PHAISTOS DISC SIGN FLUTE;So;0;L;;;;;N;;;;;\n101F9;PHAISTOS DISC SIGN GRATER;So;0;L;;;;;N;;;;;\n101FA;PHAISTOS DISC SIGN STRAINER;So;0;L;;;;;N;;;;;\n101FB;PHAISTOS DISC SIGN SMALL AXE;So;0;L;;;;;N;;;;;\n101FC;PHAISTOS DISC SIGN WAVY BAND;So;0;L;;;;;N;;;;;\n101FD;PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE;Mn;220;NSM;;;;;N;;;;;\n10280;LYCIAN LETTER A;Lo;0;L;;;;;N;;;;;\n10281;LYCIAN LETTER E;Lo;0;L;;;;;N;;;;;\n10282;LYCIAN LETTER B;Lo;0;L;;;;;N;;;;;\n10283;LYCIAN LETTER BH;Lo;0;L;;;;;N;;;;;\n10284;LYCIAN LETTER G;Lo;0;L;;;;;N;;;;;\n10285;LYCIAN LETTER D;Lo;0;L;;;;;N;;;;;\n10286;LYCIAN LETTER I;Lo;0;L;;;;;N;;;;;\n10287;LYCIAN LETTER W;Lo;0;L;;;;;N;;;;;\n10288;LYCIAN LETTER Z;Lo;0;L;;;;;N;;;;;\n10289;LYCIAN LETTER TH;Lo;0;L;;;;;N;;;;;\n1028A;LYCIAN LETTER J;Lo;0;L;;;;;N;;;;;\n1028B;LYCIAN LETTER K;Lo;0;L;;;;;N;;;;;\n1028C;LYCIAN LETTER Q;Lo;0;L;;;;;N;;;;;\n1028D;LYCIAN LETTER L;Lo;0;L;;;;;N;;;;;\n1028E;LYCIAN LETTER M;Lo;0;L;;;;;N;;;;;\n1028F;LYCIAN LETTER N;Lo;0;L;;;;;N;;;;;\n10290;LYCIAN LETTER MM;Lo;0;L;;;;;N;;;;;\n10291;LYCIAN LETTER NN;Lo;0;L;;;;;N;;;;;\n10292;LYCIAN LETTER U;Lo;0;L;;;;;N;;;;;\n10293;LYCIAN LETTER P;Lo;0;L;;;;;N;;;;;\n10294;LYCIAN LETTER KK;Lo;0;L;;;;;N;;;;;\n10295;LYCIAN LETTER R;Lo;0;L;;;;;N;;;;;\n10296;LYCIAN LETTER S;Lo;0;L;;;;;N;;;;;\n10297;LYCIAN LETTER T;Lo;0;L;;;;;N;;;;;\n10298;LYCIAN LETTER TT;Lo;0;L;;;;;N;;;;;\n10299;LYCIAN LETTER AN;Lo;0;L;;;;;N;;;;;\n1029A;LYCIAN LETTER EN;Lo;0;L;;;;;N;;;;;\n1029B;LYCIAN LETTER H;Lo;0;L;;;;;N;;;;;\n1029C;LYCIAN LETTER X;Lo;0;L;;;;;N;;;;;\n102A0;CARIAN LETTER A;Lo;0;L;;;;;N;;;;;\n102A1;CARIAN LETTER P2;Lo;0;L;;;;;N;;;;;\n102A2;CARIAN LETTER D;Lo;0;L;;;;;N;;;;;\n102A3;CARIAN LETTER L;Lo;0;L;;;;;N;;;;;\n102A4;CARIAN LETTER UUU;Lo;0;L;;;;;N;;;;;\n102A5;CARIAN LETTER R;Lo;0;L;;;;;N;;;;;\n102A6;CARIAN LETTER LD;Lo;0;L;;;;;N;;;;;\n102A7;CARIAN LETTER A2;Lo;0;L;;;;;N;;;;;\n102A8;CARIAN LETTER Q;Lo;0;L;;;;;N;;;;;\n102A9;CARIAN LETTER B;Lo;0;L;;;;;N;;;;;\n102AA;CARIAN LETTER M;Lo;0;L;;;;;N;;;;;\n102AB;CARIAN LETTER O;Lo;0;L;;;;;N;;;;;\n102AC;CARIAN LETTER D2;Lo;0;L;;;;;N;;;;;\n102AD;CARIAN LETTER T;Lo;0;L;;;;;N;;;;;\n102AE;CARIAN LETTER SH;Lo;0;L;;;;;N;;;;;\n102AF;CARIAN LETTER SH2;Lo;0;L;;;;;N;;;;;\n102B0;CARIAN LETTER S;Lo;0;L;;;;;N;;;;;\n102B1;CARIAN LETTER C-18;Lo;0;L;;;;;N;;;;;\n102B2;CARIAN LETTER U;Lo;0;L;;;;;N;;;;;\n102B3;CARIAN LETTER NN;Lo;0;L;;;;;N;;;;;\n102B4;CARIAN LETTER X;Lo;0;L;;;;;N;;;;;\n102B5;CARIAN LETTER N;Lo;0;L;;;;;N;;;;;\n102B6;CARIAN LETTER TT2;Lo;0;L;;;;;N;;;;;\n102B7;CARIAN LETTER P;Lo;0;L;;;;;N;;;;;\n102B8;CARIAN LETTER SS;Lo;0;L;;;;;N;;;;;\n102B9;CARIAN LETTER I;Lo;0;L;;;;;N;;;;;\n102BA;CARIAN LETTER E;Lo;0;L;;;;;N;;;;;\n102BB;CARIAN LETTER UUUU;Lo;0;L;;;;;N;;;;;\n102BC;CARIAN LETTER K;Lo;0;L;;;;;N;;;;;\n102BD;CARIAN LETTER K2;Lo;0;L;;;;;N;;;;;\n102BE;CARIAN LETTER ND;Lo;0;L;;;;;N;;;;;\n102BF;CARIAN LETTER UU;Lo;0;L;;;;;N;;;;;\n102C0;CARIAN LETTER G;Lo;0;L;;;;;N;;;;;\n102C1;CARIAN LETTER G2;Lo;0;L;;;;;N;;;;;\n102C2;CARIAN LETTER ST;Lo;0;L;;;;;N;;;;;\n102C3;CARIAN LETTER ST2;Lo;0;L;;;;;N;;;;;\n102C4;CARIAN LETTER NG;Lo;0;L;;;;;N;;;;;\n102C5;CARIAN LETTER II;Lo;0;L;;;;;N;;;;;\n102C6;CARIAN LETTER C-39;Lo;0;L;;;;;N;;;;;\n102C7;CARIAN LETTER TT;Lo;0;L;;;;;N;;;;;\n102C8;CARIAN LETTER UUU2;Lo;0;L;;;;;N;;;;;\n102C9;CARIAN LETTER RR;Lo;0;L;;;;;N;;;;;\n102CA;CARIAN LETTER MB;Lo;0;L;;;;;N;;;;;\n102CB;CARIAN LETTER MB2;Lo;0;L;;;;;N;;;;;\n102CC;CARIAN LETTER MB3;Lo;0;L;;;;;N;;;;;\n102CD;CARIAN LETTER MB4;Lo;0;L;;;;;N;;;;;\n102CE;CARIAN LETTER LD2;Lo;0;L;;;;;N;;;;;\n102CF;CARIAN LETTER E2;Lo;0;L;;;;;N;;;;;\n102D0;CARIAN LETTER UUU3;Lo;0;L;;;;;N;;;;;\n102E0;COPTIC EPACT THOUSANDS MARK;Mn;220;NSM;;;;;N;;;;;\n102E1;COPTIC EPACT DIGIT ONE;No;0;EN;;;;1;N;;;;;\n102E2;COPTIC EPACT DIGIT TWO;No;0;EN;;;;2;N;;;;;\n102E3;COPTIC EPACT DIGIT THREE;No;0;EN;;;;3;N;;;;;\n102E4;COPTIC EPACT DIGIT FOUR;No;0;EN;;;;4;N;;;;;\n102E5;COPTIC EPACT DIGIT FIVE;No;0;EN;;;;5;N;;;;;\n102E6;COPTIC EPACT DIGIT SIX;No;0;EN;;;;6;N;;;;;\n102E7;COPTIC EPACT DIGIT SEVEN;No;0;EN;;;;7;N;;;;;\n102E8;COPTIC EPACT DIGIT EIGHT;No;0;EN;;;;8;N;;;;;\n102E9;COPTIC EPACT DIGIT NINE;No;0;EN;;;;9;N;;;;;\n102EA;COPTIC EPACT NUMBER TEN;No;0;EN;;;;10;N;;;;;\n102EB;COPTIC EPACT NUMBER TWENTY;No;0;EN;;;;20;N;;;;;\n102EC;COPTIC EPACT NUMBER THIRTY;No;0;EN;;;;30;N;;;;;\n102ED;COPTIC EPACT NUMBER FORTY;No;0;EN;;;;40;N;;;;;\n102EE;COPTIC EPACT NUMBER FIFTY;No;0;EN;;;;50;N;;;;;\n102EF;COPTIC EPACT NUMBER SIXTY;No;0;EN;;;;60;N;;;;;\n102F0;COPTIC EPACT NUMBER SEVENTY;No;0;EN;;;;70;N;;;;;\n102F1;COPTIC EPACT NUMBER EIGHTY;No;0;EN;;;;80;N;;;;;\n102F2;COPTIC EPACT NUMBER NINETY;No;0;EN;;;;90;N;;;;;\n102F3;COPTIC EPACT NUMBER ONE HUNDRED;No;0;EN;;;;100;N;;;;;\n102F4;COPTIC EPACT NUMBER TWO HUNDRED;No;0;EN;;;;200;N;;;;;\n102F5;COPTIC EPACT NUMBER THREE HUNDRED;No;0;EN;;;;300;N;;;;;\n102F6;COPTIC EPACT NUMBER FOUR HUNDRED;No;0;EN;;;;400;N;;;;;\n102F7;COPTIC EPACT NUMBER FIVE HUNDRED;No;0;EN;;;;500;N;;;;;\n102F8;COPTIC EPACT NUMBER SIX HUNDRED;No;0;EN;;;;600;N;;;;;\n102F9;COPTIC EPACT NUMBER SEVEN HUNDRED;No;0;EN;;;;700;N;;;;;\n102FA;COPTIC EPACT NUMBER EIGHT HUNDRED;No;0;EN;;;;800;N;;;;;\n102FB;COPTIC EPACT NUMBER NINE HUNDRED;No;0;EN;;;;900;N;;;;;\n10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;;\n10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;;\n10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;;\n10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;;\n10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;;\n10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;;\n10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;;\n10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;;\n10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;;\n10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;;\n1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;;\n1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;;\n1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;;\n1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;;\n1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;;\n1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;;;;\n10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;;\n10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;;\n10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;;\n10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;;\n10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;;\n10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;;\n10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;;\n10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;;;;\n10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;;\n10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;;\n1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;;\n1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;;;;\n1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;;;;\n1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;;;;\n1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;;;;\n1031F;OLD ITALIC LETTER ESS;Lo;0;L;;;;;N;;;;;\n10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;;\n10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;;\n10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;;\n10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;;\n1032D;OLD ITALIC LETTER YE;Lo;0;L;;;;;N;;;;;\n1032E;OLD ITALIC LETTER NORTHERN TSE;Lo;0;L;;;;;N;;;;;\n1032F;OLD ITALIC LETTER SOUTHERN TSE;Lo;0;L;;;;;N;;;;;\n10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;;\n10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;;\n10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;;\n10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;;\n10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;;\n10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;;\n10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;;\n10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;;\n10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;;\n10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;;\n1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;;\n1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;;\n1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;;\n1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;;\n1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;;\n1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;;\n10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;;\n10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;;\n10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;;\n10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;;\n10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;;\n10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;;\n10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;;\n10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;;\n10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;;\n10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;;\n1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;;\n10350;OLD PERMIC LETTER AN;Lo;0;L;;;;;N;;;;;\n10351;OLD PERMIC LETTER BUR;Lo;0;L;;;;;N;;;;;\n10352;OLD PERMIC LETTER GAI;Lo;0;L;;;;;N;;;;;\n10353;OLD PERMIC LETTER DOI;Lo;0;L;;;;;N;;;;;\n10354;OLD PERMIC LETTER E;Lo;0;L;;;;;N;;;;;\n10355;OLD PERMIC LETTER ZHOI;Lo;0;L;;;;;N;;;;;\n10356;OLD PERMIC LETTER DZHOI;Lo;0;L;;;;;N;;;;;\n10357;OLD PERMIC LETTER ZATA;Lo;0;L;;;;;N;;;;;\n10358;OLD PERMIC LETTER DZITA;Lo;0;L;;;;;N;;;;;\n10359;OLD PERMIC LETTER I;Lo;0;L;;;;;N;;;;;\n1035A;OLD PERMIC LETTER KOKE;Lo;0;L;;;;;N;;;;;\n1035B;OLD PERMIC LETTER LEI;Lo;0;L;;;;;N;;;;;\n1035C;OLD PERMIC LETTER MENOE;Lo;0;L;;;;;N;;;;;\n1035D;OLD PERMIC LETTER NENOE;Lo;0;L;;;;;N;;;;;\n1035E;OLD PERMIC LETTER VOOI;Lo;0;L;;;;;N;;;;;\n1035F;OLD PERMIC LETTER PEEI;Lo;0;L;;;;;N;;;;;\n10360;OLD PERMIC LETTER REI;Lo;0;L;;;;;N;;;;;\n10361;OLD PERMIC LETTER SII;Lo;0;L;;;;;N;;;;;\n10362;OLD PERMIC LETTER TAI;Lo;0;L;;;;;N;;;;;\n10363;OLD PERMIC LETTER U;Lo;0;L;;;;;N;;;;;\n10364;OLD PERMIC LETTER CHERY;Lo;0;L;;;;;N;;;;;\n10365;OLD PERMIC LETTER SHOOI;Lo;0;L;;;;;N;;;;;\n10366;OLD PERMIC LETTER SHCHOOI;Lo;0;L;;;;;N;;;;;\n10367;OLD PERMIC LETTER YRY;Lo;0;L;;;;;N;;;;;\n10368;OLD PERMIC LETTER YERU;Lo;0;L;;;;;N;;;;;\n10369;OLD PERMIC LETTER O;Lo;0;L;;;;;N;;;;;\n1036A;OLD PERMIC LETTER OO;Lo;0;L;;;;;N;;;;;\n1036B;OLD PERMIC LETTER EF;Lo;0;L;;;;;N;;;;;\n1036C;OLD PERMIC LETTER HA;Lo;0;L;;;;;N;;;;;\n1036D;OLD PERMIC LETTER TSIU;Lo;0;L;;;;;N;;;;;\n1036E;OLD PERMIC LETTER VER;Lo;0;L;;;;;N;;;;;\n1036F;OLD PERMIC LETTER YER;Lo;0;L;;;;;N;;;;;\n10370;OLD PERMIC LETTER YERI;Lo;0;L;;;;;N;;;;;\n10371;OLD PERMIC LETTER YAT;Lo;0;L;;;;;N;;;;;\n10372;OLD PERMIC LETTER IE;Lo;0;L;;;;;N;;;;;\n10373;OLD PERMIC LETTER YU;Lo;0;L;;;;;N;;;;;\n10374;OLD PERMIC LETTER YA;Lo;0;L;;;;;N;;;;;\n10375;OLD PERMIC LETTER IA;Lo;0;L;;;;;N;;;;;\n10376;COMBINING OLD PERMIC LETTER AN;Mn;230;NSM;;;;;N;;;;;\n10377;COMBINING OLD PERMIC LETTER DOI;Mn;230;NSM;;;;;N;;;;;\n10378;COMBINING OLD PERMIC LETTER ZATA;Mn;230;NSM;;;;;N;;;;;\n10379;COMBINING OLD PERMIC LETTER NENOE;Mn;230;NSM;;;;;N;;;;;\n1037A;COMBINING OLD PERMIC LETTER SII;Mn;230;NSM;;;;;N;;;;;\n10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;;\n10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;;\n10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;;\n10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;;\n10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;;\n10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;;\n10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;;\n10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;;\n10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;;\n10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;;\n1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;;\n1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;;\n1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;;\n1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;;\n1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;;\n1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;;\n10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;;\n10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;;\n10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;;\n10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;;\n10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;;\n10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;;\n10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;;\n10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;;\n10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;;\n10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;;\n1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;;\n1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;;\n1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;;\n1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;;\n1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;;\n103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;;\n103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;;\n103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;;\n103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;;\n103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;;\n103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;;\n103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;;\n103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;;\n103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;;\n103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;;\n103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;;\n103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;;\n103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;;\n103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;;\n103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;;\n103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;;\n103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;;\n103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;;\n103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;;\n103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;;\n103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;;\n103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;;\n103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;;\n103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;;\n103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;;\n103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;;\n103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;;\n103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;;\n103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;;\n103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;;\n103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;;\n103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;;\n103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;;\n103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;;\n103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;;\n103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;;\n103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;;\n103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;;\n103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;;\n103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;;\n103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;;\n103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;;\n103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;;\n103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;;\n103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;\n103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;;\n103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;;\n103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;;\n103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;;\n103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;;\n10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428;\n10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429;\n10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A;\n10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B;\n10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C;\n10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D;\n10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E;\n10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F;\n10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430;\n10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431;\n1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432;\n1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433;\n1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434;\n1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435;\n1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436;\n1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437;\n10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438;\n10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439;\n10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A;\n10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B;\n10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C;\n10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D;\n10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E;\n10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F;\n10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440;\n10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441;\n1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442;\n1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443;\n1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444;\n1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445;\n1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446;\n1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447;\n10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448;\n10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449;\n10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A;\n10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B;\n10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C;\n10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D;\n10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E;\n10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F;\n10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400\n10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401\n1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402\n1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403\n1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404\n1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405\n1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406\n1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407\n10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408\n10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409\n10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A\n10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B\n10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C\n10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D\n10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E\n10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F\n10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410\n10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411\n1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412\n1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413\n1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414\n1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415\n1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416\n1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417\n10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418\n10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419\n10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A\n10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B\n10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C\n10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D\n10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E\n10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F\n10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420\n10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421\n1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422\n1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423\n1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424\n1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425\n1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426\n1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427\n10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;;\n10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;;\n10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;;\n10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;;\n10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;;\n10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;;\n10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;;\n10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;;\n10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;;\n10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;;\n1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;;\n1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;;\n1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;;\n1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;;\n1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;;\n1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;;\n10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;;\n10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;;\n10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;;\n10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;;\n10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;;\n10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;;\n10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;;\n10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;;\n10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;;\n10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;;\n1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;;\n1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;;\n1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;;\n1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;;\n1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;;\n1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;;\n10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;;\n10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;;\n10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;;\n10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;;\n10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;;\n10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;;\n10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;;\n10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;;\n10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;;\n10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;;\n1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;;\n1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;;\n1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;;\n1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;;\n1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;;\n1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;;\n10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;;\n10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;;\n10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;;\n10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;;\n10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;;\n10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;;\n10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;;\n10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;;\n10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;;\n10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;;\n1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;;\n1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;;\n1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;;\n1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;;\n1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;;\n1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;;\n10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;;\n10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;;\n10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;;\n10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;;\n10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;;\n10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;;\n10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;;\n10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;;\n10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;;\n10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;;\n1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;;\n1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;;\n1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;;\n1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;;\n104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n104B0;OSAGE CAPITAL LETTER A;Lu;0;L;;;;;N;;;;104D8;\n104B1;OSAGE CAPITAL LETTER AI;Lu;0;L;;;;;N;;;;104D9;\n104B2;OSAGE CAPITAL LETTER AIN;Lu;0;L;;;;;N;;;;104DA;\n104B3;OSAGE CAPITAL LETTER AH;Lu;0;L;;;;;N;;;;104DB;\n104B4;OSAGE CAPITAL LETTER BRA;Lu;0;L;;;;;N;;;;104DC;\n104B5;OSAGE CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;104DD;\n104B6;OSAGE CAPITAL LETTER EHCHA;Lu;0;L;;;;;N;;;;104DE;\n104B7;OSAGE CAPITAL LETTER E;Lu;0;L;;;;;N;;;;104DF;\n104B8;OSAGE CAPITAL LETTER EIN;Lu;0;L;;;;;N;;;;104E0;\n104B9;OSAGE CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;104E1;\n104BA;OSAGE CAPITAL LETTER HYA;Lu;0;L;;;;;N;;;;104E2;\n104BB;OSAGE CAPITAL LETTER I;Lu;0;L;;;;;N;;;;104E3;\n104BC;OSAGE CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;104E4;\n104BD;OSAGE CAPITAL LETTER EHKA;Lu;0;L;;;;;N;;;;104E5;\n104BE;OSAGE CAPITAL LETTER KYA;Lu;0;L;;;;;N;;;;104E6;\n104BF;OSAGE CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;104E7;\n104C0;OSAGE CAPITAL LETTER MA;Lu;0;L;;;;;N;;;;104E8;\n104C1;OSAGE CAPITAL LETTER NA;Lu;0;L;;;;;N;;;;104E9;\n104C2;OSAGE CAPITAL LETTER O;Lu;0;L;;;;;N;;;;104EA;\n104C3;OSAGE CAPITAL LETTER OIN;Lu;0;L;;;;;N;;;;104EB;\n104C4;OSAGE CAPITAL LETTER PA;Lu;0;L;;;;;N;;;;104EC;\n104C5;OSAGE CAPITAL LETTER EHPA;Lu;0;L;;;;;N;;;;104ED;\n104C6;OSAGE CAPITAL LETTER SA;Lu;0;L;;;;;N;;;;104EE;\n104C7;OSAGE CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;104EF;\n104C8;OSAGE CAPITAL LETTER TA;Lu;0;L;;;;;N;;;;104F0;\n104C9;OSAGE CAPITAL LETTER EHTA;Lu;0;L;;;;;N;;;;104F1;\n104CA;OSAGE CAPITAL LETTER TSA;Lu;0;L;;;;;N;;;;104F2;\n104CB;OSAGE CAPITAL LETTER EHTSA;Lu;0;L;;;;;N;;;;104F3;\n104CC;OSAGE CAPITAL LETTER TSHA;Lu;0;L;;;;;N;;;;104F4;\n104CD;OSAGE CAPITAL LETTER DHA;Lu;0;L;;;;;N;;;;104F5;\n104CE;OSAGE CAPITAL LETTER U;Lu;0;L;;;;;N;;;;104F6;\n104CF;OSAGE CAPITAL LETTER WA;Lu;0;L;;;;;N;;;;104F7;\n104D0;OSAGE CAPITAL LETTER KHA;Lu;0;L;;;;;N;;;;104F8;\n104D1;OSAGE CAPITAL LETTER GHA;Lu;0;L;;;;;N;;;;104F9;\n104D2;OSAGE CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;104FA;\n104D3;OSAGE CAPITAL LETTER ZHA;Lu;0;L;;;;;N;;;;104FB;\n104D8;OSAGE SMALL LETTER A;Ll;0;L;;;;;N;;;104B0;;104B0\n104D9;OSAGE SMALL LETTER AI;Ll;0;L;;;;;N;;;104B1;;104B1\n104DA;OSAGE SMALL LETTER AIN;Ll;0;L;;;;;N;;;104B2;;104B2\n104DB;OSAGE SMALL LETTER AH;Ll;0;L;;;;;N;;;104B3;;104B3\n104DC;OSAGE SMALL LETTER BRA;Ll;0;L;;;;;N;;;104B4;;104B4\n104DD;OSAGE SMALL LETTER CHA;Ll;0;L;;;;;N;;;104B5;;104B5\n104DE;OSAGE SMALL LETTER EHCHA;Ll;0;L;;;;;N;;;104B6;;104B6\n104DF;OSAGE SMALL LETTER E;Ll;0;L;;;;;N;;;104B7;;104B7\n104E0;OSAGE SMALL LETTER EIN;Ll;0;L;;;;;N;;;104B8;;104B8\n104E1;OSAGE SMALL LETTER HA;Ll;0;L;;;;;N;;;104B9;;104B9\n104E2;OSAGE SMALL LETTER HYA;Ll;0;L;;;;;N;;;104BA;;104BA\n104E3;OSAGE SMALL LETTER I;Ll;0;L;;;;;N;;;104BB;;104BB\n104E4;OSAGE SMALL LETTER KA;Ll;0;L;;;;;N;;;104BC;;104BC\n104E5;OSAGE SMALL LETTER EHKA;Ll;0;L;;;;;N;;;104BD;;104BD\n104E6;OSAGE SMALL LETTER KYA;Ll;0;L;;;;;N;;;104BE;;104BE\n104E7;OSAGE SMALL LETTER LA;Ll;0;L;;;;;N;;;104BF;;104BF\n104E8;OSAGE SMALL LETTER MA;Ll;0;L;;;;;N;;;104C0;;104C0\n104E9;OSAGE SMALL LETTER NA;Ll;0;L;;;;;N;;;104C1;;104C1\n104EA;OSAGE SMALL LETTER O;Ll;0;L;;;;;N;;;104C2;;104C2\n104EB;OSAGE SMALL LETTER OIN;Ll;0;L;;;;;N;;;104C3;;104C3\n104EC;OSAGE SMALL LETTER PA;Ll;0;L;;;;;N;;;104C4;;104C4\n104ED;OSAGE SMALL LETTER EHPA;Ll;0;L;;;;;N;;;104C5;;104C5\n104EE;OSAGE SMALL LETTER SA;Ll;0;L;;;;;N;;;104C6;;104C6\n104EF;OSAGE SMALL LETTER SHA;Ll;0;L;;;;;N;;;104C7;;104C7\n104F0;OSAGE SMALL LETTER TA;Ll;0;L;;;;;N;;;104C8;;104C8\n104F1;OSAGE SMALL LETTER EHTA;Ll;0;L;;;;;N;;;104C9;;104C9\n104F2;OSAGE SMALL LETTER TSA;Ll;0;L;;;;;N;;;104CA;;104CA\n104F3;OSAGE SMALL LETTER EHTSA;Ll;0;L;;;;;N;;;104CB;;104CB\n104F4;OSAGE SMALL LETTER TSHA;Ll;0;L;;;;;N;;;104CC;;104CC\n104F5;OSAGE SMALL LETTER DHA;Ll;0;L;;;;;N;;;104CD;;104CD\n104F6;OSAGE SMALL LETTER U;Ll;0;L;;;;;N;;;104CE;;104CE\n104F7;OSAGE SMALL LETTER WA;Ll;0;L;;;;;N;;;104CF;;104CF\n104F8;OSAGE SMALL LETTER KHA;Ll;0;L;;;;;N;;;104D0;;104D0\n104F9;OSAGE SMALL LETTER GHA;Ll;0;L;;;;;N;;;104D1;;104D1\n104FA;OSAGE SMALL LETTER ZA;Ll;0;L;;;;;N;;;104D2;;104D2\n104FB;OSAGE SMALL LETTER ZHA;Ll;0;L;;;;;N;;;104D3;;104D3\n10500;ELBASAN LETTER A;Lo;0;L;;;;;N;;;;;\n10501;ELBASAN LETTER BE;Lo;0;L;;;;;N;;;;;\n10502;ELBASAN LETTER CE;Lo;0;L;;;;;N;;;;;\n10503;ELBASAN LETTER CHE;Lo;0;L;;;;;N;;;;;\n10504;ELBASAN LETTER DE;Lo;0;L;;;;;N;;;;;\n10505;ELBASAN LETTER NDE;Lo;0;L;;;;;N;;;;;\n10506;ELBASAN LETTER DHE;Lo;0;L;;;;;N;;;;;\n10507;ELBASAN LETTER EI;Lo;0;L;;;;;N;;;;;\n10508;ELBASAN LETTER E;Lo;0;L;;;;;N;;;;;\n10509;ELBASAN LETTER FE;Lo;0;L;;;;;N;;;;;\n1050A;ELBASAN LETTER GE;Lo;0;L;;;;;N;;;;;\n1050B;ELBASAN LETTER GJE;Lo;0;L;;;;;N;;;;;\n1050C;ELBASAN LETTER HE;Lo;0;L;;;;;N;;;;;\n1050D;ELBASAN LETTER I;Lo;0;L;;;;;N;;;;;\n1050E;ELBASAN LETTER JE;Lo;0;L;;;;;N;;;;;\n1050F;ELBASAN LETTER KE;Lo;0;L;;;;;N;;;;;\n10510;ELBASAN LETTER LE;Lo;0;L;;;;;N;;;;;\n10511;ELBASAN LETTER LLE;Lo;0;L;;;;;N;;;;;\n10512;ELBASAN LETTER ME;Lo;0;L;;;;;N;;;;;\n10513;ELBASAN LETTER NE;Lo;0;L;;;;;N;;;;;\n10514;ELBASAN LETTER NA;Lo;0;L;;;;;N;;;;;\n10515;ELBASAN LETTER NJE;Lo;0;L;;;;;N;;;;;\n10516;ELBASAN LETTER O;Lo;0;L;;;;;N;;;;;\n10517;ELBASAN LETTER PE;Lo;0;L;;;;;N;;;;;\n10518;ELBASAN LETTER QE;Lo;0;L;;;;;N;;;;;\n10519;ELBASAN LETTER RE;Lo;0;L;;;;;N;;;;;\n1051A;ELBASAN LETTER RRE;Lo;0;L;;;;;N;;;;;\n1051B;ELBASAN LETTER SE;Lo;0;L;;;;;N;;;;;\n1051C;ELBASAN LETTER SHE;Lo;0;L;;;;;N;;;;;\n1051D;ELBASAN LETTER TE;Lo;0;L;;;;;N;;;;;\n1051E;ELBASAN LETTER THE;Lo;0;L;;;;;N;;;;;\n1051F;ELBASAN LETTER U;Lo;0;L;;;;;N;;;;;\n10520;ELBASAN LETTER VE;Lo;0;L;;;;;N;;;;;\n10521;ELBASAN LETTER XE;Lo;0;L;;;;;N;;;;;\n10522;ELBASAN LETTER Y;Lo;0;L;;;;;N;;;;;\n10523;ELBASAN LETTER ZE;Lo;0;L;;;;;N;;;;;\n10524;ELBASAN LETTER ZHE;Lo;0;L;;;;;N;;;;;\n10525;ELBASAN LETTER GHE;Lo;0;L;;;;;N;;;;;\n10526;ELBASAN LETTER GHAMMA;Lo;0;L;;;;;N;;;;;\n10527;ELBASAN LETTER KHE;Lo;0;L;;;;;N;;;;;\n10530;CAUCASIAN ALBANIAN LETTER ALT;Lo;0;L;;;;;N;;;;;\n10531;CAUCASIAN ALBANIAN LETTER BET;Lo;0;L;;;;;N;;;;;\n10532;CAUCASIAN ALBANIAN LETTER GIM;Lo;0;L;;;;;N;;;;;\n10533;CAUCASIAN ALBANIAN LETTER DAT;Lo;0;L;;;;;N;;;;;\n10534;CAUCASIAN ALBANIAN LETTER EB;Lo;0;L;;;;;N;;;;;\n10535;CAUCASIAN ALBANIAN LETTER ZARL;Lo;0;L;;;;;N;;;;;\n10536;CAUCASIAN ALBANIAN LETTER EYN;Lo;0;L;;;;;N;;;;;\n10537;CAUCASIAN ALBANIAN LETTER ZHIL;Lo;0;L;;;;;N;;;;;\n10538;CAUCASIAN ALBANIAN LETTER TAS;Lo;0;L;;;;;N;;;;;\n10539;CAUCASIAN ALBANIAN LETTER CHA;Lo;0;L;;;;;N;;;;;\n1053A;CAUCASIAN ALBANIAN LETTER YOWD;Lo;0;L;;;;;N;;;;;\n1053B;CAUCASIAN ALBANIAN LETTER ZHA;Lo;0;L;;;;;N;;;;;\n1053C;CAUCASIAN ALBANIAN LETTER IRB;Lo;0;L;;;;;N;;;;;\n1053D;CAUCASIAN ALBANIAN LETTER SHA;Lo;0;L;;;;;N;;;;;\n1053E;CAUCASIAN ALBANIAN LETTER LAN;Lo;0;L;;;;;N;;;;;\n1053F;CAUCASIAN ALBANIAN LETTER INYA;Lo;0;L;;;;;N;;;;;\n10540;CAUCASIAN ALBANIAN LETTER XEYN;Lo;0;L;;;;;N;;;;;\n10541;CAUCASIAN ALBANIAN LETTER DYAN;Lo;0;L;;;;;N;;;;;\n10542;CAUCASIAN ALBANIAN LETTER CAR;Lo;0;L;;;;;N;;;;;\n10543;CAUCASIAN ALBANIAN LETTER JHOX;Lo;0;L;;;;;N;;;;;\n10544;CAUCASIAN ALBANIAN LETTER KAR;Lo;0;L;;;;;N;;;;;\n10545;CAUCASIAN ALBANIAN LETTER LYIT;Lo;0;L;;;;;N;;;;;\n10546;CAUCASIAN ALBANIAN LETTER HEYT;Lo;0;L;;;;;N;;;;;\n10547;CAUCASIAN ALBANIAN LETTER QAY;Lo;0;L;;;;;N;;;;;\n10548;CAUCASIAN ALBANIAN LETTER AOR;Lo;0;L;;;;;N;;;;;\n10549;CAUCASIAN ALBANIAN LETTER CHOY;Lo;0;L;;;;;N;;;;;\n1054A;CAUCASIAN ALBANIAN LETTER CHI;Lo;0;L;;;;;N;;;;;\n1054B;CAUCASIAN ALBANIAN LETTER CYAY;Lo;0;L;;;;;N;;;;;\n1054C;CAUCASIAN ALBANIAN LETTER MAQ;Lo;0;L;;;;;N;;;;;\n1054D;CAUCASIAN ALBANIAN LETTER QAR;Lo;0;L;;;;;N;;;;;\n1054E;CAUCASIAN ALBANIAN LETTER NOWC;Lo;0;L;;;;;N;;;;;\n1054F;CAUCASIAN ALBANIAN LETTER DZYAY;Lo;0;L;;;;;N;;;;;\n10550;CAUCASIAN ALBANIAN LETTER SHAK;Lo;0;L;;;;;N;;;;;\n10551;CAUCASIAN ALBANIAN LETTER JAYN;Lo;0;L;;;;;N;;;;;\n10552;CAUCASIAN ALBANIAN LETTER ON;Lo;0;L;;;;;N;;;;;\n10553;CAUCASIAN ALBANIAN LETTER TYAY;Lo;0;L;;;;;N;;;;;\n10554;CAUCASIAN ALBANIAN LETTER FAM;Lo;0;L;;;;;N;;;;;\n10555;CAUCASIAN ALBANIAN LETTER DZAY;Lo;0;L;;;;;N;;;;;\n10556;CAUCASIAN ALBANIAN LETTER CHAT;Lo;0;L;;;;;N;;;;;\n10557;CAUCASIAN ALBANIAN LETTER PEN;Lo;0;L;;;;;N;;;;;\n10558;CAUCASIAN ALBANIAN LETTER GHEYS;Lo;0;L;;;;;N;;;;;\n10559;CAUCASIAN ALBANIAN LETTER RAT;Lo;0;L;;;;;N;;;;;\n1055A;CAUCASIAN ALBANIAN LETTER SEYK;Lo;0;L;;;;;N;;;;;\n1055B;CAUCASIAN ALBANIAN LETTER VEYZ;Lo;0;L;;;;;N;;;;;\n1055C;CAUCASIAN ALBANIAN LETTER TIWR;Lo;0;L;;;;;N;;;;;\n1055D;CAUCASIAN ALBANIAN LETTER SHOY;Lo;0;L;;;;;N;;;;;\n1055E;CAUCASIAN ALBANIAN LETTER IWN;Lo;0;L;;;;;N;;;;;\n1055F;CAUCASIAN ALBANIAN LETTER CYAW;Lo;0;L;;;;;N;;;;;\n10560;CAUCASIAN ALBANIAN LETTER CAYN;Lo;0;L;;;;;N;;;;;\n10561;CAUCASIAN ALBANIAN LETTER YAYD;Lo;0;L;;;;;N;;;;;\n10562;CAUCASIAN ALBANIAN LETTER PIWR;Lo;0;L;;;;;N;;;;;\n10563;CAUCASIAN ALBANIAN LETTER KIW;Lo;0;L;;;;;N;;;;;\n1056F;CAUCASIAN ALBANIAN CITATION MARK;Po;0;L;;;;;N;;;;;\n10570;VITHKUQI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;10597;\n10571;VITHKUQI CAPITAL LETTER BBE;Lu;0;L;;;;;N;;;;10598;\n10572;VITHKUQI CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;10599;\n10573;VITHKUQI CAPITAL LETTER CE;Lu;0;L;;;;;N;;;;1059A;\n10574;VITHKUQI CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;1059B;\n10575;VITHKUQI CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;1059C;\n10576;VITHKUQI CAPITAL LETTER DHE;Lu;0;L;;;;;N;;;;1059D;\n10577;VITHKUQI CAPITAL LETTER EI;Lu;0;L;;;;;N;;;;1059E;\n10578;VITHKUQI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;1059F;\n10579;VITHKUQI CAPITAL LETTER FE;Lu;0;L;;;;;N;;;;105A0;\n1057A;VITHKUQI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;105A1;\n1057C;VITHKUQI CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;105A3;\n1057D;VITHKUQI CAPITAL LETTER HHA;Lu;0;L;;;;;N;;;;105A4;\n1057E;VITHKUQI CAPITAL LETTER I;Lu;0;L;;;;;N;;;;105A5;\n1057F;VITHKUQI CAPITAL LETTER IJE;Lu;0;L;;;;;N;;;;105A6;\n10580;VITHKUQI CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;105A7;\n10581;VITHKUQI CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;105A8;\n10582;VITHKUQI CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;105A9;\n10583;VITHKUQI CAPITAL LETTER LLA;Lu;0;L;;;;;N;;;;105AA;\n10584;VITHKUQI CAPITAL LETTER ME;Lu;0;L;;;;;N;;;;105AB;\n10585;VITHKUQI CAPITAL LETTER NE;Lu;0;L;;;;;N;;;;105AC;\n10586;VITHKUQI CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;105AD;\n10587;VITHKUQI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;105AE;\n10588;VITHKUQI CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;105AF;\n10589;VITHKUQI CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;105B0;\n1058A;VITHKUQI CAPITAL LETTER RE;Lu;0;L;;;;;N;;;;105B1;\n1058C;VITHKUQI CAPITAL LETTER SE;Lu;0;L;;;;;N;;;;105B3;\n1058D;VITHKUQI CAPITAL LETTER SHE;Lu;0;L;;;;;N;;;;105B4;\n1058E;VITHKUQI CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;105B5;\n1058F;VITHKUQI CAPITAL LETTER THE;Lu;0;L;;;;;N;;;;105B6;\n10590;VITHKUQI CAPITAL LETTER U;Lu;0;L;;;;;N;;;;105B7;\n10591;VITHKUQI CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;105B8;\n10592;VITHKUQI CAPITAL LETTER XE;Lu;0;L;;;;;N;;;;105B9;\n10594;VITHKUQI CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;105BB;\n10595;VITHKUQI CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;105BC;\n10597;VITHKUQI SMALL LETTER A;Ll;0;L;;;;;N;;;10570;;10570\n10598;VITHKUQI SMALL LETTER BBE;Ll;0;L;;;;;N;;;10571;;10571\n10599;VITHKUQI SMALL LETTER BE;Ll;0;L;;;;;N;;;10572;;10572\n1059A;VITHKUQI SMALL LETTER CE;Ll;0;L;;;;;N;;;10573;;10573\n1059B;VITHKUQI SMALL LETTER CHE;Ll;0;L;;;;;N;;;10574;;10574\n1059C;VITHKUQI SMALL LETTER DE;Ll;0;L;;;;;N;;;10575;;10575\n1059D;VITHKUQI SMALL LETTER DHE;Ll;0;L;;;;;N;;;10576;;10576\n1059E;VITHKUQI SMALL LETTER EI;Ll;0;L;;;;;N;;;10577;;10577\n1059F;VITHKUQI SMALL LETTER E;Ll;0;L;;;;;N;;;10578;;10578\n105A0;VITHKUQI SMALL LETTER FE;Ll;0;L;;;;;N;;;10579;;10579\n105A1;VITHKUQI SMALL LETTER GA;Ll;0;L;;;;;N;;;1057A;;1057A\n105A3;VITHKUQI SMALL LETTER HA;Ll;0;L;;;;;N;;;1057C;;1057C\n105A4;VITHKUQI SMALL LETTER HHA;Ll;0;L;;;;;N;;;1057D;;1057D\n105A5;VITHKUQI SMALL LETTER I;Ll;0;L;;;;;N;;;1057E;;1057E\n105A6;VITHKUQI SMALL LETTER IJE;Ll;0;L;;;;;N;;;1057F;;1057F\n105A7;VITHKUQI SMALL LETTER JE;Ll;0;L;;;;;N;;;10580;;10580\n105A8;VITHKUQI SMALL LETTER KA;Ll;0;L;;;;;N;;;10581;;10581\n105A9;VITHKUQI SMALL LETTER LA;Ll;0;L;;;;;N;;;10582;;10582\n105AA;VITHKUQI SMALL LETTER LLA;Ll;0;L;;;;;N;;;10583;;10583\n105AB;VITHKUQI SMALL LETTER ME;Ll;0;L;;;;;N;;;10584;;10584\n105AC;VITHKUQI SMALL LETTER NE;Ll;0;L;;;;;N;;;10585;;10585\n105AD;VITHKUQI SMALL LETTER NJE;Ll;0;L;;;;;N;;;10586;;10586\n105AE;VITHKUQI SMALL LETTER O;Ll;0;L;;;;;N;;;10587;;10587\n105AF;VITHKUQI SMALL LETTER PE;Ll;0;L;;;;;N;;;10588;;10588\n105B0;VITHKUQI SMALL LETTER QA;Ll;0;L;;;;;N;;;10589;;10589\n105B1;VITHKUQI SMALL LETTER RE;Ll;0;L;;;;;N;;;1058A;;1058A\n105B3;VITHKUQI SMALL LETTER SE;Ll;0;L;;;;;N;;;1058C;;1058C\n105B4;VITHKUQI SMALL LETTER SHE;Ll;0;L;;;;;N;;;1058D;;1058D\n105B5;VITHKUQI SMALL LETTER TE;Ll;0;L;;;;;N;;;1058E;;1058E\n105B6;VITHKUQI SMALL LETTER THE;Ll;0;L;;;;;N;;;1058F;;1058F\n105B7;VITHKUQI SMALL LETTER U;Ll;0;L;;;;;N;;;10590;;10590\n105B8;VITHKUQI SMALL LETTER VE;Ll;0;L;;;;;N;;;10591;;10591\n105B9;VITHKUQI SMALL LETTER XE;Ll;0;L;;;;;N;;;10592;;10592\n105BB;VITHKUQI SMALL LETTER Y;Ll;0;L;;;;;N;;;10594;;10594\n105BC;VITHKUQI SMALL LETTER ZE;Ll;0;L;;;;;N;;;10595;;10595\n105C0;TODHRI LETTER A;Lo;0;L;;;;;N;;;;;\n105C1;TODHRI LETTER AS;Lo;0;L;;;;;N;;;;;\n105C2;TODHRI LETTER BA;Lo;0;L;;;;;N;;;;;\n105C3;TODHRI LETTER MBA;Lo;0;L;;;;;N;;;;;\n105C4;TODHRI LETTER CA;Lo;0;L;;;;;N;;;;;\n105C5;TODHRI LETTER CHA;Lo;0;L;;;;;N;;;;;\n105C6;TODHRI LETTER DA;Lo;0;L;;;;;N;;;;;\n105C7;TODHRI LETTER NDA;Lo;0;L;;;;;N;;;;;\n105C8;TODHRI LETTER DHA;Lo;0;L;;;;;N;;;;;\n105C9;TODHRI LETTER EI;Lo;0;L;105D2 0307;;;;N;;;;;\n105CA;TODHRI LETTER E;Lo;0;L;;;;;N;;;;;\n105CB;TODHRI LETTER FA;Lo;0;L;;;;;N;;;;;\n105CC;TODHRI LETTER GA;Lo;0;L;;;;;N;;;;;\n105CD;TODHRI LETTER NGA;Lo;0;L;;;;;N;;;;;\n105CE;TODHRI LETTER GJA;Lo;0;L;;;;;N;;;;;\n105CF;TODHRI LETTER NGJA;Lo;0;L;;;;;N;;;;;\n105D0;TODHRI LETTER HA;Lo;0;L;;;;;N;;;;;\n105D1;TODHRI LETTER HJA;Lo;0;L;;;;;N;;;;;\n105D2;TODHRI LETTER I;Lo;0;L;;;;;N;;;;;\n105D3;TODHRI LETTER JA;Lo;0;L;;;;;N;;;;;\n105D4;TODHRI LETTER KA;Lo;0;L;;;;;N;;;;;\n105D5;TODHRI LETTER LA;Lo;0;L;;;;;N;;;;;\n105D6;TODHRI LETTER LLA;Lo;0;L;;;;;N;;;;;\n105D7;TODHRI LETTER MA;Lo;0;L;;;;;N;;;;;\n105D8;TODHRI LETTER NA;Lo;0;L;;;;;N;;;;;\n105D9;TODHRI LETTER NJAN;Lo;0;L;;;;;N;;;;;\n105DA;TODHRI LETTER O;Lo;0;L;;;;;N;;;;;\n105DB;TODHRI LETTER PA;Lo;0;L;;;;;N;;;;;\n105DC;TODHRI LETTER QA;Lo;0;L;;;;;N;;;;;\n105DD;TODHRI LETTER RA;Lo;0;L;;;;;N;;;;;\n105DE;TODHRI LETTER RRA;Lo;0;L;;;;;N;;;;;\n105DF;TODHRI LETTER SA;Lo;0;L;;;;;N;;;;;\n105E0;TODHRI LETTER SHA;Lo;0;L;;;;;N;;;;;\n105E1;TODHRI LETTER SHTA;Lo;0;L;;;;;N;;;;;\n105E2;TODHRI LETTER TA;Lo;0;L;;;;;N;;;;;\n105E3;TODHRI LETTER THA;Lo;0;L;;;;;N;;;;;\n105E4;TODHRI LETTER U;Lo;0;L;105DA 0307;;;;N;;;;;\n105E5;TODHRI LETTER VA;Lo;0;L;;;;;N;;;;;\n105E6;TODHRI LETTER XA;Lo;0;L;;;;;N;;;;;\n105E7;TODHRI LETTER NXA;Lo;0;L;;;;;N;;;;;\n105E8;TODHRI LETTER XHA;Lo;0;L;;;;;N;;;;;\n105E9;TODHRI LETTER NXHA;Lo;0;L;;;;;N;;;;;\n105EA;TODHRI LETTER Y;Lo;0;L;;;;;N;;;;;\n105EB;TODHRI LETTER JY;Lo;0;L;;;;;N;;;;;\n105EC;TODHRI LETTER ZA;Lo;0;L;;;;;N;;;;;\n105ED;TODHRI LETTER ZHA;Lo;0;L;;;;;N;;;;;\n105EE;TODHRI LETTER GHA;Lo;0;L;;;;;N;;;;;\n105EF;TODHRI LETTER STA;Lo;0;L;;;;;N;;;;;\n105F0;TODHRI LETTER SKAN;Lo;0;L;;;;;N;;;;;\n105F1;TODHRI LETTER KHA;Lo;0;L;;;;;N;;;;;\n105F2;TODHRI LETTER PSA;Lo;0;L;;;;;N;;;;;\n105F3;TODHRI LETTER OO;Lo;0;L;;;;;N;;;;;\n10600;LINEAR A SIGN AB001;Lo;0;L;;;;;N;;;;;\n10601;LINEAR A SIGN AB002;Lo;0;L;;;;;N;;;;;\n10602;LINEAR A SIGN AB003;Lo;0;L;;;;;N;;;;;\n10603;LINEAR A SIGN AB004;Lo;0;L;;;;;N;;;;;\n10604;LINEAR A SIGN AB005;Lo;0;L;;;;;N;;;;;\n10605;LINEAR A SIGN AB006;Lo;0;L;;;;;N;;;;;\n10606;LINEAR A SIGN AB007;Lo;0;L;;;;;N;;;;;\n10607;LINEAR A SIGN AB008;Lo;0;L;;;;;N;;;;;\n10608;LINEAR A SIGN AB009;Lo;0;L;;;;;N;;;;;\n10609;LINEAR A SIGN AB010;Lo;0;L;;;;;N;;;;;\n1060A;LINEAR A SIGN AB011;Lo;0;L;;;;;N;;;;;\n1060B;LINEAR A SIGN AB013;Lo;0;L;;;;;N;;;;;\n1060C;LINEAR A SIGN AB016;Lo;0;L;;;;;N;;;;;\n1060D;LINEAR A SIGN AB017;Lo;0;L;;;;;N;;;;;\n1060E;LINEAR A SIGN AB020;Lo;0;L;;;;;N;;;;;\n1060F;LINEAR A SIGN AB021;Lo;0;L;;;;;N;;;;;\n10610;LINEAR A SIGN AB021F;Lo;0;L;;;;;N;;;;;\n10611;LINEAR A SIGN AB021M;Lo;0;L;;;;;N;;;;;\n10612;LINEAR A SIGN AB022;Lo;0;L;;;;;N;;;;;\n10613;LINEAR A SIGN AB022F;Lo;0;L;;;;;N;;;;;\n10614;LINEAR A SIGN AB022M;Lo;0;L;;;;;N;;;;;\n10615;LINEAR A SIGN AB023;Lo;0;L;;;;;N;;;;;\n10616;LINEAR A SIGN AB023M;Lo;0;L;;;;;N;;;;;\n10617;LINEAR A SIGN AB024;Lo;0;L;;;;;N;;;;;\n10618;LINEAR A SIGN AB026;Lo;0;L;;;;;N;;;;;\n10619;LINEAR A SIGN AB027;Lo;0;L;;;;;N;;;;;\n1061A;LINEAR A SIGN AB028;Lo;0;L;;;;;N;;;;;\n1061B;LINEAR A SIGN A028B;Lo;0;L;;;;;N;;;;;\n1061C;LINEAR A SIGN AB029;Lo;0;L;;;;;N;;;;;\n1061D;LINEAR A SIGN AB030;Lo;0;L;;;;;N;;;;;\n1061E;LINEAR A SIGN AB031;Lo;0;L;;;;;N;;;;;\n1061F;LINEAR A SIGN AB034;Lo;0;L;;;;;N;;;;;\n10620;LINEAR A SIGN AB037;Lo;0;L;;;;;N;;;;;\n10621;LINEAR A SIGN AB038;Lo;0;L;;;;;N;;;;;\n10622;LINEAR A SIGN AB039;Lo;0;L;;;;;N;;;;;\n10623;LINEAR A SIGN AB040;Lo;0;L;;;;;N;;;;;\n10624;LINEAR A SIGN AB041;Lo;0;L;;;;;N;;;;;\n10625;LINEAR A SIGN AB044;Lo;0;L;;;;;N;;;;;\n10626;LINEAR A SIGN AB045;Lo;0;L;;;;;N;;;;;\n10627;LINEAR A SIGN AB046;Lo;0;L;;;;;N;;;;;\n10628;LINEAR A SIGN AB047;Lo;0;L;;;;;N;;;;;\n10629;LINEAR A SIGN AB048;Lo;0;L;;;;;N;;;;;\n1062A;LINEAR A SIGN AB049;Lo;0;L;;;;;N;;;;;\n1062B;LINEAR A SIGN AB050;Lo;0;L;;;;;N;;;;;\n1062C;LINEAR A SIGN AB051;Lo;0;L;;;;;N;;;;;\n1062D;LINEAR A SIGN AB053;Lo;0;L;;;;;N;;;;;\n1062E;LINEAR A SIGN AB054;Lo;0;L;;;;;N;;;;;\n1062F;LINEAR A SIGN AB055;Lo;0;L;;;;;N;;;;;\n10630;LINEAR A SIGN AB056;Lo;0;L;;;;;N;;;;;\n10631;LINEAR A SIGN AB057;Lo;0;L;;;;;N;;;;;\n10632;LINEAR A SIGN AB058;Lo;0;L;;;;;N;;;;;\n10633;LINEAR A SIGN AB059;Lo;0;L;;;;;N;;;;;\n10634;LINEAR A SIGN AB060;Lo;0;L;;;;;N;;;;;\n10635;LINEAR A SIGN AB061;Lo;0;L;;;;;N;;;;;\n10636;LINEAR A SIGN AB065;Lo;0;L;;;;;N;;;;;\n10637;LINEAR A SIGN AB066;Lo;0;L;;;;;N;;;;;\n10638;LINEAR A SIGN AB067;Lo;0;L;;;;;N;;;;;\n10639;LINEAR A SIGN AB069;Lo;0;L;;;;;N;;;;;\n1063A;LINEAR A SIGN AB070;Lo;0;L;;;;;N;;;;;\n1063B;LINEAR A SIGN AB073;Lo;0;L;;;;;N;;;;;\n1063C;LINEAR A SIGN AB074;Lo;0;L;;;;;N;;;;;\n1063D;LINEAR A SIGN AB076;Lo;0;L;;;;;N;;;;;\n1063E;LINEAR A SIGN AB077;Lo;0;L;;;;;N;;;;;\n1063F;LINEAR A SIGN AB078;Lo;0;L;;;;;N;;;;;\n10640;LINEAR A SIGN AB079;Lo;0;L;;;;;N;;;;;\n10641;LINEAR A SIGN AB080;Lo;0;L;;;;;N;;;;;\n10642;LINEAR A SIGN AB081;Lo;0;L;;;;;N;;;;;\n10643;LINEAR A SIGN AB082;Lo;0;L;;;;;N;;;;;\n10644;LINEAR A SIGN AB085;Lo;0;L;;;;;N;;;;;\n10645;LINEAR A SIGN AB086;Lo;0;L;;;;;N;;;;;\n10646;LINEAR A SIGN AB087;Lo;0;L;;;;;N;;;;;\n10647;LINEAR A SIGN A100-102;Lo;0;L;;;;;N;;;;;\n10648;LINEAR A SIGN AB118;Lo;0;L;;;;;N;;;;;\n10649;LINEAR A SIGN AB120;Lo;0;L;;;;;N;;;;;\n1064A;LINEAR A SIGN A120B;Lo;0;L;;;;;N;;;;;\n1064B;LINEAR A SIGN AB122;Lo;0;L;;;;;N;;;;;\n1064C;LINEAR A SIGN AB123;Lo;0;L;;;;;N;;;;;\n1064D;LINEAR A SIGN AB131A;Lo;0;L;;;;;N;;;;;\n1064E;LINEAR A SIGN AB131B;Lo;0;L;;;;;N;;;;;\n1064F;LINEAR A SIGN A131C;Lo;0;L;;;;;N;;;;;\n10650;LINEAR A SIGN AB164;Lo;0;L;;;;;N;;;;;\n10651;LINEAR A SIGN AB171;Lo;0;L;;;;;N;;;;;\n10652;LINEAR A SIGN AB180;Lo;0;L;;;;;N;;;;;\n10653;LINEAR A SIGN AB188;Lo;0;L;;;;;N;;;;;\n10654;LINEAR A SIGN AB191;Lo;0;L;;;;;N;;;;;\n10655;LINEAR A SIGN A301;Lo;0;L;;;;;N;;;;;\n10656;LINEAR A SIGN A302;Lo;0;L;;;;;N;;;;;\n10657;LINEAR A SIGN A303;Lo;0;L;;;;;N;;;;;\n10658;LINEAR A SIGN A304;Lo;0;L;;;;;N;;;;;\n10659;LINEAR A SIGN A305;Lo;0;L;;;;;N;;;;;\n1065A;LINEAR A SIGN A306;Lo;0;L;;;;;N;;;;;\n1065B;LINEAR A SIGN A307;Lo;0;L;;;;;N;;;;;\n1065C;LINEAR A SIGN A308;Lo;0;L;;;;;N;;;;;\n1065D;LINEAR A SIGN A309A;Lo;0;L;;;;;N;;;;;\n1065E;LINEAR A SIGN A309B;Lo;0;L;;;;;N;;;;;\n1065F;LINEAR A SIGN A309C;Lo;0;L;;;;;N;;;;;\n10660;LINEAR A SIGN A310;Lo;0;L;;;;;N;;;;;\n10661;LINEAR A SIGN A311;Lo;0;L;;;;;N;;;;;\n10662;LINEAR A SIGN A312;Lo;0;L;;;;;N;;;;;\n10663;LINEAR A SIGN A313A;Lo;0;L;;;;;N;;;;;\n10664;LINEAR A SIGN A313B;Lo;0;L;;;;;N;;;;;\n10665;LINEAR A SIGN A313C;Lo;0;L;;;;;N;;;;;\n10666;LINEAR A SIGN A314;Lo;0;L;;;;;N;;;;;\n10667;LINEAR A SIGN A315;Lo;0;L;;;;;N;;;;;\n10668;LINEAR A SIGN A316;Lo;0;L;;;;;N;;;;;\n10669;LINEAR A SIGN A317;Lo;0;L;;;;;N;;;;;\n1066A;LINEAR A SIGN A318;Lo;0;L;;;;;N;;;;;\n1066B;LINEAR A SIGN A319;Lo;0;L;;;;;N;;;;;\n1066C;LINEAR A SIGN A320;Lo;0;L;;;;;N;;;;;\n1066D;LINEAR A SIGN A321;Lo;0;L;;;;;N;;;;;\n1066E;LINEAR A SIGN A322;Lo;0;L;;;;;N;;;;;\n1066F;LINEAR A SIGN A323;Lo;0;L;;;;;N;;;;;\n10670;LINEAR A SIGN A324;Lo;0;L;;;;;N;;;;;\n10671;LINEAR A SIGN A325;Lo;0;L;;;;;N;;;;;\n10672;LINEAR A SIGN A326;Lo;0;L;;;;;N;;;;;\n10673;LINEAR A SIGN A327;Lo;0;L;;;;;N;;;;;\n10674;LINEAR A SIGN A328;Lo;0;L;;;;;N;;;;;\n10675;LINEAR A SIGN A329;Lo;0;L;;;;;N;;;;;\n10676;LINEAR A SIGN A330;Lo;0;L;;;;;N;;;;;\n10677;LINEAR A SIGN A331;Lo;0;L;;;;;N;;;;;\n10678;LINEAR A SIGN A332;Lo;0;L;;;;;N;;;;;\n10679;LINEAR A SIGN A333;Lo;0;L;;;;;N;;;;;\n1067A;LINEAR A SIGN A334;Lo;0;L;;;;;N;;;;;\n1067B;LINEAR A SIGN A335;Lo;0;L;;;;;N;;;;;\n1067C;LINEAR A SIGN A336;Lo;0;L;;;;;N;;;;;\n1067D;LINEAR A SIGN A337;Lo;0;L;;;;;N;;;;;\n1067E;LINEAR A SIGN A338;Lo;0;L;;;;;N;;;;;\n1067F;LINEAR A SIGN A339;Lo;0;L;;;;;N;;;;;\n10680;LINEAR A SIGN A340;Lo;0;L;;;;;N;;;;;\n10681;LINEAR A SIGN A341;Lo;0;L;;;;;N;;;;;\n10682;LINEAR A SIGN A342;Lo;0;L;;;;;N;;;;;\n10683;LINEAR A SIGN A343;Lo;0;L;;;;;N;;;;;\n10684;LINEAR A SIGN A344;Lo;0;L;;;;;N;;;;;\n10685;LINEAR A SIGN A345;Lo;0;L;;;;;N;;;;;\n10686;LINEAR A SIGN A346;Lo;0;L;;;;;N;;;;;\n10687;LINEAR A SIGN A347;Lo;0;L;;;;;N;;;;;\n10688;LINEAR A SIGN A348;Lo;0;L;;;;;N;;;;;\n10689;LINEAR A SIGN A349;Lo;0;L;;;;;N;;;;;\n1068A;LINEAR A SIGN A350;Lo;0;L;;;;;N;;;;;\n1068B;LINEAR A SIGN A351;Lo;0;L;;;;;N;;;;;\n1068C;LINEAR A SIGN A352;Lo;0;L;;;;;N;;;;;\n1068D;LINEAR A SIGN A353;Lo;0;L;;;;;N;;;;;\n1068E;LINEAR A SIGN A354;Lo;0;L;;;;;N;;;;;\n1068F;LINEAR A SIGN A355;Lo;0;L;;;;;N;;;;;\n10690;LINEAR A SIGN A356;Lo;0;L;;;;;N;;;;;\n10691;LINEAR A SIGN A357;Lo;0;L;;;;;N;;;;;\n10692;LINEAR A SIGN A358;Lo;0;L;;;;;N;;;;;\n10693;LINEAR A SIGN A359;Lo;0;L;;;;;N;;;;;\n10694;LINEAR A SIGN A360;Lo;0;L;;;;;N;;;;;\n10695;LINEAR A SIGN A361;Lo;0;L;;;;;N;;;;;\n10696;LINEAR A SIGN A362;Lo;0;L;;;;;N;;;;;\n10697;LINEAR A SIGN A363;Lo;0;L;;;;;N;;;;;\n10698;LINEAR A SIGN A364;Lo;0;L;;;;;N;;;;;\n10699;LINEAR A SIGN A365;Lo;0;L;;;;;N;;;;;\n1069A;LINEAR A SIGN A366;Lo;0;L;;;;;N;;;;;\n1069B;LINEAR A SIGN A367;Lo;0;L;;;;;N;;;;;\n1069C;LINEAR A SIGN A368;Lo;0;L;;;;;N;;;;;\n1069D;LINEAR A SIGN A369;Lo;0;L;;;;;N;;;;;\n1069E;LINEAR A SIGN A370;Lo;0;L;;;;;N;;;;;\n1069F;LINEAR A SIGN A371;Lo;0;L;;;;;N;;;;;\n106A0;LINEAR A SIGN A400-VAS;Lo;0;L;;;;;N;;;;;\n106A1;LINEAR A SIGN A401-VAS;Lo;0;L;;;;;N;;;;;\n106A2;LINEAR A SIGN A402-VAS;Lo;0;L;;;;;N;;;;;\n106A3;LINEAR A SIGN A403-VAS;Lo;0;L;;;;;N;;;;;\n106A4;LINEAR A SIGN A404-VAS;Lo;0;L;;;;;N;;;;;\n106A5;LINEAR A SIGN A405-VAS;Lo;0;L;;;;;N;;;;;\n106A6;LINEAR A SIGN A406-VAS;Lo;0;L;;;;;N;;;;;\n106A7;LINEAR A SIGN A407-VAS;Lo;0;L;;;;;N;;;;;\n106A8;LINEAR A SIGN A408-VAS;Lo;0;L;;;;;N;;;;;\n106A9;LINEAR A SIGN A409-VAS;Lo;0;L;;;;;N;;;;;\n106AA;LINEAR A SIGN A410-VAS;Lo;0;L;;;;;N;;;;;\n106AB;LINEAR A SIGN A411-VAS;Lo;0;L;;;;;N;;;;;\n106AC;LINEAR A SIGN A412-VAS;Lo;0;L;;;;;N;;;;;\n106AD;LINEAR A SIGN A413-VAS;Lo;0;L;;;;;N;;;;;\n106AE;LINEAR A SIGN A414-VAS;Lo;0;L;;;;;N;;;;;\n106AF;LINEAR A SIGN A415-VAS;Lo;0;L;;;;;N;;;;;\n106B0;LINEAR A SIGN A416-VAS;Lo;0;L;;;;;N;;;;;\n106B1;LINEAR A SIGN A417-VAS;Lo;0;L;;;;;N;;;;;\n106B2;LINEAR A SIGN A418-VAS;Lo;0;L;;;;;N;;;;;\n106B3;LINEAR A SIGN A501;Lo;0;L;;;;;N;;;;;\n106B4;LINEAR A SIGN A502;Lo;0;L;;;;;N;;;;;\n106B5;LINEAR A SIGN A503;Lo;0;L;;;;;N;;;;;\n106B6;LINEAR A SIGN A504;Lo;0;L;;;;;N;;;;;\n106B7;LINEAR A SIGN A505;Lo;0;L;;;;;N;;;;;\n106B8;LINEAR A SIGN A506;Lo;0;L;;;;;N;;;;;\n106B9;LINEAR A SIGN A508;Lo;0;L;;;;;N;;;;;\n106BA;LINEAR A SIGN A509;Lo;0;L;;;;;N;;;;;\n106BB;LINEAR A SIGN A510;Lo;0;L;;;;;N;;;;;\n106BC;LINEAR A SIGN A511;Lo;0;L;;;;;N;;;;;\n106BD;LINEAR A SIGN A512;Lo;0;L;;;;;N;;;;;\n106BE;LINEAR A SIGN A513;Lo;0;L;;;;;N;;;;;\n106BF;LINEAR A SIGN A515;Lo;0;L;;;;;N;;;;;\n106C0;LINEAR A SIGN A516;Lo;0;L;;;;;N;;;;;\n106C1;LINEAR A SIGN A520;Lo;0;L;;;;;N;;;;;\n106C2;LINEAR A SIGN A521;Lo;0;L;;;;;N;;;;;\n106C3;LINEAR A SIGN A523;Lo;0;L;;;;;N;;;;;\n106C4;LINEAR A SIGN A524;Lo;0;L;;;;;N;;;;;\n106C5;LINEAR A SIGN A525;Lo;0;L;;;;;N;;;;;\n106C6;LINEAR A SIGN A526;Lo;0;L;;;;;N;;;;;\n106C7;LINEAR A SIGN A527;Lo;0;L;;;;;N;;;;;\n106C8;LINEAR A SIGN A528;Lo;0;L;;;;;N;;;;;\n106C9;LINEAR A SIGN A529;Lo;0;L;;;;;N;;;;;\n106CA;LINEAR A SIGN A530;Lo;0;L;;;;;N;;;;;\n106CB;LINEAR A SIGN A531;Lo;0;L;;;;;N;;;;;\n106CC;LINEAR A SIGN A532;Lo;0;L;;;;;N;;;;;\n106CD;LINEAR A SIGN A534;Lo;0;L;;;;;N;;;;;\n106CE;LINEAR A SIGN A535;Lo;0;L;;;;;N;;;;;\n106CF;LINEAR A SIGN A536;Lo;0;L;;;;;N;;;;;\n106D0;LINEAR A SIGN A537;Lo;0;L;;;;;N;;;;;\n106D1;LINEAR A SIGN A538;Lo;0;L;;;;;N;;;;;\n106D2;LINEAR A SIGN A539;Lo;0;L;;;;;N;;;;;\n106D3;LINEAR A SIGN A540;Lo;0;L;;;;;N;;;;;\n106D4;LINEAR A SIGN A541;Lo;0;L;;;;;N;;;;;\n106D5;LINEAR A SIGN A542;Lo;0;L;;;;;N;;;;;\n106D6;LINEAR A SIGN A545;Lo;0;L;;;;;N;;;;;\n106D7;LINEAR A SIGN A547;Lo;0;L;;;;;N;;;;;\n106D8;LINEAR A SIGN A548;Lo;0;L;;;;;N;;;;;\n106D9;LINEAR A SIGN A549;Lo;0;L;;;;;N;;;;;\n106DA;LINEAR A SIGN A550;Lo;0;L;;;;;N;;;;;\n106DB;LINEAR A SIGN A551;Lo;0;L;;;;;N;;;;;\n106DC;LINEAR A SIGN A552;Lo;0;L;;;;;N;;;;;\n106DD;LINEAR A SIGN A553;Lo;0;L;;;;;N;;;;;\n106DE;LINEAR A SIGN A554;Lo;0;L;;;;;N;;;;;\n106DF;LINEAR A SIGN A555;Lo;0;L;;;;;N;;;;;\n106E0;LINEAR A SIGN A556;Lo;0;L;;;;;N;;;;;\n106E1;LINEAR A SIGN A557;Lo;0;L;;;;;N;;;;;\n106E2;LINEAR A SIGN A559;Lo;0;L;;;;;N;;;;;\n106E3;LINEAR A SIGN A563;Lo;0;L;;;;;N;;;;;\n106E4;LINEAR A SIGN A564;Lo;0;L;;;;;N;;;;;\n106E5;LINEAR A SIGN A565;Lo;0;L;;;;;N;;;;;\n106E6;LINEAR A SIGN A566;Lo;0;L;;;;;N;;;;;\n106E7;LINEAR A SIGN A568;Lo;0;L;;;;;N;;;;;\n106E8;LINEAR A SIGN A569;Lo;0;L;;;;;N;;;;;\n106E9;LINEAR A SIGN A570;Lo;0;L;;;;;N;;;;;\n106EA;LINEAR A SIGN A571;Lo;0;L;;;;;N;;;;;\n106EB;LINEAR A SIGN A572;Lo;0;L;;;;;N;;;;;\n106EC;LINEAR A SIGN A573;Lo;0;L;;;;;N;;;;;\n106ED;LINEAR A SIGN A574;Lo;0;L;;;;;N;;;;;\n106EE;LINEAR A SIGN A575;Lo;0;L;;;;;N;;;;;\n106EF;LINEAR A SIGN A576;Lo;0;L;;;;;N;;;;;\n106F0;LINEAR A SIGN A577;Lo;0;L;;;;;N;;;;;\n106F1;LINEAR A SIGN A578;Lo;0;L;;;;;N;;;;;\n106F2;LINEAR A SIGN A579;Lo;0;L;;;;;N;;;;;\n106F3;LINEAR A SIGN A580;Lo;0;L;;;;;N;;;;;\n106F4;LINEAR A SIGN A581;Lo;0;L;;;;;N;;;;;\n106F5;LINEAR A SIGN A582;Lo;0;L;;;;;N;;;;;\n106F6;LINEAR A SIGN A583;Lo;0;L;;;;;N;;;;;\n106F7;LINEAR A SIGN A584;Lo;0;L;;;;;N;;;;;\n106F8;LINEAR A SIGN A585;Lo;0;L;;;;;N;;;;;\n106F9;LINEAR A SIGN A586;Lo;0;L;;;;;N;;;;;\n106FA;LINEAR A SIGN A587;Lo;0;L;;;;;N;;;;;\n106FB;LINEAR A SIGN A588;Lo;0;L;;;;;N;;;;;\n106FC;LINEAR A SIGN A589;Lo;0;L;;;;;N;;;;;\n106FD;LINEAR A SIGN A591;Lo;0;L;;;;;N;;;;;\n106FE;LINEAR A SIGN A592;Lo;0;L;;;;;N;;;;;\n106FF;LINEAR A SIGN A594;Lo;0;L;;;;;N;;;;;\n10700;LINEAR A SIGN A595;Lo;0;L;;;;;N;;;;;\n10701;LINEAR A SIGN A596;Lo;0;L;;;;;N;;;;;\n10702;LINEAR A SIGN A598;Lo;0;L;;;;;N;;;;;\n10703;LINEAR A SIGN A600;Lo;0;L;;;;;N;;;;;\n10704;LINEAR A SIGN A601;Lo;0;L;;;;;N;;;;;\n10705;LINEAR A SIGN A602;Lo;0;L;;;;;N;;;;;\n10706;LINEAR A SIGN A603;Lo;0;L;;;;;N;;;;;\n10707;LINEAR A SIGN A604;Lo;0;L;;;;;N;;;;;\n10708;LINEAR A SIGN A606;Lo;0;L;;;;;N;;;;;\n10709;LINEAR A SIGN A608;Lo;0;L;;;;;N;;;;;\n1070A;LINEAR A SIGN A609;Lo;0;L;;;;;N;;;;;\n1070B;LINEAR A SIGN A610;Lo;0;L;;;;;N;;;;;\n1070C;LINEAR A SIGN A611;Lo;0;L;;;;;N;;;;;\n1070D;LINEAR A SIGN A612;Lo;0;L;;;;;N;;;;;\n1070E;LINEAR A SIGN A613;Lo;0;L;;;;;N;;;;;\n1070F;LINEAR A SIGN A614;Lo;0;L;;;;;N;;;;;\n10710;LINEAR A SIGN A615;Lo;0;L;;;;;N;;;;;\n10711;LINEAR A SIGN A616;Lo;0;L;;;;;N;;;;;\n10712;LINEAR A SIGN A617;Lo;0;L;;;;;N;;;;;\n10713;LINEAR A SIGN A618;Lo;0;L;;;;;N;;;;;\n10714;LINEAR A SIGN A619;Lo;0;L;;;;;N;;;;;\n10715;LINEAR A SIGN A620;Lo;0;L;;;;;N;;;;;\n10716;LINEAR A SIGN A621;Lo;0;L;;;;;N;;;;;\n10717;LINEAR A SIGN A622;Lo;0;L;;;;;N;;;;;\n10718;LINEAR A SIGN A623;Lo;0;L;;;;;N;;;;;\n10719;LINEAR A SIGN A624;Lo;0;L;;;;;N;;;;;\n1071A;LINEAR A SIGN A626;Lo;0;L;;;;;N;;;;;\n1071B;LINEAR A SIGN A627;Lo;0;L;;;;;N;;;;;\n1071C;LINEAR A SIGN A628;Lo;0;L;;;;;N;;;;;\n1071D;LINEAR A SIGN A629;Lo;0;L;;;;;N;;;;;\n1071E;LINEAR A SIGN A634;Lo;0;L;;;;;N;;;;;\n1071F;LINEAR A SIGN A637;Lo;0;L;;;;;N;;;;;\n10720;LINEAR A SIGN A638;Lo;0;L;;;;;N;;;;;\n10721;LINEAR A SIGN A640;Lo;0;L;;;;;N;;;;;\n10722;LINEAR A SIGN A642;Lo;0;L;;;;;N;;;;;\n10723;LINEAR A SIGN A643;Lo;0;L;;;;;N;;;;;\n10724;LINEAR A SIGN A644;Lo;0;L;;;;;N;;;;;\n10725;LINEAR A SIGN A645;Lo;0;L;;;;;N;;;;;\n10726;LINEAR A SIGN A646;Lo;0;L;;;;;N;;;;;\n10727;LINEAR A SIGN A648;Lo;0;L;;;;;N;;;;;\n10728;LINEAR A SIGN A649;Lo;0;L;;;;;N;;;;;\n10729;LINEAR A SIGN A651;Lo;0;L;;;;;N;;;;;\n1072A;LINEAR A SIGN A652;Lo;0;L;;;;;N;;;;;\n1072B;LINEAR A SIGN A653;Lo;0;L;;;;;N;;;;;\n1072C;LINEAR A SIGN A654;Lo;0;L;;;;;N;;;;;\n1072D;LINEAR A SIGN A655;Lo;0;L;;;;;N;;;;;\n1072E;LINEAR A SIGN A656;Lo;0;L;;;;;N;;;;;\n1072F;LINEAR A SIGN A657;Lo;0;L;;;;;N;;;;;\n10730;LINEAR A SIGN A658;Lo;0;L;;;;;N;;;;;\n10731;LINEAR A SIGN A659;Lo;0;L;;;;;N;;;;;\n10732;LINEAR A SIGN A660;Lo;0;L;;;;;N;;;;;\n10733;LINEAR A SIGN A661;Lo;0;L;;;;;N;;;;;\n10734;LINEAR A SIGN A662;Lo;0;L;;;;;N;;;;;\n10735;LINEAR A SIGN A663;Lo;0;L;;;;;N;;;;;\n10736;LINEAR A SIGN A664;Lo;0;L;;;;;N;;;;;\n10740;LINEAR A SIGN A701 A;Lo;0;L;;;;;N;;;;;\n10741;LINEAR A SIGN A702 B;Lo;0;L;;;;;N;;;;;\n10742;LINEAR A SIGN A703 D;Lo;0;L;;;;;N;;;;;\n10743;LINEAR A SIGN A704 E;Lo;0;L;;;;;N;;;;;\n10744;LINEAR A SIGN A705 F;Lo;0;L;;;;;N;;;;;\n10745;LINEAR A SIGN A706 H;Lo;0;L;;;;;N;;;;;\n10746;LINEAR A SIGN A707 J;Lo;0;L;;;;;N;;;;;\n10747;LINEAR A SIGN A708 K;Lo;0;L;;;;;N;;;;;\n10748;LINEAR A SIGN A709 L;Lo;0;L;;;;;N;;;;;\n10749;LINEAR A SIGN A709-2 L2;Lo;0;L;;;;;N;;;;;\n1074A;LINEAR A SIGN A709-3 L3;Lo;0;L;;;;;N;;;;;\n1074B;LINEAR A SIGN A709-4 L4;Lo;0;L;;;;;N;;;;;\n1074C;LINEAR A SIGN A709-6 L6;Lo;0;L;;;;;N;;;;;\n1074D;LINEAR A SIGN A710 W;Lo;0;L;;;;;N;;;;;\n1074E;LINEAR A SIGN A711 X;Lo;0;L;;;;;N;;;;;\n1074F;LINEAR A SIGN A712 Y;Lo;0;L;;;;;N;;;;;\n10750;LINEAR A SIGN A713 OMEGA;Lo;0;L;;;;;N;;;;;\n10751;LINEAR A SIGN A714 ABB;Lo;0;L;;;;;N;;;;;\n10752;LINEAR A SIGN A715 BB;Lo;0;L;;;;;N;;;;;\n10753;LINEAR A SIGN A717 DD;Lo;0;L;;;;;N;;;;;\n10754;LINEAR A SIGN A726 EYYY;Lo;0;L;;;;;N;;;;;\n10755;LINEAR A SIGN A732 JE;Lo;0;L;;;;;N;;;;;\n10760;LINEAR A SIGN A800;Lo;0;L;;;;;N;;;;;\n10761;LINEAR A SIGN A801;Lo;0;L;;;;;N;;;;;\n10762;LINEAR A SIGN A802;Lo;0;L;;;;;N;;;;;\n10763;LINEAR A SIGN A803;Lo;0;L;;;;;N;;;;;\n10764;LINEAR A SIGN A804;Lo;0;L;;;;;N;;;;;\n10765;LINEAR A SIGN A805;Lo;0;L;;;;;N;;;;;\n10766;LINEAR A SIGN A806;Lo;0;L;;;;;N;;;;;\n10767;LINEAR A SIGN A807;Lo;0;L;;;;;N;;;;;\n10780;MODIFIER LETTER SMALL CAPITAL AA;Lm;0;L;;;;;N;;;;;\n10781;MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON;Lm;0;L;<super> 02D0;;;;N;;;;;\n10782;MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON;Lm;0;L;<super> 02D1;;;;N;;;;;\n10783;MODIFIER LETTER SMALL AE;Lm;0;L;<super> 00E6;;;;N;;;;;\n10784;MODIFIER LETTER SMALL CAPITAL B;Lm;0;L;<super> 0299;;;;N;;;;;\n10785;MODIFIER LETTER SMALL B WITH HOOK;Lm;0;L;<super> 0253;;;;N;;;;;\n10787;MODIFIER LETTER SMALL DZ DIGRAPH;Lm;0;L;<super> 02A3;;;;N;;;;;\n10788;MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK;Lm;0;L;<super> AB66;;;;N;;;;;\n10789;MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL;Lm;0;L;<super> 02A5;;;;N;;;;;\n1078A;MODIFIER LETTER SMALL DEZH DIGRAPH;Lm;0;L;<super> 02A4;;;;N;;;;;\n1078B;MODIFIER LETTER SMALL D WITH TAIL;Lm;0;L;<super> 0256;;;;N;;;;;\n1078C;MODIFIER LETTER SMALL D WITH HOOK;Lm;0;L;<super> 0257;;;;N;;;;;\n1078D;MODIFIER LETTER SMALL D WITH HOOK AND TAIL;Lm;0;L;<super> 1D91;;;;N;;;;;\n1078E;MODIFIER LETTER SMALL REVERSED E;Lm;0;L;<super> 0258;;;;N;;;;;\n1078F;MODIFIER LETTER SMALL CLOSED REVERSED OPEN E;Lm;0;L;<super> 025E;;;;N;;;;;\n10790;MODIFIER LETTER SMALL FENG DIGRAPH;Lm;0;L;<super> 02A9;;;;N;;;;;\n10791;MODIFIER LETTER SMALL RAMS HORN;Lm;0;L;<super> 0264;;;;N;;;;;\n10792;MODIFIER LETTER SMALL CAPITAL G;Lm;0;L;<super> 0262;;;;N;;;;;\n10793;MODIFIER LETTER SMALL G WITH HOOK;Lm;0;L;<super> 0260;;;;N;;;;;\n10794;MODIFIER LETTER SMALL CAPITAL G WITH HOOK;Lm;0;L;<super> 029B;;;;N;;;;;\n10795;MODIFIER LETTER SMALL H WITH STROKE;Lm;0;L;<super> 0127;;;;N;;;;;\n10796;MODIFIER LETTER SMALL CAPITAL H;Lm;0;L;<super> 029C;;;;N;;;;;\n10797;MODIFIER LETTER SMALL HENG WITH HOOK;Lm;0;L;<super> 0267;;;;N;;;;;\n10798;MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK;Lm;0;L;<super> 0284;;;;N;;;;;\n10799;MODIFIER LETTER SMALL LS DIGRAPH;Lm;0;L;<super> 02AA;;;;N;;;;;\n1079A;MODIFIER LETTER SMALL LZ DIGRAPH;Lm;0;L;<super> 02AB;;;;N;;;;;\n1079B;MODIFIER LETTER SMALL L WITH BELT;Lm;0;L;<super> 026C;;;;N;;;;;\n1079C;MODIFIER LETTER SMALL CAPITAL L WITH BELT;Lm;0;L;<super> 1DF04;;;;N;;;;;\n1079D;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT;Lm;0;L;<super> A78E;;;;N;;;;;\n1079E;MODIFIER LETTER SMALL LEZH;Lm;0;L;<super> 026E;;;;N;;;;;\n1079F;MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK;Lm;0;L;<super> 1DF05;;;;N;;;;;\n107A0;MODIFIER LETTER SMALL TURNED Y;Lm;0;L;<super> 028E;;;;N;;;;;\n107A1;MODIFIER LETTER SMALL TURNED Y WITH BELT;Lm;0;L;<super> 1DF06;;;;N;;;;;\n107A2;MODIFIER LETTER SMALL O WITH STROKE;Lm;0;L;<super> 00F8;;;;N;;;;;\n107A3;MODIFIER LETTER SMALL CAPITAL OE;Lm;0;L;<super> 0276;;;;N;;;;;\n107A4;MODIFIER LETTER SMALL CLOSED OMEGA;Lm;0;L;<super> 0277;;;;N;;;;;\n107A5;MODIFIER LETTER SMALL Q;Lm;0;L;<super> 0071;;;;N;;;;;\n107A6;MODIFIER LETTER SMALL TURNED R WITH LONG LEG;Lm;0;L;<super> 027A;;;;N;;;;;\n107A7;MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK;Lm;0;L;<super> 1DF08;;;;N;;;;;\n107A8;MODIFIER LETTER SMALL R WITH TAIL;Lm;0;L;<super> 027D;;;;N;;;;;\n107A9;MODIFIER LETTER SMALL R WITH FISHHOOK;Lm;0;L;<super> 027E;;;;N;;;;;\n107AA;MODIFIER LETTER SMALL CAPITAL R;Lm;0;L;<super> 0280;;;;N;;;;;\n107AB;MODIFIER LETTER SMALL TC DIGRAPH WITH CURL;Lm;0;L;<super> 02A8;;;;N;;;;;\n107AC;MODIFIER LETTER SMALL TS DIGRAPH;Lm;0;L;<super> 02A6;;;;N;;;;;\n107AD;MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK;Lm;0;L;<super> AB67;;;;N;;;;;\n107AE;MODIFIER LETTER SMALL TESH DIGRAPH;Lm;0;L;<super> 02A7;;;;N;;;;;\n107AF;MODIFIER LETTER SMALL T WITH RETROFLEX HOOK;Lm;0;L;<super> 0288;;;;N;;;;;\n107B0;MODIFIER LETTER SMALL V WITH RIGHT HOOK;Lm;0;L;<super> 2C71;;;;N;;;;;\n107B2;MODIFIER LETTER SMALL CAPITAL Y;Lm;0;L;<super> 028F;;;;N;;;;;\n107B3;MODIFIER LETTER GLOTTAL STOP WITH STROKE;Lm;0;L;<super> 02A1;;;;N;;;;;\n107B4;MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE;Lm;0;L;<super> 02A2;;;;N;;;;;\n107B5;MODIFIER LETTER BILABIAL CLICK;Lm;0;L;<super> 0298;;;;N;;;;;\n107B6;MODIFIER LETTER DENTAL CLICK;Lm;0;L;<super> 01C0;;;;N;;;;;\n107B7;MODIFIER LETTER LATERAL CLICK;Lm;0;L;<super> 01C1;;;;N;;;;;\n107B8;MODIFIER LETTER ALVEOLAR CLICK;Lm;0;L;<super> 01C2;;;;N;;;;;\n107B9;MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lm;0;L;<super> 1DF0A;;;;N;;;;;\n107BA;MODIFIER LETTER SMALL S WITH CURL;Lm;0;L;<super> 1DF1E;;;;N;;;;;\n10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;;\n10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;;\n10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;;\n10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;;\n10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;;\n10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;;\n10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;;\n1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;;\n1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;;\n1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;;\n1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;;\n1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;;\n1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;;\n10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;;\n10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;;\n10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;;\n10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;;\n10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;;\n10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;;\n10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;;\n10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;;\n10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;;\n10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;;\n1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;;\n1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;;\n1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;;\n1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;;\n1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;;\n1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;;\n10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;;\n10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;;\n10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;;\n10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;;\n10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;;\n10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;;\n10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;;\n10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;;\n10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;;\n10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;;\n1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;;\n1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;;\n1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;;\n1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;;\n1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;;\n1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;;\n10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;;\n10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;;\n10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;;\n10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;;\n10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;;\n10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;;\n10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;;\n10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;;\n1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;;\n1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;;\n10840;IMPERIAL ARAMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;;\n10841;IMPERIAL ARAMAIC LETTER BETH;Lo;0;R;;;;;N;;;;;\n10842;IMPERIAL ARAMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n10843;IMPERIAL ARAMAIC LETTER DALETH;Lo;0;R;;;;;N;;;;;\n10844;IMPERIAL ARAMAIC LETTER HE;Lo;0;R;;;;;N;;;;;\n10845;IMPERIAL ARAMAIC LETTER WAW;Lo;0;R;;;;;N;;;;;\n10846;IMPERIAL ARAMAIC LETTER ZAYIN;Lo;0;R;;;;;N;;;;;\n10847;IMPERIAL ARAMAIC LETTER HETH;Lo;0;R;;;;;N;;;;;\n10848;IMPERIAL ARAMAIC LETTER TETH;Lo;0;R;;;;;N;;;;;\n10849;IMPERIAL ARAMAIC LETTER YODH;Lo;0;R;;;;;N;;;;;\n1084A;IMPERIAL ARAMAIC LETTER KAPH;Lo;0;R;;;;;N;;;;;\n1084B;IMPERIAL ARAMAIC LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n1084C;IMPERIAL ARAMAIC LETTER MEM;Lo;0;R;;;;;N;;;;;\n1084D;IMPERIAL ARAMAIC LETTER NUN;Lo;0;R;;;;;N;;;;;\n1084E;IMPERIAL ARAMAIC LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n1084F;IMPERIAL ARAMAIC LETTER AYIN;Lo;0;R;;;;;N;;;;;\n10850;IMPERIAL ARAMAIC LETTER PE;Lo;0;R;;;;;N;;;;;\n10851;IMPERIAL ARAMAIC LETTER SADHE;Lo;0;R;;;;;N;;;;;\n10852;IMPERIAL ARAMAIC LETTER QOPH;Lo;0;R;;;;;N;;;;;\n10853;IMPERIAL ARAMAIC LETTER RESH;Lo;0;R;;;;;N;;;;;\n10854;IMPERIAL ARAMAIC LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10855;IMPERIAL ARAMAIC LETTER TAW;Lo;0;R;;;;;N;;;;;\n10857;IMPERIAL ARAMAIC SECTION SIGN;Po;0;R;;;;;N;;;;;\n10858;IMPERIAL ARAMAIC NUMBER ONE;No;0;R;;;;1;N;;;;;\n10859;IMPERIAL ARAMAIC NUMBER TWO;No;0;R;;;;2;N;;;;;\n1085A;IMPERIAL ARAMAIC NUMBER THREE;No;0;R;;;;3;N;;;;;\n1085B;IMPERIAL ARAMAIC NUMBER TEN;No;0;R;;;;10;N;;;;;\n1085C;IMPERIAL ARAMAIC NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n1085D;IMPERIAL ARAMAIC NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n1085E;IMPERIAL ARAMAIC NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;\n1085F;IMPERIAL ARAMAIC NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;;\n10860;PALMYRENE LETTER ALEPH;Lo;0;R;;;;;N;;;;;\n10861;PALMYRENE LETTER BETH;Lo;0;R;;;;;N;;;;;\n10862;PALMYRENE LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n10863;PALMYRENE LETTER DALETH;Lo;0;R;;;;;N;;;;;\n10864;PALMYRENE LETTER HE;Lo;0;R;;;;;N;;;;;\n10865;PALMYRENE LETTER WAW;Lo;0;R;;;;;N;;;;;\n10866;PALMYRENE LETTER ZAYIN;Lo;0;R;;;;;N;;;;;\n10867;PALMYRENE LETTER HETH;Lo;0;R;;;;;N;;;;;\n10868;PALMYRENE LETTER TETH;Lo;0;R;;;;;N;;;;;\n10869;PALMYRENE LETTER YODH;Lo;0;R;;;;;N;;;;;\n1086A;PALMYRENE LETTER KAPH;Lo;0;R;;;;;N;;;;;\n1086B;PALMYRENE LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n1086C;PALMYRENE LETTER MEM;Lo;0;R;;;;;N;;;;;\n1086D;PALMYRENE LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;\n1086E;PALMYRENE LETTER NUN;Lo;0;R;;;;;N;;;;;\n1086F;PALMYRENE LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n10870;PALMYRENE LETTER AYIN;Lo;0;R;;;;;N;;;;;\n10871;PALMYRENE LETTER PE;Lo;0;R;;;;;N;;;;;\n10872;PALMYRENE LETTER SADHE;Lo;0;R;;;;;N;;;;;\n10873;PALMYRENE LETTER QOPH;Lo;0;R;;;;;N;;;;;\n10874;PALMYRENE LETTER RESH;Lo;0;R;;;;;N;;;;;\n10875;PALMYRENE LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10876;PALMYRENE LETTER TAW;Lo;0;R;;;;;N;;;;;\n10877;PALMYRENE LEFT-POINTING FLEURON;So;0;R;;;;;N;;;;;\n10878;PALMYRENE RIGHT-POINTING FLEURON;So;0;R;;;;;N;;;;;\n10879;PALMYRENE NUMBER ONE;No;0;R;;;;1;N;;;;;\n1087A;PALMYRENE NUMBER TWO;No;0;R;;;;2;N;;;;;\n1087B;PALMYRENE NUMBER THREE;No;0;R;;;;3;N;;;;;\n1087C;PALMYRENE NUMBER FOUR;No;0;R;;;;4;N;;;;;\n1087D;PALMYRENE NUMBER FIVE;No;0;R;;;;5;N;;;;;\n1087E;PALMYRENE NUMBER TEN;No;0;R;;;;10;N;;;;;\n1087F;PALMYRENE NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n10880;NABATAEAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;;\n10881;NABATAEAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;\n10882;NABATAEAN LETTER FINAL BETH;Lo;0;R;;;;;N;;;;;\n10883;NABATAEAN LETTER BETH;Lo;0;R;;;;;N;;;;;\n10884;NABATAEAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n10885;NABATAEAN LETTER DALETH;Lo;0;R;;;;;N;;;;;\n10886;NABATAEAN LETTER FINAL HE;Lo;0;R;;;;;N;;;;;\n10887;NABATAEAN LETTER HE;Lo;0;R;;;;;N;;;;;\n10888;NABATAEAN LETTER WAW;Lo;0;R;;;;;N;;;;;\n10889;NABATAEAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;\n1088A;NABATAEAN LETTER HETH;Lo;0;R;;;;;N;;;;;\n1088B;NABATAEAN LETTER TETH;Lo;0;R;;;;;N;;;;;\n1088C;NABATAEAN LETTER FINAL YODH;Lo;0;R;;;;;N;;;;;\n1088D;NABATAEAN LETTER YODH;Lo;0;R;;;;;N;;;;;\n1088E;NABATAEAN LETTER FINAL KAPH;Lo;0;R;;;;;N;;;;;\n1088F;NABATAEAN LETTER KAPH;Lo;0;R;;;;;N;;;;;\n10890;NABATAEAN LETTER FINAL LAMEDH;Lo;0;R;;;;;N;;;;;\n10891;NABATAEAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n10892;NABATAEAN LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;\n10893;NABATAEAN LETTER MEM;Lo;0;R;;;;;N;;;;;\n10894;NABATAEAN LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;\n10895;NABATAEAN LETTER NUN;Lo;0;R;;;;;N;;;;;\n10896;NABATAEAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n10897;NABATAEAN LETTER AYIN;Lo;0;R;;;;;N;;;;;\n10898;NABATAEAN LETTER PE;Lo;0;R;;;;;N;;;;;\n10899;NABATAEAN LETTER SADHE;Lo;0;R;;;;;N;;;;;\n1089A;NABATAEAN LETTER QOPH;Lo;0;R;;;;;N;;;;;\n1089B;NABATAEAN LETTER RESH;Lo;0;R;;;;;N;;;;;\n1089C;NABATAEAN LETTER FINAL SHIN;Lo;0;R;;;;;N;;;;;\n1089D;NABATAEAN LETTER SHIN;Lo;0;R;;;;;N;;;;;\n1089E;NABATAEAN LETTER TAW;Lo;0;R;;;;;N;;;;;\n108A7;NABATAEAN NUMBER ONE;No;0;R;;;;1;N;;;;;\n108A8;NABATAEAN NUMBER TWO;No;0;R;;;;2;N;;;;;\n108A9;NABATAEAN NUMBER THREE;No;0;R;;;;3;N;;;;;\n108AA;NABATAEAN NUMBER FOUR;No;0;R;;;;4;N;;;;;\n108AB;NABATAEAN CRUCIFORM NUMBER FOUR;No;0;R;;;;4;N;;;;;\n108AC;NABATAEAN NUMBER FIVE;No;0;R;;;;5;N;;;;;\n108AD;NABATAEAN NUMBER TEN;No;0;R;;;;10;N;;;;;\n108AE;NABATAEAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n108AF;NABATAEAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n108E0;HATRAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;\n108E1;HATRAN LETTER BETH;Lo;0;R;;;;;N;;;;;\n108E2;HATRAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n108E3;HATRAN LETTER DALETH-RESH;Lo;0;R;;;;;N;;;;;\n108E4;HATRAN LETTER HE;Lo;0;R;;;;;N;;;;;\n108E5;HATRAN LETTER WAW;Lo;0;R;;;;;N;;;;;\n108E6;HATRAN LETTER ZAYN;Lo;0;R;;;;;N;;;;;\n108E7;HATRAN LETTER HETH;Lo;0;R;;;;;N;;;;;\n108E8;HATRAN LETTER TETH;Lo;0;R;;;;;N;;;;;\n108E9;HATRAN LETTER YODH;Lo;0;R;;;;;N;;;;;\n108EA;HATRAN LETTER KAPH;Lo;0;R;;;;;N;;;;;\n108EB;HATRAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n108EC;HATRAN LETTER MEM;Lo;0;R;;;;;N;;;;;\n108ED;HATRAN LETTER NUN;Lo;0;R;;;;;N;;;;;\n108EE;HATRAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n108EF;HATRAN LETTER AYN;Lo;0;R;;;;;N;;;;;\n108F0;HATRAN LETTER PE;Lo;0;R;;;;;N;;;;;\n108F1;HATRAN LETTER SADHE;Lo;0;R;;;;;N;;;;;\n108F2;HATRAN LETTER QOPH;Lo;0;R;;;;;N;;;;;\n108F4;HATRAN LETTER SHIN;Lo;0;R;;;;;N;;;;;\n108F5;HATRAN LETTER TAW;Lo;0;R;;;;;N;;;;;\n108FB;HATRAN NUMBER ONE;No;0;R;;;;1;N;;;;;\n108FC;HATRAN NUMBER FIVE;No;0;R;;;;5;N;;;;;\n108FD;HATRAN NUMBER TEN;No;0;R;;;;10;N;;;;;\n108FE;HATRAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n108FF;HATRAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;;\n10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;;\n10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;;\n10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;;\n10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;;\n10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;;\n10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;;\n10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;;\n10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;;\n10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;;\n1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;;\n1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;;\n1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;;\n1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;;\n1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;;\n1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;;\n10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;;\n10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;;\n10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;;\n10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;;\n10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;;\n10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;;\n10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;;\n10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n1091A;PHOENICIAN NUMBER TWO;No;0;R;;;;2;N;;;;;\n1091B;PHOENICIAN NUMBER THREE;No;0;R;;;;3;N;;;;;\n1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;;\n10920;LYDIAN LETTER A;Lo;0;R;;;;;N;;;;;\n10921;LYDIAN LETTER B;Lo;0;R;;;;;N;;;;;\n10922;LYDIAN LETTER G;Lo;0;R;;;;;N;;;;;\n10923;LYDIAN LETTER D;Lo;0;R;;;;;N;;;;;\n10924;LYDIAN LETTER E;Lo;0;R;;;;;N;;;;;\n10925;LYDIAN LETTER V;Lo;0;R;;;;;N;;;;;\n10926;LYDIAN LETTER I;Lo;0;R;;;;;N;;;;;\n10927;LYDIAN LETTER Y;Lo;0;R;;;;;N;;;;;\n10928;LYDIAN LETTER K;Lo;0;R;;;;;N;;;;;\n10929;LYDIAN LETTER L;Lo;0;R;;;;;N;;;;;\n1092A;LYDIAN LETTER M;Lo;0;R;;;;;N;;;;;\n1092B;LYDIAN LETTER N;Lo;0;R;;;;;N;;;;;\n1092C;LYDIAN LETTER O;Lo;0;R;;;;;N;;;;;\n1092D;LYDIAN LETTER R;Lo;0;R;;;;;N;;;;;\n1092E;LYDIAN LETTER SS;Lo;0;R;;;;;N;;;;;\n1092F;LYDIAN LETTER T;Lo;0;R;;;;;N;;;;;\n10930;LYDIAN LETTER U;Lo;0;R;;;;;N;;;;;\n10931;LYDIAN LETTER F;Lo;0;R;;;;;N;;;;;\n10932;LYDIAN LETTER Q;Lo;0;R;;;;;N;;;;;\n10933;LYDIAN LETTER S;Lo;0;R;;;;;N;;;;;\n10934;LYDIAN LETTER TT;Lo;0;R;;;;;N;;;;;\n10935;LYDIAN LETTER AN;Lo;0;R;;;;;N;;;;;\n10936;LYDIAN LETTER EN;Lo;0;R;;;;;N;;;;;\n10937;LYDIAN LETTER LY;Lo;0;R;;;;;N;;;;;\n10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;;\n10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;;\n1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;;\n10940;SIDETIC LETTER N01;Lo;0;R;;;;;N;;;;;\n10941;SIDETIC LETTER N02;Lo;0;R;;;;;N;;;;;\n10942;SIDETIC LETTER N03;Lo;0;R;;;;;N;;;;;\n10943;SIDETIC LETTER N04;Lo;0;R;;;;;N;;;;;\n10944;SIDETIC LETTER N05;Lo;0;R;;;;;N;;;;;\n10945;SIDETIC LETTER N06;Lo;0;R;;;;;N;;;;;\n10946;SIDETIC LETTER N07;Lo;0;R;;;;;N;;;;;\n10947;SIDETIC LETTER N08;Lo;0;R;;;;;N;;;;;\n10948;SIDETIC LETTER N09;Lo;0;R;;;;;N;;;;;\n10949;SIDETIC LETTER N10;Lo;0;R;;;;;N;;;;;\n1094A;SIDETIC LETTER N11;Lo;0;R;;;;;N;;;;;\n1094B;SIDETIC LETTER N12;Lo;0;R;;;;;N;;;;;\n1094C;SIDETIC LETTER N13;Lo;0;R;;;;;N;;;;;\n1094D;SIDETIC LETTER N14;Lo;0;R;;;;;N;;;;;\n1094E;SIDETIC LETTER N15;Lo;0;R;;;;;N;;;;;\n1094F;SIDETIC LETTER N16;Lo;0;R;;;;;N;;;;;\n10950;SIDETIC LETTER N17;Lo;0;R;;;;;N;;;;;\n10951;SIDETIC LETTER N18;Lo;0;R;;;;;N;;;;;\n10952;SIDETIC LETTER N19;Lo;0;R;;;;;N;;;;;\n10953;SIDETIC LETTER N20;Lo;0;R;;;;;N;;;;;\n10954;SIDETIC LETTER N21;Lo;0;R;;;;;N;;;;;\n10955;SIDETIC LETTER N22;Lo;0;R;;;;;N;;;;;\n10956;SIDETIC LETTER N23;Lo;0;R;;;;;N;;;;;\n10957;SIDETIC LETTER N24;Lo;0;R;;;;;N;;;;;\n10958;SIDETIC LETTER N25;Lo;0;R;;;;;N;;;;;\n10959;SIDETIC LETTER N26;Lo;0;R;;;;;N;;;;;\n10980;MEROITIC HIEROGLYPHIC LETTER A;Lo;0;R;;;;;N;;;;;\n10981;MEROITIC HIEROGLYPHIC LETTER E;Lo;0;R;;;;;N;;;;;\n10982;MEROITIC HIEROGLYPHIC LETTER I;Lo;0;R;;;;;N;;;;;\n10983;MEROITIC HIEROGLYPHIC LETTER O;Lo;0;R;;;;;N;;;;;\n10984;MEROITIC HIEROGLYPHIC LETTER YA;Lo;0;R;;;;;N;;;;;\n10985;MEROITIC HIEROGLYPHIC LETTER WA;Lo;0;R;;;;;N;;;;;\n10986;MEROITIC HIEROGLYPHIC LETTER BA;Lo;0;R;;;;;N;;;;;\n10987;MEROITIC HIEROGLYPHIC LETTER BA-2;Lo;0;R;;;;;N;;;;;\n10988;MEROITIC HIEROGLYPHIC LETTER PA;Lo;0;R;;;;;N;;;;;\n10989;MEROITIC HIEROGLYPHIC LETTER MA;Lo;0;R;;;;;N;;;;;\n1098A;MEROITIC HIEROGLYPHIC LETTER NA;Lo;0;R;;;;;N;;;;;\n1098B;MEROITIC HIEROGLYPHIC LETTER NA-2;Lo;0;R;;;;;N;;;;;\n1098C;MEROITIC HIEROGLYPHIC LETTER NE;Lo;0;R;;;;;N;;;;;\n1098D;MEROITIC HIEROGLYPHIC LETTER NE-2;Lo;0;R;;;;;N;;;;;\n1098E;MEROITIC HIEROGLYPHIC LETTER RA;Lo;0;R;;;;;N;;;;;\n1098F;MEROITIC HIEROGLYPHIC LETTER RA-2;Lo;0;R;;;;;N;;;;;\n10990;MEROITIC HIEROGLYPHIC LETTER LA;Lo;0;R;;;;;N;;;;;\n10991;MEROITIC HIEROGLYPHIC LETTER KHA;Lo;0;R;;;;;N;;;;;\n10992;MEROITIC HIEROGLYPHIC LETTER HHA;Lo;0;R;;;;;N;;;;;\n10993;MEROITIC HIEROGLYPHIC LETTER SA;Lo;0;R;;;;;N;;;;;\n10994;MEROITIC HIEROGLYPHIC LETTER SA-2;Lo;0;R;;;;;N;;;;;\n10995;MEROITIC HIEROGLYPHIC LETTER SE;Lo;0;R;;;;;N;;;;;\n10996;MEROITIC HIEROGLYPHIC LETTER KA;Lo;0;R;;;;;N;;;;;\n10997;MEROITIC HIEROGLYPHIC LETTER QA;Lo;0;R;;;;;N;;;;;\n10998;MEROITIC HIEROGLYPHIC LETTER TA;Lo;0;R;;;;;N;;;;;\n10999;MEROITIC HIEROGLYPHIC LETTER TA-2;Lo;0;R;;;;;N;;;;;\n1099A;MEROITIC HIEROGLYPHIC LETTER TE;Lo;0;R;;;;;N;;;;;\n1099B;MEROITIC HIEROGLYPHIC LETTER TE-2;Lo;0;R;;;;;N;;;;;\n1099C;MEROITIC HIEROGLYPHIC LETTER TO;Lo;0;R;;;;;N;;;;;\n1099D;MEROITIC HIEROGLYPHIC LETTER DA;Lo;0;R;;;;;N;;;;;\n1099E;MEROITIC HIEROGLYPHIC SYMBOL VIDJ;Lo;0;R;;;;;N;;;;;\n1099F;MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2;Lo;0;R;;;;;N;;;;;\n109A0;MEROITIC CURSIVE LETTER A;Lo;0;R;;;;;N;;;;;\n109A1;MEROITIC CURSIVE LETTER E;Lo;0;R;;;;;N;;;;;\n109A2;MEROITIC CURSIVE LETTER I;Lo;0;R;;;;;N;;;;;\n109A3;MEROITIC CURSIVE LETTER O;Lo;0;R;;;;;N;;;;;\n109A4;MEROITIC CURSIVE LETTER YA;Lo;0;R;;;;;N;;;;;\n109A5;MEROITIC CURSIVE LETTER WA;Lo;0;R;;;;;N;;;;;\n109A6;MEROITIC CURSIVE LETTER BA;Lo;0;R;;;;;N;;;;;\n109A7;MEROITIC CURSIVE LETTER PA;Lo;0;R;;;;;N;;;;;\n109A8;MEROITIC CURSIVE LETTER MA;Lo;0;R;;;;;N;;;;;\n109A9;MEROITIC CURSIVE LETTER NA;Lo;0;R;;;;;N;;;;;\n109AA;MEROITIC CURSIVE LETTER NE;Lo;0;R;;;;;N;;;;;\n109AB;MEROITIC CURSIVE LETTER RA;Lo;0;R;;;;;N;;;;;\n109AC;MEROITIC CURSIVE LETTER LA;Lo;0;R;;;;;N;;;;;\n109AD;MEROITIC CURSIVE LETTER KHA;Lo;0;R;;;;;N;;;;;\n109AE;MEROITIC CURSIVE LETTER HHA;Lo;0;R;;;;;N;;;;;\n109AF;MEROITIC CURSIVE LETTER SA;Lo;0;R;;;;;N;;;;;\n109B0;MEROITIC CURSIVE LETTER ARCHAIC SA;Lo;0;R;;;;;N;;;;;\n109B1;MEROITIC CURSIVE LETTER SE;Lo;0;R;;;;;N;;;;;\n109B2;MEROITIC CURSIVE LETTER KA;Lo;0;R;;;;;N;;;;;\n109B3;MEROITIC CURSIVE LETTER QA;Lo;0;R;;;;;N;;;;;\n109B4;MEROITIC CURSIVE LETTER TA;Lo;0;R;;;;;N;;;;;\n109B5;MEROITIC CURSIVE LETTER TE;Lo;0;R;;;;;N;;;;;\n109B6;MEROITIC CURSIVE LETTER TO;Lo;0;R;;;;;N;;;;;\n109B7;MEROITIC CURSIVE LETTER DA;Lo;0;R;;;;;N;;;;;\n109BC;MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS;No;0;R;;;;11/12;N;;;;;\n109BD;MEROITIC CURSIVE FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;;\n109BE;MEROITIC CURSIVE LOGOGRAM RMT;Lo;0;R;;;;;N;;;;;\n109BF;MEROITIC CURSIVE LOGOGRAM IMN;Lo;0;R;;;;;N;;;;;\n109C0;MEROITIC CURSIVE NUMBER ONE;No;0;R;;;;1;N;;;;;\n109C1;MEROITIC CURSIVE NUMBER TWO;No;0;R;;;;2;N;;;;;\n109C2;MEROITIC CURSIVE NUMBER THREE;No;0;R;;;;3;N;;;;;\n109C3;MEROITIC CURSIVE NUMBER FOUR;No;0;R;;;;4;N;;;;;\n109C4;MEROITIC CURSIVE NUMBER FIVE;No;0;R;;;;5;N;;;;;\n109C5;MEROITIC CURSIVE NUMBER SIX;No;0;R;;;;6;N;;;;;\n109C6;MEROITIC CURSIVE NUMBER SEVEN;No;0;R;;;;7;N;;;;;\n109C7;MEROITIC CURSIVE NUMBER EIGHT;No;0;R;;;;8;N;;;;;\n109C8;MEROITIC CURSIVE NUMBER NINE;No;0;R;;;;9;N;;;;;\n109C9;MEROITIC CURSIVE NUMBER TEN;No;0;R;;;;10;N;;;;;\n109CA;MEROITIC CURSIVE NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n109CB;MEROITIC CURSIVE NUMBER THIRTY;No;0;R;;;;30;N;;;;;\n109CC;MEROITIC CURSIVE NUMBER FORTY;No;0;R;;;;40;N;;;;;\n109CD;MEROITIC CURSIVE NUMBER FIFTY;No;0;R;;;;50;N;;;;;\n109CE;MEROITIC CURSIVE NUMBER SIXTY;No;0;R;;;;60;N;;;;;\n109CF;MEROITIC CURSIVE NUMBER SEVENTY;No;0;R;;;;70;N;;;;;\n109D2;MEROITIC CURSIVE NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n109D3;MEROITIC CURSIVE NUMBER TWO HUNDRED;No;0;R;;;;200;N;;;;;\n109D4;MEROITIC CURSIVE NUMBER THREE HUNDRED;No;0;R;;;;300;N;;;;;\n109D5;MEROITIC CURSIVE NUMBER FOUR HUNDRED;No;0;R;;;;400;N;;;;;\n109D6;MEROITIC CURSIVE NUMBER FIVE HUNDRED;No;0;R;;;;500;N;;;;;\n109D7;MEROITIC CURSIVE NUMBER SIX HUNDRED;No;0;R;;;;600;N;;;;;\n109D8;MEROITIC CURSIVE NUMBER SEVEN HUNDRED;No;0;R;;;;700;N;;;;;\n109D9;MEROITIC CURSIVE NUMBER EIGHT HUNDRED;No;0;R;;;;800;N;;;;;\n109DA;MEROITIC CURSIVE NUMBER NINE HUNDRED;No;0;R;;;;900;N;;;;;\n109DB;MEROITIC CURSIVE NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;\n109DC;MEROITIC CURSIVE NUMBER TWO THOUSAND;No;0;R;;;;2000;N;;;;;\n109DD;MEROITIC CURSIVE NUMBER THREE THOUSAND;No;0;R;;;;3000;N;;;;;\n109DE;MEROITIC CURSIVE NUMBER FOUR THOUSAND;No;0;R;;;;4000;N;;;;;\n109DF;MEROITIC CURSIVE NUMBER FIVE THOUSAND;No;0;R;;;;5000;N;;;;;\n109E0;MEROITIC CURSIVE NUMBER SIX THOUSAND;No;0;R;;;;6000;N;;;;;\n109E1;MEROITIC CURSIVE NUMBER SEVEN THOUSAND;No;0;R;;;;7000;N;;;;;\n109E2;MEROITIC CURSIVE NUMBER EIGHT THOUSAND;No;0;R;;;;8000;N;;;;;\n109E3;MEROITIC CURSIVE NUMBER NINE THOUSAND;No;0;R;;;;9000;N;;;;;\n109E4;MEROITIC CURSIVE NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;;\n109E5;MEROITIC CURSIVE NUMBER TWENTY THOUSAND;No;0;R;;;;20000;N;;;;;\n109E6;MEROITIC CURSIVE NUMBER THIRTY THOUSAND;No;0;R;;;;30000;N;;;;;\n109E7;MEROITIC CURSIVE NUMBER FORTY THOUSAND;No;0;R;;;;40000;N;;;;;\n109E8;MEROITIC CURSIVE NUMBER FIFTY THOUSAND;No;0;R;;;;50000;N;;;;;\n109E9;MEROITIC CURSIVE NUMBER SIXTY THOUSAND;No;0;R;;;;60000;N;;;;;\n109EA;MEROITIC CURSIVE NUMBER SEVENTY THOUSAND;No;0;R;;;;70000;N;;;;;\n109EB;MEROITIC CURSIVE NUMBER EIGHTY THOUSAND;No;0;R;;;;80000;N;;;;;\n109EC;MEROITIC CURSIVE NUMBER NINETY THOUSAND;No;0;R;;;;90000;N;;;;;\n109ED;MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND;No;0;R;;;;100000;N;;;;;\n109EE;MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND;No;0;R;;;;200000;N;;;;;\n109EF;MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND;No;0;R;;;;300000;N;;;;;\n109F0;MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND;No;0;R;;;;400000;N;;;;;\n109F1;MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND;No;0;R;;;;500000;N;;;;;\n109F2;MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND;No;0;R;;;;600000;N;;;;;\n109F3;MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND;No;0;R;;;;700000;N;;;;;\n109F4;MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND;No;0;R;;;;800000;N;;;;;\n109F5;MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND;No;0;R;;;;900000;N;;;;;\n109F6;MEROITIC CURSIVE FRACTION ONE TWELFTH;No;0;R;;;;1/12;N;;;;;\n109F7;MEROITIC CURSIVE FRACTION TWO TWELFTHS;No;0;R;;;;2/12;N;;;;;\n109F8;MEROITIC CURSIVE FRACTION THREE TWELFTHS;No;0;R;;;;3/12;N;;;;;\n109F9;MEROITIC CURSIVE FRACTION FOUR TWELFTHS;No;0;R;;;;4/12;N;;;;;\n109FA;MEROITIC CURSIVE FRACTION FIVE TWELFTHS;No;0;R;;;;5/12;N;;;;;\n109FB;MEROITIC CURSIVE FRACTION SIX TWELFTHS;No;0;R;;;;6/12;N;;;;;\n109FC;MEROITIC CURSIVE FRACTION SEVEN TWELFTHS;No;0;R;;;;7/12;N;;;;;\n109FD;MEROITIC CURSIVE FRACTION EIGHT TWELFTHS;No;0;R;;;;8/12;N;;;;;\n109FE;MEROITIC CURSIVE FRACTION NINE TWELFTHS;No;0;R;;;;9/12;N;;;;;\n109FF;MEROITIC CURSIVE FRACTION TEN TWELFTHS;No;0;R;;;;10/12;N;;;;;\n10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;;\n10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;\n10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;\n10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;\n10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;;\n10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;;\n10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;;\n10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;;\n10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;;\n10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;;\n10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;;\n10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;;\n10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;;\n10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;;\n10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;;\n10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;;\n10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;;\n10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;;\n10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;;\n10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;;\n10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;;\n10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;;\n10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;;\n10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;;\n10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;;\n10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;;\n10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;;\n10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;;\n10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;;\n10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;;\n10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;;\n10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;;\n10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;;\n10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;;\n10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;;\n10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;;\n10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;;\n10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;;\n10A34;KHAROSHTHI LETTER TTTA;Lo;0;R;;;;;N;;;;;\n10A35;KHAROSHTHI LETTER VHA;Lo;0;R;;;;;N;;;;;\n10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;;\n10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;;\n10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;\n10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;;\n10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;;\n10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;;\n10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;;\n10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;;\n10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;;\n10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;\n10A48;KHAROSHTHI FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;;\n10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;;\n10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;;\n10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;;\n10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;;\n10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;;\n10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;;\n10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;;\n10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;;\n10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;;\n10A60;OLD SOUTH ARABIAN LETTER HE;Lo;0;R;;;;;N;;;;;\n10A61;OLD SOUTH ARABIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n10A62;OLD SOUTH ARABIAN LETTER HETH;Lo;0;R;;;;;N;;;;;\n10A63;OLD SOUTH ARABIAN LETTER MEM;Lo;0;R;;;;;N;;;;;\n10A64;OLD SOUTH ARABIAN LETTER QOPH;Lo;0;R;;;;;N;;;;;\n10A65;OLD SOUTH ARABIAN LETTER WAW;Lo;0;R;;;;;N;;;;;\n10A66;OLD SOUTH ARABIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10A67;OLD SOUTH ARABIAN LETTER RESH;Lo;0;R;;;;;N;;;;;\n10A68;OLD SOUTH ARABIAN LETTER BETH;Lo;0;R;;;;;N;;;;;\n10A69;OLD SOUTH ARABIAN LETTER TAW;Lo;0;R;;;;;N;;;;;\n10A6A;OLD SOUTH ARABIAN LETTER SAT;Lo;0;R;;;;;N;;;;;\n10A6B;OLD SOUTH ARABIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;\n10A6C;OLD SOUTH ARABIAN LETTER NUN;Lo;0;R;;;;;N;;;;;\n10A6D;OLD SOUTH ARABIAN LETTER KHETH;Lo;0;R;;;;;N;;;;;\n10A6E;OLD SOUTH ARABIAN LETTER SADHE;Lo;0;R;;;;;N;;;;;\n10A6F;OLD SOUTH ARABIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n10A70;OLD SOUTH ARABIAN LETTER FE;Lo;0;R;;;;;N;;;;;\n10A71;OLD SOUTH ARABIAN LETTER ALEF;Lo;0;R;;;;;N;;;;;\n10A72;OLD SOUTH ARABIAN LETTER AYN;Lo;0;R;;;;;N;;;;;\n10A73;OLD SOUTH ARABIAN LETTER DHADHE;Lo;0;R;;;;;N;;;;;\n10A74;OLD SOUTH ARABIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n10A75;OLD SOUTH ARABIAN LETTER DALETH;Lo;0;R;;;;;N;;;;;\n10A76;OLD SOUTH ARABIAN LETTER GHAYN;Lo;0;R;;;;;N;;;;;\n10A77;OLD SOUTH ARABIAN LETTER TETH;Lo;0;R;;;;;N;;;;;\n10A78;OLD SOUTH ARABIAN LETTER ZAYN;Lo;0;R;;;;;N;;;;;\n10A79;OLD SOUTH ARABIAN LETTER DHALETH;Lo;0;R;;;;;N;;;;;\n10A7A;OLD SOUTH ARABIAN LETTER YODH;Lo;0;R;;;;;N;;;;;\n10A7B;OLD SOUTH ARABIAN LETTER THAW;Lo;0;R;;;;;N;;;;;\n10A7C;OLD SOUTH ARABIAN LETTER THETH;Lo;0;R;;;;;N;;;;;\n10A7D;OLD SOUTH ARABIAN NUMBER ONE;No;0;R;;;;1;N;;;;;\n10A7E;OLD SOUTH ARABIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;;\n10A7F;OLD SOUTH ARABIAN NUMERIC INDICATOR;Po;0;R;;;;;N;;;;;\n10A80;OLD NORTH ARABIAN LETTER HEH;Lo;0;R;;;;;N;;;;;\n10A81;OLD NORTH ARABIAN LETTER LAM;Lo;0;R;;;;;N;;;;;\n10A82;OLD NORTH ARABIAN LETTER HAH;Lo;0;R;;;;;N;;;;;\n10A83;OLD NORTH ARABIAN LETTER MEEM;Lo;0;R;;;;;N;;;;;\n10A84;OLD NORTH ARABIAN LETTER QAF;Lo;0;R;;;;;N;;;;;\n10A85;OLD NORTH ARABIAN LETTER WAW;Lo;0;R;;;;;N;;;;;\n10A86;OLD NORTH ARABIAN LETTER ES-2;Lo;0;R;;;;;N;;;;;\n10A87;OLD NORTH ARABIAN LETTER REH;Lo;0;R;;;;;N;;;;;\n10A88;OLD NORTH ARABIAN LETTER BEH;Lo;0;R;;;;;N;;;;;\n10A89;OLD NORTH ARABIAN LETTER TEH;Lo;0;R;;;;;N;;;;;\n10A8A;OLD NORTH ARABIAN LETTER ES-1;Lo;0;R;;;;;N;;;;;\n10A8B;OLD NORTH ARABIAN LETTER KAF;Lo;0;R;;;;;N;;;;;\n10A8C;OLD NORTH ARABIAN LETTER NOON;Lo;0;R;;;;;N;;;;;\n10A8D;OLD NORTH ARABIAN LETTER KHAH;Lo;0;R;;;;;N;;;;;\n10A8E;OLD NORTH ARABIAN LETTER SAD;Lo;0;R;;;;;N;;;;;\n10A8F;OLD NORTH ARABIAN LETTER ES-3;Lo;0;R;;;;;N;;;;;\n10A90;OLD NORTH ARABIAN LETTER FEH;Lo;0;R;;;;;N;;;;;\n10A91;OLD NORTH ARABIAN LETTER ALEF;Lo;0;R;;;;;N;;;;;\n10A92;OLD NORTH ARABIAN LETTER AIN;Lo;0;R;;;;;N;;;;;\n10A93;OLD NORTH ARABIAN LETTER DAD;Lo;0;R;;;;;N;;;;;\n10A94;OLD NORTH ARABIAN LETTER GEEM;Lo;0;R;;;;;N;;;;;\n10A95;OLD NORTH ARABIAN LETTER DAL;Lo;0;R;;;;;N;;;;;\n10A96;OLD NORTH ARABIAN LETTER GHAIN;Lo;0;R;;;;;N;;;;;\n10A97;OLD NORTH ARABIAN LETTER TAH;Lo;0;R;;;;;N;;;;;\n10A98;OLD NORTH ARABIAN LETTER ZAIN;Lo;0;R;;;;;N;;;;;\n10A99;OLD NORTH ARABIAN LETTER THAL;Lo;0;R;;;;;N;;;;;\n10A9A;OLD NORTH ARABIAN LETTER YEH;Lo;0;R;;;;;N;;;;;\n10A9B;OLD NORTH ARABIAN LETTER THEH;Lo;0;R;;;;;N;;;;;\n10A9C;OLD NORTH ARABIAN LETTER ZAH;Lo;0;R;;;;;N;;;;;\n10A9D;OLD NORTH ARABIAN NUMBER ONE;No;0;R;;;;1;N;;;;;\n10A9E;OLD NORTH ARABIAN NUMBER TEN;No;0;R;;;;10;N;;;;;\n10A9F;OLD NORTH ARABIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n10AC0;MANICHAEAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;\n10AC1;MANICHAEAN LETTER BETH;Lo;0;R;;;;;N;;;;;\n10AC2;MANICHAEAN LETTER BHETH;Lo;0;R;;;;;N;;;;;\n10AC3;MANICHAEAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n10AC4;MANICHAEAN LETTER GHIMEL;Lo;0;R;;;;;N;;;;;\n10AC5;MANICHAEAN LETTER DALETH;Lo;0;R;;;;;N;;;;;\n10AC6;MANICHAEAN LETTER HE;Lo;0;R;;;;;N;;;;;\n10AC7;MANICHAEAN LETTER WAW;Lo;0;R;;;;;N;;;;;\n10AC8;MANICHAEAN SIGN UD;So;0;R;;;;;N;;;;;\n10AC9;MANICHAEAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;\n10ACA;MANICHAEAN LETTER ZHAYIN;Lo;0;R;;;;;N;;;;;\n10ACB;MANICHAEAN LETTER JAYIN;Lo;0;R;;;;;N;;;;;\n10ACC;MANICHAEAN LETTER JHAYIN;Lo;0;R;;;;;N;;;;;\n10ACD;MANICHAEAN LETTER HETH;Lo;0;R;;;;;N;;;;;\n10ACE;MANICHAEAN LETTER TETH;Lo;0;R;;;;;N;;;;;\n10ACF;MANICHAEAN LETTER YODH;Lo;0;R;;;;;N;;;;;\n10AD0;MANICHAEAN LETTER KAPH;Lo;0;R;;;;;N;;;;;\n10AD1;MANICHAEAN LETTER XAPH;Lo;0;R;;;;;N;;;;;\n10AD2;MANICHAEAN LETTER KHAPH;Lo;0;R;;;;;N;;;;;\n10AD3;MANICHAEAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n10AD4;MANICHAEAN LETTER DHAMEDH;Lo;0;R;;;;;N;;;;;\n10AD5;MANICHAEAN LETTER THAMEDH;Lo;0;R;;;;;N;;;;;\n10AD6;MANICHAEAN LETTER MEM;Lo;0;R;;;;;N;;;;;\n10AD7;MANICHAEAN LETTER NUN;Lo;0;R;;;;;N;;;;;\n10AD8;MANICHAEAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n10AD9;MANICHAEAN LETTER AYIN;Lo;0;R;;;;;N;;;;;\n10ADA;MANICHAEAN LETTER AAYIN;Lo;0;R;;;;;N;;;;;\n10ADB;MANICHAEAN LETTER PE;Lo;0;R;;;;;N;;;;;\n10ADC;MANICHAEAN LETTER FE;Lo;0;R;;;;;N;;;;;\n10ADD;MANICHAEAN LETTER SADHE;Lo;0;R;;;;;N;;;;;\n10ADE;MANICHAEAN LETTER QOPH;Lo;0;R;;;;;N;;;;;\n10ADF;MANICHAEAN LETTER XOPH;Lo;0;R;;;;;N;;;;;\n10AE0;MANICHAEAN LETTER QHOPH;Lo;0;R;;;;;N;;;;;\n10AE1;MANICHAEAN LETTER RESH;Lo;0;R;;;;;N;;;;;\n10AE2;MANICHAEAN LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10AE3;MANICHAEAN LETTER SSHIN;Lo;0;R;;;;;N;;;;;\n10AE4;MANICHAEAN LETTER TAW;Lo;0;R;;;;;N;;;;;\n10AE5;MANICHAEAN ABBREVIATION MARK ABOVE;Mn;230;NSM;;;;;N;;;;;\n10AE6;MANICHAEAN ABBREVIATION MARK BELOW;Mn;220;NSM;;;;;N;;;;;\n10AEB;MANICHAEAN NUMBER ONE;No;0;R;;;;1;N;;;;;\n10AEC;MANICHAEAN NUMBER FIVE;No;0;R;;;;5;N;;;;;\n10AED;MANICHAEAN NUMBER TEN;No;0;R;;;;10;N;;;;;\n10AEE;MANICHAEAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n10AEF;MANICHAEAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n10AF0;MANICHAEAN PUNCTUATION STAR;Po;0;R;;;;;N;;;;;\n10AF1;MANICHAEAN PUNCTUATION FLEURON;Po;0;R;;;;;N;;;;;\n10AF2;MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT;Po;0;R;;;;;N;;;;;\n10AF3;MANICHAEAN PUNCTUATION DOT WITHIN DOT;Po;0;R;;;;;N;;;;;\n10AF4;MANICHAEAN PUNCTUATION DOT;Po;0;R;;;;;N;;;;;\n10AF5;MANICHAEAN PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;;\n10AF6;MANICHAEAN PUNCTUATION LINE FILLER;Po;0;R;;;;;N;;;;;\n10B00;AVESTAN LETTER A;Lo;0;R;;;;;N;;;;;\n10B01;AVESTAN LETTER AA;Lo;0;R;;;;;N;;;;;\n10B02;AVESTAN LETTER AO;Lo;0;R;;;;;N;;;;;\n10B03;AVESTAN LETTER AAO;Lo;0;R;;;;;N;;;;;\n10B04;AVESTAN LETTER AN;Lo;0;R;;;;;N;;;;;\n10B05;AVESTAN LETTER AAN;Lo;0;R;;;;;N;;;;;\n10B06;AVESTAN LETTER AE;Lo;0;R;;;;;N;;;;;\n10B07;AVESTAN LETTER AEE;Lo;0;R;;;;;N;;;;;\n10B08;AVESTAN LETTER E;Lo;0;R;;;;;N;;;;;\n10B09;AVESTAN LETTER EE;Lo;0;R;;;;;N;;;;;\n10B0A;AVESTAN LETTER O;Lo;0;R;;;;;N;;;;;\n10B0B;AVESTAN LETTER OO;Lo;0;R;;;;;N;;;;;\n10B0C;AVESTAN LETTER I;Lo;0;R;;;;;N;;;;;\n10B0D;AVESTAN LETTER II;Lo;0;R;;;;;N;;;;;\n10B0E;AVESTAN LETTER U;Lo;0;R;;;;;N;;;;;\n10B0F;AVESTAN LETTER UU;Lo;0;R;;;;;N;;;;;\n10B10;AVESTAN LETTER KE;Lo;0;R;;;;;N;;;;;\n10B11;AVESTAN LETTER XE;Lo;0;R;;;;;N;;;;;\n10B12;AVESTAN LETTER XYE;Lo;0;R;;;;;N;;;;;\n10B13;AVESTAN LETTER XVE;Lo;0;R;;;;;N;;;;;\n10B14;AVESTAN LETTER GE;Lo;0;R;;;;;N;;;;;\n10B15;AVESTAN LETTER GGE;Lo;0;R;;;;;N;;;;;\n10B16;AVESTAN LETTER GHE;Lo;0;R;;;;;N;;;;;\n10B17;AVESTAN LETTER CE;Lo;0;R;;;;;N;;;;;\n10B18;AVESTAN LETTER JE;Lo;0;R;;;;;N;;;;;\n10B19;AVESTAN LETTER TE;Lo;0;R;;;;;N;;;;;\n10B1A;AVESTAN LETTER THE;Lo;0;R;;;;;N;;;;;\n10B1B;AVESTAN LETTER DE;Lo;0;R;;;;;N;;;;;\n10B1C;AVESTAN LETTER DHE;Lo;0;R;;;;;N;;;;;\n10B1D;AVESTAN LETTER TTE;Lo;0;R;;;;;N;;;;;\n10B1E;AVESTAN LETTER PE;Lo;0;R;;;;;N;;;;;\n10B1F;AVESTAN LETTER FE;Lo;0;R;;;;;N;;;;;\n10B20;AVESTAN LETTER BE;Lo;0;R;;;;;N;;;;;\n10B21;AVESTAN LETTER BHE;Lo;0;R;;;;;N;;;;;\n10B22;AVESTAN LETTER NGE;Lo;0;R;;;;;N;;;;;\n10B23;AVESTAN LETTER NGYE;Lo;0;R;;;;;N;;;;;\n10B24;AVESTAN LETTER NGVE;Lo;0;R;;;;;N;;;;;\n10B25;AVESTAN LETTER NE;Lo;0;R;;;;;N;;;;;\n10B26;AVESTAN LETTER NYE;Lo;0;R;;;;;N;;;;;\n10B27;AVESTAN LETTER NNE;Lo;0;R;;;;;N;;;;;\n10B28;AVESTAN LETTER ME;Lo;0;R;;;;;N;;;;;\n10B29;AVESTAN LETTER HME;Lo;0;R;;;;;N;;;;;\n10B2A;AVESTAN LETTER YYE;Lo;0;R;;;;;N;;;;;\n10B2B;AVESTAN LETTER YE;Lo;0;R;;;;;N;;;;;\n10B2C;AVESTAN LETTER VE;Lo;0;R;;;;;N;;;;;\n10B2D;AVESTAN LETTER RE;Lo;0;R;;;;;N;;;;;\n10B2E;AVESTAN LETTER LE;Lo;0;R;;;;;N;;;;;\n10B2F;AVESTAN LETTER SE;Lo;0;R;;;;;N;;;;;\n10B30;AVESTAN LETTER ZE;Lo;0;R;;;;;N;;;;;\n10B31;AVESTAN LETTER SHE;Lo;0;R;;;;;N;;;;;\n10B32;AVESTAN LETTER ZHE;Lo;0;R;;;;;N;;;;;\n10B33;AVESTAN LETTER SHYE;Lo;0;R;;;;;N;;;;;\n10B34;AVESTAN LETTER SSHE;Lo;0;R;;;;;N;;;;;\n10B35;AVESTAN LETTER HE;Lo;0;R;;;;;N;;;;;\n10B39;AVESTAN ABBREVIATION MARK;Po;0;ON;;;;;N;;;;;\n10B3A;TINY TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;\n10B3B;SMALL TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;\n10B3C;LARGE TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;\n10B3D;LARGE ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;;\n10B3E;LARGE TWO RINGS OVER ONE RING PUNCTUATION;Po;0;ON;;;;;N;;;;;\n10B3F;LARGE ONE RING OVER TWO RINGS PUNCTUATION;Po;0;ON;;;;;N;;;;;\n10B40;INSCRIPTIONAL PARTHIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;\n10B41;INSCRIPTIONAL PARTHIAN LETTER BETH;Lo;0;R;;;;;N;;;;;\n10B42;INSCRIPTIONAL PARTHIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n10B43;INSCRIPTIONAL PARTHIAN LETTER DALETH;Lo;0;R;;;;;N;;;;;\n10B44;INSCRIPTIONAL PARTHIAN LETTER HE;Lo;0;R;;;;;N;;;;;\n10B45;INSCRIPTIONAL PARTHIAN LETTER WAW;Lo;0;R;;;;;N;;;;;\n10B46;INSCRIPTIONAL PARTHIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;\n10B47;INSCRIPTIONAL PARTHIAN LETTER HETH;Lo;0;R;;;;;N;;;;;\n10B48;INSCRIPTIONAL PARTHIAN LETTER TETH;Lo;0;R;;;;;N;;;;;\n10B49;INSCRIPTIONAL PARTHIAN LETTER YODH;Lo;0;R;;;;;N;;;;;\n10B4A;INSCRIPTIONAL PARTHIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;\n10B4B;INSCRIPTIONAL PARTHIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n10B4C;INSCRIPTIONAL PARTHIAN LETTER MEM;Lo;0;R;;;;;N;;;;;\n10B4D;INSCRIPTIONAL PARTHIAN LETTER NUN;Lo;0;R;;;;;N;;;;;\n10B4E;INSCRIPTIONAL PARTHIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n10B4F;INSCRIPTIONAL PARTHIAN LETTER AYIN;Lo;0;R;;;;;N;;;;;\n10B50;INSCRIPTIONAL PARTHIAN LETTER PE;Lo;0;R;;;;;N;;;;;\n10B51;INSCRIPTIONAL PARTHIAN LETTER SADHE;Lo;0;R;;;;;N;;;;;\n10B52;INSCRIPTIONAL PARTHIAN LETTER QOPH;Lo;0;R;;;;;N;;;;;\n10B53;INSCRIPTIONAL PARTHIAN LETTER RESH;Lo;0;R;;;;;N;;;;;\n10B54;INSCRIPTIONAL PARTHIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10B55;INSCRIPTIONAL PARTHIAN LETTER TAW;Lo;0;R;;;;;N;;;;;\n10B58;INSCRIPTIONAL PARTHIAN NUMBER ONE;No;0;R;;;;1;N;;;;;\n10B59;INSCRIPTIONAL PARTHIAN NUMBER TWO;No;0;R;;;;2;N;;;;;\n10B5A;INSCRIPTIONAL PARTHIAN NUMBER THREE;No;0;R;;;;3;N;;;;;\n10B5B;INSCRIPTIONAL PARTHIAN NUMBER FOUR;No;0;R;;;;4;N;;;;;\n10B5C;INSCRIPTIONAL PARTHIAN NUMBER TEN;No;0;R;;;;10;N;;;;;\n10B5D;INSCRIPTIONAL PARTHIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n10B5E;INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n10B5F;INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;\n10B60;INSCRIPTIONAL PAHLAVI LETTER ALEPH;Lo;0;R;;;;;N;;;;;\n10B61;INSCRIPTIONAL PAHLAVI LETTER BETH;Lo;0;R;;;;;N;;;;;\n10B62;INSCRIPTIONAL PAHLAVI LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n10B63;INSCRIPTIONAL PAHLAVI LETTER DALETH;Lo;0;R;;;;;N;;;;;\n10B64;INSCRIPTIONAL PAHLAVI LETTER HE;Lo;0;R;;;;;N;;;;;\n10B65;INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH;Lo;0;R;;;;;N;;;;;\n10B66;INSCRIPTIONAL PAHLAVI LETTER ZAYIN;Lo;0;R;;;;;N;;;;;\n10B67;INSCRIPTIONAL PAHLAVI LETTER HETH;Lo;0;R;;;;;N;;;;;\n10B68;INSCRIPTIONAL PAHLAVI LETTER TETH;Lo;0;R;;;;;N;;;;;\n10B69;INSCRIPTIONAL PAHLAVI LETTER YODH;Lo;0;R;;;;;N;;;;;\n10B6A;INSCRIPTIONAL PAHLAVI LETTER KAPH;Lo;0;R;;;;;N;;;;;\n10B6B;INSCRIPTIONAL PAHLAVI LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n10B6C;INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH;Lo;0;R;;;;;N;;;;;\n10B6D;INSCRIPTIONAL PAHLAVI LETTER NUN;Lo;0;R;;;;;N;;;;;\n10B6E;INSCRIPTIONAL PAHLAVI LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n10B6F;INSCRIPTIONAL PAHLAVI LETTER PE;Lo;0;R;;;;;N;;;;;\n10B70;INSCRIPTIONAL PAHLAVI LETTER SADHE;Lo;0;R;;;;;N;;;;;\n10B71;INSCRIPTIONAL PAHLAVI LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10B72;INSCRIPTIONAL PAHLAVI LETTER TAW;Lo;0;R;;;;;N;;;;;\n10B78;INSCRIPTIONAL PAHLAVI NUMBER ONE;No;0;R;;;;1;N;;;;;\n10B79;INSCRIPTIONAL PAHLAVI NUMBER TWO;No;0;R;;;;2;N;;;;;\n10B7A;INSCRIPTIONAL PAHLAVI NUMBER THREE;No;0;R;;;;3;N;;;;;\n10B7B;INSCRIPTIONAL PAHLAVI NUMBER FOUR;No;0;R;;;;4;N;;;;;\n10B7C;INSCRIPTIONAL PAHLAVI NUMBER TEN;No;0;R;;;;10;N;;;;;\n10B7D;INSCRIPTIONAL PAHLAVI NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n10B7E;INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n10B7F;INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;\n10B80;PSALTER PAHLAVI LETTER ALEPH;Lo;0;R;;;;;N;;;;;\n10B81;PSALTER PAHLAVI LETTER BETH;Lo;0;R;;;;;N;;;;;\n10B82;PSALTER PAHLAVI LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n10B83;PSALTER PAHLAVI LETTER DALETH;Lo;0;R;;;;;N;;;;;\n10B84;PSALTER PAHLAVI LETTER HE;Lo;0;R;;;;;N;;;;;\n10B85;PSALTER PAHLAVI LETTER WAW-AYIN-RESH;Lo;0;R;;;;;N;;;;;\n10B86;PSALTER PAHLAVI LETTER ZAYIN;Lo;0;R;;;;;N;;;;;\n10B87;PSALTER PAHLAVI LETTER HETH;Lo;0;R;;;;;N;;;;;\n10B88;PSALTER PAHLAVI LETTER YODH;Lo;0;R;;;;;N;;;;;\n10B89;PSALTER PAHLAVI LETTER KAPH;Lo;0;R;;;;;N;;;;;\n10B8A;PSALTER PAHLAVI LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n10B8B;PSALTER PAHLAVI LETTER MEM-QOPH;Lo;0;R;;;;;N;;;;;\n10B8C;PSALTER PAHLAVI LETTER NUN;Lo;0;R;;;;;N;;;;;\n10B8D;PSALTER PAHLAVI LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n10B8E;PSALTER PAHLAVI LETTER PE;Lo;0;R;;;;;N;;;;;\n10B8F;PSALTER PAHLAVI LETTER SADHE;Lo;0;R;;;;;N;;;;;\n10B90;PSALTER PAHLAVI LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10B91;PSALTER PAHLAVI LETTER TAW;Lo;0;R;;;;;N;;;;;\n10B99;PSALTER PAHLAVI SECTION MARK;Po;0;R;;;;;N;;;;;\n10B9A;PSALTER PAHLAVI TURNED SECTION MARK;Po;0;R;;;;;N;;;;;\n10B9B;PSALTER PAHLAVI FOUR DOTS WITH CROSS;Po;0;R;;;;;N;;;;;\n10B9C;PSALTER PAHLAVI FOUR DOTS WITH DOT;Po;0;R;;;;;N;;;;;\n10BA9;PSALTER PAHLAVI NUMBER ONE;No;0;R;;;;1;N;;;;;\n10BAA;PSALTER PAHLAVI NUMBER TWO;No;0;R;;;;2;N;;;;;\n10BAB;PSALTER PAHLAVI NUMBER THREE;No;0;R;;;;3;N;;;;;\n10BAC;PSALTER PAHLAVI NUMBER FOUR;No;0;R;;;;4;N;;;;;\n10BAD;PSALTER PAHLAVI NUMBER TEN;No;0;R;;;;10;N;;;;;\n10BAE;PSALTER PAHLAVI NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n10BAF;PSALTER PAHLAVI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n10C00;OLD TURKIC LETTER ORKHON A;Lo;0;R;;;;;N;;;;;\n10C01;OLD TURKIC LETTER YENISEI A;Lo;0;R;;;;;N;;;;;\n10C02;OLD TURKIC LETTER YENISEI AE;Lo;0;R;;;;;N;;;;;\n10C03;OLD TURKIC LETTER ORKHON I;Lo;0;R;;;;;N;;;;;\n10C04;OLD TURKIC LETTER YENISEI I;Lo;0;R;;;;;N;;;;;\n10C05;OLD TURKIC LETTER YENISEI E;Lo;0;R;;;;;N;;;;;\n10C06;OLD TURKIC LETTER ORKHON O;Lo;0;R;;;;;N;;;;;\n10C07;OLD TURKIC LETTER ORKHON OE;Lo;0;R;;;;;N;;;;;\n10C08;OLD TURKIC LETTER YENISEI OE;Lo;0;R;;;;;N;;;;;\n10C09;OLD TURKIC LETTER ORKHON AB;Lo;0;R;;;;;N;;;;;\n10C0A;OLD TURKIC LETTER YENISEI AB;Lo;0;R;;;;;N;;;;;\n10C0B;OLD TURKIC LETTER ORKHON AEB;Lo;0;R;;;;;N;;;;;\n10C0C;OLD TURKIC LETTER YENISEI AEB;Lo;0;R;;;;;N;;;;;\n10C0D;OLD TURKIC LETTER ORKHON AG;Lo;0;R;;;;;N;;;;;\n10C0E;OLD TURKIC LETTER YENISEI AG;Lo;0;R;;;;;N;;;;;\n10C0F;OLD TURKIC LETTER ORKHON AEG;Lo;0;R;;;;;N;;;;;\n10C10;OLD TURKIC LETTER YENISEI AEG;Lo;0;R;;;;;N;;;;;\n10C11;OLD TURKIC LETTER ORKHON AD;Lo;0;R;;;;;N;;;;;\n10C12;OLD TURKIC LETTER YENISEI AD;Lo;0;R;;;;;N;;;;;\n10C13;OLD TURKIC LETTER ORKHON AED;Lo;0;R;;;;;N;;;;;\n10C14;OLD TURKIC LETTER ORKHON EZ;Lo;0;R;;;;;N;;;;;\n10C15;OLD TURKIC LETTER YENISEI EZ;Lo;0;R;;;;;N;;;;;\n10C16;OLD TURKIC LETTER ORKHON AY;Lo;0;R;;;;;N;;;;;\n10C17;OLD TURKIC LETTER YENISEI AY;Lo;0;R;;;;;N;;;;;\n10C18;OLD TURKIC LETTER ORKHON AEY;Lo;0;R;;;;;N;;;;;\n10C19;OLD TURKIC LETTER YENISEI AEY;Lo;0;R;;;;;N;;;;;\n10C1A;OLD TURKIC LETTER ORKHON AEK;Lo;0;R;;;;;N;;;;;\n10C1B;OLD TURKIC LETTER YENISEI AEK;Lo;0;R;;;;;N;;;;;\n10C1C;OLD TURKIC LETTER ORKHON OEK;Lo;0;R;;;;;N;;;;;\n10C1D;OLD TURKIC LETTER YENISEI OEK;Lo;0;R;;;;;N;;;;;\n10C1E;OLD TURKIC LETTER ORKHON AL;Lo;0;R;;;;;N;;;;;\n10C1F;OLD TURKIC LETTER YENISEI AL;Lo;0;R;;;;;N;;;;;\n10C20;OLD TURKIC LETTER ORKHON AEL;Lo;0;R;;;;;N;;;;;\n10C21;OLD TURKIC LETTER ORKHON ELT;Lo;0;R;;;;;N;;;;;\n10C22;OLD TURKIC LETTER ORKHON EM;Lo;0;R;;;;;N;;;;;\n10C23;OLD TURKIC LETTER ORKHON AN;Lo;0;R;;;;;N;;;;;\n10C24;OLD TURKIC LETTER ORKHON AEN;Lo;0;R;;;;;N;;;;;\n10C25;OLD TURKIC LETTER YENISEI AEN;Lo;0;R;;;;;N;;;;;\n10C26;OLD TURKIC LETTER ORKHON ENT;Lo;0;R;;;;;N;;;;;\n10C27;OLD TURKIC LETTER YENISEI ENT;Lo;0;R;;;;;N;;;;;\n10C28;OLD TURKIC LETTER ORKHON ENC;Lo;0;R;;;;;N;;;;;\n10C29;OLD TURKIC LETTER YENISEI ENC;Lo;0;R;;;;;N;;;;;\n10C2A;OLD TURKIC LETTER ORKHON ENY;Lo;0;R;;;;;N;;;;;\n10C2B;OLD TURKIC LETTER YENISEI ENY;Lo;0;R;;;;;N;;;;;\n10C2C;OLD TURKIC LETTER YENISEI ANG;Lo;0;R;;;;;N;;;;;\n10C2D;OLD TURKIC LETTER ORKHON ENG;Lo;0;R;;;;;N;;;;;\n10C2E;OLD TURKIC LETTER YENISEI AENG;Lo;0;R;;;;;N;;;;;\n10C2F;OLD TURKIC LETTER ORKHON EP;Lo;0;R;;;;;N;;;;;\n10C30;OLD TURKIC LETTER ORKHON OP;Lo;0;R;;;;;N;;;;;\n10C31;OLD TURKIC LETTER ORKHON IC;Lo;0;R;;;;;N;;;;;\n10C32;OLD TURKIC LETTER ORKHON EC;Lo;0;R;;;;;N;;;;;\n10C33;OLD TURKIC LETTER YENISEI EC;Lo;0;R;;;;;N;;;;;\n10C34;OLD TURKIC LETTER ORKHON AQ;Lo;0;R;;;;;N;;;;;\n10C35;OLD TURKIC LETTER YENISEI AQ;Lo;0;R;;;;;N;;;;;\n10C36;OLD TURKIC LETTER ORKHON IQ;Lo;0;R;;;;;N;;;;;\n10C37;OLD TURKIC LETTER YENISEI IQ;Lo;0;R;;;;;N;;;;;\n10C38;OLD TURKIC LETTER ORKHON OQ;Lo;0;R;;;;;N;;;;;\n10C39;OLD TURKIC LETTER YENISEI OQ;Lo;0;R;;;;;N;;;;;\n10C3A;OLD TURKIC LETTER ORKHON AR;Lo;0;R;;;;;N;;;;;\n10C3B;OLD TURKIC LETTER YENISEI AR;Lo;0;R;;;;;N;;;;;\n10C3C;OLD TURKIC LETTER ORKHON AER;Lo;0;R;;;;;N;;;;;\n10C3D;OLD TURKIC LETTER ORKHON AS;Lo;0;R;;;;;N;;;;;\n10C3E;OLD TURKIC LETTER ORKHON AES;Lo;0;R;;;;;N;;;;;\n10C3F;OLD TURKIC LETTER ORKHON ASH;Lo;0;R;;;;;N;;;;;\n10C40;OLD TURKIC LETTER YENISEI ASH;Lo;0;R;;;;;N;;;;;\n10C41;OLD TURKIC LETTER ORKHON ESH;Lo;0;R;;;;;N;;;;;\n10C42;OLD TURKIC LETTER YENISEI ESH;Lo;0;R;;;;;N;;;;;\n10C43;OLD TURKIC LETTER ORKHON AT;Lo;0;R;;;;;N;;;;;\n10C44;OLD TURKIC LETTER YENISEI AT;Lo;0;R;;;;;N;;;;;\n10C45;OLD TURKIC LETTER ORKHON AET;Lo;0;R;;;;;N;;;;;\n10C46;OLD TURKIC LETTER YENISEI AET;Lo;0;R;;;;;N;;;;;\n10C47;OLD TURKIC LETTER ORKHON OT;Lo;0;R;;;;;N;;;;;\n10C48;OLD TURKIC LETTER ORKHON BASH;Lo;0;R;;;;;N;;;;;\n10C80;OLD HUNGARIAN CAPITAL LETTER A;Lu;0;R;;;;;N;;;;10CC0;\n10C81;OLD HUNGARIAN CAPITAL LETTER AA;Lu;0;R;;;;;N;;;;10CC1;\n10C82;OLD HUNGARIAN CAPITAL LETTER EB;Lu;0;R;;;;;N;;;;10CC2;\n10C83;OLD HUNGARIAN CAPITAL LETTER AMB;Lu;0;R;;;;;N;;;;10CC3;\n10C84;OLD HUNGARIAN CAPITAL LETTER EC;Lu;0;R;;;;;N;;;;10CC4;\n10C85;OLD HUNGARIAN CAPITAL LETTER ENC;Lu;0;R;;;;;N;;;;10CC5;\n10C86;OLD HUNGARIAN CAPITAL LETTER ECS;Lu;0;R;;;;;N;;;;10CC6;\n10C87;OLD HUNGARIAN CAPITAL LETTER ED;Lu;0;R;;;;;N;;;;10CC7;\n10C88;OLD HUNGARIAN CAPITAL LETTER AND;Lu;0;R;;;;;N;;;;10CC8;\n10C89;OLD HUNGARIAN CAPITAL LETTER E;Lu;0;R;;;;;N;;;;10CC9;\n10C8A;OLD HUNGARIAN CAPITAL LETTER CLOSE E;Lu;0;R;;;;;N;;;;10CCA;\n10C8B;OLD HUNGARIAN CAPITAL LETTER EE;Lu;0;R;;;;;N;;;;10CCB;\n10C8C;OLD HUNGARIAN CAPITAL LETTER EF;Lu;0;R;;;;;N;;;;10CCC;\n10C8D;OLD HUNGARIAN CAPITAL LETTER EG;Lu;0;R;;;;;N;;;;10CCD;\n10C8E;OLD HUNGARIAN CAPITAL LETTER EGY;Lu;0;R;;;;;N;;;;10CCE;\n10C8F;OLD HUNGARIAN CAPITAL LETTER EH;Lu;0;R;;;;;N;;;;10CCF;\n10C90;OLD HUNGARIAN CAPITAL LETTER I;Lu;0;R;;;;;N;;;;10CD0;\n10C91;OLD HUNGARIAN CAPITAL LETTER II;Lu;0;R;;;;;N;;;;10CD1;\n10C92;OLD HUNGARIAN CAPITAL LETTER EJ;Lu;0;R;;;;;N;;;;10CD2;\n10C93;OLD HUNGARIAN CAPITAL LETTER EK;Lu;0;R;;;;;N;;;;10CD3;\n10C94;OLD HUNGARIAN CAPITAL LETTER AK;Lu;0;R;;;;;N;;;;10CD4;\n10C95;OLD HUNGARIAN CAPITAL LETTER UNK;Lu;0;R;;;;;N;;;;10CD5;\n10C96;OLD HUNGARIAN CAPITAL LETTER EL;Lu;0;R;;;;;N;;;;10CD6;\n10C97;OLD HUNGARIAN CAPITAL LETTER ELY;Lu;0;R;;;;;N;;;;10CD7;\n10C98;OLD HUNGARIAN CAPITAL LETTER EM;Lu;0;R;;;;;N;;;;10CD8;\n10C99;OLD HUNGARIAN CAPITAL LETTER EN;Lu;0;R;;;;;N;;;;10CD9;\n10C9A;OLD HUNGARIAN CAPITAL LETTER ENY;Lu;0;R;;;;;N;;;;10CDA;\n10C9B;OLD HUNGARIAN CAPITAL LETTER O;Lu;0;R;;;;;N;;;;10CDB;\n10C9C;OLD HUNGARIAN CAPITAL LETTER OO;Lu;0;R;;;;;N;;;;10CDC;\n10C9D;OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE;Lu;0;R;;;;;N;;;;10CDD;\n10C9E;OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE;Lu;0;R;;;;;N;;;;10CDE;\n10C9F;OLD HUNGARIAN CAPITAL LETTER OEE;Lu;0;R;;;;;N;;;;10CDF;\n10CA0;OLD HUNGARIAN CAPITAL LETTER EP;Lu;0;R;;;;;N;;;;10CE0;\n10CA1;OLD HUNGARIAN CAPITAL LETTER EMP;Lu;0;R;;;;;N;;;;10CE1;\n10CA2;OLD HUNGARIAN CAPITAL LETTER ER;Lu;0;R;;;;;N;;;;10CE2;\n10CA3;OLD HUNGARIAN CAPITAL LETTER SHORT ER;Lu;0;R;;;;;N;;;;10CE3;\n10CA4;OLD HUNGARIAN CAPITAL LETTER ES;Lu;0;R;;;;;N;;;;10CE4;\n10CA5;OLD HUNGARIAN CAPITAL LETTER ESZ;Lu;0;R;;;;;N;;;;10CE5;\n10CA6;OLD HUNGARIAN CAPITAL LETTER ET;Lu;0;R;;;;;N;;;;10CE6;\n10CA7;OLD HUNGARIAN CAPITAL LETTER ENT;Lu;0;R;;;;;N;;;;10CE7;\n10CA8;OLD HUNGARIAN CAPITAL LETTER ETY;Lu;0;R;;;;;N;;;;10CE8;\n10CA9;OLD HUNGARIAN CAPITAL LETTER ECH;Lu;0;R;;;;;N;;;;10CE9;\n10CAA;OLD HUNGARIAN CAPITAL LETTER U;Lu;0;R;;;;;N;;;;10CEA;\n10CAB;OLD HUNGARIAN CAPITAL LETTER UU;Lu;0;R;;;;;N;;;;10CEB;\n10CAC;OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE;Lu;0;R;;;;;N;;;;10CEC;\n10CAD;OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE;Lu;0;R;;;;;N;;;;10CED;\n10CAE;OLD HUNGARIAN CAPITAL LETTER EV;Lu;0;R;;;;;N;;;;10CEE;\n10CAF;OLD HUNGARIAN CAPITAL LETTER EZ;Lu;0;R;;;;;N;;;;10CEF;\n10CB0;OLD HUNGARIAN CAPITAL LETTER EZS;Lu;0;R;;;;;N;;;;10CF0;\n10CB1;OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN;Lu;0;R;;;;;N;;;;10CF1;\n10CB2;OLD HUNGARIAN CAPITAL LETTER US;Lu;0;R;;;;;N;;;;10CF2;\n10CC0;OLD HUNGARIAN SMALL LETTER A;Ll;0;R;;;;;N;;;10C80;;10C80\n10CC1;OLD HUNGARIAN SMALL LETTER AA;Ll;0;R;;;;;N;;;10C81;;10C81\n10CC2;OLD HUNGARIAN SMALL LETTER EB;Ll;0;R;;;;;N;;;10C82;;10C82\n10CC3;OLD HUNGARIAN SMALL LETTER AMB;Ll;0;R;;;;;N;;;10C83;;10C83\n10CC4;OLD HUNGARIAN SMALL LETTER EC;Ll;0;R;;;;;N;;;10C84;;10C84\n10CC5;OLD HUNGARIAN SMALL LETTER ENC;Ll;0;R;;;;;N;;;10C85;;10C85\n10CC6;OLD HUNGARIAN SMALL LETTER ECS;Ll;0;R;;;;;N;;;10C86;;10C86\n10CC7;OLD HUNGARIAN SMALL LETTER ED;Ll;0;R;;;;;N;;;10C87;;10C87\n10CC8;OLD HUNGARIAN SMALL LETTER AND;Ll;0;R;;;;;N;;;10C88;;10C88\n10CC9;OLD HUNGARIAN SMALL LETTER E;Ll;0;R;;;;;N;;;10C89;;10C89\n10CCA;OLD HUNGARIAN SMALL LETTER CLOSE E;Ll;0;R;;;;;N;;;10C8A;;10C8A\n10CCB;OLD HUNGARIAN SMALL LETTER EE;Ll;0;R;;;;;N;;;10C8B;;10C8B\n10CCC;OLD HUNGARIAN SMALL LETTER EF;Ll;0;R;;;;;N;;;10C8C;;10C8C\n10CCD;OLD HUNGARIAN SMALL LETTER EG;Ll;0;R;;;;;N;;;10C8D;;10C8D\n10CCE;OLD HUNGARIAN SMALL LETTER EGY;Ll;0;R;;;;;N;;;10C8E;;10C8E\n10CCF;OLD HUNGARIAN SMALL LETTER EH;Ll;0;R;;;;;N;;;10C8F;;10C8F\n10CD0;OLD HUNGARIAN SMALL LETTER I;Ll;0;R;;;;;N;;;10C90;;10C90\n10CD1;OLD HUNGARIAN SMALL LETTER II;Ll;0;R;;;;;N;;;10C91;;10C91\n10CD2;OLD HUNGARIAN SMALL LETTER EJ;Ll;0;R;;;;;N;;;10C92;;10C92\n10CD3;OLD HUNGARIAN SMALL LETTER EK;Ll;0;R;;;;;N;;;10C93;;10C93\n10CD4;OLD HUNGARIAN SMALL LETTER AK;Ll;0;R;;;;;N;;;10C94;;10C94\n10CD5;OLD HUNGARIAN SMALL LETTER UNK;Ll;0;R;;;;;N;;;10C95;;10C95\n10CD6;OLD HUNGARIAN SMALL LETTER EL;Ll;0;R;;;;;N;;;10C96;;10C96\n10CD7;OLD HUNGARIAN SMALL LETTER ELY;Ll;0;R;;;;;N;;;10C97;;10C97\n10CD8;OLD HUNGARIAN SMALL LETTER EM;Ll;0;R;;;;;N;;;10C98;;10C98\n10CD9;OLD HUNGARIAN SMALL LETTER EN;Ll;0;R;;;;;N;;;10C99;;10C99\n10CDA;OLD HUNGARIAN SMALL LETTER ENY;Ll;0;R;;;;;N;;;10C9A;;10C9A\n10CDB;OLD HUNGARIAN SMALL LETTER O;Ll;0;R;;;;;N;;;10C9B;;10C9B\n10CDC;OLD HUNGARIAN SMALL LETTER OO;Ll;0;R;;;;;N;;;10C9C;;10C9C\n10CDD;OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE;Ll;0;R;;;;;N;;;10C9D;;10C9D\n10CDE;OLD HUNGARIAN SMALL LETTER RUDIMENTA OE;Ll;0;R;;;;;N;;;10C9E;;10C9E\n10CDF;OLD HUNGARIAN SMALL LETTER OEE;Ll;0;R;;;;;N;;;10C9F;;10C9F\n10CE0;OLD HUNGARIAN SMALL LETTER EP;Ll;0;R;;;;;N;;;10CA0;;10CA0\n10CE1;OLD HUNGARIAN SMALL LETTER EMP;Ll;0;R;;;;;N;;;10CA1;;10CA1\n10CE2;OLD HUNGARIAN SMALL LETTER ER;Ll;0;R;;;;;N;;;10CA2;;10CA2\n10CE3;OLD HUNGARIAN SMALL LETTER SHORT ER;Ll;0;R;;;;;N;;;10CA3;;10CA3\n10CE4;OLD HUNGARIAN SMALL LETTER ES;Ll;0;R;;;;;N;;;10CA4;;10CA4\n10CE5;OLD HUNGARIAN SMALL LETTER ESZ;Ll;0;R;;;;;N;;;10CA5;;10CA5\n10CE6;OLD HUNGARIAN SMALL LETTER ET;Ll;0;R;;;;;N;;;10CA6;;10CA6\n10CE7;OLD HUNGARIAN SMALL LETTER ENT;Ll;0;R;;;;;N;;;10CA7;;10CA7\n10CE8;OLD HUNGARIAN SMALL LETTER ETY;Ll;0;R;;;;;N;;;10CA8;;10CA8\n10CE9;OLD HUNGARIAN SMALL LETTER ECH;Ll;0;R;;;;;N;;;10CA9;;10CA9\n10CEA;OLD HUNGARIAN SMALL LETTER U;Ll;0;R;;;;;N;;;10CAA;;10CAA\n10CEB;OLD HUNGARIAN SMALL LETTER UU;Ll;0;R;;;;;N;;;10CAB;;10CAB\n10CEC;OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE;Ll;0;R;;;;;N;;;10CAC;;10CAC\n10CED;OLD HUNGARIAN SMALL LETTER RUDIMENTA UE;Ll;0;R;;;;;N;;;10CAD;;10CAD\n10CEE;OLD HUNGARIAN SMALL LETTER EV;Ll;0;R;;;;;N;;;10CAE;;10CAE\n10CEF;OLD HUNGARIAN SMALL LETTER EZ;Ll;0;R;;;;;N;;;10CAF;;10CAF\n10CF0;OLD HUNGARIAN SMALL LETTER EZS;Ll;0;R;;;;;N;;;10CB0;;10CB0\n10CF1;OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN;Ll;0;R;;;;;N;;;10CB1;;10CB1\n10CF2;OLD HUNGARIAN SMALL LETTER US;Ll;0;R;;;;;N;;;10CB2;;10CB2\n10CFA;OLD HUNGARIAN NUMBER ONE;No;0;R;;;;1;N;;;;;\n10CFB;OLD HUNGARIAN NUMBER FIVE;No;0;R;;;;5;N;;;;;\n10CFC;OLD HUNGARIAN NUMBER TEN;No;0;R;;;;10;N;;;;;\n10CFD;OLD HUNGARIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;;\n10CFE;OLD HUNGARIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n10CFF;OLD HUNGARIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;\n10D00;HANIFI ROHINGYA LETTER A;Lo;0;AL;;;;;N;;;;;\n10D01;HANIFI ROHINGYA LETTER BA;Lo;0;AL;;;;;N;;;;;\n10D02;HANIFI ROHINGYA LETTER PA;Lo;0;AL;;;;;N;;;;;\n10D03;HANIFI ROHINGYA LETTER TA;Lo;0;AL;;;;;N;;;;;\n10D04;HANIFI ROHINGYA LETTER TTA;Lo;0;AL;;;;;N;;;;;\n10D05;HANIFI ROHINGYA LETTER JA;Lo;0;AL;;;;;N;;;;;\n10D06;HANIFI ROHINGYA LETTER CA;Lo;0;AL;;;;;N;;;;;\n10D07;HANIFI ROHINGYA LETTER HA;Lo;0;AL;;;;;N;;;;;\n10D08;HANIFI ROHINGYA LETTER KHA;Lo;0;AL;;;;;N;;;;;\n10D09;HANIFI ROHINGYA LETTER FA;Lo;0;AL;;;;;N;;;;;\n10D0A;HANIFI ROHINGYA LETTER DA;Lo;0;AL;;;;;N;;;;;\n10D0B;HANIFI ROHINGYA LETTER DDA;Lo;0;AL;;;;;N;;;;;\n10D0C;HANIFI ROHINGYA LETTER RA;Lo;0;AL;;;;;N;;;;;\n10D0D;HANIFI ROHINGYA LETTER RRA;Lo;0;AL;;;;;N;;;;;\n10D0E;HANIFI ROHINGYA LETTER ZA;Lo;0;AL;;;;;N;;;;;\n10D0F;HANIFI ROHINGYA LETTER SA;Lo;0;AL;;;;;N;;;;;\n10D10;HANIFI ROHINGYA LETTER SHA;Lo;0;AL;;;;;N;;;;;\n10D11;HANIFI ROHINGYA LETTER KA;Lo;0;AL;;;;;N;;;;;\n10D12;HANIFI ROHINGYA LETTER GA;Lo;0;AL;;;;;N;;;;;\n10D13;HANIFI ROHINGYA LETTER LA;Lo;0;AL;;;;;N;;;;;\n10D14;HANIFI ROHINGYA LETTER MA;Lo;0;AL;;;;;N;;;;;\n10D15;HANIFI ROHINGYA LETTER NA;Lo;0;AL;;;;;N;;;;;\n10D16;HANIFI ROHINGYA LETTER WA;Lo;0;AL;;;;;N;;;;;\n10D17;HANIFI ROHINGYA LETTER KINNA WA;Lo;0;AL;;;;;N;;;;;\n10D18;HANIFI ROHINGYA LETTER YA;Lo;0;AL;;;;;N;;;;;\n10D19;HANIFI ROHINGYA LETTER KINNA YA;Lo;0;AL;;;;;N;;;;;\n10D1A;HANIFI ROHINGYA LETTER NGA;Lo;0;AL;;;;;N;;;;;\n10D1B;HANIFI ROHINGYA LETTER NYA;Lo;0;AL;;;;;N;;;;;\n10D1C;HANIFI ROHINGYA LETTER VA;Lo;0;AL;;;;;N;;;;;\n10D1D;HANIFI ROHINGYA VOWEL A;Lo;0;AL;;;;;N;;;;;\n10D1E;HANIFI ROHINGYA VOWEL I;Lo;0;AL;;;;;N;;;;;\n10D1F;HANIFI ROHINGYA VOWEL U;Lo;0;AL;;;;;N;;;;;\n10D20;HANIFI ROHINGYA VOWEL E;Lo;0;AL;;;;;N;;;;;\n10D21;HANIFI ROHINGYA VOWEL O;Lo;0;AL;;;;;N;;;;;\n10D22;HANIFI ROHINGYA MARK SAKIN;Lo;0;AL;;;;;N;;;;;\n10D23;HANIFI ROHINGYA MARK NA KHONNA;Lo;0;AL;;;;;N;;;;;\n10D24;HANIFI ROHINGYA SIGN HARBAHAY;Mn;230;NSM;;;;;N;;;;;\n10D25;HANIFI ROHINGYA SIGN TAHALA;Mn;230;NSM;;;;;N;;;;;\n10D26;HANIFI ROHINGYA SIGN TANA;Mn;230;NSM;;;;;N;;;;;\n10D27;HANIFI ROHINGYA SIGN TASSI;Mn;230;NSM;;;;;N;;;;;\n10D30;HANIFI ROHINGYA DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;\n10D31;HANIFI ROHINGYA DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;\n10D32;HANIFI ROHINGYA DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;\n10D33;HANIFI ROHINGYA DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;\n10D34;HANIFI ROHINGYA DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;\n10D35;HANIFI ROHINGYA DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;\n10D36;HANIFI ROHINGYA DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;\n10D37;HANIFI ROHINGYA DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;\n10D38;HANIFI ROHINGYA DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;\n10D39;HANIFI ROHINGYA DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;\n10D40;GARAY DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;\n10D41;GARAY DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;\n10D42;GARAY DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;\n10D43;GARAY DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;\n10D44;GARAY DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;\n10D45;GARAY DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;\n10D46;GARAY DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;\n10D47;GARAY DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;\n10D48;GARAY DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;\n10D49;GARAY DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;\n10D4A;GARAY VOWEL SIGN A;Lo;0;R;;;;;N;;;;;\n10D4B;GARAY VOWEL SIGN I;Lo;0;R;;;;;N;;;;;\n10D4C;GARAY VOWEL SIGN O;Lo;0;R;;;;;N;;;;;\n10D4D;GARAY VOWEL SIGN EE;Lo;0;R;;;;;N;;;;;\n10D4E;GARAY VOWEL LENGTH MARK;Lm;0;R;;;;;N;;;;;\n10D4F;GARAY SUKUN;Lo;0;R;;;;;N;;;;;\n10D50;GARAY CAPITAL LETTER A;Lu;0;R;;;;;N;;;;10D70;\n10D51;GARAY CAPITAL LETTER CA;Lu;0;R;;;;;N;;;;10D71;\n10D52;GARAY CAPITAL LETTER MA;Lu;0;R;;;;;N;;;;10D72;\n10D53;GARAY CAPITAL LETTER KA;Lu;0;R;;;;;N;;;;10D73;\n10D54;GARAY CAPITAL LETTER BA;Lu;0;R;;;;;N;;;;10D74;\n10D55;GARAY CAPITAL LETTER JA;Lu;0;R;;;;;N;;;;10D75;\n10D56;GARAY CAPITAL LETTER SA;Lu;0;R;;;;;N;;;;10D76;\n10D57;GARAY CAPITAL LETTER WA;Lu;0;R;;;;;N;;;;10D77;\n10D58;GARAY CAPITAL LETTER LA;Lu;0;R;;;;;N;;;;10D78;\n10D59;GARAY CAPITAL LETTER GA;Lu;0;R;;;;;N;;;;10D79;\n10D5A;GARAY CAPITAL LETTER DA;Lu;0;R;;;;;N;;;;10D7A;\n10D5B;GARAY CAPITAL LETTER XA;Lu;0;R;;;;;N;;;;10D7B;\n10D5C;GARAY CAPITAL LETTER YA;Lu;0;R;;;;;N;;;;10D7C;\n10D5D;GARAY CAPITAL LETTER TA;Lu;0;R;;;;;N;;;;10D7D;\n10D5E;GARAY CAPITAL LETTER RA;Lu;0;R;;;;;N;;;;10D7E;\n10D5F;GARAY CAPITAL LETTER NYA;Lu;0;R;;;;;N;;;;10D7F;\n10D60;GARAY CAPITAL LETTER FA;Lu;0;R;;;;;N;;;;10D80;\n10D61;GARAY CAPITAL LETTER NA;Lu;0;R;;;;;N;;;;10D81;\n10D62;GARAY CAPITAL LETTER PA;Lu;0;R;;;;;N;;;;10D82;\n10D63;GARAY CAPITAL LETTER HA;Lu;0;R;;;;;N;;;;10D83;\n10D64;GARAY CAPITAL LETTER OLD KA;Lu;0;R;;;;;N;;;;10D84;\n10D65;GARAY CAPITAL LETTER OLD NA;Lu;0;R;;;;;N;;;;10D85;\n10D69;GARAY VOWEL SIGN E;Mn;230;NSM;;;;;N;;;;;\n10D6A;GARAY CONSONANT GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;\n10D6B;GARAY COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;;\n10D6C;GARAY COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;;\n10D6D;GARAY CONSONANT NASALIZATION MARK;Mn;230;NSM;;;;;N;;;;;\n10D6E;GARAY HYPHEN;Pd;0;ON;;;;;N;;;;;\n10D6F;GARAY REDUPLICATION MARK;Lm;0;R;;;;;N;;;;;\n10D70;GARAY SMALL LETTER A;Ll;0;R;;;;;N;;;10D50;;10D50\n10D71;GARAY SMALL LETTER CA;Ll;0;R;;;;;N;;;10D51;;10D51\n10D72;GARAY SMALL LETTER MA;Ll;0;R;;;;;N;;;10D52;;10D52\n10D73;GARAY SMALL LETTER KA;Ll;0;R;;;;;N;;;10D53;;10D53\n10D74;GARAY SMALL LETTER BA;Ll;0;R;;;;;N;;;10D54;;10D54\n10D75;GARAY SMALL LETTER JA;Ll;0;R;;;;;N;;;10D55;;10D55\n10D76;GARAY SMALL LETTER SA;Ll;0;R;;;;;N;;;10D56;;10D56\n10D77;GARAY SMALL LETTER WA;Ll;0;R;;;;;N;;;10D57;;10D57\n10D78;GARAY SMALL LETTER LA;Ll;0;R;;;;;N;;;10D58;;10D58\n10D79;GARAY SMALL LETTER GA;Ll;0;R;;;;;N;;;10D59;;10D59\n10D7A;GARAY SMALL LETTER DA;Ll;0;R;;;;;N;;;10D5A;;10D5A\n10D7B;GARAY SMALL LETTER XA;Ll;0;R;;;;;N;;;10D5B;;10D5B\n10D7C;GARAY SMALL LETTER YA;Ll;0;R;;;;;N;;;10D5C;;10D5C\n10D7D;GARAY SMALL LETTER TA;Ll;0;R;;;;;N;;;10D5D;;10D5D\n10D7E;GARAY SMALL LETTER RA;Ll;0;R;;;;;N;;;10D5E;;10D5E\n10D7F;GARAY SMALL LETTER NYA;Ll;0;R;;;;;N;;;10D5F;;10D5F\n10D80;GARAY SMALL LETTER FA;Ll;0;R;;;;;N;;;10D60;;10D60\n10D81;GARAY SMALL LETTER NA;Ll;0;R;;;;;N;;;10D61;;10D61\n10D82;GARAY SMALL LETTER PA;Ll;0;R;;;;;N;;;10D62;;10D62\n10D83;GARAY SMALL LETTER HA;Ll;0;R;;;;;N;;;10D63;;10D63\n10D84;GARAY SMALL LETTER OLD KA;Ll;0;R;;;;;N;;;10D64;;10D64\n10D85;GARAY SMALL LETTER OLD NA;Ll;0;R;;;;;N;;;10D65;;10D65\n10D8E;GARAY PLUS SIGN;Sm;0;R;;;;;N;;;;;\n10D8F;GARAY MINUS SIGN;Sm;0;R;;;;;N;;;;;\n10E60;RUMI DIGIT ONE;No;0;AN;;;1;1;N;;;;;\n10E61;RUMI DIGIT TWO;No;0;AN;;;2;2;N;;;;;\n10E62;RUMI DIGIT THREE;No;0;AN;;;3;3;N;;;;;\n10E63;RUMI DIGIT FOUR;No;0;AN;;;4;4;N;;;;;\n10E64;RUMI DIGIT FIVE;No;0;AN;;;5;5;N;;;;;\n10E65;RUMI DIGIT SIX;No;0;AN;;;6;6;N;;;;;\n10E66;RUMI DIGIT SEVEN;No;0;AN;;;7;7;N;;;;;\n10E67;RUMI DIGIT EIGHT;No;0;AN;;;8;8;N;;;;;\n10E68;RUMI DIGIT NINE;No;0;AN;;;9;9;N;;;;;\n10E69;RUMI NUMBER TEN;No;0;AN;;;;10;N;;;;;\n10E6A;RUMI NUMBER TWENTY;No;0;AN;;;;20;N;;;;;\n10E6B;RUMI NUMBER THIRTY;No;0;AN;;;;30;N;;;;;\n10E6C;RUMI NUMBER FORTY;No;0;AN;;;;40;N;;;;;\n10E6D;RUMI NUMBER FIFTY;No;0;AN;;;;50;N;;;;;\n10E6E;RUMI NUMBER SIXTY;No;0;AN;;;;60;N;;;;;\n10E6F;RUMI NUMBER SEVENTY;No;0;AN;;;;70;N;;;;;\n10E70;RUMI NUMBER EIGHTY;No;0;AN;;;;80;N;;;;;\n10E71;RUMI NUMBER NINETY;No;0;AN;;;;90;N;;;;;\n10E72;RUMI NUMBER ONE HUNDRED;No;0;AN;;;;100;N;;;;;\n10E73;RUMI NUMBER TWO HUNDRED;No;0;AN;;;;200;N;;;;;\n10E74;RUMI NUMBER THREE HUNDRED;No;0;AN;;;;300;N;;;;;\n10E75;RUMI NUMBER FOUR HUNDRED;No;0;AN;;;;400;N;;;;;\n10E76;RUMI NUMBER FIVE HUNDRED;No;0;AN;;;;500;N;;;;;\n10E77;RUMI NUMBER SIX HUNDRED;No;0;AN;;;;600;N;;;;;\n10E78;RUMI NUMBER SEVEN HUNDRED;No;0;AN;;;;700;N;;;;;\n10E79;RUMI NUMBER EIGHT HUNDRED;No;0;AN;;;;800;N;;;;;\n10E7A;RUMI NUMBER NINE HUNDRED;No;0;AN;;;;900;N;;;;;\n10E7B;RUMI FRACTION ONE HALF;No;0;AN;;;;1/2;N;;;;;\n10E7C;RUMI FRACTION ONE QUARTER;No;0;AN;;;;1/4;N;;;;;\n10E7D;RUMI FRACTION ONE THIRD;No;0;AN;;;;1/3;N;;;;;\n10E7E;RUMI FRACTION TWO THIRDS;No;0;AN;;;;2/3;N;;;;;\n10E80;YEZIDI LETTER ELIF;Lo;0;R;;;;;N;;;;;\n10E81;YEZIDI LETTER BE;Lo;0;R;;;;;N;;;;;\n10E82;YEZIDI LETTER PE;Lo;0;R;;;;;N;;;;;\n10E83;YEZIDI LETTER PHE;Lo;0;R;;;;;N;;;;;\n10E84;YEZIDI LETTER THE;Lo;0;R;;;;;N;;;;;\n10E85;YEZIDI LETTER SE;Lo;0;R;;;;;N;;;;;\n10E86;YEZIDI LETTER CIM;Lo;0;R;;;;;N;;;;;\n10E87;YEZIDI LETTER CHIM;Lo;0;R;;;;;N;;;;;\n10E88;YEZIDI LETTER CHHIM;Lo;0;R;;;;;N;;;;;\n10E89;YEZIDI LETTER HHA;Lo;0;R;;;;;N;;;;;\n10E8A;YEZIDI LETTER XA;Lo;0;R;;;;;N;;;;;\n10E8B;YEZIDI LETTER DAL;Lo;0;R;;;;;N;;;;;\n10E8C;YEZIDI LETTER ZAL;Lo;0;R;;;;;N;;;;;\n10E8D;YEZIDI LETTER RA;Lo;0;R;;;;;N;;;;;\n10E8E;YEZIDI LETTER RHA;Lo;0;R;;;;;N;;;;;\n10E8F;YEZIDI LETTER ZA;Lo;0;R;;;;;N;;;;;\n10E90;YEZIDI LETTER JA;Lo;0;R;;;;;N;;;;;\n10E91;YEZIDI LETTER SIN;Lo;0;R;;;;;N;;;;;\n10E92;YEZIDI LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10E93;YEZIDI LETTER SAD;Lo;0;R;;;;;N;;;;;\n10E94;YEZIDI LETTER DAD;Lo;0;R;;;;;N;;;;;\n10E95;YEZIDI LETTER TA;Lo;0;R;;;;;N;;;;;\n10E96;YEZIDI LETTER ZE;Lo;0;R;;;;;N;;;;;\n10E97;YEZIDI LETTER EYN;Lo;0;R;;;;;N;;;;;\n10E98;YEZIDI LETTER XHEYN;Lo;0;R;;;;;N;;;;;\n10E99;YEZIDI LETTER FA;Lo;0;R;;;;;N;;;;;\n10E9A;YEZIDI LETTER VA;Lo;0;R;;;;;N;;;;;\n10E9B;YEZIDI LETTER VA ALTERNATE FORM;Lo;0;R;;;;;N;;;;;\n10E9C;YEZIDI LETTER QAF;Lo;0;R;;;;;N;;;;;\n10E9D;YEZIDI LETTER KAF;Lo;0;R;;;;;N;;;;;\n10E9E;YEZIDI LETTER KHAF;Lo;0;R;;;;;N;;;;;\n10E9F;YEZIDI LETTER GAF;Lo;0;R;;;;;N;;;;;\n10EA0;YEZIDI LETTER LAM;Lo;0;R;;;;;N;;;;;\n10EA1;YEZIDI LETTER MIM;Lo;0;R;;;;;N;;;;;\n10EA2;YEZIDI LETTER NUN;Lo;0;R;;;;;N;;;;;\n10EA3;YEZIDI LETTER UM;Lo;0;R;;;;;N;;;;;\n10EA4;YEZIDI LETTER WAW;Lo;0;R;;;;;N;;;;;\n10EA5;YEZIDI LETTER OW;Lo;0;R;;;;;N;;;;;\n10EA6;YEZIDI LETTER EW;Lo;0;R;;;;;N;;;;;\n10EA7;YEZIDI LETTER HAY;Lo;0;R;;;;;N;;;;;\n10EA8;YEZIDI LETTER YOT;Lo;0;R;;;;;N;;;;;\n10EA9;YEZIDI LETTER ET;Lo;0;R;;;;;N;;;;;\n10EAB;YEZIDI COMBINING HAMZA MARK;Mn;230;NSM;;;;;N;;;;;\n10EAC;YEZIDI COMBINING MADDA MARK;Mn;230;NSM;;;;;N;;;;;\n10EAD;YEZIDI HYPHENATION MARK;Pd;0;R;;;;;N;;;;;\n10EB0;YEZIDI LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;\n10EB1;YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE;Lo;0;R;;;;;N;;;;;\n10EC2;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;;\n10EC3;ARABIC LETTER TAH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;;\n10EC4;ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;;\n10EC5;ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW;Lm;0;AL;;;;;N;;;;;\n10EC6;ARABIC LETTER THIN NOON;Lo;0;AL;;;;;N;;;;;\n10EC7;ARABIC LETTER YEH WITH FOUR DOTS BELOW;Lo;0;AL;;;;;N;;;;;\n10ED0;ARABIC BIBLICAL END OF VERSE;Po;0;ON;;;;;N;;;;;\n10ED1;ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;;\n10ED2;ARABIC LIGATURE ALAYHIM AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;;\n10ED3;ARABIC LIGATURE ALAYHIMAA AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;;\n10ED4;ARABIC LIGATURE QADDASA ALLAAHU SIRRAH;So;0;ON;;;;;N;;;;;\n10ED5;ARABIC LIGATURE QUDDISA SIRRUHUM;So;0;ON;;;;;N;;;;;\n10ED6;ARABIC LIGATURE QUDDISA SIRRUHUMAA;So;0;ON;;;;;N;;;;;\n10ED7;ARABIC LIGATURE QUDDISAT ASRAARUHUM;So;0;ON;;;;;N;;;;;\n10ED8;ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH;So;0;ON;;;;;N;;;;;\n10EFA;ARABIC DOUBLE VERTICAL BAR BELOW;Mn;220;NSM;;;;;N;;;;;\n10EFB;ARABIC SMALL LOW NOON;Mn;220;NSM;;;;;N;;;;;\n10EFC;ARABIC COMBINING ALEF OVERLAY;Mn;0;NSM;;;;;N;;;;;\n10EFD;ARABIC SMALL LOW WORD SAKTA;Mn;220;NSM;;;;;N;;;;;\n10EFE;ARABIC SMALL LOW WORD QASR;Mn;220;NSM;;;;;N;;;;;\n10EFF;ARABIC SMALL LOW WORD MADDA;Mn;220;NSM;;;;;N;;;;;\n10F00;OLD SOGDIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;\n10F01;OLD SOGDIAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;;\n10F02;OLD SOGDIAN LETTER BETH;Lo;0;R;;;;;N;;;;;\n10F03;OLD SOGDIAN LETTER FINAL BETH;Lo;0;R;;;;;N;;;;;\n10F04;OLD SOGDIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n10F05;OLD SOGDIAN LETTER HE;Lo;0;R;;;;;N;;;;;\n10F06;OLD SOGDIAN LETTER FINAL HE;Lo;0;R;;;;;N;;;;;\n10F07;OLD SOGDIAN LETTER WAW;Lo;0;R;;;;;N;;;;;\n10F08;OLD SOGDIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;\n10F09;OLD SOGDIAN LETTER HETH;Lo;0;R;;;;;N;;;;;\n10F0A;OLD SOGDIAN LETTER YODH;Lo;0;R;;;;;N;;;;;\n10F0B;OLD SOGDIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;\n10F0C;OLD SOGDIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n10F0D;OLD SOGDIAN LETTER MEM;Lo;0;R;;;;;N;;;;;\n10F0E;OLD SOGDIAN LETTER NUN;Lo;0;R;;;;;N;;;;;\n10F0F;OLD SOGDIAN LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;\n10F10;OLD SOGDIAN LETTER FINAL NUN WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;;\n10F11;OLD SOGDIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n10F12;OLD SOGDIAN LETTER AYIN;Lo;0;R;;;;;N;;;;;\n10F13;OLD SOGDIAN LETTER ALTERNATE AYIN;Lo;0;R;;;;;N;;;;;\n10F14;OLD SOGDIAN LETTER PE;Lo;0;R;;;;;N;;;;;\n10F15;OLD SOGDIAN LETTER SADHE;Lo;0;R;;;;;N;;;;;\n10F16;OLD SOGDIAN LETTER FINAL SADHE;Lo;0;R;;;;;N;;;;;\n10F17;OLD SOGDIAN LETTER FINAL SADHE WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;;\n10F18;OLD SOGDIAN LETTER RESH-AYIN-DALETH;Lo;0;R;;;;;N;;;;;\n10F19;OLD SOGDIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10F1A;OLD SOGDIAN LETTER TAW;Lo;0;R;;;;;N;;;;;\n10F1B;OLD SOGDIAN LETTER FINAL TAW;Lo;0;R;;;;;N;;;;;\n10F1C;OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL;Lo;0;R;;;;;N;;;;;\n10F1D;OLD SOGDIAN NUMBER ONE;No;0;R;;;;1;N;;;;;\n10F1E;OLD SOGDIAN NUMBER TWO;No;0;R;;;;2;N;;;;;\n10F1F;OLD SOGDIAN NUMBER THREE;No;0;R;;;;3;N;;;;;\n10F20;OLD SOGDIAN NUMBER FOUR;No;0;R;;;;4;N;;;;;\n10F21;OLD SOGDIAN NUMBER FIVE;No;0;R;;;;5;N;;;;;\n10F22;OLD SOGDIAN NUMBER TEN;No;0;R;;;;10;N;;;;;\n10F23;OLD SOGDIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n10F24;OLD SOGDIAN NUMBER THIRTY;No;0;R;;;;30;N;;;;;\n10F25;OLD SOGDIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n10F26;OLD SOGDIAN FRACTION ONE HALF;No;0;R;;;;1/2;N;;;;;\n10F27;OLD SOGDIAN LIGATURE AYIN-DALETH;Lo;0;R;;;;;N;;;;;\n10F30;SOGDIAN LETTER ALEPH;Lo;0;AL;;;;;N;;;;;\n10F31;SOGDIAN LETTER BETH;Lo;0;AL;;;;;N;;;;;\n10F32;SOGDIAN LETTER GIMEL;Lo;0;AL;;;;;N;;;;;\n10F33;SOGDIAN LETTER HE;Lo;0;AL;;;;;N;;;;;\n10F34;SOGDIAN LETTER WAW;Lo;0;AL;;;;;N;;;;;\n10F35;SOGDIAN LETTER ZAYIN;Lo;0;AL;;;;;N;;;;;\n10F36;SOGDIAN LETTER HETH;Lo;0;AL;;;;;N;;;;;\n10F37;SOGDIAN LETTER YODH;Lo;0;AL;;;;;N;;;;;\n10F38;SOGDIAN LETTER KAPH;Lo;0;AL;;;;;N;;;;;\n10F39;SOGDIAN LETTER LAMEDH;Lo;0;AL;;;;;N;;;;;\n10F3A;SOGDIAN LETTER MEM;Lo;0;AL;;;;;N;;;;;\n10F3B;SOGDIAN LETTER NUN;Lo;0;AL;;;;;N;;;;;\n10F3C;SOGDIAN LETTER SAMEKH;Lo;0;AL;;;;;N;;;;;\n10F3D;SOGDIAN LETTER AYIN;Lo;0;AL;;;;;N;;;;;\n10F3E;SOGDIAN LETTER PE;Lo;0;AL;;;;;N;;;;;\n10F3F;SOGDIAN LETTER SADHE;Lo;0;AL;;;;;N;;;;;\n10F40;SOGDIAN LETTER RESH-AYIN;Lo;0;AL;;;;;N;;;;;\n10F41;SOGDIAN LETTER SHIN;Lo;0;AL;;;;;N;;;;;\n10F42;SOGDIAN LETTER TAW;Lo;0;AL;;;;;N;;;;;\n10F43;SOGDIAN LETTER FETH;Lo;0;AL;;;;;N;;;;;\n10F44;SOGDIAN LETTER LESH;Lo;0;AL;;;;;N;;;;;\n10F45;SOGDIAN INDEPENDENT SHIN;Lo;0;AL;;;;;N;;;;;\n10F46;SOGDIAN COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;;\n10F47;SOGDIAN COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;\n10F48;SOGDIAN COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;;\n10F49;SOGDIAN COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;\n10F4A;SOGDIAN COMBINING CURVE ABOVE;Mn;230;NSM;;;;;N;;;;;\n10F4B;SOGDIAN COMBINING CURVE BELOW;Mn;220;NSM;;;;;N;;;;;\n10F4C;SOGDIAN COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;;;;;\n10F4D;SOGDIAN COMBINING HOOK BELOW;Mn;220;NSM;;;;;N;;;;;\n10F4E;SOGDIAN COMBINING LONG HOOK BELOW;Mn;220;NSM;;;;;N;;;;;\n10F4F;SOGDIAN COMBINING RESH BELOW;Mn;220;NSM;;;;;N;;;;;\n10F50;SOGDIAN COMBINING STROKE BELOW;Mn;220;NSM;;;;;N;;;;;\n10F51;SOGDIAN NUMBER ONE;No;0;AL;;;;1;N;;;;;\n10F52;SOGDIAN NUMBER TEN;No;0;AL;;;;10;N;;;;;\n10F53;SOGDIAN NUMBER TWENTY;No;0;AL;;;;20;N;;;;;\n10F54;SOGDIAN NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;;\n10F55;SOGDIAN PUNCTUATION TWO VERTICAL BARS;Po;0;AL;;;;;N;;;;;\n10F56;SOGDIAN PUNCTUATION TWO VERTICAL BARS WITH DOTS;Po;0;AL;;;;;N;;;;;\n10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;\n10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;;\n10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;\n10F70;OLD UYGHUR LETTER ALEPH;Lo;0;R;;;;;N;;;;;\n10F71;OLD UYGHUR LETTER BETH;Lo;0;R;;;;;N;;;;;\n10F72;OLD UYGHUR LETTER GIMEL-HETH;Lo;0;R;;;;;N;;;;;\n10F73;OLD UYGHUR LETTER WAW;Lo;0;R;;;;;N;;;;;\n10F74;OLD UYGHUR LETTER ZAYIN;Lo;0;R;;;;;N;;;;;\n10F75;OLD UYGHUR LETTER FINAL HETH;Lo;0;R;;;;;N;;;;;\n10F76;OLD UYGHUR LETTER YODH;Lo;0;R;;;;;N;;;;;\n10F77;OLD UYGHUR LETTER KAPH;Lo;0;R;;;;;N;;;;;\n10F78;OLD UYGHUR LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n10F79;OLD UYGHUR LETTER MEM;Lo;0;R;;;;;N;;;;;\n10F7A;OLD UYGHUR LETTER NUN;Lo;0;R;;;;;N;;;;;\n10F7B;OLD UYGHUR LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n10F7C;OLD UYGHUR LETTER PE;Lo;0;R;;;;;N;;;;;\n10F7D;OLD UYGHUR LETTER SADHE;Lo;0;R;;;;;N;;;;;\n10F7E;OLD UYGHUR LETTER RESH;Lo;0;R;;;;;N;;;;;\n10F7F;OLD UYGHUR LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10F80;OLD UYGHUR LETTER TAW;Lo;0;R;;;;;N;;;;;\n10F81;OLD UYGHUR LETTER LESH;Lo;0;R;;;;;N;;;;;\n10F82;OLD UYGHUR COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;;\n10F83;OLD UYGHUR COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;;\n10F84;OLD UYGHUR COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;\n10F85;OLD UYGHUR COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;\n10F86;OLD UYGHUR PUNCTUATION BAR;Po;0;R;;;;;N;;;;;\n10F87;OLD UYGHUR PUNCTUATION TWO BARS;Po;0;R;;;;;N;;;;;\n10F88;OLD UYGHUR PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;;\n10F89;OLD UYGHUR PUNCTUATION FOUR DOTS;Po;0;R;;;;;N;;;;;\n10FB0;CHORASMIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;\n10FB1;CHORASMIAN LETTER SMALL ALEPH;Lo;0;R;;;;;N;;;;;\n10FB2;CHORASMIAN LETTER BETH;Lo;0;R;;;;;N;;;;;\n10FB3;CHORASMIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n10FB4;CHORASMIAN LETTER DALETH;Lo;0;R;;;;;N;;;;;\n10FB5;CHORASMIAN LETTER HE;Lo;0;R;;;;;N;;;;;\n10FB6;CHORASMIAN LETTER WAW;Lo;0;R;;;;;N;;;;;\n10FB7;CHORASMIAN LETTER CURLED WAW;Lo;0;R;;;;;N;;;;;\n10FB8;CHORASMIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;\n10FB9;CHORASMIAN LETTER HETH;Lo;0;R;;;;;N;;;;;\n10FBA;CHORASMIAN LETTER YODH;Lo;0;R;;;;;N;;;;;\n10FBB;CHORASMIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;\n10FBC;CHORASMIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n10FBD;CHORASMIAN LETTER MEM;Lo;0;R;;;;;N;;;;;\n10FBE;CHORASMIAN LETTER NUN;Lo;0;R;;;;;N;;;;;\n10FBF;CHORASMIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n10FC0;CHORASMIAN LETTER AYIN;Lo;0;R;;;;;N;;;;;\n10FC1;CHORASMIAN LETTER PE;Lo;0;R;;;;;N;;;;;\n10FC2;CHORASMIAN LETTER RESH;Lo;0;R;;;;;N;;;;;\n10FC3;CHORASMIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10FC4;CHORASMIAN LETTER TAW;Lo;0;R;;;;;N;;;;;\n10FC5;CHORASMIAN NUMBER ONE;No;0;R;;;;1;N;;;;;\n10FC6;CHORASMIAN NUMBER TWO;No;0;R;;;;2;N;;;;;\n10FC7;CHORASMIAN NUMBER THREE;No;0;R;;;;3;N;;;;;\n10FC8;CHORASMIAN NUMBER FOUR;No;0;R;;;;4;N;;;;;\n10FC9;CHORASMIAN NUMBER TEN;No;0;R;;;;10;N;;;;;\n10FCA;CHORASMIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;\n10FCB;CHORASMIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;\n10FE0;ELYMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;;\n10FE1;ELYMAIC LETTER BETH;Lo;0;R;;;;;N;;;;;\n10FE2;ELYMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;;\n10FE3;ELYMAIC LETTER DALETH;Lo;0;R;;;;;N;;;;;\n10FE4;ELYMAIC LETTER HE;Lo;0;R;;;;;N;;;;;\n10FE5;ELYMAIC LETTER WAW;Lo;0;R;;;;;N;;;;;\n10FE6;ELYMAIC LETTER ZAYIN;Lo;0;R;;;;;N;;;;;\n10FE7;ELYMAIC LETTER HETH;Lo;0;R;;;;;N;;;;;\n10FE8;ELYMAIC LETTER TETH;Lo;0;R;;;;;N;;;;;\n10FE9;ELYMAIC LETTER YODH;Lo;0;R;;;;;N;;;;;\n10FEA;ELYMAIC LETTER KAPH;Lo;0;R;;;;;N;;;;;\n10FEB;ELYMAIC LETTER LAMEDH;Lo;0;R;;;;;N;;;;;\n10FEC;ELYMAIC LETTER MEM;Lo;0;R;;;;;N;;;;;\n10FED;ELYMAIC LETTER NUN;Lo;0;R;;;;;N;;;;;\n10FEE;ELYMAIC LETTER SAMEKH;Lo;0;R;;;;;N;;;;;\n10FEF;ELYMAIC LETTER AYIN;Lo;0;R;;;;;N;;;;;\n10FF0;ELYMAIC LETTER PE;Lo;0;R;;;;;N;;;;;\n10FF1;ELYMAIC LETTER SADHE;Lo;0;R;;;;;N;;;;;\n10FF2;ELYMAIC LETTER QOPH;Lo;0;R;;;;;N;;;;;\n10FF3;ELYMAIC LETTER RESH;Lo;0;R;;;;;N;;;;;\n10FF4;ELYMAIC LETTER SHIN;Lo;0;R;;;;;N;;;;;\n10FF5;ELYMAIC LETTER TAW;Lo;0;R;;;;;N;;;;;\n10FF6;ELYMAIC LIGATURE ZAYIN-YODH;Lo;0;R;;;;;N;;;;;\n11000;BRAHMI SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;\n11001;BRAHMI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11002;BRAHMI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n11003;BRAHMI SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;\n11004;BRAHMI SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;\n11005;BRAHMI LETTER A;Lo;0;L;;;;;N;;;;;\n11006;BRAHMI LETTER AA;Lo;0;L;;;;;N;;;;;\n11007;BRAHMI LETTER I;Lo;0;L;;;;;N;;;;;\n11008;BRAHMI LETTER II;Lo;0;L;;;;;N;;;;;\n11009;BRAHMI LETTER U;Lo;0;L;;;;;N;;;;;\n1100A;BRAHMI LETTER UU;Lo;0;L;;;;;N;;;;;\n1100B;BRAHMI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n1100C;BRAHMI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n1100D;BRAHMI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n1100E;BRAHMI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n1100F;BRAHMI LETTER E;Lo;0;L;;;;;N;;;;;\n11010;BRAHMI LETTER AI;Lo;0;L;;;;;N;;;;;\n11011;BRAHMI LETTER O;Lo;0;L;;;;;N;;;;;\n11012;BRAHMI LETTER AU;Lo;0;L;;;;;N;;;;;\n11013;BRAHMI LETTER KA;Lo;0;L;;;;;N;;;;;\n11014;BRAHMI LETTER KHA;Lo;0;L;;;;;N;;;;;\n11015;BRAHMI LETTER GA;Lo;0;L;;;;;N;;;;;\n11016;BRAHMI LETTER GHA;Lo;0;L;;;;;N;;;;;\n11017;BRAHMI LETTER NGA;Lo;0;L;;;;;N;;;;;\n11018;BRAHMI LETTER CA;Lo;0;L;;;;;N;;;;;\n11019;BRAHMI LETTER CHA;Lo;0;L;;;;;N;;;;;\n1101A;BRAHMI LETTER JA;Lo;0;L;;;;;N;;;;;\n1101B;BRAHMI LETTER JHA;Lo;0;L;;;;;N;;;;;\n1101C;BRAHMI LETTER NYA;Lo;0;L;;;;;N;;;;;\n1101D;BRAHMI LETTER TTA;Lo;0;L;;;;;N;;;;;\n1101E;BRAHMI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n1101F;BRAHMI LETTER DDA;Lo;0;L;;;;;N;;;;;\n11020;BRAHMI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11021;BRAHMI LETTER NNA;Lo;0;L;;;;;N;;;;;\n11022;BRAHMI LETTER TA;Lo;0;L;;;;;N;;;;;\n11023;BRAHMI LETTER THA;Lo;0;L;;;;;N;;;;;\n11024;BRAHMI LETTER DA;Lo;0;L;;;;;N;;;;;\n11025;BRAHMI LETTER DHA;Lo;0;L;;;;;N;;;;;\n11026;BRAHMI LETTER NA;Lo;0;L;;;;;N;;;;;\n11027;BRAHMI LETTER PA;Lo;0;L;;;;;N;;;;;\n11028;BRAHMI LETTER PHA;Lo;0;L;;;;;N;;;;;\n11029;BRAHMI LETTER BA;Lo;0;L;;;;;N;;;;;\n1102A;BRAHMI LETTER BHA;Lo;0;L;;;;;N;;;;;\n1102B;BRAHMI LETTER MA;Lo;0;L;;;;;N;;;;;\n1102C;BRAHMI LETTER YA;Lo;0;L;;;;;N;;;;;\n1102D;BRAHMI LETTER RA;Lo;0;L;;;;;N;;;;;\n1102E;BRAHMI LETTER LA;Lo;0;L;;;;;N;;;;;\n1102F;BRAHMI LETTER VA;Lo;0;L;;;;;N;;;;;\n11030;BRAHMI LETTER SHA;Lo;0;L;;;;;N;;;;;\n11031;BRAHMI LETTER SSA;Lo;0;L;;;;;N;;;;;\n11032;BRAHMI LETTER SA;Lo;0;L;;;;;N;;;;;\n11033;BRAHMI LETTER HA;Lo;0;L;;;;;N;;;;;\n11034;BRAHMI LETTER LLA;Lo;0;L;;;;;N;;;;;\n11035;BRAHMI LETTER OLD TAMIL LLLA;Lo;0;L;;;;;N;;;;;\n11036;BRAHMI LETTER OLD TAMIL RRA;Lo;0;L;;;;;N;;;;;\n11037;BRAHMI LETTER OLD TAMIL NNNA;Lo;0;L;;;;;N;;;;;\n11038;BRAHMI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;\n11039;BRAHMI VOWEL SIGN BHATTIPROLU AA;Mn;0;NSM;;;;;N;;;;;\n1103A;BRAHMI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n1103B;BRAHMI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n1103C;BRAHMI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n1103D;BRAHMI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n1103E;BRAHMI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n1103F;BRAHMI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n11040;BRAHMI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n11041;BRAHMI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n11042;BRAHMI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n11043;BRAHMI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n11044;BRAHMI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n11045;BRAHMI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;\n11046;BRAHMI VIRAMA;Mn;9;NSM;;;;;N;;;;;\n11047;BRAHMI DANDA;Po;0;L;;;;;N;;;;;\n11048;BRAHMI DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n11049;BRAHMI PUNCTUATION DOT;Po;0;L;;;;;N;;;;;\n1104A;BRAHMI PUNCTUATION DOUBLE DOT;Po;0;L;;;;;N;;;;;\n1104B;BRAHMI PUNCTUATION LINE;Po;0;L;;;;;N;;;;;\n1104C;BRAHMI PUNCTUATION CRESCENT BAR;Po;0;L;;;;;N;;;;;\n1104D;BRAHMI PUNCTUATION LOTUS;Po;0;L;;;;;N;;;;;\n11052;BRAHMI NUMBER ONE;No;0;ON;;;1;1;N;;;;;\n11053;BRAHMI NUMBER TWO;No;0;ON;;;2;2;N;;;;;\n11054;BRAHMI NUMBER THREE;No;0;ON;;;3;3;N;;;;;\n11055;BRAHMI NUMBER FOUR;No;0;ON;;;4;4;N;;;;;\n11056;BRAHMI NUMBER FIVE;No;0;ON;;;5;5;N;;;;;\n11057;BRAHMI NUMBER SIX;No;0;ON;;;6;6;N;;;;;\n11058;BRAHMI NUMBER SEVEN;No;0;ON;;;7;7;N;;;;;\n11059;BRAHMI NUMBER EIGHT;No;0;ON;;;8;8;N;;;;;\n1105A;BRAHMI NUMBER NINE;No;0;ON;;;9;9;N;;;;;\n1105B;BRAHMI NUMBER TEN;No;0;ON;;;;10;N;;;;;\n1105C;BRAHMI NUMBER TWENTY;No;0;ON;;;;20;N;;;;;\n1105D;BRAHMI NUMBER THIRTY;No;0;ON;;;;30;N;;;;;\n1105E;BRAHMI NUMBER FORTY;No;0;ON;;;;40;N;;;;;\n1105F;BRAHMI NUMBER FIFTY;No;0;ON;;;;50;N;;;;;\n11060;BRAHMI NUMBER SIXTY;No;0;ON;;;;60;N;;;;;\n11061;BRAHMI NUMBER SEVENTY;No;0;ON;;;;70;N;;;;;\n11062;BRAHMI NUMBER EIGHTY;No;0;ON;;;;80;N;;;;;\n11063;BRAHMI NUMBER NINETY;No;0;ON;;;;90;N;;;;;\n11064;BRAHMI NUMBER ONE HUNDRED;No;0;ON;;;;100;N;;;;;\n11065;BRAHMI NUMBER ONE THOUSAND;No;0;ON;;;;1000;N;;;;;\n11066;BRAHMI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n11067;BRAHMI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n11068;BRAHMI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n11069;BRAHMI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1106A;BRAHMI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1106B;BRAHMI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1106C;BRAHMI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11070;BRAHMI SIGN OLD TAMIL VIRAMA;Mn;9;NSM;;;;;N;;;;;\n11071;BRAHMI LETTER OLD TAMIL SHORT E;Lo;0;L;;;;;N;;;;;\n11072;BRAHMI LETTER OLD TAMIL SHORT O;Lo;0;L;;;;;N;;;;;\n11073;BRAHMI VOWEL SIGN OLD TAMIL SHORT E;Mn;0;NSM;;;;;N;;;;;\n11074;BRAHMI VOWEL SIGN OLD TAMIL SHORT O;Mn;0;NSM;;;;;N;;;;;\n11075;BRAHMI LETTER OLD TAMIL LLA;Lo;0;L;;;;;N;;;;;\n1107F;BRAHMI NUMBER JOINER;Mn;9;NSM;;;;;N;;;;;\n11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11082;KAITHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n11083;KAITHI LETTER A;Lo;0;L;;;;;N;;;;;\n11084;KAITHI LETTER AA;Lo;0;L;;;;;N;;;;;\n11085;KAITHI LETTER I;Lo;0;L;;;;;N;;;;;\n11086;KAITHI LETTER II;Lo;0;L;;;;;N;;;;;\n11087;KAITHI LETTER U;Lo;0;L;;;;;N;;;;;\n11088;KAITHI LETTER UU;Lo;0;L;;;;;N;;;;;\n11089;KAITHI LETTER E;Lo;0;L;;;;;N;;;;;\n1108A;KAITHI LETTER AI;Lo;0;L;;;;;N;;;;;\n1108B;KAITHI LETTER O;Lo;0;L;;;;;N;;;;;\n1108C;KAITHI LETTER AU;Lo;0;L;;;;;N;;;;;\n1108D;KAITHI LETTER KA;Lo;0;L;;;;;N;;;;;\n1108E;KAITHI LETTER KHA;Lo;0;L;;;;;N;;;;;\n1108F;KAITHI LETTER GA;Lo;0;L;;;;;N;;;;;\n11090;KAITHI LETTER GHA;Lo;0;L;;;;;N;;;;;\n11091;KAITHI LETTER NGA;Lo;0;L;;;;;N;;;;;\n11092;KAITHI LETTER CA;Lo;0;L;;;;;N;;;;;\n11093;KAITHI LETTER CHA;Lo;0;L;;;;;N;;;;;\n11094;KAITHI LETTER JA;Lo;0;L;;;;;N;;;;;\n11095;KAITHI LETTER JHA;Lo;0;L;;;;;N;;;;;\n11096;KAITHI LETTER NYA;Lo;0;L;;;;;N;;;;;\n11097;KAITHI LETTER TTA;Lo;0;L;;;;;N;;;;;\n11098;KAITHI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11099;KAITHI LETTER DDA;Lo;0;L;;;;;N;;;;;\n1109A;KAITHI LETTER DDDHA;Lo;0;L;11099 110BA;;;;N;;;;;\n1109B;KAITHI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n1109C;KAITHI LETTER RHA;Lo;0;L;1109B 110BA;;;;N;;;;;\n1109D;KAITHI LETTER NNA;Lo;0;L;;;;;N;;;;;\n1109E;KAITHI LETTER TA;Lo;0;L;;;;;N;;;;;\n1109F;KAITHI LETTER THA;Lo;0;L;;;;;N;;;;;\n110A0;KAITHI LETTER DA;Lo;0;L;;;;;N;;;;;\n110A1;KAITHI LETTER DHA;Lo;0;L;;;;;N;;;;;\n110A2;KAITHI LETTER NA;Lo;0;L;;;;;N;;;;;\n110A3;KAITHI LETTER PA;Lo;0;L;;;;;N;;;;;\n110A4;KAITHI LETTER PHA;Lo;0;L;;;;;N;;;;;\n110A5;KAITHI LETTER BA;Lo;0;L;;;;;N;;;;;\n110A6;KAITHI LETTER BHA;Lo;0;L;;;;;N;;;;;\n110A7;KAITHI LETTER MA;Lo;0;L;;;;;N;;;;;\n110A8;KAITHI LETTER YA;Lo;0;L;;;;;N;;;;;\n110A9;KAITHI LETTER RA;Lo;0;L;;;;;N;;;;;\n110AA;KAITHI LETTER LA;Lo;0;L;;;;;N;;;;;\n110AB;KAITHI LETTER VA;Lo;0;L;110A5 110BA;;;;N;;;;;\n110AC;KAITHI LETTER SHA;Lo;0;L;;;;;N;;;;;\n110AD;KAITHI LETTER SSA;Lo;0;L;;;;;N;;;;;\n110AE;KAITHI LETTER SA;Lo;0;L;;;;;N;;;;;\n110AF;KAITHI LETTER HA;Lo;0;L;;;;;N;;;;;\n110B0;KAITHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n110B1;KAITHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n110B2;KAITHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n110B3;KAITHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n110B4;KAITHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n110B5;KAITHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n110B6;KAITHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n110B7;KAITHI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n110B8;KAITHI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n110B9;KAITHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n110BA;KAITHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n110BB;KAITHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n110BC;KAITHI ENUMERATION SIGN;Po;0;L;;;;;N;;;;;\n110BD;KAITHI NUMBER SIGN;Cf;0;L;;;;;N;;;;;\n110BE;KAITHI SECTION MARK;Po;0;L;;;;;N;;;;;\n110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;\n110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;;\n110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n110C2;KAITHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n110CD;KAITHI NUMBER SIGN ABOVE;Cf;0;L;;;;;N;;;;;\n110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;;\n110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;;\n110D2;SORA SOMPENG LETTER BAH;Lo;0;L;;;;;N;;;;;\n110D3;SORA SOMPENG LETTER CAH;Lo;0;L;;;;;N;;;;;\n110D4;SORA SOMPENG LETTER DAH;Lo;0;L;;;;;N;;;;;\n110D5;SORA SOMPENG LETTER GAH;Lo;0;L;;;;;N;;;;;\n110D6;SORA SOMPENG LETTER MAH;Lo;0;L;;;;;N;;;;;\n110D7;SORA SOMPENG LETTER NGAH;Lo;0;L;;;;;N;;;;;\n110D8;SORA SOMPENG LETTER LAH;Lo;0;L;;;;;N;;;;;\n110D9;SORA SOMPENG LETTER NAH;Lo;0;L;;;;;N;;;;;\n110DA;SORA SOMPENG LETTER VAH;Lo;0;L;;;;;N;;;;;\n110DB;SORA SOMPENG LETTER PAH;Lo;0;L;;;;;N;;;;;\n110DC;SORA SOMPENG LETTER YAH;Lo;0;L;;;;;N;;;;;\n110DD;SORA SOMPENG LETTER RAH;Lo;0;L;;;;;N;;;;;\n110DE;SORA SOMPENG LETTER HAH;Lo;0;L;;;;;N;;;;;\n110DF;SORA SOMPENG LETTER KAH;Lo;0;L;;;;;N;;;;;\n110E0;SORA SOMPENG LETTER JAH;Lo;0;L;;;;;N;;;;;\n110E1;SORA SOMPENG LETTER NYAH;Lo;0;L;;;;;N;;;;;\n110E2;SORA SOMPENG LETTER AH;Lo;0;L;;;;;N;;;;;\n110E3;SORA SOMPENG LETTER EEH;Lo;0;L;;;;;N;;;;;\n110E4;SORA SOMPENG LETTER IH;Lo;0;L;;;;;N;;;;;\n110E5;SORA SOMPENG LETTER UH;Lo;0;L;;;;;N;;;;;\n110E6;SORA SOMPENG LETTER OH;Lo;0;L;;;;;N;;;;;\n110E7;SORA SOMPENG LETTER EH;Lo;0;L;;;;;N;;;;;\n110E8;SORA SOMPENG LETTER MAE;Lo;0;L;;;;;N;;;;;\n110F0;SORA SOMPENG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n110F1;SORA SOMPENG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n110F2;SORA SOMPENG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n110F3;SORA SOMPENG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n110F4;SORA SOMPENG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n110F5;SORA SOMPENG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n110F6;SORA SOMPENG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n110F7;SORA SOMPENG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n110F8;SORA SOMPENG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n110F9;SORA SOMPENG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11100;CHAKMA SIGN CANDRABINDU;Mn;230;NSM;;;;;N;;;;;\n11101;CHAKMA SIGN ANUSVARA;Mn;230;NSM;;;;;N;;;;;\n11102;CHAKMA SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;\n11103;CHAKMA LETTER AA;Lo;0;L;;;;;N;;;;;\n11104;CHAKMA LETTER I;Lo;0;L;;;;;N;;;;;\n11105;CHAKMA LETTER U;Lo;0;L;;;;;N;;;;;\n11106;CHAKMA LETTER E;Lo;0;L;;;;;N;;;;;\n11107;CHAKMA LETTER KAA;Lo;0;L;;;;;N;;;;;\n11108;CHAKMA LETTER KHAA;Lo;0;L;;;;;N;;;;;\n11109;CHAKMA LETTER GAA;Lo;0;L;;;;;N;;;;;\n1110A;CHAKMA LETTER GHAA;Lo;0;L;;;;;N;;;;;\n1110B;CHAKMA LETTER NGAA;Lo;0;L;;;;;N;;;;;\n1110C;CHAKMA LETTER CAA;Lo;0;L;;;;;N;;;;;\n1110D;CHAKMA LETTER CHAA;Lo;0;L;;;;;N;;;;;\n1110E;CHAKMA LETTER JAA;Lo;0;L;;;;;N;;;;;\n1110F;CHAKMA LETTER JHAA;Lo;0;L;;;;;N;;;;;\n11110;CHAKMA LETTER NYAA;Lo;0;L;;;;;N;;;;;\n11111;CHAKMA LETTER TTAA;Lo;0;L;;;;;N;;;;;\n11112;CHAKMA LETTER TTHAA;Lo;0;L;;;;;N;;;;;\n11113;CHAKMA LETTER DDAA;Lo;0;L;;;;;N;;;;;\n11114;CHAKMA LETTER DDHAA;Lo;0;L;;;;;N;;;;;\n11115;CHAKMA LETTER NNAA;Lo;0;L;;;;;N;;;;;\n11116;CHAKMA LETTER TAA;Lo;0;L;;;;;N;;;;;\n11117;CHAKMA LETTER THAA;Lo;0;L;;;;;N;;;;;\n11118;CHAKMA LETTER DAA;Lo;0;L;;;;;N;;;;;\n11119;CHAKMA LETTER DHAA;Lo;0;L;;;;;N;;;;;\n1111A;CHAKMA LETTER NAA;Lo;0;L;;;;;N;;;;;\n1111B;CHAKMA LETTER PAA;Lo;0;L;;;;;N;;;;;\n1111C;CHAKMA LETTER PHAA;Lo;0;L;;;;;N;;;;;\n1111D;CHAKMA LETTER BAA;Lo;0;L;;;;;N;;;;;\n1111E;CHAKMA LETTER BHAA;Lo;0;L;;;;;N;;;;;\n1111F;CHAKMA LETTER MAA;Lo;0;L;;;;;N;;;;;\n11120;CHAKMA LETTER YYAA;Lo;0;L;;;;;N;;;;;\n11121;CHAKMA LETTER YAA;Lo;0;L;;;;;N;;;;;\n11122;CHAKMA LETTER RAA;Lo;0;L;;;;;N;;;;;\n11123;CHAKMA LETTER LAA;Lo;0;L;;;;;N;;;;;\n11124;CHAKMA LETTER WAA;Lo;0;L;;;;;N;;;;;\n11125;CHAKMA LETTER SAA;Lo;0;L;;;;;N;;;;;\n11126;CHAKMA LETTER HAA;Lo;0;L;;;;;N;;;;;\n11127;CHAKMA VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;;\n11128;CHAKMA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n11129;CHAKMA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n1112A;CHAKMA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n1112B;CHAKMA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n1112C;CHAKMA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n1112D;CHAKMA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n1112E;CHAKMA VOWEL SIGN O;Mn;0;NSM;11131 11127;;;;N;;;;;\n1112F;CHAKMA VOWEL SIGN AU;Mn;0;NSM;11132 11127;;;;N;;;;;\n11130;CHAKMA VOWEL SIGN OI;Mn;0;NSM;;;;;N;;;;;\n11131;CHAKMA O MARK;Mn;0;NSM;;;;;N;;;;;\n11132;CHAKMA AU MARK;Mn;0;NSM;;;;;N;;;;;\n11133;CHAKMA VIRAMA;Mn;9;NSM;;;;;N;;;;;\n11134;CHAKMA MAAYYAA;Mn;9;NSM;;;;;N;;;;;\n11136;CHAKMA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n11137;CHAKMA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n11138;CHAKMA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n11139;CHAKMA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1113A;CHAKMA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1113B;CHAKMA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1113C;CHAKMA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1113D;CHAKMA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1113E;CHAKMA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1113F;CHAKMA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11140;CHAKMA SECTION MARK;Po;0;L;;;;;N;;;;;\n11141;CHAKMA DANDA;Po;0;L;;;;;N;;;;;\n11142;CHAKMA DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n11143;CHAKMA QUESTION MARK;Po;0;L;;;;;N;;;;;\n11144;CHAKMA LETTER LHAA;Lo;0;L;;;;;N;;;;;\n11145;CHAKMA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n11146;CHAKMA VOWEL SIGN EI;Mc;0;L;;;;;N;;;;;\n11147;CHAKMA LETTER VAA;Lo;0;L;;;;;N;;;;;\n11150;MAHAJANI LETTER A;Lo;0;L;;;;;N;;;;;\n11151;MAHAJANI LETTER I;Lo;0;L;;;;;N;;;;;\n11152;MAHAJANI LETTER U;Lo;0;L;;;;;N;;;;;\n11153;MAHAJANI LETTER E;Lo;0;L;;;;;N;;;;;\n11154;MAHAJANI LETTER O;Lo;0;L;;;;;N;;;;;\n11155;MAHAJANI LETTER KA;Lo;0;L;;;;;N;;;;;\n11156;MAHAJANI LETTER KHA;Lo;0;L;;;;;N;;;;;\n11157;MAHAJANI LETTER GA;Lo;0;L;;;;;N;;;;;\n11158;MAHAJANI LETTER GHA;Lo;0;L;;;;;N;;;;;\n11159;MAHAJANI LETTER CA;Lo;0;L;;;;;N;;;;;\n1115A;MAHAJANI LETTER CHA;Lo;0;L;;;;;N;;;;;\n1115B;MAHAJANI LETTER JA;Lo;0;L;;;;;N;;;;;\n1115C;MAHAJANI LETTER JHA;Lo;0;L;;;;;N;;;;;\n1115D;MAHAJANI LETTER NYA;Lo;0;L;;;;;N;;;;;\n1115E;MAHAJANI LETTER TTA;Lo;0;L;;;;;N;;;;;\n1115F;MAHAJANI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11160;MAHAJANI LETTER DDA;Lo;0;L;;;;;N;;;;;\n11161;MAHAJANI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11162;MAHAJANI LETTER NNA;Lo;0;L;;;;;N;;;;;\n11163;MAHAJANI LETTER TA;Lo;0;L;;;;;N;;;;;\n11164;MAHAJANI LETTER THA;Lo;0;L;;;;;N;;;;;\n11165;MAHAJANI LETTER DA;Lo;0;L;;;;;N;;;;;\n11166;MAHAJANI LETTER DHA;Lo;0;L;;;;;N;;;;;\n11167;MAHAJANI LETTER NA;Lo;0;L;;;;;N;;;;;\n11168;MAHAJANI LETTER PA;Lo;0;L;;;;;N;;;;;\n11169;MAHAJANI LETTER PHA;Lo;0;L;;;;;N;;;;;\n1116A;MAHAJANI LETTER BA;Lo;0;L;;;;;N;;;;;\n1116B;MAHAJANI LETTER BHA;Lo;0;L;;;;;N;;;;;\n1116C;MAHAJANI LETTER MA;Lo;0;L;;;;;N;;;;;\n1116D;MAHAJANI LETTER RA;Lo;0;L;;;;;N;;;;;\n1116E;MAHAJANI LETTER LA;Lo;0;L;;;;;N;;;;;\n1116F;MAHAJANI LETTER VA;Lo;0;L;;;;;N;;;;;\n11170;MAHAJANI LETTER SA;Lo;0;L;;;;;N;;;;;\n11171;MAHAJANI LETTER HA;Lo;0;L;;;;;N;;;;;\n11172;MAHAJANI LETTER RRA;Lo;0;L;;;;;N;;;;;\n11173;MAHAJANI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n11174;MAHAJANI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n11175;MAHAJANI SECTION MARK;Po;0;L;;;;;N;;;;;\n11176;MAHAJANI LIGATURE SHRI;Lo;0;L;;;;;N;;;;;\n11180;SHARADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n11181;SHARADA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11182;SHARADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n11183;SHARADA LETTER A;Lo;0;L;;;;;N;;;;;\n11184;SHARADA LETTER AA;Lo;0;L;;;;;N;;;;;\n11185;SHARADA LETTER I;Lo;0;L;;;;;N;;;;;\n11186;SHARADA LETTER II;Lo;0;L;;;;;N;;;;;\n11187;SHARADA LETTER U;Lo;0;L;;;;;N;;;;;\n11188;SHARADA LETTER UU;Lo;0;L;;;;;N;;;;;\n11189;SHARADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n1118A;SHARADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n1118B;SHARADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n1118C;SHARADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n1118D;SHARADA LETTER E;Lo;0;L;;;;;N;;;;;\n1118E;SHARADA LETTER AI;Lo;0;L;;;;;N;;;;;\n1118F;SHARADA LETTER O;Lo;0;L;;;;;N;;;;;\n11190;SHARADA LETTER AU;Lo;0;L;;;;;N;;;;;\n11191;SHARADA LETTER KA;Lo;0;L;;;;;N;;;;;\n11192;SHARADA LETTER KHA;Lo;0;L;;;;;N;;;;;\n11193;SHARADA LETTER GA;Lo;0;L;;;;;N;;;;;\n11194;SHARADA LETTER GHA;Lo;0;L;;;;;N;;;;;\n11195;SHARADA LETTER NGA;Lo;0;L;;;;;N;;;;;\n11196;SHARADA LETTER CA;Lo;0;L;;;;;N;;;;;\n11197;SHARADA LETTER CHA;Lo;0;L;;;;;N;;;;;\n11198;SHARADA LETTER JA;Lo;0;L;;;;;N;;;;;\n11199;SHARADA LETTER JHA;Lo;0;L;;;;;N;;;;;\n1119A;SHARADA LETTER NYA;Lo;0;L;;;;;N;;;;;\n1119B;SHARADA LETTER TTA;Lo;0;L;;;;;N;;;;;\n1119C;SHARADA LETTER TTHA;Lo;0;L;;;;;N;;;;;\n1119D;SHARADA LETTER DDA;Lo;0;L;;;;;N;;;;;\n1119E;SHARADA LETTER DDHA;Lo;0;L;;;;;N;;;;;\n1119F;SHARADA LETTER NNA;Lo;0;L;;;;;N;;;;;\n111A0;SHARADA LETTER TA;Lo;0;L;;;;;N;;;;;\n111A1;SHARADA LETTER THA;Lo;0;L;;;;;N;;;;;\n111A2;SHARADA LETTER DA;Lo;0;L;;;;;N;;;;;\n111A3;SHARADA LETTER DHA;Lo;0;L;;;;;N;;;;;\n111A4;SHARADA LETTER NA;Lo;0;L;;;;;N;;;;;\n111A5;SHARADA LETTER PA;Lo;0;L;;;;;N;;;;;\n111A6;SHARADA LETTER PHA;Lo;0;L;;;;;N;;;;;\n111A7;SHARADA LETTER BA;Lo;0;L;;;;;N;;;;;\n111A8;SHARADA LETTER BHA;Lo;0;L;;;;;N;;;;;\n111A9;SHARADA LETTER MA;Lo;0;L;;;;;N;;;;;\n111AA;SHARADA LETTER YA;Lo;0;L;;;;;N;;;;;\n111AB;SHARADA LETTER RA;Lo;0;L;;;;;N;;;;;\n111AC;SHARADA LETTER LA;Lo;0;L;;;;;N;;;;;\n111AD;SHARADA LETTER LLA;Lo;0;L;;;;;N;;;;;\n111AE;SHARADA LETTER VA;Lo;0;L;;;;;N;;;;;\n111AF;SHARADA LETTER SHA;Lo;0;L;;;;;N;;;;;\n111B0;SHARADA LETTER SSA;Lo;0;L;;;;;N;;;;;\n111B1;SHARADA LETTER SA;Lo;0;L;;;;;N;;;;;\n111B2;SHARADA LETTER HA;Lo;0;L;;;;;N;;;;;\n111B3;SHARADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n111B4;SHARADA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n111B5;SHARADA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n111B6;SHARADA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n111B7;SHARADA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n111B8;SHARADA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n111B9;SHARADA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n111BA;SHARADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n111BB;SHARADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n111BC;SHARADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n111BD;SHARADA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n111BE;SHARADA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n111BF;SHARADA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n111C0;SHARADA SIGN VIRAMA;Mc;9;L;;;;;N;;;;;\n111C1;SHARADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n111C2;SHARADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;\n111C3;SHARADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;\n111C4;SHARADA OM;Lo;0;L;;;;;N;;;;;\n111C5;SHARADA DANDA;Po;0;L;;;;;N;;;;;\n111C6;SHARADA DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n111C7;SHARADA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n111C8;SHARADA SEPARATOR;Po;0;L;;;;;N;;;;;\n111C9;SHARADA SANDHI MARK;Mn;0;NSM;;;;;N;;;;;\n111CA;SHARADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n111CB;SHARADA VOWEL MODIFIER MARK;Mn;0;NSM;;;;;N;;;;;\n111CC;SHARADA EXTRA SHORT VOWEL MARK;Mn;0;NSM;;;;;N;;;;;\n111CD;SHARADA SUTRA MARK;Po;0;L;;;;;N;;;;;\n111CE;SHARADA VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;;\n111CF;SHARADA SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n111D0;SHARADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n111D1;SHARADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n111D2;SHARADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n111D3;SHARADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n111D4;SHARADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n111D5;SHARADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n111D6;SHARADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n111D7;SHARADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n111D8;SHARADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n111D9;SHARADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n111DA;SHARADA EKAM;Lo;0;L;;;;;N;;;;;\n111DB;SHARADA SIGN SIDDHAM;Po;0;L;;;;;N;;;;;\n111DC;SHARADA HEADSTROKE;Lo;0;L;;;;;N;;;;;\n111DD;SHARADA CONTINUATION SIGN;Po;0;L;;;;;N;;;;;\n111DE;SHARADA SECTION MARK-1;Po;0;L;;;;;N;;;;;\n111DF;SHARADA SECTION MARK-2;Po;0;L;;;;;N;;;;;\n111E1;SINHALA ARCHAIC DIGIT ONE;No;0;L;;;;1;N;;;;;\n111E2;SINHALA ARCHAIC DIGIT TWO;No;0;L;;;;2;N;;;;;\n111E3;SINHALA ARCHAIC DIGIT THREE;No;0;L;;;;3;N;;;;;\n111E4;SINHALA ARCHAIC DIGIT FOUR;No;0;L;;;;4;N;;;;;\n111E5;SINHALA ARCHAIC DIGIT FIVE;No;0;L;;;;5;N;;;;;\n111E6;SINHALA ARCHAIC DIGIT SIX;No;0;L;;;;6;N;;;;;\n111E7;SINHALA ARCHAIC DIGIT SEVEN;No;0;L;;;;7;N;;;;;\n111E8;SINHALA ARCHAIC DIGIT EIGHT;No;0;L;;;;8;N;;;;;\n111E9;SINHALA ARCHAIC DIGIT NINE;No;0;L;;;;9;N;;;;;\n111EA;SINHALA ARCHAIC NUMBER TEN;No;0;L;;;;10;N;;;;;\n111EB;SINHALA ARCHAIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;\n111EC;SINHALA ARCHAIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;\n111ED;SINHALA ARCHAIC NUMBER FORTY;No;0;L;;;;40;N;;;;;\n111EE;SINHALA ARCHAIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;\n111EF;SINHALA ARCHAIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;\n111F0;SINHALA ARCHAIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;\n111F1;SINHALA ARCHAIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;\n111F2;SINHALA ARCHAIC NUMBER NINETY;No;0;L;;;;90;N;;;;;\n111F3;SINHALA ARCHAIC NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;\n111F4;SINHALA ARCHAIC NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;\n11200;KHOJKI LETTER A;Lo;0;L;;;;;N;;;;;\n11201;KHOJKI LETTER AA;Lo;0;L;;;;;N;;;;;\n11202;KHOJKI LETTER I;Lo;0;L;;;;;N;;;;;\n11203;KHOJKI LETTER U;Lo;0;L;;;;;N;;;;;\n11204;KHOJKI LETTER E;Lo;0;L;;;;;N;;;;;\n11205;KHOJKI LETTER AI;Lo;0;L;;;;;N;;;;;\n11206;KHOJKI LETTER O;Lo;0;L;;;;;N;;;;;\n11207;KHOJKI LETTER AU;Lo;0;L;;;;;N;;;;;\n11208;KHOJKI LETTER KA;Lo;0;L;;;;;N;;;;;\n11209;KHOJKI LETTER KHA;Lo;0;L;;;;;N;;;;;\n1120A;KHOJKI LETTER GA;Lo;0;L;;;;;N;;;;;\n1120B;KHOJKI LETTER GGA;Lo;0;L;;;;;N;;;;;\n1120C;KHOJKI LETTER GHA;Lo;0;L;;;;;N;;;;;\n1120D;KHOJKI LETTER NGA;Lo;0;L;;;;;N;;;;;\n1120E;KHOJKI LETTER CA;Lo;0;L;;;;;N;;;;;\n1120F;KHOJKI LETTER CHA;Lo;0;L;;;;;N;;;;;\n11210;KHOJKI LETTER JA;Lo;0;L;;;;;N;;;;;\n11211;KHOJKI LETTER JJA;Lo;0;L;;;;;N;;;;;\n11213;KHOJKI LETTER NYA;Lo;0;L;;;;;N;;;;;\n11214;KHOJKI LETTER TTA;Lo;0;L;;;;;N;;;;;\n11215;KHOJKI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11216;KHOJKI LETTER DDA;Lo;0;L;;;;;N;;;;;\n11217;KHOJKI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11218;KHOJKI LETTER NNA;Lo;0;L;;;;;N;;;;;\n11219;KHOJKI LETTER TA;Lo;0;L;;;;;N;;;;;\n1121A;KHOJKI LETTER THA;Lo;0;L;;;;;N;;;;;\n1121B;KHOJKI LETTER DA;Lo;0;L;;;;;N;;;;;\n1121C;KHOJKI LETTER DDDA;Lo;0;L;;;;;N;;;;;\n1121D;KHOJKI LETTER DHA;Lo;0;L;;;;;N;;;;;\n1121E;KHOJKI LETTER NA;Lo;0;L;;;;;N;;;;;\n1121F;KHOJKI LETTER PA;Lo;0;L;;;;;N;;;;;\n11220;KHOJKI LETTER PHA;Lo;0;L;;;;;N;;;;;\n11221;KHOJKI LETTER BA;Lo;0;L;;;;;N;;;;;\n11222;KHOJKI LETTER BBA;Lo;0;L;;;;;N;;;;;\n11223;KHOJKI LETTER BHA;Lo;0;L;;;;;N;;;;;\n11224;KHOJKI LETTER MA;Lo;0;L;;;;;N;;;;;\n11225;KHOJKI LETTER YA;Lo;0;L;;;;;N;;;;;\n11226;KHOJKI LETTER RA;Lo;0;L;;;;;N;;;;;\n11227;KHOJKI LETTER LA;Lo;0;L;;;;;N;;;;;\n11228;KHOJKI LETTER VA;Lo;0;L;;;;;N;;;;;\n11229;KHOJKI LETTER SA;Lo;0;L;;;;;N;;;;;\n1122A;KHOJKI LETTER HA;Lo;0;L;;;;;N;;;;;\n1122B;KHOJKI LETTER LLA;Lo;0;L;;;;;N;;;;;\n1122C;KHOJKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n1122D;KHOJKI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n1122E;KHOJKI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n1122F;KHOJKI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n11230;KHOJKI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n11231;KHOJKI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n11232;KHOJKI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n11233;KHOJKI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n11234;KHOJKI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11235;KHOJKI SIGN VIRAMA;Mc;9;L;;;;;N;;;;;\n11236;KHOJKI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n11237;KHOJKI SIGN SHADDA;Mn;0;NSM;;;;;N;;;;;\n11238;KHOJKI DANDA;Po;0;L;;;;;N;;;;;\n11239;KHOJKI DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n1123A;KHOJKI WORD SEPARATOR;Po;0;L;;;;;N;;;;;\n1123B;KHOJKI SECTION MARK;Po;0;L;;;;;N;;;;;\n1123C;KHOJKI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;\n1123D;KHOJKI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n1123E;KHOJKI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;;\n1123F;KHOJKI LETTER QA;Lo;0;L;;;;;N;;;;;\n11240;KHOJKI LETTER SHORT I;Lo;0;L;;;;;N;;;;;\n11241;KHOJKI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n11280;MULTANI LETTER A;Lo;0;L;;;;;N;;;;;\n11281;MULTANI LETTER I;Lo;0;L;;;;;N;;;;;\n11282;MULTANI LETTER U;Lo;0;L;;;;;N;;;;;\n11283;MULTANI LETTER E;Lo;0;L;;;;;N;;;;;\n11284;MULTANI LETTER KA;Lo;0;L;;;;;N;;;;;\n11285;MULTANI LETTER KHA;Lo;0;L;;;;;N;;;;;\n11286;MULTANI LETTER GA;Lo;0;L;;;;;N;;;;;\n11288;MULTANI LETTER GHA;Lo;0;L;;;;;N;;;;;\n1128A;MULTANI LETTER CA;Lo;0;L;;;;;N;;;;;\n1128B;MULTANI LETTER CHA;Lo;0;L;;;;;N;;;;;\n1128C;MULTANI LETTER JA;Lo;0;L;;;;;N;;;;;\n1128D;MULTANI LETTER JJA;Lo;0;L;;;;;N;;;;;\n1128F;MULTANI LETTER NYA;Lo;0;L;;;;;N;;;;;\n11290;MULTANI LETTER TTA;Lo;0;L;;;;;N;;;;;\n11291;MULTANI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11292;MULTANI LETTER DDA;Lo;0;L;;;;;N;;;;;\n11293;MULTANI LETTER DDDA;Lo;0;L;;;;;N;;;;;\n11294;MULTANI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11295;MULTANI LETTER NNA;Lo;0;L;;;;;N;;;;;\n11296;MULTANI LETTER TA;Lo;0;L;;;;;N;;;;;\n11297;MULTANI LETTER THA;Lo;0;L;;;;;N;;;;;\n11298;MULTANI LETTER DA;Lo;0;L;;;;;N;;;;;\n11299;MULTANI LETTER DHA;Lo;0;L;;;;;N;;;;;\n1129A;MULTANI LETTER NA;Lo;0;L;;;;;N;;;;;\n1129B;MULTANI LETTER PA;Lo;0;L;;;;;N;;;;;\n1129C;MULTANI LETTER PHA;Lo;0;L;;;;;N;;;;;\n1129D;MULTANI LETTER BA;Lo;0;L;;;;;N;;;;;\n1129F;MULTANI LETTER BHA;Lo;0;L;;;;;N;;;;;\n112A0;MULTANI LETTER MA;Lo;0;L;;;;;N;;;;;\n112A1;MULTANI LETTER YA;Lo;0;L;;;;;N;;;;;\n112A2;MULTANI LETTER RA;Lo;0;L;;;;;N;;;;;\n112A3;MULTANI LETTER LA;Lo;0;L;;;;;N;;;;;\n112A4;MULTANI LETTER VA;Lo;0;L;;;;;N;;;;;\n112A5;MULTANI LETTER SA;Lo;0;L;;;;;N;;;;;\n112A6;MULTANI LETTER HA;Lo;0;L;;;;;N;;;;;\n112A7;MULTANI LETTER RRA;Lo;0;L;;;;;N;;;;;\n112A8;MULTANI LETTER RHA;Lo;0;L;;;;;N;;;;;\n112A9;MULTANI SECTION MARK;Po;0;L;;;;;N;;;;;\n112B0;KHUDAWADI LETTER A;Lo;0;L;;;;;N;;;;;\n112B1;KHUDAWADI LETTER AA;Lo;0;L;;;;;N;;;;;\n112B2;KHUDAWADI LETTER I;Lo;0;L;;;;;N;;;;;\n112B3;KHUDAWADI LETTER II;Lo;0;L;;;;;N;;;;;\n112B4;KHUDAWADI LETTER U;Lo;0;L;;;;;N;;;;;\n112B5;KHUDAWADI LETTER UU;Lo;0;L;;;;;N;;;;;\n112B6;KHUDAWADI LETTER E;Lo;0;L;;;;;N;;;;;\n112B7;KHUDAWADI LETTER AI;Lo;0;L;;;;;N;;;;;\n112B8;KHUDAWADI LETTER O;Lo;0;L;;;;;N;;;;;\n112B9;KHUDAWADI LETTER AU;Lo;0;L;;;;;N;;;;;\n112BA;KHUDAWADI LETTER KA;Lo;0;L;;;;;N;;;;;\n112BB;KHUDAWADI LETTER KHA;Lo;0;L;;;;;N;;;;;\n112BC;KHUDAWADI LETTER GA;Lo;0;L;;;;;N;;;;;\n112BD;KHUDAWADI LETTER GGA;Lo;0;L;;;;;N;;;;;\n112BE;KHUDAWADI LETTER GHA;Lo;0;L;;;;;N;;;;;\n112BF;KHUDAWADI LETTER NGA;Lo;0;L;;;;;N;;;;;\n112C0;KHUDAWADI LETTER CA;Lo;0;L;;;;;N;;;;;\n112C1;KHUDAWADI LETTER CHA;Lo;0;L;;;;;N;;;;;\n112C2;KHUDAWADI LETTER JA;Lo;0;L;;;;;N;;;;;\n112C3;KHUDAWADI LETTER JJA;Lo;0;L;;;;;N;;;;;\n112C4;KHUDAWADI LETTER JHA;Lo;0;L;;;;;N;;;;;\n112C5;KHUDAWADI LETTER NYA;Lo;0;L;;;;;N;;;;;\n112C6;KHUDAWADI LETTER TTA;Lo;0;L;;;;;N;;;;;\n112C7;KHUDAWADI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n112C8;KHUDAWADI LETTER DDA;Lo;0;L;;;;;N;;;;;\n112C9;KHUDAWADI LETTER DDDA;Lo;0;L;;;;;N;;;;;\n112CA;KHUDAWADI LETTER RRA;Lo;0;L;;;;;N;;;;;\n112CB;KHUDAWADI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n112CC;KHUDAWADI LETTER NNA;Lo;0;L;;;;;N;;;;;\n112CD;KHUDAWADI LETTER TA;Lo;0;L;;;;;N;;;;;\n112CE;KHUDAWADI LETTER THA;Lo;0;L;;;;;N;;;;;\n112CF;KHUDAWADI LETTER DA;Lo;0;L;;;;;N;;;;;\n112D0;KHUDAWADI LETTER DHA;Lo;0;L;;;;;N;;;;;\n112D1;KHUDAWADI LETTER NA;Lo;0;L;;;;;N;;;;;\n112D2;KHUDAWADI LETTER PA;Lo;0;L;;;;;N;;;;;\n112D3;KHUDAWADI LETTER PHA;Lo;0;L;;;;;N;;;;;\n112D4;KHUDAWADI LETTER BA;Lo;0;L;;;;;N;;;;;\n112D5;KHUDAWADI LETTER BBA;Lo;0;L;;;;;N;;;;;\n112D6;KHUDAWADI LETTER BHA;Lo;0;L;;;;;N;;;;;\n112D7;KHUDAWADI LETTER MA;Lo;0;L;;;;;N;;;;;\n112D8;KHUDAWADI LETTER YA;Lo;0;L;;;;;N;;;;;\n112D9;KHUDAWADI LETTER RA;Lo;0;L;;;;;N;;;;;\n112DA;KHUDAWADI LETTER LA;Lo;0;L;;;;;N;;;;;\n112DB;KHUDAWADI LETTER VA;Lo;0;L;;;;;N;;;;;\n112DC;KHUDAWADI LETTER SHA;Lo;0;L;;;;;N;;;;;\n112DD;KHUDAWADI LETTER SA;Lo;0;L;;;;;N;;;;;\n112DE;KHUDAWADI LETTER HA;Lo;0;L;;;;;N;;;;;\n112DF;KHUDAWADI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n112E0;KHUDAWADI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n112E1;KHUDAWADI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n112E2;KHUDAWADI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n112E3;KHUDAWADI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n112E4;KHUDAWADI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n112E5;KHUDAWADI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n112E6;KHUDAWADI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n112E7;KHUDAWADI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n112E8;KHUDAWADI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;\n112E9;KHUDAWADI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n112EA;KHUDAWADI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n112F0;KHUDAWADI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n112F1;KHUDAWADI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n112F2;KHUDAWADI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n112F3;KHUDAWADI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n112F4;KHUDAWADI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n112F5;KHUDAWADI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n112F6;KHUDAWADI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n112F7;KHUDAWADI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n112F8;KHUDAWADI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n112F9;KHUDAWADI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11300;GRANTHA SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;;\n11301;GRANTHA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n11302;GRANTHA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;\n11303;GRANTHA SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n11305;GRANTHA LETTER A;Lo;0;L;;;;;N;;;;;\n11306;GRANTHA LETTER AA;Lo;0;L;;;;;N;;;;;\n11307;GRANTHA LETTER I;Lo;0;L;;;;;N;;;;;\n11308;GRANTHA LETTER II;Lo;0;L;;;;;N;;;;;\n11309;GRANTHA LETTER U;Lo;0;L;;;;;N;;;;;\n1130A;GRANTHA LETTER UU;Lo;0;L;;;;;N;;;;;\n1130B;GRANTHA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n1130C;GRANTHA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n1130F;GRANTHA LETTER EE;Lo;0;L;;;;;N;;;;;\n11310;GRANTHA LETTER AI;Lo;0;L;;;;;N;;;;;\n11313;GRANTHA LETTER OO;Lo;0;L;;;;;N;;;;;\n11314;GRANTHA LETTER AU;Lo;0;L;;;;;N;;;;;\n11315;GRANTHA LETTER KA;Lo;0;L;;;;;N;;;;;\n11316;GRANTHA LETTER KHA;Lo;0;L;;;;;N;;;;;\n11317;GRANTHA LETTER GA;Lo;0;L;;;;;N;;;;;\n11318;GRANTHA LETTER GHA;Lo;0;L;;;;;N;;;;;\n11319;GRANTHA LETTER NGA;Lo;0;L;;;;;N;;;;;\n1131A;GRANTHA LETTER CA;Lo;0;L;;;;;N;;;;;\n1131B;GRANTHA LETTER CHA;Lo;0;L;;;;;N;;;;;\n1131C;GRANTHA LETTER JA;Lo;0;L;;;;;N;;;;;\n1131D;GRANTHA LETTER JHA;Lo;0;L;;;;;N;;;;;\n1131E;GRANTHA LETTER NYA;Lo;0;L;;;;;N;;;;;\n1131F;GRANTHA LETTER TTA;Lo;0;L;;;;;N;;;;;\n11320;GRANTHA LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11321;GRANTHA LETTER DDA;Lo;0;L;;;;;N;;;;;\n11322;GRANTHA LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11323;GRANTHA LETTER NNA;Lo;0;L;;;;;N;;;;;\n11324;GRANTHA LETTER TA;Lo;0;L;;;;;N;;;;;\n11325;GRANTHA LETTER THA;Lo;0;L;;;;;N;;;;;\n11326;GRANTHA LETTER DA;Lo;0;L;;;;;N;;;;;\n11327;GRANTHA LETTER DHA;Lo;0;L;;;;;N;;;;;\n11328;GRANTHA LETTER NA;Lo;0;L;;;;;N;;;;;\n1132A;GRANTHA LETTER PA;Lo;0;L;;;;;N;;;;;\n1132B;GRANTHA LETTER PHA;Lo;0;L;;;;;N;;;;;\n1132C;GRANTHA LETTER BA;Lo;0;L;;;;;N;;;;;\n1132D;GRANTHA LETTER BHA;Lo;0;L;;;;;N;;;;;\n1132E;GRANTHA LETTER MA;Lo;0;L;;;;;N;;;;;\n1132F;GRANTHA LETTER YA;Lo;0;L;;;;;N;;;;;\n11330;GRANTHA LETTER RA;Lo;0;L;;;;;N;;;;;\n11332;GRANTHA LETTER LA;Lo;0;L;;;;;N;;;;;\n11333;GRANTHA LETTER LLA;Lo;0;L;;;;;N;;;;;\n11335;GRANTHA LETTER VA;Lo;0;L;;;;;N;;;;;\n11336;GRANTHA LETTER SHA;Lo;0;L;;;;;N;;;;;\n11337;GRANTHA LETTER SSA;Lo;0;L;;;;;N;;;;;\n11338;GRANTHA LETTER SA;Lo;0;L;;;;;N;;;;;\n11339;GRANTHA LETTER HA;Lo;0;L;;;;;N;;;;;\n1133B;COMBINING BINDU BELOW;Mn;7;NSM;;;;;N;;;;;\n1133C;GRANTHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n1133D;GRANTHA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n1133E;GRANTHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n1133F;GRANTHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n11340;GRANTHA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n11341;GRANTHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;\n11342;GRANTHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;\n11343;GRANTHA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;\n11344;GRANTHA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;\n11347;GRANTHA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;\n11348;GRANTHA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\n1134B;GRANTHA VOWEL SIGN OO;Mc;0;L;11347 1133E;;;;N;;;;;\n1134C;GRANTHA VOWEL SIGN AU;Mc;0;L;11347 11357;;;;N;;;;;\n1134D;GRANTHA SIGN VIRAMA;Mc;9;L;;;;;N;;;;;\n11350;GRANTHA OM;Lo;0;L;;;;;N;;;;;\n11357;GRANTHA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;\n1135D;GRANTHA SIGN PLUTA;Lo;0;L;;;;;N;;;;;\n1135E;GRANTHA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;\n1135F;GRANTHA LETTER VEDIC DOUBLE ANUSVARA;Lo;0;L;;;;;N;;;;;\n11360;GRANTHA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n11361;GRANTHA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n11362;GRANTHA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;;\n11363;GRANTHA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;;\n11366;COMBINING GRANTHA DIGIT ZERO;Mn;230;NSM;;;;;N;;;;;\n11367;COMBINING GRANTHA DIGIT ONE;Mn;230;NSM;;;;;N;;;;;\n11368;COMBINING GRANTHA DIGIT TWO;Mn;230;NSM;;;;;N;;;;;\n11369;COMBINING GRANTHA DIGIT THREE;Mn;230;NSM;;;;;N;;;;;\n1136A;COMBINING GRANTHA DIGIT FOUR;Mn;230;NSM;;;;;N;;;;;\n1136B;COMBINING GRANTHA DIGIT FIVE;Mn;230;NSM;;;;;N;;;;;\n1136C;COMBINING GRANTHA DIGIT SIX;Mn;230;NSM;;;;;N;;;;;\n11370;COMBINING GRANTHA LETTER A;Mn;230;NSM;;;;;N;;;;;\n11371;COMBINING GRANTHA LETTER KA;Mn;230;NSM;;;;;N;;;;;\n11372;COMBINING GRANTHA LETTER NA;Mn;230;NSM;;;;;N;;;;;\n11373;COMBINING GRANTHA LETTER VI;Mn;230;NSM;;;;;N;;;;;\n11374;COMBINING GRANTHA LETTER PA;Mn;230;NSM;;;;;N;;;;;\n11380;TULU-TIGALARI LETTER A;Lo;0;L;;;;;N;;;;;\n11381;TULU-TIGALARI LETTER AA;Lo;0;L;;;;;N;;;;;\n11382;TULU-TIGALARI LETTER I;Lo;0;L;;;;;N;;;;;\n11383;TULU-TIGALARI LETTER II;Lo;0;L;11382 113C9;;;;N;;;;;\n11384;TULU-TIGALARI LETTER U;Lo;0;L;;;;;N;;;;;\n11385;TULU-TIGALARI LETTER UU;Lo;0;L;11384 113BB;;;;N;;;;;\n11386;TULU-TIGALARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n11387;TULU-TIGALARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n11388;TULU-TIGALARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n11389;TULU-TIGALARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n1138B;TULU-TIGALARI LETTER EE;Lo;0;L;;;;;N;;;;;\n1138E;TULU-TIGALARI LETTER AI;Lo;0;L;1138B 113C2;;;;N;;;;;\n11390;TULU-TIGALARI LETTER OO;Lo;0;L;;;;;N;;;;;\n11391;TULU-TIGALARI LETTER AU;Lo;0;L;11390 113C9;;;;N;;;;;\n11392;TULU-TIGALARI LETTER KA;Lo;0;L;;;;;N;;;;;\n11393;TULU-TIGALARI LETTER KHA;Lo;0;L;;;;;N;;;;;\n11394;TULU-TIGALARI LETTER GA;Lo;0;L;;;;;N;;;;;\n11395;TULU-TIGALARI LETTER GHA;Lo;0;L;;;;;N;;;;;\n11396;TULU-TIGALARI LETTER NGA;Lo;0;L;;;;;N;;;;;\n11397;TULU-TIGALARI LETTER CA;Lo;0;L;;;;;N;;;;;\n11398;TULU-TIGALARI LETTER CHA;Lo;0;L;;;;;N;;;;;\n11399;TULU-TIGALARI LETTER JA;Lo;0;L;;;;;N;;;;;\n1139A;TULU-TIGALARI LETTER JHA;Lo;0;L;;;;;N;;;;;\n1139B;TULU-TIGALARI LETTER NYA;Lo;0;L;;;;;N;;;;;\n1139C;TULU-TIGALARI LETTER TTA;Lo;0;L;;;;;N;;;;;\n1139D;TULU-TIGALARI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n1139E;TULU-TIGALARI LETTER DDA;Lo;0;L;;;;;N;;;;;\n1139F;TULU-TIGALARI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n113A0;TULU-TIGALARI LETTER NNA;Lo;0;L;;;;;N;;;;;\n113A1;TULU-TIGALARI LETTER TA;Lo;0;L;;;;;N;;;;;\n113A2;TULU-TIGALARI LETTER THA;Lo;0;L;;;;;N;;;;;\n113A3;TULU-TIGALARI LETTER DA;Lo;0;L;;;;;N;;;;;\n113A4;TULU-TIGALARI LETTER DHA;Lo;0;L;;;;;N;;;;;\n113A5;TULU-TIGALARI LETTER NA;Lo;0;L;;;;;N;;;;;\n113A6;TULU-TIGALARI LETTER PA;Lo;0;L;;;;;N;;;;;\n113A7;TULU-TIGALARI LETTER PHA;Lo;0;L;;;;;N;;;;;\n113A8;TULU-TIGALARI LETTER BA;Lo;0;L;;;;;N;;;;;\n113A9;TULU-TIGALARI LETTER BHA;Lo;0;L;;;;;N;;;;;\n113AA;TULU-TIGALARI LETTER MA;Lo;0;L;;;;;N;;;;;\n113AB;TULU-TIGALARI LETTER YA;Lo;0;L;;;;;N;;;;;\n113AC;TULU-TIGALARI LETTER RA;Lo;0;L;;;;;N;;;;;\n113AD;TULU-TIGALARI LETTER LA;Lo;0;L;;;;;N;;;;;\n113AE;TULU-TIGALARI LETTER VA;Lo;0;L;;;;;N;;;;;\n113AF;TULU-TIGALARI LETTER SHA;Lo;0;L;;;;;N;;;;;\n113B0;TULU-TIGALARI LETTER SSA;Lo;0;L;;;;;N;;;;;\n113B1;TULU-TIGALARI LETTER SA;Lo;0;L;;;;;N;;;;;\n113B2;TULU-TIGALARI LETTER HA;Lo;0;L;;;;;N;;;;;\n113B3;TULU-TIGALARI LETTER LLA;Lo;0;L;;;;;N;;;;;\n113B4;TULU-TIGALARI LETTER RRA;Lo;0;L;;;;;N;;;;;\n113B5;TULU-TIGALARI LETTER LLLA;Lo;0;L;;;;;N;;;;;\n113B7;TULU-TIGALARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n113B8;TULU-TIGALARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n113B9;TULU-TIGALARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n113BA;TULU-TIGALARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n113BB;TULU-TIGALARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n113BC;TULU-TIGALARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n113BD;TULU-TIGALARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n113BE;TULU-TIGALARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n113BF;TULU-TIGALARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n113C0;TULU-TIGALARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n113C2;TULU-TIGALARI VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;\n113C5;TULU-TIGALARI VOWEL SIGN AI;Mc;0;L;113C2 113C2;;;;N;;;;;\n113C7;TULU-TIGALARI VOWEL SIGN OO;Mc;0;L;113C2 113B8;;;;N;;;;;\n113C8;TULU-TIGALARI VOWEL SIGN AU;Mc;0;L;113C2 113C9;;;;N;;;;;\n113C9;TULU-TIGALARI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;\n113CA;TULU-TIGALARI SIGN CANDRA ANUNASIKA;Mc;0;L;;;;;N;;;;;\n113CC;TULU-TIGALARI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;\n113CD;TULU-TIGALARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n113CE;TULU-TIGALARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n113CF;TULU-TIGALARI SIGN LOOPED VIRAMA;Mc;9;L;;;;;N;;;;;\n113D0;TULU-TIGALARI CONJOINER;Mn;9;NSM;;;;;N;;;;;\n113D1;TULU-TIGALARI REPHA;Lo;0;L;;;;;N;;;;;\n113D2;TULU-TIGALARI GEMINATION MARK;Mn;0;NSM;;;;;N;;;;;\n113D3;TULU-TIGALARI SIGN PLUTA;Lo;0;L;;;;;N;;;;;\n113D4;TULU-TIGALARI DANDA;Po;0;L;;;;;N;;;;;\n113D5;TULU-TIGALARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n113D7;TULU-TIGALARI SIGN OM PUSHPIKA;Po;0;L;;;;;N;;;;;\n113D8;TULU-TIGALARI SIGN SHRII PUSHPIKA;Po;0;L;;;;;N;;;;;\n113E1;TULU-TIGALARI VEDIC TONE SVARITA;Mn;0;NSM;;;;;N;;;;;\n113E2;TULU-TIGALARI VEDIC TONE ANUDATTA;Mn;0;NSM;;;;;N;;;;;\n11400;NEWA LETTER A;Lo;0;L;;;;;N;;;;;\n11401;NEWA LETTER AA;Lo;0;L;;;;;N;;;;;\n11402;NEWA LETTER I;Lo;0;L;;;;;N;;;;;\n11403;NEWA LETTER II;Lo;0;L;;;;;N;;;;;\n11404;NEWA LETTER U;Lo;0;L;;;;;N;;;;;\n11405;NEWA LETTER UU;Lo;0;L;;;;;N;;;;;\n11406;NEWA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n11407;NEWA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n11408;NEWA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n11409;NEWA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n1140A;NEWA LETTER E;Lo;0;L;;;;;N;;;;;\n1140B;NEWA LETTER AI;Lo;0;L;;;;;N;;;;;\n1140C;NEWA LETTER O;Lo;0;L;;;;;N;;;;;\n1140D;NEWA LETTER AU;Lo;0;L;;;;;N;;;;;\n1140E;NEWA LETTER KA;Lo;0;L;;;;;N;;;;;\n1140F;NEWA LETTER KHA;Lo;0;L;;;;;N;;;;;\n11410;NEWA LETTER GA;Lo;0;L;;;;;N;;;;;\n11411;NEWA LETTER GHA;Lo;0;L;;;;;N;;;;;\n11412;NEWA LETTER NGA;Lo;0;L;;;;;N;;;;;\n11413;NEWA LETTER NGHA;Lo;0;L;;;;;N;;;;;\n11414;NEWA LETTER CA;Lo;0;L;;;;;N;;;;;\n11415;NEWA LETTER CHA;Lo;0;L;;;;;N;;;;;\n11416;NEWA LETTER JA;Lo;0;L;;;;;N;;;;;\n11417;NEWA LETTER JHA;Lo;0;L;;;;;N;;;;;\n11418;NEWA LETTER NYA;Lo;0;L;;;;;N;;;;;\n11419;NEWA LETTER NYHA;Lo;0;L;;;;;N;;;;;\n1141A;NEWA LETTER TTA;Lo;0;L;;;;;N;;;;;\n1141B;NEWA LETTER TTHA;Lo;0;L;;;;;N;;;;;\n1141C;NEWA LETTER DDA;Lo;0;L;;;;;N;;;;;\n1141D;NEWA LETTER DDHA;Lo;0;L;;;;;N;;;;;\n1141E;NEWA LETTER NNA;Lo;0;L;;;;;N;;;;;\n1141F;NEWA LETTER TA;Lo;0;L;;;;;N;;;;;\n11420;NEWA LETTER THA;Lo;0;L;;;;;N;;;;;\n11421;NEWA LETTER DA;Lo;0;L;;;;;N;;;;;\n11422;NEWA LETTER DHA;Lo;0;L;;;;;N;;;;;\n11423;NEWA LETTER NA;Lo;0;L;;;;;N;;;;;\n11424;NEWA LETTER NHA;Lo;0;L;;;;;N;;;;;\n11425;NEWA LETTER PA;Lo;0;L;;;;;N;;;;;\n11426;NEWA LETTER PHA;Lo;0;L;;;;;N;;;;;\n11427;NEWA LETTER BA;Lo;0;L;;;;;N;;;;;\n11428;NEWA LETTER BHA;Lo;0;L;;;;;N;;;;;\n11429;NEWA LETTER MA;Lo;0;L;;;;;N;;;;;\n1142A;NEWA LETTER MHA;Lo;0;L;;;;;N;;;;;\n1142B;NEWA LETTER YA;Lo;0;L;;;;;N;;;;;\n1142C;NEWA LETTER RA;Lo;0;L;;;;;N;;;;;\n1142D;NEWA LETTER RHA;Lo;0;L;;;;;N;;;;;\n1142E;NEWA LETTER LA;Lo;0;L;;;;;N;;;;;\n1142F;NEWA LETTER LHA;Lo;0;L;;;;;N;;;;;\n11430;NEWA LETTER WA;Lo;0;L;;;;;N;;;;;\n11431;NEWA LETTER SHA;Lo;0;L;;;;;N;;;;;\n11432;NEWA LETTER SSA;Lo;0;L;;;;;N;;;;;\n11433;NEWA LETTER SA;Lo;0;L;;;;;N;;;;;\n11434;NEWA LETTER HA;Lo;0;L;;;;;N;;;;;\n11435;NEWA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n11436;NEWA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n11437;NEWA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n11438;NEWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n11439;NEWA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n1143A;NEWA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n1143B;NEWA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n1143C;NEWA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n1143D;NEWA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n1143E;NEWA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n1143F;NEWA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n11440;NEWA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n11441;NEWA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n11442;NEWA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n11443;NEWA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n11444;NEWA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11445;NEWA SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n11446;NEWA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n11447;NEWA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n11448;NEWA SIGN FINAL ANUSVARA;Lo;0;L;;;;;N;;;;;\n11449;NEWA OM;Lo;0;L;;;;;N;;;;;\n1144A;NEWA SIDDHI;Lo;0;L;;;;;N;;;;;\n1144B;NEWA DANDA;Po;0;L;;;;;N;;;;;\n1144C;NEWA DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n1144D;NEWA COMMA;Po;0;L;;;;;N;;;;;\n1144E;NEWA GAP FILLER;Po;0;L;;;;;N;;;;;\n1144F;NEWA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n11450;NEWA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n11451;NEWA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n11452;NEWA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n11453;NEWA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n11454;NEWA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n11455;NEWA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n11456;NEWA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n11457;NEWA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n11458;NEWA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n11459;NEWA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1145A;NEWA DOUBLE COMMA;Po;0;L;;;;;N;;;;;\n1145B;NEWA PLACEHOLDER MARK;Po;0;L;;;;;N;;;;;\n1145D;NEWA INSERTION SIGN;Po;0;L;;;;;N;;;;;\n1145E;NEWA SANDHI MARK;Mn;230;NSM;;;;;N;;;;;\n1145F;NEWA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;\n11460;NEWA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;\n11461;NEWA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;\n11480;TIRHUTA ANJI;Lo;0;L;;;;;N;;;;;\n11481;TIRHUTA LETTER A;Lo;0;L;;;;;N;;;;;\n11482;TIRHUTA LETTER AA;Lo;0;L;;;;;N;;;;;\n11483;TIRHUTA LETTER I;Lo;0;L;;;;;N;;;;;\n11484;TIRHUTA LETTER II;Lo;0;L;;;;;N;;;;;\n11485;TIRHUTA LETTER U;Lo;0;L;;;;;N;;;;;\n11486;TIRHUTA LETTER UU;Lo;0;L;;;;;N;;;;;\n11487;TIRHUTA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n11488;TIRHUTA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n11489;TIRHUTA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n1148A;TIRHUTA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n1148B;TIRHUTA LETTER E;Lo;0;L;;;;;N;;;;;\n1148C;TIRHUTA LETTER AI;Lo;0;L;;;;;N;;;;;\n1148D;TIRHUTA LETTER O;Lo;0;L;;;;;N;;;;;\n1148E;TIRHUTA LETTER AU;Lo;0;L;;;;;N;;;;;\n1148F;TIRHUTA LETTER KA;Lo;0;L;;;;;N;;;;;\n11490;TIRHUTA LETTER KHA;Lo;0;L;;;;;N;;;;;\n11491;TIRHUTA LETTER GA;Lo;0;L;;;;;N;;;;;\n11492;TIRHUTA LETTER GHA;Lo;0;L;;;;;N;;;;;\n11493;TIRHUTA LETTER NGA;Lo;0;L;;;;;N;;;;;\n11494;TIRHUTA LETTER CA;Lo;0;L;;;;;N;;;;;\n11495;TIRHUTA LETTER CHA;Lo;0;L;;;;;N;;;;;\n11496;TIRHUTA LETTER JA;Lo;0;L;;;;;N;;;;;\n11497;TIRHUTA LETTER JHA;Lo;0;L;;;;;N;;;;;\n11498;TIRHUTA LETTER NYA;Lo;0;L;;;;;N;;;;;\n11499;TIRHUTA LETTER TTA;Lo;0;L;;;;;N;;;;;\n1149A;TIRHUTA LETTER TTHA;Lo;0;L;;;;;N;;;;;\n1149B;TIRHUTA LETTER DDA;Lo;0;L;;;;;N;;;;;\n1149C;TIRHUTA LETTER DDHA;Lo;0;L;;;;;N;;;;;\n1149D;TIRHUTA LETTER NNA;Lo;0;L;;;;;N;;;;;\n1149E;TIRHUTA LETTER TA;Lo;0;L;;;;;N;;;;;\n1149F;TIRHUTA LETTER THA;Lo;0;L;;;;;N;;;;;\n114A0;TIRHUTA LETTER DA;Lo;0;L;;;;;N;;;;;\n114A1;TIRHUTA LETTER DHA;Lo;0;L;;;;;N;;;;;\n114A2;TIRHUTA LETTER NA;Lo;0;L;;;;;N;;;;;\n114A3;TIRHUTA LETTER PA;Lo;0;L;;;;;N;;;;;\n114A4;TIRHUTA LETTER PHA;Lo;0;L;;;;;N;;;;;\n114A5;TIRHUTA LETTER BA;Lo;0;L;;;;;N;;;;;\n114A6;TIRHUTA LETTER BHA;Lo;0;L;;;;;N;;;;;\n114A7;TIRHUTA LETTER MA;Lo;0;L;;;;;N;;;;;\n114A8;TIRHUTA LETTER YA;Lo;0;L;;;;;N;;;;;\n114A9;TIRHUTA LETTER RA;Lo;0;L;;;;;N;;;;;\n114AA;TIRHUTA LETTER LA;Lo;0;L;;;;;N;;;;;\n114AB;TIRHUTA LETTER VA;Lo;0;L;;;;;N;;;;;\n114AC;TIRHUTA LETTER SHA;Lo;0;L;;;;;N;;;;;\n114AD;TIRHUTA LETTER SSA;Lo;0;L;;;;;N;;;;;\n114AE;TIRHUTA LETTER SA;Lo;0;L;;;;;N;;;;;\n114AF;TIRHUTA LETTER HA;Lo;0;L;;;;;N;;;;;\n114B0;TIRHUTA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n114B1;TIRHUTA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n114B2;TIRHUTA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n114B3;TIRHUTA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n114B4;TIRHUTA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n114B5;TIRHUTA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n114B6;TIRHUTA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n114B7;TIRHUTA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n114B8;TIRHUTA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n114B9;TIRHUTA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n114BA;TIRHUTA VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;\n114BB;TIRHUTA VOWEL SIGN AI;Mc;0;L;114B9 114BA;;;;N;;;;;\n114BC;TIRHUTA VOWEL SIGN O;Mc;0;L;114B9 114B0;;;;N;;;;;\n114BD;TIRHUTA VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;\n114BE;TIRHUTA VOWEL SIGN AU;Mc;0;L;114B9 114BD;;;;N;;;;;\n114BF;TIRHUTA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n114C0;TIRHUTA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n114C1;TIRHUTA SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n114C2;TIRHUTA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n114C3;TIRHUTA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n114C4;TIRHUTA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n114C5;TIRHUTA GVANG;Lo;0;L;;;;;N;;;;;\n114C6;TIRHUTA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n114C7;TIRHUTA OM;Lo;0;L;;;;;N;;;;;\n114D0;TIRHUTA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n114D1;TIRHUTA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n114D2;TIRHUTA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n114D3;TIRHUTA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n114D4;TIRHUTA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n114D5;TIRHUTA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n114D6;TIRHUTA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n114D7;TIRHUTA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n114D8;TIRHUTA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n114D9;TIRHUTA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11580;SIDDHAM LETTER A;Lo;0;L;;;;;N;;;;;\n11581;SIDDHAM LETTER AA;Lo;0;L;;;;;N;;;;;\n11582;SIDDHAM LETTER I;Lo;0;L;;;;;N;;;;;\n11583;SIDDHAM LETTER II;Lo;0;L;;;;;N;;;;;\n11584;SIDDHAM LETTER U;Lo;0;L;;;;;N;;;;;\n11585;SIDDHAM LETTER UU;Lo;0;L;;;;;N;;;;;\n11586;SIDDHAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n11587;SIDDHAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n11588;SIDDHAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n11589;SIDDHAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n1158A;SIDDHAM LETTER E;Lo;0;L;;;;;N;;;;;\n1158B;SIDDHAM LETTER AI;Lo;0;L;;;;;N;;;;;\n1158C;SIDDHAM LETTER O;Lo;0;L;;;;;N;;;;;\n1158D;SIDDHAM LETTER AU;Lo;0;L;;;;;N;;;;;\n1158E;SIDDHAM LETTER KA;Lo;0;L;;;;;N;;;;;\n1158F;SIDDHAM LETTER KHA;Lo;0;L;;;;;N;;;;;\n11590;SIDDHAM LETTER GA;Lo;0;L;;;;;N;;;;;\n11591;SIDDHAM LETTER GHA;Lo;0;L;;;;;N;;;;;\n11592;SIDDHAM LETTER NGA;Lo;0;L;;;;;N;;;;;\n11593;SIDDHAM LETTER CA;Lo;0;L;;;;;N;;;;;\n11594;SIDDHAM LETTER CHA;Lo;0;L;;;;;N;;;;;\n11595;SIDDHAM LETTER JA;Lo;0;L;;;;;N;;;;;\n11596;SIDDHAM LETTER JHA;Lo;0;L;;;;;N;;;;;\n11597;SIDDHAM LETTER NYA;Lo;0;L;;;;;N;;;;;\n11598;SIDDHAM LETTER TTA;Lo;0;L;;;;;N;;;;;\n11599;SIDDHAM LETTER TTHA;Lo;0;L;;;;;N;;;;;\n1159A;SIDDHAM LETTER DDA;Lo;0;L;;;;;N;;;;;\n1159B;SIDDHAM LETTER DDHA;Lo;0;L;;;;;N;;;;;\n1159C;SIDDHAM LETTER NNA;Lo;0;L;;;;;N;;;;;\n1159D;SIDDHAM LETTER TA;Lo;0;L;;;;;N;;;;;\n1159E;SIDDHAM LETTER THA;Lo;0;L;;;;;N;;;;;\n1159F;SIDDHAM LETTER DA;Lo;0;L;;;;;N;;;;;\n115A0;SIDDHAM LETTER DHA;Lo;0;L;;;;;N;;;;;\n115A1;SIDDHAM LETTER NA;Lo;0;L;;;;;N;;;;;\n115A2;SIDDHAM LETTER PA;Lo;0;L;;;;;N;;;;;\n115A3;SIDDHAM LETTER PHA;Lo;0;L;;;;;N;;;;;\n115A4;SIDDHAM LETTER BA;Lo;0;L;;;;;N;;;;;\n115A5;SIDDHAM LETTER BHA;Lo;0;L;;;;;N;;;;;\n115A6;SIDDHAM LETTER MA;Lo;0;L;;;;;N;;;;;\n115A7;SIDDHAM LETTER YA;Lo;0;L;;;;;N;;;;;\n115A8;SIDDHAM LETTER RA;Lo;0;L;;;;;N;;;;;\n115A9;SIDDHAM LETTER LA;Lo;0;L;;;;;N;;;;;\n115AA;SIDDHAM LETTER VA;Lo;0;L;;;;;N;;;;;\n115AB;SIDDHAM LETTER SHA;Lo;0;L;;;;;N;;;;;\n115AC;SIDDHAM LETTER SSA;Lo;0;L;;;;;N;;;;;\n115AD;SIDDHAM LETTER SA;Lo;0;L;;;;;N;;;;;\n115AE;SIDDHAM LETTER HA;Lo;0;L;;;;;N;;;;;\n115AF;SIDDHAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n115B0;SIDDHAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n115B1;SIDDHAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n115B2;SIDDHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n115B3;SIDDHAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n115B4;SIDDHAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n115B5;SIDDHAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n115B8;SIDDHAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n115B9;SIDDHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\n115BA;SIDDHAM VOWEL SIGN O;Mc;0;L;115B8 115AF;;;;N;;;;;\n115BB;SIDDHAM VOWEL SIGN AU;Mc;0;L;115B9 115AF;;;;N;;;;;\n115BC;SIDDHAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n115BD;SIDDHAM SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n115BE;SIDDHAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n115BF;SIDDHAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n115C0;SIDDHAM SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n115C1;SIDDHAM SIGN SIDDHAM;Po;0;L;;;;;N;;;;;\n115C2;SIDDHAM DANDA;Po;0;L;;;;;N;;;;;\n115C3;SIDDHAM DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n115C4;SIDDHAM SEPARATOR DOT;Po;0;L;;;;;N;;;;;\n115C5;SIDDHAM SEPARATOR BAR;Po;0;L;;;;;N;;;;;\n115C6;SIDDHAM REPETITION MARK-1;Po;0;L;;;;;N;;;;;\n115C7;SIDDHAM REPETITION MARK-2;Po;0;L;;;;;N;;;;;\n115C8;SIDDHAM REPETITION MARK-3;Po;0;L;;;;;N;;;;;\n115C9;SIDDHAM END OF TEXT MARK;Po;0;L;;;;;N;;;;;\n115CA;SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS;Po;0;L;;;;;N;;;;;\n115CB;SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS;Po;0;L;;;;;N;;;;;\n115CC;SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS;Po;0;L;;;;;N;;;;;\n115CD;SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS;Po;0;L;;;;;N;;;;;\n115CE;SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS;Po;0;L;;;;;N;;;;;\n115CF;SIDDHAM SECTION MARK DOUBLE RING;Po;0;L;;;;;N;;;;;\n115D0;SIDDHAM SECTION MARK DOUBLE RING WITH RAYS;Po;0;L;;;;;N;;;;;\n115D1;SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS;Po;0;L;;;;;N;;;;;\n115D2;SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS;Po;0;L;;;;;N;;;;;\n115D3;SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS;Po;0;L;;;;;N;;;;;\n115D4;SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS;Po;0;L;;;;;N;;;;;\n115D5;SIDDHAM SECTION MARK WITH CIRCLES AND RAYS;Po;0;L;;;;;N;;;;;\n115D6;SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES;Po;0;L;;;;;N;;;;;\n115D7;SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES;Po;0;L;;;;;N;;;;;\n115D8;SIDDHAM LETTER THREE-CIRCLE ALTERNATE I;Lo;0;L;;;;;N;;;;;\n115D9;SIDDHAM LETTER TWO-CIRCLE ALTERNATE I;Lo;0;L;;;;;N;;;;;\n115DA;SIDDHAM LETTER TWO-CIRCLE ALTERNATE II;Lo;0;L;;;;;N;;;;;\n115DB;SIDDHAM LETTER ALTERNATE U;Lo;0;L;;;;;N;;;;;\n115DC;SIDDHAM VOWEL SIGN ALTERNATE U;Mn;0;NSM;;;;;N;;;;;\n115DD;SIDDHAM VOWEL SIGN ALTERNATE UU;Mn;0;NSM;;;;;N;;;;;\n11600;MODI LETTER A;Lo;0;L;;;;;N;;;;;\n11601;MODI LETTER AA;Lo;0;L;;;;;N;;;;;\n11602;MODI LETTER I;Lo;0;L;;;;;N;;;;;\n11603;MODI LETTER II;Lo;0;L;;;;;N;;;;;\n11604;MODI LETTER U;Lo;0;L;;;;;N;;;;;\n11605;MODI LETTER UU;Lo;0;L;;;;;N;;;;;\n11606;MODI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n11607;MODI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n11608;MODI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n11609;MODI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n1160A;MODI LETTER E;Lo;0;L;;;;;N;;;;;\n1160B;MODI LETTER AI;Lo;0;L;;;;;N;;;;;\n1160C;MODI LETTER O;Lo;0;L;;;;;N;;;;;\n1160D;MODI LETTER AU;Lo;0;L;;;;;N;;;;;\n1160E;MODI LETTER KA;Lo;0;L;;;;;N;;;;;\n1160F;MODI LETTER KHA;Lo;0;L;;;;;N;;;;;\n11610;MODI LETTER GA;Lo;0;L;;;;;N;;;;;\n11611;MODI LETTER GHA;Lo;0;L;;;;;N;;;;;\n11612;MODI LETTER NGA;Lo;0;L;;;;;N;;;;;\n11613;MODI LETTER CA;Lo;0;L;;;;;N;;;;;\n11614;MODI LETTER CHA;Lo;0;L;;;;;N;;;;;\n11615;MODI LETTER JA;Lo;0;L;;;;;N;;;;;\n11616;MODI LETTER JHA;Lo;0;L;;;;;N;;;;;\n11617;MODI LETTER NYA;Lo;0;L;;;;;N;;;;;\n11618;MODI LETTER TTA;Lo;0;L;;;;;N;;;;;\n11619;MODI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n1161A;MODI LETTER DDA;Lo;0;L;;;;;N;;;;;\n1161B;MODI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n1161C;MODI LETTER NNA;Lo;0;L;;;;;N;;;;;\n1161D;MODI LETTER TA;Lo;0;L;;;;;N;;;;;\n1161E;MODI LETTER THA;Lo;0;L;;;;;N;;;;;\n1161F;MODI LETTER DA;Lo;0;L;;;;;N;;;;;\n11620;MODI LETTER DHA;Lo;0;L;;;;;N;;;;;\n11621;MODI LETTER NA;Lo;0;L;;;;;N;;;;;\n11622;MODI LETTER PA;Lo;0;L;;;;;N;;;;;\n11623;MODI LETTER PHA;Lo;0;L;;;;;N;;;;;\n11624;MODI LETTER BA;Lo;0;L;;;;;N;;;;;\n11625;MODI LETTER BHA;Lo;0;L;;;;;N;;;;;\n11626;MODI LETTER MA;Lo;0;L;;;;;N;;;;;\n11627;MODI LETTER YA;Lo;0;L;;;;;N;;;;;\n11628;MODI LETTER RA;Lo;0;L;;;;;N;;;;;\n11629;MODI LETTER LA;Lo;0;L;;;;;N;;;;;\n1162A;MODI LETTER VA;Lo;0;L;;;;;N;;;;;\n1162B;MODI LETTER SHA;Lo;0;L;;;;;N;;;;;\n1162C;MODI LETTER SSA;Lo;0;L;;;;;N;;;;;\n1162D;MODI LETTER SA;Lo;0;L;;;;;N;;;;;\n1162E;MODI LETTER HA;Lo;0;L;;;;;N;;;;;\n1162F;MODI LETTER LLA;Lo;0;L;;;;;N;;;;;\n11630;MODI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n11631;MODI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n11632;MODI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n11633;MODI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n11634;MODI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n11635;MODI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n11636;MODI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n11637;MODI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n11638;MODI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;\n11639;MODI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n1163A;MODI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n1163B;MODI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n1163C;MODI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n1163D;MODI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n1163E;MODI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n1163F;MODI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n11640;MODI SIGN ARDHACANDRA;Mn;0;NSM;;;;;N;;;;;\n11641;MODI DANDA;Po;0;L;;;;;N;;;;;\n11642;MODI DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n11643;MODI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n11644;MODI SIGN HUVA;Lo;0;L;;;;;N;;;;;\n11650;MODI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n11651;MODI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n11652;MODI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n11653;MODI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n11654;MODI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n11655;MODI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n11656;MODI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n11657;MODI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n11658;MODI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n11659;MODI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11660;MONGOLIAN BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;\n11661;MONGOLIAN ROTATED BIRGA;Po;0;ON;;;;;N;;;;;\n11662;MONGOLIAN DOUBLE BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;\n11663;MONGOLIAN TRIPLE BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;\n11664;MONGOLIAN BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;\n11665;MONGOLIAN ROTATED BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;\n11666;MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;\n11667;MONGOLIAN INVERTED BIRGA;Po;0;ON;;;;;N;;;;;\n11668;MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;\n11669;MONGOLIAN SWIRL BIRGA;Po;0;ON;;;;;N;;;;;\n1166A;MONGOLIAN SWIRL BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;\n1166B;MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;\n1166C;MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;\n11680;TAKRI LETTER A;Lo;0;L;;;;;N;;;;;\n11681;TAKRI LETTER AA;Lo;0;L;;;;;N;;;;;\n11682;TAKRI LETTER I;Lo;0;L;;;;;N;;;;;\n11683;TAKRI LETTER II;Lo;0;L;;;;;N;;;;;\n11684;TAKRI LETTER U;Lo;0;L;;;;;N;;;;;\n11685;TAKRI LETTER UU;Lo;0;L;;;;;N;;;;;\n11686;TAKRI LETTER E;Lo;0;L;;;;;N;;;;;\n11687;TAKRI LETTER AI;Lo;0;L;;;;;N;;;;;\n11688;TAKRI LETTER O;Lo;0;L;;;;;N;;;;;\n11689;TAKRI LETTER AU;Lo;0;L;;;;;N;;;;;\n1168A;TAKRI LETTER KA;Lo;0;L;;;;;N;;;;;\n1168B;TAKRI LETTER KHA;Lo;0;L;;;;;N;;;;;\n1168C;TAKRI LETTER GA;Lo;0;L;;;;;N;;;;;\n1168D;TAKRI LETTER GHA;Lo;0;L;;;;;N;;;;;\n1168E;TAKRI LETTER NGA;Lo;0;L;;;;;N;;;;;\n1168F;TAKRI LETTER CA;Lo;0;L;;;;;N;;;;;\n11690;TAKRI LETTER CHA;Lo;0;L;;;;;N;;;;;\n11691;TAKRI LETTER JA;Lo;0;L;;;;;N;;;;;\n11692;TAKRI LETTER JHA;Lo;0;L;;;;;N;;;;;\n11693;TAKRI LETTER NYA;Lo;0;L;;;;;N;;;;;\n11694;TAKRI LETTER TTA;Lo;0;L;;;;;N;;;;;\n11695;TAKRI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11696;TAKRI LETTER DDA;Lo;0;L;;;;;N;;;;;\n11697;TAKRI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11698;TAKRI LETTER NNA;Lo;0;L;;;;;N;;;;;\n11699;TAKRI LETTER TA;Lo;0;L;;;;;N;;;;;\n1169A;TAKRI LETTER THA;Lo;0;L;;;;;N;;;;;\n1169B;TAKRI LETTER DA;Lo;0;L;;;;;N;;;;;\n1169C;TAKRI LETTER DHA;Lo;0;L;;;;;N;;;;;\n1169D;TAKRI LETTER NA;Lo;0;L;;;;;N;;;;;\n1169E;TAKRI LETTER PA;Lo;0;L;;;;;N;;;;;\n1169F;TAKRI LETTER PHA;Lo;0;L;;;;;N;;;;;\n116A0;TAKRI LETTER BA;Lo;0;L;;;;;N;;;;;\n116A1;TAKRI LETTER BHA;Lo;0;L;;;;;N;;;;;\n116A2;TAKRI LETTER MA;Lo;0;L;;;;;N;;;;;\n116A3;TAKRI LETTER YA;Lo;0;L;;;;;N;;;;;\n116A4;TAKRI LETTER RA;Lo;0;L;;;;;N;;;;;\n116A5;TAKRI LETTER LA;Lo;0;L;;;;;N;;;;;\n116A6;TAKRI LETTER VA;Lo;0;L;;;;;N;;;;;\n116A7;TAKRI LETTER SHA;Lo;0;L;;;;;N;;;;;\n116A8;TAKRI LETTER SA;Lo;0;L;;;;;N;;;;;\n116A9;TAKRI LETTER HA;Lo;0;L;;;;;N;;;;;\n116AA;TAKRI LETTER RRA;Lo;0;L;;;;;N;;;;;\n116AB;TAKRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n116AC;TAKRI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n116AD;TAKRI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;\n116AE;TAKRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n116AF;TAKRI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n116B0;TAKRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n116B1;TAKRI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n116B2;TAKRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n116B3;TAKRI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n116B4;TAKRI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n116B5;TAKRI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;\n116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;;\n116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n116B8;TAKRI LETTER ARCHAIC KHA;Lo;0;L;;;;;N;;;;;\n116B9;TAKRI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n116C3;TAKRI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n116C4;TAKRI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n116C5;TAKRI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n116C6;TAKRI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n116C7;TAKRI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n116C8;TAKRI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n116C9;TAKRI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n116D0;MYANMAR PAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n116D1;MYANMAR PAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n116D2;MYANMAR PAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n116D3;MYANMAR PAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n116D4;MYANMAR PAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n116D5;MYANMAR PAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n116D6;MYANMAR PAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n116D7;MYANMAR PAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n116D8;MYANMAR PAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n116D9;MYANMAR PAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n116DA;MYANMAR EASTERN PWO KAREN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n116DB;MYANMAR EASTERN PWO KAREN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n116DC;MYANMAR EASTERN PWO KAREN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n116DD;MYANMAR EASTERN PWO KAREN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n116DE;MYANMAR EASTERN PWO KAREN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n116DF;MYANMAR EASTERN PWO KAREN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n116E0;MYANMAR EASTERN PWO KAREN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n116E1;MYANMAR EASTERN PWO KAREN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n116E2;MYANMAR EASTERN PWO KAREN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n116E3;MYANMAR EASTERN PWO KAREN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11700;AHOM LETTER KA;Lo;0;L;;;;;N;;;;;\n11701;AHOM LETTER KHA;Lo;0;L;;;;;N;;;;;\n11702;AHOM LETTER NGA;Lo;0;L;;;;;N;;;;;\n11703;AHOM LETTER NA;Lo;0;L;;;;;N;;;;;\n11704;AHOM LETTER TA;Lo;0;L;;;;;N;;;;;\n11705;AHOM LETTER ALTERNATE TA;Lo;0;L;;;;;N;;;;;\n11706;AHOM LETTER PA;Lo;0;L;;;;;N;;;;;\n11707;AHOM LETTER PHA;Lo;0;L;;;;;N;;;;;\n11708;AHOM LETTER BA;Lo;0;L;;;;;N;;;;;\n11709;AHOM LETTER MA;Lo;0;L;;;;;N;;;;;\n1170A;AHOM LETTER JA;Lo;0;L;;;;;N;;;;;\n1170B;AHOM LETTER CHA;Lo;0;L;;;;;N;;;;;\n1170C;AHOM LETTER THA;Lo;0;L;;;;;N;;;;;\n1170D;AHOM LETTER RA;Lo;0;L;;;;;N;;;;;\n1170E;AHOM LETTER LA;Lo;0;L;;;;;N;;;;;\n1170F;AHOM LETTER SA;Lo;0;L;;;;;N;;;;;\n11710;AHOM LETTER NYA;Lo;0;L;;;;;N;;;;;\n11711;AHOM LETTER HA;Lo;0;L;;;;;N;;;;;\n11712;AHOM LETTER A;Lo;0;L;;;;;N;;;;;\n11713;AHOM LETTER DA;Lo;0;L;;;;;N;;;;;\n11714;AHOM LETTER DHA;Lo;0;L;;;;;N;;;;;\n11715;AHOM LETTER GA;Lo;0;L;;;;;N;;;;;\n11716;AHOM LETTER ALTERNATE GA;Lo;0;L;;;;;N;;;;;\n11717;AHOM LETTER GHA;Lo;0;L;;;;;N;;;;;\n11718;AHOM LETTER BHA;Lo;0;L;;;;;N;;;;;\n11719;AHOM LETTER JHA;Lo;0;L;;;;;N;;;;;\n1171A;AHOM LETTER ALTERNATE BA;Lo;0;L;;;;;N;;;;;\n1171D;AHOM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;;\n1171E;AHOM CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;;\n1171F;AHOM CONSONANT SIGN MEDIAL LIGATING RA;Mn;0;NSM;;;;;N;;;;;\n11720;AHOM VOWEL SIGN A;Mc;0;L;;;;;N;;;;;\n11721;AHOM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n11722;AHOM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n11723;AHOM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n11724;AHOM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n11725;AHOM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n11726;AHOM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n11727;AHOM VOWEL SIGN AW;Mn;0;NSM;;;;;N;;;;;\n11728;AHOM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n11729;AHOM VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n1172A;AHOM VOWEL SIGN AM;Mn;0;NSM;;;;;N;;;;;\n1172B;AHOM SIGN KILLER;Mn;9;NSM;;;;;N;;;;;\n11730;AHOM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n11731;AHOM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n11732;AHOM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n11733;AHOM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n11734;AHOM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n11735;AHOM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n11736;AHOM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n11737;AHOM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n11738;AHOM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n11739;AHOM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1173A;AHOM NUMBER TEN;No;0;L;;;;10;N;;;;;\n1173B;AHOM NUMBER TWENTY;No;0;L;;;;20;N;;;;;\n1173C;AHOM SIGN SMALL SECTION;Po;0;L;;;;;N;;;;;\n1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;;\n1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;;\n1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;;\n11740;AHOM LETTER CA;Lo;0;L;;;;;N;;;;;\n11741;AHOM LETTER TTA;Lo;0;L;;;;;N;;;;;\n11742;AHOM LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11743;AHOM LETTER DDA;Lo;0;L;;;;;N;;;;;\n11744;AHOM LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11745;AHOM LETTER NNA;Lo;0;L;;;;;N;;;;;\n11746;AHOM LETTER LLA;Lo;0;L;;;;;N;;;;;\n11800;DOGRA LETTER A;Lo;0;L;;;;;N;;;;;\n11801;DOGRA LETTER AA;Lo;0;L;;;;;N;;;;;\n11802;DOGRA LETTER I;Lo;0;L;;;;;N;;;;;\n11803;DOGRA LETTER II;Lo;0;L;;;;;N;;;;;\n11804;DOGRA LETTER U;Lo;0;L;;;;;N;;;;;\n11805;DOGRA LETTER UU;Lo;0;L;;;;;N;;;;;\n11806;DOGRA LETTER E;Lo;0;L;;;;;N;;;;;\n11807;DOGRA LETTER AI;Lo;0;L;;;;;N;;;;;\n11808;DOGRA LETTER O;Lo;0;L;;;;;N;;;;;\n11809;DOGRA LETTER AU;Lo;0;L;;;;;N;;;;;\n1180A;DOGRA LETTER KA;Lo;0;L;;;;;N;;;;;\n1180B;DOGRA LETTER KHA;Lo;0;L;;;;;N;;;;;\n1180C;DOGRA LETTER GA;Lo;0;L;;;;;N;;;;;\n1180D;DOGRA LETTER GHA;Lo;0;L;;;;;N;;;;;\n1180E;DOGRA LETTER NGA;Lo;0;L;;;;;N;;;;;\n1180F;DOGRA LETTER CA;Lo;0;L;;;;;N;;;;;\n11810;DOGRA LETTER CHA;Lo;0;L;;;;;N;;;;;\n11811;DOGRA LETTER JA;Lo;0;L;;;;;N;;;;;\n11812;DOGRA LETTER JHA;Lo;0;L;;;;;N;;;;;\n11813;DOGRA LETTER NYA;Lo;0;L;;;;;N;;;;;\n11814;DOGRA LETTER TTA;Lo;0;L;;;;;N;;;;;\n11815;DOGRA LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11816;DOGRA LETTER DDA;Lo;0;L;;;;;N;;;;;\n11817;DOGRA LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11818;DOGRA LETTER NNA;Lo;0;L;;;;;N;;;;;\n11819;DOGRA LETTER TA;Lo;0;L;;;;;N;;;;;\n1181A;DOGRA LETTER THA;Lo;0;L;;;;;N;;;;;\n1181B;DOGRA LETTER DA;Lo;0;L;;;;;N;;;;;\n1181C;DOGRA LETTER DHA;Lo;0;L;;;;;N;;;;;\n1181D;DOGRA LETTER NA;Lo;0;L;;;;;N;;;;;\n1181E;DOGRA LETTER PA;Lo;0;L;;;;;N;;;;;\n1181F;DOGRA LETTER PHA;Lo;0;L;;;;;N;;;;;\n11820;DOGRA LETTER BA;Lo;0;L;;;;;N;;;;;\n11821;DOGRA LETTER BHA;Lo;0;L;;;;;N;;;;;\n11822;DOGRA LETTER MA;Lo;0;L;;;;;N;;;;;\n11823;DOGRA LETTER YA;Lo;0;L;;;;;N;;;;;\n11824;DOGRA LETTER RA;Lo;0;L;;;;;N;;;;;\n11825;DOGRA LETTER LA;Lo;0;L;;;;;N;;;;;\n11826;DOGRA LETTER VA;Lo;0;L;;;;;N;;;;;\n11827;DOGRA LETTER SHA;Lo;0;L;;;;;N;;;;;\n11828;DOGRA LETTER SSA;Lo;0;L;;;;;N;;;;;\n11829;DOGRA LETTER SA;Lo;0;L;;;;;N;;;;;\n1182A;DOGRA LETTER HA;Lo;0;L;;;;;N;;;;;\n1182B;DOGRA LETTER RRA;Lo;0;L;;;;;N;;;;;\n1182C;DOGRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n1182D;DOGRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n1182E;DOGRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n1182F;DOGRA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n11830;DOGRA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n11831;DOGRA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n11832;DOGRA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n11833;DOGRA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n11834;DOGRA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n11835;DOGRA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n11836;DOGRA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;\n11837;DOGRA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11838;DOGRA SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n11839;DOGRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n1183A;DOGRA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n1183B;DOGRA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n118A0;WARANG CITI CAPITAL LETTER NGAA;Lu;0;L;;;;;N;;;;118C0;\n118A1;WARANG CITI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;118C1;\n118A2;WARANG CITI CAPITAL LETTER WI;Lu;0;L;;;;;N;;;;118C2;\n118A3;WARANG CITI CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;118C3;\n118A4;WARANG CITI CAPITAL LETTER YA;Lu;0;L;;;;;N;;;;118C4;\n118A5;WARANG CITI CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;118C5;\n118A6;WARANG CITI CAPITAL LETTER II;Lu;0;L;;;;;N;;;;118C6;\n118A7;WARANG CITI CAPITAL LETTER UU;Lu;0;L;;;;;N;;;;118C7;\n118A8;WARANG CITI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;118C8;\n118A9;WARANG CITI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;118C9;\n118AA;WARANG CITI CAPITAL LETTER ANG;Lu;0;L;;;;;N;;;;118CA;\n118AB;WARANG CITI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;118CB;\n118AC;WARANG CITI CAPITAL LETTER KO;Lu;0;L;;;;;N;;;;118CC;\n118AD;WARANG CITI CAPITAL LETTER ENY;Lu;0;L;;;;;N;;;;118CD;\n118AE;WARANG CITI CAPITAL LETTER YUJ;Lu;0;L;;;;;N;;;;118CE;\n118AF;WARANG CITI CAPITAL LETTER UC;Lu;0;L;;;;;N;;;;118CF;\n118B0;WARANG CITI CAPITAL LETTER ENN;Lu;0;L;;;;;N;;;;118D0;\n118B1;WARANG CITI CAPITAL LETTER ODD;Lu;0;L;;;;;N;;;;118D1;\n118B2;WARANG CITI CAPITAL LETTER TTE;Lu;0;L;;;;;N;;;;118D2;\n118B3;WARANG CITI CAPITAL LETTER NUNG;Lu;0;L;;;;;N;;;;118D3;\n118B4;WARANG CITI CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;118D4;\n118B5;WARANG CITI CAPITAL LETTER AT;Lu;0;L;;;;;N;;;;118D5;\n118B6;WARANG CITI CAPITAL LETTER AM;Lu;0;L;;;;;N;;;;118D6;\n118B7;WARANG CITI CAPITAL LETTER BU;Lu;0;L;;;;;N;;;;118D7;\n118B8;WARANG CITI CAPITAL LETTER PU;Lu;0;L;;;;;N;;;;118D8;\n118B9;WARANG CITI CAPITAL LETTER HIYO;Lu;0;L;;;;;N;;;;118D9;\n118BA;WARANG CITI CAPITAL LETTER HOLO;Lu;0;L;;;;;N;;;;118DA;\n118BB;WARANG CITI CAPITAL LETTER HORR;Lu;0;L;;;;;N;;;;118DB;\n118BC;WARANG CITI CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;118DC;\n118BD;WARANG CITI CAPITAL LETTER SSUU;Lu;0;L;;;;;N;;;;118DD;\n118BE;WARANG CITI CAPITAL LETTER SII;Lu;0;L;;;;;N;;;;118DE;\n118BF;WARANG CITI CAPITAL LETTER VIYO;Lu;0;L;;;;;N;;;;118DF;\n118C0;WARANG CITI SMALL LETTER NGAA;Ll;0;L;;;;;N;;;118A0;;118A0\n118C1;WARANG CITI SMALL LETTER A;Ll;0;L;;;;;N;;;118A1;;118A1\n118C2;WARANG CITI SMALL LETTER WI;Ll;0;L;;;;;N;;;118A2;;118A2\n118C3;WARANG CITI SMALL LETTER YU;Ll;0;L;;;;;N;;;118A3;;118A3\n118C4;WARANG CITI SMALL LETTER YA;Ll;0;L;;;;;N;;;118A4;;118A4\n118C5;WARANG CITI SMALL LETTER YO;Ll;0;L;;;;;N;;;118A5;;118A5\n118C6;WARANG CITI SMALL LETTER II;Ll;0;L;;;;;N;;;118A6;;118A6\n118C7;WARANG CITI SMALL LETTER UU;Ll;0;L;;;;;N;;;118A7;;118A7\n118C8;WARANG CITI SMALL LETTER E;Ll;0;L;;;;;N;;;118A8;;118A8\n118C9;WARANG CITI SMALL LETTER O;Ll;0;L;;;;;N;;;118A9;;118A9\n118CA;WARANG CITI SMALL LETTER ANG;Ll;0;L;;;;;N;;;118AA;;118AA\n118CB;WARANG CITI SMALL LETTER GA;Ll;0;L;;;;;N;;;118AB;;118AB\n118CC;WARANG CITI SMALL LETTER KO;Ll;0;L;;;;;N;;;118AC;;118AC\n118CD;WARANG CITI SMALL LETTER ENY;Ll;0;L;;;;;N;;;118AD;;118AD\n118CE;WARANG CITI SMALL LETTER YUJ;Ll;0;L;;;;;N;;;118AE;;118AE\n118CF;WARANG CITI SMALL LETTER UC;Ll;0;L;;;;;N;;;118AF;;118AF\n118D0;WARANG CITI SMALL LETTER ENN;Ll;0;L;;;;;N;;;118B0;;118B0\n118D1;WARANG CITI SMALL LETTER ODD;Ll;0;L;;;;;N;;;118B1;;118B1\n118D2;WARANG CITI SMALL LETTER TTE;Ll;0;L;;;;;N;;;118B2;;118B2\n118D3;WARANG CITI SMALL LETTER NUNG;Ll;0;L;;;;;N;;;118B3;;118B3\n118D4;WARANG CITI SMALL LETTER DA;Ll;0;L;;;;;N;;;118B4;;118B4\n118D5;WARANG CITI SMALL LETTER AT;Ll;0;L;;;;;N;;;118B5;;118B5\n118D6;WARANG CITI SMALL LETTER AM;Ll;0;L;;;;;N;;;118B6;;118B6\n118D7;WARANG CITI SMALL LETTER BU;Ll;0;L;;;;;N;;;118B7;;118B7\n118D8;WARANG CITI SMALL LETTER PU;Ll;0;L;;;;;N;;;118B8;;118B8\n118D9;WARANG CITI SMALL LETTER HIYO;Ll;0;L;;;;;N;;;118B9;;118B9\n118DA;WARANG CITI SMALL LETTER HOLO;Ll;0;L;;;;;N;;;118BA;;118BA\n118DB;WARANG CITI SMALL LETTER HORR;Ll;0;L;;;;;N;;;118BB;;118BB\n118DC;WARANG CITI SMALL LETTER HAR;Ll;0;L;;;;;N;;;118BC;;118BC\n118DD;WARANG CITI SMALL LETTER SSUU;Ll;0;L;;;;;N;;;118BD;;118BD\n118DE;WARANG CITI SMALL LETTER SII;Ll;0;L;;;;;N;;;118BE;;118BE\n118DF;WARANG CITI SMALL LETTER VIYO;Ll;0;L;;;;;N;;;118BF;;118BF\n118E0;WARANG CITI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n118E1;WARANG CITI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n118E2;WARANG CITI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n118E3;WARANG CITI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n118E4;WARANG CITI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n118E5;WARANG CITI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n118E6;WARANG CITI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n118E7;WARANG CITI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n118E8;WARANG CITI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n118E9;WARANG CITI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n118EA;WARANG CITI NUMBER TEN;No;0;L;;;;10;N;;;;;\n118EB;WARANG CITI NUMBER TWENTY;No;0;L;;;;20;N;;;;;\n118EC;WARANG CITI NUMBER THIRTY;No;0;L;;;;30;N;;;;;\n118ED;WARANG CITI NUMBER FORTY;No;0;L;;;;40;N;;;;;\n118EE;WARANG CITI NUMBER FIFTY;No;0;L;;;;50;N;;;;;\n118EF;WARANG CITI NUMBER SIXTY;No;0;L;;;;60;N;;;;;\n118F0;WARANG CITI NUMBER SEVENTY;No;0;L;;;;70;N;;;;;\n118F1;WARANG CITI NUMBER EIGHTY;No;0;L;;;;80;N;;;;;\n118F2;WARANG CITI NUMBER NINETY;No;0;L;;;;90;N;;;;;\n118FF;WARANG CITI OM;Lo;0;L;;;;;N;;;;;\n11900;DIVES AKURU LETTER A;Lo;0;L;;;;;N;;;;;\n11901;DIVES AKURU LETTER AA;Lo;0;L;;;;;N;;;;;\n11902;DIVES AKURU LETTER I;Lo;0;L;;;;;N;;;;;\n11903;DIVES AKURU LETTER II;Lo;0;L;;;;;N;;;;;\n11904;DIVES AKURU LETTER U;Lo;0;L;;;;;N;;;;;\n11905;DIVES AKURU LETTER UU;Lo;0;L;;;;;N;;;;;\n11906;DIVES AKURU LETTER E;Lo;0;L;;;;;N;;;;;\n11909;DIVES AKURU LETTER O;Lo;0;L;;;;;N;;;;;\n1190C;DIVES AKURU LETTER KA;Lo;0;L;;;;;N;;;;;\n1190D;DIVES AKURU LETTER KHA;Lo;0;L;;;;;N;;;;;\n1190E;DIVES AKURU LETTER GA;Lo;0;L;;;;;N;;;;;\n1190F;DIVES AKURU LETTER GHA;Lo;0;L;;;;;N;;;;;\n11910;DIVES AKURU LETTER NGA;Lo;0;L;;;;;N;;;;;\n11911;DIVES AKURU LETTER CA;Lo;0;L;;;;;N;;;;;\n11912;DIVES AKURU LETTER CHA;Lo;0;L;;;;;N;;;;;\n11913;DIVES AKURU LETTER JA;Lo;0;L;;;;;N;;;;;\n11915;DIVES AKURU LETTER NYA;Lo;0;L;;;;;N;;;;;\n11916;DIVES AKURU LETTER TTA;Lo;0;L;;;;;N;;;;;\n11918;DIVES AKURU LETTER DDA;Lo;0;L;;;;;N;;;;;\n11919;DIVES AKURU LETTER DDHA;Lo;0;L;;;;;N;;;;;\n1191A;DIVES AKURU LETTER NNA;Lo;0;L;;;;;N;;;;;\n1191B;DIVES AKURU LETTER TA;Lo;0;L;;;;;N;;;;;\n1191C;DIVES AKURU LETTER THA;Lo;0;L;;;;;N;;;;;\n1191D;DIVES AKURU LETTER DA;Lo;0;L;;;;;N;;;;;\n1191E;DIVES AKURU LETTER DHA;Lo;0;L;;;;;N;;;;;\n1191F;DIVES AKURU LETTER NA;Lo;0;L;;;;;N;;;;;\n11920;DIVES AKURU LETTER PA;Lo;0;L;;;;;N;;;;;\n11921;DIVES AKURU LETTER PHA;Lo;0;L;;;;;N;;;;;\n11922;DIVES AKURU LETTER BA;Lo;0;L;;;;;N;;;;;\n11923;DIVES AKURU LETTER BHA;Lo;0;L;;;;;N;;;;;\n11924;DIVES AKURU LETTER MA;Lo;0;L;;;;;N;;;;;\n11925;DIVES AKURU LETTER YA;Lo;0;L;;;;;N;;;;;\n11926;DIVES AKURU LETTER YYA;Lo;0;L;;;;;N;;;;;\n11927;DIVES AKURU LETTER RA;Lo;0;L;;;;;N;;;;;\n11928;DIVES AKURU LETTER LA;Lo;0;L;;;;;N;;;;;\n11929;DIVES AKURU LETTER VA;Lo;0;L;;;;;N;;;;;\n1192A;DIVES AKURU LETTER SHA;Lo;0;L;;;;;N;;;;;\n1192B;DIVES AKURU LETTER SSA;Lo;0;L;;;;;N;;;;;\n1192C;DIVES AKURU LETTER SA;Lo;0;L;;;;;N;;;;;\n1192D;DIVES AKURU LETTER HA;Lo;0;L;;;;;N;;;;;\n1192E;DIVES AKURU LETTER LLA;Lo;0;L;;;;;N;;;;;\n1192F;DIVES AKURU LETTER ZA;Lo;0;L;;;;;N;;;;;\n11930;DIVES AKURU VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n11931;DIVES AKURU VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n11932;DIVES AKURU VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n11933;DIVES AKURU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;\n11934;DIVES AKURU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;\n11935;DIVES AKURU VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n11937;DIVES AKURU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\n11938;DIVES AKURU VOWEL SIGN O;Mc;0;L;11935 11930;;;;N;;;;;\n1193B;DIVES AKURU SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n1193C;DIVES AKURU SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n1193D;DIVES AKURU SIGN HALANTA;Mc;9;L;;;;;N;;;;;\n1193E;DIVES AKURU VIRAMA;Mn;9;NSM;;;;;N;;;;;\n1193F;DIVES AKURU PREFIXED NASAL SIGN;Lo;0;L;;;;;N;;;;;\n11940;DIVES AKURU MEDIAL YA;Mc;0;L;;;;;N;;;;;\n11941;DIVES AKURU INITIAL RA;Lo;0;L;;;;;N;;;;;\n11942;DIVES AKURU MEDIAL RA;Mc;0;L;;;;;N;;;;;\n11943;DIVES AKURU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n11944;DIVES AKURU DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n11945;DIVES AKURU GAP FILLER;Po;0;L;;;;;N;;;;;\n11946;DIVES AKURU END OF TEXT MARK;Po;0;L;;;;;N;;;;;\n11950;DIVES AKURU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n11951;DIVES AKURU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n11952;DIVES AKURU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n11953;DIVES AKURU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n11954;DIVES AKURU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n11955;DIVES AKURU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n11956;DIVES AKURU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n11957;DIVES AKURU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n11958;DIVES AKURU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n11959;DIVES AKURU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n119A0;NANDINAGARI LETTER A;Lo;0;L;;;;;N;;;;;\n119A1;NANDINAGARI LETTER AA;Lo;0;L;;;;;N;;;;;\n119A2;NANDINAGARI LETTER I;Lo;0;L;;;;;N;;;;;\n119A3;NANDINAGARI LETTER II;Lo;0;L;;;;;N;;;;;\n119A4;NANDINAGARI LETTER U;Lo;0;L;;;;;N;;;;;\n119A5;NANDINAGARI LETTER UU;Lo;0;L;;;;;N;;;;;\n119A6;NANDINAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n119A7;NANDINAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n119AA;NANDINAGARI LETTER E;Lo;0;L;;;;;N;;;;;\n119AB;NANDINAGARI LETTER AI;Lo;0;L;;;;;N;;;;;\n119AC;NANDINAGARI LETTER O;Lo;0;L;;;;;N;;;;;\n119AD;NANDINAGARI LETTER AU;Lo;0;L;;;;;N;;;;;\n119AE;NANDINAGARI LETTER KA;Lo;0;L;;;;;N;;;;;\n119AF;NANDINAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;\n119B0;NANDINAGARI LETTER GA;Lo;0;L;;;;;N;;;;;\n119B1;NANDINAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;\n119B2;NANDINAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;\n119B3;NANDINAGARI LETTER CA;Lo;0;L;;;;;N;;;;;\n119B4;NANDINAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;\n119B5;NANDINAGARI LETTER JA;Lo;0;L;;;;;N;;;;;\n119B6;NANDINAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;\n119B7;NANDINAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;\n119B8;NANDINAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;\n119B9;NANDINAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n119BA;NANDINAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;\n119BB;NANDINAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n119BC;NANDINAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;\n119BD;NANDINAGARI LETTER TA;Lo;0;L;;;;;N;;;;;\n119BE;NANDINAGARI LETTER THA;Lo;0;L;;;;;N;;;;;\n119BF;NANDINAGARI LETTER DA;Lo;0;L;;;;;N;;;;;\n119C0;NANDINAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;\n119C1;NANDINAGARI LETTER NA;Lo;0;L;;;;;N;;;;;\n119C2;NANDINAGARI LETTER PA;Lo;0;L;;;;;N;;;;;\n119C3;NANDINAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;\n119C4;NANDINAGARI LETTER BA;Lo;0;L;;;;;N;;;;;\n119C5;NANDINAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;\n119C6;NANDINAGARI LETTER MA;Lo;0;L;;;;;N;;;;;\n119C7;NANDINAGARI LETTER YA;Lo;0;L;;;;;N;;;;;\n119C8;NANDINAGARI LETTER RA;Lo;0;L;;;;;N;;;;;\n119C9;NANDINAGARI LETTER LA;Lo;0;L;;;;;N;;;;;\n119CA;NANDINAGARI LETTER VA;Lo;0;L;;;;;N;;;;;\n119CB;NANDINAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;\n119CC;NANDINAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;\n119CD;NANDINAGARI LETTER SA;Lo;0;L;;;;;N;;;;;\n119CE;NANDINAGARI LETTER HA;Lo;0;L;;;;;N;;;;;\n119CF;NANDINAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;\n119D0;NANDINAGARI LETTER RRA;Lo;0;L;;;;;N;;;;;\n119D1;NANDINAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n119D2;NANDINAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n119D3;NANDINAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n119D4;NANDINAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n119D5;NANDINAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n119D6;NANDINAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n119D7;NANDINAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n119DA;NANDINAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n119DB;NANDINAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n119DC;NANDINAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n119DD;NANDINAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n119DE;NANDINAGARI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;\n119DF;NANDINAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n119E0;NANDINAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n119E1;NANDINAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n119E2;NANDINAGARI SIGN SIDDHAM;Po;0;L;;;;;N;;;;;\n119E3;NANDINAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;;\n119E4;NANDINAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;;\n11A00;ZANABAZAR SQUARE LETTER A;Lo;0;L;;;;;N;;;;;\n11A01;ZANABAZAR SQUARE VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n11A02;ZANABAZAR SQUARE VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;\n11A03;ZANABAZAR SQUARE VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n11A04;ZANABAZAR SQUARE VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n11A05;ZANABAZAR SQUARE VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;\n11A06;ZANABAZAR SQUARE VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n11A07;ZANABAZAR SQUARE VOWEL SIGN AI;Mn;0;L;;;;;N;;;;;\n11A08;ZANABAZAR SQUARE VOWEL SIGN AU;Mn;0;L;;;;;N;;;;;\n11A09;ZANABAZAR SQUARE VOWEL SIGN REVERSED I;Mn;0;NSM;;;;;N;;;;;\n11A0A;ZANABAZAR SQUARE VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;\n11A0B;ZANABAZAR SQUARE LETTER KA;Lo;0;L;;;;;N;;;;;\n11A0C;ZANABAZAR SQUARE LETTER KHA;Lo;0;L;;;;;N;;;;;\n11A0D;ZANABAZAR SQUARE LETTER GA;Lo;0;L;;;;;N;;;;;\n11A0E;ZANABAZAR SQUARE LETTER GHA;Lo;0;L;;;;;N;;;;;\n11A0F;ZANABAZAR SQUARE LETTER NGA;Lo;0;L;;;;;N;;;;;\n11A10;ZANABAZAR SQUARE LETTER CA;Lo;0;L;;;;;N;;;;;\n11A11;ZANABAZAR SQUARE LETTER CHA;Lo;0;L;;;;;N;;;;;\n11A12;ZANABAZAR SQUARE LETTER JA;Lo;0;L;;;;;N;;;;;\n11A13;ZANABAZAR SQUARE LETTER NYA;Lo;0;L;;;;;N;;;;;\n11A14;ZANABAZAR SQUARE LETTER TTA;Lo;0;L;;;;;N;;;;;\n11A15;ZANABAZAR SQUARE LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11A16;ZANABAZAR SQUARE LETTER DDA;Lo;0;L;;;;;N;;;;;\n11A17;ZANABAZAR SQUARE LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11A18;ZANABAZAR SQUARE LETTER NNA;Lo;0;L;;;;;N;;;;;\n11A19;ZANABAZAR SQUARE LETTER TA;Lo;0;L;;;;;N;;;;;\n11A1A;ZANABAZAR SQUARE LETTER THA;Lo;0;L;;;;;N;;;;;\n11A1B;ZANABAZAR SQUARE LETTER DA;Lo;0;L;;;;;N;;;;;\n11A1C;ZANABAZAR SQUARE LETTER DHA;Lo;0;L;;;;;N;;;;;\n11A1D;ZANABAZAR SQUARE LETTER NA;Lo;0;L;;;;;N;;;;;\n11A1E;ZANABAZAR SQUARE LETTER PA;Lo;0;L;;;;;N;;;;;\n11A1F;ZANABAZAR SQUARE LETTER PHA;Lo;0;L;;;;;N;;;;;\n11A20;ZANABAZAR SQUARE LETTER BA;Lo;0;L;;;;;N;;;;;\n11A21;ZANABAZAR SQUARE LETTER BHA;Lo;0;L;;;;;N;;;;;\n11A22;ZANABAZAR SQUARE LETTER MA;Lo;0;L;;;;;N;;;;;\n11A23;ZANABAZAR SQUARE LETTER TSA;Lo;0;L;;;;;N;;;;;\n11A24;ZANABAZAR SQUARE LETTER TSHA;Lo;0;L;;;;;N;;;;;\n11A25;ZANABAZAR SQUARE LETTER DZA;Lo;0;L;;;;;N;;;;;\n11A26;ZANABAZAR SQUARE LETTER DZHA;Lo;0;L;;;;;N;;;;;\n11A27;ZANABAZAR SQUARE LETTER ZHA;Lo;0;L;;;;;N;;;;;\n11A28;ZANABAZAR SQUARE LETTER ZA;Lo;0;L;;;;;N;;;;;\n11A29;ZANABAZAR SQUARE LETTER -A;Lo;0;L;;;;;N;;;;;\n11A2A;ZANABAZAR SQUARE LETTER YA;Lo;0;L;;;;;N;;;;;\n11A2B;ZANABAZAR SQUARE LETTER RA;Lo;0;L;;;;;N;;;;;\n11A2C;ZANABAZAR SQUARE LETTER LA;Lo;0;L;;;;;N;;;;;\n11A2D;ZANABAZAR SQUARE LETTER VA;Lo;0;L;;;;;N;;;;;\n11A2E;ZANABAZAR SQUARE LETTER SHA;Lo;0;L;;;;;N;;;;;\n11A2F;ZANABAZAR SQUARE LETTER SSA;Lo;0;L;;;;;N;;;;;\n11A30;ZANABAZAR SQUARE LETTER SA;Lo;0;L;;;;;N;;;;;\n11A31;ZANABAZAR SQUARE LETTER HA;Lo;0;L;;;;;N;;;;;\n11A32;ZANABAZAR SQUARE LETTER KSSA;Lo;0;L;;;;;N;;;;;\n11A33;ZANABAZAR SQUARE FINAL CONSONANT MARK;Mn;0;NSM;;;;;N;;;;;\n11A34;ZANABAZAR SQUARE SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;\n11A35;ZANABAZAR SQUARE SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n11A36;ZANABAZAR SQUARE SIGN CANDRABINDU WITH ORNAMENT;Mn;0;NSM;;;;;N;;;;;\n11A37;ZANABAZAR SQUARE SIGN CANDRA WITH ORNAMENT;Mn;0;NSM;;;;;N;;;;;\n11A38;ZANABAZAR SQUARE SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11A39;ZANABAZAR SQUARE SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n11A3A;ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA;Lo;0;L;;;;;N;;;;;\n11A3B;ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA;Mn;0;NSM;;;;;N;;;;;\n11A3C;ZANABAZAR SQUARE CLUSTER-FINAL LETTER RA;Mn;0;NSM;;;;;N;;;;;\n11A3D;ZANABAZAR SQUARE CLUSTER-FINAL LETTER LA;Mn;0;NSM;;;;;N;;;;;\n11A3E;ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA;Mn;0;NSM;;;;;N;;;;;\n11A3F;ZANABAZAR SQUARE INITIAL HEAD MARK;Po;0;L;;;;;N;;;;;\n11A40;ZANABAZAR SQUARE CLOSING HEAD MARK;Po;0;L;;;;;N;;;;;\n11A41;ZANABAZAR SQUARE MARK TSHEG;Po;0;L;;;;;N;;;;;\n11A42;ZANABAZAR SQUARE MARK SHAD;Po;0;L;;;;;N;;;;;\n11A43;ZANABAZAR SQUARE MARK DOUBLE SHAD;Po;0;L;;;;;N;;;;;\n11A44;ZANABAZAR SQUARE MARK LONG TSHEG;Po;0;L;;;;;N;;;;;\n11A45;ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK;Po;0;L;;;;;N;;;;;\n11A46;ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK;Po;0;L;;;;;N;;;;;\n11A47;ZANABAZAR SQUARE SUBJOINER;Mn;9;NSM;;;;;N;;;;;\n11A50;SOYOMBO LETTER A;Lo;0;L;;;;;N;;;;;\n11A51;SOYOMBO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n11A52;SOYOMBO VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;\n11A53;SOYOMBO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n11A54;SOYOMBO VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n11A55;SOYOMBO VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n11A56;SOYOMBO VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;\n11A57;SOYOMBO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\n11A58;SOYOMBO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n11A59;SOYOMBO VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n11A5A;SOYOMBO VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n11A5B;SOYOMBO VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;\n11A5C;SOYOMBO LETTER KA;Lo;0;L;;;;;N;;;;;\n11A5D;SOYOMBO LETTER KHA;Lo;0;L;;;;;N;;;;;\n11A5E;SOYOMBO LETTER GA;Lo;0;L;;;;;N;;;;;\n11A5F;SOYOMBO LETTER GHA;Lo;0;L;;;;;N;;;;;\n11A60;SOYOMBO LETTER NGA;Lo;0;L;;;;;N;;;;;\n11A61;SOYOMBO LETTER CA;Lo;0;L;;;;;N;;;;;\n11A62;SOYOMBO LETTER CHA;Lo;0;L;;;;;N;;;;;\n11A63;SOYOMBO LETTER JA;Lo;0;L;;;;;N;;;;;\n11A64;SOYOMBO LETTER JHA;Lo;0;L;;;;;N;;;;;\n11A65;SOYOMBO LETTER NYA;Lo;0;L;;;;;N;;;;;\n11A66;SOYOMBO LETTER TTA;Lo;0;L;;;;;N;;;;;\n11A67;SOYOMBO LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11A68;SOYOMBO LETTER DDA;Lo;0;L;;;;;N;;;;;\n11A69;SOYOMBO LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11A6A;SOYOMBO LETTER NNA;Lo;0;L;;;;;N;;;;;\n11A6B;SOYOMBO LETTER TA;Lo;0;L;;;;;N;;;;;\n11A6C;SOYOMBO LETTER THA;Lo;0;L;;;;;N;;;;;\n11A6D;SOYOMBO LETTER DA;Lo;0;L;;;;;N;;;;;\n11A6E;SOYOMBO LETTER DHA;Lo;0;L;;;;;N;;;;;\n11A6F;SOYOMBO LETTER NA;Lo;0;L;;;;;N;;;;;\n11A70;SOYOMBO LETTER PA;Lo;0;L;;;;;N;;;;;\n11A71;SOYOMBO LETTER PHA;Lo;0;L;;;;;N;;;;;\n11A72;SOYOMBO LETTER BA;Lo;0;L;;;;;N;;;;;\n11A73;SOYOMBO LETTER BHA;Lo;0;L;;;;;N;;;;;\n11A74;SOYOMBO LETTER MA;Lo;0;L;;;;;N;;;;;\n11A75;SOYOMBO LETTER TSA;Lo;0;L;;;;;N;;;;;\n11A76;SOYOMBO LETTER TSHA;Lo;0;L;;;;;N;;;;;\n11A77;SOYOMBO LETTER DZA;Lo;0;L;;;;;N;;;;;\n11A78;SOYOMBO LETTER ZHA;Lo;0;L;;;;;N;;;;;\n11A79;SOYOMBO LETTER ZA;Lo;0;L;;;;;N;;;;;\n11A7A;SOYOMBO LETTER -A;Lo;0;L;;;;;N;;;;;\n11A7B;SOYOMBO LETTER YA;Lo;0;L;;;;;N;;;;;\n11A7C;SOYOMBO LETTER RA;Lo;0;L;;;;;N;;;;;\n11A7D;SOYOMBO LETTER LA;Lo;0;L;;;;;N;;;;;\n11A7E;SOYOMBO LETTER VA;Lo;0;L;;;;;N;;;;;\n11A7F;SOYOMBO LETTER SHA;Lo;0;L;;;;;N;;;;;\n11A80;SOYOMBO LETTER SSA;Lo;0;L;;;;;N;;;;;\n11A81;SOYOMBO LETTER SA;Lo;0;L;;;;;N;;;;;\n11A82;SOYOMBO LETTER HA;Lo;0;L;;;;;N;;;;;\n11A83;SOYOMBO LETTER KSSA;Lo;0;L;;;;;N;;;;;\n11A84;SOYOMBO SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;\n11A85;SOYOMBO SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;\n11A86;SOYOMBO CLUSTER-INITIAL LETTER RA;Lo;0;L;;;;;N;;;;;\n11A87;SOYOMBO CLUSTER-INITIAL LETTER LA;Lo;0;L;;;;;N;;;;;\n11A88;SOYOMBO CLUSTER-INITIAL LETTER SHA;Lo;0;L;;;;;N;;;;;\n11A89;SOYOMBO CLUSTER-INITIAL LETTER SA;Lo;0;L;;;;;N;;;;;\n11A8A;SOYOMBO FINAL CONSONANT SIGN G;Mn;0;NSM;;;;;N;;;;;\n11A8B;SOYOMBO FINAL CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;;\n11A8C;SOYOMBO FINAL CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;;\n11A8D;SOYOMBO FINAL CONSONANT SIGN D;Mn;0;NSM;;;;;N;;;;;\n11A8E;SOYOMBO FINAL CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;\n11A8F;SOYOMBO FINAL CONSONANT SIGN B;Mn;0;NSM;;;;;N;;;;;\n11A90;SOYOMBO FINAL CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;;\n11A91;SOYOMBO FINAL CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;\n11A92;SOYOMBO FINAL CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;;\n11A93;SOYOMBO FINAL CONSONANT SIGN SH;Mn;0;NSM;;;;;N;;;;;\n11A94;SOYOMBO FINAL CONSONANT SIGN S;Mn;0;NSM;;;;;N;;;;;\n11A95;SOYOMBO FINAL CONSONANT SIGN -A;Mn;0;NSM;;;;;N;;;;;\n11A96;SOYOMBO SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11A97;SOYOMBO SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n11A98;SOYOMBO GEMINATION MARK;Mn;0;NSM;;;;;N;;;;;\n11A99;SOYOMBO SUBJOINER;Mn;9;NSM;;;;;N;;;;;\n11A9A;SOYOMBO MARK TSHEG;Po;0;L;;;;;N;;;;;\n11A9B;SOYOMBO MARK SHAD;Po;0;L;;;;;N;;;;;\n11A9C;SOYOMBO MARK DOUBLE SHAD;Po;0;L;;;;;N;;;;;\n11A9D;SOYOMBO MARK PLUTA;Lo;0;L;;;;;N;;;;;\n11A9E;SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME;Po;0;L;;;;;N;;;;;\n11A9F;SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME;Po;0;L;;;;;N;;;;;\n11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;;\n11AA1;SOYOMBO TERMINAL MARK-1;Po;0;L;;;;;N;;;;;\n11AA2;SOYOMBO TERMINAL MARK-2;Po;0;L;;;;;N;;;;;\n11AB0;CANADIAN SYLLABICS NATTILIK HI;Lo;0;L;;;;;N;;;;;\n11AB1;CANADIAN SYLLABICS NATTILIK HII;Lo;0;L;;;;;N;;;;;\n11AB2;CANADIAN SYLLABICS NATTILIK HO;Lo;0;L;;;;;N;;;;;\n11AB3;CANADIAN SYLLABICS NATTILIK HOO;Lo;0;L;;;;;N;;;;;\n11AB4;CANADIAN SYLLABICS NATTILIK HA;Lo;0;L;;;;;N;;;;;\n11AB5;CANADIAN SYLLABICS NATTILIK HAA;Lo;0;L;;;;;N;;;;;\n11AB6;CANADIAN SYLLABICS NATTILIK SHRI;Lo;0;L;;;;;N;;;;;\n11AB7;CANADIAN SYLLABICS NATTILIK SHRII;Lo;0;L;;;;;N;;;;;\n11AB8;CANADIAN SYLLABICS NATTILIK SHRO;Lo;0;L;;;;;N;;;;;\n11AB9;CANADIAN SYLLABICS NATTILIK SHROO;Lo;0;L;;;;;N;;;;;\n11ABA;CANADIAN SYLLABICS NATTILIK SHRA;Lo;0;L;;;;;N;;;;;\n11ABB;CANADIAN SYLLABICS NATTILIK SHRAA;Lo;0;L;;;;;N;;;;;\n11ABC;CANADIAN SYLLABICS SPE;Lo;0;L;;;;;N;;;;;\n11ABD;CANADIAN SYLLABICS SPI;Lo;0;L;;;;;N;;;;;\n11ABE;CANADIAN SYLLABICS SPO;Lo;0;L;;;;;N;;;;;\n11ABF;CANADIAN SYLLABICS SPA;Lo;0;L;;;;;N;;;;;\n11AC0;PAU CIN HAU LETTER PA;Lo;0;L;;;;;N;;;;;\n11AC1;PAU CIN HAU LETTER KA;Lo;0;L;;;;;N;;;;;\n11AC2;PAU CIN HAU LETTER LA;Lo;0;L;;;;;N;;;;;\n11AC3;PAU CIN HAU LETTER MA;Lo;0;L;;;;;N;;;;;\n11AC4;PAU CIN HAU LETTER DA;Lo;0;L;;;;;N;;;;;\n11AC5;PAU CIN HAU LETTER ZA;Lo;0;L;;;;;N;;;;;\n11AC6;PAU CIN HAU LETTER VA;Lo;0;L;;;;;N;;;;;\n11AC7;PAU CIN HAU LETTER NGA;Lo;0;L;;;;;N;;;;;\n11AC8;PAU CIN HAU LETTER HA;Lo;0;L;;;;;N;;;;;\n11AC9;PAU CIN HAU LETTER GA;Lo;0;L;;;;;N;;;;;\n11ACA;PAU CIN HAU LETTER KHA;Lo;0;L;;;;;N;;;;;\n11ACB;PAU CIN HAU LETTER SA;Lo;0;L;;;;;N;;;;;\n11ACC;PAU CIN HAU LETTER BA;Lo;0;L;;;;;N;;;;;\n11ACD;PAU CIN HAU LETTER CA;Lo;0;L;;;;;N;;;;;\n11ACE;PAU CIN HAU LETTER TA;Lo;0;L;;;;;N;;;;;\n11ACF;PAU CIN HAU LETTER THA;Lo;0;L;;;;;N;;;;;\n11AD0;PAU CIN HAU LETTER NA;Lo;0;L;;;;;N;;;;;\n11AD1;PAU CIN HAU LETTER PHA;Lo;0;L;;;;;N;;;;;\n11AD2;PAU CIN HAU LETTER RA;Lo;0;L;;;;;N;;;;;\n11AD3;PAU CIN HAU LETTER FA;Lo;0;L;;;;;N;;;;;\n11AD4;PAU CIN HAU LETTER CHA;Lo;0;L;;;;;N;;;;;\n11AD5;PAU CIN HAU LETTER A;Lo;0;L;;;;;N;;;;;\n11AD6;PAU CIN HAU LETTER E;Lo;0;L;;;;;N;;;;;\n11AD7;PAU CIN HAU LETTER I;Lo;0;L;;;;;N;;;;;\n11AD8;PAU CIN HAU LETTER O;Lo;0;L;;;;;N;;;;;\n11AD9;PAU CIN HAU LETTER U;Lo;0;L;;;;;N;;;;;\n11ADA;PAU CIN HAU LETTER UA;Lo;0;L;;;;;N;;;;;\n11ADB;PAU CIN HAU LETTER IA;Lo;0;L;;;;;N;;;;;\n11ADC;PAU CIN HAU LETTER FINAL P;Lo;0;L;;;;;N;;;;;\n11ADD;PAU CIN HAU LETTER FINAL K;Lo;0;L;;;;;N;;;;;\n11ADE;PAU CIN HAU LETTER FINAL T;Lo;0;L;;;;;N;;;;;\n11ADF;PAU CIN HAU LETTER FINAL M;Lo;0;L;;;;;N;;;;;\n11AE0;PAU CIN HAU LETTER FINAL N;Lo;0;L;;;;;N;;;;;\n11AE1;PAU CIN HAU LETTER FINAL L;Lo;0;L;;;;;N;;;;;\n11AE2;PAU CIN HAU LETTER FINAL W;Lo;0;L;;;;;N;;;;;\n11AE3;PAU CIN HAU LETTER FINAL NG;Lo;0;L;;;;;N;;;;;\n11AE4;PAU CIN HAU LETTER FINAL Y;Lo;0;L;;;;;N;;;;;\n11AE5;PAU CIN HAU RISING TONE LONG;Lo;0;L;;;;;N;;;;;\n11AE6;PAU CIN HAU RISING TONE;Lo;0;L;;;;;N;;;;;\n11AE7;PAU CIN HAU SANDHI GLOTTAL STOP;Lo;0;L;;;;;N;;;;;\n11AE8;PAU CIN HAU RISING TONE LONG FINAL;Lo;0;L;;;;;N;;;;;\n11AE9;PAU CIN HAU RISING TONE FINAL;Lo;0;L;;;;;N;;;;;\n11AEA;PAU CIN HAU SANDHI GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;;\n11AEB;PAU CIN HAU SANDHI TONE LONG;Lo;0;L;;;;;N;;;;;\n11AEC;PAU CIN HAU SANDHI TONE;Lo;0;L;;;;;N;;;;;\n11AED;PAU CIN HAU SANDHI TONE LONG FINAL;Lo;0;L;;;;;N;;;;;\n11AEE;PAU CIN HAU SANDHI TONE FINAL;Lo;0;L;;;;;N;;;;;\n11AEF;PAU CIN HAU MID-LEVEL TONE;Lo;0;L;;;;;N;;;;;\n11AF0;PAU CIN HAU GLOTTAL STOP VARIANT;Lo;0;L;;;;;N;;;;;\n11AF1;PAU CIN HAU MID-LEVEL TONE LONG FINAL;Lo;0;L;;;;;N;;;;;\n11AF2;PAU CIN HAU MID-LEVEL TONE FINAL;Lo;0;L;;;;;N;;;;;\n11AF3;PAU CIN HAU LOW-FALLING TONE LONG;Lo;0;L;;;;;N;;;;;\n11AF4;PAU CIN HAU LOW-FALLING TONE;Lo;0;L;;;;;N;;;;;\n11AF5;PAU CIN HAU GLOTTAL STOP;Lo;0;L;;;;;N;;;;;\n11AF6;PAU CIN HAU LOW-FALLING TONE LONG FINAL;Lo;0;L;;;;;N;;;;;\n11AF7;PAU CIN HAU LOW-FALLING TONE FINAL;Lo;0;L;;;;;N;;;;;\n11AF8;PAU CIN HAU GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;;\n11B00;DEVANAGARI HEAD MARK;Po;0;L;;;;;N;;;;;\n11B01;DEVANAGARI HEAD MARK WITH HEADSTROKE;Po;0;L;;;;;N;;;;;\n11B02;DEVANAGARI SIGN BHALE;Po;0;L;;;;;N;;;;;\n11B03;DEVANAGARI SIGN BHALE WITH HOOK;Po;0;L;;;;;N;;;;;\n11B04;DEVANAGARI SIGN EXTENDED BHALE;Po;0;L;;;;;N;;;;;\n11B05;DEVANAGARI SIGN EXTENDED BHALE WITH HOOK;Po;0;L;;;;;N;;;;;\n11B06;DEVANAGARI SIGN WESTERN FIVE-LIKE BHALE;Po;0;L;;;;;N;;;;;\n11B07;DEVANAGARI SIGN WESTERN NINE-LIKE BHALE;Po;0;L;;;;;N;;;;;\n11B08;DEVANAGARI SIGN REVERSED NINE-LIKE BHALE;Po;0;L;;;;;N;;;;;\n11B09;DEVANAGARI SIGN MINDU;Po;0;L;;;;;N;;;;;\n11B60;SHARADA VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;\n11B61;SHARADA VOWEL SIGN OOE;Mc;0;L;;;;;N;;;;;\n11B62;SHARADA VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;\n11B63;SHARADA VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;;\n11B64;SHARADA VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;\n11B65;SHARADA VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;\n11B66;SHARADA VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;\n11B67;SHARADA VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;\n11BC0;SUNUWAR LETTER DEVI;Lo;0;L;;;;;N;;;;;\n11BC1;SUNUWAR LETTER TASLA;Lo;0;L;;;;;N;;;;;\n11BC2;SUNUWAR LETTER EKO;Lo;0;L;;;;;N;;;;;\n11BC3;SUNUWAR LETTER IMAR;Lo;0;L;;;;;N;;;;;\n11BC4;SUNUWAR LETTER REU;Lo;0;L;;;;;N;;;;;\n11BC5;SUNUWAR LETTER UTTHI;Lo;0;L;;;;;N;;;;;\n11BC6;SUNUWAR LETTER KIK;Lo;0;L;;;;;N;;;;;\n11BC7;SUNUWAR LETTER MA;Lo;0;L;;;;;N;;;;;\n11BC8;SUNUWAR LETTER APPHO;Lo;0;L;;;;;N;;;;;\n11BC9;SUNUWAR LETTER PIP;Lo;0;L;;;;;N;;;;;\n11BCA;SUNUWAR LETTER GIL;Lo;0;L;;;;;N;;;;;\n11BCB;SUNUWAR LETTER HAMSO;Lo;0;L;;;;;N;;;;;\n11BCC;SUNUWAR LETTER CARMI;Lo;0;L;;;;;N;;;;;\n11BCD;SUNUWAR LETTER NAH;Lo;0;L;;;;;N;;;;;\n11BCE;SUNUWAR LETTER BUR;Lo;0;L;;;;;N;;;;;\n11BCF;SUNUWAR LETTER JYAH;Lo;0;L;;;;;N;;;;;\n11BD0;SUNUWAR LETTER LOACHA;Lo;0;L;;;;;N;;;;;\n11BD1;SUNUWAR LETTER OTTHI;Lo;0;L;;;;;N;;;;;\n11BD2;SUNUWAR LETTER SHYELE;Lo;0;L;;;;;N;;;;;\n11BD3;SUNUWAR LETTER VARCA;Lo;0;L;;;;;N;;;;;\n11BD4;SUNUWAR LETTER YAT;Lo;0;L;;;;;N;;;;;\n11BD5;SUNUWAR LETTER AVA;Lo;0;L;;;;;N;;;;;\n11BD6;SUNUWAR LETTER AAL;Lo;0;L;;;;;N;;;;;\n11BD7;SUNUWAR LETTER DONGA;Lo;0;L;;;;;N;;;;;\n11BD8;SUNUWAR LETTER THARI;Lo;0;L;;;;;N;;;;;\n11BD9;SUNUWAR LETTER PHAR;Lo;0;L;;;;;N;;;;;\n11BDA;SUNUWAR LETTER NGAR;Lo;0;L;;;;;N;;;;;\n11BDB;SUNUWAR LETTER KHA;Lo;0;L;;;;;N;;;;;\n11BDC;SUNUWAR LETTER SHYER;Lo;0;L;;;;;N;;;;;\n11BDD;SUNUWAR LETTER CHELAP;Lo;0;L;;;;;N;;;;;\n11BDE;SUNUWAR LETTER TENTU;Lo;0;L;;;;;N;;;;;\n11BDF;SUNUWAR LETTER THELE;Lo;0;L;;;;;N;;;;;\n11BE0;SUNUWAR LETTER KLOKO;Lo;0;L;;;;;N;;;;;\n11BE1;SUNUWAR SIGN PVO;Po;0;L;;;;;N;;;;;\n11BF0;SUNUWAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n11BF1;SUNUWAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n11BF2;SUNUWAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n11BF3;SUNUWAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n11BF4;SUNUWAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n11BF5;SUNUWAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n11BF6;SUNUWAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n11BF7;SUNUWAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n11BF8;SUNUWAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n11BF9;SUNUWAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11C00;BHAIKSUKI LETTER A;Lo;0;L;;;;;N;;;;;\n11C01;BHAIKSUKI LETTER AA;Lo;0;L;;;;;N;;;;;\n11C02;BHAIKSUKI LETTER I;Lo;0;L;;;;;N;;;;;\n11C03;BHAIKSUKI LETTER II;Lo;0;L;;;;;N;;;;;\n11C04;BHAIKSUKI LETTER U;Lo;0;L;;;;;N;;;;;\n11C05;BHAIKSUKI LETTER UU;Lo;0;L;;;;;N;;;;;\n11C06;BHAIKSUKI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n11C07;BHAIKSUKI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n11C08;BHAIKSUKI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n11C0A;BHAIKSUKI LETTER E;Lo;0;L;;;;;N;;;;;\n11C0B;BHAIKSUKI LETTER AI;Lo;0;L;;;;;N;;;;;\n11C0C;BHAIKSUKI LETTER O;Lo;0;L;;;;;N;;;;;\n11C0D;BHAIKSUKI LETTER AU;Lo;0;L;;;;;N;;;;;\n11C0E;BHAIKSUKI LETTER KA;Lo;0;L;;;;;N;;;;;\n11C0F;BHAIKSUKI LETTER KHA;Lo;0;L;;;;;N;;;;;\n11C10;BHAIKSUKI LETTER GA;Lo;0;L;;;;;N;;;;;\n11C11;BHAIKSUKI LETTER GHA;Lo;0;L;;;;;N;;;;;\n11C12;BHAIKSUKI LETTER NGA;Lo;0;L;;;;;N;;;;;\n11C13;BHAIKSUKI LETTER CA;Lo;0;L;;;;;N;;;;;\n11C14;BHAIKSUKI LETTER CHA;Lo;0;L;;;;;N;;;;;\n11C15;BHAIKSUKI LETTER JA;Lo;0;L;;;;;N;;;;;\n11C16;BHAIKSUKI LETTER JHA;Lo;0;L;;;;;N;;;;;\n11C17;BHAIKSUKI LETTER NYA;Lo;0;L;;;;;N;;;;;\n11C18;BHAIKSUKI LETTER TTA;Lo;0;L;;;;;N;;;;;\n11C19;BHAIKSUKI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11C1A;BHAIKSUKI LETTER DDA;Lo;0;L;;;;;N;;;;;\n11C1B;BHAIKSUKI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11C1C;BHAIKSUKI LETTER NNA;Lo;0;L;;;;;N;;;;;\n11C1D;BHAIKSUKI LETTER TA;Lo;0;L;;;;;N;;;;;\n11C1E;BHAIKSUKI LETTER THA;Lo;0;L;;;;;N;;;;;\n11C1F;BHAIKSUKI LETTER DA;Lo;0;L;;;;;N;;;;;\n11C20;BHAIKSUKI LETTER DHA;Lo;0;L;;;;;N;;;;;\n11C21;BHAIKSUKI LETTER NA;Lo;0;L;;;;;N;;;;;\n11C22;BHAIKSUKI LETTER PA;Lo;0;L;;;;;N;;;;;\n11C23;BHAIKSUKI LETTER PHA;Lo;0;L;;;;;N;;;;;\n11C24;BHAIKSUKI LETTER BA;Lo;0;L;;;;;N;;;;;\n11C25;BHAIKSUKI LETTER BHA;Lo;0;L;;;;;N;;;;;\n11C26;BHAIKSUKI LETTER MA;Lo;0;L;;;;;N;;;;;\n11C27;BHAIKSUKI LETTER YA;Lo;0;L;;;;;N;;;;;\n11C28;BHAIKSUKI LETTER RA;Lo;0;L;;;;;N;;;;;\n11C29;BHAIKSUKI LETTER LA;Lo;0;L;;;;;N;;;;;\n11C2A;BHAIKSUKI LETTER VA;Lo;0;L;;;;;N;;;;;\n11C2B;BHAIKSUKI LETTER SHA;Lo;0;L;;;;;N;;;;;\n11C2C;BHAIKSUKI LETTER SSA;Lo;0;L;;;;;N;;;;;\n11C2D;BHAIKSUKI LETTER SA;Lo;0;L;;;;;N;;;;;\n11C2E;BHAIKSUKI LETTER HA;Lo;0;L;;;;;N;;;;;\n11C2F;BHAIKSUKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n11C30;BHAIKSUKI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n11C31;BHAIKSUKI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n11C32;BHAIKSUKI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n11C33;BHAIKSUKI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n11C34;BHAIKSUKI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n11C35;BHAIKSUKI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;\n11C36;BHAIKSUKI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;\n11C38;BHAIKSUKI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n11C39;BHAIKSUKI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n11C3A;BHAIKSUKI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n11C3B;BHAIKSUKI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;\n11C3C;BHAIKSUKI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n11C3D;BHAIKSUKI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11C3E;BHAIKSUKI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n11C3F;BHAIKSUKI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;\n11C40;BHAIKSUKI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;\n11C41;BHAIKSUKI DANDA;Po;0;L;;;;;N;;;;;\n11C42;BHAIKSUKI DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n11C43;BHAIKSUKI WORD SEPARATOR;Po;0;L;;;;;N;;;;;\n11C44;BHAIKSUKI GAP FILLER-1;Po;0;L;;;;;N;;;;;\n11C45;BHAIKSUKI GAP FILLER-2;Po;0;L;;;;;N;;;;;\n11C50;BHAIKSUKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n11C51;BHAIKSUKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n11C52;BHAIKSUKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n11C53;BHAIKSUKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n11C54;BHAIKSUKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n11C55;BHAIKSUKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n11C56;BHAIKSUKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n11C57;BHAIKSUKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n11C58;BHAIKSUKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n11C59;BHAIKSUKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11C5A;BHAIKSUKI NUMBER ONE;No;0;L;;;;1;N;;;;;\n11C5B;BHAIKSUKI NUMBER TWO;No;0;L;;;;2;N;;;;;\n11C5C;BHAIKSUKI NUMBER THREE;No;0;L;;;;3;N;;;;;\n11C5D;BHAIKSUKI NUMBER FOUR;No;0;L;;;;4;N;;;;;\n11C5E;BHAIKSUKI NUMBER FIVE;No;0;L;;;;5;N;;;;;\n11C5F;BHAIKSUKI NUMBER SIX;No;0;L;;;;6;N;;;;;\n11C60;BHAIKSUKI NUMBER SEVEN;No;0;L;;;;7;N;;;;;\n11C61;BHAIKSUKI NUMBER EIGHT;No;0;L;;;;8;N;;;;;\n11C62;BHAIKSUKI NUMBER NINE;No;0;L;;;;9;N;;;;;\n11C63;BHAIKSUKI NUMBER TEN;No;0;L;;;;10;N;;;;;\n11C64;BHAIKSUKI NUMBER TWENTY;No;0;L;;;;20;N;;;;;\n11C65;BHAIKSUKI NUMBER THIRTY;No;0;L;;;;30;N;;;;;\n11C66;BHAIKSUKI NUMBER FORTY;No;0;L;;;;40;N;;;;;\n11C67;BHAIKSUKI NUMBER FIFTY;No;0;L;;;;50;N;;;;;\n11C68;BHAIKSUKI NUMBER SIXTY;No;0;L;;;;60;N;;;;;\n11C69;BHAIKSUKI NUMBER SEVENTY;No;0;L;;;;70;N;;;;;\n11C6A;BHAIKSUKI NUMBER EIGHTY;No;0;L;;;;80;N;;;;;\n11C6B;BHAIKSUKI NUMBER NINETY;No;0;L;;;;90;N;;;;;\n11C6C;BHAIKSUKI HUNDREDS UNIT MARK;No;0;L;;;;100;N;;;;;\n11C70;MARCHEN HEAD MARK;Po;0;L;;;;;N;;;;;\n11C71;MARCHEN MARK SHAD;Po;0;L;;;;;N;;;;;\n11C72;MARCHEN LETTER KA;Lo;0;L;;;;;N;;;;;\n11C73;MARCHEN LETTER KHA;Lo;0;L;;;;;N;;;;;\n11C74;MARCHEN LETTER GA;Lo;0;L;;;;;N;;;;;\n11C75;MARCHEN LETTER NGA;Lo;0;L;;;;;N;;;;;\n11C76;MARCHEN LETTER CA;Lo;0;L;;;;;N;;;;;\n11C77;MARCHEN LETTER CHA;Lo;0;L;;;;;N;;;;;\n11C78;MARCHEN LETTER JA;Lo;0;L;;;;;N;;;;;\n11C79;MARCHEN LETTER NYA;Lo;0;L;;;;;N;;;;;\n11C7A;MARCHEN LETTER TA;Lo;0;L;;;;;N;;;;;\n11C7B;MARCHEN LETTER THA;Lo;0;L;;;;;N;;;;;\n11C7C;MARCHEN LETTER DA;Lo;0;L;;;;;N;;;;;\n11C7D;MARCHEN LETTER NA;Lo;0;L;;;;;N;;;;;\n11C7E;MARCHEN LETTER PA;Lo;0;L;;;;;N;;;;;\n11C7F;MARCHEN LETTER PHA;Lo;0;L;;;;;N;;;;;\n11C80;MARCHEN LETTER BA;Lo;0;L;;;;;N;;;;;\n11C81;MARCHEN LETTER MA;Lo;0;L;;;;;N;;;;;\n11C82;MARCHEN LETTER TSA;Lo;0;L;;;;;N;;;;;\n11C83;MARCHEN LETTER TSHA;Lo;0;L;;;;;N;;;;;\n11C84;MARCHEN LETTER DZA;Lo;0;L;;;;;N;;;;;\n11C85;MARCHEN LETTER WA;Lo;0;L;;;;;N;;;;;\n11C86;MARCHEN LETTER ZHA;Lo;0;L;;;;;N;;;;;\n11C87;MARCHEN LETTER ZA;Lo;0;L;;;;;N;;;;;\n11C88;MARCHEN LETTER -A;Lo;0;L;;;;;N;;;;;\n11C89;MARCHEN LETTER YA;Lo;0;L;;;;;N;;;;;\n11C8A;MARCHEN LETTER RA;Lo;0;L;;;;;N;;;;;\n11C8B;MARCHEN LETTER LA;Lo;0;L;;;;;N;;;;;\n11C8C;MARCHEN LETTER SHA;Lo;0;L;;;;;N;;;;;\n11C8D;MARCHEN LETTER SA;Lo;0;L;;;;;N;;;;;\n11C8E;MARCHEN LETTER HA;Lo;0;L;;;;;N;;;;;\n11C8F;MARCHEN LETTER A;Lo;0;L;;;;;N;;;;;\n11C92;MARCHEN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;\n11C93;MARCHEN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;\n11C94;MARCHEN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;\n11C95;MARCHEN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;\n11C96;MARCHEN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;\n11C97;MARCHEN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;\n11C98;MARCHEN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;\n11C99;MARCHEN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;\n11C9A;MARCHEN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;\n11C9B;MARCHEN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;\n11C9C;MARCHEN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;\n11C9D;MARCHEN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;\n11C9E;MARCHEN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;\n11C9F;MARCHEN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;\n11CA0;MARCHEN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;\n11CA1;MARCHEN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;\n11CA2;MARCHEN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;\n11CA3;MARCHEN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;\n11CA4;MARCHEN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;\n11CA5;MARCHEN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;;\n11CA6;MARCHEN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;\n11CA7;MARCHEN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;\n11CA9;MARCHEN SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;\n11CAA;MARCHEN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;;\n11CAB;MARCHEN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;\n11CAC;MARCHEN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;\n11CAD;MARCHEN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;\n11CAE;MARCHEN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;\n11CAF;MARCHEN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;\n11CB0;MARCHEN VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;\n11CB1;MARCHEN VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n11CB2;MARCHEN VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n11CB3;MARCHEN VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n11CB4;MARCHEN VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n11CB5;MARCHEN SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11CB6;MARCHEN SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n11D00;MASARAM GONDI LETTER A;Lo;0;L;;;;;N;;;;;\n11D01;MASARAM GONDI LETTER AA;Lo;0;L;;;;;N;;;;;\n11D02;MASARAM GONDI LETTER I;Lo;0;L;;;;;N;;;;;\n11D03;MASARAM GONDI LETTER II;Lo;0;L;;;;;N;;;;;\n11D04;MASARAM GONDI LETTER U;Lo;0;L;;;;;N;;;;;\n11D05;MASARAM GONDI LETTER UU;Lo;0;L;;;;;N;;;;;\n11D06;MASARAM GONDI LETTER E;Lo;0;L;;;;;N;;;;;\n11D08;MASARAM GONDI LETTER AI;Lo;0;L;;;;;N;;;;;\n11D09;MASARAM GONDI LETTER O;Lo;0;L;;;;;N;;;;;\n11D0B;MASARAM GONDI LETTER AU;Lo;0;L;;;;;N;;;;;\n11D0C;MASARAM GONDI LETTER KA;Lo;0;L;;;;;N;;;;;\n11D0D;MASARAM GONDI LETTER KHA;Lo;0;L;;;;;N;;;;;\n11D0E;MASARAM GONDI LETTER GA;Lo;0;L;;;;;N;;;;;\n11D0F;MASARAM GONDI LETTER GHA;Lo;0;L;;;;;N;;;;;\n11D10;MASARAM GONDI LETTER NGA;Lo;0;L;;;;;N;;;;;\n11D11;MASARAM GONDI LETTER CA;Lo;0;L;;;;;N;;;;;\n11D12;MASARAM GONDI LETTER CHA;Lo;0;L;;;;;N;;;;;\n11D13;MASARAM GONDI LETTER JA;Lo;0;L;;;;;N;;;;;\n11D14;MASARAM GONDI LETTER JHA;Lo;0;L;;;;;N;;;;;\n11D15;MASARAM GONDI LETTER NYA;Lo;0;L;;;;;N;;;;;\n11D16;MASARAM GONDI LETTER TTA;Lo;0;L;;;;;N;;;;;\n11D17;MASARAM GONDI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11D18;MASARAM GONDI LETTER DDA;Lo;0;L;;;;;N;;;;;\n11D19;MASARAM GONDI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11D1A;MASARAM GONDI LETTER NNA;Lo;0;L;;;;;N;;;;;\n11D1B;MASARAM GONDI LETTER TA;Lo;0;L;;;;;N;;;;;\n11D1C;MASARAM GONDI LETTER THA;Lo;0;L;;;;;N;;;;;\n11D1D;MASARAM GONDI LETTER DA;Lo;0;L;;;;;N;;;;;\n11D1E;MASARAM GONDI LETTER DHA;Lo;0;L;;;;;N;;;;;\n11D1F;MASARAM GONDI LETTER NA;Lo;0;L;;;;;N;;;;;\n11D20;MASARAM GONDI LETTER PA;Lo;0;L;;;;;N;;;;;\n11D21;MASARAM GONDI LETTER PHA;Lo;0;L;;;;;N;;;;;\n11D22;MASARAM GONDI LETTER BA;Lo;0;L;;;;;N;;;;;\n11D23;MASARAM GONDI LETTER BHA;Lo;0;L;;;;;N;;;;;\n11D24;MASARAM GONDI LETTER MA;Lo;0;L;;;;;N;;;;;\n11D25;MASARAM GONDI LETTER YA;Lo;0;L;;;;;N;;;;;\n11D26;MASARAM GONDI LETTER RA;Lo;0;L;;;;;N;;;;;\n11D27;MASARAM GONDI LETTER LA;Lo;0;L;;;;;N;;;;;\n11D28;MASARAM GONDI LETTER VA;Lo;0;L;;;;;N;;;;;\n11D29;MASARAM GONDI LETTER SHA;Lo;0;L;;;;;N;;;;;\n11D2A;MASARAM GONDI LETTER SSA;Lo;0;L;;;;;N;;;;;\n11D2B;MASARAM GONDI LETTER SA;Lo;0;L;;;;;N;;;;;\n11D2C;MASARAM GONDI LETTER HA;Lo;0;L;;;;;N;;;;;\n11D2D;MASARAM GONDI LETTER LLA;Lo;0;L;;;;;N;;;;;\n11D2E;MASARAM GONDI LETTER KSSA;Lo;0;L;;;;;N;;;;;\n11D2F;MASARAM GONDI LETTER JNYA;Lo;0;L;;;;;N;;;;;\n11D30;MASARAM GONDI LETTER TRA;Lo;0;L;;;;;N;;;;;\n11D31;MASARAM GONDI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;\n11D32;MASARAM GONDI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n11D33;MASARAM GONDI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n11D34;MASARAM GONDI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n11D35;MASARAM GONDI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n11D36;MASARAM GONDI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n11D3A;MASARAM GONDI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;\n11D3C;MASARAM GONDI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n11D3D;MASARAM GONDI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;\n11D3F;MASARAM GONDI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;\n11D40;MASARAM GONDI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11D41;MASARAM GONDI SIGN VISARGA;Mn;0;NSM;;;;;N;;;;;\n11D42;MASARAM GONDI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;\n11D43;MASARAM GONDI SIGN CANDRA;Mn;0;NSM;;;;;N;;;;;\n11D44;MASARAM GONDI SIGN HALANTA;Mn;9;NSM;;;;;N;;;;;\n11D45;MASARAM GONDI VIRAMA;Mn;9;NSM;;;;;N;;;;;\n11D46;MASARAM GONDI REPHA;Lo;0;L;;;;;N;;;;;\n11D47;MASARAM GONDI RA-KARA;Mn;0;NSM;;;;;N;;;;;\n11D50;MASARAM GONDI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n11D51;MASARAM GONDI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n11D52;MASARAM GONDI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n11D53;MASARAM GONDI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n11D54;MASARAM GONDI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n11D55;MASARAM GONDI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n11D56;MASARAM GONDI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n11D57;MASARAM GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n11D58;MASARAM GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n11D59;MASARAM GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11D60;GUNJALA GONDI LETTER A;Lo;0;L;;;;;N;;;;;\n11D61;GUNJALA GONDI LETTER AA;Lo;0;L;;;;;N;;;;;\n11D62;GUNJALA GONDI LETTER I;Lo;0;L;;;;;N;;;;;\n11D63;GUNJALA GONDI LETTER II;Lo;0;L;;;;;N;;;;;\n11D64;GUNJALA GONDI LETTER U;Lo;0;L;;;;;N;;;;;\n11D65;GUNJALA GONDI LETTER UU;Lo;0;L;;;;;N;;;;;\n11D67;GUNJALA GONDI LETTER EE;Lo;0;L;;;;;N;;;;;\n11D68;GUNJALA GONDI LETTER AI;Lo;0;L;;;;;N;;;;;\n11D6A;GUNJALA GONDI LETTER OO;Lo;0;L;;;;;N;;;;;\n11D6B;GUNJALA GONDI LETTER AU;Lo;0;L;;;;;N;;;;;\n11D6C;GUNJALA GONDI LETTER YA;Lo;0;L;;;;;N;;;;;\n11D6D;GUNJALA GONDI LETTER VA;Lo;0;L;;;;;N;;;;;\n11D6E;GUNJALA GONDI LETTER BA;Lo;0;L;;;;;N;;;;;\n11D6F;GUNJALA GONDI LETTER BHA;Lo;0;L;;;;;N;;;;;\n11D70;GUNJALA GONDI LETTER MA;Lo;0;L;;;;;N;;;;;\n11D71;GUNJALA GONDI LETTER KA;Lo;0;L;;;;;N;;;;;\n11D72;GUNJALA GONDI LETTER KHA;Lo;0;L;;;;;N;;;;;\n11D73;GUNJALA GONDI LETTER TA;Lo;0;L;;;;;N;;;;;\n11D74;GUNJALA GONDI LETTER THA;Lo;0;L;;;;;N;;;;;\n11D75;GUNJALA GONDI LETTER LA;Lo;0;L;;;;;N;;;;;\n11D76;GUNJALA GONDI LETTER GA;Lo;0;L;;;;;N;;;;;\n11D77;GUNJALA GONDI LETTER GHA;Lo;0;L;;;;;N;;;;;\n11D78;GUNJALA GONDI LETTER DA;Lo;0;L;;;;;N;;;;;\n11D79;GUNJALA GONDI LETTER DHA;Lo;0;L;;;;;N;;;;;\n11D7A;GUNJALA GONDI LETTER NA;Lo;0;L;;;;;N;;;;;\n11D7B;GUNJALA GONDI LETTER CA;Lo;0;L;;;;;N;;;;;\n11D7C;GUNJALA GONDI LETTER CHA;Lo;0;L;;;;;N;;;;;\n11D7D;GUNJALA GONDI LETTER TTA;Lo;0;L;;;;;N;;;;;\n11D7E;GUNJALA GONDI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11D7F;GUNJALA GONDI LETTER LLA;Lo;0;L;;;;;N;;;;;\n11D80;GUNJALA GONDI LETTER JA;Lo;0;L;;;;;N;;;;;\n11D81;GUNJALA GONDI LETTER JHA;Lo;0;L;;;;;N;;;;;\n11D82;GUNJALA GONDI LETTER DDA;Lo;0;L;;;;;N;;;;;\n11D83;GUNJALA GONDI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11D84;GUNJALA GONDI LETTER NGA;Lo;0;L;;;;;N;;;;;\n11D85;GUNJALA GONDI LETTER PA;Lo;0;L;;;;;N;;;;;\n11D86;GUNJALA GONDI LETTER PHA;Lo;0;L;;;;;N;;;;;\n11D87;GUNJALA GONDI LETTER HA;Lo;0;L;;;;;N;;;;;\n11D88;GUNJALA GONDI LETTER RA;Lo;0;L;;;;;N;;;;;\n11D89;GUNJALA GONDI LETTER SA;Lo;0;L;;;;;N;;;;;\n11D8A;GUNJALA GONDI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n11D8B;GUNJALA GONDI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n11D8C;GUNJALA GONDI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n11D8D;GUNJALA GONDI VOWEL SIGN U;Mc;0;L;;;;;N;;;;;\n11D8E;GUNJALA GONDI VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;\n11D90;GUNJALA GONDI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;\n11D91;GUNJALA GONDI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;\n11D93;GUNJALA GONDI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;\n11D94;GUNJALA GONDI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n11D95;GUNJALA GONDI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11D96;GUNJALA GONDI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n11D97;GUNJALA GONDI VIRAMA;Mn;9;NSM;;;;;N;;;;;\n11D98;GUNJALA GONDI OM;Lo;0;L;;;;;N;;;;;\n11DA0;GUNJALA GONDI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n11DA1;GUNJALA GONDI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n11DA2;GUNJALA GONDI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n11DA3;GUNJALA GONDI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n11DA4;GUNJALA GONDI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n11DA5;GUNJALA GONDI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n11DA6;GUNJALA GONDI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n11DA7;GUNJALA GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n11DA8;GUNJALA GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n11DA9;GUNJALA GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11DB0;TOLONG SIKI LETTER I;Lo;0;L;;;;;N;;;;;\n11DB1;TOLONG SIKI LETTER E;Lo;0;L;;;;;N;;;;;\n11DB2;TOLONG SIKI LETTER U;Lo;0;L;;;;;N;;;;;\n11DB3;TOLONG SIKI LETTER O;Lo;0;L;;;;;N;;;;;\n11DB4;TOLONG SIKI LETTER A;Lo;0;L;;;;;N;;;;;\n11DB5;TOLONG SIKI LETTER AA;Lo;0;L;;;;;N;;;;;\n11DB6;TOLONG SIKI LETTER P;Lo;0;L;;;;;N;;;;;\n11DB7;TOLONG SIKI LETTER PH;Lo;0;L;;;;;N;;;;;\n11DB8;TOLONG SIKI LETTER B;Lo;0;L;;;;;N;;;;;\n11DB9;TOLONG SIKI LETTER BH;Lo;0;L;;;;;N;;;;;\n11DBA;TOLONG SIKI LETTER M;Lo;0;L;;;;;N;;;;;\n11DBB;TOLONG SIKI LETTER T;Lo;0;L;;;;;N;;;;;\n11DBC;TOLONG SIKI LETTER TH;Lo;0;L;;;;;N;;;;;\n11DBD;TOLONG SIKI LETTER D;Lo;0;L;;;;;N;;;;;\n11DBE;TOLONG SIKI LETTER DH;Lo;0;L;;;;;N;;;;;\n11DBF;TOLONG SIKI LETTER N;Lo;0;L;;;;;N;;;;;\n11DC0;TOLONG SIKI LETTER TT;Lo;0;L;;;;;N;;;;;\n11DC1;TOLONG SIKI LETTER TTH;Lo;0;L;;;;;N;;;;;\n11DC2;TOLONG SIKI LETTER DD;Lo;0;L;;;;;N;;;;;\n11DC3;TOLONG SIKI LETTER DDH;Lo;0;L;;;;;N;;;;;\n11DC4;TOLONG SIKI LETTER NN;Lo;0;L;;;;;N;;;;;\n11DC5;TOLONG SIKI LETTER C;Lo;0;L;;;;;N;;;;;\n11DC6;TOLONG SIKI LETTER CH;Lo;0;L;;;;;N;;;;;\n11DC7;TOLONG SIKI LETTER J;Lo;0;L;;;;;N;;;;;\n11DC8;TOLONG SIKI LETTER JH;Lo;0;L;;;;;N;;;;;\n11DC9;TOLONG SIKI LETTER NY;Lo;0;L;;;;;N;;;;;\n11DCA;TOLONG SIKI LETTER K;Lo;0;L;;;;;N;;;;;\n11DCB;TOLONG SIKI LETTER KH;Lo;0;L;;;;;N;;;;;\n11DCC;TOLONG SIKI LETTER G;Lo;0;L;;;;;N;;;;;\n11DCD;TOLONG SIKI LETTER GH;Lo;0;L;;;;;N;;;;;\n11DCE;TOLONG SIKI LETTER NG;Lo;0;L;;;;;N;;;;;\n11DCF;TOLONG SIKI LETTER Y;Lo;0;L;;;;;N;;;;;\n11DD0;TOLONG SIKI LETTER R;Lo;0;L;;;;;N;;;;;\n11DD1;TOLONG SIKI LETTER L;Lo;0;L;;;;;N;;;;;\n11DD2;TOLONG SIKI LETTER V;Lo;0;L;;;;;N;;;;;\n11DD3;TOLONG SIKI LETTER NNY;Lo;0;L;;;;;N;;;;;\n11DD4;TOLONG SIKI LETTER S;Lo;0;L;;;;;N;;;;;\n11DD5;TOLONG SIKI LETTER H;Lo;0;L;;;;;N;;;;;\n11DD6;TOLONG SIKI LETTER X;Lo;0;L;;;;;N;;;;;\n11DD7;TOLONG SIKI LETTER RR;Lo;0;L;;;;;N;;;;;\n11DD8;TOLONG SIKI LETTER RRH;Lo;0;L;;;;;N;;;;;\n11DD9;TOLONG SIKI SIGN SELA;Lm;0;L;;;;;N;;;;;\n11DDA;TOLONG SIKI SIGN HECAKA;Lo;0;L;;;;;N;;;;;\n11DDB;TOLONG SIKI UNGGA;Lo;0;L;;;;;N;;;;;\n11DE0;TOLONG SIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n11DE1;TOLONG SIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n11DE2;TOLONG SIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n11DE3;TOLONG SIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n11DE4;TOLONG SIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n11DE5;TOLONG SIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n11DE6;TOLONG SIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n11DE7;TOLONG SIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n11DE8;TOLONG SIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n11DE9;TOLONG SIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11EE0;MAKASAR LETTER KA;Lo;0;L;;;;;N;;;;;\n11EE1;MAKASAR LETTER GA;Lo;0;L;;;;;N;;;;;\n11EE2;MAKASAR LETTER NGA;Lo;0;L;;;;;N;;;;;\n11EE3;MAKASAR LETTER PA;Lo;0;L;;;;;N;;;;;\n11EE4;MAKASAR LETTER BA;Lo;0;L;;;;;N;;;;;\n11EE5;MAKASAR LETTER MA;Lo;0;L;;;;;N;;;;;\n11EE6;MAKASAR LETTER TA;Lo;0;L;;;;;N;;;;;\n11EE7;MAKASAR LETTER DA;Lo;0;L;;;;;N;;;;;\n11EE8;MAKASAR LETTER NA;Lo;0;L;;;;;N;;;;;\n11EE9;MAKASAR LETTER CA;Lo;0;L;;;;;N;;;;;\n11EEA;MAKASAR LETTER JA;Lo;0;L;;;;;N;;;;;\n11EEB;MAKASAR LETTER NYA;Lo;0;L;;;;;N;;;;;\n11EEC;MAKASAR LETTER YA;Lo;0;L;;;;;N;;;;;\n11EED;MAKASAR LETTER RA;Lo;0;L;;;;;N;;;;;\n11EEE;MAKASAR LETTER LA;Lo;0;L;;;;;N;;;;;\n11EEF;MAKASAR LETTER VA;Lo;0;L;;;;;N;;;;;\n11EF0;MAKASAR LETTER SA;Lo;0;L;;;;;N;;;;;\n11EF1;MAKASAR LETTER A;Lo;0;L;;;;;N;;;;;\n11EF2;MAKASAR ANGKA;Lo;0;L;;;;;N;;;;;\n11EF3;MAKASAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n11EF4;MAKASAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n11EF5;MAKASAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n11EF7;MAKASAR PASSIMBANG;Po;0;L;;;;;N;;;;;\n11EF8;MAKASAR END OF SECTION;Po;0;L;;;;;N;;;;;\n11F00;KAWI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;\n11F01;KAWI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n11F02;KAWI SIGN REPHA;Lo;0;L;;;;;N;;;;;\n11F03;KAWI SIGN VISARGA;Mc;0;L;;;;;N;;;;;\n11F04;KAWI LETTER A;Lo;0;L;;;;;N;;;;;\n11F05;KAWI LETTER AA;Lo;0;L;;;;;N;;;;;\n11F06;KAWI LETTER I;Lo;0;L;;;;;N;;;;;\n11F07;KAWI LETTER II;Lo;0;L;;;;;N;;;;;\n11F08;KAWI LETTER U;Lo;0;L;;;;;N;;;;;\n11F09;KAWI LETTER UU;Lo;0;L;;;;;N;;;;;\n11F0A;KAWI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;\n11F0B;KAWI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;\n11F0C;KAWI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;\n11F0D;KAWI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;\n11F0E;KAWI LETTER E;Lo;0;L;;;;;N;;;;;\n11F0F;KAWI LETTER AI;Lo;0;L;;;;;N;;;;;\n11F10;KAWI LETTER O;Lo;0;L;;;;;N;;;;;\n11F12;KAWI LETTER KA;Lo;0;L;;;;;N;;;;;\n11F13;KAWI LETTER KHA;Lo;0;L;;;;;N;;;;;\n11F14;KAWI LETTER GA;Lo;0;L;;;;;N;;;;;\n11F15;KAWI LETTER GHA;Lo;0;L;;;;;N;;;;;\n11F16;KAWI LETTER NGA;Lo;0;L;;;;;N;;;;;\n11F17;KAWI LETTER CA;Lo;0;L;;;;;N;;;;;\n11F18;KAWI LETTER CHA;Lo;0;L;;;;;N;;;;;\n11F19;KAWI LETTER JA;Lo;0;L;;;;;N;;;;;\n11F1A;KAWI LETTER JHA;Lo;0;L;;;;;N;;;;;\n11F1B;KAWI LETTER NYA;Lo;0;L;;;;;N;;;;;\n11F1C;KAWI LETTER TTA;Lo;0;L;;;;;N;;;;;\n11F1D;KAWI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n11F1E;KAWI LETTER DDA;Lo;0;L;;;;;N;;;;;\n11F1F;KAWI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n11F20;KAWI LETTER NNA;Lo;0;L;;;;;N;;;;;\n11F21;KAWI LETTER TA;Lo;0;L;;;;;N;;;;;\n11F22;KAWI LETTER THA;Lo;0;L;;;;;N;;;;;\n11F23;KAWI LETTER DA;Lo;0;L;;;;;N;;;;;\n11F24;KAWI LETTER DHA;Lo;0;L;;;;;N;;;;;\n11F25;KAWI LETTER NA;Lo;0;L;;;;;N;;;;;\n11F26;KAWI LETTER PA;Lo;0;L;;;;;N;;;;;\n11F27;KAWI LETTER PHA;Lo;0;L;;;;;N;;;;;\n11F28;KAWI LETTER BA;Lo;0;L;;;;;N;;;;;\n11F29;KAWI LETTER BHA;Lo;0;L;;;;;N;;;;;\n11F2A;KAWI LETTER MA;Lo;0;L;;;;;N;;;;;\n11F2B;KAWI LETTER YA;Lo;0;L;;;;;N;;;;;\n11F2C;KAWI LETTER RA;Lo;0;L;;;;;N;;;;;\n11F2D;KAWI LETTER LA;Lo;0;L;;;;;N;;;;;\n11F2E;KAWI LETTER WA;Lo;0;L;;;;;N;;;;;\n11F2F;KAWI LETTER SHA;Lo;0;L;;;;;N;;;;;\n11F30;KAWI LETTER SSA;Lo;0;L;;;;;N;;;;;\n11F31;KAWI LETTER SA;Lo;0;L;;;;;N;;;;;\n11F32;KAWI LETTER HA;Lo;0;L;;;;;N;;;;;\n11F33;KAWI LETTER JNYA;Lo;0;L;;;;;N;;;;;\n11F34;KAWI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n11F35;KAWI VOWEL SIGN ALTERNATE AA;Mc;0;L;;;;;N;;;;;\n11F36;KAWI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n11F37;KAWI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n11F38;KAWI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;\n11F39;KAWI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;\n11F3A;KAWI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;\n11F3E;KAWI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n11F3F;KAWI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\n11F40;KAWI VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;;\n11F41;KAWI SIGN KILLER;Mc;9;L;;;;;N;;;;;\n11F42;KAWI CONJOINER;Mn;9;NSM;;;;;N;;;;;\n11F43;KAWI DANDA;Po;0;L;;;;;N;;;;;\n11F44;KAWI DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n11F45;KAWI PUNCTUATION SECTION MARKER;Po;0;L;;;;;N;;;;;\n11F46;KAWI PUNCTUATION ALTERNATE SECTION MARKER;Po;0;L;;;;;N;;;;;\n11F47;KAWI PUNCTUATION FLOWER;Po;0;L;;;;;N;;;;;\n11F48;KAWI PUNCTUATION SPACE FILLER;Po;0;L;;;;;N;;;;;\n11F49;KAWI PUNCTUATION DOT;Po;0;L;;;;;N;;;;;\n11F4A;KAWI PUNCTUATION DOUBLE DOT;Po;0;L;;;;;N;;;;;\n11F4B;KAWI PUNCTUATION TRIPLE DOT;Po;0;L;;;;;N;;;;;\n11F4C;KAWI PUNCTUATION CIRCLE;Po;0;L;;;;;N;;;;;\n11F4D;KAWI PUNCTUATION FILLED CIRCLE;Po;0;L;;;;;N;;;;;\n11F4E;KAWI PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;;\n11F4F;KAWI PUNCTUATION CLOSING SPIRAL;Po;0;L;;;;;N;;;;;\n11F50;KAWI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n11F51;KAWI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n11F52;KAWI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n11F53;KAWI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n11F54;KAWI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n11F55;KAWI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n11F56;KAWI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n11F57;KAWI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n11F58;KAWI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n11F59;KAWI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n11F5A;KAWI SIGN NUKTA;Mn;0;NSM;;;;;N;;;;;\n11FB0;LISU LETTER YHA;Lo;0;L;;;;;N;;;;;\n11FC0;TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH;No;0;L;;;;1/320;N;;;;;\n11FC1;TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;;\n11FC2;TAMIL FRACTION ONE EIGHTIETH;No;0;L;;;;1/80;N;;;;;\n11FC3;TAMIL FRACTION ONE SIXTY-FOURTH;No;0;L;;;;1/64;N;;;;;\n11FC4;TAMIL FRACTION ONE FORTIETH;No;0;L;;;;1/40;N;;;;;\n11FC5;TAMIL FRACTION ONE THIRTY-SECOND;No;0;L;;;;1/32;N;;;;;\n11FC6;TAMIL FRACTION THREE EIGHTIETHS;No;0;L;;;;3/80;N;;;;;\n11FC7;TAMIL FRACTION THREE SIXTY-FOURTHS;No;0;L;;;;3/64;N;;;;;\n11FC8;TAMIL FRACTION ONE TWENTIETH;No;0;L;;;;1/20;N;;;;;\n11FC9;TAMIL FRACTION ONE SIXTEENTH-1;No;0;L;;;;1/16;N;;;;;\n11FCA;TAMIL FRACTION ONE SIXTEENTH-2;No;0;L;;;;1/16;N;;;;;\n11FCB;TAMIL FRACTION ONE TENTH;No;0;L;;;;1/10;N;;;;;\n11FCC;TAMIL FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;;\n11FCD;TAMIL FRACTION THREE TWENTIETHS;No;0;L;;;;3/20;N;;;;;\n11FCE;TAMIL FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;;\n11FCF;TAMIL FRACTION ONE FIFTH;No;0;L;;;;1/5;N;;;;;\n11FD0;TAMIL FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;\n11FD1;TAMIL FRACTION ONE HALF-1;No;0;L;;;;1/2;N;;;;;\n11FD2;TAMIL FRACTION ONE HALF-2;No;0;L;;;;1/2;N;;;;;\n11FD3;TAMIL FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;\n11FD4;TAMIL FRACTION DOWNSCALING FACTOR KIIZH;No;0;L;;;;1/320;N;;;;;\n11FD5;TAMIL SIGN NEL;So;0;ON;;;;;N;;;;;\n11FD6;TAMIL SIGN CEVITU;So;0;ON;;;;;N;;;;;\n11FD7;TAMIL SIGN AAZHAAKKU;So;0;ON;;;;;N;;;;;\n11FD8;TAMIL SIGN UZHAKKU;So;0;ON;;;;;N;;;;;\n11FD9;TAMIL SIGN MUUVUZHAKKU;So;0;ON;;;;;N;;;;;\n11FDA;TAMIL SIGN KURUNI;So;0;ON;;;;;N;;;;;\n11FDB;TAMIL SIGN PATHAKKU;So;0;ON;;;;;N;;;;;\n11FDC;TAMIL SIGN MUKKURUNI;So;0;ON;;;;;N;;;;;\n11FDD;TAMIL SIGN KAACU;Sc;0;ET;;;;;N;;;;;\n11FDE;TAMIL SIGN PANAM;Sc;0;ET;;;;;N;;;;;\n11FDF;TAMIL SIGN PON;Sc;0;ET;;;;;N;;;;;\n11FE0;TAMIL SIGN VARAAKAN;Sc;0;ET;;;;;N;;;;;\n11FE1;TAMIL SIGN PAARAM;So;0;ON;;;;;N;;;;;\n11FE2;TAMIL SIGN KUZHI;So;0;ON;;;;;N;;;;;\n11FE3;TAMIL SIGN VELI;So;0;ON;;;;;N;;;;;\n11FE4;TAMIL WET CULTIVATION SIGN;So;0;ON;;;;;N;;;;;\n11FE5;TAMIL DRY CULTIVATION SIGN;So;0;ON;;;;;N;;;;;\n11FE6;TAMIL LAND SIGN;So;0;ON;;;;;N;;;;;\n11FE7;TAMIL SALT PAN SIGN;So;0;ON;;;;;N;;;;;\n11FE8;TAMIL TRADITIONAL CREDIT SIGN;So;0;ON;;;;;N;;;;;\n11FE9;TAMIL TRADITIONAL NUMBER SIGN;So;0;ON;;;;;N;;;;;\n11FEA;TAMIL CURRENT SIGN;So;0;ON;;;;;N;;;;;\n11FEB;TAMIL AND ODD SIGN;So;0;ON;;;;;N;;;;;\n11FEC;TAMIL SPENT SIGN;So;0;ON;;;;;N;;;;;\n11FED;TAMIL TOTAL SIGN;So;0;ON;;;;;N;;;;;\n11FEE;TAMIL IN POSSESSION SIGN;So;0;ON;;;;;N;;;;;\n11FEF;TAMIL STARTING FROM SIGN;So;0;ON;;;;;N;;;;;\n11FF0;TAMIL SIGN MUTHALIYA;So;0;ON;;;;;N;;;;;\n11FF1;TAMIL SIGN VAKAIYARAA;So;0;ON;;;;;N;;;;;\n11FFF;TAMIL PUNCTUATION END OF TEXT;Po;0;L;;;;;N;;;;;\n12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;;\n12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;;\n12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;;\n12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;;\n12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;;\n12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;;\n12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;;\n12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;;\n12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;;\n1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;;\n1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;;\n1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;\n1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;;\n1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;;\n12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;;\n12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;;\n12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;;\n12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;\n12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;;\n12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;;\n12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;;\n12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;\n1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;;\n1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;;\n1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;;\n1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;;\n1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;;\n1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;;\n12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;;\n12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;;\n12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;;\n12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;;\n12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;;\n12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;;\n12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;;\n12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;;\n12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;;\n12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;;\n1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;;\n1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;;\n1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;;\n1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;;\n1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;;\n1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;;\n12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;;\n12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;;\n12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;;\n12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;;\n12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;;\n12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;;\n12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;;\n12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;;\n12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;1;N;;;;;\n12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;1;N;;;;;\n1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;;\n1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;;\n1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;\n1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;\n1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;;\n1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;;\n12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;;\n12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;;\n12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;;\n12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;;\n12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;;\n12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;;\n12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;;\n12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;;\n12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;;\n12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;;\n1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;;\n1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;;\n1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;;\n1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;;\n1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;;\n12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;;\n12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;;\n12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;;\n12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;;\n12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;;\n12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;;\n12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;;\n12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;;\n12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;;\n12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;;\n1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;\n1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;;\n1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;;\n1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;;\n1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;;\n1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;;\n12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;;\n12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;;\n12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;;\n12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;;\n12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;;\n12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;;\n12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;;\n12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;;\n12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;;\n12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;;\n1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;;\n1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;;\n1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;;\n1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;;\n1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;;\n1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;;\n12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;;\n12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;;\n12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;;\n12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;;\n12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;;\n12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;;\n12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;;\n12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;;\n12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;;\n12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;1;N;;;;;\n1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;;\n1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;;\n1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;;\n1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;;\n1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;;\n1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;;\n12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;;\n12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;;\n12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;;\n12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;;\n12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;;\n12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;;\n12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;;\n12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;\n12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;;\n12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;;\n1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;;\n1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;;\n1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;;\n1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;;\n1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;;\n1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;;\n12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;;\n12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;;\n12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;;\n12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;;\n12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;;\n12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;;\n12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;;\n12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;;\n12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;;\n12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;;\n1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;;\n1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;;\n1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;;\n1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;;\n1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;;\n120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;;\n120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;;\n120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;;\n120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;\n120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;;\n120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;;\n120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;;\n120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;\n120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;\n120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;;\n120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;;\n120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;;\n120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;;\n120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;;\n120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;;\n120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;;\n120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;;\n120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;;\n120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;;\n120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;;\n120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;;\n120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;;\n120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;;\n120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;\n120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;\n120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;\n120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;;\n120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;;\n120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;;\n120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;;\n120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;;\n120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;;\n120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;;\n120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;;\n120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;;\n120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;;\n120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;;\n120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;;\n120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;;\n120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;;\n120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;;\n120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;;\n120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;;\n120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;;\n120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;;\n120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;;\n120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;;\n120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;;\n120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;;\n120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;;\n120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;;\n120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;;\n120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;;\n120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;\n120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;;\n120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;;\n120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;;\n120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;;\n120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;\n120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;;\n120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;;\n120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;;\n120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;;\n120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;;\n120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;;\n120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;;\n120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;;\n120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;;\n120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;;\n120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;;\n120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;;\n120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;;\n120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;;\n120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;;\n120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;;\n120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;;\n120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;;\n120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;\n120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;;\n120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;\n120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;;\n120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;;\n120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;;\n120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;;\n120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;;\n120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;;\n120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;;\n120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;;\n120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;;\n120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;;\n120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;;\n120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;;\n12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;;\n12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;;\n12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;;\n12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;;\n12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;;\n12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;;\n12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;;\n12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;;\n12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;;\n12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;;\n1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;;\n1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;\n1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;;\n1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;;\n1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;;\n12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;;\n12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;;\n12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;\n12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;;\n12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;;\n12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;;\n12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;;\n12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;;\n12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;;\n12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;;\n1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;;\n1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;;\n1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;;\n1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;;\n1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;;\n12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;;\n12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;;\n12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;;\n12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;;\n12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;;\n12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;;\n12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;;\n12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;;\n12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;;\n12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;;\n1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;;\n1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;;\n1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;;\n1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;;\n1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;;\n1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;;\n12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;;\n12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;;\n12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;;\n12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;;\n12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;;\n12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;;\n12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;;\n12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;;\n12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;;\n12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;;\n1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;;\n1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;\n1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;;\n1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;;\n1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;;\n1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;;\n12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;;\n12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;;\n12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;;\n12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;;\n12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;;\n12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;;\n12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;;\n12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;;\n12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;;\n12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;;\n1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;;\n1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;;\n1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;;\n1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;;\n1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;;\n12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;;\n12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;;\n12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;;\n12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;;\n12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;;\n12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;;\n12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;;\n12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;;\n12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;;\n12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;;\n1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;;\n1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;;\n1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;;\n1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;;\n1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;;\n1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;;\n12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;;\n12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;;\n12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;;\n12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;;\n12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;;\n12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;;\n12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;;\n12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;;\n12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;;\n1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;\n1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;;\n1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;;\n1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;;\n1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;;\n1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;;\n12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;;\n12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;;\n12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;;\n12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;;\n12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;;\n12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;;\n12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;;\n12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;;\n12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;;\n12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;;\n1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;;\n1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;;\n1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;;\n1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;;\n1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;;\n1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;;\n12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;;\n12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;;\n12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;;\n12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;;\n12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;;\n12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;;\n12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;;\n12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;;\n12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;;\n12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;;\n1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;;\n1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;;\n1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;;\n1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;;\n1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;;\n1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;;\n12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;;\n12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;;\n12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;;\n12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;;\n12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;;\n12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;;\n12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;;\n12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;;\n12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;;\n1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;;\n1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;;\n1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;;\n1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;\n1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;\n1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;;\n121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;;\n121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;;\n121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;;\n121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;;\n121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;;\n121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;;\n121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;;\n121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;;\n121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;;\n121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;;\n121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;;\n121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;;\n121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;;\n121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;;\n121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;;\n121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;;\n121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;;\n121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;;\n121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;;\n121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;;\n121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;;\n121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;;\n121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;;\n121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;;\n121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;;\n121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;;\n121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;\n121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;;\n121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;\n121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;;\n121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;;\n121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;\n121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;;\n121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;;\n121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;;\n121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;;\n121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;;\n121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;;\n121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;;\n121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;;\n121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;;\n121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;;\n121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;;\n121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;;\n121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;;\n121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;;\n121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;;\n121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;;\n121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;;\n121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;;\n121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;;\n121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;;\n121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;;\n121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;;\n121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;;\n121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;;\n121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;\n121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;;\n121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;;\n121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;\n121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;;\n121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;;\n121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;;\n121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;;\n121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;;\n121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;;\n121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;;\n121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;;\n121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;;\n121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;;\n121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;\n121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;\n121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;;\n121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;;\n121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;;\n121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;;\n121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;;\n121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;\n121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;;\n121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;;\n121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;;\n121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;;\n121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;;\n121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;;\n121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;;\n121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;;\n121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;;\n121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;;\n121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;;\n121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;;\n121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;;\n121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;;\n121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;;\n121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;;\n121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;;\n12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;;\n12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;;\n12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;;\n12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;;\n12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;;\n12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;;\n12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;;\n12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;;\n12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;;\n1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;;\n1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;\n1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;;\n1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;;\n1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;;\n1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;;\n12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;;\n12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;;\n12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;;\n12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;;\n12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;;\n12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;;\n12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;;\n12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;;\n12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;;\n12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;;\n1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;;\n1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;;\n1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;;\n1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;;\n1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;;\n1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;;\n12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;;\n12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;;\n12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;;\n12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;;\n12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;;\n12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;;\n12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;1/2;N;;;;;\n12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;;\n12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;;\n12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;;\n1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;;\n1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;2;N;;;;;\n1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;;\n1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;;\n1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;;\n1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;;\n12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;;\n12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;;\n12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;;\n12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;;\n12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;;\n12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;;\n12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;;\n12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;\n12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;;\n12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;;\n1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;;\n1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;;\n1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;;\n1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;;\n1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;;\n1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;;\n12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;;\n12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;;\n12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;;\n12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;;\n12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;;\n12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;;\n12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;;\n12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;;\n12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;;\n12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;;\n1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;;\n1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;;\n1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;;\n1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;;\n1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;;\n1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;;\n12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;\n12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;;\n12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;;\n12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;;\n12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;;\n12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;;\n12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;\n12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;;\n12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;;\n1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;;\n1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;;\n1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;;\n1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;;\n1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;\n1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;;\n12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;;\n12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;;\n12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;;\n12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;;\n12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;;\n12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;;\n12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;\n12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;\n12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;;\n12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;;\n1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;;\n1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;;\n1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;;\n1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;;\n1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;;\n1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;;\n12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;;\n12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;;\n12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;;\n12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;;\n12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;;\n12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;;\n12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;;\n12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;\n12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;;\n1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;;\n1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;;\n1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;;\n1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;;\n1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;;\n1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;;\n12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;;\n12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;;\n12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;;\n12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;;\n12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;;\n12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;;\n12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;;\n12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;;\n12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;;\n12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;;\n1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;;\n1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;;\n1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;;\n1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;;\n1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;;\n1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;;\n12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;;\n12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;;\n12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;;\n12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;;\n12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;;\n12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;;\n12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;;\n12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;;\n12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;;\n12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;;\n1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;;\n1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;;\n1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;;\n1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;;\n1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;;\n1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;;\n122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;;\n122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;;\n122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;;\n122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;;\n122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;;\n122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;;\n122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;;\n122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;;\n122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;;\n122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;;\n122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;;\n122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;;\n122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;;\n122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;;\n122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;;\n122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;;\n122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;;\n122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;;\n122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;;\n122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;;\n122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;;\n122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;;\n122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;;\n122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;;\n122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;;\n122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;;\n122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;;\n122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;;\n122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;\n122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;;\n122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;;\n122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;;\n122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;;\n122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;;\n122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;;\n122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;;\n122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;;\n122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;;\n122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;;\n122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;;\n122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;;\n122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;;\n122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;;\n122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;;\n122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;;\n122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;;\n122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;;\n122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;;\n122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;;\n122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;;\n122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;;\n122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;;\n122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;;\n122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;;\n122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;;\n122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;;\n122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;;\n122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;;\n122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;;\n122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;;\n122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;;\n122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;;\n122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;;\n122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;;\n122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;;\n122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;;\n122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;;\n122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;;\n122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;;\n122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;;\n122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;;\n122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;;\n122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;;\n122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;;\n122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;;\n122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;;\n122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;;\n122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;;\n122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;;\n122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;;\n122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;;\n122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;;\n122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;;\n122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;;\n122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;;\n122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;;\n122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;;\n122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;;\n122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;;\n122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;;\n122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;;\n122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;;\n122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;;\n122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;;\n122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;;\n12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;;\n12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;;\n12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;;\n12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;;\n12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;\n12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;;\n12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;;\n12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;;\n12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;;\n12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;;\n1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;;\n1230B;CUNEIFORM SIGN U;Lo;0;L;;;;1;N;;;;;\n1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;;\n1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;3;N;;;;;\n1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;;\n1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;;\n12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;;\n12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;;\n12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;;\n12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;;\n12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;;\n12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;;\n12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;;\n12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;\n12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;;\n12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;;\n1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;;\n1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;;\n1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;;\n1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;;\n1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;;\n1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;;\n12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;;\n12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;;\n12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;;\n12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;;\n12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;;\n12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;;\n12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;;\n12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;;\n12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;;\n12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;;\n1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;;\n1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;;\n1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;\n1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;\n1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;;\n1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;;\n12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;;\n12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;;\n12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;\n12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;;\n12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;;\n12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;;\n12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;;\n12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;;\n12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;;\n12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;;\n1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;;\n1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;;\n1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;;\n1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;;\n1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;;\n12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;;\n12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;;\n12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;;\n12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;;\n12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;;\n12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;;\n12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;;\n12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;;\n12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;;\n12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;;\n1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;;\n1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;;\n1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;;\n1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;;\n1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;;\n1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;;\n12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;;\n12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;;\n12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;;\n12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;;\n12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;;\n12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;;\n12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;;\n12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;;\n12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;;\n12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;;\n1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;;\n1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;;\n1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;;\n1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;;\n1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;;\n1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;;\n12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;;\n12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;;\n12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;;\n12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;;\n12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;;\n12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;;\n12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;;\n12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;;\n12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;;\n12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;;\n1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;;\n1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;;\n1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;;\n1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;;\n1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;;\n1236F;CUNEIFORM SIGN KAP ELAMITE;Lo;0;L;;;;;N;;;;;\n12370;CUNEIFORM SIGN AB TIMES NUN;Lo;0;L;;;;;N;;;;;\n12371;CUNEIFORM SIGN AB2 TIMES A;Lo;0;L;;;;;N;;;;;\n12372;CUNEIFORM SIGN AMAR TIMES KUG;Lo;0;L;;;;;N;;;;;\n12373;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASH;Lo;0;L;;;;;N;;;;;\n12374;CUNEIFORM SIGN DAG3;Lo;0;L;;;;;N;;;;;\n12375;CUNEIFORM SIGN DISH PLUS SHU;Lo;0;L;;;;;N;;;;;\n12376;CUNEIFORM SIGN DUB TIMES SHE;Lo;0;L;;;;;N;;;;;\n12377;CUNEIFORM SIGN EZEN TIMES GUD;Lo;0;L;;;;;N;;;;;\n12378;CUNEIFORM SIGN EZEN TIMES SHE;Lo;0;L;;;;;N;;;;;\n12379;CUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS A;Lo;0;L;;;;;N;;;;;\n1237A;CUNEIFORM SIGN GA2 TIMES ASH2;Lo;0;L;;;;;N;;;;;\n1237B;CUNEIFORM SIGN GE22;Lo;0;L;;;;;N;;;;;\n1237C;CUNEIFORM SIGN GIG;Lo;0;L;;;;;N;;;;;\n1237D;CUNEIFORM SIGN HUSH;Lo;0;L;;;;;N;;;;;\n1237E;CUNEIFORM SIGN KA TIMES ANSHE;Lo;0;L;;;;;N;;;;;\n1237F;CUNEIFORM SIGN KA TIMES ASH3;Lo;0;L;;;;;N;;;;;\n12380;CUNEIFORM SIGN KA TIMES GISH;Lo;0;L;;;;;N;;;;;\n12381;CUNEIFORM SIGN KA TIMES GUD;Lo;0;L;;;;;N;;;;;\n12382;CUNEIFORM SIGN KA TIMES HI TIMES ASH2;Lo;0;L;;;;;N;;;;;\n12383;CUNEIFORM SIGN KA TIMES LUM;Lo;0;L;;;;;N;;;;;\n12384;CUNEIFORM SIGN KA TIMES PA;Lo;0;L;;;;;N;;;;;\n12385;CUNEIFORM SIGN KA TIMES SHUL;Lo;0;L;;;;;N;;;;;\n12386;CUNEIFORM SIGN KA TIMES TU;Lo;0;L;;;;;N;;;;;\n12387;CUNEIFORM SIGN KA TIMES UR2;Lo;0;L;;;;;N;;;;;\n12388;CUNEIFORM SIGN LAGAB TIMES GI;Lo;0;L;;;;;N;;;;;\n12389;CUNEIFORM SIGN LU2 SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;;\n1238A;CUNEIFORM SIGN LU2 TIMES ESH2 PLUS LAL;Lo;0;L;;;;;N;;;;;\n1238B;CUNEIFORM SIGN LU2 TIMES SHU;Lo;0;L;;;;;N;;;;;\n1238C;CUNEIFORM SIGN MESH;Lo;0;L;;;;;N;;;;;\n1238D;CUNEIFORM SIGN MUSH3 TIMES ZA;Lo;0;L;;;;;N;;;;;\n1238E;CUNEIFORM SIGN NA4;Lo;0;L;;;;;N;;;;;\n1238F;CUNEIFORM SIGN NIN;Lo;0;L;;;;;N;;;;;\n12390;CUNEIFORM SIGN NIN9;Lo;0;L;;;;;N;;;;;\n12391;CUNEIFORM SIGN NINDA2 TIMES BAL;Lo;0;L;;;;;N;;;;;\n12392;CUNEIFORM SIGN NINDA2 TIMES GI;Lo;0;L;;;;;N;;;;;\n12393;CUNEIFORM SIGN NU11 ROTATED NINETY DEGREES;Lo;0;L;;;;;N;;;;;\n12394;CUNEIFORM SIGN PESH2 ASTERISK;Lo;0;L;;;;;N;;;;;\n12395;CUNEIFORM SIGN PIR2;Lo;0;L;;;;;N;;;;;\n12396;CUNEIFORM SIGN SAG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n12397;CUNEIFORM SIGN TI2;Lo;0;L;;;;;N;;;;;\n12398;CUNEIFORM SIGN UM TIMES ME;Lo;0;L;;;;;N;;;;;\n12399;CUNEIFORM SIGN U U;Lo;0;L;;;;2;N;;;;;\n12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;;\n12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;;\n12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;;\n12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;;\n12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;;\n12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;;\n12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;;\n12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;;\n12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;;\n12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;;\n1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;;\n1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;;\n1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;;\n1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;;\n1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;;\n1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;;\n12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;;\n12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;;\n12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;;\n12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;;\n12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;;\n12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;;\n12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;;\n12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;;\n12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;;\n12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;;\n1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;;\n1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;;\n1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;;\n1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;;\n1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;;\n1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;;\n12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;;\n12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;;\n12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;;\n12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;;\n12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;;\n12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;;\n12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;;\n12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;;\n12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;;\n12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;;\n1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;;\n1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;;\n1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;;\n1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;;\n1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;;\n1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;;\n12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;;\n12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;;\n12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;216000;N;;;;;\n12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;432000;N;;;;;\n12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;;\n12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;;\n12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;;\n12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;;\n12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;;\n12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;;\n1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;;\n1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;;\n1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;;\n1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;;\n1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;;\n1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;;\n12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;;\n12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;;\n12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;;\n12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;;\n12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;;\n12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;;\n12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;;\n12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;;\n12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;;\n12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;;\n1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;;\n1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;;\n1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;;\n1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;;\n1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;;\n1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;;\n12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;;\n12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;;\n12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;;\n12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;;\n12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;;\n12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;;\n12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;2;N;;;;;\n12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;3;N;;;;;\n12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;;\n12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;;\n1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;;\n1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;;\n1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;;\n1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;;\n1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;;\n1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;;\n12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;;\n12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;;\n12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;;\n12463;CUNEIFORM NUMERIC SIGN ONE QUARTER GUR;Nl;0;L;;;;1/4;N;;;;;\n12464;CUNEIFORM NUMERIC SIGN ONE HALF GUR;Nl;0;L;;;;1/2;N;;;;;\n12465;CUNEIFORM NUMERIC SIGN ELAMITE ONE THIRD;Nl;0;L;;;;1/3;N;;;;;\n12466;CUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDS;Nl;0;L;;;;2/3;N;;;;;\n12467;CUNEIFORM NUMERIC SIGN ELAMITE FORTY;Nl;0;L;;;;40;N;;;;;\n12468;CUNEIFORM NUMERIC SIGN ELAMITE FIFTY;Nl;0;L;;;;50;N;;;;;\n12469;CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM;Nl;0;L;;;;4;N;;;;;\n1246A;CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM;Nl;0;L;;;;5;N;;;;;\n1246B;CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM;Nl;0;L;;;;6;N;;;;;\n1246C;CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM;Nl;0;L;;;;7;N;;;;;\n1246D;CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM;Nl;0;L;;;;8;N;;;;;\n1246E;CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM;Nl;0;L;;;;9;N;;;;;\n12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;\n12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;;\n12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;;\n12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;;\n12474;CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON;Po;0;L;;;;;N;;;;;\n12480;CUNEIFORM SIGN AB TIMES NUN TENU;Lo;0;L;;;;;N;;;;;\n12481;CUNEIFORM SIGN AB TIMES SHU2;Lo;0;L;;;;;N;;;;;\n12482;CUNEIFORM SIGN AD TIMES ESH2;Lo;0;L;;;;;N;;;;;\n12483;CUNEIFORM SIGN BAD TIMES DISH TENU;Lo;0;L;;;;;N;;;;;\n12484;CUNEIFORM SIGN BAHAR2 TIMES AB2;Lo;0;L;;;;;N;;;;;\n12485;CUNEIFORM SIGN BAHAR2 TIMES NI;Lo;0;L;;;;;N;;;;;\n12486;CUNEIFORM SIGN BAHAR2 TIMES ZA;Lo;0;L;;;;;N;;;;;\n12487;CUNEIFORM SIGN BU OVER BU TIMES NA2;Lo;0;L;;;;;N;;;;;\n12488;CUNEIFORM SIGN DA TIMES TAK4;Lo;0;L;;;;;N;;;;;\n12489;CUNEIFORM SIGN DAG TIMES KUR;Lo;0;L;;;;;N;;;;;\n1248A;CUNEIFORM SIGN DIM TIMES IGI;Lo;0;L;;;;;N;;;;;\n1248B;CUNEIFORM SIGN DIM TIMES U U U;Lo;0;L;;;;;N;;;;;\n1248C;CUNEIFORM SIGN DIM2 TIMES UD;Lo;0;L;;;;;N;;;;;\n1248D;CUNEIFORM SIGN DUG TIMES ANSHE;Lo;0;L;;;;;N;;;;;\n1248E;CUNEIFORM SIGN DUG TIMES ASH;Lo;0;L;;;;;N;;;;;\n1248F;CUNEIFORM SIGN DUG TIMES ASH AT LEFT;Lo;0;L;;;;;N;;;;;\n12490;CUNEIFORM SIGN DUG TIMES DIN;Lo;0;L;;;;;N;;;;;\n12491;CUNEIFORM SIGN DUG TIMES DUN;Lo;0;L;;;;;N;;;;;\n12492;CUNEIFORM SIGN DUG TIMES ERIN2;Lo;0;L;;;;;N;;;;;\n12493;CUNEIFORM SIGN DUG TIMES GA;Lo;0;L;;;;;N;;;;;\n12494;CUNEIFORM SIGN DUG TIMES GI;Lo;0;L;;;;;N;;;;;\n12495;CUNEIFORM SIGN DUG TIMES GIR2 GUNU;Lo;0;L;;;;;N;;;;;\n12496;CUNEIFORM SIGN DUG TIMES GISH;Lo;0;L;;;;;N;;;;;\n12497;CUNEIFORM SIGN DUG TIMES HA;Lo;0;L;;;;;N;;;;;\n12498;CUNEIFORM SIGN DUG TIMES HI;Lo;0;L;;;;;N;;;;;\n12499;CUNEIFORM SIGN DUG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n1249A;CUNEIFORM SIGN DUG TIMES KASKAL;Lo;0;L;;;;;N;;;;;\n1249B;CUNEIFORM SIGN DUG TIMES KUR;Lo;0;L;;;;;N;;;;;\n1249C;CUNEIFORM SIGN DUG TIMES KUSHU2;Lo;0;L;;;;;N;;;;;\n1249D;CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL;Lo;0;L;;;;;N;;;;;\n1249E;CUNEIFORM SIGN DUG TIMES LAK-020;Lo;0;L;;;;;N;;;;;\n1249F;CUNEIFORM SIGN DUG TIMES LAM;Lo;0;L;;;;;N;;;;;\n124A0;CUNEIFORM SIGN DUG TIMES LAM TIMES KUR;Lo;0;L;;;;;N;;;;;\n124A1;CUNEIFORM SIGN DUG TIMES LUH PLUS GISH;Lo;0;L;;;;;N;;;;;\n124A2;CUNEIFORM SIGN DUG TIMES MASH;Lo;0;L;;;;;N;;;;;\n124A3;CUNEIFORM SIGN DUG TIMES MES;Lo;0;L;;;;;N;;;;;\n124A4;CUNEIFORM SIGN DUG TIMES MI;Lo;0;L;;;;;N;;;;;\n124A5;CUNEIFORM SIGN DUG TIMES NI;Lo;0;L;;;;;N;;;;;\n124A6;CUNEIFORM SIGN DUG TIMES PI;Lo;0;L;;;;;N;;;;;\n124A7;CUNEIFORM SIGN DUG TIMES SHE;Lo;0;L;;;;;N;;;;;\n124A8;CUNEIFORM SIGN DUG TIMES SI GUNU;Lo;0;L;;;;;N;;;;;\n124A9;CUNEIFORM SIGN E2 TIMES KUR;Lo;0;L;;;;;N;;;;;\n124AA;CUNEIFORM SIGN E2 TIMES PAP;Lo;0;L;;;;;N;;;;;\n124AB;CUNEIFORM SIGN ERIN2 X;Lo;0;L;;;;;N;;;;;\n124AC;CUNEIFORM SIGN ESH2 CROSSING ESH2;Lo;0;L;;;;;N;;;;;\n124AD;CUNEIFORM SIGN EZEN SHESHIG TIMES ASH;Lo;0;L;;;;;N;;;;;\n124AE;CUNEIFORM SIGN EZEN SHESHIG TIMES HI;Lo;0;L;;;;;N;;;;;\n124AF;CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n124B0;CUNEIFORM SIGN EZEN SHESHIG TIMES LA;Lo;0;L;;;;;N;;;;;\n124B1;CUNEIFORM SIGN EZEN SHESHIG TIMES LAL;Lo;0;L;;;;;N;;;;;\n124B2;CUNEIFORM SIGN EZEN SHESHIG TIMES ME;Lo;0;L;;;;;N;;;;;\n124B3;CUNEIFORM SIGN EZEN SHESHIG TIMES MES;Lo;0;L;;;;;N;;;;;\n124B4;CUNEIFORM SIGN EZEN SHESHIG TIMES SU;Lo;0;L;;;;;N;;;;;\n124B5;CUNEIFORM SIGN EZEN TIMES SU;Lo;0;L;;;;;N;;;;;\n124B6;CUNEIFORM SIGN GA2 TIMES BAHAR2;Lo;0;L;;;;;N;;;;;\n124B7;CUNEIFORM SIGN GA2 TIMES DIM GUNU;Lo;0;L;;;;;N;;;;;\n124B8;CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n124B9;CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL;Lo;0;L;;;;;N;;;;;\n124BA;CUNEIFORM SIGN GA2 TIMES EREN;Lo;0;L;;;;;N;;;;;\n124BB;CUNEIFORM SIGN GA2 TIMES GA;Lo;0;L;;;;;N;;;;;\n124BC;CUNEIFORM SIGN GA2 TIMES GAR PLUS DI;Lo;0;L;;;;;N;;;;;\n124BD;CUNEIFORM SIGN GA2 TIMES GAR PLUS NE;Lo;0;L;;;;;N;;;;;\n124BE;CUNEIFORM SIGN GA2 TIMES HA PLUS A;Lo;0;L;;;;;N;;;;;\n124BF;CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL;Lo;0;L;;;;;N;;;;;\n124C0;CUNEIFORM SIGN GA2 TIMES LAM;Lo;0;L;;;;;N;;;;;\n124C1;CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR;Lo;0;L;;;;;N;;;;;\n124C2;CUNEIFORM SIGN GA2 TIMES LUH;Lo;0;L;;;;;N;;;;;\n124C3;CUNEIFORM SIGN GA2 TIMES MUSH;Lo;0;L;;;;;N;;;;;\n124C4;CUNEIFORM SIGN GA2 TIMES NE;Lo;0;L;;;;;N;;;;;\n124C5;CUNEIFORM SIGN GA2 TIMES NE PLUS E2;Lo;0;L;;;;;N;;;;;\n124C6;CUNEIFORM SIGN GA2 TIMES NE PLUS GI;Lo;0;L;;;;;N;;;;;\n124C7;CUNEIFORM SIGN GA2 TIMES SHIM;Lo;0;L;;;;;N;;;;;\n124C8;CUNEIFORM SIGN GA2 TIMES ZIZ2;Lo;0;L;;;;;N;;;;;\n124C9;CUNEIFORM SIGN GABA ROTATED NINETY DEGREES;Lo;0;L;;;;;N;;;;;\n124CA;CUNEIFORM SIGN GESHTIN TIMES U;Lo;0;L;;;;;N;;;;;\n124CB;CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;\n124CC;CUNEIFORM SIGN GU2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n124CD;CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4;Lo;0;L;;;;;N;;;;;\n124CE;CUNEIFORM SIGN HA TENU GUNU;Lo;0;L;;;;;N;;;;;\n124CF;CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH;Lo;0;L;;;;;N;;;;;\n124D0;CUNEIFORM SIGN KA TIMES BU;Lo;0;L;;;;;N;;;;;\n124D1;CUNEIFORM SIGN KA TIMES KA;Lo;0;L;;;;;N;;;;;\n124D2;CUNEIFORM SIGN KA TIMES U U U;Lo;0;L;;;;;N;;;;;\n124D3;CUNEIFORM SIGN KA TIMES UR;Lo;0;L;;;;;N;;;;;\n124D4;CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU;Lo;0;L;;;;;N;;;;;\n124D5;CUNEIFORM SIGN LAK-003;Lo;0;L;;;;;N;;;;;\n124D6;CUNEIFORM SIGN LAK-021;Lo;0;L;;;;;N;;;;;\n124D7;CUNEIFORM SIGN LAK-025;Lo;0;L;;;;;N;;;;;\n124D8;CUNEIFORM SIGN LAK-030;Lo;0;L;;;;;N;;;;;\n124D9;CUNEIFORM SIGN LAK-050;Lo;0;L;;;;;N;;;;;\n124DA;CUNEIFORM SIGN LAK-051;Lo;0;L;;;;;N;;;;;\n124DB;CUNEIFORM SIGN LAK-062;Lo;0;L;;;;;N;;;;;\n124DC;CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU;Lo;0;L;;;;;N;;;;;\n124DD;CUNEIFORM SIGN LAK-080;Lo;0;L;;;;;N;;;;;\n124DE;CUNEIFORM SIGN LAK-081 OVER LAK-081;Lo;0;L;;;;;N;;;;;\n124DF;CUNEIFORM SIGN LAK-092;Lo;0;L;;;;;N;;;;;\n124E0;CUNEIFORM SIGN LAK-130;Lo;0;L;;;;;N;;;;;\n124E1;CUNEIFORM SIGN LAK-142;Lo;0;L;;;;;N;;;;;\n124E2;CUNEIFORM SIGN LAK-210;Lo;0;L;;;;;N;;;;;\n124E3;CUNEIFORM SIGN LAK-219;Lo;0;L;;;;;N;;;;;\n124E4;CUNEIFORM SIGN LAK-220;Lo;0;L;;;;;N;;;;;\n124E5;CUNEIFORM SIGN LAK-225;Lo;0;L;;;;;N;;;;;\n124E6;CUNEIFORM SIGN LAK-228;Lo;0;L;;;;;N;;;;;\n124E7;CUNEIFORM SIGN LAK-238;Lo;0;L;;;;;N;;;;;\n124E8;CUNEIFORM SIGN LAK-265;Lo;0;L;;;;;N;;;;;\n124E9;CUNEIFORM SIGN LAK-266;Lo;0;L;;;;;N;;;;;\n124EA;CUNEIFORM SIGN LAK-343;Lo;0;L;;;;;N;;;;;\n124EB;CUNEIFORM SIGN LAK-347;Lo;0;L;;;;;N;;;;;\n124EC;CUNEIFORM SIGN LAK-348;Lo;0;L;;;;;N;;;;;\n124ED;CUNEIFORM SIGN LAK-383;Lo;0;L;;;;;N;;;;;\n124EE;CUNEIFORM SIGN LAK-384;Lo;0;L;;;;;N;;;;;\n124EF;CUNEIFORM SIGN LAK-390;Lo;0;L;;;;;N;;;;;\n124F0;CUNEIFORM SIGN LAK-441;Lo;0;L;;;;;N;;;;;\n124F1;CUNEIFORM SIGN LAK-449;Lo;0;L;;;;;N;;;;;\n124F2;CUNEIFORM SIGN LAK-449 TIMES GU;Lo;0;L;;;;;N;;;;;\n124F3;CUNEIFORM SIGN LAK-449 TIMES IGI;Lo;0;L;;;;;N;;;;;\n124F4;CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3;Lo;0;L;;;;;N;;;;;\n124F5;CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;;\n124F6;CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA;Lo;0;L;;;;;N;;;;;\n124F7;CUNEIFORM SIGN LAK-450;Lo;0;L;;;;;N;;;;;\n124F8;CUNEIFORM SIGN LAK-457;Lo;0;L;;;;;N;;;;;\n124F9;CUNEIFORM SIGN LAK-470;Lo;0;L;;;;;N;;;;;\n124FA;CUNEIFORM SIGN LAK-483;Lo;0;L;;;;;N;;;;;\n124FB;CUNEIFORM SIGN LAK-490;Lo;0;L;;;;;N;;;;;\n124FC;CUNEIFORM SIGN LAK-492;Lo;0;L;;;;;N;;;;;\n124FD;CUNEIFORM SIGN LAK-493;Lo;0;L;;;;;N;;;;;\n124FE;CUNEIFORM SIGN LAK-495;Lo;0;L;;;;;N;;;;;\n124FF;CUNEIFORM SIGN LAK-550;Lo;0;L;;;;;N;;;;;\n12500;CUNEIFORM SIGN LAK-608;Lo;0;L;;;;;N;;;;;\n12501;CUNEIFORM SIGN LAK-617;Lo;0;L;;;;;N;;;;;\n12502;CUNEIFORM SIGN LAK-617 TIMES ASH;Lo;0;L;;;;;N;;;;;\n12503;CUNEIFORM SIGN LAK-617 TIMES BAD;Lo;0;L;;;;;N;;;;;\n12504;CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;\n12505;CUNEIFORM SIGN LAK-617 TIMES KU3;Lo;0;L;;;;;N;;;;;\n12506;CUNEIFORM SIGN LAK-617 TIMES LA;Lo;0;L;;;;;N;;;;;\n12507;CUNEIFORM SIGN LAK-617 TIMES TAR;Lo;0;L;;;;;N;;;;;\n12508;CUNEIFORM SIGN LAK-617 TIMES TE;Lo;0;L;;;;;N;;;;;\n12509;CUNEIFORM SIGN LAK-617 TIMES U2;Lo;0;L;;;;;N;;;;;\n1250A;CUNEIFORM SIGN LAK-617 TIMES UD;Lo;0;L;;;;;N;;;;;\n1250B;CUNEIFORM SIGN LAK-617 TIMES URUDA;Lo;0;L;;;;;N;;;;;\n1250C;CUNEIFORM SIGN LAK-636;Lo;0;L;;;;;N;;;;;\n1250D;CUNEIFORM SIGN LAK-648;Lo;0;L;;;;;N;;;;;\n1250E;CUNEIFORM SIGN LAK-648 TIMES DUB;Lo;0;L;;;;;N;;;;;\n1250F;CUNEIFORM SIGN LAK-648 TIMES GA;Lo;0;L;;;;;N;;;;;\n12510;CUNEIFORM SIGN LAK-648 TIMES IGI;Lo;0;L;;;;;N;;;;;\n12511;CUNEIFORM SIGN LAK-648 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;\n12512;CUNEIFORM SIGN LAK-648 TIMES NI;Lo;0;L;;;;;N;;;;;\n12513;CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;;\n12514;CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI;Lo;0;L;;;;;N;;;;;\n12515;CUNEIFORM SIGN LAK-648 TIMES UD;Lo;0;L;;;;;N;;;;;\n12516;CUNEIFORM SIGN LAK-648 TIMES URUDA;Lo;0;L;;;;;N;;;;;\n12517;CUNEIFORM SIGN LAK-724;Lo;0;L;;;;;N;;;;;\n12518;CUNEIFORM SIGN LAK-749;Lo;0;L;;;;;N;;;;;\n12519;CUNEIFORM SIGN LU2 GUNU TIMES ASH;Lo;0;L;;;;;N;;;;;\n1251A;CUNEIFORM SIGN LU2 TIMES DISH;Lo;0;L;;;;;N;;;;;\n1251B;CUNEIFORM SIGN LU2 TIMES HAL;Lo;0;L;;;;;N;;;;;\n1251C;CUNEIFORM SIGN LU2 TIMES PAP;Lo;0;L;;;;;N;;;;;\n1251D;CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3;Lo;0;L;;;;;N;;;;;\n1251E;CUNEIFORM SIGN LU2 TIMES TAK4;Lo;0;L;;;;;N;;;;;\n1251F;CUNEIFORM SIGN MI PLUS ZA7;Lo;0;L;;;;;N;;;;;\n12520;CUNEIFORM SIGN MUSH OVER MUSH TIMES GA;Lo;0;L;;;;;N;;;;;\n12521;CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK;Lo;0;L;;;;;N;;;;;\n12522;CUNEIFORM SIGN NINDA2 TIMES DIM GUNU;Lo;0;L;;;;;N;;;;;\n12523;CUNEIFORM SIGN NINDA2 TIMES GISH;Lo;0;L;;;;;N;;;;;\n12524;CUNEIFORM SIGN NINDA2 TIMES GUL;Lo;0;L;;;;;N;;;;;\n12525;CUNEIFORM SIGN NINDA2 TIMES HI;Lo;0;L;;;;;N;;;;;\n12526;CUNEIFORM SIGN NINDA2 TIMES KESH2;Lo;0;L;;;;;N;;;;;\n12527;CUNEIFORM SIGN NINDA2 TIMES LAK-050;Lo;0;L;;;;;N;;;;;\n12528;CUNEIFORM SIGN NINDA2 TIMES MASH;Lo;0;L;;;;;N;;;;;\n12529;CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;;\n1252A;CUNEIFORM SIGN NINDA2 TIMES U;Lo;0;L;;;;;N;;;;;\n1252B;CUNEIFORM SIGN NINDA2 TIMES U PLUS U;Lo;0;L;;;;;N;;;;;\n1252C;CUNEIFORM SIGN NINDA2 TIMES URUDA;Lo;0;L;;;;;N;;;;;\n1252D;CUNEIFORM SIGN SAG GUNU TIMES HA;Lo;0;L;;;;;N;;;;;\n1252E;CUNEIFORM SIGN SAG TIMES EN;Lo;0;L;;;;;N;;;;;\n1252F;CUNEIFORM SIGN SAG TIMES SHE AT LEFT;Lo;0;L;;;;;N;;;;;\n12530;CUNEIFORM SIGN SAG TIMES TAK4;Lo;0;L;;;;;N;;;;;\n12531;CUNEIFORM SIGN SHA6 TENU;Lo;0;L;;;;;N;;;;;\n12532;CUNEIFORM SIGN SHE OVER SHE;Lo;0;L;;;;;N;;;;;\n12533;CUNEIFORM SIGN SHE PLUS HUB2;Lo;0;L;;;;;N;;;;;\n12534;CUNEIFORM SIGN SHE PLUS NAM2;Lo;0;L;;;;;N;;;;;\n12535;CUNEIFORM SIGN SHE PLUS SAR;Lo;0;L;;;;;N;;;;;\n12536;CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI;Lo;0;L;;;;;N;;;;;\n12537;CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN;Lo;0;L;;;;;N;;;;;\n12538;CUNEIFORM SIGN SI TIMES TAK4;Lo;0;L;;;;;N;;;;;\n12539;CUNEIFORM SIGN TAK4 PLUS SAG;Lo;0;L;;;;;N;;;;;\n1253A;CUNEIFORM SIGN TUM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;\n1253B;CUNEIFORM SIGN TUM TIMES THREE DISH;Lo;0;L;;;;;N;;;;;\n1253C;CUNEIFORM SIGN UR2 INVERTED;Lo;0;L;;;;;N;;;;;\n1253D;CUNEIFORM SIGN UR2 TIMES UD;Lo;0;L;;;;;N;;;;;\n1253E;CUNEIFORM SIGN URU TIMES DARA3;Lo;0;L;;;;;N;;;;;\n1253F;CUNEIFORM SIGN URU TIMES LAK-668;Lo;0;L;;;;;N;;;;;\n12540;CUNEIFORM SIGN URU TIMES LU3;Lo;0;L;;;;;N;;;;;\n12541;CUNEIFORM SIGN ZA7;Lo;0;L;;;;;N;;;;;\n12542;CUNEIFORM SIGN ZU OVER ZU PLUS SAR;Lo;0;L;;;;;N;;;;;\n12543;CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU;Lo;0;L;;;;;N;;;;;\n12F90;CYPRO-MINOAN SIGN CM001;Lo;0;L;;;;;N;;;;;\n12F91;CYPRO-MINOAN SIGN CM002;Lo;0;L;;;;;N;;;;;\n12F92;CYPRO-MINOAN SIGN CM004;Lo;0;L;;;;;N;;;;;\n12F93;CYPRO-MINOAN SIGN CM005;Lo;0;L;;;;;N;;;;;\n12F94;CYPRO-MINOAN SIGN CM006;Lo;0;L;;;;;N;;;;;\n12F95;CYPRO-MINOAN SIGN CM007;Lo;0;L;;;;;N;;;;;\n12F96;CYPRO-MINOAN SIGN CM008;Lo;0;L;;;;;N;;;;;\n12F97;CYPRO-MINOAN SIGN CM009;Lo;0;L;;;;;N;;;;;\n12F98;CYPRO-MINOAN SIGN CM010;Lo;0;L;;;;;N;;;;;\n12F99;CYPRO-MINOAN SIGN CM011;Lo;0;L;;;;;N;;;;;\n12F9A;CYPRO-MINOAN SIGN CM012;Lo;0;L;;;;;N;;;;;\n12F9B;CYPRO-MINOAN SIGN CM012B;Lo;0;L;;;;;N;;;;;\n12F9C;CYPRO-MINOAN SIGN CM013;Lo;0;L;;;;;N;;;;;\n12F9D;CYPRO-MINOAN SIGN CM015;Lo;0;L;;;;;N;;;;;\n12F9E;CYPRO-MINOAN SIGN CM017;Lo;0;L;;;;;N;;;;;\n12F9F;CYPRO-MINOAN SIGN CM019;Lo;0;L;;;;;N;;;;;\n12FA0;CYPRO-MINOAN SIGN CM021;Lo;0;L;;;;;N;;;;;\n12FA1;CYPRO-MINOAN SIGN CM023;Lo;0;L;;;;;N;;;;;\n12FA2;CYPRO-MINOAN SIGN CM024;Lo;0;L;;;;;N;;;;;\n12FA3;CYPRO-MINOAN SIGN CM025;Lo;0;L;;;;;N;;;;;\n12FA4;CYPRO-MINOAN SIGN CM026;Lo;0;L;;;;;N;;;;;\n12FA5;CYPRO-MINOAN SIGN CM027;Lo;0;L;;;;;N;;;;;\n12FA6;CYPRO-MINOAN SIGN CM028;Lo;0;L;;;;;N;;;;;\n12FA7;CYPRO-MINOAN SIGN CM029;Lo;0;L;;;;;N;;;;;\n12FA8;CYPRO-MINOAN SIGN CM030;Lo;0;L;;;;;N;;;;;\n12FA9;CYPRO-MINOAN SIGN CM033;Lo;0;L;;;;;N;;;;;\n12FAA;CYPRO-MINOAN SIGN CM034;Lo;0;L;;;;;N;;;;;\n12FAB;CYPRO-MINOAN SIGN CM035;Lo;0;L;;;;;N;;;;;\n12FAC;CYPRO-MINOAN SIGN CM036;Lo;0;L;;;;;N;;;;;\n12FAD;CYPRO-MINOAN SIGN CM037;Lo;0;L;;;;;N;;;;;\n12FAE;CYPRO-MINOAN SIGN CM038;Lo;0;L;;;;;N;;;;;\n12FAF;CYPRO-MINOAN SIGN CM039;Lo;0;L;;;;;N;;;;;\n12FB0;CYPRO-MINOAN SIGN CM040;Lo;0;L;;;;;N;;;;;\n12FB1;CYPRO-MINOAN SIGN CM041;Lo;0;L;;;;;N;;;;;\n12FB2;CYPRO-MINOAN SIGN CM044;Lo;0;L;;;;;N;;;;;\n12FB3;CYPRO-MINOAN SIGN CM046;Lo;0;L;;;;;N;;;;;\n12FB4;CYPRO-MINOAN SIGN CM047;Lo;0;L;;;;;N;;;;;\n12FB5;CYPRO-MINOAN SIGN CM049;Lo;0;L;;;;;N;;;;;\n12FB6;CYPRO-MINOAN SIGN CM050;Lo;0;L;;;;;N;;;;;\n12FB7;CYPRO-MINOAN SIGN CM051;Lo;0;L;;;;;N;;;;;\n12FB8;CYPRO-MINOAN SIGN CM052;Lo;0;L;;;;;N;;;;;\n12FB9;CYPRO-MINOAN SIGN CM053;Lo;0;L;;;;;N;;;;;\n12FBA;CYPRO-MINOAN SIGN CM054;Lo;0;L;;;;;N;;;;;\n12FBB;CYPRO-MINOAN SIGN CM055;Lo;0;L;;;;;N;;;;;\n12FBC;CYPRO-MINOAN SIGN CM056;Lo;0;L;;;;;N;;;;;\n12FBD;CYPRO-MINOAN SIGN CM058;Lo;0;L;;;;;N;;;;;\n12FBE;CYPRO-MINOAN SIGN CM059;Lo;0;L;;;;;N;;;;;\n12FBF;CYPRO-MINOAN SIGN CM060;Lo;0;L;;;;;N;;;;;\n12FC0;CYPRO-MINOAN SIGN CM061;Lo;0;L;;;;;N;;;;;\n12FC1;CYPRO-MINOAN SIGN CM062;Lo;0;L;;;;;N;;;;;\n12FC2;CYPRO-MINOAN SIGN CM063;Lo;0;L;;;;;N;;;;;\n12FC3;CYPRO-MINOAN SIGN CM064;Lo;0;L;;;;;N;;;;;\n12FC4;CYPRO-MINOAN SIGN CM066;Lo;0;L;;;;;N;;;;;\n12FC5;CYPRO-MINOAN SIGN CM067;Lo;0;L;;;;;N;;;;;\n12FC6;CYPRO-MINOAN SIGN CM068;Lo;0;L;;;;;N;;;;;\n12FC7;CYPRO-MINOAN SIGN CM069;Lo;0;L;;;;;N;;;;;\n12FC8;CYPRO-MINOAN SIGN CM070;Lo;0;L;;;;;N;;;;;\n12FC9;CYPRO-MINOAN SIGN CM071;Lo;0;L;;;;;N;;;;;\n12FCA;CYPRO-MINOAN SIGN CM072;Lo;0;L;;;;;N;;;;;\n12FCB;CYPRO-MINOAN SIGN CM073;Lo;0;L;;;;;N;;;;;\n12FCC;CYPRO-MINOAN SIGN CM074;Lo;0;L;;;;;N;;;;;\n12FCD;CYPRO-MINOAN SIGN CM075;Lo;0;L;;;;;N;;;;;\n12FCE;CYPRO-MINOAN SIGN CM075B;Lo;0;L;;;;;N;;;;;\n12FCF;CYPRO-MINOAN SIGN CM076;Lo;0;L;;;;;N;;;;;\n12FD0;CYPRO-MINOAN SIGN CM078;Lo;0;L;;;;;N;;;;;\n12FD1;CYPRO-MINOAN SIGN CM079;Lo;0;L;;;;;N;;;;;\n12FD2;CYPRO-MINOAN SIGN CM080;Lo;0;L;;;;;N;;;;;\n12FD3;CYPRO-MINOAN SIGN CM081;Lo;0;L;;;;;N;;;;;\n12FD4;CYPRO-MINOAN SIGN CM082;Lo;0;L;;;;;N;;;;;\n12FD5;CYPRO-MINOAN SIGN CM083;Lo;0;L;;;;;N;;;;;\n12FD6;CYPRO-MINOAN SIGN CM084;Lo;0;L;;;;;N;;;;;\n12FD7;CYPRO-MINOAN SIGN CM085;Lo;0;L;;;;;N;;;;;\n12FD8;CYPRO-MINOAN SIGN CM086;Lo;0;L;;;;;N;;;;;\n12FD9;CYPRO-MINOAN SIGN CM087;Lo;0;L;;;;;N;;;;;\n12FDA;CYPRO-MINOAN SIGN CM088;Lo;0;L;;;;;N;;;;;\n12FDB;CYPRO-MINOAN SIGN CM089;Lo;0;L;;;;;N;;;;;\n12FDC;CYPRO-MINOAN SIGN CM090;Lo;0;L;;;;;N;;;;;\n12FDD;CYPRO-MINOAN SIGN CM091;Lo;0;L;;;;;N;;;;;\n12FDE;CYPRO-MINOAN SIGN CM092;Lo;0;L;;;;;N;;;;;\n12FDF;CYPRO-MINOAN SIGN CM094;Lo;0;L;;;;;N;;;;;\n12FE0;CYPRO-MINOAN SIGN CM095;Lo;0;L;;;;;N;;;;;\n12FE1;CYPRO-MINOAN SIGN CM096;Lo;0;L;;;;;N;;;;;\n12FE2;CYPRO-MINOAN SIGN CM097;Lo;0;L;;;;;N;;;;;\n12FE3;CYPRO-MINOAN SIGN CM098;Lo;0;L;;;;;N;;;;;\n12FE4;CYPRO-MINOAN SIGN CM099;Lo;0;L;;;;;N;;;;;\n12FE5;CYPRO-MINOAN SIGN CM100;Lo;0;L;;;;;N;;;;;\n12FE6;CYPRO-MINOAN SIGN CM101;Lo;0;L;;;;;N;;;;;\n12FE7;CYPRO-MINOAN SIGN CM102;Lo;0;L;;;;;N;;;;;\n12FE8;CYPRO-MINOAN SIGN CM103;Lo;0;L;;;;;N;;;;;\n12FE9;CYPRO-MINOAN SIGN CM104;Lo;0;L;;;;;N;;;;;\n12FEA;CYPRO-MINOAN SIGN CM105;Lo;0;L;;;;;N;;;;;\n12FEB;CYPRO-MINOAN SIGN CM107;Lo;0;L;;;;;N;;;;;\n12FEC;CYPRO-MINOAN SIGN CM108;Lo;0;L;;;;;N;;;;;\n12FED;CYPRO-MINOAN SIGN CM109;Lo;0;L;;;;;N;;;;;\n12FEE;CYPRO-MINOAN SIGN CM110;Lo;0;L;;;;;N;;;;;\n12FEF;CYPRO-MINOAN SIGN CM112;Lo;0;L;;;;;N;;;;;\n12FF0;CYPRO-MINOAN SIGN CM114;Lo;0;L;;;;;N;;;;;\n12FF1;CYPRO-MINOAN SIGN CM301;Po;0;L;;;;;N;;;;;\n12FF2;CYPRO-MINOAN SIGN CM302;Po;0;L;;;;;N;;;;;\n13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;;\n13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;;\n13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;;\n13003;EGYPTIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;;\n13004;EGYPTIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;;\n13005;EGYPTIAN HIEROGLYPH A005A;Lo;0;L;;;;;N;;;;;\n13006;EGYPTIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;;\n13007;EGYPTIAN HIEROGLYPH A006A;Lo;0;L;;;;;N;;;;;\n13008;EGYPTIAN HIEROGLYPH A006B;Lo;0;L;;;;;N;;;;;\n13009;EGYPTIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;;\n1300A;EGYPTIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;;\n1300B;EGYPTIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;;\n1300C;EGYPTIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;;\n1300D;EGYPTIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;;\n1300E;EGYPTIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;;\n1300F;EGYPTIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;;\n13010;EGYPTIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;;\n13011;EGYPTIAN HIEROGLYPH A014A;Lo;0;L;;;;;N;;;;;\n13012;EGYPTIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;;\n13013;EGYPTIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;;\n13014;EGYPTIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;;\n13015;EGYPTIAN HIEROGLYPH A017A;Lo;0;L;;;;;N;;;;;\n13016;EGYPTIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;;\n13017;EGYPTIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;;\n13018;EGYPTIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;;\n13019;EGYPTIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;;\n1301A;EGYPTIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;;\n1301B;EGYPTIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;;\n1301C;EGYPTIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;;\n1301D;EGYPTIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;;\n1301E;EGYPTIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;;\n1301F;EGYPTIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;;\n13020;EGYPTIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;;\n13021;EGYPTIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;;\n13022;EGYPTIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;;\n13023;EGYPTIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;;\n13024;EGYPTIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;;\n13025;EGYPTIAN HIEROGLYPH A032A;Lo;0;L;;;;;N;;;;;\n13026;EGYPTIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;;\n13027;EGYPTIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;;\n13028;EGYPTIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;;\n13029;EGYPTIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;;\n1302A;EGYPTIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;;\n1302B;EGYPTIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;;\n1302C;EGYPTIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;;\n1302D;EGYPTIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;;\n1302E;EGYPTIAN HIEROGLYPH A040A;Lo;0;L;;;;;N;;;;;\n1302F;EGYPTIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;;\n13030;EGYPTIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;;\n13031;EGYPTIAN HIEROGLYPH A042A;Lo;0;L;;;;;N;;;;;\n13032;EGYPTIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;;\n13033;EGYPTIAN HIEROGLYPH A043A;Lo;0;L;;;;;N;;;;;\n13034;EGYPTIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;;\n13035;EGYPTIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;;\n13036;EGYPTIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;;\n13037;EGYPTIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;;\n13038;EGYPTIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;;\n13039;EGYPTIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;;\n1303A;EGYPTIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;;\n1303B;EGYPTIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;;\n1303C;EGYPTIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;;\n1303D;EGYPTIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;;\n1303E;EGYPTIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;;\n1303F;EGYPTIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;;\n13040;EGYPTIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;;\n13041;EGYPTIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;;\n13042;EGYPTIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;;\n13043;EGYPTIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;;\n13044;EGYPTIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;;\n13045;EGYPTIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;;\n13046;EGYPTIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;;\n13047;EGYPTIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;;\n13048;EGYPTIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;;\n13049;EGYPTIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;;\n1304A;EGYPTIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;;\n1304B;EGYPTIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;;\n1304C;EGYPTIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;;\n1304D;EGYPTIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;;\n1304E;EGYPTIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;;\n1304F;EGYPTIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;;\n13050;EGYPTIAN HIEROGLYPH B001;Lo;0;L;;;;;N;;;;;\n13051;EGYPTIAN HIEROGLYPH B002;Lo;0;L;;;;;N;;;;;\n13052;EGYPTIAN HIEROGLYPH B003;Lo;0;L;;;;;N;;;;;\n13053;EGYPTIAN HIEROGLYPH B004;Lo;0;L;;;;;N;;;;;\n13054;EGYPTIAN HIEROGLYPH B005;Lo;0;L;;;;;N;;;;;\n13055;EGYPTIAN HIEROGLYPH B005A;Lo;0;L;;;;;N;;;;;\n13056;EGYPTIAN HIEROGLYPH B006;Lo;0;L;;;;;N;;;;;\n13057;EGYPTIAN HIEROGLYPH B007;Lo;0;L;;;;;N;;;;;\n13058;EGYPTIAN HIEROGLYPH B008;Lo;0;L;;;;;N;;;;;\n13059;EGYPTIAN HIEROGLYPH B009;Lo;0;L;;;;;N;;;;;\n1305A;EGYPTIAN HIEROGLYPH C001;Lo;0;L;;;;;N;;;;;\n1305B;EGYPTIAN HIEROGLYPH C002;Lo;0;L;;;;;N;;;;;\n1305C;EGYPTIAN HIEROGLYPH C002A;Lo;0;L;;;;;N;;;;;\n1305D;EGYPTIAN HIEROGLYPH C002B;Lo;0;L;;;;;N;;;;;\n1305E;EGYPTIAN HIEROGLYPH C002C;Lo;0;L;;;;;N;;;;;\n1305F;EGYPTIAN HIEROGLYPH C003;Lo;0;L;;;;;N;;;;;\n13060;EGYPTIAN HIEROGLYPH C004;Lo;0;L;;;;;N;;;;;\n13061;EGYPTIAN HIEROGLYPH C005;Lo;0;L;;;;;N;;;;;\n13062;EGYPTIAN HIEROGLYPH C006;Lo;0;L;;;;;N;;;;;\n13063;EGYPTIAN HIEROGLYPH C007;Lo;0;L;;;;;N;;;;;\n13064;EGYPTIAN HIEROGLYPH C008;Lo;0;L;;;;;N;;;;;\n13065;EGYPTIAN HIEROGLYPH C009;Lo;0;L;;;;;N;;;;;\n13066;EGYPTIAN HIEROGLYPH C010;Lo;0;L;;;;;N;;;;;\n13067;EGYPTIAN HIEROGLYPH C010A;Lo;0;L;;;;;N;;;;;\n13068;EGYPTIAN HIEROGLYPH C011;Lo;0;L;;;;;N;;;;;\n13069;EGYPTIAN HIEROGLYPH C012;Lo;0;L;;;;;N;;;;;\n1306A;EGYPTIAN HIEROGLYPH C013;Lo;0;L;;;;;N;;;;;\n1306B;EGYPTIAN HIEROGLYPH C014;Lo;0;L;;;;;N;;;;;\n1306C;EGYPTIAN HIEROGLYPH C015;Lo;0;L;;;;;N;;;;;\n1306D;EGYPTIAN HIEROGLYPH C016;Lo;0;L;;;;;N;;;;;\n1306E;EGYPTIAN HIEROGLYPH C017;Lo;0;L;;;;;N;;;;;\n1306F;EGYPTIAN HIEROGLYPH C018;Lo;0;L;;;;;N;;;;;\n13070;EGYPTIAN HIEROGLYPH C019;Lo;0;L;;;;;N;;;;;\n13071;EGYPTIAN HIEROGLYPH C020;Lo;0;L;;;;;N;;;;;\n13072;EGYPTIAN HIEROGLYPH C021;Lo;0;L;;;;;N;;;;;\n13073;EGYPTIAN HIEROGLYPH C022;Lo;0;L;;;;;N;;;;;\n13074;EGYPTIAN HIEROGLYPH C023;Lo;0;L;;;;;N;;;;;\n13075;EGYPTIAN HIEROGLYPH C024;Lo;0;L;;;;;N;;;;;\n13076;EGYPTIAN HIEROGLYPH D001;Lo;0;L;;;;;N;;;;;\n13077;EGYPTIAN HIEROGLYPH D002;Lo;0;L;;;;;N;;;;;\n13078;EGYPTIAN HIEROGLYPH D003;Lo;0;L;;;;;N;;;;;\n13079;EGYPTIAN HIEROGLYPH D004;Lo;0;L;;;;;N;;;;;\n1307A;EGYPTIAN HIEROGLYPH D005;Lo;0;L;;;;;N;;;;;\n1307B;EGYPTIAN HIEROGLYPH D006;Lo;0;L;;;;;N;;;;;\n1307C;EGYPTIAN HIEROGLYPH D007;Lo;0;L;;;;;N;;;;;\n1307D;EGYPTIAN HIEROGLYPH D008;Lo;0;L;;;;;N;;;;;\n1307E;EGYPTIAN HIEROGLYPH D008A;Lo;0;L;;;;;N;;;;;\n1307F;EGYPTIAN HIEROGLYPH D009;Lo;0;L;;;;;N;;;;;\n13080;EGYPTIAN HIEROGLYPH D010;Lo;0;L;;;;;N;;;;;\n13081;EGYPTIAN HIEROGLYPH D011;Lo;0;L;;;;;N;;;;;\n13082;EGYPTIAN HIEROGLYPH D012;Lo;0;L;;;;;N;;;;;\n13083;EGYPTIAN HIEROGLYPH D013;Lo;0;L;;;;;N;;;;;\n13084;EGYPTIAN HIEROGLYPH D014;Lo;0;L;;;;;N;;;;;\n13085;EGYPTIAN HIEROGLYPH D015;Lo;0;L;;;;;N;;;;;\n13086;EGYPTIAN HIEROGLYPH D016;Lo;0;L;;;;;N;;;;;\n13087;EGYPTIAN HIEROGLYPH D017;Lo;0;L;;;;;N;;;;;\n13088;EGYPTIAN HIEROGLYPH D018;Lo;0;L;;;;;N;;;;;\n13089;EGYPTIAN HIEROGLYPH D019;Lo;0;L;;;;;N;;;;;\n1308A;EGYPTIAN HIEROGLYPH D020;Lo;0;L;;;;;N;;;;;\n1308B;EGYPTIAN HIEROGLYPH D021;Lo;0;L;;;;;N;;;;;\n1308C;EGYPTIAN HIEROGLYPH D022;Lo;0;L;;;;;N;;;;;\n1308D;EGYPTIAN HIEROGLYPH D023;Lo;0;L;;;;;N;;;;;\n1308E;EGYPTIAN HIEROGLYPH D024;Lo;0;L;;;;;N;;;;;\n1308F;EGYPTIAN HIEROGLYPH D025;Lo;0;L;;;;;N;;;;;\n13090;EGYPTIAN HIEROGLYPH D026;Lo;0;L;;;;;N;;;;;\n13091;EGYPTIAN HIEROGLYPH D027;Lo;0;L;;;;;N;;;;;\n13092;EGYPTIAN HIEROGLYPH D027A;Lo;0;L;;;;;N;;;;;\n13093;EGYPTIAN HIEROGLYPH D028;Lo;0;L;;;;;N;;;;;\n13094;EGYPTIAN HIEROGLYPH D029;Lo;0;L;;;;;N;;;;;\n13095;EGYPTIAN HIEROGLYPH D030;Lo;0;L;;;;;N;;;;;\n13096;EGYPTIAN HIEROGLYPH D031;Lo;0;L;;;;;N;;;;;\n13097;EGYPTIAN HIEROGLYPH D031A;Lo;0;L;;;;;N;;;;;\n13098;EGYPTIAN HIEROGLYPH D032;Lo;0;L;;;;;N;;;;;\n13099;EGYPTIAN HIEROGLYPH D033;Lo;0;L;;;;;N;;;;;\n1309A;EGYPTIAN HIEROGLYPH D034;Lo;0;L;;;;;N;;;;;\n1309B;EGYPTIAN HIEROGLYPH D034A;Lo;0;L;;;;;N;;;;;\n1309C;EGYPTIAN HIEROGLYPH D035;Lo;0;L;;;;;N;;;;;\n1309D;EGYPTIAN HIEROGLYPH D036;Lo;0;L;;;;;N;;;;;\n1309E;EGYPTIAN HIEROGLYPH D037;Lo;0;L;;;;;N;;;;;\n1309F;EGYPTIAN HIEROGLYPH D038;Lo;0;L;;;;;N;;;;;\n130A0;EGYPTIAN HIEROGLYPH D039;Lo;0;L;;;;;N;;;;;\n130A1;EGYPTIAN HIEROGLYPH D040;Lo;0;L;;;;;N;;;;;\n130A2;EGYPTIAN HIEROGLYPH D041;Lo;0;L;;;;;N;;;;;\n130A3;EGYPTIAN HIEROGLYPH D042;Lo;0;L;;;;;N;;;;;\n130A4;EGYPTIAN HIEROGLYPH D043;Lo;0;L;;;;;N;;;;;\n130A5;EGYPTIAN HIEROGLYPH D044;Lo;0;L;;;;;N;;;;;\n130A6;EGYPTIAN HIEROGLYPH D045;Lo;0;L;;;;;N;;;;;\n130A7;EGYPTIAN HIEROGLYPH D046;Lo;0;L;;;;;N;;;;;\n130A8;EGYPTIAN HIEROGLYPH D046A;Lo;0;L;;;;;N;;;;;\n130A9;EGYPTIAN HIEROGLYPH D047;Lo;0;L;;;;;N;;;;;\n130AA;EGYPTIAN HIEROGLYPH D048;Lo;0;L;;;;;N;;;;;\n130AB;EGYPTIAN HIEROGLYPH D048A;Lo;0;L;;;;;N;;;;;\n130AC;EGYPTIAN HIEROGLYPH D049;Lo;0;L;;;;;N;;;;;\n130AD;EGYPTIAN HIEROGLYPH D050;Lo;0;L;;;;;N;;;;;\n130AE;EGYPTIAN HIEROGLYPH D050A;Lo;0;L;;;;;N;;;;;\n130AF;EGYPTIAN HIEROGLYPH D050B;Lo;0;L;;;;;N;;;;;\n130B0;EGYPTIAN HIEROGLYPH D050C;Lo;0;L;;;;;N;;;;;\n130B1;EGYPTIAN HIEROGLYPH D050D;Lo;0;L;;;;;N;;;;;\n130B2;EGYPTIAN HIEROGLYPH D050E;Lo;0;L;;;;;N;;;;;\n130B3;EGYPTIAN HIEROGLYPH D050F;Lo;0;L;;;;;N;;;;;\n130B4;EGYPTIAN HIEROGLYPH D050G;Lo;0;L;;;;;N;;;;;\n130B5;EGYPTIAN HIEROGLYPH D050H;Lo;0;L;;;;;N;;;;;\n130B6;EGYPTIAN HIEROGLYPH D050I;Lo;0;L;;;;;N;;;;;\n130B7;EGYPTIAN HIEROGLYPH D051;Lo;0;L;;;;;N;;;;;\n130B8;EGYPTIAN HIEROGLYPH D052;Lo;0;L;;;;;N;;;;;\n130B9;EGYPTIAN HIEROGLYPH D052A;Lo;0;L;;;;;N;;;;;\n130BA;EGYPTIAN HIEROGLYPH D053;Lo;0;L;;;;;N;;;;;\n130BB;EGYPTIAN HIEROGLYPH D054;Lo;0;L;;;;;N;;;;;\n130BC;EGYPTIAN HIEROGLYPH D054A;Lo;0;L;;;;;N;;;;;\n130BD;EGYPTIAN HIEROGLYPH D055;Lo;0;L;;;;;N;;;;;\n130BE;EGYPTIAN HIEROGLYPH D056;Lo;0;L;;;;;N;;;;;\n130BF;EGYPTIAN HIEROGLYPH D057;Lo;0;L;;;;;N;;;;;\n130C0;EGYPTIAN HIEROGLYPH D058;Lo;0;L;;;;;N;;;;;\n130C1;EGYPTIAN HIEROGLYPH D059;Lo;0;L;;;;;N;;;;;\n130C2;EGYPTIAN HIEROGLYPH D060;Lo;0;L;;;;;N;;;;;\n130C3;EGYPTIAN HIEROGLYPH D061;Lo;0;L;;;;;N;;;;;\n130C4;EGYPTIAN HIEROGLYPH D062;Lo;0;L;;;;;N;;;;;\n130C5;EGYPTIAN HIEROGLYPH D063;Lo;0;L;;;;;N;;;;;\n130C6;EGYPTIAN HIEROGLYPH D064;Lo;0;L;;;;;N;;;;;\n130C7;EGYPTIAN HIEROGLYPH D065;Lo;0;L;;;;;N;;;;;\n130C8;EGYPTIAN HIEROGLYPH D066;Lo;0;L;;;;;N;;;;;\n130C9;EGYPTIAN HIEROGLYPH D067;Lo;0;L;;;;;N;;;;;\n130CA;EGYPTIAN HIEROGLYPH D067A;Lo;0;L;;;;;N;;;;;\n130CB;EGYPTIAN HIEROGLYPH D067B;Lo;0;L;;;;;N;;;;;\n130CC;EGYPTIAN HIEROGLYPH D067C;Lo;0;L;;;;;N;;;;;\n130CD;EGYPTIAN HIEROGLYPH D067D;Lo;0;L;;;;;N;;;;;\n130CE;EGYPTIAN HIEROGLYPH D067E;Lo;0;L;;;;;N;;;;;\n130CF;EGYPTIAN HIEROGLYPH D067F;Lo;0;L;;;;;N;;;;;\n130D0;EGYPTIAN HIEROGLYPH D067G;Lo;0;L;;;;;N;;;;;\n130D1;EGYPTIAN HIEROGLYPH D067H;Lo;0;L;;;;;N;;;;;\n130D2;EGYPTIAN HIEROGLYPH E001;Lo;0;L;;;;;N;;;;;\n130D3;EGYPTIAN HIEROGLYPH E002;Lo;0;L;;;;;N;;;;;\n130D4;EGYPTIAN HIEROGLYPH E003;Lo;0;L;;;;;N;;;;;\n130D5;EGYPTIAN HIEROGLYPH E004;Lo;0;L;;;;;N;;;;;\n130D6;EGYPTIAN HIEROGLYPH E005;Lo;0;L;;;;;N;;;;;\n130D7;EGYPTIAN HIEROGLYPH E006;Lo;0;L;;;;;N;;;;;\n130D8;EGYPTIAN HIEROGLYPH E007;Lo;0;L;;;;;N;;;;;\n130D9;EGYPTIAN HIEROGLYPH E008;Lo;0;L;;;;;N;;;;;\n130DA;EGYPTIAN HIEROGLYPH E008A;Lo;0;L;;;;;N;;;;;\n130DB;EGYPTIAN HIEROGLYPH E009;Lo;0;L;;;;;N;;;;;\n130DC;EGYPTIAN HIEROGLYPH E009A;Lo;0;L;;;;;N;;;;;\n130DD;EGYPTIAN HIEROGLYPH E010;Lo;0;L;;;;;N;;;;;\n130DE;EGYPTIAN HIEROGLYPH E011;Lo;0;L;;;;;N;;;;;\n130DF;EGYPTIAN HIEROGLYPH E012;Lo;0;L;;;;;N;;;;;\n130E0;EGYPTIAN HIEROGLYPH E013;Lo;0;L;;;;;N;;;;;\n130E1;EGYPTIAN HIEROGLYPH E014;Lo;0;L;;;;;N;;;;;\n130E2;EGYPTIAN HIEROGLYPH E015;Lo;0;L;;;;;N;;;;;\n130E3;EGYPTIAN HIEROGLYPH E016;Lo;0;L;;;;;N;;;;;\n130E4;EGYPTIAN HIEROGLYPH E016A;Lo;0;L;;;;;N;;;;;\n130E5;EGYPTIAN HIEROGLYPH E017;Lo;0;L;;;;;N;;;;;\n130E6;EGYPTIAN HIEROGLYPH E017A;Lo;0;L;;;;;N;;;;;\n130E7;EGYPTIAN HIEROGLYPH E018;Lo;0;L;;;;;N;;;;;\n130E8;EGYPTIAN HIEROGLYPH E019;Lo;0;L;;;;;N;;;;;\n130E9;EGYPTIAN HIEROGLYPH E020;Lo;0;L;;;;;N;;;;;\n130EA;EGYPTIAN HIEROGLYPH E020A;Lo;0;L;;;;;N;;;;;\n130EB;EGYPTIAN HIEROGLYPH E021;Lo;0;L;;;;;N;;;;;\n130EC;EGYPTIAN HIEROGLYPH E022;Lo;0;L;;;;;N;;;;;\n130ED;EGYPTIAN HIEROGLYPH E023;Lo;0;L;;;;;N;;;;;\n130EE;EGYPTIAN HIEROGLYPH E024;Lo;0;L;;;;;N;;;;;\n130EF;EGYPTIAN HIEROGLYPH E025;Lo;0;L;;;;;N;;;;;\n130F0;EGYPTIAN HIEROGLYPH E026;Lo;0;L;;;;;N;;;;;\n130F1;EGYPTIAN HIEROGLYPH E027;Lo;0;L;;;;;N;;;;;\n130F2;EGYPTIAN HIEROGLYPH E028;Lo;0;L;;;;;N;;;;;\n130F3;EGYPTIAN HIEROGLYPH E028A;Lo;0;L;;;;;N;;;;;\n130F4;EGYPTIAN HIEROGLYPH E029;Lo;0;L;;;;;N;;;;;\n130F5;EGYPTIAN HIEROGLYPH E030;Lo;0;L;;;;;N;;;;;\n130F6;EGYPTIAN HIEROGLYPH E031;Lo;0;L;;;;;N;;;;;\n130F7;EGYPTIAN HIEROGLYPH E032;Lo;0;L;;;;;N;;;;;\n130F8;EGYPTIAN HIEROGLYPH E033;Lo;0;L;;;;;N;;;;;\n130F9;EGYPTIAN HIEROGLYPH E034;Lo;0;L;;;;;N;;;;;\n130FA;EGYPTIAN HIEROGLYPH E034A;Lo;0;L;;;;;N;;;;;\n130FB;EGYPTIAN HIEROGLYPH E036;Lo;0;L;;;;;N;;;;;\n130FC;EGYPTIAN HIEROGLYPH E037;Lo;0;L;;;;;N;;;;;\n130FD;EGYPTIAN HIEROGLYPH E038;Lo;0;L;;;;;N;;;;;\n130FE;EGYPTIAN HIEROGLYPH F001;Lo;0;L;;;;;N;;;;;\n130FF;EGYPTIAN HIEROGLYPH F001A;Lo;0;L;;;;;N;;;;;\n13100;EGYPTIAN HIEROGLYPH F002;Lo;0;L;;;;;N;;;;;\n13101;EGYPTIAN HIEROGLYPH F003;Lo;0;L;;;;;N;;;;;\n13102;EGYPTIAN HIEROGLYPH F004;Lo;0;L;;;;;N;;;;;\n13103;EGYPTIAN HIEROGLYPH F005;Lo;0;L;;;;;N;;;;;\n13104;EGYPTIAN HIEROGLYPH F006;Lo;0;L;;;;;N;;;;;\n13105;EGYPTIAN HIEROGLYPH F007;Lo;0;L;;;;;N;;;;;\n13106;EGYPTIAN HIEROGLYPH F008;Lo;0;L;;;;;N;;;;;\n13107;EGYPTIAN HIEROGLYPH F009;Lo;0;L;;;;;N;;;;;\n13108;EGYPTIAN HIEROGLYPH F010;Lo;0;L;;;;;N;;;;;\n13109;EGYPTIAN HIEROGLYPH F011;Lo;0;L;;;;;N;;;;;\n1310A;EGYPTIAN HIEROGLYPH F012;Lo;0;L;;;;;N;;;;;\n1310B;EGYPTIAN HIEROGLYPH F013;Lo;0;L;;;;;N;;;;;\n1310C;EGYPTIAN HIEROGLYPH F013A;Lo;0;L;;;;;N;;;;;\n1310D;EGYPTIAN HIEROGLYPH F014;Lo;0;L;;;;;N;;;;;\n1310E;EGYPTIAN HIEROGLYPH F015;Lo;0;L;;;;;N;;;;;\n1310F;EGYPTIAN HIEROGLYPH F016;Lo;0;L;;;;;N;;;;;\n13110;EGYPTIAN HIEROGLYPH F017;Lo;0;L;;;;;N;;;;;\n13111;EGYPTIAN HIEROGLYPH F018;Lo;0;L;;;;;N;;;;;\n13112;EGYPTIAN HIEROGLYPH F019;Lo;0;L;;;;;N;;;;;\n13113;EGYPTIAN HIEROGLYPH F020;Lo;0;L;;;;;N;;;;;\n13114;EGYPTIAN HIEROGLYPH F021;Lo;0;L;;;;;N;;;;;\n13115;EGYPTIAN HIEROGLYPH F021A;Lo;0;L;;;;;N;;;;;\n13116;EGYPTIAN HIEROGLYPH F022;Lo;0;L;;;;;N;;;;;\n13117;EGYPTIAN HIEROGLYPH F023;Lo;0;L;;;;;N;;;;;\n13118;EGYPTIAN HIEROGLYPH F024;Lo;0;L;;;;;N;;;;;\n13119;EGYPTIAN HIEROGLYPH F025;Lo;0;L;;;;;N;;;;;\n1311A;EGYPTIAN HIEROGLYPH F026;Lo;0;L;;;;;N;;;;;\n1311B;EGYPTIAN HIEROGLYPH F027;Lo;0;L;;;;;N;;;;;\n1311C;EGYPTIAN HIEROGLYPH F028;Lo;0;L;;;;;N;;;;;\n1311D;EGYPTIAN HIEROGLYPH F029;Lo;0;L;;;;;N;;;;;\n1311E;EGYPTIAN HIEROGLYPH F030;Lo;0;L;;;;;N;;;;;\n1311F;EGYPTIAN HIEROGLYPH F031;Lo;0;L;;;;;N;;;;;\n13120;EGYPTIAN HIEROGLYPH F031A;Lo;0;L;;;;;N;;;;;\n13121;EGYPTIAN HIEROGLYPH F032;Lo;0;L;;;;;N;;;;;\n13122;EGYPTIAN HIEROGLYPH F033;Lo;0;L;;;;;N;;;;;\n13123;EGYPTIAN HIEROGLYPH F034;Lo;0;L;;;;;N;;;;;\n13124;EGYPTIAN HIEROGLYPH F035;Lo;0;L;;;;;N;;;;;\n13125;EGYPTIAN HIEROGLYPH F036;Lo;0;L;;;;;N;;;;;\n13126;EGYPTIAN HIEROGLYPH F037;Lo;0;L;;;;;N;;;;;\n13127;EGYPTIAN HIEROGLYPH F037A;Lo;0;L;;;;;N;;;;;\n13128;EGYPTIAN HIEROGLYPH F038;Lo;0;L;;;;;N;;;;;\n13129;EGYPTIAN HIEROGLYPH F038A;Lo;0;L;;;;;N;;;;;\n1312A;EGYPTIAN HIEROGLYPH F039;Lo;0;L;;;;;N;;;;;\n1312B;EGYPTIAN HIEROGLYPH F040;Lo;0;L;;;;;N;;;;;\n1312C;EGYPTIAN HIEROGLYPH F041;Lo;0;L;;;;;N;;;;;\n1312D;EGYPTIAN HIEROGLYPH F042;Lo;0;L;;;;;N;;;;;\n1312E;EGYPTIAN HIEROGLYPH F043;Lo;0;L;;;;;N;;;;;\n1312F;EGYPTIAN HIEROGLYPH F044;Lo;0;L;;;;;N;;;;;\n13130;EGYPTIAN HIEROGLYPH F045;Lo;0;L;;;;;N;;;;;\n13131;EGYPTIAN HIEROGLYPH F045A;Lo;0;L;;;;;N;;;;;\n13132;EGYPTIAN HIEROGLYPH F046;Lo;0;L;;;;;N;;;;;\n13133;EGYPTIAN HIEROGLYPH F046A;Lo;0;L;;;;;N;;;;;\n13134;EGYPTIAN HIEROGLYPH F047;Lo;0;L;;;;;N;;;;;\n13135;EGYPTIAN HIEROGLYPH F047A;Lo;0;L;;;;;N;;;;;\n13136;EGYPTIAN HIEROGLYPH F048;Lo;0;L;;;;;N;;;;;\n13137;EGYPTIAN HIEROGLYPH F049;Lo;0;L;;;;;N;;;;;\n13138;EGYPTIAN HIEROGLYPH F050;Lo;0;L;;;;;N;;;;;\n13139;EGYPTIAN HIEROGLYPH F051;Lo;0;L;;;;;N;;;;;\n1313A;EGYPTIAN HIEROGLYPH F051A;Lo;0;L;;;;;N;;;;;\n1313B;EGYPTIAN HIEROGLYPH F051B;Lo;0;L;;;;;N;;;;;\n1313C;EGYPTIAN HIEROGLYPH F051C;Lo;0;L;;;;;N;;;;;\n1313D;EGYPTIAN HIEROGLYPH F052;Lo;0;L;;;;;N;;;;;\n1313E;EGYPTIAN HIEROGLYPH F053;Lo;0;L;;;;;N;;;;;\n1313F;EGYPTIAN HIEROGLYPH G001;Lo;0;L;;;;;N;;;;;\n13140;EGYPTIAN HIEROGLYPH G002;Lo;0;L;;;;;N;;;;;\n13141;EGYPTIAN HIEROGLYPH G003;Lo;0;L;;;;;N;;;;;\n13142;EGYPTIAN HIEROGLYPH G004;Lo;0;L;;;;;N;;;;;\n13143;EGYPTIAN HIEROGLYPH G005;Lo;0;L;;;;;N;;;;;\n13144;EGYPTIAN HIEROGLYPH G006;Lo;0;L;;;;;N;;;;;\n13145;EGYPTIAN HIEROGLYPH G006A;Lo;0;L;;;;;N;;;;;\n13146;EGYPTIAN HIEROGLYPH G007;Lo;0;L;;;;;N;;;;;\n13147;EGYPTIAN HIEROGLYPH G007A;Lo;0;L;;;;;N;;;;;\n13148;EGYPTIAN HIEROGLYPH G007B;Lo;0;L;;;;;N;;;;;\n13149;EGYPTIAN HIEROGLYPH G008;Lo;0;L;;;;;N;;;;;\n1314A;EGYPTIAN HIEROGLYPH G009;Lo;0;L;;;;;N;;;;;\n1314B;EGYPTIAN HIEROGLYPH G010;Lo;0;L;;;;;N;;;;;\n1314C;EGYPTIAN HIEROGLYPH G011;Lo;0;L;;;;;N;;;;;\n1314D;EGYPTIAN HIEROGLYPH G011A;Lo;0;L;;;;;N;;;;;\n1314E;EGYPTIAN HIEROGLYPH G012;Lo;0;L;;;;;N;;;;;\n1314F;EGYPTIAN HIEROGLYPH G013;Lo;0;L;;;;;N;;;;;\n13150;EGYPTIAN HIEROGLYPH G014;Lo;0;L;;;;;N;;;;;\n13151;EGYPTIAN HIEROGLYPH G015;Lo;0;L;;;;;N;;;;;\n13152;EGYPTIAN HIEROGLYPH G016;Lo;0;L;;;;;N;;;;;\n13153;EGYPTIAN HIEROGLYPH G017;Lo;0;L;;;;;N;;;;;\n13154;EGYPTIAN HIEROGLYPH G018;Lo;0;L;;;;;N;;;;;\n13155;EGYPTIAN HIEROGLYPH G019;Lo;0;L;;;;;N;;;;;\n13156;EGYPTIAN HIEROGLYPH G020;Lo;0;L;;;;;N;;;;;\n13157;EGYPTIAN HIEROGLYPH G020A;Lo;0;L;;;;;N;;;;;\n13158;EGYPTIAN HIEROGLYPH G021;Lo;0;L;;;;;N;;;;;\n13159;EGYPTIAN HIEROGLYPH G022;Lo;0;L;;;;;N;;;;;\n1315A;EGYPTIAN HIEROGLYPH G023;Lo;0;L;;;;;N;;;;;\n1315B;EGYPTIAN HIEROGLYPH G024;Lo;0;L;;;;;N;;;;;\n1315C;EGYPTIAN HIEROGLYPH G025;Lo;0;L;;;;;N;;;;;\n1315D;EGYPTIAN HIEROGLYPH G026;Lo;0;L;;;;;N;;;;;\n1315E;EGYPTIAN HIEROGLYPH G026A;Lo;0;L;;;;;N;;;;;\n1315F;EGYPTIAN HIEROGLYPH G027;Lo;0;L;;;;;N;;;;;\n13160;EGYPTIAN HIEROGLYPH G028;Lo;0;L;;;;;N;;;;;\n13161;EGYPTIAN HIEROGLYPH G029;Lo;0;L;;;;;N;;;;;\n13162;EGYPTIAN HIEROGLYPH G030;Lo;0;L;;;;;N;;;;;\n13163;EGYPTIAN HIEROGLYPH G031;Lo;0;L;;;;;N;;;;;\n13164;EGYPTIAN HIEROGLYPH G032;Lo;0;L;;;;;N;;;;;\n13165;EGYPTIAN HIEROGLYPH G033;Lo;0;L;;;;;N;;;;;\n13166;EGYPTIAN HIEROGLYPH G034;Lo;0;L;;;;;N;;;;;\n13167;EGYPTIAN HIEROGLYPH G035;Lo;0;L;;;;;N;;;;;\n13168;EGYPTIAN HIEROGLYPH G036;Lo;0;L;;;;;N;;;;;\n13169;EGYPTIAN HIEROGLYPH G036A;Lo;0;L;;;;;N;;;;;\n1316A;EGYPTIAN HIEROGLYPH G037;Lo;0;L;;;;;N;;;;;\n1316B;EGYPTIAN HIEROGLYPH G037A;Lo;0;L;;;;;N;;;;;\n1316C;EGYPTIAN HIEROGLYPH G038;Lo;0;L;;;;;N;;;;;\n1316D;EGYPTIAN HIEROGLYPH G039;Lo;0;L;;;;;N;;;;;\n1316E;EGYPTIAN HIEROGLYPH G040;Lo;0;L;;;;;N;;;;;\n1316F;EGYPTIAN HIEROGLYPH G041;Lo;0;L;;;;;N;;;;;\n13170;EGYPTIAN HIEROGLYPH G042;Lo;0;L;;;;;N;;;;;\n13171;EGYPTIAN HIEROGLYPH G043;Lo;0;L;;;;;N;;;;;\n13172;EGYPTIAN HIEROGLYPH G043A;Lo;0;L;;;;;N;;;;;\n13173;EGYPTIAN HIEROGLYPH G044;Lo;0;L;;;;;N;;;;;\n13174;EGYPTIAN HIEROGLYPH G045;Lo;0;L;;;;;N;;;;;\n13175;EGYPTIAN HIEROGLYPH G045A;Lo;0;L;;;;;N;;;;;\n13176;EGYPTIAN HIEROGLYPH G046;Lo;0;L;;;;;N;;;;;\n13177;EGYPTIAN HIEROGLYPH G047;Lo;0;L;;;;;N;;;;;\n13178;EGYPTIAN HIEROGLYPH G048;Lo;0;L;;;;;N;;;;;\n13179;EGYPTIAN HIEROGLYPH G049;Lo;0;L;;;;;N;;;;;\n1317A;EGYPTIAN HIEROGLYPH G050;Lo;0;L;;;;;N;;;;;\n1317B;EGYPTIAN HIEROGLYPH G051;Lo;0;L;;;;;N;;;;;\n1317C;EGYPTIAN HIEROGLYPH G052;Lo;0;L;;;;;N;;;;;\n1317D;EGYPTIAN HIEROGLYPH G053;Lo;0;L;;;;;N;;;;;\n1317E;EGYPTIAN HIEROGLYPH G054;Lo;0;L;;;;;N;;;;;\n1317F;EGYPTIAN HIEROGLYPH H001;Lo;0;L;;;;;N;;;;;\n13180;EGYPTIAN HIEROGLYPH H002;Lo;0;L;;;;;N;;;;;\n13181;EGYPTIAN HIEROGLYPH H003;Lo;0;L;;;;;N;;;;;\n13182;EGYPTIAN HIEROGLYPH H004;Lo;0;L;;;;;N;;;;;\n13183;EGYPTIAN HIEROGLYPH H005;Lo;0;L;;;;;N;;;;;\n13184;EGYPTIAN HIEROGLYPH H006;Lo;0;L;;;;;N;;;;;\n13185;EGYPTIAN HIEROGLYPH H006A;Lo;0;L;;;;;N;;;;;\n13186;EGYPTIAN HIEROGLYPH H007;Lo;0;L;;;;;N;;;;;\n13187;EGYPTIAN HIEROGLYPH H008;Lo;0;L;;;;;N;;;;;\n13188;EGYPTIAN HIEROGLYPH I001;Lo;0;L;;;;;N;;;;;\n13189;EGYPTIAN HIEROGLYPH I002;Lo;0;L;;;;;N;;;;;\n1318A;EGYPTIAN HIEROGLYPH I003;Lo;0;L;;;;;N;;;;;\n1318B;EGYPTIAN HIEROGLYPH I004;Lo;0;L;;;;;N;;;;;\n1318C;EGYPTIAN HIEROGLYPH I005;Lo;0;L;;;;;N;;;;;\n1318D;EGYPTIAN HIEROGLYPH I005A;Lo;0;L;;;;;N;;;;;\n1318E;EGYPTIAN HIEROGLYPH I006;Lo;0;L;;;;;N;;;;;\n1318F;EGYPTIAN HIEROGLYPH I007;Lo;0;L;;;;;N;;;;;\n13190;EGYPTIAN HIEROGLYPH I008;Lo;0;L;;;;;N;;;;;\n13191;EGYPTIAN HIEROGLYPH I009;Lo;0;L;;;;;N;;;;;\n13192;EGYPTIAN HIEROGLYPH I009A;Lo;0;L;;;;;N;;;;;\n13193;EGYPTIAN HIEROGLYPH I010;Lo;0;L;;;;;N;;;;;\n13194;EGYPTIAN HIEROGLYPH I010A;Lo;0;L;;;;;N;;;;;\n13195;EGYPTIAN HIEROGLYPH I011;Lo;0;L;;;;;N;;;;;\n13196;EGYPTIAN HIEROGLYPH I011A;Lo;0;L;;;;;N;;;;;\n13197;EGYPTIAN HIEROGLYPH I012;Lo;0;L;;;;;N;;;;;\n13198;EGYPTIAN HIEROGLYPH I013;Lo;0;L;;;;;N;;;;;\n13199;EGYPTIAN HIEROGLYPH I014;Lo;0;L;;;;;N;;;;;\n1319A;EGYPTIAN HIEROGLYPH I015;Lo;0;L;;;;;N;;;;;\n1319B;EGYPTIAN HIEROGLYPH K001;Lo;0;L;;;;;N;;;;;\n1319C;EGYPTIAN HIEROGLYPH K002;Lo;0;L;;;;;N;;;;;\n1319D;EGYPTIAN HIEROGLYPH K003;Lo;0;L;;;;;N;;;;;\n1319E;EGYPTIAN HIEROGLYPH K004;Lo;0;L;;;;;N;;;;;\n1319F;EGYPTIAN HIEROGLYPH K005;Lo;0;L;;;;;N;;;;;\n131A0;EGYPTIAN HIEROGLYPH K006;Lo;0;L;;;;;N;;;;;\n131A1;EGYPTIAN HIEROGLYPH K007;Lo;0;L;;;;;N;;;;;\n131A2;EGYPTIAN HIEROGLYPH K008;Lo;0;L;;;;;N;;;;;\n131A3;EGYPTIAN HIEROGLYPH L001;Lo;0;L;;;;;N;;;;;\n131A4;EGYPTIAN HIEROGLYPH L002;Lo;0;L;;;;;N;;;;;\n131A5;EGYPTIAN HIEROGLYPH L002A;Lo;0;L;;;;;N;;;;;\n131A6;EGYPTIAN HIEROGLYPH L003;Lo;0;L;;;;;N;;;;;\n131A7;EGYPTIAN HIEROGLYPH L004;Lo;0;L;;;;;N;;;;;\n131A8;EGYPTIAN HIEROGLYPH L005;Lo;0;L;;;;;N;;;;;\n131A9;EGYPTIAN HIEROGLYPH L006;Lo;0;L;;;;;N;;;;;\n131AA;EGYPTIAN HIEROGLYPH L006A;Lo;0;L;;;;;N;;;;;\n131AB;EGYPTIAN HIEROGLYPH L007;Lo;0;L;;;;;N;;;;;\n131AC;EGYPTIAN HIEROGLYPH L008;Lo;0;L;;;;;N;;;;;\n131AD;EGYPTIAN HIEROGLYPH M001;Lo;0;L;;;;;N;;;;;\n131AE;EGYPTIAN HIEROGLYPH M001A;Lo;0;L;;;;;N;;;;;\n131AF;EGYPTIAN HIEROGLYPH M001B;Lo;0;L;;;;;N;;;;;\n131B0;EGYPTIAN HIEROGLYPH M002;Lo;0;L;;;;;N;;;;;\n131B1;EGYPTIAN HIEROGLYPH M003;Lo;0;L;;;;;N;;;;;\n131B2;EGYPTIAN HIEROGLYPH M003A;Lo;0;L;;;;;N;;;;;\n131B3;EGYPTIAN HIEROGLYPH M004;Lo;0;L;;;;;N;;;;;\n131B4;EGYPTIAN HIEROGLYPH M005;Lo;0;L;;;;;N;;;;;\n131B5;EGYPTIAN HIEROGLYPH M006;Lo;0;L;;;;;N;;;;;\n131B6;EGYPTIAN HIEROGLYPH M007;Lo;0;L;;;;;N;;;;;\n131B7;EGYPTIAN HIEROGLYPH M008;Lo;0;L;;;;;N;;;;;\n131B8;EGYPTIAN HIEROGLYPH M009;Lo;0;L;;;;;N;;;;;\n131B9;EGYPTIAN HIEROGLYPH M010;Lo;0;L;;;;;N;;;;;\n131BA;EGYPTIAN HIEROGLYPH M010A;Lo;0;L;;;;;N;;;;;\n131BB;EGYPTIAN HIEROGLYPH M011;Lo;0;L;;;;;N;;;;;\n131BC;EGYPTIAN HIEROGLYPH M012;Lo;0;L;;;;;N;;;;;\n131BD;EGYPTIAN HIEROGLYPH M012A;Lo;0;L;;;;;N;;;;;\n131BE;EGYPTIAN HIEROGLYPH M012B;Lo;0;L;;;;;N;;;;;\n131BF;EGYPTIAN HIEROGLYPH M012C;Lo;0;L;;;;;N;;;;;\n131C0;EGYPTIAN HIEROGLYPH M012D;Lo;0;L;;;;;N;;;;;\n131C1;EGYPTIAN HIEROGLYPH M012E;Lo;0;L;;;;;N;;;;;\n131C2;EGYPTIAN HIEROGLYPH M012F;Lo;0;L;;;;;N;;;;;\n131C3;EGYPTIAN HIEROGLYPH M012G;Lo;0;L;;;;;N;;;;;\n131C4;EGYPTIAN HIEROGLYPH M012H;Lo;0;L;;;;;N;;;;;\n131C5;EGYPTIAN HIEROGLYPH M013;Lo;0;L;;;;;N;;;;;\n131C6;EGYPTIAN HIEROGLYPH M014;Lo;0;L;;;;;N;;;;;\n131C7;EGYPTIAN HIEROGLYPH M015;Lo;0;L;;;;;N;;;;;\n131C8;EGYPTIAN HIEROGLYPH M015A;Lo;0;L;;;;;N;;;;;\n131C9;EGYPTIAN HIEROGLYPH M016;Lo;0;L;;;;;N;;;;;\n131CA;EGYPTIAN HIEROGLYPH M016A;Lo;0;L;;;;;N;;;;;\n131CB;EGYPTIAN HIEROGLYPH M017;Lo;0;L;;;;;N;;;;;\n131CC;EGYPTIAN HIEROGLYPH M017A;Lo;0;L;;;;;N;;;;;\n131CD;EGYPTIAN HIEROGLYPH M018;Lo;0;L;;;;;N;;;;;\n131CE;EGYPTIAN HIEROGLYPH M019;Lo;0;L;;;;;N;;;;;\n131CF;EGYPTIAN HIEROGLYPH M020;Lo;0;L;;;;;N;;;;;\n131D0;EGYPTIAN HIEROGLYPH M021;Lo;0;L;;;;;N;;;;;\n131D1;EGYPTIAN HIEROGLYPH M022;Lo;0;L;;;;;N;;;;;\n131D2;EGYPTIAN HIEROGLYPH M022A;Lo;0;L;;;;;N;;;;;\n131D3;EGYPTIAN HIEROGLYPH M023;Lo;0;L;;;;;N;;;;;\n131D4;EGYPTIAN HIEROGLYPH M024;Lo;0;L;;;;;N;;;;;\n131D5;EGYPTIAN HIEROGLYPH M024A;Lo;0;L;;;;;N;;;;;\n131D6;EGYPTIAN HIEROGLYPH M025;Lo;0;L;;;;;N;;;;;\n131D7;EGYPTIAN HIEROGLYPH M026;Lo;0;L;;;;;N;;;;;\n131D8;EGYPTIAN HIEROGLYPH M027;Lo;0;L;;;;;N;;;;;\n131D9;EGYPTIAN HIEROGLYPH M028;Lo;0;L;;;;;N;;;;;\n131DA;EGYPTIAN HIEROGLYPH M028A;Lo;0;L;;;;;N;;;;;\n131DB;EGYPTIAN HIEROGLYPH M029;Lo;0;L;;;;;N;;;;;\n131DC;EGYPTIAN HIEROGLYPH M030;Lo;0;L;;;;;N;;;;;\n131DD;EGYPTIAN HIEROGLYPH M031;Lo;0;L;;;;;N;;;;;\n131DE;EGYPTIAN HIEROGLYPH M031A;Lo;0;L;;;;;N;;;;;\n131DF;EGYPTIAN HIEROGLYPH M032;Lo;0;L;;;;;N;;;;;\n131E0;EGYPTIAN HIEROGLYPH M033;Lo;0;L;;;;;N;;;;;\n131E1;EGYPTIAN HIEROGLYPH M033A;Lo;0;L;;;;;N;;;;;\n131E2;EGYPTIAN HIEROGLYPH M033B;Lo;0;L;;;;;N;;;;;\n131E3;EGYPTIAN HIEROGLYPH M034;Lo;0;L;;;;;N;;;;;\n131E4;EGYPTIAN HIEROGLYPH M035;Lo;0;L;;;;;N;;;;;\n131E5;EGYPTIAN HIEROGLYPH M036;Lo;0;L;;;;;N;;;;;\n131E6;EGYPTIAN HIEROGLYPH M037;Lo;0;L;;;;;N;;;;;\n131E7;EGYPTIAN HIEROGLYPH M038;Lo;0;L;;;;;N;;;;;\n131E8;EGYPTIAN HIEROGLYPH M039;Lo;0;L;;;;;N;;;;;\n131E9;EGYPTIAN HIEROGLYPH M040;Lo;0;L;;;;;N;;;;;\n131EA;EGYPTIAN HIEROGLYPH M040A;Lo;0;L;;;;;N;;;;;\n131EB;EGYPTIAN HIEROGLYPH M041;Lo;0;L;;;;;N;;;;;\n131EC;EGYPTIAN HIEROGLYPH M042;Lo;0;L;;;;;N;;;;;\n131ED;EGYPTIAN HIEROGLYPH M043;Lo;0;L;;;;;N;;;;;\n131EE;EGYPTIAN HIEROGLYPH M044;Lo;0;L;;;;;N;;;;;\n131EF;EGYPTIAN HIEROGLYPH N001;Lo;0;L;;;;;N;;;;;\n131F0;EGYPTIAN HIEROGLYPH N002;Lo;0;L;;;;;N;;;;;\n131F1;EGYPTIAN HIEROGLYPH N003;Lo;0;L;;;;;N;;;;;\n131F2;EGYPTIAN HIEROGLYPH N004;Lo;0;L;;;;;N;;;;;\n131F3;EGYPTIAN HIEROGLYPH N005;Lo;0;L;;;;;N;;;;;\n131F4;EGYPTIAN HIEROGLYPH N006;Lo;0;L;;;;;N;;;;;\n131F5;EGYPTIAN HIEROGLYPH N007;Lo;0;L;;;;;N;;;;;\n131F6;EGYPTIAN HIEROGLYPH N008;Lo;0;L;;;;;N;;;;;\n131F7;EGYPTIAN HIEROGLYPH N009;Lo;0;L;;;;;N;;;;;\n131F8;EGYPTIAN HIEROGLYPH N010;Lo;0;L;;;;;N;;;;;\n131F9;EGYPTIAN HIEROGLYPH N011;Lo;0;L;;;;;N;;;;;\n131FA;EGYPTIAN HIEROGLYPH N012;Lo;0;L;;;;;N;;;;;\n131FB;EGYPTIAN HIEROGLYPH N013;Lo;0;L;;;;;N;;;;;\n131FC;EGYPTIAN HIEROGLYPH N014;Lo;0;L;;;;;N;;;;;\n131FD;EGYPTIAN HIEROGLYPH N015;Lo;0;L;;;;;N;;;;;\n131FE;EGYPTIAN HIEROGLYPH N016;Lo;0;L;;;;;N;;;;;\n131FF;EGYPTIAN HIEROGLYPH N017;Lo;0;L;;;;;N;;;;;\n13200;EGYPTIAN HIEROGLYPH N018;Lo;0;L;;;;;N;;;;;\n13201;EGYPTIAN HIEROGLYPH N018A;Lo;0;L;;;;;N;;;;;\n13202;EGYPTIAN HIEROGLYPH N018B;Lo;0;L;;;;;N;;;;;\n13203;EGYPTIAN HIEROGLYPH N019;Lo;0;L;;;;;N;;;;;\n13204;EGYPTIAN HIEROGLYPH N020;Lo;0;L;;;;;N;;;;;\n13205;EGYPTIAN HIEROGLYPH N021;Lo;0;L;;;;;N;;;;;\n13206;EGYPTIAN HIEROGLYPH N022;Lo;0;L;;;;;N;;;;;\n13207;EGYPTIAN HIEROGLYPH N023;Lo;0;L;;;;;N;;;;;\n13208;EGYPTIAN HIEROGLYPH N024;Lo;0;L;;;;;N;;;;;\n13209;EGYPTIAN HIEROGLYPH N025;Lo;0;L;;;;;N;;;;;\n1320A;EGYPTIAN HIEROGLYPH N025A;Lo;0;L;;;;;N;;;;;\n1320B;EGYPTIAN HIEROGLYPH N026;Lo;0;L;;;;;N;;;;;\n1320C;EGYPTIAN HIEROGLYPH N027;Lo;0;L;;;;;N;;;;;\n1320D;EGYPTIAN HIEROGLYPH N028;Lo;0;L;;;;;N;;;;;\n1320E;EGYPTIAN HIEROGLYPH N029;Lo;0;L;;;;;N;;;;;\n1320F;EGYPTIAN HIEROGLYPH N030;Lo;0;L;;;;;N;;;;;\n13210;EGYPTIAN HIEROGLYPH N031;Lo;0;L;;;;;N;;;;;\n13211;EGYPTIAN HIEROGLYPH N032;Lo;0;L;;;;;N;;;;;\n13212;EGYPTIAN HIEROGLYPH N033;Lo;0;L;;;;;N;;;;;\n13213;EGYPTIAN HIEROGLYPH N033A;Lo;0;L;;;;;N;;;;;\n13214;EGYPTIAN HIEROGLYPH N034;Lo;0;L;;;;;N;;;;;\n13215;EGYPTIAN HIEROGLYPH N034A;Lo;0;L;;;;;N;;;;;\n13216;EGYPTIAN HIEROGLYPH N035;Lo;0;L;;;;;N;;;;;\n13217;EGYPTIAN HIEROGLYPH N035A;Lo;0;L;;;;;N;;;;;\n13218;EGYPTIAN HIEROGLYPH N036;Lo;0;L;;;;;N;;;;;\n13219;EGYPTIAN HIEROGLYPH N037;Lo;0;L;;;;;N;;;;;\n1321A;EGYPTIAN HIEROGLYPH N037A;Lo;0;L;;;;;N;;;;;\n1321B;EGYPTIAN HIEROGLYPH N038;Lo;0;L;;;;;N;;;;;\n1321C;EGYPTIAN HIEROGLYPH N039;Lo;0;L;;;;;N;;;;;\n1321D;EGYPTIAN HIEROGLYPH N040;Lo;0;L;;;;;N;;;;;\n1321E;EGYPTIAN HIEROGLYPH N041;Lo;0;L;;;;;N;;;;;\n1321F;EGYPTIAN HIEROGLYPH N042;Lo;0;L;;;;;N;;;;;\n13220;EGYPTIAN HIEROGLYPH NL001;Lo;0;L;;;;;N;;;;;\n13221;EGYPTIAN HIEROGLYPH NL002;Lo;0;L;;;;;N;;;;;\n13222;EGYPTIAN HIEROGLYPH NL003;Lo;0;L;;;;;N;;;;;\n13223;EGYPTIAN HIEROGLYPH NL004;Lo;0;L;;;;;N;;;;;\n13224;EGYPTIAN HIEROGLYPH NL005;Lo;0;L;;;;;N;;;;;\n13225;EGYPTIAN HIEROGLYPH NL005A;Lo;0;L;;;;;N;;;;;\n13226;EGYPTIAN HIEROGLYPH NL006;Lo;0;L;;;;;N;;;;;\n13227;EGYPTIAN HIEROGLYPH NL007;Lo;0;L;;;;;N;;;;;\n13228;EGYPTIAN HIEROGLYPH NL008;Lo;0;L;;;;;N;;;;;\n13229;EGYPTIAN HIEROGLYPH NL009;Lo;0;L;;;;;N;;;;;\n1322A;EGYPTIAN HIEROGLYPH NL010;Lo;0;L;;;;;N;;;;;\n1322B;EGYPTIAN HIEROGLYPH NL011;Lo;0;L;;;;;N;;;;;\n1322C;EGYPTIAN HIEROGLYPH NL012;Lo;0;L;;;;;N;;;;;\n1322D;EGYPTIAN HIEROGLYPH NL013;Lo;0;L;;;;;N;;;;;\n1322E;EGYPTIAN HIEROGLYPH NL014;Lo;0;L;;;;;N;;;;;\n1322F;EGYPTIAN HIEROGLYPH NL015;Lo;0;L;;;;;N;;;;;\n13230;EGYPTIAN HIEROGLYPH NL016;Lo;0;L;;;;;N;;;;;\n13231;EGYPTIAN HIEROGLYPH NL017;Lo;0;L;;;;;N;;;;;\n13232;EGYPTIAN HIEROGLYPH NL017A;Lo;0;L;;;;;N;;;;;\n13233;EGYPTIAN HIEROGLYPH NL018;Lo;0;L;;;;;N;;;;;\n13234;EGYPTIAN HIEROGLYPH NL019;Lo;0;L;;;;;N;;;;;\n13235;EGYPTIAN HIEROGLYPH NL020;Lo;0;L;;;;;N;;;;;\n13236;EGYPTIAN HIEROGLYPH NU001;Lo;0;L;;;;;N;;;;;\n13237;EGYPTIAN HIEROGLYPH NU002;Lo;0;L;;;;;N;;;;;\n13238;EGYPTIAN HIEROGLYPH NU003;Lo;0;L;;;;;N;;;;;\n13239;EGYPTIAN HIEROGLYPH NU004;Lo;0;L;;;;;N;;;;;\n1323A;EGYPTIAN HIEROGLYPH NU005;Lo;0;L;;;;;N;;;;;\n1323B;EGYPTIAN HIEROGLYPH NU006;Lo;0;L;;;;;N;;;;;\n1323C;EGYPTIAN HIEROGLYPH NU007;Lo;0;L;;;;;N;;;;;\n1323D;EGYPTIAN HIEROGLYPH NU008;Lo;0;L;;;;;N;;;;;\n1323E;EGYPTIAN HIEROGLYPH NU009;Lo;0;L;;;;;N;;;;;\n1323F;EGYPTIAN HIEROGLYPH NU010;Lo;0;L;;;;;N;;;;;\n13240;EGYPTIAN HIEROGLYPH NU010A;Lo;0;L;;;;;N;;;;;\n13241;EGYPTIAN HIEROGLYPH NU011;Lo;0;L;;;;;N;;;;;\n13242;EGYPTIAN HIEROGLYPH NU011A;Lo;0;L;;;;;N;;;;;\n13243;EGYPTIAN HIEROGLYPH NU012;Lo;0;L;;;;;N;;;;;\n13244;EGYPTIAN HIEROGLYPH NU013;Lo;0;L;;;;;N;;;;;\n13245;EGYPTIAN HIEROGLYPH NU014;Lo;0;L;;;;;N;;;;;\n13246;EGYPTIAN HIEROGLYPH NU015;Lo;0;L;;;;;N;;;;;\n13247;EGYPTIAN HIEROGLYPH NU016;Lo;0;L;;;;;N;;;;;\n13248;EGYPTIAN HIEROGLYPH NU017;Lo;0;L;;;;;N;;;;;\n13249;EGYPTIAN HIEROGLYPH NU018;Lo;0;L;;;;;N;;;;;\n1324A;EGYPTIAN HIEROGLYPH NU018A;Lo;0;L;;;;;N;;;;;\n1324B;EGYPTIAN HIEROGLYPH NU019;Lo;0;L;;;;;N;;;;;\n1324C;EGYPTIAN HIEROGLYPH NU020;Lo;0;L;;;;;N;;;;;\n1324D;EGYPTIAN HIEROGLYPH NU021;Lo;0;L;;;;;N;;;;;\n1324E;EGYPTIAN HIEROGLYPH NU022;Lo;0;L;;;;;N;;;;;\n1324F;EGYPTIAN HIEROGLYPH NU022A;Lo;0;L;;;;;N;;;;;\n13250;EGYPTIAN HIEROGLYPH O001;Lo;0;L;;;;;N;;;;;\n13251;EGYPTIAN HIEROGLYPH O001A;Lo;0;L;;;;;N;;;;;\n13252;EGYPTIAN HIEROGLYPH O002;Lo;0;L;;;;;N;;;;;\n13253;EGYPTIAN HIEROGLYPH O003;Lo;0;L;;;;;N;;;;;\n13254;EGYPTIAN HIEROGLYPH O004;Lo;0;L;;;;;N;;;;;\n13255;EGYPTIAN HIEROGLYPH O005;Lo;0;L;;;;;N;;;;;\n13256;EGYPTIAN HIEROGLYPH O005A;Lo;0;L;;;;;N;;;;;\n13257;EGYPTIAN HIEROGLYPH O006;Lo;0;L;;;;;N;;;;;\n13258;EGYPTIAN HIEROGLYPH O006A;Lo;0;L;;;;;N;;;;;\n13259;EGYPTIAN HIEROGLYPH O006B;Lo;0;L;;;;;N;;;;;\n1325A;EGYPTIAN HIEROGLYPH O006C;Lo;0;L;;;;;N;;;;;\n1325B;EGYPTIAN HIEROGLYPH O006D;Lo;0;L;;;;;N;;;;;\n1325C;EGYPTIAN HIEROGLYPH O006E;Lo;0;L;;;;;N;;;;;\n1325D;EGYPTIAN HIEROGLYPH O006F;Lo;0;L;;;;;N;;;;;\n1325E;EGYPTIAN HIEROGLYPH O007;Lo;0;L;;;;;N;;;;;\n1325F;EGYPTIAN HIEROGLYPH O008;Lo;0;L;;;;;N;;;;;\n13260;EGYPTIAN HIEROGLYPH O009;Lo;0;L;;;;;N;;;;;\n13261;EGYPTIAN HIEROGLYPH O010;Lo;0;L;;;;;N;;;;;\n13262;EGYPTIAN HIEROGLYPH O010A;Lo;0;L;;;;;N;;;;;\n13263;EGYPTIAN HIEROGLYPH O010B;Lo;0;L;;;;;N;;;;;\n13264;EGYPTIAN HIEROGLYPH O010C;Lo;0;L;;;;;N;;;;;\n13265;EGYPTIAN HIEROGLYPH O011;Lo;0;L;;;;;N;;;;;\n13266;EGYPTIAN HIEROGLYPH O012;Lo;0;L;;;;;N;;;;;\n13267;EGYPTIAN HIEROGLYPH O013;Lo;0;L;;;;;N;;;;;\n13268;EGYPTIAN HIEROGLYPH O014;Lo;0;L;;;;;N;;;;;\n13269;EGYPTIAN HIEROGLYPH O015;Lo;0;L;;;;;N;;;;;\n1326A;EGYPTIAN HIEROGLYPH O016;Lo;0;L;;;;;N;;;;;\n1326B;EGYPTIAN HIEROGLYPH O017;Lo;0;L;;;;;N;;;;;\n1326C;EGYPTIAN HIEROGLYPH O018;Lo;0;L;;;;;N;;;;;\n1326D;EGYPTIAN HIEROGLYPH O019;Lo;0;L;;;;;N;;;;;\n1326E;EGYPTIAN HIEROGLYPH O019A;Lo;0;L;;;;;N;;;;;\n1326F;EGYPTIAN HIEROGLYPH O020;Lo;0;L;;;;;N;;;;;\n13270;EGYPTIAN HIEROGLYPH O020A;Lo;0;L;;;;;N;;;;;\n13271;EGYPTIAN HIEROGLYPH O021;Lo;0;L;;;;;N;;;;;\n13272;EGYPTIAN HIEROGLYPH O022;Lo;0;L;;;;;N;;;;;\n13273;EGYPTIAN HIEROGLYPH O023;Lo;0;L;;;;;N;;;;;\n13274;EGYPTIAN HIEROGLYPH O024;Lo;0;L;;;;;N;;;;;\n13275;EGYPTIAN HIEROGLYPH O024A;Lo;0;L;;;;;N;;;;;\n13276;EGYPTIAN HIEROGLYPH O025;Lo;0;L;;;;;N;;;;;\n13277;EGYPTIAN HIEROGLYPH O025A;Lo;0;L;;;;;N;;;;;\n13278;EGYPTIAN HIEROGLYPH O026;Lo;0;L;;;;;N;;;;;\n13279;EGYPTIAN HIEROGLYPH O027;Lo;0;L;;;;;N;;;;;\n1327A;EGYPTIAN HIEROGLYPH O028;Lo;0;L;;;;;N;;;;;\n1327B;EGYPTIAN HIEROGLYPH O029;Lo;0;L;;;;;N;;;;;\n1327C;EGYPTIAN HIEROGLYPH O029A;Lo;0;L;;;;;N;;;;;\n1327D;EGYPTIAN HIEROGLYPH O030;Lo;0;L;;;;;N;;;;;\n1327E;EGYPTIAN HIEROGLYPH O030A;Lo;0;L;;;;;N;;;;;\n1327F;EGYPTIAN HIEROGLYPH O031;Lo;0;L;;;;;N;;;;;\n13280;EGYPTIAN HIEROGLYPH O032;Lo;0;L;;;;;N;;;;;\n13281;EGYPTIAN HIEROGLYPH O033;Lo;0;L;;;;;N;;;;;\n13282;EGYPTIAN HIEROGLYPH O033A;Lo;0;L;;;;;N;;;;;\n13283;EGYPTIAN HIEROGLYPH O034;Lo;0;L;;;;;N;;;;;\n13284;EGYPTIAN HIEROGLYPH O035;Lo;0;L;;;;;N;;;;;\n13285;EGYPTIAN HIEROGLYPH O036;Lo;0;L;;;;;N;;;;;\n13286;EGYPTIAN HIEROGLYPH O036A;Lo;0;L;;;;;N;;;;;\n13287;EGYPTIAN HIEROGLYPH O036B;Lo;0;L;;;;;N;;;;;\n13288;EGYPTIAN HIEROGLYPH O036C;Lo;0;L;;;;;N;;;;;\n13289;EGYPTIAN HIEROGLYPH O036D;Lo;0;L;;;;;N;;;;;\n1328A;EGYPTIAN HIEROGLYPH O037;Lo;0;L;;;;;N;;;;;\n1328B;EGYPTIAN HIEROGLYPH O038;Lo;0;L;;;;;N;;;;;\n1328C;EGYPTIAN HIEROGLYPH O039;Lo;0;L;;;;;N;;;;;\n1328D;EGYPTIAN HIEROGLYPH O040;Lo;0;L;;;;;N;;;;;\n1328E;EGYPTIAN HIEROGLYPH O041;Lo;0;L;;;;;N;;;;;\n1328F;EGYPTIAN HIEROGLYPH O042;Lo;0;L;;;;;N;;;;;\n13290;EGYPTIAN HIEROGLYPH O043;Lo;0;L;;;;;N;;;;;\n13291;EGYPTIAN HIEROGLYPH O044;Lo;0;L;;;;;N;;;;;\n13292;EGYPTIAN HIEROGLYPH O045;Lo;0;L;;;;;N;;;;;\n13293;EGYPTIAN HIEROGLYPH O046;Lo;0;L;;;;;N;;;;;\n13294;EGYPTIAN HIEROGLYPH O047;Lo;0;L;;;;;N;;;;;\n13295;EGYPTIAN HIEROGLYPH O048;Lo;0;L;;;;;N;;;;;\n13296;EGYPTIAN HIEROGLYPH O049;Lo;0;L;;;;;N;;;;;\n13297;EGYPTIAN HIEROGLYPH O050;Lo;0;L;;;;;N;;;;;\n13298;EGYPTIAN HIEROGLYPH O050A;Lo;0;L;;;;;N;;;;;\n13299;EGYPTIAN HIEROGLYPH O050B;Lo;0;L;;;;;N;;;;;\n1329A;EGYPTIAN HIEROGLYPH O051;Lo;0;L;;;;;N;;;;;\n1329B;EGYPTIAN HIEROGLYPH P001;Lo;0;L;;;;;N;;;;;\n1329C;EGYPTIAN HIEROGLYPH P001A;Lo;0;L;;;;;N;;;;;\n1329D;EGYPTIAN HIEROGLYPH P002;Lo;0;L;;;;;N;;;;;\n1329E;EGYPTIAN HIEROGLYPH P003;Lo;0;L;;;;;N;;;;;\n1329F;EGYPTIAN HIEROGLYPH P003A;Lo;0;L;;;;;N;;;;;\n132A0;EGYPTIAN HIEROGLYPH P004;Lo;0;L;;;;;N;;;;;\n132A1;EGYPTIAN HIEROGLYPH P005;Lo;0;L;;;;;N;;;;;\n132A2;EGYPTIAN HIEROGLYPH P006;Lo;0;L;;;;;N;;;;;\n132A3;EGYPTIAN HIEROGLYPH P007;Lo;0;L;;;;;N;;;;;\n132A4;EGYPTIAN HIEROGLYPH P008;Lo;0;L;;;;;N;;;;;\n132A5;EGYPTIAN HIEROGLYPH P009;Lo;0;L;;;;;N;;;;;\n132A6;EGYPTIAN HIEROGLYPH P010;Lo;0;L;;;;;N;;;;;\n132A7;EGYPTIAN HIEROGLYPH P011;Lo;0;L;;;;;N;;;;;\n132A8;EGYPTIAN HIEROGLYPH Q001;Lo;0;L;;;;;N;;;;;\n132A9;EGYPTIAN HIEROGLYPH Q002;Lo;0;L;;;;;N;;;;;\n132AA;EGYPTIAN HIEROGLYPH Q003;Lo;0;L;;;;;N;;;;;\n132AB;EGYPTIAN HIEROGLYPH Q004;Lo;0;L;;;;;N;;;;;\n132AC;EGYPTIAN HIEROGLYPH Q005;Lo;0;L;;;;;N;;;;;\n132AD;EGYPTIAN HIEROGLYPH Q006;Lo;0;L;;;;;N;;;;;\n132AE;EGYPTIAN HIEROGLYPH Q007;Lo;0;L;;;;;N;;;;;\n132AF;EGYPTIAN HIEROGLYPH R001;Lo;0;L;;;;;N;;;;;\n132B0;EGYPTIAN HIEROGLYPH R002;Lo;0;L;;;;;N;;;;;\n132B1;EGYPTIAN HIEROGLYPH R002A;Lo;0;L;;;;;N;;;;;\n132B2;EGYPTIAN HIEROGLYPH R003;Lo;0;L;;;;;N;;;;;\n132B3;EGYPTIAN HIEROGLYPH R003A;Lo;0;L;;;;;N;;;;;\n132B4;EGYPTIAN HIEROGLYPH R003B;Lo;0;L;;;;;N;;;;;\n132B5;EGYPTIAN HIEROGLYPH R004;Lo;0;L;;;;;N;;;;;\n132B6;EGYPTIAN HIEROGLYPH R005;Lo;0;L;;;;;N;;;;;\n132B7;EGYPTIAN HIEROGLYPH R006;Lo;0;L;;;;;N;;;;;\n132B8;EGYPTIAN HIEROGLYPH R007;Lo;0;L;;;;;N;;;;;\n132B9;EGYPTIAN HIEROGLYPH R008;Lo;0;L;;;;;N;;;;;\n132BA;EGYPTIAN HIEROGLYPH R009;Lo;0;L;;;;;N;;;;;\n132BB;EGYPTIAN HIEROGLYPH R010;Lo;0;L;;;;;N;;;;;\n132BC;EGYPTIAN HIEROGLYPH R010A;Lo;0;L;;;;;N;;;;;\n132BD;EGYPTIAN HIEROGLYPH R011;Lo;0;L;;;;;N;;;;;\n132BE;EGYPTIAN HIEROGLYPH R012;Lo;0;L;;;;;N;;;;;\n132BF;EGYPTIAN HIEROGLYPH R013;Lo;0;L;;;;;N;;;;;\n132C0;EGYPTIAN HIEROGLYPH R014;Lo;0;L;;;;;N;;;;;\n132C1;EGYPTIAN HIEROGLYPH R015;Lo;0;L;;;;;N;;;;;\n132C2;EGYPTIAN HIEROGLYPH R016;Lo;0;L;;;;;N;;;;;\n132C3;EGYPTIAN HIEROGLYPH R016A;Lo;0;L;;;;;N;;;;;\n132C4;EGYPTIAN HIEROGLYPH R017;Lo;0;L;;;;;N;;;;;\n132C5;EGYPTIAN HIEROGLYPH R018;Lo;0;L;;;;;N;;;;;\n132C6;EGYPTIAN HIEROGLYPH R019;Lo;0;L;;;;;N;;;;;\n132C7;EGYPTIAN HIEROGLYPH R020;Lo;0;L;;;;;N;;;;;\n132C8;EGYPTIAN HIEROGLYPH R021;Lo;0;L;;;;;N;;;;;\n132C9;EGYPTIAN HIEROGLYPH R022;Lo;0;L;;;;;N;;;;;\n132CA;EGYPTIAN HIEROGLYPH R023;Lo;0;L;;;;;N;;;;;\n132CB;EGYPTIAN HIEROGLYPH R024;Lo;0;L;;;;;N;;;;;\n132CC;EGYPTIAN HIEROGLYPH R025;Lo;0;L;;;;;N;;;;;\n132CD;EGYPTIAN HIEROGLYPH R026;Lo;0;L;;;;;N;;;;;\n132CE;EGYPTIAN HIEROGLYPH R027;Lo;0;L;;;;;N;;;;;\n132CF;EGYPTIAN HIEROGLYPH R028;Lo;0;L;;;;;N;;;;;\n132D0;EGYPTIAN HIEROGLYPH R029;Lo;0;L;;;;;N;;;;;\n132D1;EGYPTIAN HIEROGLYPH S001;Lo;0;L;;;;;N;;;;;\n132D2;EGYPTIAN HIEROGLYPH S002;Lo;0;L;;;;;N;;;;;\n132D3;EGYPTIAN HIEROGLYPH S002A;Lo;0;L;;;;;N;;;;;\n132D4;EGYPTIAN HIEROGLYPH S003;Lo;0;L;;;;;N;;;;;\n132D5;EGYPTIAN HIEROGLYPH S004;Lo;0;L;;;;;N;;;;;\n132D6;EGYPTIAN HIEROGLYPH S005;Lo;0;L;;;;;N;;;;;\n132D7;EGYPTIAN HIEROGLYPH S006;Lo;0;L;;;;;N;;;;;\n132D8;EGYPTIAN HIEROGLYPH S006A;Lo;0;L;;;;;N;;;;;\n132D9;EGYPTIAN HIEROGLYPH S007;Lo;0;L;;;;;N;;;;;\n132DA;EGYPTIAN HIEROGLYPH S008;Lo;0;L;;;;;N;;;;;\n132DB;EGYPTIAN HIEROGLYPH S009;Lo;0;L;;;;;N;;;;;\n132DC;EGYPTIAN HIEROGLYPH S010;Lo;0;L;;;;;N;;;;;\n132DD;EGYPTIAN HIEROGLYPH S011;Lo;0;L;;;;;N;;;;;\n132DE;EGYPTIAN HIEROGLYPH S012;Lo;0;L;;;;;N;;;;;\n132DF;EGYPTIAN HIEROGLYPH S013;Lo;0;L;;;;;N;;;;;\n132E0;EGYPTIAN HIEROGLYPH S014;Lo;0;L;;;;;N;;;;;\n132E1;EGYPTIAN HIEROGLYPH S014A;Lo;0;L;;;;;N;;;;;\n132E2;EGYPTIAN HIEROGLYPH S014B;Lo;0;L;;;;;N;;;;;\n132E3;EGYPTIAN HIEROGLYPH S015;Lo;0;L;;;;;N;;;;;\n132E4;EGYPTIAN HIEROGLYPH S016;Lo;0;L;;;;;N;;;;;\n132E5;EGYPTIAN HIEROGLYPH S017;Lo;0;L;;;;;N;;;;;\n132E6;EGYPTIAN HIEROGLYPH S017A;Lo;0;L;;;;;N;;;;;\n132E7;EGYPTIAN HIEROGLYPH S018;Lo;0;L;;;;;N;;;;;\n132E8;EGYPTIAN HIEROGLYPH S019;Lo;0;L;;;;;N;;;;;\n132E9;EGYPTIAN HIEROGLYPH S020;Lo;0;L;;;;;N;;;;;\n132EA;EGYPTIAN HIEROGLYPH S021;Lo;0;L;;;;;N;;;;;\n132EB;EGYPTIAN HIEROGLYPH S022;Lo;0;L;;;;;N;;;;;\n132EC;EGYPTIAN HIEROGLYPH S023;Lo;0;L;;;;;N;;;;;\n132ED;EGYPTIAN HIEROGLYPH S024;Lo;0;L;;;;;N;;;;;\n132EE;EGYPTIAN HIEROGLYPH S025;Lo;0;L;;;;;N;;;;;\n132EF;EGYPTIAN HIEROGLYPH S026;Lo;0;L;;;;;N;;;;;\n132F0;EGYPTIAN HIEROGLYPH S026A;Lo;0;L;;;;;N;;;;;\n132F1;EGYPTIAN HIEROGLYPH S026B;Lo;0;L;;;;;N;;;;;\n132F2;EGYPTIAN HIEROGLYPH S027;Lo;0;L;;;;;N;;;;;\n132F3;EGYPTIAN HIEROGLYPH S028;Lo;0;L;;;;;N;;;;;\n132F4;EGYPTIAN HIEROGLYPH S029;Lo;0;L;;;;;N;;;;;\n132F5;EGYPTIAN HIEROGLYPH S030;Lo;0;L;;;;;N;;;;;\n132F6;EGYPTIAN HIEROGLYPH S031;Lo;0;L;;;;;N;;;;;\n132F7;EGYPTIAN HIEROGLYPH S032;Lo;0;L;;;;;N;;;;;\n132F8;EGYPTIAN HIEROGLYPH S033;Lo;0;L;;;;;N;;;;;\n132F9;EGYPTIAN HIEROGLYPH S034;Lo;0;L;;;;;N;;;;;\n132FA;EGYPTIAN HIEROGLYPH S035;Lo;0;L;;;;;N;;;;;\n132FB;EGYPTIAN HIEROGLYPH S035A;Lo;0;L;;;;;N;;;;;\n132FC;EGYPTIAN HIEROGLYPH S036;Lo;0;L;;;;;N;;;;;\n132FD;EGYPTIAN HIEROGLYPH S037;Lo;0;L;;;;;N;;;;;\n132FE;EGYPTIAN HIEROGLYPH S038;Lo;0;L;;;;;N;;;;;\n132FF;EGYPTIAN HIEROGLYPH S039;Lo;0;L;;;;;N;;;;;\n13300;EGYPTIAN HIEROGLYPH S040;Lo;0;L;;;;;N;;;;;\n13301;EGYPTIAN HIEROGLYPH S041;Lo;0;L;;;;;N;;;;;\n13302;EGYPTIAN HIEROGLYPH S042;Lo;0;L;;;;;N;;;;;\n13303;EGYPTIAN HIEROGLYPH S043;Lo;0;L;;;;;N;;;;;\n13304;EGYPTIAN HIEROGLYPH S044;Lo;0;L;;;;;N;;;;;\n13305;EGYPTIAN HIEROGLYPH S045;Lo;0;L;;;;;N;;;;;\n13306;EGYPTIAN HIEROGLYPH S046;Lo;0;L;;;;;N;;;;;\n13307;EGYPTIAN HIEROGLYPH T001;Lo;0;L;;;;;N;;;;;\n13308;EGYPTIAN HIEROGLYPH T002;Lo;0;L;;;;;N;;;;;\n13309;EGYPTIAN HIEROGLYPH T003;Lo;0;L;;;;;N;;;;;\n1330A;EGYPTIAN HIEROGLYPH T003A;Lo;0;L;;;;;N;;;;;\n1330B;EGYPTIAN HIEROGLYPH T004;Lo;0;L;;;;;N;;;;;\n1330C;EGYPTIAN HIEROGLYPH T005;Lo;0;L;;;;;N;;;;;\n1330D;EGYPTIAN HIEROGLYPH T006;Lo;0;L;;;;;N;;;;;\n1330E;EGYPTIAN HIEROGLYPH T007;Lo;0;L;;;;;N;;;;;\n1330F;EGYPTIAN HIEROGLYPH T007A;Lo;0;L;;;;;N;;;;;\n13310;EGYPTIAN HIEROGLYPH T008;Lo;0;L;;;;;N;;;;;\n13311;EGYPTIAN HIEROGLYPH T008A;Lo;0;L;;;;;N;;;;;\n13312;EGYPTIAN HIEROGLYPH T009;Lo;0;L;;;;;N;;;;;\n13313;EGYPTIAN HIEROGLYPH T009A;Lo;0;L;;;;;N;;;;;\n13314;EGYPTIAN HIEROGLYPH T010;Lo;0;L;;;;;N;;;;;\n13315;EGYPTIAN HIEROGLYPH T011;Lo;0;L;;;;;N;;;;;\n13316;EGYPTIAN HIEROGLYPH T011A;Lo;0;L;;;;;N;;;;;\n13317;EGYPTIAN HIEROGLYPH T012;Lo;0;L;;;;;N;;;;;\n13318;EGYPTIAN HIEROGLYPH T013;Lo;0;L;;;;;N;;;;;\n13319;EGYPTIAN HIEROGLYPH T014;Lo;0;L;;;;;N;;;;;\n1331A;EGYPTIAN HIEROGLYPH T015;Lo;0;L;;;;;N;;;;;\n1331B;EGYPTIAN HIEROGLYPH T016;Lo;0;L;;;;;N;;;;;\n1331C;EGYPTIAN HIEROGLYPH T016A;Lo;0;L;;;;;N;;;;;\n1331D;EGYPTIAN HIEROGLYPH T017;Lo;0;L;;;;;N;;;;;\n1331E;EGYPTIAN HIEROGLYPH T018;Lo;0;L;;;;;N;;;;;\n1331F;EGYPTIAN HIEROGLYPH T019;Lo;0;L;;;;;N;;;;;\n13320;EGYPTIAN HIEROGLYPH T020;Lo;0;L;;;;;N;;;;;\n13321;EGYPTIAN HIEROGLYPH T021;Lo;0;L;;;;;N;;;;;\n13322;EGYPTIAN HIEROGLYPH T022;Lo;0;L;;;;;N;;;;;\n13323;EGYPTIAN HIEROGLYPH T023;Lo;0;L;;;;;N;;;;;\n13324;EGYPTIAN HIEROGLYPH T024;Lo;0;L;;;;;N;;;;;\n13325;EGYPTIAN HIEROGLYPH T025;Lo;0;L;;;;;N;;;;;\n13326;EGYPTIAN HIEROGLYPH T026;Lo;0;L;;;;;N;;;;;\n13327;EGYPTIAN HIEROGLYPH T027;Lo;0;L;;;;;N;;;;;\n13328;EGYPTIAN HIEROGLYPH T028;Lo;0;L;;;;;N;;;;;\n13329;EGYPTIAN HIEROGLYPH T029;Lo;0;L;;;;;N;;;;;\n1332A;EGYPTIAN HIEROGLYPH T030;Lo;0;L;;;;;N;;;;;\n1332B;EGYPTIAN HIEROGLYPH T031;Lo;0;L;;;;;N;;;;;\n1332C;EGYPTIAN HIEROGLYPH T032;Lo;0;L;;;;;N;;;;;\n1332D;EGYPTIAN HIEROGLYPH T032A;Lo;0;L;;;;;N;;;;;\n1332E;EGYPTIAN HIEROGLYPH T033;Lo;0;L;;;;;N;;;;;\n1332F;EGYPTIAN HIEROGLYPH T033A;Lo;0;L;;;;;N;;;;;\n13330;EGYPTIAN HIEROGLYPH T034;Lo;0;L;;;;;N;;;;;\n13331;EGYPTIAN HIEROGLYPH T035;Lo;0;L;;;;;N;;;;;\n13332;EGYPTIAN HIEROGLYPH T036;Lo;0;L;;;;;N;;;;;\n13333;EGYPTIAN HIEROGLYPH U001;Lo;0;L;;;;;N;;;;;\n13334;EGYPTIAN HIEROGLYPH U002;Lo;0;L;;;;;N;;;;;\n13335;EGYPTIAN HIEROGLYPH U003;Lo;0;L;;;;;N;;;;;\n13336;EGYPTIAN HIEROGLYPH U004;Lo;0;L;;;;;N;;;;;\n13337;EGYPTIAN HIEROGLYPH U005;Lo;0;L;;;;;N;;;;;\n13338;EGYPTIAN HIEROGLYPH U006;Lo;0;L;;;;;N;;;;;\n13339;EGYPTIAN HIEROGLYPH U006A;Lo;0;L;;;;;N;;;;;\n1333A;EGYPTIAN HIEROGLYPH U006B;Lo;0;L;;;;;N;;;;;\n1333B;EGYPTIAN HIEROGLYPH U007;Lo;0;L;;;;;N;;;;;\n1333C;EGYPTIAN HIEROGLYPH U008;Lo;0;L;;;;;N;;;;;\n1333D;EGYPTIAN HIEROGLYPH U009;Lo;0;L;;;;;N;;;;;\n1333E;EGYPTIAN HIEROGLYPH U010;Lo;0;L;;;;;N;;;;;\n1333F;EGYPTIAN HIEROGLYPH U011;Lo;0;L;;;;;N;;;;;\n13340;EGYPTIAN HIEROGLYPH U012;Lo;0;L;;;;;N;;;;;\n13341;EGYPTIAN HIEROGLYPH U013;Lo;0;L;;;;;N;;;;;\n13342;EGYPTIAN HIEROGLYPH U014;Lo;0;L;;;;;N;;;;;\n13343;EGYPTIAN HIEROGLYPH U015;Lo;0;L;;;;;N;;;;;\n13344;EGYPTIAN HIEROGLYPH U016;Lo;0;L;;;;;N;;;;;\n13345;EGYPTIAN HIEROGLYPH U017;Lo;0;L;;;;;N;;;;;\n13346;EGYPTIAN HIEROGLYPH U018;Lo;0;L;;;;;N;;;;;\n13347;EGYPTIAN HIEROGLYPH U019;Lo;0;L;;;;;N;;;;;\n13348;EGYPTIAN HIEROGLYPH U020;Lo;0;L;;;;;N;;;;;\n13349;EGYPTIAN HIEROGLYPH U021;Lo;0;L;;;;;N;;;;;\n1334A;EGYPTIAN HIEROGLYPH U022;Lo;0;L;;;;;N;;;;;\n1334B;EGYPTIAN HIEROGLYPH U023;Lo;0;L;;;;;N;;;;;\n1334C;EGYPTIAN HIEROGLYPH U023A;Lo;0;L;;;;;N;;;;;\n1334D;EGYPTIAN HIEROGLYPH U024;Lo;0;L;;;;;N;;;;;\n1334E;EGYPTIAN HIEROGLYPH U025;Lo;0;L;;;;;N;;;;;\n1334F;EGYPTIAN HIEROGLYPH U026;Lo;0;L;;;;;N;;;;;\n13350;EGYPTIAN HIEROGLYPH U027;Lo;0;L;;;;;N;;;;;\n13351;EGYPTIAN HIEROGLYPH U028;Lo;0;L;;;;;N;;;;;\n13352;EGYPTIAN HIEROGLYPH U029;Lo;0;L;;;;;N;;;;;\n13353;EGYPTIAN HIEROGLYPH U029A;Lo;0;L;;;;;N;;;;;\n13354;EGYPTIAN HIEROGLYPH U030;Lo;0;L;;;;;N;;;;;\n13355;EGYPTIAN HIEROGLYPH U031;Lo;0;L;;;;;N;;;;;\n13356;EGYPTIAN HIEROGLYPH U032;Lo;0;L;;;;;N;;;;;\n13357;EGYPTIAN HIEROGLYPH U032A;Lo;0;L;;;;;N;;;;;\n13358;EGYPTIAN HIEROGLYPH U033;Lo;0;L;;;;;N;;;;;\n13359;EGYPTIAN HIEROGLYPH U034;Lo;0;L;;;;;N;;;;;\n1335A;EGYPTIAN HIEROGLYPH U035;Lo;0;L;;;;;N;;;;;\n1335B;EGYPTIAN HIEROGLYPH U036;Lo;0;L;;;;;N;;;;;\n1335C;EGYPTIAN HIEROGLYPH U037;Lo;0;L;;;;;N;;;;;\n1335D;EGYPTIAN HIEROGLYPH U038;Lo;0;L;;;;;N;;;;;\n1335E;EGYPTIAN HIEROGLYPH U039;Lo;0;L;;;;;N;;;;;\n1335F;EGYPTIAN HIEROGLYPH U040;Lo;0;L;;;;;N;;;;;\n13360;EGYPTIAN HIEROGLYPH U041;Lo;0;L;;;;;N;;;;;\n13361;EGYPTIAN HIEROGLYPH U042;Lo;0;L;;;;;N;;;;;\n13362;EGYPTIAN HIEROGLYPH V001;Lo;0;L;;;;;N;;;;;\n13363;EGYPTIAN HIEROGLYPH V001A;Lo;0;L;;;;;N;;;;;\n13364;EGYPTIAN HIEROGLYPH V001B;Lo;0;L;;;;;N;;;;;\n13365;EGYPTIAN HIEROGLYPH V001C;Lo;0;L;;;;;N;;;;;\n13366;EGYPTIAN HIEROGLYPH V001D;Lo;0;L;;;;;N;;;;;\n13367;EGYPTIAN HIEROGLYPH V001E;Lo;0;L;;;;;N;;;;;\n13368;EGYPTIAN HIEROGLYPH V001F;Lo;0;L;;;;;N;;;;;\n13369;EGYPTIAN HIEROGLYPH V001G;Lo;0;L;;;;;N;;;;;\n1336A;EGYPTIAN HIEROGLYPH V001H;Lo;0;L;;;;;N;;;;;\n1336B;EGYPTIAN HIEROGLYPH V001I;Lo;0;L;;;;;N;;;;;\n1336C;EGYPTIAN HIEROGLYPH V002;Lo;0;L;;;;;N;;;;;\n1336D;EGYPTIAN HIEROGLYPH V002A;Lo;0;L;;;;;N;;;;;\n1336E;EGYPTIAN HIEROGLYPH V003;Lo;0;L;;;;;N;;;;;\n1336F;EGYPTIAN HIEROGLYPH V004;Lo;0;L;;;;;N;;;;;\n13370;EGYPTIAN HIEROGLYPH V005;Lo;0;L;;;;;N;;;;;\n13371;EGYPTIAN HIEROGLYPH V006;Lo;0;L;;;;;N;;;;;\n13372;EGYPTIAN HIEROGLYPH V007;Lo;0;L;;;;;N;;;;;\n13373;EGYPTIAN HIEROGLYPH V007A;Lo;0;L;;;;;N;;;;;\n13374;EGYPTIAN HIEROGLYPH V007B;Lo;0;L;;;;;N;;;;;\n13375;EGYPTIAN HIEROGLYPH V008;Lo;0;L;;;;;N;;;;;\n13376;EGYPTIAN HIEROGLYPH V009;Lo;0;L;;;;;N;;;;;\n13377;EGYPTIAN HIEROGLYPH V010;Lo;0;L;;;;;N;;;;;\n13378;EGYPTIAN HIEROGLYPH V011;Lo;0;L;;;;;N;;;;;\n13379;EGYPTIAN HIEROGLYPH V011A;Lo;0;L;;;;;N;;;;;\n1337A;EGYPTIAN HIEROGLYPH V011B;Lo;0;L;;;;;N;;;;;\n1337B;EGYPTIAN HIEROGLYPH V011C;Lo;0;L;;;;;N;;;;;\n1337C;EGYPTIAN HIEROGLYPH V012;Lo;0;L;;;;;N;;;;;\n1337D;EGYPTIAN HIEROGLYPH V012A;Lo;0;L;;;;;N;;;;;\n1337E;EGYPTIAN HIEROGLYPH V012B;Lo;0;L;;;;;N;;;;;\n1337F;EGYPTIAN HIEROGLYPH V013;Lo;0;L;;;;;N;;;;;\n13380;EGYPTIAN HIEROGLYPH V014;Lo;0;L;;;;;N;;;;;\n13381;EGYPTIAN HIEROGLYPH V015;Lo;0;L;;;;;N;;;;;\n13382;EGYPTIAN HIEROGLYPH V016;Lo;0;L;;;;;N;;;;;\n13383;EGYPTIAN HIEROGLYPH V017;Lo;0;L;;;;;N;;;;;\n13384;EGYPTIAN HIEROGLYPH V018;Lo;0;L;;;;;N;;;;;\n13385;EGYPTIAN HIEROGLYPH V019;Lo;0;L;;;;;N;;;;;\n13386;EGYPTIAN HIEROGLYPH V020;Lo;0;L;;;;;N;;;;;\n13387;EGYPTIAN HIEROGLYPH V020A;Lo;0;L;;;;;N;;;;;\n13388;EGYPTIAN HIEROGLYPH V020B;Lo;0;L;;;;;N;;;;;\n13389;EGYPTIAN HIEROGLYPH V020C;Lo;0;L;;;;;N;;;;;\n1338A;EGYPTIAN HIEROGLYPH V020D;Lo;0;L;;;;;N;;;;;\n1338B;EGYPTIAN HIEROGLYPH V020E;Lo;0;L;;;;;N;;;;;\n1338C;EGYPTIAN HIEROGLYPH V020F;Lo;0;L;;;;;N;;;;;\n1338D;EGYPTIAN HIEROGLYPH V020G;Lo;0;L;;;;;N;;;;;\n1338E;EGYPTIAN HIEROGLYPH V020H;Lo;0;L;;;;;N;;;;;\n1338F;EGYPTIAN HIEROGLYPH V020I;Lo;0;L;;;;;N;;;;;\n13390;EGYPTIAN HIEROGLYPH V020J;Lo;0;L;;;;;N;;;;;\n13391;EGYPTIAN HIEROGLYPH V020K;Lo;0;L;;;;;N;;;;;\n13392;EGYPTIAN HIEROGLYPH V020L;Lo;0;L;;;;;N;;;;;\n13393;EGYPTIAN HIEROGLYPH V021;Lo;0;L;;;;;N;;;;;\n13394;EGYPTIAN HIEROGLYPH V022;Lo;0;L;;;;;N;;;;;\n13395;EGYPTIAN HIEROGLYPH V023;Lo;0;L;;;;;N;;;;;\n13396;EGYPTIAN HIEROGLYPH V023A;Lo;0;L;;;;;N;;;;;\n13397;EGYPTIAN HIEROGLYPH V024;Lo;0;L;;;;;N;;;;;\n13398;EGYPTIAN HIEROGLYPH V025;Lo;0;L;;;;;N;;;;;\n13399;EGYPTIAN HIEROGLYPH V026;Lo;0;L;;;;;N;;;;;\n1339A;EGYPTIAN HIEROGLYPH V027;Lo;0;L;;;;;N;;;;;\n1339B;EGYPTIAN HIEROGLYPH V028;Lo;0;L;;;;;N;;;;;\n1339C;EGYPTIAN HIEROGLYPH V028A;Lo;0;L;;;;;N;;;;;\n1339D;EGYPTIAN HIEROGLYPH V029;Lo;0;L;;;;;N;;;;;\n1339E;EGYPTIAN HIEROGLYPH V029A;Lo;0;L;;;;;N;;;;;\n1339F;EGYPTIAN HIEROGLYPH V030;Lo;0;L;;;;;N;;;;;\n133A0;EGYPTIAN HIEROGLYPH V030A;Lo;0;L;;;;;N;;;;;\n133A1;EGYPTIAN HIEROGLYPH V031;Lo;0;L;;;;;N;;;;;\n133A2;EGYPTIAN HIEROGLYPH V031A;Lo;0;L;;;;;N;;;;;\n133A3;EGYPTIAN HIEROGLYPH V032;Lo;0;L;;;;;N;;;;;\n133A4;EGYPTIAN HIEROGLYPH V033;Lo;0;L;;;;;N;;;;;\n133A5;EGYPTIAN HIEROGLYPH V033A;Lo;0;L;;;;;N;;;;;\n133A6;EGYPTIAN HIEROGLYPH V034;Lo;0;L;;;;;N;;;;;\n133A7;EGYPTIAN HIEROGLYPH V035;Lo;0;L;;;;;N;;;;;\n133A8;EGYPTIAN HIEROGLYPH V036;Lo;0;L;;;;;N;;;;;\n133A9;EGYPTIAN HIEROGLYPH V037;Lo;0;L;;;;;N;;;;;\n133AA;EGYPTIAN HIEROGLYPH V037A;Lo;0;L;;;;;N;;;;;\n133AB;EGYPTIAN HIEROGLYPH V038;Lo;0;L;;;;;N;;;;;\n133AC;EGYPTIAN HIEROGLYPH V039;Lo;0;L;;;;;N;;;;;\n133AD;EGYPTIAN HIEROGLYPH V040;Lo;0;L;;;;;N;;;;;\n133AE;EGYPTIAN HIEROGLYPH V040A;Lo;0;L;;;;;N;;;;;\n133AF;EGYPTIAN HIEROGLYPH W001;Lo;0;L;;;;;N;;;;;\n133B0;EGYPTIAN HIEROGLYPH W002;Lo;0;L;;;;;N;;;;;\n133B1;EGYPTIAN HIEROGLYPH W003;Lo;0;L;;;;;N;;;;;\n133B2;EGYPTIAN HIEROGLYPH W003A;Lo;0;L;;;;;N;;;;;\n133B3;EGYPTIAN HIEROGLYPH W004;Lo;0;L;;;;;N;;;;;\n133B4;EGYPTIAN HIEROGLYPH W005;Lo;0;L;;;;;N;;;;;\n133B5;EGYPTIAN HIEROGLYPH W006;Lo;0;L;;;;;N;;;;;\n133B6;EGYPTIAN HIEROGLYPH W007;Lo;0;L;;;;;N;;;;;\n133B7;EGYPTIAN HIEROGLYPH W008;Lo;0;L;;;;;N;;;;;\n133B8;EGYPTIAN HIEROGLYPH W009;Lo;0;L;;;;;N;;;;;\n133B9;EGYPTIAN HIEROGLYPH W009A;Lo;0;L;;;;;N;;;;;\n133BA;EGYPTIAN HIEROGLYPH W010;Lo;0;L;;;;;N;;;;;\n133BB;EGYPTIAN HIEROGLYPH W010A;Lo;0;L;;;;;N;;;;;\n133BC;EGYPTIAN HIEROGLYPH W011;Lo;0;L;;;;;N;;;;;\n133BD;EGYPTIAN HIEROGLYPH W012;Lo;0;L;;;;;N;;;;;\n133BE;EGYPTIAN HIEROGLYPH W013;Lo;0;L;;;;;N;;;;;\n133BF;EGYPTIAN HIEROGLYPH W014;Lo;0;L;;;;;N;;;;;\n133C0;EGYPTIAN HIEROGLYPH W014A;Lo;0;L;;;;;N;;;;;\n133C1;EGYPTIAN HIEROGLYPH W015;Lo;0;L;;;;;N;;;;;\n133C2;EGYPTIAN HIEROGLYPH W016;Lo;0;L;;;;;N;;;;;\n133C3;EGYPTIAN HIEROGLYPH W017;Lo;0;L;;;;;N;;;;;\n133C4;EGYPTIAN HIEROGLYPH W017A;Lo;0;L;;;;;N;;;;;\n133C5;EGYPTIAN HIEROGLYPH W018;Lo;0;L;;;;;N;;;;;\n133C6;EGYPTIAN HIEROGLYPH W018A;Lo;0;L;;;;;N;;;;;\n133C7;EGYPTIAN HIEROGLYPH W019;Lo;0;L;;;;;N;;;;;\n133C8;EGYPTIAN HIEROGLYPH W020;Lo;0;L;;;;;N;;;;;\n133C9;EGYPTIAN HIEROGLYPH W021;Lo;0;L;;;;;N;;;;;\n133CA;EGYPTIAN HIEROGLYPH W022;Lo;0;L;;;;;N;;;;;\n133CB;EGYPTIAN HIEROGLYPH W023;Lo;0;L;;;;;N;;;;;\n133CC;EGYPTIAN HIEROGLYPH W024;Lo;0;L;;;;;N;;;;;\n133CD;EGYPTIAN HIEROGLYPH W024A;Lo;0;L;;;;;N;;;;;\n133CE;EGYPTIAN HIEROGLYPH W025;Lo;0;L;;;;;N;;;;;\n133CF;EGYPTIAN HIEROGLYPH X001;Lo;0;L;;;;;N;;;;;\n133D0;EGYPTIAN HIEROGLYPH X002;Lo;0;L;;;;;N;;;;;\n133D1;EGYPTIAN HIEROGLYPH X003;Lo;0;L;;;;;N;;;;;\n133D2;EGYPTIAN HIEROGLYPH X004;Lo;0;L;;;;;N;;;;;\n133D3;EGYPTIAN HIEROGLYPH X004A;Lo;0;L;;;;;N;;;;;\n133D4;EGYPTIAN HIEROGLYPH X004B;Lo;0;L;;;;;N;;;;;\n133D5;EGYPTIAN HIEROGLYPH X005;Lo;0;L;;;;;N;;;;;\n133D6;EGYPTIAN HIEROGLYPH X006;Lo;0;L;;;;;N;;;;;\n133D7;EGYPTIAN HIEROGLYPH X006A;Lo;0;L;;;;;N;;;;;\n133D8;EGYPTIAN HIEROGLYPH X007;Lo;0;L;;;;;N;;;;;\n133D9;EGYPTIAN HIEROGLYPH X008;Lo;0;L;;;;;N;;;;;\n133DA;EGYPTIAN HIEROGLYPH X008A;Lo;0;L;;;;;N;;;;;\n133DB;EGYPTIAN HIEROGLYPH Y001;Lo;0;L;;;;;N;;;;;\n133DC;EGYPTIAN HIEROGLYPH Y001A;Lo;0;L;;;;;N;;;;;\n133DD;EGYPTIAN HIEROGLYPH Y002;Lo;0;L;;;;;N;;;;;\n133DE;EGYPTIAN HIEROGLYPH Y003;Lo;0;L;;;;;N;;;;;\n133DF;EGYPTIAN HIEROGLYPH Y004;Lo;0;L;;;;;N;;;;;\n133E0;EGYPTIAN HIEROGLYPH Y005;Lo;0;L;;;;;N;;;;;\n133E1;EGYPTIAN HIEROGLYPH Y006;Lo;0;L;;;;;N;;;;;\n133E2;EGYPTIAN HIEROGLYPH Y007;Lo;0;L;;;;;N;;;;;\n133E3;EGYPTIAN HIEROGLYPH Y008;Lo;0;L;;;;;N;;;;;\n133E4;EGYPTIAN HIEROGLYPH Z001;Lo;0;L;;;;;N;;;;;\n133E5;EGYPTIAN HIEROGLYPH Z002;Lo;0;L;;;;;N;;;;;\n133E6;EGYPTIAN HIEROGLYPH Z002A;Lo;0;L;;;;;N;;;;;\n133E7;EGYPTIAN HIEROGLYPH Z002B;Lo;0;L;;;;;N;;;;;\n133E8;EGYPTIAN HIEROGLYPH Z002C;Lo;0;L;;;;;N;;;;;\n133E9;EGYPTIAN HIEROGLYPH Z002D;Lo;0;L;;;;;N;;;;;\n133EA;EGYPTIAN HIEROGLYPH Z003;Lo;0;L;;;;;N;;;;;\n133EB;EGYPTIAN HIEROGLYPH Z003A;Lo;0;L;;;;;N;;;;;\n133EC;EGYPTIAN HIEROGLYPH Z003B;Lo;0;L;;;;;N;;;;;\n133ED;EGYPTIAN HIEROGLYPH Z004;Lo;0;L;;;;;N;;;;;\n133EE;EGYPTIAN HIEROGLYPH Z004A;Lo;0;L;;;;;N;;;;;\n133EF;EGYPTIAN HIEROGLYPH Z005;Lo;0;L;;;;;N;;;;;\n133F0;EGYPTIAN HIEROGLYPH Z005A;Lo;0;L;;;;;N;;;;;\n133F1;EGYPTIAN HIEROGLYPH Z006;Lo;0;L;;;;;N;;;;;\n133F2;EGYPTIAN HIEROGLYPH Z007;Lo;0;L;;;;;N;;;;;\n133F3;EGYPTIAN HIEROGLYPH Z008;Lo;0;L;;;;;N;;;;;\n133F4;EGYPTIAN HIEROGLYPH Z009;Lo;0;L;;;;;N;;;;;\n133F5;EGYPTIAN HIEROGLYPH Z010;Lo;0;L;;;;;N;;;;;\n133F6;EGYPTIAN HIEROGLYPH Z011;Lo;0;L;;;;;N;;;;;\n133F7;EGYPTIAN HIEROGLYPH Z012;Lo;0;L;;;;;N;;;;;\n133F8;EGYPTIAN HIEROGLYPH Z013;Lo;0;L;;;;;N;;;;;\n133F9;EGYPTIAN HIEROGLYPH Z014;Lo;0;L;;;;;N;;;;;\n133FA;EGYPTIAN HIEROGLYPH Z015;Lo;0;L;;;;;N;;;;;\n133FB;EGYPTIAN HIEROGLYPH Z015A;Lo;0;L;;;;;N;;;;;\n133FC;EGYPTIAN HIEROGLYPH Z015B;Lo;0;L;;;;;N;;;;;\n133FD;EGYPTIAN HIEROGLYPH Z015C;Lo;0;L;;;;;N;;;;;\n133FE;EGYPTIAN HIEROGLYPH Z015D;Lo;0;L;;;;;N;;;;;\n133FF;EGYPTIAN HIEROGLYPH Z015E;Lo;0;L;;;;;N;;;;;\n13400;EGYPTIAN HIEROGLYPH Z015F;Lo;0;L;;;;;N;;;;;\n13401;EGYPTIAN HIEROGLYPH Z015G;Lo;0;L;;;;;N;;;;;\n13402;EGYPTIAN HIEROGLYPH Z015H;Lo;0;L;;;;;N;;;;;\n13403;EGYPTIAN HIEROGLYPH Z015I;Lo;0;L;;;;;N;;;;;\n13404;EGYPTIAN HIEROGLYPH Z016;Lo;0;L;;;;;N;;;;;\n13405;EGYPTIAN HIEROGLYPH Z016A;Lo;0;L;;;;;N;;;;;\n13406;EGYPTIAN HIEROGLYPH Z016B;Lo;0;L;;;;;N;;;;;\n13407;EGYPTIAN HIEROGLYPH Z016C;Lo;0;L;;;;;N;;;;;\n13408;EGYPTIAN HIEROGLYPH Z016D;Lo;0;L;;;;;N;;;;;\n13409;EGYPTIAN HIEROGLYPH Z016E;Lo;0;L;;;;;N;;;;;\n1340A;EGYPTIAN HIEROGLYPH Z016F;Lo;0;L;;;;;N;;;;;\n1340B;EGYPTIAN HIEROGLYPH Z016G;Lo;0;L;;;;;N;;;;;\n1340C;EGYPTIAN HIEROGLYPH Z016H;Lo;0;L;;;;;N;;;;;\n1340D;EGYPTIAN HIEROGLYPH AA001;Lo;0;L;;;;;N;;;;;\n1340E;EGYPTIAN HIEROGLYPH AA002;Lo;0;L;;;;;N;;;;;\n1340F;EGYPTIAN HIEROGLYPH AA003;Lo;0;L;;;;;N;;;;;\n13410;EGYPTIAN HIEROGLYPH AA004;Lo;0;L;;;;;N;;;;;\n13411;EGYPTIAN HIEROGLYPH AA005;Lo;0;L;;;;;N;;;;;\n13412;EGYPTIAN HIEROGLYPH AA006;Lo;0;L;;;;;N;;;;;\n13413;EGYPTIAN HIEROGLYPH AA007;Lo;0;L;;;;;N;;;;;\n13414;EGYPTIAN HIEROGLYPH AA007A;Lo;0;L;;;;;N;;;;;\n13415;EGYPTIAN HIEROGLYPH AA007B;Lo;0;L;;;;;N;;;;;\n13416;EGYPTIAN HIEROGLYPH AA008;Lo;0;L;;;;;N;;;;;\n13417;EGYPTIAN HIEROGLYPH AA009;Lo;0;L;;;;;N;;;;;\n13418;EGYPTIAN HIEROGLYPH AA010;Lo;0;L;;;;;N;;;;;\n13419;EGYPTIAN HIEROGLYPH AA011;Lo;0;L;;;;;N;;;;;\n1341A;EGYPTIAN HIEROGLYPH AA012;Lo;0;L;;;;;N;;;;;\n1341B;EGYPTIAN HIEROGLYPH AA013;Lo;0;L;;;;;N;;;;;\n1341C;EGYPTIAN HIEROGLYPH AA014;Lo;0;L;;;;;N;;;;;\n1341D;EGYPTIAN HIEROGLYPH AA015;Lo;0;L;;;;;N;;;;;\n1341E;EGYPTIAN HIEROGLYPH AA016;Lo;0;L;;;;;N;;;;;\n1341F;EGYPTIAN HIEROGLYPH AA017;Lo;0;L;;;;;N;;;;;\n13420;EGYPTIAN HIEROGLYPH AA018;Lo;0;L;;;;;N;;;;;\n13421;EGYPTIAN HIEROGLYPH AA019;Lo;0;L;;;;;N;;;;;\n13422;EGYPTIAN HIEROGLYPH AA020;Lo;0;L;;;;;N;;;;;\n13423;EGYPTIAN HIEROGLYPH AA021;Lo;0;L;;;;;N;;;;;\n13424;EGYPTIAN HIEROGLYPH AA022;Lo;0;L;;;;;N;;;;;\n13425;EGYPTIAN HIEROGLYPH AA023;Lo;0;L;;;;;N;;;;;\n13426;EGYPTIAN HIEROGLYPH AA024;Lo;0;L;;;;;N;;;;;\n13427;EGYPTIAN HIEROGLYPH AA025;Lo;0;L;;;;;N;;;;;\n13428;EGYPTIAN HIEROGLYPH AA026;Lo;0;L;;;;;N;;;;;\n13429;EGYPTIAN HIEROGLYPH AA027;Lo;0;L;;;;;N;;;;;\n1342A;EGYPTIAN HIEROGLYPH AA028;Lo;0;L;;;;;N;;;;;\n1342B;EGYPTIAN HIEROGLYPH AA029;Lo;0;L;;;;;N;;;;;\n1342C;EGYPTIAN HIEROGLYPH AA030;Lo;0;L;;;;;N;;;;;\n1342D;EGYPTIAN HIEROGLYPH AA031;Lo;0;L;;;;;N;;;;;\n1342E;EGYPTIAN HIEROGLYPH AA032;Lo;0;L;;;;;N;;;;;\n1342F;EGYPTIAN HIEROGLYPH V011D;Lo;0;L;;;;;N;;;;;\n13430;EGYPTIAN HIEROGLYPH VERTICAL JOINER;Cf;0;L;;;;;N;;;;;\n13431;EGYPTIAN HIEROGLYPH HORIZONTAL JOINER;Cf;0;L;;;;;N;;;;;\n13432;EGYPTIAN HIEROGLYPH INSERT AT TOP START;Cf;0;L;;;;;N;;;;;\n13433;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM START;Cf;0;L;;;;;N;;;;;\n13434;EGYPTIAN HIEROGLYPH INSERT AT TOP END;Cf;0;L;;;;;N;;;;;\n13435;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM END;Cf;0;L;;;;;N;;;;;\n13436;EGYPTIAN HIEROGLYPH OVERLAY MIDDLE;Cf;0;L;;;;;N;;;;;\n13437;EGYPTIAN HIEROGLYPH BEGIN SEGMENT;Cf;0;L;;;;;N;;;;;\n13438;EGYPTIAN HIEROGLYPH END SEGMENT;Cf;0;L;;;;;N;;;;;\n13439;EGYPTIAN HIEROGLYPH INSERT AT MIDDLE;Cf;0;L;;;;;N;;;;;\n1343A;EGYPTIAN HIEROGLYPH INSERT AT TOP;Cf;0;L;;;;;N;;;;;\n1343B;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM;Cf;0;L;;;;;N;;;;;\n1343C;EGYPTIAN HIEROGLYPH BEGIN ENCLOSURE;Cf;0;L;;;;;N;;;;;\n1343D;EGYPTIAN HIEROGLYPH END ENCLOSURE;Cf;0;L;;;;;N;;;;;\n1343E;EGYPTIAN HIEROGLYPH BEGIN WALLED ENCLOSURE;Cf;0;L;;;;;N;;;;;\n1343F;EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE;Cf;0;L;;;;;N;;;;;\n13440;EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY;Mn;0;NSM;;;;;N;;;;;\n13441;EGYPTIAN HIEROGLYPH FULL BLANK;Lo;0;L;;;;;N;;;;;\n13442;EGYPTIAN HIEROGLYPH HALF BLANK;Lo;0;L;;;;;N;;;;;\n13443;EGYPTIAN HIEROGLYPH LOST SIGN;Lo;0;L;;;;;N;;;;;\n13444;EGYPTIAN HIEROGLYPH HALF LOST SIGN;Lo;0;L;;;;;N;;;;;\n13445;EGYPTIAN HIEROGLYPH TALL LOST SIGN;Lo;0;L;;;;;N;;;;;\n13446;EGYPTIAN HIEROGLYPH WIDE LOST SIGN;Lo;0;L;;;;;N;;;;;\n13447;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START;Mn;0;NSM;;;;;N;;;;;\n13448;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START;Mn;0;NSM;;;;;N;;;;;\n13449;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START;Mn;0;NSM;;;;;N;;;;;\n1344A;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP END;Mn;0;NSM;;;;;N;;;;;\n1344B;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP;Mn;0;NSM;;;;;N;;;;;\n1344C;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START AND TOP END;Mn;0;NSM;;;;;N;;;;;\n1344D;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND TOP;Mn;0;NSM;;;;;N;;;;;\n1344E;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM END;Mn;0;NSM;;;;;N;;;;;\n1344F;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START AND BOTTOM END;Mn;0;NSM;;;;;N;;;;;\n13450;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM;Mn;0;NSM;;;;;N;;;;;\n13451;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND BOTTOM;Mn;0;NSM;;;;;N;;;;;\n13452;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT END;Mn;0;NSM;;;;;N;;;;;\n13453;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP AND END;Mn;0;NSM;;;;;N;;;;;\n13454;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM AND END;Mn;0;NSM;;;;;N;;;;;\n13455;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED;Mn;0;NSM;;;;;N;;;;;\n13460;EGYPTIAN HIEROGLYPH-13460;Lo;0;L;;;;;N;;;;;\n13461;EGYPTIAN HIEROGLYPH-13461;Lo;0;L;;;;;N;;;;;\n13462;EGYPTIAN HIEROGLYPH-13462;Lo;0;L;;;;;N;;;;;\n13463;EGYPTIAN HIEROGLYPH-13463;Lo;0;L;;;;;N;;;;;\n13464;EGYPTIAN HIEROGLYPH-13464;Lo;0;L;;;;;N;;;;;\n13465;EGYPTIAN HIEROGLYPH-13465;Lo;0;L;;;;;N;;;;;\n13466;EGYPTIAN HIEROGLYPH-13466;Lo;0;L;;;;;N;;;;;\n13467;EGYPTIAN HIEROGLYPH-13467;Lo;0;L;;;;;N;;;;;\n13468;EGYPTIAN HIEROGLYPH-13468;Lo;0;L;;;;;N;;;;;\n13469;EGYPTIAN HIEROGLYPH-13469;Lo;0;L;;;;;N;;;;;\n1346A;EGYPTIAN HIEROGLYPH-1346A;Lo;0;L;;;;;N;;;;;\n1346B;EGYPTIAN HIEROGLYPH-1346B;Lo;0;L;;;;;N;;;;;\n1346C;EGYPTIAN HIEROGLYPH-1346C;Lo;0;L;;;;;N;;;;;\n1346D;EGYPTIAN HIEROGLYPH-1346D;Lo;0;L;;;;;N;;;;;\n1346E;EGYPTIAN HIEROGLYPH-1346E;Lo;0;L;;;;;N;;;;;\n1346F;EGYPTIAN HIEROGLYPH-1346F;Lo;0;L;;;;;N;;;;;\n13470;EGYPTIAN HIEROGLYPH-13470;Lo;0;L;;;;;N;;;;;\n13471;EGYPTIAN HIEROGLYPH-13471;Lo;0;L;;;;;N;;;;;\n13472;EGYPTIAN HIEROGLYPH-13472;Lo;0;L;;;;;N;;;;;\n13473;EGYPTIAN HIEROGLYPH-13473;Lo;0;L;;;;;N;;;;;\n13474;EGYPTIAN HIEROGLYPH-13474;Lo;0;L;;;;;N;;;;;\n13475;EGYPTIAN HIEROGLYPH-13475;Lo;0;L;;;;;N;;;;;\n13476;EGYPTIAN HIEROGLYPH-13476;Lo;0;L;;;;;N;;;;;\n13477;EGYPTIAN HIEROGLYPH-13477;Lo;0;L;;;;;N;;;;;\n13478;EGYPTIAN HIEROGLYPH-13478;Lo;0;L;;;;;N;;;;;\n13479;EGYPTIAN HIEROGLYPH-13479;Lo;0;L;;;;;N;;;;;\n1347A;EGYPTIAN HIEROGLYPH-1347A;Lo;0;L;;;;;N;;;;;\n1347B;EGYPTIAN HIEROGLYPH-1347B;Lo;0;L;;;;;N;;;;;\n1347C;EGYPTIAN HIEROGLYPH-1347C;Lo;0;L;;;;;N;;;;;\n1347D;EGYPTIAN HIEROGLYPH-1347D;Lo;0;L;;;;;N;;;;;\n1347E;EGYPTIAN HIEROGLYPH-1347E;Lo;0;L;;;;;N;;;;;\n1347F;EGYPTIAN HIEROGLYPH-1347F;Lo;0;L;;;;;N;;;;;\n13480;EGYPTIAN HIEROGLYPH-13480;Lo;0;L;;;;;N;;;;;\n13481;EGYPTIAN HIEROGLYPH-13481;Lo;0;L;;;;;N;;;;;\n13482;EGYPTIAN HIEROGLYPH-13482;Lo;0;L;;;;;N;;;;;\n13483;EGYPTIAN HIEROGLYPH-13483;Lo;0;L;;;;;N;;;;;\n13484;EGYPTIAN HIEROGLYPH-13484;Lo;0;L;;;;;N;;;;;\n13485;EGYPTIAN HIEROGLYPH-13485;Lo;0;L;;;;;N;;;;;\n13486;EGYPTIAN HIEROGLYPH-13486;Lo;0;L;;;;;N;;;;;\n13487;EGYPTIAN HIEROGLYPH-13487;Lo;0;L;;;;;N;;;;;\n13488;EGYPTIAN HIEROGLYPH-13488;Lo;0;L;;;;;N;;;;;\n13489;EGYPTIAN HIEROGLYPH-13489;Lo;0;L;;;;;N;;;;;\n1348A;EGYPTIAN HIEROGLYPH-1348A;Lo;0;L;;;;;N;;;;;\n1348B;EGYPTIAN HIEROGLYPH-1348B;Lo;0;L;;;;;N;;;;;\n1348C;EGYPTIAN HIEROGLYPH-1348C;Lo;0;L;;;;;N;;;;;\n1348D;EGYPTIAN HIEROGLYPH-1348D;Lo;0;L;;;;;N;;;;;\n1348E;EGYPTIAN HIEROGLYPH-1348E;Lo;0;L;;;;;N;;;;;\n1348F;EGYPTIAN HIEROGLYPH-1348F;Lo;0;L;;;;;N;;;;;\n13490;EGYPTIAN HIEROGLYPH-13490;Lo;0;L;;;;;N;;;;;\n13491;EGYPTIAN HIEROGLYPH-13491;Lo;0;L;;;;;N;;;;;\n13492;EGYPTIAN HIEROGLYPH-13492;Lo;0;L;;;;;N;;;;;\n13493;EGYPTIAN HIEROGLYPH-13493;Lo;0;L;;;;;N;;;;;\n13494;EGYPTIAN HIEROGLYPH-13494;Lo;0;L;;;;;N;;;;;\n13495;EGYPTIAN HIEROGLYPH-13495;Lo;0;L;;;;;N;;;;;\n13496;EGYPTIAN HIEROGLYPH-13496;Lo;0;L;;;;;N;;;;;\n13497;EGYPTIAN HIEROGLYPH-13497;Lo;0;L;;;;;N;;;;;\n13498;EGYPTIAN HIEROGLYPH-13498;Lo;0;L;;;;;N;;;;;\n13499;EGYPTIAN HIEROGLYPH-13499;Lo;0;L;;;;;N;;;;;\n1349A;EGYPTIAN HIEROGLYPH-1349A;Lo;0;L;;;;;N;;;;;\n1349B;EGYPTIAN HIEROGLYPH-1349B;Lo;0;L;;;;;N;;;;;\n1349C;EGYPTIAN HIEROGLYPH-1349C;Lo;0;L;;;;;N;;;;;\n1349D;EGYPTIAN HIEROGLYPH-1349D;Lo;0;L;;;;;N;;;;;\n1349E;EGYPTIAN HIEROGLYPH-1349E;Lo;0;L;;;;;N;;;;;\n1349F;EGYPTIAN HIEROGLYPH-1349F;Lo;0;L;;;;;N;;;;;\n134A0;EGYPTIAN HIEROGLYPH-134A0;Lo;0;L;;;;;N;;;;;\n134A1;EGYPTIAN HIEROGLYPH-134A1;Lo;0;L;;;;;N;;;;;\n134A2;EGYPTIAN HIEROGLYPH-134A2;Lo;0;L;;;;;N;;;;;\n134A3;EGYPTIAN HIEROGLYPH-134A3;Lo;0;L;;;;;N;;;;;\n134A4;EGYPTIAN HIEROGLYPH-134A4;Lo;0;L;;;;;N;;;;;\n134A5;EGYPTIAN HIEROGLYPH-134A5;Lo;0;L;;;;;N;;;;;\n134A6;EGYPTIAN HIEROGLYPH-134A6;Lo;0;L;;;;;N;;;;;\n134A7;EGYPTIAN HIEROGLYPH-134A7;Lo;0;L;;;;;N;;;;;\n134A8;EGYPTIAN HIEROGLYPH-134A8;Lo;0;L;;;;;N;;;;;\n134A9;EGYPTIAN HIEROGLYPH-134A9;Lo;0;L;;;;;N;;;;;\n134AA;EGYPTIAN HIEROGLYPH-134AA;Lo;0;L;;;;;N;;;;;\n134AB;EGYPTIAN HIEROGLYPH-134AB;Lo;0;L;;;;;N;;;;;\n134AC;EGYPTIAN HIEROGLYPH-134AC;Lo;0;L;;;;;N;;;;;\n134AD;EGYPTIAN HIEROGLYPH-134AD;Lo;0;L;;;;;N;;;;;\n134AE;EGYPTIAN HIEROGLYPH-134AE;Lo;0;L;;;;;N;;;;;\n134AF;EGYPTIAN HIEROGLYPH-134AF;Lo;0;L;;;;;N;;;;;\n134B0;EGYPTIAN HIEROGLYPH-134B0;Lo;0;L;;;;;N;;;;;\n134B1;EGYPTIAN HIEROGLYPH-134B1;Lo;0;L;;;;;N;;;;;\n134B2;EGYPTIAN HIEROGLYPH-134B2;Lo;0;L;;;;;N;;;;;\n134B3;EGYPTIAN HIEROGLYPH-134B3;Lo;0;L;;;;;N;;;;;\n134B4;EGYPTIAN HIEROGLYPH-134B4;Lo;0;L;;;;;N;;;;;\n134B5;EGYPTIAN HIEROGLYPH-134B5;Lo;0;L;;;;;N;;;;;\n134B6;EGYPTIAN HIEROGLYPH-134B6;Lo;0;L;;;;;N;;;;;\n134B7;EGYPTIAN HIEROGLYPH-134B7;Lo;0;L;;;;;N;;;;;\n134B8;EGYPTIAN HIEROGLYPH-134B8;Lo;0;L;;;;;N;;;;;\n134B9;EGYPTIAN HIEROGLYPH-134B9;Lo;0;L;;;;;N;;;;;\n134BA;EGYPTIAN HIEROGLYPH-134BA;Lo;0;L;;;;;N;;;;;\n134BB;EGYPTIAN HIEROGLYPH-134BB;Lo;0;L;;;;;N;;;;;\n134BC;EGYPTIAN HIEROGLYPH-134BC;Lo;0;L;;;;;N;;;;;\n134BD;EGYPTIAN HIEROGLYPH-134BD;Lo;0;L;;;;;N;;;;;\n134BE;EGYPTIAN HIEROGLYPH-134BE;Lo;0;L;;;;;N;;;;;\n134BF;EGYPTIAN HIEROGLYPH-134BF;Lo;0;L;;;;;N;;;;;\n134C0;EGYPTIAN HIEROGLYPH-134C0;Lo;0;L;;;;;N;;;;;\n134C1;EGYPTIAN HIEROGLYPH-134C1;Lo;0;L;;;;;N;;;;;\n134C2;EGYPTIAN HIEROGLYPH-134C2;Lo;0;L;;;;;N;;;;;\n134C3;EGYPTIAN HIEROGLYPH-134C3;Lo;0;L;;;;;N;;;;;\n134C4;EGYPTIAN HIEROGLYPH-134C4;Lo;0;L;;;;;N;;;;;\n134C5;EGYPTIAN HIEROGLYPH-134C5;Lo;0;L;;;;;N;;;;;\n134C6;EGYPTIAN HIEROGLYPH-134C6;Lo;0;L;;;;;N;;;;;\n134C7;EGYPTIAN HIEROGLYPH-134C7;Lo;0;L;;;;;N;;;;;\n134C8;EGYPTIAN HIEROGLYPH-134C8;Lo;0;L;;;;;N;;;;;\n134C9;EGYPTIAN HIEROGLYPH-134C9;Lo;0;L;;;;;N;;;;;\n134CA;EGYPTIAN HIEROGLYPH-134CA;Lo;0;L;;;;;N;;;;;\n134CB;EGYPTIAN HIEROGLYPH-134CB;Lo;0;L;;;;;N;;;;;\n134CC;EGYPTIAN HIEROGLYPH-134CC;Lo;0;L;;;;;N;;;;;\n134CD;EGYPTIAN HIEROGLYPH-134CD;Lo;0;L;;;;;N;;;;;\n134CE;EGYPTIAN HIEROGLYPH-134CE;Lo;0;L;;;;;N;;;;;\n134CF;EGYPTIAN HIEROGLYPH-134CF;Lo;0;L;;;;;N;;;;;\n134D0;EGYPTIAN HIEROGLYPH-134D0;Lo;0;L;;;;;N;;;;;\n134D1;EGYPTIAN HIEROGLYPH-134D1;Lo;0;L;;;;;N;;;;;\n134D2;EGYPTIAN HIEROGLYPH-134D2;Lo;0;L;;;;;N;;;;;\n134D3;EGYPTIAN HIEROGLYPH-134D3;Lo;0;L;;;;;N;;;;;\n134D4;EGYPTIAN HIEROGLYPH-134D4;Lo;0;L;;;;;N;;;;;\n134D5;EGYPTIAN HIEROGLYPH-134D5;Lo;0;L;;;;;N;;;;;\n134D6;EGYPTIAN HIEROGLYPH-134D6;Lo;0;L;;;;;N;;;;;\n134D7;EGYPTIAN HIEROGLYPH-134D7;Lo;0;L;;;;;N;;;;;\n134D8;EGYPTIAN HIEROGLYPH-134D8;Lo;0;L;;;;;N;;;;;\n134D9;EGYPTIAN HIEROGLYPH-134D9;Lo;0;L;;;;;N;;;;;\n134DA;EGYPTIAN HIEROGLYPH-134DA;Lo;0;L;;;;;N;;;;;\n134DB;EGYPTIAN HIEROGLYPH-134DB;Lo;0;L;;;;;N;;;;;\n134DC;EGYPTIAN HIEROGLYPH-134DC;Lo;0;L;;;;;N;;;;;\n134DD;EGYPTIAN HIEROGLYPH-134DD;Lo;0;L;;;;;N;;;;;\n134DE;EGYPTIAN HIEROGLYPH-134DE;Lo;0;L;;;;;N;;;;;\n134DF;EGYPTIAN HIEROGLYPH-134DF;Lo;0;L;;;;;N;;;;;\n134E0;EGYPTIAN HIEROGLYPH-134E0;Lo;0;L;;;;;N;;;;;\n134E1;EGYPTIAN HIEROGLYPH-134E1;Lo;0;L;;;;;N;;;;;\n134E2;EGYPTIAN HIEROGLYPH-134E2;Lo;0;L;;;;;N;;;;;\n134E3;EGYPTIAN HIEROGLYPH-134E3;Lo;0;L;;;;;N;;;;;\n134E4;EGYPTIAN HIEROGLYPH-134E4;Lo;0;L;;;;;N;;;;;\n134E5;EGYPTIAN HIEROGLYPH-134E5;Lo;0;L;;;;;N;;;;;\n134E6;EGYPTIAN HIEROGLYPH-134E6;Lo;0;L;;;;;N;;;;;\n134E7;EGYPTIAN HIEROGLYPH-134E7;Lo;0;L;;;;;N;;;;;\n134E8;EGYPTIAN HIEROGLYPH-134E8;Lo;0;L;;;;;N;;;;;\n134E9;EGYPTIAN HIEROGLYPH-134E9;Lo;0;L;;;;;N;;;;;\n134EA;EGYPTIAN HIEROGLYPH-134EA;Lo;0;L;;;;;N;;;;;\n134EB;EGYPTIAN HIEROGLYPH-134EB;Lo;0;L;;;;;N;;;;;\n134EC;EGYPTIAN HIEROGLYPH-134EC;Lo;0;L;;;;;N;;;;;\n134ED;EGYPTIAN HIEROGLYPH-134ED;Lo;0;L;;;;;N;;;;;\n134EE;EGYPTIAN HIEROGLYPH-134EE;Lo;0;L;;;;;N;;;;;\n134EF;EGYPTIAN HIEROGLYPH-134EF;Lo;0;L;;;;;N;;;;;\n134F0;EGYPTIAN HIEROGLYPH-134F0;Lo;0;L;;;;;N;;;;;\n134F1;EGYPTIAN HIEROGLYPH-134F1;Lo;0;L;;;;;N;;;;;\n134F2;EGYPTIAN HIEROGLYPH-134F2;Lo;0;L;;;;;N;;;;;\n134F3;EGYPTIAN HIEROGLYPH-134F3;Lo;0;L;;;;;N;;;;;\n134F4;EGYPTIAN HIEROGLYPH-134F4;Lo;0;L;;;;;N;;;;;\n134F5;EGYPTIAN HIEROGLYPH-134F5;Lo;0;L;;;;;N;;;;;\n134F6;EGYPTIAN HIEROGLYPH-134F6;Lo;0;L;;;;;N;;;;;\n134F7;EGYPTIAN HIEROGLYPH-134F7;Lo;0;L;;;;;N;;;;;\n134F8;EGYPTIAN HIEROGLYPH-134F8;Lo;0;L;;;;;N;;;;;\n134F9;EGYPTIAN HIEROGLYPH-134F9;Lo;0;L;;;;;N;;;;;\n134FA;EGYPTIAN HIEROGLYPH-134FA;Lo;0;L;;;;;N;;;;;\n134FB;EGYPTIAN HIEROGLYPH-134FB;Lo;0;L;;;;;N;;;;;\n134FC;EGYPTIAN HIEROGLYPH-134FC;Lo;0;L;;;;;N;;;;;\n134FD;EGYPTIAN HIEROGLYPH-134FD;Lo;0;L;;;;;N;;;;;\n134FE;EGYPTIAN HIEROGLYPH-134FE;Lo;0;L;;;;;N;;;;;\n134FF;EGYPTIAN HIEROGLYPH-134FF;Lo;0;L;;;;;N;;;;;\n13500;EGYPTIAN HIEROGLYPH-13500;Lo;0;L;;;;;N;;;;;\n13501;EGYPTIAN HIEROGLYPH-13501;Lo;0;L;;;;;N;;;;;\n13502;EGYPTIAN HIEROGLYPH-13502;Lo;0;L;;;;;N;;;;;\n13503;EGYPTIAN HIEROGLYPH-13503;Lo;0;L;;;;;N;;;;;\n13504;EGYPTIAN HIEROGLYPH-13504;Lo;0;L;;;;;N;;;;;\n13505;EGYPTIAN HIEROGLYPH-13505;Lo;0;L;;;;;N;;;;;\n13506;EGYPTIAN HIEROGLYPH-13506;Lo;0;L;;;;;N;;;;;\n13507;EGYPTIAN HIEROGLYPH-13507;Lo;0;L;;;;;N;;;;;\n13508;EGYPTIAN HIEROGLYPH-13508;Lo;0;L;;;;;N;;;;;\n13509;EGYPTIAN HIEROGLYPH-13509;Lo;0;L;;;;;N;;;;;\n1350A;EGYPTIAN HIEROGLYPH-1350A;Lo;0;L;;;;;N;;;;;\n1350B;EGYPTIAN HIEROGLYPH-1350B;Lo;0;L;;;;;N;;;;;\n1350C;EGYPTIAN HIEROGLYPH-1350C;Lo;0;L;;;;;N;;;;;\n1350D;EGYPTIAN HIEROGLYPH-1350D;Lo;0;L;;;;;N;;;;;\n1350E;EGYPTIAN HIEROGLYPH-1350E;Lo;0;L;;;;;N;;;;;\n1350F;EGYPTIAN HIEROGLYPH-1350F;Lo;0;L;;;;;N;;;;;\n13510;EGYPTIAN HIEROGLYPH-13510;Lo;0;L;;;;;N;;;;;\n13511;EGYPTIAN HIEROGLYPH-13511;Lo;0;L;;;;;N;;;;;\n13512;EGYPTIAN HIEROGLYPH-13512;Lo;0;L;;;;;N;;;;;\n13513;EGYPTIAN HIEROGLYPH-13513;Lo;0;L;;;;;N;;;;;\n13514;EGYPTIAN HIEROGLYPH-13514;Lo;0;L;;;;;N;;;;;\n13515;EGYPTIAN HIEROGLYPH-13515;Lo;0;L;;;;;N;;;;;\n13516;EGYPTIAN HIEROGLYPH-13516;Lo;0;L;;;;;N;;;;;\n13517;EGYPTIAN HIEROGLYPH-13517;Lo;0;L;;;;;N;;;;;\n13518;EGYPTIAN HIEROGLYPH-13518;Lo;0;L;;;;;N;;;;;\n13519;EGYPTIAN HIEROGLYPH-13519;Lo;0;L;;;;;N;;;;;\n1351A;EGYPTIAN HIEROGLYPH-1351A;Lo;0;L;;;;;N;;;;;\n1351B;EGYPTIAN HIEROGLYPH-1351B;Lo;0;L;;;;;N;;;;;\n1351C;EGYPTIAN HIEROGLYPH-1351C;Lo;0;L;;;;;N;;;;;\n1351D;EGYPTIAN HIEROGLYPH-1351D;Lo;0;L;;;;;N;;;;;\n1351E;EGYPTIAN HIEROGLYPH-1351E;Lo;0;L;;;;;N;;;;;\n1351F;EGYPTIAN HIEROGLYPH-1351F;Lo;0;L;;;;;N;;;;;\n13520;EGYPTIAN HIEROGLYPH-13520;Lo;0;L;;;;;N;;;;;\n13521;EGYPTIAN HIEROGLYPH-13521;Lo;0;L;;;;;N;;;;;\n13522;EGYPTIAN HIEROGLYPH-13522;Lo;0;L;;;;;N;;;;;\n13523;EGYPTIAN HIEROGLYPH-13523;Lo;0;L;;;;;N;;;;;\n13524;EGYPTIAN HIEROGLYPH-13524;Lo;0;L;;;;;N;;;;;\n13525;EGYPTIAN HIEROGLYPH-13525;Lo;0;L;;;;;N;;;;;\n13526;EGYPTIAN HIEROGLYPH-13526;Lo;0;L;;;;;N;;;;;\n13527;EGYPTIAN HIEROGLYPH-13527;Lo;0;L;;;;;N;;;;;\n13528;EGYPTIAN HIEROGLYPH-13528;Lo;0;L;;;;;N;;;;;\n13529;EGYPTIAN HIEROGLYPH-13529;Lo;0;L;;;;;N;;;;;\n1352A;EGYPTIAN HIEROGLYPH-1352A;Lo;0;L;;;;;N;;;;;\n1352B;EGYPTIAN HIEROGLYPH-1352B;Lo;0;L;;;;;N;;;;;\n1352C;EGYPTIAN HIEROGLYPH-1352C;Lo;0;L;;;;;N;;;;;\n1352D;EGYPTIAN HIEROGLYPH-1352D;Lo;0;L;;;;;N;;;;;\n1352E;EGYPTIAN HIEROGLYPH-1352E;Lo;0;L;;;;;N;;;;;\n1352F;EGYPTIAN HIEROGLYPH-1352F;Lo;0;L;;;;;N;;;;;\n13530;EGYPTIAN HIEROGLYPH-13530;Lo;0;L;;;;;N;;;;;\n13531;EGYPTIAN HIEROGLYPH-13531;Lo;0;L;;;;;N;;;;;\n13532;EGYPTIAN HIEROGLYPH-13532;Lo;0;L;;;;;N;;;;;\n13533;EGYPTIAN HIEROGLYPH-13533;Lo;0;L;;;;;N;;;;;\n13534;EGYPTIAN HIEROGLYPH-13534;Lo;0;L;;;;;N;;;;;\n13535;EGYPTIAN HIEROGLYPH-13535;Lo;0;L;;;;;N;;;;;\n13536;EGYPTIAN HIEROGLYPH-13536;Lo;0;L;;;;;N;;;;;\n13537;EGYPTIAN HIEROGLYPH-13537;Lo;0;L;;;;;N;;;;;\n13538;EGYPTIAN HIEROGLYPH-13538;Lo;0;L;;;;;N;;;;;\n13539;EGYPTIAN HIEROGLYPH-13539;Lo;0;L;;;;;N;;;;;\n1353A;EGYPTIAN HIEROGLYPH-1353A;Lo;0;L;;;;;N;;;;;\n1353B;EGYPTIAN HIEROGLYPH-1353B;Lo;0;L;;;;;N;;;;;\n1353C;EGYPTIAN HIEROGLYPH-1353C;Lo;0;L;;;;;N;;;;;\n1353D;EGYPTIAN HIEROGLYPH-1353D;Lo;0;L;;;;;N;;;;;\n1353E;EGYPTIAN HIEROGLYPH-1353E;Lo;0;L;;;;;N;;;;;\n1353F;EGYPTIAN HIEROGLYPH-1353F;Lo;0;L;;;;;N;;;;;\n13540;EGYPTIAN HIEROGLYPH-13540;Lo;0;L;;;;;N;;;;;\n13541;EGYPTIAN HIEROGLYPH-13541;Lo;0;L;;;;;N;;;;;\n13542;EGYPTIAN HIEROGLYPH-13542;Lo;0;L;;;;;N;;;;;\n13543;EGYPTIAN HIEROGLYPH-13543;Lo;0;L;;;;;N;;;;;\n13544;EGYPTIAN HIEROGLYPH-13544;Lo;0;L;;;;;N;;;;;\n13545;EGYPTIAN HIEROGLYPH-13545;Lo;0;L;;;;;N;;;;;\n13546;EGYPTIAN HIEROGLYPH-13546;Lo;0;L;;;;;N;;;;;\n13547;EGYPTIAN HIEROGLYPH-13547;Lo;0;L;;;;;N;;;;;\n13548;EGYPTIAN HIEROGLYPH-13548;Lo;0;L;;;;;N;;;;;\n13549;EGYPTIAN HIEROGLYPH-13549;Lo;0;L;;;;;N;;;;;\n1354A;EGYPTIAN HIEROGLYPH-1354A;Lo;0;L;;;;;N;;;;;\n1354B;EGYPTIAN HIEROGLYPH-1354B;Lo;0;L;;;;;N;;;;;\n1354C;EGYPTIAN HIEROGLYPH-1354C;Lo;0;L;;;;;N;;;;;\n1354D;EGYPTIAN HIEROGLYPH-1354D;Lo;0;L;;;;;N;;;;;\n1354E;EGYPTIAN HIEROGLYPH-1354E;Lo;0;L;;;;;N;;;;;\n1354F;EGYPTIAN HIEROGLYPH-1354F;Lo;0;L;;;;;N;;;;;\n13550;EGYPTIAN HIEROGLYPH-13550;Lo;0;L;;;;;N;;;;;\n13551;EGYPTIAN HIEROGLYPH-13551;Lo;0;L;;;;;N;;;;;\n13552;EGYPTIAN HIEROGLYPH-13552;Lo;0;L;;;;;N;;;;;\n13553;EGYPTIAN HIEROGLYPH-13553;Lo;0;L;;;;;N;;;;;\n13554;EGYPTIAN HIEROGLYPH-13554;Lo;0;L;;;;;N;;;;;\n13555;EGYPTIAN HIEROGLYPH-13555;Lo;0;L;;;;;N;;;;;\n13556;EGYPTIAN HIEROGLYPH-13556;Lo;0;L;;;;;N;;;;;\n13557;EGYPTIAN HIEROGLYPH-13557;Lo;0;L;;;;;N;;;;;\n13558;EGYPTIAN HIEROGLYPH-13558;Lo;0;L;;;;;N;;;;;\n13559;EGYPTIAN HIEROGLYPH-13559;Lo;0;L;;;;;N;;;;;\n1355A;EGYPTIAN HIEROGLYPH-1355A;Lo;0;L;;;;;N;;;;;\n1355B;EGYPTIAN HIEROGLYPH-1355B;Lo;0;L;;;;;N;;;;;\n1355C;EGYPTIAN HIEROGLYPH-1355C;Lo;0;L;;;;;N;;;;;\n1355D;EGYPTIAN HIEROGLYPH-1355D;Lo;0;L;;;;;N;;;;;\n1355E;EGYPTIAN HIEROGLYPH-1355E;Lo;0;L;;;;;N;;;;;\n1355F;EGYPTIAN HIEROGLYPH-1355F;Lo;0;L;;;;;N;;;;;\n13560;EGYPTIAN HIEROGLYPH-13560;Lo;0;L;;;;;N;;;;;\n13561;EGYPTIAN HIEROGLYPH-13561;Lo;0;L;;;;;N;;;;;\n13562;EGYPTIAN HIEROGLYPH-13562;Lo;0;L;;;;;N;;;;;\n13563;EGYPTIAN HIEROGLYPH-13563;Lo;0;L;;;;;N;;;;;\n13564;EGYPTIAN HIEROGLYPH-13564;Lo;0;L;;;;;N;;;;;\n13565;EGYPTIAN HIEROGLYPH-13565;Lo;0;L;;;;;N;;;;;\n13566;EGYPTIAN HIEROGLYPH-13566;Lo;0;L;;;;;N;;;;;\n13567;EGYPTIAN HIEROGLYPH-13567;Lo;0;L;;;;;N;;;;;\n13568;EGYPTIAN HIEROGLYPH-13568;Lo;0;L;;;;;N;;;;;\n13569;EGYPTIAN HIEROGLYPH-13569;Lo;0;L;;;;;N;;;;;\n1356A;EGYPTIAN HIEROGLYPH-1356A;Lo;0;L;;;;;N;;;;;\n1356B;EGYPTIAN HIEROGLYPH-1356B;Lo;0;L;;;;;N;;;;;\n1356C;EGYPTIAN HIEROGLYPH-1356C;Lo;0;L;;;;;N;;;;;\n1356D;EGYPTIAN HIEROGLYPH-1356D;Lo;0;L;;;;;N;;;;;\n1356E;EGYPTIAN HIEROGLYPH-1356E;Lo;0;L;;;;;N;;;;;\n1356F;EGYPTIAN HIEROGLYPH-1356F;Lo;0;L;;;;;N;;;;;\n13570;EGYPTIAN HIEROGLYPH-13570;Lo;0;L;;;;;N;;;;;\n13571;EGYPTIAN HIEROGLYPH-13571;Lo;0;L;;;;;N;;;;;\n13572;EGYPTIAN HIEROGLYPH-13572;Lo;0;L;;;;;N;;;;;\n13573;EGYPTIAN HIEROGLYPH-13573;Lo;0;L;;;;;N;;;;;\n13574;EGYPTIAN HIEROGLYPH-13574;Lo;0;L;;;;;N;;;;;\n13575;EGYPTIAN HIEROGLYPH-13575;Lo;0;L;;;;;N;;;;;\n13576;EGYPTIAN HIEROGLYPH-13576;Lo;0;L;;;;;N;;;;;\n13577;EGYPTIAN HIEROGLYPH-13577;Lo;0;L;;;;;N;;;;;\n13578;EGYPTIAN HIEROGLYPH-13578;Lo;0;L;;;;;N;;;;;\n13579;EGYPTIAN HIEROGLYPH-13579;Lo;0;L;;;;;N;;;;;\n1357A;EGYPTIAN HIEROGLYPH-1357A;Lo;0;L;;;;;N;;;;;\n1357B;EGYPTIAN HIEROGLYPH-1357B;Lo;0;L;;;;;N;;;;;\n1357C;EGYPTIAN HIEROGLYPH-1357C;Lo;0;L;;;;;N;;;;;\n1357D;EGYPTIAN HIEROGLYPH-1357D;Lo;0;L;;;;;N;;;;;\n1357E;EGYPTIAN HIEROGLYPH-1357E;Lo;0;L;;;;;N;;;;;\n1357F;EGYPTIAN HIEROGLYPH-1357F;Lo;0;L;;;;;N;;;;;\n13580;EGYPTIAN HIEROGLYPH-13580;Lo;0;L;;;;;N;;;;;\n13581;EGYPTIAN HIEROGLYPH-13581;Lo;0;L;;;;;N;;;;;\n13582;EGYPTIAN HIEROGLYPH-13582;Lo;0;L;;;;;N;;;;;\n13583;EGYPTIAN HIEROGLYPH-13583;Lo;0;L;;;;;N;;;;;\n13584;EGYPTIAN HIEROGLYPH-13584;Lo;0;L;;;;;N;;;;;\n13585;EGYPTIAN HIEROGLYPH-13585;Lo;0;L;;;;;N;;;;;\n13586;EGYPTIAN HIEROGLYPH-13586;Lo;0;L;;;;;N;;;;;\n13587;EGYPTIAN HIEROGLYPH-13587;Lo;0;L;;;;;N;;;;;\n13588;EGYPTIAN HIEROGLYPH-13588;Lo;0;L;;;;;N;;;;;\n13589;EGYPTIAN HIEROGLYPH-13589;Lo;0;L;;;;;N;;;;;\n1358A;EGYPTIAN HIEROGLYPH-1358A;Lo;0;L;;;;;N;;;;;\n1358B;EGYPTIAN HIEROGLYPH-1358B;Lo;0;L;;;;;N;;;;;\n1358C;EGYPTIAN HIEROGLYPH-1358C;Lo;0;L;;;;;N;;;;;\n1358D;EGYPTIAN HIEROGLYPH-1358D;Lo;0;L;;;;;N;;;;;\n1358E;EGYPTIAN HIEROGLYPH-1358E;Lo;0;L;;;;;N;;;;;\n1358F;EGYPTIAN HIEROGLYPH-1358F;Lo;0;L;;;;;N;;;;;\n13590;EGYPTIAN HIEROGLYPH-13590;Lo;0;L;;;;;N;;;;;\n13591;EGYPTIAN HIEROGLYPH-13591;Lo;0;L;;;;;N;;;;;\n13592;EGYPTIAN HIEROGLYPH-13592;Lo;0;L;;;;;N;;;;;\n13593;EGYPTIAN HIEROGLYPH-13593;Lo;0;L;;;;;N;;;;;\n13594;EGYPTIAN HIEROGLYPH-13594;Lo;0;L;;;;;N;;;;;\n13595;EGYPTIAN HIEROGLYPH-13595;Lo;0;L;;;;;N;;;;;\n13596;EGYPTIAN HIEROGLYPH-13596;Lo;0;L;;;;;N;;;;;\n13597;EGYPTIAN HIEROGLYPH-13597;Lo;0;L;;;;;N;;;;;\n13598;EGYPTIAN HIEROGLYPH-13598;Lo;0;L;;;;;N;;;;;\n13599;EGYPTIAN HIEROGLYPH-13599;Lo;0;L;;;;;N;;;;;\n1359A;EGYPTIAN HIEROGLYPH-1359A;Lo;0;L;;;;;N;;;;;\n1359B;EGYPTIAN HIEROGLYPH-1359B;Lo;0;L;;;;;N;;;;;\n1359C;EGYPTIAN HIEROGLYPH-1359C;Lo;0;L;;;;;N;;;;;\n1359D;EGYPTIAN HIEROGLYPH-1359D;Lo;0;L;;;;;N;;;;;\n1359E;EGYPTIAN HIEROGLYPH-1359E;Lo;0;L;;;;;N;;;;;\n1359F;EGYPTIAN HIEROGLYPH-1359F;Lo;0;L;;;;;N;;;;;\n135A0;EGYPTIAN HIEROGLYPH-135A0;Lo;0;L;;;;;N;;;;;\n135A1;EGYPTIAN HIEROGLYPH-135A1;Lo;0;L;;;;;N;;;;;\n135A2;EGYPTIAN HIEROGLYPH-135A2;Lo;0;L;;;;;N;;;;;\n135A3;EGYPTIAN HIEROGLYPH-135A3;Lo;0;L;;;;;N;;;;;\n135A4;EGYPTIAN HIEROGLYPH-135A4;Lo;0;L;;;;;N;;;;;\n135A5;EGYPTIAN HIEROGLYPH-135A5;Lo;0;L;;;;;N;;;;;\n135A6;EGYPTIAN HIEROGLYPH-135A6;Lo;0;L;;;;;N;;;;;\n135A7;EGYPTIAN HIEROGLYPH-135A7;Lo;0;L;;;;;N;;;;;\n135A8;EGYPTIAN HIEROGLYPH-135A8;Lo;0;L;;;;;N;;;;;\n135A9;EGYPTIAN HIEROGLYPH-135A9;Lo;0;L;;;;;N;;;;;\n135AA;EGYPTIAN HIEROGLYPH-135AA;Lo;0;L;;;;;N;;;;;\n135AB;EGYPTIAN HIEROGLYPH-135AB;Lo;0;L;;;;;N;;;;;\n135AC;EGYPTIAN HIEROGLYPH-135AC;Lo;0;L;;;;;N;;;;;\n135AD;EGYPTIAN HIEROGLYPH-135AD;Lo;0;L;;;;;N;;;;;\n135AE;EGYPTIAN HIEROGLYPH-135AE;Lo;0;L;;;;;N;;;;;\n135AF;EGYPTIAN HIEROGLYPH-135AF;Lo;0;L;;;;;N;;;;;\n135B0;EGYPTIAN HIEROGLYPH-135B0;Lo;0;L;;;;;N;;;;;\n135B1;EGYPTIAN HIEROGLYPH-135B1;Lo;0;L;;;;;N;;;;;\n135B2;EGYPTIAN HIEROGLYPH-135B2;Lo;0;L;;;;;N;;;;;\n135B3;EGYPTIAN HIEROGLYPH-135B3;Lo;0;L;;;;;N;;;;;\n135B4;EGYPTIAN HIEROGLYPH-135B4;Lo;0;L;;;;;N;;;;;\n135B5;EGYPTIAN HIEROGLYPH-135B5;Lo;0;L;;;;;N;;;;;\n135B6;EGYPTIAN HIEROGLYPH-135B6;Lo;0;L;;;;;N;;;;;\n135B7;EGYPTIAN HIEROGLYPH-135B7;Lo;0;L;;;;;N;;;;;\n135B8;EGYPTIAN HIEROGLYPH-135B8;Lo;0;L;;;;;N;;;;;\n135B9;EGYPTIAN HIEROGLYPH-135B9;Lo;0;L;;;;;N;;;;;\n135BA;EGYPTIAN HIEROGLYPH-135BA;Lo;0;L;;;;;N;;;;;\n135BB;EGYPTIAN HIEROGLYPH-135BB;Lo;0;L;;;;;N;;;;;\n135BC;EGYPTIAN HIEROGLYPH-135BC;Lo;0;L;;;;;N;;;;;\n135BD;EGYPTIAN HIEROGLYPH-135BD;Lo;0;L;;;;;N;;;;;\n135BE;EGYPTIAN HIEROGLYPH-135BE;Lo;0;L;;;;;N;;;;;\n135BF;EGYPTIAN HIEROGLYPH-135BF;Lo;0;L;;;;;N;;;;;\n135C0;EGYPTIAN HIEROGLYPH-135C0;Lo;0;L;;;;;N;;;;;\n135C1;EGYPTIAN HIEROGLYPH-135C1;Lo;0;L;;;;;N;;;;;\n135C2;EGYPTIAN HIEROGLYPH-135C2;Lo;0;L;;;;;N;;;;;\n135C3;EGYPTIAN HIEROGLYPH-135C3;Lo;0;L;;;;;N;;;;;\n135C4;EGYPTIAN HIEROGLYPH-135C4;Lo;0;L;;;;;N;;;;;\n135C5;EGYPTIAN HIEROGLYPH-135C5;Lo;0;L;;;;;N;;;;;\n135C6;EGYPTIAN HIEROGLYPH-135C6;Lo;0;L;;;;;N;;;;;\n135C7;EGYPTIAN HIEROGLYPH-135C7;Lo;0;L;;;;;N;;;;;\n135C8;EGYPTIAN HIEROGLYPH-135C8;Lo;0;L;;;;;N;;;;;\n135C9;EGYPTIAN HIEROGLYPH-135C9;Lo;0;L;;;;;N;;;;;\n135CA;EGYPTIAN HIEROGLYPH-135CA;Lo;0;L;;;;;N;;;;;\n135CB;EGYPTIAN HIEROGLYPH-135CB;Lo;0;L;;;;;N;;;;;\n135CC;EGYPTIAN HIEROGLYPH-135CC;Lo;0;L;;;;;N;;;;;\n135CD;EGYPTIAN HIEROGLYPH-135CD;Lo;0;L;;;;;N;;;;;\n135CE;EGYPTIAN HIEROGLYPH-135CE;Lo;0;L;;;;;N;;;;;\n135CF;EGYPTIAN HIEROGLYPH-135CF;Lo;0;L;;;;;N;;;;;\n135D0;EGYPTIAN HIEROGLYPH-135D0;Lo;0;L;;;;;N;;;;;\n135D1;EGYPTIAN HIEROGLYPH-135D1;Lo;0;L;;;;;N;;;;;\n135D2;EGYPTIAN HIEROGLYPH-135D2;Lo;0;L;;;;;N;;;;;\n135D3;EGYPTIAN HIEROGLYPH-135D3;Lo;0;L;;;;;N;;;;;\n135D4;EGYPTIAN HIEROGLYPH-135D4;Lo;0;L;;;;;N;;;;;\n135D5;EGYPTIAN HIEROGLYPH-135D5;Lo;0;L;;;;;N;;;;;\n135D6;EGYPTIAN HIEROGLYPH-135D6;Lo;0;L;;;;;N;;;;;\n135D7;EGYPTIAN HIEROGLYPH-135D7;Lo;0;L;;;;;N;;;;;\n135D8;EGYPTIAN HIEROGLYPH-135D8;Lo;0;L;;;;;N;;;;;\n135D9;EGYPTIAN HIEROGLYPH-135D9;Lo;0;L;;;;;N;;;;;\n135DA;EGYPTIAN HIEROGLYPH-135DA;Lo;0;L;;;;;N;;;;;\n135DB;EGYPTIAN HIEROGLYPH-135DB;Lo;0;L;;;;;N;;;;;\n135DC;EGYPTIAN HIEROGLYPH-135DC;Lo;0;L;;;;;N;;;;;\n135DD;EGYPTIAN HIEROGLYPH-135DD;Lo;0;L;;;;;N;;;;;\n135DE;EGYPTIAN HIEROGLYPH-135DE;Lo;0;L;;;;;N;;;;;\n135DF;EGYPTIAN HIEROGLYPH-135DF;Lo;0;L;;;;;N;;;;;\n135E0;EGYPTIAN HIEROGLYPH-135E0;Lo;0;L;;;;;N;;;;;\n135E1;EGYPTIAN HIEROGLYPH-135E1;Lo;0;L;;;;;N;;;;;\n135E2;EGYPTIAN HIEROGLYPH-135E2;Lo;0;L;;;;;N;;;;;\n135E3;EGYPTIAN HIEROGLYPH-135E3;Lo;0;L;;;;;N;;;;;\n135E4;EGYPTIAN HIEROGLYPH-135E4;Lo;0;L;;;;;N;;;;;\n135E5;EGYPTIAN HIEROGLYPH-135E5;Lo;0;L;;;;;N;;;;;\n135E6;EGYPTIAN HIEROGLYPH-135E6;Lo;0;L;;;;;N;;;;;\n135E7;EGYPTIAN HIEROGLYPH-135E7;Lo;0;L;;;;;N;;;;;\n135E8;EGYPTIAN HIEROGLYPH-135E8;Lo;0;L;;;;;N;;;;;\n135E9;EGYPTIAN HIEROGLYPH-135E9;Lo;0;L;;;;;N;;;;;\n135EA;EGYPTIAN HIEROGLYPH-135EA;Lo;0;L;;;;;N;;;;;\n135EB;EGYPTIAN HIEROGLYPH-135EB;Lo;0;L;;;;;N;;;;;\n135EC;EGYPTIAN HIEROGLYPH-135EC;Lo;0;L;;;;;N;;;;;\n135ED;EGYPTIAN HIEROGLYPH-135ED;Lo;0;L;;;;;N;;;;;\n135EE;EGYPTIAN HIEROGLYPH-135EE;Lo;0;L;;;;;N;;;;;\n135EF;EGYPTIAN HIEROGLYPH-135EF;Lo;0;L;;;;;N;;;;;\n135F0;EGYPTIAN HIEROGLYPH-135F0;Lo;0;L;;;;;N;;;;;\n135F1;EGYPTIAN HIEROGLYPH-135F1;Lo;0;L;;;;;N;;;;;\n135F2;EGYPTIAN HIEROGLYPH-135F2;Lo;0;L;;;;;N;;;;;\n135F3;EGYPTIAN HIEROGLYPH-135F3;Lo;0;L;;;;;N;;;;;\n135F4;EGYPTIAN HIEROGLYPH-135F4;Lo;0;L;;;;;N;;;;;\n135F5;EGYPTIAN HIEROGLYPH-135F5;Lo;0;L;;;;;N;;;;;\n135F6;EGYPTIAN HIEROGLYPH-135F6;Lo;0;L;;;;;N;;;;;\n135F7;EGYPTIAN HIEROGLYPH-135F7;Lo;0;L;;;;;N;;;;;\n135F8;EGYPTIAN HIEROGLYPH-135F8;Lo;0;L;;;;;N;;;;;\n135F9;EGYPTIAN HIEROGLYPH-135F9;Lo;0;L;;;;;N;;;;;\n135FA;EGYPTIAN HIEROGLYPH-135FA;Lo;0;L;;;;;N;;;;;\n135FB;EGYPTIAN HIEROGLYPH-135FB;Lo;0;L;;;;;N;;;;;\n135FC;EGYPTIAN HIEROGLYPH-135FC;Lo;0;L;;;;;N;;;;;\n135FD;EGYPTIAN HIEROGLYPH-135FD;Lo;0;L;;;;;N;;;;;\n135FE;EGYPTIAN HIEROGLYPH-135FE;Lo;0;L;;;;;N;;;;;\n135FF;EGYPTIAN HIEROGLYPH-135FF;Lo;0;L;;;;;N;;;;;\n13600;EGYPTIAN HIEROGLYPH-13600;Lo;0;L;;;;;N;;;;;\n13601;EGYPTIAN HIEROGLYPH-13601;Lo;0;L;;;;;N;;;;;\n13602;EGYPTIAN HIEROGLYPH-13602;Lo;0;L;;;;;N;;;;;\n13603;EGYPTIAN HIEROGLYPH-13603;Lo;0;L;;;;;N;;;;;\n13604;EGYPTIAN HIEROGLYPH-13604;Lo;0;L;;;;;N;;;;;\n13605;EGYPTIAN HIEROGLYPH-13605;Lo;0;L;;;;;N;;;;;\n13606;EGYPTIAN HIEROGLYPH-13606;Lo;0;L;;;;;N;;;;;\n13607;EGYPTIAN HIEROGLYPH-13607;Lo;0;L;;;;;N;;;;;\n13608;EGYPTIAN HIEROGLYPH-13608;Lo;0;L;;;;;N;;;;;\n13609;EGYPTIAN HIEROGLYPH-13609;Lo;0;L;;;;;N;;;;;\n1360A;EGYPTIAN HIEROGLYPH-1360A;Lo;0;L;;;;;N;;;;;\n1360B;EGYPTIAN HIEROGLYPH-1360B;Lo;0;L;;;;;N;;;;;\n1360C;EGYPTIAN HIEROGLYPH-1360C;Lo;0;L;;;;;N;;;;;\n1360D;EGYPTIAN HIEROGLYPH-1360D;Lo;0;L;;;;;N;;;;;\n1360E;EGYPTIAN HIEROGLYPH-1360E;Lo;0;L;;;;;N;;;;;\n1360F;EGYPTIAN HIEROGLYPH-1360F;Lo;0;L;;;;;N;;;;;\n13610;EGYPTIAN HIEROGLYPH-13610;Lo;0;L;;;;;N;;;;;\n13611;EGYPTIAN HIEROGLYPH-13611;Lo;0;L;;;;;N;;;;;\n13612;EGYPTIAN HIEROGLYPH-13612;Lo;0;L;;;;;N;;;;;\n13613;EGYPTIAN HIEROGLYPH-13613;Lo;0;L;;;;;N;;;;;\n13614;EGYPTIAN HIEROGLYPH-13614;Lo;0;L;;;;;N;;;;;\n13615;EGYPTIAN HIEROGLYPH-13615;Lo;0;L;;;;;N;;;;;\n13616;EGYPTIAN HIEROGLYPH-13616;Lo;0;L;;;;;N;;;;;\n13617;EGYPTIAN HIEROGLYPH-13617;Lo;0;L;;;;;N;;;;;\n13618;EGYPTIAN HIEROGLYPH-13618;Lo;0;L;;;;;N;;;;;\n13619;EGYPTIAN HIEROGLYPH-13619;Lo;0;L;;;;;N;;;;;\n1361A;EGYPTIAN HIEROGLYPH-1361A;Lo;0;L;;;;;N;;;;;\n1361B;EGYPTIAN HIEROGLYPH-1361B;Lo;0;L;;;;;N;;;;;\n1361C;EGYPTIAN HIEROGLYPH-1361C;Lo;0;L;;;;;N;;;;;\n1361D;EGYPTIAN HIEROGLYPH-1361D;Lo;0;L;;;;;N;;;;;\n1361E;EGYPTIAN HIEROGLYPH-1361E;Lo;0;L;;;;;N;;;;;\n1361F;EGYPTIAN HIEROGLYPH-1361F;Lo;0;L;;;;;N;;;;;\n13620;EGYPTIAN HIEROGLYPH-13620;Lo;0;L;;;;;N;;;;;\n13621;EGYPTIAN HIEROGLYPH-13621;Lo;0;L;;;;;N;;;;;\n13622;EGYPTIAN HIEROGLYPH-13622;Lo;0;L;;;;;N;;;;;\n13623;EGYPTIAN HIEROGLYPH-13623;Lo;0;L;;;;;N;;;;;\n13624;EGYPTIAN HIEROGLYPH-13624;Lo;0;L;;;;;N;;;;;\n13625;EGYPTIAN HIEROGLYPH-13625;Lo;0;L;;;;;N;;;;;\n13626;EGYPTIAN HIEROGLYPH-13626;Lo;0;L;;;;;N;;;;;\n13627;EGYPTIAN HIEROGLYPH-13627;Lo;0;L;;;;;N;;;;;\n13628;EGYPTIAN HIEROGLYPH-13628;Lo;0;L;;;;;N;;;;;\n13629;EGYPTIAN HIEROGLYPH-13629;Lo;0;L;;;;;N;;;;;\n1362A;EGYPTIAN HIEROGLYPH-1362A;Lo;0;L;;;;;N;;;;;\n1362B;EGYPTIAN HIEROGLYPH-1362B;Lo;0;L;;;;;N;;;;;\n1362C;EGYPTIAN HIEROGLYPH-1362C;Lo;0;L;;;;;N;;;;;\n1362D;EGYPTIAN HIEROGLYPH-1362D;Lo;0;L;;;;;N;;;;;\n1362E;EGYPTIAN HIEROGLYPH-1362E;Lo;0;L;;;;;N;;;;;\n1362F;EGYPTIAN HIEROGLYPH-1362F;Lo;0;L;;;;;N;;;;;\n13630;EGYPTIAN HIEROGLYPH-13630;Lo;0;L;;;;;N;;;;;\n13631;EGYPTIAN HIEROGLYPH-13631;Lo;0;L;;;;;N;;;;;\n13632;EGYPTIAN HIEROGLYPH-13632;Lo;0;L;;;;;N;;;;;\n13633;EGYPTIAN HIEROGLYPH-13633;Lo;0;L;;;;;N;;;;;\n13634;EGYPTIAN HIEROGLYPH-13634;Lo;0;L;;;;;N;;;;;\n13635;EGYPTIAN HIEROGLYPH-13635;Lo;0;L;;;;;N;;;;;\n13636;EGYPTIAN HIEROGLYPH-13636;Lo;0;L;;;;;N;;;;;\n13637;EGYPTIAN HIEROGLYPH-13637;Lo;0;L;;;;;N;;;;;\n13638;EGYPTIAN HIEROGLYPH-13638;Lo;0;L;;;;;N;;;;;\n13639;EGYPTIAN HIEROGLYPH-13639;Lo;0;L;;;;;N;;;;;\n1363A;EGYPTIAN HIEROGLYPH-1363A;Lo;0;L;;;;;N;;;;;\n1363B;EGYPTIAN HIEROGLYPH-1363B;Lo;0;L;;;;;N;;;;;\n1363C;EGYPTIAN HIEROGLYPH-1363C;Lo;0;L;;;;;N;;;;;\n1363D;EGYPTIAN HIEROGLYPH-1363D;Lo;0;L;;;;;N;;;;;\n1363E;EGYPTIAN HIEROGLYPH-1363E;Lo;0;L;;;;;N;;;;;\n1363F;EGYPTIAN HIEROGLYPH-1363F;Lo;0;L;;;;;N;;;;;\n13640;EGYPTIAN HIEROGLYPH-13640;Lo;0;L;;;;;N;;;;;\n13641;EGYPTIAN HIEROGLYPH-13641;Lo;0;L;;;;;N;;;;;\n13642;EGYPTIAN HIEROGLYPH-13642;Lo;0;L;;;;;N;;;;;\n13643;EGYPTIAN HIEROGLYPH-13643;Lo;0;L;;;;;N;;;;;\n13644;EGYPTIAN HIEROGLYPH-13644;Lo;0;L;;;;;N;;;;;\n13645;EGYPTIAN HIEROGLYPH-13645;Lo;0;L;;;;;N;;;;;\n13646;EGYPTIAN HIEROGLYPH-13646;Lo;0;L;;;;;N;;;;;\n13647;EGYPTIAN HIEROGLYPH-13647;Lo;0;L;;;;;N;;;;;\n13648;EGYPTIAN HIEROGLYPH-13648;Lo;0;L;;;;;N;;;;;\n13649;EGYPTIAN HIEROGLYPH-13649;Lo;0;L;;;;;N;;;;;\n1364A;EGYPTIAN HIEROGLYPH-1364A;Lo;0;L;;;;;N;;;;;\n1364B;EGYPTIAN HIEROGLYPH-1364B;Lo;0;L;;;;;N;;;;;\n1364C;EGYPTIAN HIEROGLYPH-1364C;Lo;0;L;;;;;N;;;;;\n1364D;EGYPTIAN HIEROGLYPH-1364D;Lo;0;L;;;;;N;;;;;\n1364E;EGYPTIAN HIEROGLYPH-1364E;Lo;0;L;;;;;N;;;;;\n1364F;EGYPTIAN HIEROGLYPH-1364F;Lo;0;L;;;;;N;;;;;\n13650;EGYPTIAN HIEROGLYPH-13650;Lo;0;L;;;;;N;;;;;\n13651;EGYPTIAN HIEROGLYPH-13651;Lo;0;L;;;;;N;;;;;\n13652;EGYPTIAN HIEROGLYPH-13652;Lo;0;L;;;;;N;;;;;\n13653;EGYPTIAN HIEROGLYPH-13653;Lo;0;L;;;;;N;;;;;\n13654;EGYPTIAN HIEROGLYPH-13654;Lo;0;L;;;;;N;;;;;\n13655;EGYPTIAN HIEROGLYPH-13655;Lo;0;L;;;;;N;;;;;\n13656;EGYPTIAN HIEROGLYPH-13656;Lo;0;L;;;;;N;;;;;\n13657;EGYPTIAN HIEROGLYPH-13657;Lo;0;L;;;;;N;;;;;\n13658;EGYPTIAN HIEROGLYPH-13658;Lo;0;L;;;;;N;;;;;\n13659;EGYPTIAN HIEROGLYPH-13659;Lo;0;L;;;;;N;;;;;\n1365A;EGYPTIAN HIEROGLYPH-1365A;Lo;0;L;;;;;N;;;;;\n1365B;EGYPTIAN HIEROGLYPH-1365B;Lo;0;L;;;;;N;;;;;\n1365C;EGYPTIAN HIEROGLYPH-1365C;Lo;0;L;;;;;N;;;;;\n1365D;EGYPTIAN HIEROGLYPH-1365D;Lo;0;L;;;;;N;;;;;\n1365E;EGYPTIAN HIEROGLYPH-1365E;Lo;0;L;;;;;N;;;;;\n1365F;EGYPTIAN HIEROGLYPH-1365F;Lo;0;L;;;;;N;;;;;\n13660;EGYPTIAN HIEROGLYPH-13660;Lo;0;L;;;;;N;;;;;\n13661;EGYPTIAN HIEROGLYPH-13661;Lo;0;L;;;;;N;;;;;\n13662;EGYPTIAN HIEROGLYPH-13662;Lo;0;L;;;;;N;;;;;\n13663;EGYPTIAN HIEROGLYPH-13663;Lo;0;L;;;;;N;;;;;\n13664;EGYPTIAN HIEROGLYPH-13664;Lo;0;L;;;;;N;;;;;\n13665;EGYPTIAN HIEROGLYPH-13665;Lo;0;L;;;;;N;;;;;\n13666;EGYPTIAN HIEROGLYPH-13666;Lo;0;L;;;;;N;;;;;\n13667;EGYPTIAN HIEROGLYPH-13667;Lo;0;L;;;;;N;;;;;\n13668;EGYPTIAN HIEROGLYPH-13668;Lo;0;L;;;;;N;;;;;\n13669;EGYPTIAN HIEROGLYPH-13669;Lo;0;L;;;;;N;;;;;\n1366A;EGYPTIAN HIEROGLYPH-1366A;Lo;0;L;;;;;N;;;;;\n1366B;EGYPTIAN HIEROGLYPH-1366B;Lo;0;L;;;;;N;;;;;\n1366C;EGYPTIAN HIEROGLYPH-1366C;Lo;0;L;;;;;N;;;;;\n1366D;EGYPTIAN HIEROGLYPH-1366D;Lo;0;L;;;;;N;;;;;\n1366E;EGYPTIAN HIEROGLYPH-1366E;Lo;0;L;;;;;N;;;;;\n1366F;EGYPTIAN HIEROGLYPH-1366F;Lo;0;L;;;;;N;;;;;\n13670;EGYPTIAN HIEROGLYPH-13670;Lo;0;L;;;;;N;;;;;\n13671;EGYPTIAN HIEROGLYPH-13671;Lo;0;L;;;;;N;;;;;\n13672;EGYPTIAN HIEROGLYPH-13672;Lo;0;L;;;;;N;;;;;\n13673;EGYPTIAN HIEROGLYPH-13673;Lo;0;L;;;;;N;;;;;\n13674;EGYPTIAN HIEROGLYPH-13674;Lo;0;L;;;;;N;;;;;\n13675;EGYPTIAN HIEROGLYPH-13675;Lo;0;L;;;;;N;;;;;\n13676;EGYPTIAN HIEROGLYPH-13676;Lo;0;L;;;;;N;;;;;\n13677;EGYPTIAN HIEROGLYPH-13677;Lo;0;L;;;;;N;;;;;\n13678;EGYPTIAN HIEROGLYPH-13678;Lo;0;L;;;;;N;;;;;\n13679;EGYPTIAN HIEROGLYPH-13679;Lo;0;L;;;;;N;;;;;\n1367A;EGYPTIAN HIEROGLYPH-1367A;Lo;0;L;;;;;N;;;;;\n1367B;EGYPTIAN HIEROGLYPH-1367B;Lo;0;L;;;;;N;;;;;\n1367C;EGYPTIAN HIEROGLYPH-1367C;Lo;0;L;;;;;N;;;;;\n1367D;EGYPTIAN HIEROGLYPH-1367D;Lo;0;L;;;;;N;;;;;\n1367E;EGYPTIAN HIEROGLYPH-1367E;Lo;0;L;;;;;N;;;;;\n1367F;EGYPTIAN HIEROGLYPH-1367F;Lo;0;L;;;;;N;;;;;\n13680;EGYPTIAN HIEROGLYPH-13680;Lo;0;L;;;;;N;;;;;\n13681;EGYPTIAN HIEROGLYPH-13681;Lo;0;L;;;;;N;;;;;\n13682;EGYPTIAN HIEROGLYPH-13682;Lo;0;L;;;;;N;;;;;\n13683;EGYPTIAN HIEROGLYPH-13683;Lo;0;L;;;;;N;;;;;\n13684;EGYPTIAN HIEROGLYPH-13684;Lo;0;L;;;;;N;;;;;\n13685;EGYPTIAN HIEROGLYPH-13685;Lo;0;L;;;;;N;;;;;\n13686;EGYPTIAN HIEROGLYPH-13686;Lo;0;L;;;;;N;;;;;\n13687;EGYPTIAN HIEROGLYPH-13687;Lo;0;L;;;;;N;;;;;\n13688;EGYPTIAN HIEROGLYPH-13688;Lo;0;L;;;;;N;;;;;\n13689;EGYPTIAN HIEROGLYPH-13689;Lo;0;L;;;;;N;;;;;\n1368A;EGYPTIAN HIEROGLYPH-1368A;Lo;0;L;;;;;N;;;;;\n1368B;EGYPTIAN HIEROGLYPH-1368B;Lo;0;L;;;;;N;;;;;\n1368C;EGYPTIAN HIEROGLYPH-1368C;Lo;0;L;;;;;N;;;;;\n1368D;EGYPTIAN HIEROGLYPH-1368D;Lo;0;L;;;;;N;;;;;\n1368E;EGYPTIAN HIEROGLYPH-1368E;Lo;0;L;;;;;N;;;;;\n1368F;EGYPTIAN HIEROGLYPH-1368F;Lo;0;L;;;;;N;;;;;\n13690;EGYPTIAN HIEROGLYPH-13690;Lo;0;L;;;;;N;;;;;\n13691;EGYPTIAN HIEROGLYPH-13691;Lo;0;L;;;;;N;;;;;\n13692;EGYPTIAN HIEROGLYPH-13692;Lo;0;L;;;;;N;;;;;\n13693;EGYPTIAN HIEROGLYPH-13693;Lo;0;L;;;;;N;;;;;\n13694;EGYPTIAN HIEROGLYPH-13694;Lo;0;L;;;;;N;;;;;\n13695;EGYPTIAN HIEROGLYPH-13695;Lo;0;L;;;;;N;;;;;\n13696;EGYPTIAN HIEROGLYPH-13696;Lo;0;L;;;;;N;;;;;\n13697;EGYPTIAN HIEROGLYPH-13697;Lo;0;L;;;;;N;;;;;\n13698;EGYPTIAN HIEROGLYPH-13698;Lo;0;L;;;;;N;;;;;\n13699;EGYPTIAN HIEROGLYPH-13699;Lo;0;L;;;;;N;;;;;\n1369A;EGYPTIAN HIEROGLYPH-1369A;Lo;0;L;;;;;N;;;;;\n1369B;EGYPTIAN HIEROGLYPH-1369B;Lo;0;L;;;;;N;;;;;\n1369C;EGYPTIAN HIEROGLYPH-1369C;Lo;0;L;;;;;N;;;;;\n1369D;EGYPTIAN HIEROGLYPH-1369D;Lo;0;L;;;;;N;;;;;\n1369E;EGYPTIAN HIEROGLYPH-1369E;Lo;0;L;;;;;N;;;;;\n1369F;EGYPTIAN HIEROGLYPH-1369F;Lo;0;L;;;;;N;;;;;\n136A0;EGYPTIAN HIEROGLYPH-136A0;Lo;0;L;;;;;N;;;;;\n136A1;EGYPTIAN HIEROGLYPH-136A1;Lo;0;L;;;;;N;;;;;\n136A2;EGYPTIAN HIEROGLYPH-136A2;Lo;0;L;;;;;N;;;;;\n136A3;EGYPTIAN HIEROGLYPH-136A3;Lo;0;L;;;;;N;;;;;\n136A4;EGYPTIAN HIEROGLYPH-136A4;Lo;0;L;;;;;N;;;;;\n136A5;EGYPTIAN HIEROGLYPH-136A5;Lo;0;L;;;;;N;;;;;\n136A6;EGYPTIAN HIEROGLYPH-136A6;Lo;0;L;;;;;N;;;;;\n136A7;EGYPTIAN HIEROGLYPH-136A7;Lo;0;L;;;;;N;;;;;\n136A8;EGYPTIAN HIEROGLYPH-136A8;Lo;0;L;;;;;N;;;;;\n136A9;EGYPTIAN HIEROGLYPH-136A9;Lo;0;L;;;;;N;;;;;\n136AA;EGYPTIAN HIEROGLYPH-136AA;Lo;0;L;;;;;N;;;;;\n136AB;EGYPTIAN HIEROGLYPH-136AB;Lo;0;L;;;;;N;;;;;\n136AC;EGYPTIAN HIEROGLYPH-136AC;Lo;0;L;;;;;N;;;;;\n136AD;EGYPTIAN HIEROGLYPH-136AD;Lo;0;L;;;;;N;;;;;\n136AE;EGYPTIAN HIEROGLYPH-136AE;Lo;0;L;;;;;N;;;;;\n136AF;EGYPTIAN HIEROGLYPH-136AF;Lo;0;L;;;;;N;;;;;\n136B0;EGYPTIAN HIEROGLYPH-136B0;Lo;0;L;;;;;N;;;;;\n136B1;EGYPTIAN HIEROGLYPH-136B1;Lo;0;L;;;;;N;;;;;\n136B2;EGYPTIAN HIEROGLYPH-136B2;Lo;0;L;;;;;N;;;;;\n136B3;EGYPTIAN HIEROGLYPH-136B3;Lo;0;L;;;;;N;;;;;\n136B4;EGYPTIAN HIEROGLYPH-136B4;Lo;0;L;;;;;N;;;;;\n136B5;EGYPTIAN HIEROGLYPH-136B5;Lo;0;L;;;;;N;;;;;\n136B6;EGYPTIAN HIEROGLYPH-136B6;Lo;0;L;;;;;N;;;;;\n136B7;EGYPTIAN HIEROGLYPH-136B7;Lo;0;L;;;;;N;;;;;\n136B8;EGYPTIAN HIEROGLYPH-136B8;Lo;0;L;;;;;N;;;;;\n136B9;EGYPTIAN HIEROGLYPH-136B9;Lo;0;L;;;;;N;;;;;\n136BA;EGYPTIAN HIEROGLYPH-136BA;Lo;0;L;;;;;N;;;;;\n136BB;EGYPTIAN HIEROGLYPH-136BB;Lo;0;L;;;;;N;;;;;\n136BC;EGYPTIAN HIEROGLYPH-136BC;Lo;0;L;;;;;N;;;;;\n136BD;EGYPTIAN HIEROGLYPH-136BD;Lo;0;L;;;;;N;;;;;\n136BE;EGYPTIAN HIEROGLYPH-136BE;Lo;0;L;;;;;N;;;;;\n136BF;EGYPTIAN HIEROGLYPH-136BF;Lo;0;L;;;;;N;;;;;\n136C0;EGYPTIAN HIEROGLYPH-136C0;Lo;0;L;;;;;N;;;;;\n136C1;EGYPTIAN HIEROGLYPH-136C1;Lo;0;L;;;;;N;;;;;\n136C2;EGYPTIAN HIEROGLYPH-136C2;Lo;0;L;;;;;N;;;;;\n136C3;EGYPTIAN HIEROGLYPH-136C3;Lo;0;L;;;;;N;;;;;\n136C4;EGYPTIAN HIEROGLYPH-136C4;Lo;0;L;;;;;N;;;;;\n136C5;EGYPTIAN HIEROGLYPH-136C5;Lo;0;L;;;;;N;;;;;\n136C6;EGYPTIAN HIEROGLYPH-136C6;Lo;0;L;;;;;N;;;;;\n136C7;EGYPTIAN HIEROGLYPH-136C7;Lo;0;L;;;;;N;;;;;\n136C8;EGYPTIAN HIEROGLYPH-136C8;Lo;0;L;;;;;N;;;;;\n136C9;EGYPTIAN HIEROGLYPH-136C9;Lo;0;L;;;;;N;;;;;\n136CA;EGYPTIAN HIEROGLYPH-136CA;Lo;0;L;;;;;N;;;;;\n136CB;EGYPTIAN HIEROGLYPH-136CB;Lo;0;L;;;;;N;;;;;\n136CC;EGYPTIAN HIEROGLYPH-136CC;Lo;0;L;;;;;N;;;;;\n136CD;EGYPTIAN HIEROGLYPH-136CD;Lo;0;L;;;;;N;;;;;\n136CE;EGYPTIAN HIEROGLYPH-136CE;Lo;0;L;;;;;N;;;;;\n136CF;EGYPTIAN HIEROGLYPH-136CF;Lo;0;L;;;;;N;;;;;\n136D0;EGYPTIAN HIEROGLYPH-136D0;Lo;0;L;;;;;N;;;;;\n136D1;EGYPTIAN HIEROGLYPH-136D1;Lo;0;L;;;;;N;;;;;\n136D2;EGYPTIAN HIEROGLYPH-136D2;Lo;0;L;;;;;N;;;;;\n136D3;EGYPTIAN HIEROGLYPH-136D3;Lo;0;L;;;;;N;;;;;\n136D4;EGYPTIAN HIEROGLYPH-136D4;Lo;0;L;;;;;N;;;;;\n136D5;EGYPTIAN HIEROGLYPH-136D5;Lo;0;L;;;;;N;;;;;\n136D6;EGYPTIAN HIEROGLYPH-136D6;Lo;0;L;;;;;N;;;;;\n136D7;EGYPTIAN HIEROGLYPH-136D7;Lo;0;L;;;;;N;;;;;\n136D8;EGYPTIAN HIEROGLYPH-136D8;Lo;0;L;;;;;N;;;;;\n136D9;EGYPTIAN HIEROGLYPH-136D9;Lo;0;L;;;;;N;;;;;\n136DA;EGYPTIAN HIEROGLYPH-136DA;Lo;0;L;;;;;N;;;;;\n136DB;EGYPTIAN HIEROGLYPH-136DB;Lo;0;L;;;;;N;;;;;\n136DC;EGYPTIAN HIEROGLYPH-136DC;Lo;0;L;;;;;N;;;;;\n136DD;EGYPTIAN HIEROGLYPH-136DD;Lo;0;L;;;;;N;;;;;\n136DE;EGYPTIAN HIEROGLYPH-136DE;Lo;0;L;;;;;N;;;;;\n136DF;EGYPTIAN HIEROGLYPH-136DF;Lo;0;L;;;;;N;;;;;\n136E0;EGYPTIAN HIEROGLYPH-136E0;Lo;0;L;;;;;N;;;;;\n136E1;EGYPTIAN HIEROGLYPH-136E1;Lo;0;L;;;;;N;;;;;\n136E2;EGYPTIAN HIEROGLYPH-136E2;Lo;0;L;;;;;N;;;;;\n136E3;EGYPTIAN HIEROGLYPH-136E3;Lo;0;L;;;;;N;;;;;\n136E4;EGYPTIAN HIEROGLYPH-136E4;Lo;0;L;;;;;N;;;;;\n136E5;EGYPTIAN HIEROGLYPH-136E5;Lo;0;L;;;;;N;;;;;\n136E6;EGYPTIAN HIEROGLYPH-136E6;Lo;0;L;;;;;N;;;;;\n136E7;EGYPTIAN HIEROGLYPH-136E7;Lo;0;L;;;;;N;;;;;\n136E8;EGYPTIAN HIEROGLYPH-136E8;Lo;0;L;;;;;N;;;;;\n136E9;EGYPTIAN HIEROGLYPH-136E9;Lo;0;L;;;;;N;;;;;\n136EA;EGYPTIAN HIEROGLYPH-136EA;Lo;0;L;;;;;N;;;;;\n136EB;EGYPTIAN HIEROGLYPH-136EB;Lo;0;L;;;;;N;;;;;\n136EC;EGYPTIAN HIEROGLYPH-136EC;Lo;0;L;;;;;N;;;;;\n136ED;EGYPTIAN HIEROGLYPH-136ED;Lo;0;L;;;;;N;;;;;\n136EE;EGYPTIAN HIEROGLYPH-136EE;Lo;0;L;;;;;N;;;;;\n136EF;EGYPTIAN HIEROGLYPH-136EF;Lo;0;L;;;;;N;;;;;\n136F0;EGYPTIAN HIEROGLYPH-136F0;Lo;0;L;;;;;N;;;;;\n136F1;EGYPTIAN HIEROGLYPH-136F1;Lo;0;L;;;;;N;;;;;\n136F2;EGYPTIAN HIEROGLYPH-136F2;Lo;0;L;;;;;N;;;;;\n136F3;EGYPTIAN HIEROGLYPH-136F3;Lo;0;L;;;;;N;;;;;\n136F4;EGYPTIAN HIEROGLYPH-136F4;Lo;0;L;;;;;N;;;;;\n136F5;EGYPTIAN HIEROGLYPH-136F5;Lo;0;L;;;;;N;;;;;\n136F6;EGYPTIAN HIEROGLYPH-136F6;Lo;0;L;;;;;N;;;;;\n136F7;EGYPTIAN HIEROGLYPH-136F7;Lo;0;L;;;;;N;;;;;\n136F8;EGYPTIAN HIEROGLYPH-136F8;Lo;0;L;;;;;N;;;;;\n136F9;EGYPTIAN HIEROGLYPH-136F9;Lo;0;L;;;;;N;;;;;\n136FA;EGYPTIAN HIEROGLYPH-136FA;Lo;0;L;;;;;N;;;;;\n136FB;EGYPTIAN HIEROGLYPH-136FB;Lo;0;L;;;;;N;;;;;\n136FC;EGYPTIAN HIEROGLYPH-136FC;Lo;0;L;;;;;N;;;;;\n136FD;EGYPTIAN HIEROGLYPH-136FD;Lo;0;L;;;;;N;;;;;\n136FE;EGYPTIAN HIEROGLYPH-136FE;Lo;0;L;;;;;N;;;;;\n136FF;EGYPTIAN HIEROGLYPH-136FF;Lo;0;L;;;;;N;;;;;\n13700;EGYPTIAN HIEROGLYPH-13700;Lo;0;L;;;;;N;;;;;\n13701;EGYPTIAN HIEROGLYPH-13701;Lo;0;L;;;;;N;;;;;\n13702;EGYPTIAN HIEROGLYPH-13702;Lo;0;L;;;;;N;;;;;\n13703;EGYPTIAN HIEROGLYPH-13703;Lo;0;L;;;;;N;;;;;\n13704;EGYPTIAN HIEROGLYPH-13704;Lo;0;L;;;;;N;;;;;\n13705;EGYPTIAN HIEROGLYPH-13705;Lo;0;L;;;;;N;;;;;\n13706;EGYPTIAN HIEROGLYPH-13706;Lo;0;L;;;;;N;;;;;\n13707;EGYPTIAN HIEROGLYPH-13707;Lo;0;L;;;;;N;;;;;\n13708;EGYPTIAN HIEROGLYPH-13708;Lo;0;L;;;;;N;;;;;\n13709;EGYPTIAN HIEROGLYPH-13709;Lo;0;L;;;;;N;;;;;\n1370A;EGYPTIAN HIEROGLYPH-1370A;Lo;0;L;;;;;N;;;;;\n1370B;EGYPTIAN HIEROGLYPH-1370B;Lo;0;L;;;;;N;;;;;\n1370C;EGYPTIAN HIEROGLYPH-1370C;Lo;0;L;;;;;N;;;;;\n1370D;EGYPTIAN HIEROGLYPH-1370D;Lo;0;L;;;;;N;;;;;\n1370E;EGYPTIAN HIEROGLYPH-1370E;Lo;0;L;;;;;N;;;;;\n1370F;EGYPTIAN HIEROGLYPH-1370F;Lo;0;L;;;;;N;;;;;\n13710;EGYPTIAN HIEROGLYPH-13710;Lo;0;L;;;;;N;;;;;\n13711;EGYPTIAN HIEROGLYPH-13711;Lo;0;L;;;;;N;;;;;\n13712;EGYPTIAN HIEROGLYPH-13712;Lo;0;L;;;;;N;;;;;\n13713;EGYPTIAN HIEROGLYPH-13713;Lo;0;L;;;;;N;;;;;\n13714;EGYPTIAN HIEROGLYPH-13714;Lo;0;L;;;;;N;;;;;\n13715;EGYPTIAN HIEROGLYPH-13715;Lo;0;L;;;;;N;;;;;\n13716;EGYPTIAN HIEROGLYPH-13716;Lo;0;L;;;;;N;;;;;\n13717;EGYPTIAN HIEROGLYPH-13717;Lo;0;L;;;;;N;;;;;\n13718;EGYPTIAN HIEROGLYPH-13718;Lo;0;L;;;;;N;;;;;\n13719;EGYPTIAN HIEROGLYPH-13719;Lo;0;L;;;;;N;;;;;\n1371A;EGYPTIAN HIEROGLYPH-1371A;Lo;0;L;;;;;N;;;;;\n1371B;EGYPTIAN HIEROGLYPH-1371B;Lo;0;L;;;;;N;;;;;\n1371C;EGYPTIAN HIEROGLYPH-1371C;Lo;0;L;;;;;N;;;;;\n1371D;EGYPTIAN HIEROGLYPH-1371D;Lo;0;L;;;;;N;;;;;\n1371E;EGYPTIAN HIEROGLYPH-1371E;Lo;0;L;;;;;N;;;;;\n1371F;EGYPTIAN HIEROGLYPH-1371F;Lo;0;L;;;;;N;;;;;\n13720;EGYPTIAN HIEROGLYPH-13720;Lo;0;L;;;;;N;;;;;\n13721;EGYPTIAN HIEROGLYPH-13721;Lo;0;L;;;;;N;;;;;\n13722;EGYPTIAN HIEROGLYPH-13722;Lo;0;L;;;;;N;;;;;\n13723;EGYPTIAN HIEROGLYPH-13723;Lo;0;L;;;;;N;;;;;\n13724;EGYPTIAN HIEROGLYPH-13724;Lo;0;L;;;;;N;;;;;\n13725;EGYPTIAN HIEROGLYPH-13725;Lo;0;L;;;;;N;;;;;\n13726;EGYPTIAN HIEROGLYPH-13726;Lo;0;L;;;;;N;;;;;\n13727;EGYPTIAN HIEROGLYPH-13727;Lo;0;L;;;;;N;;;;;\n13728;EGYPTIAN HIEROGLYPH-13728;Lo;0;L;;;;;N;;;;;\n13729;EGYPTIAN HIEROGLYPH-13729;Lo;0;L;;;;;N;;;;;\n1372A;EGYPTIAN HIEROGLYPH-1372A;Lo;0;L;;;;;N;;;;;\n1372B;EGYPTIAN HIEROGLYPH-1372B;Lo;0;L;;;;;N;;;;;\n1372C;EGYPTIAN HIEROGLYPH-1372C;Lo;0;L;;;;;N;;;;;\n1372D;EGYPTIAN HIEROGLYPH-1372D;Lo;0;L;;;;;N;;;;;\n1372E;EGYPTIAN HIEROGLYPH-1372E;Lo;0;L;;;;;N;;;;;\n1372F;EGYPTIAN HIEROGLYPH-1372F;Lo;0;L;;;;;N;;;;;\n13730;EGYPTIAN HIEROGLYPH-13730;Lo;0;L;;;;;N;;;;;\n13731;EGYPTIAN HIEROGLYPH-13731;Lo;0;L;;;;;N;;;;;\n13732;EGYPTIAN HIEROGLYPH-13732;Lo;0;L;;;;;N;;;;;\n13733;EGYPTIAN HIEROGLYPH-13733;Lo;0;L;;;;;N;;;;;\n13734;EGYPTIAN HIEROGLYPH-13734;Lo;0;L;;;;;N;;;;;\n13735;EGYPTIAN HIEROGLYPH-13735;Lo;0;L;;;;;N;;;;;\n13736;EGYPTIAN HIEROGLYPH-13736;Lo;0;L;;;;;N;;;;;\n13737;EGYPTIAN HIEROGLYPH-13737;Lo;0;L;;;;;N;;;;;\n13738;EGYPTIAN HIEROGLYPH-13738;Lo;0;L;;;;;N;;;;;\n13739;EGYPTIAN HIEROGLYPH-13739;Lo;0;L;;;;;N;;;;;\n1373A;EGYPTIAN HIEROGLYPH-1373A;Lo;0;L;;;;;N;;;;;\n1373B;EGYPTIAN HIEROGLYPH-1373B;Lo;0;L;;;;;N;;;;;\n1373C;EGYPTIAN HIEROGLYPH-1373C;Lo;0;L;;;;;N;;;;;\n1373D;EGYPTIAN HIEROGLYPH-1373D;Lo;0;L;;;;;N;;;;;\n1373E;EGYPTIAN HIEROGLYPH-1373E;Lo;0;L;;;;;N;;;;;\n1373F;EGYPTIAN HIEROGLYPH-1373F;Lo;0;L;;;;;N;;;;;\n13740;EGYPTIAN HIEROGLYPH-13740;Lo;0;L;;;;;N;;;;;\n13741;EGYPTIAN HIEROGLYPH-13741;Lo;0;L;;;;;N;;;;;\n13742;EGYPTIAN HIEROGLYPH-13742;Lo;0;L;;;;;N;;;;;\n13743;EGYPTIAN HIEROGLYPH-13743;Lo;0;L;;;;;N;;;;;\n13744;EGYPTIAN HIEROGLYPH-13744;Lo;0;L;;;;;N;;;;;\n13745;EGYPTIAN HIEROGLYPH-13745;Lo;0;L;;;;;N;;;;;\n13746;EGYPTIAN HIEROGLYPH-13746;Lo;0;L;;;;;N;;;;;\n13747;EGYPTIAN HIEROGLYPH-13747;Lo;0;L;;;;;N;;;;;\n13748;EGYPTIAN HIEROGLYPH-13748;Lo;0;L;;;;;N;;;;;\n13749;EGYPTIAN HIEROGLYPH-13749;Lo;0;L;;;;;N;;;;;\n1374A;EGYPTIAN HIEROGLYPH-1374A;Lo;0;L;;;;;N;;;;;\n1374B;EGYPTIAN HIEROGLYPH-1374B;Lo;0;L;;;;;N;;;;;\n1374C;EGYPTIAN HIEROGLYPH-1374C;Lo;0;L;;;;;N;;;;;\n1374D;EGYPTIAN HIEROGLYPH-1374D;Lo;0;L;;;;;N;;;;;\n1374E;EGYPTIAN HIEROGLYPH-1374E;Lo;0;L;;;;;N;;;;;\n1374F;EGYPTIAN HIEROGLYPH-1374F;Lo;0;L;;;;;N;;;;;\n13750;EGYPTIAN HIEROGLYPH-13750;Lo;0;L;;;;;N;;;;;\n13751;EGYPTIAN HIEROGLYPH-13751;Lo;0;L;;;;;N;;;;;\n13752;EGYPTIAN HIEROGLYPH-13752;Lo;0;L;;;;;N;;;;;\n13753;EGYPTIAN HIEROGLYPH-13753;Lo;0;L;;;;;N;;;;;\n13754;EGYPTIAN HIEROGLYPH-13754;Lo;0;L;;;;;N;;;;;\n13755;EGYPTIAN HIEROGLYPH-13755;Lo;0;L;;;;;N;;;;;\n13756;EGYPTIAN HIEROGLYPH-13756;Lo;0;L;;;;;N;;;;;\n13757;EGYPTIAN HIEROGLYPH-13757;Lo;0;L;;;;;N;;;;;\n13758;EGYPTIAN HIEROGLYPH-13758;Lo;0;L;;;;;N;;;;;\n13759;EGYPTIAN HIEROGLYPH-13759;Lo;0;L;;;;;N;;;;;\n1375A;EGYPTIAN HIEROGLYPH-1375A;Lo;0;L;;;;;N;;;;;\n1375B;EGYPTIAN HIEROGLYPH-1375B;Lo;0;L;;;;;N;;;;;\n1375C;EGYPTIAN HIEROGLYPH-1375C;Lo;0;L;;;;;N;;;;;\n1375D;EGYPTIAN HIEROGLYPH-1375D;Lo;0;L;;;;;N;;;;;\n1375E;EGYPTIAN HIEROGLYPH-1375E;Lo;0;L;;;;;N;;;;;\n1375F;EGYPTIAN HIEROGLYPH-1375F;Lo;0;L;;;;;N;;;;;\n13760;EGYPTIAN HIEROGLYPH-13760;Lo;0;L;;;;;N;;;;;\n13761;EGYPTIAN HIEROGLYPH-13761;Lo;0;L;;;;;N;;;;;\n13762;EGYPTIAN HIEROGLYPH-13762;Lo;0;L;;;;;N;;;;;\n13763;EGYPTIAN HIEROGLYPH-13763;Lo;0;L;;;;;N;;;;;\n13764;EGYPTIAN HIEROGLYPH-13764;Lo;0;L;;;;;N;;;;;\n13765;EGYPTIAN HIEROGLYPH-13765;Lo;0;L;;;;;N;;;;;\n13766;EGYPTIAN HIEROGLYPH-13766;Lo;0;L;;;;;N;;;;;\n13767;EGYPTIAN HIEROGLYPH-13767;Lo;0;L;;;;;N;;;;;\n13768;EGYPTIAN HIEROGLYPH-13768;Lo;0;L;;;;;N;;;;;\n13769;EGYPTIAN HIEROGLYPH-13769;Lo;0;L;;;;;N;;;;;\n1376A;EGYPTIAN HIEROGLYPH-1376A;Lo;0;L;;;;;N;;;;;\n1376B;EGYPTIAN HIEROGLYPH-1376B;Lo;0;L;;;;;N;;;;;\n1376C;EGYPTIAN HIEROGLYPH-1376C;Lo;0;L;;;;;N;;;;;\n1376D;EGYPTIAN HIEROGLYPH-1376D;Lo;0;L;;;;;N;;;;;\n1376E;EGYPTIAN HIEROGLYPH-1376E;Lo;0;L;;;;;N;;;;;\n1376F;EGYPTIAN HIEROGLYPH-1376F;Lo;0;L;;;;;N;;;;;\n13770;EGYPTIAN HIEROGLYPH-13770;Lo;0;L;;;;;N;;;;;\n13771;EGYPTIAN HIEROGLYPH-13771;Lo;0;L;;;;;N;;;;;\n13772;EGYPTIAN HIEROGLYPH-13772;Lo;0;L;;;;;N;;;;;\n13773;EGYPTIAN HIEROGLYPH-13773;Lo;0;L;;;;;N;;;;;\n13774;EGYPTIAN HIEROGLYPH-13774;Lo;0;L;;;;;N;;;;;\n13775;EGYPTIAN HIEROGLYPH-13775;Lo;0;L;;;;;N;;;;;\n13776;EGYPTIAN HIEROGLYPH-13776;Lo;0;L;;;;;N;;;;;\n13777;EGYPTIAN HIEROGLYPH-13777;Lo;0;L;;;;;N;;;;;\n13778;EGYPTIAN HIEROGLYPH-13778;Lo;0;L;;;;;N;;;;;\n13779;EGYPTIAN HIEROGLYPH-13779;Lo;0;L;;;;;N;;;;;\n1377A;EGYPTIAN HIEROGLYPH-1377A;Lo;0;L;;;;;N;;;;;\n1377B;EGYPTIAN HIEROGLYPH-1377B;Lo;0;L;;;;;N;;;;;\n1377C;EGYPTIAN HIEROGLYPH-1377C;Lo;0;L;;;;;N;;;;;\n1377D;EGYPTIAN HIEROGLYPH-1377D;Lo;0;L;;;;;N;;;;;\n1377E;EGYPTIAN HIEROGLYPH-1377E;Lo;0;L;;;;;N;;;;;\n1377F;EGYPTIAN HIEROGLYPH-1377F;Lo;0;L;;;;;N;;;;;\n13780;EGYPTIAN HIEROGLYPH-13780;Lo;0;L;;;;;N;;;;;\n13781;EGYPTIAN HIEROGLYPH-13781;Lo;0;L;;;;;N;;;;;\n13782;EGYPTIAN HIEROGLYPH-13782;Lo;0;L;;;;;N;;;;;\n13783;EGYPTIAN HIEROGLYPH-13783;Lo;0;L;;;;;N;;;;;\n13784;EGYPTIAN HIEROGLYPH-13784;Lo;0;L;;;;;N;;;;;\n13785;EGYPTIAN HIEROGLYPH-13785;Lo;0;L;;;;;N;;;;;\n13786;EGYPTIAN HIEROGLYPH-13786;Lo;0;L;;;;;N;;;;;\n13787;EGYPTIAN HIEROGLYPH-13787;Lo;0;L;;;;;N;;;;;\n13788;EGYPTIAN HIEROGLYPH-13788;Lo;0;L;;;;;N;;;;;\n13789;EGYPTIAN HIEROGLYPH-13789;Lo;0;L;;;;;N;;;;;\n1378A;EGYPTIAN HIEROGLYPH-1378A;Lo;0;L;;;;;N;;;;;\n1378B;EGYPTIAN HIEROGLYPH-1378B;Lo;0;L;;;;;N;;;;;\n1378C;EGYPTIAN HIEROGLYPH-1378C;Lo;0;L;;;;;N;;;;;\n1378D;EGYPTIAN HIEROGLYPH-1378D;Lo;0;L;;;;;N;;;;;\n1378E;EGYPTIAN HIEROGLYPH-1378E;Lo;0;L;;;;;N;;;;;\n1378F;EGYPTIAN HIEROGLYPH-1378F;Lo;0;L;;;;;N;;;;;\n13790;EGYPTIAN HIEROGLYPH-13790;Lo;0;L;;;;;N;;;;;\n13791;EGYPTIAN HIEROGLYPH-13791;Lo;0;L;;;;;N;;;;;\n13792;EGYPTIAN HIEROGLYPH-13792;Lo;0;L;;;;;N;;;;;\n13793;EGYPTIAN HIEROGLYPH-13793;Lo;0;L;;;;;N;;;;;\n13794;EGYPTIAN HIEROGLYPH-13794;Lo;0;L;;;;;N;;;;;\n13795;EGYPTIAN HIEROGLYPH-13795;Lo;0;L;;;;;N;;;;;\n13796;EGYPTIAN HIEROGLYPH-13796;Lo;0;L;;;;;N;;;;;\n13797;EGYPTIAN HIEROGLYPH-13797;Lo;0;L;;;;;N;;;;;\n13798;EGYPTIAN HIEROGLYPH-13798;Lo;0;L;;;;;N;;;;;\n13799;EGYPTIAN HIEROGLYPH-13799;Lo;0;L;;;;;N;;;;;\n1379A;EGYPTIAN HIEROGLYPH-1379A;Lo;0;L;;;;;N;;;;;\n1379B;EGYPTIAN HIEROGLYPH-1379B;Lo;0;L;;;;;N;;;;;\n1379C;EGYPTIAN HIEROGLYPH-1379C;Lo;0;L;;;;;N;;;;;\n1379D;EGYPTIAN HIEROGLYPH-1379D;Lo;0;L;;;;;N;;;;;\n1379E;EGYPTIAN HIEROGLYPH-1379E;Lo;0;L;;;;;N;;;;;\n1379F;EGYPTIAN HIEROGLYPH-1379F;Lo;0;L;;;;;N;;;;;\n137A0;EGYPTIAN HIEROGLYPH-137A0;Lo;0;L;;;;;N;;;;;\n137A1;EGYPTIAN HIEROGLYPH-137A1;Lo;0;L;;;;;N;;;;;\n137A2;EGYPTIAN HIEROGLYPH-137A2;Lo;0;L;;;;;N;;;;;\n137A3;EGYPTIAN HIEROGLYPH-137A3;Lo;0;L;;;;;N;;;;;\n137A4;EGYPTIAN HIEROGLYPH-137A4;Lo;0;L;;;;;N;;;;;\n137A5;EGYPTIAN HIEROGLYPH-137A5;Lo;0;L;;;;;N;;;;;\n137A6;EGYPTIAN HIEROGLYPH-137A6;Lo;0;L;;;;;N;;;;;\n137A7;EGYPTIAN HIEROGLYPH-137A7;Lo;0;L;;;;;N;;;;;\n137A8;EGYPTIAN HIEROGLYPH-137A8;Lo;0;L;;;;;N;;;;;\n137A9;EGYPTIAN HIEROGLYPH-137A9;Lo;0;L;;;;;N;;;;;\n137AA;EGYPTIAN HIEROGLYPH-137AA;Lo;0;L;;;;;N;;;;;\n137AB;EGYPTIAN HIEROGLYPH-137AB;Lo;0;L;;;;;N;;;;;\n137AC;EGYPTIAN HIEROGLYPH-137AC;Lo;0;L;;;;;N;;;;;\n137AD;EGYPTIAN HIEROGLYPH-137AD;Lo;0;L;;;;;N;;;;;\n137AE;EGYPTIAN HIEROGLYPH-137AE;Lo;0;L;;;;;N;;;;;\n137AF;EGYPTIAN HIEROGLYPH-137AF;Lo;0;L;;;;;N;;;;;\n137B0;EGYPTIAN HIEROGLYPH-137B0;Lo;0;L;;;;;N;;;;;\n137B1;EGYPTIAN HIEROGLYPH-137B1;Lo;0;L;;;;;N;;;;;\n137B2;EGYPTIAN HIEROGLYPH-137B2;Lo;0;L;;;;;N;;;;;\n137B3;EGYPTIAN HIEROGLYPH-137B3;Lo;0;L;;;;;N;;;;;\n137B4;EGYPTIAN HIEROGLYPH-137B4;Lo;0;L;;;;;N;;;;;\n137B5;EGYPTIAN HIEROGLYPH-137B5;Lo;0;L;;;;;N;;;;;\n137B6;EGYPTIAN HIEROGLYPH-137B6;Lo;0;L;;;;;N;;;;;\n137B7;EGYPTIAN HIEROGLYPH-137B7;Lo;0;L;;;;;N;;;;;\n137B8;EGYPTIAN HIEROGLYPH-137B8;Lo;0;L;;;;;N;;;;;\n137B9;EGYPTIAN HIEROGLYPH-137B9;Lo;0;L;;;;;N;;;;;\n137BA;EGYPTIAN HIEROGLYPH-137BA;Lo;0;L;;;;;N;;;;;\n137BB;EGYPTIAN HIEROGLYPH-137BB;Lo;0;L;;;;;N;;;;;\n137BC;EGYPTIAN HIEROGLYPH-137BC;Lo;0;L;;;;;N;;;;;\n137BD;EGYPTIAN HIEROGLYPH-137BD;Lo;0;L;;;;;N;;;;;\n137BE;EGYPTIAN HIEROGLYPH-137BE;Lo;0;L;;;;;N;;;;;\n137BF;EGYPTIAN HIEROGLYPH-137BF;Lo;0;L;;;;;N;;;;;\n137C0;EGYPTIAN HIEROGLYPH-137C0;Lo;0;L;;;;;N;;;;;\n137C1;EGYPTIAN HIEROGLYPH-137C1;Lo;0;L;;;;;N;;;;;\n137C2;EGYPTIAN HIEROGLYPH-137C2;Lo;0;L;;;;;N;;;;;\n137C3;EGYPTIAN HIEROGLYPH-137C3;Lo;0;L;;;;;N;;;;;\n137C4;EGYPTIAN HIEROGLYPH-137C4;Lo;0;L;;;;;N;;;;;\n137C5;EGYPTIAN HIEROGLYPH-137C5;Lo;0;L;;;;;N;;;;;\n137C6;EGYPTIAN HIEROGLYPH-137C6;Lo;0;L;;;;;N;;;;;\n137C7;EGYPTIAN HIEROGLYPH-137C7;Lo;0;L;;;;;N;;;;;\n137C8;EGYPTIAN HIEROGLYPH-137C8;Lo;0;L;;;;;N;;;;;\n137C9;EGYPTIAN HIEROGLYPH-137C9;Lo;0;L;;;;;N;;;;;\n137CA;EGYPTIAN HIEROGLYPH-137CA;Lo;0;L;;;;;N;;;;;\n137CB;EGYPTIAN HIEROGLYPH-137CB;Lo;0;L;;;;;N;;;;;\n137CC;EGYPTIAN HIEROGLYPH-137CC;Lo;0;L;;;;;N;;;;;\n137CD;EGYPTIAN HIEROGLYPH-137CD;Lo;0;L;;;;;N;;;;;\n137CE;EGYPTIAN HIEROGLYPH-137CE;Lo;0;L;;;;;N;;;;;\n137CF;EGYPTIAN HIEROGLYPH-137CF;Lo;0;L;;;;;N;;;;;\n137D0;EGYPTIAN HIEROGLYPH-137D0;Lo;0;L;;;;;N;;;;;\n137D1;EGYPTIAN HIEROGLYPH-137D1;Lo;0;L;;;;;N;;;;;\n137D2;EGYPTIAN HIEROGLYPH-137D2;Lo;0;L;;;;;N;;;;;\n137D3;EGYPTIAN HIEROGLYPH-137D3;Lo;0;L;;;;;N;;;;;\n137D4;EGYPTIAN HIEROGLYPH-137D4;Lo;0;L;;;;;N;;;;;\n137D5;EGYPTIAN HIEROGLYPH-137D5;Lo;0;L;;;;;N;;;;;\n137D6;EGYPTIAN HIEROGLYPH-137D6;Lo;0;L;;;;;N;;;;;\n137D7;EGYPTIAN HIEROGLYPH-137D7;Lo;0;L;;;;;N;;;;;\n137D8;EGYPTIAN HIEROGLYPH-137D8;Lo;0;L;;;;;N;;;;;\n137D9;EGYPTIAN HIEROGLYPH-137D9;Lo;0;L;;;;;N;;;;;\n137DA;EGYPTIAN HIEROGLYPH-137DA;Lo;0;L;;;;;N;;;;;\n137DB;EGYPTIAN HIEROGLYPH-137DB;Lo;0;L;;;;;N;;;;;\n137DC;EGYPTIAN HIEROGLYPH-137DC;Lo;0;L;;;;;N;;;;;\n137DD;EGYPTIAN HIEROGLYPH-137DD;Lo;0;L;;;;;N;;;;;\n137DE;EGYPTIAN HIEROGLYPH-137DE;Lo;0;L;;;;;N;;;;;\n137DF;EGYPTIAN HIEROGLYPH-137DF;Lo;0;L;;;;;N;;;;;\n137E0;EGYPTIAN HIEROGLYPH-137E0;Lo;0;L;;;;;N;;;;;\n137E1;EGYPTIAN HIEROGLYPH-137E1;Lo;0;L;;;;;N;;;;;\n137E2;EGYPTIAN HIEROGLYPH-137E2;Lo;0;L;;;;;N;;;;;\n137E3;EGYPTIAN HIEROGLYPH-137E3;Lo;0;L;;;;;N;;;;;\n137E4;EGYPTIAN HIEROGLYPH-137E4;Lo;0;L;;;;;N;;;;;\n137E5;EGYPTIAN HIEROGLYPH-137E5;Lo;0;L;;;;;N;;;;;\n137E6;EGYPTIAN HIEROGLYPH-137E6;Lo;0;L;;;;;N;;;;;\n137E7;EGYPTIAN HIEROGLYPH-137E7;Lo;0;L;;;;;N;;;;;\n137E8;EGYPTIAN HIEROGLYPH-137E8;Lo;0;L;;;;;N;;;;;\n137E9;EGYPTIAN HIEROGLYPH-137E9;Lo;0;L;;;;;N;;;;;\n137EA;EGYPTIAN HIEROGLYPH-137EA;Lo;0;L;;;;;N;;;;;\n137EB;EGYPTIAN HIEROGLYPH-137EB;Lo;0;L;;;;;N;;;;;\n137EC;EGYPTIAN HIEROGLYPH-137EC;Lo;0;L;;;;;N;;;;;\n137ED;EGYPTIAN HIEROGLYPH-137ED;Lo;0;L;;;;;N;;;;;\n137EE;EGYPTIAN HIEROGLYPH-137EE;Lo;0;L;;;;;N;;;;;\n137EF;EGYPTIAN HIEROGLYPH-137EF;Lo;0;L;;;;;N;;;;;\n137F0;EGYPTIAN HIEROGLYPH-137F0;Lo;0;L;;;;;N;;;;;\n137F1;EGYPTIAN HIEROGLYPH-137F1;Lo;0;L;;;;;N;;;;;\n137F2;EGYPTIAN HIEROGLYPH-137F2;Lo;0;L;;;;;N;;;;;\n137F3;EGYPTIAN HIEROGLYPH-137F3;Lo;0;L;;;;;N;;;;;\n137F4;EGYPTIAN HIEROGLYPH-137F4;Lo;0;L;;;;;N;;;;;\n137F5;EGYPTIAN HIEROGLYPH-137F5;Lo;0;L;;;;;N;;;;;\n137F6;EGYPTIAN HIEROGLYPH-137F6;Lo;0;L;;;;;N;;;;;\n137F7;EGYPTIAN HIEROGLYPH-137F7;Lo;0;L;;;;;N;;;;;\n137F8;EGYPTIAN HIEROGLYPH-137F8;Lo;0;L;;;;;N;;;;;\n137F9;EGYPTIAN HIEROGLYPH-137F9;Lo;0;L;;;;;N;;;;;\n137FA;EGYPTIAN HIEROGLYPH-137FA;Lo;0;L;;;;;N;;;;;\n137FB;EGYPTIAN HIEROGLYPH-137FB;Lo;0;L;;;;;N;;;;;\n137FC;EGYPTIAN HIEROGLYPH-137FC;Lo;0;L;;;;;N;;;;;\n137FD;EGYPTIAN HIEROGLYPH-137FD;Lo;0;L;;;;;N;;;;;\n137FE;EGYPTIAN HIEROGLYPH-137FE;Lo;0;L;;;;;N;;;;;\n137FF;EGYPTIAN HIEROGLYPH-137FF;Lo;0;L;;;;;N;;;;;\n13800;EGYPTIAN HIEROGLYPH-13800;Lo;0;L;;;;;N;;;;;\n13801;EGYPTIAN HIEROGLYPH-13801;Lo;0;L;;;;;N;;;;;\n13802;EGYPTIAN HIEROGLYPH-13802;Lo;0;L;;;;;N;;;;;\n13803;EGYPTIAN HIEROGLYPH-13803;Lo;0;L;;;;;N;;;;;\n13804;EGYPTIAN HIEROGLYPH-13804;Lo;0;L;;;;;N;;;;;\n13805;EGYPTIAN HIEROGLYPH-13805;Lo;0;L;;;;;N;;;;;\n13806;EGYPTIAN HIEROGLYPH-13806;Lo;0;L;;;;;N;;;;;\n13807;EGYPTIAN HIEROGLYPH-13807;Lo;0;L;;;;;N;;;;;\n13808;EGYPTIAN HIEROGLYPH-13808;Lo;0;L;;;;;N;;;;;\n13809;EGYPTIAN HIEROGLYPH-13809;Lo;0;L;;;;;N;;;;;\n1380A;EGYPTIAN HIEROGLYPH-1380A;Lo;0;L;;;;;N;;;;;\n1380B;EGYPTIAN HIEROGLYPH-1380B;Lo;0;L;;;;;N;;;;;\n1380C;EGYPTIAN HIEROGLYPH-1380C;Lo;0;L;;;;;N;;;;;\n1380D;EGYPTIAN HIEROGLYPH-1380D;Lo;0;L;;;;;N;;;;;\n1380E;EGYPTIAN HIEROGLYPH-1380E;Lo;0;L;;;;;N;;;;;\n1380F;EGYPTIAN HIEROGLYPH-1380F;Lo;0;L;;;;;N;;;;;\n13810;EGYPTIAN HIEROGLYPH-13810;Lo;0;L;;;;;N;;;;;\n13811;EGYPTIAN HIEROGLYPH-13811;Lo;0;L;;;;;N;;;;;\n13812;EGYPTIAN HIEROGLYPH-13812;Lo;0;L;;;;;N;;;;;\n13813;EGYPTIAN HIEROGLYPH-13813;Lo;0;L;;;;;N;;;;;\n13814;EGYPTIAN HIEROGLYPH-13814;Lo;0;L;;;;;N;;;;;\n13815;EGYPTIAN HIEROGLYPH-13815;Lo;0;L;;;;;N;;;;;\n13816;EGYPTIAN HIEROGLYPH-13816;Lo;0;L;;;;;N;;;;;\n13817;EGYPTIAN HIEROGLYPH-13817;Lo;0;L;;;;;N;;;;;\n13818;EGYPTIAN HIEROGLYPH-13818;Lo;0;L;;;;;N;;;;;\n13819;EGYPTIAN HIEROGLYPH-13819;Lo;0;L;;;;;N;;;;;\n1381A;EGYPTIAN HIEROGLYPH-1381A;Lo;0;L;;;;;N;;;;;\n1381B;EGYPTIAN HIEROGLYPH-1381B;Lo;0;L;;;;;N;;;;;\n1381C;EGYPTIAN HIEROGLYPH-1381C;Lo;0;L;;;;;N;;;;;\n1381D;EGYPTIAN HIEROGLYPH-1381D;Lo;0;L;;;;;N;;;;;\n1381E;EGYPTIAN HIEROGLYPH-1381E;Lo;0;L;;;;;N;;;;;\n1381F;EGYPTIAN HIEROGLYPH-1381F;Lo;0;L;;;;;N;;;;;\n13820;EGYPTIAN HIEROGLYPH-13820;Lo;0;L;;;;;N;;;;;\n13821;EGYPTIAN HIEROGLYPH-13821;Lo;0;L;;;;;N;;;;;\n13822;EGYPTIAN HIEROGLYPH-13822;Lo;0;L;;;;;N;;;;;\n13823;EGYPTIAN HIEROGLYPH-13823;Lo;0;L;;;;;N;;;;;\n13824;EGYPTIAN HIEROGLYPH-13824;Lo;0;L;;;;;N;;;;;\n13825;EGYPTIAN HIEROGLYPH-13825;Lo;0;L;;;;;N;;;;;\n13826;EGYPTIAN HIEROGLYPH-13826;Lo;0;L;;;;;N;;;;;\n13827;EGYPTIAN HIEROGLYPH-13827;Lo;0;L;;;;;N;;;;;\n13828;EGYPTIAN HIEROGLYPH-13828;Lo;0;L;;;;;N;;;;;\n13829;EGYPTIAN HIEROGLYPH-13829;Lo;0;L;;;;;N;;;;;\n1382A;EGYPTIAN HIEROGLYPH-1382A;Lo;0;L;;;;;N;;;;;\n1382B;EGYPTIAN HIEROGLYPH-1382B;Lo;0;L;;;;;N;;;;;\n1382C;EGYPTIAN HIEROGLYPH-1382C;Lo;0;L;;;;;N;;;;;\n1382D;EGYPTIAN HIEROGLYPH-1382D;Lo;0;L;;;;;N;;;;;\n1382E;EGYPTIAN HIEROGLYPH-1382E;Lo;0;L;;;;;N;;;;;\n1382F;EGYPTIAN HIEROGLYPH-1382F;Lo;0;L;;;;;N;;;;;\n13830;EGYPTIAN HIEROGLYPH-13830;Lo;0;L;;;;;N;;;;;\n13831;EGYPTIAN HIEROGLYPH-13831;Lo;0;L;;;;;N;;;;;\n13832;EGYPTIAN HIEROGLYPH-13832;Lo;0;L;;;;;N;;;;;\n13833;EGYPTIAN HIEROGLYPH-13833;Lo;0;L;;;;;N;;;;;\n13834;EGYPTIAN HIEROGLYPH-13834;Lo;0;L;;;;;N;;;;;\n13835;EGYPTIAN HIEROGLYPH-13835;Lo;0;L;;;;;N;;;;;\n13836;EGYPTIAN HIEROGLYPH-13836;Lo;0;L;;;;;N;;;;;\n13837;EGYPTIAN HIEROGLYPH-13837;Lo;0;L;;;;;N;;;;;\n13838;EGYPTIAN HIEROGLYPH-13838;Lo;0;L;;;;;N;;;;;\n13839;EGYPTIAN HIEROGLYPH-13839;Lo;0;L;;;;;N;;;;;\n1383A;EGYPTIAN HIEROGLYPH-1383A;Lo;0;L;;;;;N;;;;;\n1383B;EGYPTIAN HIEROGLYPH-1383B;Lo;0;L;;;;;N;;;;;\n1383C;EGYPTIAN HIEROGLYPH-1383C;Lo;0;L;;;;;N;;;;;\n1383D;EGYPTIAN HIEROGLYPH-1383D;Lo;0;L;;;;;N;;;;;\n1383E;EGYPTIAN HIEROGLYPH-1383E;Lo;0;L;;;;;N;;;;;\n1383F;EGYPTIAN HIEROGLYPH-1383F;Lo;0;L;;;;;N;;;;;\n13840;EGYPTIAN HIEROGLYPH-13840;Lo;0;L;;;;;N;;;;;\n13841;EGYPTIAN HIEROGLYPH-13841;Lo;0;L;;;;;N;;;;;\n13842;EGYPTIAN HIEROGLYPH-13842;Lo;0;L;;;;;N;;;;;\n13843;EGYPTIAN HIEROGLYPH-13843;Lo;0;L;;;;;N;;;;;\n13844;EGYPTIAN HIEROGLYPH-13844;Lo;0;L;;;;;N;;;;;\n13845;EGYPTIAN HIEROGLYPH-13845;Lo;0;L;;;;;N;;;;;\n13846;EGYPTIAN HIEROGLYPH-13846;Lo;0;L;;;;;N;;;;;\n13847;EGYPTIAN HIEROGLYPH-13847;Lo;0;L;;;;;N;;;;;\n13848;EGYPTIAN HIEROGLYPH-13848;Lo;0;L;;;;;N;;;;;\n13849;EGYPTIAN HIEROGLYPH-13849;Lo;0;L;;;;;N;;;;;\n1384A;EGYPTIAN HIEROGLYPH-1384A;Lo;0;L;;;;;N;;;;;\n1384B;EGYPTIAN HIEROGLYPH-1384B;Lo;0;L;;;;;N;;;;;\n1384C;EGYPTIAN HIEROGLYPH-1384C;Lo;0;L;;;;;N;;;;;\n1384D;EGYPTIAN HIEROGLYPH-1384D;Lo;0;L;;;;;N;;;;;\n1384E;EGYPTIAN HIEROGLYPH-1384E;Lo;0;L;;;;;N;;;;;\n1384F;EGYPTIAN HIEROGLYPH-1384F;Lo;0;L;;;;;N;;;;;\n13850;EGYPTIAN HIEROGLYPH-13850;Lo;0;L;;;;;N;;;;;\n13851;EGYPTIAN HIEROGLYPH-13851;Lo;0;L;;;;;N;;;;;\n13852;EGYPTIAN HIEROGLYPH-13852;Lo;0;L;;;;;N;;;;;\n13853;EGYPTIAN HIEROGLYPH-13853;Lo;0;L;;;;;N;;;;;\n13854;EGYPTIAN HIEROGLYPH-13854;Lo;0;L;;;;;N;;;;;\n13855;EGYPTIAN HIEROGLYPH-13855;Lo;0;L;;;;;N;;;;;\n13856;EGYPTIAN HIEROGLYPH-13856;Lo;0;L;;;;;N;;;;;\n13857;EGYPTIAN HIEROGLYPH-13857;Lo;0;L;;;;;N;;;;;\n13858;EGYPTIAN HIEROGLYPH-13858;Lo;0;L;;;;;N;;;;;\n13859;EGYPTIAN HIEROGLYPH-13859;Lo;0;L;;;;;N;;;;;\n1385A;EGYPTIAN HIEROGLYPH-1385A;Lo;0;L;;;;;N;;;;;\n1385B;EGYPTIAN HIEROGLYPH-1385B;Lo;0;L;;;;;N;;;;;\n1385C;EGYPTIAN HIEROGLYPH-1385C;Lo;0;L;;;;;N;;;;;\n1385D;EGYPTIAN HIEROGLYPH-1385D;Lo;0;L;;;;;N;;;;;\n1385E;EGYPTIAN HIEROGLYPH-1385E;Lo;0;L;;;;;N;;;;;\n1385F;EGYPTIAN HIEROGLYPH-1385F;Lo;0;L;;;;;N;;;;;\n13860;EGYPTIAN HIEROGLYPH-13860;Lo;0;L;;;;;N;;;;;\n13861;EGYPTIAN HIEROGLYPH-13861;Lo;0;L;;;;;N;;;;;\n13862;EGYPTIAN HIEROGLYPH-13862;Lo;0;L;;;;;N;;;;;\n13863;EGYPTIAN HIEROGLYPH-13863;Lo;0;L;;;;;N;;;;;\n13864;EGYPTIAN HIEROGLYPH-13864;Lo;0;L;;;;;N;;;;;\n13865;EGYPTIAN HIEROGLYPH-13865;Lo;0;L;;;;;N;;;;;\n13866;EGYPTIAN HIEROGLYPH-13866;Lo;0;L;;;;;N;;;;;\n13867;EGYPTIAN HIEROGLYPH-13867;Lo;0;L;;;;;N;;;;;\n13868;EGYPTIAN HIEROGLYPH-13868;Lo;0;L;;;;;N;;;;;\n13869;EGYPTIAN HIEROGLYPH-13869;Lo;0;L;;;;;N;;;;;\n1386A;EGYPTIAN HIEROGLYPH-1386A;Lo;0;L;;;;;N;;;;;\n1386B;EGYPTIAN HIEROGLYPH-1386B;Lo;0;L;;;;;N;;;;;\n1386C;EGYPTIAN HIEROGLYPH-1386C;Lo;0;L;;;;;N;;;;;\n1386D;EGYPTIAN HIEROGLYPH-1386D;Lo;0;L;;;;;N;;;;;\n1386E;EGYPTIAN HIEROGLYPH-1386E;Lo;0;L;;;;;N;;;;;\n1386F;EGYPTIAN HIEROGLYPH-1386F;Lo;0;L;;;;;N;;;;;\n13870;EGYPTIAN HIEROGLYPH-13870;Lo;0;L;;;;;N;;;;;\n13871;EGYPTIAN HIEROGLYPH-13871;Lo;0;L;;;;;N;;;;;\n13872;EGYPTIAN HIEROGLYPH-13872;Lo;0;L;;;;;N;;;;;\n13873;EGYPTIAN HIEROGLYPH-13873;Lo;0;L;;;;;N;;;;;\n13874;EGYPTIAN HIEROGLYPH-13874;Lo;0;L;;;;;N;;;;;\n13875;EGYPTIAN HIEROGLYPH-13875;Lo;0;L;;;;;N;;;;;\n13876;EGYPTIAN HIEROGLYPH-13876;Lo;0;L;;;;;N;;;;;\n13877;EGYPTIAN HIEROGLYPH-13877;Lo;0;L;;;;;N;;;;;\n13878;EGYPTIAN HIEROGLYPH-13878;Lo;0;L;;;;;N;;;;;\n13879;EGYPTIAN HIEROGLYPH-13879;Lo;0;L;;;;;N;;;;;\n1387A;EGYPTIAN HIEROGLYPH-1387A;Lo;0;L;;;;;N;;;;;\n1387B;EGYPTIAN HIEROGLYPH-1387B;Lo;0;L;;;;;N;;;;;\n1387C;EGYPTIAN HIEROGLYPH-1387C;Lo;0;L;;;;;N;;;;;\n1387D;EGYPTIAN HIEROGLYPH-1387D;Lo;0;L;;;;;N;;;;;\n1387E;EGYPTIAN HIEROGLYPH-1387E;Lo;0;L;;;;;N;;;;;\n1387F;EGYPTIAN HIEROGLYPH-1387F;Lo;0;L;;;;;N;;;;;\n13880;EGYPTIAN HIEROGLYPH-13880;Lo;0;L;;;;;N;;;;;\n13881;EGYPTIAN HIEROGLYPH-13881;Lo;0;L;;;;;N;;;;;\n13882;EGYPTIAN HIEROGLYPH-13882;Lo;0;L;;;;;N;;;;;\n13883;EGYPTIAN HIEROGLYPH-13883;Lo;0;L;;;;;N;;;;;\n13884;EGYPTIAN HIEROGLYPH-13884;Lo;0;L;;;;;N;;;;;\n13885;EGYPTIAN HIEROGLYPH-13885;Lo;0;L;;;;;N;;;;;\n13886;EGYPTIAN HIEROGLYPH-13886;Lo;0;L;;;;;N;;;;;\n13887;EGYPTIAN HIEROGLYPH-13887;Lo;0;L;;;;;N;;;;;\n13888;EGYPTIAN HIEROGLYPH-13888;Lo;0;L;;;;;N;;;;;\n13889;EGYPTIAN HIEROGLYPH-13889;Lo;0;L;;;;;N;;;;;\n1388A;EGYPTIAN HIEROGLYPH-1388A;Lo;0;L;;;;;N;;;;;\n1388B;EGYPTIAN HIEROGLYPH-1388B;Lo;0;L;;;;;N;;;;;\n1388C;EGYPTIAN HIEROGLYPH-1388C;Lo;0;L;;;;;N;;;;;\n1388D;EGYPTIAN HIEROGLYPH-1388D;Lo;0;L;;;;;N;;;;;\n1388E;EGYPTIAN HIEROGLYPH-1388E;Lo;0;L;;;;;N;;;;;\n1388F;EGYPTIAN HIEROGLYPH-1388F;Lo;0;L;;;;;N;;;;;\n13890;EGYPTIAN HIEROGLYPH-13890;Lo;0;L;;;;;N;;;;;\n13891;EGYPTIAN HIEROGLYPH-13891;Lo;0;L;;;;;N;;;;;\n13892;EGYPTIAN HIEROGLYPH-13892;Lo;0;L;;;;;N;;;;;\n13893;EGYPTIAN HIEROGLYPH-13893;Lo;0;L;;;;;N;;;;;\n13894;EGYPTIAN HIEROGLYPH-13894;Lo;0;L;;;;;N;;;;;\n13895;EGYPTIAN HIEROGLYPH-13895;Lo;0;L;;;;;N;;;;;\n13896;EGYPTIAN HIEROGLYPH-13896;Lo;0;L;;;;;N;;;;;\n13897;EGYPTIAN HIEROGLYPH-13897;Lo;0;L;;;;;N;;;;;\n13898;EGYPTIAN HIEROGLYPH-13898;Lo;0;L;;;;;N;;;;;\n13899;EGYPTIAN HIEROGLYPH-13899;Lo;0;L;;;;;N;;;;;\n1389A;EGYPTIAN HIEROGLYPH-1389A;Lo;0;L;;;;;N;;;;;\n1389B;EGYPTIAN HIEROGLYPH-1389B;Lo;0;L;;;;;N;;;;;\n1389C;EGYPTIAN HIEROGLYPH-1389C;Lo;0;L;;;;;N;;;;;\n1389D;EGYPTIAN HIEROGLYPH-1389D;Lo;0;L;;;;;N;;;;;\n1389E;EGYPTIAN HIEROGLYPH-1389E;Lo;0;L;;;;;N;;;;;\n1389F;EGYPTIAN HIEROGLYPH-1389F;Lo;0;L;;;;;N;;;;;\n138A0;EGYPTIAN HIEROGLYPH-138A0;Lo;0;L;;;;;N;;;;;\n138A1;EGYPTIAN HIEROGLYPH-138A1;Lo;0;L;;;;;N;;;;;\n138A2;EGYPTIAN HIEROGLYPH-138A2;Lo;0;L;;;;;N;;;;;\n138A3;EGYPTIAN HIEROGLYPH-138A3;Lo;0;L;;;;;N;;;;;\n138A4;EGYPTIAN HIEROGLYPH-138A4;Lo;0;L;;;;;N;;;;;\n138A5;EGYPTIAN HIEROGLYPH-138A5;Lo;0;L;;;;;N;;;;;\n138A6;EGYPTIAN HIEROGLYPH-138A6;Lo;0;L;;;;;N;;;;;\n138A7;EGYPTIAN HIEROGLYPH-138A7;Lo;0;L;;;;;N;;;;;\n138A8;EGYPTIAN HIEROGLYPH-138A8;Lo;0;L;;;;;N;;;;;\n138A9;EGYPTIAN HIEROGLYPH-138A9;Lo;0;L;;;;;N;;;;;\n138AA;EGYPTIAN HIEROGLYPH-138AA;Lo;0;L;;;;;N;;;;;\n138AB;EGYPTIAN HIEROGLYPH-138AB;Lo;0;L;;;;;N;;;;;\n138AC;EGYPTIAN HIEROGLYPH-138AC;Lo;0;L;;;;;N;;;;;\n138AD;EGYPTIAN HIEROGLYPH-138AD;Lo;0;L;;;;;N;;;;;\n138AE;EGYPTIAN HIEROGLYPH-138AE;Lo;0;L;;;;;N;;;;;\n138AF;EGYPTIAN HIEROGLYPH-138AF;Lo;0;L;;;;;N;;;;;\n138B0;EGYPTIAN HIEROGLYPH-138B0;Lo;0;L;;;;;N;;;;;\n138B1;EGYPTIAN HIEROGLYPH-138B1;Lo;0;L;;;;;N;;;;;\n138B2;EGYPTIAN HIEROGLYPH-138B2;Lo;0;L;;;;;N;;;;;\n138B3;EGYPTIAN HIEROGLYPH-138B3;Lo;0;L;;;;;N;;;;;\n138B4;EGYPTIAN HIEROGLYPH-138B4;Lo;0;L;;;;;N;;;;;\n138B5;EGYPTIAN HIEROGLYPH-138B5;Lo;0;L;;;;;N;;;;;\n138B6;EGYPTIAN HIEROGLYPH-138B6;Lo;0;L;;;;;N;;;;;\n138B7;EGYPTIAN HIEROGLYPH-138B7;Lo;0;L;;;;;N;;;;;\n138B8;EGYPTIAN HIEROGLYPH-138B8;Lo;0;L;;;;;N;;;;;\n138B9;EGYPTIAN HIEROGLYPH-138B9;Lo;0;L;;;;;N;;;;;\n138BA;EGYPTIAN HIEROGLYPH-138BA;Lo;0;L;;;;;N;;;;;\n138BB;EGYPTIAN HIEROGLYPH-138BB;Lo;0;L;;;;;N;;;;;\n138BC;EGYPTIAN HIEROGLYPH-138BC;Lo;0;L;;;;;N;;;;;\n138BD;EGYPTIAN HIEROGLYPH-138BD;Lo;0;L;;;;;N;;;;;\n138BE;EGYPTIAN HIEROGLYPH-138BE;Lo;0;L;;;;;N;;;;;\n138BF;EGYPTIAN HIEROGLYPH-138BF;Lo;0;L;;;;;N;;;;;\n138C0;EGYPTIAN HIEROGLYPH-138C0;Lo;0;L;;;;;N;;;;;\n138C1;EGYPTIAN HIEROGLYPH-138C1;Lo;0;L;;;;;N;;;;;\n138C2;EGYPTIAN HIEROGLYPH-138C2;Lo;0;L;;;;;N;;;;;\n138C3;EGYPTIAN HIEROGLYPH-138C3;Lo;0;L;;;;;N;;;;;\n138C4;EGYPTIAN HIEROGLYPH-138C4;Lo;0;L;;;;;N;;;;;\n138C5;EGYPTIAN HIEROGLYPH-138C5;Lo;0;L;;;;;N;;;;;\n138C6;EGYPTIAN HIEROGLYPH-138C6;Lo;0;L;;;;;N;;;;;\n138C7;EGYPTIAN HIEROGLYPH-138C7;Lo;0;L;;;;;N;;;;;\n138C8;EGYPTIAN HIEROGLYPH-138C8;Lo;0;L;;;;;N;;;;;\n138C9;EGYPTIAN HIEROGLYPH-138C9;Lo;0;L;;;;;N;;;;;\n138CA;EGYPTIAN HIEROGLYPH-138CA;Lo;0;L;;;;;N;;;;;\n138CB;EGYPTIAN HIEROGLYPH-138CB;Lo;0;L;;;;;N;;;;;\n138CC;EGYPTIAN HIEROGLYPH-138CC;Lo;0;L;;;;;N;;;;;\n138CD;EGYPTIAN HIEROGLYPH-138CD;Lo;0;L;;;;;N;;;;;\n138CE;EGYPTIAN HIEROGLYPH-138CE;Lo;0;L;;;;;N;;;;;\n138CF;EGYPTIAN HIEROGLYPH-138CF;Lo;0;L;;;;;N;;;;;\n138D0;EGYPTIAN HIEROGLYPH-138D0;Lo;0;L;;;;;N;;;;;\n138D1;EGYPTIAN HIEROGLYPH-138D1;Lo;0;L;;;;;N;;;;;\n138D2;EGYPTIAN HIEROGLYPH-138D2;Lo;0;L;;;;;N;;;;;\n138D3;EGYPTIAN HIEROGLYPH-138D3;Lo;0;L;;;;;N;;;;;\n138D4;EGYPTIAN HIEROGLYPH-138D4;Lo;0;L;;;;;N;;;;;\n138D5;EGYPTIAN HIEROGLYPH-138D5;Lo;0;L;;;;;N;;;;;\n138D6;EGYPTIAN HIEROGLYPH-138D6;Lo;0;L;;;;;N;;;;;\n138D7;EGYPTIAN HIEROGLYPH-138D7;Lo;0;L;;;;;N;;;;;\n138D8;EGYPTIAN HIEROGLYPH-138D8;Lo;0;L;;;;;N;;;;;\n138D9;EGYPTIAN HIEROGLYPH-138D9;Lo;0;L;;;;;N;;;;;\n138DA;EGYPTIAN HIEROGLYPH-138DA;Lo;0;L;;;;;N;;;;;\n138DB;EGYPTIAN HIEROGLYPH-138DB;Lo;0;L;;;;;N;;;;;\n138DC;EGYPTIAN HIEROGLYPH-138DC;Lo;0;L;;;;;N;;;;;\n138DD;EGYPTIAN HIEROGLYPH-138DD;Lo;0;L;;;;;N;;;;;\n138DE;EGYPTIAN HIEROGLYPH-138DE;Lo;0;L;;;;;N;;;;;\n138DF;EGYPTIAN HIEROGLYPH-138DF;Lo;0;L;;;;;N;;;;;\n138E0;EGYPTIAN HIEROGLYPH-138E0;Lo;0;L;;;;;N;;;;;\n138E1;EGYPTIAN HIEROGLYPH-138E1;Lo;0;L;;;;;N;;;;;\n138E2;EGYPTIAN HIEROGLYPH-138E2;Lo;0;L;;;;;N;;;;;\n138E3;EGYPTIAN HIEROGLYPH-138E3;Lo;0;L;;;;;N;;;;;\n138E4;EGYPTIAN HIEROGLYPH-138E4;Lo;0;L;;;;;N;;;;;\n138E5;EGYPTIAN HIEROGLYPH-138E5;Lo;0;L;;;;;N;;;;;\n138E6;EGYPTIAN HIEROGLYPH-138E6;Lo;0;L;;;;;N;;;;;\n138E7;EGYPTIAN HIEROGLYPH-138E7;Lo;0;L;;;;;N;;;;;\n138E8;EGYPTIAN HIEROGLYPH-138E8;Lo;0;L;;;;;N;;;;;\n138E9;EGYPTIAN HIEROGLYPH-138E9;Lo;0;L;;;;;N;;;;;\n138EA;EGYPTIAN HIEROGLYPH-138EA;Lo;0;L;;;;;N;;;;;\n138EB;EGYPTIAN HIEROGLYPH-138EB;Lo;0;L;;;;;N;;;;;\n138EC;EGYPTIAN HIEROGLYPH-138EC;Lo;0;L;;;;;N;;;;;\n138ED;EGYPTIAN HIEROGLYPH-138ED;Lo;0;L;;;;;N;;;;;\n138EE;EGYPTIAN HIEROGLYPH-138EE;Lo;0;L;;;;;N;;;;;\n138EF;EGYPTIAN HIEROGLYPH-138EF;Lo;0;L;;;;;N;;;;;\n138F0;EGYPTIAN HIEROGLYPH-138F0;Lo;0;L;;;;;N;;;;;\n138F1;EGYPTIAN HIEROGLYPH-138F1;Lo;0;L;;;;;N;;;;;\n138F2;EGYPTIAN HIEROGLYPH-138F2;Lo;0;L;;;;;N;;;;;\n138F3;EGYPTIAN HIEROGLYPH-138F3;Lo;0;L;;;;;N;;;;;\n138F4;EGYPTIAN HIEROGLYPH-138F4;Lo;0;L;;;;;N;;;;;\n138F5;EGYPTIAN HIEROGLYPH-138F5;Lo;0;L;;;;;N;;;;;\n138F6;EGYPTIAN HIEROGLYPH-138F6;Lo;0;L;;;;;N;;;;;\n138F7;EGYPTIAN HIEROGLYPH-138F7;Lo;0;L;;;;;N;;;;;\n138F8;EGYPTIAN HIEROGLYPH-138F8;Lo;0;L;;;;;N;;;;;\n138F9;EGYPTIAN HIEROGLYPH-138F9;Lo;0;L;;;;;N;;;;;\n138FA;EGYPTIAN HIEROGLYPH-138FA;Lo;0;L;;;;;N;;;;;\n138FB;EGYPTIAN HIEROGLYPH-138FB;Lo;0;L;;;;;N;;;;;\n138FC;EGYPTIAN HIEROGLYPH-138FC;Lo;0;L;;;;;N;;;;;\n138FD;EGYPTIAN HIEROGLYPH-138FD;Lo;0;L;;;;;N;;;;;\n138FE;EGYPTIAN HIEROGLYPH-138FE;Lo;0;L;;;;;N;;;;;\n138FF;EGYPTIAN HIEROGLYPH-138FF;Lo;0;L;;;;;N;;;;;\n13900;EGYPTIAN HIEROGLYPH-13900;Lo;0;L;;;;;N;;;;;\n13901;EGYPTIAN HIEROGLYPH-13901;Lo;0;L;;;;;N;;;;;\n13902;EGYPTIAN HIEROGLYPH-13902;Lo;0;L;;;;;N;;;;;\n13903;EGYPTIAN HIEROGLYPH-13903;Lo;0;L;;;;;N;;;;;\n13904;EGYPTIAN HIEROGLYPH-13904;Lo;0;L;;;;;N;;;;;\n13905;EGYPTIAN HIEROGLYPH-13905;Lo;0;L;;;;;N;;;;;\n13906;EGYPTIAN HIEROGLYPH-13906;Lo;0;L;;;;;N;;;;;\n13907;EGYPTIAN HIEROGLYPH-13907;Lo;0;L;;;;;N;;;;;\n13908;EGYPTIAN HIEROGLYPH-13908;Lo;0;L;;;;;N;;;;;\n13909;EGYPTIAN HIEROGLYPH-13909;Lo;0;L;;;;;N;;;;;\n1390A;EGYPTIAN HIEROGLYPH-1390A;Lo;0;L;;;;;N;;;;;\n1390B;EGYPTIAN HIEROGLYPH-1390B;Lo;0;L;;;;;N;;;;;\n1390C;EGYPTIAN HIEROGLYPH-1390C;Lo;0;L;;;;;N;;;;;\n1390D;EGYPTIAN HIEROGLYPH-1390D;Lo;0;L;;;;;N;;;;;\n1390E;EGYPTIAN HIEROGLYPH-1390E;Lo;0;L;;;;;N;;;;;\n1390F;EGYPTIAN HIEROGLYPH-1390F;Lo;0;L;;;;;N;;;;;\n13910;EGYPTIAN HIEROGLYPH-13910;Lo;0;L;;;;;N;;;;;\n13911;EGYPTIAN HIEROGLYPH-13911;Lo;0;L;;;;;N;;;;;\n13912;EGYPTIAN HIEROGLYPH-13912;Lo;0;L;;;;;N;;;;;\n13913;EGYPTIAN HIEROGLYPH-13913;Lo;0;L;;;;;N;;;;;\n13914;EGYPTIAN HIEROGLYPH-13914;Lo;0;L;;;;;N;;;;;\n13915;EGYPTIAN HIEROGLYPH-13915;Lo;0;L;;;;;N;;;;;\n13916;EGYPTIAN HIEROGLYPH-13916;Lo;0;L;;;;;N;;;;;\n13917;EGYPTIAN HIEROGLYPH-13917;Lo;0;L;;;;;N;;;;;\n13918;EGYPTIAN HIEROGLYPH-13918;Lo;0;L;;;;;N;;;;;\n13919;EGYPTIAN HIEROGLYPH-13919;Lo;0;L;;;;;N;;;;;\n1391A;EGYPTIAN HIEROGLYPH-1391A;Lo;0;L;;;;;N;;;;;\n1391B;EGYPTIAN HIEROGLYPH-1391B;Lo;0;L;;;;;N;;;;;\n1391C;EGYPTIAN HIEROGLYPH-1391C;Lo;0;L;;;;;N;;;;;\n1391D;EGYPTIAN HIEROGLYPH-1391D;Lo;0;L;;;;;N;;;;;\n1391E;EGYPTIAN HIEROGLYPH-1391E;Lo;0;L;;;;;N;;;;;\n1391F;EGYPTIAN HIEROGLYPH-1391F;Lo;0;L;;;;;N;;;;;\n13920;EGYPTIAN HIEROGLYPH-13920;Lo;0;L;;;;;N;;;;;\n13921;EGYPTIAN HIEROGLYPH-13921;Lo;0;L;;;;;N;;;;;\n13922;EGYPTIAN HIEROGLYPH-13922;Lo;0;L;;;;;N;;;;;\n13923;EGYPTIAN HIEROGLYPH-13923;Lo;0;L;;;;;N;;;;;\n13924;EGYPTIAN HIEROGLYPH-13924;Lo;0;L;;;;;N;;;;;\n13925;EGYPTIAN HIEROGLYPH-13925;Lo;0;L;;;;;N;;;;;\n13926;EGYPTIAN HIEROGLYPH-13926;Lo;0;L;;;;;N;;;;;\n13927;EGYPTIAN HIEROGLYPH-13927;Lo;0;L;;;;;N;;;;;\n13928;EGYPTIAN HIEROGLYPH-13928;Lo;0;L;;;;;N;;;;;\n13929;EGYPTIAN HIEROGLYPH-13929;Lo;0;L;;;;;N;;;;;\n1392A;EGYPTIAN HIEROGLYPH-1392A;Lo;0;L;;;;;N;;;;;\n1392B;EGYPTIAN HIEROGLYPH-1392B;Lo;0;L;;;;;N;;;;;\n1392C;EGYPTIAN HIEROGLYPH-1392C;Lo;0;L;;;;;N;;;;;\n1392D;EGYPTIAN HIEROGLYPH-1392D;Lo;0;L;;;;;N;;;;;\n1392E;EGYPTIAN HIEROGLYPH-1392E;Lo;0;L;;;;;N;;;;;\n1392F;EGYPTIAN HIEROGLYPH-1392F;Lo;0;L;;;;;N;;;;;\n13930;EGYPTIAN HIEROGLYPH-13930;Lo;0;L;;;;;N;;;;;\n13931;EGYPTIAN HIEROGLYPH-13931;Lo;0;L;;;;;N;;;;;\n13932;EGYPTIAN HIEROGLYPH-13932;Lo;0;L;;;;;N;;;;;\n13933;EGYPTIAN HIEROGLYPH-13933;Lo;0;L;;;;;N;;;;;\n13934;EGYPTIAN HIEROGLYPH-13934;Lo;0;L;;;;;N;;;;;\n13935;EGYPTIAN HIEROGLYPH-13935;Lo;0;L;;;;;N;;;;;\n13936;EGYPTIAN HIEROGLYPH-13936;Lo;0;L;;;;;N;;;;;\n13937;EGYPTIAN HIEROGLYPH-13937;Lo;0;L;;;;;N;;;;;\n13938;EGYPTIAN HIEROGLYPH-13938;Lo;0;L;;;;;N;;;;;\n13939;EGYPTIAN HIEROGLYPH-13939;Lo;0;L;;;;;N;;;;;\n1393A;EGYPTIAN HIEROGLYPH-1393A;Lo;0;L;;;;;N;;;;;\n1393B;EGYPTIAN HIEROGLYPH-1393B;Lo;0;L;;;;;N;;;;;\n1393C;EGYPTIAN HIEROGLYPH-1393C;Lo;0;L;;;;;N;;;;;\n1393D;EGYPTIAN HIEROGLYPH-1393D;Lo;0;L;;;;;N;;;;;\n1393E;EGYPTIAN HIEROGLYPH-1393E;Lo;0;L;;;;;N;;;;;\n1393F;EGYPTIAN HIEROGLYPH-1393F;Lo;0;L;;;;;N;;;;;\n13940;EGYPTIAN HIEROGLYPH-13940;Lo;0;L;;;;;N;;;;;\n13941;EGYPTIAN HIEROGLYPH-13941;Lo;0;L;;;;;N;;;;;\n13942;EGYPTIAN HIEROGLYPH-13942;Lo;0;L;;;;;N;;;;;\n13943;EGYPTIAN HIEROGLYPH-13943;Lo;0;L;;;;;N;;;;;\n13944;EGYPTIAN HIEROGLYPH-13944;Lo;0;L;;;;;N;;;;;\n13945;EGYPTIAN HIEROGLYPH-13945;Lo;0;L;;;;;N;;;;;\n13946;EGYPTIAN HIEROGLYPH-13946;Lo;0;L;;;;;N;;;;;\n13947;EGYPTIAN HIEROGLYPH-13947;Lo;0;L;;;;;N;;;;;\n13948;EGYPTIAN HIEROGLYPH-13948;Lo;0;L;;;;;N;;;;;\n13949;EGYPTIAN HIEROGLYPH-13949;Lo;0;L;;;;;N;;;;;\n1394A;EGYPTIAN HIEROGLYPH-1394A;Lo;0;L;;;;;N;;;;;\n1394B;EGYPTIAN HIEROGLYPH-1394B;Lo;0;L;;;;;N;;;;;\n1394C;EGYPTIAN HIEROGLYPH-1394C;Lo;0;L;;;;;N;;;;;\n1394D;EGYPTIAN HIEROGLYPH-1394D;Lo;0;L;;;;;N;;;;;\n1394E;EGYPTIAN HIEROGLYPH-1394E;Lo;0;L;;;;;N;;;;;\n1394F;EGYPTIAN HIEROGLYPH-1394F;Lo;0;L;;;;;N;;;;;\n13950;EGYPTIAN HIEROGLYPH-13950;Lo;0;L;;;;;N;;;;;\n13951;EGYPTIAN HIEROGLYPH-13951;Lo;0;L;;;;;N;;;;;\n13952;EGYPTIAN HIEROGLYPH-13952;Lo;0;L;;;;;N;;;;;\n13953;EGYPTIAN HIEROGLYPH-13953;Lo;0;L;;;;;N;;;;;\n13954;EGYPTIAN HIEROGLYPH-13954;Lo;0;L;;;;;N;;;;;\n13955;EGYPTIAN HIEROGLYPH-13955;Lo;0;L;;;;;N;;;;;\n13956;EGYPTIAN HIEROGLYPH-13956;Lo;0;L;;;;;N;;;;;\n13957;EGYPTIAN HIEROGLYPH-13957;Lo;0;L;;;;;N;;;;;\n13958;EGYPTIAN HIEROGLYPH-13958;Lo;0;L;;;;;N;;;;;\n13959;EGYPTIAN HIEROGLYPH-13959;Lo;0;L;;;;;N;;;;;\n1395A;EGYPTIAN HIEROGLYPH-1395A;Lo;0;L;;;;;N;;;;;\n1395B;EGYPTIAN HIEROGLYPH-1395B;Lo;0;L;;;;;N;;;;;\n1395C;EGYPTIAN HIEROGLYPH-1395C;Lo;0;L;;;;;N;;;;;\n1395D;EGYPTIAN HIEROGLYPH-1395D;Lo;0;L;;;;;N;;;;;\n1395E;EGYPTIAN HIEROGLYPH-1395E;Lo;0;L;;;;;N;;;;;\n1395F;EGYPTIAN HIEROGLYPH-1395F;Lo;0;L;;;;;N;;;;;\n13960;EGYPTIAN HIEROGLYPH-13960;Lo;0;L;;;;;N;;;;;\n13961;EGYPTIAN HIEROGLYPH-13961;Lo;0;L;;;;;N;;;;;\n13962;EGYPTIAN HIEROGLYPH-13962;Lo;0;L;;;;;N;;;;;\n13963;EGYPTIAN HIEROGLYPH-13963;Lo;0;L;;;;;N;;;;;\n13964;EGYPTIAN HIEROGLYPH-13964;Lo;0;L;;;;;N;;;;;\n13965;EGYPTIAN HIEROGLYPH-13965;Lo;0;L;;;;;N;;;;;\n13966;EGYPTIAN HIEROGLYPH-13966;Lo;0;L;;;;;N;;;;;\n13967;EGYPTIAN HIEROGLYPH-13967;Lo;0;L;;;;;N;;;;;\n13968;EGYPTIAN HIEROGLYPH-13968;Lo;0;L;;;;;N;;;;;\n13969;EGYPTIAN HIEROGLYPH-13969;Lo;0;L;;;;;N;;;;;\n1396A;EGYPTIAN HIEROGLYPH-1396A;Lo;0;L;;;;;N;;;;;\n1396B;EGYPTIAN HIEROGLYPH-1396B;Lo;0;L;;;;;N;;;;;\n1396C;EGYPTIAN HIEROGLYPH-1396C;Lo;0;L;;;;;N;;;;;\n1396D;EGYPTIAN HIEROGLYPH-1396D;Lo;0;L;;;;;N;;;;;\n1396E;EGYPTIAN HIEROGLYPH-1396E;Lo;0;L;;;;;N;;;;;\n1396F;EGYPTIAN HIEROGLYPH-1396F;Lo;0;L;;;;;N;;;;;\n13970;EGYPTIAN HIEROGLYPH-13970;Lo;0;L;;;;;N;;;;;\n13971;EGYPTIAN HIEROGLYPH-13971;Lo;0;L;;;;;N;;;;;\n13972;EGYPTIAN HIEROGLYPH-13972;Lo;0;L;;;;;N;;;;;\n13973;EGYPTIAN HIEROGLYPH-13973;Lo;0;L;;;;;N;;;;;\n13974;EGYPTIAN HIEROGLYPH-13974;Lo;0;L;;;;;N;;;;;\n13975;EGYPTIAN HIEROGLYPH-13975;Lo;0;L;;;;;N;;;;;\n13976;EGYPTIAN HIEROGLYPH-13976;Lo;0;L;;;;;N;;;;;\n13977;EGYPTIAN HIEROGLYPH-13977;Lo;0;L;;;;;N;;;;;\n13978;EGYPTIAN HIEROGLYPH-13978;Lo;0;L;;;;;N;;;;;\n13979;EGYPTIAN HIEROGLYPH-13979;Lo;0;L;;;;;N;;;;;\n1397A;EGYPTIAN HIEROGLYPH-1397A;Lo;0;L;;;;;N;;;;;\n1397B;EGYPTIAN HIEROGLYPH-1397B;Lo;0;L;;;;;N;;;;;\n1397C;EGYPTIAN HIEROGLYPH-1397C;Lo;0;L;;;;;N;;;;;\n1397D;EGYPTIAN HIEROGLYPH-1397D;Lo;0;L;;;;;N;;;;;\n1397E;EGYPTIAN HIEROGLYPH-1397E;Lo;0;L;;;;;N;;;;;\n1397F;EGYPTIAN HIEROGLYPH-1397F;Lo;0;L;;;;;N;;;;;\n13980;EGYPTIAN HIEROGLYPH-13980;Lo;0;L;;;;;N;;;;;\n13981;EGYPTIAN HIEROGLYPH-13981;Lo;0;L;;;;;N;;;;;\n13982;EGYPTIAN HIEROGLYPH-13982;Lo;0;L;;;;;N;;;;;\n13983;EGYPTIAN HIEROGLYPH-13983;Lo;0;L;;;;;N;;;;;\n13984;EGYPTIAN HIEROGLYPH-13984;Lo;0;L;;;;;N;;;;;\n13985;EGYPTIAN HIEROGLYPH-13985;Lo;0;L;;;;;N;;;;;\n13986;EGYPTIAN HIEROGLYPH-13986;Lo;0;L;;;;;N;;;;;\n13987;EGYPTIAN HIEROGLYPH-13987;Lo;0;L;;;;;N;;;;;\n13988;EGYPTIAN HIEROGLYPH-13988;Lo;0;L;;;;;N;;;;;\n13989;EGYPTIAN HIEROGLYPH-13989;Lo;0;L;;;;;N;;;;;\n1398A;EGYPTIAN HIEROGLYPH-1398A;Lo;0;L;;;;;N;;;;;\n1398B;EGYPTIAN HIEROGLYPH-1398B;Lo;0;L;;;;;N;;;;;\n1398C;EGYPTIAN HIEROGLYPH-1398C;Lo;0;L;;;;;N;;;;;\n1398D;EGYPTIAN HIEROGLYPH-1398D;Lo;0;L;;;;;N;;;;;\n1398E;EGYPTIAN HIEROGLYPH-1398E;Lo;0;L;;;;;N;;;;;\n1398F;EGYPTIAN HIEROGLYPH-1398F;Lo;0;L;;;;;N;;;;;\n13990;EGYPTIAN HIEROGLYPH-13990;Lo;0;L;;;;;N;;;;;\n13991;EGYPTIAN HIEROGLYPH-13991;Lo;0;L;;;;;N;;;;;\n13992;EGYPTIAN HIEROGLYPH-13992;Lo;0;L;;;;;N;;;;;\n13993;EGYPTIAN HIEROGLYPH-13993;Lo;0;L;;;;;N;;;;;\n13994;EGYPTIAN HIEROGLYPH-13994;Lo;0;L;;;;;N;;;;;\n13995;EGYPTIAN HIEROGLYPH-13995;Lo;0;L;;;;;N;;;;;\n13996;EGYPTIAN HIEROGLYPH-13996;Lo;0;L;;;;;N;;;;;\n13997;EGYPTIAN HIEROGLYPH-13997;Lo;0;L;;;;;N;;;;;\n13998;EGYPTIAN HIEROGLYPH-13998;Lo;0;L;;;;;N;;;;;\n13999;EGYPTIAN HIEROGLYPH-13999;Lo;0;L;;;;;N;;;;;\n1399A;EGYPTIAN HIEROGLYPH-1399A;Lo;0;L;;;;;N;;;;;\n1399B;EGYPTIAN HIEROGLYPH-1399B;Lo;0;L;;;;;N;;;;;\n1399C;EGYPTIAN HIEROGLYPH-1399C;Lo;0;L;;;;;N;;;;;\n1399D;EGYPTIAN HIEROGLYPH-1399D;Lo;0;L;;;;;N;;;;;\n1399E;EGYPTIAN HIEROGLYPH-1399E;Lo;0;L;;;;;N;;;;;\n1399F;EGYPTIAN HIEROGLYPH-1399F;Lo;0;L;;;;;N;;;;;\n139A0;EGYPTIAN HIEROGLYPH-139A0;Lo;0;L;;;;;N;;;;;\n139A1;EGYPTIAN HIEROGLYPH-139A1;Lo;0;L;;;;;N;;;;;\n139A2;EGYPTIAN HIEROGLYPH-139A2;Lo;0;L;;;;;N;;;;;\n139A3;EGYPTIAN HIEROGLYPH-139A3;Lo;0;L;;;;;N;;;;;\n139A4;EGYPTIAN HIEROGLYPH-139A4;Lo;0;L;;;;;N;;;;;\n139A5;EGYPTIAN HIEROGLYPH-139A5;Lo;0;L;;;;;N;;;;;\n139A6;EGYPTIAN HIEROGLYPH-139A6;Lo;0;L;;;;;N;;;;;\n139A7;EGYPTIAN HIEROGLYPH-139A7;Lo;0;L;;;;;N;;;;;\n139A8;EGYPTIAN HIEROGLYPH-139A8;Lo;0;L;;;;;N;;;;;\n139A9;EGYPTIAN HIEROGLYPH-139A9;Lo;0;L;;;;;N;;;;;\n139AA;EGYPTIAN HIEROGLYPH-139AA;Lo;0;L;;;;;N;;;;;\n139AB;EGYPTIAN HIEROGLYPH-139AB;Lo;0;L;;;;;N;;;;;\n139AC;EGYPTIAN HIEROGLYPH-139AC;Lo;0;L;;;;;N;;;;;\n139AD;EGYPTIAN HIEROGLYPH-139AD;Lo;0;L;;;;;N;;;;;\n139AE;EGYPTIAN HIEROGLYPH-139AE;Lo;0;L;;;;;N;;;;;\n139AF;EGYPTIAN HIEROGLYPH-139AF;Lo;0;L;;;;;N;;;;;\n139B0;EGYPTIAN HIEROGLYPH-139B0;Lo;0;L;;;;;N;;;;;\n139B1;EGYPTIAN HIEROGLYPH-139B1;Lo;0;L;;;;;N;;;;;\n139B2;EGYPTIAN HIEROGLYPH-139B2;Lo;0;L;;;;;N;;;;;\n139B3;EGYPTIAN HIEROGLYPH-139B3;Lo;0;L;;;;;N;;;;;\n139B4;EGYPTIAN HIEROGLYPH-139B4;Lo;0;L;;;;;N;;;;;\n139B5;EGYPTIAN HIEROGLYPH-139B5;Lo;0;L;;;;;N;;;;;\n139B6;EGYPTIAN HIEROGLYPH-139B6;Lo;0;L;;;;;N;;;;;\n139B7;EGYPTIAN HIEROGLYPH-139B7;Lo;0;L;;;;;N;;;;;\n139B8;EGYPTIAN HIEROGLYPH-139B8;Lo;0;L;;;;;N;;;;;\n139B9;EGYPTIAN HIEROGLYPH-139B9;Lo;0;L;;;;;N;;;;;\n139BA;EGYPTIAN HIEROGLYPH-139BA;Lo;0;L;;;;;N;;;;;\n139BB;EGYPTIAN HIEROGLYPH-139BB;Lo;0;L;;;;;N;;;;;\n139BC;EGYPTIAN HIEROGLYPH-139BC;Lo;0;L;;;;;N;;;;;\n139BD;EGYPTIAN HIEROGLYPH-139BD;Lo;0;L;;;;;N;;;;;\n139BE;EGYPTIAN HIEROGLYPH-139BE;Lo;0;L;;;;;N;;;;;\n139BF;EGYPTIAN HIEROGLYPH-139BF;Lo;0;L;;;;;N;;;;;\n139C0;EGYPTIAN HIEROGLYPH-139C0;Lo;0;L;;;;;N;;;;;\n139C1;EGYPTIAN HIEROGLYPH-139C1;Lo;0;L;;;;;N;;;;;\n139C2;EGYPTIAN HIEROGLYPH-139C2;Lo;0;L;;;;;N;;;;;\n139C3;EGYPTIAN HIEROGLYPH-139C3;Lo;0;L;;;;;N;;;;;\n139C4;EGYPTIAN HIEROGLYPH-139C4;Lo;0;L;;;;;N;;;;;\n139C5;EGYPTIAN HIEROGLYPH-139C5;Lo;0;L;;;;;N;;;;;\n139C6;EGYPTIAN HIEROGLYPH-139C6;Lo;0;L;;;;;N;;;;;\n139C7;EGYPTIAN HIEROGLYPH-139C7;Lo;0;L;;;;;N;;;;;\n139C8;EGYPTIAN HIEROGLYPH-139C8;Lo;0;L;;;;;N;;;;;\n139C9;EGYPTIAN HIEROGLYPH-139C9;Lo;0;L;;;;;N;;;;;\n139CA;EGYPTIAN HIEROGLYPH-139CA;Lo;0;L;;;;;N;;;;;\n139CB;EGYPTIAN HIEROGLYPH-139CB;Lo;0;L;;;;;N;;;;;\n139CC;EGYPTIAN HIEROGLYPH-139CC;Lo;0;L;;;;;N;;;;;\n139CD;EGYPTIAN HIEROGLYPH-139CD;Lo;0;L;;;;;N;;;;;\n139CE;EGYPTIAN HIEROGLYPH-139CE;Lo;0;L;;;;;N;;;;;\n139CF;EGYPTIAN HIEROGLYPH-139CF;Lo;0;L;;;;;N;;;;;\n139D0;EGYPTIAN HIEROGLYPH-139D0;Lo;0;L;;;;;N;;;;;\n139D1;EGYPTIAN HIEROGLYPH-139D1;Lo;0;L;;;;;N;;;;;\n139D2;EGYPTIAN HIEROGLYPH-139D2;Lo;0;L;;;;;N;;;;;\n139D3;EGYPTIAN HIEROGLYPH-139D3;Lo;0;L;;;;;N;;;;;\n139D4;EGYPTIAN HIEROGLYPH-139D4;Lo;0;L;;;;;N;;;;;\n139D5;EGYPTIAN HIEROGLYPH-139D5;Lo;0;L;;;;;N;;;;;\n139D6;EGYPTIAN HIEROGLYPH-139D6;Lo;0;L;;;;;N;;;;;\n139D7;EGYPTIAN HIEROGLYPH-139D7;Lo;0;L;;;;;N;;;;;\n139D8;EGYPTIAN HIEROGLYPH-139D8;Lo;0;L;;;;;N;;;;;\n139D9;EGYPTIAN HIEROGLYPH-139D9;Lo;0;L;;;;;N;;;;;\n139DA;EGYPTIAN HIEROGLYPH-139DA;Lo;0;L;;;;;N;;;;;\n139DB;EGYPTIAN HIEROGLYPH-139DB;Lo;0;L;;;;;N;;;;;\n139DC;EGYPTIAN HIEROGLYPH-139DC;Lo;0;L;;;;;N;;;;;\n139DD;EGYPTIAN HIEROGLYPH-139DD;Lo;0;L;;;;;N;;;;;\n139DE;EGYPTIAN HIEROGLYPH-139DE;Lo;0;L;;;;;N;;;;;\n139DF;EGYPTIAN HIEROGLYPH-139DF;Lo;0;L;;;;;N;;;;;\n139E0;EGYPTIAN HIEROGLYPH-139E0;Lo;0;L;;;;;N;;;;;\n139E1;EGYPTIAN HIEROGLYPH-139E1;Lo;0;L;;;;;N;;;;;\n139E2;EGYPTIAN HIEROGLYPH-139E2;Lo;0;L;;;;;N;;;;;\n139E3;EGYPTIAN HIEROGLYPH-139E3;Lo;0;L;;;;;N;;;;;\n139E4;EGYPTIAN HIEROGLYPH-139E4;Lo;0;L;;;;;N;;;;;\n139E5;EGYPTIAN HIEROGLYPH-139E5;Lo;0;L;;;;;N;;;;;\n139E6;EGYPTIAN HIEROGLYPH-139E6;Lo;0;L;;;;;N;;;;;\n139E7;EGYPTIAN HIEROGLYPH-139E7;Lo;0;L;;;;;N;;;;;\n139E8;EGYPTIAN HIEROGLYPH-139E8;Lo;0;L;;;;;N;;;;;\n139E9;EGYPTIAN HIEROGLYPH-139E9;Lo;0;L;;;;;N;;;;;\n139EA;EGYPTIAN HIEROGLYPH-139EA;Lo;0;L;;;;;N;;;;;\n139EB;EGYPTIAN HIEROGLYPH-139EB;Lo;0;L;;;;;N;;;;;\n139EC;EGYPTIAN HIEROGLYPH-139EC;Lo;0;L;;;;;N;;;;;\n139ED;EGYPTIAN HIEROGLYPH-139ED;Lo;0;L;;;;;N;;;;;\n139EE;EGYPTIAN HIEROGLYPH-139EE;Lo;0;L;;;;;N;;;;;\n139EF;EGYPTIAN HIEROGLYPH-139EF;Lo;0;L;;;;;N;;;;;\n139F0;EGYPTIAN HIEROGLYPH-139F0;Lo;0;L;;;;;N;;;;;\n139F1;EGYPTIAN HIEROGLYPH-139F1;Lo;0;L;;;;;N;;;;;\n139F2;EGYPTIAN HIEROGLYPH-139F2;Lo;0;L;;;;;N;;;;;\n139F3;EGYPTIAN HIEROGLYPH-139F3;Lo;0;L;;;;;N;;;;;\n139F4;EGYPTIAN HIEROGLYPH-139F4;Lo;0;L;;;;;N;;;;;\n139F5;EGYPTIAN HIEROGLYPH-139F5;Lo;0;L;;;;;N;;;;;\n139F6;EGYPTIAN HIEROGLYPH-139F6;Lo;0;L;;;;;N;;;;;\n139F7;EGYPTIAN HIEROGLYPH-139F7;Lo;0;L;;;;;N;;;;;\n139F8;EGYPTIAN HIEROGLYPH-139F8;Lo;0;L;;;;;N;;;;;\n139F9;EGYPTIAN HIEROGLYPH-139F9;Lo;0;L;;;;;N;;;;;\n139FA;EGYPTIAN HIEROGLYPH-139FA;Lo;0;L;;;;;N;;;;;\n139FB;EGYPTIAN HIEROGLYPH-139FB;Lo;0;L;;;;;N;;;;;\n139FC;EGYPTIAN HIEROGLYPH-139FC;Lo;0;L;;;;;N;;;;;\n139FD;EGYPTIAN HIEROGLYPH-139FD;Lo;0;L;;;;;N;;;;;\n139FE;EGYPTIAN HIEROGLYPH-139FE;Lo;0;L;;;;;N;;;;;\n139FF;EGYPTIAN HIEROGLYPH-139FF;Lo;0;L;;;;;N;;;;;\n13A00;EGYPTIAN HIEROGLYPH-13A00;Lo;0;L;;;;;N;;;;;\n13A01;EGYPTIAN HIEROGLYPH-13A01;Lo;0;L;;;;;N;;;;;\n13A02;EGYPTIAN HIEROGLYPH-13A02;Lo;0;L;;;;;N;;;;;\n13A03;EGYPTIAN HIEROGLYPH-13A03;Lo;0;L;;;;;N;;;;;\n13A04;EGYPTIAN HIEROGLYPH-13A04;Lo;0;L;;;;;N;;;;;\n13A05;EGYPTIAN HIEROGLYPH-13A05;Lo;0;L;;;;;N;;;;;\n13A06;EGYPTIAN HIEROGLYPH-13A06;Lo;0;L;;;;;N;;;;;\n13A07;EGYPTIAN HIEROGLYPH-13A07;Lo;0;L;;;;;N;;;;;\n13A08;EGYPTIAN HIEROGLYPH-13A08;Lo;0;L;;;;;N;;;;;\n13A09;EGYPTIAN HIEROGLYPH-13A09;Lo;0;L;;;;;N;;;;;\n13A0A;EGYPTIAN HIEROGLYPH-13A0A;Lo;0;L;;;;;N;;;;;\n13A0B;EGYPTIAN HIEROGLYPH-13A0B;Lo;0;L;;;;;N;;;;;\n13A0C;EGYPTIAN HIEROGLYPH-13A0C;Lo;0;L;;;;;N;;;;;\n13A0D;EGYPTIAN HIEROGLYPH-13A0D;Lo;0;L;;;;;N;;;;;\n13A0E;EGYPTIAN HIEROGLYPH-13A0E;Lo;0;L;;;;;N;;;;;\n13A0F;EGYPTIAN HIEROGLYPH-13A0F;Lo;0;L;;;;;N;;;;;\n13A10;EGYPTIAN HIEROGLYPH-13A10;Lo;0;L;;;;;N;;;;;\n13A11;EGYPTIAN HIEROGLYPH-13A11;Lo;0;L;;;;;N;;;;;\n13A12;EGYPTIAN HIEROGLYPH-13A12;Lo;0;L;;;;;N;;;;;\n13A13;EGYPTIAN HIEROGLYPH-13A13;Lo;0;L;;;;;N;;;;;\n13A14;EGYPTIAN HIEROGLYPH-13A14;Lo;0;L;;;;;N;;;;;\n13A15;EGYPTIAN HIEROGLYPH-13A15;Lo;0;L;;;;;N;;;;;\n13A16;EGYPTIAN HIEROGLYPH-13A16;Lo;0;L;;;;;N;;;;;\n13A17;EGYPTIAN HIEROGLYPH-13A17;Lo;0;L;;;;;N;;;;;\n13A18;EGYPTIAN HIEROGLYPH-13A18;Lo;0;L;;;;;N;;;;;\n13A19;EGYPTIAN HIEROGLYPH-13A19;Lo;0;L;;;;;N;;;;;\n13A1A;EGYPTIAN HIEROGLYPH-13A1A;Lo;0;L;;;;;N;;;;;\n13A1B;EGYPTIAN HIEROGLYPH-13A1B;Lo;0;L;;;;;N;;;;;\n13A1C;EGYPTIAN HIEROGLYPH-13A1C;Lo;0;L;;;;;N;;;;;\n13A1D;EGYPTIAN HIEROGLYPH-13A1D;Lo;0;L;;;;;N;;;;;\n13A1E;EGYPTIAN HIEROGLYPH-13A1E;Lo;0;L;;;;;N;;;;;\n13A1F;EGYPTIAN HIEROGLYPH-13A1F;Lo;0;L;;;;;N;;;;;\n13A20;EGYPTIAN HIEROGLYPH-13A20;Lo;0;L;;;;;N;;;;;\n13A21;EGYPTIAN HIEROGLYPH-13A21;Lo;0;L;;;;;N;;;;;\n13A22;EGYPTIAN HIEROGLYPH-13A22;Lo;0;L;;;;;N;;;;;\n13A23;EGYPTIAN HIEROGLYPH-13A23;Lo;0;L;;;;;N;;;;;\n13A24;EGYPTIAN HIEROGLYPH-13A24;Lo;0;L;;;;;N;;;;;\n13A25;EGYPTIAN HIEROGLYPH-13A25;Lo;0;L;;;;;N;;;;;\n13A26;EGYPTIAN HIEROGLYPH-13A26;Lo;0;L;;;;;N;;;;;\n13A27;EGYPTIAN HIEROGLYPH-13A27;Lo;0;L;;;;;N;;;;;\n13A28;EGYPTIAN HIEROGLYPH-13A28;Lo;0;L;;;;;N;;;;;\n13A29;EGYPTIAN HIEROGLYPH-13A29;Lo;0;L;;;;;N;;;;;\n13A2A;EGYPTIAN HIEROGLYPH-13A2A;Lo;0;L;;;;;N;;;;;\n13A2B;EGYPTIAN HIEROGLYPH-13A2B;Lo;0;L;;;;;N;;;;;\n13A2C;EGYPTIAN HIEROGLYPH-13A2C;Lo;0;L;;;;;N;;;;;\n13A2D;EGYPTIAN HIEROGLYPH-13A2D;Lo;0;L;;;;;N;;;;;\n13A2E;EGYPTIAN HIEROGLYPH-13A2E;Lo;0;L;;;;;N;;;;;\n13A2F;EGYPTIAN HIEROGLYPH-13A2F;Lo;0;L;;;;;N;;;;;\n13A30;EGYPTIAN HIEROGLYPH-13A30;Lo;0;L;;;;;N;;;;;\n13A31;EGYPTIAN HIEROGLYPH-13A31;Lo;0;L;;;;;N;;;;;\n13A32;EGYPTIAN HIEROGLYPH-13A32;Lo;0;L;;;;;N;;;;;\n13A33;EGYPTIAN HIEROGLYPH-13A33;Lo;0;L;;;;;N;;;;;\n13A34;EGYPTIAN HIEROGLYPH-13A34;Lo;0;L;;;;;N;;;;;\n13A35;EGYPTIAN HIEROGLYPH-13A35;Lo;0;L;;;;;N;;;;;\n13A36;EGYPTIAN HIEROGLYPH-13A36;Lo;0;L;;;;;N;;;;;\n13A37;EGYPTIAN HIEROGLYPH-13A37;Lo;0;L;;;;;N;;;;;\n13A38;EGYPTIAN HIEROGLYPH-13A38;Lo;0;L;;;;;N;;;;;\n13A39;EGYPTIAN HIEROGLYPH-13A39;Lo;0;L;;;;;N;;;;;\n13A3A;EGYPTIAN HIEROGLYPH-13A3A;Lo;0;L;;;;;N;;;;;\n13A3B;EGYPTIAN HIEROGLYPH-13A3B;Lo;0;L;;;;;N;;;;;\n13A3C;EGYPTIAN HIEROGLYPH-13A3C;Lo;0;L;;;;;N;;;;;\n13A3D;EGYPTIAN HIEROGLYPH-13A3D;Lo;0;L;;;;;N;;;;;\n13A3E;EGYPTIAN HIEROGLYPH-13A3E;Lo;0;L;;;;;N;;;;;\n13A3F;EGYPTIAN HIEROGLYPH-13A3F;Lo;0;L;;;;;N;;;;;\n13A40;EGYPTIAN HIEROGLYPH-13A40;Lo;0;L;;;;;N;;;;;\n13A41;EGYPTIAN HIEROGLYPH-13A41;Lo;0;L;;;;;N;;;;;\n13A42;EGYPTIAN HIEROGLYPH-13A42;Lo;0;L;;;;;N;;;;;\n13A43;EGYPTIAN HIEROGLYPH-13A43;Lo;0;L;;;;;N;;;;;\n13A44;EGYPTIAN HIEROGLYPH-13A44;Lo;0;L;;;;;N;;;;;\n13A45;EGYPTIAN HIEROGLYPH-13A45;Lo;0;L;;;;;N;;;;;\n13A46;EGYPTIAN HIEROGLYPH-13A46;Lo;0;L;;;;;N;;;;;\n13A47;EGYPTIAN HIEROGLYPH-13A47;Lo;0;L;;;;;N;;;;;\n13A48;EGYPTIAN HIEROGLYPH-13A48;Lo;0;L;;;;;N;;;;;\n13A49;EGYPTIAN HIEROGLYPH-13A49;Lo;0;L;;;;;N;;;;;\n13A4A;EGYPTIAN HIEROGLYPH-13A4A;Lo;0;L;;;;;N;;;;;\n13A4B;EGYPTIAN HIEROGLYPH-13A4B;Lo;0;L;;;;;N;;;;;\n13A4C;EGYPTIAN HIEROGLYPH-13A4C;Lo;0;L;;;;;N;;;;;\n13A4D;EGYPTIAN HIEROGLYPH-13A4D;Lo;0;L;;;;;N;;;;;\n13A4E;EGYPTIAN HIEROGLYPH-13A4E;Lo;0;L;;;;;N;;;;;\n13A4F;EGYPTIAN HIEROGLYPH-13A4F;Lo;0;L;;;;;N;;;;;\n13A50;EGYPTIAN HIEROGLYPH-13A50;Lo;0;L;;;;;N;;;;;\n13A51;EGYPTIAN HIEROGLYPH-13A51;Lo;0;L;;;;;N;;;;;\n13A52;EGYPTIAN HIEROGLYPH-13A52;Lo;0;L;;;;;N;;;;;\n13A53;EGYPTIAN HIEROGLYPH-13A53;Lo;0;L;;;;;N;;;;;\n13A54;EGYPTIAN HIEROGLYPH-13A54;Lo;0;L;;;;;N;;;;;\n13A55;EGYPTIAN HIEROGLYPH-13A55;Lo;0;L;;;;;N;;;;;\n13A56;EGYPTIAN HIEROGLYPH-13A56;Lo;0;L;;;;;N;;;;;\n13A57;EGYPTIAN HIEROGLYPH-13A57;Lo;0;L;;;;;N;;;;;\n13A58;EGYPTIAN HIEROGLYPH-13A58;Lo;0;L;;;;;N;;;;;\n13A59;EGYPTIAN HIEROGLYPH-13A59;Lo;0;L;;;;;N;;;;;\n13A5A;EGYPTIAN HIEROGLYPH-13A5A;Lo;0;L;;;;;N;;;;;\n13A5B;EGYPTIAN HIEROGLYPH-13A5B;Lo;0;L;;;;;N;;;;;\n13A5C;EGYPTIAN HIEROGLYPH-13A5C;Lo;0;L;;;;;N;;;;;\n13A5D;EGYPTIAN HIEROGLYPH-13A5D;Lo;0;L;;;;;N;;;;;\n13A5E;EGYPTIAN HIEROGLYPH-13A5E;Lo;0;L;;;;;N;;;;;\n13A5F;EGYPTIAN HIEROGLYPH-13A5F;Lo;0;L;;;;;N;;;;;\n13A60;EGYPTIAN HIEROGLYPH-13A60;Lo;0;L;;;;;N;;;;;\n13A61;EGYPTIAN HIEROGLYPH-13A61;Lo;0;L;;;;;N;;;;;\n13A62;EGYPTIAN HIEROGLYPH-13A62;Lo;0;L;;;;;N;;;;;\n13A63;EGYPTIAN HIEROGLYPH-13A63;Lo;0;L;;;;;N;;;;;\n13A64;EGYPTIAN HIEROGLYPH-13A64;Lo;0;L;;;;;N;;;;;\n13A65;EGYPTIAN HIEROGLYPH-13A65;Lo;0;L;;;;;N;;;;;\n13A66;EGYPTIAN HIEROGLYPH-13A66;Lo;0;L;;;;;N;;;;;\n13A67;EGYPTIAN HIEROGLYPH-13A67;Lo;0;L;;;;;N;;;;;\n13A68;EGYPTIAN HIEROGLYPH-13A68;Lo;0;L;;;;;N;;;;;\n13A69;EGYPTIAN HIEROGLYPH-13A69;Lo;0;L;;;;;N;;;;;\n13A6A;EGYPTIAN HIEROGLYPH-13A6A;Lo;0;L;;;;;N;;;;;\n13A6B;EGYPTIAN HIEROGLYPH-13A6B;Lo;0;L;;;;;N;;;;;\n13A6C;EGYPTIAN HIEROGLYPH-13A6C;Lo;0;L;;;;;N;;;;;\n13A6D;EGYPTIAN HIEROGLYPH-13A6D;Lo;0;L;;;;;N;;;;;\n13A6E;EGYPTIAN HIEROGLYPH-13A6E;Lo;0;L;;;;;N;;;;;\n13A6F;EGYPTIAN HIEROGLYPH-13A6F;Lo;0;L;;;;;N;;;;;\n13A70;EGYPTIAN HIEROGLYPH-13A70;Lo;0;L;;;;;N;;;;;\n13A71;EGYPTIAN HIEROGLYPH-13A71;Lo;0;L;;;;;N;;;;;\n13A72;EGYPTIAN HIEROGLYPH-13A72;Lo;0;L;;;;;N;;;;;\n13A73;EGYPTIAN HIEROGLYPH-13A73;Lo;0;L;;;;;N;;;;;\n13A74;EGYPTIAN HIEROGLYPH-13A74;Lo;0;L;;;;;N;;;;;\n13A75;EGYPTIAN HIEROGLYPH-13A75;Lo;0;L;;;;;N;;;;;\n13A76;EGYPTIAN HIEROGLYPH-13A76;Lo;0;L;;;;;N;;;;;\n13A77;EGYPTIAN HIEROGLYPH-13A77;Lo;0;L;;;;;N;;;;;\n13A78;EGYPTIAN HIEROGLYPH-13A78;Lo;0;L;;;;;N;;;;;\n13A79;EGYPTIAN HIEROGLYPH-13A79;Lo;0;L;;;;;N;;;;;\n13A7A;EGYPTIAN HIEROGLYPH-13A7A;Lo;0;L;;;;;N;;;;;\n13A7B;EGYPTIAN HIEROGLYPH-13A7B;Lo;0;L;;;;;N;;;;;\n13A7C;EGYPTIAN HIEROGLYPH-13A7C;Lo;0;L;;;;;N;;;;;\n13A7D;EGYPTIAN HIEROGLYPH-13A7D;Lo;0;L;;;;;N;;;;;\n13A7E;EGYPTIAN HIEROGLYPH-13A7E;Lo;0;L;;;;;N;;;;;\n13A7F;EGYPTIAN HIEROGLYPH-13A7F;Lo;0;L;;;;;N;;;;;\n13A80;EGYPTIAN HIEROGLYPH-13A80;Lo;0;L;;;;;N;;;;;\n13A81;EGYPTIAN HIEROGLYPH-13A81;Lo;0;L;;;;;N;;;;;\n13A82;EGYPTIAN HIEROGLYPH-13A82;Lo;0;L;;;;;N;;;;;\n13A83;EGYPTIAN HIEROGLYPH-13A83;Lo;0;L;;;;;N;;;;;\n13A84;EGYPTIAN HIEROGLYPH-13A84;Lo;0;L;;;;;N;;;;;\n13A85;EGYPTIAN HIEROGLYPH-13A85;Lo;0;L;;;;;N;;;;;\n13A86;EGYPTIAN HIEROGLYPH-13A86;Lo;0;L;;;;;N;;;;;\n13A87;EGYPTIAN HIEROGLYPH-13A87;Lo;0;L;;;;;N;;;;;\n13A88;EGYPTIAN HIEROGLYPH-13A88;Lo;0;L;;;;;N;;;;;\n13A89;EGYPTIAN HIEROGLYPH-13A89;Lo;0;L;;;;;N;;;;;\n13A8A;EGYPTIAN HIEROGLYPH-13A8A;Lo;0;L;;;;;N;;;;;\n13A8B;EGYPTIAN HIEROGLYPH-13A8B;Lo;0;L;;;;;N;;;;;\n13A8C;EGYPTIAN HIEROGLYPH-13A8C;Lo;0;L;;;;;N;;;;;\n13A8D;EGYPTIAN HIEROGLYPH-13A8D;Lo;0;L;;;;;N;;;;;\n13A8E;EGYPTIAN HIEROGLYPH-13A8E;Lo;0;L;;;;;N;;;;;\n13A8F;EGYPTIAN HIEROGLYPH-13A8F;Lo;0;L;;;;;N;;;;;\n13A90;EGYPTIAN HIEROGLYPH-13A90;Lo;0;L;;;;;N;;;;;\n13A91;EGYPTIAN HIEROGLYPH-13A91;Lo;0;L;;;;;N;;;;;\n13A92;EGYPTIAN HIEROGLYPH-13A92;Lo;0;L;;;;;N;;;;;\n13A93;EGYPTIAN HIEROGLYPH-13A93;Lo;0;L;;;;;N;;;;;\n13A94;EGYPTIAN HIEROGLYPH-13A94;Lo;0;L;;;;;N;;;;;\n13A95;EGYPTIAN HIEROGLYPH-13A95;Lo;0;L;;;;;N;;;;;\n13A96;EGYPTIAN HIEROGLYPH-13A96;Lo;0;L;;;;;N;;;;;\n13A97;EGYPTIAN HIEROGLYPH-13A97;Lo;0;L;;;;;N;;;;;\n13A98;EGYPTIAN HIEROGLYPH-13A98;Lo;0;L;;;;;N;;;;;\n13A99;EGYPTIAN HIEROGLYPH-13A99;Lo;0;L;;;;;N;;;;;\n13A9A;EGYPTIAN HIEROGLYPH-13A9A;Lo;0;L;;;;;N;;;;;\n13A9B;EGYPTIAN HIEROGLYPH-13A9B;Lo;0;L;;;;;N;;;;;\n13A9C;EGYPTIAN HIEROGLYPH-13A9C;Lo;0;L;;;;;N;;;;;\n13A9D;EGYPTIAN HIEROGLYPH-13A9D;Lo;0;L;;;;;N;;;;;\n13A9E;EGYPTIAN HIEROGLYPH-13A9E;Lo;0;L;;;;;N;;;;;\n13A9F;EGYPTIAN HIEROGLYPH-13A9F;Lo;0;L;;;;;N;;;;;\n13AA0;EGYPTIAN HIEROGLYPH-13AA0;Lo;0;L;;;;;N;;;;;\n13AA1;EGYPTIAN HIEROGLYPH-13AA1;Lo;0;L;;;;;N;;;;;\n13AA2;EGYPTIAN HIEROGLYPH-13AA2;Lo;0;L;;;;;N;;;;;\n13AA3;EGYPTIAN HIEROGLYPH-13AA3;Lo;0;L;;;;;N;;;;;\n13AA4;EGYPTIAN HIEROGLYPH-13AA4;Lo;0;L;;;;;N;;;;;\n13AA5;EGYPTIAN HIEROGLYPH-13AA5;Lo;0;L;;;;;N;;;;;\n13AA6;EGYPTIAN HIEROGLYPH-13AA6;Lo;0;L;;;;;N;;;;;\n13AA7;EGYPTIAN HIEROGLYPH-13AA7;Lo;0;L;;;;;N;;;;;\n13AA8;EGYPTIAN HIEROGLYPH-13AA8;Lo;0;L;;;;;N;;;;;\n13AA9;EGYPTIAN HIEROGLYPH-13AA9;Lo;0;L;;;;;N;;;;;\n13AAA;EGYPTIAN HIEROGLYPH-13AAA;Lo;0;L;;;;;N;;;;;\n13AAB;EGYPTIAN HIEROGLYPH-13AAB;Lo;0;L;;;;;N;;;;;\n13AAC;EGYPTIAN HIEROGLYPH-13AAC;Lo;0;L;;;;;N;;;;;\n13AAD;EGYPTIAN HIEROGLYPH-13AAD;Lo;0;L;;;;;N;;;;;\n13AAE;EGYPTIAN HIEROGLYPH-13AAE;Lo;0;L;;;;;N;;;;;\n13AAF;EGYPTIAN HIEROGLYPH-13AAF;Lo;0;L;;;;;N;;;;;\n13AB0;EGYPTIAN HIEROGLYPH-13AB0;Lo;0;L;;;;;N;;;;;\n13AB1;EGYPTIAN HIEROGLYPH-13AB1;Lo;0;L;;;;;N;;;;;\n13AB2;EGYPTIAN HIEROGLYPH-13AB2;Lo;0;L;;;;;N;;;;;\n13AB3;EGYPTIAN HIEROGLYPH-13AB3;Lo;0;L;;;;;N;;;;;\n13AB4;EGYPTIAN HIEROGLYPH-13AB4;Lo;0;L;;;;;N;;;;;\n13AB5;EGYPTIAN HIEROGLYPH-13AB5;Lo;0;L;;;;;N;;;;;\n13AB6;EGYPTIAN HIEROGLYPH-13AB6;Lo;0;L;;;;;N;;;;;\n13AB7;EGYPTIAN HIEROGLYPH-13AB7;Lo;0;L;;;;;N;;;;;\n13AB8;EGYPTIAN HIEROGLYPH-13AB8;Lo;0;L;;;;;N;;;;;\n13AB9;EGYPTIAN HIEROGLYPH-13AB9;Lo;0;L;;;;;N;;;;;\n13ABA;EGYPTIAN HIEROGLYPH-13ABA;Lo;0;L;;;;;N;;;;;\n13ABB;EGYPTIAN HIEROGLYPH-13ABB;Lo;0;L;;;;;N;;;;;\n13ABC;EGYPTIAN HIEROGLYPH-13ABC;Lo;0;L;;;;;N;;;;;\n13ABD;EGYPTIAN HIEROGLYPH-13ABD;Lo;0;L;;;;;N;;;;;\n13ABE;EGYPTIAN HIEROGLYPH-13ABE;Lo;0;L;;;;;N;;;;;\n13ABF;EGYPTIAN HIEROGLYPH-13ABF;Lo;0;L;;;;;N;;;;;\n13AC0;EGYPTIAN HIEROGLYPH-13AC0;Lo;0;L;;;;;N;;;;;\n13AC1;EGYPTIAN HIEROGLYPH-13AC1;Lo;0;L;;;;;N;;;;;\n13AC2;EGYPTIAN HIEROGLYPH-13AC2;Lo;0;L;;;;;N;;;;;\n13AC3;EGYPTIAN HIEROGLYPH-13AC3;Lo;0;L;;;;;N;;;;;\n13AC4;EGYPTIAN HIEROGLYPH-13AC4;Lo;0;L;;;;;N;;;;;\n13AC5;EGYPTIAN HIEROGLYPH-13AC5;Lo;0;L;;;;;N;;;;;\n13AC6;EGYPTIAN HIEROGLYPH-13AC6;Lo;0;L;;;;;N;;;;;\n13AC7;EGYPTIAN HIEROGLYPH-13AC7;Lo;0;L;;;;;N;;;;;\n13AC8;EGYPTIAN HIEROGLYPH-13AC8;Lo;0;L;;;;;N;;;;;\n13AC9;EGYPTIAN HIEROGLYPH-13AC9;Lo;0;L;;;;;N;;;;;\n13ACA;EGYPTIAN HIEROGLYPH-13ACA;Lo;0;L;;;;;N;;;;;\n13ACB;EGYPTIAN HIEROGLYPH-13ACB;Lo;0;L;;;;;N;;;;;\n13ACC;EGYPTIAN HIEROGLYPH-13ACC;Lo;0;L;;;;;N;;;;;\n13ACD;EGYPTIAN HIEROGLYPH-13ACD;Lo;0;L;;;;;N;;;;;\n13ACE;EGYPTIAN HIEROGLYPH-13ACE;Lo;0;L;;;;;N;;;;;\n13ACF;EGYPTIAN HIEROGLYPH-13ACF;Lo;0;L;;;;;N;;;;;\n13AD0;EGYPTIAN HIEROGLYPH-13AD0;Lo;0;L;;;;;N;;;;;\n13AD1;EGYPTIAN HIEROGLYPH-13AD1;Lo;0;L;;;;;N;;;;;\n13AD2;EGYPTIAN HIEROGLYPH-13AD2;Lo;0;L;;;;;N;;;;;\n13AD3;EGYPTIAN HIEROGLYPH-13AD3;Lo;0;L;;;;;N;;;;;\n13AD4;EGYPTIAN HIEROGLYPH-13AD4;Lo;0;L;;;;;N;;;;;\n13AD5;EGYPTIAN HIEROGLYPH-13AD5;Lo;0;L;;;;;N;;;;;\n13AD6;EGYPTIAN HIEROGLYPH-13AD6;Lo;0;L;;;;;N;;;;;\n13AD7;EGYPTIAN HIEROGLYPH-13AD7;Lo;0;L;;;;;N;;;;;\n13AD8;EGYPTIAN HIEROGLYPH-13AD8;Lo;0;L;;;;;N;;;;;\n13AD9;EGYPTIAN HIEROGLYPH-13AD9;Lo;0;L;;;;;N;;;;;\n13ADA;EGYPTIAN HIEROGLYPH-13ADA;Lo;0;L;;;;;N;;;;;\n13ADB;EGYPTIAN HIEROGLYPH-13ADB;Lo;0;L;;;;;N;;;;;\n13ADC;EGYPTIAN HIEROGLYPH-13ADC;Lo;0;L;;;;;N;;;;;\n13ADD;EGYPTIAN HIEROGLYPH-13ADD;Lo;0;L;;;;;N;;;;;\n13ADE;EGYPTIAN HIEROGLYPH-13ADE;Lo;0;L;;;;;N;;;;;\n13ADF;EGYPTIAN HIEROGLYPH-13ADF;Lo;0;L;;;;;N;;;;;\n13AE0;EGYPTIAN HIEROGLYPH-13AE0;Lo;0;L;;;;;N;;;;;\n13AE1;EGYPTIAN HIEROGLYPH-13AE1;Lo;0;L;;;;;N;;;;;\n13AE2;EGYPTIAN HIEROGLYPH-13AE2;Lo;0;L;;;;;N;;;;;\n13AE3;EGYPTIAN HIEROGLYPH-13AE3;Lo;0;L;;;;;N;;;;;\n13AE4;EGYPTIAN HIEROGLYPH-13AE4;Lo;0;L;;;;;N;;;;;\n13AE5;EGYPTIAN HIEROGLYPH-13AE5;Lo;0;L;;;;;N;;;;;\n13AE6;EGYPTIAN HIEROGLYPH-13AE6;Lo;0;L;;;;;N;;;;;\n13AE7;EGYPTIAN HIEROGLYPH-13AE7;Lo;0;L;;;;;N;;;;;\n13AE8;EGYPTIAN HIEROGLYPH-13AE8;Lo;0;L;;;;;N;;;;;\n13AE9;EGYPTIAN HIEROGLYPH-13AE9;Lo;0;L;;;;;N;;;;;\n13AEA;EGYPTIAN HIEROGLYPH-13AEA;Lo;0;L;;;;;N;;;;;\n13AEB;EGYPTIAN HIEROGLYPH-13AEB;Lo;0;L;;;;;N;;;;;\n13AEC;EGYPTIAN HIEROGLYPH-13AEC;Lo;0;L;;;;;N;;;;;\n13AED;EGYPTIAN HIEROGLYPH-13AED;Lo;0;L;;;;;N;;;;;\n13AEE;EGYPTIAN HIEROGLYPH-13AEE;Lo;0;L;;;;;N;;;;;\n13AEF;EGYPTIAN HIEROGLYPH-13AEF;Lo;0;L;;;;;N;;;;;\n13AF0;EGYPTIAN HIEROGLYPH-13AF0;Lo;0;L;;;;;N;;;;;\n13AF1;EGYPTIAN HIEROGLYPH-13AF1;Lo;0;L;;;;;N;;;;;\n13AF2;EGYPTIAN HIEROGLYPH-13AF2;Lo;0;L;;;;;N;;;;;\n13AF3;EGYPTIAN HIEROGLYPH-13AF3;Lo;0;L;;;;;N;;;;;\n13AF4;EGYPTIAN HIEROGLYPH-13AF4;Lo;0;L;;;;;N;;;;;\n13AF5;EGYPTIAN HIEROGLYPH-13AF5;Lo;0;L;;;;;N;;;;;\n13AF6;EGYPTIAN HIEROGLYPH-13AF6;Lo;0;L;;;;;N;;;;;\n13AF7;EGYPTIAN HIEROGLYPH-13AF7;Lo;0;L;;;;;N;;;;;\n13AF8;EGYPTIAN HIEROGLYPH-13AF8;Lo;0;L;;;;;N;;;;;\n13AF9;EGYPTIAN HIEROGLYPH-13AF9;Lo;0;L;;;;;N;;;;;\n13AFA;EGYPTIAN HIEROGLYPH-13AFA;Lo;0;L;;;;;N;;;;;\n13AFB;EGYPTIAN HIEROGLYPH-13AFB;Lo;0;L;;;;;N;;;;;\n13AFC;EGYPTIAN HIEROGLYPH-13AFC;Lo;0;L;;;;;N;;;;;\n13AFD;EGYPTIAN HIEROGLYPH-13AFD;Lo;0;L;;;;;N;;;;;\n13AFE;EGYPTIAN HIEROGLYPH-13AFE;Lo;0;L;;;;;N;;;;;\n13AFF;EGYPTIAN HIEROGLYPH-13AFF;Lo;0;L;;;;;N;;;;;\n13B00;EGYPTIAN HIEROGLYPH-13B00;Lo;0;L;;;;;N;;;;;\n13B01;EGYPTIAN HIEROGLYPH-13B01;Lo;0;L;;;;;N;;;;;\n13B02;EGYPTIAN HIEROGLYPH-13B02;Lo;0;L;;;;;N;;;;;\n13B03;EGYPTIAN HIEROGLYPH-13B03;Lo;0;L;;;;;N;;;;;\n13B04;EGYPTIAN HIEROGLYPH-13B04;Lo;0;L;;;;;N;;;;;\n13B05;EGYPTIAN HIEROGLYPH-13B05;Lo;0;L;;;;;N;;;;;\n13B06;EGYPTIAN HIEROGLYPH-13B06;Lo;0;L;;;;;N;;;;;\n13B07;EGYPTIAN HIEROGLYPH-13B07;Lo;0;L;;;;;N;;;;;\n13B08;EGYPTIAN HIEROGLYPH-13B08;Lo;0;L;;;;;N;;;;;\n13B09;EGYPTIAN HIEROGLYPH-13B09;Lo;0;L;;;;;N;;;;;\n13B0A;EGYPTIAN HIEROGLYPH-13B0A;Lo;0;L;;;;;N;;;;;\n13B0B;EGYPTIAN HIEROGLYPH-13B0B;Lo;0;L;;;;;N;;;;;\n13B0C;EGYPTIAN HIEROGLYPH-13B0C;Lo;0;L;;;;;N;;;;;\n13B0D;EGYPTIAN HIEROGLYPH-13B0D;Lo;0;L;;;;;N;;;;;\n13B0E;EGYPTIAN HIEROGLYPH-13B0E;Lo;0;L;;;;;N;;;;;\n13B0F;EGYPTIAN HIEROGLYPH-13B0F;Lo;0;L;;;;;N;;;;;\n13B10;EGYPTIAN HIEROGLYPH-13B10;Lo;0;L;;;;;N;;;;;\n13B11;EGYPTIAN HIEROGLYPH-13B11;Lo;0;L;;;;;N;;;;;\n13B12;EGYPTIAN HIEROGLYPH-13B12;Lo;0;L;;;;;N;;;;;\n13B13;EGYPTIAN HIEROGLYPH-13B13;Lo;0;L;;;;;N;;;;;\n13B14;EGYPTIAN HIEROGLYPH-13B14;Lo;0;L;;;;;N;;;;;\n13B15;EGYPTIAN HIEROGLYPH-13B15;Lo;0;L;;;;;N;;;;;\n13B16;EGYPTIAN HIEROGLYPH-13B16;Lo;0;L;;;;;N;;;;;\n13B17;EGYPTIAN HIEROGLYPH-13B17;Lo;0;L;;;;;N;;;;;\n13B18;EGYPTIAN HIEROGLYPH-13B18;Lo;0;L;;;;;N;;;;;\n13B19;EGYPTIAN HIEROGLYPH-13B19;Lo;0;L;;;;;N;;;;;\n13B1A;EGYPTIAN HIEROGLYPH-13B1A;Lo;0;L;;;;;N;;;;;\n13B1B;EGYPTIAN HIEROGLYPH-13B1B;Lo;0;L;;;;;N;;;;;\n13B1C;EGYPTIAN HIEROGLYPH-13B1C;Lo;0;L;;;;;N;;;;;\n13B1D;EGYPTIAN HIEROGLYPH-13B1D;Lo;0;L;;;;;N;;;;;\n13B1E;EGYPTIAN HIEROGLYPH-13B1E;Lo;0;L;;;;;N;;;;;\n13B1F;EGYPTIAN HIEROGLYPH-13B1F;Lo;0;L;;;;;N;;;;;\n13B20;EGYPTIAN HIEROGLYPH-13B20;Lo;0;L;;;;;N;;;;;\n13B21;EGYPTIAN HIEROGLYPH-13B21;Lo;0;L;;;;;N;;;;;\n13B22;EGYPTIAN HIEROGLYPH-13B22;Lo;0;L;;;;;N;;;;;\n13B23;EGYPTIAN HIEROGLYPH-13B23;Lo;0;L;;;;;N;;;;;\n13B24;EGYPTIAN HIEROGLYPH-13B24;Lo;0;L;;;;;N;;;;;\n13B25;EGYPTIAN HIEROGLYPH-13B25;Lo;0;L;;;;;N;;;;;\n13B26;EGYPTIAN HIEROGLYPH-13B26;Lo;0;L;;;;;N;;;;;\n13B27;EGYPTIAN HIEROGLYPH-13B27;Lo;0;L;;;;;N;;;;;\n13B28;EGYPTIAN HIEROGLYPH-13B28;Lo;0;L;;;;;N;;;;;\n13B29;EGYPTIAN HIEROGLYPH-13B29;Lo;0;L;;;;;N;;;;;\n13B2A;EGYPTIAN HIEROGLYPH-13B2A;Lo;0;L;;;;;N;;;;;\n13B2B;EGYPTIAN HIEROGLYPH-13B2B;Lo;0;L;;;;;N;;;;;\n13B2C;EGYPTIAN HIEROGLYPH-13B2C;Lo;0;L;;;;;N;;;;;\n13B2D;EGYPTIAN HIEROGLYPH-13B2D;Lo;0;L;;;;;N;;;;;\n13B2E;EGYPTIAN HIEROGLYPH-13B2E;Lo;0;L;;;;;N;;;;;\n13B2F;EGYPTIAN HIEROGLYPH-13B2F;Lo;0;L;;;;;N;;;;;\n13B30;EGYPTIAN HIEROGLYPH-13B30;Lo;0;L;;;;;N;;;;;\n13B31;EGYPTIAN HIEROGLYPH-13B31;Lo;0;L;;;;;N;;;;;\n13B32;EGYPTIAN HIEROGLYPH-13B32;Lo;0;L;;;;;N;;;;;\n13B33;EGYPTIAN HIEROGLYPH-13B33;Lo;0;L;;;;;N;;;;;\n13B34;EGYPTIAN HIEROGLYPH-13B34;Lo;0;L;;;;;N;;;;;\n13B35;EGYPTIAN HIEROGLYPH-13B35;Lo;0;L;;;;;N;;;;;\n13B36;EGYPTIAN HIEROGLYPH-13B36;Lo;0;L;;;;;N;;;;;\n13B37;EGYPTIAN HIEROGLYPH-13B37;Lo;0;L;;;;;N;;;;;\n13B38;EGYPTIAN HIEROGLYPH-13B38;Lo;0;L;;;;;N;;;;;\n13B39;EGYPTIAN HIEROGLYPH-13B39;Lo;0;L;;;;;N;;;;;\n13B3A;EGYPTIAN HIEROGLYPH-13B3A;Lo;0;L;;;;;N;;;;;\n13B3B;EGYPTIAN HIEROGLYPH-13B3B;Lo;0;L;;;;;N;;;;;\n13B3C;EGYPTIAN HIEROGLYPH-13B3C;Lo;0;L;;;;;N;;;;;\n13B3D;EGYPTIAN HIEROGLYPH-13B3D;Lo;0;L;;;;;N;;;;;\n13B3E;EGYPTIAN HIEROGLYPH-13B3E;Lo;0;L;;;;;N;;;;;\n13B3F;EGYPTIAN HIEROGLYPH-13B3F;Lo;0;L;;;;;N;;;;;\n13B40;EGYPTIAN HIEROGLYPH-13B40;Lo;0;L;;;;;N;;;;;\n13B41;EGYPTIAN HIEROGLYPH-13B41;Lo;0;L;;;;;N;;;;;\n13B42;EGYPTIAN HIEROGLYPH-13B42;Lo;0;L;;;;;N;;;;;\n13B43;EGYPTIAN HIEROGLYPH-13B43;Lo;0;L;;;;;N;;;;;\n13B44;EGYPTIAN HIEROGLYPH-13B44;Lo;0;L;;;;;N;;;;;\n13B45;EGYPTIAN HIEROGLYPH-13B45;Lo;0;L;;;;;N;;;;;\n13B46;EGYPTIAN HIEROGLYPH-13B46;Lo;0;L;;;;;N;;;;;\n13B47;EGYPTIAN HIEROGLYPH-13B47;Lo;0;L;;;;;N;;;;;\n13B48;EGYPTIAN HIEROGLYPH-13B48;Lo;0;L;;;;;N;;;;;\n13B49;EGYPTIAN HIEROGLYPH-13B49;Lo;0;L;;;;;N;;;;;\n13B4A;EGYPTIAN HIEROGLYPH-13B4A;Lo;0;L;;;;;N;;;;;\n13B4B;EGYPTIAN HIEROGLYPH-13B4B;Lo;0;L;;;;;N;;;;;\n13B4C;EGYPTIAN HIEROGLYPH-13B4C;Lo;0;L;;;;;N;;;;;\n13B4D;EGYPTIAN HIEROGLYPH-13B4D;Lo;0;L;;;;;N;;;;;\n13B4E;EGYPTIAN HIEROGLYPH-13B4E;Lo;0;L;;;;;N;;;;;\n13B4F;EGYPTIAN HIEROGLYPH-13B4F;Lo;0;L;;;;;N;;;;;\n13B50;EGYPTIAN HIEROGLYPH-13B50;Lo;0;L;;;;;N;;;;;\n13B51;EGYPTIAN HIEROGLYPH-13B51;Lo;0;L;;;;;N;;;;;\n13B52;EGYPTIAN HIEROGLYPH-13B52;Lo;0;L;;;;;N;;;;;\n13B53;EGYPTIAN HIEROGLYPH-13B53;Lo;0;L;;;;;N;;;;;\n13B54;EGYPTIAN HIEROGLYPH-13B54;Lo;0;L;;;;;N;;;;;\n13B55;EGYPTIAN HIEROGLYPH-13B55;Lo;0;L;;;;;N;;;;;\n13B56;EGYPTIAN HIEROGLYPH-13B56;Lo;0;L;;;;;N;;;;;\n13B57;EGYPTIAN HIEROGLYPH-13B57;Lo;0;L;;;;;N;;;;;\n13B58;EGYPTIAN HIEROGLYPH-13B58;Lo;0;L;;;;;N;;;;;\n13B59;EGYPTIAN HIEROGLYPH-13B59;Lo;0;L;;;;;N;;;;;\n13B5A;EGYPTIAN HIEROGLYPH-13B5A;Lo;0;L;;;;;N;;;;;\n13B5B;EGYPTIAN HIEROGLYPH-13B5B;Lo;0;L;;;;;N;;;;;\n13B5C;EGYPTIAN HIEROGLYPH-13B5C;Lo;0;L;;;;;N;;;;;\n13B5D;EGYPTIAN HIEROGLYPH-13B5D;Lo;0;L;;;;;N;;;;;\n13B5E;EGYPTIAN HIEROGLYPH-13B5E;Lo;0;L;;;;;N;;;;;\n13B5F;EGYPTIAN HIEROGLYPH-13B5F;Lo;0;L;;;;;N;;;;;\n13B60;EGYPTIAN HIEROGLYPH-13B60;Lo;0;L;;;;;N;;;;;\n13B61;EGYPTIAN HIEROGLYPH-13B61;Lo;0;L;;;;;N;;;;;\n13B62;EGYPTIAN HIEROGLYPH-13B62;Lo;0;L;;;;;N;;;;;\n13B63;EGYPTIAN HIEROGLYPH-13B63;Lo;0;L;;;;;N;;;;;\n13B64;EGYPTIAN HIEROGLYPH-13B64;Lo;0;L;;;;;N;;;;;\n13B65;EGYPTIAN HIEROGLYPH-13B65;Lo;0;L;;;;;N;;;;;\n13B66;EGYPTIAN HIEROGLYPH-13B66;Lo;0;L;;;;;N;;;;;\n13B67;EGYPTIAN HIEROGLYPH-13B67;Lo;0;L;;;;;N;;;;;\n13B68;EGYPTIAN HIEROGLYPH-13B68;Lo;0;L;;;;;N;;;;;\n13B69;EGYPTIAN HIEROGLYPH-13B69;Lo;0;L;;;;;N;;;;;\n13B6A;EGYPTIAN HIEROGLYPH-13B6A;Lo;0;L;;;;;N;;;;;\n13B6B;EGYPTIAN HIEROGLYPH-13B6B;Lo;0;L;;;;;N;;;;;\n13B6C;EGYPTIAN HIEROGLYPH-13B6C;Lo;0;L;;;;;N;;;;;\n13B6D;EGYPTIAN HIEROGLYPH-13B6D;Lo;0;L;;;;;N;;;;;\n13B6E;EGYPTIAN HIEROGLYPH-13B6E;Lo;0;L;;;;;N;;;;;\n13B6F;EGYPTIAN HIEROGLYPH-13B6F;Lo;0;L;;;;;N;;;;;\n13B70;EGYPTIAN HIEROGLYPH-13B70;Lo;0;L;;;;;N;;;;;\n13B71;EGYPTIAN HIEROGLYPH-13B71;Lo;0;L;;;;;N;;;;;\n13B72;EGYPTIAN HIEROGLYPH-13B72;Lo;0;L;;;;;N;;;;;\n13B73;EGYPTIAN HIEROGLYPH-13B73;Lo;0;L;;;;;N;;;;;\n13B74;EGYPTIAN HIEROGLYPH-13B74;Lo;0;L;;;;;N;;;;;\n13B75;EGYPTIAN HIEROGLYPH-13B75;Lo;0;L;;;;;N;;;;;\n13B76;EGYPTIAN HIEROGLYPH-13B76;Lo;0;L;;;;;N;;;;;\n13B77;EGYPTIAN HIEROGLYPH-13B77;Lo;0;L;;;;;N;;;;;\n13B78;EGYPTIAN HIEROGLYPH-13B78;Lo;0;L;;;;;N;;;;;\n13B79;EGYPTIAN HIEROGLYPH-13B79;Lo;0;L;;;;;N;;;;;\n13B7A;EGYPTIAN HIEROGLYPH-13B7A;Lo;0;L;;;;;N;;;;;\n13B7B;EGYPTIAN HIEROGLYPH-13B7B;Lo;0;L;;;;;N;;;;;\n13B7C;EGYPTIAN HIEROGLYPH-13B7C;Lo;0;L;;;;;N;;;;;\n13B7D;EGYPTIAN HIEROGLYPH-13B7D;Lo;0;L;;;;;N;;;;;\n13B7E;EGYPTIAN HIEROGLYPH-13B7E;Lo;0;L;;;;;N;;;;;\n13B7F;EGYPTIAN HIEROGLYPH-13B7F;Lo;0;L;;;;;N;;;;;\n13B80;EGYPTIAN HIEROGLYPH-13B80;Lo;0;L;;;;;N;;;;;\n13B81;EGYPTIAN HIEROGLYPH-13B81;Lo;0;L;;;;;N;;;;;\n13B82;EGYPTIAN HIEROGLYPH-13B82;Lo;0;L;;;;;N;;;;;\n13B83;EGYPTIAN HIEROGLYPH-13B83;Lo;0;L;;;;;N;;;;;\n13B84;EGYPTIAN HIEROGLYPH-13B84;Lo;0;L;;;;;N;;;;;\n13B85;EGYPTIAN HIEROGLYPH-13B85;Lo;0;L;;;;;N;;;;;\n13B86;EGYPTIAN HIEROGLYPH-13B86;Lo;0;L;;;;;N;;;;;\n13B87;EGYPTIAN HIEROGLYPH-13B87;Lo;0;L;;;;;N;;;;;\n13B88;EGYPTIAN HIEROGLYPH-13B88;Lo;0;L;;;;;N;;;;;\n13B89;EGYPTIAN HIEROGLYPH-13B89;Lo;0;L;;;;;N;;;;;\n13B8A;EGYPTIAN HIEROGLYPH-13B8A;Lo;0;L;;;;;N;;;;;\n13B8B;EGYPTIAN HIEROGLYPH-13B8B;Lo;0;L;;;;;N;;;;;\n13B8C;EGYPTIAN HIEROGLYPH-13B8C;Lo;0;L;;;;;N;;;;;\n13B8D;EGYPTIAN HIEROGLYPH-13B8D;Lo;0;L;;;;;N;;;;;\n13B8E;EGYPTIAN HIEROGLYPH-13B8E;Lo;0;L;;;;;N;;;;;\n13B8F;EGYPTIAN HIEROGLYPH-13B8F;Lo;0;L;;;;;N;;;;;\n13B90;EGYPTIAN HIEROGLYPH-13B90;Lo;0;L;;;;;N;;;;;\n13B91;EGYPTIAN HIEROGLYPH-13B91;Lo;0;L;;;;;N;;;;;\n13B92;EGYPTIAN HIEROGLYPH-13B92;Lo;0;L;;;;;N;;;;;\n13B93;EGYPTIAN HIEROGLYPH-13B93;Lo;0;L;;;;;N;;;;;\n13B94;EGYPTIAN HIEROGLYPH-13B94;Lo;0;L;;;;;N;;;;;\n13B95;EGYPTIAN HIEROGLYPH-13B95;Lo;0;L;;;;;N;;;;;\n13B96;EGYPTIAN HIEROGLYPH-13B96;Lo;0;L;;;;;N;;;;;\n13B97;EGYPTIAN HIEROGLYPH-13B97;Lo;0;L;;;;;N;;;;;\n13B98;EGYPTIAN HIEROGLYPH-13B98;Lo;0;L;;;;;N;;;;;\n13B99;EGYPTIAN HIEROGLYPH-13B99;Lo;0;L;;;;;N;;;;;\n13B9A;EGYPTIAN HIEROGLYPH-13B9A;Lo;0;L;;;;;N;;;;;\n13B9B;EGYPTIAN HIEROGLYPH-13B9B;Lo;0;L;;;;;N;;;;;\n13B9C;EGYPTIAN HIEROGLYPH-13B9C;Lo;0;L;;;;;N;;;;;\n13B9D;EGYPTIAN HIEROGLYPH-13B9D;Lo;0;L;;;;;N;;;;;\n13B9E;EGYPTIAN HIEROGLYPH-13B9E;Lo;0;L;;;;;N;;;;;\n13B9F;EGYPTIAN HIEROGLYPH-13B9F;Lo;0;L;;;;;N;;;;;\n13BA0;EGYPTIAN HIEROGLYPH-13BA0;Lo;0;L;;;;;N;;;;;\n13BA1;EGYPTIAN HIEROGLYPH-13BA1;Lo;0;L;;;;;N;;;;;\n13BA2;EGYPTIAN HIEROGLYPH-13BA2;Lo;0;L;;;;;N;;;;;\n13BA3;EGYPTIAN HIEROGLYPH-13BA3;Lo;0;L;;;;;N;;;;;\n13BA4;EGYPTIAN HIEROGLYPH-13BA4;Lo;0;L;;;;;N;;;;;\n13BA5;EGYPTIAN HIEROGLYPH-13BA5;Lo;0;L;;;;;N;;;;;\n13BA6;EGYPTIAN HIEROGLYPH-13BA6;Lo;0;L;;;;;N;;;;;\n13BA7;EGYPTIAN HIEROGLYPH-13BA7;Lo;0;L;;;;;N;;;;;\n13BA8;EGYPTIAN HIEROGLYPH-13BA8;Lo;0;L;;;;;N;;;;;\n13BA9;EGYPTIAN HIEROGLYPH-13BA9;Lo;0;L;;;;;N;;;;;\n13BAA;EGYPTIAN HIEROGLYPH-13BAA;Lo;0;L;;;;;N;;;;;\n13BAB;EGYPTIAN HIEROGLYPH-13BAB;Lo;0;L;;;;;N;;;;;\n13BAC;EGYPTIAN HIEROGLYPH-13BAC;Lo;0;L;;;;;N;;;;;\n13BAD;EGYPTIAN HIEROGLYPH-13BAD;Lo;0;L;;;;;N;;;;;\n13BAE;EGYPTIAN HIEROGLYPH-13BAE;Lo;0;L;;;;;N;;;;;\n13BAF;EGYPTIAN HIEROGLYPH-13BAF;Lo;0;L;;;;;N;;;;;\n13BB0;EGYPTIAN HIEROGLYPH-13BB0;Lo;0;L;;;;;N;;;;;\n13BB1;EGYPTIAN HIEROGLYPH-13BB1;Lo;0;L;;;;;N;;;;;\n13BB2;EGYPTIAN HIEROGLYPH-13BB2;Lo;0;L;;;;;N;;;;;\n13BB3;EGYPTIAN HIEROGLYPH-13BB3;Lo;0;L;;;;;N;;;;;\n13BB4;EGYPTIAN HIEROGLYPH-13BB4;Lo;0;L;;;;;N;;;;;\n13BB5;EGYPTIAN HIEROGLYPH-13BB5;Lo;0;L;;;;;N;;;;;\n13BB6;EGYPTIAN HIEROGLYPH-13BB6;Lo;0;L;;;;;N;;;;;\n13BB7;EGYPTIAN HIEROGLYPH-13BB7;Lo;0;L;;;;;N;;;;;\n13BB8;EGYPTIAN HIEROGLYPH-13BB8;Lo;0;L;;;;;N;;;;;\n13BB9;EGYPTIAN HIEROGLYPH-13BB9;Lo;0;L;;;;;N;;;;;\n13BBA;EGYPTIAN HIEROGLYPH-13BBA;Lo;0;L;;;;;N;;;;;\n13BBB;EGYPTIAN HIEROGLYPH-13BBB;Lo;0;L;;;;;N;;;;;\n13BBC;EGYPTIAN HIEROGLYPH-13BBC;Lo;0;L;;;;;N;;;;;\n13BBD;EGYPTIAN HIEROGLYPH-13BBD;Lo;0;L;;;;;N;;;;;\n13BBE;EGYPTIAN HIEROGLYPH-13BBE;Lo;0;L;;;;;N;;;;;\n13BBF;EGYPTIAN HIEROGLYPH-13BBF;Lo;0;L;;;;;N;;;;;\n13BC0;EGYPTIAN HIEROGLYPH-13BC0;Lo;0;L;;;;;N;;;;;\n13BC1;EGYPTIAN HIEROGLYPH-13BC1;Lo;0;L;;;;;N;;;;;\n13BC2;EGYPTIAN HIEROGLYPH-13BC2;Lo;0;L;;;;;N;;;;;\n13BC3;EGYPTIAN HIEROGLYPH-13BC3;Lo;0;L;;;;;N;;;;;\n13BC4;EGYPTIAN HIEROGLYPH-13BC4;Lo;0;L;;;;;N;;;;;\n13BC5;EGYPTIAN HIEROGLYPH-13BC5;Lo;0;L;;;;;N;;;;;\n13BC6;EGYPTIAN HIEROGLYPH-13BC6;Lo;0;L;;;;;N;;;;;\n13BC7;EGYPTIAN HIEROGLYPH-13BC7;Lo;0;L;;;;;N;;;;;\n13BC8;EGYPTIAN HIEROGLYPH-13BC8;Lo;0;L;;;;;N;;;;;\n13BC9;EGYPTIAN HIEROGLYPH-13BC9;Lo;0;L;;;;;N;;;;;\n13BCA;EGYPTIAN HIEROGLYPH-13BCA;Lo;0;L;;;;;N;;;;;\n13BCB;EGYPTIAN HIEROGLYPH-13BCB;Lo;0;L;;;;;N;;;;;\n13BCC;EGYPTIAN HIEROGLYPH-13BCC;Lo;0;L;;;;;N;;;;;\n13BCD;EGYPTIAN HIEROGLYPH-13BCD;Lo;0;L;;;;;N;;;;;\n13BCE;EGYPTIAN HIEROGLYPH-13BCE;Lo;0;L;;;;;N;;;;;\n13BCF;EGYPTIAN HIEROGLYPH-13BCF;Lo;0;L;;;;;N;;;;;\n13BD0;EGYPTIAN HIEROGLYPH-13BD0;Lo;0;L;;;;;N;;;;;\n13BD1;EGYPTIAN HIEROGLYPH-13BD1;Lo;0;L;;;;;N;;;;;\n13BD2;EGYPTIAN HIEROGLYPH-13BD2;Lo;0;L;;;;;N;;;;;\n13BD3;EGYPTIAN HIEROGLYPH-13BD3;Lo;0;L;;;;;N;;;;;\n13BD4;EGYPTIAN HIEROGLYPH-13BD4;Lo;0;L;;;;;N;;;;;\n13BD5;EGYPTIAN HIEROGLYPH-13BD5;Lo;0;L;;;;;N;;;;;\n13BD6;EGYPTIAN HIEROGLYPH-13BD6;Lo;0;L;;;;;N;;;;;\n13BD7;EGYPTIAN HIEROGLYPH-13BD7;Lo;0;L;;;;;N;;;;;\n13BD8;EGYPTIAN HIEROGLYPH-13BD8;Lo;0;L;;;;;N;;;;;\n13BD9;EGYPTIAN HIEROGLYPH-13BD9;Lo;0;L;;;;;N;;;;;\n13BDA;EGYPTIAN HIEROGLYPH-13BDA;Lo;0;L;;;;;N;;;;;\n13BDB;EGYPTIAN HIEROGLYPH-13BDB;Lo;0;L;;;;;N;;;;;\n13BDC;EGYPTIAN HIEROGLYPH-13BDC;Lo;0;L;;;;;N;;;;;\n13BDD;EGYPTIAN HIEROGLYPH-13BDD;Lo;0;L;;;;;N;;;;;\n13BDE;EGYPTIAN HIEROGLYPH-13BDE;Lo;0;L;;;;;N;;;;;\n13BDF;EGYPTIAN HIEROGLYPH-13BDF;Lo;0;L;;;;;N;;;;;\n13BE0;EGYPTIAN HIEROGLYPH-13BE0;Lo;0;L;;;;;N;;;;;\n13BE1;EGYPTIAN HIEROGLYPH-13BE1;Lo;0;L;;;;;N;;;;;\n13BE2;EGYPTIAN HIEROGLYPH-13BE2;Lo;0;L;;;;;N;;;;;\n13BE3;EGYPTIAN HIEROGLYPH-13BE3;Lo;0;L;;;;;N;;;;;\n13BE4;EGYPTIAN HIEROGLYPH-13BE4;Lo;0;L;;;;;N;;;;;\n13BE5;EGYPTIAN HIEROGLYPH-13BE5;Lo;0;L;;;;;N;;;;;\n13BE6;EGYPTIAN HIEROGLYPH-13BE6;Lo;0;L;;;;;N;;;;;\n13BE7;EGYPTIAN HIEROGLYPH-13BE7;Lo;0;L;;;;;N;;;;;\n13BE8;EGYPTIAN HIEROGLYPH-13BE8;Lo;0;L;;;;;N;;;;;\n13BE9;EGYPTIAN HIEROGLYPH-13BE9;Lo;0;L;;;;;N;;;;;\n13BEA;EGYPTIAN HIEROGLYPH-13BEA;Lo;0;L;;;;;N;;;;;\n13BEB;EGYPTIAN HIEROGLYPH-13BEB;Lo;0;L;;;;;N;;;;;\n13BEC;EGYPTIAN HIEROGLYPH-13BEC;Lo;0;L;;;;;N;;;;;\n13BED;EGYPTIAN HIEROGLYPH-13BED;Lo;0;L;;;;;N;;;;;\n13BEE;EGYPTIAN HIEROGLYPH-13BEE;Lo;0;L;;;;;N;;;;;\n13BEF;EGYPTIAN HIEROGLYPH-13BEF;Lo;0;L;;;;;N;;;;;\n13BF0;EGYPTIAN HIEROGLYPH-13BF0;Lo;0;L;;;;;N;;;;;\n13BF1;EGYPTIAN HIEROGLYPH-13BF1;Lo;0;L;;;;;N;;;;;\n13BF2;EGYPTIAN HIEROGLYPH-13BF2;Lo;0;L;;;;;N;;;;;\n13BF3;EGYPTIAN HIEROGLYPH-13BF3;Lo;0;L;;;;;N;;;;;\n13BF4;EGYPTIAN HIEROGLYPH-13BF4;Lo;0;L;;;;;N;;;;;\n13BF5;EGYPTIAN HIEROGLYPH-13BF5;Lo;0;L;;;;;N;;;;;\n13BF6;EGYPTIAN HIEROGLYPH-13BF6;Lo;0;L;;;;;N;;;;;\n13BF7;EGYPTIAN HIEROGLYPH-13BF7;Lo;0;L;;;;;N;;;;;\n13BF8;EGYPTIAN HIEROGLYPH-13BF8;Lo;0;L;;;;;N;;;;;\n13BF9;EGYPTIAN HIEROGLYPH-13BF9;Lo;0;L;;;;;N;;;;;\n13BFA;EGYPTIAN HIEROGLYPH-13BFA;Lo;0;L;;;;;N;;;;;\n13BFB;EGYPTIAN HIEROGLYPH-13BFB;Lo;0;L;;;;;N;;;;;\n13BFC;EGYPTIAN HIEROGLYPH-13BFC;Lo;0;L;;;;;N;;;;;\n13BFD;EGYPTIAN HIEROGLYPH-13BFD;Lo;0;L;;;;;N;;;;;\n13BFE;EGYPTIAN HIEROGLYPH-13BFE;Lo;0;L;;;;;N;;;;;\n13BFF;EGYPTIAN HIEROGLYPH-13BFF;Lo;0;L;;;;;N;;;;;\n13C00;EGYPTIAN HIEROGLYPH-13C00;Lo;0;L;;;;;N;;;;;\n13C01;EGYPTIAN HIEROGLYPH-13C01;Lo;0;L;;;;;N;;;;;\n13C02;EGYPTIAN HIEROGLYPH-13C02;Lo;0;L;;;;;N;;;;;\n13C03;EGYPTIAN HIEROGLYPH-13C03;Lo;0;L;;;;;N;;;;;\n13C04;EGYPTIAN HIEROGLYPH-13C04;Lo;0;L;;;;;N;;;;;\n13C05;EGYPTIAN HIEROGLYPH-13C05;Lo;0;L;;;;;N;;;;;\n13C06;EGYPTIAN HIEROGLYPH-13C06;Lo;0;L;;;;;N;;;;;\n13C07;EGYPTIAN HIEROGLYPH-13C07;Lo;0;L;;;;;N;;;;;\n13C08;EGYPTIAN HIEROGLYPH-13C08;Lo;0;L;;;;;N;;;;;\n13C09;EGYPTIAN HIEROGLYPH-13C09;Lo;0;L;;;;;N;;;;;\n13C0A;EGYPTIAN HIEROGLYPH-13C0A;Lo;0;L;;;;;N;;;;;\n13C0B;EGYPTIAN HIEROGLYPH-13C0B;Lo;0;L;;;;;N;;;;;\n13C0C;EGYPTIAN HIEROGLYPH-13C0C;Lo;0;L;;;;;N;;;;;\n13C0D;EGYPTIAN HIEROGLYPH-13C0D;Lo;0;L;;;;;N;;;;;\n13C0E;EGYPTIAN HIEROGLYPH-13C0E;Lo;0;L;;;;;N;;;;;\n13C0F;EGYPTIAN HIEROGLYPH-13C0F;Lo;0;L;;;;;N;;;;;\n13C10;EGYPTIAN HIEROGLYPH-13C10;Lo;0;L;;;;;N;;;;;\n13C11;EGYPTIAN HIEROGLYPH-13C11;Lo;0;L;;;;;N;;;;;\n13C12;EGYPTIAN HIEROGLYPH-13C12;Lo;0;L;;;;;N;;;;;\n13C13;EGYPTIAN HIEROGLYPH-13C13;Lo;0;L;;;;;N;;;;;\n13C14;EGYPTIAN HIEROGLYPH-13C14;Lo;0;L;;;;;N;;;;;\n13C15;EGYPTIAN HIEROGLYPH-13C15;Lo;0;L;;;;;N;;;;;\n13C16;EGYPTIAN HIEROGLYPH-13C16;Lo;0;L;;;;;N;;;;;\n13C17;EGYPTIAN HIEROGLYPH-13C17;Lo;0;L;;;;;N;;;;;\n13C18;EGYPTIAN HIEROGLYPH-13C18;Lo;0;L;;;;;N;;;;;\n13C19;EGYPTIAN HIEROGLYPH-13C19;Lo;0;L;;;;;N;;;;;\n13C1A;EGYPTIAN HIEROGLYPH-13C1A;Lo;0;L;;;;;N;;;;;\n13C1B;EGYPTIAN HIEROGLYPH-13C1B;Lo;0;L;;;;;N;;;;;\n13C1C;EGYPTIAN HIEROGLYPH-13C1C;Lo;0;L;;;;;N;;;;;\n13C1D;EGYPTIAN HIEROGLYPH-13C1D;Lo;0;L;;;;;N;;;;;\n13C1E;EGYPTIAN HIEROGLYPH-13C1E;Lo;0;L;;;;;N;;;;;\n13C1F;EGYPTIAN HIEROGLYPH-13C1F;Lo;0;L;;;;;N;;;;;\n13C20;EGYPTIAN HIEROGLYPH-13C20;Lo;0;L;;;;;N;;;;;\n13C21;EGYPTIAN HIEROGLYPH-13C21;Lo;0;L;;;;;N;;;;;\n13C22;EGYPTIAN HIEROGLYPH-13C22;Lo;0;L;;;;;N;;;;;\n13C23;EGYPTIAN HIEROGLYPH-13C23;Lo;0;L;;;;;N;;;;;\n13C24;EGYPTIAN HIEROGLYPH-13C24;Lo;0;L;;;;;N;;;;;\n13C25;EGYPTIAN HIEROGLYPH-13C25;Lo;0;L;;;;;N;;;;;\n13C26;EGYPTIAN HIEROGLYPH-13C26;Lo;0;L;;;;;N;;;;;\n13C27;EGYPTIAN HIEROGLYPH-13C27;Lo;0;L;;;;;N;;;;;\n13C28;EGYPTIAN HIEROGLYPH-13C28;Lo;0;L;;;;;N;;;;;\n13C29;EGYPTIAN HIEROGLYPH-13C29;Lo;0;L;;;;;N;;;;;\n13C2A;EGYPTIAN HIEROGLYPH-13C2A;Lo;0;L;;;;;N;;;;;\n13C2B;EGYPTIAN HIEROGLYPH-13C2B;Lo;0;L;;;;;N;;;;;\n13C2C;EGYPTIAN HIEROGLYPH-13C2C;Lo;0;L;;;;;N;;;;;\n13C2D;EGYPTIAN HIEROGLYPH-13C2D;Lo;0;L;;;;;N;;;;;\n13C2E;EGYPTIAN HIEROGLYPH-13C2E;Lo;0;L;;;;;N;;;;;\n13C2F;EGYPTIAN HIEROGLYPH-13C2F;Lo;0;L;;;;;N;;;;;\n13C30;EGYPTIAN HIEROGLYPH-13C30;Lo;0;L;;;;;N;;;;;\n13C31;EGYPTIAN HIEROGLYPH-13C31;Lo;0;L;;;;;N;;;;;\n13C32;EGYPTIAN HIEROGLYPH-13C32;Lo;0;L;;;;;N;;;;;\n13C33;EGYPTIAN HIEROGLYPH-13C33;Lo;0;L;;;;;N;;;;;\n13C34;EGYPTIAN HIEROGLYPH-13C34;Lo;0;L;;;;;N;;;;;\n13C35;EGYPTIAN HIEROGLYPH-13C35;Lo;0;L;;;;;N;;;;;\n13C36;EGYPTIAN HIEROGLYPH-13C36;Lo;0;L;;;;;N;;;;;\n13C37;EGYPTIAN HIEROGLYPH-13C37;Lo;0;L;;;;;N;;;;;\n13C38;EGYPTIAN HIEROGLYPH-13C38;Lo;0;L;;;;;N;;;;;\n13C39;EGYPTIAN HIEROGLYPH-13C39;Lo;0;L;;;;;N;;;;;\n13C3A;EGYPTIAN HIEROGLYPH-13C3A;Lo;0;L;;;;;N;;;;;\n13C3B;EGYPTIAN HIEROGLYPH-13C3B;Lo;0;L;;;;;N;;;;;\n13C3C;EGYPTIAN HIEROGLYPH-13C3C;Lo;0;L;;;;;N;;;;;\n13C3D;EGYPTIAN HIEROGLYPH-13C3D;Lo;0;L;;;;;N;;;;;\n13C3E;EGYPTIAN HIEROGLYPH-13C3E;Lo;0;L;;;;;N;;;;;\n13C3F;EGYPTIAN HIEROGLYPH-13C3F;Lo;0;L;;;;;N;;;;;\n13C40;EGYPTIAN HIEROGLYPH-13C40;Lo;0;L;;;;;N;;;;;\n13C41;EGYPTIAN HIEROGLYPH-13C41;Lo;0;L;;;;;N;;;;;\n13C42;EGYPTIAN HIEROGLYPH-13C42;Lo;0;L;;;;;N;;;;;\n13C43;EGYPTIAN HIEROGLYPH-13C43;Lo;0;L;;;;;N;;;;;\n13C44;EGYPTIAN HIEROGLYPH-13C44;Lo;0;L;;;;;N;;;;;\n13C45;EGYPTIAN HIEROGLYPH-13C45;Lo;0;L;;;;;N;;;;;\n13C46;EGYPTIAN HIEROGLYPH-13C46;Lo;0;L;;;;;N;;;;;\n13C47;EGYPTIAN HIEROGLYPH-13C47;Lo;0;L;;;;;N;;;;;\n13C48;EGYPTIAN HIEROGLYPH-13C48;Lo;0;L;;;;;N;;;;;\n13C49;EGYPTIAN HIEROGLYPH-13C49;Lo;0;L;;;;;N;;;;;\n13C4A;EGYPTIAN HIEROGLYPH-13C4A;Lo;0;L;;;;;N;;;;;\n13C4B;EGYPTIAN HIEROGLYPH-13C4B;Lo;0;L;;;;;N;;;;;\n13C4C;EGYPTIAN HIEROGLYPH-13C4C;Lo;0;L;;;;;N;;;;;\n13C4D;EGYPTIAN HIEROGLYPH-13C4D;Lo;0;L;;;;;N;;;;;\n13C4E;EGYPTIAN HIEROGLYPH-13C4E;Lo;0;L;;;;;N;;;;;\n13C4F;EGYPTIAN HIEROGLYPH-13C4F;Lo;0;L;;;;;N;;;;;\n13C50;EGYPTIAN HIEROGLYPH-13C50;Lo;0;L;;;;;N;;;;;\n13C51;EGYPTIAN HIEROGLYPH-13C51;Lo;0;L;;;;;N;;;;;\n13C52;EGYPTIAN HIEROGLYPH-13C52;Lo;0;L;;;;;N;;;;;\n13C53;EGYPTIAN HIEROGLYPH-13C53;Lo;0;L;;;;;N;;;;;\n13C54;EGYPTIAN HIEROGLYPH-13C54;Lo;0;L;;;;;N;;;;;\n13C55;EGYPTIAN HIEROGLYPH-13C55;Lo;0;L;;;;;N;;;;;\n13C56;EGYPTIAN HIEROGLYPH-13C56;Lo;0;L;;;;;N;;;;;\n13C57;EGYPTIAN HIEROGLYPH-13C57;Lo;0;L;;;;;N;;;;;\n13C58;EGYPTIAN HIEROGLYPH-13C58;Lo;0;L;;;;;N;;;;;\n13C59;EGYPTIAN HIEROGLYPH-13C59;Lo;0;L;;;;;N;;;;;\n13C5A;EGYPTIAN HIEROGLYPH-13C5A;Lo;0;L;;;;;N;;;;;\n13C5B;EGYPTIAN HIEROGLYPH-13C5B;Lo;0;L;;;;;N;;;;;\n13C5C;EGYPTIAN HIEROGLYPH-13C5C;Lo;0;L;;;;;N;;;;;\n13C5D;EGYPTIAN HIEROGLYPH-13C5D;Lo;0;L;;;;;N;;;;;\n13C5E;EGYPTIAN HIEROGLYPH-13C5E;Lo;0;L;;;;;N;;;;;\n13C5F;EGYPTIAN HIEROGLYPH-13C5F;Lo;0;L;;;;;N;;;;;\n13C60;EGYPTIAN HIEROGLYPH-13C60;Lo;0;L;;;;;N;;;;;\n13C61;EGYPTIAN HIEROGLYPH-13C61;Lo;0;L;;;;;N;;;;;\n13C62;EGYPTIAN HIEROGLYPH-13C62;Lo;0;L;;;;;N;;;;;\n13C63;EGYPTIAN HIEROGLYPH-13C63;Lo;0;L;;;;;N;;;;;\n13C64;EGYPTIAN HIEROGLYPH-13C64;Lo;0;L;;;;;N;;;;;\n13C65;EGYPTIAN HIEROGLYPH-13C65;Lo;0;L;;;;;N;;;;;\n13C66;EGYPTIAN HIEROGLYPH-13C66;Lo;0;L;;;;;N;;;;;\n13C67;EGYPTIAN HIEROGLYPH-13C67;Lo;0;L;;;;;N;;;;;\n13C68;EGYPTIAN HIEROGLYPH-13C68;Lo;0;L;;;;;N;;;;;\n13C69;EGYPTIAN HIEROGLYPH-13C69;Lo;0;L;;;;;N;;;;;\n13C6A;EGYPTIAN HIEROGLYPH-13C6A;Lo;0;L;;;;;N;;;;;\n13C6B;EGYPTIAN HIEROGLYPH-13C6B;Lo;0;L;;;;;N;;;;;\n13C6C;EGYPTIAN HIEROGLYPH-13C6C;Lo;0;L;;;;;N;;;;;\n13C6D;EGYPTIAN HIEROGLYPH-13C6D;Lo;0;L;;;;;N;;;;;\n13C6E;EGYPTIAN HIEROGLYPH-13C6E;Lo;0;L;;;;;N;;;;;\n13C6F;EGYPTIAN HIEROGLYPH-13C6F;Lo;0;L;;;;;N;;;;;\n13C70;EGYPTIAN HIEROGLYPH-13C70;Lo;0;L;;;;;N;;;;;\n13C71;EGYPTIAN HIEROGLYPH-13C71;Lo;0;L;;;;;N;;;;;\n13C72;EGYPTIAN HIEROGLYPH-13C72;Lo;0;L;;;;;N;;;;;\n13C73;EGYPTIAN HIEROGLYPH-13C73;Lo;0;L;;;;;N;;;;;\n13C74;EGYPTIAN HIEROGLYPH-13C74;Lo;0;L;;;;;N;;;;;\n13C75;EGYPTIAN HIEROGLYPH-13C75;Lo;0;L;;;;;N;;;;;\n13C76;EGYPTIAN HIEROGLYPH-13C76;Lo;0;L;;;;;N;;;;;\n13C77;EGYPTIAN HIEROGLYPH-13C77;Lo;0;L;;;;;N;;;;;\n13C78;EGYPTIAN HIEROGLYPH-13C78;Lo;0;L;;;;;N;;;;;\n13C79;EGYPTIAN HIEROGLYPH-13C79;Lo;0;L;;;;;N;;;;;\n13C7A;EGYPTIAN HIEROGLYPH-13C7A;Lo;0;L;;;;;N;;;;;\n13C7B;EGYPTIAN HIEROGLYPH-13C7B;Lo;0;L;;;;;N;;;;;\n13C7C;EGYPTIAN HIEROGLYPH-13C7C;Lo;0;L;;;;;N;;;;;\n13C7D;EGYPTIAN HIEROGLYPH-13C7D;Lo;0;L;;;;;N;;;;;\n13C7E;EGYPTIAN HIEROGLYPH-13C7E;Lo;0;L;;;;;N;;;;;\n13C7F;EGYPTIAN HIEROGLYPH-13C7F;Lo;0;L;;;;;N;;;;;\n13C80;EGYPTIAN HIEROGLYPH-13C80;Lo;0;L;;;;;N;;;;;\n13C81;EGYPTIAN HIEROGLYPH-13C81;Lo;0;L;;;;;N;;;;;\n13C82;EGYPTIAN HIEROGLYPH-13C82;Lo;0;L;;;;;N;;;;;\n13C83;EGYPTIAN HIEROGLYPH-13C83;Lo;0;L;;;;;N;;;;;\n13C84;EGYPTIAN HIEROGLYPH-13C84;Lo;0;L;;;;;N;;;;;\n13C85;EGYPTIAN HIEROGLYPH-13C85;Lo;0;L;;;;;N;;;;;\n13C86;EGYPTIAN HIEROGLYPH-13C86;Lo;0;L;;;;;N;;;;;\n13C87;EGYPTIAN HIEROGLYPH-13C87;Lo;0;L;;;;;N;;;;;\n13C88;EGYPTIAN HIEROGLYPH-13C88;Lo;0;L;;;;;N;;;;;\n13C89;EGYPTIAN HIEROGLYPH-13C89;Lo;0;L;;;;;N;;;;;\n13C8A;EGYPTIAN HIEROGLYPH-13C8A;Lo;0;L;;;;;N;;;;;\n13C8B;EGYPTIAN HIEROGLYPH-13C8B;Lo;0;L;;;;;N;;;;;\n13C8C;EGYPTIAN HIEROGLYPH-13C8C;Lo;0;L;;;;;N;;;;;\n13C8D;EGYPTIAN HIEROGLYPH-13C8D;Lo;0;L;;;;;N;;;;;\n13C8E;EGYPTIAN HIEROGLYPH-13C8E;Lo;0;L;;;;;N;;;;;\n13C8F;EGYPTIAN HIEROGLYPH-13C8F;Lo;0;L;;;;;N;;;;;\n13C90;EGYPTIAN HIEROGLYPH-13C90;Lo;0;L;;;;;N;;;;;\n13C91;EGYPTIAN HIEROGLYPH-13C91;Lo;0;L;;;;;N;;;;;\n13C92;EGYPTIAN HIEROGLYPH-13C92;Lo;0;L;;;;;N;;;;;\n13C93;EGYPTIAN HIEROGLYPH-13C93;Lo;0;L;;;;;N;;;;;\n13C94;EGYPTIAN HIEROGLYPH-13C94;Lo;0;L;;;;;N;;;;;\n13C95;EGYPTIAN HIEROGLYPH-13C95;Lo;0;L;;;;;N;;;;;\n13C96;EGYPTIAN HIEROGLYPH-13C96;Lo;0;L;;;;;N;;;;;\n13C97;EGYPTIAN HIEROGLYPH-13C97;Lo;0;L;;;;;N;;;;;\n13C98;EGYPTIAN HIEROGLYPH-13C98;Lo;0;L;;;;;N;;;;;\n13C99;EGYPTIAN HIEROGLYPH-13C99;Lo;0;L;;;;;N;;;;;\n13C9A;EGYPTIAN HIEROGLYPH-13C9A;Lo;0;L;;;;;N;;;;;\n13C9B;EGYPTIAN HIEROGLYPH-13C9B;Lo;0;L;;;;;N;;;;;\n13C9C;EGYPTIAN HIEROGLYPH-13C9C;Lo;0;L;;;;;N;;;;;\n13C9D;EGYPTIAN HIEROGLYPH-13C9D;Lo;0;L;;;;;N;;;;;\n13C9E;EGYPTIAN HIEROGLYPH-13C9E;Lo;0;L;;;;;N;;;;;\n13C9F;EGYPTIAN HIEROGLYPH-13C9F;Lo;0;L;;;;;N;;;;;\n13CA0;EGYPTIAN HIEROGLYPH-13CA0;Lo;0;L;;;;;N;;;;;\n13CA1;EGYPTIAN HIEROGLYPH-13CA1;Lo;0;L;;;;;N;;;;;\n13CA2;EGYPTIAN HIEROGLYPH-13CA2;Lo;0;L;;;;;N;;;;;\n13CA3;EGYPTIAN HIEROGLYPH-13CA3;Lo;0;L;;;;;N;;;;;\n13CA4;EGYPTIAN HIEROGLYPH-13CA4;Lo;0;L;;;;;N;;;;;\n13CA5;EGYPTIAN HIEROGLYPH-13CA5;Lo;0;L;;;;;N;;;;;\n13CA6;EGYPTIAN HIEROGLYPH-13CA6;Lo;0;L;;;;;N;;;;;\n13CA7;EGYPTIAN HIEROGLYPH-13CA7;Lo;0;L;;;;;N;;;;;\n13CA8;EGYPTIAN HIEROGLYPH-13CA8;Lo;0;L;;;;;N;;;;;\n13CA9;EGYPTIAN HIEROGLYPH-13CA9;Lo;0;L;;;;;N;;;;;\n13CAA;EGYPTIAN HIEROGLYPH-13CAA;Lo;0;L;;;;;N;;;;;\n13CAB;EGYPTIAN HIEROGLYPH-13CAB;Lo;0;L;;;;;N;;;;;\n13CAC;EGYPTIAN HIEROGLYPH-13CAC;Lo;0;L;;;;;N;;;;;\n13CAD;EGYPTIAN HIEROGLYPH-13CAD;Lo;0;L;;;;;N;;;;;\n13CAE;EGYPTIAN HIEROGLYPH-13CAE;Lo;0;L;;;;;N;;;;;\n13CAF;EGYPTIAN HIEROGLYPH-13CAF;Lo;0;L;;;;;N;;;;;\n13CB0;EGYPTIAN HIEROGLYPH-13CB0;Lo;0;L;;;;;N;;;;;\n13CB1;EGYPTIAN HIEROGLYPH-13CB1;Lo;0;L;;;;;N;;;;;\n13CB2;EGYPTIAN HIEROGLYPH-13CB2;Lo;0;L;;;;;N;;;;;\n13CB3;EGYPTIAN HIEROGLYPH-13CB3;Lo;0;L;;;;;N;;;;;\n13CB4;EGYPTIAN HIEROGLYPH-13CB4;Lo;0;L;;;;;N;;;;;\n13CB5;EGYPTIAN HIEROGLYPH-13CB5;Lo;0;L;;;;;N;;;;;\n13CB6;EGYPTIAN HIEROGLYPH-13CB6;Lo;0;L;;;;;N;;;;;\n13CB7;EGYPTIAN HIEROGLYPH-13CB7;Lo;0;L;;;;;N;;;;;\n13CB8;EGYPTIAN HIEROGLYPH-13CB8;Lo;0;L;;;;;N;;;;;\n13CB9;EGYPTIAN HIEROGLYPH-13CB9;Lo;0;L;;;;;N;;;;;\n13CBA;EGYPTIAN HIEROGLYPH-13CBA;Lo;0;L;;;;;N;;;;;\n13CBB;EGYPTIAN HIEROGLYPH-13CBB;Lo;0;L;;;;;N;;;;;\n13CBC;EGYPTIAN HIEROGLYPH-13CBC;Lo;0;L;;;;;N;;;;;\n13CBD;EGYPTIAN HIEROGLYPH-13CBD;Lo;0;L;;;;;N;;;;;\n13CBE;EGYPTIAN HIEROGLYPH-13CBE;Lo;0;L;;;;;N;;;;;\n13CBF;EGYPTIAN HIEROGLYPH-13CBF;Lo;0;L;;;;;N;;;;;\n13CC0;EGYPTIAN HIEROGLYPH-13CC0;Lo;0;L;;;;;N;;;;;\n13CC1;EGYPTIAN HIEROGLYPH-13CC1;Lo;0;L;;;;;N;;;;;\n13CC2;EGYPTIAN HIEROGLYPH-13CC2;Lo;0;L;;;;;N;;;;;\n13CC3;EGYPTIAN HIEROGLYPH-13CC3;Lo;0;L;;;;;N;;;;;\n13CC4;EGYPTIAN HIEROGLYPH-13CC4;Lo;0;L;;;;;N;;;;;\n13CC5;EGYPTIAN HIEROGLYPH-13CC5;Lo;0;L;;;;;N;;;;;\n13CC6;EGYPTIAN HIEROGLYPH-13CC6;Lo;0;L;;;;;N;;;;;\n13CC7;EGYPTIAN HIEROGLYPH-13CC7;Lo;0;L;;;;;N;;;;;\n13CC8;EGYPTIAN HIEROGLYPH-13CC8;Lo;0;L;;;;;N;;;;;\n13CC9;EGYPTIAN HIEROGLYPH-13CC9;Lo;0;L;;;;;N;;;;;\n13CCA;EGYPTIAN HIEROGLYPH-13CCA;Lo;0;L;;;;;N;;;;;\n13CCB;EGYPTIAN HIEROGLYPH-13CCB;Lo;0;L;;;;;N;;;;;\n13CCC;EGYPTIAN HIEROGLYPH-13CCC;Lo;0;L;;;;;N;;;;;\n13CCD;EGYPTIAN HIEROGLYPH-13CCD;Lo;0;L;;;;;N;;;;;\n13CCE;EGYPTIAN HIEROGLYPH-13CCE;Lo;0;L;;;;;N;;;;;\n13CCF;EGYPTIAN HIEROGLYPH-13CCF;Lo;0;L;;;;;N;;;;;\n13CD0;EGYPTIAN HIEROGLYPH-13CD0;Lo;0;L;;;;;N;;;;;\n13CD1;EGYPTIAN HIEROGLYPH-13CD1;Lo;0;L;;;;;N;;;;;\n13CD2;EGYPTIAN HIEROGLYPH-13CD2;Lo;0;L;;;;;N;;;;;\n13CD3;EGYPTIAN HIEROGLYPH-13CD3;Lo;0;L;;;;;N;;;;;\n13CD4;EGYPTIAN HIEROGLYPH-13CD4;Lo;0;L;;;;;N;;;;;\n13CD5;EGYPTIAN HIEROGLYPH-13CD5;Lo;0;L;;;;;N;;;;;\n13CD6;EGYPTIAN HIEROGLYPH-13CD6;Lo;0;L;;;;;N;;;;;\n13CD7;EGYPTIAN HIEROGLYPH-13CD7;Lo;0;L;;;;;N;;;;;\n13CD8;EGYPTIAN HIEROGLYPH-13CD8;Lo;0;L;;;;;N;;;;;\n13CD9;EGYPTIAN HIEROGLYPH-13CD9;Lo;0;L;;;;;N;;;;;\n13CDA;EGYPTIAN HIEROGLYPH-13CDA;Lo;0;L;;;;;N;;;;;\n13CDB;EGYPTIAN HIEROGLYPH-13CDB;Lo;0;L;;;;;N;;;;;\n13CDC;EGYPTIAN HIEROGLYPH-13CDC;Lo;0;L;;;;;N;;;;;\n13CDD;EGYPTIAN HIEROGLYPH-13CDD;Lo;0;L;;;;;N;;;;;\n13CDE;EGYPTIAN HIEROGLYPH-13CDE;Lo;0;L;;;;;N;;;;;\n13CDF;EGYPTIAN HIEROGLYPH-13CDF;Lo;0;L;;;;;N;;;;;\n13CE0;EGYPTIAN HIEROGLYPH-13CE0;Lo;0;L;;;;;N;;;;;\n13CE1;EGYPTIAN HIEROGLYPH-13CE1;Lo;0;L;;;;;N;;;;;\n13CE2;EGYPTIAN HIEROGLYPH-13CE2;Lo;0;L;;;;;N;;;;;\n13CE3;EGYPTIAN HIEROGLYPH-13CE3;Lo;0;L;;;;;N;;;;;\n13CE4;EGYPTIAN HIEROGLYPH-13CE4;Lo;0;L;;;;;N;;;;;\n13CE5;EGYPTIAN HIEROGLYPH-13CE5;Lo;0;L;;;;;N;;;;;\n13CE6;EGYPTIAN HIEROGLYPH-13CE6;Lo;0;L;;;;;N;;;;;\n13CE7;EGYPTIAN HIEROGLYPH-13CE7;Lo;0;L;;;;;N;;;;;\n13CE8;EGYPTIAN HIEROGLYPH-13CE8;Lo;0;L;;;;;N;;;;;\n13CE9;EGYPTIAN HIEROGLYPH-13CE9;Lo;0;L;;;;;N;;;;;\n13CEA;EGYPTIAN HIEROGLYPH-13CEA;Lo;0;L;;;;;N;;;;;\n13CEB;EGYPTIAN HIEROGLYPH-13CEB;Lo;0;L;;;;;N;;;;;\n13CEC;EGYPTIAN HIEROGLYPH-13CEC;Lo;0;L;;;;;N;;;;;\n13CED;EGYPTIAN HIEROGLYPH-13CED;Lo;0;L;;;;;N;;;;;\n13CEE;EGYPTIAN HIEROGLYPH-13CEE;Lo;0;L;;;;;N;;;;;\n13CEF;EGYPTIAN HIEROGLYPH-13CEF;Lo;0;L;;;;;N;;;;;\n13CF0;EGYPTIAN HIEROGLYPH-13CF0;Lo;0;L;;;;;N;;;;;\n13CF1;EGYPTIAN HIEROGLYPH-13CF1;Lo;0;L;;;;;N;;;;;\n13CF2;EGYPTIAN HIEROGLYPH-13CF2;Lo;0;L;;;;;N;;;;;\n13CF3;EGYPTIAN HIEROGLYPH-13CF3;Lo;0;L;;;;;N;;;;;\n13CF4;EGYPTIAN HIEROGLYPH-13CF4;Lo;0;L;;;;;N;;;;;\n13CF5;EGYPTIAN HIEROGLYPH-13CF5;Lo;0;L;;;;;N;;;;;\n13CF6;EGYPTIAN HIEROGLYPH-13CF6;Lo;0;L;;;;;N;;;;;\n13CF7;EGYPTIAN HIEROGLYPH-13CF7;Lo;0;L;;;;;N;;;;;\n13CF8;EGYPTIAN HIEROGLYPH-13CF8;Lo;0;L;;;;;N;;;;;\n13CF9;EGYPTIAN HIEROGLYPH-13CF9;Lo;0;L;;;;;N;;;;;\n13CFA;EGYPTIAN HIEROGLYPH-13CFA;Lo;0;L;;;;;N;;;;;\n13CFB;EGYPTIAN HIEROGLYPH-13CFB;Lo;0;L;;;;;N;;;;;\n13CFC;EGYPTIAN HIEROGLYPH-13CFC;Lo;0;L;;;;;N;;;;;\n13CFD;EGYPTIAN HIEROGLYPH-13CFD;Lo;0;L;;;;;N;;;;;\n13CFE;EGYPTIAN HIEROGLYPH-13CFE;Lo;0;L;;;;;N;;;;;\n13CFF;EGYPTIAN HIEROGLYPH-13CFF;Lo;0;L;;;;;N;;;;;\n13D00;EGYPTIAN HIEROGLYPH-13D00;Lo;0;L;;;;;N;;;;;\n13D01;EGYPTIAN HIEROGLYPH-13D01;Lo;0;L;;;;;N;;;;;\n13D02;EGYPTIAN HIEROGLYPH-13D02;Lo;0;L;;;;;N;;;;;\n13D03;EGYPTIAN HIEROGLYPH-13D03;Lo;0;L;;;;;N;;;;;\n13D04;EGYPTIAN HIEROGLYPH-13D04;Lo;0;L;;;;;N;;;;;\n13D05;EGYPTIAN HIEROGLYPH-13D05;Lo;0;L;;;;;N;;;;;\n13D06;EGYPTIAN HIEROGLYPH-13D06;Lo;0;L;;;;;N;;;;;\n13D07;EGYPTIAN HIEROGLYPH-13D07;Lo;0;L;;;;;N;;;;;\n13D08;EGYPTIAN HIEROGLYPH-13D08;Lo;0;L;;;;;N;;;;;\n13D09;EGYPTIAN HIEROGLYPH-13D09;Lo;0;L;;;;;N;;;;;\n13D0A;EGYPTIAN HIEROGLYPH-13D0A;Lo;0;L;;;;;N;;;;;\n13D0B;EGYPTIAN HIEROGLYPH-13D0B;Lo;0;L;;;;;N;;;;;\n13D0C;EGYPTIAN HIEROGLYPH-13D0C;Lo;0;L;;;;;N;;;;;\n13D0D;EGYPTIAN HIEROGLYPH-13D0D;Lo;0;L;;;;;N;;;;;\n13D0E;EGYPTIAN HIEROGLYPH-13D0E;Lo;0;L;;;;;N;;;;;\n13D0F;EGYPTIAN HIEROGLYPH-13D0F;Lo;0;L;;;;;N;;;;;\n13D10;EGYPTIAN HIEROGLYPH-13D10;Lo;0;L;;;;;N;;;;;\n13D11;EGYPTIAN HIEROGLYPH-13D11;Lo;0;L;;;;;N;;;;;\n13D12;EGYPTIAN HIEROGLYPH-13D12;Lo;0;L;;;;;N;;;;;\n13D13;EGYPTIAN HIEROGLYPH-13D13;Lo;0;L;;;;;N;;;;;\n13D14;EGYPTIAN HIEROGLYPH-13D14;Lo;0;L;;;;;N;;;;;\n13D15;EGYPTIAN HIEROGLYPH-13D15;Lo;0;L;;;;;N;;;;;\n13D16;EGYPTIAN HIEROGLYPH-13D16;Lo;0;L;;;;;N;;;;;\n13D17;EGYPTIAN HIEROGLYPH-13D17;Lo;0;L;;;;;N;;;;;\n13D18;EGYPTIAN HIEROGLYPH-13D18;Lo;0;L;;;;;N;;;;;\n13D19;EGYPTIAN HIEROGLYPH-13D19;Lo;0;L;;;;;N;;;;;\n13D1A;EGYPTIAN HIEROGLYPH-13D1A;Lo;0;L;;;;;N;;;;;\n13D1B;EGYPTIAN HIEROGLYPH-13D1B;Lo;0;L;;;;;N;;;;;\n13D1C;EGYPTIAN HIEROGLYPH-13D1C;Lo;0;L;;;;;N;;;;;\n13D1D;EGYPTIAN HIEROGLYPH-13D1D;Lo;0;L;;;;;N;;;;;\n13D1E;EGYPTIAN HIEROGLYPH-13D1E;Lo;0;L;;;;;N;;;;;\n13D1F;EGYPTIAN HIEROGLYPH-13D1F;Lo;0;L;;;;;N;;;;;\n13D20;EGYPTIAN HIEROGLYPH-13D20;Lo;0;L;;;;;N;;;;;\n13D21;EGYPTIAN HIEROGLYPH-13D21;Lo;0;L;;;;;N;;;;;\n13D22;EGYPTIAN HIEROGLYPH-13D22;Lo;0;L;;;;;N;;;;;\n13D23;EGYPTIAN HIEROGLYPH-13D23;Lo;0;L;;;;;N;;;;;\n13D24;EGYPTIAN HIEROGLYPH-13D24;Lo;0;L;;;;;N;;;;;\n13D25;EGYPTIAN HIEROGLYPH-13D25;Lo;0;L;;;;;N;;;;;\n13D26;EGYPTIAN HIEROGLYPH-13D26;Lo;0;L;;;;;N;;;;;\n13D27;EGYPTIAN HIEROGLYPH-13D27;Lo;0;L;;;;;N;;;;;\n13D28;EGYPTIAN HIEROGLYPH-13D28;Lo;0;L;;;;;N;;;;;\n13D29;EGYPTIAN HIEROGLYPH-13D29;Lo;0;L;;;;;N;;;;;\n13D2A;EGYPTIAN HIEROGLYPH-13D2A;Lo;0;L;;;;;N;;;;;\n13D2B;EGYPTIAN HIEROGLYPH-13D2B;Lo;0;L;;;;;N;;;;;\n13D2C;EGYPTIAN HIEROGLYPH-13D2C;Lo;0;L;;;;;N;;;;;\n13D2D;EGYPTIAN HIEROGLYPH-13D2D;Lo;0;L;;;;;N;;;;;\n13D2E;EGYPTIAN HIEROGLYPH-13D2E;Lo;0;L;;;;;N;;;;;\n13D2F;EGYPTIAN HIEROGLYPH-13D2F;Lo;0;L;;;;;N;;;;;\n13D30;EGYPTIAN HIEROGLYPH-13D30;Lo;0;L;;;;;N;;;;;\n13D31;EGYPTIAN HIEROGLYPH-13D31;Lo;0;L;;;;;N;;;;;\n13D32;EGYPTIAN HIEROGLYPH-13D32;Lo;0;L;;;;;N;;;;;\n13D33;EGYPTIAN HIEROGLYPH-13D33;Lo;0;L;;;;;N;;;;;\n13D34;EGYPTIAN HIEROGLYPH-13D34;Lo;0;L;;;;;N;;;;;\n13D35;EGYPTIAN HIEROGLYPH-13D35;Lo;0;L;;;;;N;;;;;\n13D36;EGYPTIAN HIEROGLYPH-13D36;Lo;0;L;;;;;N;;;;;\n13D37;EGYPTIAN HIEROGLYPH-13D37;Lo;0;L;;;;;N;;;;;\n13D38;EGYPTIAN HIEROGLYPH-13D38;Lo;0;L;;;;;N;;;;;\n13D39;EGYPTIAN HIEROGLYPH-13D39;Lo;0;L;;;;;N;;;;;\n13D3A;EGYPTIAN HIEROGLYPH-13D3A;Lo;0;L;;;;;N;;;;;\n13D3B;EGYPTIAN HIEROGLYPH-13D3B;Lo;0;L;;;;;N;;;;;\n13D3C;EGYPTIAN HIEROGLYPH-13D3C;Lo;0;L;;;;;N;;;;;\n13D3D;EGYPTIAN HIEROGLYPH-13D3D;Lo;0;L;;;;;N;;;;;\n13D3E;EGYPTIAN HIEROGLYPH-13D3E;Lo;0;L;;;;;N;;;;;\n13D3F;EGYPTIAN HIEROGLYPH-13D3F;Lo;0;L;;;;;N;;;;;\n13D40;EGYPTIAN HIEROGLYPH-13D40;Lo;0;L;;;;;N;;;;;\n13D41;EGYPTIAN HIEROGLYPH-13D41;Lo;0;L;;;;;N;;;;;\n13D42;EGYPTIAN HIEROGLYPH-13D42;Lo;0;L;;;;;N;;;;;\n13D43;EGYPTIAN HIEROGLYPH-13D43;Lo;0;L;;;;;N;;;;;\n13D44;EGYPTIAN HIEROGLYPH-13D44;Lo;0;L;;;;;N;;;;;\n13D45;EGYPTIAN HIEROGLYPH-13D45;Lo;0;L;;;;;N;;;;;\n13D46;EGYPTIAN HIEROGLYPH-13D46;Lo;0;L;;;;;N;;;;;\n13D47;EGYPTIAN HIEROGLYPH-13D47;Lo;0;L;;;;;N;;;;;\n13D48;EGYPTIAN HIEROGLYPH-13D48;Lo;0;L;;;;;N;;;;;\n13D49;EGYPTIAN HIEROGLYPH-13D49;Lo;0;L;;;;;N;;;;;\n13D4A;EGYPTIAN HIEROGLYPH-13D4A;Lo;0;L;;;;;N;;;;;\n13D4B;EGYPTIAN HIEROGLYPH-13D4B;Lo;0;L;;;;;N;;;;;\n13D4C;EGYPTIAN HIEROGLYPH-13D4C;Lo;0;L;;;;;N;;;;;\n13D4D;EGYPTIAN HIEROGLYPH-13D4D;Lo;0;L;;;;;N;;;;;\n13D4E;EGYPTIAN HIEROGLYPH-13D4E;Lo;0;L;;;;;N;;;;;\n13D4F;EGYPTIAN HIEROGLYPH-13D4F;Lo;0;L;;;;;N;;;;;\n13D50;EGYPTIAN HIEROGLYPH-13D50;Lo;0;L;;;;;N;;;;;\n13D51;EGYPTIAN HIEROGLYPH-13D51;Lo;0;L;;;;;N;;;;;\n13D52;EGYPTIAN HIEROGLYPH-13D52;Lo;0;L;;;;;N;;;;;\n13D53;EGYPTIAN HIEROGLYPH-13D53;Lo;0;L;;;;;N;;;;;\n13D54;EGYPTIAN HIEROGLYPH-13D54;Lo;0;L;;;;;N;;;;;\n13D55;EGYPTIAN HIEROGLYPH-13D55;Lo;0;L;;;;;N;;;;;\n13D56;EGYPTIAN HIEROGLYPH-13D56;Lo;0;L;;;;;N;;;;;\n13D57;EGYPTIAN HIEROGLYPH-13D57;Lo;0;L;;;;;N;;;;;\n13D58;EGYPTIAN HIEROGLYPH-13D58;Lo;0;L;;;;;N;;;;;\n13D59;EGYPTIAN HIEROGLYPH-13D59;Lo;0;L;;;;;N;;;;;\n13D5A;EGYPTIAN HIEROGLYPH-13D5A;Lo;0;L;;;;;N;;;;;\n13D5B;EGYPTIAN HIEROGLYPH-13D5B;Lo;0;L;;;;;N;;;;;\n13D5C;EGYPTIAN HIEROGLYPH-13D5C;Lo;0;L;;;;;N;;;;;\n13D5D;EGYPTIAN HIEROGLYPH-13D5D;Lo;0;L;;;;;N;;;;;\n13D5E;EGYPTIAN HIEROGLYPH-13D5E;Lo;0;L;;;;;N;;;;;\n13D5F;EGYPTIAN HIEROGLYPH-13D5F;Lo;0;L;;;;;N;;;;;\n13D60;EGYPTIAN HIEROGLYPH-13D60;Lo;0;L;;;;;N;;;;;\n13D61;EGYPTIAN HIEROGLYPH-13D61;Lo;0;L;;;;;N;;;;;\n13D62;EGYPTIAN HIEROGLYPH-13D62;Lo;0;L;;;;;N;;;;;\n13D63;EGYPTIAN HIEROGLYPH-13D63;Lo;0;L;;;;;N;;;;;\n13D64;EGYPTIAN HIEROGLYPH-13D64;Lo;0;L;;;;;N;;;;;\n13D65;EGYPTIAN HIEROGLYPH-13D65;Lo;0;L;;;;;N;;;;;\n13D66;EGYPTIAN HIEROGLYPH-13D66;Lo;0;L;;;;;N;;;;;\n13D67;EGYPTIAN HIEROGLYPH-13D67;Lo;0;L;;;;;N;;;;;\n13D68;EGYPTIAN HIEROGLYPH-13D68;Lo;0;L;;;;;N;;;;;\n13D69;EGYPTIAN HIEROGLYPH-13D69;Lo;0;L;;;;;N;;;;;\n13D6A;EGYPTIAN HIEROGLYPH-13D6A;Lo;0;L;;;;;N;;;;;\n13D6B;EGYPTIAN HIEROGLYPH-13D6B;Lo;0;L;;;;;N;;;;;\n13D6C;EGYPTIAN HIEROGLYPH-13D6C;Lo;0;L;;;;;N;;;;;\n13D6D;EGYPTIAN HIEROGLYPH-13D6D;Lo;0;L;;;;;N;;;;;\n13D6E;EGYPTIAN HIEROGLYPH-13D6E;Lo;0;L;;;;;N;;;;;\n13D6F;EGYPTIAN HIEROGLYPH-13D6F;Lo;0;L;;;;;N;;;;;\n13D70;EGYPTIAN HIEROGLYPH-13D70;Lo;0;L;;;;;N;;;;;\n13D71;EGYPTIAN HIEROGLYPH-13D71;Lo;0;L;;;;;N;;;;;\n13D72;EGYPTIAN HIEROGLYPH-13D72;Lo;0;L;;;;;N;;;;;\n13D73;EGYPTIAN HIEROGLYPH-13D73;Lo;0;L;;;;;N;;;;;\n13D74;EGYPTIAN HIEROGLYPH-13D74;Lo;0;L;;;;;N;;;;;\n13D75;EGYPTIAN HIEROGLYPH-13D75;Lo;0;L;;;;;N;;;;;\n13D76;EGYPTIAN HIEROGLYPH-13D76;Lo;0;L;;;;;N;;;;;\n13D77;EGYPTIAN HIEROGLYPH-13D77;Lo;0;L;;;;;N;;;;;\n13D78;EGYPTIAN HIEROGLYPH-13D78;Lo;0;L;;;;;N;;;;;\n13D79;EGYPTIAN HIEROGLYPH-13D79;Lo;0;L;;;;;N;;;;;\n13D7A;EGYPTIAN HIEROGLYPH-13D7A;Lo;0;L;;;;;N;;;;;\n13D7B;EGYPTIAN HIEROGLYPH-13D7B;Lo;0;L;;;;;N;;;;;\n13D7C;EGYPTIAN HIEROGLYPH-13D7C;Lo;0;L;;;;;N;;;;;\n13D7D;EGYPTIAN HIEROGLYPH-13D7D;Lo;0;L;;;;;N;;;;;\n13D7E;EGYPTIAN HIEROGLYPH-13D7E;Lo;0;L;;;;;N;;;;;\n13D7F;EGYPTIAN HIEROGLYPH-13D7F;Lo;0;L;;;;;N;;;;;\n13D80;EGYPTIAN HIEROGLYPH-13D80;Lo;0;L;;;;;N;;;;;\n13D81;EGYPTIAN HIEROGLYPH-13D81;Lo;0;L;;;;;N;;;;;\n13D82;EGYPTIAN HIEROGLYPH-13D82;Lo;0;L;;;;;N;;;;;\n13D83;EGYPTIAN HIEROGLYPH-13D83;Lo;0;L;;;;;N;;;;;\n13D84;EGYPTIAN HIEROGLYPH-13D84;Lo;0;L;;;;;N;;;;;\n13D85;EGYPTIAN HIEROGLYPH-13D85;Lo;0;L;;;;;N;;;;;\n13D86;EGYPTIAN HIEROGLYPH-13D86;Lo;0;L;;;;;N;;;;;\n13D87;EGYPTIAN HIEROGLYPH-13D87;Lo;0;L;;;;;N;;;;;\n13D88;EGYPTIAN HIEROGLYPH-13D88;Lo;0;L;;;;;N;;;;;\n13D89;EGYPTIAN HIEROGLYPH-13D89;Lo;0;L;;;;;N;;;;;\n13D8A;EGYPTIAN HIEROGLYPH-13D8A;Lo;0;L;;;;;N;;;;;\n13D8B;EGYPTIAN HIEROGLYPH-13D8B;Lo;0;L;;;;;N;;;;;\n13D8C;EGYPTIAN HIEROGLYPH-13D8C;Lo;0;L;;;;;N;;;;;\n13D8D;EGYPTIAN HIEROGLYPH-13D8D;Lo;0;L;;;;;N;;;;;\n13D8E;EGYPTIAN HIEROGLYPH-13D8E;Lo;0;L;;;;;N;;;;;\n13D8F;EGYPTIAN HIEROGLYPH-13D8F;Lo;0;L;;;;;N;;;;;\n13D90;EGYPTIAN HIEROGLYPH-13D90;Lo;0;L;;;;;N;;;;;\n13D91;EGYPTIAN HIEROGLYPH-13D91;Lo;0;L;;;;;N;;;;;\n13D92;EGYPTIAN HIEROGLYPH-13D92;Lo;0;L;;;;;N;;;;;\n13D93;EGYPTIAN HIEROGLYPH-13D93;Lo;0;L;;;;;N;;;;;\n13D94;EGYPTIAN HIEROGLYPH-13D94;Lo;0;L;;;;;N;;;;;\n13D95;EGYPTIAN HIEROGLYPH-13D95;Lo;0;L;;;;;N;;;;;\n13D96;EGYPTIAN HIEROGLYPH-13D96;Lo;0;L;;;;;N;;;;;\n13D97;EGYPTIAN HIEROGLYPH-13D97;Lo;0;L;;;;;N;;;;;\n13D98;EGYPTIAN HIEROGLYPH-13D98;Lo;0;L;;;;;N;;;;;\n13D99;EGYPTIAN HIEROGLYPH-13D99;Lo;0;L;;;;;N;;;;;\n13D9A;EGYPTIAN HIEROGLYPH-13D9A;Lo;0;L;;;;;N;;;;;\n13D9B;EGYPTIAN HIEROGLYPH-13D9B;Lo;0;L;;;;;N;;;;;\n13D9C;EGYPTIAN HIEROGLYPH-13D9C;Lo;0;L;;;;;N;;;;;\n13D9D;EGYPTIAN HIEROGLYPH-13D9D;Lo;0;L;;;;;N;;;;;\n13D9E;EGYPTIAN HIEROGLYPH-13D9E;Lo;0;L;;;;;N;;;;;\n13D9F;EGYPTIAN HIEROGLYPH-13D9F;Lo;0;L;;;;;N;;;;;\n13DA0;EGYPTIAN HIEROGLYPH-13DA0;Lo;0;L;;;;;N;;;;;\n13DA1;EGYPTIAN HIEROGLYPH-13DA1;Lo;0;L;;;;;N;;;;;\n13DA2;EGYPTIAN HIEROGLYPH-13DA2;Lo;0;L;;;;;N;;;;;\n13DA3;EGYPTIAN HIEROGLYPH-13DA3;Lo;0;L;;;;;N;;;;;\n13DA4;EGYPTIAN HIEROGLYPH-13DA4;Lo;0;L;;;;;N;;;;;\n13DA5;EGYPTIAN HIEROGLYPH-13DA5;Lo;0;L;;;;;N;;;;;\n13DA6;EGYPTIAN HIEROGLYPH-13DA6;Lo;0;L;;;;;N;;;;;\n13DA7;EGYPTIAN HIEROGLYPH-13DA7;Lo;0;L;;;;;N;;;;;\n13DA8;EGYPTIAN HIEROGLYPH-13DA8;Lo;0;L;;;;;N;;;;;\n13DA9;EGYPTIAN HIEROGLYPH-13DA9;Lo;0;L;;;;;N;;;;;\n13DAA;EGYPTIAN HIEROGLYPH-13DAA;Lo;0;L;;;;;N;;;;;\n13DAB;EGYPTIAN HIEROGLYPH-13DAB;Lo;0;L;;;;;N;;;;;\n13DAC;EGYPTIAN HIEROGLYPH-13DAC;Lo;0;L;;;;;N;;;;;\n13DAD;EGYPTIAN HIEROGLYPH-13DAD;Lo;0;L;;;;;N;;;;;\n13DAE;EGYPTIAN HIEROGLYPH-13DAE;Lo;0;L;;;;;N;;;;;\n13DAF;EGYPTIAN HIEROGLYPH-13DAF;Lo;0;L;;;;;N;;;;;\n13DB0;EGYPTIAN HIEROGLYPH-13DB0;Lo;0;L;;;;;N;;;;;\n13DB1;EGYPTIAN HIEROGLYPH-13DB1;Lo;0;L;;;;;N;;;;;\n13DB2;EGYPTIAN HIEROGLYPH-13DB2;Lo;0;L;;;;;N;;;;;\n13DB3;EGYPTIAN HIEROGLYPH-13DB3;Lo;0;L;;;;;N;;;;;\n13DB4;EGYPTIAN HIEROGLYPH-13DB4;Lo;0;L;;;;;N;;;;;\n13DB5;EGYPTIAN HIEROGLYPH-13DB5;Lo;0;L;;;;;N;;;;;\n13DB6;EGYPTIAN HIEROGLYPH-13DB6;Lo;0;L;;;;;N;;;;;\n13DB7;EGYPTIAN HIEROGLYPH-13DB7;Lo;0;L;;;;;N;;;;;\n13DB8;EGYPTIAN HIEROGLYPH-13DB8;Lo;0;L;;;;;N;;;;;\n13DB9;EGYPTIAN HIEROGLYPH-13DB9;Lo;0;L;;;;;N;;;;;\n13DBA;EGYPTIAN HIEROGLYPH-13DBA;Lo;0;L;;;;;N;;;;;\n13DBB;EGYPTIAN HIEROGLYPH-13DBB;Lo;0;L;;;;;N;;;;;\n13DBC;EGYPTIAN HIEROGLYPH-13DBC;Lo;0;L;;;;;N;;;;;\n13DBD;EGYPTIAN HIEROGLYPH-13DBD;Lo;0;L;;;;;N;;;;;\n13DBE;EGYPTIAN HIEROGLYPH-13DBE;Lo;0;L;;;;;N;;;;;\n13DBF;EGYPTIAN HIEROGLYPH-13DBF;Lo;0;L;;;;;N;;;;;\n13DC0;EGYPTIAN HIEROGLYPH-13DC0;Lo;0;L;;;;;N;;;;;\n13DC1;EGYPTIAN HIEROGLYPH-13DC1;Lo;0;L;;;;;N;;;;;\n13DC2;EGYPTIAN HIEROGLYPH-13DC2;Lo;0;L;;;;;N;;;;;\n13DC3;EGYPTIAN HIEROGLYPH-13DC3;Lo;0;L;;;;;N;;;;;\n13DC4;EGYPTIAN HIEROGLYPH-13DC4;Lo;0;L;;;;;N;;;;;\n13DC5;EGYPTIAN HIEROGLYPH-13DC5;Lo;0;L;;;;;N;;;;;\n13DC6;EGYPTIAN HIEROGLYPH-13DC6;Lo;0;L;;;;;N;;;;;\n13DC7;EGYPTIAN HIEROGLYPH-13DC7;Lo;0;L;;;;;N;;;;;\n13DC8;EGYPTIAN HIEROGLYPH-13DC8;Lo;0;L;;;;;N;;;;;\n13DC9;EGYPTIAN HIEROGLYPH-13DC9;Lo;0;L;;;;;N;;;;;\n13DCA;EGYPTIAN HIEROGLYPH-13DCA;Lo;0;L;;;;;N;;;;;\n13DCB;EGYPTIAN HIEROGLYPH-13DCB;Lo;0;L;;;;;N;;;;;\n13DCC;EGYPTIAN HIEROGLYPH-13DCC;Lo;0;L;;;;;N;;;;;\n13DCD;EGYPTIAN HIEROGLYPH-13DCD;Lo;0;L;;;;;N;;;;;\n13DCE;EGYPTIAN HIEROGLYPH-13DCE;Lo;0;L;;;;;N;;;;;\n13DCF;EGYPTIAN HIEROGLYPH-13DCF;Lo;0;L;;;;;N;;;;;\n13DD0;EGYPTIAN HIEROGLYPH-13DD0;Lo;0;L;;;;;N;;;;;\n13DD1;EGYPTIAN HIEROGLYPH-13DD1;Lo;0;L;;;;;N;;;;;\n13DD2;EGYPTIAN HIEROGLYPH-13DD2;Lo;0;L;;;;;N;;;;;\n13DD3;EGYPTIAN HIEROGLYPH-13DD3;Lo;0;L;;;;;N;;;;;\n13DD4;EGYPTIAN HIEROGLYPH-13DD4;Lo;0;L;;;;;N;;;;;\n13DD5;EGYPTIAN HIEROGLYPH-13DD5;Lo;0;L;;;;;N;;;;;\n13DD6;EGYPTIAN HIEROGLYPH-13DD6;Lo;0;L;;;;;N;;;;;\n13DD7;EGYPTIAN HIEROGLYPH-13DD7;Lo;0;L;;;;;N;;;;;\n13DD8;EGYPTIAN HIEROGLYPH-13DD8;Lo;0;L;;;;;N;;;;;\n13DD9;EGYPTIAN HIEROGLYPH-13DD9;Lo;0;L;;;;;N;;;;;\n13DDA;EGYPTIAN HIEROGLYPH-13DDA;Lo;0;L;;;;;N;;;;;\n13DDB;EGYPTIAN HIEROGLYPH-13DDB;Lo;0;L;;;;;N;;;;;\n13DDC;EGYPTIAN HIEROGLYPH-13DDC;Lo;0;L;;;;;N;;;;;\n13DDD;EGYPTIAN HIEROGLYPH-13DDD;Lo;0;L;;;;;N;;;;;\n13DDE;EGYPTIAN HIEROGLYPH-13DDE;Lo;0;L;;;;;N;;;;;\n13DDF;EGYPTIAN HIEROGLYPH-13DDF;Lo;0;L;;;;;N;;;;;\n13DE0;EGYPTIAN HIEROGLYPH-13DE0;Lo;0;L;;;;;N;;;;;\n13DE1;EGYPTIAN HIEROGLYPH-13DE1;Lo;0;L;;;;;N;;;;;\n13DE2;EGYPTIAN HIEROGLYPH-13DE2;Lo;0;L;;;;;N;;;;;\n13DE3;EGYPTIAN HIEROGLYPH-13DE3;Lo;0;L;;;;;N;;;;;\n13DE4;EGYPTIAN HIEROGLYPH-13DE4;Lo;0;L;;;;;N;;;;;\n13DE5;EGYPTIAN HIEROGLYPH-13DE5;Lo;0;L;;;;;N;;;;;\n13DE6;EGYPTIAN HIEROGLYPH-13DE6;Lo;0;L;;;;;N;;;;;\n13DE7;EGYPTIAN HIEROGLYPH-13DE7;Lo;0;L;;;;;N;;;;;\n13DE8;EGYPTIAN HIEROGLYPH-13DE8;Lo;0;L;;;;;N;;;;;\n13DE9;EGYPTIAN HIEROGLYPH-13DE9;Lo;0;L;;;;;N;;;;;\n13DEA;EGYPTIAN HIEROGLYPH-13DEA;Lo;0;L;;;;;N;;;;;\n13DEB;EGYPTIAN HIEROGLYPH-13DEB;Lo;0;L;;;;;N;;;;;\n13DEC;EGYPTIAN HIEROGLYPH-13DEC;Lo;0;L;;;;;N;;;;;\n13DED;EGYPTIAN HIEROGLYPH-13DED;Lo;0;L;;;;;N;;;;;\n13DEE;EGYPTIAN HIEROGLYPH-13DEE;Lo;0;L;;;;;N;;;;;\n13DEF;EGYPTIAN HIEROGLYPH-13DEF;Lo;0;L;;;;;N;;;;;\n13DF0;EGYPTIAN HIEROGLYPH-13DF0;Lo;0;L;;;;;N;;;;;\n13DF1;EGYPTIAN HIEROGLYPH-13DF1;Lo;0;L;;;;;N;;;;;\n13DF2;EGYPTIAN HIEROGLYPH-13DF2;Lo;0;L;;;;;N;;;;;\n13DF3;EGYPTIAN HIEROGLYPH-13DF3;Lo;0;L;;;;;N;;;;;\n13DF4;EGYPTIAN HIEROGLYPH-13DF4;Lo;0;L;;;;;N;;;;;\n13DF5;EGYPTIAN HIEROGLYPH-13DF5;Lo;0;L;;;;;N;;;;;\n13DF6;EGYPTIAN HIEROGLYPH-13DF6;Lo;0;L;;;;;N;;;;;\n13DF7;EGYPTIAN HIEROGLYPH-13DF7;Lo;0;L;;;;;N;;;;;\n13DF8;EGYPTIAN HIEROGLYPH-13DF8;Lo;0;L;;;;;N;;;;;\n13DF9;EGYPTIAN HIEROGLYPH-13DF9;Lo;0;L;;;;;N;;;;;\n13DFA;EGYPTIAN HIEROGLYPH-13DFA;Lo;0;L;;;;;N;;;;;\n13DFB;EGYPTIAN HIEROGLYPH-13DFB;Lo;0;L;;;;;N;;;;;\n13DFC;EGYPTIAN HIEROGLYPH-13DFC;Lo;0;L;;;;;N;;;;;\n13DFD;EGYPTIAN HIEROGLYPH-13DFD;Lo;0;L;;;;;N;;;;;\n13DFE;EGYPTIAN HIEROGLYPH-13DFE;Lo;0;L;;;;;N;;;;;\n13DFF;EGYPTIAN HIEROGLYPH-13DFF;Lo;0;L;;;;;N;;;;;\n13E00;EGYPTIAN HIEROGLYPH-13E00;Lo;0;L;;;;;N;;;;;\n13E01;EGYPTIAN HIEROGLYPH-13E01;Lo;0;L;;;;;N;;;;;\n13E02;EGYPTIAN HIEROGLYPH-13E02;Lo;0;L;;;;;N;;;;;\n13E03;EGYPTIAN HIEROGLYPH-13E03;Lo;0;L;;;;;N;;;;;\n13E04;EGYPTIAN HIEROGLYPH-13E04;Lo;0;L;;;;;N;;;;;\n13E05;EGYPTIAN HIEROGLYPH-13E05;Lo;0;L;;;;;N;;;;;\n13E06;EGYPTIAN HIEROGLYPH-13E06;Lo;0;L;;;;;N;;;;;\n13E07;EGYPTIAN HIEROGLYPH-13E07;Lo;0;L;;;;;N;;;;;\n13E08;EGYPTIAN HIEROGLYPH-13E08;Lo;0;L;;;;;N;;;;;\n13E09;EGYPTIAN HIEROGLYPH-13E09;Lo;0;L;;;;;N;;;;;\n13E0A;EGYPTIAN HIEROGLYPH-13E0A;Lo;0;L;;;;;N;;;;;\n13E0B;EGYPTIAN HIEROGLYPH-13E0B;Lo;0;L;;;;;N;;;;;\n13E0C;EGYPTIAN HIEROGLYPH-13E0C;Lo;0;L;;;;;N;;;;;\n13E0D;EGYPTIAN HIEROGLYPH-13E0D;Lo;0;L;;;;;N;;;;;\n13E0E;EGYPTIAN HIEROGLYPH-13E0E;Lo;0;L;;;;;N;;;;;\n13E0F;EGYPTIAN HIEROGLYPH-13E0F;Lo;0;L;;;;;N;;;;;\n13E10;EGYPTIAN HIEROGLYPH-13E10;Lo;0;L;;;;;N;;;;;\n13E11;EGYPTIAN HIEROGLYPH-13E11;Lo;0;L;;;;;N;;;;;\n13E12;EGYPTIAN HIEROGLYPH-13E12;Lo;0;L;;;;;N;;;;;\n13E13;EGYPTIAN HIEROGLYPH-13E13;Lo;0;L;;;;;N;;;;;\n13E14;EGYPTIAN HIEROGLYPH-13E14;Lo;0;L;;;;;N;;;;;\n13E15;EGYPTIAN HIEROGLYPH-13E15;Lo;0;L;;;;;N;;;;;\n13E16;EGYPTIAN HIEROGLYPH-13E16;Lo;0;L;;;;;N;;;;;\n13E17;EGYPTIAN HIEROGLYPH-13E17;Lo;0;L;;;;;N;;;;;\n13E18;EGYPTIAN HIEROGLYPH-13E18;Lo;0;L;;;;;N;;;;;\n13E19;EGYPTIAN HIEROGLYPH-13E19;Lo;0;L;;;;;N;;;;;\n13E1A;EGYPTIAN HIEROGLYPH-13E1A;Lo;0;L;;;;;N;;;;;\n13E1B;EGYPTIAN HIEROGLYPH-13E1B;Lo;0;L;;;;;N;;;;;\n13E1C;EGYPTIAN HIEROGLYPH-13E1C;Lo;0;L;;;;;N;;;;;\n13E1D;EGYPTIAN HIEROGLYPH-13E1D;Lo;0;L;;;;;N;;;;;\n13E1E;EGYPTIAN HIEROGLYPH-13E1E;Lo;0;L;;;;;N;;;;;\n13E1F;EGYPTIAN HIEROGLYPH-13E1F;Lo;0;L;;;;;N;;;;;\n13E20;EGYPTIAN HIEROGLYPH-13E20;Lo;0;L;;;;;N;;;;;\n13E21;EGYPTIAN HIEROGLYPH-13E21;Lo;0;L;;;;;N;;;;;\n13E22;EGYPTIAN HIEROGLYPH-13E22;Lo;0;L;;;;;N;;;;;\n13E23;EGYPTIAN HIEROGLYPH-13E23;Lo;0;L;;;;;N;;;;;\n13E24;EGYPTIAN HIEROGLYPH-13E24;Lo;0;L;;;;;N;;;;;\n13E25;EGYPTIAN HIEROGLYPH-13E25;Lo;0;L;;;;;N;;;;;\n13E26;EGYPTIAN HIEROGLYPH-13E26;Lo;0;L;;;;;N;;;;;\n13E27;EGYPTIAN HIEROGLYPH-13E27;Lo;0;L;;;;;N;;;;;\n13E28;EGYPTIAN HIEROGLYPH-13E28;Lo;0;L;;;;;N;;;;;\n13E29;EGYPTIAN HIEROGLYPH-13E29;Lo;0;L;;;;;N;;;;;\n13E2A;EGYPTIAN HIEROGLYPH-13E2A;Lo;0;L;;;;;N;;;;;\n13E2B;EGYPTIAN HIEROGLYPH-13E2B;Lo;0;L;;;;;N;;;;;\n13E2C;EGYPTIAN HIEROGLYPH-13E2C;Lo;0;L;;;;;N;;;;;\n13E2D;EGYPTIAN HIEROGLYPH-13E2D;Lo;0;L;;;;;N;;;;;\n13E2E;EGYPTIAN HIEROGLYPH-13E2E;Lo;0;L;;;;;N;;;;;\n13E2F;EGYPTIAN HIEROGLYPH-13E2F;Lo;0;L;;;;;N;;;;;\n13E30;EGYPTIAN HIEROGLYPH-13E30;Lo;0;L;;;;;N;;;;;\n13E31;EGYPTIAN HIEROGLYPH-13E31;Lo;0;L;;;;;N;;;;;\n13E32;EGYPTIAN HIEROGLYPH-13E32;Lo;0;L;;;;;N;;;;;\n13E33;EGYPTIAN HIEROGLYPH-13E33;Lo;0;L;;;;;N;;;;;\n13E34;EGYPTIAN HIEROGLYPH-13E34;Lo;0;L;;;;;N;;;;;\n13E35;EGYPTIAN HIEROGLYPH-13E35;Lo;0;L;;;;;N;;;;;\n13E36;EGYPTIAN HIEROGLYPH-13E36;Lo;0;L;;;;;N;;;;;\n13E37;EGYPTIAN HIEROGLYPH-13E37;Lo;0;L;;;;;N;;;;;\n13E38;EGYPTIAN HIEROGLYPH-13E38;Lo;0;L;;;;;N;;;;;\n13E39;EGYPTIAN HIEROGLYPH-13E39;Lo;0;L;;;;;N;;;;;\n13E3A;EGYPTIAN HIEROGLYPH-13E3A;Lo;0;L;;;;;N;;;;;\n13E3B;EGYPTIAN HIEROGLYPH-13E3B;Lo;0;L;;;;;N;;;;;\n13E3C;EGYPTIAN HIEROGLYPH-13E3C;Lo;0;L;;;;;N;;;;;\n13E3D;EGYPTIAN HIEROGLYPH-13E3D;Lo;0;L;;;;;N;;;;;\n13E3E;EGYPTIAN HIEROGLYPH-13E3E;Lo;0;L;;;;;N;;;;;\n13E3F;EGYPTIAN HIEROGLYPH-13E3F;Lo;0;L;;;;;N;;;;;\n13E40;EGYPTIAN HIEROGLYPH-13E40;Lo;0;L;;;;;N;;;;;\n13E41;EGYPTIAN HIEROGLYPH-13E41;Lo;0;L;;;;;N;;;;;\n13E42;EGYPTIAN HIEROGLYPH-13E42;Lo;0;L;;;;;N;;;;;\n13E43;EGYPTIAN HIEROGLYPH-13E43;Lo;0;L;;;;;N;;;;;\n13E44;EGYPTIAN HIEROGLYPH-13E44;Lo;0;L;;;;;N;;;;;\n13E45;EGYPTIAN HIEROGLYPH-13E45;Lo;0;L;;;;;N;;;;;\n13E46;EGYPTIAN HIEROGLYPH-13E46;Lo;0;L;;;;;N;;;;;\n13E47;EGYPTIAN HIEROGLYPH-13E47;Lo;0;L;;;;;N;;;;;\n13E48;EGYPTIAN HIEROGLYPH-13E48;Lo;0;L;;;;;N;;;;;\n13E49;EGYPTIAN HIEROGLYPH-13E49;Lo;0;L;;;;;N;;;;;\n13E4A;EGYPTIAN HIEROGLYPH-13E4A;Lo;0;L;;;;;N;;;;;\n13E4B;EGYPTIAN HIEROGLYPH-13E4B;Lo;0;L;;;;;N;;;;;\n13E4C;EGYPTIAN HIEROGLYPH-13E4C;Lo;0;L;;;;;N;;;;;\n13E4D;EGYPTIAN HIEROGLYPH-13E4D;Lo;0;L;;;;;N;;;;;\n13E4E;EGYPTIAN HIEROGLYPH-13E4E;Lo;0;L;;;;;N;;;;;\n13E4F;EGYPTIAN HIEROGLYPH-13E4F;Lo;0;L;;;;;N;;;;;\n13E50;EGYPTIAN HIEROGLYPH-13E50;Lo;0;L;;;;;N;;;;;\n13E51;EGYPTIAN HIEROGLYPH-13E51;Lo;0;L;;;;;N;;;;;\n13E52;EGYPTIAN HIEROGLYPH-13E52;Lo;0;L;;;;;N;;;;;\n13E53;EGYPTIAN HIEROGLYPH-13E53;Lo;0;L;;;;;N;;;;;\n13E54;EGYPTIAN HIEROGLYPH-13E54;Lo;0;L;;;;;N;;;;;\n13E55;EGYPTIAN HIEROGLYPH-13E55;Lo;0;L;;;;;N;;;;;\n13E56;EGYPTIAN HIEROGLYPH-13E56;Lo;0;L;;;;;N;;;;;\n13E57;EGYPTIAN HIEROGLYPH-13E57;Lo;0;L;;;;;N;;;;;\n13E58;EGYPTIAN HIEROGLYPH-13E58;Lo;0;L;;;;;N;;;;;\n13E59;EGYPTIAN HIEROGLYPH-13E59;Lo;0;L;;;;;N;;;;;\n13E5A;EGYPTIAN HIEROGLYPH-13E5A;Lo;0;L;;;;;N;;;;;\n13E5B;EGYPTIAN HIEROGLYPH-13E5B;Lo;0;L;;;;;N;;;;;\n13E5C;EGYPTIAN HIEROGLYPH-13E5C;Lo;0;L;;;;;N;;;;;\n13E5D;EGYPTIAN HIEROGLYPH-13E5D;Lo;0;L;;;;;N;;;;;\n13E5E;EGYPTIAN HIEROGLYPH-13E5E;Lo;0;L;;;;;N;;;;;\n13E5F;EGYPTIAN HIEROGLYPH-13E5F;Lo;0;L;;;;;N;;;;;\n13E60;EGYPTIAN HIEROGLYPH-13E60;Lo;0;L;;;;;N;;;;;\n13E61;EGYPTIAN HIEROGLYPH-13E61;Lo;0;L;;;;;N;;;;;\n13E62;EGYPTIAN HIEROGLYPH-13E62;Lo;0;L;;;;;N;;;;;\n13E63;EGYPTIAN HIEROGLYPH-13E63;Lo;0;L;;;;;N;;;;;\n13E64;EGYPTIAN HIEROGLYPH-13E64;Lo;0;L;;;;;N;;;;;\n13E65;EGYPTIAN HIEROGLYPH-13E65;Lo;0;L;;;;;N;;;;;\n13E66;EGYPTIAN HIEROGLYPH-13E66;Lo;0;L;;;;;N;;;;;\n13E67;EGYPTIAN HIEROGLYPH-13E67;Lo;0;L;;;;;N;;;;;\n13E68;EGYPTIAN HIEROGLYPH-13E68;Lo;0;L;;;;;N;;;;;\n13E69;EGYPTIAN HIEROGLYPH-13E69;Lo;0;L;;;;;N;;;;;\n13E6A;EGYPTIAN HIEROGLYPH-13E6A;Lo;0;L;;;;;N;;;;;\n13E6B;EGYPTIAN HIEROGLYPH-13E6B;Lo;0;L;;;;;N;;;;;\n13E6C;EGYPTIAN HIEROGLYPH-13E6C;Lo;0;L;;;;;N;;;;;\n13E6D;EGYPTIAN HIEROGLYPH-13E6D;Lo;0;L;;;;;N;;;;;\n13E6E;EGYPTIAN HIEROGLYPH-13E6E;Lo;0;L;;;;;N;;;;;\n13E6F;EGYPTIAN HIEROGLYPH-13E6F;Lo;0;L;;;;;N;;;;;\n13E70;EGYPTIAN HIEROGLYPH-13E70;Lo;0;L;;;;;N;;;;;\n13E71;EGYPTIAN HIEROGLYPH-13E71;Lo;0;L;;;;;N;;;;;\n13E72;EGYPTIAN HIEROGLYPH-13E72;Lo;0;L;;;;;N;;;;;\n13E73;EGYPTIAN HIEROGLYPH-13E73;Lo;0;L;;;;;N;;;;;\n13E74;EGYPTIAN HIEROGLYPH-13E74;Lo;0;L;;;;;N;;;;;\n13E75;EGYPTIAN HIEROGLYPH-13E75;Lo;0;L;;;;;N;;;;;\n13E76;EGYPTIAN HIEROGLYPH-13E76;Lo;0;L;;;;;N;;;;;\n13E77;EGYPTIAN HIEROGLYPH-13E77;Lo;0;L;;;;;N;;;;;\n13E78;EGYPTIAN HIEROGLYPH-13E78;Lo;0;L;;;;;N;;;;;\n13E79;EGYPTIAN HIEROGLYPH-13E79;Lo;0;L;;;;;N;;;;;\n13E7A;EGYPTIAN HIEROGLYPH-13E7A;Lo;0;L;;;;;N;;;;;\n13E7B;EGYPTIAN HIEROGLYPH-13E7B;Lo;0;L;;;;;N;;;;;\n13E7C;EGYPTIAN HIEROGLYPH-13E7C;Lo;0;L;;;;;N;;;;;\n13E7D;EGYPTIAN HIEROGLYPH-13E7D;Lo;0;L;;;;;N;;;;;\n13E7E;EGYPTIAN HIEROGLYPH-13E7E;Lo;0;L;;;;;N;;;;;\n13E7F;EGYPTIAN HIEROGLYPH-13E7F;Lo;0;L;;;;;N;;;;;\n13E80;EGYPTIAN HIEROGLYPH-13E80;Lo;0;L;;;;;N;;;;;\n13E81;EGYPTIAN HIEROGLYPH-13E81;Lo;0;L;;;;;N;;;;;\n13E82;EGYPTIAN HIEROGLYPH-13E82;Lo;0;L;;;;;N;;;;;\n13E83;EGYPTIAN HIEROGLYPH-13E83;Lo;0;L;;;;;N;;;;;\n13E84;EGYPTIAN HIEROGLYPH-13E84;Lo;0;L;;;;;N;;;;;\n13E85;EGYPTIAN HIEROGLYPH-13E85;Lo;0;L;;;;;N;;;;;\n13E86;EGYPTIAN HIEROGLYPH-13E86;Lo;0;L;;;;;N;;;;;\n13E87;EGYPTIAN HIEROGLYPH-13E87;Lo;0;L;;;;;N;;;;;\n13E88;EGYPTIAN HIEROGLYPH-13E88;Lo;0;L;;;;;N;;;;;\n13E89;EGYPTIAN HIEROGLYPH-13E89;Lo;0;L;;;;;N;;;;;\n13E8A;EGYPTIAN HIEROGLYPH-13E8A;Lo;0;L;;;;;N;;;;;\n13E8B;EGYPTIAN HIEROGLYPH-13E8B;Lo;0;L;;;;;N;;;;;\n13E8C;EGYPTIAN HIEROGLYPH-13E8C;Lo;0;L;;;;;N;;;;;\n13E8D;EGYPTIAN HIEROGLYPH-13E8D;Lo;0;L;;;;;N;;;;;\n13E8E;EGYPTIAN HIEROGLYPH-13E8E;Lo;0;L;;;;;N;;;;;\n13E8F;EGYPTIAN HIEROGLYPH-13E8F;Lo;0;L;;;;;N;;;;;\n13E90;EGYPTIAN HIEROGLYPH-13E90;Lo;0;L;;;;;N;;;;;\n13E91;EGYPTIAN HIEROGLYPH-13E91;Lo;0;L;;;;;N;;;;;\n13E92;EGYPTIAN HIEROGLYPH-13E92;Lo;0;L;;;;;N;;;;;\n13E93;EGYPTIAN HIEROGLYPH-13E93;Lo;0;L;;;;;N;;;;;\n13E94;EGYPTIAN HIEROGLYPH-13E94;Lo;0;L;;;;;N;;;;;\n13E95;EGYPTIAN HIEROGLYPH-13E95;Lo;0;L;;;;;N;;;;;\n13E96;EGYPTIAN HIEROGLYPH-13E96;Lo;0;L;;;;;N;;;;;\n13E97;EGYPTIAN HIEROGLYPH-13E97;Lo;0;L;;;;;N;;;;;\n13E98;EGYPTIAN HIEROGLYPH-13E98;Lo;0;L;;;;;N;;;;;\n13E99;EGYPTIAN HIEROGLYPH-13E99;Lo;0;L;;;;;N;;;;;\n13E9A;EGYPTIAN HIEROGLYPH-13E9A;Lo;0;L;;;;;N;;;;;\n13E9B;EGYPTIAN HIEROGLYPH-13E9B;Lo;0;L;;;;;N;;;;;\n13E9C;EGYPTIAN HIEROGLYPH-13E9C;Lo;0;L;;;;;N;;;;;\n13E9D;EGYPTIAN HIEROGLYPH-13E9D;Lo;0;L;;;;;N;;;;;\n13E9E;EGYPTIAN HIEROGLYPH-13E9E;Lo;0;L;;;;;N;;;;;\n13E9F;EGYPTIAN HIEROGLYPH-13E9F;Lo;0;L;;;;;N;;;;;\n13EA0;EGYPTIAN HIEROGLYPH-13EA0;Lo;0;L;;;;;N;;;;;\n13EA1;EGYPTIAN HIEROGLYPH-13EA1;Lo;0;L;;;;;N;;;;;\n13EA2;EGYPTIAN HIEROGLYPH-13EA2;Lo;0;L;;;;;N;;;;;\n13EA3;EGYPTIAN HIEROGLYPH-13EA3;Lo;0;L;;;;;N;;;;;\n13EA4;EGYPTIAN HIEROGLYPH-13EA4;Lo;0;L;;;;;N;;;;;\n13EA5;EGYPTIAN HIEROGLYPH-13EA5;Lo;0;L;;;;;N;;;;;\n13EA6;EGYPTIAN HIEROGLYPH-13EA6;Lo;0;L;;;;;N;;;;;\n13EA7;EGYPTIAN HIEROGLYPH-13EA7;Lo;0;L;;;;;N;;;;;\n13EA8;EGYPTIAN HIEROGLYPH-13EA8;Lo;0;L;;;;;N;;;;;\n13EA9;EGYPTIAN HIEROGLYPH-13EA9;Lo;0;L;;;;;N;;;;;\n13EAA;EGYPTIAN HIEROGLYPH-13EAA;Lo;0;L;;;;;N;;;;;\n13EAB;EGYPTIAN HIEROGLYPH-13EAB;Lo;0;L;;;;;N;;;;;\n13EAC;EGYPTIAN HIEROGLYPH-13EAC;Lo;0;L;;;;;N;;;;;\n13EAD;EGYPTIAN HIEROGLYPH-13EAD;Lo;0;L;;;;;N;;;;;\n13EAE;EGYPTIAN HIEROGLYPH-13EAE;Lo;0;L;;;;;N;;;;;\n13EAF;EGYPTIAN HIEROGLYPH-13EAF;Lo;0;L;;;;;N;;;;;\n13EB0;EGYPTIAN HIEROGLYPH-13EB0;Lo;0;L;;;;;N;;;;;\n13EB1;EGYPTIAN HIEROGLYPH-13EB1;Lo;0;L;;;;;N;;;;;\n13EB2;EGYPTIAN HIEROGLYPH-13EB2;Lo;0;L;;;;;N;;;;;\n13EB3;EGYPTIAN HIEROGLYPH-13EB3;Lo;0;L;;;;;N;;;;;\n13EB4;EGYPTIAN HIEROGLYPH-13EB4;Lo;0;L;;;;;N;;;;;\n13EB5;EGYPTIAN HIEROGLYPH-13EB5;Lo;0;L;;;;;N;;;;;\n13EB6;EGYPTIAN HIEROGLYPH-13EB6;Lo;0;L;;;;;N;;;;;\n13EB7;EGYPTIAN HIEROGLYPH-13EB7;Lo;0;L;;;;;N;;;;;\n13EB8;EGYPTIAN HIEROGLYPH-13EB8;Lo;0;L;;;;;N;;;;;\n13EB9;EGYPTIAN HIEROGLYPH-13EB9;Lo;0;L;;;;;N;;;;;\n13EBA;EGYPTIAN HIEROGLYPH-13EBA;Lo;0;L;;;;;N;;;;;\n13EBB;EGYPTIAN HIEROGLYPH-13EBB;Lo;0;L;;;;;N;;;;;\n13EBC;EGYPTIAN HIEROGLYPH-13EBC;Lo;0;L;;;;;N;;;;;\n13EBD;EGYPTIAN HIEROGLYPH-13EBD;Lo;0;L;;;;;N;;;;;\n13EBE;EGYPTIAN HIEROGLYPH-13EBE;Lo;0;L;;;;;N;;;;;\n13EBF;EGYPTIAN HIEROGLYPH-13EBF;Lo;0;L;;;;;N;;;;;\n13EC0;EGYPTIAN HIEROGLYPH-13EC0;Lo;0;L;;;;;N;;;;;\n13EC1;EGYPTIAN HIEROGLYPH-13EC1;Lo;0;L;;;;;N;;;;;\n13EC2;EGYPTIAN HIEROGLYPH-13EC2;Lo;0;L;;;;;N;;;;;\n13EC3;EGYPTIAN HIEROGLYPH-13EC3;Lo;0;L;;;;;N;;;;;\n13EC4;EGYPTIAN HIEROGLYPH-13EC4;Lo;0;L;;;;;N;;;;;\n13EC5;EGYPTIAN HIEROGLYPH-13EC5;Lo;0;L;;;;;N;;;;;\n13EC6;EGYPTIAN HIEROGLYPH-13EC6;Lo;0;L;;;;;N;;;;;\n13EC7;EGYPTIAN HIEROGLYPH-13EC7;Lo;0;L;;;;;N;;;;;\n13EC8;EGYPTIAN HIEROGLYPH-13EC8;Lo;0;L;;;;;N;;;;;\n13EC9;EGYPTIAN HIEROGLYPH-13EC9;Lo;0;L;;;;;N;;;;;\n13ECA;EGYPTIAN HIEROGLYPH-13ECA;Lo;0;L;;;;;N;;;;;\n13ECB;EGYPTIAN HIEROGLYPH-13ECB;Lo;0;L;;;;;N;;;;;\n13ECC;EGYPTIAN HIEROGLYPH-13ECC;Lo;0;L;;;;;N;;;;;\n13ECD;EGYPTIAN HIEROGLYPH-13ECD;Lo;0;L;;;;;N;;;;;\n13ECE;EGYPTIAN HIEROGLYPH-13ECE;Lo;0;L;;;;;N;;;;;\n13ECF;EGYPTIAN HIEROGLYPH-13ECF;Lo;0;L;;;;;N;;;;;\n13ED0;EGYPTIAN HIEROGLYPH-13ED0;Lo;0;L;;;;;N;;;;;\n13ED1;EGYPTIAN HIEROGLYPH-13ED1;Lo;0;L;;;;;N;;;;;\n13ED2;EGYPTIAN HIEROGLYPH-13ED2;Lo;0;L;;;;;N;;;;;\n13ED3;EGYPTIAN HIEROGLYPH-13ED3;Lo;0;L;;;;;N;;;;;\n13ED4;EGYPTIAN HIEROGLYPH-13ED4;Lo;0;L;;;;;N;;;;;\n13ED5;EGYPTIAN HIEROGLYPH-13ED5;Lo;0;L;;;;;N;;;;;\n13ED6;EGYPTIAN HIEROGLYPH-13ED6;Lo;0;L;;;;;N;;;;;\n13ED7;EGYPTIAN HIEROGLYPH-13ED7;Lo;0;L;;;;;N;;;;;\n13ED8;EGYPTIAN HIEROGLYPH-13ED8;Lo;0;L;;;;;N;;;;;\n13ED9;EGYPTIAN HIEROGLYPH-13ED9;Lo;0;L;;;;;N;;;;;\n13EDA;EGYPTIAN HIEROGLYPH-13EDA;Lo;0;L;;;;;N;;;;;\n13EDB;EGYPTIAN HIEROGLYPH-13EDB;Lo;0;L;;;;;N;;;;;\n13EDC;EGYPTIAN HIEROGLYPH-13EDC;Lo;0;L;;;;;N;;;;;\n13EDD;EGYPTIAN HIEROGLYPH-13EDD;Lo;0;L;;;;;N;;;;;\n13EDE;EGYPTIAN HIEROGLYPH-13EDE;Lo;0;L;;;;;N;;;;;\n13EDF;EGYPTIAN HIEROGLYPH-13EDF;Lo;0;L;;;;;N;;;;;\n13EE0;EGYPTIAN HIEROGLYPH-13EE0;Lo;0;L;;;;;N;;;;;\n13EE1;EGYPTIAN HIEROGLYPH-13EE1;Lo;0;L;;;;;N;;;;;\n13EE2;EGYPTIAN HIEROGLYPH-13EE2;Lo;0;L;;;;;N;;;;;\n13EE3;EGYPTIAN HIEROGLYPH-13EE3;Lo;0;L;;;;;N;;;;;\n13EE4;EGYPTIAN HIEROGLYPH-13EE4;Lo;0;L;;;;;N;;;;;\n13EE5;EGYPTIAN HIEROGLYPH-13EE5;Lo;0;L;;;;;N;;;;;\n13EE6;EGYPTIAN HIEROGLYPH-13EE6;Lo;0;L;;;;;N;;;;;\n13EE7;EGYPTIAN HIEROGLYPH-13EE7;Lo;0;L;;;;;N;;;;;\n13EE8;EGYPTIAN HIEROGLYPH-13EE8;Lo;0;L;;;;;N;;;;;\n13EE9;EGYPTIAN HIEROGLYPH-13EE9;Lo;0;L;;;;;N;;;;;\n13EEA;EGYPTIAN HIEROGLYPH-13EEA;Lo;0;L;;;;;N;;;;;\n13EEB;EGYPTIAN HIEROGLYPH-13EEB;Lo;0;L;;;;;N;;;;;\n13EEC;EGYPTIAN HIEROGLYPH-13EEC;Lo;0;L;;;;;N;;;;;\n13EED;EGYPTIAN HIEROGLYPH-13EED;Lo;0;L;;;;;N;;;;;\n13EEE;EGYPTIAN HIEROGLYPH-13EEE;Lo;0;L;;;;;N;;;;;\n13EEF;EGYPTIAN HIEROGLYPH-13EEF;Lo;0;L;;;;;N;;;;;\n13EF0;EGYPTIAN HIEROGLYPH-13EF0;Lo;0;L;;;;;N;;;;;\n13EF1;EGYPTIAN HIEROGLYPH-13EF1;Lo;0;L;;;;;N;;;;;\n13EF2;EGYPTIAN HIEROGLYPH-13EF2;Lo;0;L;;;;;N;;;;;\n13EF3;EGYPTIAN HIEROGLYPH-13EF3;Lo;0;L;;;;;N;;;;;\n13EF4;EGYPTIAN HIEROGLYPH-13EF4;Lo;0;L;;;;;N;;;;;\n13EF5;EGYPTIAN HIEROGLYPH-13EF5;Lo;0;L;;;;;N;;;;;\n13EF6;EGYPTIAN HIEROGLYPH-13EF6;Lo;0;L;;;;;N;;;;;\n13EF7;EGYPTIAN HIEROGLYPH-13EF7;Lo;0;L;;;;;N;;;;;\n13EF8;EGYPTIAN HIEROGLYPH-13EF8;Lo;0;L;;;;;N;;;;;\n13EF9;EGYPTIAN HIEROGLYPH-13EF9;Lo;0;L;;;;;N;;;;;\n13EFA;EGYPTIAN HIEROGLYPH-13EFA;Lo;0;L;;;;;N;;;;;\n13EFB;EGYPTIAN HIEROGLYPH-13EFB;Lo;0;L;;;;;N;;;;;\n13EFC;EGYPTIAN HIEROGLYPH-13EFC;Lo;0;L;;;;;N;;;;;\n13EFD;EGYPTIAN HIEROGLYPH-13EFD;Lo;0;L;;;;;N;;;;;\n13EFE;EGYPTIAN HIEROGLYPH-13EFE;Lo;0;L;;;;;N;;;;;\n13EFF;EGYPTIAN HIEROGLYPH-13EFF;Lo;0;L;;;;;N;;;;;\n13F00;EGYPTIAN HIEROGLYPH-13F00;Lo;0;L;;;;;N;;;;;\n13F01;EGYPTIAN HIEROGLYPH-13F01;Lo;0;L;;;;;N;;;;;\n13F02;EGYPTIAN HIEROGLYPH-13F02;Lo;0;L;;;;;N;;;;;\n13F03;EGYPTIAN HIEROGLYPH-13F03;Lo;0;L;;;;;N;;;;;\n13F04;EGYPTIAN HIEROGLYPH-13F04;Lo;0;L;;;;;N;;;;;\n13F05;EGYPTIAN HIEROGLYPH-13F05;Lo;0;L;;;;;N;;;;;\n13F06;EGYPTIAN HIEROGLYPH-13F06;Lo;0;L;;;;;N;;;;;\n13F07;EGYPTIAN HIEROGLYPH-13F07;Lo;0;L;;;;;N;;;;;\n13F08;EGYPTIAN HIEROGLYPH-13F08;Lo;0;L;;;;;N;;;;;\n13F09;EGYPTIAN HIEROGLYPH-13F09;Lo;0;L;;;;;N;;;;;\n13F0A;EGYPTIAN HIEROGLYPH-13F0A;Lo;0;L;;;;;N;;;;;\n13F0B;EGYPTIAN HIEROGLYPH-13F0B;Lo;0;L;;;;;N;;;;;\n13F0C;EGYPTIAN HIEROGLYPH-13F0C;Lo;0;L;;;;;N;;;;;\n13F0D;EGYPTIAN HIEROGLYPH-13F0D;Lo;0;L;;;;;N;;;;;\n13F0E;EGYPTIAN HIEROGLYPH-13F0E;Lo;0;L;;;;;N;;;;;\n13F0F;EGYPTIAN HIEROGLYPH-13F0F;Lo;0;L;;;;;N;;;;;\n13F10;EGYPTIAN HIEROGLYPH-13F10;Lo;0;L;;;;;N;;;;;\n13F11;EGYPTIAN HIEROGLYPH-13F11;Lo;0;L;;;;;N;;;;;\n13F12;EGYPTIAN HIEROGLYPH-13F12;Lo;0;L;;;;;N;;;;;\n13F13;EGYPTIAN HIEROGLYPH-13F13;Lo;0;L;;;;;N;;;;;\n13F14;EGYPTIAN HIEROGLYPH-13F14;Lo;0;L;;;;;N;;;;;\n13F15;EGYPTIAN HIEROGLYPH-13F15;Lo;0;L;;;;;N;;;;;\n13F16;EGYPTIAN HIEROGLYPH-13F16;Lo;0;L;;;;;N;;;;;\n13F17;EGYPTIAN HIEROGLYPH-13F17;Lo;0;L;;;;;N;;;;;\n13F18;EGYPTIAN HIEROGLYPH-13F18;Lo;0;L;;;;;N;;;;;\n13F19;EGYPTIAN HIEROGLYPH-13F19;Lo;0;L;;;;;N;;;;;\n13F1A;EGYPTIAN HIEROGLYPH-13F1A;Lo;0;L;;;;;N;;;;;\n13F1B;EGYPTIAN HIEROGLYPH-13F1B;Lo;0;L;;;;;N;;;;;\n13F1C;EGYPTIAN HIEROGLYPH-13F1C;Lo;0;L;;;;;N;;;;;\n13F1D;EGYPTIAN HIEROGLYPH-13F1D;Lo;0;L;;;;;N;;;;;\n13F1E;EGYPTIAN HIEROGLYPH-13F1E;Lo;0;L;;;;;N;;;;;\n13F1F;EGYPTIAN HIEROGLYPH-13F1F;Lo;0;L;;;;;N;;;;;\n13F20;EGYPTIAN HIEROGLYPH-13F20;Lo;0;L;;;;;N;;;;;\n13F21;EGYPTIAN HIEROGLYPH-13F21;Lo;0;L;;;;;N;;;;;\n13F22;EGYPTIAN HIEROGLYPH-13F22;Lo;0;L;;;;;N;;;;;\n13F23;EGYPTIAN HIEROGLYPH-13F23;Lo;0;L;;;;;N;;;;;\n13F24;EGYPTIAN HIEROGLYPH-13F24;Lo;0;L;;;;;N;;;;;\n13F25;EGYPTIAN HIEROGLYPH-13F25;Lo;0;L;;;;;N;;;;;\n13F26;EGYPTIAN HIEROGLYPH-13F26;Lo;0;L;;;;;N;;;;;\n13F27;EGYPTIAN HIEROGLYPH-13F27;Lo;0;L;;;;;N;;;;;\n13F28;EGYPTIAN HIEROGLYPH-13F28;Lo;0;L;;;;;N;;;;;\n13F29;EGYPTIAN HIEROGLYPH-13F29;Lo;0;L;;;;;N;;;;;\n13F2A;EGYPTIAN HIEROGLYPH-13F2A;Lo;0;L;;;;;N;;;;;\n13F2B;EGYPTIAN HIEROGLYPH-13F2B;Lo;0;L;;;;;N;;;;;\n13F2C;EGYPTIAN HIEROGLYPH-13F2C;Lo;0;L;;;;;N;;;;;\n13F2D;EGYPTIAN HIEROGLYPH-13F2D;Lo;0;L;;;;;N;;;;;\n13F2E;EGYPTIAN HIEROGLYPH-13F2E;Lo;0;L;;;;;N;;;;;\n13F2F;EGYPTIAN HIEROGLYPH-13F2F;Lo;0;L;;;;;N;;;;;\n13F30;EGYPTIAN HIEROGLYPH-13F30;Lo;0;L;;;;;N;;;;;\n13F31;EGYPTIAN HIEROGLYPH-13F31;Lo;0;L;;;;;N;;;;;\n13F32;EGYPTIAN HIEROGLYPH-13F32;Lo;0;L;;;;;N;;;;;\n13F33;EGYPTIAN HIEROGLYPH-13F33;Lo;0;L;;;;;N;;;;;\n13F34;EGYPTIAN HIEROGLYPH-13F34;Lo;0;L;;;;;N;;;;;\n13F35;EGYPTIAN HIEROGLYPH-13F35;Lo;0;L;;;;;N;;;;;\n13F36;EGYPTIAN HIEROGLYPH-13F36;Lo;0;L;;;;;N;;;;;\n13F37;EGYPTIAN HIEROGLYPH-13F37;Lo;0;L;;;;;N;;;;;\n13F38;EGYPTIAN HIEROGLYPH-13F38;Lo;0;L;;;;;N;;;;;\n13F39;EGYPTIAN HIEROGLYPH-13F39;Lo;0;L;;;;;N;;;;;\n13F3A;EGYPTIAN HIEROGLYPH-13F3A;Lo;0;L;;;;;N;;;;;\n13F3B;EGYPTIAN HIEROGLYPH-13F3B;Lo;0;L;;;;;N;;;;;\n13F3C;EGYPTIAN HIEROGLYPH-13F3C;Lo;0;L;;;;;N;;;;;\n13F3D;EGYPTIAN HIEROGLYPH-13F3D;Lo;0;L;;;;;N;;;;;\n13F3E;EGYPTIAN HIEROGLYPH-13F3E;Lo;0;L;;;;;N;;;;;\n13F3F;EGYPTIAN HIEROGLYPH-13F3F;Lo;0;L;;;;;N;;;;;\n13F40;EGYPTIAN HIEROGLYPH-13F40;Lo;0;L;;;;;N;;;;;\n13F41;EGYPTIAN HIEROGLYPH-13F41;Lo;0;L;;;;;N;;;;;\n13F42;EGYPTIAN HIEROGLYPH-13F42;Lo;0;L;;;;;N;;;;;\n13F43;EGYPTIAN HIEROGLYPH-13F43;Lo;0;L;;;;;N;;;;;\n13F44;EGYPTIAN HIEROGLYPH-13F44;Lo;0;L;;;;;N;;;;;\n13F45;EGYPTIAN HIEROGLYPH-13F45;Lo;0;L;;;;;N;;;;;\n13F46;EGYPTIAN HIEROGLYPH-13F46;Lo;0;L;;;;;N;;;;;\n13F47;EGYPTIAN HIEROGLYPH-13F47;Lo;0;L;;;;;N;;;;;\n13F48;EGYPTIAN HIEROGLYPH-13F48;Lo;0;L;;;;;N;;;;;\n13F49;EGYPTIAN HIEROGLYPH-13F49;Lo;0;L;;;;;N;;;;;\n13F4A;EGYPTIAN HIEROGLYPH-13F4A;Lo;0;L;;;;;N;;;;;\n13F4B;EGYPTIAN HIEROGLYPH-13F4B;Lo;0;L;;;;;N;;;;;\n13F4C;EGYPTIAN HIEROGLYPH-13F4C;Lo;0;L;;;;;N;;;;;\n13F4D;EGYPTIAN HIEROGLYPH-13F4D;Lo;0;L;;;;;N;;;;;\n13F4E;EGYPTIAN HIEROGLYPH-13F4E;Lo;0;L;;;;;N;;;;;\n13F4F;EGYPTIAN HIEROGLYPH-13F4F;Lo;0;L;;;;;N;;;;;\n13F50;EGYPTIAN HIEROGLYPH-13F50;Lo;0;L;;;;;N;;;;;\n13F51;EGYPTIAN HIEROGLYPH-13F51;Lo;0;L;;;;;N;;;;;\n13F52;EGYPTIAN HIEROGLYPH-13F52;Lo;0;L;;;;;N;;;;;\n13F53;EGYPTIAN HIEROGLYPH-13F53;Lo;0;L;;;;;N;;;;;\n13F54;EGYPTIAN HIEROGLYPH-13F54;Lo;0;L;;;;;N;;;;;\n13F55;EGYPTIAN HIEROGLYPH-13F55;Lo;0;L;;;;;N;;;;;\n13F56;EGYPTIAN HIEROGLYPH-13F56;Lo;0;L;;;;;N;;;;;\n13F57;EGYPTIAN HIEROGLYPH-13F57;Lo;0;L;;;;;N;;;;;\n13F58;EGYPTIAN HIEROGLYPH-13F58;Lo;0;L;;;;;N;;;;;\n13F59;EGYPTIAN HIEROGLYPH-13F59;Lo;0;L;;;;;N;;;;;\n13F5A;EGYPTIAN HIEROGLYPH-13F5A;Lo;0;L;;;;;N;;;;;\n13F5B;EGYPTIAN HIEROGLYPH-13F5B;Lo;0;L;;;;;N;;;;;\n13F5C;EGYPTIAN HIEROGLYPH-13F5C;Lo;0;L;;;;;N;;;;;\n13F5D;EGYPTIAN HIEROGLYPH-13F5D;Lo;0;L;;;;;N;;;;;\n13F5E;EGYPTIAN HIEROGLYPH-13F5E;Lo;0;L;;;;;N;;;;;\n13F5F;EGYPTIAN HIEROGLYPH-13F5F;Lo;0;L;;;;;N;;;;;\n13F60;EGYPTIAN HIEROGLYPH-13F60;Lo;0;L;;;;;N;;;;;\n13F61;EGYPTIAN HIEROGLYPH-13F61;Lo;0;L;;;;;N;;;;;\n13F62;EGYPTIAN HIEROGLYPH-13F62;Lo;0;L;;;;;N;;;;;\n13F63;EGYPTIAN HIEROGLYPH-13F63;Lo;0;L;;;;;N;;;;;\n13F64;EGYPTIAN HIEROGLYPH-13F64;Lo;0;L;;;;;N;;;;;\n13F65;EGYPTIAN HIEROGLYPH-13F65;Lo;0;L;;;;;N;;;;;\n13F66;EGYPTIAN HIEROGLYPH-13F66;Lo;0;L;;;;;N;;;;;\n13F67;EGYPTIAN HIEROGLYPH-13F67;Lo;0;L;;;;;N;;;;;\n13F68;EGYPTIAN HIEROGLYPH-13F68;Lo;0;L;;;;;N;;;;;\n13F69;EGYPTIAN HIEROGLYPH-13F69;Lo;0;L;;;;;N;;;;;\n13F6A;EGYPTIAN HIEROGLYPH-13F6A;Lo;0;L;;;;;N;;;;;\n13F6B;EGYPTIAN HIEROGLYPH-13F6B;Lo;0;L;;;;;N;;;;;\n13F6C;EGYPTIAN HIEROGLYPH-13F6C;Lo;0;L;;;;;N;;;;;\n13F6D;EGYPTIAN HIEROGLYPH-13F6D;Lo;0;L;;;;;N;;;;;\n13F6E;EGYPTIAN HIEROGLYPH-13F6E;Lo;0;L;;;;;N;;;;;\n13F6F;EGYPTIAN HIEROGLYPH-13F6F;Lo;0;L;;;;;N;;;;;\n13F70;EGYPTIAN HIEROGLYPH-13F70;Lo;0;L;;;;;N;;;;;\n13F71;EGYPTIAN HIEROGLYPH-13F71;Lo;0;L;;;;;N;;;;;\n13F72;EGYPTIAN HIEROGLYPH-13F72;Lo;0;L;;;;;N;;;;;\n13F73;EGYPTIAN HIEROGLYPH-13F73;Lo;0;L;;;;;N;;;;;\n13F74;EGYPTIAN HIEROGLYPH-13F74;Lo;0;L;;;;;N;;;;;\n13F75;EGYPTIAN HIEROGLYPH-13F75;Lo;0;L;;;;;N;;;;;\n13F76;EGYPTIAN HIEROGLYPH-13F76;Lo;0;L;;;;;N;;;;;\n13F77;EGYPTIAN HIEROGLYPH-13F77;Lo;0;L;;;;;N;;;;;\n13F78;EGYPTIAN HIEROGLYPH-13F78;Lo;0;L;;;;;N;;;;;\n13F79;EGYPTIAN HIEROGLYPH-13F79;Lo;0;L;;;;;N;;;;;\n13F7A;EGYPTIAN HIEROGLYPH-13F7A;Lo;0;L;;;;;N;;;;;\n13F7B;EGYPTIAN HIEROGLYPH-13F7B;Lo;0;L;;;;;N;;;;;\n13F7C;EGYPTIAN HIEROGLYPH-13F7C;Lo;0;L;;;;;N;;;;;\n13F7D;EGYPTIAN HIEROGLYPH-13F7D;Lo;0;L;;;;;N;;;;;\n13F7E;EGYPTIAN HIEROGLYPH-13F7E;Lo;0;L;;;;;N;;;;;\n13F7F;EGYPTIAN HIEROGLYPH-13F7F;Lo;0;L;;;;;N;;;;;\n13F80;EGYPTIAN HIEROGLYPH-13F80;Lo;0;L;;;;;N;;;;;\n13F81;EGYPTIAN HIEROGLYPH-13F81;Lo;0;L;;;;;N;;;;;\n13F82;EGYPTIAN HIEROGLYPH-13F82;Lo;0;L;;;;;N;;;;;\n13F83;EGYPTIAN HIEROGLYPH-13F83;Lo;0;L;;;;;N;;;;;\n13F84;EGYPTIAN HIEROGLYPH-13F84;Lo;0;L;;;;;N;;;;;\n13F85;EGYPTIAN HIEROGLYPH-13F85;Lo;0;L;;;;;N;;;;;\n13F86;EGYPTIAN HIEROGLYPH-13F86;Lo;0;L;;;;;N;;;;;\n13F87;EGYPTIAN HIEROGLYPH-13F87;Lo;0;L;;;;;N;;;;;\n13F88;EGYPTIAN HIEROGLYPH-13F88;Lo;0;L;;;;;N;;;;;\n13F89;EGYPTIAN HIEROGLYPH-13F89;Lo;0;L;;;;;N;;;;;\n13F8A;EGYPTIAN HIEROGLYPH-13F8A;Lo;0;L;;;;;N;;;;;\n13F8B;EGYPTIAN HIEROGLYPH-13F8B;Lo;0;L;;;;;N;;;;;\n13F8C;EGYPTIAN HIEROGLYPH-13F8C;Lo;0;L;;;;;N;;;;;\n13F8D;EGYPTIAN HIEROGLYPH-13F8D;Lo;0;L;;;;;N;;;;;\n13F8E;EGYPTIAN HIEROGLYPH-13F8E;Lo;0;L;;;;;N;;;;;\n13F8F;EGYPTIAN HIEROGLYPH-13F8F;Lo;0;L;;;;;N;;;;;\n13F90;EGYPTIAN HIEROGLYPH-13F90;Lo;0;L;;;;;N;;;;;\n13F91;EGYPTIAN HIEROGLYPH-13F91;Lo;0;L;;;;;N;;;;;\n13F92;EGYPTIAN HIEROGLYPH-13F92;Lo;0;L;;;;;N;;;;;\n13F93;EGYPTIAN HIEROGLYPH-13F93;Lo;0;L;;;;;N;;;;;\n13F94;EGYPTIAN HIEROGLYPH-13F94;Lo;0;L;;;;;N;;;;;\n13F95;EGYPTIAN HIEROGLYPH-13F95;Lo;0;L;;;;;N;;;;;\n13F96;EGYPTIAN HIEROGLYPH-13F96;Lo;0;L;;;;;N;;;;;\n13F97;EGYPTIAN HIEROGLYPH-13F97;Lo;0;L;;;;;N;;;;;\n13F98;EGYPTIAN HIEROGLYPH-13F98;Lo;0;L;;;;;N;;;;;\n13F99;EGYPTIAN HIEROGLYPH-13F99;Lo;0;L;;;;;N;;;;;\n13F9A;EGYPTIAN HIEROGLYPH-13F9A;Lo;0;L;;;;;N;;;;;\n13F9B;EGYPTIAN HIEROGLYPH-13F9B;Lo;0;L;;;;;N;;;;;\n13F9C;EGYPTIAN HIEROGLYPH-13F9C;Lo;0;L;;;;;N;;;;;\n13F9D;EGYPTIAN HIEROGLYPH-13F9D;Lo;0;L;;;;;N;;;;;\n13F9E;EGYPTIAN HIEROGLYPH-13F9E;Lo;0;L;;;;;N;;;;;\n13F9F;EGYPTIAN HIEROGLYPH-13F9F;Lo;0;L;;;;;N;;;;;\n13FA0;EGYPTIAN HIEROGLYPH-13FA0;Lo;0;L;;;;;N;;;;;\n13FA1;EGYPTIAN HIEROGLYPH-13FA1;Lo;0;L;;;;;N;;;;;\n13FA2;EGYPTIAN HIEROGLYPH-13FA2;Lo;0;L;;;;;N;;;;;\n13FA3;EGYPTIAN HIEROGLYPH-13FA3;Lo;0;L;;;;;N;;;;;\n13FA4;EGYPTIAN HIEROGLYPH-13FA4;Lo;0;L;;;;;N;;;;;\n13FA5;EGYPTIAN HIEROGLYPH-13FA5;Lo;0;L;;;;;N;;;;;\n13FA6;EGYPTIAN HIEROGLYPH-13FA6;Lo;0;L;;;;;N;;;;;\n13FA7;EGYPTIAN HIEROGLYPH-13FA7;Lo;0;L;;;;;N;;;;;\n13FA8;EGYPTIAN HIEROGLYPH-13FA8;Lo;0;L;;;;;N;;;;;\n13FA9;EGYPTIAN HIEROGLYPH-13FA9;Lo;0;L;;;;;N;;;;;\n13FAA;EGYPTIAN HIEROGLYPH-13FAA;Lo;0;L;;;;;N;;;;;\n13FAB;EGYPTIAN HIEROGLYPH-13FAB;Lo;0;L;;;;;N;;;;;\n13FAC;EGYPTIAN HIEROGLYPH-13FAC;Lo;0;L;;;;;N;;;;;\n13FAD;EGYPTIAN HIEROGLYPH-13FAD;Lo;0;L;;;;;N;;;;;\n13FAE;EGYPTIAN HIEROGLYPH-13FAE;Lo;0;L;;;;;N;;;;;\n13FAF;EGYPTIAN HIEROGLYPH-13FAF;Lo;0;L;;;;;N;;;;;\n13FB0;EGYPTIAN HIEROGLYPH-13FB0;Lo;0;L;;;;;N;;;;;\n13FB1;EGYPTIAN HIEROGLYPH-13FB1;Lo;0;L;;;;;N;;;;;\n13FB2;EGYPTIAN HIEROGLYPH-13FB2;Lo;0;L;;;;;N;;;;;\n13FB3;EGYPTIAN HIEROGLYPH-13FB3;Lo;0;L;;;;;N;;;;;\n13FB4;EGYPTIAN HIEROGLYPH-13FB4;Lo;0;L;;;;;N;;;;;\n13FB5;EGYPTIAN HIEROGLYPH-13FB5;Lo;0;L;;;;;N;;;;;\n13FB6;EGYPTIAN HIEROGLYPH-13FB6;Lo;0;L;;;;;N;;;;;\n13FB7;EGYPTIAN HIEROGLYPH-13FB7;Lo;0;L;;;;;N;;;;;\n13FB8;EGYPTIAN HIEROGLYPH-13FB8;Lo;0;L;;;;;N;;;;;\n13FB9;EGYPTIAN HIEROGLYPH-13FB9;Lo;0;L;;;;;N;;;;;\n13FBA;EGYPTIAN HIEROGLYPH-13FBA;Lo;0;L;;;;;N;;;;;\n13FBB;EGYPTIAN HIEROGLYPH-13FBB;Lo;0;L;;;;;N;;;;;\n13FBC;EGYPTIAN HIEROGLYPH-13FBC;Lo;0;L;;;;;N;;;;;\n13FBD;EGYPTIAN HIEROGLYPH-13FBD;Lo;0;L;;;;;N;;;;;\n13FBE;EGYPTIAN HIEROGLYPH-13FBE;Lo;0;L;;;;;N;;;;;\n13FBF;EGYPTIAN HIEROGLYPH-13FBF;Lo;0;L;;;;;N;;;;;\n13FC0;EGYPTIAN HIEROGLYPH-13FC0;Lo;0;L;;;;;N;;;;;\n13FC1;EGYPTIAN HIEROGLYPH-13FC1;Lo;0;L;;;;;N;;;;;\n13FC2;EGYPTIAN HIEROGLYPH-13FC2;Lo;0;L;;;;;N;;;;;\n13FC3;EGYPTIAN HIEROGLYPH-13FC3;Lo;0;L;;;;;N;;;;;\n13FC4;EGYPTIAN HIEROGLYPH-13FC4;Lo;0;L;;;;;N;;;;;\n13FC5;EGYPTIAN HIEROGLYPH-13FC5;Lo;0;L;;;;;N;;;;;\n13FC6;EGYPTIAN HIEROGLYPH-13FC6;Lo;0;L;;;;;N;;;;;\n13FC7;EGYPTIAN HIEROGLYPH-13FC7;Lo;0;L;;;;;N;;;;;\n13FC8;EGYPTIAN HIEROGLYPH-13FC8;Lo;0;L;;;;;N;;;;;\n13FC9;EGYPTIAN HIEROGLYPH-13FC9;Lo;0;L;;;;;N;;;;;\n13FCA;EGYPTIAN HIEROGLYPH-13FCA;Lo;0;L;;;;;N;;;;;\n13FCB;EGYPTIAN HIEROGLYPH-13FCB;Lo;0;L;;;;;N;;;;;\n13FCC;EGYPTIAN HIEROGLYPH-13FCC;Lo;0;L;;;;;N;;;;;\n13FCD;EGYPTIAN HIEROGLYPH-13FCD;Lo;0;L;;;;;N;;;;;\n13FCE;EGYPTIAN HIEROGLYPH-13FCE;Lo;0;L;;;;;N;;;;;\n13FCF;EGYPTIAN HIEROGLYPH-13FCF;Lo;0;L;;;;;N;;;;;\n13FD0;EGYPTIAN HIEROGLYPH-13FD0;Lo;0;L;;;;;N;;;;;\n13FD1;EGYPTIAN HIEROGLYPH-13FD1;Lo;0;L;;;;;N;;;;;\n13FD2;EGYPTIAN HIEROGLYPH-13FD2;Lo;0;L;;;;;N;;;;;\n13FD3;EGYPTIAN HIEROGLYPH-13FD3;Lo;0;L;;;;;N;;;;;\n13FD4;EGYPTIAN HIEROGLYPH-13FD4;Lo;0;L;;;;;N;;;;;\n13FD5;EGYPTIAN HIEROGLYPH-13FD5;Lo;0;L;;;;;N;;;;;\n13FD6;EGYPTIAN HIEROGLYPH-13FD6;Lo;0;L;;;;;N;;;;;\n13FD7;EGYPTIAN HIEROGLYPH-13FD7;Lo;0;L;;;;;N;;;;;\n13FD8;EGYPTIAN HIEROGLYPH-13FD8;Lo;0;L;;;;;N;;;;;\n13FD9;EGYPTIAN HIEROGLYPH-13FD9;Lo;0;L;;;;;N;;;;;\n13FDA;EGYPTIAN HIEROGLYPH-13FDA;Lo;0;L;;;;;N;;;;;\n13FDB;EGYPTIAN HIEROGLYPH-13FDB;Lo;0;L;;;;;N;;;;;\n13FDC;EGYPTIAN HIEROGLYPH-13FDC;Lo;0;L;;;;;N;;;;;\n13FDD;EGYPTIAN HIEROGLYPH-13FDD;Lo;0;L;;;;;N;;;;;\n13FDE;EGYPTIAN HIEROGLYPH-13FDE;Lo;0;L;;;;;N;;;;;\n13FDF;EGYPTIAN HIEROGLYPH-13FDF;Lo;0;L;;;;;N;;;;;\n13FE0;EGYPTIAN HIEROGLYPH-13FE0;Lo;0;L;;;;;N;;;;;\n13FE1;EGYPTIAN HIEROGLYPH-13FE1;Lo;0;L;;;;;N;;;;;\n13FE2;EGYPTIAN HIEROGLYPH-13FE2;Lo;0;L;;;;;N;;;;;\n13FE3;EGYPTIAN HIEROGLYPH-13FE3;Lo;0;L;;;;;N;;;;;\n13FE4;EGYPTIAN HIEROGLYPH-13FE4;Lo;0;L;;;;;N;;;;;\n13FE5;EGYPTIAN HIEROGLYPH-13FE5;Lo;0;L;;;;;N;;;;;\n13FE6;EGYPTIAN HIEROGLYPH-13FE6;Lo;0;L;;;;;N;;;;;\n13FE7;EGYPTIAN HIEROGLYPH-13FE7;Lo;0;L;;;;;N;;;;;\n13FE8;EGYPTIAN HIEROGLYPH-13FE8;Lo;0;L;;;;;N;;;;;\n13FE9;EGYPTIAN HIEROGLYPH-13FE9;Lo;0;L;;;;;N;;;;;\n13FEA;EGYPTIAN HIEROGLYPH-13FEA;Lo;0;L;;;;;N;;;;;\n13FEB;EGYPTIAN HIEROGLYPH-13FEB;Lo;0;L;;;;;N;;;;;\n13FEC;EGYPTIAN HIEROGLYPH-13FEC;Lo;0;L;;;;;N;;;;;\n13FED;EGYPTIAN HIEROGLYPH-13FED;Lo;0;L;;;;;N;;;;;\n13FEE;EGYPTIAN HIEROGLYPH-13FEE;Lo;0;L;;;;;N;;;;;\n13FEF;EGYPTIAN HIEROGLYPH-13FEF;Lo;0;L;;;;;N;;;;;\n13FF0;EGYPTIAN HIEROGLYPH-13FF0;Lo;0;L;;;;;N;;;;;\n13FF1;EGYPTIAN HIEROGLYPH-13FF1;Lo;0;L;;;;;N;;;;;\n13FF2;EGYPTIAN HIEROGLYPH-13FF2;Lo;0;L;;;;;N;;;;;\n13FF3;EGYPTIAN HIEROGLYPH-13FF3;Lo;0;L;;;;;N;;;;;\n13FF4;EGYPTIAN HIEROGLYPH-13FF4;Lo;0;L;;;;;N;;;;;\n13FF5;EGYPTIAN HIEROGLYPH-13FF5;Lo;0;L;;;;;N;;;;;\n13FF6;EGYPTIAN HIEROGLYPH-13FF6;Lo;0;L;;;;;N;;;;;\n13FF7;EGYPTIAN HIEROGLYPH-13FF7;Lo;0;L;;;;;N;;;;;\n13FF8;EGYPTIAN HIEROGLYPH-13FF8;Lo;0;L;;;;;N;;;;;\n13FF9;EGYPTIAN HIEROGLYPH-13FF9;Lo;0;L;;;;;N;;;;;\n13FFA;EGYPTIAN HIEROGLYPH-13FFA;Lo;0;L;;;;;N;;;;;\n13FFB;EGYPTIAN HIEROGLYPH-13FFB;Lo;0;L;;;;;N;;;;;\n13FFC;EGYPTIAN HIEROGLYPH-13FFC;Lo;0;L;;;;;N;;;;;\n13FFD;EGYPTIAN HIEROGLYPH-13FFD;Lo;0;L;;;;;N;;;;;\n13FFE;EGYPTIAN HIEROGLYPH-13FFE;Lo;0;L;;;;;N;;;;;\n13FFF;EGYPTIAN HIEROGLYPH-13FFF;Lo;0;L;;;;;N;;;;;\n14000;EGYPTIAN HIEROGLYPH-14000;Lo;0;L;;;;;N;;;;;\n14001;EGYPTIAN HIEROGLYPH-14001;Lo;0;L;;;;;N;;;;;\n14002;EGYPTIAN HIEROGLYPH-14002;Lo;0;L;;;;;N;;;;;\n14003;EGYPTIAN HIEROGLYPH-14003;Lo;0;L;;;;;N;;;;;\n14004;EGYPTIAN HIEROGLYPH-14004;Lo;0;L;;;;;N;;;;;\n14005;EGYPTIAN HIEROGLYPH-14005;Lo;0;L;;;;;N;;;;;\n14006;EGYPTIAN HIEROGLYPH-14006;Lo;0;L;;;;;N;;;;;\n14007;EGYPTIAN HIEROGLYPH-14007;Lo;0;L;;;;;N;;;;;\n14008;EGYPTIAN HIEROGLYPH-14008;Lo;0;L;;;;;N;;;;;\n14009;EGYPTIAN HIEROGLYPH-14009;Lo;0;L;;;;;N;;;;;\n1400A;EGYPTIAN HIEROGLYPH-1400A;Lo;0;L;;;;;N;;;;;\n1400B;EGYPTIAN HIEROGLYPH-1400B;Lo;0;L;;;;;N;;;;;\n1400C;EGYPTIAN HIEROGLYPH-1400C;Lo;0;L;;;;;N;;;;;\n1400D;EGYPTIAN HIEROGLYPH-1400D;Lo;0;L;;;;;N;;;;;\n1400E;EGYPTIAN HIEROGLYPH-1400E;Lo;0;L;;;;;N;;;;;\n1400F;EGYPTIAN HIEROGLYPH-1400F;Lo;0;L;;;;;N;;;;;\n14010;EGYPTIAN HIEROGLYPH-14010;Lo;0;L;;;;;N;;;;;\n14011;EGYPTIAN HIEROGLYPH-14011;Lo;0;L;;;;;N;;;;;\n14012;EGYPTIAN HIEROGLYPH-14012;Lo;0;L;;;;;N;;;;;\n14013;EGYPTIAN HIEROGLYPH-14013;Lo;0;L;;;;;N;;;;;\n14014;EGYPTIAN HIEROGLYPH-14014;Lo;0;L;;;;;N;;;;;\n14015;EGYPTIAN HIEROGLYPH-14015;Lo;0;L;;;;;N;;;;;\n14016;EGYPTIAN HIEROGLYPH-14016;Lo;0;L;;;;;N;;;;;\n14017;EGYPTIAN HIEROGLYPH-14017;Lo;0;L;;;;;N;;;;;\n14018;EGYPTIAN HIEROGLYPH-14018;Lo;0;L;;;;;N;;;;;\n14019;EGYPTIAN HIEROGLYPH-14019;Lo;0;L;;;;;N;;;;;\n1401A;EGYPTIAN HIEROGLYPH-1401A;Lo;0;L;;;;;N;;;;;\n1401B;EGYPTIAN HIEROGLYPH-1401B;Lo;0;L;;;;;N;;;;;\n1401C;EGYPTIAN HIEROGLYPH-1401C;Lo;0;L;;;;;N;;;;;\n1401D;EGYPTIAN HIEROGLYPH-1401D;Lo;0;L;;;;;N;;;;;\n1401E;EGYPTIAN HIEROGLYPH-1401E;Lo;0;L;;;;;N;;;;;\n1401F;EGYPTIAN HIEROGLYPH-1401F;Lo;0;L;;;;;N;;;;;\n14020;EGYPTIAN HIEROGLYPH-14020;Lo;0;L;;;;;N;;;;;\n14021;EGYPTIAN HIEROGLYPH-14021;Lo;0;L;;;;;N;;;;;\n14022;EGYPTIAN HIEROGLYPH-14022;Lo;0;L;;;;;N;;;;;\n14023;EGYPTIAN HIEROGLYPH-14023;Lo;0;L;;;;;N;;;;;\n14024;EGYPTIAN HIEROGLYPH-14024;Lo;0;L;;;;;N;;;;;\n14025;EGYPTIAN HIEROGLYPH-14025;Lo;0;L;;;;;N;;;;;\n14026;EGYPTIAN HIEROGLYPH-14026;Lo;0;L;;;;;N;;;;;\n14027;EGYPTIAN HIEROGLYPH-14027;Lo;0;L;;;;;N;;;;;\n14028;EGYPTIAN HIEROGLYPH-14028;Lo;0;L;;;;;N;;;;;\n14029;EGYPTIAN HIEROGLYPH-14029;Lo;0;L;;;;;N;;;;;\n1402A;EGYPTIAN HIEROGLYPH-1402A;Lo;0;L;;;;;N;;;;;\n1402B;EGYPTIAN HIEROGLYPH-1402B;Lo;0;L;;;;;N;;;;;\n1402C;EGYPTIAN HIEROGLYPH-1402C;Lo;0;L;;;;;N;;;;;\n1402D;EGYPTIAN HIEROGLYPH-1402D;Lo;0;L;;;;;N;;;;;\n1402E;EGYPTIAN HIEROGLYPH-1402E;Lo;0;L;;;;;N;;;;;\n1402F;EGYPTIAN HIEROGLYPH-1402F;Lo;0;L;;;;;N;;;;;\n14030;EGYPTIAN HIEROGLYPH-14030;Lo;0;L;;;;;N;;;;;\n14031;EGYPTIAN HIEROGLYPH-14031;Lo;0;L;;;;;N;;;;;\n14032;EGYPTIAN HIEROGLYPH-14032;Lo;0;L;;;;;N;;;;;\n14033;EGYPTIAN HIEROGLYPH-14033;Lo;0;L;;;;;N;;;;;\n14034;EGYPTIAN HIEROGLYPH-14034;Lo;0;L;;;;;N;;;;;\n14035;EGYPTIAN HIEROGLYPH-14035;Lo;0;L;;;;;N;;;;;\n14036;EGYPTIAN HIEROGLYPH-14036;Lo;0;L;;;;;N;;;;;\n14037;EGYPTIAN HIEROGLYPH-14037;Lo;0;L;;;;;N;;;;;\n14038;EGYPTIAN HIEROGLYPH-14038;Lo;0;L;;;;;N;;;;;\n14039;EGYPTIAN HIEROGLYPH-14039;Lo;0;L;;;;;N;;;;;\n1403A;EGYPTIAN HIEROGLYPH-1403A;Lo;0;L;;;;;N;;;;;\n1403B;EGYPTIAN HIEROGLYPH-1403B;Lo;0;L;;;;;N;;;;;\n1403C;EGYPTIAN HIEROGLYPH-1403C;Lo;0;L;;;;;N;;;;;\n1403D;EGYPTIAN HIEROGLYPH-1403D;Lo;0;L;;;;;N;;;;;\n1403E;EGYPTIAN HIEROGLYPH-1403E;Lo;0;L;;;;;N;;;;;\n1403F;EGYPTIAN HIEROGLYPH-1403F;Lo;0;L;;;;;N;;;;;\n14040;EGYPTIAN HIEROGLYPH-14040;Lo;0;L;;;;;N;;;;;\n14041;EGYPTIAN HIEROGLYPH-14041;Lo;0;L;;;;;N;;;;;\n14042;EGYPTIAN HIEROGLYPH-14042;Lo;0;L;;;;;N;;;;;\n14043;EGYPTIAN HIEROGLYPH-14043;Lo;0;L;;;;;N;;;;;\n14044;EGYPTIAN HIEROGLYPH-14044;Lo;0;L;;;;;N;;;;;\n14045;EGYPTIAN HIEROGLYPH-14045;Lo;0;L;;;;;N;;;;;\n14046;EGYPTIAN HIEROGLYPH-14046;Lo;0;L;;;;;N;;;;;\n14047;EGYPTIAN HIEROGLYPH-14047;Lo;0;L;;;;;N;;;;;\n14048;EGYPTIAN HIEROGLYPH-14048;Lo;0;L;;;;;N;;;;;\n14049;EGYPTIAN HIEROGLYPH-14049;Lo;0;L;;;;;N;;;;;\n1404A;EGYPTIAN HIEROGLYPH-1404A;Lo;0;L;;;;;N;;;;;\n1404B;EGYPTIAN HIEROGLYPH-1404B;Lo;0;L;;;;;N;;;;;\n1404C;EGYPTIAN HIEROGLYPH-1404C;Lo;0;L;;;;;N;;;;;\n1404D;EGYPTIAN HIEROGLYPH-1404D;Lo;0;L;;;;;N;;;;;\n1404E;EGYPTIAN HIEROGLYPH-1404E;Lo;0;L;;;;;N;;;;;\n1404F;EGYPTIAN HIEROGLYPH-1404F;Lo;0;L;;;;;N;;;;;\n14050;EGYPTIAN HIEROGLYPH-14050;Lo;0;L;;;;;N;;;;;\n14051;EGYPTIAN HIEROGLYPH-14051;Lo;0;L;;;;;N;;;;;\n14052;EGYPTIAN HIEROGLYPH-14052;Lo;0;L;;;;;N;;;;;\n14053;EGYPTIAN HIEROGLYPH-14053;Lo;0;L;;;;;N;;;;;\n14054;EGYPTIAN HIEROGLYPH-14054;Lo;0;L;;;;;N;;;;;\n14055;EGYPTIAN HIEROGLYPH-14055;Lo;0;L;;;;;N;;;;;\n14056;EGYPTIAN HIEROGLYPH-14056;Lo;0;L;;;;;N;;;;;\n14057;EGYPTIAN HIEROGLYPH-14057;Lo;0;L;;;;;N;;;;;\n14058;EGYPTIAN HIEROGLYPH-14058;Lo;0;L;;;;;N;;;;;\n14059;EGYPTIAN HIEROGLYPH-14059;Lo;0;L;;;;;N;;;;;\n1405A;EGYPTIAN HIEROGLYPH-1405A;Lo;0;L;;;;;N;;;;;\n1405B;EGYPTIAN HIEROGLYPH-1405B;Lo;0;L;;;;;N;;;;;\n1405C;EGYPTIAN HIEROGLYPH-1405C;Lo;0;L;;;;;N;;;;;\n1405D;EGYPTIAN HIEROGLYPH-1405D;Lo;0;L;;;;;N;;;;;\n1405E;EGYPTIAN HIEROGLYPH-1405E;Lo;0;L;;;;;N;;;;;\n1405F;EGYPTIAN HIEROGLYPH-1405F;Lo;0;L;;;;;N;;;;;\n14060;EGYPTIAN HIEROGLYPH-14060;Lo;0;L;;;;;N;;;;;\n14061;EGYPTIAN HIEROGLYPH-14061;Lo;0;L;;;;;N;;;;;\n14062;EGYPTIAN HIEROGLYPH-14062;Lo;0;L;;;;;N;;;;;\n14063;EGYPTIAN HIEROGLYPH-14063;Lo;0;L;;;;;N;;;;;\n14064;EGYPTIAN HIEROGLYPH-14064;Lo;0;L;;;;;N;;;;;\n14065;EGYPTIAN HIEROGLYPH-14065;Lo;0;L;;;;;N;;;;;\n14066;EGYPTIAN HIEROGLYPH-14066;Lo;0;L;;;;;N;;;;;\n14067;EGYPTIAN HIEROGLYPH-14067;Lo;0;L;;;;;N;;;;;\n14068;EGYPTIAN HIEROGLYPH-14068;Lo;0;L;;;;;N;;;;;\n14069;EGYPTIAN HIEROGLYPH-14069;Lo;0;L;;;;;N;;;;;\n1406A;EGYPTIAN HIEROGLYPH-1406A;Lo;0;L;;;;;N;;;;;\n1406B;EGYPTIAN HIEROGLYPH-1406B;Lo;0;L;;;;;N;;;;;\n1406C;EGYPTIAN HIEROGLYPH-1406C;Lo;0;L;;;;;N;;;;;\n1406D;EGYPTIAN HIEROGLYPH-1406D;Lo;0;L;;;;;N;;;;;\n1406E;EGYPTIAN HIEROGLYPH-1406E;Lo;0;L;;;;;N;;;;;\n1406F;EGYPTIAN HIEROGLYPH-1406F;Lo;0;L;;;;;N;;;;;\n14070;EGYPTIAN HIEROGLYPH-14070;Lo;0;L;;;;;N;;;;;\n14071;EGYPTIAN HIEROGLYPH-14071;Lo;0;L;;;;;N;;;;;\n14072;EGYPTIAN HIEROGLYPH-14072;Lo;0;L;;;;;N;;;;;\n14073;EGYPTIAN HIEROGLYPH-14073;Lo;0;L;;;;;N;;;;;\n14074;EGYPTIAN HIEROGLYPH-14074;Lo;0;L;;;;;N;;;;;\n14075;EGYPTIAN HIEROGLYPH-14075;Lo;0;L;;;;;N;;;;;\n14076;EGYPTIAN HIEROGLYPH-14076;Lo;0;L;;;;;N;;;;;\n14077;EGYPTIAN HIEROGLYPH-14077;Lo;0;L;;;;;N;;;;;\n14078;EGYPTIAN HIEROGLYPH-14078;Lo;0;L;;;;;N;;;;;\n14079;EGYPTIAN HIEROGLYPH-14079;Lo;0;L;;;;;N;;;;;\n1407A;EGYPTIAN HIEROGLYPH-1407A;Lo;0;L;;;;;N;;;;;\n1407B;EGYPTIAN HIEROGLYPH-1407B;Lo;0;L;;;;;N;;;;;\n1407C;EGYPTIAN HIEROGLYPH-1407C;Lo;0;L;;;;;N;;;;;\n1407D;EGYPTIAN HIEROGLYPH-1407D;Lo;0;L;;;;;N;;;;;\n1407E;EGYPTIAN HIEROGLYPH-1407E;Lo;0;L;;;;;N;;;;;\n1407F;EGYPTIAN HIEROGLYPH-1407F;Lo;0;L;;;;;N;;;;;\n14080;EGYPTIAN HIEROGLYPH-14080;Lo;0;L;;;;;N;;;;;\n14081;EGYPTIAN HIEROGLYPH-14081;Lo;0;L;;;;;N;;;;;\n14082;EGYPTIAN HIEROGLYPH-14082;Lo;0;L;;;;;N;;;;;\n14083;EGYPTIAN HIEROGLYPH-14083;Lo;0;L;;;;;N;;;;;\n14084;EGYPTIAN HIEROGLYPH-14084;Lo;0;L;;;;;N;;;;;\n14085;EGYPTIAN HIEROGLYPH-14085;Lo;0;L;;;;;N;;;;;\n14086;EGYPTIAN HIEROGLYPH-14086;Lo;0;L;;;;;N;;;;;\n14087;EGYPTIAN HIEROGLYPH-14087;Lo;0;L;;;;;N;;;;;\n14088;EGYPTIAN HIEROGLYPH-14088;Lo;0;L;;;;;N;;;;;\n14089;EGYPTIAN HIEROGLYPH-14089;Lo;0;L;;;;;N;;;;;\n1408A;EGYPTIAN HIEROGLYPH-1408A;Lo;0;L;;;;;N;;;;;\n1408B;EGYPTIAN HIEROGLYPH-1408B;Lo;0;L;;;;;N;;;;;\n1408C;EGYPTIAN HIEROGLYPH-1408C;Lo;0;L;;;;;N;;;;;\n1408D;EGYPTIAN HIEROGLYPH-1408D;Lo;0;L;;;;;N;;;;;\n1408E;EGYPTIAN HIEROGLYPH-1408E;Lo;0;L;;;;;N;;;;;\n1408F;EGYPTIAN HIEROGLYPH-1408F;Lo;0;L;;;;;N;;;;;\n14090;EGYPTIAN HIEROGLYPH-14090;Lo;0;L;;;;;N;;;;;\n14091;EGYPTIAN HIEROGLYPH-14091;Lo;0;L;;;;;N;;;;;\n14092;EGYPTIAN HIEROGLYPH-14092;Lo;0;L;;;;;N;;;;;\n14093;EGYPTIAN HIEROGLYPH-14093;Lo;0;L;;;;;N;;;;;\n14094;EGYPTIAN HIEROGLYPH-14094;Lo;0;L;;;;;N;;;;;\n14095;EGYPTIAN HIEROGLYPH-14095;Lo;0;L;;;;;N;;;;;\n14096;EGYPTIAN HIEROGLYPH-14096;Lo;0;L;;;;;N;;;;;\n14097;EGYPTIAN HIEROGLYPH-14097;Lo;0;L;;;;;N;;;;;\n14098;EGYPTIAN HIEROGLYPH-14098;Lo;0;L;;;;;N;;;;;\n14099;EGYPTIAN HIEROGLYPH-14099;Lo;0;L;;;;;N;;;;;\n1409A;EGYPTIAN HIEROGLYPH-1409A;Lo;0;L;;;;;N;;;;;\n1409B;EGYPTIAN HIEROGLYPH-1409B;Lo;0;L;;;;;N;;;;;\n1409C;EGYPTIAN HIEROGLYPH-1409C;Lo;0;L;;;;;N;;;;;\n1409D;EGYPTIAN HIEROGLYPH-1409D;Lo;0;L;;;;;N;;;;;\n1409E;EGYPTIAN HIEROGLYPH-1409E;Lo;0;L;;;;;N;;;;;\n1409F;EGYPTIAN HIEROGLYPH-1409F;Lo;0;L;;;;;N;;;;;\n140A0;EGYPTIAN HIEROGLYPH-140A0;Lo;0;L;;;;;N;;;;;\n140A1;EGYPTIAN HIEROGLYPH-140A1;Lo;0;L;;;;;N;;;;;\n140A2;EGYPTIAN HIEROGLYPH-140A2;Lo;0;L;;;;;N;;;;;\n140A3;EGYPTIAN HIEROGLYPH-140A3;Lo;0;L;;;;;N;;;;;\n140A4;EGYPTIAN HIEROGLYPH-140A4;Lo;0;L;;;;;N;;;;;\n140A5;EGYPTIAN HIEROGLYPH-140A5;Lo;0;L;;;;;N;;;;;\n140A6;EGYPTIAN HIEROGLYPH-140A6;Lo;0;L;;;;;N;;;;;\n140A7;EGYPTIAN HIEROGLYPH-140A7;Lo;0;L;;;;;N;;;;;\n140A8;EGYPTIAN HIEROGLYPH-140A8;Lo;0;L;;;;;N;;;;;\n140A9;EGYPTIAN HIEROGLYPH-140A9;Lo;0;L;;;;;N;;;;;\n140AA;EGYPTIAN HIEROGLYPH-140AA;Lo;0;L;;;;;N;;;;;\n140AB;EGYPTIAN HIEROGLYPH-140AB;Lo;0;L;;;;;N;;;;;\n140AC;EGYPTIAN HIEROGLYPH-140AC;Lo;0;L;;;;;N;;;;;\n140AD;EGYPTIAN HIEROGLYPH-140AD;Lo;0;L;;;;;N;;;;;\n140AE;EGYPTIAN HIEROGLYPH-140AE;Lo;0;L;;;;;N;;;;;\n140AF;EGYPTIAN HIEROGLYPH-140AF;Lo;0;L;;;;;N;;;;;\n140B0;EGYPTIAN HIEROGLYPH-140B0;Lo;0;L;;;;;N;;;;;\n140B1;EGYPTIAN HIEROGLYPH-140B1;Lo;0;L;;;;;N;;;;;\n140B2;EGYPTIAN HIEROGLYPH-140B2;Lo;0;L;;;;;N;;;;;\n140B3;EGYPTIAN HIEROGLYPH-140B3;Lo;0;L;;;;;N;;;;;\n140B4;EGYPTIAN HIEROGLYPH-140B4;Lo;0;L;;;;;N;;;;;\n140B5;EGYPTIAN HIEROGLYPH-140B5;Lo;0;L;;;;;N;;;;;\n140B6;EGYPTIAN HIEROGLYPH-140B6;Lo;0;L;;;;;N;;;;;\n140B7;EGYPTIAN HIEROGLYPH-140B7;Lo;0;L;;;;;N;;;;;\n140B8;EGYPTIAN HIEROGLYPH-140B8;Lo;0;L;;;;;N;;;;;\n140B9;EGYPTIAN HIEROGLYPH-140B9;Lo;0;L;;;;;N;;;;;\n140BA;EGYPTIAN HIEROGLYPH-140BA;Lo;0;L;;;;;N;;;;;\n140BB;EGYPTIAN HIEROGLYPH-140BB;Lo;0;L;;;;;N;;;;;\n140BC;EGYPTIAN HIEROGLYPH-140BC;Lo;0;L;;;;;N;;;;;\n140BD;EGYPTIAN HIEROGLYPH-140BD;Lo;0;L;;;;;N;;;;;\n140BE;EGYPTIAN HIEROGLYPH-140BE;Lo;0;L;;;;;N;;;;;\n140BF;EGYPTIAN HIEROGLYPH-140BF;Lo;0;L;;;;;N;;;;;\n140C0;EGYPTIAN HIEROGLYPH-140C0;Lo;0;L;;;;;N;;;;;\n140C1;EGYPTIAN HIEROGLYPH-140C1;Lo;0;L;;;;;N;;;;;\n140C2;EGYPTIAN HIEROGLYPH-140C2;Lo;0;L;;;;;N;;;;;\n140C3;EGYPTIAN HIEROGLYPH-140C3;Lo;0;L;;;;;N;;;;;\n140C4;EGYPTIAN HIEROGLYPH-140C4;Lo;0;L;;;;;N;;;;;\n140C5;EGYPTIAN HIEROGLYPH-140C5;Lo;0;L;;;;;N;;;;;\n140C6;EGYPTIAN HIEROGLYPH-140C6;Lo;0;L;;;;;N;;;;;\n140C7;EGYPTIAN HIEROGLYPH-140C7;Lo;0;L;;;;;N;;;;;\n140C8;EGYPTIAN HIEROGLYPH-140C8;Lo;0;L;;;;;N;;;;;\n140C9;EGYPTIAN HIEROGLYPH-140C9;Lo;0;L;;;;;N;;;;;\n140CA;EGYPTIAN HIEROGLYPH-140CA;Lo;0;L;;;;;N;;;;;\n140CB;EGYPTIAN HIEROGLYPH-140CB;Lo;0;L;;;;;N;;;;;\n140CC;EGYPTIAN HIEROGLYPH-140CC;Lo;0;L;;;;;N;;;;;\n140CD;EGYPTIAN HIEROGLYPH-140CD;Lo;0;L;;;;;N;;;;;\n140CE;EGYPTIAN HIEROGLYPH-140CE;Lo;0;L;;;;;N;;;;;\n140CF;EGYPTIAN HIEROGLYPH-140CF;Lo;0;L;;;;;N;;;;;\n140D0;EGYPTIAN HIEROGLYPH-140D0;Lo;0;L;;;;;N;;;;;\n140D1;EGYPTIAN HIEROGLYPH-140D1;Lo;0;L;;;;;N;;;;;\n140D2;EGYPTIAN HIEROGLYPH-140D2;Lo;0;L;;;;;N;;;;;\n140D3;EGYPTIAN HIEROGLYPH-140D3;Lo;0;L;;;;;N;;;;;\n140D4;EGYPTIAN HIEROGLYPH-140D4;Lo;0;L;;;;;N;;;;;\n140D5;EGYPTIAN HIEROGLYPH-140D5;Lo;0;L;;;;;N;;;;;\n140D6;EGYPTIAN HIEROGLYPH-140D6;Lo;0;L;;;;;N;;;;;\n140D7;EGYPTIAN HIEROGLYPH-140D7;Lo;0;L;;;;;N;;;;;\n140D8;EGYPTIAN HIEROGLYPH-140D8;Lo;0;L;;;;;N;;;;;\n140D9;EGYPTIAN HIEROGLYPH-140D9;Lo;0;L;;;;;N;;;;;\n140DA;EGYPTIAN HIEROGLYPH-140DA;Lo;0;L;;;;;N;;;;;\n140DB;EGYPTIAN HIEROGLYPH-140DB;Lo;0;L;;;;;N;;;;;\n140DC;EGYPTIAN HIEROGLYPH-140DC;Lo;0;L;;;;;N;;;;;\n140DD;EGYPTIAN HIEROGLYPH-140DD;Lo;0;L;;;;;N;;;;;\n140DE;EGYPTIAN HIEROGLYPH-140DE;Lo;0;L;;;;;N;;;;;\n140DF;EGYPTIAN HIEROGLYPH-140DF;Lo;0;L;;;;;N;;;;;\n140E0;EGYPTIAN HIEROGLYPH-140E0;Lo;0;L;;;;;N;;;;;\n140E1;EGYPTIAN HIEROGLYPH-140E1;Lo;0;L;;;;;N;;;;;\n140E2;EGYPTIAN HIEROGLYPH-140E2;Lo;0;L;;;;;N;;;;;\n140E3;EGYPTIAN HIEROGLYPH-140E3;Lo;0;L;;;;;N;;;;;\n140E4;EGYPTIAN HIEROGLYPH-140E4;Lo;0;L;;;;;N;;;;;\n140E5;EGYPTIAN HIEROGLYPH-140E5;Lo;0;L;;;;;N;;;;;\n140E6;EGYPTIAN HIEROGLYPH-140E6;Lo;0;L;;;;;N;;;;;\n140E7;EGYPTIAN HIEROGLYPH-140E7;Lo;0;L;;;;;N;;;;;\n140E8;EGYPTIAN HIEROGLYPH-140E8;Lo;0;L;;;;;N;;;;;\n140E9;EGYPTIAN HIEROGLYPH-140E9;Lo;0;L;;;;;N;;;;;\n140EA;EGYPTIAN HIEROGLYPH-140EA;Lo;0;L;;;;;N;;;;;\n140EB;EGYPTIAN HIEROGLYPH-140EB;Lo;0;L;;;;;N;;;;;\n140EC;EGYPTIAN HIEROGLYPH-140EC;Lo;0;L;;;;;N;;;;;\n140ED;EGYPTIAN HIEROGLYPH-140ED;Lo;0;L;;;;;N;;;;;\n140EE;EGYPTIAN HIEROGLYPH-140EE;Lo;0;L;;;;;N;;;;;\n140EF;EGYPTIAN HIEROGLYPH-140EF;Lo;0;L;;;;;N;;;;;\n140F0;EGYPTIAN HIEROGLYPH-140F0;Lo;0;L;;;;;N;;;;;\n140F1;EGYPTIAN HIEROGLYPH-140F1;Lo;0;L;;;;;N;;;;;\n140F2;EGYPTIAN HIEROGLYPH-140F2;Lo;0;L;;;;;N;;;;;\n140F3;EGYPTIAN HIEROGLYPH-140F3;Lo;0;L;;;;;N;;;;;\n140F4;EGYPTIAN HIEROGLYPH-140F4;Lo;0;L;;;;;N;;;;;\n140F5;EGYPTIAN HIEROGLYPH-140F5;Lo;0;L;;;;;N;;;;;\n140F6;EGYPTIAN HIEROGLYPH-140F6;Lo;0;L;;;;;N;;;;;\n140F7;EGYPTIAN HIEROGLYPH-140F7;Lo;0;L;;;;;N;;;;;\n140F8;EGYPTIAN HIEROGLYPH-140F8;Lo;0;L;;;;;N;;;;;\n140F9;EGYPTIAN HIEROGLYPH-140F9;Lo;0;L;;;;;N;;;;;\n140FA;EGYPTIAN HIEROGLYPH-140FA;Lo;0;L;;;;;N;;;;;\n140FB;EGYPTIAN HIEROGLYPH-140FB;Lo;0;L;;;;;N;;;;;\n140FC;EGYPTIAN HIEROGLYPH-140FC;Lo;0;L;;;;;N;;;;;\n140FD;EGYPTIAN HIEROGLYPH-140FD;Lo;0;L;;;;;N;;;;;\n140FE;EGYPTIAN HIEROGLYPH-140FE;Lo;0;L;;;;;N;;;;;\n140FF;EGYPTIAN HIEROGLYPH-140FF;Lo;0;L;;;;;N;;;;;\n14100;EGYPTIAN HIEROGLYPH-14100;Lo;0;L;;;;;N;;;;;\n14101;EGYPTIAN HIEROGLYPH-14101;Lo;0;L;;;;;N;;;;;\n14102;EGYPTIAN HIEROGLYPH-14102;Lo;0;L;;;;;N;;;;;\n14103;EGYPTIAN HIEROGLYPH-14103;Lo;0;L;;;;;N;;;;;\n14104;EGYPTIAN HIEROGLYPH-14104;Lo;0;L;;;;;N;;;;;\n14105;EGYPTIAN HIEROGLYPH-14105;Lo;0;L;;;;;N;;;;;\n14106;EGYPTIAN HIEROGLYPH-14106;Lo;0;L;;;;;N;;;;;\n14107;EGYPTIAN HIEROGLYPH-14107;Lo;0;L;;;;;N;;;;;\n14108;EGYPTIAN HIEROGLYPH-14108;Lo;0;L;;;;;N;;;;;\n14109;EGYPTIAN HIEROGLYPH-14109;Lo;0;L;;;;;N;;;;;\n1410A;EGYPTIAN HIEROGLYPH-1410A;Lo;0;L;;;;;N;;;;;\n1410B;EGYPTIAN HIEROGLYPH-1410B;Lo;0;L;;;;;N;;;;;\n1410C;EGYPTIAN HIEROGLYPH-1410C;Lo;0;L;;;;;N;;;;;\n1410D;EGYPTIAN HIEROGLYPH-1410D;Lo;0;L;;;;;N;;;;;\n1410E;EGYPTIAN HIEROGLYPH-1410E;Lo;0;L;;;;;N;;;;;\n1410F;EGYPTIAN HIEROGLYPH-1410F;Lo;0;L;;;;;N;;;;;\n14110;EGYPTIAN HIEROGLYPH-14110;Lo;0;L;;;;;N;;;;;\n14111;EGYPTIAN HIEROGLYPH-14111;Lo;0;L;;;;;N;;;;;\n14112;EGYPTIAN HIEROGLYPH-14112;Lo;0;L;;;;;N;;;;;\n14113;EGYPTIAN HIEROGLYPH-14113;Lo;0;L;;;;;N;;;;;\n14114;EGYPTIAN HIEROGLYPH-14114;Lo;0;L;;;;;N;;;;;\n14115;EGYPTIAN HIEROGLYPH-14115;Lo;0;L;;;;;N;;;;;\n14116;EGYPTIAN HIEROGLYPH-14116;Lo;0;L;;;;;N;;;;;\n14117;EGYPTIAN HIEROGLYPH-14117;Lo;0;L;;;;;N;;;;;\n14118;EGYPTIAN HIEROGLYPH-14118;Lo;0;L;;;;;N;;;;;\n14119;EGYPTIAN HIEROGLYPH-14119;Lo;0;L;;;;;N;;;;;\n1411A;EGYPTIAN HIEROGLYPH-1411A;Lo;0;L;;;;;N;;;;;\n1411B;EGYPTIAN HIEROGLYPH-1411B;Lo;0;L;;;;;N;;;;;\n1411C;EGYPTIAN HIEROGLYPH-1411C;Lo;0;L;;;;;N;;;;;\n1411D;EGYPTIAN HIEROGLYPH-1411D;Lo;0;L;;;;;N;;;;;\n1411E;EGYPTIAN HIEROGLYPH-1411E;Lo;0;L;;;;;N;;;;;\n1411F;EGYPTIAN HIEROGLYPH-1411F;Lo;0;L;;;;;N;;;;;\n14120;EGYPTIAN HIEROGLYPH-14120;Lo;0;L;;;;;N;;;;;\n14121;EGYPTIAN HIEROGLYPH-14121;Lo;0;L;;;;;N;;;;;\n14122;EGYPTIAN HIEROGLYPH-14122;Lo;0;L;;;;;N;;;;;\n14123;EGYPTIAN HIEROGLYPH-14123;Lo;0;L;;;;;N;;;;;\n14124;EGYPTIAN HIEROGLYPH-14124;Lo;0;L;;;;;N;;;;;\n14125;EGYPTIAN HIEROGLYPH-14125;Lo;0;L;;;;;N;;;;;\n14126;EGYPTIAN HIEROGLYPH-14126;Lo;0;L;;;;;N;;;;;\n14127;EGYPTIAN HIEROGLYPH-14127;Lo;0;L;;;;;N;;;;;\n14128;EGYPTIAN HIEROGLYPH-14128;Lo;0;L;;;;;N;;;;;\n14129;EGYPTIAN HIEROGLYPH-14129;Lo;0;L;;;;;N;;;;;\n1412A;EGYPTIAN HIEROGLYPH-1412A;Lo;0;L;;;;;N;;;;;\n1412B;EGYPTIAN HIEROGLYPH-1412B;Lo;0;L;;;;;N;;;;;\n1412C;EGYPTIAN HIEROGLYPH-1412C;Lo;0;L;;;;;N;;;;;\n1412D;EGYPTIAN HIEROGLYPH-1412D;Lo;0;L;;;;;N;;;;;\n1412E;EGYPTIAN HIEROGLYPH-1412E;Lo;0;L;;;;;N;;;;;\n1412F;EGYPTIAN HIEROGLYPH-1412F;Lo;0;L;;;;;N;;;;;\n14130;EGYPTIAN HIEROGLYPH-14130;Lo;0;L;;;;;N;;;;;\n14131;EGYPTIAN HIEROGLYPH-14131;Lo;0;L;;;;;N;;;;;\n14132;EGYPTIAN HIEROGLYPH-14132;Lo;0;L;;;;;N;;;;;\n14133;EGYPTIAN HIEROGLYPH-14133;Lo;0;L;;;;;N;;;;;\n14134;EGYPTIAN HIEROGLYPH-14134;Lo;0;L;;;;;N;;;;;\n14135;EGYPTIAN HIEROGLYPH-14135;Lo;0;L;;;;;N;;;;;\n14136;EGYPTIAN HIEROGLYPH-14136;Lo;0;L;;;;;N;;;;;\n14137;EGYPTIAN HIEROGLYPH-14137;Lo;0;L;;;;;N;;;;;\n14138;EGYPTIAN HIEROGLYPH-14138;Lo;0;L;;;;;N;;;;;\n14139;EGYPTIAN HIEROGLYPH-14139;Lo;0;L;;;;;N;;;;;\n1413A;EGYPTIAN HIEROGLYPH-1413A;Lo;0;L;;;;;N;;;;;\n1413B;EGYPTIAN HIEROGLYPH-1413B;Lo;0;L;;;;;N;;;;;\n1413C;EGYPTIAN HIEROGLYPH-1413C;Lo;0;L;;;;;N;;;;;\n1413D;EGYPTIAN HIEROGLYPH-1413D;Lo;0;L;;;;;N;;;;;\n1413E;EGYPTIAN HIEROGLYPH-1413E;Lo;0;L;;;;;N;;;;;\n1413F;EGYPTIAN HIEROGLYPH-1413F;Lo;0;L;;;;;N;;;;;\n14140;EGYPTIAN HIEROGLYPH-14140;Lo;0;L;;;;;N;;;;;\n14141;EGYPTIAN HIEROGLYPH-14141;Lo;0;L;;;;;N;;;;;\n14142;EGYPTIAN HIEROGLYPH-14142;Lo;0;L;;;;;N;;;;;\n14143;EGYPTIAN HIEROGLYPH-14143;Lo;0;L;;;;;N;;;;;\n14144;EGYPTIAN HIEROGLYPH-14144;Lo;0;L;;;;;N;;;;;\n14145;EGYPTIAN HIEROGLYPH-14145;Lo;0;L;;;;;N;;;;;\n14146;EGYPTIAN HIEROGLYPH-14146;Lo;0;L;;;;;N;;;;;\n14147;EGYPTIAN HIEROGLYPH-14147;Lo;0;L;;;;;N;;;;;\n14148;EGYPTIAN HIEROGLYPH-14148;Lo;0;L;;;;;N;;;;;\n14149;EGYPTIAN HIEROGLYPH-14149;Lo;0;L;;;;;N;;;;;\n1414A;EGYPTIAN HIEROGLYPH-1414A;Lo;0;L;;;;;N;;;;;\n1414B;EGYPTIAN HIEROGLYPH-1414B;Lo;0;L;;;;;N;;;;;\n1414C;EGYPTIAN HIEROGLYPH-1414C;Lo;0;L;;;;;N;;;;;\n1414D;EGYPTIAN HIEROGLYPH-1414D;Lo;0;L;;;;;N;;;;;\n1414E;EGYPTIAN HIEROGLYPH-1414E;Lo;0;L;;;;;N;;;;;\n1414F;EGYPTIAN HIEROGLYPH-1414F;Lo;0;L;;;;;N;;;;;\n14150;EGYPTIAN HIEROGLYPH-14150;Lo;0;L;;;;;N;;;;;\n14151;EGYPTIAN HIEROGLYPH-14151;Lo;0;L;;;;;N;;;;;\n14152;EGYPTIAN HIEROGLYPH-14152;Lo;0;L;;;;;N;;;;;\n14153;EGYPTIAN HIEROGLYPH-14153;Lo;0;L;;;;;N;;;;;\n14154;EGYPTIAN HIEROGLYPH-14154;Lo;0;L;;;;;N;;;;;\n14155;EGYPTIAN HIEROGLYPH-14155;Lo;0;L;;;;;N;;;;;\n14156;EGYPTIAN HIEROGLYPH-14156;Lo;0;L;;;;;N;;;;;\n14157;EGYPTIAN HIEROGLYPH-14157;Lo;0;L;;;;;N;;;;;\n14158;EGYPTIAN HIEROGLYPH-14158;Lo;0;L;;;;;N;;;;;\n14159;EGYPTIAN HIEROGLYPH-14159;Lo;0;L;;;;;N;;;;;\n1415A;EGYPTIAN HIEROGLYPH-1415A;Lo;0;L;;;;;N;;;;;\n1415B;EGYPTIAN HIEROGLYPH-1415B;Lo;0;L;;;;;N;;;;;\n1415C;EGYPTIAN HIEROGLYPH-1415C;Lo;0;L;;;;;N;;;;;\n1415D;EGYPTIAN HIEROGLYPH-1415D;Lo;0;L;;;;;N;;;;;\n1415E;EGYPTIAN HIEROGLYPH-1415E;Lo;0;L;;;;;N;;;;;\n1415F;EGYPTIAN HIEROGLYPH-1415F;Lo;0;L;;;;;N;;;;;\n14160;EGYPTIAN HIEROGLYPH-14160;Lo;0;L;;;;;N;;;;;\n14161;EGYPTIAN HIEROGLYPH-14161;Lo;0;L;;;;;N;;;;;\n14162;EGYPTIAN HIEROGLYPH-14162;Lo;0;L;;;;;N;;;;;\n14163;EGYPTIAN HIEROGLYPH-14163;Lo;0;L;;;;;N;;;;;\n14164;EGYPTIAN HIEROGLYPH-14164;Lo;0;L;;;;;N;;;;;\n14165;EGYPTIAN HIEROGLYPH-14165;Lo;0;L;;;;;N;;;;;\n14166;EGYPTIAN HIEROGLYPH-14166;Lo;0;L;;;;;N;;;;;\n14167;EGYPTIAN HIEROGLYPH-14167;Lo;0;L;;;;;N;;;;;\n14168;EGYPTIAN HIEROGLYPH-14168;Lo;0;L;;;;;N;;;;;\n14169;EGYPTIAN HIEROGLYPH-14169;Lo;0;L;;;;;N;;;;;\n1416A;EGYPTIAN HIEROGLYPH-1416A;Lo;0;L;;;;;N;;;;;\n1416B;EGYPTIAN HIEROGLYPH-1416B;Lo;0;L;;;;;N;;;;;\n1416C;EGYPTIAN HIEROGLYPH-1416C;Lo;0;L;;;;;N;;;;;\n1416D;EGYPTIAN HIEROGLYPH-1416D;Lo;0;L;;;;;N;;;;;\n1416E;EGYPTIAN HIEROGLYPH-1416E;Lo;0;L;;;;;N;;;;;\n1416F;EGYPTIAN HIEROGLYPH-1416F;Lo;0;L;;;;;N;;;;;\n14170;EGYPTIAN HIEROGLYPH-14170;Lo;0;L;;;;;N;;;;;\n14171;EGYPTIAN HIEROGLYPH-14171;Lo;0;L;;;;;N;;;;;\n14172;EGYPTIAN HIEROGLYPH-14172;Lo;0;L;;;;;N;;;;;\n14173;EGYPTIAN HIEROGLYPH-14173;Lo;0;L;;;;;N;;;;;\n14174;EGYPTIAN HIEROGLYPH-14174;Lo;0;L;;;;;N;;;;;\n14175;EGYPTIAN HIEROGLYPH-14175;Lo;0;L;;;;;N;;;;;\n14176;EGYPTIAN HIEROGLYPH-14176;Lo;0;L;;;;;N;;;;;\n14177;EGYPTIAN HIEROGLYPH-14177;Lo;0;L;;;;;N;;;;;\n14178;EGYPTIAN HIEROGLYPH-14178;Lo;0;L;;;;;N;;;;;\n14179;EGYPTIAN HIEROGLYPH-14179;Lo;0;L;;;;;N;;;;;\n1417A;EGYPTIAN HIEROGLYPH-1417A;Lo;0;L;;;;;N;;;;;\n1417B;EGYPTIAN HIEROGLYPH-1417B;Lo;0;L;;;;;N;;;;;\n1417C;EGYPTIAN HIEROGLYPH-1417C;Lo;0;L;;;;;N;;;;;\n1417D;EGYPTIAN HIEROGLYPH-1417D;Lo;0;L;;;;;N;;;;;\n1417E;EGYPTIAN HIEROGLYPH-1417E;Lo;0;L;;;;;N;;;;;\n1417F;EGYPTIAN HIEROGLYPH-1417F;Lo;0;L;;;;;N;;;;;\n14180;EGYPTIAN HIEROGLYPH-14180;Lo;0;L;;;;;N;;;;;\n14181;EGYPTIAN HIEROGLYPH-14181;Lo;0;L;;;;;N;;;;;\n14182;EGYPTIAN HIEROGLYPH-14182;Lo;0;L;;;;;N;;;;;\n14183;EGYPTIAN HIEROGLYPH-14183;Lo;0;L;;;;;N;;;;;\n14184;EGYPTIAN HIEROGLYPH-14184;Lo;0;L;;;;;N;;;;;\n14185;EGYPTIAN HIEROGLYPH-14185;Lo;0;L;;;;;N;;;;;\n14186;EGYPTIAN HIEROGLYPH-14186;Lo;0;L;;;;;N;;;;;\n14187;EGYPTIAN HIEROGLYPH-14187;Lo;0;L;;;;;N;;;;;\n14188;EGYPTIAN HIEROGLYPH-14188;Lo;0;L;;;;;N;;;;;\n14189;EGYPTIAN HIEROGLYPH-14189;Lo;0;L;;;;;N;;;;;\n1418A;EGYPTIAN HIEROGLYPH-1418A;Lo;0;L;;;;;N;;;;;\n1418B;EGYPTIAN HIEROGLYPH-1418B;Lo;0;L;;;;;N;;;;;\n1418C;EGYPTIAN HIEROGLYPH-1418C;Lo;0;L;;;;;N;;;;;\n1418D;EGYPTIAN HIEROGLYPH-1418D;Lo;0;L;;;;;N;;;;;\n1418E;EGYPTIAN HIEROGLYPH-1418E;Lo;0;L;;;;;N;;;;;\n1418F;EGYPTIAN HIEROGLYPH-1418F;Lo;0;L;;;;;N;;;;;\n14190;EGYPTIAN HIEROGLYPH-14190;Lo;0;L;;;;;N;;;;;\n14191;EGYPTIAN HIEROGLYPH-14191;Lo;0;L;;;;;N;;;;;\n14192;EGYPTIAN HIEROGLYPH-14192;Lo;0;L;;;;;N;;;;;\n14193;EGYPTIAN HIEROGLYPH-14193;Lo;0;L;;;;;N;;;;;\n14194;EGYPTIAN HIEROGLYPH-14194;Lo;0;L;;;;;N;;;;;\n14195;EGYPTIAN HIEROGLYPH-14195;Lo;0;L;;;;;N;;;;;\n14196;EGYPTIAN HIEROGLYPH-14196;Lo;0;L;;;;;N;;;;;\n14197;EGYPTIAN HIEROGLYPH-14197;Lo;0;L;;;;;N;;;;;\n14198;EGYPTIAN HIEROGLYPH-14198;Lo;0;L;;;;;N;;;;;\n14199;EGYPTIAN HIEROGLYPH-14199;Lo;0;L;;;;;N;;;;;\n1419A;EGYPTIAN HIEROGLYPH-1419A;Lo;0;L;;;;;N;;;;;\n1419B;EGYPTIAN HIEROGLYPH-1419B;Lo;0;L;;;;;N;;;;;\n1419C;EGYPTIAN HIEROGLYPH-1419C;Lo;0;L;;;;;N;;;;;\n1419D;EGYPTIAN HIEROGLYPH-1419D;Lo;0;L;;;;;N;;;;;\n1419E;EGYPTIAN HIEROGLYPH-1419E;Lo;0;L;;;;;N;;;;;\n1419F;EGYPTIAN HIEROGLYPH-1419F;Lo;0;L;;;;;N;;;;;\n141A0;EGYPTIAN HIEROGLYPH-141A0;Lo;0;L;;;;;N;;;;;\n141A1;EGYPTIAN HIEROGLYPH-141A1;Lo;0;L;;;;;N;;;;;\n141A2;EGYPTIAN HIEROGLYPH-141A2;Lo;0;L;;;;;N;;;;;\n141A3;EGYPTIAN HIEROGLYPH-141A3;Lo;0;L;;;;;N;;;;;\n141A4;EGYPTIAN HIEROGLYPH-141A4;Lo;0;L;;;;;N;;;;;\n141A5;EGYPTIAN HIEROGLYPH-141A5;Lo;0;L;;;;;N;;;;;\n141A6;EGYPTIAN HIEROGLYPH-141A6;Lo;0;L;;;;;N;;;;;\n141A7;EGYPTIAN HIEROGLYPH-141A7;Lo;0;L;;;;;N;;;;;\n141A8;EGYPTIAN HIEROGLYPH-141A8;Lo;0;L;;;;;N;;;;;\n141A9;EGYPTIAN HIEROGLYPH-141A9;Lo;0;L;;;;;N;;;;;\n141AA;EGYPTIAN HIEROGLYPH-141AA;Lo;0;L;;;;;N;;;;;\n141AB;EGYPTIAN HIEROGLYPH-141AB;Lo;0;L;;;;;N;;;;;\n141AC;EGYPTIAN HIEROGLYPH-141AC;Lo;0;L;;;;;N;;;;;\n141AD;EGYPTIAN HIEROGLYPH-141AD;Lo;0;L;;;;;N;;;;;\n141AE;EGYPTIAN HIEROGLYPH-141AE;Lo;0;L;;;;;N;;;;;\n141AF;EGYPTIAN HIEROGLYPH-141AF;Lo;0;L;;;;;N;;;;;\n141B0;EGYPTIAN HIEROGLYPH-141B0;Lo;0;L;;;;;N;;;;;\n141B1;EGYPTIAN HIEROGLYPH-141B1;Lo;0;L;;;;;N;;;;;\n141B2;EGYPTIAN HIEROGLYPH-141B2;Lo;0;L;;;;;N;;;;;\n141B3;EGYPTIAN HIEROGLYPH-141B3;Lo;0;L;;;;;N;;;;;\n141B4;EGYPTIAN HIEROGLYPH-141B4;Lo;0;L;;;;;N;;;;;\n141B5;EGYPTIAN HIEROGLYPH-141B5;Lo;0;L;;;;;N;;;;;\n141B6;EGYPTIAN HIEROGLYPH-141B6;Lo;0;L;;;;;N;;;;;\n141B7;EGYPTIAN HIEROGLYPH-141B7;Lo;0;L;;;;;N;;;;;\n141B8;EGYPTIAN HIEROGLYPH-141B8;Lo;0;L;;;;;N;;;;;\n141B9;EGYPTIAN HIEROGLYPH-141B9;Lo;0;L;;;;;N;;;;;\n141BA;EGYPTIAN HIEROGLYPH-141BA;Lo;0;L;;;;;N;;;;;\n141BB;EGYPTIAN HIEROGLYPH-141BB;Lo;0;L;;;;;N;;;;;\n141BC;EGYPTIAN HIEROGLYPH-141BC;Lo;0;L;;;;;N;;;;;\n141BD;EGYPTIAN HIEROGLYPH-141BD;Lo;0;L;;;;;N;;;;;\n141BE;EGYPTIAN HIEROGLYPH-141BE;Lo;0;L;;;;;N;;;;;\n141BF;EGYPTIAN HIEROGLYPH-141BF;Lo;0;L;;;;;N;;;;;\n141C0;EGYPTIAN HIEROGLYPH-141C0;Lo;0;L;;;;;N;;;;;\n141C1;EGYPTIAN HIEROGLYPH-141C1;Lo;0;L;;;;;N;;;;;\n141C2;EGYPTIAN HIEROGLYPH-141C2;Lo;0;L;;;;;N;;;;;\n141C3;EGYPTIAN HIEROGLYPH-141C3;Lo;0;L;;;;;N;;;;;\n141C4;EGYPTIAN HIEROGLYPH-141C4;Lo;0;L;;;;;N;;;;;\n141C5;EGYPTIAN HIEROGLYPH-141C5;Lo;0;L;;;;;N;;;;;\n141C6;EGYPTIAN HIEROGLYPH-141C6;Lo;0;L;;;;;N;;;;;\n141C7;EGYPTIAN HIEROGLYPH-141C7;Lo;0;L;;;;;N;;;;;\n141C8;EGYPTIAN HIEROGLYPH-141C8;Lo;0;L;;;;;N;;;;;\n141C9;EGYPTIAN HIEROGLYPH-141C9;Lo;0;L;;;;;N;;;;;\n141CA;EGYPTIAN HIEROGLYPH-141CA;Lo;0;L;;;;;N;;;;;\n141CB;EGYPTIAN HIEROGLYPH-141CB;Lo;0;L;;;;;N;;;;;\n141CC;EGYPTIAN HIEROGLYPH-141CC;Lo;0;L;;;;;N;;;;;\n141CD;EGYPTIAN HIEROGLYPH-141CD;Lo;0;L;;;;;N;;;;;\n141CE;EGYPTIAN HIEROGLYPH-141CE;Lo;0;L;;;;;N;;;;;\n141CF;EGYPTIAN HIEROGLYPH-141CF;Lo;0;L;;;;;N;;;;;\n141D0;EGYPTIAN HIEROGLYPH-141D0;Lo;0;L;;;;;N;;;;;\n141D1;EGYPTIAN HIEROGLYPH-141D1;Lo;0;L;;;;;N;;;;;\n141D2;EGYPTIAN HIEROGLYPH-141D2;Lo;0;L;;;;;N;;;;;\n141D3;EGYPTIAN HIEROGLYPH-141D3;Lo;0;L;;;;;N;;;;;\n141D4;EGYPTIAN HIEROGLYPH-141D4;Lo;0;L;;;;;N;;;;;\n141D5;EGYPTIAN HIEROGLYPH-141D5;Lo;0;L;;;;;N;;;;;\n141D6;EGYPTIAN HIEROGLYPH-141D6;Lo;0;L;;;;;N;;;;;\n141D7;EGYPTIAN HIEROGLYPH-141D7;Lo;0;L;;;;;N;;;;;\n141D8;EGYPTIAN HIEROGLYPH-141D8;Lo;0;L;;;;;N;;;;;\n141D9;EGYPTIAN HIEROGLYPH-141D9;Lo;0;L;;;;;N;;;;;\n141DA;EGYPTIAN HIEROGLYPH-141DA;Lo;0;L;;;;;N;;;;;\n141DB;EGYPTIAN HIEROGLYPH-141DB;Lo;0;L;;;;;N;;;;;\n141DC;EGYPTIAN HIEROGLYPH-141DC;Lo;0;L;;;;;N;;;;;\n141DD;EGYPTIAN HIEROGLYPH-141DD;Lo;0;L;;;;;N;;;;;\n141DE;EGYPTIAN HIEROGLYPH-141DE;Lo;0;L;;;;;N;;;;;\n141DF;EGYPTIAN HIEROGLYPH-141DF;Lo;0;L;;;;;N;;;;;\n141E0;EGYPTIAN HIEROGLYPH-141E0;Lo;0;L;;;;;N;;;;;\n141E1;EGYPTIAN HIEROGLYPH-141E1;Lo;0;L;;;;;N;;;;;\n141E2;EGYPTIAN HIEROGLYPH-141E2;Lo;0;L;;;;;N;;;;;\n141E3;EGYPTIAN HIEROGLYPH-141E3;Lo;0;L;;;;;N;;;;;\n141E4;EGYPTIAN HIEROGLYPH-141E4;Lo;0;L;;;;;N;;;;;\n141E5;EGYPTIAN HIEROGLYPH-141E5;Lo;0;L;;;;;N;;;;;\n141E6;EGYPTIAN HIEROGLYPH-141E6;Lo;0;L;;;;;N;;;;;\n141E7;EGYPTIAN HIEROGLYPH-141E7;Lo;0;L;;;;;N;;;;;\n141E8;EGYPTIAN HIEROGLYPH-141E8;Lo;0;L;;;;;N;;;;;\n141E9;EGYPTIAN HIEROGLYPH-141E9;Lo;0;L;;;;;N;;;;;\n141EA;EGYPTIAN HIEROGLYPH-141EA;Lo;0;L;;;;;N;;;;;\n141EB;EGYPTIAN HIEROGLYPH-141EB;Lo;0;L;;;;;N;;;;;\n141EC;EGYPTIAN HIEROGLYPH-141EC;Lo;0;L;;;;;N;;;;;\n141ED;EGYPTIAN HIEROGLYPH-141ED;Lo;0;L;;;;;N;;;;;\n141EE;EGYPTIAN HIEROGLYPH-141EE;Lo;0;L;;;;;N;;;;;\n141EF;EGYPTIAN HIEROGLYPH-141EF;Lo;0;L;;;;;N;;;;;\n141F0;EGYPTIAN HIEROGLYPH-141F0;Lo;0;L;;;;;N;;;;;\n141F1;EGYPTIAN HIEROGLYPH-141F1;Lo;0;L;;;;;N;;;;;\n141F2;EGYPTIAN HIEROGLYPH-141F2;Lo;0;L;;;;;N;;;;;\n141F3;EGYPTIAN HIEROGLYPH-141F3;Lo;0;L;;;;;N;;;;;\n141F4;EGYPTIAN HIEROGLYPH-141F4;Lo;0;L;;;;;N;;;;;\n141F5;EGYPTIAN HIEROGLYPH-141F5;Lo;0;L;;;;;N;;;;;\n141F6;EGYPTIAN HIEROGLYPH-141F6;Lo;0;L;;;;;N;;;;;\n141F7;EGYPTIAN HIEROGLYPH-141F7;Lo;0;L;;;;;N;;;;;\n141F8;EGYPTIAN HIEROGLYPH-141F8;Lo;0;L;;;;;N;;;;;\n141F9;EGYPTIAN HIEROGLYPH-141F9;Lo;0;L;;;;;N;;;;;\n141FA;EGYPTIAN HIEROGLYPH-141FA;Lo;0;L;;;;;N;;;;;\n141FB;EGYPTIAN HIEROGLYPH-141FB;Lo;0;L;;;;;N;;;;;\n141FC;EGYPTIAN HIEROGLYPH-141FC;Lo;0;L;;;;;N;;;;;\n141FD;EGYPTIAN HIEROGLYPH-141FD;Lo;0;L;;;;;N;;;;;\n141FE;EGYPTIAN HIEROGLYPH-141FE;Lo;0;L;;;;;N;;;;;\n141FF;EGYPTIAN HIEROGLYPH-141FF;Lo;0;L;;;;;N;;;;;\n14200;EGYPTIAN HIEROGLYPH-14200;Lo;0;L;;;;;N;;;;;\n14201;EGYPTIAN HIEROGLYPH-14201;Lo;0;L;;;;;N;;;;;\n14202;EGYPTIAN HIEROGLYPH-14202;Lo;0;L;;;;;N;;;;;\n14203;EGYPTIAN HIEROGLYPH-14203;Lo;0;L;;;;;N;;;;;\n14204;EGYPTIAN HIEROGLYPH-14204;Lo;0;L;;;;;N;;;;;\n14205;EGYPTIAN HIEROGLYPH-14205;Lo;0;L;;;;;N;;;;;\n14206;EGYPTIAN HIEROGLYPH-14206;Lo;0;L;;;;;N;;;;;\n14207;EGYPTIAN HIEROGLYPH-14207;Lo;0;L;;;;;N;;;;;\n14208;EGYPTIAN HIEROGLYPH-14208;Lo;0;L;;;;;N;;;;;\n14209;EGYPTIAN HIEROGLYPH-14209;Lo;0;L;;;;;N;;;;;\n1420A;EGYPTIAN HIEROGLYPH-1420A;Lo;0;L;;;;;N;;;;;\n1420B;EGYPTIAN HIEROGLYPH-1420B;Lo;0;L;;;;;N;;;;;\n1420C;EGYPTIAN HIEROGLYPH-1420C;Lo;0;L;;;;;N;;;;;\n1420D;EGYPTIAN HIEROGLYPH-1420D;Lo;0;L;;;;;N;;;;;\n1420E;EGYPTIAN HIEROGLYPH-1420E;Lo;0;L;;;;;N;;;;;\n1420F;EGYPTIAN HIEROGLYPH-1420F;Lo;0;L;;;;;N;;;;;\n14210;EGYPTIAN HIEROGLYPH-14210;Lo;0;L;;;;;N;;;;;\n14211;EGYPTIAN HIEROGLYPH-14211;Lo;0;L;;;;;N;;;;;\n14212;EGYPTIAN HIEROGLYPH-14212;Lo;0;L;;;;;N;;;;;\n14213;EGYPTIAN HIEROGLYPH-14213;Lo;0;L;;;;;N;;;;;\n14214;EGYPTIAN HIEROGLYPH-14214;Lo;0;L;;;;;N;;;;;\n14215;EGYPTIAN HIEROGLYPH-14215;Lo;0;L;;;;;N;;;;;\n14216;EGYPTIAN HIEROGLYPH-14216;Lo;0;L;;;;;N;;;;;\n14217;EGYPTIAN HIEROGLYPH-14217;Lo;0;L;;;;;N;;;;;\n14218;EGYPTIAN HIEROGLYPH-14218;Lo;0;L;;;;;N;;;;;\n14219;EGYPTIAN HIEROGLYPH-14219;Lo;0;L;;;;;N;;;;;\n1421A;EGYPTIAN HIEROGLYPH-1421A;Lo;0;L;;;;;N;;;;;\n1421B;EGYPTIAN HIEROGLYPH-1421B;Lo;0;L;;;;;N;;;;;\n1421C;EGYPTIAN HIEROGLYPH-1421C;Lo;0;L;;;;;N;;;;;\n1421D;EGYPTIAN HIEROGLYPH-1421D;Lo;0;L;;;;;N;;;;;\n1421E;EGYPTIAN HIEROGLYPH-1421E;Lo;0;L;;;;;N;;;;;\n1421F;EGYPTIAN HIEROGLYPH-1421F;Lo;0;L;;;;;N;;;;;\n14220;EGYPTIAN HIEROGLYPH-14220;Lo;0;L;;;;;N;;;;;\n14221;EGYPTIAN HIEROGLYPH-14221;Lo;0;L;;;;;N;;;;;\n14222;EGYPTIAN HIEROGLYPH-14222;Lo;0;L;;;;;N;;;;;\n14223;EGYPTIAN HIEROGLYPH-14223;Lo;0;L;;;;;N;;;;;\n14224;EGYPTIAN HIEROGLYPH-14224;Lo;0;L;;;;;N;;;;;\n14225;EGYPTIAN HIEROGLYPH-14225;Lo;0;L;;;;;N;;;;;\n14226;EGYPTIAN HIEROGLYPH-14226;Lo;0;L;;;;;N;;;;;\n14227;EGYPTIAN HIEROGLYPH-14227;Lo;0;L;;;;;N;;;;;\n14228;EGYPTIAN HIEROGLYPH-14228;Lo;0;L;;;;;N;;;;;\n14229;EGYPTIAN HIEROGLYPH-14229;Lo;0;L;;;;;N;;;;;\n1422A;EGYPTIAN HIEROGLYPH-1422A;Lo;0;L;;;;;N;;;;;\n1422B;EGYPTIAN HIEROGLYPH-1422B;Lo;0;L;;;;;N;;;;;\n1422C;EGYPTIAN HIEROGLYPH-1422C;Lo;0;L;;;;;N;;;;;\n1422D;EGYPTIAN HIEROGLYPH-1422D;Lo;0;L;;;;;N;;;;;\n1422E;EGYPTIAN HIEROGLYPH-1422E;Lo;0;L;;;;;N;;;;;\n1422F;EGYPTIAN HIEROGLYPH-1422F;Lo;0;L;;;;;N;;;;;\n14230;EGYPTIAN HIEROGLYPH-14230;Lo;0;L;;;;;N;;;;;\n14231;EGYPTIAN HIEROGLYPH-14231;Lo;0;L;;;;;N;;;;;\n14232;EGYPTIAN HIEROGLYPH-14232;Lo;0;L;;;;;N;;;;;\n14233;EGYPTIAN HIEROGLYPH-14233;Lo;0;L;;;;;N;;;;;\n14234;EGYPTIAN HIEROGLYPH-14234;Lo;0;L;;;;;N;;;;;\n14235;EGYPTIAN HIEROGLYPH-14235;Lo;0;L;;;;;N;;;;;\n14236;EGYPTIAN HIEROGLYPH-14236;Lo;0;L;;;;;N;;;;;\n14237;EGYPTIAN HIEROGLYPH-14237;Lo;0;L;;;;;N;;;;;\n14238;EGYPTIAN HIEROGLYPH-14238;Lo;0;L;;;;;N;;;;;\n14239;EGYPTIAN HIEROGLYPH-14239;Lo;0;L;;;;;N;;;;;\n1423A;EGYPTIAN HIEROGLYPH-1423A;Lo;0;L;;;;;N;;;;;\n1423B;EGYPTIAN HIEROGLYPH-1423B;Lo;0;L;;;;;N;;;;;\n1423C;EGYPTIAN HIEROGLYPH-1423C;Lo;0;L;;;;;N;;;;;\n1423D;EGYPTIAN HIEROGLYPH-1423D;Lo;0;L;;;;;N;;;;;\n1423E;EGYPTIAN HIEROGLYPH-1423E;Lo;0;L;;;;;N;;;;;\n1423F;EGYPTIAN HIEROGLYPH-1423F;Lo;0;L;;;;;N;;;;;\n14240;EGYPTIAN HIEROGLYPH-14240;Lo;0;L;;;;;N;;;;;\n14241;EGYPTIAN HIEROGLYPH-14241;Lo;0;L;;;;;N;;;;;\n14242;EGYPTIAN HIEROGLYPH-14242;Lo;0;L;;;;;N;;;;;\n14243;EGYPTIAN HIEROGLYPH-14243;Lo;0;L;;;;;N;;;;;\n14244;EGYPTIAN HIEROGLYPH-14244;Lo;0;L;;;;;N;;;;;\n14245;EGYPTIAN HIEROGLYPH-14245;Lo;0;L;;;;;N;;;;;\n14246;EGYPTIAN HIEROGLYPH-14246;Lo;0;L;;;;;N;;;;;\n14247;EGYPTIAN HIEROGLYPH-14247;Lo;0;L;;;;;N;;;;;\n14248;EGYPTIAN HIEROGLYPH-14248;Lo;0;L;;;;;N;;;;;\n14249;EGYPTIAN HIEROGLYPH-14249;Lo;0;L;;;;;N;;;;;\n1424A;EGYPTIAN HIEROGLYPH-1424A;Lo;0;L;;;;;N;;;;;\n1424B;EGYPTIAN HIEROGLYPH-1424B;Lo;0;L;;;;;N;;;;;\n1424C;EGYPTIAN HIEROGLYPH-1424C;Lo;0;L;;;;;N;;;;;\n1424D;EGYPTIAN HIEROGLYPH-1424D;Lo;0;L;;;;;N;;;;;\n1424E;EGYPTIAN HIEROGLYPH-1424E;Lo;0;L;;;;;N;;;;;\n1424F;EGYPTIAN HIEROGLYPH-1424F;Lo;0;L;;;;;N;;;;;\n14250;EGYPTIAN HIEROGLYPH-14250;Lo;0;L;;;;;N;;;;;\n14251;EGYPTIAN HIEROGLYPH-14251;Lo;0;L;;;;;N;;;;;\n14252;EGYPTIAN HIEROGLYPH-14252;Lo;0;L;;;;;N;;;;;\n14253;EGYPTIAN HIEROGLYPH-14253;Lo;0;L;;;;;N;;;;;\n14254;EGYPTIAN HIEROGLYPH-14254;Lo;0;L;;;;;N;;;;;\n14255;EGYPTIAN HIEROGLYPH-14255;Lo;0;L;;;;;N;;;;;\n14256;EGYPTIAN HIEROGLYPH-14256;Lo;0;L;;;;;N;;;;;\n14257;EGYPTIAN HIEROGLYPH-14257;Lo;0;L;;;;;N;;;;;\n14258;EGYPTIAN HIEROGLYPH-14258;Lo;0;L;;;;;N;;;;;\n14259;EGYPTIAN HIEROGLYPH-14259;Lo;0;L;;;;;N;;;;;\n1425A;EGYPTIAN HIEROGLYPH-1425A;Lo;0;L;;;;;N;;;;;\n1425B;EGYPTIAN HIEROGLYPH-1425B;Lo;0;L;;;;;N;;;;;\n1425C;EGYPTIAN HIEROGLYPH-1425C;Lo;0;L;;;;;N;;;;;\n1425D;EGYPTIAN HIEROGLYPH-1425D;Lo;0;L;;;;;N;;;;;\n1425E;EGYPTIAN HIEROGLYPH-1425E;Lo;0;L;;;;;N;;;;;\n1425F;EGYPTIAN HIEROGLYPH-1425F;Lo;0;L;;;;;N;;;;;\n14260;EGYPTIAN HIEROGLYPH-14260;Lo;0;L;;;;;N;;;;;\n14261;EGYPTIAN HIEROGLYPH-14261;Lo;0;L;;;;;N;;;;;\n14262;EGYPTIAN HIEROGLYPH-14262;Lo;0;L;;;;;N;;;;;\n14263;EGYPTIAN HIEROGLYPH-14263;Lo;0;L;;;;;N;;;;;\n14264;EGYPTIAN HIEROGLYPH-14264;Lo;0;L;;;;;N;;;;;\n14265;EGYPTIAN HIEROGLYPH-14265;Lo;0;L;;;;;N;;;;;\n14266;EGYPTIAN HIEROGLYPH-14266;Lo;0;L;;;;;N;;;;;\n14267;EGYPTIAN HIEROGLYPH-14267;Lo;0;L;;;;;N;;;;;\n14268;EGYPTIAN HIEROGLYPH-14268;Lo;0;L;;;;;N;;;;;\n14269;EGYPTIAN HIEROGLYPH-14269;Lo;0;L;;;;;N;;;;;\n1426A;EGYPTIAN HIEROGLYPH-1426A;Lo;0;L;;;;;N;;;;;\n1426B;EGYPTIAN HIEROGLYPH-1426B;Lo;0;L;;;;;N;;;;;\n1426C;EGYPTIAN HIEROGLYPH-1426C;Lo;0;L;;;;;N;;;;;\n1426D;EGYPTIAN HIEROGLYPH-1426D;Lo;0;L;;;;;N;;;;;\n1426E;EGYPTIAN HIEROGLYPH-1426E;Lo;0;L;;;;;N;;;;;\n1426F;EGYPTIAN HIEROGLYPH-1426F;Lo;0;L;;;;;N;;;;;\n14270;EGYPTIAN HIEROGLYPH-14270;Lo;0;L;;;;;N;;;;;\n14271;EGYPTIAN HIEROGLYPH-14271;Lo;0;L;;;;;N;;;;;\n14272;EGYPTIAN HIEROGLYPH-14272;Lo;0;L;;;;;N;;;;;\n14273;EGYPTIAN HIEROGLYPH-14273;Lo;0;L;;;;;N;;;;;\n14274;EGYPTIAN HIEROGLYPH-14274;Lo;0;L;;;;;N;;;;;\n14275;EGYPTIAN HIEROGLYPH-14275;Lo;0;L;;;;;N;;;;;\n14276;EGYPTIAN HIEROGLYPH-14276;Lo;0;L;;;;;N;;;;;\n14277;EGYPTIAN HIEROGLYPH-14277;Lo;0;L;;;;;N;;;;;\n14278;EGYPTIAN HIEROGLYPH-14278;Lo;0;L;;;;;N;;;;;\n14279;EGYPTIAN HIEROGLYPH-14279;Lo;0;L;;;;;N;;;;;\n1427A;EGYPTIAN HIEROGLYPH-1427A;Lo;0;L;;;;;N;;;;;\n1427B;EGYPTIAN HIEROGLYPH-1427B;Lo;0;L;;;;;N;;;;;\n1427C;EGYPTIAN HIEROGLYPH-1427C;Lo;0;L;;;;;N;;;;;\n1427D;EGYPTIAN HIEROGLYPH-1427D;Lo;0;L;;;;;N;;;;;\n1427E;EGYPTIAN HIEROGLYPH-1427E;Lo;0;L;;;;;N;;;;;\n1427F;EGYPTIAN HIEROGLYPH-1427F;Lo;0;L;;;;;N;;;;;\n14280;EGYPTIAN HIEROGLYPH-14280;Lo;0;L;;;;;N;;;;;\n14281;EGYPTIAN HIEROGLYPH-14281;Lo;0;L;;;;;N;;;;;\n14282;EGYPTIAN HIEROGLYPH-14282;Lo;0;L;;;;;N;;;;;\n14283;EGYPTIAN HIEROGLYPH-14283;Lo;0;L;;;;;N;;;;;\n14284;EGYPTIAN HIEROGLYPH-14284;Lo;0;L;;;;;N;;;;;\n14285;EGYPTIAN HIEROGLYPH-14285;Lo;0;L;;;;;N;;;;;\n14286;EGYPTIAN HIEROGLYPH-14286;Lo;0;L;;;;;N;;;;;\n14287;EGYPTIAN HIEROGLYPH-14287;Lo;0;L;;;;;N;;;;;\n14288;EGYPTIAN HIEROGLYPH-14288;Lo;0;L;;;;;N;;;;;\n14289;EGYPTIAN HIEROGLYPH-14289;Lo;0;L;;;;;N;;;;;\n1428A;EGYPTIAN HIEROGLYPH-1428A;Lo;0;L;;;;;N;;;;;\n1428B;EGYPTIAN HIEROGLYPH-1428B;Lo;0;L;;;;;N;;;;;\n1428C;EGYPTIAN HIEROGLYPH-1428C;Lo;0;L;;;;;N;;;;;\n1428D;EGYPTIAN HIEROGLYPH-1428D;Lo;0;L;;;;;N;;;;;\n1428E;EGYPTIAN HIEROGLYPH-1428E;Lo;0;L;;;;;N;;;;;\n1428F;EGYPTIAN HIEROGLYPH-1428F;Lo;0;L;;;;;N;;;;;\n14290;EGYPTIAN HIEROGLYPH-14290;Lo;0;L;;;;;N;;;;;\n14291;EGYPTIAN HIEROGLYPH-14291;Lo;0;L;;;;;N;;;;;\n14292;EGYPTIAN HIEROGLYPH-14292;Lo;0;L;;;;;N;;;;;\n14293;EGYPTIAN HIEROGLYPH-14293;Lo;0;L;;;;;N;;;;;\n14294;EGYPTIAN HIEROGLYPH-14294;Lo;0;L;;;;;N;;;;;\n14295;EGYPTIAN HIEROGLYPH-14295;Lo;0;L;;;;;N;;;;;\n14296;EGYPTIAN HIEROGLYPH-14296;Lo;0;L;;;;;N;;;;;\n14297;EGYPTIAN HIEROGLYPH-14297;Lo;0;L;;;;;N;;;;;\n14298;EGYPTIAN HIEROGLYPH-14298;Lo;0;L;;;;;N;;;;;\n14299;EGYPTIAN HIEROGLYPH-14299;Lo;0;L;;;;;N;;;;;\n1429A;EGYPTIAN HIEROGLYPH-1429A;Lo;0;L;;;;;N;;;;;\n1429B;EGYPTIAN HIEROGLYPH-1429B;Lo;0;L;;;;;N;;;;;\n1429C;EGYPTIAN HIEROGLYPH-1429C;Lo;0;L;;;;;N;;;;;\n1429D;EGYPTIAN HIEROGLYPH-1429D;Lo;0;L;;;;;N;;;;;\n1429E;EGYPTIAN HIEROGLYPH-1429E;Lo;0;L;;;;;N;;;;;\n1429F;EGYPTIAN HIEROGLYPH-1429F;Lo;0;L;;;;;N;;;;;\n142A0;EGYPTIAN HIEROGLYPH-142A0;Lo;0;L;;;;;N;;;;;\n142A1;EGYPTIAN HIEROGLYPH-142A1;Lo;0;L;;;;;N;;;;;\n142A2;EGYPTIAN HIEROGLYPH-142A2;Lo;0;L;;;;;N;;;;;\n142A3;EGYPTIAN HIEROGLYPH-142A3;Lo;0;L;;;;;N;;;;;\n142A4;EGYPTIAN HIEROGLYPH-142A4;Lo;0;L;;;;;N;;;;;\n142A5;EGYPTIAN HIEROGLYPH-142A5;Lo;0;L;;;;;N;;;;;\n142A6;EGYPTIAN HIEROGLYPH-142A6;Lo;0;L;;;;;N;;;;;\n142A7;EGYPTIAN HIEROGLYPH-142A7;Lo;0;L;;;;;N;;;;;\n142A8;EGYPTIAN HIEROGLYPH-142A8;Lo;0;L;;;;;N;;;;;\n142A9;EGYPTIAN HIEROGLYPH-142A9;Lo;0;L;;;;;N;;;;;\n142AA;EGYPTIAN HIEROGLYPH-142AA;Lo;0;L;;;;;N;;;;;\n142AB;EGYPTIAN HIEROGLYPH-142AB;Lo;0;L;;;;;N;;;;;\n142AC;EGYPTIAN HIEROGLYPH-142AC;Lo;0;L;;;;;N;;;;;\n142AD;EGYPTIAN HIEROGLYPH-142AD;Lo;0;L;;;;;N;;;;;\n142AE;EGYPTIAN HIEROGLYPH-142AE;Lo;0;L;;;;;N;;;;;\n142AF;EGYPTIAN HIEROGLYPH-142AF;Lo;0;L;;;;;N;;;;;\n142B0;EGYPTIAN HIEROGLYPH-142B0;Lo;0;L;;;;;N;;;;;\n142B1;EGYPTIAN HIEROGLYPH-142B1;Lo;0;L;;;;;N;;;;;\n142B2;EGYPTIAN HIEROGLYPH-142B2;Lo;0;L;;;;;N;;;;;\n142B3;EGYPTIAN HIEROGLYPH-142B3;Lo;0;L;;;;;N;;;;;\n142B4;EGYPTIAN HIEROGLYPH-142B4;Lo;0;L;;;;;N;;;;;\n142B5;EGYPTIAN HIEROGLYPH-142B5;Lo;0;L;;;;;N;;;;;\n142B6;EGYPTIAN HIEROGLYPH-142B6;Lo;0;L;;;;;N;;;;;\n142B7;EGYPTIAN HIEROGLYPH-142B7;Lo;0;L;;;;;N;;;;;\n142B8;EGYPTIAN HIEROGLYPH-142B8;Lo;0;L;;;;;N;;;;;\n142B9;EGYPTIAN HIEROGLYPH-142B9;Lo;0;L;;;;;N;;;;;\n142BA;EGYPTIAN HIEROGLYPH-142BA;Lo;0;L;;;;;N;;;;;\n142BB;EGYPTIAN HIEROGLYPH-142BB;Lo;0;L;;;;;N;;;;;\n142BC;EGYPTIAN HIEROGLYPH-142BC;Lo;0;L;;;;;N;;;;;\n142BD;EGYPTIAN HIEROGLYPH-142BD;Lo;0;L;;;;;N;;;;;\n142BE;EGYPTIAN HIEROGLYPH-142BE;Lo;0;L;;;;;N;;;;;\n142BF;EGYPTIAN HIEROGLYPH-142BF;Lo;0;L;;;;;N;;;;;\n142C0;EGYPTIAN HIEROGLYPH-142C0;Lo;0;L;;;;;N;;;;;\n142C1;EGYPTIAN HIEROGLYPH-142C1;Lo;0;L;;;;;N;;;;;\n142C2;EGYPTIAN HIEROGLYPH-142C2;Lo;0;L;;;;;N;;;;;\n142C3;EGYPTIAN HIEROGLYPH-142C3;Lo;0;L;;;;;N;;;;;\n142C4;EGYPTIAN HIEROGLYPH-142C4;Lo;0;L;;;;;N;;;;;\n142C5;EGYPTIAN HIEROGLYPH-142C5;Lo;0;L;;;;;N;;;;;\n142C6;EGYPTIAN HIEROGLYPH-142C6;Lo;0;L;;;;;N;;;;;\n142C7;EGYPTIAN HIEROGLYPH-142C7;Lo;0;L;;;;;N;;;;;\n142C8;EGYPTIAN HIEROGLYPH-142C8;Lo;0;L;;;;;N;;;;;\n142C9;EGYPTIAN HIEROGLYPH-142C9;Lo;0;L;;;;;N;;;;;\n142CA;EGYPTIAN HIEROGLYPH-142CA;Lo;0;L;;;;;N;;;;;\n142CB;EGYPTIAN HIEROGLYPH-142CB;Lo;0;L;;;;;N;;;;;\n142CC;EGYPTIAN HIEROGLYPH-142CC;Lo;0;L;;;;;N;;;;;\n142CD;EGYPTIAN HIEROGLYPH-142CD;Lo;0;L;;;;;N;;;;;\n142CE;EGYPTIAN HIEROGLYPH-142CE;Lo;0;L;;;;;N;;;;;\n142CF;EGYPTIAN HIEROGLYPH-142CF;Lo;0;L;;;;;N;;;;;\n142D0;EGYPTIAN HIEROGLYPH-142D0;Lo;0;L;;;;;N;;;;;\n142D1;EGYPTIAN HIEROGLYPH-142D1;Lo;0;L;;;;;N;;;;;\n142D2;EGYPTIAN HIEROGLYPH-142D2;Lo;0;L;;;;;N;;;;;\n142D3;EGYPTIAN HIEROGLYPH-142D3;Lo;0;L;;;;;N;;;;;\n142D4;EGYPTIAN HIEROGLYPH-142D4;Lo;0;L;;;;;N;;;;;\n142D5;EGYPTIAN HIEROGLYPH-142D5;Lo;0;L;;;;;N;;;;;\n142D6;EGYPTIAN HIEROGLYPH-142D6;Lo;0;L;;;;;N;;;;;\n142D7;EGYPTIAN HIEROGLYPH-142D7;Lo;0;L;;;;;N;;;;;\n142D8;EGYPTIAN HIEROGLYPH-142D8;Lo;0;L;;;;;N;;;;;\n142D9;EGYPTIAN HIEROGLYPH-142D9;Lo;0;L;;;;;N;;;;;\n142DA;EGYPTIAN HIEROGLYPH-142DA;Lo;0;L;;;;;N;;;;;\n142DB;EGYPTIAN HIEROGLYPH-142DB;Lo;0;L;;;;;N;;;;;\n142DC;EGYPTIAN HIEROGLYPH-142DC;Lo;0;L;;;;;N;;;;;\n142DD;EGYPTIAN HIEROGLYPH-142DD;Lo;0;L;;;;;N;;;;;\n142DE;EGYPTIAN HIEROGLYPH-142DE;Lo;0;L;;;;;N;;;;;\n142DF;EGYPTIAN HIEROGLYPH-142DF;Lo;0;L;;;;;N;;;;;\n142E0;EGYPTIAN HIEROGLYPH-142E0;Lo;0;L;;;;;N;;;;;\n142E1;EGYPTIAN HIEROGLYPH-142E1;Lo;0;L;;;;;N;;;;;\n142E2;EGYPTIAN HIEROGLYPH-142E2;Lo;0;L;;;;;N;;;;;\n142E3;EGYPTIAN HIEROGLYPH-142E3;Lo;0;L;;;;;N;;;;;\n142E4;EGYPTIAN HIEROGLYPH-142E4;Lo;0;L;;;;;N;;;;;\n142E5;EGYPTIAN HIEROGLYPH-142E5;Lo;0;L;;;;;N;;;;;\n142E6;EGYPTIAN HIEROGLYPH-142E6;Lo;0;L;;;;;N;;;;;\n142E7;EGYPTIAN HIEROGLYPH-142E7;Lo;0;L;;;;;N;;;;;\n142E8;EGYPTIAN HIEROGLYPH-142E8;Lo;0;L;;;;;N;;;;;\n142E9;EGYPTIAN HIEROGLYPH-142E9;Lo;0;L;;;;;N;;;;;\n142EA;EGYPTIAN HIEROGLYPH-142EA;Lo;0;L;;;;;N;;;;;\n142EB;EGYPTIAN HIEROGLYPH-142EB;Lo;0;L;;;;;N;;;;;\n142EC;EGYPTIAN HIEROGLYPH-142EC;Lo;0;L;;;;;N;;;;;\n142ED;EGYPTIAN HIEROGLYPH-142ED;Lo;0;L;;;;;N;;;;;\n142EE;EGYPTIAN HIEROGLYPH-142EE;Lo;0;L;;;;;N;;;;;\n142EF;EGYPTIAN HIEROGLYPH-142EF;Lo;0;L;;;;;N;;;;;\n142F0;EGYPTIAN HIEROGLYPH-142F0;Lo;0;L;;;;;N;;;;;\n142F1;EGYPTIAN HIEROGLYPH-142F1;Lo;0;L;;;;;N;;;;;\n142F2;EGYPTIAN HIEROGLYPH-142F2;Lo;0;L;;;;;N;;;;;\n142F3;EGYPTIAN HIEROGLYPH-142F3;Lo;0;L;;;;;N;;;;;\n142F4;EGYPTIAN HIEROGLYPH-142F4;Lo;0;L;;;;;N;;;;;\n142F5;EGYPTIAN HIEROGLYPH-142F5;Lo;0;L;;;;;N;;;;;\n142F6;EGYPTIAN HIEROGLYPH-142F6;Lo;0;L;;;;;N;;;;;\n142F7;EGYPTIAN HIEROGLYPH-142F7;Lo;0;L;;;;;N;;;;;\n142F8;EGYPTIAN HIEROGLYPH-142F8;Lo;0;L;;;;;N;;;;;\n142F9;EGYPTIAN HIEROGLYPH-142F9;Lo;0;L;;;;;N;;;;;\n142FA;EGYPTIAN HIEROGLYPH-142FA;Lo;0;L;;;;;N;;;;;\n142FB;EGYPTIAN HIEROGLYPH-142FB;Lo;0;L;;;;;N;;;;;\n142FC;EGYPTIAN HIEROGLYPH-142FC;Lo;0;L;;;;;N;;;;;\n142FD;EGYPTIAN HIEROGLYPH-142FD;Lo;0;L;;;;;N;;;;;\n142FE;EGYPTIAN HIEROGLYPH-142FE;Lo;0;L;;;;;N;;;;;\n142FF;EGYPTIAN HIEROGLYPH-142FF;Lo;0;L;;;;;N;;;;;\n14300;EGYPTIAN HIEROGLYPH-14300;Lo;0;L;;;;;N;;;;;\n14301;EGYPTIAN HIEROGLYPH-14301;Lo;0;L;;;;;N;;;;;\n14302;EGYPTIAN HIEROGLYPH-14302;Lo;0;L;;;;;N;;;;;\n14303;EGYPTIAN HIEROGLYPH-14303;Lo;0;L;;;;;N;;;;;\n14304;EGYPTIAN HIEROGLYPH-14304;Lo;0;L;;;;;N;;;;;\n14305;EGYPTIAN HIEROGLYPH-14305;Lo;0;L;;;;;N;;;;;\n14306;EGYPTIAN HIEROGLYPH-14306;Lo;0;L;;;;;N;;;;;\n14307;EGYPTIAN HIEROGLYPH-14307;Lo;0;L;;;;;N;;;;;\n14308;EGYPTIAN HIEROGLYPH-14308;Lo;0;L;;;;;N;;;;;\n14309;EGYPTIAN HIEROGLYPH-14309;Lo;0;L;;;;;N;;;;;\n1430A;EGYPTIAN HIEROGLYPH-1430A;Lo;0;L;;;;;N;;;;;\n1430B;EGYPTIAN HIEROGLYPH-1430B;Lo;0;L;;;;;N;;;;;\n1430C;EGYPTIAN HIEROGLYPH-1430C;Lo;0;L;;;;;N;;;;;\n1430D;EGYPTIAN HIEROGLYPH-1430D;Lo;0;L;;;;;N;;;;;\n1430E;EGYPTIAN HIEROGLYPH-1430E;Lo;0;L;;;;;N;;;;;\n1430F;EGYPTIAN HIEROGLYPH-1430F;Lo;0;L;;;;;N;;;;;\n14310;EGYPTIAN HIEROGLYPH-14310;Lo;0;L;;;;;N;;;;;\n14311;EGYPTIAN HIEROGLYPH-14311;Lo;0;L;;;;;N;;;;;\n14312;EGYPTIAN HIEROGLYPH-14312;Lo;0;L;;;;;N;;;;;\n14313;EGYPTIAN HIEROGLYPH-14313;Lo;0;L;;;;;N;;;;;\n14314;EGYPTIAN HIEROGLYPH-14314;Lo;0;L;;;;;N;;;;;\n14315;EGYPTIAN HIEROGLYPH-14315;Lo;0;L;;;;;N;;;;;\n14316;EGYPTIAN HIEROGLYPH-14316;Lo;0;L;;;;;N;;;;;\n14317;EGYPTIAN HIEROGLYPH-14317;Lo;0;L;;;;;N;;;;;\n14318;EGYPTIAN HIEROGLYPH-14318;Lo;0;L;;;;;N;;;;;\n14319;EGYPTIAN HIEROGLYPH-14319;Lo;0;L;;;;;N;;;;;\n1431A;EGYPTIAN HIEROGLYPH-1431A;Lo;0;L;;;;;N;;;;;\n1431B;EGYPTIAN HIEROGLYPH-1431B;Lo;0;L;;;;;N;;;;;\n1431C;EGYPTIAN HIEROGLYPH-1431C;Lo;0;L;;;;;N;;;;;\n1431D;EGYPTIAN HIEROGLYPH-1431D;Lo;0;L;;;;;N;;;;;\n1431E;EGYPTIAN HIEROGLYPH-1431E;Lo;0;L;;;;;N;;;;;\n1431F;EGYPTIAN HIEROGLYPH-1431F;Lo;0;L;;;;;N;;;;;\n14320;EGYPTIAN HIEROGLYPH-14320;Lo;0;L;;;;;N;;;;;\n14321;EGYPTIAN HIEROGLYPH-14321;Lo;0;L;;;;;N;;;;;\n14322;EGYPTIAN HIEROGLYPH-14322;Lo;0;L;;;;;N;;;;;\n14323;EGYPTIAN HIEROGLYPH-14323;Lo;0;L;;;;;N;;;;;\n14324;EGYPTIAN HIEROGLYPH-14324;Lo;0;L;;;;;N;;;;;\n14325;EGYPTIAN HIEROGLYPH-14325;Lo;0;L;;;;;N;;;;;\n14326;EGYPTIAN HIEROGLYPH-14326;Lo;0;L;;;;;N;;;;;\n14327;EGYPTIAN HIEROGLYPH-14327;Lo;0;L;;;;;N;;;;;\n14328;EGYPTIAN HIEROGLYPH-14328;Lo;0;L;;;;;N;;;;;\n14329;EGYPTIAN HIEROGLYPH-14329;Lo;0;L;;;;;N;;;;;\n1432A;EGYPTIAN HIEROGLYPH-1432A;Lo;0;L;;;;;N;;;;;\n1432B;EGYPTIAN HIEROGLYPH-1432B;Lo;0;L;;;;;N;;;;;\n1432C;EGYPTIAN HIEROGLYPH-1432C;Lo;0;L;;;;;N;;;;;\n1432D;EGYPTIAN HIEROGLYPH-1432D;Lo;0;L;;;;;N;;;;;\n1432E;EGYPTIAN HIEROGLYPH-1432E;Lo;0;L;;;;;N;;;;;\n1432F;EGYPTIAN HIEROGLYPH-1432F;Lo;0;L;;;;;N;;;;;\n14330;EGYPTIAN HIEROGLYPH-14330;Lo;0;L;;;;;N;;;;;\n14331;EGYPTIAN HIEROGLYPH-14331;Lo;0;L;;;;;N;;;;;\n14332;EGYPTIAN HIEROGLYPH-14332;Lo;0;L;;;;;N;;;;;\n14333;EGYPTIAN HIEROGLYPH-14333;Lo;0;L;;;;;N;;;;;\n14334;EGYPTIAN HIEROGLYPH-14334;Lo;0;L;;;;;N;;;;;\n14335;EGYPTIAN HIEROGLYPH-14335;Lo;0;L;;;;;N;;;;;\n14336;EGYPTIAN HIEROGLYPH-14336;Lo;0;L;;;;;N;;;;;\n14337;EGYPTIAN HIEROGLYPH-14337;Lo;0;L;;;;;N;;;;;\n14338;EGYPTIAN HIEROGLYPH-14338;Lo;0;L;;;;;N;;;;;\n14339;EGYPTIAN HIEROGLYPH-14339;Lo;0;L;;;;;N;;;;;\n1433A;EGYPTIAN HIEROGLYPH-1433A;Lo;0;L;;;;;N;;;;;\n1433B;EGYPTIAN HIEROGLYPH-1433B;Lo;0;L;;;;;N;;;;;\n1433C;EGYPTIAN HIEROGLYPH-1433C;Lo;0;L;;;;;N;;;;;\n1433D;EGYPTIAN HIEROGLYPH-1433D;Lo;0;L;;;;;N;;;;;\n1433E;EGYPTIAN HIEROGLYPH-1433E;Lo;0;L;;;;;N;;;;;\n1433F;EGYPTIAN HIEROGLYPH-1433F;Lo;0;L;;;;;N;;;;;\n14340;EGYPTIAN HIEROGLYPH-14340;Lo;0;L;;;;;N;;;;;\n14341;EGYPTIAN HIEROGLYPH-14341;Lo;0;L;;;;;N;;;;;\n14342;EGYPTIAN HIEROGLYPH-14342;Lo;0;L;;;;;N;;;;;\n14343;EGYPTIAN HIEROGLYPH-14343;Lo;0;L;;;;;N;;;;;\n14344;EGYPTIAN HIEROGLYPH-14344;Lo;0;L;;;;;N;;;;;\n14345;EGYPTIAN HIEROGLYPH-14345;Lo;0;L;;;;;N;;;;;\n14346;EGYPTIAN HIEROGLYPH-14346;Lo;0;L;;;;;N;;;;;\n14347;EGYPTIAN HIEROGLYPH-14347;Lo;0;L;;;;;N;;;;;\n14348;EGYPTIAN HIEROGLYPH-14348;Lo;0;L;;;;;N;;;;;\n14349;EGYPTIAN HIEROGLYPH-14349;Lo;0;L;;;;;N;;;;;\n1434A;EGYPTIAN HIEROGLYPH-1434A;Lo;0;L;;;;;N;;;;;\n1434B;EGYPTIAN HIEROGLYPH-1434B;Lo;0;L;;;;;N;;;;;\n1434C;EGYPTIAN HIEROGLYPH-1434C;Lo;0;L;;;;;N;;;;;\n1434D;EGYPTIAN HIEROGLYPH-1434D;Lo;0;L;;;;;N;;;;;\n1434E;EGYPTIAN HIEROGLYPH-1434E;Lo;0;L;;;;;N;;;;;\n1434F;EGYPTIAN HIEROGLYPH-1434F;Lo;0;L;;;;;N;;;;;\n14350;EGYPTIAN HIEROGLYPH-14350;Lo;0;L;;;;;N;;;;;\n14351;EGYPTIAN HIEROGLYPH-14351;Lo;0;L;;;;;N;;;;;\n14352;EGYPTIAN HIEROGLYPH-14352;Lo;0;L;;;;;N;;;;;\n14353;EGYPTIAN HIEROGLYPH-14353;Lo;0;L;;;;;N;;;;;\n14354;EGYPTIAN HIEROGLYPH-14354;Lo;0;L;;;;;N;;;;;\n14355;EGYPTIAN HIEROGLYPH-14355;Lo;0;L;;;;;N;;;;;\n14356;EGYPTIAN HIEROGLYPH-14356;Lo;0;L;;;;;N;;;;;\n14357;EGYPTIAN HIEROGLYPH-14357;Lo;0;L;;;;;N;;;;;\n14358;EGYPTIAN HIEROGLYPH-14358;Lo;0;L;;;;;N;;;;;\n14359;EGYPTIAN HIEROGLYPH-14359;Lo;0;L;;;;;N;;;;;\n1435A;EGYPTIAN HIEROGLYPH-1435A;Lo;0;L;;;;;N;;;;;\n1435B;EGYPTIAN HIEROGLYPH-1435B;Lo;0;L;;;;;N;;;;;\n1435C;EGYPTIAN HIEROGLYPH-1435C;Lo;0;L;;;;;N;;;;;\n1435D;EGYPTIAN HIEROGLYPH-1435D;Lo;0;L;;;;;N;;;;;\n1435E;EGYPTIAN HIEROGLYPH-1435E;Lo;0;L;;;;;N;;;;;\n1435F;EGYPTIAN HIEROGLYPH-1435F;Lo;0;L;;;;;N;;;;;\n14360;EGYPTIAN HIEROGLYPH-14360;Lo;0;L;;;;;N;;;;;\n14361;EGYPTIAN HIEROGLYPH-14361;Lo;0;L;;;;;N;;;;;\n14362;EGYPTIAN HIEROGLYPH-14362;Lo;0;L;;;;;N;;;;;\n14363;EGYPTIAN HIEROGLYPH-14363;Lo;0;L;;;;;N;;;;;\n14364;EGYPTIAN HIEROGLYPH-14364;Lo;0;L;;;;;N;;;;;\n14365;EGYPTIAN HIEROGLYPH-14365;Lo;0;L;;;;;N;;;;;\n14366;EGYPTIAN HIEROGLYPH-14366;Lo;0;L;;;;;N;;;;;\n14367;EGYPTIAN HIEROGLYPH-14367;Lo;0;L;;;;;N;;;;;\n14368;EGYPTIAN HIEROGLYPH-14368;Lo;0;L;;;;;N;;;;;\n14369;EGYPTIAN HIEROGLYPH-14369;Lo;0;L;;;;;N;;;;;\n1436A;EGYPTIAN HIEROGLYPH-1436A;Lo;0;L;;;;;N;;;;;\n1436B;EGYPTIAN HIEROGLYPH-1436B;Lo;0;L;;;;;N;;;;;\n1436C;EGYPTIAN HIEROGLYPH-1436C;Lo;0;L;;;;;N;;;;;\n1436D;EGYPTIAN HIEROGLYPH-1436D;Lo;0;L;;;;;N;;;;;\n1436E;EGYPTIAN HIEROGLYPH-1436E;Lo;0;L;;;;;N;;;;;\n1436F;EGYPTIAN HIEROGLYPH-1436F;Lo;0;L;;;;;N;;;;;\n14370;EGYPTIAN HIEROGLYPH-14370;Lo;0;L;;;;;N;;;;;\n14371;EGYPTIAN HIEROGLYPH-14371;Lo;0;L;;;;;N;;;;;\n14372;EGYPTIAN HIEROGLYPH-14372;Lo;0;L;;;;;N;;;;;\n14373;EGYPTIAN HIEROGLYPH-14373;Lo;0;L;;;;;N;;;;;\n14374;EGYPTIAN HIEROGLYPH-14374;Lo;0;L;;;;;N;;;;;\n14375;EGYPTIAN HIEROGLYPH-14375;Lo;0;L;;;;;N;;;;;\n14376;EGYPTIAN HIEROGLYPH-14376;Lo;0;L;;;;;N;;;;;\n14377;EGYPTIAN HIEROGLYPH-14377;Lo;0;L;;;;;N;;;;;\n14378;EGYPTIAN HIEROGLYPH-14378;Lo;0;L;;;;;N;;;;;\n14379;EGYPTIAN HIEROGLYPH-14379;Lo;0;L;;;;;N;;;;;\n1437A;EGYPTIAN HIEROGLYPH-1437A;Lo;0;L;;;;;N;;;;;\n1437B;EGYPTIAN HIEROGLYPH-1437B;Lo;0;L;;;;;N;;;;;\n1437C;EGYPTIAN HIEROGLYPH-1437C;Lo;0;L;;;;;N;;;;;\n1437D;EGYPTIAN HIEROGLYPH-1437D;Lo;0;L;;;;;N;;;;;\n1437E;EGYPTIAN HIEROGLYPH-1437E;Lo;0;L;;;;;N;;;;;\n1437F;EGYPTIAN HIEROGLYPH-1437F;Lo;0;L;;;;;N;;;;;\n14380;EGYPTIAN HIEROGLYPH-14380;Lo;0;L;;;;;N;;;;;\n14381;EGYPTIAN HIEROGLYPH-14381;Lo;0;L;;;;;N;;;;;\n14382;EGYPTIAN HIEROGLYPH-14382;Lo;0;L;;;;;N;;;;;\n14383;EGYPTIAN HIEROGLYPH-14383;Lo;0;L;;;;;N;;;;;\n14384;EGYPTIAN HIEROGLYPH-14384;Lo;0;L;;;;;N;;;;;\n14385;EGYPTIAN HIEROGLYPH-14385;Lo;0;L;;;;;N;;;;;\n14386;EGYPTIAN HIEROGLYPH-14386;Lo;0;L;;;;;N;;;;;\n14387;EGYPTIAN HIEROGLYPH-14387;Lo;0;L;;;;;N;;;;;\n14388;EGYPTIAN HIEROGLYPH-14388;Lo;0;L;;;;;N;;;;;\n14389;EGYPTIAN HIEROGLYPH-14389;Lo;0;L;;;;;N;;;;;\n1438A;EGYPTIAN HIEROGLYPH-1438A;Lo;0;L;;;;;N;;;;;\n1438B;EGYPTIAN HIEROGLYPH-1438B;Lo;0;L;;;;;N;;;;;\n1438C;EGYPTIAN HIEROGLYPH-1438C;Lo;0;L;;;;;N;;;;;\n1438D;EGYPTIAN HIEROGLYPH-1438D;Lo;0;L;;;;;N;;;;;\n1438E;EGYPTIAN HIEROGLYPH-1438E;Lo;0;L;;;;;N;;;;;\n1438F;EGYPTIAN HIEROGLYPH-1438F;Lo;0;L;;;;;N;;;;;\n14390;EGYPTIAN HIEROGLYPH-14390;Lo;0;L;;;;;N;;;;;\n14391;EGYPTIAN HIEROGLYPH-14391;Lo;0;L;;;;;N;;;;;\n14392;EGYPTIAN HIEROGLYPH-14392;Lo;0;L;;;;;N;;;;;\n14393;EGYPTIAN HIEROGLYPH-14393;Lo;0;L;;;;;N;;;;;\n14394;EGYPTIAN HIEROGLYPH-14394;Lo;0;L;;;;;N;;;;;\n14395;EGYPTIAN HIEROGLYPH-14395;Lo;0;L;;;;;N;;;;;\n14396;EGYPTIAN HIEROGLYPH-14396;Lo;0;L;;;;;N;;;;;\n14397;EGYPTIAN HIEROGLYPH-14397;Lo;0;L;;;;;N;;;;;\n14398;EGYPTIAN HIEROGLYPH-14398;Lo;0;L;;;;;N;;;;;\n14399;EGYPTIAN HIEROGLYPH-14399;Lo;0;L;;;;;N;;;;;\n1439A;EGYPTIAN HIEROGLYPH-1439A;Lo;0;L;;;;;N;;;;;\n1439B;EGYPTIAN HIEROGLYPH-1439B;Lo;0;L;;;;;N;;;;;\n1439C;EGYPTIAN HIEROGLYPH-1439C;Lo;0;L;;;;;N;;;;;\n1439D;EGYPTIAN HIEROGLYPH-1439D;Lo;0;L;;;;;N;;;;;\n1439E;EGYPTIAN HIEROGLYPH-1439E;Lo;0;L;;;;;N;;;;;\n1439F;EGYPTIAN HIEROGLYPH-1439F;Lo;0;L;;;;;N;;;;;\n143A0;EGYPTIAN HIEROGLYPH-143A0;Lo;0;L;;;;;N;;;;;\n143A1;EGYPTIAN HIEROGLYPH-143A1;Lo;0;L;;;;;N;;;;;\n143A2;EGYPTIAN HIEROGLYPH-143A2;Lo;0;L;;;;;N;;;;;\n143A3;EGYPTIAN HIEROGLYPH-143A3;Lo;0;L;;;;;N;;;;;\n143A4;EGYPTIAN HIEROGLYPH-143A4;Lo;0;L;;;;;N;;;;;\n143A5;EGYPTIAN HIEROGLYPH-143A5;Lo;0;L;;;;;N;;;;;\n143A6;EGYPTIAN HIEROGLYPH-143A6;Lo;0;L;;;;;N;;;;;\n143A7;EGYPTIAN HIEROGLYPH-143A7;Lo;0;L;;;;;N;;;;;\n143A8;EGYPTIAN HIEROGLYPH-143A8;Lo;0;L;;;;;N;;;;;\n143A9;EGYPTIAN HIEROGLYPH-143A9;Lo;0;L;;;;;N;;;;;\n143AA;EGYPTIAN HIEROGLYPH-143AA;Lo;0;L;;;;;N;;;;;\n143AB;EGYPTIAN HIEROGLYPH-143AB;Lo;0;L;;;;;N;;;;;\n143AC;EGYPTIAN HIEROGLYPH-143AC;Lo;0;L;;;;;N;;;;;\n143AD;EGYPTIAN HIEROGLYPH-143AD;Lo;0;L;;;;;N;;;;;\n143AE;EGYPTIAN HIEROGLYPH-143AE;Lo;0;L;;;;;N;;;;;\n143AF;EGYPTIAN HIEROGLYPH-143AF;Lo;0;L;;;;;N;;;;;\n143B0;EGYPTIAN HIEROGLYPH-143B0;Lo;0;L;;;;;N;;;;;\n143B1;EGYPTIAN HIEROGLYPH-143B1;Lo;0;L;;;;;N;;;;;\n143B2;EGYPTIAN HIEROGLYPH-143B2;Lo;0;L;;;;;N;;;;;\n143B3;EGYPTIAN HIEROGLYPH-143B3;Lo;0;L;;;;;N;;;;;\n143B4;EGYPTIAN HIEROGLYPH-143B4;Lo;0;L;;;;;N;;;;;\n143B5;EGYPTIAN HIEROGLYPH-143B5;Lo;0;L;;;;;N;;;;;\n143B6;EGYPTIAN HIEROGLYPH-143B6;Lo;0;L;;;;;N;;;;;\n143B7;EGYPTIAN HIEROGLYPH-143B7;Lo;0;L;;;;;N;;;;;\n143B8;EGYPTIAN HIEROGLYPH-143B8;Lo;0;L;;;;;N;;;;;\n143B9;EGYPTIAN HIEROGLYPH-143B9;Lo;0;L;;;;;N;;;;;\n143BA;EGYPTIAN HIEROGLYPH-143BA;Lo;0;L;;;;;N;;;;;\n143BB;EGYPTIAN HIEROGLYPH-143BB;Lo;0;L;;;;;N;;;;;\n143BC;EGYPTIAN HIEROGLYPH-143BC;Lo;0;L;;;;;N;;;;;\n143BD;EGYPTIAN HIEROGLYPH-143BD;Lo;0;L;;;;;N;;;;;\n143BE;EGYPTIAN HIEROGLYPH-143BE;Lo;0;L;;;;;N;;;;;\n143BF;EGYPTIAN HIEROGLYPH-143BF;Lo;0;L;;;;;N;;;;;\n143C0;EGYPTIAN HIEROGLYPH-143C0;Lo;0;L;;;;;N;;;;;\n143C1;EGYPTIAN HIEROGLYPH-143C1;Lo;0;L;;;;;N;;;;;\n143C2;EGYPTIAN HIEROGLYPH-143C2;Lo;0;L;;;;;N;;;;;\n143C3;EGYPTIAN HIEROGLYPH-143C3;Lo;0;L;;;;;N;;;;;\n143C4;EGYPTIAN HIEROGLYPH-143C4;Lo;0;L;;;;;N;;;;;\n143C5;EGYPTIAN HIEROGLYPH-143C5;Lo;0;L;;;;;N;;;;;\n143C6;EGYPTIAN HIEROGLYPH-143C6;Lo;0;L;;;;;N;;;;;\n143C7;EGYPTIAN HIEROGLYPH-143C7;Lo;0;L;;;;;N;;;;;\n143C8;EGYPTIAN HIEROGLYPH-143C8;Lo;0;L;;;;;N;;;;;\n143C9;EGYPTIAN HIEROGLYPH-143C9;Lo;0;L;;;;;N;;;;;\n143CA;EGYPTIAN HIEROGLYPH-143CA;Lo;0;L;;;;;N;;;;;\n143CB;EGYPTIAN HIEROGLYPH-143CB;Lo;0;L;;;;;N;;;;;\n143CC;EGYPTIAN HIEROGLYPH-143CC;Lo;0;L;;;;;N;;;;;\n143CD;EGYPTIAN HIEROGLYPH-143CD;Lo;0;L;;;;;N;;;;;\n143CE;EGYPTIAN HIEROGLYPH-143CE;Lo;0;L;;;;;N;;;;;\n143CF;EGYPTIAN HIEROGLYPH-143CF;Lo;0;L;;;;;N;;;;;\n143D0;EGYPTIAN HIEROGLYPH-143D0;Lo;0;L;;;;;N;;;;;\n143D1;EGYPTIAN HIEROGLYPH-143D1;Lo;0;L;;;;;N;;;;;\n143D2;EGYPTIAN HIEROGLYPH-143D2;Lo;0;L;;;;;N;;;;;\n143D3;EGYPTIAN HIEROGLYPH-143D3;Lo;0;L;;;;;N;;;;;\n143D4;EGYPTIAN HIEROGLYPH-143D4;Lo;0;L;;;;;N;;;;;\n143D5;EGYPTIAN HIEROGLYPH-143D5;Lo;0;L;;;;;N;;;;;\n143D6;EGYPTIAN HIEROGLYPH-143D6;Lo;0;L;;;;;N;;;;;\n143D7;EGYPTIAN HIEROGLYPH-143D7;Lo;0;L;;;;;N;;;;;\n143D8;EGYPTIAN HIEROGLYPH-143D8;Lo;0;L;;;;;N;;;;;\n143D9;EGYPTIAN HIEROGLYPH-143D9;Lo;0;L;;;;;N;;;;;\n143DA;EGYPTIAN HIEROGLYPH-143DA;Lo;0;L;;;;;N;;;;;\n143DB;EGYPTIAN HIEROGLYPH-143DB;Lo;0;L;;;;;N;;;;;\n143DC;EGYPTIAN HIEROGLYPH-143DC;Lo;0;L;;;;;N;;;;;\n143DD;EGYPTIAN HIEROGLYPH-143DD;Lo;0;L;;;;;N;;;;;\n143DE;EGYPTIAN HIEROGLYPH-143DE;Lo;0;L;;;;;N;;;;;\n143DF;EGYPTIAN HIEROGLYPH-143DF;Lo;0;L;;;;;N;;;;;\n143E0;EGYPTIAN HIEROGLYPH-143E0;Lo;0;L;;;;;N;;;;;\n143E1;EGYPTIAN HIEROGLYPH-143E1;Lo;0;L;;;;;N;;;;;\n143E2;EGYPTIAN HIEROGLYPH-143E2;Lo;0;L;;;;;N;;;;;\n143E3;EGYPTIAN HIEROGLYPH-143E3;Lo;0;L;;;;;N;;;;;\n143E4;EGYPTIAN HIEROGLYPH-143E4;Lo;0;L;;;;;N;;;;;\n143E5;EGYPTIAN HIEROGLYPH-143E5;Lo;0;L;;;;;N;;;;;\n143E6;EGYPTIAN HIEROGLYPH-143E6;Lo;0;L;;;;;N;;;;;\n143E7;EGYPTIAN HIEROGLYPH-143E7;Lo;0;L;;;;;N;;;;;\n143E8;EGYPTIAN HIEROGLYPH-143E8;Lo;0;L;;;;;N;;;;;\n143E9;EGYPTIAN HIEROGLYPH-143E9;Lo;0;L;;;;;N;;;;;\n143EA;EGYPTIAN HIEROGLYPH-143EA;Lo;0;L;;;;;N;;;;;\n143EB;EGYPTIAN HIEROGLYPH-143EB;Lo;0;L;;;;;N;;;;;\n143EC;EGYPTIAN HIEROGLYPH-143EC;Lo;0;L;;;;;N;;;;;\n143ED;EGYPTIAN HIEROGLYPH-143ED;Lo;0;L;;;;;N;;;;;\n143EE;EGYPTIAN HIEROGLYPH-143EE;Lo;0;L;;;;;N;;;;;\n143EF;EGYPTIAN HIEROGLYPH-143EF;Lo;0;L;;;;;N;;;;;\n143F0;EGYPTIAN HIEROGLYPH-143F0;Lo;0;L;;;;;N;;;;;\n143F1;EGYPTIAN HIEROGLYPH-143F1;Lo;0;L;;;;;N;;;;;\n143F2;EGYPTIAN HIEROGLYPH-143F2;Lo;0;L;;;;;N;;;;;\n143F3;EGYPTIAN HIEROGLYPH-143F3;Lo;0;L;;;;;N;;;;;\n143F4;EGYPTIAN HIEROGLYPH-143F4;Lo;0;L;;;;;N;;;;;\n143F5;EGYPTIAN HIEROGLYPH-143F5;Lo;0;L;;;;;N;;;;;\n143F6;EGYPTIAN HIEROGLYPH-143F6;Lo;0;L;;;;;N;;;;;\n143F7;EGYPTIAN HIEROGLYPH-143F7;Lo;0;L;;;;;N;;;;;\n143F8;EGYPTIAN HIEROGLYPH-143F8;Lo;0;L;;;;;N;;;;;\n143F9;EGYPTIAN HIEROGLYPH-143F9;Lo;0;L;;;;;N;;;;;\n143FA;EGYPTIAN HIEROGLYPH-143FA;Lo;0;L;;;;;N;;;;;\n14400;ANATOLIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;;\n14401;ANATOLIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;;\n14402;ANATOLIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;;\n14403;ANATOLIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;;\n14404;ANATOLIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;;\n14405;ANATOLIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;;\n14406;ANATOLIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;;\n14407;ANATOLIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;;\n14408;ANATOLIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;;\n14409;ANATOLIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;;\n1440A;ANATOLIAN HIEROGLYPH A010A;Lo;0;L;;;;;N;;;;;\n1440B;ANATOLIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;;\n1440C;ANATOLIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;;\n1440D;ANATOLIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;;\n1440E;ANATOLIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;;\n1440F;ANATOLIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;;\n14410;ANATOLIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;;\n14411;ANATOLIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;;\n14412;ANATOLIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;;\n14413;ANATOLIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;;\n14414;ANATOLIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;;\n14415;ANATOLIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;;\n14416;ANATOLIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;;\n14417;ANATOLIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;;\n14418;ANATOLIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;;\n14419;ANATOLIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;;\n1441A;ANATOLIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;;\n1441B;ANATOLIAN HIEROGLYPH A026A;Lo;0;L;;;;;N;;;;;\n1441C;ANATOLIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;;\n1441D;ANATOLIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;;\n1441E;ANATOLIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;;\n1441F;ANATOLIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;;\n14420;ANATOLIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;;\n14421;ANATOLIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;;\n14422;ANATOLIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;;\n14423;ANATOLIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;;\n14424;ANATOLIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;;\n14425;ANATOLIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;;\n14426;ANATOLIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;;\n14427;ANATOLIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;;\n14428;ANATOLIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;;\n14429;ANATOLIAN HIEROGLYPH A039A;Lo;0;L;;;;;N;;;;;\n1442A;ANATOLIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;;\n1442B;ANATOLIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;;\n1442C;ANATOLIAN HIEROGLYPH A041A;Lo;0;L;;;;;N;;;;;\n1442D;ANATOLIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;;\n1442E;ANATOLIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;;\n1442F;ANATOLIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;;\n14430;ANATOLIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;;\n14431;ANATOLIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;;\n14432;ANATOLIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;;\n14433;ANATOLIAN HIEROGLYPH A046A;Lo;0;L;;;;;N;;;;;\n14434;ANATOLIAN HIEROGLYPH A046B;Lo;0;L;;;;;N;;;;;\n14435;ANATOLIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;;\n14436;ANATOLIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;;\n14437;ANATOLIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;;\n14438;ANATOLIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;;\n14439;ANATOLIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;;\n1443A;ANATOLIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;;\n1443B;ANATOLIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;;\n1443C;ANATOLIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;;\n1443D;ANATOLIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;;\n1443E;ANATOLIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;;\n1443F;ANATOLIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;;\n14440;ANATOLIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;;\n14441;ANATOLIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;;\n14442;ANATOLIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;;\n14443;ANATOLIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;;\n14444;ANATOLIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;;\n14445;ANATOLIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;;\n14446;ANATOLIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;;\n14447;ANATOLIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;;\n14448;ANATOLIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;;\n14449;ANATOLIAN HIEROGLYPH A066A;Lo;0;L;;;;;N;;;;;\n1444A;ANATOLIAN HIEROGLYPH A066B;Lo;0;L;;;;;N;;;;;\n1444B;ANATOLIAN HIEROGLYPH A066C;Lo;0;L;;;;;N;;;;;\n1444C;ANATOLIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;;\n1444D;ANATOLIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;;\n1444E;ANATOLIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;;\n1444F;ANATOLIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;;\n14450;ANATOLIAN HIEROGLYPH A071;Lo;0;L;;;;;N;;;;;\n14451;ANATOLIAN HIEROGLYPH A072;Lo;0;L;;;;;N;;;;;\n14452;ANATOLIAN HIEROGLYPH A073;Lo;0;L;;;;;N;;;;;\n14453;ANATOLIAN HIEROGLYPH A074;Lo;0;L;;;;;N;;;;;\n14454;ANATOLIAN HIEROGLYPH A075;Lo;0;L;;;;;N;;;;;\n14455;ANATOLIAN HIEROGLYPH A076;Lo;0;L;;;;;N;;;;;\n14456;ANATOLIAN HIEROGLYPH A077;Lo;0;L;;;;;N;;;;;\n14457;ANATOLIAN HIEROGLYPH A078;Lo;0;L;;;;;N;;;;;\n14458;ANATOLIAN HIEROGLYPH A079;Lo;0;L;;;;;N;;;;;\n14459;ANATOLIAN HIEROGLYPH A080;Lo;0;L;;;;;N;;;;;\n1445A;ANATOLIAN HIEROGLYPH A081;Lo;0;L;;;;;N;;;;;\n1445B;ANATOLIAN HIEROGLYPH A082;Lo;0;L;;;;;N;;;;;\n1445C;ANATOLIAN HIEROGLYPH A083;Lo;0;L;;;;;N;;;;;\n1445D;ANATOLIAN HIEROGLYPH A084;Lo;0;L;;;;;N;;;;;\n1445E;ANATOLIAN HIEROGLYPH A085;Lo;0;L;;;;;N;;;;;\n1445F;ANATOLIAN HIEROGLYPH A086;Lo;0;L;;;;;N;;;;;\n14460;ANATOLIAN HIEROGLYPH A087;Lo;0;L;;;;;N;;;;;\n14461;ANATOLIAN HIEROGLYPH A088;Lo;0;L;;;;;N;;;;;\n14462;ANATOLIAN HIEROGLYPH A089;Lo;0;L;;;;;N;;;;;\n14463;ANATOLIAN HIEROGLYPH A090;Lo;0;L;;;;;N;;;;;\n14464;ANATOLIAN HIEROGLYPH A091;Lo;0;L;;;;;N;;;;;\n14465;ANATOLIAN HIEROGLYPH A092;Lo;0;L;;;;;N;;;;;\n14466;ANATOLIAN HIEROGLYPH A093;Lo;0;L;;;;;N;;;;;\n14467;ANATOLIAN HIEROGLYPH A094;Lo;0;L;;;;;N;;;;;\n14468;ANATOLIAN HIEROGLYPH A095;Lo;0;L;;;;;N;;;;;\n14469;ANATOLIAN HIEROGLYPH A096;Lo;0;L;;;;;N;;;;;\n1446A;ANATOLIAN HIEROGLYPH A097;Lo;0;L;;;;;N;;;;;\n1446B;ANATOLIAN HIEROGLYPH A097A;Lo;0;L;;;;;N;;;;;\n1446C;ANATOLIAN HIEROGLYPH A098;Lo;0;L;;;;;N;;;;;\n1446D;ANATOLIAN HIEROGLYPH A098A;Lo;0;L;;;;;N;;;;;\n1446E;ANATOLIAN HIEROGLYPH A099;Lo;0;L;;;;;N;;;;;\n1446F;ANATOLIAN HIEROGLYPH A100;Lo;0;L;;;;;N;;;;;\n14470;ANATOLIAN HIEROGLYPH A100A;Lo;0;L;;;;;N;;;;;\n14471;ANATOLIAN HIEROGLYPH A101;Lo;0;L;;;;;N;;;;;\n14472;ANATOLIAN HIEROGLYPH A101A;Lo;0;L;;;;;N;;;;;\n14473;ANATOLIAN HIEROGLYPH A102;Lo;0;L;;;;;N;;;;;\n14474;ANATOLIAN HIEROGLYPH A102A;Lo;0;L;;;;;N;;;;;\n14475;ANATOLIAN HIEROGLYPH A103;Lo;0;L;;;;;N;;;;;\n14476;ANATOLIAN HIEROGLYPH A104;Lo;0;L;;;;;N;;;;;\n14477;ANATOLIAN HIEROGLYPH A104A;Lo;0;L;;;;;N;;;;;\n14478;ANATOLIAN HIEROGLYPH A104B;Lo;0;L;;;;;N;;;;;\n14479;ANATOLIAN HIEROGLYPH A104C;Lo;0;L;;;;;N;;;;;\n1447A;ANATOLIAN HIEROGLYPH A105;Lo;0;L;;;;;N;;;;;\n1447B;ANATOLIAN HIEROGLYPH A105A;Lo;0;L;;;;;N;;;;;\n1447C;ANATOLIAN HIEROGLYPH A105B;Lo;0;L;;;;;N;;;;;\n1447D;ANATOLIAN HIEROGLYPH A106;Lo;0;L;;;;;N;;;;;\n1447E;ANATOLIAN HIEROGLYPH A107;Lo;0;L;;;;;N;;;;;\n1447F;ANATOLIAN HIEROGLYPH A107A;Lo;0;L;;;;;N;;;;;\n14480;ANATOLIAN HIEROGLYPH A107B;Lo;0;L;;;;;N;;;;;\n14481;ANATOLIAN HIEROGLYPH A107C;Lo;0;L;;;;;N;;;;;\n14482;ANATOLIAN HIEROGLYPH A108;Lo;0;L;;;;;N;;;;;\n14483;ANATOLIAN HIEROGLYPH A109;Lo;0;L;;;;;N;;;;;\n14484;ANATOLIAN HIEROGLYPH A110;Lo;0;L;;;;;N;;;;;\n14485;ANATOLIAN HIEROGLYPH A110A;Lo;0;L;;;;;N;;;;;\n14486;ANATOLIAN HIEROGLYPH A110B;Lo;0;L;;;;;N;;;;;\n14487;ANATOLIAN HIEROGLYPH A111;Lo;0;L;;;;;N;;;;;\n14488;ANATOLIAN HIEROGLYPH A112;Lo;0;L;;;;;N;;;;;\n14489;ANATOLIAN HIEROGLYPH A113;Lo;0;L;;;;;N;;;;;\n1448A;ANATOLIAN HIEROGLYPH A114;Lo;0;L;;;;;N;;;;;\n1448B;ANATOLIAN HIEROGLYPH A115;Lo;0;L;;;;;N;;;;;\n1448C;ANATOLIAN HIEROGLYPH A115A;Lo;0;L;;;;;N;;;;;\n1448D;ANATOLIAN HIEROGLYPH A116;Lo;0;L;;;;;N;;;;;\n1448E;ANATOLIAN HIEROGLYPH A117;Lo;0;L;;;;;N;;;;;\n1448F;ANATOLIAN HIEROGLYPH A118;Lo;0;L;;;;;N;;;;;\n14490;ANATOLIAN HIEROGLYPH A119;Lo;0;L;;;;;N;;;;;\n14491;ANATOLIAN HIEROGLYPH A120;Lo;0;L;;;;;N;;;;;\n14492;ANATOLIAN HIEROGLYPH A121;Lo;0;L;;;;;N;;;;;\n14493;ANATOLIAN HIEROGLYPH A122;Lo;0;L;;;;;N;;;;;\n14494;ANATOLIAN HIEROGLYPH A123;Lo;0;L;;;;;N;;;;;\n14495;ANATOLIAN HIEROGLYPH A124;Lo;0;L;;;;;N;;;;;\n14496;ANATOLIAN HIEROGLYPH A125;Lo;0;L;;;;;N;;;;;\n14497;ANATOLIAN HIEROGLYPH A125A;Lo;0;L;;;;;N;;;;;\n14498;ANATOLIAN HIEROGLYPH A126;Lo;0;L;;;;;N;;;;;\n14499;ANATOLIAN HIEROGLYPH A127;Lo;0;L;;;;;N;;;;;\n1449A;ANATOLIAN HIEROGLYPH A128;Lo;0;L;;;;;N;;;;;\n1449B;ANATOLIAN HIEROGLYPH A129;Lo;0;L;;;;;N;;;;;\n1449C;ANATOLIAN HIEROGLYPH A130;Lo;0;L;;;;;N;;;;;\n1449D;ANATOLIAN HIEROGLYPH A131;Lo;0;L;;;;;N;;;;;\n1449E;ANATOLIAN HIEROGLYPH A132;Lo;0;L;;;;;N;;;;;\n1449F;ANATOLIAN HIEROGLYPH A133;Lo;0;L;;;;;N;;;;;\n144A0;ANATOLIAN HIEROGLYPH A134;Lo;0;L;;;;;N;;;;;\n144A1;ANATOLIAN HIEROGLYPH A135;Lo;0;L;;;;;N;;;;;\n144A2;ANATOLIAN HIEROGLYPH A135A;Lo;0;L;;;;;N;;;;;\n144A3;ANATOLIAN HIEROGLYPH A136;Lo;0;L;;;;;N;;;;;\n144A4;ANATOLIAN HIEROGLYPH A137;Lo;0;L;;;;;N;;;;;\n144A5;ANATOLIAN HIEROGLYPH A138;Lo;0;L;;;;;N;;;;;\n144A6;ANATOLIAN HIEROGLYPH A139;Lo;0;L;;;;;N;;;;;\n144A7;ANATOLIAN HIEROGLYPH A140;Lo;0;L;;;;;N;;;;;\n144A8;ANATOLIAN HIEROGLYPH A141;Lo;0;L;;;;;N;;;;;\n144A9;ANATOLIAN HIEROGLYPH A142;Lo;0;L;;;;;N;;;;;\n144AA;ANATOLIAN HIEROGLYPH A143;Lo;0;L;;;;;N;;;;;\n144AB;ANATOLIAN HIEROGLYPH A144;Lo;0;L;;;;;N;;;;;\n144AC;ANATOLIAN HIEROGLYPH A145;Lo;0;L;;;;;N;;;;;\n144AD;ANATOLIAN HIEROGLYPH A146;Lo;0;L;;;;;N;;;;;\n144AE;ANATOLIAN HIEROGLYPH A147;Lo;0;L;;;;;N;;;;;\n144AF;ANATOLIAN HIEROGLYPH A148;Lo;0;L;;;;;N;;;;;\n144B0;ANATOLIAN HIEROGLYPH A149;Lo;0;L;;;;;N;;;;;\n144B1;ANATOLIAN HIEROGLYPH A150;Lo;0;L;;;;;N;;;;;\n144B2;ANATOLIAN HIEROGLYPH A151;Lo;0;L;;;;;N;;;;;\n144B3;ANATOLIAN HIEROGLYPH A152;Lo;0;L;;;;;N;;;;;\n144B4;ANATOLIAN HIEROGLYPH A153;Lo;0;L;;;;;N;;;;;\n144B5;ANATOLIAN HIEROGLYPH A154;Lo;0;L;;;;;N;;;;;\n144B6;ANATOLIAN HIEROGLYPH A155;Lo;0;L;;;;;N;;;;;\n144B7;ANATOLIAN HIEROGLYPH A156;Lo;0;L;;;;;N;;;;;\n144B8;ANATOLIAN HIEROGLYPH A157;Lo;0;L;;;;;N;;;;;\n144B9;ANATOLIAN HIEROGLYPH A158;Lo;0;L;;;;;N;;;;;\n144BA;ANATOLIAN HIEROGLYPH A159;Lo;0;L;;;;;N;;;;;\n144BB;ANATOLIAN HIEROGLYPH A160;Lo;0;L;;;;;N;;;;;\n144BC;ANATOLIAN HIEROGLYPH A161;Lo;0;L;;;;;N;;;;;\n144BD;ANATOLIAN HIEROGLYPH A162;Lo;0;L;;;;;N;;;;;\n144BE;ANATOLIAN HIEROGLYPH A163;Lo;0;L;;;;;N;;;;;\n144BF;ANATOLIAN HIEROGLYPH A164;Lo;0;L;;;;;N;;;;;\n144C0;ANATOLIAN HIEROGLYPH A165;Lo;0;L;;;;;N;;;;;\n144C1;ANATOLIAN HIEROGLYPH A166;Lo;0;L;;;;;N;;;;;\n144C2;ANATOLIAN HIEROGLYPH A167;Lo;0;L;;;;;N;;;;;\n144C3;ANATOLIAN HIEROGLYPH A168;Lo;0;L;;;;;N;;;;;\n144C4;ANATOLIAN HIEROGLYPH A169;Lo;0;L;;;;;N;;;;;\n144C5;ANATOLIAN HIEROGLYPH A170;Lo;0;L;;;;;N;;;;;\n144C6;ANATOLIAN HIEROGLYPH A171;Lo;0;L;;;;;N;;;;;\n144C7;ANATOLIAN HIEROGLYPH A172;Lo;0;L;;;;;N;;;;;\n144C8;ANATOLIAN HIEROGLYPH A173;Lo;0;L;;;;;N;;;;;\n144C9;ANATOLIAN HIEROGLYPH A174;Lo;0;L;;;;;N;;;;;\n144CA;ANATOLIAN HIEROGLYPH A175;Lo;0;L;;;;;N;;;;;\n144CB;ANATOLIAN HIEROGLYPH A176;Lo;0;L;;;;;N;;;;;\n144CC;ANATOLIAN HIEROGLYPH A177;Lo;0;L;;;;;N;;;;;\n144CD;ANATOLIAN HIEROGLYPH A178;Lo;0;L;;;;;N;;;;;\n144CE;ANATOLIAN HIEROGLYPH A179;Lo;0;L;;;;;N;;;;;\n144CF;ANATOLIAN HIEROGLYPH A180;Lo;0;L;;;;;N;;;;;\n144D0;ANATOLIAN HIEROGLYPH A181;Lo;0;L;;;;;N;;;;;\n144D1;ANATOLIAN HIEROGLYPH A182;Lo;0;L;;;;;N;;;;;\n144D2;ANATOLIAN HIEROGLYPH A183;Lo;0;L;;;;;N;;;;;\n144D3;ANATOLIAN HIEROGLYPH A184;Lo;0;L;;;;;N;;;;;\n144D4;ANATOLIAN HIEROGLYPH A185;Lo;0;L;;;;;N;;;;;\n144D5;ANATOLIAN HIEROGLYPH A186;Lo;0;L;;;;;N;;;;;\n144D6;ANATOLIAN HIEROGLYPH A187;Lo;0;L;;;;;N;;;;;\n144D7;ANATOLIAN HIEROGLYPH A188;Lo;0;L;;;;;N;;;;;\n144D8;ANATOLIAN HIEROGLYPH A189;Lo;0;L;;;;;N;;;;;\n144D9;ANATOLIAN HIEROGLYPH A190;Lo;0;L;;;;;N;;;;;\n144DA;ANATOLIAN HIEROGLYPH A191;Lo;0;L;;;;;N;;;;;\n144DB;ANATOLIAN HIEROGLYPH A192;Lo;0;L;;;;;N;;;;;\n144DC;ANATOLIAN HIEROGLYPH A193;Lo;0;L;;;;;N;;;;;\n144DD;ANATOLIAN HIEROGLYPH A194;Lo;0;L;;;;;N;;;;;\n144DE;ANATOLIAN HIEROGLYPH A195;Lo;0;L;;;;;N;;;;;\n144DF;ANATOLIAN HIEROGLYPH A196;Lo;0;L;;;;;N;;;;;\n144E0;ANATOLIAN HIEROGLYPH A197;Lo;0;L;;;;;N;;;;;\n144E1;ANATOLIAN HIEROGLYPH A198;Lo;0;L;;;;;N;;;;;\n144E2;ANATOLIAN HIEROGLYPH A199;Lo;0;L;;;;;N;;;;;\n144E3;ANATOLIAN HIEROGLYPH A200;Lo;0;L;;;;;N;;;;;\n144E4;ANATOLIAN HIEROGLYPH A201;Lo;0;L;;;;;N;;;;;\n144E5;ANATOLIAN HIEROGLYPH A202;Lo;0;L;;;;;N;;;;;\n144E6;ANATOLIAN HIEROGLYPH A202A;Lo;0;L;;;;;N;;;;;\n144E7;ANATOLIAN HIEROGLYPH A202B;Lo;0;L;;;;;N;;;;;\n144E8;ANATOLIAN HIEROGLYPH A203;Lo;0;L;;;;;N;;;;;\n144E9;ANATOLIAN HIEROGLYPH A204;Lo;0;L;;;;;N;;;;;\n144EA;ANATOLIAN HIEROGLYPH A205;Lo;0;L;;;;;N;;;;;\n144EB;ANATOLIAN HIEROGLYPH A206;Lo;0;L;;;;;N;;;;;\n144EC;ANATOLIAN HIEROGLYPH A207;Lo;0;L;;;;;N;;;;;\n144ED;ANATOLIAN HIEROGLYPH A207A;Lo;0;L;;;;;N;;;;;\n144EE;ANATOLIAN HIEROGLYPH A208;Lo;0;L;;;;;N;;;;;\n144EF;ANATOLIAN HIEROGLYPH A209;Lo;0;L;;;;;N;;;;;\n144F0;ANATOLIAN HIEROGLYPH A209A;Lo;0;L;;;;;N;;;;;\n144F1;ANATOLIAN HIEROGLYPH A210;Lo;0;L;;;;;N;;;;;\n144F2;ANATOLIAN HIEROGLYPH A211;Lo;0;L;;;;;N;;;;;\n144F3;ANATOLIAN HIEROGLYPH A212;Lo;0;L;;;;;N;;;;;\n144F4;ANATOLIAN HIEROGLYPH A213;Lo;0;L;;;;;N;;;;;\n144F5;ANATOLIAN HIEROGLYPH A214;Lo;0;L;;;;;N;;;;;\n144F6;ANATOLIAN HIEROGLYPH A215;Lo;0;L;;;;;N;;;;;\n144F7;ANATOLIAN HIEROGLYPH A215A;Lo;0;L;;;;;N;;;;;\n144F8;ANATOLIAN HIEROGLYPH A216;Lo;0;L;;;;;N;;;;;\n144F9;ANATOLIAN HIEROGLYPH A216A;Lo;0;L;;;;;N;;;;;\n144FA;ANATOLIAN HIEROGLYPH A217;Lo;0;L;;;;;N;;;;;\n144FB;ANATOLIAN HIEROGLYPH A218;Lo;0;L;;;;;N;;;;;\n144FC;ANATOLIAN HIEROGLYPH A219;Lo;0;L;;;;;N;;;;;\n144FD;ANATOLIAN HIEROGLYPH A220;Lo;0;L;;;;;N;;;;;\n144FE;ANATOLIAN HIEROGLYPH A221;Lo;0;L;;;;;N;;;;;\n144FF;ANATOLIAN HIEROGLYPH A222;Lo;0;L;;;;;N;;;;;\n14500;ANATOLIAN HIEROGLYPH A223;Lo;0;L;;;;;N;;;;;\n14501;ANATOLIAN HIEROGLYPH A224;Lo;0;L;;;;;N;;;;;\n14502;ANATOLIAN HIEROGLYPH A225;Lo;0;L;;;;;N;;;;;\n14503;ANATOLIAN HIEROGLYPH A226;Lo;0;L;;;;;N;;;;;\n14504;ANATOLIAN HIEROGLYPH A227;Lo;0;L;;;;;N;;;;;\n14505;ANATOLIAN HIEROGLYPH A227A;Lo;0;L;;;;;N;;;;;\n14506;ANATOLIAN HIEROGLYPH A228;Lo;0;L;;;;;N;;;;;\n14507;ANATOLIAN HIEROGLYPH A229;Lo;0;L;;;;;N;;;;;\n14508;ANATOLIAN HIEROGLYPH A230;Lo;0;L;;;;;N;;;;;\n14509;ANATOLIAN HIEROGLYPH A231;Lo;0;L;;;;;N;;;;;\n1450A;ANATOLIAN HIEROGLYPH A232;Lo;0;L;;;;;N;;;;;\n1450B;ANATOLIAN HIEROGLYPH A233;Lo;0;L;;;;;N;;;;;\n1450C;ANATOLIAN HIEROGLYPH A234;Lo;0;L;;;;;N;;;;;\n1450D;ANATOLIAN HIEROGLYPH A235;Lo;0;L;;;;;N;;;;;\n1450E;ANATOLIAN HIEROGLYPH A236;Lo;0;L;;;;;N;;;;;\n1450F;ANATOLIAN HIEROGLYPH A237;Lo;0;L;;;;;N;;;;;\n14510;ANATOLIAN HIEROGLYPH A238;Lo;0;L;;;;;N;;;;;\n14511;ANATOLIAN HIEROGLYPH A239;Lo;0;L;;;;;N;;;;;\n14512;ANATOLIAN HIEROGLYPH A240;Lo;0;L;;;;;N;;;;;\n14513;ANATOLIAN HIEROGLYPH A241;Lo;0;L;;;;;N;;;;;\n14514;ANATOLIAN HIEROGLYPH A242;Lo;0;L;;;;;N;;;;;\n14515;ANATOLIAN HIEROGLYPH A243;Lo;0;L;;;;;N;;;;;\n14516;ANATOLIAN HIEROGLYPH A244;Lo;0;L;;;;;N;;;;;\n14517;ANATOLIAN HIEROGLYPH A245;Lo;0;L;;;;;N;;;;;\n14518;ANATOLIAN HIEROGLYPH A246;Lo;0;L;;;;;N;;;;;\n14519;ANATOLIAN HIEROGLYPH A247;Lo;0;L;;;;;N;;;;;\n1451A;ANATOLIAN HIEROGLYPH A248;Lo;0;L;;;;;N;;;;;\n1451B;ANATOLIAN HIEROGLYPH A249;Lo;0;L;;;;;N;;;;;\n1451C;ANATOLIAN HIEROGLYPH A250;Lo;0;L;;;;;N;;;;;\n1451D;ANATOLIAN HIEROGLYPH A251;Lo;0;L;;;;;N;;;;;\n1451E;ANATOLIAN HIEROGLYPH A252;Lo;0;L;;;;;N;;;;;\n1451F;ANATOLIAN HIEROGLYPH A253;Lo;0;L;;;;;N;;;;;\n14520;ANATOLIAN HIEROGLYPH A254;Lo;0;L;;;;;N;;;;;\n14521;ANATOLIAN HIEROGLYPH A255;Lo;0;L;;;;;N;;;;;\n14522;ANATOLIAN HIEROGLYPH A256;Lo;0;L;;;;;N;;;;;\n14523;ANATOLIAN HIEROGLYPH A257;Lo;0;L;;;;;N;;;;;\n14524;ANATOLIAN HIEROGLYPH A258;Lo;0;L;;;;;N;;;;;\n14525;ANATOLIAN HIEROGLYPH A259;Lo;0;L;;;;;N;;;;;\n14526;ANATOLIAN HIEROGLYPH A260;Lo;0;L;;;;;N;;;;;\n14527;ANATOLIAN HIEROGLYPH A261;Lo;0;L;;;;;N;;;;;\n14528;ANATOLIAN HIEROGLYPH A262;Lo;0;L;;;;;N;;;;;\n14529;ANATOLIAN HIEROGLYPH A263;Lo;0;L;;;;;N;;;;;\n1452A;ANATOLIAN HIEROGLYPH A264;Lo;0;L;;;;;N;;;;;\n1452B;ANATOLIAN HIEROGLYPH A265;Lo;0;L;;;;;N;;;;;\n1452C;ANATOLIAN HIEROGLYPH A266;Lo;0;L;;;;;N;;;;;\n1452D;ANATOLIAN HIEROGLYPH A267;Lo;0;L;;;;;N;;;;;\n1452E;ANATOLIAN HIEROGLYPH A267A;Lo;0;L;;;;;N;;;;;\n1452F;ANATOLIAN HIEROGLYPH A268;Lo;0;L;;;;;N;;;;;\n14530;ANATOLIAN HIEROGLYPH A269;Lo;0;L;;;;;N;;;;;\n14531;ANATOLIAN HIEROGLYPH A270;Lo;0;L;;;;;N;;;;;\n14532;ANATOLIAN HIEROGLYPH A271;Lo;0;L;;;;;N;;;;;\n14533;ANATOLIAN HIEROGLYPH A272;Lo;0;L;;;;;N;;;;;\n14534;ANATOLIAN HIEROGLYPH A273;Lo;0;L;;;;;N;;;;;\n14535;ANATOLIAN HIEROGLYPH A274;Lo;0;L;;;;;N;;;;;\n14536;ANATOLIAN HIEROGLYPH A275;Lo;0;L;;;;;N;;;;;\n14537;ANATOLIAN HIEROGLYPH A276;Lo;0;L;;;;;N;;;;;\n14538;ANATOLIAN HIEROGLYPH A277;Lo;0;L;;;;;N;;;;;\n14539;ANATOLIAN HIEROGLYPH A278;Lo;0;L;;;;;N;;;;;\n1453A;ANATOLIAN HIEROGLYPH A279;Lo;0;L;;;;;N;;;;;\n1453B;ANATOLIAN HIEROGLYPH A280;Lo;0;L;;;;;N;;;;;\n1453C;ANATOLIAN HIEROGLYPH A281;Lo;0;L;;;;;N;;;;;\n1453D;ANATOLIAN HIEROGLYPH A282;Lo;0;L;;;;;N;;;;;\n1453E;ANATOLIAN HIEROGLYPH A283;Lo;0;L;;;;;N;;;;;\n1453F;ANATOLIAN HIEROGLYPH A284;Lo;0;L;;;;;N;;;;;\n14540;ANATOLIAN HIEROGLYPH A285;Lo;0;L;;;;;N;;;;;\n14541;ANATOLIAN HIEROGLYPH A286;Lo;0;L;;;;;N;;;;;\n14542;ANATOLIAN HIEROGLYPH A287;Lo;0;L;;;;;N;;;;;\n14543;ANATOLIAN HIEROGLYPH A288;Lo;0;L;;;;;N;;;;;\n14544;ANATOLIAN HIEROGLYPH A289;Lo;0;L;;;;;N;;;;;\n14545;ANATOLIAN HIEROGLYPH A289A;Lo;0;L;;;;;N;;;;;\n14546;ANATOLIAN HIEROGLYPH A290;Lo;0;L;;;;;N;;;;;\n14547;ANATOLIAN HIEROGLYPH A291;Lo;0;L;;;;;N;;;;;\n14548;ANATOLIAN HIEROGLYPH A292;Lo;0;L;;;;;N;;;;;\n14549;ANATOLIAN HIEROGLYPH A293;Lo;0;L;;;;;N;;;;;\n1454A;ANATOLIAN HIEROGLYPH A294;Lo;0;L;;;;;N;;;;;\n1454B;ANATOLIAN HIEROGLYPH A294A;Lo;0;L;;;;;N;;;;;\n1454C;ANATOLIAN HIEROGLYPH A295;Lo;0;L;;;;;N;;;;;\n1454D;ANATOLIAN HIEROGLYPH A296;Lo;0;L;;;;;N;;;;;\n1454E;ANATOLIAN HIEROGLYPH A297;Lo;0;L;;;;;N;;;;;\n1454F;ANATOLIAN HIEROGLYPH A298;Lo;0;L;;;;;N;;;;;\n14550;ANATOLIAN HIEROGLYPH A299;Lo;0;L;;;;;N;;;;;\n14551;ANATOLIAN HIEROGLYPH A299A;Lo;0;L;;;;;N;;;;;\n14552;ANATOLIAN HIEROGLYPH A300;Lo;0;L;;;;;N;;;;;\n14553;ANATOLIAN HIEROGLYPH A301;Lo;0;L;;;;;N;;;;;\n14554;ANATOLIAN HIEROGLYPH A302;Lo;0;L;;;;;N;;;;;\n14555;ANATOLIAN HIEROGLYPH A303;Lo;0;L;;;;;N;;;;;\n14556;ANATOLIAN HIEROGLYPH A304;Lo;0;L;;;;;N;;;;;\n14557;ANATOLIAN HIEROGLYPH A305;Lo;0;L;;;;;N;;;;;\n14558;ANATOLIAN HIEROGLYPH A306;Lo;0;L;;;;;N;;;;;\n14559;ANATOLIAN HIEROGLYPH A307;Lo;0;L;;;;;N;;;;;\n1455A;ANATOLIAN HIEROGLYPH A308;Lo;0;L;;;;;N;;;;;\n1455B;ANATOLIAN HIEROGLYPH A309;Lo;0;L;;;;;N;;;;;\n1455C;ANATOLIAN HIEROGLYPH A309A;Lo;0;L;;;;;N;;;;;\n1455D;ANATOLIAN HIEROGLYPH A310;Lo;0;L;;;;;N;;;;;\n1455E;ANATOLIAN HIEROGLYPH A311;Lo;0;L;;;;;N;;;;;\n1455F;ANATOLIAN HIEROGLYPH A312;Lo;0;L;;;;;N;;;;;\n14560;ANATOLIAN HIEROGLYPH A313;Lo;0;L;;;;;N;;;;;\n14561;ANATOLIAN HIEROGLYPH A314;Lo;0;L;;;;;N;;;;;\n14562;ANATOLIAN HIEROGLYPH A315;Lo;0;L;;;;;N;;;;;\n14563;ANATOLIAN HIEROGLYPH A316;Lo;0;L;;;;;N;;;;;\n14564;ANATOLIAN HIEROGLYPH A317;Lo;0;L;;;;;N;;;;;\n14565;ANATOLIAN HIEROGLYPH A318;Lo;0;L;;;;;N;;;;;\n14566;ANATOLIAN HIEROGLYPH A319;Lo;0;L;;;;;N;;;;;\n14567;ANATOLIAN HIEROGLYPH A320;Lo;0;L;;;;;N;;;;;\n14568;ANATOLIAN HIEROGLYPH A321;Lo;0;L;;;;;N;;;;;\n14569;ANATOLIAN HIEROGLYPH A322;Lo;0;L;;;;;N;;;;;\n1456A;ANATOLIAN HIEROGLYPH A323;Lo;0;L;;;;;N;;;;;\n1456B;ANATOLIAN HIEROGLYPH A324;Lo;0;L;;;;;N;;;;;\n1456C;ANATOLIAN HIEROGLYPH A325;Lo;0;L;;;;;N;;;;;\n1456D;ANATOLIAN HIEROGLYPH A326;Lo;0;L;;;;;N;;;;;\n1456E;ANATOLIAN HIEROGLYPH A327;Lo;0;L;;;;;N;;;;;\n1456F;ANATOLIAN HIEROGLYPH A328;Lo;0;L;;;;;N;;;;;\n14570;ANATOLIAN HIEROGLYPH A329;Lo;0;L;;;;;N;;;;;\n14571;ANATOLIAN HIEROGLYPH A329A;Lo;0;L;;;;;N;;;;;\n14572;ANATOLIAN HIEROGLYPH A330;Lo;0;L;;;;;N;;;;;\n14573;ANATOLIAN HIEROGLYPH A331;Lo;0;L;;;;;N;;;;;\n14574;ANATOLIAN HIEROGLYPH A332A;Lo;0;L;;;;;N;;;;;\n14575;ANATOLIAN HIEROGLYPH A332B;Lo;0;L;;;;;N;;;;;\n14576;ANATOLIAN HIEROGLYPH A332C;Lo;0;L;;;;;N;;;;;\n14577;ANATOLIAN HIEROGLYPH A333;Lo;0;L;;;;;N;;;;;\n14578;ANATOLIAN HIEROGLYPH A334;Lo;0;L;;;;;N;;;;;\n14579;ANATOLIAN HIEROGLYPH A335;Lo;0;L;;;;;N;;;;;\n1457A;ANATOLIAN HIEROGLYPH A336;Lo;0;L;;;;;N;;;;;\n1457B;ANATOLIAN HIEROGLYPH A336A;Lo;0;L;;;;;N;;;;;\n1457C;ANATOLIAN HIEROGLYPH A336B;Lo;0;L;;;;;N;;;;;\n1457D;ANATOLIAN HIEROGLYPH A336C;Lo;0;L;;;;;N;;;;;\n1457E;ANATOLIAN HIEROGLYPH A337;Lo;0;L;;;;;N;;;;;\n1457F;ANATOLIAN HIEROGLYPH A338;Lo;0;L;;;;;N;;;;;\n14580;ANATOLIAN HIEROGLYPH A339;Lo;0;L;;;;;N;;;;;\n14581;ANATOLIAN HIEROGLYPH A340;Lo;0;L;;;;;N;;;;;\n14582;ANATOLIAN HIEROGLYPH A341;Lo;0;L;;;;;N;;;;;\n14583;ANATOLIAN HIEROGLYPH A342;Lo;0;L;;;;;N;;;;;\n14584;ANATOLIAN HIEROGLYPH A343;Lo;0;L;;;;;N;;;;;\n14585;ANATOLIAN HIEROGLYPH A344;Lo;0;L;;;;;N;;;;;\n14586;ANATOLIAN HIEROGLYPH A345;Lo;0;L;;;;;N;;;;;\n14587;ANATOLIAN HIEROGLYPH A346;Lo;0;L;;;;;N;;;;;\n14588;ANATOLIAN HIEROGLYPH A347;Lo;0;L;;;;;N;;;;;\n14589;ANATOLIAN HIEROGLYPH A348;Lo;0;L;;;;;N;;;;;\n1458A;ANATOLIAN HIEROGLYPH A349;Lo;0;L;;;;;N;;;;;\n1458B;ANATOLIAN HIEROGLYPH A350;Lo;0;L;;;;;N;;;;;\n1458C;ANATOLIAN HIEROGLYPH A351;Lo;0;L;;;;;N;;;;;\n1458D;ANATOLIAN HIEROGLYPH A352;Lo;0;L;;;;;N;;;;;\n1458E;ANATOLIAN HIEROGLYPH A353;Lo;0;L;;;;;N;;;;;\n1458F;ANATOLIAN HIEROGLYPH A354;Lo;0;L;;;;;N;;;;;\n14590;ANATOLIAN HIEROGLYPH A355;Lo;0;L;;;;;N;;;;;\n14591;ANATOLIAN HIEROGLYPH A356;Lo;0;L;;;;;N;;;;;\n14592;ANATOLIAN HIEROGLYPH A357;Lo;0;L;;;;;N;;;;;\n14593;ANATOLIAN HIEROGLYPH A358;Lo;0;L;;;;;N;;;;;\n14594;ANATOLIAN HIEROGLYPH A359;Lo;0;L;;;;;N;;;;;\n14595;ANATOLIAN HIEROGLYPH A359A;Lo;0;L;;;;;N;;;;;\n14596;ANATOLIAN HIEROGLYPH A360;Lo;0;L;;;;;N;;;;;\n14597;ANATOLIAN HIEROGLYPH A361;Lo;0;L;;;;;N;;;;;\n14598;ANATOLIAN HIEROGLYPH A362;Lo;0;L;;;;;N;;;;;\n14599;ANATOLIAN HIEROGLYPH A363;Lo;0;L;;;;;N;;;;;\n1459A;ANATOLIAN HIEROGLYPH A364;Lo;0;L;;;;;N;;;;;\n1459B;ANATOLIAN HIEROGLYPH A364A;Lo;0;L;;;;;N;;;;;\n1459C;ANATOLIAN HIEROGLYPH A365;Lo;0;L;;;;;N;;;;;\n1459D;ANATOLIAN HIEROGLYPH A366;Lo;0;L;;;;;N;;;;;\n1459E;ANATOLIAN HIEROGLYPH A367;Lo;0;L;;;;;N;;;;;\n1459F;ANATOLIAN HIEROGLYPH A368;Lo;0;L;;;;;N;;;;;\n145A0;ANATOLIAN HIEROGLYPH A368A;Lo;0;L;;;;;N;;;;;\n145A1;ANATOLIAN HIEROGLYPH A369;Lo;0;L;;;;;N;;;;;\n145A2;ANATOLIAN HIEROGLYPH A370;Lo;0;L;;;;;N;;;;;\n145A3;ANATOLIAN HIEROGLYPH A371;Lo;0;L;;;;;N;;;;;\n145A4;ANATOLIAN HIEROGLYPH A371A;Lo;0;L;;;;;N;;;;;\n145A5;ANATOLIAN HIEROGLYPH A372;Lo;0;L;;;;;N;;;;;\n145A6;ANATOLIAN HIEROGLYPH A373;Lo;0;L;;;;;N;;;;;\n145A7;ANATOLIAN HIEROGLYPH A374;Lo;0;L;;;;;N;;;;;\n145A8;ANATOLIAN HIEROGLYPH A375;Lo;0;L;;;;;N;;;;;\n145A9;ANATOLIAN HIEROGLYPH A376;Lo;0;L;;;;;N;;;;;\n145AA;ANATOLIAN HIEROGLYPH A377;Lo;0;L;;;;;N;;;;;\n145AB;ANATOLIAN HIEROGLYPH A378;Lo;0;L;;;;;N;;;;;\n145AC;ANATOLIAN HIEROGLYPH A379;Lo;0;L;;;;;N;;;;;\n145AD;ANATOLIAN HIEROGLYPH A380;Lo;0;L;;;;;N;;;;;\n145AE;ANATOLIAN HIEROGLYPH A381;Lo;0;L;;;;;N;;;;;\n145AF;ANATOLIAN HIEROGLYPH A381A;Lo;0;L;;;;;N;;;;;\n145B0;ANATOLIAN HIEROGLYPH A382;Lo;0;L;;;;;N;;;;;\n145B1;ANATOLIAN HIEROGLYPH A383 RA OR RI;Lo;0;L;;;;;N;;;;;\n145B2;ANATOLIAN HIEROGLYPH A383A;Lo;0;L;;;;;N;;;;;\n145B3;ANATOLIAN HIEROGLYPH A384;Lo;0;L;;;;;N;;;;;\n145B4;ANATOLIAN HIEROGLYPH A385;Lo;0;L;;;;;N;;;;;\n145B5;ANATOLIAN HIEROGLYPH A386;Lo;0;L;;;;;N;;;;;\n145B6;ANATOLIAN HIEROGLYPH A386A;Lo;0;L;;;;;N;;;;;\n145B7;ANATOLIAN HIEROGLYPH A387;Lo;0;L;;;;;N;;;;;\n145B8;ANATOLIAN HIEROGLYPH A388;Lo;0;L;;;;;N;;;;;\n145B9;ANATOLIAN HIEROGLYPH A389;Lo;0;L;;;;;N;;;;;\n145BA;ANATOLIAN HIEROGLYPH A390;Lo;0;L;;;;;N;;;;;\n145BB;ANATOLIAN HIEROGLYPH A391;Lo;0;L;;;;;N;;;;;\n145BC;ANATOLIAN HIEROGLYPH A392;Lo;0;L;;;;;N;;;;;\n145BD;ANATOLIAN HIEROGLYPH A393 EIGHT;Lo;0;L;;;;;N;;;;;\n145BE;ANATOLIAN HIEROGLYPH A394;Lo;0;L;;;;;N;;;;;\n145BF;ANATOLIAN HIEROGLYPH A395;Lo;0;L;;;;;N;;;;;\n145C0;ANATOLIAN HIEROGLYPH A396;Lo;0;L;;;;;N;;;;;\n145C1;ANATOLIAN HIEROGLYPH A397;Lo;0;L;;;;;N;;;;;\n145C2;ANATOLIAN HIEROGLYPH A398;Lo;0;L;;;;;N;;;;;\n145C3;ANATOLIAN HIEROGLYPH A399;Lo;0;L;;;;;N;;;;;\n145C4;ANATOLIAN HIEROGLYPH A400;Lo;0;L;;;;;N;;;;;\n145C5;ANATOLIAN HIEROGLYPH A401;Lo;0;L;;;;;N;;;;;\n145C6;ANATOLIAN HIEROGLYPH A402;Lo;0;L;;;;;N;;;;;\n145C7;ANATOLIAN HIEROGLYPH A403;Lo;0;L;;;;;N;;;;;\n145C8;ANATOLIAN HIEROGLYPH A404;Lo;0;L;;;;;N;;;;;\n145C9;ANATOLIAN HIEROGLYPH A405;Lo;0;L;;;;;N;;;;;\n145CA;ANATOLIAN HIEROGLYPH A406;Lo;0;L;;;;;N;;;;;\n145CB;ANATOLIAN HIEROGLYPH A407;Lo;0;L;;;;;N;;;;;\n145CC;ANATOLIAN HIEROGLYPH A408;Lo;0;L;;;;;N;;;;;\n145CD;ANATOLIAN HIEROGLYPH A409;Lo;0;L;;;;;N;;;;;\n145CE;ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK;Lo;0;L;;;;;N;;;;;\n145CF;ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK;Lo;0;L;;;;;N;;;;;\n145D0;ANATOLIAN HIEROGLYPH A411;Lo;0;L;;;;;N;;;;;\n145D1;ANATOLIAN HIEROGLYPH A412;Lo;0;L;;;;;N;;;;;\n145D2;ANATOLIAN HIEROGLYPH A413;Lo;0;L;;;;;N;;;;;\n145D3;ANATOLIAN HIEROGLYPH A414;Lo;0;L;;;;;N;;;;;\n145D4;ANATOLIAN HIEROGLYPH A415;Lo;0;L;;;;;N;;;;;\n145D5;ANATOLIAN HIEROGLYPH A416;Lo;0;L;;;;;N;;;;;\n145D6;ANATOLIAN HIEROGLYPH A417;Lo;0;L;;;;;N;;;;;\n145D7;ANATOLIAN HIEROGLYPH A418;Lo;0;L;;;;;N;;;;;\n145D8;ANATOLIAN HIEROGLYPH A419;Lo;0;L;;;;;N;;;;;\n145D9;ANATOLIAN HIEROGLYPH A420;Lo;0;L;;;;;N;;;;;\n145DA;ANATOLIAN HIEROGLYPH A421;Lo;0;L;;;;;N;;;;;\n145DB;ANATOLIAN HIEROGLYPH A422;Lo;0;L;;;;;N;;;;;\n145DC;ANATOLIAN HIEROGLYPH A423;Lo;0;L;;;;;N;;;;;\n145DD;ANATOLIAN HIEROGLYPH A424;Lo;0;L;;;;;N;;;;;\n145DE;ANATOLIAN HIEROGLYPH A425;Lo;0;L;;;;;N;;;;;\n145DF;ANATOLIAN HIEROGLYPH A426;Lo;0;L;;;;;N;;;;;\n145E0;ANATOLIAN HIEROGLYPH A427;Lo;0;L;;;;;N;;;;;\n145E1;ANATOLIAN HIEROGLYPH A428;Lo;0;L;;;;;N;;;;;\n145E2;ANATOLIAN HIEROGLYPH A429;Lo;0;L;;;;;N;;;;;\n145E3;ANATOLIAN HIEROGLYPH A430;Lo;0;L;;;;;N;;;;;\n145E4;ANATOLIAN HIEROGLYPH A431;Lo;0;L;;;;;N;;;;;\n145E5;ANATOLIAN HIEROGLYPH A432;Lo;0;L;;;;;N;;;;;\n145E6;ANATOLIAN HIEROGLYPH A433;Lo;0;L;;;;;N;;;;;\n145E7;ANATOLIAN HIEROGLYPH A434;Lo;0;L;;;;;N;;;;;\n145E8;ANATOLIAN HIEROGLYPH A435;Lo;0;L;;;;;N;;;;;\n145E9;ANATOLIAN HIEROGLYPH A436;Lo;0;L;;;;;N;;;;;\n145EA;ANATOLIAN HIEROGLYPH A437;Lo;0;L;;;;;N;;;;;\n145EB;ANATOLIAN HIEROGLYPH A438;Lo;0;L;;;;;N;;;;;\n145EC;ANATOLIAN HIEROGLYPH A439;Lo;0;L;;;;;N;;;;;\n145ED;ANATOLIAN HIEROGLYPH A440;Lo;0;L;;;;;N;;;;;\n145EE;ANATOLIAN HIEROGLYPH A441;Lo;0;L;;;;;N;;;;;\n145EF;ANATOLIAN HIEROGLYPH A442;Lo;0;L;;;;;N;;;;;\n145F0;ANATOLIAN HIEROGLYPH A443;Lo;0;L;;;;;N;;;;;\n145F1;ANATOLIAN HIEROGLYPH A444;Lo;0;L;;;;;N;;;;;\n145F2;ANATOLIAN HIEROGLYPH A445;Lo;0;L;;;;;N;;;;;\n145F3;ANATOLIAN HIEROGLYPH A446;Lo;0;L;;;;;N;;;;;\n145F4;ANATOLIAN HIEROGLYPH A447;Lo;0;L;;;;;N;;;;;\n145F5;ANATOLIAN HIEROGLYPH A448;Lo;0;L;;;;;N;;;;;\n145F6;ANATOLIAN HIEROGLYPH A449;Lo;0;L;;;;;N;;;;;\n145F7;ANATOLIAN HIEROGLYPH A450;Lo;0;L;;;;;N;;;;;\n145F8;ANATOLIAN HIEROGLYPH A450A;Lo;0;L;;;;;N;;;;;\n145F9;ANATOLIAN HIEROGLYPH A451;Lo;0;L;;;;;N;;;;;\n145FA;ANATOLIAN HIEROGLYPH A452;Lo;0;L;;;;;N;;;;;\n145FB;ANATOLIAN HIEROGLYPH A453;Lo;0;L;;;;;N;;;;;\n145FC;ANATOLIAN HIEROGLYPH A454;Lo;0;L;;;;;N;;;;;\n145FD;ANATOLIAN HIEROGLYPH A455;Lo;0;L;;;;;N;;;;;\n145FE;ANATOLIAN HIEROGLYPH A456;Lo;0;L;;;;;N;;;;;\n145FF;ANATOLIAN HIEROGLYPH A457;Lo;0;L;;;;;N;;;;;\n14600;ANATOLIAN HIEROGLYPH A457A;Lo;0;L;;;;;N;;;;;\n14601;ANATOLIAN HIEROGLYPH A458;Lo;0;L;;;;;N;;;;;\n14602;ANATOLIAN HIEROGLYPH A459;Lo;0;L;;;;;N;;;;;\n14603;ANATOLIAN HIEROGLYPH A460;Lo;0;L;;;;;N;;;;;\n14604;ANATOLIAN HIEROGLYPH A461;Lo;0;L;;;;;N;;;;;\n14605;ANATOLIAN HIEROGLYPH A462;Lo;0;L;;;;;N;;;;;\n14606;ANATOLIAN HIEROGLYPH A463;Lo;0;L;;;;;N;;;;;\n14607;ANATOLIAN HIEROGLYPH A464;Lo;0;L;;;;;N;;;;;\n14608;ANATOLIAN HIEROGLYPH A465;Lo;0;L;;;;;N;;;;;\n14609;ANATOLIAN HIEROGLYPH A466;Lo;0;L;;;;;N;;;;;\n1460A;ANATOLIAN HIEROGLYPH A467;Lo;0;L;;;;;N;;;;;\n1460B;ANATOLIAN HIEROGLYPH A468;Lo;0;L;;;;;N;;;;;\n1460C;ANATOLIAN HIEROGLYPH A469;Lo;0;L;;;;;N;;;;;\n1460D;ANATOLIAN HIEROGLYPH A470;Lo;0;L;;;;;N;;;;;\n1460E;ANATOLIAN HIEROGLYPH A471;Lo;0;L;;;;;N;;;;;\n1460F;ANATOLIAN HIEROGLYPH A472;Lo;0;L;;;;;N;;;;;\n14610;ANATOLIAN HIEROGLYPH A473;Lo;0;L;;;;;N;;;;;\n14611;ANATOLIAN HIEROGLYPH A474;Lo;0;L;;;;;N;;;;;\n14612;ANATOLIAN HIEROGLYPH A475;Lo;0;L;;;;;N;;;;;\n14613;ANATOLIAN HIEROGLYPH A476;Lo;0;L;;;;;N;;;;;\n14614;ANATOLIAN HIEROGLYPH A477;Lo;0;L;;;;;N;;;;;\n14615;ANATOLIAN HIEROGLYPH A478;Lo;0;L;;;;;N;;;;;\n14616;ANATOLIAN HIEROGLYPH A479;Lo;0;L;;;;;N;;;;;\n14617;ANATOLIAN HIEROGLYPH A480;Lo;0;L;;;;;N;;;;;\n14618;ANATOLIAN HIEROGLYPH A481;Lo;0;L;;;;;N;;;;;\n14619;ANATOLIAN HIEROGLYPH A482;Lo;0;L;;;;;N;;;;;\n1461A;ANATOLIAN HIEROGLYPH A483;Lo;0;L;;;;;N;;;;;\n1461B;ANATOLIAN HIEROGLYPH A484;Lo;0;L;;;;;N;;;;;\n1461C;ANATOLIAN HIEROGLYPH A485;Lo;0;L;;;;;N;;;;;\n1461D;ANATOLIAN HIEROGLYPH A486;Lo;0;L;;;;;N;;;;;\n1461E;ANATOLIAN HIEROGLYPH A487;Lo;0;L;;;;;N;;;;;\n1461F;ANATOLIAN HIEROGLYPH A488;Lo;0;L;;;;;N;;;;;\n14620;ANATOLIAN HIEROGLYPH A489;Lo;0;L;;;;;N;;;;;\n14621;ANATOLIAN HIEROGLYPH A490;Lo;0;L;;;;;N;;;;;\n14622;ANATOLIAN HIEROGLYPH A491;Lo;0;L;;;;;N;;;;;\n14623;ANATOLIAN HIEROGLYPH A492;Lo;0;L;;;;;N;;;;;\n14624;ANATOLIAN HIEROGLYPH A493;Lo;0;L;;;;;N;;;;;\n14625;ANATOLIAN HIEROGLYPH A494;Lo;0;L;;;;;N;;;;;\n14626;ANATOLIAN HIEROGLYPH A495;Lo;0;L;;;;;N;;;;;\n14627;ANATOLIAN HIEROGLYPH A496;Lo;0;L;;;;;N;;;;;\n14628;ANATOLIAN HIEROGLYPH A497;Lo;0;L;;;;;N;;;;;\n14629;ANATOLIAN HIEROGLYPH A501;Lo;0;L;;;;;N;;;;;\n1462A;ANATOLIAN HIEROGLYPH A502;Lo;0;L;;;;;N;;;;;\n1462B;ANATOLIAN HIEROGLYPH A503;Lo;0;L;;;;;N;;;;;\n1462C;ANATOLIAN HIEROGLYPH A504;Lo;0;L;;;;;N;;;;;\n1462D;ANATOLIAN HIEROGLYPH A505;Lo;0;L;;;;;N;;;;;\n1462E;ANATOLIAN HIEROGLYPH A506;Lo;0;L;;;;;N;;;;;\n1462F;ANATOLIAN HIEROGLYPH A507;Lo;0;L;;;;;N;;;;;\n14630;ANATOLIAN HIEROGLYPH A508;Lo;0;L;;;;;N;;;;;\n14631;ANATOLIAN HIEROGLYPH A509;Lo;0;L;;;;;N;;;;;\n14632;ANATOLIAN HIEROGLYPH A510;Lo;0;L;;;;;N;;;;;\n14633;ANATOLIAN HIEROGLYPH A511;Lo;0;L;;;;;N;;;;;\n14634;ANATOLIAN HIEROGLYPH A512;Lo;0;L;;;;;N;;;;;\n14635;ANATOLIAN HIEROGLYPH A513;Lo;0;L;;;;;N;;;;;\n14636;ANATOLIAN HIEROGLYPH A514;Lo;0;L;;;;;N;;;;;\n14637;ANATOLIAN HIEROGLYPH A515;Lo;0;L;;;;;N;;;;;\n14638;ANATOLIAN HIEROGLYPH A516;Lo;0;L;;;;;N;;;;;\n14639;ANATOLIAN HIEROGLYPH A517;Lo;0;L;;;;;N;;;;;\n1463A;ANATOLIAN HIEROGLYPH A518;Lo;0;L;;;;;N;;;;;\n1463B;ANATOLIAN HIEROGLYPH A519;Lo;0;L;;;;;N;;;;;\n1463C;ANATOLIAN HIEROGLYPH A520;Lo;0;L;;;;;N;;;;;\n1463D;ANATOLIAN HIEROGLYPH A521;Lo;0;L;;;;;N;;;;;\n1463E;ANATOLIAN HIEROGLYPH A522;Lo;0;L;;;;;N;;;;;\n1463F;ANATOLIAN HIEROGLYPH A523;Lo;0;L;;;;;N;;;;;\n14640;ANATOLIAN HIEROGLYPH A524;Lo;0;L;;;;;N;;;;;\n14641;ANATOLIAN HIEROGLYPH A525;Lo;0;L;;;;;N;;;;;\n14642;ANATOLIAN HIEROGLYPH A526;Lo;0;L;;;;;N;;;;;\n14643;ANATOLIAN HIEROGLYPH A527;Lo;0;L;;;;;N;;;;;\n14644;ANATOLIAN HIEROGLYPH A528;Lo;0;L;;;;;N;;;;;\n14645;ANATOLIAN HIEROGLYPH A529;Lo;0;L;;;;;N;;;;;\n14646;ANATOLIAN HIEROGLYPH A530;Lo;0;L;;;;;N;;;;;\n16100;GURUNG KHEMA LETTER A;Lo;0;L;;;;;N;;;;;\n16101;GURUNG KHEMA LETTER KA;Lo;0;L;;;;;N;;;;;\n16102;GURUNG KHEMA LETTER KHA;Lo;0;L;;;;;N;;;;;\n16103;GURUNG KHEMA LETTER GA;Lo;0;L;;;;;N;;;;;\n16104;GURUNG KHEMA LETTER GHA;Lo;0;L;;;;;N;;;;;\n16105;GURUNG KHEMA LETTER NGA;Lo;0;L;;;;;N;;;;;\n16106;GURUNG KHEMA LETTER CA;Lo;0;L;;;;;N;;;;;\n16107;GURUNG KHEMA LETTER CHA;Lo;0;L;;;;;N;;;;;\n16108;GURUNG KHEMA LETTER JA;Lo;0;L;;;;;N;;;;;\n16109;GURUNG KHEMA LETTER JHA;Lo;0;L;;;;;N;;;;;\n1610A;GURUNG KHEMA LETTER HA;Lo;0;L;;;;;N;;;;;\n1610B;GURUNG KHEMA LETTER TTA;Lo;0;L;;;;;N;;;;;\n1610C;GURUNG KHEMA LETTER TTHA;Lo;0;L;;;;;N;;;;;\n1610D;GURUNG KHEMA LETTER DDA;Lo;0;L;;;;;N;;;;;\n1610E;GURUNG KHEMA LETTER DDHA;Lo;0;L;;;;;N;;;;;\n1610F;GURUNG KHEMA LETTER VA;Lo;0;L;;;;;N;;;;;\n16110;GURUNG KHEMA LETTER TA;Lo;0;L;;;;;N;;;;;\n16111;GURUNG KHEMA LETTER THA;Lo;0;L;;;;;N;;;;;\n16112;GURUNG KHEMA LETTER DA;Lo;0;L;;;;;N;;;;;\n16113;GURUNG KHEMA LETTER DHA;Lo;0;L;;;;;N;;;;;\n16114;GURUNG KHEMA LETTER NA;Lo;0;L;;;;;N;;;;;\n16115;GURUNG KHEMA LETTER PA;Lo;0;L;;;;;N;;;;;\n16116;GURUNG KHEMA LETTER PHA;Lo;0;L;;;;;N;;;;;\n16117;GURUNG KHEMA LETTER BA;Lo;0;L;;;;;N;;;;;\n16118;GURUNG KHEMA LETTER BHA;Lo;0;L;;;;;N;;;;;\n16119;GURUNG KHEMA LETTER MA;Lo;0;L;;;;;N;;;;;\n1611A;GURUNG KHEMA LETTER YA;Lo;0;L;;;;;N;;;;;\n1611B;GURUNG KHEMA LETTER RA;Lo;0;L;;;;;N;;;;;\n1611C;GURUNG KHEMA LETTER LA;Lo;0;L;;;;;N;;;;;\n1611D;GURUNG KHEMA LETTER SA;Lo;0;L;;;;;N;;;;;\n1611E;GURUNG KHEMA VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;\n1611F;GURUNG KHEMA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;\n16120;GURUNG KHEMA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;\n16121;GURUNG KHEMA VOWEL SIGN U;Mn;0;NSM;1611E 1611E;;;;N;;;;;\n16122;GURUNG KHEMA VOWEL SIGN UU;Mn;0;NSM;1611E 16129;;;;N;;;;;\n16123;GURUNG KHEMA VOWEL SIGN E;Mn;0;NSM;1611E 1611F;;;;N;;;;;\n16124;GURUNG KHEMA VOWEL SIGN EE;Mn;0;NSM;16129 1611F;;;;N;;;;;\n16125;GURUNG KHEMA VOWEL SIGN AI;Mn;0;NSM;1611E 16120;;;;N;;;;;\n16126;GURUNG KHEMA VOWEL SIGN O;Mn;0;NSM;16121 1611F;;;;N;;;;;\n16127;GURUNG KHEMA VOWEL SIGN OO;Mn;0;NSM;16122 1611F;;;;N;;;;;\n16128;GURUNG KHEMA VOWEL SIGN AU;Mn;0;NSM;16121 16120;;;;N;;;;;\n16129;GURUNG KHEMA VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;\n1612A;GURUNG KHEMA CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;;\n1612B;GURUNG KHEMA CONSONANT SIGN MEDIAL VA;Mc;0;L;;;;;N;;;;;\n1612C;GURUNG KHEMA CONSONANT SIGN MEDIAL HA;Mc;0;L;;;;;N;;;;;\n1612D;GURUNG KHEMA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;\n1612E;GURUNG KHEMA CONSONANT SIGN MEDIAL RA;Mn;0;NSM;;;;;N;;;;;\n1612F;GURUNG KHEMA SIGN THOLHOMA;Mn;9;NSM;;;;;N;;;;;\n16130;GURUNG KHEMA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n16131;GURUNG KHEMA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n16132;GURUNG KHEMA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n16133;GURUNG KHEMA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n16134;GURUNG KHEMA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n16135;GURUNG KHEMA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n16136;GURUNG KHEMA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n16137;GURUNG KHEMA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n16138;GURUNG KHEMA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n16139;GURUNG KHEMA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n16800;BAMUM LETTER PHASE-A NGKUE MFON;Lo;0;L;;;;;N;;;;;\n16801;BAMUM LETTER PHASE-A GBIEE FON;Lo;0;L;;;;;N;;;;;\n16802;BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE;Lo;0;L;;;;;N;;;;;\n16803;BAMUM LETTER PHASE-A PON MFON PIPAEMBA;Lo;0;L;;;;;N;;;;;\n16804;BAMUM LETTER PHASE-A NAA MFON;Lo;0;L;;;;;N;;;;;\n16805;BAMUM LETTER PHASE-A SHUENSHUET;Lo;0;L;;;;;N;;;;;\n16806;BAMUM LETTER PHASE-A TITA MFON;Lo;0;L;;;;;N;;;;;\n16807;BAMUM LETTER PHASE-A NZA MFON;Lo;0;L;;;;;N;;;;;\n16808;BAMUM LETTER PHASE-A SHINDA PA NJI;Lo;0;L;;;;;N;;;;;\n16809;BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE;Lo;0;L;;;;;N;;;;;\n1680A;BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA;Lo;0;L;;;;;N;;;;;\n1680B;BAMUM LETTER PHASE-A MAEMBGBIEE;Lo;0;L;;;;;N;;;;;\n1680C;BAMUM LETTER PHASE-A TU MAEMBA;Lo;0;L;;;;;N;;;;;\n1680D;BAMUM LETTER PHASE-A NGANGU;Lo;0;L;;;;;N;;;;;\n1680E;BAMUM LETTER PHASE-A MAEMVEUX;Lo;0;L;;;;;N;;;;;\n1680F;BAMUM LETTER PHASE-A MANSUAE;Lo;0;L;;;;;N;;;;;\n16810;BAMUM LETTER PHASE-A MVEUAENGAM;Lo;0;L;;;;;N;;;;;\n16811;BAMUM LETTER PHASE-A SEUNYAM;Lo;0;L;;;;;N;;;;;\n16812;BAMUM LETTER PHASE-A NTOQPEN;Lo;0;L;;;;;N;;;;;\n16813;BAMUM LETTER PHASE-A KEUKEUTNDA;Lo;0;L;;;;;N;;;;;\n16814;BAMUM LETTER PHASE-A NKINDI;Lo;0;L;;;;;N;;;;;\n16815;BAMUM LETTER PHASE-A SUU;Lo;0;L;;;;;N;;;;;\n16816;BAMUM LETTER PHASE-A NGKUENZEUM;Lo;0;L;;;;;N;;;;;\n16817;BAMUM LETTER PHASE-A LAPAQ;Lo;0;L;;;;;N;;;;;\n16818;BAMUM LETTER PHASE-A LET KUT;Lo;0;L;;;;;N;;;;;\n16819;BAMUM LETTER PHASE-A NTAP MFAA;Lo;0;L;;;;;N;;;;;\n1681A;BAMUM LETTER PHASE-A MAEKEUP;Lo;0;L;;;;;N;;;;;\n1681B;BAMUM LETTER PHASE-A PASHAE;Lo;0;L;;;;;N;;;;;\n1681C;BAMUM LETTER PHASE-A GHEUAERAE;Lo;0;L;;;;;N;;;;;\n1681D;BAMUM LETTER PHASE-A PAMSHAE;Lo;0;L;;;;;N;;;;;\n1681E;BAMUM LETTER PHASE-A MON NGGEUAET;Lo;0;L;;;;;N;;;;;\n1681F;BAMUM LETTER PHASE-A NZUN MEUT;Lo;0;L;;;;;N;;;;;\n16820;BAMUM LETTER PHASE-A U YUQ NAE;Lo;0;L;;;;;N;;;;;\n16821;BAMUM LETTER PHASE-A GHEUAEGHEUAE;Lo;0;L;;;;;N;;;;;\n16822;BAMUM LETTER PHASE-A NTAP NTAA;Lo;0;L;;;;;N;;;;;\n16823;BAMUM LETTER PHASE-A SISA;Lo;0;L;;;;;N;;;;;\n16824;BAMUM LETTER PHASE-A MGBASA;Lo;0;L;;;;;N;;;;;\n16825;BAMUM LETTER PHASE-A MEUNJOMNDEUQ;Lo;0;L;;;;;N;;;;;\n16826;BAMUM LETTER PHASE-A MOOMPUQ;Lo;0;L;;;;;N;;;;;\n16827;BAMUM LETTER PHASE-A KAFA;Lo;0;L;;;;;N;;;;;\n16828;BAMUM LETTER PHASE-A PA LEERAEWA;Lo;0;L;;;;;N;;;;;\n16829;BAMUM LETTER PHASE-A NDA LEERAEWA;Lo;0;L;;;;;N;;;;;\n1682A;BAMUM LETTER PHASE-A PET;Lo;0;L;;;;;N;;;;;\n1682B;BAMUM LETTER PHASE-A MAEMKPEN;Lo;0;L;;;;;N;;;;;\n1682C;BAMUM LETTER PHASE-A NIKA;Lo;0;L;;;;;N;;;;;\n1682D;BAMUM LETTER PHASE-A PUP;Lo;0;L;;;;;N;;;;;\n1682E;BAMUM LETTER PHASE-A TUAEP;Lo;0;L;;;;;N;;;;;\n1682F;BAMUM LETTER PHASE-A LUAEP;Lo;0;L;;;;;N;;;;;\n16830;BAMUM LETTER PHASE-A SONJAM;Lo;0;L;;;;;N;;;;;\n16831;BAMUM LETTER PHASE-A TEUTEUWEN;Lo;0;L;;;;;N;;;;;\n16832;BAMUM LETTER PHASE-A MAENYI;Lo;0;L;;;;;N;;;;;\n16833;BAMUM LETTER PHASE-A KET;Lo;0;L;;;;;N;;;;;\n16834;BAMUM LETTER PHASE-A NDAANGGEUAET;Lo;0;L;;;;;N;;;;;\n16835;BAMUM LETTER PHASE-A KUOQ;Lo;0;L;;;;;N;;;;;\n16836;BAMUM LETTER PHASE-A MOOMEUT;Lo;0;L;;;;;N;;;;;\n16837;BAMUM LETTER PHASE-A SHUM;Lo;0;L;;;;;N;;;;;\n16838;BAMUM LETTER PHASE-A LOMMAE;Lo;0;L;;;;;N;;;;;\n16839;BAMUM LETTER PHASE-A FIRI;Lo;0;L;;;;;N;;;;;\n1683A;BAMUM LETTER PHASE-A ROM;Lo;0;L;;;;;N;;;;;\n1683B;BAMUM LETTER PHASE-A KPOQ;Lo;0;L;;;;;N;;;;;\n1683C;BAMUM LETTER PHASE-A SOQ;Lo;0;L;;;;;N;;;;;\n1683D;BAMUM LETTER PHASE-A MAP PIEET;Lo;0;L;;;;;N;;;;;\n1683E;BAMUM LETTER PHASE-A SHIRAE;Lo;0;L;;;;;N;;;;;\n1683F;BAMUM LETTER PHASE-A NTAP;Lo;0;L;;;;;N;;;;;\n16840;BAMUM LETTER PHASE-A SHOQ NSHUT YUM;Lo;0;L;;;;;N;;;;;\n16841;BAMUM LETTER PHASE-A NYIT MONGKEUAEQ;Lo;0;L;;;;;N;;;;;\n16842;BAMUM LETTER PHASE-A PAARAE;Lo;0;L;;;;;N;;;;;\n16843;BAMUM LETTER PHASE-A NKAARAE;Lo;0;L;;;;;N;;;;;\n16844;BAMUM LETTER PHASE-A UNKNOWN;Lo;0;L;;;;;N;;;;;\n16845;BAMUM LETTER PHASE-A NGGEN;Lo;0;L;;;;;N;;;;;\n16846;BAMUM LETTER PHASE-A MAESI;Lo;0;L;;;;;N;;;;;\n16847;BAMUM LETTER PHASE-A NJAM;Lo;0;L;;;;;N;;;;;\n16848;BAMUM LETTER PHASE-A MBANYI;Lo;0;L;;;;;N;;;;;\n16849;BAMUM LETTER PHASE-A NYET;Lo;0;L;;;;;N;;;;;\n1684A;BAMUM LETTER PHASE-A TEUAEN;Lo;0;L;;;;;N;;;;;\n1684B;BAMUM LETTER PHASE-A SOT;Lo;0;L;;;;;N;;;;;\n1684C;BAMUM LETTER PHASE-A PAAM;Lo;0;L;;;;;N;;;;;\n1684D;BAMUM LETTER PHASE-A NSHIEE;Lo;0;L;;;;;N;;;;;\n1684E;BAMUM LETTER PHASE-A MAEM;Lo;0;L;;;;;N;;;;;\n1684F;BAMUM LETTER PHASE-A NYI;Lo;0;L;;;;;N;;;;;\n16850;BAMUM LETTER PHASE-A KAQ;Lo;0;L;;;;;N;;;;;\n16851;BAMUM LETTER PHASE-A NSHA;Lo;0;L;;;;;N;;;;;\n16852;BAMUM LETTER PHASE-A VEE;Lo;0;L;;;;;N;;;;;\n16853;BAMUM LETTER PHASE-A LU;Lo;0;L;;;;;N;;;;;\n16854;BAMUM LETTER PHASE-A NEN;Lo;0;L;;;;;N;;;;;\n16855;BAMUM LETTER PHASE-A NAQ;Lo;0;L;;;;;N;;;;;\n16856;BAMUM LETTER PHASE-A MBAQ;Lo;0;L;;;;;N;;;;;\n16857;BAMUM LETTER PHASE-B NSHUET;Lo;0;L;;;;;N;;;;;\n16858;BAMUM LETTER PHASE-B TU MAEMGBIEE;Lo;0;L;;;;;N;;;;;\n16859;BAMUM LETTER PHASE-B SIEE;Lo;0;L;;;;;N;;;;;\n1685A;BAMUM LETTER PHASE-B SET TU;Lo;0;L;;;;;N;;;;;\n1685B;BAMUM LETTER PHASE-B LOM NTEUM;Lo;0;L;;;;;N;;;;;\n1685C;BAMUM LETTER PHASE-B MBA MAELEE;Lo;0;L;;;;;N;;;;;\n1685D;BAMUM LETTER PHASE-B KIEEM;Lo;0;L;;;;;N;;;;;\n1685E;BAMUM LETTER PHASE-B YEURAE;Lo;0;L;;;;;N;;;;;\n1685F;BAMUM LETTER PHASE-B MBAARAE;Lo;0;L;;;;;N;;;;;\n16860;BAMUM LETTER PHASE-B KAM;Lo;0;L;;;;;N;;;;;\n16861;BAMUM LETTER PHASE-B PEESHI;Lo;0;L;;;;;N;;;;;\n16862;BAMUM LETTER PHASE-B YAFU LEERAEWA;Lo;0;L;;;;;N;;;;;\n16863;BAMUM LETTER PHASE-B LAM NSHUT NYAM;Lo;0;L;;;;;N;;;;;\n16864;BAMUM LETTER PHASE-B NTIEE SHEUOQ;Lo;0;L;;;;;N;;;;;\n16865;BAMUM LETTER PHASE-B NDU NJAA;Lo;0;L;;;;;N;;;;;\n16866;BAMUM LETTER PHASE-B GHEUGHEUAEM;Lo;0;L;;;;;N;;;;;\n16867;BAMUM LETTER PHASE-B PIT;Lo;0;L;;;;;N;;;;;\n16868;BAMUM LETTER PHASE-B TU NSIEE;Lo;0;L;;;;;N;;;;;\n16869;BAMUM LETTER PHASE-B SHET NJAQ;Lo;0;L;;;;;N;;;;;\n1686A;BAMUM LETTER PHASE-B SHEUAEQTU;Lo;0;L;;;;;N;;;;;\n1686B;BAMUM LETTER PHASE-B MFON TEUAEQ;Lo;0;L;;;;;N;;;;;\n1686C;BAMUM LETTER PHASE-B MBIT MBAAKET;Lo;0;L;;;;;N;;;;;\n1686D;BAMUM LETTER PHASE-B NYI NTEUM;Lo;0;L;;;;;N;;;;;\n1686E;BAMUM LETTER PHASE-B KEUPUQ;Lo;0;L;;;;;N;;;;;\n1686F;BAMUM LETTER PHASE-B GHEUGHEN;Lo;0;L;;;;;N;;;;;\n16870;BAMUM LETTER PHASE-B KEUYEUX;Lo;0;L;;;;;N;;;;;\n16871;BAMUM LETTER PHASE-B LAANAE;Lo;0;L;;;;;N;;;;;\n16872;BAMUM LETTER PHASE-B PARUM;Lo;0;L;;;;;N;;;;;\n16873;BAMUM LETTER PHASE-B VEUM;Lo;0;L;;;;;N;;;;;\n16874;BAMUM LETTER PHASE-B NGKINDI MVOP;Lo;0;L;;;;;N;;;;;\n16875;BAMUM LETTER PHASE-B NGGEU MBU;Lo;0;L;;;;;N;;;;;\n16876;BAMUM LETTER PHASE-B WUAET;Lo;0;L;;;;;N;;;;;\n16877;BAMUM LETTER PHASE-B SAKEUAE;Lo;0;L;;;;;N;;;;;\n16878;BAMUM LETTER PHASE-B TAAM;Lo;0;L;;;;;N;;;;;\n16879;BAMUM LETTER PHASE-B MEUQ;Lo;0;L;;;;;N;;;;;\n1687A;BAMUM LETTER PHASE-B NGGUOQ;Lo;0;L;;;;;N;;;;;\n1687B;BAMUM LETTER PHASE-B NGGUOQ LARGE;Lo;0;L;;;;;N;;;;;\n1687C;BAMUM LETTER PHASE-B MFIYAQ;Lo;0;L;;;;;N;;;;;\n1687D;BAMUM LETTER PHASE-B SUE;Lo;0;L;;;;;N;;;;;\n1687E;BAMUM LETTER PHASE-B MBEURI;Lo;0;L;;;;;N;;;;;\n1687F;BAMUM LETTER PHASE-B MONTIEEN;Lo;0;L;;;;;N;;;;;\n16880;BAMUM LETTER PHASE-B NYAEMAE;Lo;0;L;;;;;N;;;;;\n16881;BAMUM LETTER PHASE-B PUNGAAM;Lo;0;L;;;;;N;;;;;\n16882;BAMUM LETTER PHASE-B MEUT NGGEET;Lo;0;L;;;;;N;;;;;\n16883;BAMUM LETTER PHASE-B FEUX;Lo;0;L;;;;;N;;;;;\n16884;BAMUM LETTER PHASE-B MBUOQ;Lo;0;L;;;;;N;;;;;\n16885;BAMUM LETTER PHASE-B FEE;Lo;0;L;;;;;N;;;;;\n16886;BAMUM LETTER PHASE-B KEUAEM;Lo;0;L;;;;;N;;;;;\n16887;BAMUM LETTER PHASE-B MA NJEUAENA;Lo;0;L;;;;;N;;;;;\n16888;BAMUM LETTER PHASE-B MA NJUQA;Lo;0;L;;;;;N;;;;;\n16889;BAMUM LETTER PHASE-B LET;Lo;0;L;;;;;N;;;;;\n1688A;BAMUM LETTER PHASE-B NGGAAM;Lo;0;L;;;;;N;;;;;\n1688B;BAMUM LETTER PHASE-B NSEN;Lo;0;L;;;;;N;;;;;\n1688C;BAMUM LETTER PHASE-B MA;Lo;0;L;;;;;N;;;;;\n1688D;BAMUM LETTER PHASE-B KIQ;Lo;0;L;;;;;N;;;;;\n1688E;BAMUM LETTER PHASE-B NGOM;Lo;0;L;;;;;N;;;;;\n1688F;BAMUM LETTER PHASE-C NGKUE MAEMBA;Lo;0;L;;;;;N;;;;;\n16890;BAMUM LETTER PHASE-C NZA;Lo;0;L;;;;;N;;;;;\n16891;BAMUM LETTER PHASE-C YUM;Lo;0;L;;;;;N;;;;;\n16892;BAMUM LETTER PHASE-C WANGKUOQ;Lo;0;L;;;;;N;;;;;\n16893;BAMUM LETTER PHASE-C NGGEN;Lo;0;L;;;;;N;;;;;\n16894;BAMUM LETTER PHASE-C NDEUAEREE;Lo;0;L;;;;;N;;;;;\n16895;BAMUM LETTER PHASE-C NGKAQ;Lo;0;L;;;;;N;;;;;\n16896;BAMUM LETTER PHASE-C GHARAE;Lo;0;L;;;;;N;;;;;\n16897;BAMUM LETTER PHASE-C MBEEKEET;Lo;0;L;;;;;N;;;;;\n16898;BAMUM LETTER PHASE-C GBAYI;Lo;0;L;;;;;N;;;;;\n16899;BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN;Lo;0;L;;;;;N;;;;;\n1689A;BAMUM LETTER PHASE-C NTU MBIT;Lo;0;L;;;;;N;;;;;\n1689B;BAMUM LETTER PHASE-C MBEUM;Lo;0;L;;;;;N;;;;;\n1689C;BAMUM LETTER PHASE-C PIRIEEN;Lo;0;L;;;;;N;;;;;\n1689D;BAMUM LETTER PHASE-C NDOMBU;Lo;0;L;;;;;N;;;;;\n1689E;BAMUM LETTER PHASE-C MBAA CABBAGE-TREE;Lo;0;L;;;;;N;;;;;\n1689F;BAMUM LETTER PHASE-C KEUSHEUAEP;Lo;0;L;;;;;N;;;;;\n168A0;BAMUM LETTER PHASE-C GHAP;Lo;0;L;;;;;N;;;;;\n168A1;BAMUM LETTER PHASE-C KEUKAQ;Lo;0;L;;;;;N;;;;;\n168A2;BAMUM LETTER PHASE-C YU MUOMAE;Lo;0;L;;;;;N;;;;;\n168A3;BAMUM LETTER PHASE-C NZEUM;Lo;0;L;;;;;N;;;;;\n168A4;BAMUM LETTER PHASE-C MBUE;Lo;0;L;;;;;N;;;;;\n168A5;BAMUM LETTER PHASE-C NSEUAEN;Lo;0;L;;;;;N;;;;;\n168A6;BAMUM LETTER PHASE-C MBIT;Lo;0;L;;;;;N;;;;;\n168A7;BAMUM LETTER PHASE-C YEUQ;Lo;0;L;;;;;N;;;;;\n168A8;BAMUM LETTER PHASE-C KPARAQ;Lo;0;L;;;;;N;;;;;\n168A9;BAMUM LETTER PHASE-C KAA;Lo;0;L;;;;;N;;;;;\n168AA;BAMUM LETTER PHASE-C SEUX;Lo;0;L;;;;;N;;;;;\n168AB;BAMUM LETTER PHASE-C NDIDA;Lo;0;L;;;;;N;;;;;\n168AC;BAMUM LETTER PHASE-C TAASHAE;Lo;0;L;;;;;N;;;;;\n168AD;BAMUM LETTER PHASE-C NJUEQ;Lo;0;L;;;;;N;;;;;\n168AE;BAMUM LETTER PHASE-C TITA YUE;Lo;0;L;;;;;N;;;;;\n168AF;BAMUM LETTER PHASE-C SUAET;Lo;0;L;;;;;N;;;;;\n168B0;BAMUM LETTER PHASE-C NGGUAEN NYAM;Lo;0;L;;;;;N;;;;;\n168B1;BAMUM LETTER PHASE-C VEUX;Lo;0;L;;;;;N;;;;;\n168B2;BAMUM LETTER PHASE-C NANSANAQ;Lo;0;L;;;;;N;;;;;\n168B3;BAMUM LETTER PHASE-C MA KEUAERI;Lo;0;L;;;;;N;;;;;\n168B4;BAMUM LETTER PHASE-C NTAA;Lo;0;L;;;;;N;;;;;\n168B5;BAMUM LETTER PHASE-C NGGUON;Lo;0;L;;;;;N;;;;;\n168B6;BAMUM LETTER PHASE-C LAP;Lo;0;L;;;;;N;;;;;\n168B7;BAMUM LETTER PHASE-C MBIRIEEN;Lo;0;L;;;;;N;;;;;\n168B8;BAMUM LETTER PHASE-C MGBASAQ;Lo;0;L;;;;;N;;;;;\n168B9;BAMUM LETTER PHASE-C NTEUNGBA;Lo;0;L;;;;;N;;;;;\n168BA;BAMUM LETTER PHASE-C TEUTEUX;Lo;0;L;;;;;N;;;;;\n168BB;BAMUM LETTER PHASE-C NGGUM;Lo;0;L;;;;;N;;;;;\n168BC;BAMUM LETTER PHASE-C FUE;Lo;0;L;;;;;N;;;;;\n168BD;BAMUM LETTER PHASE-C NDEUT;Lo;0;L;;;;;N;;;;;\n168BE;BAMUM LETTER PHASE-C NSA;Lo;0;L;;;;;N;;;;;\n168BF;BAMUM LETTER PHASE-C NSHAQ;Lo;0;L;;;;;N;;;;;\n168C0;BAMUM LETTER PHASE-C BUNG;Lo;0;L;;;;;N;;;;;\n168C1;BAMUM LETTER PHASE-C VEUAEPEN;Lo;0;L;;;;;N;;;;;\n168C2;BAMUM LETTER PHASE-C MBERAE;Lo;0;L;;;;;N;;;;;\n168C3;BAMUM LETTER PHASE-C RU;Lo;0;L;;;;;N;;;;;\n168C4;BAMUM LETTER PHASE-C NJAEM;Lo;0;L;;;;;N;;;;;\n168C5;BAMUM LETTER PHASE-C LAM;Lo;0;L;;;;;N;;;;;\n168C6;BAMUM LETTER PHASE-C TITUAEP;Lo;0;L;;;;;N;;;;;\n168C7;BAMUM LETTER PHASE-C NSUOT NGOM;Lo;0;L;;;;;N;;;;;\n168C8;BAMUM LETTER PHASE-C NJEEEE;Lo;0;L;;;;;N;;;;;\n168C9;BAMUM LETTER PHASE-C KET;Lo;0;L;;;;;N;;;;;\n168CA;BAMUM LETTER PHASE-C NGGU;Lo;0;L;;;;;N;;;;;\n168CB;BAMUM LETTER PHASE-C MAESI;Lo;0;L;;;;;N;;;;;\n168CC;BAMUM LETTER PHASE-C MBUAEM;Lo;0;L;;;;;N;;;;;\n168CD;BAMUM LETTER PHASE-C LU;Lo;0;L;;;;;N;;;;;\n168CE;BAMUM LETTER PHASE-C KUT;Lo;0;L;;;;;N;;;;;\n168CF;BAMUM LETTER PHASE-C NJAM;Lo;0;L;;;;;N;;;;;\n168D0;BAMUM LETTER PHASE-C NGOM;Lo;0;L;;;;;N;;;;;\n168D1;BAMUM LETTER PHASE-C WUP;Lo;0;L;;;;;N;;;;;\n168D2;BAMUM LETTER PHASE-C NGGUEET;Lo;0;L;;;;;N;;;;;\n168D3;BAMUM LETTER PHASE-C NSOM;Lo;0;L;;;;;N;;;;;\n168D4;BAMUM LETTER PHASE-C NTEN;Lo;0;L;;;;;N;;;;;\n168D5;BAMUM LETTER PHASE-C KUOP NKAARAE;Lo;0;L;;;;;N;;;;;\n168D6;BAMUM LETTER PHASE-C NSUN;Lo;0;L;;;;;N;;;;;\n168D7;BAMUM LETTER PHASE-C NDAM;Lo;0;L;;;;;N;;;;;\n168D8;BAMUM LETTER PHASE-C MA NSIEE;Lo;0;L;;;;;N;;;;;\n168D9;BAMUM LETTER PHASE-C YAA;Lo;0;L;;;;;N;;;;;\n168DA;BAMUM LETTER PHASE-C NDAP;Lo;0;L;;;;;N;;;;;\n168DB;BAMUM LETTER PHASE-C SHUEQ;Lo;0;L;;;;;N;;;;;\n168DC;BAMUM LETTER PHASE-C SETFON;Lo;0;L;;;;;N;;;;;\n168DD;BAMUM LETTER PHASE-C MBI;Lo;0;L;;;;;N;;;;;\n168DE;BAMUM LETTER PHASE-C MAEMBA;Lo;0;L;;;;;N;;;;;\n168DF;BAMUM LETTER PHASE-C MBANYI;Lo;0;L;;;;;N;;;;;\n168E0;BAMUM LETTER PHASE-C KEUSEUX;Lo;0;L;;;;;N;;;;;\n168E1;BAMUM LETTER PHASE-C MBEUX;Lo;0;L;;;;;N;;;;;\n168E2;BAMUM LETTER PHASE-C KEUM;Lo;0;L;;;;;N;;;;;\n168E3;BAMUM LETTER PHASE-C MBAA PICKET;Lo;0;L;;;;;N;;;;;\n168E4;BAMUM LETTER PHASE-C YUWOQ;Lo;0;L;;;;;N;;;;;\n168E5;BAMUM LETTER PHASE-C NJEUX;Lo;0;L;;;;;N;;;;;\n168E6;BAMUM LETTER PHASE-C MIEE;Lo;0;L;;;;;N;;;;;\n168E7;BAMUM LETTER PHASE-C MUAE;Lo;0;L;;;;;N;;;;;\n168E8;BAMUM LETTER PHASE-C SHIQ;Lo;0;L;;;;;N;;;;;\n168E9;BAMUM LETTER PHASE-C KEN LAW;Lo;0;L;;;;;N;;;;;\n168EA;BAMUM LETTER PHASE-C KEN FATIGUE;Lo;0;L;;;;;N;;;;;\n168EB;BAMUM LETTER PHASE-C NGAQ;Lo;0;L;;;;;N;;;;;\n168EC;BAMUM LETTER PHASE-C NAQ;Lo;0;L;;;;;N;;;;;\n168ED;BAMUM LETTER PHASE-C LIQ;Lo;0;L;;;;;N;;;;;\n168EE;BAMUM LETTER PHASE-C PIN;Lo;0;L;;;;;N;;;;;\n168EF;BAMUM LETTER PHASE-C PEN;Lo;0;L;;;;;N;;;;;\n168F0;BAMUM LETTER PHASE-C TET;Lo;0;L;;;;;N;;;;;\n168F1;BAMUM LETTER PHASE-D MBUO;Lo;0;L;;;;;N;;;;;\n168F2;BAMUM LETTER PHASE-D WAP;Lo;0;L;;;;;N;;;;;\n168F3;BAMUM LETTER PHASE-D NJI;Lo;0;L;;;;;N;;;;;\n168F4;BAMUM LETTER PHASE-D MFON;Lo;0;L;;;;;N;;;;;\n168F5;BAMUM LETTER PHASE-D NJIEE;Lo;0;L;;;;;N;;;;;\n168F6;BAMUM LETTER PHASE-D LIEE;Lo;0;L;;;;;N;;;;;\n168F7;BAMUM LETTER PHASE-D NJEUT;Lo;0;L;;;;;N;;;;;\n168F8;BAMUM LETTER PHASE-D NSHEE;Lo;0;L;;;;;N;;;;;\n168F9;BAMUM LETTER PHASE-D NGGAAMAE;Lo;0;L;;;;;N;;;;;\n168FA;BAMUM LETTER PHASE-D NYAM;Lo;0;L;;;;;N;;;;;\n168FB;BAMUM LETTER PHASE-D WUAEN;Lo;0;L;;;;;N;;;;;\n168FC;BAMUM LETTER PHASE-D NGKUN;Lo;0;L;;;;;N;;;;;\n168FD;BAMUM LETTER PHASE-D SHEE;Lo;0;L;;;;;N;;;;;\n168FE;BAMUM LETTER PHASE-D NGKAP;Lo;0;L;;;;;N;;;;;\n168FF;BAMUM LETTER PHASE-D KEUAETMEUN;Lo;0;L;;;;;N;;;;;\n16900;BAMUM LETTER PHASE-D TEUT;Lo;0;L;;;;;N;;;;;\n16901;BAMUM LETTER PHASE-D SHEUAE;Lo;0;L;;;;;N;;;;;\n16902;BAMUM LETTER PHASE-D NJAP;Lo;0;L;;;;;N;;;;;\n16903;BAMUM LETTER PHASE-D SUE;Lo;0;L;;;;;N;;;;;\n16904;BAMUM LETTER PHASE-D KET;Lo;0;L;;;;;N;;;;;\n16905;BAMUM LETTER PHASE-D YAEMMAE;Lo;0;L;;;;;N;;;;;\n16906;BAMUM LETTER PHASE-D KUOM;Lo;0;L;;;;;N;;;;;\n16907;BAMUM LETTER PHASE-D SAP;Lo;0;L;;;;;N;;;;;\n16908;BAMUM LETTER PHASE-D MFEUT;Lo;0;L;;;;;N;;;;;\n16909;BAMUM LETTER PHASE-D NDEUX;Lo;0;L;;;;;N;;;;;\n1690A;BAMUM LETTER PHASE-D MALEERI;Lo;0;L;;;;;N;;;;;\n1690B;BAMUM LETTER PHASE-D MEUT;Lo;0;L;;;;;N;;;;;\n1690C;BAMUM LETTER PHASE-D SEUAEQ;Lo;0;L;;;;;N;;;;;\n1690D;BAMUM LETTER PHASE-D YEN;Lo;0;L;;;;;N;;;;;\n1690E;BAMUM LETTER PHASE-D NJEUAEM;Lo;0;L;;;;;N;;;;;\n1690F;BAMUM LETTER PHASE-D KEUOT MBUAE;Lo;0;L;;;;;N;;;;;\n16910;BAMUM LETTER PHASE-D NGKEURI;Lo;0;L;;;;;N;;;;;\n16911;BAMUM LETTER PHASE-D TU;Lo;0;L;;;;;N;;;;;\n16912;BAMUM LETTER PHASE-D GHAA;Lo;0;L;;;;;N;;;;;\n16913;BAMUM LETTER PHASE-D NGKYEE;Lo;0;L;;;;;N;;;;;\n16914;BAMUM LETTER PHASE-D FEUFEUAET;Lo;0;L;;;;;N;;;;;\n16915;BAMUM LETTER PHASE-D NDEE;Lo;0;L;;;;;N;;;;;\n16916;BAMUM LETTER PHASE-D MGBOFUM;Lo;0;L;;;;;N;;;;;\n16917;BAMUM LETTER PHASE-D LEUAEP;Lo;0;L;;;;;N;;;;;\n16918;BAMUM LETTER PHASE-D NDON;Lo;0;L;;;;;N;;;;;\n16919;BAMUM LETTER PHASE-D MONI;Lo;0;L;;;;;N;;;;;\n1691A;BAMUM LETTER PHASE-D MGBEUN;Lo;0;L;;;;;N;;;;;\n1691B;BAMUM LETTER PHASE-D PUUT;Lo;0;L;;;;;N;;;;;\n1691C;BAMUM LETTER PHASE-D MGBIEE;Lo;0;L;;;;;N;;;;;\n1691D;BAMUM LETTER PHASE-D MFO;Lo;0;L;;;;;N;;;;;\n1691E;BAMUM LETTER PHASE-D LUM;Lo;0;L;;;;;N;;;;;\n1691F;BAMUM LETTER PHASE-D NSIEEP;Lo;0;L;;;;;N;;;;;\n16920;BAMUM LETTER PHASE-D MBAA;Lo;0;L;;;;;N;;;;;\n16921;BAMUM LETTER PHASE-D KWAET;Lo;0;L;;;;;N;;;;;\n16922;BAMUM LETTER PHASE-D NYET;Lo;0;L;;;;;N;;;;;\n16923;BAMUM LETTER PHASE-D TEUAEN;Lo;0;L;;;;;N;;;;;\n16924;BAMUM LETTER PHASE-D SOT;Lo;0;L;;;;;N;;;;;\n16925;BAMUM LETTER PHASE-D YUWOQ;Lo;0;L;;;;;N;;;;;\n16926;BAMUM LETTER PHASE-D KEUM;Lo;0;L;;;;;N;;;;;\n16927;BAMUM LETTER PHASE-D RAEM;Lo;0;L;;;;;N;;;;;\n16928;BAMUM LETTER PHASE-D TEEEE;Lo;0;L;;;;;N;;;;;\n16929;BAMUM LETTER PHASE-D NGKEUAEQ;Lo;0;L;;;;;N;;;;;\n1692A;BAMUM LETTER PHASE-D MFEUAE;Lo;0;L;;;;;N;;;;;\n1692B;BAMUM LETTER PHASE-D NSIEET;Lo;0;L;;;;;N;;;;;\n1692C;BAMUM LETTER PHASE-D KEUP;Lo;0;L;;;;;N;;;;;\n1692D;BAMUM LETTER PHASE-D PIP;Lo;0;L;;;;;N;;;;;\n1692E;BAMUM LETTER PHASE-D PEUTAE;Lo;0;L;;;;;N;;;;;\n1692F;BAMUM LETTER PHASE-D NYUE;Lo;0;L;;;;;N;;;;;\n16930;BAMUM LETTER PHASE-D LET;Lo;0;L;;;;;N;;;;;\n16931;BAMUM LETTER PHASE-D NGGAAM;Lo;0;L;;;;;N;;;;;\n16932;BAMUM LETTER PHASE-D MFIEE;Lo;0;L;;;;;N;;;;;\n16933;BAMUM LETTER PHASE-D NGGWAEN;Lo;0;L;;;;;N;;;;;\n16934;BAMUM LETTER PHASE-D YUOM;Lo;0;L;;;;;N;;;;;\n16935;BAMUM LETTER PHASE-D PAP;Lo;0;L;;;;;N;;;;;\n16936;BAMUM LETTER PHASE-D YUOP;Lo;0;L;;;;;N;;;;;\n16937;BAMUM LETTER PHASE-D NDAM;Lo;0;L;;;;;N;;;;;\n16938;BAMUM LETTER PHASE-D NTEUM;Lo;0;L;;;;;N;;;;;\n16939;BAMUM LETTER PHASE-D SUAE;Lo;0;L;;;;;N;;;;;\n1693A;BAMUM LETTER PHASE-D KUN;Lo;0;L;;;;;N;;;;;\n1693B;BAMUM LETTER PHASE-D NGGEUX;Lo;0;L;;;;;N;;;;;\n1693C;BAMUM LETTER PHASE-D NGKIEE;Lo;0;L;;;;;N;;;;;\n1693D;BAMUM LETTER PHASE-D TUOT;Lo;0;L;;;;;N;;;;;\n1693E;BAMUM LETTER PHASE-D MEUN;Lo;0;L;;;;;N;;;;;\n1693F;BAMUM LETTER PHASE-D KUQ;Lo;0;L;;;;;N;;;;;\n16940;BAMUM LETTER PHASE-D NSUM;Lo;0;L;;;;;N;;;;;\n16941;BAMUM LETTER PHASE-D TEUN;Lo;0;L;;;;;N;;;;;\n16942;BAMUM LETTER PHASE-D MAENJET;Lo;0;L;;;;;N;;;;;\n16943;BAMUM LETTER PHASE-D NGGAP;Lo;0;L;;;;;N;;;;;\n16944;BAMUM LETTER PHASE-D LEUM;Lo;0;L;;;;;N;;;;;\n16945;BAMUM LETTER PHASE-D NGGUOM;Lo;0;L;;;;;N;;;;;\n16946;BAMUM LETTER PHASE-D NSHUT;Lo;0;L;;;;;N;;;;;\n16947;BAMUM LETTER PHASE-D NJUEQ;Lo;0;L;;;;;N;;;;;\n16948;BAMUM LETTER PHASE-D GHEUAE;Lo;0;L;;;;;N;;;;;\n16949;BAMUM LETTER PHASE-D KU;Lo;0;L;;;;;N;;;;;\n1694A;BAMUM LETTER PHASE-D REN OLD;Lo;0;L;;;;;N;;;;;\n1694B;BAMUM LETTER PHASE-D TAE;Lo;0;L;;;;;N;;;;;\n1694C;BAMUM LETTER PHASE-D TOQ;Lo;0;L;;;;;N;;;;;\n1694D;BAMUM LETTER PHASE-D NYI;Lo;0;L;;;;;N;;;;;\n1694E;BAMUM LETTER PHASE-D RII;Lo;0;L;;;;;N;;;;;\n1694F;BAMUM LETTER PHASE-D LEEEE;Lo;0;L;;;;;N;;;;;\n16950;BAMUM LETTER PHASE-D MEEEE;Lo;0;L;;;;;N;;;;;\n16951;BAMUM LETTER PHASE-D M;Lo;0;L;;;;;N;;;;;\n16952;BAMUM LETTER PHASE-D SUU;Lo;0;L;;;;;N;;;;;\n16953;BAMUM LETTER PHASE-D MU;Lo;0;L;;;;;N;;;;;\n16954;BAMUM LETTER PHASE-D SHII;Lo;0;L;;;;;N;;;;;\n16955;BAMUM LETTER PHASE-D SHEUX;Lo;0;L;;;;;N;;;;;\n16956;BAMUM LETTER PHASE-D KYEE;Lo;0;L;;;;;N;;;;;\n16957;BAMUM LETTER PHASE-D NU;Lo;0;L;;;;;N;;;;;\n16958;BAMUM LETTER PHASE-D SHU;Lo;0;L;;;;;N;;;;;\n16959;BAMUM LETTER PHASE-D NTEE;Lo;0;L;;;;;N;;;;;\n1695A;BAMUM LETTER PHASE-D PEE;Lo;0;L;;;;;N;;;;;\n1695B;BAMUM LETTER PHASE-D NI;Lo;0;L;;;;;N;;;;;\n1695C;BAMUM LETTER PHASE-D SHOQ;Lo;0;L;;;;;N;;;;;\n1695D;BAMUM LETTER PHASE-D PUQ;Lo;0;L;;;;;N;;;;;\n1695E;BAMUM LETTER PHASE-D MVOP;Lo;0;L;;;;;N;;;;;\n1695F;BAMUM LETTER PHASE-D LOQ;Lo;0;L;;;;;N;;;;;\n16960;BAMUM LETTER PHASE-D REN MUCH;Lo;0;L;;;;;N;;;;;\n16961;BAMUM LETTER PHASE-D TI;Lo;0;L;;;;;N;;;;;\n16962;BAMUM LETTER PHASE-D NTUU;Lo;0;L;;;;;N;;;;;\n16963;BAMUM LETTER PHASE-D MBAA SEVEN;Lo;0;L;;;;;N;;;;;\n16964;BAMUM LETTER PHASE-D SAQ;Lo;0;L;;;;;N;;;;;\n16965;BAMUM LETTER PHASE-D FAA;Lo;0;L;;;;;N;;;;;\n16966;BAMUM LETTER PHASE-E NDAP;Lo;0;L;;;;;N;;;;;\n16967;BAMUM LETTER PHASE-E TOON;Lo;0;L;;;;;N;;;;;\n16968;BAMUM LETTER PHASE-E MBEUM;Lo;0;L;;;;;N;;;;;\n16969;BAMUM LETTER PHASE-E LAP;Lo;0;L;;;;;N;;;;;\n1696A;BAMUM LETTER PHASE-E VOM;Lo;0;L;;;;;N;;;;;\n1696B;BAMUM LETTER PHASE-E LOON;Lo;0;L;;;;;N;;;;;\n1696C;BAMUM LETTER PHASE-E PAA;Lo;0;L;;;;;N;;;;;\n1696D;BAMUM LETTER PHASE-E SOM;Lo;0;L;;;;;N;;;;;\n1696E;BAMUM LETTER PHASE-E RAQ;Lo;0;L;;;;;N;;;;;\n1696F;BAMUM LETTER PHASE-E NSHUOP;Lo;0;L;;;;;N;;;;;\n16970;BAMUM LETTER PHASE-E NDUN;Lo;0;L;;;;;N;;;;;\n16971;BAMUM LETTER PHASE-E PUAE;Lo;0;L;;;;;N;;;;;\n16972;BAMUM LETTER PHASE-E TAM;Lo;0;L;;;;;N;;;;;\n16973;BAMUM LETTER PHASE-E NGKA;Lo;0;L;;;;;N;;;;;\n16974;BAMUM LETTER PHASE-E KPEUX;Lo;0;L;;;;;N;;;;;\n16975;BAMUM LETTER PHASE-E WUO;Lo;0;L;;;;;N;;;;;\n16976;BAMUM LETTER PHASE-E SEE;Lo;0;L;;;;;N;;;;;\n16977;BAMUM LETTER PHASE-E NGGEUAET;Lo;0;L;;;;;N;;;;;\n16978;BAMUM LETTER PHASE-E PAAM;Lo;0;L;;;;;N;;;;;\n16979;BAMUM LETTER PHASE-E TOO;Lo;0;L;;;;;N;;;;;\n1697A;BAMUM LETTER PHASE-E KUOP;Lo;0;L;;;;;N;;;;;\n1697B;BAMUM LETTER PHASE-E LOM;Lo;0;L;;;;;N;;;;;\n1697C;BAMUM LETTER PHASE-E NSHIEE;Lo;0;L;;;;;N;;;;;\n1697D;BAMUM LETTER PHASE-E NGOP;Lo;0;L;;;;;N;;;;;\n1697E;BAMUM LETTER PHASE-E MAEM;Lo;0;L;;;;;N;;;;;\n1697F;BAMUM LETTER PHASE-E NGKEUX;Lo;0;L;;;;;N;;;;;\n16980;BAMUM LETTER PHASE-E NGOQ;Lo;0;L;;;;;N;;;;;\n16981;BAMUM LETTER PHASE-E NSHUE;Lo;0;L;;;;;N;;;;;\n16982;BAMUM LETTER PHASE-E RIMGBA;Lo;0;L;;;;;N;;;;;\n16983;BAMUM LETTER PHASE-E NJEUX;Lo;0;L;;;;;N;;;;;\n16984;BAMUM LETTER PHASE-E PEEM;Lo;0;L;;;;;N;;;;;\n16985;BAMUM LETTER PHASE-E SAA;Lo;0;L;;;;;N;;;;;\n16986;BAMUM LETTER PHASE-E NGGURAE;Lo;0;L;;;;;N;;;;;\n16987;BAMUM LETTER PHASE-E MGBA;Lo;0;L;;;;;N;;;;;\n16988;BAMUM LETTER PHASE-E GHEUX;Lo;0;L;;;;;N;;;;;\n16989;BAMUM LETTER PHASE-E NGKEUAEM;Lo;0;L;;;;;N;;;;;\n1698A;BAMUM LETTER PHASE-E NJAEMLI;Lo;0;L;;;;;N;;;;;\n1698B;BAMUM LETTER PHASE-E MAP;Lo;0;L;;;;;N;;;;;\n1698C;BAMUM LETTER PHASE-E LOOT;Lo;0;L;;;;;N;;;;;\n1698D;BAMUM LETTER PHASE-E NGGEEEE;Lo;0;L;;;;;N;;;;;\n1698E;BAMUM LETTER PHASE-E NDIQ;Lo;0;L;;;;;N;;;;;\n1698F;BAMUM LETTER PHASE-E TAEN NTEUM;Lo;0;L;;;;;N;;;;;\n16990;BAMUM LETTER PHASE-E SET;Lo;0;L;;;;;N;;;;;\n16991;BAMUM LETTER PHASE-E PUM;Lo;0;L;;;;;N;;;;;\n16992;BAMUM LETTER PHASE-E NDAA SOFTNESS;Lo;0;L;;;;;N;;;;;\n16993;BAMUM LETTER PHASE-E NGGUAESHAE NYAM;Lo;0;L;;;;;N;;;;;\n16994;BAMUM LETTER PHASE-E YIEE;Lo;0;L;;;;;N;;;;;\n16995;BAMUM LETTER PHASE-E GHEUN;Lo;0;L;;;;;N;;;;;\n16996;BAMUM LETTER PHASE-E TUAE;Lo;0;L;;;;;N;;;;;\n16997;BAMUM LETTER PHASE-E YEUAE;Lo;0;L;;;;;N;;;;;\n16998;BAMUM LETTER PHASE-E PO;Lo;0;L;;;;;N;;;;;\n16999;BAMUM LETTER PHASE-E TUMAE;Lo;0;L;;;;;N;;;;;\n1699A;BAMUM LETTER PHASE-E KEUAE;Lo;0;L;;;;;N;;;;;\n1699B;BAMUM LETTER PHASE-E SUAEN;Lo;0;L;;;;;N;;;;;\n1699C;BAMUM LETTER PHASE-E TEUAEQ;Lo;0;L;;;;;N;;;;;\n1699D;BAMUM LETTER PHASE-E VEUAE;Lo;0;L;;;;;N;;;;;\n1699E;BAMUM LETTER PHASE-E WEUX;Lo;0;L;;;;;N;;;;;\n1699F;BAMUM LETTER PHASE-E LAAM;Lo;0;L;;;;;N;;;;;\n169A0;BAMUM LETTER PHASE-E PU;Lo;0;L;;;;;N;;;;;\n169A1;BAMUM LETTER PHASE-E TAAQ;Lo;0;L;;;;;N;;;;;\n169A2;BAMUM LETTER PHASE-E GHAAMAE;Lo;0;L;;;;;N;;;;;\n169A3;BAMUM LETTER PHASE-E NGEUREUT;Lo;0;L;;;;;N;;;;;\n169A4;BAMUM LETTER PHASE-E SHEUAEQ;Lo;0;L;;;;;N;;;;;\n169A5;BAMUM LETTER PHASE-E MGBEN;Lo;0;L;;;;;N;;;;;\n169A6;BAMUM LETTER PHASE-E MBEE;Lo;0;L;;;;;N;;;;;\n169A7;BAMUM LETTER PHASE-E NZAQ;Lo;0;L;;;;;N;;;;;\n169A8;BAMUM LETTER PHASE-E NKOM;Lo;0;L;;;;;N;;;;;\n169A9;BAMUM LETTER PHASE-E GBET;Lo;0;L;;;;;N;;;;;\n169AA;BAMUM LETTER PHASE-E TUM;Lo;0;L;;;;;N;;;;;\n169AB;BAMUM LETTER PHASE-E KUET;Lo;0;L;;;;;N;;;;;\n169AC;BAMUM LETTER PHASE-E YAP;Lo;0;L;;;;;N;;;;;\n169AD;BAMUM LETTER PHASE-E NYI CLEAVER;Lo;0;L;;;;;N;;;;;\n169AE;BAMUM LETTER PHASE-E YIT;Lo;0;L;;;;;N;;;;;\n169AF;BAMUM LETTER PHASE-E MFEUQ;Lo;0;L;;;;;N;;;;;\n169B0;BAMUM LETTER PHASE-E NDIAQ;Lo;0;L;;;;;N;;;;;\n169B1;BAMUM LETTER PHASE-E PIEEQ;Lo;0;L;;;;;N;;;;;\n169B2;BAMUM LETTER PHASE-E YUEQ;Lo;0;L;;;;;N;;;;;\n169B3;BAMUM LETTER PHASE-E LEUAEM;Lo;0;L;;;;;N;;;;;\n169B4;BAMUM LETTER PHASE-E FUE;Lo;0;L;;;;;N;;;;;\n169B5;BAMUM LETTER PHASE-E GBEUX;Lo;0;L;;;;;N;;;;;\n169B6;BAMUM LETTER PHASE-E NGKUP;Lo;0;L;;;;;N;;;;;\n169B7;BAMUM LETTER PHASE-E KET;Lo;0;L;;;;;N;;;;;\n169B8;BAMUM LETTER PHASE-E MAE;Lo;0;L;;;;;N;;;;;\n169B9;BAMUM LETTER PHASE-E NGKAAMI;Lo;0;L;;;;;N;;;;;\n169BA;BAMUM LETTER PHASE-E GHET;Lo;0;L;;;;;N;;;;;\n169BB;BAMUM LETTER PHASE-E FA;Lo;0;L;;;;;N;;;;;\n169BC;BAMUM LETTER PHASE-E NTUM;Lo;0;L;;;;;N;;;;;\n169BD;BAMUM LETTER PHASE-E PEUT;Lo;0;L;;;;;N;;;;;\n169BE;BAMUM LETTER PHASE-E YEUM;Lo;0;L;;;;;N;;;;;\n169BF;BAMUM LETTER PHASE-E NGGEUAE;Lo;0;L;;;;;N;;;;;\n169C0;BAMUM LETTER PHASE-E NYI BETWEEN;Lo;0;L;;;;;N;;;;;\n169C1;BAMUM LETTER PHASE-E NZUQ;Lo;0;L;;;;;N;;;;;\n169C2;BAMUM LETTER PHASE-E POON;Lo;0;L;;;;;N;;;;;\n169C3;BAMUM LETTER PHASE-E MIEE;Lo;0;L;;;;;N;;;;;\n169C4;BAMUM LETTER PHASE-E FUET;Lo;0;L;;;;;N;;;;;\n169C5;BAMUM LETTER PHASE-E NAE;Lo;0;L;;;;;N;;;;;\n169C6;BAMUM LETTER PHASE-E MUAE;Lo;0;L;;;;;N;;;;;\n169C7;BAMUM LETTER PHASE-E GHEUAE;Lo;0;L;;;;;N;;;;;\n169C8;BAMUM LETTER PHASE-E FU I;Lo;0;L;;;;;N;;;;;\n169C9;BAMUM LETTER PHASE-E MVI;Lo;0;L;;;;;N;;;;;\n169CA;BAMUM LETTER PHASE-E PUAQ;Lo;0;L;;;;;N;;;;;\n169CB;BAMUM LETTER PHASE-E NGKUM;Lo;0;L;;;;;N;;;;;\n169CC;BAMUM LETTER PHASE-E KUT;Lo;0;L;;;;;N;;;;;\n169CD;BAMUM LETTER PHASE-E PIET;Lo;0;L;;;;;N;;;;;\n169CE;BAMUM LETTER PHASE-E NTAP;Lo;0;L;;;;;N;;;;;\n169CF;BAMUM LETTER PHASE-E YEUAET;Lo;0;L;;;;;N;;;;;\n169D0;BAMUM LETTER PHASE-E NGGUP;Lo;0;L;;;;;N;;;;;\n169D1;BAMUM LETTER PHASE-E PA PEOPLE;Lo;0;L;;;;;N;;;;;\n169D2;BAMUM LETTER PHASE-E FU CALL;Lo;0;L;;;;;N;;;;;\n169D3;BAMUM LETTER PHASE-E FOM;Lo;0;L;;;;;N;;;;;\n169D4;BAMUM LETTER PHASE-E NJEE;Lo;0;L;;;;;N;;;;;\n169D5;BAMUM LETTER PHASE-E A;Lo;0;L;;;;;N;;;;;\n169D6;BAMUM LETTER PHASE-E TOQ;Lo;0;L;;;;;N;;;;;\n169D7;BAMUM LETTER PHASE-E O;Lo;0;L;;;;;N;;;;;\n169D8;BAMUM LETTER PHASE-E I;Lo;0;L;;;;;N;;;;;\n169D9;BAMUM LETTER PHASE-E LAQ;Lo;0;L;;;;;N;;;;;\n169DA;BAMUM LETTER PHASE-E PA PLURAL;Lo;0;L;;;;;N;;;;;\n169DB;BAMUM LETTER PHASE-E TAA;Lo;0;L;;;;;N;;;;;\n169DC;BAMUM LETTER PHASE-E TAQ;Lo;0;L;;;;;N;;;;;\n169DD;BAMUM LETTER PHASE-E NDAA MY HOUSE;Lo;0;L;;;;;N;;;;;\n169DE;BAMUM LETTER PHASE-E SHIQ;Lo;0;L;;;;;N;;;;;\n169DF;BAMUM LETTER PHASE-E YEUX;Lo;0;L;;;;;N;;;;;\n169E0;BAMUM LETTER PHASE-E NGUAE;Lo;0;L;;;;;N;;;;;\n169E1;BAMUM LETTER PHASE-E YUAEN;Lo;0;L;;;;;N;;;;;\n169E2;BAMUM LETTER PHASE-E YOQ SWIMMING;Lo;0;L;;;;;N;;;;;\n169E3;BAMUM LETTER PHASE-E YOQ COVER;Lo;0;L;;;;;N;;;;;\n169E4;BAMUM LETTER PHASE-E YUQ;Lo;0;L;;;;;N;;;;;\n169E5;BAMUM LETTER PHASE-E YUN;Lo;0;L;;;;;N;;;;;\n169E6;BAMUM LETTER PHASE-E KEUX;Lo;0;L;;;;;N;;;;;\n169E7;BAMUM LETTER PHASE-E PEUX;Lo;0;L;;;;;N;;;;;\n169E8;BAMUM LETTER PHASE-E NJEE EPOCH;Lo;0;L;;;;;N;;;;;\n169E9;BAMUM LETTER PHASE-E PUE;Lo;0;L;;;;;N;;;;;\n169EA;BAMUM LETTER PHASE-E WUE;Lo;0;L;;;;;N;;;;;\n169EB;BAMUM LETTER PHASE-E FEE;Lo;0;L;;;;;N;;;;;\n169EC;BAMUM LETTER PHASE-E VEE;Lo;0;L;;;;;N;;;;;\n169ED;BAMUM LETTER PHASE-E LU;Lo;0;L;;;;;N;;;;;\n169EE;BAMUM LETTER PHASE-E MI;Lo;0;L;;;;;N;;;;;\n169EF;BAMUM LETTER PHASE-E REUX;Lo;0;L;;;;;N;;;;;\n169F0;BAMUM LETTER PHASE-E RAE;Lo;0;L;;;;;N;;;;;\n169F1;BAMUM LETTER PHASE-E NGUAET;Lo;0;L;;;;;N;;;;;\n169F2;BAMUM LETTER PHASE-E NGA;Lo;0;L;;;;;N;;;;;\n169F3;BAMUM LETTER PHASE-E SHO;Lo;0;L;;;;;N;;;;;\n169F4;BAMUM LETTER PHASE-E SHOQ;Lo;0;L;;;;;N;;;;;\n169F5;BAMUM LETTER PHASE-E FU REMEDY;Lo;0;L;;;;;N;;;;;\n169F6;BAMUM LETTER PHASE-E NA;Lo;0;L;;;;;N;;;;;\n169F7;BAMUM LETTER PHASE-E PI;Lo;0;L;;;;;N;;;;;\n169F8;BAMUM LETTER PHASE-E LOQ;Lo;0;L;;;;;N;;;;;\n169F9;BAMUM LETTER PHASE-E KO;Lo;0;L;;;;;N;;;;;\n169FA;BAMUM LETTER PHASE-E MEN;Lo;0;L;;;;;N;;;;;\n169FB;BAMUM LETTER PHASE-E MA;Lo;0;L;;;;;N;;;;;\n169FC;BAMUM LETTER PHASE-E MAQ;Lo;0;L;;;;;N;;;;;\n169FD;BAMUM LETTER PHASE-E TEU;Lo;0;L;;;;;N;;;;;\n169FE;BAMUM LETTER PHASE-E KI;Lo;0;L;;;;;N;;;;;\n169FF;BAMUM LETTER PHASE-E MON;Lo;0;L;;;;;N;;;;;\n16A00;BAMUM LETTER PHASE-E TEN;Lo;0;L;;;;;N;;;;;\n16A01;BAMUM LETTER PHASE-E FAQ;Lo;0;L;;;;;N;;;;;\n16A02;BAMUM LETTER PHASE-E GHOM;Lo;0;L;;;;;N;;;;;\n16A03;BAMUM LETTER PHASE-F KA;Lo;0;L;;;;;N;;;;;\n16A04;BAMUM LETTER PHASE-F U;Lo;0;L;;;;;N;;;;;\n16A05;BAMUM LETTER PHASE-F KU;Lo;0;L;;;;;N;;;;;\n16A06;BAMUM LETTER PHASE-F EE;Lo;0;L;;;;;N;;;;;\n16A07;BAMUM LETTER PHASE-F REE;Lo;0;L;;;;;N;;;;;\n16A08;BAMUM LETTER PHASE-F TAE;Lo;0;L;;;;;N;;;;;\n16A09;BAMUM LETTER PHASE-F NYI;Lo;0;L;;;;;N;;;;;\n16A0A;BAMUM LETTER PHASE-F LA;Lo;0;L;;;;;N;;;;;\n16A0B;BAMUM LETTER PHASE-F RII;Lo;0;L;;;;;N;;;;;\n16A0C;BAMUM LETTER PHASE-F RIEE;Lo;0;L;;;;;N;;;;;\n16A0D;BAMUM LETTER PHASE-F MEEEE;Lo;0;L;;;;;N;;;;;\n16A0E;BAMUM LETTER PHASE-F TAA;Lo;0;L;;;;;N;;;;;\n16A0F;BAMUM LETTER PHASE-F NDAA;Lo;0;L;;;;;N;;;;;\n16A10;BAMUM LETTER PHASE-F NJAEM;Lo;0;L;;;;;N;;;;;\n16A11;BAMUM LETTER PHASE-F M;Lo;0;L;;;;;N;;;;;\n16A12;BAMUM LETTER PHASE-F SUU;Lo;0;L;;;;;N;;;;;\n16A13;BAMUM LETTER PHASE-F SHII;Lo;0;L;;;;;N;;;;;\n16A14;BAMUM LETTER PHASE-F SI;Lo;0;L;;;;;N;;;;;\n16A15;BAMUM LETTER PHASE-F SEUX;Lo;0;L;;;;;N;;;;;\n16A16;BAMUM LETTER PHASE-F KYEE;Lo;0;L;;;;;N;;;;;\n16A17;BAMUM LETTER PHASE-F KET;Lo;0;L;;;;;N;;;;;\n16A18;BAMUM LETTER PHASE-F NUAE;Lo;0;L;;;;;N;;;;;\n16A19;BAMUM LETTER PHASE-F NU;Lo;0;L;;;;;N;;;;;\n16A1A;BAMUM LETTER PHASE-F NJUAE;Lo;0;L;;;;;N;;;;;\n16A1B;BAMUM LETTER PHASE-F YOQ;Lo;0;L;;;;;N;;;;;\n16A1C;BAMUM LETTER PHASE-F SHU;Lo;0;L;;;;;N;;;;;\n16A1D;BAMUM LETTER PHASE-F YA;Lo;0;L;;;;;N;;;;;\n16A1E;BAMUM LETTER PHASE-F NSHA;Lo;0;L;;;;;N;;;;;\n16A1F;BAMUM LETTER PHASE-F PEUX;Lo;0;L;;;;;N;;;;;\n16A20;BAMUM LETTER PHASE-F NTEE;Lo;0;L;;;;;N;;;;;\n16A21;BAMUM LETTER PHASE-F WUE;Lo;0;L;;;;;N;;;;;\n16A22;BAMUM LETTER PHASE-F PEE;Lo;0;L;;;;;N;;;;;\n16A23;BAMUM LETTER PHASE-F RU;Lo;0;L;;;;;N;;;;;\n16A24;BAMUM LETTER PHASE-F NI;Lo;0;L;;;;;N;;;;;\n16A25;BAMUM LETTER PHASE-F REUX;Lo;0;L;;;;;N;;;;;\n16A26;BAMUM LETTER PHASE-F KEN;Lo;0;L;;;;;N;;;;;\n16A27;BAMUM LETTER PHASE-F NGKWAEN;Lo;0;L;;;;;N;;;;;\n16A28;BAMUM LETTER PHASE-F NGGA;Lo;0;L;;;;;N;;;;;\n16A29;BAMUM LETTER PHASE-F SHO;Lo;0;L;;;;;N;;;;;\n16A2A;BAMUM LETTER PHASE-F PUAE;Lo;0;L;;;;;N;;;;;\n16A2B;BAMUM LETTER PHASE-F FOM;Lo;0;L;;;;;N;;;;;\n16A2C;BAMUM LETTER PHASE-F WA;Lo;0;L;;;;;N;;;;;\n16A2D;BAMUM LETTER PHASE-F LI;Lo;0;L;;;;;N;;;;;\n16A2E;BAMUM LETTER PHASE-F LOQ;Lo;0;L;;;;;N;;;;;\n16A2F;BAMUM LETTER PHASE-F KO;Lo;0;L;;;;;N;;;;;\n16A30;BAMUM LETTER PHASE-F MBEN;Lo;0;L;;;;;N;;;;;\n16A31;BAMUM LETTER PHASE-F REN;Lo;0;L;;;;;N;;;;;\n16A32;BAMUM LETTER PHASE-F MA;Lo;0;L;;;;;N;;;;;\n16A33;BAMUM LETTER PHASE-F MO;Lo;0;L;;;;;N;;;;;\n16A34;BAMUM LETTER PHASE-F MBAA;Lo;0;L;;;;;N;;;;;\n16A35;BAMUM LETTER PHASE-F TET;Lo;0;L;;;;;N;;;;;\n16A36;BAMUM LETTER PHASE-F KPA;Lo;0;L;;;;;N;;;;;\n16A37;BAMUM LETTER PHASE-F SAMBA;Lo;0;L;;;;;N;;;;;\n16A38;BAMUM LETTER PHASE-F VUEQ;Lo;0;L;;;;;N;;;;;\n16A40;MRO LETTER TA;Lo;0;L;;;;;N;;;;;\n16A41;MRO LETTER NGI;Lo;0;L;;;;;N;;;;;\n16A42;MRO LETTER YO;Lo;0;L;;;;;N;;;;;\n16A43;MRO LETTER MIM;Lo;0;L;;;;;N;;;;;\n16A44;MRO LETTER BA;Lo;0;L;;;;;N;;;;;\n16A45;MRO LETTER DA;Lo;0;L;;;;;N;;;;;\n16A46;MRO LETTER A;Lo;0;L;;;;;N;;;;;\n16A47;MRO LETTER PHI;Lo;0;L;;;;;N;;;;;\n16A48;MRO LETTER KHAI;Lo;0;L;;;;;N;;;;;\n16A49;MRO LETTER HAO;Lo;0;L;;;;;N;;;;;\n16A4A;MRO LETTER DAI;Lo;0;L;;;;;N;;;;;\n16A4B;MRO LETTER CHU;Lo;0;L;;;;;N;;;;;\n16A4C;MRO LETTER KEAAE;Lo;0;L;;;;;N;;;;;\n16A4D;MRO LETTER OL;Lo;0;L;;;;;N;;;;;\n16A4E;MRO LETTER MAEM;Lo;0;L;;;;;N;;;;;\n16A4F;MRO LETTER NIN;Lo;0;L;;;;;N;;;;;\n16A50;MRO LETTER PA;Lo;0;L;;;;;N;;;;;\n16A51;MRO LETTER OO;Lo;0;L;;;;;N;;;;;\n16A52;MRO LETTER O;Lo;0;L;;;;;N;;;;;\n16A53;MRO LETTER RO;Lo;0;L;;;;;N;;;;;\n16A54;MRO LETTER SHI;Lo;0;L;;;;;N;;;;;\n16A55;MRO LETTER THEA;Lo;0;L;;;;;N;;;;;\n16A56;MRO LETTER EA;Lo;0;L;;;;;N;;;;;\n16A57;MRO LETTER WA;Lo;0;L;;;;;N;;;;;\n16A58;MRO LETTER E;Lo;0;L;;;;;N;;;;;\n16A59;MRO LETTER KO;Lo;0;L;;;;;N;;;;;\n16A5A;MRO LETTER LAN;Lo;0;L;;;;;N;;;;;\n16A5B;MRO LETTER LA;Lo;0;L;;;;;N;;;;;\n16A5C;MRO LETTER HAI;Lo;0;L;;;;;N;;;;;\n16A5D;MRO LETTER RI;Lo;0;L;;;;;N;;;;;\n16A5E;MRO LETTER TEK;Lo;0;L;;;;;N;;;;;\n16A60;MRO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n16A61;MRO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n16A62;MRO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n16A63;MRO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n16A64;MRO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n16A65;MRO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n16A66;MRO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n16A67;MRO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n16A68;MRO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n16A69;MRO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n16A6E;MRO DANDA;Po;0;L;;;;;N;;;;;\n16A6F;MRO DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n16A70;TANGSA LETTER OZ;Lo;0;L;;;;;N;;;;;\n16A71;TANGSA LETTER OC;Lo;0;L;;;;;N;;;;;\n16A72;TANGSA LETTER OQ;Lo;0;L;;;;;N;;;;;\n16A73;TANGSA LETTER OX;Lo;0;L;;;;;N;;;;;\n16A74;TANGSA LETTER AZ;Lo;0;L;;;;;N;;;;;\n16A75;TANGSA LETTER AC;Lo;0;L;;;;;N;;;;;\n16A76;TANGSA LETTER AQ;Lo;0;L;;;;;N;;;;;\n16A77;TANGSA LETTER AX;Lo;0;L;;;;;N;;;;;\n16A78;TANGSA LETTER VZ;Lo;0;L;;;;;N;;;;;\n16A79;TANGSA LETTER VC;Lo;0;L;;;;;N;;;;;\n16A7A;TANGSA LETTER VQ;Lo;0;L;;;;;N;;;;;\n16A7B;TANGSA LETTER VX;Lo;0;L;;;;;N;;;;;\n16A7C;TANGSA LETTER EZ;Lo;0;L;;;;;N;;;;;\n16A7D;TANGSA LETTER EC;Lo;0;L;;;;;N;;;;;\n16A7E;TANGSA LETTER EQ;Lo;0;L;;;;;N;;;;;\n16A7F;TANGSA LETTER EX;Lo;0;L;;;;;N;;;;;\n16A80;TANGSA LETTER IZ;Lo;0;L;;;;;N;;;;;\n16A81;TANGSA LETTER IC;Lo;0;L;;;;;N;;;;;\n16A82;TANGSA LETTER IQ;Lo;0;L;;;;;N;;;;;\n16A83;TANGSA LETTER IX;Lo;0;L;;;;;N;;;;;\n16A84;TANGSA LETTER UZ;Lo;0;L;;;;;N;;;;;\n16A85;TANGSA LETTER UC;Lo;0;L;;;;;N;;;;;\n16A86;TANGSA LETTER UQ;Lo;0;L;;;;;N;;;;;\n16A87;TANGSA LETTER UX;Lo;0;L;;;;;N;;;;;\n16A88;TANGSA LETTER AWZ;Lo;0;L;;;;;N;;;;;\n16A89;TANGSA LETTER AWC;Lo;0;L;;;;;N;;;;;\n16A8A;TANGSA LETTER AWQ;Lo;0;L;;;;;N;;;;;\n16A8B;TANGSA LETTER AWX;Lo;0;L;;;;;N;;;;;\n16A8C;TANGSA LETTER UIZ;Lo;0;L;;;;;N;;;;;\n16A8D;TANGSA LETTER UIC;Lo;0;L;;;;;N;;;;;\n16A8E;TANGSA LETTER UIQ;Lo;0;L;;;;;N;;;;;\n16A8F;TANGSA LETTER UIX;Lo;0;L;;;;;N;;;;;\n16A90;TANGSA LETTER FINAL NG;Lo;0;L;;;;;N;;;;;\n16A91;TANGSA LETTER LONG UEX;Lo;0;L;;;;;N;;;;;\n16A92;TANGSA LETTER SHORT UEZ;Lo;0;L;;;;;N;;;;;\n16A93;TANGSA LETTER SHORT AWX;Lo;0;L;;;;;N;;;;;\n16A94;TANGSA LETTER UEC;Lo;0;L;;;;;N;;;;;\n16A95;TANGSA LETTER UEZ;Lo;0;L;;;;;N;;;;;\n16A96;TANGSA LETTER UEQ;Lo;0;L;;;;;N;;;;;\n16A97;TANGSA LETTER UEX;Lo;0;L;;;;;N;;;;;\n16A98;TANGSA LETTER UIUZ;Lo;0;L;;;;;N;;;;;\n16A99;TANGSA LETTER UIUC;Lo;0;L;;;;;N;;;;;\n16A9A;TANGSA LETTER UIUQ;Lo;0;L;;;;;N;;;;;\n16A9B;TANGSA LETTER UIUX;Lo;0;L;;;;;N;;;;;\n16A9C;TANGSA LETTER MZ;Lo;0;L;;;;;N;;;;;\n16A9D;TANGSA LETTER MC;Lo;0;L;;;;;N;;;;;\n16A9E;TANGSA LETTER MQ;Lo;0;L;;;;;N;;;;;\n16A9F;TANGSA LETTER MX;Lo;0;L;;;;;N;;;;;\n16AA0;TANGSA LETTER KA;Lo;0;L;;;;;N;;;;;\n16AA1;TANGSA LETTER KHA;Lo;0;L;;;;;N;;;;;\n16AA2;TANGSA LETTER GA;Lo;0;L;;;;;N;;;;;\n16AA3;TANGSA LETTER NGA;Lo;0;L;;;;;N;;;;;\n16AA4;TANGSA LETTER SA;Lo;0;L;;;;;N;;;;;\n16AA5;TANGSA LETTER YA;Lo;0;L;;;;;N;;;;;\n16AA6;TANGSA LETTER WA;Lo;0;L;;;;;N;;;;;\n16AA7;TANGSA LETTER PA;Lo;0;L;;;;;N;;;;;\n16AA8;TANGSA LETTER NYA;Lo;0;L;;;;;N;;;;;\n16AA9;TANGSA LETTER PHA;Lo;0;L;;;;;N;;;;;\n16AAA;TANGSA LETTER BA;Lo;0;L;;;;;N;;;;;\n16AAB;TANGSA LETTER MA;Lo;0;L;;;;;N;;;;;\n16AAC;TANGSA LETTER NA;Lo;0;L;;;;;N;;;;;\n16AAD;TANGSA LETTER HA;Lo;0;L;;;;;N;;;;;\n16AAE;TANGSA LETTER LA;Lo;0;L;;;;;N;;;;;\n16AAF;TANGSA LETTER HTA;Lo;0;L;;;;;N;;;;;\n16AB0;TANGSA LETTER TA;Lo;0;L;;;;;N;;;;;\n16AB1;TANGSA LETTER DA;Lo;0;L;;;;;N;;;;;\n16AB2;TANGSA LETTER RA;Lo;0;L;;;;;N;;;;;\n16AB3;TANGSA LETTER NHA;Lo;0;L;;;;;N;;;;;\n16AB4;TANGSA LETTER SHA;Lo;0;L;;;;;N;;;;;\n16AB5;TANGSA LETTER CA;Lo;0;L;;;;;N;;;;;\n16AB6;TANGSA LETTER TSA;Lo;0;L;;;;;N;;;;;\n16AB7;TANGSA LETTER GHA;Lo;0;L;;;;;N;;;;;\n16AB8;TANGSA LETTER HTTA;Lo;0;L;;;;;N;;;;;\n16AB9;TANGSA LETTER THA;Lo;0;L;;;;;N;;;;;\n16ABA;TANGSA LETTER XA;Lo;0;L;;;;;N;;;;;\n16ABB;TANGSA LETTER FA;Lo;0;L;;;;;N;;;;;\n16ABC;TANGSA LETTER DHA;Lo;0;L;;;;;N;;;;;\n16ABD;TANGSA LETTER CHA;Lo;0;L;;;;;N;;;;;\n16ABE;TANGSA LETTER ZA;Lo;0;L;;;;;N;;;;;\n16AC0;TANGSA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n16AC1;TANGSA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n16AC2;TANGSA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n16AC3;TANGSA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n16AC4;TANGSA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n16AC5;TANGSA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n16AC6;TANGSA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n16AC7;TANGSA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n16AC8;TANGSA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n16AC9;TANGSA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n16AD0;BASSA VAH LETTER ENNI;Lo;0;L;;;;;N;;;;;\n16AD1;BASSA VAH LETTER KA;Lo;0;L;;;;;N;;;;;\n16AD2;BASSA VAH LETTER SE;Lo;0;L;;;;;N;;;;;\n16AD3;BASSA VAH LETTER FA;Lo;0;L;;;;;N;;;;;\n16AD4;BASSA VAH LETTER MBE;Lo;0;L;;;;;N;;;;;\n16AD5;BASSA VAH LETTER YIE;Lo;0;L;;;;;N;;;;;\n16AD6;BASSA VAH LETTER GAH;Lo;0;L;;;;;N;;;;;\n16AD7;BASSA VAH LETTER DHII;Lo;0;L;;;;;N;;;;;\n16AD8;BASSA VAH LETTER KPAH;Lo;0;L;;;;;N;;;;;\n16AD9;BASSA VAH LETTER JO;Lo;0;L;;;;;N;;;;;\n16ADA;BASSA VAH LETTER HWAH;Lo;0;L;;;;;N;;;;;\n16ADB;BASSA VAH LETTER WA;Lo;0;L;;;;;N;;;;;\n16ADC;BASSA VAH LETTER ZO;Lo;0;L;;;;;N;;;;;\n16ADD;BASSA VAH LETTER GBU;Lo;0;L;;;;;N;;;;;\n16ADE;BASSA VAH LETTER DO;Lo;0;L;;;;;N;;;;;\n16ADF;BASSA VAH LETTER CE;Lo;0;L;;;;;N;;;;;\n16AE0;BASSA VAH LETTER UWU;Lo;0;L;;;;;N;;;;;\n16AE1;BASSA VAH LETTER TO;Lo;0;L;;;;;N;;;;;\n16AE2;BASSA VAH LETTER BA;Lo;0;L;;;;;N;;;;;\n16AE3;BASSA VAH LETTER VU;Lo;0;L;;;;;N;;;;;\n16AE4;BASSA VAH LETTER YEIN;Lo;0;L;;;;;N;;;;;\n16AE5;BASSA VAH LETTER PA;Lo;0;L;;;;;N;;;;;\n16AE6;BASSA VAH LETTER WADDA;Lo;0;L;;;;;N;;;;;\n16AE7;BASSA VAH LETTER A;Lo;0;L;;;;;N;;;;;\n16AE8;BASSA VAH LETTER O;Lo;0;L;;;;;N;;;;;\n16AE9;BASSA VAH LETTER OO;Lo;0;L;;;;;N;;;;;\n16AEA;BASSA VAH LETTER U;Lo;0;L;;;;;N;;;;;\n16AEB;BASSA VAH LETTER EE;Lo;0;L;;;;;N;;;;;\n16AEC;BASSA VAH LETTER E;Lo;0;L;;;;;N;;;;;\n16AED;BASSA VAH LETTER I;Lo;0;L;;;;;N;;;;;\n16AF0;BASSA VAH COMBINING HIGH TONE;Mn;1;NSM;;;;;N;;;;;\n16AF1;BASSA VAH COMBINING LOW TONE;Mn;1;NSM;;;;;N;;;;;\n16AF2;BASSA VAH COMBINING MID TONE;Mn;1;NSM;;;;;N;;;;;\n16AF3;BASSA VAH COMBINING LOW-MID TONE;Mn;1;NSM;;;;;N;;;;;\n16AF4;BASSA VAH COMBINING HIGH-LOW TONE;Mn;1;NSM;;;;;N;;;;;\n16AF5;BASSA VAH FULL STOP;Po;0;L;;;;;N;;;;;\n16B00;PAHAWH HMONG VOWEL KEEB;Lo;0;L;;;;;N;;;;;\n16B01;PAHAWH HMONG VOWEL KEEV;Lo;0;L;;;;;N;;;;;\n16B02;PAHAWH HMONG VOWEL KIB;Lo;0;L;;;;;N;;;;;\n16B03;PAHAWH HMONG VOWEL KIV;Lo;0;L;;;;;N;;;;;\n16B04;PAHAWH HMONG VOWEL KAUB;Lo;0;L;;;;;N;;;;;\n16B05;PAHAWH HMONG VOWEL KAUV;Lo;0;L;;;;;N;;;;;\n16B06;PAHAWH HMONG VOWEL KUB;Lo;0;L;;;;;N;;;;;\n16B07;PAHAWH HMONG VOWEL KUV;Lo;0;L;;;;;N;;;;;\n16B08;PAHAWH HMONG VOWEL KEB;Lo;0;L;;;;;N;;;;;\n16B09;PAHAWH HMONG VOWEL KEV;Lo;0;L;;;;;N;;;;;\n16B0A;PAHAWH HMONG VOWEL KAIB;Lo;0;L;;;;;N;;;;;\n16B0B;PAHAWH HMONG VOWEL KAIV;Lo;0;L;;;;;N;;;;;\n16B0C;PAHAWH HMONG VOWEL KOOB;Lo;0;L;;;;;N;;;;;\n16B0D;PAHAWH HMONG VOWEL KOOV;Lo;0;L;;;;;N;;;;;\n16B0E;PAHAWH HMONG VOWEL KAWB;Lo;0;L;;;;;N;;;;;\n16B0F;PAHAWH HMONG VOWEL KAWV;Lo;0;L;;;;;N;;;;;\n16B10;PAHAWH HMONG VOWEL KUAB;Lo;0;L;;;;;N;;;;;\n16B11;PAHAWH HMONG VOWEL KUAV;Lo;0;L;;;;;N;;;;;\n16B12;PAHAWH HMONG VOWEL KOB;Lo;0;L;;;;;N;;;;;\n16B13;PAHAWH HMONG VOWEL KOV;Lo;0;L;;;;;N;;;;;\n16B14;PAHAWH HMONG VOWEL KIAB;Lo;0;L;;;;;N;;;;;\n16B15;PAHAWH HMONG VOWEL KIAV;Lo;0;L;;;;;N;;;;;\n16B16;PAHAWH HMONG VOWEL KAB;Lo;0;L;;;;;N;;;;;\n16B17;PAHAWH HMONG VOWEL KAV;Lo;0;L;;;;;N;;;;;\n16B18;PAHAWH HMONG VOWEL KWB;Lo;0;L;;;;;N;;;;;\n16B19;PAHAWH HMONG VOWEL KWV;Lo;0;L;;;;;N;;;;;\n16B1A;PAHAWH HMONG VOWEL KAAB;Lo;0;L;;;;;N;;;;;\n16B1B;PAHAWH HMONG VOWEL KAAV;Lo;0;L;;;;;N;;;;;\n16B1C;PAHAWH HMONG CONSONANT VAU;Lo;0;L;;;;;N;;;;;\n16B1D;PAHAWH HMONG CONSONANT NTSAU;Lo;0;L;;;;;N;;;;;\n16B1E;PAHAWH HMONG CONSONANT LAU;Lo;0;L;;;;;N;;;;;\n16B1F;PAHAWH HMONG CONSONANT HAU;Lo;0;L;;;;;N;;;;;\n16B20;PAHAWH HMONG CONSONANT NLAU;Lo;0;L;;;;;N;;;;;\n16B21;PAHAWH HMONG CONSONANT RAU;Lo;0;L;;;;;N;;;;;\n16B22;PAHAWH HMONG CONSONANT NKAU;Lo;0;L;;;;;N;;;;;\n16B23;PAHAWH HMONG CONSONANT QHAU;Lo;0;L;;;;;N;;;;;\n16B24;PAHAWH HMONG CONSONANT YAU;Lo;0;L;;;;;N;;;;;\n16B25;PAHAWH HMONG CONSONANT HLAU;Lo;0;L;;;;;N;;;;;\n16B26;PAHAWH HMONG CONSONANT MAU;Lo;0;L;;;;;N;;;;;\n16B27;PAHAWH HMONG CONSONANT CHAU;Lo;0;L;;;;;N;;;;;\n16B28;PAHAWH HMONG CONSONANT NCHAU;Lo;0;L;;;;;N;;;;;\n16B29;PAHAWH HMONG CONSONANT HNAU;Lo;0;L;;;;;N;;;;;\n16B2A;PAHAWH HMONG CONSONANT PLHAU;Lo;0;L;;;;;N;;;;;\n16B2B;PAHAWH HMONG CONSONANT NTHAU;Lo;0;L;;;;;N;;;;;\n16B2C;PAHAWH HMONG CONSONANT NAU;Lo;0;L;;;;;N;;;;;\n16B2D;PAHAWH HMONG CONSONANT AU;Lo;0;L;;;;;N;;;;;\n16B2E;PAHAWH HMONG CONSONANT XAU;Lo;0;L;;;;;N;;;;;\n16B2F;PAHAWH HMONG CONSONANT CAU;Lo;0;L;;;;;N;;;;;\n16B30;PAHAWH HMONG MARK CIM TUB;Mn;230;NSM;;;;;N;;;;;\n16B31;PAHAWH HMONG MARK CIM SO;Mn;230;NSM;;;;;N;;;;;\n16B32;PAHAWH HMONG MARK CIM KES;Mn;230;NSM;;;;;N;;;;;\n16B33;PAHAWH HMONG MARK CIM KHAV;Mn;230;NSM;;;;;N;;;;;\n16B34;PAHAWH HMONG MARK CIM SUAM;Mn;230;NSM;;;;;N;;;;;\n16B35;PAHAWH HMONG MARK CIM HOM;Mn;230;NSM;;;;;N;;;;;\n16B36;PAHAWH HMONG MARK CIM TAUM;Mn;230;NSM;;;;;N;;;;;\n16B37;PAHAWH HMONG SIGN VOS THOM;Po;0;L;;;;;N;;;;;\n16B38;PAHAWH HMONG SIGN VOS TSHAB CEEB;Po;0;L;;;;;N;;;;;\n16B39;PAHAWH HMONG SIGN CIM CHEEM;Po;0;L;;;;;N;;;;;\n16B3A;PAHAWH HMONG SIGN VOS THIAB;Po;0;L;;;;;N;;;;;\n16B3B;PAHAWH HMONG SIGN VOS FEEM;Po;0;L;;;;;N;;;;;\n16B3C;PAHAWH HMONG SIGN XYEEM NTXIV;So;0;L;;;;;N;;;;;\n16B3D;PAHAWH HMONG SIGN XYEEM RHO;So;0;L;;;;;N;;;;;\n16B3E;PAHAWH HMONG SIGN XYEEM TOV;So;0;L;;;;;N;;;;;\n16B3F;PAHAWH HMONG SIGN XYEEM FAIB;So;0;L;;;;;N;;;;;\n16B40;PAHAWH HMONG SIGN VOS SEEV;Lm;0;L;;;;;N;;;;;\n16B41;PAHAWH HMONG SIGN MEEJ SUAB;Lm;0;L;;;;;N;;;;;\n16B42;PAHAWH HMONG SIGN VOS NRUA;Lm;0;L;;;;;N;;;;;\n16B43;PAHAWH HMONG SIGN IB YAM;Lm;0;L;;;;;N;;;;;\n16B44;PAHAWH HMONG SIGN XAUS;Po;0;L;;;;;N;;;;;\n16B45;PAHAWH HMONG SIGN CIM TSOV ROG;So;0;L;;;;;N;;;;;\n16B50;PAHAWH HMONG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n16B51;PAHAWH HMONG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n16B52;PAHAWH HMONG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n16B53;PAHAWH HMONG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n16B54;PAHAWH HMONG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n16B55;PAHAWH HMONG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n16B56;PAHAWH HMONG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n16B57;PAHAWH HMONG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n16B58;PAHAWH HMONG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n16B59;PAHAWH HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n16B5B;PAHAWH HMONG NUMBER TENS;No;0;L;;;;10;N;;;;;\n16B5C;PAHAWH HMONG NUMBER HUNDREDS;No;0;L;;;;100;N;;;;;\n16B5D;PAHAWH HMONG NUMBER TEN THOUSANDS;No;0;L;;;;10000;N;;;;;\n16B5E;PAHAWH HMONG NUMBER MILLIONS;No;0;L;;;;1000000;N;;;;;\n16B5F;PAHAWH HMONG NUMBER HUNDRED MILLIONS;No;0;L;;;;100000000;N;;;;;\n16B60;PAHAWH HMONG NUMBER TEN BILLIONS;No;0;L;;;;10000000000;N;;;;;\n16B61;PAHAWH HMONG NUMBER TRILLIONS;No;0;L;;;;1000000000000;N;;;;;\n16B63;PAHAWH HMONG SIGN VOS LUB;Lo;0;L;;;;;N;;;;;\n16B64;PAHAWH HMONG SIGN XYOO;Lo;0;L;;;;;N;;;;;\n16B65;PAHAWH HMONG SIGN HLI;Lo;0;L;;;;;N;;;;;\n16B66;PAHAWH HMONG SIGN THIRD-STAGE HLI;Lo;0;L;;;;;N;;;;;\n16B67;PAHAWH HMONG SIGN ZWJ THAJ;Lo;0;L;;;;;N;;;;;\n16B68;PAHAWH HMONG SIGN HNUB;Lo;0;L;;;;;N;;;;;\n16B69;PAHAWH HMONG SIGN NQIG;Lo;0;L;;;;;N;;;;;\n16B6A;PAHAWH HMONG SIGN XIAB;Lo;0;L;;;;;N;;;;;\n16B6B;PAHAWH HMONG SIGN NTUJ;Lo;0;L;;;;;N;;;;;\n16B6C;PAHAWH HMONG SIGN AV;Lo;0;L;;;;;N;;;;;\n16B6D;PAHAWH HMONG SIGN TXHEEJ CEEV;Lo;0;L;;;;;N;;;;;\n16B6E;PAHAWH HMONG SIGN MEEJ TSEEB;Lo;0;L;;;;;N;;;;;\n16B6F;PAHAWH HMONG SIGN TAU;Lo;0;L;;;;;N;;;;;\n16B70;PAHAWH HMONG SIGN LOS;Lo;0;L;;;;;N;;;;;\n16B71;PAHAWH HMONG SIGN MUS;Lo;0;L;;;;;N;;;;;\n16B72;PAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOG;Lo;0;L;;;;;N;;;;;\n16B73;PAHAWH HMONG SIGN CIM CUAM TSHOOJ;Lo;0;L;;;;;N;;;;;\n16B74;PAHAWH HMONG SIGN CIM TXWV;Lo;0;L;;;;;N;;;;;\n16B75;PAHAWH HMONG SIGN CIM TXWV CHWV;Lo;0;L;;;;;N;;;;;\n16B76;PAHAWH HMONG SIGN CIM PUB DAWB;Lo;0;L;;;;;N;;;;;\n16B77;PAHAWH HMONG SIGN CIM NRES TOS;Lo;0;L;;;;;N;;;;;\n16B7D;PAHAWH HMONG CLAN SIGN TSHEEJ;Lo;0;L;;;;;N;;;;;\n16B7E;PAHAWH HMONG CLAN SIGN YEEG;Lo;0;L;;;;;N;;;;;\n16B7F;PAHAWH HMONG CLAN SIGN LIS;Lo;0;L;;;;;N;;;;;\n16B80;PAHAWH HMONG CLAN SIGN LAUJ;Lo;0;L;;;;;N;;;;;\n16B81;PAHAWH HMONG CLAN SIGN XYOOJ;Lo;0;L;;;;;N;;;;;\n16B82;PAHAWH HMONG CLAN SIGN KOO;Lo;0;L;;;;;N;;;;;\n16B83;PAHAWH HMONG CLAN SIGN HAWJ;Lo;0;L;;;;;N;;;;;\n16B84;PAHAWH HMONG CLAN SIGN MUAS;Lo;0;L;;;;;N;;;;;\n16B85;PAHAWH HMONG CLAN SIGN THOJ;Lo;0;L;;;;;N;;;;;\n16B86;PAHAWH HMONG CLAN SIGN TSAB;Lo;0;L;;;;;N;;;;;\n16B87;PAHAWH HMONG CLAN SIGN PHAB;Lo;0;L;;;;;N;;;;;\n16B88;PAHAWH HMONG CLAN SIGN KHAB;Lo;0;L;;;;;N;;;;;\n16B89;PAHAWH HMONG CLAN SIGN HAM;Lo;0;L;;;;;N;;;;;\n16B8A;PAHAWH HMONG CLAN SIGN VAJ;Lo;0;L;;;;;N;;;;;\n16B8B;PAHAWH HMONG CLAN SIGN FAJ;Lo;0;L;;;;;N;;;;;\n16B8C;PAHAWH HMONG CLAN SIGN YAJ;Lo;0;L;;;;;N;;;;;\n16B8D;PAHAWH HMONG CLAN SIGN TSWB;Lo;0;L;;;;;N;;;;;\n16B8E;PAHAWH HMONG CLAN SIGN KWM;Lo;0;L;;;;;N;;;;;\n16B8F;PAHAWH HMONG CLAN SIGN VWJ;Lo;0;L;;;;;N;;;;;\n16D40;KIRAT RAI SIGN ANUSVARA;Lm;0;L;;;;;N;;;;;\n16D41;KIRAT RAI SIGN TONPI;Lm;0;L;;;;;N;;;;;\n16D42;KIRAT RAI SIGN VISARGA;Lm;0;L;;;;;N;;;;;\n16D43;KIRAT RAI LETTER A;Lo;0;L;;;;;N;;;;;\n16D44;KIRAT RAI LETTER KA;Lo;0;L;;;;;N;;;;;\n16D45;KIRAT RAI LETTER KHA;Lo;0;L;;;;;N;;;;;\n16D46;KIRAT RAI LETTER GA;Lo;0;L;;;;;N;;;;;\n16D47;KIRAT RAI LETTER GHA;Lo;0;L;;;;;N;;;;;\n16D48;KIRAT RAI LETTER NGA;Lo;0;L;;;;;N;;;;;\n16D49;KIRAT RAI LETTER CA;Lo;0;L;;;;;N;;;;;\n16D4A;KIRAT RAI LETTER CHA;Lo;0;L;;;;;N;;;;;\n16D4B;KIRAT RAI LETTER JA;Lo;0;L;;;;;N;;;;;\n16D4C;KIRAT RAI LETTER JHA;Lo;0;L;;;;;N;;;;;\n16D4D;KIRAT RAI LETTER NYA;Lo;0;L;;;;;N;;;;;\n16D4E;KIRAT RAI LETTER TTA;Lo;0;L;;;;;N;;;;;\n16D4F;KIRAT RAI LETTER TTHA;Lo;0;L;;;;;N;;;;;\n16D50;KIRAT RAI LETTER DDA;Lo;0;L;;;;;N;;;;;\n16D51;KIRAT RAI LETTER DDHA;Lo;0;L;;;;;N;;;;;\n16D52;KIRAT RAI LETTER TA;Lo;0;L;;;;;N;;;;;\n16D53;KIRAT RAI LETTER THA;Lo;0;L;;;;;N;;;;;\n16D54;KIRAT RAI LETTER DA;Lo;0;L;;;;;N;;;;;\n16D55;KIRAT RAI LETTER DHA;Lo;0;L;;;;;N;;;;;\n16D56;KIRAT RAI LETTER NA;Lo;0;L;;;;;N;;;;;\n16D57;KIRAT RAI LETTER PA;Lo;0;L;;;;;N;;;;;\n16D58;KIRAT RAI LETTER PHA;Lo;0;L;;;;;N;;;;;\n16D59;KIRAT RAI LETTER BA;Lo;0;L;;;;;N;;;;;\n16D5A;KIRAT RAI LETTER BHA;Lo;0;L;;;;;N;;;;;\n16D5B;KIRAT RAI LETTER MA;Lo;0;L;;;;;N;;;;;\n16D5C;KIRAT RAI LETTER YA;Lo;0;L;;;;;N;;;;;\n16D5D;KIRAT RAI LETTER RA;Lo;0;L;;;;;N;;;;;\n16D5E;KIRAT RAI LETTER LA;Lo;0;L;;;;;N;;;;;\n16D5F;KIRAT RAI LETTER VA;Lo;0;L;;;;;N;;;;;\n16D60;KIRAT RAI LETTER SA;Lo;0;L;;;;;N;;;;;\n16D61;KIRAT RAI LETTER SHA;Lo;0;L;;;;;N;;;;;\n16D62;KIRAT RAI LETTER HA;Lo;0;L;;;;;N;;;;;\n16D63;KIRAT RAI VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;\n16D64;KIRAT RAI VOWEL SIGN I;Lo;0;L;;;;;N;;;;;\n16D65;KIRAT RAI VOWEL SIGN U;Lo;0;L;;;;;N;;;;;\n16D66;KIRAT RAI VOWEL SIGN UE;Lo;0;L;;;;;N;;;;;\n16D67;KIRAT RAI VOWEL SIGN E;Lo;0;L;;;;;N;;;;;\n16D68;KIRAT RAI VOWEL SIGN AI;Lo;0;L;16D67 16D67;;;;N;;;;;\n16D69;KIRAT RAI VOWEL SIGN O;Lo;0;L;16D63 16D67;;;;N;;;;;\n16D6A;KIRAT RAI VOWEL SIGN AU;Lo;0;L;16D69 16D67;;;;N;;;;;\n16D6B;KIRAT RAI SIGN VIRAMA;Lm;0;L;;;;;N;;;;;\n16D6C;KIRAT RAI SIGN SAAT;Lm;0;L;;;;;N;;;;;\n16D6D;KIRAT RAI SIGN YUPI;Po;0;L;;;;;N;;;;;\n16D6E;KIRAT RAI DANDA;Po;0;L;;;;;N;;;;;\n16D6F;KIRAT RAI DOUBLE DANDA;Po;0;L;;;;;N;;;;;\n16D70;KIRAT RAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n16D71;KIRAT RAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n16D72;KIRAT RAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n16D73;KIRAT RAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n16D74;KIRAT RAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n16D75;KIRAT RAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n16D76;KIRAT RAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n16D77;KIRAT RAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n16D78;KIRAT RAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n16D79;KIRAT RAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n16E40;MEDEFAIDRIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;16E60;\n16E41;MEDEFAIDRIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;16E61;\n16E42;MEDEFAIDRIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;16E62;\n16E43;MEDEFAIDRIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;16E63;\n16E44;MEDEFAIDRIN CAPITAL LETTER ATIU;Lu;0;L;;;;;N;;;;16E64;\n16E45;MEDEFAIDRIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;16E65;\n16E46;MEDEFAIDRIN CAPITAL LETTER KP;Lu;0;L;;;;;N;;;;16E66;\n16E47;MEDEFAIDRIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;16E67;\n16E48;MEDEFAIDRIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;16E68;\n16E49;MEDEFAIDRIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;16E69;\n16E4A;MEDEFAIDRIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;16E6A;\n16E4B;MEDEFAIDRIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;16E6B;\n16E4C;MEDEFAIDRIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;16E6C;\n16E4D;MEDEFAIDRIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;16E6D;\n16E4E;MEDEFAIDRIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;16E6E;\n16E4F;MEDEFAIDRIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;16E6F;\n16E50;MEDEFAIDRIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;16E70;\n16E51;MEDEFAIDRIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;16E71;\n16E52;MEDEFAIDRIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;16E72;\n16E53;MEDEFAIDRIN CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;16E73;\n16E54;MEDEFAIDRIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;16E74;\n16E55;MEDEFAIDRIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;16E75;\n16E56;MEDEFAIDRIN CAPITAL LETTER HP;Lu;0;L;;;;;N;;;;16E76;\n16E57;MEDEFAIDRIN CAPITAL LETTER NY;Lu;0;L;;;;;N;;;;16E77;\n16E58;MEDEFAIDRIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;16E78;\n16E59;MEDEFAIDRIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;16E79;\n16E5A;MEDEFAIDRIN CAPITAL LETTER OE;Lu;0;L;;;;;N;;;;16E7A;\n16E5B;MEDEFAIDRIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;16E7B;\n16E5C;MEDEFAIDRIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;16E7C;\n16E5D;MEDEFAIDRIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;16E7D;\n16E5E;MEDEFAIDRIN CAPITAL LETTER AI;Lu;0;L;;;;;N;;;;16E7E;\n16E5F;MEDEFAIDRIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;16E7F;\n16E60;MEDEFAIDRIN SMALL LETTER M;Ll;0;L;;;;;N;;;16E40;;16E40\n16E61;MEDEFAIDRIN SMALL LETTER S;Ll;0;L;;;;;N;;;16E41;;16E41\n16E62;MEDEFAIDRIN SMALL LETTER V;Ll;0;L;;;;;N;;;16E42;;16E42\n16E63;MEDEFAIDRIN SMALL LETTER W;Ll;0;L;;;;;N;;;16E43;;16E43\n16E64;MEDEFAIDRIN SMALL LETTER ATIU;Ll;0;L;;;;;N;;;16E44;;16E44\n16E65;MEDEFAIDRIN SMALL LETTER Z;Ll;0;L;;;;;N;;;16E45;;16E45\n16E66;MEDEFAIDRIN SMALL LETTER KP;Ll;0;L;;;;;N;;;16E46;;16E46\n16E67;MEDEFAIDRIN SMALL LETTER P;Ll;0;L;;;;;N;;;16E47;;16E47\n16E68;MEDEFAIDRIN SMALL LETTER T;Ll;0;L;;;;;N;;;16E48;;16E48\n16E69;MEDEFAIDRIN SMALL LETTER G;Ll;0;L;;;;;N;;;16E49;;16E49\n16E6A;MEDEFAIDRIN SMALL LETTER F;Ll;0;L;;;;;N;;;16E4A;;16E4A\n16E6B;MEDEFAIDRIN SMALL LETTER I;Ll;0;L;;;;;N;;;16E4B;;16E4B\n16E6C;MEDEFAIDRIN SMALL LETTER K;Ll;0;L;;;;;N;;;16E4C;;16E4C\n16E6D;MEDEFAIDRIN SMALL LETTER A;Ll;0;L;;;;;N;;;16E4D;;16E4D\n16E6E;MEDEFAIDRIN SMALL LETTER J;Ll;0;L;;;;;N;;;16E4E;;16E4E\n16E6F;MEDEFAIDRIN SMALL LETTER E;Ll;0;L;;;;;N;;;16E4F;;16E4F\n16E70;MEDEFAIDRIN SMALL LETTER B;Ll;0;L;;;;;N;;;16E50;;16E50\n16E71;MEDEFAIDRIN SMALL LETTER C;Ll;0;L;;;;;N;;;16E51;;16E51\n16E72;MEDEFAIDRIN SMALL LETTER U;Ll;0;L;;;;;N;;;16E52;;16E52\n16E73;MEDEFAIDRIN SMALL LETTER YU;Ll;0;L;;;;;N;;;16E53;;16E53\n16E74;MEDEFAIDRIN SMALL LETTER L;Ll;0;L;;;;;N;;;16E54;;16E54\n16E75;MEDEFAIDRIN SMALL LETTER Q;Ll;0;L;;;;;N;;;16E55;;16E55\n16E76;MEDEFAIDRIN SMALL LETTER HP;Ll;0;L;;;;;N;;;16E56;;16E56\n16E77;MEDEFAIDRIN SMALL LETTER NY;Ll;0;L;;;;;N;;;16E57;;16E57\n16E78;MEDEFAIDRIN SMALL LETTER X;Ll;0;L;;;;;N;;;16E58;;16E58\n16E79;MEDEFAIDRIN SMALL LETTER D;Ll;0;L;;;;;N;;;16E59;;16E59\n16E7A;MEDEFAIDRIN SMALL LETTER OE;Ll;0;L;;;;;N;;;16E5A;;16E5A\n16E7B;MEDEFAIDRIN SMALL LETTER N;Ll;0;L;;;;;N;;;16E5B;;16E5B\n16E7C;MEDEFAIDRIN SMALL LETTER R;Ll;0;L;;;;;N;;;16E5C;;16E5C\n16E7D;MEDEFAIDRIN SMALL LETTER O;Ll;0;L;;;;;N;;;16E5D;;16E5D\n16E7E;MEDEFAIDRIN SMALL LETTER AI;Ll;0;L;;;;;N;;;16E5E;;16E5E\n16E7F;MEDEFAIDRIN SMALL LETTER Y;Ll;0;L;;;;;N;;;16E5F;;16E5F\n16E80;MEDEFAIDRIN DIGIT ZERO;No;0;L;;;;0;N;;;;;\n16E81;MEDEFAIDRIN DIGIT ONE;No;0;L;;;;1;N;;;;;\n16E82;MEDEFAIDRIN DIGIT TWO;No;0;L;;;;2;N;;;;;\n16E83;MEDEFAIDRIN DIGIT THREE;No;0;L;;;;3;N;;;;;\n16E84;MEDEFAIDRIN DIGIT FOUR;No;0;L;;;;4;N;;;;;\n16E85;MEDEFAIDRIN DIGIT FIVE;No;0;L;;;;5;N;;;;;\n16E86;MEDEFAIDRIN DIGIT SIX;No;0;L;;;;6;N;;;;;\n16E87;MEDEFAIDRIN DIGIT SEVEN;No;0;L;;;;7;N;;;;;\n16E88;MEDEFAIDRIN DIGIT EIGHT;No;0;L;;;;8;N;;;;;\n16E89;MEDEFAIDRIN DIGIT NINE;No;0;L;;;;9;N;;;;;\n16E8A;MEDEFAIDRIN NUMBER TEN;No;0;L;;;;10;N;;;;;\n16E8B;MEDEFAIDRIN NUMBER ELEVEN;No;0;L;;;;11;N;;;;;\n16E8C;MEDEFAIDRIN NUMBER TWELVE;No;0;L;;;;12;N;;;;;\n16E8D;MEDEFAIDRIN NUMBER THIRTEEN;No;0;L;;;;13;N;;;;;\n16E8E;MEDEFAIDRIN NUMBER FOURTEEN;No;0;L;;;;14;N;;;;;\n16E8F;MEDEFAIDRIN NUMBER FIFTEEN;No;0;L;;;;15;N;;;;;\n16E90;MEDEFAIDRIN NUMBER SIXTEEN;No;0;L;;;;16;N;;;;;\n16E91;MEDEFAIDRIN NUMBER SEVENTEEN;No;0;L;;;;17;N;;;;;\n16E92;MEDEFAIDRIN NUMBER EIGHTEEN;No;0;L;;;;18;N;;;;;\n16E93;MEDEFAIDRIN NUMBER NINETEEN;No;0;L;;;;19;N;;;;;\n16E94;MEDEFAIDRIN DIGIT ONE ALTERNATE FORM;No;0;L;;;;1;N;;;;;\n16E95;MEDEFAIDRIN DIGIT TWO ALTERNATE FORM;No;0;L;;;;2;N;;;;;\n16E96;MEDEFAIDRIN DIGIT THREE ALTERNATE FORM;No;0;L;;;;3;N;;;;;\n16E97;MEDEFAIDRIN COMMA;Po;0;L;;;;;N;;;;;\n16E98;MEDEFAIDRIN FULL STOP;Po;0;L;;;;;N;;;;;\n16E99;MEDEFAIDRIN SYMBOL AIVA;Po;0;L;;;;;N;;;;;\n16E9A;MEDEFAIDRIN EXCLAMATION OH;Po;0;L;;;;;N;;;;;\n16EA0;BERIA ERFE CAPITAL LETTER ARKAB;Lu;0;L;;;;;N;;;;16EBB;\n16EA1;BERIA ERFE CAPITAL LETTER BASIGNA;Lu;0;L;;;;;N;;;;16EBC;\n16EA2;BERIA ERFE CAPITAL LETTER DARBAI;Lu;0;L;;;;;N;;;;16EBD;\n16EA3;BERIA ERFE CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;16EBE;\n16EA4;BERIA ERFE CAPITAL LETTER FITKO;Lu;0;L;;;;;N;;;;16EBF;\n16EA5;BERIA ERFE CAPITAL LETTER GOWAY;Lu;0;L;;;;;N;;;;16EC0;\n16EA6;BERIA ERFE CAPITAL LETTER HIRDEABO;Lu;0;L;;;;;N;;;;16EC1;\n16EA7;BERIA ERFE CAPITAL LETTER I;Lu;0;L;;;;;N;;;;16EC2;\n16EA8;BERIA ERFE CAPITAL LETTER DJAI;Lu;0;L;;;;;N;;;;16EC3;\n16EA9;BERIA ERFE CAPITAL LETTER KOBO;Lu;0;L;;;;;N;;;;16EC4;\n16EAA;BERIA ERFE CAPITAL LETTER LAKKO;Lu;0;L;;;;;N;;;;16EC5;\n16EAB;BERIA ERFE CAPITAL LETTER MERI;Lu;0;L;;;;;N;;;;16EC6;\n16EAC;BERIA ERFE CAPITAL LETTER NINI;Lu;0;L;;;;;N;;;;16EC7;\n16EAD;BERIA ERFE CAPITAL LETTER GNA;Lu;0;L;;;;;N;;;;16EC8;\n16EAE;BERIA ERFE CAPITAL LETTER NGAY;Lu;0;L;;;;;N;;;;16EC9;\n16EAF;BERIA ERFE CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;16ECA;\n16EB0;BERIA ERFE CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;16ECB;\n16EB1;BERIA ERFE CAPITAL LETTER ERIGO;Lu;0;L;;;;;N;;;;16ECC;\n16EB2;BERIA ERFE CAPITAL LETTER ERIGO TAMURA;Lu;0;L;;;;;N;;;;16ECD;\n16EB3;BERIA ERFE CAPITAL LETTER SERI;Lu;0;L;;;;;N;;;;16ECE;\n16EB4;BERIA ERFE CAPITAL LETTER SHEP;Lu;0;L;;;;;N;;;;16ECF;\n16EB5;BERIA ERFE CAPITAL LETTER TATASOUE;Lu;0;L;;;;;N;;;;16ED0;\n16EB6;BERIA ERFE CAPITAL LETTER UI;Lu;0;L;;;;;N;;;;16ED1;\n16EB7;BERIA ERFE CAPITAL LETTER WASSE;Lu;0;L;;;;;N;;;;16ED2;\n16EB8;BERIA ERFE CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;16ED3;\n16EBB;BERIA ERFE SMALL LETTER ARKAB;Ll;0;L;;;;;N;;;16EA0;;16EA0\n16EBC;BERIA ERFE SMALL LETTER BASIGNA;Ll;0;L;;;;;N;;;16EA1;;16EA1\n16EBD;BERIA ERFE SMALL LETTER DARBAI;Ll;0;L;;;;;N;;;16EA2;;16EA2\n16EBE;BERIA ERFE SMALL LETTER EH;Ll;0;L;;;;;N;;;16EA3;;16EA3\n16EBF;BERIA ERFE SMALL LETTER FITKO;Ll;0;L;;;;;N;;;16EA4;;16EA4\n16EC0;BERIA ERFE SMALL LETTER GOWAY;Ll;0;L;;;;;N;;;16EA5;;16EA5\n16EC1;BERIA ERFE SMALL LETTER HIRDEABO;Ll;0;L;;;;;N;;;16EA6;;16EA6\n16EC2;BERIA ERFE SMALL LETTER I;Ll;0;L;;;;;N;;;16EA7;;16EA7\n16EC3;BERIA ERFE SMALL LETTER DJAI;Ll;0;L;;;;;N;;;16EA8;;16EA8\n16EC4;BERIA ERFE SMALL LETTER KOBO;Ll;0;L;;;;;N;;;16EA9;;16EA9\n16EC5;BERIA ERFE SMALL LETTER LAKKO;Ll;0;L;;;;;N;;;16EAA;;16EAA\n16EC6;BERIA ERFE SMALL LETTER MERI;Ll;0;L;;;;;N;;;16EAB;;16EAB\n16EC7;BERIA ERFE SMALL LETTER NINI;Ll;0;L;;;;;N;;;16EAC;;16EAC\n16EC8;BERIA ERFE SMALL LETTER GNA;Ll;0;L;;;;;N;;;16EAD;;16EAD\n16EC9;BERIA ERFE SMALL LETTER NGAY;Ll;0;L;;;;;N;;;16EAE;;16EAE\n16ECA;BERIA ERFE SMALL LETTER OI;Ll;0;L;;;;;N;;;16EAF;;16EAF\n16ECB;BERIA ERFE SMALL LETTER PI;Ll;0;L;;;;;N;;;16EB0;;16EB0\n16ECC;BERIA ERFE SMALL LETTER ERIGO;Ll;0;L;;;;;N;;;16EB1;;16EB1\n16ECD;BERIA ERFE SMALL LETTER ERIGO TAMURA;Ll;0;L;;;;;N;;;16EB2;;16EB2\n16ECE;BERIA ERFE SMALL LETTER SERI;Ll;0;L;;;;;N;;;16EB3;;16EB3\n16ECF;BERIA ERFE SMALL LETTER SHEP;Ll;0;L;;;;;N;;;16EB4;;16EB4\n16ED0;BERIA ERFE SMALL LETTER TATASOUE;Ll;0;L;;;;;N;;;16EB5;;16EB5\n16ED1;BERIA ERFE SMALL LETTER UI;Ll;0;L;;;;;N;;;16EB6;;16EB6\n16ED2;BERIA ERFE SMALL LETTER WASSE;Ll;0;L;;;;;N;;;16EB7;;16EB7\n16ED3;BERIA ERFE SMALL LETTER AY;Ll;0;L;;;;;N;;;16EB8;;16EB8\n16F00;MIAO LETTER PA;Lo;0;L;;;;;N;;;;;\n16F01;MIAO LETTER BA;Lo;0;L;;;;;N;;;;;\n16F02;MIAO LETTER YI PA;Lo;0;L;;;;;N;;;;;\n16F03;MIAO LETTER PLA;Lo;0;L;;;;;N;;;;;\n16F04;MIAO LETTER MA;Lo;0;L;;;;;N;;;;;\n16F05;MIAO LETTER MHA;Lo;0;L;;;;;N;;;;;\n16F06;MIAO LETTER ARCHAIC MA;Lo;0;L;;;;;N;;;;;\n16F07;MIAO LETTER FA;Lo;0;L;;;;;N;;;;;\n16F08;MIAO LETTER VA;Lo;0;L;;;;;N;;;;;\n16F09;MIAO LETTER VFA;Lo;0;L;;;;;N;;;;;\n16F0A;MIAO LETTER TA;Lo;0;L;;;;;N;;;;;\n16F0B;MIAO LETTER DA;Lo;0;L;;;;;N;;;;;\n16F0C;MIAO LETTER YI TTA;Lo;0;L;;;;;N;;;;;\n16F0D;MIAO LETTER YI TA;Lo;0;L;;;;;N;;;;;\n16F0E;MIAO LETTER TTA;Lo;0;L;;;;;N;;;;;\n16F0F;MIAO LETTER DDA;Lo;0;L;;;;;N;;;;;\n16F10;MIAO LETTER NA;Lo;0;L;;;;;N;;;;;\n16F11;MIAO LETTER NHA;Lo;0;L;;;;;N;;;;;\n16F12;MIAO LETTER YI NNA;Lo;0;L;;;;;N;;;;;\n16F13;MIAO LETTER ARCHAIC NA;Lo;0;L;;;;;N;;;;;\n16F14;MIAO LETTER NNA;Lo;0;L;;;;;N;;;;;\n16F15;MIAO LETTER NNHA;Lo;0;L;;;;;N;;;;;\n16F16;MIAO LETTER LA;Lo;0;L;;;;;N;;;;;\n16F17;MIAO LETTER LYA;Lo;0;L;;;;;N;;;;;\n16F18;MIAO LETTER LHA;Lo;0;L;;;;;N;;;;;\n16F19;MIAO LETTER LHYA;Lo;0;L;;;;;N;;;;;\n16F1A;MIAO LETTER TLHA;Lo;0;L;;;;;N;;;;;\n16F1B;MIAO LETTER DLHA;Lo;0;L;;;;;N;;;;;\n16F1C;MIAO LETTER TLHYA;Lo;0;L;;;;;N;;;;;\n16F1D;MIAO LETTER DLHYA;Lo;0;L;;;;;N;;;;;\n16F1E;MIAO LETTER KA;Lo;0;L;;;;;N;;;;;\n16F1F;MIAO LETTER GA;Lo;0;L;;;;;N;;;;;\n16F20;MIAO LETTER YI KA;Lo;0;L;;;;;N;;;;;\n16F21;MIAO LETTER QA;Lo;0;L;;;;;N;;;;;\n16F22;MIAO LETTER QGA;Lo;0;L;;;;;N;;;;;\n16F23;MIAO LETTER NGA;Lo;0;L;;;;;N;;;;;\n16F24;MIAO LETTER NGHA;Lo;0;L;;;;;N;;;;;\n16F25;MIAO LETTER ARCHAIC NGA;Lo;0;L;;;;;N;;;;;\n16F26;MIAO LETTER HA;Lo;0;L;;;;;N;;;;;\n16F27;MIAO LETTER XA;Lo;0;L;;;;;N;;;;;\n16F28;MIAO LETTER GHA;Lo;0;L;;;;;N;;;;;\n16F29;MIAO LETTER GHHA;Lo;0;L;;;;;N;;;;;\n16F2A;MIAO LETTER TSSA;Lo;0;L;;;;;N;;;;;\n16F2B;MIAO LETTER DZZA;Lo;0;L;;;;;N;;;;;\n16F2C;MIAO LETTER NYA;Lo;0;L;;;;;N;;;;;\n16F2D;MIAO LETTER NYHA;Lo;0;L;;;;;N;;;;;\n16F2E;MIAO LETTER TSHA;Lo;0;L;;;;;N;;;;;\n16F2F;MIAO LETTER DZHA;Lo;0;L;;;;;N;;;;;\n16F30;MIAO LETTER YI TSHA;Lo;0;L;;;;;N;;;;;\n16F31;MIAO LETTER YI DZHA;Lo;0;L;;;;;N;;;;;\n16F32;MIAO LETTER REFORMED TSHA;Lo;0;L;;;;;N;;;;;\n16F33;MIAO LETTER SHA;Lo;0;L;;;;;N;;;;;\n16F34;MIAO LETTER SSA;Lo;0;L;;;;;N;;;;;\n16F35;MIAO LETTER ZHA;Lo;0;L;;;;;N;;;;;\n16F36;MIAO LETTER ZSHA;Lo;0;L;;;;;N;;;;;\n16F37;MIAO LETTER TSA;Lo;0;L;;;;;N;;;;;\n16F38;MIAO LETTER DZA;Lo;0;L;;;;;N;;;;;\n16F39;MIAO LETTER YI TSA;Lo;0;L;;;;;N;;;;;\n16F3A;MIAO LETTER SA;Lo;0;L;;;;;N;;;;;\n16F3B;MIAO LETTER ZA;Lo;0;L;;;;;N;;;;;\n16F3C;MIAO LETTER ZSA;Lo;0;L;;;;;N;;;;;\n16F3D;MIAO LETTER ZZA;Lo;0;L;;;;;N;;;;;\n16F3E;MIAO LETTER ZZSA;Lo;0;L;;;;;N;;;;;\n16F3F;MIAO LETTER ARCHAIC ZZA;Lo;0;L;;;;;N;;;;;\n16F40;MIAO LETTER ZZYA;Lo;0;L;;;;;N;;;;;\n16F41;MIAO LETTER ZZSYA;Lo;0;L;;;;;N;;;;;\n16F42;MIAO LETTER WA;Lo;0;L;;;;;N;;;;;\n16F43;MIAO LETTER AH;Lo;0;L;;;;;N;;;;;\n16F44;MIAO LETTER HHA;Lo;0;L;;;;;N;;;;;\n16F45;MIAO LETTER BRI;Lo;0;L;;;;;N;;;;;\n16F46;MIAO LETTER SYI;Lo;0;L;;;;;N;;;;;\n16F47;MIAO LETTER DZYI;Lo;0;L;;;;;N;;;;;\n16F48;MIAO LETTER TE;Lo;0;L;;;;;N;;;;;\n16F49;MIAO LETTER TSE;Lo;0;L;;;;;N;;;;;\n16F4A;MIAO LETTER RTE;Lo;0;L;;;;;N;;;;;\n16F4F;MIAO SIGN CONSONANT MODIFIER BAR;Mn;0;NSM;;;;;N;;;;;\n16F50;MIAO LETTER NASALIZATION;Lo;0;L;;;;;N;;;;;\n16F51;MIAO SIGN ASPIRATION;Mc;0;L;;;;;N;;;;;\n16F52;MIAO SIGN REFORMED VOICING;Mc;0;L;;;;;N;;;;;\n16F53;MIAO SIGN REFORMED ASPIRATION;Mc;0;L;;;;;N;;;;;\n16F54;MIAO VOWEL SIGN A;Mc;0;L;;;;;N;;;;;\n16F55;MIAO VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;\n16F56;MIAO VOWEL SIGN AHH;Mc;0;L;;;;;N;;;;;\n16F57;MIAO VOWEL SIGN AN;Mc;0;L;;;;;N;;;;;\n16F58;MIAO VOWEL SIGN ANG;Mc;0;L;;;;;N;;;;;\n16F59;MIAO VOWEL SIGN O;Mc;0;L;;;;;N;;;;;\n16F5A;MIAO VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;\n16F5B;MIAO VOWEL SIGN WO;Mc;0;L;;;;;N;;;;;\n16F5C;MIAO VOWEL SIGN W;Mc;0;L;;;;;N;;;;;\n16F5D;MIAO VOWEL SIGN E;Mc;0;L;;;;;N;;;;;\n16F5E;MIAO VOWEL SIGN EN;Mc;0;L;;;;;N;;;;;\n16F5F;MIAO VOWEL SIGN ENG;Mc;0;L;;;;;N;;;;;\n16F60;MIAO VOWEL SIGN OEY;Mc;0;L;;;;;N;;;;;\n16F61;MIAO VOWEL SIGN I;Mc;0;L;;;;;N;;;;;\n16F62;MIAO VOWEL SIGN IA;Mc;0;L;;;;;N;;;;;\n16F63;MIAO VOWEL SIGN IAN;Mc;0;L;;;;;N;;;;;\n16F64;MIAO VOWEL SIGN IANG;Mc;0;L;;;;;N;;;;;\n16F65;MIAO VOWEL SIGN IO;Mc;0;L;;;;;N;;;;;\n16F66;MIAO VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;\n16F67;MIAO VOWEL SIGN II;Mc;0;L;;;;;N;;;;;\n16F68;MIAO VOWEL SIGN IU;Mc;0;L;;;;;N;;;;;\n16F69;MIAO VOWEL SIGN ING;Mc;0;L;;;;;N;;;;;\n16F6A;MIAO VOWEL SIGN U;Mc;0;L;;;;;N;;;;;\n16F6B;MIAO VOWEL SIGN UA;Mc;0;L;;;;;N;;;;;\n16F6C;MIAO VOWEL SIGN UAN;Mc;0;L;;;;;N;;;;;\n16F6D;MIAO VOWEL SIGN UANG;Mc;0;L;;;;;N;;;;;\n16F6E;MIAO VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;\n16F6F;MIAO VOWEL SIGN UEI;Mc;0;L;;;;;N;;;;;\n16F70;MIAO VOWEL SIGN UNG;Mc;0;L;;;;;N;;;;;\n16F71;MIAO VOWEL SIGN Y;Mc;0;L;;;;;N;;;;;\n16F72;MIAO VOWEL SIGN YI;Mc;0;L;;;;;N;;;;;\n16F73;MIAO VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;\n16F74;MIAO VOWEL SIGN AEE;Mc;0;L;;;;;N;;;;;\n16F75;MIAO VOWEL SIGN ERR;Mc;0;L;;;;;N;;;;;\n16F76;MIAO VOWEL SIGN ROUNDED ERR;Mc;0;L;;;;;N;;;;;\n16F77;MIAO VOWEL SIGN ER;Mc;0;L;;;;;N;;;;;\n16F78;MIAO VOWEL SIGN ROUNDED ER;Mc;0;L;;;;;N;;;;;\n16F79;MIAO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;\n16F7A;MIAO VOWEL SIGN EI;Mc;0;L;;;;;N;;;;;\n16F7B;MIAO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;\n16F7C;MIAO VOWEL SIGN OU;Mc;0;L;;;;;N;;;;;\n16F7D;MIAO VOWEL SIGN N;Mc;0;L;;;;;N;;;;;\n16F7E;MIAO VOWEL SIGN NG;Mc;0;L;;;;;N;;;;;\n16F7F;MIAO VOWEL SIGN UOG;Mc;0;L;;;;;N;;;;;\n16F80;MIAO VOWEL SIGN YUI;Mc;0;L;;;;;N;;;;;\n16F81;MIAO VOWEL SIGN OG;Mc;0;L;;;;;N;;;;;\n16F82;MIAO VOWEL SIGN OER;Mc;0;L;;;;;N;;;;;\n16F83;MIAO VOWEL SIGN VW;Mc;0;L;;;;;N;;;;;\n16F84;MIAO VOWEL SIGN IG;Mc;0;L;;;;;N;;;;;\n16F85;MIAO VOWEL SIGN EA;Mc;0;L;;;;;N;;;;;\n16F86;MIAO VOWEL SIGN IONG;Mc;0;L;;;;;N;;;;;\n16F87;MIAO VOWEL SIGN UI;Mc;0;L;;;;;N;;;;;\n16F8F;MIAO TONE RIGHT;Mn;0;NSM;;;;;N;;;;;\n16F90;MIAO TONE TOP RIGHT;Mn;0;NSM;;;;;N;;;;;\n16F91;MIAO TONE ABOVE;Mn;0;NSM;;;;;N;;;;;\n16F92;MIAO TONE BELOW;Mn;0;NSM;;;;;N;;;;;\n16F93;MIAO LETTER TONE-2;Lm;0;L;;;;;N;;;;;\n16F94;MIAO LETTER TONE-3;Lm;0;L;;;;;N;;;;;\n16F95;MIAO LETTER TONE-4;Lm;0;L;;;;;N;;;;;\n16F96;MIAO LETTER TONE-5;Lm;0;L;;;;;N;;;;;\n16F97;MIAO LETTER TONE-6;Lm;0;L;;;;;N;;;;;\n16F98;MIAO LETTER TONE-7;Lm;0;L;;;;;N;;;;;\n16F99;MIAO LETTER TONE-8;Lm;0;L;;;;;N;;;;;\n16F9A;MIAO LETTER REFORMED TONE-1;Lm;0;L;;;;;N;;;;;\n16F9B;MIAO LETTER REFORMED TONE-2;Lm;0;L;;;;;N;;;;;\n16F9C;MIAO LETTER REFORMED TONE-4;Lm;0;L;;;;;N;;;;;\n16F9D;MIAO LETTER REFORMED TONE-5;Lm;0;L;;;;;N;;;;;\n16F9E;MIAO LETTER REFORMED TONE-6;Lm;0;L;;;;;N;;;;;\n16F9F;MIAO LETTER REFORMED TONE-8;Lm;0;L;;;;;N;;;;;\n16FE0;TANGUT ITERATION MARK;Lm;0;L;;;;;N;;;;;\n16FE1;NUSHU ITERATION MARK;Lm;0;L;;;;;N;;;;;\n16FE2;OLD CHINESE HOOK MARK;Po;0;ON;;;;;N;;;;;\n16FE3;OLD CHINESE ITERATION MARK;Lm;0;L;;;;;N;;;;;\n16FE4;KHITAN SMALL SCRIPT FILLER;Mn;0;NSM;;;;;N;;;;;\n16FF0;VIETNAMESE ALTERNATE READING MARK CA;Mc;6;L;;;;;N;;;;;\n16FF1;VIETNAMESE ALTERNATE READING MARK NHAY;Mc;6;L;;;;;N;;;;;\n16FF2;CHINESE SMALL SIMPLIFIED ER;Lm;0;L;;;;;N;;;;;\n16FF3;CHINESE SMALL TRADITIONAL ER;Lm;0;L;;;;;N;;;;;\n16FF4;YANGQIN SIGN SLOW ONE BEAT;Nl;0;L;;;;1;N;;;;;\n16FF5;YANGQIN SIGN SLOW THREE HALF BEATS;Nl;0;L;;;;3/2;N;;;;;\n16FF6;YANGQIN SIGN SLOW TWO BEATS;Nl;0;L;;;;2;N;;;;;\n17000;<Tangut Ideograph, First>;Lo;0;L;;;;;N;;;;;\n187FF;<Tangut Ideograph, Last>;Lo;0;L;;;;;N;;;;;\n18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;;\n18801;TANGUT COMPONENT-002;Lo;0;L;;;;;N;;;;;\n18802;TANGUT COMPONENT-003;Lo;0;L;;;;;N;;;;;\n18803;TANGUT COMPONENT-004;Lo;0;L;;;;;N;;;;;\n18804;TANGUT COMPONENT-005;Lo;0;L;;;;;N;;;;;\n18805;TANGUT COMPONENT-006;Lo;0;L;;;;;N;;;;;\n18806;TANGUT COMPONENT-007;Lo;0;L;;;;;N;;;;;\n18807;TANGUT COMPONENT-008;Lo;0;L;;;;;N;;;;;\n18808;TANGUT COMPONENT-009;Lo;0;L;;;;;N;;;;;\n18809;TANGUT COMPONENT-010;Lo;0;L;;;;;N;;;;;\n1880A;TANGUT COMPONENT-011;Lo;0;L;;;;;N;;;;;\n1880B;TANGUT COMPONENT-012;Lo;0;L;;;;;N;;;;;\n1880C;TANGUT COMPONENT-013;Lo;0;L;;;;;N;;;;;\n1880D;TANGUT COMPONENT-014;Lo;0;L;;;;;N;;;;;\n1880E;TANGUT COMPONENT-015;Lo;0;L;;;;;N;;;;;\n1880F;TANGUT COMPONENT-016;Lo;0;L;;;;;N;;;;;\n18810;TANGUT COMPONENT-017;Lo;0;L;;;;;N;;;;;\n18811;TANGUT COMPONENT-018;Lo;0;L;;;;;N;;;;;\n18812;TANGUT COMPONENT-019;Lo;0;L;;;;;N;;;;;\n18813;TANGUT COMPONENT-020;Lo;0;L;;;;;N;;;;;\n18814;TANGUT COMPONENT-021;Lo;0;L;;;;;N;;;;;\n18815;TANGUT COMPONENT-022;Lo;0;L;;;;;N;;;;;\n18816;TANGUT COMPONENT-023;Lo;0;L;;;;;N;;;;;\n18817;TANGUT COMPONENT-024;Lo;0;L;;;;;N;;;;;\n18818;TANGUT COMPONENT-025;Lo;0;L;;;;;N;;;;;\n18819;TANGUT COMPONENT-026;Lo;0;L;;;;;N;;;;;\n1881A;TANGUT COMPONENT-027;Lo;0;L;;;;;N;;;;;\n1881B;TANGUT COMPONENT-028;Lo;0;L;;;;;N;;;;;\n1881C;TANGUT COMPONENT-029;Lo;0;L;;;;;N;;;;;\n1881D;TANGUT COMPONENT-030;Lo;0;L;;;;;N;;;;;\n1881E;TANGUT COMPONENT-031;Lo;0;L;;;;;N;;;;;\n1881F;TANGUT COMPONENT-032;Lo;0;L;;;;;N;;;;;\n18820;TANGUT COMPONENT-033;Lo;0;L;;;;;N;;;;;\n18821;TANGUT COMPONENT-034;Lo;0;L;;;;;N;;;;;\n18822;TANGUT COMPONENT-035;Lo;0;L;;;;;N;;;;;\n18823;TANGUT COMPONENT-036;Lo;0;L;;;;;N;;;;;\n18824;TANGUT COMPONENT-037;Lo;0;L;;;;;N;;;;;\n18825;TANGUT COMPONENT-038;Lo;0;L;;;;;N;;;;;\n18826;TANGUT COMPONENT-039;Lo;0;L;;;;;N;;;;;\n18827;TANGUT COMPONENT-040;Lo;0;L;;;;;N;;;;;\n18828;TANGUT COMPONENT-041;Lo;0;L;;;;;N;;;;;\n18829;TANGUT COMPONENT-042;Lo;0;L;;;;;N;;;;;\n1882A;TANGUT COMPONENT-043;Lo;0;L;;;;;N;;;;;\n1882B;TANGUT COMPONENT-044;Lo;0;L;;;;;N;;;;;\n1882C;TANGUT COMPONENT-045;Lo;0;L;;;;;N;;;;;\n1882D;TANGUT COMPONENT-046;Lo;0;L;;;;;N;;;;;\n1882E;TANGUT COMPONENT-047;Lo;0;L;;;;;N;;;;;\n1882F;TANGUT COMPONENT-048;Lo;0;L;;;;;N;;;;;\n18830;TANGUT COMPONENT-049;Lo;0;L;;;;;N;;;;;\n18831;TANGUT COMPONENT-050;Lo;0;L;;;;;N;;;;;\n18832;TANGUT COMPONENT-051;Lo;0;L;;;;;N;;;;;\n18833;TANGUT COMPONENT-052;Lo;0;L;;;;;N;;;;;\n18834;TANGUT COMPONENT-053;Lo;0;L;;;;;N;;;;;\n18835;TANGUT COMPONENT-054;Lo;0;L;;;;;N;;;;;\n18836;TANGUT COMPONENT-055;Lo;0;L;;;;;N;;;;;\n18837;TANGUT COMPONENT-056;Lo;0;L;;;;;N;;;;;\n18838;TANGUT COMPONENT-057;Lo;0;L;;;;;N;;;;;\n18839;TANGUT COMPONENT-058;Lo;0;L;;;;;N;;;;;\n1883A;TANGUT COMPONENT-059;Lo;0;L;;;;;N;;;;;\n1883B;TANGUT COMPONENT-060;Lo;0;L;;;;;N;;;;;\n1883C;TANGUT COMPONENT-061;Lo;0;L;;;;;N;;;;;\n1883D;TANGUT COMPONENT-062;Lo;0;L;;;;;N;;;;;\n1883E;TANGUT COMPONENT-063;Lo;0;L;;;;;N;;;;;\n1883F;TANGUT COMPONENT-064;Lo;0;L;;;;;N;;;;;\n18840;TANGUT COMPONENT-065;Lo;0;L;;;;;N;;;;;\n18841;TANGUT COMPONENT-066;Lo;0;L;;;;;N;;;;;\n18842;TANGUT COMPONENT-067;Lo;0;L;;;;;N;;;;;\n18843;TANGUT COMPONENT-068;Lo;0;L;;;;;N;;;;;\n18844;TANGUT COMPONENT-069;Lo;0;L;;;;;N;;;;;\n18845;TANGUT COMPONENT-070;Lo;0;L;;;;;N;;;;;\n18846;TANGUT COMPONENT-071;Lo;0;L;;;;;N;;;;;\n18847;TANGUT COMPONENT-072;Lo;0;L;;;;;N;;;;;\n18848;TANGUT COMPONENT-073;Lo;0;L;;;;;N;;;;;\n18849;TANGUT COMPONENT-074;Lo;0;L;;;;;N;;;;;\n1884A;TANGUT COMPONENT-075;Lo;0;L;;;;;N;;;;;\n1884B;TANGUT COMPONENT-076;Lo;0;L;;;;;N;;;;;\n1884C;TANGUT COMPONENT-077;Lo;0;L;;;;;N;;;;;\n1884D;TANGUT COMPONENT-078;Lo;0;L;;;;;N;;;;;\n1884E;TANGUT COMPONENT-079;Lo;0;L;;;;;N;;;;;\n1884F;TANGUT COMPONENT-080;Lo;0;L;;;;;N;;;;;\n18850;TANGUT COMPONENT-081;Lo;0;L;;;;;N;;;;;\n18851;TANGUT COMPONENT-082;Lo;0;L;;;;;N;;;;;\n18852;TANGUT COMPONENT-083;Lo;0;L;;;;;N;;;;;\n18853;TANGUT COMPONENT-084;Lo;0;L;;;;;N;;;;;\n18854;TANGUT COMPONENT-085;Lo;0;L;;;;;N;;;;;\n18855;TANGUT COMPONENT-086;Lo;0;L;;;;;N;;;;;\n18856;TANGUT COMPONENT-087;Lo;0;L;;;;;N;;;;;\n18857;TANGUT COMPONENT-088;Lo;0;L;;;;;N;;;;;\n18858;TANGUT COMPONENT-089;Lo;0;L;;;;;N;;;;;\n18859;TANGUT COMPONENT-090;Lo;0;L;;;;;N;;;;;\n1885A;TANGUT COMPONENT-091;Lo;0;L;;;;;N;;;;;\n1885B;TANGUT COMPONENT-092;Lo;0;L;;;;;N;;;;;\n1885C;TANGUT COMPONENT-093;Lo;0;L;;;;;N;;;;;\n1885D;TANGUT COMPONENT-094;Lo;0;L;;;;;N;;;;;\n1885E;TANGUT COMPONENT-095;Lo;0;L;;;;;N;;;;;\n1885F;TANGUT COMPONENT-096;Lo;0;L;;;;;N;;;;;\n18860;TANGUT COMPONENT-097;Lo;0;L;;;;;N;;;;;\n18861;TANGUT COMPONENT-098;Lo;0;L;;;;;N;;;;;\n18862;TANGUT COMPONENT-099;Lo;0;L;;;;;N;;;;;\n18863;TANGUT COMPONENT-100;Lo;0;L;;;;;N;;;;;\n18864;TANGUT COMPONENT-101;Lo;0;L;;;;;N;;;;;\n18865;TANGUT COMPONENT-102;Lo;0;L;;;;;N;;;;;\n18866;TANGUT COMPONENT-103;Lo;0;L;;;;;N;;;;;\n18867;TANGUT COMPONENT-104;Lo;0;L;;;;;N;;;;;\n18868;TANGUT COMPONENT-105;Lo;0;L;;;;;N;;;;;\n18869;TANGUT COMPONENT-106;Lo;0;L;;;;;N;;;;;\n1886A;TANGUT COMPONENT-107;Lo;0;L;;;;;N;;;;;\n1886B;TANGUT COMPONENT-108;Lo;0;L;;;;;N;;;;;\n1886C;TANGUT COMPONENT-109;Lo;0;L;;;;;N;;;;;\n1886D;TANGUT COMPONENT-110;Lo;0;L;;;;;N;;;;;\n1886E;TANGUT COMPONENT-111;Lo;0;L;;;;;N;;;;;\n1886F;TANGUT COMPONENT-112;Lo;0;L;;;;;N;;;;;\n18870;TANGUT COMPONENT-113;Lo;0;L;;;;;N;;;;;\n18871;TANGUT COMPONENT-114;Lo;0;L;;;;;N;;;;;\n18872;TANGUT COMPONENT-115;Lo;0;L;;;;;N;;;;;\n18873;TANGUT COMPONENT-116;Lo;0;L;;;;;N;;;;;\n18874;TANGUT COMPONENT-117;Lo;0;L;;;;;N;;;;;\n18875;TANGUT COMPONENT-118;Lo;0;L;;;;;N;;;;;\n18876;TANGUT COMPONENT-119;Lo;0;L;;;;;N;;;;;\n18877;TANGUT COMPONENT-120;Lo;0;L;;;;;N;;;;;\n18878;TANGUT COMPONENT-121;Lo;0;L;;;;;N;;;;;\n18879;TANGUT COMPONENT-122;Lo;0;L;;;;;N;;;;;\n1887A;TANGUT COMPONENT-123;Lo;0;L;;;;;N;;;;;\n1887B;TANGUT COMPONENT-124;Lo;0;L;;;;;N;;;;;\n1887C;TANGUT COMPONENT-125;Lo;0;L;;;;;N;;;;;\n1887D;TANGUT COMPONENT-126;Lo;0;L;;;;;N;;;;;\n1887E;TANGUT COMPONENT-127;Lo;0;L;;;;;N;;;;;\n1887F;TANGUT COMPONENT-128;Lo;0;L;;;;;N;;;;;\n18880;TANGUT COMPONENT-129;Lo;0;L;;;;;N;;;;;\n18881;TANGUT COMPONENT-130;Lo;0;L;;;;;N;;;;;\n18882;TANGUT COMPONENT-131;Lo;0;L;;;;;N;;;;;\n18883;TANGUT COMPONENT-132;Lo;0;L;;;;;N;;;;;\n18884;TANGUT COMPONENT-133;Lo;0;L;;;;;N;;;;;\n18885;TANGUT COMPONENT-134;Lo;0;L;;;;;N;;;;;\n18886;TANGUT COMPONENT-135;Lo;0;L;;;;;N;;;;;\n18887;TANGUT COMPONENT-136;Lo;0;L;;;;;N;;;;;\n18888;TANGUT COMPONENT-137;Lo;0;L;;;;;N;;;;;\n18889;TANGUT COMPONENT-138;Lo;0;L;;;;;N;;;;;\n1888A;TANGUT COMPONENT-139;Lo;0;L;;;;;N;;;;;\n1888B;TANGUT COMPONENT-140;Lo;0;L;;;;;N;;;;;\n1888C;TANGUT COMPONENT-141;Lo;0;L;;;;;N;;;;;\n1888D;TANGUT COMPONENT-142;Lo;0;L;;;;;N;;;;;\n1888E;TANGUT COMPONENT-143;Lo;0;L;;;;;N;;;;;\n1888F;TANGUT COMPONENT-144;Lo;0;L;;;;;N;;;;;\n18890;TANGUT COMPONENT-145;Lo;0;L;;;;;N;;;;;\n18891;TANGUT COMPONENT-146;Lo;0;L;;;;;N;;;;;\n18892;TANGUT COMPONENT-147;Lo;0;L;;;;;N;;;;;\n18893;TANGUT COMPONENT-148;Lo;0;L;;;;;N;;;;;\n18894;TANGUT COMPONENT-149;Lo;0;L;;;;;N;;;;;\n18895;TANGUT COMPONENT-150;Lo;0;L;;;;;N;;;;;\n18896;TANGUT COMPONENT-151;Lo;0;L;;;;;N;;;;;\n18897;TANGUT COMPONENT-152;Lo;0;L;;;;;N;;;;;\n18898;TANGUT COMPONENT-153;Lo;0;L;;;;;N;;;;;\n18899;TANGUT COMPONENT-154;Lo;0;L;;;;;N;;;;;\n1889A;TANGUT COMPONENT-155;Lo;0;L;;;;;N;;;;;\n1889B;TANGUT COMPONENT-156;Lo;0;L;;;;;N;;;;;\n1889C;TANGUT COMPONENT-157;Lo;0;L;;;;;N;;;;;\n1889D;TANGUT COMPONENT-158;Lo;0;L;;;;;N;;;;;\n1889E;TANGUT COMPONENT-159;Lo;0;L;;;;;N;;;;;\n1889F;TANGUT COMPONENT-160;Lo;0;L;;;;;N;;;;;\n188A0;TANGUT COMPONENT-161;Lo;0;L;;;;;N;;;;;\n188A1;TANGUT COMPONENT-162;Lo;0;L;;;;;N;;;;;\n188A2;TANGUT COMPONENT-163;Lo;0;L;;;;;N;;;;;\n188A3;TANGUT COMPONENT-164;Lo;0;L;;;;;N;;;;;\n188A4;TANGUT COMPONENT-165;Lo;0;L;;;;;N;;;;;\n188A5;TANGUT COMPONENT-166;Lo;0;L;;;;;N;;;;;\n188A6;TANGUT COMPONENT-167;Lo;0;L;;;;;N;;;;;\n188A7;TANGUT COMPONENT-168;Lo;0;L;;;;;N;;;;;\n188A8;TANGUT COMPONENT-169;Lo;0;L;;;;;N;;;;;\n188A9;TANGUT COMPONENT-170;Lo;0;L;;;;;N;;;;;\n188AA;TANGUT COMPONENT-171;Lo;0;L;;;;;N;;;;;\n188AB;TANGUT COMPONENT-172;Lo;0;L;;;;;N;;;;;\n188AC;TANGUT COMPONENT-173;Lo;0;L;;;;;N;;;;;\n188AD;TANGUT COMPONENT-174;Lo;0;L;;;;;N;;;;;\n188AE;TANGUT COMPONENT-175;Lo;0;L;;;;;N;;;;;\n188AF;TANGUT COMPONENT-176;Lo;0;L;;;;;N;;;;;\n188B0;TANGUT COMPONENT-177;Lo;0;L;;;;;N;;;;;\n188B1;TANGUT COMPONENT-178;Lo;0;L;;;;;N;;;;;\n188B2;TANGUT COMPONENT-179;Lo;0;L;;;;;N;;;;;\n188B3;TANGUT COMPONENT-180;Lo;0;L;;;;;N;;;;;\n188B4;TANGUT COMPONENT-181;Lo;0;L;;;;;N;;;;;\n188B5;TANGUT COMPONENT-182;Lo;0;L;;;;;N;;;;;\n188B6;TANGUT COMPONENT-183;Lo;0;L;;;;;N;;;;;\n188B7;TANGUT COMPONENT-184;Lo;0;L;;;;;N;;;;;\n188B8;TANGUT COMPONENT-185;Lo;0;L;;;;;N;;;;;\n188B9;TANGUT COMPONENT-186;Lo;0;L;;;;;N;;;;;\n188BA;TANGUT COMPONENT-187;Lo;0;L;;;;;N;;;;;\n188BB;TANGUT COMPONENT-188;Lo;0;L;;;;;N;;;;;\n188BC;TANGUT COMPONENT-189;Lo;0;L;;;;;N;;;;;\n188BD;TANGUT COMPONENT-190;Lo;0;L;;;;;N;;;;;\n188BE;TANGUT COMPONENT-191;Lo;0;L;;;;;N;;;;;\n188BF;TANGUT COMPONENT-192;Lo;0;L;;;;;N;;;;;\n188C0;TANGUT COMPONENT-193;Lo;0;L;;;;;N;;;;;\n188C1;TANGUT COMPONENT-194;Lo;0;L;;;;;N;;;;;\n188C2;TANGUT COMPONENT-195;Lo;0;L;;;;;N;;;;;\n188C3;TANGUT COMPONENT-196;Lo;0;L;;;;;N;;;;;\n188C4;TANGUT COMPONENT-197;Lo;0;L;;;;;N;;;;;\n188C5;TANGUT COMPONENT-198;Lo;0;L;;;;;N;;;;;\n188C6;TANGUT COMPONENT-199;Lo;0;L;;;;;N;;;;;\n188C7;TANGUT COMPONENT-200;Lo;0;L;;;;;N;;;;;\n188C8;TANGUT COMPONENT-201;Lo;0;L;;;;;N;;;;;\n188C9;TANGUT COMPONENT-202;Lo;0;L;;;;;N;;;;;\n188CA;TANGUT COMPONENT-203;Lo;0;L;;;;;N;;;;;\n188CB;TANGUT COMPONENT-204;Lo;0;L;;;;;N;;;;;\n188CC;TANGUT COMPONENT-205;Lo;0;L;;;;;N;;;;;\n188CD;TANGUT COMPONENT-206;Lo;0;L;;;;;N;;;;;\n188CE;TANGUT COMPONENT-207;Lo;0;L;;;;;N;;;;;\n188CF;TANGUT COMPONENT-208;Lo;0;L;;;;;N;;;;;\n188D0;TANGUT COMPONENT-209;Lo;0;L;;;;;N;;;;;\n188D1;TANGUT COMPONENT-210;Lo;0;L;;;;;N;;;;;\n188D2;TANGUT COMPONENT-211;Lo;0;L;;;;;N;;;;;\n188D3;TANGUT COMPONENT-212;Lo;0;L;;;;;N;;;;;\n188D4;TANGUT COMPONENT-213;Lo;0;L;;;;;N;;;;;\n188D5;TANGUT COMPONENT-214;Lo;0;L;;;;;N;;;;;\n188D6;TANGUT COMPONENT-215;Lo;0;L;;;;;N;;;;;\n188D7;TANGUT COMPONENT-216;Lo;0;L;;;;;N;;;;;\n188D8;TANGUT COMPONENT-217;Lo;0;L;;;;;N;;;;;\n188D9;TANGUT COMPONENT-218;Lo;0;L;;;;;N;;;;;\n188DA;TANGUT COMPONENT-219;Lo;0;L;;;;;N;;;;;\n188DB;TANGUT COMPONENT-220;Lo;0;L;;;;;N;;;;;\n188DC;TANGUT COMPONENT-221;Lo;0;L;;;;;N;;;;;\n188DD;TANGUT COMPONENT-222;Lo;0;L;;;;;N;;;;;\n188DE;TANGUT COMPONENT-223;Lo;0;L;;;;;N;;;;;\n188DF;TANGUT COMPONENT-224;Lo;0;L;;;;;N;;;;;\n188E0;TANGUT COMPONENT-225;Lo;0;L;;;;;N;;;;;\n188E1;TANGUT COMPONENT-226;Lo;0;L;;;;;N;;;;;\n188E2;TANGUT COMPONENT-227;Lo;0;L;;;;;N;;;;;\n188E3;TANGUT COMPONENT-228;Lo;0;L;;;;;N;;;;;\n188E4;TANGUT COMPONENT-229;Lo;0;L;;;;;N;;;;;\n188E5;TANGUT COMPONENT-230;Lo;0;L;;;;;N;;;;;\n188E6;TANGUT COMPONENT-231;Lo;0;L;;;;;N;;;;;\n188E7;TANGUT COMPONENT-232;Lo;0;L;;;;;N;;;;;\n188E8;TANGUT COMPONENT-233;Lo;0;L;;;;;N;;;;;\n188E9;TANGUT COMPONENT-234;Lo;0;L;;;;;N;;;;;\n188EA;TANGUT COMPONENT-235;Lo;0;L;;;;;N;;;;;\n188EB;TANGUT COMPONENT-236;Lo;0;L;;;;;N;;;;;\n188EC;TANGUT COMPONENT-237;Lo;0;L;;;;;N;;;;;\n188ED;TANGUT COMPONENT-238;Lo;0;L;;;;;N;;;;;\n188EE;TANGUT COMPONENT-239;Lo;0;L;;;;;N;;;;;\n188EF;TANGUT COMPONENT-240;Lo;0;L;;;;;N;;;;;\n188F0;TANGUT COMPONENT-241;Lo;0;L;;;;;N;;;;;\n188F1;TANGUT COMPONENT-242;Lo;0;L;;;;;N;;;;;\n188F2;TANGUT COMPONENT-243;Lo;0;L;;;;;N;;;;;\n188F3;TANGUT COMPONENT-244;Lo;0;L;;;;;N;;;;;\n188F4;TANGUT COMPONENT-245;Lo;0;L;;;;;N;;;;;\n188F5;TANGUT COMPONENT-246;Lo;0;L;;;;;N;;;;;\n188F6;TANGUT COMPONENT-247;Lo;0;L;;;;;N;;;;;\n188F7;TANGUT COMPONENT-248;Lo;0;L;;;;;N;;;;;\n188F8;TANGUT COMPONENT-249;Lo;0;L;;;;;N;;;;;\n188F9;TANGUT COMPONENT-250;Lo;0;L;;;;;N;;;;;\n188FA;TANGUT COMPONENT-251;Lo;0;L;;;;;N;;;;;\n188FB;TANGUT COMPONENT-252;Lo;0;L;;;;;N;;;;;\n188FC;TANGUT COMPONENT-253;Lo;0;L;;;;;N;;;;;\n188FD;TANGUT COMPONENT-254;Lo;0;L;;;;;N;;;;;\n188FE;TANGUT COMPONENT-255;Lo;0;L;;;;;N;;;;;\n188FF;TANGUT COMPONENT-256;Lo;0;L;;;;;N;;;;;\n18900;TANGUT COMPONENT-257;Lo;0;L;;;;;N;;;;;\n18901;TANGUT COMPONENT-258;Lo;0;L;;;;;N;;;;;\n18902;TANGUT COMPONENT-259;Lo;0;L;;;;;N;;;;;\n18903;TANGUT COMPONENT-260;Lo;0;L;;;;;N;;;;;\n18904;TANGUT COMPONENT-261;Lo;0;L;;;;;N;;;;;\n18905;TANGUT COMPONENT-262;Lo;0;L;;;;;N;;;;;\n18906;TANGUT COMPONENT-263;Lo;0;L;;;;;N;;;;;\n18907;TANGUT COMPONENT-264;Lo;0;L;;;;;N;;;;;\n18908;TANGUT COMPONENT-265;Lo;0;L;;;;;N;;;;;\n18909;TANGUT COMPONENT-266;Lo;0;L;;;;;N;;;;;\n1890A;TANGUT COMPONENT-267;Lo;0;L;;;;;N;;;;;\n1890B;TANGUT COMPONENT-268;Lo;0;L;;;;;N;;;;;\n1890C;TANGUT COMPONENT-269;Lo;0;L;;;;;N;;;;;\n1890D;TANGUT COMPONENT-270;Lo;0;L;;;;;N;;;;;\n1890E;TANGUT COMPONENT-271;Lo;0;L;;;;;N;;;;;\n1890F;TANGUT COMPONENT-272;Lo;0;L;;;;;N;;;;;\n18910;TANGUT COMPONENT-273;Lo;0;L;;;;;N;;;;;\n18911;TANGUT COMPONENT-274;Lo;0;L;;;;;N;;;;;\n18912;TANGUT COMPONENT-275;Lo;0;L;;;;;N;;;;;\n18913;TANGUT COMPONENT-276;Lo;0;L;;;;;N;;;;;\n18914;TANGUT COMPONENT-277;Lo;0;L;;;;;N;;;;;\n18915;TANGUT COMPONENT-278;Lo;0;L;;;;;N;;;;;\n18916;TANGUT COMPONENT-279;Lo;0;L;;;;;N;;;;;\n18917;TANGUT COMPONENT-280;Lo;0;L;;;;;N;;;;;\n18918;TANGUT COMPONENT-281;Lo;0;L;;;;;N;;;;;\n18919;TANGUT COMPONENT-282;Lo;0;L;;;;;N;;;;;\n1891A;TANGUT COMPONENT-283;Lo;0;L;;;;;N;;;;;\n1891B;TANGUT COMPONENT-284;Lo;0;L;;;;;N;;;;;\n1891C;TANGUT COMPONENT-285;Lo;0;L;;;;;N;;;;;\n1891D;TANGUT COMPONENT-286;Lo;0;L;;;;;N;;;;;\n1891E;TANGUT COMPONENT-287;Lo;0;L;;;;;N;;;;;\n1891F;TANGUT COMPONENT-288;Lo;0;L;;;;;N;;;;;\n18920;TANGUT COMPONENT-289;Lo;0;L;;;;;N;;;;;\n18921;TANGUT COMPONENT-290;Lo;0;L;;;;;N;;;;;\n18922;TANGUT COMPONENT-291;Lo;0;L;;;;;N;;;;;\n18923;TANGUT COMPONENT-292;Lo;0;L;;;;;N;;;;;\n18924;TANGUT COMPONENT-293;Lo;0;L;;;;;N;;;;;\n18925;TANGUT COMPONENT-294;Lo;0;L;;;;;N;;;;;\n18926;TANGUT COMPONENT-295;Lo;0;L;;;;;N;;;;;\n18927;TANGUT COMPONENT-296;Lo;0;L;;;;;N;;;;;\n18928;TANGUT COMPONENT-297;Lo;0;L;;;;;N;;;;;\n18929;TANGUT COMPONENT-298;Lo;0;L;;;;;N;;;;;\n1892A;TANGUT COMPONENT-299;Lo;0;L;;;;;N;;;;;\n1892B;TANGUT COMPONENT-300;Lo;0;L;;;;;N;;;;;\n1892C;TANGUT COMPONENT-301;Lo;0;L;;;;;N;;;;;\n1892D;TANGUT COMPONENT-302;Lo;0;L;;;;;N;;;;;\n1892E;TANGUT COMPONENT-303;Lo;0;L;;;;;N;;;;;\n1892F;TANGUT COMPONENT-304;Lo;0;L;;;;;N;;;;;\n18930;TANGUT COMPONENT-305;Lo;0;L;;;;;N;;;;;\n18931;TANGUT COMPONENT-306;Lo;0;L;;;;;N;;;;;\n18932;TANGUT COMPONENT-307;Lo;0;L;;;;;N;;;;;\n18933;TANGUT COMPONENT-308;Lo;0;L;;;;;N;;;;;\n18934;TANGUT COMPONENT-309;Lo;0;L;;;;;N;;;;;\n18935;TANGUT COMPONENT-310;Lo;0;L;;;;;N;;;;;\n18936;TANGUT COMPONENT-311;Lo;0;L;;;;;N;;;;;\n18937;TANGUT COMPONENT-312;Lo;0;L;;;;;N;;;;;\n18938;TANGUT COMPONENT-313;Lo;0;L;;;;;N;;;;;\n18939;TANGUT COMPONENT-314;Lo;0;L;;;;;N;;;;;\n1893A;TANGUT COMPONENT-315;Lo;0;L;;;;;N;;;;;\n1893B;TANGUT COMPONENT-316;Lo;0;L;;;;;N;;;;;\n1893C;TANGUT COMPONENT-317;Lo;0;L;;;;;N;;;;;\n1893D;TANGUT COMPONENT-318;Lo;0;L;;;;;N;;;;;\n1893E;TANGUT COMPONENT-319;Lo;0;L;;;;;N;;;;;\n1893F;TANGUT COMPONENT-320;Lo;0;L;;;;;N;;;;;\n18940;TANGUT COMPONENT-321;Lo;0;L;;;;;N;;;;;\n18941;TANGUT COMPONENT-322;Lo;0;L;;;;;N;;;;;\n18942;TANGUT COMPONENT-323;Lo;0;L;;;;;N;;;;;\n18943;TANGUT COMPONENT-324;Lo;0;L;;;;;N;;;;;\n18944;TANGUT COMPONENT-325;Lo;0;L;;;;;N;;;;;\n18945;TANGUT COMPONENT-326;Lo;0;L;;;;;N;;;;;\n18946;TANGUT COMPONENT-327;Lo;0;L;;;;;N;;;;;\n18947;TANGUT COMPONENT-328;Lo;0;L;;;;;N;;;;;\n18948;TANGUT COMPONENT-329;Lo;0;L;;;;;N;;;;;\n18949;TANGUT COMPONENT-330;Lo;0;L;;;;;N;;;;;\n1894A;TANGUT COMPONENT-331;Lo;0;L;;;;;N;;;;;\n1894B;TANGUT COMPONENT-332;Lo;0;L;;;;;N;;;;;\n1894C;TANGUT COMPONENT-333;Lo;0;L;;;;;N;;;;;\n1894D;TANGUT COMPONENT-334;Lo;0;L;;;;;N;;;;;\n1894E;TANGUT COMPONENT-335;Lo;0;L;;;;;N;;;;;\n1894F;TANGUT COMPONENT-336;Lo;0;L;;;;;N;;;;;\n18950;TANGUT COMPONENT-337;Lo;0;L;;;;;N;;;;;\n18951;TANGUT COMPONENT-338;Lo;0;L;;;;;N;;;;;\n18952;TANGUT COMPONENT-339;Lo;0;L;;;;;N;;;;;\n18953;TANGUT COMPONENT-340;Lo;0;L;;;;;N;;;;;\n18954;TANGUT COMPONENT-341;Lo;0;L;;;;;N;;;;;\n18955;TANGUT COMPONENT-342;Lo;0;L;;;;;N;;;;;\n18956;TANGUT COMPONENT-343;Lo;0;L;;;;;N;;;;;\n18957;TANGUT COMPONENT-344;Lo;0;L;;;;;N;;;;;\n18958;TANGUT COMPONENT-345;Lo;0;L;;;;;N;;;;;\n18959;TANGUT COMPONENT-346;Lo;0;L;;;;;N;;;;;\n1895A;TANGUT COMPONENT-347;Lo;0;L;;;;;N;;;;;\n1895B;TANGUT COMPONENT-348;Lo;0;L;;;;;N;;;;;\n1895C;TANGUT COMPONENT-349;Lo;0;L;;;;;N;;;;;\n1895D;TANGUT COMPONENT-350;Lo;0;L;;;;;N;;;;;\n1895E;TANGUT COMPONENT-351;Lo;0;L;;;;;N;;;;;\n1895F;TANGUT COMPONENT-352;Lo;0;L;;;;;N;;;;;\n18960;TANGUT COMPONENT-353;Lo;0;L;;;;;N;;;;;\n18961;TANGUT COMPONENT-354;Lo;0;L;;;;;N;;;;;\n18962;TANGUT COMPONENT-355;Lo;0;L;;;;;N;;;;;\n18963;TANGUT COMPONENT-356;Lo;0;L;;;;;N;;;;;\n18964;TANGUT COMPONENT-357;Lo;0;L;;;;;N;;;;;\n18965;TANGUT COMPONENT-358;Lo;0;L;;;;;N;;;;;\n18966;TANGUT COMPONENT-359;Lo;0;L;;;;;N;;;;;\n18967;TANGUT COMPONENT-360;Lo;0;L;;;;;N;;;;;\n18968;TANGUT COMPONENT-361;Lo;0;L;;;;;N;;;;;\n18969;TANGUT COMPONENT-362;Lo;0;L;;;;;N;;;;;\n1896A;TANGUT COMPONENT-363;Lo;0;L;;;;;N;;;;;\n1896B;TANGUT COMPONENT-364;Lo;0;L;;;;;N;;;;;\n1896C;TANGUT COMPONENT-365;Lo;0;L;;;;;N;;;;;\n1896D;TANGUT COMPONENT-366;Lo;0;L;;;;;N;;;;;\n1896E;TANGUT COMPONENT-367;Lo;0;L;;;;;N;;;;;\n1896F;TANGUT COMPONENT-368;Lo;0;L;;;;;N;;;;;\n18970;TANGUT COMPONENT-369;Lo;0;L;;;;;N;;;;;\n18971;TANGUT COMPONENT-370;Lo;0;L;;;;;N;;;;;\n18972;TANGUT COMPONENT-371;Lo;0;L;;;;;N;;;;;\n18973;TANGUT COMPONENT-372;Lo;0;L;;;;;N;;;;;\n18974;TANGUT COMPONENT-373;Lo;0;L;;;;;N;;;;;\n18975;TANGUT COMPONENT-374;Lo;0;L;;;;;N;;;;;\n18976;TANGUT COMPONENT-375;Lo;0;L;;;;;N;;;;;\n18977;TANGUT COMPONENT-376;Lo;0;L;;;;;N;;;;;\n18978;TANGUT COMPONENT-377;Lo;0;L;;;;;N;;;;;\n18979;TANGUT COMPONENT-378;Lo;0;L;;;;;N;;;;;\n1897A;TANGUT COMPONENT-379;Lo;0;L;;;;;N;;;;;\n1897B;TANGUT COMPONENT-380;Lo;0;L;;;;;N;;;;;\n1897C;TANGUT COMPONENT-381;Lo;0;L;;;;;N;;;;;\n1897D;TANGUT COMPONENT-382;Lo;0;L;;;;;N;;;;;\n1897E;TANGUT COMPONENT-383;Lo;0;L;;;;;N;;;;;\n1897F;TANGUT COMPONENT-384;Lo;0;L;;;;;N;;;;;\n18980;TANGUT COMPONENT-385;Lo;0;L;;;;;N;;;;;\n18981;TANGUT COMPONENT-386;Lo;0;L;;;;;N;;;;;\n18982;TANGUT COMPONENT-387;Lo;0;L;;;;;N;;;;;\n18983;TANGUT COMPONENT-388;Lo;0;L;;;;;N;;;;;\n18984;TANGUT COMPONENT-389;Lo;0;L;;;;;N;;;;;\n18985;TANGUT COMPONENT-390;Lo;0;L;;;;;N;;;;;\n18986;TANGUT COMPONENT-391;Lo;0;L;;;;;N;;;;;\n18987;TANGUT COMPONENT-392;Lo;0;L;;;;;N;;;;;\n18988;TANGUT COMPONENT-393;Lo;0;L;;;;;N;;;;;\n18989;TANGUT COMPONENT-394;Lo;0;L;;;;;N;;;;;\n1898A;TANGUT COMPONENT-395;Lo;0;L;;;;;N;;;;;\n1898B;TANGUT COMPONENT-396;Lo;0;L;;;;;N;;;;;\n1898C;TANGUT COMPONENT-397;Lo;0;L;;;;;N;;;;;\n1898D;TANGUT COMPONENT-398;Lo;0;L;;;;;N;;;;;\n1898E;TANGUT COMPONENT-399;Lo;0;L;;;;;N;;;;;\n1898F;TANGUT COMPONENT-400;Lo;0;L;;;;;N;;;;;\n18990;TANGUT COMPONENT-401;Lo;0;L;;;;;N;;;;;\n18991;TANGUT COMPONENT-402;Lo;0;L;;;;;N;;;;;\n18992;TANGUT COMPONENT-403;Lo;0;L;;;;;N;;;;;\n18993;TANGUT COMPONENT-404;Lo;0;L;;;;;N;;;;;\n18994;TANGUT COMPONENT-405;Lo;0;L;;;;;N;;;;;\n18995;TANGUT COMPONENT-406;Lo;0;L;;;;;N;;;;;\n18996;TANGUT COMPONENT-407;Lo;0;L;;;;;N;;;;;\n18997;TANGUT COMPONENT-408;Lo;0;L;;;;;N;;;;;\n18998;TANGUT COMPONENT-409;Lo;0;L;;;;;N;;;;;\n18999;TANGUT COMPONENT-410;Lo;0;L;;;;;N;;;;;\n1899A;TANGUT COMPONENT-411;Lo;0;L;;;;;N;;;;;\n1899B;TANGUT COMPONENT-412;Lo;0;L;;;;;N;;;;;\n1899C;TANGUT COMPONENT-413;Lo;0;L;;;;;N;;;;;\n1899D;TANGUT COMPONENT-414;Lo;0;L;;;;;N;;;;;\n1899E;TANGUT COMPONENT-415;Lo;0;L;;;;;N;;;;;\n1899F;TANGUT COMPONENT-416;Lo;0;L;;;;;N;;;;;\n189A0;TANGUT COMPONENT-417;Lo;0;L;;;;;N;;;;;\n189A1;TANGUT COMPONENT-418;Lo;0;L;;;;;N;;;;;\n189A2;TANGUT COMPONENT-419;Lo;0;L;;;;;N;;;;;\n189A3;TANGUT COMPONENT-420;Lo;0;L;;;;;N;;;;;\n189A4;TANGUT COMPONENT-421;Lo;0;L;;;;;N;;;;;\n189A5;TANGUT COMPONENT-422;Lo;0;L;;;;;N;;;;;\n189A6;TANGUT COMPONENT-423;Lo;0;L;;;;;N;;;;;\n189A7;TANGUT COMPONENT-424;Lo;0;L;;;;;N;;;;;\n189A8;TANGUT COMPONENT-425;Lo;0;L;;;;;N;;;;;\n189A9;TANGUT COMPONENT-426;Lo;0;L;;;;;N;;;;;\n189AA;TANGUT COMPONENT-427;Lo;0;L;;;;;N;;;;;\n189AB;TANGUT COMPONENT-428;Lo;0;L;;;;;N;;;;;\n189AC;TANGUT COMPONENT-429;Lo;0;L;;;;;N;;;;;\n189AD;TANGUT COMPONENT-430;Lo;0;L;;;;;N;;;;;\n189AE;TANGUT COMPONENT-431;Lo;0;L;;;;;N;;;;;\n189AF;TANGUT COMPONENT-432;Lo;0;L;;;;;N;;;;;\n189B0;TANGUT COMPONENT-433;Lo;0;L;;;;;N;;;;;\n189B1;TANGUT COMPONENT-434;Lo;0;L;;;;;N;;;;;\n189B2;TANGUT COMPONENT-435;Lo;0;L;;;;;N;;;;;\n189B3;TANGUT COMPONENT-436;Lo;0;L;;;;;N;;;;;\n189B4;TANGUT COMPONENT-437;Lo;0;L;;;;;N;;;;;\n189B5;TANGUT COMPONENT-438;Lo;0;L;;;;;N;;;;;\n189B6;TANGUT COMPONENT-439;Lo;0;L;;;;;N;;;;;\n189B7;TANGUT COMPONENT-440;Lo;0;L;;;;;N;;;;;\n189B8;TANGUT COMPONENT-441;Lo;0;L;;;;;N;;;;;\n189B9;TANGUT COMPONENT-442;Lo;0;L;;;;;N;;;;;\n189BA;TANGUT COMPONENT-443;Lo;0;L;;;;;N;;;;;\n189BB;TANGUT COMPONENT-444;Lo;0;L;;;;;N;;;;;\n189BC;TANGUT COMPONENT-445;Lo;0;L;;;;;N;;;;;\n189BD;TANGUT COMPONENT-446;Lo;0;L;;;;;N;;;;;\n189BE;TANGUT COMPONENT-447;Lo;0;L;;;;;N;;;;;\n189BF;TANGUT COMPONENT-448;Lo;0;L;;;;;N;;;;;\n189C0;TANGUT COMPONENT-449;Lo;0;L;;;;;N;;;;;\n189C1;TANGUT COMPONENT-450;Lo;0;L;;;;;N;;;;;\n189C2;TANGUT COMPONENT-451;Lo;0;L;;;;;N;;;;;\n189C3;TANGUT COMPONENT-452;Lo;0;L;;;;;N;;;;;\n189C4;TANGUT COMPONENT-453;Lo;0;L;;;;;N;;;;;\n189C5;TANGUT COMPONENT-454;Lo;0;L;;;;;N;;;;;\n189C6;TANGUT COMPONENT-455;Lo;0;L;;;;;N;;;;;\n189C7;TANGUT COMPONENT-456;Lo;0;L;;;;;N;;;;;\n189C8;TANGUT COMPONENT-457;Lo;0;L;;;;;N;;;;;\n189C9;TANGUT COMPONENT-458;Lo;0;L;;;;;N;;;;;\n189CA;TANGUT COMPONENT-459;Lo;0;L;;;;;N;;;;;\n189CB;TANGUT COMPONENT-460;Lo;0;L;;;;;N;;;;;\n189CC;TANGUT COMPONENT-461;Lo;0;L;;;;;N;;;;;\n189CD;TANGUT COMPONENT-462;Lo;0;L;;;;;N;;;;;\n189CE;TANGUT COMPONENT-463;Lo;0;L;;;;;N;;;;;\n189CF;TANGUT COMPONENT-464;Lo;0;L;;;;;N;;;;;\n189D0;TANGUT COMPONENT-465;Lo;0;L;;;;;N;;;;;\n189D1;TANGUT COMPONENT-466;Lo;0;L;;;;;N;;;;;\n189D2;TANGUT COMPONENT-467;Lo;0;L;;;;;N;;;;;\n189D3;TANGUT COMPONENT-468;Lo;0;L;;;;;N;;;;;\n189D4;TANGUT COMPONENT-469;Lo;0;L;;;;;N;;;;;\n189D5;TANGUT COMPONENT-470;Lo;0;L;;;;;N;;;;;\n189D6;TANGUT COMPONENT-471;Lo;0;L;;;;;N;;;;;\n189D7;TANGUT COMPONENT-472;Lo;0;L;;;;;N;;;;;\n189D8;TANGUT COMPONENT-473;Lo;0;L;;;;;N;;;;;\n189D9;TANGUT COMPONENT-474;Lo;0;L;;;;;N;;;;;\n189DA;TANGUT COMPONENT-475;Lo;0;L;;;;;N;;;;;\n189DB;TANGUT COMPONENT-476;Lo;0;L;;;;;N;;;;;\n189DC;TANGUT COMPONENT-477;Lo;0;L;;;;;N;;;;;\n189DD;TANGUT COMPONENT-478;Lo;0;L;;;;;N;;;;;\n189DE;TANGUT COMPONENT-479;Lo;0;L;;;;;N;;;;;\n189DF;TANGUT COMPONENT-480;Lo;0;L;;;;;N;;;;;\n189E0;TANGUT COMPONENT-481;Lo;0;L;;;;;N;;;;;\n189E1;TANGUT COMPONENT-482;Lo;0;L;;;;;N;;;;;\n189E2;TANGUT COMPONENT-483;Lo;0;L;;;;;N;;;;;\n189E3;TANGUT COMPONENT-484;Lo;0;L;;;;;N;;;;;\n189E4;TANGUT COMPONENT-485;Lo;0;L;;;;;N;;;;;\n189E5;TANGUT COMPONENT-486;Lo;0;L;;;;;N;;;;;\n189E6;TANGUT COMPONENT-487;Lo;0;L;;;;;N;;;;;\n189E7;TANGUT COMPONENT-488;Lo;0;L;;;;;N;;;;;\n189E8;TANGUT COMPONENT-489;Lo;0;L;;;;;N;;;;;\n189E9;TANGUT COMPONENT-490;Lo;0;L;;;;;N;;;;;\n189EA;TANGUT COMPONENT-491;Lo;0;L;;;;;N;;;;;\n189EB;TANGUT COMPONENT-492;Lo;0;L;;;;;N;;;;;\n189EC;TANGUT COMPONENT-493;Lo;0;L;;;;;N;;;;;\n189ED;TANGUT COMPONENT-494;Lo;0;L;;;;;N;;;;;\n189EE;TANGUT COMPONENT-495;Lo;0;L;;;;;N;;;;;\n189EF;TANGUT COMPONENT-496;Lo;0;L;;;;;N;;;;;\n189F0;TANGUT COMPONENT-497;Lo;0;L;;;;;N;;;;;\n189F1;TANGUT COMPONENT-498;Lo;0;L;;;;;N;;;;;\n189F2;TANGUT COMPONENT-499;Lo;0;L;;;;;N;;;;;\n189F3;TANGUT COMPONENT-500;Lo;0;L;;;;;N;;;;;\n189F4;TANGUT COMPONENT-501;Lo;0;L;;;;;N;;;;;\n189F5;TANGUT COMPONENT-502;Lo;0;L;;;;;N;;;;;\n189F6;TANGUT COMPONENT-503;Lo;0;L;;;;;N;;;;;\n189F7;TANGUT COMPONENT-504;Lo;0;L;;;;;N;;;;;\n189F8;TANGUT COMPONENT-505;Lo;0;L;;;;;N;;;;;\n189F9;TANGUT COMPONENT-506;Lo;0;L;;;;;N;;;;;\n189FA;TANGUT COMPONENT-507;Lo;0;L;;;;;N;;;;;\n189FB;TANGUT COMPONENT-508;Lo;0;L;;;;;N;;;;;\n189FC;TANGUT COMPONENT-509;Lo;0;L;;;;;N;;;;;\n189FD;TANGUT COMPONENT-510;Lo;0;L;;;;;N;;;;;\n189FE;TANGUT COMPONENT-511;Lo;0;L;;;;;N;;;;;\n189FF;TANGUT COMPONENT-512;Lo;0;L;;;;;N;;;;;\n18A00;TANGUT COMPONENT-513;Lo;0;L;;;;;N;;;;;\n18A01;TANGUT COMPONENT-514;Lo;0;L;;;;;N;;;;;\n18A02;TANGUT COMPONENT-515;Lo;0;L;;;;;N;;;;;\n18A03;TANGUT COMPONENT-516;Lo;0;L;;;;;N;;;;;\n18A04;TANGUT COMPONENT-517;Lo;0;L;;;;;N;;;;;\n18A05;TANGUT COMPONENT-518;Lo;0;L;;;;;N;;;;;\n18A06;TANGUT COMPONENT-519;Lo;0;L;;;;;N;;;;;\n18A07;TANGUT COMPONENT-520;Lo;0;L;;;;;N;;;;;\n18A08;TANGUT COMPONENT-521;Lo;0;L;;;;;N;;;;;\n18A09;TANGUT COMPONENT-522;Lo;0;L;;;;;N;;;;;\n18A0A;TANGUT COMPONENT-523;Lo;0;L;;;;;N;;;;;\n18A0B;TANGUT COMPONENT-524;Lo;0;L;;;;;N;;;;;\n18A0C;TANGUT COMPONENT-525;Lo;0;L;;;;;N;;;;;\n18A0D;TANGUT COMPONENT-526;Lo;0;L;;;;;N;;;;;\n18A0E;TANGUT COMPONENT-527;Lo;0;L;;;;;N;;;;;\n18A0F;TANGUT COMPONENT-528;Lo;0;L;;;;;N;;;;;\n18A10;TANGUT COMPONENT-529;Lo;0;L;;;;;N;;;;;\n18A11;TANGUT COMPONENT-530;Lo;0;L;;;;;N;;;;;\n18A12;TANGUT COMPONENT-531;Lo;0;L;;;;;N;;;;;\n18A13;TANGUT COMPONENT-532;Lo;0;L;;;;;N;;;;;\n18A14;TANGUT COMPONENT-533;Lo;0;L;;;;;N;;;;;\n18A15;TANGUT COMPONENT-534;Lo;0;L;;;;;N;;;;;\n18A16;TANGUT COMPONENT-535;Lo;0;L;;;;;N;;;;;\n18A17;TANGUT COMPONENT-536;Lo;0;L;;;;;N;;;;;\n18A18;TANGUT COMPONENT-537;Lo;0;L;;;;;N;;;;;\n18A19;TANGUT COMPONENT-538;Lo;0;L;;;;;N;;;;;\n18A1A;TANGUT COMPONENT-539;Lo;0;L;;;;;N;;;;;\n18A1B;TANGUT COMPONENT-540;Lo;0;L;;;;;N;;;;;\n18A1C;TANGUT COMPONENT-541;Lo;0;L;;;;;N;;;;;\n18A1D;TANGUT COMPONENT-542;Lo;0;L;;;;;N;;;;;\n18A1E;TANGUT COMPONENT-543;Lo;0;L;;;;;N;;;;;\n18A1F;TANGUT COMPONENT-544;Lo;0;L;;;;;N;;;;;\n18A20;TANGUT COMPONENT-545;Lo;0;L;;;;;N;;;;;\n18A21;TANGUT COMPONENT-546;Lo;0;L;;;;;N;;;;;\n18A22;TANGUT COMPONENT-547;Lo;0;L;;;;;N;;;;;\n18A23;TANGUT COMPONENT-548;Lo;0;L;;;;;N;;;;;\n18A24;TANGUT COMPONENT-549;Lo;0;L;;;;;N;;;;;\n18A25;TANGUT COMPONENT-550;Lo;0;L;;;;;N;;;;;\n18A26;TANGUT COMPONENT-551;Lo;0;L;;;;;N;;;;;\n18A27;TANGUT COMPONENT-552;Lo;0;L;;;;;N;;;;;\n18A28;TANGUT COMPONENT-553;Lo;0;L;;;;;N;;;;;\n18A29;TANGUT COMPONENT-554;Lo;0;L;;;;;N;;;;;\n18A2A;TANGUT COMPONENT-555;Lo;0;L;;;;;N;;;;;\n18A2B;TANGUT COMPONENT-556;Lo;0;L;;;;;N;;;;;\n18A2C;TANGUT COMPONENT-557;Lo;0;L;;;;;N;;;;;\n18A2D;TANGUT COMPONENT-558;Lo;0;L;;;;;N;;;;;\n18A2E;TANGUT COMPONENT-559;Lo;0;L;;;;;N;;;;;\n18A2F;TANGUT COMPONENT-560;Lo;0;L;;;;;N;;;;;\n18A30;TANGUT COMPONENT-561;Lo;0;L;;;;;N;;;;;\n18A31;TANGUT COMPONENT-562;Lo;0;L;;;;;N;;;;;\n18A32;TANGUT COMPONENT-563;Lo;0;L;;;;;N;;;;;\n18A33;TANGUT COMPONENT-564;Lo;0;L;;;;;N;;;;;\n18A34;TANGUT COMPONENT-565;Lo;0;L;;;;;N;;;;;\n18A35;TANGUT COMPONENT-566;Lo;0;L;;;;;N;;;;;\n18A36;TANGUT COMPONENT-567;Lo;0;L;;;;;N;;;;;\n18A37;TANGUT COMPONENT-568;Lo;0;L;;;;;N;;;;;\n18A38;TANGUT COMPONENT-569;Lo;0;L;;;;;N;;;;;\n18A39;TANGUT COMPONENT-570;Lo;0;L;;;;;N;;;;;\n18A3A;TANGUT COMPONENT-571;Lo;0;L;;;;;N;;;;;\n18A3B;TANGUT COMPONENT-572;Lo;0;L;;;;;N;;;;;\n18A3C;TANGUT COMPONENT-573;Lo;0;L;;;;;N;;;;;\n18A3D;TANGUT COMPONENT-574;Lo;0;L;;;;;N;;;;;\n18A3E;TANGUT COMPONENT-575;Lo;0;L;;;;;N;;;;;\n18A3F;TANGUT COMPONENT-576;Lo;0;L;;;;;N;;;;;\n18A40;TANGUT COMPONENT-577;Lo;0;L;;;;;N;;;;;\n18A41;TANGUT COMPONENT-578;Lo;0;L;;;;;N;;;;;\n18A42;TANGUT COMPONENT-579;Lo;0;L;;;;;N;;;;;\n18A43;TANGUT COMPONENT-580;Lo;0;L;;;;;N;;;;;\n18A44;TANGUT COMPONENT-581;Lo;0;L;;;;;N;;;;;\n18A45;TANGUT COMPONENT-582;Lo;0;L;;;;;N;;;;;\n18A46;TANGUT COMPONENT-583;Lo;0;L;;;;;N;;;;;\n18A47;TANGUT COMPONENT-584;Lo;0;L;;;;;N;;;;;\n18A48;TANGUT COMPONENT-585;Lo;0;L;;;;;N;;;;;\n18A49;TANGUT COMPONENT-586;Lo;0;L;;;;;N;;;;;\n18A4A;TANGUT COMPONENT-587;Lo;0;L;;;;;N;;;;;\n18A4B;TANGUT COMPONENT-588;Lo;0;L;;;;;N;;;;;\n18A4C;TANGUT COMPONENT-589;Lo;0;L;;;;;N;;;;;\n18A4D;TANGUT COMPONENT-590;Lo;0;L;;;;;N;;;;;\n18A4E;TANGUT COMPONENT-591;Lo;0;L;;;;;N;;;;;\n18A4F;TANGUT COMPONENT-592;Lo;0;L;;;;;N;;;;;\n18A50;TANGUT COMPONENT-593;Lo;0;L;;;;;N;;;;;\n18A51;TANGUT COMPONENT-594;Lo;0;L;;;;;N;;;;;\n18A52;TANGUT COMPONENT-595;Lo;0;L;;;;;N;;;;;\n18A53;TANGUT COMPONENT-596;Lo;0;L;;;;;N;;;;;\n18A54;TANGUT COMPONENT-597;Lo;0;L;;;;;N;;;;;\n18A55;TANGUT COMPONENT-598;Lo;0;L;;;;;N;;;;;\n18A56;TANGUT COMPONENT-599;Lo;0;L;;;;;N;;;;;\n18A57;TANGUT COMPONENT-600;Lo;0;L;;;;;N;;;;;\n18A58;TANGUT COMPONENT-601;Lo;0;L;;;;;N;;;;;\n18A59;TANGUT COMPONENT-602;Lo;0;L;;;;;N;;;;;\n18A5A;TANGUT COMPONENT-603;Lo;0;L;;;;;N;;;;;\n18A5B;TANGUT COMPONENT-604;Lo;0;L;;;;;N;;;;;\n18A5C;TANGUT COMPONENT-605;Lo;0;L;;;;;N;;;;;\n18A5D;TANGUT COMPONENT-606;Lo;0;L;;;;;N;;;;;\n18A5E;TANGUT COMPONENT-607;Lo;0;L;;;;;N;;;;;\n18A5F;TANGUT COMPONENT-608;Lo;0;L;;;;;N;;;;;\n18A60;TANGUT COMPONENT-609;Lo;0;L;;;;;N;;;;;\n18A61;TANGUT COMPONENT-610;Lo;0;L;;;;;N;;;;;\n18A62;TANGUT COMPONENT-611;Lo;0;L;;;;;N;;;;;\n18A63;TANGUT COMPONENT-612;Lo;0;L;;;;;N;;;;;\n18A64;TANGUT COMPONENT-613;Lo;0;L;;;;;N;;;;;\n18A65;TANGUT COMPONENT-614;Lo;0;L;;;;;N;;;;;\n18A66;TANGUT COMPONENT-615;Lo;0;L;;;;;N;;;;;\n18A67;TANGUT COMPONENT-616;Lo;0;L;;;;;N;;;;;\n18A68;TANGUT COMPONENT-617;Lo;0;L;;;;;N;;;;;\n18A69;TANGUT COMPONENT-618;Lo;0;L;;;;;N;;;;;\n18A6A;TANGUT COMPONENT-619;Lo;0;L;;;;;N;;;;;\n18A6B;TANGUT COMPONENT-620;Lo;0;L;;;;;N;;;;;\n18A6C;TANGUT COMPONENT-621;Lo;0;L;;;;;N;;;;;\n18A6D;TANGUT COMPONENT-622;Lo;0;L;;;;;N;;;;;\n18A6E;TANGUT COMPONENT-623;Lo;0;L;;;;;N;;;;;\n18A6F;TANGUT COMPONENT-624;Lo;0;L;;;;;N;;;;;\n18A70;TANGUT COMPONENT-625;Lo;0;L;;;;;N;;;;;\n18A71;TANGUT COMPONENT-626;Lo;0;L;;;;;N;;;;;\n18A72;TANGUT COMPONENT-627;Lo;0;L;;;;;N;;;;;\n18A73;TANGUT COMPONENT-628;Lo;0;L;;;;;N;;;;;\n18A74;TANGUT COMPONENT-629;Lo;0;L;;;;;N;;;;;\n18A75;TANGUT COMPONENT-630;Lo;0;L;;;;;N;;;;;\n18A76;TANGUT COMPONENT-631;Lo;0;L;;;;;N;;;;;\n18A77;TANGUT COMPONENT-632;Lo;0;L;;;;;N;;;;;\n18A78;TANGUT COMPONENT-633;Lo;0;L;;;;;N;;;;;\n18A79;TANGUT COMPONENT-634;Lo;0;L;;;;;N;;;;;\n18A7A;TANGUT COMPONENT-635;Lo;0;L;;;;;N;;;;;\n18A7B;TANGUT COMPONENT-636;Lo;0;L;;;;;N;;;;;\n18A7C;TANGUT COMPONENT-637;Lo;0;L;;;;;N;;;;;\n18A7D;TANGUT COMPONENT-638;Lo;0;L;;;;;N;;;;;\n18A7E;TANGUT COMPONENT-639;Lo;0;L;;;;;N;;;;;\n18A7F;TANGUT COMPONENT-640;Lo;0;L;;;;;N;;;;;\n18A80;TANGUT COMPONENT-641;Lo;0;L;;;;;N;;;;;\n18A81;TANGUT COMPONENT-642;Lo;0;L;;;;;N;;;;;\n18A82;TANGUT COMPONENT-643;Lo;0;L;;;;;N;;;;;\n18A83;TANGUT COMPONENT-644;Lo;0;L;;;;;N;;;;;\n18A84;TANGUT COMPONENT-645;Lo;0;L;;;;;N;;;;;\n18A85;TANGUT COMPONENT-646;Lo;0;L;;;;;N;;;;;\n18A86;TANGUT COMPONENT-647;Lo;0;L;;;;;N;;;;;\n18A87;TANGUT COMPONENT-648;Lo;0;L;;;;;N;;;;;\n18A88;TANGUT COMPONENT-649;Lo;0;L;;;;;N;;;;;\n18A89;TANGUT COMPONENT-650;Lo;0;L;;;;;N;;;;;\n18A8A;TANGUT COMPONENT-651;Lo;0;L;;;;;N;;;;;\n18A8B;TANGUT COMPONENT-652;Lo;0;L;;;;;N;;;;;\n18A8C;TANGUT COMPONENT-653;Lo;0;L;;;;;N;;;;;\n18A8D;TANGUT COMPONENT-654;Lo;0;L;;;;;N;;;;;\n18A8E;TANGUT COMPONENT-655;Lo;0;L;;;;;N;;;;;\n18A8F;TANGUT COMPONENT-656;Lo;0;L;;;;;N;;;;;\n18A90;TANGUT COMPONENT-657;Lo;0;L;;;;;N;;;;;\n18A91;TANGUT COMPONENT-658;Lo;0;L;;;;;N;;;;;\n18A92;TANGUT COMPONENT-659;Lo;0;L;;;;;N;;;;;\n18A93;TANGUT COMPONENT-660;Lo;0;L;;;;;N;;;;;\n18A94;TANGUT COMPONENT-661;Lo;0;L;;;;;N;;;;;\n18A95;TANGUT COMPONENT-662;Lo;0;L;;;;;N;;;;;\n18A96;TANGUT COMPONENT-663;Lo;0;L;;;;;N;;;;;\n18A97;TANGUT COMPONENT-664;Lo;0;L;;;;;N;;;;;\n18A98;TANGUT COMPONENT-665;Lo;0;L;;;;;N;;;;;\n18A99;TANGUT COMPONENT-666;Lo;0;L;;;;;N;;;;;\n18A9A;TANGUT COMPONENT-667;Lo;0;L;;;;;N;;;;;\n18A9B;TANGUT COMPONENT-668;Lo;0;L;;;;;N;;;;;\n18A9C;TANGUT COMPONENT-669;Lo;0;L;;;;;N;;;;;\n18A9D;TANGUT COMPONENT-670;Lo;0;L;;;;;N;;;;;\n18A9E;TANGUT COMPONENT-671;Lo;0;L;;;;;N;;;;;\n18A9F;TANGUT COMPONENT-672;Lo;0;L;;;;;N;;;;;\n18AA0;TANGUT COMPONENT-673;Lo;0;L;;;;;N;;;;;\n18AA1;TANGUT COMPONENT-674;Lo;0;L;;;;;N;;;;;\n18AA2;TANGUT COMPONENT-675;Lo;0;L;;;;;N;;;;;\n18AA3;TANGUT COMPONENT-676;Lo;0;L;;;;;N;;;;;\n18AA4;TANGUT COMPONENT-677;Lo;0;L;;;;;N;;;;;\n18AA5;TANGUT COMPONENT-678;Lo;0;L;;;;;N;;;;;\n18AA6;TANGUT COMPONENT-679;Lo;0;L;;;;;N;;;;;\n18AA7;TANGUT COMPONENT-680;Lo;0;L;;;;;N;;;;;\n18AA8;TANGUT COMPONENT-681;Lo;0;L;;;;;N;;;;;\n18AA9;TANGUT COMPONENT-682;Lo;0;L;;;;;N;;;;;\n18AAA;TANGUT COMPONENT-683;Lo;0;L;;;;;N;;;;;\n18AAB;TANGUT COMPONENT-684;Lo;0;L;;;;;N;;;;;\n18AAC;TANGUT COMPONENT-685;Lo;0;L;;;;;N;;;;;\n18AAD;TANGUT COMPONENT-686;Lo;0;L;;;;;N;;;;;\n18AAE;TANGUT COMPONENT-687;Lo;0;L;;;;;N;;;;;\n18AAF;TANGUT COMPONENT-688;Lo;0;L;;;;;N;;;;;\n18AB0;TANGUT COMPONENT-689;Lo;0;L;;;;;N;;;;;\n18AB1;TANGUT COMPONENT-690;Lo;0;L;;;;;N;;;;;\n18AB2;TANGUT COMPONENT-691;Lo;0;L;;;;;N;;;;;\n18AB3;TANGUT COMPONENT-692;Lo;0;L;;;;;N;;;;;\n18AB4;TANGUT COMPONENT-693;Lo;0;L;;;;;N;;;;;\n18AB5;TANGUT COMPONENT-694;Lo;0;L;;;;;N;;;;;\n18AB6;TANGUT COMPONENT-695;Lo;0;L;;;;;N;;;;;\n18AB7;TANGUT COMPONENT-696;Lo;0;L;;;;;N;;;;;\n18AB8;TANGUT COMPONENT-697;Lo;0;L;;;;;N;;;;;\n18AB9;TANGUT COMPONENT-698;Lo;0;L;;;;;N;;;;;\n18ABA;TANGUT COMPONENT-699;Lo;0;L;;;;;N;;;;;\n18ABB;TANGUT COMPONENT-700;Lo;0;L;;;;;N;;;;;\n18ABC;TANGUT COMPONENT-701;Lo;0;L;;;;;N;;;;;\n18ABD;TANGUT COMPONENT-702;Lo;0;L;;;;;N;;;;;\n18ABE;TANGUT COMPONENT-703;Lo;0;L;;;;;N;;;;;\n18ABF;TANGUT COMPONENT-704;Lo;0;L;;;;;N;;;;;\n18AC0;TANGUT COMPONENT-705;Lo;0;L;;;;;N;;;;;\n18AC1;TANGUT COMPONENT-706;Lo;0;L;;;;;N;;;;;\n18AC2;TANGUT COMPONENT-707;Lo;0;L;;;;;N;;;;;\n18AC3;TANGUT COMPONENT-708;Lo;0;L;;;;;N;;;;;\n18AC4;TANGUT COMPONENT-709;Lo;0;L;;;;;N;;;;;\n18AC5;TANGUT COMPONENT-710;Lo;0;L;;;;;N;;;;;\n18AC6;TANGUT COMPONENT-711;Lo;0;L;;;;;N;;;;;\n18AC7;TANGUT COMPONENT-712;Lo;0;L;;;;;N;;;;;\n18AC8;TANGUT COMPONENT-713;Lo;0;L;;;;;N;;;;;\n18AC9;TANGUT COMPONENT-714;Lo;0;L;;;;;N;;;;;\n18ACA;TANGUT COMPONENT-715;Lo;0;L;;;;;N;;;;;\n18ACB;TANGUT COMPONENT-716;Lo;0;L;;;;;N;;;;;\n18ACC;TANGUT COMPONENT-717;Lo;0;L;;;;;N;;;;;\n18ACD;TANGUT COMPONENT-718;Lo;0;L;;;;;N;;;;;\n18ACE;TANGUT COMPONENT-719;Lo;0;L;;;;;N;;;;;\n18ACF;TANGUT COMPONENT-720;Lo;0;L;;;;;N;;;;;\n18AD0;TANGUT COMPONENT-721;Lo;0;L;;;;;N;;;;;\n18AD1;TANGUT COMPONENT-722;Lo;0;L;;;;;N;;;;;\n18AD2;TANGUT COMPONENT-723;Lo;0;L;;;;;N;;;;;\n18AD3;TANGUT COMPONENT-724;Lo;0;L;;;;;N;;;;;\n18AD4;TANGUT COMPONENT-725;Lo;0;L;;;;;N;;;;;\n18AD5;TANGUT COMPONENT-726;Lo;0;L;;;;;N;;;;;\n18AD6;TANGUT COMPONENT-727;Lo;0;L;;;;;N;;;;;\n18AD7;TANGUT COMPONENT-728;Lo;0;L;;;;;N;;;;;\n18AD8;TANGUT COMPONENT-729;Lo;0;L;;;;;N;;;;;\n18AD9;TANGUT COMPONENT-730;Lo;0;L;;;;;N;;;;;\n18ADA;TANGUT COMPONENT-731;Lo;0;L;;;;;N;;;;;\n18ADB;TANGUT COMPONENT-732;Lo;0;L;;;;;N;;;;;\n18ADC;TANGUT COMPONENT-733;Lo;0;L;;;;;N;;;;;\n18ADD;TANGUT COMPONENT-734;Lo;0;L;;;;;N;;;;;\n18ADE;TANGUT COMPONENT-735;Lo;0;L;;;;;N;;;;;\n18ADF;TANGUT COMPONENT-736;Lo;0;L;;;;;N;;;;;\n18AE0;TANGUT COMPONENT-737;Lo;0;L;;;;;N;;;;;\n18AE1;TANGUT COMPONENT-738;Lo;0;L;;;;;N;;;;;\n18AE2;TANGUT COMPONENT-739;Lo;0;L;;;;;N;;;;;\n18AE3;TANGUT COMPONENT-740;Lo;0;L;;;;;N;;;;;\n18AE4;TANGUT COMPONENT-741;Lo;0;L;;;;;N;;;;;\n18AE5;TANGUT COMPONENT-742;Lo;0;L;;;;;N;;;;;\n18AE6;TANGUT COMPONENT-743;Lo;0;L;;;;;N;;;;;\n18AE7;TANGUT COMPONENT-744;Lo;0;L;;;;;N;;;;;\n18AE8;TANGUT COMPONENT-745;Lo;0;L;;;;;N;;;;;\n18AE9;TANGUT COMPONENT-746;Lo;0;L;;;;;N;;;;;\n18AEA;TANGUT COMPONENT-747;Lo;0;L;;;;;N;;;;;\n18AEB;TANGUT COMPONENT-748;Lo;0;L;;;;;N;;;;;\n18AEC;TANGUT COMPONENT-749;Lo;0;L;;;;;N;;;;;\n18AED;TANGUT COMPONENT-750;Lo;0;L;;;;;N;;;;;\n18AEE;TANGUT COMPONENT-751;Lo;0;L;;;;;N;;;;;\n18AEF;TANGUT COMPONENT-752;Lo;0;L;;;;;N;;;;;\n18AF0;TANGUT COMPONENT-753;Lo;0;L;;;;;N;;;;;\n18AF1;TANGUT COMPONENT-754;Lo;0;L;;;;;N;;;;;\n18AF2;TANGUT COMPONENT-755;Lo;0;L;;;;;N;;;;;\n18AF3;TANGUT COMPONENT-756;Lo;0;L;;;;;N;;;;;\n18AF4;TANGUT COMPONENT-757;Lo;0;L;;;;;N;;;;;\n18AF5;TANGUT COMPONENT-758;Lo;0;L;;;;;N;;;;;\n18AF6;TANGUT COMPONENT-759;Lo;0;L;;;;;N;;;;;\n18AF7;TANGUT COMPONENT-760;Lo;0;L;;;;;N;;;;;\n18AF8;TANGUT COMPONENT-761;Lo;0;L;;;;;N;;;;;\n18AF9;TANGUT COMPONENT-762;Lo;0;L;;;;;N;;;;;\n18AFA;TANGUT COMPONENT-763;Lo;0;L;;;;;N;;;;;\n18AFB;TANGUT COMPONENT-764;Lo;0;L;;;;;N;;;;;\n18AFC;TANGUT COMPONENT-765;Lo;0;L;;;;;N;;;;;\n18AFD;TANGUT COMPONENT-766;Lo;0;L;;;;;N;;;;;\n18AFE;TANGUT COMPONENT-767;Lo;0;L;;;;;N;;;;;\n18AFF;TANGUT COMPONENT-768;Lo;0;L;;;;;N;;;;;\n18B00;KHITAN SMALL SCRIPT CHARACTER-18B00;Lo;0;L;;;;;N;;;;;\n18B01;KHITAN SMALL SCRIPT CHARACTER-18B01;Lo;0;L;;;;;N;;;;;\n18B02;KHITAN SMALL SCRIPT CHARACTER-18B02;Lo;0;L;;;;;N;;;;;\n18B03;KHITAN SMALL SCRIPT CHARACTER-18B03;Lo;0;L;;;;;N;;;;;\n18B04;KHITAN SMALL SCRIPT CHARACTER-18B04;Lo;0;L;;;;;N;;;;;\n18B05;KHITAN SMALL SCRIPT CHARACTER-18B05;Lo;0;L;;;;;N;;;;;\n18B06;KHITAN SMALL SCRIPT CHARACTER-18B06;Lo;0;L;;;;;N;;;;;\n18B07;KHITAN SMALL SCRIPT CHARACTER-18B07;Lo;0;L;;;;;N;;;;;\n18B08;KHITAN SMALL SCRIPT CHARACTER-18B08;Lo;0;L;;;;;N;;;;;\n18B09;KHITAN SMALL SCRIPT CHARACTER-18B09;Lo;0;L;;;;;N;;;;;\n18B0A;KHITAN SMALL SCRIPT CHARACTER-18B0A;Lo;0;L;;;;;N;;;;;\n18B0B;KHITAN SMALL SCRIPT CHARACTER-18B0B;Lo;0;L;;;;;N;;;;;\n18B0C;KHITAN SMALL SCRIPT CHARACTER-18B0C;Lo;0;L;;;;;N;;;;;\n18B0D;KHITAN SMALL SCRIPT CHARACTER-18B0D;Lo;0;L;;;;;N;;;;;\n18B0E;KHITAN SMALL SCRIPT CHARACTER-18B0E;Lo;0;L;;;;;N;;;;;\n18B0F;KHITAN SMALL SCRIPT CHARACTER-18B0F;Lo;0;L;;;;;N;;;;;\n18B10;KHITAN SMALL SCRIPT CHARACTER-18B10;Lo;0;L;;;;;N;;;;;\n18B11;KHITAN SMALL SCRIPT CHARACTER-18B11;Lo;0;L;;;;;N;;;;;\n18B12;KHITAN SMALL SCRIPT CHARACTER-18B12;Lo;0;L;;;;;N;;;;;\n18B13;KHITAN SMALL SCRIPT CHARACTER-18B13;Lo;0;L;;;;;N;;;;;\n18B14;KHITAN SMALL SCRIPT CHARACTER-18B14;Lo;0;L;;;;;N;;;;;\n18B15;KHITAN SMALL SCRIPT CHARACTER-18B15;Lo;0;L;;;;;N;;;;;\n18B16;KHITAN SMALL SCRIPT CHARACTER-18B16;Lo;0;L;;;;;N;;;;;\n18B17;KHITAN SMALL SCRIPT CHARACTER-18B17;Lo;0;L;;;;;N;;;;;\n18B18;KHITAN SMALL SCRIPT CHARACTER-18B18;Lo;0;L;;;;;N;;;;;\n18B19;KHITAN SMALL SCRIPT CHARACTER-18B19;Lo;0;L;;;;;N;;;;;\n18B1A;KHITAN SMALL SCRIPT CHARACTER-18B1A;Lo;0;L;;;;;N;;;;;\n18B1B;KHITAN SMALL SCRIPT CHARACTER-18B1B;Lo;0;L;;;;;N;;;;;\n18B1C;KHITAN SMALL SCRIPT CHARACTER-18B1C;Lo;0;L;;;;;N;;;;;\n18B1D;KHITAN SMALL SCRIPT CHARACTER-18B1D;Lo;0;L;;;;;N;;;;;\n18B1E;KHITAN SMALL SCRIPT CHARACTER-18B1E;Lo;0;L;;;;;N;;;;;\n18B1F;KHITAN SMALL SCRIPT CHARACTER-18B1F;Lo;0;L;;;;;N;;;;;\n18B20;KHITAN SMALL SCRIPT CHARACTER-18B20;Lo;0;L;;;;;N;;;;;\n18B21;KHITAN SMALL SCRIPT CHARACTER-18B21;Lo;0;L;;;;;N;;;;;\n18B22;KHITAN SMALL SCRIPT CHARACTER-18B22;Lo;0;L;;;;;N;;;;;\n18B23;KHITAN SMALL SCRIPT CHARACTER-18B23;Lo;0;L;;;;;N;;;;;\n18B24;KHITAN SMALL SCRIPT CHARACTER-18B24;Lo;0;L;;;;;N;;;;;\n18B25;KHITAN SMALL SCRIPT CHARACTER-18B25;Lo;0;L;;;;;N;;;;;\n18B26;KHITAN SMALL SCRIPT CHARACTER-18B26;Lo;0;L;;;;;N;;;;;\n18B27;KHITAN SMALL SCRIPT CHARACTER-18B27;Lo;0;L;;;;;N;;;;;\n18B28;KHITAN SMALL SCRIPT CHARACTER-18B28;Lo;0;L;;;;;N;;;;;\n18B29;KHITAN SMALL SCRIPT CHARACTER-18B29;Lo;0;L;;;;;N;;;;;\n18B2A;KHITAN SMALL SCRIPT CHARACTER-18B2A;Lo;0;L;;;;;N;;;;;\n18B2B;KHITAN SMALL SCRIPT CHARACTER-18B2B;Lo;0;L;;;;;N;;;;;\n18B2C;KHITAN SMALL SCRIPT CHARACTER-18B2C;Lo;0;L;;;;;N;;;;;\n18B2D;KHITAN SMALL SCRIPT CHARACTER-18B2D;Lo;0;L;;;;;N;;;;;\n18B2E;KHITAN SMALL SCRIPT CHARACTER-18B2E;Lo;0;L;;;;;N;;;;;\n18B2F;KHITAN SMALL SCRIPT CHARACTER-18B2F;Lo;0;L;;;;;N;;;;;\n18B30;KHITAN SMALL SCRIPT CHARACTER-18B30;Lo;0;L;;;;;N;;;;;\n18B31;KHITAN SMALL SCRIPT CHARACTER-18B31;Lo;0;L;;;;;N;;;;;\n18B32;KHITAN SMALL SCRIPT CHARACTER-18B32;Lo;0;L;;;;;N;;;;;\n18B33;KHITAN SMALL SCRIPT CHARACTER-18B33;Lo;0;L;;;;;N;;;;;\n18B34;KHITAN SMALL SCRIPT CHARACTER-18B34;Lo;0;L;;;;;N;;;;;\n18B35;KHITAN SMALL SCRIPT CHARACTER-18B35;Lo;0;L;;;;;N;;;;;\n18B36;KHITAN SMALL SCRIPT CHARACTER-18B36;Lo;0;L;;;;;N;;;;;\n18B37;KHITAN SMALL SCRIPT CHARACTER-18B37;Lo;0;L;;;;;N;;;;;\n18B38;KHITAN SMALL SCRIPT CHARACTER-18B38;Lo;0;L;;;;;N;;;;;\n18B39;KHITAN SMALL SCRIPT CHARACTER-18B39;Lo;0;L;;;;;N;;;;;\n18B3A;KHITAN SMALL SCRIPT CHARACTER-18B3A;Lo;0;L;;;;;N;;;;;\n18B3B;KHITAN SMALL SCRIPT CHARACTER-18B3B;Lo;0;L;;;;;N;;;;;\n18B3C;KHITAN SMALL SCRIPT CHARACTER-18B3C;Lo;0;L;;;;;N;;;;;\n18B3D;KHITAN SMALL SCRIPT CHARACTER-18B3D;Lo;0;L;;;;;N;;;;;\n18B3E;KHITAN SMALL SCRIPT CHARACTER-18B3E;Lo;0;L;;;;;N;;;;;\n18B3F;KHITAN SMALL SCRIPT CHARACTER-18B3F;Lo;0;L;;;;;N;;;;;\n18B40;KHITAN SMALL SCRIPT CHARACTER-18B40;Lo;0;L;;;;;N;;;;;\n18B41;KHITAN SMALL SCRIPT CHARACTER-18B41;Lo;0;L;;;;;N;;;;;\n18B42;KHITAN SMALL SCRIPT CHARACTER-18B42;Lo;0;L;;;;;N;;;;;\n18B43;KHITAN SMALL SCRIPT CHARACTER-18B43;Lo;0;L;;;;;N;;;;;\n18B44;KHITAN SMALL SCRIPT CHARACTER-18B44;Lo;0;L;;;;;N;;;;;\n18B45;KHITAN SMALL SCRIPT CHARACTER-18B45;Lo;0;L;;;;;N;;;;;\n18B46;KHITAN SMALL SCRIPT CHARACTER-18B46;Lo;0;L;;;;;N;;;;;\n18B47;KHITAN SMALL SCRIPT CHARACTER-18B47;Lo;0;L;;;;;N;;;;;\n18B48;KHITAN SMALL SCRIPT CHARACTER-18B48;Lo;0;L;;;;;N;;;;;\n18B49;KHITAN SMALL SCRIPT CHARACTER-18B49;Lo;0;L;;;;;N;;;;;\n18B4A;KHITAN SMALL SCRIPT CHARACTER-18B4A;Lo;0;L;;;;;N;;;;;\n18B4B;KHITAN SMALL SCRIPT CHARACTER-18B4B;Lo;0;L;;;;;N;;;;;\n18B4C;KHITAN SMALL SCRIPT CHARACTER-18B4C;Lo;0;L;;;;;N;;;;;\n18B4D;KHITAN SMALL SCRIPT CHARACTER-18B4D;Lo;0;L;;;;;N;;;;;\n18B4E;KHITAN SMALL SCRIPT CHARACTER-18B4E;Lo;0;L;;;;;N;;;;;\n18B4F;KHITAN SMALL SCRIPT CHARACTER-18B4F;Lo;0;L;;;;;N;;;;;\n18B50;KHITAN SMALL SCRIPT CHARACTER-18B50;Lo;0;L;;;;;N;;;;;\n18B51;KHITAN SMALL SCRIPT CHARACTER-18B51;Lo;0;L;;;;;N;;;;;\n18B52;KHITAN SMALL SCRIPT CHARACTER-18B52;Lo;0;L;;;;;N;;;;;\n18B53;KHITAN SMALL SCRIPT CHARACTER-18B53;Lo;0;L;;;;;N;;;;;\n18B54;KHITAN SMALL SCRIPT CHARACTER-18B54;Lo;0;L;;;;;N;;;;;\n18B55;KHITAN SMALL SCRIPT CHARACTER-18B55;Lo;0;L;;;;;N;;;;;\n18B56;KHITAN SMALL SCRIPT CHARACTER-18B56;Lo;0;L;;;;;N;;;;;\n18B57;KHITAN SMALL SCRIPT CHARACTER-18B57;Lo;0;L;;;;;N;;;;;\n18B58;KHITAN SMALL SCRIPT CHARACTER-18B58;Lo;0;L;;;;;N;;;;;\n18B59;KHITAN SMALL SCRIPT CHARACTER-18B59;Lo;0;L;;;;;N;;;;;\n18B5A;KHITAN SMALL SCRIPT CHARACTER-18B5A;Lo;0;L;;;;;N;;;;;\n18B5B;KHITAN SMALL SCRIPT CHARACTER-18B5B;Lo;0;L;;;;;N;;;;;\n18B5C;KHITAN SMALL SCRIPT CHARACTER-18B5C;Lo;0;L;;;;;N;;;;;\n18B5D;KHITAN SMALL SCRIPT CHARACTER-18B5D;Lo;0;L;;;;;N;;;;;\n18B5E;KHITAN SMALL SCRIPT CHARACTER-18B5E;Lo;0;L;;;;;N;;;;;\n18B5F;KHITAN SMALL SCRIPT CHARACTER-18B5F;Lo;0;L;;;;;N;;;;;\n18B60;KHITAN SMALL SCRIPT CHARACTER-18B60;Lo;0;L;;;;;N;;;;;\n18B61;KHITAN SMALL SCRIPT CHARACTER-18B61;Lo;0;L;;;;;N;;;;;\n18B62;KHITAN SMALL SCRIPT CHARACTER-18B62;Lo;0;L;;;;;N;;;;;\n18B63;KHITAN SMALL SCRIPT CHARACTER-18B63;Lo;0;L;;;;;N;;;;;\n18B64;KHITAN SMALL SCRIPT CHARACTER-18B64;Lo;0;L;;;;;N;;;;;\n18B65;KHITAN SMALL SCRIPT CHARACTER-18B65;Lo;0;L;;;;;N;;;;;\n18B66;KHITAN SMALL SCRIPT CHARACTER-18B66;Lo;0;L;;;;;N;;;;;\n18B67;KHITAN SMALL SCRIPT CHARACTER-18B67;Lo;0;L;;;;;N;;;;;\n18B68;KHITAN SMALL SCRIPT CHARACTER-18B68;Lo;0;L;;;;;N;;;;;\n18B69;KHITAN SMALL SCRIPT CHARACTER-18B69;Lo;0;L;;;;;N;;;;;\n18B6A;KHITAN SMALL SCRIPT CHARACTER-18B6A;Lo;0;L;;;;;N;;;;;\n18B6B;KHITAN SMALL SCRIPT CHARACTER-18B6B;Lo;0;L;;;;;N;;;;;\n18B6C;KHITAN SMALL SCRIPT CHARACTER-18B6C;Lo;0;L;;;;;N;;;;;\n18B6D;KHITAN SMALL SCRIPT CHARACTER-18B6D;Lo;0;L;;;;;N;;;;;\n18B6E;KHITAN SMALL SCRIPT CHARACTER-18B6E;Lo;0;L;;;;;N;;;;;\n18B6F;KHITAN SMALL SCRIPT CHARACTER-18B6F;Lo;0;L;;;;;N;;;;;\n18B70;KHITAN SMALL SCRIPT CHARACTER-18B70;Lo;0;L;;;;;N;;;;;\n18B71;KHITAN SMALL SCRIPT CHARACTER-18B71;Lo;0;L;;;;;N;;;;;\n18B72;KHITAN SMALL SCRIPT CHARACTER-18B72;Lo;0;L;;;;;N;;;;;\n18B73;KHITAN SMALL SCRIPT CHARACTER-18B73;Lo;0;L;;;;;N;;;;;\n18B74;KHITAN SMALL SCRIPT CHARACTER-18B74;Lo;0;L;;;;;N;;;;;\n18B75;KHITAN SMALL SCRIPT CHARACTER-18B75;Lo;0;L;;;;;N;;;;;\n18B76;KHITAN SMALL SCRIPT CHARACTER-18B76;Lo;0;L;;;;;N;;;;;\n18B77;KHITAN SMALL SCRIPT CHARACTER-18B77;Lo;0;L;;;;;N;;;;;\n18B78;KHITAN SMALL SCRIPT CHARACTER-18B78;Lo;0;L;;;;;N;;;;;\n18B79;KHITAN SMALL SCRIPT CHARACTER-18B79;Lo;0;L;;;;;N;;;;;\n18B7A;KHITAN SMALL SCRIPT CHARACTER-18B7A;Lo;0;L;;;;;N;;;;;\n18B7B;KHITAN SMALL SCRIPT CHARACTER-18B7B;Lo;0;L;;;;;N;;;;;\n18B7C;KHITAN SMALL SCRIPT CHARACTER-18B7C;Lo;0;L;;;;;N;;;;;\n18B7D;KHITAN SMALL SCRIPT CHARACTER-18B7D;Lo;0;L;;;;;N;;;;;\n18B7E;KHITAN SMALL SCRIPT CHARACTER-18B7E;Lo;0;L;;;;;N;;;;;\n18B7F;KHITAN SMALL SCRIPT CHARACTER-18B7F;Lo;0;L;;;;;N;;;;;\n18B80;KHITAN SMALL SCRIPT CHARACTER-18B80;Lo;0;L;;;;;N;;;;;\n18B81;KHITAN SMALL SCRIPT CHARACTER-18B81;Lo;0;L;;;;;N;;;;;\n18B82;KHITAN SMALL SCRIPT CHARACTER-18B82;Lo;0;L;;;;;N;;;;;\n18B83;KHITAN SMALL SCRIPT CHARACTER-18B83;Lo;0;L;;;;;N;;;;;\n18B84;KHITAN SMALL SCRIPT CHARACTER-18B84;Lo;0;L;;;;;N;;;;;\n18B85;KHITAN SMALL SCRIPT CHARACTER-18B85;Lo;0;L;;;;;N;;;;;\n18B86;KHITAN SMALL SCRIPT CHARACTER-18B86;Lo;0;L;;;;;N;;;;;\n18B87;KHITAN SMALL SCRIPT CHARACTER-18B87;Lo;0;L;;;;;N;;;;;\n18B88;KHITAN SMALL SCRIPT CHARACTER-18B88;Lo;0;L;;;;;N;;;;;\n18B89;KHITAN SMALL SCRIPT CHARACTER-18B89;Lo;0;L;;;;;N;;;;;\n18B8A;KHITAN SMALL SCRIPT CHARACTER-18B8A;Lo;0;L;;;;;N;;;;;\n18B8B;KHITAN SMALL SCRIPT CHARACTER-18B8B;Lo;0;L;;;;;N;;;;;\n18B8C;KHITAN SMALL SCRIPT CHARACTER-18B8C;Lo;0;L;;;;;N;;;;;\n18B8D;KHITAN SMALL SCRIPT CHARACTER-18B8D;Lo;0;L;;;;;N;;;;;\n18B8E;KHITAN SMALL SCRIPT CHARACTER-18B8E;Lo;0;L;;;;;N;;;;;\n18B8F;KHITAN SMALL SCRIPT CHARACTER-18B8F;Lo;0;L;;;;;N;;;;;\n18B90;KHITAN SMALL SCRIPT CHARACTER-18B90;Lo;0;L;;;;;N;;;;;\n18B91;KHITAN SMALL SCRIPT CHARACTER-18B91;Lo;0;L;;;;;N;;;;;\n18B92;KHITAN SMALL SCRIPT CHARACTER-18B92;Lo;0;L;;;;;N;;;;;\n18B93;KHITAN SMALL SCRIPT CHARACTER-18B93;Lo;0;L;;;;;N;;;;;\n18B94;KHITAN SMALL SCRIPT CHARACTER-18B94;Lo;0;L;;;;;N;;;;;\n18B95;KHITAN SMALL SCRIPT CHARACTER-18B95;Lo;0;L;;;;;N;;;;;\n18B96;KHITAN SMALL SCRIPT CHARACTER-18B96;Lo;0;L;;;;;N;;;;;\n18B97;KHITAN SMALL SCRIPT CHARACTER-18B97;Lo;0;L;;;;;N;;;;;\n18B98;KHITAN SMALL SCRIPT CHARACTER-18B98;Lo;0;L;;;;;N;;;;;\n18B99;KHITAN SMALL SCRIPT CHARACTER-18B99;Lo;0;L;;;;;N;;;;;\n18B9A;KHITAN SMALL SCRIPT CHARACTER-18B9A;Lo;0;L;;;;;N;;;;;\n18B9B;KHITAN SMALL SCRIPT CHARACTER-18B9B;Lo;0;L;;;;;N;;;;;\n18B9C;KHITAN SMALL SCRIPT CHARACTER-18B9C;Lo;0;L;;;;;N;;;;;\n18B9D;KHITAN SMALL SCRIPT CHARACTER-18B9D;Lo;0;L;;;;;N;;;;;\n18B9E;KHITAN SMALL SCRIPT CHARACTER-18B9E;Lo;0;L;;;;;N;;;;;\n18B9F;KHITAN SMALL SCRIPT CHARACTER-18B9F;Lo;0;L;;;;;N;;;;;\n18BA0;KHITAN SMALL SCRIPT CHARACTER-18BA0;Lo;0;L;;;;;N;;;;;\n18BA1;KHITAN SMALL SCRIPT CHARACTER-18BA1;Lo;0;L;;;;;N;;;;;\n18BA2;KHITAN SMALL SCRIPT CHARACTER-18BA2;Lo;0;L;;;;;N;;;;;\n18BA3;KHITAN SMALL SCRIPT CHARACTER-18BA3;Lo;0;L;;;;;N;;;;;\n18BA4;KHITAN SMALL SCRIPT CHARACTER-18BA4;Lo;0;L;;;;;N;;;;;\n18BA5;KHITAN SMALL SCRIPT CHARACTER-18BA5;Lo;0;L;;;;;N;;;;;\n18BA6;KHITAN SMALL SCRIPT CHARACTER-18BA6;Lo;0;L;;;;;N;;;;;\n18BA7;KHITAN SMALL SCRIPT CHARACTER-18BA7;Lo;0;L;;;;;N;;;;;\n18BA8;KHITAN SMALL SCRIPT CHARACTER-18BA8;Lo;0;L;;;;;N;;;;;\n18BA9;KHITAN SMALL SCRIPT CHARACTER-18BA9;Lo;0;L;;;;;N;;;;;\n18BAA;KHITAN SMALL SCRIPT CHARACTER-18BAA;Lo;0;L;;;;;N;;;;;\n18BAB;KHITAN SMALL SCRIPT CHARACTER-18BAB;Lo;0;L;;;;;N;;;;;\n18BAC;KHITAN SMALL SCRIPT CHARACTER-18BAC;Lo;0;L;;;;;N;;;;;\n18BAD;KHITAN SMALL SCRIPT CHARACTER-18BAD;Lo;0;L;;;;;N;;;;;\n18BAE;KHITAN SMALL SCRIPT CHARACTER-18BAE;Lo;0;L;;;;;N;;;;;\n18BAF;KHITAN SMALL SCRIPT CHARACTER-18BAF;Lo;0;L;;;;;N;;;;;\n18BB0;KHITAN SMALL SCRIPT CHARACTER-18BB0;Lo;0;L;;;;;N;;;;;\n18BB1;KHITAN SMALL SCRIPT CHARACTER-18BB1;Lo;0;L;;;;;N;;;;;\n18BB2;KHITAN SMALL SCRIPT CHARACTER-18BB2;Lo;0;L;;;;;N;;;;;\n18BB3;KHITAN SMALL SCRIPT CHARACTER-18BB3;Lo;0;L;;;;;N;;;;;\n18BB4;KHITAN SMALL SCRIPT CHARACTER-18BB4;Lo;0;L;;;;;N;;;;;\n18BB5;KHITAN SMALL SCRIPT CHARACTER-18BB5;Lo;0;L;;;;;N;;;;;\n18BB6;KHITAN SMALL SCRIPT CHARACTER-18BB6;Lo;0;L;;;;;N;;;;;\n18BB7;KHITAN SMALL SCRIPT CHARACTER-18BB7;Lo;0;L;;;;;N;;;;;\n18BB8;KHITAN SMALL SCRIPT CHARACTER-18BB8;Lo;0;L;;;;;N;;;;;\n18BB9;KHITAN SMALL SCRIPT CHARACTER-18BB9;Lo;0;L;;;;;N;;;;;\n18BBA;KHITAN SMALL SCRIPT CHARACTER-18BBA;Lo;0;L;;;;;N;;;;;\n18BBB;KHITAN SMALL SCRIPT CHARACTER-18BBB;Lo;0;L;;;;;N;;;;;\n18BBC;KHITAN SMALL SCRIPT CHARACTER-18BBC;Lo;0;L;;;;;N;;;;;\n18BBD;KHITAN SMALL SCRIPT CHARACTER-18BBD;Lo;0;L;;;;;N;;;;;\n18BBE;KHITAN SMALL SCRIPT CHARACTER-18BBE;Lo;0;L;;;;;N;;;;;\n18BBF;KHITAN SMALL SCRIPT CHARACTER-18BBF;Lo;0;L;;;;;N;;;;;\n18BC0;KHITAN SMALL SCRIPT CHARACTER-18BC0;Lo;0;L;;;;;N;;;;;\n18BC1;KHITAN SMALL SCRIPT CHARACTER-18BC1;Lo;0;L;;;;;N;;;;;\n18BC2;KHITAN SMALL SCRIPT CHARACTER-18BC2;Lo;0;L;;;;;N;;;;;\n18BC3;KHITAN SMALL SCRIPT CHARACTER-18BC3;Lo;0;L;;;;;N;;;;;\n18BC4;KHITAN SMALL SCRIPT CHARACTER-18BC4;Lo;0;L;;;;;N;;;;;\n18BC5;KHITAN SMALL SCRIPT CHARACTER-18BC5;Lo;0;L;;;;;N;;;;;\n18BC6;KHITAN SMALL SCRIPT CHARACTER-18BC6;Lo;0;L;;;;;N;;;;;\n18BC7;KHITAN SMALL SCRIPT CHARACTER-18BC7;Lo;0;L;;;;;N;;;;;\n18BC8;KHITAN SMALL SCRIPT CHARACTER-18BC8;Lo;0;L;;;;;N;;;;;\n18BC9;KHITAN SMALL SCRIPT CHARACTER-18BC9;Lo;0;L;;;;;N;;;;;\n18BCA;KHITAN SMALL SCRIPT CHARACTER-18BCA;Lo;0;L;;;;;N;;;;;\n18BCB;KHITAN SMALL SCRIPT CHARACTER-18BCB;Lo;0;L;;;;;N;;;;;\n18BCC;KHITAN SMALL SCRIPT CHARACTER-18BCC;Lo;0;L;;;;;N;;;;;\n18BCD;KHITAN SMALL SCRIPT CHARACTER-18BCD;Lo;0;L;;;;;N;;;;;\n18BCE;KHITAN SMALL SCRIPT CHARACTER-18BCE;Lo;0;L;;;;;N;;;;;\n18BCF;KHITAN SMALL SCRIPT CHARACTER-18BCF;Lo;0;L;;;;;N;;;;;\n18BD0;KHITAN SMALL SCRIPT CHARACTER-18BD0;Lo;0;L;;;;;N;;;;;\n18BD1;KHITAN SMALL SCRIPT CHARACTER-18BD1;Lo;0;L;;;;;N;;;;;\n18BD2;KHITAN SMALL SCRIPT CHARACTER-18BD2;Lo;0;L;;;;;N;;;;;\n18BD3;KHITAN SMALL SCRIPT CHARACTER-18BD3;Lo;0;L;;;;;N;;;;;\n18BD4;KHITAN SMALL SCRIPT CHARACTER-18BD4;Lo;0;L;;;;;N;;;;;\n18BD5;KHITAN SMALL SCRIPT CHARACTER-18BD5;Lo;0;L;;;;;N;;;;;\n18BD6;KHITAN SMALL SCRIPT CHARACTER-18BD6;Lo;0;L;;;;;N;;;;;\n18BD7;KHITAN SMALL SCRIPT CHARACTER-18BD7;Lo;0;L;;;;;N;;;;;\n18BD8;KHITAN SMALL SCRIPT CHARACTER-18BD8;Lo;0;L;;;;;N;;;;;\n18BD9;KHITAN SMALL SCRIPT CHARACTER-18BD9;Lo;0;L;;;;;N;;;;;\n18BDA;KHITAN SMALL SCRIPT CHARACTER-18BDA;Lo;0;L;;;;;N;;;;;\n18BDB;KHITAN SMALL SCRIPT CHARACTER-18BDB;Lo;0;L;;;;;N;;;;;\n18BDC;KHITAN SMALL SCRIPT CHARACTER-18BDC;Lo;0;L;;;;;N;;;;;\n18BDD;KHITAN SMALL SCRIPT CHARACTER-18BDD;Lo;0;L;;;;;N;;;;;\n18BDE;KHITAN SMALL SCRIPT CHARACTER-18BDE;Lo;0;L;;;;;N;;;;;\n18BDF;KHITAN SMALL SCRIPT CHARACTER-18BDF;Lo;0;L;;;;;N;;;;;\n18BE0;KHITAN SMALL SCRIPT CHARACTER-18BE0;Lo;0;L;;;;;N;;;;;\n18BE1;KHITAN SMALL SCRIPT CHARACTER-18BE1;Lo;0;L;;;;;N;;;;;\n18BE2;KHITAN SMALL SCRIPT CHARACTER-18BE2;Lo;0;L;;;;;N;;;;;\n18BE3;KHITAN SMALL SCRIPT CHARACTER-18BE3;Lo;0;L;;;;;N;;;;;\n18BE4;KHITAN SMALL SCRIPT CHARACTER-18BE4;Lo;0;L;;;;;N;;;;;\n18BE5;KHITAN SMALL SCRIPT CHARACTER-18BE5;Lo;0;L;;;;;N;;;;;\n18BE6;KHITAN SMALL SCRIPT CHARACTER-18BE6;Lo;0;L;;;;;N;;;;;\n18BE7;KHITAN SMALL SCRIPT CHARACTER-18BE7;Lo;0;L;;;;;N;;;;;\n18BE8;KHITAN SMALL SCRIPT CHARACTER-18BE8;Lo;0;L;;;;;N;;;;;\n18BE9;KHITAN SMALL SCRIPT CHARACTER-18BE9;Lo;0;L;;;;;N;;;;;\n18BEA;KHITAN SMALL SCRIPT CHARACTER-18BEA;Lo;0;L;;;;;N;;;;;\n18BEB;KHITAN SMALL SCRIPT CHARACTER-18BEB;Lo;0;L;;;;;N;;;;;\n18BEC;KHITAN SMALL SCRIPT CHARACTER-18BEC;Lo;0;L;;;;;N;;;;;\n18BED;KHITAN SMALL SCRIPT CHARACTER-18BED;Lo;0;L;;;;;N;;;;;\n18BEE;KHITAN SMALL SCRIPT CHARACTER-18BEE;Lo;0;L;;;;;N;;;;;\n18BEF;KHITAN SMALL SCRIPT CHARACTER-18BEF;Lo;0;L;;;;;N;;;;;\n18BF0;KHITAN SMALL SCRIPT CHARACTER-18BF0;Lo;0;L;;;;;N;;;;;\n18BF1;KHITAN SMALL SCRIPT CHARACTER-18BF1;Lo;0;L;;;;;N;;;;;\n18BF2;KHITAN SMALL SCRIPT CHARACTER-18BF2;Lo;0;L;;;;;N;;;;;\n18BF3;KHITAN SMALL SCRIPT CHARACTER-18BF3;Lo;0;L;;;;;N;;;;;\n18BF4;KHITAN SMALL SCRIPT CHARACTER-18BF4;Lo;0;L;;;;;N;;;;;\n18BF5;KHITAN SMALL SCRIPT CHARACTER-18BF5;Lo;0;L;;;;;N;;;;;\n18BF6;KHITAN SMALL SCRIPT CHARACTER-18BF6;Lo;0;L;;;;;N;;;;;\n18BF7;KHITAN SMALL SCRIPT CHARACTER-18BF7;Lo;0;L;;;;;N;;;;;\n18BF8;KHITAN SMALL SCRIPT CHARACTER-18BF8;Lo;0;L;;;;;N;;;;;\n18BF9;KHITAN SMALL SCRIPT CHARACTER-18BF9;Lo;0;L;;;;;N;;;;;\n18BFA;KHITAN SMALL SCRIPT CHARACTER-18BFA;Lo;0;L;;;;;N;;;;;\n18BFB;KHITAN SMALL SCRIPT CHARACTER-18BFB;Lo;0;L;;;;;N;;;;;\n18BFC;KHITAN SMALL SCRIPT CHARACTER-18BFC;Lo;0;L;;;;;N;;;;;\n18BFD;KHITAN SMALL SCRIPT CHARACTER-18BFD;Lo;0;L;;;;;N;;;;;\n18BFE;KHITAN SMALL SCRIPT CHARACTER-18BFE;Lo;0;L;;;;;N;;;;;\n18BFF;KHITAN SMALL SCRIPT CHARACTER-18BFF;Lo;0;L;;;;;N;;;;;\n18C00;KHITAN SMALL SCRIPT CHARACTER-18C00;Lo;0;L;;;;;N;;;;;\n18C01;KHITAN SMALL SCRIPT CHARACTER-18C01;Lo;0;L;;;;;N;;;;;\n18C02;KHITAN SMALL SCRIPT CHARACTER-18C02;Lo;0;L;;;;;N;;;;;\n18C03;KHITAN SMALL SCRIPT CHARACTER-18C03;Lo;0;L;;;;;N;;;;;\n18C04;KHITAN SMALL SCRIPT CHARACTER-18C04;Lo;0;L;;;;;N;;;;;\n18C05;KHITAN SMALL SCRIPT CHARACTER-18C05;Lo;0;L;;;;;N;;;;;\n18C06;KHITAN SMALL SCRIPT CHARACTER-18C06;Lo;0;L;;;;;N;;;;;\n18C07;KHITAN SMALL SCRIPT CHARACTER-18C07;Lo;0;L;;;;;N;;;;;\n18C08;KHITAN SMALL SCRIPT CHARACTER-18C08;Lo;0;L;;;;;N;;;;;\n18C09;KHITAN SMALL SCRIPT CHARACTER-18C09;Lo;0;L;;;;;N;;;;;\n18C0A;KHITAN SMALL SCRIPT CHARACTER-18C0A;Lo;0;L;;;;;N;;;;;\n18C0B;KHITAN SMALL SCRIPT CHARACTER-18C0B;Lo;0;L;;;;;N;;;;;\n18C0C;KHITAN SMALL SCRIPT CHARACTER-18C0C;Lo;0;L;;;;;N;;;;;\n18C0D;KHITAN SMALL SCRIPT CHARACTER-18C0D;Lo;0;L;;;;;N;;;;;\n18C0E;KHITAN SMALL SCRIPT CHARACTER-18C0E;Lo;0;L;;;;;N;;;;;\n18C0F;KHITAN SMALL SCRIPT CHARACTER-18C0F;Lo;0;L;;;;;N;;;;;\n18C10;KHITAN SMALL SCRIPT CHARACTER-18C10;Lo;0;L;;;;;N;;;;;\n18C11;KHITAN SMALL SCRIPT CHARACTER-18C11;Lo;0;L;;;;;N;;;;;\n18C12;KHITAN SMALL SCRIPT CHARACTER-18C12;Lo;0;L;;;;;N;;;;;\n18C13;KHITAN SMALL SCRIPT CHARACTER-18C13;Lo;0;L;;;;;N;;;;;\n18C14;KHITAN SMALL SCRIPT CHARACTER-18C14;Lo;0;L;;;;;N;;;;;\n18C15;KHITAN SMALL SCRIPT CHARACTER-18C15;Lo;0;L;;;;;N;;;;;\n18C16;KHITAN SMALL SCRIPT CHARACTER-18C16;Lo;0;L;;;;;N;;;;;\n18C17;KHITAN SMALL SCRIPT CHARACTER-18C17;Lo;0;L;;;;;N;;;;;\n18C18;KHITAN SMALL SCRIPT CHARACTER-18C18;Lo;0;L;;;;;N;;;;;\n18C19;KHITAN SMALL SCRIPT CHARACTER-18C19;Lo;0;L;;;;;N;;;;;\n18C1A;KHITAN SMALL SCRIPT CHARACTER-18C1A;Lo;0;L;;;;;N;;;;;\n18C1B;KHITAN SMALL SCRIPT CHARACTER-18C1B;Lo;0;L;;;;;N;;;;;\n18C1C;KHITAN SMALL SCRIPT CHARACTER-18C1C;Lo;0;L;;;;;N;;;;;\n18C1D;KHITAN SMALL SCRIPT CHARACTER-18C1D;Lo;0;L;;;;;N;;;;;\n18C1E;KHITAN SMALL SCRIPT CHARACTER-18C1E;Lo;0;L;;;;;N;;;;;\n18C1F;KHITAN SMALL SCRIPT CHARACTER-18C1F;Lo;0;L;;;;;N;;;;;\n18C20;KHITAN SMALL SCRIPT CHARACTER-18C20;Lo;0;L;;;;;N;;;;;\n18C21;KHITAN SMALL SCRIPT CHARACTER-18C21;Lo;0;L;;;;;N;;;;;\n18C22;KHITAN SMALL SCRIPT CHARACTER-18C22;Lo;0;L;;;;;N;;;;;\n18C23;KHITAN SMALL SCRIPT CHARACTER-18C23;Lo;0;L;;;;;N;;;;;\n18C24;KHITAN SMALL SCRIPT CHARACTER-18C24;Lo;0;L;;;;;N;;;;;\n18C25;KHITAN SMALL SCRIPT CHARACTER-18C25;Lo;0;L;;;;;N;;;;;\n18C26;KHITAN SMALL SCRIPT CHARACTER-18C26;Lo;0;L;;;;;N;;;;;\n18C27;KHITAN SMALL SCRIPT CHARACTER-18C27;Lo;0;L;;;;;N;;;;;\n18C28;KHITAN SMALL SCRIPT CHARACTER-18C28;Lo;0;L;;;;;N;;;;;\n18C29;KHITAN SMALL SCRIPT CHARACTER-18C29;Lo;0;L;;;;;N;;;;;\n18C2A;KHITAN SMALL SCRIPT CHARACTER-18C2A;Lo;0;L;;;;;N;;;;;\n18C2B;KHITAN SMALL SCRIPT CHARACTER-18C2B;Lo;0;L;;;;;N;;;;;\n18C2C;KHITAN SMALL SCRIPT CHARACTER-18C2C;Lo;0;L;;;;;N;;;;;\n18C2D;KHITAN SMALL SCRIPT CHARACTER-18C2D;Lo;0;L;;;;;N;;;;;\n18C2E;KHITAN SMALL SCRIPT CHARACTER-18C2E;Lo;0;L;;;;;N;;;;;\n18C2F;KHITAN SMALL SCRIPT CHARACTER-18C2F;Lo;0;L;;;;;N;;;;;\n18C30;KHITAN SMALL SCRIPT CHARACTER-18C30;Lo;0;L;;;;;N;;;;;\n18C31;KHITAN SMALL SCRIPT CHARACTER-18C31;Lo;0;L;;;;;N;;;;;\n18C32;KHITAN SMALL SCRIPT CHARACTER-18C32;Lo;0;L;;;;;N;;;;;\n18C33;KHITAN SMALL SCRIPT CHARACTER-18C33;Lo;0;L;;;;;N;;;;;\n18C34;KHITAN SMALL SCRIPT CHARACTER-18C34;Lo;0;L;;;;;N;;;;;\n18C35;KHITAN SMALL SCRIPT CHARACTER-18C35;Lo;0;L;;;;;N;;;;;\n18C36;KHITAN SMALL SCRIPT CHARACTER-18C36;Lo;0;L;;;;;N;;;;;\n18C37;KHITAN SMALL SCRIPT CHARACTER-18C37;Lo;0;L;;;;;N;;;;;\n18C38;KHITAN SMALL SCRIPT CHARACTER-18C38;Lo;0;L;;;;;N;;;;;\n18C39;KHITAN SMALL SCRIPT CHARACTER-18C39;Lo;0;L;;;;;N;;;;;\n18C3A;KHITAN SMALL SCRIPT CHARACTER-18C3A;Lo;0;L;;;;;N;;;;;\n18C3B;KHITAN SMALL SCRIPT CHARACTER-18C3B;Lo;0;L;;;;;N;;;;;\n18C3C;KHITAN SMALL SCRIPT CHARACTER-18C3C;Lo;0;L;;;;;N;;;;;\n18C3D;KHITAN SMALL SCRIPT CHARACTER-18C3D;Lo;0;L;;;;;N;;;;;\n18C3E;KHITAN SMALL SCRIPT CHARACTER-18C3E;Lo;0;L;;;;;N;;;;;\n18C3F;KHITAN SMALL SCRIPT CHARACTER-18C3F;Lo;0;L;;;;;N;;;;;\n18C40;KHITAN SMALL SCRIPT CHARACTER-18C40;Lo;0;L;;;;;N;;;;;\n18C41;KHITAN SMALL SCRIPT CHARACTER-18C41;Lo;0;L;;;;;N;;;;;\n18C42;KHITAN SMALL SCRIPT CHARACTER-18C42;Lo;0;L;;;;;N;;;;;\n18C43;KHITAN SMALL SCRIPT CHARACTER-18C43;Lo;0;L;;;;;N;;;;;\n18C44;KHITAN SMALL SCRIPT CHARACTER-18C44;Lo;0;L;;;;;N;;;;;\n18C45;KHITAN SMALL SCRIPT CHARACTER-18C45;Lo;0;L;;;;;N;;;;;\n18C46;KHITAN SMALL SCRIPT CHARACTER-18C46;Lo;0;L;;;;;N;;;;;\n18C47;KHITAN SMALL SCRIPT CHARACTER-18C47;Lo;0;L;;;;;N;;;;;\n18C48;KHITAN SMALL SCRIPT CHARACTER-18C48;Lo;0;L;;;;;N;;;;;\n18C49;KHITAN SMALL SCRIPT CHARACTER-18C49;Lo;0;L;;;;;N;;;;;\n18C4A;KHITAN SMALL SCRIPT CHARACTER-18C4A;Lo;0;L;;;;;N;;;;;\n18C4B;KHITAN SMALL SCRIPT CHARACTER-18C4B;Lo;0;L;;;;;N;;;;;\n18C4C;KHITAN SMALL SCRIPT CHARACTER-18C4C;Lo;0;L;;;;;N;;;;;\n18C4D;KHITAN SMALL SCRIPT CHARACTER-18C4D;Lo;0;L;;;;;N;;;;;\n18C4E;KHITAN SMALL SCRIPT CHARACTER-18C4E;Lo;0;L;;;;;N;;;;;\n18C4F;KHITAN SMALL SCRIPT CHARACTER-18C4F;Lo;0;L;;;;;N;;;;;\n18C50;KHITAN SMALL SCRIPT CHARACTER-18C50;Lo;0;L;;;;;N;;;;;\n18C51;KHITAN SMALL SCRIPT CHARACTER-18C51;Lo;0;L;;;;;N;;;;;\n18C52;KHITAN SMALL SCRIPT CHARACTER-18C52;Lo;0;L;;;;;N;;;;;\n18C53;KHITAN SMALL SCRIPT CHARACTER-18C53;Lo;0;L;;;;;N;;;;;\n18C54;KHITAN SMALL SCRIPT CHARACTER-18C54;Lo;0;L;;;;;N;;;;;\n18C55;KHITAN SMALL SCRIPT CHARACTER-18C55;Lo;0;L;;;;;N;;;;;\n18C56;KHITAN SMALL SCRIPT CHARACTER-18C56;Lo;0;L;;;;;N;;;;;\n18C57;KHITAN SMALL SCRIPT CHARACTER-18C57;Lo;0;L;;;;;N;;;;;\n18C58;KHITAN SMALL SCRIPT CHARACTER-18C58;Lo;0;L;;;;;N;;;;;\n18C59;KHITAN SMALL SCRIPT CHARACTER-18C59;Lo;0;L;;;;;N;;;;;\n18C5A;KHITAN SMALL SCRIPT CHARACTER-18C5A;Lo;0;L;;;;;N;;;;;\n18C5B;KHITAN SMALL SCRIPT CHARACTER-18C5B;Lo;0;L;;;;;N;;;;;\n18C5C;KHITAN SMALL SCRIPT CHARACTER-18C5C;Lo;0;L;;;;;N;;;;;\n18C5D;KHITAN SMALL SCRIPT CHARACTER-18C5D;Lo;0;L;;;;;N;;;;;\n18C5E;KHITAN SMALL SCRIPT CHARACTER-18C5E;Lo;0;L;;;;;N;;;;;\n18C5F;KHITAN SMALL SCRIPT CHARACTER-18C5F;Lo;0;L;;;;;N;;;;;\n18C60;KHITAN SMALL SCRIPT CHARACTER-18C60;Lo;0;L;;;;;N;;;;;\n18C61;KHITAN SMALL SCRIPT CHARACTER-18C61;Lo;0;L;;;;;N;;;;;\n18C62;KHITAN SMALL SCRIPT CHARACTER-18C62;Lo;0;L;;;;;N;;;;;\n18C63;KHITAN SMALL SCRIPT CHARACTER-18C63;Lo;0;L;;;;;N;;;;;\n18C64;KHITAN SMALL SCRIPT CHARACTER-18C64;Lo;0;L;;;;;N;;;;;\n18C65;KHITAN SMALL SCRIPT CHARACTER-18C65;Lo;0;L;;;;;N;;;;;\n18C66;KHITAN SMALL SCRIPT CHARACTER-18C66;Lo;0;L;;;;;N;;;;;\n18C67;KHITAN SMALL SCRIPT CHARACTER-18C67;Lo;0;L;;;;;N;;;;;\n18C68;KHITAN SMALL SCRIPT CHARACTER-18C68;Lo;0;L;;;;;N;;;;;\n18C69;KHITAN SMALL SCRIPT CHARACTER-18C69;Lo;0;L;;;;;N;;;;;\n18C6A;KHITAN SMALL SCRIPT CHARACTER-18C6A;Lo;0;L;;;;;N;;;;;\n18C6B;KHITAN SMALL SCRIPT CHARACTER-18C6B;Lo;0;L;;;;;N;;;;;\n18C6C;KHITAN SMALL SCRIPT CHARACTER-18C6C;Lo;0;L;;;;;N;;;;;\n18C6D;KHITAN SMALL SCRIPT CHARACTER-18C6D;Lo;0;L;;;;;N;;;;;\n18C6E;KHITAN SMALL SCRIPT CHARACTER-18C6E;Lo;0;L;;;;;N;;;;;\n18C6F;KHITAN SMALL SCRIPT CHARACTER-18C6F;Lo;0;L;;;;;N;;;;;\n18C70;KHITAN SMALL SCRIPT CHARACTER-18C70;Lo;0;L;;;;;N;;;;;\n18C71;KHITAN SMALL SCRIPT CHARACTER-18C71;Lo;0;L;;;;;N;;;;;\n18C72;KHITAN SMALL SCRIPT CHARACTER-18C72;Lo;0;L;;;;;N;;;;;\n18C73;KHITAN SMALL SCRIPT CHARACTER-18C73;Lo;0;L;;;;;N;;;;;\n18C74;KHITAN SMALL SCRIPT CHARACTER-18C74;Lo;0;L;;;;;N;;;;;\n18C75;KHITAN SMALL SCRIPT CHARACTER-18C75;Lo;0;L;;;;;N;;;;;\n18C76;KHITAN SMALL SCRIPT CHARACTER-18C76;Lo;0;L;;;;;N;;;;;\n18C77;KHITAN SMALL SCRIPT CHARACTER-18C77;Lo;0;L;;;;;N;;;;;\n18C78;KHITAN SMALL SCRIPT CHARACTER-18C78;Lo;0;L;;;;;N;;;;;\n18C79;KHITAN SMALL SCRIPT CHARACTER-18C79;Lo;0;L;;;;;N;;;;;\n18C7A;KHITAN SMALL SCRIPT CHARACTER-18C7A;Lo;0;L;;;;;N;;;;;\n18C7B;KHITAN SMALL SCRIPT CHARACTER-18C7B;Lo;0;L;;;;;N;;;;;\n18C7C;KHITAN SMALL SCRIPT CHARACTER-18C7C;Lo;0;L;;;;;N;;;;;\n18C7D;KHITAN SMALL SCRIPT CHARACTER-18C7D;Lo;0;L;;;;;N;;;;;\n18C7E;KHITAN SMALL SCRIPT CHARACTER-18C7E;Lo;0;L;;;;;N;;;;;\n18C7F;KHITAN SMALL SCRIPT CHARACTER-18C7F;Lo;0;L;;;;;N;;;;;\n18C80;KHITAN SMALL SCRIPT CHARACTER-18C80;Lo;0;L;;;;;N;;;;;\n18C81;KHITAN SMALL SCRIPT CHARACTER-18C81;Lo;0;L;;;;;N;;;;;\n18C82;KHITAN SMALL SCRIPT CHARACTER-18C82;Lo;0;L;;;;;N;;;;;\n18C83;KHITAN SMALL SCRIPT CHARACTER-18C83;Lo;0;L;;;;;N;;;;;\n18C84;KHITAN SMALL SCRIPT CHARACTER-18C84;Lo;0;L;;;;;N;;;;;\n18C85;KHITAN SMALL SCRIPT CHARACTER-18C85;Lo;0;L;;;;;N;;;;;\n18C86;KHITAN SMALL SCRIPT CHARACTER-18C86;Lo;0;L;;;;;N;;;;;\n18C87;KHITAN SMALL SCRIPT CHARACTER-18C87;Lo;0;L;;;;;N;;;;;\n18C88;KHITAN SMALL SCRIPT CHARACTER-18C88;Lo;0;L;;;;;N;;;;;\n18C89;KHITAN SMALL SCRIPT CHARACTER-18C89;Lo;0;L;;;;;N;;;;;\n18C8A;KHITAN SMALL SCRIPT CHARACTER-18C8A;Lo;0;L;;;;;N;;;;;\n18C8B;KHITAN SMALL SCRIPT CHARACTER-18C8B;Lo;0;L;;;;;N;;;;;\n18C8C;KHITAN SMALL SCRIPT CHARACTER-18C8C;Lo;0;L;;;;;N;;;;;\n18C8D;KHITAN SMALL SCRIPT CHARACTER-18C8D;Lo;0;L;;;;;N;;;;;\n18C8E;KHITAN SMALL SCRIPT CHARACTER-18C8E;Lo;0;L;;;;;N;;;;;\n18C8F;KHITAN SMALL SCRIPT CHARACTER-18C8F;Lo;0;L;;;;;N;;;;;\n18C90;KHITAN SMALL SCRIPT CHARACTER-18C90;Lo;0;L;;;;;N;;;;;\n18C91;KHITAN SMALL SCRIPT CHARACTER-18C91;Lo;0;L;;;;;N;;;;;\n18C92;KHITAN SMALL SCRIPT CHARACTER-18C92;Lo;0;L;;;;;N;;;;;\n18C93;KHITAN SMALL SCRIPT CHARACTER-18C93;Lo;0;L;;;;;N;;;;;\n18C94;KHITAN SMALL SCRIPT CHARACTER-18C94;Lo;0;L;;;;;N;;;;;\n18C95;KHITAN SMALL SCRIPT CHARACTER-18C95;Lo;0;L;;;;;N;;;;;\n18C96;KHITAN SMALL SCRIPT CHARACTER-18C96;Lo;0;L;;;;;N;;;;;\n18C97;KHITAN SMALL SCRIPT CHARACTER-18C97;Lo;0;L;;;;;N;;;;;\n18C98;KHITAN SMALL SCRIPT CHARACTER-18C98;Lo;0;L;;;;;N;;;;;\n18C99;KHITAN SMALL SCRIPT CHARACTER-18C99;Lo;0;L;;;;;N;;;;;\n18C9A;KHITAN SMALL SCRIPT CHARACTER-18C9A;Lo;0;L;;;;;N;;;;;\n18C9B;KHITAN SMALL SCRIPT CHARACTER-18C9B;Lo;0;L;;;;;N;;;;;\n18C9C;KHITAN SMALL SCRIPT CHARACTER-18C9C;Lo;0;L;;;;;N;;;;;\n18C9D;KHITAN SMALL SCRIPT CHARACTER-18C9D;Lo;0;L;;;;;N;;;;;\n18C9E;KHITAN SMALL SCRIPT CHARACTER-18C9E;Lo;0;L;;;;;N;;;;;\n18C9F;KHITAN SMALL SCRIPT CHARACTER-18C9F;Lo;0;L;;;;;N;;;;;\n18CA0;KHITAN SMALL SCRIPT CHARACTER-18CA0;Lo;0;L;;;;;N;;;;;\n18CA1;KHITAN SMALL SCRIPT CHARACTER-18CA1;Lo;0;L;;;;;N;;;;;\n18CA2;KHITAN SMALL SCRIPT CHARACTER-18CA2;Lo;0;L;;;;;N;;;;;\n18CA3;KHITAN SMALL SCRIPT CHARACTER-18CA3;Lo;0;L;;;;;N;;;;;\n18CA4;KHITAN SMALL SCRIPT CHARACTER-18CA4;Lo;0;L;;;;;N;;;;;\n18CA5;KHITAN SMALL SCRIPT CHARACTER-18CA5;Lo;0;L;;;;;N;;;;;\n18CA6;KHITAN SMALL SCRIPT CHARACTER-18CA6;Lo;0;L;;;;;N;;;;;\n18CA7;KHITAN SMALL SCRIPT CHARACTER-18CA7;Lo;0;L;;;;;N;;;;;\n18CA8;KHITAN SMALL SCRIPT CHARACTER-18CA8;Lo;0;L;;;;;N;;;;;\n18CA9;KHITAN SMALL SCRIPT CHARACTER-18CA9;Lo;0;L;;;;;N;;;;;\n18CAA;KHITAN SMALL SCRIPT CHARACTER-18CAA;Lo;0;L;;;;;N;;;;;\n18CAB;KHITAN SMALL SCRIPT CHARACTER-18CAB;Lo;0;L;;;;;N;;;;;\n18CAC;KHITAN SMALL SCRIPT CHARACTER-18CAC;Lo;0;L;;;;;N;;;;;\n18CAD;KHITAN SMALL SCRIPT CHARACTER-18CAD;Lo;0;L;;;;;N;;;;;\n18CAE;KHITAN SMALL SCRIPT CHARACTER-18CAE;Lo;0;L;;;;;N;;;;;\n18CAF;KHITAN SMALL SCRIPT CHARACTER-18CAF;Lo;0;L;;;;;N;;;;;\n18CB0;KHITAN SMALL SCRIPT CHARACTER-18CB0;Lo;0;L;;;;;N;;;;;\n18CB1;KHITAN SMALL SCRIPT CHARACTER-18CB1;Lo;0;L;;;;;N;;;;;\n18CB2;KHITAN SMALL SCRIPT CHARACTER-18CB2;Lo;0;L;;;;;N;;;;;\n18CB3;KHITAN SMALL SCRIPT CHARACTER-18CB3;Lo;0;L;;;;;N;;;;;\n18CB4;KHITAN SMALL SCRIPT CHARACTER-18CB4;Lo;0;L;;;;;N;;;;;\n18CB5;KHITAN SMALL SCRIPT CHARACTER-18CB5;Lo;0;L;;;;;N;;;;;\n18CB6;KHITAN SMALL SCRIPT CHARACTER-18CB6;Lo;0;L;;;;;N;;;;;\n18CB7;KHITAN SMALL SCRIPT CHARACTER-18CB7;Lo;0;L;;;;;N;;;;;\n18CB8;KHITAN SMALL SCRIPT CHARACTER-18CB8;Lo;0;L;;;;;N;;;;;\n18CB9;KHITAN SMALL SCRIPT CHARACTER-18CB9;Lo;0;L;;;;;N;;;;;\n18CBA;KHITAN SMALL SCRIPT CHARACTER-18CBA;Lo;0;L;;;;;N;;;;;\n18CBB;KHITAN SMALL SCRIPT CHARACTER-18CBB;Lo;0;L;;;;;N;;;;;\n18CBC;KHITAN SMALL SCRIPT CHARACTER-18CBC;Lo;0;L;;;;;N;;;;;\n18CBD;KHITAN SMALL SCRIPT CHARACTER-18CBD;Lo;0;L;;;;;N;;;;;\n18CBE;KHITAN SMALL SCRIPT CHARACTER-18CBE;Lo;0;L;;;;;N;;;;;\n18CBF;KHITAN SMALL SCRIPT CHARACTER-18CBF;Lo;0;L;;;;;N;;;;;\n18CC0;KHITAN SMALL SCRIPT CHARACTER-18CC0;Lo;0;L;;;;;N;;;;;\n18CC1;KHITAN SMALL SCRIPT CHARACTER-18CC1;Lo;0;L;;;;;N;;;;;\n18CC2;KHITAN SMALL SCRIPT CHARACTER-18CC2;Lo;0;L;;;;;N;;;;;\n18CC3;KHITAN SMALL SCRIPT CHARACTER-18CC3;Lo;0;L;;;;;N;;;;;\n18CC4;KHITAN SMALL SCRIPT CHARACTER-18CC4;Lo;0;L;;;;;N;;;;;\n18CC5;KHITAN SMALL SCRIPT CHARACTER-18CC5;Lo;0;L;;;;;N;;;;;\n18CC6;KHITAN SMALL SCRIPT CHARACTER-18CC6;Lo;0;L;;;;;N;;;;;\n18CC7;KHITAN SMALL SCRIPT CHARACTER-18CC7;Lo;0;L;;;;;N;;;;;\n18CC8;KHITAN SMALL SCRIPT CHARACTER-18CC8;Lo;0;L;;;;;N;;;;;\n18CC9;KHITAN SMALL SCRIPT CHARACTER-18CC9;Lo;0;L;;;;;N;;;;;\n18CCA;KHITAN SMALL SCRIPT CHARACTER-18CCA;Lo;0;L;;;;;N;;;;;\n18CCB;KHITAN SMALL SCRIPT CHARACTER-18CCB;Lo;0;L;;;;;N;;;;;\n18CCC;KHITAN SMALL SCRIPT CHARACTER-18CCC;Lo;0;L;;;;;N;;;;;\n18CCD;KHITAN SMALL SCRIPT CHARACTER-18CCD;Lo;0;L;;;;;N;;;;;\n18CCE;KHITAN SMALL SCRIPT CHARACTER-18CCE;Lo;0;L;;;;;N;;;;;\n18CCF;KHITAN SMALL SCRIPT CHARACTER-18CCF;Lo;0;L;;;;;N;;;;;\n18CD0;KHITAN SMALL SCRIPT CHARACTER-18CD0;Lo;0;L;;;;;N;;;;;\n18CD1;KHITAN SMALL SCRIPT CHARACTER-18CD1;Lo;0;L;;;;;N;;;;;\n18CD2;KHITAN SMALL SCRIPT CHARACTER-18CD2;Lo;0;L;;;;;N;;;;;\n18CD3;KHITAN SMALL SCRIPT CHARACTER-18CD3;Lo;0;L;;;;;N;;;;;\n18CD4;KHITAN SMALL SCRIPT CHARACTER-18CD4;Lo;0;L;;;;;N;;;;;\n18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;;\n18CFF;KHITAN SMALL SCRIPT CHARACTER-18CFF;Lo;0;L;;;;;N;;;;;\n18D00;<Tangut Ideograph Supplement, First>;Lo;0;L;;;;;N;;;;;\n18D1E;<Tangut Ideograph Supplement, Last>;Lo;0;L;;;;;N;;;;;\n18D80;TANGUT COMPONENT-769;Lo;0;L;;;;;N;;;;;\n18D81;TANGUT COMPONENT-770;Lo;0;L;;;;;N;;;;;\n18D82;TANGUT COMPONENT-771;Lo;0;L;;;;;N;;;;;\n18D83;TANGUT COMPONENT-772;Lo;0;L;;;;;N;;;;;\n18D84;TANGUT COMPONENT-773;Lo;0;L;;;;;N;;;;;\n18D85;TANGUT COMPONENT-774;Lo;0;L;;;;;N;;;;;\n18D86;TANGUT COMPONENT-775;Lo;0;L;;;;;N;;;;;\n18D87;TANGUT COMPONENT-776;Lo;0;L;;;;;N;;;;;\n18D88;TANGUT COMPONENT-777;Lo;0;L;;;;;N;;;;;\n18D89;TANGUT COMPONENT-778;Lo;0;L;;;;;N;;;;;\n18D8A;TANGUT COMPONENT-779;Lo;0;L;;;;;N;;;;;\n18D8B;TANGUT COMPONENT-780;Lo;0;L;;;;;N;;;;;\n18D8C;TANGUT COMPONENT-781;Lo;0;L;;;;;N;;;;;\n18D8D;TANGUT COMPONENT-782;Lo;0;L;;;;;N;;;;;\n18D8E;TANGUT COMPONENT-783;Lo;0;L;;;;;N;;;;;\n18D8F;TANGUT COMPONENT-784;Lo;0;L;;;;;N;;;;;\n18D90;TANGUT COMPONENT-785;Lo;0;L;;;;;N;;;;;\n18D91;TANGUT COMPONENT-786;Lo;0;L;;;;;N;;;;;\n18D92;TANGUT COMPONENT-787;Lo;0;L;;;;;N;;;;;\n18D93;TANGUT COMPONENT-788;Lo;0;L;;;;;N;;;;;\n18D94;TANGUT COMPONENT-789;Lo;0;L;;;;;N;;;;;\n18D95;TANGUT COMPONENT-790;Lo;0;L;;;;;N;;;;;\n18D96;TANGUT COMPONENT-791;Lo;0;L;;;;;N;;;;;\n18D97;TANGUT COMPONENT-792;Lo;0;L;;;;;N;;;;;\n18D98;TANGUT COMPONENT-793;Lo;0;L;;;;;N;;;;;\n18D99;TANGUT COMPONENT-794;Lo;0;L;;;;;N;;;;;\n18D9A;TANGUT COMPONENT-795;Lo;0;L;;;;;N;;;;;\n18D9B;TANGUT COMPONENT-796;Lo;0;L;;;;;N;;;;;\n18D9C;TANGUT COMPONENT-797;Lo;0;L;;;;;N;;;;;\n18D9D;TANGUT COMPONENT-798;Lo;0;L;;;;;N;;;;;\n18D9E;TANGUT COMPONENT-799;Lo;0;L;;;;;N;;;;;\n18D9F;TANGUT COMPONENT-800;Lo;0;L;;;;;N;;;;;\n18DA0;TANGUT COMPONENT-801;Lo;0;L;;;;;N;;;;;\n18DA1;TANGUT COMPONENT-802;Lo;0;L;;;;;N;;;;;\n18DA2;TANGUT COMPONENT-803;Lo;0;L;;;;;N;;;;;\n18DA3;TANGUT COMPONENT-804;Lo;0;L;;;;;N;;;;;\n18DA4;TANGUT COMPONENT-805;Lo;0;L;;;;;N;;;;;\n18DA5;TANGUT COMPONENT-806;Lo;0;L;;;;;N;;;;;\n18DA6;TANGUT COMPONENT-807;Lo;0;L;;;;;N;;;;;\n18DA7;TANGUT COMPONENT-808;Lo;0;L;;;;;N;;;;;\n18DA8;TANGUT COMPONENT-809;Lo;0;L;;;;;N;;;;;\n18DA9;TANGUT COMPONENT-810;Lo;0;L;;;;;N;;;;;\n18DAA;TANGUT COMPONENT-811;Lo;0;L;;;;;N;;;;;\n18DAB;TANGUT COMPONENT-812;Lo;0;L;;;;;N;;;;;\n18DAC;TANGUT COMPONENT-813;Lo;0;L;;;;;N;;;;;\n18DAD;TANGUT COMPONENT-814;Lo;0;L;;;;;N;;;;;\n18DAE;TANGUT COMPONENT-815;Lo;0;L;;;;;N;;;;;\n18DAF;TANGUT COMPONENT-816;Lo;0;L;;;;;N;;;;;\n18DB0;TANGUT COMPONENT-817;Lo;0;L;;;;;N;;;;;\n18DB1;TANGUT COMPONENT-818;Lo;0;L;;;;;N;;;;;\n18DB2;TANGUT COMPONENT-819;Lo;0;L;;;;;N;;;;;\n18DB3;TANGUT COMPONENT-820;Lo;0;L;;;;;N;;;;;\n18DB4;TANGUT COMPONENT-821;Lo;0;L;;;;;N;;;;;\n18DB5;TANGUT COMPONENT-822;Lo;0;L;;;;;N;;;;;\n18DB6;TANGUT COMPONENT-823;Lo;0;L;;;;;N;;;;;\n18DB7;TANGUT COMPONENT-824;Lo;0;L;;;;;N;;;;;\n18DB8;TANGUT COMPONENT-825;Lo;0;L;;;;;N;;;;;\n18DB9;TANGUT COMPONENT-826;Lo;0;L;;;;;N;;;;;\n18DBA;TANGUT COMPONENT-827;Lo;0;L;;;;;N;;;;;\n18DBB;TANGUT COMPONENT-828;Lo;0;L;;;;;N;;;;;\n18DBC;TANGUT COMPONENT-829;Lo;0;L;;;;;N;;;;;\n18DBD;TANGUT COMPONENT-830;Lo;0;L;;;;;N;;;;;\n18DBE;TANGUT COMPONENT-831;Lo;0;L;;;;;N;;;;;\n18DBF;TANGUT COMPONENT-832;Lo;0;L;;;;;N;;;;;\n18DC0;TANGUT COMPONENT-833;Lo;0;L;;;;;N;;;;;\n18DC1;TANGUT COMPONENT-834;Lo;0;L;;;;;N;;;;;\n18DC2;TANGUT COMPONENT-835;Lo;0;L;;;;;N;;;;;\n18DC3;TANGUT COMPONENT-836;Lo;0;L;;;;;N;;;;;\n18DC4;TANGUT COMPONENT-837;Lo;0;L;;;;;N;;;;;\n18DC5;TANGUT COMPONENT-838;Lo;0;L;;;;;N;;;;;\n18DC6;TANGUT COMPONENT-839;Lo;0;L;;;;;N;;;;;\n18DC7;TANGUT COMPONENT-840;Lo;0;L;;;;;N;;;;;\n18DC8;TANGUT COMPONENT-841;Lo;0;L;;;;;N;;;;;\n18DC9;TANGUT COMPONENT-842;Lo;0;L;;;;;N;;;;;\n18DCA;TANGUT COMPONENT-843;Lo;0;L;;;;;N;;;;;\n18DCB;TANGUT COMPONENT-844;Lo;0;L;;;;;N;;;;;\n18DCC;TANGUT COMPONENT-845;Lo;0;L;;;;;N;;;;;\n18DCD;TANGUT COMPONENT-846;Lo;0;L;;;;;N;;;;;\n18DCE;TANGUT COMPONENT-847;Lo;0;L;;;;;N;;;;;\n18DCF;TANGUT COMPONENT-848;Lo;0;L;;;;;N;;;;;\n18DD0;TANGUT COMPONENT-849;Lo;0;L;;;;;N;;;;;\n18DD1;TANGUT COMPONENT-850;Lo;0;L;;;;;N;;;;;\n18DD2;TANGUT COMPONENT-851;Lo;0;L;;;;;N;;;;;\n18DD3;TANGUT COMPONENT-852;Lo;0;L;;;;;N;;;;;\n18DD4;TANGUT COMPONENT-853;Lo;0;L;;;;;N;;;;;\n18DD5;TANGUT COMPONENT-854;Lo;0;L;;;;;N;;;;;\n18DD6;TANGUT COMPONENT-855;Lo;0;L;;;;;N;;;;;\n18DD7;TANGUT COMPONENT-856;Lo;0;L;;;;;N;;;;;\n18DD8;TANGUT COMPONENT-857;Lo;0;L;;;;;N;;;;;\n18DD9;TANGUT COMPONENT-858;Lo;0;L;;;;;N;;;;;\n18DDA;TANGUT COMPONENT-859;Lo;0;L;;;;;N;;;;;\n18DDB;TANGUT COMPONENT-860;Lo;0;L;;;;;N;;;;;\n18DDC;TANGUT COMPONENT-861;Lo;0;L;;;;;N;;;;;\n18DDD;TANGUT COMPONENT-862;Lo;0;L;;;;;N;;;;;\n18DDE;TANGUT COMPONENT-863;Lo;0;L;;;;;N;;;;;\n18DDF;TANGUT COMPONENT-864;Lo;0;L;;;;;N;;;;;\n18DE0;TANGUT COMPONENT-865;Lo;0;L;;;;;N;;;;;\n18DE1;TANGUT COMPONENT-866;Lo;0;L;;;;;N;;;;;\n18DE2;TANGUT COMPONENT-867;Lo;0;L;;;;;N;;;;;\n18DE3;TANGUT COMPONENT-868;Lo;0;L;;;;;N;;;;;\n18DE4;TANGUT COMPONENT-869;Lo;0;L;;;;;N;;;;;\n18DE5;TANGUT COMPONENT-870;Lo;0;L;;;;;N;;;;;\n18DE6;TANGUT COMPONENT-871;Lo;0;L;;;;;N;;;;;\n18DE7;TANGUT COMPONENT-872;Lo;0;L;;;;;N;;;;;\n18DE8;TANGUT COMPONENT-873;Lo;0;L;;;;;N;;;;;\n18DE9;TANGUT COMPONENT-874;Lo;0;L;;;;;N;;;;;\n18DEA;TANGUT COMPONENT-875;Lo;0;L;;;;;N;;;;;\n18DEB;TANGUT COMPONENT-876;Lo;0;L;;;;;N;;;;;\n18DEC;TANGUT COMPONENT-877;Lo;0;L;;;;;N;;;;;\n18DED;TANGUT COMPONENT-878;Lo;0;L;;;;;N;;;;;\n18DEE;TANGUT COMPONENT-879;Lo;0;L;;;;;N;;;;;\n18DEF;TANGUT COMPONENT-880;Lo;0;L;;;;;N;;;;;\n18DF0;TANGUT COMPONENT-881;Lo;0;L;;;;;N;;;;;\n18DF1;TANGUT COMPONENT-882;Lo;0;L;;;;;N;;;;;\n18DF2;TANGUT COMPONENT-883;Lo;0;L;;;;;N;;;;;\n1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;;\n1AFF1;KATAKANA LETTER MINNAN TONE-3;Lm;0;L;;;;;N;;;;;\n1AFF2;KATAKANA LETTER MINNAN TONE-4;Lm;0;L;;;;;N;;;;;\n1AFF3;KATAKANA LETTER MINNAN TONE-5;Lm;0;L;;;;;N;;;;;\n1AFF5;KATAKANA LETTER MINNAN TONE-7;Lm;0;L;;;;;N;;;;;\n1AFF6;KATAKANA LETTER MINNAN TONE-8;Lm;0;L;;;;;N;;;;;\n1AFF7;KATAKANA LETTER MINNAN NASALIZED TONE-1;Lm;0;L;;;;;N;;;;;\n1AFF8;KATAKANA LETTER MINNAN NASALIZED TONE-2;Lm;0;L;;;;;N;;;;;\n1AFF9;KATAKANA LETTER MINNAN NASALIZED TONE-3;Lm;0;L;;;;;N;;;;;\n1AFFA;KATAKANA LETTER MINNAN NASALIZED TONE-4;Lm;0;L;;;;;N;;;;;\n1AFFB;KATAKANA LETTER MINNAN NASALIZED TONE-5;Lm;0;L;;;;;N;;;;;\n1AFFD;KATAKANA LETTER MINNAN NASALIZED TONE-7;Lm;0;L;;;;;N;;;;;\n1AFFE;KATAKANA LETTER MINNAN NASALIZED TONE-8;Lm;0;L;;;;;N;;;;;\n1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;;\n1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;\n1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;;\n1B003;HENTAIGANA LETTER A-2;Lo;0;L;;;;;N;;;;;\n1B004;HENTAIGANA LETTER A-3;Lo;0;L;;;;;N;;;;;\n1B005;HENTAIGANA LETTER A-WO;Lo;0;L;;;;;N;;;;;\n1B006;HENTAIGANA LETTER I-1;Lo;0;L;;;;;N;;;;;\n1B007;HENTAIGANA LETTER I-2;Lo;0;L;;;;;N;;;;;\n1B008;HENTAIGANA LETTER I-3;Lo;0;L;;;;;N;;;;;\n1B009;HENTAIGANA LETTER I-4;Lo;0;L;;;;;N;;;;;\n1B00A;HENTAIGANA LETTER U-1;Lo;0;L;;;;;N;;;;;\n1B00B;HENTAIGANA LETTER U-2;Lo;0;L;;;;;N;;;;;\n1B00C;HENTAIGANA LETTER U-3;Lo;0;L;;;;;N;;;;;\n1B00D;HENTAIGANA LETTER U-4;Lo;0;L;;;;;N;;;;;\n1B00E;HENTAIGANA LETTER U-5;Lo;0;L;;;;;N;;;;;\n1B00F;HENTAIGANA LETTER E-2;Lo;0;L;;;;;N;;;;;\n1B010;HENTAIGANA LETTER E-3;Lo;0;L;;;;;N;;;;;\n1B011;HENTAIGANA LETTER E-4;Lo;0;L;;;;;N;;;;;\n1B012;HENTAIGANA LETTER E-5;Lo;0;L;;;;;N;;;;;\n1B013;HENTAIGANA LETTER E-6;Lo;0;L;;;;;N;;;;;\n1B014;HENTAIGANA LETTER O-1;Lo;0;L;;;;;N;;;;;\n1B015;HENTAIGANA LETTER O-2;Lo;0;L;;;;;N;;;;;\n1B016;HENTAIGANA LETTER O-3;Lo;0;L;;;;;N;;;;;\n1B017;HENTAIGANA LETTER KA-1;Lo;0;L;;;;;N;;;;;\n1B018;HENTAIGANA LETTER KA-2;Lo;0;L;;;;;N;;;;;\n1B019;HENTAIGANA LETTER KA-3;Lo;0;L;;;;;N;;;;;\n1B01A;HENTAIGANA LETTER KA-4;Lo;0;L;;;;;N;;;;;\n1B01B;HENTAIGANA LETTER KA-5;Lo;0;L;;;;;N;;;;;\n1B01C;HENTAIGANA LETTER KA-6;Lo;0;L;;;;;N;;;;;\n1B01D;HENTAIGANA LETTER KA-7;Lo;0;L;;;;;N;;;;;\n1B01E;HENTAIGANA LETTER KA-8;Lo;0;L;;;;;N;;;;;\n1B01F;HENTAIGANA LETTER KA-9;Lo;0;L;;;;;N;;;;;\n1B020;HENTAIGANA LETTER KA-10;Lo;0;L;;;;;N;;;;;\n1B021;HENTAIGANA LETTER KA-11;Lo;0;L;;;;;N;;;;;\n1B022;HENTAIGANA LETTER KA-KE;Lo;0;L;;;;;N;;;;;\n1B023;HENTAIGANA LETTER KI-1;Lo;0;L;;;;;N;;;;;\n1B024;HENTAIGANA LETTER KI-2;Lo;0;L;;;;;N;;;;;\n1B025;HENTAIGANA LETTER KI-3;Lo;0;L;;;;;N;;;;;\n1B026;HENTAIGANA LETTER KI-4;Lo;0;L;;;;;N;;;;;\n1B027;HENTAIGANA LETTER KI-5;Lo;0;L;;;;;N;;;;;\n1B028;HENTAIGANA LETTER KI-6;Lo;0;L;;;;;N;;;;;\n1B029;HENTAIGANA LETTER KI-7;Lo;0;L;;;;;N;;;;;\n1B02A;HENTAIGANA LETTER KI-8;Lo;0;L;;;;;N;;;;;\n1B02B;HENTAIGANA LETTER KU-1;Lo;0;L;;;;;N;;;;;\n1B02C;HENTAIGANA LETTER KU-2;Lo;0;L;;;;;N;;;;;\n1B02D;HENTAIGANA LETTER KU-3;Lo;0;L;;;;;N;;;;;\n1B02E;HENTAIGANA LETTER KU-4;Lo;0;L;;;;;N;;;;;\n1B02F;HENTAIGANA LETTER KU-5;Lo;0;L;;;;;N;;;;;\n1B030;HENTAIGANA LETTER KU-6;Lo;0;L;;;;;N;;;;;\n1B031;HENTAIGANA LETTER KU-7;Lo;0;L;;;;;N;;;;;\n1B032;HENTAIGANA LETTER KE-1;Lo;0;L;;;;;N;;;;;\n1B033;HENTAIGANA LETTER KE-2;Lo;0;L;;;;;N;;;;;\n1B034;HENTAIGANA LETTER KE-3;Lo;0;L;;;;;N;;;;;\n1B035;HENTAIGANA LETTER KE-4;Lo;0;L;;;;;N;;;;;\n1B036;HENTAIGANA LETTER KE-5;Lo;0;L;;;;;N;;;;;\n1B037;HENTAIGANA LETTER KE-6;Lo;0;L;;;;;N;;;;;\n1B038;HENTAIGANA LETTER KO-1;Lo;0;L;;;;;N;;;;;\n1B039;HENTAIGANA LETTER KO-2;Lo;0;L;;;;;N;;;;;\n1B03A;HENTAIGANA LETTER KO-3;Lo;0;L;;;;;N;;;;;\n1B03B;HENTAIGANA LETTER KO-KI;Lo;0;L;;;;;N;;;;;\n1B03C;HENTAIGANA LETTER SA-1;Lo;0;L;;;;;N;;;;;\n1B03D;HENTAIGANA LETTER SA-2;Lo;0;L;;;;;N;;;;;\n1B03E;HENTAIGANA LETTER SA-3;Lo;0;L;;;;;N;;;;;\n1B03F;HENTAIGANA LETTER SA-4;Lo;0;L;;;;;N;;;;;\n1B040;HENTAIGANA LETTER SA-5;Lo;0;L;;;;;N;;;;;\n1B041;HENTAIGANA LETTER SA-6;Lo;0;L;;;;;N;;;;;\n1B042;HENTAIGANA LETTER SA-7;Lo;0;L;;;;;N;;;;;\n1B043;HENTAIGANA LETTER SA-8;Lo;0;L;;;;;N;;;;;\n1B044;HENTAIGANA LETTER SI-1;Lo;0;L;;;;;N;;;;;\n1B045;HENTAIGANA LETTER SI-2;Lo;0;L;;;;;N;;;;;\n1B046;HENTAIGANA LETTER SI-3;Lo;0;L;;;;;N;;;;;\n1B047;HENTAIGANA LETTER SI-4;Lo;0;L;;;;;N;;;;;\n1B048;HENTAIGANA LETTER SI-5;Lo;0;L;;;;;N;;;;;\n1B049;HENTAIGANA LETTER SI-6;Lo;0;L;;;;;N;;;;;\n1B04A;HENTAIGANA LETTER SU-1;Lo;0;L;;;;;N;;;;;\n1B04B;HENTAIGANA LETTER SU-2;Lo;0;L;;;;;N;;;;;\n1B04C;HENTAIGANA LETTER SU-3;Lo;0;L;;;;;N;;;;;\n1B04D;HENTAIGANA LETTER SU-4;Lo;0;L;;;;;N;;;;;\n1B04E;HENTAIGANA LETTER SU-5;Lo;0;L;;;;;N;;;;;\n1B04F;HENTAIGANA LETTER SU-6;Lo;0;L;;;;;N;;;;;\n1B050;HENTAIGANA LETTER SU-7;Lo;0;L;;;;;N;;;;;\n1B051;HENTAIGANA LETTER SU-8;Lo;0;L;;;;;N;;;;;\n1B052;HENTAIGANA LETTER SE-1;Lo;0;L;;;;;N;;;;;\n1B053;HENTAIGANA LETTER SE-2;Lo;0;L;;;;;N;;;;;\n1B054;HENTAIGANA LETTER SE-3;Lo;0;L;;;;;N;;;;;\n1B055;HENTAIGANA LETTER SE-4;Lo;0;L;;;;;N;;;;;\n1B056;HENTAIGANA LETTER SE-5;Lo;0;L;;;;;N;;;;;\n1B057;HENTAIGANA LETTER SO-1;Lo;0;L;;;;;N;;;;;\n1B058;HENTAIGANA LETTER SO-2;Lo;0;L;;;;;N;;;;;\n1B059;HENTAIGANA LETTER SO-3;Lo;0;L;;;;;N;;;;;\n1B05A;HENTAIGANA LETTER SO-4;Lo;0;L;;;;;N;;;;;\n1B05B;HENTAIGANA LETTER SO-5;Lo;0;L;;;;;N;;;;;\n1B05C;HENTAIGANA LETTER SO-6;Lo;0;L;;;;;N;;;;;\n1B05D;HENTAIGANA LETTER SO-7;Lo;0;L;;;;;N;;;;;\n1B05E;HENTAIGANA LETTER TA-1;Lo;0;L;;;;;N;;;;;\n1B05F;HENTAIGANA LETTER TA-2;Lo;0;L;;;;;N;;;;;\n1B060;HENTAIGANA LETTER TA-3;Lo;0;L;;;;;N;;;;;\n1B061;HENTAIGANA LETTER TA-4;Lo;0;L;;;;;N;;;;;\n1B062;HENTAIGANA LETTER TI-1;Lo;0;L;;;;;N;;;;;\n1B063;HENTAIGANA LETTER TI-2;Lo;0;L;;;;;N;;;;;\n1B064;HENTAIGANA LETTER TI-3;Lo;0;L;;;;;N;;;;;\n1B065;HENTAIGANA LETTER TI-4;Lo;0;L;;;;;N;;;;;\n1B066;HENTAIGANA LETTER TI-5;Lo;0;L;;;;;N;;;;;\n1B067;HENTAIGANA LETTER TI-6;Lo;0;L;;;;;N;;;;;\n1B068;HENTAIGANA LETTER TI-7;Lo;0;L;;;;;N;;;;;\n1B069;HENTAIGANA LETTER TU-1;Lo;0;L;;;;;N;;;;;\n1B06A;HENTAIGANA LETTER TU-2;Lo;0;L;;;;;N;;;;;\n1B06B;HENTAIGANA LETTER TU-3;Lo;0;L;;;;;N;;;;;\n1B06C;HENTAIGANA LETTER TU-4;Lo;0;L;;;;;N;;;;;\n1B06D;HENTAIGANA LETTER TU-TO;Lo;0;L;;;;;N;;;;;\n1B06E;HENTAIGANA LETTER TE-1;Lo;0;L;;;;;N;;;;;\n1B06F;HENTAIGANA LETTER TE-2;Lo;0;L;;;;;N;;;;;\n1B070;HENTAIGANA LETTER TE-3;Lo;0;L;;;;;N;;;;;\n1B071;HENTAIGANA LETTER TE-4;Lo;0;L;;;;;N;;;;;\n1B072;HENTAIGANA LETTER TE-5;Lo;0;L;;;;;N;;;;;\n1B073;HENTAIGANA LETTER TE-6;Lo;0;L;;;;;N;;;;;\n1B074;HENTAIGANA LETTER TE-7;Lo;0;L;;;;;N;;;;;\n1B075;HENTAIGANA LETTER TE-8;Lo;0;L;;;;;N;;;;;\n1B076;HENTAIGANA LETTER TE-9;Lo;0;L;;;;;N;;;;;\n1B077;HENTAIGANA LETTER TO-1;Lo;0;L;;;;;N;;;;;\n1B078;HENTAIGANA LETTER TO-2;Lo;0;L;;;;;N;;;;;\n1B079;HENTAIGANA LETTER TO-3;Lo;0;L;;;;;N;;;;;\n1B07A;HENTAIGANA LETTER TO-4;Lo;0;L;;;;;N;;;;;\n1B07B;HENTAIGANA LETTER TO-5;Lo;0;L;;;;;N;;;;;\n1B07C;HENTAIGANA LETTER TO-6;Lo;0;L;;;;;N;;;;;\n1B07D;HENTAIGANA LETTER TO-RA;Lo;0;L;;;;;N;;;;;\n1B07E;HENTAIGANA LETTER NA-1;Lo;0;L;;;;;N;;;;;\n1B07F;HENTAIGANA LETTER NA-2;Lo;0;L;;;;;N;;;;;\n1B080;HENTAIGANA LETTER NA-3;Lo;0;L;;;;;N;;;;;\n1B081;HENTAIGANA LETTER NA-4;Lo;0;L;;;;;N;;;;;\n1B082;HENTAIGANA LETTER NA-5;Lo;0;L;;;;;N;;;;;\n1B083;HENTAIGANA LETTER NA-6;Lo;0;L;;;;;N;;;;;\n1B084;HENTAIGANA LETTER NA-7;Lo;0;L;;;;;N;;;;;\n1B085;HENTAIGANA LETTER NA-8;Lo;0;L;;;;;N;;;;;\n1B086;HENTAIGANA LETTER NA-9;Lo;0;L;;;;;N;;;;;\n1B087;HENTAIGANA LETTER NI-1;Lo;0;L;;;;;N;;;;;\n1B088;HENTAIGANA LETTER NI-2;Lo;0;L;;;;;N;;;;;\n1B089;HENTAIGANA LETTER NI-3;Lo;0;L;;;;;N;;;;;\n1B08A;HENTAIGANA LETTER NI-4;Lo;0;L;;;;;N;;;;;\n1B08B;HENTAIGANA LETTER NI-5;Lo;0;L;;;;;N;;;;;\n1B08C;HENTAIGANA LETTER NI-6;Lo;0;L;;;;;N;;;;;\n1B08D;HENTAIGANA LETTER NI-7;Lo;0;L;;;;;N;;;;;\n1B08E;HENTAIGANA LETTER NI-TE;Lo;0;L;;;;;N;;;;;\n1B08F;HENTAIGANA LETTER NU-1;Lo;0;L;;;;;N;;;;;\n1B090;HENTAIGANA LETTER NU-2;Lo;0;L;;;;;N;;;;;\n1B091;HENTAIGANA LETTER NU-3;Lo;0;L;;;;;N;;;;;\n1B092;HENTAIGANA LETTER NE-1;Lo;0;L;;;;;N;;;;;\n1B093;HENTAIGANA LETTER NE-2;Lo;0;L;;;;;N;;;;;\n1B094;HENTAIGANA LETTER NE-3;Lo;0;L;;;;;N;;;;;\n1B095;HENTAIGANA LETTER NE-4;Lo;0;L;;;;;N;;;;;\n1B096;HENTAIGANA LETTER NE-5;Lo;0;L;;;;;N;;;;;\n1B097;HENTAIGANA LETTER NE-6;Lo;0;L;;;;;N;;;;;\n1B098;HENTAIGANA LETTER NE-KO;Lo;0;L;;;;;N;;;;;\n1B099;HENTAIGANA LETTER NO-1;Lo;0;L;;;;;N;;;;;\n1B09A;HENTAIGANA LETTER NO-2;Lo;0;L;;;;;N;;;;;\n1B09B;HENTAIGANA LETTER NO-3;Lo;0;L;;;;;N;;;;;\n1B09C;HENTAIGANA LETTER NO-4;Lo;0;L;;;;;N;;;;;\n1B09D;HENTAIGANA LETTER NO-5;Lo;0;L;;;;;N;;;;;\n1B09E;HENTAIGANA LETTER HA-1;Lo;0;L;;;;;N;;;;;\n1B09F;HENTAIGANA LETTER HA-2;Lo;0;L;;;;;N;;;;;\n1B0A0;HENTAIGANA LETTER HA-3;Lo;0;L;;;;;N;;;;;\n1B0A1;HENTAIGANA LETTER HA-4;Lo;0;L;;;;;N;;;;;\n1B0A2;HENTAIGANA LETTER HA-5;Lo;0;L;;;;;N;;;;;\n1B0A3;HENTAIGANA LETTER HA-6;Lo;0;L;;;;;N;;;;;\n1B0A4;HENTAIGANA LETTER HA-7;Lo;0;L;;;;;N;;;;;\n1B0A5;HENTAIGANA LETTER HA-8;Lo;0;L;;;;;N;;;;;\n1B0A6;HENTAIGANA LETTER HA-9;Lo;0;L;;;;;N;;;;;\n1B0A7;HENTAIGANA LETTER HA-10;Lo;0;L;;;;;N;;;;;\n1B0A8;HENTAIGANA LETTER HA-11;Lo;0;L;;;;;N;;;;;\n1B0A9;HENTAIGANA LETTER HI-1;Lo;0;L;;;;;N;;;;;\n1B0AA;HENTAIGANA LETTER HI-2;Lo;0;L;;;;;N;;;;;\n1B0AB;HENTAIGANA LETTER HI-3;Lo;0;L;;;;;N;;;;;\n1B0AC;HENTAIGANA LETTER HI-4;Lo;0;L;;;;;N;;;;;\n1B0AD;HENTAIGANA LETTER HI-5;Lo;0;L;;;;;N;;;;;\n1B0AE;HENTAIGANA LETTER HI-6;Lo;0;L;;;;;N;;;;;\n1B0AF;HENTAIGANA LETTER HI-7;Lo;0;L;;;;;N;;;;;\n1B0B0;HENTAIGANA LETTER HU-1;Lo;0;L;;;;;N;;;;;\n1B0B1;HENTAIGANA LETTER HU-2;Lo;0;L;;;;;N;;;;;\n1B0B2;HENTAIGANA LETTER HU-3;Lo;0;L;;;;;N;;;;;\n1B0B3;HENTAIGANA LETTER HE-1;Lo;0;L;;;;;N;;;;;\n1B0B4;HENTAIGANA LETTER HE-2;Lo;0;L;;;;;N;;;;;\n1B0B5;HENTAIGANA LETTER HE-3;Lo;0;L;;;;;N;;;;;\n1B0B6;HENTAIGANA LETTER HE-4;Lo;0;L;;;;;N;;;;;\n1B0B7;HENTAIGANA LETTER HE-5;Lo;0;L;;;;;N;;;;;\n1B0B8;HENTAIGANA LETTER HE-6;Lo;0;L;;;;;N;;;;;\n1B0B9;HENTAIGANA LETTER HE-7;Lo;0;L;;;;;N;;;;;\n1B0BA;HENTAIGANA LETTER HO-1;Lo;0;L;;;;;N;;;;;\n1B0BB;HENTAIGANA LETTER HO-2;Lo;0;L;;;;;N;;;;;\n1B0BC;HENTAIGANA LETTER HO-3;Lo;0;L;;;;;N;;;;;\n1B0BD;HENTAIGANA LETTER HO-4;Lo;0;L;;;;;N;;;;;\n1B0BE;HENTAIGANA LETTER HO-5;Lo;0;L;;;;;N;;;;;\n1B0BF;HENTAIGANA LETTER HO-6;Lo;0;L;;;;;N;;;;;\n1B0C0;HENTAIGANA LETTER HO-7;Lo;0;L;;;;;N;;;;;\n1B0C1;HENTAIGANA LETTER HO-8;Lo;0;L;;;;;N;;;;;\n1B0C2;HENTAIGANA LETTER MA-1;Lo;0;L;;;;;N;;;;;\n1B0C3;HENTAIGANA LETTER MA-2;Lo;0;L;;;;;N;;;;;\n1B0C4;HENTAIGANA LETTER MA-3;Lo;0;L;;;;;N;;;;;\n1B0C5;HENTAIGANA LETTER MA-4;Lo;0;L;;;;;N;;;;;\n1B0C6;HENTAIGANA LETTER MA-5;Lo;0;L;;;;;N;;;;;\n1B0C7;HENTAIGANA LETTER MA-6;Lo;0;L;;;;;N;;;;;\n1B0C8;HENTAIGANA LETTER MA-7;Lo;0;L;;;;;N;;;;;\n1B0C9;HENTAIGANA LETTER MI-1;Lo;0;L;;;;;N;;;;;\n1B0CA;HENTAIGANA LETTER MI-2;Lo;0;L;;;;;N;;;;;\n1B0CB;HENTAIGANA LETTER MI-3;Lo;0;L;;;;;N;;;;;\n1B0CC;HENTAIGANA LETTER MI-4;Lo;0;L;;;;;N;;;;;\n1B0CD;HENTAIGANA LETTER MI-5;Lo;0;L;;;;;N;;;;;\n1B0CE;HENTAIGANA LETTER MI-6;Lo;0;L;;;;;N;;;;;\n1B0CF;HENTAIGANA LETTER MI-7;Lo;0;L;;;;;N;;;;;\n1B0D0;HENTAIGANA LETTER MU-1;Lo;0;L;;;;;N;;;;;\n1B0D1;HENTAIGANA LETTER MU-2;Lo;0;L;;;;;N;;;;;\n1B0D2;HENTAIGANA LETTER MU-3;Lo;0;L;;;;;N;;;;;\n1B0D3;HENTAIGANA LETTER MU-4;Lo;0;L;;;;;N;;;;;\n1B0D4;HENTAIGANA LETTER ME-1;Lo;0;L;;;;;N;;;;;\n1B0D5;HENTAIGANA LETTER ME-2;Lo;0;L;;;;;N;;;;;\n1B0D6;HENTAIGANA LETTER ME-MA;Lo;0;L;;;;;N;;;;;\n1B0D7;HENTAIGANA LETTER MO-1;Lo;0;L;;;;;N;;;;;\n1B0D8;HENTAIGANA LETTER MO-2;Lo;0;L;;;;;N;;;;;\n1B0D9;HENTAIGANA LETTER MO-3;Lo;0;L;;;;;N;;;;;\n1B0DA;HENTAIGANA LETTER MO-4;Lo;0;L;;;;;N;;;;;\n1B0DB;HENTAIGANA LETTER MO-5;Lo;0;L;;;;;N;;;;;\n1B0DC;HENTAIGANA LETTER MO-6;Lo;0;L;;;;;N;;;;;\n1B0DD;HENTAIGANA LETTER YA-1;Lo;0;L;;;;;N;;;;;\n1B0DE;HENTAIGANA LETTER YA-2;Lo;0;L;;;;;N;;;;;\n1B0DF;HENTAIGANA LETTER YA-3;Lo;0;L;;;;;N;;;;;\n1B0E0;HENTAIGANA LETTER YA-4;Lo;0;L;;;;;N;;;;;\n1B0E1;HENTAIGANA LETTER YA-5;Lo;0;L;;;;;N;;;;;\n1B0E2;HENTAIGANA LETTER YA-YO;Lo;0;L;;;;;N;;;;;\n1B0E3;HENTAIGANA LETTER YU-1;Lo;0;L;;;;;N;;;;;\n1B0E4;HENTAIGANA LETTER YU-2;Lo;0;L;;;;;N;;;;;\n1B0E5;HENTAIGANA LETTER YU-3;Lo;0;L;;;;;N;;;;;\n1B0E6;HENTAIGANA LETTER YU-4;Lo;0;L;;;;;N;;;;;\n1B0E7;HENTAIGANA LETTER YO-1;Lo;0;L;;;;;N;;;;;\n1B0E8;HENTAIGANA LETTER YO-2;Lo;0;L;;;;;N;;;;;\n1B0E9;HENTAIGANA LETTER YO-3;Lo;0;L;;;;;N;;;;;\n1B0EA;HENTAIGANA LETTER YO-4;Lo;0;L;;;;;N;;;;;\n1B0EB;HENTAIGANA LETTER YO-5;Lo;0;L;;;;;N;;;;;\n1B0EC;HENTAIGANA LETTER YO-6;Lo;0;L;;;;;N;;;;;\n1B0ED;HENTAIGANA LETTER RA-1;Lo;0;L;;;;;N;;;;;\n1B0EE;HENTAIGANA LETTER RA-2;Lo;0;L;;;;;N;;;;;\n1B0EF;HENTAIGANA LETTER RA-3;Lo;0;L;;;;;N;;;;;\n1B0F0;HENTAIGANA LETTER RA-4;Lo;0;L;;;;;N;;;;;\n1B0F1;HENTAIGANA LETTER RI-1;Lo;0;L;;;;;N;;;;;\n1B0F2;HENTAIGANA LETTER RI-2;Lo;0;L;;;;;N;;;;;\n1B0F3;HENTAIGANA LETTER RI-3;Lo;0;L;;;;;N;;;;;\n1B0F4;HENTAIGANA LETTER RI-4;Lo;0;L;;;;;N;;;;;\n1B0F5;HENTAIGANA LETTER RI-5;Lo;0;L;;;;;N;;;;;\n1B0F6;HENTAIGANA LETTER RI-6;Lo;0;L;;;;;N;;;;;\n1B0F7;HENTAIGANA LETTER RI-7;Lo;0;L;;;;;N;;;;;\n1B0F8;HENTAIGANA LETTER RU-1;Lo;0;L;;;;;N;;;;;\n1B0F9;HENTAIGANA LETTER RU-2;Lo;0;L;;;;;N;;;;;\n1B0FA;HENTAIGANA LETTER RU-3;Lo;0;L;;;;;N;;;;;\n1B0FB;HENTAIGANA LETTER RU-4;Lo;0;L;;;;;N;;;;;\n1B0FC;HENTAIGANA LETTER RU-5;Lo;0;L;;;;;N;;;;;\n1B0FD;HENTAIGANA LETTER RU-6;Lo;0;L;;;;;N;;;;;\n1B0FE;HENTAIGANA LETTER RE-1;Lo;0;L;;;;;N;;;;;\n1B0FF;HENTAIGANA LETTER RE-2;Lo;0;L;;;;;N;;;;;\n1B100;HENTAIGANA LETTER RE-3;Lo;0;L;;;;;N;;;;;\n1B101;HENTAIGANA LETTER RE-4;Lo;0;L;;;;;N;;;;;\n1B102;HENTAIGANA LETTER RO-1;Lo;0;L;;;;;N;;;;;\n1B103;HENTAIGANA LETTER RO-2;Lo;0;L;;;;;N;;;;;\n1B104;HENTAIGANA LETTER RO-3;Lo;0;L;;;;;N;;;;;\n1B105;HENTAIGANA LETTER RO-4;Lo;0;L;;;;;N;;;;;\n1B106;HENTAIGANA LETTER RO-5;Lo;0;L;;;;;N;;;;;\n1B107;HENTAIGANA LETTER RO-6;Lo;0;L;;;;;N;;;;;\n1B108;HENTAIGANA LETTER WA-1;Lo;0;L;;;;;N;;;;;\n1B109;HENTAIGANA LETTER WA-2;Lo;0;L;;;;;N;;;;;\n1B10A;HENTAIGANA LETTER WA-3;Lo;0;L;;;;;N;;;;;\n1B10B;HENTAIGANA LETTER WA-4;Lo;0;L;;;;;N;;;;;\n1B10C;HENTAIGANA LETTER WA-5;Lo;0;L;;;;;N;;;;;\n1B10D;HENTAIGANA LETTER WI-1;Lo;0;L;;;;;N;;;;;\n1B10E;HENTAIGANA LETTER WI-2;Lo;0;L;;;;;N;;;;;\n1B10F;HENTAIGANA LETTER WI-3;Lo;0;L;;;;;N;;;;;\n1B110;HENTAIGANA LETTER WI-4;Lo;0;L;;;;;N;;;;;\n1B111;HENTAIGANA LETTER WI-5;Lo;0;L;;;;;N;;;;;\n1B112;HENTAIGANA LETTER WE-1;Lo;0;L;;;;;N;;;;;\n1B113;HENTAIGANA LETTER WE-2;Lo;0;L;;;;;N;;;;;\n1B114;HENTAIGANA LETTER WE-3;Lo;0;L;;;;;N;;;;;\n1B115;HENTAIGANA LETTER WE-4;Lo;0;L;;;;;N;;;;;\n1B116;HENTAIGANA LETTER WO-1;Lo;0;L;;;;;N;;;;;\n1B117;HENTAIGANA LETTER WO-2;Lo;0;L;;;;;N;;;;;\n1B118;HENTAIGANA LETTER WO-3;Lo;0;L;;;;;N;;;;;\n1B119;HENTAIGANA LETTER WO-4;Lo;0;L;;;;;N;;;;;\n1B11A;HENTAIGANA LETTER WO-5;Lo;0;L;;;;;N;;;;;\n1B11B;HENTAIGANA LETTER WO-6;Lo;0;L;;;;;N;;;;;\n1B11C;HENTAIGANA LETTER WO-7;Lo;0;L;;;;;N;;;;;\n1B11D;HENTAIGANA LETTER N-MU-MO-1;Lo;0;L;;;;;N;;;;;\n1B11E;HENTAIGANA LETTER N-MU-MO-2;Lo;0;L;;;;;N;;;;;\n1B11F;HIRAGANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;;\n1B120;KATAKANA LETTER ARCHAIC YI;Lo;0;L;;;;;N;;;;;\n1B121;KATAKANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;\n1B122;KATAKANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;;\n1B132;HIRAGANA LETTER SMALL KO;Lo;0;L;;;;;N;;;;;\n1B150;HIRAGANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;;\n1B151;HIRAGANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;;\n1B152;HIRAGANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;;\n1B155;KATAKANA LETTER SMALL KO;Lo;0;L;;;;;N;;;;;\n1B164;KATAKANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;;\n1B165;KATAKANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;;\n1B166;KATAKANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;;\n1B167;KATAKANA LETTER SMALL N;Lo;0;L;;;;;N;;;;;\n1B170;NUSHU CHARACTER-1B170;Lo;0;L;;;;;N;;;;;\n1B171;NUSHU CHARACTER-1B171;Lo;0;L;;;;;N;;;;;\n1B172;NUSHU CHARACTER-1B172;Lo;0;L;;;;;N;;;;;\n1B173;NUSHU CHARACTER-1B173;Lo;0;L;;;;;N;;;;;\n1B174;NUSHU CHARACTER-1B174;Lo;0;L;;;;;N;;;;;\n1B175;NUSHU CHARACTER-1B175;Lo;0;L;;;;;N;;;;;\n1B176;NUSHU CHARACTER-1B176;Lo;0;L;;;;;N;;;;;\n1B177;NUSHU CHARACTER-1B177;Lo;0;L;;;;;N;;;;;\n1B178;NUSHU CHARACTER-1B178;Lo;0;L;;;;;N;;;;;\n1B179;NUSHU CHARACTER-1B179;Lo;0;L;;;;;N;;;;;\n1B17A;NUSHU CHARACTER-1B17A;Lo;0;L;;;;;N;;;;;\n1B17B;NUSHU CHARACTER-1B17B;Lo;0;L;;;;;N;;;;;\n1B17C;NUSHU CHARACTER-1B17C;Lo;0;L;;;;;N;;;;;\n1B17D;NUSHU CHARACTER-1B17D;Lo;0;L;;;;;N;;;;;\n1B17E;NUSHU CHARACTER-1B17E;Lo;0;L;;;;;N;;;;;\n1B17F;NUSHU CHARACTER-1B17F;Lo;0;L;;;;;N;;;;;\n1B180;NUSHU CHARACTER-1B180;Lo;0;L;;;;;N;;;;;\n1B181;NUSHU CHARACTER-1B181;Lo;0;L;;;;;N;;;;;\n1B182;NUSHU CHARACTER-1B182;Lo;0;L;;;;;N;;;;;\n1B183;NUSHU CHARACTER-1B183;Lo;0;L;;;;;N;;;;;\n1B184;NUSHU CHARACTER-1B184;Lo;0;L;;;;;N;;;;;\n1B185;NUSHU CHARACTER-1B185;Lo;0;L;;;;;N;;;;;\n1B186;NUSHU CHARACTER-1B186;Lo;0;L;;;;;N;;;;;\n1B187;NUSHU CHARACTER-1B187;Lo;0;L;;;;;N;;;;;\n1B188;NUSHU CHARACTER-1B188;Lo;0;L;;;;;N;;;;;\n1B189;NUSHU CHARACTER-1B189;Lo;0;L;;;;;N;;;;;\n1B18A;NUSHU CHARACTER-1B18A;Lo;0;L;;;;;N;;;;;\n1B18B;NUSHU CHARACTER-1B18B;Lo;0;L;;;;;N;;;;;\n1B18C;NUSHU CHARACTER-1B18C;Lo;0;L;;;;;N;;;;;\n1B18D;NUSHU CHARACTER-1B18D;Lo;0;L;;;;;N;;;;;\n1B18E;NUSHU CHARACTER-1B18E;Lo;0;L;;;;;N;;;;;\n1B18F;NUSHU CHARACTER-1B18F;Lo;0;L;;;;;N;;;;;\n1B190;NUSHU CHARACTER-1B190;Lo;0;L;;;;;N;;;;;\n1B191;NUSHU CHARACTER-1B191;Lo;0;L;;;;;N;;;;;\n1B192;NUSHU CHARACTER-1B192;Lo;0;L;;;;;N;;;;;\n1B193;NUSHU CHARACTER-1B193;Lo;0;L;;;;;N;;;;;\n1B194;NUSHU CHARACTER-1B194;Lo;0;L;;;;;N;;;;;\n1B195;NUSHU CHARACTER-1B195;Lo;0;L;;;;;N;;;;;\n1B196;NUSHU CHARACTER-1B196;Lo;0;L;;;;;N;;;;;\n1B197;NUSHU CHARACTER-1B197;Lo;0;L;;;;;N;;;;;\n1B198;NUSHU CHARACTER-1B198;Lo;0;L;;;;;N;;;;;\n1B199;NUSHU CHARACTER-1B199;Lo;0;L;;;;;N;;;;;\n1B19A;NUSHU CHARACTER-1B19A;Lo;0;L;;;;;N;;;;;\n1B19B;NUSHU CHARACTER-1B19B;Lo;0;L;;;;;N;;;;;\n1B19C;NUSHU CHARACTER-1B19C;Lo;0;L;;;;;N;;;;;\n1B19D;NUSHU CHARACTER-1B19D;Lo;0;L;;;;;N;;;;;\n1B19E;NUSHU CHARACTER-1B19E;Lo;0;L;;;;;N;;;;;\n1B19F;NUSHU CHARACTER-1B19F;Lo;0;L;;;;;N;;;;;\n1B1A0;NUSHU CHARACTER-1B1A0;Lo;0;L;;;;;N;;;;;\n1B1A1;NUSHU CHARACTER-1B1A1;Lo;0;L;;;;;N;;;;;\n1B1A2;NUSHU CHARACTER-1B1A2;Lo;0;L;;;;;N;;;;;\n1B1A3;NUSHU CHARACTER-1B1A3;Lo;0;L;;;;;N;;;;;\n1B1A4;NUSHU CHARACTER-1B1A4;Lo;0;L;;;;;N;;;;;\n1B1A5;NUSHU CHARACTER-1B1A5;Lo;0;L;;;;;N;;;;;\n1B1A6;NUSHU CHARACTER-1B1A6;Lo;0;L;;;;;N;;;;;\n1B1A7;NUSHU CHARACTER-1B1A7;Lo;0;L;;;;;N;;;;;\n1B1A8;NUSHU CHARACTER-1B1A8;Lo;0;L;;;;;N;;;;;\n1B1A9;NUSHU CHARACTER-1B1A9;Lo;0;L;;;;;N;;;;;\n1B1AA;NUSHU CHARACTER-1B1AA;Lo;0;L;;;;;N;;;;;\n1B1AB;NUSHU CHARACTER-1B1AB;Lo;0;L;;;;;N;;;;;\n1B1AC;NUSHU CHARACTER-1B1AC;Lo;0;L;;;;;N;;;;;\n1B1AD;NUSHU CHARACTER-1B1AD;Lo;0;L;;;;;N;;;;;\n1B1AE;NUSHU CHARACTER-1B1AE;Lo;0;L;;;;;N;;;;;\n1B1AF;NUSHU CHARACTER-1B1AF;Lo;0;L;;;;;N;;;;;\n1B1B0;NUSHU CHARACTER-1B1B0;Lo;0;L;;;;;N;;;;;\n1B1B1;NUSHU CHARACTER-1B1B1;Lo;0;L;;;;;N;;;;;\n1B1B2;NUSHU CHARACTER-1B1B2;Lo;0;L;;;;;N;;;;;\n1B1B3;NUSHU CHARACTER-1B1B3;Lo;0;L;;;;;N;;;;;\n1B1B4;NUSHU CHARACTER-1B1B4;Lo;0;L;;;;;N;;;;;\n1B1B5;NUSHU CHARACTER-1B1B5;Lo;0;L;;;;;N;;;;;\n1B1B6;NUSHU CHARACTER-1B1B6;Lo;0;L;;;;;N;;;;;\n1B1B7;NUSHU CHARACTER-1B1B7;Lo;0;L;;;;;N;;;;;\n1B1B8;NUSHU CHARACTER-1B1B8;Lo;0;L;;;;;N;;;;;\n1B1B9;NUSHU CHARACTER-1B1B9;Lo;0;L;;;;;N;;;;;\n1B1BA;NUSHU CHARACTER-1B1BA;Lo;0;L;;;;;N;;;;;\n1B1BB;NUSHU CHARACTER-1B1BB;Lo;0;L;;;;;N;;;;;\n1B1BC;NUSHU CHARACTER-1B1BC;Lo;0;L;;;;;N;;;;;\n1B1BD;NUSHU CHARACTER-1B1BD;Lo;0;L;;;;;N;;;;;\n1B1BE;NUSHU CHARACTER-1B1BE;Lo;0;L;;;;;N;;;;;\n1B1BF;NUSHU CHARACTER-1B1BF;Lo;0;L;;;;;N;;;;;\n1B1C0;NUSHU CHARACTER-1B1C0;Lo;0;L;;;;;N;;;;;\n1B1C1;NUSHU CHARACTER-1B1C1;Lo;0;L;;;;;N;;;;;\n1B1C2;NUSHU CHARACTER-1B1C2;Lo;0;L;;;;;N;;;;;\n1B1C3;NUSHU CHARACTER-1B1C3;Lo;0;L;;;;;N;;;;;\n1B1C4;NUSHU CHARACTER-1B1C4;Lo;0;L;;;;;N;;;;;\n1B1C5;NUSHU CHARACTER-1B1C5;Lo;0;L;;;;;N;;;;;\n1B1C6;NUSHU CHARACTER-1B1C6;Lo;0;L;;;;;N;;;;;\n1B1C7;NUSHU CHARACTER-1B1C7;Lo;0;L;;;;;N;;;;;\n1B1C8;NUSHU CHARACTER-1B1C8;Lo;0;L;;;;;N;;;;;\n1B1C9;NUSHU CHARACTER-1B1C9;Lo;0;L;;;;;N;;;;;\n1B1CA;NUSHU CHARACTER-1B1CA;Lo;0;L;;;;;N;;;;;\n1B1CB;NUSHU CHARACTER-1B1CB;Lo;0;L;;;;;N;;;;;\n1B1CC;NUSHU CHARACTER-1B1CC;Lo;0;L;;;;;N;;;;;\n1B1CD;NUSHU CHARACTER-1B1CD;Lo;0;L;;;;;N;;;;;\n1B1CE;NUSHU CHARACTER-1B1CE;Lo;0;L;;;;;N;;;;;\n1B1CF;NUSHU CHARACTER-1B1CF;Lo;0;L;;;;;N;;;;;\n1B1D0;NUSHU CHARACTER-1B1D0;Lo;0;L;;;;;N;;;;;\n1B1D1;NUSHU CHARACTER-1B1D1;Lo;0;L;;;;;N;;;;;\n1B1D2;NUSHU CHARACTER-1B1D2;Lo;0;L;;;;;N;;;;;\n1B1D3;NUSHU CHARACTER-1B1D3;Lo;0;L;;;;;N;;;;;\n1B1D4;NUSHU CHARACTER-1B1D4;Lo;0;L;;;;;N;;;;;\n1B1D5;NUSHU CHARACTER-1B1D5;Lo;0;L;;;;;N;;;;;\n1B1D6;NUSHU CHARACTER-1B1D6;Lo;0;L;;;;;N;;;;;\n1B1D7;NUSHU CHARACTER-1B1D7;Lo;0;L;;;;;N;;;;;\n1B1D8;NUSHU CHARACTER-1B1D8;Lo;0;L;;;;;N;;;;;\n1B1D9;NUSHU CHARACTER-1B1D9;Lo;0;L;;;;;N;;;;;\n1B1DA;NUSHU CHARACTER-1B1DA;Lo;0;L;;;;;N;;;;;\n1B1DB;NUSHU CHARACTER-1B1DB;Lo;0;L;;;;;N;;;;;\n1B1DC;NUSHU CHARACTER-1B1DC;Lo;0;L;;;;;N;;;;;\n1B1DD;NUSHU CHARACTER-1B1DD;Lo;0;L;;;;;N;;;;;\n1B1DE;NUSHU CHARACTER-1B1DE;Lo;0;L;;;;;N;;;;;\n1B1DF;NUSHU CHARACTER-1B1DF;Lo;0;L;;;;;N;;;;;\n1B1E0;NUSHU CHARACTER-1B1E0;Lo;0;L;;;;;N;;;;;\n1B1E1;NUSHU CHARACTER-1B1E1;Lo;0;L;;;;;N;;;;;\n1B1E2;NUSHU CHARACTER-1B1E2;Lo;0;L;;;;;N;;;;;\n1B1E3;NUSHU CHARACTER-1B1E3;Lo;0;L;;;;;N;;;;;\n1B1E4;NUSHU CHARACTER-1B1E4;Lo;0;L;;;;;N;;;;;\n1B1E5;NUSHU CHARACTER-1B1E5;Lo;0;L;;;;;N;;;;;\n1B1E6;NUSHU CHARACTER-1B1E6;Lo;0;L;;;;;N;;;;;\n1B1E7;NUSHU CHARACTER-1B1E7;Lo;0;L;;;;;N;;;;;\n1B1E8;NUSHU CHARACTER-1B1E8;Lo;0;L;;;;;N;;;;;\n1B1E9;NUSHU CHARACTER-1B1E9;Lo;0;L;;;;;N;;;;;\n1B1EA;NUSHU CHARACTER-1B1EA;Lo;0;L;;;;;N;;;;;\n1B1EB;NUSHU CHARACTER-1B1EB;Lo;0;L;;;;;N;;;;;\n1B1EC;NUSHU CHARACTER-1B1EC;Lo;0;L;;;;;N;;;;;\n1B1ED;NUSHU CHARACTER-1B1ED;Lo;0;L;;;;;N;;;;;\n1B1EE;NUSHU CHARACTER-1B1EE;Lo;0;L;;;;;N;;;;;\n1B1EF;NUSHU CHARACTER-1B1EF;Lo;0;L;;;;;N;;;;;\n1B1F0;NUSHU CHARACTER-1B1F0;Lo;0;L;;;;;N;;;;;\n1B1F1;NUSHU CHARACTER-1B1F1;Lo;0;L;;;;;N;;;;;\n1B1F2;NUSHU CHARACTER-1B1F2;Lo;0;L;;;;;N;;;;;\n1B1F3;NUSHU CHARACTER-1B1F3;Lo;0;L;;;;;N;;;;;\n1B1F4;NUSHU CHARACTER-1B1F4;Lo;0;L;;;;;N;;;;;\n1B1F5;NUSHU CHARACTER-1B1F5;Lo;0;L;;;;;N;;;;;\n1B1F6;NUSHU CHARACTER-1B1F6;Lo;0;L;;;;;N;;;;;\n1B1F7;NUSHU CHARACTER-1B1F7;Lo;0;L;;;;;N;;;;;\n1B1F8;NUSHU CHARACTER-1B1F8;Lo;0;L;;;;;N;;;;;\n1B1F9;NUSHU CHARACTER-1B1F9;Lo;0;L;;;;;N;;;;;\n1B1FA;NUSHU CHARACTER-1B1FA;Lo;0;L;;;;;N;;;;;\n1B1FB;NUSHU CHARACTER-1B1FB;Lo;0;L;;;;;N;;;;;\n1B1FC;NUSHU CHARACTER-1B1FC;Lo;0;L;;;;;N;;;;;\n1B1FD;NUSHU CHARACTER-1B1FD;Lo;0;L;;;;;N;;;;;\n1B1FE;NUSHU CHARACTER-1B1FE;Lo;0;L;;;;;N;;;;;\n1B1FF;NUSHU CHARACTER-1B1FF;Lo;0;L;;;;;N;;;;;\n1B200;NUSHU CHARACTER-1B200;Lo;0;L;;;;;N;;;;;\n1B201;NUSHU CHARACTER-1B201;Lo;0;L;;;;;N;;;;;\n1B202;NUSHU CHARACTER-1B202;Lo;0;L;;;;;N;;;;;\n1B203;NUSHU CHARACTER-1B203;Lo;0;L;;;;;N;;;;;\n1B204;NUSHU CHARACTER-1B204;Lo;0;L;;;;;N;;;;;\n1B205;NUSHU CHARACTER-1B205;Lo;0;L;;;;;N;;;;;\n1B206;NUSHU CHARACTER-1B206;Lo;0;L;;;;;N;;;;;\n1B207;NUSHU CHARACTER-1B207;Lo;0;L;;;;;N;;;;;\n1B208;NUSHU CHARACTER-1B208;Lo;0;L;;;;;N;;;;;\n1B209;NUSHU CHARACTER-1B209;Lo;0;L;;;;;N;;;;;\n1B20A;NUSHU CHARACTER-1B20A;Lo;0;L;;;;;N;;;;;\n1B20B;NUSHU CHARACTER-1B20B;Lo;0;L;;;;;N;;;;;\n1B20C;NUSHU CHARACTER-1B20C;Lo;0;L;;;;;N;;;;;\n1B20D;NUSHU CHARACTER-1B20D;Lo;0;L;;;;;N;;;;;\n1B20E;NUSHU CHARACTER-1B20E;Lo;0;L;;;;;N;;;;;\n1B20F;NUSHU CHARACTER-1B20F;Lo;0;L;;;;;N;;;;;\n1B210;NUSHU CHARACTER-1B210;Lo;0;L;;;;;N;;;;;\n1B211;NUSHU CHARACTER-1B211;Lo;0;L;;;;;N;;;;;\n1B212;NUSHU CHARACTER-1B212;Lo;0;L;;;;;N;;;;;\n1B213;NUSHU CHARACTER-1B213;Lo;0;L;;;;;N;;;;;\n1B214;NUSHU CHARACTER-1B214;Lo;0;L;;;;;N;;;;;\n1B215;NUSHU CHARACTER-1B215;Lo;0;L;;;;;N;;;;;\n1B216;NUSHU CHARACTER-1B216;Lo;0;L;;;;;N;;;;;\n1B217;NUSHU CHARACTER-1B217;Lo;0;L;;;;;N;;;;;\n1B218;NUSHU CHARACTER-1B218;Lo;0;L;;;;;N;;;;;\n1B219;NUSHU CHARACTER-1B219;Lo;0;L;;;;;N;;;;;\n1B21A;NUSHU CHARACTER-1B21A;Lo;0;L;;;;;N;;;;;\n1B21B;NUSHU CHARACTER-1B21B;Lo;0;L;;;;;N;;;;;\n1B21C;NUSHU CHARACTER-1B21C;Lo;0;L;;;;;N;;;;;\n1B21D;NUSHU CHARACTER-1B21D;Lo;0;L;;;;;N;;;;;\n1B21E;NUSHU CHARACTER-1B21E;Lo;0;L;;;;;N;;;;;\n1B21F;NUSHU CHARACTER-1B21F;Lo;0;L;;;;;N;;;;;\n1B220;NUSHU CHARACTER-1B220;Lo;0;L;;;;;N;;;;;\n1B221;NUSHU CHARACTER-1B221;Lo;0;L;;;;;N;;;;;\n1B222;NUSHU CHARACTER-1B222;Lo;0;L;;;;;N;;;;;\n1B223;NUSHU CHARACTER-1B223;Lo;0;L;;;;;N;;;;;\n1B224;NUSHU CHARACTER-1B224;Lo;0;L;;;;;N;;;;;\n1B225;NUSHU CHARACTER-1B225;Lo;0;L;;;;;N;;;;;\n1B226;NUSHU CHARACTER-1B226;Lo;0;L;;;;;N;;;;;\n1B227;NUSHU CHARACTER-1B227;Lo;0;L;;;;;N;;;;;\n1B228;NUSHU CHARACTER-1B228;Lo;0;L;;;;;N;;;;;\n1B229;NUSHU CHARACTER-1B229;Lo;0;L;;;;;N;;;;;\n1B22A;NUSHU CHARACTER-1B22A;Lo;0;L;;;;;N;;;;;\n1B22B;NUSHU CHARACTER-1B22B;Lo;0;L;;;;;N;;;;;\n1B22C;NUSHU CHARACTER-1B22C;Lo;0;L;;;;;N;;;;;\n1B22D;NUSHU CHARACTER-1B22D;Lo;0;L;;;;;N;;;;;\n1B22E;NUSHU CHARACTER-1B22E;Lo;0;L;;;;;N;;;;;\n1B22F;NUSHU CHARACTER-1B22F;Lo;0;L;;;;;N;;;;;\n1B230;NUSHU CHARACTER-1B230;Lo;0;L;;;;;N;;;;;\n1B231;NUSHU CHARACTER-1B231;Lo;0;L;;;;;N;;;;;\n1B232;NUSHU CHARACTER-1B232;Lo;0;L;;;;;N;;;;;\n1B233;NUSHU CHARACTER-1B233;Lo;0;L;;;;;N;;;;;\n1B234;NUSHU CHARACTER-1B234;Lo;0;L;;;;;N;;;;;\n1B235;NUSHU CHARACTER-1B235;Lo;0;L;;;;;N;;;;;\n1B236;NUSHU CHARACTER-1B236;Lo;0;L;;;;;N;;;;;\n1B237;NUSHU CHARACTER-1B237;Lo;0;L;;;;;N;;;;;\n1B238;NUSHU CHARACTER-1B238;Lo;0;L;;;;;N;;;;;\n1B239;NUSHU CHARACTER-1B239;Lo;0;L;;;;;N;;;;;\n1B23A;NUSHU CHARACTER-1B23A;Lo;0;L;;;;;N;;;;;\n1B23B;NUSHU CHARACTER-1B23B;Lo;0;L;;;;;N;;;;;\n1B23C;NUSHU CHARACTER-1B23C;Lo;0;L;;;;;N;;;;;\n1B23D;NUSHU CHARACTER-1B23D;Lo;0;L;;;;;N;;;;;\n1B23E;NUSHU CHARACTER-1B23E;Lo;0;L;;;;;N;;;;;\n1B23F;NUSHU CHARACTER-1B23F;Lo;0;L;;;;;N;;;;;\n1B240;NUSHU CHARACTER-1B240;Lo;0;L;;;;;N;;;;;\n1B241;NUSHU CHARACTER-1B241;Lo;0;L;;;;;N;;;;;\n1B242;NUSHU CHARACTER-1B242;Lo;0;L;;;;;N;;;;;\n1B243;NUSHU CHARACTER-1B243;Lo;0;L;;;;;N;;;;;\n1B244;NUSHU CHARACTER-1B244;Lo;0;L;;;;;N;;;;;\n1B245;NUSHU CHARACTER-1B245;Lo;0;L;;;;;N;;;;;\n1B246;NUSHU CHARACTER-1B246;Lo;0;L;;;;;N;;;;;\n1B247;NUSHU CHARACTER-1B247;Lo;0;L;;;;;N;;;;;\n1B248;NUSHU CHARACTER-1B248;Lo;0;L;;;;;N;;;;;\n1B249;NUSHU CHARACTER-1B249;Lo;0;L;;;;;N;;;;;\n1B24A;NUSHU CHARACTER-1B24A;Lo;0;L;;;;;N;;;;;\n1B24B;NUSHU CHARACTER-1B24B;Lo;0;L;;;;;N;;;;;\n1B24C;NUSHU CHARACTER-1B24C;Lo;0;L;;;;;N;;;;;\n1B24D;NUSHU CHARACTER-1B24D;Lo;0;L;;;;;N;;;;;\n1B24E;NUSHU CHARACTER-1B24E;Lo;0;L;;;;;N;;;;;\n1B24F;NUSHU CHARACTER-1B24F;Lo;0;L;;;;;N;;;;;\n1B250;NUSHU CHARACTER-1B250;Lo;0;L;;;;;N;;;;;\n1B251;NUSHU CHARACTER-1B251;Lo;0;L;;;;;N;;;;;\n1B252;NUSHU CHARACTER-1B252;Lo;0;L;;;;;N;;;;;\n1B253;NUSHU CHARACTER-1B253;Lo;0;L;;;;;N;;;;;\n1B254;NUSHU CHARACTER-1B254;Lo;0;L;;;;;N;;;;;\n1B255;NUSHU CHARACTER-1B255;Lo;0;L;;;;;N;;;;;\n1B256;NUSHU CHARACTER-1B256;Lo;0;L;;;;;N;;;;;\n1B257;NUSHU CHARACTER-1B257;Lo;0;L;;;;;N;;;;;\n1B258;NUSHU CHARACTER-1B258;Lo;0;L;;;;;N;;;;;\n1B259;NUSHU CHARACTER-1B259;Lo;0;L;;;;;N;;;;;\n1B25A;NUSHU CHARACTER-1B25A;Lo;0;L;;;;;N;;;;;\n1B25B;NUSHU CHARACTER-1B25B;Lo;0;L;;;;;N;;;;;\n1B25C;NUSHU CHARACTER-1B25C;Lo;0;L;;;;;N;;;;;\n1B25D;NUSHU CHARACTER-1B25D;Lo;0;L;;;;;N;;;;;\n1B25E;NUSHU CHARACTER-1B25E;Lo;0;L;;;;;N;;;;;\n1B25F;NUSHU CHARACTER-1B25F;Lo;0;L;;;;;N;;;;;\n1B260;NUSHU CHARACTER-1B260;Lo;0;L;;;;;N;;;;;\n1B261;NUSHU CHARACTER-1B261;Lo;0;L;;;;;N;;;;;\n1B262;NUSHU CHARACTER-1B262;Lo;0;L;;;;;N;;;;;\n1B263;NUSHU CHARACTER-1B263;Lo;0;L;;;;;N;;;;;\n1B264;NUSHU CHARACTER-1B264;Lo;0;L;;;;;N;;;;;\n1B265;NUSHU CHARACTER-1B265;Lo;0;L;;;;;N;;;;;\n1B266;NUSHU CHARACTER-1B266;Lo;0;L;;;;;N;;;;;\n1B267;NUSHU CHARACTER-1B267;Lo;0;L;;;;;N;;;;;\n1B268;NUSHU CHARACTER-1B268;Lo;0;L;;;;;N;;;;;\n1B269;NUSHU CHARACTER-1B269;Lo;0;L;;;;;N;;;;;\n1B26A;NUSHU CHARACTER-1B26A;Lo;0;L;;;;;N;;;;;\n1B26B;NUSHU CHARACTER-1B26B;Lo;0;L;;;;;N;;;;;\n1B26C;NUSHU CHARACTER-1B26C;Lo;0;L;;;;;N;;;;;\n1B26D;NUSHU CHARACTER-1B26D;Lo;0;L;;;;;N;;;;;\n1B26E;NUSHU CHARACTER-1B26E;Lo;0;L;;;;;N;;;;;\n1B26F;NUSHU CHARACTER-1B26F;Lo;0;L;;;;;N;;;;;\n1B270;NUSHU CHARACTER-1B270;Lo;0;L;;;;;N;;;;;\n1B271;NUSHU CHARACTER-1B271;Lo;0;L;;;;;N;;;;;\n1B272;NUSHU CHARACTER-1B272;Lo;0;L;;;;;N;;;;;\n1B273;NUSHU CHARACTER-1B273;Lo;0;L;;;;;N;;;;;\n1B274;NUSHU CHARACTER-1B274;Lo;0;L;;;;;N;;;;;\n1B275;NUSHU CHARACTER-1B275;Lo;0;L;;;;;N;;;;;\n1B276;NUSHU CHARACTER-1B276;Lo;0;L;;;;;N;;;;;\n1B277;NUSHU CHARACTER-1B277;Lo;0;L;;;;;N;;;;;\n1B278;NUSHU CHARACTER-1B278;Lo;0;L;;;;;N;;;;;\n1B279;NUSHU CHARACTER-1B279;Lo;0;L;;;;;N;;;;;\n1B27A;NUSHU CHARACTER-1B27A;Lo;0;L;;;;;N;;;;;\n1B27B;NUSHU CHARACTER-1B27B;Lo;0;L;;;;;N;;;;;\n1B27C;NUSHU CHARACTER-1B27C;Lo;0;L;;;;;N;;;;;\n1B27D;NUSHU CHARACTER-1B27D;Lo;0;L;;;;;N;;;;;\n1B27E;NUSHU CHARACTER-1B27E;Lo;0;L;;;;;N;;;;;\n1B27F;NUSHU CHARACTER-1B27F;Lo;0;L;;;;;N;;;;;\n1B280;NUSHU CHARACTER-1B280;Lo;0;L;;;;;N;;;;;\n1B281;NUSHU CHARACTER-1B281;Lo;0;L;;;;;N;;;;;\n1B282;NUSHU CHARACTER-1B282;Lo;0;L;;;;;N;;;;;\n1B283;NUSHU CHARACTER-1B283;Lo;0;L;;;;;N;;;;;\n1B284;NUSHU CHARACTER-1B284;Lo;0;L;;;;;N;;;;;\n1B285;NUSHU CHARACTER-1B285;Lo;0;L;;;;;N;;;;;\n1B286;NUSHU CHARACTER-1B286;Lo;0;L;;;;;N;;;;;\n1B287;NUSHU CHARACTER-1B287;Lo;0;L;;;;;N;;;;;\n1B288;NUSHU CHARACTER-1B288;Lo;0;L;;;;;N;;;;;\n1B289;NUSHU CHARACTER-1B289;Lo;0;L;;;;;N;;;;;\n1B28A;NUSHU CHARACTER-1B28A;Lo;0;L;;;;;N;;;;;\n1B28B;NUSHU CHARACTER-1B28B;Lo;0;L;;;;;N;;;;;\n1B28C;NUSHU CHARACTER-1B28C;Lo;0;L;;;;;N;;;;;\n1B28D;NUSHU CHARACTER-1B28D;Lo;0;L;;;;;N;;;;;\n1B28E;NUSHU CHARACTER-1B28E;Lo;0;L;;;;;N;;;;;\n1B28F;NUSHU CHARACTER-1B28F;Lo;0;L;;;;;N;;;;;\n1B290;NUSHU CHARACTER-1B290;Lo;0;L;;;;;N;;;;;\n1B291;NUSHU CHARACTER-1B291;Lo;0;L;;;;;N;;;;;\n1B292;NUSHU CHARACTER-1B292;Lo;0;L;;;;;N;;;;;\n1B293;NUSHU CHARACTER-1B293;Lo;0;L;;;;;N;;;;;\n1B294;NUSHU CHARACTER-1B294;Lo;0;L;;;;;N;;;;;\n1B295;NUSHU CHARACTER-1B295;Lo;0;L;;;;;N;;;;;\n1B296;NUSHU CHARACTER-1B296;Lo;0;L;;;;;N;;;;;\n1B297;NUSHU CHARACTER-1B297;Lo;0;L;;;;;N;;;;;\n1B298;NUSHU CHARACTER-1B298;Lo;0;L;;;;;N;;;;;\n1B299;NUSHU CHARACTER-1B299;Lo;0;L;;;;;N;;;;;\n1B29A;NUSHU CHARACTER-1B29A;Lo;0;L;;;;;N;;;;;\n1B29B;NUSHU CHARACTER-1B29B;Lo;0;L;;;;;N;;;;;\n1B29C;NUSHU CHARACTER-1B29C;Lo;0;L;;;;;N;;;;;\n1B29D;NUSHU CHARACTER-1B29D;Lo;0;L;;;;;N;;;;;\n1B29E;NUSHU CHARACTER-1B29E;Lo;0;L;;;;;N;;;;;\n1B29F;NUSHU CHARACTER-1B29F;Lo;0;L;;;;;N;;;;;\n1B2A0;NUSHU CHARACTER-1B2A0;Lo;0;L;;;;;N;;;;;\n1B2A1;NUSHU CHARACTER-1B2A1;Lo;0;L;;;;;N;;;;;\n1B2A2;NUSHU CHARACTER-1B2A2;Lo;0;L;;;;;N;;;;;\n1B2A3;NUSHU CHARACTER-1B2A3;Lo;0;L;;;;;N;;;;;\n1B2A4;NUSHU CHARACTER-1B2A4;Lo;0;L;;;;;N;;;;;\n1B2A5;NUSHU CHARACTER-1B2A5;Lo;0;L;;;;;N;;;;;\n1B2A6;NUSHU CHARACTER-1B2A6;Lo;0;L;;;;;N;;;;;\n1B2A7;NUSHU CHARACTER-1B2A7;Lo;0;L;;;;;N;;;;;\n1B2A8;NUSHU CHARACTER-1B2A8;Lo;0;L;;;;;N;;;;;\n1B2A9;NUSHU CHARACTER-1B2A9;Lo;0;L;;;;;N;;;;;\n1B2AA;NUSHU CHARACTER-1B2AA;Lo;0;L;;;;;N;;;;;\n1B2AB;NUSHU CHARACTER-1B2AB;Lo;0;L;;;;;N;;;;;\n1B2AC;NUSHU CHARACTER-1B2AC;Lo;0;L;;;;;N;;;;;\n1B2AD;NUSHU CHARACTER-1B2AD;Lo;0;L;;;;;N;;;;;\n1B2AE;NUSHU CHARACTER-1B2AE;Lo;0;L;;;;;N;;;;;\n1B2AF;NUSHU CHARACTER-1B2AF;Lo;0;L;;;;;N;;;;;\n1B2B0;NUSHU CHARACTER-1B2B0;Lo;0;L;;;;;N;;;;;\n1B2B1;NUSHU CHARACTER-1B2B1;Lo;0;L;;;;;N;;;;;\n1B2B2;NUSHU CHARACTER-1B2B2;Lo;0;L;;;;;N;;;;;\n1B2B3;NUSHU CHARACTER-1B2B3;Lo;0;L;;;;;N;;;;;\n1B2B4;NUSHU CHARACTER-1B2B4;Lo;0;L;;;;;N;;;;;\n1B2B5;NUSHU CHARACTER-1B2B5;Lo;0;L;;;;;N;;;;;\n1B2B6;NUSHU CHARACTER-1B2B6;Lo;0;L;;;;;N;;;;;\n1B2B7;NUSHU CHARACTER-1B2B7;Lo;0;L;;;;;N;;;;;\n1B2B8;NUSHU CHARACTER-1B2B8;Lo;0;L;;;;;N;;;;;\n1B2B9;NUSHU CHARACTER-1B2B9;Lo;0;L;;;;;N;;;;;\n1B2BA;NUSHU CHARACTER-1B2BA;Lo;0;L;;;;;N;;;;;\n1B2BB;NUSHU CHARACTER-1B2BB;Lo;0;L;;;;;N;;;;;\n1B2BC;NUSHU CHARACTER-1B2BC;Lo;0;L;;;;;N;;;;;\n1B2BD;NUSHU CHARACTER-1B2BD;Lo;0;L;;;;;N;;;;;\n1B2BE;NUSHU CHARACTER-1B2BE;Lo;0;L;;;;;N;;;;;\n1B2BF;NUSHU CHARACTER-1B2BF;Lo;0;L;;;;;N;;;;;\n1B2C0;NUSHU CHARACTER-1B2C0;Lo;0;L;;;;;N;;;;;\n1B2C1;NUSHU CHARACTER-1B2C1;Lo;0;L;;;;;N;;;;;\n1B2C2;NUSHU CHARACTER-1B2C2;Lo;0;L;;;;;N;;;;;\n1B2C3;NUSHU CHARACTER-1B2C3;Lo;0;L;;;;;N;;;;;\n1B2C4;NUSHU CHARACTER-1B2C4;Lo;0;L;;;;;N;;;;;\n1B2C5;NUSHU CHARACTER-1B2C5;Lo;0;L;;;;;N;;;;;\n1B2C6;NUSHU CHARACTER-1B2C6;Lo;0;L;;;;;N;;;;;\n1B2C7;NUSHU CHARACTER-1B2C7;Lo;0;L;;;;;N;;;;;\n1B2C8;NUSHU CHARACTER-1B2C8;Lo;0;L;;;;;N;;;;;\n1B2C9;NUSHU CHARACTER-1B2C9;Lo;0;L;;;;;N;;;;;\n1B2CA;NUSHU CHARACTER-1B2CA;Lo;0;L;;;;;N;;;;;\n1B2CB;NUSHU CHARACTER-1B2CB;Lo;0;L;;;;;N;;;;;\n1B2CC;NUSHU CHARACTER-1B2CC;Lo;0;L;;;;;N;;;;;\n1B2CD;NUSHU CHARACTER-1B2CD;Lo;0;L;;;;;N;;;;;\n1B2CE;NUSHU CHARACTER-1B2CE;Lo;0;L;;;;;N;;;;;\n1B2CF;NUSHU CHARACTER-1B2CF;Lo;0;L;;;;;N;;;;;\n1B2D0;NUSHU CHARACTER-1B2D0;Lo;0;L;;;;;N;;;;;\n1B2D1;NUSHU CHARACTER-1B2D1;Lo;0;L;;;;;N;;;;;\n1B2D2;NUSHU CHARACTER-1B2D2;Lo;0;L;;;;;N;;;;;\n1B2D3;NUSHU CHARACTER-1B2D3;Lo;0;L;;;;;N;;;;;\n1B2D4;NUSHU CHARACTER-1B2D4;Lo;0;L;;;;;N;;;;;\n1B2D5;NUSHU CHARACTER-1B2D5;Lo;0;L;;;;;N;;;;;\n1B2D6;NUSHU CHARACTER-1B2D6;Lo;0;L;;;;;N;;;;;\n1B2D7;NUSHU CHARACTER-1B2D7;Lo;0;L;;;;;N;;;;;\n1B2D8;NUSHU CHARACTER-1B2D8;Lo;0;L;;;;;N;;;;;\n1B2D9;NUSHU CHARACTER-1B2D9;Lo;0;L;;;;;N;;;;;\n1B2DA;NUSHU CHARACTER-1B2DA;Lo;0;L;;;;;N;;;;;\n1B2DB;NUSHU CHARACTER-1B2DB;Lo;0;L;;;;;N;;;;;\n1B2DC;NUSHU CHARACTER-1B2DC;Lo;0;L;;;;;N;;;;;\n1B2DD;NUSHU CHARACTER-1B2DD;Lo;0;L;;;;;N;;;;;\n1B2DE;NUSHU CHARACTER-1B2DE;Lo;0;L;;;;;N;;;;;\n1B2DF;NUSHU CHARACTER-1B2DF;Lo;0;L;;;;;N;;;;;\n1B2E0;NUSHU CHARACTER-1B2E0;Lo;0;L;;;;;N;;;;;\n1B2E1;NUSHU CHARACTER-1B2E1;Lo;0;L;;;;;N;;;;;\n1B2E2;NUSHU CHARACTER-1B2E2;Lo;0;L;;;;;N;;;;;\n1B2E3;NUSHU CHARACTER-1B2E3;Lo;0;L;;;;;N;;;;;\n1B2E4;NUSHU CHARACTER-1B2E4;Lo;0;L;;;;;N;;;;;\n1B2E5;NUSHU CHARACTER-1B2E5;Lo;0;L;;;;;N;;;;;\n1B2E6;NUSHU CHARACTER-1B2E6;Lo;0;L;;;;;N;;;;;\n1B2E7;NUSHU CHARACTER-1B2E7;Lo;0;L;;;;;N;;;;;\n1B2E8;NUSHU CHARACTER-1B2E8;Lo;0;L;;;;;N;;;;;\n1B2E9;NUSHU CHARACTER-1B2E9;Lo;0;L;;;;;N;;;;;\n1B2EA;NUSHU CHARACTER-1B2EA;Lo;0;L;;;;;N;;;;;\n1B2EB;NUSHU CHARACTER-1B2EB;Lo;0;L;;;;;N;;;;;\n1B2EC;NUSHU CHARACTER-1B2EC;Lo;0;L;;;;;N;;;;;\n1B2ED;NUSHU CHARACTER-1B2ED;Lo;0;L;;;;;N;;;;;\n1B2EE;NUSHU CHARACTER-1B2EE;Lo;0;L;;;;;N;;;;;\n1B2EF;NUSHU CHARACTER-1B2EF;Lo;0;L;;;;;N;;;;;\n1B2F0;NUSHU CHARACTER-1B2F0;Lo;0;L;;;;;N;;;;;\n1B2F1;NUSHU CHARACTER-1B2F1;Lo;0;L;;;;;N;;;;;\n1B2F2;NUSHU CHARACTER-1B2F2;Lo;0;L;;;;;N;;;;;\n1B2F3;NUSHU CHARACTER-1B2F3;Lo;0;L;;;;;N;;;;;\n1B2F4;NUSHU CHARACTER-1B2F4;Lo;0;L;;;;;N;;;;;\n1B2F5;NUSHU CHARACTER-1B2F5;Lo;0;L;;;;;N;;;;;\n1B2F6;NUSHU CHARACTER-1B2F6;Lo;0;L;;;;;N;;;;;\n1B2F7;NUSHU CHARACTER-1B2F7;Lo;0;L;;;;;N;;;;;\n1B2F8;NUSHU CHARACTER-1B2F8;Lo;0;L;;;;;N;;;;;\n1B2F9;NUSHU CHARACTER-1B2F9;Lo;0;L;;;;;N;;;;;\n1B2FA;NUSHU CHARACTER-1B2FA;Lo;0;L;;;;;N;;;;;\n1B2FB;NUSHU CHARACTER-1B2FB;Lo;0;L;;;;;N;;;;;\n1BC00;DUPLOYAN LETTER H;Lo;0;L;;;;;N;;;;;\n1BC01;DUPLOYAN LETTER X;Lo;0;L;;;;;N;;;;;\n1BC02;DUPLOYAN LETTER P;Lo;0;L;;;;;N;;;;;\n1BC03;DUPLOYAN LETTER T;Lo;0;L;;;;;N;;;;;\n1BC04;DUPLOYAN LETTER F;Lo;0;L;;;;;N;;;;;\n1BC05;DUPLOYAN LETTER K;Lo;0;L;;;;;N;;;;;\n1BC06;DUPLOYAN LETTER L;Lo;0;L;;;;;N;;;;;\n1BC07;DUPLOYAN LETTER B;Lo;0;L;;;;;N;;;;;\n1BC08;DUPLOYAN LETTER D;Lo;0;L;;;;;N;;;;;\n1BC09;DUPLOYAN LETTER V;Lo;0;L;;;;;N;;;;;\n1BC0A;DUPLOYAN LETTER G;Lo;0;L;;;;;N;;;;;\n1BC0B;DUPLOYAN LETTER R;Lo;0;L;;;;;N;;;;;\n1BC0C;DUPLOYAN LETTER P N;Lo;0;L;;;;;N;;;;;\n1BC0D;DUPLOYAN LETTER D S;Lo;0;L;;;;;N;;;;;\n1BC0E;DUPLOYAN LETTER F N;Lo;0;L;;;;;N;;;;;\n1BC0F;DUPLOYAN LETTER K M;Lo;0;L;;;;;N;;;;;\n1BC10;DUPLOYAN LETTER R S;Lo;0;L;;;;;N;;;;;\n1BC11;DUPLOYAN LETTER TH;Lo;0;L;;;;;N;;;;;\n1BC12;DUPLOYAN LETTER SLOAN DH;Lo;0;L;;;;;N;;;;;\n1BC13;DUPLOYAN LETTER DH;Lo;0;L;;;;;N;;;;;\n1BC14;DUPLOYAN LETTER KK;Lo;0;L;;;;;N;;;;;\n1BC15;DUPLOYAN LETTER SLOAN J;Lo;0;L;;;;;N;;;;;\n1BC16;DUPLOYAN LETTER HL;Lo;0;L;;;;;N;;;;;\n1BC17;DUPLOYAN LETTER LH;Lo;0;L;;;;;N;;;;;\n1BC18;DUPLOYAN LETTER RH;Lo;0;L;;;;;N;;;;;\n1BC19;DUPLOYAN LETTER M;Lo;0;L;;;;;N;;;;;\n1BC1A;DUPLOYAN LETTER N;Lo;0;L;;;;;N;;;;;\n1BC1B;DUPLOYAN LETTER J;Lo;0;L;;;;;N;;;;;\n1BC1C;DUPLOYAN LETTER S;Lo;0;L;;;;;N;;;;;\n1BC1D;DUPLOYAN LETTER M N;Lo;0;L;;;;;N;;;;;\n1BC1E;DUPLOYAN LETTER N M;Lo;0;L;;;;;N;;;;;\n1BC1F;DUPLOYAN LETTER J M;Lo;0;L;;;;;N;;;;;\n1BC20;DUPLOYAN LETTER S J;Lo;0;L;;;;;N;;;;;\n1BC21;DUPLOYAN LETTER M WITH DOT;Lo;0;L;;;;;N;;;;;\n1BC22;DUPLOYAN LETTER N WITH DOT;Lo;0;L;;;;;N;;;;;\n1BC23;DUPLOYAN LETTER J WITH DOT;Lo;0;L;;;;;N;;;;;\n1BC24;DUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVE;Lo;0;L;;;;;N;;;;;\n1BC25;DUPLOYAN LETTER S WITH DOT;Lo;0;L;;;;;N;;;;;\n1BC26;DUPLOYAN LETTER S WITH DOT BELOW;Lo;0;L;;;;;N;;;;;\n1BC27;DUPLOYAN LETTER M S;Lo;0;L;;;;;N;;;;;\n1BC28;DUPLOYAN LETTER N S;Lo;0;L;;;;;N;;;;;\n1BC29;DUPLOYAN LETTER J S;Lo;0;L;;;;;N;;;;;\n1BC2A;DUPLOYAN LETTER S S;Lo;0;L;;;;;N;;;;;\n1BC2B;DUPLOYAN LETTER M N S;Lo;0;L;;;;;N;;;;;\n1BC2C;DUPLOYAN LETTER N M S;Lo;0;L;;;;;N;;;;;\n1BC2D;DUPLOYAN LETTER J M S;Lo;0;L;;;;;N;;;;;\n1BC2E;DUPLOYAN LETTER S J S;Lo;0;L;;;;;N;;;;;\n1BC2F;DUPLOYAN LETTER J S WITH DOT;Lo;0;L;;;;;N;;;;;\n1BC30;DUPLOYAN LETTER J N;Lo;0;L;;;;;N;;;;;\n1BC31;DUPLOYAN LETTER J N S;Lo;0;L;;;;;N;;;;;\n1BC32;DUPLOYAN LETTER S T;Lo;0;L;;;;;N;;;;;\n1BC33;DUPLOYAN LETTER S T R;Lo;0;L;;;;;N;;;;;\n1BC34;DUPLOYAN LETTER S P;Lo;0;L;;;;;N;;;;;\n1BC35;DUPLOYAN LETTER S P R;Lo;0;L;;;;;N;;;;;\n1BC36;DUPLOYAN LETTER T S;Lo;0;L;;;;;N;;;;;\n1BC37;DUPLOYAN LETTER T R S;Lo;0;L;;;;;N;;;;;\n1BC38;DUPLOYAN LETTER W;Lo;0;L;;;;;N;;;;;\n1BC39;DUPLOYAN LETTER WH;Lo;0;L;;;;;N;;;;;\n1BC3A;DUPLOYAN LETTER W R;Lo;0;L;;;;;N;;;;;\n1BC3B;DUPLOYAN LETTER S N;Lo;0;L;;;;;N;;;;;\n1BC3C;DUPLOYAN LETTER S M;Lo;0;L;;;;;N;;;;;\n1BC3D;DUPLOYAN LETTER K R S;Lo;0;L;;;;;N;;;;;\n1BC3E;DUPLOYAN LETTER G R S;Lo;0;L;;;;;N;;;;;\n1BC3F;DUPLOYAN LETTER S K;Lo;0;L;;;;;N;;;;;\n1BC40;DUPLOYAN LETTER S K R;Lo;0;L;;;;;N;;;;;\n1BC41;DUPLOYAN LETTER A;Lo;0;L;;;;;N;;;;;\n1BC42;DUPLOYAN LETTER SLOAN OW;Lo;0;L;;;;;N;;;;;\n1BC43;DUPLOYAN LETTER OA;Lo;0;L;;;;;N;;;;;\n1BC44;DUPLOYAN LETTER O;Lo;0;L;;;;;N;;;;;\n1BC45;DUPLOYAN LETTER AOU;Lo;0;L;;;;;N;;;;;\n1BC46;DUPLOYAN LETTER I;Lo;0;L;;;;;N;;;;;\n1BC47;DUPLOYAN LETTER E;Lo;0;L;;;;;N;;;;;\n1BC48;DUPLOYAN LETTER IE;Lo;0;L;;;;;N;;;;;\n1BC49;DUPLOYAN LETTER SHORT I;Lo;0;L;;;;;N;;;;;\n1BC4A;DUPLOYAN LETTER UI;Lo;0;L;;;;;N;;;;;\n1BC4B;DUPLOYAN LETTER EE;Lo;0;L;;;;;N;;;;;\n1BC4C;DUPLOYAN LETTER SLOAN EH;Lo;0;L;;;;;N;;;;;\n1BC4D;DUPLOYAN LETTER ROMANIAN I;Lo;0;L;;;;;N;;;;;\n1BC4E;DUPLOYAN LETTER SLOAN EE;Lo;0;L;;;;;N;;;;;\n1BC4F;DUPLOYAN LETTER LONG I;Lo;0;L;;;;;N;;;;;\n1BC50;DUPLOYAN LETTER YE;Lo;0;L;;;;;N;;;;;\n1BC51;DUPLOYAN LETTER U;Lo;0;L;;;;;N;;;;;\n1BC52;DUPLOYAN LETTER EU;Lo;0;L;;;;;N;;;;;\n1BC53;DUPLOYAN LETTER XW;Lo;0;L;;;;;N;;;;;\n1BC54;DUPLOYAN LETTER U N;Lo;0;L;;;;;N;;;;;\n1BC55;DUPLOYAN LETTER LONG U;Lo;0;L;;;;;N;;;;;\n1BC56;DUPLOYAN LETTER ROMANIAN U;Lo;0;L;;;;;N;;;;;\n1BC57;DUPLOYAN LETTER UH;Lo;0;L;;;;;N;;;;;\n1BC58;DUPLOYAN LETTER SLOAN U;Lo;0;L;;;;;N;;;;;\n1BC59;DUPLOYAN LETTER OOH;Lo;0;L;;;;;N;;;;;\n1BC5A;DUPLOYAN LETTER OW;Lo;0;L;;;;;N;;;;;\n1BC5B;DUPLOYAN LETTER OU;Lo;0;L;;;;;N;;;;;\n1BC5C;DUPLOYAN LETTER WA;Lo;0;L;;;;;N;;;;;\n1BC5D;DUPLOYAN LETTER WO;Lo;0;L;;;;;N;;;;;\n1BC5E;DUPLOYAN LETTER WI;Lo;0;L;;;;;N;;;;;\n1BC5F;DUPLOYAN LETTER WEI;Lo;0;L;;;;;N;;;;;\n1BC60;DUPLOYAN LETTER WOW;Lo;0;L;;;;;N;;;;;\n1BC61;DUPLOYAN LETTER NASAL U;Lo;0;L;;;;;N;;;;;\n1BC62;DUPLOYAN LETTER NASAL O;Lo;0;L;;;;;N;;;;;\n1BC63;DUPLOYAN LETTER NASAL I;Lo;0;L;;;;;N;;;;;\n1BC64;DUPLOYAN LETTER NASAL A;Lo;0;L;;;;;N;;;;;\n1BC65;DUPLOYAN LETTER PERNIN AN;Lo;0;L;;;;;N;;;;;\n1BC66;DUPLOYAN LETTER PERNIN AM;Lo;0;L;;;;;N;;;;;\n1BC67;DUPLOYAN LETTER SLOAN EN;Lo;0;L;;;;;N;;;;;\n1BC68;DUPLOYAN LETTER SLOAN AN;Lo;0;L;;;;;N;;;;;\n1BC69;DUPLOYAN LETTER SLOAN ON;Lo;0;L;;;;;N;;;;;\n1BC6A;DUPLOYAN LETTER VOCALIC M;Lo;0;L;;;;;N;;;;;\n1BC70;DUPLOYAN AFFIX LEFT HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;;\n1BC71;DUPLOYAN AFFIX MID HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;;\n1BC72;DUPLOYAN AFFIX RIGHT HORIZONTAL SECANT;Lo;0;L;;;;;N;;;;;\n1BC73;DUPLOYAN AFFIX LOW VERTICAL SECANT;Lo;0;L;;;;;N;;;;;\n1BC74;DUPLOYAN AFFIX MID VERTICAL SECANT;Lo;0;L;;;;;N;;;;;\n1BC75;DUPLOYAN AFFIX HIGH VERTICAL SECANT;Lo;0;L;;;;;N;;;;;\n1BC76;DUPLOYAN AFFIX ATTACHED SECANT;Lo;0;L;;;;;N;;;;;\n1BC77;DUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANT;Lo;0;L;;;;;N;;;;;\n1BC78;DUPLOYAN AFFIX ATTACHED TANGENT;Lo;0;L;;;;;N;;;;;\n1BC79;DUPLOYAN AFFIX ATTACHED TAIL;Lo;0;L;;;;;N;;;;;\n1BC7A;DUPLOYAN AFFIX ATTACHED E HOOK;Lo;0;L;;;;;N;;;;;\n1BC7B;DUPLOYAN AFFIX ATTACHED I HOOK;Lo;0;L;;;;;N;;;;;\n1BC7C;DUPLOYAN AFFIX ATTACHED TANGENT HOOK;Lo;0;L;;;;;N;;;;;\n1BC80;DUPLOYAN AFFIX HIGH ACUTE;Lo;0;L;;;;;N;;;;;\n1BC81;DUPLOYAN AFFIX HIGH TIGHT ACUTE;Lo;0;L;;;;;N;;;;;\n1BC82;DUPLOYAN AFFIX HIGH GRAVE;Lo;0;L;;;;;N;;;;;\n1BC83;DUPLOYAN AFFIX HIGH LONG GRAVE;Lo;0;L;;;;;N;;;;;\n1BC84;DUPLOYAN AFFIX HIGH DOT;Lo;0;L;;;;;N;;;;;\n1BC85;DUPLOYAN AFFIX HIGH CIRCLE;Lo;0;L;;;;;N;;;;;\n1BC86;DUPLOYAN AFFIX HIGH LINE;Lo;0;L;;;;;N;;;;;\n1BC87;DUPLOYAN AFFIX HIGH WAVE;Lo;0;L;;;;;N;;;;;\n1BC88;DUPLOYAN AFFIX HIGH VERTICAL;Lo;0;L;;;;;N;;;;;\n1BC90;DUPLOYAN AFFIX LOW ACUTE;Lo;0;L;;;;;N;;;;;\n1BC91;DUPLOYAN AFFIX LOW TIGHT ACUTE;Lo;0;L;;;;;N;;;;;\n1BC92;DUPLOYAN AFFIX LOW GRAVE;Lo;0;L;;;;;N;;;;;\n1BC93;DUPLOYAN AFFIX LOW LONG GRAVE;Lo;0;L;;;;;N;;;;;\n1BC94;DUPLOYAN AFFIX LOW DOT;Lo;0;L;;;;;N;;;;;\n1BC95;DUPLOYAN AFFIX LOW CIRCLE;Lo;0;L;;;;;N;;;;;\n1BC96;DUPLOYAN AFFIX LOW LINE;Lo;0;L;;;;;N;;;;;\n1BC97;DUPLOYAN AFFIX LOW WAVE;Lo;0;L;;;;;N;;;;;\n1BC98;DUPLOYAN AFFIX LOW VERTICAL;Lo;0;L;;;;;N;;;;;\n1BC99;DUPLOYAN AFFIX LOW ARROW;Lo;0;L;;;;;N;;;;;\n1BC9C;DUPLOYAN SIGN O WITH CROSS;So;0;L;;;;;N;;;;;\n1BC9D;DUPLOYAN THICK LETTER SELECTOR;Mn;0;NSM;;;;;N;;;;;\n1BC9E;DUPLOYAN DOUBLE MARK;Mn;1;NSM;;;;;N;;;;;\n1BC9F;DUPLOYAN PUNCTUATION CHINOOK FULL STOP;Po;0;L;;;;;N;;;;;\n1BCA0;SHORTHAND FORMAT LETTER OVERLAP;Cf;0;BN;;;;;N;;;;;\n1BCA1;SHORTHAND FORMAT CONTINUING OVERLAP;Cf;0;BN;;;;;N;;;;;\n1BCA2;SHORTHAND FORMAT DOWN STEP;Cf;0;BN;;;;;N;;;;;\n1BCA3;SHORTHAND FORMAT UP STEP;Cf;0;BN;;;;;N;;;;;\n1CC00;UP-POINTING GO-KART;So;0;ON;;;;;N;;;;;\n1CC01;RIGHT-POINTING GO-KART;So;0;ON;;;;;N;;;;;\n1CC02;LEFT-POINTING STICK FIGURE;So;0;ON;;;;;N;;;;;\n1CC03;RIGHT-POINTING STICK FIGURE;So;0;ON;;;;;N;;;;;\n1CC04;DOWN-POINTING STICK FIGURE;So;0;ON;;;;;N;;;;;\n1CC05;LOWER HORIZONTAL RULER SEGMENT;So;0;ON;;;;;N;;;;;\n1CC06;RIGHT VERTICAL RULER SEGMENT;So;0;ON;;;;;N;;;;;\n1CC07;LOWER RIGHT RULER SEGMENT;So;0;ON;;;;;N;;;;;\n1CC08;ANTENNA;So;0;ON;;;;;N;;;;;\n1CC09;HORIZONTAL RESISTOR SEGMENT;So;0;ON;;;;;N;;;;;\n1CC0A;VERTICAL RESISTOR SEGMENT;So;0;ON;;;;;N;;;;;\n1CC0B;LEFT THIRD INDUCTOR;So;0;ON;;;;;N;;;;;\n1CC0C;MIDDLE THIRD INDUCTOR;So;0;ON;;;;;N;;;;;\n1CC0D;RIGHT THIRD INDUCTOR;So;0;ON;;;;;N;;;;;\n1CC0E;LEFT-POINTING DIODE;So;0;ON;;;;;N;;;;;\n1CC0F;RIGHT-POINTING DIODE;So;0;ON;;;;;N;;;;;\n1CC10;NPN TRANSISTOR;So;0;ON;;;;;N;;;;;\n1CC11;PNP TRANSISTOR;So;0;ON;;;;;N;;;;;\n1CC12;RECEPTACLE;So;0;ON;;;;;N;;;;;\n1CC13;HORIZONTAL CAPACITOR;So;0;ON;;;;;N;;;;;\n1CC14;VERTICAL CAPACITOR;So;0;ON;;;;;N;;;;;\n1CC15;LOGIC GATE OR;So;0;ON;;;;;N;;;;;\n1CC16;LOGIC GATE AND;So;0;ON;;;;;N;;;;;\n1CC17;LOGIC GATE INVERTED INPUTS;So;0;ON;;;;;N;;;;;\n1CC18;LOGIC GATE INVERTED OUTPUT;So;0;ON;;;;;N;;;;;\n1CC19;LOGIC GATE BUFFER;So;0;ON;;;;;N;;;;;\n1CC1A;LOGIC GATE BUFFER WITH INVERTED INPUT;So;0;ON;;;;;N;;;;;\n1CC1B;BOX DRAWINGS LIGHT HORIZONTAL AND UPPER RIGHT;So;0;ON;;;;;N;;;;;\n1CC1C;BOX DRAWINGS LIGHT HORIZONTAL AND LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1CC1D;BOX DRAWINGS LIGHT TOP AND UPPER LEFT;So;0;ON;;;;;N;;;;;\n1CC1E;BOX DRAWINGS LIGHT BOTTOM AND LOWER LEFT;So;0;ON;;;;;N;;;;;\n1CC1F;BOX DRAWINGS DOUBLE DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;;;;;\n1CC20;BOX DRAWINGS DOUBLE DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1CC21;SEPARATED BLOCK QUADRANT-1;So;0;ON;;;;;N;;;;;\n1CC22;SEPARATED BLOCK QUADRANT-2;So;0;ON;;;;;N;;;;;\n1CC23;SEPARATED BLOCK QUADRANT-12;So;0;ON;;;;;N;;;;;\n1CC24;SEPARATED BLOCK QUADRANT-3;So;0;ON;;;;;N;;;;;\n1CC25;SEPARATED BLOCK QUADRANT-13;So;0;ON;;;;;N;;;;;\n1CC26;SEPARATED BLOCK QUADRANT-23;So;0;ON;;;;;N;;;;;\n1CC27;SEPARATED BLOCK QUADRANT-123;So;0;ON;;;;;N;;;;;\n1CC28;SEPARATED BLOCK QUADRANT-4;So;0;ON;;;;;N;;;;;\n1CC29;SEPARATED BLOCK QUADRANT-14;So;0;ON;;;;;N;;;;;\n1CC2A;SEPARATED BLOCK QUADRANT-24;So;0;ON;;;;;N;;;;;\n1CC2B;SEPARATED BLOCK QUADRANT-124;So;0;ON;;;;;N;;;;;\n1CC2C;SEPARATED BLOCK QUADRANT-34;So;0;ON;;;;;N;;;;;\n1CC2D;SEPARATED BLOCK QUADRANT-134;So;0;ON;;;;;N;;;;;\n1CC2E;SEPARATED BLOCK QUADRANT-234;So;0;ON;;;;;N;;;;;\n1CC2F;SEPARATED BLOCK QUADRANT-1234;So;0;ON;;;;;N;;;;;\n1CC30;UPPER LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;;\n1CC31;UPPER CENTRE LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;;\n1CC32;UPPER CENTRE RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;;\n1CC33;UPPER RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;;\n1CC34;UPPER MIDDLE LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;;\n1CC35;UPPER LEFT QUARTER CIRCLE;So;0;ON;;;;;N;;;;;\n1CC36;UPPER RIGHT QUARTER CIRCLE;So;0;ON;;;;;N;;;;;\n1CC37;UPPER MIDDLE RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;;\n1CC38;LOWER MIDDLE LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;;\n1CC39;LOWER LEFT QUARTER CIRCLE;So;0;ON;;;;;N;;;;;\n1CC3A;LOWER RIGHT QUARTER CIRCLE;So;0;ON;;;;;N;;;;;\n1CC3B;LOWER MIDDLE RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;;\n1CC3C;LOWER LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;;\n1CC3D;LOWER CENTRE LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;;\n1CC3E;LOWER CENTRE RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;;\n1CC3F;LOWER RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;;\n1CC40;SPARSE HORIZONTAL FILL;So;0;ON;;;;;N;;;;;\n1CC41;SPARSE VERTICAL FILL;So;0;ON;;;;;N;;;;;\n1CC42;ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;\n1CC43;DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;\n1CC44;DENSE VERTICAL FILL;So;0;ON;;;;;N;;;;;\n1CC45;DENSE HORIZONTAL FILL;So;0;ON;;;;;N;;;;;\n1CC46;SPECKLE FILL FRAME-1;So;0;ON;;;;;N;;;;;\n1CC47;SPECKLE FILL FRAME-2;So;0;ON;;;;;N;;;;;\n1CC48;LEFT-FACING BASSINET;So;0;ON;;;;;N;;;;;\n1CC49;RIGHT-FACING BASSINET;So;0;ON;;;;;N;;;;;\n1CC4A;FLYING SAUCER WITH BEAMS;So;0;ON;;;;;N;;;;;\n1CC4B;FLYING SAUCER WITHOUT BEAMS;So;0;ON;;;;;N;;;;;\n1CC4C;ALIEN MONSTER OPEN JAWS;So;0;ON;;;;;N;;;;;\n1CC4D;ALIEN MONSTER CLOSED JAWS;So;0;ON;;;;;N;;;;;\n1CC4E;ALIEN SQUID OPEN TENTACLES;So;0;ON;;;;;N;;;;;\n1CC4F;ALIEN SQUID CLOSED TENTACLES;So;0;ON;;;;;N;;;;;\n1CC50;ALIEN CRAB STEPPING RIGHT;So;0;ON;;;;;N;;;;;\n1CC51;ALIEN CRAB STEPPING LEFT;So;0;ON;;;;;N;;;;;\n1CC52;ALIEN SPIDER CROUCHING;So;0;ON;;;;;N;;;;;\n1CC53;ALIEN SPIDER SPREAD;So;0;ON;;;;;N;;;;;\n1CC54;ALIEN MONSTER STEP-1;So;0;ON;;;;;N;;;;;\n1CC55;ALIEN MONSTER STEP-2;So;0;ON;;;;;N;;;;;\n1CC56;LEFT-POINTING ROCKET SHIP;So;0;ON;;;;;N;;;;;\n1CC57;UP-POINTING ROCKET SHIP;So;0;ON;;;;;N;;;;;\n1CC58;RIGHT-POINTING ROCKET SHIP;So;0;ON;;;;;N;;;;;\n1CC59;DOWN-POINTING ROCKET SHIP;So;0;ON;;;;;N;;;;;\n1CC5A;TOP HALF LEFT-FACING ROBOT;So;0;ON;;;;;N;;;;;\n1CC5B;TOP HALF FORWARD-FACING ROBOT;So;0;ON;;;;;N;;;;;\n1CC5C;TOP HALF RIGHT-FACING ROBOT;So;0;ON;;;;;N;;;;;\n1CC5D;BOTTOM HALF LEFT-FACING ROBOT;So;0;ON;;;;;N;;;;;\n1CC5E;BOTTOM HALF FORWARD-FACING ROBOT;So;0;ON;;;;;N;;;;;\n1CC5F;BOTTOM HALF RIGHT-FACING ROBOT;So;0;ON;;;;;N;;;;;\n1CC60;LEFT-POINTING ATOMIC BOMB;So;0;ON;;;;;N;;;;;\n1CC61;UP-POINTING ATOMIC BOMB;So;0;ON;;;;;N;;;;;\n1CC62;RIGHT-POINTING ATOMIC BOMB;So;0;ON;;;;;N;;;;;\n1CC63;DOWN-POINTING ATOMIC BOMB;So;0;ON;;;;;N;;;;;\n1CC64;MUSHROOM CLOUD;So;0;ON;;;;;N;;;;;\n1CC65;LEFT-POINTING RIFLE;So;0;ON;;;;;N;;;;;\n1CC66;UP-POINTING RIFLE;So;0;ON;;;;;N;;;;;\n1CC67;RIGHT-POINTING RIFLE;So;0;ON;;;;;N;;;;;\n1CC68;DOWN-POINTING RIFLE;So;0;ON;;;;;N;;;;;\n1CC69;EIGHT RAYS INWARD;So;0;ON;;;;;N;;;;;\n1CC6A;EIGHT RAYS OUTWARD;So;0;ON;;;;;N;;;;;\n1CC6B;BLACK LARGE CIRCLE MINUS LEFT QUARTER SECTION;So;0;ON;;;;;N;;;;;\n1CC6C;BLACK LARGE CIRCLE MINUS UPPER QUARTER SECTION;So;0;ON;;;;;N;;;;;\n1CC6D;BLACK LARGE CIRCLE MINUS RIGHT QUARTER SECTION;So;0;ON;;;;;N;;;;;\n1CC6E;BLACK LARGE CIRCLE MINUS LOWER QUARTER SECTION;So;0;ON;;;;;N;;;;;\n1CC6F;BLACK NEUTRAL FACE;So;0;ON;;;;;N;;;;;\n1CC70;LEFT-FACING SNAKE HEAD WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;\n1CC71;UP-FACING SNAKE HEAD WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;\n1CC72;RIGHT-FACING SNAKE HEAD WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;\n1CC73;DOWN-FACING SNAKE HEAD WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;\n1CC74;LEFT-FACING SNAKE HEAD WITH CLOSED MOUTH;So;0;ON;;;;;N;;;;;\n1CC75;UP-FACING SNAKE HEAD WITH CLOSED MOUTH;So;0;ON;;;;;N;;;;;\n1CC76;RIGHT-FACING SNAKE HEAD WITH CLOSED MOUTH;So;0;ON;;;;;N;;;;;\n1CC77;DOWN-FACING SNAKE HEAD WITH CLOSED MOUTH;So;0;ON;;;;;N;;;;;\n1CC78;LEFT-POINTING ENERGY WAVE;So;0;ON;;;;;N;;;;;\n1CC79;UP-POINTING ENERGY WAVE;So;0;ON;;;;;N;;;;;\n1CC7A;RIGHT-POINTING ENERGY WAVE;So;0;ON;;;;;N;;;;;\n1CC7B;DOWN-POINTING ENERGY WAVE;So;0;ON;;;;;N;;;;;\n1CC7C;SQUARE SPIRAL FROM TOP LEFT;So;0;ON;;;;;N;;;;;\n1CC7D;SQUARE SPIRAL FROM TOP RIGHT;So;0;ON;;;;;N;;;;;\n1CC7E;SQUARE SPIRAL FROM BOTTOM RIGHT;So;0;ON;;;;;N;;;;;\n1CC7F;SQUARE SPIRAL FROM BOTTOM LEFT;So;0;ON;;;;;N;;;;;\n1CC80;STRIPED LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;\n1CC81;STRIPED UP-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;\n1CC82;STRIPED RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;\n1CC83;STRIPED DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;;\n1CC84;VERTICAL LADDER;So;0;ON;;;;;N;;;;;\n1CC85;HORIZONTAL LADDER;So;0;ON;;;;;N;;;;;\n1CC86;WHITE LOWER LEFT POINTER;So;0;ON;;;;;N;;;;;\n1CC87;WHITE LOWER RIGHT POINTER;So;0;ON;;;;;N;;;;;\n1CC88;TWO RINGS ALIGNED HORIZONTALLY;So;0;ON;;;;;N;;;;;\n1CC89;SQUARE FOUR CORNER SALTIRES;So;0;ON;;;;;N;;;;;\n1CC8A;SQUARE FOUR CORNER DIAGONALS;So;0;ON;;;;;N;;;;;\n1CC8B;SQUARE FOUR CORNER BLACK TRIANGLES;So;0;ON;;;;;N;;;;;\n1CC8C;SQUARE APERTURE;So;0;ON;;;;;N;;;;;\n1CC8D;INVERSE BLACK DIAMOND;So;0;ON;;;;;N;;;;;\n1CC8E;LEFT AND UPPER ONE EIGHTH BLOCK CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;\n1CC8F;INVERSE BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;\n1CC90;VERTICAL LINE WITH FOUR TICK MARKS;So;0;ON;;;;;N;;;;;\n1CC91;HORIZONTAL LINE WITH FOUR TICK MARKS;So;0;ON;;;;;N;;;;;\n1CC92;LEFT-FACING FISH;So;0;ON;;;;;N;;;;;\n1CC93;RIGHT-FACING FISH;So;0;ON;;;;;N;;;;;\n1CC94;LEFT-FACING FISH WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;\n1CC95;RIGHT-FACING FISH WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;\n1CC96;FLAPPING BIRD;So;0;ON;;;;;N;;;;;\n1CC97;LEFT-POINTING RACING CAR;So;0;ON;;;;;N;;;;;\n1CC98;UP-POINTING RACING CAR;So;0;ON;;;;;N;;;;;\n1CC99;RIGHT-POINTING RACING CAR;So;0;ON;;;;;N;;;;;\n1CC9A;DOWN-POINTING RACING CAR;So;0;ON;;;;;N;;;;;\n1CC9B;HORIZONTAL RACING CAR;So;0;ON;;;;;N;;;;;\n1CC9C;VERTICAL RACING CAR;So;0;ON;;;;;N;;;;;\n1CC9D;VERTICAL GO-KART;So;0;ON;;;;;N;;;;;\n1CC9E;LEFT-POINTING TANK;So;0;ON;;;;;N;;;;;\n1CC9F;RIGHT-POINTING TANK;So;0;ON;;;;;N;;;;;\n1CCA0;LEFT-POINTING ROCKET BOOSTER;So;0;ON;;;;;N;;;;;\n1CCA1;RIGHT-POINTING ROCKET BOOSTER;So;0;ON;;;;;N;;;;;\n1CCA2;LEFT-POINTING ROLLER COASTER CAR;So;0;ON;;;;;N;;;;;\n1CCA3;RIGHT-POINTING ROLLER COASTER CAR;So;0;ON;;;;;N;;;;;\n1CCA4;LEFT HALF FLYING SAUCER;So;0;ON;;;;;N;;;;;\n1CCA5;RIGHT HALF FLYING SAUCER;So;0;ON;;;;;N;;;;;\n1CCA6;UPPER LEFT QUADRANT FACE WITH OPEN EYES;So;0;ON;;;;;N;;;;;\n1CCA7;UPPER RIGHT QUADRANT FACE WITH OPEN EYES;So;0;ON;;;;;N;;;;;\n1CCA8;UPPER LEFT QUADRANT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;;\n1CCA9;UPPER RIGHT QUADRANT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;;\n1CCAA;LOWER LEFT QUADRANT SMILING FACE;So;0;ON;;;;;N;;;;;\n1CCAB;LOWER RIGHT QUADRANT SMILING FACE;So;0;ON;;;;;N;;;;;\n1CCAC;LOWER LEFT QUADRANT NEUTRAL FACE;So;0;ON;;;;;N;;;;;\n1CCAD;LOWER RIGHT QUADRANT NEUTRAL FACE;So;0;ON;;;;;N;;;;;\n1CCAE;LOWER LEFT QUADRANT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;\n1CCAF;LOWER RIGHT QUADRANT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;\n1CCB0;LOWER LEFT QUADRANT FROWNING FACE;So;0;ON;;;;;N;;;;;\n1CCB1;LOWER RIGHT QUADRANT FROWNING FACE;So;0;ON;;;;;N;;;;;\n1CCB2;UPPER LEFT QUADRANT TELEVISION;So;0;ON;;;;;N;;;;;\n1CCB3;UPPER RIGHT QUADRANT TELEVISION;So;0;ON;;;;;N;;;;;\n1CCB4;LOWER LEFT QUADRANT TELEVISION;So;0;ON;;;;;N;;;;;\n1CCB5;LOWER RIGHT QUADRANT TELEVISION;So;0;ON;;;;;N;;;;;\n1CCB6;UPPER LEFT QUADRANT MICROCOMPUTER;So;0;ON;;;;;N;;;;;\n1CCB7;UPPER RIGHT QUADRANT MICROCOMPUTER;So;0;ON;;;;;N;;;;;\n1CCB8;LOWER LEFT QUADRANT MICROCOMPUTER;So;0;ON;;;;;N;;;;;\n1CCB9;LOWER RIGHT QUADRANT MICROCOMPUTER;So;0;ON;;;;;N;;;;;\n1CCBA;UPPER LEFT QUADRANT CHESS KING;So;0;ON;;;;;N;;;;;\n1CCBB;UPPER RIGHT QUADRANT CHESS KING;So;0;ON;;;;;N;;;;;\n1CCBC;LOWER LEFT QUADRANT CHESS KING;So;0;ON;;;;;N;;;;;\n1CCBD;LOWER RIGHT QUADRANT CHESS KING;So;0;ON;;;;;N;;;;;\n1CCBE;UPPER LEFT QUADRANT CHESS QUEEN;So;0;ON;;;;;N;;;;;\n1CCBF;UPPER RIGHT QUADRANT CHESS QUEEN;So;0;ON;;;;;N;;;;;\n1CCC0;LOWER LEFT QUADRANT CHESS QUEEN;So;0;ON;;;;;N;;;;;\n1CCC1;LOWER RIGHT QUADRANT CHESS QUEEN;So;0;ON;;;;;N;;;;;\n1CCC2;UPPER LEFT QUADRANT CHESS ROOK;So;0;ON;;;;;N;;;;;\n1CCC3;UPPER RIGHT QUADRANT CHESS ROOK;So;0;ON;;;;;N;;;;;\n1CCC4;LOWER LEFT QUADRANT CHESS ROOK;So;0;ON;;;;;N;;;;;\n1CCC5;LOWER RIGHT QUADRANT CHESS ROOK;So;0;ON;;;;;N;;;;;\n1CCC6;UPPER LEFT QUADRANT CHESS BISHOP;So;0;ON;;;;;N;;;;;\n1CCC7;UPPER RIGHT QUADRANT CHESS BISHOP;So;0;ON;;;;;N;;;;;\n1CCC8;LOWER LEFT QUADRANT CHESS BISHOP;So;0;ON;;;;;N;;;;;\n1CCC9;LOWER RIGHT QUADRANT CHESS BISHOP;So;0;ON;;;;;N;;;;;\n1CCCA;UPPER LEFT QUADRANT CHESS KNIGHT;So;0;ON;;;;;N;;;;;\n1CCCB;UPPER RIGHT QUADRANT CHESS KNIGHT;So;0;ON;;;;;N;;;;;\n1CCCC;LOWER LEFT QUADRANT CHESS KNIGHT;So;0;ON;;;;;N;;;;;\n1CCCD;LOWER RIGHT QUADRANT CHESS KNIGHT;So;0;ON;;;;;N;;;;;\n1CCCE;UPPER LEFT QUADRANT CHESS PAWN;So;0;ON;;;;;N;;;;;\n1CCCF;UPPER RIGHT QUADRANT CHESS PAWN;So;0;ON;;;;;N;;;;;\n1CCD0;LOWER LEFT QUADRANT CHESS PAWN;So;0;ON;;;;;N;;;;;\n1CCD1;LOWER RIGHT QUADRANT CHESS PAWN;So;0;ON;;;;;N;;;;;\n1CCD2;UPPER LEFT QUADRANT STANDING KNIGHT;So;0;ON;;;;;N;;;;;\n1CCD3;UPPER RIGHT QUADRANT STANDING KNIGHT;So;0;ON;;;;;N;;;;;\n1CCD4;LOWER LEFT QUADRANT STANDING KNIGHT;So;0;ON;;;;;N;;;;;\n1CCD5;LOWER RIGHT QUADRANT STANDING KNIGHT;So;0;ON;;;;;N;;;;;\n1CCD6;OUTLINED LATIN CAPITAL LETTER A;So;0;L;<font> 0041;;;;N;;;;;\n1CCD7;OUTLINED LATIN CAPITAL LETTER B;So;0;L;<font> 0042;;;;N;;;;;\n1CCD8;OUTLINED LATIN CAPITAL LETTER C;So;0;L;<font> 0043;;;;N;;;;;\n1CCD9;OUTLINED LATIN CAPITAL LETTER D;So;0;L;<font> 0044;;;;N;;;;;\n1CCDA;OUTLINED LATIN CAPITAL LETTER E;So;0;L;<font> 0045;;;;N;;;;;\n1CCDB;OUTLINED LATIN CAPITAL LETTER F;So;0;L;<font> 0046;;;;N;;;;;\n1CCDC;OUTLINED LATIN CAPITAL LETTER G;So;0;L;<font> 0047;;;;N;;;;;\n1CCDD;OUTLINED LATIN CAPITAL LETTER H;So;0;L;<font> 0048;;;;N;;;;;\n1CCDE;OUTLINED LATIN CAPITAL LETTER I;So;0;L;<font> 0049;;;;N;;;;;\n1CCDF;OUTLINED LATIN CAPITAL LETTER J;So;0;L;<font> 004A;;;;N;;;;;\n1CCE0;OUTLINED LATIN CAPITAL LETTER K;So;0;L;<font> 004B;;;;N;;;;;\n1CCE1;OUTLINED LATIN CAPITAL LETTER L;So;0;L;<font> 004C;;;;N;;;;;\n1CCE2;OUTLINED LATIN CAPITAL LETTER M;So;0;L;<font> 004D;;;;N;;;;;\n1CCE3;OUTLINED LATIN CAPITAL LETTER N;So;0;L;<font> 004E;;;;N;;;;;\n1CCE4;OUTLINED LATIN CAPITAL LETTER O;So;0;L;<font> 004F;;;;N;;;;;\n1CCE5;OUTLINED LATIN CAPITAL LETTER P;So;0;L;<font> 0050;;;;N;;;;;\n1CCE6;OUTLINED LATIN CAPITAL LETTER Q;So;0;L;<font> 0051;;;;N;;;;;\n1CCE7;OUTLINED LATIN CAPITAL LETTER R;So;0;L;<font> 0052;;;;N;;;;;\n1CCE8;OUTLINED LATIN CAPITAL LETTER S;So;0;L;<font> 0053;;;;N;;;;;\n1CCE9;OUTLINED LATIN CAPITAL LETTER T;So;0;L;<font> 0054;;;;N;;;;;\n1CCEA;OUTLINED LATIN CAPITAL LETTER U;So;0;L;<font> 0055;;;;N;;;;;\n1CCEB;OUTLINED LATIN CAPITAL LETTER V;So;0;L;<font> 0056;;;;N;;;;;\n1CCEC;OUTLINED LATIN CAPITAL LETTER W;So;0;L;<font> 0057;;;;N;;;;;\n1CCED;OUTLINED LATIN CAPITAL LETTER X;So;0;L;<font> 0058;;;;N;;;;;\n1CCEE;OUTLINED LATIN CAPITAL LETTER Y;So;0;L;<font> 0059;;;;N;;;;;\n1CCEF;OUTLINED LATIN CAPITAL LETTER Z;So;0;L;<font> 005A;;;;N;;;;;\n1CCF0;OUTLINED DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;\n1CCF1;OUTLINED DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;\n1CCF2;OUTLINED DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;\n1CCF3;OUTLINED DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;\n1CCF4;OUTLINED DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;\n1CCF5;OUTLINED DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;\n1CCF6;OUTLINED DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;\n1CCF7;OUTLINED DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;\n1CCF8;OUTLINED DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;\n1CCF9;OUTLINED DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;\n1CCFA;SNAKE SYMBOL;So;0;ON;;;;;N;;;;;\n1CCFB;FLYING SAUCER SYMBOL;So;0;ON;;;;;N;;;;;\n1CCFC;NOSE SYMBOL;So;0;ON;;;;;N;;;;;\n1CD00;BLOCK OCTANT-3;So;0;ON;;;;;N;;;;;\n1CD01;BLOCK OCTANT-23;So;0;ON;;;;;N;;;;;\n1CD02;BLOCK OCTANT-123;So;0;ON;;;;;N;;;;;\n1CD03;BLOCK OCTANT-4;So;0;ON;;;;;N;;;;;\n1CD04;BLOCK OCTANT-14;So;0;ON;;;;;N;;;;;\n1CD05;BLOCK OCTANT-124;So;0;ON;;;;;N;;;;;\n1CD06;BLOCK OCTANT-34;So;0;ON;;;;;N;;;;;\n1CD07;BLOCK OCTANT-134;So;0;ON;;;;;N;;;;;\n1CD08;BLOCK OCTANT-234;So;0;ON;;;;;N;;;;;\n1CD09;BLOCK OCTANT-5;So;0;ON;;;;;N;;;;;\n1CD0A;BLOCK OCTANT-15;So;0;ON;;;;;N;;;;;\n1CD0B;BLOCK OCTANT-25;So;0;ON;;;;;N;;;;;\n1CD0C;BLOCK OCTANT-125;So;0;ON;;;;;N;;;;;\n1CD0D;BLOCK OCTANT-135;So;0;ON;;;;;N;;;;;\n1CD0E;BLOCK OCTANT-235;So;0;ON;;;;;N;;;;;\n1CD0F;BLOCK OCTANT-1235;So;0;ON;;;;;N;;;;;\n1CD10;BLOCK OCTANT-45;So;0;ON;;;;;N;;;;;\n1CD11;BLOCK OCTANT-145;So;0;ON;;;;;N;;;;;\n1CD12;BLOCK OCTANT-245;So;0;ON;;;;;N;;;;;\n1CD13;BLOCK OCTANT-1245;So;0;ON;;;;;N;;;;;\n1CD14;BLOCK OCTANT-345;So;0;ON;;;;;N;;;;;\n1CD15;BLOCK OCTANT-1345;So;0;ON;;;;;N;;;;;\n1CD16;BLOCK OCTANT-2345;So;0;ON;;;;;N;;;;;\n1CD17;BLOCK OCTANT-12345;So;0;ON;;;;;N;;;;;\n1CD18;BLOCK OCTANT-6;So;0;ON;;;;;N;;;;;\n1CD19;BLOCK OCTANT-16;So;0;ON;;;;;N;;;;;\n1CD1A;BLOCK OCTANT-26;So;0;ON;;;;;N;;;;;\n1CD1B;BLOCK OCTANT-126;So;0;ON;;;;;N;;;;;\n1CD1C;BLOCK OCTANT-36;So;0;ON;;;;;N;;;;;\n1CD1D;BLOCK OCTANT-136;So;0;ON;;;;;N;;;;;\n1CD1E;BLOCK OCTANT-236;So;0;ON;;;;;N;;;;;\n1CD1F;BLOCK OCTANT-1236;So;0;ON;;;;;N;;;;;\n1CD20;BLOCK OCTANT-146;So;0;ON;;;;;N;;;;;\n1CD21;BLOCK OCTANT-246;So;0;ON;;;;;N;;;;;\n1CD22;BLOCK OCTANT-1246;So;0;ON;;;;;N;;;;;\n1CD23;BLOCK OCTANT-346;So;0;ON;;;;;N;;;;;\n1CD24;BLOCK OCTANT-1346;So;0;ON;;;;;N;;;;;\n1CD25;BLOCK OCTANT-2346;So;0;ON;;;;;N;;;;;\n1CD26;BLOCK OCTANT-12346;So;0;ON;;;;;N;;;;;\n1CD27;BLOCK OCTANT-56;So;0;ON;;;;;N;;;;;\n1CD28;BLOCK OCTANT-156;So;0;ON;;;;;N;;;;;\n1CD29;BLOCK OCTANT-256;So;0;ON;;;;;N;;;;;\n1CD2A;BLOCK OCTANT-1256;So;0;ON;;;;;N;;;;;\n1CD2B;BLOCK OCTANT-356;So;0;ON;;;;;N;;;;;\n1CD2C;BLOCK OCTANT-1356;So;0;ON;;;;;N;;;;;\n1CD2D;BLOCK OCTANT-2356;So;0;ON;;;;;N;;;;;\n1CD2E;BLOCK OCTANT-12356;So;0;ON;;;;;N;;;;;\n1CD2F;BLOCK OCTANT-456;So;0;ON;;;;;N;;;;;\n1CD30;BLOCK OCTANT-1456;So;0;ON;;;;;N;;;;;\n1CD31;BLOCK OCTANT-2456;So;0;ON;;;;;N;;;;;\n1CD32;BLOCK OCTANT-12456;So;0;ON;;;;;N;;;;;\n1CD33;BLOCK OCTANT-3456;So;0;ON;;;;;N;;;;;\n1CD34;BLOCK OCTANT-13456;So;0;ON;;;;;N;;;;;\n1CD35;BLOCK OCTANT-23456;So;0;ON;;;;;N;;;;;\n1CD36;BLOCK OCTANT-17;So;0;ON;;;;;N;;;;;\n1CD37;BLOCK OCTANT-27;So;0;ON;;;;;N;;;;;\n1CD38;BLOCK OCTANT-127;So;0;ON;;;;;N;;;;;\n1CD39;BLOCK OCTANT-37;So;0;ON;;;;;N;;;;;\n1CD3A;BLOCK OCTANT-137;So;0;ON;;;;;N;;;;;\n1CD3B;BLOCK OCTANT-237;So;0;ON;;;;;N;;;;;\n1CD3C;BLOCK OCTANT-1237;So;0;ON;;;;;N;;;;;\n1CD3D;BLOCK OCTANT-47;So;0;ON;;;;;N;;;;;\n1CD3E;BLOCK OCTANT-147;So;0;ON;;;;;N;;;;;\n1CD3F;BLOCK OCTANT-247;So;0;ON;;;;;N;;;;;\n1CD40;BLOCK OCTANT-1247;So;0;ON;;;;;N;;;;;\n1CD41;BLOCK OCTANT-347;So;0;ON;;;;;N;;;;;\n1CD42;BLOCK OCTANT-1347;So;0;ON;;;;;N;;;;;\n1CD43;BLOCK OCTANT-2347;So;0;ON;;;;;N;;;;;\n1CD44;BLOCK OCTANT-12347;So;0;ON;;;;;N;;;;;\n1CD45;BLOCK OCTANT-157;So;0;ON;;;;;N;;;;;\n1CD46;BLOCK OCTANT-257;So;0;ON;;;;;N;;;;;\n1CD47;BLOCK OCTANT-1257;So;0;ON;;;;;N;;;;;\n1CD48;BLOCK OCTANT-357;So;0;ON;;;;;N;;;;;\n1CD49;BLOCK OCTANT-2357;So;0;ON;;;;;N;;;;;\n1CD4A;BLOCK OCTANT-12357;So;0;ON;;;;;N;;;;;\n1CD4B;BLOCK OCTANT-457;So;0;ON;;;;;N;;;;;\n1CD4C;BLOCK OCTANT-1457;So;0;ON;;;;;N;;;;;\n1CD4D;BLOCK OCTANT-12457;So;0;ON;;;;;N;;;;;\n1CD4E;BLOCK OCTANT-3457;So;0;ON;;;;;N;;;;;\n1CD4F;BLOCK OCTANT-13457;So;0;ON;;;;;N;;;;;\n1CD50;BLOCK OCTANT-23457;So;0;ON;;;;;N;;;;;\n1CD51;BLOCK OCTANT-67;So;0;ON;;;;;N;;;;;\n1CD52;BLOCK OCTANT-167;So;0;ON;;;;;N;;;;;\n1CD53;BLOCK OCTANT-267;So;0;ON;;;;;N;;;;;\n1CD54;BLOCK OCTANT-1267;So;0;ON;;;;;N;;;;;\n1CD55;BLOCK OCTANT-367;So;0;ON;;;;;N;;;;;\n1CD56;BLOCK OCTANT-1367;So;0;ON;;;;;N;;;;;\n1CD57;BLOCK OCTANT-2367;So;0;ON;;;;;N;;;;;\n1CD58;BLOCK OCTANT-12367;So;0;ON;;;;;N;;;;;\n1CD59;BLOCK OCTANT-467;So;0;ON;;;;;N;;;;;\n1CD5A;BLOCK OCTANT-1467;So;0;ON;;;;;N;;;;;\n1CD5B;BLOCK OCTANT-2467;So;0;ON;;;;;N;;;;;\n1CD5C;BLOCK OCTANT-12467;So;0;ON;;;;;N;;;;;\n1CD5D;BLOCK OCTANT-3467;So;0;ON;;;;;N;;;;;\n1CD5E;BLOCK OCTANT-13467;So;0;ON;;;;;N;;;;;\n1CD5F;BLOCK OCTANT-23467;So;0;ON;;;;;N;;;;;\n1CD60;BLOCK OCTANT-123467;So;0;ON;;;;;N;;;;;\n1CD61;BLOCK OCTANT-567;So;0;ON;;;;;N;;;;;\n1CD62;BLOCK OCTANT-1567;So;0;ON;;;;;N;;;;;\n1CD63;BLOCK OCTANT-2567;So;0;ON;;;;;N;;;;;\n1CD64;BLOCK OCTANT-12567;So;0;ON;;;;;N;;;;;\n1CD65;BLOCK OCTANT-3567;So;0;ON;;;;;N;;;;;\n1CD66;BLOCK OCTANT-13567;So;0;ON;;;;;N;;;;;\n1CD67;BLOCK OCTANT-23567;So;0;ON;;;;;N;;;;;\n1CD68;BLOCK OCTANT-123567;So;0;ON;;;;;N;;;;;\n1CD69;BLOCK OCTANT-4567;So;0;ON;;;;;N;;;;;\n1CD6A;BLOCK OCTANT-14567;So;0;ON;;;;;N;;;;;\n1CD6B;BLOCK OCTANT-24567;So;0;ON;;;;;N;;;;;\n1CD6C;BLOCK OCTANT-124567;So;0;ON;;;;;N;;;;;\n1CD6D;BLOCK OCTANT-34567;So;0;ON;;;;;N;;;;;\n1CD6E;BLOCK OCTANT-134567;So;0;ON;;;;;N;;;;;\n1CD6F;BLOCK OCTANT-234567;So;0;ON;;;;;N;;;;;\n1CD70;BLOCK OCTANT-1234567;So;0;ON;;;;;N;;;;;\n1CD71;BLOCK OCTANT-18;So;0;ON;;;;;N;;;;;\n1CD72;BLOCK OCTANT-28;So;0;ON;;;;;N;;;;;\n1CD73;BLOCK OCTANT-128;So;0;ON;;;;;N;;;;;\n1CD74;BLOCK OCTANT-38;So;0;ON;;;;;N;;;;;\n1CD75;BLOCK OCTANT-138;So;0;ON;;;;;N;;;;;\n1CD76;BLOCK OCTANT-238;So;0;ON;;;;;N;;;;;\n1CD77;BLOCK OCTANT-1238;So;0;ON;;;;;N;;;;;\n1CD78;BLOCK OCTANT-48;So;0;ON;;;;;N;;;;;\n1CD79;BLOCK OCTANT-148;So;0;ON;;;;;N;;;;;\n1CD7A;BLOCK OCTANT-248;So;0;ON;;;;;N;;;;;\n1CD7B;BLOCK OCTANT-1248;So;0;ON;;;;;N;;;;;\n1CD7C;BLOCK OCTANT-348;So;0;ON;;;;;N;;;;;\n1CD7D;BLOCK OCTANT-1348;So;0;ON;;;;;N;;;;;\n1CD7E;BLOCK OCTANT-2348;So;0;ON;;;;;N;;;;;\n1CD7F;BLOCK OCTANT-12348;So;0;ON;;;;;N;;;;;\n1CD80;BLOCK OCTANT-58;So;0;ON;;;;;N;;;;;\n1CD81;BLOCK OCTANT-158;So;0;ON;;;;;N;;;;;\n1CD82;BLOCK OCTANT-258;So;0;ON;;;;;N;;;;;\n1CD83;BLOCK OCTANT-1258;So;0;ON;;;;;N;;;;;\n1CD84;BLOCK OCTANT-358;So;0;ON;;;;;N;;;;;\n1CD85;BLOCK OCTANT-1358;So;0;ON;;;;;N;;;;;\n1CD86;BLOCK OCTANT-2358;So;0;ON;;;;;N;;;;;\n1CD87;BLOCK OCTANT-12358;So;0;ON;;;;;N;;;;;\n1CD88;BLOCK OCTANT-458;So;0;ON;;;;;N;;;;;\n1CD89;BLOCK OCTANT-1458;So;0;ON;;;;;N;;;;;\n1CD8A;BLOCK OCTANT-2458;So;0;ON;;;;;N;;;;;\n1CD8B;BLOCK OCTANT-12458;So;0;ON;;;;;N;;;;;\n1CD8C;BLOCK OCTANT-3458;So;0;ON;;;;;N;;;;;\n1CD8D;BLOCK OCTANT-13458;So;0;ON;;;;;N;;;;;\n1CD8E;BLOCK OCTANT-23458;So;0;ON;;;;;N;;;;;\n1CD8F;BLOCK OCTANT-123458;So;0;ON;;;;;N;;;;;\n1CD90;BLOCK OCTANT-168;So;0;ON;;;;;N;;;;;\n1CD91;BLOCK OCTANT-268;So;0;ON;;;;;N;;;;;\n1CD92;BLOCK OCTANT-1268;So;0;ON;;;;;N;;;;;\n1CD93;BLOCK OCTANT-368;So;0;ON;;;;;N;;;;;\n1CD94;BLOCK OCTANT-2368;So;0;ON;;;;;N;;;;;\n1CD95;BLOCK OCTANT-12368;So;0;ON;;;;;N;;;;;\n1CD96;BLOCK OCTANT-468;So;0;ON;;;;;N;;;;;\n1CD97;BLOCK OCTANT-1468;So;0;ON;;;;;N;;;;;\n1CD98;BLOCK OCTANT-12468;So;0;ON;;;;;N;;;;;\n1CD99;BLOCK OCTANT-3468;So;0;ON;;;;;N;;;;;\n1CD9A;BLOCK OCTANT-13468;So;0;ON;;;;;N;;;;;\n1CD9B;BLOCK OCTANT-23468;So;0;ON;;;;;N;;;;;\n1CD9C;BLOCK OCTANT-568;So;0;ON;;;;;N;;;;;\n1CD9D;BLOCK OCTANT-1568;So;0;ON;;;;;N;;;;;\n1CD9E;BLOCK OCTANT-2568;So;0;ON;;;;;N;;;;;\n1CD9F;BLOCK OCTANT-12568;So;0;ON;;;;;N;;;;;\n1CDA0;BLOCK OCTANT-3568;So;0;ON;;;;;N;;;;;\n1CDA1;BLOCK OCTANT-13568;So;0;ON;;;;;N;;;;;\n1CDA2;BLOCK OCTANT-23568;So;0;ON;;;;;N;;;;;\n1CDA3;BLOCK OCTANT-123568;So;0;ON;;;;;N;;;;;\n1CDA4;BLOCK OCTANT-4568;So;0;ON;;;;;N;;;;;\n1CDA5;BLOCK OCTANT-14568;So;0;ON;;;;;N;;;;;\n1CDA6;BLOCK OCTANT-24568;So;0;ON;;;;;N;;;;;\n1CDA7;BLOCK OCTANT-124568;So;0;ON;;;;;N;;;;;\n1CDA8;BLOCK OCTANT-34568;So;0;ON;;;;;N;;;;;\n1CDA9;BLOCK OCTANT-134568;So;0;ON;;;;;N;;;;;\n1CDAA;BLOCK OCTANT-234568;So;0;ON;;;;;N;;;;;\n1CDAB;BLOCK OCTANT-1234568;So;0;ON;;;;;N;;;;;\n1CDAC;BLOCK OCTANT-178;So;0;ON;;;;;N;;;;;\n1CDAD;BLOCK OCTANT-278;So;0;ON;;;;;N;;;;;\n1CDAE;BLOCK OCTANT-1278;So;0;ON;;;;;N;;;;;\n1CDAF;BLOCK OCTANT-378;So;0;ON;;;;;N;;;;;\n1CDB0;BLOCK OCTANT-1378;So;0;ON;;;;;N;;;;;\n1CDB1;BLOCK OCTANT-2378;So;0;ON;;;;;N;;;;;\n1CDB2;BLOCK OCTANT-12378;So;0;ON;;;;;N;;;;;\n1CDB3;BLOCK OCTANT-478;So;0;ON;;;;;N;;;;;\n1CDB4;BLOCK OCTANT-1478;So;0;ON;;;;;N;;;;;\n1CDB5;BLOCK OCTANT-2478;So;0;ON;;;;;N;;;;;\n1CDB6;BLOCK OCTANT-12478;So;0;ON;;;;;N;;;;;\n1CDB7;BLOCK OCTANT-3478;So;0;ON;;;;;N;;;;;\n1CDB8;BLOCK OCTANT-13478;So;0;ON;;;;;N;;;;;\n1CDB9;BLOCK OCTANT-23478;So;0;ON;;;;;N;;;;;\n1CDBA;BLOCK OCTANT-123478;So;0;ON;;;;;N;;;;;\n1CDBB;BLOCK OCTANT-578;So;0;ON;;;;;N;;;;;\n1CDBC;BLOCK OCTANT-1578;So;0;ON;;;;;N;;;;;\n1CDBD;BLOCK OCTANT-2578;So;0;ON;;;;;N;;;;;\n1CDBE;BLOCK OCTANT-12578;So;0;ON;;;;;N;;;;;\n1CDBF;BLOCK OCTANT-3578;So;0;ON;;;;;N;;;;;\n1CDC0;BLOCK OCTANT-13578;So;0;ON;;;;;N;;;;;\n1CDC1;BLOCK OCTANT-23578;So;0;ON;;;;;N;;;;;\n1CDC2;BLOCK OCTANT-123578;So;0;ON;;;;;N;;;;;\n1CDC3;BLOCK OCTANT-4578;So;0;ON;;;;;N;;;;;\n1CDC4;BLOCK OCTANT-14578;So;0;ON;;;;;N;;;;;\n1CDC5;BLOCK OCTANT-24578;So;0;ON;;;;;N;;;;;\n1CDC6;BLOCK OCTANT-124578;So;0;ON;;;;;N;;;;;\n1CDC7;BLOCK OCTANT-34578;So;0;ON;;;;;N;;;;;\n1CDC8;BLOCK OCTANT-134578;So;0;ON;;;;;N;;;;;\n1CDC9;BLOCK OCTANT-234578;So;0;ON;;;;;N;;;;;\n1CDCA;BLOCK OCTANT-1234578;So;0;ON;;;;;N;;;;;\n1CDCB;BLOCK OCTANT-678;So;0;ON;;;;;N;;;;;\n1CDCC;BLOCK OCTANT-1678;So;0;ON;;;;;N;;;;;\n1CDCD;BLOCK OCTANT-2678;So;0;ON;;;;;N;;;;;\n1CDCE;BLOCK OCTANT-12678;So;0;ON;;;;;N;;;;;\n1CDCF;BLOCK OCTANT-3678;So;0;ON;;;;;N;;;;;\n1CDD0;BLOCK OCTANT-13678;So;0;ON;;;;;N;;;;;\n1CDD1;BLOCK OCTANT-23678;So;0;ON;;;;;N;;;;;\n1CDD2;BLOCK OCTANT-123678;So;0;ON;;;;;N;;;;;\n1CDD3;BLOCK OCTANT-4678;So;0;ON;;;;;N;;;;;\n1CDD4;BLOCK OCTANT-14678;So;0;ON;;;;;N;;;;;\n1CDD5;BLOCK OCTANT-24678;So;0;ON;;;;;N;;;;;\n1CDD6;BLOCK OCTANT-124678;So;0;ON;;;;;N;;;;;\n1CDD7;BLOCK OCTANT-34678;So;0;ON;;;;;N;;;;;\n1CDD8;BLOCK OCTANT-134678;So;0;ON;;;;;N;;;;;\n1CDD9;BLOCK OCTANT-234678;So;0;ON;;;;;N;;;;;\n1CDDA;BLOCK OCTANT-1234678;So;0;ON;;;;;N;;;;;\n1CDDB;BLOCK OCTANT-15678;So;0;ON;;;;;N;;;;;\n1CDDC;BLOCK OCTANT-25678;So;0;ON;;;;;N;;;;;\n1CDDD;BLOCK OCTANT-125678;So;0;ON;;;;;N;;;;;\n1CDDE;BLOCK OCTANT-35678;So;0;ON;;;;;N;;;;;\n1CDDF;BLOCK OCTANT-235678;So;0;ON;;;;;N;;;;;\n1CDE0;BLOCK OCTANT-1235678;So;0;ON;;;;;N;;;;;\n1CDE1;BLOCK OCTANT-45678;So;0;ON;;;;;N;;;;;\n1CDE2;BLOCK OCTANT-145678;So;0;ON;;;;;N;;;;;\n1CDE3;BLOCK OCTANT-1245678;So;0;ON;;;;;N;;;;;\n1CDE4;BLOCK OCTANT-1345678;So;0;ON;;;;;N;;;;;\n1CDE5;BLOCK OCTANT-2345678;So;0;ON;;;;;N;;;;;\n1CDE6;TOP HALF STANDING PERSON;So;0;ON;;;;;N;;;;;\n1CDE7;BOTTOM HALF STANDING PERSON;So;0;ON;;;;;N;;;;;\n1CDE8;TOP HALF RIGHT-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;;\n1CDE9;BOTTOM HALF RIGHT-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;;\n1CDEA;TOP HALF RIGHT-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;;\n1CDEB;BOTTOM HALF RIGHT-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;;\n1CDEC;TOP HALF LEFT-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;;\n1CDED;BOTTOM HALF LEFT-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;;\n1CDEE;TOP HALF LEFT-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;;\n1CDEF;BOTTOM HALF LEFT-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;;\n1CDF0;TOP HALF FORWARD-FACING RUNNER;So;0;ON;;;;;N;;;;;\n1CDF1;BOTTOM HALF FORWARD-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;;\n1CDF2;BOTTOM HALF FORWARD-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;;\n1CDF3;BOTTOM HALF FORWARD-FACING RUNNER FRAME-3;So;0;ON;;;;;N;;;;;\n1CDF4;BOTTOM HALF FORWARD-FACING RUNNER FRAME-4;So;0;ON;;;;;N;;;;;\n1CDF5;MOON LANDER;So;0;ON;;;;;N;;;;;\n1CDF6;TOP HALF FLAILING ROBOT FRAME-1;So;0;ON;;;;;N;;;;;\n1CDF7;TOP HALF FLAILING ROBOT FRAME-2;So;0;ON;;;;;N;;;;;\n1CDF8;DOWN-POINTING AIRPLANE;So;0;ON;;;;;N;;;;;\n1CDF9;LEFT-POINTING AIRPLANE;So;0;ON;;;;;N;;;;;\n1CDFA;SMALL UP-POINTING AIRPLANE;So;0;ON;;;;;N;;;;;\n1CDFB;UP-POINTING FROG;So;0;ON;;;;;N;;;;;\n1CDFC;DOWN-POINTING FROG;So;0;ON;;;;;N;;;;;\n1CDFD;EXPLOSION FRAME-1;So;0;ON;;;;;N;;;;;\n1CDFE;EXPLOSION FRAME-2;So;0;ON;;;;;N;;;;;\n1CDFF;EXPLOSION FRAME-3;So;0;ON;;;;;N;;;;;\n1CE00;RIGHT HALF AND LEFT HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1CE01;LOWER HALF AND UPPER HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1CE02;EXPLOSION AT HORIZON;So;0;ON;;;;;N;;;;;\n1CE03;UPPER HALF HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;;\n1CE04;LOWER HALF HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;;\n1CE05;HEAVY WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;\n1CE06;WHITE VERTICAL RECTANGLE WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;\n1CE07;TOP LEFT BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;;;;;\n1CE08;FUNNEL;So;0;ON;;;;;N;;;;;\n1CE09;BOX DRAWINGS DOUBLE DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1CE0A;BOX DRAWINGS DOUBLE DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;;\n1CE0B;LEFT HALF WHITE ELLIPSE;So;0;ON;;;;;N;;;;;\n1CE0C;RIGHT HALF WHITE ELLIPSE;So;0;ON;;;;;N;;;;;\n1CE0D;LEFT HALF TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;;;;;\n1CE0E;RIGHT HALF TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;;;;;\n1CE0F;HORIZONTAL LINE WITH TICK MARK;So;0;ON;;;;;N;;;;;\n1CE10;LEFT HALF HORIZONTAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;;\n1CE11;RIGHT HALF HORIZONTAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;;\n1CE12;HORIZONTAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;;\n1CE13;LOWER HALF VERTICAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;;\n1CE14;UPPER HALF VERTICAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;;\n1CE15;VERTICAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;;\n1CE16;BOX DRAWINGS LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;;\n1CE17;BOX DRAWINGS LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;;\n1CE18;BOX DRAWINGS LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;;\n1CE19;BOX DRAWINGS LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;;\n1CE1A;LARGE TYPE PIECE UPPER LEFT ARC;So;0;ON;;;;;N;;;;;\n1CE1B;LARGE TYPE PIECE UPPER LEFT CORNER;So;0;ON;;;;;N;;;;;\n1CE1C;LARGE TYPE PIECE UPPER TERMINAL;So;0;ON;;;;;N;;;;;\n1CE1D;LARGE TYPE PIECE UPPER LEFT CROTCH;So;0;ON;;;;;N;;;;;\n1CE1E;LARGE TYPE PIECE LEFT ARM;So;0;ON;;;;;N;;;;;\n1CE1F;LARGE TYPE PIECE CROSSBAR;So;0;ON;;;;;N;;;;;\n1CE20;LARGE TYPE PIECE CROSSBAR WITH LOWER STEM;So;0;ON;;;;;N;;;;;\n1CE21;LARGE TYPE PIECE UPPER HALF VERTEX OF M;So;0;ON;;;;;N;;;;;\n1CE22;LARGE TYPE PIECE DIAGONAL LOWER LEFT;So;0;ON;;;;;N;;;;;\n1CE23;LARGE TYPE PIECE SHORT UPPER TERMINAL;So;0;ON;;;;;N;;;;;\n1CE24;LARGE TYPE PIECE UPPER RIGHT ARC;So;0;ON;;;;;N;;;;;\n1CE25;LARGE TYPE PIECE RIGHT ARM;So;0;ON;;;;;N;;;;;\n1CE26;LARGE TYPE PIECE UPPER RIGHT CROTCH;So;0;ON;;;;;N;;;;;\n1CE27;LARGE TYPE PIECE UPPER RIGHT CORNER;So;0;ON;;;;;N;;;;;\n1CE28;LARGE TYPE PIECE STEM WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;;\n1CE29;LARGE TYPE PIECE STEM;So;0;ON;;;;;N;;;;;\n1CE2A;LARGE TYPE PIECE DIAGONAL UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1CE2B;LARGE TYPE PIECE DIAGONAL UPPER RIGHT;So;0;ON;;;;;N;;;;;\n1CE2C;LARGE TYPE PIECE DIAGONAL LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1CE2D;LARGE TYPE PIECE SHORT LOWER TERMINAL;So;0;ON;;;;;N;;;;;\n1CE2E;LARGE TYPE PIECE LOWER LEFT AND UPPER LEFT ARC;So;0;ON;;;;;N;;;;;\n1CE2F;LARGE TYPE PIECE CENTRE OF K;So;0;ON;;;;;N;;;;;\n1CE30;LARGE TYPE PIECE LOWER HALF VERTEX OF M;So;0;ON;;;;;N;;;;;\n1CE31;LARGE TYPE PIECE UPPER HALF VERTEX OF W;So;0;ON;;;;;N;;;;;\n1CE32;LARGE TYPE PIECE CENTRE OF X;So;0;ON;;;;;N;;;;;\n1CE33;LARGE TYPE PIECE CENTRE OF Y;So;0;ON;;;;;N;;;;;\n1CE34;LARGE TYPE PIECE CENTRE OF Z WITH CROSSBAR;So;0;ON;;;;;N;;;;;\n1CE35;LARGE TYPE PIECE RAISED UPPER LEFT ARC;So;0;ON;;;;;N;;;;;\n1CE36;LARGE TYPE PIECE STEM WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;;\n1CE37;LARGE TYPE PIECE LOWER RIGHT AND UPPER RIGHT ARC;So;0;ON;;;;;N;;;;;\n1CE38;LARGE TYPE PIECE DIAGONAL UPPER LEFT AND LOWER LEFT;So;0;ON;;;;;N;;;;;\n1CE39;LARGE TYPE PIECE STEM WITH LEFT JOINT;So;0;ON;;;;;N;;;;;\n1CE3A;LARGE TYPE PIECE STEM WITH CROSSBAR;So;0;ON;;;;;N;;;;;\n1CE3B;LARGE TYPE PIECE DIAGONAL UPPER LEFT;So;0;ON;;;;;N;;;;;\n1CE3C;LARGE TYPE PIECE LOWER TERMINAL;So;0;ON;;;;;N;;;;;\n1CE3D;LARGE TYPE PIECE LOWER LEFT CORNER;So;0;ON;;;;;N;;;;;\n1CE3E;LARGE TYPE PIECE LOWER LEFT ARC;So;0;ON;;;;;N;;;;;\n1CE3F;LARGE TYPE PIECE LOWER LEFT CROTCH;So;0;ON;;;;;N;;;;;\n1CE40;LARGE TYPE PIECE CROSSBAR WITH UPPER STEM;So;0;ON;;;;;N;;;;;\n1CE41;LARGE TYPE PIECE VERTEX OF V;So;0;ON;;;;;N;;;;;\n1CE42;LARGE TYPE PIECE LOWER HALF VERTEX OF W;So;0;ON;;;;;N;;;;;\n1CE43;LARGE TYPE PIECE LOWER RIGHT ARC;So;0;ON;;;;;N;;;;;\n1CE44;LARGE TYPE PIECE LOWER RIGHT CORNER;So;0;ON;;;;;N;;;;;\n1CE45;LARGE TYPE PIECE LOWER RIGHT ARC WITH TAIL;So;0;ON;;;;;N;;;;;\n1CE46;LARGE TYPE PIECE LOWER RIGHT CROTCH;So;0;ON;;;;;N;;;;;\n1CE47;LARGE TYPE PIECE STEM-45;So;0;ON;;;;;N;;;;;\n1CE48;LARGE TYPE PIECE STEM-2345;So;0;ON;;;;;N;;;;;\n1CE49;LARGE TYPE PIECE STEM-4;So;0;ON;;;;;N;;;;;\n1CE4A;LARGE TYPE PIECE STEM-34;So;0;ON;;;;;N;;;;;\n1CE4B;LARGE TYPE PIECE STEM-234;So;0;ON;;;;;N;;;;;\n1CE4C;LARGE TYPE PIECE STEM-1234;So;0;ON;;;;;N;;;;;\n1CE4D;LARGE TYPE PIECE STEM-3;So;0;ON;;;;;N;;;;;\n1CE4E;LARGE TYPE PIECE STEM-23;So;0;ON;;;;;N;;;;;\n1CE4F;LARGE TYPE PIECE STEM-2;So;0;ON;;;;;N;;;;;\n1CE50;LARGE TYPE PIECE STEM-12;So;0;ON;;;;;N;;;;;\n1CE51;SEPARATED BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;;\n1CE52;SEPARATED BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;;\n1CE53;SEPARATED BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;;\n1CE54;SEPARATED BLOCK SEXTANT-3;So;0;ON;;;;;N;;;;;\n1CE55;SEPARATED BLOCK SEXTANT-13;So;0;ON;;;;;N;;;;;\n1CE56;SEPARATED BLOCK SEXTANT-23;So;0;ON;;;;;N;;;;;\n1CE57;SEPARATED BLOCK SEXTANT-123;So;0;ON;;;;;N;;;;;\n1CE58;SEPARATED BLOCK SEXTANT-4;So;0;ON;;;;;N;;;;;\n1CE59;SEPARATED BLOCK SEXTANT-14;So;0;ON;;;;;N;;;;;\n1CE5A;SEPARATED BLOCK SEXTANT-24;So;0;ON;;;;;N;;;;;\n1CE5B;SEPARATED BLOCK SEXTANT-124;So;0;ON;;;;;N;;;;;\n1CE5C;SEPARATED BLOCK SEXTANT-34;So;0;ON;;;;;N;;;;;\n1CE5D;SEPARATED BLOCK SEXTANT-134;So;0;ON;;;;;N;;;;;\n1CE5E;SEPARATED BLOCK SEXTANT-234;So;0;ON;;;;;N;;;;;\n1CE5F;SEPARATED BLOCK SEXTANT-1234;So;0;ON;;;;;N;;;;;\n1CE60;SEPARATED BLOCK SEXTANT-5;So;0;ON;;;;;N;;;;;\n1CE61;SEPARATED BLOCK SEXTANT-15;So;0;ON;;;;;N;;;;;\n1CE62;SEPARATED BLOCK SEXTANT-25;So;0;ON;;;;;N;;;;;\n1CE63;SEPARATED BLOCK SEXTANT-125;So;0;ON;;;;;N;;;;;\n1CE64;SEPARATED BLOCK SEXTANT-35;So;0;ON;;;;;N;;;;;\n1CE65;SEPARATED BLOCK SEXTANT-135;So;0;ON;;;;;N;;;;;\n1CE66;SEPARATED BLOCK SEXTANT-235;So;0;ON;;;;;N;;;;;\n1CE67;SEPARATED BLOCK SEXTANT-1235;So;0;ON;;;;;N;;;;;\n1CE68;SEPARATED BLOCK SEXTANT-45;So;0;ON;;;;;N;;;;;\n1CE69;SEPARATED BLOCK SEXTANT-145;So;0;ON;;;;;N;;;;;\n1CE6A;SEPARATED BLOCK SEXTANT-245;So;0;ON;;;;;N;;;;;\n1CE6B;SEPARATED BLOCK SEXTANT-1245;So;0;ON;;;;;N;;;;;\n1CE6C;SEPARATED BLOCK SEXTANT-345;So;0;ON;;;;;N;;;;;\n1CE6D;SEPARATED BLOCK SEXTANT-1345;So;0;ON;;;;;N;;;;;\n1CE6E;SEPARATED BLOCK SEXTANT-2345;So;0;ON;;;;;N;;;;;\n1CE6F;SEPARATED BLOCK SEXTANT-12345;So;0;ON;;;;;N;;;;;\n1CE70;SEPARATED BLOCK SEXTANT-6;So;0;ON;;;;;N;;;;;\n1CE71;SEPARATED BLOCK SEXTANT-16;So;0;ON;;;;;N;;;;;\n1CE72;SEPARATED BLOCK SEXTANT-26;So;0;ON;;;;;N;;;;;\n1CE73;SEPARATED BLOCK SEXTANT-126;So;0;ON;;;;;N;;;;;\n1CE74;SEPARATED BLOCK SEXTANT-36;So;0;ON;;;;;N;;;;;\n1CE75;SEPARATED BLOCK SEXTANT-136;So;0;ON;;;;;N;;;;;\n1CE76;SEPARATED BLOCK SEXTANT-236;So;0;ON;;;;;N;;;;;\n1CE77;SEPARATED BLOCK SEXTANT-1236;So;0;ON;;;;;N;;;;;\n1CE78;SEPARATED BLOCK SEXTANT-46;So;0;ON;;;;;N;;;;;\n1CE79;SEPARATED BLOCK SEXTANT-146;So;0;ON;;;;;N;;;;;\n1CE7A;SEPARATED BLOCK SEXTANT-246;So;0;ON;;;;;N;;;;;\n1CE7B;SEPARATED BLOCK SEXTANT-1246;So;0;ON;;;;;N;;;;;\n1CE7C;SEPARATED BLOCK SEXTANT-346;So;0;ON;;;;;N;;;;;\n1CE7D;SEPARATED BLOCK SEXTANT-1346;So;0;ON;;;;;N;;;;;\n1CE7E;SEPARATED BLOCK SEXTANT-2346;So;0;ON;;;;;N;;;;;\n1CE7F;SEPARATED BLOCK SEXTANT-12346;So;0;ON;;;;;N;;;;;\n1CE80;SEPARATED BLOCK SEXTANT-56;So;0;ON;;;;;N;;;;;\n1CE81;SEPARATED BLOCK SEXTANT-156;So;0;ON;;;;;N;;;;;\n1CE82;SEPARATED BLOCK SEXTANT-256;So;0;ON;;;;;N;;;;;\n1CE83;SEPARATED BLOCK SEXTANT-1256;So;0;ON;;;;;N;;;;;\n1CE84;SEPARATED BLOCK SEXTANT-356;So;0;ON;;;;;N;;;;;\n1CE85;SEPARATED BLOCK SEXTANT-1356;So;0;ON;;;;;N;;;;;\n1CE86;SEPARATED BLOCK SEXTANT-2356;So;0;ON;;;;;N;;;;;\n1CE87;SEPARATED BLOCK SEXTANT-12356;So;0;ON;;;;;N;;;;;\n1CE88;SEPARATED BLOCK SEXTANT-456;So;0;ON;;;;;N;;;;;\n1CE89;SEPARATED BLOCK SEXTANT-1456;So;0;ON;;;;;N;;;;;\n1CE8A;SEPARATED BLOCK SEXTANT-2456;So;0;ON;;;;;N;;;;;\n1CE8B;SEPARATED BLOCK SEXTANT-12456;So;0;ON;;;;;N;;;;;\n1CE8C;SEPARATED BLOCK SEXTANT-3456;So;0;ON;;;;;N;;;;;\n1CE8D;SEPARATED BLOCK SEXTANT-13456;So;0;ON;;;;;N;;;;;\n1CE8E;SEPARATED BLOCK SEXTANT-23456;So;0;ON;;;;;N;;;;;\n1CE8F;SEPARATED BLOCK SEXTANT-123456;So;0;ON;;;;;N;;;;;\n1CE90;UPPER LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE91;UPPER CENTRE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE92;UPPER CENTRE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE93;UPPER RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE94;UPPER MIDDLE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE95;UPPER MIDDLE CENTRE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE96;UPPER MIDDLE CENTRE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE97;UPPER MIDDLE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE98;LOWER MIDDLE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE99;LOWER MIDDLE CENTRE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE9A;LOWER MIDDLE CENTRE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE9B;LOWER MIDDLE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE9C;LOWER LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE9D;LOWER CENTRE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE9E;LOWER CENTRE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CE9F;LOWER RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;;\n1CEA0;RIGHT HALF LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEA1;RIGHT THREE QUARTERS LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEA2;LEFT THREE QUARTERS LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEA3;LEFT HALF LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEA4;LOWER HALF LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEA5;LOWER THREE QUARTERS LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEA6;UPPER THREE QUARTERS LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEA7;UPPER HALF LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEA8;LEFT HALF UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEA9;LEFT THREE QUARTERS UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEAA;RIGHT THREE QUARTERS UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEAB;RIGHT HALF UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEAC;UPPER HALF RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEAD;UPPER THREE QUARTERS RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEAE;LOWER THREE QUARTERS RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEAF;LOWER HALF RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1CEB0;HORIZONTAL ZIGZAG LINE;So;0;ON;;;;;N;;;;;\n1CEB1;KEYHOLE;So;0;ON;;;;;N;;;;;\n1CEB2;OLD PERSONAL COMPUTER WITH MONITOR IN PORTRAIT ORIENTATION;So;0;ON;;;;;N;;;;;\n1CEB3;BLACK RIGHT TRIANGLE CARET;So;0;ON;;;;;N;;;;;\n1CEBA;FRAGILE SYMBOL;So;0;ON;;;;;N;;;;;\n1CEBB;OFFICE BUILDING SYMBOL;So;0;ON;;;;;N;;;;;\n1CEBC;TREE SYMBOL;So;0;ON;;;;;N;;;;;\n1CEBD;APPLE SYMBOL;So;0;ON;;;;;N;;;;;\n1CEBE;CHERRY SYMBOL;So;0;ON;;;;;N;;;;;\n1CEBF;STRAWBERRY SYMBOL;So;0;ON;;;;;N;;;;;\n1CEC0;HEBE;So;0;ON;;;;;N;;;;;\n1CEC1;IRIS;So;0;ON;;;;;N;;;;;\n1CEC2;FLORA;So;0;ON;;;;;N;;;;;\n1CEC3;METIS;So;0;ON;;;;;N;;;;;\n1CEC4;PARTHENOPE;So;0;ON;;;;;N;;;;;\n1CEC5;VICTORIA;So;0;ON;;;;;N;;;;;\n1CEC6;EGERIA;So;0;ON;;;;;N;;;;;\n1CEC7;IRENE;So;0;ON;;;;;N;;;;;\n1CEC8;EUNOMIA;So;0;ON;;;;;N;;;;;\n1CEC9;PSYCHE;So;0;ON;;;;;N;;;;;\n1CECA;THETIS;So;0;ON;;;;;N;;;;;\n1CECB;MELPOMENE;So;0;ON;;;;;N;;;;;\n1CECC;FORTUNA;So;0;ON;;;;;N;;;;;\n1CECD;ASTRONOMICAL SYMBOL FOR ASTEROID PROSERPINA;So;0;ON;;;;;N;;;;;\n1CECE;BELLONA;So;0;ON;;;;;N;;;;;\n1CECF;AMPHITRITE;So;0;ON;;;;;N;;;;;\n1CED0;LEUKOTHEA;So;0;ON;;;;;N;;;;;\n1CEE0;GEOMANTIC FIGURE POPULUS;So;0;ON;;;;;N;;;;;\n1CEE1;GEOMANTIC FIGURE TRISTITIA;So;0;ON;;;;;N;;;;;\n1CEE2;GEOMANTIC FIGURE ALBUS;So;0;ON;;;;;N;;;;;\n1CEE3;GEOMANTIC FIGURE FORTUNA MAJOR;So;0;ON;;;;;N;;;;;\n1CEE4;GEOMANTIC FIGURE RUBEUS;So;0;ON;;;;;N;;;;;\n1CEE5;GEOMANTIC FIGURE ACQUISITIO;So;0;ON;;;;;N;;;;;\n1CEE6;GEOMANTIC FIGURE CONJUNCTIO;So;0;ON;;;;;N;;;;;\n1CEE7;GEOMANTIC FIGURE CAPUT DRACONIS;So;0;ON;;;;;N;;;;;\n1CEE8;GEOMANTIC FIGURE LAETITIA;So;0;ON;;;;;N;;;;;\n1CEE9;GEOMANTIC FIGURE CARCER;So;0;ON;;;;;N;;;;;\n1CEEA;GEOMANTIC FIGURE AMISSIO;So;0;ON;;;;;N;;;;;\n1CEEB;GEOMANTIC FIGURE PUELLA;So;0;ON;;;;;N;;;;;\n1CEEC;GEOMANTIC FIGURE FORTUNA MINOR;So;0;ON;;;;;N;;;;;\n1CEED;GEOMANTIC FIGURE PUER;So;0;ON;;;;;N;;;;;\n1CEEE;GEOMANTIC FIGURE CAUDA DRACONIS;So;0;ON;;;;;N;;;;;\n1CEEF;GEOMANTIC FIGURE VIA;So;0;ON;;;;;N;;;;;\n1CEF0;MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;;\n1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF03;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF04;ZNAMENNY COMBINING MARK NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF05;ZNAMENNY COMBINING MARK SREDNE ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF06;ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF07;ZNAMENNY COMBINING MARK POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF08;ZNAMENNY COMBINING MARK VYSOKO ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF09;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF0A;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF0B;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF0C;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;;\n1CF0D;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;;\n1CF0E;ZNAMENNY COMBINING MARK TSATA ON RIGHT;Mn;0;NSM;;;;;N;;;;;\n1CF0F;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;;\n1CF10;ZNAMENNY COMBINING MARK NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;;\n1CF11;ZNAMENNY COMBINING MARK SREDNE ON RIGHT;Mn;0;NSM;;;;;N;;;;;\n1CF12;ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;;\n1CF13;ZNAMENNY COMBINING MARK POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;;\n1CF14;ZNAMENNY COMBINING MARK VYSOKO ON RIGHT;Mn;0;NSM;;;;;N;;;;;\n1CF15;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;;\n1CF16;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;;\n1CF17;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;;\n1CF18;ZNAMENNY COMBINING MARK TSATA S KRYZHEM;Mn;0;NSM;;;;;N;;;;;\n1CF19;ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;;\n1CF1A;ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE;Mn;0;NSM;;;;;N;;;;;\n1CF1B;ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;;\n1CF1C;ZNAMENNY COMBINING MARK POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;;\n1CF1D;ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM;Mn;0;NSM;;;;;N;;;;;\n1CF1E;ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;;\n1CF1F;ZNAMENNY COMBINING MARK GORAZDO VYSOKO;Mn;0;NSM;;;;;N;;;;;\n1CF20;ZNAMENNY COMBINING MARK ZELO;Mn;0;NSM;;;;;N;;;;;\n1CF21;ZNAMENNY COMBINING MARK ON;Mn;0;NSM;;;;;N;;;;;\n1CF22;ZNAMENNY COMBINING MARK RAVNO;Mn;0;NSM;;;;;N;;;;;\n1CF23;ZNAMENNY COMBINING MARK TIKHAYA;Mn;0;NSM;;;;;N;;;;;\n1CF24;ZNAMENNY COMBINING MARK BORZAYA;Mn;0;NSM;;;;;N;;;;;\n1CF25;ZNAMENNY COMBINING MARK UDARKA;Mn;0;NSM;;;;;N;;;;;\n1CF26;ZNAMENNY COMBINING MARK PODVERTKA;Mn;0;NSM;;;;;N;;;;;\n1CF27;ZNAMENNY COMBINING MARK LOMKA;Mn;0;NSM;;;;;N;;;;;\n1CF28;ZNAMENNY COMBINING MARK KUPNAYA;Mn;0;NSM;;;;;N;;;;;\n1CF29;ZNAMENNY COMBINING MARK KACHKA;Mn;0;NSM;;;;;N;;;;;\n1CF2A;ZNAMENNY COMBINING MARK ZEVOK;Mn;0;NSM;;;;;N;;;;;\n1CF2B;ZNAMENNY COMBINING MARK SKOBA;Mn;0;NSM;;;;;N;;;;;\n1CF2C;ZNAMENNY COMBINING MARK RAZSEKA;Mn;0;NSM;;;;;N;;;;;\n1CF2D;ZNAMENNY COMBINING MARK KRYZH ON LEFT;Mn;0;NSM;;;;;N;;;;;\n1CF30;ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO;Mn;0;NSM;;;;;N;;;;;\n1CF31;ZNAMENNY COMBINING TONAL RANGE MARK SVETLO;Mn;0;NSM;;;;;N;;;;;\n1CF32;ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO;Mn;0;NSM;;;;;N;;;;;\n1CF33;ZNAMENNY COMBINING MARK ZADERZHKA;Mn;0;NSM;;;;;N;;;;;\n1CF34;ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA;Mn;0;NSM;;;;;N;;;;;\n1CF35;ZNAMENNY COMBINING MARK OTSECHKA;Mn;0;NSM;;;;;N;;;;;\n1CF36;ZNAMENNY COMBINING MARK PODCHASHIE;Mn;0;NSM;;;;;N;;;;;\n1CF37;ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL STROKE;Mn;0;NSM;;;;;N;;;;;\n1CF38;ZNAMENNY COMBINING MARK CHASHKA;Mn;0;NSM;;;;;N;;;;;\n1CF39;ZNAMENNY COMBINING MARK CHASHKA POLNAYA;Mn;0;NSM;;;;;N;;;;;\n1CF3A;ZNAMENNY COMBINING MARK OBLACHKO;Mn;0;NSM;;;;;N;;;;;\n1CF3B;ZNAMENNY COMBINING MARK SOROCHYA NOZHKA;Mn;0;NSM;;;;;N;;;;;\n1CF3C;ZNAMENNY COMBINING MARK TOCHKA;Mn;0;NSM;;;;;N;;;;;\n1CF3D;ZNAMENNY COMBINING MARK DVOETOCHIE;Mn;0;NSM;;;;;N;;;;;\n1CF3E;ZNAMENNY COMBINING ATTACHING VERTICAL OMET;Mn;0;NSM;;;;;N;;;;;\n1CF3F;ZNAMENNY COMBINING MARK CURVED OMET;Mn;0;NSM;;;;;N;;;;;\n1CF40;ZNAMENNY COMBINING MARK KRYZH;Mn;0;NSM;;;;;N;;;;;\n1CF41;ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR;Mn;0;NSM;;;;;N;;;;;\n1CF42;ZNAMENNY PRIZNAK MODIFIER LEVEL-2;Mn;0;NSM;;;;;N;;;;;\n1CF43;ZNAMENNY PRIZNAK MODIFIER LEVEL-3;Mn;0;NSM;;;;;N;;;;;\n1CF44;ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP;Mn;0;NSM;;;;;N;;;;;\n1CF45;ZNAMENNY PRIZNAK MODIFIER KRYZH;Mn;0;NSM;;;;;N;;;;;\n1CF46;ZNAMENNY PRIZNAK MODIFIER ROG;Mn;0;NSM;;;;;N;;;;;\n1CF50;ZNAMENNY NEUME KRYUK;So;0;L;;;;;N;;;;;\n1CF51;ZNAMENNY NEUME KRYUK TIKHY;So;0;L;;;;;N;;;;;\n1CF52;ZNAMENNY NEUME PARAKLIT;So;0;L;;;;;N;;;;;\n1CF53;ZNAMENNY NEUME DVA V CHELNU;So;0;L;;;;;N;;;;;\n1CF54;ZNAMENNY NEUME KLYUCH;So;0;L;;;;;N;;;;;\n1CF55;ZNAMENNY NEUME ZANOZHEK;So;0;L;;;;;N;;;;;\n1CF56;ZNAMENNY NEUME STOPITSA;So;0;L;;;;;N;;;;;\n1CF57;ZNAMENNY NEUME STOPITSA S OCHKOM;So;0;L;;;;;N;;;;;\n1CF58;ZNAMENNY NEUME PEREVODKA;So;0;L;;;;;N;;;;;\n1CF59;ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;\n1CF5A;ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA;So;0;L;;;;;N;;;;;\n1CF5B;ZNAMENNY NEUME CHELYUSTKA;So;0;L;;;;;N;;;;;\n1CF5C;ZNAMENNY NEUME PALKA;So;0;L;;;;;N;;;;;\n1CF5D;ZNAMENNY NEUME ZAPYATAYA;So;0;L;;;;;N;;;;;\n1CF5E;ZNAMENNY NEUME GOLUBCHIK BORZY;So;0;L;;;;;N;;;;;\n1CF5F;ZNAMENNY NEUME GOLUBCHIK TIKHY;So;0;L;;;;;N;;;;;\n1CF60;ZNAMENNY NEUME GOLUBCHIK MRACHNY;So;0;L;;;;;N;;;;;\n1CF61;ZNAMENNY NEUME GOLUBCHIK SVETLY;So;0;L;;;;;N;;;;;\n1CF62;ZNAMENNY NEUME GOLUBCHIK TRESVETLY;So;0;L;;;;;N;;;;;\n1CF63;ZNAMENNY NEUME VRAKHIYA PROSTAYA;So;0;L;;;;;N;;;;;\n1CF64;ZNAMENNY NEUME VRAKHIYA MRACHNAYA;So;0;L;;;;;N;;;;;\n1CF65;ZNAMENNY NEUME VRAKHIYA SVETLAYA;So;0;L;;;;;N;;;;;\n1CF66;ZNAMENNY NEUME VRAKHIYA TRESVETLAYA;So;0;L;;;;;N;;;;;\n1CF67;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA;So;0;L;;;;;N;;;;;\n1CF68;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA;So;0;L;;;;;N;;;;;\n1CF69;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;;\n1CF6A;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA;So;0;L;;;;;N;;;;;\n1CF6B;ZNAMENNY NEUME DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;;\n1CF6C;ZNAMENNY NEUME REVERSED CHELYUSTKA;So;0;L;;;;;N;;;;;\n1CF6D;ZNAMENNY NEUME DERBITSA;So;0;L;;;;;N;;;;;\n1CF6E;ZNAMENNY NEUME KHAMILO;So;0;L;;;;;N;;;;;\n1CF6F;ZNAMENNY NEUME CHASHKA;So;0;L;;;;;N;;;;;\n1CF70;ZNAMENNY NEUME PODCHASHIE;So;0;L;;;;;N;;;;;\n1CF71;ZNAMENNY NEUME SKAMEYTSA MRACHNAYA;So;0;L;;;;;N;;;;;\n1CF72;ZNAMENNY NEUME SKAMEYTSA SVETLAYA;So;0;L;;;;;N;;;;;\n1CF73;ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA;So;0;L;;;;;N;;;;;\n1CF74;ZNAMENNY NEUME SKAMEYTSA TIKHAYA;So;0;L;;;;;N;;;;;\n1CF75;ZNAMENNY NEUME DEMESTVENNY KLYUCH;So;0;L;;;;;N;;;;;\n1CF76;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;;\n1CF77;ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;;\n1CF78;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA;So;0;L;;;;;N;;;;;\n1CF79;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA;So;0;L;;;;;N;;;;;\n1CF7A;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA;So;0;L;;;;;N;;;;;\n1CF7B;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;\n1CF7C;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;;\n1CF7D;ZNAMENNY NEUME SLOZHITIE;So;0;L;;;;;N;;;;;\n1CF7E;ZNAMENNY NEUME SLOZHITIE S ZAPYATOY;So;0;L;;;;;N;;;;;\n1CF7F;ZNAMENNY NEUME SLOZHITIE ZAKRYTOE;So;0;L;;;;;N;;;;;\n1CF80;ZNAMENNY NEUME SLOZHITIE S KRYZHEM;So;0;L;;;;;N;;;;;\n1CF81;ZNAMENNY NEUME KRYZH;So;0;L;;;;;N;;;;;\n1CF82;ZNAMENNY NEUME ROG;So;0;L;;;;;N;;;;;\n1CF83;ZNAMENNY NEUME FITA;So;0;L;;;;;N;;;;;\n1CF84;ZNAMENNY NEUME KOBYLA;So;0;L;;;;;N;;;;;\n1CF85;ZNAMENNY NEUME ZMEYTSA;So;0;L;;;;;N;;;;;\n1CF86;ZNAMENNY NEUME STATYA;So;0;L;;;;;N;;;;;\n1CF87;ZNAMENNY NEUME STATYA S ZAPYATOY;So;0;L;;;;;N;;;;;\n1CF88;ZNAMENNY NEUME STATYA S KRYZHEM;So;0;L;;;;;N;;;;;\n1CF89;ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM;So;0;L;;;;;N;;;;;\n1CF8A;ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY;So;0;L;;;;;N;;;;;\n1CF8B;ZNAMENNY NEUME STATYA ZAKRYTAYA;So;0;L;;;;;N;;;;;\n1CF8C;ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY;So;0;L;;;;;N;;;;;\n1CF8D;ZNAMENNY NEUME STATYA S ROGOM;So;0;L;;;;;N;;;;;\n1CF8E;ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI;So;0;L;;;;;N;;;;;\n1CF8F;ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM;So;0;L;;;;;N;;;;;\n1CF90;ZNAMENNY NEUME POLKULIZMY;So;0;L;;;;;N;;;;;\n1CF91;ZNAMENNY NEUME STATYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;\n1CF92;ZNAMENNY NEUME STRELA PROSTAYA;So;0;L;;;;;N;;;;;\n1CF93;ZNAMENNY NEUME STRELA MRACHNOTIKHAYA;So;0;L;;;;;N;;;;;\n1CF94;ZNAMENNY NEUME STRELA KRYZHEVAYA;So;0;L;;;;;N;;;;;\n1CF95;ZNAMENNY NEUME STRELA POLUPOVODNAYA;So;0;L;;;;;N;;;;;\n1CF96;ZNAMENNY NEUME STRELA POVODNAYA;So;0;L;;;;;N;;;;;\n1CF97;ZNAMENNY NEUME STRELA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;\n1CF98;ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA;So;0;L;;;;;N;;;;;\n1CF99;ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;;\n1CF9A;ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA;So;0;L;;;;;N;;;;;\n1CF9B;ZNAMENNY NEUME STRELA DVOECHELNAYA;So;0;L;;;;;N;;;;;\n1CF9C;ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA;So;0;L;;;;;N;;;;;\n1CF9D;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA;So;0;L;;;;;N;;;;;\n1CF9E;ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;;\n1CF9F;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;;\n1CFA0;ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;\n1CFA1;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;\n1CFA2;ZNAMENNY NEUME STRELA GROMNAYA;So;0;L;;;;;N;;;;;\n1CFA3;ZNAMENNY NEUME STRELA GROMOPOVODNAYA;So;0;L;;;;;N;;;;;\n1CFA4;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;;\n1CFA5;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;;\n1CFA6;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;;\n1CFA7;ZNAMENNY NEUME MECHIK;So;0;L;;;;;N;;;;;\n1CFA8;ZNAMENNY NEUME MECHIK POVODNY;So;0;L;;;;;N;;;;;\n1CFA9;ZNAMENNY NEUME MECHIK KLYUCHEVOY;So;0;L;;;;;N;;;;;\n1CFAA;ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY;So;0;L;;;;;N;;;;;\n1CFAB;ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY;So;0;L;;;;;N;;;;;\n1CFAC;ZNAMENNY NEUME STRELA TRYASOGLASNAYA;So;0;L;;;;;N;;;;;\n1CFAD;ZNAMENNY NEUME STRELA TRYASOPOVODNAYA;So;0;L;;;;;N;;;;;\n1CFAE;ZNAMENNY NEUME STRELA TRYASOSTRELNAYA;So;0;L;;;;;N;;;;;\n1CFAF;ZNAMENNY NEUME OSOKA;So;0;L;;;;;N;;;;;\n1CFB0;ZNAMENNY NEUME OSOKA SVETLAYA;So;0;L;;;;;N;;;;;\n1CFB1;ZNAMENNY NEUME OSOKA TRESVETLAYA;So;0;L;;;;;N;;;;;\n1CFB2;ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA;So;0;L;;;;;N;;;;;\n1CFB3;ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;;\n1CFB4;ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;\n1CFB5;ZNAMENNY NEUME STRELA KRYUKOVAYA;So;0;L;;;;;N;;;;;\n1CFB6;ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA;So;0;L;;;;;N;;;;;\n1CFB7;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;\n1CFB8;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;\n1CFB9;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA;So;0;L;;;;;N;;;;;\n1CFBA;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA;So;0;L;;;;;N;;;;;\n1CFBB;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;;\n1CFBC;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;;\n1CFBD;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;;\n1CFBE;ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA;So;0;L;;;;;N;;;;;\n1CFBF;ZNAMENNY NEUME KUFISMA;So;0;L;;;;;N;;;;;\n1CFC0;ZNAMENNY NEUME OBLAKO;So;0;L;;;;;N;;;;;\n1CFC1;ZNAMENNY NEUME DUDA;So;0;L;;;;;N;;;;;\n1CFC2;ZNAMENNY NEUME NEMKA;So;0;L;;;;;N;;;;;\n1CFC3;ZNAMENNY NEUME PAUK;So;0;L;;;;;N;;;;;\n1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;\n1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;\n1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;\n1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;;\n1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;;\n1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;;\n1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;;\n1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;;\n1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;;\n1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;;\n1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;;\n1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;;\n1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;;\n1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;;\n1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;;\n1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;;\n1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;;\n1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;;\n1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;;\n1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;;\n1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;;\n1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;;\n1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;;\n1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;;\n1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;;\n1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;;\n1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;;\n1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;;\n1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;;\n1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;;\n1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;;\n1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;;\n1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;;\n1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;;\n1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;;\n1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;;\n1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;;\n1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;;\n1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;;\n1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;;\n1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;;\n1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;;\n1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;;\n1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;;\n1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;;\n1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;;\n1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;;\n1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;;\n1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;;\n1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;;\n1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;;\n1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;;\n1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;;\n1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;;\n1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;;\n1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;;\n1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;;\n1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;;\n1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;;\n1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;;\n1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;;\n1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;;\n1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;;\n1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;;\n1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;;\n1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;;\n1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;;\n1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;;\n1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;;\n1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;;\n1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;;\n1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;;\n1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;;\n1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;;\n1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;;\n1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;;\n1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;;\n1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;;\n1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;;\n1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;;\n1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;;\n1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;;\n1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;;\n1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;;\n1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;;\n1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;;\n1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;;\n1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;;\n1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;;\n1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;;\n1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;;\n1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;;\n1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;;\n1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;;\n1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;;\n1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;;\n1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;;\n1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;;\n1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;;\n1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;;\n1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;;\n1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;;\n1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;;\n1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;;\n1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;;\n1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;;\n1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;;\n1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;;\n1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;;\n1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;;\n1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;;\n1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;;\n1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;;\n1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;;\n1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;;\n1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;;\n1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;;\n1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;;\n1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;;\n1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;;\n1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;;\n1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;;\n1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;;\n1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;;\n1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;;\n1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;;\n1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;;\n1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;;\n1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;;\n1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;;\n1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;;\n1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;;\n1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;;\n1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;;\n1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;;\n1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;;\n1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;;\n1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;;\n1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;;\n1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;;\n1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;;\n1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;;\n1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;;\n1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;;\n1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;;\n1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;\n1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;;\n1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;;\n1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;;\n1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;\n1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;;\n1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;;\n1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;;\n1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;;\n1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;;\n1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;;\n1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;;\n1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;;\n1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;;\n1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;;\n1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;;\n1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;;\n1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;;\n1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;;\n1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;;\n1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;;\n1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;;\n1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;;\n1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;;\n1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;;\n1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;;\n1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;;\n1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;\n1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;\n1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;;\n1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;;\n1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;;\n1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;;\n1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;;\n1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;;\n1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;;\n1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;;\n1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;;\n1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;;\n1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;;\n1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;;\n1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;;\n1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;;\n1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;;\n1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;;\n1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;;\n1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;;\n1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;;\n1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;;\n1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;;\n1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;;\n1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;;\n1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;;\n1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;;\n1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;;\n1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;;\n1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;;\n1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;;\n1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;;\n1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;;\n1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;;\n1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;;\n1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;;\n1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;\n1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;\n1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;\n1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;\n1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;\n1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;\n1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;\n1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;\n1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;;\n1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;;\n1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;;\n1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;;\n1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;;\n1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;;\n1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;;\n1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;;\n1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;;\n1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;;\n1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;;\n1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;;\n1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;;\n1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;;\n1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;;\n1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;;\n1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;;\n1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;;\n1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;;\n1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;;\n1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;;\n1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;;\n1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;;\n1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;;\n1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;;\n1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;;\n1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;;\n1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;;\n1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;;\n1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;;\n1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;;\n1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;;\n1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;;\n1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;;\n1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;;\n1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;;\n1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;;\n1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;;\n1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;;\n1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;;\n1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;;\n1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;;\n1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;;\n1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;;\n1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;;\n1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;;\n1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;;\n1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;;\n1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;;\n1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;;\n1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;;\n1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;;\n1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;;\n1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;;\n1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;;\n1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;;\n1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;;\n1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;;\n1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;;\n1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;;\n1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;;\n1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;\n1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;\n1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;;\n1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;;\n1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;\n1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;\n1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;;\n1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;;\n1D129;MUSICAL SYMBOL MULTIPLE MEASURE REST;So;0;L;;;;;N;;;;;\n1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;;\n1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;;\n1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;;\n1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;;\n1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;;\n1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;;\n1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;;\n1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;;\n1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;;\n1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;;\n1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;;\n1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;;\n1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;;\n1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;;\n1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;;\n1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;;\n1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;;\n1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;;\n1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;;\n1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;;\n1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;;\n1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;;\n1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;;\n1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;;\n1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;;\n1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;;\n1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;;\n1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;;\n1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;;\n1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;;\n1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;;\n1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;;\n1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;;\n1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;;\n1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;;\n1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;;\n1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;\n1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;\n1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;;\n1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;;\n1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;;\n1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;;\n1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;\n1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;\n1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;;\n1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;;\n1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;;\n1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;;\n1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;;\n1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;;\n1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;;\n1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;;\n1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;;\n1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;;\n1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;;\n1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;;\n1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;;\n1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;;\n1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;;\n1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;;\n1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;;\n1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;;\n1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;;\n1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;;\n1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;;\n1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;;\n1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;;\n1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;;\n1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;;\n1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;;\n1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;;\n1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;;\n1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;;\n1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;;\n1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;;\n1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;;\n1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;;\n1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;;\n1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;;\n1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;;\n1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;;\n1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;;\n1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;;\n1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;;\n1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;;\n1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;;\n1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;;\n1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;;\n1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;;\n1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;;\n1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;;\n1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;;\n1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;;\n1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;;\n1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;;\n1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;;\n1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;;\n1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;;\n1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;;\n1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;;\n1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;;\n1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;;\n1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;;\n1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;;\n1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;;\n1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;;\n1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;;\n1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;;\n1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;;\n1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;;\n1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;;\n1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;;\n1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;;\n1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;;\n1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;;\n1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;;\n1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;;\n1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;;\n1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;;\n1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;;\n1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;;\n1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;;\n1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;;\n1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;;\n1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;;\n1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;;\n1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;;\n1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;;\n1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;;\n1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;;\n1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;;\n1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;;\n1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;;\n1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;;\n1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;;\n1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;;\n1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;;\n1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;;\n1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;;\n1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;;\n1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;;\n1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;;\n1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;;\n1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;;\n1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;;\n1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;;\n1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;;\n1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;;\n1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;;\n1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;;\n1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;;\n1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;;\n1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;;\n1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;;\n1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;;\n1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;;\n1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;;\n1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;\n1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;\n1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;\n1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;\n1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;\n1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;\n1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;;\n1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;;\n1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;;\n1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;;\n1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;;\n1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;;\n1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;;\n1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;;\n1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;;\n1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;;\n1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;;\n1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;;\n1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;;\n1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;;\n1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;;\n1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;;\n1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;;\n1D1DE;MUSICAL SYMBOL KIEVAN C CLEF;So;0;L;;;;;N;;;;;\n1D1DF;MUSICAL SYMBOL KIEVAN END OF PIECE;So;0;L;;;;;N;;;;;\n1D1E0;MUSICAL SYMBOL KIEVAN FINAL NOTE;So;0;L;;;;;N;;;;;\n1D1E1;MUSICAL SYMBOL KIEVAN RECITATIVE MARK;So;0;L;;;;;N;;;;;\n1D1E2;MUSICAL SYMBOL KIEVAN WHOLE NOTE;So;0;L;;;;;N;;;;;\n1D1E3;MUSICAL SYMBOL KIEVAN HALF NOTE;So;0;L;;;;;N;;;;;\n1D1E4;MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN;So;0;L;;;;;N;;;;;\n1D1E5;MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP;So;0;L;;;;;N;;;;;\n1D1E6;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN;So;0;L;;;;;N;;;;;\n1D1E7;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP;So;0;L;;;;;N;;;;;\n1D1E8;MUSICAL SYMBOL KIEVAN FLAT SIGN;So;0;L;;;;;N;;;;;\n1D1E9;MUSICAL SYMBOL SORI;So;0;ON;;;;;N;;;;;\n1D1EA;MUSICAL SYMBOL KORON;So;0;ON;;;;;N;;;;;\n1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;\n1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;\n1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;\n1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;\n1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;\n1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;;\n1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;\n1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;\n1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;;\n1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;;\n1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;\n1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;\n1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;\n1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;\n1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;;\n1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;;\n1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;\n1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;\n1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;\n1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;;\n1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;;\n1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;;\n1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;\n1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;\n1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;\n1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;\n1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;\n1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;\n1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;\n1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;\n1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;\n1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;\n1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;\n1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;\n1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;\n1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;\n1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;\n1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;\n1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;\n1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;\n1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;\n1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;\n1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;\n1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;\n1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;;\n1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;;\n1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;;\n1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;;\n1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;;\n1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;;\n1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;;\n1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;;\n1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;;\n1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;;\n1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;;\n1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;;\n1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;;\n1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;;\n1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;;\n1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;;\n1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;;\n1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;\n1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;\n1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;\n1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;\n1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;\n1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;;\n1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;;\n1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;;\n1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;;\n1D2C0;KAKTOVIK NUMERAL ZERO;No;0;L;;;;0;N;;;;;\n1D2C1;KAKTOVIK NUMERAL ONE;No;0;L;;;;1;N;;;;;\n1D2C2;KAKTOVIK NUMERAL TWO;No;0;L;;;;2;N;;;;;\n1D2C3;KAKTOVIK NUMERAL THREE;No;0;L;;;;3;N;;;;;\n1D2C4;KAKTOVIK NUMERAL FOUR;No;0;L;;;;4;N;;;;;\n1D2C5;KAKTOVIK NUMERAL FIVE;No;0;L;;;;5;N;;;;;\n1D2C6;KAKTOVIK NUMERAL SIX;No;0;L;;;;6;N;;;;;\n1D2C7;KAKTOVIK NUMERAL SEVEN;No;0;L;;;;7;N;;;;;\n1D2C8;KAKTOVIK NUMERAL EIGHT;No;0;L;;;;8;N;;;;;\n1D2C9;KAKTOVIK NUMERAL NINE;No;0;L;;;;9;N;;;;;\n1D2CA;KAKTOVIK NUMERAL TEN;No;0;L;;;;10;N;;;;;\n1D2CB;KAKTOVIK NUMERAL ELEVEN;No;0;L;;;;11;N;;;;;\n1D2CC;KAKTOVIK NUMERAL TWELVE;No;0;L;;;;12;N;;;;;\n1D2CD;KAKTOVIK NUMERAL THIRTEEN;No;0;L;;;;13;N;;;;;\n1D2CE;KAKTOVIK NUMERAL FOURTEEN;No;0;L;;;;14;N;;;;;\n1D2CF;KAKTOVIK NUMERAL FIFTEEN;No;0;L;;;;15;N;;;;;\n1D2D0;KAKTOVIK NUMERAL SIXTEEN;No;0;L;;;;16;N;;;;;\n1D2D1;KAKTOVIK NUMERAL SEVENTEEN;No;0;L;;;;17;N;;;;;\n1D2D2;KAKTOVIK NUMERAL EIGHTEEN;No;0;L;;;;18;N;;;;;\n1D2D3;KAKTOVIK NUMERAL NINETEEN;No;0;L;;;;19;N;;;;;\n1D2E0;MAYAN NUMERAL ZERO;No;0;L;;;;0;N;;;;;\n1D2E1;MAYAN NUMERAL ONE;No;0;L;;;;1;N;;;;;\n1D2E2;MAYAN NUMERAL TWO;No;0;L;;;;2;N;;;;;\n1D2E3;MAYAN NUMERAL THREE;No;0;L;;;;3;N;;;;;\n1D2E4;MAYAN NUMERAL FOUR;No;0;L;;;;4;N;;;;;\n1D2E5;MAYAN NUMERAL FIVE;No;0;L;;;;5;N;;;;;\n1D2E6;MAYAN NUMERAL SIX;No;0;L;;;;6;N;;;;;\n1D2E7;MAYAN NUMERAL SEVEN;No;0;L;;;;7;N;;;;;\n1D2E8;MAYAN NUMERAL EIGHT;No;0;L;;;;8;N;;;;;\n1D2E9;MAYAN NUMERAL NINE;No;0;L;;;;9;N;;;;;\n1D2EA;MAYAN NUMERAL TEN;No;0;L;;;;10;N;;;;;\n1D2EB;MAYAN NUMERAL ELEVEN;No;0;L;;;;11;N;;;;;\n1D2EC;MAYAN NUMERAL TWELVE;No;0;L;;;;12;N;;;;;\n1D2ED;MAYAN NUMERAL THIRTEEN;No;0;L;;;;13;N;;;;;\n1D2EE;MAYAN NUMERAL FOURTEEN;No;0;L;;;;14;N;;;;;\n1D2EF;MAYAN NUMERAL FIFTEEN;No;0;L;;;;15;N;;;;;\n1D2F0;MAYAN NUMERAL SIXTEEN;No;0;L;;;;16;N;;;;;\n1D2F1;MAYAN NUMERAL SEVENTEEN;No;0;L;;;;17;N;;;;;\n1D2F2;MAYAN NUMERAL EIGHTEEN;No;0;L;;;;18;N;;;;;\n1D2F3;MAYAN NUMERAL NINETEEN;No;0;L;;;;19;N;;;;;\n1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;;\n1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;;\n1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;;\n1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;;\n1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;;\n1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;\n1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;;\n1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;;\n1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;;\n1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;;\n1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;;\n1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;;\n1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;;\n1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;\n1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;;\n1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;;\n1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;;\n1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;;\n1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;\n1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;;\n1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;;\n1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;;\n1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;;\n1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;\n1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;\n1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;;\n1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;;\n1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;;\n1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;;\n1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;;\n1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;;\n1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;;\n1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;;\n1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;;\n1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;;\n1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;;\n1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;;\n1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;;\n1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;;\n1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;;\n1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;;\n1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;;\n1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;;\n1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;;\n1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;;\n1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;;\n1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;;\n1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;;\n1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;;\n1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;;\n1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;;\n1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;;\n1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;;\n1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;;\n1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;;\n1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;;\n1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;;\n1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;;\n1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;;\n1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;;\n1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;;\n1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;;\n1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;;\n1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;;\n1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;;\n1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;;\n1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;;\n1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;;\n1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;;\n1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;;\n1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;;\n1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;;\n1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;;\n1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;;\n1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;;\n1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;;\n1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;;\n1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;;\n1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;;\n1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;;\n1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;;\n1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;;\n1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;;\n1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;;\n1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;;\n1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;;\n1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;;\n1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;;\n1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;;\n1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;;\n1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;;\n1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;;\n1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;;\n1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;;\n1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;;\n1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;;\n1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;;\n1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;;\n1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;;\n1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;;\n1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;;\n1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;;\n1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;;\n1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;;\n1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;;\n1D372;IDEOGRAPHIC TALLY MARK ONE;No;0;L;;;;1;N;;;;;\n1D373;IDEOGRAPHIC TALLY MARK TWO;No;0;L;;;;2;N;;;;;\n1D374;IDEOGRAPHIC TALLY MARK THREE;No;0;L;;;;3;N;;;;;\n1D375;IDEOGRAPHIC TALLY MARK FOUR;No;0;L;;;;4;N;;;;;\n1D376;IDEOGRAPHIC TALLY MARK FIVE;No;0;L;;;;5;N;;;;;\n1D377;TALLY MARK ONE;No;0;L;;;;1;N;;;;;\n1D378;TALLY MARK FIVE;No;0;L;;;;5;N;;;;;\n1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;\n1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;\n1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;\n1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;\n1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;\n1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;\n1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;\n1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;\n1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;\n1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;\n1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;\n1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;\n1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;\n1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;\n1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;\n1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;\n1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;\n1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;\n1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;\n1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;\n1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;\n1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;\n1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;\n1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;\n1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;\n1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;\n1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;\n1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;\n1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;\n1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;\n1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;\n1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;\n1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;\n1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;\n1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;\n1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;\n1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;\n1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;\n1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;\n1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;\n1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;\n1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;\n1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;\n1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;\n1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;\n1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;\n1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;\n1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;\n1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;\n1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;\n1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;\n1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;\n1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;\n1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;\n1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;\n1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;\n1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;\n1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;\n1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;\n1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;\n1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;\n1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;\n1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;\n1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;\n1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;\n1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;\n1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;\n1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;\n1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;\n1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;\n1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;\n1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;\n1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;\n1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;\n1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;\n1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;\n1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;\n1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;\n1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;\n1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;\n1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;\n1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;\n1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;\n1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;\n1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;\n1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;\n1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;\n1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;\n1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;\n1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;\n1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;\n1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;\n1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;\n1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;\n1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;\n1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;\n1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;\n1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;\n1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;\n1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;\n1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;\n1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;\n1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;\n1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;\n1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;\n1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;\n1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;\n1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;\n1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;\n1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;\n1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;\n1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;\n1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;\n1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;\n1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;\n1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;\n1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;\n1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;\n1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;\n1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;\n1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;\n1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;\n1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;\n1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;\n1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;\n1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;\n1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;\n1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;\n1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;\n1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;\n1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;\n1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;\n1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;\n1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;\n1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;\n1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;\n1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;\n1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;\n1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;\n1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;\n1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;\n1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;\n1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;\n1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;\n1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;\n1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;\n1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;\n1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;\n1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;\n1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;\n1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;\n1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;\n1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;\n1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;\n1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;\n1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;\n1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;\n1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;\n1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;\n1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;\n1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;\n1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;\n1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;\n1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;\n1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;\n1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;\n1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;\n1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;\n1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;\n1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;\n1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;\n1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;\n1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;\n1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;\n1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;\n1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;\n1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;\n1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;\n1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;\n1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;\n1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;\n1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;\n1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;\n1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;\n1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;\n1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;\n1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;\n1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;\n1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;\n1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;\n1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;\n1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;\n1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;\n1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;\n1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;\n1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;\n1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;\n1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;\n1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;\n1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;;\n1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;;\n1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;\n1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;\n1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;\n1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;\n1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;\n1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;\n1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;\n1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;\n1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;\n1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;\n1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;\n1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;\n1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;\n1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;\n1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;\n1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;\n1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;\n1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;\n1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;\n1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;\n1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;\n1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;\n1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;\n1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;\n1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;\n1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;ON;<font> 2207;;;;N;;;;;\n1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;\n1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;\n1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;\n1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;\n1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;\n1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;\n1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;\n1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;\n1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;\n1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;\n1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;\n1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;\n1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;\n1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;\n1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;\n1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;\n1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;\n1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;\n1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;\n1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;\n1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;\n1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;\n1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;\n1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;\n1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;\n1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;\n1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;\n1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;\n1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;\n1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;\n1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;\n1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;\n1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;\n1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;\n1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;\n1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;\n1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;\n1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;\n1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;\n1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;\n1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;\n1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;\n1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;\n1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;\n1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;\n1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;\n1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;\n1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;\n1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;\n1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;\n1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;\n1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;\n1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;\n1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;\n1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;\n1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;\n1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;\n1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;ON;<font> 2207;;;;N;;;;;\n1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;\n1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;\n1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;\n1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;\n1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;\n1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;\n1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;\n1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;\n1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;\n1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;\n1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;\n1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;\n1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;\n1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;\n1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;\n1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;\n1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;\n1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;\n1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;\n1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;\n1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;\n1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;\n1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;\n1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;\n1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;\n1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;\n1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;\n1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;\n1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;\n1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;\n1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;\n1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;\n1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;\n1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;\n1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;\n1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;\n1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;\n1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;\n1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;\n1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;\n1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;\n1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;\n1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;\n1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;\n1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;\n1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;\n1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;\n1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;\n1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;\n1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;\n1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;\n1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;\n1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;\n1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;\n1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;\n1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;\n1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;\n1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;ON;<font> 2207;;;;N;;;;;\n1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;\n1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;\n1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;\n1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;\n1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;\n1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;\n1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;\n1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;\n1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;\n1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;\n1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;\n1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;\n1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;\n1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;\n1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;\n1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;\n1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;\n1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;\n1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;\n1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;\n1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;\n1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;\n1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;\n1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;\n1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;\n1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;\n1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;\n1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;\n1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;\n1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;\n1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;\n1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;\n1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;\n1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;\n1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;\n1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;\n1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;\n1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;\n1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;\n1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;\n1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;\n1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;\n1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;\n1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;\n1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;\n1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;\n1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;\n1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;\n1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;\n1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;\n1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;\n1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;\n1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;\n1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;\n1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;\n1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;\n1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;\n1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;ON;<font> 2207;;;;N;;;;;\n1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;\n1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;\n1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;\n1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;\n1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;\n1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;\n1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;\n1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;\n1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;\n1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;\n1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;\n1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;\n1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;\n1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;\n1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;\n1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;\n1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;\n1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;\n1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;\n1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;\n1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;\n1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;\n1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;\n1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;\n1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;\n1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;\n1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;\n1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;\n1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;\n1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;\n1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;\n1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;\n1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;\n1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;\n1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;\n1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;\n1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;\n1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;\n1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;\n1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;\n1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;\n1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;\n1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;\n1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;\n1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;\n1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;\n1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;\n1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;\n1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;\n1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;\n1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;\n1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;\n1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;\n1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;\n1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;\n1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;\n1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;\n1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;ON;<font> 2207;;;;N;;;;;\n1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;\n1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;\n1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;\n1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;\n1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;\n1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;\n1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;\n1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;\n1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;\n1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;\n1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;\n1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;\n1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;\n1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;\n1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;\n1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;\n1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;\n1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;\n1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;\n1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;\n1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;\n1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;\n1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;\n1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;\n1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;\n1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON;<font> 2202;;;;Y;;;;;\n1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;\n1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;\n1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;\n1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;\n1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;\n1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;\n1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L;<font> 03DC;;;;N;;;;;\n1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L;<font> 03DD;;;;N;;;;;\n1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;\n1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;\n1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;\n1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;\n1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;\n1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;\n1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;\n1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;\n1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;\n1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;\n1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;\n1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;\n1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;\n1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;\n1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;\n1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;\n1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;\n1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;\n1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;\n1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;\n1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;\n1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;\n1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;\n1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;\n1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;\n1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;\n1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;\n1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;\n1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;\n1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;\n1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;\n1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;\n1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;\n1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;\n1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;\n1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;\n1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;\n1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;\n1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;\n1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;\n1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;\n1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;\n1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;\n1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;\n1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;\n1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;\n1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;\n1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;\n1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;\n1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;\n1D800;SIGNWRITING HAND-FIST INDEX;So;0;L;;;;;N;;;;;\n1D801;SIGNWRITING HAND-CIRCLE INDEX;So;0;L;;;;;N;;;;;\n1D802;SIGNWRITING HAND-CUP INDEX;So;0;L;;;;;N;;;;;\n1D803;SIGNWRITING HAND-OVAL INDEX;So;0;L;;;;;N;;;;;\n1D804;SIGNWRITING HAND-HINGE INDEX;So;0;L;;;;;N;;;;;\n1D805;SIGNWRITING HAND-ANGLE INDEX;So;0;L;;;;;N;;;;;\n1D806;SIGNWRITING HAND-FIST INDEX BENT;So;0;L;;;;;N;;;;;\n1D807;SIGNWRITING HAND-CIRCLE INDEX BENT;So;0;L;;;;;N;;;;;\n1D808;SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT;So;0;L;;;;;N;;;;;\n1D809;SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE;So;0;L;;;;;N;;;;;\n1D80A;SIGNWRITING HAND-FIST INDEX CUPPED;So;0;L;;;;;N;;;;;\n1D80B;SIGNWRITING HAND-FIST INDEX HINGED;So;0;L;;;;;N;;;;;\n1D80C;SIGNWRITING HAND-FIST INDEX HINGED LOW;So;0;L;;;;;N;;;;;\n1D80D;SIGNWRITING HAND-CIRCLE INDEX HINGE;So;0;L;;;;;N;;;;;\n1D80E;SIGNWRITING HAND-FIST INDEX MIDDLE;So;0;L;;;;;N;;;;;\n1D80F;SIGNWRITING HAND-CIRCLE INDEX MIDDLE;So;0;L;;;;;N;;;;;\n1D810;SIGNWRITING HAND-FIST INDEX MIDDLE BENT;So;0;L;;;;;N;;;;;\n1D811;SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES;So;0;L;;;;;N;;;;;\n1D812;SIGNWRITING HAND-FIST INDEX MIDDLE HINGED;So;0;L;;;;;N;;;;;\n1D813;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED;So;0;L;;;;;N;;;;;\n1D814;SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP;So;0;L;;;;;N;;;;;\n1D815;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED;So;0;L;;;;;N;;;;;\n1D816;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT;So;0;L;;;;;N;;;;;\n1D817;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT;So;0;L;;;;;N;;;;;\n1D818;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED;So;0;L;;;;;N;;;;;\n1D819;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED;So;0;L;;;;;N;;;;;\n1D81A;SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED;So;0;L;;;;;N;;;;;\n1D81B;SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED;So;0;L;;;;;N;;;;;\n1D81C;SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX;So;0;L;;;;;N;;;;;\n1D81D;SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE;So;0;L;;;;;N;;;;;\n1D81E;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB;So;0;L;;;;;N;;;;;\n1D81F;SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB;So;0;L;;;;;N;;;;;\n1D820;SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT;So;0;L;;;;;N;;;;;\n1D821;SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT;So;0;L;;;;;N;;;;;\n1D822;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT;So;0;L;;;;;N;;;;;\n1D823;SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE;So;0;L;;;;;N;;;;;\n1D824;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE;So;0;L;;;;;N;;;;;\n1D825;SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED;So;0;L;;;;;N;;;;;\n1D826;SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE;So;0;L;;;;;N;;;;;\n1D827;SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD;So;0;L;;;;;N;;;;;\n1D828;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED;So;0;L;;;;;N;;;;;\n1D829;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED;So;0;L;;;;;N;;;;;\n1D82A;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED;So;0;L;;;;;N;;;;;\n1D82B;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED;So;0;L;;;;;N;;;;;\n1D82C;SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT;So;0;L;;;;;N;;;;;\n1D82D;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE;So;0;L;;;;;N;;;;;\n1D82E;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED;So;0;L;;;;;N;;;;;\n1D82F;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT;So;0;L;;;;;N;;;;;\n1D830;SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP;So;0;L;;;;;N;;;;;\n1D831;SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP;So;0;L;;;;;N;;;;;\n1D832;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE;So;0;L;;;;;N;;;;;\n1D833;SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE;So;0;L;;;;;N;;;;;\n1D834;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD;So;0;L;;;;;N;;;;;\n1D835;SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD;So;0;L;;;;;N;;;;;\n1D836;SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP;So;0;L;;;;;N;;;;;\n1D837;SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP;So;0;L;;;;;N;;;;;\n1D838;SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP;So;0;L;;;;;N;;;;;\n1D839;SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED;So;0;L;;;;;N;;;;;\n1D83A;SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP;So;0;L;;;;;N;;;;;\n1D83B;SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP;So;0;L;;;;;N;;;;;\n1D83C;SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP;So;0;L;;;;;N;;;;;\n1D83D;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED;So;0;L;;;;;N;;;;;\n1D83E;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT;So;0;L;;;;;N;;;;;\n1D83F;SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED;So;0;L;;;;;N;;;;;\n1D840;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP;So;0;L;;;;;N;;;;;\n1D841;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED;So;0;L;;;;;N;;;;;\n1D842;SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP;So;0;L;;;;;N;;;;;\n1D843;SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED;So;0;L;;;;;N;;;;;\n1D844;SIGNWRITING HAND-FLAT FOUR FINGERS;So;0;L;;;;;N;;;;;\n1D845;SIGNWRITING HAND-FLAT FOUR FINGERS BENT;So;0;L;;;;;N;;;;;\n1D846;SIGNWRITING HAND-FLAT FOUR FINGERS HINGED;So;0;L;;;;;N;;;;;\n1D847;SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;;\n1D848;SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT;So;0;L;;;;;N;;;;;\n1D849;SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;;\n1D84A;SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT;So;0;L;;;;;N;;;;;\n1D84B;SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED;So;0;L;;;;;N;;;;;\n1D84C;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;;\n1D84D;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;;\n1D84E;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT;So;0;L;;;;;N;;;;;\n1D84F;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT;So;0;L;;;;;N;;;;;\n1D850;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT;So;0;L;;;;;N;;;;;\n1D851;SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT;So;0;L;;;;;N;;;;;\n1D852;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD;So;0;L;;;;;N;;;;;\n1D853;SIGNWRITING HAND-CUP FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;;\n1D854;SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN;So;0;L;;;;;N;;;;;\n1D855;SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN;So;0;L;;;;;N;;;;;\n1D856;SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD;So;0;L;;;;;N;;;;;\n1D857;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED;So;0;L;;;;;N;;;;;\n1D858;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE;So;0;L;;;;;N;;;;;\n1D859;SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB;So;0;L;;;;;N;;;;;\n1D85A;SIGNWRITING HAND-FLAT;So;0;L;;;;;N;;;;;\n1D85B;SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS;So;0;L;;;;;N;;;;;\n1D85C;SIGNWRITING HAND-FLAT HEEL;So;0;L;;;;;N;;;;;\n1D85D;SIGNWRITING HAND-FLAT THUMB SIDE;So;0;L;;;;;N;;;;;\n1D85E;SIGNWRITING HAND-FLAT HEEL THUMB SIDE;So;0;L;;;;;N;;;;;\n1D85F;SIGNWRITING HAND-FLAT THUMB BENT;So;0;L;;;;;N;;;;;\n1D860;SIGNWRITING HAND-FLAT THUMB FORWARD;So;0;L;;;;;N;;;;;\n1D861;SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE;So;0;L;;;;;N;;;;;\n1D862;SIGNWRITING HAND-FLAT SPLIT CENTRE;So;0;L;;;;;N;;;;;\n1D863;SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE;So;0;L;;;;;N;;;;;\n1D864;SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT;So;0;L;;;;;N;;;;;\n1D865;SIGNWRITING HAND-FLAT SPLIT LITTLE;So;0;L;;;;;N;;;;;\n1D866;SIGNWRITING HAND-CLAW;So;0;L;;;;;N;;;;;\n1D867;SIGNWRITING HAND-CLAW THUMB SIDE;So;0;L;;;;;N;;;;;\n1D868;SIGNWRITING HAND-CLAW NO THUMB;So;0;L;;;;;N;;;;;\n1D869;SIGNWRITING HAND-CLAW THUMB FORWARD;So;0;L;;;;;N;;;;;\n1D86A;SIGNWRITING HAND-HOOK CURLICUE;So;0;L;;;;;N;;;;;\n1D86B;SIGNWRITING HAND-HOOK;So;0;L;;;;;N;;;;;\n1D86C;SIGNWRITING HAND-CUP OPEN;So;0;L;;;;;N;;;;;\n1D86D;SIGNWRITING HAND-CUP;So;0;L;;;;;N;;;;;\n1D86E;SIGNWRITING HAND-CUP OPEN THUMB SIDE;So;0;L;;;;;N;;;;;\n1D86F;SIGNWRITING HAND-CUP THUMB SIDE;So;0;L;;;;;N;;;;;\n1D870;SIGNWRITING HAND-CUP OPEN NO THUMB;So;0;L;;;;;N;;;;;\n1D871;SIGNWRITING HAND-CUP NO THUMB;So;0;L;;;;;N;;;;;\n1D872;SIGNWRITING HAND-CUP OPEN THUMB FORWARD;So;0;L;;;;;N;;;;;\n1D873;SIGNWRITING HAND-CUP THUMB FORWARD;So;0;L;;;;;N;;;;;\n1D874;SIGNWRITING HAND-CURLICUE OPEN;So;0;L;;;;;N;;;;;\n1D875;SIGNWRITING HAND-CURLICUE;So;0;L;;;;;N;;;;;\n1D876;SIGNWRITING HAND-CIRCLE;So;0;L;;;;;N;;;;;\n1D877;SIGNWRITING HAND-OVAL;So;0;L;;;;;N;;;;;\n1D878;SIGNWRITING HAND-OVAL THUMB SIDE;So;0;L;;;;;N;;;;;\n1D879;SIGNWRITING HAND-OVAL NO THUMB;So;0;L;;;;;N;;;;;\n1D87A;SIGNWRITING HAND-OVAL THUMB FORWARD;So;0;L;;;;;N;;;;;\n1D87B;SIGNWRITING HAND-HINGE OPEN;So;0;L;;;;;N;;;;;\n1D87C;SIGNWRITING HAND-HINGE OPEN THUMB FORWARD;So;0;L;;;;;N;;;;;\n1D87D;SIGNWRITING HAND-HINGE;So;0;L;;;;;N;;;;;\n1D87E;SIGNWRITING HAND-HINGE SMALL;So;0;L;;;;;N;;;;;\n1D87F;SIGNWRITING HAND-HINGE OPEN THUMB SIDE;So;0;L;;;;;N;;;;;\n1D880;SIGNWRITING HAND-HINGE THUMB SIDE;So;0;L;;;;;N;;;;;\n1D881;SIGNWRITING HAND-HINGE OPEN NO THUMB;So;0;L;;;;;N;;;;;\n1D882;SIGNWRITING HAND-HINGE NO THUMB;So;0;L;;;;;N;;;;;\n1D883;SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX;So;0;L;;;;;N;;;;;\n1D884;SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING;So;0;L;;;;;N;;;;;\n1D885;SIGNWRITING HAND-ANGLE;So;0;L;;;;;N;;;;;\n1D886;SIGNWRITING HAND-FIST INDEX MIDDLE RING;So;0;L;;;;;N;;;;;\n1D887;SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING;So;0;L;;;;;N;;;;;\n1D888;SIGNWRITING HAND-HINGE INDEX MIDDLE RING;So;0;L;;;;;N;;;;;\n1D889;SIGNWRITING HAND-ANGLE INDEX MIDDLE RING;So;0;L;;;;;N;;;;;\n1D88A;SIGNWRITING HAND-HINGE LITTLE;So;0;L;;;;;N;;;;;\n1D88B;SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT;So;0;L;;;;;N;;;;;\n1D88C;SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED;So;0;L;;;;;N;;;;;\n1D88D;SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED;So;0;L;;;;;N;;;;;\n1D88E;SIGNWRITING HAND-FIST LITTLE DOWN;So;0;L;;;;;N;;;;;\n1D88F;SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT;So;0;L;;;;;N;;;;;\n1D890;SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED;So;0;L;;;;;N;;;;;\n1D891;SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED;So;0;L;;;;;N;;;;;\n1D892;SIGNWRITING HAND-FIST LITTLE UP;So;0;L;;;;;N;;;;;\n1D893;SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP;So;0;L;;;;;N;;;;;\n1D894;SIGNWRITING HAND-CIRCLE LITTLE UP;So;0;L;;;;;N;;;;;\n1D895;SIGNWRITING HAND-OVAL LITTLE UP;So;0;L;;;;;N;;;;;\n1D896;SIGNWRITING HAND-ANGLE LITTLE UP;So;0;L;;;;;N;;;;;\n1D897;SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE;So;0;L;;;;;N;;;;;\n1D898;SIGNWRITING HAND-FIST LITTLE BENT;So;0;L;;;;;N;;;;;\n1D899;SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB;So;0;L;;;;;N;;;;;\n1D89A;SIGNWRITING HAND-FIST LITTLE THUMB;So;0;L;;;;;N;;;;;\n1D89B;SIGNWRITING HAND-HINGE LITTLE THUMB;So;0;L;;;;;N;;;;;\n1D89C;SIGNWRITING HAND-FIST LITTLE INDEX THUMB;So;0;L;;;;;N;;;;;\n1D89D;SIGNWRITING HAND-HINGE LITTLE INDEX THUMB;So;0;L;;;;;N;;;;;\n1D89E;SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT;So;0;L;;;;;N;;;;;\n1D89F;SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB;So;0;L;;;;;N;;;;;\n1D8A0;SIGNWRITING HAND-FIST LITTLE INDEX;So;0;L;;;;;N;;;;;\n1D8A1;SIGNWRITING HAND-CIRCLE LITTLE INDEX;So;0;L;;;;;N;;;;;\n1D8A2;SIGNWRITING HAND-HINGE LITTLE INDEX;So;0;L;;;;;N;;;;;\n1D8A3;SIGNWRITING HAND-ANGLE LITTLE INDEX;So;0;L;;;;;N;;;;;\n1D8A4;SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;;\n1D8A5;SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;;\n1D8A6;SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;;\n1D8A7;SIGNWRITING HAND-HINGE RING;So;0;L;;;;;N;;;;;\n1D8A8;SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE;So;0;L;;;;;N;;;;;\n1D8A9;SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE;So;0;L;;;;;N;;;;;\n1D8AA;SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE;So;0;L;;;;;N;;;;;\n1D8AB;SIGNWRITING HAND-FIST RING DOWN;So;0;L;;;;;N;;;;;\n1D8AC;SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE;So;0;L;;;;;N;;;;;\n1D8AD;SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS;So;0;L;;;;;N;;;;;\n1D8AE;SIGNWRITING HAND-FIST RING UP;So;0;L;;;;;N;;;;;\n1D8AF;SIGNWRITING HAND-FIST RING RAISED KNUCKLE;So;0;L;;;;;N;;;;;\n1D8B0;SIGNWRITING HAND-FIST RING LITTLE;So;0;L;;;;;N;;;;;\n1D8B1;SIGNWRITING HAND-CIRCLE RING LITTLE;So;0;L;;;;;N;;;;;\n1D8B2;SIGNWRITING HAND-OVAL RING LITTLE;So;0;L;;;;;N;;;;;\n1D8B3;SIGNWRITING HAND-ANGLE RING LITTLE;So;0;L;;;;;N;;;;;\n1D8B4;SIGNWRITING HAND-FIST RING MIDDLE;So;0;L;;;;;N;;;;;\n1D8B5;SIGNWRITING HAND-FIST RING MIDDLE CONJOINED;So;0;L;;;;;N;;;;;\n1D8B6;SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES;So;0;L;;;;;N;;;;;\n1D8B7;SIGNWRITING HAND-FIST RING INDEX;So;0;L;;;;;N;;;;;\n1D8B8;SIGNWRITING HAND-FIST RING THUMB;So;0;L;;;;;N;;;;;\n1D8B9;SIGNWRITING HAND-HOOK RING THUMB;So;0;L;;;;;N;;;;;\n1D8BA;SIGNWRITING HAND-FIST INDEX RING LITTLE;So;0;L;;;;;N;;;;;\n1D8BB;SIGNWRITING HAND-CIRCLE INDEX RING LITTLE;So;0;L;;;;;N;;;;;\n1D8BC;SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON;So;0;L;;;;;N;;;;;\n1D8BD;SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT;So;0;L;;;;;N;;;;;\n1D8BE;SIGNWRITING HAND-HOOK INDEX RING LITTLE IN;So;0;L;;;;;N;;;;;\n1D8BF;SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER;So;0;L;;;;;N;;;;;\n1D8C0;SIGNWRITING HAND-CUP INDEX RING LITTLE;So;0;L;;;;;N;;;;;\n1D8C1;SIGNWRITING HAND-HINGE INDEX RING LITTLE;So;0;L;;;;;N;;;;;\n1D8C2;SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT;So;0;L;;;;;N;;;;;\n1D8C3;SIGNWRITING HAND-ANGLE INDEX RING LITTLE;So;0;L;;;;;N;;;;;\n1D8C4;SIGNWRITING HAND-FIST MIDDLE DOWN;So;0;L;;;;;N;;;;;\n1D8C5;SIGNWRITING HAND-HINGE MIDDLE;So;0;L;;;;;N;;;;;\n1D8C6;SIGNWRITING HAND-FIST MIDDLE UP;So;0;L;;;;;N;;;;;\n1D8C7;SIGNWRITING HAND-CIRCLE MIDDLE UP;So;0;L;;;;;N;;;;;\n1D8C8;SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE;So;0;L;;;;;N;;;;;\n1D8C9;SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE;So;0;L;;;;;N;;;;;\n1D8CA;SIGNWRITING HAND-HOOK MIDDLE THUMB;So;0;L;;;;;N;;;;;\n1D8CB;SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE;So;0;L;;;;;N;;;;;\n1D8CC;SIGNWRITING HAND-FIST MIDDLE LITTLE;So;0;L;;;;;N;;;;;\n1D8CD;SIGNWRITING HAND-FIST MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;\n1D8CE;SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;\n1D8CF;SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON;So;0;L;;;;;N;;;;;\n1D8D0;SIGNWRITING HAND-CUP MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;\n1D8D1;SIGNWRITING HAND-HINGE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;\n1D8D2;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT;So;0;L;;;;;N;;;;;\n1D8D3;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN;So;0;L;;;;;N;;;;;\n1D8D4;SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE;So;0;L;;;;;N;;;;;\n1D8D5;SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT;So;0;L;;;;;N;;;;;\n1D8D6;SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED;So;0;L;;;;;N;;;;;\n1D8D7;SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE;So;0;L;;;;;N;;;;;\n1D8D8;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT;So;0;L;;;;;N;;;;;\n1D8D9;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN;So;0;L;;;;;N;;;;;\n1D8DA;SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED;So;0;L;;;;;N;;;;;\n1D8DB;SIGNWRITING HAND-HINGE INDEX HINGED;So;0;L;;;;;N;;;;;\n1D8DC;SIGNWRITING HAND-FIST INDEX THUMB SIDE;So;0;L;;;;;N;;;;;\n1D8DD;SIGNWRITING HAND-HINGE INDEX THUMB SIDE;So;0;L;;;;;N;;;;;\n1D8DE;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL;So;0;L;;;;;N;;;;;\n1D8DF;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED;So;0;L;;;;;N;;;;;\n1D8E0;SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT;So;0;L;;;;;N;;;;;\n1D8E1;SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT;So;0;L;;;;;N;;;;;\n1D8E2;SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT;So;0;L;;;;;N;;;;;\n1D8E3;SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE;So;0;L;;;;;N;;;;;\n1D8E4;SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT;So;0;L;;;;;N;;;;;\n1D8E5;SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT;So;0;L;;;;;N;;;;;\n1D8E6;SIGNWRITING HAND-FIST INDEX THUMB HOOK;So;0;L;;;;;N;;;;;\n1D8E7;SIGNWRITING HAND-FIST INDEX THUMB CURLICUE;So;0;L;;;;;N;;;;;\n1D8E8;SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE;So;0;L;;;;;N;;;;;\n1D8E9;SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE;So;0;L;;;;;N;;;;;\n1D8EA;SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER;So;0;L;;;;;N;;;;;\n1D8EB;SIGNWRITING HAND-FIST INDEX THUMB CIRCLE;So;0;L;;;;;N;;;;;\n1D8EC;SIGNWRITING HAND-CUP INDEX THUMB;So;0;L;;;;;N;;;;;\n1D8ED;SIGNWRITING HAND-CUP INDEX THUMB OPEN;So;0;L;;;;;N;;;;;\n1D8EE;SIGNWRITING HAND-HINGE INDEX THUMB OPEN;So;0;L;;;;;N;;;;;\n1D8EF;SIGNWRITING HAND-HINGE INDEX THUMB LARGE;So;0;L;;;;;N;;;;;\n1D8F0;SIGNWRITING HAND-HINGE INDEX THUMB;So;0;L;;;;;N;;;;;\n1D8F1;SIGNWRITING HAND-HINGE INDEX THUMB SMALL;So;0;L;;;;;N;;;;;\n1D8F2;SIGNWRITING HAND-ANGLE INDEX THUMB OUT;So;0;L;;;;;N;;;;;\n1D8F3;SIGNWRITING HAND-ANGLE INDEX THUMB IN;So;0;L;;;;;N;;;;;\n1D8F4;SIGNWRITING HAND-ANGLE INDEX THUMB;So;0;L;;;;;N;;;;;\n1D8F5;SIGNWRITING HAND-FIST THUMB;So;0;L;;;;;N;;;;;\n1D8F6;SIGNWRITING HAND-FIST THUMB HEEL;So;0;L;;;;;N;;;;;\n1D8F7;SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL;So;0;L;;;;;N;;;;;\n1D8F8;SIGNWRITING HAND-FIST THUMB SIDE CONJOINED;So;0;L;;;;;N;;;;;\n1D8F9;SIGNWRITING HAND-FIST THUMB SIDE BENT;So;0;L;;;;;N;;;;;\n1D8FA;SIGNWRITING HAND-FIST THUMB FORWARD;So;0;L;;;;;N;;;;;\n1D8FB;SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE;So;0;L;;;;;N;;;;;\n1D8FC;SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING;So;0;L;;;;;N;;;;;\n1D8FD;SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE;So;0;L;;;;;N;;;;;\n1D8FE;SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS;So;0;L;;;;;N;;;;;\n1D8FF;SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS;So;0;L;;;;;N;;;;;\n1D900;SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS;So;0;L;;;;;N;;;;;\n1D901;SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS;So;0;L;;;;;N;;;;;\n1D902;SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES;So;0;L;;;;;N;;;;;\n1D903;SIGNWRITING HAND-FIST;So;0;L;;;;;N;;;;;\n1D904;SIGNWRITING HAND-FIST HEEL;So;0;L;;;;;N;;;;;\n1D905;SIGNWRITING TOUCH SINGLE;So;0;L;;;;;N;;;;;\n1D906;SIGNWRITING TOUCH MULTIPLE;So;0;L;;;;;N;;;;;\n1D907;SIGNWRITING TOUCH BETWEEN;So;0;L;;;;;N;;;;;\n1D908;SIGNWRITING GRASP SINGLE;So;0;L;;;;;N;;;;;\n1D909;SIGNWRITING GRASP MULTIPLE;So;0;L;;;;;N;;;;;\n1D90A;SIGNWRITING GRASP BETWEEN;So;0;L;;;;;N;;;;;\n1D90B;SIGNWRITING STRIKE SINGLE;So;0;L;;;;;N;;;;;\n1D90C;SIGNWRITING STRIKE MULTIPLE;So;0;L;;;;;N;;;;;\n1D90D;SIGNWRITING STRIKE BETWEEN;So;0;L;;;;;N;;;;;\n1D90E;SIGNWRITING BRUSH SINGLE;So;0;L;;;;;N;;;;;\n1D90F;SIGNWRITING BRUSH MULTIPLE;So;0;L;;;;;N;;;;;\n1D910;SIGNWRITING BRUSH BETWEEN;So;0;L;;;;;N;;;;;\n1D911;SIGNWRITING RUB SINGLE;So;0;L;;;;;N;;;;;\n1D912;SIGNWRITING RUB MULTIPLE;So;0;L;;;;;N;;;;;\n1D913;SIGNWRITING RUB BETWEEN;So;0;L;;;;;N;;;;;\n1D914;SIGNWRITING SURFACE SYMBOLS;So;0;L;;;;;N;;;;;\n1D915;SIGNWRITING SURFACE BETWEEN;So;0;L;;;;;N;;;;;\n1D916;SIGNWRITING SQUEEZE LARGE SINGLE;So;0;L;;;;;N;;;;;\n1D917;SIGNWRITING SQUEEZE SMALL SINGLE;So;0;L;;;;;N;;;;;\n1D918;SIGNWRITING SQUEEZE LARGE MULTIPLE;So;0;L;;;;;N;;;;;\n1D919;SIGNWRITING SQUEEZE SMALL MULTIPLE;So;0;L;;;;;N;;;;;\n1D91A;SIGNWRITING SQUEEZE SEQUENTIAL;So;0;L;;;;;N;;;;;\n1D91B;SIGNWRITING FLICK LARGE SINGLE;So;0;L;;;;;N;;;;;\n1D91C;SIGNWRITING FLICK SMALL SINGLE;So;0;L;;;;;N;;;;;\n1D91D;SIGNWRITING FLICK LARGE MULTIPLE;So;0;L;;;;;N;;;;;\n1D91E;SIGNWRITING FLICK SMALL MULTIPLE;So;0;L;;;;;N;;;;;\n1D91F;SIGNWRITING FLICK SEQUENTIAL;So;0;L;;;;;N;;;;;\n1D920;SIGNWRITING SQUEEZE FLICK ALTERNATING;So;0;L;;;;;N;;;;;\n1D921;SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE;So;0;L;;;;;N;;;;;\n1D922;SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL;So;0;L;;;;;N;;;;;\n1D923;SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL;So;0;L;;;;;N;;;;;\n1D924;SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL;So;0;L;;;;;N;;;;;\n1D925;SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE;So;0;L;;;;;N;;;;;\n1D926;SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL;So;0;L;;;;;N;;;;;\n1D927;SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS;So;0;L;;;;;N;;;;;\n1D928;SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT;So;0;L;;;;;N;;;;;\n1D929;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT;So;0;L;;;;;N;;;;;\n1D92A;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL;So;0;L;;;;;N;;;;;\n1D92B;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM;So;0;L;;;;;N;;;;;\n1D92C;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE;So;0;L;;;;;N;;;;;\n1D92D;SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST;So;0;L;;;;;N;;;;;\n1D92E;SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX;So;0;L;;;;;N;;;;;\n1D92F;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT;So;0;L;;;;;N;;;;;\n1D930;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX;So;0;L;;;;;N;;;;;\n1D931;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING;So;0;L;;;;;N;;;;;\n1D932;SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;;\n1D933;SIGNWRITING MOVEMENT-WALLPLANE CROSS;So;0;L;;;;;N;;;;;\n1D934;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT;So;0;L;;;;;N;;;;;\n1D935;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX;So;0;L;;;;;N;;;;;\n1D936;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING;So;0;L;;;;;N;;;;;\n1D937;SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;;\n1D938;SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL;So;0;L;;;;;N;;;;;\n1D939;SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM;So;0;L;;;;;N;;;;;\n1D93A;SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE;So;0;L;;;;;N;;;;;\n1D93B;SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL;So;0;L;;;;;N;;;;;\n1D93C;SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM;So;0;L;;;;;N;;;;;\n1D93D;SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE;So;0;L;;;;;N;;;;;\n1D93E;SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION;So;0;L;;;;;N;;;;;\n1D93F;SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL;So;0;L;;;;;N;;;;;\n1D940;SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM;So;0;L;;;;;N;;;;;\n1D941;SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE;So;0;L;;;;;N;;;;;\n1D942;SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL;So;0;L;;;;;N;;;;;\n1D943;SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM;So;0;L;;;;;N;;;;;\n1D944;SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE;So;0;L;;;;;N;;;;;\n1D945;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL;So;0;L;;;;;N;;;;;\n1D946;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM;So;0;L;;;;;N;;;;;\n1D947;SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE;So;0;L;;;;;N;;;;;\n1D948;SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL;So;0;L;;;;;N;;;;;\n1D949;SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM;So;0;L;;;;;N;;;;;\n1D94A;SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE;So;0;L;;;;;N;;;;;\n1D94B;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;;\n1D94C;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;;\n1D94D;SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING;So;0;L;;;;;N;;;;;\n1D94E;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;;\n1D94F;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;;\n1D950;SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;;\n1D951;SIGNWRITING TRAVEL-WALLPLANE SHAKING;So;0;L;;;;;N;;;;;\n1D952;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE;So;0;L;;;;;N;;;;;\n1D953;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE;So;0;L;;;;;N;;;;;\n1D954;SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE;So;0;L;;;;;N;;;;;\n1D955;SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL;So;0;L;;;;;N;;;;;\n1D956;SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM;So;0;L;;;;;N;;;;;\n1D957;SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE;So;0;L;;;;;N;;;;;\n1D958;SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST;So;0;L;;;;;N;;;;;\n1D959;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL;So;0;L;;;;;N;;;;;\n1D95A;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM;So;0;L;;;;;N;;;;;\n1D95B;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE;So;0;L;;;;;N;;;;;\n1D95C;SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST;So;0;L;;;;;N;;;;;\n1D95D;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL;So;0;L;;;;;N;;;;;\n1D95E;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM;So;0;L;;;;;N;;;;;\n1D95F;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE;So;0;L;;;;;N;;;;;\n1D960;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST;So;0;L;;;;;N;;;;;\n1D961;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL;So;0;L;;;;;N;;;;;\n1D962;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM;So;0;L;;;;;N;;;;;\n1D963;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE;So;0;L;;;;;N;;;;;\n1D964;SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST;So;0;L;;;;;N;;;;;\n1D965;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL;So;0;L;;;;;N;;;;;\n1D966;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM;So;0;L;;;;;N;;;;;\n1D967;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE;So;0;L;;;;;N;;;;;\n1D968;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST;So;0;L;;;;;N;;;;;\n1D969;SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX;So;0;L;;;;;N;;;;;\n1D96A;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT;So;0;L;;;;;N;;;;;\n1D96B;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX;So;0;L;;;;;N;;;;;\n1D96C;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING;So;0;L;;;;;N;;;;;\n1D96D;SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;;\n1D96E;SIGNWRITING MOVEMENT-FLOORPLANE CROSS;So;0;L;;;;;N;;;;;\n1D96F;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT;So;0;L;;;;;N;;;;;\n1D970;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX;So;0;L;;;;;N;;;;;\n1D971;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT;So;0;L;;;;;N;;;;;\n1D972;SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX;So;0;L;;;;;N;;;;;\n1D973;SIGNWRITING MOVEMENT-FLOORPLANE BEND;So;0;L;;;;;N;;;;;\n1D974;SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL;So;0;L;;;;;N;;;;;\n1D975;SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM;So;0;L;;;;;N;;;;;\n1D976;SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE;So;0;L;;;;;N;;;;;\n1D977;SIGNWRITING MOVEMENT-FLOORPLANE CHECK;So;0;L;;;;;N;;;;;\n1D978;SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL;So;0;L;;;;;N;;;;;\n1D979;SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM;So;0;L;;;;;N;;;;;\n1D97A;SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE;So;0;L;;;;;N;;;;;\n1D97B;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL;So;0;L;;;;;N;;;;;\n1D97C;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM;So;0;L;;;;;N;;;;;\n1D97D;SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE;So;0;L;;;;;N;;;;;\n1D97E;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL;So;0;L;;;;;N;;;;;\n1D97F;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM;So;0;L;;;;;N;;;;;\n1D980;SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE;So;0;L;;;;;N;;;;;\n1D981;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;;\n1D982;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;;\n1D983;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;;\n1D984;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;;\n1D985;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;;\n1D986;SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING;So;0;L;;;;;N;;;;;\n1D987;SIGNWRITING TRAVEL-FLOORPLANE SHAKING;So;0;L;;;;;N;;;;;\n1D988;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL;So;0;L;;;;;N;;;;;\n1D989;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM;So;0;L;;;;;N;;;;;\n1D98A;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE;So;0;L;;;;;N;;;;;\n1D98B;SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST;So;0;L;;;;;N;;;;;\n1D98C;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL;So;0;L;;;;;N;;;;;\n1D98D;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM;So;0;L;;;;;N;;;;;\n1D98E;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE;So;0;L;;;;;N;;;;;\n1D98F;SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST;So;0;L;;;;;N;;;;;\n1D990;SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL;So;0;L;;;;;N;;;;;\n1D991;SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM;So;0;L;;;;;N;;;;;\n1D992;SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL;So;0;L;;;;;N;;;;;\n1D993;SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM;So;0;L;;;;;N;;;;;\n1D994;SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE;So;0;L;;;;;N;;;;;\n1D995;SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL;So;0;L;;;;;N;;;;;\n1D996;SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM;So;0;L;;;;;N;;;;;\n1D997;SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE;So;0;L;;;;;N;;;;;\n1D998;SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE;So;0;L;;;;;N;;;;;\n1D999;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL;So;0;L;;;;;N;;;;;\n1D99A;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM;So;0;L;;;;;N;;;;;\n1D99B;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE;So;0;L;;;;;N;;;;;\n1D99C;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL;So;0;L;;;;;N;;;;;\n1D99D;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM;So;0;L;;;;;N;;;;;\n1D99E;SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE;So;0;L;;;;;N;;;;;\n1D99F;SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT;So;0;L;;;;;N;;;;;\n1D9A0;SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL;So;0;L;;;;;N;;;;;\n1D9A1;SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM;So;0;L;;;;;N;;;;;\n1D9A2;SIGNWRITING ROTATION-WALLPLANE SINGLE;So;0;L;;;;;N;;;;;\n1D9A3;SIGNWRITING ROTATION-WALLPLANE DOUBLE;So;0;L;;;;;N;;;;;\n1D9A4;SIGNWRITING ROTATION-WALLPLANE ALTERNATE;So;0;L;;;;;N;;;;;\n1D9A5;SIGNWRITING MOVEMENT-WALLPLANE SHAKING;So;0;L;;;;;N;;;;;\n1D9A6;SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL;So;0;L;;;;;N;;;;;\n1D9A7;SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL;So;0;L;;;;;N;;;;;\n1D9A8;SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL;So;0;L;;;;;N;;;;;\n1D9A9;SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL;So;0;L;;;;;N;;;;;\n1D9AA;SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL;So;0;L;;;;;N;;;;;\n1D9AB;SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL;So;0;L;;;;;N;;;;;\n1D9AC;SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL;So;0;L;;;;;N;;;;;\n1D9AD;SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST;So;0;L;;;;;N;;;;;\n1D9AE;SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST;So;0;L;;;;;N;;;;;\n1D9AF;SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST;So;0;L;;;;;N;;;;;\n1D9B0;SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST;So;0;L;;;;;N;;;;;\n1D9B1;SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST;So;0;L;;;;;N;;;;;\n1D9B2;SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST;So;0;L;;;;;N;;;;;\n1D9B3;SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST;So;0;L;;;;;N;;;;;\n1D9B4;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL;So;0;L;;;;;N;;;;;\n1D9B5;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM;So;0;L;;;;;N;;;;;\n1D9B6;SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE;So;0;L;;;;;N;;;;;\n1D9B7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL;So;0;L;;;;;N;;;;;\n1D9B8;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE;So;0;L;;;;;N;;;;;\n1D9B9;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE;So;0;L;;;;;N;;;;;\n1D9BA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE;So;0;L;;;;;N;;;;;\n1D9BB;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE;So;0;L;;;;;N;;;;;\n1D9BC;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE;So;0;L;;;;;N;;;;;\n1D9BD;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE;So;0;L;;;;;N;;;;;\n1D9BE;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE;So;0;L;;;;;N;;;;;\n1D9BF;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE;So;0;L;;;;;N;;;;;\n1D9C0;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE;So;0;L;;;;;N;;;;;\n1D9C1;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL;So;0;L;;;;;N;;;;;\n1D9C2;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE;So;0;L;;;;;N;;;;;\n1D9C3;SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING;So;0;L;;;;;N;;;;;\n1D9C4;SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING;So;0;L;;;;;N;;;;;\n1D9C5;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING;So;0;L;;;;;N;;;;;\n1D9C6;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL;So;0;L;;;;;N;;;;;\n1D9C7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE;So;0;L;;;;;N;;;;;\n1D9C8;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE;So;0;L;;;;;N;;;;;\n1D9C9;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE;So;0;L;;;;;N;;;;;\n1D9CA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE;So;0;L;;;;;N;;;;;\n1D9CB;SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE;So;0;L;;;;;N;;;;;\n1D9CC;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE;So;0;L;;;;;N;;;;;\n1D9CD;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE;So;0;L;;;;;N;;;;;\n1D9CE;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE;So;0;L;;;;;N;;;;;\n1D9CF;SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE;So;0;L;;;;;N;;;;;\n1D9D0;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL;So;0;L;;;;;N;;;;;\n1D9D1;SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE;So;0;L;;;;;N;;;;;\n1D9D2;SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR;So;0;L;;;;;N;;;;;\n1D9D3;SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR;So;0;L;;;;;N;;;;;\n1D9D4;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR;So;0;L;;;;;N;;;;;\n1D9D5;SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL;So;0;L;;;;;N;;;;;\n1D9D6;SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM;So;0;L;;;;;N;;;;;\n1D9D7;SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE;So;0;L;;;;;N;;;;;\n1D9D8;SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST;So;0;L;;;;;N;;;;;\n1D9D9;SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED;So;0;L;;;;;N;;;;;\n1D9DA;SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL;So;0;L;;;;;N;;;;;\n1D9DB;SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL;So;0;L;;;;;N;;;;;\n1D9DC;SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE;So;0;L;;;;;N;;;;;\n1D9DD;SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL;So;0;L;;;;;N;;;;;\n1D9DE;SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE;So;0;L;;;;;N;;;;;\n1D9DF;SIGNWRITING ROTATION-FLOORPLANE SINGLE;So;0;L;;;;;N;;;;;\n1D9E0;SIGNWRITING ROTATION-FLOORPLANE DOUBLE;So;0;L;;;;;N;;;;;\n1D9E1;SIGNWRITING ROTATION-FLOORPLANE ALTERNATING;So;0;L;;;;;N;;;;;\n1D9E2;SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL;So;0;L;;;;;N;;;;;\n1D9E3;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE;So;0;L;;;;;N;;;;;\n1D9E4;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE;So;0;L;;;;;N;;;;;\n1D9E5;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE;So;0;L;;;;;N;;;;;\n1D9E6;SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE;So;0;L;;;;;N;;;;;\n1D9E7;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE;So;0;L;;;;;N;;;;;\n1D9E8;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE;So;0;L;;;;;N;;;;;\n1D9E9;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE;So;0;L;;;;;N;;;;;\n1D9EA;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE;So;0;L;;;;;N;;;;;\n1D9EB;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE;So;0;L;;;;;N;;;;;\n1D9EC;SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE;So;0;L;;;;;N;;;;;\n1D9ED;SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE;So;0;L;;;;;N;;;;;\n1D9EE;SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE;So;0;L;;;;;N;;;;;\n1D9EF;SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE;So;0;L;;;;;N;;;;;\n1D9F0;SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE;So;0;L;;;;;N;;;;;\n1D9F1;SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE;So;0;L;;;;;N;;;;;\n1D9F2;SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE;So;0;L;;;;;N;;;;;\n1D9F3;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE;So;0;L;;;;;N;;;;;\n1D9F4;SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE;So;0;L;;;;;N;;;;;\n1D9F5;SIGNWRITING DYNAMIC ARROWHEAD SMALL;So;0;L;;;;;N;;;;;\n1D9F6;SIGNWRITING DYNAMIC ARROWHEAD LARGE;So;0;L;;;;;N;;;;;\n1D9F7;SIGNWRITING DYNAMIC FAST;So;0;L;;;;;N;;;;;\n1D9F8;SIGNWRITING DYNAMIC SLOW;So;0;L;;;;;N;;;;;\n1D9F9;SIGNWRITING DYNAMIC TENSE;So;0;L;;;;;N;;;;;\n1D9FA;SIGNWRITING DYNAMIC RELAXED;So;0;L;;;;;N;;;;;\n1D9FB;SIGNWRITING DYNAMIC SIMULTANEOUS;So;0;L;;;;;N;;;;;\n1D9FC;SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING;So;0;L;;;;;N;;;;;\n1D9FD;SIGNWRITING DYNAMIC EVERY OTHER TIME;So;0;L;;;;;N;;;;;\n1D9FE;SIGNWRITING DYNAMIC GRADUAL;So;0;L;;;;;N;;;;;\n1D9FF;SIGNWRITING HEAD;So;0;L;;;;;N;;;;;\n1DA00;SIGNWRITING HEAD RIM;Mn;0;NSM;;;;;N;;;;;\n1DA01;SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;;\n1DA02;SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT;Mn;0;NSM;;;;;N;;;;;\n1DA03;SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;;\n1DA04;SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE;Mn;0;NSM;;;;;N;;;;;\n1DA05;SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE;Mn;0;NSM;;;;;N;;;;;\n1DA06;SIGNWRITING HEAD MOVEMENT CIRCLE;Mn;0;NSM;;;;;N;;;;;\n1DA07;SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING;Mn;0;NSM;;;;;N;;;;;\n1DA08;SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN;Mn;0;NSM;;;;;N;;;;;\n1DA09;SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING;Mn;0;NSM;;;;;N;;;;;\n1DA0A;SIGNWRITING EYEBROWS STRAIGHT UP;Mn;0;NSM;;;;;N;;;;;\n1DA0B;SIGNWRITING EYEBROWS STRAIGHT NEUTRAL;Mn;0;NSM;;;;;N;;;;;\n1DA0C;SIGNWRITING EYEBROWS STRAIGHT DOWN;Mn;0;NSM;;;;;N;;;;;\n1DA0D;SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN;Mn;0;NSM;;;;;N;;;;;\n1DA0E;SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL;Mn;0;NSM;;;;;N;;;;;\n1DA0F;SIGNWRITING DREAMY EYEBROWS UP NEUTRAL;Mn;0;NSM;;;;;N;;;;;\n1DA10;SIGNWRITING DREAMY EYEBROWS NEUTRAL UP;Mn;0;NSM;;;;;N;;;;;\n1DA11;SIGNWRITING FOREHEAD NEUTRAL;Mn;0;NSM;;;;;N;;;;;\n1DA12;SIGNWRITING FOREHEAD CONTACT;Mn;0;NSM;;;;;N;;;;;\n1DA13;SIGNWRITING FOREHEAD WRINKLED;Mn;0;NSM;;;;;N;;;;;\n1DA14;SIGNWRITING EYES OPEN;Mn;0;NSM;;;;;N;;;;;\n1DA15;SIGNWRITING EYES SQUEEZED;Mn;0;NSM;;;;;N;;;;;\n1DA16;SIGNWRITING EYES CLOSED;Mn;0;NSM;;;;;N;;;;;\n1DA17;SIGNWRITING EYE BLINK SINGLE;Mn;0;NSM;;;;;N;;;;;\n1DA18;SIGNWRITING EYE BLINK MULTIPLE;Mn;0;NSM;;;;;N;;;;;\n1DA19;SIGNWRITING EYES HALF OPEN;Mn;0;NSM;;;;;N;;;;;\n1DA1A;SIGNWRITING EYES WIDE OPEN;Mn;0;NSM;;;;;N;;;;;\n1DA1B;SIGNWRITING EYES HALF CLOSED;Mn;0;NSM;;;;;N;;;;;\n1DA1C;SIGNWRITING EYES WIDENING MOVEMENT;Mn;0;NSM;;;;;N;;;;;\n1DA1D;SIGNWRITING EYE WINK;Mn;0;NSM;;;;;N;;;;;\n1DA1E;SIGNWRITING EYELASHES UP;Mn;0;NSM;;;;;N;;;;;\n1DA1F;SIGNWRITING EYELASHES DOWN;Mn;0;NSM;;;;;N;;;;;\n1DA20;SIGNWRITING EYELASHES FLUTTERING;Mn;0;NSM;;;;;N;;;;;\n1DA21;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;;\n1DA22;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE;Mn;0;NSM;;;;;N;;;;;\n1DA23;SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING;Mn;0;NSM;;;;;N;;;;;\n1DA24;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT;Mn;0;NSM;;;;;N;;;;;\n1DA25;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE;Mn;0;NSM;;;;;N;;;;;\n1DA26;SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING;Mn;0;NSM;;;;;N;;;;;\n1DA27;SIGNWRITING EYEGAZE-WALLPLANE CURVED;Mn;0;NSM;;;;;N;;;;;\n1DA28;SIGNWRITING EYEGAZE-FLOORPLANE CURVED;Mn;0;NSM;;;;;N;;;;;\n1DA29;SIGNWRITING EYEGAZE-WALLPLANE CIRCLING;Mn;0;NSM;;;;;N;;;;;\n1DA2A;SIGNWRITING CHEEKS PUFFED;Mn;0;NSM;;;;;N;;;;;\n1DA2B;SIGNWRITING CHEEKS NEUTRAL;Mn;0;NSM;;;;;N;;;;;\n1DA2C;SIGNWRITING CHEEKS SUCKED;Mn;0;NSM;;;;;N;;;;;\n1DA2D;SIGNWRITING TENSE CHEEKS HIGH;Mn;0;NSM;;;;;N;;;;;\n1DA2E;SIGNWRITING TENSE CHEEKS MIDDLE;Mn;0;NSM;;;;;N;;;;;\n1DA2F;SIGNWRITING TENSE CHEEKS LOW;Mn;0;NSM;;;;;N;;;;;\n1DA30;SIGNWRITING EARS;Mn;0;NSM;;;;;N;;;;;\n1DA31;SIGNWRITING NOSE NEUTRAL;Mn;0;NSM;;;;;N;;;;;\n1DA32;SIGNWRITING NOSE CONTACT;Mn;0;NSM;;;;;N;;;;;\n1DA33;SIGNWRITING NOSE WRINKLES;Mn;0;NSM;;;;;N;;;;;\n1DA34;SIGNWRITING NOSE WIGGLES;Mn;0;NSM;;;;;N;;;;;\n1DA35;SIGNWRITING AIR BLOWING OUT;Mn;0;NSM;;;;;N;;;;;\n1DA36;SIGNWRITING AIR SUCKING IN;Mn;0;NSM;;;;;N;;;;;\n1DA37;SIGNWRITING AIR BLOW SMALL ROTATIONS;So;0;L;;;;;N;;;;;\n1DA38;SIGNWRITING AIR SUCK SMALL ROTATIONS;So;0;L;;;;;N;;;;;\n1DA39;SIGNWRITING BREATH INHALE;So;0;L;;;;;N;;;;;\n1DA3A;SIGNWRITING BREATH EXHALE;So;0;L;;;;;N;;;;;\n1DA3B;SIGNWRITING MOUTH CLOSED NEUTRAL;Mn;0;NSM;;;;;N;;;;;\n1DA3C;SIGNWRITING MOUTH CLOSED FORWARD;Mn;0;NSM;;;;;N;;;;;\n1DA3D;SIGNWRITING MOUTH CLOSED CONTACT;Mn;0;NSM;;;;;N;;;;;\n1DA3E;SIGNWRITING MOUTH SMILE;Mn;0;NSM;;;;;N;;;;;\n1DA3F;SIGNWRITING MOUTH SMILE WRINKLED;Mn;0;NSM;;;;;N;;;;;\n1DA40;SIGNWRITING MOUTH SMILE OPEN;Mn;0;NSM;;;;;N;;;;;\n1DA41;SIGNWRITING MOUTH FROWN;Mn;0;NSM;;;;;N;;;;;\n1DA42;SIGNWRITING MOUTH FROWN WRINKLED;Mn;0;NSM;;;;;N;;;;;\n1DA43;SIGNWRITING MOUTH FROWN OPEN;Mn;0;NSM;;;;;N;;;;;\n1DA44;SIGNWRITING MOUTH OPEN CIRCLE;Mn;0;NSM;;;;;N;;;;;\n1DA45;SIGNWRITING MOUTH OPEN FORWARD;Mn;0;NSM;;;;;N;;;;;\n1DA46;SIGNWRITING MOUTH OPEN WRINKLED;Mn;0;NSM;;;;;N;;;;;\n1DA47;SIGNWRITING MOUTH OPEN OVAL;Mn;0;NSM;;;;;N;;;;;\n1DA48;SIGNWRITING MOUTH OPEN OVAL WRINKLED;Mn;0;NSM;;;;;N;;;;;\n1DA49;SIGNWRITING MOUTH OPEN OVAL YAWN;Mn;0;NSM;;;;;N;;;;;\n1DA4A;SIGNWRITING MOUTH OPEN RECTANGLE;Mn;0;NSM;;;;;N;;;;;\n1DA4B;SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED;Mn;0;NSM;;;;;N;;;;;\n1DA4C;SIGNWRITING MOUTH OPEN RECTANGLE YAWN;Mn;0;NSM;;;;;N;;;;;\n1DA4D;SIGNWRITING MOUTH KISS;Mn;0;NSM;;;;;N;;;;;\n1DA4E;SIGNWRITING MOUTH KISS FORWARD;Mn;0;NSM;;;;;N;;;;;\n1DA4F;SIGNWRITING MOUTH KISS WRINKLED;Mn;0;NSM;;;;;N;;;;;\n1DA50;SIGNWRITING MOUTH TENSE;Mn;0;NSM;;;;;N;;;;;\n1DA51;SIGNWRITING MOUTH TENSE FORWARD;Mn;0;NSM;;;;;N;;;;;\n1DA52;SIGNWRITING MOUTH TENSE SUCKED;Mn;0;NSM;;;;;N;;;;;\n1DA53;SIGNWRITING LIPS PRESSED TOGETHER;Mn;0;NSM;;;;;N;;;;;\n1DA54;SIGNWRITING LIP LOWER OVER UPPER;Mn;0;NSM;;;;;N;;;;;\n1DA55;SIGNWRITING LIP UPPER OVER LOWER;Mn;0;NSM;;;;;N;;;;;\n1DA56;SIGNWRITING MOUTH CORNERS;Mn;0;NSM;;;;;N;;;;;\n1DA57;SIGNWRITING MOUTH WRINKLES SINGLE;Mn;0;NSM;;;;;N;;;;;\n1DA58;SIGNWRITING MOUTH WRINKLES DOUBLE;Mn;0;NSM;;;;;N;;;;;\n1DA59;SIGNWRITING TONGUE STICKING OUT FAR;Mn;0;NSM;;;;;N;;;;;\n1DA5A;SIGNWRITING TONGUE LICKING LIPS;Mn;0;NSM;;;;;N;;;;;\n1DA5B;SIGNWRITING TONGUE TIP BETWEEN LIPS;Mn;0;NSM;;;;;N;;;;;\n1DA5C;SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH;Mn;0;NSM;;;;;N;;;;;\n1DA5D;SIGNWRITING TONGUE INSIDE MOUTH RELAXED;Mn;0;NSM;;;;;N;;;;;\n1DA5E;SIGNWRITING TONGUE MOVES AGAINST CHEEK;Mn;0;NSM;;;;;N;;;;;\n1DA5F;SIGNWRITING TONGUE CENTRE STICKING OUT;Mn;0;NSM;;;;;N;;;;;\n1DA60;SIGNWRITING TONGUE CENTRE INSIDE MOUTH;Mn;0;NSM;;;;;N;;;;;\n1DA61;SIGNWRITING TEETH;Mn;0;NSM;;;;;N;;;;;\n1DA62;SIGNWRITING TEETH MOVEMENT;Mn;0;NSM;;;;;N;;;;;\n1DA63;SIGNWRITING TEETH ON TONGUE;Mn;0;NSM;;;;;N;;;;;\n1DA64;SIGNWRITING TEETH ON TONGUE MOVEMENT;Mn;0;NSM;;;;;N;;;;;\n1DA65;SIGNWRITING TEETH ON LIPS;Mn;0;NSM;;;;;N;;;;;\n1DA66;SIGNWRITING TEETH ON LIPS MOVEMENT;Mn;0;NSM;;;;;N;;;;;\n1DA67;SIGNWRITING TEETH BITE LIPS;Mn;0;NSM;;;;;N;;;;;\n1DA68;SIGNWRITING MOVEMENT-WALLPLANE JAW;Mn;0;NSM;;;;;N;;;;;\n1DA69;SIGNWRITING MOVEMENT-FLOORPLANE JAW;Mn;0;NSM;;;;;N;;;;;\n1DA6A;SIGNWRITING NECK;Mn;0;NSM;;;;;N;;;;;\n1DA6B;SIGNWRITING HAIR;Mn;0;NSM;;;;;N;;;;;\n1DA6C;SIGNWRITING EXCITEMENT;Mn;0;NSM;;;;;N;;;;;\n1DA6D;SIGNWRITING SHOULDER HIP SPINE;So;0;L;;;;;N;;;;;\n1DA6E;SIGNWRITING SHOULDER HIP POSITIONS;So;0;L;;;;;N;;;;;\n1DA6F;SIGNWRITING WALLPLANE SHOULDER HIP MOVE;So;0;L;;;;;N;;;;;\n1DA70;SIGNWRITING FLOORPLANE SHOULDER HIP MOVE;So;0;L;;;;;N;;;;;\n1DA71;SIGNWRITING SHOULDER TILTING FROM WAIST;So;0;L;;;;;N;;;;;\n1DA72;SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH;So;0;L;;;;;N;;;;;\n1DA73;SIGNWRITING TORSO-WALLPLANE CURVED BEND;So;0;L;;;;;N;;;;;\n1DA74;SIGNWRITING TORSO-FLOORPLANE TWISTING;So;0;L;;;;;N;;;;;\n1DA75;SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS;Mn;0;NSM;;;;;N;;;;;\n1DA76;SIGNWRITING LIMB COMBINATION;So;0;L;;;;;N;;;;;\n1DA77;SIGNWRITING LIMB LENGTH-1;So;0;L;;;;;N;;;;;\n1DA78;SIGNWRITING LIMB LENGTH-2;So;0;L;;;;;N;;;;;\n1DA79;SIGNWRITING LIMB LENGTH-3;So;0;L;;;;;N;;;;;\n1DA7A;SIGNWRITING LIMB LENGTH-4;So;0;L;;;;;N;;;;;\n1DA7B;SIGNWRITING LIMB LENGTH-5;So;0;L;;;;;N;;;;;\n1DA7C;SIGNWRITING LIMB LENGTH-6;So;0;L;;;;;N;;;;;\n1DA7D;SIGNWRITING LIMB LENGTH-7;So;0;L;;;;;N;;;;;\n1DA7E;SIGNWRITING FINGER;So;0;L;;;;;N;;;;;\n1DA7F;SIGNWRITING LOCATION-WALLPLANE SPACE;So;0;L;;;;;N;;;;;\n1DA80;SIGNWRITING LOCATION-FLOORPLANE SPACE;So;0;L;;;;;N;;;;;\n1DA81;SIGNWRITING LOCATION HEIGHT;So;0;L;;;;;N;;;;;\n1DA82;SIGNWRITING LOCATION WIDTH;So;0;L;;;;;N;;;;;\n1DA83;SIGNWRITING LOCATION DEPTH;So;0;L;;;;;N;;;;;\n1DA84;SIGNWRITING LOCATION HEAD NECK;Mn;0;NSM;;;;;N;;;;;\n1DA85;SIGNWRITING LOCATION TORSO;So;0;L;;;;;N;;;;;\n1DA86;SIGNWRITING LOCATION LIMBS DIGITS;So;0;L;;;;;N;;;;;\n1DA87;SIGNWRITING COMMA;Po;0;L;;;;;N;;;;;\n1DA88;SIGNWRITING FULL STOP;Po;0;L;;;;;N;;;;;\n1DA89;SIGNWRITING SEMICOLON;Po;0;L;;;;;N;;;;;\n1DA8A;SIGNWRITING COLON;Po;0;L;;;;;N;;;;;\n1DA8B;SIGNWRITING PARENTHESIS;Po;0;L;;;;;N;;;;;\n1DA9B;SIGNWRITING FILL MODIFIER-2;Mn;0;NSM;;;;;N;;;;;\n1DA9C;SIGNWRITING FILL MODIFIER-3;Mn;0;NSM;;;;;N;;;;;\n1DA9D;SIGNWRITING FILL MODIFIER-4;Mn;0;NSM;;;;;N;;;;;\n1DA9E;SIGNWRITING FILL MODIFIER-5;Mn;0;NSM;;;;;N;;;;;\n1DA9F;SIGNWRITING FILL MODIFIER-6;Mn;0;NSM;;;;;N;;;;;\n1DAA1;SIGNWRITING ROTATION MODIFIER-2;Mn;0;NSM;;;;;N;;;;;\n1DAA2;SIGNWRITING ROTATION MODIFIER-3;Mn;0;NSM;;;;;N;;;;;\n1DAA3;SIGNWRITING ROTATION MODIFIER-4;Mn;0;NSM;;;;;N;;;;;\n1DAA4;SIGNWRITING ROTATION MODIFIER-5;Mn;0;NSM;;;;;N;;;;;\n1DAA5;SIGNWRITING ROTATION MODIFIER-6;Mn;0;NSM;;;;;N;;;;;\n1DAA6;SIGNWRITING ROTATION MODIFIER-7;Mn;0;NSM;;;;;N;;;;;\n1DAA7;SIGNWRITING ROTATION MODIFIER-8;Mn;0;NSM;;;;;N;;;;;\n1DAA8;SIGNWRITING ROTATION MODIFIER-9;Mn;0;NSM;;;;;N;;;;;\n1DAA9;SIGNWRITING ROTATION MODIFIER-10;Mn;0;NSM;;;;;N;;;;;\n1DAAA;SIGNWRITING ROTATION MODIFIER-11;Mn;0;NSM;;;;;N;;;;;\n1DAAB;SIGNWRITING ROTATION MODIFIER-12;Mn;0;NSM;;;;;N;;;;;\n1DAAC;SIGNWRITING ROTATION MODIFIER-13;Mn;0;NSM;;;;;N;;;;;\n1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;;\n1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;;\n1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;;\n1DF00;LATIN SMALL LETTER FENG DIGRAPH WITH TRILL;Ll;0;L;;;;;N;;;;;\n1DF01;LATIN SMALL LETTER REVERSED SCRIPT G;Ll;0;L;;;;;N;;;;;\n1DF02;LATIN LETTER SMALL CAPITAL TURNED G;Ll;0;L;;;;;N;;;;;\n1DF03;LATIN SMALL LETTER REVERSED K;Ll;0;L;;;;;N;;;;;\n1DF04;LATIN LETTER SMALL CAPITAL L WITH BELT;Ll;0;L;;;;;N;;;;;\n1DF05;LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1DF06;LATIN SMALL LETTER TURNED Y WITH BELT;Ll;0;L;;;;;N;;;;;\n1DF07;LATIN SMALL LETTER REVERSED ENG;Ll;0;L;;;;;N;;;;;\n1DF08;LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1DF09;LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1DF0A;LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lo;0;L;;;;;N;;;;;\n1DF0B;LATIN SMALL LETTER ESH WITH DOUBLE BAR;Ll;0;L;;;;;N;;;;;\n1DF0C;LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL;Ll;0;L;;;;;N;;;;;\n1DF0D;LATIN SMALL LETTER TURNED T WITH CURL;Ll;0;L;;;;;N;;;;;\n1DF0E;LATIN LETTER INVERTED GLOTTAL STOP WITH CURL;Ll;0;L;;;;;N;;;;;\n1DF0F;LATIN LETTER STRETCHED C WITH CURL;Ll;0;L;;;;;N;;;;;\n1DF10;LATIN LETTER SMALL CAPITAL TURNED K;Ll;0;L;;;;;N;;;;;\n1DF11;LATIN SMALL LETTER L WITH FISHHOOK;Ll;0;L;;;;;N;;;;;\n1DF12;LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1DF13;LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1DF14;LATIN SMALL LETTER ENG WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1DF15;LATIN SMALL LETTER TURNED R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1DF16;LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1DF17;LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1DF18;LATIN SMALL LETTER EZH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;\n1DF19;LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1DF1A;LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1DF1B;LATIN SMALL LETTER O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1DF1C;LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1DF1D;LATIN SMALL LETTER C WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;\n1DF1E;LATIN SMALL LETTER S WITH CURL;Ll;0;L;;;;;N;;;;;\n1DF25;LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;;\n1DF26;LATIN SMALL LETTER L WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;;\n1DF27;LATIN SMALL LETTER N WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;;\n1DF28;LATIN SMALL LETTER R WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;;\n1DF29;LATIN SMALL LETTER S WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;;\n1DF2A;LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;;\n1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;;\n1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;;\n1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;;\n1E003;COMBINING GLAGOLITIC LETTER GLAGOLI;Mn;230;NSM;;;;;N;;;;;\n1E004;COMBINING GLAGOLITIC LETTER DOBRO;Mn;230;NSM;;;;;N;;;;;\n1E005;COMBINING GLAGOLITIC LETTER YESTU;Mn;230;NSM;;;;;N;;;;;\n1E006;COMBINING GLAGOLITIC LETTER ZHIVETE;Mn;230;NSM;;;;;N;;;;;\n1E008;COMBINING GLAGOLITIC LETTER ZEMLJA;Mn;230;NSM;;;;;N;;;;;\n1E009;COMBINING GLAGOLITIC LETTER IZHE;Mn;230;NSM;;;;;N;;;;;\n1E00A;COMBINING GLAGOLITIC LETTER INITIAL IZHE;Mn;230;NSM;;;;;N;;;;;\n1E00B;COMBINING GLAGOLITIC LETTER I;Mn;230;NSM;;;;;N;;;;;\n1E00C;COMBINING GLAGOLITIC LETTER DJERVI;Mn;230;NSM;;;;;N;;;;;\n1E00D;COMBINING GLAGOLITIC LETTER KAKO;Mn;230;NSM;;;;;N;;;;;\n1E00E;COMBINING GLAGOLITIC LETTER LJUDIJE;Mn;230;NSM;;;;;N;;;;;\n1E00F;COMBINING GLAGOLITIC LETTER MYSLITE;Mn;230;NSM;;;;;N;;;;;\n1E010;COMBINING GLAGOLITIC LETTER NASHI;Mn;230;NSM;;;;;N;;;;;\n1E011;COMBINING GLAGOLITIC LETTER ONU;Mn;230;NSM;;;;;N;;;;;\n1E012;COMBINING GLAGOLITIC LETTER POKOJI;Mn;230;NSM;;;;;N;;;;;\n1E013;COMBINING GLAGOLITIC LETTER RITSI;Mn;230;NSM;;;;;N;;;;;\n1E014;COMBINING GLAGOLITIC LETTER SLOVO;Mn;230;NSM;;;;;N;;;;;\n1E015;COMBINING GLAGOLITIC LETTER TVRIDO;Mn;230;NSM;;;;;N;;;;;\n1E016;COMBINING GLAGOLITIC LETTER UKU;Mn;230;NSM;;;;;N;;;;;\n1E017;COMBINING GLAGOLITIC LETTER FRITU;Mn;230;NSM;;;;;N;;;;;\n1E018;COMBINING GLAGOLITIC LETTER HERU;Mn;230;NSM;;;;;N;;;;;\n1E01B;COMBINING GLAGOLITIC LETTER SHTA;Mn;230;NSM;;;;;N;;;;;\n1E01C;COMBINING GLAGOLITIC LETTER TSI;Mn;230;NSM;;;;;N;;;;;\n1E01D;COMBINING GLAGOLITIC LETTER CHRIVI;Mn;230;NSM;;;;;N;;;;;\n1E01E;COMBINING GLAGOLITIC LETTER SHA;Mn;230;NSM;;;;;N;;;;;\n1E01F;COMBINING GLAGOLITIC LETTER YERU;Mn;230;NSM;;;;;N;;;;;\n1E020;COMBINING GLAGOLITIC LETTER YERI;Mn;230;NSM;;;;;N;;;;;\n1E021;COMBINING GLAGOLITIC LETTER YATI;Mn;230;NSM;;;;;N;;;;;\n1E023;COMBINING GLAGOLITIC LETTER YU;Mn;230;NSM;;;;;N;;;;;\n1E024;COMBINING GLAGOLITIC LETTER SMALL YUS;Mn;230;NSM;;;;;N;;;;;\n1E026;COMBINING GLAGOLITIC LETTER YO;Mn;230;NSM;;;;;N;;;;;\n1E027;COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS;Mn;230;NSM;;;;;N;;;;;\n1E028;COMBINING GLAGOLITIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;;\n1E029;COMBINING GLAGOLITIC LETTER IOTATED BIG YUS;Mn;230;NSM;;;;;N;;;;;\n1E02A;COMBINING GLAGOLITIC LETTER FITA;Mn;230;NSM;;;;;N;;;;;\n1E030;MODIFIER LETTER CYRILLIC SMALL A;Lm;0;L;<super> 0430;;;;N;;;;;\n1E031;MODIFIER LETTER CYRILLIC SMALL BE;Lm;0;L;<super> 0431;;;;N;;;;;\n1E032;MODIFIER LETTER CYRILLIC SMALL VE;Lm;0;L;<super> 0432;;;;N;;;;;\n1E033;MODIFIER LETTER CYRILLIC SMALL GHE;Lm;0;L;<super> 0433;;;;N;;;;;\n1E034;MODIFIER LETTER CYRILLIC SMALL DE;Lm;0;L;<super> 0434;;;;N;;;;;\n1E035;MODIFIER LETTER CYRILLIC SMALL IE;Lm;0;L;<super> 0435;;;;N;;;;;\n1E036;MODIFIER LETTER CYRILLIC SMALL ZHE;Lm;0;L;<super> 0436;;;;N;;;;;\n1E037;MODIFIER LETTER CYRILLIC SMALL ZE;Lm;0;L;<super> 0437;;;;N;;;;;\n1E038;MODIFIER LETTER CYRILLIC SMALL I;Lm;0;L;<super> 0438;;;;N;;;;;\n1E039;MODIFIER LETTER CYRILLIC SMALL KA;Lm;0;L;<super> 043A;;;;N;;;;;\n1E03A;MODIFIER LETTER CYRILLIC SMALL EL;Lm;0;L;<super> 043B;;;;N;;;;;\n1E03B;MODIFIER LETTER CYRILLIC SMALL EM;Lm;0;L;<super> 043C;;;;N;;;;;\n1E03C;MODIFIER LETTER CYRILLIC SMALL O;Lm;0;L;<super> 043E;;;;N;;;;;\n1E03D;MODIFIER LETTER CYRILLIC SMALL PE;Lm;0;L;<super> 043F;;;;N;;;;;\n1E03E;MODIFIER LETTER CYRILLIC SMALL ER;Lm;0;L;<super> 0440;;;;N;;;;;\n1E03F;MODIFIER LETTER CYRILLIC SMALL ES;Lm;0;L;<super> 0441;;;;N;;;;;\n1E040;MODIFIER LETTER CYRILLIC SMALL TE;Lm;0;L;<super> 0442;;;;N;;;;;\n1E041;MODIFIER LETTER CYRILLIC SMALL U;Lm;0;L;<super> 0443;;;;N;;;;;\n1E042;MODIFIER LETTER CYRILLIC SMALL EF;Lm;0;L;<super> 0444;;;;N;;;;;\n1E043;MODIFIER LETTER CYRILLIC SMALL HA;Lm;0;L;<super> 0445;;;;N;;;;;\n1E044;MODIFIER LETTER CYRILLIC SMALL TSE;Lm;0;L;<super> 0446;;;;N;;;;;\n1E045;MODIFIER LETTER CYRILLIC SMALL CHE;Lm;0;L;<super> 0447;;;;N;;;;;\n1E046;MODIFIER LETTER CYRILLIC SMALL SHA;Lm;0;L;<super> 0448;;;;N;;;;;\n1E047;MODIFIER LETTER CYRILLIC SMALL YERU;Lm;0;L;<super> 044B;;;;N;;;;;\n1E048;MODIFIER LETTER CYRILLIC SMALL E;Lm;0;L;<super> 044D;;;;N;;;;;\n1E049;MODIFIER LETTER CYRILLIC SMALL YU;Lm;0;L;<super> 044E;;;;N;;;;;\n1E04A;MODIFIER LETTER CYRILLIC SMALL DZZE;Lm;0;L;<super> A689;;;;N;;;;;\n1E04B;MODIFIER LETTER CYRILLIC SMALL SCHWA;Lm;0;L;<super> 04D9;;;;N;;;;;\n1E04C;MODIFIER LETTER CYRILLIC SMALL BYELORUSSIAN-UKRAINIAN I;Lm;0;L;<super> 0456;;;;N;;;;;\n1E04D;MODIFIER LETTER CYRILLIC SMALL JE;Lm;0;L;<super> 0458;;;;N;;;;;\n1E04E;MODIFIER LETTER CYRILLIC SMALL BARRED O;Lm;0;L;<super> 04E9;;;;N;;;;;\n1E04F;MODIFIER LETTER CYRILLIC SMALL STRAIGHT U;Lm;0;L;<super> 04AF;;;;N;;;;;\n1E050;MODIFIER LETTER CYRILLIC SMALL PALOCHKA;Lm;0;L;<super> 04CF;;;;N;;;;;\n1E051;CYRILLIC SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0430;;;;N;;;;;\n1E052;CYRILLIC SUBSCRIPT SMALL LETTER BE;Lm;0;L;<sub> 0431;;;;N;;;;;\n1E053;CYRILLIC SUBSCRIPT SMALL LETTER VE;Lm;0;L;<sub> 0432;;;;N;;;;;\n1E054;CYRILLIC SUBSCRIPT SMALL LETTER GHE;Lm;0;L;<sub> 0433;;;;N;;;;;\n1E055;CYRILLIC SUBSCRIPT SMALL LETTER DE;Lm;0;L;<sub> 0434;;;;N;;;;;\n1E056;CYRILLIC SUBSCRIPT SMALL LETTER IE;Lm;0;L;<sub> 0435;;;;N;;;;;\n1E057;CYRILLIC SUBSCRIPT SMALL LETTER ZHE;Lm;0;L;<sub> 0436;;;;N;;;;;\n1E058;CYRILLIC SUBSCRIPT SMALL LETTER ZE;Lm;0;L;<sub> 0437;;;;N;;;;;\n1E059;CYRILLIC SUBSCRIPT SMALL LETTER I;Lm;0;L;<sub> 0438;;;;N;;;;;\n1E05A;CYRILLIC SUBSCRIPT SMALL LETTER KA;Lm;0;L;<sub> 043A;;;;N;;;;;\n1E05B;CYRILLIC SUBSCRIPT SMALL LETTER EL;Lm;0;L;<sub> 043B;;;;N;;;;;\n1E05C;CYRILLIC SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 043E;;;;N;;;;;\n1E05D;CYRILLIC SUBSCRIPT SMALL LETTER PE;Lm;0;L;<sub> 043F;;;;N;;;;;\n1E05E;CYRILLIC SUBSCRIPT SMALL LETTER ES;Lm;0;L;<sub> 0441;;;;N;;;;;\n1E05F;CYRILLIC SUBSCRIPT SMALL LETTER U;Lm;0;L;<sub> 0443;;;;N;;;;;\n1E060;CYRILLIC SUBSCRIPT SMALL LETTER EF;Lm;0;L;<sub> 0444;;;;N;;;;;\n1E061;CYRILLIC SUBSCRIPT SMALL LETTER HA;Lm;0;L;<sub> 0445;;;;N;;;;;\n1E062;CYRILLIC SUBSCRIPT SMALL LETTER TSE;Lm;0;L;<sub> 0446;;;;N;;;;;\n1E063;CYRILLIC SUBSCRIPT SMALL LETTER CHE;Lm;0;L;<sub> 0447;;;;N;;;;;\n1E064;CYRILLIC SUBSCRIPT SMALL LETTER SHA;Lm;0;L;<sub> 0448;;;;N;;;;;\n1E065;CYRILLIC SUBSCRIPT SMALL LETTER HARD SIGN;Lm;0;L;<sub> 044A;;;;N;;;;;\n1E066;CYRILLIC SUBSCRIPT SMALL LETTER YERU;Lm;0;L;<sub> 044B;;;;N;;;;;\n1E067;CYRILLIC SUBSCRIPT SMALL LETTER GHE WITH UPTURN;Lm;0;L;<sub> 0491;;;;N;;;;;\n1E068;CYRILLIC SUBSCRIPT SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Lm;0;L;<sub> 0456;;;;N;;;;;\n1E069;CYRILLIC SUBSCRIPT SMALL LETTER DZE;Lm;0;L;<sub> 0455;;;;N;;;;;\n1E06A;CYRILLIC SUBSCRIPT SMALL LETTER DZHE;Lm;0;L;<sub> 045F;;;;N;;;;;\n1E06B;MODIFIER LETTER CYRILLIC SMALL ES WITH DESCENDER;Lm;0;L;<super> 04AB;;;;N;;;;;\n1E06C;MODIFIER LETTER CYRILLIC SMALL YERU WITH BACK YER;Lm;0;L;<super> A651;;;;N;;;;;\n1E06D;MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE;Lm;0;L;<super> 04B1;;;;N;;;;;\n1E08F;COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Mn;230;NSM;;;;;N;;;;;\n1E100;NYIAKENG PUACHUE HMONG LETTER MA;Lo;0;L;;;;;N;;;;;\n1E101;NYIAKENG PUACHUE HMONG LETTER TSA;Lo;0;L;;;;;N;;;;;\n1E102;NYIAKENG PUACHUE HMONG LETTER NTA;Lo;0;L;;;;;N;;;;;\n1E103;NYIAKENG PUACHUE HMONG LETTER TA;Lo;0;L;;;;;N;;;;;\n1E104;NYIAKENG PUACHUE HMONG LETTER HA;Lo;0;L;;;;;N;;;;;\n1E105;NYIAKENG PUACHUE HMONG LETTER NA;Lo;0;L;;;;;N;;;;;\n1E106;NYIAKENG PUACHUE HMONG LETTER XA;Lo;0;L;;;;;N;;;;;\n1E107;NYIAKENG PUACHUE HMONG LETTER NKA;Lo;0;L;;;;;N;;;;;\n1E108;NYIAKENG PUACHUE HMONG LETTER CA;Lo;0;L;;;;;N;;;;;\n1E109;NYIAKENG PUACHUE HMONG LETTER LA;Lo;0;L;;;;;N;;;;;\n1E10A;NYIAKENG PUACHUE HMONG LETTER SA;Lo;0;L;;;;;N;;;;;\n1E10B;NYIAKENG PUACHUE HMONG LETTER ZA;Lo;0;L;;;;;N;;;;;\n1E10C;NYIAKENG PUACHUE HMONG LETTER NCA;Lo;0;L;;;;;N;;;;;\n1E10D;NYIAKENG PUACHUE HMONG LETTER NTSA;Lo;0;L;;;;;N;;;;;\n1E10E;NYIAKENG PUACHUE HMONG LETTER KA;Lo;0;L;;;;;N;;;;;\n1E10F;NYIAKENG PUACHUE HMONG LETTER DA;Lo;0;L;;;;;N;;;;;\n1E110;NYIAKENG PUACHUE HMONG LETTER NYA;Lo;0;L;;;;;N;;;;;\n1E111;NYIAKENG PUACHUE HMONG LETTER NRA;Lo;0;L;;;;;N;;;;;\n1E112;NYIAKENG PUACHUE HMONG LETTER VA;Lo;0;L;;;;;N;;;;;\n1E113;NYIAKENG PUACHUE HMONG LETTER NTXA;Lo;0;L;;;;;N;;;;;\n1E114;NYIAKENG PUACHUE HMONG LETTER TXA;Lo;0;L;;;;;N;;;;;\n1E115;NYIAKENG PUACHUE HMONG LETTER FA;Lo;0;L;;;;;N;;;;;\n1E116;NYIAKENG PUACHUE HMONG LETTER RA;Lo;0;L;;;;;N;;;;;\n1E117;NYIAKENG PUACHUE HMONG LETTER QA;Lo;0;L;;;;;N;;;;;\n1E118;NYIAKENG PUACHUE HMONG LETTER YA;Lo;0;L;;;;;N;;;;;\n1E119;NYIAKENG PUACHUE HMONG LETTER NQA;Lo;0;L;;;;;N;;;;;\n1E11A;NYIAKENG PUACHUE HMONG LETTER PA;Lo;0;L;;;;;N;;;;;\n1E11B;NYIAKENG PUACHUE HMONG LETTER XYA;Lo;0;L;;;;;N;;;;;\n1E11C;NYIAKENG PUACHUE HMONG LETTER NPA;Lo;0;L;;;;;N;;;;;\n1E11D;NYIAKENG PUACHUE HMONG LETTER DLA;Lo;0;L;;;;;N;;;;;\n1E11E;NYIAKENG PUACHUE HMONG LETTER NPLA;Lo;0;L;;;;;N;;;;;\n1E11F;NYIAKENG PUACHUE HMONG LETTER HAH;Lo;0;L;;;;;N;;;;;\n1E120;NYIAKENG PUACHUE HMONG LETTER MLA;Lo;0;L;;;;;N;;;;;\n1E121;NYIAKENG PUACHUE HMONG LETTER PLA;Lo;0;L;;;;;N;;;;;\n1E122;NYIAKENG PUACHUE HMONG LETTER GA;Lo;0;L;;;;;N;;;;;\n1E123;NYIAKENG PUACHUE HMONG LETTER RRA;Lo;0;L;;;;;N;;;;;\n1E124;NYIAKENG PUACHUE HMONG LETTER A;Lo;0;L;;;;;N;;;;;\n1E125;NYIAKENG PUACHUE HMONG LETTER AA;Lo;0;L;;;;;N;;;;;\n1E126;NYIAKENG PUACHUE HMONG LETTER I;Lo;0;L;;;;;N;;;;;\n1E127;NYIAKENG PUACHUE HMONG LETTER U;Lo;0;L;;;;;N;;;;;\n1E128;NYIAKENG PUACHUE HMONG LETTER O;Lo;0;L;;;;;N;;;;;\n1E129;NYIAKENG PUACHUE HMONG LETTER OO;Lo;0;L;;;;;N;;;;;\n1E12A;NYIAKENG PUACHUE HMONG LETTER E;Lo;0;L;;;;;N;;;;;\n1E12B;NYIAKENG PUACHUE HMONG LETTER EE;Lo;0;L;;;;;N;;;;;\n1E12C;NYIAKENG PUACHUE HMONG LETTER W;Lo;0;L;;;;;N;;;;;\n1E130;NYIAKENG PUACHUE HMONG TONE-B;Mn;230;NSM;;;;;N;;;;;\n1E131;NYIAKENG PUACHUE HMONG TONE-M;Mn;230;NSM;;;;;N;;;;;\n1E132;NYIAKENG PUACHUE HMONG TONE-J;Mn;230;NSM;;;;;N;;;;;\n1E133;NYIAKENG PUACHUE HMONG TONE-V;Mn;230;NSM;;;;;N;;;;;\n1E134;NYIAKENG PUACHUE HMONG TONE-S;Mn;230;NSM;;;;;N;;;;;\n1E135;NYIAKENG PUACHUE HMONG TONE-G;Mn;230;NSM;;;;;N;;;;;\n1E136;NYIAKENG PUACHUE HMONG TONE-D;Mn;230;NSM;;;;;N;;;;;\n1E137;NYIAKENG PUACHUE HMONG SIGN FOR PERSON;Lm;0;L;;;;;N;;;;;\n1E138;NYIAKENG PUACHUE HMONG SIGN FOR THING;Lm;0;L;;;;;N;;;;;\n1E139;NYIAKENG PUACHUE HMONG SIGN FOR LOCATION;Lm;0;L;;;;;N;;;;;\n1E13A;NYIAKENG PUACHUE HMONG SIGN FOR ANIMAL;Lm;0;L;;;;;N;;;;;\n1E13B;NYIAKENG PUACHUE HMONG SIGN FOR INVERTEBRATE;Lm;0;L;;;;;N;;;;;\n1E13C;NYIAKENG PUACHUE HMONG SIGN XW XW;Lm;0;L;;;;;N;;;;;\n1E13D;NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;;\n1E140;NYIAKENG PUACHUE HMONG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1E141;NYIAKENG PUACHUE HMONG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1E142;NYIAKENG PUACHUE HMONG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1E143;NYIAKENG PUACHUE HMONG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1E144;NYIAKENG PUACHUE HMONG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1E145;NYIAKENG PUACHUE HMONG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1E146;NYIAKENG PUACHUE HMONG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1E147;NYIAKENG PUACHUE HMONG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1E148;NYIAKENG PUACHUE HMONG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1E149;NYIAKENG PUACHUE HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1E14E;NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ;Lo;0;L;;;;;N;;;;;\n1E14F;NYIAKENG PUACHUE HMONG CIRCLED CA;So;0;L;;;;;N;;;;;\n1E290;TOTO LETTER PA;Lo;0;L;;;;;N;;;;;\n1E291;TOTO LETTER BA;Lo;0;L;;;;;N;;;;;\n1E292;TOTO LETTER TA;Lo;0;L;;;;;N;;;;;\n1E293;TOTO LETTER DA;Lo;0;L;;;;;N;;;;;\n1E294;TOTO LETTER KA;Lo;0;L;;;;;N;;;;;\n1E295;TOTO LETTER GA;Lo;0;L;;;;;N;;;;;\n1E296;TOTO LETTER MA;Lo;0;L;;;;;N;;;;;\n1E297;TOTO LETTER NA;Lo;0;L;;;;;N;;;;;\n1E298;TOTO LETTER NGA;Lo;0;L;;;;;N;;;;;\n1E299;TOTO LETTER SA;Lo;0;L;;;;;N;;;;;\n1E29A;TOTO LETTER CHA;Lo;0;L;;;;;N;;;;;\n1E29B;TOTO LETTER YA;Lo;0;L;;;;;N;;;;;\n1E29C;TOTO LETTER WA;Lo;0;L;;;;;N;;;;;\n1E29D;TOTO LETTER JA;Lo;0;L;;;;;N;;;;;\n1E29E;TOTO LETTER HA;Lo;0;L;;;;;N;;;;;\n1E29F;TOTO LETTER RA;Lo;0;L;;;;;N;;;;;\n1E2A0;TOTO LETTER LA;Lo;0;L;;;;;N;;;;;\n1E2A1;TOTO LETTER I;Lo;0;L;;;;;N;;;;;\n1E2A2;TOTO LETTER BREATHY I;Lo;0;L;;;;;N;;;;;\n1E2A3;TOTO LETTER IU;Lo;0;L;;;;;N;;;;;\n1E2A4;TOTO LETTER BREATHY IU;Lo;0;L;;;;;N;;;;;\n1E2A5;TOTO LETTER U;Lo;0;L;;;;;N;;;;;\n1E2A6;TOTO LETTER E;Lo;0;L;;;;;N;;;;;\n1E2A7;TOTO LETTER BREATHY E;Lo;0;L;;;;;N;;;;;\n1E2A8;TOTO LETTER EO;Lo;0;L;;;;;N;;;;;\n1E2A9;TOTO LETTER BREATHY EO;Lo;0;L;;;;;N;;;;;\n1E2AA;TOTO LETTER O;Lo;0;L;;;;;N;;;;;\n1E2AB;TOTO LETTER AE;Lo;0;L;;;;;N;;;;;\n1E2AC;TOTO LETTER BREATHY AE;Lo;0;L;;;;;N;;;;;\n1E2AD;TOTO LETTER A;Lo;0;L;;;;;N;;;;;\n1E2AE;TOTO SIGN RISING TONE;Mn;230;NSM;;;;;N;;;;;\n1E2C0;WANCHO LETTER AA;Lo;0;L;;;;;N;;;;;\n1E2C1;WANCHO LETTER A;Lo;0;L;;;;;N;;;;;\n1E2C2;WANCHO LETTER BA;Lo;0;L;;;;;N;;;;;\n1E2C3;WANCHO LETTER CA;Lo;0;L;;;;;N;;;;;\n1E2C4;WANCHO LETTER DA;Lo;0;L;;;;;N;;;;;\n1E2C5;WANCHO LETTER GA;Lo;0;L;;;;;N;;;;;\n1E2C6;WANCHO LETTER YA;Lo;0;L;;;;;N;;;;;\n1E2C7;WANCHO LETTER PHA;Lo;0;L;;;;;N;;;;;\n1E2C8;WANCHO LETTER LA;Lo;0;L;;;;;N;;;;;\n1E2C9;WANCHO LETTER NA;Lo;0;L;;;;;N;;;;;\n1E2CA;WANCHO LETTER PA;Lo;0;L;;;;;N;;;;;\n1E2CB;WANCHO LETTER TA;Lo;0;L;;;;;N;;;;;\n1E2CC;WANCHO LETTER THA;Lo;0;L;;;;;N;;;;;\n1E2CD;WANCHO LETTER FA;Lo;0;L;;;;;N;;;;;\n1E2CE;WANCHO LETTER SA;Lo;0;L;;;;;N;;;;;\n1E2CF;WANCHO LETTER SHA;Lo;0;L;;;;;N;;;;;\n1E2D0;WANCHO LETTER JA;Lo;0;L;;;;;N;;;;;\n1E2D1;WANCHO LETTER ZA;Lo;0;L;;;;;N;;;;;\n1E2D2;WANCHO LETTER WA;Lo;0;L;;;;;N;;;;;\n1E2D3;WANCHO LETTER VA;Lo;0;L;;;;;N;;;;;\n1E2D4;WANCHO LETTER KA;Lo;0;L;;;;;N;;;;;\n1E2D5;WANCHO LETTER O;Lo;0;L;;;;;N;;;;;\n1E2D6;WANCHO LETTER AU;Lo;0;L;;;;;N;;;;;\n1E2D7;WANCHO LETTER RA;Lo;0;L;;;;;N;;;;;\n1E2D8;WANCHO LETTER MA;Lo;0;L;;;;;N;;;;;\n1E2D9;WANCHO LETTER KHA;Lo;0;L;;;;;N;;;;;\n1E2DA;WANCHO LETTER HA;Lo;0;L;;;;;N;;;;;\n1E2DB;WANCHO LETTER E;Lo;0;L;;;;;N;;;;;\n1E2DC;WANCHO LETTER I;Lo;0;L;;;;;N;;;;;\n1E2DD;WANCHO LETTER NGA;Lo;0;L;;;;;N;;;;;\n1E2DE;WANCHO LETTER U;Lo;0;L;;;;;N;;;;;\n1E2DF;WANCHO LETTER LLHA;Lo;0;L;;;;;N;;;;;\n1E2E0;WANCHO LETTER TSA;Lo;0;L;;;;;N;;;;;\n1E2E1;WANCHO LETTER TRA;Lo;0;L;;;;;N;;;;;\n1E2E2;WANCHO LETTER ONG;Lo;0;L;;;;;N;;;;;\n1E2E3;WANCHO LETTER AANG;Lo;0;L;;;;;N;;;;;\n1E2E4;WANCHO LETTER ANG;Lo;0;L;;;;;N;;;;;\n1E2E5;WANCHO LETTER ING;Lo;0;L;;;;;N;;;;;\n1E2E6;WANCHO LETTER ON;Lo;0;L;;;;;N;;;;;\n1E2E7;WANCHO LETTER EN;Lo;0;L;;;;;N;;;;;\n1E2E8;WANCHO LETTER AAN;Lo;0;L;;;;;N;;;;;\n1E2E9;WANCHO LETTER NYA;Lo;0;L;;;;;N;;;;;\n1E2EA;WANCHO LETTER UEN;Lo;0;L;;;;;N;;;;;\n1E2EB;WANCHO LETTER YIH;Lo;0;L;;;;;N;;;;;\n1E2EC;WANCHO TONE TUP;Mn;230;NSM;;;;;N;;;;;\n1E2ED;WANCHO TONE TUPNI;Mn;230;NSM;;;;;N;;;;;\n1E2EE;WANCHO TONE KOI;Mn;230;NSM;;;;;N;;;;;\n1E2EF;WANCHO TONE KOINI;Mn;230;NSM;;;;;N;;;;;\n1E2F0;WANCHO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1E2F1;WANCHO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1E2F2;WANCHO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1E2F3;WANCHO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1E2F4;WANCHO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1E2F5;WANCHO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1E2F6;WANCHO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1E2F7;WANCHO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1E2F8;WANCHO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1E2F9;WANCHO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1E2FF;WANCHO NGUN SIGN;Sc;0;ET;;;;;N;;;;;\n1E4D0;NAG MUNDARI LETTER O;Lo;0;L;;;;;N;;;;;\n1E4D1;NAG MUNDARI LETTER OP;Lo;0;L;;;;;N;;;;;\n1E4D2;NAG MUNDARI LETTER OL;Lo;0;L;;;;;N;;;;;\n1E4D3;NAG MUNDARI LETTER OY;Lo;0;L;;;;;N;;;;;\n1E4D4;NAG MUNDARI LETTER ONG;Lo;0;L;;;;;N;;;;;\n1E4D5;NAG MUNDARI LETTER A;Lo;0;L;;;;;N;;;;;\n1E4D6;NAG MUNDARI LETTER AJ;Lo;0;L;;;;;N;;;;;\n1E4D7;NAG MUNDARI LETTER AB;Lo;0;L;;;;;N;;;;;\n1E4D8;NAG MUNDARI LETTER ANY;Lo;0;L;;;;;N;;;;;\n1E4D9;NAG MUNDARI LETTER AH;Lo;0;L;;;;;N;;;;;\n1E4DA;NAG MUNDARI LETTER I;Lo;0;L;;;;;N;;;;;\n1E4DB;NAG MUNDARI LETTER IS;Lo;0;L;;;;;N;;;;;\n1E4DC;NAG MUNDARI LETTER IDD;Lo;0;L;;;;;N;;;;;\n1E4DD;NAG MUNDARI LETTER IT;Lo;0;L;;;;;N;;;;;\n1E4DE;NAG MUNDARI LETTER IH;Lo;0;L;;;;;N;;;;;\n1E4DF;NAG MUNDARI LETTER U;Lo;0;L;;;;;N;;;;;\n1E4E0;NAG MUNDARI LETTER UC;Lo;0;L;;;;;N;;;;;\n1E4E1;NAG MUNDARI LETTER UD;Lo;0;L;;;;;N;;;;;\n1E4E2;NAG MUNDARI LETTER UK;Lo;0;L;;;;;N;;;;;\n1E4E3;NAG MUNDARI LETTER UR;Lo;0;L;;;;;N;;;;;\n1E4E4;NAG MUNDARI LETTER E;Lo;0;L;;;;;N;;;;;\n1E4E5;NAG MUNDARI LETTER ENN;Lo;0;L;;;;;N;;;;;\n1E4E6;NAG MUNDARI LETTER EG;Lo;0;L;;;;;N;;;;;\n1E4E7;NAG MUNDARI LETTER EM;Lo;0;L;;;;;N;;;;;\n1E4E8;NAG MUNDARI LETTER EN;Lo;0;L;;;;;N;;;;;\n1E4E9;NAG MUNDARI LETTER ETT;Lo;0;L;;;;;N;;;;;\n1E4EA;NAG MUNDARI LETTER ELL;Lo;0;L;;;;;N;;;;;\n1E4EB;NAG MUNDARI SIGN OJOD;Lm;0;L;;;;;N;;;;;\n1E4EC;NAG MUNDARI SIGN MUHOR;Mn;232;NSM;;;;;N;;;;;\n1E4ED;NAG MUNDARI SIGN TOYOR;Mn;232;NSM;;;;;N;;;;;\n1E4EE;NAG MUNDARI SIGN IKIR;Mn;220;NSM;;;;;N;;;;;\n1E4EF;NAG MUNDARI SIGN SUTUH;Mn;230;NSM;;;;;N;;;;;\n1E4F0;NAG MUNDARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1E4F1;NAG MUNDARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1E4F2;NAG MUNDARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1E4F3;NAG MUNDARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1E4F4;NAG MUNDARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1E4F5;NAG MUNDARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1E4F6;NAG MUNDARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1E4F7;NAG MUNDARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1E4F8;NAG MUNDARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1E4F9;NAG MUNDARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1E5D0;OL ONAL LETTER O;Lo;0;L;;;;;N;;;;;\n1E5D1;OL ONAL LETTER OM;Lo;0;L;;;;;N;;;;;\n1E5D2;OL ONAL LETTER ONG;Lo;0;L;;;;;N;;;;;\n1E5D3;OL ONAL LETTER ORR;Lo;0;L;;;;;N;;;;;\n1E5D4;OL ONAL LETTER OO;Lo;0;L;;;;;N;;;;;\n1E5D5;OL ONAL LETTER OY;Lo;0;L;;;;;N;;;;;\n1E5D6;OL ONAL LETTER A;Lo;0;L;;;;;N;;;;;\n1E5D7;OL ONAL LETTER AD;Lo;0;L;;;;;N;;;;;\n1E5D8;OL ONAL LETTER AB;Lo;0;L;;;;;N;;;;;\n1E5D9;OL ONAL LETTER AH;Lo;0;L;;;;;N;;;;;\n1E5DA;OL ONAL LETTER AL;Lo;0;L;;;;;N;;;;;\n1E5DB;OL ONAL LETTER AW;Lo;0;L;;;;;N;;;;;\n1E5DC;OL ONAL LETTER I;Lo;0;L;;;;;N;;;;;\n1E5DD;OL ONAL LETTER IT;Lo;0;L;;;;;N;;;;;\n1E5DE;OL ONAL LETTER IP;Lo;0;L;;;;;N;;;;;\n1E5DF;OL ONAL LETTER ITT;Lo;0;L;;;;;N;;;;;\n1E5E0;OL ONAL LETTER ID;Lo;0;L;;;;;N;;;;;\n1E5E1;OL ONAL LETTER IN;Lo;0;L;;;;;N;;;;;\n1E5E2;OL ONAL LETTER U;Lo;0;L;;;;;N;;;;;\n1E5E3;OL ONAL LETTER UK;Lo;0;L;;;;;N;;;;;\n1E5E4;OL ONAL LETTER UDD;Lo;0;L;;;;;N;;;;;\n1E5E5;OL ONAL LETTER UJ;Lo;0;L;;;;;N;;;;;\n1E5E6;OL ONAL LETTER UNY;Lo;0;L;;;;;N;;;;;\n1E5E7;OL ONAL LETTER UR;Lo;0;L;;;;;N;;;;;\n1E5E8;OL ONAL LETTER E;Lo;0;L;;;;;N;;;;;\n1E5E9;OL ONAL LETTER ES;Lo;0;L;;;;;N;;;;;\n1E5EA;OL ONAL LETTER EH;Lo;0;L;;;;;N;;;;;\n1E5EB;OL ONAL LETTER EC;Lo;0;L;;;;;N;;;;;\n1E5EC;OL ONAL LETTER ENN;Lo;0;L;;;;;N;;;;;\n1E5ED;OL ONAL LETTER EG;Lo;0;L;;;;;N;;;;;\n1E5EE;OL ONAL SIGN MU;Mn;230;NSM;;;;;N;;;;;\n1E5EF;OL ONAL SIGN IKIR;Mn;220;NSM;;;;;N;;;;;\n1E5F0;OL ONAL SIGN HODDOND;Lo;0;L;;;;;N;;;;;\n1E5F1;OL ONAL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;\n1E5F2;OL ONAL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;\n1E5F3;OL ONAL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;\n1E5F4;OL ONAL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;\n1E5F5;OL ONAL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;\n1E5F6;OL ONAL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;\n1E5F7;OL ONAL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;\n1E5F8;OL ONAL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;\n1E5F9;OL ONAL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;\n1E5FA;OL ONAL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;\n1E5FF;OL ONAL ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;\n1E6C0;TAI YO LETTER LOW KO;Lo;0;L;;;;;N;;;;;\n1E6C1;TAI YO LETTER HIGH KO;Lo;0;L;;;;;N;;;;;\n1E6C2;TAI YO LETTER LOW KHO;Lo;0;L;;;;;N;;;;;\n1E6C3;TAI YO LETTER HIGH KHO;Lo;0;L;;;;;N;;;;;\n1E6C4;TAI YO LETTER GO;Lo;0;L;;;;;N;;;;;\n1E6C5;TAI YO LETTER NGO;Lo;0;L;;;;;N;;;;;\n1E6C6;TAI YO LETTER CO;Lo;0;L;;;;;N;;;;;\n1E6C7;TAI YO LETTER LOW XO;Lo;0;L;;;;;N;;;;;\n1E6C8;TAI YO LETTER HIGH XO;Lo;0;L;;;;;N;;;;;\n1E6C9;TAI YO LETTER LOW NYO;Lo;0;L;;;;;N;;;;;\n1E6CA;TAI YO LETTER HIGH NYO;Lo;0;L;;;;;N;;;;;\n1E6CB;TAI YO LETTER DO;Lo;0;L;;;;;N;;;;;\n1E6CC;TAI YO LETTER LOW TO;Lo;0;L;;;;;N;;;;;\n1E6CD;TAI YO LETTER HIGH TO;Lo;0;L;;;;;N;;;;;\n1E6CE;TAI YO LETTER THO;Lo;0;L;;;;;N;;;;;\n1E6CF;TAI YO LETTER NO;Lo;0;L;;;;;N;;;;;\n1E6D0;TAI YO LETTER BO;Lo;0;L;;;;;N;;;;;\n1E6D1;TAI YO LETTER LOW PO;Lo;0;L;;;;;N;;;;;\n1E6D2;TAI YO LETTER HIGH PO;Lo;0;L;;;;;N;;;;;\n1E6D3;TAI YO LETTER PHO;Lo;0;L;;;;;N;;;;;\n1E6D4;TAI YO LETTER LOW FO;Lo;0;L;;;;;N;;;;;\n1E6D5;TAI YO LETTER HIGH FO;Lo;0;L;;;;;N;;;;;\n1E6D6;TAI YO LETTER MO;Lo;0;L;;;;;N;;;;;\n1E6D7;TAI YO LETTER YO;Lo;0;L;;;;;N;;;;;\n1E6D8;TAI YO LETTER LO;Lo;0;L;;;;;N;;;;;\n1E6D9;TAI YO LETTER VO;Lo;0;L;;;;;N;;;;;\n1E6DA;TAI YO LETTER LOW HO;Lo;0;L;;;;;N;;;;;\n1E6DB;TAI YO LETTER HIGH HO;Lo;0;L;;;;;N;;;;;\n1E6DC;TAI YO LETTER QO;Lo;0;L;;;;;N;;;;;\n1E6DD;TAI YO LETTER LOW KVO;Lo;0;L;;;;;N;;;;;\n1E6DE;TAI YO LETTER HIGH KVO;Lo;0;L;;;;;N;;;;;\n1E6E0;TAI YO LETTER AA;Lo;0;L;;;;;N;;;;;\n1E6E1;TAI YO LETTER I;Lo;0;L;;;;;N;;;;;\n1E6E2;TAI YO LETTER UE;Lo;0;L;;;;;N;;;;;\n1E6E3;TAI YO SIGN UE;Mn;230;NSM;;;;;N;;;;;\n1E6E4;TAI YO LETTER U;Lo;0;L;;;;;N;;;;;\n1E6E5;TAI YO LETTER AE;Lo;0;L;;;;;N;;;;;\n1E6E6;TAI YO SIGN AU;Mn;230;NSM;;;;;N;;;;;\n1E6E7;TAI YO LETTER O;Lo;0;L;;;;;N;;;;;\n1E6E8;TAI YO LETTER E;Lo;0;L;;;;;N;;;;;\n1E6E9;TAI YO LETTER IA;Lo;0;L;;;;;N;;;;;\n1E6EA;TAI YO LETTER UEA;Lo;0;L;;;;;N;;;;;\n1E6EB;TAI YO LETTER UA;Lo;0;L;;;;;N;;;;;\n1E6EC;TAI YO LETTER OO;Lo;0;L;;;;;N;;;;;\n1E6ED;TAI YO LETTER AUE;Lo;0;L;;;;;N;;;;;\n1E6EE;TAI YO SIGN AY;Mn;230;NSM;;;;;N;;;;;\n1E6EF;TAI YO SIGN ANG;Mn;230;NSM;;;;;N;;;;;\n1E6F0;TAI YO LETTER AN;Lo;0;L;;;;;N;;;;;\n1E6F1;TAI YO LETTER AM;Lo;0;L;;;;;N;;;;;\n1E6F2;TAI YO LETTER AK;Lo;0;L;;;;;N;;;;;\n1E6F3;TAI YO LETTER AT;Lo;0;L;;;;;N;;;;;\n1E6F4;TAI YO LETTER AP;Lo;0;L;;;;;N;;;;;\n1E6F5;TAI YO SIGN OM;Mn;230;NSM;;;;;N;;;;;\n1E6FE;TAI YO SYMBOL MUEANG;Lo;0;L;;;;;N;;;;;\n1E6FF;TAI YO XAM LAI;Lm;0;L;;;;;N;;;;;\n1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;;\n1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;;\n1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;;\n1E7E3;ETHIOPIC SYLLABLE HHYAA;Lo;0;L;;;;;N;;;;;\n1E7E4;ETHIOPIC SYLLABLE HHYEE;Lo;0;L;;;;;N;;;;;\n1E7E5;ETHIOPIC SYLLABLE HHYE;Lo;0;L;;;;;N;;;;;\n1E7E6;ETHIOPIC SYLLABLE HHYO;Lo;0;L;;;;;N;;;;;\n1E7E8;ETHIOPIC SYLLABLE GURAGE HHWA;Lo;0;L;;;;;N;;;;;\n1E7E9;ETHIOPIC SYLLABLE HHWI;Lo;0;L;;;;;N;;;;;\n1E7EA;ETHIOPIC SYLLABLE HHWEE;Lo;0;L;;;;;N;;;;;\n1E7EB;ETHIOPIC SYLLABLE HHWE;Lo;0;L;;;;;N;;;;;\n1E7ED;ETHIOPIC SYLLABLE GURAGE MWI;Lo;0;L;;;;;N;;;;;\n1E7EE;ETHIOPIC SYLLABLE GURAGE MWEE;Lo;0;L;;;;;N;;;;;\n1E7F0;ETHIOPIC SYLLABLE GURAGE QWI;Lo;0;L;;;;;N;;;;;\n1E7F1;ETHIOPIC SYLLABLE GURAGE QWEE;Lo;0;L;;;;;N;;;;;\n1E7F2;ETHIOPIC SYLLABLE GURAGE QWE;Lo;0;L;;;;;N;;;;;\n1E7F3;ETHIOPIC SYLLABLE GURAGE BWI;Lo;0;L;;;;;N;;;;;\n1E7F4;ETHIOPIC SYLLABLE GURAGE BWEE;Lo;0;L;;;;;N;;;;;\n1E7F5;ETHIOPIC SYLLABLE GURAGE KWI;Lo;0;L;;;;;N;;;;;\n1E7F6;ETHIOPIC SYLLABLE GURAGE KWEE;Lo;0;L;;;;;N;;;;;\n1E7F7;ETHIOPIC SYLLABLE GURAGE KWE;Lo;0;L;;;;;N;;;;;\n1E7F8;ETHIOPIC SYLLABLE GURAGE GWI;Lo;0;L;;;;;N;;;;;\n1E7F9;ETHIOPIC SYLLABLE GURAGE GWEE;Lo;0;L;;;;;N;;;;;\n1E7FA;ETHIOPIC SYLLABLE GURAGE GWE;Lo;0;L;;;;;N;;;;;\n1E7FB;ETHIOPIC SYLLABLE GURAGE FWI;Lo;0;L;;;;;N;;;;;\n1E7FC;ETHIOPIC SYLLABLE GURAGE FWEE;Lo;0;L;;;;;N;;;;;\n1E7FD;ETHIOPIC SYLLABLE GURAGE PWI;Lo;0;L;;;;;N;;;;;\n1E7FE;ETHIOPIC SYLLABLE GURAGE PWEE;Lo;0;L;;;;;N;;;;;\n1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;;\n1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;;\n1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;;\n1E803;MENDE KIKAKUI SYLLABLE M065 KEE;Lo;0;R;;;;;N;;;;;\n1E804;MENDE KIKAKUI SYLLABLE M095 KE;Lo;0;R;;;;;N;;;;;\n1E805;MENDE KIKAKUI SYLLABLE M076 KOO;Lo;0;R;;;;;N;;;;;\n1E806;MENDE KIKAKUI SYLLABLE M048 KO;Lo;0;R;;;;;N;;;;;\n1E807;MENDE KIKAKUI SYLLABLE M179 KUA;Lo;0;R;;;;;N;;;;;\n1E808;MENDE KIKAKUI SYLLABLE M004 WI;Lo;0;R;;;;;N;;;;;\n1E809;MENDE KIKAKUI SYLLABLE M005 WA;Lo;0;R;;;;;N;;;;;\n1E80A;MENDE KIKAKUI SYLLABLE M006 WU;Lo;0;R;;;;;N;;;;;\n1E80B;MENDE KIKAKUI SYLLABLE M126 WEE;Lo;0;R;;;;;N;;;;;\n1E80C;MENDE KIKAKUI SYLLABLE M118 WE;Lo;0;R;;;;;N;;;;;\n1E80D;MENDE KIKAKUI SYLLABLE M114 WOO;Lo;0;R;;;;;N;;;;;\n1E80E;MENDE KIKAKUI SYLLABLE M045 WO;Lo;0;R;;;;;N;;;;;\n1E80F;MENDE KIKAKUI SYLLABLE M194 WUI;Lo;0;R;;;;;N;;;;;\n1E810;MENDE KIKAKUI SYLLABLE M143 WEI;Lo;0;R;;;;;N;;;;;\n1E811;MENDE KIKAKUI SYLLABLE M061 WVI;Lo;0;R;;;;;N;;;;;\n1E812;MENDE KIKAKUI SYLLABLE M049 WVA;Lo;0;R;;;;;N;;;;;\n1E813;MENDE KIKAKUI SYLLABLE M139 WVE;Lo;0;R;;;;;N;;;;;\n1E814;MENDE KIKAKUI SYLLABLE M007 MIN;Lo;0;R;;;;;N;;;;;\n1E815;MENDE KIKAKUI SYLLABLE M008 MAN;Lo;0;R;;;;;N;;;;;\n1E816;MENDE KIKAKUI SYLLABLE M009 MUN;Lo;0;R;;;;;N;;;;;\n1E817;MENDE KIKAKUI SYLLABLE M059 MEN;Lo;0;R;;;;;N;;;;;\n1E818;MENDE KIKAKUI SYLLABLE M094 MON;Lo;0;R;;;;;N;;;;;\n1E819;MENDE KIKAKUI SYLLABLE M154 MUAN;Lo;0;R;;;;;N;;;;;\n1E81A;MENDE KIKAKUI SYLLABLE M189 MUEN;Lo;0;R;;;;;N;;;;;\n1E81B;MENDE KIKAKUI SYLLABLE M010 BI;Lo;0;R;;;;;N;;;;;\n1E81C;MENDE KIKAKUI SYLLABLE M011 BA;Lo;0;R;;;;;N;;;;;\n1E81D;MENDE KIKAKUI SYLLABLE M012 BU;Lo;0;R;;;;;N;;;;;\n1E81E;MENDE KIKAKUI SYLLABLE M150 BEE;Lo;0;R;;;;;N;;;;;\n1E81F;MENDE KIKAKUI SYLLABLE M097 BE;Lo;0;R;;;;;N;;;;;\n1E820;MENDE KIKAKUI SYLLABLE M103 BOO;Lo;0;R;;;;;N;;;;;\n1E821;MENDE KIKAKUI SYLLABLE M138 BO;Lo;0;R;;;;;N;;;;;\n1E822;MENDE KIKAKUI SYLLABLE M013 I;Lo;0;R;;;;;N;;;;;\n1E823;MENDE KIKAKUI SYLLABLE M014 A;Lo;0;R;;;;;N;;;;;\n1E824;MENDE KIKAKUI SYLLABLE M015 U;Lo;0;R;;;;;N;;;;;\n1E825;MENDE KIKAKUI SYLLABLE M163 EE;Lo;0;R;;;;;N;;;;;\n1E826;MENDE KIKAKUI SYLLABLE M100 E;Lo;0;R;;;;;N;;;;;\n1E827;MENDE KIKAKUI SYLLABLE M165 OO;Lo;0;R;;;;;N;;;;;\n1E828;MENDE KIKAKUI SYLLABLE M147 O;Lo;0;R;;;;;N;;;;;\n1E829;MENDE KIKAKUI SYLLABLE M137 EI;Lo;0;R;;;;;N;;;;;\n1E82A;MENDE KIKAKUI SYLLABLE M131 IN;Lo;0;R;;;;;N;;;;;\n1E82B;MENDE KIKAKUI SYLLABLE M135 IN;Lo;0;R;;;;;N;;;;;\n1E82C;MENDE KIKAKUI SYLLABLE M195 AN;Lo;0;R;;;;;N;;;;;\n1E82D;MENDE KIKAKUI SYLLABLE M178 EN;Lo;0;R;;;;;N;;;;;\n1E82E;MENDE KIKAKUI SYLLABLE M019 SI;Lo;0;R;;;;;N;;;;;\n1E82F;MENDE KIKAKUI SYLLABLE M020 SA;Lo;0;R;;;;;N;;;;;\n1E830;MENDE KIKAKUI SYLLABLE M021 SU;Lo;0;R;;;;;N;;;;;\n1E831;MENDE KIKAKUI SYLLABLE M162 SEE;Lo;0;R;;;;;N;;;;;\n1E832;MENDE KIKAKUI SYLLABLE M116 SE;Lo;0;R;;;;;N;;;;;\n1E833;MENDE KIKAKUI SYLLABLE M136 SOO;Lo;0;R;;;;;N;;;;;\n1E834;MENDE KIKAKUI SYLLABLE M079 SO;Lo;0;R;;;;;N;;;;;\n1E835;MENDE KIKAKUI SYLLABLE M196 SIA;Lo;0;R;;;;;N;;;;;\n1E836;MENDE KIKAKUI SYLLABLE M025 LI;Lo;0;R;;;;;N;;;;;\n1E837;MENDE KIKAKUI SYLLABLE M026 LA;Lo;0;R;;;;;N;;;;;\n1E838;MENDE KIKAKUI SYLLABLE M027 LU;Lo;0;R;;;;;N;;;;;\n1E839;MENDE KIKAKUI SYLLABLE M084 LEE;Lo;0;R;;;;;N;;;;;\n1E83A;MENDE KIKAKUI SYLLABLE M073 LE;Lo;0;R;;;;;N;;;;;\n1E83B;MENDE KIKAKUI SYLLABLE M054 LOO;Lo;0;R;;;;;N;;;;;\n1E83C;MENDE KIKAKUI SYLLABLE M153 LO;Lo;0;R;;;;;N;;;;;\n1E83D;MENDE KIKAKUI SYLLABLE M110 LONG LE;Lo;0;R;;;;;N;;;;;\n1E83E;MENDE KIKAKUI SYLLABLE M016 DI;Lo;0;R;;;;;N;;;;;\n1E83F;MENDE KIKAKUI SYLLABLE M017 DA;Lo;0;R;;;;;N;;;;;\n1E840;MENDE KIKAKUI SYLLABLE M018 DU;Lo;0;R;;;;;N;;;;;\n1E841;MENDE KIKAKUI SYLLABLE M089 DEE;Lo;0;R;;;;;N;;;;;\n1E842;MENDE KIKAKUI SYLLABLE M180 DOO;Lo;0;R;;;;;N;;;;;\n1E843;MENDE KIKAKUI SYLLABLE M181 DO;Lo;0;R;;;;;N;;;;;\n1E844;MENDE KIKAKUI SYLLABLE M022 TI;Lo;0;R;;;;;N;;;;;\n1E845;MENDE KIKAKUI SYLLABLE M023 TA;Lo;0;R;;;;;N;;;;;\n1E846;MENDE KIKAKUI SYLLABLE M024 TU;Lo;0;R;;;;;N;;;;;\n1E847;MENDE KIKAKUI SYLLABLE M091 TEE;Lo;0;R;;;;;N;;;;;\n1E848;MENDE KIKAKUI SYLLABLE M055 TE;Lo;0;R;;;;;N;;;;;\n1E849;MENDE KIKAKUI SYLLABLE M104 TOO;Lo;0;R;;;;;N;;;;;\n1E84A;MENDE KIKAKUI SYLLABLE M069 TO;Lo;0;R;;;;;N;;;;;\n1E84B;MENDE KIKAKUI SYLLABLE M028 JI;Lo;0;R;;;;;N;;;;;\n1E84C;MENDE KIKAKUI SYLLABLE M029 JA;Lo;0;R;;;;;N;;;;;\n1E84D;MENDE KIKAKUI SYLLABLE M030 JU;Lo;0;R;;;;;N;;;;;\n1E84E;MENDE KIKAKUI SYLLABLE M157 JEE;Lo;0;R;;;;;N;;;;;\n1E84F;MENDE KIKAKUI SYLLABLE M113 JE;Lo;0;R;;;;;N;;;;;\n1E850;MENDE KIKAKUI SYLLABLE M160 JOO;Lo;0;R;;;;;N;;;;;\n1E851;MENDE KIKAKUI SYLLABLE M063 JO;Lo;0;R;;;;;N;;;;;\n1E852;MENDE KIKAKUI SYLLABLE M175 LONG JO;Lo;0;R;;;;;N;;;;;\n1E853;MENDE KIKAKUI SYLLABLE M031 YI;Lo;0;R;;;;;N;;;;;\n1E854;MENDE KIKAKUI SYLLABLE M032 YA;Lo;0;R;;;;;N;;;;;\n1E855;MENDE KIKAKUI SYLLABLE M033 YU;Lo;0;R;;;;;N;;;;;\n1E856;MENDE KIKAKUI SYLLABLE M109 YEE;Lo;0;R;;;;;N;;;;;\n1E857;MENDE KIKAKUI SYLLABLE M080 YE;Lo;0;R;;;;;N;;;;;\n1E858;MENDE KIKAKUI SYLLABLE M141 YOO;Lo;0;R;;;;;N;;;;;\n1E859;MENDE KIKAKUI SYLLABLE M121 YO;Lo;0;R;;;;;N;;;;;\n1E85A;MENDE KIKAKUI SYLLABLE M034 FI;Lo;0;R;;;;;N;;;;;\n1E85B;MENDE KIKAKUI SYLLABLE M035 FA;Lo;0;R;;;;;N;;;;;\n1E85C;MENDE KIKAKUI SYLLABLE M036 FU;Lo;0;R;;;;;N;;;;;\n1E85D;MENDE KIKAKUI SYLLABLE M078 FEE;Lo;0;R;;;;;N;;;;;\n1E85E;MENDE KIKAKUI SYLLABLE M075 FE;Lo;0;R;;;;;N;;;;;\n1E85F;MENDE KIKAKUI SYLLABLE M133 FOO;Lo;0;R;;;;;N;;;;;\n1E860;MENDE KIKAKUI SYLLABLE M088 FO;Lo;0;R;;;;;N;;;;;\n1E861;MENDE KIKAKUI SYLLABLE M197 FUA;Lo;0;R;;;;;N;;;;;\n1E862;MENDE KIKAKUI SYLLABLE M101 FAN;Lo;0;R;;;;;N;;;;;\n1E863;MENDE KIKAKUI SYLLABLE M037 NIN;Lo;0;R;;;;;N;;;;;\n1E864;MENDE KIKAKUI SYLLABLE M038 NAN;Lo;0;R;;;;;N;;;;;\n1E865;MENDE KIKAKUI SYLLABLE M039 NUN;Lo;0;R;;;;;N;;;;;\n1E866;MENDE KIKAKUI SYLLABLE M117 NEN;Lo;0;R;;;;;N;;;;;\n1E867;MENDE KIKAKUI SYLLABLE M169 NON;Lo;0;R;;;;;N;;;;;\n1E868;MENDE KIKAKUI SYLLABLE M176 HI;Lo;0;R;;;;;N;;;;;\n1E869;MENDE KIKAKUI SYLLABLE M041 HA;Lo;0;R;;;;;N;;;;;\n1E86A;MENDE KIKAKUI SYLLABLE M186 HU;Lo;0;R;;;;;N;;;;;\n1E86B;MENDE KIKAKUI SYLLABLE M040 HEE;Lo;0;R;;;;;N;;;;;\n1E86C;MENDE KIKAKUI SYLLABLE M096 HE;Lo;0;R;;;;;N;;;;;\n1E86D;MENDE KIKAKUI SYLLABLE M042 HOO;Lo;0;R;;;;;N;;;;;\n1E86E;MENDE KIKAKUI SYLLABLE M140 HO;Lo;0;R;;;;;N;;;;;\n1E86F;MENDE KIKAKUI SYLLABLE M083 HEEI;Lo;0;R;;;;;N;;;;;\n1E870;MENDE KIKAKUI SYLLABLE M128 HOOU;Lo;0;R;;;;;N;;;;;\n1E871;MENDE KIKAKUI SYLLABLE M053 HIN;Lo;0;R;;;;;N;;;;;\n1E872;MENDE KIKAKUI SYLLABLE M130 HAN;Lo;0;R;;;;;N;;;;;\n1E873;MENDE KIKAKUI SYLLABLE M087 HUN;Lo;0;R;;;;;N;;;;;\n1E874;MENDE KIKAKUI SYLLABLE M052 HEN;Lo;0;R;;;;;N;;;;;\n1E875;MENDE KIKAKUI SYLLABLE M193 HON;Lo;0;R;;;;;N;;;;;\n1E876;MENDE KIKAKUI SYLLABLE M046 HUAN;Lo;0;R;;;;;N;;;;;\n1E877;MENDE KIKAKUI SYLLABLE M090 NGGI;Lo;0;R;;;;;N;;;;;\n1E878;MENDE KIKAKUI SYLLABLE M043 NGGA;Lo;0;R;;;;;N;;;;;\n1E879;MENDE KIKAKUI SYLLABLE M082 NGGU;Lo;0;R;;;;;N;;;;;\n1E87A;MENDE KIKAKUI SYLLABLE M115 NGGEE;Lo;0;R;;;;;N;;;;;\n1E87B;MENDE KIKAKUI SYLLABLE M146 NGGE;Lo;0;R;;;;;N;;;;;\n1E87C;MENDE KIKAKUI SYLLABLE M156 NGGOO;Lo;0;R;;;;;N;;;;;\n1E87D;MENDE KIKAKUI SYLLABLE M120 NGGO;Lo;0;R;;;;;N;;;;;\n1E87E;MENDE KIKAKUI SYLLABLE M159 NGGAA;Lo;0;R;;;;;N;;;;;\n1E87F;MENDE KIKAKUI SYLLABLE M127 NGGUA;Lo;0;R;;;;;N;;;;;\n1E880;MENDE KIKAKUI SYLLABLE M086 LONG NGGE;Lo;0;R;;;;;N;;;;;\n1E881;MENDE KIKAKUI SYLLABLE M106 LONG NGGOO;Lo;0;R;;;;;N;;;;;\n1E882;MENDE KIKAKUI SYLLABLE M183 LONG NGGO;Lo;0;R;;;;;N;;;;;\n1E883;MENDE KIKAKUI SYLLABLE M155 GI;Lo;0;R;;;;;N;;;;;\n1E884;MENDE KIKAKUI SYLLABLE M111 GA;Lo;0;R;;;;;N;;;;;\n1E885;MENDE KIKAKUI SYLLABLE M168 GU;Lo;0;R;;;;;N;;;;;\n1E886;MENDE KIKAKUI SYLLABLE M190 GEE;Lo;0;R;;;;;N;;;;;\n1E887;MENDE KIKAKUI SYLLABLE M166 GUEI;Lo;0;R;;;;;N;;;;;\n1E888;MENDE KIKAKUI SYLLABLE M167 GUAN;Lo;0;R;;;;;N;;;;;\n1E889;MENDE KIKAKUI SYLLABLE M184 NGEN;Lo;0;R;;;;;N;;;;;\n1E88A;MENDE KIKAKUI SYLLABLE M057 NGON;Lo;0;R;;;;;N;;;;;\n1E88B;MENDE KIKAKUI SYLLABLE M177 NGUAN;Lo;0;R;;;;;N;;;;;\n1E88C;MENDE KIKAKUI SYLLABLE M068 PI;Lo;0;R;;;;;N;;;;;\n1E88D;MENDE KIKAKUI SYLLABLE M099 PA;Lo;0;R;;;;;N;;;;;\n1E88E;MENDE KIKAKUI SYLLABLE M050 PU;Lo;0;R;;;;;N;;;;;\n1E88F;MENDE KIKAKUI SYLLABLE M081 PEE;Lo;0;R;;;;;N;;;;;\n1E890;MENDE KIKAKUI SYLLABLE M051 PE;Lo;0;R;;;;;N;;;;;\n1E891;MENDE KIKAKUI SYLLABLE M102 POO;Lo;0;R;;;;;N;;;;;\n1E892;MENDE KIKAKUI SYLLABLE M066 PO;Lo;0;R;;;;;N;;;;;\n1E893;MENDE KIKAKUI SYLLABLE M145 MBI;Lo;0;R;;;;;N;;;;;\n1E894;MENDE KIKAKUI SYLLABLE M062 MBA;Lo;0;R;;;;;N;;;;;\n1E895;MENDE KIKAKUI SYLLABLE M122 MBU;Lo;0;R;;;;;N;;;;;\n1E896;MENDE KIKAKUI SYLLABLE M047 MBEE;Lo;0;R;;;;;N;;;;;\n1E897;MENDE KIKAKUI SYLLABLE M188 MBEE;Lo;0;R;;;;;N;;;;;\n1E898;MENDE KIKAKUI SYLLABLE M072 MBE;Lo;0;R;;;;;N;;;;;\n1E899;MENDE KIKAKUI SYLLABLE M172 MBOO;Lo;0;R;;;;;N;;;;;\n1E89A;MENDE KIKAKUI SYLLABLE M174 MBO;Lo;0;R;;;;;N;;;;;\n1E89B;MENDE KIKAKUI SYLLABLE M187 MBUU;Lo;0;R;;;;;N;;;;;\n1E89C;MENDE KIKAKUI SYLLABLE M161 LONG MBE;Lo;0;R;;;;;N;;;;;\n1E89D;MENDE KIKAKUI SYLLABLE M105 LONG MBOO;Lo;0;R;;;;;N;;;;;\n1E89E;MENDE KIKAKUI SYLLABLE M142 LONG MBO;Lo;0;R;;;;;N;;;;;\n1E89F;MENDE KIKAKUI SYLLABLE M132 KPI;Lo;0;R;;;;;N;;;;;\n1E8A0;MENDE KIKAKUI SYLLABLE M092 KPA;Lo;0;R;;;;;N;;;;;\n1E8A1;MENDE KIKAKUI SYLLABLE M074 KPU;Lo;0;R;;;;;N;;;;;\n1E8A2;MENDE KIKAKUI SYLLABLE M044 KPEE;Lo;0;R;;;;;N;;;;;\n1E8A3;MENDE KIKAKUI SYLLABLE M108 KPE;Lo;0;R;;;;;N;;;;;\n1E8A4;MENDE KIKAKUI SYLLABLE M112 KPOO;Lo;0;R;;;;;N;;;;;\n1E8A5;MENDE KIKAKUI SYLLABLE M158 KPO;Lo;0;R;;;;;N;;;;;\n1E8A6;MENDE KIKAKUI SYLLABLE M124 GBI;Lo;0;R;;;;;N;;;;;\n1E8A7;MENDE KIKAKUI SYLLABLE M056 GBA;Lo;0;R;;;;;N;;;;;\n1E8A8;MENDE KIKAKUI SYLLABLE M148 GBU;Lo;0;R;;;;;N;;;;;\n1E8A9;MENDE KIKAKUI SYLLABLE M093 GBEE;Lo;0;R;;;;;N;;;;;\n1E8AA;MENDE KIKAKUI SYLLABLE M107 GBE;Lo;0;R;;;;;N;;;;;\n1E8AB;MENDE KIKAKUI SYLLABLE M071 GBOO;Lo;0;R;;;;;N;;;;;\n1E8AC;MENDE KIKAKUI SYLLABLE M070 GBO;Lo;0;R;;;;;N;;;;;\n1E8AD;MENDE KIKAKUI SYLLABLE M171 RA;Lo;0;R;;;;;N;;;;;\n1E8AE;MENDE KIKAKUI SYLLABLE M123 NDI;Lo;0;R;;;;;N;;;;;\n1E8AF;MENDE KIKAKUI SYLLABLE M129 NDA;Lo;0;R;;;;;N;;;;;\n1E8B0;MENDE KIKAKUI SYLLABLE M125 NDU;Lo;0;R;;;;;N;;;;;\n1E8B1;MENDE KIKAKUI SYLLABLE M191 NDEE;Lo;0;R;;;;;N;;;;;\n1E8B2;MENDE KIKAKUI SYLLABLE M119 NDE;Lo;0;R;;;;;N;;;;;\n1E8B3;MENDE KIKAKUI SYLLABLE M067 NDOO;Lo;0;R;;;;;N;;;;;\n1E8B4;MENDE KIKAKUI SYLLABLE M064 NDO;Lo;0;R;;;;;N;;;;;\n1E8B5;MENDE KIKAKUI SYLLABLE M152 NJA;Lo;0;R;;;;;N;;;;;\n1E8B6;MENDE KIKAKUI SYLLABLE M192 NJU;Lo;0;R;;;;;N;;;;;\n1E8B7;MENDE KIKAKUI SYLLABLE M149 NJEE;Lo;0;R;;;;;N;;;;;\n1E8B8;MENDE KIKAKUI SYLLABLE M134 NJOO;Lo;0;R;;;;;N;;;;;\n1E8B9;MENDE KIKAKUI SYLLABLE M182 VI;Lo;0;R;;;;;N;;;;;\n1E8BA;MENDE KIKAKUI SYLLABLE M185 VA;Lo;0;R;;;;;N;;;;;\n1E8BB;MENDE KIKAKUI SYLLABLE M151 VU;Lo;0;R;;;;;N;;;;;\n1E8BC;MENDE KIKAKUI SYLLABLE M173 VEE;Lo;0;R;;;;;N;;;;;\n1E8BD;MENDE KIKAKUI SYLLABLE M085 VE;Lo;0;R;;;;;N;;;;;\n1E8BE;MENDE KIKAKUI SYLLABLE M144 VOO;Lo;0;R;;;;;N;;;;;\n1E8BF;MENDE KIKAKUI SYLLABLE M077 VO;Lo;0;R;;;;;N;;;;;\n1E8C0;MENDE KIKAKUI SYLLABLE M164 NYIN;Lo;0;R;;;;;N;;;;;\n1E8C1;MENDE KIKAKUI SYLLABLE M058 NYAN;Lo;0;R;;;;;N;;;;;\n1E8C2;MENDE KIKAKUI SYLLABLE M170 NYUN;Lo;0;R;;;;;N;;;;;\n1E8C3;MENDE KIKAKUI SYLLABLE M098 NYEN;Lo;0;R;;;;;N;;;;;\n1E8C4;MENDE KIKAKUI SYLLABLE M060 NYON;Lo;0;R;;;;;N;;;;;\n1E8C7;MENDE KIKAKUI DIGIT ONE;No;0;R;;;;1;N;;;;;\n1E8C8;MENDE KIKAKUI DIGIT TWO;No;0;R;;;;2;N;;;;;\n1E8C9;MENDE KIKAKUI DIGIT THREE;No;0;R;;;;3;N;;;;;\n1E8CA;MENDE KIKAKUI DIGIT FOUR;No;0;R;;;;4;N;;;;;\n1E8CB;MENDE KIKAKUI DIGIT FIVE;No;0;R;;;;5;N;;;;;\n1E8CC;MENDE KIKAKUI DIGIT SIX;No;0;R;;;;6;N;;;;;\n1E8CD;MENDE KIKAKUI DIGIT SEVEN;No;0;R;;;;7;N;;;;;\n1E8CE;MENDE KIKAKUI DIGIT EIGHT;No;0;R;;;;8;N;;;;;\n1E8CF;MENDE KIKAKUI DIGIT NINE;No;0;R;;;;9;N;;;;;\n1E8D0;MENDE KIKAKUI COMBINING NUMBER TEENS;Mn;220;NSM;;;;;N;;;;;\n1E8D1;MENDE KIKAKUI COMBINING NUMBER TENS;Mn;220;NSM;;;;;N;;;;;\n1E8D2;MENDE KIKAKUI COMBINING NUMBER HUNDREDS;Mn;220;NSM;;;;;N;;;;;\n1E8D3;MENDE KIKAKUI COMBINING NUMBER THOUSANDS;Mn;220;NSM;;;;;N;;;;;\n1E8D4;MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS;Mn;220;NSM;;;;;N;;;;;\n1E8D5;MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS;Mn;220;NSM;;;;;N;;;;;\n1E8D6;MENDE KIKAKUI COMBINING NUMBER MILLIONS;Mn;220;NSM;;;;;N;;;;;\n1E900;ADLAM CAPITAL LETTER ALIF;Lu;0;R;;;;;N;;;;1E922;\n1E901;ADLAM CAPITAL LETTER DAALI;Lu;0;R;;;;;N;;;;1E923;\n1E902;ADLAM CAPITAL LETTER LAAM;Lu;0;R;;;;;N;;;;1E924;\n1E903;ADLAM CAPITAL LETTER MIIM;Lu;0;R;;;;;N;;;;1E925;\n1E904;ADLAM CAPITAL LETTER BA;Lu;0;R;;;;;N;;;;1E926;\n1E905;ADLAM CAPITAL LETTER SINNYIIYHE;Lu;0;R;;;;;N;;;;1E927;\n1E906;ADLAM CAPITAL LETTER PE;Lu;0;R;;;;;N;;;;1E928;\n1E907;ADLAM CAPITAL LETTER BHE;Lu;0;R;;;;;N;;;;1E929;\n1E908;ADLAM CAPITAL LETTER RA;Lu;0;R;;;;;N;;;;1E92A;\n1E909;ADLAM CAPITAL LETTER E;Lu;0;R;;;;;N;;;;1E92B;\n1E90A;ADLAM CAPITAL LETTER FA;Lu;0;R;;;;;N;;;;1E92C;\n1E90B;ADLAM CAPITAL LETTER I;Lu;0;R;;;;;N;;;;1E92D;\n1E90C;ADLAM CAPITAL LETTER O;Lu;0;R;;;;;N;;;;1E92E;\n1E90D;ADLAM CAPITAL LETTER DHA;Lu;0;R;;;;;N;;;;1E92F;\n1E90E;ADLAM CAPITAL LETTER YHE;Lu;0;R;;;;;N;;;;1E930;\n1E90F;ADLAM CAPITAL LETTER WAW;Lu;0;R;;;;;N;;;;1E931;\n1E910;ADLAM CAPITAL LETTER NUN;Lu;0;R;;;;;N;;;;1E932;\n1E911;ADLAM CAPITAL LETTER KAF;Lu;0;R;;;;;N;;;;1E933;\n1E912;ADLAM CAPITAL LETTER YA;Lu;0;R;;;;;N;;;;1E934;\n1E913;ADLAM CAPITAL LETTER U;Lu;0;R;;;;;N;;;;1E935;\n1E914;ADLAM CAPITAL LETTER JIIM;Lu;0;R;;;;;N;;;;1E936;\n1E915;ADLAM CAPITAL LETTER CHI;Lu;0;R;;;;;N;;;;1E937;\n1E916;ADLAM CAPITAL LETTER HA;Lu;0;R;;;;;N;;;;1E938;\n1E917;ADLAM CAPITAL LETTER QAAF;Lu;0;R;;;;;N;;;;1E939;\n1E918;ADLAM CAPITAL LETTER GA;Lu;0;R;;;;;N;;;;1E93A;\n1E919;ADLAM CAPITAL LETTER NYA;Lu;0;R;;;;;N;;;;1E93B;\n1E91A;ADLAM CAPITAL LETTER TU;Lu;0;R;;;;;N;;;;1E93C;\n1E91B;ADLAM CAPITAL LETTER NHA;Lu;0;R;;;;;N;;;;1E93D;\n1E91C;ADLAM CAPITAL LETTER VA;Lu;0;R;;;;;N;;;;1E93E;\n1E91D;ADLAM CAPITAL LETTER KHA;Lu;0;R;;;;;N;;;;1E93F;\n1E91E;ADLAM CAPITAL LETTER GBE;Lu;0;R;;;;;N;;;;1E940;\n1E91F;ADLAM CAPITAL LETTER ZAL;Lu;0;R;;;;;N;;;;1E941;\n1E920;ADLAM CAPITAL LETTER KPO;Lu;0;R;;;;;N;;;;1E942;\n1E921;ADLAM CAPITAL LETTER SHA;Lu;0;R;;;;;N;;;;1E943;\n1E922;ADLAM SMALL LETTER ALIF;Ll;0;R;;;;;N;;;1E900;;1E900\n1E923;ADLAM SMALL LETTER DAALI;Ll;0;R;;;;;N;;;1E901;;1E901\n1E924;ADLAM SMALL LETTER LAAM;Ll;0;R;;;;;N;;;1E902;;1E902\n1E925;ADLAM SMALL LETTER MIIM;Ll;0;R;;;;;N;;;1E903;;1E903\n1E926;ADLAM SMALL LETTER BA;Ll;0;R;;;;;N;;;1E904;;1E904\n1E927;ADLAM SMALL LETTER SINNYIIYHE;Ll;0;R;;;;;N;;;1E905;;1E905\n1E928;ADLAM SMALL LETTER PE;Ll;0;R;;;;;N;;;1E906;;1E906\n1E929;ADLAM SMALL LETTER BHE;Ll;0;R;;;;;N;;;1E907;;1E907\n1E92A;ADLAM SMALL LETTER RA;Ll;0;R;;;;;N;;;1E908;;1E908\n1E92B;ADLAM SMALL LETTER E;Ll;0;R;;;;;N;;;1E909;;1E909\n1E92C;ADLAM SMALL LETTER FA;Ll;0;R;;;;;N;;;1E90A;;1E90A\n1E92D;ADLAM SMALL LETTER I;Ll;0;R;;;;;N;;;1E90B;;1E90B\n1E92E;ADLAM SMALL LETTER O;Ll;0;R;;;;;N;;;1E90C;;1E90C\n1E92F;ADLAM SMALL LETTER DHA;Ll;0;R;;;;;N;;;1E90D;;1E90D\n1E930;ADLAM SMALL LETTER YHE;Ll;0;R;;;;;N;;;1E90E;;1E90E\n1E931;ADLAM SMALL LETTER WAW;Ll;0;R;;;;;N;;;1E90F;;1E90F\n1E932;ADLAM SMALL LETTER NUN;Ll;0;R;;;;;N;;;1E910;;1E910\n1E933;ADLAM SMALL LETTER KAF;Ll;0;R;;;;;N;;;1E911;;1E911\n1E934;ADLAM SMALL LETTER YA;Ll;0;R;;;;;N;;;1E912;;1E912\n1E935;ADLAM SMALL LETTER U;Ll;0;R;;;;;N;;;1E913;;1E913\n1E936;ADLAM SMALL LETTER JIIM;Ll;0;R;;;;;N;;;1E914;;1E914\n1E937;ADLAM SMALL LETTER CHI;Ll;0;R;;;;;N;;;1E915;;1E915\n1E938;ADLAM SMALL LETTER HA;Ll;0;R;;;;;N;;;1E916;;1E916\n1E939;ADLAM SMALL LETTER QAAF;Ll;0;R;;;;;N;;;1E917;;1E917\n1E93A;ADLAM SMALL LETTER GA;Ll;0;R;;;;;N;;;1E918;;1E918\n1E93B;ADLAM SMALL LETTER NYA;Ll;0;R;;;;;N;;;1E919;;1E919\n1E93C;ADLAM SMALL LETTER TU;Ll;0;R;;;;;N;;;1E91A;;1E91A\n1E93D;ADLAM SMALL LETTER NHA;Ll;0;R;;;;;N;;;1E91B;;1E91B\n1E93E;ADLAM SMALL LETTER VA;Ll;0;R;;;;;N;;;1E91C;;1E91C\n1E93F;ADLAM SMALL LETTER KHA;Ll;0;R;;;;;N;;;1E91D;;1E91D\n1E940;ADLAM SMALL LETTER GBE;Ll;0;R;;;;;N;;;1E91E;;1E91E\n1E941;ADLAM SMALL LETTER ZAL;Ll;0;R;;;;;N;;;1E91F;;1E91F\n1E942;ADLAM SMALL LETTER KPO;Ll;0;R;;;;;N;;;1E920;;1E920\n1E943;ADLAM SMALL LETTER SHA;Ll;0;R;;;;;N;;;1E921;;1E921\n1E944;ADLAM ALIF LENGTHENER;Mn;230;NSM;;;;;N;;;;;\n1E945;ADLAM VOWEL LENGTHENER;Mn;230;NSM;;;;;N;;;;;\n1E946;ADLAM GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;\n1E947;ADLAM HAMZA;Mn;230;NSM;;;;;N;;;;;\n1E948;ADLAM CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;;\n1E949;ADLAM GEMINATE CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;;\n1E94A;ADLAM NUKTA;Mn;7;NSM;;;;;N;;;;;\n1E94B;ADLAM NASALIZATION MARK;Lm;0;R;;;;;N;;;;;\n1E950;ADLAM DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;;\n1E951;ADLAM DIGIT ONE;Nd;0;R;;1;1;1;N;;;;;\n1E952;ADLAM DIGIT TWO;Nd;0;R;;2;2;2;N;;;;;\n1E953;ADLAM DIGIT THREE;Nd;0;R;;3;3;3;N;;;;;\n1E954;ADLAM DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;;\n1E955;ADLAM DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;;\n1E956;ADLAM DIGIT SIX;Nd;0;R;;6;6;6;N;;;;;\n1E957;ADLAM DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;;\n1E958;ADLAM DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;;\n1E959;ADLAM DIGIT NINE;Nd;0;R;;9;9;9;N;;;;;\n1E95E;ADLAM INITIAL EXCLAMATION MARK;Po;0;R;;;;;N;;;;;\n1E95F;ADLAM INITIAL QUESTION MARK;Po;0;R;;;;;N;;;;;\n1EC71;INDIC SIYAQ NUMBER ONE;No;0;AL;;;;1;N;;;;;\n1EC72;INDIC SIYAQ NUMBER TWO;No;0;AL;;;;2;N;;;;;\n1EC73;INDIC SIYAQ NUMBER THREE;No;0;AL;;;;3;N;;;;;\n1EC74;INDIC SIYAQ NUMBER FOUR;No;0;AL;;;;4;N;;;;;\n1EC75;INDIC SIYAQ NUMBER FIVE;No;0;AL;;;;5;N;;;;;\n1EC76;INDIC SIYAQ NUMBER SIX;No;0;AL;;;;6;N;;;;;\n1EC77;INDIC SIYAQ NUMBER SEVEN;No;0;AL;;;;7;N;;;;;\n1EC78;INDIC SIYAQ NUMBER EIGHT;No;0;AL;;;;8;N;;;;;\n1EC79;INDIC SIYAQ NUMBER NINE;No;0;AL;;;;9;N;;;;;\n1EC7A;INDIC SIYAQ NUMBER TEN;No;0;AL;;;;10;N;;;;;\n1EC7B;INDIC SIYAQ NUMBER TWENTY;No;0;AL;;;;20;N;;;;;\n1EC7C;INDIC SIYAQ NUMBER THIRTY;No;0;AL;;;;30;N;;;;;\n1EC7D;INDIC SIYAQ NUMBER FORTY;No;0;AL;;;;40;N;;;;;\n1EC7E;INDIC SIYAQ NUMBER FIFTY;No;0;AL;;;;50;N;;;;;\n1EC7F;INDIC SIYAQ NUMBER SIXTY;No;0;AL;;;;60;N;;;;;\n1EC80;INDIC SIYAQ NUMBER SEVENTY;No;0;AL;;;;70;N;;;;;\n1EC81;INDIC SIYAQ NUMBER EIGHTY;No;0;AL;;;;80;N;;;;;\n1EC82;INDIC SIYAQ NUMBER NINETY;No;0;AL;;;;90;N;;;;;\n1EC83;INDIC SIYAQ NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;;\n1EC84;INDIC SIYAQ NUMBER TWO HUNDRED;No;0;AL;;;;200;N;;;;;\n1EC85;INDIC SIYAQ NUMBER THREE HUNDRED;No;0;AL;;;;300;N;;;;;\n1EC86;INDIC SIYAQ NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;;\n1EC87;INDIC SIYAQ NUMBER FIVE HUNDRED;No;0;AL;;;;500;N;;;;;\n1EC88;INDIC SIYAQ NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;;\n1EC89;INDIC SIYAQ NUMBER SEVEN HUNDRED;No;0;AL;;;;700;N;;;;;\n1EC8A;INDIC SIYAQ NUMBER EIGHT HUNDRED;No;0;AL;;;;800;N;;;;;\n1EC8B;INDIC SIYAQ NUMBER NINE HUNDRED;No;0;AL;;;;900;N;;;;;\n1EC8C;INDIC SIYAQ NUMBER ONE THOUSAND;No;0;AL;;;;1000;N;;;;;\n1EC8D;INDIC SIYAQ NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;;\n1EC8E;INDIC SIYAQ NUMBER THREE THOUSAND;No;0;AL;;;;3000;N;;;;;\n1EC8F;INDIC SIYAQ NUMBER FOUR THOUSAND;No;0;AL;;;;4000;N;;;;;\n1EC90;INDIC SIYAQ NUMBER FIVE THOUSAND;No;0;AL;;;;5000;N;;;;;\n1EC91;INDIC SIYAQ NUMBER SIX THOUSAND;No;0;AL;;;;6000;N;;;;;\n1EC92;INDIC SIYAQ NUMBER SEVEN THOUSAND;No;0;AL;;;;7000;N;;;;;\n1EC93;INDIC SIYAQ NUMBER EIGHT THOUSAND;No;0;AL;;;;8000;N;;;;;\n1EC94;INDIC SIYAQ NUMBER NINE THOUSAND;No;0;AL;;;;9000;N;;;;;\n1EC95;INDIC SIYAQ NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;;\n1EC96;INDIC SIYAQ NUMBER TWENTY THOUSAND;No;0;AL;;;;20000;N;;;;;\n1EC97;INDIC SIYAQ NUMBER THIRTY THOUSAND;No;0;AL;;;;30000;N;;;;;\n1EC98;INDIC SIYAQ NUMBER FORTY THOUSAND;No;0;AL;;;;40000;N;;;;;\n1EC99;INDIC SIYAQ NUMBER FIFTY THOUSAND;No;0;AL;;;;50000;N;;;;;\n1EC9A;INDIC SIYAQ NUMBER SIXTY THOUSAND;No;0;AL;;;;60000;N;;;;;\n1EC9B;INDIC SIYAQ NUMBER SEVENTY THOUSAND;No;0;AL;;;;70000;N;;;;;\n1EC9C;INDIC SIYAQ NUMBER EIGHTY THOUSAND;No;0;AL;;;;80000;N;;;;;\n1EC9D;INDIC SIYAQ NUMBER NINETY THOUSAND;No;0;AL;;;;90000;N;;;;;\n1EC9E;INDIC SIYAQ NUMBER LAKH;No;0;AL;;;;100000;N;;;;;\n1EC9F;INDIC SIYAQ NUMBER LAKHAN;No;0;AL;;;;200000;N;;;;;\n1ECA0;INDIC SIYAQ LAKH MARK;No;0;AL;;;;100000;N;;;;;\n1ECA1;INDIC SIYAQ NUMBER KAROR;No;0;AL;;;;10000000;N;;;;;\n1ECA2;INDIC SIYAQ NUMBER KARORAN;No;0;AL;;;;20000000;N;;;;;\n1ECA3;INDIC SIYAQ NUMBER PREFIXED ONE;No;0;AL;;;;1;N;;;;;\n1ECA4;INDIC SIYAQ NUMBER PREFIXED TWO;No;0;AL;;;;2;N;;;;;\n1ECA5;INDIC SIYAQ NUMBER PREFIXED THREE;No;0;AL;;;;3;N;;;;;\n1ECA6;INDIC SIYAQ NUMBER PREFIXED FOUR;No;0;AL;;;;4;N;;;;;\n1ECA7;INDIC SIYAQ NUMBER PREFIXED FIVE;No;0;AL;;;;5;N;;;;;\n1ECA8;INDIC SIYAQ NUMBER PREFIXED SIX;No;0;AL;;;;6;N;;;;;\n1ECA9;INDIC SIYAQ NUMBER PREFIXED SEVEN;No;0;AL;;;;7;N;;;;;\n1ECAA;INDIC SIYAQ NUMBER PREFIXED EIGHT;No;0;AL;;;;8;N;;;;;\n1ECAB;INDIC SIYAQ NUMBER PREFIXED NINE;No;0;AL;;;;9;N;;;;;\n1ECAC;INDIC SIYAQ PLACEHOLDER;So;0;AL;;;;;N;;;;;\n1ECAD;INDIC SIYAQ FRACTION ONE QUARTER;No;0;AL;;;;1/4;N;;;;;\n1ECAE;INDIC SIYAQ FRACTION ONE HALF;No;0;AL;;;;1/2;N;;;;;\n1ECAF;INDIC SIYAQ FRACTION THREE QUARTERS;No;0;AL;;;;3/4;N;;;;;\n1ECB0;INDIC SIYAQ RUPEE MARK;Sc;0;AL;;;;;N;;;;;\n1ECB1;INDIC SIYAQ NUMBER ALTERNATE ONE;No;0;AL;;;;1;N;;;;;\n1ECB2;INDIC SIYAQ NUMBER ALTERNATE TWO;No;0;AL;;;;2;N;;;;;\n1ECB3;INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND;No;0;AL;;;;10000;N;;;;;\n1ECB4;INDIC SIYAQ ALTERNATE LAKH MARK;No;0;AL;;;;100000;N;;;;;\n1ED01;OTTOMAN SIYAQ NUMBER ONE;No;0;AL;;;;1;N;;;;;\n1ED02;OTTOMAN SIYAQ NUMBER TWO;No;0;AL;;;;2;N;;;;;\n1ED03;OTTOMAN SIYAQ NUMBER THREE;No;0;AL;;;;3;N;;;;;\n1ED04;OTTOMAN SIYAQ NUMBER FOUR;No;0;AL;;;;4;N;;;;;\n1ED05;OTTOMAN SIYAQ NUMBER FIVE;No;0;AL;;;;5;N;;;;;\n1ED06;OTTOMAN SIYAQ NUMBER SIX;No;0;AL;;;;6;N;;;;;\n1ED07;OTTOMAN SIYAQ NUMBER SEVEN;No;0;AL;;;;7;N;;;;;\n1ED08;OTTOMAN SIYAQ NUMBER EIGHT;No;0;AL;;;;8;N;;;;;\n1ED09;OTTOMAN SIYAQ NUMBER NINE;No;0;AL;;;;9;N;;;;;\n1ED0A;OTTOMAN SIYAQ NUMBER TEN;No;0;AL;;;;10;N;;;;;\n1ED0B;OTTOMAN SIYAQ NUMBER TWENTY;No;0;AL;;;;20;N;;;;;\n1ED0C;OTTOMAN SIYAQ NUMBER THIRTY;No;0;AL;;;;30;N;;;;;\n1ED0D;OTTOMAN SIYAQ NUMBER FORTY;No;0;AL;;;;40;N;;;;;\n1ED0E;OTTOMAN SIYAQ NUMBER FIFTY;No;0;AL;;;;50;N;;;;;\n1ED0F;OTTOMAN SIYAQ NUMBER SIXTY;No;0;AL;;;;60;N;;;;;\n1ED10;OTTOMAN SIYAQ NUMBER SEVENTY;No;0;AL;;;;70;N;;;;;\n1ED11;OTTOMAN SIYAQ NUMBER EIGHTY;No;0;AL;;;;80;N;;;;;\n1ED12;OTTOMAN SIYAQ NUMBER NINETY;No;0;AL;;;;90;N;;;;;\n1ED13;OTTOMAN SIYAQ NUMBER ONE HUNDRED;No;0;AL;;;;100;N;;;;;\n1ED14;OTTOMAN SIYAQ NUMBER TWO HUNDRED;No;0;AL;;;;200;N;;;;;\n1ED15;OTTOMAN SIYAQ NUMBER THREE HUNDRED;No;0;AL;;;;300;N;;;;;\n1ED16;OTTOMAN SIYAQ NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;;\n1ED17;OTTOMAN SIYAQ NUMBER FIVE HUNDRED;No;0;AL;;;;500;N;;;;;\n1ED18;OTTOMAN SIYAQ NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;;\n1ED19;OTTOMAN SIYAQ NUMBER SEVEN HUNDRED;No;0;AL;;;;700;N;;;;;\n1ED1A;OTTOMAN SIYAQ NUMBER EIGHT HUNDRED;No;0;AL;;;;800;N;;;;;\n1ED1B;OTTOMAN SIYAQ NUMBER NINE HUNDRED;No;0;AL;;;;900;N;;;;;\n1ED1C;OTTOMAN SIYAQ NUMBER ONE THOUSAND;No;0;AL;;;;1000;N;;;;;\n1ED1D;OTTOMAN SIYAQ NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;;\n1ED1E;OTTOMAN SIYAQ NUMBER THREE THOUSAND;No;0;AL;;;;3000;N;;;;;\n1ED1F;OTTOMAN SIYAQ NUMBER FOUR THOUSAND;No;0;AL;;;;4000;N;;;;;\n1ED20;OTTOMAN SIYAQ NUMBER FIVE THOUSAND;No;0;AL;;;;5000;N;;;;;\n1ED21;OTTOMAN SIYAQ NUMBER SIX THOUSAND;No;0;AL;;;;6000;N;;;;;\n1ED22;OTTOMAN SIYAQ NUMBER SEVEN THOUSAND;No;0;AL;;;;7000;N;;;;;\n1ED23;OTTOMAN SIYAQ NUMBER EIGHT THOUSAND;No;0;AL;;;;8000;N;;;;;\n1ED24;OTTOMAN SIYAQ NUMBER NINE THOUSAND;No;0;AL;;;;9000;N;;;;;\n1ED25;OTTOMAN SIYAQ NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;;\n1ED26;OTTOMAN SIYAQ NUMBER TWENTY THOUSAND;No;0;AL;;;;20000;N;;;;;\n1ED27;OTTOMAN SIYAQ NUMBER THIRTY THOUSAND;No;0;AL;;;;30000;N;;;;;\n1ED28;OTTOMAN SIYAQ NUMBER FORTY THOUSAND;No;0;AL;;;;40000;N;;;;;\n1ED29;OTTOMAN SIYAQ NUMBER FIFTY THOUSAND;No;0;AL;;;;50000;N;;;;;\n1ED2A;OTTOMAN SIYAQ NUMBER SIXTY THOUSAND;No;0;AL;;;;60000;N;;;;;\n1ED2B;OTTOMAN SIYAQ NUMBER SEVENTY THOUSAND;No;0;AL;;;;70000;N;;;;;\n1ED2C;OTTOMAN SIYAQ NUMBER EIGHTY THOUSAND;No;0;AL;;;;80000;N;;;;;\n1ED2D;OTTOMAN SIYAQ NUMBER NINETY THOUSAND;No;0;AL;;;;90000;N;;;;;\n1ED2E;OTTOMAN SIYAQ MARRATAN;So;0;AL;;;;;N;;;;;\n1ED2F;OTTOMAN SIYAQ ALTERNATE NUMBER TWO;No;0;AL;;;;2;N;;;;;\n1ED30;OTTOMAN SIYAQ ALTERNATE NUMBER THREE;No;0;AL;;;;3;N;;;;;\n1ED31;OTTOMAN SIYAQ ALTERNATE NUMBER FOUR;No;0;AL;;;;4;N;;;;;\n1ED32;OTTOMAN SIYAQ ALTERNATE NUMBER FIVE;No;0;AL;;;;5;N;;;;;\n1ED33;OTTOMAN SIYAQ ALTERNATE NUMBER SIX;No;0;AL;;;;6;N;;;;;\n1ED34;OTTOMAN SIYAQ ALTERNATE NUMBER SEVEN;No;0;AL;;;;7;N;;;;;\n1ED35;OTTOMAN SIYAQ ALTERNATE NUMBER EIGHT;No;0;AL;;;;8;N;;;;;\n1ED36;OTTOMAN SIYAQ ALTERNATE NUMBER NINE;No;0;AL;;;;9;N;;;;;\n1ED37;OTTOMAN SIYAQ ALTERNATE NUMBER TEN;No;0;AL;;;;10;N;;;;;\n1ED38;OTTOMAN SIYAQ ALTERNATE NUMBER FOUR HUNDRED;No;0;AL;;;;400;N;;;;;\n1ED39;OTTOMAN SIYAQ ALTERNATE NUMBER SIX HUNDRED;No;0;AL;;;;600;N;;;;;\n1ED3A;OTTOMAN SIYAQ ALTERNATE NUMBER TWO THOUSAND;No;0;AL;;;;2000;N;;;;;\n1ED3B;OTTOMAN SIYAQ ALTERNATE NUMBER TEN THOUSAND;No;0;AL;;;;10000;N;;;;;\n1ED3C;OTTOMAN SIYAQ FRACTION ONE HALF;No;0;AL;;;;1/2;N;;;;;\n1ED3D;OTTOMAN SIYAQ FRACTION ONE SIXTH;No;0;AL;;;;1/6;N;;;;;\n1EE00;ARABIC MATHEMATICAL ALEF;Lo;0;AL;<font> 0627;;;;N;;;;;\n1EE01;ARABIC MATHEMATICAL BEH;Lo;0;AL;<font> 0628;;;;N;;;;;\n1EE02;ARABIC MATHEMATICAL JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;\n1EE03;ARABIC MATHEMATICAL DAL;Lo;0;AL;<font> 062F;;;;N;;;;;\n1EE05;ARABIC MATHEMATICAL WAW;Lo;0;AL;<font> 0648;;;;N;;;;;\n1EE06;ARABIC MATHEMATICAL ZAIN;Lo;0;AL;<font> 0632;;;;N;;;;;\n1EE07;ARABIC MATHEMATICAL HAH;Lo;0;AL;<font> 062D;;;;N;;;;;\n1EE08;ARABIC MATHEMATICAL TAH;Lo;0;AL;<font> 0637;;;;N;;;;;\n1EE09;ARABIC MATHEMATICAL YEH;Lo;0;AL;<font> 064A;;;;N;;;;;\n1EE0A;ARABIC MATHEMATICAL KAF;Lo;0;AL;<font> 0643;;;;N;;;;;\n1EE0B;ARABIC MATHEMATICAL LAM;Lo;0;AL;<font> 0644;;;;N;;;;;\n1EE0C;ARABIC MATHEMATICAL MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;\n1EE0D;ARABIC MATHEMATICAL NOON;Lo;0;AL;<font> 0646;;;;N;;;;;\n1EE0E;ARABIC MATHEMATICAL SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;\n1EE0F;ARABIC MATHEMATICAL AIN;Lo;0;AL;<font> 0639;;;;N;;;;;\n1EE10;ARABIC MATHEMATICAL FEH;Lo;0;AL;<font> 0641;;;;N;;;;;\n1EE11;ARABIC MATHEMATICAL SAD;Lo;0;AL;<font> 0635;;;;N;;;;;\n1EE12;ARABIC MATHEMATICAL QAF;Lo;0;AL;<font> 0642;;;;N;;;;;\n1EE13;ARABIC MATHEMATICAL REH;Lo;0;AL;<font> 0631;;;;N;;;;;\n1EE14;ARABIC MATHEMATICAL SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;\n1EE15;ARABIC MATHEMATICAL TEH;Lo;0;AL;<font> 062A;;;;N;;;;;\n1EE16;ARABIC MATHEMATICAL THEH;Lo;0;AL;<font> 062B;;;;N;;;;;\n1EE17;ARABIC MATHEMATICAL KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;\n1EE18;ARABIC MATHEMATICAL THAL;Lo;0;AL;<font> 0630;;;;N;;;;;\n1EE19;ARABIC MATHEMATICAL DAD;Lo;0;AL;<font> 0636;;;;N;;;;;\n1EE1A;ARABIC MATHEMATICAL ZAH;Lo;0;AL;<font> 0638;;;;N;;;;;\n1EE1B;ARABIC MATHEMATICAL GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;\n1EE1C;ARABIC MATHEMATICAL DOTLESS BEH;Lo;0;AL;<font> 066E;;;;N;;;;;\n1EE1D;ARABIC MATHEMATICAL DOTLESS NOON;Lo;0;AL;<font> 06BA;;;;N;;;;;\n1EE1E;ARABIC MATHEMATICAL DOTLESS FEH;Lo;0;AL;<font> 06A1;;;;N;;;;;\n1EE1F;ARABIC MATHEMATICAL DOTLESS QAF;Lo;0;AL;<font> 066F;;;;N;;;;;\n1EE21;ARABIC MATHEMATICAL INITIAL BEH;Lo;0;AL;<font> 0628;;;;N;;;;;\n1EE22;ARABIC MATHEMATICAL INITIAL JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;\n1EE24;ARABIC MATHEMATICAL INITIAL HEH;Lo;0;AL;<font> 0647;;;;N;;;;;\n1EE27;ARABIC MATHEMATICAL INITIAL HAH;Lo;0;AL;<font> 062D;;;;N;;;;;\n1EE29;ARABIC MATHEMATICAL INITIAL YEH;Lo;0;AL;<font> 064A;;;;N;;;;;\n1EE2A;ARABIC MATHEMATICAL INITIAL KAF;Lo;0;AL;<font> 0643;;;;N;;;;;\n1EE2B;ARABIC MATHEMATICAL INITIAL LAM;Lo;0;AL;<font> 0644;;;;N;;;;;\n1EE2C;ARABIC MATHEMATICAL INITIAL MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;\n1EE2D;ARABIC MATHEMATICAL INITIAL NOON;Lo;0;AL;<font> 0646;;;;N;;;;;\n1EE2E;ARABIC MATHEMATICAL INITIAL SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;\n1EE2F;ARABIC MATHEMATICAL INITIAL AIN;Lo;0;AL;<font> 0639;;;;N;;;;;\n1EE30;ARABIC MATHEMATICAL INITIAL FEH;Lo;0;AL;<font> 0641;;;;N;;;;;\n1EE31;ARABIC MATHEMATICAL INITIAL SAD;Lo;0;AL;<font> 0635;;;;N;;;;;\n1EE32;ARABIC MATHEMATICAL INITIAL QAF;Lo;0;AL;<font> 0642;;;;N;;;;;\n1EE34;ARABIC MATHEMATICAL INITIAL SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;\n1EE35;ARABIC MATHEMATICAL INITIAL TEH;Lo;0;AL;<font> 062A;;;;N;;;;;\n1EE36;ARABIC MATHEMATICAL INITIAL THEH;Lo;0;AL;<font> 062B;;;;N;;;;;\n1EE37;ARABIC MATHEMATICAL INITIAL KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;\n1EE39;ARABIC MATHEMATICAL INITIAL DAD;Lo;0;AL;<font> 0636;;;;N;;;;;\n1EE3B;ARABIC MATHEMATICAL INITIAL GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;\n1EE42;ARABIC MATHEMATICAL TAILED JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;\n1EE47;ARABIC MATHEMATICAL TAILED HAH;Lo;0;AL;<font> 062D;;;;N;;;;;\n1EE49;ARABIC MATHEMATICAL TAILED YEH;Lo;0;AL;<font> 064A;;;;N;;;;;\n1EE4B;ARABIC MATHEMATICAL TAILED LAM;Lo;0;AL;<font> 0644;;;;N;;;;;\n1EE4D;ARABIC MATHEMATICAL TAILED NOON;Lo;0;AL;<font> 0646;;;;N;;;;;\n1EE4E;ARABIC MATHEMATICAL TAILED SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;\n1EE4F;ARABIC MATHEMATICAL TAILED AIN;Lo;0;AL;<font> 0639;;;;N;;;;;\n1EE51;ARABIC MATHEMATICAL TAILED SAD;Lo;0;AL;<font> 0635;;;;N;;;;;\n1EE52;ARABIC MATHEMATICAL TAILED QAF;Lo;0;AL;<font> 0642;;;;N;;;;;\n1EE54;ARABIC MATHEMATICAL TAILED SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;\n1EE57;ARABIC MATHEMATICAL TAILED KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;\n1EE59;ARABIC MATHEMATICAL TAILED DAD;Lo;0;AL;<font> 0636;;;;N;;;;;\n1EE5B;ARABIC MATHEMATICAL TAILED GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;\n1EE5D;ARABIC MATHEMATICAL TAILED DOTLESS NOON;Lo;0;AL;<font> 06BA;;;;N;;;;;\n1EE5F;ARABIC MATHEMATICAL TAILED DOTLESS QAF;Lo;0;AL;<font> 066F;;;;N;;;;;\n1EE61;ARABIC MATHEMATICAL STRETCHED BEH;Lo;0;AL;<font> 0628;;;;N;;;;;\n1EE62;ARABIC MATHEMATICAL STRETCHED JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;\n1EE64;ARABIC MATHEMATICAL STRETCHED HEH;Lo;0;AL;<font> 0647;;;;N;;;;;\n1EE67;ARABIC MATHEMATICAL STRETCHED HAH;Lo;0;AL;<font> 062D;;;;N;;;;;\n1EE68;ARABIC MATHEMATICAL STRETCHED TAH;Lo;0;AL;<font> 0637;;;;N;;;;;\n1EE69;ARABIC MATHEMATICAL STRETCHED YEH;Lo;0;AL;<font> 064A;;;;N;;;;;\n1EE6A;ARABIC MATHEMATICAL STRETCHED KAF;Lo;0;AL;<font> 0643;;;;N;;;;;\n1EE6C;ARABIC MATHEMATICAL STRETCHED MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;\n1EE6D;ARABIC MATHEMATICAL STRETCHED NOON;Lo;0;AL;<font> 0646;;;;N;;;;;\n1EE6E;ARABIC MATHEMATICAL STRETCHED SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;\n1EE6F;ARABIC MATHEMATICAL STRETCHED AIN;Lo;0;AL;<font> 0639;;;;N;;;;;\n1EE70;ARABIC MATHEMATICAL STRETCHED FEH;Lo;0;AL;<font> 0641;;;;N;;;;;\n1EE71;ARABIC MATHEMATICAL STRETCHED SAD;Lo;0;AL;<font> 0635;;;;N;;;;;\n1EE72;ARABIC MATHEMATICAL STRETCHED QAF;Lo;0;AL;<font> 0642;;;;N;;;;;\n1EE74;ARABIC MATHEMATICAL STRETCHED SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;\n1EE75;ARABIC MATHEMATICAL STRETCHED TEH;Lo;0;AL;<font> 062A;;;;N;;;;;\n1EE76;ARABIC MATHEMATICAL STRETCHED THEH;Lo;0;AL;<font> 062B;;;;N;;;;;\n1EE77;ARABIC MATHEMATICAL STRETCHED KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;\n1EE79;ARABIC MATHEMATICAL STRETCHED DAD;Lo;0;AL;<font> 0636;;;;N;;;;;\n1EE7A;ARABIC MATHEMATICAL STRETCHED ZAH;Lo;0;AL;<font> 0638;;;;N;;;;;\n1EE7B;ARABIC MATHEMATICAL STRETCHED GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;\n1EE7C;ARABIC MATHEMATICAL STRETCHED DOTLESS BEH;Lo;0;AL;<font> 066E;;;;N;;;;;\n1EE7E;ARABIC MATHEMATICAL STRETCHED DOTLESS FEH;Lo;0;AL;<font> 06A1;;;;N;;;;;\n1EE80;ARABIC MATHEMATICAL LOOPED ALEF;Lo;0;AL;<font> 0627;;;;N;;;;;\n1EE81;ARABIC MATHEMATICAL LOOPED BEH;Lo;0;AL;<font> 0628;;;;N;;;;;\n1EE82;ARABIC MATHEMATICAL LOOPED JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;\n1EE83;ARABIC MATHEMATICAL LOOPED DAL;Lo;0;AL;<font> 062F;;;;N;;;;;\n1EE84;ARABIC MATHEMATICAL LOOPED HEH;Lo;0;AL;<font> 0647;;;;N;;;;;\n1EE85;ARABIC MATHEMATICAL LOOPED WAW;Lo;0;AL;<font> 0648;;;;N;;;;;\n1EE86;ARABIC MATHEMATICAL LOOPED ZAIN;Lo;0;AL;<font> 0632;;;;N;;;;;\n1EE87;ARABIC MATHEMATICAL LOOPED HAH;Lo;0;AL;<font> 062D;;;;N;;;;;\n1EE88;ARABIC MATHEMATICAL LOOPED TAH;Lo;0;AL;<font> 0637;;;;N;;;;;\n1EE89;ARABIC MATHEMATICAL LOOPED YEH;Lo;0;AL;<font> 064A;;;;N;;;;;\n1EE8B;ARABIC MATHEMATICAL LOOPED LAM;Lo;0;AL;<font> 0644;;;;N;;;;;\n1EE8C;ARABIC MATHEMATICAL LOOPED MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;\n1EE8D;ARABIC MATHEMATICAL LOOPED NOON;Lo;0;AL;<font> 0646;;;;N;;;;;\n1EE8E;ARABIC MATHEMATICAL LOOPED SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;\n1EE8F;ARABIC MATHEMATICAL LOOPED AIN;Lo;0;AL;<font> 0639;;;;N;;;;;\n1EE90;ARABIC MATHEMATICAL LOOPED FEH;Lo;0;AL;<font> 0641;;;;N;;;;;\n1EE91;ARABIC MATHEMATICAL LOOPED SAD;Lo;0;AL;<font> 0635;;;;N;;;;;\n1EE92;ARABIC MATHEMATICAL LOOPED QAF;Lo;0;AL;<font> 0642;;;;N;;;;;\n1EE93;ARABIC MATHEMATICAL LOOPED REH;Lo;0;AL;<font> 0631;;;;N;;;;;\n1EE94;ARABIC MATHEMATICAL LOOPED SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;\n1EE95;ARABIC MATHEMATICAL LOOPED TEH;Lo;0;AL;<font> 062A;;;;N;;;;;\n1EE96;ARABIC MATHEMATICAL LOOPED THEH;Lo;0;AL;<font> 062B;;;;N;;;;;\n1EE97;ARABIC MATHEMATICAL LOOPED KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;\n1EE98;ARABIC MATHEMATICAL LOOPED THAL;Lo;0;AL;<font> 0630;;;;N;;;;;\n1EE99;ARABIC MATHEMATICAL LOOPED DAD;Lo;0;AL;<font> 0636;;;;N;;;;;\n1EE9A;ARABIC MATHEMATICAL LOOPED ZAH;Lo;0;AL;<font> 0638;;;;N;;;;;\n1EE9B;ARABIC MATHEMATICAL LOOPED GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;\n1EEA1;ARABIC MATHEMATICAL DOUBLE-STRUCK BEH;Lo;0;AL;<font> 0628;;;;N;;;;;\n1EEA2;ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;\n1EEA3;ARABIC MATHEMATICAL DOUBLE-STRUCK DAL;Lo;0;AL;<font> 062F;;;;N;;;;;\n1EEA5;ARABIC MATHEMATICAL DOUBLE-STRUCK WAW;Lo;0;AL;<font> 0648;;;;N;;;;;\n1EEA6;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN;Lo;0;AL;<font> 0632;;;;N;;;;;\n1EEA7;ARABIC MATHEMATICAL DOUBLE-STRUCK HAH;Lo;0;AL;<font> 062D;;;;N;;;;;\n1EEA8;ARABIC MATHEMATICAL DOUBLE-STRUCK TAH;Lo;0;AL;<font> 0637;;;;N;;;;;\n1EEA9;ARABIC MATHEMATICAL DOUBLE-STRUCK YEH;Lo;0;AL;<font> 064A;;;;N;;;;;\n1EEAB;ARABIC MATHEMATICAL DOUBLE-STRUCK LAM;Lo;0;AL;<font> 0644;;;;N;;;;;\n1EEAC;ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM;Lo;0;AL;<font> 0645;;;;N;;;;;\n1EEAD;ARABIC MATHEMATICAL DOUBLE-STRUCK NOON;Lo;0;AL;<font> 0646;;;;N;;;;;\n1EEAE;ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN;Lo;0;AL;<font> 0633;;;;N;;;;;\n1EEAF;ARABIC MATHEMATICAL DOUBLE-STRUCK AIN;Lo;0;AL;<font> 0639;;;;N;;;;;\n1EEB0;ARABIC MATHEMATICAL DOUBLE-STRUCK FEH;Lo;0;AL;<font> 0641;;;;N;;;;;\n1EEB1;ARABIC MATHEMATICAL DOUBLE-STRUCK SAD;Lo;0;AL;<font> 0635;;;;N;;;;;\n1EEB2;ARABIC MATHEMATICAL DOUBLE-STRUCK QAF;Lo;0;AL;<font> 0642;;;;N;;;;;\n1EEB3;ARABIC MATHEMATICAL DOUBLE-STRUCK REH;Lo;0;AL;<font> 0631;;;;N;;;;;\n1EEB4;ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN;Lo;0;AL;<font> 0634;;;;N;;;;;\n1EEB5;ARABIC MATHEMATICAL DOUBLE-STRUCK TEH;Lo;0;AL;<font> 062A;;;;N;;;;;\n1EEB6;ARABIC MATHEMATICAL DOUBLE-STRUCK THEH;Lo;0;AL;<font> 062B;;;;N;;;;;\n1EEB7;ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH;Lo;0;AL;<font> 062E;;;;N;;;;;\n1EEB8;ARABIC MATHEMATICAL DOUBLE-STRUCK THAL;Lo;0;AL;<font> 0630;;;;N;;;;;\n1EEB9;ARABIC MATHEMATICAL DOUBLE-STRUCK DAD;Lo;0;AL;<font> 0636;;;;N;;;;;\n1EEBA;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH;Lo;0;AL;<font> 0638;;;;N;;;;;\n1EEBB;ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN;Lo;0;AL;<font> 063A;;;;N;;;;;\n1EEF0;ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL;Sm;0;ON;;;;;N;;;;;\n1EEF1;ARABIC MATHEMATICAL OPERATOR HAH WITH DAL;Sm;0;ON;;;;;N;;;;;\n1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;;\n1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;;\n1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;;\n1F003;MAHJONG TILE NORTH WIND;So;0;ON;;;;;N;;;;;\n1F004;MAHJONG TILE RED DRAGON;So;0;ON;;;;;N;;;;;\n1F005;MAHJONG TILE GREEN DRAGON;So;0;ON;;;;;N;;;;;\n1F006;MAHJONG TILE WHITE DRAGON;So;0;ON;;;;;N;;;;;\n1F007;MAHJONG TILE ONE OF CHARACTERS;So;0;ON;;;;;N;;;;;\n1F008;MAHJONG TILE TWO OF CHARACTERS;So;0;ON;;;;;N;;;;;\n1F009;MAHJONG TILE THREE OF CHARACTERS;So;0;ON;;;;;N;;;;;\n1F00A;MAHJONG TILE FOUR OF CHARACTERS;So;0;ON;;;;;N;;;;;\n1F00B;MAHJONG TILE FIVE OF CHARACTERS;So;0;ON;;;;;N;;;;;\n1F00C;MAHJONG TILE SIX OF CHARACTERS;So;0;ON;;;;;N;;;;;\n1F00D;MAHJONG TILE SEVEN OF CHARACTERS;So;0;ON;;;;;N;;;;;\n1F00E;MAHJONG TILE EIGHT OF CHARACTERS;So;0;ON;;;;;N;;;;;\n1F00F;MAHJONG TILE NINE OF CHARACTERS;So;0;ON;;;;;N;;;;;\n1F010;MAHJONG TILE ONE OF BAMBOOS;So;0;ON;;;;;N;;;;;\n1F011;MAHJONG TILE TWO OF BAMBOOS;So;0;ON;;;;;N;;;;;\n1F012;MAHJONG TILE THREE OF BAMBOOS;So;0;ON;;;;;N;;;;;\n1F013;MAHJONG TILE FOUR OF BAMBOOS;So;0;ON;;;;;N;;;;;\n1F014;MAHJONG TILE FIVE OF BAMBOOS;So;0;ON;;;;;N;;;;;\n1F015;MAHJONG TILE SIX OF BAMBOOS;So;0;ON;;;;;N;;;;;\n1F016;MAHJONG TILE SEVEN OF BAMBOOS;So;0;ON;;;;;N;;;;;\n1F017;MAHJONG TILE EIGHT OF BAMBOOS;So;0;ON;;;;;N;;;;;\n1F018;MAHJONG TILE NINE OF BAMBOOS;So;0;ON;;;;;N;;;;;\n1F019;MAHJONG TILE ONE OF CIRCLES;So;0;ON;;;;;N;;;;;\n1F01A;MAHJONG TILE TWO OF CIRCLES;So;0;ON;;;;;N;;;;;\n1F01B;MAHJONG TILE THREE OF CIRCLES;So;0;ON;;;;;N;;;;;\n1F01C;MAHJONG TILE FOUR OF CIRCLES;So;0;ON;;;;;N;;;;;\n1F01D;MAHJONG TILE FIVE OF CIRCLES;So;0;ON;;;;;N;;;;;\n1F01E;MAHJONG TILE SIX OF CIRCLES;So;0;ON;;;;;N;;;;;\n1F01F;MAHJONG TILE SEVEN OF CIRCLES;So;0;ON;;;;;N;;;;;\n1F020;MAHJONG TILE EIGHT OF CIRCLES;So;0;ON;;;;;N;;;;;\n1F021;MAHJONG TILE NINE OF CIRCLES;So;0;ON;;;;;N;;;;;\n1F022;MAHJONG TILE PLUM;So;0;ON;;;;;N;;;;;\n1F023;MAHJONG TILE ORCHID;So;0;ON;;;;;N;;;;;\n1F024;MAHJONG TILE BAMBOO;So;0;ON;;;;;N;;;;;\n1F025;MAHJONG TILE CHRYSANTHEMUM;So;0;ON;;;;;N;;;;;\n1F026;MAHJONG TILE SPRING;So;0;ON;;;;;N;;;;;\n1F027;MAHJONG TILE SUMMER;So;0;ON;;;;;N;;;;;\n1F028;MAHJONG TILE AUTUMN;So;0;ON;;;;;N;;;;;\n1F029;MAHJONG TILE WINTER;So;0;ON;;;;;N;;;;;\n1F02A;MAHJONG TILE JOKER;So;0;ON;;;;;N;;;;;\n1F02B;MAHJONG TILE BACK;So;0;ON;;;;;N;;;;;\n1F030;DOMINO TILE HORIZONTAL BACK;So;0;ON;;;;;N;;;;;\n1F031;DOMINO TILE HORIZONTAL-00-00;So;0;ON;;;;;N;;;;;\n1F032;DOMINO TILE HORIZONTAL-00-01;So;0;ON;;;;;N;;;;;\n1F033;DOMINO TILE HORIZONTAL-00-02;So;0;ON;;;;;N;;;;;\n1F034;DOMINO TILE HORIZONTAL-00-03;So;0;ON;;;;;N;;;;;\n1F035;DOMINO TILE HORIZONTAL-00-04;So;0;ON;;;;;N;;;;;\n1F036;DOMINO TILE HORIZONTAL-00-05;So;0;ON;;;;;N;;;;;\n1F037;DOMINO TILE HORIZONTAL-00-06;So;0;ON;;;;;N;;;;;\n1F038;DOMINO TILE HORIZONTAL-01-00;So;0;ON;;;;;N;;;;;\n1F039;DOMINO TILE HORIZONTAL-01-01;So;0;ON;;;;;N;;;;;\n1F03A;DOMINO TILE HORIZONTAL-01-02;So;0;ON;;;;;N;;;;;\n1F03B;DOMINO TILE HORIZONTAL-01-03;So;0;ON;;;;;N;;;;;\n1F03C;DOMINO TILE HORIZONTAL-01-04;So;0;ON;;;;;N;;;;;\n1F03D;DOMINO TILE HORIZONTAL-01-05;So;0;ON;;;;;N;;;;;\n1F03E;DOMINO TILE HORIZONTAL-01-06;So;0;ON;;;;;N;;;;;\n1F03F;DOMINO TILE HORIZONTAL-02-00;So;0;ON;;;;;N;;;;;\n1F040;DOMINO TILE HORIZONTAL-02-01;So;0;ON;;;;;N;;;;;\n1F041;DOMINO TILE HORIZONTAL-02-02;So;0;ON;;;;;N;;;;;\n1F042;DOMINO TILE HORIZONTAL-02-03;So;0;ON;;;;;N;;;;;\n1F043;DOMINO TILE HORIZONTAL-02-04;So;0;ON;;;;;N;;;;;\n1F044;DOMINO TILE HORIZONTAL-02-05;So;0;ON;;;;;N;;;;;\n1F045;DOMINO TILE HORIZONTAL-02-06;So;0;ON;;;;;N;;;;;\n1F046;DOMINO TILE HORIZONTAL-03-00;So;0;ON;;;;;N;;;;;\n1F047;DOMINO TILE HORIZONTAL-03-01;So;0;ON;;;;;N;;;;;\n1F048;DOMINO TILE HORIZONTAL-03-02;So;0;ON;;;;;N;;;;;\n1F049;DOMINO TILE HORIZONTAL-03-03;So;0;ON;;;;;N;;;;;\n1F04A;DOMINO TILE HORIZONTAL-03-04;So;0;ON;;;;;N;;;;;\n1F04B;DOMINO TILE HORIZONTAL-03-05;So;0;ON;;;;;N;;;;;\n1F04C;DOMINO TILE HORIZONTAL-03-06;So;0;ON;;;;;N;;;;;\n1F04D;DOMINO TILE HORIZONTAL-04-00;So;0;ON;;;;;N;;;;;\n1F04E;DOMINO TILE HORIZONTAL-04-01;So;0;ON;;;;;N;;;;;\n1F04F;DOMINO TILE HORIZONTAL-04-02;So;0;ON;;;;;N;;;;;\n1F050;DOMINO TILE HORIZONTAL-04-03;So;0;ON;;;;;N;;;;;\n1F051;DOMINO TILE HORIZONTAL-04-04;So;0;ON;;;;;N;;;;;\n1F052;DOMINO TILE HORIZONTAL-04-05;So;0;ON;;;;;N;;;;;\n1F053;DOMINO TILE HORIZONTAL-04-06;So;0;ON;;;;;N;;;;;\n1F054;DOMINO TILE HORIZONTAL-05-00;So;0;ON;;;;;N;;;;;\n1F055;DOMINO TILE HORIZONTAL-05-01;So;0;ON;;;;;N;;;;;\n1F056;DOMINO TILE HORIZONTAL-05-02;So;0;ON;;;;;N;;;;;\n1F057;DOMINO TILE HORIZONTAL-05-03;So;0;ON;;;;;N;;;;;\n1F058;DOMINO TILE HORIZONTAL-05-04;So;0;ON;;;;;N;;;;;\n1F059;DOMINO TILE HORIZONTAL-05-05;So;0;ON;;;;;N;;;;;\n1F05A;DOMINO TILE HORIZONTAL-05-06;So;0;ON;;;;;N;;;;;\n1F05B;DOMINO TILE HORIZONTAL-06-00;So;0;ON;;;;;N;;;;;\n1F05C;DOMINO TILE HORIZONTAL-06-01;So;0;ON;;;;;N;;;;;\n1F05D;DOMINO TILE HORIZONTAL-06-02;So;0;ON;;;;;N;;;;;\n1F05E;DOMINO TILE HORIZONTAL-06-03;So;0;ON;;;;;N;;;;;\n1F05F;DOMINO TILE HORIZONTAL-06-04;So;0;ON;;;;;N;;;;;\n1F060;DOMINO TILE HORIZONTAL-06-05;So;0;ON;;;;;N;;;;;\n1F061;DOMINO TILE HORIZONTAL-06-06;So;0;ON;;;;;N;;;;;\n1F062;DOMINO TILE VERTICAL BACK;So;0;ON;;;;;N;;;;;\n1F063;DOMINO TILE VERTICAL-00-00;So;0;ON;;;;;N;;;;;\n1F064;DOMINO TILE VERTICAL-00-01;So;0;ON;;;;;N;;;;;\n1F065;DOMINO TILE VERTICAL-00-02;So;0;ON;;;;;N;;;;;\n1F066;DOMINO TILE VERTICAL-00-03;So;0;ON;;;;;N;;;;;\n1F067;DOMINO TILE VERTICAL-00-04;So;0;ON;;;;;N;;;;;\n1F068;DOMINO TILE VERTICAL-00-05;So;0;ON;;;;;N;;;;;\n1F069;DOMINO TILE VERTICAL-00-06;So;0;ON;;;;;N;;;;;\n1F06A;DOMINO TILE VERTICAL-01-00;So;0;ON;;;;;N;;;;;\n1F06B;DOMINO TILE VERTICAL-01-01;So;0;ON;;;;;N;;;;;\n1F06C;DOMINO TILE VERTICAL-01-02;So;0;ON;;;;;N;;;;;\n1F06D;DOMINO TILE VERTICAL-01-03;So;0;ON;;;;;N;;;;;\n1F06E;DOMINO TILE VERTICAL-01-04;So;0;ON;;;;;N;;;;;\n1F06F;DOMINO TILE VERTICAL-01-05;So;0;ON;;;;;N;;;;;\n1F070;DOMINO TILE VERTICAL-01-06;So;0;ON;;;;;N;;;;;\n1F071;DOMINO TILE VERTICAL-02-00;So;0;ON;;;;;N;;;;;\n1F072;DOMINO TILE VERTICAL-02-01;So;0;ON;;;;;N;;;;;\n1F073;DOMINO TILE VERTICAL-02-02;So;0;ON;;;;;N;;;;;\n1F074;DOMINO TILE VERTICAL-02-03;So;0;ON;;;;;N;;;;;\n1F075;DOMINO TILE VERTICAL-02-04;So;0;ON;;;;;N;;;;;\n1F076;DOMINO TILE VERTICAL-02-05;So;0;ON;;;;;N;;;;;\n1F077;DOMINO TILE VERTICAL-02-06;So;0;ON;;;;;N;;;;;\n1F078;DOMINO TILE VERTICAL-03-00;So;0;ON;;;;;N;;;;;\n1F079;DOMINO TILE VERTICAL-03-01;So;0;ON;;;;;N;;;;;\n1F07A;DOMINO TILE VERTICAL-03-02;So;0;ON;;;;;N;;;;;\n1F07B;DOMINO TILE VERTICAL-03-03;So;0;ON;;;;;N;;;;;\n1F07C;DOMINO TILE VERTICAL-03-04;So;0;ON;;;;;N;;;;;\n1F07D;DOMINO TILE VERTICAL-03-05;So;0;ON;;;;;N;;;;;\n1F07E;DOMINO TILE VERTICAL-03-06;So;0;ON;;;;;N;;;;;\n1F07F;DOMINO TILE VERTICAL-04-00;So;0;ON;;;;;N;;;;;\n1F080;DOMINO TILE VERTICAL-04-01;So;0;ON;;;;;N;;;;;\n1F081;DOMINO TILE VERTICAL-04-02;So;0;ON;;;;;N;;;;;\n1F082;DOMINO TILE VERTICAL-04-03;So;0;ON;;;;;N;;;;;\n1F083;DOMINO TILE VERTICAL-04-04;So;0;ON;;;;;N;;;;;\n1F084;DOMINO TILE VERTICAL-04-05;So;0;ON;;;;;N;;;;;\n1F085;DOMINO TILE VERTICAL-04-06;So;0;ON;;;;;N;;;;;\n1F086;DOMINO TILE VERTICAL-05-00;So;0;ON;;;;;N;;;;;\n1F087;DOMINO TILE VERTICAL-05-01;So;0;ON;;;;;N;;;;;\n1F088;DOMINO TILE VERTICAL-05-02;So;0;ON;;;;;N;;;;;\n1F089;DOMINO TILE VERTICAL-05-03;So;0;ON;;;;;N;;;;;\n1F08A;DOMINO TILE VERTICAL-05-04;So;0;ON;;;;;N;;;;;\n1F08B;DOMINO TILE VERTICAL-05-05;So;0;ON;;;;;N;;;;;\n1F08C;DOMINO TILE VERTICAL-05-06;So;0;ON;;;;;N;;;;;\n1F08D;DOMINO TILE VERTICAL-06-00;So;0;ON;;;;;N;;;;;\n1F08E;DOMINO TILE VERTICAL-06-01;So;0;ON;;;;;N;;;;;\n1F08F;DOMINO TILE VERTICAL-06-02;So;0;ON;;;;;N;;;;;\n1F090;DOMINO TILE VERTICAL-06-03;So;0;ON;;;;;N;;;;;\n1F091;DOMINO TILE VERTICAL-06-04;So;0;ON;;;;;N;;;;;\n1F092;DOMINO TILE VERTICAL-06-05;So;0;ON;;;;;N;;;;;\n1F093;DOMINO TILE VERTICAL-06-06;So;0;ON;;;;;N;;;;;\n1F0A0;PLAYING CARD BACK;So;0;ON;;;;;N;;;;;\n1F0A1;PLAYING CARD ACE OF SPADES;So;0;ON;;;;;N;;;;;\n1F0A2;PLAYING CARD TWO OF SPADES;So;0;ON;;;;;N;;;;;\n1F0A3;PLAYING CARD THREE OF SPADES;So;0;ON;;;;;N;;;;;\n1F0A4;PLAYING CARD FOUR OF SPADES;So;0;ON;;;;;N;;;;;\n1F0A5;PLAYING CARD FIVE OF SPADES;So;0;ON;;;;;N;;;;;\n1F0A6;PLAYING CARD SIX OF SPADES;So;0;ON;;;;;N;;;;;\n1F0A7;PLAYING CARD SEVEN OF SPADES;So;0;ON;;;;;N;;;;;\n1F0A8;PLAYING CARD EIGHT OF SPADES;So;0;ON;;;;;N;;;;;\n1F0A9;PLAYING CARD NINE OF SPADES;So;0;ON;;;;;N;;;;;\n1F0AA;PLAYING CARD TEN OF SPADES;So;0;ON;;;;;N;;;;;\n1F0AB;PLAYING CARD JACK OF SPADES;So;0;ON;;;;;N;;;;;\n1F0AC;PLAYING CARD KNIGHT OF SPADES;So;0;ON;;;;;N;;;;;\n1F0AD;PLAYING CARD QUEEN OF SPADES;So;0;ON;;;;;N;;;;;\n1F0AE;PLAYING CARD KING OF SPADES;So;0;ON;;;;;N;;;;;\n1F0B1;PLAYING CARD ACE OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0B2;PLAYING CARD TWO OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0B3;PLAYING CARD THREE OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0B4;PLAYING CARD FOUR OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0B5;PLAYING CARD FIVE OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0B6;PLAYING CARD SIX OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0B7;PLAYING CARD SEVEN OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0B8;PLAYING CARD EIGHT OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0B9;PLAYING CARD NINE OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0BA;PLAYING CARD TEN OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0BB;PLAYING CARD JACK OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0BC;PLAYING CARD KNIGHT OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0BD;PLAYING CARD QUEEN OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0BE;PLAYING CARD KING OF HEARTS;So;0;ON;;;;;N;;;;;\n1F0BF;PLAYING CARD RED JOKER;So;0;ON;;;;;N;;;;;\n1F0C1;PLAYING CARD ACE OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0C2;PLAYING CARD TWO OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0C3;PLAYING CARD THREE OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0C4;PLAYING CARD FOUR OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0C5;PLAYING CARD FIVE OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0C6;PLAYING CARD SIX OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0C7;PLAYING CARD SEVEN OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0C8;PLAYING CARD EIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0C9;PLAYING CARD NINE OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0CA;PLAYING CARD TEN OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0CB;PLAYING CARD JACK OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0CC;PLAYING CARD KNIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0CD;PLAYING CARD QUEEN OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0CE;PLAYING CARD KING OF DIAMONDS;So;0;ON;;;;;N;;;;;\n1F0CF;PLAYING CARD BLACK JOKER;So;0;ON;;;;;N;;;;;\n1F0D1;PLAYING CARD ACE OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0D2;PLAYING CARD TWO OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0D3;PLAYING CARD THREE OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0D4;PLAYING CARD FOUR OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0D5;PLAYING CARD FIVE OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0D6;PLAYING CARD SIX OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0D7;PLAYING CARD SEVEN OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0D8;PLAYING CARD EIGHT OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0D9;PLAYING CARD NINE OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0DA;PLAYING CARD TEN OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0DB;PLAYING CARD JACK OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0DC;PLAYING CARD KNIGHT OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0DD;PLAYING CARD QUEEN OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0DE;PLAYING CARD KING OF CLUBS;So;0;ON;;;;;N;;;;;\n1F0DF;PLAYING CARD WHITE JOKER;So;0;ON;;;;;N;;;;;\n1F0E0;PLAYING CARD FOOL;So;0;ON;;;;;N;;;;;\n1F0E1;PLAYING CARD TRUMP-1;So;0;ON;;;;;N;;;;;\n1F0E2;PLAYING CARD TRUMP-2;So;0;ON;;;;;N;;;;;\n1F0E3;PLAYING CARD TRUMP-3;So;0;ON;;;;;N;;;;;\n1F0E4;PLAYING CARD TRUMP-4;So;0;ON;;;;;N;;;;;\n1F0E5;PLAYING CARD TRUMP-5;So;0;ON;;;;;N;;;;;\n1F0E6;PLAYING CARD TRUMP-6;So;0;ON;;;;;N;;;;;\n1F0E7;PLAYING CARD TRUMP-7;So;0;ON;;;;;N;;;;;\n1F0E8;PLAYING CARD TRUMP-8;So;0;ON;;;;;N;;;;;\n1F0E9;PLAYING CARD TRUMP-9;So;0;ON;;;;;N;;;;;\n1F0EA;PLAYING CARD TRUMP-10;So;0;ON;;;;;N;;;;;\n1F0EB;PLAYING CARD TRUMP-11;So;0;ON;;;;;N;;;;;\n1F0EC;PLAYING CARD TRUMP-12;So;0;ON;;;;;N;;;;;\n1F0ED;PLAYING CARD TRUMP-13;So;0;ON;;;;;N;;;;;\n1F0EE;PLAYING CARD TRUMP-14;So;0;ON;;;;;N;;;;;\n1F0EF;PLAYING CARD TRUMP-15;So;0;ON;;;;;N;;;;;\n1F0F0;PLAYING CARD TRUMP-16;So;0;ON;;;;;N;;;;;\n1F0F1;PLAYING CARD TRUMP-17;So;0;ON;;;;;N;;;;;\n1F0F2;PLAYING CARD TRUMP-18;So;0;ON;;;;;N;;;;;\n1F0F3;PLAYING CARD TRUMP-19;So;0;ON;;;;;N;;;;;\n1F0F4;PLAYING CARD TRUMP-20;So;0;ON;;;;;N;;;;;\n1F0F5;PLAYING CARD TRUMP-21;So;0;ON;;;;;N;;;;;\n1F100;DIGIT ZERO FULL STOP;No;0;EN;<compat> 0030 002E;;0;0;N;;;;;\n1F101;DIGIT ZERO COMMA;No;0;EN;<compat> 0030 002C;;0;0;N;;;;;\n1F102;DIGIT ONE COMMA;No;0;EN;<compat> 0031 002C;;1;1;N;;;;;\n1F103;DIGIT TWO COMMA;No;0;EN;<compat> 0032 002C;;2;2;N;;;;;\n1F104;DIGIT THREE COMMA;No;0;EN;<compat> 0033 002C;;3;3;N;;;;;\n1F105;DIGIT FOUR COMMA;No;0;EN;<compat> 0034 002C;;4;4;N;;;;;\n1F106;DIGIT FIVE COMMA;No;0;EN;<compat> 0035 002C;;5;5;N;;;;;\n1F107;DIGIT SIX COMMA;No;0;EN;<compat> 0036 002C;;6;6;N;;;;;\n1F108;DIGIT SEVEN COMMA;No;0;EN;<compat> 0037 002C;;7;7;N;;;;;\n1F109;DIGIT EIGHT COMMA;No;0;EN;<compat> 0038 002C;;8;8;N;;;;;\n1F10A;DIGIT NINE COMMA;No;0;EN;<compat> 0039 002C;;9;9;N;;;;;\n1F10B;DINGBAT CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;;\n1F10C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;;\n1F10D;CIRCLED ZERO WITH SLASH;So;0;ON;;;;;N;;;;;\n1F10E;CIRCLED ANTICLOCKWISE ARROW;So;0;ON;;;;;N;;;;;\n1F10F;CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH;So;0;ON;;;;;N;;;;;\n1F110;PARENTHESIZED LATIN CAPITAL LETTER A;So;0;L;<compat> 0028 0041 0029;;;;N;;;;;\n1F111;PARENTHESIZED LATIN CAPITAL LETTER B;So;0;L;<compat> 0028 0042 0029;;;;N;;;;;\n1F112;PARENTHESIZED LATIN CAPITAL LETTER C;So;0;L;<compat> 0028 0043 0029;;;;N;;;;;\n1F113;PARENTHESIZED LATIN CAPITAL LETTER D;So;0;L;<compat> 0028 0044 0029;;;;N;;;;;\n1F114;PARENTHESIZED LATIN CAPITAL LETTER E;So;0;L;<compat> 0028 0045 0029;;;;N;;;;;\n1F115;PARENTHESIZED LATIN CAPITAL LETTER F;So;0;L;<compat> 0028 0046 0029;;;;N;;;;;\n1F116;PARENTHESIZED LATIN CAPITAL LETTER G;So;0;L;<compat> 0028 0047 0029;;;;N;;;;;\n1F117;PARENTHESIZED LATIN CAPITAL LETTER H;So;0;L;<compat> 0028 0048 0029;;;;N;;;;;\n1F118;PARENTHESIZED LATIN CAPITAL LETTER I;So;0;L;<compat> 0028 0049 0029;;;;N;;;;;\n1F119;PARENTHESIZED LATIN CAPITAL LETTER J;So;0;L;<compat> 0028 004A 0029;;;;N;;;;;\n1F11A;PARENTHESIZED LATIN CAPITAL LETTER K;So;0;L;<compat> 0028 004B 0029;;;;N;;;;;\n1F11B;PARENTHESIZED LATIN CAPITAL LETTER L;So;0;L;<compat> 0028 004C 0029;;;;N;;;;;\n1F11C;PARENTHESIZED LATIN CAPITAL LETTER M;So;0;L;<compat> 0028 004D 0029;;;;N;;;;;\n1F11D;PARENTHESIZED LATIN CAPITAL LETTER N;So;0;L;<compat> 0028 004E 0029;;;;N;;;;;\n1F11E;PARENTHESIZED LATIN CAPITAL LETTER O;So;0;L;<compat> 0028 004F 0029;;;;N;;;;;\n1F11F;PARENTHESIZED LATIN CAPITAL LETTER P;So;0;L;<compat> 0028 0050 0029;;;;N;;;;;\n1F120;PARENTHESIZED LATIN CAPITAL LETTER Q;So;0;L;<compat> 0028 0051 0029;;;;N;;;;;\n1F121;PARENTHESIZED LATIN CAPITAL LETTER R;So;0;L;<compat> 0028 0052 0029;;;;N;;;;;\n1F122;PARENTHESIZED LATIN CAPITAL LETTER S;So;0;L;<compat> 0028 0053 0029;;;;N;;;;;\n1F123;PARENTHESIZED LATIN CAPITAL LETTER T;So;0;L;<compat> 0028 0054 0029;;;;N;;;;;\n1F124;PARENTHESIZED LATIN CAPITAL LETTER U;So;0;L;<compat> 0028 0055 0029;;;;N;;;;;\n1F125;PARENTHESIZED LATIN CAPITAL LETTER V;So;0;L;<compat> 0028 0056 0029;;;;N;;;;;\n1F126;PARENTHESIZED LATIN CAPITAL LETTER W;So;0;L;<compat> 0028 0057 0029;;;;N;;;;;\n1F127;PARENTHESIZED LATIN CAPITAL LETTER X;So;0;L;<compat> 0028 0058 0029;;;;N;;;;;\n1F128;PARENTHESIZED LATIN CAPITAL LETTER Y;So;0;L;<compat> 0028 0059 0029;;;;N;;;;;\n1F129;PARENTHESIZED LATIN CAPITAL LETTER Z;So;0;L;<compat> 0028 005A 0029;;;;N;;;;;\n1F12A;TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S;So;0;L;<compat> 3014 0053 3015;;;;N;;;;;\n1F12B;CIRCLED ITALIC LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;;\n1F12C;CIRCLED ITALIC LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;;\n1F12D;CIRCLED CD;So;0;L;<circle> 0043 0044;;;;N;;;;;\n1F12E;CIRCLED WZ;So;0;L;<circle> 0057 005A;;;;N;;;;;\n1F12F;COPYLEFT SYMBOL;So;0;ON;;;;;N;;;;;\n1F130;SQUARED LATIN CAPITAL LETTER A;So;0;L;<square> 0041;;;;N;;;;;\n1F131;SQUARED LATIN CAPITAL LETTER B;So;0;L;<square> 0042;;;;N;;;;;\n1F132;SQUARED LATIN CAPITAL LETTER C;So;0;L;<square> 0043;;;;N;;;;;\n1F133;SQUARED LATIN CAPITAL LETTER D;So;0;L;<square> 0044;;;;N;;;;;\n1F134;SQUARED LATIN CAPITAL LETTER E;So;0;L;<square> 0045;;;;N;;;;;\n1F135;SQUARED LATIN CAPITAL LETTER F;So;0;L;<square> 0046;;;;N;;;;;\n1F136;SQUARED LATIN CAPITAL LETTER G;So;0;L;<square> 0047;;;;N;;;;;\n1F137;SQUARED LATIN CAPITAL LETTER H;So;0;L;<square> 0048;;;;N;;;;;\n1F138;SQUARED LATIN CAPITAL LETTER I;So;0;L;<square> 0049;;;;N;;;;;\n1F139;SQUARED LATIN CAPITAL LETTER J;So;0;L;<square> 004A;;;;N;;;;;\n1F13A;SQUARED LATIN CAPITAL LETTER K;So;0;L;<square> 004B;;;;N;;;;;\n1F13B;SQUARED LATIN CAPITAL LETTER L;So;0;L;<square> 004C;;;;N;;;;;\n1F13C;SQUARED LATIN CAPITAL LETTER M;So;0;L;<square> 004D;;;;N;;;;;\n1F13D;SQUARED LATIN CAPITAL LETTER N;So;0;L;<square> 004E;;;;N;;;;;\n1F13E;SQUARED LATIN CAPITAL LETTER O;So;0;L;<square> 004F;;;;N;;;;;\n1F13F;SQUARED LATIN CAPITAL LETTER P;So;0;L;<square> 0050;;;;N;;;;;\n1F140;SQUARED LATIN CAPITAL LETTER Q;So;0;L;<square> 0051;;;;N;;;;;\n1F141;SQUARED LATIN CAPITAL LETTER R;So;0;L;<square> 0052;;;;N;;;;;\n1F142;SQUARED LATIN CAPITAL LETTER S;So;0;L;<square> 0053;;;;N;;;;;\n1F143;SQUARED LATIN CAPITAL LETTER T;So;0;L;<square> 0054;;;;N;;;;;\n1F144;SQUARED LATIN CAPITAL LETTER U;So;0;L;<square> 0055;;;;N;;;;;\n1F145;SQUARED LATIN CAPITAL LETTER V;So;0;L;<square> 0056;;;;N;;;;;\n1F146;SQUARED LATIN CAPITAL LETTER W;So;0;L;<square> 0057;;;;N;;;;;\n1F147;SQUARED LATIN CAPITAL LETTER X;So;0;L;<square> 0058;;;;N;;;;;\n1F148;SQUARED LATIN CAPITAL LETTER Y;So;0;L;<square> 0059;;;;N;;;;;\n1F149;SQUARED LATIN CAPITAL LETTER Z;So;0;L;<square> 005A;;;;N;;;;;\n1F14A;SQUARED HV;So;0;L;<square> 0048 0056;;;;N;;;;;\n1F14B;SQUARED MV;So;0;L;<square> 004D 0056;;;;N;;;;;\n1F14C;SQUARED SD;So;0;L;<square> 0053 0044;;;;N;;;;;\n1F14D;SQUARED SS;So;0;L;<square> 0053 0053;;;;N;;;;;\n1F14E;SQUARED PPV;So;0;L;<square> 0050 0050 0056;;;;N;;;;;\n1F14F;SQUARED WC;So;0;L;<square> 0057 0043;;;;N;;;;;\n1F150;NEGATIVE CIRCLED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;;\n1F151;NEGATIVE CIRCLED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;;\n1F152;NEGATIVE CIRCLED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;;\n1F153;NEGATIVE CIRCLED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;;\n1F154;NEGATIVE CIRCLED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;;\n1F155;NEGATIVE CIRCLED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;;\n1F156;NEGATIVE CIRCLED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;;\n1F157;NEGATIVE CIRCLED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;;\n1F158;NEGATIVE CIRCLED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;;\n1F159;NEGATIVE CIRCLED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;;\n1F15A;NEGATIVE CIRCLED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;;\n1F15B;NEGATIVE CIRCLED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;;\n1F15C;NEGATIVE CIRCLED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;;\n1F15D;NEGATIVE CIRCLED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;;\n1F15E;NEGATIVE CIRCLED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;;\n1F15F;NEGATIVE CIRCLED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;;\n1F160;NEGATIVE CIRCLED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;;\n1F161;NEGATIVE CIRCLED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;;\n1F162;NEGATIVE CIRCLED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;;\n1F163;NEGATIVE CIRCLED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;;\n1F164;NEGATIVE CIRCLED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;;\n1F165;NEGATIVE CIRCLED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;;\n1F166;NEGATIVE CIRCLED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;;\n1F167;NEGATIVE CIRCLED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;;\n1F168;NEGATIVE CIRCLED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;;\n1F169;NEGATIVE CIRCLED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;;\n1F16A;RAISED MC SIGN;So;0;ON;<super> 004D 0043;;;;N;;;;;\n1F16B;RAISED MD SIGN;So;0;ON;<super> 004D 0044;;;;N;;;;;\n1F16C;RAISED MR SIGN;So;0;ON;<super> 004D 0052;;;;N;;;;;\n1F16D;CIRCLED CC;So;0;ON;;;;;N;;;;;\n1F16E;CIRCLED C WITH OVERLAID BACKSLASH;So;0;ON;;;;;N;;;;;\n1F16F;CIRCLED HUMAN FIGURE;So;0;ON;;;;;N;;;;;\n1F170;NEGATIVE SQUARED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;;\n1F171;NEGATIVE SQUARED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;;\n1F172;NEGATIVE SQUARED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;;\n1F173;NEGATIVE SQUARED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;;\n1F174;NEGATIVE SQUARED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;;\n1F175;NEGATIVE SQUARED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;;\n1F176;NEGATIVE SQUARED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;;\n1F177;NEGATIVE SQUARED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;;\n1F178;NEGATIVE SQUARED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;;\n1F179;NEGATIVE SQUARED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;;\n1F17A;NEGATIVE SQUARED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;;\n1F17B;NEGATIVE SQUARED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;;\n1F17C;NEGATIVE SQUARED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;;\n1F17D;NEGATIVE SQUARED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;;\n1F17E;NEGATIVE SQUARED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;;\n1F17F;NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;;\n1F180;NEGATIVE SQUARED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;;\n1F181;NEGATIVE SQUARED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;;\n1F182;NEGATIVE SQUARED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;;\n1F183;NEGATIVE SQUARED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;;\n1F184;NEGATIVE SQUARED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;;\n1F185;NEGATIVE SQUARED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;;\n1F186;NEGATIVE SQUARED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;;\n1F187;NEGATIVE SQUARED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;;\n1F188;NEGATIVE SQUARED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;;\n1F189;NEGATIVE SQUARED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;;\n1F18A;CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;;\n1F18B;NEGATIVE SQUARED IC;So;0;L;;;;;N;;;;;\n1F18C;NEGATIVE SQUARED PA;So;0;L;;;;;N;;;;;\n1F18D;NEGATIVE SQUARED SA;So;0;L;;;;;N;;;;;\n1F18E;NEGATIVE SQUARED AB;So;0;L;;;;;N;;;;;\n1F18F;NEGATIVE SQUARED WC;So;0;L;;;;;N;;;;;\n1F190;SQUARE DJ;So;0;L;<square> 0044 004A;;;;N;;;;;\n1F191;SQUARED CL;So;0;L;;;;;N;;;;;\n1F192;SQUARED COOL;So;0;L;;;;;N;;;;;\n1F193;SQUARED FREE;So;0;L;;;;;N;;;;;\n1F194;SQUARED ID;So;0;L;;;;;N;;;;;\n1F195;SQUARED NEW;So;0;L;;;;;N;;;;;\n1F196;SQUARED NG;So;0;L;;;;;N;;;;;\n1F197;SQUARED OK;So;0;L;;;;;N;;;;;\n1F198;SQUARED SOS;So;0;L;;;;;N;;;;;\n1F199;SQUARED UP WITH EXCLAMATION MARK;So;0;L;;;;;N;;;;;\n1F19A;SQUARED VS;So;0;L;;;;;N;;;;;\n1F19B;SQUARED THREE D;So;0;L;;;;;N;;;;;\n1F19C;SQUARED SECOND SCREEN;So;0;L;;;;;N;;;;;\n1F19D;SQUARED TWO K;So;0;L;;;;;N;;;;;\n1F19E;SQUARED FOUR K;So;0;L;;;;;N;;;;;\n1F19F;SQUARED EIGHT K;So;0;L;;;;;N;;;;;\n1F1A0;SQUARED FIVE POINT ONE;So;0;L;;;;;N;;;;;\n1F1A1;SQUARED SEVEN POINT ONE;So;0;L;;;;;N;;;;;\n1F1A2;SQUARED TWENTY-TWO POINT TWO;So;0;L;;;;;N;;;;;\n1F1A3;SQUARED SIXTY P;So;0;L;;;;;N;;;;;\n1F1A4;SQUARED ONE HUNDRED TWENTY P;So;0;L;;;;;N;;;;;\n1F1A5;SQUARED LATIN SMALL LETTER D;So;0;L;;;;;N;;;;;\n1F1A6;SQUARED HC;So;0;L;;;;;N;;;;;\n1F1A7;SQUARED HDR;So;0;L;;;;;N;;;;;\n1F1A8;SQUARED HI-RES;So;0;L;;;;;N;;;;;\n1F1A9;SQUARED LOSSLESS;So;0;L;;;;;N;;;;;\n1F1AA;SQUARED SHV;So;0;L;;;;;N;;;;;\n1F1AB;SQUARED UHD;So;0;L;;;;;N;;;;;\n1F1AC;SQUARED VOD;So;0;L;;;;;N;;;;;\n1F1AD;MASK WORK SYMBOL;So;0;ON;;;;;N;;;;;\n1F1E6;REGIONAL INDICATOR SYMBOL LETTER A;So;0;L;;;;;N;;;;;\n1F1E7;REGIONAL INDICATOR SYMBOL LETTER B;So;0;L;;;;;N;;;;;\n1F1E8;REGIONAL INDICATOR SYMBOL LETTER C;So;0;L;;;;;N;;;;;\n1F1E9;REGIONAL INDICATOR SYMBOL LETTER D;So;0;L;;;;;N;;;;;\n1F1EA;REGIONAL INDICATOR SYMBOL LETTER E;So;0;L;;;;;N;;;;;\n1F1EB;REGIONAL INDICATOR SYMBOL LETTER F;So;0;L;;;;;N;;;;;\n1F1EC;REGIONAL INDICATOR SYMBOL LETTER G;So;0;L;;;;;N;;;;;\n1F1ED;REGIONAL INDICATOR SYMBOL LETTER H;So;0;L;;;;;N;;;;;\n1F1EE;REGIONAL INDICATOR SYMBOL LETTER I;So;0;L;;;;;N;;;;;\n1F1EF;REGIONAL INDICATOR SYMBOL LETTER J;So;0;L;;;;;N;;;;;\n1F1F0;REGIONAL INDICATOR SYMBOL LETTER K;So;0;L;;;;;N;;;;;\n1F1F1;REGIONAL INDICATOR SYMBOL LETTER L;So;0;L;;;;;N;;;;;\n1F1F2;REGIONAL INDICATOR SYMBOL LETTER M;So;0;L;;;;;N;;;;;\n1F1F3;REGIONAL INDICATOR SYMBOL LETTER N;So;0;L;;;;;N;;;;;\n1F1F4;REGIONAL INDICATOR SYMBOL LETTER O;So;0;L;;;;;N;;;;;\n1F1F5;REGIONAL INDICATOR SYMBOL LETTER P;So;0;L;;;;;N;;;;;\n1F1F6;REGIONAL INDICATOR SYMBOL LETTER Q;So;0;L;;;;;N;;;;;\n1F1F7;REGIONAL INDICATOR SYMBOL LETTER R;So;0;L;;;;;N;;;;;\n1F1F8;REGIONAL INDICATOR SYMBOL LETTER S;So;0;L;;;;;N;;;;;\n1F1F9;REGIONAL INDICATOR SYMBOL LETTER T;So;0;L;;;;;N;;;;;\n1F1FA;REGIONAL INDICATOR SYMBOL LETTER U;So;0;L;;;;;N;;;;;\n1F1FB;REGIONAL INDICATOR SYMBOL LETTER V;So;0;L;;;;;N;;;;;\n1F1FC;REGIONAL INDICATOR SYMBOL LETTER W;So;0;L;;;;;N;;;;;\n1F1FD;REGIONAL INDICATOR SYMBOL LETTER X;So;0;L;;;;;N;;;;;\n1F1FE;REGIONAL INDICATOR SYMBOL LETTER Y;So;0;L;;;;;N;;;;;\n1F1FF;REGIONAL INDICATOR SYMBOL LETTER Z;So;0;L;;;;;N;;;;;\n1F200;SQUARE HIRAGANA HOKA;So;0;L;<square> 307B 304B;;;;N;;;;;\n1F201;SQUARED KATAKANA KOKO;So;0;L;<square> 30B3 30B3;;;;N;;;;;\n1F202;SQUARED KATAKANA SA;So;0;L;<square> 30B5;;;;N;;;;;\n1F210;SQUARED CJK UNIFIED IDEOGRAPH-624B;So;0;L;<square> 624B;;;;N;;;;;\n1F211;SQUARED CJK UNIFIED IDEOGRAPH-5B57;So;0;L;<square> 5B57;;;;N;;;;;\n1F212;SQUARED CJK UNIFIED IDEOGRAPH-53CC;So;0;L;<square> 53CC;;;;N;;;;;\n1F213;SQUARED KATAKANA DE;So;0;L;<square> 30C7;;;;N;;;;;\n1F214;SQUARED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L;<square> 4E8C;;;;N;;;;;\n1F215;SQUARED CJK UNIFIED IDEOGRAPH-591A;So;0;L;<square> 591A;;;;N;;;;;\n1F216;SQUARED CJK UNIFIED IDEOGRAPH-89E3;So;0;L;<square> 89E3;;;;N;;;;;\n1F217;SQUARED CJK UNIFIED IDEOGRAPH-5929;So;0;L;<square> 5929;;;;N;;;;;\n1F218;SQUARED CJK UNIFIED IDEOGRAPH-4EA4;So;0;L;<square> 4EA4;;;;N;;;;;\n1F219;SQUARED CJK UNIFIED IDEOGRAPH-6620;So;0;L;<square> 6620;;;;N;;;;;\n1F21A;SQUARED CJK UNIFIED IDEOGRAPH-7121;So;0;L;<square> 7121;;;;N;;;;;\n1F21B;SQUARED CJK UNIFIED IDEOGRAPH-6599;So;0;L;<square> 6599;;;;N;;;;;\n1F21C;SQUARED CJK UNIFIED IDEOGRAPH-524D;So;0;L;<square> 524D;;;;N;;;;;\n1F21D;SQUARED CJK UNIFIED IDEOGRAPH-5F8C;So;0;L;<square> 5F8C;;;;N;;;;;\n1F21E;SQUARED CJK UNIFIED IDEOGRAPH-518D;So;0;L;<square> 518D;;;;N;;;;;\n1F21F;SQUARED CJK UNIFIED IDEOGRAPH-65B0;So;0;L;<square> 65B0;;;;N;;;;;\n1F220;SQUARED CJK UNIFIED IDEOGRAPH-521D;So;0;L;<square> 521D;;;;N;;;;;\n1F221;SQUARED CJK UNIFIED IDEOGRAPH-7D42;So;0;L;<square> 7D42;;;;N;;;;;\n1F222;SQUARED CJK UNIFIED IDEOGRAPH-751F;So;0;L;<square> 751F;;;;N;;;;;\n1F223;SQUARED CJK UNIFIED IDEOGRAPH-8CA9;So;0;L;<square> 8CA9;;;;N;;;;;\n1F224;SQUARED CJK UNIFIED IDEOGRAPH-58F0;So;0;L;<square> 58F0;;;;N;;;;;\n1F225;SQUARED CJK UNIFIED IDEOGRAPH-5439;So;0;L;<square> 5439;;;;N;;;;;\n1F226;SQUARED CJK UNIFIED IDEOGRAPH-6F14;So;0;L;<square> 6F14;;;;N;;;;;\n1F227;SQUARED CJK UNIFIED IDEOGRAPH-6295;So;0;L;<square> 6295;;;;N;;;;;\n1F228;SQUARED CJK UNIFIED IDEOGRAPH-6355;So;0;L;<square> 6355;;;;N;;;;;\n1F229;SQUARED CJK UNIFIED IDEOGRAPH-4E00;So;0;L;<square> 4E00;;;;N;;;;;\n1F22A;SQUARED CJK UNIFIED IDEOGRAPH-4E09;So;0;L;<square> 4E09;;;;N;;;;;\n1F22B;SQUARED CJK UNIFIED IDEOGRAPH-904A;So;0;L;<square> 904A;;;;N;;;;;\n1F22C;SQUARED CJK UNIFIED IDEOGRAPH-5DE6;So;0;L;<square> 5DE6;;;;N;;;;;\n1F22D;SQUARED CJK UNIFIED IDEOGRAPH-4E2D;So;0;L;<square> 4E2D;;;;N;;;;;\n1F22E;SQUARED CJK UNIFIED IDEOGRAPH-53F3;So;0;L;<square> 53F3;;;;N;;;;;\n1F22F;SQUARED CJK UNIFIED IDEOGRAPH-6307;So;0;L;<square> 6307;;;;N;;;;;\n1F230;SQUARED CJK UNIFIED IDEOGRAPH-8D70;So;0;L;<square> 8D70;;;;N;;;;;\n1F231;SQUARED CJK UNIFIED IDEOGRAPH-6253;So;0;L;<square> 6253;;;;N;;;;;\n1F232;SQUARED CJK UNIFIED IDEOGRAPH-7981;So;0;L;<square> 7981;;;;N;;;;;\n1F233;SQUARED CJK UNIFIED IDEOGRAPH-7A7A;So;0;L;<square> 7A7A;;;;N;;;;;\n1F234;SQUARED CJK UNIFIED IDEOGRAPH-5408;So;0;L;<square> 5408;;;;N;;;;;\n1F235;SQUARED CJK UNIFIED IDEOGRAPH-6E80;So;0;L;<square> 6E80;;;;N;;;;;\n1F236;SQUARED CJK UNIFIED IDEOGRAPH-6709;So;0;L;<square> 6709;;;;N;;;;;\n1F237;SQUARED CJK UNIFIED IDEOGRAPH-6708;So;0;L;<square> 6708;;;;N;;;;;\n1F238;SQUARED CJK UNIFIED IDEOGRAPH-7533;So;0;L;<square> 7533;;;;N;;;;;\n1F239;SQUARED CJK UNIFIED IDEOGRAPH-5272;So;0;L;<square> 5272;;;;N;;;;;\n1F23A;SQUARED CJK UNIFIED IDEOGRAPH-55B6;So;0;L;<square> 55B6;;;;N;;;;;\n1F23B;SQUARED CJK UNIFIED IDEOGRAPH-914D;So;0;L;<square> 914D;;;;N;;;;;\n1F240;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C;So;0;L;<compat> 3014 672C 3015;;;;N;;;;;\n1F241;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09;So;0;L;<compat> 3014 4E09 3015;;;;N;;;;;\n1F242;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L;<compat> 3014 4E8C 3015;;;;N;;;;;\n1F243;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89;So;0;L;<compat> 3014 5B89 3015;;;;N;;;;;\n1F244;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9;So;0;L;<compat> 3014 70B9 3015;;;;N;;;;;\n1F245;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253;So;0;L;<compat> 3014 6253 3015;;;;N;;;;;\n1F246;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7;So;0;L;<compat> 3014 76D7 3015;;;;N;;;;;\n1F247;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD;So;0;L;<compat> 3014 52DD 3015;;;;N;;;;;\n1F248;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557;So;0;L;<compat> 3014 6557 3015;;;;N;;;;;\n1F250;CIRCLED IDEOGRAPH ADVANTAGE;So;0;L;<circle> 5F97;;;;N;;;;;\n1F251;CIRCLED IDEOGRAPH ACCEPT;So;0;L;<circle> 53EF;;;;N;;;;;\n1F260;ROUNDED SYMBOL FOR FU;So;0;ON;;;;;N;;;;;\n1F261;ROUNDED SYMBOL FOR LU;So;0;ON;;;;;N;;;;;\n1F262;ROUNDED SYMBOL FOR SHOU;So;0;ON;;;;;N;;;;;\n1F263;ROUNDED SYMBOL FOR XI;So;0;ON;;;;;N;;;;;\n1F264;ROUNDED SYMBOL FOR SHUANGXI;So;0;ON;;;;;N;;;;;\n1F265;ROUNDED SYMBOL FOR CAI;So;0;ON;;;;;N;;;;;\n1F300;CYCLONE;So;0;ON;;;;;N;;;;;\n1F301;FOGGY;So;0;ON;;;;;N;;;;;\n1F302;CLOSED UMBRELLA;So;0;ON;;;;;N;;;;;\n1F303;NIGHT WITH STARS;So;0;ON;;;;;N;;;;;\n1F304;SUNRISE OVER MOUNTAINS;So;0;ON;;;;;N;;;;;\n1F305;SUNRISE;So;0;ON;;;;;N;;;;;\n1F306;CITYSCAPE AT DUSK;So;0;ON;;;;;N;;;;;\n1F307;SUNSET OVER BUILDINGS;So;0;ON;;;;;N;;;;;\n1F308;RAINBOW;So;0;ON;;;;;N;;;;;\n1F309;BRIDGE AT NIGHT;So;0;ON;;;;;N;;;;;\n1F30A;WATER WAVE;So;0;ON;;;;;N;;;;;\n1F30B;VOLCANO;So;0;ON;;;;;N;;;;;\n1F30C;MILKY WAY;So;0;ON;;;;;N;;;;;\n1F30D;EARTH GLOBE EUROPE-AFRICA;So;0;ON;;;;;N;;;;;\n1F30E;EARTH GLOBE AMERICAS;So;0;ON;;;;;N;;;;;\n1F30F;EARTH GLOBE ASIA-AUSTRALIA;So;0;ON;;;;;N;;;;;\n1F310;GLOBE WITH MERIDIANS;So;0;ON;;;;;N;;;;;\n1F311;NEW MOON SYMBOL;So;0;ON;;;;;N;;;;;\n1F312;WAXING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;;\n1F313;FIRST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;;\n1F314;WAXING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;;\n1F315;FULL MOON SYMBOL;So;0;ON;;;;;N;;;;;\n1F316;WANING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;;\n1F317;LAST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;;\n1F318;WANING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;;\n1F319;CRESCENT MOON;So;0;ON;;;;;N;;;;;\n1F31A;NEW MOON WITH FACE;So;0;ON;;;;;N;;;;;\n1F31B;FIRST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;;\n1F31C;LAST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;;\n1F31D;FULL MOON WITH FACE;So;0;ON;;;;;N;;;;;\n1F31E;SUN WITH FACE;So;0;ON;;;;;N;;;;;\n1F31F;GLOWING STAR;So;0;ON;;;;;N;;;;;\n1F320;SHOOTING STAR;So;0;ON;;;;;N;;;;;\n1F321;THERMOMETER;So;0;ON;;;;;N;;;;;\n1F322;BLACK DROPLET;So;0;ON;;;;;N;;;;;\n1F323;WHITE SUN;So;0;ON;;;;;N;;;;;\n1F324;WHITE SUN WITH SMALL CLOUD;So;0;ON;;;;;N;;;;;\n1F325;WHITE SUN BEHIND CLOUD;So;0;ON;;;;;N;;;;;\n1F326;WHITE SUN BEHIND CLOUD WITH RAIN;So;0;ON;;;;;N;;;;;\n1F327;CLOUD WITH RAIN;So;0;ON;;;;;N;;;;;\n1F328;CLOUD WITH SNOW;So;0;ON;;;;;N;;;;;\n1F329;CLOUD WITH LIGHTNING;So;0;ON;;;;;N;;;;;\n1F32A;CLOUD WITH TORNADO;So;0;ON;;;;;N;;;;;\n1F32B;FOG;So;0;ON;;;;;N;;;;;\n1F32C;WIND BLOWING FACE;So;0;ON;;;;;N;;;;;\n1F32D;HOT DOG;So;0;ON;;;;;N;;;;;\n1F32E;TACO;So;0;ON;;;;;N;;;;;\n1F32F;BURRITO;So;0;ON;;;;;N;;;;;\n1F330;CHESTNUT;So;0;ON;;;;;N;;;;;\n1F331;SEEDLING;So;0;ON;;;;;N;;;;;\n1F332;EVERGREEN TREE;So;0;ON;;;;;N;;;;;\n1F333;DECIDUOUS TREE;So;0;ON;;;;;N;;;;;\n1F334;PALM TREE;So;0;ON;;;;;N;;;;;\n1F335;CACTUS;So;0;ON;;;;;N;;;;;\n1F336;HOT PEPPER;So;0;ON;;;;;N;;;;;\n1F337;TULIP;So;0;ON;;;;;N;;;;;\n1F338;CHERRY BLOSSOM;So;0;ON;;;;;N;;;;;\n1F339;ROSE;So;0;ON;;;;;N;;;;;\n1F33A;HIBISCUS;So;0;ON;;;;;N;;;;;\n1F33B;SUNFLOWER;So;0;ON;;;;;N;;;;;\n1F33C;BLOSSOM;So;0;ON;;;;;N;;;;;\n1F33D;EAR OF MAIZE;So;0;ON;;;;;N;;;;;\n1F33E;EAR OF RICE;So;0;ON;;;;;N;;;;;\n1F33F;HERB;So;0;ON;;;;;N;;;;;\n1F340;FOUR LEAF CLOVER;So;0;ON;;;;;N;;;;;\n1F341;MAPLE LEAF;So;0;ON;;;;;N;;;;;\n1F342;FALLEN LEAF;So;0;ON;;;;;N;;;;;\n1F343;LEAF FLUTTERING IN WIND;So;0;ON;;;;;N;;;;;\n1F344;MUSHROOM;So;0;ON;;;;;N;;;;;\n1F345;TOMATO;So;0;ON;;;;;N;;;;;\n1F346;AUBERGINE;So;0;ON;;;;;N;;;;;\n1F347;GRAPES;So;0;ON;;;;;N;;;;;\n1F348;MELON;So;0;ON;;;;;N;;;;;\n1F349;WATERMELON;So;0;ON;;;;;N;;;;;\n1F34A;TANGERINE;So;0;ON;;;;;N;;;;;\n1F34B;LEMON;So;0;ON;;;;;N;;;;;\n1F34C;BANANA;So;0;ON;;;;;N;;;;;\n1F34D;PINEAPPLE;So;0;ON;;;;;N;;;;;\n1F34E;RED APPLE;So;0;ON;;;;;N;;;;;\n1F34F;GREEN APPLE;So;0;ON;;;;;N;;;;;\n1F350;PEAR;So;0;ON;;;;;N;;;;;\n1F351;PEACH;So;0;ON;;;;;N;;;;;\n1F352;CHERRIES;So;0;ON;;;;;N;;;;;\n1F353;STRAWBERRY;So;0;ON;;;;;N;;;;;\n1F354;HAMBURGER;So;0;ON;;;;;N;;;;;\n1F355;SLICE OF PIZZA;So;0;ON;;;;;N;;;;;\n1F356;MEAT ON BONE;So;0;ON;;;;;N;;;;;\n1F357;POULTRY LEG;So;0;ON;;;;;N;;;;;\n1F358;RICE CRACKER;So;0;ON;;;;;N;;;;;\n1F359;RICE BALL;So;0;ON;;;;;N;;;;;\n1F35A;COOKED RICE;So;0;ON;;;;;N;;;;;\n1F35B;CURRY AND RICE;So;0;ON;;;;;N;;;;;\n1F35C;STEAMING BOWL;So;0;ON;;;;;N;;;;;\n1F35D;SPAGHETTI;So;0;ON;;;;;N;;;;;\n1F35E;BREAD;So;0;ON;;;;;N;;;;;\n1F35F;FRENCH FRIES;So;0;ON;;;;;N;;;;;\n1F360;ROASTED SWEET POTATO;So;0;ON;;;;;N;;;;;\n1F361;DANGO;So;0;ON;;;;;N;;;;;\n1F362;ODEN;So;0;ON;;;;;N;;;;;\n1F363;SUSHI;So;0;ON;;;;;N;;;;;\n1F364;FRIED SHRIMP;So;0;ON;;;;;N;;;;;\n1F365;FISH CAKE WITH SWIRL DESIGN;So;0;ON;;;;;N;;;;;\n1F366;SOFT ICE CREAM;So;0;ON;;;;;N;;;;;\n1F367;SHAVED ICE;So;0;ON;;;;;N;;;;;\n1F368;ICE CREAM;So;0;ON;;;;;N;;;;;\n1F369;DOUGHNUT;So;0;ON;;;;;N;;;;;\n1F36A;COOKIE;So;0;ON;;;;;N;;;;;\n1F36B;CHOCOLATE BAR;So;0;ON;;;;;N;;;;;\n1F36C;CANDY;So;0;ON;;;;;N;;;;;\n1F36D;LOLLIPOP;So;0;ON;;;;;N;;;;;\n1F36E;CUSTARD;So;0;ON;;;;;N;;;;;\n1F36F;HONEY POT;So;0;ON;;;;;N;;;;;\n1F370;SHORTCAKE;So;0;ON;;;;;N;;;;;\n1F371;BENTO BOX;So;0;ON;;;;;N;;;;;\n1F372;POT OF FOOD;So;0;ON;;;;;N;;;;;\n1F373;COOKING;So;0;ON;;;;;N;;;;;\n1F374;FORK AND KNIFE;So;0;ON;;;;;N;;;;;\n1F375;TEACUP WITHOUT HANDLE;So;0;ON;;;;;N;;;;;\n1F376;SAKE BOTTLE AND CUP;So;0;ON;;;;;N;;;;;\n1F377;WINE GLASS;So;0;ON;;;;;N;;;;;\n1F378;COCKTAIL GLASS;So;0;ON;;;;;N;;;;;\n1F379;TROPICAL DRINK;So;0;ON;;;;;N;;;;;\n1F37A;BEER MUG;So;0;ON;;;;;N;;;;;\n1F37B;CLINKING BEER MUGS;So;0;ON;;;;;N;;;;;\n1F37C;BABY BOTTLE;So;0;ON;;;;;N;;;;;\n1F37D;FORK AND KNIFE WITH PLATE;So;0;ON;;;;;N;;;;;\n1F37E;BOTTLE WITH POPPING CORK;So;0;ON;;;;;N;;;;;\n1F37F;POPCORN;So;0;ON;;;;;N;;;;;\n1F380;RIBBON;So;0;ON;;;;;N;;;;;\n1F381;WRAPPED PRESENT;So;0;ON;;;;;N;;;;;\n1F382;BIRTHDAY CAKE;So;0;ON;;;;;N;;;;;\n1F383;JACK-O-LANTERN;So;0;ON;;;;;N;;;;;\n1F384;CHRISTMAS TREE;So;0;ON;;;;;N;;;;;\n1F385;FATHER CHRISTMAS;So;0;ON;;;;;N;;;;;\n1F386;FIREWORKS;So;0;ON;;;;;N;;;;;\n1F387;FIREWORK SPARKLER;So;0;ON;;;;;N;;;;;\n1F388;BALLOON;So;0;ON;;;;;N;;;;;\n1F389;PARTY POPPER;So;0;ON;;;;;N;;;;;\n1F38A;CONFETTI BALL;So;0;ON;;;;;N;;;;;\n1F38B;TANABATA TREE;So;0;ON;;;;;N;;;;;\n1F38C;CROSSED FLAGS;So;0;ON;;;;;N;;;;;\n1F38D;PINE DECORATION;So;0;ON;;;;;N;;;;;\n1F38E;JAPANESE DOLLS;So;0;ON;;;;;N;;;;;\n1F38F;CARP STREAMER;So;0;ON;;;;;N;;;;;\n1F390;WIND CHIME;So;0;ON;;;;;N;;;;;\n1F391;MOON VIEWING CEREMONY;So;0;ON;;;;;N;;;;;\n1F392;SCHOOL SATCHEL;So;0;ON;;;;;N;;;;;\n1F393;GRADUATION CAP;So;0;ON;;;;;N;;;;;\n1F394;HEART WITH TIP ON THE LEFT;So;0;ON;;;;;N;;;;;\n1F395;BOUQUET OF FLOWERS;So;0;ON;;;;;N;;;;;\n1F396;MILITARY MEDAL;So;0;ON;;;;;N;;;;;\n1F397;REMINDER RIBBON;So;0;ON;;;;;N;;;;;\n1F398;MUSICAL KEYBOARD WITH JACKS;So;0;ON;;;;;N;;;;;\n1F399;STUDIO MICROPHONE;So;0;ON;;;;;N;;;;;\n1F39A;LEVEL SLIDER;So;0;ON;;;;;N;;;;;\n1F39B;CONTROL KNOBS;So;0;ON;;;;;N;;;;;\n1F39C;BEAMED ASCENDING MUSICAL NOTES;So;0;ON;;;;;N;;;;;\n1F39D;BEAMED DESCENDING MUSICAL NOTES;So;0;ON;;;;;N;;;;;\n1F39E;FILM FRAMES;So;0;ON;;;;;N;;;;;\n1F39F;ADMISSION TICKETS;So;0;ON;;;;;N;;;;;\n1F3A0;CAROUSEL HORSE;So;0;ON;;;;;N;;;;;\n1F3A1;FERRIS WHEEL;So;0;ON;;;;;N;;;;;\n1F3A2;ROLLER COASTER;So;0;ON;;;;;N;;;;;\n1F3A3;FISHING POLE AND FISH;So;0;ON;;;;;N;;;;;\n1F3A4;MICROPHONE;So;0;ON;;;;;N;;;;;\n1F3A5;MOVIE CAMERA;So;0;ON;;;;;N;;;;;\n1F3A6;CINEMA;So;0;ON;;;;;N;;;;;\n1F3A7;HEADPHONE;So;0;ON;;;;;N;;;;;\n1F3A8;ARTIST PALETTE;So;0;ON;;;;;N;;;;;\n1F3A9;TOP HAT;So;0;ON;;;;;N;;;;;\n1F3AA;CIRCUS TENT;So;0;ON;;;;;N;;;;;\n1F3AB;TICKET;So;0;ON;;;;;N;;;;;\n1F3AC;CLAPPER BOARD;So;0;ON;;;;;N;;;;;\n1F3AD;PERFORMING ARTS;So;0;ON;;;;;N;;;;;\n1F3AE;VIDEO GAME;So;0;ON;;;;;N;;;;;\n1F3AF;DIRECT HIT;So;0;ON;;;;;N;;;;;\n1F3B0;SLOT MACHINE;So;0;ON;;;;;N;;;;;\n1F3B1;BILLIARDS;So;0;ON;;;;;N;;;;;\n1F3B2;GAME DIE;So;0;ON;;;;;N;;;;;\n1F3B3;BOWLING;So;0;ON;;;;;N;;;;;\n1F3B4;FLOWER PLAYING CARDS;So;0;ON;;;;;N;;;;;\n1F3B5;MUSICAL NOTE;So;0;ON;;;;;N;;;;;\n1F3B6;MULTIPLE MUSICAL NOTES;So;0;ON;;;;;N;;;;;\n1F3B7;SAXOPHONE;So;0;ON;;;;;N;;;;;\n1F3B8;GUITAR;So;0;ON;;;;;N;;;;;\n1F3B9;MUSICAL KEYBOARD;So;0;ON;;;;;N;;;;;\n1F3BA;TRUMPET;So;0;ON;;;;;N;;;;;\n1F3BB;VIOLIN;So;0;ON;;;;;N;;;;;\n1F3BC;MUSICAL SCORE;So;0;ON;;;;;N;;;;;\n1F3BD;RUNNING SHIRT WITH SASH;So;0;ON;;;;;N;;;;;\n1F3BE;TENNIS RACQUET AND BALL;So;0;ON;;;;;N;;;;;\n1F3BF;SKI AND SKI BOOT;So;0;ON;;;;;N;;;;;\n1F3C0;BASKETBALL AND HOOP;So;0;ON;;;;;N;;;;;\n1F3C1;CHEQUERED FLAG;So;0;ON;;;;;N;;;;;\n1F3C2;SNOWBOARDER;So;0;ON;;;;;N;;;;;\n1F3C3;RUNNER;So;0;ON;;;;;N;;;;;\n1F3C4;SURFER;So;0;ON;;;;;N;;;;;\n1F3C5;SPORTS MEDAL;So;0;ON;;;;;N;;;;;\n1F3C6;TROPHY;So;0;ON;;;;;N;;;;;\n1F3C7;HORSE RACING;So;0;ON;;;;;N;;;;;\n1F3C8;AMERICAN FOOTBALL;So;0;ON;;;;;N;;;;;\n1F3C9;RUGBY FOOTBALL;So;0;ON;;;;;N;;;;;\n1F3CA;SWIMMER;So;0;ON;;;;;N;;;;;\n1F3CB;WEIGHT LIFTER;So;0;ON;;;;;N;;;;;\n1F3CC;GOLFER;So;0;ON;;;;;N;;;;;\n1F3CD;RACING MOTORCYCLE;So;0;ON;;;;;N;;;;;\n1F3CE;RACING CAR;So;0;ON;;;;;N;;;;;\n1F3CF;CRICKET BAT AND BALL;So;0;ON;;;;;N;;;;;\n1F3D0;VOLLEYBALL;So;0;ON;;;;;N;;;;;\n1F3D1;FIELD HOCKEY STICK AND BALL;So;0;ON;;;;;N;;;;;\n1F3D2;ICE HOCKEY STICK AND PUCK;So;0;ON;;;;;N;;;;;\n1F3D3;TABLE TENNIS PADDLE AND BALL;So;0;ON;;;;;N;;;;;\n1F3D4;SNOW CAPPED MOUNTAIN;So;0;ON;;;;;N;;;;;\n1F3D5;CAMPING;So;0;ON;;;;;N;;;;;\n1F3D6;BEACH WITH UMBRELLA;So;0;ON;;;;;N;;;;;\n1F3D7;BUILDING CONSTRUCTION;So;0;ON;;;;;N;;;;;\n1F3D8;HOUSE BUILDINGS;So;0;ON;;;;;N;;;;;\n1F3D9;CITYSCAPE;So;0;ON;;;;;N;;;;;\n1F3DA;DERELICT HOUSE BUILDING;So;0;ON;;;;;N;;;;;\n1F3DB;CLASSICAL BUILDING;So;0;ON;;;;;N;;;;;\n1F3DC;DESERT;So;0;ON;;;;;N;;;;;\n1F3DD;DESERT ISLAND;So;0;ON;;;;;N;;;;;\n1F3DE;NATIONAL PARK;So;0;ON;;;;;N;;;;;\n1F3DF;STADIUM;So;0;ON;;;;;N;;;;;\n1F3E0;HOUSE BUILDING;So;0;ON;;;;;N;;;;;\n1F3E1;HOUSE WITH GARDEN;So;0;ON;;;;;N;;;;;\n1F3E2;OFFICE BUILDING;So;0;ON;;;;;N;;;;;\n1F3E3;JAPANESE POST OFFICE;So;0;ON;;;;;N;;;;;\n1F3E4;EUROPEAN POST OFFICE;So;0;ON;;;;;N;;;;;\n1F3E5;HOSPITAL;So;0;ON;;;;;N;;;;;\n1F3E6;BANK;So;0;ON;;;;;N;;;;;\n1F3E7;AUTOMATED TELLER MACHINE;So;0;ON;;;;;N;;;;;\n1F3E8;HOTEL;So;0;ON;;;;;N;;;;;\n1F3E9;LOVE HOTEL;So;0;ON;;;;;N;;;;;\n1F3EA;CONVENIENCE STORE;So;0;ON;;;;;N;;;;;\n1F3EB;SCHOOL;So;0;ON;;;;;N;;;;;\n1F3EC;DEPARTMENT STORE;So;0;ON;;;;;N;;;;;\n1F3ED;FACTORY;So;0;ON;;;;;N;;;;;\n1F3EE;IZAKAYA LANTERN;So;0;ON;;;;;N;;;;;\n1F3EF;JAPANESE CASTLE;So;0;ON;;;;;N;;;;;\n1F3F0;EUROPEAN CASTLE;So;0;ON;;;;;N;;;;;\n1F3F1;WHITE PENNANT;So;0;ON;;;;;N;;;;;\n1F3F2;BLACK PENNANT;So;0;ON;;;;;N;;;;;\n1F3F3;WAVING WHITE FLAG;So;0;ON;;;;;N;;;;;\n1F3F4;WAVING BLACK FLAG;So;0;ON;;;;;N;;;;;\n1F3F5;ROSETTE;So;0;ON;;;;;N;;;;;\n1F3F6;BLACK ROSETTE;So;0;ON;;;;;N;;;;;\n1F3F7;LABEL;So;0;ON;;;;;N;;;;;\n1F3F8;BADMINTON RACQUET AND SHUTTLECOCK;So;0;ON;;;;;N;;;;;\n1F3F9;BOW AND ARROW;So;0;ON;;;;;N;;;;;\n1F3FA;AMPHORA;So;0;ON;;;;;N;;;;;\n1F3FB;EMOJI MODIFIER FITZPATRICK TYPE-1-2;Sk;0;ON;;;;;N;;;;;\n1F3FC;EMOJI MODIFIER FITZPATRICK TYPE-3;Sk;0;ON;;;;;N;;;;;\n1F3FD;EMOJI MODIFIER FITZPATRICK TYPE-4;Sk;0;ON;;;;;N;;;;;\n1F3FE;EMOJI MODIFIER FITZPATRICK TYPE-5;Sk;0;ON;;;;;N;;;;;\n1F3FF;EMOJI MODIFIER FITZPATRICK TYPE-6;Sk;0;ON;;;;;N;;;;;\n1F400;RAT;So;0;ON;;;;;N;;;;;\n1F401;MOUSE;So;0;ON;;;;;N;;;;;\n1F402;OX;So;0;ON;;;;;N;;;;;\n1F403;WATER BUFFALO;So;0;ON;;;;;N;;;;;\n1F404;COW;So;0;ON;;;;;N;;;;;\n1F405;TIGER;So;0;ON;;;;;N;;;;;\n1F406;LEOPARD;So;0;ON;;;;;N;;;;;\n1F407;RABBIT;So;0;ON;;;;;N;;;;;\n1F408;CAT;So;0;ON;;;;;N;;;;;\n1F409;DRAGON;So;0;ON;;;;;N;;;;;\n1F40A;CROCODILE;So;0;ON;;;;;N;;;;;\n1F40B;WHALE;So;0;ON;;;;;N;;;;;\n1F40C;SNAIL;So;0;ON;;;;;N;;;;;\n1F40D;SNAKE;So;0;ON;;;;;N;;;;;\n1F40E;HORSE;So;0;ON;;;;;N;;;;;\n1F40F;RAM;So;0;ON;;;;;N;;;;;\n1F410;GOAT;So;0;ON;;;;;N;;;;;\n1F411;SHEEP;So;0;ON;;;;;N;;;;;\n1F412;MONKEY;So;0;ON;;;;;N;;;;;\n1F413;ROOSTER;So;0;ON;;;;;N;;;;;\n1F414;CHICKEN;So;0;ON;;;;;N;;;;;\n1F415;DOG;So;0;ON;;;;;N;;;;;\n1F416;PIG;So;0;ON;;;;;N;;;;;\n1F417;BOAR;So;0;ON;;;;;N;;;;;\n1F418;ELEPHANT;So;0;ON;;;;;N;;;;;\n1F419;OCTOPUS;So;0;ON;;;;;N;;;;;\n1F41A;SPIRAL SHELL;So;0;ON;;;;;N;;;;;\n1F41B;BUG;So;0;ON;;;;;N;;;;;\n1F41C;ANT;So;0;ON;;;;;N;;;;;\n1F41D;HONEYBEE;So;0;ON;;;;;N;;;;;\n1F41E;LADY BEETLE;So;0;ON;;;;;N;;;;;\n1F41F;FISH;So;0;ON;;;;;N;;;;;\n1F420;TROPICAL FISH;So;0;ON;;;;;N;;;;;\n1F421;BLOWFISH;So;0;ON;;;;;N;;;;;\n1F422;TURTLE;So;0;ON;;;;;N;;;;;\n1F423;HATCHING CHICK;So;0;ON;;;;;N;;;;;\n1F424;BABY CHICK;So;0;ON;;;;;N;;;;;\n1F425;FRONT-FACING BABY CHICK;So;0;ON;;;;;N;;;;;\n1F426;BIRD;So;0;ON;;;;;N;;;;;\n1F427;PENGUIN;So;0;ON;;;;;N;;;;;\n1F428;KOALA;So;0;ON;;;;;N;;;;;\n1F429;POODLE;So;0;ON;;;;;N;;;;;\n1F42A;DROMEDARY CAMEL;So;0;ON;;;;;N;;;;;\n1F42B;BACTRIAN CAMEL;So;0;ON;;;;;N;;;;;\n1F42C;DOLPHIN;So;0;ON;;;;;N;;;;;\n1F42D;MOUSE FACE;So;0;ON;;;;;N;;;;;\n1F42E;COW FACE;So;0;ON;;;;;N;;;;;\n1F42F;TIGER FACE;So;0;ON;;;;;N;;;;;\n1F430;RABBIT FACE;So;0;ON;;;;;N;;;;;\n1F431;CAT FACE;So;0;ON;;;;;N;;;;;\n1F432;DRAGON FACE;So;0;ON;;;;;N;;;;;\n1F433;SPOUTING WHALE;So;0;ON;;;;;N;;;;;\n1F434;HORSE FACE;So;0;ON;;;;;N;;;;;\n1F435;MONKEY FACE;So;0;ON;;;;;N;;;;;\n1F436;DOG FACE;So;0;ON;;;;;N;;;;;\n1F437;PIG FACE;So;0;ON;;;;;N;;;;;\n1F438;FROG FACE;So;0;ON;;;;;N;;;;;\n1F439;HAMSTER FACE;So;0;ON;;;;;N;;;;;\n1F43A;WOLF FACE;So;0;ON;;;;;N;;;;;\n1F43B;BEAR FACE;So;0;ON;;;;;N;;;;;\n1F43C;PANDA FACE;So;0;ON;;;;;N;;;;;\n1F43D;PIG NOSE;So;0;ON;;;;;N;;;;;\n1F43E;PAW PRINTS;So;0;ON;;;;;N;;;;;\n1F43F;CHIPMUNK;So;0;ON;;;;;N;;;;;\n1F440;EYES;So;0;ON;;;;;N;;;;;\n1F441;EYE;So;0;ON;;;;;N;;;;;\n1F442;EAR;So;0;ON;;;;;N;;;;;\n1F443;NOSE;So;0;ON;;;;;N;;;;;\n1F444;MOUTH;So;0;ON;;;;;N;;;;;\n1F445;TONGUE;So;0;ON;;;;;N;;;;;\n1F446;WHITE UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;\n1F447;WHITE DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;\n1F448;WHITE LEFT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;\n1F449;WHITE RIGHT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;\n1F44A;FISTED HAND SIGN;So;0;ON;;;;;N;;;;;\n1F44B;WAVING HAND SIGN;So;0;ON;;;;;N;;;;;\n1F44C;OK HAND SIGN;So;0;ON;;;;;N;;;;;\n1F44D;THUMBS UP SIGN;So;0;ON;;;;;N;;;;;\n1F44E;THUMBS DOWN SIGN;So;0;ON;;;;;N;;;;;\n1F44F;CLAPPING HANDS SIGN;So;0;ON;;;;;N;;;;;\n1F450;OPEN HANDS SIGN;So;0;ON;;;;;N;;;;;\n1F451;CROWN;So;0;ON;;;;;N;;;;;\n1F452;WOMANS HAT;So;0;ON;;;;;N;;;;;\n1F453;EYEGLASSES;So;0;ON;;;;;N;;;;;\n1F454;NECKTIE;So;0;ON;;;;;N;;;;;\n1F455;T-SHIRT;So;0;ON;;;;;N;;;;;\n1F456;JEANS;So;0;ON;;;;;N;;;;;\n1F457;DRESS;So;0;ON;;;;;N;;;;;\n1F458;KIMONO;So;0;ON;;;;;N;;;;;\n1F459;BIKINI;So;0;ON;;;;;N;;;;;\n1F45A;WOMANS CLOTHES;So;0;ON;;;;;N;;;;;\n1F45B;PURSE;So;0;ON;;;;;N;;;;;\n1F45C;HANDBAG;So;0;ON;;;;;N;;;;;\n1F45D;POUCH;So;0;ON;;;;;N;;;;;\n1F45E;MANS SHOE;So;0;ON;;;;;N;;;;;\n1F45F;ATHLETIC SHOE;So;0;ON;;;;;N;;;;;\n1F460;HIGH-HEELED SHOE;So;0;ON;;;;;N;;;;;\n1F461;WOMANS SANDAL;So;0;ON;;;;;N;;;;;\n1F462;WOMANS BOOTS;So;0;ON;;;;;N;;;;;\n1F463;FOOTPRINTS;So;0;ON;;;;;N;;;;;\n1F464;BUST IN SILHOUETTE;So;0;ON;;;;;N;;;;;\n1F465;BUSTS IN SILHOUETTE;So;0;ON;;;;;N;;;;;\n1F466;BOY;So;0;ON;;;;;N;;;;;\n1F467;GIRL;So;0;ON;;;;;N;;;;;\n1F468;MAN;So;0;ON;;;;;N;;;;;\n1F469;WOMAN;So;0;ON;;;;;N;;;;;\n1F46A;FAMILY;So;0;ON;;;;;N;;;;;\n1F46B;MAN AND WOMAN HOLDING HANDS;So;0;ON;;;;;N;;;;;\n1F46C;TWO MEN HOLDING HANDS;So;0;ON;;;;;N;;;;;\n1F46D;TWO WOMEN HOLDING HANDS;So;0;ON;;;;;N;;;;;\n1F46E;POLICE OFFICER;So;0;ON;;;;;N;;;;;\n1F46F;WOMAN WITH BUNNY EARS;So;0;ON;;;;;N;;;;;\n1F470;BRIDE WITH VEIL;So;0;ON;;;;;N;;;;;\n1F471;PERSON WITH BLOND HAIR;So;0;ON;;;;;N;;;;;\n1F472;MAN WITH GUA PI MAO;So;0;ON;;;;;N;;;;;\n1F473;MAN WITH TURBAN;So;0;ON;;;;;N;;;;;\n1F474;OLDER MAN;So;0;ON;;;;;N;;;;;\n1F475;OLDER WOMAN;So;0;ON;;;;;N;;;;;\n1F476;BABY;So;0;ON;;;;;N;;;;;\n1F477;CONSTRUCTION WORKER;So;0;ON;;;;;N;;;;;\n1F478;PRINCESS;So;0;ON;;;;;N;;;;;\n1F479;JAPANESE OGRE;So;0;ON;;;;;N;;;;;\n1F47A;JAPANESE GOBLIN;So;0;ON;;;;;N;;;;;\n1F47B;GHOST;So;0;ON;;;;;N;;;;;\n1F47C;BABY ANGEL;So;0;ON;;;;;N;;;;;\n1F47D;EXTRATERRESTRIAL ALIEN;So;0;ON;;;;;N;;;;;\n1F47E;ALIEN MONSTER;So;0;ON;;;;;N;;;;;\n1F47F;IMP;So;0;ON;;;;;N;;;;;\n1F480;SKULL;So;0;ON;;;;;N;;;;;\n1F481;INFORMATION DESK PERSON;So;0;ON;;;;;N;;;;;\n1F482;GUARDSMAN;So;0;ON;;;;;N;;;;;\n1F483;DANCER;So;0;ON;;;;;N;;;;;\n1F484;LIPSTICK;So;0;ON;;;;;N;;;;;\n1F485;NAIL POLISH;So;0;ON;;;;;N;;;;;\n1F486;FACE MASSAGE;So;0;ON;;;;;N;;;;;\n1F487;HAIRCUT;So;0;ON;;;;;N;;;;;\n1F488;BARBER POLE;So;0;ON;;;;;N;;;;;\n1F489;SYRINGE;So;0;ON;;;;;N;;;;;\n1F48A;PILL;So;0;ON;;;;;N;;;;;\n1F48B;KISS MARK;So;0;ON;;;;;N;;;;;\n1F48C;LOVE LETTER;So;0;ON;;;;;N;;;;;\n1F48D;RING;So;0;ON;;;;;N;;;;;\n1F48E;GEM STONE;So;0;ON;;;;;N;;;;;\n1F48F;KISS;So;0;ON;;;;;N;;;;;\n1F490;BOUQUET;So;0;ON;;;;;N;;;;;\n1F491;COUPLE WITH HEART;So;0;ON;;;;;N;;;;;\n1F492;WEDDING;So;0;ON;;;;;N;;;;;\n1F493;BEATING HEART;So;0;ON;;;;;N;;;;;\n1F494;BROKEN HEART;So;0;ON;;;;;N;;;;;\n1F495;TWO HEARTS;So;0;ON;;;;;N;;;;;\n1F496;SPARKLING HEART;So;0;ON;;;;;N;;;;;\n1F497;GROWING HEART;So;0;ON;;;;;N;;;;;\n1F498;HEART WITH ARROW;So;0;ON;;;;;N;;;;;\n1F499;BLUE HEART;So;0;ON;;;;;N;;;;;\n1F49A;GREEN HEART;So;0;ON;;;;;N;;;;;\n1F49B;YELLOW HEART;So;0;ON;;;;;N;;;;;\n1F49C;PURPLE HEART;So;0;ON;;;;;N;;;;;\n1F49D;HEART WITH RIBBON;So;0;ON;;;;;N;;;;;\n1F49E;REVOLVING HEARTS;So;0;ON;;;;;N;;;;;\n1F49F;HEART DECORATION;So;0;ON;;;;;N;;;;;\n1F4A0;DIAMOND SHAPE WITH A DOT INSIDE;So;0;ON;;;;;N;;;;;\n1F4A1;ELECTRIC LIGHT BULB;So;0;ON;;;;;N;;;;;\n1F4A2;ANGER SYMBOL;So;0;ON;;;;;N;;;;;\n1F4A3;BOMB;So;0;ON;;;;;N;;;;;\n1F4A4;SLEEPING SYMBOL;So;0;ON;;;;;N;;;;;\n1F4A5;COLLISION SYMBOL;So;0;ON;;;;;N;;;;;\n1F4A6;SPLASHING SWEAT SYMBOL;So;0;ON;;;;;N;;;;;\n1F4A7;DROPLET;So;0;ON;;;;;N;;;;;\n1F4A8;DASH SYMBOL;So;0;ON;;;;;N;;;;;\n1F4A9;PILE OF POO;So;0;ON;;;;;N;;;;;\n1F4AA;FLEXED BICEPS;So;0;ON;;;;;N;;;;;\n1F4AB;DIZZY SYMBOL;So;0;ON;;;;;N;;;;;\n1F4AC;SPEECH BALLOON;So;0;ON;;;;;N;;;;;\n1F4AD;THOUGHT BALLOON;So;0;ON;;;;;N;;;;;\n1F4AE;WHITE FLOWER;So;0;ON;;;;;N;;;;;\n1F4AF;HUNDRED POINTS SYMBOL;So;0;ON;;;;;N;;;;;\n1F4B0;MONEY BAG;So;0;ON;;;;;N;;;;;\n1F4B1;CURRENCY EXCHANGE;So;0;ON;;;;;N;;;;;\n1F4B2;HEAVY DOLLAR SIGN;So;0;ON;;;;;N;;;;;\n1F4B3;CREDIT CARD;So;0;ON;;;;;N;;;;;\n1F4B4;BANKNOTE WITH YEN SIGN;So;0;ON;;;;;N;;;;;\n1F4B5;BANKNOTE WITH DOLLAR SIGN;So;0;ON;;;;;N;;;;;\n1F4B6;BANKNOTE WITH EURO SIGN;So;0;ON;;;;;N;;;;;\n1F4B7;BANKNOTE WITH POUND SIGN;So;0;ON;;;;;N;;;;;\n1F4B8;MONEY WITH WINGS;So;0;ON;;;;;N;;;;;\n1F4B9;CHART WITH UPWARDS TREND AND YEN SIGN;So;0;ON;;;;;N;;;;;\n1F4BA;SEAT;So;0;ON;;;;;N;;;;;\n1F4BB;PERSONAL COMPUTER;So;0;ON;;;;;N;;;;;\n1F4BC;BRIEFCASE;So;0;ON;;;;;N;;;;;\n1F4BD;MINIDISC;So;0;ON;;;;;N;;;;;\n1F4BE;FLOPPY DISK;So;0;ON;;;;;N;;;;;\n1F4BF;OPTICAL DISC;So;0;ON;;;;;N;;;;;\n1F4C0;DVD;So;0;ON;;;;;N;;;;;\n1F4C1;FILE FOLDER;So;0;ON;;;;;N;;;;;\n1F4C2;OPEN FILE FOLDER;So;0;ON;;;;;N;;;;;\n1F4C3;PAGE WITH CURL;So;0;ON;;;;;N;;;;;\n1F4C4;PAGE FACING UP;So;0;ON;;;;;N;;;;;\n1F4C5;CALENDAR;So;0;ON;;;;;N;;;;;\n1F4C6;TEAR-OFF CALENDAR;So;0;ON;;;;;N;;;;;\n1F4C7;CARD INDEX;So;0;ON;;;;;N;;;;;\n1F4C8;CHART WITH UPWARDS TREND;So;0;ON;;;;;N;;;;;\n1F4C9;CHART WITH DOWNWARDS TREND;So;0;ON;;;;;N;;;;;\n1F4CA;BAR CHART;So;0;ON;;;;;N;;;;;\n1F4CB;CLIPBOARD;So;0;ON;;;;;N;;;;;\n1F4CC;PUSHPIN;So;0;ON;;;;;N;;;;;\n1F4CD;ROUND PUSHPIN;So;0;ON;;;;;N;;;;;\n1F4CE;PAPERCLIP;So;0;ON;;;;;N;;;;;\n1F4CF;STRAIGHT RULER;So;0;ON;;;;;N;;;;;\n1F4D0;TRIANGULAR RULER;So;0;ON;;;;;N;;;;;\n1F4D1;BOOKMARK TABS;So;0;ON;;;;;N;;;;;\n1F4D2;LEDGER;So;0;ON;;;;;N;;;;;\n1F4D3;NOTEBOOK;So;0;ON;;;;;N;;;;;\n1F4D4;NOTEBOOK WITH DECORATIVE COVER;So;0;ON;;;;;N;;;;;\n1F4D5;CLOSED BOOK;So;0;ON;;;;;N;;;;;\n1F4D6;OPEN BOOK;So;0;ON;;;;;N;;;;;\n1F4D7;GREEN BOOK;So;0;ON;;;;;N;;;;;\n1F4D8;BLUE BOOK;So;0;ON;;;;;N;;;;;\n1F4D9;ORANGE BOOK;So;0;ON;;;;;N;;;;;\n1F4DA;BOOKS;So;0;ON;;;;;N;;;;;\n1F4DB;NAME BADGE;So;0;ON;;;;;N;;;;;\n1F4DC;SCROLL;So;0;ON;;;;;N;;;;;\n1F4DD;MEMO;So;0;ON;;;;;N;;;;;\n1F4DE;TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;;\n1F4DF;PAGER;So;0;ON;;;;;N;;;;;\n1F4E0;FAX MACHINE;So;0;ON;;;;;N;;;;;\n1F4E1;SATELLITE ANTENNA;So;0;ON;;;;;N;;;;;\n1F4E2;PUBLIC ADDRESS LOUDSPEAKER;So;0;ON;;;;;N;;;;;\n1F4E3;CHEERING MEGAPHONE;So;0;ON;;;;;N;;;;;\n1F4E4;OUTBOX TRAY;So;0;ON;;;;;N;;;;;\n1F4E5;INBOX TRAY;So;0;ON;;;;;N;;;;;\n1F4E6;PACKAGE;So;0;ON;;;;;N;;;;;\n1F4E7;E-MAIL SYMBOL;So;0;ON;;;;;N;;;;;\n1F4E8;INCOMING ENVELOPE;So;0;ON;;;;;N;;;;;\n1F4E9;ENVELOPE WITH DOWNWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;\n1F4EA;CLOSED MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;;\n1F4EB;CLOSED MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;;\n1F4EC;OPEN MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;;\n1F4ED;OPEN MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;;\n1F4EE;POSTBOX;So;0;ON;;;;;N;;;;;\n1F4EF;POSTAL HORN;So;0;ON;;;;;N;;;;;\n1F4F0;NEWSPAPER;So;0;ON;;;;;N;;;;;\n1F4F1;MOBILE PHONE;So;0;ON;;;;;N;;;;;\n1F4F2;MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT;So;0;ON;;;;;N;;;;;\n1F4F3;VIBRATION MODE;So;0;ON;;;;;N;;;;;\n1F4F4;MOBILE PHONE OFF;So;0;ON;;;;;N;;;;;\n1F4F5;NO MOBILE PHONES;So;0;ON;;;;;N;;;;;\n1F4F6;ANTENNA WITH BARS;So;0;ON;;;;;N;;;;;\n1F4F7;CAMERA;So;0;ON;;;;;N;;;;;\n1F4F8;CAMERA WITH FLASH;So;0;ON;;;;;N;;;;;\n1F4F9;VIDEO CAMERA;So;0;ON;;;;;N;;;;;\n1F4FA;TELEVISION;So;0;ON;;;;;N;;;;;\n1F4FB;RADIO;So;0;ON;;;;;N;;;;;\n1F4FC;VIDEOCASSETTE;So;0;ON;;;;;N;;;;;\n1F4FD;FILM PROJECTOR;So;0;ON;;;;;N;;;;;\n1F4FE;PORTABLE STEREO;So;0;ON;;;;;N;;;;;\n1F4FF;PRAYER BEADS;So;0;ON;;;;;N;;;;;\n1F500;TWISTED RIGHTWARDS ARROWS;So;0;ON;;;;;N;;;;;\n1F501;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;;\n1F502;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY;So;0;ON;;;;;N;;;;;\n1F503;CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;;\n1F504;ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;;\n1F505;LOW BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;;\n1F506;HIGH BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;;\n1F507;SPEAKER WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;;\n1F508;SPEAKER;So;0;ON;;;;;N;;;;;\n1F509;SPEAKER WITH ONE SOUND WAVE;So;0;ON;;;;;N;;;;;\n1F50A;SPEAKER WITH THREE SOUND WAVES;So;0;ON;;;;;N;;;;;\n1F50B;BATTERY;So;0;ON;;;;;N;;;;;\n1F50C;ELECTRIC PLUG;So;0;ON;;;;;N;;;;;\n1F50D;LEFT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;;\n1F50E;RIGHT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;;\n1F50F;LOCK WITH INK PEN;So;0;ON;;;;;N;;;;;\n1F510;CLOSED LOCK WITH KEY;So;0;ON;;;;;N;;;;;\n1F511;KEY;So;0;ON;;;;;N;;;;;\n1F512;LOCK;So;0;ON;;;;;N;;;;;\n1F513;OPEN LOCK;So;0;ON;;;;;N;;;;;\n1F514;BELL;So;0;ON;;;;;N;;;;;\n1F515;BELL WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;;\n1F516;BOOKMARK;So;0;ON;;;;;N;;;;;\n1F517;LINK SYMBOL;So;0;ON;;;;;N;;;;;\n1F518;RADIO BUTTON;So;0;ON;;;;;N;;;;;\n1F519;BACK WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;\n1F51A;END WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;\n1F51B;ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE;So;0;ON;;;;;N;;;;;\n1F51C;SOON WITH RIGHTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;\n1F51D;TOP WITH UPWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;;\n1F51E;NO ONE UNDER EIGHTEEN SYMBOL;So;0;ON;;;;;N;;;;;\n1F51F;KEYCAP TEN;So;0;ON;;;;;N;;;;;\n1F520;INPUT SYMBOL FOR LATIN CAPITAL LETTERS;So;0;ON;;;;;N;;;;;\n1F521;INPUT SYMBOL FOR LATIN SMALL LETTERS;So;0;ON;;;;;N;;;;;\n1F522;INPUT SYMBOL FOR NUMBERS;So;0;ON;;;;;N;;;;;\n1F523;INPUT SYMBOL FOR SYMBOLS;So;0;ON;;;;;N;;;;;\n1F524;INPUT SYMBOL FOR LATIN LETTERS;So;0;ON;;;;;N;;;;;\n1F525;FIRE;So;0;ON;;;;;N;;;;;\n1F526;ELECTRIC TORCH;So;0;ON;;;;;N;;;;;\n1F527;WRENCH;So;0;ON;;;;;N;;;;;\n1F528;HAMMER;So;0;ON;;;;;N;;;;;\n1F529;NUT AND BOLT;So;0;ON;;;;;N;;;;;\n1F52A;HOCHO;So;0;ON;;;;;N;;;;;\n1F52B;PISTOL;So;0;ON;;;;;N;;;;;\n1F52C;MICROSCOPE;So;0;ON;;;;;N;;;;;\n1F52D;TELESCOPE;So;0;ON;;;;;N;;;;;\n1F52E;CRYSTAL BALL;So;0;ON;;;;;N;;;;;\n1F52F;SIX POINTED STAR WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;\n1F530;JAPANESE SYMBOL FOR BEGINNER;So;0;ON;;;;;N;;;;;\n1F531;TRIDENT EMBLEM;So;0;ON;;;;;N;;;;;\n1F532;BLACK SQUARE BUTTON;So;0;ON;;;;;N;;;;;\n1F533;WHITE SQUARE BUTTON;So;0;ON;;;;;N;;;;;\n1F534;LARGE RED CIRCLE;So;0;ON;;;;;N;;;;;\n1F535;LARGE BLUE CIRCLE;So;0;ON;;;;;N;;;;;\n1F536;LARGE ORANGE DIAMOND;So;0;ON;;;;;N;;;;;\n1F537;LARGE BLUE DIAMOND;So;0;ON;;;;;N;;;;;\n1F538;SMALL ORANGE DIAMOND;So;0;ON;;;;;N;;;;;\n1F539;SMALL BLUE DIAMOND;So;0;ON;;;;;N;;;;;\n1F53A;UP-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;;\n1F53B;DOWN-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;;\n1F53C;UP-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;;\n1F53D;DOWN-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;;\n1F53E;LOWER RIGHT SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1F53F;UPPER RIGHT SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1F540;CIRCLED CROSS POMMEE;So;0;ON;;;;;N;;;;;\n1F541;CROSS POMMEE WITH HALF-CIRCLE BELOW;So;0;ON;;;;;N;;;;;\n1F542;CROSS POMMEE;So;0;ON;;;;;N;;;;;\n1F543;NOTCHED LEFT SEMICIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;;\n1F544;NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;;\n1F545;SYMBOL FOR MARKS CHAPTER;So;0;ON;;;;;N;;;;;\n1F546;WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;\n1F547;HEAVY LATIN CROSS;So;0;ON;;;;;N;;;;;\n1F548;CELTIC CROSS;So;0;ON;;;;;N;;;;;\n1F549;OM SYMBOL;So;0;ON;;;;;N;;;;;\n1F54A;DOVE OF PEACE;So;0;ON;;;;;N;;;;;\n1F54B;KAABA;So;0;ON;;;;;N;;;;;\n1F54C;MOSQUE;So;0;ON;;;;;N;;;;;\n1F54D;SYNAGOGUE;So;0;ON;;;;;N;;;;;\n1F54E;MENORAH WITH NINE BRANCHES;So;0;ON;;;;;N;;;;;\n1F54F;BOWL OF HYGIEIA;So;0;ON;;;;;N;;;;;\n1F550;CLOCK FACE ONE OCLOCK;So;0;ON;;;;;N;;;;;\n1F551;CLOCK FACE TWO OCLOCK;So;0;ON;;;;;N;;;;;\n1F552;CLOCK FACE THREE OCLOCK;So;0;ON;;;;;N;;;;;\n1F553;CLOCK FACE FOUR OCLOCK;So;0;ON;;;;;N;;;;;\n1F554;CLOCK FACE FIVE OCLOCK;So;0;ON;;;;;N;;;;;\n1F555;CLOCK FACE SIX OCLOCK;So;0;ON;;;;;N;;;;;\n1F556;CLOCK FACE SEVEN OCLOCK;So;0;ON;;;;;N;;;;;\n1F557;CLOCK FACE EIGHT OCLOCK;So;0;ON;;;;;N;;;;;\n1F558;CLOCK FACE NINE OCLOCK;So;0;ON;;;;;N;;;;;\n1F559;CLOCK FACE TEN OCLOCK;So;0;ON;;;;;N;;;;;\n1F55A;CLOCK FACE ELEVEN OCLOCK;So;0;ON;;;;;N;;;;;\n1F55B;CLOCK FACE TWELVE OCLOCK;So;0;ON;;;;;N;;;;;\n1F55C;CLOCK FACE ONE-THIRTY;So;0;ON;;;;;N;;;;;\n1F55D;CLOCK FACE TWO-THIRTY;So;0;ON;;;;;N;;;;;\n1F55E;CLOCK FACE THREE-THIRTY;So;0;ON;;;;;N;;;;;\n1F55F;CLOCK FACE FOUR-THIRTY;So;0;ON;;;;;N;;;;;\n1F560;CLOCK FACE FIVE-THIRTY;So;0;ON;;;;;N;;;;;\n1F561;CLOCK FACE SIX-THIRTY;So;0;ON;;;;;N;;;;;\n1F562;CLOCK FACE SEVEN-THIRTY;So;0;ON;;;;;N;;;;;\n1F563;CLOCK FACE EIGHT-THIRTY;So;0;ON;;;;;N;;;;;\n1F564;CLOCK FACE NINE-THIRTY;So;0;ON;;;;;N;;;;;\n1F565;CLOCK FACE TEN-THIRTY;So;0;ON;;;;;N;;;;;\n1F566;CLOCK FACE ELEVEN-THIRTY;So;0;ON;;;;;N;;;;;\n1F567;CLOCK FACE TWELVE-THIRTY;So;0;ON;;;;;N;;;;;\n1F568;RIGHT SPEAKER;So;0;ON;;;;;N;;;;;\n1F569;RIGHT SPEAKER WITH ONE SOUND WAVE;So;0;ON;;;;;N;;;;;\n1F56A;RIGHT SPEAKER WITH THREE SOUND WAVES;So;0;ON;;;;;N;;;;;\n1F56B;BULLHORN;So;0;ON;;;;;N;;;;;\n1F56C;BULLHORN WITH SOUND WAVES;So;0;ON;;;;;N;;;;;\n1F56D;RINGING BELL;So;0;ON;;;;;N;;;;;\n1F56E;BOOK;So;0;ON;;;;;N;;;;;\n1F56F;CANDLE;So;0;ON;;;;;N;;;;;\n1F570;MANTELPIECE CLOCK;So;0;ON;;;;;N;;;;;\n1F571;BLACK SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;\n1F572;NO PIRACY;So;0;ON;;;;;N;;;;;\n1F573;HOLE;So;0;ON;;;;;N;;;;;\n1F574;MAN IN BUSINESS SUIT LEVITATING;So;0;ON;;;;;N;;;;;\n1F575;SLEUTH OR SPY;So;0;ON;;;;;N;;;;;\n1F576;DARK SUNGLASSES;So;0;ON;;;;;N;;;;;\n1F577;SPIDER;So;0;ON;;;;;N;;;;;\n1F578;SPIDER WEB;So;0;ON;;;;;N;;;;;\n1F579;JOYSTICK;So;0;ON;;;;;N;;;;;\n1F57A;MAN DANCING;So;0;ON;;;;;N;;;;;\n1F57B;LEFT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;;\n1F57C;TELEPHONE RECEIVER WITH PAGE;So;0;ON;;;;;N;;;;;\n1F57D;RIGHT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;;\n1F57E;WHITE TOUCHTONE TELEPHONE;So;0;ON;;;;;N;;;;;\n1F57F;BLACK TOUCHTONE TELEPHONE;So;0;ON;;;;;N;;;;;\n1F580;TELEPHONE ON TOP OF MODEM;So;0;ON;;;;;N;;;;;\n1F581;CLAMSHELL MOBILE PHONE;So;0;ON;;;;;N;;;;;\n1F582;BACK OF ENVELOPE;So;0;ON;;;;;N;;;;;\n1F583;STAMPED ENVELOPE;So;0;ON;;;;;N;;;;;\n1F584;ENVELOPE WITH LIGHTNING;So;0;ON;;;;;N;;;;;\n1F585;FLYING ENVELOPE;So;0;ON;;;;;N;;;;;\n1F586;PEN OVER STAMPED ENVELOPE;So;0;ON;;;;;N;;;;;\n1F587;LINKED PAPERCLIPS;So;0;ON;;;;;N;;;;;\n1F588;BLACK PUSHPIN;So;0;ON;;;;;N;;;;;\n1F589;LOWER LEFT PENCIL;So;0;ON;;;;;N;;;;;\n1F58A;LOWER LEFT BALLPOINT PEN;So;0;ON;;;;;N;;;;;\n1F58B;LOWER LEFT FOUNTAIN PEN;So;0;ON;;;;;N;;;;;\n1F58C;LOWER LEFT PAINTBRUSH;So;0;ON;;;;;N;;;;;\n1F58D;LOWER LEFT CRAYON;So;0;ON;;;;;N;;;;;\n1F58E;LEFT WRITING HAND;So;0;ON;;;;;N;;;;;\n1F58F;TURNED OK HAND SIGN;So;0;ON;;;;;N;;;;;\n1F590;RAISED HAND WITH FINGERS SPLAYED;So;0;ON;;;;;N;;;;;\n1F591;REVERSED RAISED HAND WITH FINGERS SPLAYED;So;0;ON;;;;;N;;;;;\n1F592;REVERSED THUMBS UP SIGN;So;0;ON;;;;;N;;;;;\n1F593;REVERSED THUMBS DOWN SIGN;So;0;ON;;;;;N;;;;;\n1F594;REVERSED VICTORY HAND;So;0;ON;;;;;N;;;;;\n1F595;REVERSED HAND WITH MIDDLE FINGER EXTENDED;So;0;ON;;;;;N;;;;;\n1F596;RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS;So;0;ON;;;;;N;;;;;\n1F597;WHITE DOWN POINTING LEFT HAND INDEX;So;0;ON;;;;;N;;;;;\n1F598;SIDEWAYS WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;\n1F599;SIDEWAYS WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;\n1F59A;SIDEWAYS BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;\n1F59B;SIDEWAYS BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;\n1F59C;BLACK LEFT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;\n1F59D;BLACK RIGHT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;\n1F59E;SIDEWAYS WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;\n1F59F;SIDEWAYS WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;\n1F5A0;SIDEWAYS BLACK UP POINTING INDEX;So;0;ON;;;;;N;;;;;\n1F5A1;SIDEWAYS BLACK DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;\n1F5A2;BLACK UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;\n1F5A3;BLACK DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;\n1F5A4;BLACK HEART;So;0;ON;;;;;N;;;;;\n1F5A5;DESKTOP COMPUTER;So;0;ON;;;;;N;;;;;\n1F5A6;KEYBOARD AND MOUSE;So;0;ON;;;;;N;;;;;\n1F5A7;THREE NETWORKED COMPUTERS;So;0;ON;;;;;N;;;;;\n1F5A8;PRINTER;So;0;ON;;;;;N;;;;;\n1F5A9;POCKET CALCULATOR;So;0;ON;;;;;N;;;;;\n1F5AA;BLACK HARD SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;;\n1F5AB;WHITE HARD SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;;\n1F5AC;SOFT SHELL FLOPPY DISK;So;0;ON;;;;;N;;;;;\n1F5AD;TAPE CARTRIDGE;So;0;ON;;;;;N;;;;;\n1F5AE;WIRED KEYBOARD;So;0;ON;;;;;N;;;;;\n1F5AF;ONE BUTTON MOUSE;So;0;ON;;;;;N;;;;;\n1F5B0;TWO BUTTON MOUSE;So;0;ON;;;;;N;;;;;\n1F5B1;THREE BUTTON MOUSE;So;0;ON;;;;;N;;;;;\n1F5B2;TRACKBALL;So;0;ON;;;;;N;;;;;\n1F5B3;OLD PERSONAL COMPUTER;So;0;ON;;;;;N;;;;;\n1F5B4;HARD DISK;So;0;ON;;;;;N;;;;;\n1F5B5;SCREEN;So;0;ON;;;;;N;;;;;\n1F5B6;PRINTER ICON;So;0;ON;;;;;N;;;;;\n1F5B7;FAX ICON;So;0;ON;;;;;N;;;;;\n1F5B8;OPTICAL DISC ICON;So;0;ON;;;;;N;;;;;\n1F5B9;DOCUMENT WITH TEXT;So;0;ON;;;;;N;;;;;\n1F5BA;DOCUMENT WITH TEXT AND PICTURE;So;0;ON;;;;;N;;;;;\n1F5BB;DOCUMENT WITH PICTURE;So;0;ON;;;;;N;;;;;\n1F5BC;FRAME WITH PICTURE;So;0;ON;;;;;N;;;;;\n1F5BD;FRAME WITH TILES;So;0;ON;;;;;N;;;;;\n1F5BE;FRAME WITH AN X;So;0;ON;;;;;N;;;;;\n1F5BF;BLACK FOLDER;So;0;ON;;;;;N;;;;;\n1F5C0;FOLDER;So;0;ON;;;;;N;;;;;\n1F5C1;OPEN FOLDER;So;0;ON;;;;;N;;;;;\n1F5C2;CARD INDEX DIVIDERS;So;0;ON;;;;;N;;;;;\n1F5C3;CARD FILE BOX;So;0;ON;;;;;N;;;;;\n1F5C4;FILE CABINET;So;0;ON;;;;;N;;;;;\n1F5C5;EMPTY NOTE;So;0;ON;;;;;N;;;;;\n1F5C6;EMPTY NOTE PAGE;So;0;ON;;;;;N;;;;;\n1F5C7;EMPTY NOTE PAD;So;0;ON;;;;;N;;;;;\n1F5C8;NOTE;So;0;ON;;;;;N;;;;;\n1F5C9;NOTE PAGE;So;0;ON;;;;;N;;;;;\n1F5CA;NOTE PAD;So;0;ON;;;;;N;;;;;\n1F5CB;EMPTY DOCUMENT;So;0;ON;;;;;N;;;;;\n1F5CC;EMPTY PAGE;So;0;ON;;;;;N;;;;;\n1F5CD;EMPTY PAGES;So;0;ON;;;;;N;;;;;\n1F5CE;DOCUMENT;So;0;ON;;;;;N;;;;;\n1F5CF;PAGE;So;0;ON;;;;;N;;;;;\n1F5D0;PAGES;So;0;ON;;;;;N;;;;;\n1F5D1;WASTEBASKET;So;0;ON;;;;;N;;;;;\n1F5D2;SPIRAL NOTE PAD;So;0;ON;;;;;N;;;;;\n1F5D3;SPIRAL CALENDAR PAD;So;0;ON;;;;;N;;;;;\n1F5D4;DESKTOP WINDOW;So;0;ON;;;;;N;;;;;\n1F5D5;MINIMIZE;So;0;ON;;;;;N;;;;;\n1F5D6;MAXIMIZE;So;0;ON;;;;;N;;;;;\n1F5D7;OVERLAP;So;0;ON;;;;;N;;;;;\n1F5D8;CLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWS;So;0;ON;;;;;N;;;;;\n1F5D9;CANCELLATION X;So;0;ON;;;;;N;;;;;\n1F5DA;INCREASE FONT SIZE SYMBOL;So;0;ON;;;;;N;;;;;\n1F5DB;DECREASE FONT SIZE SYMBOL;So;0;ON;;;;;N;;;;;\n1F5DC;COMPRESSION;So;0;ON;;;;;N;;;;;\n1F5DD;OLD KEY;So;0;ON;;;;;N;;;;;\n1F5DE;ROLLED-UP NEWSPAPER;So;0;ON;;;;;N;;;;;\n1F5DF;PAGE WITH CIRCLED TEXT;So;0;ON;;;;;N;;;;;\n1F5E0;STOCK CHART;So;0;ON;;;;;N;;;;;\n1F5E1;DAGGER KNIFE;So;0;ON;;;;;N;;;;;\n1F5E2;LIPS;So;0;ON;;;;;N;;;;;\n1F5E3;SPEAKING HEAD IN SILHOUETTE;So;0;ON;;;;;N;;;;;\n1F5E4;THREE RAYS ABOVE;So;0;ON;;;;;N;;;;;\n1F5E5;THREE RAYS BELOW;So;0;ON;;;;;N;;;;;\n1F5E6;THREE RAYS LEFT;So;0;ON;;;;;N;;;;;\n1F5E7;THREE RAYS RIGHT;So;0;ON;;;;;N;;;;;\n1F5E8;LEFT SPEECH BUBBLE;So;0;ON;;;;;N;;;;;\n1F5E9;RIGHT SPEECH BUBBLE;So;0;ON;;;;;N;;;;;\n1F5EA;TWO SPEECH BUBBLES;So;0;ON;;;;;N;;;;;\n1F5EB;THREE SPEECH BUBBLES;So;0;ON;;;;;N;;;;;\n1F5EC;LEFT THOUGHT BUBBLE;So;0;ON;;;;;N;;;;;\n1F5ED;RIGHT THOUGHT BUBBLE;So;0;ON;;;;;N;;;;;\n1F5EE;LEFT ANGER BUBBLE;So;0;ON;;;;;N;;;;;\n1F5EF;RIGHT ANGER BUBBLE;So;0;ON;;;;;N;;;;;\n1F5F0;MOOD BUBBLE;So;0;ON;;;;;N;;;;;\n1F5F1;LIGHTNING MOOD BUBBLE;So;0;ON;;;;;N;;;;;\n1F5F2;LIGHTNING MOOD;So;0;ON;;;;;N;;;;;\n1F5F3;BALLOT BOX WITH BALLOT;So;0;ON;;;;;N;;;;;\n1F5F4;BALLOT SCRIPT X;So;0;ON;;;;;N;;;;;\n1F5F5;BALLOT BOX WITH SCRIPT X;So;0;ON;;;;;N;;;;;\n1F5F6;BALLOT BOLD SCRIPT X;So;0;ON;;;;;N;;;;;\n1F5F7;BALLOT BOX WITH BOLD SCRIPT X;So;0;ON;;;;;N;;;;;\n1F5F8;LIGHT CHECK MARK;So;0;ON;;;;;N;;;;;\n1F5F9;BALLOT BOX WITH BOLD CHECK;So;0;ON;;;;;N;;;;;\n1F5FA;WORLD MAP;So;0;ON;;;;;N;;;;;\n1F5FB;MOUNT FUJI;So;0;ON;;;;;N;;;;;\n1F5FC;TOKYO TOWER;So;0;ON;;;;;N;;;;;\n1F5FD;STATUE OF LIBERTY;So;0;ON;;;;;N;;;;;\n1F5FE;SILHOUETTE OF JAPAN;So;0;ON;;;;;N;;;;;\n1F5FF;MOYAI;So;0;ON;;;;;N;;;;;\n1F600;GRINNING FACE;So;0;ON;;;;;N;;;;;\n1F601;GRINNING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;\n1F602;FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;;\n1F603;SMILING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;\n1F604;SMILING FACE WITH OPEN MOUTH AND SMILING EYES;So;0;ON;;;;;N;;;;;\n1F605;SMILING FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;;\n1F606;SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;;\n1F607;SMILING FACE WITH HALO;So;0;ON;;;;;N;;;;;\n1F608;SMILING FACE WITH HORNS;So;0;ON;;;;;N;;;;;\n1F609;WINKING FACE;So;0;ON;;;;;N;;;;;\n1F60A;SMILING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;\n1F60B;FACE SAVOURING DELICIOUS FOOD;So;0;ON;;;;;N;;;;;\n1F60C;RELIEVED FACE;So;0;ON;;;;;N;;;;;\n1F60D;SMILING FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;;\n1F60E;SMILING FACE WITH SUNGLASSES;So;0;ON;;;;;N;;;;;\n1F60F;SMIRKING FACE;So;0;ON;;;;;N;;;;;\n1F610;NEUTRAL FACE;So;0;ON;;;;;N;;;;;\n1F611;EXPRESSIONLESS FACE;So;0;ON;;;;;N;;;;;\n1F612;UNAMUSED FACE;So;0;ON;;;;;N;;;;;\n1F613;FACE WITH COLD SWEAT;So;0;ON;;;;;N;;;;;\n1F614;PENSIVE FACE;So;0;ON;;;;;N;;;;;\n1F615;CONFUSED FACE;So;0;ON;;;;;N;;;;;\n1F616;CONFOUNDED FACE;So;0;ON;;;;;N;;;;;\n1F617;KISSING FACE;So;0;ON;;;;;N;;;;;\n1F618;FACE THROWING A KISS;So;0;ON;;;;;N;;;;;\n1F619;KISSING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;\n1F61A;KISSING FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;;\n1F61B;FACE WITH STUCK-OUT TONGUE;So;0;ON;;;;;N;;;;;\n1F61C;FACE WITH STUCK-OUT TONGUE AND WINKING EYE;So;0;ON;;;;;N;;;;;\n1F61D;FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;;\n1F61E;DISAPPOINTED FACE;So;0;ON;;;;;N;;;;;\n1F61F;WORRIED FACE;So;0;ON;;;;;N;;;;;\n1F620;ANGRY FACE;So;0;ON;;;;;N;;;;;\n1F621;POUTING FACE;So;0;ON;;;;;N;;;;;\n1F622;CRYING FACE;So;0;ON;;;;;N;;;;;\n1F623;PERSEVERING FACE;So;0;ON;;;;;N;;;;;\n1F624;FACE WITH LOOK OF TRIUMPH;So;0;ON;;;;;N;;;;;\n1F625;DISAPPOINTED BUT RELIEVED FACE;So;0;ON;;;;;N;;;;;\n1F626;FROWNING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;\n1F627;ANGUISHED FACE;So;0;ON;;;;;N;;;;;\n1F628;FEARFUL FACE;So;0;ON;;;;;N;;;;;\n1F629;WEARY FACE;So;0;ON;;;;;N;;;;;\n1F62A;SLEEPY FACE;So;0;ON;;;;;N;;;;;\n1F62B;TIRED FACE;So;0;ON;;;;;N;;;;;\n1F62C;GRIMACING FACE;So;0;ON;;;;;N;;;;;\n1F62D;LOUDLY CRYING FACE;So;0;ON;;;;;N;;;;;\n1F62E;FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;\n1F62F;HUSHED FACE;So;0;ON;;;;;N;;;;;\n1F630;FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;;\n1F631;FACE SCREAMING IN FEAR;So;0;ON;;;;;N;;;;;\n1F632;ASTONISHED FACE;So;0;ON;;;;;N;;;;;\n1F633;FLUSHED FACE;So;0;ON;;;;;N;;;;;\n1F634;SLEEPING FACE;So;0;ON;;;;;N;;;;;\n1F635;DIZZY FACE;So;0;ON;;;;;N;;;;;\n1F636;FACE WITHOUT MOUTH;So;0;ON;;;;;N;;;;;\n1F637;FACE WITH MEDICAL MASK;So;0;ON;;;;;N;;;;;\n1F638;GRINNING CAT FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;\n1F639;CAT FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;;\n1F63A;SMILING CAT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;\n1F63B;SMILING CAT FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;;\n1F63C;CAT FACE WITH WRY SMILE;So;0;ON;;;;;N;;;;;\n1F63D;KISSING CAT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;;\n1F63E;POUTING CAT FACE;So;0;ON;;;;;N;;;;;\n1F63F;CRYING CAT FACE;So;0;ON;;;;;N;;;;;\n1F640;WEARY CAT FACE;So;0;ON;;;;;N;;;;;\n1F641;SLIGHTLY FROWNING FACE;So;0;ON;;;;;N;;;;;\n1F642;SLIGHTLY SMILING FACE;So;0;ON;;;;;N;;;;;\n1F643;UPSIDE-DOWN FACE;So;0;ON;;;;;N;;;;;\n1F644;FACE WITH ROLLING EYES;So;0;ON;;;;;N;;;;;\n1F645;FACE WITH NO GOOD GESTURE;So;0;ON;;;;;N;;;;;\n1F646;FACE WITH OK GESTURE;So;0;ON;;;;;N;;;;;\n1F647;PERSON BOWING DEEPLY;So;0;ON;;;;;N;;;;;\n1F648;SEE-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;;\n1F649;HEAR-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;;\n1F64A;SPEAK-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;;\n1F64B;HAPPY PERSON RAISING ONE HAND;So;0;ON;;;;;N;;;;;\n1F64C;PERSON RAISING BOTH HANDS IN CELEBRATION;So;0;ON;;;;;N;;;;;\n1F64D;PERSON FROWNING;So;0;ON;;;;;N;;;;;\n1F64E;PERSON WITH POUTING FACE;So;0;ON;;;;;N;;;;;\n1F64F;PERSON WITH FOLDED HANDS;So;0;ON;;;;;N;;;;;\n1F650;NORTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;;\n1F651;SOUTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;;\n1F652;NORTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;;\n1F653;SOUTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;;\n1F654;TURNED NORTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;;\n1F655;TURNED SOUTH WEST POINTING LEAF;So;0;ON;;;;;N;;;;;\n1F656;TURNED NORTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;;\n1F657;TURNED SOUTH EAST POINTING LEAF;So;0;ON;;;;;N;;;;;\n1F658;NORTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;\n1F659;SOUTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;\n1F65A;NORTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;\n1F65B;SOUTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;\n1F65C;HEAVY NORTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;\n1F65D;HEAVY SOUTH WEST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;\n1F65E;HEAVY NORTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;\n1F65F;HEAVY SOUTH EAST POINTING VINE LEAF;So;0;ON;;;;;N;;;;;\n1F660;NORTH WEST POINTING BUD;So;0;ON;;;;;N;;;;;\n1F661;SOUTH WEST POINTING BUD;So;0;ON;;;;;N;;;;;\n1F662;NORTH EAST POINTING BUD;So;0;ON;;;;;N;;;;;\n1F663;SOUTH EAST POINTING BUD;So;0;ON;;;;;N;;;;;\n1F664;HEAVY NORTH WEST POINTING BUD;So;0;ON;;;;;N;;;;;\n1F665;HEAVY SOUTH WEST POINTING BUD;So;0;ON;;;;;N;;;;;\n1F666;HEAVY NORTH EAST POINTING BUD;So;0;ON;;;;;N;;;;;\n1F667;HEAVY SOUTH EAST POINTING BUD;So;0;ON;;;;;N;;;;;\n1F668;HOLLOW QUILT SQUARE ORNAMENT;So;0;ON;;;;;N;;;;;\n1F669;HOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARE;So;0;ON;;;;;N;;;;;\n1F66A;SOLID QUILT SQUARE ORNAMENT;So;0;ON;;;;;N;;;;;\n1F66B;SOLID QUILT SQUARE ORNAMENT IN BLACK SQUARE;So;0;ON;;;;;N;;;;;\n1F66C;LEFTWARDS ROCKET;So;0;ON;;;;;N;;;;;\n1F66D;UPWARDS ROCKET;So;0;ON;;;;;N;;;;;\n1F66E;RIGHTWARDS ROCKET;So;0;ON;;;;;N;;;;;\n1F66F;DOWNWARDS ROCKET;So;0;ON;;;;;N;;;;;\n1F670;SCRIPT LIGATURE ET ORNAMENT;So;0;ON;;;;;N;;;;;\n1F671;HEAVY SCRIPT LIGATURE ET ORNAMENT;So;0;ON;;;;;N;;;;;\n1F672;LIGATURE OPEN ET ORNAMENT;So;0;ON;;;;;N;;;;;\n1F673;HEAVY LIGATURE OPEN ET ORNAMENT;So;0;ON;;;;;N;;;;;\n1F674;HEAVY AMPERSAND ORNAMENT;So;0;ON;;;;;N;;;;;\n1F675;SWASH AMPERSAND ORNAMENT;So;0;ON;;;;;N;;;;;\n1F676;SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n1F677;SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n1F678;SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;\n1F679;HEAVY INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;;\n1F67A;SANS-SERIF INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;;\n1F67B;HEAVY SANS-SERIF INTERROBANG ORNAMENT;So;0;ON;;;;;N;;;;;\n1F67C;VERY HEAVY SOLIDUS;So;0;ON;;;;;N;;;;;\n1F67D;VERY HEAVY REVERSE SOLIDUS;So;0;ON;;;;;N;;;;;\n1F67E;CHECKER BOARD;So;0;ON;;;;;N;;;;;\n1F67F;REVERSE CHECKER BOARD;So;0;ON;;;;;N;;;;;\n1F680;ROCKET;So;0;ON;;;;;N;;;;;\n1F681;HELICOPTER;So;0;ON;;;;;N;;;;;\n1F682;STEAM LOCOMOTIVE;So;0;ON;;;;;N;;;;;\n1F683;RAILWAY CAR;So;0;ON;;;;;N;;;;;\n1F684;HIGH-SPEED TRAIN;So;0;ON;;;;;N;;;;;\n1F685;HIGH-SPEED TRAIN WITH BULLET NOSE;So;0;ON;;;;;N;;;;;\n1F686;TRAIN;So;0;ON;;;;;N;;;;;\n1F687;METRO;So;0;ON;;;;;N;;;;;\n1F688;LIGHT RAIL;So;0;ON;;;;;N;;;;;\n1F689;STATION;So;0;ON;;;;;N;;;;;\n1F68A;TRAM;So;0;ON;;;;;N;;;;;\n1F68B;TRAM CAR;So;0;ON;;;;;N;;;;;\n1F68C;BUS;So;0;ON;;;;;N;;;;;\n1F68D;ONCOMING BUS;So;0;ON;;;;;N;;;;;\n1F68E;TROLLEYBUS;So;0;ON;;;;;N;;;;;\n1F68F;BUS STOP;So;0;ON;;;;;N;;;;;\n1F690;MINIBUS;So;0;ON;;;;;N;;;;;\n1F691;AMBULANCE;So;0;ON;;;;;N;;;;;\n1F692;FIRE ENGINE;So;0;ON;;;;;N;;;;;\n1F693;POLICE CAR;So;0;ON;;;;;N;;;;;\n1F694;ONCOMING POLICE CAR;So;0;ON;;;;;N;;;;;\n1F695;TAXI;So;0;ON;;;;;N;;;;;\n1F696;ONCOMING TAXI;So;0;ON;;;;;N;;;;;\n1F697;AUTOMOBILE;So;0;ON;;;;;N;;;;;\n1F698;ONCOMING AUTOMOBILE;So;0;ON;;;;;N;;;;;\n1F699;RECREATIONAL VEHICLE;So;0;ON;;;;;N;;;;;\n1F69A;DELIVERY TRUCK;So;0;ON;;;;;N;;;;;\n1F69B;ARTICULATED LORRY;So;0;ON;;;;;N;;;;;\n1F69C;TRACTOR;So;0;ON;;;;;N;;;;;\n1F69D;MONORAIL;So;0;ON;;;;;N;;;;;\n1F69E;MOUNTAIN RAILWAY;So;0;ON;;;;;N;;;;;\n1F69F;SUSPENSION RAILWAY;So;0;ON;;;;;N;;;;;\n1F6A0;MOUNTAIN CABLEWAY;So;0;ON;;;;;N;;;;;\n1F6A1;AERIAL TRAMWAY;So;0;ON;;;;;N;;;;;\n1F6A2;SHIP;So;0;ON;;;;;N;;;;;\n1F6A3;ROWBOAT;So;0;ON;;;;;N;;;;;\n1F6A4;SPEEDBOAT;So;0;ON;;;;;N;;;;;\n1F6A5;HORIZONTAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;;\n1F6A6;VERTICAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;;\n1F6A7;CONSTRUCTION SIGN;So;0;ON;;;;;N;;;;;\n1F6A8;POLICE CARS REVOLVING LIGHT;So;0;ON;;;;;N;;;;;\n1F6A9;TRIANGULAR FLAG ON POST;So;0;ON;;;;;N;;;;;\n1F6AA;DOOR;So;0;ON;;;;;N;;;;;\n1F6AB;NO ENTRY SIGN;So;0;ON;;;;;N;;;;;\n1F6AC;SMOKING SYMBOL;So;0;ON;;;;;N;;;;;\n1F6AD;NO SMOKING SYMBOL;So;0;ON;;;;;N;;;;;\n1F6AE;PUT LITTER IN ITS PLACE SYMBOL;So;0;ON;;;;;N;;;;;\n1F6AF;DO NOT LITTER SYMBOL;So;0;ON;;;;;N;;;;;\n1F6B0;POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;;\n1F6B1;NON-POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;;\n1F6B2;BICYCLE;So;0;ON;;;;;N;;;;;\n1F6B3;NO BICYCLES;So;0;ON;;;;;N;;;;;\n1F6B4;BICYCLIST;So;0;ON;;;;;N;;;;;\n1F6B5;MOUNTAIN BICYCLIST;So;0;ON;;;;;N;;;;;\n1F6B6;PEDESTRIAN;So;0;ON;;;;;N;;;;;\n1F6B7;NO PEDESTRIANS;So;0;ON;;;;;N;;;;;\n1F6B8;CHILDREN CROSSING;So;0;ON;;;;;N;;;;;\n1F6B9;MENS SYMBOL;So;0;ON;;;;;N;;;;;\n1F6BA;WOMENS SYMBOL;So;0;ON;;;;;N;;;;;\n1F6BB;RESTROOM;So;0;ON;;;;;N;;;;;\n1F6BC;BABY SYMBOL;So;0;ON;;;;;N;;;;;\n1F6BD;TOILET;So;0;ON;;;;;N;;;;;\n1F6BE;WATER CLOSET;So;0;ON;;;;;N;;;;;\n1F6BF;SHOWER;So;0;ON;;;;;N;;;;;\n1F6C0;BATH;So;0;ON;;;;;N;;;;;\n1F6C1;BATHTUB;So;0;ON;;;;;N;;;;;\n1F6C2;PASSPORT CONTROL;So;0;ON;;;;;N;;;;;\n1F6C3;CUSTOMS;So;0;ON;;;;;N;;;;;\n1F6C4;BAGGAGE CLAIM;So;0;ON;;;;;N;;;;;\n1F6C5;LEFT LUGGAGE;So;0;ON;;;;;N;;;;;\n1F6C6;TRIANGLE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;\n1F6C7;PROHIBITED SIGN;So;0;ON;;;;;N;;;;;\n1F6C8;CIRCLED INFORMATION SOURCE;So;0;ON;;;;;N;;;;;\n1F6C9;BOYS SYMBOL;So;0;ON;;;;;N;;;;;\n1F6CA;GIRLS SYMBOL;So;0;ON;;;;;N;;;;;\n1F6CB;COUCH AND LAMP;So;0;ON;;;;;N;;;;;\n1F6CC;SLEEPING ACCOMMODATION;So;0;ON;;;;;N;;;;;\n1F6CD;SHOPPING BAGS;So;0;ON;;;;;N;;;;;\n1F6CE;BELLHOP BELL;So;0;ON;;;;;N;;;;;\n1F6CF;BED;So;0;ON;;;;;N;;;;;\n1F6D0;PLACE OF WORSHIP;So;0;ON;;;;;N;;;;;\n1F6D1;OCTAGONAL SIGN;So;0;ON;;;;;N;;;;;\n1F6D2;SHOPPING TROLLEY;So;0;ON;;;;;N;;;;;\n1F6D3;STUPA;So;0;ON;;;;;N;;;;;\n1F6D4;PAGODA;So;0;ON;;;;;N;;;;;\n1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;;\n1F6D6;HUT;So;0;ON;;;;;N;;;;;\n1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;;\n1F6D8;LANDSLIDE;So;0;ON;;;;;N;;;;;\n1F6DC;WIRELESS;So;0;ON;;;;;N;;;;;\n1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;;\n1F6DE;WHEEL;So;0;ON;;;;;N;;;;;\n1F6DF;RING BUOY;So;0;ON;;;;;N;;;;;\n1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;;\n1F6E1;SHIELD;So;0;ON;;;;;N;;;;;\n1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;;\n1F6E3;MOTORWAY;So;0;ON;;;;;N;;;;;\n1F6E4;RAILWAY TRACK;So;0;ON;;;;;N;;;;;\n1F6E5;MOTOR BOAT;So;0;ON;;;;;N;;;;;\n1F6E6;UP-POINTING MILITARY AIRPLANE;So;0;ON;;;;;N;;;;;\n1F6E7;UP-POINTING AIRPLANE;So;0;ON;;;;;N;;;;;\n1F6E8;UP-POINTING SMALL AIRPLANE;So;0;ON;;;;;N;;;;;\n1F6E9;SMALL AIRPLANE;So;0;ON;;;;;N;;;;;\n1F6EA;NORTHEAST-POINTING AIRPLANE;So;0;ON;;;;;N;;;;;\n1F6EB;AIRPLANE DEPARTURE;So;0;ON;;;;;N;;;;;\n1F6EC;AIRPLANE ARRIVING;So;0;ON;;;;;N;;;;;\n1F6F0;SATELLITE;So;0;ON;;;;;N;;;;;\n1F6F1;ONCOMING FIRE ENGINE;So;0;ON;;;;;N;;;;;\n1F6F2;DIESEL LOCOMOTIVE;So;0;ON;;;;;N;;;;;\n1F6F3;PASSENGER SHIP;So;0;ON;;;;;N;;;;;\n1F6F4;SCOOTER;So;0;ON;;;;;N;;;;;\n1F6F5;MOTOR SCOOTER;So;0;ON;;;;;N;;;;;\n1F6F6;CANOE;So;0;ON;;;;;N;;;;;\n1F6F7;SLED;So;0;ON;;;;;N;;;;;\n1F6F8;FLYING SAUCER;So;0;ON;;;;;N;;;;;\n1F6F9;SKATEBOARD;So;0;ON;;;;;N;;;;;\n1F6FA;AUTO RICKSHAW;So;0;ON;;;;;N;;;;;\n1F6FB;PICKUP TRUCK;So;0;ON;;;;;N;;;;;\n1F6FC;ROLLER SKATE;So;0;ON;;;;;N;;;;;\n1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;;\n1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;;\n1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;;\n1F703;ALCHEMICAL SYMBOL FOR EARTH;So;0;ON;;;;;N;;;;;\n1F704;ALCHEMICAL SYMBOL FOR WATER;So;0;ON;;;;;N;;;;;\n1F705;ALCHEMICAL SYMBOL FOR AQUAFORTIS;So;0;ON;;;;;N;;;;;\n1F706;ALCHEMICAL SYMBOL FOR AQUA REGIA;So;0;ON;;;;;N;;;;;\n1F707;ALCHEMICAL SYMBOL FOR AQUA REGIA-2;So;0;ON;;;;;N;;;;;\n1F708;ALCHEMICAL SYMBOL FOR AQUA VITAE;So;0;ON;;;;;N;;;;;\n1F709;ALCHEMICAL SYMBOL FOR AQUA VITAE-2;So;0;ON;;;;;N;;;;;\n1F70A;ALCHEMICAL SYMBOL FOR VINEGAR;So;0;ON;;;;;N;;;;;\n1F70B;ALCHEMICAL SYMBOL FOR VINEGAR-2;So;0;ON;;;;;N;;;;;\n1F70C;ALCHEMICAL SYMBOL FOR VINEGAR-3;So;0;ON;;;;;N;;;;;\n1F70D;ALCHEMICAL SYMBOL FOR SULFUR;So;0;ON;;;;;N;;;;;\n1F70E;ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR;So;0;ON;;;;;N;;;;;\n1F70F;ALCHEMICAL SYMBOL FOR BLACK SULFUR;So;0;ON;;;;;N;;;;;\n1F710;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE;So;0;ON;;;;;N;;;;;\n1F711;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2;So;0;ON;;;;;N;;;;;\n1F712;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3;So;0;ON;;;;;N;;;;;\n1F713;ALCHEMICAL SYMBOL FOR CINNABAR;So;0;ON;;;;;N;;;;;\n1F714;ALCHEMICAL SYMBOL FOR SALT;So;0;ON;;;;;N;;;;;\n1F715;ALCHEMICAL SYMBOL FOR NITRE;So;0;ON;;;;;N;;;;;\n1F716;ALCHEMICAL SYMBOL FOR VITRIOL;So;0;ON;;;;;N;;;;;\n1F717;ALCHEMICAL SYMBOL FOR VITRIOL-2;So;0;ON;;;;;N;;;;;\n1F718;ALCHEMICAL SYMBOL FOR ROCK SALT;So;0;ON;;;;;N;;;;;\n1F719;ALCHEMICAL SYMBOL FOR ROCK SALT-2;So;0;ON;;;;;N;;;;;\n1F71A;ALCHEMICAL SYMBOL FOR GOLD;So;0;ON;;;;;N;;;;;\n1F71B;ALCHEMICAL SYMBOL FOR SILVER;So;0;ON;;;;;N;;;;;\n1F71C;ALCHEMICAL SYMBOL FOR IRON ORE;So;0;ON;;;;;N;;;;;\n1F71D;ALCHEMICAL SYMBOL FOR IRON ORE-2;So;0;ON;;;;;N;;;;;\n1F71E;ALCHEMICAL SYMBOL FOR CROCUS OF IRON;So;0;ON;;;;;N;;;;;\n1F71F;ALCHEMICAL SYMBOL FOR REGULUS OF IRON;So;0;ON;;;;;N;;;;;\n1F720;ALCHEMICAL SYMBOL FOR COPPER ORE;So;0;ON;;;;;N;;;;;\n1F721;ALCHEMICAL SYMBOL FOR IRON-COPPER ORE;So;0;ON;;;;;N;;;;;\n1F722;ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER;So;0;ON;;;;;N;;;;;\n1F723;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER;So;0;ON;;;;;N;;;;;\n1F724;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2;So;0;ON;;;;;N;;;;;\n1F725;ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;;\n1F726;ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;;\n1F727;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER;So;0;ON;;;;;N;;;;;\n1F728;ALCHEMICAL SYMBOL FOR VERDIGRIS;So;0;ON;;;;;N;;;;;\n1F729;ALCHEMICAL SYMBOL FOR TIN ORE;So;0;ON;;;;;N;;;;;\n1F72A;ALCHEMICAL SYMBOL FOR LEAD ORE;So;0;ON;;;;;N;;;;;\n1F72B;ALCHEMICAL SYMBOL FOR ANTIMONY ORE;So;0;ON;;;;;N;;;;;\n1F72C;ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY;So;0;ON;;;;;N;;;;;\n1F72D;ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY;So;0;ON;;;;;N;;;;;\n1F72E;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY;So;0;ON;;;;;N;;;;;\n1F72F;ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY;So;0;ON;;;;;N;;;;;\n1F730;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY;So;0;ON;;;;;N;;;;;\n1F731;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2;So;0;ON;;;;;N;;;;;\n1F732;ALCHEMICAL SYMBOL FOR REGULUS;So;0;ON;;;;;N;;;;;\n1F733;ALCHEMICAL SYMBOL FOR REGULUS-2;So;0;ON;;;;;N;;;;;\n1F734;ALCHEMICAL SYMBOL FOR REGULUS-3;So;0;ON;;;;;N;;;;;\n1F735;ALCHEMICAL SYMBOL FOR REGULUS-4;So;0;ON;;;;;N;;;;;\n1F736;ALCHEMICAL SYMBOL FOR ALKALI;So;0;ON;;;;;N;;;;;\n1F737;ALCHEMICAL SYMBOL FOR ALKALI-2;So;0;ON;;;;;N;;;;;\n1F738;ALCHEMICAL SYMBOL FOR MARCASITE;So;0;ON;;;;;N;;;;;\n1F739;ALCHEMICAL SYMBOL FOR SAL-AMMONIAC;So;0;ON;;;;;N;;;;;\n1F73A;ALCHEMICAL SYMBOL FOR ARSENIC;So;0;ON;;;;;N;;;;;\n1F73B;ALCHEMICAL SYMBOL FOR REALGAR;So;0;ON;;;;;N;;;;;\n1F73C;ALCHEMICAL SYMBOL FOR REALGAR-2;So;0;ON;;;;;N;;;;;\n1F73D;ALCHEMICAL SYMBOL FOR AURIPIGMENT;So;0;ON;;;;;N;;;;;\n1F73E;ALCHEMICAL SYMBOL FOR BISMUTH ORE;So;0;ON;;;;;N;;;;;\n1F73F;ALCHEMICAL SYMBOL FOR TARTAR;So;0;ON;;;;;N;;;;;\n1F740;ALCHEMICAL SYMBOL FOR TARTAR-2;So;0;ON;;;;;N;;;;;\n1F741;ALCHEMICAL SYMBOL FOR QUICK LIME;So;0;ON;;;;;N;;;;;\n1F742;ALCHEMICAL SYMBOL FOR BORAX;So;0;ON;;;;;N;;;;;\n1F743;ALCHEMICAL SYMBOL FOR BORAX-2;So;0;ON;;;;;N;;;;;\n1F744;ALCHEMICAL SYMBOL FOR BORAX-3;So;0;ON;;;;;N;;;;;\n1F745;ALCHEMICAL SYMBOL FOR ALUM;So;0;ON;;;;;N;;;;;\n1F746;ALCHEMICAL SYMBOL FOR OIL;So;0;ON;;;;;N;;;;;\n1F747;ALCHEMICAL SYMBOL FOR SPIRIT;So;0;ON;;;;;N;;;;;\n1F748;ALCHEMICAL SYMBOL FOR TINCTURE;So;0;ON;;;;;N;;;;;\n1F749;ALCHEMICAL SYMBOL FOR GUM;So;0;ON;;;;;N;;;;;\n1F74A;ALCHEMICAL SYMBOL FOR WAX;So;0;ON;;;;;N;;;;;\n1F74B;ALCHEMICAL SYMBOL FOR POWDER;So;0;ON;;;;;N;;;;;\n1F74C;ALCHEMICAL SYMBOL FOR CALX;So;0;ON;;;;;N;;;;;\n1F74D;ALCHEMICAL SYMBOL FOR TUTTY;So;0;ON;;;;;N;;;;;\n1F74E;ALCHEMICAL SYMBOL FOR CAPUT MORTUUM;So;0;ON;;;;;N;;;;;\n1F74F;ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE;So;0;ON;;;;;N;;;;;\n1F750;ALCHEMICAL SYMBOL FOR CADUCEUS;So;0;ON;;;;;N;;;;;\n1F751;ALCHEMICAL SYMBOL FOR TRIDENT;So;0;ON;;;;;N;;;;;\n1F752;ALCHEMICAL SYMBOL FOR STARRED TRIDENT;So;0;ON;;;;;N;;;;;\n1F753;ALCHEMICAL SYMBOL FOR LODESTONE;So;0;ON;;;;;N;;;;;\n1F754;ALCHEMICAL SYMBOL FOR SOAP;So;0;ON;;;;;N;;;;;\n1F755;ALCHEMICAL SYMBOL FOR URINE;So;0;ON;;;;;N;;;;;\n1F756;ALCHEMICAL SYMBOL FOR HORSE DUNG;So;0;ON;;;;;N;;;;;\n1F757;ALCHEMICAL SYMBOL FOR ASHES;So;0;ON;;;;;N;;;;;\n1F758;ALCHEMICAL SYMBOL FOR POT ASHES;So;0;ON;;;;;N;;;;;\n1F759;ALCHEMICAL SYMBOL FOR BRICK;So;0;ON;;;;;N;;;;;\n1F75A;ALCHEMICAL SYMBOL FOR POWDERED BRICK;So;0;ON;;;;;N;;;;;\n1F75B;ALCHEMICAL SYMBOL FOR AMALGAM;So;0;ON;;;;;N;;;;;\n1F75C;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM;So;0;ON;;;;;N;;;;;\n1F75D;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2;So;0;ON;;;;;N;;;;;\n1F75E;ALCHEMICAL SYMBOL FOR SUBLIMATION;So;0;ON;;;;;N;;;;;\n1F75F;ALCHEMICAL SYMBOL FOR PRECIPITATE;So;0;ON;;;;;N;;;;;\n1F760;ALCHEMICAL SYMBOL FOR DISTILL;So;0;ON;;;;;N;;;;;\n1F761;ALCHEMICAL SYMBOL FOR DISSOLVE;So;0;ON;;;;;N;;;;;\n1F762;ALCHEMICAL SYMBOL FOR DISSOLVE-2;So;0;ON;;;;;N;;;;;\n1F763;ALCHEMICAL SYMBOL FOR PURIFY;So;0;ON;;;;;N;;;;;\n1F764;ALCHEMICAL SYMBOL FOR PUTREFACTION;So;0;ON;;;;;N;;;;;\n1F765;ALCHEMICAL SYMBOL FOR CRUCIBLE;So;0;ON;;;;;N;;;;;\n1F766;ALCHEMICAL SYMBOL FOR CRUCIBLE-2;So;0;ON;;;;;N;;;;;\n1F767;ALCHEMICAL SYMBOL FOR CRUCIBLE-3;So;0;ON;;;;;N;;;;;\n1F768;ALCHEMICAL SYMBOL FOR CRUCIBLE-4;So;0;ON;;;;;N;;;;;\n1F769;ALCHEMICAL SYMBOL FOR CRUCIBLE-5;So;0;ON;;;;;N;;;;;\n1F76A;ALCHEMICAL SYMBOL FOR ALEMBIC;So;0;ON;;;;;N;;;;;\n1F76B;ALCHEMICAL SYMBOL FOR BATH OF MARY;So;0;ON;;;;;N;;;;;\n1F76C;ALCHEMICAL SYMBOL FOR BATH OF VAPOURS;So;0;ON;;;;;N;;;;;\n1F76D;ALCHEMICAL SYMBOL FOR RETORT;So;0;ON;;;;;N;;;;;\n1F76E;ALCHEMICAL SYMBOL FOR HOUR;So;0;ON;;;;;N;;;;;\n1F76F;ALCHEMICAL SYMBOL FOR NIGHT;So;0;ON;;;;;N;;;;;\n1F770;ALCHEMICAL SYMBOL FOR DAY-NIGHT;So;0;ON;;;;;N;;;;;\n1F771;ALCHEMICAL SYMBOL FOR MONTH;So;0;ON;;;;;N;;;;;\n1F772;ALCHEMICAL SYMBOL FOR HALF DRAM;So;0;ON;;;;;N;;;;;\n1F773;ALCHEMICAL SYMBOL FOR HALF OUNCE;So;0;ON;;;;;N;;;;;\n1F774;LOT OF FORTUNE;So;0;ON;;;;;N;;;;;\n1F775;OCCULTATION;So;0;ON;;;;;N;;;;;\n1F776;LUNAR ECLIPSE;So;0;ON;;;;;N;;;;;\n1F777;VESTA FORM TWO;So;0;ON;;;;;N;;;;;\n1F778;ASTRAEA FORM TWO;So;0;ON;;;;;N;;;;;\n1F779;HYGIEA FORM TWO;So;0;ON;;;;;N;;;;;\n1F77A;PARTHENOPE FORM TWO;So;0;ON;;;;;N;;;;;\n1F77B;HAUMEA;So;0;ON;;;;;N;;;;;\n1F77C;MAKEMAKE;So;0;ON;;;;;N;;;;;\n1F77D;GONGGONG;So;0;ON;;;;;N;;;;;\n1F77E;QUAOAR;So;0;ON;;;;;N;;;;;\n1F77F;ORCUS;So;0;ON;;;;;N;;;;;\n1F780;BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;\n1F781;BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;\n1F782;BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;\n1F783;BLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;\n1F784;BLACK SLIGHTLY SMALL CIRCLE;So;0;ON;;;;;N;;;;;\n1F785;MEDIUM BOLD WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1F786;BOLD WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1F787;HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1F788;VERY HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1F789;EXTREMELY HEAVY WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1F78A;WHITE CIRCLE CONTAINING BLACK SMALL CIRCLE;So;0;ON;;;;;N;;;;;\n1F78B;ROUND TARGET;So;0;ON;;;;;N;;;;;\n1F78C;BLACK TINY SQUARE;So;0;ON;;;;;N;;;;;\n1F78D;BLACK SLIGHTLY SMALL SQUARE;So;0;ON;;;;;N;;;;;\n1F78E;LIGHT WHITE SQUARE;So;0;ON;;;;;N;;;;;\n1F78F;MEDIUM WHITE SQUARE;So;0;ON;;;;;N;;;;;\n1F790;BOLD WHITE SQUARE;So;0;ON;;;;;N;;;;;\n1F791;HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;;\n1F792;VERY HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;;\n1F793;EXTREMELY HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;;\n1F794;WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;\n1F795;WHITE SQUARE CONTAINING BLACK MEDIUM SQUARE;So;0;ON;;;;;N;;;;;\n1F796;SQUARE TARGET;So;0;ON;;;;;N;;;;;\n1F797;BLACK TINY DIAMOND;So;0;ON;;;;;N;;;;;\n1F798;BLACK VERY SMALL DIAMOND;So;0;ON;;;;;N;;;;;\n1F799;BLACK MEDIUM SMALL DIAMOND;So;0;ON;;;;;N;;;;;\n1F79A;WHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMOND;So;0;ON;;;;;N;;;;;\n1F79B;WHITE DIAMOND CONTAINING BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;\n1F79C;DIAMOND TARGET;So;0;ON;;;;;N;;;;;\n1F79D;BLACK TINY LOZENGE;So;0;ON;;;;;N;;;;;\n1F79E;BLACK VERY SMALL LOZENGE;So;0;ON;;;;;N;;;;;\n1F79F;BLACK MEDIUM SMALL LOZENGE;So;0;ON;;;;;N;;;;;\n1F7A0;WHITE LOZENGE CONTAINING BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;;\n1F7A1;THIN GREEK CROSS;So;0;ON;;;;;N;;;;;\n1F7A2;LIGHT GREEK CROSS;So;0;ON;;;;;N;;;;;\n1F7A3;MEDIUM GREEK CROSS;So;0;ON;;;;;N;;;;;\n1F7A4;BOLD GREEK CROSS;So;0;ON;;;;;N;;;;;\n1F7A5;VERY BOLD GREEK CROSS;So;0;ON;;;;;N;;;;;\n1F7A6;VERY HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;\n1F7A7;EXTREMELY HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;\n1F7A8;THIN SALTIRE;So;0;ON;;;;;N;;;;;\n1F7A9;LIGHT SALTIRE;So;0;ON;;;;;N;;;;;\n1F7AA;MEDIUM SALTIRE;So;0;ON;;;;;N;;;;;\n1F7AB;BOLD SALTIRE;So;0;ON;;;;;N;;;;;\n1F7AC;HEAVY SALTIRE;So;0;ON;;;;;N;;;;;\n1F7AD;VERY HEAVY SALTIRE;So;0;ON;;;;;N;;;;;\n1F7AE;EXTREMELY HEAVY SALTIRE;So;0;ON;;;;;N;;;;;\n1F7AF;LIGHT FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7B0;MEDIUM FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7B1;BOLD FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7B2;HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7B3;VERY HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7B4;EXTREMELY HEAVY FIVE SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7B5;LIGHT SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7B6;MEDIUM SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7B7;BOLD SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7B8;HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7B9;VERY HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7BA;EXTREMELY HEAVY SIX SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7BB;LIGHT EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7BC;MEDIUM EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7BD;BOLD EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7BE;HEAVY EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7BF;VERY HEAVY EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;\n1F7C0;LIGHT THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7C1;MEDIUM THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7C2;THREE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7C3;MEDIUM THREE POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;\n1F7C4;LIGHT FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7C5;MEDIUM FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7C6;FOUR POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7C7;MEDIUM FOUR POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;\n1F7C8;REVERSE LIGHT FOUR POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;\n1F7C9;LIGHT FIVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7CA;HEAVY FIVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7CB;MEDIUM SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7CC;HEAVY SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7CD;SIX POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;\n1F7CE;MEDIUM EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7CF;HEAVY EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7D0;VERY HEAVY EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7D1;HEAVY EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;\n1F7D2;LIGHT TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7D3;HEAVY TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;\n1F7D4;HEAVY TWELVE POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;\n1F7D5;CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;;\n1F7D6;NEGATIVE CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;;\n1F7D7;CIRCLED SQUARE;So;0;ON;;;;;N;;;;;\n1F7D8;NEGATIVE CIRCLED SQUARE;So;0;ON;;;;;N;;;;;\n1F7D9;NINE POINTED WHITE STAR;So;0;ON;;;;;N;;;;;\n1F7E0;LARGE ORANGE CIRCLE;So;0;ON;;;;;N;;;;;\n1F7E1;LARGE YELLOW CIRCLE;So;0;ON;;;;;N;;;;;\n1F7E2;LARGE GREEN CIRCLE;So;0;ON;;;;;N;;;;;\n1F7E3;LARGE PURPLE CIRCLE;So;0;ON;;;;;N;;;;;\n1F7E4;LARGE BROWN CIRCLE;So;0;ON;;;;;N;;;;;\n1F7E5;LARGE RED SQUARE;So;0;ON;;;;;N;;;;;\n1F7E6;LARGE BLUE SQUARE;So;0;ON;;;;;N;;;;;\n1F7E7;LARGE ORANGE SQUARE;So;0;ON;;;;;N;;;;;\n1F7E8;LARGE YELLOW SQUARE;So;0;ON;;;;;N;;;;;\n1F7E9;LARGE GREEN SQUARE;So;0;ON;;;;;N;;;;;\n1F7EA;LARGE PURPLE SQUARE;So;0;ON;;;;;N;;;;;\n1F7EB;LARGE BROWN SQUARE;So;0;ON;;;;;N;;;;;\n1F7F0;HEAVY EQUALS SIGN;So;0;ON;;;;;N;;;;;\n1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F803;DOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F804;LEFTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F805;UPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F806;RIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F807;DOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F808;LEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F809;UPWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F80A;RIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F80B;DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F810;LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F811;UPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F812;RIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F813;DOWNWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F814;LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F815;UPWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F816;RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F817;DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F818;HEAVY LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F819;HEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F81A;HEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F81B;HEAVY DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F81C;HEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F81D;HEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F81E;HEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F81F;HEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F820;LEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;;\n1F821;UPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;;\n1F822;RIGHTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;;\n1F823;DOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT;So;0;ON;;;;;N;;;;;\n1F824;LEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;;\n1F825;UPWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;;\n1F826;RIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;;\n1F827;DOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT;So;0;ON;;;;;N;;;;;\n1F828;LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;;\n1F829;UPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;;\n1F82A;RIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;;\n1F82B;DOWNWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT;So;0;ON;;;;;N;;;;;\n1F82C;LEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;;\n1F82D;UPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;;\n1F82E;RIGHTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;;\n1F82F;DOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT;So;0;ON;;;;;N;;;;;\n1F830;LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;;\n1F831;UPWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;;\n1F832;RIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;;\n1F833;DOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT;So;0;ON;;;;;N;;;;;\n1F834;LEFTWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;;\n1F835;UPWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;;\n1F836;RIGHTWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;;\n1F837;DOWNWARDS FINGER-POST ARROW;So;0;ON;;;;;N;;;;;\n1F838;LEFTWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;;\n1F839;UPWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;;\n1F83A;RIGHTWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;;\n1F83B;DOWNWARDS SQUARED ARROW;So;0;ON;;;;;N;;;;;\n1F83C;LEFTWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;;\n1F83D;UPWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;;\n1F83E;RIGHTWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;;\n1F83F;DOWNWARDS COMPRESSED ARROW;So;0;ON;;;;;N;;;;;\n1F840;LEFTWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;;\n1F841;UPWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;;\n1F842;RIGHTWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;;\n1F843;DOWNWARDS HEAVY COMPRESSED ARROW;So;0;ON;;;;;N;;;;;\n1F844;LEFTWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;;\n1F845;UPWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;;\n1F846;RIGHTWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;;\n1F847;DOWNWARDS HEAVY ARROW;So;0;ON;;;;;N;;;;;\n1F850;LEFTWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;\n1F851;UPWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;\n1F852;RIGHTWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;\n1F853;DOWNWARDS SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;\n1F854;NORTH WEST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;\n1F855;NORTH EAST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;\n1F856;SOUTH EAST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;\n1F857;SOUTH WEST SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;\n1F858;LEFT RIGHT SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;\n1F859;UP DOWN SANS-SERIF ARROW;So;0;ON;;;;;N;;;;;\n1F860;WIDE-HEADED LEFTWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;\n1F861;WIDE-HEADED UPWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;\n1F862;WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;\n1F863;WIDE-HEADED DOWNWARDS LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;\n1F864;WIDE-HEADED NORTH WEST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;\n1F865;WIDE-HEADED NORTH EAST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;\n1F866;WIDE-HEADED SOUTH EAST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;\n1F867;WIDE-HEADED SOUTH WEST LIGHT BARB ARROW;So;0;ON;;;;;N;;;;;\n1F868;WIDE-HEADED LEFTWARDS BARB ARROW;So;0;ON;;;;;N;;;;;\n1F869;WIDE-HEADED UPWARDS BARB ARROW;So;0;ON;;;;;N;;;;;\n1F86A;WIDE-HEADED RIGHTWARDS BARB ARROW;So;0;ON;;;;;N;;;;;\n1F86B;WIDE-HEADED DOWNWARDS BARB ARROW;So;0;ON;;;;;N;;;;;\n1F86C;WIDE-HEADED NORTH WEST BARB ARROW;So;0;ON;;;;;N;;;;;\n1F86D;WIDE-HEADED NORTH EAST BARB ARROW;So;0;ON;;;;;N;;;;;\n1F86E;WIDE-HEADED SOUTH EAST BARB ARROW;So;0;ON;;;;;N;;;;;\n1F86F;WIDE-HEADED SOUTH WEST BARB ARROW;So;0;ON;;;;;N;;;;;\n1F870;WIDE-HEADED LEFTWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;\n1F871;WIDE-HEADED UPWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;\n1F872;WIDE-HEADED RIGHTWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;\n1F873;WIDE-HEADED DOWNWARDS MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;\n1F874;WIDE-HEADED NORTH WEST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;\n1F875;WIDE-HEADED NORTH EAST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;\n1F876;WIDE-HEADED SOUTH EAST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;\n1F877;WIDE-HEADED SOUTH WEST MEDIUM BARB ARROW;So;0;ON;;;;;N;;;;;\n1F878;WIDE-HEADED LEFTWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F879;WIDE-HEADED UPWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F87A;WIDE-HEADED RIGHTWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F87B;WIDE-HEADED DOWNWARDS HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F87C;WIDE-HEADED NORTH WEST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F87D;WIDE-HEADED NORTH EAST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F87E;WIDE-HEADED SOUTH EAST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F87F;WIDE-HEADED SOUTH WEST HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F880;WIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F881;WIDE-HEADED UPWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F882;WIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F883;WIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F884;WIDE-HEADED NORTH WEST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F885;WIDE-HEADED NORTH EAST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F886;WIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F887;WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW;So;0;ON;;;;;N;;;;;\n1F890;LEFTWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F891;UPWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F892;RIGHTWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F893;DOWNWARDS TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F894;LEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F895;UPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F896;RIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F897;DOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;\n1F898;LEFTWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;;\n1F899;UPWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;;\n1F89A;RIGHTWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;;\n1F89B;DOWNWARDS ARROW WITH NOTCHED TAIL;So;0;ON;;;;;N;;;;;\n1F89C;HEAVY ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;;\n1F89D;HEAVY ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;;\n1F89E;HEAVY ARROW SHAFT WIDTH ONE HALF;So;0;ON;;;;;N;;;;;\n1F89F;HEAVY ARROW SHAFT WIDTH ONE THIRD;So;0;ON;;;;;N;;;;;\n1F8A0;LEFTWARDS BOTTOM-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;\n1F8A1;RIGHTWARDS BOTTOM SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;\n1F8A2;LEFTWARDS TOP SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;\n1F8A3;RIGHTWARDS TOP SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;\n1F8A4;LEFTWARDS LEFT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;\n1F8A5;RIGHTWARDS RIGHT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;\n1F8A6;LEFTWARDS RIGHT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;\n1F8A7;RIGHTWARDS LEFT-SHADED WHITE ARROW;So;0;ON;;;;;N;;;;;\n1F8A8;LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;;\n1F8A9;RIGHTWARDS BACK-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;;\n1F8AA;LEFTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;;\n1F8AB;RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;;\n1F8AC;WHITE ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;;\n1F8AD;WHITE ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;;\n1F8B0;ARROW POINTING UPWARDS THEN NORTH WEST;So;0;ON;;;;;N;;;;;\n1F8B1;ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST;So;0;ON;;;;;N;;;;;\n1F8B2;RIGHTWARDS ARROW WITH LOWER HOOK;So;0;ON;;;;;N;;;;;\n1F8B3;DOWNWARDS BLACK ARROW TO BAR;So;0;ON;;;;;N;;;;;\n1F8B4;NEGATIVE SQUARED LEFTWARDS ARROW;So;0;ON;;;;;N;;;;;\n1F8B5;NEGATIVE SQUARED UPWARDS ARROW;So;0;ON;;;;;N;;;;;\n1F8B6;NEGATIVE SQUARED RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;;\n1F8B7;NEGATIVE SQUARED DOWNWARDS ARROW;So;0;ON;;;;;N;;;;;\n1F8B8;NORTH WEST ARROW FROM BAR;So;0;ON;;;;;N;;;;;\n1F8B9;NORTH EAST ARROW FROM BAR;So;0;ON;;;;;N;;;;;\n1F8BA;SOUTH EAST ARROW FROM BAR;So;0;ON;;;;;N;;;;;\n1F8BB;SOUTH WEST ARROW FROM BAR;So;0;ON;;;;;N;;;;;\n1F8C0;LEFTWARDS ARROW FROM DOWNWARDS ARROW;So;0;ON;;;;;N;;;;;\n1F8C1;RIGHTWARDS ARROW FROM DOWNWARDS ARROW;So;0;ON;;;;;N;;;;;\n1F8D0;LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;\n1F8D1;LONG RIGHTWARDS HARPOON OVER LONG LEFTWARDS HARPOON;Sm;0;ON;;;;;N;;;;;\n1F8D2;LONG RIGHTWARDS HARPOON ABOVE SHORT LEFTWARDS HARPOON;Sm;0;ON;;;;;N;;;;;\n1F8D3;SHORT RIGHTWARDS HARPOON ABOVE LONG LEFTWARDS HARPOON;Sm;0;ON;;;;;N;;;;;\n1F8D4;LONG LEFTWARDS HARPOON ABOVE SHORT RIGHTWARDS HARPOON;Sm;0;ON;;;;;N;;;;;\n1F8D5;SHORT LEFTWARDS HARPOON ABOVE LONG RIGHTWARDS HARPOON;Sm;0;ON;;;;;N;;;;;\n1F8D6;LONG RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;\n1F8D7;LONG RIGHTWARDS ARROW WITH DOUBLE SLASH;Sm;0;ON;;;;;N;;;;;\n1F8D8;LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE;Sm;0;ON;;;;;N;;;;;\n1F900;CIRCLED CROSS FORMEE WITH FOUR DOTS;So;0;ON;;;;;N;;;;;\n1F901;CIRCLED CROSS FORMEE WITH TWO DOTS;So;0;ON;;;;;N;;;;;\n1F902;CIRCLED CROSS FORMEE;So;0;ON;;;;;N;;;;;\n1F903;LEFT HALF CIRCLE WITH FOUR DOTS;So;0;ON;;;;;N;;;;;\n1F904;LEFT HALF CIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;;\n1F905;LEFT HALF CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;;\n1F906;LEFT HALF CIRCLE WITH DOT;So;0;ON;;;;;N;;;;;\n1F907;LEFT HALF CIRCLE;So;0;ON;;;;;N;;;;;\n1F908;DOWNWARD FACING HOOK;So;0;ON;;;;;N;;;;;\n1F909;DOWNWARD FACING NOTCHED HOOK;So;0;ON;;;;;N;;;;;\n1F90A;DOWNWARD FACING HOOK WITH DOT;So;0;ON;;;;;N;;;;;\n1F90B;DOWNWARD FACING NOTCHED HOOK WITH DOT;So;0;ON;;;;;N;;;;;\n1F90C;PINCHED FINGERS;So;0;ON;;;;;N;;;;;\n1F90D;WHITE HEART;So;0;ON;;;;;N;;;;;\n1F90E;BROWN HEART;So;0;ON;;;;;N;;;;;\n1F90F;PINCHING HAND;So;0;ON;;;;;N;;;;;\n1F910;ZIPPER-MOUTH FACE;So;0;ON;;;;;N;;;;;\n1F911;MONEY-MOUTH FACE;So;0;ON;;;;;N;;;;;\n1F912;FACE WITH THERMOMETER;So;0;ON;;;;;N;;;;;\n1F913;NERD FACE;So;0;ON;;;;;N;;;;;\n1F914;THINKING FACE;So;0;ON;;;;;N;;;;;\n1F915;FACE WITH HEAD-BANDAGE;So;0;ON;;;;;N;;;;;\n1F916;ROBOT FACE;So;0;ON;;;;;N;;;;;\n1F917;HUGGING FACE;So;0;ON;;;;;N;;;;;\n1F918;SIGN OF THE HORNS;So;0;ON;;;;;N;;;;;\n1F919;CALL ME HAND;So;0;ON;;;;;N;;;;;\n1F91A;RAISED BACK OF HAND;So;0;ON;;;;;N;;;;;\n1F91B;LEFT-FACING FIST;So;0;ON;;;;;N;;;;;\n1F91C;RIGHT-FACING FIST;So;0;ON;;;;;N;;;;;\n1F91D;HANDSHAKE;So;0;ON;;;;;N;;;;;\n1F91E;HAND WITH INDEX AND MIDDLE FINGERS CROSSED;So;0;ON;;;;;N;;;;;\n1F91F;I LOVE YOU HAND SIGN;So;0;ON;;;;;N;;;;;\n1F920;FACE WITH COWBOY HAT;So;0;ON;;;;;N;;;;;\n1F921;CLOWN FACE;So;0;ON;;;;;N;;;;;\n1F922;NAUSEATED FACE;So;0;ON;;;;;N;;;;;\n1F923;ROLLING ON THE FLOOR LAUGHING;So;0;ON;;;;;N;;;;;\n1F924;DROOLING FACE;So;0;ON;;;;;N;;;;;\n1F925;LYING FACE;So;0;ON;;;;;N;;;;;\n1F926;FACE PALM;So;0;ON;;;;;N;;;;;\n1F927;SNEEZING FACE;So;0;ON;;;;;N;;;;;\n1F928;FACE WITH ONE EYEBROW RAISED;So;0;ON;;;;;N;;;;;\n1F929;GRINNING FACE WITH STAR EYES;So;0;ON;;;;;N;;;;;\n1F92A;GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE;So;0;ON;;;;;N;;;;;\n1F92B;FACE WITH FINGER COVERING CLOSED LIPS;So;0;ON;;;;;N;;;;;\n1F92C;SERIOUS FACE WITH SYMBOLS COVERING MOUTH;So;0;ON;;;;;N;;;;;\n1F92D;SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH;So;0;ON;;;;;N;;;;;\n1F92E;FACE WITH OPEN MOUTH VOMITING;So;0;ON;;;;;N;;;;;\n1F92F;SHOCKED FACE WITH EXPLODING HEAD;So;0;ON;;;;;N;;;;;\n1F930;PREGNANT WOMAN;So;0;ON;;;;;N;;;;;\n1F931;BREAST-FEEDING;So;0;ON;;;;;N;;;;;\n1F932;PALMS UP TOGETHER;So;0;ON;;;;;N;;;;;\n1F933;SELFIE;So;0;ON;;;;;N;;;;;\n1F934;PRINCE;So;0;ON;;;;;N;;;;;\n1F935;MAN IN TUXEDO;So;0;ON;;;;;N;;;;;\n1F936;MOTHER CHRISTMAS;So;0;ON;;;;;N;;;;;\n1F937;SHRUG;So;0;ON;;;;;N;;;;;\n1F938;PERSON DOING CARTWHEEL;So;0;ON;;;;;N;;;;;\n1F939;JUGGLING;So;0;ON;;;;;N;;;;;\n1F93A;FENCER;So;0;ON;;;;;N;;;;;\n1F93B;MODERN PENTATHLON;So;0;ON;;;;;N;;;;;\n1F93C;WRESTLERS;So;0;ON;;;;;N;;;;;\n1F93D;WATER POLO;So;0;ON;;;;;N;;;;;\n1F93E;HANDBALL;So;0;ON;;;;;N;;;;;\n1F93F;DIVING MASK;So;0;ON;;;;;N;;;;;\n1F940;WILTED FLOWER;So;0;ON;;;;;N;;;;;\n1F941;DRUM WITH DRUMSTICKS;So;0;ON;;;;;N;;;;;\n1F942;CLINKING GLASSES;So;0;ON;;;;;N;;;;;\n1F943;TUMBLER GLASS;So;0;ON;;;;;N;;;;;\n1F944;SPOON;So;0;ON;;;;;N;;;;;\n1F945;GOAL NET;So;0;ON;;;;;N;;;;;\n1F946;RIFLE;So;0;ON;;;;;N;;;;;\n1F947;FIRST PLACE MEDAL;So;0;ON;;;;;N;;;;;\n1F948;SECOND PLACE MEDAL;So;0;ON;;;;;N;;;;;\n1F949;THIRD PLACE MEDAL;So;0;ON;;;;;N;;;;;\n1F94A;BOXING GLOVE;So;0;ON;;;;;N;;;;;\n1F94B;MARTIAL ARTS UNIFORM;So;0;ON;;;;;N;;;;;\n1F94C;CURLING STONE;So;0;ON;;;;;N;;;;;\n1F94D;LACROSSE STICK AND BALL;So;0;ON;;;;;N;;;;;\n1F94E;SOFTBALL;So;0;ON;;;;;N;;;;;\n1F94F;FLYING DISC;So;0;ON;;;;;N;;;;;\n1F950;CROISSANT;So;0;ON;;;;;N;;;;;\n1F951;AVOCADO;So;0;ON;;;;;N;;;;;\n1F952;CUCUMBER;So;0;ON;;;;;N;;;;;\n1F953;BACON;So;0;ON;;;;;N;;;;;\n1F954;POTATO;So;0;ON;;;;;N;;;;;\n1F955;CARROT;So;0;ON;;;;;N;;;;;\n1F956;BAGUETTE BREAD;So;0;ON;;;;;N;;;;;\n1F957;GREEN SALAD;So;0;ON;;;;;N;;;;;\n1F958;SHALLOW PAN OF FOOD;So;0;ON;;;;;N;;;;;\n1F959;STUFFED FLATBREAD;So;0;ON;;;;;N;;;;;\n1F95A;EGG;So;0;ON;;;;;N;;;;;\n1F95B;GLASS OF MILK;So;0;ON;;;;;N;;;;;\n1F95C;PEANUTS;So;0;ON;;;;;N;;;;;\n1F95D;KIWIFRUIT;So;0;ON;;;;;N;;;;;\n1F95E;PANCAKES;So;0;ON;;;;;N;;;;;\n1F95F;DUMPLING;So;0;ON;;;;;N;;;;;\n1F960;FORTUNE COOKIE;So;0;ON;;;;;N;;;;;\n1F961;TAKEOUT BOX;So;0;ON;;;;;N;;;;;\n1F962;CHOPSTICKS;So;0;ON;;;;;N;;;;;\n1F963;BOWL WITH SPOON;So;0;ON;;;;;N;;;;;\n1F964;CUP WITH STRAW;So;0;ON;;;;;N;;;;;\n1F965;COCONUT;So;0;ON;;;;;N;;;;;\n1F966;BROCCOLI;So;0;ON;;;;;N;;;;;\n1F967;PIE;So;0;ON;;;;;N;;;;;\n1F968;PRETZEL;So;0;ON;;;;;N;;;;;\n1F969;CUT OF MEAT;So;0;ON;;;;;N;;;;;\n1F96A;SANDWICH;So;0;ON;;;;;N;;;;;\n1F96B;CANNED FOOD;So;0;ON;;;;;N;;;;;\n1F96C;LEAFY GREEN;So;0;ON;;;;;N;;;;;\n1F96D;MANGO;So;0;ON;;;;;N;;;;;\n1F96E;MOON CAKE;So;0;ON;;;;;N;;;;;\n1F96F;BAGEL;So;0;ON;;;;;N;;;;;\n1F970;SMILING FACE WITH SMILING EYES AND THREE HEARTS;So;0;ON;;;;;N;;;;;\n1F971;YAWNING FACE;So;0;ON;;;;;N;;;;;\n1F972;SMILING FACE WITH TEAR;So;0;ON;;;;;N;;;;;\n1F973;FACE WITH PARTY HORN AND PARTY HAT;So;0;ON;;;;;N;;;;;\n1F974;FACE WITH UNEVEN EYES AND WAVY MOUTH;So;0;ON;;;;;N;;;;;\n1F975;OVERHEATED FACE;So;0;ON;;;;;N;;;;;\n1F976;FREEZING FACE;So;0;ON;;;;;N;;;;;\n1F977;NINJA;So;0;ON;;;;;N;;;;;\n1F978;DISGUISED FACE;So;0;ON;;;;;N;;;;;\n1F979;FACE HOLDING BACK TEARS;So;0;ON;;;;;N;;;;;\n1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;;\n1F97B;SARI;So;0;ON;;;;;N;;;;;\n1F97C;LAB COAT;So;0;ON;;;;;N;;;;;\n1F97D;GOGGLES;So;0;ON;;;;;N;;;;;\n1F97E;HIKING BOOT;So;0;ON;;;;;N;;;;;\n1F97F;FLAT SHOE;So;0;ON;;;;;N;;;;;\n1F980;CRAB;So;0;ON;;;;;N;;;;;\n1F981;LION FACE;So;0;ON;;;;;N;;;;;\n1F982;SCORPION;So;0;ON;;;;;N;;;;;\n1F983;TURKEY;So;0;ON;;;;;N;;;;;\n1F984;UNICORN FACE;So;0;ON;;;;;N;;;;;\n1F985;EAGLE;So;0;ON;;;;;N;;;;;\n1F986;DUCK;So;0;ON;;;;;N;;;;;\n1F987;BAT;So;0;ON;;;;;N;;;;;\n1F988;SHARK;So;0;ON;;;;;N;;;;;\n1F989;OWL;So;0;ON;;;;;N;;;;;\n1F98A;FOX FACE;So;0;ON;;;;;N;;;;;\n1F98B;BUTTERFLY;So;0;ON;;;;;N;;;;;\n1F98C;DEER;So;0;ON;;;;;N;;;;;\n1F98D;GORILLA;So;0;ON;;;;;N;;;;;\n1F98E;LIZARD;So;0;ON;;;;;N;;;;;\n1F98F;RHINOCEROS;So;0;ON;;;;;N;;;;;\n1F990;SHRIMP;So;0;ON;;;;;N;;;;;\n1F991;SQUID;So;0;ON;;;;;N;;;;;\n1F992;GIRAFFE FACE;So;0;ON;;;;;N;;;;;\n1F993;ZEBRA FACE;So;0;ON;;;;;N;;;;;\n1F994;HEDGEHOG;So;0;ON;;;;;N;;;;;\n1F995;SAUROPOD;So;0;ON;;;;;N;;;;;\n1F996;T-REX;So;0;ON;;;;;N;;;;;\n1F997;CRICKET;So;0;ON;;;;;N;;;;;\n1F998;KANGAROO;So;0;ON;;;;;N;;;;;\n1F999;LLAMA;So;0;ON;;;;;N;;;;;\n1F99A;PEACOCK;So;0;ON;;;;;N;;;;;\n1F99B;HIPPOPOTAMUS;So;0;ON;;;;;N;;;;;\n1F99C;PARROT;So;0;ON;;;;;N;;;;;\n1F99D;RACCOON;So;0;ON;;;;;N;;;;;\n1F99E;LOBSTER;So;0;ON;;;;;N;;;;;\n1F99F;MOSQUITO;So;0;ON;;;;;N;;;;;\n1F9A0;MICROBE;So;0;ON;;;;;N;;;;;\n1F9A1;BADGER;So;0;ON;;;;;N;;;;;\n1F9A2;SWAN;So;0;ON;;;;;N;;;;;\n1F9A3;MAMMOTH;So;0;ON;;;;;N;;;;;\n1F9A4;DODO;So;0;ON;;;;;N;;;;;\n1F9A5;SLOTH;So;0;ON;;;;;N;;;;;\n1F9A6;OTTER;So;0;ON;;;;;N;;;;;\n1F9A7;ORANGUTAN;So;0;ON;;;;;N;;;;;\n1F9A8;SKUNK;So;0;ON;;;;;N;;;;;\n1F9A9;FLAMINGO;So;0;ON;;;;;N;;;;;\n1F9AA;OYSTER;So;0;ON;;;;;N;;;;;\n1F9AB;BEAVER;So;0;ON;;;;;N;;;;;\n1F9AC;BISON;So;0;ON;;;;;N;;;;;\n1F9AD;SEAL;So;0;ON;;;;;N;;;;;\n1F9AE;GUIDE DOG;So;0;ON;;;;;N;;;;;\n1F9AF;PROBING CANE;So;0;ON;;;;;N;;;;;\n1F9B0;EMOJI COMPONENT RED HAIR;So;0;ON;;;;;N;;;;;\n1F9B1;EMOJI COMPONENT CURLY HAIR;So;0;ON;;;;;N;;;;;\n1F9B2;EMOJI COMPONENT BALD;So;0;ON;;;;;N;;;;;\n1F9B3;EMOJI COMPONENT WHITE HAIR;So;0;ON;;;;;N;;;;;\n1F9B4;BONE;So;0;ON;;;;;N;;;;;\n1F9B5;LEG;So;0;ON;;;;;N;;;;;\n1F9B6;FOOT;So;0;ON;;;;;N;;;;;\n1F9B7;TOOTH;So;0;ON;;;;;N;;;;;\n1F9B8;SUPERHERO;So;0;ON;;;;;N;;;;;\n1F9B9;SUPERVILLAIN;So;0;ON;;;;;N;;;;;\n1F9BA;SAFETY VEST;So;0;ON;;;;;N;;;;;\n1F9BB;EAR WITH HEARING AID;So;0;ON;;;;;N;;;;;\n1F9BC;MOTORIZED WHEELCHAIR;So;0;ON;;;;;N;;;;;\n1F9BD;MANUAL WHEELCHAIR;So;0;ON;;;;;N;;;;;\n1F9BE;MECHANICAL ARM;So;0;ON;;;;;N;;;;;\n1F9BF;MECHANICAL LEG;So;0;ON;;;;;N;;;;;\n1F9C0;CHEESE WEDGE;So;0;ON;;;;;N;;;;;\n1F9C1;CUPCAKE;So;0;ON;;;;;N;;;;;\n1F9C2;SALT SHAKER;So;0;ON;;;;;N;;;;;\n1F9C3;BEVERAGE BOX;So;0;ON;;;;;N;;;;;\n1F9C4;GARLIC;So;0;ON;;;;;N;;;;;\n1F9C5;ONION;So;0;ON;;;;;N;;;;;\n1F9C6;FALAFEL;So;0;ON;;;;;N;;;;;\n1F9C7;WAFFLE;So;0;ON;;;;;N;;;;;\n1F9C8;BUTTER;So;0;ON;;;;;N;;;;;\n1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;;\n1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;;\n1F9CB;BUBBLE TEA;So;0;ON;;;;;N;;;;;\n1F9CC;TROLL;So;0;ON;;;;;N;;;;;\n1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;;\n1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;;\n1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;;\n1F9D0;FACE WITH MONOCLE;So;0;ON;;;;;N;;;;;\n1F9D1;ADULT;So;0;ON;;;;;N;;;;;\n1F9D2;CHILD;So;0;ON;;;;;N;;;;;\n1F9D3;OLDER ADULT;So;0;ON;;;;;N;;;;;\n1F9D4;BEARDED PERSON;So;0;ON;;;;;N;;;;;\n1F9D5;PERSON WITH HEADSCARF;So;0;ON;;;;;N;;;;;\n1F9D6;PERSON IN STEAMY ROOM;So;0;ON;;;;;N;;;;;\n1F9D7;PERSON CLIMBING;So;0;ON;;;;;N;;;;;\n1F9D8;PERSON IN LOTUS POSITION;So;0;ON;;;;;N;;;;;\n1F9D9;MAGE;So;0;ON;;;;;N;;;;;\n1F9DA;FAIRY;So;0;ON;;;;;N;;;;;\n1F9DB;VAMPIRE;So;0;ON;;;;;N;;;;;\n1F9DC;MERPERSON;So;0;ON;;;;;N;;;;;\n1F9DD;ELF;So;0;ON;;;;;N;;;;;\n1F9DE;GENIE;So;0;ON;;;;;N;;;;;\n1F9DF;ZOMBIE;So;0;ON;;;;;N;;;;;\n1F9E0;BRAIN;So;0;ON;;;;;N;;;;;\n1F9E1;ORANGE HEART;So;0;ON;;;;;N;;;;;\n1F9E2;BILLED CAP;So;0;ON;;;;;N;;;;;\n1F9E3;SCARF;So;0;ON;;;;;N;;;;;\n1F9E4;GLOVES;So;0;ON;;;;;N;;;;;\n1F9E5;COAT;So;0;ON;;;;;N;;;;;\n1F9E6;SOCKS;So;0;ON;;;;;N;;;;;\n1F9E7;RED GIFT ENVELOPE;So;0;ON;;;;;N;;;;;\n1F9E8;FIRECRACKER;So;0;ON;;;;;N;;;;;\n1F9E9;JIGSAW PUZZLE PIECE;So;0;ON;;;;;N;;;;;\n1F9EA;TEST TUBE;So;0;ON;;;;;N;;;;;\n1F9EB;PETRI DISH;So;0;ON;;;;;N;;;;;\n1F9EC;DNA DOUBLE HELIX;So;0;ON;;;;;N;;;;;\n1F9ED;COMPASS;So;0;ON;;;;;N;;;;;\n1F9EE;ABACUS;So;0;ON;;;;;N;;;;;\n1F9EF;FIRE EXTINGUISHER;So;0;ON;;;;;N;;;;;\n1F9F0;TOOLBOX;So;0;ON;;;;;N;;;;;\n1F9F1;BRICK;So;0;ON;;;;;N;;;;;\n1F9F2;MAGNET;So;0;ON;;;;;N;;;;;\n1F9F3;LUGGAGE;So;0;ON;;;;;N;;;;;\n1F9F4;LOTION BOTTLE;So;0;ON;;;;;N;;;;;\n1F9F5;SPOOL OF THREAD;So;0;ON;;;;;N;;;;;\n1F9F6;BALL OF YARN;So;0;ON;;;;;N;;;;;\n1F9F7;SAFETY PIN;So;0;ON;;;;;N;;;;;\n1F9F8;TEDDY BEAR;So;0;ON;;;;;N;;;;;\n1F9F9;BROOM;So;0;ON;;;;;N;;;;;\n1F9FA;BASKET;So;0;ON;;;;;N;;;;;\n1F9FB;ROLL OF PAPER;So;0;ON;;;;;N;;;;;\n1F9FC;BAR OF SOAP;So;0;ON;;;;;N;;;;;\n1F9FD;SPONGE;So;0;ON;;;;;N;;;;;\n1F9FE;RECEIPT;So;0;ON;;;;;N;;;;;\n1F9FF;NAZAR AMULET;So;0;ON;;;;;N;;;;;\n1FA00;NEUTRAL CHESS KING;So;0;ON;;;;;N;;;;;\n1FA01;NEUTRAL CHESS QUEEN;So;0;ON;;;;;N;;;;;\n1FA02;NEUTRAL CHESS ROOK;So;0;ON;;;;;N;;;;;\n1FA03;NEUTRAL CHESS BISHOP;So;0;ON;;;;;N;;;;;\n1FA04;NEUTRAL CHESS KNIGHT;So;0;ON;;;;;N;;;;;\n1FA05;NEUTRAL CHESS PAWN;So;0;ON;;;;;N;;;;;\n1FA06;WHITE CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;\n1FA07;BLACK CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;\n1FA08;NEUTRAL CHESS KNIGHT ROTATED FORTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;\n1FA09;WHITE CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA0A;WHITE CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA0B;WHITE CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA0C;WHITE CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA0D;WHITE CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA0E;WHITE CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA0F;BLACK CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA10;BLACK CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA11;BLACK CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA12;BLACK CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA13;BLACK CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA14;BLACK CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA15;NEUTRAL CHESS KING ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA16;NEUTRAL CHESS QUEEN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA17;NEUTRAL CHESS ROOK ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA18;NEUTRAL CHESS BISHOP ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA19;NEUTRAL CHESS KNIGHT ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA1A;NEUTRAL CHESS PAWN ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA1B;WHITE CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;\n1FA1C;BLACK CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;\n1FA1D;NEUTRAL CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;\n1FA1E;WHITE CHESS TURNED KING;So;0;ON;;;;;N;;;;;\n1FA1F;WHITE CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;;\n1FA20;WHITE CHESS TURNED ROOK;So;0;ON;;;;;N;;;;;\n1FA21;WHITE CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;;\n1FA22;WHITE CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;;\n1FA23;WHITE CHESS TURNED PAWN;So;0;ON;;;;;N;;;;;\n1FA24;BLACK CHESS TURNED KING;So;0;ON;;;;;N;;;;;\n1FA25;BLACK CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;;\n1FA26;BLACK CHESS TURNED ROOK;So;0;ON;;;;;N;;;;;\n1FA27;BLACK CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;;\n1FA28;BLACK CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;;\n1FA29;BLACK CHESS TURNED PAWN;So;0;ON;;;;;N;;;;;\n1FA2A;NEUTRAL CHESS TURNED KING;So;0;ON;;;;;N;;;;;\n1FA2B;NEUTRAL CHESS TURNED QUEEN;So;0;ON;;;;;N;;;;;\n1FA2C;NEUTRAL CHESS TURNED ROOK;So;0;ON;;;;;N;;;;;\n1FA2D;NEUTRAL CHESS TURNED BISHOP;So;0;ON;;;;;N;;;;;\n1FA2E;NEUTRAL CHESS TURNED KNIGHT;So;0;ON;;;;;N;;;;;\n1FA2F;NEUTRAL CHESS TURNED PAWN;So;0;ON;;;;;N;;;;;\n1FA30;WHITE CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;\n1FA31;BLACK CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;\n1FA32;NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES;So;0;ON;;;;;N;;;;;\n1FA33;WHITE CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA34;WHITE CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA35;WHITE CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA36;WHITE CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA37;WHITE CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA38;WHITE CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA39;BLACK CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA3A;BLACK CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA3B;BLACK CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA3C;BLACK CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA3D;BLACK CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA3E;BLACK CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA3F;NEUTRAL CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA40;NEUTRAL CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA41;NEUTRAL CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA42;NEUTRAL CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA43;NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA44;NEUTRAL CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES;So;0;ON;;;;;N;;;;;\n1FA45;WHITE CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;;\n1FA46;BLACK CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;;\n1FA47;NEUTRAL CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES;So;0;ON;;;;;N;;;;;\n1FA48;WHITE CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;;\n1FA49;BLACK CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;;\n1FA4A;NEUTRAL CHESS EQUIHOPPER;So;0;ON;;;;;N;;;;;\n1FA4B;WHITE CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA4C;BLACK CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA4D;NEUTRAL CHESS EQUIHOPPER ROTATED NINETY DEGREES;So;0;ON;;;;;N;;;;;\n1FA4E;WHITE CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;;\n1FA4F;WHITE CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;;\n1FA50;WHITE CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;;\n1FA51;BLACK CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;;\n1FA52;BLACK CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;;\n1FA53;BLACK CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;;\n1FA54;WHITE CHESS FERZ;So;0;ON;;;;;N;;;;;\n1FA55;WHITE CHESS ALFIL;So;0;ON;;;;;N;;;;;\n1FA56;BLACK CHESS FERZ;So;0;ON;;;;;N;;;;;\n1FA57;BLACK CHESS ALFIL;So;0;ON;;;;;N;;;;;\n1FA60;XIANGQI RED GENERAL;So;0;ON;;;;;N;;;;;\n1FA61;XIANGQI RED MANDARIN;So;0;ON;;;;;N;;;;;\n1FA62;XIANGQI RED ELEPHANT;So;0;ON;;;;;N;;;;;\n1FA63;XIANGQI RED HORSE;So;0;ON;;;;;N;;;;;\n1FA64;XIANGQI RED CHARIOT;So;0;ON;;;;;N;;;;;\n1FA65;XIANGQI RED CANNON;So;0;ON;;;;;N;;;;;\n1FA66;XIANGQI RED SOLDIER;So;0;ON;;;;;N;;;;;\n1FA67;XIANGQI BLACK GENERAL;So;0;ON;;;;;N;;;;;\n1FA68;XIANGQI BLACK MANDARIN;So;0;ON;;;;;N;;;;;\n1FA69;XIANGQI BLACK ELEPHANT;So;0;ON;;;;;N;;;;;\n1FA6A;XIANGQI BLACK HORSE;So;0;ON;;;;;N;;;;;\n1FA6B;XIANGQI BLACK CHARIOT;So;0;ON;;;;;N;;;;;\n1FA6C;XIANGQI BLACK CANNON;So;0;ON;;;;;N;;;;;\n1FA6D;XIANGQI BLACK SOLDIER;So;0;ON;;;;;N;;;;;\n1FA70;BALLET SHOES;So;0;ON;;;;;N;;;;;\n1FA71;ONE-PIECE SWIMSUIT;So;0;ON;;;;;N;;;;;\n1FA72;BRIEFS;So;0;ON;;;;;N;;;;;\n1FA73;SHORTS;So;0;ON;;;;;N;;;;;\n1FA74;THONG SANDAL;So;0;ON;;;;;N;;;;;\n1FA75;LIGHT BLUE HEART;So;0;ON;;;;;N;;;;;\n1FA76;GREY HEART;So;0;ON;;;;;N;;;;;\n1FA77;PINK HEART;So;0;ON;;;;;N;;;;;\n1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;;\n1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;;\n1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;;\n1FA7B;X-RAY;So;0;ON;;;;;N;;;;;\n1FA7C;CRUTCH;So;0;ON;;;;;N;;;;;\n1FA80;YO-YO;So;0;ON;;;;;N;;;;;\n1FA81;KITE;So;0;ON;;;;;N;;;;;\n1FA82;PARACHUTE;So;0;ON;;;;;N;;;;;\n1FA83;BOOMERANG;So;0;ON;;;;;N;;;;;\n1FA84;MAGIC WAND;So;0;ON;;;;;N;;;;;\n1FA85;PINATA;So;0;ON;;;;;N;;;;;\n1FA86;NESTING DOLLS;So;0;ON;;;;;N;;;;;\n1FA87;MARACAS;So;0;ON;;;;;N;;;;;\n1FA88;FLUTE;So;0;ON;;;;;N;;;;;\n1FA89;HARP;So;0;ON;;;;;N;;;;;\n1FA8A;TROMBONE;So;0;ON;;;;;N;;;;;\n1FA8E;TREASURE CHEST;So;0;ON;;;;;N;;;;;\n1FA8F;SHOVEL;So;0;ON;;;;;N;;;;;\n1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;;\n1FA91;CHAIR;So;0;ON;;;;;N;;;;;\n1FA92;RAZOR;So;0;ON;;;;;N;;;;;\n1FA93;AXE;So;0;ON;;;;;N;;;;;\n1FA94;DIYA LAMP;So;0;ON;;;;;N;;;;;\n1FA95;BANJO;So;0;ON;;;;;N;;;;;\n1FA96;MILITARY HELMET;So;0;ON;;;;;N;;;;;\n1FA97;ACCORDION;So;0;ON;;;;;N;;;;;\n1FA98;LONG DRUM;So;0;ON;;;;;N;;;;;\n1FA99;COIN;So;0;ON;;;;;N;;;;;\n1FA9A;CARPENTRY SAW;So;0;ON;;;;;N;;;;;\n1FA9B;SCREWDRIVER;So;0;ON;;;;;N;;;;;\n1FA9C;LADDER;So;0;ON;;;;;N;;;;;\n1FA9D;HOOK;So;0;ON;;;;;N;;;;;\n1FA9E;MIRROR;So;0;ON;;;;;N;;;;;\n1FA9F;WINDOW;So;0;ON;;;;;N;;;;;\n1FAA0;PLUNGER;So;0;ON;;;;;N;;;;;\n1FAA1;SEWING NEEDLE;So;0;ON;;;;;N;;;;;\n1FAA2;KNOT;So;0;ON;;;;;N;;;;;\n1FAA3;BUCKET;So;0;ON;;;;;N;;;;;\n1FAA4;MOUSE TRAP;So;0;ON;;;;;N;;;;;\n1FAA5;TOOTHBRUSH;So;0;ON;;;;;N;;;;;\n1FAA6;HEADSTONE;So;0;ON;;;;;N;;;;;\n1FAA7;PLACARD;So;0;ON;;;;;N;;;;;\n1FAA8;ROCK;So;0;ON;;;;;N;;;;;\n1FAA9;MIRROR BALL;So;0;ON;;;;;N;;;;;\n1FAAA;IDENTIFICATION CARD;So;0;ON;;;;;N;;;;;\n1FAAB;LOW BATTERY;So;0;ON;;;;;N;;;;;\n1FAAC;HAMSA;So;0;ON;;;;;N;;;;;\n1FAAD;FOLDING HAND FAN;So;0;ON;;;;;N;;;;;\n1FAAE;HAIR PICK;So;0;ON;;;;;N;;;;;\n1FAAF;KHANDA;So;0;ON;;;;;N;;;;;\n1FAB0;FLY;So;0;ON;;;;;N;;;;;\n1FAB1;WORM;So;0;ON;;;;;N;;;;;\n1FAB2;BEETLE;So;0;ON;;;;;N;;;;;\n1FAB3;COCKROACH;So;0;ON;;;;;N;;;;;\n1FAB4;POTTED PLANT;So;0;ON;;;;;N;;;;;\n1FAB5;WOOD;So;0;ON;;;;;N;;;;;\n1FAB6;FEATHER;So;0;ON;;;;;N;;;;;\n1FAB7;LOTUS;So;0;ON;;;;;N;;;;;\n1FAB8;CORAL;So;0;ON;;;;;N;;;;;\n1FAB9;EMPTY NEST;So;0;ON;;;;;N;;;;;\n1FABA;NEST WITH EGGS;So;0;ON;;;;;N;;;;;\n1FABB;HYACINTH;So;0;ON;;;;;N;;;;;\n1FABC;JELLYFISH;So;0;ON;;;;;N;;;;;\n1FABD;WING;So;0;ON;;;;;N;;;;;\n1FABE;LEAFLESS TREE;So;0;ON;;;;;N;;;;;\n1FABF;GOOSE;So;0;ON;;;;;N;;;;;\n1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;;\n1FAC1;LUNGS;So;0;ON;;;;;N;;;;;\n1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;;\n1FAC3;PREGNANT MAN;So;0;ON;;;;;N;;;;;\n1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;;\n1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;;\n1FAC6;FINGERPRINT;So;0;ON;;;;;N;;;;;\n1FAC8;HAIRY CREATURE;So;0;ON;;;;;N;;;;;\n1FACD;ORCA;So;0;ON;;;;;N;;;;;\n1FACE;MOOSE;So;0;ON;;;;;N;;;;;\n1FACF;DONKEY;So;0;ON;;;;;N;;;;;\n1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;;\n1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;;\n1FAD2;OLIVE;So;0;ON;;;;;N;;;;;\n1FAD3;FLATBREAD;So;0;ON;;;;;N;;;;;\n1FAD4;TAMALE;So;0;ON;;;;;N;;;;;\n1FAD5;FONDUE;So;0;ON;;;;;N;;;;;\n1FAD6;TEAPOT;So;0;ON;;;;;N;;;;;\n1FAD7;POURING LIQUID;So;0;ON;;;;;N;;;;;\n1FAD8;BEANS;So;0;ON;;;;;N;;;;;\n1FAD9;JAR;So;0;ON;;;;;N;;;;;\n1FADA;GINGER ROOT;So;0;ON;;;;;N;;;;;\n1FADB;PEA POD;So;0;ON;;;;;N;;;;;\n1FADC;ROOT VEGETABLE;So;0;ON;;;;;N;;;;;\n1FADF;SPLATTER;So;0;ON;;;;;N;;;;;\n1FAE0;MELTING FACE;So;0;ON;;;;;N;;;;;\n1FAE1;SALUTING FACE;So;0;ON;;;;;N;;;;;\n1FAE2;FACE WITH OPEN EYES AND HAND OVER MOUTH;So;0;ON;;;;;N;;;;;\n1FAE3;FACE WITH PEEKING EYE;So;0;ON;;;;;N;;;;;\n1FAE4;FACE WITH DIAGONAL MOUTH;So;0;ON;;;;;N;;;;;\n1FAE5;DOTTED LINE FACE;So;0;ON;;;;;N;;;;;\n1FAE6;BITING LIP;So;0;ON;;;;;N;;;;;\n1FAE7;BUBBLES;So;0;ON;;;;;N;;;;;\n1FAE8;SHAKING FACE;So;0;ON;;;;;N;;;;;\n1FAE9;FACE WITH BAGS UNDER EYES;So;0;ON;;;;;N;;;;;\n1FAEA;DISTORTED FACE;So;0;ON;;;;;N;;;;;\n1FAEF;FIGHT CLOUD;So;0;ON;;;;;N;;;;;\n1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;;\n1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;;\n1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;;\n1FAF3;PALM DOWN HAND;So;0;ON;;;;;N;;;;;\n1FAF4;PALM UP HAND;So;0;ON;;;;;N;;;;;\n1FAF5;INDEX POINTING AT THE VIEWER;So;0;ON;;;;;N;;;;;\n1FAF6;HEART HANDS;So;0;ON;;;;;N;;;;;\n1FAF7;LEFTWARDS PUSHING HAND;So;0;ON;;;;;N;;;;;\n1FAF8;RIGHTWARDS PUSHING HAND;So;0;ON;;;;;N;;;;;\n1FB00;BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;;\n1FB01;BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;;\n1FB02;BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;;\n1FB03;BLOCK SEXTANT-3;So;0;ON;;;;;N;;;;;\n1FB04;BLOCK SEXTANT-13;So;0;ON;;;;;N;;;;;\n1FB05;BLOCK SEXTANT-23;So;0;ON;;;;;N;;;;;\n1FB06;BLOCK SEXTANT-123;So;0;ON;;;;;N;;;;;\n1FB07;BLOCK SEXTANT-4;So;0;ON;;;;;N;;;;;\n1FB08;BLOCK SEXTANT-14;So;0;ON;;;;;N;;;;;\n1FB09;BLOCK SEXTANT-24;So;0;ON;;;;;N;;;;;\n1FB0A;BLOCK SEXTANT-124;So;0;ON;;;;;N;;;;;\n1FB0B;BLOCK SEXTANT-34;So;0;ON;;;;;N;;;;;\n1FB0C;BLOCK SEXTANT-134;So;0;ON;;;;;N;;;;;\n1FB0D;BLOCK SEXTANT-234;So;0;ON;;;;;N;;;;;\n1FB0E;BLOCK SEXTANT-1234;So;0;ON;;;;;N;;;;;\n1FB0F;BLOCK SEXTANT-5;So;0;ON;;;;;N;;;;;\n1FB10;BLOCK SEXTANT-15;So;0;ON;;;;;N;;;;;\n1FB11;BLOCK SEXTANT-25;So;0;ON;;;;;N;;;;;\n1FB12;BLOCK SEXTANT-125;So;0;ON;;;;;N;;;;;\n1FB13;BLOCK SEXTANT-35;So;0;ON;;;;;N;;;;;\n1FB14;BLOCK SEXTANT-235;So;0;ON;;;;;N;;;;;\n1FB15;BLOCK SEXTANT-1235;So;0;ON;;;;;N;;;;;\n1FB16;BLOCK SEXTANT-45;So;0;ON;;;;;N;;;;;\n1FB17;BLOCK SEXTANT-145;So;0;ON;;;;;N;;;;;\n1FB18;BLOCK SEXTANT-245;So;0;ON;;;;;N;;;;;\n1FB19;BLOCK SEXTANT-1245;So;0;ON;;;;;N;;;;;\n1FB1A;BLOCK SEXTANT-345;So;0;ON;;;;;N;;;;;\n1FB1B;BLOCK SEXTANT-1345;So;0;ON;;;;;N;;;;;\n1FB1C;BLOCK SEXTANT-2345;So;0;ON;;;;;N;;;;;\n1FB1D;BLOCK SEXTANT-12345;So;0;ON;;;;;N;;;;;\n1FB1E;BLOCK SEXTANT-6;So;0;ON;;;;;N;;;;;\n1FB1F;BLOCK SEXTANT-16;So;0;ON;;;;;N;;;;;\n1FB20;BLOCK SEXTANT-26;So;0;ON;;;;;N;;;;;\n1FB21;BLOCK SEXTANT-126;So;0;ON;;;;;N;;;;;\n1FB22;BLOCK SEXTANT-36;So;0;ON;;;;;N;;;;;\n1FB23;BLOCK SEXTANT-136;So;0;ON;;;;;N;;;;;\n1FB24;BLOCK SEXTANT-236;So;0;ON;;;;;N;;;;;\n1FB25;BLOCK SEXTANT-1236;So;0;ON;;;;;N;;;;;\n1FB26;BLOCK SEXTANT-46;So;0;ON;;;;;N;;;;;\n1FB27;BLOCK SEXTANT-146;So;0;ON;;;;;N;;;;;\n1FB28;BLOCK SEXTANT-1246;So;0;ON;;;;;N;;;;;\n1FB29;BLOCK SEXTANT-346;So;0;ON;;;;;N;;;;;\n1FB2A;BLOCK SEXTANT-1346;So;0;ON;;;;;N;;;;;\n1FB2B;BLOCK SEXTANT-2346;So;0;ON;;;;;N;;;;;\n1FB2C;BLOCK SEXTANT-12346;So;0;ON;;;;;N;;;;;\n1FB2D;BLOCK SEXTANT-56;So;0;ON;;;;;N;;;;;\n1FB2E;BLOCK SEXTANT-156;So;0;ON;;;;;N;;;;;\n1FB2F;BLOCK SEXTANT-256;So;0;ON;;;;;N;;;;;\n1FB30;BLOCK SEXTANT-1256;So;0;ON;;;;;N;;;;;\n1FB31;BLOCK SEXTANT-356;So;0;ON;;;;;N;;;;;\n1FB32;BLOCK SEXTANT-1356;So;0;ON;;;;;N;;;;;\n1FB33;BLOCK SEXTANT-2356;So;0;ON;;;;;N;;;;;\n1FB34;BLOCK SEXTANT-12356;So;0;ON;;;;;N;;;;;\n1FB35;BLOCK SEXTANT-456;So;0;ON;;;;;N;;;;;\n1FB36;BLOCK SEXTANT-1456;So;0;ON;;;;;N;;;;;\n1FB37;BLOCK SEXTANT-2456;So;0;ON;;;;;N;;;;;\n1FB38;BLOCK SEXTANT-12456;So;0;ON;;;;;N;;;;;\n1FB39;BLOCK SEXTANT-3456;So;0;ON;;;;;N;;;;;\n1FB3A;BLOCK SEXTANT-13456;So;0;ON;;;;;N;;;;;\n1FB3B;BLOCK SEXTANT-23456;So;0;ON;;;;;N;;;;;\n1FB3C;LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FB3D;LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1FB3E;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FB3F;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1FB40;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FB41;LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;\n1FB42;LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;;\n1FB43;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;\n1FB44;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;;\n1FB45;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;\n1FB46;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB47;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB48;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB49;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB4A;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB4B;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;;\n1FB4C;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB4D;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB4E;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB4F;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB50;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1FB51;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB52;UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FB53;UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1FB54;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FB55;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1FB56;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FB57;UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;\n1FB58;UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;;\n1FB59;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;\n1FB5A;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;;\n1FB5B;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;\n1FB5C;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB5D;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB5E;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB5F;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB60;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB61;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;;\n1FB62;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB63;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB64;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB65;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB66;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1FB67;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FB68;UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;\n1FB69;LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;\n1FB6A;UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;\n1FB6B;LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;\n1FB6C;LEFT TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1FB6D;UPPER TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1FB6E;RIGHT TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1FB6F;LOWER TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1FB70;VERTICAL ONE EIGHTH BLOCK-2;So;0;ON;;;;;N;;;;;\n1FB71;VERTICAL ONE EIGHTH BLOCK-3;So;0;ON;;;;;N;;;;;\n1FB72;VERTICAL ONE EIGHTH BLOCK-4;So;0;ON;;;;;N;;;;;\n1FB73;VERTICAL ONE EIGHTH BLOCK-5;So;0;ON;;;;;N;;;;;\n1FB74;VERTICAL ONE EIGHTH BLOCK-6;So;0;ON;;;;;N;;;;;\n1FB75;VERTICAL ONE EIGHTH BLOCK-7;So;0;ON;;;;;N;;;;;\n1FB76;HORIZONTAL ONE EIGHTH BLOCK-2;So;0;ON;;;;;N;;;;;\n1FB77;HORIZONTAL ONE EIGHTH BLOCK-3;So;0;ON;;;;;N;;;;;\n1FB78;HORIZONTAL ONE EIGHTH BLOCK-4;So;0;ON;;;;;N;;;;;\n1FB79;HORIZONTAL ONE EIGHTH BLOCK-5;So;0;ON;;;;;N;;;;;\n1FB7A;HORIZONTAL ONE EIGHTH BLOCK-6;So;0;ON;;;;;N;;;;;\n1FB7B;HORIZONTAL ONE EIGHTH BLOCK-7;So;0;ON;;;;;N;;;;;\n1FB7C;LEFT AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n1FB7D;LEFT AND UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n1FB7E;RIGHT AND UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n1FB7F;RIGHT AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n1FB80;UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n1FB81;HORIZONTAL ONE EIGHTH BLOCK-1358;So;0;ON;;;;;N;;;;;\n1FB82;UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1FB83;UPPER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;\n1FB84;UPPER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;\n1FB85;UPPER THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;\n1FB86;UPPER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;\n1FB87;RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1FB88;RIGHT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;\n1FB89;RIGHT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;\n1FB8A;RIGHT THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;\n1FB8B;RIGHT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;\n1FB8C;LEFT HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;;\n1FB8D;RIGHT HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;;\n1FB8E;UPPER HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;;\n1FB8F;LOWER HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;;\n1FB90;INVERSE MEDIUM SHADE;So;0;ON;;;;;N;;;;;\n1FB91;UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE;So;0;ON;;;;;N;;;;;\n1FB92;UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;\n1FB94;LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;\n1FB95;CHECKER BOARD FILL;So;0;ON;;;;;N;;;;;\n1FB96;INVERSE CHECKER BOARD FILL;So;0;ON;;;;;N;;;;;\n1FB97;HEAVY HORIZONTAL FILL;So;0;ON;;;;;N;;;;;\n1FB98;UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;\n1FB99;UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;\n1FB9A;UPPER AND LOWER TRIANGULAR HALF BLOCK;So;0;ON;;;;;N;;;;;\n1FB9B;LEFT AND RIGHT TRIANGULAR HALF BLOCK;So;0;ON;;;;;N;;;;;\n1FB9C;UPPER LEFT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;;\n1FB9D;UPPER RIGHT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;;\n1FB9E;LOWER RIGHT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;;\n1FB9F;LOWER LEFT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;;\n1FBA0;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT;So;0;ON;;;;;N;;;;;\n1FBA1;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FBA2;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FBA3;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FBA4;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FBA5;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FBA6;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FBA7;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FBA8;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FBA9;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FBAA;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT;So;0;ON;;;;;N;;;;;\n1FBAB;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FBAC;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FBAD;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FBAE;BOX DRAWINGS LIGHT DIAGONAL DIAMOND;So;0;ON;;;;;N;;;;;\n1FBAF;BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE;So;0;ON;;;;;N;;;;;\n1FBB0;ARROWHEAD-SHAPED POINTER;So;0;ON;;;;;N;;;;;\n1FBB1;INVERSE CHECK MARK;So;0;ON;;;;;N;;;;;\n1FBB2;LEFT HALF RUNNING MAN;So;0;ON;;;;;N;;;;;\n1FBB3;RIGHT HALF RUNNING MAN;So;0;ON;;;;;N;;;;;\n1FBB4;INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;;;;;\n1FBB5;LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n1FBB6;RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n1FBB7;DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n1FBB8;UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;\n1FBB9;LEFT HALF FOLDER;So;0;ON;;;;;N;;;;;\n1FBBA;RIGHT HALF FOLDER;So;0;ON;;;;;N;;;;;\n1FBBB;VOIDED GREEK CROSS;So;0;ON;;;;;N;;;;;\n1FBBC;RIGHT OPEN SQUARED DOT;So;0;ON;;;;;N;;;;;\n1FBBD;NEGATIVE DIAGONAL CROSS;So;0;ON;;;;;N;;;;;\n1FBBE;NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FBBF;NEGATIVE DIAGONAL DIAMOND;So;0;ON;;;;;N;;;;;\n1FBC0;WHITE HEAVY SALTIRE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;\n1FBC1;LEFT THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;\n1FBC2;MIDDLE THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;\n1FBC3;RIGHT THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;\n1FBC4;NEGATIVE SQUARED QUESTION MARK;So;0;ON;;;;;N;;;;;\n1FBC5;STICK FIGURE;So;0;ON;;;;;N;;;;;\n1FBC6;STICK FIGURE WITH ARMS RAISED;So;0;ON;;;;;N;;;;;\n1FBC7;STICK FIGURE LEANING LEFT;So;0;ON;;;;;N;;;;;\n1FBC8;STICK FIGURE LEANING RIGHT;So;0;ON;;;;;N;;;;;\n1FBC9;STICK FIGURE WITH DRESS;So;0;ON;;;;;N;;;;;\n1FBCA;WHITE UP-POINTING CHEVRON;So;0;ON;;;;;N;;;;;\n1FBCB;WHITE CROSS MARK;So;0;ON;;;;;N;;;;;\n1FBCC;RAISED SMALL LEFT SQUARE BRACKET;So;0;ON;;;;;N;;;;;\n1FBCD;BLACK SMALL UP-POINTING CHEVRON;So;0;ON;;;;;N;;;;;\n1FBCE;LEFT TWO THIRDS BLOCK;So;0;ON;;;;;N;;;;;\n1FBCF;LEFT ONE THIRD BLOCK;So;0;ON;;;;;N;;;;;\n1FBD0;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT;So;0;ON;;;;;N;;;;;\n1FBD1;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT;So;0;ON;;;;;N;;;;;\n1FBD2;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;\n1FBD3;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1FBD4;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FBD5;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1FBD6;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;\n1FBD7;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER LEFT;So;0;ON;;;;;N;;;;;\n1FBD8;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;;\n1FBD9;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1FBDA;BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1FBDB;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT;So;0;ON;;;;;N;;;;;\n1FBDC;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;;\n1FBDD;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1FBDE;BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;;\n1FBDF;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT;So;0;ON;;;;;N;;;;;\n1FBE0;TOP JUSTIFIED LOWER HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1FBE1;RIGHT JUSTIFIED LEFT HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1FBE2;BOTTOM JUSTIFIED UPPER HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1FBE3;LEFT JUSTIFIED RIGHT HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;;\n1FBE4;UPPER CENTRE ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1FBE5;LOWER CENTRE ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1FBE6;MIDDLE LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1FBE7;MIDDLE RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;\n1FBE8;TOP JUSTIFIED LOWER HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n1FBE9;RIGHT JUSTIFIED LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n1FBEA;BOTTOM JUSTIFIED UPPER HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n1FBEB;LEFT JUSTIFIED RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n1FBEC;TOP RIGHT JUSTIFIED LOWER LEFT QUARTER BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n1FBED;BOTTOM LEFT JUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n1FBEE;BOTTOM RIGHT JUSTIFIED UPPER LEFT QUARTER BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n1FBEF;TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE;So;0;ON;;;;;N;;;;;\n1FBF0;SEGMENTED DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;\n1FBF1;SEGMENTED DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;\n1FBF2;SEGMENTED DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;\n1FBF3;SEGMENTED DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;\n1FBF4;SEGMENTED DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;\n1FBF5;SEGMENTED DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;\n1FBF6;SEGMENTED DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;\n1FBF7;SEGMENTED DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;\n1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;\n1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;\n1FBFA;ALARM BELL SYMBOL;So;0;ON;;;;;N;;;;;\n20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;\n2A6DF;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;\n2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;\n2B73F;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;\n2B740;<CJK Ideograph Extension D, First>;Lo;0;L;;;;;N;;;;;\n2B81D;<CJK Ideograph Extension D, Last>;Lo;0;L;;;;;N;;;;;\n2B820;<CJK Ideograph Extension E, First>;Lo;0;L;;;;;N;;;;;\n2CEAD;<CJK Ideograph Extension E, Last>;Lo;0;L;;;;;N;;;;;\n2CEB0;<CJK Ideograph Extension F, First>;Lo;0;L;;;;;N;;;;;\n2EBE0;<CJK Ideograph Extension F, Last>;Lo;0;L;;;;;N;;;;;\n2EBF0;<CJK Ideograph Extension I, First>;Lo;0;L;;;;;N;;;;;\n2EE5D;<CJK Ideograph Extension I, Last>;Lo;0;L;;;;;N;;;;;\n2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;;\n2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;;\n2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;;\n2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;;\n2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;;\n2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;;\n2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;;\n2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;;\n2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;;\n2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;;\n2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;;\n2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;;\n2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;;\n2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;;\n2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;;\n2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;;\n2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;;\n2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;;\n2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;;\n2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;;\n2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;;\n2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;;\n2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;;\n2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;;\n2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;;\n2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;;\n2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;;\n2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;;\n2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;;\n2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;;\n2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;;\n2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;;\n2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;;\n2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;;\n2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;;\n2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;;\n2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;;\n2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;;\n2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;;\n2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;;\n2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;;\n2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;;\n2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;;\n2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;;\n2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;;\n2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;;\n2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;;\n2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;;\n2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;;\n2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;;\n2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;;\n2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;;\n2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;;\n2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;;\n2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;;\n2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;;\n2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;;\n2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;;\n2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;;\n2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;;\n2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;;\n2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;;\n2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;;\n2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;;\n2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;;\n2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;;\n2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;;\n2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;;\n2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;;\n2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;;\n2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;;\n2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;;\n2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;;\n2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;;\n2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;;\n2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;;\n2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;;\n2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;;\n2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;;\n2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;;\n2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;;\n2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;;\n2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;;\n2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;;\n2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;;\n2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;;\n2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;;\n2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;;\n2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;;\n2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;;\n2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;;\n2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;;\n2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;;\n2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;;\n2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;;\n2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;;\n2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;;\n2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;;\n2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;;\n2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;;\n2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;;\n2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;;\n2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;;\n2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;;\n2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;;\n2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;;\n2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;;\n2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;;\n2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;;\n2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;;\n2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;;\n2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;;\n2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;;\n2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;;\n2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;;\n2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;;\n2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;;\n2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;;\n2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;;\n2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;;\n2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;;\n2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;;\n2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;;\n2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;;\n2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;;\n2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;;\n2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;;\n2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;;\n2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;;\n2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;;\n2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;;\n2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;;\n2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;;\n2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;;\n2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;;\n2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;;\n2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;;\n2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;;\n2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;;\n2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;;\n2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;;\n2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;;\n2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;;\n2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;;\n2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;9;N;;;;;\n2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;;\n2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;;\n2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;;\n2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;;\n2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;;\n2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;;\n2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;;\n2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;;\n2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;;\n2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;;\n2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;;\n2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;;\n2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;;\n2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;;\n2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;;\n2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;;\n2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;;\n2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;;\n2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;;\n2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;;\n2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;;\n2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;;\n2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;;\n2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;;\n2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;;\n2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;;\n2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;;\n2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;;\n2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;;\n2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;;\n2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;;\n2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;;\n2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;;\n2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;;\n2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;;\n2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;;\n2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;;\n2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;;\n2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;;\n2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;;\n2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;;\n2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;;\n2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;;\n2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;;\n2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;;\n2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;;\n2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;;\n2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;;\n2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;;\n2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;;\n2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;;\n2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;;\n2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;;\n2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;;\n2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;;\n2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;;\n2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;;\n2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;;\n2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;;\n2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;;\n2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;;\n2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;;\n2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;;\n2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;;\n2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;;\n2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;;\n2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;;\n2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;;\n2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;;\n2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;;\n2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;;\n2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;;\n2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;;\n2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;;\n2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;;\n2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;;\n2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;;\n2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;;\n2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;;\n2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;;\n2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;;\n2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;;\n2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;;\n2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;;\n2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;;\n2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;;\n2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;;\n2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;;\n2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;;\n2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;;\n2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;;\n2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;;\n2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;;\n2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;;\n2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;;\n2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;;\n2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;;\n2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;;\n2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;;\n2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;;\n2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;;\n2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;;\n2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;;\n2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;;\n2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;;\n2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;;\n2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;;\n2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;;\n2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;;\n2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;;\n2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;;\n2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;;\n2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;;\n2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;;\n2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;;\n2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;;\n2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;;\n2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;;\n2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;;\n2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;;\n2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;;\n2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;;\n2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;;\n2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;;\n2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;;\n2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;;\n2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;;\n2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;;\n2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;;\n2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;;\n2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;;\n2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;;\n2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;;\n2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;;\n2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;;\n2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;;\n2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;;\n2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;;\n2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;;\n2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;;\n2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;;\n2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;;\n2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;;\n2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;;\n2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;;\n2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;;\n2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;;\n2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;;\n2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;;\n2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;;\n2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;;\n2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;;\n2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;;\n2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;;\n2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;;\n2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;;\n2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;;\n2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;;\n2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;;\n2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;;\n2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;;\n2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;;\n2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;;\n2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;;\n2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;;\n2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;;\n2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;;\n2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;;\n2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;;\n2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;;\n2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;;\n2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;;\n2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;;\n2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;;\n2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;;\n2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;;\n2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;;\n2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;;\n2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;;\n2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;;\n2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;;\n2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;;\n2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;;\n2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;;\n2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;;\n2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;;\n2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;;\n2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;;\n2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;;\n2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;;\n2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;;\n2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;;\n2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;;\n2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;;\n2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;;\n2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;;\n2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;;\n2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;;\n2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;;\n2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;;\n2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;;\n2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;;\n2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;;\n2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;;\n2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;;\n2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;;\n2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;;\n2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;;\n2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;;\n2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;;\n2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;;\n2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;;\n2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;;\n2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;;\n2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;;\n2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;;\n2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;;\n2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;;\n2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;;\n2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;;\n2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;;\n2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;;\n2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;;\n2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;;\n2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;;\n2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;;\n2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;;\n2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;;\n2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;;\n2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;;\n2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;;\n2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;;\n2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;;\n2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;;\n2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;;\n2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;;\n2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;;\n2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;;\n2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;;\n2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;;\n2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;;\n2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;;\n2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;;\n2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;;\n2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;;\n2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;;\n2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;;\n2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;;\n2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;;\n2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;;\n2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;;\n2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;;\n2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;;\n2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;;\n2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;;\n2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;;\n2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;;\n2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;;\n2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;;\n2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;;\n2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;;\n2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;;\n2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;;\n2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;;\n2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;;\n2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;;\n2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;;\n2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;;\n2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;;\n2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;;\n2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;;\n2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;;\n2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;;\n2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;;\n2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;;\n2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;;\n2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;;\n2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;;\n2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;;\n2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;;\n2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;;\n2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;;\n2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;;\n2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;;\n2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;;\n2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;;\n2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;;\n2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;;\n2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;;\n2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;;\n2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;;\n2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;;\n2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;;\n2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;;\n2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;;\n2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;;\n2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;;\n2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;;\n2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;;\n2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;;\n2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;;\n2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;;\n2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;;\n2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;;\n2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;;\n2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;;\n2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;;\n2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;;\n2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;;\n2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;;\n2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;;\n2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;;\n2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;;\n2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;;\n2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;;\n2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;;\n2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;;\n2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;;\n2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;;\n2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;;\n2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;;\n2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;;\n2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;;\n2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;;\n2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;;\n2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;;\n2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;;\n2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;;\n2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;;\n2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;;\n2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;;\n2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;;\n2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;;\n2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;;\n2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;;\n2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;;\n2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;;\n2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;;\n2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;;\n2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;;\n2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;;\n2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;;\n2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;;\n2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;;\n2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;;\n2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;;\n2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;;\n2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;;\n2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;;\n2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;;\n2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;;\n2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;;\n2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;;\n2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;;\n2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;;\n2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;;\n2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;;\n2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;;\n2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;;\n2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;;\n2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;;\n2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;;\n2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;;\n2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;;\n2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;;\n2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;;\n2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;;\n2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;;\n2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;;\n2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;;\n2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;;\n2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;;\n2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;;\n2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;;\n2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;;\n2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;;\n2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;;\n2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;;\n2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;;\n2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;;\n2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;;\n2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;;\n2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;;\n2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;;\n2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;;\n2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;;\n2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;;\n2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;;\n2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;;\n2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;;\n2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;;\n2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;;\n2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;;\n2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;;\n2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;;\n2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;;\n2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;;\n30000;<CJK Ideograph Extension G, First>;Lo;0;L;;;;;N;;;;;\n3134A;<CJK Ideograph Extension G, Last>;Lo;0;L;;;;;N;;;;;\n31350;<CJK Ideograph Extension H, First>;Lo;0;L;;;;;N;;;;;\n323AF;<CJK Ideograph Extension H, Last>;Lo;0;L;;;;;N;;;;;\n323B0;<CJK Ideograph Extension J, First>;Lo;0;L;;;;;N;;;;;\n33479;<CJK Ideograph Extension J, Last>;Lo;0;L;;;;;N;;;;;\nE0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;;\nE0020;TAG SPACE;Cf;0;BN;;;;;N;;;;;\nE0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;;\nE0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;;\nE0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;;\nE0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;;\nE0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;;\nE0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;;\nE0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;;\nE0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;;\nE0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;;\nE002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;;\nE002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;;\nE002C;TAG COMMA;Cf;0;BN;;;;;N;;;;;\nE002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;;\nE002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;;\nE002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;;\nE0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;;\nE0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;;\nE0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;;\nE0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;;\nE0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;;\nE0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;;\nE0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;;\nE0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;;\nE0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;;\nE0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;;\nE003A;TAG COLON;Cf;0;BN;;;;;N;;;;;\nE003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;;\nE003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;;\nE003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;;\nE003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;;\nE003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;;\nE0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;;\nE0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;;\nE0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;;\nE0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;;\nE0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;;\nE0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;;\nE0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;;\nE0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;;\nE0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;;\nE0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;;\nE004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;;\nE004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;;\nE004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;;\nE004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;;\nE004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;;\nE004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;;\nE0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;;\nE0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;;\nE0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;;\nE0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;;\nE0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;;\nE0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;;\nE0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;;\nE0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;;\nE0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;;\nE0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;;\nE005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;;\nE005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;\nE005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;;\nE005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;\nE005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;;\nE005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;;\nE0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;;\nE0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;;\nE0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;;\nE0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;;\nE0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;;\nE0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;;\nE0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;;\nE0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;;\nE0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;;\nE0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;;\nE006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;;\nE006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;;\nE006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;;\nE006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;;\nE006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;;\nE006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;;\nE0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;;\nE0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;;\nE0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;;\nE0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;;\nE0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;;\nE0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;;\nE0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;;\nE0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;;\nE0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;;\nE0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;;\nE007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;;\nE007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;\nE007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;;\nE007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;\nE007E;TAG TILDE;Cf;0;BN;;;;;N;;;;;\nE007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;;\nE0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;;\nE0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;;\nE0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;;\nE0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;;\nE0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;;\nE0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;;\nE0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;;\nE0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;;\nE0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;;\nE0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;;\nE010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;;\nE010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;;\nE010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;;\nE010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;;\nE010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;;\nE010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;;\nE0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;;\nE0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;;\nE0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;;\nE0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;;\nE0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;;\nE0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;;\nE0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;;\nE0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;;\nE0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;;\nE0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;;\nE011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;;\nE011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;;\nE011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;;\nE011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;;\nE011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;;\nE011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;;\nE0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;;\nE0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;;\nE0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;;\nE0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;;\nE0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;;\nE0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;;\nE0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;;\nE0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;;\nE0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;;\nE0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;;\nE012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;;\nE012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;;\nE012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;;\nE012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;;\nE012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;;\nE012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;;\nE0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;;\nE0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;;\nE0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;;\nE0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;;\nE0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;;\nE0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;;\nE0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;;\nE0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;;\nE0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;;\nE0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;;\nE013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;;\nE013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;;\nE013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;;\nE013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;;\nE013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;;\nE013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;;\nE0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;;\nE0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;;\nE0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;;\nE0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;;\nE0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;;\nE0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;;\nE0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;;\nE0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;;\nE0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;;\nE0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;;\nE014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;;\nE014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;;\nE014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;;\nE014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;;\nE014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;;\nE014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;;\nE0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;;\nE0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;;\nE0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;;\nE0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;;\nE0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;;\nE0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;;\nE0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;;\nE0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;;\nE0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;;\nE0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;;\nE015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;;\nE015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;;\nE015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;;\nE015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;;\nE015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;;\nE015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;;\nE0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;;\nE0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;;\nE0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;;\nE0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;;\nE0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;;\nE0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;;\nE0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;;\nE0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;;\nE0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;;\nE0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;;\nE016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;;\nE016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;;\nE016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;;\nE016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;;\nE016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;;\nE016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;;\nE0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;;\nE0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;;\nE0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;;\nE0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;;\nE0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;;\nE0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;;\nE0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;;\nE0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;;\nE0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;;\nE0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;;\nE017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;;\nE017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;;\nE017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;;\nE017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;;\nE017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;;\nE017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;;\nE0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;;\nE0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;;\nE0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;;\nE0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;;\nE0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;;\nE0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;;\nE0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;;\nE0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;;\nE0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;;\nE0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;;\nE018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;;\nE018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;;\nE018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;;\nE018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;;\nE018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;;\nE018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;;\nE0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;;\nE0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;;\nE0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;;\nE0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;;\nE0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;;\nE0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;;\nE0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;;\nE0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;;\nE0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;;\nE0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;;\nE019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;;\nE019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;;\nE019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;;\nE019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;;\nE019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;;\nE019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;;\nE01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;;\nE01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;;\nE01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;;\nE01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;;\nE01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;;\nE01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;;\nE01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;;\nE01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;;\nE01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;;\nE01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;;\nE01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;;\nE01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;;\nE01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;;\nE01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;;\nE01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;;\nE01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;;\nE01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;;\nE01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;;\nE01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;;\nE01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;;\nE01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;;\nE01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;;\nE01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;;\nE01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;;\nE01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;;\nE01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;;\nE01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;;\nE01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;;\nE01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;;\nE01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;;\nE01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;;\nE01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;;\nE01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;;\nE01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;;\nE01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;;\nE01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;;\nE01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;;\nE01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;;\nE01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;;\nE01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;;\nE01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;;\nE01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;;\nE01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;;\nE01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;;\nE01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;;\nE01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;;\nE01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;;\nE01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;;\nE01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;;\nE01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;;\nE01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;;\nE01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;;\nE01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;;\nE01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;;\nE01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;;\nE01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;;\nE01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;;\nE01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;;\nE01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;;\nE01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;;\nE01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;;\nE01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;;\nE01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;;\nE01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;;\nE01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;;\nE01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;;\nE01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;;\nE01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;;\nE01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;;\nE01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;;\nE01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;;\nE01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;;\nE01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;;\nE01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;;\nE01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;;\nE01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;;\nE01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;;\nE01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;;\nE01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;;\nE01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;;\nF0000;<Plane 15 Private Use, First>;Co;0;L;;;;;N;;;;;\nFFFFD;<Plane 15 Private Use, Last>;Co;0;L;;;;;N;;;;;\n100000;<Plane 16 Private Use, First>;Co;0;L;;;;;N;;;;;\n10FFFD;<Plane 16 Private Use, Last>;Co;0;L;;;;;N;;;;;\n"
  },
  {
    "path": "maint/Unicode.tables/emoji-data.txt",
    "content": "# emoji-data.txt\n# Date: 2025-07-25, 17:54:31 GMT\n# © 2025 Unicode®, Inc.\n# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.\n# For terms of use and license, see https://www.unicode.org/terms_of_use.html\n#\n# Emoji Data for UTS #51\n# Version: 17.0\n#\n# For documentation and usage, see https://www.unicode.org/reports/tr51\n#\n# Format: \n# <codepoint(s)> ; <property> # <comments> \n# Note: there is no guarantee as to the structure of whitespace or comments\n#\n# Characters and sequences are listed in code point order. Users should be shown a more natural order.\n# See the CLDR collation order for Emoji.\n\n\n# ================================================\n\n# All omitted code points have Emoji=No\n\n0023          ; Emoji                # E0.0   [1] (#️)       hash sign\n002A          ; Emoji                # E0.0   [1] (*️)       asterisk\n0030..0039    ; Emoji                # E0.0  [10] (0️..9️)    digit zero..digit nine\n00A9          ; Emoji                # E0.6   [1] (©️)       copyright\n00AE          ; Emoji                # E0.6   [1] (®️)       registered\n203C          ; Emoji                # E0.6   [1] (‼️)       double exclamation mark\n2049          ; Emoji                # E0.6   [1] (⁉️)       exclamation question mark\n2122          ; Emoji                # E0.6   [1] (™️)       trade mark\n2139          ; Emoji                # E0.6   [1] (ℹ️)       information\n2194..2199    ; Emoji                # E0.6   [6] (↔️..↙️)    left-right arrow..down-left arrow\n21A9..21AA    ; Emoji                # E0.6   [2] (↩️..↪️)    right arrow curving left..left arrow curving right\n231A..231B    ; Emoji                # E0.6   [2] (⌚..⌛)    watch..hourglass done\n2328          ; Emoji                # E1.0   [1] (⌨️)       keyboard\n23CF          ; Emoji                # E1.0   [1] (⏏️)       eject button\n23E9..23EC    ; Emoji                # E0.6   [4] (⏩..⏬)    fast-forward button..fast down button\n23ED..23EE    ; Emoji                # E0.7   [2] (⏭️..⏮️)    next track button..last track button\n23EF          ; Emoji                # E1.0   [1] (⏯️)       play or pause button\n23F0          ; Emoji                # E0.6   [1] (⏰)       alarm clock\n23F1..23F2    ; Emoji                # E1.0   [2] (⏱️..⏲️)    stopwatch..timer clock\n23F3          ; Emoji                # E0.6   [1] (⏳)       hourglass not done\n23F8..23FA    ; Emoji                # E0.7   [3] (⏸️..⏺️)    pause button..record button\n24C2          ; Emoji                # E0.6   [1] (Ⓜ️)       circled M\n25AA..25AB    ; Emoji                # E0.6   [2] (▪️..▫️)    black small square..white small square\n25B6          ; Emoji                # E0.6   [1] (▶️)       play button\n25C0          ; Emoji                # E0.6   [1] (◀️)       reverse button\n25FB..25FE    ; Emoji                # E0.6   [4] (◻️..◾)    white medium square..black medium-small square\n2600..2601    ; Emoji                # E0.6   [2] (☀️..☁️)    sun..cloud\n2602..2603    ; Emoji                # E0.7   [2] (☂️..☃️)    umbrella..snowman\n2604          ; Emoji                # E1.0   [1] (☄️)       comet\n260E          ; Emoji                # E0.6   [1] (☎️)       telephone\n2611          ; Emoji                # E0.6   [1] (☑️)       check box with check\n2614..2615    ; Emoji                # E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage\n2618          ; Emoji                # E1.0   [1] (☘️)       shamrock\n261D          ; Emoji                # E0.6   [1] (☝️)       index pointing up\n2620          ; Emoji                # E1.0   [1] (☠️)       skull and crossbones\n2622..2623    ; Emoji                # E1.0   [2] (☢️..☣️)    radioactive..biohazard\n2626          ; Emoji                # E1.0   [1] (☦️)       orthodox cross\n262A          ; Emoji                # E0.7   [1] (☪️)       star and crescent\n262E          ; Emoji                # E1.0   [1] (☮️)       peace symbol\n262F          ; Emoji                # E0.7   [1] (☯️)       yin yang\n2638..2639    ; Emoji                # E0.7   [2] (☸️..☹️)    wheel of dharma..frowning face\n263A          ; Emoji                # E0.6   [1] (☺️)       smiling face\n2640          ; Emoji                # E4.0   [1] (♀️)       female sign\n2642          ; Emoji                # E4.0   [1] (♂️)       male sign\n2648..2653    ; Emoji                # E0.6  [12] (♈..♓)    Aries..Pisces\n265F          ; Emoji                # E11.0  [1] (♟️)       chess pawn\n2660          ; Emoji                # E0.6   [1] (♠️)       spade suit\n2663          ; Emoji                # E0.6   [1] (♣️)       club suit\n2665..2666    ; Emoji                # E0.6   [2] (♥️..♦️)    heart suit..diamond suit\n2668          ; Emoji                # E0.6   [1] (♨️)       hot springs\n267B          ; Emoji                # E0.6   [1] (♻️)       recycling symbol\n267E          ; Emoji                # E11.0  [1] (♾️)       infinity\n267F          ; Emoji                # E0.6   [1] (♿)       wheelchair symbol\n2692          ; Emoji                # E1.0   [1] (⚒️)       hammer and pick\n2693          ; Emoji                # E0.6   [1] (⚓)       anchor\n2694          ; Emoji                # E1.0   [1] (⚔️)       crossed swords\n2695          ; Emoji                # E4.0   [1] (⚕️)       medical symbol\n2696..2697    ; Emoji                # E1.0   [2] (⚖️..⚗️)    balance scale..alembic\n2699          ; Emoji                # E1.0   [1] (⚙️)       gear\n269B..269C    ; Emoji                # E1.0   [2] (⚛️..⚜️)    atom symbol..fleur-de-lis\n26A0..26A1    ; Emoji                # E0.6   [2] (⚠️..⚡)    warning..high voltage\n26A7          ; Emoji                # E13.0  [1] (⚧️)       transgender symbol\n26AA..26AB    ; Emoji                # E0.6   [2] (⚪..⚫)    white circle..black circle\n26B0..26B1    ; Emoji                # E1.0   [2] (⚰️..⚱️)    coffin..funeral urn\n26BD..26BE    ; Emoji                # E0.6   [2] (⚽..⚾)    soccer ball..baseball\n26C4..26C5    ; Emoji                # E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud\n26C8          ; Emoji                # E0.7   [1] (⛈️)       cloud with lightning and rain\n26CE          ; Emoji                # E0.6   [1] (⛎)       Ophiuchus\n26CF          ; Emoji                # E0.7   [1] (⛏️)       pick\n26D1          ; Emoji                # E0.7   [1] (⛑️)       rescue worker’s helmet\n26D3          ; Emoji                # E0.7   [1] (⛓️)       chains\n26D4          ; Emoji                # E0.6   [1] (⛔)       no entry\n26E9          ; Emoji                # E0.7   [1] (⛩️)       shinto shrine\n26EA          ; Emoji                # E0.6   [1] (⛪)       church\n26F0..26F1    ; Emoji                # E0.7   [2] (⛰️..⛱️)    mountain..umbrella on ground\n26F2..26F3    ; Emoji                # E0.6   [2] (⛲..⛳)    fountain..flag in hole\n26F4          ; Emoji                # E0.7   [1] (⛴️)       ferry\n26F5          ; Emoji                # E0.6   [1] (⛵)       sailboat\n26F7..26F9    ; Emoji                # E0.7   [3] (⛷️..⛹️)    skier..person bouncing ball\n26FA          ; Emoji                # E0.6   [1] (⛺)       tent\n26FD          ; Emoji                # E0.6   [1] (⛽)       fuel pump\n2702          ; Emoji                # E0.6   [1] (✂️)       scissors\n2705          ; Emoji                # E0.6   [1] (✅)       check mark button\n2708..270C    ; Emoji                # E0.6   [5] (✈️..✌️)    airplane..victory hand\n270D          ; Emoji                # E0.7   [1] (✍️)       writing hand\n270F          ; Emoji                # E0.6   [1] (✏️)       pencil\n2712          ; Emoji                # E0.6   [1] (✒️)       black nib\n2714          ; Emoji                # E0.6   [1] (✔️)       check mark\n2716          ; Emoji                # E0.6   [1] (✖️)       multiply\n271D          ; Emoji                # E0.7   [1] (✝️)       latin cross\n2721          ; Emoji                # E0.7   [1] (✡️)       star of David\n2728          ; Emoji                # E0.6   [1] (✨)       sparkles\n2733..2734    ; Emoji                # E0.6   [2] (✳️..✴️)    eight-spoked asterisk..eight-pointed star\n2744          ; Emoji                # E0.6   [1] (❄️)       snowflake\n2747          ; Emoji                # E0.6   [1] (❇️)       sparkle\n274C          ; Emoji                # E0.6   [1] (❌)       cross mark\n274E          ; Emoji                # E0.6   [1] (❎)       cross mark button\n2753..2755    ; Emoji                # E0.6   [3] (❓..❕)    red question mark..white exclamation mark\n2757          ; Emoji                # E0.6   [1] (❗)       red exclamation mark\n2763          ; Emoji                # E1.0   [1] (❣️)       heart exclamation\n2764          ; Emoji                # E0.6   [1] (❤️)       red heart\n2795..2797    ; Emoji                # E0.6   [3] (➕..➗)    plus..divide\n27A1          ; Emoji                # E0.6   [1] (➡️)       right arrow\n27B0          ; Emoji                # E0.6   [1] (➰)       curly loop\n27BF          ; Emoji                # E1.0   [1] (➿)       double curly loop\n2934..2935    ; Emoji                # E0.6   [2] (⤴️..⤵️)    right arrow curving up..right arrow curving down\n2B05..2B07    ; Emoji                # E0.6   [3] (⬅️..⬇️)    left arrow..down arrow\n2B1B..2B1C    ; Emoji                # E0.6   [2] (⬛..⬜)    black large square..white large square\n2B50          ; Emoji                # E0.6   [1] (⭐)       star\n2B55          ; Emoji                # E0.6   [1] (⭕)       hollow red circle\n3030          ; Emoji                # E0.6   [1] (〰️)       wavy dash\n303D          ; Emoji                # E0.6   [1] (〽️)       part alternation mark\n3297          ; Emoji                # E0.6   [1] (㊗️)       Japanese “congratulations” button\n3299          ; Emoji                # E0.6   [1] (㊙️)       Japanese “secret” button\n1F004         ; Emoji                # E0.6   [1] (🀄)       mahjong red dragon\n1F0CF         ; Emoji                # E0.6   [1] (🃏)       joker\n1F170..1F171  ; Emoji                # E0.6   [2] (🅰️..🅱️)    A button (blood type)..B button (blood type)\n1F17E..1F17F  ; Emoji                # E0.6   [2] (🅾️..🅿️)    O button (blood type)..P button\n1F18E         ; Emoji                # E0.6   [1] (🆎)       AB button (blood type)\n1F191..1F19A  ; Emoji                # E0.6  [10] (🆑..🆚)    CL button..VS button\n1F1E6..1F1FF  ; Emoji                # E0.0  [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z\n1F201..1F202  ; Emoji                # E0.6   [2] (🈁..🈂️)    Japanese “here” button..Japanese “service charge” button\n1F21A         ; Emoji                # E0.6   [1] (🈚)       Japanese “free of charge” button\n1F22F         ; Emoji                # E0.6   [1] (🈯)       Japanese “reserved” button\n1F232..1F23A  ; Emoji                # E0.6   [9] (🈲..🈺)    Japanese “prohibited” button..Japanese “open for business” button\n1F250..1F251  ; Emoji                # E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button\n1F300..1F30C  ; Emoji                # E0.6  [13] (🌀..🌌)    cyclone..milky way\n1F30D..1F30E  ; Emoji                # E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas\n1F30F         ; Emoji                # E0.6   [1] (🌏)       globe showing Asia-Australia\n1F310         ; Emoji                # E1.0   [1] (🌐)       globe with meridians\n1F311         ; Emoji                # E0.6   [1] (🌑)       new moon\n1F312         ; Emoji                # E1.0   [1] (🌒)       waxing crescent moon\n1F313..1F315  ; Emoji                # E0.6   [3] (🌓..🌕)    first quarter moon..full moon\n1F316..1F318  ; Emoji                # E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon\n1F319         ; Emoji                # E0.6   [1] (🌙)       crescent moon\n1F31A         ; Emoji                # E1.0   [1] (🌚)       new moon face\n1F31B         ; Emoji                # E0.6   [1] (🌛)       first quarter moon face\n1F31C         ; Emoji                # E0.7   [1] (🌜)       last quarter moon face\n1F31D..1F31E  ; Emoji                # E1.0   [2] (🌝..🌞)    full moon face..sun with face\n1F31F..1F320  ; Emoji                # E0.6   [2] (🌟..🌠)    glowing star..shooting star\n1F321         ; Emoji                # E0.7   [1] (🌡️)       thermometer\n1F324..1F32C  ; Emoji                # E0.7   [9] (🌤️..🌬️)    sun behind small cloud..wind face\n1F32D..1F32F  ; Emoji                # E1.0   [3] (🌭..🌯)    hot dog..burrito\n1F330..1F331  ; Emoji                # E0.6   [2] (🌰..🌱)    chestnut..seedling\n1F332..1F333  ; Emoji                # E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree\n1F334..1F335  ; Emoji                # E0.6   [2] (🌴..🌵)    palm tree..cactus\n1F336         ; Emoji                # E0.7   [1] (🌶️)       hot pepper\n1F337..1F34A  ; Emoji                # E0.6  [20] (🌷..🍊)    tulip..tangerine\n1F34B         ; Emoji                # E1.0   [1] (🍋)       lemon\n1F34C..1F34F  ; Emoji                # E0.6   [4] (🍌..🍏)    banana..green apple\n1F350         ; Emoji                # E1.0   [1] (🍐)       pear\n1F351..1F37B  ; Emoji                # E0.6  [43] (🍑..🍻)    peach..clinking beer mugs\n1F37C         ; Emoji                # E1.0   [1] (🍼)       baby bottle\n1F37D         ; Emoji                # E0.7   [1] (🍽️)       fork and knife with plate\n1F37E..1F37F  ; Emoji                # E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn\n1F380..1F393  ; Emoji                # E0.6  [20] (🎀..🎓)    ribbon..graduation cap\n1F396..1F397  ; Emoji                # E0.7   [2] (🎖️..🎗️)    military medal..reminder ribbon\n1F399..1F39B  ; Emoji                # E0.7   [3] (🎙️..🎛️)    studio microphone..control knobs\n1F39E..1F39F  ; Emoji                # E0.7   [2] (🎞️..🎟️)    film frames..admission tickets\n1F3A0..1F3C4  ; Emoji                # E0.6  [37] (🎠..🏄)    carousel horse..person surfing\n1F3C5         ; Emoji                # E1.0   [1] (🏅)       sports medal\n1F3C6         ; Emoji                # E0.6   [1] (🏆)       trophy\n1F3C7         ; Emoji                # E1.0   [1] (🏇)       horse racing\n1F3C8         ; Emoji                # E0.6   [1] (🏈)       american football\n1F3C9         ; Emoji                # E1.0   [1] (🏉)       rugby football\n1F3CA         ; Emoji                # E0.6   [1] (🏊)       person swimming\n1F3CB..1F3CE  ; Emoji                # E0.7   [4] (🏋️..🏎️)    person lifting weights..racing car\n1F3CF..1F3D3  ; Emoji                # E1.0   [5] (🏏..🏓)    cricket game..ping pong\n1F3D4..1F3DF  ; Emoji                # E0.7  [12] (🏔️..🏟️)    snow-capped mountain..stadium\n1F3E0..1F3E3  ; Emoji                # E0.6   [4] (🏠..🏣)    house..Japanese post office\n1F3E4         ; Emoji                # E1.0   [1] (🏤)       post office\n1F3E5..1F3F0  ; Emoji                # E0.6  [12] (🏥..🏰)    hospital..castle\n1F3F3         ; Emoji                # E0.7   [1] (🏳️)       white flag\n1F3F4         ; Emoji                # E1.0   [1] (🏴)       black flag\n1F3F5         ; Emoji                # E0.7   [1] (🏵️)       rosette\n1F3F7         ; Emoji                # E0.7   [1] (🏷️)       label\n1F3F8..1F407  ; Emoji                # E1.0  [16] (🏸..🐇)    badminton..rabbit\n1F408         ; Emoji                # E0.7   [1] (🐈)       cat\n1F409..1F40B  ; Emoji                # E1.0   [3] (🐉..🐋)    dragon..whale\n1F40C..1F40E  ; Emoji                # E0.6   [3] (🐌..🐎)    snail..horse\n1F40F..1F410  ; Emoji                # E1.0   [2] (🐏..🐐)    ram..goat\n1F411..1F412  ; Emoji                # E0.6   [2] (🐑..🐒)    ewe..monkey\n1F413         ; Emoji                # E1.0   [1] (🐓)       rooster\n1F414         ; Emoji                # E0.6   [1] (🐔)       chicken\n1F415         ; Emoji                # E0.7   [1] (🐕)       dog\n1F416         ; Emoji                # E1.0   [1] (🐖)       pig\n1F417..1F429  ; Emoji                # E0.6  [19] (🐗..🐩)    boar..poodle\n1F42A         ; Emoji                # E1.0   [1] (🐪)       camel\n1F42B..1F43E  ; Emoji                # E0.6  [20] (🐫..🐾)    two-hump camel..paw prints\n1F43F         ; Emoji                # E0.7   [1] (🐿️)       chipmunk\n1F440         ; Emoji                # E0.6   [1] (👀)       eyes\n1F441         ; Emoji                # E0.7   [1] (👁️)       eye\n1F442..1F464  ; Emoji                # E0.6  [35] (👂..👤)    ear..bust in silhouette\n1F465         ; Emoji                # E1.0   [1] (👥)       busts in silhouette\n1F466..1F46B  ; Emoji                # E0.6   [6] (👦..👫)    boy..woman and man holding hands\n1F46C..1F46D  ; Emoji                # E1.0   [2] (👬..👭)    men holding hands..women holding hands\n1F46E..1F4AC  ; Emoji                # E0.6  [63] (👮..💬)    police officer..speech balloon\n1F4AD         ; Emoji                # E1.0   [1] (💭)       thought balloon\n1F4AE..1F4B5  ; Emoji                # E0.6   [8] (💮..💵)    white flower..dollar banknote\n1F4B6..1F4B7  ; Emoji                # E1.0   [2] (💶..💷)    euro banknote..pound banknote\n1F4B8..1F4EB  ; Emoji                # E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag\n1F4EC..1F4ED  ; Emoji                # E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag\n1F4EE         ; Emoji                # E0.6   [1] (📮)       postbox\n1F4EF         ; Emoji                # E1.0   [1] (📯)       postal horn\n1F4F0..1F4F4  ; Emoji                # E0.6   [5] (📰..📴)    newspaper..mobile phone off\n1F4F5         ; Emoji                # E1.0   [1] (📵)       no mobile phones\n1F4F6..1F4F7  ; Emoji                # E0.6   [2] (📶..📷)    antenna bars..camera\n1F4F8         ; Emoji                # E1.0   [1] (📸)       camera with flash\n1F4F9..1F4FC  ; Emoji                # E0.6   [4] (📹..📼)    video camera..videocassette\n1F4FD         ; Emoji                # E0.7   [1] (📽️)       film projector\n1F4FF..1F502  ; Emoji                # E1.0   [4] (📿..🔂)    prayer beads..repeat single button\n1F503         ; Emoji                # E0.6   [1] (🔃)       clockwise vertical arrows\n1F504..1F507  ; Emoji                # E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker\n1F508         ; Emoji                # E0.7   [1] (🔈)       speaker low volume\n1F509         ; Emoji                # E1.0   [1] (🔉)       speaker medium volume\n1F50A..1F514  ; Emoji                # E0.6  [11] (🔊..🔔)    speaker high volume..bell\n1F515         ; Emoji                # E1.0   [1] (🔕)       bell with slash\n1F516..1F52B  ; Emoji                # E0.6  [22] (🔖..🔫)    bookmark..water pistol\n1F52C..1F52D  ; Emoji                # E1.0   [2] (🔬..🔭)    microscope..telescope\n1F52E..1F53D  ; Emoji                # E0.6  [16] (🔮..🔽)    crystal ball..downwards button\n1F549..1F54A  ; Emoji                # E0.7   [2] (🕉️..🕊️)    om..dove\n1F54B..1F54E  ; Emoji                # E1.0   [4] (🕋..🕎)    kaaba..menorah\n1F550..1F55B  ; Emoji                # E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock\n1F55C..1F567  ; Emoji                # E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty\n1F56F..1F570  ; Emoji                # E0.7   [2] (🕯️..🕰️)    candle..mantelpiece clock\n1F573..1F579  ; Emoji                # E0.7   [7] (🕳️..🕹️)    hole..joystick\n1F57A         ; Emoji                # E3.0   [1] (🕺)       man dancing\n1F587         ; Emoji                # E0.7   [1] (🖇️)       linked paperclips\n1F58A..1F58D  ; Emoji                # E0.7   [4] (🖊️..🖍️)    pen..crayon\n1F590         ; Emoji                # E0.7   [1] (🖐️)       hand with fingers splayed\n1F595..1F596  ; Emoji                # E1.0   [2] (🖕..🖖)    middle finger..vulcan salute\n1F5A4         ; Emoji                # E3.0   [1] (🖤)       black heart\n1F5A5         ; Emoji                # E0.7   [1] (🖥️)       desktop computer\n1F5A8         ; Emoji                # E0.7   [1] (🖨️)       printer\n1F5B1..1F5B2  ; Emoji                # E0.7   [2] (🖱️..🖲️)    computer mouse..trackball\n1F5BC         ; Emoji                # E0.7   [1] (🖼️)       framed picture\n1F5C2..1F5C4  ; Emoji                # E0.7   [3] (🗂️..🗄️)    card index dividers..file cabinet\n1F5D1..1F5D3  ; Emoji                # E0.7   [3] (🗑️..🗓️)    wastebasket..spiral calendar\n1F5DC..1F5DE  ; Emoji                # E0.7   [3] (🗜️..🗞️)    clamp..rolled-up newspaper\n1F5E1         ; Emoji                # E0.7   [1] (🗡️)       dagger\n1F5E3         ; Emoji                # E0.7   [1] (🗣️)       speaking head\n1F5E8         ; Emoji                # E2.0   [1] (🗨️)       left speech bubble\n1F5EF         ; Emoji                # E0.7   [1] (🗯️)       right anger bubble\n1F5F3         ; Emoji                # E0.7   [1] (🗳️)       ballot box with ballot\n1F5FA         ; Emoji                # E0.7   [1] (🗺️)       world map\n1F5FB..1F5FF  ; Emoji                # E0.6   [5] (🗻..🗿)    mount fuji..moai\n1F600         ; Emoji                # E1.0   [1] (😀)       grinning face\n1F601..1F606  ; Emoji                # E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face\n1F607..1F608  ; Emoji                # E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns\n1F609..1F60D  ; Emoji                # E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes\n1F60E         ; Emoji                # E1.0   [1] (😎)       smiling face with sunglasses\n1F60F         ; Emoji                # E0.6   [1] (😏)       smirking face\n1F610         ; Emoji                # E0.7   [1] (😐)       neutral face\n1F611         ; Emoji                # E1.0   [1] (😑)       expressionless face\n1F612..1F614  ; Emoji                # E0.6   [3] (😒..😔)    unamused face..pensive face\n1F615         ; Emoji                # E1.0   [1] (😕)       confused face\n1F616         ; Emoji                # E0.6   [1] (😖)       confounded face\n1F617         ; Emoji                # E1.0   [1] (😗)       kissing face\n1F618         ; Emoji                # E0.6   [1] (😘)       face blowing a kiss\n1F619         ; Emoji                # E1.0   [1] (😙)       kissing face with smiling eyes\n1F61A         ; Emoji                # E0.6   [1] (😚)       kissing face with closed eyes\n1F61B         ; Emoji                # E1.0   [1] (😛)       face with tongue\n1F61C..1F61E  ; Emoji                # E0.6   [3] (😜..😞)    winking face with tongue..disappointed face\n1F61F         ; Emoji                # E1.0   [1] (😟)       worried face\n1F620..1F625  ; Emoji                # E0.6   [6] (😠..😥)    angry face..sad but relieved face\n1F626..1F627  ; Emoji                # E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face\n1F628..1F62B  ; Emoji                # E0.6   [4] (😨..😫)    fearful face..tired face\n1F62C         ; Emoji                # E1.0   [1] (😬)       grimacing face\n1F62D         ; Emoji                # E0.6   [1] (😭)       loudly crying face\n1F62E..1F62F  ; Emoji                # E1.0   [2] (😮..😯)    face with open mouth..hushed face\n1F630..1F633  ; Emoji                # E0.6   [4] (😰..😳)    anxious face with sweat..flushed face\n1F634         ; Emoji                # E1.0   [1] (😴)       sleeping face\n1F635         ; Emoji                # E0.6   [1] (😵)       face with crossed-out eyes\n1F636         ; Emoji                # E1.0   [1] (😶)       face without mouth\n1F637..1F640  ; Emoji                # E0.6  [10] (😷..🙀)    face with medical mask..weary cat\n1F641..1F644  ; Emoji                # E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes\n1F645..1F64F  ; Emoji                # E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands\n1F680         ; Emoji                # E0.6   [1] (🚀)       rocket\n1F681..1F682  ; Emoji                # E1.0   [2] (🚁..🚂)    helicopter..locomotive\n1F683..1F685  ; Emoji                # E0.6   [3] (🚃..🚅)    railway car..bullet train\n1F686         ; Emoji                # E1.0   [1] (🚆)       train\n1F687         ; Emoji                # E0.6   [1] (🚇)       metro\n1F688         ; Emoji                # E1.0   [1] (🚈)       light rail\n1F689         ; Emoji                # E0.6   [1] (🚉)       station\n1F68A..1F68B  ; Emoji                # E1.0   [2] (🚊..🚋)    tram..tram car\n1F68C         ; Emoji                # E0.6   [1] (🚌)       bus\n1F68D         ; Emoji                # E0.7   [1] (🚍)       oncoming bus\n1F68E         ; Emoji                # E1.0   [1] (🚎)       trolleybus\n1F68F         ; Emoji                # E0.6   [1] (🚏)       bus stop\n1F690         ; Emoji                # E1.0   [1] (🚐)       minibus\n1F691..1F693  ; Emoji                # E0.6   [3] (🚑..🚓)    ambulance..police car\n1F694         ; Emoji                # E0.7   [1] (🚔)       oncoming police car\n1F695         ; Emoji                # E0.6   [1] (🚕)       taxi\n1F696         ; Emoji                # E1.0   [1] (🚖)       oncoming taxi\n1F697         ; Emoji                # E0.6   [1] (🚗)       automobile\n1F698         ; Emoji                # E0.7   [1] (🚘)       oncoming automobile\n1F699..1F69A  ; Emoji                # E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck\n1F69B..1F6A1  ; Emoji                # E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway\n1F6A2         ; Emoji                # E0.6   [1] (🚢)       ship\n1F6A3         ; Emoji                # E1.0   [1] (🚣)       person rowing boat\n1F6A4..1F6A5  ; Emoji                # E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light\n1F6A6         ; Emoji                # E1.0   [1] (🚦)       vertical traffic light\n1F6A7..1F6AD  ; Emoji                # E0.6   [7] (🚧..🚭)    construction..no smoking\n1F6AE..1F6B1  ; Emoji                # E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water\n1F6B2         ; Emoji                # E0.6   [1] (🚲)       bicycle\n1F6B3..1F6B5  ; Emoji                # E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking\n1F6B6         ; Emoji                # E0.6   [1] (🚶)       person walking\n1F6B7..1F6B8  ; Emoji                # E1.0   [2] (🚷..🚸)    no pedestrians..children crossing\n1F6B9..1F6BE  ; Emoji                # E0.6   [6] (🚹..🚾)    men’s room..water closet\n1F6BF         ; Emoji                # E1.0   [1] (🚿)       shower\n1F6C0         ; Emoji                # E0.6   [1] (🛀)       person taking bath\n1F6C1..1F6C5  ; Emoji                # E1.0   [5] (🛁..🛅)    bathtub..left luggage\n1F6CB         ; Emoji                # E0.7   [1] (🛋️)       couch and lamp\n1F6CC         ; Emoji                # E1.0   [1] (🛌)       person in bed\n1F6CD..1F6CF  ; Emoji                # E0.7   [3] (🛍️..🛏️)    shopping bags..bed\n1F6D0         ; Emoji                # E1.0   [1] (🛐)       place of worship\n1F6D1..1F6D2  ; Emoji                # E3.0   [2] (🛑..🛒)    stop sign..shopping cart\n1F6D5         ; Emoji                # E12.0  [1] (🛕)       hindu temple\n1F6D6..1F6D7  ; Emoji                # E13.0  [2] (🛖..🛗)    hut..elevator\n1F6D8         ; Emoji                # E17.0  [1] (🛘)       landslide\n1F6DC         ; Emoji                # E15.0  [1] (🛜)       wireless\n1F6DD..1F6DF  ; Emoji                # E14.0  [3] (🛝..🛟)    playground slide..ring buoy\n1F6E0..1F6E5  ; Emoji                # E0.7   [6] (🛠️..🛥️)    hammer and wrench..motor boat\n1F6E9         ; Emoji                # E0.7   [1] (🛩️)       small airplane\n1F6EB..1F6EC  ; Emoji                # E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival\n1F6F0         ; Emoji                # E0.7   [1] (🛰️)       satellite\n1F6F3         ; Emoji                # E0.7   [1] (🛳️)       passenger ship\n1F6F4..1F6F6  ; Emoji                # E3.0   [3] (🛴..🛶)    kick scooter..canoe\n1F6F7..1F6F8  ; Emoji                # E5.0   [2] (🛷..🛸)    sled..flying saucer\n1F6F9         ; Emoji                # E11.0  [1] (🛹)       skateboard\n1F6FA         ; Emoji                # E12.0  [1] (🛺)       auto rickshaw\n1F6FB..1F6FC  ; Emoji                # E13.0  [2] (🛻..🛼)    pickup truck..roller skate\n1F7E0..1F7EB  ; Emoji                # E12.0 [12] (🟠..🟫)    orange circle..brown square\n1F7F0         ; Emoji                # E14.0  [1] (🟰)       heavy equals sign\n1F90C         ; Emoji                # E13.0  [1] (🤌)       pinched fingers\n1F90D..1F90F  ; Emoji                # E12.0  [3] (🤍..🤏)    white heart..pinching hand\n1F910..1F918  ; Emoji                # E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns\n1F919..1F91E  ; Emoji                # E3.0   [6] (🤙..🤞)    call me hand..crossed fingers\n1F91F         ; Emoji                # E5.0   [1] (🤟)       love-you gesture\n1F920..1F927  ; Emoji                # E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face\n1F928..1F92F  ; Emoji                # E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head\n1F930         ; Emoji                # E3.0   [1] (🤰)       pregnant woman\n1F931..1F932  ; Emoji                # E5.0   [2] (🤱..🤲)    breast-feeding..palms up together\n1F933..1F93A  ; Emoji                # E3.0   [8] (🤳..🤺)    selfie..person fencing\n1F93C..1F93E  ; Emoji                # E3.0   [3] (🤼..🤾)    people wrestling..person playing handball\n1F93F         ; Emoji                # E12.0  [1] (🤿)       diving mask\n1F940..1F945  ; Emoji                # E3.0   [6] (🥀..🥅)    wilted flower..goal net\n1F947..1F94B  ; Emoji                # E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform\n1F94C         ; Emoji                # E5.0   [1] (🥌)       curling stone\n1F94D..1F94F  ; Emoji                # E11.0  [3] (🥍..🥏)    lacrosse..flying disc\n1F950..1F95E  ; Emoji                # E3.0  [15] (🥐..🥞)    croissant..pancakes\n1F95F..1F96B  ; Emoji                # E5.0  [13] (🥟..🥫)    dumpling..canned food\n1F96C..1F970  ; Emoji                # E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts\n1F971         ; Emoji                # E12.0  [1] (🥱)       yawning face\n1F972         ; Emoji                # E13.0  [1] (🥲)       smiling face with tear\n1F973..1F976  ; Emoji                # E11.0  [4] (🥳..🥶)    partying face..cold face\n1F977..1F978  ; Emoji                # E13.0  [2] (🥷..🥸)    ninja..disguised face\n1F979         ; Emoji                # E14.0  [1] (🥹)       face holding back tears\n1F97A         ; Emoji                # E11.0  [1] (🥺)       pleading face\n1F97B         ; Emoji                # E12.0  [1] (🥻)       sari\n1F97C..1F97F  ; Emoji                # E11.0  [4] (🥼..🥿)    lab coat..flat shoe\n1F980..1F984  ; Emoji                # E1.0   [5] (🦀..🦄)    crab..unicorn\n1F985..1F991  ; Emoji                # E3.0  [13] (🦅..🦑)    eagle..squid\n1F992..1F997  ; Emoji                # E5.0   [6] (🦒..🦗)    giraffe..cricket\n1F998..1F9A2  ; Emoji                # E11.0 [11] (🦘..🦢)    kangaroo..swan\n1F9A3..1F9A4  ; Emoji                # E13.0  [2] (🦣..🦤)    mammoth..dodo\n1F9A5..1F9AA  ; Emoji                # E12.0  [6] (🦥..🦪)    sloth..oyster\n1F9AB..1F9AD  ; Emoji                # E13.0  [3] (🦫..🦭)    beaver..seal\n1F9AE..1F9AF  ; Emoji                # E12.0  [2] (🦮..🦯)    guide dog..white cane\n1F9B0..1F9B9  ; Emoji                # E11.0 [10] (🦰..🦹)    red hair..supervillain\n1F9BA..1F9BF  ; Emoji                # E12.0  [6] (🦺..🦿)    safety vest..mechanical leg\n1F9C0         ; Emoji                # E1.0   [1] (🧀)       cheese wedge\n1F9C1..1F9C2  ; Emoji                # E11.0  [2] (🧁..🧂)    cupcake..salt\n1F9C3..1F9CA  ; Emoji                # E12.0  [8] (🧃..🧊)    beverage box..ice\n1F9CB         ; Emoji                # E13.0  [1] (🧋)       bubble tea\n1F9CC         ; Emoji                # E14.0  [1] (🧌)       troll\n1F9CD..1F9CF  ; Emoji                # E12.0  [3] (🧍..🧏)    person standing..deaf person\n1F9D0..1F9E6  ; Emoji                # E5.0  [23] (🧐..🧦)    face with monocle..socks\n1F9E7..1F9FF  ; Emoji                # E11.0 [25] (🧧..🧿)    red envelope..nazar amulet\n1FA70..1FA73  ; Emoji                # E12.0  [4] (🩰..🩳)    ballet shoes..shorts\n1FA74         ; Emoji                # E13.0  [1] (🩴)       thong sandal\n1FA75..1FA77  ; Emoji                # E15.0  [3] (🩵..🩷)    light blue heart..pink heart\n1FA78..1FA7A  ; Emoji                # E12.0  [3] (🩸..🩺)    drop of blood..stethoscope\n1FA7B..1FA7C  ; Emoji                # E14.0  [2] (🩻..🩼)    x-ray..crutch\n1FA80..1FA82  ; Emoji                # E12.0  [3] (🪀..🪂)    yo-yo..parachute\n1FA83..1FA86  ; Emoji                # E13.0  [4] (🪃..🪆)    boomerang..nesting dolls\n1FA87..1FA88  ; Emoji                # E15.0  [2] (🪇..🪈)    maracas..flute\n1FA89         ; Emoji                # E16.0  [1] (🪉)       harp\n1FA8A         ; Emoji                # E17.0  [1] (🪊)       trombone\n1FA8E         ; Emoji                # E17.0  [1] (🪎)       treasure chest\n1FA8F         ; Emoji                # E16.0  [1] (🪏)       shovel\n1FA90..1FA95  ; Emoji                # E12.0  [6] (🪐..🪕)    ringed planet..banjo\n1FA96..1FAA8  ; Emoji                # E13.0 [19] (🪖..🪨)    military helmet..rock\n1FAA9..1FAAC  ; Emoji                # E14.0  [4] (🪩..🪬)    mirror ball..hamsa\n1FAAD..1FAAF  ; Emoji                # E15.0  [3] (🪭..🪯)    folding hand fan..khanda\n1FAB0..1FAB6  ; Emoji                # E13.0  [7] (🪰..🪶)    fly..feather\n1FAB7..1FABA  ; Emoji                # E14.0  [4] (🪷..🪺)    lotus..nest with eggs\n1FABB..1FABD  ; Emoji                # E15.0  [3] (🪻..🪽)    hyacinth..wing\n1FABE         ; Emoji                # E16.0  [1] (🪾)       leafless tree\n1FABF         ; Emoji                # E15.0  [1] (🪿)       goose\n1FAC0..1FAC2  ; Emoji                # E13.0  [3] (🫀..🫂)    anatomical heart..people hugging\n1FAC3..1FAC5  ; Emoji                # E14.0  [3] (🫃..🫅)    pregnant man..person with crown\n1FAC6         ; Emoji                # E16.0  [1] (🫆)       fingerprint\n1FAC8         ; Emoji                # E17.0  [1] (🫈)       hairy creature\n1FACD         ; Emoji                # E17.0  [1] (🫍)       orca\n1FACE..1FACF  ; Emoji                # E15.0  [2] (🫎..🫏)    moose..donkey\n1FAD0..1FAD6  ; Emoji                # E13.0  [7] (🫐..🫖)    blueberries..teapot\n1FAD7..1FAD9  ; Emoji                # E14.0  [3] (🫗..🫙)    pouring liquid..jar\n1FADA..1FADB  ; Emoji                # E15.0  [2] (🫚..🫛)    ginger root..pea pod\n1FADC         ; Emoji                # E16.0  [1] (🫜)       root vegetable\n1FADF         ; Emoji                # E16.0  [1] (🫟)       splatter\n1FAE0..1FAE7  ; Emoji                # E14.0  [8] (🫠..🫧)    melting face..bubbles\n1FAE8         ; Emoji                # E15.0  [1] (🫨)       shaking face\n1FAE9         ; Emoji                # E16.0  [1] (🫩)       face with bags under eyes\n1FAEA         ; Emoji                # E17.0  [1] (🫪)       distorted face\n1FAEF         ; Emoji                # E17.0  [1] (🫯)       fight cloud\n1FAF0..1FAF6  ; Emoji                # E14.0  [7] (🫰..🫶)    hand with index finger and thumb crossed..heart hands\n1FAF7..1FAF8  ; Emoji                # E15.0  [2] (🫷..🫸)    leftwards pushing hand..rightwards pushing hand\n\n# Total elements: 1438\n\n# ================================================\n\n# All omitted code points have Emoji_Presentation=No\n\n231A..231B    ; Emoji_Presentation   # E0.6   [2] (⌚..⌛)    watch..hourglass done\n23E9..23EC    ; Emoji_Presentation   # E0.6   [4] (⏩..⏬)    fast-forward button..fast down button\n23F0          ; Emoji_Presentation   # E0.6   [1] (⏰)       alarm clock\n23F3          ; Emoji_Presentation   # E0.6   [1] (⏳)       hourglass not done\n25FD..25FE    ; Emoji_Presentation   # E0.6   [2] (◽..◾)    white medium-small square..black medium-small square\n2614..2615    ; Emoji_Presentation   # E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage\n2648..2653    ; Emoji_Presentation   # E0.6  [12] (♈..♓)    Aries..Pisces\n267F          ; Emoji_Presentation   # E0.6   [1] (♿)       wheelchair symbol\n2693          ; Emoji_Presentation   # E0.6   [1] (⚓)       anchor\n26A1          ; Emoji_Presentation   # E0.6   [1] (⚡)       high voltage\n26AA..26AB    ; Emoji_Presentation   # E0.6   [2] (⚪..⚫)    white circle..black circle\n26BD..26BE    ; Emoji_Presentation   # E0.6   [2] (⚽..⚾)    soccer ball..baseball\n26C4..26C5    ; Emoji_Presentation   # E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud\n26CE          ; Emoji_Presentation   # E0.6   [1] (⛎)       Ophiuchus\n26D4          ; Emoji_Presentation   # E0.6   [1] (⛔)       no entry\n26EA          ; Emoji_Presentation   # E0.6   [1] (⛪)       church\n26F2..26F3    ; Emoji_Presentation   # E0.6   [2] (⛲..⛳)    fountain..flag in hole\n26F5          ; Emoji_Presentation   # E0.6   [1] (⛵)       sailboat\n26FA          ; Emoji_Presentation   # E0.6   [1] (⛺)       tent\n26FD          ; Emoji_Presentation   # E0.6   [1] (⛽)       fuel pump\n2705          ; Emoji_Presentation   # E0.6   [1] (✅)       check mark button\n270A..270B    ; Emoji_Presentation   # E0.6   [2] (✊..✋)    raised fist..raised hand\n2728          ; Emoji_Presentation   # E0.6   [1] (✨)       sparkles\n274C          ; Emoji_Presentation   # E0.6   [1] (❌)       cross mark\n274E          ; Emoji_Presentation   # E0.6   [1] (❎)       cross mark button\n2753..2755    ; Emoji_Presentation   # E0.6   [3] (❓..❕)    red question mark..white exclamation mark\n2757          ; Emoji_Presentation   # E0.6   [1] (❗)       red exclamation mark\n2795..2797    ; Emoji_Presentation   # E0.6   [3] (➕..➗)    plus..divide\n27B0          ; Emoji_Presentation   # E0.6   [1] (➰)       curly loop\n27BF          ; Emoji_Presentation   # E1.0   [1] (➿)       double curly loop\n2B1B..2B1C    ; Emoji_Presentation   # E0.6   [2] (⬛..⬜)    black large square..white large square\n2B50          ; Emoji_Presentation   # E0.6   [1] (⭐)       star\n2B55          ; Emoji_Presentation   # E0.6   [1] (⭕)       hollow red circle\n1F004         ; Emoji_Presentation   # E0.6   [1] (🀄)       mahjong red dragon\n1F0CF         ; Emoji_Presentation   # E0.6   [1] (🃏)       joker\n1F18E         ; Emoji_Presentation   # E0.6   [1] (🆎)       AB button (blood type)\n1F191..1F19A  ; Emoji_Presentation   # E0.6  [10] (🆑..🆚)    CL button..VS button\n1F1E6..1F1FF  ; Emoji_Presentation   # E0.0  [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z\n1F201         ; Emoji_Presentation   # E0.6   [1] (🈁)       Japanese “here” button\n1F21A         ; Emoji_Presentation   # E0.6   [1] (🈚)       Japanese “free of charge” button\n1F22F         ; Emoji_Presentation   # E0.6   [1] (🈯)       Japanese “reserved” button\n1F232..1F236  ; Emoji_Presentation   # E0.6   [5] (🈲..🈶)    Japanese “prohibited” button..Japanese “not free of charge” button\n1F238..1F23A  ; Emoji_Presentation   # E0.6   [3] (🈸..🈺)    Japanese “application” button..Japanese “open for business” button\n1F250..1F251  ; Emoji_Presentation   # E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button\n1F300..1F30C  ; Emoji_Presentation   # E0.6  [13] (🌀..🌌)    cyclone..milky way\n1F30D..1F30E  ; Emoji_Presentation   # E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas\n1F30F         ; Emoji_Presentation   # E0.6   [1] (🌏)       globe showing Asia-Australia\n1F310         ; Emoji_Presentation   # E1.0   [1] (🌐)       globe with meridians\n1F311         ; Emoji_Presentation   # E0.6   [1] (🌑)       new moon\n1F312         ; Emoji_Presentation   # E1.0   [1] (🌒)       waxing crescent moon\n1F313..1F315  ; Emoji_Presentation   # E0.6   [3] (🌓..🌕)    first quarter moon..full moon\n1F316..1F318  ; Emoji_Presentation   # E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon\n1F319         ; Emoji_Presentation   # E0.6   [1] (🌙)       crescent moon\n1F31A         ; Emoji_Presentation   # E1.0   [1] (🌚)       new moon face\n1F31B         ; Emoji_Presentation   # E0.6   [1] (🌛)       first quarter moon face\n1F31C         ; Emoji_Presentation   # E0.7   [1] (🌜)       last quarter moon face\n1F31D..1F31E  ; Emoji_Presentation   # E1.0   [2] (🌝..🌞)    full moon face..sun with face\n1F31F..1F320  ; Emoji_Presentation   # E0.6   [2] (🌟..🌠)    glowing star..shooting star\n1F32D..1F32F  ; Emoji_Presentation   # E1.0   [3] (🌭..🌯)    hot dog..burrito\n1F330..1F331  ; Emoji_Presentation   # E0.6   [2] (🌰..🌱)    chestnut..seedling\n1F332..1F333  ; Emoji_Presentation   # E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree\n1F334..1F335  ; Emoji_Presentation   # E0.6   [2] (🌴..🌵)    palm tree..cactus\n1F337..1F34A  ; Emoji_Presentation   # E0.6  [20] (🌷..🍊)    tulip..tangerine\n1F34B         ; Emoji_Presentation   # E1.0   [1] (🍋)       lemon\n1F34C..1F34F  ; Emoji_Presentation   # E0.6   [4] (🍌..🍏)    banana..green apple\n1F350         ; Emoji_Presentation   # E1.0   [1] (🍐)       pear\n1F351..1F37B  ; Emoji_Presentation   # E0.6  [43] (🍑..🍻)    peach..clinking beer mugs\n1F37C         ; Emoji_Presentation   # E1.0   [1] (🍼)       baby bottle\n1F37E..1F37F  ; Emoji_Presentation   # E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn\n1F380..1F393  ; Emoji_Presentation   # E0.6  [20] (🎀..🎓)    ribbon..graduation cap\n1F3A0..1F3C4  ; Emoji_Presentation   # E0.6  [37] (🎠..🏄)    carousel horse..person surfing\n1F3C5         ; Emoji_Presentation   # E1.0   [1] (🏅)       sports medal\n1F3C6         ; Emoji_Presentation   # E0.6   [1] (🏆)       trophy\n1F3C7         ; Emoji_Presentation   # E1.0   [1] (🏇)       horse racing\n1F3C8         ; Emoji_Presentation   # E0.6   [1] (🏈)       american football\n1F3C9         ; Emoji_Presentation   # E1.0   [1] (🏉)       rugby football\n1F3CA         ; Emoji_Presentation   # E0.6   [1] (🏊)       person swimming\n1F3CF..1F3D3  ; Emoji_Presentation   # E1.0   [5] (🏏..🏓)    cricket game..ping pong\n1F3E0..1F3E3  ; Emoji_Presentation   # E0.6   [4] (🏠..🏣)    house..Japanese post office\n1F3E4         ; Emoji_Presentation   # E1.0   [1] (🏤)       post office\n1F3E5..1F3F0  ; Emoji_Presentation   # E0.6  [12] (🏥..🏰)    hospital..castle\n1F3F4         ; Emoji_Presentation   # E1.0   [1] (🏴)       black flag\n1F3F8..1F407  ; Emoji_Presentation   # E1.0  [16] (🏸..🐇)    badminton..rabbit\n1F408         ; Emoji_Presentation   # E0.7   [1] (🐈)       cat\n1F409..1F40B  ; Emoji_Presentation   # E1.0   [3] (🐉..🐋)    dragon..whale\n1F40C..1F40E  ; Emoji_Presentation   # E0.6   [3] (🐌..🐎)    snail..horse\n1F40F..1F410  ; Emoji_Presentation   # E1.0   [2] (🐏..🐐)    ram..goat\n1F411..1F412  ; Emoji_Presentation   # E0.6   [2] (🐑..🐒)    ewe..monkey\n1F413         ; Emoji_Presentation   # E1.0   [1] (🐓)       rooster\n1F414         ; Emoji_Presentation   # E0.6   [1] (🐔)       chicken\n1F415         ; Emoji_Presentation   # E0.7   [1] (🐕)       dog\n1F416         ; Emoji_Presentation   # E1.0   [1] (🐖)       pig\n1F417..1F429  ; Emoji_Presentation   # E0.6  [19] (🐗..🐩)    boar..poodle\n1F42A         ; Emoji_Presentation   # E1.0   [1] (🐪)       camel\n1F42B..1F43E  ; Emoji_Presentation   # E0.6  [20] (🐫..🐾)    two-hump camel..paw prints\n1F440         ; Emoji_Presentation   # E0.6   [1] (👀)       eyes\n1F442..1F464  ; Emoji_Presentation   # E0.6  [35] (👂..👤)    ear..bust in silhouette\n1F465         ; Emoji_Presentation   # E1.0   [1] (👥)       busts in silhouette\n1F466..1F46B  ; Emoji_Presentation   # E0.6   [6] (👦..👫)    boy..woman and man holding hands\n1F46C..1F46D  ; Emoji_Presentation   # E1.0   [2] (👬..👭)    men holding hands..women holding hands\n1F46E..1F4AC  ; Emoji_Presentation   # E0.6  [63] (👮..💬)    police officer..speech balloon\n1F4AD         ; Emoji_Presentation   # E1.0   [1] (💭)       thought balloon\n1F4AE..1F4B5  ; Emoji_Presentation   # E0.6   [8] (💮..💵)    white flower..dollar banknote\n1F4B6..1F4B7  ; Emoji_Presentation   # E1.0   [2] (💶..💷)    euro banknote..pound banknote\n1F4B8..1F4EB  ; Emoji_Presentation   # E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag\n1F4EC..1F4ED  ; Emoji_Presentation   # E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag\n1F4EE         ; Emoji_Presentation   # E0.6   [1] (📮)       postbox\n1F4EF         ; Emoji_Presentation   # E1.0   [1] (📯)       postal horn\n1F4F0..1F4F4  ; Emoji_Presentation   # E0.6   [5] (📰..📴)    newspaper..mobile phone off\n1F4F5         ; Emoji_Presentation   # E1.0   [1] (📵)       no mobile phones\n1F4F6..1F4F7  ; Emoji_Presentation   # E0.6   [2] (📶..📷)    antenna bars..camera\n1F4F8         ; Emoji_Presentation   # E1.0   [1] (📸)       camera with flash\n1F4F9..1F4FC  ; Emoji_Presentation   # E0.6   [4] (📹..📼)    video camera..videocassette\n1F4FF..1F502  ; Emoji_Presentation   # E1.0   [4] (📿..🔂)    prayer beads..repeat single button\n1F503         ; Emoji_Presentation   # E0.6   [1] (🔃)       clockwise vertical arrows\n1F504..1F507  ; Emoji_Presentation   # E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker\n1F508         ; Emoji_Presentation   # E0.7   [1] (🔈)       speaker low volume\n1F509         ; Emoji_Presentation   # E1.0   [1] (🔉)       speaker medium volume\n1F50A..1F514  ; Emoji_Presentation   # E0.6  [11] (🔊..🔔)    speaker high volume..bell\n1F515         ; Emoji_Presentation   # E1.0   [1] (🔕)       bell with slash\n1F516..1F52B  ; Emoji_Presentation   # E0.6  [22] (🔖..🔫)    bookmark..water pistol\n1F52C..1F52D  ; Emoji_Presentation   # E1.0   [2] (🔬..🔭)    microscope..telescope\n1F52E..1F53D  ; Emoji_Presentation   # E0.6  [16] (🔮..🔽)    crystal ball..downwards button\n1F54B..1F54E  ; Emoji_Presentation   # E1.0   [4] (🕋..🕎)    kaaba..menorah\n1F550..1F55B  ; Emoji_Presentation   # E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock\n1F55C..1F567  ; Emoji_Presentation   # E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty\n1F57A         ; Emoji_Presentation   # E3.0   [1] (🕺)       man dancing\n1F595..1F596  ; Emoji_Presentation   # E1.0   [2] (🖕..🖖)    middle finger..vulcan salute\n1F5A4         ; Emoji_Presentation   # E3.0   [1] (🖤)       black heart\n1F5FB..1F5FF  ; Emoji_Presentation   # E0.6   [5] (🗻..🗿)    mount fuji..moai\n1F600         ; Emoji_Presentation   # E1.0   [1] (😀)       grinning face\n1F601..1F606  ; Emoji_Presentation   # E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face\n1F607..1F608  ; Emoji_Presentation   # E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns\n1F609..1F60D  ; Emoji_Presentation   # E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes\n1F60E         ; Emoji_Presentation   # E1.0   [1] (😎)       smiling face with sunglasses\n1F60F         ; Emoji_Presentation   # E0.6   [1] (😏)       smirking face\n1F610         ; Emoji_Presentation   # E0.7   [1] (😐)       neutral face\n1F611         ; Emoji_Presentation   # E1.0   [1] (😑)       expressionless face\n1F612..1F614  ; Emoji_Presentation   # E0.6   [3] (😒..😔)    unamused face..pensive face\n1F615         ; Emoji_Presentation   # E1.0   [1] (😕)       confused face\n1F616         ; Emoji_Presentation   # E0.6   [1] (😖)       confounded face\n1F617         ; Emoji_Presentation   # E1.0   [1] (😗)       kissing face\n1F618         ; Emoji_Presentation   # E0.6   [1] (😘)       face blowing a kiss\n1F619         ; Emoji_Presentation   # E1.0   [1] (😙)       kissing face with smiling eyes\n1F61A         ; Emoji_Presentation   # E0.6   [1] (😚)       kissing face with closed eyes\n1F61B         ; Emoji_Presentation   # E1.0   [1] (😛)       face with tongue\n1F61C..1F61E  ; Emoji_Presentation   # E0.6   [3] (😜..😞)    winking face with tongue..disappointed face\n1F61F         ; Emoji_Presentation   # E1.0   [1] (😟)       worried face\n1F620..1F625  ; Emoji_Presentation   # E0.6   [6] (😠..😥)    angry face..sad but relieved face\n1F626..1F627  ; Emoji_Presentation   # E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face\n1F628..1F62B  ; Emoji_Presentation   # E0.6   [4] (😨..😫)    fearful face..tired face\n1F62C         ; Emoji_Presentation   # E1.0   [1] (😬)       grimacing face\n1F62D         ; Emoji_Presentation   # E0.6   [1] (😭)       loudly crying face\n1F62E..1F62F  ; Emoji_Presentation   # E1.0   [2] (😮..😯)    face with open mouth..hushed face\n1F630..1F633  ; Emoji_Presentation   # E0.6   [4] (😰..😳)    anxious face with sweat..flushed face\n1F634         ; Emoji_Presentation   # E1.0   [1] (😴)       sleeping face\n1F635         ; Emoji_Presentation   # E0.6   [1] (😵)       face with crossed-out eyes\n1F636         ; Emoji_Presentation   # E1.0   [1] (😶)       face without mouth\n1F637..1F640  ; Emoji_Presentation   # E0.6  [10] (😷..🙀)    face with medical mask..weary cat\n1F641..1F644  ; Emoji_Presentation   # E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes\n1F645..1F64F  ; Emoji_Presentation   # E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands\n1F680         ; Emoji_Presentation   # E0.6   [1] (🚀)       rocket\n1F681..1F682  ; Emoji_Presentation   # E1.0   [2] (🚁..🚂)    helicopter..locomotive\n1F683..1F685  ; Emoji_Presentation   # E0.6   [3] (🚃..🚅)    railway car..bullet train\n1F686         ; Emoji_Presentation   # E1.0   [1] (🚆)       train\n1F687         ; Emoji_Presentation   # E0.6   [1] (🚇)       metro\n1F688         ; Emoji_Presentation   # E1.0   [1] (🚈)       light rail\n1F689         ; Emoji_Presentation   # E0.6   [1] (🚉)       station\n1F68A..1F68B  ; Emoji_Presentation   # E1.0   [2] (🚊..🚋)    tram..tram car\n1F68C         ; Emoji_Presentation   # E0.6   [1] (🚌)       bus\n1F68D         ; Emoji_Presentation   # E0.7   [1] (🚍)       oncoming bus\n1F68E         ; Emoji_Presentation   # E1.0   [1] (🚎)       trolleybus\n1F68F         ; Emoji_Presentation   # E0.6   [1] (🚏)       bus stop\n1F690         ; Emoji_Presentation   # E1.0   [1] (🚐)       minibus\n1F691..1F693  ; Emoji_Presentation   # E0.6   [3] (🚑..🚓)    ambulance..police car\n1F694         ; Emoji_Presentation   # E0.7   [1] (🚔)       oncoming police car\n1F695         ; Emoji_Presentation   # E0.6   [1] (🚕)       taxi\n1F696         ; Emoji_Presentation   # E1.0   [1] (🚖)       oncoming taxi\n1F697         ; Emoji_Presentation   # E0.6   [1] (🚗)       automobile\n1F698         ; Emoji_Presentation   # E0.7   [1] (🚘)       oncoming automobile\n1F699..1F69A  ; Emoji_Presentation   # E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck\n1F69B..1F6A1  ; Emoji_Presentation   # E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway\n1F6A2         ; Emoji_Presentation   # E0.6   [1] (🚢)       ship\n1F6A3         ; Emoji_Presentation   # E1.0   [1] (🚣)       person rowing boat\n1F6A4..1F6A5  ; Emoji_Presentation   # E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light\n1F6A6         ; Emoji_Presentation   # E1.0   [1] (🚦)       vertical traffic light\n1F6A7..1F6AD  ; Emoji_Presentation   # E0.6   [7] (🚧..🚭)    construction..no smoking\n1F6AE..1F6B1  ; Emoji_Presentation   # E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water\n1F6B2         ; Emoji_Presentation   # E0.6   [1] (🚲)       bicycle\n1F6B3..1F6B5  ; Emoji_Presentation   # E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking\n1F6B6         ; Emoji_Presentation   # E0.6   [1] (🚶)       person walking\n1F6B7..1F6B8  ; Emoji_Presentation   # E1.0   [2] (🚷..🚸)    no pedestrians..children crossing\n1F6B9..1F6BE  ; Emoji_Presentation   # E0.6   [6] (🚹..🚾)    men’s room..water closet\n1F6BF         ; Emoji_Presentation   # E1.0   [1] (🚿)       shower\n1F6C0         ; Emoji_Presentation   # E0.6   [1] (🛀)       person taking bath\n1F6C1..1F6C5  ; Emoji_Presentation   # E1.0   [5] (🛁..🛅)    bathtub..left luggage\n1F6CC         ; Emoji_Presentation   # E1.0   [1] (🛌)       person in bed\n1F6D0         ; Emoji_Presentation   # E1.0   [1] (🛐)       place of worship\n1F6D1..1F6D2  ; Emoji_Presentation   # E3.0   [2] (🛑..🛒)    stop sign..shopping cart\n1F6D5         ; Emoji_Presentation   # E12.0  [1] (🛕)       hindu temple\n1F6D6..1F6D7  ; Emoji_Presentation   # E13.0  [2] (🛖..🛗)    hut..elevator\n1F6D8         ; Emoji_Presentation   # E17.0  [1] (🛘)       landslide\n1F6DC         ; Emoji_Presentation   # E15.0  [1] (🛜)       wireless\n1F6DD..1F6DF  ; Emoji_Presentation   # E14.0  [3] (🛝..🛟)    playground slide..ring buoy\n1F6EB..1F6EC  ; Emoji_Presentation   # E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival\n1F6F4..1F6F6  ; Emoji_Presentation   # E3.0   [3] (🛴..🛶)    kick scooter..canoe\n1F6F7..1F6F8  ; Emoji_Presentation   # E5.0   [2] (🛷..🛸)    sled..flying saucer\n1F6F9         ; Emoji_Presentation   # E11.0  [1] (🛹)       skateboard\n1F6FA         ; Emoji_Presentation   # E12.0  [1] (🛺)       auto rickshaw\n1F6FB..1F6FC  ; Emoji_Presentation   # E13.0  [2] (🛻..🛼)    pickup truck..roller skate\n1F7E0..1F7EB  ; Emoji_Presentation   # E12.0 [12] (🟠..🟫)    orange circle..brown square\n1F7F0         ; Emoji_Presentation   # E14.0  [1] (🟰)       heavy equals sign\n1F90C         ; Emoji_Presentation   # E13.0  [1] (🤌)       pinched fingers\n1F90D..1F90F  ; Emoji_Presentation   # E12.0  [3] (🤍..🤏)    white heart..pinching hand\n1F910..1F918  ; Emoji_Presentation   # E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns\n1F919..1F91E  ; Emoji_Presentation   # E3.0   [6] (🤙..🤞)    call me hand..crossed fingers\n1F91F         ; Emoji_Presentation   # E5.0   [1] (🤟)       love-you gesture\n1F920..1F927  ; Emoji_Presentation   # E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face\n1F928..1F92F  ; Emoji_Presentation   # E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head\n1F930         ; Emoji_Presentation   # E3.0   [1] (🤰)       pregnant woman\n1F931..1F932  ; Emoji_Presentation   # E5.0   [2] (🤱..🤲)    breast-feeding..palms up together\n1F933..1F93A  ; Emoji_Presentation   # E3.0   [8] (🤳..🤺)    selfie..person fencing\n1F93C..1F93E  ; Emoji_Presentation   # E3.0   [3] (🤼..🤾)    people wrestling..person playing handball\n1F93F         ; Emoji_Presentation   # E12.0  [1] (🤿)       diving mask\n1F940..1F945  ; Emoji_Presentation   # E3.0   [6] (🥀..🥅)    wilted flower..goal net\n1F947..1F94B  ; Emoji_Presentation   # E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform\n1F94C         ; Emoji_Presentation   # E5.0   [1] (🥌)       curling stone\n1F94D..1F94F  ; Emoji_Presentation   # E11.0  [3] (🥍..🥏)    lacrosse..flying disc\n1F950..1F95E  ; Emoji_Presentation   # E3.0  [15] (🥐..🥞)    croissant..pancakes\n1F95F..1F96B  ; Emoji_Presentation   # E5.0  [13] (🥟..🥫)    dumpling..canned food\n1F96C..1F970  ; Emoji_Presentation   # E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts\n1F971         ; Emoji_Presentation   # E12.0  [1] (🥱)       yawning face\n1F972         ; Emoji_Presentation   # E13.0  [1] (🥲)       smiling face with tear\n1F973..1F976  ; Emoji_Presentation   # E11.0  [4] (🥳..🥶)    partying face..cold face\n1F977..1F978  ; Emoji_Presentation   # E13.0  [2] (🥷..🥸)    ninja..disguised face\n1F979         ; Emoji_Presentation   # E14.0  [1] (🥹)       face holding back tears\n1F97A         ; Emoji_Presentation   # E11.0  [1] (🥺)       pleading face\n1F97B         ; Emoji_Presentation   # E12.0  [1] (🥻)       sari\n1F97C..1F97F  ; Emoji_Presentation   # E11.0  [4] (🥼..🥿)    lab coat..flat shoe\n1F980..1F984  ; Emoji_Presentation   # E1.0   [5] (🦀..🦄)    crab..unicorn\n1F985..1F991  ; Emoji_Presentation   # E3.0  [13] (🦅..🦑)    eagle..squid\n1F992..1F997  ; Emoji_Presentation   # E5.0   [6] (🦒..🦗)    giraffe..cricket\n1F998..1F9A2  ; Emoji_Presentation   # E11.0 [11] (🦘..🦢)    kangaroo..swan\n1F9A3..1F9A4  ; Emoji_Presentation   # E13.0  [2] (🦣..🦤)    mammoth..dodo\n1F9A5..1F9AA  ; Emoji_Presentation   # E12.0  [6] (🦥..🦪)    sloth..oyster\n1F9AB..1F9AD  ; Emoji_Presentation   # E13.0  [3] (🦫..🦭)    beaver..seal\n1F9AE..1F9AF  ; Emoji_Presentation   # E12.0  [2] (🦮..🦯)    guide dog..white cane\n1F9B0..1F9B9  ; Emoji_Presentation   # E11.0 [10] (🦰..🦹)    red hair..supervillain\n1F9BA..1F9BF  ; Emoji_Presentation   # E12.0  [6] (🦺..🦿)    safety vest..mechanical leg\n1F9C0         ; Emoji_Presentation   # E1.0   [1] (🧀)       cheese wedge\n1F9C1..1F9C2  ; Emoji_Presentation   # E11.0  [2] (🧁..🧂)    cupcake..salt\n1F9C3..1F9CA  ; Emoji_Presentation   # E12.0  [8] (🧃..🧊)    beverage box..ice\n1F9CB         ; Emoji_Presentation   # E13.0  [1] (🧋)       bubble tea\n1F9CC         ; Emoji_Presentation   # E14.0  [1] (🧌)       troll\n1F9CD..1F9CF  ; Emoji_Presentation   # E12.0  [3] (🧍..🧏)    person standing..deaf person\n1F9D0..1F9E6  ; Emoji_Presentation   # E5.0  [23] (🧐..🧦)    face with monocle..socks\n1F9E7..1F9FF  ; Emoji_Presentation   # E11.0 [25] (🧧..🧿)    red envelope..nazar amulet\n1FA70..1FA73  ; Emoji_Presentation   # E12.0  [4] (🩰..🩳)    ballet shoes..shorts\n1FA74         ; Emoji_Presentation   # E13.0  [1] (🩴)       thong sandal\n1FA75..1FA77  ; Emoji_Presentation   # E15.0  [3] (🩵..🩷)    light blue heart..pink heart\n1FA78..1FA7A  ; Emoji_Presentation   # E12.0  [3] (🩸..🩺)    drop of blood..stethoscope\n1FA7B..1FA7C  ; Emoji_Presentation   # E14.0  [2] (🩻..🩼)    x-ray..crutch\n1FA80..1FA82  ; Emoji_Presentation   # E12.0  [3] (🪀..🪂)    yo-yo..parachute\n1FA83..1FA86  ; Emoji_Presentation   # E13.0  [4] (🪃..🪆)    boomerang..nesting dolls\n1FA87..1FA88  ; Emoji_Presentation   # E15.0  [2] (🪇..🪈)    maracas..flute\n1FA89         ; Emoji_Presentation   # E16.0  [1] (🪉)       harp\n1FA8A         ; Emoji_Presentation   # E17.0  [1] (🪊)       trombone\n1FA8E         ; Emoji_Presentation   # E17.0  [1] (🪎)       treasure chest\n1FA8F         ; Emoji_Presentation   # E16.0  [1] (🪏)       shovel\n1FA90..1FA95  ; Emoji_Presentation   # E12.0  [6] (🪐..🪕)    ringed planet..banjo\n1FA96..1FAA8  ; Emoji_Presentation   # E13.0 [19] (🪖..🪨)    military helmet..rock\n1FAA9..1FAAC  ; Emoji_Presentation   # E14.0  [4] (🪩..🪬)    mirror ball..hamsa\n1FAAD..1FAAF  ; Emoji_Presentation   # E15.0  [3] (🪭..🪯)    folding hand fan..khanda\n1FAB0..1FAB6  ; Emoji_Presentation   # E13.0  [7] (🪰..🪶)    fly..feather\n1FAB7..1FABA  ; Emoji_Presentation   # E14.0  [4] (🪷..🪺)    lotus..nest with eggs\n1FABB..1FABD  ; Emoji_Presentation   # E15.0  [3] (🪻..🪽)    hyacinth..wing\n1FABE         ; Emoji_Presentation   # E16.0  [1] (🪾)       leafless tree\n1FABF         ; Emoji_Presentation   # E15.0  [1] (🪿)       goose\n1FAC0..1FAC2  ; Emoji_Presentation   # E13.0  [3] (🫀..🫂)    anatomical heart..people hugging\n1FAC3..1FAC5  ; Emoji_Presentation   # E14.0  [3] (🫃..🫅)    pregnant man..person with crown\n1FAC6         ; Emoji_Presentation   # E16.0  [1] (🫆)       fingerprint\n1FAC8         ; Emoji_Presentation   # E17.0  [1] (🫈)       hairy creature\n1FACD         ; Emoji_Presentation   # E17.0  [1] (🫍)       orca\n1FACE..1FACF  ; Emoji_Presentation   # E15.0  [2] (🫎..🫏)    moose..donkey\n1FAD0..1FAD6  ; Emoji_Presentation   # E13.0  [7] (🫐..🫖)    blueberries..teapot\n1FAD7..1FAD9  ; Emoji_Presentation   # E14.0  [3] (🫗..🫙)    pouring liquid..jar\n1FADA..1FADB  ; Emoji_Presentation   # E15.0  [2] (🫚..🫛)    ginger root..pea pod\n1FADC         ; Emoji_Presentation   # E16.0  [1] (🫜)       root vegetable\n1FADF         ; Emoji_Presentation   # E16.0  [1] (🫟)       splatter\n1FAE0..1FAE7  ; Emoji_Presentation   # E14.0  [8] (🫠..🫧)    melting face..bubbles\n1FAE8         ; Emoji_Presentation   # E15.0  [1] (🫨)       shaking face\n1FAE9         ; Emoji_Presentation   # E16.0  [1] (🫩)       face with bags under eyes\n1FAEA         ; Emoji_Presentation   # E17.0  [1] (🫪)       distorted face\n1FAEF         ; Emoji_Presentation   # E17.0  [1] (🫯)       fight cloud\n1FAF0..1FAF6  ; Emoji_Presentation   # E14.0  [7] (🫰..🫶)    hand with index finger and thumb crossed..heart hands\n1FAF7..1FAF8  ; Emoji_Presentation   # E15.0  [2] (🫷..🫸)    leftwards pushing hand..rightwards pushing hand\n\n# Total elements: 1219\n\n# ================================================\n\n# All omitted code points have Emoji_Modifier=No\n\n1F3FB..1F3FF  ; Emoji_Modifier       # E1.0   [5] (🏻..🏿)    light skin tone..dark skin tone\n\n# Total elements: 5\n\n# ================================================\n\n# All omitted code points have Emoji_Modifier_Base=No\n\n261D          ; Emoji_Modifier_Base  # E0.6   [1] (☝️)       index pointing up\n26F9          ; Emoji_Modifier_Base  # E0.7   [1] (⛹️)       person bouncing ball\n270A..270C    ; Emoji_Modifier_Base  # E0.6   [3] (✊..✌️)    raised fist..victory hand\n270D          ; Emoji_Modifier_Base  # E0.7   [1] (✍️)       writing hand\n1F385         ; Emoji_Modifier_Base  # E0.6   [1] (🎅)       Santa Claus\n1F3C2..1F3C4  ; Emoji_Modifier_Base  # E0.6   [3] (🏂..🏄)    snowboarder..person surfing\n1F3C7         ; Emoji_Modifier_Base  # E1.0   [1] (🏇)       horse racing\n1F3CA         ; Emoji_Modifier_Base  # E0.6   [1] (🏊)       person swimming\n1F3CB..1F3CC  ; Emoji_Modifier_Base  # E0.7   [2] (🏋️..🏌️)    person lifting weights..person golfing\n1F442..1F443  ; Emoji_Modifier_Base  # E0.6   [2] (👂..👃)    ear..nose\n1F446..1F450  ; Emoji_Modifier_Base  # E0.6  [11] (👆..👐)    backhand index pointing up..open hands\n1F466..1F46B  ; Emoji_Modifier_Base  # E0.6   [6] (👦..👫)    boy..woman and man holding hands\n1F46C..1F46D  ; Emoji_Modifier_Base  # E1.0   [2] (👬..👭)    men holding hands..women holding hands\n1F46E..1F478  ; Emoji_Modifier_Base  # E0.6  [11] (👮..👸)    police officer..princess\n1F47C         ; Emoji_Modifier_Base  # E0.6   [1] (👼)       baby angel\n1F481..1F483  ; Emoji_Modifier_Base  # E0.6   [3] (💁..💃)    person tipping hand..woman dancing\n1F485..1F487  ; Emoji_Modifier_Base  # E0.6   [3] (💅..💇)    nail polish..person getting haircut\n1F48F         ; Emoji_Modifier_Base  # E0.6   [1] (💏)       kiss\n1F491         ; Emoji_Modifier_Base  # E0.6   [1] (💑)       couple with heart\n1F4AA         ; Emoji_Modifier_Base  # E0.6   [1] (💪)       flexed biceps\n1F574..1F575  ; Emoji_Modifier_Base  # E0.7   [2] (🕴️..🕵️)    person in suit levitating..detective\n1F57A         ; Emoji_Modifier_Base  # E3.0   [1] (🕺)       man dancing\n1F590         ; Emoji_Modifier_Base  # E0.7   [1] (🖐️)       hand with fingers splayed\n1F595..1F596  ; Emoji_Modifier_Base  # E1.0   [2] (🖕..🖖)    middle finger..vulcan salute\n1F645..1F647  ; Emoji_Modifier_Base  # E0.6   [3] (🙅..🙇)    person gesturing NO..person bowing\n1F64B..1F64F  ; Emoji_Modifier_Base  # E0.6   [5] (🙋..🙏)    person raising hand..folded hands\n1F6A3         ; Emoji_Modifier_Base  # E1.0   [1] (🚣)       person rowing boat\n1F6B4..1F6B5  ; Emoji_Modifier_Base  # E1.0   [2] (🚴..🚵)    person biking..person mountain biking\n1F6B6         ; Emoji_Modifier_Base  # E0.6   [1] (🚶)       person walking\n1F6C0         ; Emoji_Modifier_Base  # E0.6   [1] (🛀)       person taking bath\n1F6CC         ; Emoji_Modifier_Base  # E1.0   [1] (🛌)       person in bed\n1F90C         ; Emoji_Modifier_Base  # E13.0  [1] (🤌)       pinched fingers\n1F90F         ; Emoji_Modifier_Base  # E12.0  [1] (🤏)       pinching hand\n1F918         ; Emoji_Modifier_Base  # E1.0   [1] (🤘)       sign of the horns\n1F919..1F91E  ; Emoji_Modifier_Base  # E3.0   [6] (🤙..🤞)    call me hand..crossed fingers\n1F91F         ; Emoji_Modifier_Base  # E5.0   [1] (🤟)       love-you gesture\n1F926         ; Emoji_Modifier_Base  # E3.0   [1] (🤦)       person facepalming\n1F930         ; Emoji_Modifier_Base  # E3.0   [1] (🤰)       pregnant woman\n1F931..1F932  ; Emoji_Modifier_Base  # E5.0   [2] (🤱..🤲)    breast-feeding..palms up together\n1F933..1F939  ; Emoji_Modifier_Base  # E3.0   [7] (🤳..🤹)    selfie..person juggling\n1F93C..1F93E  ; Emoji_Modifier_Base  # E3.0   [3] (🤼..🤾)    people wrestling..person playing handball\n1F977         ; Emoji_Modifier_Base  # E13.0  [1] (🥷)       ninja\n1F9B5..1F9B6  ; Emoji_Modifier_Base  # E11.0  [2] (🦵..🦶)    leg..foot\n1F9B8..1F9B9  ; Emoji_Modifier_Base  # E11.0  [2] (🦸..🦹)    superhero..supervillain\n1F9BB         ; Emoji_Modifier_Base  # E12.0  [1] (🦻)       ear with hearing aid\n1F9CD..1F9CF  ; Emoji_Modifier_Base  # E12.0  [3] (🧍..🧏)    person standing..deaf person\n1F9D1..1F9DD  ; Emoji_Modifier_Base  # E5.0  [13] (🧑..🧝)    person..elf\n1FAC3..1FAC5  ; Emoji_Modifier_Base  # E14.0  [3] (🫃..🫅)    pregnant man..person with crown\n1FAF0..1FAF6  ; Emoji_Modifier_Base  # E14.0  [7] (🫰..🫶)    hand with index finger and thumb crossed..heart hands\n1FAF7..1FAF8  ; Emoji_Modifier_Base  # E15.0  [2] (🫷..🫸)    leftwards pushing hand..rightwards pushing hand\n\n# Total elements: 134\n\n# ================================================\n\n# All omitted code points have Emoji_Component=No\n\n0023          ; Emoji_Component      # E0.0   [1] (#️)       hash sign\n002A          ; Emoji_Component      # E0.0   [1] (*️)       asterisk\n0030..0039    ; Emoji_Component      # E0.0  [10] (0️..9️)    digit zero..digit nine\n200D          ; Emoji_Component      # E0.0   [1] (‍)        zero width joiner\n20E3          ; Emoji_Component      # E0.0   [1] (⃣)       combining enclosing keycap\nFE0F          ; Emoji_Component      # E0.0   [1] ()        VARIATION SELECTOR-16\n1F1E6..1F1FF  ; Emoji_Component      # E0.0  [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z\n1F3FB..1F3FF  ; Emoji_Component      # E1.0   [5] (🏻..🏿)    light skin tone..dark skin tone\n1F9B0..1F9B3  ; Emoji_Component      # E11.0  [4] (🦰..🦳)    red hair..white hair\nE0020..E007F  ; Emoji_Component      # E0.0  [96] (󠀠..󠁿)      tag space..cancel tag\n\n# Total elements: 146\n\n# ================================================\n\n# All omitted code points have Extended_Pictographic=No\n\n00A9          ; Extended_Pictographic# E0.6   [1] (©️)       copyright\n00AE          ; Extended_Pictographic# E0.6   [1] (®️)       registered\n203C          ; Extended_Pictographic# E0.6   [1] (‼️)       double exclamation mark\n2049          ; Extended_Pictographic# E0.6   [1] (⁉️)       exclamation question mark\n2122          ; Extended_Pictographic# E0.6   [1] (™️)       trade mark\n2139          ; Extended_Pictographic# E0.6   [1] (ℹ️)       information\n2194..2199    ; Extended_Pictographic# E0.6   [6] (↔️..↙️)    left-right arrow..down-left arrow\n21A9..21AA    ; Extended_Pictographic# E0.6   [2] (↩️..↪️)    right arrow curving left..left arrow curving right\n231A..231B    ; Extended_Pictographic# E0.6   [2] (⌚..⌛)    watch..hourglass done\n2328          ; Extended_Pictographic# E1.0   [1] (⌨️)       keyboard\n23CF          ; Extended_Pictographic# E1.0   [1] (⏏️)       eject button\n23E9..23EC    ; Extended_Pictographic# E0.6   [4] (⏩..⏬)    fast-forward button..fast down button\n23ED..23EE    ; Extended_Pictographic# E0.7   [2] (⏭️..⏮️)    next track button..last track button\n23EF          ; Extended_Pictographic# E1.0   [1] (⏯️)       play or pause button\n23F0          ; Extended_Pictographic# E0.6   [1] (⏰)       alarm clock\n23F1..23F2    ; Extended_Pictographic# E1.0   [2] (⏱️..⏲️)    stopwatch..timer clock\n23F3          ; Extended_Pictographic# E0.6   [1] (⏳)       hourglass not done\n23F8..23FA    ; Extended_Pictographic# E0.7   [3] (⏸️..⏺️)    pause button..record button\n24C2          ; Extended_Pictographic# E0.6   [1] (Ⓜ️)       circled M\n25AA..25AB    ; Extended_Pictographic# E0.6   [2] (▪️..▫️)    black small square..white small square\n25B6          ; Extended_Pictographic# E0.6   [1] (▶️)       play button\n25C0          ; Extended_Pictographic# E0.6   [1] (◀️)       reverse button\n25FB..25FE    ; Extended_Pictographic# E0.6   [4] (◻️..◾)    white medium square..black medium-small square\n2600..2601    ; Extended_Pictographic# E0.6   [2] (☀️..☁️)    sun..cloud\n2602..2603    ; Extended_Pictographic# E0.7   [2] (☂️..☃️)    umbrella..snowman\n2604          ; Extended_Pictographic# E1.0   [1] (☄️)       comet\n260E          ; Extended_Pictographic# E0.6   [1] (☎️)       telephone\n2611          ; Extended_Pictographic# E0.6   [1] (☑️)       check box with check\n2614..2615    ; Extended_Pictographic# E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage\n2618          ; Extended_Pictographic# E1.0   [1] (☘️)       shamrock\n261D          ; Extended_Pictographic# E0.6   [1] (☝️)       index pointing up\n2620          ; Extended_Pictographic# E1.0   [1] (☠️)       skull and crossbones\n2622..2623    ; Extended_Pictographic# E1.0   [2] (☢️..☣️)    radioactive..biohazard\n2626          ; Extended_Pictographic# E1.0   [1] (☦️)       orthodox cross\n262A          ; Extended_Pictographic# E0.7   [1] (☪️)       star and crescent\n262E          ; Extended_Pictographic# E1.0   [1] (☮️)       peace symbol\n262F          ; Extended_Pictographic# E0.7   [1] (☯️)       yin yang\n2638..2639    ; Extended_Pictographic# E0.7   [2] (☸️..☹️)    wheel of dharma..frowning face\n263A          ; Extended_Pictographic# E0.6   [1] (☺️)       smiling face\n2640          ; Extended_Pictographic# E4.0   [1] (♀️)       female sign\n2642          ; Extended_Pictographic# E4.0   [1] (♂️)       male sign\n2648..2653    ; Extended_Pictographic# E0.6  [12] (♈..♓)    Aries..Pisces\n265F          ; Extended_Pictographic# E11.0  [1] (♟️)       chess pawn\n2660          ; Extended_Pictographic# E0.6   [1] (♠️)       spade suit\n2663          ; Extended_Pictographic# E0.6   [1] (♣️)       club suit\n2665..2666    ; Extended_Pictographic# E0.6   [2] (♥️..♦️)    heart suit..diamond suit\n2668          ; Extended_Pictographic# E0.6   [1] (♨️)       hot springs\n267B          ; Extended_Pictographic# E0.6   [1] (♻️)       recycling symbol\n267E          ; Extended_Pictographic# E11.0  [1] (♾️)       infinity\n267F          ; Extended_Pictographic# E0.6   [1] (♿)       wheelchair symbol\n2692          ; Extended_Pictographic# E1.0   [1] (⚒️)       hammer and pick\n2693          ; Extended_Pictographic# E0.6   [1] (⚓)       anchor\n2694          ; Extended_Pictographic# E1.0   [1] (⚔️)       crossed swords\n2695          ; Extended_Pictographic# E4.0   [1] (⚕️)       medical symbol\n2696..2697    ; Extended_Pictographic# E1.0   [2] (⚖️..⚗️)    balance scale..alembic\n2699          ; Extended_Pictographic# E1.0   [1] (⚙️)       gear\n269B..269C    ; Extended_Pictographic# E1.0   [2] (⚛️..⚜️)    atom symbol..fleur-de-lis\n26A0..26A1    ; Extended_Pictographic# E0.6   [2] (⚠️..⚡)    warning..high voltage\n26A7          ; Extended_Pictographic# E13.0  [1] (⚧️)       transgender symbol\n26AA..26AB    ; Extended_Pictographic# E0.6   [2] (⚪..⚫)    white circle..black circle\n26B0..26B1    ; Extended_Pictographic# E1.0   [2] (⚰️..⚱️)    coffin..funeral urn\n26BD..26BE    ; Extended_Pictographic# E0.6   [2] (⚽..⚾)    soccer ball..baseball\n26C4..26C5    ; Extended_Pictographic# E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud\n26C8          ; Extended_Pictographic# E0.7   [1] (⛈️)       cloud with lightning and rain\n26CE          ; Extended_Pictographic# E0.6   [1] (⛎)       Ophiuchus\n26CF          ; Extended_Pictographic# E0.7   [1] (⛏️)       pick\n26D1          ; Extended_Pictographic# E0.7   [1] (⛑️)       rescue worker’s helmet\n26D3          ; Extended_Pictographic# E0.7   [1] (⛓️)       chains\n26D4          ; Extended_Pictographic# E0.6   [1] (⛔)       no entry\n26E9          ; Extended_Pictographic# E0.7   [1] (⛩️)       shinto shrine\n26EA          ; Extended_Pictographic# E0.6   [1] (⛪)       church\n26F0..26F1    ; Extended_Pictographic# E0.7   [2] (⛰️..⛱️)    mountain..umbrella on ground\n26F2..26F3    ; Extended_Pictographic# E0.6   [2] (⛲..⛳)    fountain..flag in hole\n26F4          ; Extended_Pictographic# E0.7   [1] (⛴️)       ferry\n26F5          ; Extended_Pictographic# E0.6   [1] (⛵)       sailboat\n26F7..26F9    ; Extended_Pictographic# E0.7   [3] (⛷️..⛹️)    skier..person bouncing ball\n26FA          ; Extended_Pictographic# E0.6   [1] (⛺)       tent\n26FD          ; Extended_Pictographic# E0.6   [1] (⛽)       fuel pump\n2702          ; Extended_Pictographic# E0.6   [1] (✂️)       scissors\n2705          ; Extended_Pictographic# E0.6   [1] (✅)       check mark button\n2708..270C    ; Extended_Pictographic# E0.6   [5] (✈️..✌️)    airplane..victory hand\n270D          ; Extended_Pictographic# E0.7   [1] (✍️)       writing hand\n270F          ; Extended_Pictographic# E0.6   [1] (✏️)       pencil\n2712          ; Extended_Pictographic# E0.6   [1] (✒️)       black nib\n2714          ; Extended_Pictographic# E0.6   [1] (✔️)       check mark\n2716          ; Extended_Pictographic# E0.6   [1] (✖️)       multiply\n271D          ; Extended_Pictographic# E0.7   [1] (✝️)       latin cross\n2721          ; Extended_Pictographic# E0.7   [1] (✡️)       star of David\n2728          ; Extended_Pictographic# E0.6   [1] (✨)       sparkles\n2733..2734    ; Extended_Pictographic# E0.6   [2] (✳️..✴️)    eight-spoked asterisk..eight-pointed star\n2744          ; Extended_Pictographic# E0.6   [1] (❄️)       snowflake\n2747          ; Extended_Pictographic# E0.6   [1] (❇️)       sparkle\n274C          ; Extended_Pictographic# E0.6   [1] (❌)       cross mark\n274E          ; Extended_Pictographic# E0.6   [1] (❎)       cross mark button\n2753..2755    ; Extended_Pictographic# E0.6   [3] (❓..❕)    red question mark..white exclamation mark\n2757          ; Extended_Pictographic# E0.6   [1] (❗)       red exclamation mark\n2763          ; Extended_Pictographic# E1.0   [1] (❣️)       heart exclamation\n2764          ; Extended_Pictographic# E0.6   [1] (❤️)       red heart\n2795..2797    ; Extended_Pictographic# E0.6   [3] (➕..➗)    plus..divide\n27A1          ; Extended_Pictographic# E0.6   [1] (➡️)       right arrow\n27B0          ; Extended_Pictographic# E0.6   [1] (➰)       curly loop\n27BF          ; Extended_Pictographic# E1.0   [1] (➿)       double curly loop\n2934..2935    ; Extended_Pictographic# E0.6   [2] (⤴️..⤵️)    right arrow curving up..right arrow curving down\n2B05..2B07    ; Extended_Pictographic# E0.6   [3] (⬅️..⬇️)    left arrow..down arrow\n2B1B..2B1C    ; Extended_Pictographic# E0.6   [2] (⬛..⬜)    black large square..white large square\n2B50          ; Extended_Pictographic# E0.6   [1] (⭐)       star\n2B55          ; Extended_Pictographic# E0.6   [1] (⭕)       hollow red circle\n3030          ; Extended_Pictographic# E0.6   [1] (〰️)       wavy dash\n303D          ; Extended_Pictographic# E0.6   [1] (〽️)       part alternation mark\n3297          ; Extended_Pictographic# E0.6   [1] (㊗️)       Japanese “congratulations” button\n3299          ; Extended_Pictographic# E0.6   [1] (㊙️)       Japanese “secret” button\n1F004         ; Extended_Pictographic# E0.6   [1] (🀄)       mahjong red dragon\n1F02C..1F02F  ; Extended_Pictographic# E0.0   [4] (🀬..🀯)    <reserved-1F02C>..<reserved-1F02F>\n1F094..1F09F  ; Extended_Pictographic# E0.0  [12] (🂔..🂟)    <reserved-1F094>..<reserved-1F09F>\n1F0AF..1F0B0  ; Extended_Pictographic# E0.0   [2] (🂯..🂰)    <reserved-1F0AF>..<reserved-1F0B0>\n1F0C0         ; Extended_Pictographic# E0.0   [1] (🃀)       <reserved-1F0C0>\n1F0CF         ; Extended_Pictographic# E0.6   [1] (🃏)       joker\n1F0D0         ; Extended_Pictographic# E0.0   [1] (🃐)       <reserved-1F0D0>\n1F0F6..1F0FF  ; Extended_Pictographic# E0.0  [10] (🃶..🃿)    <reserved-1F0F6>..<reserved-1F0FF>\n1F170..1F171  ; Extended_Pictographic# E0.6   [2] (🅰️..🅱️)    A button (blood type)..B button (blood type)\n1F17E..1F17F  ; Extended_Pictographic# E0.6   [2] (🅾️..🅿️)    O button (blood type)..P button\n1F18E         ; Extended_Pictographic# E0.6   [1] (🆎)       AB button (blood type)\n1F191..1F19A  ; Extended_Pictographic# E0.6  [10] (🆑..🆚)    CL button..VS button\n1F1AE..1F1E5  ; Extended_Pictographic# E0.0  [56] (🆮..🇥)    <reserved-1F1AE>..<reserved-1F1E5>\n1F201..1F202  ; Extended_Pictographic# E0.6   [2] (🈁..🈂️)    Japanese “here” button..Japanese “service charge” button\n1F203..1F20F  ; Extended_Pictographic# E0.0  [13] (🈃..🈏)    <reserved-1F203>..<reserved-1F20F>\n1F21A         ; Extended_Pictographic# E0.6   [1] (🈚)       Japanese “free of charge” button\n1F22F         ; Extended_Pictographic# E0.6   [1] (🈯)       Japanese “reserved” button\n1F232..1F23A  ; Extended_Pictographic# E0.6   [9] (🈲..🈺)    Japanese “prohibited” button..Japanese “open for business” button\n1F23C..1F23F  ; Extended_Pictographic# E0.0   [4] (🈼..🈿)    <reserved-1F23C>..<reserved-1F23F>\n1F249..1F24F  ; Extended_Pictographic# E0.0   [7] (🉉..🉏)    <reserved-1F249>..<reserved-1F24F>\n1F250..1F251  ; Extended_Pictographic# E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button\n1F252..1F25F  ; Extended_Pictographic# E0.0  [14] (🉒..🉟)    <reserved-1F252>..<reserved-1F25F>\n1F266..1F2FF  ; Extended_Pictographic# E0.0 [154] (🉦..🋿)    <reserved-1F266>..<reserved-1F2FF>\n1F300..1F30C  ; Extended_Pictographic# E0.6  [13] (🌀..🌌)    cyclone..milky way\n1F30D..1F30E  ; Extended_Pictographic# E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas\n1F30F         ; Extended_Pictographic# E0.6   [1] (🌏)       globe showing Asia-Australia\n1F310         ; Extended_Pictographic# E1.0   [1] (🌐)       globe with meridians\n1F311         ; Extended_Pictographic# E0.6   [1] (🌑)       new moon\n1F312         ; Extended_Pictographic# E1.0   [1] (🌒)       waxing crescent moon\n1F313..1F315  ; Extended_Pictographic# E0.6   [3] (🌓..🌕)    first quarter moon..full moon\n1F316..1F318  ; Extended_Pictographic# E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon\n1F319         ; Extended_Pictographic# E0.6   [1] (🌙)       crescent moon\n1F31A         ; Extended_Pictographic# E1.0   [1] (🌚)       new moon face\n1F31B         ; Extended_Pictographic# E0.6   [1] (🌛)       first quarter moon face\n1F31C         ; Extended_Pictographic# E0.7   [1] (🌜)       last quarter moon face\n1F31D..1F31E  ; Extended_Pictographic# E1.0   [2] (🌝..🌞)    full moon face..sun with face\n1F31F..1F320  ; Extended_Pictographic# E0.6   [2] (🌟..🌠)    glowing star..shooting star\n1F321         ; Extended_Pictographic# E0.7   [1] (🌡️)       thermometer\n1F324..1F32C  ; Extended_Pictographic# E0.7   [9] (🌤️..🌬️)    sun behind small cloud..wind face\n1F32D..1F32F  ; Extended_Pictographic# E1.0   [3] (🌭..🌯)    hot dog..burrito\n1F330..1F331  ; Extended_Pictographic# E0.6   [2] (🌰..🌱)    chestnut..seedling\n1F332..1F333  ; Extended_Pictographic# E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree\n1F334..1F335  ; Extended_Pictographic# E0.6   [2] (🌴..🌵)    palm tree..cactus\n1F336         ; Extended_Pictographic# E0.7   [1] (🌶️)       hot pepper\n1F337..1F34A  ; Extended_Pictographic# E0.6  [20] (🌷..🍊)    tulip..tangerine\n1F34B         ; Extended_Pictographic# E1.0   [1] (🍋)       lemon\n1F34C..1F34F  ; Extended_Pictographic# E0.6   [4] (🍌..🍏)    banana..green apple\n1F350         ; Extended_Pictographic# E1.0   [1] (🍐)       pear\n1F351..1F37B  ; Extended_Pictographic# E0.6  [43] (🍑..🍻)    peach..clinking beer mugs\n1F37C         ; Extended_Pictographic# E1.0   [1] (🍼)       baby bottle\n1F37D         ; Extended_Pictographic# E0.7   [1] (🍽️)       fork and knife with plate\n1F37E..1F37F  ; Extended_Pictographic# E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn\n1F380..1F393  ; Extended_Pictographic# E0.6  [20] (🎀..🎓)    ribbon..graduation cap\n1F396..1F397  ; Extended_Pictographic# E0.7   [2] (🎖️..🎗️)    military medal..reminder ribbon\n1F399..1F39B  ; Extended_Pictographic# E0.7   [3] (🎙️..🎛️)    studio microphone..control knobs\n1F39E..1F39F  ; Extended_Pictographic# E0.7   [2] (🎞️..🎟️)    film frames..admission tickets\n1F3A0..1F3C4  ; Extended_Pictographic# E0.6  [37] (🎠..🏄)    carousel horse..person surfing\n1F3C5         ; Extended_Pictographic# E1.0   [1] (🏅)       sports medal\n1F3C6         ; Extended_Pictographic# E0.6   [1] (🏆)       trophy\n1F3C7         ; Extended_Pictographic# E1.0   [1] (🏇)       horse racing\n1F3C8         ; Extended_Pictographic# E0.6   [1] (🏈)       american football\n1F3C9         ; Extended_Pictographic# E1.0   [1] (🏉)       rugby football\n1F3CA         ; Extended_Pictographic# E0.6   [1] (🏊)       person swimming\n1F3CB..1F3CE  ; Extended_Pictographic# E0.7   [4] (🏋️..🏎️)    person lifting weights..racing car\n1F3CF..1F3D3  ; Extended_Pictographic# E1.0   [5] (🏏..🏓)    cricket game..ping pong\n1F3D4..1F3DF  ; Extended_Pictographic# E0.7  [12] (🏔️..🏟️)    snow-capped mountain..stadium\n1F3E0..1F3E3  ; Extended_Pictographic# E0.6   [4] (🏠..🏣)    house..Japanese post office\n1F3E4         ; Extended_Pictographic# E1.0   [1] (🏤)       post office\n1F3E5..1F3F0  ; Extended_Pictographic# E0.6  [12] (🏥..🏰)    hospital..castle\n1F3F3         ; Extended_Pictographic# E0.7   [1] (🏳️)       white flag\n1F3F4         ; Extended_Pictographic# E1.0   [1] (🏴)       black flag\n1F3F5         ; Extended_Pictographic# E0.7   [1] (🏵️)       rosette\n1F3F7         ; Extended_Pictographic# E0.7   [1] (🏷️)       label\n1F3F8..1F3FA  ; Extended_Pictographic# E1.0   [3] (🏸..🏺)    badminton..amphora\n1F400..1F407  ; Extended_Pictographic# E1.0   [8] (🐀..🐇)    rat..rabbit\n1F408         ; Extended_Pictographic# E0.7   [1] (🐈)       cat\n1F409..1F40B  ; Extended_Pictographic# E1.0   [3] (🐉..🐋)    dragon..whale\n1F40C..1F40E  ; Extended_Pictographic# E0.6   [3] (🐌..🐎)    snail..horse\n1F40F..1F410  ; Extended_Pictographic# E1.0   [2] (🐏..🐐)    ram..goat\n1F411..1F412  ; Extended_Pictographic# E0.6   [2] (🐑..🐒)    ewe..monkey\n1F413         ; Extended_Pictographic# E1.0   [1] (🐓)       rooster\n1F414         ; Extended_Pictographic# E0.6   [1] (🐔)       chicken\n1F415         ; Extended_Pictographic# E0.7   [1] (🐕)       dog\n1F416         ; Extended_Pictographic# E1.0   [1] (🐖)       pig\n1F417..1F429  ; Extended_Pictographic# E0.6  [19] (🐗..🐩)    boar..poodle\n1F42A         ; Extended_Pictographic# E1.0   [1] (🐪)       camel\n1F42B..1F43E  ; Extended_Pictographic# E0.6  [20] (🐫..🐾)    two-hump camel..paw prints\n1F43F         ; Extended_Pictographic# E0.7   [1] (🐿️)       chipmunk\n1F440         ; Extended_Pictographic# E0.6   [1] (👀)       eyes\n1F441         ; Extended_Pictographic# E0.7   [1] (👁️)       eye\n1F442..1F464  ; Extended_Pictographic# E0.6  [35] (👂..👤)    ear..bust in silhouette\n1F465         ; Extended_Pictographic# E1.0   [1] (👥)       busts in silhouette\n1F466..1F46B  ; Extended_Pictographic# E0.6   [6] (👦..👫)    boy..woman and man holding hands\n1F46C..1F46D  ; Extended_Pictographic# E1.0   [2] (👬..👭)    men holding hands..women holding hands\n1F46E..1F4AC  ; Extended_Pictographic# E0.6  [63] (👮..💬)    police officer..speech balloon\n1F4AD         ; Extended_Pictographic# E1.0   [1] (💭)       thought balloon\n1F4AE..1F4B5  ; Extended_Pictographic# E0.6   [8] (💮..💵)    white flower..dollar banknote\n1F4B6..1F4B7  ; Extended_Pictographic# E1.0   [2] (💶..💷)    euro banknote..pound banknote\n1F4B8..1F4EB  ; Extended_Pictographic# E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag\n1F4EC..1F4ED  ; Extended_Pictographic# E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag\n1F4EE         ; Extended_Pictographic# E0.6   [1] (📮)       postbox\n1F4EF         ; Extended_Pictographic# E1.0   [1] (📯)       postal horn\n1F4F0..1F4F4  ; Extended_Pictographic# E0.6   [5] (📰..📴)    newspaper..mobile phone off\n1F4F5         ; Extended_Pictographic# E1.0   [1] (📵)       no mobile phones\n1F4F6..1F4F7  ; Extended_Pictographic# E0.6   [2] (📶..📷)    antenna bars..camera\n1F4F8         ; Extended_Pictographic# E1.0   [1] (📸)       camera with flash\n1F4F9..1F4FC  ; Extended_Pictographic# E0.6   [4] (📹..📼)    video camera..videocassette\n1F4FD         ; Extended_Pictographic# E0.7   [1] (📽️)       film projector\n1F4FF..1F502  ; Extended_Pictographic# E1.0   [4] (📿..🔂)    prayer beads..repeat single button\n1F503         ; Extended_Pictographic# E0.6   [1] (🔃)       clockwise vertical arrows\n1F504..1F507  ; Extended_Pictographic# E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker\n1F508         ; Extended_Pictographic# E0.7   [1] (🔈)       speaker low volume\n1F509         ; Extended_Pictographic# E1.0   [1] (🔉)       speaker medium volume\n1F50A..1F514  ; Extended_Pictographic# E0.6  [11] (🔊..🔔)    speaker high volume..bell\n1F515         ; Extended_Pictographic# E1.0   [1] (🔕)       bell with slash\n1F516..1F52B  ; Extended_Pictographic# E0.6  [22] (🔖..🔫)    bookmark..water pistol\n1F52C..1F52D  ; Extended_Pictographic# E1.0   [2] (🔬..🔭)    microscope..telescope\n1F52E..1F53D  ; Extended_Pictographic# E0.6  [16] (🔮..🔽)    crystal ball..downwards button\n1F549..1F54A  ; Extended_Pictographic# E0.7   [2] (🕉️..🕊️)    om..dove\n1F54B..1F54E  ; Extended_Pictographic# E1.0   [4] (🕋..🕎)    kaaba..menorah\n1F550..1F55B  ; Extended_Pictographic# E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock\n1F55C..1F567  ; Extended_Pictographic# E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty\n1F56F..1F570  ; Extended_Pictographic# E0.7   [2] (🕯️..🕰️)    candle..mantelpiece clock\n1F573..1F579  ; Extended_Pictographic# E0.7   [7] (🕳️..🕹️)    hole..joystick\n1F57A         ; Extended_Pictographic# E3.0   [1] (🕺)       man dancing\n1F587         ; Extended_Pictographic# E0.7   [1] (🖇️)       linked paperclips\n1F58A..1F58D  ; Extended_Pictographic# E0.7   [4] (🖊️..🖍️)    pen..crayon\n1F590         ; Extended_Pictographic# E0.7   [1] (🖐️)       hand with fingers splayed\n1F595..1F596  ; Extended_Pictographic# E1.0   [2] (🖕..🖖)    middle finger..vulcan salute\n1F5A4         ; Extended_Pictographic# E3.0   [1] (🖤)       black heart\n1F5A5         ; Extended_Pictographic# E0.7   [1] (🖥️)       desktop computer\n1F5A8         ; Extended_Pictographic# E0.7   [1] (🖨️)       printer\n1F5B1..1F5B2  ; Extended_Pictographic# E0.7   [2] (🖱️..🖲️)    computer mouse..trackball\n1F5BC         ; Extended_Pictographic# E0.7   [1] (🖼️)       framed picture\n1F5C2..1F5C4  ; Extended_Pictographic# E0.7   [3] (🗂️..🗄️)    card index dividers..file cabinet\n1F5D1..1F5D3  ; Extended_Pictographic# E0.7   [3] (🗑️..🗓️)    wastebasket..spiral calendar\n1F5DC..1F5DE  ; Extended_Pictographic# E0.7   [3] (🗜️..🗞️)    clamp..rolled-up newspaper\n1F5E1         ; Extended_Pictographic# E0.7   [1] (🗡️)       dagger\n1F5E3         ; Extended_Pictographic# E0.7   [1] (🗣️)       speaking head\n1F5E8         ; Extended_Pictographic# E2.0   [1] (🗨️)       left speech bubble\n1F5EF         ; Extended_Pictographic# E0.7   [1] (🗯️)       right anger bubble\n1F5F3         ; Extended_Pictographic# E0.7   [1] (🗳️)       ballot box with ballot\n1F5FA         ; Extended_Pictographic# E0.7   [1] (🗺️)       world map\n1F5FB..1F5FF  ; Extended_Pictographic# E0.6   [5] (🗻..🗿)    mount fuji..moai\n1F600         ; Extended_Pictographic# E1.0   [1] (😀)       grinning face\n1F601..1F606  ; Extended_Pictographic# E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face\n1F607..1F608  ; Extended_Pictographic# E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns\n1F609..1F60D  ; Extended_Pictographic# E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes\n1F60E         ; Extended_Pictographic# E1.0   [1] (😎)       smiling face with sunglasses\n1F60F         ; Extended_Pictographic# E0.6   [1] (😏)       smirking face\n1F610         ; Extended_Pictographic# E0.7   [1] (😐)       neutral face\n1F611         ; Extended_Pictographic# E1.0   [1] (😑)       expressionless face\n1F612..1F614  ; Extended_Pictographic# E0.6   [3] (😒..😔)    unamused face..pensive face\n1F615         ; Extended_Pictographic# E1.0   [1] (😕)       confused face\n1F616         ; Extended_Pictographic# E0.6   [1] (😖)       confounded face\n1F617         ; Extended_Pictographic# E1.0   [1] (😗)       kissing face\n1F618         ; Extended_Pictographic# E0.6   [1] (😘)       face blowing a kiss\n1F619         ; Extended_Pictographic# E1.0   [1] (😙)       kissing face with smiling eyes\n1F61A         ; Extended_Pictographic# E0.6   [1] (😚)       kissing face with closed eyes\n1F61B         ; Extended_Pictographic# E1.0   [1] (😛)       face with tongue\n1F61C..1F61E  ; Extended_Pictographic# E0.6   [3] (😜..😞)    winking face with tongue..disappointed face\n1F61F         ; Extended_Pictographic# E1.0   [1] (😟)       worried face\n1F620..1F625  ; Extended_Pictographic# E0.6   [6] (😠..😥)    angry face..sad but relieved face\n1F626..1F627  ; Extended_Pictographic# E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face\n1F628..1F62B  ; Extended_Pictographic# E0.6   [4] (😨..😫)    fearful face..tired face\n1F62C         ; Extended_Pictographic# E1.0   [1] (😬)       grimacing face\n1F62D         ; Extended_Pictographic# E0.6   [1] (😭)       loudly crying face\n1F62E..1F62F  ; Extended_Pictographic# E1.0   [2] (😮..😯)    face with open mouth..hushed face\n1F630..1F633  ; Extended_Pictographic# E0.6   [4] (😰..😳)    anxious face with sweat..flushed face\n1F634         ; Extended_Pictographic# E1.0   [1] (😴)       sleeping face\n1F635         ; Extended_Pictographic# E0.6   [1] (😵)       face with crossed-out eyes\n1F636         ; Extended_Pictographic# E1.0   [1] (😶)       face without mouth\n1F637..1F640  ; Extended_Pictographic# E0.6  [10] (😷..🙀)    face with medical mask..weary cat\n1F641..1F644  ; Extended_Pictographic# E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes\n1F645..1F64F  ; Extended_Pictographic# E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands\n1F680         ; Extended_Pictographic# E0.6   [1] (🚀)       rocket\n1F681..1F682  ; Extended_Pictographic# E1.0   [2] (🚁..🚂)    helicopter..locomotive\n1F683..1F685  ; Extended_Pictographic# E0.6   [3] (🚃..🚅)    railway car..bullet train\n1F686         ; Extended_Pictographic# E1.0   [1] (🚆)       train\n1F687         ; Extended_Pictographic# E0.6   [1] (🚇)       metro\n1F688         ; Extended_Pictographic# E1.0   [1] (🚈)       light rail\n1F689         ; Extended_Pictographic# E0.6   [1] (🚉)       station\n1F68A..1F68B  ; Extended_Pictographic# E1.0   [2] (🚊..🚋)    tram..tram car\n1F68C         ; Extended_Pictographic# E0.6   [1] (🚌)       bus\n1F68D         ; Extended_Pictographic# E0.7   [1] (🚍)       oncoming bus\n1F68E         ; Extended_Pictographic# E1.0   [1] (🚎)       trolleybus\n1F68F         ; Extended_Pictographic# E0.6   [1] (🚏)       bus stop\n1F690         ; Extended_Pictographic# E1.0   [1] (🚐)       minibus\n1F691..1F693  ; Extended_Pictographic# E0.6   [3] (🚑..🚓)    ambulance..police car\n1F694         ; Extended_Pictographic# E0.7   [1] (🚔)       oncoming police car\n1F695         ; Extended_Pictographic# E0.6   [1] (🚕)       taxi\n1F696         ; Extended_Pictographic# E1.0   [1] (🚖)       oncoming taxi\n1F697         ; Extended_Pictographic# E0.6   [1] (🚗)       automobile\n1F698         ; Extended_Pictographic# E0.7   [1] (🚘)       oncoming automobile\n1F699..1F69A  ; Extended_Pictographic# E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck\n1F69B..1F6A1  ; Extended_Pictographic# E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway\n1F6A2         ; Extended_Pictographic# E0.6   [1] (🚢)       ship\n1F6A3         ; Extended_Pictographic# E1.0   [1] (🚣)       person rowing boat\n1F6A4..1F6A5  ; Extended_Pictographic# E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light\n1F6A6         ; Extended_Pictographic# E1.0   [1] (🚦)       vertical traffic light\n1F6A7..1F6AD  ; Extended_Pictographic# E0.6   [7] (🚧..🚭)    construction..no smoking\n1F6AE..1F6B1  ; Extended_Pictographic# E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water\n1F6B2         ; Extended_Pictographic# E0.6   [1] (🚲)       bicycle\n1F6B3..1F6B5  ; Extended_Pictographic# E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking\n1F6B6         ; Extended_Pictographic# E0.6   [1] (🚶)       person walking\n1F6B7..1F6B8  ; Extended_Pictographic# E1.0   [2] (🚷..🚸)    no pedestrians..children crossing\n1F6B9..1F6BE  ; Extended_Pictographic# E0.6   [6] (🚹..🚾)    men’s room..water closet\n1F6BF         ; Extended_Pictographic# E1.0   [1] (🚿)       shower\n1F6C0         ; Extended_Pictographic# E0.6   [1] (🛀)       person taking bath\n1F6C1..1F6C5  ; Extended_Pictographic# E1.0   [5] (🛁..🛅)    bathtub..left luggage\n1F6CB         ; Extended_Pictographic# E0.7   [1] (🛋️)       couch and lamp\n1F6CC         ; Extended_Pictographic# E1.0   [1] (🛌)       person in bed\n1F6CD..1F6CF  ; Extended_Pictographic# E0.7   [3] (🛍️..🛏️)    shopping bags..bed\n1F6D0         ; Extended_Pictographic# E1.0   [1] (🛐)       place of worship\n1F6D1..1F6D2  ; Extended_Pictographic# E3.0   [2] (🛑..🛒)    stop sign..shopping cart\n1F6D5         ; Extended_Pictographic# E12.0  [1] (🛕)       hindu temple\n1F6D6..1F6D7  ; Extended_Pictographic# E13.0  [2] (🛖..🛗)    hut..elevator\n1F6D8         ; Extended_Pictographic# E17.0  [1] (🛘)       landslide\n1F6D9..1F6DB  ; Extended_Pictographic# E0.0   [3] (🛙..🛛)    <reserved-1F6D9>..<reserved-1F6DB>\n1F6DC         ; Extended_Pictographic# E15.0  [1] (🛜)       wireless\n1F6DD..1F6DF  ; Extended_Pictographic# E14.0  [3] (🛝..🛟)    playground slide..ring buoy\n1F6E0..1F6E5  ; Extended_Pictographic# E0.7   [6] (🛠️..🛥️)    hammer and wrench..motor boat\n1F6E9         ; Extended_Pictographic# E0.7   [1] (🛩️)       small airplane\n1F6EB..1F6EC  ; Extended_Pictographic# E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival\n1F6ED..1F6EF  ; Extended_Pictographic# E0.0   [3] (🛭..🛯)    <reserved-1F6ED>..<reserved-1F6EF>\n1F6F0         ; Extended_Pictographic# E0.7   [1] (🛰️)       satellite\n1F6F3         ; Extended_Pictographic# E0.7   [1] (🛳️)       passenger ship\n1F6F4..1F6F6  ; Extended_Pictographic# E3.0   [3] (🛴..🛶)    kick scooter..canoe\n1F6F7..1F6F8  ; Extended_Pictographic# E5.0   [2] (🛷..🛸)    sled..flying saucer\n1F6F9         ; Extended_Pictographic# E11.0  [1] (🛹)       skateboard\n1F6FA         ; Extended_Pictographic# E12.0  [1] (🛺)       auto rickshaw\n1F6FB..1F6FC  ; Extended_Pictographic# E13.0  [2] (🛻..🛼)    pickup truck..roller skate\n1F6FD..1F6FF  ; Extended_Pictographic# E0.0   [3] (🛽..🛿)    <reserved-1F6FD>..<reserved-1F6FF>\n1F7DA..1F7DF  ; Extended_Pictographic# E0.0   [6] (🟚..🟟)    <reserved-1F7DA>..<reserved-1F7DF>\n1F7E0..1F7EB  ; Extended_Pictographic# E12.0 [12] (🟠..🟫)    orange circle..brown square\n1F7EC..1F7EF  ; Extended_Pictographic# E0.0   [4] (🟬..🟯)    <reserved-1F7EC>..<reserved-1F7EF>\n1F7F0         ; Extended_Pictographic# E14.0  [1] (🟰)       heavy equals sign\n1F7F1..1F7FF  ; Extended_Pictographic# E0.0  [15] (🟱..🟿)    <reserved-1F7F1>..<reserved-1F7FF>\n1F80C..1F80F  ; Extended_Pictographic# E0.0   [4] (🠌..🠏)    <reserved-1F80C>..<reserved-1F80F>\n1F848..1F84F  ; Extended_Pictographic# E0.0   [8] (🡈..🡏)    <reserved-1F848>..<reserved-1F84F>\n1F85A..1F85F  ; Extended_Pictographic# E0.0   [6] (🡚..🡟)    <reserved-1F85A>..<reserved-1F85F>\n1F888..1F88F  ; Extended_Pictographic# E0.0   [8] (🢈..🢏)    <reserved-1F888>..<reserved-1F88F>\n1F8AE..1F8AF  ; Extended_Pictographic# E0.0   [2] (🢮..🢯)    <reserved-1F8AE>..<reserved-1F8AF>\n1F8BC..1F8BF  ; Extended_Pictographic# E0.0   [4] (🢼..🢿)    <reserved-1F8BC>..<reserved-1F8BF>\n1F8C2..1F8CF  ; Extended_Pictographic# E0.0  [14] (🣂..🣏)    <reserved-1F8C2>..<reserved-1F8CF>\n1F8D9..1F8FF  ; Extended_Pictographic# E0.0  [39] (🣙..🣿)    <reserved-1F8D9>..<reserved-1F8FF>\n1F90C         ; Extended_Pictographic# E13.0  [1] (🤌)       pinched fingers\n1F90D..1F90F  ; Extended_Pictographic# E12.0  [3] (🤍..🤏)    white heart..pinching hand\n1F910..1F918  ; Extended_Pictographic# E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns\n1F919..1F91E  ; Extended_Pictographic# E3.0   [6] (🤙..🤞)    call me hand..crossed fingers\n1F91F         ; Extended_Pictographic# E5.0   [1] (🤟)       love-you gesture\n1F920..1F927  ; Extended_Pictographic# E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face\n1F928..1F92F  ; Extended_Pictographic# E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head\n1F930         ; Extended_Pictographic# E3.0   [1] (🤰)       pregnant woman\n1F931..1F932  ; Extended_Pictographic# E5.0   [2] (🤱..🤲)    breast-feeding..palms up together\n1F933..1F93A  ; Extended_Pictographic# E3.0   [8] (🤳..🤺)    selfie..person fencing\n1F93C..1F93E  ; Extended_Pictographic# E3.0   [3] (🤼..🤾)    people wrestling..person playing handball\n1F93F         ; Extended_Pictographic# E12.0  [1] (🤿)       diving mask\n1F940..1F945  ; Extended_Pictographic# E3.0   [6] (🥀..🥅)    wilted flower..goal net\n1F947..1F94B  ; Extended_Pictographic# E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform\n1F94C         ; Extended_Pictographic# E5.0   [1] (🥌)       curling stone\n1F94D..1F94F  ; Extended_Pictographic# E11.0  [3] (🥍..🥏)    lacrosse..flying disc\n1F950..1F95E  ; Extended_Pictographic# E3.0  [15] (🥐..🥞)    croissant..pancakes\n1F95F..1F96B  ; Extended_Pictographic# E5.0  [13] (🥟..🥫)    dumpling..canned food\n1F96C..1F970  ; Extended_Pictographic# E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts\n1F971         ; Extended_Pictographic# E12.0  [1] (🥱)       yawning face\n1F972         ; Extended_Pictographic# E13.0  [1] (🥲)       smiling face with tear\n1F973..1F976  ; Extended_Pictographic# E11.0  [4] (🥳..🥶)    partying face..cold face\n1F977..1F978  ; Extended_Pictographic# E13.0  [2] (🥷..🥸)    ninja..disguised face\n1F979         ; Extended_Pictographic# E14.0  [1] (🥹)       face holding back tears\n1F97A         ; Extended_Pictographic# E11.0  [1] (🥺)       pleading face\n1F97B         ; Extended_Pictographic# E12.0  [1] (🥻)       sari\n1F97C..1F97F  ; Extended_Pictographic# E11.0  [4] (🥼..🥿)    lab coat..flat shoe\n1F980..1F984  ; Extended_Pictographic# E1.0   [5] (🦀..🦄)    crab..unicorn\n1F985..1F991  ; Extended_Pictographic# E3.0  [13] (🦅..🦑)    eagle..squid\n1F992..1F997  ; Extended_Pictographic# E5.0   [6] (🦒..🦗)    giraffe..cricket\n1F998..1F9A2  ; Extended_Pictographic# E11.0 [11] (🦘..🦢)    kangaroo..swan\n1F9A3..1F9A4  ; Extended_Pictographic# E13.0  [2] (🦣..🦤)    mammoth..dodo\n1F9A5..1F9AA  ; Extended_Pictographic# E12.0  [6] (🦥..🦪)    sloth..oyster\n1F9AB..1F9AD  ; Extended_Pictographic# E13.0  [3] (🦫..🦭)    beaver..seal\n1F9AE..1F9AF  ; Extended_Pictographic# E12.0  [2] (🦮..🦯)    guide dog..white cane\n1F9B0..1F9B9  ; Extended_Pictographic# E11.0 [10] (🦰..🦹)    red hair..supervillain\n1F9BA..1F9BF  ; Extended_Pictographic# E12.0  [6] (🦺..🦿)    safety vest..mechanical leg\n1F9C0         ; Extended_Pictographic# E1.0   [1] (🧀)       cheese wedge\n1F9C1..1F9C2  ; Extended_Pictographic# E11.0  [2] (🧁..🧂)    cupcake..salt\n1F9C3..1F9CA  ; Extended_Pictographic# E12.0  [8] (🧃..🧊)    beverage box..ice\n1F9CB         ; Extended_Pictographic# E13.0  [1] (🧋)       bubble tea\n1F9CC         ; Extended_Pictographic# E14.0  [1] (🧌)       troll\n1F9CD..1F9CF  ; Extended_Pictographic# E12.0  [3] (🧍..🧏)    person standing..deaf person\n1F9D0..1F9E6  ; Extended_Pictographic# E5.0  [23] (🧐..🧦)    face with monocle..socks\n1F9E7..1F9FF  ; Extended_Pictographic# E11.0 [25] (🧧..🧿)    red envelope..nazar amulet\n1FA58..1FA5F  ; Extended_Pictographic# E0.0   [8] (🩘..🩟)    <reserved-1FA58>..<reserved-1FA5F>\n1FA6E..1FA6F  ; Extended_Pictographic# E0.0   [2] (🩮..🩯)    <reserved-1FA6E>..<reserved-1FA6F>\n1FA70..1FA73  ; Extended_Pictographic# E12.0  [4] (🩰..🩳)    ballet shoes..shorts\n1FA74         ; Extended_Pictographic# E13.0  [1] (🩴)       thong sandal\n1FA75..1FA77  ; Extended_Pictographic# E15.0  [3] (🩵..🩷)    light blue heart..pink heart\n1FA78..1FA7A  ; Extended_Pictographic# E12.0  [3] (🩸..🩺)    drop of blood..stethoscope\n1FA7B..1FA7C  ; Extended_Pictographic# E14.0  [2] (🩻..🩼)    x-ray..crutch\n1FA7D..1FA7F  ; Extended_Pictographic# E0.0   [3] (🩽..🩿)    <reserved-1FA7D>..<reserved-1FA7F>\n1FA80..1FA82  ; Extended_Pictographic# E12.0  [3] (🪀..🪂)    yo-yo..parachute\n1FA83..1FA86  ; Extended_Pictographic# E13.0  [4] (🪃..🪆)    boomerang..nesting dolls\n1FA87..1FA88  ; Extended_Pictographic# E15.0  [2] (🪇..🪈)    maracas..flute\n1FA89         ; Extended_Pictographic# E16.0  [1] (🪉)       harp\n1FA8A         ; Extended_Pictographic# E17.0  [1] (🪊)       trombone\n1FA8B..1FA8D  ; Extended_Pictographic# E0.0   [3] (🪋..🪍)    <reserved-1FA8B>..<reserved-1FA8D>\n1FA8E         ; Extended_Pictographic# E17.0  [1] (🪎)       treasure chest\n1FA8F         ; Extended_Pictographic# E16.0  [1] (🪏)       shovel\n1FA90..1FA95  ; Extended_Pictographic# E12.0  [6] (🪐..🪕)    ringed planet..banjo\n1FA96..1FAA8  ; Extended_Pictographic# E13.0 [19] (🪖..🪨)    military helmet..rock\n1FAA9..1FAAC  ; Extended_Pictographic# E14.0  [4] (🪩..🪬)    mirror ball..hamsa\n1FAAD..1FAAF  ; Extended_Pictographic# E15.0  [3] (🪭..🪯)    folding hand fan..khanda\n1FAB0..1FAB6  ; Extended_Pictographic# E13.0  [7] (🪰..🪶)    fly..feather\n1FAB7..1FABA  ; Extended_Pictographic# E14.0  [4] (🪷..🪺)    lotus..nest with eggs\n1FABB..1FABD  ; Extended_Pictographic# E15.0  [3] (🪻..🪽)    hyacinth..wing\n1FABE         ; Extended_Pictographic# E16.0  [1] (🪾)       leafless tree\n1FABF         ; Extended_Pictographic# E15.0  [1] (🪿)       goose\n1FAC0..1FAC2  ; Extended_Pictographic# E13.0  [3] (🫀..🫂)    anatomical heart..people hugging\n1FAC3..1FAC5  ; Extended_Pictographic# E14.0  [3] (🫃..🫅)    pregnant man..person with crown\n1FAC6         ; Extended_Pictographic# E16.0  [1] (🫆)       fingerprint\n1FAC7         ; Extended_Pictographic# E0.0   [1] (🫇)       <reserved-1FAC7>\n1FAC8         ; Extended_Pictographic# E17.0  [1] (🫈)       hairy creature\n1FAC9..1FACC  ; Extended_Pictographic# E0.0   [4] (🫉..🫌)    <reserved-1FAC9>..<reserved-1FACC>\n1FACD         ; Extended_Pictographic# E17.0  [1] (🫍)       orca\n1FACE..1FACF  ; Extended_Pictographic# E15.0  [2] (🫎..🫏)    moose..donkey\n1FAD0..1FAD6  ; Extended_Pictographic# E13.0  [7] (🫐..🫖)    blueberries..teapot\n1FAD7..1FAD9  ; Extended_Pictographic# E14.0  [3] (🫗..🫙)    pouring liquid..jar\n1FADA..1FADB  ; Extended_Pictographic# E15.0  [2] (🫚..🫛)    ginger root..pea pod\n1FADC         ; Extended_Pictographic# E16.0  [1] (🫜)       root vegetable\n1FADD..1FADE  ; Extended_Pictographic# E0.0   [2] (🫝..🫞)    <reserved-1FADD>..<reserved-1FADE>\n1FADF         ; Extended_Pictographic# E16.0  [1] (🫟)       splatter\n1FAE0..1FAE7  ; Extended_Pictographic# E14.0  [8] (🫠..🫧)    melting face..bubbles\n1FAE8         ; Extended_Pictographic# E15.0  [1] (🫨)       shaking face\n1FAE9         ; Extended_Pictographic# E16.0  [1] (🫩)       face with bags under eyes\n1FAEA         ; Extended_Pictographic# E17.0  [1] (🫪)       distorted face\n1FAEB..1FAEE  ; Extended_Pictographic# E0.0   [4] (🫫..🫮)    <reserved-1FAEB>..<reserved-1FAEE>\n1FAEF         ; Extended_Pictographic# E17.0  [1] (🫯)       fight cloud\n1FAF0..1FAF6  ; Extended_Pictographic# E14.0  [7] (🫰..🫶)    hand with index finger and thumb crossed..heart hands\n1FAF7..1FAF8  ; Extended_Pictographic# E15.0  [2] (🫷..🫸)    leftwards pushing hand..rightwards pushing hand\n1FAF9..1FAFF  ; Extended_Pictographic# E0.0   [7] (🫹..🫿)    <reserved-1FAF9>..<reserved-1FAFF>\n1FC00..1FFFD  ; Extended_Pictographic# E0.0[1022] (🰀..🿽)    <reserved-1FC00>..<reserved-1FFFD>\n\n# Total elements: 2848\n\n#EOF\n"
  },
  {
    "path": "maint/UpdateAlways",
    "content": "#! /bin/bash\n\n# Script to prepare the files for building a PCRE2 release. It does some\n# processing of the documentation and detrails files.\n\n# You must run this script before runnning \"make dist\". If its first argument\n# is \"doc\", it stops after preparing the documentation. There are no other\n# arguments. The script makes use of the following files:\n\n# 132html     A Perl script that converts a .1 or .3 man page into HTML. It\n#             \"knows\" the relevant troff constructs that are used in the PCRE2\n#             man pages.\n\n# CheckMan    A Perl script that checks man pages for typos in the mark up.\n\n# CleanTxt    A Perl script that cleans up the output of \"nroff -man\" by\n#             removing backspaces and other redundant text so as to produce\n#             a readable .txt file.\n\n# Detrail     A Perl script that removes trailing spaces from files.\n\n# LintMan     A Perl script that lints man pages looking for inconsistencies.\n\n# doc/index.html.src\n#             A file that is copied as index.html into the doc/html directory\n#             when the HTML documentation is built. It works like this so that\n#             doc/html can be deleted and re-created from scratch.\n\n# README & NON-AUTOTOOLS-BUILD\n#             These files are copied into the doc/html directory, with .txt\n#             extensions so that they can by hyperlinked from the HTML\n#             documentation, because some people just go to the HTML without\n#             looking for text files.\n\n# Set the LANG to C, because nroff converts ASCII \"HYPHEN-MINUS\" to Unicode\n# \"HYPHEN\" if the system is using a UTF-8 locale (like \"C.UTF-8\").\nexport LANG=C LC_ALL=C\n\n# Extract the current release version from configure.ac.\nCURRENT_RELEASE=`grep -E 'm4_define\\(pcre2_(major|minor|prerelease)' configure.ac | \\\n    grep -E -o '\\[.*\\]' | \\\n    sed -E -e '1s/$/./' | \\\n    tr -d '[]\\n'`\nexport CURRENT_RELEASE\n\n# First, sort out the documentation. Remove pcre2demo.3 first because it won't\n# pass the markup check (it is created below, using markup that none of the\n# other pages use).\n\ncd doc\necho Processing documentation\n\n/bin/rm -f pcre2demo.3\n\n# Check the remaining man pages\n\nperl ../maint/CheckMan *.1 *.3\nif [ $? != 0 ] ; then exit 1; fi\n\nperl ../maint/LintMan -v *.3\nif [ $? != 0 ] ; then exit 1; fi\n\n# Verify the version number in the man pages\n\nfor file in *.1 *.3 ; do\n  if ! grep -qE \".TH.*\\\"PCRE2 $CURRENT_RELEASE\\\"\" \"$file\" ; then\n    echo \"Version number in $file does not match current release\"\n    exit 1\n  fi\ndone\n\n# Make Text form of the documentation. It needs some mangling to make it\n# tidy for online reading. Concatenate all the .3 stuff, but omit the\n# individual function pages.\n\ncat <<End >pcre2.txt\n-----------------------------------------------------------------------------\nThis file contains a concatenation of the PCRE2 man pages, converted to plain\ntext format for ease of searching with a text editor, or for use on systems\nthat do not have a man page processor. The small individual files that give\nsynopses of each function in the library have not been included. Neither has\nthe pcre2demo program. There are separate text files for the pcre2grep and\npcre2test commands.\n-----------------------------------------------------------------------------\n\n\nEnd\n\necho \"Making pcre2.txt\"\nfor file in pcre2 pcre2api pcre2build pcre2callout pcre2compat pcre2jit \\\n            pcre2limits pcre2matching pcre2partial pcre2pattern pcre2perform \\\n            pcre2posix pcre2sample pcre2serialize pcre2syntax \\\n            pcre2unicode ; do\n  echo \"  Processing $file.3\"\n  nroff -c -man $file.3 >$file.rawtxt\n  perl ../maint/CleanTxt <$file.rawtxt >>pcre2.txt\n  /bin/rm $file.rawtxt\n  echo \"------------------------------------------------------------------------------\" >>pcre2.txt\n  if [ \"$file\" != \"pcre2sample\" ] ; then\n    echo \"\" >>pcre2.txt\n    echo \"\" >>pcre2.txt\n  fi\ndone\n\n# The three commands\nfor file in pcre2test pcre2grep pcre2-config ; do\n  echo Making $file.txt\n  nroff -c -man $file.1 >$file.rawtxt\n  perl ../maint/CleanTxt <$file.rawtxt >$file.txt\n  /bin/rm $file.rawtxt\ndone\n\n\n# Make pcre2demo.3 from the pcre2demo.c source file\n\necho \"Making pcre2demo.3\"\nperl <<\"END\" >pcre2demo.3\n  open(IN, \"<\", \"../src/pcre2demo.c\") or die \"Failed to open src/pcre2demo.c\";\n  open(OUT, \">\", \"pcre2demo.3\") or die \"Failed to create pcre2demo.3\";\n  my $t = `git log -n1 --date=format:\"%d %B %Y\" --format=%cd ../src/pcre2demo.c`;\n  chomp $t;\n  my $version = $ENV{CURRENT_RELEASE};\n  print OUT \".TH PCRE2DEMO 3 \\\"\", $t, '\" \"PCRE2 ', $version, \"\\\"\\n\" .\n            \".\\\\\\\"AUTOMATICALLY GENERATED BY UpdateAlways - do not EDIT!\\n\" .\n            \".SH NAME\\n\" .\n            \"PCRE2DEMO - A demonstration C program for PCRE2\\n\" .\n            \".SH \\\"SOURCE CODE\\\"\\n\" .\n            \".rs\\n\" .\n            \".sp\\n\" .\n            \".\\\\\\\" Start example.\\n\" .\n            \".de EX\\n\" .\n\t    \".\tdo ds mF \\\\\\\\n[.fam]\\n\" .\n            \".  nr mE \\\\\\\\n(.f\\n\" .\n            \".  nf\\n\" .\n            \".  nh\\n\" .\n\t    \".\tdo fam C\\n\" .\n            \".  ft CW\\n\" .\n            \"..\\n\" .\n            \".\\n\" .\n            \".\\n\" .\n            \".\\\\\\\" End example.\\n\" .\n            \".de EE\\n\" .\n\t    \".\tdo fam \\\\\\\\*(mF\\n\" .\n            \".  ft \\\\\\\\n(mE\\n\" .\n            \".  fi\\n\" .\n            \".  hy \\\\\\\\n(HY\\n\" .\n            \"..\\n\" .\n            \".\\n\" .\n            \".RS -7\\n\" .\n            \".EX\\n\" ;\n  while (<IN>)\n    {\n    s/\\\\/\\\\e/g;\n    print OUT;\n    }\n  print OUT \".EE\\n\";\n  close(OUT);\n  close(IN);\nEND\nif [ $? != 0 ] ; then exit 1; fi\n\n\n# Verify that `man` can process the pages without warnings.\nif man --help 2>/dev/null | grep -q warnings ; then\n  for file in *.1 *.3 ; do\n    MAN_OUT=`MANROFFSEQ='' MANWIDTH=80 man --warnings=w,all -E UTF-8 -l -Tutf8 -Z \"$file\" 2>&1 >/dev/null`\n    if [ \"$MAN_OUT\" != \"\" ]; then\n      printf \"Running man generated warnings:\\n%s\\n\" \"$MAN_OUT\"\n      exit 1\n    fi\n  done\nelif [ -n \"$CI\" ] && [ -n \"$GITHUB_REPOSITORY\" ] ; then\n  echo \"::error title=UpdateAlways::man-db not installed in worker image\"\nelse\n  echo \"Warning: skipping man-db warnings checking\"\nfi\n\n\n# Make HTML form of the documentation.\n\necho \"Making HTML documentation\"\n/bin/rm html/*\ncp index.html.src html/index.html\ncp ../README html/README.txt\ncp ../NON-AUTOTOOLS-BUILD html/NON-AUTOTOOLS-BUILD.txt\n\nfor file in *.1 ; do\n  base=`basename $file .1`\n  echo \"  Making $base.html\"\n  perl ../maint/132html -toc $base <$file >html/$base.html\n  if [ $? != 0 ] ; then exit 1; fi\ndone\n\n# Exclude table of contents for function summaries. It seems that expr\n# forces an anchored regex. Also exclude them for small pages that have\n# only one section.\n\nfor file in *.3 ; do\n  base=`basename $file .3`\n  toc=-toc\n  if [ `expr $base : '.*_'` -ne 0 ] ; then toc=\"\" ; fi\n  if [ \"$base\" = \"pcre2sample\" ]  || \\\n     [ \"$base\" = \"pcre2compat\" ]  || \\\n     [ \"$base\" = \"pcre2demo\" ]    || \\\n     [ \"$base\" = \"pcre2limits\" ]  || \\\n     [ \"$base\" = \"pcre2unicode\" ] ; then\n    toc=\"\"\n  fi\n  echo \"  Making $base.html\"\n  perl ../maint/132html $toc $base <$file >html/$base.html\n  if [ $? != 0 ] ; then exit 1; fi\ndone\n\n# End of documentation processing; stop if only documentation required.\n\ncd ..\necho Documentation done\nif [ \"$1\" = \"doc\" ] ; then exit; fi\n\n# These files are detrailed; do not detrail the test data because there may be\n# significant trailing spaces. Do not detrail RunTest.bat, because it has CRLF\n# line endings and the detrail script removes all trailing white space. The\n# configure files are also omitted from the detrailing.\n\ntxt_files=(\n  AUTHORS.md\n  BUILD.bazel\n  CMakeLists.txt\n  COPYING\n  ChangeLog\n  HACKING\n  INSTALL\n  LICENCE.md\n  MODULE.bazel\n  Makefile.am\n  NEWS\n  NON-AUTOTOOLS-BUILD\n  README\n  RunGrepTest\n  RunTest\n  SECURITY.md\n  build.zig\n  configure.ac\n  libpcre2-8.pc.in\n  libpcre2-16.pc.in\n  libpcre2-32.pc.in\n  libpcre2-posix.pc.in\n  pcre2-config.in\n  perltest.sh\n  cmake/COPYING-CMAKE-SCRIPTS\n  cmake/{*.cmake,*.cmake.in}\n  m4/ax_pthread.m4\n  m4/pcre2_check_vscript.m4\n  m4/pcre2_visibility.m4\n  m4/pcre2_zos.m4\n  doc/p*\n  doc/html/*\n  src/libpcre2-*.sym.in\n  )\n\ncrlf_files=(\n  RunGrepTest.bat\n  RunTest.bat\n  )\n\nc_files=(\n  src/config-cmake.h.in\n  src/pcre2.h.in\n  src/pcre2_auto_possess.c\n  src/pcre2_chartables.c.dist\n  src/pcre2_chartables.c.ebcdic-1047-nl15\n  src/pcre2_chartables.c.ebcdic-1047-nl25\n  src/pcre2_chkdint.c\n  src/pcre2_compile.c\n  src/pcre2_compile.h\n  src/pcre2_compile_cgroup.c\n  src/pcre2_compile_class.c\n  src/pcre2_config.c\n  src/pcre2_context.c\n  src/pcre2_convert.c\n  src/pcre2_dfa_match.c\n  src/pcre2_dftables.c\n  src/pcre2_error.c\n  src/pcre2_extuni.c\n  src/pcre2_find_bracket.c\n  src/pcre2_fuzzsupport.c\n  src/pcre2_internal.h\n  src/pcre2_intmodedep.h\n  src/pcre2_jit_char_inc.h\n  src/pcre2_jit_compile.c\n  src/pcre2_jit_match_inc.h\n  src/pcre2_jit_misc_inc.h\n  src/pcre2_jit_simd_inc.h\n  src/pcre2_jit_test.c\n  src/pcre2_maketables.c\n  src/pcre2_match.c\n  src/pcre2_match_data.c\n  src/pcre2_match_next.c\n  src/pcre2_newline.c\n  src/pcre2_ord2utf.c\n  src/pcre2_pattern_info.c\n  src/pcre2_printint_inc.h\n  src/pcre2_script_run.c\n  src/pcre2_serialize.c\n  src/pcre2_string_utils.c\n  src/pcre2_study.c\n  src/pcre2_substitute.c\n  src/pcre2_substring.c\n  src/pcre2_tables.c\n  src/pcre2_ucd.c\n  src/pcre2_ucp.h\n  src/pcre2_ucptables_inc.h\n  src/pcre2_util.h\n  src/pcre2_valid_utf.c\n  src/pcre2_xclass.c\n  src/pcre2demo.c\n  src/pcre2grep.c\n  src/pcre2posix.c\n  src/pcre2posix.h\n  src/pcre2posix_test.c\n  src/pcre2test.c\n  src/pcre2test_inc.h\n  )\n\necho Detrailing\nperl maint/Detrail \"${txt_files[@]}\" \"${c_files[@]}\"\n\necho Validating all text\nperl maint/CheckTxt \"${txt_files[@]}\"\nperl maint/CheckTxt -ascii \"${c_files[@]}\"\nperl maint/CheckTxt -crlf \"${crlf_files[@]}\"\n\n# Verify the version number in the Bazel file\nif ! grep -E \"version = \\\"$CURRENT_RELEASE\\\"\" MODULE.bazel >/dev/null ; then\n  echo \"Version number in MODULE.bazel does not match current release\"\n  exit 1\nfi\n\necho Done\n\n#End\n"
  },
  {
    "path": "maint/UpdateCommon.py",
    "content": "# Common helpers for UpdateRelease.py and UpdateDates.py.\n\nimport re\nimport os\n\nscript_dir = os.path.dirname(os.path.abspath(__file__))\n\ndef get_current_release():\n    with open(f\"{script_dir}/../configure.ac\", 'r') as file:\n        content = file.read()\n\n    matches = [match[1] for match in re.findall(r\"m4_define\\(pcre2_(major|minor|prerelease), \\[(.*?)\\]\\)\", content)]\n    current_release = '%s.%s%s' % tuple(matches)\n\n    return current_release\n\nCURRENT_RELEASE = get_current_release()\n\n# Update a file, using a pattern. Verify that it matches the file, and perform\n# the replacement.\ndef update_file(filename, pattern, replacement):\n    with open(filename, 'r') as file:\n        content = file.read()\n\n    if not re.search(pattern, content):\n        raise Exception('Pattern not found in %s' % filename)\n\n    content = re.sub(pattern, replacement, content)\n\n    with open(filename, 'w') as file:\n        file.write(content)\n"
  },
  {
    "path": "maint/UpdateDates.py",
    "content": "#! /usr/bin/env python3\n\n# Script to update all the hardcoded dates in the source tree.\n#  - Documentation manpages have a \"last updated\" header and footer.\n#  - So do the READMEs.\n#  - The source files have copyright headers.\n\n# This script should be run in the main PCRE2 directory.\n\nimport glob\nimport re\nimport subprocess\n\nfrom UpdateCommon import update_file\n\ndate_regex = r'\\d+ (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\w* \\d+'\nheader_regex = r'(?m)^(.TH.*? )\"%s\"' % date_regex\nlast_updated_regex = r'(?m)^Last updated: %s' % date_regex\n\ndef get_last_date(filename):\n    result = subprocess.run(['git', 'log', '-n1', '--date=format:%d %B %Y', '--format=%cd', '--grep', '#noupdate', '--invert-grep', filename], capture_output=True, text=True)\n    return result.stdout.strip()\n\ndef check_no_match(filename, pattern):\n    with open(filename, 'r') as file:\n        content = file.read()\n\n    if re.search(pattern, content):\n        raise Exception('Pattern unexpectedly found in %s' % filename)\n\ndef update_man_date(filename):\n    print('  Updating %s' % filename)\n    file_date = get_last_date(filename)\n\n    update_file(filename, header_regex, '\\\\1\"%s\"' % file_date)\n\n    if filename.startswith('doc/pcre2_') or filename == 'doc/pcre2demo.3':\n        check_no_match(filename, last_updated_regex)\n    else:\n        update_file(filename, last_updated_regex, 'Last updated: %s' % file_date)\n\nprint('Updating man pages')\n\n# doc/*.1\nfor filename in glob.glob('doc/*.1'):\n    update_man_date(filename)\n\n# doc/*.3\nfor filename in glob.glob('doc/*.3'):\n    if filename == 'doc/pcre2demo.3':\n        continue\n    update_man_date(filename)\n\n# README, NON-AUTOTOOLS-BUILD\nprint('Updating README and NON-AUTOTOOLS-BUILD')\nfor filename in ['README', 'NON-AUTOTOOLS-BUILD']:\n    line = 'Last updated: %s' % get_last_date(filename)\n    padding = '=' * len(line)\n    update_file(filename, r'(?i)=+\\nLast updated: .*?\\n=+', '%s\\n%s\\n%s' % (padding, line, padding))\n"
  },
  {
    "path": "maint/UpdateRelease.py",
    "content": "#! /usr/bin/env python3\n\n# Script to update all the hardcoded release numbers in the source tree.\n#  - Documentation manpages.\n#  - Bazel MODULE file.\n\n# This script should be run in the main PCRE2 directory.\n\nimport glob\n\nfrom UpdateCommon import update_file, CURRENT_RELEASE\n\ndef update_man_version(filename):\n    print('  Updating %s' % filename)\n    update_file(filename, r'(.TH.*? )\"PCRE2 .*?\"', '\\\\1\"PCRE2 %s\"' % CURRENT_RELEASE)\n\nprint('Updating man pages')\n\n# doc/*.1\nfor filename in glob.glob('doc/*.1'):\n    update_man_version(filename)\n\n# doc/*.3\nfor filename in glob.glob('doc/*.3'):\n    update_man_version(filename)\n\n# MODULE.bazel\nprint('Updating MODULE.bazel')\nupdate_file('MODULE.bazel', r'(?m)^    version = \".*?\"', '    version = \"%s\"' % CURRENT_RELEASE)\n"
  },
  {
    "path": "maint/cmake-tests/build-interface/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.15)\nproject(TestBuildInterface C)\nset(CMAKE_C_STANDARD 99)\nset(CMAKE_C_STANDARD_REQUIRED TRUE)\n\n# We had a regression where a parent project compile definition containing\n# generator expressions was incorrectly propagated to CMAKE_REQUIRED_DEFINITIONS\n# (which doesn't support generator expressions). This dummy macro here prevents\n# that happening again.\nadd_compile_definitions($<$<CONFIG:Debug>:PARENT_PROJECT_MACRO>)\n\n# To test the static vs dynamic interface, uncomment one of the following lines:\n# set(BUILD_STATIC_LIBS OFF)\n# set(BUILD_SHARED_LIBS ON)\nadd_subdirectory(pcre2)\n\nadd_executable(test_executable main.c)\ntarget_link_libraries(test_executable PRIVATE pcre2-8)\n"
  },
  {
    "path": "maint/cmake-tests/build-interface/main.c",
    "content": "#define PCRE2_CODE_UNIT_WIDTH 8\n#include <pcre2.h>\n#include <stdio.h>\n\nint main(void)\n{\n  char version_str[32];\n  pcre2_config(PCRE2_CONFIG_VERSION, version_str);\n  printf(\"Using PCRE2 version: %s\\n\", version_str);\n  return 0;\n}\n"
  },
  {
    "path": "maint/cmake-tests/install-interface/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.15)\nproject(TestInstallInterface C)\nset(CMAKE_C_STANDARD 99)\nset(CMAKE_C_STANDARD_REQUIRED TRUE)\n\n# To test the static interface, uncomment the following line:\n# set(PCRE2_USE_STATIC_LIBS ON)\nfind_package(PCRE2 REQUIRED CONFIG)\n\nadd_executable(test_executable main.c)\ntarget_link_libraries(test_executable PRIVATE PCRE2::8BIT)\n\nif(WIN32 AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.21 AND NOT PCRE2_USE_STATIC_LIBS)\n  # Ensure that the DLLs are available for the executable to run. Only needed\n  # on Windows.\n  add_custom_command(TARGET test_executable POST_BUILD\n    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_RUNTIME_DLLS:test_executable> $<TARGET_FILE_DIR:test_executable>\n    COMMAND_EXPAND_LISTS\n    )\nendif()\n"
  },
  {
    "path": "maint/cmake-tests/install-interface/main.c",
    "content": "#define PCRE2_CODE_UNIT_WIDTH 8\n#include <pcre2.h>\n#include <stdio.h>\n\nint main(void)\n{\n  char version_str[32];\n  pcre2_config(PCRE2_CONFIG_VERSION, version_str);\n  printf(\"Using PCRE2 version: %s\\n\", version_str);\n  return 0;\n}\n"
  },
  {
    "path": "maint/manifest-cmakeinstall-freebsd",
    "content": "drwxr-xr-x install-dir\ndrwxr-xr-x install-dir/bin\n-rwxr-xr-x install-dir/bin/pcre2-config\n-rwxr-xr-x install-dir/bin/pcre2grep\n-rwxr-xr-x install-dir/bin/pcre2test\ndrwxr-xr-x install-dir/include\n-rw-r--r-- install-dir/include/pcre2.h\n-rw-r--r-- install-dir/include/pcre2posix.h\ndrwxr-xr-x install-dir/lib\ndrwxr-xr-x install-dir/lib/cmake\ndrwxr-xr-x install-dir/lib/cmake/pcre2\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-config-version.cmake\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-config.cmake\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-targets-release.cmake\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-targets.cmake\n-rw-r--r-- install-dir/lib/libpcre2-16.a\nlrwxr-xr-x install-dir/lib/libpcre2-16.so -> libpcre2-16.so.0\nlrwxr-xr-x install-dir/lib/libpcre2-16.so.0 -> libpcre2-16.so.0.15.0\n-rwxr-xr-x install-dir/lib/libpcre2-16.so.0.15.0\n-rw-r--r-- install-dir/lib/libpcre2-32.a\nlrwxr-xr-x install-dir/lib/libpcre2-32.so -> libpcre2-32.so.0\nlrwxr-xr-x install-dir/lib/libpcre2-32.so.0 -> libpcre2-32.so.0.15.0\n-rwxr-xr-x install-dir/lib/libpcre2-32.so.0.15.0\n-rw-r--r-- install-dir/lib/libpcre2-8.a\nlrwxr-xr-x install-dir/lib/libpcre2-8.so -> libpcre2-8.so.0\nlrwxr-xr-x install-dir/lib/libpcre2-8.so.0 -> libpcre2-8.so.0.15.0\n-rwxr-xr-x install-dir/lib/libpcre2-8.so.0.15.0\n-rw-r--r-- install-dir/lib/libpcre2-posix.a\nlrwxr-xr-x install-dir/lib/libpcre2-posix.so -> libpcre2-posix.so.3\nlrwxr-xr-x install-dir/lib/libpcre2-posix.so.3 -> libpcre2-posix.so.3.0.7\n-rwxr-xr-x install-dir/lib/libpcre2-posix.so.3.0.7\ndrwxr-xr-x install-dir/lib/pkgconfig\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-16.pc\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-32.pc\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-8.pc\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-posix.pc\ndrwxr-xr-x install-dir/share\ndrwxr-xr-x install-dir/share/doc\ndrwxr-xr-x install-dir/share/doc/pcre2\n-rw-r--r-- install-dir/share/doc/pcre2/AUTHORS.md\n-rw-r--r-- install-dir/share/doc/pcre2/COPYING\n-rw-r--r-- install-dir/share/doc/pcre2/ChangeLog\n-rw-r--r-- install-dir/share/doc/pcre2/LICENCE.md\n-rw-r--r-- install-dir/share/doc/pcre2/NEWS\n-rw-r--r-- install-dir/share/doc/pcre2/README\n-rw-r--r-- install-dir/share/doc/pcre2/SECURITY.md\ndrwxr-xr-x install-dir/share/doc/pcre2/html\n-rw-r--r-- install-dir/share/doc/pcre2/html/NON-AUTOTOOLS-BUILD.txt\n-rw-r--r-- install-dir/share/doc/pcre2/html/README.txt\n-rw-r--r-- install-dir/share/doc/pcre2/html/index.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2-config.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_callout_enumerate.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_code_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_code_copy_with_tables.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_code_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_config.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_convert_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_convert_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_convert_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_converted_pattern_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_dfa_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_general_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_general_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_general_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_error_message.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_mark.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_match_data_heapframes_size.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_match_data_size.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_ovector_count.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_ovector_pointer.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_startchar.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_compile.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_free_unused_memory.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_stack_assign.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_stack_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_stack_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_maketables.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_maketables_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_data_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_data_create_from_pattern.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_data_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_next_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_pattern_convert.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_pattern_info.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_decode.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_encode.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_get_number_of_codes.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_bsr.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_character_tables.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_compile_extra_options.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_compile_recursion_guard.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_depth_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_glob_escape.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_glob_separator.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_heap_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_match_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_max_pattern_compiled_length.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_max_pattern_length.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_max_varlookbehind.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_newline.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_offset_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_optimize.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_parens_nest_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_recursion_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_recursion_memory_management.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_substitute_callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_substitute_case_callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substitute.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_copy_byname.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_copy_bynumber.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_get_byname.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_get_bynumber.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_length_byname.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_length_bynumber.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_list_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_list_get.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_nametable_scan.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_number_from_name.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2api.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2build.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2compat.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2convert.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2demo.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2grep.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2jit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2limits.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2matching.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2partial.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2pattern.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2perform.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2posix.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2sample.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2serialize.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2syntax.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2test.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2unicode.html\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2-config.txt\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2.txt\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2grep.txt\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2test.txt\ndrwxr-xr-x install-dir/share/man\ndrwxr-xr-x install-dir/share/man/man1\n-rw-r--r-- install-dir/share/man/man1/pcre2-config.1\n-rw-r--r-- install-dir/share/man/man1/pcre2grep.1\n-rw-r--r-- install-dir/share/man/man1/pcre2test.1\ndrwxr-xr-x install-dir/share/man/man3\n-rw-r--r-- install-dir/share/man/man3/pcre2.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_callout_enumerate.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_code_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_code_copy_with_tables.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_code_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_config.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_convert_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_convert_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_convert_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_converted_pattern_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_dfa_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_general_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_general_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_general_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_error_message.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_mark.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_match_data_heapframes_size.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_match_data_size.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_ovector_count.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_ovector_pointer.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_startchar.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_compile.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_free_unused_memory.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_stack_assign.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_stack_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_stack_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_maketables.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_maketables_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_data_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_data_create_from_pattern.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_data_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_next_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_pattern_convert.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_pattern_info.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_decode.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_encode.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_get_number_of_codes.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_bsr.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_character_tables.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_compile_extra_options.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_compile_recursion_guard.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_depth_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_glob_escape.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_glob_separator.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_heap_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_match_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_max_pattern_compiled_length.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_max_pattern_length.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_max_varlookbehind.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_newline.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_offset_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_optimize.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_parens_nest_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_recursion_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_recursion_memory_management.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_substitute_callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_substitute_case_callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substitute.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_copy_byname.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_copy_bynumber.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_get_byname.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_get_bynumber.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_length_byname.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_length_bynumber.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_list_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_list_get.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_nametable_scan.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_number_from_name.3\n-rw-r--r-- install-dir/share/man/man3/pcre2api.3\n-rw-r--r-- install-dir/share/man/man3/pcre2build.3\n-rw-r--r-- install-dir/share/man/man3/pcre2callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2compat.3\n-rw-r--r-- install-dir/share/man/man3/pcre2convert.3\n-rw-r--r-- install-dir/share/man/man3/pcre2demo.3\n-rw-r--r-- install-dir/share/man/man3/pcre2jit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2limits.3\n-rw-r--r-- install-dir/share/man/man3/pcre2matching.3\n-rw-r--r-- install-dir/share/man/man3/pcre2partial.3\n-rw-r--r-- install-dir/share/man/man3/pcre2pattern.3\n-rw-r--r-- install-dir/share/man/man3/pcre2perform.3\n-rw-r--r-- install-dir/share/man/man3/pcre2posix.3\n-rw-r--r-- install-dir/share/man/man3/pcre2sample.3\n-rw-r--r-- install-dir/share/man/man3/pcre2serialize.3\n-rw-r--r-- install-dir/share/man/man3/pcre2syntax.3\n-rw-r--r-- install-dir/share/man/man3/pcre2unicode.3\n"
  },
  {
    "path": "maint/manifest-cmakeinstall-linux",
    "content": "drwxr-xr-x install-dir\ndrwxr-xr-x install-dir/bin\n-rwxr-xr-x install-dir/bin/pcre2-config\n-rwxr-xr-x install-dir/bin/pcre2grep\n-rwxr-xr-x install-dir/bin/pcre2test\ndrwxr-xr-x install-dir/include\n-rw-r--r-- install-dir/include/pcre2.h\n-rw-r--r-- install-dir/include/pcre2posix.h\ndrwxr-xr-x install-dir/lib\ndrwxr-xr-x install-dir/lib/cmake\ndrwxr-xr-x install-dir/lib/cmake/pcre2\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-config-version.cmake\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-config.cmake\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-targets-release.cmake\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-targets.cmake\n-rw-r--r-- install-dir/lib/libpcre2-16.a\nlrwxrwxrwx install-dir/lib/libpcre2-16.so -> libpcre2-16.so.0\nlrwxrwxrwx install-dir/lib/libpcre2-16.so.0 -> libpcre2-16.so.0.15.0\n-rw-r--r-- install-dir/lib/libpcre2-16.so.0.15.0\n-rw-r--r-- install-dir/lib/libpcre2-32.a\nlrwxrwxrwx install-dir/lib/libpcre2-32.so -> libpcre2-32.so.0\nlrwxrwxrwx install-dir/lib/libpcre2-32.so.0 -> libpcre2-32.so.0.15.0\n-rw-r--r-- install-dir/lib/libpcre2-32.so.0.15.0\n-rw-r--r-- install-dir/lib/libpcre2-8.a\nlrwxrwxrwx install-dir/lib/libpcre2-8.so -> libpcre2-8.so.0\nlrwxrwxrwx install-dir/lib/libpcre2-8.so.0 -> libpcre2-8.so.0.15.0\n-rw-r--r-- install-dir/lib/libpcre2-8.so.0.15.0\n-rw-r--r-- install-dir/lib/libpcre2-posix.a\nlrwxrwxrwx install-dir/lib/libpcre2-posix.so -> libpcre2-posix.so.3\nlrwxrwxrwx install-dir/lib/libpcre2-posix.so.3 -> libpcre2-posix.so.3.0.7\n-rw-r--r-- install-dir/lib/libpcre2-posix.so.3.0.7\ndrwxr-xr-x install-dir/lib/pkgconfig\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-16.pc\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-32.pc\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-8.pc\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-posix.pc\ndrwxr-xr-x install-dir/share\ndrwxr-xr-x install-dir/share/doc\ndrwxr-xr-x install-dir/share/doc/pcre2\n-rw-r--r-- install-dir/share/doc/pcre2/AUTHORS.md\n-rw-r--r-- install-dir/share/doc/pcre2/COPYING\n-rw-r--r-- install-dir/share/doc/pcre2/ChangeLog\n-rw-r--r-- install-dir/share/doc/pcre2/LICENCE.md\n-rw-r--r-- install-dir/share/doc/pcre2/NEWS\n-rw-r--r-- install-dir/share/doc/pcre2/README\n-rw-r--r-- install-dir/share/doc/pcre2/SECURITY.md\ndrwxr-xr-x install-dir/share/doc/pcre2/html\n-rw-r--r-- install-dir/share/doc/pcre2/html/NON-AUTOTOOLS-BUILD.txt\n-rw-r--r-- install-dir/share/doc/pcre2/html/README.txt\n-rw-r--r-- install-dir/share/doc/pcre2/html/index.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2-config.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_callout_enumerate.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_code_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_code_copy_with_tables.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_code_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_config.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_convert_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_convert_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_convert_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_converted_pattern_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_dfa_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_general_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_general_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_general_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_error_message.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_mark.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_match_data_heapframes_size.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_match_data_size.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_ovector_count.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_ovector_pointer.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_startchar.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_compile.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_free_unused_memory.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_stack_assign.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_stack_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_stack_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_maketables.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_maketables_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_data_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_data_create_from_pattern.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_data_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_next_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_pattern_convert.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_pattern_info.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_decode.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_encode.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_get_number_of_codes.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_bsr.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_character_tables.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_compile_extra_options.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_compile_recursion_guard.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_depth_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_glob_escape.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_glob_separator.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_heap_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_match_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_max_pattern_compiled_length.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_max_pattern_length.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_max_varlookbehind.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_newline.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_offset_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_optimize.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_parens_nest_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_recursion_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_recursion_memory_management.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_substitute_callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_substitute_case_callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substitute.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_copy_byname.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_copy_bynumber.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_get_byname.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_get_bynumber.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_length_byname.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_length_bynumber.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_list_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_list_get.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_nametable_scan.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_number_from_name.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2api.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2build.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2compat.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2convert.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2demo.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2grep.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2jit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2limits.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2matching.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2partial.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2pattern.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2perform.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2posix.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2sample.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2serialize.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2syntax.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2test.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2unicode.html\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2-config.txt\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2.txt\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2grep.txt\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2test.txt\ndrwxr-xr-x install-dir/share/man\ndrwxr-xr-x install-dir/share/man/man1\n-rw-r--r-- install-dir/share/man/man1/pcre2-config.1\n-rw-r--r-- install-dir/share/man/man1/pcre2grep.1\n-rw-r--r-- install-dir/share/man/man1/pcre2test.1\ndrwxr-xr-x install-dir/share/man/man3\n-rw-r--r-- install-dir/share/man/man3/pcre2.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_callout_enumerate.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_code_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_code_copy_with_tables.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_code_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_config.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_convert_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_convert_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_convert_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_converted_pattern_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_dfa_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_general_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_general_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_general_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_error_message.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_mark.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_match_data_heapframes_size.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_match_data_size.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_ovector_count.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_ovector_pointer.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_startchar.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_compile.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_free_unused_memory.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_stack_assign.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_stack_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_stack_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_maketables.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_maketables_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_data_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_data_create_from_pattern.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_data_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_next_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_pattern_convert.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_pattern_info.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_decode.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_encode.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_get_number_of_codes.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_bsr.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_character_tables.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_compile_extra_options.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_compile_recursion_guard.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_depth_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_glob_escape.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_glob_separator.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_heap_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_match_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_max_pattern_compiled_length.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_max_pattern_length.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_max_varlookbehind.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_newline.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_offset_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_optimize.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_parens_nest_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_recursion_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_recursion_memory_management.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_substitute_callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_substitute_case_callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substitute.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_copy_byname.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_copy_bynumber.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_get_byname.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_get_bynumber.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_length_byname.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_length_bynumber.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_list_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_list_get.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_nametable_scan.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_number_from_name.3\n-rw-r--r-- install-dir/share/man/man3/pcre2api.3\n-rw-r--r-- install-dir/share/man/man3/pcre2build.3\n-rw-r--r-- install-dir/share/man/man3/pcre2callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2compat.3\n-rw-r--r-- install-dir/share/man/man3/pcre2convert.3\n-rw-r--r-- install-dir/share/man/man3/pcre2demo.3\n-rw-r--r-- install-dir/share/man/man3/pcre2jit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2limits.3\n-rw-r--r-- install-dir/share/man/man3/pcre2matching.3\n-rw-r--r-- install-dir/share/man/man3/pcre2partial.3\n-rw-r--r-- install-dir/share/man/man3/pcre2pattern.3\n-rw-r--r-- install-dir/share/man/man3/pcre2perform.3\n-rw-r--r-- install-dir/share/man/man3/pcre2posix.3\n-rw-r--r-- install-dir/share/man/man3/pcre2sample.3\n-rw-r--r-- install-dir/share/man/man3/pcre2serialize.3\n-rw-r--r-- install-dir/share/man/man3/pcre2syntax.3\n-rw-r--r-- install-dir/share/man/man3/pcre2unicode.3\n"
  },
  {
    "path": "maint/manifest-cmakeinstall-macos",
    "content": "drwxr-xr-x install-dir\ndrwxr-xr-x install-dir/bin\n-rwxr-xr-x install-dir/bin/pcre2-config\n-rwxr-xr-x install-dir/bin/pcre2grep\n-rwxr-xr-x install-dir/bin/pcre2test\ndrwxr-xr-x install-dir/include\n-rw-r--r-- install-dir/include/pcre2.h\n-rw-r--r-- install-dir/include/pcre2posix.h\ndrwxr-xr-x install-dir/lib\ndrwxr-xr-x install-dir/lib/cmake\ndrwxr-xr-x install-dir/lib/cmake/pcre2\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-config-version.cmake\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-config.cmake\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-targets-release.cmake\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-targets.cmake\n-rwxr-xr-x install-dir/lib/libpcre2-16.0.15.0.dylib\nlrwxr-xr-x install-dir/lib/libpcre2-16.0.dylib -> libpcre2-16.0.15.0.dylib\n-rw-r--r-- install-dir/lib/libpcre2-16.a\nlrwxr-xr-x install-dir/lib/libpcre2-16.dylib -> libpcre2-16.0.dylib\n-rwxr-xr-x install-dir/lib/libpcre2-32.0.15.0.dylib\nlrwxr-xr-x install-dir/lib/libpcre2-32.0.dylib -> libpcre2-32.0.15.0.dylib\n-rw-r--r-- install-dir/lib/libpcre2-32.a\nlrwxr-xr-x install-dir/lib/libpcre2-32.dylib -> libpcre2-32.0.dylib\n-rwxr-xr-x install-dir/lib/libpcre2-8.0.15.0.dylib\nlrwxr-xr-x install-dir/lib/libpcre2-8.0.dylib -> libpcre2-8.0.15.0.dylib\n-rw-r--r-- install-dir/lib/libpcre2-8.a\nlrwxr-xr-x install-dir/lib/libpcre2-8.dylib -> libpcre2-8.0.dylib\n-rwxr-xr-x install-dir/lib/libpcre2-posix.3.0.7.dylib\nlrwxr-xr-x install-dir/lib/libpcre2-posix.3.dylib -> libpcre2-posix.3.0.7.dylib\n-rw-r--r-- install-dir/lib/libpcre2-posix.a\nlrwxr-xr-x install-dir/lib/libpcre2-posix.dylib -> libpcre2-posix.3.dylib\ndrwxr-xr-x install-dir/lib/pkgconfig\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-16.pc\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-32.pc\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-8.pc\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-posix.pc\ndrwxr-xr-x install-dir/share\ndrwxr-xr-x install-dir/share/doc\ndrwxr-xr-x install-dir/share/doc/pcre2\n-rw-r--r-- install-dir/share/doc/pcre2/AUTHORS.md\n-rw-r--r-- install-dir/share/doc/pcre2/COPYING\n-rw-r--r-- install-dir/share/doc/pcre2/ChangeLog\n-rw-r--r-- install-dir/share/doc/pcre2/LICENCE.md\n-rw-r--r-- install-dir/share/doc/pcre2/NEWS\n-rw-r--r-- install-dir/share/doc/pcre2/README\n-rw-r--r-- install-dir/share/doc/pcre2/SECURITY.md\ndrwxr-xr-x install-dir/share/doc/pcre2/html\n-rw-r--r-- install-dir/share/doc/pcre2/html/NON-AUTOTOOLS-BUILD.txt\n-rw-r--r-- install-dir/share/doc/pcre2/html/README.txt\n-rw-r--r-- install-dir/share/doc/pcre2/html/index.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2-config.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_callout_enumerate.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_code_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_code_copy_with_tables.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_code_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_config.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_convert_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_convert_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_convert_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_converted_pattern_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_dfa_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_general_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_general_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_general_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_error_message.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_mark.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_match_data_heapframes_size.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_match_data_size.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_ovector_count.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_ovector_pointer.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_startchar.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_compile.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_free_unused_memory.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_stack_assign.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_stack_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_stack_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_maketables.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_maketables_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_data_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_data_create_from_pattern.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_data_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_next_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_pattern_convert.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_pattern_info.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_decode.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_encode.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_get_number_of_codes.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_bsr.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_character_tables.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_compile_extra_options.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_compile_recursion_guard.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_depth_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_glob_escape.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_glob_separator.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_heap_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_match_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_max_pattern_compiled_length.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_max_pattern_length.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_max_varlookbehind.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_newline.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_offset_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_optimize.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_parens_nest_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_recursion_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_recursion_memory_management.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_substitute_callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_substitute_case_callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substitute.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_copy_byname.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_copy_bynumber.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_get_byname.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_get_bynumber.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_length_byname.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_length_bynumber.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_list_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_list_get.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_nametable_scan.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_number_from_name.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2api.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2build.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2compat.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2convert.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2demo.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2grep.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2jit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2limits.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2matching.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2partial.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2pattern.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2perform.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2posix.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2sample.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2serialize.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2syntax.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2test.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2unicode.html\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2-config.txt\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2.txt\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2grep.txt\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2test.txt\ndrwxr-xr-x install-dir/share/man\ndrwxr-xr-x install-dir/share/man/man1\n-rw-r--r-- install-dir/share/man/man1/pcre2-config.1\n-rw-r--r-- install-dir/share/man/man1/pcre2grep.1\n-rw-r--r-- install-dir/share/man/man1/pcre2test.1\ndrwxr-xr-x install-dir/share/man/man3\n-rw-r--r-- install-dir/share/man/man3/pcre2.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_callout_enumerate.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_code_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_code_copy_with_tables.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_code_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_config.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_convert_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_convert_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_convert_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_converted_pattern_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_dfa_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_general_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_general_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_general_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_error_message.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_mark.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_match_data_heapframes_size.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_match_data_size.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_ovector_count.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_ovector_pointer.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_startchar.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_compile.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_free_unused_memory.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_stack_assign.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_stack_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_stack_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_maketables.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_maketables_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_data_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_data_create_from_pattern.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_data_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_next_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_pattern_convert.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_pattern_info.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_decode.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_encode.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_get_number_of_codes.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_bsr.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_character_tables.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_compile_extra_options.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_compile_recursion_guard.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_depth_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_glob_escape.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_glob_separator.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_heap_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_match_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_max_pattern_compiled_length.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_max_pattern_length.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_max_varlookbehind.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_newline.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_offset_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_optimize.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_parens_nest_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_recursion_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_recursion_memory_management.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_substitute_callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_substitute_case_callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substitute.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_copy_byname.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_copy_bynumber.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_get_byname.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_get_bynumber.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_length_byname.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_length_bynumber.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_list_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_list_get.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_nametable_scan.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_number_from_name.3\n-rw-r--r-- install-dir/share/man/man3/pcre2api.3\n-rw-r--r-- install-dir/share/man/man3/pcre2build.3\n-rw-r--r-- install-dir/share/man/man3/pcre2callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2compat.3\n-rw-r--r-- install-dir/share/man/man3/pcre2convert.3\n-rw-r--r-- install-dir/share/man/man3/pcre2demo.3\n-rw-r--r-- install-dir/share/man/man3/pcre2jit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2limits.3\n-rw-r--r-- install-dir/share/man/man3/pcre2matching.3\n-rw-r--r-- install-dir/share/man/man3/pcre2partial.3\n-rw-r--r-- install-dir/share/man/man3/pcre2pattern.3\n-rw-r--r-- install-dir/share/man/man3/pcre2perform.3\n-rw-r--r-- install-dir/share/man/man3/pcre2posix.3\n-rw-r--r-- install-dir/share/man/man3/pcre2sample.3\n-rw-r--r-- install-dir/share/man/man3/pcre2serialize.3\n-rw-r--r-- install-dir/share/man/man3/pcre2syntax.3\n-rw-r--r-- install-dir/share/man/man3/pcre2unicode.3\n"
  },
  {
    "path": "maint/manifest-cmakeinstall-solaris",
    "content": "drwxr-xr-x install-dir\ndrwxr-xr-x install-dir/bin\n-rwxr-xr-x install-dir/bin/pcre2-config\n-rwxr-xr-x install-dir/bin/pcre2grep\n-rwxr-xr-x install-dir/bin/pcre2test\ndrwxr-xr-x install-dir/include\n-rw-r--r-- install-dir/include/pcre2.h\n-rw-r--r-- install-dir/include/pcre2posix.h\ndrwxr-xr-x install-dir/lib\ndrwxr-xr-x install-dir/lib/cmake\ndrwxr-xr-x install-dir/lib/cmake/pcre2\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-config-version.cmake\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-config.cmake\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-targets-release.cmake\n-rw-r--r-- install-dir/lib/cmake/pcre2/pcre2-targets.cmake\n-rw-r--r-- install-dir/lib/libpcre2-16.a\nlrwxrwxrwx install-dir/lib/libpcre2-16.so -> libpcre2-16.so.0\nlrwxrwxrwx install-dir/lib/libpcre2-16.so.0 -> libpcre2-16.so.0.15.0\n-rwxr-xr-x install-dir/lib/libpcre2-16.so.0.15.0\n-rw-r--r-- install-dir/lib/libpcre2-32.a\nlrwxrwxrwx install-dir/lib/libpcre2-32.so -> libpcre2-32.so.0\nlrwxrwxrwx install-dir/lib/libpcre2-32.so.0 -> libpcre2-32.so.0.15.0\n-rwxr-xr-x install-dir/lib/libpcre2-32.so.0.15.0\n-rw-r--r-- install-dir/lib/libpcre2-8.a\nlrwxrwxrwx install-dir/lib/libpcre2-8.so -> libpcre2-8.so.0\nlrwxrwxrwx install-dir/lib/libpcre2-8.so.0 -> libpcre2-8.so.0.15.0\n-rwxr-xr-x install-dir/lib/libpcre2-8.so.0.15.0\n-rw-r--r-- install-dir/lib/libpcre2-posix.a\nlrwxrwxrwx install-dir/lib/libpcre2-posix.so -> libpcre2-posix.so.3\nlrwxrwxrwx install-dir/lib/libpcre2-posix.so.3 -> libpcre2-posix.so.3.0.7\n-rwxr-xr-x install-dir/lib/libpcre2-posix.so.3.0.7\ndrwxr-xr-x install-dir/lib/pkgconfig\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-16.pc\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-32.pc\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-8.pc\n-rw-r--r-- install-dir/lib/pkgconfig/libpcre2-posix.pc\ndrwxr-xr-x install-dir/share\ndrwxr-xr-x install-dir/share/doc\ndrwxr-xr-x install-dir/share/doc/pcre2\n-rw-r--r-- install-dir/share/doc/pcre2/AUTHORS.md\n-rw-r--r-- install-dir/share/doc/pcre2/COPYING\n-rw-r--r-- install-dir/share/doc/pcre2/ChangeLog\n-rw-r--r-- install-dir/share/doc/pcre2/LICENCE.md\n-rw-r--r-- install-dir/share/doc/pcre2/NEWS\n-rw-r--r-- install-dir/share/doc/pcre2/README\n-rw-r--r-- install-dir/share/doc/pcre2/SECURITY.md\ndrwxr-xr-x install-dir/share/doc/pcre2/html\n-rw-r--r-- install-dir/share/doc/pcre2/html/NON-AUTOTOOLS-BUILD.txt\n-rw-r--r-- install-dir/share/doc/pcre2/html/README.txt\n-rw-r--r-- install-dir/share/doc/pcre2/html/index.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2-config.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_callout_enumerate.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_code_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_code_copy_with_tables.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_code_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_compile_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_config.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_convert_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_convert_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_convert_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_converted_pattern_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_dfa_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_general_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_general_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_general_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_error_message.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_mark.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_match_data_heapframes_size.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_match_data_size.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_ovector_count.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_ovector_pointer.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_get_startchar.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_compile.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_free_unused_memory.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_stack_assign.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_stack_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_jit_stack_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_maketables.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_maketables_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_context_copy.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_context_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_context_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_data_create.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_data_create_from_pattern.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_match_data_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_next_match.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_pattern_convert.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_pattern_info.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_decode.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_encode.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_serialize_get_number_of_codes.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_bsr.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_character_tables.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_compile_extra_options.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_compile_recursion_guard.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_depth_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_glob_escape.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_glob_separator.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_heap_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_match_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_max_pattern_compiled_length.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_max_pattern_length.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_max_varlookbehind.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_newline.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_offset_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_optimize.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_parens_nest_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_recursion_limit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_recursion_memory_management.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_substitute_callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_set_substitute_case_callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substitute.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_copy_byname.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_copy_bynumber.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_get_byname.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_get_bynumber.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_length_byname.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_length_bynumber.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_list_free.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_list_get.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_nametable_scan.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2_substring_number_from_name.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2api.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2build.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2callout.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2compat.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2convert.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2demo.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2grep.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2jit.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2limits.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2matching.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2partial.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2pattern.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2perform.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2posix.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2sample.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2serialize.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2syntax.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2test.html\n-rw-r--r-- install-dir/share/doc/pcre2/html/pcre2unicode.html\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2-config.txt\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2.txt\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2grep.txt\n-rw-r--r-- install-dir/share/doc/pcre2/pcre2test.txt\ndrwxr-xr-x install-dir/share/man\ndrwxr-xr-x install-dir/share/man/man1\n-rw-r--r-- install-dir/share/man/man1/pcre2-config.1\n-rw-r--r-- install-dir/share/man/man1/pcre2grep.1\n-rw-r--r-- install-dir/share/man/man1/pcre2test.1\ndrwxr-xr-x install-dir/share/man/man3\n-rw-r--r-- install-dir/share/man/man3/pcre2.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_callout_enumerate.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_code_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_code_copy_with_tables.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_code_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_compile_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_config.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_convert_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_convert_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_convert_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_converted_pattern_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_dfa_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_general_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_general_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_general_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_error_message.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_mark.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_match_data_heapframes_size.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_match_data_size.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_ovector_count.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_ovector_pointer.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_get_startchar.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_compile.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_free_unused_memory.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_stack_assign.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_stack_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_jit_stack_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_maketables.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_maketables_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_context_copy.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_context_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_context_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_data_create.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_data_create_from_pattern.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_match_data_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_next_match.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_pattern_convert.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_pattern_info.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_decode.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_encode.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_serialize_get_number_of_codes.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_bsr.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_character_tables.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_compile_extra_options.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_compile_recursion_guard.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_depth_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_glob_escape.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_glob_separator.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_heap_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_match_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_max_pattern_compiled_length.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_max_pattern_length.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_max_varlookbehind.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_newline.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_offset_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_optimize.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_parens_nest_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_recursion_limit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_recursion_memory_management.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_substitute_callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_set_substitute_case_callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substitute.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_copy_byname.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_copy_bynumber.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_get_byname.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_get_bynumber.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_length_byname.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_length_bynumber.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_list_free.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_list_get.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_nametable_scan.3\n-rw-r--r-- install-dir/share/man/man3/pcre2_substring_number_from_name.3\n-rw-r--r-- install-dir/share/man/man3/pcre2api.3\n-rw-r--r-- install-dir/share/man/man3/pcre2build.3\n-rw-r--r-- install-dir/share/man/man3/pcre2callout.3\n-rw-r--r-- install-dir/share/man/man3/pcre2compat.3\n-rw-r--r-- install-dir/share/man/man3/pcre2convert.3\n-rw-r--r-- install-dir/share/man/man3/pcre2demo.3\n-rw-r--r-- install-dir/share/man/man3/pcre2jit.3\n-rw-r--r-- install-dir/share/man/man3/pcre2limits.3\n-rw-r--r-- install-dir/share/man/man3/pcre2matching.3\n-rw-r--r-- install-dir/share/man/man3/pcre2partial.3\n-rw-r--r-- install-dir/share/man/man3/pcre2pattern.3\n-rw-r--r-- install-dir/share/man/man3/pcre2perform.3\n-rw-r--r-- install-dir/share/man/man3/pcre2posix.3\n-rw-r--r-- install-dir/share/man/man3/pcre2sample.3\n-rw-r--r-- install-dir/share/man/man3/pcre2serialize.3\n-rw-r--r-- install-dir/share/man/man3/pcre2syntax.3\n-rw-r--r-- install-dir/share/man/man3/pcre2unicode.3\n"
  },
  {
    "path": "maint/manifest-cmakeinstall-windows",
    "content": "d---- .\\install-dir\\bin\n-a--- .\\install-dir\\bin\\pcre2-16.dll\n-a--- .\\install-dir\\bin\\pcre2-32.dll\n-a--- .\\install-dir\\bin\\pcre2-8.dll\n-a--- .\\install-dir\\bin\\pcre2-config\n-a--- .\\install-dir\\bin\\pcre2-posix.dll\n-a--- .\\install-dir\\bin\\pcre2grep.exe\n-a--- .\\install-dir\\bin\\pcre2test.exe\nd---- .\\install-dir\\include\n-a--- .\\install-dir\\include\\pcre2.h\n-a--- .\\install-dir\\include\\pcre2posix.h\nd---- .\\install-dir\\lib\nd---- .\\install-dir\\lib\\cmake\nd---- .\\install-dir\\lib\\cmake\\pcre2\n-a--- .\\install-dir\\lib\\cmake\\pcre2\\pcre2-config-version.cmake\n-a--- .\\install-dir\\lib\\cmake\\pcre2\\pcre2-config.cmake\n-a--- .\\install-dir\\lib\\cmake\\pcre2\\pcre2-targets-release.cmake\n-a--- .\\install-dir\\lib\\cmake\\pcre2\\pcre2-targets.cmake\n-a--- .\\install-dir\\lib\\pcre2-16-static.lib\n-a--- .\\install-dir\\lib\\pcre2-16.lib\n-a--- .\\install-dir\\lib\\pcre2-32-static.lib\n-a--- .\\install-dir\\lib\\pcre2-32.lib\n-a--- .\\install-dir\\lib\\pcre2-8-static.lib\n-a--- .\\install-dir\\lib\\pcre2-8.lib\n-a--- .\\install-dir\\lib\\pcre2-posix-static.lib\n-a--- .\\install-dir\\lib\\pcre2-posix.lib\nd---- .\\install-dir\\lib\\pkgconfig\n-a--- .\\install-dir\\lib\\pkgconfig\\libpcre2-16.pc\n-a--- .\\install-dir\\lib\\pkgconfig\\libpcre2-32.pc\n-a--- .\\install-dir\\lib\\pkgconfig\\libpcre2-8.pc\n-a--- .\\install-dir\\lib\\pkgconfig\\libpcre2-posix.pc\nd---- .\\install-dir\\share\nd---- .\\install-dir\\share\\doc\nd---- .\\install-dir\\share\\doc\\pcre2\n-a--- .\\install-dir\\share\\doc\\pcre2\\AUTHORS.md\n-a--- .\\install-dir\\share\\doc\\pcre2\\COPYING\n-a--- .\\install-dir\\share\\doc\\pcre2\\ChangeLog\n-a--- .\\install-dir\\share\\doc\\pcre2\\LICENCE.md\n-a--- .\\install-dir\\share\\doc\\pcre2\\NEWS\n-a--- .\\install-dir\\share\\doc\\pcre2\\README\n-a--- .\\install-dir\\share\\doc\\pcre2\\SECURITY.md\nd---- .\\install-dir\\share\\doc\\pcre2\\html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\NON-AUTOTOOLS-BUILD.txt\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\README.txt\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\index.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2-config.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_callout_enumerate.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_code_copy.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_code_copy_with_tables.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_code_free.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_compile.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_compile_context_copy.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_compile_context_create.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_compile_context_free.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_config.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_convert_context_copy.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_convert_context_create.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_convert_context_free.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_converted_pattern_free.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_dfa_match.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_general_context_copy.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_general_context_create.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_general_context_free.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_get_error_message.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_get_mark.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_get_match_data_heapframes_size.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_get_match_data_size.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_get_ovector_count.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_get_ovector_pointer.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_get_startchar.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_jit_compile.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_jit_free_unused_memory.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_jit_match.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_jit_stack_assign.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_jit_stack_create.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_jit_stack_free.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_maketables.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_maketables_free.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_match.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_match_context_copy.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_match_context_create.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_match_context_free.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_match_data_create.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_match_data_create_from_pattern.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_match_data_free.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_next_match.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_pattern_convert.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_pattern_info.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_serialize_decode.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_serialize_encode.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_serialize_free.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_serialize_get_number_of_codes.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_bsr.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_callout.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_character_tables.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_compile_extra_options.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_compile_recursion_guard.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_depth_limit.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_glob_escape.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_glob_separator.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_heap_limit.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_match_limit.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_max_pattern_compiled_length.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_max_pattern_length.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_max_varlookbehind.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_newline.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_offset_limit.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_optimize.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_parens_nest_limit.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_recursion_limit.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_recursion_memory_management.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_substitute_callout.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_set_substitute_case_callout.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_substitute.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_substring_copy_byname.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_substring_copy_bynumber.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_substring_free.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_substring_get_byname.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_substring_get_bynumber.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_substring_length_byname.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_substring_length_bynumber.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_substring_list_free.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_substring_list_get.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_substring_nametable_scan.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2_substring_number_from_name.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2api.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2build.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2callout.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2compat.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2convert.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2demo.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2grep.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2jit.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2limits.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2matching.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2partial.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2pattern.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2perform.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2posix.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2sample.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2serialize.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2syntax.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2test.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\html\\pcre2unicode.html\n-a--- .\\install-dir\\share\\doc\\pcre2\\pcre2-config.txt\n-a--- .\\install-dir\\share\\doc\\pcre2\\pcre2.txt\n-a--- .\\install-dir\\share\\doc\\pcre2\\pcre2grep.txt\n-a--- .\\install-dir\\share\\doc\\pcre2\\pcre2test.txt\nd---- .\\install-dir\\share\\man\nd---- .\\install-dir\\share\\man\\man1\n-a--- .\\install-dir\\share\\man\\man1\\pcre2-config.1\n-a--- .\\install-dir\\share\\man\\man1\\pcre2grep.1\n-a--- .\\install-dir\\share\\man\\man1\\pcre2test.1\nd---- .\\install-dir\\share\\man\\man3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_callout_enumerate.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_code_copy.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_code_copy_with_tables.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_code_free.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_compile.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_compile_context_copy.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_compile_context_create.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_compile_context_free.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_config.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_convert_context_copy.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_convert_context_create.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_convert_context_free.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_converted_pattern_free.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_dfa_match.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_general_context_copy.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_general_context_create.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_general_context_free.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_get_error_message.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_get_mark.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_get_match_data_heapframes_size.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_get_match_data_size.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_get_ovector_count.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_get_ovector_pointer.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_get_startchar.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_jit_compile.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_jit_free_unused_memory.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_jit_match.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_jit_stack_assign.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_jit_stack_create.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_jit_stack_free.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_maketables.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_maketables_free.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_match.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_match_context_copy.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_match_context_create.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_match_context_free.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_match_data_create.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_match_data_create_from_pattern.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_match_data_free.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_next_match.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_pattern_convert.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_pattern_info.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_serialize_decode.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_serialize_encode.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_serialize_free.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_serialize_get_number_of_codes.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_bsr.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_callout.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_character_tables.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_compile_extra_options.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_compile_recursion_guard.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_depth_limit.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_glob_escape.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_glob_separator.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_heap_limit.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_match_limit.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_max_pattern_compiled_length.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_max_pattern_length.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_max_varlookbehind.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_newline.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_offset_limit.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_optimize.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_parens_nest_limit.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_recursion_limit.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_recursion_memory_management.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_substitute_callout.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_set_substitute_case_callout.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_substitute.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_substring_copy_byname.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_substring_copy_bynumber.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_substring_free.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_substring_get_byname.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_substring_get_bynumber.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_substring_length_byname.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_substring_length_bynumber.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_substring_list_free.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_substring_list_get.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_substring_nametable_scan.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2_substring_number_from_name.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2api.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2build.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2callout.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2compat.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2convert.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2demo.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2jit.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2limits.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2matching.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2partial.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2pattern.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2perform.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2posix.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2sample.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2serialize.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2syntax.3\n-a--- .\\install-dir\\share\\man\\man3\\pcre2unicode.3\n"
  },
  {
    "path": "maint/manifest-makeinstall-freebsd",
    "content": "drwxr-xr-x install-dir\ndrwxr-xr-x install-dir/usr\ndrwxr-xr-x install-dir/usr/local\ndrwxr-xr-x install-dir/usr/local/bin\n-rwxr-xr-x install-dir/usr/local/bin/pcre2-config\n-rwxr-xr-x install-dir/usr/local/bin/pcre2grep\n-rwxr-xr-x install-dir/usr/local/bin/pcre2test\ndrwxr-xr-x install-dir/usr/local/include\n-rw-r--r-- install-dir/usr/local/include/pcre2.h\n-rw-r--r-- install-dir/usr/local/include/pcre2posix.h\ndrwxr-xr-x install-dir/usr/local/lib\n-rw-r--r-- install-dir/usr/local/lib/libpcre2-16.a\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-16.la\nlrwxr-xr-x install-dir/usr/local/lib/libpcre2-16.so -> libpcre2-16.so.0.15.0\nlrwxr-xr-x install-dir/usr/local/lib/libpcre2-16.so.0 -> libpcre2-16.so.0.15.0\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-16.so.0.15.0\n-rw-r--r-- install-dir/usr/local/lib/libpcre2-32.a\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-32.la\nlrwxr-xr-x install-dir/usr/local/lib/libpcre2-32.so -> libpcre2-32.so.0.15.0\nlrwxr-xr-x install-dir/usr/local/lib/libpcre2-32.so.0 -> libpcre2-32.so.0.15.0\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-32.so.0.15.0\n-rw-r--r-- install-dir/usr/local/lib/libpcre2-8.a\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-8.la\nlrwxr-xr-x install-dir/usr/local/lib/libpcre2-8.so -> libpcre2-8.so.0.15.0\nlrwxr-xr-x install-dir/usr/local/lib/libpcre2-8.so.0 -> libpcre2-8.so.0.15.0\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-8.so.0.15.0\n-rw-r--r-- install-dir/usr/local/lib/libpcre2-posix.a\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-posix.la\nlrwxr-xr-x install-dir/usr/local/lib/libpcre2-posix.so -> libpcre2-posix.so.3.0.7\nlrwxr-xr-x install-dir/usr/local/lib/libpcre2-posix.so.3 -> libpcre2-posix.so.3.0.7\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-posix.so.3.0.7\ndrwxr-xr-x install-dir/usr/local/lib/pkgconfig\n-rw-r--r-- install-dir/usr/local/lib/pkgconfig/libpcre2-16.pc\n-rw-r--r-- install-dir/usr/local/lib/pkgconfig/libpcre2-32.pc\n-rw-r--r-- install-dir/usr/local/lib/pkgconfig/libpcre2-8.pc\n-rw-r--r-- install-dir/usr/local/lib/pkgconfig/libpcre2-posix.pc\ndrwxr-xr-x install-dir/usr/local/share\ndrwxr-xr-x install-dir/usr/local/share/doc\ndrwxr-xr-x install-dir/usr/local/share/doc/pcre2\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/AUTHORS.md\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/COPYING\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/ChangeLog\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/LICENCE.md\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/NEWS\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/README\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/SECURITY.md\ndrwxr-xr-x install-dir/usr/local/share/doc/pcre2/html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/NON-AUTOTOOLS-BUILD.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/README.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/index.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2-config.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_callout_enumerate.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_code_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_code_copy_with_tables.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_code_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_compile.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_compile_context_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_compile_context_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_compile_context_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_config.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_convert_context_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_convert_context_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_convert_context_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_converted_pattern_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_dfa_match.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_general_context_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_general_context_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_general_context_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_error_message.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_mark.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_match_data_heapframes_size.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_match_data_size.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_ovector_count.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_ovector_pointer.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_startchar.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_compile.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_free_unused_memory.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_match.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_stack_assign.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_stack_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_stack_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_maketables.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_maketables_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_context_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_context_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_context_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_data_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_data_create_from_pattern.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_data_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_next_match.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_pattern_convert.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_pattern_info.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_serialize_decode.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_serialize_encode.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_serialize_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_serialize_get_number_of_codes.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_bsr.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_callout.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_character_tables.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_compile_extra_options.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_compile_recursion_guard.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_depth_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_glob_escape.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_glob_separator.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_heap_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_match_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_max_pattern_compiled_length.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_max_pattern_length.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_max_varlookbehind.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_newline.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_offset_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_optimize.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_parens_nest_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_recursion_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_recursion_memory_management.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_substitute_callout.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_substitute_case_callout.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substitute.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_copy_byname.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_copy_bynumber.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_get_byname.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_get_bynumber.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_length_byname.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_length_bynumber.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_list_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_list_get.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_nametable_scan.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_number_from_name.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2api.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2build.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2callout.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2compat.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2convert.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2demo.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2grep.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2jit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2limits.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2matching.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2partial.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2pattern.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2perform.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2posix.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2sample.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2serialize.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2syntax.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2test.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2unicode.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/pcre2-config.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/pcre2.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/pcre2grep.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/pcre2test.txt\ndrwxr-xr-x install-dir/usr/local/share/man\ndrwxr-xr-x install-dir/usr/local/share/man/man1\n-rw-r--r-- install-dir/usr/local/share/man/man1/pcre2-config.1\n-rw-r--r-- install-dir/usr/local/share/man/man1/pcre2grep.1\n-rw-r--r-- install-dir/usr/local/share/man/man1/pcre2test.1\ndrwxr-xr-x install-dir/usr/local/share/man/man3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_callout_enumerate.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_code_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_code_copy_with_tables.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_code_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_compile.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_compile_context_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_compile_context_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_compile_context_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_config.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_convert_context_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_convert_context_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_convert_context_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_converted_pattern_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_dfa_match.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_general_context_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_general_context_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_general_context_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_error_message.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_mark.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_match_data_heapframes_size.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_match_data_size.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_ovector_count.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_ovector_pointer.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_startchar.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_compile.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_free_unused_memory.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_match.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_stack_assign.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_stack_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_stack_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_maketables.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_maketables_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_context_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_context_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_context_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_data_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_data_create_from_pattern.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_data_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_next_match.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_pattern_convert.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_pattern_info.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_serialize_decode.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_serialize_encode.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_serialize_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_serialize_get_number_of_codes.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_bsr.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_callout.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_character_tables.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_compile_extra_options.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_compile_recursion_guard.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_depth_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_glob_escape.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_glob_separator.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_heap_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_match_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_max_pattern_compiled_length.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_max_pattern_length.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_max_varlookbehind.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_newline.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_offset_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_optimize.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_parens_nest_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_recursion_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_recursion_memory_management.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_substitute_callout.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_substitute_case_callout.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substitute.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_copy_byname.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_copy_bynumber.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_get_byname.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_get_bynumber.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_length_byname.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_length_bynumber.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_list_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_list_get.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_nametable_scan.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_number_from_name.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2api.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2build.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2callout.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2compat.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2convert.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2demo.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2jit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2limits.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2matching.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2partial.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2pattern.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2perform.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2posix.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2sample.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2serialize.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2syntax.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2unicode.3\n"
  },
  {
    "path": "maint/manifest-makeinstall-linux",
    "content": "drwxr-xr-x install-dir\ndrwxr-xr-x install-dir/usr\ndrwxr-xr-x install-dir/usr/local\ndrwxr-xr-x install-dir/usr/local/bin\n-rwxr-xr-x install-dir/usr/local/bin/pcre2-config\n-rwxr-xr-x install-dir/usr/local/bin/pcre2grep\n-rwxr-xr-x install-dir/usr/local/bin/pcre2test\ndrwxr-xr-x install-dir/usr/local/include\n-rw-r--r-- install-dir/usr/local/include/pcre2.h\n-rw-r--r-- install-dir/usr/local/include/pcre2posix.h\ndrwxr-xr-x install-dir/usr/local/lib\n-rw-r--r-- install-dir/usr/local/lib/libpcre2-16.a\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-16.la\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-16.so -> libpcre2-16.so.0.15.0\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-16.so.0 -> libpcre2-16.so.0.15.0\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-16.so.0.15.0\n-rw-r--r-- install-dir/usr/local/lib/libpcre2-32.a\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-32.la\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-32.so -> libpcre2-32.so.0.15.0\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-32.so.0 -> libpcre2-32.so.0.15.0\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-32.so.0.15.0\n-rw-r--r-- install-dir/usr/local/lib/libpcre2-8.a\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-8.la\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-8.so -> libpcre2-8.so.0.15.0\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-8.so.0 -> libpcre2-8.so.0.15.0\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-8.so.0.15.0\n-rw-r--r-- install-dir/usr/local/lib/libpcre2-posix.a\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-posix.la\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-posix.so -> libpcre2-posix.so.3.0.7\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-posix.so.3 -> libpcre2-posix.so.3.0.7\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-posix.so.3.0.7\ndrwxr-xr-x install-dir/usr/local/lib/pkgconfig\n-rw-r--r-- install-dir/usr/local/lib/pkgconfig/libpcre2-16.pc\n-rw-r--r-- install-dir/usr/local/lib/pkgconfig/libpcre2-32.pc\n-rw-r--r-- install-dir/usr/local/lib/pkgconfig/libpcre2-8.pc\n-rw-r--r-- install-dir/usr/local/lib/pkgconfig/libpcre2-posix.pc\ndrwxr-xr-x install-dir/usr/local/share\ndrwxr-xr-x install-dir/usr/local/share/doc\ndrwxr-xr-x install-dir/usr/local/share/doc/pcre2\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/AUTHORS.md\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/COPYING\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/ChangeLog\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/LICENCE.md\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/NEWS\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/README\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/SECURITY.md\ndrwxr-xr-x install-dir/usr/local/share/doc/pcre2/html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/NON-AUTOTOOLS-BUILD.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/README.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/index.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2-config.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_callout_enumerate.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_code_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_code_copy_with_tables.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_code_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_compile.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_compile_context_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_compile_context_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_compile_context_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_config.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_convert_context_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_convert_context_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_convert_context_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_converted_pattern_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_dfa_match.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_general_context_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_general_context_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_general_context_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_error_message.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_mark.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_match_data_heapframes_size.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_match_data_size.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_ovector_count.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_ovector_pointer.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_startchar.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_compile.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_free_unused_memory.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_match.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_stack_assign.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_stack_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_stack_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_maketables.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_maketables_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_context_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_context_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_context_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_data_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_data_create_from_pattern.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_data_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_next_match.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_pattern_convert.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_pattern_info.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_serialize_decode.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_serialize_encode.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_serialize_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_serialize_get_number_of_codes.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_bsr.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_callout.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_character_tables.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_compile_extra_options.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_compile_recursion_guard.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_depth_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_glob_escape.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_glob_separator.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_heap_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_match_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_max_pattern_compiled_length.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_max_pattern_length.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_max_varlookbehind.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_newline.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_offset_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_optimize.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_parens_nest_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_recursion_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_recursion_memory_management.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_substitute_callout.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_substitute_case_callout.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substitute.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_copy_byname.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_copy_bynumber.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_get_byname.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_get_bynumber.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_length_byname.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_length_bynumber.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_list_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_list_get.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_nametable_scan.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_number_from_name.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2api.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2build.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2callout.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2compat.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2convert.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2demo.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2grep.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2jit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2limits.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2matching.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2partial.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2pattern.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2perform.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2posix.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2sample.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2serialize.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2syntax.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2test.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2unicode.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/pcre2-config.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/pcre2.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/pcre2grep.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/pcre2test.txt\ndrwxr-xr-x install-dir/usr/local/share/man\ndrwxr-xr-x install-dir/usr/local/share/man/man1\n-rw-r--r-- install-dir/usr/local/share/man/man1/pcre2-config.1\n-rw-r--r-- install-dir/usr/local/share/man/man1/pcre2grep.1\n-rw-r--r-- install-dir/usr/local/share/man/man1/pcre2test.1\ndrwxr-xr-x install-dir/usr/local/share/man/man3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_callout_enumerate.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_code_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_code_copy_with_tables.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_code_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_compile.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_compile_context_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_compile_context_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_compile_context_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_config.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_convert_context_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_convert_context_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_convert_context_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_converted_pattern_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_dfa_match.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_general_context_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_general_context_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_general_context_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_error_message.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_mark.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_match_data_heapframes_size.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_match_data_size.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_ovector_count.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_ovector_pointer.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_startchar.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_compile.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_free_unused_memory.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_match.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_stack_assign.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_stack_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_stack_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_maketables.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_maketables_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_context_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_context_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_context_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_data_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_data_create_from_pattern.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_data_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_next_match.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_pattern_convert.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_pattern_info.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_serialize_decode.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_serialize_encode.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_serialize_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_serialize_get_number_of_codes.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_bsr.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_callout.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_character_tables.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_compile_extra_options.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_compile_recursion_guard.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_depth_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_glob_escape.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_glob_separator.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_heap_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_match_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_max_pattern_compiled_length.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_max_pattern_length.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_max_varlookbehind.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_newline.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_offset_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_optimize.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_parens_nest_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_recursion_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_recursion_memory_management.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_substitute_callout.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_substitute_case_callout.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substitute.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_copy_byname.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_copy_bynumber.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_get_byname.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_get_bynumber.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_length_byname.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_length_bynumber.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_list_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_list_get.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_nametable_scan.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_number_from_name.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2api.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2build.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2callout.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2compat.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2convert.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2demo.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2jit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2limits.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2matching.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2partial.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2pattern.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2perform.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2posix.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2sample.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2serialize.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2syntax.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2unicode.3\n"
  },
  {
    "path": "maint/manifest-makeinstall-solaris",
    "content": "drwxr-xr-x install-dir\ndrwxr-xr-x install-dir/usr\ndrwxr-xr-x install-dir/usr/local\ndrwxr-xr-x install-dir/usr/local/bin\n-rwxr-xr-x install-dir/usr/local/bin/pcre2-config\n-rwxr-xr-x install-dir/usr/local/bin/pcre2grep\n-rwxr-xr-x install-dir/usr/local/bin/pcre2test\ndrwxr-xr-x install-dir/usr/local/include\n-rw-r--r-- install-dir/usr/local/include/pcre2.h\n-rw-r--r-- install-dir/usr/local/include/pcre2posix.h\ndrwxr-xr-x install-dir/usr/local/lib\n-rw-r--r-- install-dir/usr/local/lib/libpcre2-16.a\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-16.la\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-16.so -> libpcre2-16.so.0.15.0\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-16.so.0 -> libpcre2-16.so.0.15.0\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-16.so.0.15.0\n-rw-r--r-- install-dir/usr/local/lib/libpcre2-32.a\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-32.la\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-32.so -> libpcre2-32.so.0.15.0\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-32.so.0 -> libpcre2-32.so.0.15.0\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-32.so.0.15.0\n-rw-r--r-- install-dir/usr/local/lib/libpcre2-8.a\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-8.la\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-8.so -> libpcre2-8.so.0.15.0\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-8.so.0 -> libpcre2-8.so.0.15.0\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-8.so.0.15.0\n-rw-r--r-- install-dir/usr/local/lib/libpcre2-posix.a\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-posix.la\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-posix.so -> libpcre2-posix.so.3.0.7\nlrwxrwxrwx install-dir/usr/local/lib/libpcre2-posix.so.3 -> libpcre2-posix.so.3.0.7\n-rwxr-xr-x install-dir/usr/local/lib/libpcre2-posix.so.3.0.7\ndrwxr-xr-x install-dir/usr/local/lib/pkgconfig\n-rw-r--r-- install-dir/usr/local/lib/pkgconfig/libpcre2-16.pc\n-rw-r--r-- install-dir/usr/local/lib/pkgconfig/libpcre2-32.pc\n-rw-r--r-- install-dir/usr/local/lib/pkgconfig/libpcre2-8.pc\n-rw-r--r-- install-dir/usr/local/lib/pkgconfig/libpcre2-posix.pc\ndrwxr-xr-x install-dir/usr/local/share\ndrwxr-xr-x install-dir/usr/local/share/doc\ndrwxr-xr-x install-dir/usr/local/share/doc/pcre2\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/AUTHORS.md\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/COPYING\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/ChangeLog\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/LICENCE.md\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/NEWS\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/README\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/SECURITY.md\ndrwxr-xr-x install-dir/usr/local/share/doc/pcre2/html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/NON-AUTOTOOLS-BUILD.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/README.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/index.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2-config.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_callout_enumerate.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_code_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_code_copy_with_tables.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_code_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_compile.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_compile_context_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_compile_context_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_compile_context_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_config.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_convert_context_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_convert_context_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_convert_context_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_converted_pattern_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_dfa_match.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_general_context_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_general_context_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_general_context_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_error_message.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_mark.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_match_data_heapframes_size.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_match_data_size.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_ovector_count.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_ovector_pointer.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_get_startchar.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_compile.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_free_unused_memory.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_match.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_stack_assign.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_stack_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_jit_stack_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_maketables.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_maketables_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_context_copy.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_context_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_context_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_data_create.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_data_create_from_pattern.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_match_data_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_next_match.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_pattern_convert.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_pattern_info.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_serialize_decode.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_serialize_encode.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_serialize_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_serialize_get_number_of_codes.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_bsr.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_callout.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_character_tables.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_compile_extra_options.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_compile_recursion_guard.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_depth_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_glob_escape.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_glob_separator.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_heap_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_match_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_max_pattern_compiled_length.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_max_pattern_length.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_max_varlookbehind.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_newline.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_offset_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_optimize.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_parens_nest_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_recursion_limit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_recursion_memory_management.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_substitute_callout.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_set_substitute_case_callout.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substitute.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_copy_byname.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_copy_bynumber.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_get_byname.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_get_bynumber.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_length_byname.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_length_bynumber.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_list_free.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_list_get.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_nametable_scan.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2_substring_number_from_name.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2api.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2build.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2callout.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2compat.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2convert.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2demo.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2grep.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2jit.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2limits.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2matching.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2partial.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2pattern.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2perform.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2posix.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2sample.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2serialize.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2syntax.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2test.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/html/pcre2unicode.html\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/pcre2-config.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/pcre2.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/pcre2grep.txt\n-rw-r--r-- install-dir/usr/local/share/doc/pcre2/pcre2test.txt\ndrwxr-xr-x install-dir/usr/local/share/man\ndrwxr-xr-x install-dir/usr/local/share/man/man1\n-rw-r--r-- install-dir/usr/local/share/man/man1/pcre2-config.1\n-rw-r--r-- install-dir/usr/local/share/man/man1/pcre2grep.1\n-rw-r--r-- install-dir/usr/local/share/man/man1/pcre2test.1\ndrwxr-xr-x install-dir/usr/local/share/man/man3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_callout_enumerate.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_code_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_code_copy_with_tables.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_code_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_compile.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_compile_context_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_compile_context_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_compile_context_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_config.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_convert_context_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_convert_context_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_convert_context_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_converted_pattern_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_dfa_match.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_general_context_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_general_context_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_general_context_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_error_message.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_mark.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_match_data_heapframes_size.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_match_data_size.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_ovector_count.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_ovector_pointer.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_get_startchar.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_compile.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_free_unused_memory.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_match.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_stack_assign.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_stack_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_jit_stack_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_maketables.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_maketables_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_context_copy.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_context_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_context_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_data_create.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_data_create_from_pattern.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_match_data_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_next_match.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_pattern_convert.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_pattern_info.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_serialize_decode.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_serialize_encode.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_serialize_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_serialize_get_number_of_codes.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_bsr.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_callout.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_character_tables.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_compile_extra_options.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_compile_recursion_guard.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_depth_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_glob_escape.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_glob_separator.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_heap_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_match_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_max_pattern_compiled_length.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_max_pattern_length.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_max_varlookbehind.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_newline.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_offset_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_optimize.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_parens_nest_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_recursion_limit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_recursion_memory_management.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_substitute_callout.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_set_substitute_case_callout.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substitute.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_copy_byname.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_copy_bynumber.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_get_byname.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_get_bynumber.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_length_byname.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_length_bynumber.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_list_free.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_list_get.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_nametable_scan.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2_substring_number_from_name.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2api.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2build.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2callout.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2compat.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2convert.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2demo.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2jit.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2limits.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2matching.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2partial.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2pattern.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2perform.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2posix.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2sample.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2serialize.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2syntax.3\n-rw-r--r-- install-dir/usr/local/share/man/man3/pcre2unicode.3\n"
  },
  {
    "path": "maint/manifest-tarball",
    "content": "drwxr-xr-x tarball-dir\ndrwxr-xr-x tarball-dir/pcre2-SNAPSHOT\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/AUTHORS.md\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/BUILD.bazel\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/CMakeLists.txt\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/COPYING\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/ChangeLog\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/HACKING\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/INSTALL\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/LICENCE.md\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/MODULE.bazel\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/Makefile.am\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/Makefile.in\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/NEWS\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/NON-AUTOTOOLS-BUILD\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/README\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/RunGrepTest\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/RunGrepTest.bat\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/RunTest\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/RunTest.bat\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/SECURITY.md\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/aclocal.m4\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/ar-lib\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/build.zig\ndrwxr-xr-x tarball-dir/pcre2-SNAPSHOT/cmake\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/cmake/COPYING-CMAKE-SCRIPTS\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/cmake/FindEditline.cmake\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/cmake/FindReadline.cmake\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/cmake/PCRE2CheckVscript.cmake\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/cmake/PCRE2UseSystemExtensions.cmake\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/cmake/PCRE2WarningAsError.cmake\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/cmake/pcre2-config.cmake.in\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/compile\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/config.guess\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/config.sub\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/configure\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/configure.ac\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/depcomp\ndrwxr-xr-x tarball-dir/pcre2-SNAPSHOT/deps\ndrwxr-xr-x tarball-dir/pcre2-SNAPSHOT/deps/sljit\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/LICENSE\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/README.md\ndrwxr-xr-x tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src\ndrwxr-xr-x tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/allocator_src\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/allocator_src/sljitExecAllocatorApple.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/allocator_src/sljitExecAllocatorCore.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/allocator_src/sljitExecAllocatorFreeBSD.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/allocator_src/sljitExecAllocatorPosix.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/allocator_src/sljitExecAllocatorWindows.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/allocator_src/sljitProtExecAllocatorNetBSD.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/allocator_src/sljitProtExecAllocatorPosix.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorWindows.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitConfig.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitConfigCPU.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitConfigInternal.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitLir.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitLir.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeARM_32.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeARM_64.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeARM_T2_32.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeMIPS_32.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeMIPS_64.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeMIPS_common.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativePPC_32.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativePPC_64.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativePPC_common.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeRISCV_32.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeRISCV_64.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeRISCV_common.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeS390X.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeX86_32.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeX86_64.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitNativeX86_common.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitSerialize.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/deps/sljit/sljit_src/sljitUtils.c\ndrwxr-xr-x tarball-dir/pcre2-SNAPSHOT/doc\ndrwxr-xr-x tarball-dir/pcre2-SNAPSHOT/doc/html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/NON-AUTOTOOLS-BUILD.txt\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/README.txt\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/index.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2-config.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_callout_enumerate.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_code_copy.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_code_copy_with_tables.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_code_free.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_compile.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_compile_context_copy.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_compile_context_create.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_compile_context_free.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_config.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_convert_context_copy.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_convert_context_create.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_convert_context_free.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_converted_pattern_free.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_dfa_match.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_general_context_copy.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_general_context_create.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_general_context_free.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_get_error_message.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_get_mark.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_get_match_data_heapframes_size.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_get_match_data_size.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_get_ovector_count.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_get_ovector_pointer.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_get_startchar.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_jit_compile.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_jit_free_unused_memory.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_jit_match.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_jit_stack_assign.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_jit_stack_create.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_jit_stack_free.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_maketables.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_maketables_free.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_match.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_match_context_copy.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_match_context_create.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_match_context_free.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_match_data_create.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_match_data_create_from_pattern.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_match_data_free.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_next_match.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_pattern_convert.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_pattern_info.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_serialize_decode.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_serialize_encode.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_serialize_free.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_serialize_get_number_of_codes.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_bsr.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_callout.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_character_tables.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_compile_extra_options.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_compile_recursion_guard.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_depth_limit.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_glob_escape.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_glob_separator.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_heap_limit.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_match_limit.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_max_pattern_compiled_length.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_max_pattern_length.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_max_varlookbehind.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_newline.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_offset_limit.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_optimize.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_parens_nest_limit.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_recursion_limit.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_recursion_memory_management.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_substitute_callout.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_set_substitute_case_callout.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_substitute.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_substring_copy_byname.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_substring_copy_bynumber.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_substring_free.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_substring_get_byname.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_substring_get_bynumber.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_substring_length_byname.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_substring_length_bynumber.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_substring_list_free.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_substring_list_get.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_substring_nametable_scan.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2_substring_number_from_name.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2api.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2build.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2callout.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2compat.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2convert.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2demo.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2grep.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2jit.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2limits.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2matching.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2partial.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2pattern.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2perform.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2posix.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2sample.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2serialize.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2syntax.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2test.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/html/pcre2unicode.html\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2-config.1\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2-config.txt\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2.txt\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_callout_enumerate.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_code_copy.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_code_copy_with_tables.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_code_free.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_compile.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_compile_context_copy.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_compile_context_create.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_compile_context_free.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_config.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_convert_context_copy.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_convert_context_create.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_convert_context_free.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_converted_pattern_free.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_dfa_match.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_general_context_copy.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_general_context_create.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_general_context_free.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_get_error_message.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_get_mark.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_get_match_data_heapframes_size.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_get_match_data_size.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_get_ovector_count.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_get_ovector_pointer.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_get_startchar.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_jit_compile.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_jit_free_unused_memory.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_jit_match.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_jit_stack_assign.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_jit_stack_create.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_jit_stack_free.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_maketables.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_maketables_free.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_match.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_match_context_copy.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_match_context_create.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_match_context_free.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_match_data_create.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_match_data_create_from_pattern.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_match_data_free.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_next_match.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_pattern_convert.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_pattern_info.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_serialize_decode.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_serialize_encode.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_serialize_free.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_serialize_get_number_of_codes.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_bsr.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_callout.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_character_tables.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_compile_extra_options.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_compile_recursion_guard.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_depth_limit.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_glob_escape.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_glob_separator.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_heap_limit.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_match_limit.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_max_pattern_compiled_length.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_max_pattern_length.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_max_varlookbehind.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_newline.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_offset_limit.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_optimize.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_parens_nest_limit.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_recursion_limit.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_recursion_memory_management.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_substitute_callout.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_set_substitute_case_callout.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_substitute.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_substring_copy_byname.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_substring_copy_bynumber.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_substring_free.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_substring_get_byname.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_substring_get_bynumber.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_substring_length_byname.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_substring_length_bynumber.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_substring_list_free.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_substring_list_get.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_substring_nametable_scan.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2_substring_number_from_name.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2api.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2build.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2callout.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2compat.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2convert.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2demo.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2grep.1\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2grep.txt\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2jit.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2limits.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2matching.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2partial.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2pattern.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2perform.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2posix.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2sample.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2serialize.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2syntax.3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2test.1\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2test.txt\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/doc/pcre2unicode.3\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/install-sh\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/libpcre2-16.pc.in\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/libpcre2-32.pc.in\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/libpcre2-8.pc.in\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/libpcre2-posix.pc.in\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/ltmain.sh\ndrwxr-xr-x tarball-dir/pcre2-SNAPSHOT/m4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/m4/ax_pthread.m4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/m4/libtool.m4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/m4/ltoptions.m4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/m4/ltsugar.m4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/m4/ltversion.m4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/m4/lt~obsolete.m4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/m4/pcre2_check_vscript.m4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/m4/pcre2_visibility.m4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/m4/pcre2_zos.m4\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/missing\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/pcre2-config.in\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/perltest.sh\ndrwxr-xr-x tarball-dir/pcre2-SNAPSHOT/src\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/config-cmake.h.in\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/config.h.generic\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/config.h.in\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/libpcre2-16.sym.in\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/libpcre2-32.sym.in\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/libpcre2-8.sym.in\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/libpcre2-posix.sym.in\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2.h.generic\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2.h.in\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_auto_possess.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_chartables.c.dist\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_chartables.c.ebcdic-1047-nl15\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_chartables.c.ebcdic-1047-nl25\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_chkdint.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_compile.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_compile.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_compile_cgroup.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_compile_class.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_config.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_context.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_convert.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_dfa_match.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_dftables.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_error.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_extuni.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_find_bracket.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_fuzzsupport.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_internal.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_intmodedep.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_jit_char_inc.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_jit_compile.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_jit_match_inc.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_jit_misc_inc.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_jit_simd_inc.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_jit_test.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_maketables.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_match.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_match_data.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_match_next.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_newline.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_ord2utf.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_pattern_info.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_printint_inc.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_script_run.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_serialize.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_string_utils.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_study.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_substitute.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_substring.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_tables.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_ucd.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_ucp.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_ucptables_inc.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_util.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_valid_utf.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2_xclass.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2demo.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2grep.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2posix.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2posix.h\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2posix_test.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2test.c\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/src/pcre2test_inc.h\n-rwxr-xr-x tarball-dir/pcre2-SNAPSHOT/test-driver\ndrwxr-xr-x tarball-dir/pcre2-SNAPSHOT/testdata\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepbinary\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepfilelist\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepinput\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepinput3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepinput8\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepinputBad8\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepinputBad8_Trail\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepinputC.bz2\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepinputC.gz\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepinputM\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepinputUN\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepinputv\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepinputx\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/greplist\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepnot.bz2\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepoutput\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepoutput8\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepoutputC\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepoutputCN\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepoutputCNU\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepoutputCU\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepoutputCbz2\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepoutputCgz\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepoutputN\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/grepoutputUN\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/greppatN4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testbtables\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput1\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput10\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput11\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput12\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput13\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput14\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput15\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput16\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput17\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput18\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput19\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput2\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput20\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput21\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput22\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput23\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput24\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput25\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput26\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput27\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput28\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput29\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput5\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput6\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput7\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput8\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinput9\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testinputheap\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput1\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput10\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput11-16\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput11-32\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput12-16\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput12-32\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput13\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput14-16\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput14-32\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput14-8\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput15\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput16\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput17\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput18\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput19\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput2\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput20\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput21\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput22-16\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput22-32\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput22-8\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput23\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput24\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput25\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput26\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput27\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput28\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput29\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput3A\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput3B\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput5\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput6\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput7\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput8-16-2\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput8-16-4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput8-32-4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput8-8-2\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput8-8-3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput8-8-4\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutput9\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutputheap-16\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutputheap-32\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/testoutputheap-8\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/valgrind-jit.supp\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/wintestinput3\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/testdata/wintestoutput3\ndrwxr-xr-x tarball-dir/pcre2-SNAPSHOT/vms\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/vms/configure.com\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/vms/openvms_readme.txt\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/vms/pcre2.h_patch\n-rw-r--r-- tarball-dir/pcre2-SNAPSHOT/vms/stdint.h\n"
  },
  {
    "path": "maint/pcre2_chartables.c.non-standard",
    "content": "#include \"pcre2_internal.h\"\n\nconst uint8_t PRIV(default_tables)[] = {\n0,1,2,3,4,5,6,7,\n8,9,10,11,12,13,14,15,\n16,17,18,19,20,21,22,23,\n24,25,26,27,28,29,30,31,\n32,33,34,35,36,37,38,39,\n40,41,42,43,44,45,46,47,\n48,49,50,51,52,53,54,55,\n56,57,58,59,60,61,62,63,\n64,97,98,99,100,101,102,103,\n104,105,106,107,108,109,110,111,\n112,113,114,115,116,117,118,119,\n120,121,122,91,92,93,94,95,\n96,97,98,99,100,101,102,103,\n104,105,106,107,108,109,110,111,\n112,113,114,115,116,117,118,119,\n120,121,122,123,124,125,126,127,\n128,129,130,131,132,133,134,135,\n136,137,138,139,140,141,142,143,\n144,145,146,147,148,149,150,151,\n152,153,154,155,156,157,158,159,\n160,161,162,163,164,165,166,167,\n168,169,170,171,172,173,174,175,\n176,177,178,179,180,181,182,183,\n184,185,186,187,188,189,190,191,\n224,225,226,227,228,229,230,231,\n232,233,234,235,236,237,238,239,\n240,241,242,243,244,245,246,215,\n248,249,250,251,252,253,254,223,\n224,225,226,227,228,229,230,231,\n232,233,234,235,236,237,238,239,\n240,241,242,243,244,245,246,247,\n248,249,250,251,252,253,254,255,\n0,1,2,3,4,5,6,7,\n8,9,10,11,12,13,14,15,\n16,17,18,19,20,21,22,23,\n24,25,26,27,28,29,30,31,\n32,33,34,35,36,37,38,39,\n40,41,42,43,44,45,46,47,\n48,49,50,51,52,53,54,55,\n56,57,58,59,60,61,62,63,\n64,97,98,99,100,101,102,103,\n104,105,106,107,108,109,110,111,\n112,113,114,115,116,117,118,119,\n120,121,122,91,92,93,94,95,\n96,65,66,67,68,69,70,71,\n72,73,74,75,76,77,78,79,\n80,81,82,83,84,85,86,87,\n88,89,90,123,124,125,126,127,\n128,129,130,131,132,133,134,135,\n136,137,138,139,140,141,142,143,\n144,145,146,147,148,149,150,151,\n152,153,154,155,156,157,158,159,\n160,161,162,163,164,165,166,167,\n168,169,170,171,172,173,174,175,\n176,177,178,179,180,181,182,183,\n184,185,186,187,188,189,190,191,\n224,225,226,227,228,229,230,231,\n232,233,234,235,236,237,238,239,\n240,241,242,243,244,245,246,215,\n248,249,250,251,252,253,254,223,\n192,193,194,195,196,197,198,199,\n200,201,202,203,204,205,206,207,\n208,209,210,211,212,213,214,247,\n216,217,218,219,220,221,222,255,\n0,62,0,0,1,0,0,0,\n0,0,0,0,0,0,0,0,\n32,0,0,0,1,0,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,255,3,\n126,0,0,0,126,0,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,255,3,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,12,2,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,\n254,255,255,7,0,0,0,0,\n0,0,0,0,0,0,0,0,\n255,255,127,127,0,0,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,254,255,255,7,\n0,0,0,0,0,4,32,4,\n0,0,0,128,255,255,127,255,\n0,0,0,0,0,0,255,3,\n254,255,255,135,254,255,255,7,\n0,0,0,0,0,4,44,6,\n255,255,127,255,255,255,127,255,\n0,0,0,0,254,255,255,255,\n255,255,255,255,255,255,255,127,\n0,0,0,0,254,255,255,255,\n255,255,255,255,255,255,255,255,\n0,2,0,0,255,255,255,255,\n255,255,255,255,255,255,255,127,\n0,0,0,0,255,255,255,255,\n255,255,255,255,255,255,255,255,\n0,0,0,0,254,255,0,252,\n1,0,0,248,1,0,0,120,\n0,0,0,0,254,255,255,255,\n0,0,128,0,0,0,128,0,\n255,255,255,255,0,0,0,0,\n0,0,0,0,0,0,0,128,\n255,255,255,255,0,0,0,0,\n0,0,0,0,0,0,0,0,\n\n/* Fiddled by hand when the table bits changed. May be broken! */\n\n128,0,0,0,0,0,0,0,\n0,1,1,1,1,1,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,\n1,0,0,0,128,0,0,0,\n128,128,128,128,0,0,128,0,\n24,24,24,24,24,24,24,24,\n24,24,0,0,0,0,0,128,\n0,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,\n18,18,18,128,128,0,128,16,\n0,22,22,22,22,22,22,22,\n22,22,22,22,22,22,22,22,\n22,22,22,22,22,22,22,22,\n22,22,22,128,128,0,0,0,\n0,0,0,0,0,1,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,\n1,0,0,0,0,0,0,0,\n0,0,18,0,0,0,0,0,\n0,0,24,24,0,18,0,0,\n0,24,18,0,0,0,0,0,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,0,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,0,\n18,18,18,18,18,18,18,18\n};\n"
  },
  {
    "path": "maint/ucptest.c",
    "content": "/***************************************************\n* A program for testing the Unicode property table *\n***************************************************/\n\n/* Copyright (c) University of Cambridge 2008-2023 */\n\n/* Compile thus:\n\n   gcc -DHAVE_CONFIG_H -DPCRE2_CODE_UNIT_WIDTH=8 \\\n     -fvisibility=hidden -o ucptest ucptest.c \\\n     ../src/pcre2_ord2utf.c ../src/pcre2_ucd.c ../src/pcre2_tables.c\n\n   Add -lreadline or -ledit if PCRE2 was configured with readline or libedit\n   support in pcre2test.\n*/\n\n/* This is a hacked-up program for testing the Unicode properties tables of\nPCRE2. It can also be used for finding characters with certain properties. I\nwrote it to help with debugging, and have added things that I found useful, in\na rather haphazard way. The code has never been seriously tidied or checked for\nrobustness, but it shouldn't now give compiler warnings.\n\nThere is only one option: \"-s\". If given, it applies only to the \"findprop\"\ncommand. It causes the UTF-8 sequence of bytes that encode the character to be\noutput between angle brackets at the end of the line. On a UTF-8 terminal, this\nwill show the appropriate graphic for the code point.\n\nIf the command has arguments, they are concatenated into a buffer, separated by\nspaces. If the first argument starts \"U+\" or consists entirely of hexadecimal\ndigits, \"findprop\" is inserted at the start. The buffer is then processed as a\nsingle line file, after which the program exits. If there are no arguments, the\nprogram reads commands line by line on stdin and writes output to stdout. The\nreturn code is always zero.\n\nThere are three commands:\n\nThe command \"findprop\" must be followed by a space-separated list of Unicode\ncode points as hex numbers, either without any prefix or starting with \"U+\", or\nas individual UTF-8 characters preceded by '+'. For example:\n\n  findprop U+1234 5Abc +?\n\nThe output is one long line per character, listing Unicode properties that have\nvalues, followed by its other case or cases if one or more exist, followed by\nits Script Extension list if there is one. This list is in square brackets. A\nsecond list in square brackets gives all the Boolean properties of the\ncharacter. The properties that come first are:\n\n  Bidi class          e.g. NSM (most common is L)\n  General type        e.g. Letter\n  Specific type       e.g. Upper case letter\n  Script              e.g. Medefaidrin\n  Grapheme break type e.g. Extend (most common is Other)\n\nScript names and Boolean property names are all in lower case, with underscores\nand hyphens removed, because that's how they are stored for \"loose\" matching.\n\nThe command \"find\" must be followed by a list of property types and their\nvalues. The values are case-sensitive, except for bidi class. This finds\ncharacters that have those properties. If multiple properties are listed, they\nmust all be matched. Currently supported:\n\n  script <name>    The character must have this script property. Only one\n                     such script may be given.\n  scriptx <name>   This script must be in the character's Script Extension\n                     property list. If this is used many times, all the given\n                     scripts must be present.\n  type <abbrev>    The character's specific type (e.g. Lu or Nd) must match.\n  gbreak <name>    The grapheme break property must match.\n  bidi <class>     The character's bidi class must match.\n  bool <name>      The character's Boolean property list must contain this\n                     property.\n\nIf a <name> or <abbrev> is preceded by !, the value must NOT be present. For\nScript Extensions and Boolean properties, there may be a mixture of positive\nand negative requirements. All must be satisfied.\n\nSequences of two or more characters are shown as ranges, for example\nU+0041..U+004A. No more than 100 lines are output. If there are more\ncharacters, the list ends with ...\n\nThe command \"list\" must be followed by one of property names script, bool,\ntype, gbreak or bidi. The defined values for that property are listed. */\n\n#include <ctype.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"../src/pcre2_internal.h\"\n#include \"../src/pcre2_ucp.h\"\n\n#ifndef SUPPORT_UNICODE\n#error \"Unicode support not enabled\"\n#endif\n\n#ifdef HAVE_UNISTD_H\n#include <unistd.h>\n#endif\n\n#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)\n#if defined(SUPPORT_LIBREADLINE)\n#include <readline/readline.h>\n#include <readline/history.h>\n#else\n#if defined(HAVE_EDITLINE_READLINE_H)\n#include <editline/readline.h>\n#else\n#include <readline/readline.h>\n#ifdef RL_VERSION_MAJOR\n#include <readline/history.h>\n#endif\n#endif\n#endif\n#endif\n\n\n/* -------------------------------------------------------------------*/\n\n#define CS   (char *)\n#define CCS  (const char *)\n#define CSS  (char **)\n#define US   (unsigned char *)\n#define CUS  (const unsigned char *)\n\n/* -------------------------------------------------------------------*/\n\nstatic BOOL show_character = FALSE;\n\nstatic const unsigned char *type_names[] = {\n  US\"Cc\", US\"Control\",\n  US\"Cf\", US\"Format\",\n  US\"Cn\", US\"Unassigned\",\n  US\"Co\", US\"Private use\",\n  US\"Cs\", US\"Surrogate\",\n  US\"Ll\", US\"Lower case letter\",\n  US\"Lm\", US\"Modifier letter\",\n  US\"Lo\", US\"Other letter\",\n  US\"Lt\", US\"Title case letter\",\n  US\"Lu\", US\"Upper case letter\",\n  US\"Mc\", US\"Spacing mark\",\n  US\"Me\", US\"Enclosing mark\",\n  US\"Mn\", US\"Non-spacing mark\",\n  US\"Nd\", US\"Decimal number\",\n  US\"Nl\", US\"Letter number\",\n  US\"No\", US\"Other number\",\n  US\"Pc\", US\"Connector punctuation\",\n  US\"Pd\", US\"Dash punctuation\",\n  US\"Pe\", US\"Close punctuation\",\n  US\"Pf\", US\"Final punctuation\",\n  US\"Pi\", US\"Initial punctuation\",\n  US\"Po\", US\"Other punctuation\",\n  US\"Ps\", US\"Open punctuation\",\n  US\"Sc\", US\"Currency symbol\",\n  US\"Sk\", US\"Modifier symbol\",\n  US\"Sm\", US\"Mathematical symbol\",\n  US\"So\", US\"Other symbol\",\n  US\"Zl\", US\"Line separator\",\n  US\"Zp\", US\"Paragraph separator\",\n  US\"Zs\", US\"Space separator\"\n};\n\nstatic const unsigned char *gb_names[] = {\n  US\"CR\",                    US\"carriage return\",\n  US\"LF\",                    US\"linefeed\",\n  US\"Control\",               US\"\",\n  US\"Extend\",                US\"\",\n  US\"Prepend\",               US\"\",\n  US\"SpacingMark\",           US\"\",\n  US\"L\",                     US\"Hangul syllable type L\",\n  US\"V\",                     US\"Hangul syllable type V\",\n  US\"T\",                     US\"Hangul syllable type T\",\n  US\"LV\",                    US\"Hangul syllable type LV\",\n  US\"LVT\",                   US\"Hangul syllable type LVT\",\n  US\"Regional_Indicator\",    US\"\",\n  US\"Other\",                 US\"\",\n  US\"ZWJ\",                   US\"zero width joiner\",\n  US\"Extended_Pictographic\", US\"\"\n};\n\nstatic const unsigned char *bd_names[] = {\n  US\"AL\",   US\"ArabicLetter\",\n  US\"AN\",   US\"ArabicNumber\",\n  US\"B\",    US\"ParagraphSeparator\",\n  US\"BN\",   US\"BoundaryNeutral\",\n  US\"CS\",   US\"CommonSeparator\",\n  US\"EN\",   US\"EuropeanNumber\",\n  US\"ES\",   US\"EuropeanSeparator\",\n  US\"ET\",   US\"EuropeanTerminator\",\n  US\"FSI\",  US\"FirstStrongIsolate\",\n  US\"L\",    US\"LeftToRight\",\n  US\"LRE\",  US\"LeftToRightEmbedding\",\n  US\"LRI\",  US\"LeftToRightIsolate\",\n  US\"LRO\",  US\"LeftToRightOverride\",\n  US\"NSM\",  US\"NonspacingMark\",\n  US\"ON\",   US\"OtherNeutral\",\n  US\"PDF\",  US\"PopDirectionalFormat\",\n  US\"PDI\",  US\"PopDirectionalIsolate\",\n  US\"R\",    US\"RightToLeft\",\n  US\"RLE\",  US\"RightToLeftEmbedding\",\n  US\"RLI\",  US\"RightToLeftIsolate\",\n  US\"RLO\",  US\"RightToLeftOverride\",\n  US\"S\",    US\"SegmentSeparator\",\n  US\"WS\",   US\"WhiteSpace\"\n};\n\n\n/*************************************************\n*             Test for interaction               *\n*************************************************/\n\nstatic BOOL\nis_stdin_tty(void)\n{\n#if defined WIN32\nreturn _isatty(_fileno(stdin));\n#else\nreturn isatty(fileno(stdin));\n#endif\n}\n\n\n/*************************************************\n*            Get  name from ucp ident            *\n*************************************************/\n\n/* The utt table contains both full names and abbreviations. So search for both\nand use the longer if two are found, unless the first one is only 3 characters\nand we are looking for a script (some scripts have 3-character names). If this\nwere not just a test program it might be worth making some kind of reverse\nindex. */\n\nstatic const char *\nget_propname(int prop, int type)\n{\nsize_t i, j, len;\nsize_t foundlist[2];\nconst char *yield;\nint typex = (type == PT_SC)? PT_SCX : type;\n\nj = 0;\nfor (i = 0; i < PRIV(utt_size); i++)\n  {\n  const ucp_type_table *u = PRIV(utt) + i;\n  if ((u->type == type || u->type == typex) && u->value == prop)\n    {\n    foundlist[j++] = i;\n    if (j >= 2) break;\n    }\n  }\n  \nif (j == 0) return \"??\";\n\nyield = NULL;\nlen = 0;\n\nfor (i = 0; i < j; i++)\n  {\n  const char *s = PRIV(utt_names) + (PRIV(utt) + foundlist[i])->name_offset;\n  size_t sl = strlen(s);\n\n  if (sl > len)\n    {\n    yield = s;\n    if (sl == 3 && type == PT_SC) break;\n    len = sl;\n    }\n  }\n\nreturn yield;\n}\n\n\n/*************************************************\n*      Print Unicode property info for a char    *\n*************************************************/\n\nstatic void\nprint_prop(unsigned int c, BOOL is_just_one)\n{\nunsigned int type = UCD_CATEGORY(c);\nint fulltype = UCD_CHARTYPE(c);\nint script = UCD_SCRIPT(c);\nint scriptx = UCD_SCRIPTX(c);\nint gbprop = UCD_GRAPHBREAK(c);\nint bidi = UCD_BIDICLASS(c);\nunsigned int othercase = UCD_OTHERCASE(c);\nint caseset = UCD_CASESET(c);\nint bprops = UCD_BPROPS(c);\n\nconst unsigned char *fulltypename = US\"??\";\nconst unsigned char *typename = US\"??\";\nconst unsigned char *graphbreak = US\"??\";\nconst unsigned char *bidiclass = US\"??\";\nconst unsigned char *scriptname = CUS get_propname(script, PT_SC);\n\nswitch (type)\n  {\n  case ucp_C: typename = US\"Control\"; break;\n  case ucp_L: typename = US\"Letter\"; break;\n  case ucp_M: typename = US\"Mark\"; break;\n  case ucp_N: typename = US\"Number\"; break;\n  case ucp_P: typename = US\"Punctuation\"; break;\n  case ucp_S: typename = US\"Symbol\"; break;\n  case ucp_Z: typename = US\"Separator\"; break;\n  }\n\nswitch (fulltype)\n  {\n  case ucp_Cc: fulltypename = US\"Control\"; break;\n  case ucp_Cf: fulltypename = US\"Format\"; break;\n  case ucp_Cn: fulltypename = US\"Unassigned\"; break;\n  case ucp_Co: fulltypename = US\"Private use\"; break;\n  case ucp_Cs: fulltypename = US\"Surrogate\"; break;\n  case ucp_Ll: fulltypename = US\"Lower case letter\"; break;\n  case ucp_Lm: fulltypename = US\"Modifier letter\"; break;\n  case ucp_Lo: fulltypename = US\"Other letter\"; break;\n  case ucp_Lt: fulltypename = US\"Title case letter\"; break;\n  case ucp_Lu: fulltypename = US\"Upper case letter\"; break;\n  case ucp_Mc: fulltypename = US\"Spacing mark\"; break;\n  case ucp_Me: fulltypename = US\"Enclosing mark\"; break;\n  case ucp_Mn: fulltypename = US\"Non-spacing mark\"; break;\n  case ucp_Nd: fulltypename = US\"Decimal number\"; break;\n  case ucp_Nl: fulltypename = US\"Letter number\"; break;\n  case ucp_No: fulltypename = US\"Other number\"; break;\n  case ucp_Pc: fulltypename = US\"Connector punctuation\"; break;\n  case ucp_Pd: fulltypename = US\"Dash punctuation\"; break;\n  case ucp_Pe: fulltypename = US\"Close punctuation\"; break;\n  case ucp_Pf: fulltypename = US\"Final punctuation\"; break;\n  case ucp_Pi: fulltypename = US\"Initial punctuation\"; break;\n  case ucp_Po: fulltypename = US\"Other punctuation\"; break;\n  case ucp_Ps: fulltypename = US\"Open punctuation\"; break;\n  case ucp_Sc: fulltypename = US\"Currency symbol\"; break;\n  case ucp_Sk: fulltypename = US\"Modifier symbol\"; break;\n  case ucp_Sm: fulltypename = US\"Mathematical symbol\"; break;\n  case ucp_So: fulltypename = US\"Other symbol\"; break;\n  case ucp_Zl: fulltypename = US\"Line separator\"; break;\n  case ucp_Zp: fulltypename = US\"Paragraph separator\"; break;\n  case ucp_Zs: fulltypename = US\"Space separator\"; break;\n  }\n\nswitch(gbprop)\n  {\n  case ucp_gbCR:           graphbreak = US\"CR\"; break;\n  case ucp_gbLF:           graphbreak = US\"LF\"; break;\n  case ucp_gbControl:      graphbreak = US\"Control\"; break;\n  case ucp_gbExtend:       graphbreak = US\"Extend\"; break;\n  case ucp_gbPrepend:      graphbreak = US\"Prepend\"; break;\n  case ucp_gbSpacingMark:  graphbreak = US\"SpacingMark\"; break;\n  case ucp_gbL:            graphbreak = US\"Hangul syllable type L\"; break;\n  case ucp_gbV:            graphbreak = US\"Hangul syllable type V\"; break;\n  case ucp_gbT:            graphbreak = US\"Hangul syllable type T\"; break;\n  case ucp_gbLV:           graphbreak = US\"Hangul syllable type LV\"; break;\n  case ucp_gbLVT:          graphbreak = US\"Hangul syllable type LVT\"; break;\n  case ucp_gbRegional_Indicator:\n                           graphbreak = US\"Regional Indicator\"; break;\n  case ucp_gbOther:        graphbreak = US\"Other\"; break;\n  case ucp_gbZWJ:          graphbreak = US\"Zero Width Joiner\"; break;\n  case ucp_gbExtended_Pictographic:\n                           graphbreak = US\"Extended Pictographic\"; break;\n  default:                 graphbreak = US\"Unknown\"; break;\n  }\n\nswitch(bidi)\n  {\n  case ucp_bidiAL:   bidiclass = US\"AL \"; break;\n  case ucp_bidiFSI:  bidiclass = US\"FSI\"; break;\n  case ucp_bidiL:    bidiclass = US\"L  \"; break;\n  case ucp_bidiLRE:  bidiclass = US\"LRE\"; break;\n  case ucp_bidiLRI:  bidiclass = US\"LRI\"; break;\n  case ucp_bidiLRO:  bidiclass = US\"LRO\"; break;\n  case ucp_bidiPDF:  bidiclass = US\"PDF\"; break;\n  case ucp_bidiPDI:  bidiclass = US\"PDI\"; break;\n  case ucp_bidiR:    bidiclass = US\"R  \"; break;\n  case ucp_bidiRLE:  bidiclass = US\"RLE\"; break;\n  case ucp_bidiRLI:  bidiclass = US\"RLI\"; break;\n  case ucp_bidiRLO:  bidiclass = US\"RLO\"; break;\n  case ucp_bidiAN:   bidiclass = US\"AN \"; break;\n  case ucp_bidiB:    bidiclass = US\"B  \"; break;\n  case ucp_bidiBN:   bidiclass = US\"BN \"; break;\n  case ucp_bidiCS:   bidiclass = US\"CS \"; break;\n  case ucp_bidiEN:   bidiclass = US\"EN \"; break;\n  case ucp_bidiES:   bidiclass = US\"ES \"; break;\n  case ucp_bidiET:   bidiclass = US\"ET \"; break;\n  case ucp_bidiNSM:  bidiclass = US\"NSM\"; break;\n  case ucp_bidiON:   bidiclass = US\"ON \"; break;\n  case ucp_bidiS:    bidiclass = US\"S  \"; break;\n  case ucp_bidiWS:   bidiclass = US\"WS \"; break;\n  default:           bidiclass = US\"???\"; break;\n  }\n\nprintf(\"U+%04X %s %s: %s, %s, %s\", c, bidiclass, typename, fulltypename,\n  scriptname, graphbreak);\n\nif (is_just_one && (othercase != c || caseset != 0))\n  {\n  if (othercase != c) printf(\", U+%04X\", othercase);\n  if (caseset != 0)\n    {\n    const uint32_t *p = PRIV(ucd_caseless_sets) + caseset - 1;\n    while (*(++p) < NOTACHAR)\n      {\n      unsigned int d = *p;\n      if (d != othercase && d != c) printf(\", U+%04X\", d);\n      }\n    }\n  }\n\nif (scriptx != 0)\n  {\n  const char *sep = \"\";\n  const uint32_t *p = PRIV(ucd_script_sets) + scriptx;\n  printf(\", [\");\n  for (int i = 0; i < ucp_Unknown; i++)\n  if (MAPBIT(p, i) != 0)\n    {\n    printf(\"%s%s\", sep, get_propname(i, PT_SC));\n    sep = \", \";\n    }\n  printf(\"]\");\n  }\n\nif (bprops != 0)\n  {\n  const char *sep = \"\";\n  const uint32_t *p = PRIV(ucd_boolprop_sets) + bprops;\n  printf(\", [\");\n  for (int i = 0; i < ucp_Bprop_Count; i++)\n  if (MAPBIT(p, i) != 0)\n    {\n    printf(\"%s%s\", sep, get_propname(i, PT_BOOL));\n    sep = \", \";\n    }\n  printf(\"]\");\n  }\n\nif (show_character && is_just_one)\n  {\n  unsigned char buffer[8];\n  int len = (int)PRIV(ord2utf_8)(c, buffer);\n  printf(\", >%.*s<\", len, buffer);\n  }\n\nprintf(\"\\n\");\n}\n\n\n\n/*************************************************\n*   Find character(s) with given property/ies    *\n*************************************************/\n\nstatic void\nfind_chars(unsigned char *s)\n{\nunsigned char name[128];\nunsigned char value[128];\nunsigned char *t;\nunsigned int count= 0;\nint scriptx_list[128];\nunsigned int scriptx_count = 0;\nint bprop_list[128];\nunsigned int bprop_count = 0;\nuint32_t i, c;\nint script = -1;\nint type = -1;\nint gbreak = -1;\nint bidiclass = -1;\nBOOL script_not = FALSE;\nBOOL type_not = FALSE;\nBOOL gbreak_not = FALSE;\nBOOL bidiclass_not = FALSE;\nBOOL hadrange = FALSE;\nconst ucd_record *ucd, *next_ucd;\nconst char *pad = \"        \";\n\nwhile (*s != 0)\n  {\n  unsigned int offset = 0;\n\n  for (t = name; *s != 0 && !isspace(*s); s++) *t++ = *s;\n  *t = 0;\n  while (isspace(*s)) s++;\n\n  for (t = value; *s != 0 && !isspace(*s); s++) \n    {\n    if (*s != '_' && *s != '-') *t++ = *s;\n    } \n  *t = 0;\n  while (isspace(*s)) s++;\n\n  if (strcmp(CS name, \"script\") == 0 ||\n      strcmp(CS name, \"scriptx\") == 0)\n    {\n    BOOL x = (name[6] == 'x');\n    BOOL scriptx_not = FALSE;\n    for (t = value; *t != 0; t++) *t = tolower(*t);\n \n    if (value[0] == '!')\n      {\n      if (x) scriptx_not = TRUE; else script_not = TRUE;\n      offset = 1;\n      }\n\n    for (i = 0; i < PRIV(utt_size); i++)\n      {\n      const ucp_type_table *u = PRIV(utt) + i;\n      if ((u->type == PT_SCX || u->type == PT_SC) && strcmp(CS(value + offset),\n            PRIV(utt_names) + u->name_offset) == 0)\n        {\n        c = u->value;\n        if (x && !scriptx_not && u->type == PT_SC)\n          {\n          if (script < 0)\n            {\n            x = FALSE;\n            script = -1;\n            script_not = scriptx_not;\n            }\n          else if (!script_not)\n            {\n            printf(\"No characters found\\n\");\n            return;\n            }\n          }\n        if (x)\n          {\n          scriptx_list[scriptx_count++] = scriptx_not? (-c):c;\n          }\n        else\n          {\n          if (script < 0) script = c; else\n            {\n            printf(\"** Only 1 script value allowed\\n\");\n            return;\n            }\n          }\n        break;\n        }\n      }\n\n    if (i >= PRIV(utt_size))\n      {\n      printf(\"** Unrecognized script name \\\"%s\\\"\\n\", value);\n      return;\n      }\n    }\n\n  else if (strcmp(CS name, \"bool\") == 0)\n    {\n    int not = 1;\n    if (value[0] == '!')\n      {\n      not = -1;\n      offset = 1;\n      }\n\n    for (i = 0; i < PRIV(utt_size); i++)\n      {\n      const ucp_type_table *u = PRIV(utt) + i;\n      if (u->type == PT_BOOL && strcmp(CS(value + offset),\n            PRIV(utt_names) + u->name_offset) == 0)\n        {\n        bprop_list[bprop_count++] = u->value * not;\n        break;\n        }\n      }\n\n    if (i >= PRIV(utt_size))\n      {\n      printf(\"** Unrecognized property name \\\"%s\\\"\\n\", value);\n      return;\n      }\n    }\n\n  else if (strcmp(CS name, \"type\") == 0)\n    {\n    if (type >= 0)\n      {\n      printf(\"** Only 1 type value allowed\\n\");\n      return;\n      }\n    else\n      {\n      if (value[0] == '!')\n        {\n        type_not = TRUE;\n        offset = 1;\n        }\n\n      for (i = 0; i < sizeof(type_names)/sizeof(char *); i += 2)\n        {\n        if (strcmp(CS (value + offset), CCS type_names[i]) == 0)\n          {\n          type = i/2;\n          break;\n          }\n        }\n      if (i >= sizeof(type_names)/sizeof(char *))\n        {\n        printf(\"** Unrecognized type name \\\"%s\\\"\\n\", value);\n        return;\n        }\n      }\n    }\n\n  else if (strcmp(CS name, \"gbreak\") == 0)\n    {\n    if (gbreak >= 0)\n      {\n      printf(\"** Only 1 grapheme break value allowed\\n\");\n      return;\n      }\n    else\n      {\n      if (value[0] == '!')\n        {\n        gbreak_not = TRUE;\n        offset = 1;\n        }\n\n      for (i = 0; i < sizeof(gb_names)/sizeof(char *); i += 2)\n        {\n        if (strcmp(CS (value + offset), CCS gb_names[i]) == 0)\n          {\n          gbreak = i/2;\n          break;\n          }\n        }\n      if (i >= sizeof(gb_names)/sizeof(char *))\n        {\n        printf(\"** Unrecognized gbreak name \\\"%s\\\"\\n\", value);\n        return;\n        }\n      }\n    }\n\n  else if (strcmp(CS name, \"bidi\") == 0 ||\n           strcmp(CS name, \"bidiclass\") == 0 ||\n           strcmp(CS name, \"bidi_class\") == 0 )\n    {\n    if (bidiclass >= 0)\n      {\n      printf(\"** Only 1 bidi class value allowed\\n\");\n      return;\n      }\n    else\n      {\n      if (value[0] == '!')\n        {\n        bidiclass_not = TRUE;\n        offset = 1;\n        }\n      for (i = 0; i < sizeof(bd_names)/sizeof(char *); i++)\n        {\n        if (strcasecmp(CS (value + offset), CCS bd_names[i]) == 0)\n          {\n          bidiclass = i/2;\n          break;\n          }\n        }\n      if (i >= sizeof(bd_names)/sizeof(char *))\n        {\n        printf(\"** Unrecognized bidi class name \\\"%s\\\"\\n\", value);\n        return;\n        }\n      }\n    }\n\n  else\n    {\n    printf(\"** Unrecognized property name \\\"%s\\\"\\n\", name);\n    return;\n    }\n  }\n\nif (script < 0 && scriptx_count == 0 && bprop_count == 0 && type < 0 &&\n    gbreak < 0 && bidiclass < 0)\n  {\n  printf(\"** No properties specified\\n\");\n  return;\n  }\n\nfor (c = 0; c <= 0x10ffff; c++)\n  {\n  if (script >= 0 && (script == UCD_SCRIPT(c)) == script_not) continue;\n\n  if (scriptx_count > 0)\n    {\n    const uint32_t *bits_scriptx = PRIV(ucd_script_sets) + UCD_SCRIPTX(c);\n    unsigned int found = 0;\n\n    for (i = 0; i < scriptx_count; i++)\n      {\n      int x = scriptx_list[i]/32;\n      int y = scriptx_list[i]%32;\n\n      /* Positive requirment */\n      if (scriptx_list[i] >= 0)\n        {\n        if (scriptx_list[i] == UCD_SCRIPT(c) ||\n            ((scriptx_list[i] < ucp_Unknown) &&\n             (bits_scriptx[x] & (1u<<y)) != 0)) found++;\n        }\n      /* Negative requirement */\n      else\n        {\n        if ((-(scriptx_list[i]) < ucp_Unknown) &&\n            (bits_scriptx[x] & (1u<<y)) == 0) found++;\n        }\n      }\n\n    if (found != scriptx_count) continue;\n    }\n\n  if (bprop_count > 0)\n    {\n    const uint32_t *bits_bprop = PRIV(ucd_boolprop_sets) + UCD_BPROPS(c);\n    unsigned int found = 0;\n\n    for (i = 0; i < bprop_count; i++)\n      {\n      int x = bprop_list[i]/32;\n      int y = bprop_list[i]%32;\n\n      /* Positive requirement */\n      if (bprop_list[i] >= 0)\n        {\n        if ((bits_bprop[x] & (1u<<y)) != 0) found++;\n        }\n      /* Negative requirement */\n      else\n        {\n        if ((bits_bprop[-x] & (1u<<(-y))) == 0) found++;\n        }\n      }\n\n    if (found != bprop_count) continue;\n    }\n\n  if (type >= 0)\n    {\n    if (type_not)\n      {\n      if (type == UCD_CHARTYPE(c)) continue;\n      }\n    else\n      {\n      if (type != UCD_CHARTYPE(c)) continue;\n      }\n    }\n\n  if (gbreak >= 0)\n    {\n    if (gbreak_not)\n      {\n      if (gbreak == UCD_GRAPHBREAK(c)) continue;\n      }\n    else\n      {\n      if (gbreak != UCD_GRAPHBREAK(c)) continue;\n      }\n    }\n\n  if (bidiclass >= 0)\n    {\n    if (bidiclass_not)\n      {\n      if (bidiclass == UCD_BIDICLASS(c)) continue;\n      }\n    else\n      {\n      if (bidiclass != UCD_BIDICLASS(c)) continue;\n      }\n    }\n\n  /* All conditions are met. Look for runs. */\n\n  ucd = GET_UCD(c);\n\n  for (i = c + 1; i < 0x10ffff; i++)\n    {\n    next_ucd = GET_UCD(i);\n    if (memcmp(ucd, next_ucd, sizeof(ucd_record)) != 0) break;\n    }\n\n  if (--i > c)\n    {\n    printf(\"U+%04X..\", c);\n    c = i;\n    hadrange = TRUE;\n    }\n  else if (hadrange) printf(\"%s\", pad);\n\n  print_prop(c, FALSE);\n  if (c >= 0x100000) pad = \"        \";\n    else if (c >= 0x10000) pad = \"       \";\n  count++;\n  if (count >= 100)\n    {\n    printf(\"...\\n\");\n    break;\n    }\n  }\n\nif (count == 0) printf(\"No characters found\\n\");\n}\n\n\n/*************************************************\n*        Process command line                    *\n*************************************************/\n\nstatic void\nprocess_command_line(unsigned char *buffer)\n{\nunsigned char *s, *t;\nunsigned char name[24];\n\ns = buffer;\nwhile (isspace(*s)) s++;\nif (*s == 0) return;\n\nfor (t = name; *s != 0 && !isspace(*s); s++) *t++ = *s;\n*t = 0;\nwhile (isspace(*s)) s++;\n\nif (strcmp(CS name, \"findprop\") == 0)\n  {\n  while (*s != 0)\n    {\n    unsigned int c;\n    unsigned char *endptr;\n    t = s;\n\n    if (*t == '+')\n      {\n      c = *(++t);\n      if (c > 0x7fu)\n        {\n        GETCHARINC(c, t);\n        endptr = t;\n        }\n      else endptr = t+1;\n      }\n    else\n      {\n      if (memcmp(t, \"U+\", 2) == 0) t += 2;\n      c = (uint32_t)strtoul(CS t, CSS(&endptr), 16);\n      }\n\n    if (*endptr != 0 && !isspace(*endptr))\n      {\n      while (*endptr != 0 && !isspace(*endptr)) endptr++;\n      printf(\"** Invalid character specifier: ignored \\\"%.*s\\\"\\n\", (int)(endptr-s), s);\n      }\n    else\n      {\n      if (c > 0x10ffff)\n        printf(\"** U+%x is too big for a Unicode code point\\n\", c);\n      else\n        print_prop(c, TRUE);\n      }\n    s = endptr;\n    while (isspace(*s)) s++;\n    }\n  }\n\nelse if (strcmp(CS name, \"find\") == 0)\n  {\n  find_chars(s);\n  }\n\nelse if (strcmp(CS name, \"list\") == 0)\n  {\n  while (*s != 0)\n    {\n    size_t i;\n    for (t = name; *s != 0 && !isspace(*s); s++) *t++ = *s;\n    *t = 0;\n    while (isspace(*s)) s++;\n\n    if (strcmp(CS name, \"script\") == 0 || strcmp(CS name, \"scripts\") == 0)\n      {\n      for (i = 0; i < PRIV(utt_size); i++)\n        if (PRIV(utt)[i].type == PT_SCX || PRIV(utt)[i].type == PT_SC)\n          printf(\"%s\\n\", PRIV(utt_names) + PRIV(utt)[i].name_offset);\n      }\n\n    else if (strcmp(CS name, \"bool\") == 0)\n      {\n      for (i = 0; i < PRIV(utt_size); i++)\n        if (PRIV(utt)[i].type == PT_BOOL)\n          printf(\"%s\\n\", PRIV(utt_names) + PRIV(utt)[i].name_offset);\n      }\n\n    else if (strcmp(CS name, \"type\") == 0 || strcmp(CS name, \"types\") == 0)\n      {\n      for (i = 0; i < sizeof(type_names)/sizeof(char *); i += 2)\n        printf(\"%s %s\\n\", type_names[i], type_names[i+1]);\n      }\n\n    else if (strcmp(CS name, \"gbreak\") == 0 || strcmp(CS name, \"gbreaks\") == 0)\n      {\n      for (i = 0; i < sizeof(gb_names)/sizeof(char *); i += 2)\n        {\n        if (gb_names[i+1][0] != 0)\n          printf(\"%-3s (%s)\\n\", gb_names[i], gb_names[i+1]);\n        else\n          printf(\"%s\\n\", gb_names[i]);\n        }\n      }\n\n    else if (strcmp(CS name, \"bidi\") == 0 ||\n             strcmp(CS name, \"bidiclasses\") == 0)\n      {\n      for (i = 0; i < sizeof(bd_names)/sizeof(char *); i += 2)\n        printf(\"%3s %s\\n\", bd_names[i], bd_names[i+1]);\n      }\n\n    else\n      {\n      printf(\"** Unknown property \\\"%s\\\"\\n\", name);\n      break;\n      }\n    }\n  }\n\nelse printf(\"** Unknown test command \\\"%s\\\"\\n\", name);\n}\n\n\n\n/*************************************************\n*               Main program                     *\n*************************************************/\n\nint\nmain(int argc, char **argv)\n{\nBOOL interactive;\nint first_arg = 1;\nunsigned char buffer[1024];\n\nif (argc > 1 && strcmp(argv[1], \"-s\") == 0)\n  {\n  show_character = TRUE;\n  first_arg++;\n  }\n\nif (argc > first_arg)\n  {\n  int i;\n  BOOL datafirst = TRUE;\n  char *arg = argv[first_arg];\n  unsigned char *s = buffer;\n\n  if (*arg != '+' && memcmp(arg, \"U+\", 2) != 0 && !isdigit(*arg))\n    {\n    while (*arg != 0)\n      {\n      if (!isxdigit(*arg++)) { datafirst = FALSE; break; }\n      }\n    }\n\n  if (datafirst)\n    {\n    strcpy(CS s, \"findprop \");\n    s += 9;\n    }\n\n  for (i = first_arg; i < argc; i++)\n    {\n    s += sprintf(CS s, \"%s \", argv[i]);\n    }\n\n  process_command_line(buffer);\n  return 0;\n  }\n\ninteractive = is_stdin_tty();\n\n#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)\nif (interactive) using_history();\n#endif\n\nfor(;;)\n  {\n#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)\n  if (interactive)\n    {\n    size_t len;\n    unsigned char *s = US readline(\"> \");\n    if (s == NULL) break;\n    len = strlen(CS s);\n    if (len > 0) add_history(CS s);\n    memcpy(buffer, s, len);\n    buffer[len] = '\\n';\n    buffer[len+1] = 0;\n    free(s);\n    }\n  else\n#endif\n\n    {\n    if (interactive) printf(\"> \");\n    if (fgets(CS buffer, sizeof(buffer), stdin) == NULL) break;\n    if (!interactive) printf(\"%s\", buffer);\n    }\n\n  process_command_line(buffer);\n  }\n\nif (interactive) printf(\"\\n\");\n\n#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)\nif (interactive) clear_history();\n#endif\n\nreturn 0;\n}\n\n/* End */\n"
  },
  {
    "path": "maint/ucptestdata/testinput1",
    "content": "findprop 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f \nfindprop 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f \nfindprop 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f \nfindprop 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f \nfindprop 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f \nfindprop 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f \nfindprop 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f \nfindprop 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f \n\nfindprop 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f \nfindprop 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f \nfindprop a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af \nfindprop b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf \nfindprop c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf \nfindprop d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df \nfindprop e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef \nfindprop f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff \n\nfindprop 0100 0101 0102 0103 0104 0105 0106\n\nfindprop 345 399 03b9 1fbe\n\nfindprop 00390 1fd3\n\nfindprop ffe0 ffe1 ffe2 ffe3 ffe4 ffe5 ffe6 ffe7 \nfindprop ffe8 ffe9 ffea ffeb ffec ffed ffee ffef\nfindprop fff8 fff9 fffa fffb fffc fffd fffe ffff\nfindprop 10000 10001 e01ef f0000 100000\n\nfindprop 1b00 12000 7c0 a840 10900\nfindprop 1d79 a77d\n\nfindprop  0800  083e  a4d0  a4f7  aa80  aadf\nfindprop 10b00 10b35 13000 1342e 10840 10855\n\nfindprop 11100 1113c 11680 116c0\n\nfindprop 0d 0a 0e 0711 1b04 1111 1169 11fe ae4c ad89\n\nfindprop 118a0 11ac7 16ad0\n\nfindprop 11700 14400 108e0 11280 1d800\n\nfindprop 11800 1e903 11da9 10d27 11ee0 16e48 10f27 10f30\n\nfindprop  a836  a833  1cf4  20f0  1cd0\n\nfindprop 32ff\n\nfindprop 1f16d\n\nfindprop U+10e93 U+10eaa\nfindprop +á +é U+212A\n\nfindprop 0602 202a 202b 202c 2068 2069 202d 202e 2067\n\nfindprop 143e5\nfindprop 1CC4E\nfindprop U+1FAE9\nfindprop U+20C1\n"
  },
  {
    "path": "maint/ucptestdata/testinput2",
    "content": "find script Han\nfind type Pe script Common scriptx Hangul\nfind script !latin scriptx sundanese\nfind type Sk\nfind type Pd\nfind gbreak LVT\nfind script Old_Uyghur\nfind bidi PDF\nfind bidi CS\nfind bidi CS type Sm\nfind bidi B\nfind bidi FSI\nfind bidi PDI\nfind bidi RLI\nfind bidi RLO\nfind bidi S\nfind bidi WS\nfind bidi white_space bool ascii\nfind script bopo\nfind bool prependedconcatenationmark\nfind bool pcm\nfind script Todhri\nfind script Sunuwar\nfind script Sidetic\n"
  },
  {
    "path": "maint/ucptestdata/testoutput1",
    "content": "findprop 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f \nU+0000 BN  Control: Control, common, Control, [ascii]\nU+0001 BN  Control: Control, common, Control, [ascii]\nU+0002 BN  Control: Control, common, Control, [ascii]\nU+0003 BN  Control: Control, common, Control, [ascii]\nU+0004 BN  Control: Control, common, Control, [ascii]\nU+0005 BN  Control: Control, common, Control, [ascii]\nU+0006 BN  Control: Control, common, Control, [ascii]\nU+0007 BN  Control: Control, common, Control, [ascii]\nU+0008 BN  Control: Control, common, Control, [ascii]\nU+0009 S   Control: Control, common, Control, [ascii, patternwhitespace, whitespace]\nU+000A B   Control: Control, common, LF, [ascii, patternwhitespace, whitespace]\nU+000B S   Control: Control, common, Control, [ascii, patternwhitespace, whitespace]\nU+000C WS  Control: Control, common, Control, [ascii, patternwhitespace, whitespace]\nU+000D B   Control: Control, common, CR, [ascii, patternwhitespace, whitespace]\nU+000E BN  Control: Control, common, Control, [ascii]\nU+000F BN  Control: Control, common, Control, [ascii]\nfindprop 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f \nU+0010 BN  Control: Control, common, Control, [ascii]\nU+0011 BN  Control: Control, common, Control, [ascii]\nU+0012 BN  Control: Control, common, Control, [ascii]\nU+0013 BN  Control: Control, common, Control, [ascii]\nU+0014 BN  Control: Control, common, Control, [ascii]\nU+0015 BN  Control: Control, common, Control, [ascii]\nU+0016 BN  Control: Control, common, Control, [ascii]\nU+0017 BN  Control: Control, common, Control, [ascii]\nU+0018 BN  Control: Control, common, Control, [ascii]\nU+0019 BN  Control: Control, common, Control, [ascii]\nU+001A BN  Control: Control, common, Control, [ascii]\nU+001B BN  Control: Control, common, Control, [ascii]\nU+001C B   Control: Control, common, Control, [ascii]\nU+001D B   Control: Control, common, Control, [ascii]\nU+001E B   Control: Control, common, Control, [ascii]\nU+001F S   Control: Control, common, Control, [ascii]\nfindprop 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f \nU+0020 WS  Separator: Space separator, common, Other, [ascii, graphemebase, patternwhitespace, whitespace]\nU+0021 ON  Punctuation: Other punctuation, common, Other, [ascii, graphemebase, patternsyntax, sentenceterminal, terminalpunctuation]\nU+0022 ON  Punctuation: Other punctuation, common, Other, [ascii, graphemebase, patternsyntax, quotationmark]\nU+0023 ET  Punctuation: Other punctuation, common, Other, [ascii, emoji, emojicomponent, graphemebase, patternsyntax]\nU+0024 ET  Symbol: Currency symbol, common, Other, [ascii, graphemebase, patternsyntax]\nU+0025 ET  Punctuation: Other punctuation, common, Other, [ascii, graphemebase, patternsyntax]\nU+0026 ON  Punctuation: Other punctuation, common, Other, [ascii, graphemebase, patternsyntax]\nU+0027 ON  Punctuation: Other punctuation, common, Other, [ascii, caseignorable, graphemebase, patternsyntax, quotationmark]\nU+0028 ON  Punctuation: Open punctuation, common, Other, [ascii, bidimirrored, graphemebase, patternsyntax]\nU+0029 ON  Punctuation: Close punctuation, common, Other, [ascii, bidimirrored, graphemebase, patternsyntax]\nU+002A ON  Punctuation: Other punctuation, common, Other, [ascii, emoji, emojicomponent, graphemebase, patternsyntax]\nU+002B ES  Symbol: Mathematical symbol, common, Other, [ascii, graphemebase, math, patternsyntax]\nU+002C CS  Punctuation: Other punctuation, common, Other, [ascii, graphemebase, patternsyntax, terminalpunctuation]\nU+002D ES  Punctuation: Dash punctuation, common, Other, [ascii, dash, graphemebase, patternsyntax]\nU+002E CS  Punctuation: Other punctuation, common, Other, [ascii, caseignorable, graphemebase, patternsyntax, sentenceterminal, terminalpunctuation]\nU+002F CS  Punctuation: Other punctuation, common, Other, [ascii, graphemebase, patternsyntax]\nfindprop 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f \nU+0030 EN  Number: Decimal number, common, Other, [ascii, asciihexdigit, emoji, emojicomponent, graphemebase, hexdigit, idcontinue, xidcontinue]\nU+0031 EN  Number: Decimal number, common, Other, [ascii, asciihexdigit, emoji, emojicomponent, graphemebase, hexdigit, idcontinue, xidcontinue]\nU+0032 EN  Number: Decimal number, common, Other, [ascii, asciihexdigit, emoji, emojicomponent, graphemebase, hexdigit, idcontinue, xidcontinue]\nU+0033 EN  Number: Decimal number, common, Other, [ascii, asciihexdigit, emoji, emojicomponent, graphemebase, hexdigit, idcontinue, xidcontinue]\nU+0034 EN  Number: Decimal number, common, Other, [ascii, asciihexdigit, emoji, emojicomponent, graphemebase, hexdigit, idcontinue, xidcontinue]\nU+0035 EN  Number: Decimal number, common, Other, [ascii, asciihexdigit, emoji, emojicomponent, graphemebase, hexdigit, idcontinue, xidcontinue]\nU+0036 EN  Number: Decimal number, common, Other, [ascii, asciihexdigit, emoji, emojicomponent, graphemebase, hexdigit, idcontinue, xidcontinue]\nU+0037 EN  Number: Decimal number, common, Other, [ascii, asciihexdigit, emoji, emojicomponent, graphemebase, hexdigit, idcontinue, xidcontinue]\nU+0038 EN  Number: Decimal number, common, Other, [ascii, asciihexdigit, emoji, emojicomponent, graphemebase, hexdigit, idcontinue, xidcontinue]\nU+0039 EN  Number: Decimal number, common, Other, [ascii, asciihexdigit, emoji, emojicomponent, graphemebase, hexdigit, idcontinue, xidcontinue]\nU+003A CS  Punctuation: Other punctuation, common, Other, [ascii, caseignorable, graphemebase, patternsyntax, terminalpunctuation]\nU+003B ON  Punctuation: Other punctuation, common, Other, [ascii, graphemebase, patternsyntax, terminalpunctuation]\nU+003C ON  Symbol: Mathematical symbol, common, Other, [ascii, bidimirrored, graphemebase, math, patternsyntax]\nU+003D ON  Symbol: Mathematical symbol, common, Other, [ascii, graphemebase, math, patternsyntax]\nU+003E ON  Symbol: Mathematical symbol, common, Other, [ascii, bidimirrored, graphemebase, math, patternsyntax]\nU+003F ON  Punctuation: Other punctuation, common, Other, [ascii, graphemebase, patternsyntax, sentenceterminal, terminalpunctuation]\nfindprop 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f \nU+0040 ON  Punctuation: Other punctuation, common, Other, [ascii, graphemebase, patternsyntax]\nU+0041 L   Letter: Upper case letter, latin, Other, U+0061, [ascii, asciihexdigit, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, hexdigit, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0042 L   Letter: Upper case letter, latin, Other, U+0062, [ascii, asciihexdigit, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, hexdigit, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0043 L   Letter: Upper case letter, latin, Other, U+0063, [ascii, asciihexdigit, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, hexdigit, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0044 L   Letter: Upper case letter, latin, Other, U+0064, [ascii, asciihexdigit, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, hexdigit, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0045 L   Letter: Upper case letter, latin, Other, U+0065, [ascii, asciihexdigit, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, hexdigit, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0046 L   Letter: Upper case letter, latin, Other, U+0066, [ascii, asciihexdigit, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, hexdigit, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0047 L   Letter: Upper case letter, latin, Other, U+0067, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0048 L   Letter: Upper case letter, latin, Other, U+0068, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0049 L   Letter: Upper case letter, latin, Other, U+0069, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+004A L   Letter: Upper case letter, latin, Other, U+006A, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+004B L   Letter: Upper case letter, latin, Other, U+006B, U+212A, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+004C L   Letter: Upper case letter, latin, Other, U+006C, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+004D L   Letter: Upper case letter, latin, Other, U+006D, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+004E L   Letter: Upper case letter, latin, Other, U+006E, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+004F L   Letter: Upper case letter, latin, Other, U+006F, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nfindprop 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f \nU+0050 L   Letter: Upper case letter, latin, Other, U+0070, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0051 L   Letter: Upper case letter, latin, Other, U+0071, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0052 L   Letter: Upper case letter, latin, Other, U+0072, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0053 L   Letter: Upper case letter, latin, Other, U+0073, U+017F, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0054 L   Letter: Upper case letter, latin, Other, U+0074, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0055 L   Letter: Upper case letter, latin, Other, U+0075, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0056 L   Letter: Upper case letter, latin, Other, U+0076, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0057 L   Letter: Upper case letter, latin, Other, U+0077, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0058 L   Letter: Upper case letter, latin, Other, U+0078, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0059 L   Letter: Upper case letter, latin, Other, U+0079, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+005A L   Letter: Upper case letter, latin, Other, U+007A, [ascii, alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+005B ON  Punctuation: Open punctuation, common, Other, [ascii, bidimirrored, graphemebase, patternsyntax]\nU+005C ON  Punctuation: Other punctuation, common, Other, [ascii, graphemebase, patternsyntax]\nU+005D ON  Punctuation: Close punctuation, common, Other, [ascii, bidimirrored, graphemebase, patternsyntax]\nU+005E ON  Symbol: Modifier symbol, common, Other, [ascii, caseignorable, diacritic, graphemebase, math, patternsyntax]\nU+005F ON  Punctuation: Connector punctuation, common, Other, [ascii, graphemebase, idcontinue, xidcontinue]\nfindprop 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f \nU+0060 ON  Symbol: Modifier symbol, common, Other, [ascii, caseignorable, diacritic, graphemebase, patternsyntax]\nU+0061 L   Letter: Lower case letter, latin, Other, U+0041, [ascii, asciihexdigit, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, hexdigit, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0062 L   Letter: Lower case letter, latin, Other, U+0042, [ascii, asciihexdigit, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, hexdigit, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0063 L   Letter: Lower case letter, latin, Other, U+0043, [ascii, asciihexdigit, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, hexdigit, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0064 L   Letter: Lower case letter, latin, Other, U+0044, [ascii, asciihexdigit, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, hexdigit, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0065 L   Letter: Lower case letter, latin, Other, U+0045, [ascii, asciihexdigit, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, hexdigit, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0066 L   Letter: Lower case letter, latin, Other, U+0046, [ascii, asciihexdigit, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, hexdigit, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0067 L   Letter: Lower case letter, latin, Other, U+0047, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0068 L   Letter: Lower case letter, latin, Other, U+0048, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0069 L   Letter: Lower case letter, latin, Other, U+0049, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, softdotted, xidcontinue, xidstart]\nU+006A L   Letter: Lower case letter, latin, Other, U+004A, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, softdotted, xidcontinue, xidstart]\nU+006B L   Letter: Lower case letter, latin, Other, U+004B, U+212A, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+006C L   Letter: Lower case letter, latin, Other, U+004C, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+006D L   Letter: Lower case letter, latin, Other, U+004D, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+006E L   Letter: Lower case letter, latin, Other, U+004E, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+006F L   Letter: Lower case letter, latin, Other, U+004F, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nfindprop 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f \nU+0070 L   Letter: Lower case letter, latin, Other, U+0050, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0071 L   Letter: Lower case letter, latin, Other, U+0051, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0072 L   Letter: Lower case letter, latin, Other, U+0052, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0073 L   Letter: Lower case letter, latin, Other, U+0053, U+017F, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0074 L   Letter: Lower case letter, latin, Other, U+0054, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0075 L   Letter: Lower case letter, latin, Other, U+0055, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0076 L   Letter: Lower case letter, latin, Other, U+0056, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0077 L   Letter: Lower case letter, latin, Other, U+0057, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0078 L   Letter: Lower case letter, latin, Other, U+0058, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0079 L   Letter: Lower case letter, latin, Other, U+0059, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+007A L   Letter: Lower case letter, latin, Other, U+005A, [ascii, alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+007B ON  Punctuation: Open punctuation, common, Other, [ascii, bidimirrored, graphemebase, patternsyntax]\nU+007C ON  Symbol: Mathematical symbol, common, Other, [ascii, graphemebase, math, patternsyntax]\nU+007D ON  Punctuation: Close punctuation, common, Other, [ascii, bidimirrored, graphemebase, patternsyntax]\nU+007E ON  Symbol: Mathematical symbol, common, Other, [ascii, graphemebase, math, patternsyntax]\nU+007F BN  Control: Control, common, Control, [ascii]\n\nfindprop 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f \nU+0080 BN  Control: Control, common, Control\nU+0081 BN  Control: Control, common, Control\nU+0082 BN  Control: Control, common, Control\nU+0083 BN  Control: Control, common, Control\nU+0084 BN  Control: Control, common, Control\nU+0085 B   Control: Control, common, Control, [patternwhitespace, whitespace]\nU+0086 BN  Control: Control, common, Control\nU+0087 BN  Control: Control, common, Control\nU+0088 BN  Control: Control, common, Control\nU+0089 BN  Control: Control, common, Control\nU+008A BN  Control: Control, common, Control\nU+008B BN  Control: Control, common, Control\nU+008C BN  Control: Control, common, Control\nU+008D BN  Control: Control, common, Control\nU+008E BN  Control: Control, common, Control\nU+008F BN  Control: Control, common, Control\nfindprop 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f \nU+0090 BN  Control: Control, common, Control\nU+0091 BN  Control: Control, common, Control\nU+0092 BN  Control: Control, common, Control\nU+0093 BN  Control: Control, common, Control\nU+0094 BN  Control: Control, common, Control\nU+0095 BN  Control: Control, common, Control\nU+0096 BN  Control: Control, common, Control\nU+0097 BN  Control: Control, common, Control\nU+0098 BN  Control: Control, common, Control\nU+0099 BN  Control: Control, common, Control\nU+009A BN  Control: Control, common, Control\nU+009B BN  Control: Control, common, Control\nU+009C BN  Control: Control, common, Control\nU+009D BN  Control: Control, common, Control\nU+009E BN  Control: Control, common, Control\nU+009F BN  Control: Control, common, Control\nfindprop a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af \nU+00A0 CS  Separator: Space separator, common, Other, [graphemebase, whitespace]\nU+00A1 ON  Punctuation: Other punctuation, common, Other, [graphemebase, patternsyntax]\nU+00A2 ET  Symbol: Currency symbol, common, Other, [graphemebase, patternsyntax]\nU+00A3 ET  Symbol: Currency symbol, common, Other, [graphemebase, patternsyntax]\nU+00A4 ET  Symbol: Currency symbol, common, Other, [graphemebase, patternsyntax]\nU+00A5 ET  Symbol: Currency symbol, common, Other, [graphemebase, patternsyntax]\nU+00A6 ON  Symbol: Other symbol, common, Other, [graphemebase, patternsyntax]\nU+00A7 ON  Punctuation: Other punctuation, common, Other, [graphemebase, patternsyntax]\nU+00A8 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+00A9 ON  Symbol: Other symbol, common, Extended Pictographic, [emoji, extendedpictographic, graphemebase, patternsyntax]\nU+00AA L   Letter: Other letter, latin, Other, [alphabetic, cased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00AB ON  Punctuation: Initial punctuation, common, Other, [bidimirrored, graphemebase, patternsyntax, quotationmark]\nU+00AC ON  Symbol: Mathematical symbol, common, Other, [graphemebase, math, patternsyntax]\nU+00AD BN  Control: Format, common, Control, [caseignorable, defaultignorablecodepoint]\nU+00AE ON  Symbol: Other symbol, common, Extended Pictographic, [emoji, extendedpictographic, graphemebase, patternsyntax]\nU+00AF ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nfindprop b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf \nU+00B0 ET  Symbol: Other symbol, common, Other, [graphemebase, patternsyntax]\nU+00B1 ET  Symbol: Mathematical symbol, common, Other, [graphemebase, math, patternsyntax]\nU+00B2 EN  Number: Other number, common, Other, [graphemebase, idcompatmathcontinue]\nU+00B3 EN  Number: Other number, common, Other, [graphemebase, idcompatmathcontinue]\nU+00B4 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+00B5 L   Letter: Lower case letter, common, Other, U+03BC, U+039C, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00B6 ON  Punctuation: Other punctuation, common, Other, [graphemebase, patternsyntax]\nU+00B7 ON  Punctuation: Other punctuation, common, Other, [latin, greek, georgian, han, gothic, shavian, coptic, glagolitic, carian, lydian, avestan, duployan, elbasan, mahajani, oldpermic, gunjalagondi], [caseignorable, diacritic, extender, graphemebase, idcontinue, xidcontinue]\nU+00B8 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+00B9 EN  Number: Other number, common, Other, [graphemebase, idcompatmathcontinue]\nU+00BA L   Letter: Other letter, latin, Other, [alphabetic, cased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00BB ON  Punctuation: Final punctuation, common, Other, [bidimirrored, graphemebase, patternsyntax, quotationmark]\nU+00BC ON  Number: Other number, common, Other, [graphemebase]\nU+00BD ON  Number: Other number, common, Other, [graphemebase]\nU+00BE ON  Number: Other number, common, Other, [graphemebase]\nU+00BF ON  Punctuation: Other punctuation, common, Other, [graphemebase, patternsyntax]\nfindprop c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf \nU+00C0 L   Letter: Upper case letter, latin, Other, U+00E0, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00C1 L   Letter: Upper case letter, latin, Other, U+00E1, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00C2 L   Letter: Upper case letter, latin, Other, U+00E2, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00C3 L   Letter: Upper case letter, latin, Other, U+00E3, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00C4 L   Letter: Upper case letter, latin, Other, U+00E4, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00C5 L   Letter: Upper case letter, latin, Other, U+00E5, U+212B, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00C6 L   Letter: Upper case letter, latin, Other, U+00E6, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00C7 L   Letter: Upper case letter, latin, Other, U+00E7, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00C8 L   Letter: Upper case letter, latin, Other, U+00E8, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00C9 L   Letter: Upper case letter, latin, Other, U+00E9, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00CA L   Letter: Upper case letter, latin, Other, U+00EA, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00CB L   Letter: Upper case letter, latin, Other, U+00EB, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00CC L   Letter: Upper case letter, latin, Other, U+00EC, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00CD L   Letter: Upper case letter, latin, Other, U+00ED, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00CE L   Letter: Upper case letter, latin, Other, U+00EE, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00CF L   Letter: Upper case letter, latin, Other, U+00EF, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nfindprop d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df \nU+00D0 L   Letter: Upper case letter, latin, Other, U+00F0, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00D1 L   Letter: Upper case letter, latin, Other, U+00F1, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00D2 L   Letter: Upper case letter, latin, Other, U+00F2, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00D3 L   Letter: Upper case letter, latin, Other, U+00F3, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00D4 L   Letter: Upper case letter, latin, Other, U+00F4, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00D5 L   Letter: Upper case letter, latin, Other, U+00F5, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00D6 L   Letter: Upper case letter, latin, Other, U+00F6, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00D7 ON  Symbol: Mathematical symbol, common, Other, [graphemebase, math, patternsyntax]\nU+00D8 L   Letter: Upper case letter, latin, Other, U+00F8, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00D9 L   Letter: Upper case letter, latin, Other, U+00F9, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00DA L   Letter: Upper case letter, latin, Other, U+00FA, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00DB L   Letter: Upper case letter, latin, Other, U+00FB, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00DC L   Letter: Upper case letter, latin, Other, U+00FC, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00DD L   Letter: Upper case letter, latin, Other, U+00FD, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00DE L   Letter: Upper case letter, latin, Other, U+00FE, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+00DF L   Letter: Lower case letter, latin, Other, U+1E9E, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nfindprop e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef \nU+00E0 L   Letter: Lower case letter, latin, Other, U+00C0, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00E1 L   Letter: Lower case letter, latin, Other, U+00C1, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00E2 L   Letter: Lower case letter, latin, Other, U+00C2, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00E3 L   Letter: Lower case letter, latin, Other, U+00C3, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00E4 L   Letter: Lower case letter, latin, Other, U+00C4, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00E5 L   Letter: Lower case letter, latin, Other, U+00C5, U+212B, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00E6 L   Letter: Lower case letter, latin, Other, U+00C6, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00E7 L   Letter: Lower case letter, latin, Other, U+00C7, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00E8 L   Letter: Lower case letter, latin, Other, U+00C8, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00E9 L   Letter: Lower case letter, latin, Other, U+00C9, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00EA L   Letter: Lower case letter, latin, Other, U+00CA, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00EB L   Letter: Lower case letter, latin, Other, U+00CB, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00EC L   Letter: Lower case letter, latin, Other, U+00CC, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00ED L   Letter: Lower case letter, latin, Other, U+00CD, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00EE L   Letter: Lower case letter, latin, Other, U+00CE, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00EF L   Letter: Lower case letter, latin, Other, U+00CF, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nfindprop f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff \nU+00F0 L   Letter: Lower case letter, latin, Other, U+00D0, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00F1 L   Letter: Lower case letter, latin, Other, U+00D1, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00F2 L   Letter: Lower case letter, latin, Other, U+00D2, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00F3 L   Letter: Lower case letter, latin, Other, U+00D3, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00F4 L   Letter: Lower case letter, latin, Other, U+00D4, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00F5 L   Letter: Lower case letter, latin, Other, U+00D5, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00F6 L   Letter: Lower case letter, latin, Other, U+00D6, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00F7 ON  Symbol: Mathematical symbol, common, Other, [graphemebase, math, patternsyntax]\nU+00F8 L   Letter: Lower case letter, latin, Other, U+00D8, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00F9 L   Letter: Lower case letter, latin, Other, U+00D9, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00FA L   Letter: Lower case letter, latin, Other, U+00DA, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00FB L   Letter: Lower case letter, latin, Other, U+00DB, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00FC L   Letter: Lower case letter, latin, Other, U+00DC, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00FD L   Letter: Lower case letter, latin, Other, U+00DD, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00FE L   Letter: Lower case letter, latin, Other, U+00DE, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00FF L   Letter: Lower case letter, latin, Other, U+0178, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\n\nfindprop 0100 0101 0102 0103 0104 0105 0106\nU+0100 L   Letter: Upper case letter, latin, Other, U+0101, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0101 L   Letter: Lower case letter, latin, Other, U+0100, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0102 L   Letter: Upper case letter, latin, Other, U+0103, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0103 L   Letter: Lower case letter, latin, Other, U+0102, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0104 L   Letter: Upper case letter, latin, Other, U+0105, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+0105 L   Letter: Lower case letter, latin, Other, U+0104, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+0106 L   Letter: Upper case letter, latin, Other, U+0107, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\n\nfindprop 345 399 03b9 1fbe\nU+0345 NSM Mark: Non-spacing mark, inherited, Extend, U+03B9, U+0399, U+1FBE, [greek], [alphabetic, caseignorable, cased, changeswhencasefolded, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, diacritic, graphemeextend, idcontinue, incb, lowercase, xidcontinue]\nU+0399 L   Letter: Upper case letter, greek, Other, U+03B9, U+0345, U+1FBE, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+03B9 L   Letter: Lower case letter, greek, Other, U+0345, U+0399, U+1FBE, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+1FBE L   Letter: Lower case letter, greek, Other, U+03B9, U+0345, U+0399, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\n\nfindprop 00390 1fd3\nU+0390 L   Letter: Lower case letter, greek, Other, U+1FD3, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+1FD3 L   Letter: Lower case letter, greek, Other, U+0390, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\n\nfindprop ffe0 ffe1 ffe2 ffe3 ffe4 ffe5 ffe6 ffe7 \nU+FFE0 ET  Symbol: Currency symbol, common, Other, [graphemebase]\nU+FFE1 ET  Symbol: Currency symbol, common, Other, [graphemebase]\nU+FFE2 ON  Symbol: Mathematical symbol, common, Other, [graphemebase, math]\nU+FFE3 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+FFE4 ON  Symbol: Other symbol, common, Other, [graphemebase]\nU+FFE5 ET  Symbol: Currency symbol, common, Other, [graphemebase]\nU+FFE6 ET  Symbol: Currency symbol, common, Other, [graphemebase]\nU+FFE7 L   Control: Unassigned, unknown, Other\nfindprop ffe8 ffe9 ffea ffeb ffec ffed ffee ffef\nU+FFE8 ON  Symbol: Other symbol, common, Other, [graphemebase]\nU+FFE9 ON  Symbol: Mathematical symbol, common, Other, [graphemebase, math]\nU+FFEA ON  Symbol: Mathematical symbol, common, Other, [graphemebase, math]\nU+FFEB ON  Symbol: Mathematical symbol, common, Other, [graphemebase, math]\nU+FFEC ON  Symbol: Mathematical symbol, common, Other, [graphemebase, math]\nU+FFED ON  Symbol: Other symbol, common, Other, [graphemebase]\nU+FFEE ON  Symbol: Other symbol, common, Other, [graphemebase]\nU+FFEF L   Control: Unassigned, unknown, Other\nfindprop fff8 fff9 fffa fffb fffc fffd fffe ffff\nU+FFF8 BN  Control: Unassigned, unknown, Control, [defaultignorablecodepoint]\nU+FFF9 ON  Control: Format, common, Control, [caseignorable]\nU+FFFA ON  Control: Format, common, Control, [caseignorable]\nU+FFFB ON  Control: Format, common, Control, [caseignorable]\nU+FFFC ON  Symbol: Other symbol, common, Other, [graphemebase]\nU+FFFD ON  Symbol: Other symbol, common, Other, [graphemebase]\nU+FFFE BN  Control: Unassigned, unknown, Other, [noncharactercodepoint]\nU+FFFF BN  Control: Unassigned, unknown, Other, [noncharactercodepoint]\nfindprop 10000 10001 e01ef f0000 100000\nU+10000 L   Letter: Other letter, linearb, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+10001 L   Letter: Other letter, linearb, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+E01EF NSM Mark: Non-spacing mark, inherited, Extend, [caseignorable, defaultignorablecodepoint, graphemeextend, idcontinue, incb, variationselector, xidcontinue]\nU+F0000 L   Control: Private use, unknown, Other\nU+100000 L   Control: Private use, unknown, Other\n\nfindprop 1b00 12000 7c0 a840 10900\nU+1B00 NSM Mark: Non-spacing mark, balinese, Extend, [alphabetic, caseignorable, graphemeextend, idcontinue, incb, xidcontinue]\nU+12000 L   Letter: Other letter, cuneiform, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+07C0 R   Number: Decimal number, nko, Other, [graphemebase, idcontinue, xidcontinue]\nU+A840 L   Letter: Other letter, phagspa, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+10900 R   Letter: Other letter, phoenician, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nfindprop 1d79 a77d\nU+1D79 L   Letter: Lower case letter, latin, Other, U+A77D, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+A77D L   Letter: Upper case letter, latin, Other, U+1D79, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\n\nfindprop  0800  083e  a4d0  a4f7  aa80  aadf\nU+0800 R   Letter: Other letter, samaritan, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+083E R   Punctuation: Other punctuation, samaritan, Other, [graphemebase, sentenceterminal, terminalpunctuation]\nU+A4D0 L   Letter: Other letter, lisu, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+A4F7 L   Letter: Other letter, lisu, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AA80 L   Letter: Other letter, taiviet, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AADF L   Punctuation: Other punctuation, taiviet, Other, [graphemebase, terminalpunctuation]\nfindprop 10b00 10b35 13000 1342e 10840 10855\nU+10B00 R   Letter: Other letter, avestan, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+10B35 R   Letter: Other letter, avestan, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+13000 L   Letter: Other letter, egyptianhieroglyphs, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+1342E L   Letter: Other letter, egyptianhieroglyphs, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+10840 R   Letter: Other letter, imperialaramaic, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+10855 R   Letter: Other letter, imperialaramaic, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\n\nfindprop 11100 1113c 11680 116c0\nU+11100 NSM Mark: Non-spacing mark, chakma, Extend, [alphabetic, caseignorable, graphemeextend, idcontinue, incb, xidcontinue]\nU+1113C L   Number: Decimal number, chakma, Other, [graphemebase, idcontinue, xidcontinue]\nU+11680 L   Letter: Other letter, takri, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+116C0 L   Number: Decimal number, takri, Other, [graphemebase, idcontinue, xidcontinue]\n\nfindprop 0d 0a 0e 0711 1b04 1111 1169 11fe ae4c ad89\nU+000D B   Control: Control, common, CR, [ascii, patternwhitespace, whitespace]\nU+000A B   Control: Control, common, LF, [ascii, patternwhitespace, whitespace]\nU+000E BN  Control: Control, common, Control, [ascii]\nU+0711 NSM Mark: Non-spacing mark, syriac, Extend, [alphabetic, caseignorable, graphemeextend, idcontinue, incb, xidcontinue]\nU+1B04 L   Mark: Spacing mark, balinese, SpacingMark, [alphabetic, graphemebase, idcontinue, xidcontinue]\nU+1111 L   Letter: Other letter, hangul, Hangul syllable type L, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+1169 L   Letter: Other letter, hangul, Hangul syllable type V, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+11FE L   Letter: Other letter, hangul, Hangul syllable type T, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AE4C L   Letter: Other letter, hangul, Hangul syllable type LV, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AD89 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\n\nfindprop 118a0 11ac7 16ad0\nU+118A0 L   Letter: Upper case letter, warangciti, Other, U+118C0, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+11AC7 L   Letter: Other letter, paucinhau, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+16AD0 L   Letter: Other letter, bassavah, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\n\nfindprop 11700 14400 108e0 11280 1d800\nU+11700 L   Letter: Other letter, ahom, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+14400 L   Letter: Other letter, anatolianhieroglyphs, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+108E0 R   Letter: Other letter, hatran, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+11280 L   Letter: Other letter, multani, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+1D800 L   Symbol: Other symbol, signwriting, Other, [graphemebase]\n\nfindprop 11800 1e903 11da9 10d27 11ee0 16e48 10f27 10f30\nU+11800 L   Letter: Other letter, dogra, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+1E903 R   Letter: Upper case letter, adlam, Other, U+1E925, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+11DA9 L   Number: Decimal number, gunjalagondi, Other, [graphemebase, idcontinue, xidcontinue]\nU+10D27 NSM Mark: Non-spacing mark, hanifirohingya, Extend, [alphabetic, caseignorable, diacritic, graphemeextend, idcontinue, incb, xidcontinue]\nU+11EE0 L   Letter: Other letter, makasar, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+16E48 L   Letter: Upper case letter, medefaidrin, Other, U+16E68, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\nU+10F27 R   Letter: Other letter, oldsogdian, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+10F30 AL  Letter: Other letter, sogdian, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\n\nfindprop  a836  a833  1cf4  20f0  1cd0\nU+A836 L   Symbol: Other symbol, common, Other, [devanagari, gurmukhi, gujarati, kaithi, takri, khojki, mahajani, modi, khudawadi, tirhuta, dogra], [graphemebase]\nU+A833 L   Number: Other number, common, Other, [devanagari, gurmukhi, gujarati, kannada, kaithi, sharada, takri, khojki, mahajani, modi, khudawadi, tirhuta, dogra, nandinagari, tulutigalari], [graphemebase]\nU+1CF4 NSM Mark: Non-spacing mark, inherited, Extend, [devanagari, kannada, grantha, tulutigalari], [caseignorable, diacritic, graphemeextend, idcontinue, incb, xidcontinue]\nU+20F0 NSM Mark: Non-spacing mark, inherited, Extend, [latin, devanagari, grantha], [caseignorable, graphemeextend, idcontinue, incb, xidcontinue]\nU+1CD0 NSM Mark: Non-spacing mark, inherited, Extend, [devanagari, bengali, kannada, grantha], [caseignorable, diacritic, graphemeextend, idcontinue, incb, xidcontinue]\n\nfindprop 32ff\nU+32FF L   Symbol: Other symbol, common, Other, [han], [graphemebase]\n\nfindprop 1f16d\nU+1F16D ON  Symbol: Other symbol, common, Other, [graphemebase]\n\nfindprop U+10e93 U+10eaa\nU+10E93 R   Letter: Other letter, yezidi, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+10EAA R   Control: Unassigned, unknown, Other\nfindprop +á +é U+212A\nU+00E1 L   Letter: Lower case letter, latin, Other, U+00C1, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+00E9 L   Letter: Lower case letter, latin, Other, U+00C9, [alphabetic, cased, changeswhencasemapped, changeswhentitlecased, changeswhenuppercased, graphemebase, idcontinue, idstart, lowercase, xidcontinue, xidstart]\nU+212A L   Letter: Upper case letter, latin, Other, U+004B, U+006B, [alphabetic, cased, changeswhencasefolded, changeswhencasemapped, changeswhenlowercased, graphemebase, idcontinue, idstart, uppercase, xidcontinue, xidstart]\n\nfindprop 0602 202a 202b 202c 2068 2069 202d 202e 2067\nU+0602 AN  Control: Format, arabic, Prepend, [caseignorable, prependedconcatenationmark]\nU+202A LRE Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\nU+202B RLE Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\nU+202C PDF Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\nU+2068 FSI Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\nU+2069 PDI Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\nU+202D LRO Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\nU+202E RLO Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\nU+2067 RLI Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\n\nfindprop 143e5\nU+143E5 L   Letter: Other letter, egyptianhieroglyphs, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nfindprop 1CC4E\nU+1CC4E ON  Symbol: Other symbol, common, Other, [graphemebase]\nfindprop U+1FAE9\nU+1FAE9 ON  Symbol: Other symbol, common, Extended Pictographic, [emoji, emojipresentation, extendedpictographic, graphemebase]\nfindprop U+20C1\nU+20C1 ET  Symbol: Currency symbol, common, Other, [graphemebase]\n"
  },
  {
    "path": "maint/ucptestdata/testoutput2",
    "content": "find script Han\nU+2E80..U+2E99 ON  Symbol: Other symbol, han, Other, [graphemebase, radical]\nU+2E9B..U+2EF3 ON  Symbol: Other symbol, han, Other, [graphemebase, radical]\nU+2F00..U+2FD5 ON  Symbol: Other symbol, han, Other, [graphemebase, radical]\n        U+3005 L   Letter: Modifier letter, han, Other, [alphabetic, caseignorable, extender, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\n        U+3007 L   Number: Letter number, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\nU+3021..U+3029 L   Number: Letter number, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\nU+3038..U+303A L   Number: Letter number, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\n        U+303B L   Letter: Modifier letter, han, Other, [alphabetic, caseignorable, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+3400..U+4DBF L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\nU+4E00..U+9FFF L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\nU+F900..U+FA0D L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\nU+FA0E..U+FA0F L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\n        U+FA10 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\n        U+FA11 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\n        U+FA12 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\nU+FA13..U+FA14 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\nU+FA15..U+FA1E L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\n        U+FA1F L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\n        U+FA20 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\n        U+FA21 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\n        U+FA22 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\nU+FA23..U+FA24 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\nU+FA25..U+FA26 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\nU+FA27..U+FA29 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\nU+FA2A..U+FA6D L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\nU+FA70..U+FAD9 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\n        U+16FE2 ON  Punctuation: Other punctuation, han, Other, [graphemebase]\n       U+16FE3 L   Letter: Modifier letter, han, Other, [alphabetic, caseignorable, extender, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+16FF0..U+16FF1 L   Mark: Spacing mark, han, Extend, [alphabetic, diacritic, graphemeextend, idcontinue, incb, xidcontinue]\nU+16FF2..U+16FF3 L   Letter: Modifier letter, han, Other, [alphabetic, caseignorable, extender, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\nU+16FF4..U+16FF6 L   Number: Letter number, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\nU+20000..U+2A6DF L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\nU+2A700..U+2B81D L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\nU+2B820..U+2CEAD L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\nU+2CEB0..U+2EBE0 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\nU+2EBF0..U+2EE5D L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\nU+2F800..U+2FA1D L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, xidcontinue, xidstart]\nU+30000..U+3134A L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\nU+31350..U+33479 L   Letter: Other letter, han, Other, [alphabetic, graphemebase, idcontinue, idstart, ideographic, unifiedideograph, xidcontinue, xidstart]\nfind type Pe script Common scriptx Hangul\nU+3009 ON  Punctuation: Close punctuation, common, Other, [tibetan, hangul, mongolian, hiragana, katakana, bopomofo, han, yiii], [bidimirrored, graphemebase, patternsyntax]\nU+300B ON  Punctuation: Close punctuation, common, Other, [tibetan, hangul, mongolian, hiragana, katakana, bopomofo, han, yiii, lisu], [bidimirrored, graphemebase, patternsyntax]\nU+300D ON  Punctuation: Close punctuation, common, Other, [hangul, hiragana, katakana, bopomofo, han, yiii], [bidimirrored, graphemebase, patternsyntax, quotationmark]\nU+300F ON  Punctuation: Close punctuation, common, Other, [hangul, hiragana, katakana, bopomofo, han, yiii], [bidimirrored, graphemebase, patternsyntax, quotationmark]\nU+3011 ON  Punctuation: Close punctuation, common, Other, [hangul, hiragana, katakana, bopomofo, han, yiii], [bidimirrored, graphemebase, patternsyntax]\nU+3015 ON  Punctuation: Close punctuation, common, Other, [hangul, hiragana, katakana, bopomofo, han, yiii], [bidimirrored, graphemebase, patternsyntax]\nU+3017 ON  Punctuation: Close punctuation, common, Other, [hangul, hiragana, katakana, bopomofo, han, yiii], [bidimirrored, graphemebase, patternsyntax]\nU+3019 ON  Punctuation: Close punctuation, common, Other, [hangul, hiragana, katakana, bopomofo, han, yiii], [bidimirrored, graphemebase, patternsyntax]\nU+301B ON  Punctuation: Close punctuation, common, Other, [hangul, hiragana, katakana, bopomofo, han, yiii], [bidimirrored, graphemebase, patternsyntax]\nU+301E..U+301F ON  Punctuation: Close punctuation, common, Other, [hangul, hiragana, katakana, bopomofo, han], [graphemebase, patternsyntax, quotationmark]\n        U+FF63 ON  Punctuation: Close punctuation, common, Other, [hangul, hiragana, katakana, bopomofo, han, yiii], [bidimirrored, graphemebase, quotationmark]\nfind script !latin scriptx sundanese\nU+1B80..U+1B81 NSM Mark: Non-spacing mark, sundanese, Extend, [alphabetic, caseignorable, graphemeextend, idcontinue, incb, xidcontinue]\n        U+1B82 L   Mark: Spacing mark, sundanese, SpacingMark, [alphabetic, graphemebase, idcontinue, xidcontinue]\nU+1B83..U+1BA0 L   Letter: Other letter, sundanese, Other, [alphabetic, graphemebase, idcontinue, idstart, incb, xidcontinue, xidstart]\n        U+1BA1 L   Mark: Spacing mark, sundanese, SpacingMark, [alphabetic, graphemebase, idcontinue, xidcontinue]\nU+1BA2..U+1BA5 NSM Mark: Non-spacing mark, sundanese, Extend, [alphabetic, caseignorable, graphemeextend, idcontinue, incb, xidcontinue]\nU+1BA6..U+1BA7 L   Mark: Spacing mark, sundanese, SpacingMark, [alphabetic, graphemebase, idcontinue, xidcontinue]\nU+1BA8..U+1BA9 NSM Mark: Non-spacing mark, sundanese, Extend, [alphabetic, caseignorable, graphemeextend, idcontinue, incb, xidcontinue]\n        U+1BAA L   Mark: Spacing mark, sundanese, Extend, [diacritic, graphemeextend, graphemelink, idcontinue, incb, xidcontinue]\n        U+1BAB NSM Mark: Non-spacing mark, sundanese, Extend, [caseignorable, diacritic, graphemeextend, graphemelink, idcontinue, incb, xidcontinue]\nU+1BAC..U+1BAD NSM Mark: Non-spacing mark, sundanese, Extend, [alphabetic, caseignorable, graphemeextend, idcontinue, incb, xidcontinue]\nU+1BAE..U+1BAF L   Letter: Other letter, sundanese, Other, [alphabetic, graphemebase, idcontinue, idstart, incb, xidcontinue, xidstart]\nU+1BB0..U+1BB9 L   Number: Decimal number, sundanese, Other, [graphemebase, idcontinue, xidcontinue]\n        U+1BBA L   Letter: Other letter, sundanese, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+1BBB..U+1BBD L   Letter: Other letter, sundanese, Other, [alphabetic, graphemebase, idcontinue, idstart, incb, xidcontinue, xidstart]\nU+1BBE..U+1BBF L   Letter: Other letter, sundanese, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+1CC0..U+1CC7 L   Punctuation: Other punctuation, sundanese, Other, [graphemebase]\nfind type Sk\nU+005E ON  Symbol: Modifier symbol, common, Other, [ascii, caseignorable, diacritic, graphemebase, math, patternsyntax]\nU+0060 ON  Symbol: Modifier symbol, common, Other, [ascii, caseignorable, diacritic, graphemebase, patternsyntax]\nU+00A8 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+00AF ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+00B4 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+00B8 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+02C2..U+02C5 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+02D2..U+02D6 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\n        U+02D7 ON  Symbol: Modifier symbol, common, Other, [latin, thai], [caseignorable, diacritic, graphemebase]\n        U+02D8 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\n        U+02D9 ON  Symbol: Modifier symbol, common, Other, [latin, bopomofo], [caseignorable, diacritic, graphemebase]\nU+02DA..U+02DF ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+02E5..U+02E9 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+02EA..U+02EB ON  Symbol: Modifier symbol, bopomofo, Other, [caseignorable, diacritic, graphemebase]\n        U+02ED ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+02EF..U+02FF ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\n        U+0375 ON  Symbol: Modifier symbol, greek, Other, [greek, coptic], [caseignorable, diacritic, graphemebase]\n        U+0384 ON  Symbol: Modifier symbol, greek, Other, [caseignorable, diacritic, graphemebase]\n        U+0385 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\n        U+0888 AL  Symbol: Modifier symbol, arabic, Other, [caseignorable, graphemebase]\n        U+1FBD ON  Symbol: Modifier symbol, greek, Other, [caseignorable, diacritic, graphemebase]\nU+1FBF..U+1FC1 ON  Symbol: Modifier symbol, greek, Other, [caseignorable, diacritic, graphemebase]\nU+1FCD..U+1FCF ON  Symbol: Modifier symbol, greek, Other, [caseignorable, diacritic, graphemebase]\nU+1FDD..U+1FDF ON  Symbol: Modifier symbol, greek, Other, [caseignorable, diacritic, graphemebase]\nU+1FED..U+1FEF ON  Symbol: Modifier symbol, greek, Other, [caseignorable, diacritic, graphemebase]\nU+1FFD..U+1FFE ON  Symbol: Modifier symbol, greek, Other, [caseignorable, diacritic, graphemebase]\nU+309B..U+309C ON  Symbol: Modifier symbol, common, Other, [hiragana, katakana], [caseignorable, diacritic, graphemebase, idcontinue, idstart]\nU+A700..U+A707 ON  Symbol: Modifier symbol, common, Other, [latin, han], [caseignorable, diacritic, graphemebase]\nU+A708..U+A716 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+A720..U+A721 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+A789..U+A78A L   Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\n        U+AB5B L   Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+AB6A..U+AB6B ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+FBB2..U+FBC2 AL  Symbol: Modifier symbol, arabic, Other, [caseignorable, graphemebase]\n        U+FF3E ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase, math]\n        U+FF40 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\n        U+FFE3 ON  Symbol: Modifier symbol, common, Other, [caseignorable, diacritic, graphemebase]\nU+1F3FB..U+1F3FF ON  Symbol: Modifier symbol, common, Extend, [caseignorable, emoji, emojicomponent, emojimodifier, emojipresentation, graphemebase, incb]\nfind type Pd\nU+002D ES  Punctuation: Dash punctuation, common, Other, [ascii, dash, graphemebase, patternsyntax]\nU+058A ON  Punctuation: Dash punctuation, armenian, Other, [dash, graphemebase]\nU+05BE R   Punctuation: Dash punctuation, hebrew, Other, [dash, graphemebase]\nU+1400 ON  Punctuation: Dash punctuation, canadianaboriginal, Other, [dash, graphemebase]\nU+1806 ON  Punctuation: Dash punctuation, mongolian, Other, [dash, graphemebase]\nU+2010..U+2015 ON  Punctuation: Dash punctuation, common, Other, [dash, graphemebase, patternsyntax]\n        U+2E17 ON  Punctuation: Dash punctuation, common, Other, [latin, coptic], [dash, graphemebase, patternsyntax]\n        U+2E1A ON  Punctuation: Dash punctuation, common, Other, [dash, graphemebase, patternsyntax]\nU+2E3A..U+2E3B ON  Punctuation: Dash punctuation, common, Other, [dash, graphemebase, patternsyntax]\n        U+2E40 ON  Punctuation: Dash punctuation, common, Other, [dash, graphemebase, patternsyntax]\n        U+2E5D ON  Punctuation: Dash punctuation, common, Other, [dash, graphemebase, patternsyntax]\n        U+301C ON  Punctuation: Dash punctuation, common, Other, [hangul, hiragana, katakana, bopomofo, han], [dash, graphemebase, patternsyntax]\n        U+3030 ON  Punctuation: Dash punctuation, common, Extended Pictographic, [hangul, hiragana, katakana, bopomofo, han], [dash, emoji, extendedpictographic, graphemebase, patternsyntax]\n        U+30A0 ON  Punctuation: Dash punctuation, common, Other, [hiragana, katakana], [dash, graphemebase]\nU+FE31..U+FE32 ON  Punctuation: Dash punctuation, common, Other, [dash, graphemebase]\n        U+FE58 ON  Punctuation: Dash punctuation, common, Other, [dash, graphemebase]\n        U+FE63 ES  Punctuation: Dash punctuation, common, Other, [dash, graphemebase, math]\n        U+FF0D ES  Punctuation: Dash punctuation, common, Other, [dash, graphemebase]\n        U+10D6E ON  Punctuation: Dash punctuation, garay, Other, [dash, graphemebase]\n       U+10EAD R   Punctuation: Dash punctuation, yezidi, Other, [dash, graphemebase]\nfind gbreak LVT\nU+AC01..U+AC1B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AC1D..U+AC37 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AC39..U+AC53 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AC55..U+AC6F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AC71..U+AC8B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AC8D..U+ACA7 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+ACA9..U+ACC3 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+ACC5..U+ACDF L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+ACE1..U+ACFB L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+ACFD..U+AD17 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AD19..U+AD33 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AD35..U+AD4F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AD51..U+AD6B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AD6D..U+AD87 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AD89..U+ADA3 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+ADA5..U+ADBF L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+ADC1..U+ADDB L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+ADDD..U+ADF7 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+ADF9..U+AE13 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AE15..U+AE2F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AE31..U+AE4B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AE4D..U+AE67 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AE69..U+AE83 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AE85..U+AE9F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AEA1..U+AEBB L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AEBD..U+AED7 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AED9..U+AEF3 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AEF5..U+AF0F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AF11..U+AF2B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AF2D..U+AF47 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AF49..U+AF63 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AF65..U+AF7F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AF81..U+AF9B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AF9D..U+AFB7 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AFB9..U+AFD3 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AFD5..U+AFEF L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+AFF1..U+B00B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B00D..U+B027 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B029..U+B043 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B045..U+B05F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B061..U+B07B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B07D..U+B097 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B099..U+B0B3 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B0B5..U+B0CF L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B0D1..U+B0EB L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B0ED..U+B107 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B109..U+B123 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B125..U+B13F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B141..U+B15B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B15D..U+B177 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B179..U+B193 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B195..U+B1AF L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B1B1..U+B1CB L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B1CD..U+B1E7 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B1E9..U+B203 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B205..U+B21F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B221..U+B23B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B23D..U+B257 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B259..U+B273 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B275..U+B28F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B291..U+B2AB L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B2AD..U+B2C7 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B2C9..U+B2E3 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B2E5..U+B2FF L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B301..U+B31B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B31D..U+B337 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B339..U+B353 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B355..U+B36F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B371..U+B38B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B38D..U+B3A7 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B3A9..U+B3C3 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B3C5..U+B3DF L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B3E1..U+B3FB L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B3FD..U+B417 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B419..U+B433 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B435..U+B44F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B451..U+B46B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B46D..U+B487 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B489..U+B4A3 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B4A5..U+B4BF L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B4C1..U+B4DB L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B4DD..U+B4F7 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B4F9..U+B513 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B515..U+B52F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B531..U+B54B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B54D..U+B567 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B569..U+B583 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B585..U+B59F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B5A1..U+B5BB L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B5BD..U+B5D7 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B5D9..U+B5F3 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B5F5..U+B60F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B611..U+B62B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B62D..U+B647 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B649..U+B663 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B665..U+B67F L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B681..U+B69B L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B69D..U+B6B7 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B6B9..U+B6D3 L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+B6D5..U+B6EF L   Letter: Other letter, hangul, Hangul syllable type LVT, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\n...\nfind script Old_Uyghur\nU+10F70..U+10F81 R   Letter: Other letter, olduyghur, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+10F82..U+10F85 NSM Mark: Non-spacing mark, olduyghur, Extend, [caseignorable, diacritic, graphemeextend, idcontinue, incb, xidcontinue]\nU+10F86..U+10F89 R   Punctuation: Other punctuation, olduyghur, Other, [graphemebase, sentenceterminal, terminalpunctuation]\nfind bidi PDF\nU+202C PDF Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\nfind bidi CS\nU+002C CS  Punctuation: Other punctuation, common, Other, [ascii, graphemebase, patternsyntax, terminalpunctuation]\nU+002E CS  Punctuation: Other punctuation, common, Other, [ascii, caseignorable, graphemebase, patternsyntax, sentenceterminal, terminalpunctuation]\nU+002F CS  Punctuation: Other punctuation, common, Other, [ascii, graphemebase, patternsyntax]\nU+003A CS  Punctuation: Other punctuation, common, Other, [ascii, caseignorable, graphemebase, patternsyntax, terminalpunctuation]\nU+00A0 CS  Separator: Space separator, common, Other, [graphemebase, whitespace]\nU+060C CS  Punctuation: Other punctuation, common, Other, [arabic, syriac, thaana, nko, hanifirohingya, yezidi, garay], [graphemebase, terminalpunctuation]\nU+202F CS  Separator: Space separator, common, Other, [latin, mongolian, phagspa], [graphemebase, whitespace]\nU+2044 CS  Symbol: Mathematical symbol, common, Other, [graphemebase, math, patternsyntax]\nU+FE50 CS  Punctuation: Other punctuation, common, Other, [graphemebase, terminalpunctuation]\nU+FE52 CS  Punctuation: Other punctuation, common, Other, [caseignorable, graphemebase, sentenceterminal, terminalpunctuation]\nU+FE55 CS  Punctuation: Other punctuation, common, Other, [caseignorable, graphemebase, terminalpunctuation]\nU+FF0C CS  Punctuation: Other punctuation, common, Other, [graphemebase, terminalpunctuation]\nU+FF0E CS  Punctuation: Other punctuation, common, Other, [caseignorable, graphemebase, sentenceterminal, terminalpunctuation]\nU+FF0F CS  Punctuation: Other punctuation, common, Other, [graphemebase]\nU+FF1A CS  Punctuation: Other punctuation, common, Other, [caseignorable, graphemebase, terminalpunctuation]\nfind bidi CS type Sm\nU+2044 CS  Symbol: Mathematical symbol, common, Other, [graphemebase, math, patternsyntax]\nfind bidi B\nU+000A B   Control: Control, common, LF, [ascii, patternwhitespace, whitespace]\nU+000D B   Control: Control, common, CR, [ascii, patternwhitespace, whitespace]\nU+001C..U+001E B   Control: Control, common, Control, [ascii]\n        U+0085 B   Control: Control, common, Control, [patternwhitespace, whitespace]\n        U+2029 B   Separator: Paragraph separator, common, Control, [patternwhitespace, whitespace]\nfind bidi FSI\nU+2068 FSI Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\nfind bidi PDI\nU+2069 PDI Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\nfind bidi RLI\nU+2067 RLI Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\nfind bidi RLO\nU+202E RLO Control: Format, common, Control, [bidicontrol, caseignorable, defaultignorablecodepoint]\nfind bidi S\nU+0009 S   Control: Control, common, Control, [ascii, patternwhitespace, whitespace]\nU+000B S   Control: Control, common, Control, [ascii, patternwhitespace, whitespace]\nU+001F S   Control: Control, common, Control, [ascii]\nfind bidi WS\nU+000C WS  Control: Control, common, Control, [ascii, patternwhitespace, whitespace]\nU+0020 WS  Separator: Space separator, common, Other, [ascii, graphemebase, patternwhitespace, whitespace]\nU+1680 WS  Separator: Space separator, ogham, Other, [graphemebase, whitespace]\nU+2000..U+200A WS  Separator: Space separator, common, Other, [graphemebase, whitespace]\n        U+2028 WS  Separator: Line separator, common, Control, [patternwhitespace, whitespace]\n        U+205F WS  Separator: Space separator, common, Other, [graphemebase, whitespace]\n        U+3000 WS  Separator: Space separator, common, Other, [graphemebase, whitespace]\nfind bidi white_space bool ascii\nU+000C WS  Control: Control, common, Control, [ascii, patternwhitespace, whitespace]\nU+0020 WS  Separator: Space separator, common, Other, [ascii, graphemebase, patternwhitespace, whitespace]\nfind script bopo\nU+02EA..U+02EB ON  Symbol: Modifier symbol, bopomofo, Other, [caseignorable, diacritic, graphemebase]\nU+3105..U+312F L   Letter: Other letter, bopomofo, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nU+31A0..U+31BF L   Letter: Other letter, bopomofo, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nfind bool prependedconcatenationmark\nU+0600..U+0604 AN  Control: Format, arabic, Prepend, [caseignorable, prependedconcatenationmark]\n        U+0605 AN  Control: Format, common, Prepend, [caseignorable, prependedconcatenationmark]\n        U+06DD AN  Control: Format, common, Prepend, [caseignorable, prependedconcatenationmark]\n        U+070F AL  Control: Format, syriac, Prepend, [caseignorable, prependedconcatenationmark]\nU+0890..U+0891 AN  Control: Format, arabic, Prepend, [caseignorable, prependedconcatenationmark]\n        U+08E2 AN  Control: Format, common, Prepend, [caseignorable, prependedconcatenationmark]\n        U+110BD L   Control: Format, kaithi, Prepend, [caseignorable, prependedconcatenationmark]\n       U+110CD L   Control: Format, kaithi, Prepend, [caseignorable, prependedconcatenationmark]\nfind bool pcm\nU+0600..U+0604 AN  Control: Format, arabic, Prepend, [caseignorable, prependedconcatenationmark]\n        U+0605 AN  Control: Format, common, Prepend, [caseignorable, prependedconcatenationmark]\n        U+06DD AN  Control: Format, common, Prepend, [caseignorable, prependedconcatenationmark]\n        U+070F AL  Control: Format, syriac, Prepend, [caseignorable, prependedconcatenationmark]\nU+0890..U+0891 AN  Control: Format, arabic, Prepend, [caseignorable, prependedconcatenationmark]\n        U+08E2 AN  Control: Format, common, Prepend, [caseignorable, prependedconcatenationmark]\n        U+110BD L   Control: Format, kaithi, Prepend, [caseignorable, prependedconcatenationmark]\n       U+110CD L   Control: Format, kaithi, Prepend, [caseignorable, prependedconcatenationmark]\nfind script Todhri\nU+105C0..U+105F3 L   Letter: Other letter, todhri, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\nfind script Sunuwar\nU+11BC0..U+11BE0 L   Letter: Other letter, sunuwar, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\n       U+11BE1 L   Punctuation: Other punctuation, sunuwar, Other, [graphemebase]\nU+11BF0..U+11BF9 L   Number: Decimal number, sunuwar, Other, [graphemebase, idcontinue, xidcontinue]\nfind script Sidetic\nU+10940..U+10959 R   Letter: Other letter, sidetic, Other, [alphabetic, graphemebase, idcontinue, idstart, xidcontinue, xidstart]\n"
  },
  {
    "path": "pcre2-config.in",
    "content": "#!/bin/sh\n\nprefix=@prefix@\nexec_prefix=@exec_prefix@\nexec_prefix_set=no\n\ncflags=\"[--cflags]\"\nlibs=\n\nif test @enable_pcre2_16@ = yes ; then\n  libs=\"[--libs16] $libs\"\nfi\n\nif test @enable_pcre2_32@ = yes ; then\n  libs=\"[--libs32] $libs\"\nfi\n\nif test @enable_pcre2_8@ = yes ; then\n  libs=\"[--libs8] [--libs-posix] $libs\"\n  cflags=\"$cflags [--cflags-posix]\"\nfi\n\nusage=\"Usage: pcre2-config [--prefix] [--exec-prefix] [--version] $libs $cflags\"\n\nif test $# -eq 0; then\n  echo \"${usage}\" 1>&2\n  exit 1\nfi\n\nlibR=\ncase `uname -s` in\n  *SunOS*)\n  libR=\" -R@libdir@\"\n  ;;\n  *BSD*)\n  libR=\" -Wl,-R@libdir@\"\n  ;;\nesac\n\nlibS=\ncase \"@libdir@\" in\n  # system locations on Linux, no -L needed\n  /usr/lib|/usr/lib32|/usr/lib64|/usr/lib/*-gnu*)\n  ;;\n  /lib|/lib32|/lib64|/lib/*-gnu*)\n  ;;\n  # system locations on AIX and Solaris, no -L needed\n  /usr/lib/64|/usr/lib/amd*|/usr/lib/sparc*|/usr/lib/ppc*)\n  ;;\n  *)\n  libS=\"-L@libdir@\"\n  ;;\nesac\n\nwhile test $# -gt 0; do\n  case \"$1\" in\n  -*=*) optarg=`echo \"$1\" | sed 's/[-_a-zA-Z0-9]*=//'` ;;\n  *) optarg= ;;\n  esac\n\n  case $1 in\n    --prefix=*)\n      prefix=$optarg\n      if test $exec_prefix_set = no ; then\n        exec_prefix=$optarg\n      fi\n      ;;\n    --prefix)\n      echo $prefix\n      ;;\n    --exec-prefix=*)\n      exec_prefix=$optarg\n      exec_prefix_set=yes\n      ;;\n    --exec-prefix)\n      echo $exec_prefix\n      ;;\n    --version)\n      echo @PACKAGE_VERSION@\n      ;;\n    --cflags)\n      if test @includedir@ != /usr/include ; then\n        includes=-I@includedir@\n      fi\n      echo $includes @PCRE2_STATIC_CFLAG@\n      ;;\n    --cflags-posix)\n      if test @enable_pcre2_8@ = yes ; then\n        if test @includedir@ != /usr/include ; then\n          includes=-I@includedir@\n        fi\n        echo $includes @PCRE2POSIX_CFLAG@\n      else\n        echo \"${usage}\" 1>&2\n      fi\n      ;;\n    --libs-posix)\n      if test @enable_pcre2_8@ = yes ; then\n        echo $libS$libR -lpcre2-posix@LIB_POSTFIX@ -lpcre2-8@LIB_POSTFIX@\n      else\n        echo \"${usage}\" 1>&2\n      fi\n      ;;\n    --libs8)\n      if test @enable_pcre2_8@ = yes ; then\n        echo $libS$libR -lpcre2-8@LIB_POSTFIX@\n      else\n        echo \"${usage}\" 1>&2\n      fi\n      ;;\n    --libs16)\n      if test @enable_pcre2_16@ = yes ; then\n        echo $libS$libR -lpcre2-16@LIB_POSTFIX@\n      else\n        echo \"${usage}\" 1>&2\n      fi\n      ;;\n    --libs32)\n      if test @enable_pcre2_32@ = yes ; then\n        echo $libS$libR -lpcre2-32@LIB_POSTFIX@\n      else\n        echo \"${usage}\" 1>&2\n      fi\n      ;;\n    *)\n      echo \"${usage}\" 1>&2\n      exit 1\n      ;;\n  esac\n  shift\ndone\n"
  },
  {
    "path": "perltest.sh",
    "content": "#! /bin/sh\n\n# This is a script for testing regular expressions with Perl to check that\n# it handles them the same way as PCRE2. For testing with different versions of\n# Perl, if the first argument is -perl, the second is taken as the Perl command\n# to use, and both are then removed. If the next argument is \"-w\", Perl is\n# called with \"-w\", which turns on its warning mode.\n#\n# The Perl code has to have \"use utf8\" and \"require Encode\" at the start when\n# running UTF-8 tests, but *not* for non-utf8 tests. The \"require\" would\n# actually be OK for non-utf8-tests, but is not always installed, so this way\n# the script will always run for these tests.\n#\n# The desired effect is achieved by making this a shell script that passes the\n# a script to Perl through a pipe. See comments below about the data for the\n# Perl script. If the next argument of this script is \"-utf8\", a suitable\n# prefix for the Perl script is set up.\n#\n# A similar process is used to indicate the desire to set a specific locale\n# tables per pattern in a similar way to pcre2test through a locale modifier,\n# by using the -locale argument. This can be optionally combined with the\n# previous arguments; for example, to process an UTF-8 test file in Turkish,\n# add the locale=tr_TR.utf8 modifier to the pattern and -locale to perltest,\n# or invoke something like (the specific names of the locale might vary):\n#\n#   ./perltest.sh -utf8 -locale=tr_TR.utf8 some-file\n#\n# If the -locale argument has no setting, a suitable default locale is used\n# when possible and reported at startup, it can be always overriden using the\n# locale modifier for each pattern.\n#\n# The remaining arguments of this script, if any, are passed to Perl. They are\n# an input file and an output file. If there is one argument, the output is\n# written to STDOUT. If Perl receives no arguments, it opens /dev/tty as input,\n# and writes output to STDOUT. (I haven't found a way of getting it to use\n# STDIN, because of the contorted piping input.)\n\n\n# Handle the shell script arguments.\n\nperl=perl\nperlarg=\"\"\nprefix=\"\"\nspc=\"\"\n\nif [ $# -gt 0 -a \"$1\" = \"-perl\" ] ; then\n  if [ $# -lt 2 ] ; then\n    echo \"perltest.sh: Missing perl command after -perl\"\n    exit 1\n  fi\n  shift\n  perl=$1\n  shift\nfi\n\nif [ $# -gt 0 -a \"$1\" = \"-w\" ] ; then\n  perlarg=\"-w\"\n  spc=\" \"\n  shift\nfi\n\nif [ $# -gt 0 -a \"$1\" = \"-utf8\" ] ; then\n  default_locale=\"C.utf8\"\n  prefix=\"\\\n  use utf8;\\\n  require Encode;\"\n  perlarg=\"$perlarg$spc-CSD\"\n  shift\nfi\n\nif [ $# -gt 0 ] ; then\n  case \"$1\" in\n  -locale=*)\n    default_locale=${1#-locale=}\n    ;;\n  -locale)\n    default_locale=${default_locale:-C}\n    ;;\n  *)\n    skip=1\n  esac\n  if [ -z \"$skip\" ] ; then\n    prefix=\"\\\n    use POSIX qw(locale_h);\\\n    use locale qw(:ctype);\\\n    \\\n    \\$default_locale = setlocale(LC_CTYPE, \\\"$default_locale\\\");\\\n    if (!defined(\\$default_locale))\\\n      { die \\\"perltest: Failed to set locale \\\\\\\"$default_locale\\\\\\\"\\\\\\n\\\"; }\\\n    print \\\"Locale: \\$default_locale\\\\\\n\\\";\\\n    $prefix\"\n    shift\n  fi\nfi\n\n\n# The Perl script that follows has a similar specification to pcre2test, and so\n# can be given identical input, except that input patterns can be followed only\n# by Perl's lower case modifiers and certain other pcre2test modifiers that are\n# either handled or ignored:\n#\n#   aftertext          interpreted as \"print $' afterwards\"\n#   afteralltext       ignored\n#   dupnames           ignored (Perl always allows)\n#   hex                preprocess pattern with embedded octets\n#   jitstack           ignored\n#   locale             use a specific locale tables\n#   mark               show mark information\n#   no_auto_possess    ignored\n#   no_start_optimize  insert (??{\"\"}) at pattern start (disables optimizing)\n#  -no_start_optimize  ignored\n#   subject_literal    does not process subjects for escapes\n#   ucp                sets Perl's /u modifier\n#   utf                invoke UTF-8 functionality\n#\n# Comment lines are ignored. The #pattern command can be used to set modifiers\n# that will be added to each subsequent pattern, after any modifiers it may\n# already have. NOTE: this is different to pcre2test where #pattern sets\n# defaults which can be overridden on individual patterns. The #subject command\n# may be used to set or unset a default \"mark\" modifier for data lines. This is\n# the only use of #subject that is supported. The #perltest, #forbid_utf,\n# #newline_default, and #if...#endif commands, which are needed in the relevant\n# pcre2test files, are ignored. Any other #-command is ignored, with a warning\n# message.\n#\n# The pattern lines should use only / as the delimiter. The other characters\n# that pcre2test supports cause problems with this script.\n#\n# The data lines must not have any pcre2test modifiers. Unless\n# \"subject_literal\" is on the pattern, data lines are processed as\n# Perl double-quoted strings, so if they contain \" $ or @ characters, these\n# have to be escaped. For this reason, all such characters in the\n# Perl-compatible testinput1 and testinput4 files are escaped so that they can\n# be used for perltest as well as for pcre2test. The output from this script\n# should be same as from pcre2test, apart from the initial identifying banner.\n#\n# The other testinput files are not suitable for feeding to perltest.sh,\n# because they make use of the special modifiers that pcre2test uses for\n# testing features of PCRE2. Some of these files also contain malformed regular\n# expressions, in order to check that PCRE2 diagnoses them correctly.\n\n(echo \"$prefix\" ; cat <<'PERLEND'\n\n# Avoid warnings for some of the experimental features that are being used.\n\nno warnings \"experimental::alpha_assertions\";\nno warnings \"experimental::script_run\";\nno warnings \"experimental::vlb\";\n\n# Function for turning a string into a string of printing chars.\n\nsub pchars {\nmy($t) = \"\";\nif ($utf8)\n  {\n  @p = unpack('U*', $_[0]);\n  foreach $c (@p)\n    {\n    if ($c >= 32 && $c < 127) { $t .= chr $c; }\n      else { $t .= sprintf(\"\\\\x{%02x}\", $c);\n      }\n    }\n  }\nelse\n  {\n  foreach $c (split(//, $_[0]))\n    {\n    if ($c =~ /^[[:print:]]$/) { $t .= $c; }\n      else { $t .= sprintf(\"\\\\x%02x\", ord $c); }\n    }\n  }\n$t;\n}\n\n\n# Read lines from a named file or stdin and write to a named file or stdout;\n# lines consist of a regular expression, in delimiters and optionally followed\n# by options, followed by a set of test data, terminated by an empty line.\n\n# Sort out the input and output files\n\nif (@ARGV > 0)\n  {\n  open(INFILE, \"<$ARGV[0]\") || die \"Failed to open $ARGV[0]\\n\";\n  $infile = \"INFILE\";\n  $interact = 0;\n  }\nelse\n  {\n  open(INFILE, \"</dev/tty\") || die \"Failed to open /dev/tty\\n\";\n  $infile = \"INFILE\";\n  $interact = 1;\n  }\n\nif (@ARGV > 1)\n  {\n  open(OUTFILE, \">$ARGV[1]\") || die \"Failed to open $ARGV[1]\\n\";\n  $outfile = \"OUTFILE\";\n  }\nelse { $outfile = \"STDOUT\"; }\n\nprintf($outfile \"Perl $^V\\n\");\n\n$extra_modifiers = \"\";\n$default_show_mark = 0;\n\n# Main loop\n\nNEXT_RE:\nfor (;;)\n  {\n  if (defined $locale && defined $default_locale)\n    {\n    setlocale(LC_CTYPE, $default_locale);\n    undef $locale;\n    }\n\n  printf \"  re> \" if $interact;\n  last if ! ($_ = <$infile>);\n  printf $outfile \"$_\" if ! $interact;\n  next if ($_ =~ /^\\s*$/ || $_ =~ /^#[\\s!]/);\n\n  # A few of pcre2test's #-commands are supported, or just ignored. Any others\n  # cause an error.\n\n  if ($_ =~ /^#pattern(.*)/)\n    {\n    $extra_modifiers = $1;\n    chomp($extra_modifiers);\n    $extra_modifiers =~ s/\\s+$//;\n    next;\n    }\n  elsif ($_ =~ /^#subject(.*)/)\n    {\n    $mod = $1;\n    chomp($mod);\n    $mod =~ s/\\s+$//;\n    if ($mod =~ s/(-?)mark,?//)\n      {\n      $minus = $1;\n      $default_show_mark = ($minus =~ /^$/);\n      }\n    if ($mod !~ /^\\s*$/)\n      {\n      printf $outfile \"** Warning: \\\"$mod\\\" in #subject ignored\\n\";\n      }\n    next;\n    }\n  elsif ($_ =~ /^#/)\n    {\n    if ($_ !~ /^#newline_default|^#perltest|^#forbid_utf|^#if|^#endif/)\n      {\n      printf $outfile \"** Warning: #-command ignored: %s\", $_;\n      }\n    next;\n    }\n\n  $pattern = $_;\n\n  while ($pattern !~ /^\\s*(.).*\\1/s)\n    {\n    printf \"    > \" if $interact;\n    last if ! ($_ = <$infile>);\n    printf $outfile \"$_\" if ! $interact;\n    $pattern .= $_;\n    }\n\n  chomp($pattern);\n  $pattern =~ s/\\s+$//;\n\n  # Split the pattern from the modifiers and adjust them as necessary.\n\n  $pattern =~ /^\\s*(.)(.*)\\1(.*)$/s;\n  $del = $1;\n  $pat = $2;\n  $mod = \"$3,$extra_modifiers\";\n  $mod =~ s/^,\\s*//;\n\n  # The private \"aftertext\" modifier means \"print $' afterwards\".\n\n  $showrest = ($mod =~ s/aftertext,?//);\n\n  # The \"subject_literal\" modifier disables escapes in subjects.\n\n  $subject_literal = ($mod =~ s/subject_literal,?//);\n\n  # \"allaftertext\" is used by pcre2test to print remainders after captures\n\n  $mod =~ s/allaftertext,?//;\n\n  # Remove \"dupnames\".\n\n  $mod =~ s/dupnames,?//;\n\n  # Remove \"jitstack\".\n\n  $mod =~ s/jitstack=\\d+,?//;\n\n  # The \"locale\" modifier indicates which locale to use\n  if ($mod =~ /locale=([^,]+),?/)\n    {\n    die \"perltest: missing -locale cmdline flag\" unless defined &setlocale;\n    $locale = setlocale(LC_CTYPE, $1);\n    if (!defined $locale)\n      {\n      print \"** Failed to set locale '$1'\\n\";\n      next NEXT_RE;\n      }\n    }\n  $mod =~ s/locale=[^,]*,?//;                # Remove it; \"locale=\" Ignored\n\n  # The \"mark\" modifier requests checking of MARK data */\n\n  $show_mark = $default_show_mark | ($mod =~ s/mark,?//);\n\n  # \"ucp\" asks pcre2test to set PCRE2_UCP; change this to /u for Perl\n\n  $mod =~ s/ucp,?/u/;\n\n  # Detect utf\n\n  $utf8 = $mod =~ s/utf,?//;\n\n  # Remove \"no_auto_possess\".\n\n  $mod =~ s/no_auto_possess,?//;\n\n  # The \"hex\" modifier instructs us to preprocess a pattern with embedded\n  # octets formatted as two digit hexadecimals\n\n  if ($mod =~ s/hex,?//)\n    {\n    my $t = \"\";\n\n    # find either 2 digit hex octets, optionally surrounded by spaces, to\n    # add as code points or quoted strings that will be copied verbatim\n\n    while ($pat =~ /\\s*(?:(\\p{ahex}{2})|(['\"])([^\\2]+?)\\2)\\s*/g)\n      {\n      if (defined $1)\n        {\n        no utf8;\n        $t .= chr(hex($1));\n        use if $utf8, \"utf8\";\n        }\n      else\n        {\n        $t .= $3;\n        }\n      }\n    no utf8;\n    utf8::decode($t) if $utf8;\n    use if $utf8, \"utf8\";\n    $pat = $t;\n    }\n\n  # Use no_start_optimize (disable PCRE2 start-up optimization) to disable Perl\n  # optimization by inserting (??{\"\"}) at the start of the pattern. We may\n  # also encounter -no_start_optimize from a #pattern setting.\n\n  $mod =~ s/-no_start_optimize,?//;\n\n  if ($mod =~ s/no_start_optimize,?//) { $pat = '(??{\"\"})' . $pat; }\n\n  # Add back retained modifiers and check that the pattern is valid.\n\n  $mod =~ s/,//g;\n  $pattern = \"$del$pat$del$mod\";\n\n  eval \"\\$_ =~ ${pattern}\";\n  if ($@)\n    {\n    printf $outfile \"Error: $@\";\n    if (! $interact)\n      {\n      for (;;)\n        {\n        last if ! ($_ = <$infile>);\n        last if $_ =~ /^\\s*$/;\n        }\n      }\n    next NEXT_RE;\n    }\n\n  # If the /g modifier is present, we want to put a loop round the matching;\n  # otherwise just a single \"if\".\n\n  $cmd = ($pattern =~ /g[a-z]*\\s*$/)? \"while\" : \"if\";\n\n  # If the pattern is actually the null string, Perl uses the most recently\n  # executed (and successfully compiled) regex is used instead. This is a\n  # nasty trap for the unwary! The PCRE2 test suite does contain null strings\n  # in places - if they are allowed through here all sorts of weird and\n  # unexpected effects happen. To avoid this, we replace such patterns with\n  # a non-null pattern that has the same effect.\n\n  $pattern = \"/(?#)/$2\" if ($pattern =~ /^(.)\\1(.*)$/);\n\n  # Read data lines and test them\n\n  for (;;)\n    {\n    printf \"data> \" if $interact;\n    last NEXT_RE if ! ($_ = <$infile>);\n    chomp;\n    printf $outfile \"%s\", \"$_\\n\" if ! $interact;\n\n    s/\\s+$//;  # Remove trailing space\n    s/^\\s+//;  # Remove leading space\n\n    last if ($_ eq \"\");\n    next if $_ =~ /^\\\\=(?:\\s|$)/;   # Comment line\n\n    if ($subject_literal)\n      {\n      $x = $_;\n      }\n    else\n      {\n      s/(?<!\\\\)\\\\$//;     # Remove pcre2test specific trailing backslash\n      $x = eval \"\\\"$_\\\"\"; # To get escapes processed\n      if ($interact && $@)\n        {\n        print STDERR \"$@\";\n        redo;\n        }\n      }\n\n    # Empty array for holding results, ensure $REGERROR and $REGMARK are\n    # unset, then do the matching.\n\n    @subs = ();\n\n    $pushes = \"push \\@subs,\\$&;\" .\n         \"push \\@subs,\\$1;\" .\n         \"push \\@subs,\\$2;\" .\n         \"push \\@subs,\\$3;\" .\n         \"push \\@subs,\\$4;\" .\n         \"push \\@subs,\\$5;\" .\n         \"push \\@subs,\\$6;\" .\n         \"push \\@subs,\\$7;\" .\n         \"push \\@subs,\\$8;\" .\n         \"push \\@subs,\\$9;\" .\n         \"push \\@subs,\\$10;\" .\n         \"push \\@subs,\\$11;\" .\n         \"push \\@subs,\\$12;\" .\n         \"push \\@subs,\\$13;\" .\n         \"push \\@subs,\\$14;\" .\n         \"push \\@subs,\\$15;\" .\n         \"push \\@subs,\\$16;\" .\n         \"push \\@subs,\\$'; }\";\n\n    undef $REGERROR;\n    undef $REGMARK;\n\n    eval \"${cmd} (\\$x =~ ${pattern}) {\" . $pushes;\n\n    if ($@)\n      {\n      printf $outfile \"Error: $@\";\n      next NEXT_RE;\n      }\n    elsif (scalar(@subs) == 0)\n      {\n      printf $outfile \"No match\";\n      if ($show_mark && defined $REGERROR && $REGERROR != 1)\n        { printf $outfile (\", mark = %s\", &pchars($REGERROR)); }\n      printf $outfile \"\\n\";\n      }\n    else\n      {\n      while (scalar(@subs) != 0)\n        {\n        printf $outfile (\" 0: %s\\n\", &pchars($subs[0]));\n        printf $outfile (\" 0+ %s\\n\", &pchars($subs[17])) if $showrest;\n        $last_printed = 0;\n        for ($i = 1; $i <= 16; $i++)\n          {\n          if (defined $subs[$i])\n            {\n            while ($last_printed++ < $i-1)\n              { printf $outfile (\"%2d: <unset>\\n\", $last_printed); }\n            printf $outfile (\"%2d: %s\\n\", $i, &pchars($subs[$i]));\n            $last_printed = $i;\n            }\n          }\n        splice(@subs, 0, 18);\n        }\n\n      # It seems that $REGMARK is not marked as UTF-8 even when use utf8 is\n      # set and the input pattern was a UTF-8 string. We can, however, force\n      # it to be so marked.\n\n      if ($show_mark && defined $REGMARK && $REGMARK != 1)\n        {\n        $xx = $REGMARK;\n        $xx = Encode::decode_utf8($xx) if $utf8;\n        printf $outfile (\"MK: %s\\n\", &pchars($xx));\n        }\n      }\n    }\n  }\n\n# By closing OUTFILE explicitly, we avoid a Perl warning in -w mode\n# \"main::OUTFILE\" used only once\".\n\nclose(OUTFILE) if $outfile eq \"OUTFILE\";\n\nPERLEND\n) | $perl $perlarg - $@\n\n# End\n"
  },
  {
    "path": "src/config-cmake.h.in",
    "content": "/* config.h for CMake builds */\n\n#cmakedefine HAVE_ASSERT_H 1\n#cmakedefine HAVE_BUILTIN_ASSUME 1\n#cmakedefine HAVE_BUILTIN_MUL_OVERFLOW 1\n#cmakedefine HAVE_BUILTIN_UNREACHABLE 1\n#cmakedefine HAVE_ATTRIBUTE_UNINITIALIZED 1\n#cmakedefine HAVE_DIRENT_H 1\n#cmakedefine HAVE_SYS_STAT_H 1\n#cmakedefine HAVE_SYS_TYPES_H 1\n#cmakedefine HAVE_UNISTD_H 1\n#cmakedefine HAVE_WINDOWS_H 1\n\n#cmakedefine HAVE_MEMFD_CREATE 1\n#cmakedefine HAVE_SECURE_GETENV 1\n#cmakedefine HAVE_SETRLIMIT 1\n\n#cmakedefine SUPPORT_PCRE2_8 1\n#cmakedefine SUPPORT_PCRE2_16 1\n#cmakedefine SUPPORT_PCRE2_32 1\n#cmakedefine DISABLE_PERCENT_ZT 1\n\n#cmakedefine SUPPORT_LIBBZ2 1\n#cmakedefine SUPPORT_LIBEDIT 1\n#cmakedefine SUPPORT_LIBREADLINE 1\n#cmakedefine SUPPORT_LIBZ 1\n\n#cmakedefine SUPPORT_JIT 1\n#cmakedefine SLJIT_PROT_EXECUTABLE_ALLOCATOR 1\n#cmakedefine SUPPORT_PCRE2GREP_JIT 1\n#cmakedefine SUPPORT_PCRE2GREP_CALLOUT 1\n#cmakedefine SUPPORT_PCRE2GREP_CALLOUT_FORK 1\n#cmakedefine SUPPORT_UNICODE 1\n#cmakedefine SUPPORT_VALGRIND 1\n\n#cmakedefine BSR_ANYCRLF 1\n#cmakedefine EBCDIC 1\n#cmakedefine EBCDIC_NL25 1\n#cmakedefine EBCDIC_IGNORING_COMPILER 1\n#cmakedefine NEVER_BACKSLASH_C 1\n\n#define PCRE2_EXPORT            @PCRE2_EXPORT@\n#define LINK_SIZE               @PCRE2_LINK_SIZE@\n#define HEAP_LIMIT              @PCRE2_HEAP_LIMIT@\n#define MATCH_LIMIT             @PCRE2_MATCH_LIMIT@\n#define MATCH_LIMIT_DEPTH       @PCRE2_MATCH_LIMIT_DEPTH@\n#define MAX_VARLOOKBEHIND       @PCRE2_MAX_VARLOOKBEHIND@\n#define NEWLINE_DEFAULT         @NEWLINE_DEFAULT@\n#define PARENS_NEST_LIMIT       @PCRE2_PARENS_NEST_LIMIT@\n#define PCRE2GREP_BUFSIZE       @PCRE2GREP_BUFSIZE@\n#define PCRE2GREP_MAX_BUFSIZE   @PCRE2GREP_MAX_BUFSIZE@\n\n#define MAX_NAME_SIZE           128\n#define MAX_NAME_COUNT          10000\n\n/* end config.h for CMake builds */\n"
  },
  {
    "path": "src/config.h.generic",
    "content": "/* src/config.h.  Generated from config.h.in by configure.  */\n/* src/config.h.in.  Generated from configure.ac by autoheader.  */\n\n/* PCRE2 is written in Standard C, but there are a few non-standard things it\ncan cope with, allowing it to run on SunOS4 and other \"close to standard\"\nsystems.\n\nIn environments that support the GNU autotools, config.h.in is converted into\nconfig.h by the \"configure\" script. In environments that use CMake,\nconfig-cmake.in is converted into config.h. If you are going to build PCRE2 \"by\nhand\" without using \"configure\" or CMake, you should copy the distributed\nconfig.h.generic to config.h, and edit the macro definitions to be the way you\nneed them. You must then add -DHAVE_CONFIG_H to all of your compile commands,\nso that config.h is included at the start of every source.\n\nAlternatively, you can avoid editing by using -D on the compiler command line\nto set the macro values. In this case, you do not have to set -DHAVE_CONFIG_H,\nbut if you do, default values will be taken from config.h for non-boolean\nmacros that are not defined on the command line.\n\nBoolean macros such as HAVE_STDLIB_H and SUPPORT_PCRE2_8 should either be\ndefined (conventionally to 1) for TRUE, and not defined at all for FALSE. All\nsuch macros are listed as a commented #undef in config.h.generic. Macros such\nas MATCH_LIMIT, whose actual value is relevant, have defaults defined, but are\nsurrounded by #ifndef/#endif lines so that the value can be overridden by -D. */\n\n/* By default, the \\R escape sequence matches any Unicode line ending\n   character or sequence of characters. If BSR_ANYCRLF is defined (to any\n   value), this is changed so that backslash-R matches only CR, LF, or CRLF.\n   The build-time default can be overridden by the user of PCRE2 at runtime.\n   */\n/* #undef BSR_ANYCRLF */\n\n/* Define to any value to disable the use of the z and t modifiers in\n   formatting settings such as %zu or %td (this is rarely needed). */\n/* #undef DISABLE_PERCENT_ZT */\n\n/* If you are compiling for a system that uses EBCDIC instead of ASCII\n   character codes, define this macro to any value. When EBCDIC is set, PCRE2\n   assumes that all input strings are in EBCDIC. If you do not define this\n   macro, PCRE2 will assume input strings are ASCII or UTF-8/16/32 Unicode. It\n   is not possible to build a version of PCRE2 that supports both EBCDIC and\n   ASCII or UTF-8/16/32. */\n/* #undef EBCDIC */\n\n/* To force an EBCDIC environment, define this macro to make the core PCRE2\n   library functions use EBCDIC codepage 1047, regardless of whether the\n   compiler supports it using C character literals. */\n/* #undef EBCDIC_IGNORING_COMPILER */\n\n/* In an EBCDIC environment, define this macro to any value to arrange for the\n   NL character to be 0x25 instead of the default 0x15. NL plays the role that\n   LF does in an ASCII/Unicode environment. */\n/* #undef EBCDIC_NL25 */\n\n/* Define to 1 if you have the <assert.h> header file. */\n/* #undef HAVE_ASSERT_H */\n\n/* Define this if your compiler supports __attribute__((uninitialized)) */\n/* #undef HAVE_ATTRIBUTE_UNINITIALIZED */\n\n/* Define this if your compiler provides __assume() */\n/* #undef HAVE_BUILTIN_ASSUME */\n\n/* Define this if your compiler provides __builtin_mul_overflow() */\n/* #undef HAVE_BUILTIN_MUL_OVERFLOW */\n\n/* Define this if your compiler provides __builtin_unreachable() */\n/* #undef HAVE_BUILTIN_UNREACHABLE */\n\n/* Define to 1 if you have the <bzlib.h> header file. */\n/* #undef HAVE_BZLIB_H */\n\n/* Define to 1 if you have the <dirent.h> header file. */\n/* #undef HAVE_DIRENT_H */\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n/* #undef HAVE_DLFCN_H */\n\n/* Define to 1 if you have the <editline/readline.h> header file. */\n/* #undef HAVE_EDITLINE_READLINE_H */\n\n/* Define to 1 if you have the <edit/readline/readline.h> header file. */\n/* #undef HAVE_EDIT_READLINE_READLINE_H */\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n/* #undef HAVE_INTTYPES_H */\n\n/* Define to 1 if you have the <limits.h> header file. */\n/* #undef HAVE_LIMITS_H */\n\n/* Define to 1 if you have the `memfd_create' function. */\n/* #undef HAVE_MEMFD_CREATE */\n\n/* Define to 1 if you have the <minix/config.h> header file. */\n/* #undef HAVE_MINIX_CONFIG_H */\n\n/* Define to 1 if you have the `mkostemp' function. */\n/* #undef HAVE_MKOSTEMP */\n\n/* Define if you have POSIX threads libraries and header files. */\n/* #undef HAVE_PTHREAD */\n\n/* Have PTHREAD_PRIO_INHERIT. */\n/* #undef HAVE_PTHREAD_PRIO_INHERIT */\n\n/* Define to 1 if you have the <readline.h> header file. */\n/* #undef HAVE_READLINE_H */\n\n/* Define to 1 if you have the <readline/history.h> header file. */\n/* #undef HAVE_READLINE_HISTORY_H */\n\n/* Define to 1 if you have the <readline/readline.h> header file. */\n/* #undef HAVE_READLINE_READLINE_H */\n\n/* Define to 1 if you have the `realpath' function. */\n/* #undef HAVE_REALPATH */\n\n/* Define to 1 if you have the `secure_getenv' function. */\n/* #undef HAVE_SECURE_GETENV */\n\n/* Define to 1 if you have the `setrlimit' function. */\n/* #undef HAVE_SETRLIMIT */\n\n/* Define to 1 if you have the <stdint.h> header file. */\n/* #undef HAVE_STDINT_H */\n\n/* Define to 1 if you have the <stdio.h> header file. */\n/* #undef HAVE_STDIO_H */\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n/* #undef HAVE_STDLIB_H */\n\n/* Define to 1 if you have the <strings.h> header file. */\n/* #undef HAVE_STRINGS_H */\n\n/* Define to 1 if you have the <string.h> header file. */\n/* #undef HAVE_STRING_H */\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n/* #undef HAVE_SYS_STAT_H */\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n/* #undef HAVE_SYS_TYPES_H */\n\n/* Define to 1 if you have the <sys/wait.h> header file. */\n/* #undef HAVE_SYS_WAIT_H */\n\n/* Define to 1 if you have the <unistd.h> header file. */\n/* #undef HAVE_UNISTD_H */\n\n/* Define to 1 if the compiler supports GCC compatible visibility\n   declarations. */\n/* #undef HAVE_VISIBILITY */\n\n/* Define to 1 if you have the <wchar.h> header file. */\n/* #undef HAVE_WCHAR_H */\n\n/* Define to 1 if you have the <windows.h> header file. */\n/* #undef HAVE_WINDOWS_H */\n\n/* Define to 1 if you have the <zlib.h> header file. */\n/* #undef HAVE_ZLIB_H */\n\n/* This limits the amount of memory that may be used while matching a pattern.\n   It applies to both pcre2_match() and pcre2_dfa_match(). It does not apply\n   to JIT matching. The value is in kibibytes (units of 1024 bytes). */\n#ifndef HEAP_LIMIT\n#define HEAP_LIMIT 20000000\n#endif\n\n/* The value of LINK_SIZE determines the number of bytes used to store links\n   as offsets within the compiled regex. The default is 2, which allows for\n   compiled patterns up to 65535 code units long. This covers the vast\n   majority of cases. However, PCRE2 can also be compiled to use 3 or 4 bytes\n   instead. This allows for longer patterns in extreme cases. */\n#ifndef LINK_SIZE\n#define LINK_SIZE 2\n#endif\n\n/* Define to the sub-directory where libtool stores uninstalled libraries. */\n/* This is ignored unless you are using libtool. */\n#ifndef LT_OBJDIR\n#define LT_OBJDIR \".libs/\"\n#endif\n\n/* The value of MATCH_LIMIT determines the default number of times the\n   pcre2_match() function can record a backtrack position during a single\n   matching attempt. The value is also used to limit a loop counter in\n   pcre2_dfa_match(). There is a runtime interface for setting a different\n   limit. The limit exists in order to catch runaway regular expressions that\n   take forever to determine that they do not match. The default is set very\n   large so that it does not accidentally catch legitimate cases. */\n#ifndef MATCH_LIMIT\n#define MATCH_LIMIT 10000000\n#endif\n\n/* The above limit applies to all backtracks, whether or not they are nested.\n   In some environments it is desirable to limit the nesting of backtracking\n   (that is, the depth of tree that is searched) more strictly, in order to\n   restrict the maximum amount of heap memory that is used. The value of\n   MATCH_LIMIT_DEPTH provides this facility. To have any useful effect, it\n   must be less than the value of MATCH_LIMIT. The default is to use the same\n   value as MATCH_LIMIT. There is a runtime method for setting a different\n   limit. In the case of pcre2_dfa_match(), this limit controls the depth of\n   the internal nested function calls that are used for pattern recursions,\n   lookarounds, and atomic groups. */\n#ifndef MATCH_LIMIT_DEPTH\n#define MATCH_LIMIT_DEPTH MATCH_LIMIT\n#endif\n\n/* This limit is parameterized just in case anybody ever wants to change it.\n   Care must be taken if it is increased, because it guards against integer\n   overflow caused by enormously large patterns. */\n#ifndef MAX_NAME_COUNT\n#define MAX_NAME_COUNT 10000\n#endif\n\n/* This limit is parameterized just in case anybody ever wants to change it.\n   Care must be taken if it is increased, because it guards against integer\n   overflow caused by enormously large patterns. */\n#ifndef MAX_NAME_SIZE\n#define MAX_NAME_SIZE 128\n#endif\n\n/* The value of MAX_VARLOOKBEHIND specifies the default maximum length, in\n   characters, for a variable-length lookbehind assertion. */\n#ifndef MAX_VARLOOKBEHIND\n#define MAX_VARLOOKBEHIND 255\n#endif\n\n/* Defining NEVER_BACKSLASH_C locks out the use of \\C in all patterns. */\n/* #undef NEVER_BACKSLASH_C */\n\n/* The value of NEWLINE_DEFAULT determines the default newline character\n   sequence. PCRE2 client programs can override this by selecting other values\n   at run time. The valid values are 1 (CR), 2 (LF), 3 (CRLF), 4 (ANY), 5\n   (ANYCRLF), and 6 (NUL). */\n#ifndef NEWLINE_DEFAULT\n#define NEWLINE_DEFAULT 2\n#endif\n\n/* Name of package */\n#define PACKAGE \"pcre2\"\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"PCRE2\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"PCRE2 10.48-DEV\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"pcre2\"\n\n/* Define to the home page for this package. */\n#define PACKAGE_URL \"\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"10.48-DEV\"\n\n/* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested\n   parentheses (of any kind) in a pattern. This limits the amount of system\n   stack that is used while compiling a pattern. */\n#ifndef PARENS_NEST_LIMIT\n#define PARENS_NEST_LIMIT 250\n#endif\n\n/* The value of PCRE2GREP_BUFSIZE is the starting size of the buffer used by\n   pcre2grep to hold parts of the file it is searching. The buffer will be\n   expanded up to PCRE2GREP_MAX_BUFSIZE if necessary, for files containing\n   very long lines. The actual amount of memory used by pcre2grep is three\n   times this number, because it allows for the buffering of \"before\" and\n   \"after\" lines. */\n#ifndef PCRE2GREP_BUFSIZE\n#define PCRE2GREP_BUFSIZE 20480\n#endif\n\n/* The value of PCRE2GREP_MAX_BUFSIZE specifies the maximum size of the buffer\n   used by pcre2grep to hold parts of the file it is searching. The actual\n   amount of memory used by pcre2grep is three times this number, because it\n   allows for the buffering of \"before\" and \"after\" lines. */\n#ifndef PCRE2GREP_MAX_BUFSIZE\n#define PCRE2GREP_MAX_BUFSIZE 1048576\n#endif\n\n/* See PCRE2_EXP_DEFN; but this is applied to functions in the libpcre2-posix\n   library. */\n/* #undef PCRE2POSIX_EXP_DEFN */\n\n/* Define to any value if linking libpcre2-posix dynamically. Ideally, if both\n   static and shared libraries are being built, then PCRE2POSIX_SHARED would\n   be defined only for the shared build. Indeed, this is a requirement on\n   Windows. However, when building with Autoconf and libtool, we compile the\n   sources once only to create both the static and shared library, so in this\n   case, PCRE2POSIX_SHARED should only be defined if the shared library is\n   being built, regardless of whether or not the static library is also being\n   built. */\n/* #undef PCRE2POSIX_SHARED */\n\n/* Define to any value to include debugging code. */\n/* #undef PCRE2_DEBUG */\n\n/* Define to the annotation for making a symbol visible. */\n#define PCRE2_EXPORT\n\n/* If you are compiling for a system other than a Unix-like system or\n   Win32, and it needs some magic to be inserted before the definition\n   of a function that is exported by the library, define this macro to\n   contain the relevant magic. If you do not define this macro, a suitable\n   __declspec value is used for Windows systems; in other environments\n   a compiler relevant \"extern\" is used with any \"visibility\" related\n   attributes from PCRE2_EXPORT included.\n   This macro apears at the start of every exported function that is part\n   of the external API. It does not appear on functions that are \"external\"\n   in the C sense, but which are internal to the library. */\n/* #undef PCRE2_EXP_DEFN */\n\n/* Define to any value if linking statically. Ideally, if both static and\n   shared libraries are being built, then PCRE2_STATIC would be defined only\n   for the static build. Indeed, this is a requirement on Windows. With\n   Autoconf and libtool however, it is idiomatic to compile the sources once\n   to create both the static and shared library, so in this case, PCRE2_STATIC\n   should only be defined if no shared library is being built. */\n/* #undef PCRE2_STATIC */\n\n/* Define to necessary symbol if this constant uses a non-standard name on\n   your system. */\n/* #undef PTHREAD_CREATE_JOINABLE */\n\n/* Define to any non-zero number to enable support for SELinux compatible\n   executable memory allocator in JIT. Note that this will have no effect\n   unless SUPPORT_JIT is also defined. */\n/* #undef SLJIT_PROT_EXECUTABLE_ALLOCATOR */\n\n/* Define to 1 if all of the C90 standard headers exist (not just the ones\n   required in a freestanding environment). This macro is provided for\n   backward compatibility; new code need not use it. */\n/* #undef STDC_HEADERS */\n\n/* Define to any value to enable differential fuzzing support. */\n/* #undef SUPPORT_DIFF_FUZZ */\n\n/* Define to any value to enable support for Just-In-Time compiling. */\n/* #undef SUPPORT_JIT */\n\n/* Define to any value to allow pcre2grep to be linked with libbz2, so that it\n   is able to handle .bz2 files. */\n/* #undef SUPPORT_LIBBZ2 */\n\n/* Define to any value to allow pcre2test to be linked with libedit. */\n/* #undef SUPPORT_LIBEDIT */\n\n/* Define to any value to allow pcre2test to be linked with libreadline. */\n/* #undef SUPPORT_LIBREADLINE */\n\n/* Define to any value to allow pcre2grep to be linked with libz, so that it\n   is able to handle .gz files. */\n/* #undef SUPPORT_LIBZ */\n\n/* Define to any value to enable callout script support in pcre2grep. */\n/* #undef SUPPORT_PCRE2GREP_CALLOUT */\n\n/* Define to any value to enable fork support in pcre2grep callout scripts.\n   This will have no effect unless SUPPORT_PCRE2GREP_CALLOUT is also defined.\n   */\n/* #undef SUPPORT_PCRE2GREP_CALLOUT_FORK */\n\n/* Define to any value to enable JIT support in pcre2grep. Note that this will\n   have no effect unless SUPPORT_JIT is also defined. */\n/* #undef SUPPORT_PCRE2GREP_JIT */\n\n/* Define to any value to enable the 16 bit PCRE2 library. */\n/* #undef SUPPORT_PCRE2_16 */\n\n/* Define to any value to enable the 32 bit PCRE2 library. */\n/* #undef SUPPORT_PCRE2_32 */\n\n/* Define to any value to enable the 8 bit PCRE2 library. */\n/* #undef SUPPORT_PCRE2_8 */\n\n/* Define to any value to enable support for Unicode and UTF encoding. This\n   will work even in an EBCDIC environment, but it is incompatible with the\n   EBCDIC macro. That is, PCRE2 can support *either* EBCDIC code *or*\n   ASCII/Unicode, but not both at once. */\n/* #undef SUPPORT_UNICODE */\n\n/* Define to any value for valgrind support to find invalid memory reads. */\n/* #undef SUPPORT_VALGRIND */\n\n/* Enable extensions on AIX 3, Interix.  */\n#ifndef _ALL_SOURCE\n# define _ALL_SOURCE 1\n#endif\n/* Enable general extensions on macOS.  */\n#ifndef _DARWIN_C_SOURCE\n# define _DARWIN_C_SOURCE 1\n#endif\n/* Enable general extensions on Solaris.  */\n#ifndef __EXTENSIONS__\n# define __EXTENSIONS__ 1\n#endif\n/* Enable GNU extensions on systems that have them.  */\n#ifndef _GNU_SOURCE\n# define _GNU_SOURCE 1\n#endif\n/* Enable X/Open compliant socket functions that do not require linking\n   with -lxnet on HP-UX 11.11.  */\n#ifndef _HPUX_ALT_XOPEN_SOCKET_API\n# define _HPUX_ALT_XOPEN_SOCKET_API 1\n#endif\n/* Identify the host operating system as Minix.\n   This macro does not affect the system headers' behavior.\n   A future release of Autoconf may stop defining this macro.  */\n#ifndef _MINIX\n/* # undef _MINIX */\n#endif\n/* Enable general extensions on NetBSD.\n   Enable NetBSD compatibility extensions on Minix.  */\n#ifndef _NETBSD_SOURCE\n# define _NETBSD_SOURCE 1\n#endif\n/* Enable OpenBSD compatibility extensions on NetBSD.\n   Oddly enough, this does nothing on OpenBSD.  */\n#ifndef _OPENBSD_SOURCE\n# define _OPENBSD_SOURCE 1\n#endif\n/* Define to 1 if needed for POSIX-compatible behavior.  */\n#ifndef _POSIX_SOURCE\n/* # undef _POSIX_SOURCE */\n#endif\n/* Define to 2 if needed for POSIX-compatible behavior.  */\n#ifndef _POSIX_1_SOURCE\n/* # undef _POSIX_1_SOURCE */\n#endif\n/* Enable POSIX-compatible threading on Solaris.  */\n#ifndef _POSIX_PTHREAD_SEMANTICS\n# define _POSIX_PTHREAD_SEMANTICS 1\n#endif\n/* Enable extensions specified by ISO/IEC TS 18661-5:2014.  */\n#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__\n# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1\n#endif\n/* Enable extensions specified by ISO/IEC TS 18661-1:2014.  */\n#ifndef __STDC_WANT_IEC_60559_BFP_EXT__\n# define __STDC_WANT_IEC_60559_BFP_EXT__ 1\n#endif\n/* Enable extensions specified by ISO/IEC TS 18661-2:2015.  */\n#ifndef __STDC_WANT_IEC_60559_DFP_EXT__\n# define __STDC_WANT_IEC_60559_DFP_EXT__ 1\n#endif\n/* Enable extensions specified by ISO/IEC TS 18661-4:2015.  */\n#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__\n# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1\n#endif\n/* Enable extensions specified by ISO/IEC TS 18661-3:2015.  */\n#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__\n# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1\n#endif\n/* Enable extensions specified by ISO/IEC TR 24731-2:2010.  */\n#ifndef __STDC_WANT_LIB_EXT2__\n# define __STDC_WANT_LIB_EXT2__ 1\n#endif\n/* Enable extensions specified by ISO/IEC 24747:2009.  */\n#ifndef __STDC_WANT_MATH_SPEC_FUNCS__\n# define __STDC_WANT_MATH_SPEC_FUNCS__ 1\n#endif\n/* Enable extensions on HP NonStop.  */\n#ifndef _TANDEM_SOURCE\n# define _TANDEM_SOURCE 1\n#endif\n/* Enable X/Open extensions.  Define to 500 only if necessary\n   to make mbstate_t available.  */\n#ifndef _XOPEN_SOURCE\n/* # undef _XOPEN_SOURCE */\n#endif\n\n/* Version number of package */\n#define VERSION \"10.48-DEV\"\n\n/* Number of bits in a file offset, on hosts where this is settable. */\n/* #undef _FILE_OFFSET_BITS */\n\n/* Define for large files, on AIX-style hosts. */\n/* #undef _LARGE_FILES */\n\n/* Define to empty if `const' does not conform to ANSI C. */\n/* #undef const */\n\n/* Define to the type of a signed integer type of width exactly 64 bits if\n   such a type exists and the standard includes do not define it. */\n/* #undef int64_t */\n\n/* Define to `unsigned int' if <sys/types.h> does not define. */\n/* #undef size_t */\n"
  },
  {
    "path": "src/libpcre2-16.sym.in",
    "content": "# First version of PCRE2 in which symbols were assigned versions.\nPCRE2_10.47 {\n  global:\n    pcre2_callout_enumerate_16;\n    pcre2_code_copy_16;\n    pcre2_code_copy_with_tables_16;\n    pcre2_code_free_16;\n    pcre2_compile_16;\n    pcre2_compile_context_copy_16;\n    pcre2_compile_context_create_16;\n    pcre2_compile_context_free_16;\n    pcre2_config_16;\n    pcre2_convert_context_copy_16;\n    pcre2_convert_context_create_16;\n    pcre2_convert_context_free_16;\n    pcre2_converted_pattern_free_16;\n    pcre2_dfa_match_16;\n    pcre2_general_context_copy_16;\n    pcre2_general_context_create_16;\n    pcre2_general_context_free_16;\n    pcre2_get_error_message_16;\n    pcre2_get_mark_16;\n    pcre2_get_match_data_heapframes_size_16;\n    pcre2_get_match_data_size_16;\n    pcre2_get_ovector_count_16;\n    pcre2_get_ovector_pointer_16;\n    pcre2_get_startchar_16;\n    pcre2_jit_compile_16;\n    pcre2_jit_free_unused_memory_16;\n    pcre2_jit_match_16;\n    pcre2_jit_stack_assign_16;\n    pcre2_jit_stack_create_16;\n    pcre2_jit_stack_free_16;\n    pcre2_maketables_16;\n    pcre2_maketables_free_16;\n    pcre2_match_16;\n    pcre2_match_context_copy_16;\n    pcre2_match_context_create_16;\n    pcre2_match_context_free_16;\n    pcre2_match_data_create_16;\n    pcre2_match_data_create_from_pattern_16;\n    pcre2_match_data_free_16;\n    pcre2_next_match_16;\n    pcre2_pattern_convert_16;\n    pcre2_pattern_info_16;\n    pcre2_serialize_decode_16;\n    pcre2_serialize_encode_16;\n    pcre2_serialize_free_16;\n    pcre2_serialize_get_number_of_codes_16;\n    pcre2_set_bsr_16;\n    pcre2_set_callout_16;\n    pcre2_set_character_tables_16;\n    pcre2_set_compile_extra_options_16;\n    pcre2_set_compile_recursion_guard_16;\n    pcre2_set_depth_limit_16;\n    pcre2_set_glob_escape_16;\n    pcre2_set_glob_separator_16;\n    pcre2_set_heap_limit_16;\n    pcre2_set_match_limit_16;\n    pcre2_set_max_pattern_compiled_length_16;\n    pcre2_set_max_pattern_length_16;\n    pcre2_set_max_varlookbehind_16;\n    pcre2_set_newline_16;\n    pcre2_set_offset_limit_16;\n    pcre2_set_optimize_16;\n    pcre2_set_parens_nest_limit_16;\n    pcre2_set_recursion_limit_16;\n    pcre2_set_recursion_memory_management_16;\n    pcre2_set_substitute_callout_16;\n    pcre2_set_substitute_case_callout_16;\n    pcre2_substitute_16;\n    pcre2_substring_copy_byname_16;\n    pcre2_substring_copy_bynumber_16;\n    pcre2_substring_free_16;\n    pcre2_substring_get_byname_16;\n    pcre2_substring_get_bynumber_16;\n    pcre2_substring_length_byname_16;\n    pcre2_substring_length_bynumber_16;\n    pcre2_substring_list_free_16;\n    pcre2_substring_list_get_16;\n    pcre2_substring_nametable_scan_16;\n    pcre2_substring_number_from_name_16;\n\n@PCRE2_EXTRA_LOCAL_SYMS@\n};\n\n# PCRE2_10.48 {} PCRE2_10.47;\n"
  },
  {
    "path": "src/libpcre2-32.sym.in",
    "content": "# First version of PCRE2 in which symbols were assigned versions.\nPCRE2_10.47 {\n  global:\n    pcre2_callout_enumerate_32;\n    pcre2_code_copy_32;\n    pcre2_code_copy_with_tables_32;\n    pcre2_code_free_32;\n    pcre2_compile_32;\n    pcre2_compile_context_copy_32;\n    pcre2_compile_context_create_32;\n    pcre2_compile_context_free_32;\n    pcre2_config_32;\n    pcre2_convert_context_copy_32;\n    pcre2_convert_context_create_32;\n    pcre2_convert_context_free_32;\n    pcre2_converted_pattern_free_32;\n    pcre2_dfa_match_32;\n    pcre2_general_context_copy_32;\n    pcre2_general_context_create_32;\n    pcre2_general_context_free_32;\n    pcre2_get_error_message_32;\n    pcre2_get_mark_32;\n    pcre2_get_match_data_heapframes_size_32;\n    pcre2_get_match_data_size_32;\n    pcre2_get_ovector_count_32;\n    pcre2_get_ovector_pointer_32;\n    pcre2_get_startchar_32;\n    pcre2_jit_compile_32;\n    pcre2_jit_free_unused_memory_32;\n    pcre2_jit_match_32;\n    pcre2_jit_stack_assign_32;\n    pcre2_jit_stack_create_32;\n    pcre2_jit_stack_free_32;\n    pcre2_maketables_32;\n    pcre2_maketables_free_32;\n    pcre2_match_32;\n    pcre2_match_context_copy_32;\n    pcre2_match_context_create_32;\n    pcre2_match_context_free_32;\n    pcre2_match_data_create_32;\n    pcre2_match_data_create_from_pattern_32;\n    pcre2_match_data_free_32;\n    pcre2_next_match_32;\n    pcre2_pattern_convert_32;\n    pcre2_pattern_info_32;\n    pcre2_serialize_decode_32;\n    pcre2_serialize_encode_32;\n    pcre2_serialize_free_32;\n    pcre2_serialize_get_number_of_codes_32;\n    pcre2_set_bsr_32;\n    pcre2_set_callout_32;\n    pcre2_set_character_tables_32;\n    pcre2_set_compile_extra_options_32;\n    pcre2_set_compile_recursion_guard_32;\n    pcre2_set_depth_limit_32;\n    pcre2_set_glob_escape_32;\n    pcre2_set_glob_separator_32;\n    pcre2_set_heap_limit_32;\n    pcre2_set_match_limit_32;\n    pcre2_set_max_pattern_compiled_length_32;\n    pcre2_set_max_pattern_length_32;\n    pcre2_set_max_varlookbehind_32;\n    pcre2_set_newline_32;\n    pcre2_set_offset_limit_32;\n    pcre2_set_optimize_32;\n    pcre2_set_parens_nest_limit_32;\n    pcre2_set_recursion_limit_32;\n    pcre2_set_recursion_memory_management_32;\n    pcre2_set_substitute_callout_32;\n    pcre2_set_substitute_case_callout_32;\n    pcre2_substitute_32;\n    pcre2_substring_copy_byname_32;\n    pcre2_substring_copy_bynumber_32;\n    pcre2_substring_free_32;\n    pcre2_substring_get_byname_32;\n    pcre2_substring_get_bynumber_32;\n    pcre2_substring_length_byname_32;\n    pcre2_substring_length_bynumber_32;\n    pcre2_substring_list_free_32;\n    pcre2_substring_list_get_32;\n    pcre2_substring_nametable_scan_32;\n    pcre2_substring_number_from_name_32;\n\n@PCRE2_EXTRA_LOCAL_SYMS@\n};\n\n# PCRE2_10.48 {} PCRE2_10.47;\n"
  },
  {
    "path": "src/libpcre2-8.sym.in",
    "content": "# First version of PCRE2 in which symbols were assigned versions.\nPCRE2_10.47 {\n  global:\n    pcre2_callout_enumerate_8;\n    pcre2_code_copy_8;\n    pcre2_code_copy_with_tables_8;\n    pcre2_code_free_8;\n    pcre2_compile_8;\n    pcre2_compile_context_copy_8;\n    pcre2_compile_context_create_8;\n    pcre2_compile_context_free_8;\n    pcre2_config_8;\n    pcre2_convert_context_copy_8;\n    pcre2_convert_context_create_8;\n    pcre2_convert_context_free_8;\n    pcre2_converted_pattern_free_8;\n    pcre2_dfa_match_8;\n    pcre2_general_context_copy_8;\n    pcre2_general_context_create_8;\n    pcre2_general_context_free_8;\n    pcre2_get_error_message_8;\n    pcre2_get_mark_8;\n    pcre2_get_match_data_heapframes_size_8;\n    pcre2_get_match_data_size_8;\n    pcre2_get_ovector_count_8;\n    pcre2_get_ovector_pointer_8;\n    pcre2_get_startchar_8;\n    pcre2_jit_compile_8;\n    pcre2_jit_free_unused_memory_8;\n    pcre2_jit_match_8;\n    pcre2_jit_stack_assign_8;\n    pcre2_jit_stack_create_8;\n    pcre2_jit_stack_free_8;\n    pcre2_maketables_8;\n    pcre2_maketables_free_8;\n    pcre2_match_8;\n    pcre2_match_context_copy_8;\n    pcre2_match_context_create_8;\n    pcre2_match_context_free_8;\n    pcre2_match_data_create_8;\n    pcre2_match_data_create_from_pattern_8;\n    pcre2_match_data_free_8;\n    pcre2_next_match_8;\n    pcre2_pattern_convert_8;\n    pcre2_pattern_info_8;\n    pcre2_serialize_decode_8;\n    pcre2_serialize_encode_8;\n    pcre2_serialize_free_8;\n    pcre2_serialize_get_number_of_codes_8;\n    pcre2_set_bsr_8;\n    pcre2_set_callout_8;\n    pcre2_set_character_tables_8;\n    pcre2_set_compile_extra_options_8;\n    pcre2_set_compile_recursion_guard_8;\n    pcre2_set_depth_limit_8;\n    pcre2_set_glob_escape_8;\n    pcre2_set_glob_separator_8;\n    pcre2_set_heap_limit_8;\n    pcre2_set_match_limit_8;\n    pcre2_set_max_pattern_compiled_length_8;\n    pcre2_set_max_pattern_length_8;\n    pcre2_set_max_varlookbehind_8;\n    pcre2_set_newline_8;\n    pcre2_set_offset_limit_8;\n    pcre2_set_optimize_8;\n    pcre2_set_parens_nest_limit_8;\n    pcre2_set_recursion_limit_8;\n    pcre2_set_recursion_memory_management_8;\n    pcre2_set_substitute_callout_8;\n    pcre2_set_substitute_case_callout_8;\n    pcre2_substitute_8;\n    pcre2_substring_copy_byname_8;\n    pcre2_substring_copy_bynumber_8;\n    pcre2_substring_free_8;\n    pcre2_substring_get_byname_8;\n    pcre2_substring_get_bynumber_8;\n    pcre2_substring_length_byname_8;\n    pcre2_substring_length_bynumber_8;\n    pcre2_substring_list_free_8;\n    pcre2_substring_list_get_8;\n    pcre2_substring_nametable_scan_8;\n    pcre2_substring_number_from_name_8;\n\n@PCRE2_EXTRA_LOCAL_SYMS@\n};\n\n# PCRE2_10.48 {} PCRE2_10.47;\n"
  },
  {
    "path": "src/libpcre2-posix.sym.in",
    "content": "# First version of PCRE2 in which symbols were assigned versions.\nPCRE2_10.47 {\n  global:\n    pcre2_regcomp;\n    pcre2_regerror;\n    pcre2_regexec;\n    pcre2_regfree;\n\n@PCRE2_EXTRA_LOCAL_SYMS@\n};\n\n# PCRE2_10.48 {} PCRE2_10.47;\n"
  },
  {
    "path": "src/pcre2.h.generic",
    "content": "/*************************************************\n*       Perl-Compatible Regular Expressions      *\n*************************************************/\n\n/* This is the public header file for the PCRE library, second API, to be\n#included by applications that call PCRE2 functions.\n\n           Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n#ifndef PCRE2_H_IDEMPOTENT_GUARD\n#define PCRE2_H_IDEMPOTENT_GUARD\n\n/* The current PCRE version information. */\n\n#define PCRE2_MAJOR           10\n#define PCRE2_MINOR           48\n#define PCRE2_PRERELEASE      -DEV\n#define PCRE2_DATE            2025-10-21\n\n/* When an application links to a PCRE2 DLL in Windows, the symbols that are\nimported have to be identified as such. When building PCRE2, the appropriate\nexport setting is defined in pcre2_internal.h, which includes this file. So, we\ndon't change existing definitions of PCRE2_EXP_DECL.\n\nBy default, we use the standard \"extern\" declarations. */\n\n#ifndef PCRE2_EXP_DECL\n#  if defined(_WIN32) && !defined(PCRE2_STATIC)\n#    define PCRE2_EXP_DECL  extern __declspec(dllimport)\n#  elif defined __cplusplus\n#    define PCRE2_EXP_DECL  extern \"C\"\n#  else\n#    define PCRE2_EXP_DECL  extern\n#  endif\n#endif\n\n/* When compiling with the MSVC compiler, it is sometimes necessary to include\na \"calling convention\" before exported function names. For example:\n\n  void __cdecl function(....)\n\nmight be needed. In order to make this easy, all the exported functions have\nPCRE2_CALL_CONVENTION just before their names.\n\nPCRE2 normally uses the platform's standard calling convention, so this should\nnot be set unless you know you need it. */\n\n#ifndef PCRE2_CALL_CONVENTION\n#define PCRE2_CALL_CONVENTION\n#endif\n\n/* Have to include limits.h, stdlib.h, and inttypes.h to ensure that size_t and\nuint8_t, UCHAR_MAX, etc are defined. Some systems that do have inttypes.h do\nnot have stdint.h, which is why we use inttypes.h, which according to the C\nstandard is a superset of stdint.h. If inttypes.h is not available the build\nwill break and the relevant values must be provided by some other means. */\n\n#include <limits.h>\n#include <stdlib.h>\n#include <inttypes.h>\n\n/* Allow for C++ users compiling this directly. */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* The following option bits can be passed to pcre2_compile(), pcre2_match(),\nor pcre2_dfa_match(). PCRE2_NO_UTF_CHECK affects only the function to which it\nis passed. Put these bits at the most significant end of the options word so\nothers can be added next to them */\n\n#define PCRE2_ANCHORED            0x80000000u\n#define PCRE2_NO_UTF_CHECK        0x40000000u\n#define PCRE2_ENDANCHORED         0x20000000u\n\n/* The following option bits can be passed only to pcre2_compile(). However,\nthey may affect compilation, JIT compilation, and/or interpretive execution.\nThe following tags indicate which:\n\nC   alters what is compiled by pcre2_compile()\nJ   alters what is compiled by pcre2_jit_compile()\nM   is inspected during pcre2_match() execution\nD   is inspected during pcre2_dfa_match() execution\n*/\n\n#define PCRE2_ALLOW_EMPTY_CLASS   0x00000001u  /* C       */\n#define PCRE2_ALT_BSUX            0x00000002u  /* C       */\n#define PCRE2_AUTO_CALLOUT        0x00000004u  /* C       */\n#define PCRE2_CASELESS            0x00000008u  /* C       */\n#define PCRE2_DOLLAR_ENDONLY      0x00000010u  /*   J M D */\n#define PCRE2_DOTALL              0x00000020u  /* C       */\n#define PCRE2_DUPNAMES            0x00000040u  /* C       */\n#define PCRE2_EXTENDED            0x00000080u  /* C       */\n#define PCRE2_FIRSTLINE           0x00000100u  /*   J M D */\n#define PCRE2_MATCH_UNSET_BACKREF 0x00000200u  /* C J M   */\n#define PCRE2_MULTILINE           0x00000400u  /* C       */\n#define PCRE2_NEVER_UCP           0x00000800u  /* C       */\n#define PCRE2_NEVER_UTF           0x00001000u  /* C       */\n#define PCRE2_NO_AUTO_CAPTURE     0x00002000u  /* C       */\n#define PCRE2_NO_AUTO_POSSESS     0x00004000u  /* C       */\n#define PCRE2_NO_DOTSTAR_ANCHOR   0x00008000u  /* C       */\n#define PCRE2_NO_START_OPTIMIZE   0x00010000u  /*   J M D */\n#define PCRE2_UCP                 0x00020000u  /* C J M D */\n#define PCRE2_UNGREEDY            0x00040000u  /* C       */\n#define PCRE2_UTF                 0x00080000u  /* C J M D */\n#define PCRE2_NEVER_BACKSLASH_C   0x00100000u  /* C       */\n#define PCRE2_ALT_CIRCUMFLEX      0x00200000u  /*   J M D */\n#define PCRE2_ALT_VERBNAMES       0x00400000u  /* C       */\n#define PCRE2_USE_OFFSET_LIMIT    0x00800000u  /*   J M D */\n#define PCRE2_EXTENDED_MORE       0x01000000u  /* C       */\n#define PCRE2_LITERAL             0x02000000u  /* C       */\n#define PCRE2_MATCH_INVALID_UTF   0x04000000u  /*   J M D */\n#define PCRE2_ALT_EXTENDED_CLASS  0x08000000u  /* C       */\n\n/* An additional compile options word is available in the compile context. */\n\n#define PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES  0x00000001u  /* C */\n#define PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL    0x00000002u  /* C */\n#define PCRE2_EXTRA_MATCH_WORD               0x00000004u  /* C */\n#define PCRE2_EXTRA_MATCH_LINE               0x00000008u  /* C */\n#define PCRE2_EXTRA_ESCAPED_CR_IS_LF         0x00000010u  /* C */\n#define PCRE2_EXTRA_ALT_BSUX                 0x00000020u  /* C */\n#define PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK     0x00000040u  /* C */\n#define PCRE2_EXTRA_CASELESS_RESTRICT        0x00000080u  /* C */\n#define PCRE2_EXTRA_ASCII_BSD                0x00000100u  /* C */\n#define PCRE2_EXTRA_ASCII_BSS                0x00000200u  /* C */\n#define PCRE2_EXTRA_ASCII_BSW                0x00000400u  /* C */\n#define PCRE2_EXTRA_ASCII_POSIX              0x00000800u  /* C */\n#define PCRE2_EXTRA_ASCII_DIGIT              0x00001000u  /* C */\n#define PCRE2_EXTRA_PYTHON_OCTAL             0x00002000u  /* C */\n#define PCRE2_EXTRA_NO_BS0                   0x00004000u  /* C */\n#define PCRE2_EXTRA_NEVER_CALLOUT            0x00008000u  /* C */\n#define PCRE2_EXTRA_TURKISH_CASING           0x00010000u  /* C */\n\n/* These are for pcre2_jit_compile(). */\n\n#define PCRE2_JIT_COMPLETE        0x00000001u  /* For full matching */\n#define PCRE2_JIT_PARTIAL_SOFT    0x00000002u\n#define PCRE2_JIT_PARTIAL_HARD    0x00000004u\n#define PCRE2_JIT_INVALID_UTF     0x00000100u\n#define PCRE2_JIT_TEST_ALLOC      0x00000200u\n\n/* These are for pcre2_match(), pcre2_dfa_match(), pcre2_jit_match(), and\npcre2_substitute(). Some are allowed only for one of the functions, and in\nthese cases it is noted below. Note that PCRE2_ANCHORED, PCRE2_ENDANCHORED and\nPCRE2_NO_UTF_CHECK can also be passed to these functions (though\npcre2_jit_match() ignores the latter since it bypasses all sanity checks). */\n\n#define PCRE2_NOTBOL                      0x00000001u\n#define PCRE2_NOTEOL                      0x00000002u\n#define PCRE2_NOTEMPTY                    0x00000004u  /* ) These two must be kept */\n#define PCRE2_NOTEMPTY_ATSTART            0x00000008u  /* ) adjacent to each other. */\n#define PCRE2_PARTIAL_SOFT                0x00000010u\n#define PCRE2_PARTIAL_HARD                0x00000020u\n#define PCRE2_DFA_RESTART                 0x00000040u  /* pcre2_dfa_match() only */\n#define PCRE2_DFA_SHORTEST                0x00000080u  /* pcre2_dfa_match() only */\n#define PCRE2_SUBSTITUTE_GLOBAL           0x00000100u  /* pcre2_substitute() only */\n#define PCRE2_SUBSTITUTE_EXTENDED         0x00000200u  /* pcre2_substitute() only */\n#define PCRE2_SUBSTITUTE_UNSET_EMPTY      0x00000400u  /* pcre2_substitute() only */\n#define PCRE2_SUBSTITUTE_UNKNOWN_UNSET    0x00000800u  /* pcre2_substitute() only */\n#define PCRE2_SUBSTITUTE_OVERFLOW_LENGTH  0x00001000u  /* pcre2_substitute() only */\n#define PCRE2_NO_JIT                      0x00002000u  /* not for pcre2_dfa_match() */\n#define PCRE2_COPY_MATCHED_SUBJECT        0x00004000u\n#define PCRE2_SUBSTITUTE_LITERAL          0x00008000u  /* pcre2_substitute() only */\n#define PCRE2_SUBSTITUTE_MATCHED          0x00010000u  /* pcre2_substitute() only */\n#define PCRE2_SUBSTITUTE_REPLACEMENT_ONLY 0x00020000u  /* pcre2_substitute() only */\n#define PCRE2_DISABLE_RECURSELOOP_CHECK   0x00040000u  /* not for pcre2_dfa_match() or pcre2_jit_match() */\n\n/* Options for pcre2_pattern_convert(). */\n\n#define PCRE2_CONVERT_UTF                    0x00000001u\n#define PCRE2_CONVERT_NO_UTF_CHECK           0x00000002u\n#define PCRE2_CONVERT_POSIX_BASIC            0x00000004u\n#define PCRE2_CONVERT_POSIX_EXTENDED         0x00000008u\n#define PCRE2_CONVERT_GLOB                   0x00000010u\n#define PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR 0x00000030u\n#define PCRE2_CONVERT_GLOB_NO_STARSTAR       0x00000050u\n\n/* Newline and \\R settings, for use in compile contexts. The newline values\nmust be kept in step with values set in config.h and both sets must all be\ngreater than zero. */\n\n#define PCRE2_NEWLINE_CR          1\n#define PCRE2_NEWLINE_LF          2\n#define PCRE2_NEWLINE_CRLF        3\n#define PCRE2_NEWLINE_ANY         4\n#define PCRE2_NEWLINE_ANYCRLF     5\n#define PCRE2_NEWLINE_NUL         6\n\n#define PCRE2_BSR_UNICODE         1\n#define PCRE2_BSR_ANYCRLF         2\n\n/* Error codes for pcre2_compile(). Some of these are also used by\npcre2_pattern_convert(). */\n\n#define PCRE2_ERROR_END_BACKSLASH                  101\n#define PCRE2_ERROR_END_BACKSLASH_C                102\n#define PCRE2_ERROR_UNKNOWN_ESCAPE                 103\n#define PCRE2_ERROR_QUANTIFIER_OUT_OF_ORDER        104\n#define PCRE2_ERROR_QUANTIFIER_TOO_BIG             105\n#define PCRE2_ERROR_MISSING_SQUARE_BRACKET         106\n#define PCRE2_ERROR_ESCAPE_INVALID_IN_CLASS        107\n#define PCRE2_ERROR_CLASS_RANGE_ORDER              108\n#define PCRE2_ERROR_QUANTIFIER_INVALID             109\n#define PCRE2_ERROR_INTERNAL_UNEXPECTED_REPEAT     110\n#define PCRE2_ERROR_INVALID_AFTER_PARENS_QUERY     111\n#define PCRE2_ERROR_POSIX_CLASS_NOT_IN_CLASS       112\n#define PCRE2_ERROR_POSIX_NO_SUPPORT_COLLATING     113\n#define PCRE2_ERROR_MISSING_CLOSING_PARENTHESIS    114\n#define PCRE2_ERROR_BAD_SUBPATTERN_REFERENCE       115\n#define PCRE2_ERROR_NULL_PATTERN                   116\n#define PCRE2_ERROR_BAD_OPTIONS                    117\n#define PCRE2_ERROR_MISSING_COMMENT_CLOSING        118\n#define PCRE2_ERROR_PARENTHESES_NEST_TOO_DEEP      119\n#define PCRE2_ERROR_PATTERN_TOO_LARGE              120\n#define PCRE2_ERROR_HEAP_FAILED                    121\n#define PCRE2_ERROR_UNMATCHED_CLOSING_PARENTHESIS  122\n#define PCRE2_ERROR_INTERNAL_CODE_OVERFLOW         123\n#define PCRE2_ERROR_MISSING_CONDITION_CLOSING      124\n#define PCRE2_ERROR_LOOKBEHIND_NOT_FIXED_LENGTH    125\n#define PCRE2_ERROR_ZERO_RELATIVE_REFERENCE        126\n#define PCRE2_ERROR_TOO_MANY_CONDITION_BRANCHES    127\n#define PCRE2_ERROR_CONDITION_ASSERTION_EXPECTED   128\n#define PCRE2_ERROR_BAD_RELATIVE_REFERENCE         129\n#define PCRE2_ERROR_UNKNOWN_POSIX_CLASS            130\n#define PCRE2_ERROR_INTERNAL_STUDY_ERROR           131\n#define PCRE2_ERROR_UNICODE_NOT_SUPPORTED          132\n#define PCRE2_ERROR_PARENTHESES_STACK_CHECK        133\n#define PCRE2_ERROR_CODE_POINT_TOO_BIG             134\n#define PCRE2_ERROR_LOOKBEHIND_TOO_COMPLICATED     135\n#define PCRE2_ERROR_LOOKBEHIND_INVALID_BACKSLASH_C 136\n#define PCRE2_ERROR_UNSUPPORTED_ESCAPE_SEQUENCE    137\n#define PCRE2_ERROR_CALLOUT_NUMBER_TOO_BIG         138\n#define PCRE2_ERROR_MISSING_CALLOUT_CLOSING        139\n#define PCRE2_ERROR_ESCAPE_INVALID_IN_VERB         140\n#define PCRE2_ERROR_UNRECOGNIZED_AFTER_QUERY_P     141\n#define PCRE2_ERROR_MISSING_NAME_TERMINATOR        142\n#define PCRE2_ERROR_DUPLICATE_SUBPATTERN_NAME      143\n#define PCRE2_ERROR_INVALID_SUBPATTERN_NAME        144\n#define PCRE2_ERROR_UNICODE_PROPERTIES_UNAVAILABLE 145\n#define PCRE2_ERROR_MALFORMED_UNICODE_PROPERTY     146\n#define PCRE2_ERROR_UNKNOWN_UNICODE_PROPERTY       147\n#define PCRE2_ERROR_SUBPATTERN_NAME_TOO_LONG       148\n#define PCRE2_ERROR_TOO_MANY_NAMED_SUBPATTERNS     149\n#define PCRE2_ERROR_CLASS_INVALID_RANGE            150\n#define PCRE2_ERROR_OCTAL_BYTE_TOO_BIG             151\n#define PCRE2_ERROR_INTERNAL_OVERRAN_WORKSPACE     152\n#define PCRE2_ERROR_INTERNAL_MISSING_SUBPATTERN    153\n#define PCRE2_ERROR_DEFINE_TOO_MANY_BRANCHES       154\n#define PCRE2_ERROR_BACKSLASH_O_MISSING_BRACE      155\n#define PCRE2_ERROR_INTERNAL_UNKNOWN_NEWLINE       156\n#define PCRE2_ERROR_BACKSLASH_G_SYNTAX             157\n#define PCRE2_ERROR_PARENS_QUERY_R_MISSING_CLOSING 158\n/* Error 159 is obsolete and should now never occur */\n#define PCRE2_ERROR_VERB_ARGUMENT_NOT_ALLOWED      159\n#define PCRE2_ERROR_VERB_UNKNOWN                   160\n#define PCRE2_ERROR_SUBPATTERN_NUMBER_TOO_BIG      161\n#define PCRE2_ERROR_SUBPATTERN_NAME_EXPECTED       162\n#define PCRE2_ERROR_INTERNAL_PARSED_OVERFLOW       163\n#define PCRE2_ERROR_INVALID_OCTAL                  164\n#define PCRE2_ERROR_SUBPATTERN_NAMES_MISMATCH      165\n#define PCRE2_ERROR_MARK_MISSING_ARGUMENT          166\n#define PCRE2_ERROR_INVALID_HEXADECIMAL            167\n#define PCRE2_ERROR_BACKSLASH_C_SYNTAX             168\n#define PCRE2_ERROR_BACKSLASH_K_SYNTAX             169\n#define PCRE2_ERROR_INTERNAL_BAD_CODE_LOOKBEHINDS  170\n#define PCRE2_ERROR_BACKSLASH_N_IN_CLASS           171\n#define PCRE2_ERROR_CALLOUT_STRING_TOO_LONG        172\n#define PCRE2_ERROR_UNICODE_DISALLOWED_CODE_POINT  173\n#define PCRE2_ERROR_UTF_IS_DISABLED                174\n#define PCRE2_ERROR_UCP_IS_DISABLED                175\n#define PCRE2_ERROR_VERB_NAME_TOO_LONG             176\n#define PCRE2_ERROR_BACKSLASH_U_CODE_POINT_TOO_BIG 177\n#define PCRE2_ERROR_MISSING_OCTAL_OR_HEX_DIGITS    178\n#define PCRE2_ERROR_VERSION_CONDITION_SYNTAX       179\n#define PCRE2_ERROR_INTERNAL_BAD_CODE_AUTO_POSSESS 180\n#define PCRE2_ERROR_CALLOUT_NO_STRING_DELIMITER    181\n#define PCRE2_ERROR_CALLOUT_BAD_STRING_DELIMITER   182\n#define PCRE2_ERROR_BACKSLASH_C_CALLER_DISABLED    183\n#define PCRE2_ERROR_QUERY_BARJX_NEST_TOO_DEEP      184\n#define PCRE2_ERROR_BACKSLASH_C_LIBRARY_DISABLED   185\n#define PCRE2_ERROR_PATTERN_TOO_COMPLICATED        186\n#define PCRE2_ERROR_LOOKBEHIND_TOO_LONG            187\n#define PCRE2_ERROR_PATTERN_STRING_TOO_LONG        188\n#define PCRE2_ERROR_INTERNAL_BAD_CODE              189\n#define PCRE2_ERROR_INTERNAL_BAD_CODE_IN_SKIP      190\n#define PCRE2_ERROR_NO_SURROGATES_IN_UTF16         191\n#define PCRE2_ERROR_BAD_LITERAL_OPTIONS            192\n#define PCRE2_ERROR_SUPPORTED_ONLY_IN_UNICODE      193\n#define PCRE2_ERROR_INVALID_HYPHEN_IN_OPTIONS      194\n#define PCRE2_ERROR_ALPHA_ASSERTION_UNKNOWN        195\n#define PCRE2_ERROR_SCRIPT_RUN_NOT_AVAILABLE       196\n#define PCRE2_ERROR_TOO_MANY_CAPTURES              197\n#define PCRE2_ERROR_MISSING_OCTAL_DIGIT            198\n#define PCRE2_ERROR_BACKSLASH_K_IN_LOOKAROUND      199\n#define PCRE2_ERROR_MAX_VAR_LOOKBEHIND_EXCEEDED    200\n#define PCRE2_ERROR_PATTERN_COMPILED_SIZE_TOO_BIG  201\n#define PCRE2_ERROR_OVERSIZE_PYTHON_OCTAL          202\n#define PCRE2_ERROR_CALLOUT_CALLER_DISABLED        203\n#define PCRE2_ERROR_EXTRA_CASING_REQUIRES_UNICODE  204\n#define PCRE2_ERROR_TURKISH_CASING_REQUIRES_UTF    205\n#define PCRE2_ERROR_EXTRA_CASING_INCOMPATIBLE      206\n#define PCRE2_ERROR_ECLASS_NEST_TOO_DEEP           207\n#define PCRE2_ERROR_ECLASS_INVALID_OPERATOR        208\n#define PCRE2_ERROR_ECLASS_UNEXPECTED_OPERATOR     209\n#define PCRE2_ERROR_ECLASS_EXPECTED_OPERAND        210\n#define PCRE2_ERROR_ECLASS_MIXED_OPERATORS         211\n#define PCRE2_ERROR_ECLASS_HINT_SQUARE_BRACKET     212\n#define PCRE2_ERROR_PERL_ECLASS_UNEXPECTED_EXPR    213\n#define PCRE2_ERROR_PERL_ECLASS_EMPTY_EXPR         214\n#define PCRE2_ERROR_PERL_ECLASS_MISSING_CLOSE      215\n#define PCRE2_ERROR_PERL_ECLASS_UNEXPECTED_CHAR    216\n#define PCRE2_ERROR_EXPECTED_CAPTURE_GROUP         217\n#define PCRE2_ERROR_MISSING_OPENING_PARENTHESIS    218\n#define PCRE2_ERROR_MISSING_NUMBER_TERMINATOR      219\n#define PCRE2_ERROR_NULL_ERROROFFSET               220\n\n/* \"Expected\" matching error codes: no match and partial match. */\n\n#define PCRE2_ERROR_NOMATCH          (-1)\n#define PCRE2_ERROR_PARTIAL          (-2)\n\n/* Error codes for UTF-8 validity checks */\n\n#define PCRE2_ERROR_UTF8_ERR1        (-3)\n#define PCRE2_ERROR_UTF8_ERR2        (-4)\n#define PCRE2_ERROR_UTF8_ERR3        (-5)\n#define PCRE2_ERROR_UTF8_ERR4        (-6)\n#define PCRE2_ERROR_UTF8_ERR5        (-7)\n#define PCRE2_ERROR_UTF8_ERR6        (-8)\n#define PCRE2_ERROR_UTF8_ERR7        (-9)\n#define PCRE2_ERROR_UTF8_ERR8       (-10)\n#define PCRE2_ERROR_UTF8_ERR9       (-11)\n#define PCRE2_ERROR_UTF8_ERR10      (-12)\n#define PCRE2_ERROR_UTF8_ERR11      (-13)\n#define PCRE2_ERROR_UTF8_ERR12      (-14)\n#define PCRE2_ERROR_UTF8_ERR13      (-15)\n#define PCRE2_ERROR_UTF8_ERR14      (-16)\n#define PCRE2_ERROR_UTF8_ERR15      (-17)\n#define PCRE2_ERROR_UTF8_ERR16      (-18)\n#define PCRE2_ERROR_UTF8_ERR17      (-19)\n#define PCRE2_ERROR_UTF8_ERR18      (-20)\n#define PCRE2_ERROR_UTF8_ERR19      (-21)\n#define PCRE2_ERROR_UTF8_ERR20      (-22)\n#define PCRE2_ERROR_UTF8_ERR21      (-23)\n\n/* Error codes for UTF-16 validity checks */\n\n#define PCRE2_ERROR_UTF16_ERR1      (-24)\n#define PCRE2_ERROR_UTF16_ERR2      (-25)\n#define PCRE2_ERROR_UTF16_ERR3      (-26)\n\n/* Error codes for UTF-32 validity checks */\n\n#define PCRE2_ERROR_UTF32_ERR1      (-27)\n#define PCRE2_ERROR_UTF32_ERR2      (-28)\n\n/* Miscellaneous error codes for pcre2[_dfa]_match(), substring extraction\nfunctions, context functions, and serializing functions. They are in numerical\norder. Originally they were in alphabetical order too, but now that PCRE2 is\nreleased, the numbers must not be changed. */\n\n#define PCRE2_ERROR_BADDATA           (-29)\n#define PCRE2_ERROR_MIXEDTABLES       (-30)  /* Name was changed */\n#define PCRE2_ERROR_BADMAGIC          (-31)\n#define PCRE2_ERROR_BADMODE           (-32)\n#define PCRE2_ERROR_BADOFFSET         (-33)\n#define PCRE2_ERROR_BADOPTION         (-34)\n#define PCRE2_ERROR_BADREPLACEMENT    (-35)\n#define PCRE2_ERROR_BADUTFOFFSET      (-36)\n#define PCRE2_ERROR_CALLOUT           (-37)  /* Never used by PCRE2 itself */\n#define PCRE2_ERROR_DFA_BADRESTART    (-38)\n#define PCRE2_ERROR_DFA_RECURSE       (-39)\n#define PCRE2_ERROR_DFA_UCOND         (-40)\n#define PCRE2_ERROR_DFA_UFUNC         (-41)\n#define PCRE2_ERROR_DFA_UITEM         (-42)\n#define PCRE2_ERROR_DFA_WSSIZE        (-43)\n#define PCRE2_ERROR_INTERNAL          (-44)\n#define PCRE2_ERROR_JIT_BADOPTION     (-45)\n#define PCRE2_ERROR_JIT_STACKLIMIT    (-46)\n#define PCRE2_ERROR_MATCHLIMIT        (-47)\n#define PCRE2_ERROR_NOMEMORY          (-48)\n#define PCRE2_ERROR_NOSUBSTRING       (-49)\n#define PCRE2_ERROR_NOUNIQUESUBSTRING (-50)\n#define PCRE2_ERROR_NULL              (-51)\n#define PCRE2_ERROR_RECURSELOOP       (-52)\n#define PCRE2_ERROR_DEPTHLIMIT        (-53)\n#define PCRE2_ERROR_RECURSIONLIMIT    (-53)  /* Obsolete synonym */\n#define PCRE2_ERROR_UNAVAILABLE       (-54)\n#define PCRE2_ERROR_UNSET             (-55)\n#define PCRE2_ERROR_BADOFFSETLIMIT    (-56)\n#define PCRE2_ERROR_BADREPESCAPE      (-57)\n#define PCRE2_ERROR_REPMISSINGBRACE   (-58)\n#define PCRE2_ERROR_BADSUBSTITUTION   (-59)\n#define PCRE2_ERROR_BADSUBSPATTERN    (-60)\n#define PCRE2_ERROR_TOOMANYREPLACE    (-61)\n#define PCRE2_ERROR_BADSERIALIZEDDATA (-62)\n#define PCRE2_ERROR_HEAPLIMIT         (-63)\n#define PCRE2_ERROR_CONVERT_SYNTAX    (-64)\n#define PCRE2_ERROR_INTERNAL_DUPMATCH (-65)\n#define PCRE2_ERROR_DFA_UINVALID_UTF  (-66)\n#define PCRE2_ERROR_INVALIDOFFSET     (-67)\n#define PCRE2_ERROR_JIT_UNSUPPORTED   (-68)\n#define PCRE2_ERROR_REPLACECASE       (-69)\n#define PCRE2_ERROR_TOOLARGEREPLACE   (-70)\n#define PCRE2_ERROR_DIFFSUBSPATTERN   (-71)\n#define PCRE2_ERROR_DIFFSUBSSUBJECT   (-72)\n#define PCRE2_ERROR_DIFFSUBSOFFSET    (-73)\n#define PCRE2_ERROR_DIFFSUBSOPTIONS   (-74)\n#define PCRE2_ERROR_BAD_BACKSLASH_K   (-75)\n#define PCRE2_ERROR_PARTIALSUBS       (-76)\n\n\n/* Request types for pcre2_pattern_info() */\n\n#define PCRE2_INFO_ALLOPTIONS            0\n#define PCRE2_INFO_ARGOPTIONS            1\n#define PCRE2_INFO_BACKREFMAX            2\n#define PCRE2_INFO_BSR                   3\n#define PCRE2_INFO_CAPTURECOUNT          4\n#define PCRE2_INFO_FIRSTCODEUNIT         5\n#define PCRE2_INFO_FIRSTCODETYPE         6\n#define PCRE2_INFO_FIRSTBITMAP           7\n#define PCRE2_INFO_HASCRORLF             8\n#define PCRE2_INFO_JCHANGED              9\n#define PCRE2_INFO_JITSIZE              10\n#define PCRE2_INFO_LASTCODEUNIT         11\n#define PCRE2_INFO_LASTCODETYPE         12\n#define PCRE2_INFO_MATCHEMPTY           13\n#define PCRE2_INFO_MATCHLIMIT           14\n#define PCRE2_INFO_MAXLOOKBEHIND        15\n#define PCRE2_INFO_MINLENGTH            16\n#define PCRE2_INFO_NAMECOUNT            17\n#define PCRE2_INFO_NAMEENTRYSIZE        18\n#define PCRE2_INFO_NAMETABLE            19\n#define PCRE2_INFO_NEWLINE              20\n#define PCRE2_INFO_DEPTHLIMIT           21\n#define PCRE2_INFO_RECURSIONLIMIT       21  /* Obsolete synonym */\n#define PCRE2_INFO_SIZE                 22\n#define PCRE2_INFO_HASBACKSLASHC        23\n#define PCRE2_INFO_FRAMESIZE            24\n#define PCRE2_INFO_HEAPLIMIT            25\n#define PCRE2_INFO_EXTRAOPTIONS         26\n\n/* Request types for pcre2_config(). */\n\n#define PCRE2_CONFIG_BSR                     0\n#define PCRE2_CONFIG_JIT                     1\n#define PCRE2_CONFIG_JITTARGET               2\n#define PCRE2_CONFIG_LINKSIZE                3\n#define PCRE2_CONFIG_MATCHLIMIT              4\n#define PCRE2_CONFIG_NEWLINE                 5\n#define PCRE2_CONFIG_PARENSLIMIT             6\n#define PCRE2_CONFIG_DEPTHLIMIT              7\n#define PCRE2_CONFIG_RECURSIONLIMIT          7  /* Obsolete synonym */\n#define PCRE2_CONFIG_STACKRECURSE            8  /* Obsolete */\n#define PCRE2_CONFIG_UNICODE                 9\n#define PCRE2_CONFIG_UNICODE_VERSION        10\n#define PCRE2_CONFIG_VERSION                11\n#define PCRE2_CONFIG_HEAPLIMIT              12\n#define PCRE2_CONFIG_NEVER_BACKSLASH_C      13\n#define PCRE2_CONFIG_COMPILED_WIDTHS        14\n#define PCRE2_CONFIG_TABLES_LENGTH          15\n#define PCRE2_CONFIG_EFFECTIVE_LINKSIZE     16\n\n/* Optimization directives for pcre2_set_optimize().\nFor binary compatibility, only add to this list; do not renumber. */\n\n#define PCRE2_OPTIMIZATION_NONE    0\n#define PCRE2_OPTIMIZATION_FULL    1\n\n#define PCRE2_AUTO_POSSESS         64\n#define PCRE2_AUTO_POSSESS_OFF     65\n#define PCRE2_DOTSTAR_ANCHOR       66\n#define PCRE2_DOTSTAR_ANCHOR_OFF   67\n#define PCRE2_START_OPTIMIZE       68\n#define PCRE2_START_OPTIMIZE_OFF   69\n\n/* Types used in pcre2_set_substitute_case_callout().\n\nPCRE2_SUBSTITUTE_CASE_LOWER and PCRE2_SUBSTITUTE_CASE_UPPER are passed to the\ncallout to indicate that the case of the entire callout input should be\ncase-transformed. PCRE2_SUBSTITUTE_CASE_TITLE_FIRST is passed to indicate that\nonly the first character or glyph should be transformed to Unicode titlecase,\nand the rest to lowercase. */\n\n#define PCRE2_SUBSTITUTE_CASE_LOWER        1\n#define PCRE2_SUBSTITUTE_CASE_UPPER        2\n#define PCRE2_SUBSTITUTE_CASE_TITLE_FIRST  3\n\n/* Types for code units in patterns and subject strings. */\n\ntypedef uint8_t  PCRE2_UCHAR8;\ntypedef uint16_t PCRE2_UCHAR16;\ntypedef uint32_t PCRE2_UCHAR32;\n\ntypedef const PCRE2_UCHAR8  *PCRE2_SPTR8;\ntypedef const PCRE2_UCHAR16 *PCRE2_SPTR16;\ntypedef const PCRE2_UCHAR32 *PCRE2_SPTR32;\n\n/* The PCRE2_SIZE type is used for all string lengths and offsets in PCRE2,\nincluding pattern offsets for errors and subject offsets after a match. We\ndefine special values to indicate zero-terminated strings and unset offsets in\nthe offset vector (ovector). */\n\n#define PCRE2_SIZE            size_t\n#define PCRE2_SIZE_MAX        SIZE_MAX\n#define PCRE2_ZERO_TERMINATED (~(PCRE2_SIZE)0)\n#define PCRE2_UNSET           (~(PCRE2_SIZE)0)\n\n/* Generic types for opaque structures and JIT callback functions. These\ndeclarations are defined in a macro that is expanded for each width later. */\n\n#define PCRE2_TYPES_LIST \\\nstruct pcre2_real_general_context; \\\ntypedef struct pcre2_real_general_context pcre2_general_context; \\\n\\\nstruct pcre2_real_compile_context; \\\ntypedef struct pcre2_real_compile_context pcre2_compile_context; \\\n\\\nstruct pcre2_real_match_context; \\\ntypedef struct pcre2_real_match_context pcre2_match_context; \\\n\\\nstruct pcre2_real_convert_context; \\\ntypedef struct pcre2_real_convert_context pcre2_convert_context; \\\n\\\nstruct pcre2_real_code; \\\ntypedef struct pcre2_real_code pcre2_code; \\\n\\\nstruct pcre2_real_match_data; \\\ntypedef struct pcre2_real_match_data pcre2_match_data; \\\n\\\nstruct pcre2_real_jit_stack; \\\ntypedef struct pcre2_real_jit_stack pcre2_jit_stack; \\\n\\\ntypedef pcre2_jit_stack *(*pcre2_jit_callback)(void *);\n\n\n/* The structures for passing out data via callout functions. We use structures\nso that new fields can be added on the end in future versions, without changing\nthe API of the function, thereby allowing old clients to work without\nmodification. Define the generic versions in a macro; the width-specific\nversions are generated from this macro below. */\n\n/* Flags for the callout_flags field. These are cleared after a callout. */\n\n#define PCRE2_CALLOUT_STARTMATCH    0x00000001u  /* Set for each bumpalong */\n#define PCRE2_CALLOUT_BACKTRACK     0x00000002u  /* Set after a backtrack */\n\n#define PCRE2_STRUCTURE_LIST \\\ntypedef struct pcre2_callout_block { \\\n  uint32_t      version;           /* Identifies version of block */ \\\n  /* ------------------------ Version 0 ------------------------------- */ \\\n  uint32_t      callout_number;    /* Number compiled into pattern */ \\\n  uint32_t      capture_top;       /* Max current capture */ \\\n  uint32_t      capture_last;      /* Most recently closed capture */ \\\n  PCRE2_SIZE   *offset_vector;     /* The offset vector */ \\\n  PCRE2_SPTR    mark;              /* Pointer to current mark or NULL */ \\\n  PCRE2_SPTR    subject;           /* The subject being matched */ \\\n  PCRE2_SIZE    subject_length;    /* The length of the subject */ \\\n  PCRE2_SIZE    start_match;       /* Offset to start of this match attempt */ \\\n  PCRE2_SIZE    current_position;  /* Where we currently are in the subject */ \\\n  PCRE2_SIZE    pattern_position;  /* Offset to next item in the pattern */ \\\n  PCRE2_SIZE    next_item_length;  /* Length of next item in the pattern */ \\\n  /* ------------------- Added for Version 1 -------------------------- */ \\\n  PCRE2_SIZE    callout_string_offset; /* Offset to string within pattern */ \\\n  PCRE2_SIZE    callout_string_length; /* Length of string compiled into pattern */ \\\n  PCRE2_SPTR    callout_string;    /* String compiled into pattern */ \\\n  /* ------------------- Added for Version 2 -------------------------- */ \\\n  uint32_t      callout_flags;     /* See above for list */ \\\n  /* ------------------------------------------------------------------ */ \\\n} pcre2_callout_block; \\\n\\\ntypedef struct pcre2_callout_enumerate_block { \\\n  uint32_t      version;           /* Identifies version of block */ \\\n  /* ------------------------ Version 0 ------------------------------- */ \\\n  PCRE2_SIZE    pattern_position;  /* Offset to next item in the pattern */ \\\n  PCRE2_SIZE    next_item_length;  /* Length of next item in the pattern */ \\\n  uint32_t      callout_number;    /* Number compiled into pattern */ \\\n  PCRE2_SIZE    callout_string_offset; /* Offset to string within pattern */ \\\n  PCRE2_SIZE    callout_string_length; /* Length of string compiled into pattern */ \\\n  PCRE2_SPTR    callout_string;    /* String compiled into pattern */ \\\n  /* ------------------------------------------------------------------ */ \\\n} pcre2_callout_enumerate_block; \\\n\\\ntypedef struct pcre2_substitute_callout_block { \\\n  uint32_t      version;           /* Identifies version of block */ \\\n  /* ------------------------ Version 0 ------------------------------- */ \\\n  PCRE2_SPTR    input;             /* Pointer to input subject string */ \\\n  PCRE2_SPTR    output;            /* Pointer to output buffer */ \\\n  PCRE2_SIZE    output_offsets[2]; /* Changed portion of the output */ \\\n  PCRE2_SIZE   *ovector;           /* Pointer to current ovector */ \\\n  uint32_t      oveccount;         /* Count of pairs set in ovector */ \\\n  uint32_t      subscount;         /* Substitution number */ \\\n  /* ------------------------------------------------------------------ */ \\\n} pcre2_substitute_callout_block;\n\n\n/* List the generic forms of all other functions in macros, which will be\nexpanded for each width below. Start with functions that give general\ninformation. */\n\n#define PCRE2_GENERAL_INFO_FUNCTIONS \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION pcre2_config(uint32_t, void *);\n\n\n/* Functions for manipulating contexts. */\n\n#define PCRE2_GENERAL_CONTEXT_FUNCTIONS \\\nPCRE2_EXP_DECL pcre2_general_context *PCRE2_CALL_CONVENTION \\\n  pcre2_general_context_copy(pcre2_general_context *); \\\nPCRE2_EXP_DECL pcre2_general_context *PCRE2_CALL_CONVENTION \\\n  pcre2_general_context_create(void *(*)(size_t, void *), \\\n    void (*)(void *, void *), void *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_general_context_free(pcre2_general_context *);\n\n#define PCRE2_COMPILE_CONTEXT_FUNCTIONS \\\nPCRE2_EXP_DECL pcre2_compile_context *PCRE2_CALL_CONVENTION \\\n  pcre2_compile_context_copy(pcre2_compile_context *); \\\nPCRE2_EXP_DECL pcre2_compile_context *PCRE2_CALL_CONVENTION \\\n  pcre2_compile_context_create(pcre2_general_context *);\\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_compile_context_free(pcre2_compile_context *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_bsr(pcre2_compile_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_character_tables(pcre2_compile_context *, const uint8_t *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_compile_extra_options(pcre2_compile_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_max_pattern_length(pcre2_compile_context *, PCRE2_SIZE); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_max_pattern_compiled_length(pcre2_compile_context *, PCRE2_SIZE); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_max_varlookbehind(pcre2_compile_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_newline(pcre2_compile_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_parens_nest_limit(pcre2_compile_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_compile_recursion_guard(pcre2_compile_context *, \\\n    int (*)(uint32_t, void *), void *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_optimize(pcre2_compile_context *, uint32_t);\n\n#define PCRE2_MATCH_CONTEXT_FUNCTIONS \\\nPCRE2_EXP_DECL pcre2_match_context *PCRE2_CALL_CONVENTION \\\n  pcre2_match_context_copy(pcre2_match_context *); \\\nPCRE2_EXP_DECL pcre2_match_context *PCRE2_CALL_CONVENTION \\\n  pcre2_match_context_create(pcre2_general_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_match_context_free(pcre2_match_context *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_callout(pcre2_match_context *, \\\n    int (*)(pcre2_callout_block *, void *), void *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_substitute_callout(pcre2_match_context *, \\\n    int (*)(pcre2_substitute_callout_block *, void *), void *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_substitute_case_callout(pcre2_match_context *, \\\n    PCRE2_SIZE (*)(PCRE2_SPTR, PCRE2_SIZE, PCRE2_UCHAR *, PCRE2_SIZE, int, \\\n                   void *), \\\n    void *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_depth_limit(pcre2_match_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_heap_limit(pcre2_match_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_match_limit(pcre2_match_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_offset_limit(pcre2_match_context *, PCRE2_SIZE); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_recursion_limit(pcre2_match_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_recursion_memory_management(pcre2_match_context *, \\\n    void *(*)(size_t, void *), void (*)(void *, void *), void *);\n\n#define PCRE2_CONVERT_CONTEXT_FUNCTIONS \\\nPCRE2_EXP_DECL pcre2_convert_context *PCRE2_CALL_CONVENTION \\\n  pcre2_convert_context_copy(pcre2_convert_context *); \\\nPCRE2_EXP_DECL pcre2_convert_context *PCRE2_CALL_CONVENTION \\\n  pcre2_convert_context_create(pcre2_general_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_convert_context_free(pcre2_convert_context *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_glob_escape(pcre2_convert_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_glob_separator(pcre2_convert_context *, uint32_t);\n\n\n/* Functions concerned with compiling a pattern to PCRE internal code. */\n\n#define PCRE2_COMPILE_FUNCTIONS \\\nPCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \\\n  pcre2_compile(PCRE2_SPTR, PCRE2_SIZE, uint32_t, int *, PCRE2_SIZE *, \\\n    pcre2_compile_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_code_free(pcre2_code *); \\\nPCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \\\n  pcre2_code_copy(const pcre2_code *); \\\nPCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \\\n  pcre2_code_copy_with_tables(const pcre2_code *);\n\n\n/* Functions that give information about a compiled pattern. */\n\n#define PCRE2_PATTERN_INFO_FUNCTIONS \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_pattern_info(const pcre2_code *, uint32_t, void *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_callout_enumerate(const pcre2_code *, \\\n    int (*)(pcre2_callout_enumerate_block *, void *), void *);\n\n\n/* Functions for running a match and inspecting the result. */\n\n#define PCRE2_MATCH_FUNCTIONS \\\nPCRE2_EXP_DECL pcre2_match_data *PCRE2_CALL_CONVENTION \\\n  pcre2_match_data_create(uint32_t, pcre2_general_context *); \\\nPCRE2_EXP_DECL pcre2_match_data *PCRE2_CALL_CONVENTION \\\n  pcre2_match_data_create_from_pattern(const pcre2_code *, \\\n    pcre2_general_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_match_data_free(pcre2_match_data *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_dfa_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \\\n    uint32_t, pcre2_match_data *, pcre2_match_context *, int *, PCRE2_SIZE); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \\\n    uint32_t, pcre2_match_data *, pcre2_match_context *); \\\nPCRE2_EXP_DECL PCRE2_SPTR PCRE2_CALL_CONVENTION \\\n  pcre2_get_mark(pcre2_match_data *); \\\nPCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \\\n  pcre2_get_match_data_size(pcre2_match_data *); \\\nPCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \\\n  pcre2_get_match_data_heapframes_size(pcre2_match_data *); \\\nPCRE2_EXP_DECL uint32_t PCRE2_CALL_CONVENTION \\\n  pcre2_get_ovector_count(pcre2_match_data *); \\\nPCRE2_EXP_DECL PCRE2_SIZE *PCRE2_CALL_CONVENTION \\\n  pcre2_get_ovector_pointer(pcre2_match_data *); \\\nPCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \\\n  pcre2_get_startchar(pcre2_match_data *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_next_match(pcre2_match_data *, PCRE2_SIZE *, uint32_t *);\n\n\n/* Convenience functions for handling matched substrings. */\n\n#define PCRE2_SUBSTRING_FUNCTIONS \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_copy_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_UCHAR *, \\\n    PCRE2_SIZE *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_copy_bynumber(pcre2_match_data *, uint32_t, PCRE2_UCHAR *, \\\n    PCRE2_SIZE *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_substring_free(PCRE2_UCHAR *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_get_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_UCHAR **, \\\n    PCRE2_SIZE *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_get_bynumber(pcre2_match_data *, uint32_t, PCRE2_UCHAR **, \\\n    PCRE2_SIZE *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_length_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_SIZE *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_length_bynumber(pcre2_match_data *, uint32_t, PCRE2_SIZE *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_nametable_scan(const pcre2_code *, PCRE2_SPTR, PCRE2_SPTR *, \\\n    PCRE2_SPTR *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_number_from_name(const pcre2_code *, PCRE2_SPTR); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_substring_list_free(PCRE2_UCHAR **); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_list_get(pcre2_match_data *, PCRE2_UCHAR ***, PCRE2_SIZE **);\n\n\n/* Functions for serializing / deserializing compiled patterns. */\n\n#define PCRE2_SERIALIZE_FUNCTIONS \\\nPCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \\\n  pcre2_serialize_encode(const pcre2_code **, int32_t, uint8_t **, \\\n    PCRE2_SIZE *, pcre2_general_context *); \\\nPCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \\\n  pcre2_serialize_decode(pcre2_code **, int32_t, const uint8_t *, \\\n    pcre2_general_context *); \\\nPCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \\\n  pcre2_serialize_get_number_of_codes(const uint8_t *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_serialize_free(uint8_t *);\n\n\n/* Convenience function for match + substitute. */\n\n#define PCRE2_SUBSTITUTE_FUNCTION \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substitute(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \\\n    uint32_t, pcre2_match_data *, pcre2_match_context *, PCRE2_SPTR, \\\n    PCRE2_SIZE, PCRE2_UCHAR *, PCRE2_SIZE *);\n\n\n/* Functions for converting pattern source strings. */\n\n#define PCRE2_CONVERT_FUNCTIONS \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_pattern_convert(PCRE2_SPTR, PCRE2_SIZE, uint32_t, PCRE2_UCHAR **, \\\n    PCRE2_SIZE *, pcre2_convert_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_converted_pattern_free(PCRE2_UCHAR *);\n\n\n/* Functions for JIT processing */\n\n#define PCRE2_JIT_FUNCTIONS \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_jit_compile(pcre2_code *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_jit_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \\\n    uint32_t, pcre2_match_data *, pcre2_match_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_jit_free_unused_memory(pcre2_general_context *); \\\nPCRE2_EXP_DECL pcre2_jit_stack *PCRE2_CALL_CONVENTION \\\n  pcre2_jit_stack_create(size_t, size_t, pcre2_general_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_jit_stack_assign(pcre2_match_context *, pcre2_jit_callback, void *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_jit_stack_free(pcre2_jit_stack *);\n\n\n/* Other miscellaneous functions. */\n\n#define PCRE2_OTHER_FUNCTIONS \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_get_error_message(int, PCRE2_UCHAR *, PCRE2_SIZE); \\\nPCRE2_EXP_DECL const uint8_t *PCRE2_CALL_CONVENTION \\\n  pcre2_maketables(pcre2_general_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_maketables_free(pcre2_general_context *, const uint8_t *);\n\n/* Define macros that generate width-specific names from generic versions. The\nthree-level macro scheme is necessary to get the macros expanded when we want\nthem to be. First we get the width from PCRE2_LOCAL_WIDTH, which is used for\ngenerating three versions of everything below. After that, PCRE2_SUFFIX will be\nre-defined to use PCRE2_CODE_UNIT_WIDTH, for use when macros such as\npcre2_compile are called by application code. */\n\n#define PCRE2_JOIN(a,b) a ## b\n#define PCRE2_GLUE(a,b) PCRE2_JOIN(a,b)\n#define PCRE2_SUFFIX(a) PCRE2_GLUE(a,PCRE2_LOCAL_WIDTH)\n\n\n/* Data types */\n\n#define PCRE2_UCHAR                 PCRE2_SUFFIX(PCRE2_UCHAR)\n#define PCRE2_SPTR                  PCRE2_SUFFIX(PCRE2_SPTR)\n\n#define pcre2_code                  PCRE2_SUFFIX(pcre2_code_)\n#define pcre2_jit_callback          PCRE2_SUFFIX(pcre2_jit_callback_)\n#define pcre2_jit_stack             PCRE2_SUFFIX(pcre2_jit_stack_)\n\n#define pcre2_real_code             PCRE2_SUFFIX(pcre2_real_code_)\n#define pcre2_real_general_context  PCRE2_SUFFIX(pcre2_real_general_context_)\n#define pcre2_real_compile_context  PCRE2_SUFFIX(pcre2_real_compile_context_)\n#define pcre2_real_convert_context  PCRE2_SUFFIX(pcre2_real_convert_context_)\n#define pcre2_real_match_context    PCRE2_SUFFIX(pcre2_real_match_context_)\n#define pcre2_real_jit_stack        PCRE2_SUFFIX(pcre2_real_jit_stack_)\n#define pcre2_real_match_data       PCRE2_SUFFIX(pcre2_real_match_data_)\n\n\n/* Data blocks */\n\n#define pcre2_callout_block            PCRE2_SUFFIX(pcre2_callout_block_)\n#define pcre2_callout_enumerate_block  PCRE2_SUFFIX(pcre2_callout_enumerate_block_)\n#define pcre2_substitute_callout_block PCRE2_SUFFIX(pcre2_substitute_callout_block_)\n#define pcre2_general_context          PCRE2_SUFFIX(pcre2_general_context_)\n#define pcre2_compile_context          PCRE2_SUFFIX(pcre2_compile_context_)\n#define pcre2_convert_context          PCRE2_SUFFIX(pcre2_convert_context_)\n#define pcre2_match_context            PCRE2_SUFFIX(pcre2_match_context_)\n#define pcre2_match_data               PCRE2_SUFFIX(pcre2_match_data_)\n\n\n/* Functions: the complete list in alphabetical order */\n\n#define pcre2_callout_enumerate               PCRE2_SUFFIX(pcre2_callout_enumerate_)\n#define pcre2_code_copy                       PCRE2_SUFFIX(pcre2_code_copy_)\n#define pcre2_code_copy_with_tables           PCRE2_SUFFIX(pcre2_code_copy_with_tables_)\n#define pcre2_code_free                       PCRE2_SUFFIX(pcre2_code_free_)\n#define pcre2_compile                         PCRE2_SUFFIX(pcre2_compile_)\n#define pcre2_compile_context_copy            PCRE2_SUFFIX(pcre2_compile_context_copy_)\n#define pcre2_compile_context_create          PCRE2_SUFFIX(pcre2_compile_context_create_)\n#define pcre2_compile_context_free            PCRE2_SUFFIX(pcre2_compile_context_free_)\n#define pcre2_config                          PCRE2_SUFFIX(pcre2_config_)\n#define pcre2_convert_context_copy            PCRE2_SUFFIX(pcre2_convert_context_copy_)\n#define pcre2_convert_context_create          PCRE2_SUFFIX(pcre2_convert_context_create_)\n#define pcre2_convert_context_free            PCRE2_SUFFIX(pcre2_convert_context_free_)\n#define pcre2_converted_pattern_free          PCRE2_SUFFIX(pcre2_converted_pattern_free_)\n#define pcre2_dfa_match                       PCRE2_SUFFIX(pcre2_dfa_match_)\n#define pcre2_general_context_copy            PCRE2_SUFFIX(pcre2_general_context_copy_)\n#define pcre2_general_context_create          PCRE2_SUFFIX(pcre2_general_context_create_)\n#define pcre2_general_context_free            PCRE2_SUFFIX(pcre2_general_context_free_)\n#define pcre2_get_error_message               PCRE2_SUFFIX(pcre2_get_error_message_)\n#define pcre2_get_mark                        PCRE2_SUFFIX(pcre2_get_mark_)\n#define pcre2_get_match_data_heapframes_size  PCRE2_SUFFIX(pcre2_get_match_data_heapframes_size_)\n#define pcre2_get_match_data_size             PCRE2_SUFFIX(pcre2_get_match_data_size_)\n#define pcre2_get_ovector_pointer             PCRE2_SUFFIX(pcre2_get_ovector_pointer_)\n#define pcre2_get_ovector_count               PCRE2_SUFFIX(pcre2_get_ovector_count_)\n#define pcre2_get_startchar                   PCRE2_SUFFIX(pcre2_get_startchar_)\n#define pcre2_jit_compile                     PCRE2_SUFFIX(pcre2_jit_compile_)\n#define pcre2_jit_match                       PCRE2_SUFFIX(pcre2_jit_match_)\n#define pcre2_jit_free_unused_memory          PCRE2_SUFFIX(pcre2_jit_free_unused_memory_)\n#define pcre2_jit_stack_assign                PCRE2_SUFFIX(pcre2_jit_stack_assign_)\n#define pcre2_jit_stack_create                PCRE2_SUFFIX(pcre2_jit_stack_create_)\n#define pcre2_jit_stack_free                  PCRE2_SUFFIX(pcre2_jit_stack_free_)\n#define pcre2_maketables                      PCRE2_SUFFIX(pcre2_maketables_)\n#define pcre2_maketables_free                 PCRE2_SUFFIX(pcre2_maketables_free_)\n#define pcre2_match                           PCRE2_SUFFIX(pcre2_match_)\n#define pcre2_match_context_copy              PCRE2_SUFFIX(pcre2_match_context_copy_)\n#define pcre2_match_context_create            PCRE2_SUFFIX(pcre2_match_context_create_)\n#define pcre2_match_context_free              PCRE2_SUFFIX(pcre2_match_context_free_)\n#define pcre2_match_data_create               PCRE2_SUFFIX(pcre2_match_data_create_)\n#define pcre2_match_data_create_from_pattern  PCRE2_SUFFIX(pcre2_match_data_create_from_pattern_)\n#define pcre2_match_data_free                 PCRE2_SUFFIX(pcre2_match_data_free_)\n#define pcre2_next_match                      PCRE2_SUFFIX(pcre2_next_match_)\n#define pcre2_pattern_convert                 PCRE2_SUFFIX(pcre2_pattern_convert_)\n#define pcre2_pattern_info                    PCRE2_SUFFIX(pcre2_pattern_info_)\n#define pcre2_serialize_decode                PCRE2_SUFFIX(pcre2_serialize_decode_)\n#define pcre2_serialize_encode                PCRE2_SUFFIX(pcre2_serialize_encode_)\n#define pcre2_serialize_free                  PCRE2_SUFFIX(pcre2_serialize_free_)\n#define pcre2_serialize_get_number_of_codes   PCRE2_SUFFIX(pcre2_serialize_get_number_of_codes_)\n#define pcre2_set_bsr                         PCRE2_SUFFIX(pcre2_set_bsr_)\n#define pcre2_set_callout                     PCRE2_SUFFIX(pcre2_set_callout_)\n#define pcre2_set_character_tables            PCRE2_SUFFIX(pcre2_set_character_tables_)\n#define pcre2_set_compile_extra_options       PCRE2_SUFFIX(pcre2_set_compile_extra_options_)\n#define pcre2_set_compile_recursion_guard     PCRE2_SUFFIX(pcre2_set_compile_recursion_guard_)\n#define pcre2_set_depth_limit                 PCRE2_SUFFIX(pcre2_set_depth_limit_)\n#define pcre2_set_glob_escape                 PCRE2_SUFFIX(pcre2_set_glob_escape_)\n#define pcre2_set_glob_separator              PCRE2_SUFFIX(pcre2_set_glob_separator_)\n#define pcre2_set_heap_limit                  PCRE2_SUFFIX(pcre2_set_heap_limit_)\n#define pcre2_set_match_limit                 PCRE2_SUFFIX(pcre2_set_match_limit_)\n#define pcre2_set_max_varlookbehind           PCRE2_SUFFIX(pcre2_set_max_varlookbehind_)\n#define pcre2_set_max_pattern_length          PCRE2_SUFFIX(pcre2_set_max_pattern_length_)\n#define pcre2_set_max_pattern_compiled_length PCRE2_SUFFIX(pcre2_set_max_pattern_compiled_length_)\n#define pcre2_set_newline                     PCRE2_SUFFIX(pcre2_set_newline_)\n#define pcre2_set_parens_nest_limit           PCRE2_SUFFIX(pcre2_set_parens_nest_limit_)\n#define pcre2_set_offset_limit                PCRE2_SUFFIX(pcre2_set_offset_limit_)\n#define pcre2_set_optimize                    PCRE2_SUFFIX(pcre2_set_optimize_)\n#define pcre2_set_substitute_callout          PCRE2_SUFFIX(pcre2_set_substitute_callout_)\n#define pcre2_set_substitute_case_callout     PCRE2_SUFFIX(pcre2_set_substitute_case_callout_)\n#define pcre2_substitute                      PCRE2_SUFFIX(pcre2_substitute_)\n#define pcre2_substring_copy_byname           PCRE2_SUFFIX(pcre2_substring_copy_byname_)\n#define pcre2_substring_copy_bynumber         PCRE2_SUFFIX(pcre2_substring_copy_bynumber_)\n#define pcre2_substring_free                  PCRE2_SUFFIX(pcre2_substring_free_)\n#define pcre2_substring_get_byname            PCRE2_SUFFIX(pcre2_substring_get_byname_)\n#define pcre2_substring_get_bynumber          PCRE2_SUFFIX(pcre2_substring_get_bynumber_)\n#define pcre2_substring_length_byname         PCRE2_SUFFIX(pcre2_substring_length_byname_)\n#define pcre2_substring_length_bynumber       PCRE2_SUFFIX(pcre2_substring_length_bynumber_)\n#define pcre2_substring_list_get              PCRE2_SUFFIX(pcre2_substring_list_get_)\n#define pcre2_substring_list_free             PCRE2_SUFFIX(pcre2_substring_list_free_)\n#define pcre2_substring_nametable_scan        PCRE2_SUFFIX(pcre2_substring_nametable_scan_)\n#define pcre2_substring_number_from_name      PCRE2_SUFFIX(pcre2_substring_number_from_name_)\n\n/* Keep this old function name for backwards compatibility */\n#define pcre2_set_recursion_limit PCRE2_SUFFIX(pcre2_set_recursion_limit_)\n\n/* Keep this obsolete function for backwards compatibility: it is now a noop. */\n#define pcre2_set_recursion_memory_management PCRE2_SUFFIX(pcre2_set_recursion_memory_management_)\n\n/* Now generate all three sets of width-specific structures and function\nprototypes. */\n\n#define PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS \\\nPCRE2_TYPES_LIST \\\nPCRE2_STRUCTURE_LIST \\\nPCRE2_GENERAL_INFO_FUNCTIONS \\\nPCRE2_GENERAL_CONTEXT_FUNCTIONS \\\nPCRE2_COMPILE_CONTEXT_FUNCTIONS \\\nPCRE2_CONVERT_CONTEXT_FUNCTIONS \\\nPCRE2_CONVERT_FUNCTIONS \\\nPCRE2_MATCH_CONTEXT_FUNCTIONS \\\nPCRE2_COMPILE_FUNCTIONS \\\nPCRE2_PATTERN_INFO_FUNCTIONS \\\nPCRE2_MATCH_FUNCTIONS \\\nPCRE2_SUBSTRING_FUNCTIONS \\\nPCRE2_SERIALIZE_FUNCTIONS \\\nPCRE2_SUBSTITUTE_FUNCTION \\\nPCRE2_JIT_FUNCTIONS \\\nPCRE2_OTHER_FUNCTIONS\n\n#define PCRE2_LOCAL_WIDTH 8\nPCRE2_TYPES_STRUCTURES_AND_FUNCTIONS\n#undef PCRE2_LOCAL_WIDTH\n\n#define PCRE2_LOCAL_WIDTH 16\nPCRE2_TYPES_STRUCTURES_AND_FUNCTIONS\n#undef PCRE2_LOCAL_WIDTH\n\n#define PCRE2_LOCAL_WIDTH 32\nPCRE2_TYPES_STRUCTURES_AND_FUNCTIONS\n#undef PCRE2_LOCAL_WIDTH\n\n/* Undefine the list macros; they are no longer needed. */\n\n#undef PCRE2_TYPES_LIST\n#undef PCRE2_STRUCTURE_LIST\n#undef PCRE2_GENERAL_INFO_FUNCTIONS\n#undef PCRE2_GENERAL_CONTEXT_FUNCTIONS\n#undef PCRE2_COMPILE_CONTEXT_FUNCTIONS\n#undef PCRE2_CONVERT_CONTEXT_FUNCTIONS\n#undef PCRE2_MATCH_CONTEXT_FUNCTIONS\n#undef PCRE2_COMPILE_FUNCTIONS\n#undef PCRE2_PATTERN_INFO_FUNCTIONS\n#undef PCRE2_MATCH_FUNCTIONS\n#undef PCRE2_SUBSTRING_FUNCTIONS\n#undef PCRE2_SERIALIZE_FUNCTIONS\n#undef PCRE2_SUBSTITUTE_FUNCTION\n#undef PCRE2_JIT_FUNCTIONS\n#undef PCRE2_OTHER_FUNCTIONS\n#undef PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS\n\n/* PCRE2_CODE_UNIT_WIDTH must be defined. If it is 8, 16, or 32, redefine\nPCRE2_SUFFIX to use it. If it is 0, undefine the other macros and make\nPCRE2_SUFFIX a no-op. Otherwise, generate an error. */\n\n#undef PCRE2_SUFFIX\n#ifndef PCRE2_CODE_UNIT_WIDTH\n#error PCRE2_CODE_UNIT_WIDTH must be defined before including pcre2.h.\n#error Use 8, 16, or 32; or 0 for a multi-width application.\n#else  /* PCRE2_CODE_UNIT_WIDTH is defined */\n#if PCRE2_CODE_UNIT_WIDTH == 8 || \\\n    PCRE2_CODE_UNIT_WIDTH == 16 || \\\n    PCRE2_CODE_UNIT_WIDTH == 32\n#define PCRE2_SUFFIX(a) PCRE2_GLUE(a, PCRE2_CODE_UNIT_WIDTH)\n#elif PCRE2_CODE_UNIT_WIDTH == 0\n#undef PCRE2_JOIN\n#undef PCRE2_GLUE\n#define PCRE2_SUFFIX(a) a\n#else\n#error PCRE2_CODE_UNIT_WIDTH must be 0, 8, 16, or 32.\n#endif\n#endif  /* PCRE2_CODE_UNIT_WIDTH is defined */\n\n#ifdef __cplusplus\n}  /* extern \"C\" */\n#endif\n\n#endif  /* PCRE2_H_IDEMPOTENT_GUARD */\n\n/* End of pcre2.h */\n"
  },
  {
    "path": "src/pcre2.h.in",
    "content": "/*************************************************\n*       Perl-Compatible Regular Expressions      *\n*************************************************/\n\n/* This is the public header file for the PCRE library, second API, to be\n#included by applications that call PCRE2 functions.\n\n           Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n#ifndef PCRE2_H_IDEMPOTENT_GUARD\n#define PCRE2_H_IDEMPOTENT_GUARD\n\n/* The current PCRE version information. */\n\n#define PCRE2_MAJOR           @PCRE2_MAJOR@\n#define PCRE2_MINOR           @PCRE2_MINOR@\n#define PCRE2_PRERELEASE      @PCRE2_PRERELEASE@\n#define PCRE2_DATE            @PCRE2_DATE@\n\n/* When an application links to a PCRE2 DLL in Windows, the symbols that are\nimported have to be identified as such. When building PCRE2, the appropriate\nexport setting is defined in pcre2_internal.h, which includes this file. So, we\ndon't change existing definitions of PCRE2_EXP_DECL.\n\nBy default, we use the standard \"extern\" declarations. */\n\n#ifndef PCRE2_EXP_DECL\n#  if defined(_WIN32) && !defined(PCRE2_STATIC)\n#    define PCRE2_EXP_DECL  extern __declspec(dllimport)\n#  elif defined __cplusplus\n#    define PCRE2_EXP_DECL  extern \"C\"\n#  else\n#    define PCRE2_EXP_DECL  extern\n#  endif\n#endif\n\n/* When compiling with the MSVC compiler, it is sometimes necessary to include\na \"calling convention\" before exported function names. For example:\n\n  void __cdecl function(....)\n\nmight be needed. In order to make this easy, all the exported functions have\nPCRE2_CALL_CONVENTION just before their names.\n\nPCRE2 normally uses the platform's standard calling convention, so this should\nnot be set unless you know you need it. */\n\n#ifndef PCRE2_CALL_CONVENTION\n#define PCRE2_CALL_CONVENTION\n#endif\n\n/* Have to include limits.h, stdlib.h, and inttypes.h to ensure that size_t and\nuint8_t, UCHAR_MAX, etc are defined. Some systems that do have inttypes.h do\nnot have stdint.h, which is why we use inttypes.h, which according to the C\nstandard is a superset of stdint.h. If inttypes.h is not available the build\nwill break and the relevant values must be provided by some other means. */\n\n#include <limits.h>\n#include <stdlib.h>\n#include <inttypes.h>\n\n/* Allow for C++ users compiling this directly. */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* The following option bits can be passed to pcre2_compile(), pcre2_match(),\nor pcre2_dfa_match(). PCRE2_NO_UTF_CHECK affects only the function to which it\nis passed. Put these bits at the most significant end of the options word so\nothers can be added next to them */\n\n#define PCRE2_ANCHORED            0x80000000u\n#define PCRE2_NO_UTF_CHECK        0x40000000u\n#define PCRE2_ENDANCHORED         0x20000000u\n\n/* The following option bits can be passed only to pcre2_compile(). However,\nthey may affect compilation, JIT compilation, and/or interpretive execution.\nThe following tags indicate which:\n\nC   alters what is compiled by pcre2_compile()\nJ   alters what is compiled by pcre2_jit_compile()\nM   is inspected during pcre2_match() execution\nD   is inspected during pcre2_dfa_match() execution\n*/\n\n#define PCRE2_ALLOW_EMPTY_CLASS   0x00000001u  /* C       */\n#define PCRE2_ALT_BSUX            0x00000002u  /* C       */\n#define PCRE2_AUTO_CALLOUT        0x00000004u  /* C       */\n#define PCRE2_CASELESS            0x00000008u  /* C       */\n#define PCRE2_DOLLAR_ENDONLY      0x00000010u  /*   J M D */\n#define PCRE2_DOTALL              0x00000020u  /* C       */\n#define PCRE2_DUPNAMES            0x00000040u  /* C       */\n#define PCRE2_EXTENDED            0x00000080u  /* C       */\n#define PCRE2_FIRSTLINE           0x00000100u  /*   J M D */\n#define PCRE2_MATCH_UNSET_BACKREF 0x00000200u  /* C J M   */\n#define PCRE2_MULTILINE           0x00000400u  /* C       */\n#define PCRE2_NEVER_UCP           0x00000800u  /* C       */\n#define PCRE2_NEVER_UTF           0x00001000u  /* C       */\n#define PCRE2_NO_AUTO_CAPTURE     0x00002000u  /* C       */\n#define PCRE2_NO_AUTO_POSSESS     0x00004000u  /* C       */\n#define PCRE2_NO_DOTSTAR_ANCHOR   0x00008000u  /* C       */\n#define PCRE2_NO_START_OPTIMIZE   0x00010000u  /*   J M D */\n#define PCRE2_UCP                 0x00020000u  /* C J M D */\n#define PCRE2_UNGREEDY            0x00040000u  /* C       */\n#define PCRE2_UTF                 0x00080000u  /* C J M D */\n#define PCRE2_NEVER_BACKSLASH_C   0x00100000u  /* C       */\n#define PCRE2_ALT_CIRCUMFLEX      0x00200000u  /*   J M D */\n#define PCRE2_ALT_VERBNAMES       0x00400000u  /* C       */\n#define PCRE2_USE_OFFSET_LIMIT    0x00800000u  /*   J M D */\n#define PCRE2_EXTENDED_MORE       0x01000000u  /* C       */\n#define PCRE2_LITERAL             0x02000000u  /* C       */\n#define PCRE2_MATCH_INVALID_UTF   0x04000000u  /*   J M D */\n#define PCRE2_ALT_EXTENDED_CLASS  0x08000000u  /* C       */\n\n/* An additional compile options word is available in the compile context. */\n\n#define PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES  0x00000001u  /* C */\n#define PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL    0x00000002u  /* C */\n#define PCRE2_EXTRA_MATCH_WORD               0x00000004u  /* C */\n#define PCRE2_EXTRA_MATCH_LINE               0x00000008u  /* C */\n#define PCRE2_EXTRA_ESCAPED_CR_IS_LF         0x00000010u  /* C */\n#define PCRE2_EXTRA_ALT_BSUX                 0x00000020u  /* C */\n#define PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK     0x00000040u  /* C */\n#define PCRE2_EXTRA_CASELESS_RESTRICT        0x00000080u  /* C */\n#define PCRE2_EXTRA_ASCII_BSD                0x00000100u  /* C */\n#define PCRE2_EXTRA_ASCII_BSS                0x00000200u  /* C */\n#define PCRE2_EXTRA_ASCII_BSW                0x00000400u  /* C */\n#define PCRE2_EXTRA_ASCII_POSIX              0x00000800u  /* C */\n#define PCRE2_EXTRA_ASCII_DIGIT              0x00001000u  /* C */\n#define PCRE2_EXTRA_PYTHON_OCTAL             0x00002000u  /* C */\n#define PCRE2_EXTRA_NO_BS0                   0x00004000u  /* C */\n#define PCRE2_EXTRA_NEVER_CALLOUT            0x00008000u  /* C */\n#define PCRE2_EXTRA_TURKISH_CASING           0x00010000u  /* C */\n\n/* These are for pcre2_jit_compile(). */\n\n#define PCRE2_JIT_COMPLETE        0x00000001u  /* For full matching */\n#define PCRE2_JIT_PARTIAL_SOFT    0x00000002u\n#define PCRE2_JIT_PARTIAL_HARD    0x00000004u\n#define PCRE2_JIT_INVALID_UTF     0x00000100u\n#define PCRE2_JIT_TEST_ALLOC      0x00000200u\n\n/* These are for pcre2_match(), pcre2_dfa_match(), pcre2_jit_match(), and\npcre2_substitute(). Some are allowed only for one of the functions, and in\nthese cases it is noted below. Note that PCRE2_ANCHORED, PCRE2_ENDANCHORED and\nPCRE2_NO_UTF_CHECK can also be passed to these functions (though\npcre2_jit_match() ignores the latter since it bypasses all sanity checks). */\n\n#define PCRE2_NOTBOL                      0x00000001u\n#define PCRE2_NOTEOL                      0x00000002u\n#define PCRE2_NOTEMPTY                    0x00000004u  /* ) These two must be kept */\n#define PCRE2_NOTEMPTY_ATSTART            0x00000008u  /* ) adjacent to each other. */\n#define PCRE2_PARTIAL_SOFT                0x00000010u\n#define PCRE2_PARTIAL_HARD                0x00000020u\n#define PCRE2_DFA_RESTART                 0x00000040u  /* pcre2_dfa_match() only */\n#define PCRE2_DFA_SHORTEST                0x00000080u  /* pcre2_dfa_match() only */\n#define PCRE2_SUBSTITUTE_GLOBAL           0x00000100u  /* pcre2_substitute() only */\n#define PCRE2_SUBSTITUTE_EXTENDED         0x00000200u  /* pcre2_substitute() only */\n#define PCRE2_SUBSTITUTE_UNSET_EMPTY      0x00000400u  /* pcre2_substitute() only */\n#define PCRE2_SUBSTITUTE_UNKNOWN_UNSET    0x00000800u  /* pcre2_substitute() only */\n#define PCRE2_SUBSTITUTE_OVERFLOW_LENGTH  0x00001000u  /* pcre2_substitute() only */\n#define PCRE2_NO_JIT                      0x00002000u  /* not for pcre2_dfa_match() */\n#define PCRE2_COPY_MATCHED_SUBJECT        0x00004000u\n#define PCRE2_SUBSTITUTE_LITERAL          0x00008000u  /* pcre2_substitute() only */\n#define PCRE2_SUBSTITUTE_MATCHED          0x00010000u  /* pcre2_substitute() only */\n#define PCRE2_SUBSTITUTE_REPLACEMENT_ONLY 0x00020000u  /* pcre2_substitute() only */\n#define PCRE2_DISABLE_RECURSELOOP_CHECK   0x00040000u  /* not for pcre2_dfa_match() or pcre2_jit_match() */\n\n/* Options for pcre2_pattern_convert(). */\n\n#define PCRE2_CONVERT_UTF                    0x00000001u\n#define PCRE2_CONVERT_NO_UTF_CHECK           0x00000002u\n#define PCRE2_CONVERT_POSIX_BASIC            0x00000004u\n#define PCRE2_CONVERT_POSIX_EXTENDED         0x00000008u\n#define PCRE2_CONVERT_GLOB                   0x00000010u\n#define PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR 0x00000030u\n#define PCRE2_CONVERT_GLOB_NO_STARSTAR       0x00000050u\n\n/* Newline and \\R settings, for use in compile contexts. The newline values\nmust be kept in step with values set in config.h and both sets must all be\ngreater than zero. */\n\n#define PCRE2_NEWLINE_CR          1\n#define PCRE2_NEWLINE_LF          2\n#define PCRE2_NEWLINE_CRLF        3\n#define PCRE2_NEWLINE_ANY         4\n#define PCRE2_NEWLINE_ANYCRLF     5\n#define PCRE2_NEWLINE_NUL         6\n\n#define PCRE2_BSR_UNICODE         1\n#define PCRE2_BSR_ANYCRLF         2\n\n/* Error codes for pcre2_compile(). Some of these are also used by\npcre2_pattern_convert(). */\n\n#define PCRE2_ERROR_END_BACKSLASH                  101\n#define PCRE2_ERROR_END_BACKSLASH_C                102\n#define PCRE2_ERROR_UNKNOWN_ESCAPE                 103\n#define PCRE2_ERROR_QUANTIFIER_OUT_OF_ORDER        104\n#define PCRE2_ERROR_QUANTIFIER_TOO_BIG             105\n#define PCRE2_ERROR_MISSING_SQUARE_BRACKET         106\n#define PCRE2_ERROR_ESCAPE_INVALID_IN_CLASS        107\n#define PCRE2_ERROR_CLASS_RANGE_ORDER              108\n#define PCRE2_ERROR_QUANTIFIER_INVALID             109\n#define PCRE2_ERROR_INTERNAL_UNEXPECTED_REPEAT     110\n#define PCRE2_ERROR_INVALID_AFTER_PARENS_QUERY     111\n#define PCRE2_ERROR_POSIX_CLASS_NOT_IN_CLASS       112\n#define PCRE2_ERROR_POSIX_NO_SUPPORT_COLLATING     113\n#define PCRE2_ERROR_MISSING_CLOSING_PARENTHESIS    114\n#define PCRE2_ERROR_BAD_SUBPATTERN_REFERENCE       115\n#define PCRE2_ERROR_NULL_PATTERN                   116\n#define PCRE2_ERROR_BAD_OPTIONS                    117\n#define PCRE2_ERROR_MISSING_COMMENT_CLOSING        118\n#define PCRE2_ERROR_PARENTHESES_NEST_TOO_DEEP      119\n#define PCRE2_ERROR_PATTERN_TOO_LARGE              120\n#define PCRE2_ERROR_HEAP_FAILED                    121\n#define PCRE2_ERROR_UNMATCHED_CLOSING_PARENTHESIS  122\n#define PCRE2_ERROR_INTERNAL_CODE_OVERFLOW         123\n#define PCRE2_ERROR_MISSING_CONDITION_CLOSING      124\n#define PCRE2_ERROR_LOOKBEHIND_NOT_FIXED_LENGTH    125\n#define PCRE2_ERROR_ZERO_RELATIVE_REFERENCE        126\n#define PCRE2_ERROR_TOO_MANY_CONDITION_BRANCHES    127\n#define PCRE2_ERROR_CONDITION_ASSERTION_EXPECTED   128\n#define PCRE2_ERROR_BAD_RELATIVE_REFERENCE         129\n#define PCRE2_ERROR_UNKNOWN_POSIX_CLASS            130\n#define PCRE2_ERROR_INTERNAL_STUDY_ERROR           131\n#define PCRE2_ERROR_UNICODE_NOT_SUPPORTED          132\n#define PCRE2_ERROR_PARENTHESES_STACK_CHECK        133\n#define PCRE2_ERROR_CODE_POINT_TOO_BIG             134\n#define PCRE2_ERROR_LOOKBEHIND_TOO_COMPLICATED     135\n#define PCRE2_ERROR_LOOKBEHIND_INVALID_BACKSLASH_C 136\n#define PCRE2_ERROR_UNSUPPORTED_ESCAPE_SEQUENCE    137\n#define PCRE2_ERROR_CALLOUT_NUMBER_TOO_BIG         138\n#define PCRE2_ERROR_MISSING_CALLOUT_CLOSING        139\n#define PCRE2_ERROR_ESCAPE_INVALID_IN_VERB         140\n#define PCRE2_ERROR_UNRECOGNIZED_AFTER_QUERY_P     141\n#define PCRE2_ERROR_MISSING_NAME_TERMINATOR        142\n#define PCRE2_ERROR_DUPLICATE_SUBPATTERN_NAME      143\n#define PCRE2_ERROR_INVALID_SUBPATTERN_NAME        144\n#define PCRE2_ERROR_UNICODE_PROPERTIES_UNAVAILABLE 145\n#define PCRE2_ERROR_MALFORMED_UNICODE_PROPERTY     146\n#define PCRE2_ERROR_UNKNOWN_UNICODE_PROPERTY       147\n#define PCRE2_ERROR_SUBPATTERN_NAME_TOO_LONG       148\n#define PCRE2_ERROR_TOO_MANY_NAMED_SUBPATTERNS     149\n#define PCRE2_ERROR_CLASS_INVALID_RANGE            150\n#define PCRE2_ERROR_OCTAL_BYTE_TOO_BIG             151\n#define PCRE2_ERROR_INTERNAL_OVERRAN_WORKSPACE     152\n#define PCRE2_ERROR_INTERNAL_MISSING_SUBPATTERN    153\n#define PCRE2_ERROR_DEFINE_TOO_MANY_BRANCHES       154\n#define PCRE2_ERROR_BACKSLASH_O_MISSING_BRACE      155\n#define PCRE2_ERROR_INTERNAL_UNKNOWN_NEWLINE       156\n#define PCRE2_ERROR_BACKSLASH_G_SYNTAX             157\n#define PCRE2_ERROR_PARENS_QUERY_R_MISSING_CLOSING 158\n/* Error 159 is obsolete and should now never occur */\n#define PCRE2_ERROR_VERB_ARGUMENT_NOT_ALLOWED      159\n#define PCRE2_ERROR_VERB_UNKNOWN                   160\n#define PCRE2_ERROR_SUBPATTERN_NUMBER_TOO_BIG      161\n#define PCRE2_ERROR_SUBPATTERN_NAME_EXPECTED       162\n#define PCRE2_ERROR_INTERNAL_PARSED_OVERFLOW       163\n#define PCRE2_ERROR_INVALID_OCTAL                  164\n#define PCRE2_ERROR_SUBPATTERN_NAMES_MISMATCH      165\n#define PCRE2_ERROR_MARK_MISSING_ARGUMENT          166\n#define PCRE2_ERROR_INVALID_HEXADECIMAL            167\n#define PCRE2_ERROR_BACKSLASH_C_SYNTAX             168\n#define PCRE2_ERROR_BACKSLASH_K_SYNTAX             169\n#define PCRE2_ERROR_INTERNAL_BAD_CODE_LOOKBEHINDS  170\n#define PCRE2_ERROR_BACKSLASH_N_IN_CLASS           171\n#define PCRE2_ERROR_CALLOUT_STRING_TOO_LONG        172\n#define PCRE2_ERROR_UNICODE_DISALLOWED_CODE_POINT  173\n#define PCRE2_ERROR_UTF_IS_DISABLED                174\n#define PCRE2_ERROR_UCP_IS_DISABLED                175\n#define PCRE2_ERROR_VERB_NAME_TOO_LONG             176\n#define PCRE2_ERROR_BACKSLASH_U_CODE_POINT_TOO_BIG 177\n#define PCRE2_ERROR_MISSING_OCTAL_OR_HEX_DIGITS    178\n#define PCRE2_ERROR_VERSION_CONDITION_SYNTAX       179\n#define PCRE2_ERROR_INTERNAL_BAD_CODE_AUTO_POSSESS 180\n#define PCRE2_ERROR_CALLOUT_NO_STRING_DELIMITER    181\n#define PCRE2_ERROR_CALLOUT_BAD_STRING_DELIMITER   182\n#define PCRE2_ERROR_BACKSLASH_C_CALLER_DISABLED    183\n#define PCRE2_ERROR_QUERY_BARJX_NEST_TOO_DEEP      184\n#define PCRE2_ERROR_BACKSLASH_C_LIBRARY_DISABLED   185\n#define PCRE2_ERROR_PATTERN_TOO_COMPLICATED        186\n#define PCRE2_ERROR_LOOKBEHIND_TOO_LONG            187\n#define PCRE2_ERROR_PATTERN_STRING_TOO_LONG        188\n#define PCRE2_ERROR_INTERNAL_BAD_CODE              189\n#define PCRE2_ERROR_INTERNAL_BAD_CODE_IN_SKIP      190\n#define PCRE2_ERROR_NO_SURROGATES_IN_UTF16         191\n#define PCRE2_ERROR_BAD_LITERAL_OPTIONS            192\n#define PCRE2_ERROR_SUPPORTED_ONLY_IN_UNICODE      193\n#define PCRE2_ERROR_INVALID_HYPHEN_IN_OPTIONS      194\n#define PCRE2_ERROR_ALPHA_ASSERTION_UNKNOWN        195\n#define PCRE2_ERROR_SCRIPT_RUN_NOT_AVAILABLE       196\n#define PCRE2_ERROR_TOO_MANY_CAPTURES              197\n#define PCRE2_ERROR_MISSING_OCTAL_DIGIT            198\n#define PCRE2_ERROR_BACKSLASH_K_IN_LOOKAROUND      199\n#define PCRE2_ERROR_MAX_VAR_LOOKBEHIND_EXCEEDED    200\n#define PCRE2_ERROR_PATTERN_COMPILED_SIZE_TOO_BIG  201\n#define PCRE2_ERROR_OVERSIZE_PYTHON_OCTAL          202\n#define PCRE2_ERROR_CALLOUT_CALLER_DISABLED        203\n#define PCRE2_ERROR_EXTRA_CASING_REQUIRES_UNICODE  204\n#define PCRE2_ERROR_TURKISH_CASING_REQUIRES_UTF    205\n#define PCRE2_ERROR_EXTRA_CASING_INCOMPATIBLE      206\n#define PCRE2_ERROR_ECLASS_NEST_TOO_DEEP           207\n#define PCRE2_ERROR_ECLASS_INVALID_OPERATOR        208\n#define PCRE2_ERROR_ECLASS_UNEXPECTED_OPERATOR     209\n#define PCRE2_ERROR_ECLASS_EXPECTED_OPERAND        210\n#define PCRE2_ERROR_ECLASS_MIXED_OPERATORS         211\n#define PCRE2_ERROR_ECLASS_HINT_SQUARE_BRACKET     212\n#define PCRE2_ERROR_PERL_ECLASS_UNEXPECTED_EXPR    213\n#define PCRE2_ERROR_PERL_ECLASS_EMPTY_EXPR         214\n#define PCRE2_ERROR_PERL_ECLASS_MISSING_CLOSE      215\n#define PCRE2_ERROR_PERL_ECLASS_UNEXPECTED_CHAR    216\n#define PCRE2_ERROR_EXPECTED_CAPTURE_GROUP         217\n#define PCRE2_ERROR_MISSING_OPENING_PARENTHESIS    218\n#define PCRE2_ERROR_MISSING_NUMBER_TERMINATOR      219\n#define PCRE2_ERROR_NULL_ERROROFFSET               220\n\n/* \"Expected\" matching error codes: no match and partial match. */\n\n#define PCRE2_ERROR_NOMATCH          (-1)\n#define PCRE2_ERROR_PARTIAL          (-2)\n\n/* Error codes for UTF-8 validity checks */\n\n#define PCRE2_ERROR_UTF8_ERR1        (-3)\n#define PCRE2_ERROR_UTF8_ERR2        (-4)\n#define PCRE2_ERROR_UTF8_ERR3        (-5)\n#define PCRE2_ERROR_UTF8_ERR4        (-6)\n#define PCRE2_ERROR_UTF8_ERR5        (-7)\n#define PCRE2_ERROR_UTF8_ERR6        (-8)\n#define PCRE2_ERROR_UTF8_ERR7        (-9)\n#define PCRE2_ERROR_UTF8_ERR8       (-10)\n#define PCRE2_ERROR_UTF8_ERR9       (-11)\n#define PCRE2_ERROR_UTF8_ERR10      (-12)\n#define PCRE2_ERROR_UTF8_ERR11      (-13)\n#define PCRE2_ERROR_UTF8_ERR12      (-14)\n#define PCRE2_ERROR_UTF8_ERR13      (-15)\n#define PCRE2_ERROR_UTF8_ERR14      (-16)\n#define PCRE2_ERROR_UTF8_ERR15      (-17)\n#define PCRE2_ERROR_UTF8_ERR16      (-18)\n#define PCRE2_ERROR_UTF8_ERR17      (-19)\n#define PCRE2_ERROR_UTF8_ERR18      (-20)\n#define PCRE2_ERROR_UTF8_ERR19      (-21)\n#define PCRE2_ERROR_UTF8_ERR20      (-22)\n#define PCRE2_ERROR_UTF8_ERR21      (-23)\n\n/* Error codes for UTF-16 validity checks */\n\n#define PCRE2_ERROR_UTF16_ERR1      (-24)\n#define PCRE2_ERROR_UTF16_ERR2      (-25)\n#define PCRE2_ERROR_UTF16_ERR3      (-26)\n\n/* Error codes for UTF-32 validity checks */\n\n#define PCRE2_ERROR_UTF32_ERR1      (-27)\n#define PCRE2_ERROR_UTF32_ERR2      (-28)\n\n/* Miscellaneous error codes for pcre2[_dfa]_match(), substring extraction\nfunctions, context functions, and serializing functions. They are in numerical\norder. Originally they were in alphabetical order too, but now that PCRE2 is\nreleased, the numbers must not be changed. */\n\n#define PCRE2_ERROR_BADDATA           (-29)\n#define PCRE2_ERROR_MIXEDTABLES       (-30)  /* Name was changed */\n#define PCRE2_ERROR_BADMAGIC          (-31)\n#define PCRE2_ERROR_BADMODE           (-32)\n#define PCRE2_ERROR_BADOFFSET         (-33)\n#define PCRE2_ERROR_BADOPTION         (-34)\n#define PCRE2_ERROR_BADREPLACEMENT    (-35)\n#define PCRE2_ERROR_BADUTFOFFSET      (-36)\n#define PCRE2_ERROR_CALLOUT           (-37)  /* Never used by PCRE2 itself */\n#define PCRE2_ERROR_DFA_BADRESTART    (-38)\n#define PCRE2_ERROR_DFA_RECURSE       (-39)\n#define PCRE2_ERROR_DFA_UCOND         (-40)\n#define PCRE2_ERROR_DFA_UFUNC         (-41)\n#define PCRE2_ERROR_DFA_UITEM         (-42)\n#define PCRE2_ERROR_DFA_WSSIZE        (-43)\n#define PCRE2_ERROR_INTERNAL          (-44)\n#define PCRE2_ERROR_JIT_BADOPTION     (-45)\n#define PCRE2_ERROR_JIT_STACKLIMIT    (-46)\n#define PCRE2_ERROR_MATCHLIMIT        (-47)\n#define PCRE2_ERROR_NOMEMORY          (-48)\n#define PCRE2_ERROR_NOSUBSTRING       (-49)\n#define PCRE2_ERROR_NOUNIQUESUBSTRING (-50)\n#define PCRE2_ERROR_NULL              (-51)\n#define PCRE2_ERROR_RECURSELOOP       (-52)\n#define PCRE2_ERROR_DEPTHLIMIT        (-53)\n#define PCRE2_ERROR_RECURSIONLIMIT    (-53)  /* Obsolete synonym */\n#define PCRE2_ERROR_UNAVAILABLE       (-54)\n#define PCRE2_ERROR_UNSET             (-55)\n#define PCRE2_ERROR_BADOFFSETLIMIT    (-56)\n#define PCRE2_ERROR_BADREPESCAPE      (-57)\n#define PCRE2_ERROR_REPMISSINGBRACE   (-58)\n#define PCRE2_ERROR_BADSUBSTITUTION   (-59)\n#define PCRE2_ERROR_BADSUBSPATTERN    (-60)\n#define PCRE2_ERROR_TOOMANYREPLACE    (-61)\n#define PCRE2_ERROR_BADSERIALIZEDDATA (-62)\n#define PCRE2_ERROR_HEAPLIMIT         (-63)\n#define PCRE2_ERROR_CONVERT_SYNTAX    (-64)\n#define PCRE2_ERROR_INTERNAL_DUPMATCH (-65)\n#define PCRE2_ERROR_DFA_UINVALID_UTF  (-66)\n#define PCRE2_ERROR_INVALIDOFFSET     (-67)\n#define PCRE2_ERROR_JIT_UNSUPPORTED   (-68)\n#define PCRE2_ERROR_REPLACECASE       (-69)\n#define PCRE2_ERROR_TOOLARGEREPLACE   (-70)\n#define PCRE2_ERROR_DIFFSUBSPATTERN   (-71)\n#define PCRE2_ERROR_DIFFSUBSSUBJECT   (-72)\n#define PCRE2_ERROR_DIFFSUBSOFFSET    (-73)\n#define PCRE2_ERROR_DIFFSUBSOPTIONS   (-74)\n#define PCRE2_ERROR_BAD_BACKSLASH_K   (-75)\n#define PCRE2_ERROR_PARTIALSUBS       (-76)\n\n\n/* Request types for pcre2_pattern_info() */\n\n#define PCRE2_INFO_ALLOPTIONS            0\n#define PCRE2_INFO_ARGOPTIONS            1\n#define PCRE2_INFO_BACKREFMAX            2\n#define PCRE2_INFO_BSR                   3\n#define PCRE2_INFO_CAPTURECOUNT          4\n#define PCRE2_INFO_FIRSTCODEUNIT         5\n#define PCRE2_INFO_FIRSTCODETYPE         6\n#define PCRE2_INFO_FIRSTBITMAP           7\n#define PCRE2_INFO_HASCRORLF             8\n#define PCRE2_INFO_JCHANGED              9\n#define PCRE2_INFO_JITSIZE              10\n#define PCRE2_INFO_LASTCODEUNIT         11\n#define PCRE2_INFO_LASTCODETYPE         12\n#define PCRE2_INFO_MATCHEMPTY           13\n#define PCRE2_INFO_MATCHLIMIT           14\n#define PCRE2_INFO_MAXLOOKBEHIND        15\n#define PCRE2_INFO_MINLENGTH            16\n#define PCRE2_INFO_NAMECOUNT            17\n#define PCRE2_INFO_NAMEENTRYSIZE        18\n#define PCRE2_INFO_NAMETABLE            19\n#define PCRE2_INFO_NEWLINE              20\n#define PCRE2_INFO_DEPTHLIMIT           21\n#define PCRE2_INFO_RECURSIONLIMIT       21  /* Obsolete synonym */\n#define PCRE2_INFO_SIZE                 22\n#define PCRE2_INFO_HASBACKSLASHC        23\n#define PCRE2_INFO_FRAMESIZE            24\n#define PCRE2_INFO_HEAPLIMIT            25\n#define PCRE2_INFO_EXTRAOPTIONS         26\n\n/* Request types for pcre2_config(). */\n\n#define PCRE2_CONFIG_BSR                     0\n#define PCRE2_CONFIG_JIT                     1\n#define PCRE2_CONFIG_JITTARGET               2\n#define PCRE2_CONFIG_LINKSIZE                3\n#define PCRE2_CONFIG_MATCHLIMIT              4\n#define PCRE2_CONFIG_NEWLINE                 5\n#define PCRE2_CONFIG_PARENSLIMIT             6\n#define PCRE2_CONFIG_DEPTHLIMIT              7\n#define PCRE2_CONFIG_RECURSIONLIMIT          7  /* Obsolete synonym */\n#define PCRE2_CONFIG_STACKRECURSE            8  /* Obsolete */\n#define PCRE2_CONFIG_UNICODE                 9\n#define PCRE2_CONFIG_UNICODE_VERSION        10\n#define PCRE2_CONFIG_VERSION                11\n#define PCRE2_CONFIG_HEAPLIMIT              12\n#define PCRE2_CONFIG_NEVER_BACKSLASH_C      13\n#define PCRE2_CONFIG_COMPILED_WIDTHS        14\n#define PCRE2_CONFIG_TABLES_LENGTH          15\n#define PCRE2_CONFIG_EFFECTIVE_LINKSIZE     16\n\n/* Optimization directives for pcre2_set_optimize().\nFor binary compatibility, only add to this list; do not renumber. */\n\n#define PCRE2_OPTIMIZATION_NONE    0\n#define PCRE2_OPTIMIZATION_FULL    1\n\n#define PCRE2_AUTO_POSSESS         64\n#define PCRE2_AUTO_POSSESS_OFF     65\n#define PCRE2_DOTSTAR_ANCHOR       66\n#define PCRE2_DOTSTAR_ANCHOR_OFF   67\n#define PCRE2_START_OPTIMIZE       68\n#define PCRE2_START_OPTIMIZE_OFF   69\n\n/* Types used in pcre2_set_substitute_case_callout().\n\nPCRE2_SUBSTITUTE_CASE_LOWER and PCRE2_SUBSTITUTE_CASE_UPPER are passed to the\ncallout to indicate that the case of the entire callout input should be\ncase-transformed. PCRE2_SUBSTITUTE_CASE_TITLE_FIRST is passed to indicate that\nonly the first character or glyph should be transformed to Unicode titlecase,\nand the rest to lowercase. */\n\n#define PCRE2_SUBSTITUTE_CASE_LOWER        1\n#define PCRE2_SUBSTITUTE_CASE_UPPER        2\n#define PCRE2_SUBSTITUTE_CASE_TITLE_FIRST  3\n\n/* Types for code units in patterns and subject strings. */\n\ntypedef uint8_t  PCRE2_UCHAR8;\ntypedef uint16_t PCRE2_UCHAR16;\ntypedef uint32_t PCRE2_UCHAR32;\n\ntypedef const PCRE2_UCHAR8  *PCRE2_SPTR8;\ntypedef const PCRE2_UCHAR16 *PCRE2_SPTR16;\ntypedef const PCRE2_UCHAR32 *PCRE2_SPTR32;\n\n/* The PCRE2_SIZE type is used for all string lengths and offsets in PCRE2,\nincluding pattern offsets for errors and subject offsets after a match. We\ndefine special values to indicate zero-terminated strings and unset offsets in\nthe offset vector (ovector). */\n\n#define PCRE2_SIZE            size_t\n#define PCRE2_SIZE_MAX        SIZE_MAX\n#define PCRE2_ZERO_TERMINATED (~(PCRE2_SIZE)0)\n#define PCRE2_UNSET           (~(PCRE2_SIZE)0)\n\n/* Generic types for opaque structures and JIT callback functions. These\ndeclarations are defined in a macro that is expanded for each width later. */\n\n#define PCRE2_TYPES_LIST \\\nstruct pcre2_real_general_context; \\\ntypedef struct pcre2_real_general_context pcre2_general_context; \\\n\\\nstruct pcre2_real_compile_context; \\\ntypedef struct pcre2_real_compile_context pcre2_compile_context; \\\n\\\nstruct pcre2_real_match_context; \\\ntypedef struct pcre2_real_match_context pcre2_match_context; \\\n\\\nstruct pcre2_real_convert_context; \\\ntypedef struct pcre2_real_convert_context pcre2_convert_context; \\\n\\\nstruct pcre2_real_code; \\\ntypedef struct pcre2_real_code pcre2_code; \\\n\\\nstruct pcre2_real_match_data; \\\ntypedef struct pcre2_real_match_data pcre2_match_data; \\\n\\\nstruct pcre2_real_jit_stack; \\\ntypedef struct pcre2_real_jit_stack pcre2_jit_stack; \\\n\\\ntypedef pcre2_jit_stack *(*pcre2_jit_callback)(void *);\n\n\n/* The structures for passing out data via callout functions. We use structures\nso that new fields can be added on the end in future versions, without changing\nthe API of the function, thereby allowing old clients to work without\nmodification. Define the generic versions in a macro; the width-specific\nversions are generated from this macro below. */\n\n/* Flags for the callout_flags field. These are cleared after a callout. */\n\n#define PCRE2_CALLOUT_STARTMATCH    0x00000001u  /* Set for each bumpalong */\n#define PCRE2_CALLOUT_BACKTRACK     0x00000002u  /* Set after a backtrack */\n\n#define PCRE2_STRUCTURE_LIST \\\ntypedef struct pcre2_callout_block { \\\n  uint32_t      version;           /* Identifies version of block */ \\\n  /* ------------------------ Version 0 ------------------------------- */ \\\n  uint32_t      callout_number;    /* Number compiled into pattern */ \\\n  uint32_t      capture_top;       /* Max current capture */ \\\n  uint32_t      capture_last;      /* Most recently closed capture */ \\\n  PCRE2_SIZE   *offset_vector;     /* The offset vector */ \\\n  PCRE2_SPTR    mark;              /* Pointer to current mark or NULL */ \\\n  PCRE2_SPTR    subject;           /* The subject being matched */ \\\n  PCRE2_SIZE    subject_length;    /* The length of the subject */ \\\n  PCRE2_SIZE    start_match;       /* Offset to start of this match attempt */ \\\n  PCRE2_SIZE    current_position;  /* Where we currently are in the subject */ \\\n  PCRE2_SIZE    pattern_position;  /* Offset to next item in the pattern */ \\\n  PCRE2_SIZE    next_item_length;  /* Length of next item in the pattern */ \\\n  /* ------------------- Added for Version 1 -------------------------- */ \\\n  PCRE2_SIZE    callout_string_offset; /* Offset to string within pattern */ \\\n  PCRE2_SIZE    callout_string_length; /* Length of string compiled into pattern */ \\\n  PCRE2_SPTR    callout_string;    /* String compiled into pattern */ \\\n  /* ------------------- Added for Version 2 -------------------------- */ \\\n  uint32_t      callout_flags;     /* See above for list */ \\\n  /* ------------------------------------------------------------------ */ \\\n} pcre2_callout_block; \\\n\\\ntypedef struct pcre2_callout_enumerate_block { \\\n  uint32_t      version;           /* Identifies version of block */ \\\n  /* ------------------------ Version 0 ------------------------------- */ \\\n  PCRE2_SIZE    pattern_position;  /* Offset to next item in the pattern */ \\\n  PCRE2_SIZE    next_item_length;  /* Length of next item in the pattern */ \\\n  uint32_t      callout_number;    /* Number compiled into pattern */ \\\n  PCRE2_SIZE    callout_string_offset; /* Offset to string within pattern */ \\\n  PCRE2_SIZE    callout_string_length; /* Length of string compiled into pattern */ \\\n  PCRE2_SPTR    callout_string;    /* String compiled into pattern */ \\\n  /* ------------------------------------------------------------------ */ \\\n} pcre2_callout_enumerate_block; \\\n\\\ntypedef struct pcre2_substitute_callout_block { \\\n  uint32_t      version;           /* Identifies version of block */ \\\n  /* ------------------------ Version 0 ------------------------------- */ \\\n  PCRE2_SPTR    input;             /* Pointer to input subject string */ \\\n  PCRE2_SPTR    output;            /* Pointer to output buffer */ \\\n  PCRE2_SIZE    output_offsets[2]; /* Changed portion of the output */ \\\n  PCRE2_SIZE   *ovector;           /* Pointer to current ovector */ \\\n  uint32_t      oveccount;         /* Count of pairs set in ovector */ \\\n  uint32_t      subscount;         /* Substitution number */ \\\n  /* ------------------------------------------------------------------ */ \\\n} pcre2_substitute_callout_block;\n\n\n/* List the generic forms of all other functions in macros, which will be\nexpanded for each width below. Start with functions that give general\ninformation. */\n\n#define PCRE2_GENERAL_INFO_FUNCTIONS \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION pcre2_config(uint32_t, void *);\n\n\n/* Functions for manipulating contexts. */\n\n#define PCRE2_GENERAL_CONTEXT_FUNCTIONS \\\nPCRE2_EXP_DECL pcre2_general_context *PCRE2_CALL_CONVENTION \\\n  pcre2_general_context_copy(pcre2_general_context *); \\\nPCRE2_EXP_DECL pcre2_general_context *PCRE2_CALL_CONVENTION \\\n  pcre2_general_context_create(void *(*)(size_t, void *), \\\n    void (*)(void *, void *), void *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_general_context_free(pcre2_general_context *);\n\n#define PCRE2_COMPILE_CONTEXT_FUNCTIONS \\\nPCRE2_EXP_DECL pcre2_compile_context *PCRE2_CALL_CONVENTION \\\n  pcre2_compile_context_copy(pcre2_compile_context *); \\\nPCRE2_EXP_DECL pcre2_compile_context *PCRE2_CALL_CONVENTION \\\n  pcre2_compile_context_create(pcre2_general_context *);\\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_compile_context_free(pcre2_compile_context *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_bsr(pcre2_compile_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_character_tables(pcre2_compile_context *, const uint8_t *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_compile_extra_options(pcre2_compile_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_max_pattern_length(pcre2_compile_context *, PCRE2_SIZE); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_max_pattern_compiled_length(pcre2_compile_context *, PCRE2_SIZE); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_max_varlookbehind(pcre2_compile_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_newline(pcre2_compile_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_parens_nest_limit(pcre2_compile_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_compile_recursion_guard(pcre2_compile_context *, \\\n    int (*)(uint32_t, void *), void *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_optimize(pcre2_compile_context *, uint32_t);\n\n#define PCRE2_MATCH_CONTEXT_FUNCTIONS \\\nPCRE2_EXP_DECL pcre2_match_context *PCRE2_CALL_CONVENTION \\\n  pcre2_match_context_copy(pcre2_match_context *); \\\nPCRE2_EXP_DECL pcre2_match_context *PCRE2_CALL_CONVENTION \\\n  pcre2_match_context_create(pcre2_general_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_match_context_free(pcre2_match_context *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_callout(pcre2_match_context *, \\\n    int (*)(pcre2_callout_block *, void *), void *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_substitute_callout(pcre2_match_context *, \\\n    int (*)(pcre2_substitute_callout_block *, void *), void *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_substitute_case_callout(pcre2_match_context *, \\\n    PCRE2_SIZE (*)(PCRE2_SPTR, PCRE2_SIZE, PCRE2_UCHAR *, PCRE2_SIZE, int, \\\n                   void *), \\\n    void *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_depth_limit(pcre2_match_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_heap_limit(pcre2_match_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_match_limit(pcre2_match_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_offset_limit(pcre2_match_context *, PCRE2_SIZE); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_recursion_limit(pcre2_match_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_recursion_memory_management(pcre2_match_context *, \\\n    void *(*)(size_t, void *), void (*)(void *, void *), void *);\n\n#define PCRE2_CONVERT_CONTEXT_FUNCTIONS \\\nPCRE2_EXP_DECL pcre2_convert_context *PCRE2_CALL_CONVENTION \\\n  pcre2_convert_context_copy(pcre2_convert_context *); \\\nPCRE2_EXP_DECL pcre2_convert_context *PCRE2_CALL_CONVENTION \\\n  pcre2_convert_context_create(pcre2_general_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_convert_context_free(pcre2_convert_context *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_glob_escape(pcre2_convert_context *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_set_glob_separator(pcre2_convert_context *, uint32_t);\n\n\n/* Functions concerned with compiling a pattern to PCRE internal code. */\n\n#define PCRE2_COMPILE_FUNCTIONS \\\nPCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \\\n  pcre2_compile(PCRE2_SPTR, PCRE2_SIZE, uint32_t, int *, PCRE2_SIZE *, \\\n    pcre2_compile_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_code_free(pcre2_code *); \\\nPCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \\\n  pcre2_code_copy(const pcre2_code *); \\\nPCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \\\n  pcre2_code_copy_with_tables(const pcre2_code *);\n\n\n/* Functions that give information about a compiled pattern. */\n\n#define PCRE2_PATTERN_INFO_FUNCTIONS \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_pattern_info(const pcre2_code *, uint32_t, void *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_callout_enumerate(const pcre2_code *, \\\n    int (*)(pcre2_callout_enumerate_block *, void *), void *);\n\n\n/* Functions for running a match and inspecting the result. */\n\n#define PCRE2_MATCH_FUNCTIONS \\\nPCRE2_EXP_DECL pcre2_match_data *PCRE2_CALL_CONVENTION \\\n  pcre2_match_data_create(uint32_t, pcre2_general_context *); \\\nPCRE2_EXP_DECL pcre2_match_data *PCRE2_CALL_CONVENTION \\\n  pcre2_match_data_create_from_pattern(const pcre2_code *, \\\n    pcre2_general_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_match_data_free(pcre2_match_data *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_dfa_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \\\n    uint32_t, pcre2_match_data *, pcre2_match_context *, int *, PCRE2_SIZE); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \\\n    uint32_t, pcre2_match_data *, pcre2_match_context *); \\\nPCRE2_EXP_DECL PCRE2_SPTR PCRE2_CALL_CONVENTION \\\n  pcre2_get_mark(pcre2_match_data *); \\\nPCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \\\n  pcre2_get_match_data_size(pcre2_match_data *); \\\nPCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \\\n  pcre2_get_match_data_heapframes_size(pcre2_match_data *); \\\nPCRE2_EXP_DECL uint32_t PCRE2_CALL_CONVENTION \\\n  pcre2_get_ovector_count(pcre2_match_data *); \\\nPCRE2_EXP_DECL PCRE2_SIZE *PCRE2_CALL_CONVENTION \\\n  pcre2_get_ovector_pointer(pcre2_match_data *); \\\nPCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \\\n  pcre2_get_startchar(pcre2_match_data *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_next_match(pcre2_match_data *, PCRE2_SIZE *, uint32_t *);\n\n\n/* Convenience functions for handling matched substrings. */\n\n#define PCRE2_SUBSTRING_FUNCTIONS \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_copy_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_UCHAR *, \\\n    PCRE2_SIZE *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_copy_bynumber(pcre2_match_data *, uint32_t, PCRE2_UCHAR *, \\\n    PCRE2_SIZE *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_substring_free(PCRE2_UCHAR *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_get_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_UCHAR **, \\\n    PCRE2_SIZE *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_get_bynumber(pcre2_match_data *, uint32_t, PCRE2_UCHAR **, \\\n    PCRE2_SIZE *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_length_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_SIZE *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_length_bynumber(pcre2_match_data *, uint32_t, PCRE2_SIZE *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_nametable_scan(const pcre2_code *, PCRE2_SPTR, PCRE2_SPTR *, \\\n    PCRE2_SPTR *); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_number_from_name(const pcre2_code *, PCRE2_SPTR); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_substring_list_free(PCRE2_UCHAR **); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substring_list_get(pcre2_match_data *, PCRE2_UCHAR ***, PCRE2_SIZE **);\n\n\n/* Functions for serializing / deserializing compiled patterns. */\n\n#define PCRE2_SERIALIZE_FUNCTIONS \\\nPCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \\\n  pcre2_serialize_encode(const pcre2_code **, int32_t, uint8_t **, \\\n    PCRE2_SIZE *, pcre2_general_context *); \\\nPCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \\\n  pcre2_serialize_decode(pcre2_code **, int32_t, const uint8_t *, \\\n    pcre2_general_context *); \\\nPCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \\\n  pcre2_serialize_get_number_of_codes(const uint8_t *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_serialize_free(uint8_t *);\n\n\n/* Convenience function for match + substitute. */\n\n#define PCRE2_SUBSTITUTE_FUNCTION \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_substitute(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \\\n    uint32_t, pcre2_match_data *, pcre2_match_context *, PCRE2_SPTR, \\\n    PCRE2_SIZE, PCRE2_UCHAR *, PCRE2_SIZE *);\n\n\n/* Functions for converting pattern source strings. */\n\n#define PCRE2_CONVERT_FUNCTIONS \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_pattern_convert(PCRE2_SPTR, PCRE2_SIZE, uint32_t, PCRE2_UCHAR **, \\\n    PCRE2_SIZE *, pcre2_convert_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_converted_pattern_free(PCRE2_UCHAR *);\n\n\n/* Functions for JIT processing */\n\n#define PCRE2_JIT_FUNCTIONS \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_jit_compile(pcre2_code *, uint32_t); \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_jit_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \\\n    uint32_t, pcre2_match_data *, pcre2_match_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_jit_free_unused_memory(pcre2_general_context *); \\\nPCRE2_EXP_DECL pcre2_jit_stack *PCRE2_CALL_CONVENTION \\\n  pcre2_jit_stack_create(size_t, size_t, pcre2_general_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_jit_stack_assign(pcre2_match_context *, pcre2_jit_callback, void *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_jit_stack_free(pcre2_jit_stack *);\n\n\n/* Other miscellaneous functions. */\n\n#define PCRE2_OTHER_FUNCTIONS \\\nPCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \\\n  pcre2_get_error_message(int, PCRE2_UCHAR *, PCRE2_SIZE); \\\nPCRE2_EXP_DECL const uint8_t *PCRE2_CALL_CONVENTION \\\n  pcre2_maketables(pcre2_general_context *); \\\nPCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \\\n  pcre2_maketables_free(pcre2_general_context *, const uint8_t *);\n\n/* Define macros that generate width-specific names from generic versions. The\nthree-level macro scheme is necessary to get the macros expanded when we want\nthem to be. First we get the width from PCRE2_LOCAL_WIDTH, which is used for\ngenerating three versions of everything below. After that, PCRE2_SUFFIX will be\nre-defined to use PCRE2_CODE_UNIT_WIDTH, for use when macros such as\npcre2_compile are called by application code. */\n\n#define PCRE2_JOIN(a,b) a ## b\n#define PCRE2_GLUE(a,b) PCRE2_JOIN(a,b)\n#define PCRE2_SUFFIX(a) PCRE2_GLUE(a,PCRE2_LOCAL_WIDTH)\n\n\n/* Data types */\n\n#define PCRE2_UCHAR                 PCRE2_SUFFIX(PCRE2_UCHAR)\n#define PCRE2_SPTR                  PCRE2_SUFFIX(PCRE2_SPTR)\n\n#define pcre2_code                  PCRE2_SUFFIX(pcre2_code_)\n#define pcre2_jit_callback          PCRE2_SUFFIX(pcre2_jit_callback_)\n#define pcre2_jit_stack             PCRE2_SUFFIX(pcre2_jit_stack_)\n\n#define pcre2_real_code             PCRE2_SUFFIX(pcre2_real_code_)\n#define pcre2_real_general_context  PCRE2_SUFFIX(pcre2_real_general_context_)\n#define pcre2_real_compile_context  PCRE2_SUFFIX(pcre2_real_compile_context_)\n#define pcre2_real_convert_context  PCRE2_SUFFIX(pcre2_real_convert_context_)\n#define pcre2_real_match_context    PCRE2_SUFFIX(pcre2_real_match_context_)\n#define pcre2_real_jit_stack        PCRE2_SUFFIX(pcre2_real_jit_stack_)\n#define pcre2_real_match_data       PCRE2_SUFFIX(pcre2_real_match_data_)\n\n\n/* Data blocks */\n\n#define pcre2_callout_block            PCRE2_SUFFIX(pcre2_callout_block_)\n#define pcre2_callout_enumerate_block  PCRE2_SUFFIX(pcre2_callout_enumerate_block_)\n#define pcre2_substitute_callout_block PCRE2_SUFFIX(pcre2_substitute_callout_block_)\n#define pcre2_general_context          PCRE2_SUFFIX(pcre2_general_context_)\n#define pcre2_compile_context          PCRE2_SUFFIX(pcre2_compile_context_)\n#define pcre2_convert_context          PCRE2_SUFFIX(pcre2_convert_context_)\n#define pcre2_match_context            PCRE2_SUFFIX(pcre2_match_context_)\n#define pcre2_match_data               PCRE2_SUFFIX(pcre2_match_data_)\n\n\n/* Functions: the complete list in alphabetical order */\n\n#define pcre2_callout_enumerate               PCRE2_SUFFIX(pcre2_callout_enumerate_)\n#define pcre2_code_copy                       PCRE2_SUFFIX(pcre2_code_copy_)\n#define pcre2_code_copy_with_tables           PCRE2_SUFFIX(pcre2_code_copy_with_tables_)\n#define pcre2_code_free                       PCRE2_SUFFIX(pcre2_code_free_)\n#define pcre2_compile                         PCRE2_SUFFIX(pcre2_compile_)\n#define pcre2_compile_context_copy            PCRE2_SUFFIX(pcre2_compile_context_copy_)\n#define pcre2_compile_context_create          PCRE2_SUFFIX(pcre2_compile_context_create_)\n#define pcre2_compile_context_free            PCRE2_SUFFIX(pcre2_compile_context_free_)\n#define pcre2_config                          PCRE2_SUFFIX(pcre2_config_)\n#define pcre2_convert_context_copy            PCRE2_SUFFIX(pcre2_convert_context_copy_)\n#define pcre2_convert_context_create          PCRE2_SUFFIX(pcre2_convert_context_create_)\n#define pcre2_convert_context_free            PCRE2_SUFFIX(pcre2_convert_context_free_)\n#define pcre2_converted_pattern_free          PCRE2_SUFFIX(pcre2_converted_pattern_free_)\n#define pcre2_dfa_match                       PCRE2_SUFFIX(pcre2_dfa_match_)\n#define pcre2_general_context_copy            PCRE2_SUFFIX(pcre2_general_context_copy_)\n#define pcre2_general_context_create          PCRE2_SUFFIX(pcre2_general_context_create_)\n#define pcre2_general_context_free            PCRE2_SUFFIX(pcre2_general_context_free_)\n#define pcre2_get_error_message               PCRE2_SUFFIX(pcre2_get_error_message_)\n#define pcre2_get_mark                        PCRE2_SUFFIX(pcre2_get_mark_)\n#define pcre2_get_match_data_heapframes_size  PCRE2_SUFFIX(pcre2_get_match_data_heapframes_size_)\n#define pcre2_get_match_data_size             PCRE2_SUFFIX(pcre2_get_match_data_size_)\n#define pcre2_get_ovector_pointer             PCRE2_SUFFIX(pcre2_get_ovector_pointer_)\n#define pcre2_get_ovector_count               PCRE2_SUFFIX(pcre2_get_ovector_count_)\n#define pcre2_get_startchar                   PCRE2_SUFFIX(pcre2_get_startchar_)\n#define pcre2_jit_compile                     PCRE2_SUFFIX(pcre2_jit_compile_)\n#define pcre2_jit_match                       PCRE2_SUFFIX(pcre2_jit_match_)\n#define pcre2_jit_free_unused_memory          PCRE2_SUFFIX(pcre2_jit_free_unused_memory_)\n#define pcre2_jit_stack_assign                PCRE2_SUFFIX(pcre2_jit_stack_assign_)\n#define pcre2_jit_stack_create                PCRE2_SUFFIX(pcre2_jit_stack_create_)\n#define pcre2_jit_stack_free                  PCRE2_SUFFIX(pcre2_jit_stack_free_)\n#define pcre2_maketables                      PCRE2_SUFFIX(pcre2_maketables_)\n#define pcre2_maketables_free                 PCRE2_SUFFIX(pcre2_maketables_free_)\n#define pcre2_match                           PCRE2_SUFFIX(pcre2_match_)\n#define pcre2_match_context_copy              PCRE2_SUFFIX(pcre2_match_context_copy_)\n#define pcre2_match_context_create            PCRE2_SUFFIX(pcre2_match_context_create_)\n#define pcre2_match_context_free              PCRE2_SUFFIX(pcre2_match_context_free_)\n#define pcre2_match_data_create               PCRE2_SUFFIX(pcre2_match_data_create_)\n#define pcre2_match_data_create_from_pattern  PCRE2_SUFFIX(pcre2_match_data_create_from_pattern_)\n#define pcre2_match_data_free                 PCRE2_SUFFIX(pcre2_match_data_free_)\n#define pcre2_next_match                      PCRE2_SUFFIX(pcre2_next_match_)\n#define pcre2_pattern_convert                 PCRE2_SUFFIX(pcre2_pattern_convert_)\n#define pcre2_pattern_info                    PCRE2_SUFFIX(pcre2_pattern_info_)\n#define pcre2_serialize_decode                PCRE2_SUFFIX(pcre2_serialize_decode_)\n#define pcre2_serialize_encode                PCRE2_SUFFIX(pcre2_serialize_encode_)\n#define pcre2_serialize_free                  PCRE2_SUFFIX(pcre2_serialize_free_)\n#define pcre2_serialize_get_number_of_codes   PCRE2_SUFFIX(pcre2_serialize_get_number_of_codes_)\n#define pcre2_set_bsr                         PCRE2_SUFFIX(pcre2_set_bsr_)\n#define pcre2_set_callout                     PCRE2_SUFFIX(pcre2_set_callout_)\n#define pcre2_set_character_tables            PCRE2_SUFFIX(pcre2_set_character_tables_)\n#define pcre2_set_compile_extra_options       PCRE2_SUFFIX(pcre2_set_compile_extra_options_)\n#define pcre2_set_compile_recursion_guard     PCRE2_SUFFIX(pcre2_set_compile_recursion_guard_)\n#define pcre2_set_depth_limit                 PCRE2_SUFFIX(pcre2_set_depth_limit_)\n#define pcre2_set_glob_escape                 PCRE2_SUFFIX(pcre2_set_glob_escape_)\n#define pcre2_set_glob_separator              PCRE2_SUFFIX(pcre2_set_glob_separator_)\n#define pcre2_set_heap_limit                  PCRE2_SUFFIX(pcre2_set_heap_limit_)\n#define pcre2_set_match_limit                 PCRE2_SUFFIX(pcre2_set_match_limit_)\n#define pcre2_set_max_varlookbehind           PCRE2_SUFFIX(pcre2_set_max_varlookbehind_)\n#define pcre2_set_max_pattern_length          PCRE2_SUFFIX(pcre2_set_max_pattern_length_)\n#define pcre2_set_max_pattern_compiled_length PCRE2_SUFFIX(pcre2_set_max_pattern_compiled_length_)\n#define pcre2_set_newline                     PCRE2_SUFFIX(pcre2_set_newline_)\n#define pcre2_set_parens_nest_limit           PCRE2_SUFFIX(pcre2_set_parens_nest_limit_)\n#define pcre2_set_offset_limit                PCRE2_SUFFIX(pcre2_set_offset_limit_)\n#define pcre2_set_optimize                    PCRE2_SUFFIX(pcre2_set_optimize_)\n#define pcre2_set_substitute_callout          PCRE2_SUFFIX(pcre2_set_substitute_callout_)\n#define pcre2_set_substitute_case_callout     PCRE2_SUFFIX(pcre2_set_substitute_case_callout_)\n#define pcre2_substitute                      PCRE2_SUFFIX(pcre2_substitute_)\n#define pcre2_substring_copy_byname           PCRE2_SUFFIX(pcre2_substring_copy_byname_)\n#define pcre2_substring_copy_bynumber         PCRE2_SUFFIX(pcre2_substring_copy_bynumber_)\n#define pcre2_substring_free                  PCRE2_SUFFIX(pcre2_substring_free_)\n#define pcre2_substring_get_byname            PCRE2_SUFFIX(pcre2_substring_get_byname_)\n#define pcre2_substring_get_bynumber          PCRE2_SUFFIX(pcre2_substring_get_bynumber_)\n#define pcre2_substring_length_byname         PCRE2_SUFFIX(pcre2_substring_length_byname_)\n#define pcre2_substring_length_bynumber       PCRE2_SUFFIX(pcre2_substring_length_bynumber_)\n#define pcre2_substring_list_get              PCRE2_SUFFIX(pcre2_substring_list_get_)\n#define pcre2_substring_list_free             PCRE2_SUFFIX(pcre2_substring_list_free_)\n#define pcre2_substring_nametable_scan        PCRE2_SUFFIX(pcre2_substring_nametable_scan_)\n#define pcre2_substring_number_from_name      PCRE2_SUFFIX(pcre2_substring_number_from_name_)\n\n/* Keep this old function name for backwards compatibility */\n#define pcre2_set_recursion_limit PCRE2_SUFFIX(pcre2_set_recursion_limit_)\n\n/* Keep this obsolete function for backwards compatibility: it is now a noop. */\n#define pcre2_set_recursion_memory_management PCRE2_SUFFIX(pcre2_set_recursion_memory_management_)\n\n/* Now generate all three sets of width-specific structures and function\nprototypes. */\n\n#define PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS \\\nPCRE2_TYPES_LIST \\\nPCRE2_STRUCTURE_LIST \\\nPCRE2_GENERAL_INFO_FUNCTIONS \\\nPCRE2_GENERAL_CONTEXT_FUNCTIONS \\\nPCRE2_COMPILE_CONTEXT_FUNCTIONS \\\nPCRE2_CONVERT_CONTEXT_FUNCTIONS \\\nPCRE2_CONVERT_FUNCTIONS \\\nPCRE2_MATCH_CONTEXT_FUNCTIONS \\\nPCRE2_COMPILE_FUNCTIONS \\\nPCRE2_PATTERN_INFO_FUNCTIONS \\\nPCRE2_MATCH_FUNCTIONS \\\nPCRE2_SUBSTRING_FUNCTIONS \\\nPCRE2_SERIALIZE_FUNCTIONS \\\nPCRE2_SUBSTITUTE_FUNCTION \\\nPCRE2_JIT_FUNCTIONS \\\nPCRE2_OTHER_FUNCTIONS\n\n#define PCRE2_LOCAL_WIDTH 8\nPCRE2_TYPES_STRUCTURES_AND_FUNCTIONS\n#undef PCRE2_LOCAL_WIDTH\n\n#define PCRE2_LOCAL_WIDTH 16\nPCRE2_TYPES_STRUCTURES_AND_FUNCTIONS\n#undef PCRE2_LOCAL_WIDTH\n\n#define PCRE2_LOCAL_WIDTH 32\nPCRE2_TYPES_STRUCTURES_AND_FUNCTIONS\n#undef PCRE2_LOCAL_WIDTH\n\n/* Undefine the list macros; they are no longer needed. */\n\n#undef PCRE2_TYPES_LIST\n#undef PCRE2_STRUCTURE_LIST\n#undef PCRE2_GENERAL_INFO_FUNCTIONS\n#undef PCRE2_GENERAL_CONTEXT_FUNCTIONS\n#undef PCRE2_COMPILE_CONTEXT_FUNCTIONS\n#undef PCRE2_CONVERT_CONTEXT_FUNCTIONS\n#undef PCRE2_MATCH_CONTEXT_FUNCTIONS\n#undef PCRE2_COMPILE_FUNCTIONS\n#undef PCRE2_PATTERN_INFO_FUNCTIONS\n#undef PCRE2_MATCH_FUNCTIONS\n#undef PCRE2_SUBSTRING_FUNCTIONS\n#undef PCRE2_SERIALIZE_FUNCTIONS\n#undef PCRE2_SUBSTITUTE_FUNCTION\n#undef PCRE2_JIT_FUNCTIONS\n#undef PCRE2_OTHER_FUNCTIONS\n#undef PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS\n\n/* PCRE2_CODE_UNIT_WIDTH must be defined. If it is 8, 16, or 32, redefine\nPCRE2_SUFFIX to use it. If it is 0, undefine the other macros and make\nPCRE2_SUFFIX a no-op. Otherwise, generate an error. */\n\n#undef PCRE2_SUFFIX\n#ifndef PCRE2_CODE_UNIT_WIDTH\n#error PCRE2_CODE_UNIT_WIDTH must be defined before including pcre2.h.\n#error Use 8, 16, or 32; or 0 for a multi-width application.\n#else  /* PCRE2_CODE_UNIT_WIDTH is defined */\n#if PCRE2_CODE_UNIT_WIDTH == 8 || \\\n    PCRE2_CODE_UNIT_WIDTH == 16 || \\\n    PCRE2_CODE_UNIT_WIDTH == 32\n#define PCRE2_SUFFIX(a) PCRE2_GLUE(a, PCRE2_CODE_UNIT_WIDTH)\n#elif PCRE2_CODE_UNIT_WIDTH == 0\n#undef PCRE2_JOIN\n#undef PCRE2_GLUE\n#define PCRE2_SUFFIX(a) a\n#else\n#error PCRE2_CODE_UNIT_WIDTH must be 0, 8, 16, or 32.\n#endif\n#endif  /* PCRE2_CODE_UNIT_WIDTH is defined */\n\n#ifdef __cplusplus\n}  /* extern \"C\" */\n#endif\n\n#endif  /* PCRE2_H_IDEMPOTENT_GUARD */\n\n/* End of pcre2.h */\n"
  },
  {
    "path": "src/pcre2_auto_possess.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains functions that scan a compiled pattern and change\nrepeats into possessive repeats where possible. */\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/* This macro represents the max size of list[] and that is used to keep\ntrack of UCD info in several places, it should be kept on sync with the\nvalue used by GenerateUcd.py */\n#define MAX_LIST 8\n\n/*************************************************\n*        Tables for auto-possessification        *\n*************************************************/\n\n/* This table is used to check whether auto-possessification is possible\nbetween adjacent character-type opcodes. The left-hand (repeated) opcode is\nused to select the row, and the right-hand opcode is use to select the column.\nA value of 1 means that auto-possessification is OK. For example, the second\nvalue in the first row means that \\D+\\d can be turned into \\D++\\d.\n\nThe Unicode property types (\\P and \\p) have to be present to fill out the table\nbecause of what their opcode values are, but the table values should always be\nzero because property types are handled separately in the code. The last four\ncolumns apply to items that cannot be repeated, so there is no need to have\nrows for them. Note that OP_DIGIT etc. are generated only when PCRE2_UCP is\n*not* set. When it is set, \\d etc. are converted into OP_(NOT_)PROP codes. */\n\n#define APTROWS (LAST_AUTOTAB_LEFT_OP - FIRST_AUTOTAB_OP + 1)\n#define APTCOLS (LAST_AUTOTAB_RIGHT_OP - FIRST_AUTOTAB_OP + 1)\n\nstatic const uint8_t autoposstab[APTROWS][APTCOLS] = {\n/* \\D \\d \\S \\s \\W \\w  . .+ \\C \\P \\p \\R \\H \\h \\V \\v \\X \\Z \\z  $ $M */\n  { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },  /* \\D */\n  { 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 },  /* \\d */\n  { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 },  /* \\S */\n  { 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },  /* \\s */\n  { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },  /* \\W */\n  { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 },  /* \\w */\n  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 },  /* .  */\n  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },  /* .+ */\n  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },  /* \\C */\n  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },  /* \\P */\n  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },  /* \\p */\n  { 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0 },  /* \\R */\n  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0 },  /* \\H */\n  { 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0 },  /* \\h */\n  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0 },  /* \\V */\n  { 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0 },  /* \\v */\n  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }   /* \\X */\n};\n\n#ifdef SUPPORT_UNICODE\n/* This table is used to check whether auto-possessification is possible\nbetween adjacent Unicode property opcodes (OP_PROP and OP_NOTPROP). The\nleft-hand (repeated) opcode is used to select the row, and the right-hand\nopcode is used to select the column. The values are as follows:\n\n  0   Always return FALSE (never auto-possessify)\n  1   Character groups are distinct (possessify if both are OP_PROP)\n  2   Check character categories in the same group (general or particular)\n  3   TRUE if the two opcodes are not the same (PROP vs NOTPROP)\n\n  4   Check left general category vs right particular category\n  5   Check right general category vs left particular category\n\n  6   Left alphanum vs right general category\n  7   Left space vs right general category\n  8   Left word vs right general category\n\n  9   Right alphanum vs left general category\n 10   Right space vs left general category\n 11   Right word vs left general category\n\n 12   Left alphanum vs right particular category\n 13   Left space vs right particular category\n 14   Left word vs right particular category\n\n 15   Right alphanum vs left particular category\n 16   Right space vs left particular category\n 17   Right word vs left particular category\n*/\n\nstatic const uint8_t propposstab[PT_TABSIZE][PT_TABSIZE] = {\n/* LAMP GC  PC  SC  SCX ALNUM SPACE PXSPACE WORD CLIST UCNC BIDICL BOOL */\n  { 3,  0,  0,  0,   0,    3,    1,      1,   0,    0,   0,    0,    0 },  /* PT_LAMP */\n  { 0,  2,  4,  0,   0,    9,   10,     10,  11,    0,   0,    0,    0 },  /* PT_GC */\n  { 0,  5,  2,  0,   0,   15,   16,     16,  17,    0,   0,    0,    0 },  /* PT_PC */\n  { 0,  0,  0,  2,   2,    0,    0,      0,   0,    0,   0,    0,    0 },  /* PT_SC */\n  { 0,  0,  0,  2,   2,    0,    0,      0,   0,    0,   0,    0,    0 },  /* PT_SCX */\n  { 3,  6, 12,  0,   0,    3,    1,      1,   0,    0,   0,    0,    0 },  /* PT_ALNUM */\n  { 1,  7, 13,  0,   0,    1,    3,      3,   1,    0,   0,    0,    0 },  /* PT_SPACE */\n  { 1,  7, 13,  0,   0,    1,    3,      3,   1,    0,   0,    0,    0 },  /* PT_PXSPACE */\n  { 0,  8, 14,  0,   0,    0,    1,      1,   3,    0,   0,    0,    0 },  /* PT_WORD */\n  { 0,  0,  0,  0,   0,    0,    0,      0,   0,    0,   0,    0,    0 },  /* PT_CLIST */\n  { 0,  0,  0,  0,   0,    0,    0,      0,   0,    0,   3,    0,    0 },  /* PT_UCNC */\n  { 0,  0,  0,  0,   0,    0,    0,      0,   0,    0,   0,    0,    0 },  /* PT_BIDICL */\n  { 0,  0,  0,  0,   0,    0,    0,      0,   0,    0,   0,    0,    0 }   /* PT_BOOL */\n  /* PT_ANY does not need a record. */\n};\n\n/* This table is used to check whether auto-possessification is possible\nbetween adjacent Unicode property opcodes (OP_PROP and OP_NOTPROP) when one\nspecifies a general category and the other specifies a particular category. The\nrow is selected by the general category and the column by the particular\ncategory. The value is 1 if the particular category is not part of the general\ncategory. */\n\nstatic const uint8_t catposstab[7][30] = {\n/* Cc Cf Cn Co Cs Ll Lm Lo Lt Lu Mc Me Mn Nd Nl No Pc Pd Pe Pf Pi Po Ps Sc Sk Sm So Zl Zp Zs */\n  { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },  /* C */\n  { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },  /* L */\n  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },  /* M */\n  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },  /* N */\n  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 },  /* P */\n  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1 },  /* S */\n  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 }   /* Z */\n};\n\n/* This table is used when checking ALNUM, (PX)SPACE, SPACE, and WORD against\na general or particular category. The properties in each row are those\nthat apply to the character set in question. Duplication means that a little\nunnecessary work is done when checking, but this keeps things much simpler\nbecause they can all use the same code. For more details see the comment where\nthis table is used.\n\nNote: SPACE and PXSPACE used to be different because Perl excluded VT from\n\"space\", but from Perl 5.18 it's included, so both categories are treated the\nsame here. */\n\nstatic const uint8_t posspropstab[3][4] = {\n  { ucp_L, ucp_N, ucp_N, ucp_Nl },  /* ALNUM, 3rd and 4th values redundant */\n  { ucp_Z, ucp_Z, ucp_C, ucp_Cc },  /* SPACE and PXSPACE, 2nd value redundant */\n  { ucp_L, ucp_N, ucp_P, ucp_Po }   /* WORD */\n};\n#endif  /* SUPPORT_UNICODE */\n\n\n\n#ifdef SUPPORT_UNICODE\n/*************************************************\n*        Check a character and a property        *\n*************************************************/\n\n/* This function is called by compare_opcodes() when a property item is\nadjacent to a fixed character.\n\nArguments:\n  c            the character\n  ptype        the property type\n  pdata        the data for the type\n  negated      TRUE if it's a negated property (\\P or \\p{^)\n\nReturns:       TRUE if auto-possessifying is OK\n*/\n\nstatic BOOL\ncheck_char_prop(uint32_t c, unsigned int ptype, unsigned int pdata,\n  BOOL negated)\n{\nBOOL ok, rc;\nconst uint32_t *p;\nconst ucd_record *prop = GET_UCD(c);\n\nswitch(ptype)\n  {\n  case PT_LAMP:\n  return (prop->chartype == ucp_Lu ||\n          prop->chartype == ucp_Ll ||\n          prop->chartype == ucp_Lt) == negated;\n\n  case PT_GC:\n  return (pdata == PRIV(ucp_gentype)[prop->chartype]) == negated;\n\n  case PT_PC:\n  return (pdata == prop->chartype) == negated;\n\n  case PT_SC:\n  return (pdata == prop->script) == negated;\n\n  case PT_SCX:\n  ok = (pdata == prop->script\n        || MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), pdata) != 0);\n  return ok == negated;\n\n  /* These are specials */\n\n  case PT_ALNUM:\n  return (PRIV(ucp_gentype)[prop->chartype] == ucp_L ||\n          PRIV(ucp_gentype)[prop->chartype] == ucp_N) == negated;\n\n  /* Perl space used to exclude VT, but from Perl 5.18 it is included, which\n  means that Perl space and POSIX space are now identical. PCRE was changed\n  at release 8.34. */\n\n  case PT_SPACE:    /* Perl space */\n  case PT_PXSPACE:  /* POSIX space */\n  switch(c)\n    {\n    HSPACE_CASES:\n    VSPACE_CASES:\n    rc = negated;\n    break;\n\n    default:\n    rc = (PRIV(ucp_gentype)[prop->chartype] == ucp_Z) == negated;\n    }\n  return rc;\n\n  case PT_WORD:\n  return (PRIV(ucp_gentype)[prop->chartype] == ucp_L ||\n          PRIV(ucp_gentype)[prop->chartype] == ucp_N ||\n          c == CHAR_UNDERSCORE) == negated;\n\n  case PT_CLIST:\n  p = PRIV(ucd_caseless_sets) + prop->caseset;\n  for (;;)\n    {\n    if (c < *p) return !negated;\n    if (c == *p++) return negated;\n    }\n  /* LCOV_EXCL_START */\n  PCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */\n  break;\n  /* LCOV_EXCL_STOP */\n\n  /* Haven't yet thought these through. */\n\n  case PT_BIDICL:\n  return FALSE;\n\n  case PT_BOOL:\n  return FALSE;\n  }\n\nreturn FALSE;\n}\n#endif  /* SUPPORT_UNICODE */\n\n\n\n/*************************************************\n*        Base opcode of repeated opcodes         *\n*************************************************/\n\n/* Returns the base opcode for repeated single character type opcodes. If the\nopcode is not a repeated character type, it returns with the original value.\n\nArguments:  c opcode\nReturns:    base opcode for the type\n*/\n\nstatic PCRE2_UCHAR\nget_repeat_base(PCRE2_UCHAR c)\n{\nreturn (c > OP_TYPEPOSUPTO)? c :\n       (c >= OP_TYPESTAR)?   OP_TYPESTAR :\n       (c >= OP_NOTSTARI)?   OP_NOTSTARI :\n       (c >= OP_NOTSTAR)?    OP_NOTSTAR :\n       (c >= OP_STARI)?      OP_STARI :\n                             OP_STAR;\n}\n\n\n/*************************************************\n*        Fill the character property list        *\n*************************************************/\n\n/* Checks whether the code points to an opcode that can take part in auto-\npossessification, and if so, fills a list with its properties.\n\nArguments:\n  code        points to start of expression\n  utf         TRUE if in UTF mode\n  ucp         TRUE if in UCP mode\n  fcc         points to the case-flipping table\n  list        points to output list\n              list[0] will be filled with the opcode\n              list[1] will be non-zero if this opcode\n                can match an empty character string\n              list[2..7] depends on the opcode\n\nReturns:      points to the start of the next opcode if *code is accepted\n              NULL if *code is not accepted\n*/\n\nstatic PCRE2_SPTR\nget_chr_property_list(PCRE2_SPTR code, BOOL utf, BOOL ucp, const uint8_t *fcc,\n  uint32_t *list)\n{\nPCRE2_UCHAR c = *code;\nPCRE2_UCHAR base;\nPCRE2_SPTR end;\nPCRE2_SPTR class_end;\nuint32_t chr;\n\n#ifdef SUPPORT_UNICODE\nuint32_t *clist_dest;\nconst uint32_t *clist_src;\n#else\n(void)utf;    /* Suppress \"unused parameter\" compiler warnings */\n(void)ucp;\n#endif\n\nlist[0] = c;\nlist[1] = FALSE;\ncode++;\n\nif (c >= OP_STAR && c <= OP_TYPEPOSUPTO)\n  {\n  base = get_repeat_base(c);\n  c -= (base - OP_STAR);\n\n  if (c == OP_UPTO || c == OP_MINUPTO || c == OP_EXACT || c == OP_POSUPTO)\n    code += IMM2_SIZE;\n\n  list[1] = (c != OP_PLUS && c != OP_MINPLUS && c != OP_EXACT &&\n             c != OP_POSPLUS);\n\n  switch(base)\n    {\n    case OP_STAR:\n    list[0] = OP_CHAR;\n    break;\n\n    case OP_STARI:\n    list[0] = OP_CHARI;\n    break;\n\n    case OP_NOTSTAR:\n    list[0] = OP_NOT;\n    break;\n\n    case OP_NOTSTARI:\n    list[0] = OP_NOTI;\n    break;\n\n    case OP_TYPESTAR:\n    list[0] = *code;\n    code++;\n    break;\n    }\n  c = list[0];\n  }\n\nswitch(c)\n  {\n  case OP_NOT_DIGIT:\n  case OP_DIGIT:\n  case OP_NOT_WHITESPACE:\n  case OP_WHITESPACE:\n  case OP_NOT_WORDCHAR:\n  case OP_WORDCHAR:\n  case OP_ANY:\n  case OP_ALLANY:\n  case OP_ANYNL:\n  case OP_NOT_HSPACE:\n  case OP_HSPACE:\n  case OP_NOT_VSPACE:\n  case OP_VSPACE:\n  case OP_EXTUNI:\n  case OP_EODN:\n  case OP_EOD:\n  case OP_DOLL:\n  case OP_DOLLM:\n  return code;\n\n  case OP_CHAR:\n  case OP_NOT:\n  GETCHARINCTEST(chr, code);\n  list[2] = chr;\n  list[3] = NOTACHAR;\n  return code;\n\n  case OP_CHARI:\n  case OP_NOTI:\n  list[0] = (c == OP_CHARI) ? OP_CHAR : OP_NOT;\n  GETCHARINCTEST(chr, code);\n  list[2] = chr;\n\n#ifdef SUPPORT_UNICODE\n  if (chr < 128 || (chr < 256 && !utf && !ucp))\n    list[3] = fcc[chr];\n  else\n    list[3] = UCD_OTHERCASE(chr);\n#elif defined SUPPORT_WIDE_CHARS\n  list[3] = (chr < 256) ? fcc[chr] : chr;\n#else\n  list[3] = fcc[chr];\n#endif\n\n  /* The othercase might be the same value. */\n\n  if (chr == list[3])\n    list[3] = NOTACHAR;\n  else\n    list[4] = NOTACHAR;\n  return code;\n\n#ifdef SUPPORT_UNICODE\n  case OP_PROP:\n  case OP_NOTPROP:\n  if (code[0] != PT_CLIST)\n    {\n    list[2] = code[0];\n    list[3] = code[1];\n    return code + 2;\n    }\n\n  /* Convert only if we have enough space. */\n\n  clist_src = PRIV(ucd_caseless_sets) + code[1];\n  clist_dest = list + 2;\n  code += 2;\n\n  do {\n     if (clist_dest >= list + MAX_LIST)\n       {\n       /* Early return if there is not enough space. GenerateUcd.py\n       generated a list with more than 5 characters and something\n       must be done about that going forward. */\n       PCRE2_DEBUG_UNREACHABLE();   /* Remove if it ever triggers */\n       list[2] = code[0];\n       list[3] = code[1];\n       return code;\n       }\n     *clist_dest++ = *clist_src;\n     }\n  while(*clist_src++ != NOTACHAR);\n\n  /* All characters are stored. The terminating NOTACHAR is copied from the\n  clist itself. */\n\n  list[0] = (c == OP_PROP) ? OP_CHAR : OP_NOT;\n  return code;\n#endif\n\n  case OP_NCLASS:\n  case OP_CLASS:\n#ifdef SUPPORT_WIDE_CHARS\n  case OP_XCLASS:\n  case OP_ECLASS:\n  if (c == OP_XCLASS || c == OP_ECLASS)\n    end = code + GET(code, 0) - 1;\n  else\n#endif\n    end = code + 32 / sizeof(PCRE2_UCHAR);\n  class_end = end;\n\n  switch(*end)\n    {\n    case OP_CRSTAR:\n    case OP_CRMINSTAR:\n    case OP_CRQUERY:\n    case OP_CRMINQUERY:\n    case OP_CRPOSSTAR:\n    case OP_CRPOSQUERY:\n    list[1] = TRUE;\n    end++;\n    break;\n\n    case OP_CRPLUS:\n    case OP_CRMINPLUS:\n    case OP_CRPOSPLUS:\n    end++;\n    break;\n\n    case OP_CRRANGE:\n    case OP_CRMINRANGE:\n    case OP_CRPOSRANGE:\n    list[1] = (GET2(end, 1) == 0);\n    end += 1 + 2 * IMM2_SIZE;\n    break;\n    }\n  list[2] = (uint32_t)(end - code);\n  list[3] = (uint32_t)(end - class_end);\n  return end;\n  }\n\nreturn NULL;    /* Opcode not accepted */\n}\n\n\n\n/*************************************************\n*    Scan further character sets for match       *\n*************************************************/\n\n/* Checks whether the base and the current opcode have a common character, in\nwhich case the base cannot be possessified.\n\nArguments:\n  code        points to the byte code\n  utf         TRUE in UTF mode\n  ucp         TRUE in UCP mode\n  cb          compile data block\n  base_list   the data list of the base opcode\n  base_end    the end of the base opcode\n  rec_limit   points to recursion depth counter\n\nReturns:      TRUE if the auto-possessification is possible\n*/\n\nstatic BOOL\ncompare_opcodes(PCRE2_SPTR code, BOOL utf, BOOL ucp, const compile_block *cb,\n  const uint32_t *base_list, PCRE2_SPTR base_end, int *rec_limit)\n{\nPCRE2_UCHAR c;\nuint32_t list[MAX_LIST];\nconst uint32_t *chr_ptr;\nconst uint32_t *ochr_ptr;\nconst uint32_t *list_ptr;\nPCRE2_SPTR next_code;\n#ifdef SUPPORT_WIDE_CHARS\nPCRE2_SPTR xclass_flags;\n#endif\nconst uint8_t *class_bitset;\nconst uint8_t *set1, *set2, *set_end;\nuint32_t chr;\nBOOL accepted, invert_bits;\nBOOL entered_a_group = FALSE;\n\nif (--(*rec_limit) <= 0) return FALSE;  /* Recursion has gone too deep */\n\n/* Note: the base_list[1] contains whether the current opcode has a greedy\n(represented by a non-zero value) quantifier. This is a different from\nother character type lists, which store here that the character iterator\nmatches to an empty string (also represented by a non-zero value). */\n\nfor(;;)\n  {\n  PCRE2_SPTR bracode;\n\n  /* All operations move the code pointer forward.\n  Therefore infinite recursions are not possible. */\n\n  c = *code;\n\n  /* Skip over callouts */\n\n  if (c == OP_CALLOUT)\n    {\n    code += PRIV(OP_lengths)[c];\n    continue;\n    }\n\n  if (c == OP_CALLOUT_STR)\n    {\n    code += GET(code, 1 + 2*LINK_SIZE);\n    continue;\n    }\n\n  /* At the end of a branch, skip to the end of the group and process it. */\n\n  if (c == OP_ALT)\n    {\n    do code += GET(code, 1); while (*code == OP_ALT);\n    c = *code;\n    }\n\n  /* Inspect the next opcode. */\n\n  switch(c)\n    {\n    /* We can always possessify a greedy iterator at the end of the pattern,\n    which is reached after skipping over the final OP_KET. A non-greedy\n    iterator must never be possessified. */\n\n    case OP_END:\n    return base_list[1] != 0;\n\n    /* When an iterator is at the end of certain kinds of group we can inspect\n    what follows the group by skipping over the closing ket. Note that this\n    does not apply to OP_KETRMAX or OP_KETRMIN because what follows any given\n    iteration is variable (could be another iteration or could be the next\n    item). As these two opcodes are not listed in the next switch, they will\n    end up as the next code to inspect, and return FALSE by virtue of being\n    unsupported. */\n\n    case OP_KET:\n    case OP_KETRPOS:\n    /* The non-greedy case cannot be converted to a possessive form. */\n\n    if (base_list[1] == 0) return FALSE;\n\n    /* If the bracket is capturing it might be referenced by an OP_RECURSE\n    so its last iterator can never be possessified if the pattern contains\n    recursions. (This could be improved by keeping a list of group numbers that\n    are called by recursion.) */\n\n    bracode = code - GET(code, 1);\n    switch(*bracode)\n      {\n      case OP_CBRA:\n      case OP_SCBRA:\n      case OP_CBRAPOS:\n      case OP_SCBRAPOS:\n      if (cb->had_recurse) return FALSE;\n      break;\n\n      /* A script run might have to backtrack if the iterated item can match\n      characters from more than one script. So give up unless repeating an\n      explicit character. */\n\n      case OP_SCRIPT_RUN:\n      if (base_list[0] != OP_CHAR && base_list[0] != OP_CHARI)\n        return FALSE;\n      break;\n\n      /* Atomic sub-patterns and forward assertions can always auto-possessify\n      their last iterator. However, if the group was entered as a result of\n      checking a previous iterator, this is not possible. */\n\n      case OP_ASSERT:\n      case OP_ASSERT_NOT:\n      case OP_ONCE:\n      return !entered_a_group;\n\n      /* Fixed-length lookbehinds can be treated the same way, but variable\n      length lookbehinds must not auto-possessify their last iterator. Note\n      that in order to identify a variable length lookbehind we must check\n      through all branches, because some may be of fixed length. */\n\n      case OP_ASSERTBACK:\n      case OP_ASSERTBACK_NOT:\n      do\n        {\n        if (bracode[1+LINK_SIZE] == OP_VREVERSE) return FALSE;  /* Variable */\n        bracode += GET(bracode, 1);\n        }\n      while (*bracode == OP_ALT);\n      return !entered_a_group;  /* Not variable length */\n\n      /* Non-atomic assertions - don't possessify last iterator. This needs\n      more thought. */\n\n      case OP_ASSERT_NA:\n      case OP_ASSERTBACK_NA:\n      return FALSE;\n      }\n\n    /* Skip over the bracket and inspect what comes next. */\n\n    code += PRIV(OP_lengths)[c];\n    continue;\n\n    /* Handle cases where the next item is a group. */\n\n    case OP_ONCE:\n    case OP_BRA:\n    case OP_CBRA:\n    next_code = code + GET(code, 1);\n    code += PRIV(OP_lengths)[c];\n\n    /* Check each branch. We have to recurse a level for all but the last\n    branch. */\n\n    while (*next_code == OP_ALT)\n      {\n      if (!compare_opcodes(code, utf, ucp, cb, base_list, base_end, rec_limit))\n        return FALSE;\n      code = next_code + 1 + LINK_SIZE;\n      next_code += GET(next_code, 1);\n      }\n\n    entered_a_group = TRUE;\n    continue;\n\n    case OP_BRAZERO:\n    case OP_BRAMINZERO:\n\n    next_code = code + 1;\n    if (*next_code != OP_BRA && *next_code != OP_CBRA &&\n        *next_code != OP_ONCE) return FALSE;\n\n    do next_code += GET(next_code, 1); while (*next_code == OP_ALT);\n\n    /* The bracket content will be checked by the OP_BRA/OP_CBRA case above. */\n\n    next_code += 1 + LINK_SIZE;\n    if (!compare_opcodes(next_code, utf, ucp, cb, base_list, base_end,\n         rec_limit))\n      return FALSE;\n\n    code += PRIV(OP_lengths)[c];\n    continue;\n\n    /* The next opcode does not need special handling; fall through and use it\n    to see if the base can be possessified. */\n\n    default:\n    break;\n    }\n\n  /* We now have the next appropriate opcode to compare with the base. Check\n  for a supported opcode, and load its properties. */\n\n  code = get_chr_property_list(code, utf, ucp, cb->fcc, list);\n  if (code == NULL) return FALSE;    /* Unsupported */\n\n  /* If either opcode is a small character list, set pointers for comparing\n  characters from that list with another list, or with a property. */\n\n  if (base_list[0] == OP_CHAR)\n    {\n    chr_ptr = base_list + 2;\n    list_ptr = list;\n    }\n  else if (list[0] == OP_CHAR)\n    {\n    chr_ptr = list + 2;\n    list_ptr = base_list;\n    }\n\n  /* Character bitsets can also be compared to certain opcodes. */\n\n  else if (base_list[0] == OP_CLASS || list[0] == OP_CLASS\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      /* In 8 bit, non-UTF mode, OP_CLASS and OP_NCLASS are the same. */\n      || (!utf && (base_list[0] == OP_NCLASS || list[0] == OP_NCLASS))\n#endif\n      )\n    {\n#if PCRE2_CODE_UNIT_WIDTH == 8\n    if (base_list[0] == OP_CLASS || (!utf && base_list[0] == OP_NCLASS))\n#else\n    if (base_list[0] == OP_CLASS)\n#endif\n      {\n      set1 = (const uint8_t *)(base_end - base_list[2]);\n      list_ptr = list;\n      }\n    else\n      {\n      set1 = (const uint8_t *)(code - list[2]);\n      list_ptr = base_list;\n      }\n\n    invert_bits = FALSE;\n    switch(list_ptr[0])\n      {\n      case OP_CLASS:\n      case OP_NCLASS:\n      set2 = (const uint8_t *)\n        ((list_ptr == list ? code : base_end) - list_ptr[2]);\n      break;\n\n#ifdef SUPPORT_WIDE_CHARS\n      case OP_XCLASS:\n      xclass_flags = (list_ptr == list ? code : base_end) -\n        list_ptr[2] + LINK_SIZE;\n      if ((*xclass_flags & XCL_HASPROP) != 0) return FALSE;\n      if ((*xclass_flags & XCL_MAP) == 0)\n        {\n        /* No bits are set for characters < 256. */\n        if (list[1] == 0) return (*xclass_flags & XCL_NOT) == 0;\n        /* Might be an empty repeat. */\n        continue;\n        }\n      set2 = (const uint8_t *)(xclass_flags + 1);\n      break;\n#endif\n\n      case OP_NOT_DIGIT:\n      invert_bits = TRUE;\n      PCRE2_FALLTHROUGH /* Fall through */\n      case OP_DIGIT:\n      set2 = (const uint8_t *)(cb->cbits + cbit_digit);\n      break;\n\n      case OP_NOT_WHITESPACE:\n      invert_bits = TRUE;\n      PCRE2_FALLTHROUGH /* Fall through */\n      case OP_WHITESPACE:\n      set2 = (const uint8_t *)(cb->cbits + cbit_space);\n      break;\n\n      case OP_NOT_WORDCHAR:\n      invert_bits = TRUE;\n      PCRE2_FALLTHROUGH /* Fall through */\n      case OP_WORDCHAR:\n      set2 = (const uint8_t *)(cb->cbits + cbit_word);\n      break;\n\n      default:\n      return FALSE;\n      }\n\n    /* Because the bit sets are unaligned bytes, we need to perform byte\n    comparison here. */\n\n    set_end = set1 + 32;\n    if (invert_bits)\n      {\n      do\n        {\n        if ((*set1++ & ~(*set2++)) != 0) return FALSE;\n        }\n      while (set1 < set_end);\n      }\n    else\n      {\n      do\n        {\n        if ((*set1++ & *set2++) != 0) return FALSE;\n        }\n      while (set1 < set_end);\n      }\n\n    if (list[1] == 0) return TRUE;\n    /* Might be an empty repeat. */\n    continue;\n    }\n\n  /* Some property combinations also acceptable. Unicode property opcodes are\n  processed specially; the rest can be handled with a lookup table. */\n\n  else\n    {\n    uint32_t leftop, rightop;\n\n    leftop = base_list[0];\n    rightop = list[0];\n\n#ifdef SUPPORT_UNICODE\n    accepted = FALSE; /* Always set in non-unicode case. */\n    if (leftop == OP_PROP || leftop == OP_NOTPROP)\n      {\n      if (rightop == OP_EOD)\n        accepted = TRUE;\n      else if (rightop == OP_PROP || rightop == OP_NOTPROP)\n        {\n        int n;\n        const uint8_t *p;\n        BOOL same = leftop == rightop;\n        BOOL lisprop = leftop == OP_PROP;\n        BOOL risprop = rightop == OP_PROP;\n        BOOL bothprop = lisprop && risprop;\n\n        /* There's a table that specifies how each combination is to be\n        processed:\n          0   Always return FALSE (never auto-possessify)\n          1   Character groups are distinct (possessify if both are OP_PROP)\n          2   Check character categories in the same group (general or particular)\n          3   Return TRUE if the two opcodes are not the same\n          ... see comments below\n        */\n\n        n = propposstab[base_list[2]][list[2]];\n        switch(n)\n          {\n          case 0: break;\n          case 1: accepted = bothprop; break;\n          case 2: accepted = (base_list[3] == list[3]) != same; break;\n          case 3: accepted = !same; break;\n\n          case 4:  /* Left general category, right particular category */\n          accepted = risprop && catposstab[base_list[3]][list[3]] == same;\n          break;\n\n          case 5:  /* Right general category, left particular category */\n          accepted = lisprop && catposstab[list[3]][base_list[3]] == same;\n          break;\n\n          /* This code is logically tricky. Think hard before fiddling with it.\n          The posspropstab table has four entries per row. Each row relates to\n          one of PCRE's special properties such as ALNUM or SPACE or WORD.\n          Only WORD actually needs all four entries, but using repeats for the\n          others means they can all use the same code below.\n\n          The first two entries in each row are Unicode general categories, and\n          apply always, because all the characters they include are part of the\n          PCRE character set. The third and fourth entries are a general and a\n          particular category, respectively, that include one or more relevant\n          characters. One or the other is used, depending on whether the check\n          is for a general or a particular category. However, in both cases the\n          category contains more characters than the specials that are defined\n          for the property being tested against. Therefore, it cannot be used\n          in a NOTPROP case.\n\n          Example: the row for WORD contains ucp_L, ucp_N, ucp_P, ucp_Po.\n          Underscore is covered by ucp_P or ucp_Po. */\n\n          case 6:  /* Left alphanum vs right general category */\n          case 7:  /* Left space vs right general category */\n          case 8:  /* Left word vs right general category */\n          p = posspropstab[n-6];\n          accepted = risprop && lisprop ==\n            (list[3] != p[0] &&\n             list[3] != p[1] &&\n            (list[3] != p[2] || !lisprop));\n          break;\n\n          case 9:   /* Right alphanum vs left general category */\n          case 10:  /* Right space vs left general category */\n          case 11:  /* Right word vs left general category */\n          p = posspropstab[n-9];\n          accepted = lisprop && risprop ==\n            (base_list[3] != p[0] &&\n             base_list[3] != p[1] &&\n            (base_list[3] != p[2] || !risprop));\n          break;\n\n          case 12:  /* Left alphanum vs right particular category */\n          case 13:  /* Left space vs right particular category */\n          case 14:  /* Left word vs right particular category */\n          p = posspropstab[n-12];\n          accepted = risprop && lisprop ==\n            (catposstab[p[0]][list[3]] &&\n             catposstab[p[1]][list[3]] &&\n            (list[3] != p[3] || !lisprop));\n          break;\n\n          case 15:  /* Right alphanum vs left particular category */\n          case 16:  /* Right space vs left particular category */\n          case 17:  /* Right word vs left particular category */\n          p = posspropstab[n-15];\n          accepted = lisprop && risprop ==\n            (catposstab[p[0]][base_list[3]] &&\n             catposstab[p[1]][base_list[3]] &&\n            (base_list[3] != p[3] || !risprop));\n          break;\n          }\n        }\n      }\n\n    else\n#endif  /* SUPPORT_UNICODE */\n\n    accepted = leftop >= FIRST_AUTOTAB_OP && leftop <= LAST_AUTOTAB_LEFT_OP &&\n           rightop >= FIRST_AUTOTAB_OP && rightop <= LAST_AUTOTAB_RIGHT_OP &&\n           autoposstab[leftop - FIRST_AUTOTAB_OP][rightop - FIRST_AUTOTAB_OP];\n\n    if (!accepted) return FALSE;\n\n    if (list[1] == 0) return TRUE;\n    /* Might be an empty repeat. */\n    continue;\n    }\n\n  /* Control reaches here only if one of the items is a small character list.\n  All characters are checked against the other side. */\n\n  do\n    {\n    chr = *chr_ptr;\n\n    switch(list_ptr[0])\n      {\n      case OP_CHAR:\n      ochr_ptr = list_ptr + 2;\n      do\n        {\n        if (chr == *ochr_ptr) return FALSE;\n        ochr_ptr++;\n        }\n      while(*ochr_ptr != NOTACHAR);\n      break;\n\n      case OP_NOT:\n      ochr_ptr = list_ptr + 2;\n      do\n        {\n        if (chr == *ochr_ptr)\n          break;\n        ochr_ptr++;\n        }\n      while(*ochr_ptr != NOTACHAR);\n      if (*ochr_ptr == NOTACHAR) return FALSE;   /* Not found */\n      break;\n\n      /* Note that OP_DIGIT etc. are generated only when PCRE2_UCP is *not*\n      set. When it is set, \\d etc. are converted into OP_(NOT_)PROP codes. */\n\n      case OP_DIGIT:\n      if (chr < 256 && (cb->ctypes[chr] & ctype_digit) != 0) return FALSE;\n      break;\n\n      case OP_NOT_DIGIT:\n      if (chr > 255 || (cb->ctypes[chr] & ctype_digit) == 0) return FALSE;\n      break;\n\n      case OP_WHITESPACE:\n      if (chr < 256 && (cb->ctypes[chr] & ctype_space) != 0) return FALSE;\n      break;\n\n      case OP_NOT_WHITESPACE:\n      if (chr > 255 || (cb->ctypes[chr] & ctype_space) == 0) return FALSE;\n      break;\n\n      case OP_WORDCHAR:\n      if (chr < 255 && (cb->ctypes[chr] & ctype_word) != 0) return FALSE;\n      break;\n\n      case OP_NOT_WORDCHAR:\n      if (chr > 255 || (cb->ctypes[chr] & ctype_word) == 0) return FALSE;\n      break;\n\n      case OP_HSPACE:\n      switch(chr)\n        {\n        HSPACE_CASES: return FALSE;\n        default: break;\n        }\n      break;\n\n      case OP_NOT_HSPACE:\n      switch(chr)\n        {\n        HSPACE_CASES: break;\n        default: return FALSE;\n        }\n      break;\n\n      case OP_ANYNL:\n      case OP_VSPACE:\n      switch(chr)\n        {\n        VSPACE_CASES: return FALSE;\n        default: break;\n        }\n      break;\n\n      case OP_NOT_VSPACE:\n      switch(chr)\n        {\n        VSPACE_CASES: break;\n        default: return FALSE;\n        }\n      break;\n\n      case OP_DOLL:\n      case OP_EODN:\n      switch (chr)\n        {\n        case CHAR_CR:\n        case CHAR_LF:\n        case CHAR_VT:\n        case CHAR_FF:\n        case CHAR_NEL:\n#ifndef EBCDIC\n        case 0x2028:\n        case 0x2029:\n#endif  /* Not EBCDIC */\n        return FALSE;\n        }\n      break;\n\n      case OP_EOD:    /* Can always possessify before \\z */\n      break;\n\n#ifdef SUPPORT_UNICODE\n      case OP_PROP:\n      case OP_NOTPROP:\n      if (!check_char_prop(chr, list_ptr[2], list_ptr[3],\n            list_ptr[0] == OP_NOTPROP))\n        return FALSE;\n      break;\n#endif\n\n      case OP_NCLASS:\n      if (chr > 255) return FALSE;\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      case OP_CLASS:\n      if (chr > 255) break;\n      class_bitset = (const uint8_t *)\n        ((list_ptr == list ? code : base_end) - list_ptr[2]);\n      if ((class_bitset[chr >> 3] & (1u << (chr & 7))) != 0) return FALSE;\n      break;\n\n#ifdef SUPPORT_WIDE_CHARS\n      case OP_XCLASS:\n      if (PRIV(xclass)(chr, (list_ptr == list ? code : base_end) -\n          list_ptr[2] + LINK_SIZE, (const uint8_t*)cb->start_code, utf))\n        return FALSE;\n      break;\n\n      case OP_ECLASS:\n      if (PRIV(eclass)(chr,\n          (list_ptr == list ? code : base_end) - list_ptr[2] + LINK_SIZE,\n          (list_ptr == list ? code : base_end) - list_ptr[3],\n          (const uint8_t*)cb->start_code, utf))\n        return FALSE;\n      break;\n#endif /* SUPPORT_WIDE_CHARS */\n\n      default:\n      return FALSE;\n      }\n\n    chr_ptr++;\n    }\n  while(*chr_ptr != NOTACHAR);\n\n  /* At least one character must be matched from this opcode. */\n\n  if (list[1] == 0) return TRUE;\n  }\n\n/* LCOV_EXCL_START */\nPCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */\nreturn FALSE;              /* Avoid compiler warnings */\n/* LCOV_EXCL_STOP */\n}\n\n\n\n/*************************************************\n*    Scan compiled regex for auto-possession     *\n*************************************************/\n\n/* Replaces single character iterations with their possessive alternatives\nif appropriate. This function modifies the compiled opcode! Hitting a\nnon-existent opcode may indicate a bug in PCRE2, but it can also be caused if a\nbad UTF string was compiled with PCRE2_NO_UTF_CHECK. The rec_limit catches\noverly complicated or large patterns. In these cases, the check just stops,\nleaving the remainder of the pattern unpossessified.\n\nArguments:\n  code        points to start of the byte code\n  cb          compile data block\n\nReturns:      0 for success\n              -1 if a non-existant opcode is encountered\n*/\n\nint\nPRIV(auto_possessify)(PCRE2_UCHAR *code, const compile_block *cb)\n{\nPCRE2_UCHAR c;\nPCRE2_SPTR end;\nPCRE2_UCHAR *repeat_opcode;\nuint32_t list[MAX_LIST];\nint rec_limit = 1000;  /* Was 10,000 but clang+ASAN uses a lot of stack. */\nBOOL utf = (cb->external_options & PCRE2_UTF) != 0;\nBOOL ucp = (cb->external_options & PCRE2_UCP) != 0;\n\nfor (;;)\n  {\n  c = *code;\n\n  /* LCOV_EXCL_START */\n  if (c >= OP_TABLE_LENGTH)\n    {\n    PCRE2_DEBUG_UNREACHABLE();\n    return -1;   /* Something gone wrong */\n    }\n  /* LCOV_EXCL_STOP */\n\n  if (c >= OP_STAR && c <= OP_TYPEPOSUPTO)\n    {\n    c -= get_repeat_base(c) - OP_STAR;\n    end = (c <= OP_MINUPTO) ?\n      get_chr_property_list(code, utf, ucp, cb->fcc, list) : NULL;\n    list[1] = c == OP_STAR || c == OP_PLUS || c == OP_QUERY || c == OP_UPTO;\n\n    if (end != NULL && compare_opcodes(end, utf, ucp, cb, list, end,\n        &rec_limit))\n      {\n      switch(c)\n        {\n        case OP_STAR:\n        *code += OP_POSSTAR - OP_STAR;\n        break;\n\n        case OP_MINSTAR:\n        *code += OP_POSSTAR - OP_MINSTAR;\n        break;\n\n        case OP_PLUS:\n        *code += OP_POSPLUS - OP_PLUS;\n        break;\n\n        case OP_MINPLUS:\n        *code += OP_POSPLUS - OP_MINPLUS;\n        break;\n\n        case OP_QUERY:\n        *code += OP_POSQUERY - OP_QUERY;\n        break;\n\n        case OP_MINQUERY:\n        *code += OP_POSQUERY - OP_MINQUERY;\n        break;\n\n        case OP_UPTO:\n        *code += OP_POSUPTO - OP_UPTO;\n        break;\n\n        case OP_MINUPTO:\n        *code += OP_POSUPTO - OP_MINUPTO;\n        break;\n        }\n      }\n    c = *code;\n    }\n  else if (c == OP_CLASS || c == OP_NCLASS\n#ifdef SUPPORT_WIDE_CHARS\n           || c == OP_XCLASS || c == OP_ECLASS\n#endif\n           )\n    {\n#ifdef SUPPORT_WIDE_CHARS\n    if (c == OP_XCLASS || c == OP_ECLASS)\n      repeat_opcode = code + GET(code, 1);\n    else\n#endif\n      repeat_opcode = code + 1 + (32 / sizeof(PCRE2_UCHAR));\n\n    c = *repeat_opcode;\n    if (c >= OP_CRSTAR && c <= OP_CRMINRANGE)\n      {\n      /* The return from get_chr_property_list() will never be NULL when\n      *code (aka c) is one of the four class opcodes. However, gcc with\n      -fanalyzer notes that a NULL return is possible, and grumbles. Hence we\n      put in a check. */\n\n      end = get_chr_property_list(code, utf, ucp, cb->fcc, list);\n      list[1] = (c & 1) == 0;\n\n      if (end != NULL &&\n          compare_opcodes(end, utf, ucp, cb, list, end, &rec_limit))\n        {\n        switch (c)\n          {\n          case OP_CRSTAR:\n          case OP_CRMINSTAR:\n          *repeat_opcode = OP_CRPOSSTAR;\n          break;\n\n          case OP_CRPLUS:\n          case OP_CRMINPLUS:\n          *repeat_opcode = OP_CRPOSPLUS;\n          break;\n\n          case OP_CRQUERY:\n          case OP_CRMINQUERY:\n          *repeat_opcode = OP_CRPOSQUERY;\n          break;\n\n          case OP_CRRANGE:\n          case OP_CRMINRANGE:\n          *repeat_opcode = OP_CRPOSRANGE;\n          break;\n          }\n        }\n      }\n    c = *code;\n    }\n\n  switch(c)\n    {\n    case OP_END:\n    return 0;\n\n    case OP_TYPESTAR:\n    case OP_TYPEMINSTAR:\n    case OP_TYPEPLUS:\n    case OP_TYPEMINPLUS:\n    case OP_TYPEQUERY:\n    case OP_TYPEMINQUERY:\n    case OP_TYPEPOSSTAR:\n    case OP_TYPEPOSPLUS:\n    case OP_TYPEPOSQUERY:\n    if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2;\n    break;\n\n    case OP_TYPEUPTO:\n    case OP_TYPEMINUPTO:\n    case OP_TYPEEXACT:\n    case OP_TYPEPOSUPTO:\n    if (code[1 + IMM2_SIZE] == OP_PROP || code[1 + IMM2_SIZE] == OP_NOTPROP)\n      code += 2;\n    break;\n\n    case OP_CALLOUT_STR:\n    code += GET(code, 1 + 2*LINK_SIZE);\n    break;\n\n#ifdef SUPPORT_WIDE_CHARS\n    case OP_XCLASS:\n    case OP_ECLASS:\n    code += GET(code, 1);\n    break;\n#endif\n\n    case OP_MARK:\n    case OP_COMMIT_ARG:\n    case OP_PRUNE_ARG:\n    case OP_SKIP_ARG:\n    case OP_THEN_ARG:\n    code += code[1];\n    break;\n    }\n\n  /* Add in the fixed length from the table */\n\n  code += PRIV(OP_lengths)[c];\n\n  /* In UTF-8 and UTF-16 modes, opcodes that are followed by a character may be\n  followed by a multi-byte character. The length in the table is a minimum, so\n  we have to arrange to skip the extra code units. */\n\n#ifdef MAYBE_UTF_MULTI\n  if (utf) switch(c)\n    {\n    case OP_CHAR:\n    case OP_CHARI:\n    case OP_NOT:\n    case OP_NOTI:\n    case OP_STAR:\n    case OP_MINSTAR:\n    case OP_PLUS:\n    case OP_MINPLUS:\n    case OP_QUERY:\n    case OP_MINQUERY:\n    case OP_UPTO:\n    case OP_MINUPTO:\n    case OP_EXACT:\n    case OP_POSSTAR:\n    case OP_POSPLUS:\n    case OP_POSQUERY:\n    case OP_POSUPTO:\n    case OP_STARI:\n    case OP_MINSTARI:\n    case OP_PLUSI:\n    case OP_MINPLUSI:\n    case OP_QUERYI:\n    case OP_MINQUERYI:\n    case OP_UPTOI:\n    case OP_MINUPTOI:\n    case OP_EXACTI:\n    case OP_POSSTARI:\n    case OP_POSPLUSI:\n    case OP_POSQUERYI:\n    case OP_POSUPTOI:\n    case OP_NOTSTAR:\n    case OP_NOTMINSTAR:\n    case OP_NOTPLUS:\n    case OP_NOTMINPLUS:\n    case OP_NOTQUERY:\n    case OP_NOTMINQUERY:\n    case OP_NOTUPTO:\n    case OP_NOTMINUPTO:\n    case OP_NOTEXACT:\n    case OP_NOTPOSSTAR:\n    case OP_NOTPOSPLUS:\n    case OP_NOTPOSQUERY:\n    case OP_NOTPOSUPTO:\n    case OP_NOTSTARI:\n    case OP_NOTMINSTARI:\n    case OP_NOTPLUSI:\n    case OP_NOTMINPLUSI:\n    case OP_NOTQUERYI:\n    case OP_NOTMINQUERYI:\n    case OP_NOTUPTOI:\n    case OP_NOTMINUPTOI:\n    case OP_NOTEXACTI:\n    case OP_NOTPOSSTARI:\n    case OP_NOTPOSPLUSI:\n    case OP_NOTPOSQUERYI:\n    case OP_NOTPOSUPTOI:\n    if (HAS_EXTRALEN(code[-1])) code += GET_EXTRALEN(code[-1]);\n    break;\n    }\n#else\n  (void)(utf);  /* Keep compiler happy by referencing function argument */\n#endif  /* SUPPORT_WIDE_CHARS */\n  }\n}\n\n/* End of pcre2_auto_possess.c */\n"
  },
  {
    "path": "src/pcre2_chartables.c.dist",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* This file was automatically written by the pcre2_dftables auxiliary\nprogram. It contains character tables that are used when no external\ntables are passed to PCRE2 by the application that calls it. The tables\nare used only for characters whose code values are less than 256, and\nonly relevant if not in UCP mode. */\n\n/* This set of tables was written in the C locale. */\n\n/* The pcre2_ftables program (which is distributed with PCRE2) can be used\nto build alternative versions of this file. This is necessary if you are\nrunning in an EBCDIC environment, or if you want to default to a different\nencoding, for example ISO-8859-1. When pcre2_dftables is run, it creates\nthese tables in the \"C\" locale by default. This happens automatically if\nPCRE2 is configured with --enable-rebuild-chartables. However, you can run\npcre2_dftables manually with the -L option to build tables using the LC_ALL\nlocale. */\n\n#include \"pcre2_internal.h\"\n\nconst uint8_t PRIV(default_tables)[] = {\n\n/* This table is a lower casing table. */\n\n    0,  1,  2,  3,  4,  5,  6,  7,\n    8,  9, 10, 11, 12, 13, 14, 15,\n   16, 17, 18, 19, 20, 21, 22, 23,\n   24, 25, 26, 27, 28, 29, 30, 31,\n   32, 33, 34, 35, 36, 37, 38, 39,\n   40, 41, 42, 43, 44, 45, 46, 47,\n   48, 49, 50, 51, 52, 53, 54, 55,\n   56, 57, 58, 59, 60, 61, 62, 63,\n   64, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122, 91, 92, 93, 94, 95,\n   96, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122,123,124,125,126,127,\n  128,129,130,131,132,133,134,135,\n  136,137,138,139,140,141,142,143,\n  144,145,146,147,148,149,150,151,\n  152,153,154,155,156,157,158,159,\n  160,161,162,163,164,165,166,167,\n  168,169,170,171,172,173,174,175,\n  176,177,178,179,180,181,182,183,\n  184,185,186,187,188,189,190,191,\n  192,193,194,195,196,197,198,199,\n  200,201,202,203,204,205,206,207,\n  208,209,210,211,212,213,214,215,\n  216,217,218,219,220,221,222,223,\n  224,225,226,227,228,229,230,231,\n  232,233,234,235,236,237,238,239,\n  240,241,242,243,244,245,246,247,\n  248,249,250,251,252,253,254,255,\n\n/* This table is a case flipping table. */\n\n    0,  1,  2,  3,  4,  5,  6,  7,\n    8,  9, 10, 11, 12, 13, 14, 15,\n   16, 17, 18, 19, 20, 21, 22, 23,\n   24, 25, 26, 27, 28, 29, 30, 31,\n   32, 33, 34, 35, 36, 37, 38, 39,\n   40, 41, 42, 43, 44, 45, 46, 47,\n   48, 49, 50, 51, 52, 53, 54, 55,\n   56, 57, 58, 59, 60, 61, 62, 63,\n   64, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122, 91, 92, 93, 94, 95,\n   96, 65, 66, 67, 68, 69, 70, 71,\n   72, 73, 74, 75, 76, 77, 78, 79,\n   80, 81, 82, 83, 84, 85, 86, 87,\n   88, 89, 90,123,124,125,126,127,\n  128,129,130,131,132,133,134,135,\n  136,137,138,139,140,141,142,143,\n  144,145,146,147,148,149,150,151,\n  152,153,154,155,156,157,158,159,\n  160,161,162,163,164,165,166,167,\n  168,169,170,171,172,173,174,175,\n  176,177,178,179,180,181,182,183,\n  184,185,186,187,188,189,190,191,\n  192,193,194,195,196,197,198,199,\n  200,201,202,203,204,205,206,207,\n  208,209,210,211,212,213,214,215,\n  216,217,218,219,220,221,222,223,\n  224,225,226,227,228,229,230,231,\n  232,233,234,235,236,237,238,239,\n  240,241,242,243,244,245,246,247,\n  248,249,250,251,252,253,254,255,\n\n/* This table contains bit maps for various character classes. Each map is 32\nbytes long and the bits run from the least significant end of each byte. The\nclasses that have their own maps are: space, xdigit, digit, upper, lower, word,\ngraph, print, punct, and cntrl. Other classes are built from combinations. */\n\n  0x00,0x3e,0x00,0x00,0x01,0x00,0x00,0x00,  /* space */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,  /* xdigit */\n  0x7e,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,  /* digit */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* upper */\n  0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* lower */\n  0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,  /* word */\n  0xfe,0xff,0xff,0x87,0xfe,0xff,0xff,0x07,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,  /* graph */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,  /* print */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0xfc,  /* punct */\n  0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x78,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,  /* cntrl */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n/* This table identifies various classes of character by individual bits:\n  0x01   white space character\n  0x02   letter\n  0x04   lower case letter\n  0x08   decimal digit\n  0x10   word (alphanumeric or '_')\n*/\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7 */\n  0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00, /*   8- 15 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */\n  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - '  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ( - /  */\n  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /*  0 - 7  */\n  0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /*  8 - ?  */\n  0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  @ - G  */\n  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  H - O  */\n  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  P - W  */\n  0x12,0x12,0x12,0x00,0x00,0x00,0x00,0x10, /*  X - _  */\n  0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /*  ` - g  */\n  0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /*  h - o  */\n  0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /*  p - w  */\n  0x16,0x16,0x16,0x00,0x00,0x00,0x00,0x00, /*  x -127 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */\n\n/* End of pcre2_chartables.c */\n"
  },
  {
    "path": "src/pcre2_chartables.c.ebcdic-1047-nl15",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* This file was automatically written by the pcre2_dftables auxiliary\nprogram. It contains character tables that are used when no external\ntables are passed to PCRE2 by the application that calls it. The tables\nare used only for characters whose code values are less than 256, and\nonly relevant if not in UCP mode. */\n\n/* This set of tables was written in the EBCDIC 1047 (NL 0x15) locale. */\n\n/* The pcre2_ftables program (which is distributed with PCRE2) can be used\nto build alternative versions of this file. This is necessary if you are\nrunning in an EBCDIC environment, or if you want to default to a different\nencoding, for example ISO-8859-1. When pcre2_dftables is run, it creates\nthese tables in the \"C\" locale by default. This happens automatically if\nPCRE2 is configured with --enable-rebuild-chartables. However, you can run\npcre2_dftables manually with the -L option to build tables using the LC_ALL\nlocale. */\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"pcre2_internal.h\"\n\nconst uint8_t PRIV(default_tables)[] = {\n\n/* This table is a lower casing table. */\n\n    0,  1,  2,  3,  4,  5,  6,  7,\n    8,  9, 10, 11, 12, 13, 14, 15,\n   16, 17, 18, 19, 20, 21, 22, 23,\n   24, 25, 26, 27, 28, 29, 30, 31,\n   32, 33, 34, 35, 36, 37, 38, 39,\n   40, 41, 42, 43, 44, 45, 46, 47,\n   48, 49, 50, 51, 52, 53, 54, 55,\n   56, 57, 58, 59, 60, 61, 62, 63,\n   64, 65, 66, 67, 68, 69, 70, 71,\n   72, 73, 74, 75, 76, 77, 78, 79,\n   80, 81, 82, 83, 84, 85, 86, 87,\n   88, 89, 90, 91, 92, 93, 94, 95,\n   96, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122,123,124,125,126,127,\n  128,129,130,131,132,133,134,135,\n  136,137,138,139,140,141,142,143,\n  144,145,146,147,148,149,150,151,\n  152,153,154,155,156,157,158,159,\n  160,161,162,163,164,165,166,167,\n  168,169,170,171,172,173,174,175,\n  176,177,178,179,180,181,182,183,\n  184,185,186,187,188,189,190,191,\n  192,129,130,131,132,133,134,135,\n  136,137,202,203,204,205,206,207,\n  208,145,146,147,148,149,150,151,\n  152,153,218,219,220,221,222,223,\n  224,225,162,163,164,165,166,167,\n  168,169,234,235,236,237,238,239,\n  240,241,242,243,244,245,246,247,\n  248,249,250,251,252,253,254,255,\n\n/* This table is a case flipping table. */\n\n    0,  1,  2,  3,  4,  5,  6,  7,\n    8,  9, 10, 11, 12, 13, 14, 15,\n   16, 17, 18, 19, 20, 21, 22, 23,\n   24, 25, 26, 27, 28, 29, 30, 31,\n   32, 33, 34, 35, 36, 37, 38, 39,\n   40, 41, 42, 43, 44, 45, 46, 47,\n   48, 49, 50, 51, 52, 53, 54, 55,\n   56, 57, 58, 59, 60, 61, 62, 63,\n   64, 65, 66, 67, 68, 69, 70, 71,\n   72, 73, 74, 75, 76, 77, 78, 79,\n   80, 81, 82, 83, 84, 85, 86, 87,\n   88, 89, 90, 91, 92, 93, 94, 95,\n   96, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122,123,124,125,126,127,\n  128,193,194,195,196,197,198,199,\n  200,201,138,139,140,141,142,143,\n  144,209,210,211,212,213,214,215,\n  216,217,154,155,156,157,158,159,\n  160,161,226,227,228,229,230,231,\n  232,233,170,171,172,173,174,175,\n  176,177,178,179,180,181,182,183,\n  184,185,186,187,188,189,190,191,\n  192,129,130,131,132,133,134,135,\n  136,137,202,203,204,205,206,207,\n  208,145,146,147,148,149,150,151,\n  152,153,218,219,220,221,222,223,\n  224,225,162,163,164,165,166,167,\n  168,169,234,235,236,237,238,239,\n  240,241,242,243,244,245,246,247,\n  248,249,250,251,252,253,254,255,\n\n/* This table contains bit maps for various character classes. Each map is 32\nbytes long and the bits run from the least significant end of each byte. The\nclasses that have their own maps are: space, xdigit, digit, upper, lower, word,\ngraph, print, punct, and cntrl. Other classes are built from combinations. */\n\n  0x20,0x38,0x20,0x00,0x00,0x00,0x00,0x00,  /* space */\n  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* xdigit */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x7e,0x00,0x00,0x00,0x00,0x00,0xff,0x03,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* digit */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* upper */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* lower */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* word */\n  0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,\n  0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00,\n  0xfe,0x03,0xfe,0x03,0xfc,0x03,0xff,0x03,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* graph */\n  0x00,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe,\n  0xfe,0x03,0xfe,0x03,0xfe,0x23,0x00,0x20,\n  0xff,0x03,0xff,0x03,0xfd,0x03,0xff,0x03,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* print */\n  0x01,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe,\n  0xfe,0x03,0xfe,0x03,0xfe,0x23,0x00,0x20,\n  0xff,0x03,0xff,0x03,0xfd,0x03,0xff,0x03,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* punct */\n  0x00,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe,\n  0x00,0x00,0x00,0x00,0x02,0x20,0x00,0x20,\n  0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,\n\n  0xaf,0xf8,0x6f,0xf3,0xc0,0xe0,0x84,0xb0,  /* cntrl */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n/* This table identifies various classes of character by individual bits:\n  0x01   white space character\n  0x02   letter\n  0x04   lower case letter\n  0x08   decimal digit\n  0x10   word (alphanumeric or '_')\n*/\n\n  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*   0-  7 */\n  0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00, /*   8- 15 */\n  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*  16- 23 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - '  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ( - /  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  0 - 7  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  8 - ?  */\n  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  @ - G  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  H - O  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  P - W  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  X - _  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ` - g  */\n  0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00, /*  h - o  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  p - w  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  x -127 */\n  0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /* 128-135 */\n  0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */\n  0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /* 144-151 */\n  0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */\n  0x00,0x00,0x16,0x16,0x16,0x16,0x16,0x16, /* 160-167 */\n  0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */\n  0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 192-199 */\n  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */\n  0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 208-215 */\n  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */\n  0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 224-231 */\n  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */\n  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 240-247 */\n  0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */\n\n/* End of pcre2_chartables.c */\n"
  },
  {
    "path": "src/pcre2_chartables.c.ebcdic-1047-nl25",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* This file was automatically written by the pcre2_dftables auxiliary\nprogram. It contains character tables that are used when no external\ntables are passed to PCRE2 by the application that calls it. The tables\nare used only for characters whose code values are less than 256, and\nonly relevant if not in UCP mode. */\n\n/* This set of tables was written in the EBCDIC 1047 (NL 0x25) locale. */\n\n/* The pcre2_ftables program (which is distributed with PCRE2) can be used\nto build alternative versions of this file. This is necessary if you are\nrunning in an EBCDIC environment, or if you want to default to a different\nencoding, for example ISO-8859-1. When pcre2_dftables is run, it creates\nthese tables in the \"C\" locale by default. This happens automatically if\nPCRE2 is configured with --enable-rebuild-chartables. However, you can run\npcre2_dftables manually with the -L option to build tables using the LC_ALL\nlocale. */\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"pcre2_internal.h\"\n\nconst uint8_t PRIV(default_tables)[] = {\n\n/* This table is a lower casing table. */\n\n    0,  1,  2,  3,  4,  5,  6,  7,\n    8,  9, 10, 11, 12, 13, 14, 15,\n   16, 17, 18, 19, 20, 21, 22, 23,\n   24, 25, 26, 27, 28, 29, 30, 31,\n   32, 33, 34, 35, 36, 37, 38, 39,\n   40, 41, 42, 43, 44, 45, 46, 47,\n   48, 49, 50, 51, 52, 53, 54, 55,\n   56, 57, 58, 59, 60, 61, 62, 63,\n   64, 65, 66, 67, 68, 69, 70, 71,\n   72, 73, 74, 75, 76, 77, 78, 79,\n   80, 81, 82, 83, 84, 85, 86, 87,\n   88, 89, 90, 91, 92, 93, 94, 95,\n   96, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122,123,124,125,126,127,\n  128,129,130,131,132,133,134,135,\n  136,137,138,139,140,141,142,143,\n  144,145,146,147,148,149,150,151,\n  152,153,154,155,156,157,158,159,\n  160,161,162,163,164,165,166,167,\n  168,169,170,171,172,173,174,175,\n  176,177,178,179,180,181,182,183,\n  184,185,186,187,188,189,190,191,\n  192,129,130,131,132,133,134,135,\n  136,137,202,203,204,205,206,207,\n  208,145,146,147,148,149,150,151,\n  152,153,218,219,220,221,222,223,\n  224,225,162,163,164,165,166,167,\n  168,169,234,235,236,237,238,239,\n  240,241,242,243,244,245,246,247,\n  248,249,250,251,252,253,254,255,\n\n/* This table is a case flipping table. */\n\n    0,  1,  2,  3,  4,  5,  6,  7,\n    8,  9, 10, 11, 12, 13, 14, 15,\n   16, 17, 18, 19, 20, 21, 22, 23,\n   24, 25, 26, 27, 28, 29, 30, 31,\n   32, 33, 34, 35, 36, 37, 38, 39,\n   40, 41, 42, 43, 44, 45, 46, 47,\n   48, 49, 50, 51, 52, 53, 54, 55,\n   56, 57, 58, 59, 60, 61, 62, 63,\n   64, 65, 66, 67, 68, 69, 70, 71,\n   72, 73, 74, 75, 76, 77, 78, 79,\n   80, 81, 82, 83, 84, 85, 86, 87,\n   88, 89, 90, 91, 92, 93, 94, 95,\n   96, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122,123,124,125,126,127,\n  128,193,194,195,196,197,198,199,\n  200,201,138,139,140,141,142,143,\n  144,209,210,211,212,213,214,215,\n  216,217,154,155,156,157,158,159,\n  160,161,226,227,228,229,230,231,\n  232,233,170,171,172,173,174,175,\n  176,177,178,179,180,181,182,183,\n  184,185,186,187,188,189,190,191,\n  192,129,130,131,132,133,134,135,\n  136,137,202,203,204,205,206,207,\n  208,145,146,147,148,149,150,151,\n  152,153,218,219,220,221,222,223,\n  224,225,162,163,164,165,166,167,\n  168,169,234,235,236,237,238,239,\n  240,241,242,243,244,245,246,247,\n  248,249,250,251,252,253,254,255,\n\n/* This table contains bit maps for various character classes. Each map is 32\nbytes long and the bits run from the least significant end of each byte. The\nclasses that have their own maps are: space, xdigit, digit, upper, lower, word,\ngraph, print, punct, and cntrl. Other classes are built from combinations. */\n\n  0x20,0x38,0x00,0x00,0x20,0x00,0x00,0x00,  /* space */\n  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* xdigit */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x7e,0x00,0x00,0x00,0x00,0x00,0xff,0x03,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* digit */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* upper */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* lower */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* word */\n  0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,\n  0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00,\n  0xfe,0x03,0xfe,0x03,0xfc,0x03,0xff,0x03,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* graph */\n  0x00,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe,\n  0xfe,0x03,0xfe,0x03,0xfe,0x23,0x00,0x20,\n  0xff,0x03,0xff,0x03,0xfd,0x03,0xff,0x03,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* print */\n  0x01,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe,\n  0xfe,0x03,0xfe,0x03,0xfe,0x23,0x00,0x20,\n  0xff,0x03,0xff,0x03,0xfd,0x03,0xff,0x03,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /* punct */\n  0x00,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe,\n  0x00,0x00,0x00,0x00,0x02,0x20,0x00,0x20,\n  0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,\n\n  0xaf,0xf8,0x4f,0xf3,0xe0,0xe0,0x84,0xb0,  /* cntrl */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n/* This table identifies various classes of character by individual bits:\n  0x01   white space character\n  0x02   letter\n  0x04   lower case letter\n  0x08   decimal digit\n  0x10   word (alphanumeric or '_')\n*/\n\n  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*   0-  7 */\n  0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00, /*   8- 15 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */\n  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*    - '  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ( - /  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  0 - 7  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  8 - ?  */\n  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  @ - G  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  H - O  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  P - W  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  X - _  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ` - g  */\n  0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00, /*  h - o  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  p - w  */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  x -127 */\n  0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /* 128-135 */\n  0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */\n  0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /* 144-151 */\n  0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */\n  0x00,0x00,0x16,0x16,0x16,0x16,0x16,0x16, /* 160-167 */\n  0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */\n  0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 192-199 */\n  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */\n  0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 208-215 */\n  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */\n  0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 224-231 */\n  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */\n  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 240-247 */\n  0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */\n\n/* End of pcre2_chartables.c */\n"
  },
  {
    "path": "src/pcre2_chkdint.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                     Written by Philip Hazel\n            Copyright (c) 2023 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This file contains functions to implement checked integer operation */\n\n\n#ifndef PCRE2_PCRE2TEST\n#include \"pcre2_internal.h\"\n#endif\n\n\n\n/*************************************************\n*        Checked Integer Multiplication          *\n*************************************************/\n\n/*\nArguments:\n  r         A pointer to PCRE2_SIZE to store the answer\n  a, b      Two integers\n\nReturns:    Bool indicating if the operation overflows\n\nIt is modeled after C23's <stdckdint.h> interface\nThe INT64_OR_DOUBLE type is a 64-bit integer type when available,\notherwise double. */\n\nBOOL\nPRIV(ckd_smul)(PCRE2_SIZE *r, int a, int b)\n{\n#ifdef HAVE_BUILTIN_MUL_OVERFLOW\nPCRE2_SIZE m;\n\nif (__builtin_mul_overflow(a, b, &m)) return TRUE;\n\n*r = m;\n#else\nINT64_OR_DOUBLE m;\n\nPCRE2_ASSERT(a >= 0 && b >= 0);\n\nm = (INT64_OR_DOUBLE)a * (INT64_OR_DOUBLE)b;\n\n#if defined INT64_MAX || defined int64_t\nif (sizeof(m) > sizeof(*r) && m > (INT64_OR_DOUBLE)PCRE2_SIZE_MAX) return TRUE;\n*r = (PCRE2_SIZE)m;\n#else\nif (m > PCRE2_SIZE_MAX) return TRUE;\n*r = m;\n#endif\n\n#endif\n\nreturn FALSE;\n}\n\n/* End of pcre2_chkdint.c */\n"
  },
  {
    "path": "src/pcre2_compile.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_compile.h\"\n\n\n\n#define NLBLOCK cb             /* Block containing newline information */\n#define PSSTART start_pattern  /* Field containing processed string start */\n#define PSEND   end_pattern    /* Field containing processed string end */\n\n/* In rare error cases debugging might require calling pcre2_printint(). */\n\n#if 0\n#ifdef EBCDIC\n#define PRINTABLE(c) ((c) >= 64 && (c) < 255)\n#else\n#define PRINTABLE(c) ((c) >= 32 && (c) < 127)\n#endif\n#define CHAR_OUTPUT(c)      (c)\n#define CHAR_OUTPUT_HEX(c)  (c)\n#define CHAR_INPUT(c)       (c)\n#define CHAR_INPUT_HEX(c)   (c)\n#include \"pcre2_printint_inc.h\"\n#undef PRINTABLE\n#undef CHAR_OUTPUT\n#undef CHAR_OUTPUT_HEX\n#undef CHAR_INPUT\n#define DEBUG_CALL_PRINTINT\n#endif\n\n/* Other debugging code can be enabled by these defines. */\n\n/* #define DEBUG_SHOW_CAPTURES */\n/* #define DEBUG_SHOW_PARSED */\n\n/* There are a few things that vary with different code unit sizes. Handle them\nby defining macros in order to minimize #if usage. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#define STRING_UTFn_RIGHTPAR     STRING_UTF8_RIGHTPAR, 5\n#define XDIGIT(c)                xdigitab[c]\n\n#else  /* Either 16-bit or 32-bit */\n#define XDIGIT(c)                (MAX_255(c)? xdigitab[c] : 0xff)\n\n#if PCRE2_CODE_UNIT_WIDTH == 16\n#define STRING_UTFn_RIGHTPAR     STRING_UTF16_RIGHTPAR, 6\n\n#else  /* 32-bit */\n#define STRING_UTFn_RIGHTPAR     STRING_UTF32_RIGHTPAR, 6\n#endif\n#endif\n\n/* Function definitions to allow mutual recursion */\n\nstatic int\n  compile_regex(uint32_t, uint32_t, PCRE2_UCHAR **, uint32_t **, int *,\n    uint32_t, uint32_t *, uint32_t *, uint32_t *, uint32_t *, branch_chain *,\n    open_capitem *, compile_block *, PCRE2_SIZE *);\n\nstatic int\n  get_branchlength(uint32_t **, int *, int *, int *, parsed_recurse_check *,\n    compile_block *);\n\nstatic BOOL\n  set_lookbehind_lengths(uint32_t **, int *, int *, parsed_recurse_check *,\n    compile_block *);\n\nstatic int\n  check_lookbehinds(uint32_t *, uint32_t **, parsed_recurse_check *,\n    compile_block *, int *);\n\n\n/*************************************************\n*      Code parameters and static tables         *\n*************************************************/\n\n#define MAX_GROUP_NUMBER   65535u\n#define MAX_REPEAT_COUNT   65535u\n#define REPEAT_UNLIMITED   (MAX_REPEAT_COUNT+1)\n\n/* COMPILE_WORK_SIZE specifies the size of stack workspace, which is used in\ndifferent ways in the different pattern scans. The parsing and group-\nidentifying pre-scan uses it to handle nesting, and needs it to be 16-bit\naligned for this. Having defined the size in code units, we set up\nC16_WORK_SIZE as the number of elements in the 16-bit vector.\n\nDuring the first compiling phase, when determining how much memory is required,\nthe regex is partly compiled into this space, but the compiled parts are\ndiscarded as soon as they can be, so that hopefully there will never be an\noverrun. The code does, however, check for an overrun, which can occur for\npathological patterns. The size of the workspace depends on LINK_SIZE because\nthe length of compiled items varies with this.\n\nIn the real compile phase, this workspace is not currently used. */\n\n#define COMPILE_WORK_SIZE (3000*LINK_SIZE)   /* Size in code units */\n\n#define C16_WORK_SIZE \\\n  ((COMPILE_WORK_SIZE * sizeof(PCRE2_UCHAR))/sizeof(uint16_t))\n\n/* A uint32_t vector is used for caching information about the size of\ncapturing groups, to improve performance. A default is created on the stack of\nthis size. */\n\n#define GROUPINFO_DEFAULT_SIZE 256\n\n/* The overrun tests check for a slightly smaller size so that they detect the\noverrun before it actually does run off the end of the data block. */\n\n#define WORK_SIZE_SAFETY_MARGIN (100)\n\n/* This value determines the size of the initial vector that is used for\nremembering named groups during the pre-compile. It is allocated on the stack,\nbut if it is too small, it is expanded, in a similar way to the workspace. The\nvalue is the number of slots in the list. */\n\n#define NAMED_GROUP_LIST_SIZE  20\n\n/* The pre-compiling pass over the pattern creates a parsed pattern in a vector\nof uint32_t. For short patterns this lives on the stack, with this size. Heap\nmemory is used for longer patterns. */\n\n#define PARSED_PATTERN_DEFAULT_SIZE 1024\n\n/* Maximum length value to check against when making sure that the variable\nthat holds the compiled pattern length does not overflow. We make it a bit less\nthan INT_MAX to allow for adding in group terminating code units, so that we\ndon't have to check them every time. */\n\n#define OFLOW_MAX (INT_MAX - 20)\n\n/* Table of extra lengths for each of the meta codes. Must be kept in step with\nthe definitions above. For some items these values are a basic length to which\na variable amount has to be added. */\n\nstatic unsigned char meta_extra_lengths[] = {\n  0,             /* META_END */\n  0,             /* META_ALT */\n  0,             /* META_ATOMIC */\n  0,             /* META_BACKREF - more if group is >= 10 */\n  1+SIZEOFFSET,  /* META_BACKREF_BYNAME */\n  1,             /* META_BIGVALUE */\n  3,             /* META_CALLOUT_NUMBER */\n  3+SIZEOFFSET,  /* META_CALLOUT_STRING */\n  0,             /* META_CAPTURE */\n  0,             /* META_CIRCUMFLEX */\n  0,             /* META_CLASS */\n  0,             /* META_CLASS_EMPTY */\n  0,             /* META_CLASS_EMPTY_NOT */\n  0,             /* META_CLASS_END */\n  0,             /* META_CLASS_NOT */\n  0,             /* META_COND_ASSERT */\n  SIZEOFFSET,    /* META_COND_DEFINE */\n  1+SIZEOFFSET,  /* META_COND_NAME */\n  1+SIZEOFFSET,  /* META_COND_NUMBER */\n  1+SIZEOFFSET,  /* META_COND_RNAME */\n  1+SIZEOFFSET,  /* META_COND_RNUMBER */\n  3,             /* META_COND_VERSION */\n  SIZEOFFSET,    /* META_OFFSET */\n  0,             /* META_SCS */\n  1,             /* META_CAPTURE_NAME */\n  1,             /* META_CAPTURE_NUMBER */\n  0,             /* META_DOLLAR */\n  0,             /* META_DOT */\n  0,             /* META_ESCAPE - one more for ESC_P and ESC_p */\n  0,             /* META_KET */\n  0,             /* META_NOCAPTURE */\n  2,             /* META_OPTIONS */\n  1,             /* META_POSIX */\n  1,             /* META_POSIX_NEG */\n  0,             /* META_RANGE_ESCAPED */\n  0,             /* META_RANGE_LITERAL */\n  SIZEOFFSET,    /* META_RECURSE */\n  1+SIZEOFFSET,  /* META_RECURSE_BYNAME */\n  0,             /* META_SCRIPT_RUN */\n  0,             /* META_LOOKAHEAD */\n  0,             /* META_LOOKAHEADNOT */\n  SIZEOFFSET,    /* META_LOOKBEHIND */\n  SIZEOFFSET,    /* META_LOOKBEHINDNOT */\n  0,             /* META_LOOKAHEAD_NA */\n  SIZEOFFSET,    /* META_LOOKBEHIND_NA */\n  1,             /* META_MARK - plus the string length */\n  0,             /* META_ACCEPT */\n  0,             /* META_FAIL */\n  0,             /* META_COMMIT */\n  1,             /* META_COMMIT_ARG - plus the string length */\n  0,             /* META_PRUNE */\n  1,             /* META_PRUNE_ARG - plus the string length */\n  0,             /* META_SKIP */\n  1,             /* META_SKIP_ARG - plus the string length */\n  0,             /* META_THEN */\n  1,             /* META_THEN_ARG - plus the string length */\n  0,             /* META_ASTERISK */\n  0,             /* META_ASTERISK_PLUS */\n  0,             /* META_ASTERISK_QUERY */\n  0,             /* META_PLUS */\n  0,             /* META_PLUS_PLUS */\n  0,             /* META_PLUS_QUERY */\n  0,             /* META_QUERY */\n  0,             /* META_QUERY_PLUS */\n  0,             /* META_QUERY_QUERY */\n  2,             /* META_MINMAX */\n  2,             /* META_MINMAX_PLUS */\n  2,             /* META_MINMAX_QUERY */\n  0,             /* META_ECLASS_AND */\n  0,             /* META_ECLASS_OR */\n  0,             /* META_ECLASS_SUB */\n  0,             /* META_ECLASS_XOR */\n  0              /* META_ECLASS_NOT */\n};\n\n/* Types for skipping parts of a parsed pattern. */\n\nenum { PSKIP_ALT, PSKIP_CLASS, PSKIP_KET };\n\n/* Values and flags for the unsigned xxcuflags variables that accompany xxcu\nvariables, which are concerned with first and required code units. A value\ngreater than or equal to REQ_NONE means \"no code unit set\"; otherwise the\nmatching xxcu variable is set, and the low valued bits are relevant. */\n\n#define REQ_UNSET     0xffffffffu  /* Not yet found anything */\n#define REQ_NONE      0xfffffffeu  /* Found not fixed character */\n#define REQ_CASELESS  0x00000001u  /* Code unit in xxcu is caseless */\n#define REQ_VARY      0x00000002u  /* Code unit is followed by non-literal */\n\n/* These flags are used in the groupinfo vector. */\n\n#define GI_SET_FIXED_LENGTH    0x80000000u\n#define GI_NOT_FIXED_LENGTH    0x40000000u\n#define GI_FIXED_LENGTH_MASK   0x0000ffffu\n\n/* This simple test for a decimal digit works for both ASCII/Unicode and EBCDIC\nand is fast (a good compiler can turn it into a subtraction and unsigned\ncomparison). */\n\n#define IS_DIGIT(x) ((x) >= CHAR_0 && (x) <= CHAR_9)\n\n/* Table to identify hex digits. The tables in chartables are dependent on the\nlocale, and may mark arbitrary characters as digits. We want to recognize only\n0-9, a-z, and A-Z as hex digits, which is why we have a private table here. It\ncosts 256 bytes, but it is a lot faster than doing character value tests (at\nleast in some simple cases I timed), and in some applications one wants PCRE2\nto compile efficiently as well as match efficiently. The value in the table is\nthe binary hex digit value, or 0xff for non-hex digits. */\n\n/* This is the \"normal\" case, for ASCII systems, and EBCDIC systems running in\nUTF-8 mode. */\n\n#ifndef EBCDIC\nstatic const uint8_t xdigitab[] =\n  {\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*   0-  7 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*   8- 15 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  16- 23 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  24- 31 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*    - '  */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  ( - /  */\n  0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, /*  0 - 7  */\n  0x08,0x09,0xff,0xff,0xff,0xff,0xff,0xff, /*  8 - ?  */\n  0xff,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0xff, /*  @ - G  */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  H - O  */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  P - W  */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  X - _  */\n  0xff,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0xff, /*  ` - g  */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  h - o  */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  p - w  */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  x -127 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 128-135 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 136-143 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 144-151 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 152-159 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 160-167 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 168-175 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 176-183 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 184-191 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 192-199 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 2ff-207 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 208-215 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 216-223 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 224-231 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 232-239 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 240-247 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};/* 248-255 */\n\n#else\n\n/* This is the \"abnormal\" case, for EBCDIC systems not running in UTF-8 mode. */\n\nstatic const uint8_t xdigitab[] =\n  {\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*   0-  7  0 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*   8- 15    */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  16- 23 10 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  24- 31    */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  32- 39 20 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  40- 47    */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  48- 55 30 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  56- 63    */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*    - 71 40 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  72- |     */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  & - 87 50 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  88- 95    */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  - -103 60 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 104- ?     */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 112-119 70 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 120- \"     */\n  0xff,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0xff, /* 128- g  80 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  h -143    */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 144- p  90 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  q -159    */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 160- x  A0 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  y -175    */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  ^ -183 B0 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 184-191    */\n  0xff,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0xff, /*  { - G  C0 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  H -207    */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  } - P  D0 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  Q -223    */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  \\ - X  E0 */\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*  Y -239    */\n  0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, /*  0 - 7  F0 */\n  0x08,0x09,0xff,0xff,0xff,0xff,0xff,0xff};/*  8 -255    */\n#endif  /* EBCDIC */\n\n\n/* Table for handling alphanumeric escaped characters. Positive returns are\nsimple data values; negative values are for special things like \\d and so on.\nZero means further processing is needed (for things like \\x), or the escape is\ninvalid. */\n\n/* This is the \"normal\" table for ASCII systems or for EBCDIC systems running\nin UTF-8 mode. It runs from '0' to 'z'. */\n\n#ifndef EBCDIC\n#define ESCAPES_FIRST       CHAR_0\n#define ESCAPES_LAST        CHAR_z\n#define UPPER_CASE(c)       (c-32)\n\nstatic const short int escapes[] = {\n    /* 0 */ 0,                       /* 1 */ 0,\n    /* 2 */ 0,                       /* 3 */ 0,\n    /* 4 */ 0,                       /* 5 */ 0,\n    /* 6 */ 0,                       /* 7 */ 0,\n    /* 8 */ 0,                       /* 9 */ 0,\n    /* : */ ESCAPES_FIRST+0x0a,      /* ; */ ESCAPES_FIRST+0x0b,\n    /* < */ ESCAPES_FIRST+0x0c,      /* = */ ESCAPES_FIRST+0x0d,\n    /* > */ ESCAPES_FIRST+0x0e,      /* ? */ ESCAPES_FIRST+0x0f,\n    /* @ */ ESCAPES_FIRST+0x10,      /* A */ -ESC_A,\n    /* B */ -ESC_B,                  /* C */ -ESC_C,\n    /* D */ -ESC_D,                  /* E */ -ESC_E,\n    /* F */ 0,                       /* G */ -ESC_G,\n    /* H */ -ESC_H,                  /* I */ 0,\n    /* J */ 0,                       /* K */ -ESC_K,\n    /* L */ 0,                       /* M */ 0,\n    /* N */ -ESC_N,                  /* O */ 0,\n    /* P */ -ESC_P,                  /* Q */ -ESC_Q,\n    /* R */ -ESC_R,                  /* S */ -ESC_S,\n    /* T */ 0,                       /* U */ 0,\n    /* V */ -ESC_V,                  /* W */ -ESC_W,\n    /* X */ -ESC_X,                  /* Y */ 0,\n    /* Z */ -ESC_Z,                  /* [ */ ESCAPES_FIRST+0x2b,\n    /* \\ */ ESCAPES_FIRST+0x2c,      /* ] */ ESCAPES_FIRST+0x2d,\n    /* ^ */ ESCAPES_FIRST+0x2e,      /* _ */ ESCAPES_FIRST+0x2f,\n    /* ` */ ESCAPES_FIRST+0x30,      /* a */ CHAR_BEL,\n    /* b */ -ESC_b,                  /* c */ 0,\n    /* d */ -ESC_d,                  /* e */ CHAR_ESC,\n    /* f */ CHAR_FF,                 /* g */ 0,\n    /* h */ -ESC_h,                  /* i */ 0,\n    /* j */ 0,                       /* k */ -ESC_k,\n    /* l */ 0,                       /* m */ 0,\n    /* n */ CHAR_LF,                 /* o */ 0,\n    /* p */ -ESC_p,                  /* q */ 0,\n    /* r */ CHAR_CR,                 /* s */ -ESC_s,\n    /* t */ CHAR_HT,                 /* u */ 0,\n    /* v */ -ESC_v,                  /* w */ -ESC_w,\n    /* x */ 0,                       /* y */ 0,\n    /* z */ -ESC_z\n};\n\n#else\n\n/* This is the \"abnormal\" table for EBCDIC systems without UTF-8 support.\nIt runs from 'a' to '9'. Our EBCDIC support can be provided via the compiler,\nwhich can interpret character literals like 'a' or '[' in an EBCDIC codepage;\nin this case, there is wide variance between codepages on the interpretation of\ncharacters between the letters ('[' and '{' and so on are placed in all sorts of\ndifferent positions in the table). Thankfully however, all EBCDIC codepages\nplace the letters and digits in the same location, so we hardcode that here.\nOur EBCDIC support can also be provided via numeric literals instead of\ncharacter literals, so either way, 'CHAR_a' will be 0x81 when PCRE2 is compiled\nin EBCDIC mode. */\n\n#define ESCAPES_FIRST       CHAR_a\n#define ESCAPES_LAST        CHAR_9\n#define UPPER_CASE(c)       (c+64)\n\nstatic const short int escapes[] = {\n    /* 0x81 a */ CHAR_BEL,             /* 0x82 b */ -ESC_b,\n    /* 0x83 c */ 0,                    /* 0x84 d */ -ESC_d,\n    /* 0x85 e */ CHAR_ESC,             /* 0x86 f */ CHAR_FF,\n    /* 0x87 g */ 0,                    /* 0x88 h */ -ESC_h,\n    /* 0x89 i */ 0,                    /* 0x8a   */ ESCAPES_FIRST+0x09,\n    /* 0x8b   */ ESCAPES_FIRST+0x0a,   /* 0x8c   */ ESCAPES_FIRST+0x0b,\n    /* 0x8d   */ ESCAPES_FIRST+0x0c,   /* 0x8e   */ ESCAPES_FIRST+0x0d,\n    /* 0x8f   */ ESCAPES_FIRST+0x0e,   /* 0x90   */ ESCAPES_FIRST+0x0f,\n    /* 0x91 j */ 0,                    /* 0x92 k */ -ESC_k,\n    /* 0x93 l */ 0,                    /* 0x94 m */ 0,\n    /* 0x95 n */ CHAR_LF,              /* 0x96 o */ 0,\n    /* 0x97 p */ -ESC_p,               /* 0x98 q */ 0,\n    /* 0x99 r */ CHAR_CR,              /* 0x9a   */ ESCAPES_FIRST+0x19,\n    /* 0x9b   */ ESCAPES_FIRST+0x1a,   /* 0x9c   */ ESCAPES_FIRST+0x1b,\n    /* 0x9d   */ ESCAPES_FIRST+0x1c,   /* 0x9e   */ ESCAPES_FIRST+0x1d,\n    /* 0x9f   */ ESCAPES_FIRST+0x1e,   /* 0xa0   */ ESCAPES_FIRST+0x1f,\n    /* 0xa1   */ ESCAPES_FIRST+0x20,   /* 0xa2 s */ -ESC_s,\n    /* 0xa3 t */ CHAR_HT,              /* 0xa4 u */ 0,\n    /* 0xa5 v */ -ESC_v,               /* 0xa6 w */ -ESC_w,\n    /* 0xa7 x */ 0,                    /* 0xa8 y */ 0,\n    /* 0xa9 z */ -ESC_z,               /* 0xaa   */ ESCAPES_FIRST+0x29,\n    /* 0xab   */ ESCAPES_FIRST+0x2a,   /* 0xac   */ ESCAPES_FIRST+0x2b,\n    /* 0xad   */ ESCAPES_FIRST+0x2c,   /* 0xae   */ ESCAPES_FIRST+0x2d,\n    /* 0xaf   */ ESCAPES_FIRST+0x2e,   /* 0xb0   */ ESCAPES_FIRST+0x2f,\n    /* 0xb1   */ ESCAPES_FIRST+0x30,   /* 0xb2   */ ESCAPES_FIRST+0x31,\n    /* 0xb3   */ ESCAPES_FIRST+0x32,   /* 0xb4   */ ESCAPES_FIRST+0x33,\n    /* 0xb5   */ ESCAPES_FIRST+0x34,   /* 0xb6   */ ESCAPES_FIRST+0x35,\n    /* 0xb7   */ ESCAPES_FIRST+0x36,   /* 0xb8   */ ESCAPES_FIRST+0x37,\n    /* 0xb9   */ ESCAPES_FIRST+0x38,   /* 0xba   */ ESCAPES_FIRST+0x39,\n    /* 0xbb   */ ESCAPES_FIRST+0x3a,   /* 0xbc   */ ESCAPES_FIRST+0x3b,\n    /* 0xbd   */ ESCAPES_FIRST+0x3c,   /* 0xbe   */ ESCAPES_FIRST+0x3d,\n    /* 0xbf   */ ESCAPES_FIRST+0x3e,   /* 0xc0   */ ESCAPES_FIRST+0x3f,\n    /* 0xc1 A */ -ESC_A,               /* 0xc2 B */ -ESC_B,\n    /* 0xc3 C */ -ESC_C,               /* 0xc4 D */ -ESC_D,\n    /* 0xc5 E */ -ESC_E,               /* 0xc6 F */ 0,\n    /* 0xc7 G */ -ESC_G,               /* 0xc8 H */ -ESC_H,\n    /* 0xc9 I */ 0,                    /* 0xca   */ ESCAPES_FIRST+0x49,\n    /* 0xcb   */ ESCAPES_FIRST+0x4a,   /* 0xcc   */ ESCAPES_FIRST+0x4b,\n    /* 0xcd   */ ESCAPES_FIRST+0x4c,   /* 0xce   */ ESCAPES_FIRST+0x4d,\n    /* 0xcf   */ ESCAPES_FIRST+0x4e,   /* 0xd0   */ ESCAPES_FIRST+0x4f,\n    /* 0xd1 J */ 0,                    /* 0xd2 K */ -ESC_K,\n    /* 0xd3 L */ 0,                    /* 0xd4 M */ 0,\n    /* 0xd5 N */ -ESC_N,               /* 0xd6 O */ 0,\n    /* 0xd7 P */ -ESC_P,               /* 0xd8 Q */ -ESC_Q,\n    /* 0xd9 R */ -ESC_R,               /* 0xda   */ ESCAPES_FIRST+0x59,\n    /* 0xdb   */ ESCAPES_FIRST+0x5a,   /* 0xdc   */ ESCAPES_FIRST+0x5b,\n    /* 0xdd   */ ESCAPES_FIRST+0x5c,   /* 0xde   */ ESCAPES_FIRST+0x5d,\n    /* 0xdf   */ ESCAPES_FIRST+0x5e,   /* 0xe0   */ ESCAPES_FIRST+0x5f,\n    /* 0xe1   */ ESCAPES_FIRST+0x60,   /* 0xe2 S */ -ESC_S,\n    /* 0xe3 T */ 0,                    /* 0xe4 U */ 0,\n    /* 0xe5 V */ -ESC_V,               /* 0xe6 W */ -ESC_W,\n    /* 0xe7 X */ -ESC_X,               /* 0xe8 Y */ 0,\n    /* 0xe9 Z */ -ESC_Z,               /* 0xea   */ ESCAPES_FIRST+0x69,\n    /* 0xeb   */ ESCAPES_FIRST+0x6a,   /* 0xec   */ ESCAPES_FIRST+0x6b,\n    /* 0xed   */ ESCAPES_FIRST+0x6c,   /* 0xee   */ ESCAPES_FIRST+0x6d,\n    /* 0xef   */ ESCAPES_FIRST+0x6e,   /* 0xf0 0 */ 0,\n    /* 0xf1 1 */ 0,                    /* 0xf2 2 */ 0,\n    /* 0xf3 3 */ 0,                    /* 0xf4 4 */ 0,\n    /* 0xf5 5 */ 0,                    /* 0xf6 6 */ 0,\n    /* 0xf7 7 */ 0,                    /* 0xf8 8 */ 0,\n    /* 0xf9 9 */ 0,\n};\n\n/* We also need a table of characters that may follow \\c in an EBCDIC\nenvironment for characters 0-31. */\n\nstatic unsigned char ebcdic_escape_c[] = {\n  CHAR_COMMERCIAL_AT, CHAR_A, CHAR_B, CHAR_C, CHAR_D, CHAR_E, CHAR_F, CHAR_G,\n  CHAR_H, CHAR_I, CHAR_J, CHAR_K, CHAR_L, CHAR_M, CHAR_N, CHAR_O, CHAR_P,\n  CHAR_Q, CHAR_R, CHAR_S, CHAR_T, CHAR_U, CHAR_V, CHAR_W, CHAR_X, CHAR_Y,\n  CHAR_Z, CHAR_LEFT_SQUARE_BRACKET, CHAR_BACKSLASH, CHAR_RIGHT_SQUARE_BRACKET,\n  CHAR_CIRCUMFLEX_ACCENT, CHAR_UNDERSCORE\n};\n\n#endif   /* EBCDIC */\n\n\n/* Table of special \"verbs\" like (*PRUNE). This is a short table, so it is\nsearched linearly. Put all the names into a single string, in order to reduce\nthe number of relocations when a shared library is dynamically linked. The\nstring is built from string macros so that it works in UTF-8 mode on EBCDIC\nplatforms. */\n\ntypedef struct verbitem {\n  unsigned int len;          /* Length of verb name */\n  uint32_t meta;             /* Base META_ code */\n  int has_arg;               /* Argument requirement */\n} verbitem;\n\nstatic const char verbnames[] =\n  \"\\0\"                       /* Empty name is a shorthand for MARK */\n  STRING_MARK0\n  STRING_ACCEPT0\n  STRING_F0\n  STRING_FAIL0\n  STRING_COMMIT0\n  STRING_PRUNE0\n  STRING_SKIP0\n  STRING_THEN;\n\nstatic const verbitem verbs[] = {\n  { 0, META_MARK,   +1 },  /* > 0 => must have an argument */\n  { 4, META_MARK,   +1 },\n  { 6, META_ACCEPT, -1 },  /* < 0 => Optional argument, convert to pre-MARK */\n  { 1, META_FAIL,   -1 },\n  { 4, META_FAIL,   -1 },\n  { 6, META_COMMIT,  0 },\n  { 5, META_PRUNE,   0 },  /* Optional argument; bump META code if found */\n  { 4, META_SKIP,    0 },\n  { 4, META_THEN,    0 }\n};\n\nstatic const int verbcount = sizeof(verbs)/sizeof(verbitem);\n\n/* Verb opcodes, indexed by their META code offset from META_MARK. */\n\nstatic const uint32_t verbops[] = {\n  OP_MARK, OP_ACCEPT, OP_FAIL, OP_COMMIT, OP_COMMIT_ARG, OP_PRUNE,\n  OP_PRUNE_ARG, OP_SKIP, OP_SKIP_ARG, OP_THEN, OP_THEN_ARG };\n\n/* Table of \"alpha assertions\" like (*pla:...), similar to the (*VERB) table. */\n\ntypedef struct alasitem {\n  unsigned int len;          /* Length of name */\n  uint32_t meta;             /* Base META_ code */\n} alasitem;\n\nstatic const char alasnames[] =\n  STRING_pla0\n  STRING_plb0\n  STRING_napla0\n  STRING_naplb0\n  STRING_nla0\n  STRING_nlb0\n  STRING_positive_lookahead0\n  STRING_positive_lookbehind0\n  STRING_non_atomic_positive_lookahead0\n  STRING_non_atomic_positive_lookbehind0\n  STRING_negative_lookahead0\n  STRING_negative_lookbehind0\n  STRING_scs0\n  STRING_scan_substring0\n  STRING_atomic0\n  STRING_sr0\n  STRING_asr0\n  STRING_script_run0\n  STRING_atomic_script_run;\n\nstatic const alasitem alasmeta[] = {\n  {  3, META_LOOKAHEAD         },\n  {  3, META_LOOKBEHIND        },\n  {  5, META_LOOKAHEAD_NA      },\n  {  5, META_LOOKBEHIND_NA     },\n  {  3, META_LOOKAHEADNOT      },\n  {  3, META_LOOKBEHINDNOT     },\n  { 18, META_LOOKAHEAD         },\n  { 19, META_LOOKBEHIND        },\n  { 29, META_LOOKAHEAD_NA      },\n  { 30, META_LOOKBEHIND_NA     },\n  { 18, META_LOOKAHEADNOT      },\n  { 19, META_LOOKBEHINDNOT     },\n  {  3, META_SCS               },\n  { 14, META_SCS               },\n  {  6, META_ATOMIC            },\n  {  2, META_SCRIPT_RUN        }, /* sr = script run */\n  {  3, META_ATOMIC_SCRIPT_RUN }, /* asr = atomic script run */\n  { 10, META_SCRIPT_RUN        }, /* script run */\n  { 17, META_ATOMIC_SCRIPT_RUN }  /* atomic script run */\n};\n\nstatic const int alascount = sizeof(alasmeta)/sizeof(alasitem);\n\n/* Offsets from OP_STAR for case-independent and negative repeat opcodes. */\n\nstatic uint32_t chartypeoffset[] = {\n  OP_STAR - OP_STAR,    OP_STARI - OP_STAR,\n  OP_NOTSTAR - OP_STAR, OP_NOTSTARI - OP_STAR };\n\n/* Tables of names of POSIX character classes and their lengths. The names are\nnow all in a single string, to reduce the number of relocations when a shared\nlibrary is dynamically loaded. The list of lengths is terminated by a zero\nlength entry. The first three must be alpha, lower, upper, as this is assumed\nfor handling case independence.\n\nThe indices for several classes are stored in pcre2_compile.h - these must\nbe kept in sync with posix_names, posix_name_lengths, posix_class_maps,\nand posix_substitutes. */\n\nstatic const char posix_names[] =\n  STRING_alpha0 STRING_lower0 STRING_upper0 STRING_alnum0\n  STRING_ascii0 STRING_blank0 STRING_cntrl0 STRING_digit0\n  STRING_graph0 STRING_print0 STRING_punct0 STRING_space0\n  STRING_word0  STRING_xdigit;\n\nstatic const uint8_t posix_name_lengths[] = {\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };\n\n/* Table of class bit maps for each POSIX class. Each class is formed from a\nbase map, with an optional addition or removal of another map. Then, for some\nclasses, there is some additional tweaking: for [:blank:] the vertical space\ncharacters are removed, and for [:alpha:] and [:alnum:] the underscore\ncharacter is removed. The triples in the table consist of the base map offset,\nsecond map offset or -1 if no second map, and a non-negative value for map\naddition or a negative value for map subtraction (if there are two maps). The\nabsolute value of the third field has these meanings: 0 => no tweaking, 1 =>\nremove vertical space characters, 2 => remove underscore. */\n\nconst int PRIV(posix_class_maps)[] = {\n  cbit_word,   cbit_digit, -2,            /* alpha */\n  cbit_lower,  -1,          0,            /* lower */\n  cbit_upper,  -1,          0,            /* upper */\n  cbit_word,   -1,          2,            /* alnum - word without underscore */\n  cbit_print,  cbit_cntrl,  0,            /* ascii */\n  cbit_space,  -1,          1,            /* blank - a GNU extension */\n  cbit_cntrl,  -1,          0,            /* cntrl */\n  cbit_digit,  -1,          0,            /* digit */\n  cbit_graph,  -1,          0,            /* graph */\n  cbit_print,  -1,          0,            /* print */\n  cbit_punct,  -1,          0,            /* punct */\n  cbit_space,  -1,          0,            /* space */\n  cbit_word,   -1,          0,            /* word - a Perl extension */\n  cbit_xdigit, -1,          0             /* xdigit */\n};\n\n#ifdef SUPPORT_UNICODE\n\n/* The POSIX class Unicode property substitutes that are used in UCP mode must\nbe in the order of the POSIX class names, defined above. */\n\nstatic int posix_substitutes[] = {\n  PT_GC, ucp_L,     /* alpha */\n  PT_PC, ucp_Ll,    /* lower */\n  PT_PC, ucp_Lu,    /* upper */\n  PT_ALNUM, 0,      /* alnum */\n  -1, 0,            /* ascii, treat as non-UCP */\n  -1, 1,            /* blank, treat as \\h */\n  PT_PC, ucp_Cc,    /* cntrl */\n  PT_PC, ucp_Nd,    /* digit */\n  PT_PXGRAPH, 0,    /* graph */\n  PT_PXPRINT, 0,    /* print */\n  PT_PXPUNCT, 0,    /* punct */\n  PT_PXSPACE, 0,    /* space */   /* Xps is POSIX space, but from 8.34 */\n  PT_WORD, 0,       /* word  */   /* Perl and POSIX space are the same */\n  PT_PXXDIGIT, 0    /* xdigit */  /* Perl has additional hex digits */\n};\n#endif  /* SUPPORT_UNICODE */\n\n/* Masks for checking option settings. When PCRE2_LITERAL is set, only a subset\nare allowed. */\n\n#define PUBLIC_LITERAL_COMPILE_OPTIONS \\\n  (PCRE2_ANCHORED|PCRE2_AUTO_CALLOUT|PCRE2_CASELESS|PCRE2_ENDANCHORED| \\\n   PCRE2_FIRSTLINE|PCRE2_LITERAL|PCRE2_MATCH_INVALID_UTF| \\\n   PCRE2_NO_START_OPTIMIZE|PCRE2_NO_UTF_CHECK|PCRE2_USE_OFFSET_LIMIT|PCRE2_UTF)\n\n#define PUBLIC_COMPILE_OPTIONS \\\n  (PUBLIC_LITERAL_COMPILE_OPTIONS| \\\n   PCRE2_ALLOW_EMPTY_CLASS|PCRE2_ALT_BSUX|PCRE2_ALT_CIRCUMFLEX| \\\n   PCRE2_ALT_VERBNAMES|PCRE2_DOLLAR_ENDONLY|PCRE2_DOTALL|PCRE2_DUPNAMES| \\\n   PCRE2_EXTENDED|PCRE2_EXTENDED_MORE|PCRE2_MATCH_UNSET_BACKREF| \\\n   PCRE2_MULTILINE|PCRE2_NEVER_BACKSLASH_C|PCRE2_NEVER_UCP| \\\n   PCRE2_NEVER_UTF|PCRE2_NO_AUTO_CAPTURE|PCRE2_NO_AUTO_POSSESS| \\\n   PCRE2_NO_DOTSTAR_ANCHOR|PCRE2_UCP|PCRE2_UNGREEDY|PCRE2_ALT_EXTENDED_CLASS)\n\n#define PUBLIC_LITERAL_COMPILE_EXTRA_OPTIONS \\\n   (PCRE2_EXTRA_MATCH_LINE|PCRE2_EXTRA_MATCH_WORD| \\\n    PCRE2_EXTRA_CASELESS_RESTRICT|PCRE2_EXTRA_TURKISH_CASING)\n\n#define PUBLIC_COMPILE_EXTRA_OPTIONS \\\n   (PUBLIC_LITERAL_COMPILE_EXTRA_OPTIONS| \\\n    PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES|PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL| \\\n    PCRE2_EXTRA_ESCAPED_CR_IS_LF|PCRE2_EXTRA_ALT_BSUX| \\\n    PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK|PCRE2_EXTRA_ASCII_BSD| \\\n    PCRE2_EXTRA_ASCII_BSS|PCRE2_EXTRA_ASCII_BSW|PCRE2_EXTRA_ASCII_POSIX| \\\n    PCRE2_EXTRA_ASCII_DIGIT|PCRE2_EXTRA_PYTHON_OCTAL|PCRE2_EXTRA_NO_BS0| \\\n    PCRE2_EXTRA_NEVER_CALLOUT)\n\n/* This is a table of start-of-pattern options such as (*UTF) and settings such\nas (*LIMIT_MATCH=nnnn) and (*CRLF). For completeness and backward\ncompatibility, (*UTFn) is supported in the relevant libraries, but (*UTF) is\ngeneric and always supported. */\n\nenum { PSO_OPT,     /* Value is an option bit */\n       PSO_XOPT,    /* Value is an xoption bit */\n       PSO_FLG,     /* Value is a flag bit */\n       PSO_NL,      /* Value is a newline type */\n       PSO_BSR,     /* Value is a \\R type */\n       PSO_LIMH,    /* Read integer value for heap limit */\n       PSO_LIMM,    /* Read integer value for match limit */\n       PSO_LIMD,    /* Read integer value for depth limit */\n       PSO_OPTMZ    /* Value is an optimization bit */\n     };\n\ntypedef struct pso {\n  const char *name;\n  uint16_t length;\n  uint16_t type;\n  uint32_t value;\n} pso;\n\n/* NB: STRING_UTFn_RIGHTPAR contains the length as well */\n\nstatic const pso pso_list[] = {\n  { STRING_UTFn_RIGHTPAR,                  PSO_OPT, PCRE2_UTF },\n  { STRING_UTF_RIGHTPAR,                4, PSO_OPT, PCRE2_UTF },\n  { STRING_UCP_RIGHTPAR,                4, PSO_OPT, PCRE2_UCP },\n  { STRING_NOTEMPTY_RIGHTPAR,           9, PSO_FLG, PCRE2_NOTEMPTY_SET },\n  { STRING_NOTEMPTY_ATSTART_RIGHTPAR,  17, PSO_FLG, PCRE2_NE_ATST_SET },\n  { STRING_NO_AUTO_POSSESS_RIGHTPAR,   16, PSO_OPTMZ, PCRE2_OPTIM_AUTO_POSSESS },\n  { STRING_NO_DOTSTAR_ANCHOR_RIGHTPAR, 18, PSO_OPTMZ, PCRE2_OPTIM_DOTSTAR_ANCHOR },\n  { STRING_NO_JIT_RIGHTPAR,             7, PSO_FLG, PCRE2_NOJIT },\n  { STRING_NO_START_OPT_RIGHTPAR,      13, PSO_OPTMZ, PCRE2_OPTIM_START_OPTIMIZE },\n  { STRING_CASELESS_RESTRICT_RIGHTPAR, 18, PSO_XOPT, PCRE2_EXTRA_CASELESS_RESTRICT },\n  { STRING_TURKISH_CASING_RIGHTPAR,    15, PSO_XOPT, PCRE2_EXTRA_TURKISH_CASING },\n  { STRING_LIMIT_HEAP_EQ,              11, PSO_LIMH, 0 },\n  { STRING_LIMIT_MATCH_EQ,             12, PSO_LIMM, 0 },\n  { STRING_LIMIT_DEPTH_EQ,             12, PSO_LIMD, 0 },\n  { STRING_LIMIT_RECURSION_EQ,         16, PSO_LIMD, 0 },\n  { STRING_CR_RIGHTPAR,                 3, PSO_NL,  PCRE2_NEWLINE_CR },\n  { STRING_LF_RIGHTPAR,                 3, PSO_NL,  PCRE2_NEWLINE_LF },\n  { STRING_CRLF_RIGHTPAR,               5, PSO_NL,  PCRE2_NEWLINE_CRLF },\n  { STRING_ANY_RIGHTPAR,                4, PSO_NL,  PCRE2_NEWLINE_ANY },\n  { STRING_NUL_RIGHTPAR,                4, PSO_NL,  PCRE2_NEWLINE_NUL },\n  { STRING_ANYCRLF_RIGHTPAR,            8, PSO_NL,  PCRE2_NEWLINE_ANYCRLF },\n  { STRING_BSR_ANYCRLF_RIGHTPAR,       12, PSO_BSR, PCRE2_BSR_ANYCRLF },\n  { STRING_BSR_UNICODE_RIGHTPAR,       12, PSO_BSR, PCRE2_BSR_UNICODE }\n};\n\n/* This table is used when converting repeating opcodes into possessified\nversions as a result of an explicit possessive quantifier such as ++. A zero\nvalue means there is no possessified version - in those cases the item in\nquestion must be wrapped in ONCE brackets. The table is truncated at OP_CALLOUT\nbecause all relevant opcodes are less than that. */\n\nstatic const uint8_t opcode_possessify[] = {\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   /* 0 - 15  */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   /* 16 - 31 */\n\n  0,                       /* NOTI */\n  OP_POSSTAR, 0,           /* STAR, MINSTAR */\n  OP_POSPLUS, 0,           /* PLUS, MINPLUS */\n  OP_POSQUERY, 0,          /* QUERY, MINQUERY */\n  OP_POSUPTO, 0,           /* UPTO, MINUPTO */\n  0,                       /* EXACT */\n  0, 0, 0, 0,              /* POS{STAR,PLUS,QUERY,UPTO} */\n\n  OP_POSSTARI, 0,          /* STARI, MINSTARI */\n  OP_POSPLUSI, 0,          /* PLUSI, MINPLUSI */\n  OP_POSQUERYI, 0,         /* QUERYI, MINQUERYI */\n  OP_POSUPTOI, 0,          /* UPTOI, MINUPTOI */\n  0,                       /* EXACTI */\n  0, 0, 0, 0,              /* POS{STARI,PLUSI,QUERYI,UPTOI} */\n\n  OP_NOTPOSSTAR, 0,        /* NOTSTAR, NOTMINSTAR */\n  OP_NOTPOSPLUS, 0,        /* NOTPLUS, NOTMINPLUS */\n  OP_NOTPOSQUERY, 0,       /* NOTQUERY, NOTMINQUERY */\n  OP_NOTPOSUPTO, 0,        /* NOTUPTO, NOTMINUPTO */\n  0,                       /* NOTEXACT */\n  0, 0, 0, 0,              /* NOTPOS{STAR,PLUS,QUERY,UPTO} */\n\n  OP_NOTPOSSTARI, 0,       /* NOTSTARI, NOTMINSTARI */\n  OP_NOTPOSPLUSI, 0,       /* NOTPLUSI, NOTMINPLUSI */\n  OP_NOTPOSQUERYI, 0,      /* NOTQUERYI, NOTMINQUERYI */\n  OP_NOTPOSUPTOI, 0,       /* NOTUPTOI, NOTMINUPTOI */\n  0,                       /* NOTEXACTI */\n  0, 0, 0, 0,              /* NOTPOS{STARI,PLUSI,QUERYI,UPTOI} */\n\n  OP_TYPEPOSSTAR, 0,       /* TYPESTAR, TYPEMINSTAR */\n  OP_TYPEPOSPLUS, 0,       /* TYPEPLUS, TYPEMINPLUS */\n  OP_TYPEPOSQUERY, 0,      /* TYPEQUERY, TYPEMINQUERY */\n  OP_TYPEPOSUPTO, 0,       /* TYPEUPTO, TYPEMINUPTO */\n  0,                       /* TYPEEXACT */\n  0, 0, 0, 0,              /* TYPEPOS{STAR,PLUS,QUERY,UPTO} */\n\n  OP_CRPOSSTAR, 0,         /* CRSTAR, CRMINSTAR */\n  OP_CRPOSPLUS, 0,         /* CRPLUS, CRMINPLUS */\n  OP_CRPOSQUERY, 0,        /* CRQUERY, CRMINQUERY */\n  OP_CRPOSRANGE, 0,        /* CRRANGE, CRMINRANGE */\n  0, 0, 0, 0,              /* CRPOS{STAR,PLUS,QUERY,RANGE} */\n\n  0, 0, 0, 0,              /* CLASS, NCLASS, XCLASS, ECLASS */\n  0, 0,                    /* REF, REFI */\n  0, 0,                    /* DNREF, DNREFI */\n  0, 0,                    /* RECURSE, CALLOUT */\n};\n\n/* Compile-time check that the table has the correct size. */\nSTATIC_ASSERT(sizeof(opcode_possessify) == OP_CALLOUT+1, opcode_possessify);\n\n\n#ifdef DEBUG_SHOW_PARSED\n/*************************************************\n*     Show the parsed pattern for debugging      *\n*************************************************/\n\n/* For debugging the pre-scan, this code, which outputs the parsed data vector,\ncan be enabled. */\n\nstatic void show_parsed(compile_block *cb)\n{\nuint32_t *pptr = cb->parsed_pattern;\n\nfor (;;)\n  {\n  int max, min;\n  PCRE2_SIZE offset;\n  uint32_t i;\n  uint32_t length;\n  uint32_t meta_arg = META_DATA(*pptr);\n\n  fprintf(stderr, \"+++ %02d %.8x \", (int)(pptr - cb->parsed_pattern), *pptr);\n\n  if (*pptr < META_END)\n    {\n    if (*pptr > 32 && *pptr < 128) fprintf(stderr, \"%c\", *pptr);\n    pptr++;\n    }\n\n  else switch (META_CODE(*pptr++))\n    {\n    default:\n    fprintf(stderr, \"**** OOPS - unknown META value - giving up ****\\n\");\n    return;\n\n    case META_END:\n    fprintf(stderr, \"META_END\\n\");\n    return;\n\n    case META_CAPTURE:\n    fprintf(stderr, \"META_CAPTURE %d\", meta_arg);\n    break;\n\n    case META_RECURSE:\n    GETOFFSET(offset, pptr);\n    fprintf(stderr, \"META_RECURSE %d %zd\", meta_arg, offset);\n    break;\n\n    case META_BACKREF:\n    if (meta_arg < 10)\n      offset = cb->small_ref_offset[meta_arg];\n    else\n      GETOFFSET(offset, pptr);\n    fprintf(stderr, \"META_BACKREF %d %zd\", meta_arg, offset);\n    break;\n\n    case META_ESCAPE:\n    if (meta_arg == ESC_P || meta_arg == ESC_p)\n      {\n      uint32_t ptype = *pptr >> 16;\n      uint32_t pvalue = *pptr++ & 0xffff;\n      fprintf(stderr, \"META \\\\%c %d %d\", (meta_arg == ESC_P)? CHAR_P:CHAR_p,\n        ptype, pvalue);\n      }\n    else\n      {\n      uint32_t cc;\n      /* There's just one escape we might have here that isn't negated in the\n      escapes table. */\n      if (meta_arg == ESC_g) cc = CHAR_g;\n      else for (cc = ESCAPES_FIRST; cc <= ESCAPES_LAST; cc++)\n        {\n        if (meta_arg == (uint32_t)(-escapes[cc - ESCAPES_FIRST])) break;\n        }\n      if (cc > ESCAPES_LAST) cc = CHAR_QUESTION_MARK;\n      fprintf(stderr, \"META \\\\%c\", cc);\n      }\n    break;\n\n    case META_MINMAX:\n    min = *pptr++;\n    max = *pptr++;\n    if (max != REPEAT_UNLIMITED)\n      fprintf(stderr, \"META {%d,%d}\", min, max);\n    else\n      fprintf(stderr, \"META {%d,}\", min);\n    break;\n\n    case META_MINMAX_QUERY:\n    min = *pptr++;\n    max = *pptr++;\n    if (max != REPEAT_UNLIMITED)\n      fprintf(stderr, \"META {%d,%d}?\", min, max);\n    else\n      fprintf(stderr, \"META {%d,}?\", min);\n    break;\n\n    case META_MINMAX_PLUS:\n    min = *pptr++;\n    max = *pptr++;\n    if (max != REPEAT_UNLIMITED)\n      fprintf(stderr, \"META {%d,%d}+\", min, max);\n    else\n      fprintf(stderr, \"META {%d,}+\", min);\n    break;\n\n    case META_BIGVALUE: fprintf(stderr, \"META_BIGVALUE %.8x\", *pptr++); break;\n    case META_CIRCUMFLEX: fprintf(stderr, \"META_CIRCUMFLEX\"); break;\n    case META_COND_ASSERT: fprintf(stderr, \"META_COND_ASSERT\"); break;\n    case META_DOLLAR: fprintf(stderr, \"META_DOLLAR\"); break;\n    case META_DOT: fprintf(stderr, \"META_DOT\"); break;\n    case META_ASTERISK: fprintf(stderr, \"META *\"); break;\n    case META_ASTERISK_QUERY: fprintf(stderr, \"META *?\"); break;\n    case META_ASTERISK_PLUS: fprintf(stderr, \"META *+\"); break;\n    case META_PLUS: fprintf(stderr, \"META +\"); break;\n    case META_PLUS_QUERY: fprintf(stderr, \"META +?\"); break;\n    case META_PLUS_PLUS: fprintf(stderr, \"META ++\"); break;\n    case META_QUERY: fprintf(stderr, \"META ?\"); break;\n    case META_QUERY_QUERY: fprintf(stderr, \"META ??\"); break;\n    case META_QUERY_PLUS: fprintf(stderr, \"META ?+\"); break;\n\n    case META_ATOMIC: fprintf(stderr, \"META (?>\"); break;\n    case META_NOCAPTURE: fprintf(stderr, \"META (?:\"); break;\n    case META_LOOKAHEAD: fprintf(stderr, \"META (?=\"); break;\n    case META_LOOKAHEADNOT: fprintf(stderr, \"META (?!\"); break;\n    case META_LOOKAHEAD_NA: fprintf(stderr, \"META (*napla:\"); break;\n    case META_SCRIPT_RUN: fprintf(stderr, \"META (*sr:\"); break;\n    case META_KET: fprintf(stderr, \"META )\"); break;\n    case META_ALT: fprintf(stderr, \"META | %d\", meta_arg); break;\n\n    case META_CLASS: fprintf(stderr, \"META [\"); break;\n    case META_CLASS_NOT: fprintf(stderr, \"META [^\"); break;\n    case META_CLASS_END: fprintf(stderr, \"META ]\"); break;\n    case META_CLASS_EMPTY: fprintf(stderr, \"META []\"); break;\n    case META_CLASS_EMPTY_NOT: fprintf(stderr, \"META [^]\"); break;\n\n    case META_RANGE_LITERAL: fprintf(stderr, \"META - (literal)\"); break;\n    case META_RANGE_ESCAPED: fprintf(stderr, \"META - (escaped)\"); break;\n\n    case META_POSIX: fprintf(stderr, \"META_POSIX %d\", *pptr++); break;\n    case META_POSIX_NEG: fprintf(stderr, \"META_POSIX_NEG %d\", *pptr++); break;\n\n    case META_ACCEPT: fprintf(stderr, \"META (*ACCEPT)\"); break;\n    case META_FAIL: fprintf(stderr, \"META (*FAIL)\"); break;\n    case META_COMMIT: fprintf(stderr, \"META (*COMMIT)\"); break;\n    case META_PRUNE: fprintf(stderr, \"META (*PRUNE)\"); break;\n    case META_SKIP: fprintf(stderr, \"META (*SKIP)\"); break;\n    case META_THEN: fprintf(stderr, \"META (*THEN)\"); break;\n\n    case META_OPTIONS:\n    fprintf(stderr, \"META_OPTIONS 0x%08x 0x%08x\", pptr[0], pptr[1]);\n    pptr += 2;\n    break;\n\n    case META_LOOKBEHIND:\n    fprintf(stderr, \"META (?<= %d %d\", meta_arg, *pptr);\n    pptr += 2;\n    break;\n\n    case META_LOOKBEHIND_NA:\n    fprintf(stderr, \"META (*naplb: %d %d\", meta_arg, *pptr);\n    pptr += 2;\n    break;\n\n    case META_LOOKBEHINDNOT:\n    fprintf(stderr, \"META (?<! %d %d\", meta_arg, *pptr);\n    pptr += 2;\n    break;\n\n    case META_CALLOUT_NUMBER:\n    fprintf(stderr, \"META (?C%d) next=%d/%d\", pptr[2], pptr[0],\n       pptr[1]);\n    pptr += 3;\n    break;\n\n    case META_CALLOUT_STRING:\n      {\n      uint32_t patoffset = *pptr++;    /* Offset of next pattern item */\n      uint32_t patlength = *pptr++;    /* Length of next pattern item */\n      fprintf(stderr, \"META (?Cstring) length=%d offset=\", *pptr++);\n      GETOFFSET(offset, pptr);\n      fprintf(stderr, \"%zd next=%d/%d\", offset, patoffset, patlength);\n      }\n    break;\n\n    case META_RECURSE_BYNAME:\n    fprintf(stderr, \"META (?(&name) length=%d offset=\", *pptr++);\n    GETOFFSET(offset, pptr);\n    fprintf(stderr, \"%zd\", offset);\n    break;\n\n    case META_BACKREF_BYNAME:\n    fprintf(stderr, \"META_BACKREF_BYNAME length=%d offset=\", *pptr++);\n    GETOFFSET(offset, pptr);\n    fprintf(stderr, \"%zd\", offset);\n    break;\n\n    case META_COND_NUMBER:\n    fprintf(stderr, \"META_COND_NUMBER %d offset=\", pptr[SIZEOFFSET]);\n    GETOFFSET(offset, pptr);\n    fprintf(stderr, \"%zd\", offset);\n    pptr++;\n    break;\n\n    case META_COND_DEFINE:\n    fprintf(stderr, \"META (?(DEFINE) offset=\");\n    GETOFFSET(offset, pptr);\n    fprintf(stderr, \"%zd\", offset);\n    break;\n\n    case META_COND_VERSION:\n    fprintf(stderr, \"META (?(VERSION%s\", (*pptr++ == 0)? \"=\" : \">=\");\n    fprintf(stderr, \"%d.\", *pptr++);\n    fprintf(stderr, \"%d)\", *pptr++);\n    break;\n\n    case META_COND_NAME:\n    fprintf(stderr, \"META (?(<name>) length=%d offset=\", *pptr++);\n    GETOFFSET(offset, pptr);\n    fprintf(stderr, \"%zd\", offset);\n    break;\n\n    case META_COND_RNAME:\n    fprintf(stderr, \"META (?(R&name) length=%d offset=\", *pptr++);\n    GETOFFSET(offset, pptr);\n    fprintf(stderr, \"%zd\", offset);\n    break;\n\n    /* This is kept as a name, because it might be. */\n\n    case META_COND_RNUMBER:\n    fprintf(stderr, \"META (?(Rnumber) length=%d offset=\", *pptr++);\n    GETOFFSET(offset, pptr);\n    fprintf(stderr, \"%zd\", offset);\n    break;\n\n    case META_OFFSET:\n    fprintf(stderr, \"META_OFFSET offset=\");\n    GETOFFSET(offset, pptr);\n    fprintf(stderr, \"%zd\", offset);\n    break;\n\n    case META_SCS:\n    fprintf(stderr, \"META (*scan_substring:\");\n    break;\n\n    case META_CAPTURE_NAME:\n    fprintf(stderr, \"META_CAPTURE_NAME length=%d relative_offset=%d\", *pptr++, (int)meta_arg);\n    break;\n\n    case META_CAPTURE_NUMBER:\n    fprintf(stderr, \"META_CAPTURE_NUMBER %d relative_offset=%d\", *pptr++, (int)meta_arg);\n    break;\n\n    case META_MARK:\n    fprintf(stderr, \"META (*MARK:\");\n    goto SHOWARG;\n\n    case META_COMMIT_ARG:\n    fprintf(stderr, \"META (*COMMIT:\");\n    goto SHOWARG;\n\n    case META_PRUNE_ARG:\n    fprintf(stderr, \"META (*PRUNE:\");\n    goto SHOWARG;\n\n    case META_SKIP_ARG:\n    fprintf(stderr, \"META (*SKIP:\");\n    goto SHOWARG;\n\n    case META_THEN_ARG:\n    fprintf(stderr, \"META (*THEN:\");\n    SHOWARG:\n    length = *pptr++;\n    for (i = 0; i < length; i++)\n      {\n      uint32_t cc = *pptr++;\n      if (cc > 32 && cc < 128) fprintf(stderr, \"%c\", cc);\n        else fprintf(stderr, \"\\\\x{%x}\", cc);\n      }\n    fprintf(stderr, \") length=%u\", length);\n    break;\n\n    case META_ECLASS_AND: fprintf(stderr, \"META_ECLASS_AND\"); break;\n    case META_ECLASS_OR: fprintf(stderr, \"META_ECLASS_OR\"); break;\n    case META_ECLASS_SUB: fprintf(stderr, \"META_ECLASS_SUB\"); break;\n    case META_ECLASS_XOR: fprintf(stderr, \"META_ECLASS_XOR\"); break;\n    case META_ECLASS_NOT: fprintf(stderr, \"META_ECLASS_NOT\"); break;\n    }\n  fprintf(stderr, \"\\n\");\n  }\nreturn;\n}\n#endif  /* DEBUG_SHOW_PARSED */\n\n\n\n/*************************************************\n*               Copy compiled code               *\n*************************************************/\n\n/* Compiled JIT code cannot be copied, so the new compiled block has no\nassociated JIT data. */\n\nPCRE2_EXP_DEFN pcre2_code * PCRE2_CALL_CONVENTION\npcre2_code_copy(const pcre2_code *code)\n{\nPCRE2_SIZE *ref_count;\npcre2_code *newcode;\n\nif (code == NULL) return NULL;\nnewcode = code->memctl.malloc(code->blocksize, code->memctl.memory_data);\nif (newcode == NULL) return NULL;\nmemcpy(newcode, code, code->blocksize);\nnewcode->executable_jit = NULL;\n\n/* If the code is one that has been deserialized, increment the reference count\nin the decoded tables. */\n\nif ((code->flags & PCRE2_DEREF_TABLES) != 0)\n  {\n  ref_count = (PCRE2_SIZE *)(code->tables + TABLES_LENGTH);\n  (*ref_count)++;\n  }\n\nreturn newcode;\n}\n\n\n\n/*************************************************\n*     Copy compiled code and character tables    *\n*************************************************/\n\n/* Compiled JIT code cannot be copied, so the new compiled block has no\nassociated JIT data. This version of code_copy also makes a separate copy of\nthe character tables. */\n\nPCRE2_EXP_DEFN pcre2_code * PCRE2_CALL_CONVENTION\npcre2_code_copy_with_tables(const pcre2_code *code)\n{\nPCRE2_SIZE* ref_count;\npcre2_code *newcode;\nuint8_t *newtables;\n\nif (code == NULL) return NULL;\nnewcode = code->memctl.malloc(code->blocksize, code->memctl.memory_data);\nif (newcode == NULL) return NULL;\nmemcpy(newcode, code, code->blocksize);\nnewcode->executable_jit = NULL;\n\nnewtables = code->memctl.malloc(TABLES_LENGTH + sizeof(PCRE2_SIZE),\n  code->memctl.memory_data);\nif (newtables == NULL)\n  {\n  code->memctl.free((void *)newcode, code->memctl.memory_data);\n  return NULL;\n  }\nmemcpy(newtables, code->tables, TABLES_LENGTH);\nref_count = (PCRE2_SIZE *)(newtables + TABLES_LENGTH);\n*ref_count = 1;\n\nnewcode->tables = newtables;\nnewcode->flags |= PCRE2_DEREF_TABLES;\nreturn newcode;\n}\n\n\n\n/*************************************************\n*               Free compiled code               *\n*************************************************/\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_code_free(pcre2_code *code)\n{\nPCRE2_SIZE* ref_count;\n\nif (code != NULL)\n  {\n#ifdef SUPPORT_JIT\n  if (code->executable_jit != NULL)\n    PRIV(jit_free)(code->executable_jit, &code->memctl);\n#endif\n\n  if ((code->flags & PCRE2_DEREF_TABLES) != 0)\n    {\n    /* Decoded tables belong to the codes after deserialization, and they must\n    be freed when there are no more references to them. The *ref_count should\n    always be > 0. */\n\n    ref_count = (PCRE2_SIZE *)(code->tables + TABLES_LENGTH);\n    if (*ref_count > 0)\n      {\n      (*ref_count)--;\n      if (*ref_count == 0)\n        code->memctl.free((void *)code->tables, code->memctl.memory_data);\n      }\n    }\n\n  code->memctl.free(code, code->memctl.memory_data);\n  }\n}\n\n\n\n/*************************************************\n*         Read a number, possibly signed         *\n*************************************************/\n\n/* This function is used to read numbers in the pattern. The initial pointer\nmust be at the sign or first digit of the number. When relative values\n(introduced by + or -) are allowed, they are relative group numbers, and the\nresult must be greater than zero.\n\nArguments:\n  ptrptr      points to the character pointer variable\n  ptrend      points to the end of the input string\n  allow_sign  if < 0, sign not allowed; if >= 0, sign is relative to this\n  max_value   the largest number allowed;\n              you must not pass a value for max_value larger than\n              INT_MAX/10 - 1 because this function relies on max_value to\n              avoid integer overflow\n  max_error   the error to give for an over-large number\n  intptr      where to put the result\n  errcodeptr  where to put an error code\n\nReturns:      TRUE  - a number was read\n              FALSE - errorcode == 0 => no number was found\n                      errorcode != 0 => an error occurred\n*/\n\nstatic BOOL\nread_number(PCRE2_SPTR *ptrptr, PCRE2_SPTR ptrend, int32_t allow_sign,\n  uint32_t max_value, uint32_t max_error, int *intptr, int *errorcodeptr)\n{\nint sign = 0;\nuint32_t n = 0;\nPCRE2_SPTR ptr = *ptrptr;\nBOOL yield = FALSE;\n\nPCRE2_ASSERT(max_value <= INT_MAX/10 - 1);\n\n*errorcodeptr = 0;\n\nif (allow_sign >= 0 && ptr < ptrend)\n  {\n  if (*ptr == CHAR_PLUS)\n    {\n    sign = +1;\n    max_value -= allow_sign;\n    ptr++;\n    }\n  else if (*ptr == CHAR_MINUS)\n    {\n    sign = -1;\n    ptr++;\n    }\n  }\n\nif (ptr >= ptrend || !IS_DIGIT(*ptr)) return FALSE;\nwhile (ptr < ptrend && IS_DIGIT(*ptr))\n  {\n  n = n * 10 + (*ptr++ - CHAR_0);\n  if (n > max_value)\n    {\n    *errorcodeptr = max_error;\n    while (ptr < ptrend && IS_DIGIT(*ptr)) ptr++;\n    goto EXIT;\n    }\n  }\n\nif (allow_sign >= 0 && sign != 0)\n  {\n  if (n == 0)\n    {\n    *errorcodeptr = ERR26;  /* +0 and -0 are not allowed */\n    goto EXIT;\n    }\n\n  if (sign > 0) n += allow_sign;\n  else if (n > (uint32_t)allow_sign)\n    {\n    *errorcodeptr = ERR15;  /* Non-existent subpattern */\n    goto EXIT;\n    }\n  else n = allow_sign + 1 - n;\n  }\n\nyield = TRUE;\n\nEXIT:\n*intptr = n;\n*ptrptr = ptr;\nreturn yield;\n}\n\n\n\n/*************************************************\n*         Read repeat counts                     *\n*************************************************/\n\n/* Read an item of the form {n,m} and return the values when non-NULL pointers\nare supplied. Repeat counts must be less than 65536 (MAX_REPEAT_COUNT); a\nlarger value is used for \"unlimited\". We have to use signed arguments for\nread_number() because it is capable of returning a signed value. As of Perl\n5.34.0 either n or m may be absent, but not both. Perl also allows spaces and\ntabs after { and before } and between the numbers and the comma, so we do too.\n\nArguments:\n  ptrptr         points to pointer to character after '{'\n  ptrend         pointer to end of input\n  minp           if not NULL, pointer to int for min\n  maxp           if not NULL, pointer to int for max\n  errorcodeptr   points to error code variable\n\nReturns:         FALSE if not a repeat quantifier, errorcode set zero\n                 FALSE on error, with errorcode set non-zero\n                 TRUE on success, with pointer updated to point after '}'\n*/\n\nstatic BOOL\nread_repeat_counts(PCRE2_SPTR *ptrptr, PCRE2_SPTR ptrend, uint32_t *minp,\n  uint32_t *maxp, int *errorcodeptr)\n{\nPCRE2_SPTR p = *ptrptr;\nPCRE2_SPTR pp;\nBOOL yield = FALSE;\nBOOL had_minimum = FALSE;\nint32_t min = 0;\nint32_t max = REPEAT_UNLIMITED; /* This value is larger than MAX_REPEAT_COUNT */\n\n*errorcodeptr = 0;\nwhile (p < ptrend && (*p == CHAR_SPACE || *p == CHAR_HT)) p++;\n\n/* Check the syntax before interpreting. Otherwise, a non-quantifier sequence\nsuch as \"X{123456ABC\" would incorrectly give a \"number too big in quantifier\"\nerror. */\n\npp = p;\nif (pp < ptrend && IS_DIGIT(*pp))\n  {\n  had_minimum = TRUE;\n  while (++pp < ptrend && IS_DIGIT(*pp)) {}\n  }\n\nwhile (pp < ptrend && (*pp == CHAR_SPACE || *pp == CHAR_HT)) pp++;\nif (pp >= ptrend) return FALSE;\n\nif (*pp == CHAR_RIGHT_CURLY_BRACKET)\n  {\n  if (!had_minimum) return FALSE;\n  }\nelse\n  {\n  if (*pp++ != CHAR_COMMA) return FALSE;\n  while (pp < ptrend && (*pp == CHAR_SPACE || *pp == CHAR_HT)) pp++;\n  if (pp >= ptrend) return FALSE;\n  if (IS_DIGIT(*pp))\n    {\n    while (++pp < ptrend && IS_DIGIT(*pp)) {}\n    }\n  else if (!had_minimum) return FALSE;\n  while (pp < ptrend && (*pp == CHAR_SPACE || *pp == CHAR_HT)) pp++;\n  if (pp >= ptrend || *pp != CHAR_RIGHT_CURLY_BRACKET) return FALSE;\n  }\n\n/* Now process the quantifier for real. We know it must be {n} or {n,} or {,m}\nor {n,m}. The only error that read_number() can return is for a number that is\ntoo big. If *errorcodeptr is returned as zero it means no number was found. */\n\n/* Deal with {,m} or n too big. If we successfully read m there is no need to\ncheck m >= n because n defaults to zero. */\n\nif (!read_number(&p, ptrend, -1, MAX_REPEAT_COUNT, ERR5, &min, errorcodeptr))\n  {\n  if (*errorcodeptr != 0) goto EXIT;    /* n too big */\n  p++;  /* Skip comma and subsequent spaces */\n  while (p < ptrend && (*p == CHAR_SPACE || *p == CHAR_HT)) p++;\n  if (!read_number(&p, ptrend, -1, MAX_REPEAT_COUNT, ERR5, &max, errorcodeptr))\n    {\n    if (*errorcodeptr != 0) goto EXIT;  /* m too big */\n    }\n  }\n\n/* Have read one number. Deal with {n} or {n,} or {n,m} */\n\nelse\n  {\n  while (p < ptrend && (*p == CHAR_SPACE || *p == CHAR_HT)) p++;\n  if (*p == CHAR_RIGHT_CURLY_BRACKET)\n    {\n    max = min;\n    }\n  else   /* Handle {n,} or {n,m} */\n    {\n    p++;    /* Skip comma and subsequent spaces */\n    while (p < ptrend && (*p == CHAR_SPACE || *p == CHAR_HT)) p++;\n    if (!read_number(&p, ptrend, -1, MAX_REPEAT_COUNT, ERR5, &max, errorcodeptr))\n      {\n      if (*errorcodeptr != 0) goto EXIT;   /* m too big */\n      }\n\n    if (max < min)\n      {\n      *errorcodeptr = ERR4;\n      goto EXIT;\n      }\n    }\n  }\n\n/* Valid quantifier exists */\n\nwhile (p < ptrend && (*p == CHAR_SPACE || *p == CHAR_HT)) p++;\np++;\nyield = TRUE;\nif (minp != NULL) *minp = (uint32_t)min;\nif (maxp != NULL) *maxp = (uint32_t)max;\n\n/* Update the pattern pointer */\n\nEXIT:\n*ptrptr = p;\nreturn yield;\n}\n\n\n\n/*************************************************\n*            Handle escapes                      *\n*************************************************/\n\n/* This function is called when a \\ has been encountered. It either returns a\npositive value for a simple escape such as \\d, or 0 for a data character, which\nis placed in chptr. A backreference to group n is returned as -(n+1). On\nentry, ptr is pointing at the character after \\. On exit, it points after the\nfinal code unit of the escape sequence.\n\nThis function is also called from pcre2_substitute() to handle escape sequences\nin replacement strings. In this case, the cb argument is NULL, and in the case\nof escapes that have further processing, only sequences that define a data\ncharacter are recognised. The options argument is the final value of the\ncompiled pattern's options.\n\nArguments:\n  ptrptr         points to the input position pointer\n  ptrend         points to the end of the input\n  chptr          points to a returned data character\n  errorcodeptr   points to the errorcode variable (containing zero)\n  options        the current options bits\n  xoptions       the current extra options bits\n  bracount       the number of capturing parentheses encountered so far\n  isclass        TRUE if in a character class\n  cb             compile data block or NULL when called from pcre2_substitute()\n\nReturns:         zero => a data character\n                 positive => a special escape sequence\n                 negative => a numerical back reference\n                 on error, errorcodeptr is set non-zero\n*/\n\nint\nPRIV(check_escape)(PCRE2_SPTR *ptrptr, PCRE2_SPTR ptrend, uint32_t *chptr,\n  int *errorcodeptr, uint32_t options, uint32_t xoptions, uint32_t bracount,\n  BOOL isclass, compile_block *cb)\n{\nBOOL utf = (options & PCRE2_UTF) != 0;\nBOOL alt_bsux =\n  ((options & PCRE2_ALT_BSUX) | (xoptions & PCRE2_EXTRA_ALT_BSUX)) != 0;\nPCRE2_SPTR ptr = *ptrptr;\nuint32_t c, cc;\nint escape = 0;\nint i;\n\n/* If backslash is at the end of the string, it's an error. */\n\nif (ptr >= ptrend)\n  {\n  *errorcodeptr = ERR1;\n  return 0;\n  }\n\nGETCHARINCTEST(c, ptr);         /* Get character value, increment pointer */\n*errorcodeptr = 0;              /* Be optimistic */\n\n/* Non-alphanumerics are literals, so we just leave the value in c. An initial\nvalue test saves a memory lookup for code points outside the alphanumeric\nrange. */\n\nif (c < ESCAPES_FIRST || c > ESCAPES_LAST) {}  /* Definitely literal */\n\n/* Otherwise, do a table lookup. Non-zero values need little processing here. A\npositive value is a literal value for something like \\n. A negative value is\nthe negation of one of the ESC_ macros that is passed back for handling by the\ncalling function. Some extra checking is needed for \\N because only \\N{U+dddd}\nis supported. If the value is zero, further processing is handled below. */\n\nelse if ((i = escapes[c - ESCAPES_FIRST]) != 0)\n  {\n  if (i > 0)\n    {\n    c = (uint32_t)i;\n    if (c == CHAR_CR && (xoptions & PCRE2_EXTRA_ESCAPED_CR_IS_LF) != 0)\n      c = CHAR_LF;\n    }\n  else  /* Negative table entry */\n    {\n    escape = -i;                    /* Else return a special escape */\n    if (cb != NULL && (escape == ESC_P || escape == ESC_p || escape == ESC_X))\n      cb->external_flags |= PCRE2_HASBKPORX;   /* Note \\P, \\p, or \\X */\n\n    /* Perl supports \\N{name} for character names and \\N{U+dddd} for numerical\n    Unicode code points, as well as plain \\N for \"not newline\". PCRE does not\n    support \\N{name}. However, it does support quantification such as \\N{2,3},\n    so if \\N{ is not followed by U+dddd we check for a quantifier. */\n\n    if (escape == ESC_N && ptr < ptrend && *ptr == CHAR_LEFT_CURLY_BRACKET)\n      {\n      PCRE2_SPTR p = ptr + 1;\n\n      /* Perl ignores spaces and tabs after { */\n\n      while (p < ptrend && (*p == CHAR_SPACE || *p == CHAR_HT)) p++;\n\n      /* \\N{U+ can be handled by the \\x{ code. However, this construction is\n      not valid in EBCDIC environments because it specifies a Unicode\n      character, not a codepoint in the local code. For example \\N{U+0041}\n      must be \"A\" in all environments. Also, in Perl, \\N{U+ forces Unicode\n      casing semantics for the entire pattern, so allow it only in UTF (i.e.\n      Unicode) mode. */\n\n      if (ptrend - p > 1 && *p == CHAR_U && p[1] == CHAR_PLUS)\n        {\n#ifndef EBCDIC\n        if (utf)\n          {\n          ptr = p + 2;\n          escape = 0;   /* Not a fancy escape after all */\n          goto COME_FROM_NU;\n          }\n#endif\n\n        /* Improve error offset. */\n        ptr = p + 2;\n        while (ptr < ptrend && XDIGIT(*ptr) != 0xff) ptr++;\n        while (ptr < ptrend && (*ptr == CHAR_SPACE || *ptr == CHAR_HT)) ptr++;\n        if (ptr < ptrend && *ptr == CHAR_RIGHT_CURLY_BRACKET) ptr++;\n\n        *errorcodeptr = ERR93;\n        }\n\n      /* Give an error in contexts where quantifiers are not allowed\n      (character classes; substitution strings). */\n\n      else if (isclass || cb == NULL)\n        {\n        ptr++; /* Skip over the opening brace */\n        *errorcodeptr = ERR37;\n        }\n\n      /* Give an error if what follows is not a quantifier, but don't override\n      an error set by the quantifier reader (e.g. number overflow). */\n\n      else\n        {\n        if (!read_repeat_counts(&p, ptrend, NULL, NULL, errorcodeptr) &&\n             *errorcodeptr == 0)\n          {\n          ptr++; /* Skip over the opening brace */\n          *errorcodeptr = ERR37;\n          }\n        }\n      }\n    }\n  }\n\n/* Escapes that need further processing, including those that are unknown, have\na zero entry in the lookup table. When called from pcre2_substitute(), only \\c,\n\\o, and \\x are recognized (\\u and \\U can never appear as they are used for case\nforcing). */\n\nelse\n  {\n  int s;\n  PCRE2_SPTR oldptr;\n  BOOL overflow;\n\n  /* Filter calls from pcre2_substitute(). */\n\n  if (cb == NULL)\n    {\n    if (!(c >= CHAR_0 && c <= CHAR_9) && c != CHAR_c && c != CHAR_o &&\n        c != CHAR_x && c != CHAR_g)\n      {\n      *errorcodeptr = ERR3;\n      goto EXIT;\n      }\n    alt_bsux = FALSE;   /* Do not modify \\x handling */\n    }\n\n  switch (c)\n    {\n    /* A number of Perl escapes are not handled by PCRE. We give an explicit\n    error. */\n\n    case CHAR_F:\n    case CHAR_l:\n    case CHAR_L:\n    *errorcodeptr = ERR37;\n    break;\n\n    /* \\u is unrecognized when neither PCRE2_ALT_BSUX nor PCRE2_EXTRA_ALT_BSUX\n    is set. Otherwise, \\u must be followed by exactly four hex digits or, if\n    PCRE2_EXTRA_ALT_BSUX is set, by any number of hex digits in braces.\n    Otherwise it is a lowercase u letter. This gives some compatibility with\n    ECMAScript (aka JavaScript). Unlike other braced items, white space is NOT\n    allowed. When \\u{ is not followed by hex digits, a special return is given\n    because otherwise \\u{ 12} (for example) would be treated as u{12}. */\n\n    case CHAR_u:\n    if (!alt_bsux)\n      *errorcodeptr = ERR37;\n    else\n      {\n      uint32_t xc;\n\n      if (ptr >= ptrend) break;\n      if (*ptr == CHAR_LEFT_CURLY_BRACKET &&\n          (xoptions & PCRE2_EXTRA_ALT_BSUX) != 0)\n        {\n        PCRE2_SPTR hptr = ptr + 1;\n\n        cc = 0;\n        while (hptr < ptrend && (xc = XDIGIT(*hptr)) != 0xff)\n          {\n          if ((cc & 0xf0000000) != 0)  /* Test for 32-bit overflow */\n            {\n            *errorcodeptr = ERR77;\n            ptr = hptr;   /* Show where */\n            break;        /* *hptr != } will cause another break below */\n            }\n          cc = (cc << 4) | xc;\n          hptr++;\n          }\n\n        if (hptr == ptr + 1 ||   /* No hex digits */\n            hptr >= ptrend ||    /* Hit end of input */\n            *hptr != CHAR_RIGHT_CURLY_BRACKET)  /* No } terminator */\n          {\n          if (isclass) break; /* In a class, just treat as '\\u' literal */\n          escape = ESC_ub;    /* Special return */\n          ptr++;              /* Skip { */\n          break;              /* Hex escape not recognized */\n          }\n\n        c = cc;          /* Accept the code point */\n        ptr = hptr + 1;\n        }\n\n      else  /* Must be exactly 4 hex digits */\n        {\n        if (ptrend - ptr < 4) break;               /* Less than 4 chars */\n        if ((cc = XDIGIT(ptr[0])) == 0xff) break;  /* Not a hex digit */\n        if ((xc = XDIGIT(ptr[1])) == 0xff) break;  /* Not a hex digit */\n        cc = (cc << 4) | xc;\n        if ((xc = XDIGIT(ptr[2])) == 0xff) break;  /* Not a hex digit */\n        cc = (cc << 4) | xc;\n        if ((xc = XDIGIT(ptr[3])) == 0xff) break;  /* Not a hex digit */\n        c = (cc << 4) | xc;\n        ptr += 4;\n        }\n\n      if (utf)\n        {\n        if (c > 0x10ffffU) *errorcodeptr = ERR77;\n        else\n          if (c >= 0xd800 && c <= 0xdfff &&\n              (xoptions & PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES) == 0)\n                *errorcodeptr = ERR73;\n        }\n      else if (c > MAX_NON_UTF_CHAR) *errorcodeptr = ERR77;\n      }\n    break;\n\n    /* \\U is unrecognized unless PCRE2_ALT_BSUX or PCRE2_EXTRA_ALT_BSUX is set,\n    in which case it is an upper case letter. */\n\n    case CHAR_U:\n    if (!alt_bsux) *errorcodeptr = ERR37;\n    break;\n\n    /* In a character class, \\g is just a literal \"g\". Outside a character\n    class, \\g must be followed by one of a number of specific things:\n\n    (1) A number, either plain or braced. If positive, it is an absolute\n    backreference. If negative, it is a relative backreference. This is a Perl\n    5.10 feature.\n\n    (2) Perl 5.10 also supports \\g{name} as a reference to a named group. This\n    is part of Perl's movement towards a unified syntax for back references. As\n    this is synonymous with \\k{name}, we fudge it up by pretending it really\n    was \\k{name}.\n\n    (3) For Oniguruma compatibility we also support \\g followed by a name or a\n    number either in angle brackets or in single quotes. However, these are\n    (possibly recursive) subroutine calls, _not_ backreferences. We return\n    the ESC_g code.\n\n    Summary: Return a negative number for a numerical back reference (offset\n    by 1), ESC_k for a named back reference, and ESC_g for a named or\n    numbered subroutine call.\n\n    The above describes the \\g behaviour inside patterns. Inside replacement\n    strings (pcre2_substitute) we support only \\g<nameornum> for Python\n    compatibility. Return ESG_g for the named case, and -(num+1) for the\n    numbered case.\n    */\n\n    case CHAR_g:\n    if (isclass) break;\n\n    if (ptr >= ptrend)\n      {\n      *errorcodeptr = ERR57;\n      break;\n      }\n\n    if (cb == NULL)\n      {\n      PCRE2_SPTR p;\n      /* Substitution strings */\n      if (*ptr != CHAR_LESS_THAN_SIGN)\n        {\n        *errorcodeptr = ERR57;\n        break;\n        }\n\n      p = ptr + 1;\n\n      if (!read_number(&p, ptrend, -1, MAX_GROUP_NUMBER, ERR61, &s,\n          errorcodeptr))\n        {\n        if (*errorcodeptr == 0) escape = ESC_g;  /* No number found */\n        break;\n        }\n\n      if (p >= ptrend || *p != CHAR_GREATER_THAN_SIGN)\n        {\n        ptr = p;\n        *errorcodeptr = ERR119;  /* Missing terminator for number */\n        break;\n        }\n\n      /* This is the reason that back references are returned as -(s+1) rather\n      than just -s. In a pattern, \\0 is not a back reference, but \\g<0> is\n      valid in a substitution string, so this must be representable. */\n      ptr = p + 1;\n      escape = -(s+1);\n      break;\n      }\n\n    if (*ptr == CHAR_LESS_THAN_SIGN || *ptr == CHAR_APOSTROPHE)\n      {\n      escape = ESC_g;\n      break;\n      }\n\n    /* If there is a brace delimiter, try to read a numerical reference. If\n    there isn't one, assume we have a name and treat it as \\k. */\n\n    if (*ptr == CHAR_LEFT_CURLY_BRACKET)\n      {\n      PCRE2_SPTR p = ptr + 1;\n\n      while (p < ptrend && (*p == CHAR_SPACE || *p == CHAR_HT)) p++;\n      if (!read_number(&p, ptrend, bracount, MAX_GROUP_NUMBER, ERR61, &s,\n          errorcodeptr))\n        {\n        if (*errorcodeptr == 0) escape = ESC_k;  /* No number found */\n        break;\n        }\n      while (p < ptrend && (*p == CHAR_SPACE || *p == CHAR_HT)) p++;\n\n      if (p >= ptrend || *p != CHAR_RIGHT_CURLY_BRACKET)\n        {\n        ptr = p;\n        *errorcodeptr = ERR119;  /* Missing terminator for number */\n        break;\n        }\n      ptr = p + 1;\n      }\n\n    /* Read an undelimited number */\n\n    else\n      {\n      if (!read_number(&ptr, ptrend, bracount, MAX_GROUP_NUMBER, ERR61, &s,\n          errorcodeptr))\n        {\n        if (*errorcodeptr == 0) *errorcodeptr = ERR57;  /* No number found */\n        break;\n        }\n      }\n\n    if (s <= 0)\n      {\n      *errorcodeptr = ERR15;\n      break;\n      }\n\n    escape = -(s+1);\n    break;\n\n    /* The handling of escape sequences consisting of a string of digits\n    starting with one that is not zero is not straightforward. Perl has changed\n    over the years. Nowadays \\g{} for backreferences and \\o{} for octal are\n    recommended to avoid the ambiguities in the old syntax.\n\n    Outside a character class, the digits are read as a decimal number. If the\n    number is less than 10, or if there are that many previous extracting left\n    brackets, it is a back reference. Otherwise, up to three octal digits are\n    read to form an escaped character code. Thus \\123 is likely to be octal 123\n    (cf \\0123, which is octal 012 followed by the literal 3). This is the \"Perl\n    style\" of handling ambiguous octal/backrefences such as \\12.\n\n    There is an alternative disambiguation strategy, selected by\n    PCRE2_EXTRA_PYTHON_OCTAL, which follows Python's behaviour. An octal must\n    have either a leading zero, or exactly three octal digits; otherwise it's\n    a backreference. The disambiguation is stable, and does not depend on how\n    many capture groups are defined (it's simply an invalid backreference if\n    there is no corresponding capture group). Additionally, octal values above\n    \\377 (\\xff) are rejected.\n\n    Inside a character class, \\ followed by a digit is always either a literal\n    8 or 9 or an octal number. */\n\n    case CHAR_1: case CHAR_2: case CHAR_3: case CHAR_4: case CHAR_5:\n    case CHAR_6: case CHAR_7: case CHAR_8: case CHAR_9:\n\n    if (isclass)\n      {\n      /* Fall through to octal handling; never a backreference inside a class. */\n      }\n    else if ((xoptions & PCRE2_EXTRA_PYTHON_OCTAL) != 0)\n      {\n      /* Python-style disambiguation. */\n      if (ptr[-1] <= CHAR_7 && ptr + 1 < ptrend && ptr[0] >= CHAR_0 &&\n          ptr[0] <= CHAR_7 && ptr[1] >= CHAR_0 && ptr[1] <= CHAR_7)\n        {\n        /* We peeked a three-digit octal, so fall through */\n        }\n      else\n        {\n        /* We are at a digit, so the only possible error from read_number() is\n        a number that is too large. */\n        ptr--;   /* Back to the digit */\n\n        if (!read_number(&ptr, ptrend, -1, MAX_GROUP_NUMBER, 0, &s, errorcodeptr))\n          {\n          *errorcodeptr = ERR61;\n          break;\n          }\n\n        escape = -(s+1);\n        break;\n        }\n      }\n    else\n      {\n      /* Perl-style disambiguation. */\n      oldptr = ptr;\n      ptr--;   /* Back to the digit */\n\n      /* As we know we are at a digit, the only possible error from\n      read_number() is a number that is too large to be a group number. Because\n      that number might be still valid if read as an octal, errorcodeptr is not\n      set on failure and therefore a sentinel value of INT_MAX is used instead\n      of the original value, and will be used later to properly set the error,\n      if not falling through. */\n\n      if (!read_number(&ptr, ptrend, -1, MAX_GROUP_NUMBER, 0, &s, errorcodeptr))\n        s = INT_MAX;\n\n      /* \\1 to \\9 are always back references. \\8x and \\9x are too; \\1x to \\7x\n      are octal escapes if there are not that many previous captures. */\n\n      if (s < 10 || c >= CHAR_8 || (unsigned)s <= bracount)\n        {\n        /* s > MAX_GROUP_NUMBER should not be possible because of read_number(),\n        but we keep it just to be safe and because it will also catch the\n        sentinel value that was set on failure by that function. */\n\n        if ((unsigned)s > MAX_GROUP_NUMBER)\n          {\n          PCRE2_ASSERT(s == INT_MAX);\n          *errorcodeptr = ERR61;\n          }\n        else escape = -(s+1);     /* Indicates a back reference */\n        break;\n        }\n\n      ptr = oldptr;      /* Put the pointer back and fall through */\n      }\n\n    /* Handle a digit following \\ when the number is not a back reference, or\n    we are within a character class. If the first digit is 8 or 9, Perl used to\n    generate a binary zero and then treat the digit as a following literal. At\n    least by Perl 5.18 this changed so as not to insert the binary zero. */\n\n    if (c >= CHAR_8) break;\n\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    /* \\0 always starts an octal number, but we may drop through to here with a\n    larger first octal digit. The original code used just to take the least\n    significant 8 bits of octal numbers (I think this is what early Perls used\n    to do). Nowadays we allow for larger numbers in UTF-8 mode and 16/32-bit mode,\n    but no more than 3 octal digits. */\n\n    case CHAR_0:\n    c -= CHAR_0;\n    while(i++ < 2 && ptr < ptrend && *ptr >= CHAR_0 && *ptr <= CHAR_7)\n        c = c * 8 + *ptr++ - CHAR_0;\n    if (c > 0xff)\n      {\n      if ((xoptions & PCRE2_EXTRA_PYTHON_OCTAL) != 0) *errorcodeptr = ERR102;\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      else if (!utf) *errorcodeptr = ERR51;\n#endif\n      }\n\n    /* PCRE2_EXTRA_NO_BS0 disables the NUL escape '\\0' but doesn't affect\n    two- or three-character octal escapes \\00 and \\000, nor \\x00. */\n\n    if ((xoptions & PCRE2_EXTRA_NO_BS0) != 0 && c == 0 && i == 1)\n        *errorcodeptr = ERR98;\n    break;\n\n    /* \\o is a relatively new Perl feature, supporting a more general way of\n    specifying character codes in octal. The only supported form is \\o{ddd},\n    with optional spaces or tabs after { and before }. */\n\n    case CHAR_o:\n    if (ptr >= ptrend || *ptr != CHAR_LEFT_CURLY_BRACKET)\n      {\n      *errorcodeptr = ERR55;\n      break;\n      }\n    ptr++;\n\n    while (ptr < ptrend && (*ptr == CHAR_SPACE || *ptr == CHAR_HT)) ptr++;\n    if (ptr >= ptrend || *ptr == CHAR_RIGHT_CURLY_BRACKET)\n      {\n      *errorcodeptr = ERR78;\n      break;\n      }\n\n    c = 0;\n    overflow = FALSE;\n    while (ptr < ptrend && *ptr >= CHAR_0 && *ptr <= CHAR_7)\n      {\n      cc = *ptr++;\n      if (c == 0 && cc == CHAR_0) continue;     /* Leading zeroes */\n#if PCRE2_CODE_UNIT_WIDTH == 32\n      if (c >= 0x20000000u) { overflow = TRUE; break; }\n#endif\n      c = (c << 3) + (cc - CHAR_0);\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      if (c > (utf ? 0x10ffffU : 0xffU)) { overflow = TRUE; break; }\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n      if (c > (utf ? 0x10ffffU : 0xffffU)) { overflow = TRUE; break; }\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n      if (utf && c > 0x10ffffU) { overflow = TRUE; break; }\n#endif\n      }\n\n    while (ptr < ptrend && (*ptr == CHAR_SPACE || *ptr == CHAR_HT)) ptr++;\n\n    if (overflow)\n      {\n      while (ptr < ptrend && *ptr >= CHAR_0 && *ptr <= CHAR_7) ptr++;\n      *errorcodeptr = ERR34;\n      }\n    else if (utf && c >= 0xd800 && c <= 0xdfff &&\n             (xoptions & PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES) == 0)\n      {\n      *errorcodeptr = ERR73;\n      }\n    else if (ptr < ptrend && *ptr == CHAR_RIGHT_CURLY_BRACKET)\n      {\n      ptr++;\n      }\n    else\n      {\n      *errorcodeptr = ERR64;\n      goto ESCAPE_FAILED_FORWARD;\n      }\n    break;\n\n    /* When PCRE2_ALT_BSUX or PCRE2_EXTRA_ALT_BSUX is set, \\x must be followed\n    by two hexadecimal digits. Otherwise it is a lowercase x letter. */\n\n    case CHAR_x:\n    if (alt_bsux)\n      {\n      uint32_t xc;\n      if (ptrend - ptr < 2) break;               /* Less than 2 characters */\n      if ((cc = XDIGIT(ptr[0])) == 0xff) break;  /* Not a hex digit */\n      if ((xc = XDIGIT(ptr[1])) == 0xff) break;  /* Not a hex digit */\n      c = (cc << 4) | xc;\n      ptr += 2;\n      }\n\n    /* Handle \\x in Perl's style. \\x{ddd} is a character code which can be\n    greater than 0xff in UTF-8 or non-8bit mode, but only if the ddd are hex\n    digits. If not, { used to be treated as a data character. However, Perl\n    seems to read hex digits up to the first non-such, and ignore the rest, so\n    that, for example \\x{zz} matches a binary zero. This seems crazy, so PCRE\n    now gives an error. */\n\n    else\n      {\n      if (ptr < ptrend && *ptr == CHAR_LEFT_CURLY_BRACKET)\n        {\n        ptr++;\n        while (ptr < ptrend && (*ptr == CHAR_SPACE || *ptr == CHAR_HT)) ptr++;\n\n#ifndef EBCDIC\n        COME_FROM_NU:\n#endif\n        if (ptr >= ptrend || *ptr == CHAR_RIGHT_CURLY_BRACKET)\n          {\n          *errorcodeptr = ERR78;\n          break;\n          }\n        c = 0;\n        overflow = FALSE;\n\n        while (ptr < ptrend && (cc = XDIGIT(*ptr)) != 0xff)\n          {\n          ptr++;\n          if (c == 0 && cc == 0) continue;   /* Leading zeroes */\n#if PCRE2_CODE_UNIT_WIDTH == 32\n          if (c >= 0x10000000l) { overflow = TRUE; break; }\n#endif\n          c = (c << 4) | cc;\n          if ((utf && c > 0x10ffffU) || (!utf && c > MAX_NON_UTF_CHAR))\n            {\n            overflow = TRUE;\n            break;\n            }\n          }\n\n        /* Perl ignores spaces and tabs before } */\n\n        while (ptr < ptrend && (*ptr == CHAR_SPACE || *ptr == CHAR_HT)) ptr++;\n\n        /* On overflow, skip remaining hex digits */\n\n        if (overflow)\n          {\n          while (ptr < ptrend && XDIGIT(*ptr) != 0xff) ptr++;\n          *errorcodeptr = ERR34;\n          }\n        else if (utf && c >= 0xd800 && c <= 0xdfff &&\n                 (xoptions & PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES) == 0)\n          {\n          *errorcodeptr = ERR73;\n          }\n        else if (ptr < ptrend && *ptr == CHAR_RIGHT_CURLY_BRACKET)\n          {\n          ptr++;\n          }\n\n        /* If the sequence of hex digits (followed by optional space) does not\n        end with '}', give an error. We used just to recognize this construct\n        and fall through to the normal \\x handling, but nowadays Perl gives an\n        error, which seems much more sensible, so we do too. */\n\n        else\n          {\n          *errorcodeptr = ERR67;\n          goto ESCAPE_FAILED_FORWARD;\n          }\n        }   /* End of \\x{} processing */\n\n      /* Read a up to two hex digits after \\x */\n\n      else\n        {\n        /* Perl has the surprising/broken behaviour that \\x without following\n        hex digits is treated as an escape for NUL. Their source code laments\n        this but keeps it for backwards compatibility. A warning is printed\n        when \"use warnings\" is enabled. Because we don't have warnings, we\n        simply forbid it. */\n        if (ptr >= ptrend || (cc = XDIGIT(*ptr)) == 0xff)\n          {\n          /* Not a hex digit */\n          *errorcodeptr = ERR78;\n          break;\n          }\n        ptr++;\n        c = cc;\n\n        /* With \"use re 'strict'\" Perl actually requires exactly two digits (error\n        for \\x, \\xA and \\xAAA). While \\x was already rejected, this seems overly\n        strict, and there seems little incentive to align with that, given the\n        backwards-compatibility cost.\n\n        For comparison, note that other engines disagree. For example:\n          - Java allows 1 or 2 hex digits. Error if 0 digits. No error if >2 digits\n          - .NET requires 2 hex digits. Error if 0, 1 digits. No error if >2 digits.\n        */\n        if (ptr >= ptrend || (cc = XDIGIT(*ptr)) == 0xff) break;  /* Not a hex digit */\n        ptr++;\n        c = (c << 4) | cc;\n        }     /* End of \\xdd handling */\n      }       /* End of Perl-style \\x handling */\n    break;\n\n    /* The handling of \\c is different in ASCII and EBCDIC environments. In an\n    ASCII (or Unicode) environment, an error is given if the character\n    following \\c is not a printable ASCII character. Otherwise, the following\n    character is upper-cased if it is a letter, and after that the 0x40 bit is\n    flipped. The result is the value of the escape.\n\n    In an EBCDIC environment the handling of \\c is compatible with the\n    specification in the perlebcdic document. The following character must be\n    a letter or one of small number of special characters. These provide a\n    means of defining the character values 0-31.\n\n    For testing the EBCDIC handling of \\c in an ASCII environment, recognize\n    the EBCDIC value of 'c' explicitly. */\n\n    case CHAR_c:\n    if (ptr >= ptrend)\n      {\n      *errorcodeptr = ERR2;\n      break;\n      }\n    c = *ptr;\n    if (c >= CHAR_a && c <= CHAR_z) c = UPPER_CASE(c);\n\n    /* Handle \\c in an ASCII/Unicode environment. */\n\n#ifndef EBCDIC    /* ASCII/UTF-8 coding */\n    if (c < 32 || c > 126)  /* Excludes all non-printable ASCII */\n      {\n      *errorcodeptr = ERR68;\n      goto ESCAPE_FAILED_FORWARD;\n      }\n    c ^= 0x40;\n\n    /* Handle \\c in an EBCDIC environment. The special case \\c? is converted to\n    255 (0xff) or 95 (0x5f) if other characters suggest we are using the\n    POSIX-BC encoding. (This is the way Perl indicates that it handles \\c?.)\n    The other valid sequences correspond to a list of specific characters. */\n\n#else\n    if (c == CHAR_QUESTION_MARK)\n      c = (CHAR_BACKSLASH == 188 && CHAR_GRAVE_ACCENT == 74)? 0x5f : 0xff;\n    else\n      {\n      for (i = 0; i < 32; i++)\n        {\n        if (c == ebcdic_escape_c[i]) break;\n        }\n      if (i < 32)\n        c = i;\n      else\n        {\n        *errorcodeptr = ERR68;\n        goto ESCAPE_FAILED_FORWARD;\n        }\n      }\n#endif  /* EBCDIC */\n\n    ptr++;\n    break;\n\n    /* Any other alphanumeric following \\ is an error. Perl gives an error only\n    if in warning mode, but PCRE doesn't have a warning mode. */\n\n    default:\n    *errorcodeptr = ERR3;\n    break;\n    }\n  }\n\n/* Set the pointer to the next character before returning. */\n\nEXIT:\n*ptrptr = ptr;\n*chptr = c;\nreturn escape;\n\n/* Some errors need to indicate the next character. */\n\nESCAPE_FAILED_FORWARD:\nptr++;\n#ifdef SUPPORT_UNICODE\nif (utf) FORWARDCHARTEST(ptr, ptrend);\n#endif\ngoto EXIT;\n}\n\n\n\n#ifdef SUPPORT_UNICODE\n/*************************************************\n*               Handle \\P and \\p                 *\n*************************************************/\n\n/* This function is called after \\P or \\p has been encountered, provided that\nPCRE2 is compiled with support for UTF and Unicode properties. On entry, the\ncontents of ptrptr are pointing after the P or p. On exit, it is left pointing\nafter the final code unit of the escape sequence.\n\nArguments:\n  ptrptr         the pattern position pointer\n  utf            true if the input is UTF-encoded\n  negptr         a boolean that is set TRUE for negation else FALSE\n  ptypeptr       an unsigned int that is set to the type value\n  pdataptr       an unsigned int that is set to the detailed property value\n  errorcodeptr   the error code variable\n  cb             the compile data\n\nReturns:         TRUE if the type value was found, or FALSE for an invalid type\n*/\n\nstatic BOOL\nget_ucp(PCRE2_SPTR *ptrptr, BOOL utf, BOOL *negptr, uint16_t *ptypeptr,\n  uint16_t *pdataptr, int *errorcodeptr, compile_block *cb)\n{\nuint32_t c;\nptrdiff_t i;\nPCRE2_SIZE bot, top;\nPCRE2_SPTR ptr = *ptrptr;\nPCRE2_UCHAR name[50];\nPCRE2_UCHAR *vptr = NULL;\nuint16_t ptscript = PT_NOTSCRIPT;\n\n#ifndef MAYBE_UTF_MULTI\n(void)utf;  /* Avoid compiler warning */\n#endif\n\nif (ptr >= cb->end_pattern) goto ERROR_RETURN;\nGETCHARINCTEST(c, ptr);\n*negptr = FALSE;\n\n/* \\P or \\p can be followed by a name in {}, optionally preceded by ^ for\nnegation. We must be handling Unicode encoding here, though we may be compiling\nfor UTF-8 input in an EBCDIC environment. (PCRE2 does not support both EBCDIC\ninput and Unicode input in the same build.) In accordance with Unicode's \"loose\nmatching\" rules, ASCII white space, hyphens, and underscores are ignored. We\ndon't use isspace() or tolower() because (a) code points may be greater than\n255, and (b) they wouldn't work when compiling for Unicode in an EBCDIC\nenvironment. */\n\nif (c == CHAR_LEFT_CURLY_BRACKET)\n  {\n  if (ptr >= cb->end_pattern) goto ERROR_RETURN;\n\n  for (i = 0; i < (int)(sizeof(name) / sizeof(PCRE2_UCHAR)) - 1; i++)\n    {\n    REDO:\n\n    if (ptr >= cb->end_pattern) goto ERROR_RETURN;\n    GETCHARINCTEST(c, ptr);\n\n    /* Skip ignorable Unicode characters. */\n\n    if (c == CHAR_UNDERSCORE || c == CHAR_MINUS || c == CHAR_SPACE ||\n        (c >= CHAR_HT && c <= CHAR_CR))\n      {\n      goto REDO;\n      }\n\n    /* The first significant character being circumflex negates the meaning of\n    the item. */\n\n    if (i == 0 && !*negptr && c == CHAR_CIRCUMFLEX_ACCENT)\n      {\n      *negptr = TRUE;\n      goto REDO;\n      }\n\n    if (c == CHAR_RIGHT_CURLY_BRACKET) break;\n\n    /* Names consist of ASCII letters and digits, but equals and colon may also\n    occur as a name/value separator. We must also allow for \\p{L&}. A simple\n    check for a value between '&' and 'z' suffices because anything else in a\n    name or value will cause an \"unknown property\" error anyway. */\n\n    if (c < CHAR_AMPERSAND || c > CHAR_z) goto ERROR_RETURN;\n\n    /* Lower case a capital letter or remember where the name/value separator\n    is. */\n\n    if (c >= CHAR_A && c <= CHAR_Z) c |= 0x20;\n    else if ((c == CHAR_COLON || c == CHAR_EQUALS_SIGN) && vptr == NULL)\n      vptr = name + i;\n\n    name[i] = c;\n    }\n\n  /* Error if the loop didn't end with '}' - either we hit the end of the\n  pattern or the name was longer than any legal property name. */\n\n  if (c != CHAR_RIGHT_CURLY_BRACKET) goto ERROR_RETURN;\n  name[i] = 0;\n  }\n\n/* If { doesn't follow \\p or \\P there is just one following character, which\nmust be an ASCII letter. */\n\nelse if (c >= CHAR_A && c <= CHAR_Z)\n  {\n  name[0] = c | 0x20;  /* Lower case */\n  name[1] = 0;\n  }\nelse if (c >= CHAR_a && c <= CHAR_z)\n  {\n  name[0] = c;\n  name[1] = 0;\n  }\nelse goto ERROR_RETURN;\n\n*ptrptr = ptr;   /* Update pattern pointer */\n\n/* If the property contains ':' or '=' we have class name and value separately\nspecified. The following are supported:\n\n  . Bidi_Class (synonym bc), for which the property names are \"bidi<name>\".\n  . Script (synonym sc) for which the property name is the script name\n  . Script_Extensions (synonym scx), ditto\n\nAs this is a small number, we currently just check the names directly. If this\ngrows, a sorted table and a switch will be neater.\n\nFor both the script properties, set a PT_xxx value so that (1) they can be\ndistinguished and (2) invalid script names that happen to be the name of\nanother property can be diagnosed. */\n\nif (vptr != NULL)\n  {\n  int offset = 0;\n  PCRE2_UCHAR sname[8];\n\n  *vptr = 0;   /* Terminate property name */\n  if (PRIV(strcmp_c8)(name, STRING_bidiclass) == 0 ||\n      PRIV(strcmp_c8)(name, STRING_bc) == 0)\n    {\n    offset = 4;\n    sname[0] = CHAR_b;\n    sname[1] = CHAR_i;  /* There is no strcpy_c8 function */\n    sname[2] = CHAR_d;\n    sname[3] = CHAR_i;\n    }\n\n  else if (PRIV(strcmp_c8)(name, STRING_script) == 0 ||\n           PRIV(strcmp_c8)(name, STRING_sc) == 0)\n    ptscript = PT_SC;\n\n  else if (PRIV(strcmp_c8)(name, STRING_scriptextensions) == 0 ||\n           PRIV(strcmp_c8)(name, STRING_scx) == 0)\n    ptscript = PT_SCX;\n\n  else\n    {\n    *errorcodeptr = ERR47;\n    return FALSE;\n    }\n\n  /* Adjust the string in name[] as needed */\n\n  memmove(name + offset, vptr + 1, (name + i - vptr)*sizeof(PCRE2_UCHAR));\n  if (offset != 0) memmove(name, sname, offset*sizeof(PCRE2_UCHAR));\n  }\n\n/* Search for a recognized property using binary chop. */\n\nbot = 0;\ntop = PRIV(utt_size);\n\nwhile (bot < top)\n  {\n  int r;\n  i = (bot + top) >> 1;\n  r = PRIV(strcmp_c8)(name, PRIV(utt_names) + PRIV(utt)[i].name_offset);\n\n  /* When a matching property is found, some extra checking is needed when the\n  \\p{xx:yy} syntax is used and xx is either sc or scx. */\n\n  if (r == 0)\n    {\n    *pdataptr = PRIV(utt)[i].value;\n    if (vptr == NULL || ptscript == PT_NOTSCRIPT)\n      {\n      *ptypeptr = PRIV(utt)[i].type;\n      return TRUE;\n      }\n\n    switch (PRIV(utt)[i].type)\n      {\n      case PT_SC:\n      *ptypeptr = PT_SC;\n      return TRUE;\n\n      case PT_SCX:\n      *ptypeptr = ptscript;\n      return TRUE;\n      }\n\n    break;  /* Non-script found */\n    }\n\n  if (r > 0) bot = i + 1; else top = i;\n  }\n\n*errorcodeptr = ERR47;   /* Unrecognized property */\nreturn FALSE;\n\nERROR_RETURN:            /* Malformed \\P or \\p */\n*errorcodeptr = ERR46;\n*ptrptr = ptr;\nreturn FALSE;\n}\n#endif\n\n\n\n/*************************************************\n*           Check for POSIX class syntax         *\n*************************************************/\n\n/* This function is called when the sequence \"[:\" or \"[.\" or \"[=\" is\nencountered in a character class. It checks whether this is followed by a\nsequence of characters terminated by a matching \":]\" or \".]\" or \"=]\". If we\nreach an unescaped ']' without the special preceding character, return FALSE.\n\nOriginally, this function only recognized a sequence of letters between the\nterminators, but it seems that Perl recognizes any sequence of characters,\nthough of course unknown POSIX names are subsequently rejected. Perl gives an\n\"Unknown POSIX class\" error for [:f\\oo:] for example, where previously PCRE\ndidn't consider this to be a POSIX class. Likewise for [:1234:].\n\nThe problem in trying to be exactly like Perl is in the handling of escapes. We\nhave to be sure that [abc[:x\\]pqr] is *not* treated as containing a POSIX\nclass, but [abc[:x\\]pqr:]] is (so that an error can be generated). The code\nbelow handles the special cases \\\\ and \\], but does not try to do any other\nescape processing. This makes it different from Perl for cases such as\n[:l\\ower:] where Perl recognizes it as the POSIX class \"lower\" but PCRE does\nnot recognize \"l\\ower\". This is a lesser evil than not diagnosing bad classes\nwhen Perl does, I think.\n\nA user pointed out that PCRE was rejecting [:a[:digit:]] whereas Perl was not.\nIt seems that the appearance of a nested POSIX class supersedes an apparent\nexternal class. For example, [:a[:digit:]b:] matches \"a\", \"b\", \":\", or\na digit. This is handled by returning FALSE if the start of a new group with\nthe same terminator is encountered, since the next closing sequence must close\nthe nested group, not the outer one.\n\nIn Perl, unescaped square brackets may also appear as part of class names. For\nexample, [:a[:abc]b:] gives unknown POSIX class \"[:abc]b:]\". However, for\n[:a[:abc]b][b:] it gives unknown POSIX class \"[:abc]b][b:]\", which does not\nseem right at all. PCRE does not allow closing square brackets in POSIX class\nnames.\n\nArguments:\n  ptr      pointer to the character after the initial [ (colon, dot, equals)\n  ptrend   pointer to the end of the pattern\n  endptr   where to return a pointer to the terminating ':', '.', or '='\n\nReturns:   TRUE or FALSE\n*/\n\nstatic BOOL\ncheck_posix_syntax(PCRE2_SPTR ptr, PCRE2_SPTR ptrend, PCRE2_SPTR *endptr)\n{\nPCRE2_UCHAR terminator;  /* Don't combine these lines; the Solaris cc */\nterminator = *ptr++;     /* compiler warns about \"non-constant\" initializer. */\n\nfor (; ptrend - ptr >= 2; ptr++)\n  {\n  if (*ptr == CHAR_BACKSLASH &&\n      (ptr[1] == CHAR_RIGHT_SQUARE_BRACKET || ptr[1] == CHAR_BACKSLASH))\n    ptr++;\n\n  else if ((*ptr == CHAR_LEFT_SQUARE_BRACKET && ptr[1] == terminator) ||\n            *ptr == CHAR_RIGHT_SQUARE_BRACKET) return FALSE;\n\n  else if (*ptr == terminator && ptr[1] == CHAR_RIGHT_SQUARE_BRACKET)\n    {\n    *endptr = ptr;\n    return TRUE;\n    }\n  }\n\nreturn FALSE;\n}\n\n\n\n/*************************************************\n*          Check POSIX class name                *\n*************************************************/\n\n/* This function is called to check the name given in a POSIX-style class entry\nsuch as [:alnum:].\n\nArguments:\n  ptr        points to the first letter\n  len        the length of the name\n\nReturns:     a value representing the name, or -1 if unknown\n*/\n\nstatic int\ncheck_posix_name(PCRE2_SPTR ptr, int len)\n{\nconst char *pn = posix_names;\nint yield = 0;\nwhile (posix_name_lengths[yield] != 0)\n  {\n  if (len == posix_name_lengths[yield] &&\n    PRIV(strncmp_c8)(ptr, pn, (unsigned int)len) == 0) return yield;\n  pn += posix_name_lengths[yield] + 1;\n  yield++;\n  }\nreturn -1;\n}\n\n\n\n/*************************************************\n*       Read a subpattern or VERB name           *\n*************************************************/\n\n/* This function is called from parse_regex() below whenever it needs to read\nthe name of a subpattern or a (*VERB) or an (*alpha_assertion). The initial\npointer must be to the preceding character. If that character is '*' we are\nreading a verb or alpha assertion name. The pointer is updated to point after\nthe name, for a VERB or alpha assertion name, or after the name's terminator\nfor a subpattern name. Returning both the offset and the name pointer is\nredundant information, but some callers use one and some the other, so it is\nsimplest just to return both. When the name is in braces, spaces and tabs are\nallowed (and ignored) at either end.\n\nArguments:\n  ptrptr      points to the character pointer variable\n  ptrend      points to the end of the input string\n  utf         true if the input is UTF-encoded\n  terminator  the terminator of a subpattern name must be this\n  offsetptr   where to put the offset from the start of the pattern\n  nameptr     where to put a pointer to the name in the input\n  namelenptr  where to put the length of the name\n  errcodeptr  where to put an error code\n  cb          pointer to the compile data block\n\nReturns:    TRUE if a name was read\n            FALSE otherwise, with error code set\n*/\n\nstatic BOOL\nread_name(PCRE2_SPTR *ptrptr, PCRE2_SPTR ptrend, BOOL utf, uint32_t terminator,\n  PCRE2_SIZE *offsetptr, PCRE2_SPTR *nameptr, uint32_t *namelenptr,\n  int *errorcodeptr, compile_block *cb)\n{\nPCRE2_SPTR ptr = *ptrptr;\nBOOL is_group = (*ptr++ != CHAR_ASTERISK);\nBOOL is_braced = terminator == CHAR_RIGHT_CURLY_BRACKET;\n\nif (is_braced)\n  while (ptr < ptrend && (*ptr == CHAR_SPACE || *ptr == CHAR_HT)) ptr++;\n\nif (ptr >= ptrend)                 /* No characters in name */\n  {\n  *errorcodeptr = is_group? ERR62: /* Subpattern name expected */\n                            ERR60; /* Verb not recognized or malformed */\n  goto FAILED;\n  }\n\n*nameptr = ptr;\n*offsetptr = (PCRE2_SIZE)(ptr - cb->start_pattern);\n\n/* If this logic were ever to change, the matching function in pcre2_substitute.c\nought to be updated to match. */\n\n/* In UTF mode, a group name may contain letters and decimal digits as defined\nby Unicode properties, and underscores, but must not start with a digit. */\n\n#ifdef SUPPORT_UNICODE\nif (utf && is_group)\n  {\n  uint32_t c, type;\n  PCRE2_SPTR p = ptr;\n\n  GETCHARINC(c, p);  /* Peek at next character */\n  type = UCD_CHARTYPE(c);\n\n  if (type == ucp_Nd)\n    {\n    ptr = p;\n    *errorcodeptr = ERR44;\n    goto FAILED;\n    }\n\n  for(;;)\n    {\n    if (type != ucp_Nd && PRIV(ucp_gentype)[type] != ucp_L &&\n        c != CHAR_UNDERSCORE) break;\n    ptr = p;  /* Accept character and peek again */\n    if (p >= ptrend) break;\n    GETCHARINC(c, p);\n    type = UCD_CHARTYPE(c);\n    }\n  }\nelse\n#else\n(void)utf;  /* Avoid compiler warning */\n#endif      /* SUPPORT_UNICODE */\n\n/* Handle non-group names and group names in non-UTF modes. A group name must\nnot start with a digit. If either of the others start with a digit it just\nwon't be recognized. */\n\n  {\n  if (is_group && IS_DIGIT(*ptr))\n    {\n    ++ptr;\n    *errorcodeptr = ERR44;\n    goto FAILED;\n    }\n\n  while (ptr < ptrend && MAX_255(*ptr) && (cb->ctypes[*ptr] & ctype_word) != 0)\n    {\n    ptr++;\n    }\n  }\n\n/* Check name length */\n\nif (ptr - *nameptr > MAX_NAME_SIZE)\n  {\n  *errorcodeptr = ERR48;\n  goto FAILED;\n  }\n*namelenptr = (uint32_t)(ptr - *nameptr);\n\n/* Subpattern names must not be empty, and their terminator is checked here.\n(What follows a verb or alpha assertion name is checked separately.) */\n\nif (is_group)\n  {\n  if (ptr == *nameptr)\n    {\n    *errorcodeptr = ERR62;   /* Subpattern name expected */\n    goto FAILED;\n    }\n  if (is_braced)\n    while (ptr < ptrend && (*ptr == CHAR_SPACE || *ptr == CHAR_HT)) ptr++;\n  if (terminator != 0)\n    {\n    if (ptr >= ptrend || *ptr != (PCRE2_UCHAR)terminator)\n      {\n      *errorcodeptr = ERR42;\n      goto FAILED;\n      }\n    ptr++;\n    }\n  }\n\n*ptrptr = ptr;\nreturn TRUE;\n\nFAILED:\n*ptrptr = ptr;\nreturn FALSE;\n}\n\n\n\n/**************************************************\n*        Parse capturing bracket argument list    *\n**************************************************/\n\n/* Reads a list of capture references. The references\ncan be numbers or names.\n\nArguments:\n  ptrptr           points to the character pointer variable\n  ptrend           points to the end of the input string\n  utf              true if the input is UTF-encoded\n  parsed_pattern   the parsed pattern pointer\n  offset           last known offset\n  errcodeptr       where to put an error code\n  cb               pointer to the compile data block\n\nReturns: updated parsed_pattern pointer on success\n         NULL otherwise\n*/\n\nstatic uint32_t *\nparse_capture_list(PCRE2_SPTR *ptrptr, PCRE2_SPTR ptrend,\n  BOOL utf, uint32_t *parsed_pattern, PCRE2_SIZE offset,\n  int *errorcodeptr, compile_block *cb)\n{\nPCRE2_SIZE next_offset;\nPCRE2_SPTR ptr = *ptrptr;\nPCRE2_SPTR name;\nPCRE2_UCHAR terminator;\nuint32_t meta, namelen;\nint i;\n\nif (ptr >= ptrend || *ptr != CHAR_LEFT_PARENTHESIS)\n  {\n  *errorcodeptr = ERR118;\n  goto FAILED;\n  }\n\nfor (;;)\n  {\n  ptr++;\n  next_offset = (PCRE2_SIZE)(ptr - cb->start_pattern);\n\n  if (ptr >= ptrend)\n    {\n    *errorcodeptr = ERR117;\n    goto FAILED;\n    }\n\n  /* Handle [+-]number cases */\n  if (read_number(&ptr, ptrend, cb->bracount, MAX_GROUP_NUMBER, ERR61,\n      &i, errorcodeptr))\n    {\n    PCRE2_ASSERT(i >= 0);\n    if (i <= 0)\n      {\n      *errorcodeptr = ERR15;\n      goto FAILED;\n      }\n    meta = META_CAPTURE_NUMBER;\n    namelen = (uint32_t)i;\n    }\n  else if (*errorcodeptr != 0) goto FAILED; /* Number too big */\n  else\n    {\n    /* Handle 'name' or <name> cases. */\n    if (*ptr == CHAR_LESS_THAN_SIGN)\n      terminator = CHAR_GREATER_THAN_SIGN;\n    else if (*ptr == CHAR_APOSTROPHE)\n      terminator = CHAR_APOSTROPHE;\n    else\n      {\n      *errorcodeptr = ERR117;\n      goto FAILED;\n      }\n\n    if (!read_name(&ptr, ptrend, utf, terminator, &next_offset,\n        &name, &namelen, errorcodeptr, cb)) goto FAILED;\n\n    meta = META_CAPTURE_NAME;\n    }\n\n  PCRE2_ASSERT(next_offset > 0);\n  if (offset == 0 || (next_offset - offset) >= 0x10000)\n    {\n    *parsed_pattern++ = META_OFFSET;\n    PUTOFFSET(next_offset, parsed_pattern);\n    offset = next_offset;\n    }\n\n  /* The offset is encoded as a relative offset, because for some\n  inputs such as \",2\" in (1,2,3), we only have space for two uint32_t\n  values, and an opcode and absolute offset may require three uint32_t\n  values. */\n  *parsed_pattern++ = meta | (uint32_t)(next_offset - offset);\n  *parsed_pattern++ = namelen;\n  offset = next_offset;\n\n  if (ptr >= ptrend) goto UNCLOSED_PARENTHESIS;\n\n  if (*ptr == CHAR_RIGHT_PARENTHESIS) break;\n\n  if (*ptr != CHAR_COMMA)\n    {\n    *errorcodeptr = ERR24;\n    goto FAILED;\n    }\n  }\n\n*ptrptr = ptr + 1;\nreturn parsed_pattern;\n\nUNCLOSED_PARENTHESIS:\n*errorcodeptr = ERR14;\n\nFAILED:\n*ptrptr = ptr;\nreturn NULL;\n}\n\n\n\n/*************************************************\n*          Manage callouts at start of cycle     *\n*************************************************/\n\n/* At the start of a new item in parse_regex() we are able to record the\ndetails of the previous item in a prior callout, and also to set up an\nautomatic callout if enabled. Avoid having two adjacent automatic callouts,\nwhich would otherwise happen for items such as \\Q that contribute nothing to\nthe parsed pattern.\n\nArguments:\n  ptr              current pattern pointer\n  pcalloutptr      points to a pointer to previous callout, or NULL\n  auto_callout     TRUE if auto_callouts are enabled\n  parsed_pattern   the parsed pattern pointer\n  cb               compile block\n\nReturns: possibly updated parsed_pattern pointer.\n*/\n\nstatic uint32_t *\nmanage_callouts(PCRE2_SPTR ptr, uint32_t **pcalloutptr, BOOL auto_callout,\n  uint32_t *parsed_pattern, compile_block *cb)\n{\nuint32_t *previous_callout = *pcalloutptr;\n\nif (previous_callout != NULL) previous_callout[2] = (uint32_t)(ptr -\n  cb->start_pattern - (PCRE2_SIZE)previous_callout[1]);\n\nif (!auto_callout) previous_callout = NULL; else\n  {\n  if (previous_callout == NULL ||\n      previous_callout != parsed_pattern - 4 ||\n      previous_callout[3] != 255)\n    {\n    previous_callout = parsed_pattern;  /* Set up new automatic callout */\n    parsed_pattern += 4;\n    previous_callout[0] = META_CALLOUT_NUMBER;\n    previous_callout[2] = 0;\n    previous_callout[3] = 255;\n    }\n  previous_callout[1] = (uint32_t)(ptr - cb->start_pattern);\n  }\n\n*pcalloutptr = previous_callout;\nreturn parsed_pattern;\n}\n\n\n\n/*************************************************\n*          Handle \\d, \\D, \\s, \\S, \\w, \\W         *\n*************************************************/\n\n/* This function is called from parse_regex() below, both for freestanding\nescapes, and those within classes, to handle those escapes that may change when\nUnicode property support is requested. Note that PCRE2_UCP will never be set\nwithout Unicode support because that is checked when pcre2_compile() is called.\n\nArguments:\n  escape          the ESC_... value\n  parsed_pattern  where to add the code\n  options         options bits\n  xoptions        extra options bits\n\nReturns:          updated value of parsed_pattern\n*/\nstatic uint32_t *\nhandle_escdsw(int escape, uint32_t *parsed_pattern, uint32_t options,\n  uint32_t xoptions)\n{\nuint32_t ascii_option = 0;\nuint32_t prop = ESC_p;\n\nswitch(escape)\n  {\n  case ESC_D:\n  prop = ESC_P;\n  PCRE2_FALLTHROUGH /* Fall through */\n  case ESC_d:\n  ascii_option = PCRE2_EXTRA_ASCII_BSD;\n  break;\n\n  case ESC_S:\n  prop = ESC_P;\n  PCRE2_FALLTHROUGH /* Fall through */\n  case ESC_s:\n  ascii_option = PCRE2_EXTRA_ASCII_BSS;\n  break;\n\n  case ESC_W:\n  prop = ESC_P;\n  PCRE2_FALLTHROUGH /* Fall through */\n  case ESC_w:\n  ascii_option = PCRE2_EXTRA_ASCII_BSW;\n  break;\n  }\n\nif ((options & PCRE2_UCP) == 0 || (xoptions & ascii_option) != 0)\n  {\n  *parsed_pattern++ = META_ESCAPE + escape;\n  }\nelse\n  {\n  *parsed_pattern++ = META_ESCAPE + prop;\n  switch(escape)\n    {\n    case ESC_d:\n    case ESC_D:\n    *parsed_pattern++ = (PT_PC << 16) | ucp_Nd;\n    break;\n\n    case ESC_s:\n    case ESC_S:\n    *parsed_pattern++ = PT_SPACE << 16;\n    break;\n\n    case ESC_w:\n    case ESC_W:\n    *parsed_pattern++ = PT_WORD << 16;\n    break;\n    }\n  }\n\nreturn parsed_pattern;\n}\n\n\n\n/*************************************************\n* Maximum size of parsed_pattern for given input *\n*************************************************/\n\n/* This function is called from parse_regex() below, to determine the amount\nof memory to allocate for parsed_pattern. It is also called to check whether\nthe amount of data written respects the amount of memory allocated.\n\nArguments:\n  ptr             points to the start of the pattern\n  ptrend          points to the end of the pattern\n  utf             TRUE in UTF mode\n  options         the options bits\n\nReturns:          the number of uint32_t units for parsed_pattern\n*/\nstatic ptrdiff_t\nmax_parsed_pattern(PCRE2_SPTR ptr, PCRE2_SPTR ptrend, BOOL utf,\n  uint32_t options)\n{\nPCRE2_SIZE big32count = 0;\nptrdiff_t parsed_size_needed;\n\n/* When PCRE2_AUTO_CALLOUT is not set, in all but one case the number of\nunsigned 32-bit ints written out to the parsed pattern is bounded by the length\nof the pattern. The exceptional case is when running in 32-bit, non-UTF mode,\nwhen literal characters greater than META_END (0x80000000) have to be coded as\ntwo units. In this case, therefore, we scan the pattern to check for such\nvalues. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\nif (!utf)\n  {\n  PCRE2_SPTR p;\n  for (p = ptr; p < ptrend; p++) if (*p >= META_END) big32count++;\n  }\n#else\n(void)utf;  /* Avoid compiler warning */\n#endif\n\nparsed_size_needed = (ptrend - ptr) + big32count;\n\n/* When PCRE2_AUTO_CALLOUT is set we have to assume a numerical callout (4\nelements) for each character. This is overkill, but memory is plentiful these\ndays. */\n\nif ((options & PCRE2_AUTO_CALLOUT) != 0)\n  parsed_size_needed += (ptrend - ptr) * 4;\n\nreturn parsed_size_needed;\n}\n\n\n\n/*************************************************\n*      Parse regex and identify named groups     *\n*************************************************/\n\n/* This function is called first of all. It scans the pattern and does two\nthings: (1) It identifies capturing groups and makes a table of named capturing\ngroups so that information about them is fully available to both the compiling\nscans. (2) It writes a parsed version of the pattern with comments omitted and\nescapes processed into the parsed_pattern vector.\n\nArguments:\n  ptr             points to the start of the pattern\n  options         compiling dynamic options (may change during the scan)\n  has_lookbehind  points to a boolean, set TRUE if a lookbehind is found\n  cb              pointer to the compile data block\n\nReturns:   zero on success or a non-zero error code, with the\n             error offset placed in the cb field\n*/\n\n/* A structure and some flags for dealing with nested groups. */\n\ntypedef struct nest_save {\n  uint16_t  nest_depth;\n  uint16_t  reset_group;\n  uint16_t  max_group;\n  uint16_t  flags;\n  uint32_t  options;\n  uint32_t  xoptions;\n} nest_save;\n\n#define NSF_RESET          0x0001u\n#define NSF_CONDASSERT     0x0002u\n#define NSF_ATOMICSR       0x0004u\n\n/* Options that are changeable within the pattern must be tracked during\nparsing. Some (e.g. PCRE2_EXTENDED) are implemented entirely during parsing,\nbut all must be tracked so that META_OPTIONS items set the correct values for\nthe main compiling phase. */\n\n#define PARSE_TRACKED_OPTIONS (PCRE2_CASELESS|PCRE2_DOTALL|PCRE2_DUPNAMES| \\\n  PCRE2_EXTENDED|PCRE2_EXTENDED_MORE|PCRE2_MULTILINE|PCRE2_NO_AUTO_CAPTURE| \\\n  PCRE2_UNGREEDY)\n\n#define PARSE_TRACKED_EXTRA_OPTIONS (PCRE2_EXTRA_CASELESS_RESTRICT| \\\n  PCRE2_EXTRA_ASCII_BSD|PCRE2_EXTRA_ASCII_BSS|PCRE2_EXTRA_ASCII_BSW| \\\n  PCRE2_EXTRA_ASCII_DIGIT|PCRE2_EXTRA_ASCII_POSIX)\n\n/* States used for analyzing ranges in character classes. The two OK values\nmust be last. */\n\nenum {\n  RANGE_NO, /* State after '[' (initial), or '[a-z'; hyphen is literal */\n  RANGE_STARTED, /* State after '[1-'; last-emitted code is META_RANGE_XYZ */\n  RANGE_FORBID_NO, /* State after '[\\d'; '-]' is allowed but not '-1]' */\n  RANGE_FORBID_STARTED, /* State after '[\\d-'*/\n  RANGE_OK_ESCAPED, /* State after '[\\1'; hyphen may be a range */\n  RANGE_OK_LITERAL /* State after '[1'; hyphen may be a range */\n};\n\n/* States used for analyzing operators and operands in extended character\nclasses. */\n\nenum {\n  CLASS_OP_EMPTY, /* At start of an expression; empty previous contents */\n  CLASS_OP_OPERAND, /* Have preceding operand; after \"z\" a \"--\" can follow */\n  CLASS_OP_OPERATOR /* Have preceding operator; after \"--\" operand must follow */\n};\n\n/* States used for determining the parse mode in character classes. The two\nPERL_EXT values must be last. */\n\nenum {\n  CLASS_MODE_NORMAL, /* Ordinary PCRE2 '[...]' class. */\n  CLASS_MODE_ALT_EXT, /* UTS#18-style extended '[...]' class. */\n  CLASS_MODE_PERL_EXT, /* Perl extended '(?[...])' class. */\n  CLASS_MODE_PERL_EXT_LEAF /* Leaf within extended '(?[ [...] ])' class. */\n};\n\n/* Only in 32-bit mode can there be literals > META_END. A macro encapsulates\nthe storing of literal values in the main parsed pattern, where they can always\nbe quantified. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\n#define PARSED_LITERAL(c, p) \\\n  { \\\n  if (c >= META_END) *p++ = META_BIGVALUE; \\\n  *p++ = c; \\\n  okquantifier = TRUE; \\\n  }\n#else\n#define PARSED_LITERAL(c, p) *p++ = c; okquantifier = TRUE;\n#endif\n\n/* Here's the actual function. */\n\nstatic int parse_regex(PCRE2_SPTR ptr, uint32_t options, uint32_t xoptions,\n  BOOL *has_lookbehind, compile_block *cb)\n{\nuint32_t c;\nuint32_t delimiter;\nuint32_t namelen;\nuint32_t class_range_state;\nuint32_t class_op_state;\nuint32_t class_mode_state;\nuint32_t *class_start;\nuint32_t *verblengthptr = NULL;     /* Value avoids compiler warning */\nuint32_t *verbstartptr = NULL;\nuint32_t *previous_callout = NULL;\nuint32_t *parsed_pattern = cb->parsed_pattern;\nuint32_t *parsed_pattern_end = cb->parsed_pattern_end;\nuint32_t *this_parsed_item = NULL;\nuint32_t *prev_parsed_item = NULL;\nuint32_t meta_quantifier = 0;\nuint32_t add_after_mark = 0;\nuint16_t nest_depth = 0;\nint16_t class_depth_m1 = -1; /* The m1 means minus 1. */\nint16_t class_maxdepth_m1 = -1;\nuint16_t hash;\nint after_manual_callout = 0;\nint expect_cond_assert = 0;\nint errorcode = 0;\nint escape;\nint i;\nBOOL inescq = FALSE;\nBOOL inverbname = FALSE;\nBOOL utf = (options & PCRE2_UTF) != 0;\nBOOL auto_callout = (options & PCRE2_AUTO_CALLOUT) != 0;\nBOOL is_dupname;\nBOOL negate_class;\nBOOL okquantifier = FALSE;\nPCRE2_SPTR thisptr;\nPCRE2_SPTR name;\nPCRE2_SPTR ptrend = cb->end_pattern;\nPCRE2_SPTR verbnamestart = NULL;    /* Value avoids compiler warning */\nPCRE2_SPTR class_range_forbid_ptr = NULL;\nnamed_group *ng;\nnest_save *top_nest, *end_nests;\n#ifdef PCRE2_DEBUG\nuint32_t *parsed_pattern_check;\nptrdiff_t parsed_pattern_extra = 0;\nptrdiff_t parsed_pattern_extra_check = 0;\nPCRE2_SPTR ptr_check;\n#endif\n\nPCRE2_ASSERT(parsed_pattern != NULL);\n\n/* Insert leading items for word and line matching (features provided for the\nbenefit of pcre2grep). */\n\nif ((xoptions & PCRE2_EXTRA_MATCH_LINE) != 0)\n  {\n  *parsed_pattern++ = META_CIRCUMFLEX;\n  *parsed_pattern++ = META_NOCAPTURE;\n  }\nelse if ((xoptions & PCRE2_EXTRA_MATCH_WORD) != 0)\n  {\n  *parsed_pattern++ = META_ESCAPE + ESC_b;\n  *parsed_pattern++ = META_NOCAPTURE;\n  }\n\n#ifdef PCRE2_DEBUG\nparsed_pattern_check = parsed_pattern;\nptr_check = ptr;\n#endif\n\n/* If the pattern is actually a literal string, process it separately to avoid\ncluttering up the main loop. */\n\nif ((options & PCRE2_LITERAL) != 0)\n  {\n  while (ptr < ptrend)\n    {\n    /* LCOV_EXCL_START */\n    if (parsed_pattern >= parsed_pattern_end)\n      {\n      PCRE2_DEBUG_UNREACHABLE();\n      errorcode = ERR63;  /* Internal error (parsed pattern overflow) */\n      goto FAILED;\n      }\n    /* LCOV_EXCL_STOP */\n\n    thisptr = ptr;\n    GETCHARINCTEST(c, ptr);\n    if (auto_callout)\n      parsed_pattern = manage_callouts(thisptr, &previous_callout,\n        auto_callout, parsed_pattern, cb);\n    PARSED_LITERAL(c, parsed_pattern);\n    }\n  goto PARSED_END;\n  }\n\n/* Process a real regex which may contain meta-characters. */\n\ntop_nest = NULL;\nend_nests = (nest_save *)(cb->start_workspace + cb->workspace_size);\n\n/* The size of the nest_save structure might not be a factor of the size of the\nworkspace. Therefore we must round down end_nests so as to correctly avoid\ncreating a nest_save that spans the end of the workspace. */\n\nend_nests = (nest_save *)((char *)end_nests -\n  ((cb->workspace_size * sizeof(PCRE2_UCHAR)) % sizeof(nest_save)));\n\n/* PCRE2_EXTENDED_MORE implies PCRE2_EXTENDED */\n\nif ((options & PCRE2_EXTENDED_MORE) != 0) options |= PCRE2_EXTENDED;\n\n/* Now scan the pattern */\n\nwhile (ptr < ptrend)\n  {\n  int prev_expect_cond_assert;\n  uint32_t min_repeat = 0, max_repeat = 0;\n  uint32_t set, unset, *optset;\n  uint32_t xset, xunset, *xoptset;\n  uint32_t terminator;\n  uint32_t prev_meta_quantifier;\n  BOOL prev_okquantifier;\n  PCRE2_SPTR tempptr;\n  PCRE2_SIZE offset;\n\n  if (nest_depth > cb->cx->parens_nest_limit)\n    {\n    errorcode = ERR19;\n    goto FAILED;        /* Parentheses too deeply nested */\n    }\n\n  /* Check that we haven't emitted too much into parsed_pattern. We allocate\n  a suitably-sized buffer upfront, then do unchecked writes to it. If we only\n  write a little bit too much, everything will appear to be OK, because the\n  upfront size is an overestimate... but a malicious pattern could end up\n  forcing a write past the buffer end. We must catch this during\n  development. */\n\n#ifdef PCRE2_DEBUG\n  /* Strong post-write check. Won't help in release builds - at this point\n  the write has already occurred so it's too late. However, should stop us\n  committing unsafe code. */\n  PCRE2_ASSERT((parsed_pattern - parsed_pattern_check) +\n               (parsed_pattern_extra - parsed_pattern_extra_check) <=\n                 max_parsed_pattern(ptr_check, ptr, utf, options));\n  parsed_pattern_check = parsed_pattern;\n  parsed_pattern_extra_check = parsed_pattern_extra;\n  ptr_check = ptr;\n#endif\n\n  /* LCOV_EXCL_START */\n  if (parsed_pattern >= parsed_pattern_end)\n    {\n    /* Weak pre-write check; only ensures parsed_pattern[0] is writeable\n    (but the code below can write many chars). Better than nothing. */\n    PCRE2_DEBUG_UNREACHABLE();\n    errorcode = ERR63;  /* Internal error (parsed pattern overflow) */\n    goto FAILED;\n    }\n  /* LCOV_EXCL_STOP */\n\n  /* If the last time round this loop something was added, parsed_pattern will\n  no longer be equal to this_parsed_item. Remember where the previous item\n  started and reset for the next item. Note that sometimes round the loop,\n  nothing gets added (e.g. for ignored white space). */\n\n  if (this_parsed_item != parsed_pattern)\n    {\n    prev_parsed_item = this_parsed_item;\n    this_parsed_item = parsed_pattern;\n    }\n\n  /* Get next input character, save its position for callout handling. */\n\n  thisptr = ptr;\n  GETCHARINCTEST(c, ptr);\n\n  /* Copy quoted literals until \\E, allowing for the possibility of automatic\n  callouts, except when processing a (*VERB) \"name\".  */\n\n  if (inescq)\n    {\n    if (c == CHAR_BACKSLASH && ptr < ptrend && *ptr == CHAR_E)\n      {\n      inescq = FALSE;\n      ptr++;   /* Skip E */\n      }\n    else\n      {\n      if (inverbname)\n        {                          /* Don't use PARSED_LITERAL() because it */\n#if PCRE2_CODE_UNIT_WIDTH == 32    /* sets okquantifier. */\n        if (c >= META_END) *parsed_pattern++ = META_BIGVALUE;\n#endif\n        *parsed_pattern++ = c;\n        }\n      else\n        {\n        if (after_manual_callout-- <= 0)\n          parsed_pattern = manage_callouts(thisptr, &previous_callout,\n            auto_callout, parsed_pattern, cb);\n        PARSED_LITERAL(c, parsed_pattern);\n        }\n      meta_quantifier = 0;\n      }\n    continue;  /* Next character */\n    }\n\n  /* If we are processing the \"name\" part of a (*VERB:NAME) item, all\n  characters up to the closing parenthesis are literals except when\n  PCRE2_ALT_VERBNAMES is set. That causes backslash interpretation, but only \\Q\n  and \\E and escaped characters are allowed (no character types such as \\d). If\n  PCRE2_EXTENDED is also set, we must ignore white space and # comments. Do\n  this by not entering the special (*VERB:NAME) processing - they are then\n  picked up below. Note that c is a character, not a code unit, so we must not\n  use MAX_255 to test its size because MAX_255 tests code units and is assumed\n  TRUE in 8-bit mode. */\n\n  if (inverbname &&\n       (\n        /* EITHER: not both options set */\n        ((options & (PCRE2_EXTENDED | PCRE2_ALT_VERBNAMES)) !=\n                    (PCRE2_EXTENDED | PCRE2_ALT_VERBNAMES)) ||\n#ifdef SUPPORT_UNICODE\n        /* OR: character > 255 AND not Unicode Pattern White Space */\n        (c > 255 && (c|1) != 0x200f && (c|1) != 0x2029) ||\n#endif\n        /* OR: not a # comment or isspace() white space */\n        (c < 256 && c != CHAR_NUMBER_SIGN && (cb->ctypes[c] & ctype_space) == 0\n#ifdef SUPPORT_UNICODE\n        /* and not CHAR_NEL when Unicode is supported */\n          && c != CHAR_NEL\n#endif\n       )))\n    {\n    PCRE2_SIZE verbnamelength;\n\n    switch(c)\n      {\n      default:                     /* Don't use PARSED_LITERAL() because it */\n#if PCRE2_CODE_UNIT_WIDTH == 32    /* sets okquantifier. */\n      if (c >= META_END) *parsed_pattern++ = META_BIGVALUE;\n#endif\n      *parsed_pattern++ = c;\n      break;\n\n      case CHAR_RIGHT_PARENTHESIS:\n      inverbname = FALSE;\n      /* This is the length in characters */\n      verbnamelength = (PCRE2_SIZE)(parsed_pattern - verblengthptr - 1);\n      /* But the limit on the length is in code units */\n      if (ptr - verbnamestart - 1 > (int)MAX_MARK)\n        {\n        ptr--;\n        errorcode = ERR76;\n        goto FAILED;\n        }\n      *verblengthptr = (uint32_t)verbnamelength;\n\n      /* If this name was on a verb such as (*ACCEPT) which does not continue,\n      a (*MARK) was generated for the name. We now add the original verb as the\n      next item. */\n\n      if (add_after_mark != 0)\n        {\n        *parsed_pattern++ = add_after_mark;\n        add_after_mark = 0;\n        }\n      break;\n\n      case CHAR_BACKSLASH:\n      if ((options & PCRE2_ALT_VERBNAMES) != 0)\n        {\n        escape = PRIV(check_escape)(&ptr, ptrend, &c, &errorcode, options,\n          xoptions, cb->bracount, FALSE, cb);\n        if (errorcode != 0) goto FAILED;\n        }\n      else escape = 0;   /* Treat all as literal */\n\n      switch(escape)\n        {\n        case 0:                    /* Don't use PARSED_LITERAL() because it */\n#if PCRE2_CODE_UNIT_WIDTH == 32    /* sets okquantifier. */\n        if (c >= META_END) *parsed_pattern++ = META_BIGVALUE;\n#endif\n        *parsed_pattern++ = c;\n        break;\n\n        case ESC_ub:\n        *parsed_pattern++ = CHAR_u;\n        PARSED_LITERAL(CHAR_LEFT_CURLY_BRACKET, parsed_pattern);\n        break;\n\n        case ESC_Q:\n        inescq = TRUE;\n        break;\n\n        case ESC_E:           /* Ignore */\n        break;\n\n        default:\n        errorcode = ERR40;    /* Invalid in verb name */\n        goto FAILED;\n        }\n      }\n    continue;   /* Next character in pattern */\n    }\n\n  /* Not a verb name character. At this point we must process everything that\n  must not change the quantification state. This is mainly comments, but we\n  handle \\Q and \\E here as well, so that an item such as A\\Q\\E+ is treated as\n  A+, as in Perl. An isolated \\E is ignored. */\n\n  if (c == CHAR_BACKSLASH && ptr < ptrend)\n    {\n    if (*ptr == CHAR_Q || *ptr == CHAR_E)\n      {\n      /* A literal inside a \\Q...\\E is not allowed if we are expecting a\n      conditional assertion, but an empty \\Q\\E sequence is OK. */\n      if (expect_cond_assert > 0 && *ptr == CHAR_Q &&\n          !(ptrend - ptr >= 3 && ptr[1] == CHAR_BACKSLASH && ptr[2] == CHAR_E))\n        {\n        ptr--;\n        errorcode = ERR28;\n        goto FAILED;\n        }\n      inescq = *ptr == CHAR_Q;\n      ptr++;\n      continue;\n      }\n    }\n\n  /* Skip over whitespace and # comments in extended mode. Note that c is a\n  character, not a code unit, so we must not use MAX_255 to test its size\n  because MAX_255 tests code units and is assumed TRUE in 8-bit mode. The\n  whitespace characters are those designated as \"Pattern White Space\" by\n  Unicode, which are the isspace() characters plus CHAR_NEL (newline), which is\n  U+0085 in Unicode, plus U+200E, U+200F, U+2028, and U+2029. These are a\n  subset of space characters that match \\h and \\v. */\n\n  if ((options & PCRE2_EXTENDED) != 0)\n    {\n    if (c < 256 && (cb->ctypes[c] & ctype_space) != 0) continue;\n#ifdef SUPPORT_UNICODE\n    if (c == CHAR_NEL || (c|1) == 0x200f || (c|1) == 0x2029) continue;\n#endif\n    if (c == CHAR_NUMBER_SIGN)\n      {\n      while (ptr < ptrend)\n        {\n        if (IS_NEWLINE(ptr))      /* For non-fixed-length newline cases, */\n          {                       /* IS_NEWLINE sets cb->nllen. */\n          ptr += cb->nllen;\n          break;\n          }\n        ptr++;\n#ifdef SUPPORT_UNICODE\n        if (utf) FORWARDCHARTEST(ptr, ptrend);\n#endif\n        }\n      continue;  /* Next character in pattern */\n      }\n    }\n\n  /* Skip over bracketed comments */\n\n  if (c == CHAR_LEFT_PARENTHESIS && ptrend - ptr >= 2 &&\n      ptr[0] == CHAR_QUESTION_MARK && ptr[1] == CHAR_NUMBER_SIGN)\n    {\n    while (++ptr < ptrend && *ptr != CHAR_RIGHT_PARENTHESIS);\n    if (ptr >= ptrend)\n      {\n      errorcode = ERR18;  /* A special error for missing ) in a comment */\n      goto FAILED;        /* to make it easier to debug. */\n      }\n    ptr++;\n    continue;  /* Next character in pattern */\n    }\n\n  /* If the next item is not a quantifier, fill in length of any previous\n  callout and create an auto callout if required. */\n\n  if (c != CHAR_ASTERISK && c != CHAR_PLUS && c != CHAR_QUESTION_MARK &&\n       (c != CHAR_LEFT_CURLY_BRACKET ||\n         (tempptr = ptr,\n         !read_repeat_counts(&tempptr, ptrend, NULL, NULL, &errorcode))))\n    {\n    if (after_manual_callout-- <= 0)\n      {\n      parsed_pattern = manage_callouts(thisptr, &previous_callout, auto_callout,\n        parsed_pattern, cb);\n      this_parsed_item = parsed_pattern;  /* New start for current item */\n      }\n    }\n\n  /* If expect_cond_assert is 2, we have just passed (?( and are expecting an\n  assertion, possibly preceded by a callout. If the value is 1, we have just\n  had the callout and expect an assertion. There must be at least 3 more\n  characters in all cases. When expect_cond_assert is 2, we know that the\n  current character is an opening parenthesis, as otherwise we wouldn't be\n  here. However, when it is 1, we need to check, and it's easiest just to check\n  always. Note that expect_cond_assert may be negative, since all callouts just\n  decrement it. */\n\n  if (expect_cond_assert > 0)\n    {\n    BOOL ok = c == CHAR_LEFT_PARENTHESIS && ptrend - ptr >= 3 &&\n              (ptr[0] == CHAR_QUESTION_MARK || ptr[0] == CHAR_ASTERISK);\n    if (ok)\n      {\n      if (ptr[0] == CHAR_ASTERISK)  /* New alpha assertion format, possibly */\n        {\n        ok = MAX_255(ptr[1]) && (cb->ctypes[ptr[1]] & ctype_lcletter) != 0;\n        }\n      else switch(ptr[1])  /* Traditional symbolic format */\n        {\n        case CHAR_C:\n        ok = expect_cond_assert == 2;\n        break;\n\n        case CHAR_EQUALS_SIGN:\n        case CHAR_EXCLAMATION_MARK:\n        break;\n\n        case CHAR_LESS_THAN_SIGN:\n        ok = ptr[2] == CHAR_EQUALS_SIGN || ptr[2] == CHAR_EXCLAMATION_MARK;\n        break;\n\n        default:\n        ok = FALSE;\n        }\n      }\n\n    if (!ok)\n      {\n      errorcode = ERR28;\n      if (expect_cond_assert == 2) goto FAILED;\n      goto FAILED_BACK;\n      }\n    }\n\n  /* Remember whether we are expecting a conditional assertion, and set the\n  default for this item. */\n\n  prev_expect_cond_assert = expect_cond_assert;\n  expect_cond_assert = 0;\n\n  /* Remember quantification status for the previous significant item, then set\n  default for this item. */\n\n  prev_okquantifier = okquantifier;\n  prev_meta_quantifier = meta_quantifier;\n  okquantifier = FALSE;\n  meta_quantifier = 0;\n\n  /* If the previous significant item was a quantifier, adjust the parsed code\n  if there is a following modifier. The base meta value is always followed by\n  the PLUS and QUERY values, in that order. We do this here rather than after\n  reading a quantifier so that intervening comments and /x whitespace can be\n  ignored without having to replicate code. */\n\n  if (prev_meta_quantifier != 0 && (c == CHAR_QUESTION_MARK || c == CHAR_PLUS))\n    {\n    parsed_pattern[(prev_meta_quantifier == META_MINMAX)? -3 : -1] =\n      prev_meta_quantifier + ((c == CHAR_QUESTION_MARK)?\n        0x00020000u : 0x00010000u);\n    continue;  /* Next character in pattern */\n    }\n\n  /* Process the next item in the main part of a pattern. */\n\n  switch(c)\n    {\n    default:              /* Non-special character */\n    PARSED_LITERAL(c, parsed_pattern);\n    break;\n\n\n    /* ---- Escape sequence ---- */\n\n    case CHAR_BACKSLASH:\n    tempptr = ptr;\n    escape = PRIV(check_escape)(&ptr, ptrend, &c, &errorcode, options,\n      xoptions, cb->bracount, FALSE, cb);\n    if (errorcode != 0)\n      {\n      ESCAPE_FAILED:\n      if ((xoptions & PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL) == 0)\n        goto FAILED;\n      ptr = tempptr;\n      if (ptr >= ptrend) c = CHAR_BACKSLASH; else\n        {\n        GETCHARINCTEST(c, ptr);   /* Get character value, increment pointer */\n        }\n      escape = 0;                 /* Treat as literal character */\n      }\n\n    /* The escape was a data escape or literal character. */\n\n    if (escape == 0)\n      {\n      PARSED_LITERAL(c, parsed_pattern);\n      }\n\n    /* The escape was a back (or forward) reference. We keep the offset in\n    order to give a more useful diagnostic for a bad forward reference. For\n    references to groups numbered less than 10 we can't use more than two items\n    in parsed_pattern because they may be just two characters in the input (and\n    in a 64-bit world an offset may need two elements). So for them, the offset\n    of the first occurrent is held in a special vector. */\n\n    else if (escape < 0)\n      {\n      offset = (PCRE2_SIZE)(ptr - cb->start_pattern);\n      escape = -escape - 1;\n      *parsed_pattern++ = META_BACKREF | (uint32_t)escape;\n      if (escape < 10)\n        {\n        if (cb->small_ref_offset[escape] == PCRE2_UNSET)\n          cb->small_ref_offset[escape] = offset;\n        }\n      else\n        {\n        PUTOFFSET(offset, parsed_pattern);\n        }\n      okquantifier = TRUE;\n      }\n\n    /* The escape was a character class such as \\d etc. or other special\n    escape indicator such as \\A or \\X. Most of them generate just a single\n    parsed item, but \\P and \\p are followed by a 16-bit type and a 16-bit\n    value. They are supported only when Unicode is available. The type and\n    value are packed into a single 32-bit value so that the whole sequences\n    uses only two elements in the parsed_vector. This is because the same\n    coding is used if \\d (for example) is turned into \\p{Nd} when PCRE2_UCP is\n    set.\n\n    There are also some cases where the escape sequence is followed by a name:\n    \\k{name}, \\k<name>, and \\k'name' are backreferences by name, and \\g<name>\n    and \\g'name' are subroutine calls by name; \\g{name} is a synonym for\n    \\k{name}. Note that \\g<number> and \\g'number' are handled by check_escape()\n    and returned as a negative value (handled above). A name is coded as an\n    offset into the pattern and a length. */\n\n    else switch (escape)\n      {\n      case ESC_C:\n#ifdef NEVER_BACKSLASH_C\n      errorcode = ERR85;\n      goto ESCAPE_FAILED;\n#else\n      if ((options & PCRE2_NEVER_BACKSLASH_C) != 0)\n        {\n        errorcode = ERR83;\n        goto ESCAPE_FAILED;\n        }\n#endif\n      okquantifier = TRUE;\n      *parsed_pattern++ = META_ESCAPE + escape;\n      break;\n\n      /* This is a special return that happens only in EXTRA_ALT_BSUX mode,\n      when \\u{ is not followed by hex digits and }. It requests two literal\n      characters, u and { and we need this, as otherwise \\u{ 12} (for example)\n      would be treated as u{12} now that spaces are allowed in quantifiers. */\n\n      case ESC_ub:\n      *parsed_pattern++ = CHAR_u;\n      PARSED_LITERAL(CHAR_LEFT_CURLY_BRACKET, parsed_pattern);\n      break;\n\n      case ESC_X:\n#ifndef SUPPORT_UNICODE\n      errorcode = ERR45;   /* Supported only with Unicode support */\n      goto ESCAPE_FAILED;\n#endif\n      case ESC_H:\n      case ESC_h:\n      case ESC_N:\n      case ESC_R:\n      case ESC_V:\n      case ESC_v:\n      okquantifier = TRUE;\n      *parsed_pattern++ = META_ESCAPE + escape;\n      break;\n\n      default:  /* \\A, \\B, \\b, \\G, \\K, \\Z, \\z cannot be quantified. */\n      *parsed_pattern++ = META_ESCAPE + escape;\n      break;\n\n      /* Escapes that may change in UCP mode. */\n\n      case ESC_d:\n      case ESC_D:\n      case ESC_s:\n      case ESC_S:\n      case ESC_w:\n      case ESC_W:\n      okquantifier = TRUE;\n      parsed_pattern = handle_escdsw(escape, parsed_pattern, options,\n        xoptions);\n      break;\n\n      /* Unicode property matching */\n\n      case ESC_P:\n      case ESC_p:\n#ifdef SUPPORT_UNICODE\n        {\n        BOOL negated;\n        uint16_t ptype = 0, pdata = 0;\n        if (!get_ucp(&ptr, utf, &negated, &ptype, &pdata, &errorcode, cb))\n          goto ESCAPE_FAILED;\n        if (negated) escape = (escape == ESC_P)? ESC_p : ESC_P;\n        *parsed_pattern++ = META_ESCAPE + escape;\n        *parsed_pattern++ = (ptype << 16) | pdata;\n        okquantifier = TRUE;\n        }\n#else\n      errorcode = ERR45;\n      goto ESCAPE_FAILED;\n#endif\n      break;  /* End \\P and \\p */\n\n      /* When \\g is used with quotes or angle brackets as delimiters, it is a\n      numerical or named subroutine call, and control comes here. When used\n      with brace delimiters it is a numerical back reference and does not come\n      here because check_escape() returns it directly as a reference. \\k is\n      always a named back reference. */\n\n      case ESC_g:\n      case ESC_k:\n      if (ptr >= ptrend || (*ptr != CHAR_LEFT_CURLY_BRACKET &&\n          *ptr != CHAR_LESS_THAN_SIGN && *ptr != CHAR_APOSTROPHE))\n        {\n        errorcode = (escape == ESC_g)? ERR57 : ERR69;\n        goto ESCAPE_FAILED;\n        }\n      terminator = (*ptr == CHAR_LESS_THAN_SIGN)?\n        CHAR_GREATER_THAN_SIGN : (*ptr == CHAR_APOSTROPHE)?\n        CHAR_APOSTROPHE : CHAR_RIGHT_CURLY_BRACKET;\n\n      /* For a non-braced \\g, check for a numerical recursion. */\n\n      if (escape == ESC_g && terminator != CHAR_RIGHT_CURLY_BRACKET)\n        {\n        PCRE2_SPTR p = ptr + 1;\n\n        if (read_number(&p, ptrend, cb->bracount, MAX_GROUP_NUMBER, ERR61, &i,\n            &errorcode))\n          {\n          if (p >= ptrend || *p != terminator)\n            {\n            ptr = p;\n            errorcode = ERR119;  /* Missing terminator for number */\n            goto ESCAPE_FAILED;\n            }\n          ptr = p + 1;\n          goto SET_RECURSION;\n          }\n        if (errorcode != 0) goto ESCAPE_FAILED;\n        }\n\n      /* Not a numerical recursion. Perl allows spaces and tabs after { and\n      before } but not for other delimiters. */\n\n      if (!read_name(&ptr, ptrend, utf, terminator, &offset, &name, &namelen,\n          &errorcode, cb)) goto ESCAPE_FAILED;\n\n      /* \\k and \\g when used with braces are back references, whereas \\g used\n      with quotes or angle brackets is a recursion */\n\n      *parsed_pattern++ =\n        (escape == ESC_k || terminator == CHAR_RIGHT_CURLY_BRACKET)?\n          META_BACKREF_BYNAME : META_RECURSE_BYNAME;\n      *parsed_pattern++ = namelen;\n\n      PUTOFFSET(offset, parsed_pattern);\n      okquantifier = TRUE;\n      break;  /* End special escape processing */\n      }\n    break;    /* End escape sequence processing */\n\n\n    /* ---- Single-character special items ---- */\n\n    case CHAR_CIRCUMFLEX_ACCENT:\n    *parsed_pattern++ = META_CIRCUMFLEX;\n    break;\n\n    case CHAR_DOLLAR_SIGN:\n    *parsed_pattern++ = META_DOLLAR;\n    break;\n\n    case CHAR_DOT:\n    *parsed_pattern++ = META_DOT;\n    okquantifier = TRUE;\n    break;\n\n\n    /* ---- Single-character quantifiers ---- */\n\n    case CHAR_ASTERISK:\n    meta_quantifier = META_ASTERISK;\n    goto CHECK_QUANTIFIER;\n\n    case CHAR_PLUS:\n    meta_quantifier = META_PLUS;\n    goto CHECK_QUANTIFIER;\n\n    case CHAR_QUESTION_MARK:\n    meta_quantifier = META_QUERY;\n    goto CHECK_QUANTIFIER;\n\n\n    /* ---- Potential {n,m} quantifier ---- */\n\n    case CHAR_LEFT_CURLY_BRACKET:\n    if (!read_repeat_counts(&ptr, ptrend, &min_repeat, &max_repeat,\n        &errorcode))\n      {\n      if (errorcode != 0) goto FAILED;     /* Error in quantifier. */\n      PARSED_LITERAL(c, parsed_pattern);   /* Not a quantifier */\n      break;                               /* No more quantifier processing */\n      }\n    meta_quantifier = META_MINMAX;\n    /* Fall through */\n\n\n    /* ---- Quantifier post-processing ---- */\n\n    /* Check that a quantifier is allowed after the previous item. This\n    guarantees that there is a previous item. */\n\n    CHECK_QUANTIFIER:\n    if (!prev_okquantifier)\n      {\n      errorcode = ERR9;\n      goto FAILED;\n      }\n\n    /* Most (*VERB)s are not allowed to be quantified, but an ungreedy\n    quantifier can be useful for (*ACCEPT) - meaning \"succeed on backtrack\", a\n    sort of negated (*COMMIT). We therefore allow (*ACCEPT) to be quantified by\n    wrapping it in non-capturing brackets, but we have to allow for a preceding\n    (*MARK) for when (*ACCEPT) has an argument. */\n\n    if (*prev_parsed_item == META_ACCEPT)\n      {\n      uint32_t *p;\n      for (p = parsed_pattern - 1; p >= verbstartptr; p--) p[1] = p[0];\n      *verbstartptr = META_NOCAPTURE;\n      parsed_pattern[1] = META_KET;\n      parsed_pattern += 2;\n\n#ifdef PCRE2_DEBUG\n      PCRE2_ASSERT(parsed_pattern_extra >= 2);\n      parsed_pattern_extra -= 2;\n#endif\n      }\n\n    /* Now we can put the quantifier into the parsed pattern vector. At this\n    stage, we have only the basic quantifier. The check for a following + or ?\n    modifier happens at the top of the loop, after any intervening comments\n    have been removed. */\n\n    *parsed_pattern++ = meta_quantifier;\n    if (c == CHAR_LEFT_CURLY_BRACKET)\n      {\n      *parsed_pattern++ = min_repeat;\n      *parsed_pattern++ = max_repeat;\n      }\n    break;\n\n\n    /* ---- Character class ---- */\n\n    case CHAR_LEFT_SQUARE_BRACKET:\n\n    /* In another (POSIX) regex library, the ugly syntax [[:<:]] and [[:>:]] is\n    used for \"start of word\" and \"end of word\". As these are otherwise illegal\n    sequences, we don't break anything by recognizing them. They are replaced\n    by \\b(?=\\w) and \\b(?<=\\w) respectively. Sequences like [a[:<:]] are\n    erroneous and are handled by the normal code below. */\n\n    if (ptrend - ptr >= 6 &&\n         (PRIV(strncmp_c8)(ptr, STRING_WEIRD_STARTWORD, 6) == 0 ||\n          PRIV(strncmp_c8)(ptr, STRING_WEIRD_ENDWORD, 6) == 0))\n      {\n      *parsed_pattern++ = META_ESCAPE + ESC_b;\n\n      if (ptr[2] == CHAR_LESS_THAN_SIGN)\n        {\n        *parsed_pattern++ = META_LOOKAHEAD;\n        }\n      else\n        {\n        *parsed_pattern++ = META_LOOKBEHIND;\n        *has_lookbehind = TRUE;\n\n        /* The offset is used only for the \"non-fixed length\" error; this won't\n        occur here, so just store zero. */\n\n        PUTOFFSET((PCRE2_SIZE)0, parsed_pattern);\n        }\n\n      if ((options & PCRE2_UCP) == 0)\n        *parsed_pattern++ = META_ESCAPE + ESC_w;\n      else\n        {\n        *parsed_pattern++ = META_ESCAPE + ESC_p;\n        *parsed_pattern++ = PT_WORD << 16;\n        }\n      *parsed_pattern++ = META_KET;\n      ptr += 6;\n      okquantifier = TRUE;\n      break;\n      }\n\n    /* PCRE supports POSIX class stuff inside a class. Perl gives an error if\n    they are encountered at the top level, so we'll do that too. */\n\n    if (ptr < ptrend && (*ptr == CHAR_COLON || *ptr == CHAR_DOT ||\n         *ptr == CHAR_EQUALS_SIGN) &&\n        check_posix_syntax(ptr, ptrend, &tempptr))\n      {\n      errorcode = (*ptr-- == CHAR_COLON)? ERR12 : ERR13;\n      ptr = tempptr + 2;\n      goto FAILED;\n      }\n\n    class_mode_state = ((options & PCRE2_ALT_EXTENDED_CLASS) != 0)?\n        CLASS_MODE_ALT_EXT : CLASS_MODE_NORMAL;\n\n    /* Jump here from '(?[...])'. That jump must initialize class_mode_state,\n    set c to the '[' character, and ptr to just after the '['. */\n\n    FROM_PERL_EXTENDED_CLASS:\n    okquantifier = TRUE;\n\n    /* In an EBCDIC environment, Perl treats alphabetic ranges specially\n    because there are holes in the encoding, and simply using the range A-Z\n    (for example) would include the characters in the holes. This applies only\n    to ranges where both values are literal; [\\xC1-\\xE9] is different to [A-Z]\n    in this respect. In order to accommodate this, we keep track of whether\n    character values are literal or not, and a state variable for handling\n    ranges. */\n\n    /* Loop for the contents of the class. Classes may be nested, if\n    PCRE2_ALT_EXTENDED_CLASS is set, or the class is of the form (?[...]). */\n\n    /* c is still set to '[' so the loop will handle the start of the class. */\n\n    class_depth_m1 = -1;\n    class_maxdepth_m1 = -1;\n    class_range_state = RANGE_NO;\n    class_op_state = CLASS_OP_EMPTY;\n    class_start = NULL;\n\n    for (;;)\n      {\n      BOOL char_is_literal = TRUE;\n\n      /* Inside \\Q...\\E everything is literal except \\E */\n\n      if (inescq)\n        {\n        if (c == CHAR_BACKSLASH && ptr < ptrend && *ptr == CHAR_E)\n          {\n          inescq = FALSE;                   /* Reset literal state */\n          ptr++;                            /* Skip the 'E' */\n          goto CLASS_CONTINUE;\n          }\n\n        /* Surprisingly, you cannot use \\Q..\\E to escape a character inside a\n        Perl extended class. However, empty \\Q\\E sequences are allowed, so here\n        were're only giving an error if the \\Q..\\E is non-empty. */\n\n        if (class_mode_state == CLASS_MODE_PERL_EXT)\n          {\n          errorcode = ERR116;\n          goto FAILED;\n          }\n\n        goto CLASS_LITERAL;\n        }\n\n      /* Skip over space and tab (only) in extended-more mode, or anywhere\n      inside a Perl extended class (which implies /xx). */\n\n      if ((c == CHAR_SPACE || c == CHAR_HT) &&\n          ((options & PCRE2_EXTENDED_MORE) != 0 ||\n           class_mode_state >= CLASS_MODE_PERL_EXT))\n        goto CLASS_CONTINUE;\n\n      /* Handle POSIX class names. Perl allows a negation extension of the\n      form [:^name:]. A square bracket that doesn't match the syntax is\n      treated as a literal. We also recognize the POSIX constructions\n      [.ch.] and [=ch=] (\"collating elements\") and fault them, as Perl\n      5.6 and 5.8 do. */\n\n      if (class_depth_m1 >= 0 &&\n          c == CHAR_LEFT_SQUARE_BRACKET &&\n          ptrend - ptr >= 3 &&\n          (*ptr == CHAR_COLON || *ptr == CHAR_DOT ||\n           *ptr == CHAR_EQUALS_SIGN) &&\n          check_posix_syntax(ptr, ptrend, &tempptr))\n        {\n        BOOL posix_negate = FALSE;\n        int posix_class;\n\n        /* Perl treats a hyphen before a POSIX class as a literal, not the\n        start of a range. However, it gives a warning in its warning mode. PCRE\n        does not have a warning mode, so we give an error, because this is\n        likely an error on the user's part. */\n\n        if (class_range_state == RANGE_STARTED)\n          {\n          ptr = tempptr + 2;\n          errorcode = ERR50;\n          goto FAILED;\n          }\n\n        /* Perl treats a hyphen after a POSIX class as a literal, not the\n        start of a range. However, it gives a warning in its warning mode\n        unless the hyphen is the last character in the class. PCRE does not\n        have a warning mode, so we give an error, because this is likely an\n        error on the user's part.\n\n        Roll back to the hyphen for the error position. */\n\n        if (class_range_state == RANGE_FORBID_STARTED)\n          {\n          ptr = class_range_forbid_ptr;\n          errorcode = ERR50;\n          goto FAILED;\n          }\n\n        /* Disallow implicit union in Perl extended classes. */\n\n        if (class_op_state == CLASS_OP_OPERAND &&\n            class_mode_state == CLASS_MODE_PERL_EXT)\n          {\n          ptr = tempptr + 2;\n          errorcode = ERR113;\n          goto FAILED;\n          }\n\n        if (*ptr != CHAR_COLON)\n          {\n          ptr = tempptr + 2;\n          errorcode = ERR13;\n          goto FAILED;\n          }\n\n        if (*(++ptr) == CHAR_CIRCUMFLEX_ACCENT)\n          {\n          posix_negate = TRUE;\n          ptr++;\n          }\n\n        posix_class = check_posix_name(ptr, (int)(tempptr - ptr));\n        ptr = tempptr + 2;\n        if (posix_class < 0)\n          {\n          errorcode = ERR30;\n          goto FAILED;\n          }\n\n        /* Set \"a hyphen is forbidden to be the start of a range\". For the '-]'\n        case, the hyphen is treated as a literal, but for '-1' it is disallowed\n        (because it would be interpreted as range). */\n\n        class_range_state = RANGE_FORBID_NO;\n        class_op_state = CLASS_OP_OPERAND;\n\n        /* When PCRE2_UCP is set, unless PCRE2_EXTRA_ASCII_POSIX is set, some\n        of the POSIX classes are converted to use Unicode properties \\p or \\P\n        or, in one case, \\h or \\H. The substitutes table has two values per\n        class, containing the type and value of a \\p or \\P item. The special\n        cases are specified with a negative type: a non-zero value causes \\h or\n        \\H to be used, and a zero value falls through to behave like a non-UCP\n        POSIX class. There are now also some extra options that force ASCII for\n        some classes. */\n\n#ifdef SUPPORT_UNICODE\n        if ((options & PCRE2_UCP) != 0 &&\n            (xoptions & PCRE2_EXTRA_ASCII_POSIX) == 0 &&\n            !((xoptions & PCRE2_EXTRA_ASCII_DIGIT) != 0 &&\n              (posix_class == PC_DIGIT || posix_class == PC_XDIGIT)))\n          {\n          int ptype = posix_substitutes[2*posix_class];\n          int pvalue = posix_substitutes[2*posix_class + 1];\n\n          if (ptype >= 0)\n            {\n            *parsed_pattern++ = META_ESCAPE + (posix_negate? ESC_P : ESC_p);\n            *parsed_pattern++ = (ptype << 16) | pvalue;\n            goto CLASS_CONTINUE;\n            }\n\n          if (pvalue != 0)\n            {\n            *parsed_pattern++ = META_ESCAPE + (posix_negate? ESC_H : ESC_h);\n            goto CLASS_CONTINUE;\n            }\n\n          /* Fall through */\n          }\n#endif  /* SUPPORT_UNICODE */\n\n        /* Non-UCP POSIX class */\n\n        *parsed_pattern++ = posix_negate? META_POSIX_NEG : META_POSIX;\n        *parsed_pattern++ = posix_class;\n        }\n\n      /* Check for the start of the outermost class, or the start of a nested class. */\n\n      else if ((c == CHAR_LEFT_SQUARE_BRACKET &&\n                (class_depth_m1 < 0 || class_mode_state == CLASS_MODE_ALT_EXT ||\n                 class_mode_state == CLASS_MODE_PERL_EXT)) ||\n               (c == CHAR_LEFT_PARENTHESIS &&\n                class_mode_state == CLASS_MODE_PERL_EXT))\n        {\n        uint32_t start_c = c;\n        uint32_t new_class_mode_state;\n\n        /* Update the class mode, if moving into a 'leaf' inside a Perl extended\n        class. */\n\n        if (start_c == CHAR_LEFT_SQUARE_BRACKET &&\n            class_mode_state == CLASS_MODE_PERL_EXT && class_depth_m1 >= 0)\n          new_class_mode_state = CLASS_MODE_PERL_EXT_LEAF;\n        else\n          new_class_mode_state = class_mode_state;\n\n        /* Tidy up the other class before starting the nested class. */\n        /* -[ beginning a nested class is a literal '-' */\n\n        if (class_range_state == RANGE_STARTED)\n          parsed_pattern[-1] = CHAR_MINUS;\n\n        /* Disallow implicit union in Perl extended classes. */\n\n        if (class_op_state == CLASS_OP_OPERAND &&\n            class_mode_state == CLASS_MODE_PERL_EXT)\n          {\n          errorcode = ERR113;\n          goto FAILED;\n          }\n\n        /* Validate nesting depth */\n        if (class_depth_m1 >= ECLASS_NEST_LIMIT - 1)\n          {\n          ptr--;  /* Point rightwards at the paren, same as ERR19. */\n          errorcode = ERR107;  /* Classes too deeply nested */\n          goto FAILED;\n          }\n\n        /* Process the character class start. If the first character is '^', set\n        the negation flag. If the first few characters (either before or after ^)\n        are \\Q\\E or \\E or space or tab in extended-more mode, we skip them too.\n        This makes for compatibility with Perl. */\n\n        negate_class = FALSE;\n        for (;;)\n          {\n          if (ptr >= ptrend)\n            {\n            if (start_c == CHAR_LEFT_PARENTHESIS)\n              errorcode = ERR14;  /* Missing terminating ')' */\n            else\n              errorcode = ERR6;   /* Missing terminating ']' */\n            goto FAILED;\n            }\n\n          GETCHARINCTEST(c, ptr);\n          if (new_class_mode_state == CLASS_MODE_PERL_EXT) break;\n          else if (c == CHAR_BACKSLASH)\n            {\n            if (ptr < ptrend && *ptr == CHAR_E) ptr++;\n            else if (ptrend - ptr >= 3 &&\n                PRIV(strncmp_c8)(ptr, STR_Q STR_BACKSLASH STR_E, 3) == 0)\n              ptr += 3;\n            else\n              break;\n            }\n          else if ((c == CHAR_SPACE || c == CHAR_HT) &&  /* Note: just these two */\n                   ((options & PCRE2_EXTENDED_MORE) != 0 ||\n                    new_class_mode_state >= CLASS_MODE_PERL_EXT))\n            continue;\n          else if (!negate_class && c == CHAR_CIRCUMFLEX_ACCENT)\n            negate_class = TRUE;\n          else break;\n          }\n\n        /* Now the real contents of the class; c has the first \"real\" character.\n        Empty classes are permitted only if the option is set, and if it's not\n        a Perl-extended class. */\n\n        if (c == CHAR_RIGHT_SQUARE_BRACKET &&\n            (cb->external_options & PCRE2_ALLOW_EMPTY_CLASS) != 0 &&\n            new_class_mode_state < CLASS_MODE_PERL_EXT)\n          {\n          PCRE2_ASSERT(start_c == CHAR_LEFT_SQUARE_BRACKET);\n\n          if (class_start != NULL)\n            {\n            PCRE2_ASSERT(class_depth_m1 >= 0);\n            /* Represents that the class is an extended class. */\n            *class_start |= CLASS_IS_ECLASS;\n            class_start = NULL;\n            }\n\n          *parsed_pattern++ = negate_class? META_CLASS_EMPTY_NOT : META_CLASS_EMPTY;\n\n          /* Leave nesting depth unchanged; but check for zero depth to handle the\n          very first (top-level) class being empty. */\n          if (class_depth_m1 < 0) break;\n\n          class_range_state = RANGE_NO; /* for processing the containing class */\n          class_op_state = CLASS_OP_OPERAND;\n          goto CLASS_CONTINUE;\n          }\n\n        /* Enter a non-empty class. */\n\n        if (class_start != NULL)\n          {\n          PCRE2_ASSERT(class_depth_m1 >= 0);\n          /* Represents that the class is an extended class. */\n          *class_start |= CLASS_IS_ECLASS;\n          class_start = NULL;\n          }\n\n        class_start = parsed_pattern;\n        *parsed_pattern++ = negate_class? META_CLASS_NOT : META_CLASS;\n        class_range_state = RANGE_NO;\n        class_op_state = CLASS_OP_EMPTY;\n        class_mode_state = new_class_mode_state;\n        ++class_depth_m1;\n        if (class_maxdepth_m1 < class_depth_m1)\n          class_maxdepth_m1 = class_depth_m1;\n        /* Reset; no op seen yet at new depth. */\n        cb->class_op_used[class_depth_m1] = 0;\n\n        /* Implement the special start-of-class literal meaning of ']'. */\n        if (c == CHAR_RIGHT_SQUARE_BRACKET &&\n            new_class_mode_state != CLASS_MODE_PERL_EXT)\n          {\n          class_range_state = RANGE_OK_LITERAL;\n          class_op_state = CLASS_OP_OPERAND;\n          PARSED_LITERAL(c, parsed_pattern);\n          goto CLASS_CONTINUE;\n          }\n\n        continue;  /* We have already loaded c with the next character */\n        }\n\n      /* Check for the end of the class. */\n\n      else if (c == CHAR_RIGHT_SQUARE_BRACKET ||\n               (c == CHAR_RIGHT_PARENTHESIS && class_mode_state == CLASS_MODE_PERL_EXT))\n        {\n        /* In Perl extended mode, the ']' can only be used to match the\n        opening '[', and ')' must match an opening parenthesis. */\n        if (class_mode_state == CLASS_MODE_PERL_EXT)\n          {\n          if (c == CHAR_RIGHT_SQUARE_BRACKET && class_depth_m1 != 0)\n            {\n            errorcode = ERR14;\n            ptr--;  /* Correct the offset */\n            goto FAILED;\n            }\n          if (c == CHAR_RIGHT_PARENTHESIS && class_depth_m1 < 1)\n            {\n            errorcode = ERR22;\n            goto FAILED;\n            }\n          }\n\n        /* Check no trailing operator. */\n        if (class_op_state == CLASS_OP_OPERATOR)\n          {\n          errorcode = ERR110;\n          goto FAILED;\n          }\n\n        /* Check no empty expression for Perl extended expressions. */\n        if (class_mode_state == CLASS_MODE_PERL_EXT &&\n            class_op_state == CLASS_OP_EMPTY)\n          {\n          errorcode = ERR114;\n          goto FAILED;\n          }\n\n        /* -] at the end of a class is a literal '-' */\n        if (class_range_state == RANGE_STARTED)\n          parsed_pattern[-1] = CHAR_MINUS;\n\n        *parsed_pattern++ = META_CLASS_END;\n\n        if (--class_depth_m1 < 0)\n          {\n          /* Check for and consume ')' after '(?[...]'. */\n          PCRE2_ASSERT(class_mode_state != CLASS_MODE_PERL_EXT_LEAF);\n          if (class_mode_state == CLASS_MODE_PERL_EXT)\n            {\n            if (ptr >= ptrend || *ptr != CHAR_RIGHT_PARENTHESIS)\n              {\n              errorcode = ERR115;\n              goto FAILED;\n              }\n\n            ptr++;\n            }\n\n          break;\n          }\n\n        class_range_state = RANGE_NO; /* for processing the containing class */\n        class_op_state = CLASS_OP_OPERAND;\n        if (class_mode_state == CLASS_MODE_PERL_EXT_LEAF)\n          class_mode_state = CLASS_MODE_PERL_EXT;\n        /* The extended class flag has already\n        been set for the parent class. */\n        class_start = NULL;\n        }\n\n      /* Handle a Perl set binary operator */\n\n      else if (class_mode_state == CLASS_MODE_PERL_EXT &&\n               (c == CHAR_PLUS || c == CHAR_VERTICAL_LINE || c == CHAR_MINUS ||\n                c == CHAR_AMPERSAND || c == CHAR_CIRCUMFLEX_ACCENT))\n        {\n        /* Check that there was a preceding operand. */\n        if (class_op_state != CLASS_OP_OPERAND)\n          {\n          errorcode = ERR109;\n          goto FAILED;\n          }\n\n        if (class_start != NULL)\n          {\n          PCRE2_ASSERT(class_depth_m1 >= 0);\n          /* Represents that the class is an extended class. */\n          *class_start |= CLASS_IS_ECLASS;\n          class_start = NULL;\n          }\n\n        PCRE2_ASSERT(class_range_state != RANGE_STARTED &&\n                     class_range_state != RANGE_FORBID_STARTED);\n\n        *parsed_pattern++ = c == CHAR_PLUS? META_ECLASS_OR :\n                            c == CHAR_VERTICAL_LINE? META_ECLASS_OR :\n                            c == CHAR_MINUS? META_ECLASS_SUB :\n                            c == CHAR_AMPERSAND? META_ECLASS_AND :\n                            META_ECLASS_XOR;\n        class_range_state = RANGE_NO;\n        class_op_state = CLASS_OP_OPERATOR;\n        }\n\n      /* Handle a Perl set unary operator */\n\n      else if (class_mode_state == CLASS_MODE_PERL_EXT &&\n               c == CHAR_EXCLAMATION_MARK)\n        {\n        /* Check that the \"!\" has not got a preceding operand (i.e. it's the\n        start of the class, or follows an operator). */\n        if (class_op_state == CLASS_OP_OPERAND)\n          {\n          errorcode = ERR113;\n          goto FAILED;\n          }\n\n        if (class_start != NULL)\n          {\n          PCRE2_ASSERT(class_depth_m1 >= 0);\n          /* Represents that the class is an extended class. */\n          *class_start |= CLASS_IS_ECLASS;\n          class_start = NULL;\n          }\n\n        PCRE2_ASSERT(class_range_state != RANGE_STARTED &&\n                     class_range_state != RANGE_FORBID_STARTED);\n\n        *parsed_pattern++ = META_ECLASS_NOT;\n        class_range_state = RANGE_NO;\n        class_op_state = CLASS_OP_OPERATOR;\n        }\n\n      /* Handle a UTS#18 set operator */\n\n      else if (class_mode_state == CLASS_MODE_ALT_EXT &&\n               (c == CHAR_VERTICAL_LINE || c == CHAR_MINUS ||\n                c == CHAR_AMPERSAND || c == CHAR_TILDE) &&\n               ptr < ptrend && *ptr == c)\n        {\n        ++ptr;\n\n        /* Check there isn't a triple-repetition. */\n        if (ptr < ptrend && *ptr == c)\n          {\n          while (ptr < ptrend && *ptr == c) ++ptr;  /* Improve error offset. */\n          errorcode = ERR108;\n          goto FAILED;\n          }\n\n        /* Check for a preceding operand. */\n        if (class_op_state != CLASS_OP_OPERAND)\n          {\n          errorcode = ERR109;\n          goto FAILED;\n          }\n\n        /* Check for mixed precedence. Forbid [A--B&&C]. */\n        if (cb->class_op_used[class_depth_m1] != 0 &&\n            cb->class_op_used[class_depth_m1] != (uint8_t)c)\n          {\n          errorcode = ERR111;\n          goto FAILED;\n          }\n\n        if (class_start != NULL)\n          {\n          PCRE2_ASSERT(class_depth_m1 >= 0);\n          /* Represents that the class is an extended class. */\n          *class_start |= CLASS_IS_ECLASS;\n          class_start = NULL;\n          }\n\n        /* Dangling '-' before an operator is a literal */\n        if (class_range_state == RANGE_STARTED)\n          parsed_pattern[-1] = CHAR_MINUS;\n\n        *parsed_pattern++ = c == CHAR_VERTICAL_LINE? META_ECLASS_OR :\n                            c == CHAR_MINUS? META_ECLASS_SUB :\n                            c == CHAR_AMPERSAND? META_ECLASS_AND :\n                            META_ECLASS_XOR;\n        class_range_state = RANGE_NO;\n        class_op_state = CLASS_OP_OPERATOR;\n        cb->class_op_used[class_depth_m1] = (uint8_t)c;\n        }\n\n      /* Handle escapes in a class */\n\n      else if (c == CHAR_BACKSLASH)\n        {\n        tempptr = ptr;\n        escape = PRIV(check_escape)(&ptr, ptrend, &c, &errorcode, options,\n          xoptions, cb->bracount, TRUE, cb);\n\n        if (errorcode != 0)\n          {\n          if ((xoptions & PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL) == 0 ||\n              class_mode_state >= CLASS_MODE_PERL_EXT)\n            goto FAILED;\n          ptr = tempptr;\n          if (ptr >= ptrend) c = CHAR_BACKSLASH; else\n            {\n            GETCHARINCTEST(c, ptr);   /* Get character value, increment pointer */\n            }\n          escape = 0;                 /* Treat as literal character */\n          }\n\n        switch(escape)\n          {\n          case 0:  /* Escaped character code point is in c */\n          char_is_literal = FALSE;\n          goto CLASS_LITERAL;      /* (a few lines above) */\n\n          case ESC_b:\n          c = CHAR_BS;    /* \\b is backspace in a class */\n          char_is_literal = FALSE;\n          goto CLASS_LITERAL;\n\n          case ESC_k:\n          c = CHAR_k;     /* \\k is not special in a class, just like \\g */\n          char_is_literal = FALSE;\n          goto CLASS_LITERAL;\n\n          case ESC_Q:\n          inescq = TRUE;  /* Enter literal mode */\n          goto CLASS_CONTINUE;\n\n          case ESC_E:     /* Ignore orphan \\E */\n          goto CLASS_CONTINUE;\n\n          case ESC_B:     /* Always an error in a class */\n          case ESC_R:\n          case ESC_X:\n          errorcode = ERR7;\n          goto FAILED;\n\n          case ESC_N:     /* Not permitted by Perl either */\n          errorcode = ERR71;\n          goto FAILED;\n\n          case ESC_H:\n          case ESC_h:\n          case ESC_V:\n          case ESC_v:\n          *parsed_pattern++ = META_ESCAPE + escape;\n          break;\n\n          /* These escapes may be converted to Unicode property tests when\n          PCRE2_UCP is set. */\n\n          case ESC_d:\n          case ESC_D:\n          case ESC_s:\n          case ESC_S:\n          case ESC_w:\n          case ESC_W:\n          parsed_pattern = handle_escdsw(escape, parsed_pattern, options,\n            xoptions);\n          break;\n\n          /* Explicit Unicode property matching */\n\n          case ESC_P:\n          case ESC_p:\n#ifdef SUPPORT_UNICODE\n            {\n            BOOL negated;\n            uint16_t ptype = 0, pdata = 0;\n            if (!get_ucp(&ptr, utf, &negated, &ptype, &pdata, &errorcode, cb))\n              goto FAILED;\n\n            /* In caseless matching, particular characteristics Lu, Ll, and Lt\n            get converted to the general characteristic L&. That is, upper,\n            lower, and title case letters are all conflated. */\n\n            if ((options & PCRE2_CASELESS) != 0 && ptype == PT_PC &&\n                (pdata == ucp_Lu || pdata == ucp_Ll || pdata == ucp_Lt))\n              {\n              ptype = PT_LAMP;\n              pdata = 0;\n              }\n\n            if (negated) escape = (escape == ESC_P)? ESC_p : ESC_P;\n            *parsed_pattern++ = META_ESCAPE + escape;\n            *parsed_pattern++ = (ptype << 16) | pdata;\n            }\n#else\n          errorcode = ERR45;\n          goto FAILED;\n#endif\n          break;  /* End \\P and \\p */\n\n          /* All others are not allowed in a class */\n\n          /* LCOV_EXCL_START */\n          default:\n          PCRE2_DEBUG_UNREACHABLE();\n          PCRE2_FALLTHROUGH /* Fall through */\n          /* LCOV_EXCL_STOP */\n\n          case ESC_A:\n          case ESC_Z:\n          case ESC_z:\n          case ESC_G:\n          case ESC_K:\n          case ESC_C:\n          errorcode = ERR7;\n          goto FAILED;\n          }\n\n        /* All the switch-cases above which end in \"break\" describe a set\n        of characters. None may start a range. */\n\n        /* The second part of a range can be a single-character escape\n        sequence (detected above), but not any of the other escapes. Perl\n        treats a hyphen as a literal in such circumstances. However, in Perl's\n        warning mode, a warning is given, so PCRE now faults it, as it is\n        almost certainly a mistake on the user's part. */\n\n        if (class_range_state == RANGE_STARTED)\n          {\n          errorcode = ERR50;\n          goto FAILED;\n          }\n\n        /* Perl gives a warning unless the hyphen following a multi-character\n        escape is the last character in the class. PCRE throws an error. */\n\n        if (class_range_state == RANGE_FORBID_STARTED)\n          {\n          ptr = class_range_forbid_ptr;\n          errorcode = ERR50;\n          goto FAILED;\n          }\n\n        /* Disallow implicit union in Perl extended classes. */\n\n        if (class_op_state == CLASS_OP_OPERAND &&\n            class_mode_state == CLASS_MODE_PERL_EXT)\n          {\n          errorcode = ERR113;\n          goto FAILED;\n          }\n\n        class_range_state = RANGE_FORBID_NO;\n        class_op_state = CLASS_OP_OPERAND;\n        }\n\n      /* Forbid unescaped literals, and the special meaning of '-', inside a\n      Perl extended class. */\n\n      else if (class_mode_state == CLASS_MODE_PERL_EXT)\n        {\n        errorcode = ERR116;\n        goto FAILED;\n        }\n\n      /* Handle potential start of range */\n\n      else if (c == CHAR_MINUS && class_range_state >= RANGE_OK_ESCAPED)\n        {\n        *parsed_pattern++ = (class_range_state == RANGE_OK_LITERAL)?\n          META_RANGE_LITERAL : META_RANGE_ESCAPED;\n        class_range_state = RANGE_STARTED;\n        }\n\n      /* Handle forbidden start of range */\n\n      else if (c == CHAR_MINUS && class_range_state == RANGE_FORBID_NO)\n        {\n        *parsed_pattern++ = CHAR_MINUS;\n        class_range_state = RANGE_FORBID_STARTED;\n        class_range_forbid_ptr = ptr;\n        }\n\n      /* Handle a literal character */\n\n      else\n        {\n        CLASS_LITERAL:\n\n        /* Disallow implicit union in Perl extended classes. */\n\n        if (class_op_state == CLASS_OP_OPERAND &&\n            class_mode_state == CLASS_MODE_PERL_EXT)\n          {\n          errorcode = ERR113;\n          goto FAILED;\n          }\n\n        if (class_range_state == RANGE_STARTED)\n          {\n          if (c == parsed_pattern[-2])       /* Optimize one-char range */\n            parsed_pattern--;\n          else if (parsed_pattern[-2] > c)   /* Check range is in order */\n            {\n            errorcode = ERR8;\n            goto FAILED;\n            }\n          else\n            {\n            if (!char_is_literal && parsed_pattern[-1] == META_RANGE_LITERAL)\n              parsed_pattern[-1] = META_RANGE_ESCAPED;\n            PARSED_LITERAL(c, parsed_pattern);\n            }\n          class_range_state = RANGE_NO;\n          class_op_state = CLASS_OP_OPERAND;\n          }\n        else if (class_range_state == RANGE_FORBID_STARTED)\n          {\n          ptr = class_range_forbid_ptr;\n          errorcode = ERR50;\n          goto FAILED;\n          }\n        else  /* Potential start of range */\n          {\n          class_range_state = char_is_literal?\n            RANGE_OK_LITERAL : RANGE_OK_ESCAPED;\n          class_op_state = CLASS_OP_OPERAND;\n          PARSED_LITERAL(c, parsed_pattern);\n          }\n        }\n\n      /* Proceed to next thing in the class. */\n\n      CLASS_CONTINUE:\n      if (ptr >= ptrend)\n        {\n        if (class_mode_state == CLASS_MODE_PERL_EXT && class_depth_m1 > 0)\n          errorcode = ERR14;   /* Missing terminating ')' */\n        if (class_mode_state == CLASS_MODE_ALT_EXT &&\n            class_depth_m1 == 0 && class_maxdepth_m1 == 1)\n          errorcode = ERR112;  /* Missing terminating ']', but we saw '[ [ ]...' */\n        else\n          errorcode = ERR6;    /* Missing terminating ']' */\n        goto FAILED;\n        }\n      GETCHARINCTEST(c, ptr);\n      }     /* End of class-processing loop */\n\n    break;  /* End of character class */\n\n\n    /* ---- Opening parenthesis ---- */\n\n    case CHAR_LEFT_PARENTHESIS:\n    if (ptr >= ptrend) goto UNCLOSED_PARENTHESIS;\n\n    /* If ( is not followed by ? it is either a capture or a special verb or an\n    alpha assertion or a positive non-atomic lookahead. */\n\n    if (*ptr != CHAR_QUESTION_MARK)\n      {\n      const char *vn;\n\n      /* Handle capturing brackets (or non-capturing if auto-capture is turned\n      off). */\n\n      if (*ptr != CHAR_ASTERISK)\n        {\n        nest_depth++;\n        if ((options & PCRE2_NO_AUTO_CAPTURE) == 0)\n          {\n          if (cb->bracount >= MAX_GROUP_NUMBER)\n            {\n            errorcode = ERR97;\n            goto FAILED;\n            }\n          cb->bracount++;\n          *parsed_pattern++ = META_CAPTURE | cb->bracount;\n          }\n        else *parsed_pattern++ = META_NOCAPTURE;\n        }\n\n      /* Do nothing for (* followed by end of pattern or ) so it gives a \"bad\n      quantifier\" error rather than \"(*MARK) must have an argument\". */\n\n      else if (ptrend - ptr <= 1 || (c = ptr[1]) == CHAR_RIGHT_PARENTHESIS)\n        break;\n\n      /* Handle \"alpha assertions\" such as (*pla:...). Most of these are\n      synonyms for the historical symbolic assertions, but the script run and\n      non-atomic lookaround ones are new. They are distinguished by starting\n      with a lower case letter. Checking both ends of the alphabet makes this\n      work in all character codes. */\n\n      else if (CHMAX_255(c) && (cb->ctypes[c] & ctype_lcletter) != 0)\n        {\n        uint32_t meta;\n\n        vn = alasnames;\n        if (!read_name(&ptr, ptrend, utf, 0, &offset, &name, &namelen,\n          &errorcode, cb)) goto FAILED;\n        if (ptr >= ptrend) goto UNCLOSED_PARENTHESIS;\n        if (*ptr != CHAR_COLON)\n          {\n          errorcode = ERR95;  /* Malformed */\n          goto FAILED_FORWARD;\n          }\n\n        /* Scan the table of alpha assertion names */\n\n        for (i = 0; i < alascount; i++)\n          {\n          if (namelen == alasmeta[i].len &&\n              PRIV(strncmp_c8)(name, vn, namelen) == 0)\n            break;\n          vn += alasmeta[i].len + 1;\n          }\n\n        if (i >= alascount)\n          {\n          errorcode = ERR95;  /* Alpha assertion not recognized */\n          goto FAILED;\n          }\n\n        /* Check for expecting an assertion condition. If so, only atomic\n        lookaround assertions are valid. */\n\n        meta = alasmeta[i].meta;\n        if (prev_expect_cond_assert > 0 &&\n            (meta < META_LOOKAHEAD || meta > META_LOOKBEHINDNOT))\n          {\n          errorcode = ERR28;  /* Atomic assertion expected */\n          goto FAILED;\n          }\n\n        /* The lookaround alphabetic synonyms can mostly be handled by jumping\n        to the code that handles the traditional symbolic forms. */\n\n        switch(meta)\n          {\n          /* LCOV_EXCL_START */\n          default:\n          PCRE2_DEBUG_UNREACHABLE();\n          errorcode = ERR89;  /* Unknown code; should never occur because */\n          goto FAILED;        /* the meta values come from a table above. */\n          /* LCOV_EXCL_STOP */\n\n          case META_ATOMIC:\n          goto ATOMIC_GROUP;\n\n          case META_LOOKAHEAD:\n          goto POSITIVE_LOOK_AHEAD;\n\n          case META_LOOKAHEAD_NA:\n          goto POSITIVE_NONATOMIC_LOOK_AHEAD;\n\n          case META_LOOKAHEADNOT:\n          goto NEGATIVE_LOOK_AHEAD;\n\n          case META_SCS:\n          ptr++;\n          *parsed_pattern++ = META_SCS;\n\n          parsed_pattern = parse_capture_list(&ptr, ptrend, utf, parsed_pattern,\n                                              0, &errorcode, cb);\n          if (parsed_pattern == NULL) goto FAILED;\n          goto POST_ASSERTION;\n\n          case META_LOOKBEHIND:\n          case META_LOOKBEHINDNOT:\n          case META_LOOKBEHIND_NA:\n          *parsed_pattern++ = meta;\n          ptr--;\n          goto POST_LOOKBEHIND;\n\n          /* The script run facilities are handled here. Unicode support is\n          required (give an error if not, as this is a security issue). Always\n          record a META_SCRIPT_RUN item. Then, for the atomic version, insert\n          META_ATOMIC and remember that we need two META_KETs at the end. */\n\n          case META_SCRIPT_RUN:\n          case META_ATOMIC_SCRIPT_RUN:\n#ifdef SUPPORT_UNICODE\n          *parsed_pattern++ = META_SCRIPT_RUN;\n          nest_depth++;\n          ptr++;\n          if (meta == META_ATOMIC_SCRIPT_RUN)\n            {\n            *parsed_pattern++ = META_ATOMIC;\n            if (top_nest == NULL) top_nest = (nest_save *)(cb->start_workspace);\n            else if (++top_nest >= end_nests)\n              {\n              errorcode = ERR84;\n              goto FAILED;\n              }\n            top_nest->nest_depth = nest_depth;\n            top_nest->flags = NSF_ATOMICSR;\n            top_nest->options = options & PARSE_TRACKED_OPTIONS;\n            top_nest->xoptions = xoptions & PARSE_TRACKED_EXTRA_OPTIONS;\n\n#ifdef PCRE2_DEBUG\n            /* We'll write out two META_KETs for a single \")\" in the input\n            pattern, so we reserve space for that in our bounds check. */\n            parsed_pattern_extra++;\n#endif\n            }\n          break;\n#else  /* SUPPORT_UNICODE */\n          errorcode = ERR96;\n          goto FAILED;\n#endif\n          }\n        }\n\n\n      /* ---- Handle (*VERB) and (*VERB:NAME) ---- */\n\n      else\n        {\n        vn = verbnames;\n        if (!read_name(&ptr, ptrend, utf, 0, &offset, &name, &namelen,\n          &errorcode, cb)) goto FAILED;\n        if (ptr >= ptrend || (*ptr != CHAR_COLON &&\n                              *ptr != CHAR_RIGHT_PARENTHESIS))\n          {\n          errorcode = ERR60;  /* Malformed */\n          goto FAILED;\n          }\n\n        /* Scan the table of verb names */\n\n        for (i = 0; i < verbcount; i++)\n          {\n          if (namelen == verbs[i].len &&\n              PRIV(strncmp_c8)(name, vn, namelen) == 0)\n            break;\n          vn += verbs[i].len + 1;\n          }\n\n        if (i >= verbcount)\n          {\n          errorcode = ERR60;  /* Verb not recognized */\n          goto FAILED;\n          }\n\n        /* An empty argument is treated as no argument. */\n\n        if (*ptr == CHAR_COLON && ptr + 1 < ptrend &&\n             ptr[1] == CHAR_RIGHT_PARENTHESIS)\n          ptr++;    /* Advance to the closing parens */\n\n        /* Check for mandatory non-empty argument; this is (*MARK) */\n\n        if (verbs[i].has_arg > 0 && *ptr != CHAR_COLON)\n          {\n          errorcode = ERR66;\n          goto FAILED;\n          }\n\n        /* Remember where this verb, possibly with a preceding (*MARK), starts,\n        for handling quantified (*ACCEPT). */\n\n        verbstartptr = parsed_pattern;\n        okquantifier = (verbs[i].meta == META_ACCEPT);\n#ifdef PCRE2_DEBUG\n        /* Reserve space in our bounds check for optionally wrapping the (*ACCEPT)\n        with a non-capturing bracket, if there is a following quantifier. */\n        if (okquantifier) parsed_pattern_extra += 2;\n#endif\n\n        /* It appears that Perl allows any characters whatsoever, other than a\n        closing parenthesis, to appear in arguments (\"names\"), so we no longer\n        insist on letters, digits, and underscores. Perl does not, however, do\n        any interpretation within arguments, and has no means of including a\n        closing parenthesis. PCRE supports escape processing but only when it\n        is requested by an option. We set inverbname TRUE here, and let the\n        main loop take care of this so that escape and \\x processing is done by\n        the main code above. */\n\n        if (*ptr++ == CHAR_COLON)   /* Skip past : or ) */\n          {\n          /* Some optional arguments can be treated as a preceding (*MARK) */\n\n          if (verbs[i].has_arg < 0)\n            {\n            add_after_mark = verbs[i].meta;\n            *parsed_pattern++ = META_MARK;\n            }\n\n          /* The remaining verbs with arguments (except *MARK) need a different\n          opcode. */\n\n          else\n            {\n            *parsed_pattern++ = verbs[i].meta +\n              ((verbs[i].meta != META_MARK)? 0x00010000u:0);\n            }\n\n          /* Set up for reading the name in the main loop. */\n\n          verblengthptr = parsed_pattern++;\n          verbnamestart = ptr;\n          inverbname = TRUE;\n          }\n        else  /* No verb \"name\" argument */\n          {\n          *parsed_pattern++ = verbs[i].meta;\n          }\n        }     /* End of (*VERB) handling */\n      break;  /* Done with this parenthesis */\n      }       /* End of groups that don't start with (? */\n\n\n    /* ---- Items starting (? ---- */\n\n    /* The type of item is determined by what follows (?. Handle (?| and option\n    changes under \"default\" because both need a new block on the nest stack.\n    Comments starting with (?# are handled above. Note that there is some\n    ambiguity about the sequence (?- because if a digit follows it's a relative\n    recursion or subroutine call whereas otherwise it's an option unsetting. */\n\n    if (++ptr >= ptrend) goto UNCLOSED_PARENTHESIS;\n\n    switch(*ptr)\n      {\n      default:\n      if (*ptr == CHAR_MINUS && ptrend - ptr > 1 && IS_DIGIT(ptr[1]))\n        goto RECURSION_BYNUMBER;  /* The + case is handled by CHAR_PLUS */\n\n      /* We now have either (?| or a (possibly empty) option setting,\n      optionally followed by a non-capturing group. */\n\n      nest_depth++;\n      if (top_nest == NULL) top_nest = (nest_save *)(cb->start_workspace);\n      else if (++top_nest >= end_nests)\n        {\n        errorcode = ERR84;\n        goto FAILED;\n        }\n      top_nest->nest_depth = nest_depth;\n      top_nest->flags = 0;\n      top_nest->options = options & PARSE_TRACKED_OPTIONS;\n      top_nest->xoptions = xoptions & PARSE_TRACKED_EXTRA_OPTIONS;\n\n      /* Start of non-capturing group that resets the capture count for each\n      branch. */\n\n      if (*ptr == CHAR_VERTICAL_LINE)\n        {\n        top_nest->reset_group = (uint16_t)cb->bracount;\n        top_nest->max_group = (uint16_t)cb->bracount;\n        top_nest->flags |= NSF_RESET;\n        cb->external_flags |= PCRE2_DUPCAPUSED;\n        *parsed_pattern++ = META_NOCAPTURE;\n        ptr++;\n        }\n\n      /* Scan for options imnrsxJU to be set or unset. */\n\n      else\n        {\n        BOOL hyphenok = TRUE;\n        uint32_t oldoptions = options;\n        uint32_t oldxoptions = xoptions;\n\n        top_nest->reset_group = 0;\n        top_nest->max_group = 0;\n        set = unset = 0;\n        optset = &set;\n        xset = xunset = 0;\n        xoptset = &xset;\n\n        /* ^ at the start unsets irmnsx and disables the subsequent use of - */\n\n        if (ptr < ptrend && *ptr == CHAR_CIRCUMFLEX_ACCENT)\n          {\n          options &= ~(PCRE2_CASELESS|PCRE2_MULTILINE|PCRE2_NO_AUTO_CAPTURE|\n                       PCRE2_DOTALL|PCRE2_EXTENDED|PCRE2_EXTENDED_MORE);\n          xoptions &= ~(PCRE2_EXTRA_CASELESS_RESTRICT);\n          hyphenok = FALSE;\n          ptr++;\n          }\n\n        while (ptr < ptrend && *ptr != CHAR_RIGHT_PARENTHESIS &&\n                               *ptr != CHAR_COLON)\n          {\n          switch (*ptr++)\n            {\n            case CHAR_MINUS:\n            if (!hyphenok)\n              {\n              errorcode = ERR94;\n              goto FAILED;\n              }\n            optset = &unset;\n            xoptset = &xunset;\n            hyphenok = FALSE;\n            break;\n\n            /* There are some two-character sequences that start with 'a'. */\n\n            case CHAR_a:\n            if (ptr < ptrend)\n              {\n              if (*ptr == CHAR_D)\n                {\n                *xoptset |= PCRE2_EXTRA_ASCII_BSD;\n                ptr++;\n                break;\n                }\n              if (*ptr == CHAR_P)\n                {\n                *xoptset |= (PCRE2_EXTRA_ASCII_POSIX|PCRE2_EXTRA_ASCII_DIGIT);\n                ptr++;\n                break;\n                }\n              if (*ptr == CHAR_S)\n                {\n                *xoptset |= PCRE2_EXTRA_ASCII_BSS;\n                ptr++;\n                break;\n                }\n              if (*ptr == CHAR_T)\n                {\n                *xoptset |= PCRE2_EXTRA_ASCII_DIGIT;\n                ptr++;\n                break;\n                }\n              if (*ptr == CHAR_W)\n                {\n                *xoptset |= PCRE2_EXTRA_ASCII_BSW;\n                ptr++;\n                break;\n                }\n              }\n            *xoptset |= PCRE2_EXTRA_ASCII_BSD|PCRE2_EXTRA_ASCII_BSS|\n                        PCRE2_EXTRA_ASCII_BSW|\n                        PCRE2_EXTRA_ASCII_DIGIT|PCRE2_EXTRA_ASCII_POSIX;\n            break;\n\n            case CHAR_J:  /* Record that it changed in the external options */\n            *optset |= PCRE2_DUPNAMES;\n            cb->external_flags |= PCRE2_JCHANGED;\n            break;\n\n            case CHAR_i: *optset |= PCRE2_CASELESS; break;\n            case CHAR_m: *optset |= PCRE2_MULTILINE; break;\n            case CHAR_n: *optset |= PCRE2_NO_AUTO_CAPTURE; break;\n            case CHAR_r: *xoptset|= PCRE2_EXTRA_CASELESS_RESTRICT; break;\n            case CHAR_s: *optset |= PCRE2_DOTALL; break;\n            case CHAR_U: *optset |= PCRE2_UNGREEDY; break;\n\n            /* If x appears twice it sets the extended extended option. */\n\n            case CHAR_x:\n            *optset |= PCRE2_EXTENDED;\n            if (ptr < ptrend && *ptr == CHAR_x)\n              {\n              *optset |= PCRE2_EXTENDED_MORE;\n              ptr++;\n              }\n            break;\n\n            default:\n            errorcode = ERR11;\n            goto FAILED;\n            }\n          }\n\n        /* If we are setting extended without extended-more, ensure that any\n        existing extended-more gets unset. Also, unsetting extended must also\n        unset extended-more. */\n\n        if ((set & (PCRE2_EXTENDED|PCRE2_EXTENDED_MORE)) == PCRE2_EXTENDED ||\n            (unset & PCRE2_EXTENDED) != 0)\n          unset |= PCRE2_EXTENDED_MORE;\n\n        options = (options | set) & (~unset);\n        xoptions = (xoptions | xset) & (~xunset);\n\n        /* If the options ended with ')' this is not the start of a nested\n        group with option changes, so the options change at this level.\n        In this case, if the previous level set up a nest block, discard the\n        one we have just created. Otherwise adjust it for the previous level.\n        If the options ended with ':' we are starting a non-capturing group,\n        possibly with an options setting. */\n\n        if (ptr >= ptrend) goto UNCLOSED_PARENTHESIS;\n        if (*ptr++ == CHAR_RIGHT_PARENTHESIS)\n          {\n          nest_depth--;  /* This is not a nested group after all. */\n          if (top_nest > (nest_save *)(cb->start_workspace) &&\n              (top_nest-1)->nest_depth == nest_depth) top_nest--;\n          else top_nest->nest_depth = nest_depth;\n          }\n        else *parsed_pattern++ = META_NOCAPTURE;\n\n        /* If nothing changed, no need to record. */\n\n        if (options != oldoptions || xoptions != oldxoptions)\n          {\n          *parsed_pattern++ = META_OPTIONS;\n          *parsed_pattern++ = options;\n          *parsed_pattern++ = xoptions;\n          }\n        }     /* End options processing */\n      break;  /* End default case after (? */\n\n\n      /* ---- Python syntax support ---- */\n\n      case CHAR_P:\n      if (++ptr >= ptrend) goto UNCLOSED_PARENTHESIS;\n\n      /* (?P<name> is the same as (?<name>, which defines a named group. */\n\n      if (*ptr == CHAR_LESS_THAN_SIGN)\n        {\n        terminator = CHAR_GREATER_THAN_SIGN;\n        goto DEFINE_NAME;\n        }\n\n      /* (?P>name) is the same as (?&name), which is a recursion or subroutine\n      call. */\n\n      if (*ptr == CHAR_GREATER_THAN_SIGN) goto RECURSE_BY_NAME;\n\n      /* (?P=name) is the same as \\k<name>, a back reference by name. Anything\n      else after (?P is an error. */\n\n      if (*ptr != CHAR_EQUALS_SIGN)\n        {\n        errorcode = ERR41;\n        goto FAILED_FORWARD;\n        }\n      if (!read_name(&ptr, ptrend, utf, CHAR_RIGHT_PARENTHESIS, &offset, &name,\n          &namelen, &errorcode, cb)) goto FAILED;\n      *parsed_pattern++ = META_BACKREF_BYNAME;\n      *parsed_pattern++ = namelen;\n      PUTOFFSET(offset, parsed_pattern);\n      okquantifier = TRUE;\n      break;   /* End of (?P processing */\n\n\n      /* ---- Recursion/subroutine calls by number ---- */\n\n      case CHAR_R:\n      i = 0;         /* (?R) == (?R0) */\n      ptr++;\n      if (ptr >= ptrend || (*ptr != CHAR_RIGHT_PARENTHESIS && *ptr != CHAR_LEFT_PARENTHESIS))\n        {\n        errorcode = ERR58;\n        goto FAILED;\n        }\n      terminator = CHAR_NUL;\n      goto SET_RECURSION;\n\n      /* An item starting (?- followed by a digit comes here via the \"default\"\n      case because (?- followed by a non-digit is an options setting. */\n\n      case CHAR_PLUS:\n      if (ptr + 1 >= ptrend)\n        {\n        ++ptr;\n        goto UNCLOSED_PARENTHESIS;\n        }\n      if (!IS_DIGIT(ptr[1]))\n        {\n        errorcode = ERR29;   /* Missing number */\n        ++ptr;\n        goto FAILED_FORWARD;\n        }\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      case CHAR_0: case CHAR_1: case CHAR_2: case CHAR_3: case CHAR_4:\n      case CHAR_5: case CHAR_6: case CHAR_7: case CHAR_8: case CHAR_9:\n      RECURSION_BYNUMBER:\n      if (!read_number(&ptr, ptrend,\n          (IS_DIGIT(*ptr))? -1:(int)(cb->bracount), /* + and - are relative */\n          MAX_GROUP_NUMBER, ERR61,\n          &i, &errorcode)) goto FAILED;\n      PCRE2_ASSERT(i >= 0);  /* NB (?0) is permitted, represented by i=0 */\n      terminator = CHAR_NUL;\n\n      SET_RECURSION:\n      *parsed_pattern++ = META_RECURSE | (uint32_t)i;\n      offset = (PCRE2_SIZE)(ptr - cb->start_pattern);\n      /* End of recursive call by number handling */\n      goto READ_RECURSION_ARGUMENTS;\n\n\n      /* ---- Recursion/subroutine calls by name ---- */\n\n      case CHAR_AMPERSAND:\n      RECURSE_BY_NAME:\n      if (!read_name(&ptr, ptrend, utf, 0, &offset, &name,\n          &namelen, &errorcode, cb)) goto FAILED;\n      *parsed_pattern++ = META_RECURSE_BYNAME;\n      *parsed_pattern++ = namelen;\n      terminator = CHAR_NUL;\n\n      READ_RECURSION_ARGUMENTS:\n      PUTOFFSET(offset, parsed_pattern);\n      okquantifier = TRUE;\n\n      /* Arguments are not supported for \\g construct. */\n      if (terminator != CHAR_NUL) break;\n\n      if (ptr < ptrend && *ptr == CHAR_LEFT_PARENTHESIS)\n        {\n        parsed_pattern = parse_capture_list(&ptr, ptrend, utf, parsed_pattern,\n                                            offset, &errorcode, cb);\n        if (parsed_pattern == NULL) goto FAILED;\n        }\n\n      if (ptr >= ptrend || *ptr != CHAR_RIGHT_PARENTHESIS)\n        goto UNCLOSED_PARENTHESIS;\n\n      ptr++;\n      break;\n\n      /* ---- Callout with numerical or string argument ---- */\n\n      case CHAR_C:\n      if ((xoptions & PCRE2_EXTRA_NEVER_CALLOUT) != 0)\n        {\n        ptr++;\n        errorcode = ERR103;\n        goto FAILED;\n        }\n\n      if (++ptr >= ptrend) goto UNCLOSED_PARENTHESIS;\n\n      /* If the previous item was a condition starting (?(? an assertion,\n      optionally preceded by a callout, is expected. This is checked later on,\n      during actual compilation. However we need to identify this kind of\n      assertion in this pass because it must not be qualified. The value of\n      expect_cond_assert is set to 2 after (?(? is processed. We decrement it\n      for a callout - still leaving a positive value that identifies the\n      assertion. Multiple callouts or any other items will make it zero or\n      less, which doesn't matter because they will cause an error later. */\n\n      expect_cond_assert = prev_expect_cond_assert - 1;\n\n      /* If previous_callout is not NULL, it means this follows a previous\n      callout. If it was a manual callout, do nothing; this means its \"length\n      of next pattern item\" field will remain zero. If it was an automatic\n      callout, abolish it. */\n\n      if (previous_callout != NULL && (options & PCRE2_AUTO_CALLOUT) != 0 &&\n          previous_callout == parsed_pattern - 4 &&\n          parsed_pattern[-1] == 255)\n        parsed_pattern = previous_callout;\n\n      /* Save for updating next pattern item length, and skip one item before\n      completing. */\n\n      previous_callout = parsed_pattern;\n      after_manual_callout = 1;\n\n      /* Handle a string argument; specific delimiter is required. */\n\n      if (*ptr != CHAR_RIGHT_PARENTHESIS && !IS_DIGIT(*ptr))\n        {\n        PCRE2_SIZE calloutlength;\n        PCRE2_SPTR startptr = ptr;\n\n        delimiter = 0;\n        for (i = 0; PRIV(callout_start_delims)[i] != 0; i++)\n          {\n          if (*ptr == PRIV(callout_start_delims)[i])\n            {\n            delimiter = PRIV(callout_end_delims)[i];\n            break;\n            }\n          }\n        if (delimiter == 0)\n          {\n          errorcode = ERR82;\n          goto FAILED_FORWARD;\n          }\n\n        *parsed_pattern = META_CALLOUT_STRING;\n        parsed_pattern += 3;   /* Skip pattern info */\n\n        for (;;)\n          {\n          if (++ptr >= ptrend)\n            {\n            errorcode = ERR81;\n            ptr = startptr;   /* To give a more useful message */\n            goto FAILED;\n            }\n          if (*ptr == delimiter && (++ptr >= ptrend || *ptr != delimiter))\n            break;\n          }\n\n        calloutlength = (PCRE2_SIZE)(ptr - startptr);\n        if (calloutlength > UINT32_MAX)\n          {\n          errorcode = ERR72;\n          goto FAILED;\n          }\n        *parsed_pattern++ = (uint32_t)calloutlength;\n        offset = (PCRE2_SIZE)(startptr - cb->start_pattern);\n        PUTOFFSET(offset, parsed_pattern);\n        }\n\n      /* Handle a callout with an optional numerical argument, which must be\n      less than or equal to 255. A missing argument gives 0. */\n\n      else\n        {\n        int n = 0;\n        *parsed_pattern = META_CALLOUT_NUMBER;     /* Numerical callout */\n        parsed_pattern += 3;                       /* Skip pattern info */\n        while (ptr < ptrend && IS_DIGIT(*ptr))\n          {\n          n = n * 10 + (*ptr++ - CHAR_0);\n          if (n > 255)\n            {\n            errorcode = ERR38;\n            goto FAILED;\n            }\n          }\n        *parsed_pattern++ = n;\n        }\n\n      /* Both formats must have a closing parenthesis */\n\n      if (ptr >= ptrend || *ptr != CHAR_RIGHT_PARENTHESIS)\n        {\n        errorcode = ERR39;\n        goto FAILED;\n        }\n      ptr++;\n\n      /* Remember the offset to the next item in the pattern, and set a default\n      length. This should get updated after the next item is read. */\n\n      previous_callout[1] = (uint32_t)(ptr - cb->start_pattern);\n      previous_callout[2] = 0;\n      break;                  /* End callout */\n\n\n      /* ---- Conditional group ---- */\n\n      /* A condition can be an assertion, a number (referring to a numbered\n      group's having been set), a name (referring to a named group), or 'R',\n      referring to overall recursion. R<digits> and R&name are also permitted\n      for recursion state tests. Numbers may be preceded by + or - to specify a\n      relative group number.\n\n      There are several syntaxes for testing a named group: (?(name)) is used\n      by Python; Perl 5.10 onwards uses (?(<name>) or (?('name')).\n\n      There are two unfortunate ambiguities. 'R' can be the recursive thing or\n      the name 'R' (and similarly for 'R' followed by digits). 'DEFINE' can be\n      the Perl DEFINE feature or the Python named test. We look for a name\n      first; if not found, we try the other case.\n\n      For compatibility with auto-callouts, we allow a callout to be specified\n      before a condition that is an assertion. */\n\n      case CHAR_LEFT_PARENTHESIS:\n      if (++ptr >= ptrend) goto UNCLOSED_PARENTHESIS;\n      nest_depth++;\n\n      /* If the next character is ? or * there must be an assertion next\n      (optionally preceded by a callout). We do not check this here, but\n      instead we set expect_cond_assert to 2. If this is still greater than\n      zero (callouts decrement it) when the next assertion is read, it will be\n      marked as a condition that must not be repeated. A value greater than\n      zero also causes checking that an assertion (possibly with callout)\n      follows. */\n\n      if (*ptr == CHAR_QUESTION_MARK || *ptr == CHAR_ASTERISK)\n        {\n        *parsed_pattern++ = META_COND_ASSERT;\n        ptr--;   /* Pull pointer back to the opening parenthesis. */\n        expect_cond_assert = 2;\n        break;  /* End of conditional */\n        }\n\n      /* Handle (?([+-]number)... */\n\n      if (read_number(&ptr, ptrend, cb->bracount, MAX_GROUP_NUMBER, ERR61, &i,\n          &errorcode))\n        {\n        PCRE2_ASSERT(i >= 0);\n        if (i <= 0)\n          {\n          errorcode = ERR15;\n          goto FAILED;\n          }\n        *parsed_pattern++ = META_COND_NUMBER;\n        offset = (PCRE2_SIZE)(ptr - cb->start_pattern - 2);\n        PUTOFFSET(offset, parsed_pattern);\n        *parsed_pattern++ = i;\n        }\n      else if (errorcode != 0) goto FAILED;   /* Number too big */\n\n      /* No number found. Handle the special case (?(VERSION[>]=n.m)... */\n\n      else if (ptrend - ptr >= 10 &&\n               PRIV(strncmp_c8)(ptr, STRING_VERSION, 7) == 0 &&\n               ptr[7] != CHAR_RIGHT_PARENTHESIS)\n        {\n        uint32_t ge = 0;\n        int major = 0;\n        int minor = 0;\n\n        ptr += 7;\n        if (*ptr == CHAR_GREATER_THAN_SIGN)\n          {\n          ge = 1;\n          ptr++;\n          }\n\n        /* NOTE: cannot write IS_DIGIT(*(++ptr)) here because IS_DIGIT\n        references its argument twice. */\n\n        if (*ptr != CHAR_EQUALS_SIGN || (ptr++, !IS_DIGIT(*ptr)))\n          {\n          errorcode = ERR79;\n          if (!ge) goto FAILED_FORWARD;\n          goto FAILED;\n          }\n\n        if (!read_number(&ptr, ptrend, -1, 1000, ERR79, &major, &errorcode))\n          goto FAILED;\n\n        if (ptr < ptrend && *ptr == CHAR_DOT)\n          {\n          if (++ptr >= ptrend || !IS_DIGIT(*ptr))\n            {\n            errorcode = ERR79;\n            if (ptr < ptrend) goto FAILED_FORWARD;\n            goto FAILED;\n            }\n          if (!read_number(&ptr, ptrend, -1, 1000, ERR79, &minor, &errorcode))\n            goto FAILED;\n          }\n        if (ptr >= ptrend || *ptr != CHAR_RIGHT_PARENTHESIS)\n          {\n          errorcode = ERR79;\n          if (ptr < ptrend) goto FAILED_FORWARD;\n          goto FAILED;\n          }\n\n        *parsed_pattern++ = META_COND_VERSION;\n        *parsed_pattern++ = ge;\n        *parsed_pattern++ = major;\n        *parsed_pattern++ = minor;\n        }\n\n      /* All the remaining cases now require us to read a name. We cannot at\n      this stage distinguish ambiguous cases such as (?(R12) which might be a\n      recursion test by number or a name, because the named groups have not yet\n      all been identified. Those cases are treated as names, but given a\n      different META code. */\n\n      else\n        {\n        BOOL was_r_ampersand = FALSE;\n\n        if (*ptr == CHAR_R && ptrend - ptr > 1 && ptr[1] == CHAR_AMPERSAND)\n          {\n          terminator = CHAR_RIGHT_PARENTHESIS;\n          was_r_ampersand = TRUE;\n          ptr++;\n          }\n        else if (*ptr == CHAR_LESS_THAN_SIGN)\n          terminator = CHAR_GREATER_THAN_SIGN;\n        else if (*ptr == CHAR_APOSTROPHE)\n          terminator = CHAR_APOSTROPHE;\n        else\n          {\n          terminator = CHAR_RIGHT_PARENTHESIS;\n          ptr--;   /* Point to char before name */\n          }\n\n        if (!read_name(&ptr, ptrend, utf, terminator, &offset, &name, &namelen,\n            &errorcode, cb)) goto FAILED;\n\n        /* Handle (?(R&name) */\n\n        if (was_r_ampersand)\n          {\n          *parsed_pattern = META_COND_RNAME;\n          ptr--;   /* Back to closing parens */\n          }\n\n        /* Handle (?(name). If the name is \"DEFINE\" we identify it with a\n        special code. Likewise if the name consists of R followed only by\n        digits. Otherwise, handle it like a quoted name. */\n\n        else if (terminator == CHAR_RIGHT_PARENTHESIS)\n          {\n          if (namelen == 6 && PRIV(strncmp_c8)(name, STRING_DEFINE, 6) == 0)\n            *parsed_pattern = META_COND_DEFINE;\n          else\n            {\n            for (i = 1; i < (int)namelen; i++)\n              if (!IS_DIGIT(name[i])) break;\n            *parsed_pattern = (*name == CHAR_R && i >= (int)namelen)?\n              META_COND_RNUMBER : META_COND_NAME;\n            }\n          ptr--;   /* Back to closing parens */\n          }\n\n        /* Handle (?('name') or (?(<name>) */\n\n        else *parsed_pattern = META_COND_NAME;\n\n        /* All these cases except DEFINE end with the name length and offset;\n        DEFINE just has an offset (for the \"too many branches\" error). */\n\n        if (*parsed_pattern++ != META_COND_DEFINE) *parsed_pattern++ = namelen;\n        PUTOFFSET(offset, parsed_pattern);\n        }  /* End cases that read a name */\n\n      /* Check the closing parenthesis of the condition */\n\n      if (ptr >= ptrend || *ptr != CHAR_RIGHT_PARENTHESIS)\n        {\n        errorcode = ERR24;\n        goto FAILED;\n        }\n      ptr++;\n      break;  /* End of condition processing */\n\n\n      /* ---- Atomic group ---- */\n\n      case CHAR_GREATER_THAN_SIGN:\n      ATOMIC_GROUP:                          /* Come from (*atomic: */\n      *parsed_pattern++ = META_ATOMIC;\n      nest_depth++;\n      ptr++;\n      break;\n\n\n      /* ---- Lookahead assertions ---- */\n\n      case CHAR_EQUALS_SIGN:\n      POSITIVE_LOOK_AHEAD:                   /* Come from (*pla: */\n      *parsed_pattern++ = META_LOOKAHEAD;\n      ptr++;\n      goto POST_ASSERTION;\n\n      case CHAR_ASTERISK:\n      POSITIVE_NONATOMIC_LOOK_AHEAD:         /* Come from (*napla: */\n      *parsed_pattern++ = META_LOOKAHEAD_NA;\n      ptr++;\n      goto POST_ASSERTION;\n\n      case CHAR_EXCLAMATION_MARK:\n      NEGATIVE_LOOK_AHEAD:                   /* Come from (*nla: */\n      *parsed_pattern++ = META_LOOKAHEADNOT;\n      ptr++;\n      goto POST_ASSERTION;\n\n\n      /* ---- Lookbehind assertions ---- */\n\n      /* (?< followed by = or ! or * is a lookbehind assertion. Otherwise (?<\n      is the start of the name of a capturing group. */\n\n      case CHAR_LESS_THAN_SIGN:\n      if (ptrend - ptr <= 1 ||\n         (ptr[1] != CHAR_EQUALS_SIGN &&\n          ptr[1] != CHAR_EXCLAMATION_MARK &&\n          ptr[1] != CHAR_ASTERISK))\n        {\n        terminator = CHAR_GREATER_THAN_SIGN;\n        goto DEFINE_NAME;\n        }\n      *parsed_pattern++ = (ptr[1] == CHAR_EQUALS_SIGN)?\n        META_LOOKBEHIND : (ptr[1] == CHAR_EXCLAMATION_MARK)?\n        META_LOOKBEHINDNOT : META_LOOKBEHIND_NA;\n\n      POST_LOOKBEHIND:           /* Come from (*plb: (*naplb: and (*nlb: */\n      *has_lookbehind = TRUE;\n      offset = (PCRE2_SIZE)(ptr - cb->start_pattern - 2);\n      PUTOFFSET(offset, parsed_pattern);\n      ptr += 2;\n      /* Fall through */\n\n      /* If the previous item was a condition starting (?(? an assertion,\n      optionally preceded by a callout, is expected. This is checked later on,\n      during actual compilation. However we need to identify this kind of\n      assertion in this pass because it must not be qualified. The value of\n      expect_cond_assert is set to 2 after (?(? is processed. We decrement it\n      for a callout - still leaving a positive value that identifies the\n      assertion. Multiple callouts or any other items will make it zero or\n      less, which doesn't matter because they will cause an error later. */\n\n      POST_ASSERTION:\n      nest_depth++;\n      if (prev_expect_cond_assert > 0)\n        {\n        if (top_nest == NULL) top_nest = (nest_save *)(cb->start_workspace);\n        else if (++top_nest >= end_nests)\n          {\n          errorcode = ERR84;\n          goto FAILED;\n          }\n        top_nest->nest_depth = nest_depth;\n        top_nest->flags = NSF_CONDASSERT;\n        top_nest->options = options & PARSE_TRACKED_OPTIONS;\n        top_nest->xoptions = xoptions & PARSE_TRACKED_EXTRA_OPTIONS;\n        }\n      break;\n\n\n      /* ---- Define a named group ---- */\n\n      /* A named group may be defined as (?'name') or (?<name>). In the latter\n      case we jump to DEFINE_NAME from the disambiguation of (?< above with the\n      terminator set to '>'. */\n\n      case CHAR_APOSTROPHE:\n      terminator = CHAR_APOSTROPHE;    /* Terminator */\n\n      DEFINE_NAME:\n      if (!read_name(&ptr, ptrend, utf, terminator, &offset, &name, &namelen,\n          &errorcode, cb)) goto FAILED;\n\n      /* We have a name for this capturing group. It is also assigned a number,\n      which is its primary means of identification. */\n\n      if (cb->bracount >= MAX_GROUP_NUMBER)\n        {\n        errorcode = ERR97;\n        goto FAILED;\n        }\n      cb->bracount++;\n      *parsed_pattern++ = META_CAPTURE | cb->bracount;\n      nest_depth++;\n\n      /* Check not too many names */\n\n      if (cb->names_found >= MAX_NAME_COUNT)\n        {\n        errorcode = ERR49;\n        goto FAILED;\n        }\n\n      /* Adjust the entry size to accommodate the longest name found. */\n\n      if (namelen + IMM2_SIZE + 1 > cb->name_entry_size)\n        cb->name_entry_size = (uint16_t)(namelen + IMM2_SIZE + 1);\n\n      /* Scan the list to check for duplicates. For duplicate names, if the\n      number is the same, break the loop, which causes the name to be\n      discarded; otherwise, if DUPNAMES is not set, give an error.\n      If it is set, allow the name with a different number, but continue\n      scanning in case this is a duplicate with the same number. For\n      non-duplicate names, give an error if the number is duplicated. */\n\n      is_dupname = FALSE;\n      hash = PRIV(compile_get_hash_from_name)(name, namelen);\n      ng = cb->named_groups;\n      for (i = 0; i < cb->names_found; i++, ng++)\n        {\n        if (namelen == ng->length && hash == NAMED_GROUP_GET_HASH(ng) &&\n            PRIV(strncmp)(name, ng->name, (PCRE2_SIZE)namelen) == 0)\n          {\n          /* When a bracket is referenced by the same name multiple\n          times, is not considered as a duplicate and ignored. */\n          if (ng->number == cb->bracount) break;\n          if ((options & PCRE2_DUPNAMES) == 0)\n            {\n            errorcode = ERR43;\n            goto FAILED;\n            }\n\n          ng->hash_dup |= NAMED_GROUP_IS_DUPNAME;\n          is_dupname = TRUE;                /* Mark as a duplicate */\n          cb->dupnames = TRUE;              /* Duplicate names exist */\n\n          /* The entry represents a duplicate. */\n          name = ng->name;\n          namelen = 0;\n\n          /* Even duplicated names may refer to the same\n          capture index. These references are also ignored. */\n          for (; i < cb->names_found; i++, ng++)\n            if (ng->name == name && ng->number == cb->bracount)\n              break;\n          break;\n          }\n        else if (ng->number == cb->bracount)\n          {\n          errorcode = ERR65;\n          goto FAILED;\n          }\n        }\n\n      /* Ignore duplicate with same number. */\n      if (i < cb->names_found) break;\n\n      /* Increase the list size if necessary */\n\n      if (cb->names_found >= cb->named_group_list_size)\n        {\n        uint32_t newsize = cb->named_group_list_size * 2;\n        named_group *newspace =\n          cb->cx->memctl.malloc(newsize * sizeof(named_group),\n          cb->cx->memctl.memory_data);\n        if (newspace == NULL)\n          {\n          errorcode = ERR21;\n          goto FAILED;\n          }\n\n        memcpy(newspace, cb->named_groups,\n          cb->named_group_list_size * sizeof(named_group));\n        if (cb->named_group_list_size > NAMED_GROUP_LIST_SIZE)\n          cb->cx->memctl.free((void *)cb->named_groups,\n          cb->cx->memctl.memory_data);\n        cb->named_groups = newspace;\n        cb->named_group_list_size = newsize;\n        }\n\n      /* Add this name to the list */\n      if (is_dupname)\n        hash |= NAMED_GROUP_IS_DUPNAME;\n\n      cb->named_groups[cb->names_found].name = name;\n      cb->named_groups[cb->names_found].length = (uint16_t)namelen;\n      cb->named_groups[cb->names_found].number = cb->bracount;\n      cb->named_groups[cb->names_found].hash_dup = hash;\n      cb->names_found++;\n      break;\n\n\n      /* ---- Perl extended character class ---- */\n\n      /* These are of the form '(?[...])'. We handle these via the same parser\n      that consumes ordinary '[...]' classes, but with a flag set to activate\n      the extended behaviour. */\n\n      case CHAR_LEFT_SQUARE_BRACKET:\n      class_mode_state = CLASS_MODE_PERL_EXT;\n      c = *ptr++;\n      goto FROM_PERL_EXTENDED_CLASS;\n      }        /* End of (? switch */\n    break;     /* End of ( handling */\n\n\n    /* ---- Branch terminators ---- */\n\n    /* Alternation: reset the capture count if we are in a (?| group. */\n\n    case CHAR_VERTICAL_LINE:\n    if (top_nest != NULL && top_nest->nest_depth == nest_depth &&\n        (top_nest->flags & NSF_RESET) != 0)\n      {\n      if (cb->bracount > top_nest->max_group)\n        top_nest->max_group = (uint16_t)cb->bracount;\n      cb->bracount = top_nest->reset_group;\n      }\n    *parsed_pattern++ = META_ALT;\n    break;\n\n    /* End of group; reset the capture count to the maximum if we are in a (?|\n    group and/or reset the options that are tracked during parsing. Disallow\n    quantifier for a condition that is an assertion. */\n\n    case CHAR_RIGHT_PARENTHESIS:\n    okquantifier = TRUE;\n    if (top_nest != NULL && top_nest->nest_depth == nest_depth)\n      {\n      options = (options & ~PARSE_TRACKED_OPTIONS) | top_nest->options;\n      xoptions = (xoptions & ~PARSE_TRACKED_EXTRA_OPTIONS) | top_nest->xoptions;\n      if ((top_nest->flags & NSF_RESET) != 0 &&\n          top_nest->max_group > cb->bracount)\n        cb->bracount = top_nest->max_group;\n      if ((top_nest->flags & NSF_CONDASSERT) != 0)\n        okquantifier = FALSE;\n\n      if ((top_nest->flags & NSF_ATOMICSR) != 0)\n        {\n        *parsed_pattern++ = META_KET;\n\n#ifdef PCRE2_DEBUG\n        PCRE2_ASSERT(parsed_pattern_extra > 0);\n        parsed_pattern_extra--;\n#endif\n        }\n\n      if (top_nest == (nest_save *)(cb->start_workspace)) top_nest = NULL;\n        else top_nest--;\n      }\n    if (nest_depth == 0)    /* Unmatched closing parenthesis */\n      {\n      errorcode = ERR22;\n      goto FAILED;\n      }\n    nest_depth--;\n    *parsed_pattern++ = META_KET;\n    break;\n    }  /* End of switch on pattern character */\n  }    /* End of main character scan loop */\n\n/* End of pattern reached. Check for missing ) at the end of a verb name. */\n\nif (inverbname && ptr >= ptrend)\n  {\n  errorcode = ERR60;\n  goto FAILED;\n  }\n\n\nPARSED_END:\n\nPCRE2_ASSERT((parsed_pattern - parsed_pattern_check) +\n             (parsed_pattern_extra - parsed_pattern_extra_check) <=\n               max_parsed_pattern(ptr_check, ptr, utf, options));\n\n/* Manage callout for the final item */\n\nparsed_pattern = manage_callouts(ptr, &previous_callout, auto_callout,\n  parsed_pattern, cb);\n\n/* Insert trailing items for word and line matching (features provided for the\nbenefit of pcre2grep). */\n\nif ((xoptions & PCRE2_EXTRA_MATCH_LINE) != 0)\n  {\n  *parsed_pattern++ = META_KET;\n  *parsed_pattern++ = META_DOLLAR;\n  }\nelse if ((xoptions & PCRE2_EXTRA_MATCH_WORD) != 0)\n  {\n  *parsed_pattern++ = META_KET;\n  *parsed_pattern++ = META_ESCAPE + ESC_b;\n  }\n\n/* Terminate the parsed pattern, then return success if all groups are closed.\nOtherwise we have unclosed parentheses. */\n\n/* LCOV_EXCL_START */\nif (parsed_pattern >= parsed_pattern_end)\n  {\n  PCRE2_DEBUG_UNREACHABLE();\n  errorcode = ERR63;  /* Internal error (parsed pattern overflow) */\n  goto FAILED;\n  }\n/* LCOV_EXCL_STOP */\n\n*parsed_pattern = META_END;\nif (nest_depth == 0) return 0;\n\nUNCLOSED_PARENTHESIS:\nerrorcode = ERR14;\n\n/* Come here for all failures. */\n\nFAILED:\ncb->erroroffset = (PCRE2_SIZE)(ptr - cb->start_pattern);\nreturn errorcode;\n\n/* Some errors need to indicate the previous character. */\n\nFAILED_BACK:\nptr--;\n#ifdef SUPPORT_UNICODE\nif (utf) BACKCHAR(ptr);\n#endif\ngoto FAILED;\n\n/* Some errors need to indicate the next character. */\n\nFAILED_FORWARD:\nptr++;\n#ifdef SUPPORT_UNICODE\nif (utf) FORWARDCHARTEST(ptr, ptrend);\n#endif\ngoto FAILED;\n}\n\n\n\n/*************************************************\n*       Find first significant opcode            *\n*************************************************/\n\n/* This is called by several functions that scan a compiled expression looking\nfor a fixed first character, or an anchoring opcode etc. It skips over things\nthat do not influence this. For some calls, it makes sense to skip negative\nforward and all backward assertions, and also the \\b assertion; for others it\ndoes not.\n\nArguments:\n  code         pointer to the start of the group\n  skipassert   TRUE if certain assertions are to be skipped\n\nReturns:       pointer to the first significant opcode\n*/\n\nstatic const PCRE2_UCHAR*\nfirst_significant_code(PCRE2_SPTR code, BOOL skipassert)\n{\nfor (;;)\n  {\n  switch ((int)*code)\n    {\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK:\n    case OP_ASSERTBACK_NOT:\n    case OP_ASSERTBACK_NA:\n    if (!skipassert) return code;\n    do code += GET(code, 1); while (*code == OP_ALT);\n    code += PRIV(OP_lengths)[*code];\n    break;\n\n    case OP_WORD_BOUNDARY:\n    case OP_NOT_WORD_BOUNDARY:\n    case OP_UCP_WORD_BOUNDARY:\n    case OP_NOT_UCP_WORD_BOUNDARY:\n    if (!skipassert) return code;\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case OP_CALLOUT:\n    case OP_CREF:\n    case OP_DNCREF:\n    case OP_RREF:\n    case OP_DNRREF:\n    case OP_FALSE:\n    case OP_TRUE:\n    code += PRIV(OP_lengths)[*code];\n    break;\n\n    case OP_CALLOUT_STR:\n    code += GET(code, 1 + 2*LINK_SIZE);\n    break;\n\n    case OP_SKIPZERO:\n    code += 2 + GET(code, 2) + LINK_SIZE;\n    break;\n\n    case OP_COND:\n    case OP_SCOND:\n    if (code[1+LINK_SIZE] != OP_FALSE ||   /* Not DEFINE */\n        code[GET(code, 1)] != OP_KET)      /* More than one branch */\n      return code;\n    code += GET(code, 1) + 1 + LINK_SIZE;\n    break;\n\n    case OP_MARK:\n    case OP_COMMIT_ARG:\n    case OP_PRUNE_ARG:\n    case OP_SKIP_ARG:\n    case OP_THEN_ARG:\n    code += code[1] + PRIV(OP_lengths)[*code];\n    break;\n\n    default:\n    return code;\n    }\n  }\n\n/* LCOV_EXCL_START */\nPCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */\n/* LCOV_EXCL_STOP */\n}\n\n\n\n/*************************************************\n*           Compile one branch                   *\n*************************************************/\n\n/* Scan the parsed pattern, compiling it into the a vector of PCRE2_UCHAR. If\nthe options are changed during the branch, the pointer is used to change the\nexternal options bits. This function is used during the pre-compile phase when\nwe are trying to find out the amount of memory needed, as well as during the\nreal compile phase. The value of lengthptr distinguishes the two phases.\n\nArguments:\n  optionsptr        pointer to the option bits\n  xoptionsptr       pointer to the extra option bits\n  codeptr           points to the pointer to the current code point\n  pptrptr           points to the current parsed pattern pointer\n  errorcodeptr      points to error code variable\n  firstcuptr        place to put the first required code unit\n  firstcuflagsptr   place to put the first code unit flags\n  reqcuptr          place to put the last required code unit\n  reqcuflagsptr     place to put the last required code unit flags\n  bcptr             points to current branch chain\n  open_caps         points to current capitem\n  cb                contains pointers to tables etc.\n  lengthptr         NULL during the real compile phase\n                    points to length accumulator during pre-compile phase\n\nReturns:            0 There's been an error, *errorcodeptr is non-zero\n                   +1 Success, this branch must match at least one character\n                   -1 Success, this branch may match an empty string\n*/\n\nstatic int\ncompile_branch(uint32_t *optionsptr, uint32_t *xoptionsptr,\n  PCRE2_UCHAR **codeptr, uint32_t **pptrptr, int *errorcodeptr,\n  uint32_t *firstcuptr, uint32_t *firstcuflagsptr, uint32_t *reqcuptr,\n  uint32_t *reqcuflagsptr, branch_chain *bcptr, open_capitem *open_caps,\n  compile_block *cb, PCRE2_SIZE *lengthptr)\n{\nint bravalue = 0;\nint okreturn = -1;\nint group_return = 0;\nuint32_t repeat_min = 0, repeat_max = 0;      /* To please picky compilers */\nuint32_t greedy_default, greedy_non_default;\nuint32_t repeat_type, op_type;\nuint32_t options = *optionsptr;               /* May change dynamically */\nuint32_t xoptions = *xoptionsptr;             /* May change dynamically */\nuint32_t firstcu, reqcu;\nuint32_t zeroreqcu, zerofirstcu;\nuint32_t *pptr = *pptrptr;\nuint32_t meta, meta_arg;\nuint32_t firstcuflags, reqcuflags;\nuint32_t zeroreqcuflags, zerofirstcuflags;\nuint32_t req_caseopt, reqvary, tempreqvary;\n/* Some opcodes, such as META_CAPTURE_NUMBER or META_CAPTURE_NAME,\ndepends on the previous value of offset. */\nPCRE2_SIZE offset = 0;\nPCRE2_SIZE length_prevgroup = 0;\nPCRE2_UCHAR *code = *codeptr;\nPCRE2_UCHAR *last_code = code;\nPCRE2_UCHAR *orig_code = code;\nPCRE2_UCHAR *tempcode;\nPCRE2_UCHAR *previous = NULL;\nPCRE2_UCHAR op_previous;\nBOOL groupsetfirstcu = FALSE;\nBOOL had_accept = FALSE;\nBOOL matched_char = FALSE;\nBOOL previous_matched_char = FALSE;\nBOOL reset_caseful = FALSE;\n\n/* We can fish out the UTF setting once and for all into a BOOL, but we must\nnot do this for other options (e.g. PCRE2_EXTENDED) that may change dynamically\nas we process the pattern. */\n\n#ifdef SUPPORT_UNICODE\nBOOL utf = (options & PCRE2_UTF) != 0;\nBOOL ucp = (options & PCRE2_UCP) != 0;\n#else  /* No Unicode support */\nBOOL utf = FALSE;\n#endif\n\n/* Set up the default and non-default settings for greediness */\n\ngreedy_default = ((options & PCRE2_UNGREEDY) != 0);\ngreedy_non_default = greedy_default ^ 1;\n\n/* Initialize no first unit, no required unit. REQ_UNSET means \"no char\nmatching encountered yet\". It gets changed to REQ_NONE if we hit something that\nmatches a non-fixed first unit; reqcu just remains unset if we never find one.\n\nWhen we hit a repeat whose minimum is zero, we may have to adjust these values\nto take the zero repeat into account. This is implemented by setting them to\nzerofirstcu and zeroreqcu when such a repeat is encountered. The individual\nitem types that can be repeated set these backoff variables appropriately. */\n\nfirstcu = reqcu = zerofirstcu = zeroreqcu = 0;\nfirstcuflags = reqcuflags = zerofirstcuflags = zeroreqcuflags = REQ_UNSET;\n\n/* The variable req_caseopt contains either the REQ_CASELESS bit or zero,\naccording to the current setting of the caseless flag. The REQ_CASELESS value\nleaves the lower 28 bit empty. It is added into the firstcu or reqcu variables\nto record the case status of the value. This is used only for ASCII characters.\n*/\n\nreq_caseopt = ((options & PCRE2_CASELESS) != 0)? REQ_CASELESS : 0;\n\n/* Switch on next META item until the end of the branch */\n\nfor (;; pptr++)\n  {\n  BOOL possessive_quantifier;\n  BOOL note_group_empty;\n  uint32_t mclength;\n  uint32_t skipunits;\n  uint32_t subreqcu, subfirstcu;\n  uint32_t groupnumber;\n  uint32_t verbarglen, verbculen;\n  uint32_t subreqcuflags, subfirstcuflags;\n  open_capitem *oc;\n  PCRE2_UCHAR mcbuffer[8];\n\n  /* Get next META item in the pattern and its potential argument. */\n\n  meta = META_CODE(*pptr);\n  meta_arg = META_DATA(*pptr);\n\n  /* If we are in the pre-compile phase, accumulate the length used for the\n  previous cycle of this loop, unless the next item is a quantifier. */\n\n  if (lengthptr != NULL)\n    {\n    /* LCOV_EXCL_START */\n    if (code >= cb->start_workspace + cb->workspace_size)\n      {\n      PCRE2_DEBUG_UNREACHABLE();\n      *errorcodeptr = ERR52;  /* Over-ran workspace - internal error */\n      cb->erroroffset = 0;\n      return 0;\n      }\n    /* LCOV_EXCL_STOP */\n\n    if (code > cb->start_workspace + cb->workspace_size -\n        WORK_SIZE_SAFETY_MARGIN)                       /* Check for overrun */\n      {\n      *errorcodeptr = ERR86;  /* Pattern too complicated */\n      cb->erroroffset = 0;\n      return 0;\n      }\n\n    /* There is at least one situation where code goes backwards: this is the\n    case of a zero quantifier after a class (e.g. [ab]{0}). When the quantifier\n    is processed, the whole class is eliminated. However, it is created first,\n    so we have to allow memory for it. Therefore, don't ever reduce the length\n    at this point. */\n\n    if (code < last_code) code = last_code;\n\n    /* If the next thing is not a quantifier, we add the length of the previous\n    item into the total, and reset the code pointer to the start of the\n    workspace. Otherwise leave the previous item available to be quantified. */\n\n    if (meta < META_ASTERISK || meta > META_MINMAX_QUERY)\n      {\n      if (OFLOW_MAX - *lengthptr < (PCRE2_SIZE)(code - orig_code))\n        {\n        *errorcodeptr = ERR20;   /* Integer overflow */\n        cb->erroroffset = 0;\n        return 0;\n        }\n      *lengthptr += (PCRE2_SIZE)(code - orig_code);\n      if (*lengthptr > MAX_PATTERN_SIZE)\n        {\n        *errorcodeptr = ERR20;   /* Pattern is too large */\n        cb->erroroffset = 0;\n        return 0;\n        }\n      code = orig_code;\n      }\n\n    /* Remember where this code item starts so we can catch the \"backwards\"\n    case above next time round. */\n\n    last_code = code;\n    }\n\n  /* Process the next parsed pattern item. If it is not a quantifier, remember\n  where it starts so that it can be quantified when a quantifier follows.\n  Checking for the legality of quantifiers happens in parse_regex(), except for\n  a quantifier after an assertion that is a condition. */\n\n  if (meta < META_ASTERISK || meta > META_MINMAX_QUERY)\n    {\n    previous = code;\n    if (matched_char && !had_accept) okreturn = 1;\n    }\n\n  previous_matched_char = matched_char;\n  matched_char = FALSE;\n  note_group_empty = FALSE;\n  skipunits = 0;         /* Default value for most subgroups */\n\n  switch(meta)\n    {\n    /* ===================================================================*/\n    /* The branch terminates at pattern end or | or ) */\n\n    case META_END:\n    case META_ALT:\n    case META_KET:\n    *firstcuptr = firstcu;\n    *firstcuflagsptr = firstcuflags;\n    *reqcuptr = reqcu;\n    *reqcuflagsptr = reqcuflags;\n    *codeptr = code;\n    *pptrptr = pptr;\n    return okreturn;\n\n\n    /* ===================================================================*/\n    /* Handle single-character metacharacters. In multiline mode, ^ disables\n    the setting of any following char as a first character. */\n\n    case META_CIRCUMFLEX:\n    if ((options & PCRE2_MULTILINE) != 0)\n      {\n      if (firstcuflags == REQ_UNSET)\n        zerofirstcuflags = firstcuflags = REQ_NONE;\n      *code++ = OP_CIRCM;\n      }\n    else *code++ = OP_CIRC;\n    break;\n\n    case META_DOLLAR:\n    *code++ = ((options & PCRE2_MULTILINE) != 0)? OP_DOLLM : OP_DOLL;\n    break;\n\n    /* There can never be a first char if '.' is first, whatever happens about\n    repeats. The value of reqcu doesn't change either. */\n\n    case META_DOT:\n    matched_char = TRUE;\n    if (firstcuflags == REQ_UNSET) firstcuflags = REQ_NONE;\n    zerofirstcu = firstcu;\n    zerofirstcuflags = firstcuflags;\n    zeroreqcu = reqcu;\n    zeroreqcuflags = reqcuflags;\n    *code++ = ((options & PCRE2_DOTALL) != 0)? OP_ALLANY: OP_ANY;\n    break;\n\n\n    /* ===================================================================*/\n    /* Empty character classes are allowed if PCRE2_ALLOW_EMPTY_CLASS is set.\n    Otherwise, an initial ']' is taken as a data character. When empty classes\n    are allowed, [] must generate an empty class - we have no dedicated opcode\n    to optimise the representation, but it's a rare case (the '(*FAIL)'\n    construct would be a clearer way for a pattern author to represent a\n    non-matching branch, but it does have different semantics to '[]' if both\n    are followed by a quantifier). The empty-negated [^] matches any character,\n    so is useful: generate OP_ALLANY for this. */\n\n    case META_CLASS_EMPTY:\n    case META_CLASS_EMPTY_NOT:\n    matched_char = TRUE;\n    if (meta == META_CLASS_EMPTY_NOT) *code++ = OP_ALLANY;\n    else\n      {\n      *code++ = OP_CLASS;\n      memset(code, 0, 32);\n      code += 32 / sizeof(PCRE2_UCHAR);\n      }\n\n    if (firstcuflags == REQ_UNSET) firstcuflags = REQ_NONE;\n    zerofirstcu = firstcu;\n    zerofirstcuflags = firstcuflags;\n    break;\n\n\n    /* ===================================================================*/\n    /* Non-empty character class. If the included characters are all < 256, we\n    build a 32-byte bitmap of the permitted characters, except in the special\n    case where there is only one such character. For negated classes, we build\n    the map as usual, then invert it at the end. However, we use a different\n    opcode so that data characters > 255 can be handled correctly.\n\n    If the class contains characters outside the 0-255 range, a different\n    opcode is compiled. It may optionally have a bit map for characters < 256,\n    but those above are explicitly listed afterwards. A flag code unit tells\n    whether the bitmap is present, and whether this is a negated class or\n    not. */\n\n    case META_CLASS_NOT:\n    case META_CLASS:\n    matched_char = TRUE;\n\n    /* Check for complex extended classes and handle them separately. */\n\n    if ((*pptr & CLASS_IS_ECLASS) != 0)\n      {\n      if (!PRIV(compile_class_nested)(options, xoptions, &pptr, &code,\n                                      errorcodeptr, cb, lengthptr))\n        return 0;\n      goto CLASS_END_PROCESSING;\n      }\n\n    /* We can optimize the case of a single character in a class by generating\n    OP_CHAR or OP_CHARI if it's positive, or OP_NOT or OP_NOTI if it's\n    negative. In the negative case there can be no first char if this item is\n    first, whatever repeat count may follow. In the case of reqcu, save the\n    previous value for reinstating. */\n\n    /* NOTE: at present this optimization is not effective if the only\n    character in a class in 32-bit, non-UCP mode has its top bit set. */\n\n    if (pptr[1] < META_END && pptr[2] == META_CLASS_END)\n      {\n      uint32_t c = pptr[1];\n\n      pptr += 2;                 /* Move on to class end */\n      if (meta == META_CLASS)    /* A positive one-char class can be */\n        {                        /* handled as a normal literal character. */\n        meta = c;                /* Set up the character */\n        goto NORMAL_CHAR_SET;\n        }\n\n      /* Handle a negative one-character class */\n\n      zeroreqcu = reqcu;\n      zeroreqcuflags = reqcuflags;\n      if (firstcuflags == REQ_UNSET) firstcuflags = REQ_NONE;\n      zerofirstcu = firstcu;\n      zerofirstcuflags = firstcuflags;\n\n      /* For caseless UTF or UCP mode, check whether this character has more\n      than one other case. If so, generate a special OP_NOTPROP item instead of\n      OP_NOTI. When restricted by PCRE2_EXTRA_CASELESS_RESTRICT, ignore any\n      caseless set that starts with an ASCII character. If the character is\n      affected by the special Turkish rules, hardcode the not-matching\n      characters using a caseset. */\n\n#ifdef SUPPORT_UNICODE\n      if ((utf||ucp) && (options & PCRE2_CASELESS) != 0)\n        {\n        uint32_t caseset;\n\n        if ((xoptions & (PCRE2_EXTRA_TURKISH_CASING|PCRE2_EXTRA_CASELESS_RESTRICT)) ==\n              PCRE2_EXTRA_TURKISH_CASING &&\n            UCD_ANY_I(c))\n          {\n          caseset = PRIV(ucd_turkish_dotted_i_caseset) + (UCD_DOTTED_I(c)? 0 : 3);\n          }\n        else if ((caseset = UCD_CASESET(c)) != 0 &&\n                 (xoptions & PCRE2_EXTRA_CASELESS_RESTRICT) != 0 &&\n                 PRIV(ucd_caseless_sets)[caseset] < 128)\n          {\n          caseset = 0;  /* Ignore the caseless set if it's restricted. */\n          }\n\n        if (caseset != 0)\n          {\n          *code++ = OP_NOTPROP;\n          *code++ = PT_CLIST;\n          *code++ = caseset;\n          break;   /* We are finished with this class */\n          }\n        }\n#endif\n      /* Char has only one other (usable) case, or UCP not available */\n\n      *code++ = ((options & PCRE2_CASELESS) != 0)? OP_NOTI: OP_NOT;\n      code += PUTCHAR(c, code);\n      break;   /* We are finished with this class */\n      }        /* End of 1-char optimization */\n\n    /* Handle character classes that contain more than just one literal\n    character. If there are exactly two characters in a positive class, see if\n    they are case partners. This can be optimized to generate a caseless single\n    character match (which also sets first/required code units if relevant).\n    When casing restrictions apply, ignore a caseless set if both characters\n    are ASCII. When Turkish casing applies, an 'i' does not match its normal\n    Unicode \"othercase\". */\n\n    if (meta == META_CLASS && pptr[1] < META_END && pptr[2] < META_END &&\n        pptr[3] == META_CLASS_END)\n      {\n      uint32_t c = pptr[1];\n\n#ifdef SUPPORT_UNICODE\n      if ((UCD_CASESET(c) == 0 ||\n           ((xoptions & PCRE2_EXTRA_CASELESS_RESTRICT) != 0 &&\n            c < 128 && pptr[2] < 128)) &&\n          !((xoptions & (PCRE2_EXTRA_TURKISH_CASING|PCRE2_EXTRA_CASELESS_RESTRICT)) ==\n              PCRE2_EXTRA_TURKISH_CASING &&\n            UCD_ANY_I(c)))\n#endif\n        {\n        uint32_t d;\n\n#ifdef SUPPORT_UNICODE\n        if ((utf || ucp) && c > 127) d = UCD_OTHERCASE(c); else\n#endif\n          {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n          if (c > 255) d = c; else\n#endif\n          d = TABLE_GET(c, cb->fcc, c);\n          }\n\n        if (c != d && pptr[2] == d)\n          {\n          pptr += 3;                 /* Move on to class end */\n          meta = c;\n          if ((options & PCRE2_CASELESS) == 0)\n            {\n            reset_caseful = TRUE;\n            options |= PCRE2_CASELESS;\n            req_caseopt = REQ_CASELESS;\n            }\n          goto CLASS_CASELESS_CHAR;\n          }\n        }\n      }\n\n    /* Now emit the OP_CLASS/OP_NCLASS/OP_XCLASS/OP_ALLANY opcode. */\n\n    pptr = PRIV(compile_class_not_nested)(options, xoptions, pptr + 1,\n                                          &code, meta == META_CLASS_NOT, NULL,\n                                          errorcodeptr, cb, lengthptr);\n    if (pptr == NULL) return 0;\n    PCRE2_ASSERT(*pptr == META_CLASS_END);\n\n    CLASS_END_PROCESSING:\n\n    /* If this class is the first thing in the branch, there can be no first\n    char setting, whatever the repeat count. Any reqcu setting must remain\n    unchanged after any kind of repeat. */\n\n    if (firstcuflags == REQ_UNSET) firstcuflags = REQ_NONE;\n    zerofirstcu = firstcu;\n    zerofirstcuflags = firstcuflags;\n    zeroreqcu = reqcu;\n    zeroreqcuflags = reqcuflags;\n    break;  /* End of class processing */\n\n\n    /* ===================================================================*/\n    /* Deal with (*VERB)s. */\n\n    /* Check for open captures before ACCEPT and close those that are within\n    the same assertion level, also converting ACCEPT to ASSERT_ACCEPT in an\n    assertion. In the first pass, just accumulate the length required;\n    otherwise hitting (*ACCEPT) inside many nested parentheses can cause\n    workspace overflow. Do not set firstcu after *ACCEPT. */\n\n    case META_ACCEPT:\n    cb->had_accept = had_accept = TRUE;\n    for (oc = open_caps;\n         oc != NULL && oc->assert_depth >= cb->assert_depth;\n         oc = oc->next)\n      {\n      if (lengthptr != NULL)\n        {\n        *lengthptr += CU2BYTES(1) + IMM2_SIZE;\n        }\n      else\n        {\n        *code++ = OP_CLOSE;\n        PUT2INC(code, 0, oc->number);\n        }\n      }\n    *code++ = (cb->assert_depth > 0)? OP_ASSERT_ACCEPT : OP_ACCEPT;\n    if (firstcuflags == REQ_UNSET) firstcuflags = REQ_NONE;\n    break;\n\n    case META_PRUNE:\n    case META_SKIP:\n    cb->had_pruneorskip = TRUE;\n    PCRE2_FALLTHROUGH /* Fall through */\n    case META_COMMIT:\n    case META_FAIL:\n    *code++ = verbops[(meta - META_MARK) >> 16];\n    break;\n\n    case META_THEN:\n    cb->external_flags |= PCRE2_HASTHEN;\n    *code++ = OP_THEN;\n    break;\n\n    /* Handle verbs with arguments. Arguments can be very long, especially in\n    16- and 32-bit modes, and can overflow the workspace in the first pass.\n    However, the argument length is constrained to be small enough to fit in\n    one code unit. This check happens in parse_regex(). In the first pass,\n    instead of putting the argument into memory, we just update the length\n    counter and set up an empty argument. */\n\n    case META_THEN_ARG:\n    cb->external_flags |= PCRE2_HASTHEN;\n    goto VERB_ARG;\n\n    case META_PRUNE_ARG:\n    case META_SKIP_ARG:\n    cb->had_pruneorskip = TRUE;\n    PCRE2_FALLTHROUGH /* Fall through */\n    case META_MARK:\n    case META_COMMIT_ARG:\n    VERB_ARG:\n    *code++ = verbops[(meta - META_MARK) >> 16];\n    /* The length is in characters. */\n    verbarglen = *(++pptr);\n    verbculen = 0;\n    tempcode = code++;\n    for (int i = 0; i < (int)verbarglen; i++)\n      {\n      meta = *(++pptr);\n#ifdef SUPPORT_UNICODE\n      if (utf) mclength = PRIV(ord2utf)(meta, mcbuffer); else\n#endif\n        {\n        mclength = 1;\n        mcbuffer[0] = meta;\n        }\n      if (lengthptr != NULL) *lengthptr += mclength; else\n        {\n        memcpy(code, mcbuffer, CU2BYTES(mclength));\n        code += mclength;\n        verbculen += mclength;\n        }\n      }\n\n    *tempcode = verbculen;   /* Fill in the code unit length */\n    *code++ = 0;             /* Terminating zero */\n    break;\n\n\n    /* ===================================================================*/\n    /* Handle options change. The new setting must be passed back for use in\n    subsequent branches. Reset the greedy defaults and the case value for\n    firstcu and reqcu. */\n\n    case META_OPTIONS:\n    *optionsptr = options = *(++pptr);\n    *xoptionsptr = xoptions = *(++pptr);\n    greedy_default = ((options & PCRE2_UNGREEDY) != 0);\n    greedy_non_default = greedy_default ^ 1;\n    req_caseopt = ((options & PCRE2_CASELESS) != 0)? REQ_CASELESS : 0;\n    break;\n\n    /* ===================================================================*/\n    /* Handle scan substring. Scan substring assertion starts with META_SCS,\n    which recursively calls compile_branch. The first opcode processed by\n    this recursive call is always META_OFFSET. */\n\n    case META_OFFSET:\n    if (lengthptr != NULL)\n      {\n      pptr = PRIV(compile_parse_scan_substr_args)(pptr, errorcodeptr, cb, lengthptr);\n      if (pptr == NULL)\n        return 0;\n      break;\n      }\n\n    while (TRUE)\n      {\n      int count, index;\n      named_group *ng;\n\n      switch (META_CODE(*pptr))\n        {\n        case META_OFFSET:\n        pptr++;\n        SKIPOFFSET(pptr);\n        continue;\n\n        case META_CAPTURE_NAME:\n        ng = cb->named_groups + pptr[1];\n        pptr += 2;\n        count = 0;\n        index = 0;\n\n        if (!PRIV(compile_find_dupname_details)(ng->name, ng->length, &index,\n          &count, errorcodeptr, cb)) return 0;\n\n        code[0] = OP_DNCREF;\n        PUT2(code, 1, index);\n        PUT2(code, 1 + IMM2_SIZE, count);\n        code += 1 + 2 * IMM2_SIZE;\n        continue;\n\n        case META_CAPTURE_NUMBER:\n        pptr += 2;\n        if (pptr[-1] == 0) continue;\n\n        code[0] = OP_CREF;\n        PUT2(code, 1, pptr[-1]);\n        code += 1 + IMM2_SIZE;\n        continue;\n\n        default:\n        break;\n        }\n\n      break;\n      }\n    --pptr;\n    break;\n\n    case META_SCS:\n    bravalue = OP_ASSERT_SCS;\n    cb->assert_depth += 1;\n    goto GROUP_PROCESS;\n\n\n    /* ===================================================================*/\n    /* Handle conditional subpatterns. The case of (?(Rdigits) is ambiguous\n    because it could be a numerical check on recursion, or a name check on a\n    group's being set. The pre-pass sets up META_COND_RNUMBER as a name so that\n    we can handle it either way. We first try for a name; if not found, process\n    the number. */\n\n    case META_COND_RNUMBER:   /* (?(Rdigits) */\n    case META_COND_NAME:      /* (?(name) or (?'name') or ?(<name>) */\n    case META_COND_RNAME:     /* (?(R&name) - test for recursion */\n    bravalue = OP_COND;\n\n    if (lengthptr != NULL)\n      {\n      uint32_t i;\n      PCRE2_SPTR name;\n      named_group *ng;\n      uint32_t *start_pptr = pptr;\n      uint32_t length = *(++pptr);\n\n      GETPLUSOFFSET(offset, pptr);\n      name = cb->start_pattern + offset;\n\n      /* In the first pass, the names generated in the pre-pass are available,\n      but the main name table has not yet been created. Scan the list of names\n      generated in the pre-pass in order to get a number and whether or not\n      this name is duplicated. If it is not duplicated, we can handle it as a\n      numerical group. */\n\n      ng = PRIV(compile_find_named_group)(name, length, cb);\n\n      if (ng == NULL)\n        {\n        /* If the name was not found we have a bad reference, unless we are\n        dealing with R<digits>, which is treated as a recursion test by\n        number. */\n\n        groupnumber = 0;\n        if (meta == META_COND_RNUMBER)\n          {\n          for (i = 1; i < length; i++)\n            {\n            groupnumber = groupnumber * 10 + (name[i] - CHAR_0);\n            if (groupnumber > MAX_GROUP_NUMBER)\n              {\n              *errorcodeptr = ERR61;\n              cb->erroroffset = offset + i;\n              return 0;\n              }\n            }\n          }\n\n        if (meta != META_COND_RNUMBER || groupnumber > cb->bracount)\n          {\n          *errorcodeptr = ERR15;\n          cb->erroroffset = offset;\n          return 0;\n          }\n\n        /* (?Rdigits) treated as a recursion reference by number. A value of\n        zero (which is the result of both (?R) and (?R0)) means \"any\", and is\n        translated into RREF_ANY (which is 0xffff). */\n\n        if (groupnumber == 0) groupnumber = RREF_ANY;\n        PCRE2_ASSERT(start_pptr[0] == META_COND_RNUMBER);\n        start_pptr[1] = groupnumber;\n        skipunits = 1+IMM2_SIZE;\n        goto GROUP_PROCESS_NOTE_EMPTY;\n        }\n\n      /* From here on, we know we have a name (not a number),\n      so treat META_COND_RNUMBER the same as META_COND_NAME. */\n      if (meta == META_COND_RNUMBER) meta = META_COND_NAME;\n\n      if ((ng->hash_dup & NAMED_GROUP_IS_DUPNAME) == 0)\n        {\n        /* Found a non-duplicated name. Since it is a global,\n        it is enough to update it in the pre-processing phase. */\n        if (ng->number > cb->top_backref) cb->top_backref = ng->number;\n\n        start_pptr[0] = meta;\n        start_pptr[1] = ng->number;\n\n        skipunits = 1 + IMM2_SIZE;\n        goto GROUP_PROCESS_NOTE_EMPTY;\n        }\n\n      /* We have a duplicated name. In the compile pass we have to search the\n      main table in order to get the index and count values. */\n\n      start_pptr[0] = meta | 1;\n      start_pptr[1] = (uint32_t)(ng - cb->named_groups);\n\n      /* A duplicated name was found. Note that if an R<digits> name is found\n      (META_COND_RNUMBER), it is a reference test, not a recursion test. */\n      skipunits = 1 + 2 * IMM2_SIZE;\n      }\n    else\n      {\n      /* Otherwise lengthptr equals to NULL,\n      which is the second phase of compilation. */\n      int count, index;\n      named_group *ng;\n\n      /* Generate code using the data\n      collected in the pre-processing phase. */\n\n      if (meta == META_COND_RNUMBER)\n        {\n        code[1+LINK_SIZE] = OP_RREF;\n        PUT2(code, 2 + LINK_SIZE, pptr[1]);\n        skipunits = 1 + IMM2_SIZE;\n        pptr += 1 + SIZEOFFSET;\n        goto GROUP_PROCESS_NOTE_EMPTY;\n        }\n\n      if (meta_arg == 0)\n        {\n        code[1+LINK_SIZE] = (meta == META_COND_RNAME)? OP_RREF : OP_CREF;\n        PUT2(code, 2 + LINK_SIZE, pptr[1]);\n        skipunits = 1 + IMM2_SIZE;\n        pptr += 1 + SIZEOFFSET;\n        goto GROUP_PROCESS_NOTE_EMPTY;\n        }\n\n      ng = cb->named_groups + pptr[1];\n      count = 0;  /* Values for first pass (avoids compiler warning) */\n      index = 0;\n\n      /* The failed case is an internal error. */\n      if (!PRIV(compile_find_dupname_details)(ng->name, ng->length, &index,\n            &count, errorcodeptr, cb)) return 0;\n\n      /* A duplicated name was found. Note that if an R<digits> name is found\n      (META_COND_RNUMBER), it is a reference test, not a recursion test. */\n\n      code[1 + LINK_SIZE] = (meta == META_COND_RNAME)? OP_DNRREF : OP_DNCREF;\n\n      /* Insert appropriate data values. */\n      PUT2(code, 2 + LINK_SIZE, index);\n      PUT2(code, 2 + LINK_SIZE + IMM2_SIZE, count);\n      skipunits = 1 + 2 * IMM2_SIZE;\n      pptr += 1 + SIZEOFFSET;\n      }\n\n    PCRE2_ASSERT(meta != META_CAPTURE_NAME);\n    goto GROUP_PROCESS_NOTE_EMPTY;\n\n    /* The DEFINE condition is always false. Its internal groups may never\n    be called, so matched_char must remain false, hence the jump to\n    GROUP_PROCESS rather than GROUP_PROCESS_NOTE_EMPTY. */\n\n    case META_COND_DEFINE:\n    bravalue = OP_COND;\n    GETPLUSOFFSET(offset, pptr);\n    code[1+LINK_SIZE] = OP_DEFINE;\n    skipunits = 1;\n    goto GROUP_PROCESS;\n\n    /* Conditional test of a group's being set. */\n\n    case META_COND_NUMBER:\n    bravalue = OP_COND;\n    GETPLUSOFFSET(offset, pptr);\n\n    groupnumber = *(++pptr);\n    if (groupnumber > cb->bracount)\n      {\n      *errorcodeptr = ERR15;\n      cb->erroroffset = offset;\n      return 0;\n      }\n    if (groupnumber > cb->top_backref) cb->top_backref = groupnumber;\n\n    /* Point at initial ( for too many branches error */\n    offset -= 2;\n    code[1+LINK_SIZE] = OP_CREF;\n    skipunits = 1+IMM2_SIZE;\n    PUT2(code, 2+LINK_SIZE, groupnumber);\n    goto GROUP_PROCESS_NOTE_EMPTY;\n\n    /* Test for the PCRE2 version. */\n\n    case META_COND_VERSION:\n    bravalue = OP_COND;\n    if (pptr[1] > 0)\n      code[1+LINK_SIZE] = ((PCRE2_MAJOR > pptr[2]) ||\n        (PCRE2_MAJOR == pptr[2] && PCRE2_MINOR >= pptr[3]))?\n          OP_TRUE : OP_FALSE;\n    else\n      code[1+LINK_SIZE] = (PCRE2_MAJOR == pptr[2] && PCRE2_MINOR == pptr[3])?\n        OP_TRUE : OP_FALSE;\n    skipunits = 1;\n    pptr += 3;\n    goto GROUP_PROCESS_NOTE_EMPTY;\n\n    /* The condition is an assertion, possibly preceded by a callout. */\n\n    case META_COND_ASSERT:\n    bravalue = OP_COND;\n    goto GROUP_PROCESS_NOTE_EMPTY;\n\n\n    /* ===================================================================*/\n    /* Handle all kinds of nested bracketed groups. The non-capturing,\n    non-conditional cases are here; others come to GROUP_PROCESS via goto. */\n\n    case META_LOOKAHEAD:\n    bravalue = OP_ASSERT;\n    cb->assert_depth += 1;\n    goto GROUP_PROCESS;\n\n    case META_LOOKAHEAD_NA:\n    bravalue = OP_ASSERT_NA;\n    cb->assert_depth += 1;\n    goto GROUP_PROCESS;\n\n    /* Optimize (?!) to (*FAIL) unless it is quantified - which is a weird\n    thing to do, but Perl allows all assertions to be quantified, and when\n    they contain capturing parentheses there may be a potential use for\n    this feature. Not that that applies to a quantified (?!) but we allow\n    it for uniformity. */\n\n    case META_LOOKAHEADNOT:\n    if (pptr[1] == META_KET &&\n         (pptr[2] < META_ASTERISK || pptr[2] > META_MINMAX_QUERY))\n      {\n      *code++ = OP_FAIL;\n      pptr++;\n      }\n    else\n      {\n      bravalue = OP_ASSERT_NOT;\n      cb->assert_depth += 1;\n      goto GROUP_PROCESS;\n      }\n    break;\n\n    case META_LOOKBEHIND:\n    bravalue = OP_ASSERTBACK;\n    cb->assert_depth += 1;\n    goto GROUP_PROCESS;\n\n    case META_LOOKBEHINDNOT:\n    bravalue = OP_ASSERTBACK_NOT;\n    cb->assert_depth += 1;\n    goto GROUP_PROCESS;\n\n    case META_LOOKBEHIND_NA:\n    bravalue = OP_ASSERTBACK_NA;\n    cb->assert_depth += 1;\n    goto GROUP_PROCESS;\n\n    case META_ATOMIC:\n    bravalue = OP_ONCE;\n    goto GROUP_PROCESS_NOTE_EMPTY;\n\n    case META_SCRIPT_RUN:\n    bravalue = OP_SCRIPT_RUN;\n    goto GROUP_PROCESS_NOTE_EMPTY;\n\n    case META_NOCAPTURE:\n    bravalue = OP_BRA;\n    /* Fall through */\n\n    /* Process nested bracketed regex. The nesting depth is maintained for the\n    benefit of the stackguard function. The test for too deep nesting is now\n    done in parse_regex(). Assertion and DEFINE groups come to GROUP_PROCESS;\n    others come to GROUP_PROCESS_NOTE_EMPTY, to indicate that we need to take\n    note of whether or not they may match an empty string. */\n\n    GROUP_PROCESS_NOTE_EMPTY:\n    note_group_empty = TRUE;\n\n    GROUP_PROCESS:\n    cb->parens_depth += 1;\n    *code = bravalue;\n    pptr++;\n    tempcode = code;\n    tempreqvary = cb->req_varyopt;        /* Save value before group */\n    length_prevgroup = 0;                 /* Initialize for pre-compile phase */\n\n    if ((group_return =\n         compile_regex(\n         options,                         /* The options state */\n         xoptions,                        /* The extra options state */\n         &tempcode,                       /* Where to put code (updated) */\n         &pptr,                           /* Input pointer (updated) */\n         errorcodeptr,                    /* Where to put an error message */\n         skipunits,                       /* Skip over bracket number */\n         &subfirstcu,                     /* For possible first char */\n         &subfirstcuflags,\n         &subreqcu,                       /* For possible last char */\n         &subreqcuflags,\n         bcptr,                           /* Current branch chain */\n         open_caps,                       /* Pointer to capture stack */\n         cb,                              /* Compile data block */\n         (lengthptr == NULL)? NULL :      /* Actual compile phase */\n           &length_prevgroup              /* Pre-compile phase */\n         )) == 0)\n      return 0;  /* Error */\n\n    cb->parens_depth -= 1;\n\n    /* If that was a non-conditional significant group (not an assertion, not a\n    DEFINE) that matches at least one character, then the current item matches\n    a character. Conditionals are handled below. */\n\n    if (note_group_empty && bravalue != OP_COND && group_return > 0)\n      matched_char = TRUE;\n\n    /* If we've just compiled an assertion, pop the assert depth. */\n\n    if (bravalue >= OP_ASSERT && bravalue <= OP_ASSERT_SCS)\n      cb->assert_depth -= 1;\n\n    /* At the end of compiling, code is still pointing to the start of the\n    group, while tempcode has been updated to point past the end of the group.\n    The parsed pattern pointer (pptr) is on the closing META_KET.\n\n    If this is a conditional bracket, check that there are no more than\n    two branches in the group, or just one if it's a DEFINE group. We do this\n    in the real compile phase, not in the pre-pass, where the whole group may\n    not be available. */\n\n    if (bravalue == OP_COND && lengthptr == NULL)\n      {\n      PCRE2_UCHAR *tc = code;\n      int condcount = 0;\n\n      do {\n         condcount++;\n         tc += GET(tc,1);\n         }\n      while (*tc != OP_KET);\n\n      /* A DEFINE group is never obeyed inline (the \"condition\" is always\n      false). It must have only one branch. Having checked this, change the\n      opcode to OP_FALSE. */\n\n      if (code[LINK_SIZE+1] == OP_DEFINE)\n        {\n        if (condcount > 1)\n          {\n          cb->erroroffset = offset;\n          *errorcodeptr = ERR54;\n          return 0;\n          }\n        code[LINK_SIZE+1] = OP_FALSE;\n        bravalue = OP_DEFINE;   /* A flag to suppress char handling below */\n        }\n\n      /* A \"normal\" conditional group. If there is just one branch, we must not\n      make use of its firstcu or reqcu, because this is equivalent to an\n      empty second branch. Also, it may match an empty string. If there are two\n      branches, this item must match a character if the group must. */\n\n      else\n        {\n        if (condcount > 2)\n          {\n          cb->erroroffset = offset;\n          *errorcodeptr = ERR27;\n          return 0;\n          }\n        if (condcount == 1) subfirstcuflags = subreqcuflags = REQ_NONE;\n          else if (group_return > 0) matched_char = TRUE;\n        }\n      }\n\n    /* In the pre-compile phase, update the length by the length of the group,\n    less the brackets at either end. Then reduce the compiled code to just a\n    set of non-capturing brackets so that it doesn't use much memory if it is\n    duplicated by a quantifier.*/\n\n    if (lengthptr != NULL)\n      {\n      if (OFLOW_MAX - *lengthptr < length_prevgroup - 2 - 2*LINK_SIZE)\n        {\n        *errorcodeptr = ERR20;\n        return 0;\n        }\n      *lengthptr += length_prevgroup - 2 - 2*LINK_SIZE;\n      code++;   /* This already contains bravalue */\n      PUTINC(code, 0, 1 + LINK_SIZE);\n      *code++ = OP_KET;\n      PUTINC(code, 0, 1 + LINK_SIZE);\n      break;    /* No need to waste time with special character handling */\n      }\n\n    /* Otherwise update the main code pointer to the end of the group. */\n\n    code = tempcode;\n\n    /* For a DEFINE group, required and first character settings are not\n    relevant. */\n\n    if (bravalue == OP_DEFINE) break;\n\n    /* Handle updating of the required and first code units for other types of\n    group. Update for normal brackets of all kinds, and conditions with two\n    branches (see code above). If the bracket is followed by a quantifier with\n    zero repeat, we have to back off. Hence the definition of zeroreqcu and\n    zerofirstcu outside the main loop so that they can be accessed for the back\n    off. */\n\n    zeroreqcu = reqcu;\n    zeroreqcuflags = reqcuflags;\n    zerofirstcu = firstcu;\n    zerofirstcuflags = firstcuflags;\n    groupsetfirstcu = FALSE;\n\n    if (bravalue >= OP_ONCE)  /* Not an assertion */\n      {\n      /* If we have not yet set a firstcu in this branch, take it from the\n      subpattern, remembering that it was set here so that a repeat of more\n      than one can replicate it as reqcu if necessary. If the subpattern has\n      no firstcu, set \"none\" for the whole branch. In both cases, a zero\n      repeat forces firstcu to \"none\". */\n\n      if (firstcuflags == REQ_UNSET && subfirstcuflags != REQ_UNSET)\n        {\n        if (subfirstcuflags < REQ_NONE)\n          {\n          firstcu = subfirstcu;\n          firstcuflags = subfirstcuflags;\n          groupsetfirstcu = TRUE;\n          }\n        else firstcuflags = REQ_NONE;\n        zerofirstcuflags = REQ_NONE;\n        }\n\n      /* If firstcu was previously set, convert the subpattern's firstcu\n      into reqcu if there wasn't one, using the vary flag that was in\n      existence beforehand. */\n\n      else if (subfirstcuflags < REQ_NONE && subreqcuflags >= REQ_NONE)\n        {\n        subreqcu = subfirstcu;\n        subreqcuflags = subfirstcuflags | tempreqvary;\n        }\n\n      /* If the subpattern set a required code unit (or set a first code unit\n      that isn't really the first code unit - see above), set it. */\n\n      if (subreqcuflags < REQ_NONE)\n        {\n        reqcu = subreqcu;\n        reqcuflags = subreqcuflags;\n        }\n      }\n\n    /* For a forward assertion, we take the reqcu, if set, provided that the\n    group has also set a firstcu. This can be helpful if the pattern that\n    follows the assertion doesn't set a different char. For example, it's\n    useful for /(?=abcde).+/. We can't set firstcu for an assertion, however\n    because it leads to incorrect effect for patterns such as /(?=a)a.+/ when\n    the \"real\" \"a\" would then become a reqcu instead of a firstcu. This is\n    overcome by a scan at the end if there's no firstcu, looking for an\n    asserted first char. A similar effect for patterns like /(?=.*X)X$/ means\n    we must only take the reqcu when the group also set a firstcu. Otherwise,\n    in that example, 'X' ends up set for both. */\n\n    else if ((bravalue == OP_ASSERT || bravalue == OP_ASSERT_NA) &&\n             subreqcuflags < REQ_NONE && subfirstcuflags < REQ_NONE)\n      {\n      reqcu = subreqcu;\n      reqcuflags = subreqcuflags;\n      }\n\n    break;  /* End of nested group handling */\n\n\n    /* ===================================================================*/\n    /* Handle named backreferences and recursions. */\n\n    case META_BACKREF_BYNAME:\n    case META_RECURSE_BYNAME:\n      {\n      int count, index;\n      PCRE2_SPTR name;\n      named_group *ng;\n      uint32_t length = *(++pptr);\n\n      GETPLUSOFFSET(offset, pptr);\n      name = cb->start_pattern + offset;\n\n      /* In the first pass, the names generated in the pre-pass are available,\n      but the main name table has not yet been created. Scan the list of names\n      generated in the pre-pass in order to get a number and whether or not\n      this name is duplicated. */\n\n      ng = PRIV(compile_find_named_group)(name, length, cb);\n\n      if (ng == NULL)\n        {\n        /* If the name was not found we have a bad reference. */\n        *errorcodeptr = ERR15;\n        cb->erroroffset = offset;\n        return 0;\n        }\n\n      groupnumber = ng->number;\n\n      /* For a recursion, that's all that is needed. We can now go to\n      the code that handles numerical recursion, applying it to the first\n      group with the given name. */\n\n      if (meta == META_RECURSE_BYNAME)\n        {\n        meta_arg = groupnumber;\n        goto HANDLE_NUMERICAL_RECURSION;\n        }\n\n      /* For a back reference, update the back reference map and the\n      maximum back reference. */\n\n      cb->backref_map |= (groupnumber < 32)? (1u << groupnumber) : 1;\n      if (groupnumber > cb->top_backref)\n        cb->top_backref = groupnumber;\n\n      /* If a back reference name is not duplicated, we can handle it as\n      a numerical reference. */\n\n      if ((ng->hash_dup & NAMED_GROUP_IS_DUPNAME) == 0)\n        {\n        meta_arg = groupnumber;\n        goto HANDLE_SINGLE_REFERENCE;\n        }\n\n      /* If a back reference name is duplicated, we generate a different\n      opcode to a numerical back reference. In the second pass we must\n      search for the index and count in the final name table. */\n\n      count = 0;  /* Values for first pass (avoids compiler warning) */\n      index = 0;\n      if (lengthptr == NULL && !PRIV(compile_find_dupname_details)(name, length,\n            &index, &count, errorcodeptr, cb)) return 0;\n\n      if (firstcuflags == REQ_UNSET) firstcuflags = REQ_NONE;\n      *code++ = ((options & PCRE2_CASELESS) != 0)? OP_DNREFI : OP_DNREF;\n      PUT2INC(code, 0, index);\n      PUT2INC(code, 0, count);\n      if ((options & PCRE2_CASELESS) != 0)\n        *code++ = (((xoptions & PCRE2_EXTRA_CASELESS_RESTRICT) != 0)?\n                   REFI_FLAG_CASELESS_RESTRICT : 0) |\n                  (((xoptions & PCRE2_EXTRA_TURKISH_CASING) != 0)?\n                   REFI_FLAG_TURKISH_CASING : 0);\n      }\n    break;\n\n\n    /* ===================================================================*/\n    /* Handle a numerical callout. */\n\n    case META_CALLOUT_NUMBER:\n    code[0] = OP_CALLOUT;\n    PUT(code, 1, pptr[1]);               /* Offset to next pattern item */\n    PUT(code, 1 + LINK_SIZE, pptr[2]);   /* Length of next pattern item */\n    code[1 + 2*LINK_SIZE] = pptr[3];\n    pptr += 3;\n    code += PRIV(OP_lengths)[OP_CALLOUT];\n    break;\n\n\n    /* ===================================================================*/\n    /* Handle a callout with a string argument. In the pre-pass we just compute\n    the length without generating anything. The length in pptr[3] includes both\n    delimiters; in the actual compile only the first one is copied, but a\n    terminating zero is added. Any doubled delimiters within the string make\n    this an overestimate, but it is not worth bothering about. */\n\n    case META_CALLOUT_STRING:\n    if (lengthptr != NULL)\n      {\n      *lengthptr += pptr[3] + (1 + 4*LINK_SIZE);\n      pptr += 3;\n      SKIPOFFSET(pptr);\n      }\n\n    /* In the real compile we can copy the string. The starting delimiter is\n     included so that the client can discover it if they want. We also pass the\n     start offset to help a script language give better error messages. */\n\n    else\n      {\n      PCRE2_SPTR pp;\n      uint32_t delimiter;\n      uint32_t length = pptr[3];\n      PCRE2_UCHAR *callout_string = code + (1 + 4*LINK_SIZE);\n\n      code[0] = OP_CALLOUT_STR;\n      PUT(code, 1, pptr[1]);               /* Offset to next pattern item */\n      PUT(code, 1 + LINK_SIZE, pptr[2]);   /* Length of next pattern item */\n\n      pptr += 3;\n      GETPLUSOFFSET(offset, pptr);         /* Offset to string in pattern */\n      pp = cb->start_pattern + offset;\n      delimiter = *callout_string++ = *pp++;\n      if (delimiter == CHAR_LEFT_CURLY_BRACKET)\n        delimiter = CHAR_RIGHT_CURLY_BRACKET;\n      PUT(code, 1 + 3*LINK_SIZE, (int)(offset + 1));  /* One after delimiter */\n\n      /* The syntax of the pattern was checked in the parsing scan. The length\n      includes both delimiters, but we have passed the opening one just above,\n      so we reduce length before testing it. The test is for > 1 because we do\n      not want to copy the final delimiter. This also ensures that pp[1] is\n      accessible. */\n\n      while (--length > 1)\n        {\n        if (*pp == delimiter && pp[1] == delimiter)\n          {\n          *callout_string++ = delimiter;\n          pp += 2;\n          length--;\n          }\n        else *callout_string++ = *pp++;\n        }\n      *callout_string++ = CHAR_NUL;\n\n      /* Set the length of the entire item, the advance to its end. */\n\n      PUT(code, 1 + 2*LINK_SIZE, (int)(callout_string - code));\n      code = callout_string;\n      }\n    break;\n\n\n    /* ===================================================================*/\n    /* Handle repetition. The different types are all sorted out in the parsing\n    pass. */\n\n    case META_MINMAX_PLUS:\n    case META_MINMAX_QUERY:\n    case META_MINMAX:\n    repeat_min = *(++pptr);\n    repeat_max = *(++pptr);\n    goto REPEAT;\n\n    case META_ASTERISK:\n    case META_ASTERISK_PLUS:\n    case META_ASTERISK_QUERY:\n    repeat_min = 0;\n    repeat_max = REPEAT_UNLIMITED;\n    goto REPEAT;\n\n    case META_PLUS:\n    case META_PLUS_PLUS:\n    case META_PLUS_QUERY:\n    repeat_min = 1;\n    repeat_max = REPEAT_UNLIMITED;\n    goto REPEAT;\n\n    case META_QUERY:\n    case META_QUERY_PLUS:\n    case META_QUERY_QUERY:\n    repeat_min = 0;\n    repeat_max = 1;\n\n    REPEAT:\n    if (previous_matched_char && repeat_min > 0) matched_char = TRUE;\n\n    /* Remember whether this is a variable length repeat, and default to\n    single-char opcodes. */\n\n    reqvary = (repeat_min == repeat_max)? 0 : REQ_VARY;\n\n    /* Adjust first and required code units for a zero repeat. */\n\n    if (repeat_min == 0)\n      {\n      firstcu = zerofirstcu;\n      firstcuflags = zerofirstcuflags;\n      reqcu = zeroreqcu;\n      reqcuflags = zeroreqcuflags;\n      }\n\n    /* Note the greediness and possessiveness. */\n\n    switch (meta)\n      {\n      case META_MINMAX_PLUS:\n      case META_ASTERISK_PLUS:\n      case META_PLUS_PLUS:\n      case META_QUERY_PLUS:\n      repeat_type = 0;                  /* Force greedy */\n      possessive_quantifier = TRUE;\n      break;\n\n      case META_MINMAX_QUERY:\n      case META_ASTERISK_QUERY:\n      case META_PLUS_QUERY:\n      case META_QUERY_QUERY:\n      repeat_type = greedy_non_default;\n      possessive_quantifier = FALSE;\n      break;\n\n      default:\n      repeat_type = greedy_default;\n      possessive_quantifier = FALSE;\n      break;\n      }\n\n    /* Save start of previous item, in case we have to move it up in order to\n    insert something before it, and remember what it was. */\n\n    PCRE2_ASSERT(previous != NULL);\n    tempcode = previous;\n    op_previous = *previous;\n\n    /* Now handle repetition for the different types of item. If the repeat\n    minimum and the repeat maximum are both 1, we can ignore the quantifier for\n    non-parenthesized items, as they have only one alternative. For anything in\n    parentheses, we must not ignore if {1} is possessive. */\n\n    switch (op_previous)\n      {\n      /* If previous was a character or negated character match, abolish the\n      item and generate a repeat item instead. If a char item has a minimum of\n      more than one, ensure that it is set in reqcu - it might not be if a\n      sequence such as x{3} is the first thing in a branch because the x will\n      have gone into firstcu instead.  */\n\n      case OP_CHAR:\n      case OP_CHARI:\n      case OP_NOT:\n      case OP_NOTI:\n      if (repeat_max == 1 && repeat_min == 1) goto END_REPEAT;\n      op_type = chartypeoffset[op_previous - OP_CHAR];\n\n      /* Deal with UTF characters that take up more than one code unit. */\n\n#ifdef MAYBE_UTF_MULTI\n      if (utf && NOT_FIRSTCU(code[-1]))\n        {\n        PCRE2_UCHAR *lastchar = code - 1;\n        BACKCHAR(lastchar);\n        mclength = (uint32_t)(code - lastchar);   /* Length of UTF character */\n        memcpy(mcbuffer, lastchar, CU2BYTES(mclength));  /* Save the char */\n        }\n      else\n#endif  /* MAYBE_UTF_MULTI */\n\n      /* Handle the case of a single code unit - either with no UTF support, or\n      with UTF disabled, or for a single-code-unit UTF character. In the latter\n      case, for a repeated positive match, get the caseless flag for the\n      required code unit from the previous character, because a class like [Aa]\n      sets a caseless A but by now the req_caseopt flag has been reset. */\n\n        {\n        mcbuffer[0] = code[-1];\n        mclength = 1;\n        if (op_previous <= OP_CHARI && repeat_min > 1)\n          {\n          reqcu = mcbuffer[0];\n          reqcuflags = cb->req_varyopt;\n          if (op_previous == OP_CHARI) reqcuflags |= REQ_CASELESS;\n          }\n        }\n      goto OUTPUT_SINGLE_REPEAT;  /* Code shared with single character types */\n\n      /* If previous was a character class or a back reference, we put the\n      repeat stuff after it, but just skip the item if the repeat was {0,0}. */\n\n#ifdef SUPPORT_WIDE_CHARS\n      case OP_XCLASS:\n      case OP_ECLASS:\n#endif\n      case OP_CLASS:\n      case OP_NCLASS:\n      case OP_REF:\n      case OP_REFI:\n      case OP_DNREF:\n      case OP_DNREFI:\n\n      if (repeat_max == 0)\n        {\n        code = previous;\n        goto END_REPEAT;\n        }\n      if (repeat_max == 1 && repeat_min == 1) goto END_REPEAT;\n\n      if (repeat_min == 0 && repeat_max == REPEAT_UNLIMITED)\n        *code++ = OP_CRSTAR + repeat_type;\n      else if (repeat_min == 1 && repeat_max == REPEAT_UNLIMITED)\n        *code++ = OP_CRPLUS + repeat_type;\n      else if (repeat_min == 0 && repeat_max == 1)\n        *code++ = OP_CRQUERY + repeat_type;\n      else\n        {\n        *code++ = OP_CRRANGE + repeat_type;\n        PUT2INC(code, 0, repeat_min);\n        if (repeat_max == REPEAT_UNLIMITED) repeat_max = 0;  /* 2-byte encoding for max */\n        PUT2INC(code, 0, repeat_max);\n        }\n      break;\n\n      /* Prior to 10.30, repeated recursions were wrapped in OP_ONCE brackets\n      because pcre2_match() could not handle backtracking into recursively\n      called groups. Now that this backtracking is available, we no longer need\n      to do this. However, we still need to replicate recursions as we do for\n      groups so as to have independent backtracking points. We can replicate\n      for the minimum number of repeats directly. For optional repeats we now\n      wrap the recursion in OP_BRA brackets and make use of the bracket\n      repetition. */\n\n      case OP_RECURSE:\n      if (repeat_max == 1 && repeat_min == 1 && !possessive_quantifier)\n        goto END_REPEAT;\n\n      /* Generate unwrapped repeats for a non-zero minimum, except when the\n      minimum is 1 and the maximum unlimited, because that can be handled with\n      OP_BRA terminated by OP_KETRMAX/MIN. When the maximum is equal to the\n      minimum, we just need to generate the appropriate additional copies.\n      Otherwise we need to generate one more, to simulate the situation when\n      the minimum is zero. */\n\n      if (repeat_min > 0 && (repeat_min != 1 || repeat_max != REPEAT_UNLIMITED))\n        {\n        int replicate = repeat_min;\n\n        if (repeat_min == repeat_max) replicate--;\n\n        /* In the pre-compile phase, we don't actually do the replication. We\n        just adjust the length as if we had. Do some paranoid checks for\n        potential integer overflow. */\n\n        if (lengthptr != NULL)\n          {\n          PCRE2_SIZE delta;\n          if (PRIV(ckd_smul)(&delta, replicate, (int)length_prevgroup) ||\n              OFLOW_MAX - *lengthptr < delta)\n            {\n            *errorcodeptr = ERR20;\n            return 0;\n            }\n          *lengthptr += delta;\n          }\n        else for (int i = 0; i < replicate; i++)\n          {\n          memcpy(code, previous, CU2BYTES(length_prevgroup));\n          previous = code;\n          code += length_prevgroup;\n          }\n\n        /* If the number of repeats is fixed, we are done. Otherwise, adjust\n        the counts and fall through. */\n\n        if (repeat_min == repeat_max) break;\n        if (repeat_max != REPEAT_UNLIMITED) repeat_max -= repeat_min;\n        repeat_min = 0;\n        }\n\n      /* Wrap the recursion call in OP_BRA brackets. */\n        {\n        PCRE2_SIZE length = (lengthptr != NULL) ? 1 + LINK_SIZE : length_prevgroup;\n\n        (void)memmove(previous + 1 + LINK_SIZE, previous, CU2BYTES(length));\n        op_previous = *previous = OP_BRA;\n        PUT(previous, 1, 1 + LINK_SIZE + length);\n        previous[1 + LINK_SIZE + length] = OP_KET;\n        PUT(previous, 2 + LINK_SIZE + length, 1 + LINK_SIZE + length);\n        }\n      code += 2 + 2 * LINK_SIZE;\n      length_prevgroup += 2 + 2 * LINK_SIZE;\n      group_return = -1;  /* Set \"may match empty string\" */\n\n      /* Now treat as a repeated OP_BRA. */\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      /* If previous was a bracket group, we may have to replicate it in\n      certain cases. Note that at this point we can encounter only the \"basic\"\n      bracket opcodes such as BRA and CBRA, as this is the place where they get\n      converted into the more special varieties such as BRAPOS and SBRA.\n      Originally, PCRE did not allow repetition of assertions, but now it does,\n      for Perl compatibility. */\n\n      case OP_ASSERT:\n      case OP_ASSERT_NOT:\n      case OP_ASSERT_NA:\n      case OP_ASSERTBACK:\n      case OP_ASSERTBACK_NOT:\n      case OP_ASSERTBACK_NA:\n      case OP_ASSERT_SCS:\n      case OP_ONCE:\n      case OP_SCRIPT_RUN:\n      case OP_BRA:\n      case OP_CBRA:\n      case OP_COND:\n        {\n        int len = (int)(code - previous);\n        PCRE2_UCHAR *bralink = NULL;\n        PCRE2_UCHAR *brazeroptr = NULL;\n\n        if (repeat_max == 1 && repeat_min == 1 && !possessive_quantifier)\n          goto END_REPEAT;\n\n        /* Repeating a DEFINE group (or any group where the condition is always\n        FALSE and there is only one branch) is pointless, but Perl allows the\n        syntax, so we just ignore the repeat. */\n\n        if (op_previous == OP_COND && previous[LINK_SIZE+1] == OP_FALSE &&\n            previous[GET(previous, 1)] != OP_ALT)\n          goto END_REPEAT;\n\n        /* Perl allows all assertions to be quantified, and when they contain\n        capturing parentheses and/or are optional there are potential uses for\n        this feature. PCRE2 used to force the maximum quantifier to 1 on the\n        invalid grounds that further repetition was never useful. This was\n        always a bit pointless, since an assertion could be wrapped with a\n        repeated group to achieve the effect. General repetition is now\n        permitted, but if the maximum is unlimited it is set to one more than\n        the minimum. */\n\n        if (op_previous < OP_ONCE)    /* Assertion */\n          {\n          if (repeat_max == REPEAT_UNLIMITED) repeat_max = repeat_min + 1;\n          }\n\n        /* The case of a zero minimum is special because of the need to stick\n        OP_BRAZERO in front of it, and because the group appears once in the\n        data, whereas in other cases it appears the minimum number of times. For\n        this reason, it is simplest to treat this case separately, as otherwise\n        the code gets far too messy. There are several special subcases when the\n        minimum is zero. */\n\n        if (repeat_min == 0)\n          {\n          /* If the maximum is also zero, we used to just omit the group from\n          the output altogether, like this:\n\n          ** if (repeat_max == 0)\n          **   {\n          **   code = previous;\n          **   goto END_REPEAT;\n          **   }\n\n          However, that fails when a group or a subgroup within it is\n          referenced as a subroutine from elsewhere in the pattern, so now we\n          stick in OP_SKIPZERO in front of it so that it is skipped on\n          execution. As we don't have a list of which groups are referenced, we\n          cannot do this selectively.\n\n          If the maximum is 1 or unlimited, we just have to stick in the\n          BRAZERO and do no more at this point. */\n\n          if (repeat_max <= 1 || repeat_max == REPEAT_UNLIMITED)\n            {\n            (void)memmove(previous + 1, previous, CU2BYTES(len));\n            code++;\n            if (repeat_max == 0)\n              {\n              *previous++ = OP_SKIPZERO;\n              goto END_REPEAT;\n              }\n            brazeroptr = previous;    /* Save for possessive optimizing */\n            *previous++ = OP_BRAZERO + repeat_type;\n            }\n\n          /* If the maximum is greater than 1 and limited, we have to replicate\n          in a nested fashion, sticking OP_BRAZERO before each set of brackets.\n          The first one has to be handled carefully because it's the original\n          copy, which has to be moved up. The remainder can be handled by code\n          that is common with the non-zero minimum case below. We have to\n          adjust the value or repeat_max, since one less copy is required. */\n\n          else\n            {\n            int linkoffset;\n            (void)memmove(previous + 2 + LINK_SIZE, previous, CU2BYTES(len));\n            code += 2 + LINK_SIZE;\n            *previous++ = OP_BRAZERO + repeat_type;\n            *previous++ = OP_BRA;\n\n            /* We chain together the bracket link offset fields that have to be\n            filled in later when the ends of the brackets are reached. */\n\n            linkoffset = (bralink == NULL)? 0 : (int)(previous - bralink);\n            bralink = previous;\n            PUTINC(previous, 0, linkoffset);\n            }\n\n          if (repeat_max != REPEAT_UNLIMITED) repeat_max--;\n          }\n\n        /* If the minimum is greater than zero, replicate the group as many\n        times as necessary, and adjust the maximum to the number of subsequent\n        copies that we need. */\n\n        else\n          {\n          if (repeat_min > 1)\n            {\n            /* In the pre-compile phase, we don't actually do the replication.\n            We just adjust the length as if we had. Do some paranoid checks for\n            potential integer overflow. */\n\n            if (lengthptr != NULL)\n              {\n              PCRE2_SIZE delta;\n              if (PRIV(ckd_smul)(&delta, repeat_min - 1,\n                                 (int)length_prevgroup) ||\n                  OFLOW_MAX - *lengthptr < delta)\n                {\n                *errorcodeptr = ERR20;\n                return 0;\n                }\n              *lengthptr += delta;\n              }\n\n            /* This is compiling for real. If there is a set first code unit\n            for the group, and we have not yet set a \"required code unit\", set\n            it. */\n\n            else\n              {\n              if (groupsetfirstcu && reqcuflags >= REQ_NONE)\n                {\n                reqcu = firstcu;\n                reqcuflags = firstcuflags;\n                }\n              for (uint32_t i = 1; i < repeat_min; i++)\n                {\n                memcpy(code, previous, CU2BYTES(len));\n                code += len;\n                }\n              }\n            }\n\n          if (repeat_max != REPEAT_UNLIMITED) repeat_max -= repeat_min;\n          }\n\n        /* This code is common to both the zero and non-zero minimum cases. If\n        the maximum is limited, it replicates the group in a nested fashion,\n        remembering the bracket starts on a stack. In the case of a zero\n        minimum, the first one was set up above. In all cases the repeat_max\n        now specifies the number of additional copies needed. Again, we must\n        remember to replicate entries on the forward reference list. */\n\n        if (repeat_max != REPEAT_UNLIMITED)\n          {\n          /* In the pre-compile phase, we don't actually do the replication. We\n          just adjust the length as if we had. For each repetition we must add\n          1 to the length for BRAZERO and for all but the last repetition we\n          must add 2 + 2*LINKSIZE to allow for the nesting that occurs. Do some\n          paranoid checks to avoid integer overflow. */\n\n          if (lengthptr != NULL && repeat_max > 0)\n            {\n            PCRE2_SIZE delta;\n            if (PRIV(ckd_smul)(&delta, repeat_max,\n                               (int)length_prevgroup + 1 + 2 + 2*LINK_SIZE) ||\n                OFLOW_MAX + (2 + 2*LINK_SIZE) - *lengthptr < delta)\n              {\n              *errorcodeptr = ERR20;\n              return 0;\n              }\n            delta -= (2 + 2*LINK_SIZE);   /* Last one doesn't nest */\n            *lengthptr += delta;\n            }\n\n          /* This is compiling for real */\n\n          else for (uint32_t i = repeat_max; i >= 1; i--)\n            {\n            *code++ = OP_BRAZERO + repeat_type;\n\n            /* All but the final copy start a new nesting, maintaining the\n            chain of brackets outstanding. */\n\n            if (i != 1)\n              {\n              int linkoffset;\n              *code++ = OP_BRA;\n              linkoffset = (bralink == NULL)? 0 : (int)(code - bralink);\n              bralink = code;\n              PUTINC(code, 0, linkoffset);\n              }\n\n            memcpy(code, previous, CU2BYTES(len));\n            code += len;\n            }\n\n          /* Now chain through the pending brackets, and fill in their length\n          fields (which are holding the chain links pro tem). */\n\n          while (bralink != NULL)\n            {\n            int oldlinkoffset;\n            int linkoffset = (int)(code - bralink + 1);\n            PCRE2_UCHAR *bra = code - linkoffset;\n            oldlinkoffset = GET(bra, 1);\n            bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;\n            *code++ = OP_KET;\n            PUTINC(code, 0, linkoffset);\n            PUT(bra, 1, linkoffset);\n            }\n          }\n\n        /* If the maximum is unlimited, set a repeater in the final copy. For\n        SCRIPT_RUN and ONCE brackets, that's all we need to do. However,\n        possessively repeated ONCE brackets can be converted into non-capturing\n        brackets, as the behaviour of (?:xx)++ is the same as (?>xx)++ and this\n        saves having to deal with possessive ONCEs specially.\n\n        Otherwise, when we are doing the actual compile phase, check to see\n        whether this group is one that could match an empty string. If so,\n        convert the initial operator to the S form (e.g. OP_BRA -> OP_SBRA) so\n        that runtime checking can be done. [This check is also applied to ONCE\n        and SCRIPT_RUN groups at runtime, but in a different way.]\n\n        Then, if the quantifier was possessive and the bracket is not a\n        conditional, we convert the BRA code to the POS form, and the KET code\n        to KETRPOS. (It turns out to be convenient at runtime to detect this\n        kind of subpattern at both the start and at the end.) The use of\n        special opcodes makes it possible to reduce greatly the stack usage in\n        pcre2_match(). If the group is preceded by OP_BRAZERO, convert this to\n        OP_BRAPOSZERO.\n\n        Then, if the minimum number of matches is 1 or 0, cancel the possessive\n        flag so that the default action below, of wrapping everything inside\n        atomic brackets, does not happen. When the minimum is greater than 1,\n        there will be earlier copies of the group, and so we still have to wrap\n        the whole thing. */\n\n        else\n          {\n          PCRE2_UCHAR *ketcode = code - 1 - LINK_SIZE;\n          PCRE2_UCHAR *bracode = ketcode - GET(ketcode, 1);\n\n          /* Convert possessive ONCE brackets to non-capturing */\n\n          if (*bracode == OP_ONCE && possessive_quantifier) *bracode = OP_BRA;\n\n          /* For non-possessive ONCE and for SCRIPT_RUN brackets, all we need\n          to do is to set the KET. */\n\n          if (*bracode == OP_ONCE || *bracode == OP_SCRIPT_RUN)\n            *ketcode = OP_KETRMAX + repeat_type;\n\n          /* Handle non-SCRIPT_RUN and non-ONCE brackets and possessive ONCEs\n          (which have been converted to non-capturing above). */\n\n          else\n            {\n            /* In the compile phase, adjust the opcode if the group can match\n            an empty string. For a conditional group with only one branch, the\n            value of group_return will not show \"could be empty\", so we must\n            check that separately. */\n\n            if (lengthptr == NULL)\n              {\n              if (group_return < 0) *bracode += OP_SBRA - OP_BRA;\n              if (*bracode == OP_COND && bracode[GET(bracode,1)] != OP_ALT)\n                *bracode = OP_SCOND;\n              }\n\n            /* Handle possessive quantifiers. */\n\n            if (possessive_quantifier)\n              {\n              /* For COND brackets, we wrap the whole thing in a possessively\n              repeated non-capturing bracket, because we have not invented POS\n              versions of the COND opcodes. */\n\n              if (*bracode == OP_COND || *bracode == OP_SCOND)\n                {\n                int nlen = (int)(code - bracode);\n                (void)memmove(bracode + 1 + LINK_SIZE, bracode, CU2BYTES(nlen));\n                code += 1 + LINK_SIZE;\n                nlen += 1 + LINK_SIZE;\n                *bracode = (*bracode == OP_COND)? OP_BRAPOS : OP_SBRAPOS;\n                *code++ = OP_KETRPOS;\n                PUTINC(code, 0, nlen);\n                PUT(bracode, 1, nlen);\n                }\n\n              /* For non-COND brackets, we modify the BRA code and use KETRPOS. */\n\n              else\n                {\n                *bracode += 1;              /* Switch to xxxPOS opcodes */\n                *ketcode = OP_KETRPOS;\n                }\n\n              /* If the minimum is zero, mark it as possessive, then unset the\n              possessive flag when the minimum is 0 or 1. */\n\n              if (brazeroptr != NULL) *brazeroptr = OP_BRAPOSZERO;\n              if (repeat_min < 2) possessive_quantifier = FALSE;\n              }\n\n            /* Non-possessive quantifier */\n\n            else *ketcode = OP_KETRMAX + repeat_type;\n            }\n          }\n        }\n      break;\n\n      /* If previous was a character type match (\\d or similar), abolish it and\n      create a suitable repeat item. The code is shared with single-character\n      repeats by setting op_type to add a suitable offset into repeat_type.\n      Note the the Unicode property types will be present only when\n      SUPPORT_UNICODE is defined, but we don't wrap the little bits of code\n      here because it just makes it horribly messy. */\n\n      default:\n\n      /* LCOV_EXCL_START */\n      if (op_previous >= OP_EODN || op_previous <= OP_WORD_BOUNDARY)\n        {\n        PCRE2_DEBUG_UNREACHABLE();\n        *errorcodeptr = ERR10;  /* Not a character type - internal error */\n        return 0;\n        }\n      /* LCOV_EXCL_STOP */\n\n        {\n        int prop_type, prop_value;\n        PCRE2_UCHAR *oldcode;\n\n        if (repeat_max == 1 && repeat_min == 1) goto END_REPEAT;\n\n        op_type = OP_TYPESTAR - OP_STAR;      /* Use type opcodes */\n        mclength = 0;                         /* Not a character */\n\n        if (op_previous == OP_PROP || op_previous == OP_NOTPROP)\n          {\n          prop_type = previous[1];\n          prop_value = previous[2];\n          }\n        else\n          {\n          /* Come here from just above with a character in mcbuffer/mclength.\n          You must also set op_type before the jump. */\n          OUTPUT_SINGLE_REPEAT:\n          prop_type = prop_value = -1;\n          }\n\n        /* At this point, if prop_type == prop_value == -1 we either have a\n        character in mcbuffer when mclength is greater than zero, or we have\n        mclength zero, in which case there is a non-property character type in\n        op_previous. If prop_type/value are not negative, we have a property\n        character type in op_previous. */\n\n        oldcode = code;                   /* Save where we were */\n        code = previous;                  /* Usually overwrite previous item */\n\n        /* If the maximum is zero then the minimum must also be zero; Perl allows\n        this case, so we do too - by simply omitting the item altogether. */\n\n        if (repeat_max == 0) goto END_REPEAT;\n\n        /* Combine the op_type with the repeat_type */\n\n        repeat_type += op_type;\n\n        /* A minimum of zero is handled either as the special case * or ?, or as\n        an UPTO, with the maximum given. */\n\n        if (repeat_min == 0)\n          {\n          if (repeat_max == REPEAT_UNLIMITED) *code++ = OP_STAR + repeat_type;\n            else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;\n          else\n            {\n            *code++ = OP_UPTO + repeat_type;\n            PUT2INC(code, 0, repeat_max);\n            }\n          }\n\n        /* A repeat minimum of 1 is optimized into some special cases. If the\n        maximum is unlimited, we use OP_PLUS. Otherwise, the original item is\n        left in place and, if the maximum is greater than 1, we use OP_UPTO with\n        one less than the maximum. */\n\n        else if (repeat_min == 1)\n          {\n          if (repeat_max == REPEAT_UNLIMITED)\n            *code++ = OP_PLUS + repeat_type;\n          else\n            {\n            code = oldcode;  /* Leave previous item in place */\n            if (repeat_max == 1) goto END_REPEAT;\n            *code++ = OP_UPTO + repeat_type;\n            PUT2INC(code, 0, repeat_max - 1);\n            }\n          }\n\n        /* The case {n,n} is just an EXACT, while the general case {n,m} is\n        handled as an EXACT followed by an UPTO or STAR or QUERY. */\n\n        else\n          {\n          *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */\n          PUT2INC(code, 0, repeat_min);\n\n          /* Unless repeat_max equals repeat_min, fill in the data for EXACT,\n          and then generate the second opcode. For a repeated Unicode property\n          match, there are two extra values that define the required property,\n          and mclength is set zero to indicate this. */\n\n          if (repeat_max != repeat_min)\n            {\n            if (mclength > 0)\n              {\n              memcpy(code, mcbuffer, CU2BYTES(mclength));\n              code += mclength;\n              }\n            else\n              {\n              *code++ = op_previous;\n              if (prop_type >= 0)\n                {\n                *code++ = prop_type;\n                *code++ = prop_value;\n                }\n              }\n\n            /* Now set up the following opcode */\n\n            if (repeat_max == REPEAT_UNLIMITED)\n              *code++ = OP_STAR + repeat_type;\n            else\n              {\n              repeat_max -= repeat_min;\n              if (repeat_max == 1)\n                {\n                *code++ = OP_QUERY + repeat_type;\n                }\n              else\n                {\n                *code++ = OP_UPTO + repeat_type;\n                PUT2INC(code, 0, repeat_max);\n                }\n              }\n            }\n          }\n\n        /* Fill in the character or character type for the final opcode. */\n\n        if (mclength > 0)\n          {\n          memcpy(code, mcbuffer, CU2BYTES(mclength));\n          code += mclength;\n          }\n        else\n          {\n          *code++ = op_previous;\n          if (prop_type >= 0)\n            {\n            *code++ = prop_type;\n            *code++ = prop_value;\n            }\n          }\n        }\n      break;\n      }  /* End of switch on different op_previous values */\n\n\n    /* If the character following a repeat is '+', possessive_quantifier is\n    TRUE. For some opcodes, there are special alternative opcodes for this\n    case. For anything else, we wrap the entire repeated item inside OP_ONCE\n    brackets. Logically, the '+' notation is just syntactic sugar, taken from\n    Sun's Java package, but the special opcodes can optimize it.\n\n    Some (but not all) possessively repeated subpatterns have already been\n    completely handled in the code just above. For them, possessive_quantifier\n    is always FALSE at this stage. Note that the repeated item starts at\n    tempcode, not at previous, which might be the first part of a string whose\n    (former) last char we repeated. */\n\n    if (possessive_quantifier)\n      {\n      int len;\n\n      /* Possessifying an EXACT quantifier has no effect, so we can ignore it.\n      However, QUERY, STAR, or UPTO may follow (for quantifiers such as {5,6},\n      {5,}, or {5,10}). We skip over an EXACT item; if the length of what\n      remains is greater than zero, there's a further opcode that can be\n      handled. If not, do nothing, leaving the EXACT alone. */\n\n      switch(*tempcode)\n        {\n        case OP_TYPEEXACT:\n        tempcode += PRIV(OP_lengths)[*tempcode] +\n          ((tempcode[1 + IMM2_SIZE] == OP_PROP\n          || tempcode[1 + IMM2_SIZE] == OP_NOTPROP)? 2 : 0);\n        break;\n\n        /* CHAR opcodes are used for exacts whose count is 1. */\n\n        case OP_CHAR:\n        case OP_CHARI:\n        case OP_NOT:\n        case OP_NOTI:\n        case OP_EXACT:\n        case OP_EXACTI:\n        case OP_NOTEXACT:\n        case OP_NOTEXACTI:\n        tempcode += PRIV(OP_lengths)[*tempcode];\n#ifdef SUPPORT_UNICODE\n        if (utf && HAS_EXTRALEN(tempcode[-1]))\n          tempcode += GET_EXTRALEN(tempcode[-1]);\n#endif\n        break;\n\n        /* For the class opcodes, the repeat operator appears at the end;\n        adjust tempcode to point to it. */\n\n        case OP_CLASS:\n        case OP_NCLASS:\n        tempcode += 1 + 32/sizeof(PCRE2_UCHAR);\n        break;\n\n#ifdef SUPPORT_WIDE_CHARS\n        case OP_XCLASS:\n        case OP_ECLASS:\n        tempcode += GET(tempcode, 1);\n        break;\n#endif\n\n        case OP_REF:\n        case OP_REFI:\n        case OP_DNREF:\n        case OP_DNREFI:\n        tempcode += PRIV(OP_lengths)[*tempcode];\n        break;\n        }\n\n      /* If tempcode is equal to code (which points to the end of the repeated\n      item), it means we have skipped an EXACT item but there is no following\n      QUERY, STAR, or UPTO; the value of len will be 0, and we do nothing. In\n      all other cases, tempcode will be pointing to the repeat opcode, and will\n      be less than code, so the value of len will be greater than 0. */\n\n      len = (int)(code - tempcode);\n      if (len > 0)\n        {\n        unsigned int repcode = *tempcode;\n\n        /* There is a table for possessifying opcodes, all of which are less\n        than OP_CALLOUT. A zero entry means there is no possessified version.\n        */\n\n        if (repcode < OP_CALLOUT && opcode_possessify[repcode] > 0)\n          *tempcode = opcode_possessify[repcode];\n\n        /* For opcode without a special possessified version, wrap the item in\n        ONCE brackets. */\n\n        else\n          {\n          (void)memmove(tempcode + 1 + LINK_SIZE, tempcode, CU2BYTES(len));\n          code += 1 + LINK_SIZE;\n          len += 1 + LINK_SIZE;\n          tempcode[0] = OP_ONCE;\n          *code++ = OP_KET;\n          PUTINC(code, 0, len);\n          PUT(tempcode, 1, len);\n          }\n        }\n      }\n\n    /* We set the \"follows varying string\" flag for subsequently encountered\n    reqcus if it isn't already set and we have just passed a varying length\n    item. */\n\n    END_REPEAT:\n    cb->req_varyopt |= reqvary;\n    break;\n\n\n    /* ===================================================================*/\n    /* Handle a 32-bit data character with a value greater than META_END. */\n\n    case META_BIGVALUE:\n    pptr++;\n    goto NORMAL_CHAR;\n\n\n    /* ===============================================================*/\n    /* Handle a back reference by number, which is the meta argument. The\n    pattern offsets for back references to group numbers less than 10 are held\n    in a special vector, to avoid using more than two parsed pattern elements\n    in 64-bit environments. We only need the offset to the first occurrence,\n    because if that doesn't fail, subsequent ones will also be OK. */\n\n    case META_BACKREF:\n    if (meta_arg < 10) offset = cb->small_ref_offset[meta_arg];\n      else GETPLUSOFFSET(offset, pptr);\n\n    if (meta_arg > cb->bracount)\n      {\n      cb->erroroffset = offset;\n      *errorcodeptr = ERR15;  /* Non-existent subpattern */\n      return 0;\n      }\n\n    /* Come here from named backref handling when the reference is to a\n    single group (that is, not to a duplicated name). The back reference\n    data will have already been updated. We must disable firstcu if not\n    set, to cope with cases like (?=(\\w+))\\1: which would otherwise set ':'\n    later. */\n\n    HANDLE_SINGLE_REFERENCE:\n    if (firstcuflags == REQ_UNSET) zerofirstcuflags = firstcuflags = REQ_NONE;\n    *code++ = ((options & PCRE2_CASELESS) != 0)? OP_REFI : OP_REF;\n    PUT2INC(code, 0, meta_arg);\n    if ((options & PCRE2_CASELESS) != 0)\n      *code++ = (((xoptions & PCRE2_EXTRA_CASELESS_RESTRICT) != 0)?\n                 REFI_FLAG_CASELESS_RESTRICT : 0) |\n                (((xoptions & PCRE2_EXTRA_TURKISH_CASING) != 0)?\n                 REFI_FLAG_TURKISH_CASING : 0);\n\n    /* Update the map of back references, and keep the highest one. We\n    could do this in parse_regex() for numerical back references, but not\n    for named back references, because we don't know the numbers to which\n    named back references refer. So we do it all in this function. */\n\n    cb->backref_map |= (meta_arg < 32)? (1u << meta_arg) : 1;\n    if (meta_arg > cb->top_backref) cb->top_backref = meta_arg;\n    break;\n\n\n    /* ===============================================================*/\n    /* Handle recursion by inserting the number of the called group (which is\n    the meta argument) after OP_RECURSE. At the end of compiling the pattern is\n    scanned and these numbers are replaced by offsets within the pattern. It is\n    done like this to avoid problems with forward references and adjusting\n    offsets when groups are duplicated and moved (as discovered in previous\n    implementations). Note that a recursion does not have a set first\n    character. */\n\n    case META_RECURSE:\n    GETPLUSOFFSET(offset, pptr);\n    if (meta_arg > cb->bracount)\n      {\n      cb->erroroffset = offset;\n      *errorcodeptr = ERR15;  /* Non-existent subpattern */\n      return 0;\n      }\n    HANDLE_NUMERICAL_RECURSION:\n    *code = OP_RECURSE;\n    PUT(code, 1, meta_arg);\n    code += 1 + LINK_SIZE;\n    /* Repeat processing requires this information to\n    determine the real length in pre-compile phase. */\n    length_prevgroup = 1 + LINK_SIZE;\n\n    if (META_CODE(pptr[1]) == META_OFFSET ||\n        META_CODE(pptr[1]) == META_CAPTURE_NAME ||\n        META_CODE(pptr[1]) == META_CAPTURE_NUMBER)\n      {\n      recurse_arguments *args;\n\n      if (lengthptr != NULL)\n        {\n        if (!PRIV(compile_parse_recurse_args)(pptr, offset, errorcodeptr, cb))\n          return 0;\n\n        args = (recurse_arguments*)cb->last_data;\n        length_prevgroup += (args->size * (1 + IMM2_SIZE));\n        *lengthptr += (args->size * (1 + IMM2_SIZE));\n        pptr += args->skip_size;\n        }\n      else\n        {\n        uint16_t *current, *end;\n\n        args = (recurse_arguments*)cb->first_data;\n        PCRE2_ASSERT(args != NULL && args->header.type == CDATA_RECURSE_ARGS);\n\n        current = (uint16_t*)(args + 1);\n        end = current + args->size;\n        PCRE2_ASSERT(end > current);\n\n        do\n          {\n          code[0] = OP_CREF;\n          PUT2(code, 1, *current);\n          code += 1 + IMM2_SIZE;\n          }\n        while (++current < end);\n\n        length_prevgroup += (args->size * (1 + IMM2_SIZE));\n        pptr += args->skip_size;\n        cb->first_data = args->header.next;\n        cb->cx->memctl.free(args, cb->cx->memctl.memory_data);\n        }\n      }\n\n    groupsetfirstcu = FALSE;\n    cb->had_recurse = TRUE;\n    if (firstcuflags == REQ_UNSET) firstcuflags = REQ_NONE;\n    zerofirstcu = firstcu;\n    zerofirstcuflags = firstcuflags;\n    break;\n\n\n    /* ===============================================================*/\n    /* Handle capturing parentheses; the number is the meta argument. */\n\n    case META_CAPTURE:\n    bravalue = OP_CBRA;\n    skipunits = IMM2_SIZE;\n    PUT2(code, 1+LINK_SIZE, meta_arg);\n    cb->lastcapture = meta_arg;\n    goto GROUP_PROCESS_NOTE_EMPTY;\n\n\n    /* ===============================================================*/\n    /* Handle escape sequence items. For ones like \\d, the ESC_values are\n    arranged to be the same as the corresponding OP_values in the default case\n    when PCRE2_UCP is not set (which is the only case in which they will appear\n    here).\n\n    Note: \\Q and \\E are never seen here, as they were dealt with in\n    parse_pattern(). Neither are numerical back references or recursions, which\n    were turned into META_BACKREF or META_RECURSE items, respectively. \\k and\n    \\g, when followed by names, are turned into META_BACKREF_BYNAME or\n    META_RECURSE_BYNAME. */\n\n    case META_ESCAPE:\n\n    /* We can test for escape sequences that consume a character because their\n    values lie between ESC_b and ESC_Z; this may have to change if any new ones\n    are ever created. For these sequences, we disable the setting of a first\n    character if it hasn't already been set. */\n\n    if (meta_arg > ESC_b && meta_arg < ESC_Z)\n      {\n      matched_char = TRUE;\n      if (firstcuflags == REQ_UNSET) firstcuflags = REQ_NONE;\n      }\n\n    /* Set values to reset to if this is followed by a zero repeat. */\n\n    zerofirstcu = firstcu;\n    zerofirstcuflags = firstcuflags;\n    zeroreqcu = reqcu;\n    zeroreqcuflags = reqcuflags;\n\n    /* If Unicode is not supported, \\P and \\p are not allowed and are\n    faulted at parse time, so will never appear here. */\n\n#ifdef SUPPORT_UNICODE\n    if (meta_arg == ESC_P || meta_arg == ESC_p)\n      {\n      uint32_t ptype = *(++pptr) >> 16;\n      uint32_t pdata = *pptr & 0xffff;\n\n      /* In caseless matching, particular characteristics Lu, Ll, and Lt get\n      converted to the general characteristic L&. That is, upper, lower, and\n      title case letters are all conflated. */\n\n      if ((options & PCRE2_CASELESS) != 0 && ptype == PT_PC &&\n          (pdata == ucp_Lu || pdata == ucp_Ll || pdata == ucp_Lt))\n        {\n        ptype = PT_LAMP;\n        pdata = 0;\n        }\n\n      /* The special case of \\p{Any} is compiled to OP_ALLANY and \\P{Any}\n      is compiled to [] so as to benefit from the auto-anchoring code. */\n\n      if (ptype == PT_ANY)\n        {\n        if (meta_arg == ESC_P)\n          {\n          *code++ = OP_CLASS;\n          memset(code, 0, 32);\n          code += 32 / sizeof(PCRE2_UCHAR);\n          }\n        else\n          *code++ = OP_ALLANY;\n        }\n      else\n        {\n        *code++ = (meta_arg == ESC_p)? OP_PROP : OP_NOTPROP;\n        *code++ = ptype;\n        *code++ = pdata;\n        }\n      break;  /* End META_ESCAPE */\n      }\n#endif\n\n    /* \\K is forbidden in lookarounds since 10.38 because that's what Perl has\n    done. However, there's an option, in case anyone was relying on it. */\n\n    if (cb->assert_depth > 0 && meta_arg == ESC_K &&\n        (xoptions & PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK) == 0)\n      {\n      *errorcodeptr = ERR99;\n      return 0;\n      }\n\n    /* For the rest (including \\X when Unicode is supported - if not it's\n    faulted at parse time), the OP value is the escape value when PCRE2_UCP is\n    not set; if it is set, most of them do not show up here because they are\n    converted into Unicode property tests in parse_regex().\n\n    In non-UTF mode, and for both 32-bit modes, we turn \\C into OP_ALLANY\n    instead of OP_ANYBYTE so that it works in DFA mode and in lookbehinds.\n    There are special UCP codes for \\B and \\b which are used in UCP mode unless\n    \"word\" matching is being forced to ASCII.\n\n    Note that \\b and \\B do a one-character lookbehind, and \\A also behaves as\n    if it does. */\n\n    switch(meta_arg)\n      {\n      case ESC_C:\n      cb->external_flags |= PCRE2_HASBKC;  /* Record */\n#if PCRE2_CODE_UNIT_WIDTH == 32\n      meta_arg = OP_ALLANY;\n      (void)utf; /* Avoid compiler warning. */\n#else\n      if (!utf) meta_arg = OP_ALLANY;\n#endif\n      break;\n\n      case ESC_B:\n      case ESC_b:\n      if ((options & PCRE2_UCP) != 0 && (xoptions & PCRE2_EXTRA_ASCII_BSW) == 0)\n        meta_arg = (meta_arg == ESC_B)? OP_NOT_UCP_WORD_BOUNDARY :\n          OP_UCP_WORD_BOUNDARY;\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      case ESC_A:\n      if (cb->max_lookbehind == 0) cb->max_lookbehind = 1;\n      break;\n\n      case ESC_K:\n      cb->external_flags |= PCRE2_HASBSK;  /* Record */\n      break;\n      }\n\n    *code++ = meta_arg;\n    break;  /* End META_ESCAPE */\n\n\n    /* ===================================================================*/\n    /* Handle an unrecognized meta value. A parsed pattern value less than\n    META_END is a literal. Otherwise we have a problem. */\n\n    default:\n    /* LCOV_EXCL_START */\n    if (meta >= META_END)\n      {\n      PCRE2_DEBUG_UNREACHABLE();\n      *errorcodeptr = ERR89;  /* Internal error - unrecognized. */\n      return 0;\n      }\n    /* LCOV_EXCL_STOP */\n\n    /* Handle a literal character. We come here by goto in the case of a\n    32-bit, non-UTF character whose value is greater than META_END. */\n\n    NORMAL_CHAR:\n    meta = *pptr;     /* Get the full 32 bits */\n    NORMAL_CHAR_SET:  /* Character is already in meta */\n    matched_char = TRUE;\n\n    /* For caseless UTF or UCP mode, check whether this character has more than\n    one other case. If so, generate a special OP_PROP item instead of OP_CHARI.\n    When casing restrictions apply, ignore caseless sets that start with an\n    ASCII character. If the character is affected by the special Turkish rules,\n    hardcode the matching characters using a caseset. */\n\n#ifdef SUPPORT_UNICODE\n    if ((utf||ucp) && (options & PCRE2_CASELESS) != 0)\n      {\n      uint32_t caseset;\n\n      if ((xoptions & (PCRE2_EXTRA_TURKISH_CASING|PCRE2_EXTRA_CASELESS_RESTRICT)) ==\n            PCRE2_EXTRA_TURKISH_CASING &&\n          UCD_ANY_I(meta))\n        {\n        caseset = PRIV(ucd_turkish_dotted_i_caseset) + (UCD_DOTTED_I(meta)? 0 : 3);\n        }\n      else if ((caseset = UCD_CASESET(meta)) != 0 &&\n               (xoptions & PCRE2_EXTRA_CASELESS_RESTRICT) != 0 &&\n               PRIV(ucd_caseless_sets)[caseset] < 128)\n        {\n        caseset = 0;  /* Ignore the caseless set if it's restricted. */\n        }\n\n      if (caseset != 0)\n        {\n        *code++ = OP_PROP;\n        *code++ = PT_CLIST;\n        *code++ = caseset;\n        if (firstcuflags == REQ_UNSET)\n          firstcuflags = zerofirstcuflags = REQ_NONE;\n        break;  /* End handling this meta item */\n        }\n      }\n#endif\n\n    /* Caseful matches, or caseless and not one of the multicase characters. We\n    come here by goto in the case of a positive class that contains only\n    case-partners of a character with just two cases; matched_char has already\n    been set TRUE and options fudged if necessary. */\n\n    CLASS_CASELESS_CHAR:\n\n    /* Get the character's code units into mcbuffer, with the length in\n    mclength. When not in UTF mode, the length is always 1. */\n\n#ifdef SUPPORT_UNICODE\n    if (utf) mclength = PRIV(ord2utf)(meta, mcbuffer); else\n#endif\n      {\n      mclength = 1;\n      mcbuffer[0] = meta;\n      }\n\n    /* Generate the appropriate code */\n\n    *code++ = ((options & PCRE2_CASELESS) != 0)? OP_CHARI : OP_CHAR;\n    memcpy(code, mcbuffer, CU2BYTES(mclength));\n    code += mclength;\n\n    /* Remember if \\r or \\n were seen */\n\n    if (mcbuffer[0] == CHAR_CR || mcbuffer[0] == CHAR_NL)\n      cb->external_flags |= PCRE2_HASCRORLF;\n\n    /* Set the first and required code units appropriately. If no previous\n    first code unit, set it from this character, but revert to none on a zero\n    repeat. Otherwise, leave the firstcu value alone, and don't change it on\n    a zero repeat. */\n\n    if (firstcuflags == REQ_UNSET)\n      {\n      zerofirstcuflags = REQ_NONE;\n      zeroreqcu = reqcu;\n      zeroreqcuflags = reqcuflags;\n\n      /* If the character is more than one code unit long, we can set a single\n      firstcu only if it is not to be matched caselessly. Multiple possible\n      starting code units may be picked up later in the studying code. */\n\n      if (mclength == 1 || req_caseopt == 0)\n        {\n        firstcu = mcbuffer[0];\n        firstcuflags = req_caseopt;\n        if (mclength != 1)\n          {\n          reqcu = code[-1];\n          reqcuflags = cb->req_varyopt;\n          }\n        }\n      else firstcuflags = reqcuflags = REQ_NONE;\n      }\n\n    /* firstcu was previously set; we can set reqcu only if the length is\n    1 or the matching is caseful. */\n\n    else\n      {\n      zerofirstcu = firstcu;\n      zerofirstcuflags = firstcuflags;\n      zeroreqcu = reqcu;\n      zeroreqcuflags = reqcuflags;\n      if (mclength == 1 || req_caseopt == 0)\n        {\n        reqcu = code[-1];\n        reqcuflags = req_caseopt | cb->req_varyopt;\n        }\n      }\n\n    /* If caselessness was temporarily instated, reset it. */\n\n    if (reset_caseful)\n      {\n      options &= ~PCRE2_CASELESS;\n      req_caseopt = 0;\n      reset_caseful = FALSE;\n      }\n\n    break;    /* End literal character handling */\n    }         /* End of big switch */\n  }           /* End of big loop */\n\n/* LCOV_EXCL_START */\nPCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */\nreturn 0;                  /* Avoid compiler warnings */\n/* LCOV_EXCL_STOP */\n}\n\n\n\n/*************************************************\n*   Compile regex: a sequence of alternatives    *\n*************************************************/\n\n/* On entry, pptr is pointing past the bracket meta, but on return it points to\nthe closing bracket or META_END. The code variable is pointing at the code unit\ninto which the BRA operator has been stored. This function is used during the\npre-compile phase when we are trying to find out the amount of memory needed,\nas well as during the real compile phase. The value of lengthptr distinguishes\nthe two phases.\n\nArguments:\n  options           option bits, including any changes for this subpattern\n  xoptions          extra option bits, ditto\n  codeptr           -> the address of the current code pointer\n  pptrptr           -> the address of the current parsed pattern pointer\n  errorcodeptr      -> pointer to error code variable\n  skipunits         skip this many code units at start (for brackets and OP_COND)\n  firstcuptr        place to put the first required code unit\n  firstcuflagsptr   place to put the first code unit flags\n  reqcuptr          place to put the last required code unit\n  reqcuflagsptr     place to put the last required code unit flags\n  bcptr             pointer to the chain of currently open branches\n  cb                points to the data block with tables pointers etc.\n  lengthptr         NULL during the real compile phase\n                    points to length accumulator during pre-compile phase\n\nReturns:            0 There has been an error\n                   +1 Success, this group must match at least one character\n                   -1 Success, this group may match an empty string\n*/\n\nstatic int\ncompile_regex(uint32_t options, uint32_t xoptions, PCRE2_UCHAR **codeptr,\n  uint32_t **pptrptr, int *errorcodeptr, uint32_t skipunits,\n  uint32_t *firstcuptr, uint32_t *firstcuflagsptr, uint32_t *reqcuptr,\n  uint32_t *reqcuflagsptr, branch_chain *bcptr, open_capitem *open_caps,\n  compile_block *cb, PCRE2_SIZE *lengthptr)\n{\nPCRE2_UCHAR *code = *codeptr;\nPCRE2_UCHAR *last_branch = code;\nPCRE2_UCHAR *start_bracket = code;\nBOOL lookbehind;\nopen_capitem capitem;\nint capnumber = 0;\nint okreturn = 1;\nuint32_t *pptr = *pptrptr;\nuint32_t firstcu, reqcu;\nuint32_t lookbehindlength;\nuint32_t lookbehindminlength;\nuint32_t firstcuflags, reqcuflags;\nPCRE2_SIZE length;\nbranch_chain bc;\n\n/* If set, call the external function that checks for stack availability. */\n\nif (cb->cx->stack_guard != NULL &&\n    cb->cx->stack_guard(cb->parens_depth, cb->cx->stack_guard_data))\n  {\n  *errorcodeptr= ERR33;\n  cb->erroroffset = 0;\n  return 0;\n  }\n\n/* Miscellaneous initialization */\n\nbc.outer = bcptr;\nbc.current_branch = code;\n\nfirstcu = reqcu = 0;\nfirstcuflags = reqcuflags = REQ_UNSET;\n\n/* Accumulate the length for use in the pre-compile phase. Start with the\nlength of the BRA and KET and any extra code units that are required at the\nbeginning. We accumulate in a local variable to save frequent testing of\nlengthptr for NULL. We cannot do this by looking at the value of 'code' at the\nstart and end of each alternative, because compiled items are discarded during\nthe pre-compile phase so that the workspace is not exceeded. */\n\nlength = 2 + 2*LINK_SIZE + skipunits;\n\n/* Remember if this is a lookbehind assertion, and if it is, save its length\nand skip over the pattern offset. */\n\nlookbehind = *code == OP_ASSERTBACK ||\n             *code == OP_ASSERTBACK_NOT ||\n             *code == OP_ASSERTBACK_NA;\n\nif (lookbehind)\n  {\n  lookbehindlength = META_DATA(pptr[-1]);\n  lookbehindminlength = *pptr;\n  pptr += SIZEOFFSET;\n  }\nelse lookbehindlength = lookbehindminlength = 0;\n\n/* If this is a capturing subpattern, add to the chain of open capturing items\nso that we can detect them if (*ACCEPT) is encountered. Note that only OP_CBRA\nneed be tested here; changing this opcode to one of its variants, e.g.\nOP_SCBRAPOS, happens later, after the group has been compiled. */\n\nif (*code == OP_CBRA)\n  {\n  capnumber = GET2(code, 1 + LINK_SIZE);\n  capitem.number = capnumber;\n  capitem.next = open_caps;\n  capitem.assert_depth = cb->assert_depth;\n  open_caps = &capitem;\n  }\n\n/* Offset is set zero to mark that this bracket is still open */\n\nPUT(code, 1, 0);\ncode += 1 + LINK_SIZE + skipunits;\n\n/* Loop for each alternative branch */\n\nfor (;;)\n  {\n  int branch_return;\n  uint32_t branchfirstcu = 0, branchreqcu = 0;\n  uint32_t branchfirstcuflags = REQ_UNSET, branchreqcuflags = REQ_UNSET;\n\n  /* Insert OP_REVERSE or OP_VREVERSE if this is a lookbehind assertion. There\n  is only a single minimum length for the whole assertion. When the minimum\n  length is LOOKBEHIND_MAX it means that all branches are of fixed length,\n  though not necessarily the same length. In this case, the original OP_REVERSE\n  can be used. It can also be used if a branch in a variable length lookbehind\n  has the same maximum and minimum. Otherwise, use OP_VREVERSE, which has both\n  maximum and minimum values. */\n\n  if (lookbehind && lookbehindlength > 0)\n    {\n    if (lookbehindminlength == LOOKBEHIND_MAX ||\n        lookbehindminlength == lookbehindlength)\n      {\n      *code++ = OP_REVERSE;\n      PUT2INC(code, 0, lookbehindlength);\n      length += 1 + IMM2_SIZE;\n      }\n    else\n      {\n      *code++ = OP_VREVERSE;\n      PUT2INC(code, 0, lookbehindminlength);\n      PUT2INC(code, 0, lookbehindlength);\n      length += 1 + 2*IMM2_SIZE;\n      }\n    }\n\n  /* Now compile the branch; in the pre-compile phase its length gets added\n  into the length. */\n\n  if ((branch_return =\n        compile_branch(&options, &xoptions, &code, &pptr, errorcodeptr,\n          &branchfirstcu, &branchfirstcuflags, &branchreqcu, &branchreqcuflags,\n          &bc, open_caps, cb, (lengthptr == NULL)? NULL : &length)) == 0)\n    return 0;\n\n  /* If a branch can match an empty string, so can the whole group. */\n\n  if (branch_return < 0) okreturn = -1;\n\n  /* In the real compile phase, there is some post-processing to be done. */\n\n  if (lengthptr == NULL)\n    {\n    /* If this is the first branch, the firstcu and reqcu values for the\n    branch become the values for the regex. */\n\n    if (*last_branch != OP_ALT)\n      {\n      firstcu = branchfirstcu;\n      firstcuflags = branchfirstcuflags;\n      reqcu = branchreqcu;\n      reqcuflags = branchreqcuflags;\n      }\n\n    /* If this is not the first branch, the first char and reqcu have to\n    match the values from all the previous branches, except that if the\n    previous value for reqcu didn't have REQ_VARY set, it can still match,\n    and we set REQ_VARY for the group from this branch's value. */\n\n    else\n      {\n      /* If we previously had a firstcu, but it doesn't match the new branch,\n      we have to abandon the firstcu for the regex, but if there was\n      previously no reqcu, it takes on the value of the old firstcu. */\n\n      if (firstcuflags != branchfirstcuflags || firstcu != branchfirstcu)\n        {\n        if (firstcuflags < REQ_NONE)\n          {\n          if (reqcuflags >= REQ_NONE)\n            {\n            reqcu = firstcu;\n            reqcuflags = firstcuflags;\n            }\n          }\n        firstcuflags = REQ_NONE;\n        }\n\n      /* If we (now or from before) have no firstcu, a firstcu from the\n      branch becomes a reqcu if there isn't a branch reqcu. */\n\n      if (firstcuflags >= REQ_NONE && branchfirstcuflags < REQ_NONE &&\n          branchreqcuflags >= REQ_NONE)\n        {\n        branchreqcu = branchfirstcu;\n        branchreqcuflags = branchfirstcuflags;\n        }\n\n      /* Now ensure that the reqcus match */\n\n      if (((reqcuflags & ~REQ_VARY) != (branchreqcuflags & ~REQ_VARY)) ||\n          reqcu != branchreqcu)\n        reqcuflags = REQ_NONE;\n      else\n        {\n        reqcu = branchreqcu;\n        reqcuflags |= branchreqcuflags; /* To \"or\" REQ_VARY if present */\n        }\n      }\n    }\n\n  /* Handle reaching the end of the expression, either ')' or end of pattern.\n  In the real compile phase, go back through the alternative branches and\n  reverse the chain of offsets, with the field in the BRA item now becoming an\n  offset to the first alternative. If there are no alternatives, it points to\n  the end of the group. The length in the terminating ket is always the length\n  of the whole bracketed item. Return leaving the pointer at the terminating\n  char. */\n\n  if (META_CODE(*pptr) != META_ALT)\n    {\n    if (lengthptr == NULL)\n      {\n      uint32_t branch_length = (uint32_t)(code - last_branch);\n      do\n        {\n        uint32_t prev_length = GET(last_branch, 1);\n        PUT(last_branch, 1, branch_length);\n        branch_length = prev_length;\n        last_branch -= branch_length;\n        }\n      while (branch_length > 0);\n      }\n\n    /* Fill in the ket */\n\n    *code = OP_KET;\n    PUT(code, 1, (uint32_t)(code - start_bracket));\n    code += 1 + LINK_SIZE;\n\n    /* Set values to pass back */\n\n    *codeptr = code;\n    *pptrptr = pptr;\n    *firstcuptr = firstcu;\n    *firstcuflagsptr = firstcuflags;\n    *reqcuptr = reqcu;\n    *reqcuflagsptr = reqcuflags;\n    if (lengthptr != NULL)\n      {\n      if (OFLOW_MAX - *lengthptr < length)\n        {\n        *errorcodeptr = ERR20;\n        return 0;\n        }\n      *lengthptr += length;\n      }\n    return okreturn;\n    }\n\n  /* Another branch follows. In the pre-compile phase, we can move the code\n  pointer back to where it was for the start of the first branch. (That is,\n  pretend that each branch is the only one.)\n\n  In the real compile phase, insert an ALT node. Its length field points back\n  to the previous branch while the bracket remains open. At the end the chain\n  is reversed. It's done like this so that the start of the bracket has a\n  zero offset until it is closed, making it possible to detect recursion. */\n\n  if (lengthptr != NULL)\n    {\n    code = *codeptr + 1 + LINK_SIZE + skipunits;\n    length += 1 + LINK_SIZE;\n    }\n  else\n    {\n    *code = OP_ALT;\n    PUT(code, 1, (int)(code - last_branch));\n    bc.current_branch = last_branch = code;\n    code += 1 + LINK_SIZE;\n    }\n\n  /* Set the maximum lookbehind length for the next branch (if not in a\n  lookbehind the value will be zero) and then advance past the vertical bar. */\n\n  lookbehindlength = META_DATA(*pptr);\n  pptr++;\n  }\n\n/* LCOV_EXCL_START */\nPCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */\nreturn 0;                  /* Avoid compiler warnings */\n/* LCOV_EXCL_STOP */\n}\n\n\n\n/*************************************************\n*          Check for anchored pattern            *\n*************************************************/\n\n/* Try to find out if this is an anchored regular expression. Consider each\nalternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket\nall of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then\nit's anchored. However, if this is a multiline pattern, then only OP_SOD will\nbe found, because ^ generates OP_CIRCM in that mode.\n\nWe can also consider a regex to be anchored if OP_SOM starts all its branches.\nThis is the code for \\G, which means \"match at start of match position, taking\ninto account the match offset\".\n\nA branch is also implicitly anchored if it starts with .* and DOTALL is set,\nbecause that will try the rest of the pattern at all possible matching points,\nso there is no point trying again.... er ....\n\n.... except when the .* appears inside capturing parentheses, and there is a\nsubsequent back reference to those parentheses. We haven't enough information\nto catch that case precisely.\n\nAt first, the best we could do was to detect when .* was in capturing brackets\nand the highest back reference was greater than or equal to that level.\nHowever, by keeping a bitmap of the first 31 back references, we can catch some\nof the more common cases more precisely.\n\n... A second exception is when the .* appears inside an atomic group, because\nthis prevents the number of characters it matches from being adjusted.\n\nArguments:\n  code           points to start of the compiled pattern\n  bracket_map    a bitmap of which brackets we are inside while testing; this\n                   handles up to substring 31; after that we just have to take\n                   the less precise approach\n  cb             points to the compile data block\n  atomcount      atomic group level\n  inassert       TRUE if in an assertion\n  dotstar_anchor TRUE if automatic anchoring optimization is enabled\n\nReturns:     TRUE or FALSE\n*/\n\nstatic BOOL\nis_anchored(PCRE2_SPTR code, uint32_t bracket_map, compile_block *cb,\n  int atomcount, BOOL inassert, BOOL dotstar_anchor)\n{\ndo {\n   PCRE2_SPTR scode = first_significant_code(\n     code + PRIV(OP_lengths)[*code], FALSE);\n   int op = *scode;\n\n   /* Non-capturing brackets */\n\n   if (op == OP_BRA  || op == OP_BRAPOS ||\n       op == OP_SBRA || op == OP_SBRAPOS)\n     {\n     if (!is_anchored(scode, bracket_map, cb, atomcount, inassert, dotstar_anchor))\n       return FALSE;\n     }\n\n   /* Capturing brackets */\n\n   else if (op == OP_CBRA  || op == OP_CBRAPOS ||\n            op == OP_SCBRA || op == OP_SCBRAPOS)\n     {\n     int n = GET2(scode, 1+LINK_SIZE);\n     uint32_t new_map = bracket_map | ((n < 32)? (1u << n) : 1);\n     if (!is_anchored(scode, new_map, cb, atomcount, inassert, dotstar_anchor)) return FALSE;\n     }\n\n   /* Positive forward assertion */\n\n   else if (op == OP_ASSERT || op == OP_ASSERT_NA)\n     {\n     if (!is_anchored(scode, bracket_map, cb, atomcount, TRUE, dotstar_anchor)) return FALSE;\n     }\n\n   /* Condition. If there is no second branch, it can't be anchored. */\n\n   else if (op == OP_COND || op == OP_SCOND)\n     {\n     if (scode[GET(scode,1)] != OP_ALT) return FALSE;\n     if (!is_anchored(scode, bracket_map, cb, atomcount, inassert, dotstar_anchor))\n       return FALSE;\n     }\n\n   /* Atomic groups */\n\n   else if (op == OP_ONCE)\n     {\n     if (!is_anchored(scode, bracket_map, cb, atomcount + 1, inassert, dotstar_anchor))\n       return FALSE;\n     }\n\n   /* .* is not anchored unless DOTALL is set (which generates OP_ALLANY) and\n   it isn't in brackets that are or may be referenced or inside an atomic\n   group or an assertion. Also the pattern must not contain *PRUNE or *SKIP,\n   because these break the feature. Consider, for example, /(?s).*?(*PRUNE)b/\n   with the subject \"aab\", which matches \"b\", i.e. not at the start of a line.\n   There is also an option that disables auto-anchoring. */\n\n   else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR ||\n             op == OP_TYPEPOSSTAR))\n     {\n     if (scode[1] != OP_ALLANY || (bracket_map & cb->backref_map) != 0 ||\n         atomcount > 0 || cb->had_pruneorskip || inassert || !dotstar_anchor)\n       return FALSE;\n     }\n\n   /* Check for explicit anchoring */\n\n   else if (op != OP_SOD && op != OP_SOM && op != OP_CIRC) return FALSE;\n\n   code += GET(code, 1);\n   }\nwhile (*code == OP_ALT);   /* Loop for each alternative */\nreturn TRUE;\n}\n\n\n\n/*************************************************\n*         Check for starting with ^ or .*        *\n*************************************************/\n\n/* This is called to find out if every branch starts with ^ or .* so that\n\"first char\" processing can be done to speed things up in multiline\nmatching and for non-DOTALL patterns that start with .* (which must start at\nthe beginning or after \\n). As in the case of is_anchored() (see above), we\nhave to take account of back references to capturing brackets that contain .*\nbecause in that case we can't make the assumption. Also, the appearance of .*\ninside atomic brackets or in an assertion, or in a pattern that contains *PRUNE\nor *SKIP does not count, because once again the assumption no longer holds.\n\nArguments:\n  code           points to start of the compiled pattern or a group\n  bracket_map    a bitmap of which brackets we are inside while testing; this\n                   handles up to substring 31; after that we just have to take\n                   the less precise approach\n  cb             points to the compile data\n  atomcount      atomic group level\n  inassert       TRUE if in an assertion\n  dotstar_anchor TRUE if automatic anchoring optimization is enabled\n\nReturns:         TRUE or FALSE\n*/\n\nstatic BOOL\nis_startline(PCRE2_SPTR code, unsigned int bracket_map, compile_block *cb,\n  int atomcount, BOOL inassert, BOOL dotstar_anchor)\n{\ndo {\n   PCRE2_SPTR scode = first_significant_code(\n     code + PRIV(OP_lengths)[*code], FALSE);\n   int op = *scode;\n\n   /* If we are at the start of a conditional assertion group, *both* the\n   conditional assertion *and* what follows the condition must satisfy the test\n   for start of line. Other kinds of condition fail. Note that there may be an\n   auto-callout at the start of a condition. */\n\n   if (op == OP_COND)\n     {\n     scode += 1 + LINK_SIZE;\n\n     if (*scode == OP_CALLOUT) scode += PRIV(OP_lengths)[OP_CALLOUT];\n       else if (*scode == OP_CALLOUT_STR) scode += GET(scode, 1 + 2*LINK_SIZE);\n\n     switch (*scode)\n       {\n       case OP_CREF:\n       case OP_DNCREF:\n       case OP_RREF:\n       case OP_DNRREF:\n       case OP_FAIL:\n       case OP_FALSE:\n       case OP_TRUE:\n       return FALSE;\n\n       default:     /* Assertion */\n       if (!is_startline(scode, bracket_map, cb, atomcount, TRUE, dotstar_anchor))\n         return FALSE;\n       do scode += GET(scode, 1); while (*scode == OP_ALT);\n       scode += 1 + LINK_SIZE;\n       break;\n       }\n     scode = first_significant_code(scode, FALSE);\n     op = *scode;\n     }\n\n   /* Non-capturing brackets */\n\n   if (op == OP_BRA  || op == OP_BRAPOS ||\n       op == OP_SBRA || op == OP_SBRAPOS)\n     {\n     if (!is_startline(scode, bracket_map, cb, atomcount, inassert, dotstar_anchor))\n       return FALSE;\n     }\n\n   /* Capturing brackets */\n\n   else if (op == OP_CBRA  || op == OP_CBRAPOS ||\n            op == OP_SCBRA || op == OP_SCBRAPOS)\n     {\n     int n = GET2(scode, 1+LINK_SIZE);\n     unsigned int new_map = bracket_map | ((n < 32)? (1u << n) : 1);\n     if (!is_startline(scode, new_map, cb, atomcount, inassert, dotstar_anchor))\n       return FALSE;\n     }\n\n   /* Positive forward assertions */\n\n   else if (op == OP_ASSERT || op == OP_ASSERT_NA)\n     {\n     if (!is_startline(scode, bracket_map, cb, atomcount, TRUE, dotstar_anchor))\n       return FALSE;\n     }\n\n   /* Atomic brackets */\n\n   else if (op == OP_ONCE)\n     {\n     if (!is_startline(scode, bracket_map, cb, atomcount + 1, inassert, dotstar_anchor))\n       return FALSE;\n     }\n\n   /* .* means \"start at start or after \\n\" if it isn't in atomic brackets or\n   brackets that may be referenced or an assertion, and as long as the pattern\n   does not contain *PRUNE or *SKIP, because these break the feature. Consider,\n   for example, /.*?a(*PRUNE)b/ with the subject \"aab\", which matches \"ab\",\n   i.e. not at the start of a line. There is also an option that disables this\n   optimization. */\n\n   else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR || op == OP_TYPEPOSSTAR)\n     {\n     if (scode[1] != OP_ANY || (bracket_map & cb->backref_map) != 0 ||\n         atomcount > 0 || cb->had_pruneorskip || inassert || !dotstar_anchor)\n       return FALSE;\n     }\n\n   /* Check for explicit circumflex; anything else gives a FALSE result. Note\n   in particular that this includes atomic brackets OP_ONCE because the number\n   of characters matched by .* cannot be adjusted inside them. */\n\n   else if (op != OP_CIRC && op != OP_CIRCM) return FALSE;\n\n   /* Move on to the next alternative */\n\n   code += GET(code, 1);\n   }\nwhile (*code == OP_ALT);  /* Loop for each alternative */\nreturn TRUE;\n}\n\n\n\n/*************************************************\n*   Scan compiled regex for recursion reference  *\n*************************************************/\n\n/* This function scans through a compiled pattern until it finds an instance of\nOP_RECURSE.\n\nArguments:\n  code        points to start of expression\n  utf         TRUE in UTF mode\n\nReturns:      pointer to the opcode for OP_RECURSE, or NULL if not found\n*/\n\nstatic PCRE2_UCHAR *\nfind_recurse(PCRE2_UCHAR *code, BOOL utf)\n{\nfor (;;)\n  {\n  PCRE2_UCHAR c = *code;\n  if (c == OP_END) return NULL;\n  if (c == OP_RECURSE) return code;\n\n  /* XCLASS is used for classes that cannot be represented just by a bit map.\n  This includes negated single high-valued characters. ECLASS is used for\n  classes that use set operations internally. CALLOUT_STR is used for\n  callouts with string arguments. In each case the length in the table is\n  zero; the actual length is stored in the compiled code. */\n\n  if (c == OP_XCLASS || c == OP_ECLASS) code += GET(code, 1);\n  else if (c == OP_CALLOUT_STR) code += GET(code, 1 + 2*LINK_SIZE);\n\n  /* Otherwise, we can get the item's length from the table, except that for\n  repeated character types, we have to test for \\p and \\P, which have an extra\n  two code units of parameters, and for MARK/PRUNE/SKIP/THEN with an argument,\n  we must add in its length. */\n\n  else\n    {\n    switch(c)\n      {\n      case OP_TYPESTAR:\n      case OP_TYPEMINSTAR:\n      case OP_TYPEPLUS:\n      case OP_TYPEMINPLUS:\n      case OP_TYPEQUERY:\n      case OP_TYPEMINQUERY:\n      case OP_TYPEPOSSTAR:\n      case OP_TYPEPOSPLUS:\n      case OP_TYPEPOSQUERY:\n      if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2;\n      break;\n\n      case OP_TYPEPOSUPTO:\n      case OP_TYPEUPTO:\n      case OP_TYPEMINUPTO:\n      case OP_TYPEEXACT:\n      if (code[1 + IMM2_SIZE] == OP_PROP || code[1 + IMM2_SIZE] == OP_NOTPROP)\n        code += 2;\n      break;\n\n      case OP_MARK:\n      case OP_COMMIT_ARG:\n      case OP_PRUNE_ARG:\n      case OP_SKIP_ARG:\n      case OP_THEN_ARG:\n      code += code[1];\n      break;\n      }\n\n    /* Add in the fixed length from the table */\n\n    code += PRIV(OP_lengths)[c];\n\n    /* In UTF-8 and UTF-16 modes, opcodes that are followed by a character may\n    be followed by a multi-unit character. The length in the table is a\n    minimum, so we have to arrange to skip the extra units. */\n\n#ifdef MAYBE_UTF_MULTI\n    if (utf) switch(c)\n      {\n      case OP_CHAR:\n      case OP_CHARI:\n      case OP_NOT:\n      case OP_NOTI:\n      case OP_EXACT:\n      case OP_EXACTI:\n      case OP_NOTEXACT:\n      case OP_NOTEXACTI:\n      case OP_UPTO:\n      case OP_UPTOI:\n      case OP_NOTUPTO:\n      case OP_NOTUPTOI:\n      case OP_MINUPTO:\n      case OP_MINUPTOI:\n      case OP_NOTMINUPTO:\n      case OP_NOTMINUPTOI:\n      case OP_POSUPTO:\n      case OP_POSUPTOI:\n      case OP_NOTPOSUPTO:\n      case OP_NOTPOSUPTOI:\n      case OP_STAR:\n      case OP_STARI:\n      case OP_NOTSTAR:\n      case OP_NOTSTARI:\n      case OP_MINSTAR:\n      case OP_MINSTARI:\n      case OP_NOTMINSTAR:\n      case OP_NOTMINSTARI:\n      case OP_POSSTAR:\n      case OP_POSSTARI:\n      case OP_NOTPOSSTAR:\n      case OP_NOTPOSSTARI:\n      case OP_PLUS:\n      case OP_PLUSI:\n      case OP_NOTPLUS:\n      case OP_NOTPLUSI:\n      case OP_MINPLUS:\n      case OP_MINPLUSI:\n      case OP_NOTMINPLUS:\n      case OP_NOTMINPLUSI:\n      case OP_POSPLUS:\n      case OP_POSPLUSI:\n      case OP_NOTPOSPLUS:\n      case OP_NOTPOSPLUSI:\n      case OP_QUERY:\n      case OP_QUERYI:\n      case OP_NOTQUERY:\n      case OP_NOTQUERYI:\n      case OP_MINQUERY:\n      case OP_MINQUERYI:\n      case OP_NOTMINQUERY:\n      case OP_NOTMINQUERYI:\n      case OP_POSQUERY:\n      case OP_POSQUERYI:\n      case OP_NOTPOSQUERY:\n      case OP_NOTPOSQUERYI:\n      if (HAS_EXTRALEN(code[-1])) code += GET_EXTRALEN(code[-1]);\n      break;\n      }\n#else\n    (void)(utf);  /* Keep compiler happy by referencing function argument */\n#endif  /* MAYBE_UTF_MULTI */\n    }\n  }\n}\n\n\n\n/*************************************************\n*    Check for asserted fixed first code unit    *\n*************************************************/\n\n/* During compilation, the \"first code unit\" settings from forward assertions\nare discarded, because they can cause conflicts with actual literals that\nfollow. However, if we end up without a first code unit setting for an\nunanchored pattern, it is worth scanning the regex to see if there is an\ninitial asserted first code unit. If all branches start with the same asserted\ncode unit, or with a non-conditional bracket all of whose alternatives start\nwith the same asserted code unit (recurse ad lib), then we return that code\nunit, with the flags set to zero or REQ_CASELESS; otherwise return zero with\nREQ_NONE in the flags.\n\nArguments:\n  code       points to start of compiled pattern\n  flags      points to the first code unit flags\n  inassert   non-zero if in an assertion\n\nReturns:     the fixed first code unit, or 0 with REQ_NONE in flags\n*/\n\nstatic uint32_t\nfind_firstassertedcu(PCRE2_SPTR code, uint32_t *flags, uint32_t inassert)\n{\nuint32_t c = 0;\nuint32_t cflags = REQ_NONE;\n\n*flags = REQ_NONE;\ndo {\n   uint32_t d;\n   uint32_t dflags;\n   int xl = (*code == OP_CBRA || *code == OP_SCBRA ||\n             *code == OP_CBRAPOS || *code == OP_SCBRAPOS)? IMM2_SIZE:0;\n   PCRE2_SPTR scode = first_significant_code(code + 1+LINK_SIZE + xl, TRUE);\n   PCRE2_UCHAR op = *scode;\n\n   switch(op)\n     {\n     default:\n     return 0;\n\n     case OP_BRA:\n     case OP_BRAPOS:\n     case OP_CBRA:\n     case OP_SCBRA:\n     case OP_CBRAPOS:\n     case OP_SCBRAPOS:\n     case OP_ASSERT:\n     case OP_ASSERT_NA:\n     case OP_ONCE:\n     case OP_SCRIPT_RUN:\n     d = find_firstassertedcu(scode, &dflags, inassert +\n       ((op == OP_ASSERT || op == OP_ASSERT_NA)?1:0));\n     if (dflags >= REQ_NONE) return 0;\n     if (cflags >= REQ_NONE) { c = d; cflags = dflags; }\n       else if (c != d || cflags != dflags) return 0;\n     break;\n\n     case OP_EXACT:\n     scode += IMM2_SIZE;\n     PCRE2_FALLTHROUGH /* Fall through */\n\n     case OP_CHAR:\n     case OP_PLUS:\n     case OP_MINPLUS:\n     case OP_POSPLUS:\n     if (inassert == 0) return 0;\n     if (cflags >= REQ_NONE) { c = scode[1]; cflags = 0; }\n       else if (c != scode[1]) return 0;\n     break;\n\n     case OP_EXACTI:\n     scode += IMM2_SIZE;\n     PCRE2_FALLTHROUGH /* Fall through */\n\n     case OP_CHARI:\n     case OP_PLUSI:\n     case OP_MINPLUSI:\n     case OP_POSPLUSI:\n     if (inassert == 0) return 0;\n\n     /* If the character is more than one code unit long, we cannot set its\n     first code unit when matching caselessly. Later scanning may pick up\n     multiple code units. */\n\n#ifdef SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\n     if (scode[1] >= 0x80) return 0;\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n     if (scode[1] >= 0xd800 && scode[1] <= 0xdfff) return 0;\n#endif\n#endif\n\n     if (cflags >= REQ_NONE) { c = scode[1]; cflags = REQ_CASELESS; }\n       else if (c != scode[1]) return 0;\n     break;\n     }\n\n   code += GET(code, 1);\n   }\nwhile (*code == OP_ALT);\n\n*flags = cflags;\nreturn c;\n}\n\n\n\n/*************************************************\n*             Skip in parsed pattern             *\n*************************************************/\n\n/* This function is called to skip parts of the parsed pattern when finding the\nlength of a lookbehind branch. It is called after (*ACCEPT) and (*FAIL) to find\nthe end of the branch, it is called to skip over an internal lookaround or\n(DEFINE) group, and it is also called to skip to the end of a class, during\nwhich it will never encounter nested groups (but there's no need to have\nspecial code for that).\n\nWhen called to find the end of a branch or group, pptr must point to the first\nmeta code inside the branch, not the branch-starting code. In other cases it\ncan point to the item that causes the function to be called.\n\nArguments:\n  pptr       current pointer to skip from\n  skiptype   PSKIP_CLASS when skipping to end of class\n             PSKIP_ALT when META_ALT ends the skip\n             PSKIP_KET when only META_KET ends the skip\n\nReturns:     new value of pptr\n             NULL if META_END is reached - should never occur\n               or for an unknown meta value - likewise\n*/\n\nstatic uint32_t *\nparsed_skip(uint32_t *pptr, uint32_t skiptype)\n{\nuint32_t nestlevel = 0;\n\nfor (;; pptr++)\n  {\n  uint32_t meta = META_CODE(*pptr);\n\n  switch(meta)\n    {\n    default:  /* Just skip over most items */\n    if (meta < META_END) continue;  /* Literal */\n    break;\n\n    /* The parsed regex is malformed; we have reached the end and did\n    not find the end of the construct which we are skipping over. */\n\n    /* LCOV_EXCL_START */\n    case META_END:\n    PCRE2_DEBUG_UNREACHABLE();\n    return NULL;\n    /* LCOV_EXCL_STOP */\n\n    /* The data for these items is variable in length. */\n\n    case META_BACKREF:  /* Offset is present only if group >= 10 */\n    if (META_DATA(*pptr) >= 10) pptr += SIZEOFFSET;\n    break;\n\n    case META_ESCAPE:\n    if (*pptr - META_ESCAPE == ESC_P || *pptr - META_ESCAPE == ESC_p)\n      pptr += 1;     /* Skip prop data */\n    break;\n\n    case META_MARK:     /* Add the length of the name. */\n    case META_COMMIT_ARG:\n    case META_PRUNE_ARG:\n    case META_SKIP_ARG:\n    case META_THEN_ARG:\n    pptr += pptr[1];\n    break;\n\n    /* These are the \"active\" items in this loop. */\n\n    case META_CLASS_END:\n    if (skiptype == PSKIP_CLASS) return pptr;\n    break;\n\n    case META_ATOMIC:\n    case META_CAPTURE:\n    case META_COND_ASSERT:\n    case META_COND_DEFINE:\n    case META_COND_NAME:\n    case META_COND_NUMBER:\n    case META_COND_RNAME:\n    case META_COND_RNUMBER:\n    case META_COND_VERSION:\n    case META_SCS:\n    case META_LOOKAHEAD:\n    case META_LOOKAHEADNOT:\n    case META_LOOKAHEAD_NA:\n    case META_LOOKBEHIND:\n    case META_LOOKBEHINDNOT:\n    case META_LOOKBEHIND_NA:\n    case META_NOCAPTURE:\n    case META_SCRIPT_RUN:\n    nestlevel++;\n    break;\n\n    case META_ALT:\n    if (nestlevel == 0 && skiptype == PSKIP_ALT) return pptr;\n    break;\n\n    case META_KET:\n    if (nestlevel == 0) return pptr;\n    nestlevel--;\n    break;\n    }\n\n  /* The extra data item length for each meta is in a table. */\n\n  meta = (meta >> 16) & 0x7fff;\n  if (meta >= sizeof(meta_extra_lengths)) return NULL;\n  pptr += meta_extra_lengths[meta];\n  }\n\n/* LCOV_EXCL_START */\nPCRE2_UNREACHABLE(); /* Control never reaches here */\n/* LCOV_EXCL_STOP */\n}\n\n\n\n/*************************************************\n*       Find length of a parsed group            *\n*************************************************/\n\n/* This is called for nested groups within a branch of a lookbehind whose\nlength is being computed. On entry, the pointer must be at the first element\nafter the group initializing code. On exit it points to OP_KET. Caching is used\nto improve processing speed when the same capturing group occurs many times.\n\nArguments:\n  pptrptr     pointer to pointer in the parsed pattern\n  minptr      where to return the minimum length\n  isinline    FALSE if a reference or recursion; TRUE for inline group\n  errcodeptr  pointer to the errorcode\n  lcptr       pointer to the loop counter\n  group       number of captured group or -1 for a non-capturing group\n  recurses    chain of recurse_check to catch mutual recursion\n  cb          pointer to the compile data\n\nReturns:      the maximum group length or a negative number\n*/\n\nstatic int\nget_grouplength(uint32_t **pptrptr, int *minptr, BOOL isinline, int *errcodeptr,\n  int *lcptr, int group, parsed_recurse_check *recurses, compile_block *cb)\n{\nuint32_t *gi = cb->groupinfo + 2 * group;\nint branchlength, branchminlength;\nint grouplength = -1;\nint groupminlength = INT_MAX;\n\n/* The cache can be used only if there is no possibility of there being two\ngroups with the same number. We do not need to set the end pointer for a group\nthat is being processed as a back reference or recursion, but we must do so for\nan inline group. */\n\nif (group > 0 && (cb->external_flags & PCRE2_DUPCAPUSED) == 0)\n  {\n  uint32_t groupinfo = gi[0];\n  if ((groupinfo & GI_NOT_FIXED_LENGTH) != 0) return -1;\n  if ((groupinfo & GI_SET_FIXED_LENGTH) != 0)\n    {\n    if (isinline) *pptrptr = parsed_skip(*pptrptr, PSKIP_KET);\n    *minptr = gi[1];\n    return groupinfo & GI_FIXED_LENGTH_MASK;\n    }\n  }\n\n/* Scan the group. In this case we find the end pointer of necessity. */\n\nfor(;;)\n  {\n  branchlength = get_branchlength(pptrptr, &branchminlength, errcodeptr, lcptr,\n    recurses, cb);\n  if (branchlength < 0) goto ISNOTFIXED;\n  if (branchlength > grouplength) grouplength = branchlength;\n  if (branchminlength < groupminlength) groupminlength = branchminlength;\n  if (**pptrptr == META_KET) break;\n  *pptrptr += 1;   /* Skip META_ALT */\n  }\n\nif (group > 0)\n  {\n  gi[0] |= (uint32_t)(GI_SET_FIXED_LENGTH | grouplength);\n  gi[1] = groupminlength;\n  }\n\n*minptr = groupminlength;\nreturn grouplength;\n\nISNOTFIXED:\nif (group > 0) gi[0] |= GI_NOT_FIXED_LENGTH;\nreturn -1;\n}\n\n\n\n/*************************************************\n*        Find length of a parsed branch          *\n*************************************************/\n\n/* Return fixed maximum and minimum lengths for a branch in a lookbehind,\ngiving an error if the length is not limited. On entry, *pptrptr points to the\nfirst element inside the branch. On exit it is set to point to the ALT or KET.\n\nArguments:\n  pptrptr     pointer to pointer in the parsed pattern\n  minptr      where to return the minimum length\n  errcodeptr  pointer to error code\n  lcptr       pointer to loop counter\n  recurses    chain of recurse_check to catch mutual recursion\n  cb          pointer to compile block\n\nReturns:      the maximum length, or a negative value on error\n*/\n\nstatic int\nget_branchlength(uint32_t **pptrptr, int *minptr, int *errcodeptr, int *lcptr,\n  parsed_recurse_check *recurses, compile_block *cb)\n{\nint branchlength = 0;\nint branchminlength = 0;\nint grouplength, groupminlength;\nuint32_t lastitemlength = 0;\nuint32_t lastitemminlength = 0;\nuint32_t *pptr = *pptrptr;\nPCRE2_SIZE offset;\nparsed_recurse_check this_recurse;\n\n/* A large and/or complex regex can take too long to process. This can happen\nmore often when (?| groups are present in the pattern because their length\ncannot be cached. */\n\nif ((*lcptr)++ > 2000)\n  {\n  *errcodeptr = ERR35;  /* Lookbehind is too complicated */\n  return -1;\n  }\n\n/* Scan the branch, accumulating the length. */\n\nfor (;; pptr++)\n  {\n  parsed_recurse_check *r;\n  uint32_t *gptr, *gptrend;\n  uint32_t escape;\n  uint32_t min, max;\n  uint32_t group = 0;\n  uint32_t itemlength = 0;\n  uint32_t itemminlength = 0;\n\n  if (*pptr < META_END)\n    {\n    itemlength = itemminlength = 1;\n    }\n\n  else switch (META_CODE(*pptr))\n    {\n    case META_KET:\n    case META_ALT:\n    goto EXIT;\n\n    /* (*ACCEPT) and (*FAIL) terminate the branch, but we must skip to the\n    actual termination. */\n\n    case META_ACCEPT:\n    case META_FAIL:\n    pptr = parsed_skip(pptr, PSKIP_ALT);\n    if (pptr == NULL) goto PARSED_SKIP_FAILED;\n    goto EXIT;\n\n    case META_MARK:\n    case META_COMMIT_ARG:\n    case META_PRUNE_ARG:\n    case META_SKIP_ARG:\n    case META_THEN_ARG:\n    pptr += pptr[1] + 1;\n    break;\n\n    case META_CIRCUMFLEX:\n    case META_COMMIT:\n    case META_DOLLAR:\n    case META_PRUNE:\n    case META_SKIP:\n    case META_THEN:\n    break;\n\n    case META_OPTIONS:\n    pptr += 2;\n    break;\n\n    case META_BIGVALUE:\n    itemlength = itemminlength = 1;\n    pptr += 1;\n    break;\n\n    case META_CLASS:\n    case META_CLASS_NOT:\n    itemlength = itemminlength = 1;\n    pptr = parsed_skip(pptr, PSKIP_CLASS);\n    if (pptr == NULL) goto PARSED_SKIP_FAILED;\n    break;\n\n    case META_CLASS_EMPTY_NOT:\n    case META_DOT:\n    itemlength = itemminlength = 1;\n    break;\n\n    case META_CALLOUT_NUMBER:\n    pptr += 3;\n    break;\n\n    case META_CALLOUT_STRING:\n    pptr += 3 + SIZEOFFSET;\n    break;\n\n    /* Only some escapes consume a character. Of those, \\R can match one or two\n    characters, but \\X is never allowed because it matches an unknown number of\n    characters. \\C is allowed only in 32-bit and non-UTF 8/16-bit modes. */\n\n    case META_ESCAPE:\n    escape = META_DATA(*pptr);\n    if (escape == ESC_X) return -1;\n    if (escape == ESC_R)\n      {\n      itemminlength = 1;\n      itemlength = 2;\n      }\n    else if (escape > ESC_b && escape < ESC_Z)\n      {\n#if PCRE2_CODE_UNIT_WIDTH != 32\n      if ((cb->external_options & PCRE2_UTF) != 0 && escape == ESC_C)\n        {\n        *errcodeptr = ERR36;\n        return -1;\n        }\n#endif\n      itemlength = itemminlength = 1;\n      if (escape == ESC_p || escape == ESC_P) pptr++;  /* Skip prop data */\n      }\n    break;\n\n    /* Lookaheads do not contribute to the length of this branch, but they may\n    contain lookbehinds within them whose lengths need to be set. */\n\n    case META_LOOKAHEAD:\n    case META_LOOKAHEADNOT:\n    case META_LOOKAHEAD_NA:\n    case META_SCS:\n    *errcodeptr = check_lookbehinds(pptr + 1, &pptr, recurses, cb, lcptr);\n    if (*errcodeptr != 0) return -1;\n\n    /* Ignore any qualifiers that follow a lookahead assertion. */\n\n    switch (pptr[1])\n      {\n      case META_ASTERISK:\n      case META_ASTERISK_PLUS:\n      case META_ASTERISK_QUERY:\n      case META_PLUS:\n      case META_PLUS_PLUS:\n      case META_PLUS_QUERY:\n      case META_QUERY:\n      case META_QUERY_PLUS:\n      case META_QUERY_QUERY:\n      pptr++;\n      break;\n\n      case META_MINMAX:\n      case META_MINMAX_PLUS:\n      case META_MINMAX_QUERY:\n      pptr += 3;\n      break;\n\n      default:\n      break;\n      }\n    break;\n\n    /* A nested lookbehind does not contribute any length to this lookbehind,\n    but must itself be checked and have its lengths set. Note that\n    set_lookbehind_lengths() updates pptr, leaving it pointing to the final ket\n    of the group, so no need to update it here. */\n\n    case META_LOOKBEHIND:\n    case META_LOOKBEHINDNOT:\n    case META_LOOKBEHIND_NA:\n    if (!set_lookbehind_lengths(&pptr, errcodeptr, lcptr, recurses, cb))\n      return -1;\n    break;\n\n    /* Back references and recursions are handled by very similar code. At this\n    stage, the names generated in the parsing pass are available, but the main\n    name table has not yet been created. So for the named varieties, scan the\n    list of names in order to get the number of the first one in the pattern,\n    and whether or not this name is duplicated. */\n\n    case META_BACKREF_BYNAME:\n    if ((cb->external_options & PCRE2_MATCH_UNSET_BACKREF) != 0)\n      goto ISNOTFIXED;\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case META_RECURSE_BYNAME:\n      {\n      PCRE2_SPTR name;\n      BOOL is_dupname = FALSE;\n      named_group *ng;\n      uint32_t meta_code = META_CODE(*pptr);\n      uint32_t length = *(++pptr);\n\n      GETPLUSOFFSET(offset, pptr);\n      name = cb->start_pattern + offset;\n      ng = PRIV(compile_find_named_group)(name, length, cb);\n\n      if (ng == NULL)\n        {\n        *errcodeptr = ERR15;  /* Non-existent subpattern */\n        cb->erroroffset = offset;\n        return -1;\n        }\n\n      group = ng->number;\n      is_dupname = (ng->hash_dup & NAMED_GROUP_IS_DUPNAME) != 0;\n\n      /* A numerical back reference can be fixed length if duplicate capturing\n      groups are not being used. A non-duplicate named back reference can also\n      be handled. */\n\n      if (meta_code == META_RECURSE_BYNAME ||\n          (!is_dupname && (cb->external_flags & PCRE2_DUPCAPUSED) == 0))\n        goto RECURSE_OR_BACKREF_LENGTH;  /* Handle as a numbered version. */\n      }\n    goto ISNOTFIXED;                     /* Duplicate name or number */\n\n    /* The offset values for back references < 10 are in a separate vector\n    because otherwise they would use more than two parsed pattern elements on\n    64-bit systems. */\n\n    case META_BACKREF:\n    if ((cb->external_options & PCRE2_MATCH_UNSET_BACKREF) != 0 ||\n        (cb->external_flags & PCRE2_DUPCAPUSED) != 0)\n      goto ISNOTFIXED;\n    group = META_DATA(*pptr);\n    if (group < 10)\n      {\n      offset = cb->small_ref_offset[group];\n      goto RECURSE_OR_BACKREF_LENGTH;\n      }\n\n    PCRE2_FALLTHROUGH /* Fall through */\n    /* For groups >= 10 - picking up group twice does no harm. */\n\n    /* A true recursion implies not fixed length, but a subroutine call may\n    be OK. Back reference \"recursions\" are also failed. */\n\n    case META_RECURSE:\n    group = META_DATA(*pptr);\n    GETPLUSOFFSET(offset, pptr);\n\n    RECURSE_OR_BACKREF_LENGTH:\n    if (group > cb->bracount)\n      {\n      cb->erroroffset = offset;\n      *errcodeptr = ERR15;  /* Non-existent subpattern */\n      return -1;\n      }\n    if (group == 0) goto ISNOTFIXED;  /* Local recursion */\n    for (gptr = cb->parsed_pattern; *gptr != META_END; gptr++)\n      {\n      if (META_CODE(*gptr) == META_BIGVALUE) gptr++;\n        else if (*gptr == (META_CAPTURE | group)) break;\n      }\n\n    /* We must start the search for the end of the group at the first meta code\n    inside the group. Otherwise it will be treated as an enclosed group. */\n\n    gptrend = parsed_skip(gptr + 1, PSKIP_KET);\n    if (gptrend == NULL) goto PARSED_SKIP_FAILED;\n    if (pptr > gptr && pptr < gptrend) goto ISNOTFIXED;  /* Local recursion */\n    for (r = recurses; r != NULL; r = r->prev) if (r->groupptr == gptr) break;\n    if (r != NULL) goto ISNOTFIXED;   /* Mutual recursion */\n    this_recurse.prev = recurses;\n    this_recurse.groupptr = gptr;\n\n    /* We do not need to know the position of the end of the group, that is,\n    gptr is not used after the call to get_grouplength(). Setting the second\n    argument FALSE stops it scanning for the end when the length can be found\n    in the cache. */\n\n    gptr++;\n    grouplength = get_grouplength(&gptr, &groupminlength, FALSE, errcodeptr,\n      lcptr, group, &this_recurse, cb);\n    if (grouplength < 0)\n      {\n      if (*errcodeptr == 0) goto ISNOTFIXED;\n      return -1;  /* Error already set */\n      }\n    itemlength = grouplength;\n    itemminlength = groupminlength;\n    break;\n\n    /* A (DEFINE) group is never obeyed inline and so it does not contribute to\n    the length of this branch. Skip from the following item to the next\n    unpaired ket. */\n\n    case META_COND_DEFINE:\n    pptr = parsed_skip(pptr + 1, PSKIP_KET);\n    break;\n\n    /* Check other nested groups - advance past the initial data for each type\n    and then seek a fixed length with get_grouplength(). */\n\n    case META_COND_NAME:\n    case META_COND_NUMBER:\n    case META_COND_RNAME:\n    case META_COND_RNUMBER:\n    pptr += 2 + SIZEOFFSET;\n    goto CHECK_GROUP;\n\n    case META_COND_ASSERT:\n    pptr += 1;\n    goto CHECK_GROUP;\n\n    case META_COND_VERSION:\n    pptr += 4;\n    goto CHECK_GROUP;\n\n    case META_CAPTURE:\n    group = META_DATA(*pptr);\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case META_ATOMIC:\n    case META_NOCAPTURE:\n    case META_SCRIPT_RUN:\n    pptr++;\n    CHECK_GROUP:\n    grouplength = get_grouplength(&pptr, &groupminlength, TRUE, errcodeptr,\n      lcptr, group, recurses, cb);\n    if (grouplength < 0) return -1;\n    itemlength = grouplength;\n    itemminlength = groupminlength;\n    break;\n\n    case META_QUERY:\n    case META_QUERY_PLUS:\n    case META_QUERY_QUERY:\n    min = 0;\n    max = 1;\n    goto REPETITION;\n\n    /* Exact repetition is OK; variable repetition is not. A repetition of zero\n    must subtract the length that has already been added. */\n\n    case META_MINMAX:\n    case META_MINMAX_PLUS:\n    case META_MINMAX_QUERY:\n    min = pptr[1];\n    max = pptr[2];\n    pptr += 2;\n\n    REPETITION:\n    if (max != REPEAT_UNLIMITED)\n      {\n      if (lastitemlength != 0 &&  /* Should not occur, but just in case */\n          max != 0 &&\n          (INT_MAX - branchlength)/lastitemlength < max - 1)\n        {\n        *errcodeptr = ERR87;  /* Integer overflow; lookbehind too big */\n        return -1;\n        }\n      if (min == 0) branchminlength -= lastitemminlength;\n        else itemminlength = (min - 1) * lastitemminlength;\n      if (max == 0) branchlength -= lastitemlength;\n        else itemlength = (max - 1) * lastitemlength;\n      break;\n      }\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    /* Any other item means this branch does not have a fixed length. */\n\n    default:\n    ISNOTFIXED:\n    *errcodeptr = ERR25;   /* Not fixed length */\n    return -1;\n    }\n\n  /* Add the item length to the branchlength, checking for integer overflow and\n  for the branch length exceeding the overall limit. Later, if there is at\n  least one variable-length branch in the group, there is a test for the\n  (smaller) variable-length branch length limit. */\n\n  if (INT_MAX - branchlength < (int)itemlength ||\n      (branchlength += itemlength) > LOOKBEHIND_MAX)\n    {\n    *errcodeptr = ERR87;\n    return -1;\n    }\n\n  branchminlength += itemminlength;\n\n  /* Save this item length for use if the next item is a quantifier. */\n\n  lastitemlength = itemlength;\n  lastitemminlength = itemminlength;\n  }\n\nEXIT:\n*pptrptr = pptr;\n*minptr = branchminlength;\nreturn branchlength;\n\n/* LCOV_EXCL_START */\nPARSED_SKIP_FAILED:\nPCRE2_DEBUG_UNREACHABLE();\n*errcodeptr = ERR90;  /* Unhandled META code - internal error */\nreturn -1;\n/* LCOV_EXCL_STOP */\n}\n\n\n\n/*************************************************\n*        Set lengths in a lookbehind             *\n*************************************************/\n\n/* This function is called for each lookbehind, to set the lengths in its\nbranches. An error occurs if any branch does not have a limited maximum length\nthat is less than the limit (65535). On exit, the pointer must be left on the\nfinal ket.\n\nThe function also maintains the max_lookbehind value. Any lookbehind branch\nthat contains a nested lookbehind may actually look further back than the\nlength of the branch. The additional amount is passed back from\nget_branchlength() as an \"extra\" value.\n\nArguments:\n  pptrptr     pointer to pointer in the parsed pattern\n  errcodeptr  pointer to error code\n  lcptr       pointer to loop counter\n  recurses    chain of recurse_check to catch mutual recursion\n  cb          pointer to compile block\n\nReturns:      TRUE if all is well\n              FALSE otherwise, with error code and offset set\n*/\n\nstatic BOOL\nset_lookbehind_lengths(uint32_t **pptrptr, int *errcodeptr, int *lcptr,\n  parsed_recurse_check *recurses, compile_block *cb)\n{\nPCRE2_SIZE offset;\nuint32_t *bptr = *pptrptr;\nuint32_t *gbptr = bptr;\nint maxlength = 0;\nint minlength = INT_MAX;\nBOOL variable = FALSE;\n\nREADPLUSOFFSET(offset, bptr);  /* Offset for error messages */\n*pptrptr += SIZEOFFSET;\n\n/* Each branch can have a different maximum length, but we can keep only a\nsingle minimum for the whole group, because there's nowhere to save individual\nvalues in the META_ALT item. */\n\ndo\n  {\n  int branchlength, branchminlength;\n\n  *pptrptr += 1;\n  branchlength = get_branchlength(pptrptr, &branchminlength, errcodeptr, lcptr,\n    recurses, cb);\n\n  if (branchlength < 0)\n    {\n    /* The errorcode and offset may already be set from a nested lookbehind. */\n    if (*errcodeptr == 0) *errcodeptr = ERR25;\n    if (cb->erroroffset == PCRE2_UNSET) cb->erroroffset = offset;\n    return FALSE;\n    }\n\n  if (branchlength != branchminlength) variable = TRUE;\n  if (branchminlength < minlength) minlength = branchminlength;\n  if (branchlength > maxlength) maxlength = branchlength;\n  if (branchlength > cb->max_lookbehind) cb->max_lookbehind = branchlength;\n  *bptr |= branchlength;  /* branchlength never more than 65535 */\n  bptr = *pptrptr;\n  }\nwhile (META_CODE(*bptr) == META_ALT);\n\n/* If any branch is of variable length, the whole lookbehind is of variable\nlength. If the maximum length of any branch exceeds the maximum for variable\nlookbehinds, give an error. Otherwise, the minimum length is set in the word\nthat follows the original group META value. For a fixed-length lookbehind, this\nis set to LOOKBEHIND_MAX, to indicate that each branch is of a fixed (but\npossibly different) length. */\n\nif (variable)\n  {\n  gbptr[1] = minlength;\n  if ((PCRE2_SIZE)maxlength > cb->max_varlookbehind)\n    {\n    *errcodeptr = ERR100;\n    cb->erroroffset = offset;\n    return FALSE;\n    }\n  }\nelse gbptr[1] = LOOKBEHIND_MAX;\n\nreturn TRUE;\n}\n\n\n\n/*************************************************\n*         Check parsed pattern lookbehinds       *\n*************************************************/\n\n/* This function is called at the end of parsing a pattern if any lookbehinds\nwere encountered. It scans the parsed pattern for them, calling\nset_lookbehind_lengths() for each one. At the start, the errorcode is zero and\nthe error offset is marked unset. The enables the functions above not to\noverride settings from deeper nestings.\n\nThis function is called recursively from get_branchlength() for lookaheads in\norder to process any lookbehinds that they may contain. It stops when it hits a\nnon-nested closing parenthesis in this case, returning a pointer to it.\n\nArguments\n  pptr      points to where to start (start of pattern or start of lookahead)\n  retptr    if not NULL, return the ket pointer here\n  recurses  chain of recurse_check to catch mutual recursion\n  cb        points to the compile block\n  lcptr     points to loop counter\n\nReturns:    0 on success, or an errorcode (cb->erroroffset will be set)\n*/\n\nstatic int\ncheck_lookbehinds(uint32_t *pptr, uint32_t **retptr,\n  parsed_recurse_check *recurses, compile_block *cb, int *lcptr)\n{\nint errorcode = 0;\nint nestlevel = 0;\n\ncb->erroroffset = PCRE2_UNSET;\n\nfor (; *pptr != META_END; pptr++)\n  {\n  if (*pptr < META_END) continue;  /* Literal */\n\n  switch (META_CODE(*pptr))\n    {\n    /* The following erroroffset is a bogus but safe value. This branch should\n    be avoided by providing a proper implementation for all supported cases\n    below. */\n\n    /* LCOV_EXCL_START */\n    default:\n    PCRE2_DEBUG_UNREACHABLE();\n    cb->erroroffset = 0;\n    return ERR70;  /* Unrecognized meta code */\n    /* LCOV_EXCL_STOP */\n\n    case META_ESCAPE:\n    if (*pptr - META_ESCAPE == ESC_P || *pptr - META_ESCAPE == ESC_p)\n      pptr += 1;    /* Skip prop data */\n    break;\n\n    case META_KET:\n    if (--nestlevel < 0)\n      {\n      if (retptr != NULL) *retptr = pptr;\n      return 0;\n      }\n    break;\n\n    case META_ATOMIC:\n    case META_CAPTURE:\n    case META_COND_ASSERT:\n    case META_SCS:\n    case META_LOOKAHEAD:\n    case META_LOOKAHEADNOT:\n    case META_LOOKAHEAD_NA:\n    case META_NOCAPTURE:\n    case META_SCRIPT_RUN:\n    nestlevel++;\n    break;\n\n    case META_ACCEPT:\n    case META_ALT:\n    case META_ASTERISK:\n    case META_ASTERISK_PLUS:\n    case META_ASTERISK_QUERY:\n    case META_BACKREF:\n    case META_CIRCUMFLEX:\n    case META_CLASS:\n    case META_CLASS_EMPTY:\n    case META_CLASS_EMPTY_NOT:\n    case META_CLASS_END:\n    case META_CLASS_NOT:\n    case META_COMMIT:\n    case META_DOLLAR:\n    case META_DOT:\n    case META_FAIL:\n    case META_PLUS:\n    case META_PLUS_PLUS:\n    case META_PLUS_QUERY:\n    case META_PRUNE:\n    case META_QUERY:\n    case META_QUERY_PLUS:\n    case META_QUERY_QUERY:\n    case META_RANGE_ESCAPED:\n    case META_RANGE_LITERAL:\n    case META_SKIP:\n    case META_THEN:\n    break;\n\n    case META_OFFSET:\n    case META_RECURSE:\n    pptr += SIZEOFFSET;\n    break;\n\n    case META_BACKREF_BYNAME:\n    case META_RECURSE_BYNAME:\n    pptr += 1 + SIZEOFFSET;\n    break;\n\n    case META_COND_DEFINE:\n    pptr += SIZEOFFSET;\n    nestlevel++;\n    break;\n\n    case META_COND_NAME:\n    case META_COND_NUMBER:\n    case META_COND_RNAME:\n    case META_COND_RNUMBER:\n    pptr += 1 + SIZEOFFSET;\n    nestlevel++;\n    break;\n\n    case META_COND_VERSION:\n    pptr += 3;\n    nestlevel++;\n    break;\n\n    case META_CALLOUT_STRING:\n    pptr += 3 + SIZEOFFSET;\n    break;\n\n    case META_BIGVALUE:\n    case META_POSIX:\n    case META_POSIX_NEG:\n    case META_CAPTURE_NAME:\n    case META_CAPTURE_NUMBER:\n    pptr += 1;\n    break;\n\n    case META_MINMAX:\n    case META_MINMAX_QUERY:\n    case META_MINMAX_PLUS:\n    case META_OPTIONS:\n    pptr += 2;\n    break;\n\n    case META_CALLOUT_NUMBER:\n    pptr += 3;\n    break;\n\n    case META_MARK:\n    case META_COMMIT_ARG:\n    case META_PRUNE_ARG:\n    case META_SKIP_ARG:\n    case META_THEN_ARG:\n    pptr += 1 + pptr[1];\n    break;\n\n    /* Note that set_lookbehind_lengths() updates pptr, leaving it pointing to\n    the final ket of the group, so no need to update it here. */\n\n    case META_LOOKBEHIND:\n    case META_LOOKBEHINDNOT:\n    case META_LOOKBEHIND_NA:\n    if (!set_lookbehind_lengths(&pptr, &errorcode, lcptr, recurses, cb))\n      return errorcode;\n    break;\n    }\n  }\n\nreturn 0;\n}\n\n\n\n/*************************************************\n*     External function to compile a pattern     *\n*************************************************/\n\n/* This function reads a regular expression in the form of a string and returns\na pointer to a block of store holding a compiled version of the expression.\n\nArguments:\n  pattern       the regular expression\n  patlen        the length of the pattern, or PCRE2_ZERO_TERMINATED\n  options       option bits\n  errorptr      pointer to errorcode\n  erroroffset   pointer to error offset\n  ccontext      points to a compile context or is NULL\n\nReturns:        pointer to compiled data block, or NULL on error,\n                with errorcode and erroroffset set\n*/\n\nPCRE2_EXP_DEFN pcre2_code * PCRE2_CALL_CONVENTION\npcre2_compile(PCRE2_SPTR pattern, PCRE2_SIZE patlen, uint32_t options,\n   int *errorptr, PCRE2_SIZE *erroroffset, pcre2_compile_context *ccontext)\n{\nBOOL utf;                             /* Set TRUE for UTF mode */\nBOOL ucp;                             /* Set TRUE for UCP mode */\nBOOL has_lookbehind = FALSE;          /* Set TRUE if a lookbehind is found */\nBOOL zero_terminated;                 /* Set TRUE for zero-terminated pattern */\npcre2_real_code *re = NULL;           /* What we will return */\ncompile_block cb;                     /* \"Static\" compile-time data */\nconst uint8_t *tables;                /* Char tables base pointer */\n\nPCRE2_UCHAR null_str[1] = { 0xcd };   /* Dummy for handling null inputs */\nPCRE2_UCHAR *code;                    /* Current pointer in compiled code */\nPCRE2_UCHAR *codestart;               /* Start of compiled code */\nPCRE2_SPTR ptr;                       /* Current pointer in pattern */\nuint32_t *pptr;                       /* Current pointer in parsed pattern */\n\nPCRE2_SIZE length = 1;                /* Allow for final END opcode */\nPCRE2_SIZE usedlength;                /* Actual length used */\nPCRE2_SIZE re_blocksize;              /* Size of memory block */\nPCRE2_SIZE parsed_size_needed;        /* Needed for parsed pattern */\n\nuint32_t firstcuflags, reqcuflags;    /* Type of first/req code unit */\nuint32_t firstcu, reqcu;              /* Value of first/req code unit */\nuint32_t setflags = 0;                /* NL and BSR set flags */\nuint32_t xoptions;                    /* Flags from context, modified */\n\nuint32_t skipatstart;                 /* When checking (*UTF) etc */\nuint32_t limit_heap  = UINT32_MAX;\nuint32_t limit_match = UINT32_MAX;    /* Unset match limits */\nuint32_t limit_depth = UINT32_MAX;\n\nint newline = 0;                      /* Unset; can be set by the pattern */\nint bsr = 0;                          /* Unset; can be set by the pattern */\nint errorcode = 0;                    /* Initialize to avoid compiler warn */\nint regexrc;                          /* Return from compile */\n\nuint32_t i;                           /* Local loop counter */\n\n/* Enable all optimizations by default. */\nuint32_t optim_flags = ccontext != NULL ? ccontext->optimization_flags :\n                                          PCRE2_OPTIMIZATION_ALL;\n\n/* Comments at the head of this file explain about these variables. */\n\nuint32_t stack_groupinfo[GROUPINFO_DEFAULT_SIZE];\nuint32_t stack_parsed_pattern[PARSED_PATTERN_DEFAULT_SIZE];\nnamed_group named_groups[NAMED_GROUP_LIST_SIZE];\n\n/* The workspace is used in different ways in the different compiling phases.\nIt needs to be 16-bit aligned for the preliminary parsing scan. */\n\nuint32_t c16workspace[C16_WORK_SIZE];\nPCRE2_UCHAR *cworkspace = (PCRE2_UCHAR *)c16workspace;\n\n\n/* -------------- Check arguments and set up the pattern ----------------- */\n\n/* There must be error code and offset pointers. */\n\nif (errorptr == NULL)\n  {\n  if (erroroffset != NULL) *erroroffset = 0;\n  return NULL;\n  }\nif (erroroffset == NULL)\n  {\n  if (errorptr != NULL) *errorptr = ERR120;\n  return NULL;\n  }\n*errorptr = ERR0;\n*erroroffset = 0;\n\n/* There must be a pattern, but NULL is allowed with zero length. */\n\nif (pattern == NULL)\n  {\n  if (patlen == 0)\n    pattern = null_str;\n  else\n    {\n    *errorptr = ERR16;\n    return NULL;\n    }\n  }\n\n/* A NULL compile context means \"use a default context\" */\n\nif (ccontext == NULL)\n  ccontext = (pcre2_compile_context *)(&PRIV(default_compile_context));\n\n/* PCRE2_MATCH_INVALID_UTF implies UTF */\n\nif ((options & PCRE2_MATCH_INVALID_UTF) != 0) options |= PCRE2_UTF;\n\n/* Check that all undefined public option bits are zero. */\n\nif ((options & ~PUBLIC_COMPILE_OPTIONS) != 0 ||\n    (ccontext->extra_options & ~PUBLIC_COMPILE_EXTRA_OPTIONS) != 0)\n  {\n  *errorptr = ERR17;\n  return NULL;\n  }\n\nif ((options & PCRE2_LITERAL) != 0 &&\n    ((options & ~PUBLIC_LITERAL_COMPILE_OPTIONS) != 0 ||\n     (ccontext->extra_options & ~PUBLIC_LITERAL_COMPILE_EXTRA_OPTIONS) != 0))\n  {\n  *errorptr = ERR92;\n  return NULL;\n  }\n\n/* A zero-terminated pattern is indicated by the special length value\nPCRE2_ZERO_TERMINATED. Check for an overlong pattern. */\n\nif ((zero_terminated = (patlen == PCRE2_ZERO_TERMINATED)))\n  patlen = PRIV(strlen)(pattern);\n(void)zero_terminated; /* Silence compiler; only used if Valgrind enabled */\n\nif (patlen > ccontext->max_pattern_length)\n  {\n  *errorptr = ERR88;\n  return NULL;\n  }\n\n/* Optimization flags in 'options' can override those in the compile context.\nThis is because some options to disable optimizations were added before the\noptimization flags word existed, and we need to continue supporting them\nfor backwards compatibility. */\n\nif ((options & PCRE2_NO_AUTO_POSSESS) != 0)\n  optim_flags &= ~PCRE2_OPTIM_AUTO_POSSESS;\nif ((options & PCRE2_NO_DOTSTAR_ANCHOR) != 0)\n  optim_flags &= ~PCRE2_OPTIM_DOTSTAR_ANCHOR;\nif ((options & PCRE2_NO_START_OPTIMIZE) != 0)\n  optim_flags &= ~PCRE2_OPTIM_START_OPTIMIZE;\n\n/* From here on, all returns from this function should end up going via the\nEXIT label. */\n\n\n/* ------------ Initialize the \"static\" compile data -------------- */\n\ntables = (ccontext->tables != NULL)? ccontext->tables : PRIV(default_tables);\n\ncb.lcc = tables + lcc_offset;          /* Individual */\ncb.fcc = tables + fcc_offset;          /*   character */\ncb.cbits = tables + cbits_offset;      /*      tables */\ncb.ctypes = tables + ctypes_offset;\n\ncb.assert_depth = 0;\ncb.bracount = 0;\ncb.cx = ccontext;\ncb.dupnames = FALSE;\ncb.end_pattern = pattern + patlen;\ncb.erroroffset = 0;\ncb.external_flags = 0;\ncb.external_options = options;\ncb.groupinfo = stack_groupinfo;\ncb.had_recurse = FALSE;\ncb.lastcapture = 0;\ncb.max_lookbehind = 0;                               /* Max encountered */\ncb.max_varlookbehind = ccontext->max_varlookbehind;  /* Limit */\ncb.name_entry_size = 0;\ncb.name_table = NULL;\ncb.named_groups = named_groups;\ncb.named_group_list_size = NAMED_GROUP_LIST_SIZE;\ncb.names_found = 0;\ncb.parens_depth = 0;\ncb.parsed_pattern = stack_parsed_pattern;\ncb.req_varyopt = 0;\ncb.start_code = cworkspace;\ncb.start_pattern = pattern;\ncb.start_workspace = cworkspace;\ncb.workspace_size = COMPILE_WORK_SIZE;\ncb.first_data = NULL;\ncb.last_data = NULL;\n#ifdef SUPPORT_WIDE_CHARS\ncb.char_lists_size = 0;\n#endif\n\n/* Maximum back reference and backref bitmap. The bitmap records up to 31 back\nreferences to help in deciding whether (.*) can be treated as anchored or not.\n*/\n\ncb.top_backref = 0;\ncb.backref_map = 0;\n\n/* Escape sequences \\1 to \\9 are always back references, but as they are only\ntwo characters long, only two elements can be used in the parsed_pattern\nvector. The first contains the reference, and we'd like to use the second to\nrecord the offset in the pattern, so that forward references to non-existent\ngroups can be diagnosed later with an offset. However, on 64-bit systems,\nPCRE2_SIZE won't fit. Instead, we have a vector of offsets for the first\noccurrence of \\1 to \\9, indexed by the second parsed_pattern value. All other\nreferences have enough space for the offset to be put into the parsed pattern.\n*/\n\nfor (i = 0; i < 10; i++) cb.small_ref_offset[i] = PCRE2_UNSET;\n\n\n/* --------------- Start looking at the pattern --------------- */\n\n/* Unless PCRE2_LITERAL is set, check for global one-time option settings at\nthe start of the pattern, and remember the offset to the actual regex. With\nvalgrind support, make the terminator of a zero-terminated pattern\ninaccessible. This catches bugs that would otherwise only show up for\nnon-zero-terminated patterns. */\n\n#ifdef SUPPORT_VALGRIND\nif (zero_terminated) VALGRIND_MAKE_MEM_NOACCESS(pattern + patlen, CU2BYTES(1));\n#endif\n\nxoptions = ccontext->extra_options;\nptr = pattern;\nskipatstart = 0;\n\nif ((options & PCRE2_LITERAL) == 0)\n  {\n  while (patlen - skipatstart >= 2 &&\n         ptr[skipatstart] == CHAR_LEFT_PARENTHESIS &&\n         ptr[skipatstart+1] == CHAR_ASTERISK)\n    {\n    for (i = 0; i < sizeof(pso_list)/sizeof(pso); i++)\n      {\n      const pso *p = pso_list + i;\n\n      if (patlen - skipatstart - 2 >= p->length &&\n          PRIV(strncmp_c8)(ptr + skipatstart + 2, p->name, p->length) == 0)\n        {\n        uint32_t c, pp;\n\n        skipatstart += p->length + 2;\n        switch(p->type)\n          {\n          case PSO_OPT:\n          cb.external_options |= p->value;\n          break;\n\n          case PSO_XOPT:\n          xoptions |= p->value;\n          break;\n\n          case PSO_FLG:\n          setflags |= p->value;\n          break;\n\n          case PSO_NL:\n          newline = p->value;\n          setflags |= PCRE2_NL_SET;\n          break;\n\n          case PSO_BSR:\n          bsr = p->value;\n          setflags |= PCRE2_BSR_SET;\n          break;\n\n          case PSO_LIMM:\n          case PSO_LIMD:\n          case PSO_LIMH:\n          c = 0;\n          pp = skipatstart;\n          while (pp < patlen && IS_DIGIT(ptr[pp]))\n            {\n            if (c > UINT32_MAX / 10 - 1) break;   /* Integer overflow */\n            c = c*10 + (ptr[pp++] - CHAR_0);\n            }\n          if (pp >= patlen || pp == skipatstart || ptr[pp] != CHAR_RIGHT_PARENTHESIS)\n            {\n            errorcode = ERR60;\n            ptr += pp;\n            utf = FALSE;  /* Used by HAD_EARLY_ERROR */\n            goto HAD_EARLY_ERROR;\n            }\n          if (p->type == PSO_LIMH) limit_heap = c;\n            else if (p->type == PSO_LIMM) limit_match = c;\n            else limit_depth = c;\n          skipatstart = ++pp;\n          break;\n\n          case PSO_OPTMZ:\n          optim_flags &= ~(p->value);\n\n          /* For backward compatibility the three original VERBs to disable\n          optimizations need to also update the corresponding bit in the\n          external options. */\n\n          switch(p->value)\n            {\n            case PCRE2_OPTIM_AUTO_POSSESS:\n            cb.external_options |= PCRE2_NO_AUTO_POSSESS;\n            break;\n\n            case PCRE2_OPTIM_DOTSTAR_ANCHOR:\n            cb.external_options |= PCRE2_NO_DOTSTAR_ANCHOR;\n            break;\n\n            case PCRE2_OPTIM_START_OPTIMIZE:\n            cb.external_options |= PCRE2_NO_START_OPTIMIZE;\n            break;\n            }\n\n          break;\n\n          /* LCOV_EXCL_START */\n          default:\n          /* All values in the enum need an explicit entry for this switch\n          but until a better way to prevent coding mistakes is invented keep\n          a catch all that triggers a debug build assert as a failsafe */\n          PCRE2_DEBUG_UNREACHABLE();\n          /* LCOV_EXCL_STOP */\n          }\n        break;   /* Out of the table scan loop */\n        }\n      }\n    if (i >= sizeof(pso_list)/sizeof(pso)) break;   /* Out of pso loop */\n    }\n    PCRE2_ASSERT(skipatstart <= patlen);\n  }\n\n/* End of pattern-start options; advance to start of real regex. */\n\nptr += skipatstart;\n\n/* Can't support UTF or UCP if PCRE2 was built without Unicode support. */\n\n#ifndef SUPPORT_UNICODE\nif ((cb.external_options & (PCRE2_UTF|PCRE2_UCP)) != 0)\n  {\n  errorcode = ERR32;\n  goto HAD_EARLY_ERROR;\n  }\n#endif\n\n/* Check UTF. We have the original options in 'options', with that value as\nmodified by (*UTF) etc in cb->external_options. The extra option\nPCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is not permitted in UTF-16 mode because the\nsurrogate code points cannot be represented in UTF-16. */\n\nutf = (cb.external_options & PCRE2_UTF) != 0;\nif (utf)\n  {\n  if ((options & PCRE2_NEVER_UTF) != 0)\n    {\n    errorcode = ERR74;\n    goto HAD_EARLY_ERROR;\n    }\n  if ((options & PCRE2_NO_UTF_CHECK) == 0 &&\n       (errorcode = PRIV(valid_utf)(pattern, patlen, erroroffset)) != 0)\n    goto HAD_ERROR;  /* Offset was set by valid_utf() */\n\n#if PCRE2_CODE_UNIT_WIDTH == 16\n  if ((ccontext->extra_options & PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES) != 0)\n    {\n    errorcode = ERR91;\n    goto HAD_EARLY_ERROR;\n    }\n#endif\n  }\n\n/* Check UCP lockout. */\n\nucp = (cb.external_options & PCRE2_UCP) != 0;\nif (ucp && (cb.external_options & PCRE2_NEVER_UCP) != 0)\n  {\n  errorcode = ERR75;\n  goto HAD_EARLY_ERROR;\n  }\n\n/* PCRE2_EXTRA_TURKISH_CASING checks */\n\nif ((xoptions & PCRE2_EXTRA_TURKISH_CASING) != 0)\n  {\n  if (!utf && !ucp)\n    {\n    errorcode = ERR104;\n    goto HAD_EARLY_ERROR;\n    }\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  if (!utf)\n    {\n    errorcode = ERR105;\n    goto HAD_EARLY_ERROR;\n    }\n#endif\n\n  if ((xoptions & PCRE2_EXTRA_CASELESS_RESTRICT) != 0)\n    {\n    errorcode = ERR106;\n    goto HAD_EARLY_ERROR;\n    }\n  }\n\n/* Process the BSR setting. */\n\nif (bsr == 0) bsr = ccontext->bsr_convention;\n\n/* Process the newline setting. */\n\nif (newline == 0) newline = ccontext->newline_convention;\ncb.nltype = NLTYPE_FIXED;\nswitch(newline)\n  {\n  case PCRE2_NEWLINE_CR:\n  cb.nllen = 1;\n  cb.nl[0] = CHAR_CR;\n  break;\n\n  case PCRE2_NEWLINE_LF:\n  cb.nllen = 1;\n  cb.nl[0] = CHAR_NL;\n  break;\n\n  case PCRE2_NEWLINE_NUL:\n  cb.nllen = 1;\n  cb.nl[0] = CHAR_NUL;\n  break;\n\n  case PCRE2_NEWLINE_CRLF:\n  cb.nllen = 2;\n  cb.nl[0] = CHAR_CR;\n  cb.nl[1] = CHAR_NL;\n  break;\n\n  case PCRE2_NEWLINE_ANY:\n  cb.nltype = NLTYPE_ANY;\n  break;\n\n  case PCRE2_NEWLINE_ANYCRLF:\n  cb.nltype = NLTYPE_ANYCRLF;\n  break;\n\n  /* LCOV_EXCL_START */\n  default:\n  PCRE2_DEBUG_UNREACHABLE();\n  errorcode = ERR56;\n  goto HAD_EARLY_ERROR;\n  /* LCOV_EXCL_STOP */\n  }\n\n/* Pre-scan the pattern to do two things: (1) Discover the named groups and\ntheir numerical equivalents, so that this information is always available for\nthe remaining processing. (2) At the same time, parse the pattern and put a\nprocessed version into the parsed_pattern vector. This has escapes interpreted\nand comments removed (amongst other things). */\n\n/* Ensure that the parsed pattern buffer is big enough. For many smaller\npatterns the vector on the stack (which was set up above) can be used. */\n\nparsed_size_needed = max_parsed_pattern(ptr, cb.end_pattern, utf, options);\n\n/* Allow for 2x uint32_t at the start and 2 at the end, for\nPCRE2_EXTRA_MATCH_WORD or PCRE2_EXTRA_MATCH_LINE (which are exclusive). */\n\nif ((ccontext->extra_options &\n     (PCRE2_EXTRA_MATCH_WORD|PCRE2_EXTRA_MATCH_LINE)) != 0)\n  parsed_size_needed += 4;\n\n/* When PCRE2_AUTO_CALLOUT is set we allow for one callout at the end. */\n\nif ((options & PCRE2_AUTO_CALLOUT) != 0)\n  parsed_size_needed += 4;\n\nparsed_size_needed += 1;  /* For the final META_END */\n\nif (parsed_size_needed > PARSED_PATTERN_DEFAULT_SIZE)\n  {\n  uint32_t *heap_parsed_pattern = ccontext->memctl.malloc(\n    parsed_size_needed * sizeof(uint32_t), ccontext->memctl.memory_data);\n  if (heap_parsed_pattern == NULL)\n    {\n    *errorptr = ERR21;\n    goto EXIT;\n    }\n  cb.parsed_pattern = heap_parsed_pattern;\n  }\ncb.parsed_pattern_end = cb.parsed_pattern + parsed_size_needed;\n\n/* Do the parsing scan. */\n\nerrorcode = parse_regex(ptr, cb.external_options, xoptions, &has_lookbehind, &cb);\nif (errorcode != 0) goto HAD_CB_ERROR;\n\n/* If there are any lookbehinds, scan the parsed pattern to figure out their\nlengths. Workspace is needed to remember whether numbered groups are or are not\nof limited length, and if limited, what the minimum and maximum lengths are.\nThis caching saves re-computing the length of any group that is referenced more\nthan once, which is particularly relevant when recursion is involved.\nUnnumbered groups do not have this exposure because they cannot be referenced.\nIf there are sufficiently few groups, the default index vector on the stack, as\nset up above, can be used. Otherwise we have to get/free some heap memory. The\nvector must be initialized to zero. */\n\nif (has_lookbehind)\n  {\n  int loopcount = 0;\n  if (cb.bracount >= GROUPINFO_DEFAULT_SIZE/2)\n    {\n    cb.groupinfo = ccontext->memctl.malloc(\n      (2 * (cb.bracount + 1))*sizeof(uint32_t), ccontext->memctl.memory_data);\n    if (cb.groupinfo == NULL)\n      {\n      errorcode = ERR21;\n      cb.erroroffset = 0;\n      goto HAD_CB_ERROR;\n      }\n    }\n  memset(cb.groupinfo, 0, (2 * cb.bracount + 1) * sizeof(uint32_t));\n  errorcode = check_lookbehinds(cb.parsed_pattern, NULL, NULL, &cb, &loopcount);\n  if (errorcode != 0) goto HAD_CB_ERROR;\n  }\n\n/* For debugging, there is a function that shows the parsed pattern vector. */\n\n#ifdef DEBUG_SHOW_PARSED\nfprintf(stderr, \"+++ Pre-scan complete:\\n\");\nshow_parsed(&cb);\n#endif\n\n/* For debugging capturing information this code can be enabled. */\n\n#ifdef DEBUG_SHOW_CAPTURES\n  {\n  named_group *ng = cb.named_groups;\n  fprintf(stderr, \"+++Captures: %d\\n\", cb.bracount);\n  for (i = 0; i < cb.names_found; i++, ng++)\n    {\n    fprintf(stderr, \"+++%3d %.*s\\n\", ng->number, ng->length, ng->name);\n    }\n  }\n#endif\n\n/* Pretend to compile the pattern while actually just accumulating the amount\nof memory required in the 'length' variable. This behaviour is triggered by\npassing a non-NULL final argument to compile_regex(). We pass a block of\nworkspace (cworkspace) for it to compile parts of the pattern into; the\ncompiled code is discarded when it is no longer needed, so hopefully this\nworkspace will never overflow, though there is a test for its doing so.\n\nOn error, errorcode will be set non-zero, so we don't need to look at the\nresult of the function. The initial options have been put into the cb block,\nbut we still have to pass a separate options variable (the first argument)\nbecause the options may change as the pattern is processed. */\n\ncb.erroroffset = patlen;   /* For any subsequent errors that do not set it */\npptr = cb.parsed_pattern;\ncode = cworkspace;\n*code = OP_BRA;\n\n(void)compile_regex(cb.external_options, xoptions, &code, &pptr,\n   &errorcode, 0, &firstcu, &firstcuflags, &reqcu, &reqcuflags, NULL, NULL,\n   &cb, &length);\n\nif (errorcode != 0) goto HAD_CB_ERROR;  /* Offset is in cb.erroroffset */\n\n/* This should be caught in compile_regex(), but just in case... */\n\n#if defined SUPPORT_WIDE_CHARS\nPCRE2_ASSERT((cb.char_lists_size & 0x3) == 0);\nif (length > MAX_PATTERN_SIZE ||\n    MAX_PATTERN_SIZE - length < (cb.char_lists_size / sizeof(PCRE2_UCHAR)))\n#else\nif (length > MAX_PATTERN_SIZE)\n#endif\n  {\n  errorcode = ERR20;\n  cb.erroroffset = 0;\n  goto HAD_CB_ERROR;\n  }\n\n/* Compute the size of, then, if not too large, get and initialize the data\nblock for storing the compiled pattern and names table. Integer overflow should\nno longer be possible because nowadays we limit the maximum value of\ncb.names_found and cb.name_entry_size. */\n\nre_blocksize =\n  CU2BYTES((PCRE2_SIZE)cb.names_found * (PCRE2_SIZE)cb.name_entry_size);\n\n#if defined SUPPORT_WIDE_CHARS\nif (cb.char_lists_size != 0)\n  {\n#if PCRE2_CODE_UNIT_WIDTH != 32\n  /* Align to 32 bit first. This ensures the\n  allocated area will also be 32 bit aligned. */\n  re_blocksize = (PCRE2_SIZE)CLIST_ALIGN_TO(re_blocksize, sizeof(uint32_t));\n#endif\n  re_blocksize += cb.char_lists_size;\n  }\n#endif\n\nre_blocksize += CU2BYTES(length);\n\nif (re_blocksize > ccontext->max_pattern_compiled_length)\n  {\n  errorcode = ERR101;\n  cb.erroroffset = 0;\n  goto HAD_CB_ERROR;\n  }\n\nre_blocksize += sizeof(pcre2_real_code);\nre = (pcre2_real_code *)\n  ccontext->memctl.malloc(re_blocksize, ccontext->memctl.memory_data);\nif (re == NULL)\n  {\n  errorcode = ERR21;\n  cb.erroroffset = 0;\n  goto HAD_CB_ERROR;\n  }\n\n/* The compiler may put padding at the end of the pcre2_real_code structure in\norder to round it up to a multiple of 4 or 8 bytes. This means that when a\ncompiled pattern is copied (for example, when serialized) undefined bytes are\nread, and this annoys debuggers such as valgrind. To avoid this, we explicitly\nwrite to the last 8 bytes of the structure before setting the fields. */\n\nmemset((char *)re + sizeof(pcre2_real_code) - 8, 0, 8);\nre->memctl = ccontext->memctl;\nre->tables = tables;\nre->executable_jit = NULL;\nmemset(re->start_bitmap, 0, 32 * sizeof(uint8_t));\nre->blocksize = re_blocksize;\nre->code_start = re_blocksize - CU2BYTES(length);\nre->magic_number = MAGIC_NUMBER;\nre->compile_options = options;\nre->overall_options = cb.external_options;\nre->extra_options = xoptions;\nre->flags = PCRE2_CODE_UNIT_WIDTH/8 | cb.external_flags | setflags;\nre->limit_heap = limit_heap;\nre->limit_match = limit_match;\nre->limit_depth = limit_depth;\nre->first_codeunit = 0;\nre->last_codeunit = 0;\nre->bsr_convention = bsr;\nre->newline_convention = newline;\nre->max_lookbehind = 0;\nre->minlength = 0;\nre->top_bracket = 0;\nre->top_backref = 0;\nre->name_entry_size = cb.name_entry_size;\nre->name_count = cb.names_found;\nre->optimization_flags = optim_flags;\n\n/* The basic block is immediately followed by the name table, and the compiled\ncode follows after that. */\n\ncodestart = (PCRE2_UCHAR *)((uint8_t *)re + re->code_start);\n\n/* Update the compile data block for the actual compile. The starting points of\nthe name/number translation table and of the code are passed around in the\ncompile data block. The start/end pattern and initial options are already set\nfrom the pre-compile phase, as is the name_entry_size field. */\n\ncb.parens_depth = 0;\ncb.assert_depth = 0;\ncb.lastcapture = 0;\ncb.name_table = (PCRE2_UCHAR *)((uint8_t *)re + sizeof(pcre2_real_code));\ncb.start_code = codestart;\ncb.req_varyopt = 0;\ncb.had_accept = FALSE;\ncb.had_pruneorskip = FALSE;\n#ifdef SUPPORT_WIDE_CHARS\ncb.char_lists_size = 0;\n#endif\n\n\n/* If any named groups were found, create the name/number table from the list\ncreated in the pre-pass. */\n\nif (cb.names_found > 0)\n  {\n  named_group *ng = cb.named_groups;\n  uint32_t tablecount = 0;\n\n  /* Length 0 represents duplicates, and they have already been handled. */\n  for (i = 0; i < cb.names_found; i++, ng++)\n    if (ng->length > 0)\n      tablecount = PRIV(compile_add_name_to_table)(&cb, ng, tablecount);\n\n  PCRE2_ASSERT(tablecount == cb.names_found);\n  }\n\n/* Set up a starting, non-extracting bracket, then compile the expression. On\nerror, errorcode will be set non-zero, so we don't need to look at the result\nof the function here. */\n\npptr = cb.parsed_pattern;\ncode = (PCRE2_UCHAR *)codestart;\n*code = OP_BRA;\nregexrc = compile_regex(re->overall_options, re->extra_options, &code,\n  &pptr, &errorcode, 0, &firstcu, &firstcuflags, &reqcu, &reqcuflags, NULL,\n  NULL, &cb, NULL);\nif (regexrc < 0) re->flags |= PCRE2_MATCH_EMPTY;\nre->top_bracket = cb.bracount;\nre->top_backref = cb.top_backref;\nre->max_lookbehind = cb.max_lookbehind;\n\nif (cb.had_accept)\n  {\n  reqcu = 0;                     /* Must disable after (*ACCEPT) */\n  reqcuflags = REQ_NONE;\n  re->flags |= PCRE2_HASACCEPT;  /* Disables minimum length */\n  }\n\n/* Fill in the final opcode and check for disastrous overflow. If no overflow,\nbut the estimated length exceeds the really used length, adjust the value of\nre->blocksize, and if valgrind support is configured, mark the extra allocated\nmemory as unaddressable, so that any out-of-bound reads can be detected. */\n\n*code++ = OP_END;\nusedlength = code - codestart;\n/* LCOV_EXCL_START */\nif (usedlength > length)\n  {\n  PCRE2_DEBUG_UNREACHABLE();\n  errorcode = ERR23;  /* Overflow of code block - internal error */\n  cb.erroroffset = 0;\n  goto HAD_CB_ERROR;\n  }\n/* LCOV_EXCL_STOP */\n\nre->blocksize -= CU2BYTES(length - usedlength);\n#ifdef SUPPORT_VALGRIND\nVALGRIND_MAKE_MEM_NOACCESS(code, CU2BYTES(length - usedlength));\n#endif\n\n/* Scan the pattern for recursion/subroutine calls and convert the group\nnumbers into offsets. Maintain a small cache so that repeated groups containing\nrecursions are efficiently handled. */\n\n#define RSCAN_CACHE_SIZE 8\n\nif (errorcode == 0 && cb.had_recurse)\n  {\n  PCRE2_UCHAR *rcode;\n  PCRE2_SPTR rgroup;\n  unsigned int ccount = 0;\n  int start = RSCAN_CACHE_SIZE;\n  recurse_cache rc[RSCAN_CACHE_SIZE];\n\n  for (rcode = find_recurse(codestart, utf);\n       rcode != NULL;\n       rcode = find_recurse(rcode + 1 + LINK_SIZE, utf))\n    {\n    int p, groupnumber;\n\n    groupnumber = (int)GET(rcode, 1);\n    if (groupnumber == 0) rgroup = codestart; else\n      {\n      PCRE2_SPTR search_from = codestart;\n      rgroup = NULL;\n      for (i = 0, p = start; i < ccount; i++, p = (p + 1) & 7)\n        {\n        if (groupnumber == rc[p].groupnumber)\n          {\n          rgroup = rc[p].group;\n          break;\n          }\n\n        /* Group n+1 must always start to the right of group n, so we can save\n        search time below when the new group number is greater than any of the\n        previously found groups. */\n\n        if (groupnumber > rc[p].groupnumber) search_from = rc[p].group;\n        }\n\n      if (rgroup == NULL)\n        {\n        rgroup = PRIV(find_bracket)(search_from, utf, groupnumber);\n        /* LCOV_EXCL_START */\n        if (rgroup == NULL)\n          {\n          PCRE2_DEBUG_UNREACHABLE();\n          errorcode = ERR53;\n          break;\n          }\n        /* LCOV_EXCL_STOP */\n\n        if (--start < 0) start = RSCAN_CACHE_SIZE - 1;\n        rc[start].groupnumber = groupnumber;\n        rc[start].group = rgroup;\n        if (ccount < RSCAN_CACHE_SIZE) ccount++;\n        }\n      }\n\n    PUT(rcode, 1, (uint32_t)(rgroup - codestart));\n    }\n  }\n\n/* In rare debugging situations we sometimes need to look at the compiled code\nat this stage. */\n\n#ifdef DEBUG_CALL_PRINTINT\npcre2_printint(re, stderr, TRUE);\nfprintf(stderr, \"Length=%lu Used=%lu\\n\", length, usedlength);\n#endif\n\n/* Unless disabled, check whether any single character iterators can be\nauto-possessified. The function overwrites the appropriate opcode values, so\nthe type of the pointer must be cast. NOTE: the intermediate variable \"temp\" is\nused in this code because at least one compiler gives a warning about loss of\n\"const\" attribute if the cast (PCRE2_UCHAR *)codestart is used directly in the\nfunction call. */\n\nif (errorcode == 0 && (optim_flags & PCRE2_OPTIM_AUTO_POSSESS) != 0)\n  {\n  PCRE2_UCHAR *temp = (PCRE2_UCHAR *)codestart;\n  int possessify_rc = PRIV(auto_possessify)(temp, &cb);\n  /* LCOV_EXCL_START */\n  if (possessify_rc != 0)\n    {\n    PCRE2_DEBUG_UNREACHABLE();\n    errorcode = ERR80;\n    cb.erroroffset = 0;\n    }\n  /* LCOV_EXCL_STOP */\n  }\n\n/* Failed to compile, or error while post-processing. */\n\nif (errorcode != 0) goto HAD_CB_ERROR;\n\n/* Successful compile. If the anchored option was not passed, set it if\nwe can determine that the pattern is anchored by virtue of ^ characters or \\A\nor anything else, such as starting with non-atomic .* when DOTALL is set and\nthere are no occurrences of *PRUNE or *SKIP (though there is an option to\ndisable this case). */\n\nif ((re->overall_options & PCRE2_ANCHORED) == 0)\n  {\n  BOOL dotstar_anchor = ((optim_flags & PCRE2_OPTIM_DOTSTAR_ANCHOR) != 0);\n  if (is_anchored(codestart, 0, &cb, 0, FALSE, dotstar_anchor))\n    re->overall_options |= PCRE2_ANCHORED;\n  }\n\n/* Set up the first code unit or startline flag, the required code unit, and\nthen study the pattern. This code need not be obeyed if PCRE2_OPTIM_START_OPTIMIZE\nis disabled, as the data it would create will not be used. Note that a first code\nunit (but not the startline flag) is useful for anchored patterns because it\ncan still give a quick \"no match\" and also avoid searching for a last code\nunit. */\n\nif ((optim_flags & PCRE2_OPTIM_START_OPTIMIZE) != 0)\n  {\n  int minminlength = 0;  /* For minimal minlength from first/required CU */\n  int study_rc;\n\n  /* If we do not have a first code unit, see if there is one that is asserted\n  (these are not saved during the compile because they can cause conflicts with\n  actual literals that follow). */\n\n  if (firstcuflags >= REQ_NONE) {\n    uint32_t assertedcuflags = 0;\n    uint32_t assertedcu = find_firstassertedcu(codestart, &assertedcuflags, 0);\n    /* It would be wrong to use the asserted first code unit as `firstcu` for\n     * regexes which are able to match a 1-character string (e.g. /(?=a)b?a/)\n     * For that example, if we set both firstcu and reqcu to 'a', it would mean\n     * the subject string needs to be at least 2 characters long, which is wrong.\n     * With more analysis, we would be able to set firstcu in more cases. */\n    if (assertedcuflags < REQ_NONE && assertedcu != reqcu) {\n      firstcu = assertedcu;\n      firstcuflags = assertedcuflags;\n    }\n  }\n\n  /* Save the data for a first code unit. The existence of one means the\n  minimum length must be at least 1. */\n\n  if (firstcuflags < REQ_NONE)\n    {\n    re->first_codeunit = firstcu;\n    re->flags |= PCRE2_FIRSTSET;\n    minminlength++;\n\n    /* Handle caseless first code units. */\n\n    if ((firstcuflags & REQ_CASELESS) != 0)\n      {\n      if (firstcu < 128 || (!utf && !ucp && firstcu < 255))\n        {\n        if (cb.fcc[firstcu] != firstcu) re->flags |= PCRE2_FIRSTCASELESS;\n        }\n\n      /* The first code unit is > 128 in UTF or UCP mode, or > 255 otherwise.\n      In 8-bit UTF mode, code units in the range 128-255 are introductory code\n      units and cannot have another case, but if UCP is set they may do. */\n\n#ifdef SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      else if (ucp && !utf && UCD_OTHERCASE(firstcu) != firstcu)\n        re->flags |= PCRE2_FIRSTCASELESS;\n#else\n      else if ((utf || ucp) && firstcu <= MAX_UTF_CODE_POINT &&\n               UCD_OTHERCASE(firstcu) != firstcu)\n        re->flags |= PCRE2_FIRSTCASELESS;\n#endif\n#endif  /* SUPPORT_UNICODE */\n      }\n    }\n\n  /* When there is no first code unit, for non-anchored patterns, see if we can\n  set the PCRE2_STARTLINE flag. This is helpful for multiline matches when all\n  branches start with ^ and also when all branches start with non-atomic .* for\n  non-DOTALL matches when *PRUNE and SKIP are not present. (There is an option\n  that disables this case.) */\n\n  else if ((re->overall_options & PCRE2_ANCHORED) == 0)\n    {\n    BOOL dotstar_anchor = ((optim_flags & PCRE2_OPTIM_DOTSTAR_ANCHOR) != 0);\n    if (is_startline(codestart, 0, &cb, 0, FALSE, dotstar_anchor))\n      re->flags |= PCRE2_STARTLINE;\n    }\n\n  /* Handle the \"required code unit\", if one is set. In the UTF case we can\n  increment the minimum minimum length only if we are sure this really is a\n  different character and not a non-starting code unit of the first character,\n  because the minimum length count is in characters, not code units. */\n\n  if (reqcuflags < REQ_NONE)\n    {\n#if PCRE2_CODE_UNIT_WIDTH == 16\n    if ((re->overall_options & PCRE2_UTF) == 0 ||   /* Not UTF */\n        firstcuflags >= REQ_NONE ||                 /* First not set */\n        (firstcu & 0xf800) != 0xd800 ||             /* First not surrogate */\n        (reqcu & 0xfc00) != 0xdc00)                 /* Req not low surrogate */\n#elif PCRE2_CODE_UNIT_WIDTH == 8\n    if ((re->overall_options & PCRE2_UTF) == 0 ||   /* Not UTF */\n        firstcuflags >= REQ_NONE ||                 /* First not set */\n        (firstcu & 0x80) == 0 ||                    /* First is ASCII */\n        (reqcu & 0x80) == 0)                        /* Req is ASCII */\n#endif\n      {\n      minminlength++;\n      }\n\n    /* In the case of an anchored pattern, set up the value only if it follows\n    a variable length item in the pattern. */\n\n    if ((re->overall_options & PCRE2_ANCHORED) == 0 ||\n        (reqcuflags & REQ_VARY) != 0)\n      {\n      re->last_codeunit = reqcu;\n      re->flags |= PCRE2_LASTSET;\n\n      /* Handle caseless required code units as for first code units (above). */\n\n      if ((reqcuflags & REQ_CASELESS) != 0)\n        {\n        if (reqcu < 128 || (!utf && !ucp && reqcu < 255))\n          {\n          if (cb.fcc[reqcu] != reqcu) re->flags |= PCRE2_LASTCASELESS;\n          }\n#ifdef SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      else if (ucp && !utf && UCD_OTHERCASE(reqcu) != reqcu)\n        re->flags |= PCRE2_LASTCASELESS;\n#else\n      else if ((utf || ucp) && reqcu <= MAX_UTF_CODE_POINT &&\n               UCD_OTHERCASE(reqcu) != reqcu)\n        re->flags |= PCRE2_LASTCASELESS;\n#endif\n#endif  /* SUPPORT_UNICODE */\n        }\n      }\n    }\n\n  /* Study the compiled pattern to set up information such as a bitmap of\n  starting code units and a minimum matching length. */\n\n  study_rc = PRIV(study)(re);\n  /* LCOV_EXCL_START */\n  if (study_rc != 0)\n    {\n    PCRE2_DEBUG_UNREACHABLE();\n    errorcode = ERR31;\n    cb.erroroffset = 0;\n    goto HAD_CB_ERROR;\n    }\n  /* LCOV_EXCL_STOP */\n\n  /* If study() set a bitmap of starting code units, it implies a minimum\n  length of at least one. */\n\n  if ((re->flags & PCRE2_FIRSTMAPSET) != 0 && minminlength == 0)\n    minminlength = 1;\n\n  /* If the minimum length set (or not set) by study() is less than the minimum\n  implied by required code units, override it. */\n\n  if (re->minlength < minminlength) re->minlength = minminlength;\n  }   /* End of start-of-match optimizations. */\n\n/* Control ends up here in all cases. When running under valgrind, make a\npattern's terminating zero defined again. If memory was obtained for the parsed\nversion of the pattern, free it before returning. Also free the list of named\ngroups if a larger one had to be obtained, and likewise the group information\nvector. */\n\n#ifdef SUPPORT_UNICODE\n/* All items must be freed. */\nPCRE2_ASSERT(cb.first_data == NULL);\n#endif\n\nEXIT:\n#ifdef SUPPORT_VALGRIND\nif (zero_terminated) VALGRIND_MAKE_MEM_DEFINED(pattern + patlen, CU2BYTES(1));\n#endif\nif (cb.parsed_pattern != stack_parsed_pattern)\n  ccontext->memctl.free(cb.parsed_pattern, ccontext->memctl.memory_data);\nif (cb.named_group_list_size > NAMED_GROUP_LIST_SIZE)\n  ccontext->memctl.free((void *)cb.named_groups, ccontext->memctl.memory_data);\nif (cb.groupinfo != stack_groupinfo)\n  ccontext->memctl.free((void *)cb.groupinfo, ccontext->memctl.memory_data);\n\nreturn re;    /* Will be NULL after an error */\n\n/* Errors discovered in parse_regex() set the offset value in the compile\nblock. Errors discovered before it is called must compute it from the ptr\nvalue. After parse_regex() is called, the offset in the compile block is set to\nthe end of the pattern, but certain errors in compile_regex() may reset it if\nan offset is available in the parsed pattern. */\n\nHAD_CB_ERROR:\nptr = pattern + cb.erroroffset;\n\nHAD_EARLY_ERROR:\n/* Ensure we don't return out-of-range erroroffset. */\nPCRE2_ASSERT(ptr >= pattern);\nPCRE2_ASSERT(ptr <= (pattern + patlen));\n/* Ensure that the erroroffset never slices a UTF-encoded character in half.\nIf the input is invalid, then we return an offset just before the first invalid\ncharacter, so the text to the left of the offset must always be valid. */\n#if defined PCRE2_DEBUG && defined SUPPORT_UNICODE\nif (ptr > pattern && utf)\n  {\n  PCRE2_SPTR prev = ptr - 1;\n  PCRE2_SIZE dummyoffset;\n  BACKCHAR(prev);\n  PCRE2_ASSERT(prev >= pattern);\n  PCRE2_ASSERT(PRIV(valid_utf)(prev, ptr - prev, &dummyoffset) == 0);\n  }\n#endif\n*erroroffset = ptr - pattern;\n\nHAD_ERROR:\n*errorptr = errorcode;\npcre2_code_free(re);\nre = NULL;\n\nif (cb.first_data != NULL)\n  {\n  compile_data* current_data = cb.first_data;\n  do\n    {\n    compile_data* next_data = current_data->next;\n    cb.cx->memctl.free(current_data, cb.cx->memctl.memory_data);\n    current_data = next_data;\n    }\n  while (current_data != NULL);\n  }\n\ngoto EXIT;\n}\n\n/* These #undefs are here to enable unity builds with CMake. */\n\n#undef NLBLOCK /* Block containing newline information */\n#undef PSSTART /* Field containing processed string start */\n#undef PSEND   /* Field containing processed string end */\n\n/* End of pcre2_compile.c */\n"
  },
  {
    "path": "src/pcre2_compile.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE2 is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n#ifndef PCRE2_COMPILE_H_IDEMPOTENT_GUARD\n#define PCRE2_COMPILE_H_IDEMPOTENT_GUARD\n\n#include \"pcre2_internal.h\"\n\n/* Compile time error code numbers. They are given names so that they can more\neasily be tracked. When a new number is added, the tables called eint1 and\neint2 in pcre2posix.c may need to be updated, and a new error text must be\nadded to compile_error_texts in pcre2_error.c. Also, the error codes in\npcre2.h.in must be updated - their values are exactly 100 greater than these\nvalues. */\n\nenum { ERR0 = COMPILE_ERROR_BASE,\n       ERR1,   ERR2,   ERR3,   ERR4,   ERR5,   ERR6,   ERR7,   ERR8,   ERR9,   ERR10,\n       ERR11,  ERR12,  ERR13,  ERR14,  ERR15,  ERR16,  ERR17,  ERR18,  ERR19,  ERR20,\n       ERR21,  ERR22,  ERR23,  ERR24,  ERR25,  ERR26,  ERR27,  ERR28,  ERR29,  ERR30,\n       ERR31,  ERR32,  ERR33,  ERR34,  ERR35,  ERR36,  ERR37,  ERR38,  ERR39,  ERR40,\n       ERR41,  ERR42,  ERR43,  ERR44,  ERR45,  ERR46,  ERR47,  ERR48,  ERR49,  ERR50,\n       ERR51,  ERR52,  ERR53,  ERR54,  ERR55,  ERR56,  ERR57,  ERR58,  ERR59,  ERR60,\n       ERR61,  ERR62,  ERR63,  ERR64,  ERR65,  ERR66,  ERR67,  ERR68,  ERR69,  ERR70,\n       ERR71,  ERR72,  ERR73,  ERR74,  ERR75,  ERR76,  ERR77,  ERR78,  ERR79,  ERR80,\n       ERR81,  ERR82,  ERR83,  ERR84,  ERR85,  ERR86,  ERR87,  ERR88,  ERR89,  ERR90,\n       ERR91,  ERR92,  ERR93,  ERR94,  ERR95,  ERR96,  ERR97,  ERR98,  ERR99,  ERR100,\n       ERR101, ERR102, ERR103, ERR104, ERR105, ERR106, ERR107, ERR108, ERR109, ERR110,\n       ERR111, ERR112, ERR113, ERR114, ERR115, ERR116, ERR117, ERR118, ERR119, ERR120 };\n\n/* Code values for parsed patterns, which are stored in a vector of 32-bit\nunsigned ints. Values less than META_END are literal data values. The coding\nfor identifying the item is in the top 16-bits, leaving 16 bits for the\nadditional data that some of them need. The META_CODE, META_DATA, and META_DIFF\nmacros are used to manipulate parsed pattern elements.\n\nNOTE: When these definitions are changed, the table of extra lengths for each\ncode (meta_extra_lengths) must be updated to remain in step. */\n\n#define META_END              0x80000000u  /* End of pattern */\n\n#define META_ALT              0x80010000u  /* alternation */\n#define META_ATOMIC           0x80020000u  /* atomic group */\n#define META_BACKREF          0x80030000u  /* Back ref */\n#define META_BACKREF_BYNAME   0x80040000u  /* \\k'name' */\n#define META_BIGVALUE         0x80050000u  /* Next is a literal > META_END */\n#define META_CALLOUT_NUMBER   0x80060000u  /* (?C with numerical argument */\n#define META_CALLOUT_STRING   0x80070000u  /* (?C with string argument */\n#define META_CAPTURE          0x80080000u  /* Capturing parenthesis */\n#define META_CIRCUMFLEX       0x80090000u  /* ^ metacharacter */\n#define META_CLASS            0x800a0000u  /* start non-empty class */\n#define META_CLASS_EMPTY      0x800b0000u  /* empty class */\n#define META_CLASS_EMPTY_NOT  0x800c0000u  /* negative empty class */\n#define META_CLASS_END        0x800d0000u  /* end of non-empty class */\n#define META_CLASS_NOT        0x800e0000u  /* start non-empty negative class */\n#define META_COND_ASSERT      0x800f0000u  /* (?(?assertion)... */\n#define META_COND_DEFINE      0x80100000u  /* (?(DEFINE)... */\n#define META_COND_NAME        0x80110000u  /* (?(<name>)... */\n#define META_COND_NUMBER      0x80120000u  /* (?(digits)... */\n#define META_COND_RNAME       0x80130000u  /* (?(R&name)... */\n#define META_COND_RNUMBER     0x80140000u  /* (?(Rdigits)... */\n#define META_COND_VERSION     0x80150000u  /* (?(VERSION<op>x.y)... */\n#define META_OFFSET           0x80160000u  /* Setting offset for various META\n                                              codes (e.g. META_CAPTURE_NAME) */\n#define META_SCS              0x80170000u  /* (*scan_substring:... */\n#define META_CAPTURE_NAME     0x80180000u  /* Next <name> in capture lists */\n#define META_CAPTURE_NUMBER   0x80190000u  /* Next digits in capture lists */\n#define META_DOLLAR           0x801a0000u  /* $ metacharacter */\n#define META_DOT              0x801b0000u  /* . metacharacter */\n#define META_ESCAPE           0x801c0000u  /* \\d and friends */\n#define META_KET              0x801d0000u  /* closing parenthesis */\n#define META_NOCAPTURE        0x801e0000u  /* no capture parens */\n#define META_OPTIONS          0x801f0000u  /* (?i) and friends */\n#define META_POSIX            0x80200000u  /* POSIX class item */\n#define META_POSIX_NEG        0x80210000u  /* negative POSIX class item */\n#define META_RANGE_ESCAPED    0x80220000u  /* range with at least one escape */\n#define META_RANGE_LITERAL    0x80230000u  /* range defined literally */\n#define META_RECURSE          0x80240000u  /* Recursion */\n#define META_RECURSE_BYNAME   0x80250000u  /* (?&name) */\n#define META_SCRIPT_RUN       0x80260000u  /* (*script_run:...) */\n\n/* These must be kept together to make it easy to check that an assertion\nis present where expected in a conditional group. */\n\n#define META_LOOKAHEAD        0x80270000u  /* (?= */\n#define META_LOOKAHEADNOT     0x80280000u  /* (?! */\n#define META_LOOKBEHIND       0x80290000u  /* (?<= */\n#define META_LOOKBEHINDNOT    0x802a0000u  /* (?<! */\n\n/* These cannot be conditions */\n\n#define META_LOOKAHEAD_NA     0x802b0000u  /* (*napla: */\n#define META_LOOKBEHIND_NA    0x802c0000u  /* (*naplb: */\n\n/* These must be kept in this order, with consecutive values, and the _ARG\nversions of COMMIT, PRUNE, SKIP, and THEN immediately after their non-argument\nversions. */\n\n#define META_MARK             0x802d0000u  /* (*MARK) */\n#define META_ACCEPT           0x802e0000u  /* (*ACCEPT) */\n#define META_FAIL             0x802f0000u  /* (*FAIL) */\n#define META_COMMIT           0x80300000u  /* These               */\n#define META_COMMIT_ARG       0x80310000u  /*   pairs             */\n#define META_PRUNE            0x80320000u  /*     must            */\n#define META_PRUNE_ARG        0x80330000u  /*       be            */\n#define META_SKIP             0x80340000u  /*         kept        */\n#define META_SKIP_ARG         0x80350000u  /*           in        */\n#define META_THEN             0x80360000u  /*             this    */\n#define META_THEN_ARG         0x80370000u  /*               order */\n\n/* These must be kept in groups of adjacent 3 values, and all together. */\n\n#define META_ASTERISK         0x80380000u  /* *  */\n#define META_ASTERISK_PLUS    0x80390000u  /* *+ */\n#define META_ASTERISK_QUERY   0x803a0000u  /* *? */\n#define META_PLUS             0x803b0000u  /* +  */\n#define META_PLUS_PLUS        0x803c0000u  /* ++ */\n#define META_PLUS_QUERY       0x803d0000u  /* +? */\n#define META_QUERY            0x803e0000u  /* ?  */\n#define META_QUERY_PLUS       0x803f0000u  /* ?+ */\n#define META_QUERY_QUERY      0x80400000u  /* ?? */\n#define META_MINMAX           0x80410000u  /* {n,m}  repeat */\n#define META_MINMAX_PLUS      0x80420000u  /* {n,m}+ repeat */\n#define META_MINMAX_QUERY     0x80430000u  /* {n,m}? repeat */\n\n/* These meta codes must be kept in a group, with the OR/SUB/XOR in\nthis order, and AND/NOT at the start/end. */\n\n#define META_ECLASS_AND       0x80440000u  /* && (or &) in a class */\n#define META_ECLASS_OR        0x80450000u  /* || (or |, +) in a class */\n#define META_ECLASS_SUB       0x80460000u  /* -- (or -) in a class */\n#define META_ECLASS_XOR       0x80470000u  /* ~~ (or ^) in a class */\n#define META_ECLASS_NOT       0x80480000u  /* ! in a class */\n\n/* Convenience aliases. */\n\n#define META_FIRST_QUANTIFIER META_ASTERISK\n#define META_LAST_QUANTIFIER  META_MINMAX_QUERY\n\n/* This is a special \"meta code\" that is used only to distinguish (*asr: from\n(*sr: in the table of alphabetic assertions. It is never stored in the parsed\npattern because (*asr: is turned into (*sr:(*atomic: at that stage. There is\ntherefore no need for it to have a length entry, so use a high value. */\n\n#define META_ATOMIC_SCRIPT_RUN 0x8fff0000u\n\n/* Macros for manipulating elements of the parsed pattern vector. */\n\n#define META_CODE(x)   (x & 0xffff0000u)\n#define META_DATA(x)   (x & 0x0000ffffu)\n#define META_DIFF(x,y) ((x-y)>>16)\n\n/* Macros to store and retrieve a PCRE2_SIZE value in the parsed pattern, which\nconsists of uint32_t elements. Assume that if uint32_t can't hold it, two of\nthem will be able to (i.e. assume a 64-bit world). */\n\n#if PCRE2_SIZE_MAX <= UINT32_MAX\n#define PUTOFFSET(s,p) *p++ = s\n#define GETOFFSET(s,p) s = *p++\n#define GETPLUSOFFSET(s,p) s = *(++p)\n#define READPLUSOFFSET(s,p) s = p[1]\n#define SKIPOFFSET(p) p++\n#define SIZEOFFSET 1\n#else\n#define PUTOFFSET(s,p) \\\n  { *p++ = (uint32_t)(s >> 32); *p++ = (uint32_t)(s & 0xffffffff); }\n#define GETOFFSET(s,p) \\\n  { s = ((PCRE2_SIZE)p[0] << 32) | (PCRE2_SIZE)p[1]; p += 2; }\n#define GETPLUSOFFSET(s,p) \\\n  { s = ((PCRE2_SIZE)p[1] << 32) | (PCRE2_SIZE)p[2]; p += 2; }\n#define READPLUSOFFSET(s,p) \\\n  { s = ((PCRE2_SIZE)p[1] << 32) | (PCRE2_SIZE)p[2]; }\n#define SKIPOFFSET(p) p += 2\n#define SIZEOFFSET 2\n#endif\n\n#ifdef PCRE2_DEBUG\n/* Compile data types. */\n#define CDATA_RECURSE_ARGS       0 /* Argument list for recurse */\n#define CDATA_CRANGE             1 /* Character range list */\n#endif\n\n/* Extended class management flags. */\n\n#define CLASS_IS_ECLASS 0x1\n\n/* Macro for the highest character value. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#define MAX_UCHAR_VALUE 0xffu\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n#define MAX_UCHAR_VALUE 0xffffu\n#else\n#define MAX_UCHAR_VALUE 0xffffffffu\n#endif\n\n#define GET_MAX_CHAR_VALUE(utf) \\\n  ((utf) ? MAX_UTF_CODE_POINT : MAX_UCHAR_VALUE)\n\n/* Macro for setting individual bits in class bitmaps. */\n\n#define SETBIT(a,b) a[(b) >> 3] |= (uint8_t)(1u << ((b) & 0x7))\n\n/* Macro for 8 bit specific checks. */\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#define SELECT_VALUE8(value8, value) (value8)\n#else\n#define SELECT_VALUE8(value8, value) (value)\n#endif\n\n/* Macro for aligning data. */\n#define CLIST_ALIGN_TO(base, align) \\\n  ((base + ((size_t)(align) - 1)) & ~((size_t)(align) - 1))\n\n/* Structure for holding information about an OP_ECLASS internal operand.\nAn \"operand\" here could be just a single OP_[X]CLASS, or it could be some\ncomplex expression; but it's some sequence of ECL_* codes which pushes one\nvalue to the stack. */\ntypedef struct {\n  /* The position of the operand - or NULL if (lengthptr != NULL). */\n  PCRE2_UCHAR *code_start;\n  PCRE2_SIZE length;\n  /* The operand's type if it is a single code (ECL_XCLASS, ECL_ANY, ECL_NONE);\n  otherwise zero if the operand is not atomic. */\n  uint8_t op_single_type;\n  /* Regardless of whether it's a single code or not, we fully constant-fold\n  the bitmap for code points < 256. */\n  class_bits_storage bits;\n} eclass_op_info;\n\n/* Macros for the definitions below, to prevent name collisions. */\n\n#define _pcre2_posix_class_maps                PCRE2_SUFFIX(_pcre2_posix_class_maps)\n#define _pcre2_update_classbits                PCRE2_SUFFIX(_pcre2_update_classbits_)\n#define _pcre2_compile_class_nested            PCRE2_SUFFIX(_pcre2_compile_class_nested_)\n#define _pcre2_compile_class_not_nested        PCRE2_SUFFIX(_pcre2_compile_class_not_nested_)\n#define _pcre2_compile_get_hash_from_name      PCRE2_SUFFIX(_pcre2_compile_get_hash_from_name)\n#define _pcre2_compile_find_named_group        PCRE2_SUFFIX(_pcre2_compile_find_named_group)\n#define _pcre2_compile_find_dupname_details    PCRE2_SUFFIX(_pcre2_compile_find_dupname_details)\n#define _pcre2_compile_add_name_to_table       PCRE2_SUFFIX(_pcre2_compile_add_name_to_table)\n#define _pcre2_compile_parse_scan_substr_args  PCRE2_SUFFIX(_pcre2_compile_parse_scan_substr_args)\n#define _pcre2_compile_parse_recurse_args      PCRE2_SUFFIX(_pcre2_compile_parse_recurse_args)\n\n\n/* Indices of the POSIX classes in posix_names, posix_name_lengths,\nposix_class_maps, and posix_substitutes. They must be kept in sync. */\n\n#define PC_DIGIT   7\n#define PC_GRAPH   8\n#define PC_PRINT   9\n#define PC_PUNCT  10\n#define PC_XDIGIT 13\n\nextern const int PRIV(posix_class_maps)[];\n\n/* Defines for hash_dup member in named_group structure. */\n\n#define NAMED_GROUP_HASH_MASK      ((uint16_t)0x7fff)\n#define NAMED_GROUP_IS_DUPNAME     ((uint16_t)0x8000)\n\n#define NAMED_GROUP_GET_HASH(ng)   ((ng)->hash_dup & NAMED_GROUP_HASH_MASK)\n\n/* Exported functions from pcre2_compile_class.c file: */\n\n/* Set bits in classbits according to the property type */\n\nvoid PRIV(update_classbits)(uint32_t ptype, uint32_t pdata, BOOL negated,\n  uint8_t *classbits);\n\n/* Compile the META codes from start_ptr...end_ptr, writing a single OP_CLASS\nOP_CLASS, OP_NCLASS, OP_XCLASS, or OP_ALLANY into pcode. */\n\nuint32_t *PRIV(compile_class_not_nested)(uint32_t options, uint32_t xoptions,\n  uint32_t *start_ptr, PCRE2_UCHAR **pcode, BOOL negate_class, BOOL* has_bitmap,\n  int *errorcodeptr, compile_block *cb, PCRE2_SIZE *lengthptr);\n\n/* Compile the META codes in pptr into opcodes written to pcode. The pptr must\nstart at a META_CLASS or META_CLASS_NOT.\n\nThe pptr will be left pointing at the matching META_CLASS_END. */\n\nBOOL PRIV(compile_class_nested)(uint32_t options, uint32_t xoptions,\n  uint32_t **pptr, PCRE2_UCHAR **pcode, int *errorcodeptr,\n  compile_block *cb, PCRE2_SIZE *lengthptr);\n\n/* Exported functions from pcre2_compile_cgroup.c file: */\n\n/* Compute hash from a capture name. */\n\nuint16_t PRIV(compile_get_hash_from_name)(PCRE2_SPTR name, uint32_t length);\n\n/* Get the descriptor of a known named capture. */\n\nnamed_group *PRIV(compile_find_named_group)(PCRE2_SPTR name,\n  uint32_t length, compile_block *cb);\n\n/* Add entires to name table in alphabetical order. */\n\nuint32_t PRIV(compile_add_name_to_table)(compile_block *cb,\n  named_group *ng, uint32_t tablecount);\n\n/* Searches the properties of duplicated names, and returns them\nin indexptr and countptr. */\n\nBOOL PRIV(compile_find_dupname_details)(PCRE2_SPTR name, uint32_t length,\n  int *indexptr, int *countptr, int *errorcodeptr, compile_block *cb);\n\n/* Parse the arguments of recurse operations. */\n\nuint32_t * PRIV(compile_parse_scan_substr_args)(uint32_t *pptr,\n  int *errorcodeptr, compile_block *cb, PCRE2_SIZE *lengthptr);\n\n/* Parse the arguments of recurse operations. */\n\nBOOL PRIV(compile_parse_recurse_args)(uint32_t *pptr_start,\n  PCRE2_SIZE offset, int *errorcodeptr, compile_block *cb);\n\n#endif  /* PCRE2_COMPILE_H_IDEMPOTENT_GUARD */\n\n/* End of pcre2_compile.h */\n"
  },
  {
    "path": "src/pcre2_compile_cgroup.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_compile.h\"\n\n/*************************************************\n*   Compute the hash code from a capture name    *\n*************************************************/\n\n/* This function returns with a simple hash code\ncomputed from the name of a capture group.\n\nArguments:\n  name         name of the capture group\n  length       the length of the name\n\nReturns:       hash code\n*/\n\nuint16_t\nPRIV(compile_get_hash_from_name)(PCRE2_SPTR name, uint32_t length)\n{\nuint16_t hash;\n\nPCRE2_ASSERT(length > 0);\n\nhash = (uint16_t)((name[0] & 0x7f) | ((name[length - 1] & 0xff) << 7));\nPCRE2_ASSERT(hash <= NAMED_GROUP_HASH_MASK);\nreturn hash;\n}\n\n\n/*************************************************\n*   Get the descriptor of a known named capture  *\n*************************************************/\n\n/* This function returns the descriptor in the\nnamed group list of a known capture group.\n\nArguments:\n  name         name of the capture group\n  length       the length of the name\n\nReturns:       pointer to the descriptor when found,\n               NULL otherwise\n */\n\nnamed_group *\nPRIV(compile_find_named_group)(PCRE2_SPTR name,\n  uint32_t length, compile_block *cb)\n{\nuint16_t hash = PRIV(compile_get_hash_from_name)(name, length);\nnamed_group *ng;\nnamed_group *end = cb->named_groups + cb->names_found;\n\nfor (ng = cb->named_groups; ng < end; ng++)\n  if (length == ng->length && hash == NAMED_GROUP_GET_HASH(ng) &&\n      PRIV(strncmp)(name, ng->name, length) == 0) return ng;\n\nreturn NULL;\n}\n\n\n/*************************************************\n*     Add an entry to the name/number table      *\n*************************************************/\n\n/* This function is called between compiling passes to add an entry to the\nname/number table, maintaining alphabetical order. Checking for permitted\nand forbidden duplicates has already been done.\n\nArguments:\n  cb           the compile data block\n  nb           named group entry\n  tablecount   the count of names in the table so far\n\nReturns:       new tablecount\n*/\n\nuint32_t\nPRIV(compile_add_name_to_table)(compile_block *cb,\n  named_group *ng, uint32_t tablecount)\n{\nuint32_t i;\nPCRE2_SPTR name = ng->name;\nint length = ng->length;\nuint32_t duplicate_count = 1;\n\nPCRE2_UCHAR *slot = cb->name_table;\n\nPCRE2_ASSERT(length > 0);\n\nif ((ng->hash_dup & NAMED_GROUP_IS_DUPNAME) != 0)\n  {\n  named_group *ng_it;\n  named_group *end = cb->named_groups + cb->names_found;\n\n  for (ng_it = ng + 1; ng_it < end; ng_it++)\n    if (ng_it->name == name) duplicate_count++;\n  }\n\nfor (i = 0; i < tablecount; i++)\n  {\n  int crc = memcmp(name, slot + IMM2_SIZE, CU2BYTES(length));\n  if (crc == 0 && slot[IMM2_SIZE + length] != 0)\n    crc = -1; /* Current name is a substring */\n\n  /* Make space in the table and break the loop for an earlier name. For a\n  duplicate or later name, carry on. We do this for duplicates so that in the\n  simple case (when ?(| is not used) they are in order of their numbers. In all\n  cases they are in the order in which they appear in the pattern. */\n\n  if (crc < 0)\n    {\n    (void)memmove(slot + cb->name_entry_size * duplicate_count, slot,\n      CU2BYTES((tablecount - i) * cb->name_entry_size));\n    break;\n    }\n\n  /* Continue the loop for a later or duplicate name */\n\n  slot += cb->name_entry_size;\n  }\n\ntablecount += duplicate_count;\n\nwhile (TRUE)\n  {\n  PUT2(slot, 0, ng->number);\n  memcpy(slot + IMM2_SIZE, name, CU2BYTES(length));\n\n  /* Add a terminating zero and fill the rest of the slot with zeroes so that\n  the memory is all initialized. Otherwise valgrind moans about uninitialized\n  memory when saving serialized compiled patterns. */\n\n  memset(slot + IMM2_SIZE + length, 0,\n    CU2BYTES(cb->name_entry_size - length - IMM2_SIZE));\n\n  if (--duplicate_count == 0) break;\n\n  while (TRUE)\n    {\n    ++ng;\n    if (ng->name == name) break;\n    }\n\n  slot += cb->name_entry_size;\n  }\n\nreturn tablecount;\n}\n\n\n/*************************************************\n*    Find details of duplicate group names       *\n*************************************************/\n\n/* This is called from compile_branch() when it needs to know the index and\ncount of duplicates in the names table when processing named backreferences,\neither directly, or as conditions.\n\nArguments:\n  name          points to the name\n  length        the length of the name\n  indexptr      where to put the index\n  countptr      where to put the count of duplicates\n  errorcodeptr  where to put an error code\n  cb            the compile block\n\nReturns:        TRUE if OK, FALSE if not, error code set\n*/\n\nBOOL\nPRIV(compile_find_dupname_details)(PCRE2_SPTR name, uint32_t length,\n  int *indexptr, int *countptr, int *errorcodeptr, compile_block *cb)\n{\nuint32_t i, groupnumber;\nint count;\nPCRE2_UCHAR *slot = cb->name_table;\n\n/* Find the first entry in the table */\n\nfor (i = 0; i < cb->names_found; i++)\n  {\n  if (PRIV(strncmp)(name, slot + IMM2_SIZE, length) == 0 &&\n      slot[IMM2_SIZE + length] == 0) break;\n  slot += cb->name_entry_size;\n  }\n\n/* This should not occur, because this function is called only when we know we\nhave duplicate names. Give an internal error. */\n\n/* LCOV_EXCL_START */\nif (i >= cb->names_found)\n  {\n  PCRE2_DEBUG_UNREACHABLE();\n  *errorcodeptr = ERR53;\n  cb->erroroffset = name - cb->start_pattern;\n  return FALSE;\n  }\n/* LCOV_EXCL_STOP */\n\n/* Record the index and then see how many duplicates there are, updating the\nbackref map and maximum back reference as we do. */\n\n*indexptr = i;\ncount = 0;\n\nfor (;;)\n  {\n  count++;\n  groupnumber = GET2(slot, 0);\n  cb->backref_map |= (groupnumber < 32)? (1u << groupnumber) : 1;\n  if (groupnumber > cb->top_backref) cb->top_backref = groupnumber;\n  if (++i >= cb->names_found) break;\n  slot += cb->name_entry_size;\n  if (PRIV(strncmp)(name, slot + IMM2_SIZE, length) != 0 ||\n    (slot + IMM2_SIZE)[length] != 0) break;\n  }\n\n*countptr = count;\nreturn TRUE;\n}\n\n\n/* Process the capture list of scan substring and recurse\noperations. Since at least one argument must be present,\na 0 return value represents error. */\n\nstatic size_t\nPRIV(compile_process_capture_list)(uint32_t *pptr, PCRE2_SIZE offset,\n  int *errorcodeptr, compile_block *cb)\n{\nsize_t i, size = 0;\nnamed_group *ng;\nPCRE2_SPTR name;\nuint32_t length;\nnamed_group *end = cb->named_groups + cb->names_found;\n\nwhile (TRUE)\n  {\n  ++pptr;\n\n  switch (META_CODE(*pptr))\n    {\n    case META_OFFSET:\n    GETPLUSOFFSET(offset, pptr);\n    continue;\n\n    case META_CAPTURE_NAME:\n    offset += META_DATA(*pptr);\n    length = *(++pptr);\n    name = cb->start_pattern + offset;\n\n    ng = PRIV(compile_find_named_group)(name, length, cb);\n\n    if (ng == NULL)\n      {\n      *errorcodeptr = ERR15;\n      cb->erroroffset = offset;\n      return 0;\n      }\n\n    if ((ng->hash_dup & NAMED_GROUP_IS_DUPNAME) == 0)\n      {\n      pptr[-1] = META_CAPTURE_NUMBER;\n      pptr[0] = ng->number;\n      size++;\n      continue;\n      }\n\n    /* Remains only for duplicated names. */\n    pptr[-1] = META_CAPTURE_NAME;\n    pptr[0] = (uint32_t)(ng - cb->named_groups);\n    size++;\n    name = ng->name;\n\n    while (++ng < end)\n      if (ng->name == name) size++;\n    continue;\n\n    case META_CAPTURE_NUMBER:\n    offset += META_DATA(*pptr);\n\n    i = *(++pptr);\n    if (i > cb->bracount)\n      {\n      *errorcodeptr = ERR15;\n      cb->erroroffset = offset;\n      return 0;\n      }\n    if (i > cb->top_backref) cb->top_backref = (uint16_t)i;\n    size++;\n    continue;\n\n    default:\n    break;\n    }\n\n  PCRE2_ASSERT(size > 0);\n  return size;\n  }\n}\n\n\n/*******************************************************\n*   Parse the arguments of scan substring operations   *\n********************************************************/\n\n/* This function parses the arguments of scan substring operations.\n\nArguments:\n  pptr_start    points to the current parsed pattern pointer\n  offset        argument starting offset in the pattern\n  errorcodeptr  where to put an error code\n  cb            the compile block\n  lengthptr     NULL during the real compile phase\n                points to length accumulator during pre-compile phase\n\nReturns:        TRUE if OK, FALSE if not, error code set\n*/\n\nuint32_t *\nPRIV(compile_parse_scan_substr_args)(uint32_t *pptr,\n  int *errorcodeptr, compile_block *cb, PCRE2_SIZE *lengthptr)\n{\nuint8_t *captures;\nuint8_t *capture_ptr;\nuint8_t bit;\nPCRE2_SPTR name;\nnamed_group *ng;\nnamed_group *end = cb->named_groups + cb->names_found;\nBOOL all_found;\nsize_t size;\n\nPCRE2_ASSERT(*pptr == META_OFFSET);\nif (PRIV(compile_process_capture_list)(pptr - 1, 0, errorcodeptr, cb) == 0)\n  return NULL;\n\n/* Align to bytes. Since the highest capture can\nbe equal to bracount, +1 is added before the aligning. */\nsize = (cb->bracount + 1 + 7) >> 3;\ncaptures = (uint8_t*)cb->cx->memctl.malloc(size, cb->cx->memctl.memory_data);\nif (captures == NULL)\n  {\n  *errorcodeptr = ERR21;\n  READPLUSOFFSET(cb->erroroffset, pptr);\n  return NULL;\n  }\n\nmemset(captures, 0, size);\n\nwhile (TRUE)\n  {\n  switch (META_CODE(*pptr))\n    {\n    case META_OFFSET:\n    pptr++;\n    SKIPOFFSET(pptr);\n    continue;\n\n    case META_CAPTURE_NAME:\n    ng = cb->named_groups + pptr[1];\n    PCRE2_ASSERT((ng->hash_dup & NAMED_GROUP_IS_DUPNAME) != 0);\n    pptr += 2;\n    name = ng->name;\n\n    all_found = TRUE;\n    do\n      {\n      if (ng->name != name) continue;\n\n      capture_ptr = captures + (ng->number >> 3);\n      PCRE2_ASSERT(capture_ptr < captures + size);\n      bit = (uint8_t)(1 << (ng->number & 0x7));\n\n      if ((*capture_ptr & bit) == 0)\n        {\n        *capture_ptr |= bit;\n        all_found = FALSE;\n        }\n      }\n    while (++ng < end);\n\n    if (!all_found)\n      {\n      *lengthptr += 1 + 2 * IMM2_SIZE;\n      continue;\n      }\n\n    pptr[-2] = META_CAPTURE_NUMBER;\n    pptr[-1] = 0;\n    continue;\n\n    case META_CAPTURE_NUMBER:\n    pptr += 2;\n\n    capture_ptr = captures + (pptr[-1] >> 3);\n    PCRE2_ASSERT(capture_ptr < captures + size);\n    bit = (uint8_t)(1 << (pptr[-1] & 0x7));\n\n    if ((*capture_ptr & bit) != 0)\n      {\n      pptr[-1] = 0;\n      continue;\n      }\n\n    *capture_ptr |= bit;\n    *lengthptr += 1 + IMM2_SIZE;\n    continue;\n\n    default:\n    break;\n    }\n\n  break;\n  }\n\ncb->cx->memctl.free(captures, cb->cx->memctl.memory_data);\nreturn pptr - 1;\n}\n\n\n/* Implement heapsort heapify algorithm. */\n\nstatic void do_heapify_u16(uint16_t *captures, size_t size, size_t i)\n{\nsize_t max;\nsize_t left;\nsize_t right;\nuint16_t tmp;\n\nwhile (TRUE)\n  {\n  max = i;\n  left = (i << 1) + 1;\n  right = left + 1;\n\n  if (left < size && captures[left] > captures[max]) max = left;\n  if (right < size && captures[right] > captures[max]) max = right;\n  if (i == max) return;\n\n  tmp = captures[i];\n  captures[i] = captures[max];\n  captures[max] = tmp;\n  i = max;\n  }\n}\n\n\n/*************************************************\n*   Parse the arguments of recurse operations    *\n*************************************************/\n\n/* This function parses the arguments of recurse operations.\n\nArguments:\n  pptr_start    the current parsed pattern pointer\n  offset        argument starting offset in the pattern\n  errorcodeptr  where to put an error code\n  cb            the compile block\n  lengthptr     NULL during the real compile phase\n                points to length accumulator during pre-compile phase\n\nReturns:        TRUE if OK, FALSE if not, error code set\n*/\n\nBOOL\nPRIV(compile_parse_recurse_args)(uint32_t *pptr_start,\n  PCRE2_SIZE offset, int *errorcodeptr, compile_block *cb)\n{\nuint32_t *pptr = pptr_start;\nsize_t i, size;\nPCRE2_SPTR name;\nnamed_group *ng;\nnamed_group *end = cb->named_groups + cb->names_found;\nrecurse_arguments *args;\nuint16_t *captures;\nuint16_t *current;\nuint16_t *captures_end;\nuint16_t tmp;\n\n/* Process all arguments, compute the required size. */\n\nsize = PRIV(compile_process_capture_list)(pptr, offset, errorcodeptr, cb);\nif (size == 0) return FALSE;\n\nargs = cb->cx->memctl.malloc(\n  sizeof(recurse_arguments) + size * sizeof(uint16_t), cb->cx->memctl.memory_data);\n\nif (args == NULL)\n  {\n  *errorcodeptr = ERR21;\n  cb->erroroffset = offset;\n  return FALSE;\n  }\n\nargs->header.next = NULL;\n#ifdef PCRE2_DEBUG\nargs->header.type = CDATA_RECURSE_ARGS;\n#endif\nargs->size = size;\n\n/* Caching the pre-processed capture list. */\nif (cb->last_data != NULL)\n  cb->last_data->next = &args->header;\nelse\n  cb->first_data = &args->header;\n\ncb->last_data = &args->header;\n\n/* Create the capture list size. */\n\ncaptures = (uint16_t*)(args + 1);\n\nwhile (TRUE)\n  {\n  ++pptr;\n\n  switch (META_CODE(*pptr))\n    {\n    case META_OFFSET:\n    SKIPOFFSET(pptr);\n    continue;\n\n    case META_CAPTURE_NAME:\n    ng = cb->named_groups + *(++pptr);\n    PCRE2_ASSERT((ng->hash_dup & NAMED_GROUP_IS_DUPNAME) != 0);\n    *captures++ = (uint16_t)(ng->number);\n\n    name = ng->name;\n\n    while (++ng < end)\n      if (ng->name == name) *captures++ = (uint16_t)(ng->number);\n    continue;\n\n    case META_CAPTURE_NUMBER:\n    *captures++ = *(++pptr);\n    continue;\n\n    default:\n    break;\n    }\n\n  break;\n  }\n\nPCRE2_ASSERT(size == (size_t)(captures - (uint16_t*)(args + 1)));\nargs->skip_size = (size_t)(pptr - pptr_start) - 1;\n\nif (size == 1) return TRUE;\n\n/* Sort captures. */\n\ncaptures = (uint16_t*)(args + 1);\ni = (size >> 1) - 1;\nwhile (TRUE)\n  {\n  do_heapify_u16(captures, size, i);\n  if (i == 0) break;\n  i--;\n  }\n\nfor (i = size - 1; i > 0; i--)\n  {\n  tmp = captures[0];\n  captures[0] = captures[i];\n  captures[i] = tmp;\n\n  do_heapify_u16(captures, i, 0);\n  }\n\n/* Remove duplicates. */\n\ncaptures_end = captures + size;\ntmp = *captures++;\ncurrent = captures;\n\nwhile (current < captures_end)\n  {\n  if (*current != tmp)\n    {\n    tmp = *current;\n    *captures++ = tmp;\n    }\n\n  current++;\n  }\n\nargs->size = (size_t)(captures - (uint16_t*)(args + 1));\nreturn TRUE;\n}\n\n/* End of pcre2_compile_cgroup.c */\n"
  },
  {
    "path": "src/pcre2_compile_class.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_compile.h\"\n\n\n\ntypedef struct {\n  /* Option bits for eclass. */\n  uint32_t options;\n  uint32_t xoptions;\n  /* Rarely used members. */\n  int *errorcodeptr;\n  compile_block *cb;\n  /* Bitmap is needed. */\n  BOOL needs_bitmap;\n} eclass_context;\n\n/* Checks the allowed tokens at the end of a class structure in debug mode.\nWhen a new token is not processed by all loops, and the token is equals to\na) one of the cases here:\n   the compiler will complain about a duplicated case value.\nb) none of the cases here:\n   the loop without the handler will stop with an assertion failure. */\n\n#ifdef PCRE2_DEBUG\n#define CLASS_END_CASES(meta) \\\n  default: \\\n  PCRE2_ASSERT((meta) <= META_END); \\\n  PCRE2_FALLTHROUGH /* Fall through */ \\\n  case META_CLASS: \\\n  case META_CLASS_NOT: \\\n  case META_CLASS_EMPTY: \\\n  case META_CLASS_EMPTY_NOT: \\\n  case META_CLASS_END: \\\n  case META_ECLASS_AND: \\\n  case META_ECLASS_OR: \\\n  case META_ECLASS_SUB: \\\n  case META_ECLASS_XOR: \\\n  case META_ECLASS_NOT:\n#else\n#define CLASS_END_CASES(meta) \\\n  default:\n#endif\n\n#ifdef SUPPORT_WIDE_CHARS\n\n/* Heapsort algorithm. */\n\nstatic void do_heapify(uint32_t *buffer, size_t size, size_t i)\n{\nsize_t max;\nsize_t left;\nsize_t right;\nuint32_t tmp1, tmp2;\n\nwhile (TRUE)\n  {\n  max = i;\n  left = (i << 1) + 2;\n  right = left + 2;\n\n  if (left < size && buffer[left] > buffer[max]) max = left;\n  if (right < size && buffer[right] > buffer[max]) max = right;\n  if (i == max) return;\n\n  /* Swap items. */\n  tmp1 = buffer[i];\n  tmp2 = buffer[i + 1];\n  buffer[i] = buffer[max];\n  buffer[i + 1] = buffer[max + 1];\n  buffer[max] = tmp1;\n  buffer[max + 1] = tmp2;\n  i = max;\n  }\n}\n\n#ifdef SUPPORT_UNICODE\n\n#define PARSE_CLASS_UTF               0x1\n#define PARSE_CLASS_CASELESS_UTF      0x2\n#define PARSE_CLASS_RESTRICTED_UTF    0x4\n#define PARSE_CLASS_TURKISH_UTF       0x8\n\n/* Get the range of nocase characters which includes the\n'c' character passed as argument, or directly follows 'c'. */\n\nstatic const uint32_t*\nget_nocase_range(uint32_t c)\n{\nuint32_t left = 0;\nuint32_t right = PRIV(ucd_nocase_ranges_size);\nuint32_t middle;\n\nif (c > MAX_UTF_CODE_POINT) return PRIV(ucd_nocase_ranges) + right;\n\nwhile (TRUE)\n  {\n  /* Range end of the middle element. */\n  middle = ((left + right) >> 1) | 0x1;\n\n  if (PRIV(ucd_nocase_ranges)[middle] <= c)\n    left = middle + 1;\n  else if (middle > 1 && PRIV(ucd_nocase_ranges)[middle - 2] > c)\n    right = middle - 1;\n  else\n    return PRIV(ucd_nocase_ranges) + (middle - 1);\n  }\n}\n\n/* Get the list of othercase characters, which belongs to the passed range.\nCreate ranges from these characters, and append them to the buffer argument. */\n\nstatic size_t\nutf_caseless_extend(uint32_t start, uint32_t end, uint32_t options,\n  uint32_t *buffer)\n{\nuint32_t new_start = start;\nuint32_t new_end = end;\nuint32_t c = start;\nconst uint32_t *list;\nuint32_t tmp[3];\nsize_t result = 2;\nconst uint32_t *skip_range = get_nocase_range(c);\nuint32_t skip_start = skip_range[0];\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nPCRE2_ASSERT(options & PARSE_CLASS_UTF);\n#endif\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\nif (end > MAX_UTF_CODE_POINT) end = MAX_UTF_CODE_POINT;\n#endif\n\nwhile (c <= end)\n  {\n  uint32_t co;\n\n  if (c > skip_start)\n    {\n    c = skip_range[1];\n    skip_range += 2;\n    skip_start = skip_range[0];\n    continue;\n    }\n\n  /* Compute caseless set. */\n\n  if ((options & (PARSE_CLASS_TURKISH_UTF|PARSE_CLASS_RESTRICTED_UTF)) ==\n        PARSE_CLASS_TURKISH_UTF &&\n      UCD_ANY_I(c))\n    {\n    co = PRIV(ucd_turkish_dotted_i_caseset) + (UCD_DOTTED_I(c)? 0 : 3);\n    }\n  else if ((co = UCD_CASESET(c)) != 0 &&\n           (options & PARSE_CLASS_RESTRICTED_UTF) != 0 &&\n           PRIV(ucd_caseless_sets)[co] < 128)\n    {\n    co = 0;  /* Ignore the caseless set if it's restricted. */\n    }\n\n  if (co != 0)\n    list = PRIV(ucd_caseless_sets) + co;\n  else\n    {\n    co = UCD_OTHERCASE(c);\n    list = tmp;\n    tmp[0] = c;\n    tmp[1] = NOTACHAR;\n\n    if (co != c)\n      {\n      tmp[1] = co;\n      tmp[2] = NOTACHAR;\n      }\n    }\n  c++;\n\n  /* Add characters. */\n  do\n    {\n#if PCRE2_CODE_UNIT_WIDTH == 16\n    if (!(options & PARSE_CLASS_UTF) && *list > 0xffff) continue;\n#endif\n\n    if (*list < new_start)\n      {\n      if (*list + 1 == new_start)\n        {\n        new_start--;\n        continue;\n        }\n      }\n    else if (*list > new_end)\n      {\n      if (*list - 1 == new_end)\n        {\n        new_end++;\n        continue;\n        }\n      }\n    else continue;\n\n    result += 2;\n    if (buffer != NULL)\n      {\n      buffer[0] = *list;\n      buffer[1] = *list;\n      buffer += 2;\n      }\n    }\n  while (*(++list) != NOTACHAR);\n  }\n\n  if (buffer != NULL)\n    {\n    buffer[0] = new_start;\n    buffer[1] = new_end;\n    buffer += 2;\n    (void)buffer;\n    }\n  return result;\n}\n\n#endif\n\n/* Add a character list to a buffer. */\n\nstatic size_t\nappend_char_list(const uint32_t *p, uint32_t *buffer)\n{\nconst uint32_t *n;\nsize_t result = 0;\n\nwhile (*p != NOTACHAR)\n  {\n  n = p;\n  while (n[0] == n[1] - 1) n++;\n\n  PCRE2_ASSERT(*p < 0xffff);\n\n  if (buffer != NULL)\n    {\n    buffer[0] = *p;\n    buffer[1] = *n;\n    buffer += 2;\n    }\n\n  result += 2;\n  p = n + 1;\n  }\n\n  return result;\n}\n\nstatic uint32_t\nget_highest_char(uint32_t options)\n{\n(void)options; /* Avoid compiler warning. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nreturn MAX_UTF_CODE_POINT;\n#else\n#ifdef SUPPORT_UNICODE\nreturn GET_MAX_CHAR_VALUE((options & PARSE_CLASS_UTF) != 0);\n#else\nreturn MAX_UCHAR_VALUE;\n#endif\n#endif\n}\n\n/* Add a negated character list to a buffer. */\nstatic size_t\nappend_negated_char_list(const uint32_t *p, uint32_t options, uint32_t *buffer)\n{\nconst uint32_t *n;\nuint32_t start = 0;\nsize_t result = 2;\n\nPCRE2_ASSERT(*p > 0);\n\nwhile (*p != NOTACHAR)\n  {\n  n = p;\n  while (n[0] == n[1] - 1) n++;\n\n  PCRE2_ASSERT(*p < 0xffff);\n\n  if (buffer != NULL)\n    {\n    buffer[0] = start;\n    buffer[1] = *p - 1;\n    buffer += 2;\n    }\n\n  result += 2;\n  start = *n + 1;\n  p = n + 1;\n  }\n\n  if (buffer != NULL)\n    {\n    buffer[0] = start;\n    buffer[1] = get_highest_char(options);\n    buffer += 2;\n    (void)buffer;\n    }\n\n  return result;\n}\n\nstatic uint32_t *\nappend_non_ascii_range(uint32_t options, uint32_t *buffer)\n{\n  if (buffer == NULL) return NULL;\n\n  buffer[0] = 0x100;\n  buffer[1] = get_highest_char(options);\n  return buffer + 2;\n}\n\nstatic size_t\nparse_class(uint32_t *ptr, uint32_t options, uint32_t *buffer)\n{\nsize_t total_size = 0;\nsize_t size;\nuint32_t meta_arg;\nuint32_t start_char;\n\nwhile (TRUE)\n  {\n  switch (META_CODE(*ptr))\n    {\n    case META_ESCAPE:\n      meta_arg = META_DATA(*ptr);\n      switch (meta_arg)\n        {\n        case ESC_D:\n        case ESC_W:\n        case ESC_S:\n        buffer = append_non_ascii_range(options, buffer);\n        total_size += 2;\n        break;\n\n        case ESC_h:\n        size = append_char_list(PRIV(hspace_list), buffer);\n        total_size += size;\n        if (buffer != NULL) buffer += size;\n        break;\n\n        case ESC_H:\n        size = append_negated_char_list(PRIV(hspace_list), options, buffer);\n        total_size += size;\n        if (buffer != NULL) buffer += size;\n        break;\n\n        case ESC_v:\n        size = append_char_list(PRIV(vspace_list), buffer);\n        total_size += size;\n        if (buffer != NULL) buffer += size;\n        break;\n\n        case ESC_V:\n        size = append_negated_char_list(PRIV(vspace_list), options, buffer);\n        total_size += size;\n        if (buffer != NULL) buffer += size;\n        break;\n\n        case ESC_p:\n        case ESC_P:\n        ptr++;\n        if (meta_arg == ESC_p && (*ptr >> 16) == PT_ANY)\n          {\n          if (buffer != NULL)\n            {\n            buffer[0] = 0;\n            buffer[1] = get_highest_char(options);\n            buffer += 2;\n            }\n          total_size += 2;\n          }\n        break;\n        }\n      ptr++;\n      continue;\n    case META_POSIX_NEG:\n      buffer = append_non_ascii_range(options, buffer);\n      total_size += 2;\n      ptr += 2;\n      continue;\n    case META_POSIX:\n      ptr += 2;\n      continue;\n    case META_BIGVALUE:\n      /* Character literal */\n      ptr++;\n      break;\n    CLASS_END_CASES(*ptr)\n      if (*ptr >= META_END) return total_size;\n      break;\n    }\n\n    start_char = *ptr;\n\n    if (ptr[1] == META_RANGE_LITERAL || ptr[1] == META_RANGE_ESCAPED)\n      {\n      ptr += 2;\n      PCRE2_ASSERT(*ptr < META_END || *ptr == META_BIGVALUE);\n\n      if (*ptr == META_BIGVALUE) ptr++;\n\n#ifdef EBCDIC\n#error \"Missing EBCDIC support\"\n#endif\n      }\n\n#ifdef SUPPORT_UNICODE\n    if (options & PARSE_CLASS_CASELESS_UTF)\n      {\n      size = utf_caseless_extend(start_char, *ptr++, options, buffer);\n      if (buffer != NULL) buffer += size;\n      total_size += size;\n      continue;\n      }\n#endif\n\n    if (buffer != NULL)\n      {\n      buffer[0] = start_char;\n      buffer[1] = *ptr;\n      buffer += 2;\n      }\n\n    ptr++;\n    total_size += 2;\n  }\n\n  return total_size;\n}\n\n/* Extra uint32_t values for storing the lengths of range lists in\nthe worst case. Two uint32_t lengths and a range end for a range\nstarting before 255 */\n#define CHAR_LIST_EXTRA_SIZE 3\n\n/* Starting character values for each character list. */\n\nstatic const uint32_t char_list_starts[] = {\n#if PCRE2_CODE_UNIT_WIDTH == 32\n  XCL_CHAR_LIST_HIGH_32_START,\n#endif\n#if PCRE2_CODE_UNIT_WIDTH == 32 || defined SUPPORT_UNICODE\n  XCL_CHAR_LIST_LOW_32_START,\n#endif\n  XCL_CHAR_LIST_HIGH_16_START,\n  /* Must be terminated by XCL_CHAR_LIST_LOW_16_START,\n  which also represents the end of the bitset. */\n  XCL_CHAR_LIST_LOW_16_START,\n};\n\nstatic class_ranges *\ncompile_optimize_class(uint32_t *start_ptr, uint32_t options,\n  uint32_t xoptions, compile_block *cb)\n{\nclass_ranges* cranges;\nuint32_t *ptr;\nuint32_t *buffer;\nuint32_t *dst;\nuint32_t class_options = 0;\nsize_t range_list_size = 0, total_size, i;\nuint32_t tmp1, tmp2;\nconst uint32_t *char_list_next;\nuint16_t *next_char;\nuint32_t char_list_start, char_list_end;\nuint32_t range_start, range_end;\n\n#ifdef SUPPORT_UNICODE\nif (options & PCRE2_UTF)\n  class_options |= PARSE_CLASS_UTF;\n\nif ((options & PCRE2_CASELESS) && (options & (PCRE2_UTF|PCRE2_UCP)))\n  class_options |= PARSE_CLASS_CASELESS_UTF;\n\nif (xoptions & PCRE2_EXTRA_CASELESS_RESTRICT)\n  class_options |= PARSE_CLASS_RESTRICTED_UTF;\n\nif (xoptions & PCRE2_EXTRA_TURKISH_CASING)\n  class_options |= PARSE_CLASS_TURKISH_UTF;\n#else\n(void)options;   /* Avoid compiler warning. */\n(void)xoptions;  /* Avoid compiler warning. */\n#endif\n\n/* Compute required space for the range. */\n\nrange_list_size = parse_class(start_ptr, class_options, NULL);\nPCRE2_ASSERT((range_list_size & 0x1) == 0);\n\n/* Allocate buffer. The total_size also represents the end of the buffer. */\n\ntotal_size = range_list_size +\n   ((range_list_size >= 2) ? CHAR_LIST_EXTRA_SIZE : 0);\n\ncranges = cb->cx->memctl.malloc(\n  sizeof(class_ranges) + total_size * sizeof(uint32_t),\n  cb->cx->memctl.memory_data);\n\nif (cranges == NULL) return NULL;\n\ncranges->header.next = NULL;\n#ifdef PCRE2_DEBUG\ncranges->header.type = CDATA_CRANGE;\n#endif\ncranges->range_list_size = (uint16_t)range_list_size;\ncranges->char_lists_types = 0;\ncranges->char_lists_size = 0;\ncranges->char_lists_start = 0;\n\nif (range_list_size == 0) return cranges;\n\nbuffer = (uint32_t*)(cranges + 1);\nparse_class(start_ptr, class_options, buffer);\n\n/* Using <= instead of == to help static analysis. */\nif (range_list_size <= 2) return cranges;\n\n/* In-place sorting of ranges. */\n\ni = (((range_list_size >> 2) - 1) << 1);\nwhile (TRUE)\n  {\n  do_heapify(buffer, range_list_size, i);\n  if (i == 0) break;\n  i -= 2;\n  }\n\ni = range_list_size - 2;\nwhile (TRUE)\n  {\n  tmp1 = buffer[i];\n  tmp2 = buffer[i + 1];\n  buffer[i] = buffer[0];\n  buffer[i + 1] = buffer[1];\n  buffer[0] = tmp1;\n  buffer[1] = tmp2;\n\n  do_heapify(buffer, i, 0);\n  if (i == 0) break;\n  i -= 2;\n  }\n\n/* Merge ranges whenever possible. */\ndst = buffer;\nptr = buffer + 2;\nrange_list_size -= 2;\n\n/* The second condition is a very rare corner case, where the end of the last\nrange is the maximum character. This range cannot be extended further. */\n\nwhile (range_list_size > 0 && dst[1] != ~(uint32_t)0)\n  {\n  if (dst[1] + 1 < ptr[0])\n    {\n    dst += 2;\n    dst[0] = ptr[0];\n    dst[1] = ptr[1];\n    }\n  else if (dst[1] < ptr[1]) dst[1] = ptr[1];\n\n  ptr += 2;\n  range_list_size -= 2;\n  }\n\nPCRE2_ASSERT(dst[1] <= get_highest_char(class_options));\n\n/* When the number of ranges are less than six,\nthey are not converted to range lists. */\n\nptr = buffer;\nwhile (ptr < dst && ptr[1] < 0x100) ptr += 2;\nif (dst - ptr < (2 * (6 - 1)))\n  {\n  cranges->range_list_size = (uint16_t)(dst + 2 - buffer);\n  return cranges;\n  }\n\n/* Compute character lists structures. */\n\nchar_list_next = char_list_starts;\nchar_list_start = *char_list_next++;\n#if PCRE2_CODE_UNIT_WIDTH == 32\nchar_list_end = XCL_CHAR_LIST_HIGH_32_END;\n#elif defined SUPPORT_UNICODE\nchar_list_end = XCL_CHAR_LIST_LOW_32_END;\n#else\nchar_list_end = XCL_CHAR_LIST_HIGH_16_END;\n#endif\nnext_char = (uint16_t*)(buffer + total_size);\n\ntmp1 = 0;\ntmp2 = ((sizeof(char_list_starts) / sizeof(uint32_t)) - 1) * XCL_TYPE_BIT_LEN;\nPCRE2_ASSERT(tmp2 <= 3 * XCL_TYPE_BIT_LEN && tmp2 >= XCL_TYPE_BIT_LEN);\nrange_start = dst[0];\nrange_end = dst[1];\n\nwhile (TRUE)\n  {\n  if (range_start >= char_list_start)\n    {\n    if (range_start == range_end || range_end < char_list_end)\n      {\n      tmp1++;\n      next_char--;\n\n      if (char_list_start < XCL_CHAR_LIST_LOW_32_START)\n        *next_char = (uint16_t)((range_end << XCL_CHAR_SHIFT) | XCL_CHAR_END);\n      else\n        *(uint32_t*)(--next_char) =\n          (range_end << XCL_CHAR_SHIFT) | XCL_CHAR_END;\n      }\n\n    if (range_start < range_end)\n      {\n      if (range_start > char_list_start)\n        {\n        tmp1++;\n        next_char--;\n\n        if (char_list_start < XCL_CHAR_LIST_LOW_32_START)\n          *next_char = (uint16_t)(range_start << XCL_CHAR_SHIFT);\n        else\n          *(uint32_t*)(--next_char) = (range_start << XCL_CHAR_SHIFT);\n        }\n      else\n        cranges->char_lists_types |= XCL_BEGIN_WITH_RANGE << tmp2;\n      }\n\n    PCRE2_ASSERT((uint32_t*)next_char >= dst + 2);\n\n    if (dst > buffer)\n      {\n      dst -= 2;\n      range_start = dst[0];\n      range_end = dst[1];\n      continue;\n      }\n\n    range_start = 0;\n    range_end = 0;\n    }\n\n  if (range_end >= char_list_start)\n    {\n    PCRE2_ASSERT(range_start < char_list_start);\n\n    if (range_end < char_list_end)\n      {\n      tmp1++;\n      next_char--;\n\n      if (char_list_start < XCL_CHAR_LIST_LOW_32_START)\n        *next_char = (uint16_t)((range_end << XCL_CHAR_SHIFT) | XCL_CHAR_END);\n      else\n        *(uint32_t*)(--next_char) =\n          (range_end << XCL_CHAR_SHIFT) | XCL_CHAR_END;\n\n      PCRE2_ASSERT((uint32_t*)next_char >= dst + 2);\n      }\n\n    cranges->char_lists_types |= XCL_BEGIN_WITH_RANGE << tmp2;\n    }\n\n  if (tmp1 >= XCL_ITEM_COUNT_MASK)\n    {\n    cranges->char_lists_types |= XCL_ITEM_COUNT_MASK << tmp2;\n    next_char--;\n\n    if (char_list_start < XCL_CHAR_LIST_LOW_32_START)\n      *next_char = (uint16_t)tmp1;\n    else\n      *(uint32_t*)(--next_char) = tmp1;\n    }\n  else\n    cranges->char_lists_types |= tmp1 << tmp2;\n\n  if (range_end < XCL_CHAR_LIST_LOW_16_START || tmp2 == 0)\n    {\n    PCRE2_ASSERT(range_start < XCL_CHAR_LIST_LOW_16_START);\n    break;\n    }\n\n  PCRE2_ASSERT((tmp2 % XCL_TYPE_BIT_LEN) == 0);\n  char_list_end = char_list_start - 1;\n  char_list_start = *char_list_next++;\n  tmp1 = 0;\n  tmp2 -= XCL_TYPE_BIT_LEN;\n  }\n\nif (dst[0] < XCL_CHAR_LIST_LOW_16_START) dst += 2;\nPCRE2_ASSERT((uint16_t*)dst <= next_char);\n\ncranges->char_lists_size =\n  (size_t)((uint8_t*)(buffer + total_size) - (uint8_t*)next_char);\ncranges->char_lists_start = (size_t)((uint8_t*)next_char - (uint8_t*)buffer);\ncranges->range_list_size = (uint16_t)(dst - buffer);\nreturn cranges;\n}\n\n#endif /* SUPPORT_WIDE_CHARS */\n\n#ifdef SUPPORT_UNICODE\n\nvoid PRIV(update_classbits)(uint32_t ptype, uint32_t pdata, BOOL negated,\n  uint8_t *classbits)\n{\n/* Update PRIV(xclass) when this function is changed. */\nint c, chartype;\nconst ucd_record *prop;\nuint32_t gentype;\nBOOL set_bit;\n\nif (ptype == PT_ANY)\n  {\n  if (!negated) memset(classbits, 0xff, 32);\n  return;\n  }\n\nfor (c = 0; c < 256; c++)\n  {\n  prop = GET_UCD(c);\n  set_bit = FALSE;\n  (void)set_bit;\n\n  switch (ptype)\n    {\n    case PT_LAMP:\n    chartype = prop->chartype;\n    set_bit = (chartype == ucp_Lu || chartype == ucp_Ll || chartype == ucp_Lt);\n    break;\n\n    case PT_GC:\n    set_bit = (PRIV(ucp_gentype)[prop->chartype] == pdata);\n    break;\n\n    case PT_PC:\n    set_bit = (prop->chartype == pdata);\n    break;\n\n    case PT_SC:\n    set_bit = (prop->script == pdata);\n    break;\n\n    case PT_SCX:\n    set_bit = (prop->script == pdata ||\n      MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), pdata) != 0);\n    break;\n\n    case PT_ALNUM:\n    gentype = PRIV(ucp_gentype)[prop->chartype];\n    set_bit = (gentype == ucp_L || gentype == ucp_N);\n    break;\n\n    case PT_SPACE:    /* Perl space */\n    case PT_PXSPACE:  /* POSIX space */\n    switch(c)\n      {\n      HSPACE_BYTE_CASES:\n      VSPACE_BYTE_CASES:\n      set_bit = TRUE;\n      break;\n\n      default:\n      set_bit = (PRIV(ucp_gentype)[prop->chartype] == ucp_Z);\n      break;\n      }\n    break;\n\n    case PT_WORD:\n    chartype = prop->chartype;\n    gentype = PRIV(ucp_gentype)[chartype];\n    set_bit = (gentype == ucp_L || gentype == ucp_N ||\n               chartype == ucp_Mn || chartype == ucp_Pc);\n    break;\n\n    case PT_UCNC:\n    set_bit = (c == CHAR_DOLLAR_SIGN || c == CHAR_COMMERCIAL_AT ||\n               c == CHAR_GRAVE_ACCENT || c >= 0xa0);\n    break;\n\n    case PT_BIDICL:\n    set_bit = (UCD_BIDICLASS_PROP(prop) == pdata);\n    break;\n\n    case PT_BOOL:\n    set_bit = MAPBIT(PRIV(ucd_boolprop_sets) +\n                     UCD_BPROPS_PROP(prop), pdata) != 0;\n    break;\n\n    case PT_PXGRAPH:\n    chartype = prop->chartype;\n    gentype = PRIV(ucp_gentype)[chartype];\n    set_bit = (gentype != ucp_Z && (gentype != ucp_C || chartype == ucp_Cf));\n    break;\n\n    case PT_PXPRINT:\n    chartype = prop->chartype;\n    set_bit = (chartype != ucp_Zl && chartype != ucp_Zp &&\n       (PRIV(ucp_gentype)[chartype] != ucp_C || chartype == ucp_Cf));\n    break;\n\n    case PT_PXPUNCT:\n    gentype = PRIV(ucp_gentype)[prop->chartype];\n    set_bit = (gentype == ucp_P || (c < 128 && gentype == ucp_S));\n    break;\n\n    default:\n    PCRE2_ASSERT(ptype == PT_PXXDIGIT);\n    set_bit = (c >= CHAR_0 && c <= CHAR_9) ||\n              (c >= CHAR_A && c <= CHAR_F) ||\n              (c >= CHAR_a && c <= CHAR_f);\n    break;\n    }\n\n  if (negated) set_bit = !set_bit;\n  if (set_bit) *classbits |= (uint8_t)(1 << (c & 0x7));\n  if ((c & 0x7) == 0x7) classbits++;\n  }\n}\n\n#endif /* SUPPORT_UNICODE */\n\n\n\n#ifdef SUPPORT_WIDE_CHARS\n\n/*************************************************\n*           XClass related properties            *\n*************************************************/\n\n/* XClass needs to be generated. */\n#define XCLASS_REQUIRED 0x1\n/* XClass has 8 bit character. */\n#define XCLASS_HAS_8BIT_CHARS 0x2\n/* XClass has properties. */\n#define XCLASS_HAS_PROPS 0x4\n/* XClass has character lists. */\n#define XCLASS_HAS_CHAR_LISTS 0x8\n/* XClass matches to all >= 256 characters. */\n#define XCLASS_HIGH_ANY 0x10\n\n#endif\n\n\n/*************************************************\n*   Internal entry point for add range to class  *\n*************************************************/\n\n/* This function sets the overall range for characters < 256.\nIt also handles non-utf case folding.\n\nArguments:\n  options       the options bits\n  xoptions      the extra options bits\n  cb            compile data\n  start         start of range character\n  end           end of range character\n\nReturns:        cb->classbits is updated\n*/\n\nstatic void\nadd_to_class(uint32_t options, uint32_t xoptions, compile_block *cb,\n  uint32_t start, uint32_t end)\n{\nuint8_t *classbits = cb->classbits.classbits;\nuint32_t c, byte_start, byte_end;\nuint32_t classbits_end = (end <= 0xff ? end : 0xff);\n\n#ifndef SUPPORT_UNICODE\n(void)xoptions; /* Avoid compiler warning. */\n#endif\n\n/* If caseless matching is required, scan the range and process alternate\ncases. In Unicode, there are 8-bit characters that have alternate cases that\nare greater than 255 and vice-versa (though these may be ignored if caseless\nrestriction is in force). Sometimes we can just extend the original range. */\n\nif ((options & PCRE2_CASELESS) != 0)\n  {\n#ifdef SUPPORT_UNICODE\n  /* UTF mode. This branch is taken if we don't support wide characters (e.g.\n  8-bit library, without UTF), but we do treat those characters as Unicode\n  (if UCP flag is set). In this case, we only need to expand the character class\n  set to include the case pairs which are in the 0-255 codepoint range. */\n  if ((options & (PCRE2_UTF|PCRE2_UCP)) != 0)\n    {\n      BOOL turkish_i = (xoptions & (PCRE2_EXTRA_TURKISH_CASING|PCRE2_EXTRA_CASELESS_RESTRICT)) ==\n        PCRE2_EXTRA_TURKISH_CASING;\n      if (start < 128)\n        {\n        uint32_t lo_end = (classbits_end < 127 ? classbits_end : 127);\n        for (c = start; c <= lo_end; c++)\n          {\n          if (turkish_i && UCD_ANY_I(c)) continue;\n          SETBIT(classbits, cb->fcc[c]);\n          }\n        }\n      if (classbits_end >= 128)\n        {\n        uint32_t hi_start = (start > 128 ? start : 128);\n        for (c = hi_start; c <= classbits_end; c++)\n          {\n          uint32_t co = UCD_OTHERCASE(c);\n          if (co <= 0xff) SETBIT(classbits, co);\n          }\n        }\n    }\n\n  else\n#endif  /* SUPPORT_UNICODE */\n\n  /* Not UTF mode */\n    {\n    for (c = start; c <= classbits_end; c++)\n      SETBIT(classbits, cb->fcc[c]);\n    }\n  }\n\n/* Use the bitmap for characters < 256. Otherwise use extra data. */\n\nbyte_start = (start + 7) >> 3;\nbyte_end = (classbits_end + 1) >> 3;\n\nif (byte_start >= byte_end)\n  {\n  for (c = start; c <= classbits_end; c++)\n    /* Regardless of start, c will always be <= 255. */\n    SETBIT(classbits, c);\n  return;\n  }\n\nfor (c = byte_start; c < byte_end; c++)\n  classbits[c] = 0xff;\n\nbyte_start <<= 3;\nbyte_end <<= 3;\n\nfor (c = start; c < byte_start; c++)\n  SETBIT(classbits, c);\n\nfor (c = byte_end; c <= classbits_end; c++)\n  SETBIT(classbits, c);\n}\n\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n/*************************************************\n*   Internal entry point for add list to class   *\n*************************************************/\n\n/* This function is used for adding a list of horizontal or vertical whitespace\ncharacters to a class. The list must be in order so that ranges of characters\ncan be detected and handled appropriately. This function sets the overall range\nso that the internal functions can try to avoid duplication when handling\ncase-independence.\n\nArguments:\n  options       the options bits\n  xoptions      the extra options bits\n  cb            contains pointers to tables etc.\n  p             points to row of 32-bit values, terminated by NOTACHAR\n\nReturns:        cb->classbits is updated\n*/\n\nstatic void\nadd_list_to_class(uint32_t options, uint32_t xoptions, compile_block *cb,\n  const uint32_t *p)\n{\nwhile (p[0] < 256)\n  {\n  unsigned int n = 0;\n\n  while(p[n+1] == p[0] + n + 1) n++;\n  add_to_class(options, xoptions, cb, p[0], p[n]);\n\n  p += n + 1;\n  }\n}\n\n\n\n/*************************************************\n*    Add characters not in a list to a class     *\n*************************************************/\n\n/* This function is used for adding the complement of a list of horizontal or\nvertical whitespace to a class. The list must be in order.\n\nArguments:\n  options       the options bits\n  xoptions      the extra options bits\n  cb            contains pointers to tables etc.\n  p             points to row of 32-bit values, terminated by NOTACHAR\n\nReturns:        cb->classbits is updated\n*/\n\nstatic void\nadd_not_list_to_class(uint32_t options, uint32_t xoptions, compile_block *cb,\n  const uint32_t *p)\n{\nif (p[0] > 0)\n  add_to_class(options, xoptions, cb, 0, p[0] - 1);\nwhile (p[0] < 256)\n  {\n  while (p[1] == p[0] + 1) p++;\n  add_to_class(options, xoptions, cb, p[0] + 1, (p[1] > 255) ? 255 : p[1] - 1);\n  p++;\n  }\n}\n#endif /* PCRE2_CODE_UNIT_WIDTH == 8 */\n\n\n\n/*************************************************\n*  Main entry-point to compile a character class *\n*************************************************/\n\n/* This function consumes a \"leaf\", which is a set of characters that will\nbecome a single OP_CLASS OP_NCLASS, OP_XCLASS, or OP_ALLANY. */\n\nuint32_t *\nPRIV(compile_class_not_nested)(uint32_t options, uint32_t xoptions,\n  uint32_t *start_ptr, PCRE2_UCHAR **pcode, BOOL negate_class, BOOL* has_bitmap,\n  int *errorcodeptr, compile_block *cb, PCRE2_SIZE *lengthptr)\n{\nuint32_t *pptr = start_ptr;\nPCRE2_UCHAR *code = *pcode;\nBOOL should_flip_negation;\nconst uint8_t *cbits = cb->cbits;\n/* Some functions such as add_to_class() or eclass processing\nexpects that the bitset is stored in cb->classbits.classbits. */\nuint8_t *const classbits = cb->classbits.classbits;\n\n#ifdef SUPPORT_UNICODE\nBOOL utf = (options & PCRE2_UTF) != 0;\n#else  /* No Unicode support */\nBOOL utf = FALSE;\n#endif\n\n/* Helper variables for OP_XCLASS opcode (for characters > 255). */\n\n#ifdef SUPPORT_WIDE_CHARS\nuint32_t xclass_props;\nPCRE2_UCHAR *class_uchardata;\nclass_ranges* cranges;\n#else\n(void)has_bitmap;    /* Avoid compiler warning. */\n(void)errorcodeptr;  /* Avoid compiler warning. */\n(void)lengthptr;     /* Avoid compiler warning. */\n#endif\n\n/* If an XClass contains a negative special such as \\S, we need to flip the\nnegation flag at the end, so that support for characters > 255 works correctly\n(they are all included in the class). An XClass may need to insert specific\nmatching or non-matching code for wide characters.\n*/\n\nshould_flip_negation = FALSE;\n\n/* XClass will be used when characters > 255 might match. */\n\n#ifdef SUPPORT_WIDE_CHARS\nxclass_props = 0;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\ncranges = NULL;\n\nif (utf)\n#endif\n  {\n  if (lengthptr != NULL)\n    {\n    cranges = compile_optimize_class(pptr, options, xoptions, cb);\n\n    if (cranges == NULL)\n      {\n      *errorcodeptr = ERR21;\n      return NULL;\n      }\n\n    /* Caching the pre-processed character ranges. */\n    if (cb->last_data != NULL)\n      cb->last_data->next = &cranges->header;\n    else\n      cb->first_data = &cranges->header;\n\n    cb->last_data = &cranges->header;\n    }\n  else\n    {\n    /* Reuse the pre-processed character ranges. */\n    cranges = (class_ranges*)cb->first_data;\n    PCRE2_ASSERT(cranges != NULL && cranges->header.type == CDATA_CRANGE);\n    cb->first_data = cranges->header.next;\n    }\n\n  if (cranges->range_list_size > 0)\n    {\n    const uint32_t *ranges = (const uint32_t*)(cranges + 1);\n\n    if (ranges[0] <= 255)\n      xclass_props |= XCLASS_HAS_8BIT_CHARS;\n\n    if (ranges[cranges->range_list_size - 1] == GET_MAX_CHAR_VALUE(utf) &&\n        ranges[cranges->range_list_size - 2] <= 256)\n      xclass_props |= XCLASS_HIGH_ANY;\n    }\n  }\n\nclass_uchardata = code + LINK_SIZE + 2;   /* For XCLASS items */\n#endif /* SUPPORT_WIDE_CHARS */\n\n/* Initialize the 256-bit (32-byte) bit map to all zeros. We build the map\nin a temporary bit of memory, in case the class contains fewer than two\n8-bit characters because in that case the compiled code doesn't use the bit\nmap. */\n\nmemset(classbits, 0, 32);\n\n/* Process items until end_ptr is reached. */\n\nwhile (TRUE)\n  {\n  uint32_t meta = *(pptr++);\n  BOOL local_negate;\n  int posix_class;\n  int taboffset, tabopt;\n  class_bits_storage pbits;\n  uint32_t escape, c;\n\n  /* Handle POSIX classes such as [:alpha:] etc. */\n  switch (META_CODE(meta))\n    {\n    case META_POSIX:\n    case META_POSIX_NEG:\n\n    local_negate = (meta == META_POSIX_NEG);\n    posix_class = *(pptr++);\n\n    if (local_negate) should_flip_negation = TRUE;  /* Note negative special */\n\n    /* If matching is caseless, upper and lower are converted to alpha.\n    This relies on the fact that the class table starts with alpha,\n    lower, upper as the first 3 entries. */\n\n    if ((options & PCRE2_CASELESS) != 0 && posix_class <= 2)\n      posix_class = 0;\n\n    /* When PCRE2_UCP is set, some of the POSIX classes are converted to\n    different escape sequences that use Unicode properties \\p or \\P.\n    Others that are not available via \\p or \\P have to generate\n    XCL_PROP/XCL_NOTPROP directly, which is done here. */\n\n#ifdef SUPPORT_UNICODE\n    /* TODO This entire block of code here appears to be unreachable!? I simply\n    can't see how it can be hit, given that the frontend parser doesn't emit\n    META_POSIX for GRAPH/PRINT/PUNCT when UCP is set. */\n    if ((options & PCRE2_UCP) != 0 &&\n        (xoptions & PCRE2_EXTRA_ASCII_POSIX) == 0)\n      {\n      uint32_t ptype;\n\n      switch(posix_class)\n        {\n        case PC_GRAPH:\n        case PC_PRINT:\n        case PC_PUNCT:\n        ptype = (posix_class == PC_GRAPH)? PT_PXGRAPH :\n                (posix_class == PC_PRINT)? PT_PXPRINT : PT_PXPUNCT;\n\n        PRIV(update_classbits)(ptype, 0, local_negate, classbits);\n\n        if ((xclass_props & XCLASS_HIGH_ANY) == 0)\n          {\n          if (lengthptr != NULL)\n            *lengthptr += 3;\n          else\n            {\n            *class_uchardata++ = local_negate? XCL_NOTPROP : XCL_PROP;\n            *class_uchardata++ = (PCRE2_UCHAR)ptype;\n            *class_uchardata++ = 0;\n            }\n          xclass_props |= XCLASS_REQUIRED | XCLASS_HAS_PROPS;\n          }\n        continue;\n\n        /* For the other POSIX classes (ex: ascii) we are going to\n        fall through to the non-UCP case and build a bit map for\n        characters with code points less than 256. However, if we are in\n        a negated POSIX class, characters with code points greater than\n        255 must either all match or all not match, depending on whether\n        the whole class is not or is negated. For example, for\n        [[:^ascii:]... they must all match, whereas for [^[:^ascii:]...\n        they must not.\n\n        In the special case where there are no xclass items, this is\n        automatically handled by the use of OP_CLASS or OP_NCLASS, but an\n        explicit range is needed for OP_XCLASS. Setting a flag here\n        causes the range to be generated later when it is known that\n        OP_XCLASS is required. In the 8-bit library this is relevant only in\n        utf mode, since no wide characters can exist otherwise. */\n\n        default:\n        break;\n        }\n      }\n#endif  /* SUPPORT_UNICODE */\n\n    /* In the non-UCP case, or when UCP makes no difference, we build the\n    bit map for the POSIX class in a chunk of local store because we may\n    be adding and subtracting from it, and we don't want to subtract bits\n    that may be in the main map already. At the end we or the result into\n    the bit map that is being built. */\n\n    posix_class *= 3;\n\n    /* Copy in the first table (always present) */\n\n    memcpy(pbits.classbits, cbits + PRIV(posix_class_maps)[posix_class], 32);\n\n    /* If there is a second table, add or remove it as required. */\n\n    taboffset = PRIV(posix_class_maps)[posix_class + 1];\n    tabopt = PRIV(posix_class_maps)[posix_class + 2];\n\n    if (taboffset >= 0)\n      {\n      if (tabopt >= 0)\n        for (int i = 0; i < 32; i++)\n          pbits.classbits[i] |= cbits[i + taboffset];\n      else\n        for (int i = 0; i < 32; i++)\n          pbits.classbits[i] &= (uint8_t)(~cbits[i + taboffset]);\n      }\n\n    /* Now see if we need to remove any special characters. An option\n    value of 1 removes vertical space and 2 removes underscore. */\n\n    if (tabopt < 0) tabopt = -tabopt;\n#ifdef EBCDIC\n      {\n      uint8_t posix_vertical[4] = { CHAR_LF, CHAR_VT, CHAR_FF, CHAR_CR };\n      uint8_t posix_underscore = CHAR_UNDERSCORE;\n      uint8_t *chars = NULL;\n      int n = 0;\n\n      if (tabopt == 1) { chars = posix_vertical; n = 4; }\n      else if (tabopt == 2) { chars = &posix_underscore; n = 1; }\n\n      for (; n > 0; ++chars, --n)\n        pbits.classbits[*chars/8] &= ~(1u << (*chars&7));\n      }\n#else\n    if (tabopt == 1) pbits.classbits[1] &= ~0x3c;\n    else if (tabopt == 2) pbits.classbits[11] &= 0x7f;\n#endif\n\n    /* Add the POSIX table or its complement into the main table that is\n    being built and we are done. */\n\n      {\n      uint32_t *classwords = cb->classbits.classwords;\n\n      if (local_negate)\n        for (int i = 0; i < 8; i++)\n          classwords[i] |= (uint32_t)(~pbits.classwords[i]);\n      else\n        for (int i = 0; i < 8; i++)\n          classwords[i] |= pbits.classwords[i];\n      }\n\n#ifdef SUPPORT_WIDE_CHARS\n    /* Every class contains at least one < 256 character. */\n    xclass_props |= XCLASS_HAS_8BIT_CHARS;\n#endif\n    continue;               /* End of POSIX handling */\n\n    /* Other than POSIX classes, the only items we should encounter are\n    \\d-type escapes and literal characters (possibly as ranges). */\n    case META_BIGVALUE:\n    meta = *(pptr++);\n    break;\n\n    case META_ESCAPE:\n    escape = META_DATA(meta);\n\n    switch(escape)\n      {\n      case ESC_d:\n      for (int i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_digit];\n      break;\n\n      case ESC_D:\n      should_flip_negation = TRUE;\n      for (int i = 0; i < 32; i++)\n        classbits[i] |= (uint8_t)(~cbits[i+cbit_digit]);\n      break;\n\n      case ESC_w:\n      for (int i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_word];\n      break;\n\n      case ESC_W:\n      should_flip_negation = TRUE;\n      for (int i = 0; i < 32; i++)\n        classbits[i] |= (uint8_t)(~cbits[i+cbit_word]);\n      break;\n\n      /* Perl 5.004 onwards omitted VT from \\s, but restored it at Perl\n      5.18. Before PCRE 8.34, we had to preserve the VT bit if it was\n      previously set by something earlier in the character class.\n      Luckily, the value of CHAR_VT is 0x0b in both ASCII and EBCDIC, so\n      we could just adjust the appropriate bit. From PCRE 8.34 we no\n      longer treat \\s and \\S specially. */\n\n      case ESC_s:\n      for (int i = 0; i < 32; i++) classbits[i] |= cbits[i+cbit_space];\n      break;\n\n      case ESC_S:\n      should_flip_negation = TRUE;\n      for (int i = 0; i < 32; i++)\n        classbits[i] |= (uint8_t)(~cbits[i+cbit_space]);\n      break;\n\n      /* When adding the horizontal or vertical space lists to a class, or\n      their complements, disable PCRE2_CASELESS, because it justs wastes\n      time, and in the \"not-x\" UTF cases can create unwanted duplicates in\n      the XCLASS list (provoked by characters that have more than one other\n      case and by both cases being in the same \"not-x\" sublist). */\n\n      case ESC_h:\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#ifdef SUPPORT_UNICODE\n      if (cranges != NULL) break;\n#endif\n      add_list_to_class(options & ~PCRE2_CASELESS, xoptions,\n        cb, PRIV(hspace_list));\n#else\n      PCRE2_ASSERT(cranges != NULL);\n#endif\n      break;\n\n      case ESC_H:\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#ifdef SUPPORT_UNICODE\n      if (cranges != NULL) break;\n#endif\n      add_not_list_to_class(options & ~PCRE2_CASELESS, xoptions,\n        cb, PRIV(hspace_list));\n#else\n      PCRE2_ASSERT(cranges != NULL);\n#endif\n      break;\n\n      case ESC_v:\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#ifdef SUPPORT_UNICODE\n      if (cranges != NULL) break;\n#endif\n      add_list_to_class(options & ~PCRE2_CASELESS, xoptions,\n        cb, PRIV(vspace_list));\n#else\n      PCRE2_ASSERT(cranges != NULL);\n#endif\n      break;\n\n      case ESC_V:\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#ifdef SUPPORT_UNICODE\n      if (cranges != NULL) break;\n#endif\n      add_not_list_to_class(options & ~PCRE2_CASELESS, xoptions,\n        cb, PRIV(vspace_list));\n#else\n      PCRE2_ASSERT(cranges != NULL);\n#endif\n      break;\n\n      /* If Unicode is not supported, \\P and \\p are not allowed and are\n      faulted at parse time, so will never appear here. */\n\n#ifdef SUPPORT_UNICODE\n      case ESC_p:\n      case ESC_P:\n        {\n        uint32_t ptype = *pptr >> 16;\n        uint32_t pdata = *(pptr++) & 0xffff;\n\n        /* The \"Any\" is processed by PRIV(update_classbits)(). */\n        if (ptype == PT_ANY)\n          {\n#if PCRE2_CODE_UNIT_WIDTH == 8\n          if (!utf && escape == ESC_p) memset(classbits, 0xff, 32);\n#endif\n          continue;\n          }\n\n        PRIV(update_classbits)(ptype, pdata, (escape == ESC_P), classbits);\n\n        if ((xclass_props & XCLASS_HIGH_ANY) == 0)\n          {\n          if (lengthptr != NULL)\n            *lengthptr += 3;\n          else\n            {\n            *class_uchardata++ = (escape == ESC_p)? XCL_PROP : XCL_NOTPROP;\n            *class_uchardata++ = ptype;\n            *class_uchardata++ = pdata;\n            }\n          xclass_props |= XCLASS_REQUIRED | XCLASS_HAS_PROPS;\n          }\n        }\n      continue;\n#endif\n      }\n\n#ifdef SUPPORT_WIDE_CHARS\n    /* Every non-property class contains at least one < 256 character. */\n    xclass_props |= XCLASS_HAS_8BIT_CHARS;\n#endif\n    /* End handling \\d-type escapes */\n    continue;\n\n    CLASS_END_CASES(meta)\n    /* Literals. */\n    if (meta < META_END) break;\n    /* Non-literals: end of class contents. */\n    goto END_PROCESSING;\n    }\n\n  /* A literal character may be followed by a range meta. At parse time\n  there are checks for out-of-order characters, for ranges where the two\n  characters are equal, and for hyphens that cannot indicate a range. At\n  this point, therefore, no checking is needed. */\n\n  c = meta;\n\n  /* Remember if \\r or \\n were explicitly used */\n\n  if (c == CHAR_CR || c == CHAR_NL) cb->external_flags |= PCRE2_HASCRORLF;\n\n  /* Process a character range */\n\n  if (*pptr == META_RANGE_LITERAL || *pptr == META_RANGE_ESCAPED)\n    {\n    uint32_t d;\n\n#ifdef EBCDIC\n    BOOL range_is_literal = (*pptr == META_RANGE_LITERAL);\n#endif\n    ++pptr;\n    d = *(pptr++);\n    if (d == META_BIGVALUE) d = *(pptr++);\n\n    /* Remember an explicit \\r or \\n, and add the range to the class. */\n\n    if (d == CHAR_CR || d == CHAR_NL) cb->external_flags |= PCRE2_HASCRORLF;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#ifdef SUPPORT_UNICODE\n    if (cranges != NULL) continue;\n    xclass_props |= XCLASS_HAS_8BIT_CHARS;\n#endif\n\n    /* In an EBCDIC environment, Perl treats alphabetic ranges specially\n    because there are holes in the encoding, and simply using the range\n    A-Z (for example) would include the characters in the holes. This\n    applies only to literal ranges; [\\xC1-\\xE9] is different to [A-Z]. */\n\n#ifdef EBCDIC\n    if (range_is_literal &&\n         (cb->ctypes[c] & ctype_letter) != 0 &&\n         (cb->ctypes[d] & ctype_letter) != 0 &&\n         (c <= CHAR_z) == (d <= CHAR_z))\n      {\n      uint32_t uc = (d <= CHAR_z)? 0 : 64;\n      uint32_t C = c - uc;\n      uint32_t D = d - uc;\n\n      if (C <= CHAR_i)\n        {\n        add_to_class(options, xoptions, cb, C + uc,\n          ((D < CHAR_i)? D : CHAR_i) + uc);\n        C = CHAR_j;\n        }\n\n      if (C <= D && C <= CHAR_r)\n        {\n        add_to_class(options, xoptions, cb, C + uc,\n          ((D < CHAR_r)? D : CHAR_r) + uc);\n        C = CHAR_s;\n        }\n\n      if (C <= D)\n        add_to_class(options, xoptions, cb, C + uc, D + uc);\n      }\n    else\n#endif\n    /* Not an EBCDIC special range */\n\n    add_to_class(options, xoptions, cb, c, d);\n#else\n    PCRE2_ASSERT(cranges != NULL);\n#endif\n    continue;\n    }  /* End of range handling */\n\n  /* Character ranges are ignored when class_ranges is present. */\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#ifdef SUPPORT_UNICODE\n  if (cranges != NULL) continue;\n  xclass_props |= XCLASS_HAS_8BIT_CHARS;\n#endif\n  /* Handle a single character. */\n\n  add_to_class(options, xoptions, cb, meta, meta);\n#else\n  PCRE2_ASSERT(cranges != NULL);\n#endif\n  }   /* End of main class-processing loop */\n\nEND_PROCESSING:\n\n#ifdef SUPPORT_WIDE_CHARS\nPCRE2_ASSERT((xclass_props & XCLASS_HAS_PROPS) == 0 ||\n             (xclass_props & XCLASS_HIGH_ANY) == 0);\n\nif (cranges != NULL)\n  {\n  uint32_t *range = (uint32_t*)(cranges + 1);\n  uint32_t *end = range + cranges->range_list_size;\n\n  while (range < end && range[0] < 256)\n    {\n    PCRE2_ASSERT((xclass_props & XCLASS_HAS_8BIT_CHARS) != 0);\n    /* Add range to bitset. If we are in UTF or UCP mode, then clear the\n    caseless bit, because the cranges handle caselessness (only) in this\n    condition; see the condition for PARSE_CLASS_CASELESS_UTF in\n    compile_optimize_class(). */\n    add_to_class(((options & (PCRE2_UTF|PCRE2_UCP)) != 0)?\n        (options & ~PCRE2_CASELESS) : options, xoptions, cb, range[0], range[1]);\n\n    if (range[1] > 255) break;\n    range += 2;\n    }\n\n  if (cranges->char_lists_size > 0)\n    {\n    /* The cranges structure is still used and freed later. */\n    PCRE2_ASSERT((xclass_props & XCLASS_HIGH_ANY) == 0);\n    xclass_props |= XCLASS_REQUIRED | XCLASS_HAS_CHAR_LISTS;\n    }\n  else\n    {\n    if ((xclass_props & XCLASS_HIGH_ANY) != 0)\n      {\n      PCRE2_ASSERT(range + 2 == end && range[0] <= 256 &&\n        range[1] >= GET_MAX_CHAR_VALUE(utf));\n      should_flip_negation = TRUE;\n      range = end;\n      }\n\n    while (range < end)\n      {\n      uint32_t range_start = range[0];\n      uint32_t range_end = range[1];\n\n      range += 2;\n      xclass_props |= XCLASS_REQUIRED;\n\n      if (range_start < 256) range_start = 256;\n\n      if (lengthptr != NULL)\n        {\n#ifdef SUPPORT_UNICODE\n        if (utf)\n          {\n          *lengthptr += 1;\n\n          if (range_start < range_end)\n            *lengthptr += PRIV(ord2utf)(range_start, class_uchardata);\n\n          *lengthptr += PRIV(ord2utf)(range_end, class_uchardata);\n          continue;\n          }\n#endif  /* SUPPORT_UNICODE */\n\n        *lengthptr += range_start < range_end ? 3 : 2;\n        continue;\n        }\n\n#ifdef SUPPORT_UNICODE\n      if (utf)\n        {\n        if (range_start < range_end)\n          {\n          *class_uchardata++ = XCL_RANGE;\n          class_uchardata += PRIV(ord2utf)(range_start, class_uchardata);\n          }\n        else\n          *class_uchardata++ = XCL_SINGLE;\n\n        class_uchardata += PRIV(ord2utf)(range_end, class_uchardata);\n        continue;\n        }\n#endif  /* SUPPORT_UNICODE */\n\n      /* Without UTF support, character values are constrained\n      by the bit length, and can only be > 256 for 16-bit and\n      32-bit libraries. */\n#if PCRE2_CODE_UNIT_WIDTH != 8\n      if (range_start < range_end)\n        {\n        *class_uchardata++ = XCL_RANGE;\n        *class_uchardata++ = range_start;\n        }\n      else\n        *class_uchardata++ = XCL_SINGLE;\n\n      *class_uchardata++ = range_end;\n#endif  /* PCRE2_CODE_UNIT_WIDTH == 8 */\n      }\n\n    if (lengthptr == NULL)\n      cb->cx->memctl.free(cranges, cb->cx->memctl.memory_data);\n    }\n  }\n#endif /* SUPPORT_WIDE_CHARS */\n\n/* If there are characters with values > 255, or Unicode property settings\n(\\p or \\P), we have to compile an extended class, with its own opcode,\nunless there were no property settings and there was a negated special such\nas \\S in the class, and PCRE2_UCP is not set, because in that case all\ncharacters > 255 are in or not in the class, so any that were explicitly\ngiven as well can be ignored.\n\nIn the UCP case, if certain negated POSIX classes (ex: [:^ascii:]) were\nwere present in a class, we either have to match or not match all wide\ncharacters (depending on whether the whole class is or is not negated).\nThis requirement is indicated by match_all_or_no_wide_chars being true.\nWe do this by including an explicit range, which works in both cases.\nThis applies only in UTF and 16-bit and 32-bit non-UTF modes, since there\ncannot be any wide characters in 8-bit non-UTF mode.\n\nWhen there *are* properties in a positive UTF-8 or any 16-bit or 32_bit\nclass where \\S etc is present without PCRE2_UCP, causing an extended class\nto be compiled, we make sure that all characters > 255 are included by\nforcing match_all_or_no_wide_chars to be true.\n\nIf, when generating an xclass, there are no characters < 256, we can omit\nthe bitmap in the actual compiled code. */\n\n#ifdef SUPPORT_WIDE_CHARS  /* Defined for 16/32 bits, or 8-bit with Unicode */\nif ((xclass_props & XCLASS_REQUIRED) != 0)\n  {\n  PCRE2_UCHAR *previous = code;\n\n  if ((xclass_props & XCLASS_HAS_CHAR_LISTS) == 0)\n    *class_uchardata++ = XCL_END;    /* Marks the end of extra data */\n  *code++ = OP_XCLASS;\n  code += LINK_SIZE;\n  *code = negate_class? XCL_NOT:0;\n  if ((xclass_props & XCLASS_HAS_PROPS) != 0) *code |= XCL_HASPROP;\n\n  /* If the map is required, move up the extra data to make room for it;\n  otherwise just move the code pointer to the end of the extra data. */\n\n  if ((xclass_props & XCLASS_HAS_8BIT_CHARS) != 0 || has_bitmap != NULL)\n    {\n    if (negate_class)\n      {\n      uint32_t *classwords = cb->classbits.classwords;\n      for (int i = 0; i < 8; i++) classwords[i] = ~classwords[i];\n      }\n\n    if (has_bitmap == NULL)\n      {\n      *code++ |= XCL_MAP;\n      (void)memmove(code + (32 / sizeof(PCRE2_UCHAR)), code,\n        CU2BYTES(class_uchardata - code));\n      memcpy(code, classbits, 32);\n      code = class_uchardata + (32 / sizeof(PCRE2_UCHAR));\n      }\n    else\n      {\n      code = class_uchardata;\n      if ((xclass_props & XCLASS_HAS_8BIT_CHARS) != 0)\n        *has_bitmap = TRUE;\n      }\n    }\n  else code = class_uchardata;\n\n  if ((xclass_props & XCLASS_HAS_CHAR_LISTS) != 0)\n    {\n    /* Char lists size is an even number, because all items are 16 or 32\n    bit values. The character list data is always aligned to 32 bits. */\n    size_t char_lists_size = cranges->char_lists_size;\n    PCRE2_ASSERT((char_lists_size & 0x1) == 0 &&\n                 (cb->char_lists_size & 0x3) == 0);\n\n    if (lengthptr != NULL)\n      {\n      char_lists_size = CLIST_ALIGN_TO(char_lists_size, sizeof(uint32_t));\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      *lengthptr += 2 + LINK_SIZE;\n#else\n      *lengthptr += 1 + LINK_SIZE;\n#endif\n\n      cb->char_lists_size += char_lists_size;\n\n      char_lists_size /= sizeof(PCRE2_UCHAR);\n\n      /* Storage space for character lists is included\n      in the maximum pattern size. */\n      if (*lengthptr > MAX_PATTERN_SIZE ||\n          MAX_PATTERN_SIZE - *lengthptr < char_lists_size)\n        {\n        *errorcodeptr = ERR20;   /* Pattern is too large */\n        return NULL;\n        }\n      }\n    else\n      {\n      uint8_t *data;\n\n      PCRE2_ASSERT(cranges->char_lists_types <= XCL_TYPE_MASK);\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      /* Encode as high / low bytes. */\n      code[0] = (uint8_t)(XCL_LIST |\n        (cranges->char_lists_types >> 8));\n      code[1] = (uint8_t)cranges->char_lists_types;\n      code += 2;\n#else\n      *code++ = (PCRE2_UCHAR)(XCL_LIST | cranges->char_lists_types);\n#endif\n\n      /* Character lists are stored in backwards direction from\n      byte code start. The non-dfa/dfa matchers can access these\n      lists using the byte code start stored in match blocks.\n      Each list is aligned to 32 bit with an optional unused\n      16 bit value at the beginning of the character list. */\n\n      cb->char_lists_size += char_lists_size;\n      data = (uint8_t*)cb->start_code - cb->char_lists_size;\n\n      memcpy(data, (uint8_t*)(cranges + 1) + cranges->char_lists_start,\n        char_lists_size);\n\n      /* Since character lists total size is less than MAX_PATTERN_SIZE,\n      their starting offset fits into a value which size is LINK_SIZE. */\n\n      char_lists_size = cb->char_lists_size;\n      PUT(code, 0, (uint32_t)(char_lists_size >> 1));\n      code += LINK_SIZE;\n\n      /* If we added padding to align the list, initialize the bytes to\n      defined values, so the library is valgrind-clean. It could also\n      be a security concern for clients calling into PCRE2 via bindings\n      from a memory-safe language, if pcre2_serialize_encode() exposes\n      uninitialized memory that may contain sensitive information. */\n\n      if ((char_lists_size & 0x2) != 0)\n        ((uint16_t*)data)[-1] = 0xdead;\n\n      cb->char_lists_size =\n        CLIST_ALIGN_TO(char_lists_size, sizeof(uint32_t));\n\n      cb->cx->memctl.free(cranges, cb->cx->memctl.memory_data);\n      }\n    }\n\n  /* Now fill in the complete length of the item */\n\n  PUT(previous, 1, (int)(code - previous));\n  goto DONE;   /* End of class handling */\n  }\n#endif  /* SUPPORT_WIDE_CHARS */\n\n/* If there are no characters > 255, or they are all to be included or\nexcluded, set the opcode to OP_CLASS or OP_NCLASS, depending on whether the\nwhole class was negated and whether there were negative specials such as \\S\n(non-UCP) in the class. Then copy the 32-byte map into the code vector,\nnegating it if necessary. */\n\nif (negate_class)\n  {\n  uint32_t *classwords = cb->classbits.classwords;\n\n  for (int i = 0; i < 8; i++) classwords[i] = ~classwords[i];\n  }\n\nif ((SELECT_VALUE8(!utf, 0) || negate_class != should_flip_negation) &&\n    cb->classbits.classwords[0] == ~(uint32_t)0)\n  {\n  const uint32_t *classwords = cb->classbits.classwords;\n  int i;\n\n  for (i = 0; i < 8; i++)\n    if (classwords[i] != ~(uint32_t)0) break;\n\n  if (i == 8)\n    {\n    *code++ = OP_ALLANY;\n    goto DONE;   /* End of class handling */\n    }\n  }\n\n*code++ = (negate_class == should_flip_negation) ? OP_CLASS : OP_NCLASS;\nmemcpy(code, classbits, 32);\ncode += 32 / sizeof(PCRE2_UCHAR);\n\nDONE:\n*pcode = code;\nreturn pptr - 1;\n}\n\n\n\n/* ===================================================================*/\n/* Here follows a block of ECLASS-compiling functions. You may well want to\nread them from top to bottom; they are ordered from leafmost (at the top) to\noutermost parser (at the bottom of the file). */\n\n/* This function folds one operand using the negation operator.\nThe new, combined chunk of stack code is written out to *pop_info. */\n\nstatic void\nfold_negation(eclass_op_info *pop_info, PCRE2_SIZE *lengthptr,\n  BOOL preserve_classbits)\n{\n/* If the chunk of stack code is already composed of multiple ops, we won't\ndescend in and try and propagate the negation down the tree. (That would lead\nto O(n^2) compile-time, which could be exploitable with a malicious regex -\nalthough maybe that's not really too much of a worry in a library that offers\nan exponential-time matching function!) */\n\nif (pop_info->op_single_type == 0)\n  {\n  if (lengthptr != NULL)\n    *lengthptr += 1;\n  else\n    pop_info->code_start[pop_info->length] = ECL_NOT;\n  pop_info->length += 1;\n  }\n\n/* Otherwise, it's a nice single-op item, so we can easily fold in the negation\nwithout needing to produce an ECL_NOT. */\n\nelse if (pop_info->op_single_type == ECL_ANY ||\n         pop_info->op_single_type == ECL_NONE)\n  {\n  pop_info->op_single_type = (pop_info->op_single_type == ECL_NONE)?\n      ECL_ANY : ECL_NONE;\n  if (lengthptr == NULL)\n    *(pop_info->code_start) = pop_info->op_single_type;\n  }\nelse\n  {\n  PCRE2_ASSERT(pop_info->op_single_type == ECL_XCLASS &&\n               pop_info->length >= 1 + LINK_SIZE + 1);\n  if (lengthptr == NULL)\n    pop_info->code_start[1 + LINK_SIZE] ^= XCL_NOT;\n  }\n\nif (!preserve_classbits)\n  {\n  for (int i = 0; i < 8; i++)\n    pop_info->bits.classwords[i] = ~pop_info->bits.classwords[i];\n  }\n}\n\n\n\n/* This function folds together two operands using a binary operator.\nThe new, combined chunk of stack code is written out to *lhs_op_info. */\n\nstatic void\nfold_binary(int op, eclass_op_info *lhs_op_info, eclass_op_info *rhs_op_info,\n  PCRE2_SIZE *lengthptr)\n{\nswitch (op)\n  {\n  /* ECL_AND truth table:\n\n     LHS  RHS  RESULT\n     ----------------\n     ANY  *    RHS\n     *    ANY  LHS\n     NONE *    NONE\n     *    NONE NONE\n     X    Y    X & Y\n  */\n\n  case ECL_AND:\n  if (rhs_op_info->op_single_type == ECL_ANY)\n    {\n    /* no-op: drop the RHS */\n    }\n  else if (lhs_op_info->op_single_type == ECL_ANY)\n    {\n    /* no-op: drop the LHS, and memmove the RHS into its place */\n    if (lengthptr == NULL)\n      memmove(lhs_op_info->code_start, rhs_op_info->code_start,\n              CU2BYTES(rhs_op_info->length));\n    lhs_op_info->length = rhs_op_info->length;\n    lhs_op_info->op_single_type = rhs_op_info->op_single_type;\n    }\n  else if (rhs_op_info->op_single_type == ECL_NONE)\n    {\n    /* the result is ECL_NONE: write into the LHS */\n    if (lengthptr == NULL)\n      lhs_op_info->code_start[0] = ECL_NONE;\n    lhs_op_info->length = 1;\n    lhs_op_info->op_single_type = ECL_NONE;\n    }\n  else if (lhs_op_info->op_single_type == ECL_NONE)\n    {\n    /* the result is ECL_NONE: drop the RHS */\n    }\n  else\n    {\n    /* Both of LHS & RHS are either ECL_XCLASS, or compound operations. */\n    if (lengthptr != NULL)\n      *lengthptr += 1;\n    else\n      {\n      PCRE2_ASSERT(rhs_op_info->code_start ==\n          lhs_op_info->code_start + lhs_op_info->length);\n      rhs_op_info->code_start[rhs_op_info->length] = ECL_AND;\n      }\n    lhs_op_info->length += rhs_op_info->length + 1;\n    lhs_op_info->op_single_type = 0;\n    }\n\n  for (int i = 0; i < 8; i++)\n    lhs_op_info->bits.classwords[i] &= rhs_op_info->bits.classwords[i];\n  break;\n\n  /* ECL_OR truth table:\n\n     LHS  RHS  RESULT\n     ----------------\n     ANY  *    ANY\n     *    ANY  ANY\n     NONE *    RHS\n     *    NONE LHS\n     X    Y    X | Y\n  */\n\n  case ECL_OR:\n  if (rhs_op_info->op_single_type == ECL_NONE)\n    {\n    /* no-op: drop the RHS */\n    }\n  else if (lhs_op_info->op_single_type == ECL_NONE)\n    {\n    /* no-op: drop the LHS, and memmove the RHS into its place */\n    if (lengthptr == NULL)\n      memmove(lhs_op_info->code_start, rhs_op_info->code_start,\n              CU2BYTES(rhs_op_info->length));\n    lhs_op_info->length = rhs_op_info->length;\n    lhs_op_info->op_single_type = rhs_op_info->op_single_type;\n    }\n  else if (rhs_op_info->op_single_type == ECL_ANY)\n    {\n    /* the result is ECL_ANY: write into the LHS */\n    if (lengthptr == NULL)\n      lhs_op_info->code_start[0] = ECL_ANY;\n    lhs_op_info->length = 1;\n    lhs_op_info->op_single_type = ECL_ANY;\n    }\n  else if (lhs_op_info->op_single_type == ECL_ANY)\n    {\n    /* the result is ECL_ANY: drop the RHS */\n    }\n  else\n    {\n    /* Both of LHS & RHS are either ECL_XCLASS, or compound operations. */\n    if (lengthptr != NULL)\n      *lengthptr += 1;\n    else\n      {\n      PCRE2_ASSERT(rhs_op_info->code_start ==\n          lhs_op_info->code_start + lhs_op_info->length);\n      rhs_op_info->code_start[rhs_op_info->length] = ECL_OR;\n      }\n    lhs_op_info->length += rhs_op_info->length + 1;\n    lhs_op_info->op_single_type = 0;\n    }\n\n  for (int i = 0; i < 8; i++)\n    lhs_op_info->bits.classwords[i] |= rhs_op_info->bits.classwords[i];\n  break;\n\n  /* ECL_XOR truth table:\n\n     LHS  RHS  RESULT\n     ----------------\n     ANY  *    !RHS\n     *    ANY  !LHS\n     NONE *    RHS\n     *    NONE LHS\n     X    Y    X ^ Y\n  */\n\n  case ECL_XOR:\n  if (rhs_op_info->op_single_type == ECL_NONE)\n    {\n    /* no-op: drop the RHS */\n    }\n  else if (lhs_op_info->op_single_type == ECL_NONE)\n    {\n    /* no-op: drop the LHS, and memmove the RHS into its place */\n    if (lengthptr == NULL)\n      memmove(lhs_op_info->code_start, rhs_op_info->code_start,\n              CU2BYTES(rhs_op_info->length));\n    lhs_op_info->length = rhs_op_info->length;\n    lhs_op_info->op_single_type = rhs_op_info->op_single_type;\n    }\n  else if (rhs_op_info->op_single_type == ECL_ANY)\n    {\n    /* the result is !LHS: fold in the negation, and drop the RHS */\n    /* Preserve the classbits, because we promise to deal with them later. */\n    fold_negation(lhs_op_info, lengthptr, TRUE);\n    }\n  else if (lhs_op_info->op_single_type == ECL_ANY)\n    {\n    /* the result is !RHS: drop the LHS, memmove the RHS into its place, and\n    fold in the negation */\n    if (lengthptr == NULL)\n      memmove(lhs_op_info->code_start, rhs_op_info->code_start,\n              CU2BYTES(rhs_op_info->length));\n    lhs_op_info->length = rhs_op_info->length;\n    lhs_op_info->op_single_type = rhs_op_info->op_single_type;\n\n    /* Preserve the classbits, because we promise to deal with them later. */\n    fold_negation(lhs_op_info, lengthptr, TRUE);\n    }\n  else\n    {\n    /* Both of LHS & RHS are either ECL_XCLASS, or compound operations. */\n    if (lengthptr != NULL)\n      *lengthptr += 1;\n    else\n      {\n      PCRE2_ASSERT(rhs_op_info->code_start ==\n          lhs_op_info->code_start + lhs_op_info->length);\n      rhs_op_info->code_start[rhs_op_info->length] = ECL_XOR;\n      }\n    lhs_op_info->length += rhs_op_info->length + 1;\n    lhs_op_info->op_single_type = 0;\n    }\n\n  for (int i = 0; i < 8; i++)\n    lhs_op_info->bits.classwords[i] ^= rhs_op_info->bits.classwords[i];\n  break;\n\n  /* LCOV_EXCL_START */\n  default:\n  PCRE2_DEBUG_UNREACHABLE();\n  break;\n  /* LCOV_EXCL_STOP */\n  }\n}\n\n\n\nstatic BOOL\ncompile_eclass_nested(eclass_context *context, BOOL negated,\n  uint32_t **pptr, PCRE2_UCHAR **pcode,\n  eclass_op_info *pop_info, PCRE2_SIZE *lengthptr);\n\n/* This function consumes a group of implicitly-unioned class elements.\nThese can be characters, ranges, properties, or nested classes, as long\nas they are all joined by being placed adjacently. */\n\nstatic BOOL\ncompile_class_operand(eclass_context *context, BOOL negated,\n  uint32_t **pptr, PCRE2_UCHAR **pcode, eclass_op_info *pop_info,\n  PCRE2_SIZE *lengthptr)\n{\nuint32_t *ptr = *pptr;\nuint32_t *prev_ptr;\nPCRE2_UCHAR *code = *pcode;\nPCRE2_UCHAR *code_start = code;\nPCRE2_SIZE prev_length = (lengthptr != NULL)? *lengthptr : 0;\nPCRE2_SIZE extra_length;\nuint32_t meta = META_CODE(*ptr);\n\nswitch (meta)\n  {\n  case META_CLASS_EMPTY_NOT:\n  case META_CLASS_EMPTY:\n  ++ptr;\n  pop_info->length = 1;\n  if ((meta == META_CLASS_EMPTY) == negated)\n    {\n    *code++ = pop_info->op_single_type = ECL_ANY;\n    memset(pop_info->bits.classbits, 0xff, 32);\n    }\n  else\n    {\n    *code++ = pop_info->op_single_type = ECL_NONE;\n    memset(pop_info->bits.classbits, 0, 32);\n    }\n  break;\n\n  case META_CLASS:\n  case META_CLASS_NOT:\n  if ((*ptr & CLASS_IS_ECLASS) != 0)\n    {\n    if (!compile_eclass_nested(context, negated, &ptr, &code,\n                               pop_info, lengthptr))\n      return FALSE;\n\n    PCRE2_ASSERT(*ptr == META_CLASS_END);\n    ptr++;\n    goto DONE;\n    }\n\n  ptr++;\n  PCRE2_FALLTHROUGH /* Fall through */\n\n  default:\n  /* Scan forward characters, ranges, and properties.\n  For example: inside [a-z_ -- m] we don't have brackets around \"a-z_\" but\n  we still need to collect that fragment up into a \"leaf\" OP_CLASS. */\n\n  prev_ptr = ptr;\n  ptr = PRIV(compile_class_not_nested)(\n    context->options, context->xoptions, ptr, &code,\n    (meta != META_CLASS_NOT) == negated, &context->needs_bitmap,\n    context->errorcodeptr, context->cb, lengthptr);\n  if (ptr == NULL) return FALSE;\n\n  /* We must have a 100% guarantee that ptr increases when\n  compile_class_operand() returns, even on Release builds, so that we can\n  statically prove our loops terminate. */\n  /* LCOV_EXCL_START */\n  if (ptr <= prev_ptr)\n    {\n    PCRE2_DEBUG_UNREACHABLE();\n    return FALSE;\n    }\n  /* LCOV_EXCL_STOP */\n\n  /* If we fell through above, consume the closing ']'. */\n  if (meta == META_CLASS || meta == META_CLASS_NOT)\n    {\n    PCRE2_ASSERT(*ptr == META_CLASS_END);\n    ptr++;\n    }\n\n  /* Regardless of whether (lengthptr == NULL), some data will still be written\n  out to *pcode, which we need: we have to peek at it, to transform the opcode\n  into the ECLASS version (since we need to hoist up the bitmaps). */\n  PCRE2_ASSERT(code > code_start);\n  extra_length = (lengthptr != NULL)? *lengthptr - prev_length : 0;\n\n  /* Easiest case: convert OP_ALLANY to ECL_ANY */\n\n  if (*code_start == OP_ALLANY)\n    {\n    PCRE2_ASSERT(code - code_start == 1 && extra_length == 0);\n    pop_info->length = 1;\n    *code_start = pop_info->op_single_type = ECL_ANY;\n    memset(pop_info->bits.classbits, 0xff, 32);\n    }\n\n  /* For OP_CLASS and OP_NCLASS, we hoist out the bitmap and convert to\n  ECL_NONE / ECL_ANY respectively. */\n\n  else if (*code_start == OP_CLASS || *code_start == OP_NCLASS)\n    {\n    PCRE2_ASSERT(code - code_start == 1 + 32 / sizeof(PCRE2_UCHAR) &&\n                 extra_length == 0);\n    pop_info->length = 1;\n    *code_start = pop_info->op_single_type =\n        (*code_start == OP_CLASS)? ECL_NONE : ECL_ANY;\n    memcpy(pop_info->bits.classbits, code_start + 1, 32);\n    /* Rewind the code pointer, but make sure we adjust *lengthptr, because we\n    do need to reserve that space (even though we only use it temporarily). */\n    if (lengthptr != NULL)\n      *lengthptr += code - (code_start + 1);\n    code = code_start + 1;\n\n    if (!context->needs_bitmap && *code_start == ECL_NONE)\n      {\n      uint32_t *classwords = pop_info->bits.classwords;\n\n      for (int i = 0; i < 8; i++)\n        if (classwords[i] != 0)\n          {\n          context->needs_bitmap = TRUE;\n          break;\n          }\n      }\n    else\n      context->needs_bitmap = TRUE;\n    }\n\n  /* Finally, for OP_XCLASS we hoist out the bitmap (if any), and convert to\n  ECL_XCLASS. */\n\n  else\n    {\n    PCRE2_ASSERT(*code_start == OP_XCLASS);\n    *code_start = pop_info->op_single_type = ECL_XCLASS;\n\n    PCRE2_ASSERT(code - code_start >= 1 + LINK_SIZE + 1);\n\n    memcpy(pop_info->bits.classbits, context->cb->classbits.classbits, 32);\n    pop_info->length = (code - code_start) + extra_length;\n    }\n\n  break;\n  }  /* End of switch(meta) */\n\npop_info->code_start = (lengthptr == NULL)? code_start : NULL;\n\nif (lengthptr != NULL)\n  {\n  *lengthptr += code - code_start;\n  code = code_start;\n  }\n\nDONE:\nPCRE2_ASSERT(lengthptr == NULL || (code == code_start));\n\n*pptr = ptr;\n*pcode = code;\nreturn TRUE;\n}\n\n\n\n/* This function consumes a group of implicitly-unioned class elements.\nThese can be characters, ranges, properties, or nested classes, as long\nas they are all joined by being placed adjacently. */\n\nstatic BOOL\ncompile_class_juxtaposition(eclass_context *context, BOOL negated,\n  uint32_t **pptr, PCRE2_UCHAR **pcode, eclass_op_info *pop_info,\n  PCRE2_SIZE *lengthptr)\n{\nuint32_t *ptr = *pptr;\nPCRE2_UCHAR *code = *pcode;\n#ifdef PCRE2_DEBUG\nPCRE2_UCHAR *start_code = *pcode;\n#endif\n\n/* See compile_class_binary_loose() for comments on compile-time folding of\nthe \"negated\" flag. */\n\n/* Because it's a non-empty class, there must be an operand at the start. */\nif (!compile_class_operand(context, negated, &ptr, &code, pop_info, lengthptr))\n  return FALSE;\n\nwhile (*ptr != META_CLASS_END &&\n       !(*ptr >= META_ECLASS_AND && *ptr <= META_ECLASS_NOT))\n  {\n  uint32_t op;\n  BOOL rhs_negated;\n  eclass_op_info rhs_op_info;\n\n  if (negated)\n    {\n    /* !(A juxtapose B)  ->  !A && !B */\n    op = ECL_AND;\n    rhs_negated = TRUE;\n    }\n  else\n    {\n    /* A juxtapose B  ->  A || B */\n    op = ECL_OR;\n    rhs_negated = FALSE;\n    }\n\n  /* An operand must follow the operator. */\n  if (!compile_class_operand(context, rhs_negated, &ptr, &code,\n                             &rhs_op_info, lengthptr))\n    return FALSE;\n\n  /* Convert infix to postfix (RPN). */\n  fold_binary(op, pop_info, &rhs_op_info, lengthptr);\n  if (lengthptr == NULL)\n    code = pop_info->code_start + pop_info->length;\n  }\n\nPCRE2_ASSERT(lengthptr == NULL || code == start_code);\n\n*pptr = ptr;\n*pcode = code;\nreturn TRUE;\n}\n\n\n\n/* This function consumes unary prefix operators. */\n\nstatic BOOL\ncompile_class_unary(eclass_context *context, BOOL negated,\n  uint32_t **pptr, PCRE2_UCHAR **pcode, eclass_op_info *pop_info,\n  PCRE2_SIZE *lengthptr)\n{\nuint32_t *ptr = *pptr;\n#ifdef PCRE2_DEBUG\nPCRE2_UCHAR *start_code = *pcode;\n#endif\n\nwhile (*ptr == META_ECLASS_NOT)\n  {\n  ++ptr;\n  negated = !negated;\n  }\n\n*pptr = ptr;\n/* Because it's a non-empty class, there must be an operand. */\nif (!compile_class_juxtaposition(context, negated, pptr, pcode,\n                                 pop_info, lengthptr))\n  return FALSE;\n\nPCRE2_ASSERT(lengthptr == NULL || *pcode == start_code);\nreturn TRUE;\n}\n\n\n\n/* This function consumes tightly-binding binary operators. */\n\nstatic BOOL\ncompile_class_binary_tight(eclass_context *context, BOOL negated,\n  uint32_t **pptr, PCRE2_UCHAR **pcode, eclass_op_info *pop_info,\n  PCRE2_SIZE *lengthptr)\n{\nuint32_t *ptr = *pptr;\nPCRE2_UCHAR *code = *pcode;\n#ifdef PCRE2_DEBUG\nPCRE2_UCHAR *start_code = *pcode;\n#endif\n\n/* See compile_class_binary_loose() for comments on compile-time folding of\nthe \"negated\" flag. */\n\n/* Because it's a non-empty class, there must be an operand at the start. */\nif (!compile_class_unary(context, negated, &ptr, &code, pop_info, lengthptr))\n  return FALSE;\n\nwhile (*ptr == META_ECLASS_AND)\n  {\n  uint32_t op;\n  BOOL rhs_negated;\n  eclass_op_info rhs_op_info;\n\n  if (negated)\n    {\n    /* !(A && B)  ->  !A || !B */\n    op = ECL_OR;\n    rhs_negated = TRUE;\n    }\n  else\n    {\n    /* A && B  ->  A && B */\n    op = ECL_AND;\n    rhs_negated = FALSE;\n    }\n\n  ++ptr;\n\n  /* An operand must follow the operator. */\n  if (!compile_class_unary(context, rhs_negated, &ptr, &code,\n                           &rhs_op_info, lengthptr))\n    return FALSE;\n\n  /* Convert infix to postfix (RPN). */\n  fold_binary(op, pop_info, &rhs_op_info, lengthptr);\n  if (lengthptr == NULL)\n    code = pop_info->code_start + pop_info->length;\n  }\n\nPCRE2_ASSERT(lengthptr == NULL || code == start_code);\n\n*pptr = ptr;\n*pcode = code;\nreturn TRUE;\n}\n\n\n\n/* This function consumes loosely-binding binary operators. */\n\nstatic BOOL\ncompile_class_binary_loose(eclass_context *context, BOOL negated,\n  uint32_t **pptr, PCRE2_UCHAR **pcode, eclass_op_info *pop_info,\n  PCRE2_SIZE *lengthptr)\n{\nuint32_t *ptr = *pptr;\nPCRE2_UCHAR *code = *pcode;\n#ifdef PCRE2_DEBUG\nPCRE2_UCHAR *start_code = *pcode;\n#endif\n\n/* We really want to fold the negation operator, if at all possible, so that\nsimple cases can be reduced down. In particular, in 8-bit no-UTF mode, we want\nto produce a fully-folded expression, so that we can guarantee not to emit any\nOP_ECLASS codes (in the same way that we never emit OP_XCLASS in this mode).\n\nThis has the consequence that with a little ingenuity, we can in fact avoid\nemitting (nearly...) all cases of the \"NOT\" operator. Imagine that we have:\n    !(A ...\nWe have parsed the preceding \"!\", and we are about to parse the \"A\" operand. We\ndon't know yet whether there will even be a following binary operand! Both of\nthese are possibilities for what follows:\n    !(A && B)\n    !(A)\nHowever, we can still fold the \"!\" into the \"A\" operand, because no matter what\nthe following binary operator will be, we can produce an expression which is\nequivalent. */\n\n/* Because it's a non-empty class, there must be an operand at the start. */\nif (!compile_class_binary_tight(context, negated, &ptr, &code,\n                                pop_info, lengthptr))\n  return FALSE;\n\nwhile (*ptr >= META_ECLASS_OR && *ptr <= META_ECLASS_XOR)\n  {\n  uint32_t op;\n  BOOL op_neg;\n  BOOL rhs_negated;\n  eclass_op_info rhs_op_info;\n\n  if (negated)\n    {\n    /* The whole expression is being negated; we respond by unconditionally\n    negating the LHS A, before seeing what follows. And hooray! We can recover,\n    no matter what follows. */\n    /* !(A || B)   ->  !A && !B                     */\n    /* !(A -- B)   ->  !(A && !B)    ->  !A || B    */\n    /* !(A XOR B)  ->  !(!A XOR !B)  ->  !A XNOR !B */\n    op = (*ptr == META_ECLASS_OR )? ECL_AND :\n         (*ptr == META_ECLASS_SUB)? ECL_OR  :\n         /*ptr == META_ECLASS_XOR*/ ECL_XOR;\n    op_neg = (*ptr == META_ECLASS_XOR);\n    rhs_negated = *ptr != META_ECLASS_SUB;\n    }\n  else\n    {\n    /* A || B   ->  A || B  */\n    /* A -- B   ->  A && !B */\n    /* A XOR B  ->  A XOR B */\n    op = (*ptr == META_ECLASS_OR )? ECL_OR  :\n         (*ptr == META_ECLASS_SUB)? ECL_AND :\n         /*ptr == META_ECLASS_XOR*/ ECL_XOR;\n    op_neg = FALSE;\n    rhs_negated = *ptr == META_ECLASS_SUB;\n    }\n\n  ++ptr;\n\n  /* An operand must follow the operator. */\n  if (!compile_class_binary_tight(context, rhs_negated, &ptr, &code,\n                                  &rhs_op_info, lengthptr))\n    return FALSE;\n\n  /* Convert infix to postfix (RPN). */\n  fold_binary(op, pop_info, &rhs_op_info, lengthptr);\n  if (op_neg) fold_negation(pop_info, lengthptr, FALSE);\n  if (lengthptr == NULL)\n    code = pop_info->code_start + pop_info->length;\n  }\n\nPCRE2_ASSERT(lengthptr == NULL || code == start_code);\n\n*pptr = ptr;\n*pcode = code;\nreturn TRUE;\n}\n\n\n\n/* This function converts the META codes in pptr into opcodes written to\npcode. The pptr must start at a META_CLASS or META_CLASS_NOT.\n\nThe class is compiled as a left-associative sequence of operator\napplications.\n\nThe pptr will be left pointing at the matching META_CLASS_END. */\n\nstatic BOOL\ncompile_eclass_nested(eclass_context *context, BOOL negated,\n  uint32_t **pptr, PCRE2_UCHAR **pcode,\n  eclass_op_info *pop_info, PCRE2_SIZE *lengthptr)\n{\nuint32_t *ptr = *pptr;\n#ifdef PCRE2_DEBUG\nPCRE2_UCHAR *start_code = *pcode;\n#endif\n\n/* The CLASS_IS_ECLASS bit must be set since it is a nested class. */\nPCRE2_ASSERT(*ptr == (META_CLASS | CLASS_IS_ECLASS) ||\n             *ptr == (META_CLASS_NOT | CLASS_IS_ECLASS));\n\nif (*ptr++ == (META_CLASS_NOT | CLASS_IS_ECLASS))\n  negated = !negated;\n\n(*pptr)++;\n\n/* Because it's a non-empty class, there must be an operand at the start. */\nif (!compile_class_binary_loose(context, negated, pptr, pcode,\n                                pop_info, lengthptr))\n  return FALSE;\n\nPCRE2_ASSERT(**pptr == META_CLASS_END);\nPCRE2_ASSERT(lengthptr == NULL || *pcode == start_code);\nreturn TRUE;\n}\n\nBOOL\nPRIV(compile_class_nested)(uint32_t options, uint32_t xoptions,\n  uint32_t **pptr, PCRE2_UCHAR **pcode, int *errorcodeptr,\n  compile_block *cb, PCRE2_SIZE *lengthptr)\n{\neclass_context context;\neclass_op_info op_info;\nPCRE2_SIZE previous_length = (lengthptr != NULL)? *lengthptr : 0;\nPCRE2_UCHAR *code = *pcode;\nPCRE2_UCHAR *previous;\nBOOL allbitsone = TRUE;\n\ncontext.needs_bitmap = FALSE;\ncontext.options = options;\ncontext.xoptions = xoptions;\ncontext.errorcodeptr = errorcodeptr;\ncontext.cb = cb;\n\nprevious = code;\n*code++ = OP_ECLASS;\ncode += LINK_SIZE;\n*code++ = 0;  /* Flags, currently zero. */\nif (!compile_eclass_nested(&context, FALSE, pptr, &code, &op_info, lengthptr))\n  return FALSE;\n\nif (lengthptr != NULL)\n  {\n  *lengthptr += code - previous;\n  code = previous;\n  /* (*lengthptr - previous_length) now holds the amount of buffer that\n  we require to make the call to compile_class_nested() with\n  lengthptr = NULL, and including the (1+LINK_SIZE+1) that we write out\n  before that call. */\n  }\n\n/* Do some useful counting of what's in the bitmap. */\nfor (int i = 0; i < 8; i++)\n  if (op_info.bits.classwords[i] != 0xffffffff)\n    {\n    allbitsone = FALSE;\n    break;\n    }\n\n/* After constant-folding the extended class syntax, it may turn out to be\na simple class after all. In that case, we can unwrap it from the\nOP_ECLASS container - and in fact, we must do so, because in 8-bit\nno-Unicode mode the matcher is compiled without support for OP_ECLASS. */\n\n#ifndef SUPPORT_WIDE_CHARS\nPCRE2_ASSERT(op_info.op_single_type != 0);\n#else\nif (op_info.op_single_type != 0)\n#endif\n  {\n  /* Rewind back over the OP_ECLASS. */\n  code = previous;\n\n  /* If the bits are all ones, and the \"high characters\" are all matched\n  too, we use a special-cased encoding of OP_ALLANY. */\n\n  if (op_info.op_single_type == ECL_ANY && allbitsone)\n    {\n    /* Advancing code means rewinding lengthptr, at this point. */\n    if (lengthptr != NULL) *lengthptr -= 1;\n    *code++ = OP_ALLANY;\n    }\n\n  /* If the high bits are all matched / all not-matched, then we emit an\n  OP_NCLASS/OP_CLASS respectively. */\n\n  else if (op_info.op_single_type == ECL_ANY ||\n           op_info.op_single_type == ECL_NONE)\n    {\n    PCRE2_SIZE required_len = 1 + (32 / sizeof(PCRE2_UCHAR));\n\n    if (lengthptr != NULL)\n      {\n      if (required_len > (*lengthptr - previous_length))\n      *lengthptr = previous_length + required_len;\n      }\n\n    /* Advancing code means rewinding lengthptr, at this point. */\n    if (lengthptr != NULL) *lengthptr -= required_len;\n    *code++ = (op_info.op_single_type == ECL_ANY)? OP_NCLASS : OP_CLASS;\n    memcpy(code, op_info.bits.classbits, 32);\n    code += 32 / sizeof(PCRE2_UCHAR);\n    }\n\n  /* Otherwise, we have an ECL_XCLASS, so we have the OP_XCLASS data\n  there, but, we pulled out its bitmap into op_info, so now we have to\n  put that back into the OP_XCLASS. */\n\n  else\n    {\n#ifndef SUPPORT_WIDE_CHARS\n    PCRE2_DEBUG_UNREACHABLE();\n#else\n    BOOL need_map = context.needs_bitmap;\n    PCRE2_SIZE required_len;\n\n    PCRE2_ASSERT(op_info.op_single_type == ECL_XCLASS);\n    required_len = op_info.length + (need_map? 32/sizeof(PCRE2_UCHAR) : 0);\n\n    if (lengthptr != NULL)\n      {\n      /* Don't unconditionally request all the space we need - we may\n      already have asked for more during processing of the ECLASS. */\n      if (required_len > (*lengthptr - previous_length))\n        *lengthptr = previous_length + required_len;\n\n      /* The code we write out here won't be ignored, even during the\n      (lengthptr != NULL) phase, because if there's a following quantifier\n      it will peek backwards. So we do have to write out a (truncated)\n      OP_XCLASS, even on this branch. */\n      *lengthptr -= 1 + LINK_SIZE + 1;\n      *code++ = OP_XCLASS;\n      PUT(code, 0, 1 + LINK_SIZE + 1);\n      code += LINK_SIZE;\n      *code++ = 0;\n      }\n    else\n      {\n      PCRE2_UCHAR *rest;\n      PCRE2_SIZE rest_len;\n      PCRE2_UCHAR flags;\n\n      /* 1 unit: OP_XCLASS | LINK_SIZE units | 1 unit: flags | ...rest */\n      PCRE2_ASSERT(op_info.length >= 1 + LINK_SIZE + 1);\n      rest = op_info.code_start + 1 + LINK_SIZE + 1;\n      rest_len = (op_info.code_start + op_info.length) - rest;\n\n      /* First read any data we use, before memmove splats it. */\n      flags = op_info.code_start[1 + LINK_SIZE];\n      PCRE2_ASSERT((flags & XCL_MAP) == 0);\n\n      /* Next do the memmove before any writes. */\n      memmove(code + 1 + LINK_SIZE + 1 + (need_map? 32/sizeof(PCRE2_UCHAR) : 0),\n              rest, CU2BYTES(rest_len));\n\n      /* Finally write the header data. */\n      *code++ = OP_XCLASS;\n      PUT(code, 0, (int)required_len);\n      code += LINK_SIZE;\n      *code++ = flags | (need_map? XCL_MAP : 0);\n      if (need_map)\n        {\n        memcpy(code, op_info.bits.classbits, 32);\n        code += 32 / sizeof(PCRE2_UCHAR);\n        }\n      code += rest_len;\n      }\n#endif /* SUPPORT_WIDE_CHARS */\n    }\n  }\n\n/* Otherwise, we're going to keep the OP_ECLASS. However, again we need\nto do some adjustment to insert the bitmap if we have one. */\n\n#ifdef SUPPORT_WIDE_CHARS\nelse\n  {\n  BOOL need_map = context.needs_bitmap;\n  PCRE2_SIZE required_len =\n    1 + LINK_SIZE + 1 + (need_map? 32/sizeof(PCRE2_UCHAR) : 0) + op_info.length;\n\n  if (lengthptr != NULL)\n    {\n    if (required_len > (*lengthptr - previous_length))\n      *lengthptr = previous_length + required_len;\n\n    /* As for the XCLASS branch above, we do have to write out a dummy\n    OP_ECLASS, because of the backwards peek by the quantifier code. Write\n    out a (truncated) OP_ECLASS, even on this branch. */\n    *lengthptr -= 1 + LINK_SIZE + 1;\n    *code++ = OP_ECLASS;\n    PUT(code, 0, 1 + LINK_SIZE + 1);\n    code += LINK_SIZE;\n    *code++ = 0;\n    }\n  else\n    {\n    if (need_map)\n      {\n      PCRE2_UCHAR *map_start = previous + 1 + LINK_SIZE + 1;\n      previous[1 + LINK_SIZE] |= ECL_MAP;\n      memmove(map_start + 32/sizeof(PCRE2_UCHAR), map_start,\n              CU2BYTES(code - map_start));\n      memcpy(map_start, op_info.bits.classbits, 32);\n      code += 32 / sizeof(PCRE2_UCHAR);\n      }\n    PUT(previous, 1, (int)(code - previous));\n    }\n  }\n#endif /* SUPPORT_WIDE_CHARS */\n\n*pcode = code;\nreturn TRUE;\n}\n\n/* End of pcre2_compile_class.c */\n"
  },
  {
    "path": "src/pcre2_config.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2020 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/* These macros are the standard way of turning unquoted text into C strings.\nThey allow macros like PCRE2_MAJOR to be defined without quotes, which is\nconvenient for user programs that want to test their values. */\n\n#define STRING(a)  # a\n#define XSTRING(s) STRING(s)\n\n\n/*************************************************\n* Return info about what features are configured *\n*************************************************/\n\n/* If where is NULL, the length of memory required is returned.\n\nArguments:\n  what             what information is required\n  where            where to put the information\n\nReturns:           0 if a numerical value is returned\n                   >= 0 if a string value\n                   PCRE2_ERROR_BADOPTION if \"where\" not recognized\n                     or JIT target requested when JIT not enabled\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_config(uint32_t what, void *where)\n{\nif (where == NULL)  /* Requests a length */\n  {\n  switch (what)\n    {\n    default:\n    return PCRE2_ERROR_BADOPTION;\n\n    case PCRE2_CONFIG_BSR:\n    case PCRE2_CONFIG_COMPILED_WIDTHS:\n    case PCRE2_CONFIG_DEPTHLIMIT:\n    case PCRE2_CONFIG_EFFECTIVE_LINKSIZE:\n    case PCRE2_CONFIG_HEAPLIMIT:\n    case PCRE2_CONFIG_JIT:\n    case PCRE2_CONFIG_LINKSIZE:\n    case PCRE2_CONFIG_MATCHLIMIT:\n    case PCRE2_CONFIG_NEVER_BACKSLASH_C:\n    case PCRE2_CONFIG_NEWLINE:\n    case PCRE2_CONFIG_PARENSLIMIT:\n    case PCRE2_CONFIG_STACKRECURSE:    /* Obsolete */\n    case PCRE2_CONFIG_TABLES_LENGTH:\n    case PCRE2_CONFIG_UNICODE:\n    return sizeof(uint32_t);\n\n    /* These are handled below */\n\n    case PCRE2_CONFIG_JITTARGET:\n    case PCRE2_CONFIG_UNICODE_VERSION:\n    case PCRE2_CONFIG_VERSION:\n    break;\n    }\n  }\n\nswitch (what)\n  {\n  default:\n  return PCRE2_ERROR_BADOPTION;\n\n  case PCRE2_CONFIG_BSR:\n#ifdef BSR_ANYCRLF\n  *((uint32_t *)where) = PCRE2_BSR_ANYCRLF;\n#else\n  *((uint32_t *)where) = PCRE2_BSR_UNICODE;\n#endif\n  break;\n\n  case PCRE2_CONFIG_COMPILED_WIDTHS:\n  *((uint32_t *)where) = 0\n#ifdef SUPPORT_PCRE2_8\n  + (1 << 0)\n#endif\n#ifdef SUPPORT_PCRE2_16\n  + (1 << 1)\n#endif\n#ifdef SUPPORT_PCRE2_32\n  + (1 << 2)\n#endif\n  ;\n  break;\n\n  case PCRE2_CONFIG_DEPTHLIMIT:\n  *((uint32_t *)where) = MATCH_LIMIT_DEPTH;\n  break;\n\n  case PCRE2_CONFIG_EFFECTIVE_LINKSIZE:\n  *((uint32_t *)where) = LINK_SIZE * sizeof(PCRE2_UCHAR);\n  break;\n\n  case PCRE2_CONFIG_HEAPLIMIT:\n  *((uint32_t *)where) = HEAP_LIMIT;\n  break;\n\n  case PCRE2_CONFIG_JIT:\n#ifdef SUPPORT_JIT\n  *((uint32_t *)where) = 1;\n#else\n  *((uint32_t *)where) = 0;\n#endif\n  break;\n\n  case PCRE2_CONFIG_JITTARGET:\n#ifdef SUPPORT_JIT\n    {\n    const char *v = PRIV(jit_get_target)();\n    return (int)(1 + ((where == NULL)?\n      strlen(v) : PRIV(strcpy_c8)((PCRE2_UCHAR *)where, v)));\n    }\n#else\n  return PCRE2_ERROR_BADOPTION;\n#endif\n\n  case PCRE2_CONFIG_LINKSIZE:\n  *((uint32_t *)where) = (uint32_t)CONFIGURED_LINK_SIZE;\n  break;\n\n  case PCRE2_CONFIG_MATCHLIMIT:\n  *((uint32_t *)where) = MATCH_LIMIT;\n  break;\n\n  case PCRE2_CONFIG_NEWLINE:\n  *((uint32_t *)where) = NEWLINE_DEFAULT;\n  break;\n\n  case PCRE2_CONFIG_NEVER_BACKSLASH_C:\n#ifdef NEVER_BACKSLASH_C\n  *((uint32_t *)where) = 1;\n#else\n  *((uint32_t *)where) = 0;\n#endif\n  break;\n\n  case PCRE2_CONFIG_PARENSLIMIT:\n  *((uint32_t *)where) = PARENS_NEST_LIMIT;\n  break;\n\n  /* This is now obsolete. The stack is no longer used via recursion for\n  handling backtracking in pcre2_match(). */\n\n  case PCRE2_CONFIG_STACKRECURSE:\n  *((uint32_t *)where) = 0;\n  break;\n\n  case PCRE2_CONFIG_TABLES_LENGTH:\n  *((uint32_t *)where) = TABLES_LENGTH;\n  break;\n\n  case PCRE2_CONFIG_UNICODE_VERSION:\n    {\n#if defined SUPPORT_UNICODE\n    const char *v = PRIV(unicode_version);\n#else\n    const char *v = \"Unicode not supported\";\n#endif\n    return (int)(1 + ((where == NULL)?\n      strlen(v) : PRIV(strcpy_c8)((PCRE2_UCHAR *)where, v)));\n    }\n\n  case PCRE2_CONFIG_UNICODE:\n#if defined SUPPORT_UNICODE\n  *((uint32_t *)where) = 1;\n#else\n  *((uint32_t *)where) = 0;\n#endif\n  break;\n\n  /* The hackery in setting \"v\" below is to cope with the case when\n  PCRE2_PRERELEASE is set to an empty string (which it is for real releases).\n  If the second alternative is used in this case, it does not leave a space\n  before the date. On the other hand, if all four macros are put into a single\n  XSTRING when PCRE2_PRERELEASE is not empty, an unwanted space is inserted.\n  There are problems using an \"obvious\" approach like this:\n\n     XSTRING(PCRE2_MAJOR) \".\" XSTRING(PCRE2_MINOR)\n     XSTRING(PCRE2_PRERELEASE) \" \" XSTRING(PCRE2_DATE)\n\n  because, when PCRE2_PRERELEASE is empty, this leads to an attempted expansion\n  of STRING(). The C standard states: \"If (before argument substitution) any\n  argument consists of no preprocessing tokens, the behavior is undefined.\" It\n  turns out the gcc treats this case as a single empty string - which is what\n  we really want - but Visual C grumbles about the lack of an argument for the\n  macro. Unfortunately, both are within their rights. As there seems to be no\n  way to test for a macro's value being empty at compile time, we have to\n  resort to a runtime test. */\n\n  case PCRE2_CONFIG_VERSION:\n    {\n    const char *v = (XSTRING(Z PCRE2_PRERELEASE)[1] == 0)?\n      XSTRING(PCRE2_MAJOR.PCRE2_MINOR PCRE2_DATE) :\n      XSTRING(PCRE2_MAJOR.PCRE2_MINOR) XSTRING(PCRE2_PRERELEASE PCRE2_DATE);\n    return (int)(1 + ((where == NULL)?\n      strlen(v) : PRIV(strcpy_c8)((PCRE2_UCHAR *)where, v)));\n    }\n\n  }\n\nreturn 0;\n}\n\n/* End of pcre2_config.c */\n"
  },
  {
    "path": "src/pcre2_context.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/*************************************************\n*          Default malloc/free functions         *\n*************************************************/\n\n/* Ignore the \"user data\" argument in each case. */\n\nstatic void *default_malloc(size_t size, void *data)\n{\n(void)data;\nreturn malloc(size);\n}\n\n\nstatic void default_free(void *block, void *data)\n{\n(void)data;\nfree(block);\n}\n\n\n\n/*************************************************\n*        Get a block and save memory control     *\n*************************************************/\n\n/* This internal function is called to get a block of memory in which the\nmemory control data is to be stored at the start for future use.\n\nArguments:\n  size        amount of memory required\n  memctl      pointer to a memctl block or NULL\n\nReturns:      pointer to memory or NULL on failure\n*/\n\nextern void *\nPRIV(memctl_malloc)(size_t size, pcre2_memctl *memctl)\n{\npcre2_memctl *newmemctl;\nvoid *yield = (memctl == NULL)? malloc(size) :\n  memctl->malloc(size, memctl->memory_data);\nif (yield == NULL) return NULL;\nnewmemctl = (pcre2_memctl *)yield;\nif (memctl == NULL)\n  {\n  newmemctl->malloc = default_malloc;\n  newmemctl->free = default_free;\n  newmemctl->memory_data = NULL;\n  }\nelse *newmemctl = *memctl;\nreturn yield;\n}\n\n\n\n/*************************************************\n*          Create and initialize contexts        *\n*************************************************/\n\n/* Initializing for compile and match contexts is done in separate, private\nfunctions so that these can be called from functions such as pcre2_compile()\nwhen an external context is not supplied. The initializing functions have an\noption to set up default memory management. */\n\nPCRE2_EXP_DEFN pcre2_general_context * PCRE2_CALL_CONVENTION\npcre2_general_context_create(void *(*private_malloc)(size_t, void *),\n  void (*private_free)(void *, void *), void *memory_data)\n{\npcre2_general_context *gcontext;\nif (private_malloc == NULL) private_malloc = default_malloc;\nif (private_free == NULL) private_free = default_free;\ngcontext = private_malloc(sizeof(pcre2_real_general_context), memory_data);\nif (gcontext == NULL) return NULL;\ngcontext->memctl.malloc = private_malloc;\ngcontext->memctl.free = private_free;\ngcontext->memctl.memory_data = memory_data;\nreturn gcontext;\n}\n\n\n/* A default compile context is set up to save having to initialize at run time\nwhen no context is supplied to the compile function. */\n\npcre2_compile_context PRIV(default_compile_context) = {\n  { default_malloc, default_free, NULL },    /* Default memory handling */\n  NULL,                                      /* Stack guard */\n  NULL,                                      /* Stack guard data */\n  PRIV(default_tables),                      /* Character tables */\n  PCRE2_UNSET,                               /* Max pattern length */\n  PCRE2_UNSET,                               /* Max pattern compiled length */\n  BSR_DEFAULT,                               /* Backslash R default */\n  NEWLINE_DEFAULT,                           /* Newline convention */\n  PARENS_NEST_LIMIT,                         /* As it says */\n  0,                                         /* Extra options */\n  MAX_VARLOOKBEHIND,                         /* As it says */\n  PCRE2_OPTIMIZATION_ALL                     /* All optimizations enabled */\n  };\n\n/* The create function copies the default into the new memory, but must\noverride the default memory handling functions if a gcontext was provided. */\n\nPCRE2_EXP_DEFN pcre2_compile_context * PCRE2_CALL_CONVENTION\npcre2_compile_context_create(pcre2_general_context *gcontext)\n{\npcre2_compile_context *ccontext = PRIV(memctl_malloc)(\n  sizeof(pcre2_real_compile_context), (pcre2_memctl *)gcontext);\nif (ccontext == NULL) return NULL;\n*ccontext = PRIV(default_compile_context);\nif (gcontext != NULL)\n  *((pcre2_memctl *)ccontext) = *((pcre2_memctl *)gcontext);\nreturn ccontext;\n}\n\n\n/* A default match context is set up to save having to initialize at run time\nwhen no context is supplied to a match function. */\n\npcre2_match_context PRIV(default_match_context) = {\n  { default_malloc, default_free, NULL },\n#ifdef SUPPORT_JIT\n  NULL,          /* JIT callback */\n  NULL,          /* JIT callback data */\n#endif\n  NULL,          /* Callout function */\n  NULL,          /* Callout data */\n  NULL,          /* Substitute callout function */\n  NULL,          /* Substitute callout data */\n  NULL,          /* Substitute case callout function */\n  NULL,          /* Substitute case callout data */\n  PCRE2_UNSET,   /* Offset limit */\n  HEAP_LIMIT,\n  MATCH_LIMIT,\n  MATCH_LIMIT_DEPTH };\n\n/* The create function copies the default into the new memory, but must\noverride the default memory handling functions if a gcontext was provided. */\n\nPCRE2_EXP_DEFN pcre2_match_context * PCRE2_CALL_CONVENTION\npcre2_match_context_create(pcre2_general_context *gcontext)\n{\npcre2_match_context *mcontext = PRIV(memctl_malloc)(\n  sizeof(pcre2_real_match_context), (pcre2_memctl *)gcontext);\nif (mcontext == NULL) return NULL;\n*mcontext = PRIV(default_match_context);\nif (gcontext != NULL)\n  *((pcre2_memctl *)mcontext) = *((pcre2_memctl *)gcontext);\nreturn mcontext;\n}\n\n\n/* A default convert context is set up to save having to initialize at run time\nwhen no context is supplied to the convert function. */\n\npcre2_convert_context PRIV(default_convert_context) = {\n  { default_malloc, default_free, NULL },    /* Default memory handling */\n#ifdef _WIN32\n  CHAR_BACKSLASH,                            /* Default path separator */\n  CHAR_GRAVE_ACCENT                          /* Default escape character */\n#else  /* Not Windows */\n  CHAR_SLASH,                                /* Default path separator */\n  CHAR_BACKSLASH                             /* Default escape character */\n#endif\n  };\n\n/* The create function copies the default into the new memory, but must\noverride the default memory handling functions if a gcontext was provided. */\n\nPCRE2_EXP_DEFN pcre2_convert_context * PCRE2_CALL_CONVENTION\npcre2_convert_context_create(pcre2_general_context *gcontext)\n{\npcre2_convert_context *ccontext = PRIV(memctl_malloc)(\n  sizeof(pcre2_real_convert_context), (pcre2_memctl *)gcontext);\nif (ccontext == NULL) return NULL;\n*ccontext = PRIV(default_convert_context);\nif (gcontext != NULL)\n  *((pcre2_memctl *)ccontext) = *((pcre2_memctl *)gcontext);\nreturn ccontext;\n}\n\n\n/*************************************************\n*              Context copy functions            *\n*************************************************/\n\nPCRE2_EXP_DEFN pcre2_general_context * PCRE2_CALL_CONVENTION\npcre2_general_context_copy(pcre2_general_context *gcontext)\n{\npcre2_general_context *newcontext =\n  gcontext->memctl.malloc(sizeof(pcre2_real_general_context),\n  gcontext->memctl.memory_data);\nif (newcontext == NULL) return NULL;\nmemcpy(newcontext, gcontext, sizeof(pcre2_real_general_context));\nreturn newcontext;\n}\n\n\nPCRE2_EXP_DEFN pcre2_compile_context * PCRE2_CALL_CONVENTION\npcre2_compile_context_copy(pcre2_compile_context *ccontext)\n{\npcre2_compile_context *newcontext =\n  ccontext->memctl.malloc(sizeof(pcre2_real_compile_context),\n  ccontext->memctl.memory_data);\nif (newcontext == NULL) return NULL;\nmemcpy(newcontext, ccontext, sizeof(pcre2_real_compile_context));\nreturn newcontext;\n}\n\n\nPCRE2_EXP_DEFN pcre2_match_context * PCRE2_CALL_CONVENTION\npcre2_match_context_copy(pcre2_match_context *mcontext)\n{\npcre2_match_context *newcontext =\n  mcontext->memctl.malloc(sizeof(pcre2_real_match_context),\n  mcontext->memctl.memory_data);\nif (newcontext == NULL) return NULL;\nmemcpy(newcontext, mcontext, sizeof(pcre2_real_match_context));\nreturn newcontext;\n}\n\n\nPCRE2_EXP_DEFN pcre2_convert_context * PCRE2_CALL_CONVENTION\npcre2_convert_context_copy(pcre2_convert_context *ccontext)\n{\npcre2_convert_context *newcontext =\n  ccontext->memctl.malloc(sizeof(pcre2_real_convert_context),\n  ccontext->memctl.memory_data);\nif (newcontext == NULL) return NULL;\nmemcpy(newcontext, ccontext, sizeof(pcre2_real_convert_context));\nreturn newcontext;\n}\n\n\n/*************************************************\n*              Context free functions            *\n*************************************************/\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_general_context_free(pcre2_general_context *gcontext)\n{\nif (gcontext != NULL)\n  gcontext->memctl.free(gcontext, gcontext->memctl.memory_data);\n}\n\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_compile_context_free(pcre2_compile_context *ccontext)\n{\nif (ccontext != NULL)\n  ccontext->memctl.free(ccontext, ccontext->memctl.memory_data);\n}\n\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_match_context_free(pcre2_match_context *mcontext)\n{\nif (mcontext != NULL)\n  mcontext->memctl.free(mcontext, mcontext->memctl.memory_data);\n}\n\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_convert_context_free(pcre2_convert_context *ccontext)\n{\nif (ccontext != NULL)\n  ccontext->memctl.free(ccontext, ccontext->memctl.memory_data);\n}\n\n\n/*************************************************\n*             Set values in contexts             *\n*************************************************/\n\n/* All these functions return 0 for success or PCRE2_ERROR_BADDATA if invalid\ndata is given. Only some of the functions are able to test the validity of the\ndata. */\n\n\n/* ------------ Compile context ------------ */\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_character_tables(pcre2_compile_context *ccontext,\n  const uint8_t *tables)\n{\nccontext->tables = tables;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_bsr(pcre2_compile_context *ccontext, uint32_t value)\n{\nswitch(value)\n  {\n  case PCRE2_BSR_ANYCRLF:\n  case PCRE2_BSR_UNICODE:\n  ccontext->bsr_convention = value;\n  return 0;\n\n  default:\n  return PCRE2_ERROR_BADDATA;\n  }\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_max_pattern_length(pcre2_compile_context *ccontext, PCRE2_SIZE length)\n{\nccontext->max_pattern_length = length;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_max_pattern_compiled_length(pcre2_compile_context *ccontext, PCRE2_SIZE length)\n{\nccontext->max_pattern_compiled_length = length;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_newline(pcre2_compile_context *ccontext, uint32_t newline)\n{\nswitch(newline)\n  {\n  case PCRE2_NEWLINE_CR:\n  case PCRE2_NEWLINE_LF:\n  case PCRE2_NEWLINE_CRLF:\n  case PCRE2_NEWLINE_ANY:\n  case PCRE2_NEWLINE_ANYCRLF:\n  case PCRE2_NEWLINE_NUL:\n  ccontext->newline_convention = newline;\n  return 0;\n\n  default:\n  return PCRE2_ERROR_BADDATA;\n  }\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_max_varlookbehind(pcre2_compile_context *ccontext, uint32_t limit)\n{\nccontext->max_varlookbehind = limit;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_parens_nest_limit(pcre2_compile_context *ccontext, uint32_t limit)\n{\nccontext->parens_nest_limit = limit;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_compile_extra_options(pcre2_compile_context *ccontext, uint32_t options)\n{\nccontext->extra_options = options;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_compile_recursion_guard(pcre2_compile_context *ccontext,\n  int (*guard)(uint32_t, void *), void *user_data)\n{\nccontext->stack_guard = guard;\nccontext->stack_guard_data = user_data;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_optimize(pcre2_compile_context *ccontext, uint32_t directive)\n{\nif (ccontext == NULL)\n  return PCRE2_ERROR_NULL;\n\nswitch (directive)\n  {\n  case PCRE2_OPTIMIZATION_NONE:\n  ccontext->optimization_flags = 0;\n  break;\n\n  case PCRE2_OPTIMIZATION_FULL:\n  ccontext->optimization_flags = PCRE2_OPTIMIZATION_ALL;\n  break;\n\n  default:\n  if (directive >= PCRE2_AUTO_POSSESS && directive <= PCRE2_START_OPTIMIZE_OFF)\n    {\n    /* Even directive numbers starting from 64 switch a bit on;\n     * Odd directive numbers starting from 65 switch a bit off */\n    if ((directive & 1) != 0)\n      ccontext->optimization_flags &= ~(1u << ((directive >> 1) - 32));\n    else\n      ccontext->optimization_flags |= 1u << ((directive >> 1) - 32);\n    return 0;\n    }\n  return PCRE2_ERROR_BADOPTION;\n  }\n\nreturn 0;\n}\n\n/* ------------ Match context ------------ */\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_callout(pcre2_match_context *mcontext,\n  int (*callout)(pcre2_callout_block *, void *), void *callout_data)\n{\nmcontext->callout = callout;\nmcontext->callout_data = callout_data;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_substitute_callout(pcre2_match_context *mcontext,\n  int (*substitute_callout)(pcre2_substitute_callout_block *, void *),\n  void *substitute_callout_data)\n{\nmcontext->substitute_callout = substitute_callout;\nmcontext->substitute_callout_data = substitute_callout_data;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_substitute_case_callout(pcre2_match_context *mcontext,\n  PCRE2_SIZE (*substitute_case_callout)(PCRE2_SPTR, PCRE2_SIZE, PCRE2_UCHAR *,\n                                        PCRE2_SIZE, int, void *),\n  void *substitute_case_callout_data)\n{\nmcontext->substitute_case_callout = substitute_case_callout;\nmcontext->substitute_case_callout_data = substitute_case_callout_data;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_heap_limit(pcre2_match_context *mcontext, uint32_t limit)\n{\nmcontext->heap_limit = limit;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_match_limit(pcre2_match_context *mcontext, uint32_t limit)\n{\nmcontext->match_limit = limit;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_depth_limit(pcre2_match_context *mcontext, uint32_t limit)\n{\nmcontext->depth_limit = limit;\nreturn 0;\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_offset_limit(pcre2_match_context *mcontext, PCRE2_SIZE limit)\n{\nmcontext->offset_limit = limit;\nreturn 0;\n}\n\n/* These functions became obsolete at release 10.30. The first is kept as a\nsynonym for backwards compatibility. The second now does nothing. */\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_recursion_limit(pcre2_match_context *mcontext, uint32_t limit)\n{\nreturn pcre2_set_depth_limit(mcontext, limit);\n}\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_recursion_memory_management(pcre2_match_context *mcontext,\n  void *(*mymalloc)(size_t, void *), void (*myfree)(void *, void *),\n  void *mydata)\n{\n(void)mcontext;\n(void)mymalloc;\n(void)myfree;\n(void)mydata;\nreturn 0;\n}\n\n\n/* ------------ Convert context ------------ */\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_glob_separator(pcre2_convert_context *ccontext, uint32_t separator)\n{\nif (separator != CHAR_SLASH && separator != CHAR_BACKSLASH &&\n    separator != CHAR_DOT) return PCRE2_ERROR_BADDATA;\nccontext->glob_separator = separator;\nreturn 0;\n}\n\nstatic const char *globpunct =\n  STR_EXCLAMATION_MARK STR_QUOTATION_MARK STR_NUMBER_SIGN STR_DOLLAR_SIGN\n  STR_PERCENT_SIGN STR_AMPERSAND STR_APOSTROPHE STR_LEFT_PARENTHESIS\n  STR_RIGHT_PARENTHESIS STR_ASTERISK STR_PLUS STR_COMMA STR_MINUS STR_DOT\n  STR_SLASH STR_COLON STR_SEMICOLON STR_LESS_THAN_SIGN STR_EQUALS_SIGN\n  STR_GREATER_THAN_SIGN STR_QUESTION_MARK STR_COMMERCIAL_AT\n  STR_LEFT_SQUARE_BRACKET STR_BACKSLASH STR_RIGHT_SQUARE_BRACKET\n  STR_CIRCUMFLEX_ACCENT STR_UNDERSCORE STR_GRAVE_ACCENT STR_LEFT_CURLY_BRACKET\n  STR_VERTICAL_LINE STR_RIGHT_CURLY_BRACKET STR_TILDE;\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_set_glob_escape(pcre2_convert_context *ccontext, uint32_t escape)\n{\nif (escape > 255 || (escape != 0 && strchr(globpunct, escape) == NULL))\n  return PCRE2_ERROR_BADDATA;\nccontext->glob_escape = escape;\nreturn 0;\n}\n\n/* End of pcre2_context.c */\n\n"
  },
  {
    "path": "src/pcre2_convert.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_internal.h\"\n\n\n\n#define TYPE_OPTIONS (PCRE2_CONVERT_GLOB| \\\n  PCRE2_CONVERT_POSIX_BASIC|PCRE2_CONVERT_POSIX_EXTENDED)\n\n#define ALL_OPTIONS (PCRE2_CONVERT_UTF|PCRE2_CONVERT_NO_UTF_CHECK| \\\n  PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR| \\\n  PCRE2_CONVERT_GLOB_NO_STARSTAR| \\\n  TYPE_OPTIONS)\n\n#define DUMMY_BUFFER_SIZE 100\n\n/* Generated pattern fragments */\n\n#define STR_BACKSLASH_A STR_BACKSLASH STR_A\n#define STR_BACKSLASH_z STR_BACKSLASH STR_z\n#define STR_COLON_RIGHT_SQUARE_BRACKET STR_COLON STR_RIGHT_SQUARE_BRACKET\n#define STR_DOT_STAR_LOOKBEHIND STR_DOT STR_ASTERISK STR_LEFT_PARENTHESIS STR_QUESTION_MARK STR_LESS_THAN_SIGN STR_EQUALS_SIGN\n#define STR_LOOKAHEAD_NOT_DOT STR_LEFT_PARENTHESIS STR_QUESTION_MARK STR_EXCLAMATION_MARK STR_BACKSLASH STR_DOT STR_RIGHT_PARENTHESIS\n#define STR_QUERY_s STR_LEFT_PARENTHESIS STR_QUESTION_MARK STR_s STR_RIGHT_PARENTHESIS\n#define STR_STAR_NUL STR_LEFT_PARENTHESIS STR_ASTERISK STR_N STR_U STR_L STR_RIGHT_PARENTHESIS\n\n/* States for POSIX processing */\n\nenum { POSIX_START_REGEX, POSIX_ANCHORED, POSIX_NOT_BRACKET,\n       POSIX_CLASS_NOT_STARTED, POSIX_CLASS_STARTING, POSIX_CLASS_STARTED };\n\n/* Macro to add a character string to the output buffer, checking for overflow. */\n\n#define PUTCHARS(string) \\\n  { \\\n  for (const char *s = string; *s != 0; s++) \\\n    { \\\n    if (p >= endp) return PCRE2_ERROR_NOMEMORY; \\\n    *p++ = *s; \\\n    } \\\n  }\n\n/* Macro to check for lowercase characters. */\n\n#ifdef EBCDIC\n#define ISLOWER(c)  (((c) >= CHAR_a && (c) <= CHAR_i) || \\\n                     ((c) >= CHAR_j && (c) <= CHAR_r) || \\\n                     ((c) >= CHAR_s && (c) <= CHAR_z))\n#else\n#define ISLOWER(c)  ((c) >= CHAR_a && (c) <= CHAR_z)\n#endif\n\n/* Literals that must be escaped: \\ ? * + | . ^ $ { } [ ] ( ) */\n\nstatic const char *pcre2_escaped_literals =\n  STR_BACKSLASH STR_QUESTION_MARK STR_ASTERISK STR_PLUS\n  STR_VERTICAL_LINE STR_DOT STR_CIRCUMFLEX_ACCENT STR_DOLLAR_SIGN\n  STR_LEFT_CURLY_BRACKET STR_RIGHT_CURLY_BRACKET\n  STR_LEFT_SQUARE_BRACKET STR_RIGHT_SQUARE_BRACKET\n  STR_LEFT_PARENTHESIS STR_RIGHT_PARENTHESIS;\n\n/* Recognized escaped metacharacters in POSIX basic patterns. */\n\nstatic const char *posix_meta_escapes =\n  STR_LEFT_PARENTHESIS STR_RIGHT_PARENTHESIS\n  STR_LEFT_CURLY_BRACKET STR_RIGHT_CURLY_BRACKET\n  STR_1 STR_2 STR_3 STR_4 STR_5 STR_6 STR_7 STR_8 STR_9;\n\n/* Recognized POSIX classes, colon-separated. */\n\nstatic const char *posix_classes =\n  STR_a STR_l STR_p STR_h STR_a STR_COLON\n  STR_l STR_o STR_w STR_e STR_r STR_COLON\n  STR_u STR_p STR_p STR_e STR_r STR_COLON\n  STR_a STR_l STR_n STR_u STR_m STR_COLON\n  STR_a STR_s STR_c STR_i STR_i STR_COLON\n  STR_b STR_l STR_a STR_n STR_k STR_COLON\n  STR_c STR_n STR_t STR_r STR_l STR_COLON\n  STR_d STR_i STR_g STR_i STR_t STR_COLON\n  STR_g STR_r STR_a STR_p STR_h STR_COLON\n  STR_p STR_r STR_i STR_n STR_t STR_COLON\n  STR_p STR_u STR_n STR_c STR_t STR_COLON\n  STR_s STR_p STR_a STR_c STR_e STR_COLON\n  STR_w STR_o STR_r STR_d STR_COLON\n  STR_x STR_d STR_i STR_g STR_i STR_t STR_COLON;\n\n\n\n/*************************************************\n*           Convert a POSIX pattern              *\n*************************************************/\n\n/* This function handles both basic and extended POSIX patterns.\n\nArguments:\n  pattype        the pattern type\n  pattern        the pattern\n  plength        length in code units\n  utf            TRUE if UTF\n  use_buffer     where to put the output\n  use_length     length of use_buffer\n  bufflenptr     where to put the used length\n  dummyrun       TRUE if a dummy run\n  ccontext       the convert context\n\nReturns:         0 => success\n                !0 => error code\n*/\n\nstatic int\nconvert_posix(uint32_t pattype, PCRE2_SPTR pattern, PCRE2_SIZE plength,\n  BOOL utf, PCRE2_UCHAR *use_buffer, PCRE2_SIZE use_length,\n  PCRE2_SIZE *bufflenptr, BOOL dummyrun, pcre2_convert_context *ccontext)\n{\nPCRE2_SPTR posix = pattern;\nPCRE2_UCHAR *p = use_buffer;\nPCRE2_UCHAR *pp = p;\nPCRE2_UCHAR *endp = p + use_length - 1;  /* Allow for trailing zero */\nPCRE2_SIZE convlength = 0;\n\nuint32_t bracount = 0;\nuint32_t posix_state = POSIX_START_REGEX;\nuint32_t lastspecial = 0;\nBOOL extended = (pattype & PCRE2_CONVERT_POSIX_EXTENDED) != 0;\nBOOL nextisliteral = FALSE;\n\n(void)utf;       /* Not used when Unicode not supported */\n(void)ccontext;  /* Not currently used */\n\n/* Initialize default for error offset as end of input. */\n\n*bufflenptr = plength;\nPUTCHARS(STR_STAR_NUL);\n\n/* Now scan the input. */\n\nwhile (plength > 0)\n  {\n  uint32_t c, sc;\n  int clength = 1;\n\n  /* Add in the length of the last item, then, if in the dummy run, pull the\n  pointer back to the start of the (temporary) buffer and then remember the\n  start of the next item. */\n\n  convlength += p - pp;\n  if (dummyrun) p = use_buffer;\n  pp = p;\n\n  /* Pick up the next character */\n\n#ifndef SUPPORT_UNICODE\n  c = *posix;\n#else\n  GETCHARLENTEST(c, posix, clength);\n#endif\n  posix += clength;\n  plength -= clength;\n\n  sc = nextisliteral? 0 : c;\n  nextisliteral = FALSE;\n\n  /* Handle a character within a class. */\n\n  if (posix_state >= POSIX_CLASS_NOT_STARTED)\n    {\n    if (c == CHAR_RIGHT_SQUARE_BRACKET)\n      {\n      PUTCHARS(STR_RIGHT_SQUARE_BRACKET);\n      posix_state = POSIX_NOT_BRACKET;\n      }\n\n    /* Not the end of the class */\n\n    else\n      {\n      switch (posix_state)\n        {\n        case POSIX_CLASS_STARTED:\n        if (ISLOWER(c)) break;  /* Remain in started state */\n        posix_state = POSIX_CLASS_NOT_STARTED;\n        if (c == CHAR_COLON  && plength > 0 &&\n            *posix == CHAR_RIGHT_SQUARE_BRACKET)\n          {\n          PUTCHARS(STR_COLON_RIGHT_SQUARE_BRACKET);\n          plength--;\n          posix++;\n          continue;    /* With next character after :] */\n          }\n        PCRE2_FALLTHROUGH /* Fall through */\n\n        case POSIX_CLASS_NOT_STARTED:\n        if (c == CHAR_LEFT_SQUARE_BRACKET)\n          posix_state = POSIX_CLASS_STARTING;\n        break;\n\n        case POSIX_CLASS_STARTING:\n        if (c == CHAR_COLON) posix_state = POSIX_CLASS_STARTED;\n        break;\n        }\n\n      if (c == CHAR_BACKSLASH) PUTCHARS(STR_BACKSLASH);\n      if (p + clength > endp) return PCRE2_ERROR_NOMEMORY;\n      memcpy(p, posix - clength, CU2BYTES(clength));\n      p += clength;\n      }\n    }\n\n  /* Handle a character not within a class. */\n\n  else switch(sc)\n    {\n    case CHAR_LEFT_SQUARE_BRACKET:\n    PUTCHARS(STR_LEFT_SQUARE_BRACKET);\n\n#ifdef NEVER\n    /* We could handle special cases [[:<:]] and [[:>:]] (which PCRE does\n    support) but they are not part of POSIX 1003.1. */\n\n    if (plength >= 6)\n      {\n      if (posix[0] == CHAR_LEFT_SQUARE_BRACKET &&\n          posix[1] == CHAR_COLON &&\n          (posix[2] == CHAR_LESS_THAN_SIGN ||\n           posix[2] == CHAR_GREATER_THAN_SIGN) &&\n          posix[3] == CHAR_COLON &&\n          posix[4] == CHAR_RIGHT_SQUARE_BRACKET &&\n          posix[5] == CHAR_RIGHT_SQUARE_BRACKET)\n        {\n        if (p + 6 > endp) return PCRE2_ERROR_NOMEMORY;\n        memcpy(p, posix, CU2BYTES(6));\n        p += 6;\n        posix += 6;\n        plength -= 6;\n        continue;  /* With next character */\n        }\n      }\n#endif\n\n    /* Handle start of \"normal\" character classes */\n\n    posix_state = POSIX_CLASS_NOT_STARTED;\n\n    /* Handle ^ and ] as first characters */\n\n    if (plength > 0)\n      {\n      if (*posix == CHAR_CIRCUMFLEX_ACCENT)\n        {\n        posix++;\n        plength--;\n        PUTCHARS(STR_CIRCUMFLEX_ACCENT);\n        }\n      if (plength > 0 && *posix == CHAR_RIGHT_SQUARE_BRACKET)\n        {\n        posix++;\n        plength--;\n        PUTCHARS(STR_RIGHT_SQUARE_BRACKET);\n        }\n      }\n    break;\n\n    case CHAR_BACKSLASH:\n    if (plength == 0) return PCRE2_ERROR_END_BACKSLASH;\n    if (extended) nextisliteral = TRUE; else\n      {\n      if (*posix < 255 && strchr(posix_meta_escapes, *posix) != NULL)\n        {\n        if (*posix >= CHAR_0 && *posix <= CHAR_9) PUTCHARS(STR_BACKSLASH);\n        if (p + 1 > endp) return PCRE2_ERROR_NOMEMORY;\n        lastspecial = *p++ = *posix++;\n        plength--;\n        }\n      else nextisliteral = TRUE;\n      }\n    break;\n\n    case CHAR_RIGHT_PARENTHESIS:\n    if (!extended || bracount == 0) goto ESCAPE_LITERAL;\n    bracount--;\n    goto COPY_SPECIAL;\n\n    case CHAR_LEFT_PARENTHESIS:\n    bracount++;\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case CHAR_QUESTION_MARK:\n    case CHAR_PLUS:\n    case CHAR_LEFT_CURLY_BRACKET:\n    case CHAR_RIGHT_CURLY_BRACKET:\n    case CHAR_VERTICAL_LINE:\n    if (!extended) goto ESCAPE_LITERAL;\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case CHAR_DOT:\n    case CHAR_DOLLAR_SIGN:\n    posix_state = POSIX_NOT_BRACKET;\n    COPY_SPECIAL:\n    lastspecial = c;\n    if (p + 1 > endp) return PCRE2_ERROR_NOMEMORY;\n    *p++ = c;\n    break;\n\n    case CHAR_ASTERISK:\n    if (lastspecial != CHAR_ASTERISK)\n      {\n      if (!extended && (posix_state < POSIX_NOT_BRACKET ||\n          lastspecial == CHAR_LEFT_PARENTHESIS))\n        goto ESCAPE_LITERAL;\n      goto COPY_SPECIAL;\n      }\n    break;   /* Ignore second and subsequent asterisks */\n\n    case CHAR_CIRCUMFLEX_ACCENT:\n    if (extended) goto COPY_SPECIAL;\n    if (posix_state == POSIX_START_REGEX ||\n        lastspecial == CHAR_LEFT_PARENTHESIS)\n      {\n      posix_state = POSIX_ANCHORED;\n      goto COPY_SPECIAL;\n      }\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    default:\n    if (c < 255 && strchr(pcre2_escaped_literals, c) != NULL)\n      {\n      ESCAPE_LITERAL:\n      PUTCHARS(STR_BACKSLASH);\n      }\n    lastspecial = 0xff;  /* Indicates nothing special */\n    if (p + clength > endp) return PCRE2_ERROR_NOMEMORY;\n    memcpy(p, posix - clength, CU2BYTES(clength));\n    p += clength;\n    posix_state = POSIX_NOT_BRACKET;\n    break;\n    }\n  }\n\nif (posix_state >= POSIX_CLASS_NOT_STARTED)\n  return PCRE2_ERROR_MISSING_SQUARE_BRACKET;\nconvlength += p - pp;        /* Final segment */\n*bufflenptr = convlength;\n*p++ = 0;\nreturn 0;\n}\n\n\n/*************************************************\n*           Convert a glob pattern               *\n*************************************************/\n\n/* Context for writing the output into a buffer. */\n\ntypedef struct pcre2_output_context {\n  PCRE2_UCHAR *output;                  /* current output position */\n  PCRE2_SPTR output_end;                /* output end */\n  PCRE2_SIZE output_size;               /* size of the output */\n  uint8_t out_str[8];                   /* string copied to the output */\n} pcre2_output_context;\n\n\n/* Write a character into the output.\n\nArguments:\n  out            output context\n  chr            the next character\n*/\n\nstatic void\nconvert_glob_write(pcre2_output_context *out, PCRE2_UCHAR chr)\n{\nout->output_size++;\n\nif (out->output < out->output_end)\n  *out->output++ = chr;\n}\n\n\n/* Write a string into the output.\n\nArguments:\n  out            output context\n  length         length of out->out_str\n*/\n\nstatic void\nconvert_glob_write_str(pcre2_output_context *out, PCRE2_SIZE length)\n{\nuint8_t *out_str = out->out_str;\nPCRE2_UCHAR *output = out->output;\nPCRE2_SPTR output_end = out->output_end;\nPCRE2_SIZE output_size = out->output_size;\n\ndo\n  {\n  output_size++;\n\n  if (output < output_end)\n    *output++ = *out_str++;\n  }\nwhile (--length != 0);\n\nout->output = output;\nout->output_size = output_size;\n}\n\n\n/* Prints the separator into the output.\n\nArguments:\n  out            output context\n  separator      glob separator\n  with_escape    backslash is needed before separator\n*/\n\nstatic void\nconvert_glob_print_separator(pcre2_output_context *out,\n  PCRE2_UCHAR separator, BOOL with_escape)\n{\nif (with_escape)\n  convert_glob_write(out, CHAR_BACKSLASH);\n\nconvert_glob_write(out, separator);\n}\n\n\n/* Prints a wildcard into the output.\n\nArguments:\n  out            output context\n  separator      glob separator\n  with_escape    backslash is needed before separator\n*/\n\nstatic void\nconvert_glob_print_wildcard(pcre2_output_context *out,\n  PCRE2_UCHAR separator, BOOL with_escape)\n{\nout->out_str[0] = CHAR_LEFT_SQUARE_BRACKET;\nout->out_str[1] = CHAR_CIRCUMFLEX_ACCENT;\nconvert_glob_write_str(out, 2);\n\nconvert_glob_print_separator(out, separator, with_escape);\n\nconvert_glob_write(out, CHAR_RIGHT_SQUARE_BRACKET);\n}\n\n\n/* Parse a posix class.\n\nArguments:\n  from           starting point of scanning the range\n  pattern_end    end of pattern\n  out            output context\n\nReturns:  >0 => class index\n          0  => malformed class\n*/\n\nstatic int\nconvert_glob_parse_class(PCRE2_SPTR *from, PCRE2_SPTR pattern_end,\n  pcre2_output_context *out)\n{\nPCRE2_SPTR start = *from + 1;\nPCRE2_SPTR pattern = start;\nconst char *class_ptr;\nPCRE2_UCHAR c;\nint class_index;\n\nwhile (TRUE)\n  {\n  if (pattern >= pattern_end) return 0;\n\n  c = *pattern++;\n\n  if (c < CHAR_a || c > CHAR_z) break;\n  }\n\nif (c != CHAR_COLON || pattern >= pattern_end ||\n    *pattern != CHAR_RIGHT_SQUARE_BRACKET)\n  return 0;\n\nclass_ptr = posix_classes;\nclass_index = 1;\n\nwhile (TRUE)\n  {\n  if (*class_ptr == 0) return 0;\n\n  pattern = start;\n\n  while (*pattern == (PCRE2_UCHAR) *class_ptr)\n    {\n    if (*pattern == CHAR_COLON)\n      {\n      pattern += 2;\n      start -= 2;\n\n      do convert_glob_write(out, *start++); while (start < pattern);\n\n      *from = pattern;\n      return class_index;\n      }\n    pattern++;\n    class_ptr++;\n    }\n\n  while (*class_ptr != CHAR_COLON) class_ptr++;\n  class_ptr++;\n  class_index++;\n  }\n}\n\n/* Checks whether the character is in the class.\n\nArguments:\n  class_index    class index\n  c              character\n\nReturns:   !0 => character is found in the class\n            0 => otherwise\n*/\n\nstatic BOOL\nconvert_glob_char_in_class(int class_index, PCRE2_UCHAR c)\n{\nconst uint8_t *cbits = PRIV(default_tables) + cbits_offset;\nint cbit;\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\nif (c > 0xff)\n  {\n  /* Can't access the character tables for c > 0xff */\n  return FALSE;\n  }\n#endif\n\n/* See posix_class_maps. This is a small local clone of that.\nNote that we don't know exactly what character tables will be used at\nmatch time, but, for the purposes of pattern conversion, it should be\nsufficient to use PCRE2's built-in default tables. */\n\nswitch (class_index)\n  {\n  case 1:                              /* alpha */\n  if (c == CHAR_UNDERSCORE) return FALSE;\n  if (((cbits + cbit_digit)[c/8] & (1u << (c&7))) != 0) return FALSE;\n  cbit = cbit_word;\n  break;\n\n  case 2: cbit = cbit_lower; break;    /* lower */\n  case 3: cbit = cbit_upper; break;    /* upper */\n\n  case 4:                              /* alnum */\n  if (c == CHAR_UNDERSCORE) return FALSE;\n  cbit = cbit_word;\n  break;\n\n  case 5:                              /* ascii */\n  if (((cbits + cbit_cntrl)[c/8] & (1u << (c&7))) != 0) return TRUE;\n  cbit = cbit_print;\n  break;\n\n  case 6:                              /* blank */\n  if (c == CHAR_LF || c == CHAR_VT || c == CHAR_FF || c == CHAR_CR)\n    return FALSE;\n  cbit = cbit_space;\n  break;\n\n  case 7: cbit = cbit_cntrl; break;    /* cntrl */\n  case 8: cbit = cbit_digit; break;    /* digit */\n  case 9: cbit = cbit_graph; break;    /* graph */\n  case 10: cbit = cbit_print; break;   /* print */\n  case 11: cbit = cbit_punct; break;   /* punct */\n  case 12: cbit = cbit_space; break;   /* space */\n  case 13: cbit = cbit_word; break;    /* word */\n  case 14: cbit = cbit_xdigit; break;  /* xdigit */\n  default: return FALSE;\n  }\n\nreturn ((cbits + cbit)[c/8] & (1u << (c&7))) != 0;\n}\n\n/* Parse a range of characters.\n\nArguments:\n  from           starting point of scanning the range\n  pattern_end    end of pattern\n  out            output context\n  separator      glob separator\n  with_escape    backslash is needed before separator\n\nReturns:         0 => success\n                !0 => error code\n*/\n\nstatic int\nconvert_glob_parse_range(PCRE2_SPTR *from, PCRE2_SPTR pattern_end,\n  pcre2_output_context *out, BOOL utf, PCRE2_UCHAR separator,\n  BOOL with_escape, PCRE2_UCHAR escape, BOOL no_wildsep)\n{\nBOOL is_negative = FALSE;\nBOOL separator_seen = FALSE;\nBOOL has_prev_c;\nPCRE2_SPTR pattern = *from;\nPCRE2_SPTR char_start = NULL;\nuint32_t c, prev_c;\nint len, class_index;\n\n(void)utf; /* Avoid compiler warning. */\n\nif (pattern >= pattern_end)\n  {\n  *from = pattern;\n  return PCRE2_ERROR_MISSING_SQUARE_BRACKET;\n  }\n\nif (*pattern == CHAR_EXCLAMATION_MARK\n    || *pattern == CHAR_CIRCUMFLEX_ACCENT)\n  {\n  pattern++;\n\n  if (pattern >= pattern_end)\n    {\n    *from = pattern;\n    return PCRE2_ERROR_MISSING_SQUARE_BRACKET;\n    }\n\n  is_negative = TRUE;\n\n  out->out_str[0] = CHAR_LEFT_SQUARE_BRACKET;\n  out->out_str[1] = CHAR_CIRCUMFLEX_ACCENT;\n  len = 2;\n\n  if (!no_wildsep)\n    {\n    if (with_escape)\n      {\n      out->out_str[len] = CHAR_BACKSLASH;\n      len++;\n      }\n    out->out_str[len] = (uint8_t) separator;\n    }\n\n  convert_glob_write_str(out, len + 1);\n  }\nelse\n  convert_glob_write(out, CHAR_LEFT_SQUARE_BRACKET);\n\nhas_prev_c = FALSE;\nprev_c = 0;\n\nif (*pattern == CHAR_RIGHT_SQUARE_BRACKET)\n  {\n  out->out_str[0] = CHAR_BACKSLASH;\n  out->out_str[1] = CHAR_RIGHT_SQUARE_BRACKET;\n  convert_glob_write_str(out, 2);\n  has_prev_c = TRUE;\n  prev_c = CHAR_RIGHT_SQUARE_BRACKET;\n  pattern++;\n  }\n\nwhile (pattern < pattern_end)\n  {\n  char_start = pattern;\n  GETCHARINCTEST(c, pattern);\n\n  if (c == CHAR_RIGHT_SQUARE_BRACKET)\n    {\n    convert_glob_write(out, c);\n\n    if (!is_negative && !no_wildsep && separator_seen)\n      {\n      out->out_str[0] = CHAR_LEFT_PARENTHESIS;\n      out->out_str[1] = CHAR_QUESTION_MARK;\n      out->out_str[2] = CHAR_LESS_THAN_SIGN;\n      out->out_str[3] = CHAR_EXCLAMATION_MARK;\n      convert_glob_write_str(out, 4);\n\n      convert_glob_print_separator(out, separator, with_escape);\n      convert_glob_write(out, CHAR_RIGHT_PARENTHESIS);\n      }\n\n    *from = pattern;\n    return 0;\n    }\n\n  if (pattern >= pattern_end) break;\n\n  if (c == CHAR_LEFT_SQUARE_BRACKET && *pattern == CHAR_COLON)\n    {\n    *from = pattern;\n    class_index = convert_glob_parse_class(from, pattern_end, out);\n\n    if (class_index != 0)\n      {\n      pattern = *from;\n\n      has_prev_c = FALSE;\n      prev_c = 0;\n\n      if (!is_negative &&\n          convert_glob_char_in_class (class_index, separator))\n        separator_seen = TRUE;\n      continue;\n      }\n    }\n  else if (c == CHAR_MINUS && has_prev_c &&\n           *pattern != CHAR_RIGHT_SQUARE_BRACKET)\n    {\n    convert_glob_write(out, CHAR_MINUS);\n\n    char_start = pattern;\n    GETCHARINCTEST(c, pattern);\n\n    if (pattern >= pattern_end) break;\n\n    if (escape != 0 && c == escape)\n      {\n      char_start = pattern;\n      GETCHARINCTEST(c, pattern);\n      }\n    else if (c == CHAR_LEFT_SQUARE_BRACKET && *pattern == CHAR_COLON)\n      {\n      *from = pattern;\n      return PCRE2_ERROR_CONVERT_SYNTAX;\n      }\n\n    if (prev_c > c)\n      {\n      *from = pattern;\n      return PCRE2_ERROR_CONVERT_SYNTAX;\n      }\n\n    if (prev_c < separator && separator < c) separator_seen = TRUE;\n\n    has_prev_c = FALSE;\n    prev_c = 0;\n    }\n  else\n    {\n    if (escape != 0 && c == escape)\n      {\n      char_start = pattern;\n      GETCHARINCTEST(c, pattern);\n\n      if (pattern >= pattern_end) break;\n      }\n\n    has_prev_c = TRUE;\n    prev_c = c;\n    }\n\n  if (c == CHAR_LEFT_SQUARE_BRACKET || c == CHAR_RIGHT_SQUARE_BRACKET ||\n      c == CHAR_BACKSLASH || c == CHAR_MINUS)\n    convert_glob_write(out, CHAR_BACKSLASH);\n\n  if (c == separator) separator_seen = TRUE;\n\n  do convert_glob_write(out, *char_start++); while (char_start < pattern);\n  }\n\n*from = pattern;\nreturn PCRE2_ERROR_MISSING_SQUARE_BRACKET;\n}\n\n\n/* Prints a (*COMMIT) into the output.\n\nArguments:\n  out            output context\n*/\n\nstatic void\nconvert_glob_print_commit(pcre2_output_context *out)\n{\nout->out_str[0] = CHAR_LEFT_PARENTHESIS;\nout->out_str[1] = CHAR_ASTERISK;\nout->out_str[2] = CHAR_C;\nout->out_str[3] = CHAR_O;\nout->out_str[4] = CHAR_M;\nout->out_str[5] = CHAR_M;\nout->out_str[6] = CHAR_I;\nout->out_str[7] = CHAR_T;\nconvert_glob_write_str(out, 8);\nconvert_glob_write(out, CHAR_RIGHT_PARENTHESIS);\n}\n\n\n/* Bash glob converter.\n\nArguments:\n  pattype        the pattern type\n  pattern        the pattern\n  plength        length in code units\n  utf            TRUE if UTF\n  use_buffer     where to put the output\n  use_length     length of use_buffer\n  bufflenptr     where to put the used length\n  dummyrun       TRUE if a dummy run\n  ccontext       the convert context\n\nReturns:         0 => success\n                !0 => error code\n*/\n\nstatic int\nconvert_glob(uint32_t options, PCRE2_SPTR pattern, PCRE2_SIZE plength,\n  BOOL utf, PCRE2_UCHAR *use_buffer, PCRE2_SIZE use_length,\n  PCRE2_SIZE *bufflenptr, BOOL dummyrun, pcre2_convert_context *ccontext)\n{\npcre2_output_context out;\nPCRE2_SPTR pattern_start = pattern;\nPCRE2_SPTR pattern_end = pattern + plength;\nPCRE2_UCHAR separator = ccontext->glob_separator;\nPCRE2_UCHAR escape = ccontext->glob_escape;\nPCRE2_UCHAR c;\nBOOL no_wildsep = (options & PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR) != 0;\nBOOL no_starstar = (options & PCRE2_CONVERT_GLOB_NO_STARSTAR) != 0;\nBOOL in_atomic = FALSE;\nBOOL after_starstar = FALSE;\nBOOL no_slash_z = FALSE;\nBOOL with_escape, is_start, after_separator;\nint result = 0;\n\n(void)utf; /* Avoid compiler warning. */\n\n#ifdef SUPPORT_UNICODE\nif (utf && (separator >= 128 || escape >= 128))\n  {\n  /* Currently only ASCII characters are supported. */\n  *bufflenptr = 0;\n  return PCRE2_ERROR_CONVERT_SYNTAX;\n  }\n#endif\n\nwith_escape = strchr(pcre2_escaped_literals, separator) != NULL;\n\n/* Initialize default for error offset as end of input. */\nout.output = use_buffer;\nout.output_end = use_buffer + use_length;\nout.output_size = 0;\n\nout.out_str[0] = CHAR_LEFT_PARENTHESIS;\nout.out_str[1] = CHAR_QUESTION_MARK;\nout.out_str[2] = CHAR_s;\nout.out_str[3] = CHAR_RIGHT_PARENTHESIS;\nconvert_glob_write_str(&out, 4);\n\nis_start = TRUE;\n\nif (pattern < pattern_end && pattern[0] == CHAR_ASTERISK)\n  {\n  if (no_wildsep)\n    is_start = FALSE;\n  else if (!no_starstar && pattern + 1 < pattern_end &&\n           pattern[1] == CHAR_ASTERISK)\n    is_start = FALSE;\n  }\n\nif (is_start)\n  {\n  out.out_str[0] = CHAR_BACKSLASH;\n  out.out_str[1] = CHAR_A;\n  convert_glob_write_str(&out, 2);\n  }\n\nwhile (pattern < pattern_end)\n  {\n  c = *pattern++;\n\n  if (c == CHAR_ASTERISK)\n    {\n    is_start = pattern == pattern_start + 1;\n\n    if (in_atomic)\n      {\n      convert_glob_write(&out, CHAR_RIGHT_PARENTHESIS);\n      in_atomic = FALSE;\n      }\n\n    if (!no_starstar && pattern < pattern_end && *pattern == CHAR_ASTERISK)\n      {\n      after_separator = is_start || (pattern[-2] == separator);\n\n      do pattern++; while (pattern < pattern_end &&\n                           *pattern == CHAR_ASTERISK);\n\n      if (pattern >= pattern_end)\n        {\n        no_slash_z = TRUE;\n        break;\n        }\n\n      after_starstar = TRUE;\n\n      if (after_separator && escape != 0 && *pattern == escape &&\n          pattern + 1 < pattern_end && pattern[1] == separator)\n        pattern++;\n\n      if (is_start)\n        {\n        if (*pattern != separator) continue;\n\n        out.out_str[0] = CHAR_LEFT_PARENTHESIS;\n        out.out_str[1] = CHAR_QUESTION_MARK;\n        out.out_str[2] = CHAR_COLON;\n        out.out_str[3] = CHAR_BACKSLASH;\n        out.out_str[4] = CHAR_A;\n        out.out_str[5] = CHAR_VERTICAL_LINE;\n        convert_glob_write_str(&out, 6);\n\n        convert_glob_print_separator(&out, separator, with_escape);\n        convert_glob_write(&out, CHAR_RIGHT_PARENTHESIS);\n\n        pattern++;\n        continue;\n        }\n\n      convert_glob_print_commit(&out);\n\n      if (!after_separator || *pattern != separator)\n        {\n        out.out_str[0] = CHAR_DOT;\n        out.out_str[1] = CHAR_ASTERISK;\n        out.out_str[2] = CHAR_QUESTION_MARK;\n        convert_glob_write_str(&out, 3);\n        continue;\n        }\n\n      out.out_str[0] = CHAR_LEFT_PARENTHESIS;\n      out.out_str[1] = CHAR_QUESTION_MARK;\n      out.out_str[2] = CHAR_COLON;\n      out.out_str[3] = CHAR_DOT;\n      out.out_str[4] = CHAR_ASTERISK;\n      out.out_str[5] = CHAR_QUESTION_MARK;\n\n      convert_glob_write_str(&out, 6);\n\n      convert_glob_print_separator(&out, separator, with_escape);\n\n      out.out_str[0] = CHAR_RIGHT_PARENTHESIS;\n      out.out_str[1] = CHAR_QUESTION_MARK;\n      out.out_str[2] = CHAR_QUESTION_MARK;\n      convert_glob_write_str(&out, 3);\n\n      pattern++;\n      continue;\n      }\n\n    if (pattern < pattern_end && *pattern == CHAR_ASTERISK)\n      {\n      do pattern++; while (pattern < pattern_end &&\n                           *pattern == CHAR_ASTERISK);\n      }\n\n    if (no_wildsep)\n      {\n      if (pattern >= pattern_end)\n        {\n        no_slash_z = TRUE;\n        break;\n        }\n\n      /* Start check must be after the end check. */\n      if (is_start) continue;\n      }\n\n    if (!is_start)\n      {\n      if (after_starstar)\n        {\n        out.out_str[0] = CHAR_LEFT_PARENTHESIS;\n        out.out_str[1] = CHAR_QUESTION_MARK;\n        out.out_str[2] = CHAR_GREATER_THAN_SIGN;\n        convert_glob_write_str(&out, 3);\n        in_atomic = TRUE;\n        }\n      else\n        convert_glob_print_commit(&out);\n      }\n\n    if (no_wildsep)\n      convert_glob_write(&out, CHAR_DOT);\n    else\n      convert_glob_print_wildcard(&out, separator, with_escape);\n\n    out.out_str[0] = CHAR_ASTERISK;\n    out.out_str[1] = CHAR_QUESTION_MARK;\n    if (pattern >= pattern_end)\n      out.out_str[1] = CHAR_PLUS;\n    convert_glob_write_str(&out, 2);\n    continue;\n    }\n\n  if (c == CHAR_QUESTION_MARK)\n    {\n    if (no_wildsep)\n      convert_glob_write(&out, CHAR_DOT);\n    else\n      convert_glob_print_wildcard(&out, separator, with_escape);\n    continue;\n    }\n\n  if (c == CHAR_LEFT_SQUARE_BRACKET)\n    {\n    result = convert_glob_parse_range(&pattern, pattern_end,\n      &out, utf, separator, with_escape, escape, no_wildsep);\n    if (result != 0) break;\n    continue;\n    }\n\n  if (escape != 0 && c == escape)\n    {\n    if (pattern >= pattern_end)\n      {\n      result = PCRE2_ERROR_CONVERT_SYNTAX;\n      break;\n      }\n    c = *pattern++;\n    }\n\n  if (c < 255 && strchr(pcre2_escaped_literals, c) != NULL)\n    convert_glob_write(&out, CHAR_BACKSLASH);\n\n  convert_glob_write(&out, c);\n  }\n\nif (result == 0)\n  {\n  if (!no_slash_z)\n    {\n    out.out_str[0] = CHAR_BACKSLASH;\n    out.out_str[1] = CHAR_z;\n    convert_glob_write_str(&out, 2);\n    }\n\n  if (in_atomic)\n    convert_glob_write(&out, CHAR_RIGHT_PARENTHESIS);\n\n  convert_glob_write(&out, CHAR_NUL);\n\n  if (!dummyrun && out.output_size != (PCRE2_SIZE) (out.output - use_buffer))\n    result = PCRE2_ERROR_NOMEMORY;\n  }\n\nif (result != 0)\n  {\n  *bufflenptr = pattern - pattern_start;\n  return result;\n  }\n\n*bufflenptr = out.output_size - 1;\nreturn 0;\n}\n\n\n/*************************************************\n*                Convert pattern                 *\n*************************************************/\n\n/* This is the external-facing function for converting other forms of pattern\ninto PCRE2 regular expression patterns. On error, the bufflenptr argument is\nused to return an offset in the original pattern.\n\nArguments:\n  pattern     the input pattern\n  plength     length of input, or PCRE2_ZERO_TERMINATED\n  options     options bits\n  buffptr     pointer to pointer to output buffer\n  bufflenptr  pointer to length of output buffer\n  ccontext    convert context or NULL\n\nReturns:      0 for success, else an error code (+ve or -ve)\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_pattern_convert(PCRE2_SPTR pattern, PCRE2_SIZE plength, uint32_t options,\n  PCRE2_UCHAR **buffptr, PCRE2_SIZE *bufflenptr,\n  pcre2_convert_context *ccontext)\n{\nint rc;\nPCRE2_UCHAR null_str[1] = { 0xcd };\nPCRE2_UCHAR dummy_buffer[DUMMY_BUFFER_SIZE];\nPCRE2_UCHAR *use_buffer = dummy_buffer;\nPCRE2_SIZE use_length = DUMMY_BUFFER_SIZE;\nBOOL utf = (options & PCRE2_CONVERT_UTF) != 0;\nuint32_t pattype = options & TYPE_OPTIONS;\n\nif (pattern == NULL && plength == 0)\n  pattern = null_str;\n\nif (pattern == NULL || bufflenptr == NULL)\n  {\n  if (bufflenptr != NULL) *bufflenptr = 0;  /* Error offset */\n  return PCRE2_ERROR_NULL;\n  }\n\nif ((options & ~ALL_OPTIONS) != 0 ||        /* Undefined bit set */\n    (pattype & (~pattype+1)) != pattype ||  /* More than one type set */\n    pattype == 0)                           /* No type set */\n  {\n  *bufflenptr = 0;                          /* Error offset */\n  return PCRE2_ERROR_BADOPTION;\n  }\n\nif (plength == PCRE2_ZERO_TERMINATED) plength = PRIV(strlen)(pattern);\nif (ccontext == NULL) ccontext =\n  (pcre2_convert_context *)(&PRIV(default_convert_context));\n\n/* Check UTF if required. */\n\n#ifndef SUPPORT_UNICODE\nif (utf)\n  {\n  *bufflenptr = 0;  /* Error offset */\n  return PCRE2_ERROR_UNICODE_NOT_SUPPORTED;\n  }\n#else\nif (utf && (options & PCRE2_CONVERT_NO_UTF_CHECK) == 0)\n  {\n  PCRE2_SIZE erroroffset;\n  rc = PRIV(valid_utf)(pattern, plength, &erroroffset);\n  if (rc != 0)\n    {\n    *bufflenptr = erroroffset;\n    return rc;\n    }\n  }\n#endif\n\n/* If buffptr is not NULL, and what it points to is not NULL, we are being\nprovided with a buffer and a length, so set them as the buffer to use. */\n\nif (buffptr != NULL && *buffptr != NULL)\n  {\n  use_buffer = *buffptr;\n  use_length = *bufflenptr;\n  }\n\n/* Call an individual converter, either just once (if a buffer was provided or\njust the length is needed), or twice (if a memory allocation is required). */\n\nfor (int i = 0; i < 2; i++)\n  {\n  PCRE2_UCHAR *allocated;\n  BOOL dummyrun = buffptr == NULL || *buffptr == NULL;\n\n  switch(pattype)\n    {\n    case PCRE2_CONVERT_GLOB:\n    rc = convert_glob(options & ~PCRE2_CONVERT_GLOB, pattern, plength, utf,\n      use_buffer, use_length, bufflenptr, dummyrun, ccontext);\n    break;\n\n    case PCRE2_CONVERT_POSIX_BASIC:\n    case PCRE2_CONVERT_POSIX_EXTENDED:\n    rc = convert_posix(pattype, pattern, plength, utf, use_buffer, use_length,\n      bufflenptr, dummyrun, ccontext);\n    break;\n\n    /* We have already validated pattype. */\n    /* LCOV_EXCL_START */\n    default:\n    PCRE2_DEBUG_UNREACHABLE();\n    *bufflenptr = 0;  /* Error offset */\n    return PCRE2_ERROR_INTERNAL;\n    /* LCOV_EXCL_STOP */\n    }\n\n  if (rc != 0 ||           /* Error */\n      buffptr == NULL ||   /* Just the length is required */\n      *buffptr != NULL)    /* Buffer was provided or allocated */\n    return rc;\n\n  /* Allocate memory for the buffer, with hidden space for an allocator at\n  the start. The next time round the loop runs the conversion for real. */\n\n  allocated = PRIV(memctl_malloc)(sizeof(pcre2_memctl) +\n    (*bufflenptr + 1)*PCRE2_CODE_UNIT_WIDTH, (pcre2_memctl *)ccontext);\n  if (allocated == NULL)\n    {\n    *bufflenptr = 0;  /* Error offset */\n    return PCRE2_ERROR_NOMEMORY;\n    }\n  *buffptr = (PCRE2_UCHAR *)(((char *)allocated) + sizeof(pcre2_memctl));\n\n  use_buffer = *buffptr;\n  use_length = *bufflenptr + 1;\n  }\n\n/* Running the loop above ought to have succeeded the second time. */\n/* LCOV_EXCL_START */\nPCRE2_DEBUG_UNREACHABLE();\n*bufflenptr = 0;  /* Error offset */\nreturn PCRE2_ERROR_INTERNAL;\n/* LCOV_EXCL_STOP */\n}\n\n\n/*************************************************\n*            Free converted pattern              *\n*************************************************/\n\n/* This frees a converted pattern that was put in newly-allocated memory.\n\nArgument:   the converted pattern\nReturns:    nothing\n*/\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_converted_pattern_free(PCRE2_UCHAR *converted)\n{\nif (converted != NULL)\n  {\n  pcre2_memctl *memctl =\n    (pcre2_memctl *)((char *)converted - sizeof(pcre2_memctl));\n  memctl->free(memctl, memctl->memory_data);\n  }\n}\n\n/* End of pcre2_convert.c */\n"
  },
  {
    "path": "src/pcre2_dfa_match.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains the external function pcre2_dfa_match(), which is an\nalternative matching function that uses a sort of DFA algorithm (not a true\nFSM). This is NOT Perl-compatible, but it has advantages in certain\napplications. */\n\n\n/* NOTE ABOUT PERFORMANCE: A user of this function sent some code that improved\nthe performance of his patterns greatly. I could not use it as it stood, as it\nwas not thread safe, and made assumptions about pattern sizes. Also, it caused\ntest 7 to loop, and test 9 to crash with a segfault.\n\nThe issue is the check for duplicate states, which is done by a simple linear\nsearch up the state list. (Grep for \"duplicate\" below to find the code.) For\nmany patterns, there will never be many states active at one time, so a simple\nlinear search is fine. In patterns that have many active states, it might be a\nbottleneck. The suggested code used an indexing scheme to remember which states\nhad previously been used for each character, and avoided the linear search when\nit knew there was no chance of a duplicate. This was implemented when adding\nstates to the state lists.\n\nI wrote some thread-safe, not-limited code to try something similar at the time\nof checking for duplicates (instead of when adding states), using index vectors\non the stack. It did give a 13% improvement with one specially constructed\npattern for certain subject strings, but on other strings and on many of the\nsimpler patterns in the test suite it did worse. The major problem, I think,\nwas the extra time to initialize the index. This had to be done for each call\nof internal_dfa_match(). (The supplied patch used a static vector, initialized\nonly once - I suspect this was the cause of the problems with the tests.)\n\nOverall, I concluded that the gains in some cases did not outweigh the losses\nin others, so I abandoned this code. */\n\n\n#include \"pcre2_internal.h\"\n\n\n\n#define NLBLOCK mb             /* Block containing newline information */\n#define PSSTART start_subject  /* Field containing processed string start */\n#define PSEND   end_subject    /* Field containing processed string end */\n\n#define PUBLIC_DFA_MATCH_OPTIONS \\\n  (PCRE2_ANCHORED|PCRE2_ENDANCHORED|PCRE2_NOTBOL|PCRE2_NOTEOL|PCRE2_NOTEMPTY| \\\n   PCRE2_NOTEMPTY_ATSTART|PCRE2_NO_UTF_CHECK|PCRE2_PARTIAL_HARD| \\\n   PCRE2_PARTIAL_SOFT|PCRE2_DFA_SHORTEST|PCRE2_DFA_RESTART| \\\n   PCRE2_COPY_MATCHED_SUBJECT)\n\n\n/*************************************************\n*      Code parameters and static tables         *\n*************************************************/\n\n/* These are offsets that are used to turn the OP_TYPESTAR and friends opcodes\ninto others, under special conditions. A gap of 20 between the blocks should be\nenough. The resulting opcodes don't have to be less than 256 because they are\nnever stored, so we push them well clear of the normal opcodes. */\n\n#define OP_PROP_EXTRA       300\n#define OP_EXTUNI_EXTRA     320\n#define OP_ANYNL_EXTRA      340\n#define OP_HSPACE_EXTRA     360\n#define OP_VSPACE_EXTRA     380\n\n\n/* This table identifies those opcodes that are followed immediately by a\ncharacter that is to be tested in some way. This makes it possible to\ncentralize the loading of these characters. In the case of Type * etc, the\n\"character\" is the opcode for \\D, \\d, \\S, \\s, \\W, or \\w, which will always be a\nsmall value. Non-zero values in the table are the offsets from the opcode where\nthe character is to be found. ***NOTE*** If the start of this table is\nmodified, the three tables that follow must also be modified. */\n\nstatic const uint8_t coptable[] = {\n  0,                             /* End                                    */\n  0, 0, 0, 0, 0,                 /* \\A, \\G, \\K, \\B, \\b                     */\n  0, 0, 0, 0, 0, 0,              /* \\D, \\d, \\S, \\s, \\W, \\w                 */\n  0, 0, 0,                       /* Any, AllAny, Anybyte                   */\n  0, 0,                          /* \\P, \\p                                 */\n  0, 0, 0, 0, 0,                 /* \\R, \\H, \\h, \\V, \\v                     */\n  0,                             /* \\X                                     */\n  0, 0, 0, 0, 0, 0,              /* \\Z, \\z, $, $M, ^, ^M                   */\n  1,                             /* Char                                   */\n  1,                             /* Chari                                  */\n  1,                             /* not                                    */\n  1,                             /* noti                                   */\n  /* Positive single-char repeats                                          */\n  1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */\n  1+IMM2_SIZE, 1+IMM2_SIZE,      /* upto, minupto                          */\n  1+IMM2_SIZE,                   /* exact                                  */\n  1, 1, 1, 1+IMM2_SIZE,          /* *+, ++, ?+, upto+                      */\n  1, 1, 1, 1, 1, 1,              /* *I, *?I, +I, +?I, ?I, ??I              */\n  1+IMM2_SIZE, 1+IMM2_SIZE,      /* upto I, minupto I                      */\n  1+IMM2_SIZE,                   /* exact I                                */\n  1, 1, 1, 1+IMM2_SIZE,          /* *+I, ++I, ?+I, upto+I                  */\n  /* Negative single-char repeats - only for chars < 256                   */\n  1, 1, 1, 1, 1, 1,              /* NOT *, *?, +, +?, ?, ??                */\n  1+IMM2_SIZE, 1+IMM2_SIZE,      /* NOT upto, minupto                      */\n  1+IMM2_SIZE,                   /* NOT exact                              */\n  1, 1, 1, 1+IMM2_SIZE,          /* NOT *+, ++, ?+, upto+                  */\n  1, 1, 1, 1, 1, 1,              /* NOT *I, *?I, +I, +?I, ?I, ??I          */\n  1+IMM2_SIZE, 1+IMM2_SIZE,      /* NOT upto I, minupto I                  */\n  1+IMM2_SIZE,                   /* NOT exact I                            */\n  1, 1, 1, 1+IMM2_SIZE,          /* NOT *+I, ++I, ?+I, upto+I              */\n  /* Positive type repeats                                                 */\n  1, 1, 1, 1, 1, 1,              /* Type *, *?, +, +?, ?, ??               */\n  1+IMM2_SIZE, 1+IMM2_SIZE,      /* Type upto, minupto                     */\n  1+IMM2_SIZE,                   /* Type exact                             */\n  1, 1, 1, 1+IMM2_SIZE,          /* Type *+, ++, ?+, upto+                 */\n  /* Character class & ref repeats                                         */\n  0, 0, 0, 0, 0, 0,              /* *, *?, +, +?, ?, ??                    */\n  0, 0,                          /* CRRANGE, CRMINRANGE                    */\n  0, 0, 0, 0,                    /* Possessive *+, ++, ?+, CRPOSRANGE      */\n  0,                             /* CLASS                                  */\n  0,                             /* NCLASS                                 */\n  0,                             /* XCLASS - variable length               */\n  0,                             /* ECLASS - variable length               */\n  0,                             /* REF                                    */\n  0,                             /* REFI                                   */\n  0,                             /* DNREF                                  */\n  0,                             /* DNREFI                                 */\n  0,                             /* RECURSE                                */\n  0,                             /* CALLOUT                                */\n  0,                             /* CALLOUT_STR                            */\n  0,                             /* Alt                                    */\n  0,                             /* Ket                                    */\n  0,                             /* KetRmax                                */\n  0,                             /* KetRmin                                */\n  0,                             /* KetRpos                                */\n  0, 0,                          /* Reverse, Vreverse                      */\n  0,                             /* Assert                                 */\n  0,                             /* Assert not                             */\n  0,                             /* Assert behind                          */\n  0,                             /* Assert behind not                      */\n  0,                             /* NA assert                              */\n  0,                             /* NA assert behind                       */\n  0,                             /* Assert scan substring                  */\n  0,                             /* ONCE                                   */\n  0,                             /* SCRIPT_RUN                             */\n  0, 0, 0, 0, 0,                 /* BRA, BRAPOS, CBRA, CBRAPOS, COND       */\n  0, 0, 0, 0, 0,                 /* SBRA, SBRAPOS, SCBRA, SCBRAPOS, SCOND  */\n  0, 0,                          /* CREF, DNCREF                           */\n  0, 0,                          /* RREF, DNRREF                           */\n  0, 0,                          /* FALSE, TRUE                            */\n  0, 0, 0,                       /* BRAZERO, BRAMINZERO, BRAPOSZERO        */\n  0, 0, 0,                       /* MARK, PRUNE, PRUNE_ARG                 */\n  0, 0, 0, 0,                    /* SKIP, SKIP_ARG, THEN, THEN_ARG         */\n  0, 0,                          /* COMMIT, COMMIT_ARG                     */\n  0, 0, 0,                       /* FAIL, ACCEPT, ASSERT_ACCEPT            */\n  0, 0, 0,                       /* CLOSE, SKIPZERO, DEFINE                */\n  0, 0,                          /* \\B and \\b in UCP mode                  */\n};\n\n/* This table identifies those opcodes that inspect a character. It is used to\nremember the fact that a character could have been inspected when the end of\nthe subject is reached. ***NOTE*** If the start of this table is modified, the\ntwo tables that follow must also be modified. */\n\nstatic const uint8_t poptable[] = {\n  0,                             /* End                                    */\n  0, 0, 0, 1, 1,                 /* \\A, \\G, \\K, \\B, \\b                     */\n  1, 1, 1, 1, 1, 1,              /* \\D, \\d, \\S, \\s, \\W, \\w                 */\n  1, 1, 1,                       /* Any, AllAny, Anybyte                   */\n  1, 1,                          /* \\P, \\p                                 */\n  1, 1, 1, 1, 1,                 /* \\R, \\H, \\h, \\V, \\v                     */\n  1,                             /* \\X                                     */\n  0, 0, 0, 0, 0, 0,              /* \\Z, \\z, $, $M, ^, ^M                   */\n  1,                             /* Char                                   */\n  1,                             /* Chari                                  */\n  1,                             /* not                                    */\n  1,                             /* noti                                   */\n  /* Positive single-char repeats                                          */\n  1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */\n  1, 1, 1,                       /* upto, minupto, exact                   */\n  1, 1, 1, 1,                    /* *+, ++, ?+, upto+                      */\n  1, 1, 1, 1, 1, 1,              /* *I, *?I, +I, +?I, ?I, ??I              */\n  1, 1, 1,                       /* upto I, minupto I, exact I             */\n  1, 1, 1, 1,                    /* *+I, ++I, ?+I, upto+I                  */\n  /* Negative single-char repeats - only for chars < 256                   */\n  1, 1, 1, 1, 1, 1,              /* NOT *, *?, +, +?, ?, ??                */\n  1, 1, 1,                       /* NOT upto, minupto, exact               */\n  1, 1, 1, 1,                    /* NOT *+, ++, ?+, upto+                  */\n  1, 1, 1, 1, 1, 1,              /* NOT *I, *?I, +I, +?I, ?I, ??I          */\n  1, 1, 1,                       /* NOT upto I, minupto I, exact I         */\n  1, 1, 1, 1,                    /* NOT *+I, ++I, ?+I, upto+I              */\n  /* Positive type repeats                                                 */\n  1, 1, 1, 1, 1, 1,              /* Type *, *?, +, +?, ?, ??               */\n  1, 1, 1,                       /* Type upto, minupto, exact              */\n  1, 1, 1, 1,                    /* Type *+, ++, ?+, upto+                 */\n  /* Character class & ref repeats                                         */\n  1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */\n  1, 1,                          /* CRRANGE, CRMINRANGE                    */\n  1, 1, 1, 1,                    /* Possessive *+, ++, ?+, CRPOSRANGE      */\n  1,                             /* CLASS                                  */\n  1,                             /* NCLASS                                 */\n  1,                             /* XCLASS - variable length               */\n  1,                             /* ECLASS - variable length               */\n  0,                             /* REF                                    */\n  0,                             /* REFI                                   */\n  0,                             /* DNREF                                  */\n  0,                             /* DNREFI                                 */\n  0,                             /* RECURSE                                */\n  0,                             /* CALLOUT                                */\n  0,                             /* CALLOUT_STR                            */\n  0,                             /* Alt                                    */\n  0,                             /* Ket                                    */\n  0,                             /* KetRmax                                */\n  0,                             /* KetRmin                                */\n  0,                             /* KetRpos                                */\n  0, 0,                          /* Reverse, Vreverse                      */\n  0,                             /* Assert                                 */\n  0,                             /* Assert not                             */\n  0,                             /* Assert behind                          */\n  0,                             /* Assert behind not                      */\n  0,                             /* NA assert                              */\n  0,                             /* NA assert behind                       */\n  0,                             /* Assert scan substring                  */\n  0,                             /* ONCE                                   */\n  0,                             /* SCRIPT_RUN                             */\n  0, 0, 0, 0, 0,                 /* BRA, BRAPOS, CBRA, CBRAPOS, COND       */\n  0, 0, 0, 0, 0,                 /* SBRA, SBRAPOS, SCBRA, SCBRAPOS, SCOND  */\n  0, 0,                          /* CREF, DNCREF                           */\n  0, 0,                          /* RREF, DNRREF                           */\n  0, 0,                          /* FALSE, TRUE                            */\n  0, 0, 0,                       /* BRAZERO, BRAMINZERO, BRAPOSZERO        */\n  0, 0, 0,                       /* MARK, PRUNE, PRUNE_ARG                 */\n  0, 0, 0, 0,                    /* SKIP, SKIP_ARG, THEN, THEN_ARG         */\n  0, 0,                          /* COMMIT, COMMIT_ARG                     */\n  0, 0, 0,                       /* FAIL, ACCEPT, ASSERT_ACCEPT            */\n  0, 0, 0,                       /* CLOSE, SKIPZERO, DEFINE                */\n  1, 1,                          /* \\B and \\b in UCP mode                  */\n};\n\n/* Compile-time check that these tables have the correct size. */\nSTATIC_ASSERT(sizeof(coptable) == OP_TABLE_LENGTH, coptable);\nSTATIC_ASSERT(sizeof(poptable) == OP_TABLE_LENGTH, poptable);\n\n/* These 2 tables allow for compact code for testing for \\D, \\d, \\S, \\s, \\W,\nand \\w */\n\nstatic const uint8_t toptable1[] = {\n  0, 0, 0, 0, 0, 0,\n  ctype_digit, ctype_digit,\n  ctype_space, ctype_space,\n  ctype_word,  ctype_word,\n  0, 0                            /* OP_ANY, OP_ALLANY */\n};\n\nstatic const uint8_t toptable2[] = {\n  0, 0, 0, 0, 0, 0,\n  ctype_digit, 0,\n  ctype_space, 0,\n  ctype_word,  0,\n  1, 1                            /* OP_ANY, OP_ALLANY */\n};\n\n\n/* Structure for holding data about a particular state, which is in effect the\ncurrent data for an active path through the match tree. It must consist\nentirely of ints because the working vector we are passed, and which we put\nthese structures in, is a vector of ints. */\n\ntypedef struct stateblock {\n  int offset;                     /* Offset to opcode (-ve has meaning) */\n  int count;                      /* Count for repeats */\n  int data;                       /* Some use extra data */\n} stateblock;\n\n#define INTS_PER_STATEBLOCK  (int)(sizeof(stateblock)/sizeof(int))\n\n\n/* Before version 10.32 the recursive calls of internal_dfa_match() were passed\nlocal working space and output vectors that were created on the stack. This has\ncaused issues for some patterns, especially in small-stack environments such as\nWindows. A new scheme is now in use which sets up a vector on the stack, but if\nthis is too small, heap memory is used, up to the heap_limit. The main\nparameters are all numbers of ints because the workspace is a vector of ints.\n\nThe size of the starting stack vector, DFA_START_RWS_SIZE, is in bytes, and is\ndefined in pcre2_internal.h so as to be available to pcre2test when it is\nfinding the minimum heap requirement for a match. */\n\n#define OVEC_UNIT  (sizeof(PCRE2_SIZE)/sizeof(int))\n\n#define RWS_BASE_SIZE   (DFA_START_RWS_SIZE/sizeof(int))  /* Stack vector */\n#define RWS_RSIZE       1000                    /* Work size for recursion */\n#define RWS_OVEC_RSIZE  (1000*OVEC_UNIT)        /* Ovector for recursion */\n#define RWS_OVEC_OSIZE  (2*OVEC_UNIT)           /* Ovector in other cases */\n\n/* This structure is at the start of each workspace block. */\n\ntypedef struct RWS_anchor {\n  struct RWS_anchor *next;\n  uint32_t size;  /* Number of ints */\n  uint32_t free;  /* Number of ints */\n} RWS_anchor;\n\n#define RWS_ANCHOR_SIZE (sizeof(RWS_anchor)/sizeof(int))\n\n\n\n/*************************************************\n*               Process a callout                *\n*************************************************/\n\n/* This function is called to perform a callout.\n\nArguments:\n  code              current code pointer\n  offsets           points to current capture offsets\n  current_subject   start of current subject match\n  ptr               current position in subject\n  mb                the match block\n  extracode         extra code offset when called from condition\n  lengthptr         where to return the callout length\n\nReturns:            the return from the callout\n*/\n\nstatic int\ndo_callout_dfa(PCRE2_SPTR code, PCRE2_SIZE *offsets, PCRE2_SPTR current_subject,\n  PCRE2_SPTR ptr, dfa_match_block *mb, PCRE2_SIZE extracode,\n  PCRE2_SIZE *lengthptr)\n{\npcre2_callout_block *cb = mb->cb;\n\n*lengthptr = (code[extracode] == OP_CALLOUT)?\n  (PCRE2_SIZE)PRIV(OP_lengths)[OP_CALLOUT] :\n  (PCRE2_SIZE)GET(code, 1 + 2*LINK_SIZE + extracode);\n\nif (mb->callout == NULL) return 0;    /* No callout provided */\n\n/* Fixed fields in the callout block are set once and for all at the start of\nmatching. */\n\ncb->offset_vector    = offsets;\ncb->start_match      = (PCRE2_SIZE)(current_subject - mb->start_subject);\ncb->current_position = (PCRE2_SIZE)(ptr - mb->start_subject);\ncb->pattern_position = GET(code, 1 + extracode);\ncb->next_item_length = GET(code, 1 + LINK_SIZE + extracode);\n\nif (code[extracode] == OP_CALLOUT)\n  {\n  cb->callout_number = code[1 + 2*LINK_SIZE + extracode];\n  cb->callout_string_offset = 0;\n  cb->callout_string = NULL;\n  cb->callout_string_length = 0;\n  }\nelse\n  {\n  cb->callout_number = 0;\n  cb->callout_string_offset = GET(code, 1 + 3*LINK_SIZE + extracode);\n  cb->callout_string = code + (1 + 4*LINK_SIZE + extracode) + 1;\n  cb->callout_string_length = *lengthptr - (1 + 4*LINK_SIZE) - 2;\n  }\n\nreturn (mb->callout)(cb, mb->callout_data);\n}\n\n\n\n/*************************************************\n*         Expand local workspace memory          *\n*************************************************/\n\n/* This function is called when internal_dfa_match() is about to be called\nrecursively and there is insufficient working space left in the current\nworkspace block. If there's an existing next block, use it; otherwise get a new\nblock unless the heap limit is reached.\n\nArguments:\n  rwsptr     pointer to block pointer (updated)\n  ovecsize   space needed for an ovector\n  mb         the match block\n\nReturns:     0 rwsptr has been updated\n            !0 an error code\n*/\n\nstatic int\nmore_workspace(RWS_anchor **rwsptr, unsigned int ovecsize, dfa_match_block *mb)\n{\nRWS_anchor *rws = *rwsptr;\nRWS_anchor *new;\n\nif (rws->next != NULL)\n  {\n  new = rws->next;\n  }\n\n/* Sizes in the RWS_anchor blocks are in units of sizeof(int), but\nmb->heap_limit and mb->heap_used are in kibibytes. Play carefully, to avoid\noverflow. */\n\nelse\n  {\n  uint32_t newsize = (rws->size >= UINT32_MAX/(sizeof(int)*2))? UINT32_MAX/sizeof(int) : rws->size * 2;\n  uint32_t newsizeK = newsize/(1024/sizeof(int));\n\n  if (newsizeK + mb->heap_used > mb->heap_limit)\n    newsizeK = (uint32_t)(mb->heap_limit - mb->heap_used);\n  newsize = newsizeK*(1024/sizeof(int));\n\n  if (newsize < RWS_RSIZE + ovecsize + RWS_ANCHOR_SIZE)\n    return PCRE2_ERROR_HEAPLIMIT;\n  new = mb->memctl.malloc(newsize*sizeof(int), mb->memctl.memory_data);\n  if (new == NULL) return PCRE2_ERROR_NOMEMORY;\n  mb->heap_used += newsizeK;\n  new->next = NULL;\n  new->size = newsize;\n  rws->next = new;\n  }\n\nnew->free = new->size - RWS_ANCHOR_SIZE;\n*rwsptr = new;\nreturn 0;\n}\n\n\n\n/*************************************************\n*     Match a Regular Expression - DFA engine    *\n*************************************************/\n\n/* This internal function applies a compiled pattern to a subject string,\nstarting at a given point, using a DFA engine. This function is called from the\nexternal one, possibly multiple times if the pattern is not anchored. The\nfunction calls itself recursively for some kinds of subpattern.\n\nArguments:\n  mb                the match_data block with fixed information\n  this_start_code   the opening bracket of this subexpression's code\n  current_subject   where we currently are in the subject string\n  start_offset      start offset in the subject string\n  offsets           vector to contain the matching string offsets\n  offsetcount       size of same\n  workspace         vector of workspace\n  wscount           size of same\n  rlevel            function call recursion level\n\nReturns:            > 0 => number of match offset pairs placed in offsets\n                    = 0 => offsets overflowed; longest matches are present\n                     -1 => failed to match\n                   < -1 => some kind of unexpected problem\n\nThe following macros are used for adding states to the two state vectors (one\nfor the current character, one for the following character). */\n\n#define ADD_ACTIVE(x,y) \\\n  if (active_count++ < wscount) \\\n    { \\\n    next_active_state->offset = (x); \\\n    next_active_state->count  = (y); \\\n    next_active_state++; \\\n    } \\\n  else return PCRE2_ERROR_DFA_WSSIZE\n\n#define ADD_ACTIVE_DATA(x,y,z) \\\n  if (active_count++ < wscount) \\\n    { \\\n    next_active_state->offset = (x); \\\n    next_active_state->count  = (y); \\\n    next_active_state->data   = (z); \\\n    next_active_state++; \\\n    } \\\n  else return PCRE2_ERROR_DFA_WSSIZE\n\n#define ADD_NEW(x,y) \\\n  if (new_count++ < wscount) \\\n    { \\\n    next_new_state->offset = (x); \\\n    next_new_state->count  = (y); \\\n    next_new_state++; \\\n    } \\\n  else return PCRE2_ERROR_DFA_WSSIZE\n\n#define ADD_NEW_DATA(x,y,z) \\\n  if (new_count++ < wscount) \\\n    { \\\n    next_new_state->offset = (x); \\\n    next_new_state->count  = (y); \\\n    next_new_state->data   = (z); \\\n    next_new_state++; \\\n    } \\\n  else return PCRE2_ERROR_DFA_WSSIZE\n\n/* And now, here is the code */\n\nstatic int\ninternal_dfa_match(\n  dfa_match_block *mb,\n  PCRE2_SPTR this_start_code,\n  PCRE2_SPTR current_subject,\n  PCRE2_SIZE start_offset,\n  PCRE2_SIZE *offsets,\n  uint32_t offsetcount,\n  int *workspace,\n  int wscount,\n  uint32_t rlevel,\n  int *RWS)\n{\nstateblock *active_states, *new_states, *temp_states;\nstateblock *next_active_state, *next_new_state;\nconst uint8_t *ctypes, *lcc, *fcc;\nPCRE2_SPTR ptr;\nPCRE2_SPTR end_code;\ndfa_recursion_info new_recursive;\nint active_count, new_count, match_count;\n\n/* Some fields in the mb block are frequently referenced, so we load them into\nindependent variables in the hope that this will perform better. */\n\nPCRE2_SPTR start_subject = mb->start_subject;\nPCRE2_SPTR end_subject = mb->end_subject;\nPCRE2_SPTR start_code = mb->start_code;\n\n#ifdef SUPPORT_UNICODE\nBOOL utf = (mb->poptions & PCRE2_UTF) != 0;\nBOOL utf_or_ucp = utf || (mb->poptions & PCRE2_UCP) != 0;\n#else\nBOOL utf = FALSE;\n#endif\n\nBOOL reset_could_continue = FALSE;\n\nif (mb->match_call_count++ >= mb->match_limit) return PCRE2_ERROR_MATCHLIMIT;\nif (rlevel++ > mb->match_limit_depth) return PCRE2_ERROR_DEPTHLIMIT;\noffsetcount &= (uint32_t)(-2);  /* Round down */\n\nwscount -= 2;\nwscount = (wscount - (wscount % (INTS_PER_STATEBLOCK * 2))) /\n          (2 * INTS_PER_STATEBLOCK);\n\nctypes = mb->tables + ctypes_offset;\nlcc = mb->tables + lcc_offset;\nfcc = mb->tables + fcc_offset;\n\nmatch_count = PCRE2_ERROR_NOMATCH;   /* A negative number */\n\nactive_states = (stateblock *)(workspace + 2);\nnext_new_state = new_states = active_states + wscount;\nnew_count = 0;\n\n/* The first thing in any (sub) pattern is a bracket of some sort. Push all\nthe alternative states onto the list, and find out where the end is. This\nmakes is possible to use this function recursively, when we want to stop at a\nmatching internal ket rather than at the end.\n\nIf we are dealing with a backward assertion we have to find out the maximum\namount to move back, and set up each alternative appropriately. */\n\nif (*this_start_code == OP_ASSERTBACK || *this_start_code == OP_ASSERTBACK_NOT)\n  {\n  size_t max_back = 0;\n  size_t gone_back;\n\n  end_code = this_start_code;\n  do\n    {\n    size_t back = (size_t)GET2(end_code, 2+LINK_SIZE);\n    if (back > max_back) max_back = back;\n    end_code += GET(end_code, 1);\n    }\n  while (*end_code == OP_ALT);\n\n  /* If we can't go back the amount required for the longest lookbehind\n  pattern, go back as far as we can; some alternatives may still be viable. */\n\n#ifdef SUPPORT_UNICODE\n  /* In character mode we have to step back character by character */\n\n  if (utf)\n    {\n    for (gone_back = 0; gone_back < max_back; gone_back++)\n      {\n      if (current_subject <= start_subject) break;\n      current_subject--;\n      ACROSSCHAR(current_subject > start_subject, current_subject,\n        current_subject--);\n      }\n    }\n  else\n#endif\n\n  /* In byte-mode we can do this quickly. */\n\n    {\n    size_t current_offset = (size_t)(current_subject - start_subject);\n    gone_back = (current_offset < max_back)? current_offset : max_back;\n    current_subject -= gone_back;\n    }\n\n  /* Save the earliest consulted character */\n\n  if (current_subject < mb->start_used_ptr)\n    mb->start_used_ptr = current_subject;\n\n  /* Now we can process the individual branches. There will be an OP_REVERSE at\n  the start of each branch, except when the length of the branch is zero. */\n\n  end_code = this_start_code;\n  do\n    {\n    uint32_t revlen = (end_code[1+LINK_SIZE] == OP_REVERSE)? 1 + IMM2_SIZE : 0;\n    size_t back = (revlen == 0)? 0 : (size_t)GET2(end_code, 2+LINK_SIZE);\n    if (back <= gone_back)\n      {\n      int bstate = (int)(end_code - start_code + 1 + LINK_SIZE + revlen);\n      ADD_NEW_DATA(-bstate, 0, (int)(gone_back - back));\n      }\n    end_code += GET(end_code, 1);\n    }\n  while (*end_code == OP_ALT);\n }\n\n/* This is the code for a \"normal\" subpattern (not a backward assertion). The\nstart of a whole pattern is always one of these. If we are at the top level,\nwe may be asked to restart matching from the same point that we reached for a\nprevious partial match. We still have to scan through the top-level branches to\nfind the end state. */\n\nelse\n  {\n  end_code = this_start_code;\n\n  /* Restarting */\n\n  if (rlevel == 1 && (mb->moptions & PCRE2_DFA_RESTART) != 0)\n    {\n    do { end_code += GET(end_code, 1); } while (*end_code == OP_ALT);\n    new_count = workspace[1];\n    if (!workspace[0])\n      memcpy(new_states, active_states, (size_t)new_count * sizeof(stateblock));\n    }\n\n  /* Not restarting */\n\n  else\n    {\n    int length = 1 + LINK_SIZE +\n      ((*this_start_code == OP_CBRA || *this_start_code == OP_SCBRA ||\n        *this_start_code == OP_CBRAPOS || *this_start_code == OP_SCBRAPOS)\n        ? IMM2_SIZE:0);\n    do\n      {\n      ADD_NEW((int)(end_code - start_code + length), 0);\n      end_code += GET(end_code, 1);\n      length = 1 + LINK_SIZE;\n      }\n    while (*end_code == OP_ALT);\n    }\n  }\n\nworkspace[0] = 0;    /* Bit indicating which vector is current */\n\n/* Loop for scanning the subject */\n\nptr = current_subject;\nfor (;;)\n  {\n  int i, j;\n  int clen, dlen;\n  uint32_t c, d;\n  BOOL partial_newline = FALSE;\n  BOOL could_continue = reset_could_continue;\n  reset_could_continue = FALSE;\n\n  if (ptr > mb->last_used_ptr) mb->last_used_ptr = ptr;\n\n  /* Make the new state list into the active state list and empty the\n  new state list. */\n\n  temp_states = active_states;\n  active_states = new_states;\n  new_states = temp_states;\n  active_count = new_count;\n  new_count = 0;\n\n  workspace[0] ^= 1;              /* Remember for the restarting feature */\n  workspace[1] = active_count;\n\n  /* Set the pointers for adding new states */\n\n  next_active_state = active_states + active_count;\n  next_new_state = new_states;\n\n  /* Load the current character from the subject outside the loop, as many\n  different states may want to look at it, and we assume that at least one\n  will. */\n\n  if (ptr < end_subject)\n    {\n    clen = 1;        /* Number of data items in the character */\n#ifdef SUPPORT_UNICODE\n    GETCHARLENTEST(c, ptr, clen);\n#else\n    c = *ptr;\n#endif  /* SUPPORT_UNICODE */\n    }\n  else\n    {\n    clen = 0;        /* This indicates the end of the subject */\n    c = NOTACHAR;    /* This value should never actually be used */\n    }\n\n  /* Scan up the active states and act on each one. The result of an action\n  may be to add more states to the currently active list (e.g. on hitting a\n  parenthesis) or it may be to put states on the new list, for considering\n  when we move the character pointer on. */\n\n  for (i = 0; i < active_count; i++)\n    {\n    stateblock *current_state = active_states + i;\n    BOOL caseless = FALSE;\n    PCRE2_SPTR code;\n    uint32_t codevalue;\n    int state_offset = current_state->offset;\n    int rrc;\n    int count;\n\n    /* A negative offset is a special case meaning \"hold off going to this\n    (negated) state until the number of characters in the data field have\n    been skipped\". If the could_continue flag was passed over from a previous\n    state, arrange for it to passed on. */\n\n    if (state_offset < 0)\n      {\n      if (current_state->data > 0)\n        {\n        ADD_NEW_DATA(state_offset, current_state->count,\n          current_state->data - 1);\n        if (could_continue) reset_could_continue = TRUE;\n        continue;\n        }\n      else\n        {\n        current_state->offset = state_offset = -state_offset;\n        }\n      }\n\n    /* Check for a duplicate state with the same count, and skip if found.\n    See the note at the head of this module about the possibility of improving\n    performance here. */\n\n    for (j = 0; j < i; j++)\n      {\n      if (active_states[j].offset == state_offset &&\n          active_states[j].count == current_state->count)\n        goto NEXT_ACTIVE_STATE;\n      }\n\n    /* The state offset is the offset to the opcode */\n\n    code = start_code + state_offset;\n    codevalue = *code;\n\n    /* If this opcode inspects a character, but we are at the end of the\n    subject, remember the fact for use when testing for a partial match. */\n\n    if (clen == 0 && poptable[codevalue] != 0)\n      could_continue = TRUE;\n\n    /* If this opcode is followed by an inline character, load it. It is\n    tempting to test for the presence of a subject character here, but that\n    is wrong, because sometimes zero repetitions of the subject are\n    permitted.\n\n    We also use this mechanism for opcodes such as OP_TYPEPLUS that take an\n    argument that is not a data character - but is always one byte long because\n    the values are small. We have to take special action to deal with  \\P, \\p,\n    \\H, \\h, \\V, \\v and \\X in this case. To keep the other cases fast, convert\n    these ones to new opcodes. */\n\n    if (coptable[codevalue] > 0)\n      {\n      dlen = 1;\n#ifdef SUPPORT_UNICODE\n      if (utf) { GETCHARLEN(d, (code + coptable[codevalue]), dlen); } else\n#endif  /* SUPPORT_UNICODE */\n      d = code[coptable[codevalue]];\n      if (codevalue >= OP_TYPESTAR)\n        {\n        switch(d)\n          {\n          case OP_ANYBYTE: return PCRE2_ERROR_DFA_UITEM;\n          case OP_NOTPROP:\n          case OP_PROP: codevalue += OP_PROP_EXTRA; break;\n          case OP_ANYNL: codevalue += OP_ANYNL_EXTRA; break;\n          case OP_EXTUNI: codevalue += OP_EXTUNI_EXTRA; break;\n          case OP_NOT_HSPACE:\n          case OP_HSPACE: codevalue += OP_HSPACE_EXTRA; break;\n          case OP_NOT_VSPACE:\n          case OP_VSPACE: codevalue += OP_VSPACE_EXTRA; break;\n          default: break;\n          }\n        }\n      }\n    else\n      {\n      dlen = 0;         /* Not strictly necessary, but compilers moan */\n      d = NOTACHAR;     /* if these variables are not set. */\n      }\n\n\n    /* Now process the individual opcodes */\n\n    switch (codevalue)\n      {\n/* ========================================================================== */\n      /* Reached a closing bracket. If not at the end of the pattern, carry\n      on with the next opcode. For repeating opcodes, also add the repeat\n      state. Note that KETRPOS will always be encountered at the end of the\n      subpattern, because the possessive subpattern repeats are always handled\n      using recursive calls. Thus, it never adds any new states.\n\n      At the end of the (sub)pattern, unless we have an empty string and\n      PCRE2_NOTEMPTY is set, or PCRE2_NOTEMPTY_ATSTART is set and we are at the\n      start of the subject, save the match data, shifting up all previous\n      matches so we always have the longest first. */\n\n      case OP_KET:\n      case OP_KETRMIN:\n      case OP_KETRMAX:\n      case OP_KETRPOS:\n      if (code != end_code)\n        {\n        ADD_ACTIVE(state_offset + 1 + LINK_SIZE, 0);\n        if (codevalue != OP_KET)\n          {\n          ADD_ACTIVE(state_offset - (int)GET(code, 1), 0);\n          }\n        }\n      else\n        {\n        if (ptr > current_subject ||\n            ((mb->moptions & PCRE2_NOTEMPTY) == 0 &&\n              ((mb->moptions & PCRE2_NOTEMPTY_ATSTART) == 0 ||\n                current_subject > start_subject + mb->start_offset)))\n          {\n          if (match_count < 0) match_count = (offsetcount >= 2)? 1 : 0;\n            else if (match_count > 0 && ++match_count * 2 > (int)offsetcount)\n              match_count = 0;\n          count = ((match_count == 0)? (int)offsetcount : match_count * 2) - 2;\n          if (count > 0) (void)memmove(offsets + 2, offsets,\n            (size_t)count * sizeof(PCRE2_SIZE));\n          if (offsetcount >= 2)\n            {\n            offsets[0] = (PCRE2_SIZE)(current_subject - start_subject);\n            offsets[1] = (PCRE2_SIZE)(ptr - start_subject);\n            }\n          if ((mb->moptions & PCRE2_DFA_SHORTEST) != 0) return match_count;\n          }\n        }\n      break;\n\n/* ========================================================================== */\n      /* These opcodes add to the current list of states without looking\n      at the current character. */\n\n      /*-----------------------------------------------------------------*/\n      case OP_ALT:\n      do { code += GET(code, 1); } while (*code == OP_ALT);\n      ADD_ACTIVE((int)(code - start_code), 0);\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_BRA:\n      case OP_SBRA:\n      do\n        {\n        ADD_ACTIVE((int)(code - start_code + 1 + LINK_SIZE), 0);\n        code += GET(code, 1);\n        }\n      while (*code == OP_ALT);\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_CBRA:\n      case OP_SCBRA:\n      ADD_ACTIVE((int)(code - start_code + 1 + LINK_SIZE + IMM2_SIZE),  0);\n      code += GET(code, 1);\n      while (*code == OP_ALT)\n        {\n        ADD_ACTIVE((int)(code - start_code + 1 + LINK_SIZE),  0);\n        code += GET(code, 1);\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_BRAZERO:\n      case OP_BRAMINZERO:\n      ADD_ACTIVE(state_offset + 1, 0);\n      code += 1 + GET(code, 2);\n      while (*code == OP_ALT) code += GET(code, 1);\n      ADD_ACTIVE((int)(code - start_code + 1 + LINK_SIZE), 0);\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_SKIPZERO:\n      code += 1 + GET(code, 2);\n      while (*code == OP_ALT) code += GET(code, 1);\n      ADD_ACTIVE((int)(code - start_code + 1 + LINK_SIZE), 0);\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_CIRC:\n      if (ptr == start_subject && (mb->moptions & PCRE2_NOTBOL) == 0)\n        { ADD_ACTIVE(state_offset + 1, 0); }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_CIRCM:\n      if ((ptr == start_subject && (mb->moptions & PCRE2_NOTBOL) == 0) ||\n          ((ptr != end_subject || (mb->poptions & PCRE2_ALT_CIRCUMFLEX) != 0 )\n            && WAS_NEWLINE(ptr)))\n        { ADD_ACTIVE(state_offset + 1, 0); }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_EOD:\n      if (ptr >= end_subject)\n        {\n        if ((mb->moptions & PCRE2_PARTIAL_HARD) != 0)\n          return PCRE2_ERROR_PARTIAL;\n        else { ADD_ACTIVE(state_offset + 1, 0); }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_SOD:\n      if (ptr == start_subject) { ADD_ACTIVE(state_offset + 1, 0); }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_SOM:\n      if (ptr == start_subject + start_offset) { ADD_ACTIVE(state_offset + 1, 0); }\n      break;\n\n\n/* ========================================================================== */\n      /* These opcodes inspect the next subject character, and sometimes\n      the previous one as well, but do not have an argument. The variable\n      clen contains the length of the current character and is zero if we are\n      at the end of the subject. */\n\n      /*-----------------------------------------------------------------*/\n      case OP_ANY:\n      if (clen > 0 && !IS_NEWLINE(ptr))\n        {\n        if (ptr + 1 >= mb->end_subject &&\n            (mb->moptions & (PCRE2_PARTIAL_HARD)) != 0 &&\n            NLBLOCK->nltype == NLTYPE_FIXED &&\n            NLBLOCK->nllen == 2 &&\n            c == NLBLOCK->nl[0])\n          {\n          could_continue = partial_newline = TRUE;\n          }\n        else\n          {\n          ADD_NEW(state_offset + 1, 0);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_ALLANY:\n      if (clen > 0)\n        { ADD_NEW(state_offset + 1, 0); }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_EODN:\n      if (clen == 0 || (IS_NEWLINE(ptr) && ptr == end_subject - mb->nllen))\n        {\n        if ((mb->moptions & PCRE2_PARTIAL_HARD) != 0)\n          return PCRE2_ERROR_PARTIAL;\n        ADD_ACTIVE(state_offset + 1, 0);\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_DOLL:\n      if ((mb->moptions & PCRE2_NOTEOL) == 0)\n        {\n        if (clen == 0 && (mb->moptions & PCRE2_PARTIAL_HARD) != 0)\n          could_continue = TRUE;\n        else if (clen == 0 ||\n            ((mb->poptions & PCRE2_DOLLAR_ENDONLY) == 0 && IS_NEWLINE(ptr) &&\n               (ptr == end_subject - mb->nllen)\n            ))\n          { ADD_ACTIVE(state_offset + 1, 0); }\n        else if (ptr + 1 >= mb->end_subject &&\n                 (mb->moptions & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0 &&\n                 NLBLOCK->nltype == NLTYPE_FIXED &&\n                 NLBLOCK->nllen == 2 &&\n                 c == NLBLOCK->nl[0])\n          {\n          if ((mb->moptions & PCRE2_PARTIAL_HARD) != 0)\n            {\n            reset_could_continue = TRUE;\n            ADD_NEW_DATA(-(state_offset + 1), 0, 1);\n            }\n          else could_continue = partial_newline = TRUE;\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_DOLLM:\n      if ((mb->moptions & PCRE2_NOTEOL) == 0)\n        {\n        if (clen == 0 && (mb->moptions & PCRE2_PARTIAL_HARD) != 0)\n          could_continue = TRUE;\n        else if (clen == 0 ||\n            ((mb->poptions & PCRE2_DOLLAR_ENDONLY) == 0 && IS_NEWLINE(ptr)))\n          { ADD_ACTIVE(state_offset + 1, 0); }\n        else if (ptr + 1 >= mb->end_subject &&\n                 (mb->moptions & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0 &&\n                 NLBLOCK->nltype == NLTYPE_FIXED &&\n                 NLBLOCK->nllen == 2 &&\n                 c == NLBLOCK->nl[0])\n          {\n          if ((mb->moptions & PCRE2_PARTIAL_HARD) != 0)\n            {\n            reset_could_continue = TRUE;\n            ADD_NEW_DATA(-(state_offset + 1), 0, 1);\n            }\n          else could_continue = partial_newline = TRUE;\n          }\n        }\n      else if (IS_NEWLINE(ptr))\n        { ADD_ACTIVE(state_offset + 1, 0); }\n      break;\n\n      /*-----------------------------------------------------------------*/\n\n      case OP_DIGIT:\n      case OP_WHITESPACE:\n      case OP_WORDCHAR:\n      if (clen > 0 && c < 256 &&\n            ((ctypes[c] & toptable1[codevalue]) ^ toptable2[codevalue]) != 0)\n        { ADD_NEW(state_offset + 1, 0); }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_NOT_DIGIT:\n      case OP_NOT_WHITESPACE:\n      case OP_NOT_WORDCHAR:\n      if (clen > 0 && (c >= 256 ||\n            ((ctypes[c] & toptable1[codevalue]) ^ toptable2[codevalue]) != 0))\n        { ADD_NEW(state_offset + 1, 0); }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_WORD_BOUNDARY:\n      case OP_NOT_WORD_BOUNDARY:\n      case OP_NOT_UCP_WORD_BOUNDARY:\n      case OP_UCP_WORD_BOUNDARY:\n        {\n        int left_word, right_word;\n\n        if (ptr > start_subject)\n          {\n          PCRE2_SPTR temp = ptr - 1;\n          if (temp < mb->start_used_ptr) mb->start_used_ptr = temp;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n          if (utf) { BACKCHAR(temp); }\n#endif\n          GETCHARTEST(d, temp);\n#ifdef SUPPORT_UNICODE\n          if (codevalue == OP_UCP_WORD_BOUNDARY ||\n              codevalue == OP_NOT_UCP_WORD_BOUNDARY)\n            {\n            int chartype = UCD_CHARTYPE(d);\n            int category = PRIV(ucp_gentype)[chartype];\n            left_word = (category == ucp_L || category == ucp_N ||\n              chartype == ucp_Mn || chartype == ucp_Pc);\n            }\n          else\n#endif\n          left_word = d < 256 && (ctypes[d] & ctype_word) != 0;\n          }\n        else left_word = FALSE;\n\n        if (clen > 0)\n          {\n          if (ptr >= mb->last_used_ptr)\n            {\n            PCRE2_SPTR temp = ptr + 1;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n            if (utf) { FORWARDCHARTEST(temp, mb->end_subject); }\n#endif\n            mb->last_used_ptr = temp;\n            }\n#ifdef SUPPORT_UNICODE\n          if (codevalue == OP_UCP_WORD_BOUNDARY ||\n              codevalue == OP_NOT_UCP_WORD_BOUNDARY)\n            {\n            int chartype = UCD_CHARTYPE(c);\n            int category = PRIV(ucp_gentype)[chartype];\n            right_word = (category == ucp_L || category == ucp_N ||\n              chartype == ucp_Mn || chartype == ucp_Pc);\n            }\n          else\n#endif\n          right_word = c < 256 && (ctypes[c] & ctype_word) != 0;\n          }\n        else right_word = FALSE;\n\n        if ((left_word == right_word) ==\n            (codevalue == OP_NOT_WORD_BOUNDARY ||\n             codevalue == OP_NOT_UCP_WORD_BOUNDARY))\n          { ADD_ACTIVE(state_offset + 1, 0); }\n        }\n      break;\n\n\n      /*-----------------------------------------------------------------*/\n      /* Check the next character by Unicode property. We will get here only\n      if the support is in the binary; otherwise a compile-time error occurs.\n      */\n\n#ifdef SUPPORT_UNICODE\n      case OP_PROP:\n      case OP_NOTPROP:\n      if (clen > 0)\n        {\n        BOOL OK;\n        int chartype;\n        const uint32_t *cp;\n        const ucd_record * prop = GET_UCD(c);\n        switch(code[1])\n          {\n          case PT_LAMP:\n          chartype = prop->chartype;\n          OK = chartype == ucp_Lu || chartype == ucp_Ll ||\n               chartype == ucp_Lt;\n          break;\n\n          case PT_GC:\n          OK = PRIV(ucp_gentype)[prop->chartype] == code[2];\n          break;\n\n          case PT_PC:\n          OK = prop->chartype == code[2];\n          break;\n\n          case PT_SC:\n          OK = prop->script == code[2];\n          break;\n\n          case PT_SCX:\n          OK = (prop->script == code[2] ||\n                MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), code[2]) != 0);\n          break;\n\n          /* These are specials for combination cases. */\n\n          case PT_ALNUM:\n          chartype = prop->chartype;\n          OK = PRIV(ucp_gentype)[chartype] == ucp_L ||\n               PRIV(ucp_gentype)[chartype] == ucp_N;\n          break;\n\n          /* Perl space used to exclude VT, but from Perl 5.18 it is included,\n          which means that Perl space and POSIX space are now identical. PCRE\n          was changed at release 8.34. */\n\n          case PT_SPACE:    /* Perl space */\n          case PT_PXSPACE:  /* POSIX space */\n          switch(c)\n            {\n            HSPACE_CASES:\n            VSPACE_CASES:\n            OK = TRUE;\n            break;\n\n            default:\n            OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;\n            break;\n            }\n          break;\n\n          case PT_WORD:\n          chartype = prop->chartype;\n          OK = PRIV(ucp_gentype)[chartype] == ucp_L ||\n               PRIV(ucp_gentype)[chartype] == ucp_N ||\n               chartype == ucp_Mn || chartype == ucp_Pc;\n          break;\n\n          case PT_CLIST:\n#if PCRE2_CODE_UNIT_WIDTH == 32\n          if (c > MAX_UTF_CODE_POINT)\n            {\n            OK = FALSE;\n            break;\n            }\n#endif\n          cp = PRIV(ucd_caseless_sets) + code[2];\n          for (;;)\n            {\n            if (c < *cp) { OK = FALSE; break; }\n            if (c == *cp++) { OK = TRUE; break; }\n            }\n          break;\n\n          case PT_UCNC:\n          OK = c == CHAR_DOLLAR_SIGN || c == CHAR_COMMERCIAL_AT ||\n               c == CHAR_GRAVE_ACCENT || (c >= 0xa0 && c <= 0xd7ff) ||\n               c >= 0xe000;\n          break;\n\n          case PT_BIDICL:\n          OK = UCD_BIDICLASS(c) == code[2];\n          break;\n\n          case PT_BOOL:\n          OK = MAPBIT(PRIV(ucd_boolprop_sets) +\n            UCD_BPROPS_PROP(prop), code[2]) != 0;\n          break;\n\n          /* Should never occur, but keep compilers from grumbling. */\n\n          default:\n          OK = codevalue != OP_PROP;\n          break;\n          }\n\n        if (OK == (codevalue == OP_PROP)) { ADD_NEW(state_offset + 3, 0); }\n        }\n      break;\n#endif\n\n\n\n/* ========================================================================== */\n      /* These opcodes likewise inspect the subject character, but have an\n      argument that is not a data character. It is one of these opcodes:\n      OP_ANY, OP_ALLANY, OP_DIGIT, OP_NOT_DIGIT, OP_WHITESPACE, OP_NOT_SPACE,\n      OP_WORDCHAR, OP_NOT_WORDCHAR. The value is loaded into d. */\n\n      case OP_TYPEPLUS:\n      case OP_TYPEMINPLUS:\n      case OP_TYPEPOSPLUS:\n      count = current_state->count;  /* Already matched */\n      if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); }\n      if (clen > 0)\n        {\n        if (d == OP_ANY && ptr + 1 >= mb->end_subject &&\n            (mb->moptions & (PCRE2_PARTIAL_HARD)) != 0 &&\n            NLBLOCK->nltype == NLTYPE_FIXED &&\n            NLBLOCK->nllen == 2 &&\n            c == NLBLOCK->nl[0])\n          {\n          could_continue = partial_newline = TRUE;\n          }\n        else if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) ||\n            (c < 256 &&\n              (d != OP_ANY || !IS_NEWLINE(ptr)) &&\n              ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0))\n          {\n          if (count > 0 && codevalue == OP_TYPEPOSPLUS)\n            {\n            active_count--;            /* Remove non-match possibility */\n            next_active_state--;\n            }\n          count++;\n          ADD_NEW(state_offset, count);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_TYPEQUERY:\n      case OP_TYPEMINQUERY:\n      case OP_TYPEPOSQUERY:\n      ADD_ACTIVE(state_offset + 2, 0);\n      if (clen > 0)\n        {\n        if (d == OP_ANY && ptr + 1 >= mb->end_subject &&\n            (mb->moptions & (PCRE2_PARTIAL_HARD)) != 0 &&\n            NLBLOCK->nltype == NLTYPE_FIXED &&\n            NLBLOCK->nllen == 2 &&\n            c == NLBLOCK->nl[0])\n          {\n          could_continue = partial_newline = TRUE;\n          }\n        else if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) ||\n            (c < 256 &&\n              (d != OP_ANY || !IS_NEWLINE(ptr)) &&\n              ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0))\n          {\n          if (codevalue == OP_TYPEPOSQUERY)\n            {\n            active_count--;            /* Remove non-match possibility */\n            next_active_state--;\n            }\n          ADD_NEW(state_offset + 2, 0);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_TYPESTAR:\n      case OP_TYPEMINSTAR:\n      case OP_TYPEPOSSTAR:\n      ADD_ACTIVE(state_offset + 2, 0);\n      if (clen > 0)\n        {\n        if (d == OP_ANY && ptr + 1 >= mb->end_subject &&\n            (mb->moptions & (PCRE2_PARTIAL_HARD)) != 0 &&\n            NLBLOCK->nltype == NLTYPE_FIXED &&\n            NLBLOCK->nllen == 2 &&\n            c == NLBLOCK->nl[0])\n          {\n          could_continue = partial_newline = TRUE;\n          }\n        else if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) ||\n            (c < 256 &&\n              (d != OP_ANY || !IS_NEWLINE(ptr)) &&\n              ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0))\n          {\n          if (codevalue == OP_TYPEPOSSTAR)\n            {\n            active_count--;            /* Remove non-match possibility */\n            next_active_state--;\n            }\n          ADD_NEW(state_offset, 0);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_TYPEEXACT:\n      count = current_state->count;  /* Number already matched */\n      if (clen > 0)\n        {\n        if (d == OP_ANY && ptr + 1 >= mb->end_subject &&\n            (mb->moptions & (PCRE2_PARTIAL_HARD)) != 0 &&\n            NLBLOCK->nltype == NLTYPE_FIXED &&\n            NLBLOCK->nllen == 2 &&\n            c == NLBLOCK->nl[0])\n          {\n          could_continue = partial_newline = TRUE;\n          }\n        else if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) ||\n            (c < 256 &&\n              (d != OP_ANY || !IS_NEWLINE(ptr)) &&\n              ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0))\n          {\n          if (++count >= (int)GET2(code, 1))\n            { ADD_NEW(state_offset + 1 + IMM2_SIZE + 1, 0); }\n          else\n            { ADD_NEW(state_offset, count); }\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_TYPEUPTO:\n      case OP_TYPEMINUPTO:\n      case OP_TYPEPOSUPTO:\n      ADD_ACTIVE(state_offset + 2 + IMM2_SIZE, 0);\n      count = current_state->count;  /* Number already matched */\n      if (clen > 0)\n        {\n        if (d == OP_ANY && ptr + 1 >= mb->end_subject &&\n            (mb->moptions & (PCRE2_PARTIAL_HARD)) != 0 &&\n            NLBLOCK->nltype == NLTYPE_FIXED &&\n            NLBLOCK->nllen == 2 &&\n            c == NLBLOCK->nl[0])\n          {\n          could_continue = partial_newline = TRUE;\n          }\n        else if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) ||\n            (c < 256 &&\n              (d != OP_ANY || !IS_NEWLINE(ptr)) &&\n              ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0))\n          {\n          if (codevalue == OP_TYPEPOSUPTO)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          if (++count >= (int)GET2(code, 1))\n            { ADD_NEW(state_offset + 2 + IMM2_SIZE, 0); }\n          else\n            { ADD_NEW(state_offset, count); }\n          }\n        }\n      break;\n\n/* ========================================================================== */\n      /* These are virtual opcodes that are used when something like\n      OP_TYPEPLUS has OP_PROP, OP_NOTPROP, OP_ANYNL, or OP_EXTUNI as its\n      argument. It keeps the code above fast for the other cases. The argument\n      is in the d variable. */\n\n#ifdef SUPPORT_UNICODE\n      case OP_PROP_EXTRA + OP_TYPEPLUS:\n      case OP_PROP_EXTRA + OP_TYPEMINPLUS:\n      case OP_PROP_EXTRA + OP_TYPEPOSPLUS:\n      count = current_state->count;           /* Already matched */\n      if (count > 0) { ADD_ACTIVE(state_offset + 4, 0); }\n      if (clen > 0)\n        {\n        BOOL OK;\n        int chartype;\n        const uint32_t *cp;\n        const ucd_record * prop = GET_UCD(c);\n        switch(code[2])\n          {\n          case PT_LAMP:\n          chartype = prop->chartype;\n          OK = chartype == ucp_Lu || chartype == ucp_Ll || chartype == ucp_Lt;\n          break;\n\n          case PT_GC:\n          OK = PRIV(ucp_gentype)[prop->chartype] == code[3];\n          break;\n\n          case PT_PC:\n          OK = prop->chartype == code[3];\n          break;\n\n          case PT_SC:\n          OK = prop->script == code[3];\n          break;\n\n          case PT_SCX:\n          OK = (prop->script == code[3] ||\n                MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), code[3]) != 0);\n          break;\n\n          /* These are specials for combination cases. */\n\n          case PT_ALNUM:\n          chartype = prop->chartype;\n          OK = PRIV(ucp_gentype)[chartype] == ucp_L ||\n               PRIV(ucp_gentype)[chartype] == ucp_N;\n          break;\n\n          /* Perl space used to exclude VT, but from Perl 5.18 it is included,\n          which means that Perl space and POSIX space are now identical. PCRE\n          was changed at release 8.34. */\n\n          case PT_SPACE:    /* Perl space */\n          case PT_PXSPACE:  /* POSIX space */\n          switch(c)\n            {\n            HSPACE_CASES:\n            VSPACE_CASES:\n            OK = TRUE;\n            break;\n\n            default:\n            OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;\n            break;\n            }\n          break;\n\n          case PT_WORD:\n          chartype = prop->chartype;\n          OK = PRIV(ucp_gentype)[chartype] == ucp_L ||\n               PRIV(ucp_gentype)[chartype] == ucp_N ||\n               chartype == ucp_Mn || chartype == ucp_Pc;\n          break;\n\n          case PT_CLIST:\n#if PCRE2_CODE_UNIT_WIDTH == 32\n          if (c > MAX_UTF_CODE_POINT)\n            {\n            OK = FALSE;\n            break;\n            }\n#endif\n          cp = PRIV(ucd_caseless_sets) + code[3];\n          for (;;)\n            {\n            if (c < *cp) { OK = FALSE; break; }\n            if (c == *cp++) { OK = TRUE; break; }\n            }\n          break;\n\n          case PT_UCNC:\n          OK = c == CHAR_DOLLAR_SIGN || c == CHAR_COMMERCIAL_AT ||\n               c == CHAR_GRAVE_ACCENT || (c >= 0xa0 && c <= 0xd7ff) ||\n               c >= 0xe000;\n          break;\n\n          case PT_BIDICL:\n          OK = UCD_BIDICLASS(c) == code[3];\n          break;\n\n          case PT_BOOL:\n          OK = MAPBIT(PRIV(ucd_boolprop_sets) +\n            UCD_BPROPS_PROP(prop), code[3]) != 0;\n          break;\n\n          /* Should never occur, but keep compilers from grumbling. */\n\n          default:\n          OK = codevalue != OP_PROP;\n          break;\n          }\n\n        if (OK == (d == OP_PROP))\n          {\n          if (count > 0 && codevalue == OP_PROP_EXTRA + OP_TYPEPOSPLUS)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          count++;\n          ADD_NEW(state_offset, count);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_EXTUNI_EXTRA + OP_TYPEPLUS:\n      case OP_EXTUNI_EXTRA + OP_TYPEMINPLUS:\n      case OP_EXTUNI_EXTRA + OP_TYPEPOSPLUS:\n      count = current_state->count;  /* Already matched */\n      if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); }\n      if (clen > 0)\n        {\n        int ncount = 0;\n        if (count > 0 && codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSPLUS)\n          {\n          active_count--;           /* Remove non-match possibility */\n          next_active_state--;\n          }\n        (void)PRIV(extuni)(c, ptr + clen, mb->start_subject, end_subject, utf,\n          &ncount);\n        count++;\n        ADD_NEW_DATA(-state_offset, count, ncount);\n        }\n      break;\n#endif\n\n      /*-----------------------------------------------------------------*/\n      case OP_ANYNL_EXTRA + OP_TYPEPLUS:\n      case OP_ANYNL_EXTRA + OP_TYPEMINPLUS:\n      case OP_ANYNL_EXTRA + OP_TYPEPOSPLUS:\n      count = current_state->count;  /* Already matched */\n      if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); }\n      if (clen > 0)\n        {\n        int ncount = 0;\n        switch (c)\n          {\n          case CHAR_VT:\n          case CHAR_FF:\n          case CHAR_NEL:\n#ifndef EBCDIC\n          case 0x2028:\n          case 0x2029:\n#endif  /* Not EBCDIC */\n          if (mb->bsr_convention == PCRE2_BSR_ANYCRLF) break;\n          goto ANYNL01;\n\n          case CHAR_CR:\n          if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1;\n          /* Fall through */\n\n          ANYNL01:\n          case CHAR_LF:\n          if (count > 0 && codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSPLUS)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          count++;\n          ADD_NEW_DATA(-state_offset, count, ncount);\n          break;\n\n          default:\n          break;\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_VSPACE_EXTRA + OP_TYPEPLUS:\n      case OP_VSPACE_EXTRA + OP_TYPEMINPLUS:\n      case OP_VSPACE_EXTRA + OP_TYPEPOSPLUS:\n      count = current_state->count;  /* Already matched */\n      if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); }\n      if (clen > 0)\n        {\n        BOOL OK;\n        switch (c)\n          {\n          VSPACE_CASES:\n          OK = TRUE;\n          break;\n\n          default:\n          OK = FALSE;\n          break;\n          }\n\n        if (OK == (d == OP_VSPACE))\n          {\n          if (count > 0 && codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSPLUS)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          count++;\n          ADD_NEW_DATA(-state_offset, count, 0);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_HSPACE_EXTRA + OP_TYPEPLUS:\n      case OP_HSPACE_EXTRA + OP_TYPEMINPLUS:\n      case OP_HSPACE_EXTRA + OP_TYPEPOSPLUS:\n      count = current_state->count;  /* Already matched */\n      if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); }\n      if (clen > 0)\n        {\n        BOOL OK;\n        switch (c)\n          {\n          HSPACE_CASES:\n          OK = TRUE;\n          break;\n\n          default:\n          OK = FALSE;\n          break;\n          }\n\n        if (OK == (d == OP_HSPACE))\n          {\n          if (count > 0 && codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSPLUS)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          count++;\n          ADD_NEW_DATA(-state_offset, count, 0);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n#ifdef SUPPORT_UNICODE\n      case OP_PROP_EXTRA + OP_TYPEQUERY:\n      case OP_PROP_EXTRA + OP_TYPEMINQUERY:\n      case OP_PROP_EXTRA + OP_TYPEPOSQUERY:\n      count = 4;\n      goto QS1;\n\n      case OP_PROP_EXTRA + OP_TYPESTAR:\n      case OP_PROP_EXTRA + OP_TYPEMINSTAR:\n      case OP_PROP_EXTRA + OP_TYPEPOSSTAR:\n      count = 0;\n\n      QS1:\n\n      ADD_ACTIVE(state_offset + 4, 0);\n      if (clen > 0)\n        {\n        BOOL OK;\n        int chartype;\n        const uint32_t *cp;\n        const ucd_record * prop = GET_UCD(c);\n        switch(code[2])\n          {\n          case PT_LAMP:\n          chartype = prop->chartype;\n          OK = chartype == ucp_Lu || chartype == ucp_Ll || chartype == ucp_Lt;\n          break;\n\n          case PT_GC:\n          OK = PRIV(ucp_gentype)[prop->chartype] == code[3];\n          break;\n\n          case PT_PC:\n          OK = prop->chartype == code[3];\n          break;\n\n          case PT_SC:\n          OK = prop->script == code[3];\n          break;\n\n          case PT_SCX:\n          OK = (prop->script == code[3] ||\n                MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), code[3]) != 0);\n          break;\n\n          /* These are specials for combination cases. */\n\n          case PT_ALNUM:\n          chartype = prop->chartype;\n          OK = PRIV(ucp_gentype)[chartype] == ucp_L ||\n               PRIV(ucp_gentype)[chartype] == ucp_N;\n          break;\n\n          /* Perl space used to exclude VT, but from Perl 5.18 it is included,\n          which means that Perl space and POSIX space are now identical. PCRE\n          was changed at release 8.34. */\n\n          case PT_SPACE:    /* Perl space */\n          case PT_PXSPACE:  /* POSIX space */\n          switch(c)\n            {\n            HSPACE_CASES:\n            VSPACE_CASES:\n            OK = TRUE;\n            break;\n\n            default:\n            OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;\n            break;\n            }\n          break;\n\n          case PT_WORD:\n          chartype = prop->chartype;\n          OK = PRIV(ucp_gentype)[chartype] == ucp_L ||\n               PRIV(ucp_gentype)[chartype] == ucp_N ||\n               chartype == ucp_Mn || chartype == ucp_Pc;\n          break;\n\n          case PT_CLIST:\n#if PCRE2_CODE_UNIT_WIDTH == 32\n          if (c > MAX_UTF_CODE_POINT)\n            {\n            OK = FALSE;\n            break;\n            }\n#endif\n          cp = PRIV(ucd_caseless_sets) + code[3];\n          for (;;)\n            {\n            if (c < *cp) { OK = FALSE; break; }\n            if (c == *cp++) { OK = TRUE; break; }\n            }\n          break;\n\n          case PT_UCNC:\n          OK = c == CHAR_DOLLAR_SIGN || c == CHAR_COMMERCIAL_AT ||\n               c == CHAR_GRAVE_ACCENT || (c >= 0xa0 && c <= 0xd7ff) ||\n               c >= 0xe000;\n          break;\n\n          case PT_BIDICL:\n          OK = UCD_BIDICLASS(c) == code[3];\n          break;\n\n          case PT_BOOL:\n          OK = MAPBIT(PRIV(ucd_boolprop_sets) +\n            UCD_BPROPS_PROP(prop), code[3]) != 0;\n          break;\n\n          /* Should never occur, but keep compilers from grumbling. */\n\n          default:\n          OK = codevalue != OP_PROP;\n          break;\n          }\n\n        if (OK == (d == OP_PROP))\n          {\n          if (codevalue == OP_PROP_EXTRA + OP_TYPEPOSSTAR ||\n              codevalue == OP_PROP_EXTRA + OP_TYPEPOSQUERY)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          ADD_NEW(state_offset + count, 0);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_EXTUNI_EXTRA + OP_TYPEQUERY:\n      case OP_EXTUNI_EXTRA + OP_TYPEMINQUERY:\n      case OP_EXTUNI_EXTRA + OP_TYPEPOSQUERY:\n      count = 2;\n      goto QS2;\n\n      case OP_EXTUNI_EXTRA + OP_TYPESTAR:\n      case OP_EXTUNI_EXTRA + OP_TYPEMINSTAR:\n      case OP_EXTUNI_EXTRA + OP_TYPEPOSSTAR:\n      count = 0;\n\n      QS2:\n\n      ADD_ACTIVE(state_offset + 2, 0);\n      if (clen > 0)\n        {\n        int ncount = 0;\n        if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSSTAR ||\n            codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSQUERY)\n          {\n          active_count--;           /* Remove non-match possibility */\n          next_active_state--;\n          }\n        (void)PRIV(extuni)(c, ptr + clen, mb->start_subject, end_subject, utf,\n          &ncount);\n        ADD_NEW_DATA(-(state_offset + count), 0, ncount);\n        }\n      break;\n#endif\n\n      /*-----------------------------------------------------------------*/\n      case OP_ANYNL_EXTRA + OP_TYPEQUERY:\n      case OP_ANYNL_EXTRA + OP_TYPEMINQUERY:\n      case OP_ANYNL_EXTRA + OP_TYPEPOSQUERY:\n      count = 2;\n      goto QS3;\n\n      case OP_ANYNL_EXTRA + OP_TYPESTAR:\n      case OP_ANYNL_EXTRA + OP_TYPEMINSTAR:\n      case OP_ANYNL_EXTRA + OP_TYPEPOSSTAR:\n      count = 0;\n\n      QS3:\n      ADD_ACTIVE(state_offset + 2, 0);\n      if (clen > 0)\n        {\n        int ncount = 0;\n        switch (c)\n          {\n          case CHAR_VT:\n          case CHAR_FF:\n          case CHAR_NEL:\n#ifndef EBCDIC\n          case 0x2028:\n          case 0x2029:\n#endif  /* Not EBCDIC */\n          if (mb->bsr_convention == PCRE2_BSR_ANYCRLF) break;\n          goto ANYNL02;\n\n          case CHAR_CR:\n          if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1;\n          /* Fall through */\n\n          ANYNL02:\n          case CHAR_LF:\n          if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSSTAR ||\n              codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSQUERY)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          ADD_NEW_DATA(-(state_offset + (int)count), 0, ncount);\n          break;\n\n          default:\n          break;\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_VSPACE_EXTRA + OP_TYPEQUERY:\n      case OP_VSPACE_EXTRA + OP_TYPEMINQUERY:\n      case OP_VSPACE_EXTRA + OP_TYPEPOSQUERY:\n      count = 2;\n      goto QS4;\n\n      case OP_VSPACE_EXTRA + OP_TYPESTAR:\n      case OP_VSPACE_EXTRA + OP_TYPEMINSTAR:\n      case OP_VSPACE_EXTRA + OP_TYPEPOSSTAR:\n      count = 0;\n\n      QS4:\n      ADD_ACTIVE(state_offset + 2, 0);\n      if (clen > 0)\n        {\n        BOOL OK;\n        switch (c)\n          {\n          VSPACE_CASES:\n          OK = TRUE;\n          break;\n\n          default:\n          OK = FALSE;\n          break;\n          }\n        if (OK == (d == OP_VSPACE))\n          {\n          if (codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSSTAR ||\n              codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSQUERY)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          ADD_NEW_DATA(-(state_offset + (int)count), 0, 0);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_HSPACE_EXTRA + OP_TYPEQUERY:\n      case OP_HSPACE_EXTRA + OP_TYPEMINQUERY:\n      case OP_HSPACE_EXTRA + OP_TYPEPOSQUERY:\n      count = 2;\n      goto QS5;\n\n      case OP_HSPACE_EXTRA + OP_TYPESTAR:\n      case OP_HSPACE_EXTRA + OP_TYPEMINSTAR:\n      case OP_HSPACE_EXTRA + OP_TYPEPOSSTAR:\n      count = 0;\n\n      QS5:\n      ADD_ACTIVE(state_offset + 2, 0);\n      if (clen > 0)\n        {\n        BOOL OK;\n        switch (c)\n          {\n          HSPACE_CASES:\n          OK = TRUE;\n          break;\n\n          default:\n          OK = FALSE;\n          break;\n          }\n\n        if (OK == (d == OP_HSPACE))\n          {\n          if (codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSSTAR ||\n              codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSQUERY)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          ADD_NEW_DATA(-(state_offset + (int)count), 0, 0);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n#ifdef SUPPORT_UNICODE\n      case OP_PROP_EXTRA + OP_TYPEEXACT:\n      case OP_PROP_EXTRA + OP_TYPEUPTO:\n      case OP_PROP_EXTRA + OP_TYPEMINUPTO:\n      case OP_PROP_EXTRA + OP_TYPEPOSUPTO:\n      if (codevalue != OP_PROP_EXTRA + OP_TYPEEXACT)\n        { ADD_ACTIVE(state_offset + 1 + IMM2_SIZE + 3, 0); }\n      count = current_state->count;  /* Number already matched */\n      if (clen > 0)\n        {\n        BOOL OK;\n        int chartype;\n        const uint32_t *cp;\n        const ucd_record * prop = GET_UCD(c);\n        switch(code[1 + IMM2_SIZE + 1])\n          {\n          case PT_LAMP:\n          chartype = prop->chartype;\n          OK = chartype == ucp_Lu || chartype == ucp_Ll || chartype == ucp_Lt;\n          break;\n\n          case PT_GC:\n          OK = PRIV(ucp_gentype)[prop->chartype] == code[1 + IMM2_SIZE + 2];\n          break;\n\n          case PT_PC:\n          OK = prop->chartype == code[1 + IMM2_SIZE + 2];\n          break;\n\n          case PT_SC:\n          OK = prop->script == code[1 + IMM2_SIZE + 2];\n          break;\n\n          case PT_SCX:\n          OK = (prop->script == code[1 + IMM2_SIZE + 2] ||\n                MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop),\n                  code[1 + IMM2_SIZE + 2]) != 0);\n          break;\n\n          /* These are specials for combination cases. */\n\n          case PT_ALNUM:\n          chartype = prop->chartype;\n          OK = PRIV(ucp_gentype)[chartype] == ucp_L ||\n               PRIV(ucp_gentype)[chartype] == ucp_N;\n          break;\n\n          /* Perl space used to exclude VT, but from Perl 5.18 it is included,\n          which means that Perl space and POSIX space are now identical. PCRE\n          was changed at release 8.34. */\n\n          case PT_SPACE:    /* Perl space */\n          case PT_PXSPACE:  /* POSIX space */\n          switch(c)\n            {\n            HSPACE_CASES:\n            VSPACE_CASES:\n            OK = TRUE;\n            break;\n\n            default:\n            OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;\n            break;\n            }\n          break;\n\n          case PT_WORD:\n          chartype = prop->chartype;\n          OK = PRIV(ucp_gentype)[chartype] == ucp_L ||\n               PRIV(ucp_gentype)[chartype] == ucp_N ||\n               chartype == ucp_Mn || chartype == ucp_Pc;\n          break;\n\n          case PT_CLIST:\n#if PCRE2_CODE_UNIT_WIDTH == 32\n          if (c > MAX_UTF_CODE_POINT)\n            {\n            OK = FALSE;\n            break;\n            }\n#endif\n          cp = PRIV(ucd_caseless_sets) + code[1 + IMM2_SIZE + 2];\n          for (;;)\n            {\n            if (c < *cp) { OK = FALSE; break; }\n            if (c == *cp++) { OK = TRUE; break; }\n            }\n          break;\n\n          case PT_UCNC:\n          OK = c == CHAR_DOLLAR_SIGN || c == CHAR_COMMERCIAL_AT ||\n               c == CHAR_GRAVE_ACCENT || (c >= 0xa0 && c <= 0xd7ff) ||\n               c >= 0xe000;\n          break;\n\n          case PT_BIDICL:\n          OK = UCD_BIDICLASS(c) == code[1 + IMM2_SIZE + 2];\n          break;\n\n          case PT_BOOL:\n          OK = MAPBIT(PRIV(ucd_boolprop_sets) +\n            UCD_BPROPS_PROP(prop), code[1 + IMM2_SIZE + 2]) != 0;\n          break;\n\n          /* Should never occur, but keep compilers from grumbling. */\n\n          default:\n          OK = codevalue != OP_PROP;\n          break;\n          }\n\n        if (OK == (d == OP_PROP))\n          {\n          if (codevalue == OP_PROP_EXTRA + OP_TYPEPOSUPTO)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          if (++count >= (int)GET2(code, 1))\n            { ADD_NEW(state_offset + 1 + IMM2_SIZE + 3, 0); }\n          else\n            { ADD_NEW(state_offset, count); }\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_EXTUNI_EXTRA + OP_TYPEEXACT:\n      case OP_EXTUNI_EXTRA + OP_TYPEUPTO:\n      case OP_EXTUNI_EXTRA + OP_TYPEMINUPTO:\n      case OP_EXTUNI_EXTRA + OP_TYPEPOSUPTO:\n      if (codevalue != OP_EXTUNI_EXTRA + OP_TYPEEXACT)\n        { ADD_ACTIVE(state_offset + 2 + IMM2_SIZE, 0); }\n      count = current_state->count;  /* Number already matched */\n      if (clen > 0)\n        {\n        PCRE2_SPTR nptr;\n        int ncount = 0;\n        if (codevalue == OP_EXTUNI_EXTRA + OP_TYPEPOSUPTO)\n          {\n          active_count--;           /* Remove non-match possibility */\n          next_active_state--;\n          }\n        nptr = PRIV(extuni)(c, ptr + clen, mb->start_subject, end_subject, utf,\n          &ncount);\n        if (nptr >= end_subject && (mb->moptions & PCRE2_PARTIAL_HARD) != 0)\n            reset_could_continue = TRUE;\n        if (++count >= (int)GET2(code, 1))\n          { ADD_NEW_DATA(-(state_offset + 2 + IMM2_SIZE), 0, ncount); }\n        else\n          { ADD_NEW_DATA(-state_offset, count, ncount); }\n        }\n      break;\n#endif\n\n      /*-----------------------------------------------------------------*/\n      case OP_ANYNL_EXTRA + OP_TYPEEXACT:\n      case OP_ANYNL_EXTRA + OP_TYPEUPTO:\n      case OP_ANYNL_EXTRA + OP_TYPEMINUPTO:\n      case OP_ANYNL_EXTRA + OP_TYPEPOSUPTO:\n      if (codevalue != OP_ANYNL_EXTRA + OP_TYPEEXACT)\n        { ADD_ACTIVE(state_offset + 2 + IMM2_SIZE, 0); }\n      count = current_state->count;  /* Number already matched */\n      if (clen > 0)\n        {\n        int ncount = 0;\n        switch (c)\n          {\n          case CHAR_VT:\n          case CHAR_FF:\n          case CHAR_NEL:\n#ifndef EBCDIC\n          case 0x2028:\n          case 0x2029:\n#endif  /* Not EBCDIC */\n          if (mb->bsr_convention == PCRE2_BSR_ANYCRLF) break;\n          goto ANYNL03;\n\n          case CHAR_CR:\n          if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1;\n          /* Fall through */\n\n          ANYNL03:\n          case CHAR_LF:\n          if (codevalue == OP_ANYNL_EXTRA + OP_TYPEPOSUPTO)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          if (++count >= (int)GET2(code, 1))\n            { ADD_NEW_DATA(-(state_offset + 2 + IMM2_SIZE), 0, ncount); }\n          else\n            { ADD_NEW_DATA(-state_offset, count, ncount); }\n          break;\n\n          default:\n          break;\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_VSPACE_EXTRA + OP_TYPEEXACT:\n      case OP_VSPACE_EXTRA + OP_TYPEUPTO:\n      case OP_VSPACE_EXTRA + OP_TYPEMINUPTO:\n      case OP_VSPACE_EXTRA + OP_TYPEPOSUPTO:\n      if (codevalue != OP_VSPACE_EXTRA + OP_TYPEEXACT)\n        { ADD_ACTIVE(state_offset + 2 + IMM2_SIZE, 0); }\n      count = current_state->count;  /* Number already matched */\n      if (clen > 0)\n        {\n        BOOL OK;\n        switch (c)\n          {\n          VSPACE_CASES:\n          OK = TRUE;\n          break;\n\n          default:\n          OK = FALSE;\n          }\n\n        if (OK == (d == OP_VSPACE))\n          {\n          if (codevalue == OP_VSPACE_EXTRA + OP_TYPEPOSUPTO)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          if (++count >= (int)GET2(code, 1))\n            { ADD_NEW_DATA(-(state_offset + 2 + IMM2_SIZE), 0, 0); }\n          else\n            { ADD_NEW_DATA(-state_offset, count, 0); }\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_HSPACE_EXTRA + OP_TYPEEXACT:\n      case OP_HSPACE_EXTRA + OP_TYPEUPTO:\n      case OP_HSPACE_EXTRA + OP_TYPEMINUPTO:\n      case OP_HSPACE_EXTRA + OP_TYPEPOSUPTO:\n      if (codevalue != OP_HSPACE_EXTRA + OP_TYPEEXACT)\n        { ADD_ACTIVE(state_offset + 2 + IMM2_SIZE, 0); }\n      count = current_state->count;  /* Number already matched */\n      if (clen > 0)\n        {\n        BOOL OK;\n        switch (c)\n          {\n          HSPACE_CASES:\n          OK = TRUE;\n          break;\n\n          default:\n          OK = FALSE;\n          break;\n          }\n\n        if (OK == (d == OP_HSPACE))\n          {\n          if (codevalue == OP_HSPACE_EXTRA + OP_TYPEPOSUPTO)\n            {\n            active_count--;           /* Remove non-match possibility */\n            next_active_state--;\n            }\n          if (++count >= (int)GET2(code, 1))\n            { ADD_NEW_DATA(-(state_offset + 2 + IMM2_SIZE), 0, 0); }\n          else\n            { ADD_NEW_DATA(-state_offset, count, 0); }\n          }\n        }\n      break;\n\n/* ========================================================================== */\n      /* These opcodes are followed by a character that is usually compared\n      to the current subject character; it is loaded into d. We still get\n      here even if there is no subject character, because in some cases zero\n      repetitions are permitted. */\n\n      /*-----------------------------------------------------------------*/\n      case OP_CHAR:\n      if (clen > 0 && c == d) { ADD_NEW(state_offset + dlen + 1, 0); }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_CHARI:\n      if (clen == 0) break;\n\n#ifdef SUPPORT_UNICODE\n      if (utf_or_ucp)\n        {\n        if (c == d) { ADD_NEW(state_offset + dlen + 1, 0); } else\n          {\n          unsigned int othercase;\n          if (c < 128)\n            othercase = fcc[c];\n          else\n            othercase = UCD_OTHERCASE(c);\n          if (d == othercase) { ADD_NEW(state_offset + dlen + 1, 0); }\n          }\n        }\n      else\n#endif  /* SUPPORT_UNICODE */\n      /* Not UTF or UCP mode */\n        {\n        if (TABLE_GET(c, lcc, c) == TABLE_GET(d, lcc, d))\n          { ADD_NEW(state_offset + 2, 0); }\n        }\n      break;\n\n\n#ifdef SUPPORT_UNICODE\n      /*-----------------------------------------------------------------*/\n      /* This is a tricky one because it can match more than one character.\n      Find out how many characters to skip, and then set up a negative state\n      to wait for them to pass before continuing. */\n\n      case OP_EXTUNI:\n      if (clen > 0)\n        {\n        int ncount = 0;\n        PCRE2_SPTR nptr = PRIV(extuni)(c, ptr + clen, mb->start_subject,\n          end_subject, utf, &ncount);\n        if (nptr >= end_subject && (mb->moptions & PCRE2_PARTIAL_HARD) != 0)\n            reset_could_continue = TRUE;\n        ADD_NEW_DATA(-(state_offset + 1), 0, ncount);\n        }\n      break;\n#endif\n\n      /*-----------------------------------------------------------------*/\n      /* This is a tricky like EXTUNI because it too can match more than one\n      character (when CR is followed by LF). In this case, set up a negative\n      state to wait for one character to pass before continuing. */\n\n      case OP_ANYNL:\n      if (clen > 0) switch(c)\n        {\n        case CHAR_VT:\n        case CHAR_FF:\n        case CHAR_NEL:\n#ifndef EBCDIC\n        case 0x2028:\n        case 0x2029:\n#endif  /* Not EBCDIC */\n        if (mb->bsr_convention == PCRE2_BSR_ANYCRLF) break;\n        PCRE2_FALLTHROUGH /* Fall through */\n\n        case CHAR_LF:\n        ADD_NEW(state_offset + 1, 0);\n        break;\n\n        case CHAR_CR:\n        if (ptr + 1 >= end_subject)\n          {\n          ADD_NEW(state_offset + 1, 0);\n          if ((mb->moptions & PCRE2_PARTIAL_HARD) != 0)\n            reset_could_continue = TRUE;\n          }\n        else if (ptr[1] == CHAR_LF)\n          {\n          ADD_NEW_DATA(-(state_offset + 1), 0, 1);\n          }\n        else\n          {\n          ADD_NEW(state_offset + 1, 0);\n          }\n        break;\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_NOT_VSPACE:\n      if (clen > 0) switch(c)\n        {\n        VSPACE_CASES:\n        break;\n\n        default:\n        ADD_NEW(state_offset + 1, 0);\n        break;\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_VSPACE:\n      if (clen > 0) switch(c)\n        {\n        VSPACE_CASES:\n        ADD_NEW(state_offset + 1, 0);\n        break;\n\n        default:\n        break;\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_NOT_HSPACE:\n      if (clen > 0) switch(c)\n        {\n        HSPACE_CASES:\n        break;\n\n        default:\n        ADD_NEW(state_offset + 1, 0);\n        break;\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_HSPACE:\n      if (clen > 0) switch(c)\n        {\n        HSPACE_CASES:\n        ADD_NEW(state_offset + 1, 0);\n        break;\n\n        default:\n        break;\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      /* Match a negated single character casefully. */\n\n      case OP_NOT:\n      if (clen > 0 && c != d) { ADD_NEW(state_offset + dlen + 1, 0); }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      /* Match a negated single character caselessly. */\n\n      case OP_NOTI:\n      if (clen > 0)\n        {\n        uint32_t otherd;\n#ifdef SUPPORT_UNICODE\n        if (utf_or_ucp && d >= 128)\n          otherd = UCD_OTHERCASE(d);\n        else\n#endif  /* SUPPORT_UNICODE */\n        otherd = TABLE_GET(d, fcc, d);\n        if (c != d && c != otherd)\n          { ADD_NEW(state_offset + dlen + 1, 0); }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_PLUSI:\n      case OP_MINPLUSI:\n      case OP_POSPLUSI:\n      case OP_NOTPLUSI:\n      case OP_NOTMINPLUSI:\n      case OP_NOTPOSPLUSI:\n      caseless = TRUE;\n      codevalue -= OP_STARI - OP_STAR;\n\n      PCRE2_FALLTHROUGH /* Fall through */\n      case OP_PLUS:\n      case OP_MINPLUS:\n      case OP_POSPLUS:\n      case OP_NOTPLUS:\n      case OP_NOTMINPLUS:\n      case OP_NOTPOSPLUS:\n      count = current_state->count;  /* Already matched */\n      if (count > 0) { ADD_ACTIVE(state_offset + dlen + 1, 0); }\n      if (clen > 0)\n        {\n        uint32_t otherd = NOTACHAR;\n        if (caseless)\n          {\n#ifdef SUPPORT_UNICODE\n          if (utf_or_ucp && d >= 128)\n            otherd = UCD_OTHERCASE(d);\n          else\n#endif  /* SUPPORT_UNICODE */\n          otherd = TABLE_GET(d, fcc, d);\n          }\n        if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR))\n          {\n          if (count > 0 &&\n              (codevalue == OP_POSPLUS || codevalue == OP_NOTPOSPLUS))\n            {\n            active_count--;             /* Remove non-match possibility */\n            next_active_state--;\n            }\n          count++;\n          ADD_NEW(state_offset, count);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_QUERYI:\n      case OP_MINQUERYI:\n      case OP_POSQUERYI:\n      case OP_NOTQUERYI:\n      case OP_NOTMINQUERYI:\n      case OP_NOTPOSQUERYI:\n      caseless = TRUE;\n      codevalue -= OP_STARI - OP_STAR;\n      PCRE2_FALLTHROUGH /* Fall through */\n      case OP_QUERY:\n      case OP_MINQUERY:\n      case OP_POSQUERY:\n      case OP_NOTQUERY:\n      case OP_NOTMINQUERY:\n      case OP_NOTPOSQUERY:\n      ADD_ACTIVE(state_offset + dlen + 1, 0);\n      if (clen > 0)\n        {\n        uint32_t otherd = NOTACHAR;\n        if (caseless)\n          {\n#ifdef SUPPORT_UNICODE\n          if (utf_or_ucp && d >= 128)\n            otherd = UCD_OTHERCASE(d);\n          else\n#endif  /* SUPPORT_UNICODE */\n          otherd = TABLE_GET(d, fcc, d);\n          }\n        if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR))\n          {\n          if (codevalue == OP_POSQUERY || codevalue == OP_NOTPOSQUERY)\n            {\n            active_count--;            /* Remove non-match possibility */\n            next_active_state--;\n            }\n          ADD_NEW(state_offset + dlen + 1, 0);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_STARI:\n      case OP_MINSTARI:\n      case OP_POSSTARI:\n      case OP_NOTSTARI:\n      case OP_NOTMINSTARI:\n      case OP_NOTPOSSTARI:\n      caseless = TRUE;\n      codevalue -= OP_STARI - OP_STAR;\n      PCRE2_FALLTHROUGH /* Fall through */\n      case OP_STAR:\n      case OP_MINSTAR:\n      case OP_POSSTAR:\n      case OP_NOTSTAR:\n      case OP_NOTMINSTAR:\n      case OP_NOTPOSSTAR:\n      ADD_ACTIVE(state_offset + dlen + 1, 0);\n      if (clen > 0)\n        {\n        uint32_t otherd = NOTACHAR;\n        if (caseless)\n          {\n#ifdef SUPPORT_UNICODE\n          if (utf_or_ucp && d >= 128)\n            otherd = UCD_OTHERCASE(d);\n          else\n#endif  /* SUPPORT_UNICODE */\n          otherd = TABLE_GET(d, fcc, d);\n          }\n        if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR))\n          {\n          if (codevalue == OP_POSSTAR || codevalue == OP_NOTPOSSTAR)\n            {\n            active_count--;            /* Remove non-match possibility */\n            next_active_state--;\n            }\n          ADD_NEW(state_offset, 0);\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_EXACTI:\n      case OP_NOTEXACTI:\n      caseless = TRUE;\n      codevalue -= OP_STARI - OP_STAR;\n      PCRE2_FALLTHROUGH /* Fall through */\n      case OP_EXACT:\n      case OP_NOTEXACT:\n      count = current_state->count;  /* Number already matched */\n      if (clen > 0)\n        {\n        uint32_t otherd = NOTACHAR;\n        if (caseless)\n          {\n#ifdef SUPPORT_UNICODE\n          if (utf_or_ucp && d >= 128)\n            otherd = UCD_OTHERCASE(d);\n          else\n#endif  /* SUPPORT_UNICODE */\n          otherd = TABLE_GET(d, fcc, d);\n          }\n        if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR))\n          {\n          if (++count >= (int)GET2(code, 1))\n            { ADD_NEW(state_offset + dlen + 1 + IMM2_SIZE, 0); }\n          else\n            { ADD_NEW(state_offset, count); }\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_UPTOI:\n      case OP_MINUPTOI:\n      case OP_POSUPTOI:\n      case OP_NOTUPTOI:\n      case OP_NOTMINUPTOI:\n      case OP_NOTPOSUPTOI:\n      caseless = TRUE;\n      codevalue -= OP_STARI - OP_STAR;\n      PCRE2_FALLTHROUGH /* Fall through */\n      case OP_UPTO:\n      case OP_MINUPTO:\n      case OP_POSUPTO:\n      case OP_NOTUPTO:\n      case OP_NOTMINUPTO:\n      case OP_NOTPOSUPTO:\n      ADD_ACTIVE(state_offset + dlen + 1 + IMM2_SIZE, 0);\n      count = current_state->count;  /* Number already matched */\n      if (clen > 0)\n        {\n        uint32_t otherd = NOTACHAR;\n        if (caseless)\n          {\n#ifdef SUPPORT_UNICODE\n          if (utf_or_ucp && d >= 128)\n            otherd = UCD_OTHERCASE(d);\n          else\n#endif  /* SUPPORT_UNICODE */\n          otherd = TABLE_GET(d, fcc, d);\n          }\n        if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR))\n          {\n          if (codevalue == OP_POSUPTO || codevalue == OP_NOTPOSUPTO)\n            {\n            active_count--;             /* Remove non-match possibility */\n            next_active_state--;\n            }\n          if (++count >= (int)GET2(code, 1))\n            { ADD_NEW(state_offset + dlen + 1 + IMM2_SIZE, 0); }\n          else\n            { ADD_NEW(state_offset, count); }\n          }\n        }\n      break;\n\n\n/* ========================================================================== */\n      /* These are the class-handling opcodes */\n\n      case OP_CLASS:\n      case OP_NCLASS:\n#ifdef SUPPORT_WIDE_CHARS\n      case OP_XCLASS:\n      case OP_ECLASS:\n#endif\n        {\n        BOOL isinclass = FALSE;\n        int next_state_offset;\n        PCRE2_SPTR ecode;\n\n#ifdef SUPPORT_WIDE_CHARS\n        /* An extended class may have a table or a list of single characters,\n        ranges, or both, and it may be positive or negative. There's a\n        function that sorts all this out. */\n\n        if (codevalue == OP_XCLASS)\n         {\n         ecode = code + GET(code, 1);\n         if (clen > 0)\n           isinclass = PRIV(xclass)(c, code + 1 + LINK_SIZE,\n             (const uint8_t*)mb->start_code, utf);\n         }\n\n        /* A nested set-based class has internal opcodes for performing\n        set operations. */\n\n        else if (codevalue == OP_ECLASS)\n         {\n         ecode = code + GET(code, 1);\n         if (clen > 0)\n           isinclass = PRIV(eclass)(c, code + 1 + LINK_SIZE, ecode,\n             (const uint8_t*)mb->start_code, utf);\n         }\n\n        else\n#endif /* SUPPORT_WIDE_CHARS */\n\n        /* For a simple class, there is always just a 32-byte table, and we\n        can set isinclass from it. */\n\n          {\n          ecode = code + 1 + (32 / sizeof(PCRE2_UCHAR));\n          if (clen > 0)\n            {\n            isinclass = (c > 255)? (codevalue == OP_NCLASS) :\n              ((((const uint8_t *)(code + 1))[c/8] & (1u << (c&7))) != 0);\n            }\n          }\n\n        /* At this point, isinclass is set for all kinds of class, and ecode\n        points to the byte after the end of the class. If there is a\n        quantifier, this is where it will be. */\n\n        next_state_offset = (int)(ecode - start_code);\n\n        switch (*ecode)\n          {\n          case OP_CRSTAR:\n          case OP_CRMINSTAR:\n          case OP_CRPOSSTAR:\n          ADD_ACTIVE(next_state_offset + 1, 0);\n          if (isinclass)\n            {\n            if (*ecode == OP_CRPOSSTAR)\n              {\n              active_count--;           /* Remove non-match possibility */\n              next_active_state--;\n              }\n            ADD_NEW(state_offset, 0);\n            }\n          break;\n\n          case OP_CRPLUS:\n          case OP_CRMINPLUS:\n          case OP_CRPOSPLUS:\n          count = current_state->count;  /* Already matched */\n          if (count > 0) { ADD_ACTIVE(next_state_offset + 1, 0); }\n          if (isinclass)\n            {\n            if (count > 0 && *ecode == OP_CRPOSPLUS)\n              {\n              active_count--;           /* Remove non-match possibility */\n              next_active_state--;\n              }\n            count++;\n            ADD_NEW(state_offset, count);\n            }\n          break;\n\n          case OP_CRQUERY:\n          case OP_CRMINQUERY:\n          case OP_CRPOSQUERY:\n          ADD_ACTIVE(next_state_offset + 1, 0);\n          if (isinclass)\n            {\n            if (*ecode == OP_CRPOSQUERY)\n              {\n              active_count--;           /* Remove non-match possibility */\n              next_active_state--;\n              }\n            ADD_NEW(next_state_offset + 1, 0);\n            }\n          break;\n\n          case OP_CRRANGE:\n          case OP_CRMINRANGE:\n          case OP_CRPOSRANGE:\n          count = current_state->count;  /* Already matched */\n          if (count >= (int)GET2(ecode, 1))\n            { ADD_ACTIVE(next_state_offset + 1 + 2 * IMM2_SIZE, 0); }\n          if (isinclass)\n            {\n            int max = (int)GET2(ecode, 1 + IMM2_SIZE);\n\n            if (*ecode == OP_CRPOSRANGE && count >= (int)GET2(ecode, 1))\n              {\n              active_count--;           /* Remove non-match possibility */\n              next_active_state--;\n              }\n\n            if (++count >= max && max != 0)   /* Max 0 => no limit */\n              { ADD_NEW(next_state_offset + 1 + 2 * IMM2_SIZE, 0); }\n            else\n              { ADD_NEW(state_offset, count); }\n            }\n          break;\n\n          default:\n          if (isinclass) { ADD_NEW(next_state_offset, 0); }\n          break;\n          }\n        }\n      break;\n\n/* ========================================================================== */\n      /* These are the opcodes for fancy brackets of various kinds. We have\n      to use recursion in order to handle them. The \"always failing\" assertion\n      (?!) is optimised to OP_FAIL when compiling, so we have to support that,\n      though the other \"backtracking verbs\" are not supported. */\n\n      case OP_FAIL:\n      break;\n\n      case OP_ASSERT:\n      case OP_ASSERT_NOT:\n      case OP_ASSERTBACK:\n      case OP_ASSERTBACK_NOT:\n        {\n        int rc;\n        int *local_workspace;\n        PCRE2_SIZE *local_offsets;\n        PCRE2_SPTR endasscode = code + GET(code, 1);\n        RWS_anchor *rws = (RWS_anchor *)RWS;\n\n        if (rws->free < RWS_RSIZE + RWS_OVEC_OSIZE)\n          {\n          rc = more_workspace(&rws, RWS_OVEC_OSIZE, mb);\n          if (rc != 0) return rc;\n          RWS = (int *)rws;\n          }\n\n        local_offsets = (PCRE2_SIZE *)(RWS + rws->size - rws->free);\n        local_workspace = ((int *)local_offsets) + RWS_OVEC_OSIZE;\n        rws->free -= RWS_RSIZE + RWS_OVEC_OSIZE;\n\n        while (*endasscode == OP_ALT) endasscode += GET(endasscode, 1);\n\n        rc = internal_dfa_match(\n          mb,                                   /* static match data */\n          code,                                 /* this subexpression's code */\n          ptr,                                  /* where we currently are */\n          (PCRE2_SIZE)(ptr - start_subject),    /* start offset */\n          local_offsets,                        /* offset vector */\n          RWS_OVEC_OSIZE/OVEC_UNIT,             /* size of same */\n          local_workspace,                      /* workspace vector */\n          RWS_RSIZE,                            /* size of same */\n          rlevel,                               /* function recursion level */\n          RWS);                                 /* recursion workspace */\n\n        rws->free += RWS_RSIZE + RWS_OVEC_OSIZE;\n\n        if (rc < 0 && rc != PCRE2_ERROR_NOMATCH) return rc;\n        if ((rc >= 0) == (codevalue == OP_ASSERT || codevalue == OP_ASSERTBACK))\n            { ADD_ACTIVE((int)(endasscode + LINK_SIZE + 1 - start_code), 0); }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_COND:\n      case OP_SCOND:\n        {\n        int codelink = (int)GET(code, 1);\n        PCRE2_UCHAR condcode;\n\n        /* Because of the way auto-callout works during compile, a callout item\n        is inserted between OP_COND and an assertion condition. This does not\n        happen for the other conditions. */\n\n        if (code[LINK_SIZE + 1] == OP_CALLOUT\n            || code[LINK_SIZE + 1] == OP_CALLOUT_STR)\n          {\n          PCRE2_SIZE callout_length;\n          rrc = do_callout_dfa(code, offsets, current_subject, ptr, mb,\n            1 + LINK_SIZE, &callout_length);\n          if (rrc < 0) return rrc;                 /* Abandon */\n          if (rrc > 0) break;                      /* Fail this thread */\n          code += callout_length;                  /* Skip callout data */\n          }\n\n        condcode = code[LINK_SIZE+1];\n\n        /* Back reference conditions and duplicate named recursion conditions\n        are not supported */\n\n        if (condcode == OP_CREF || condcode == OP_DNCREF ||\n            condcode == OP_DNRREF)\n          return PCRE2_ERROR_DFA_UCOND;\n\n        /* The DEFINE condition is always false, and the assertion (?!) is\n        converted to OP_FAIL. */\n\n        if (condcode == OP_FALSE || condcode == OP_FAIL)\n          { ADD_ACTIVE(state_offset + codelink + LINK_SIZE + 1, 0); }\n\n        /* There is also an always-true condition */\n\n        else if (condcode == OP_TRUE)\n          { ADD_ACTIVE(state_offset + LINK_SIZE + 2, 0); }\n\n        /* The only supported version of OP_RREF is for the value RREF_ANY,\n        which means \"test if in any recursion\". We can't test for specifically\n        recursed groups. */\n\n        else if (condcode == OP_RREF)\n          {\n          unsigned int value = GET2(code, LINK_SIZE + 2);\n          if (value != RREF_ANY) return PCRE2_ERROR_DFA_UCOND;\n          if (mb->recursive != NULL)\n            { ADD_ACTIVE(state_offset + LINK_SIZE + 2 + IMM2_SIZE, 0); }\n          else { ADD_ACTIVE(state_offset + codelink + LINK_SIZE + 1, 0); }\n          }\n\n        /* Otherwise, the condition is an assertion */\n\n        else\n          {\n          int rc;\n          int *local_workspace;\n          PCRE2_SIZE *local_offsets;\n          PCRE2_SPTR asscode = code + LINK_SIZE + 1;\n          PCRE2_SPTR endasscode = asscode + GET(asscode, 1);\n          RWS_anchor *rws = (RWS_anchor *)RWS;\n\n          if (rws->free < RWS_RSIZE + RWS_OVEC_OSIZE)\n            {\n            rc = more_workspace(&rws, RWS_OVEC_OSIZE, mb);\n            if (rc != 0) return rc;\n            RWS = (int *)rws;\n            }\n\n          local_offsets = (PCRE2_SIZE *)(RWS + rws->size - rws->free);\n          local_workspace = ((int *)local_offsets) + RWS_OVEC_OSIZE;\n          rws->free -= RWS_RSIZE + RWS_OVEC_OSIZE;\n\n          while (*endasscode == OP_ALT) endasscode += GET(endasscode, 1);\n\n          rc = internal_dfa_match(\n            mb,                                   /* fixed match data */\n            asscode,                              /* this subexpression's code */\n            ptr,                                  /* where we currently are */\n            (PCRE2_SIZE)(ptr - start_subject),    /* start offset */\n            local_offsets,                        /* offset vector */\n            RWS_OVEC_OSIZE/OVEC_UNIT,             /* size of same */\n            local_workspace,                      /* workspace vector */\n            RWS_RSIZE,                            /* size of same */\n            rlevel,                               /* function recursion level */\n            RWS);                                 /* recursion workspace */\n\n          rws->free += RWS_RSIZE + RWS_OVEC_OSIZE;\n\n          if (rc < 0 && rc != PCRE2_ERROR_NOMATCH) return rc;\n          if ((rc >= 0) ==\n                (condcode == OP_ASSERT || condcode == OP_ASSERTBACK))\n            { ADD_ACTIVE((int)(endasscode + LINK_SIZE + 1 - start_code), 0); }\n          else\n            { ADD_ACTIVE(state_offset + codelink + LINK_SIZE + 1, 0); }\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_RECURSE:\n        {\n        int rc;\n        int *local_workspace;\n        PCRE2_SIZE *local_offsets;\n        RWS_anchor *rws = (RWS_anchor *)RWS;\n        PCRE2_SPTR callpat = start_code + GET(code, 1);\n        uint32_t recno = (callpat == mb->start_code)? 0 :\n          GET2(callpat, 1 + LINK_SIZE);\n\n        /* Argument list has not been supported yet. */\n        if (code[1 + LINK_SIZE] == OP_CREF) return PCRE2_ERROR_DFA_UITEM;\n\n        if (rws->free < RWS_RSIZE + RWS_OVEC_RSIZE)\n          {\n          rc = more_workspace(&rws, RWS_OVEC_RSIZE, mb);\n          if (rc != 0) return rc;\n          RWS = (int *)rws;\n          }\n\n        local_offsets = (PCRE2_SIZE *)(RWS + rws->size - rws->free);\n        local_workspace = ((int *)local_offsets) + RWS_OVEC_RSIZE;\n        rws->free -= RWS_RSIZE + RWS_OVEC_RSIZE;\n\n        /* Check for repeating a recursion without advancing the subject\n        pointer or last used character. This should catch convoluted mutual\n        recursions. (Some simple cases are caught at compile time.) */\n\n        for (dfa_recursion_info *ri = mb->recursive;\n             ri != NULL;\n             ri = ri->prevrec)\n          {\n          if (recno == ri->group_num && ptr == ri->subject_position &&\n              mb->last_used_ptr == ri->last_used_ptr)\n            return PCRE2_ERROR_RECURSELOOP;\n          }\n\n        /* Remember this recursion and where we started it so as to\n        catch infinite loops. */\n\n        new_recursive.group_num = recno;\n        new_recursive.subject_position = ptr;\n        new_recursive.last_used_ptr = mb->last_used_ptr;\n        new_recursive.prevrec = mb->recursive;\n        mb->recursive = &new_recursive;\n\n        rc = internal_dfa_match(\n          mb,                                   /* fixed match data */\n          callpat,                              /* this subexpression's code */\n          ptr,                                  /* where we currently are */\n          (PCRE2_SIZE)(ptr - start_subject),    /* start offset */\n          local_offsets,                        /* offset vector */\n          RWS_OVEC_RSIZE/OVEC_UNIT,             /* size of same */\n          local_workspace,                      /* workspace vector */\n          RWS_RSIZE,                            /* size of same */\n          rlevel,                               /* function recursion level */\n          RWS);                                 /* recursion workspace */\n\n        rws->free += RWS_RSIZE + RWS_OVEC_RSIZE;\n        mb->recursive = new_recursive.prevrec;  /* Done this recursion */\n\n        /* Ran out of internal offsets */\n\n        if (rc == 0) return PCRE2_ERROR_DFA_RECURSE;\n\n        /* For each successful matched substring, set up the next state with a\n        count of characters to skip before trying it. Note that the count is in\n        characters, not bytes. */\n\n        if (rc > 0)\n          {\n          for (rc = rc*2 - 2; rc >= 0; rc -= 2)\n            {\n            PCRE2_SIZE charcount = local_offsets[rc+1] - local_offsets[rc];\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n            if (utf)\n              {\n              PCRE2_SPTR p = start_subject + local_offsets[rc];\n              PCRE2_SPTR pp = start_subject + local_offsets[rc+1];\n              while (p < pp) if (NOT_FIRSTCU(*p++)) charcount--;\n              }\n#endif\n            if (charcount > 0)\n              {\n              ADD_NEW_DATA(-(state_offset + LINK_SIZE + 1), 0,\n                (int)(charcount - 1));\n              }\n            else\n              {\n              ADD_ACTIVE(state_offset + LINK_SIZE + 1, 0);\n              }\n            }\n          }\n        else if (rc != PCRE2_ERROR_NOMATCH) return rc;\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_BRAPOS:\n      case OP_SBRAPOS:\n      case OP_CBRAPOS:\n      case OP_SCBRAPOS:\n      case OP_BRAPOSZERO:\n        {\n        int rc;\n        int *local_workspace;\n        PCRE2_SIZE *local_offsets;\n        PCRE2_SIZE charcount, matched_count;\n        PCRE2_SPTR local_ptr = ptr;\n        RWS_anchor *rws = (RWS_anchor *)RWS;\n        BOOL allow_zero;\n\n        if (rws->free < RWS_RSIZE + RWS_OVEC_OSIZE)\n          {\n          rc = more_workspace(&rws, RWS_OVEC_OSIZE, mb);\n          if (rc != 0) return rc;\n          RWS = (int *)rws;\n          }\n\n        local_offsets = (PCRE2_SIZE *)(RWS + rws->size - rws->free);\n        local_workspace = ((int *)local_offsets) + RWS_OVEC_OSIZE;\n        rws->free -= RWS_RSIZE + RWS_OVEC_OSIZE;\n\n        if (codevalue == OP_BRAPOSZERO)\n          {\n          allow_zero = TRUE;\n          ++code;  /* The following opcode will be one of the above BRAs */\n          }\n        else allow_zero = FALSE;\n\n        /* Loop to match the subpattern as many times as possible as if it were\n        a complete pattern. */\n\n        for (matched_count = 0;; matched_count++)\n          {\n          rc = internal_dfa_match(\n            mb,                                   /* fixed match data */\n            code,                                 /* this subexpression's code */\n            local_ptr,                            /* where we currently are */\n            (PCRE2_SIZE)(ptr - start_subject),    /* start offset */\n            local_offsets,                        /* offset vector */\n            RWS_OVEC_OSIZE/OVEC_UNIT,             /* size of same */\n            local_workspace,                      /* workspace vector */\n            RWS_RSIZE,                            /* size of same */\n            rlevel,                               /* function recursion level */\n            RWS);                                 /* recursion workspace */\n\n          /* Failed to match */\n\n          if (rc < 0)\n            {\n            if (rc != PCRE2_ERROR_NOMATCH) return rc;\n            break;\n            }\n\n          /* Matched: break the loop if zero characters matched. */\n\n          charcount = local_offsets[1] - local_offsets[0];\n          if (charcount == 0) break;\n          local_ptr += charcount;    /* Advance temporary position ptr */\n          }\n\n        rws->free += RWS_RSIZE + RWS_OVEC_OSIZE;\n\n        /* At this point we have matched the subpattern matched_count\n        times, and local_ptr is pointing to the character after the end of the\n        last match. */\n\n        if (matched_count > 0 || allow_zero)\n          {\n          PCRE2_SPTR end_subpattern = code;\n          int next_state_offset;\n\n          do { end_subpattern += GET(end_subpattern, 1); }\n            while (*end_subpattern == OP_ALT);\n          next_state_offset =\n            (int)(end_subpattern - start_code + LINK_SIZE + 1);\n\n          /* Optimization: if there are no more active states, and there\n          are no new states yet set up, then skip over the subject string\n          right here, to save looping. Otherwise, set up the new state to swing\n          into action when the end of the matched substring is reached. */\n\n          if (i + 1 >= active_count && new_count == 0)\n            {\n            ptr = local_ptr;\n            clen = 0;\n            ADD_NEW(next_state_offset, 0);\n            }\n          else\n            {\n            PCRE2_SPTR p = ptr;\n            PCRE2_SPTR pp = local_ptr;\n            charcount = (PCRE2_SIZE)(pp - p);\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n            if (utf) while (p < pp) if (NOT_FIRSTCU(*p++)) charcount--;\n#endif\n            ADD_NEW_DATA(-next_state_offset, 0, (int)(charcount - 1));\n            }\n          }\n        }\n      break;\n\n      /*-----------------------------------------------------------------*/\n      case OP_ONCE:\n        {\n        int rc;\n        int *local_workspace;\n        PCRE2_SIZE *local_offsets;\n        RWS_anchor *rws = (RWS_anchor *)RWS;\n\n        if (rws->free < RWS_RSIZE + RWS_OVEC_OSIZE)\n          {\n          rc = more_workspace(&rws, RWS_OVEC_OSIZE, mb);\n          if (rc != 0) return rc;\n          RWS = (int *)rws;\n          }\n\n        local_offsets = (PCRE2_SIZE *)(RWS + rws->size - rws->free);\n        local_workspace = ((int *)local_offsets) + RWS_OVEC_OSIZE;\n        rws->free -= RWS_RSIZE + RWS_OVEC_OSIZE;\n\n        rc = internal_dfa_match(\n          mb,                                   /* fixed match data */\n          code,                                 /* this subexpression's code */\n          ptr,                                  /* where we currently are */\n          (PCRE2_SIZE)(ptr - start_subject),    /* start offset */\n          local_offsets,                        /* offset vector */\n          RWS_OVEC_OSIZE/OVEC_UNIT,             /* size of same */\n          local_workspace,                      /* workspace vector */\n          RWS_RSIZE,                            /* size of same */\n          rlevel,                               /* function recursion level */\n          RWS);                                 /* recursion workspace */\n\n        rws->free += RWS_RSIZE + RWS_OVEC_OSIZE;\n\n        if (rc >= 0)\n          {\n          PCRE2_SPTR end_subpattern = code;\n          PCRE2_SIZE charcount = local_offsets[1] - local_offsets[0];\n          int next_state_offset, repeat_state_offset;\n\n          do { end_subpattern += GET(end_subpattern, 1); }\n            while (*end_subpattern == OP_ALT);\n          next_state_offset =\n            (int)(end_subpattern - start_code + LINK_SIZE + 1);\n\n          /* If the end of this subpattern is KETRMAX or KETRMIN, we must\n          arrange for the repeat state also to be added to the relevant list.\n          Calculate the offset, or set -1 for no repeat. */\n\n          repeat_state_offset = (*end_subpattern == OP_KETRMAX ||\n                                 *end_subpattern == OP_KETRMIN)?\n            (int)(end_subpattern - start_code - GET(end_subpattern, 1)) : -1;\n\n          /* If we have matched an empty string, add the next state at the\n          current character pointer. This is important so that the duplicate\n          checking kicks in, which is what breaks infinite loops that match an\n          empty string. */\n\n          if (charcount == 0)\n            {\n            ADD_ACTIVE(next_state_offset, 0);\n            }\n\n          /* Optimization: if there are no more active states, and there\n          are no new states yet set up, then skip over the subject string\n          right here, to save looping. Otherwise, set up the new state to swing\n          into action when the end of the matched substring is reached. */\n\n          else if (i + 1 >= active_count && new_count == 0)\n            {\n            ptr += charcount;\n            clen = 0;\n            ADD_NEW(next_state_offset, 0);\n\n            /* If we are adding a repeat state at the new character position,\n            we must fudge things so that it is the only current state.\n            Otherwise, it might be a duplicate of one we processed before, and\n            that would cause it to be skipped. */\n\n            if (repeat_state_offset >= 0)\n              {\n              next_active_state = active_states;\n              active_count = 0;\n              i = -1;\n              ADD_ACTIVE(repeat_state_offset, 0);\n              }\n            }\n          else\n            {\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n            if (utf)\n              {\n              PCRE2_SPTR p = start_subject + local_offsets[0];\n              PCRE2_SPTR pp = start_subject + local_offsets[1];\n              while (p < pp) if (NOT_FIRSTCU(*p++)) charcount--;\n              }\n#endif\n            ADD_NEW_DATA(-next_state_offset, 0, (int)(charcount - 1));\n            if (repeat_state_offset >= 0)\n              { ADD_NEW_DATA(-repeat_state_offset, 0, (int)(charcount - 1)); }\n            }\n          }\n        else if (rc != PCRE2_ERROR_NOMATCH) return rc;\n        }\n      break;\n\n\n/* ========================================================================== */\n      /* Handle callouts */\n\n      case OP_CALLOUT:\n      case OP_CALLOUT_STR:\n        {\n        PCRE2_SIZE callout_length;\n        rrc = do_callout_dfa(code, offsets, current_subject, ptr, mb, 0,\n          &callout_length);\n        if (rrc < 0) return rrc;   /* Abandon */\n        if (rrc == 0)\n          { ADD_ACTIVE(state_offset + (int)callout_length, 0); }\n        }\n      break;\n\n\n/* ========================================================================== */\n      default:        /* Unsupported opcode */\n      return PCRE2_ERROR_DFA_UITEM;\n      }\n\n    NEXT_ACTIVE_STATE: continue;\n\n    }      /* End of loop scanning active states */\n\n  /* We have finished the processing at the current subject character. If no\n  new states have been set for the next character, we have found all the\n  matches that we are going to find. If partial matching has been requested,\n  check for appropriate conditions.\n\n  The \"could_continue\" variable is true if a state could have continued but\n  for the fact that the end of the subject was reached. */\n\n  if (new_count <= 0)\n    {\n    if (could_continue &&                            /* Some could go on, and */\n        (                                            /* either... */\n        (mb->moptions & PCRE2_PARTIAL_HARD) != 0      /* Hard partial */\n        ||                                           /* or... */\n        ((mb->moptions & PCRE2_PARTIAL_SOFT) != 0 &&  /* Soft partial and */\n         match_count < 0)                             /* no matches */\n        ) &&                                         /* And... */\n        (\n        partial_newline ||                   /* Either partial NL */\n          (                                  /* or ... */\n          ptr >= end_subject &&              /* End of subject and */\n            (                                  /* either */\n            ptr > mb->start_used_ptr ||        /* Inspected non-empty string */\n            mb->allowemptypartial              /* or pattern has lookbehind */\n            )                                  /* or could match empty */\n          )\n        ))\n      match_count = PCRE2_ERROR_PARTIAL;\n    break;  /* Exit from loop along the subject string */\n    }\n\n  /* One or more states are active for the next character. */\n\n  ptr += clen;    /* Advance to next subject character */\n  }               /* Loop to move along the subject string */\n\n/* Control gets here from \"break\" a few lines above. If we have a match and\nPCRE2_ENDANCHORED is set, the match fails. */\n\nif (match_count >= 0 &&\n    ((mb->moptions | mb->poptions) & PCRE2_ENDANCHORED) != 0 &&\n    ptr < end_subject)\n  match_count = PCRE2_ERROR_NOMATCH;\n\nreturn match_count;\n}\n\n\n\n/*************************************************\n*     Match a pattern using the DFA algorithm    *\n*************************************************/\n\n/* This function matches a compiled pattern to a subject string, using the\nalternate matching algorithm that finds all matches at once.\n\nArguments:\n  code          points to the compiled pattern\n  subject       subject string\n  length        length of subject string\n  startoffset   where to start matching in the subject\n  options       option bits\n  match_data    points to a match data structure\n  gcontext      points to a match context\n  workspace     pointer to workspace\n  wscount       size of workspace\n\nReturns:        > 0 => number of match offset pairs placed in offsets\n                = 0 => offsets overflowed; longest matches are present\n                 -1 => failed to match\n               < -1 => some kind of unexpected problem\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_dfa_match(const pcre2_code *code, PCRE2_SPTR subject, PCRE2_SIZE length,\n  PCRE2_SIZE start_offset, uint32_t options, pcre2_match_data *match_data,\n  pcre2_match_context *mcontext, int *workspace, PCRE2_SIZE wscount)\n{\nint rc;\n\nconst pcre2_real_code *re = (const pcre2_real_code *)code;\nuint32_t original_options = options;\n\nPCRE2_UCHAR null_str[1] = { 0xcd };\nPCRE2_SPTR original_subject = subject;\nPCRE2_SPTR start_match;\nPCRE2_SPTR end_subject;\nPCRE2_SPTR bumpalong_limit;\nPCRE2_SPTR req_cu_ptr;\n\nBOOL utf, anchored, startline, firstline;\nBOOL has_first_cu = FALSE;\nBOOL has_req_cu = FALSE;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nPCRE2_SPTR memchr_found_first_cu = NULL;\nPCRE2_SPTR memchr_found_first_cu2 = NULL;\n#endif\n\nPCRE2_UCHAR first_cu = 0;\nPCRE2_UCHAR first_cu2 = 0;\nPCRE2_UCHAR req_cu = 0;\nPCRE2_UCHAR req_cu2 = 0;\n\nconst uint8_t *start_bits = NULL;\n\n/* We need to have mb pointing to a match block, because the IS_NEWLINE macro\nis used below, and it expects NLBLOCK to be defined as a pointer. */\n\npcre2_callout_block cb;\ndfa_match_block actual_match_block;\ndfa_match_block *mb = &actual_match_block;\n\n/* Set up a starting block of memory for use during recursive calls to\ninternal_dfa_match(). By putting this on the stack, it minimizes resource use\nin the case when it is not needed. If this is too small, more memory is\nobtained from the heap. At the start of each block is an anchor structure.*/\n\nint base_recursion_workspace[RWS_BASE_SIZE];\nRWS_anchor *rws = (RWS_anchor *)base_recursion_workspace;\nrws->next = NULL;\nrws->size = RWS_BASE_SIZE;\nrws->free = RWS_BASE_SIZE - RWS_ANCHOR_SIZE;\n\n/* Recognize NULL, length 0 as an empty string. */\n\nif (subject == NULL && length == 0) subject = null_str;\n\n/* Plausibility checks */\n\nif (match_data == NULL) return PCRE2_ERROR_NULL;\nif (re == NULL || subject == NULL || workspace == NULL)\n  { rc = PCRE2_ERROR_NULL; goto EXIT; }\nif ((options & ~PUBLIC_DFA_MATCH_OPTIONS) != 0)\n  { rc = PCRE2_ERROR_BADOPTION; goto EXIT; }\n\nif (length == PCRE2_ZERO_TERMINATED)\n  {\n  length = PRIV(strlen)(subject);\n  }\n\nif (wscount < 20) { rc = PCRE2_ERROR_DFA_WSSIZE; goto EXIT; }\nif (start_offset > length) { rc = PCRE2_ERROR_BADOFFSET; goto EXIT; }\n\n/* Partial matching and PCRE2_ENDANCHORED are currently not allowed at the same\ntime. */\n\nif ((options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0 &&\n   ((re->overall_options | options) & PCRE2_ENDANCHORED) != 0)\n  { rc = PCRE2_ERROR_BADOPTION; goto EXIT; }\n\n/* Invalid UTF support is not available for DFA matching. */\n\nif ((re->overall_options & PCRE2_MATCH_INVALID_UTF) != 0)\n  { rc = PCRE2_ERROR_DFA_UINVALID_UTF; goto EXIT; }\n\n/* Check that the first field in the block is the magic number. If it is not,\nreturn with PCRE2_ERROR_BADMAGIC. */\n\nif (re->magic_number != MAGIC_NUMBER)\n  { rc = PCRE2_ERROR_BADMAGIC; goto EXIT; }\n\n/* Check the code unit width. */\n\nif ((re->flags & PCRE2_MODE_MASK) != PCRE2_CODE_UNIT_WIDTH/8)\n  { rc = PCRE2_ERROR_BADMODE; goto EXIT; }\n\n/* PCRE2_NOTEMPTY and PCRE2_NOTEMPTY_ATSTART are match-time flags in the\noptions variable for this function. Users of PCRE2 who are not calling the\nfunction directly would like to have a way of setting these flags, in the same\nway that they can set pcre2_compile() flags like PCRE2_NO_AUTO_POSSESS with\nconstructions like (*NO_AUTOPOSSESS). To enable this, (*NOTEMPTY) and\n(*NOTEMPTY_ATSTART) set bits in the pattern's \"flag\" function which can now be\ntransferred to the options for this function. The bits are guaranteed to be\nadjacent, but do not have the same values. This bit of Boolean trickery assumes\nthat the match-time bits are not more significant than the flag bits. If by\naccident this is not the case, a compile-time division by zero error will\noccur. */\n\n#define FF (PCRE2_NOTEMPTY_SET|PCRE2_NE_ATST_SET)\n#define OO (PCRE2_NOTEMPTY|PCRE2_NOTEMPTY_ATSTART)\noptions |= (re->flags & FF) / ((FF & (~FF+1)) / (OO & (~OO+1)));\n#undef FF\n#undef OO\n\n/* If restarting after a partial match, do some sanity checks on the contents\nof the workspace. */\n\nif ((options & PCRE2_DFA_RESTART) != 0)\n  {\n  if ((workspace[0] & (-2)) != 0 || workspace[1] < 1 ||\n      workspace[1] > (int)((wscount - 2)/INTS_PER_STATEBLOCK))\n    { rc = PCRE2_ERROR_DFA_BADRESTART; goto EXIT; }\n  }\n\n/* Set some local values */\n\nutf = (re->overall_options & PCRE2_UTF) != 0;\nstart_match = subject + start_offset;\nend_subject = subject + length;\nreq_cu_ptr = start_match - 1;\nanchored = (options & (PCRE2_ANCHORED|PCRE2_DFA_RESTART)) != 0 ||\n  (re->overall_options & PCRE2_ANCHORED) != 0;\n\n/* The \"must be at the start of a line\" flags are used in a loop when finding\nwhere to start. */\n\nstartline = (re->flags & PCRE2_STARTLINE) != 0;\nfirstline = !anchored && (re->overall_options & PCRE2_FIRSTLINE) != 0;\nbumpalong_limit = end_subject;\n\n/* Initialize and set up the fixed fields in the callout block, with a pointer\nin the match block. */\n\nmb->cb = &cb;\ncb.version = 2;\ncb.subject = subject;\ncb.subject_length = (PCRE2_SIZE)(end_subject - subject);\ncb.callout_flags = 0;\ncb.capture_top      = 1;      /* No capture support */\ncb.capture_last     = 0;\ncb.mark             = NULL;   /* No (*MARK) support */\n\n/* Get data from the match context, if present, and fill in the remaining\nfields in the match block. It is an error to set an offset limit without\nsetting the flag at compile time. */\n\nif (mcontext == NULL)\n  {\n  mb->callout = NULL;\n  mb->memctl = re->memctl;\n  mb->match_limit = PRIV(default_match_context).match_limit;\n  mb->match_limit_depth = PRIV(default_match_context).depth_limit;\n  mb->heap_limit = PRIV(default_match_context).heap_limit;\n  }\nelse\n  {\n  if (mcontext->offset_limit != PCRE2_UNSET)\n    {\n    if ((re->overall_options & PCRE2_USE_OFFSET_LIMIT) == 0)\n      { rc = PCRE2_ERROR_BADOFFSETLIMIT; goto EXIT; }\n    bumpalong_limit = subject + mcontext->offset_limit;\n    }\n  mb->callout = mcontext->callout;\n  mb->callout_data = mcontext->callout_data;\n  mb->memctl = mcontext->memctl;\n  mb->match_limit = mcontext->match_limit;\n  mb->match_limit_depth = mcontext->depth_limit;\n  mb->heap_limit = mcontext->heap_limit;\n  }\n\nif (mb->match_limit > re->limit_match)\n  mb->match_limit = re->limit_match;\n\nif (mb->match_limit_depth > re->limit_depth)\n  mb->match_limit_depth = re->limit_depth;\n\nif (mb->heap_limit > re->limit_heap)\n  mb->heap_limit = re->limit_heap;\n\nmb->start_code = (PCRE2_SPTR)((const uint8_t *)re + re->code_start);\nmb->tables = re->tables;\nmb->start_subject = subject;\nmb->end_subject = end_subject;\nmb->start_offset = start_offset;\nmb->allowemptypartial = (re->max_lookbehind > 0) ||\n  (re->flags & PCRE2_MATCH_EMPTY) != 0;\nmb->moptions = options;\nmb->poptions = re->overall_options;\nmb->match_call_count = 0;\nmb->heap_used = 0;\n\n/* Process the \\R and newline settings. */\n\nmb->bsr_convention = re->bsr_convention;\nmb->nltype = NLTYPE_FIXED;\nswitch(re->newline_convention)\n  {\n  case PCRE2_NEWLINE_CR:\n  mb->nllen = 1;\n  mb->nl[0] = CHAR_CR;\n  break;\n\n  case PCRE2_NEWLINE_LF:\n  mb->nllen = 1;\n  mb->nl[0] = CHAR_NL;\n  break;\n\n  case PCRE2_NEWLINE_NUL:\n  mb->nllen = 1;\n  mb->nl[0] = CHAR_NUL;\n  break;\n\n  case PCRE2_NEWLINE_CRLF:\n  mb->nllen = 2;\n  mb->nl[0] = CHAR_CR;\n  mb->nl[1] = CHAR_NL;\n  break;\n\n  case PCRE2_NEWLINE_ANY:\n  mb->nltype = NLTYPE_ANY;\n  break;\n\n  case PCRE2_NEWLINE_ANYCRLF:\n  mb->nltype = NLTYPE_ANYCRLF;\n  break;\n\n  /* LCOV_EXCL_START */\n  default:\n  PCRE2_DEBUG_UNREACHABLE();\n  rc = PCRE2_ERROR_INTERNAL;\n  goto EXIT;\n  /* LCOV_EXCL_STOP */\n  }\n\n/* Check a UTF string for validity if required. For 8-bit and 16-bit strings,\nwe must also check that a starting offset does not point into the middle of a\nmultiunit character. We check only the portion of the subject that is going to\nbe inspected during matching - from the offset minus the maximum back reference\nto the given length. This saves time when a small part of a large subject is\nbeing matched by the use of a starting offset. Note that the maximum lookbehind\nis a number of characters, not code units. */\n\n#ifdef SUPPORT_UNICODE\nif (utf && (options & PCRE2_NO_UTF_CHECK) == 0)\n  {\n  PCRE2_SPTR check_subject = start_match;  /* start_match includes offset */\n\n  if (start_offset > 0)\n    {\n#if PCRE2_CODE_UNIT_WIDTH != 32\n    unsigned int i;\n    if (start_match < end_subject && NOT_FIRSTCU(*start_match))\n      { rc = PCRE2_ERROR_BADUTFOFFSET; goto EXIT; }\n    for (i = re->max_lookbehind; i > 0 && check_subject > subject; i--)\n      {\n      check_subject--;\n      while (check_subject > subject &&\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      (*check_subject & 0xc0) == 0x80)\n#else  /* 16-bit */\n      (*check_subject & 0xfc00) == 0xdc00)\n#endif /* PCRE2_CODE_UNIT_WIDTH == 8 */\n        check_subject--;\n      }\n#else   /* In the 32-bit library, one code unit equals one character. */\n    check_subject -= re->max_lookbehind;\n    if (check_subject < subject) check_subject = subject;\n#endif  /* PCRE2_CODE_UNIT_WIDTH != 32 */\n    }\n\n  /* Validate the relevant portion of the subject. After an error, adjust the\n  offset to be an absolute offset in the whole string. */\n\n  rc = PRIV(valid_utf)(check_subject,\n    length - (PCRE2_SIZE)(check_subject - subject), &(match_data->startchar));\n  if (rc != 0)\n    {\n    match_data->startchar += (PCRE2_SIZE)(check_subject - subject);\n    goto EXIT;\n    }\n  }\n#endif  /* SUPPORT_UNICODE */\n\n/* Set up the first code unit to match, if available. If there's no first code\nunit there may be a bitmap of possible first characters. */\n\nif ((re->flags & PCRE2_FIRSTSET) != 0)\n  {\n  has_first_cu = TRUE;\n  first_cu = first_cu2 = (PCRE2_UCHAR)(re->first_codeunit);\n  if ((re->flags & PCRE2_FIRSTCASELESS) != 0)\n    {\n    first_cu2 = TABLE_GET(first_cu, mb->tables + fcc_offset, first_cu);\n#ifdef SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\n    if (first_cu > 127 && !utf && (re->overall_options & PCRE2_UCP) != 0)\n      first_cu2 = (PCRE2_UCHAR)UCD_OTHERCASE(first_cu);\n#else\n    if (first_cu > 127 && (utf || (re->overall_options & PCRE2_UCP) != 0))\n      first_cu2 = (PCRE2_UCHAR)UCD_OTHERCASE(first_cu);\n#endif\n#endif  /* SUPPORT_UNICODE */\n    }\n  }\nelse\n  if (!startline && (re->flags & PCRE2_FIRSTMAPSET) != 0)\n    start_bits = re->start_bitmap;\n\n/* There may be a \"last known required code unit\" set. */\n\nif ((re->flags & PCRE2_LASTSET) != 0)\n  {\n  has_req_cu = TRUE;\n  req_cu = req_cu2 = (PCRE2_UCHAR)(re->last_codeunit);\n  if ((re->flags & PCRE2_LASTCASELESS) != 0)\n    {\n    req_cu2 = TABLE_GET(req_cu, mb->tables + fcc_offset, req_cu);\n#ifdef SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\n    if (req_cu > 127 && !utf && (re->overall_options & PCRE2_UCP) != 0)\n      req_cu2 = (PCRE2_UCHAR)UCD_OTHERCASE(req_cu);\n#else\n    if (req_cu > 127 && (utf || (re->overall_options & PCRE2_UCP) != 0))\n      req_cu2 = (PCRE2_UCHAR)UCD_OTHERCASE(req_cu);\n#endif\n#endif  /* SUPPORT_UNICODE */\n    }\n  }\n\n/* If the match data block was previously used with PCRE2_COPY_MATCHED_SUBJECT,\nfree the memory that was obtained. */\n\nif ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) != 0)\n  {\n  match_data->memctl.free((void *)match_data->subject,\n    match_data->memctl.memory_data);\n  match_data->flags &= ~PCRE2_MD_COPIED_SUBJECT;\n  }\n\n/* Fill in fields that are always returned in the match data. */\n\nmatch_data->code = re;\nmatch_data->subject = NULL;  /* Default for match error */\nmatch_data->mark = NULL;\nmatch_data->matchedby = PCRE2_MATCHEDBY_DFA_INTERPRETER;\nmatch_data->options = original_options;\n\n/* Call the main matching function, looping for a non-anchored regex after a\nfailed match. If not restarting, perform certain optimizations at the start of\na match. */\n\nfor (;;)\n  {\n  /* ----------------- Start of match optimizations ---------------- */\n\n  /* There are some optimizations that avoid running the match if a known\n  starting point is not found, or if a known later code unit is not present.\n  However, there is an option (settable at compile time) that disables\n  these, for testing and for ensuring that all callouts do actually occur.\n  The optimizations must also be avoided when restarting a DFA match. */\n\n  if ((re->optimization_flags & PCRE2_OPTIM_START_OPTIMIZE) != 0 &&\n      (options & PCRE2_DFA_RESTART) == 0)\n    {\n    /* If firstline is TRUE, the start of the match is constrained to the first\n    line of a multiline string. That is, the match must be before or at the\n    first newline following the start of matching. Temporarily adjust\n    end_subject so that we stop the optimization scans for a first code unit\n    immediately after the first character of a newline (the first code unit can\n    legitimately be a newline). If the match fails at the newline, later code\n    breaks this loop. */\n\n    if (firstline)\n      {\n      PCRE2_SPTR t = start_match;\n#ifdef SUPPORT_UNICODE\n      if (utf)\n        {\n        while (t < end_subject && !IS_NEWLINE(t))\n          {\n          t++;\n          ACROSSCHAR(t < end_subject, t, t++);\n          }\n        }\n      else\n#endif\n      while (t < end_subject && !IS_NEWLINE(t)) t++;\n      end_subject = t;\n      }\n\n    /* Anchored: check the first code unit if one is recorded. This may seem\n    pointless but it can help in detecting a no match case without scanning for\n    the required code unit. */\n\n    if (anchored)\n      {\n      if (has_first_cu || start_bits != NULL)\n        {\n        BOOL ok = start_match < end_subject;\n        if (ok)\n          {\n          PCRE2_UCHAR c = *start_match;\n          ok = has_first_cu && (c == first_cu || c == first_cu2);\n          if (!ok && start_bits != NULL)\n            {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            if (c > 255) c = 255;\n#endif\n            ok = (start_bits[c/8] & (1u << (c&7))) != 0;\n            }\n          }\n        if (!ok) break;\n        }\n      }\n\n    /* Not anchored. Advance to a unique first code unit if there is one. */\n\n    else\n      {\n      if (has_first_cu)\n        {\n        if (first_cu != first_cu2)  /* Caseless */\n          {\n          /* In 16-bit and 32_bit modes we have to do our own search, so can\n          look for both cases at once. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\n          PCRE2_UCHAR smc;\n          while (start_match < end_subject &&\n                (smc = *start_match) != first_cu &&\n                 smc != first_cu2)\n            start_match++;\n#else\n          /* In 8-bit mode, the use of memchr() gives a big speed up, even\n          though we have to call it twice in order to find the earliest\n          occurrence of the code unit in either of its cases. Caching is used\n          to remember the positions of previously found code units. This can\n          make a huge difference when the strings are very long and only one\n          case is actually present. */\n\n          PCRE2_SPTR pp1 = NULL;\n          PCRE2_SPTR pp2 = NULL;\n          PCRE2_SIZE searchlength = end_subject - start_match;\n\n          /* If we haven't got a previously found position for first_cu, or if\n          the current starting position is later, we need to do a search. If\n          the code unit is not found, set it to the end. */\n\n          if (memchr_found_first_cu == NULL ||\n              start_match > memchr_found_first_cu)\n            {\n            pp1 = memchr(start_match, first_cu, searchlength);\n            memchr_found_first_cu = (pp1 == NULL)? end_subject : pp1;\n            }\n\n          /* If the start is before a previously found position, use the\n          previous position, or NULL if a previous search failed. */\n\n          else pp1 = (memchr_found_first_cu == end_subject)? NULL :\n            memchr_found_first_cu;\n\n          /* Do the same thing for the other case. */\n\n          if (memchr_found_first_cu2 == NULL ||\n              start_match > memchr_found_first_cu2)\n            {\n            pp2 = memchr(start_match, first_cu2, searchlength);\n            memchr_found_first_cu2 = (pp2 == NULL)? end_subject : pp2;\n            }\n\n          else pp2 = (memchr_found_first_cu2 == end_subject)? NULL :\n            memchr_found_first_cu2;\n\n          /* Set the start to the end of the subject if neither case was found.\n          Otherwise, use the earlier found point. */\n\n          if (pp1 == NULL)\n            start_match = (pp2 == NULL)? end_subject : pp2;\n          else\n            start_match = (pp2 == NULL || pp1 < pp2)? pp1 : pp2;\n\n#endif  /* 8-bit handling */\n          }\n\n        /* The caseful case is much simpler. */\n\n        else\n          {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n          while (start_match < end_subject && *start_match !=\n                 first_cu)\n            start_match++;\n#else  /* 8-bit code units */\n          start_match = memchr(start_match, first_cu, end_subject - start_match);\n          if (start_match == NULL) start_match = end_subject;\n#endif\n          }\n\n        /* If we can't find the required code unit, having reached the true end\n        of the subject, break the bumpalong loop, to force a match failure,\n        except when doing partial matching, when we let the next cycle run at\n        the end of the subject. To see why, consider the pattern /(?<=abc)def/,\n        which partially matches \"abc\", even though the string does not contain\n        the starting character \"d\". If we have not reached the true end of the\n        subject (PCRE2_FIRSTLINE caused end_subject to be temporarily modified)\n        we also let the cycle run, because the matching string is legitimately\n        allowed to start with the first code unit of a newline. */\n\n        if ((mb->moptions & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) == 0 &&\n            start_match >= mb->end_subject)\n          break;\n        }\n\n      /* If there's no first code unit, advance to just after a linebreak for a\n      multiline match if required. */\n\n      else if (startline)\n        {\n        if (start_match > mb->start_subject + start_offset)\n          {\n#ifdef SUPPORT_UNICODE\n          if (utf)\n            {\n            while (start_match < end_subject && !WAS_NEWLINE(start_match))\n              {\n              start_match++;\n              ACROSSCHAR(start_match < end_subject, start_match, start_match++);\n              }\n            }\n          else\n#endif\n          while (start_match < end_subject && !WAS_NEWLINE(start_match))\n            start_match++;\n\n          /* If we have just passed a CR and the newline option is ANY or\n          ANYCRLF, and we are now at a LF, advance the match position by one\n          more code unit. */\n\n          if (start_match[-1] == CHAR_CR &&\n               (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF) &&\n               start_match < end_subject &&\n               *start_match == CHAR_NL)\n            start_match++;\n          }\n        }\n\n      /* If there's no first code unit or a requirement for a multiline line\n      start, advance to a non-unique first code unit if any have been\n      identified. The bitmap contains only 256 bits. When code units are 16 or\n      32 bits wide, all code units greater than 254 set the 255 bit. */\n\n      else if (start_bits != NULL)\n        {\n        while (start_match < end_subject)\n          {\n          uint32_t c = *start_match;\n#if PCRE2_CODE_UNIT_WIDTH != 8\n          if (c > 255) c = 255;\n#endif\n          if ((start_bits[c/8] & (1u << (c&7))) != 0) break;\n          start_match++;\n          }\n\n        /* See comment above in first_cu checking about the next line. */\n\n        if ((mb->moptions & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) == 0 &&\n            start_match >= mb->end_subject)\n          break;\n        }\n      }  /* End of first code unit handling */\n\n    /* Restore fudged end_subject */\n\n    end_subject = mb->end_subject;\n\n    /* The following two optimizations are disabled for partial matching. */\n\n    if ((mb->moptions & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) == 0)\n      {\n      PCRE2_SPTR p;\n\n      /* The minimum matching length is a lower bound; no actual string of that\n      length may actually match the pattern. Although the value is, strictly,\n      in characters, we treat it as code units to avoid spending too much time\n      in this optimization. */\n\n      if (end_subject - start_match < re->minlength) goto NOMATCH_EXIT;\n\n      /* If req_cu is set, we know that that code unit must appear in the\n      subject for the match to succeed. If the first code unit is set, req_cu\n      must be later in the subject; otherwise the test starts at the match\n      point. This optimization can save a huge amount of backtracking in\n      patterns with nested unlimited repeats that aren't going to match.\n      Writing separate code for cased/caseless versions makes it go faster, as\n      does using an autoincrement and backing off on a match. As in the case of\n      the first code unit, using memchr() in the 8-bit library gives a big\n      speed up. Unlike the first_cu check above, we do not need to call\n      memchr() twice in the caseless case because we only need to check for the\n      presence of the character in either case, not find the first occurrence.\n\n      The search can be skipped if the code unit was found later than the\n      current starting point in a previous iteration of the bumpalong loop.\n\n      HOWEVER: when the subject string is very, very long, searching to its end\n      can take a long time, and give bad performance on quite ordinary\n      patterns. This showed up when somebody was matching something like\n      /^\\d+C/ on a 32-megabyte string... so we don't do this when the string is\n      sufficiently long, but it's worth searching a lot more for unanchored\n      patterns. */\n\n      p = start_match + (has_first_cu? 1:0);\n      if (has_req_cu && p > req_cu_ptr)\n        {\n        PCRE2_SIZE check_length = end_subject - start_match;\n\n        if (check_length < REQ_CU_MAX ||\n              (!anchored && check_length < REQ_CU_MAX * 1000))\n          {\n          if (req_cu != req_cu2)  /* Caseless */\n            {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            while (p < end_subject)\n              {\n              uint32_t pp = *p++;\n              if (pp == req_cu || pp == req_cu2) { p--; break; }\n              }\n#else  /* 8-bit code units */\n            PCRE2_SPTR pp = p;\n            p = memchr(pp, req_cu, end_subject - pp);\n            if (p == NULL)\n              {\n              p = memchr(pp, req_cu2, end_subject - pp);\n              if (p == NULL) p = end_subject;\n              }\n#endif /* PCRE2_CODE_UNIT_WIDTH != 8 */\n            }\n\n          /* The caseful case */\n\n          else\n            {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            while (p < end_subject)\n              {\n              if (*p++ == req_cu) { p--; break; }\n              }\n\n#else  /* 8-bit code units */\n            p = memchr(p, req_cu, end_subject - p);\n            if (p == NULL) p = end_subject;\n#endif\n            }\n\n          /* If we can't find the required code unit, break the matching loop,\n          forcing a match failure. */\n\n          if (p >= end_subject) break;\n\n          /* If we have found the required code unit, save the point where we\n          found it, so that we don't search again next time round the loop if\n          the start hasn't passed this code unit yet. */\n\n          req_cu_ptr = p;\n          }\n        }\n      }\n    }\n\n  /* ------------ End of start of match optimizations ------------ */\n\n  /* Give no match if we have passed the bumpalong limit. */\n\n  if (start_match > bumpalong_limit) break;\n\n  /* OK, now we can do the business */\n\n  mb->start_used_ptr = start_match;\n  mb->last_used_ptr = start_match;\n  mb->recursive = NULL;\n\n  rc = internal_dfa_match(\n    mb,                           /* fixed match data */\n    mb->start_code,               /* this subexpression's code */\n    start_match,                  /* where we currently are */\n    start_offset,                 /* start offset in subject */\n    match_data->ovector,          /* offset vector */\n    (uint32_t)match_data->oveccount * 2,  /* actual size of same */\n    workspace,                    /* workspace vector */\n    (int)wscount,                 /* size of same */\n    0,                            /* function recurse level */\n    base_recursion_workspace);    /* initial workspace for recursion */\n\n  /* Anything other than \"no match\" means we are done, always; otherwise, carry\n  on only if not anchored. */\n\n  if (rc != PCRE2_ERROR_NOMATCH || anchored)\n    {\n    if (rc == PCRE2_ERROR_NOMATCH) goto NOMATCH_EXIT;\n\n    if (rc == PCRE2_ERROR_PARTIAL && match_data->oveccount > 0)\n      {\n      match_data->ovector[0] = (PCRE2_SIZE)(start_match - subject);\n      match_data->ovector[1] = (PCRE2_SIZE)(end_subject - subject);\n      }\n\n    if (rc >= 0 || rc == PCRE2_ERROR_PARTIAL)\n      {\n      match_data->subject_length = length;\n      match_data->start_offset = start_offset;\n      match_data->leftchar = (PCRE2_SIZE)(mb->start_used_ptr - subject);\n      match_data->rightchar = (PCRE2_SIZE)(mb->last_used_ptr - subject);\n      match_data->startchar = (PCRE2_SIZE)(start_match - subject);\n      }\n\n    if (rc >= 0 && (options & PCRE2_COPY_MATCHED_SUBJECT) != 0)\n      {\n      if (length != 0)\n        {\n        match_data->subject = match_data->memctl.malloc(CU2BYTES(length),\n          match_data->memctl.memory_data);\n        if (match_data->subject == NULL)\n          { rc = PCRE2_ERROR_NOMEMORY; goto EXIT; }\n        memcpy((void *)match_data->subject, subject, CU2BYTES(length));\n        }\n      else\n        match_data->subject = NULL;\n      match_data->flags |= PCRE2_MD_COPIED_SUBJECT;\n      }\n    else if (rc >= 0 || rc == PCRE2_ERROR_PARTIAL)\n      {\n      match_data->subject = original_subject;\n      }\n    goto EXIT;\n    }\n\n  /* Advance to the next subject character unless we are at the end of a line\n  and firstline is set. */\n\n  if (firstline && IS_NEWLINE(start_match)) break;\n  start_match++;\n#ifdef SUPPORT_UNICODE\n  if (utf)\n    {\n    ACROSSCHAR(start_match < end_subject, start_match, start_match++);\n    }\n#endif\n  if (start_match > end_subject) break;\n\n  /* If we have just passed a CR and we are now at a LF, and the pattern does\n  not contain any explicit matches for \\r or \\n, and the newline option is CRLF\n  or ANY or ANYCRLF, advance the match position by one more character. */\n\n  if (start_match[-1] == CHAR_CR &&\n      start_match < end_subject &&\n      *start_match == CHAR_NL &&\n      (re->flags & PCRE2_HASCRORLF) == 0 &&\n        (mb->nltype == NLTYPE_ANY ||\n         mb->nltype == NLTYPE_ANYCRLF ||\n         mb->nllen == 2))\n    start_match++;\n\n  }   /* \"Bumpalong\" loop */\n\nNOMATCH_EXIT:\nmatch_data->subject = original_subject;\nmatch_data->subject_length = length;\nmatch_data->start_offset = start_offset;\nrc = PCRE2_ERROR_NOMATCH;\n\nEXIT:\nwhile (rws->next != NULL)\n  {\n  RWS_anchor *next = rws->next;\n  rws->next = next->next;\n  mb->memctl.free(next, mb->memctl.memory_data);\n  }\n\nmatch_data->rc = rc;\nreturn rc;\n}\n\n/* These #undefs are here to enable unity builds with CMake. */\n\n#undef NLBLOCK /* Block containing newline information */\n#undef PSSTART /* Field containing processed string start */\n#undef PSEND   /* Field containing processed string end */\n\n/* End of pcre2_dfa_match.c */\n"
  },
  {
    "path": "src/pcre2_dftables.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2020 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This is a freestanding support program to generate a file containing\ncharacter tables for PCRE2. The tables are built using the pcre2_maketables()\nfunction, which is part of the PCRE2 API. By default, the system's \"C\" locale\nis used rather than what the building user happens to have set, but the -L\noption can be used to select the current locale from the LC_ALL environment\nvariable. By default, the tables are written in source form, but if -b is\ngiven, they are written in binary. */\n\n\n\n#include <ctype.h>\n#include <stdio.h>\n#include <string.h>\n#include <locale.h>\n\n/* For pcre2_internal.h, pcre2_maketables.c, pcre2_tables.c */\n#define PCRE2_DFTABLES\n/* For pcre2_tables.c */\n#define PRIV(name) name\n\n#define PCRE2_CODE_UNIT_WIDTH 0   /* Must be set, but not relevant here */\n#include \"pcre2_internal.h\"\n\n#include \"pcre2_maketables.c\"\n#include \"pcre2_tables.c\"\n\n\nstatic const char *classlist[] =\n  {\n  \"space\", \"xdigit\", \"digit\", \"upper\", \"lower\",\n  \"word\", \"graph\", \"print\", \"punct\", \"cntrl\"\n  };\n\nstatic int identity(int c) { return c; }\n\n#ifdef EBCDIC\nstatic int ebcdic_to_unicode(int c)\n{\nif (c < 0 || c > 255) abort();\n\nreturn ebcdic_1047_to_ascii[c];\n}\n\nstatic int unicode_to_ebcdic(int c)\n{\nif (c < 0 || c > 255) abort();\n\nreturn ascii_to_ebcdic_1047[c];\n}\n#endif\n\n\n/*************************************************\n*                  Usage                         *\n*************************************************/\n\nstatic void\nusage(void)\n{\n(void)fprintf(stderr,\n  \"Usage: pcre2_dftables [options] <output file>\\n\"\n  \"  -b    Write output in binary (default is source code)\\n\"\n  \"  -L    Use locale from LC_ALL (default is \\\"C\\\" locale)\\n\"\n#ifdef EBCDIC\n  \"  -E    Use EBCDIC 1047 via locale C.UTF-8\\n\"\n#endif\n  );\n}\n\n\n\n/*************************************************\n*                Entry point                     *\n*************************************************/\n\nint main(int argc, char **argv)\n{\nFILE *f;\nint i;\nint nclass = 0;\nBOOL binary = FALSE;\nchar *env = (char *)\"C\";\nconst uint8_t *tables;\nconst uint8_t *base_of_tables;\nint (*charfn_to)(int) = identity;\nint (*charfn_from)(int) = identity;\n\n/* Process options */\n\nfor (i = 1; i < argc; i++)\n  {\n  char *arg = argv[i];\n  if (*arg != '-') break;\n\n  if (strcmp(arg, \"-help\") == 0 || strcmp(arg, \"--help\") == 0)\n    {\n    usage();\n    return 0;\n    }\n\n  else if (strcmp(arg, \"-L\") == 0)\n    {\n    if (setlocale(LC_ALL, \"\") == NULL)\n      {\n      (void)fprintf(stderr, \"pcre2_dftables: setlocale() failed\\n\");\n      return 1;\n      }\n    env = getenv(\"LC_ALL\");\n    }\n\n#ifdef EBCDIC\n  else if (strcmp(arg, \"-E\") == 0)\n    {\n    if (setlocale(LC_ALL, \"C.UTF-8\") == NULL)\n      {\n      (void)fprintf(stderr, \"pcre2_dftables: setlocale() failed\\n\");\n      return 1;\n      }\n#ifdef EBCDIC_NL25\n    env = \"EBCDIC 1047 (NL 0x25)\";\n#else\n    env = \"EBCDIC 1047 (NL 0x15)\";\n#endif\n    charfn_to = ebcdic_to_unicode;\n    charfn_from = unicode_to_ebcdic;\n    }\n#endif\n\n  else if (strcmp(arg, \"-b\") == 0)\n    binary = TRUE;\n\n  else\n    {\n    (void)fprintf(stderr, \"pcre2_dftables: unrecognized option %s\\n\", arg);\n    return 1;\n    }\n  }\n\nif (i != argc - 1)\n  {\n  (void)fprintf(stderr, \"pcre2_dftables: one filename argument is required\\n\");\n  return 1;\n  }\n\n/* Make the tables */\n\ntables = maketables(charfn_to, charfn_from);\nbase_of_tables = tables;\n\nf = fopen(argv[i], \"wb\");\nif (f == NULL)\n  {\n  fprintf(stderr, \"pcre2_dftables: failed to open %s for writing\\n\", argv[1]);\n  return 1;\n  }\n\n/* If -b was specified, we write the tables in binary. */\n\nif (binary)\n  {\n  int yield = 0;\n  size_t len = fwrite(tables, 1, TABLES_LENGTH, f);\n  if (len != TABLES_LENGTH)\n    {\n    (void)fprintf(stderr, \"pcre2_dftables: fwrite() returned wrong length %d \"\n     \"instead of %d\\n\", (int)len, TABLES_LENGTH);\n    yield = 1;\n    }\n  fclose(f);\n  free((void *)base_of_tables);\n  return yield;\n  }\n\n/* Write the tables as source code for inclusion in the PCRE2 library. There\nare several fprintf() calls here, because gcc in pedantic mode complains about\nthe very long string otherwise. */\n\n(void)fprintf(f,\n  \"/*************************************************\\n\"\n  \"*      Perl-Compatible Regular Expressions       *\\n\"\n  \"*************************************************/\\n\\n\"\n  \"/* This file was automatically written by the pcre2_dftables auxiliary\\n\"\n  \"program. It contains character tables that are used when no external\\n\"\n  \"tables are passed to PCRE2 by the application that calls it. The tables\\n\"\n  \"are used only for characters whose code values are less than 256, and\\n\"\n  \"only relevant if not in UCP mode. */\\n\\n\");\n\n(void)fprintf(f,\n  \"/* This set of tables was written in the %s locale. */\\n\\n\", env);\n\n(void)fprintf(f,\n  \"/* The pcre2_ftables program (which is distributed with PCRE2) can be used\\n\"\n  \"to build alternative versions of this file. This is necessary if you are\\n\"\n  \"running in an EBCDIC environment, or if you want to default to a different\\n\"\n  \"encoding, for example ISO-8859-1. When pcre2_dftables is run, it creates\\n\"\n  \"these tables in the \\\"C\\\" locale by default. This happens automatically if\\n\"\n  \"PCRE2 is configured with --enable-rebuild-chartables. However, you can run\\n\"\n  \"pcre2_dftables manually with the -L option to build tables using the LC_ALL\\n\"\n  \"locale. */\\n\\n\");\n\n(void)fprintf(f,\n  \"#include \\\"pcre2_internal.h\\\"\\n\\n\");\n\n(void)fprintf(f,\n  \"const uint8_t PRIV(default_tables)[] = {\\n\\n\"\n  \"/* This table is a lower casing table. */\\n\\n\");\n\n(void)fprintf(f, \"  \");\nfor (i = 0; i < 256; i++)\n  {\n  if ((i & 7) == 0 && i != 0) fprintf(f, \"\\n  \");\n  fprintf(f, \"%3d\", *tables++);\n  if (i != 255) fprintf(f, \",\");\n  }\n(void)fprintf(f, \",\\n\\n\");\n\n(void)fprintf(f, \"/* This table is a case flipping table. */\\n\\n\");\n\n(void)fprintf(f, \"  \");\nfor (i = 0; i < 256; i++)\n  {\n  if ((i & 7) == 0 && i != 0) fprintf(f, \"\\n  \");\n  fprintf(f, \"%3d\", *tables++);\n  if (i != 255) fprintf(f, \",\");\n  }\n(void)fprintf(f, \",\\n\\n\");\n\n(void)fprintf(f,\n  \"/* This table contains bit maps for various character classes. Each map is 32\\n\"\n  \"bytes long and the bits run from the least significant end of each byte. The\\n\"\n  \"classes that have their own maps are: space, xdigit, digit, upper, lower, word,\\n\"\n  \"graph, print, punct, and cntrl. Other classes are built from combinations. */\\n\\n\");\n\n(void)fprintf(f, \"  \");\nfor (i = 0; i < cbit_length; i++)\n  {\n  if ((i & 7) == 0 && i != 0)\n    {\n    if ((i & 31) == 0) (void)fprintf(f, \"\\n\");\n    if ((i & 24) == 8) (void)fprintf(f, \"  /* %s */\", classlist[nclass++]);\n    (void)fprintf(f, \"\\n  \");\n    }\n  (void)fprintf(f, \"0x%02x\", *tables++);\n  if (i != cbit_length - 1) (void)fprintf(f, \",\");\n  }\n(void)fprintf(f, \",\\n\\n\");\n\n(void)fprintf(f,\n  \"/* This table identifies various classes of character by individual bits:\\n\"\n  \"  0x%02x   white space character\\n\"\n  \"  0x%02x   letter\\n\"\n  \"  0x%02x   lower case letter\\n\"\n  \"  0x%02x   decimal digit\\n\"\n  \"  0x%02x   word (alphanumeric or '_')\\n*/\\n\\n\",\n  ctype_space, ctype_letter, ctype_lcletter, ctype_digit, ctype_word);\n\n(void)fprintf(f, \"  \");\nfor (i = 0; i < 256; i++)\n  {\n  if ((i & 7) == 0 && i != 0)\n    {\n    (void)fprintf(f, \" /* \");\n    if (isprint(i-8)) (void)fprintf(f, \" %c -\", i-8);\n      else (void)fprintf(f, \"%3d-\", i-8);\n    if (isprint(i-1)) (void)fprintf(f, \" %c \", i-1);\n      else (void)fprintf(f, \"%3d\", i-1);\n    (void)fprintf(f, \" */\\n  \");\n    }\n  (void)fprintf(f, \"0x%02x\", *tables++);\n  if (i != 255) (void)fprintf(f, \",\");\n  }\n\n(void)fprintf(f, \"};/* \");\nif (isprint(i-8)) (void)fprintf(f, \" %c -\", i-8);\n  else (void)fprintf(f, \"%3d-\", i-8);\nif (isprint(i-1)) (void)fprintf(f, \" %c \", i-1);\n  else (void)fprintf(f, \"%3d\", i-1);\n(void)fprintf(f, \" */\\n\\n/* End of pcre2_chartables.c */\\n\");\n\nfclose(f);\nfree((void *)base_of_tables);\nreturn 0;\n}\n\n/* End of pcre2_dftables.c */\n"
  },
  {
    "path": "src/pcre2_error.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_internal.h\"\n\n\n\n#define STRING(a)  # a\n#define XSTRING(s) STRING(s)\n\n/* The texts of compile-time error messages. Compile-time error numbers start\nat COMPILE_ERROR_BASE (100).\n\nThis used to be a table of strings, but in order to reduce the number of\nrelocations needed when a shared library is loaded dynamically, it is now one\nlong string. We cannot use a table of offsets, because the lengths of inserts\nsuch as XSTRING(MAX_NAME_SIZE) are not known. Instead,\npcre2_get_error_message() counts through to the one it wants - this isn't a\nperformance issue because these strings are used only when there is an error.\n\nEach substring ends with \\0 to insert a null character. This includes the final\nsubstring, so that the whole string ends with \\0\\0, which can be detected when\ncounting through. */\n\nstatic const unsigned char compile_error_texts[] =\n  \"no error\\0\"\n  \"\\\\ at end of pattern\\0\"\n  \"\\\\c at end of pattern\\0\"\n  \"unrecognized character follows \\\\\\0\"\n  \"numbers out of order in {} quantifier\\0\"\n  /* 5 */\n  \"number too big in {} quantifier\\0\"\n  \"missing terminating ] for character class\\0\"\n  \"escape sequence is invalid in character class\\0\"\n  \"range out of order in character class\\0\"\n  \"quantifier does not follow a repeatable item\\0\"\n  /* 10 */\n  \"internal error: unexpected repeat\\0\"\n  \"unrecognized character after (? or (?-\\0\"\n  \"POSIX named classes are supported only within a class\\0\"\n  \"POSIX collating elements are not supported\\0\"\n  \"missing closing parenthesis\\0\"\n  /* 15 */\n  \"reference to non-existent subpattern\\0\"\n  \"pattern passed as NULL with non-zero length\\0\"\n  \"unrecognised compile-time option bit(s)\\0\"\n  \"missing ) after (?# comment\\0\"\n  \"parentheses are too deeply nested\\0\"\n  /* 20 */\n  \"regular expression is too large\\0\"\n  \"failed to allocate heap memory\\0\"\n  \"unmatched closing parenthesis\\0\"\n  \"internal error: code overflow\\0\"\n  \"missing closing parenthesis for condition\\0\"\n  /* 25 */\n  \"length of lookbehind assertion is not limited\\0\"\n  \"a relative value of zero is not allowed\\0\"\n  \"conditional subpattern contains more than two branches\\0\"\n  \"atomic assertion expected after (?( or (?(?C)\\0\"\n  \"digit expected after (?+\\0\"\n  /* 30 */\n  \"unknown POSIX class name\\0\"\n  \"internal error in pcre2_study(): should not occur\\0\"\n  \"this version of PCRE2 does not have Unicode support\\0\"\n  \"parentheses are too deeply nested (stack check)\\0\"\n  \"character code point value in \\\\x{} or \\\\o{} is too large\\0\"\n  /* 35 */\n  \"lookbehind is too complicated\\0\"\n  \"\\\\C is not allowed in a lookbehind assertion in UTF-\" XSTRING(PCRE2_CODE_UNIT_WIDTH) \" mode\\0\"\n  \"PCRE2 does not support \\\\F, \\\\L, \\\\l, \\\\N{name}, \\\\U, or \\\\u\\0\"\n  \"number after (?C is greater than 255\\0\"\n  \"closing parenthesis for (?C expected\\0\"\n  /* 40 */\n  \"invalid escape sequence in (*VERB) name\\0\"\n  \"unrecognized character after (?P\\0\"\n  \"syntax error in subpattern name (missing terminator?)\\0\"\n  \"two named subpatterns have the same name (PCRE2_DUPNAMES not set)\\0\"\n  \"subpattern name must start with a non-digit\\0\"\n  /* 45 */\n  \"this version of PCRE2 does not have support for \\\\P, \\\\p, or \\\\X\\0\"\n  \"malformed \\\\P or \\\\p sequence\\0\"\n  \"unknown property after \\\\P or \\\\p\\0\"\n  \"subpattern name is too long (maximum \" XSTRING(MAX_NAME_SIZE) \" code units)\\0\"\n  \"too many named subpatterns (maximum \" XSTRING(MAX_NAME_COUNT) \")\\0\"\n  /* 50 */\n  \"invalid range in character class\\0\"\n  \"octal value is greater than \\\\377 in 8-bit non-UTF-8 mode\\0\"\n  \"internal error: overran compiling workspace\\0\"\n  \"internal error: previously-checked referenced subpattern not found\\0\"\n  \"DEFINE subpattern contains more than one branch\\0\"\n  /* 55 */\n  \"missing opening brace after \\\\o\\0\"\n  \"internal error: unknown newline setting\\0\"\n  \"\\\\g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number\\0\"\n  \"(?R (recursive pattern call) must be followed by a closing parenthesis\\0\"\n  /* \"an argument is not allowed for (*ACCEPT), (*FAIL), or (*COMMIT)\\0\" */\n  \"obsolete error (should not occur)\\0\"  /* Was the above */\n  /* 60 */\n  \"(*VERB) not recognized or malformed\\0\"\n  \"subpattern number is too big\\0\"\n  \"subpattern name expected\\0\"\n  \"internal error: parsed pattern overflow\\0\"\n  \"non-octal character in \\\\o{} (closing brace missing?)\\0\"\n  /* 65 */\n  \"different names for subpatterns of the same number are not allowed\\0\"\n  \"(*MARK) must have an argument\\0\"\n  \"non-hex character in \\\\x{} (closing brace missing?)\\0\"\n#ifndef EBCDIC\n  \"\\\\c must be followed by a printable ASCII character\\0\"\n#else\n  \"\\\\c must be followed by a letter or one of @[\\\\]^_?\\0\"\n#endif\n  \"\\\\k is not followed by a braced, angle-bracketed, or quoted name\\0\"\n  /* 70 */\n  \"internal error: unknown meta code in check_lookbehinds()\\0\"\n  \"\\\\N is not supported in a class\\0\"\n  \"callout string is too long\\0\"\n  \"disallowed Unicode code point (>= 0xd800 && <= 0xdfff)\\0\"\n  \"using UTF is disabled by the application\\0\"\n  /* 75 */\n  \"using UCP is disabled by the application\\0\"\n  \"name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)\\0\"\n  \"character code point value in \\\\u.... sequence is too large\\0\"\n  \"digits missing after \\\\x or in \\\\x{} or \\\\o{} or \\\\N{U+}\\0\"\n  \"syntax error or number too big in (?(VERSION condition\\0\"\n  /* 80 */\n  \"internal error: unknown opcode in auto_possessify()\\0\"\n  \"missing terminating delimiter for callout with string argument\\0\"\n  \"unrecognized string delimiter follows (?C\\0\"\n  \"using \\\\C is disabled by the application\\0\"\n  \"(?| and/or (?J: or (?x: parentheses are too deeply nested\\0\"\n  /* 85 */\n  \"using \\\\C is disabled in this PCRE2 library\\0\"\n  \"regular expression is too complicated\\0\"\n  \"lookbehind assertion is too long\\0\"\n  \"pattern string is longer than the limit set by the application\\0\"\n  \"internal error: unknown code in parsed pattern\\0\"\n  /* 90 */\n  \"internal error: bad code value in parsed_skip()\\0\"\n  \"PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is not allowed in UTF-16 mode\\0\"\n  \"invalid option bits with PCRE2_LITERAL\\0\"\n  \"\\\\N{U+dddd} is supported only in Unicode (UTF) mode\\0\"\n  \"invalid hyphen in option setting\\0\"\n  /* 95 */\n  \"(*alpha_assertion) not recognized\\0\"\n  \"script runs require Unicode support, which this version of PCRE2 does not have\\0\"\n  \"too many capturing groups (maximum 65535)\\0\"\n  \"octal digit missing after \\\\0 (PCRE2_EXTRA_NO_BS0 is set)\\0\"\n  \"\\\\K is not allowed in lookarounds (but see PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)\\0\"\n  /* 100 */\n  \"branch too long in variable-length lookbehind assertion\\0\"\n  \"compiled pattern would be longer than the limit set by the application\\0\"\n  \"octal value given by \\\\ddd is greater than \\\\377 (forbidden by PCRE2_EXTRA_PYTHON_OCTAL)\\0\"\n  \"using callouts is disabled by the application\\0\"\n  \"PCRE2_EXTRA_TURKISH_CASING require Unicode (UTF or UCP) mode\\0\"\n  /* 105 */\n  \"PCRE2_EXTRA_TURKISH_CASING requires UTF in 8-bit mode\\0\"\n  \"PCRE2_EXTRA_TURKISH_CASING and PCRE2_EXTRA_CASELESS_RESTRICT are not compatible\\0\"\n  \"extended character class nesting is too deep\\0\"\n  \"invalid operator in extended character class\\0\"\n  \"unexpected operator in extended character class (no preceding operand)\\0\"\n  /* 110 */\n  \"expected operand after operator in extended character class\\0\"\n  \"square brackets needed to clarify operator precedence in extended character class\\0\"\n  \"missing terminating ] for extended character class (note '[' must be escaped under PCRE2_ALT_EXTENDED_CLASS)\\0\"\n  \"unexpected expression in extended character class (no preceding operator)\\0\"\n  \"empty expression in extended character class\\0\"\n  /* 115 */\n  \"terminating ] with no following closing parenthesis in (?[...]\\0\"\n  \"unexpected character in (?[...]) extended character class\\0\"\n  \"expected capture group number or name\\0\"\n  \"missing opening parenthesis\\0\"\n  \"syntax error in subpattern number (missing terminator?)\\0\"\n  /* 120 */\n  \"erroroffset passed as NULL\\0\"\n  ;\n\n/* Match-time and UTF error texts are in the same format. */\n\nstatic const unsigned char match_error_texts[] =\n  \"no error\\0\"\n  \"no match\\0\"\n  \"partial match\\0\"\n  \"UTF-8 error: 1 byte missing at end\\0\"\n  \"UTF-8 error: 2 bytes missing at end\\0\"\n  /* 5 */\n  \"UTF-8 error: 3 bytes missing at end\\0\"\n  \"UTF-8 error: 4 bytes missing at end\\0\"\n  \"UTF-8 error: 5 bytes missing at end\\0\"\n  \"UTF-8 error: byte 2 top bits not 0x80\\0\"\n  \"UTF-8 error: byte 3 top bits not 0x80\\0\"\n  /* 10 */\n  \"UTF-8 error: byte 4 top bits not 0x80\\0\"\n  \"UTF-8 error: byte 5 top bits not 0x80\\0\"\n  \"UTF-8 error: byte 6 top bits not 0x80\\0\"\n  \"UTF-8 error: 5-byte character is not allowed (RFC 3629)\\0\"\n  \"UTF-8 error: 6-byte character is not allowed (RFC 3629)\\0\"\n  /* 15 */\n  \"UTF-8 error: code points greater than 0x10ffff are not defined\\0\"\n  \"UTF-8 error: code points 0xd800-0xdfff are not defined\\0\"\n  \"UTF-8 error: overlong 2-byte sequence\\0\"\n  \"UTF-8 error: overlong 3-byte sequence\\0\"\n  \"UTF-8 error: overlong 4-byte sequence\\0\"\n  /* 20 */\n  \"UTF-8 error: overlong 5-byte sequence\\0\"\n  \"UTF-8 error: overlong 6-byte sequence\\0\"\n  \"UTF-8 error: isolated byte with 0x80 bit set\\0\"\n  \"UTF-8 error: illegal byte (0xfe or 0xff)\\0\"\n  \"UTF-16 error: missing low surrogate at end\\0\"\n  /* 25 */\n  \"UTF-16 error: invalid low surrogate\\0\"\n  \"UTF-16 error: isolated low surrogate\\0\"\n  \"UTF-32 error: code points 0xd800-0xdfff are not defined\\0\"\n  \"UTF-32 error: code points greater than 0x10ffff are not defined\\0\"\n  \"bad data value\\0\"\n  /* 30 */\n  \"patterns do not all use the same character tables\\0\"\n  \"magic number missing\\0\"\n  \"pattern compiled in wrong mode: 8/16/32-bit error\\0\"\n  \"bad offset value\\0\"\n  \"bad option value\\0\"\n  /* 35 */\n  \"invalid replacement string\\0\"\n  \"bad offset into UTF string\\0\"\n  \"callout error code\\0\"              /* Never returned by PCRE2 itself */\n  \"invalid data in workspace for DFA restart\\0\"\n  \"too much recursion for DFA matching\\0\"\n  /* 40 */\n  \"backreference condition or recursion test is not supported for DFA matching\\0\"\n  \"function is not supported for DFA matching\\0\"\n  \"pattern contains an item that is not supported for DFA matching\\0\"\n  \"workspace size exceeded in DFA matching\\0\"\n  \"internal error - pattern overwritten?\\0\"\n  /* 45 */\n  \"bad JIT option\\0\"\n  \"JIT stack limit reached\\0\"\n  \"match limit exceeded\\0\"\n  \"no more memory\\0\"\n  \"unknown substring\\0\"\n  /* 50 */\n  \"non-unique substring name\\0\"\n  \"NULL argument passed with non-zero length\\0\"\n  \"nested recursion at the same subject position\\0\"\n  \"matching depth limit exceeded\\0\"\n  \"requested value is not available\\0\"\n  /* 55 */\n  \"requested value is not set\\0\"\n  \"offset limit set without PCRE2_USE_OFFSET_LIMIT\\0\"\n  \"bad escape sequence in replacement string\\0\"\n  \"expected closing curly bracket in replacement string\\0\"\n  \"bad substitution in replacement string\\0\"\n  /* 60 */\n  \"match with end before start or start moved backwards is not supported\\0\"\n  \"too many replacements (more than INT_MAX)\\0\"\n  \"bad serialized data\\0\"\n  \"heap limit exceeded\\0\"\n  \"invalid syntax\\0\"\n  /* 65 */\n  \"internal error: duplicate substitution match\\0\"\n  \"PCRE2_MATCH_INVALID_UTF is not supported for DFA matching\\0\"\n  \"internal error: invalid substring offset\\0\"\n  \"feature is not supported by the JIT compiler\\0\"\n  \"error performing replacement case transformation\\0\"\n  /* 70 */\n  \"replacement too large (longer than PCRE2_SIZE)\\0\"\n  \"substitute pattern differs from prior match call\\0\"\n  \"substitute subject differs from prior match call\\0\"\n  \"substitute start offset differs from prior match call\\0\"\n  \"substitute options differ from prior match call\\0\"\n  /* 75 */\n  \"disallowed use of \\\\K in lookaround\\0\"\n  \"replacement $' or $_ not supported with partial match\\0\"\n  ;\n\n\n/*************************************************\n*            Return error message                *\n*************************************************/\n\n/* This function copies an error message into a buffer whose units are of an\nappropriate width. Error numbers are positive for compile-time errors, and\nnegative for match-time errors (except for UTF errors), but the numbers are all\ndistinct.\n\nArguments:\n  enumber       error number\n  buffer        where to put the message (zero terminated)\n  size          size of the buffer in code units\n\nReturns:        length of message if all is well\n                negative on error\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_get_error_message(int enumber, PCRE2_UCHAR *buffer, PCRE2_SIZE size)\n{\nconst unsigned char *message;\nPCRE2_SIZE i;\nint n, rc = 0;\n\nif (size == 0) return PCRE2_ERROR_NOMEMORY;\n\nif (enumber >= COMPILE_ERROR_BASE)  /* Compile error */\n  {\n  message = compile_error_texts;\n  n = enumber - COMPILE_ERROR_BASE;\n  }\nelse if (enumber < 0)               /* Match or UTF error */\n  {\n  message = match_error_texts;\n  n = -enumber;\n  }\nelse                                /* Invalid error number */\n  {\n  message = (const unsigned char *)\"\\0\";  /* Empty message list */\n  n = 1;\n  }\n\nfor (; n > 0; n--)\n  {\n  while (*message++ != CHAR_NUL) {}\n  if (*message == CHAR_NUL) return PCRE2_ERROR_BADDATA;\n  }\n\nfor (i = 0; *message != 0; i++)\n  {\n  if (i >= size - 1)\n    {\n    rc = PCRE2_ERROR_NOMEMORY;\n    break;\n    }\n  buffer[i] = *message++;\n  }\n\n#if defined EBCDIC && 'a' != 0x81\n/* If compiling for EBCDIC, but the compiler's string literals are not EBCDIC,\nthen we are in the \"force EBCDIC 1047\" mode. I have chosen to add a few lines\nhere to translate the error strings on the fly, rather than require the string\nliterals above to be written out arduously using the \"STR_XYZ\" macros. */\nfor (PCRE2_SIZE j = 0; j < i; ++j)\n  buffer[j] = PRIV(ascii_to_ebcdic_1047)[buffer[j]];\n#endif\n\nbuffer[i] = 0;     /* Terminate message, even if truncated. */\nreturn rc? rc : (int)i;\n}\n\n/* End of pcre2_error.c */\n"
  },
  {
    "path": "src/pcre2_extuni.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains an internal function that is used to match a Unicode\nextended grapheme sequence. It is used by both pcre2_match() and\npcre2_dfa_match(). However, it is called only when Unicode support is being\ncompiled. Nevertheless, we provide a dummy function when there is no Unicode\nsupport, because some compilers do not like functionless source files. */\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/* Dummy function */\n\n#ifndef SUPPORT_UNICODE\nPCRE2_SPTR\nPRIV(extuni)(uint32_t c, PCRE2_SPTR eptr, PCRE2_SPTR start_subject,\n  PCRE2_SPTR end_subject, BOOL utf, int *xcount)\n{\n(void)c;\n(void)eptr;\n(void)start_subject;\n(void)end_subject;\n(void)utf;\n(void)xcount;\nreturn NULL;\n}\n#else\n\n\n/*************************************************\n*      Match an extended grapheme sequence       *\n*************************************************/\n\n/* NOTE: The logic contained in this function is replicated in three special-\npurpose functions in the pcre2_jit_compile.c module. If the logic below is\nchanged, they must be kept in step so that the interpreter and the JIT have the\nsame behaviour.\n\nArguments:\n  c              the first character\n  eptr           pointer to next character\n  start_subject  pointer to start of subject\n  end_subject    pointer to end of subject\n  utf            TRUE if in UTF mode\n  xcount         pointer to count of additional characters,\n                   or NULL if count not needed\n\nReturns:         pointer after the end of the sequence\n*/\n\nPCRE2_SPTR\nPRIV(extuni)(uint32_t c, PCRE2_SPTR eptr, PCRE2_SPTR start_subject,\n  PCRE2_SPTR end_subject, BOOL utf, int *xcount)\n{\nBOOL was_ep_ZWJ = FALSE;\nint lgb = UCD_GRAPHBREAK(c);\n\nwhile (eptr < end_subject)\n  {\n  int rgb;\n  int len = 1;\n  if (!utf) c = *eptr; else { GETCHARLEN(c, eptr, len); }\n  rgb = UCD_GRAPHBREAK(c);\n  if ((PRIV(ucp_gbtable)[lgb] & (1u << rgb)) == 0) break;\n\n  /* ZWJ followed by Extended Pictographic is allowed only if the ZWJ was\n  preceded by Extended Pictographic. */\n\n  if (lgb == ucp_gbZWJ && rgb == ucp_gbExtended_Pictographic && !was_ep_ZWJ)\n    break;\n\n  /* Not breaking between Regional Indicators is allowed only if there\n  are an even number of preceding RIs. */\n\n  if (lgb == ucp_gbRegional_Indicator && rgb == ucp_gbRegional_Indicator)\n    {\n    int ricount = 0;\n    PCRE2_SPTR bptr = eptr - 1;\n    if (utf) BACKCHAR(bptr);\n\n    /* bptr is pointing to the left-hand character */\n\n    while (bptr > start_subject)\n      {\n      bptr--;\n      if (utf)\n        {\n        BACKCHAR(bptr);\n        GETCHAR(c, bptr);\n        }\n      else\n      c = *bptr;\n      if (UCD_GRAPHBREAK(c) != ucp_gbRegional_Indicator) break;\n      ricount++;\n      }\n    if ((ricount & 1) != 0) break;  /* Grapheme break required */\n    }\n\n  /* Set a flag when ZWJ follows Extended Pictographic (with optional Extend in\n  between; see next statement). */\n\n  was_ep_ZWJ = (lgb == ucp_gbExtended_Pictographic && rgb == ucp_gbZWJ);\n\n  /* If Extend follows Extended_Pictographic, do not update lgb; this allows\n  any number of them before a following ZWJ. */\n\n  if (rgb != ucp_gbExtend || lgb != ucp_gbExtended_Pictographic) lgb = rgb;\n\n  eptr += len;\n  if (xcount != NULL) *xcount += 1;\n  }\n\nreturn eptr;\n}\n\n#endif  /* SUPPORT_UNICODE */\n\n/* End of pcre2_extuni.c */\n"
  },
  {
    "path": "src/pcre2_find_bracket.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains a single function that scans through a compiled pattern\nuntil it finds a capturing bracket with the given number, or, if the number is\nnegative, an instance of OP_REVERSE or OP_VREVERSE for a lookbehind. The\nfunction is called from pcre2_compile.c and also from pcre2_study.c when\nfinding the minimum matching length. */\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/*************************************************\n*    Scan compiled regex for specific bracket    *\n*************************************************/\n\n/*\nArguments:\n  code        points to start of expression\n  utf         TRUE in UTF mode\n  number      the required bracket number or negative to find a lookbehind\n\nReturns:      pointer to the opcode for the bracket, or NULL if not found\n*/\n\nPCRE2_SPTR\nPRIV(find_bracket)(PCRE2_SPTR code, BOOL utf, int number)\n{\nfor (;;)\n  {\n  PCRE2_UCHAR c = *code;\n\n  if (c == OP_END) return NULL;\n\n  /* XCLASS is used for classes that cannot be represented just by a bit map.\n  This includes negated single high-valued characters. ECLASS is used for\n  classes that use set operations internally. CALLOUT_STR is used for\n  callouts with string arguments. In each case the length in the table is\n  zero; the actual length is stored in the compiled code. */\n\n  if (c == OP_XCLASS || c == OP_ECLASS) code += GET(code, 1);\n  else if (c == OP_CALLOUT_STR) code += GET(code, 1 + 2*LINK_SIZE);\n\n  /* Handle lookbehind */\n\n  else if (c == OP_REVERSE || c == OP_VREVERSE)\n    {\n    if (number < 0) return code;\n    code += PRIV(OP_lengths)[c];\n    }\n\n  /* Handle capturing bracket */\n\n  else if (c == OP_CBRA || c == OP_SCBRA ||\n           c == OP_CBRAPOS || c == OP_SCBRAPOS)\n    {\n    int n = (int)GET2(code, 1+LINK_SIZE);\n    if (n == number) return code;\n    code += PRIV(OP_lengths)[c];\n    }\n\n  /* Otherwise, we can get the item's length from the table, except that for\n  repeated character types, we have to test for \\p and \\P, which have an extra\n  two bytes of parameters, and for MARK/PRUNE/SKIP/THEN with an argument, we\n  must add in its length. */\n\n  else\n    {\n    switch(c)\n      {\n      case OP_TYPESTAR:\n      case OP_TYPEMINSTAR:\n      case OP_TYPEPLUS:\n      case OP_TYPEMINPLUS:\n      case OP_TYPEQUERY:\n      case OP_TYPEMINQUERY:\n      case OP_TYPEPOSSTAR:\n      case OP_TYPEPOSPLUS:\n      case OP_TYPEPOSQUERY:\n      if (code[1] == OP_PROP || code[1] == OP_NOTPROP) code += 2;\n      break;\n\n      case OP_TYPEUPTO:\n      case OP_TYPEMINUPTO:\n      case OP_TYPEEXACT:\n      case OP_TYPEPOSUPTO:\n      if (code[1 + IMM2_SIZE] == OP_PROP || code[1 + IMM2_SIZE] == OP_NOTPROP)\n        code += 2;\n      break;\n\n      case OP_MARK:\n      case OP_COMMIT_ARG:\n      case OP_PRUNE_ARG:\n      case OP_SKIP_ARG:\n      case OP_THEN_ARG:\n      code += code[1];\n      break;\n      }\n\n    /* Add in the fixed length from the table */\n\n    code += PRIV(OP_lengths)[c];\n\n  /* In UTF-8 and UTF-16 modes, opcodes that are followed by a character may be\n  followed by a multi-byte character. The length in the table is a minimum, so\n  we have to arrange to skip the extra bytes. */\n\n#ifdef MAYBE_UTF_MULTI\n    if (utf) switch(c)\n      {\n      case OP_CHAR:\n      case OP_CHARI:\n      case OP_NOT:\n      case OP_NOTI:\n      case OP_EXACT:\n      case OP_EXACTI:\n      case OP_NOTEXACT:\n      case OP_NOTEXACTI:\n      case OP_UPTO:\n      case OP_UPTOI:\n      case OP_NOTUPTO:\n      case OP_NOTUPTOI:\n      case OP_MINUPTO:\n      case OP_MINUPTOI:\n      case OP_NOTMINUPTO:\n      case OP_NOTMINUPTOI:\n      case OP_POSUPTO:\n      case OP_POSUPTOI:\n      case OP_NOTPOSUPTO:\n      case OP_NOTPOSUPTOI:\n      case OP_STAR:\n      case OP_STARI:\n      case OP_NOTSTAR:\n      case OP_NOTSTARI:\n      case OP_MINSTAR:\n      case OP_MINSTARI:\n      case OP_NOTMINSTAR:\n      case OP_NOTMINSTARI:\n      case OP_POSSTAR:\n      case OP_POSSTARI:\n      case OP_NOTPOSSTAR:\n      case OP_NOTPOSSTARI:\n      case OP_PLUS:\n      case OP_PLUSI:\n      case OP_NOTPLUS:\n      case OP_NOTPLUSI:\n      case OP_MINPLUS:\n      case OP_MINPLUSI:\n      case OP_NOTMINPLUS:\n      case OP_NOTMINPLUSI:\n      case OP_POSPLUS:\n      case OP_POSPLUSI:\n      case OP_NOTPOSPLUS:\n      case OP_NOTPOSPLUSI:\n      case OP_QUERY:\n      case OP_QUERYI:\n      case OP_NOTQUERY:\n      case OP_NOTQUERYI:\n      case OP_MINQUERY:\n      case OP_MINQUERYI:\n      case OP_NOTMINQUERY:\n      case OP_NOTMINQUERYI:\n      case OP_POSQUERY:\n      case OP_POSQUERYI:\n      case OP_NOTPOSQUERY:\n      case OP_NOTPOSQUERYI:\n      if (HAS_EXTRALEN(code[-1])) code += GET_EXTRALEN(code[-1]);\n      break;\n      }\n#else\n    (void)(utf);  /* Keep compiler happy by referencing function argument */\n#endif  /* MAYBE_UTF_MULTI */\n    }\n  }\n}\n\n/* End of pcre2_find_bracket.c */\n"
  },
  {
    "path": "src/pcre2_fuzzsupport.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2023 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/***************************************************************************\nFuzzer driver for PCRE2. Given an arbitrary string of bytes and a length, it\ntries to compile and match it, deriving options from the string itself. If\nSTANDALONE is defined, a main program that calls the driver with the contents\nof specified files is compiled, and commentary on what is happening is output.\nIf an argument starts with '=' the rest of it it is taken as a literal string\nrather than a file name. This allows easy testing of short strings.\n\nWritten by Philip Hazel, October 2016\nUpdated February 2024 (Addison Crump added 16-bit/32-bit and JIT support)\nFurther updates March/April/May 2024 by PH\n***************************************************************************/\n\n\n#include <errno.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <unistd.h>\n\n/* stack size adjustment */\n#include <sys/time.h>\n#include <sys/resource.h>\n\n#define STACK_SIZE_MB 256\n#define JIT_SIZE_LIMIT (200 * 1024)\n\n#ifndef PCRE2_CODE_UNIT_WIDTH\n#define PCRE2_CODE_UNIT_WIDTH 8\n#endif\n\n#include \"pcre2_internal.h\"\n\n#define MAX_MATCH_SIZE 1000\n\n#define DFA_WORKSPACE_COUNT 100\n\n/* When adding new compile or match options, remember to update the functions\nbelow that output them. */\n\n#define ALLOWED_COMPILE_OPTIONS \\\n  (PCRE2_ANCHORED|PCRE2_ALLOW_EMPTY_CLASS|PCRE2_ALT_BSUX|PCRE2_ALT_CIRCUMFLEX| \\\n   PCRE2_ALT_EXTENDED_CLASS|PCRE2_ALT_VERBNAMES|PCRE2_AUTO_CALLOUT| \\\n   PCRE2_CASELESS|PCRE2_DOLLAR_ENDONLY| \\\n   PCRE2_DOTALL|PCRE2_DUPNAMES|PCRE2_ENDANCHORED|PCRE2_EXTENDED| \\\n   PCRE2_EXTENDED_MORE|PCRE2_FIRSTLINE| \\\n   PCRE2_MATCH_UNSET_BACKREF|PCRE2_MULTILINE|PCRE2_NEVER_BACKSLASH_C| \\\n   PCRE2_NO_AUTO_CAPTURE| \\\n   PCRE2_NO_AUTO_POSSESS|PCRE2_NO_DOTSTAR_ANCHOR|PCRE2_NO_START_OPTIMIZE| \\\n   PCRE2_UCP|PCRE2_UNGREEDY|PCRE2_USE_OFFSET_LIMIT| \\\n   PCRE2_UTF)\n\n#define ALLOWED_MATCH_OPTIONS \\\n  (PCRE2_ANCHORED|PCRE2_ENDANCHORED|PCRE2_NOTBOL|PCRE2_NOTEOL|PCRE2_NOTEMPTY| \\\n   PCRE2_NOTEMPTY_ATSTART|PCRE2_PARTIAL_HARD| \\\n   PCRE2_PARTIAL_SOFT)\n\n#define BASE_MATCH_OPTIONS \\\n  (PCRE2_NO_JIT|PCRE2_DISABLE_RECURSELOOP_CHECK)\n\n\n#if defined(SUPPORT_DIFF_FUZZ) || defined(STANDALONE)\nstatic void print_compile_options(FILE *stream, uint32_t compile_options)\n{\nfprintf(stream, \"Compile options %s%.8x =\",\n  (compile_options == PCRE2_NEVER_BACKSLASH_C)? \"(base) \" : \"\",\n  compile_options);\n\nfprintf(stream, \"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\\n\",\n  ((compile_options & PCRE2_ALT_BSUX) != 0)? \" alt_bsux\" : \"\",\n  ((compile_options & PCRE2_ALT_CIRCUMFLEX) != 0)? \" alt_circumflex\" : \"\",\n  ((compile_options & PCRE2_ALT_EXTENDED_CLASS) != 0)? \"alt_extended_class\" : \"\",\n  ((compile_options & PCRE2_ALT_VERBNAMES) != 0)? \" alt_verbnames\" : \"\",\n  ((compile_options & PCRE2_ALLOW_EMPTY_CLASS) != 0)? \" allow_empty_class\" : \"\",\n  ((compile_options & PCRE2_ANCHORED) != 0)? \" anchored\" : \"\",\n  ((compile_options & PCRE2_AUTO_CALLOUT) != 0)? \" auto_callout\" : \"\",\n  ((compile_options & PCRE2_CASELESS) != 0)? \" caseless\" : \"\",\n  ((compile_options & PCRE2_DOLLAR_ENDONLY) != 0)? \" dollar_endonly\" : \"\",\n  ((compile_options & PCRE2_DOTALL) != 0)? \" dotall\" : \"\",\n  ((compile_options & PCRE2_DUPNAMES) != 0)? \" dupnames\" : \"\",\n  ((compile_options & PCRE2_ENDANCHORED) != 0)? \" endanchored\" : \"\",\n  ((compile_options & PCRE2_EXTENDED) != 0)? \" extended\" : \"\",\n  ((compile_options & PCRE2_EXTENDED_MORE) != 0)? \" extended_more\" : \"\",\n  ((compile_options & PCRE2_FIRSTLINE) != 0)? \" firstline\" : \"\",\n  ((compile_options & PCRE2_MATCH_UNSET_BACKREF) != 0)? \" match_unset_backref\" : \"\",\n  ((compile_options & PCRE2_MULTILINE) != 0)? \" multiline\" : \"\",\n  ((compile_options & PCRE2_NEVER_BACKSLASH_C) != 0)? \" never_backslash_c\" : \"\",\n  ((compile_options & PCRE2_NEVER_UCP) != 0)? \" never_ucp\" : \"\",\n  ((compile_options & PCRE2_NEVER_UTF) != 0)? \" never_utf\" : \"\",\n  ((compile_options & PCRE2_NO_AUTO_CAPTURE) != 0)? \" no_auto_capture\" : \"\",\n  ((compile_options & PCRE2_NO_AUTO_POSSESS) != 0)? \" no_auto_possess\" : \"\",\n  ((compile_options & PCRE2_NO_DOTSTAR_ANCHOR) != 0)? \" no_dotstar_anchor\" : \"\",\n  ((compile_options & PCRE2_NO_UTF_CHECK) != 0)? \" no_utf_check\" : \"\",\n  ((compile_options & PCRE2_NO_START_OPTIMIZE) != 0)? \" no_start_optimize\" : \"\",\n  ((compile_options & PCRE2_UCP) != 0)? \" ucp\" : \"\",\n  ((compile_options & PCRE2_UNGREEDY) != 0)? \" ungreedy\" : \"\",\n  ((compile_options & PCRE2_USE_OFFSET_LIMIT) != 0)? \" use_offset_limit\" : \"\",\n  ((compile_options & PCRE2_UTF) != 0)? \" utf\" : \"\");\n}\n\nstatic void print_match_options(FILE *stream, uint32_t match_options)\n{\nfprintf(stream, \"Match options %s%.8x =\",\n  (match_options == BASE_MATCH_OPTIONS)? \"(base) \" : \"\", match_options);\n\nfprintf(stream, \"%s%s%s%s%s%s%s%s%s%s%s\\n\",\n  ((match_options & PCRE2_ANCHORED) != 0)? \" anchored\" : \"\",\n  ((match_options & PCRE2_DISABLE_RECURSELOOP_CHECK) != 0)? \" disable_recurseloop_check\" : \"\",\n  ((match_options & PCRE2_ENDANCHORED) != 0)? \" endanchored\" : \"\",\n  ((match_options & PCRE2_NO_JIT) != 0)? \" no_jit\" : \"\",\n  ((match_options & PCRE2_NO_UTF_CHECK) != 0)? \" no_utf_check\" : \"\",\n  ((match_options & PCRE2_NOTBOL) != 0)? \" notbol\" : \"\",\n  ((match_options & PCRE2_NOTEMPTY) != 0)? \" notempty\" : \"\",\n  ((match_options & PCRE2_NOTEMPTY_ATSTART) != 0)? \" notempty_atstart\" : \"\",\n  ((match_options & PCRE2_NOTEOL) != 0)? \" noteol\" : \"\",\n  ((match_options & PCRE2_PARTIAL_HARD) != 0)? \" partial_hard\" : \"\",\n  ((match_options & PCRE2_PARTIAL_SOFT) != 0)? \" partial_soft\" : \"\");\n}\n\n\n/* This function can print an error message at all code unit widths. */\n\nstatic void print_error(FILE *f, int errorcode, const char *text, ...)\n{\nPCRE2_UCHAR buffer[256];\nPCRE2_UCHAR *p = buffer;\nva_list ap;\nva_start(ap, text);\nvfprintf(f, text, ap);\nva_end(ap);\npcre2_get_error_message(errorcode, buffer, 256);\nwhile (*p != 0) fprintf(f, \"%c\", *p++);\nprintf(\"\\n\");\n}\n#endif /* defined(SUPPORT_DIFF_FUZZ || defined(STANDALONE) */\n\n\n#ifdef SUPPORT_JIT\n#ifdef SUPPORT_DIFF_FUZZ\nstatic void dump_matches(FILE *stream, int count, pcre2_match_data *match_data)\n{\nint errorcode;\n\nfor (int index = 0; index < count; index++)\n  {\n  PCRE2_UCHAR *bufferptr = NULL;\n  PCRE2_SIZE bufflen = 0;\n\n  errorcode = pcre2_substring_get_bynumber(match_data, index, &bufferptr,\n    &bufflen);\n\n  if (errorcode >= 0)\n    {\n    fprintf(stream, \"Match %d (hex encoded): \", index);\n    for (PCRE2_SIZE i = 0; i < bufflen; i++)\n      {\n      fprintf(stream, \"%02x\", bufferptr[i]);\n      }\n    fprintf(stream, \"\\n\");\n    }\n  else\n    {\n    print_error(stream, errorcode, \"Match %d failed: \", index);\n    }\n  }\n}\n\n/* This function describes the current test case being evaluated, then aborts */\n\nstatic void describe_failure(\n  const char *task,\n  const PCRE2_UCHAR *data,\n  PCRE2_SIZE size,\n  uint32_t compile_options,\n  uint32_t match_options,\n  int errorcode,\n  int errorcode_jit,\n  int matches,\n  int matches_jit,\n  pcre2_match_data *match_data,\n  pcre2_match_data *match_data_jit\n) {\n\nfprintf(stderr, \"Encountered failure while performing %s; context:\\n\", task);\n\nfprintf(stderr, \"Pattern/sample string (hex encoded): \");\nfor (size_t i = 0; i < size; i++)\n  {\n  fprintf(stderr, \"%02x\", data[i]);\n  }\nfprintf(stderr, \"\\n\");\n\nprint_compile_options(stderr, compile_options);\nprint_match_options(stderr, match_options);\n\nif (errorcode < 0)\n  {\n  print_error(stderr, errorcode, \"Non-JIT'd operation emitted an error: \");\n  }\n\nif (matches >= 0)\n  {\n  fprintf(stderr, \"Non-JIT'd operation did not emit an error.\\n\");\n  if (match_data != NULL)\n    {\n    fprintf(stderr, \"%d matches discovered by non-JIT'd regex:\\n\", matches);\n    dump_matches(stderr, matches, match_data);\n    fprintf(stderr, \"\\n\");\n    }\n  }\n\nif (errorcode_jit < 0)\n  {\n  print_error(stderr, errorcode_jit, \"JIT'd operation emitted error %d:\",\n    errorcode_jit);\n  }\n\nif (matches_jit >= 0)\n  {\n  fprintf(stderr, \"JIT'd operation did not emit an error.\\n\");\n  if (match_data_jit != NULL)\n    {\n    fprintf(stderr, \"%d matches discovered by JIT'd regex:\\n\", matches_jit);\n    dump_matches(stderr, matches_jit, match_data_jit);\n    fprintf(stderr, \"\\n\");\n    }\n  }\n\nabort();\n}\n#endif  /* SUPPORT_DIFF_FUZZ */\n#endif  /* SUPPORT_JIT */\n\n/* This is the callout function. Its only purpose is to halt matching if there\nare more than 100 callouts, as one way of stopping too much time being spent on\nfruitless matches. The callout data is a pointer to the counter. */\n\nstatic int callout_function(pcre2_callout_block *cb, void *callout_data)\n{\n(void)cb;  /* Avoid unused parameter warning */\n*((uint32_t *)callout_data) += 1;\nreturn (*((uint32_t *)callout_data) > 100)? PCRE2_ERROR_CALLOUT : 0;\n}\n\n/* Putting in this apparently unnecessary prototype prevents gcc from giving a\n\"no previous prototype\" warning when compiling at high warning level. */\n\nint LLVMFuzzerInitialize(int *, char ***);\n\nint LLVMFuzzerTestOneInput(unsigned char *, size_t);\n\nint LLVMFuzzerInitialize(int *argc, char ***argv)\n{\nint rc;\nstruct rlimit rlim;\ngetrlimit(RLIMIT_STACK, &rlim);\nrlim.rlim_cur = STACK_SIZE_MB * 1024 * 1024;\nif (rlim.rlim_cur > rlim.rlim_max)\n  {\n  fprintf(stderr, \"Hard stack size limit is too small\\n\");\n  _exit(1);\n  }\nrc = setrlimit(RLIMIT_STACK, &rlim);\nif (rc != 0)\n  {\n  fprintf(stderr, \"Failed to expand stack size\\n\");\n  _exit(1);\n  }\n\n(void)argc;  /* Avoid \"unused parameter\" warnings */\n(void)argv;\nreturn 0;\n}\n\n/* Here's the driving function. */\n\nint LLVMFuzzerTestOneInput(unsigned char *data, size_t size)\n{\nPCRE2_UCHAR *wdata;\nPCRE2_UCHAR *newwdata = NULL;\nuint32_t compile_options;\nuint32_t match_options;\nuint64_t random_options;\npcre2_match_data *match_data = NULL;\n#ifdef SUPPORT_JIT\npcre2_match_data *match_data_jit = NULL;\n#endif\npcre2_compile_context *compile_context = NULL;\npcre2_match_context *match_context = NULL;\nsize_t match_size;\nint dfa_workspace[DFA_WORKSPACE_COUNT];\n\nif (size < sizeof(random_options)) return -1;\n\nrandom_options = *(uint64_t *)(data);\ndata += sizeof(random_options);\nwdata = (PCRE2_UCHAR *)data;\nsize -= sizeof(random_options);\nsize /= PCRE2_CODE_UNIT_WIDTH / 8;\n\n/* PCRE2 compiles quantified groups by replicating them. In certain cases of\nvery large quantifiers this can lead to unacceptably long JIT compile times. To\nget around this, we scan the data string for large quantifiers that follow a\nclosing parenthesis, and reduce the value of the quantifier to 10, assuming\nthat this will make minimal difference to the detection of bugs.\n\nDo the same for quantifiers that follow a closing square bracket, because\nclasses that contain a number of non-ascii characters can take a lot of time\nwhen matching.\n\nWe have to make a copy of the input because oss-fuzz complains if we overwrite\nthe original. Start the scan at the second character so there can be a\nlookbehind for a backslash, and end it before the end so that the next\ncharacter can be checked for an opening brace. */\n\nif (size > 3)\n  {\n  newwdata = malloc(size * sizeof(PCRE2_UCHAR));\n  memcpy(newwdata, wdata, size * sizeof(PCRE2_UCHAR));\n  wdata = newwdata;\n\n  for (size_t i = 1; i < size - 2; i++)\n    {\n    size_t j;\n\n    if ((wdata[i] != ')' && wdata[i] != ']') || wdata[i-1] == '\\\\' ||\n         wdata[i+1] != '{')\n      continue;\n    i++;  /* Points to '{' */\n\n    /* Loop for two values in a quantifier. Offset i points to brace or comma\n    at the start of the loop. */\n\n    for (int ii = 0; ii < 2; ii++)\n      {\n      int q = 0;\n\n      if (i >= size - 1) goto END_QSCAN;  /* Can happen for , */\n\n      /* Ignore leading spaces. */\n\n      while (wdata[i+1] == ' ' || wdata[i+1] == '\\t')\n        {\n        i++;\n        if (i >= size - 1) goto END_QSCAN;\n        }\n\n      /* Ignore non-significant leading zeros. */\n\n      while (wdata[i+1] == '0' && i+2 < size && wdata[i+2] >= '0' &&\n             wdata[i+2] <= '9')\n        {\n        i++;\n        if (i >= size - 1) goto END_QSCAN;\n        }\n\n      /* Scan for a number ending in brace, or comma in the first iteration,\n      optionally preceded by space. */\n\n      for (j = i + 1; j < size && j < i + 7; j++)\n        {\n        if (wdata[j] == ' ' || wdata[j] == '\\t')\n          {\n          j++;\n          while (j < size && (wdata[j] == ' ' || wdata[j] == '\\t')) j++;\n          if (j >= size) goto OUTERLOOP;\n          if (wdata[j] != '}' && wdata[j] != ',') goto OUTERLOOP;\n          }\n        if (wdata[j] == '}' || (ii == 0 && wdata[j] == ',')) break;\n\n        if (wdata[j] < '0' || wdata[j] > '9')\n          {\n          j--;               /* Ensure this character is checked next. The */\n          goto OUTERLOOP;    /* string might be (e.g.) \"){9){234}\" */\n          }\n        q = q * 10 + (wdata[j] - '0');\n        }\n\n      if (j >= size) goto END_QSCAN;  /* End of data */\n\n      /* Hit ',' or '}' or read 6 digits. Six digits is a number > 65536 which\n      is the maximum quantifier. Leave such numbers alone. */\n\n      if (j >= i + 7 || q > 65535) goto OUTERLOOP;\n\n      /* Limit the quantifier size to 10 */\n\n      if (q > 10)\n        {\n#ifdef STANDALONE\n        printf(\"Reduced quantifier value %d to 10.\\n\", q);\n#endif\n        for (size_t k = i + 1; k < j; k++) wdata[k] = '0';\n        wdata[j - 2] = '1';\n        }\n\n      /* Advance to end of number and break if reached closing brace (continue\n      after comma, which is only valid in the first time round this loop). */\n\n      i = j;\n      if (wdata[i] == '}') break;\n      }\n\n    /* Continue along the data string */\n\n    OUTERLOOP:\n    i = j;\n    continue;\n    }\n  }\nEND_QSCAN:\n\n/* Limiting the length of the subject for matching stops fruitless searches\nin large trees taking too much time. */\n\nmatch_size = (size > MAX_MATCH_SIZE)? MAX_MATCH_SIZE : size;\n\n/* Create a compile context, and set a limit on the size of the compiled\npattern. This stops the fuzzer using vast amounts of memory. */\n\ncompile_context = pcre2_compile_context_create(NULL);\nif (compile_context == NULL)\n  {\n#ifdef STANDALONE\n  fprintf(stderr, \"** Failed to create compile context block\\n\");\n#endif\n  abort();\n  }\npcre2_set_max_pattern_compiled_length(compile_context, 10*1024*1024);\n\n/* Ensure that all undefined option bits are zero (waste of time trying them)\nand also that PCRE2_NO_UTF_CHECK is unset, as there is no guarantee that the\ninput is valid UTF. Also unset PCRE2_NEVER_UTF and PCRE2_NEVER_UCP as there is\nno reason to disallow UTF and UCP. Force PCRE2_NEVER_BACKSLASH_C to be set\nbecause \\C in random patterns is highly likely to cause a crash. */\n\ncompile_options = ((random_options >> 32) & ALLOWED_COMPILE_OPTIONS) |\n  PCRE2_NEVER_BACKSLASH_C;\nmatch_options = (((uint32_t)random_options) & ALLOWED_MATCH_OPTIONS) |\n  BASE_MATCH_OPTIONS;\n\n/* Discard partial matching if PCRE2_ENDANCHORED is set, because they are not\nallowed together and just give an immediate error return. */\n\nif (((compile_options|match_options) & PCRE2_ENDANCHORED) != 0)\n  match_options &= ~(PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT);\n\n/* Do the compile with and without the options, and after a successful compile,\nlikewise do the match with and without the options. */\n\nfor (int i = 0; i < 2; i++)\n  {\n  uint32_t callout_count;\n  int errorcode;\n#ifdef SUPPORT_JIT\n  int errorcode_jit;\n#ifdef SUPPORT_DIFF_FUZZ\n  int matches = 0;\n  int matches_jit = 0;\n#endif\n#endif\n  PCRE2_SIZE erroroffset;\n  pcre2_code *code;\n\n#ifdef STANDALONE\n  printf(\"\\n\");\n  print_compile_options(stdout, compile_options);\n#endif\n\n  code = pcre2_compile((PCRE2_SPTR)wdata, (PCRE2_SIZE)size, compile_options,\n    &errorcode, &erroroffset, compile_context);\n\n  /* Compilation succeeded */\n\n  if (code != NULL)\n    {\n    int j;\n    uint32_t save_match_options = match_options;\n\n    /* Call JIT compile only if the compiled pattern is not too big. */\n\n#ifdef SUPPORT_JIT\n    int jit_ret = -1;\n    if (((struct pcre2_real_code *)code)->blocksize <= JIT_SIZE_LIMIT)\n      {\n#ifdef STANDALONE\n      printf(\"Compile succeeded; calling JIT compile\\n\");\n#endif\n      jit_ret = pcre2_jit_compile(code, PCRE2_JIT_COMPLETE);\n#ifdef STANDALONE\n      if (jit_ret < 0) printf(\"JIT compile error %d\\n\", jit_ret);\n#endif\n      }\n    else\n      {\n#ifdef STANDALONE\n      printf(\"Not calling JIT: compiled pattern is too long \"\n        \"(%ld bytes; limit=%d)\\n\",\n        ((struct pcre2_real_code *)code)->blocksize, JIT_SIZE_LIMIT);\n#endif\n      }\n#endif  /* SUPPORT_JIT */\n\n    /* Create match data and context blocks only when we first need them. Set\n    low match and depth limits to avoid wasting too much searching large\n    pattern trees. Almost all matches are going to fail. */\n\n    if (match_data == NULL)\n      {\n      match_data = pcre2_match_data_create(32, NULL);\n#ifdef SUPPORT_JIT\n      match_data_jit = pcre2_match_data_create(32, NULL);\n      if (match_data == NULL || match_data_jit == NULL)\n#else\n      if (match_data == NULL)\n#endif\n        {\n#ifdef STANDALONE\n        fprintf(stderr, \"** Failed to create match data block\\n\");\n#endif\n        abort();\n        }\n      }\n\n    if (match_context == NULL)\n      {\n      match_context = pcre2_match_context_create(NULL);\n      if (match_context == NULL)\n        {\n#ifdef STANDALONE\n        fprintf(stderr, \"** Failed to create match context block\\n\");\n#endif\n        abort();\n        }\n      (void)pcre2_set_match_limit(match_context, 100);\n      (void)pcre2_set_depth_limit(match_context, 100);\n      (void)pcre2_set_callout(match_context, callout_function, &callout_count);\n      }\n\n    /* Match twice, with and without options. */\n\n#ifdef STANDALONE\n    printf(\"\\n\");\n#endif\n    for (j = 0; j < 2; j++)\n      {\n#ifdef STANDALONE\n      print_match_options(stdout, match_options);\n#endif\n\n      callout_count = 0;\n      errorcode = pcre2_match(code, (PCRE2_SPTR)wdata, (PCRE2_SIZE)match_size, 0,\n        match_options, match_data, match_context);\n\n#ifdef STANDALONE\n      if (errorcode >= 0) printf(\"Match returned %d\\n\", errorcode); else\n        print_error(stdout, errorcode, \"Match failed: error %d: \", errorcode);\n#endif\n\n/* If JIT is enabled, do a JIT match and, if appropriately compiled, compare\nwith the interpreter. */\n\n#ifdef SUPPORT_JIT\n      if (jit_ret >= 0)\n        {\n#ifdef STANDALONE\n        printf(\"Matching with JIT\\n\");\n#endif\n        callout_count = 0;\n        errorcode_jit = pcre2_match(code, (PCRE2_SPTR)wdata, (PCRE2_SIZE)match_size, 0,\n          match_options & ~PCRE2_NO_JIT, match_data_jit, match_context);\n\n#ifdef STANDALONE\n        if (errorcode_jit >= 0)\n          printf(\"Match returned %d\\n\", errorcode_jit);\n        else\n          print_error(stdout, errorcode_jit, \"JIT match failed: error %d: \",\n            errorcode_jit);\n#else\n        (void)errorcode_jit;   /* Avoid compiler warning */\n#endif  /* STANDALONE */\n\n/* With differential matching enabled, compare with interpreter. */\n\n#ifdef SUPPORT_DIFF_FUZZ\n        matches = errorcode;\n        matches_jit = errorcode_jit;\n\n        if (errorcode_jit != errorcode)\n          {\n          if (!(errorcode < 0 && errorcode_jit < 0) &&\n                errorcode != PCRE2_ERROR_MATCHLIMIT && errorcode != PCRE2_ERROR_CALLOUT &&\n                errorcode_jit != PCRE2_ERROR_MATCHLIMIT && errorcode_jit != PCRE2_ERROR_JIT_STACKLIMIT && errorcode_jit != PCRE2_ERROR_CALLOUT)\n            {\n            describe_failure(\"match errorcode comparison\", wdata, size, compile_options, match_options, errorcode, errorcode_jit, matches, matches_jit, match_data, match_data_jit);\n            }\n          }\n        else\n          {\n          for (int index = 0; index < errorcode; index++)\n            {\n            PCRE2_UCHAR *bufferptr, *bufferptr_jit;\n            PCRE2_SIZE bufflen, bufflen_jit;\n\n            bufferptr = bufferptr_jit = NULL;\n            bufflen = bufflen_jit = 0;\n\n            errorcode = pcre2_substring_get_bynumber(match_data, (uint32_t) index, &bufferptr, &bufflen);\n            errorcode_jit = pcre2_substring_get_bynumber(match_data_jit, (uint32_t) index, &bufferptr_jit, &bufflen_jit);\n\n            if (errorcode != errorcode_jit)\n              {\n              describe_failure(\"match entry errorcode comparison\", wdata, size,\n                compile_options, match_options, errorcode, errorcode_jit,\n                matches, matches_jit, match_data, match_data_jit);\n              }\n\n            if (errorcode >= 0)\n              {\n              if (bufflen != bufflen_jit)\n                {\n                describe_failure(\"match entry length comparison\", wdata, size,\n                  compile_options, match_options, errorcode, errorcode_jit,\n                  matches, matches_jit, match_data, match_data_jit);\n                }\n\n              if (memcmp(bufferptr, bufferptr_jit, bufflen) != 0)\n                {\n                describe_failure(\"match entry content comparison\", wdata, size,\n                  compile_options, match_options, errorcode, errorcode_jit,\n                  matches, matches_jit, match_data, match_data_jit);\n                }\n              }\n\n              pcre2_substring_free(bufferptr);\n              pcre2_substring_free(bufferptr_jit);\n            }\n          }\n#endif  /* SUPPORT_DIFF_FUZZ */\n        }\n#endif  /* SUPPORT_JIT */\n\n      if (match_options == BASE_MATCH_OPTIONS) break;  /* Don't do same twice */\n      match_options = BASE_MATCH_OPTIONS;              /* For second time */\n      }\n\n    /* Match with DFA twice, with and without options, but remove options that\n    are not allowed with DFA. */\n\n    match_options = save_match_options & ~BASE_MATCH_OPTIONS;\n\n#ifdef STANDALONE\n    printf(\"\\n\");\n#endif\n\n    for (j = 0; j < 2; j++)\n      {\n#ifdef STANDALONE\n      printf(\"DFA match options %.8x =\", match_options);\n      printf(\"%s%s%s%s%s%s%s%s%s\\n\",\n        ((match_options & PCRE2_ANCHORED) != 0)? \" anchored\" : \"\",\n        ((match_options & PCRE2_ENDANCHORED) != 0)? \" endanchored\" : \"\",\n        ((match_options & PCRE2_NO_UTF_CHECK) != 0)? \" no_utf_check\" : \"\",\n        ((match_options & PCRE2_NOTBOL) != 0)? \" notbol\" : \"\",\n        ((match_options & PCRE2_NOTEMPTY) != 0)? \" notempty\" : \"\",\n        ((match_options & PCRE2_NOTEMPTY_ATSTART) != 0)? \" notempty_atstart\" : \"\",\n        ((match_options & PCRE2_NOTEOL) != 0)? \" noteol\" : \"\",\n        ((match_options & PCRE2_PARTIAL_HARD) != 0)? \" partial_hard\" : \"\",\n        ((match_options & PCRE2_PARTIAL_SOFT) != 0)? \" partial_soft\" : \"\");\n#endif\n\n      callout_count = 0;\n      errorcode = pcre2_dfa_match(code, (PCRE2_SPTR)wdata,\n        (PCRE2_SIZE)match_size, 0, match_options, match_data,\n        match_context, dfa_workspace, DFA_WORKSPACE_COUNT);\n\n#ifdef STANDALONE\n      if (errorcode >= 0)\n        printf(\"Match returned %d\\n\", errorcode);\n      else\n        print_error(stdout, errorcode, \"DFA match failed: error %d: \", errorcode);\n#endif\n\n      if (match_options == 0) break;  /* No point doing same twice */\n      match_options = 0;              /* For second time */\n      }\n\n    match_options = save_match_options;  /* Reset for the second compile */\n    pcre2_code_free(code);\n    }\n\n  /* Compilation failed */\n\n  else\n    {\n#ifdef STANDALONE\n    print_error(stdout, errorcode, \"Error %d at offset %lu: \", errorcode,\n      erroroffset);\n#else\n    if (errorcode == PCRE2_ERROR_INTERNAL) abort();\n#endif\n    }\n\n  if (compile_options == PCRE2_NEVER_BACKSLASH_C) break;  /* Avoid same twice */\n  compile_options = PCRE2_NEVER_BACKSLASH_C;              /* For second time */\n  }\n\n/* Tidy up before exiting */\n\nif (match_data != NULL) pcre2_match_data_free(match_data);\n#ifdef SUPPORT_JIT\nif (match_data_jit != NULL) pcre2_match_data_free(match_data_jit);\n#endif\nfree(newwdata);\nif (match_context != NULL) pcre2_match_context_free(match_context);\nif (compile_context != NULL) pcre2_compile_context_free(compile_context);\nreturn 0;\n}\n\n\n/* Optional main program.  */\n\n#ifdef STANDALONE\nint main(int argc, char **argv)\n{\nLLVMFuzzerInitialize(&argc, &argv);\n\nif (argc < 2)\n  {\n  printf(\"** No arguments given\\n\");\n  return 0;\n  }\n\nfor (int i = 1; i < argc; i++)\n  {\n  size_t filelen;\n  size_t readsize;\n  unsigned char *buffer;\n  FILE *f;\n\n  /* Handle a literal string. Copy to an exact size buffer so that checks for\n  overrunning work. */\n\n  if (argv[i][0] == '=')\n    {\n    readsize = strlen(argv[i]) - 1;\n    printf(\"------ <Literal> ------\\n\");\n    printf(\"Length = %lu\\n\", readsize);\n    printf(\"%.*s\\n\", (int)readsize, argv[i]+1);\n    buffer = (unsigned char *)malloc(readsize);\n    if (buffer == NULL)\n      printf(\"** Failed to allocate %lu bytes of memory\\n\", readsize);\n    else\n      {\n      memcpy(buffer, argv[i]+1, readsize);\n      LLVMFuzzerTestOneInput(buffer, readsize);\n      free(buffer);\n      }\n    continue;\n    }\n\n  /* Handle a string given in a file */\n\n  f = fopen(argv[i], \"rb\");\n  if (f == NULL)\n    {\n    printf(\"** Failed to open %s: %s\\n\", argv[i], strerror(errno));\n    continue;\n    }\n\n  printf(\"------ %s ------\\n\", argv[i]);\n\n  fseek(f, 0, SEEK_END);\n  filelen = ftell(f);\n  fseek(f, 0, SEEK_SET);\n\n  buffer = (unsigned char *)malloc(filelen);\n  if (buffer == NULL)\n    {\n    printf(\"** Failed to allocate %lu bytes of memory\\n\", filelen);\n    fclose(f);\n    continue;\n    }\n\n  readsize = fread(buffer, 1, filelen, f);\n  fclose(f);\n\n  if (readsize != filelen)\n    printf(\"** File size is %lu but fread() returned %lu\\n\", filelen, readsize);\n  else\n    {\n    printf(\"Length = %lu\\n\", filelen);\n    LLVMFuzzerTestOneInput(buffer, filelen);\n    }\n  free(buffer);\n  }\n\nreturn 0;\n}\n#endif  /* STANDALONE */\n\n/* End */\n"
  },
  {
    "path": "src/pcre2_internal.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE2 is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n#ifndef PCRE2_INTERNAL_H_IDEMPOTENT_GUARD\n#define PCRE2_INTERNAL_H_IDEMPOTENT_GUARD\n\n/* We do not assume that the config.h file has an idempotent include guard,\nsince it may well be written by clients. The standard Autoheader config.h does\nnot have an include guard (although we could customise that). */\n\n#if defined HAVE_CONFIG_H && !defined PCRE2_CONFIG_H_IDEMPOTENT_GUARD\n#define PCRE2_CONFIG_H_IDEMPOTENT_GUARD\n#include \"config.h\"\n#endif\n\n/* We do not support both EBCDIC and Unicode at the same time. The \"configure\"\nscript prevents both being selected, but not everybody uses \"configure\". EBCDIC\nis only supported for the 8-bit library, but the check for this has to be later\nin this file, because the first part is not width-dependent, and is included by\npcre2test.c with CODE_UNIT_WIDTH == 0. */\n\n#if defined EBCDIC && defined SUPPORT_UNICODE\n#error The use of both EBCDIC and SUPPORT_UNICODE is not supported.\n#endif\n\n/* When compiling one of the libraries, the value of PCRE2_CODE_UNIT_WIDTH must\nbe 8, 16, or 32. AutoTools and CMake ensure that this is always the case, but\nother other building methods may not, so here is a check. It is cut out when\nbuilding pcre2test, bcause that sets the value to zero. No other source should\nbe including this file. There is no explicit way of forcing a compile to be\nabandoned, but trying to include a non-existent file seems cleanest. Otherwise\nthere will be many irrelevant consequential errors. */\n\n#if (!defined PCRE2_PCRE2TEST && !defined PCRE2_DFTABLES) && \\\n  (!defined PCRE2_CODE_UNIT_WIDTH ||     \\\n    (PCRE2_CODE_UNIT_WIDTH != 8 &&       \\\n     PCRE2_CODE_UNIT_WIDTH != 16 &&      \\\n     PCRE2_CODE_UNIT_WIDTH != 32))\n#error PCRE2_CODE_UNIT_WIDTH must be defined as 8, 16, or 32.\n#endif\n\n\n/* Standard C headers */\n\n#include <ctype.h>\n#include <limits.h>\n#include <stddef.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n/* Macros to make boolean values more obvious. The #ifndef is to pacify\ncompiler warnings in environments where these macros are defined elsewhere.\nUnfortunately, there is no way to do the same for the typedef. */\n\ntypedef int BOOL;\n#ifndef FALSE\n#define FALSE   0\n#define TRUE    1\n#endif\n\n/* Helper macro for static (compile-time) assertions. Can be used inside\nfunctions, or at the top-level of a file. */\n#define STATIC_ASSERT_JOIN(a,b) a ## b\n#define STATIC_ASSERT(cond, msg) \\\n  typedef int STATIC_ASSERT_JOIN(static_assertion_,msg)[(cond)?1:-1]\n\n/* Valgrind (memcheck) support */\n\n#ifdef SUPPORT_VALGRIND\n#include <valgrind/memcheck.h>\n#endif\n\n/* -ftrivial-auto-var-init support supports initializing all local variables\nto avoid some classes of bug, but this can cause an unacceptable slowdown\nfor large on-stack arrays in hot functions. This macro lets us annotate\nsuch arrays. */\n\n#ifdef HAVE_ATTRIBUTE_UNINITIALIZED\n#define PCRE2_KEEP_UNINITIALIZED __attribute__((uninitialized))\n#else\n#define PCRE2_KEEP_UNINITIALIZED\n#endif\n\n/* Older versions of MSVC lack snprintf(). This define allows for\nwarning/error-free compilation and testing with MSVC compilers back to at least\nMSVC 10/2010. Except for VC6 (which is missing some fundamentals and fails). */\n\n#if defined(_MSC_VER) && (_MSC_VER < 1900)\n#define snprintf _snprintf\n#endif\n\n/* When compiling a DLL for Windows, the exported symbols have to be declared\nusing some MS magic, as documented here:\nhttps://learn.microsoft.com/en-us/cpp/build/exporting-from-a-dll-using-declspec-dllexport\n\nIn pcre2.h (which is included below), we define only PCRE2_EXP_DECL,\nwhich is all that is needed for applications (they just import the symbols). To\ncompile the library, we use:\n\n  PCRE2_EXP_DECL    for declarations\n  PCRE2_EXP_DEFN    for definitions\n\nThe reason for wrapping this in #ifndef PCRE2_EXP_DECL is so that pcre2test,\nwhich is an application, but needs to import this file in order to \"peek\" at\ninternals, can #include pcre2.h first to get an application's-eye view.\n\nIn principle, people compiling for non-Windows, non-Unix-like (i.e. uncommon,\nspecial-purpose environments) might want to stick other stuff in front of\nexported symbols. That's why, in the non-Windows case, we set PCRE2_EXP_DEFN\nonly if it is not already set. */\n\n#if defined __cplusplus\n#error This project uses C99. C++ is not supported.\n#endif\n\n#ifndef PCRE2_EXP_DECL\n#  if defined(_WIN32) && !defined(PCRE2_STATIC)\n#    define PCRE2_EXP_DECL  extern __declspec(dllexport)\n#  else\n#    define PCRE2_EXP_DECL  extern PCRE2_EXPORT\n#  endif\n#endif\n\n#ifndef PCRE2_EXP_DEFN\n#  if defined(_WIN32) && !defined(PCRE2_STATIC)\n#    define PCRE2_EXP_DEFN  extern __declspec(dllexport)\n#  else\n#    define PCRE2_EXP_DEFN  extern PCRE2_EXPORT\n#  endif\n#endif\n\n/* Include the public PCRE2 header and the definitions of UCP character\nproperty values. This must follow the setting of PCRE2_EXP_DECL above. */\n\n#include \"pcre2.h\"\n#include \"pcre2_ucp.h\"\n\n/* When checking for integer overflow, we need to handle large integers.\nIf a 64-bit integer type is available, we can use that.\nOtherwise we have to cast to double, which of course requires floating point\narithmetic. Handle this by defining a macro for the appropriate type. */\n\n#if defined INT64_MAX || defined int64_t\n#define INT64_OR_DOUBLE int64_t\n#else\n#define INT64_OR_DOUBLE double\n#endif\n\n/* External (in the C sense) functions and tables that are private to the\nlibraries are always referenced using the PRIV macro. This makes it possible\nfor pcre2test.c to include some of the source files from the libraries using a\ndifferent PRIV definition to avoid name clashes. It also makes it clear in the\ncode that a non-static object is being referenced. */\n\n#ifndef PRIV\n#define PRIV(name) _pcre2_##name\n#endif\n\n/* This is an unsigned int value that no UTF character can ever have, as\nUnicode doesn't go beyond 0x0010ffff. */\n\n#define NOTACHAR 0xffffffff\n\n/* This is the largest valid UTF/Unicode code point. */\n\n#define MAX_UTF_CODE_POINT 0x10ffff\n\n/* Compile-time positive error numbers (all except UTF errors, which are\nnegative) start at this value. It should probably never be changed, in case\nsome application is checking for specific numbers. There is a copy of this\n#define in pcre2posix.c (which now no longer includes this file). Ideally, a\nway of having a single definition should be found, but as the number is\nunlikely to change, this is not a pressing issue. The original reason for\nhaving a base other than 0 was to keep the absolute values of compile-time and\nrun-time error numbers numerically different, but in the event the code does\nnot rely on this. */\n\n#define COMPILE_ERROR_BASE 100\n\n/* The initial frames vector for remembering pcre2_match() backtracking points\nis allocated on the heap, of this size (bytes) or ten times the frame size if\nlarger, unless the heap limit is smaller. Typical frame sizes are a few hundred\nbytes (it depends on the number of capturing parentheses) so 20KiB handles\nquite a few frames. A larger vector on the heap is obtained for matches that\nneed more frames, subject to the heap limit. */\n\n#define START_FRAMES_SIZE 20480\n\n/* For DFA matching, an initial internal workspace vector is allocated on the\nstack. The heap is used only if this turns out to be too small. */\n\n#define DFA_START_RWS_SIZE 30720\n\n/* Define the default BSR convention. */\n\n#ifdef BSR_ANYCRLF\n#define BSR_DEFAULT PCRE2_BSR_ANYCRLF\n#else\n#define BSR_DEFAULT PCRE2_BSR_UNICODE\n#endif\n\n\n/* ---------------- Basic UTF-8 macros ---------------- */\n\n/* These UTF-8 macros are always defined because they are used in pcre2test for\nhandling wide characters in 16-bit and 32-bit modes, even if an 8-bit library\nis not supported. */\n\n/* Tests whether a UTF-8 code point needs extra bytes to decode. */\n\n#define HASUTF8EXTRALEN(c) ((c) >= 0xc0)\n\n/* The following macros were originally written in the form of loops that used\ndata from the tables whose names start with PRIV(utf8_table). They were\nrewritten by a user so as not to use loops, because in some environments this\ngives a significant performance advantage, and it seems never to do any harm.\n*/\n\n/* Base macro to pick up the remaining bytes of a UTF-8 character, not\nadvancing the pointer. */\n\n#define GETUTF8(c, eptr) \\\n    { \\\n    if ((c & 0x20u) == 0) \\\n      c = ((c & 0x1fu) << 6) | (eptr[1] & 0x3fu); \\\n    else if ((c & 0x10u) == 0) \\\n      c = ((c & 0x0fu) << 12) | ((eptr[1] & 0x3fu) << 6) | (eptr[2] & 0x3fu); \\\n    else if ((c & 0x08u) == 0) \\\n      c = ((c & 0x07u) << 18) | ((eptr[1] & 0x3fu) << 12) | \\\n      ((eptr[2] & 0x3fu) << 6) | (eptr[3] & 0x3fu); \\\n    else if ((c & 0x04u) == 0) \\\n      c = ((c & 0x03u) << 24) | ((eptr[1] & 0x3fu) << 18) | \\\n          ((eptr[2] & 0x3fu) << 12) | ((eptr[3] & 0x3fu) << 6) | \\\n          (eptr[4] & 0x3fu); \\\n    else \\\n      c = ((c & 0x01u) << 30) | ((eptr[1] & 0x3fu) << 24) | \\\n          ((eptr[2] & 0x3fu) << 18) | ((eptr[3] & 0x3fu) << 12) | \\\n          ((eptr[4] & 0x3fu) << 6) | (eptr[5] & 0x3fu); \\\n    }\n\n/* Base macro to pick up the remaining bytes of a UTF-8 character, advancing\nthe pointer. */\n\n#define GETUTF8INC(c, eptr) \\\n    { \\\n    if ((c & 0x20u) == 0) \\\n      c = ((c & 0x1fu) << 6) | (*eptr++ & 0x3fu); \\\n    else if ((c & 0x10u) == 0) \\\n      { \\\n      c = ((c & 0x0fu) << 12) | ((*eptr & 0x3fu) << 6) | (eptr[1] & 0x3fu); \\\n      eptr += 2; \\\n      } \\\n    else if ((c & 0x08u) == 0) \\\n      { \\\n      c = ((c & 0x07u) << 18) | ((*eptr & 0x3fu) << 12) | \\\n          ((eptr[1] & 0x3fu) << 6) | (eptr[2] & 0x3fu); \\\n      eptr += 3; \\\n      } \\\n    else if ((c & 0x04u) == 0) \\\n      { \\\n      c = ((c & 0x03u) << 24) | ((*eptr & 0x3fu) << 18) | \\\n          ((eptr[1] & 0x3fu) << 12) | ((eptr[2] & 0x3fu) << 6) | \\\n          (eptr[3] & 0x3fu); \\\n      eptr += 4; \\\n      } \\\n    else \\\n      { \\\n      c = ((c & 0x01u) << 30) | ((*eptr & 0x3fu) << 24) | \\\n          ((eptr[1] & 0x3fu) << 18) | ((eptr[2] & 0x3fu) << 12) | \\\n          ((eptr[3] & 0x3fu) << 6) | (eptr[4] & 0x3fu); \\\n      eptr += 5; \\\n      } \\\n    }\n\n/* Base macro to pick up the remaining bytes of a UTF-8 character, not\nadvancing the pointer, incrementing the length. */\n\n#define GETUTF8LEN(c, eptr, len) \\\n    { \\\n    if ((c & 0x20u) == 0) \\\n      { \\\n      c = ((c & 0x1fu) << 6) | (eptr[1] & 0x3fu); \\\n      len++; \\\n      } \\\n    else if ((c & 0x10u)  == 0) \\\n      { \\\n      c = ((c & 0x0fu) << 12) | ((eptr[1] & 0x3fu) << 6) | (eptr[2] & 0x3fu); \\\n      len += 2; \\\n      } \\\n    else if ((c & 0x08u)  == 0) \\\n      {\\\n      c = ((c & 0x07u) << 18) | ((eptr[1] & 0x3fu) << 12) | \\\n          ((eptr[2] & 0x3fu) << 6) | (eptr[3] & 0x3fu); \\\n      len += 3; \\\n      } \\\n    else if ((c & 0x04u)  == 0) \\\n      { \\\n      c = ((c & 0x03u) << 24) | ((eptr[1] & 0x3fu) << 18) | \\\n          ((eptr[2] & 0x3fu) << 12) | ((eptr[3] & 0x3fu) << 6) | \\\n          (eptr[4] & 0x3fu); \\\n      len += 4; \\\n      } \\\n    else \\\n      {\\\n      c = ((c & 0x01u) << 30) | ((eptr[1] & 0x3fu) << 24) | \\\n          ((eptr[2] & 0x3fu) << 18) | ((eptr[3] & 0x3fu) << 12) | \\\n          ((eptr[4] & 0x3fu) << 6) | (eptr[5] & 0x3fu); \\\n      len += 5; \\\n      } \\\n    }\n\n/* --------------- Whitespace macros ---------------- */\n\n/* Tests for Unicode horizontal and vertical whitespace characters must check a\nnumber of different values. Using a switch statement for this generates the\nfastest code (no loop, no memory access), and there are several places in the\ninterpreter code where this happens. In order to ensure that all the case lists\nremain in step, we use macros so that there is only one place where the lists\nare defined.\n\nThese values are also required as lists in pcre2_compile.c when processing \\h,\n\\H, \\v and \\V in a character class. The lists are defined in pcre2_tables.c,\nbut macros that define the values are here so that all the definitions are\ntogether. The lists must be in ascending character order, terminated by\nNOTACHAR (which is 0xffffffff).\n\nAny changes should ensure that the various macros are kept in step with each\nother. NOTE: The values also appear in pcre2_jit_compile.c. */\n\n/* -------------- ASCII/Unicode environments -------------- */\n\n#ifndef EBCDIC\n\n/* Character U+180E (Mongolian Vowel Separator) is not included in the list of\nspaces in the Unicode file PropList.txt, and Perl does not recognize it as a\nspace. However, in many other sources it is listed as a space and has been in\nPCRE (both APIs) for a long time. */\n\n#define HSPACE_LIST \\\n  CHAR_HT, CHAR_SPACE, CHAR_NBSP, \\\n  0x1680, 0x180e, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, \\\n  0x2006, 0x2007, 0x2008, 0x2009, 0x200a, 0x202f, 0x205f, 0x3000, \\\n  NOTACHAR\n\n#define HSPACE_MULTIBYTE_CASES \\\n  case 0x1680:  /* OGHAM SPACE MARK */ \\\n  case 0x180e:  /* MONGOLIAN VOWEL SEPARATOR */ \\\n  case 0x2000:  /* EN QUAD */ \\\n  case 0x2001:  /* EM QUAD */ \\\n  case 0x2002:  /* EN SPACE */ \\\n  case 0x2003:  /* EM SPACE */ \\\n  case 0x2004:  /* THREE-PER-EM SPACE */ \\\n  case 0x2005:  /* FOUR-PER-EM SPACE */ \\\n  case 0x2006:  /* SIX-PER-EM SPACE */ \\\n  case 0x2007:  /* FIGURE SPACE */ \\\n  case 0x2008:  /* PUNCTUATION SPACE */ \\\n  case 0x2009:  /* THIN SPACE */ \\\n  case 0x200a:  /* HAIR SPACE */ \\\n  case 0x202f:  /* NARROW NO-BREAK SPACE */ \\\n  case 0x205f:  /* MEDIUM MATHEMATICAL SPACE */ \\\n  case 0x3000   /* IDEOGRAPHIC SPACE */\n\n#define HSPACE_BYTE_CASES \\\n  case CHAR_HT: \\\n  case CHAR_SPACE: \\\n  case CHAR_NBSP\n\n#define HSPACE_CASES \\\n  HSPACE_BYTE_CASES: \\\n  HSPACE_MULTIBYTE_CASES\n\n#define VSPACE_LIST \\\n  CHAR_LF, CHAR_VT, CHAR_FF, CHAR_CR, CHAR_NEL, 0x2028, 0x2029, NOTACHAR\n\n#define VSPACE_MULTIBYTE_CASES \\\n  case 0x2028:    /* LINE SEPARATOR */ \\\n  case 0x2029     /* PARAGRAPH SEPARATOR */\n\n#define VSPACE_BYTE_CASES \\\n  case CHAR_LF: \\\n  case CHAR_VT: \\\n  case CHAR_FF: \\\n  case CHAR_CR: \\\n  case CHAR_NEL\n\n#define VSPACE_CASES \\\n  VSPACE_BYTE_CASES: \\\n  VSPACE_MULTIBYTE_CASES\n\n/* -------------- EBCDIC environments -------------- */\n\n#else\n#define HSPACE_LIST CHAR_HT, CHAR_SPACE, CHAR_NBSP, NOTACHAR\n\n#define HSPACE_BYTE_CASES \\\n  case CHAR_HT: \\\n  case CHAR_SPACE: \\\n  case CHAR_NBSP\n\n#define HSPACE_CASES HSPACE_BYTE_CASES\n\n#ifdef EBCDIC_NL25\n#define VSPACE_LIST \\\n  CHAR_VT, CHAR_FF, CHAR_CR, CHAR_NEL, CHAR_LF, NOTACHAR\n#else\n#define VSPACE_LIST \\\n  CHAR_VT, CHAR_FF, CHAR_CR, CHAR_LF, CHAR_NEL, NOTACHAR\n#endif\n\n#define VSPACE_BYTE_CASES \\\n  case CHAR_LF: \\\n  case CHAR_VT: \\\n  case CHAR_FF: \\\n  case CHAR_CR: \\\n  case CHAR_NEL\n\n#define VSPACE_CASES VSPACE_BYTE_CASES\n#endif  /* EBCDIC */\n\n/* -------------- End of whitespace macros -------------- */\n\n\n/* PCRE2 is able to support several different kinds of newline (CR, LF, CRLF,\n\"any\" and \"anycrlf\" at present). The following macros are used to package up\ntesting for newlines. NLBLOCK, PSSTART, and PSEND are defined in the various\nmodules to indicate in which datablock the parameters exist, and what the\nstart/end of string field names are. */\n\n#define NLTYPE_FIXED    0     /* Newline is a fixed length string */\n#define NLTYPE_ANY      1     /* Newline is any Unicode line ending */\n#define NLTYPE_ANYCRLF  2     /* Newline is CR, LF, or CRLF */\n\n/* This macro checks for a newline at the given position */\n\n#define IS_NEWLINE(p) \\\n  ((NLBLOCK->nltype != NLTYPE_FIXED)? \\\n    ((p) < NLBLOCK->PSEND && \\\n     PRIV(is_newline)((p), NLBLOCK->nltype, NLBLOCK->PSEND, \\\n       &(NLBLOCK->nllen), utf)) \\\n    : \\\n    ((p) <= NLBLOCK->PSEND - NLBLOCK->nllen && \\\n     *p == NLBLOCK->nl[0] && \\\n     (NLBLOCK->nllen == 1 || p[1] == NLBLOCK->nl[1])       \\\n    ) \\\n  )\n\n/* This macro checks for a newline immediately preceding the given position */\n\n#define WAS_NEWLINE(p) \\\n  ((NLBLOCK->nltype != NLTYPE_FIXED)? \\\n    ((p) > NLBLOCK->PSSTART && \\\n     PRIV(was_newline)((p), NLBLOCK->nltype, NLBLOCK->PSSTART, \\\n       &(NLBLOCK->nllen), utf)) \\\n    : \\\n    ((p) >= NLBLOCK->PSSTART + NLBLOCK->nllen && \\\n     *(p - NLBLOCK->nllen) == NLBLOCK->nl[0] &&              \\\n     (NLBLOCK->nllen == 1 || *(p - NLBLOCK->nllen + 1) == NLBLOCK->nl[1]) \\\n    ) \\\n  )\n\n/* Private flags containing information about the compiled pattern. The first\nthree must not be changed, because whichever is set is actually the number of\nbytes in a code unit in that mode. */\n\n#define PCRE2_MODE8         0x00000001u /* compiled in 8 bit mode */\n#define PCRE2_MODE16        0x00000002u /* compiled in 16 bit mode */\n#define PCRE2_MODE32        0x00000004u /* compiled in 32 bit mode */\n#define PCRE2_FIRSTSET      0x00000010u /* first_code unit is set */\n#define PCRE2_FIRSTCASELESS 0x00000020u /* caseless first code unit */\n#define PCRE2_FIRSTMAPSET   0x00000040u /* bitmap of first code units is set */\n#define PCRE2_LASTSET       0x00000080u /* last code unit is set */\n#define PCRE2_LASTCASELESS  0x00000100u /* caseless last code unit */\n#define PCRE2_STARTLINE     0x00000200u /* start after \\n for multiline */\n#define PCRE2_JCHANGED      0x00000400u /* j option used in pattern */\n#define PCRE2_HASCRORLF     0x00000800u /* explicit \\r or \\n in pattern */\n#define PCRE2_HASTHEN       0x00001000u /* pattern contains (*THEN) */\n#define PCRE2_MATCH_EMPTY   0x00002000u /* pattern can match empty string */\n#define PCRE2_BSR_SET       0x00004000u /* BSR was set in the pattern */\n#define PCRE2_NL_SET        0x00008000u /* newline was set in the pattern */\n#define PCRE2_NOTEMPTY_SET  0x00010000u /* (*NOTEMPTY) used        ) keep */\n#define PCRE2_NE_ATST_SET   0x00020000u /* (*NOTEMPTY_ATSTART) used) together */\n#define PCRE2_DEREF_TABLES  0x00040000u /* release character tables */\n#define PCRE2_NOJIT         0x00080000u /* (*NOJIT) used */\n#define PCRE2_HASBKPORX     0x00100000u /* contains \\P, \\p, or \\X */\n#define PCRE2_DUPCAPUSED    0x00200000u /* contains (?| */\n#define PCRE2_HASBKC        0x00400000u /* contains \\C */\n#define PCRE2_HASACCEPT     0x00800000u /* contains (*ACCEPT) */\n#define PCRE2_HASBSK        0x01000000u /* contains \\K */\n\n#define PCRE2_MODE_MASK     (PCRE2_MODE8 | PCRE2_MODE16 | PCRE2_MODE32)\n\n/* Values for the matchedby field in a match data block. */\n\nenum { PCRE2_MATCHEDBY_INTERPRETER,     /* pcre2_match() */\n       PCRE2_MATCHEDBY_DFA_INTERPRETER, /* pcre2_dfa_match() */\n       PCRE2_MATCHEDBY_JIT };           /* pcre2_jit_match() */\n\n/* Values for the flags field in a match data block. */\n\n#define PCRE2_MD_COPIED_SUBJECT  0x01u\n\n/* Magic number to provide a small check against being handed junk. */\n\n#define MAGIC_NUMBER  0x50435245UL   /* 'PCRE' */\n\n/* The maximum remaining length of subject we are prepared to search for a\nreq_unit match from an anchored pattern. In 8-bit mode, memchr() is used and is\nmuch faster than the search loop that has to be used in 16-bit and 32-bit\nmodes. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#define REQ_CU_MAX       5000\n#else\n#define REQ_CU_MAX       2000\n#endif\n\n/* The maximum nesting depth for Unicode character class sets.\nCurrently fixed. Warning: the interpreter relies on this so it can encode\nthe operand stack in a uint32_t. A nesting limit of 15 implies (15*2+1)=31\nstack operands required, due to the fact that we have two (and only two)\nlevels of operator precedence. In the UTS#18 syntax, you can write 'x&&y[z]'\nand in Perl syntax you can write '(?[ x - y & (z) ])', both of which imply\npushing the match results for x & y to the stack. */\n\n#define ECLASS_NEST_LIMIT  15\n\n/* Offsets for the bitmap tables in the cbits set of tables. Each table\ncontains a set of bits for a class map. Some classes are built by combining\nthese tables. */\n\n#define cbit_space     0      /* [:space:] or \\s */\n#define cbit_xdigit   32      /* [:xdigit:] */\n#define cbit_digit    64      /* [:digit:] or \\d */\n#define cbit_upper    96      /* [:upper:] */\n#define cbit_lower   128      /* [:lower:] */\n#define cbit_word    160      /* [:word:] or \\w */\n#define cbit_graph   192      /* [:graph:] */\n#define cbit_print   224      /* [:print:] */\n#define cbit_punct   256      /* [:punct:] */\n#define cbit_cntrl   288      /* [:cntrl:] */\n#define cbit_length  320      /* Length of the cbits table */\n\n/* Bit definitions for entries in the ctypes table. Do not change these values\nwithout checking pcre2_jit_compile.c, which has an assertion to ensure that\nctype_word has the value 16. */\n\n#define ctype_space    0x01\n#define ctype_letter   0x02\n#define ctype_lcletter 0x04\n#define ctype_digit    0x08\n#define ctype_word     0x10    /* alphanumeric or '_' */\n\n/* Offsets of the various tables from the base tables pointer, and\ntotal length of the tables. */\n\n#define lcc_offset      0                           /* Lower case */\n#define fcc_offset    256                           /* Flip case */\n#define cbits_offset  512                           /* Character classes */\n#define ctypes_offset (cbits_offset + cbit_length)  /* Character types */\n#define TABLES_LENGTH (ctypes_offset + 256)\n\n/* Private flags used in compile_context.optimization_flags */\n\n#define PCRE2_OPTIM_AUTO_POSSESS    0x00000001u\n#define PCRE2_OPTIM_DOTSTAR_ANCHOR  0x00000002u\n#define PCRE2_OPTIM_START_OPTIMIZE  0x00000004u\n\n#define PCRE2_OPTIMIZATION_ALL      0x00000007u\n\n/* -------------------- Character and string names ------------------------ */\n\n/* If PCRE2 is to support UTF-8 on EBCDIC platforms, we cannot use normal\ncharacter constants like '*' because the compiler would emit their EBCDIC code,\nwhich is different from their ASCII/UTF-8 code. Instead we define macros for\nthe characters so that they always use the ASCII/UTF-8 code when UTF-8 support\nis enabled. When UTF-8 support is not enabled, the definitions use character\nliterals. Both character and string versions of each character are needed, and\nthere are some longer strings as well.\n\nThis means that, on EBCDIC platforms, the PCRE2 library can handle either\nEBCDIC, or UTF-8, but not both. To support both in the same compiled library\nwould need different lookups depending on whether PCRE2_UTF was set or not.\nThis would make it impossible to use characters in switch/case statements,\nwhich would reduce performance. For a theoretical use (which nobody has asked\nfor) in a minority area (EBCDIC platforms), this is not sensible. Any\napplication that did need both could compile two versions of the library, using\nmacros to give the functions distinct names. */\n\n#ifndef SUPPORT_UNICODE\n\n/* UTF-8 support is not enabled; use the platform-dependent character literals\nso that PCRE2 works in both ASCII and EBCDIC environments, but only in non-UTF\nmode. Newline characters are problematic in EBCDIC. Though it has CR and LF\ncharacters, a common practice has been to use its NL (0x15) character as the\nline terminator in C-like processing environments. However, sometimes the LF\n(0x25) character is used instead, according to this Unicode document:\n\nhttp://unicode.org/standard/reports/tr13/tr13-5.html\n\nPCRE2 defaults EBCDIC NL to 0x15, but has a build-time option to select 0x25\ninstead. Whichever is *not* chosen is defined as NEL.\n\nIn both ASCII and EBCDIC environments, CHAR_NL and CHAR_LF are synonyms for the\nsame code point. */\n\n#ifdef EBCDIC\n\n#ifndef EBCDIC_NL25\n#define CHAR_NL                     '\\x15'\n#define CHAR_NEL                    '\\x25'\n#define STR_NL                      \"\\x15\"\n#define STR_NEL                     \"\\x25\"\n#else\n#define CHAR_NL                     '\\x25'\n#define CHAR_NEL                    '\\x15'\n#define STR_NL                      \"\\x25\"\n#define STR_NEL                     \"\\x15\"\n#endif\n\n#define CHAR_LF                     CHAR_NL\n#define STR_LF                      STR_NL\n\n#define CHAR_ESC                    '\\047'\n#define CHAR_DEL                    '\\007'\n#define CHAR_NBSP                   ((unsigned char)'\\x41')\n#define STR_ESC                     \"\\047\"\n#define STR_DEL                     \"\\007\"\n\n#else  /* Not EBCDIC */\n\n/* In ASCII/Unicode, linefeed is '\\n' and we equate this to NL for\ncompatibility. NEL is the Unicode newline character; make sure it is\na positive value. */\n\n#if '\\n' != 0x0a\n#error \"ASCII character '\\n' is not 0x0a\"\n#endif\n\n#define CHAR_LF                     '\\n'\n#define CHAR_NL                     CHAR_LF\n#define CHAR_NEL                    ((unsigned char)'\\x85')\n#define CHAR_ESC                    '\\033'\n#define CHAR_DEL                    '\\177'\n#define CHAR_NBSP                   ((unsigned char)'\\xa0')\n\n#define STR_LF                      \"\\n\"\n#define STR_NL                      STR_LF\n#define STR_NEL                     \"\\x85\"\n#define STR_ESC                     \"\\033\"\n#define STR_DEL                     \"\\177\"\n\n#endif  /* EBCDIC */\n\n/* When we want to use EBCDIC with an ASCII compiler, for testing EBCDIC on\nASCII platforms, then we can hardcode an EBCDIC codepage (IBM-1047). */\n\n#ifdef EBCDIC_IGNORING_COMPILER\n\n#define CHAR_NUL                    '\\000'\n#define CHAR_HT                     '\\005'\n#define CHAR_VT                     '\\013'\n#define CHAR_FF                     '\\014'\n#define CHAR_CR                     '\\015'\n#define CHAR_BS                     '\\026'\n#define CHAR_BEL                    '\\057'\n\n#define CHAR_SPACE                  '\\100'\n#define CHAR_EXCLAMATION_MARK       '\\132'\n#define CHAR_QUOTATION_MARK         '\\177'\n#define CHAR_NUMBER_SIGN            '\\173'\n#define CHAR_DOLLAR_SIGN            '\\133'\n#define CHAR_PERCENT_SIGN           '\\154'\n#define CHAR_AMPERSAND              '\\120'\n#define CHAR_APOSTROPHE             '\\175'\n#define CHAR_LEFT_PARENTHESIS       '\\115'\n#define CHAR_RIGHT_PARENTHESIS      '\\135'\n#define CHAR_ASTERISK               '\\134'\n#define CHAR_PLUS                   '\\116'\n#define CHAR_COMMA                  '\\153'\n#define CHAR_MINUS                  '\\140'\n#define CHAR_DOT                    '\\113'\n#define CHAR_SLASH                  '\\141'\n#define CHAR_0                      ((unsigned char)'\\xf0')\n#define CHAR_1                      ((unsigned char)'\\xf1')\n#define CHAR_2                      ((unsigned char)'\\xf2')\n#define CHAR_3                      ((unsigned char)'\\xf3')\n#define CHAR_4                      ((unsigned char)'\\xf4')\n#define CHAR_5                      ((unsigned char)'\\xf5')\n#define CHAR_6                      ((unsigned char)'\\xf6')\n#define CHAR_7                      ((unsigned char)'\\xf7')\n#define CHAR_8                      ((unsigned char)'\\xf8')\n#define CHAR_9                      ((unsigned char)'\\xf9')\n#define CHAR_COLON                  '\\172'\n#define CHAR_SEMICOLON              '\\136'\n#define CHAR_LESS_THAN_SIGN         '\\114'\n#define CHAR_EQUALS_SIGN            '\\176'\n#define CHAR_GREATER_THAN_SIGN      '\\156'\n#define CHAR_QUESTION_MARK          '\\157'\n#define CHAR_COMMERCIAL_AT          '\\174'\n#define CHAR_A                      ((unsigned char)'\\xc1')\n#define CHAR_B                      ((unsigned char)'\\xc2')\n#define CHAR_C                      ((unsigned char)'\\xc3')\n#define CHAR_D                      ((unsigned char)'\\xc4')\n#define CHAR_E                      ((unsigned char)'\\xc5')\n#define CHAR_F                      ((unsigned char)'\\xc6')\n#define CHAR_G                      ((unsigned char)'\\xc7')\n#define CHAR_H                      ((unsigned char)'\\xc8')\n#define CHAR_I                      ((unsigned char)'\\xc9')\n#define CHAR_J                      ((unsigned char)'\\xd1')\n#define CHAR_K                      ((unsigned char)'\\xd2')\n#define CHAR_L                      ((unsigned char)'\\xd3')\n#define CHAR_M                      ((unsigned char)'\\xd4')\n#define CHAR_N                      ((unsigned char)'\\xd5')\n#define CHAR_O                      ((unsigned char)'\\xd6')\n#define CHAR_P                      ((unsigned char)'\\xd7')\n#define CHAR_Q                      ((unsigned char)'\\xd8')\n#define CHAR_R                      ((unsigned char)'\\xd9')\n#define CHAR_S                      ((unsigned char)'\\xe2')\n#define CHAR_T                      ((unsigned char)'\\xe3')\n#define CHAR_U                      ((unsigned char)'\\xe4')\n#define CHAR_V                      ((unsigned char)'\\xe5')\n#define CHAR_W                      ((unsigned char)'\\xe6')\n#define CHAR_X                      ((unsigned char)'\\xe7')\n#define CHAR_Y                      ((unsigned char)'\\xe8')\n#define CHAR_Z                      ((unsigned char)'\\xe9')\n#define CHAR_LEFT_SQUARE_BRACKET    ((unsigned char)'\\xad')\n#define CHAR_BACKSLASH              ((unsigned char)'\\xe0')\n#define CHAR_RIGHT_SQUARE_BRACKET   ((unsigned char)'\\xbd')\n#define CHAR_CIRCUMFLEX_ACCENT      '\\137'\n#define CHAR_UNDERSCORE             '\\155'\n#define CHAR_GRAVE_ACCENT           '\\171'\n#define CHAR_a                      ((unsigned char)'\\x81')\n#define CHAR_b                      ((unsigned char)'\\x82')\n#define CHAR_c                      ((unsigned char)'\\x83')\n#define CHAR_d                      ((unsigned char)'\\x84')\n#define CHAR_e                      ((unsigned char)'\\x85')\n#define CHAR_f                      ((unsigned char)'\\x86')\n#define CHAR_g                      ((unsigned char)'\\x87')\n#define CHAR_h                      ((unsigned char)'\\x88')\n#define CHAR_i                      ((unsigned char)'\\x89')\n#define CHAR_j                      ((unsigned char)'\\x91')\n#define CHAR_k                      ((unsigned char)'\\x92')\n#define CHAR_l                      ((unsigned char)'\\x93')\n#define CHAR_m                      ((unsigned char)'\\x94')\n#define CHAR_n                      ((unsigned char)'\\x95')\n#define CHAR_o                      ((unsigned char)'\\x96')\n#define CHAR_p                      ((unsigned char)'\\x97')\n#define CHAR_q                      ((unsigned char)'\\x98')\n#define CHAR_r                      ((unsigned char)'\\x99')\n#define CHAR_s                      ((unsigned char)'\\xa2')\n#define CHAR_t                      ((unsigned char)'\\xa3')\n#define CHAR_u                      ((unsigned char)'\\xa4')\n#define CHAR_v                      ((unsigned char)'\\xa5')\n#define CHAR_w                      ((unsigned char)'\\xa6')\n#define CHAR_x                      ((unsigned char)'\\xa7')\n#define CHAR_y                      ((unsigned char)'\\xa8')\n#define CHAR_z                      ((unsigned char)'\\xa9')\n#define CHAR_LEFT_CURLY_BRACKET     ((unsigned char)'\\xc0')\n#define CHAR_VERTICAL_LINE          '\\117'\n#define CHAR_RIGHT_CURLY_BRACKET    ((unsigned char)'\\xd0')\n#define CHAR_TILDE                  ((unsigned char)'\\xa1')\n\n#define STR_HT                      \"\\005\"\n#define STR_VT                      \"\\013\"\n#define STR_FF                      \"\\014\"\n#define STR_CR                      \"\\015\"\n#define STR_BS                      \"\\026\"\n#define STR_BEL                     \"\\057\"\n\n#define STR_SPACE                   \"\\100\"\n#define STR_EXCLAMATION_MARK        \"\\132\"\n#define STR_QUOTATION_MARK          \"\\177\"\n#define STR_NUMBER_SIGN             \"\\173\"\n#define STR_DOLLAR_SIGN             \"\\133\"\n#define STR_PERCENT_SIGN            \"\\154\"\n#define STR_AMPERSAND               \"\\120\"\n#define STR_APOSTROPHE              \"\\175\"\n#define STR_LEFT_PARENTHESIS        \"\\115\"\n#define STR_RIGHT_PARENTHESIS       \"\\135\"\n#define STR_ASTERISK                \"\\134\"\n#define STR_PLUS                    \"\\116\"\n#define STR_COMMA                   \"\\153\"\n#define STR_MINUS                   \"\\140\"\n#define STR_DOT                     \"\\113\"\n#define STR_SLASH                   \"\\141\"\n#define STR_0                       \"\\360\"\n#define STR_1                       \"\\361\"\n#define STR_2                       \"\\362\"\n#define STR_3                       \"\\363\"\n#define STR_4                       \"\\364\"\n#define STR_5                       \"\\365\"\n#define STR_6                       \"\\366\"\n#define STR_7                       \"\\367\"\n#define STR_8                       \"\\370\"\n#define STR_9                       \"\\371\"\n#define STR_COLON                   \"\\172\"\n#define STR_SEMICOLON               \"\\136\"\n#define STR_LESS_THAN_SIGN          \"\\114\"\n#define STR_EQUALS_SIGN             \"\\176\"\n#define STR_GREATER_THAN_SIGN       \"\\156\"\n#define STR_QUESTION_MARK           \"\\157\"\n#define STR_COMMERCIAL_AT           \"\\174\"\n#define STR_A                       \"\\301\"\n#define STR_B                       \"\\302\"\n#define STR_C                       \"\\303\"\n#define STR_D                       \"\\304\"\n#define STR_E                       \"\\305\"\n#define STR_F                       \"\\306\"\n#define STR_G                       \"\\307\"\n#define STR_H                       \"\\310\"\n#define STR_I                       \"\\311\"\n#define STR_J                       \"\\321\"\n#define STR_K                       \"\\322\"\n#define STR_L                       \"\\323\"\n#define STR_M                       \"\\324\"\n#define STR_N                       \"\\325\"\n#define STR_O                       \"\\326\"\n#define STR_P                       \"\\327\"\n#define STR_Q                       \"\\330\"\n#define STR_R                       \"\\331\"\n#define STR_S                       \"\\342\"\n#define STR_T                       \"\\343\"\n#define STR_U                       \"\\344\"\n#define STR_V                       \"\\345\"\n#define STR_W                       \"\\346\"\n#define STR_X                       \"\\347\"\n#define STR_Y                       \"\\350\"\n#define STR_Z                       \"\\351\"\n#define STR_LEFT_SQUARE_BRACKET     \"\\255\"\n#define STR_BACKSLASH               \"\\340\"\n#define STR_RIGHT_SQUARE_BRACKET    \"\\275\"\n#define STR_CIRCUMFLEX_ACCENT       \"\\137\"\n#define STR_UNDERSCORE              \"\\155\"\n#define STR_GRAVE_ACCENT            \"\\171\"\n#define STR_a                       \"\\201\"\n#define STR_b                       \"\\202\"\n#define STR_c                       \"\\203\"\n#define STR_d                       \"\\204\"\n#define STR_e                       \"\\205\"\n#define STR_f                       \"\\206\"\n#define STR_g                       \"\\207\"\n#define STR_h                       \"\\210\"\n#define STR_i                       \"\\211\"\n#define STR_j                       \"\\221\"\n#define STR_k                       \"\\222\"\n#define STR_l                       \"\\223\"\n#define STR_m                       \"\\224\"\n#define STR_n                       \"\\225\"\n#define STR_o                       \"\\226\"\n#define STR_p                       \"\\227\"\n#define STR_q                       \"\\230\"\n#define STR_r                       \"\\231\"\n#define STR_s                       \"\\242\"\n#define STR_t                       \"\\243\"\n#define STR_u                       \"\\244\"\n#define STR_v                       \"\\245\"\n#define STR_w                       \"\\246\"\n#define STR_x                       \"\\247\"\n#define STR_y                       \"\\250\"\n#define STR_z                       \"\\251\"\n#define STR_LEFT_CURLY_BRACKET      \"\\300\"\n#define STR_VERTICAL_LINE           \"\\117\"\n#define STR_RIGHT_CURLY_BRACKET     \"\\320\"\n#define STR_TILDE                   \"\\241\"\n\n#else  /* EBCDIC_IGNORING_COMPILER */\n\n/* Otherwise, on a real EBCDIC compiler or an ASCII compiler, we can use simple\nstring and character literals. */\n\n#ifdef EBCDIC\n#if 'a' != 0x81\n#error \"EBCDIC character 'a' is not 0x81\"\n#endif\n#else\n#if 'a' != 0x61\n#error \"ASCII character 'a' is not 0x61\"\n#endif\n#endif\n\n#define CHAR_NUL                    '\\0'\n#define CHAR_HT                     '\\t'\n#define CHAR_VT                     '\\v'\n#define CHAR_FF                     '\\f'\n#define CHAR_CR                     '\\r'\n#define CHAR_BS                     '\\b'\n#define CHAR_BEL                    '\\a'\n\n#define CHAR_SPACE                  ' '\n#define CHAR_EXCLAMATION_MARK       '!'\n#define CHAR_QUOTATION_MARK         '\"'\n#define CHAR_NUMBER_SIGN            '#'\n#define CHAR_DOLLAR_SIGN            '$'\n#define CHAR_PERCENT_SIGN           '%'\n#define CHAR_AMPERSAND              '&'\n#define CHAR_APOSTROPHE             '\\''\n#define CHAR_LEFT_PARENTHESIS       '('\n#define CHAR_RIGHT_PARENTHESIS      ')'\n#define CHAR_ASTERISK               '*'\n#define CHAR_PLUS                   '+'\n#define CHAR_COMMA                  ','\n#define CHAR_MINUS                  '-'\n#define CHAR_DOT                    '.'\n#define CHAR_SLASH                  '/'\n#define CHAR_0                      '0'\n#define CHAR_1                      '1'\n#define CHAR_2                      '2'\n#define CHAR_3                      '3'\n#define CHAR_4                      '4'\n#define CHAR_5                      '5'\n#define CHAR_6                      '6'\n#define CHAR_7                      '7'\n#define CHAR_8                      '8'\n#define CHAR_9                      '9'\n#define CHAR_COLON                  ':'\n#define CHAR_SEMICOLON              ';'\n#define CHAR_LESS_THAN_SIGN         '<'\n#define CHAR_EQUALS_SIGN            '='\n#define CHAR_GREATER_THAN_SIGN      '>'\n#define CHAR_QUESTION_MARK          '?'\n#define CHAR_COMMERCIAL_AT          '@'\n#define CHAR_A                      'A'\n#define CHAR_B                      'B'\n#define CHAR_C                      'C'\n#define CHAR_D                      'D'\n#define CHAR_E                      'E'\n#define CHAR_F                      'F'\n#define CHAR_G                      'G'\n#define CHAR_H                      'H'\n#define CHAR_I                      'I'\n#define CHAR_J                      'J'\n#define CHAR_K                      'K'\n#define CHAR_L                      'L'\n#define CHAR_M                      'M'\n#define CHAR_N                      'N'\n#define CHAR_O                      'O'\n#define CHAR_P                      'P'\n#define CHAR_Q                      'Q'\n#define CHAR_R                      'R'\n#define CHAR_S                      'S'\n#define CHAR_T                      'T'\n#define CHAR_U                      'U'\n#define CHAR_V                      'V'\n#define CHAR_W                      'W'\n#define CHAR_X                      'X'\n#define CHAR_Y                      'Y'\n#define CHAR_Z                      'Z'\n#define CHAR_LEFT_SQUARE_BRACKET    '['\n#define CHAR_BACKSLASH              '\\\\'\n#define CHAR_RIGHT_SQUARE_BRACKET   ']'\n#define CHAR_CIRCUMFLEX_ACCENT      '^'\n#define CHAR_UNDERSCORE             '_'\n#define CHAR_GRAVE_ACCENT           '`'\n#define CHAR_a                      'a'\n#define CHAR_b                      'b'\n#define CHAR_c                      'c'\n#define CHAR_d                      'd'\n#define CHAR_e                      'e'\n#define CHAR_f                      'f'\n#define CHAR_g                      'g'\n#define CHAR_h                      'h'\n#define CHAR_i                      'i'\n#define CHAR_j                      'j'\n#define CHAR_k                      'k'\n#define CHAR_l                      'l'\n#define CHAR_m                      'm'\n#define CHAR_n                      'n'\n#define CHAR_o                      'o'\n#define CHAR_p                      'p'\n#define CHAR_q                      'q'\n#define CHAR_r                      'r'\n#define CHAR_s                      's'\n#define CHAR_t                      't'\n#define CHAR_u                      'u'\n#define CHAR_v                      'v'\n#define CHAR_w                      'w'\n#define CHAR_x                      'x'\n#define CHAR_y                      'y'\n#define CHAR_z                      'z'\n#define CHAR_LEFT_CURLY_BRACKET     '{'\n#define CHAR_VERTICAL_LINE          '|'\n#define CHAR_RIGHT_CURLY_BRACKET    '}'\n#define CHAR_TILDE                  '~'\n\n#define STR_HT                      \"\\t\"\n#define STR_VT                      \"\\v\"\n#define STR_FF                      \"\\f\"\n#define STR_CR                      \"\\r\"\n#define STR_BS                      \"\\b\"\n#define STR_BEL                     \"\\a\"\n\n#define STR_SPACE                   \" \"\n#define STR_EXCLAMATION_MARK        \"!\"\n#define STR_QUOTATION_MARK          \"\\\"\"\n#define STR_NUMBER_SIGN             \"#\"\n#define STR_DOLLAR_SIGN             \"$\"\n#define STR_PERCENT_SIGN            \"%\"\n#define STR_AMPERSAND               \"&\"\n#define STR_APOSTROPHE              \"'\"\n#define STR_LEFT_PARENTHESIS        \"(\"\n#define STR_RIGHT_PARENTHESIS       \")\"\n#define STR_ASTERISK                \"*\"\n#define STR_PLUS                    \"+\"\n#define STR_COMMA                   \",\"\n#define STR_MINUS                   \"-\"\n#define STR_DOT                     \".\"\n#define STR_SLASH                   \"/\"\n#define STR_0                       \"0\"\n#define STR_1                       \"1\"\n#define STR_2                       \"2\"\n#define STR_3                       \"3\"\n#define STR_4                       \"4\"\n#define STR_5                       \"5\"\n#define STR_6                       \"6\"\n#define STR_7                       \"7\"\n#define STR_8                       \"8\"\n#define STR_9                       \"9\"\n#define STR_COLON                   \":\"\n#define STR_SEMICOLON               \";\"\n#define STR_LESS_THAN_SIGN          \"<\"\n#define STR_EQUALS_SIGN             \"=\"\n#define STR_GREATER_THAN_SIGN       \">\"\n#define STR_QUESTION_MARK           \"?\"\n#define STR_COMMERCIAL_AT           \"@\"\n#define STR_A                       \"A\"\n#define STR_B                       \"B\"\n#define STR_C                       \"C\"\n#define STR_D                       \"D\"\n#define STR_E                       \"E\"\n#define STR_F                       \"F\"\n#define STR_G                       \"G\"\n#define STR_H                       \"H\"\n#define STR_I                       \"I\"\n#define STR_J                       \"J\"\n#define STR_K                       \"K\"\n#define STR_L                       \"L\"\n#define STR_M                       \"M\"\n#define STR_N                       \"N\"\n#define STR_O                       \"O\"\n#define STR_P                       \"P\"\n#define STR_Q                       \"Q\"\n#define STR_R                       \"R\"\n#define STR_S                       \"S\"\n#define STR_T                       \"T\"\n#define STR_U                       \"U\"\n#define STR_V                       \"V\"\n#define STR_W                       \"W\"\n#define STR_X                       \"X\"\n#define STR_Y                       \"Y\"\n#define STR_Z                       \"Z\"\n#define STR_LEFT_SQUARE_BRACKET     \"[\"\n#define STR_BACKSLASH               \"\\\\\"\n#define STR_RIGHT_SQUARE_BRACKET    \"]\"\n#define STR_CIRCUMFLEX_ACCENT       \"^\"\n#define STR_UNDERSCORE              \"_\"\n#define STR_GRAVE_ACCENT            \"`\"\n#define STR_a                       \"a\"\n#define STR_b                       \"b\"\n#define STR_c                       \"c\"\n#define STR_d                       \"d\"\n#define STR_e                       \"e\"\n#define STR_f                       \"f\"\n#define STR_g                       \"g\"\n#define STR_h                       \"h\"\n#define STR_i                       \"i\"\n#define STR_j                       \"j\"\n#define STR_k                       \"k\"\n#define STR_l                       \"l\"\n#define STR_m                       \"m\"\n#define STR_n                       \"n\"\n#define STR_o                       \"o\"\n#define STR_p                       \"p\"\n#define STR_q                       \"q\"\n#define STR_r                       \"r\"\n#define STR_s                       \"s\"\n#define STR_t                       \"t\"\n#define STR_u                       \"u\"\n#define STR_v                       \"v\"\n#define STR_w                       \"w\"\n#define STR_x                       \"x\"\n#define STR_y                       \"y\"\n#define STR_z                       \"z\"\n#define STR_LEFT_CURLY_BRACKET      \"{\"\n#define STR_VERTICAL_LINE           \"|\"\n#define STR_RIGHT_CURLY_BRACKET     \"}\"\n#define STR_TILDE                   \"~\"\n\n#endif  /* EBCDIC_WITH_ASCII_COMPILER */\n\n#else  /* SUPPORT_UNICODE */\n\n/* UTF-8 support is enabled; always use UTF-8 (=ASCII) character codes. This\nworks in both modes non-EBCDIC platforms, and on EBCDIC platforms in UTF-8 mode\nonly. */\n\n#define CHAR_HT                     '\\011'\n#define CHAR_VT                     '\\013'\n#define CHAR_FF                     '\\014'\n#define CHAR_CR                     '\\015'\n#define CHAR_LF                     '\\012'\n#define CHAR_NL                     CHAR_LF\n#define CHAR_NEL                    ((unsigned char)'\\x85')\n#define CHAR_BS                     '\\010'\n#define CHAR_BEL                    '\\007'\n#define CHAR_ESC                    '\\033'\n#define CHAR_DEL                    '\\177'\n\n#define CHAR_NUL                    '\\0'\n#define CHAR_SPACE                  '\\040'\n#define CHAR_EXCLAMATION_MARK       '\\041'\n#define CHAR_QUOTATION_MARK         '\\042'\n#define CHAR_NUMBER_SIGN            '\\043'\n#define CHAR_DOLLAR_SIGN            '\\044'\n#define CHAR_PERCENT_SIGN           '\\045'\n#define CHAR_AMPERSAND              '\\046'\n#define CHAR_APOSTROPHE             '\\047'\n#define CHAR_LEFT_PARENTHESIS       '\\050'\n#define CHAR_RIGHT_PARENTHESIS      '\\051'\n#define CHAR_ASTERISK               '\\052'\n#define CHAR_PLUS                   '\\053'\n#define CHAR_COMMA                  '\\054'\n#define CHAR_MINUS                  '\\055'\n#define CHAR_DOT                    '\\056'\n#define CHAR_SLASH                  '\\057'\n#define CHAR_0                      '\\060'\n#define CHAR_1                      '\\061'\n#define CHAR_2                      '\\062'\n#define CHAR_3                      '\\063'\n#define CHAR_4                      '\\064'\n#define CHAR_5                      '\\065'\n#define CHAR_6                      '\\066'\n#define CHAR_7                      '\\067'\n#define CHAR_8                      '\\070'\n#define CHAR_9                      '\\071'\n#define CHAR_COLON                  '\\072'\n#define CHAR_SEMICOLON              '\\073'\n#define CHAR_LESS_THAN_SIGN         '\\074'\n#define CHAR_EQUALS_SIGN            '\\075'\n#define CHAR_GREATER_THAN_SIGN      '\\076'\n#define CHAR_QUESTION_MARK          '\\077'\n#define CHAR_COMMERCIAL_AT          '\\100'\n#define CHAR_A                      '\\101'\n#define CHAR_B                      '\\102'\n#define CHAR_C                      '\\103'\n#define CHAR_D                      '\\104'\n#define CHAR_E                      '\\105'\n#define CHAR_F                      '\\106'\n#define CHAR_G                      '\\107'\n#define CHAR_H                      '\\110'\n#define CHAR_I                      '\\111'\n#define CHAR_J                      '\\112'\n#define CHAR_K                      '\\113'\n#define CHAR_L                      '\\114'\n#define CHAR_M                      '\\115'\n#define CHAR_N                      '\\116'\n#define CHAR_O                      '\\117'\n#define CHAR_P                      '\\120'\n#define CHAR_Q                      '\\121'\n#define CHAR_R                      '\\122'\n#define CHAR_S                      '\\123'\n#define CHAR_T                      '\\124'\n#define CHAR_U                      '\\125'\n#define CHAR_V                      '\\126'\n#define CHAR_W                      '\\127'\n#define CHAR_X                      '\\130'\n#define CHAR_Y                      '\\131'\n#define CHAR_Z                      '\\132'\n#define CHAR_LEFT_SQUARE_BRACKET    '\\133'\n#define CHAR_BACKSLASH              '\\134'\n#define CHAR_RIGHT_SQUARE_BRACKET   '\\135'\n#define CHAR_CIRCUMFLEX_ACCENT      '\\136'\n#define CHAR_UNDERSCORE             '\\137'\n#define CHAR_GRAVE_ACCENT           '\\140'\n#define CHAR_a                      '\\141'\n#define CHAR_b                      '\\142'\n#define CHAR_c                      '\\143'\n#define CHAR_d                      '\\144'\n#define CHAR_e                      '\\145'\n#define CHAR_f                      '\\146'\n#define CHAR_g                      '\\147'\n#define CHAR_h                      '\\150'\n#define CHAR_i                      '\\151'\n#define CHAR_j                      '\\152'\n#define CHAR_k                      '\\153'\n#define CHAR_l                      '\\154'\n#define CHAR_m                      '\\155'\n#define CHAR_n                      '\\156'\n#define CHAR_o                      '\\157'\n#define CHAR_p                      '\\160'\n#define CHAR_q                      '\\161'\n#define CHAR_r                      '\\162'\n#define CHAR_s                      '\\163'\n#define CHAR_t                      '\\164'\n#define CHAR_u                      '\\165'\n#define CHAR_v                      '\\166'\n#define CHAR_w                      '\\167'\n#define CHAR_x                      '\\170'\n#define CHAR_y                      '\\171'\n#define CHAR_z                      '\\172'\n#define CHAR_LEFT_CURLY_BRACKET     '\\173'\n#define CHAR_VERTICAL_LINE          '\\174'\n#define CHAR_RIGHT_CURLY_BRACKET    '\\175'\n#define CHAR_TILDE                  '\\176'\n#define CHAR_NBSP                   ((unsigned char)'\\xa0')\n\n#define STR_HT                      \"\\011\"\n#define STR_VT                      \"\\013\"\n#define STR_FF                      \"\\014\"\n#define STR_CR                      \"\\015\"\n#define STR_NL                      \"\\012\"\n#define STR_BS                      \"\\010\"\n#define STR_BEL                     \"\\007\"\n#define STR_ESC                     \"\\033\"\n#define STR_DEL                     \"\\177\"\n\n#define STR_SPACE                   \"\\040\"\n#define STR_EXCLAMATION_MARK        \"\\041\"\n#define STR_QUOTATION_MARK          \"\\042\"\n#define STR_NUMBER_SIGN             \"\\043\"\n#define STR_DOLLAR_SIGN             \"\\044\"\n#define STR_PERCENT_SIGN            \"\\045\"\n#define STR_AMPERSAND               \"\\046\"\n#define STR_APOSTROPHE              \"\\047\"\n#define STR_LEFT_PARENTHESIS        \"\\050\"\n#define STR_RIGHT_PARENTHESIS       \"\\051\"\n#define STR_ASTERISK                \"\\052\"\n#define STR_PLUS                    \"\\053\"\n#define STR_COMMA                   \"\\054\"\n#define STR_MINUS                   \"\\055\"\n#define STR_DOT                     \"\\056\"\n#define STR_SLASH                   \"\\057\"\n#define STR_0                       \"\\060\"\n#define STR_1                       \"\\061\"\n#define STR_2                       \"\\062\"\n#define STR_3                       \"\\063\"\n#define STR_4                       \"\\064\"\n#define STR_5                       \"\\065\"\n#define STR_6                       \"\\066\"\n#define STR_7                       \"\\067\"\n#define STR_8                       \"\\070\"\n#define STR_9                       \"\\071\"\n#define STR_COLON                   \"\\072\"\n#define STR_SEMICOLON               \"\\073\"\n#define STR_LESS_THAN_SIGN          \"\\074\"\n#define STR_EQUALS_SIGN             \"\\075\"\n#define STR_GREATER_THAN_SIGN       \"\\076\"\n#define STR_QUESTION_MARK           \"\\077\"\n#define STR_COMMERCIAL_AT           \"\\100\"\n#define STR_A                       \"\\101\"\n#define STR_B                       \"\\102\"\n#define STR_C                       \"\\103\"\n#define STR_D                       \"\\104\"\n#define STR_E                       \"\\105\"\n#define STR_F                       \"\\106\"\n#define STR_G                       \"\\107\"\n#define STR_H                       \"\\110\"\n#define STR_I                       \"\\111\"\n#define STR_J                       \"\\112\"\n#define STR_K                       \"\\113\"\n#define STR_L                       \"\\114\"\n#define STR_M                       \"\\115\"\n#define STR_N                       \"\\116\"\n#define STR_O                       \"\\117\"\n#define STR_P                       \"\\120\"\n#define STR_Q                       \"\\121\"\n#define STR_R                       \"\\122\"\n#define STR_S                       \"\\123\"\n#define STR_T                       \"\\124\"\n#define STR_U                       \"\\125\"\n#define STR_V                       \"\\126\"\n#define STR_W                       \"\\127\"\n#define STR_X                       \"\\130\"\n#define STR_Y                       \"\\131\"\n#define STR_Z                       \"\\132\"\n#define STR_LEFT_SQUARE_BRACKET     \"\\133\"\n#define STR_BACKSLASH               \"\\134\"\n#define STR_RIGHT_SQUARE_BRACKET    \"\\135\"\n#define STR_CIRCUMFLEX_ACCENT       \"\\136\"\n#define STR_UNDERSCORE              \"\\137\"\n#define STR_GRAVE_ACCENT            \"\\140\"\n#define STR_a                       \"\\141\"\n#define STR_b                       \"\\142\"\n#define STR_c                       \"\\143\"\n#define STR_d                       \"\\144\"\n#define STR_e                       \"\\145\"\n#define STR_f                       \"\\146\"\n#define STR_g                       \"\\147\"\n#define STR_h                       \"\\150\"\n#define STR_i                       \"\\151\"\n#define STR_j                       \"\\152\"\n#define STR_k                       \"\\153\"\n#define STR_l                       \"\\154\"\n#define STR_m                       \"\\155\"\n#define STR_n                       \"\\156\"\n#define STR_o                       \"\\157\"\n#define STR_p                       \"\\160\"\n#define STR_q                       \"\\161\"\n#define STR_r                       \"\\162\"\n#define STR_s                       \"\\163\"\n#define STR_t                       \"\\164\"\n#define STR_u                       \"\\165\"\n#define STR_v                       \"\\166\"\n#define STR_w                       \"\\167\"\n#define STR_x                       \"\\170\"\n#define STR_y                       \"\\171\"\n#define STR_z                       \"\\172\"\n#define STR_LEFT_CURLY_BRACKET      \"\\173\"\n#define STR_VERTICAL_LINE           \"\\174\"\n#define STR_RIGHT_CURLY_BRACKET     \"\\175\"\n#define STR_TILDE                   \"\\176\"\n\n#endif  /* SUPPORT_UNICODE */\n\n\n#define STRING_ACCEPT0               STR_A STR_C STR_C STR_E STR_P STR_T \"\\0\"\n#define STRING_COMMIT0               STR_C STR_O STR_M STR_M STR_I STR_T \"\\0\"\n#define STRING_F0                    STR_F \"\\0\"\n#define STRING_FAIL0                 STR_F STR_A STR_I STR_L \"\\0\"\n#define STRING_MARK0                 STR_M STR_A STR_R STR_K \"\\0\"\n#define STRING_PRUNE0                STR_P STR_R STR_U STR_N STR_E \"\\0\"\n#define STRING_SKIP0                 STR_S STR_K STR_I STR_P \"\\0\"\n#define STRING_THEN                  STR_T STR_H STR_E STR_N\n\n#define STRING_atomic0               STR_a STR_t STR_o STR_m STR_i STR_c \"\\0\"\n#define STRING_pla0                  STR_p STR_l STR_a \"\\0\"\n#define STRING_plb0                  STR_p STR_l STR_b \"\\0\"\n#define STRING_napla0                STR_n STR_a STR_p STR_l STR_a \"\\0\"\n#define STRING_naplb0                STR_n STR_a STR_p STR_l STR_b \"\\0\"\n#define STRING_nla0                  STR_n STR_l STR_a \"\\0\"\n#define STRING_nlb0                  STR_n STR_l STR_b \"\\0\"\n#define STRING_scs0                  STR_s STR_c STR_s \"\\0\"\n#define STRING_sr0                   STR_s STR_r \"\\0\"\n#define STRING_asr0                  STR_a STR_s STR_r \"\\0\"\n#define STRING_positive_lookahead0   STR_p STR_o STR_s STR_i STR_t STR_i STR_v STR_e STR_UNDERSCORE STR_l STR_o STR_o STR_k STR_a STR_h STR_e STR_a STR_d \"\\0\"\n#define STRING_positive_lookbehind0  STR_p STR_o STR_s STR_i STR_t STR_i STR_v STR_e STR_UNDERSCORE STR_l STR_o STR_o STR_k STR_b STR_e STR_h STR_i STR_n STR_d \"\\0\"\n#define STRING_non_atomic_positive_lookahead0   STR_n STR_o STR_n STR_UNDERSCORE STR_a STR_t STR_o STR_m STR_i STR_c STR_UNDERSCORE STR_p STR_o STR_s STR_i STR_t STR_i STR_v STR_e STR_UNDERSCORE STR_l STR_o STR_o STR_k STR_a STR_h STR_e STR_a STR_d \"\\0\"\n#define STRING_non_atomic_positive_lookbehind0  STR_n STR_o STR_n STR_UNDERSCORE STR_a STR_t STR_o STR_m STR_i STR_c STR_UNDERSCORE STR_p STR_o STR_s STR_i STR_t STR_i STR_v STR_e STR_UNDERSCORE STR_l STR_o STR_o STR_k STR_b STR_e STR_h STR_i STR_n STR_d \"\\0\"\n#define STRING_negative_lookahead0   STR_n STR_e STR_g STR_a STR_t STR_i STR_v STR_e STR_UNDERSCORE STR_l STR_o STR_o STR_k STR_a STR_h STR_e STR_a STR_d \"\\0\"\n#define STRING_negative_lookbehind0  STR_n STR_e STR_g STR_a STR_t STR_i STR_v STR_e STR_UNDERSCORE STR_l STR_o STR_o STR_k STR_b STR_e STR_h STR_i STR_n STR_d \"\\0\"\n#define STRING_script_run0           STR_s STR_c STR_r STR_i STR_p STR_t STR_UNDERSCORE STR_r STR_u STR_n \"\\0\"\n#define STRING_atomic_script_run     STR_a STR_t STR_o STR_m STR_i STR_c STR_UNDERSCORE STR_s STR_c STR_r STR_i STR_p STR_t STR_UNDERSCORE STR_r STR_u STR_n\n#define STRING_scan_substring0       STR_s STR_c STR_a STR_n STR_UNDERSCORE STR_s STR_u STR_b STR_s STR_t STR_r STR_i STR_n STR_g \"\\0\"\n\n#define STRING_alpha0                STR_a STR_l STR_p STR_h STR_a \"\\0\"\n#define STRING_lower0                STR_l STR_o STR_w STR_e STR_r \"\\0\"\n#define STRING_upper0                STR_u STR_p STR_p STR_e STR_r \"\\0\"\n#define STRING_alnum0                STR_a STR_l STR_n STR_u STR_m \"\\0\"\n#define STRING_ascii0                STR_a STR_s STR_c STR_i STR_i \"\\0\"\n#define STRING_blank0                STR_b STR_l STR_a STR_n STR_k \"\\0\"\n#define STRING_cntrl0                STR_c STR_n STR_t STR_r STR_l \"\\0\"\n#define STRING_digit0                STR_d STR_i STR_g STR_i STR_t \"\\0\"\n#define STRING_graph0                STR_g STR_r STR_a STR_p STR_h \"\\0\"\n#define STRING_print0                STR_p STR_r STR_i STR_n STR_t \"\\0\"\n#define STRING_punct0                STR_p STR_u STR_n STR_c STR_t \"\\0\"\n#define STRING_space0                STR_s STR_p STR_a STR_c STR_e \"\\0\"\n#define STRING_word0                 STR_w STR_o STR_r STR_d       \"\\0\"\n#define STRING_xdigit                STR_x STR_d STR_i STR_g STR_i STR_t\n\n#define STRING_DEFINE                STR_D STR_E STR_F STR_I STR_N STR_E\n#define STRING_VERSION               STR_V STR_E STR_R STR_S STR_I STR_O STR_N\n#define STRING_WEIRD_STARTWORD       STR_LEFT_SQUARE_BRACKET STR_COLON STR_LESS_THAN_SIGN STR_COLON STR_RIGHT_SQUARE_BRACKET STR_RIGHT_SQUARE_BRACKET\n#define STRING_WEIRD_ENDWORD         STR_LEFT_SQUARE_BRACKET STR_COLON STR_GREATER_THAN_SIGN STR_COLON STR_RIGHT_SQUARE_BRACKET STR_RIGHT_SQUARE_BRACKET\n\n#define STRING_CR_RIGHTPAR                STR_C STR_R STR_RIGHT_PARENTHESIS\n#define STRING_LF_RIGHTPAR                STR_L STR_F STR_RIGHT_PARENTHESIS\n#define STRING_CRLF_RIGHTPAR              STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS\n#define STRING_ANY_RIGHTPAR               STR_A STR_N STR_Y STR_RIGHT_PARENTHESIS\n#define STRING_ANYCRLF_RIGHTPAR           STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS\n#define STRING_NUL_RIGHTPAR               STR_N STR_U STR_L STR_RIGHT_PARENTHESIS\n#define STRING_BSR_ANYCRLF_RIGHTPAR       STR_B STR_S STR_R STR_UNDERSCORE STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS\n#define STRING_BSR_UNICODE_RIGHTPAR       STR_B STR_S STR_R STR_UNDERSCORE STR_U STR_N STR_I STR_C STR_O STR_D STR_E STR_RIGHT_PARENTHESIS\n#define STRING_UTF8_RIGHTPAR              STR_U STR_T STR_F STR_8 STR_RIGHT_PARENTHESIS\n#define STRING_UTF16_RIGHTPAR             STR_U STR_T STR_F STR_1 STR_6 STR_RIGHT_PARENTHESIS\n#define STRING_UTF32_RIGHTPAR             STR_U STR_T STR_F STR_3 STR_2 STR_RIGHT_PARENTHESIS\n#define STRING_UTF_RIGHTPAR               STR_U STR_T STR_F STR_RIGHT_PARENTHESIS\n#define STRING_UCP_RIGHTPAR               STR_U STR_C STR_P STR_RIGHT_PARENTHESIS\n#define STRING_NO_AUTO_POSSESS_RIGHTPAR   STR_N STR_O STR_UNDERSCORE STR_A STR_U STR_T STR_O STR_UNDERSCORE STR_P STR_O STR_S STR_S STR_E STR_S STR_S STR_RIGHT_PARENTHESIS\n#define STRING_NO_DOTSTAR_ANCHOR_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_D STR_O STR_T STR_S STR_T STR_A STR_R STR_UNDERSCORE STR_A STR_N STR_C STR_H STR_O STR_R STR_RIGHT_PARENTHESIS\n#define STRING_NO_JIT_RIGHTPAR            STR_N STR_O STR_UNDERSCORE STR_J STR_I STR_T STR_RIGHT_PARENTHESIS\n#define STRING_NO_START_OPT_RIGHTPAR      STR_N STR_O STR_UNDERSCORE STR_S STR_T STR_A STR_R STR_T STR_UNDERSCORE STR_O STR_P STR_T STR_RIGHT_PARENTHESIS\n#define STRING_NOTEMPTY_RIGHTPAR          STR_N STR_O STR_T STR_E STR_M STR_P STR_T STR_Y STR_RIGHT_PARENTHESIS\n#define STRING_NOTEMPTY_ATSTART_RIGHTPAR  STR_N STR_O STR_T STR_E STR_M STR_P STR_T STR_Y STR_UNDERSCORE STR_A STR_T STR_S STR_T STR_A STR_R STR_T STR_RIGHT_PARENTHESIS\n#define STRING_CASELESS_RESTRICT_RIGHTPAR STR_C STR_A STR_S STR_E STR_L STR_E STR_S STR_S STR_UNDERSCORE STR_R STR_E STR_S STR_T STR_R STR_I STR_C STR_T STR_RIGHT_PARENTHESIS\n#define STRING_TURKISH_CASING_RIGHTPAR    STR_T STR_U STR_R STR_K STR_I STR_S STR_H STR_UNDERSCORE STR_C STR_A STR_S STR_I STR_N STR_G STR_RIGHT_PARENTHESIS\n#define STRING_LIMIT_HEAP_EQ              STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_H STR_E STR_A STR_P STR_EQUALS_SIGN\n#define STRING_LIMIT_MATCH_EQ             STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_M STR_A STR_T STR_C STR_H STR_EQUALS_SIGN\n#define STRING_LIMIT_DEPTH_EQ             STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_D STR_E STR_P STR_T STR_H STR_EQUALS_SIGN\n#define STRING_LIMIT_RECURSION_EQ         STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_R STR_E STR_C STR_U STR_R STR_S STR_I STR_O STR_N STR_EQUALS_SIGN\n#define STRING_MARK                       STR_M STR_A STR_R STR_K\n\n#define STRING_bc                         STR_b STR_c\n#define STRING_bidiclass                  STR_b STR_i STR_d STR_i STR_c STR_l STR_a STR_s STR_s\n#define STRING_sc                         STR_s STR_c\n#define STRING_script                     STR_s STR_c STR_r STR_i STR_p STR_t\n#define STRING_scriptextensions           STR_s STR_c STR_r STR_i STR_p STR_t STR_e STR_x STR_t STR_e STR_n STR_s STR_i STR_o STR_n STR_s\n#define STRING_scx                        STR_s STR_c STR_x\n\n\n/* -------------------- End of character and string names -------------------*/\n\n/* -------------------- Definitions for compiled patterns -------------------*/\n\n/* Codes for different types of Unicode property. If these definitions are\nchanged, the autopossessifying table in pcre2_auto_possess.c must be updated to\nmatch. */\n\n#define PT_LAMP       0    /* L& - the union of Lu, Ll, Lt */\n#define PT_GC         1    /* Specified general characteristic (e.g. L) */\n#define PT_PC         2    /* Specified particular characteristic (e.g. Lu) */\n#define PT_SC         3    /* Script only (e.g. Han) */\n#define PT_SCX        4    /* Script extensions (includes SC) */\n#define PT_ALNUM      5    /* Alphanumeric - the union of L and N */\n#define PT_SPACE      6    /* Perl space - general category Z plus 9,10,12,13 */\n#define PT_PXSPACE    7    /* POSIX space - Z plus 9,10,11,12,13 */\n#define PT_WORD       8    /* Word - L, N, Mn, or Pc */\n#define PT_CLIST      9    /* Pseudo-property: match character list */\n#define PT_UCNC      10    /* Universal Character nameable character */\n#define PT_BIDICL    11    /* Specified bidi class */\n#define PT_BOOL      12    /* Boolean property */\n#define PT_ANY       13    /* Must be the last entry!\n                              Any property - matches all chars */\n#define PT_TABSIZE PT_ANY  /* Size of square table for autopossessify tests */\n\n/* The following special properties are used only in XCLASS items, when POSIX\nclasses are specified and PCRE2_UCP is set - in other words, for Unicode\nhandling of these classes. They are not available via the \\p or \\P escapes like\nthose in the above list, and so they do not take part in the autopossessifying\ntable. */\n\n#define PT_PXGRAPH   14    /* [:graph:] - characters that mark the paper */\n#define PT_PXPRINT   15    /* [:print:] - [:graph:] plus non-control spaces */\n#define PT_PXPUNCT   16    /* [:punct:] - punctuation characters */\n#define PT_PXXDIGIT  17    /* [:xdigit:] - hex digits */\n\n/* This value is used when parsing \\p and \\P escapes to indicate that neither\n\\p{script:...} nor \\p{scx:...} has been encountered. */\n\n#define PT_NOTSCRIPT 255\n\n/* Flag bits and data types for the extended class (OP_XCLASS) for classes that\ncontain characters with values greater than 255. */\n\n#define XCL_NOT      0x01  /* Flag: this is a negative class */\n#define XCL_MAP      0x02  /* Flag: a 32-byte map is present */\n#define XCL_HASPROP  0x04  /* Flag: property checks are present. */\n\n#define XCL_END      0     /* Marks end of individual items */\n#define XCL_SINGLE   1     /* Single item (one multibyte char) follows */\n#define XCL_RANGE    2     /* A range (two multibyte chars) follows */\n#define XCL_PROP     3     /* Unicode property (2-byte property code follows) */\n#define XCL_NOTPROP  4     /* Unicode inverted property (ditto) */\n/* This value represents the beginning of character lists. The value\nis 16 bit long, and stored as a high and low byte pair in 8 bit mode.\nThe lower 12 bit contains information about character lists (see later). */\n#define XCL_LIST     (sizeof(PCRE2_UCHAR) == 1 ? 0x10 : 0x1000)\n\n/* When a character class contains many characters/ranges,\nthey are stored in character lists. There are four character\nlists which contain characters/ranges within a given range.\n\nThe name, character range and item size for each list:\nLow16    [0x100 - 0x7fff]            16 bit items\nHigh16   [0x8000 - 0xffff]           16 bit items\nLow32    [0x10000 - 0x7fffffff]      32 bit items\nHigh32   [0x80000000 - 0xffffffff]   32 bit items\n\nThe Low32 character list is used only when utf encoding or 32 bit\ncharacter width is enabled, and the High32 character is used only\nwhen 32 bit character width is enabled.\n\nEach character list contain items. The lowest bit represents that\nan item is the beginning of a range (bit is cleared), or not (bit\nis set). The other bits represent the character shifted left by\none, so its highest bit is discarded. Due to the layout of character\nlists, the highest bit of a character is always known:\n\nLow16 and Low32: the highest bit is always zero\nHigh16 and High32: the highest bit is always one\n\nThe items are ordered in increasing order, so binary search can be\nused to find the lower bound of an input character. The lower bound\nis the highest item, which value is less or equal than the input\ncharacter. If the lower bit of the item is cleared, or the character\nstored in the item equals to the input character, the input\ncharacter is in the character list. */\n\n/* Character list constants. */\n#define XCL_CHAR_LIST_LOW_16_START 0x100\n#define XCL_CHAR_LIST_LOW_16_END 0x7fff\n#define XCL_CHAR_LIST_LOW_16_ADD 0x0\n\n#define XCL_CHAR_LIST_HIGH_16_START 0x8000\n#define XCL_CHAR_LIST_HIGH_16_END 0xffff\n#define XCL_CHAR_LIST_HIGH_16_ADD 0x8000\n\n#define XCL_CHAR_LIST_LOW_32_START 0x10000\n#define XCL_CHAR_LIST_LOW_32_END 0x7fffffff\n#define XCL_CHAR_LIST_LOW_32_ADD 0x0\n\n#define XCL_CHAR_LIST_HIGH_32_START 0x80000000\n#define XCL_CHAR_LIST_HIGH_32_END 0xffffffff\n#define XCL_CHAR_LIST_HIGH_32_ADD 0x80000000\n\n/* Mask and length values for getting the descriptors of\nall character list ranges. The bit length of each descriptor\nis XCL_TYPE_BIT_LEN so the total size is 4*XCL_TYPE_BIT_LEN\n(currently 12 bit). This data is stored for all four character\nlists, even if no characters are present in a list. */\n#define XCL_TYPE_MASK 0xfff\n#define XCL_TYPE_BIT_LEN 3\n/* If this bit is set for a character class, the first item of the\ncharacter list is the end of a range, which started before the\nstarting character of the character list. If this bit is set, and\nno characters are present in the list, the whole character class\nis part of a range. E.g: [\\x{500}-\\x{12000}] covers the entire\n0x8000-0xffff range. */\n#define XCL_BEGIN_WITH_RANGE 0x4\n/* Number of items in the character list: 0, 1, or 2. The value 3\nrepresents that the item count is stored at the begining of the\ncharacter list. The item count has the same width as the items\nin the character list (e.g. 16 bit for Low16 and High16 lists). */\n#define XCL_ITEM_COUNT_MASK 0x3\n/* Shift and flag for constructing character list items. The XCL_CHAR_END\nis set, when the item is not the beginning of a range. The XCL_CHAR_SHIFT\ncan be used to encode / decode the character value stored in an item. */\n#define XCL_CHAR_END 0x1\n#define XCL_CHAR_SHIFT 1\n\n/* Flag bits for an extended class (OP_ECLASS), which is used for complex\ncharacter matches such as [\\p{Greek} && \\p{Ll}]. */\n\n#define ECL_MAP     0x01  /* Flag: a 32-byte map is present */\n\n/* Type tags for the items stored in an extended class (OP_ECLASS). These items\nfollow the OP_ECLASS's flag char and bitmap, and represent a Reverse Polish\nNotation list of operands and operators manipulating a stack of bits. */\n\n#define ECL_AND     1 /* Pop two from the stack, AND, and push result. */\n#define ECL_OR      2 /* Pop two from the stack, OR, and push result. */\n#define ECL_XOR     3 /* Pop two from the stack, XOR, and push result. */\n#define ECL_NOT     4 /* Pop one from the stack, NOT, and push result. */\n#define ECL_XCLASS  5 /* XCLASS nested within ECLASS; match and push result. */\n#define ECL_ANY     6 /* Temporary, only used during compilation. */\n#define ECL_NONE    7 /* Temporary, only used during compilation. */\n\n/* These are escaped items that aren't just an encoding of a particular data\nvalue such as \\n. They must have non-zero values, as check_escape() returns 0\nfor a data character. In the escapes[] table in pcre2_compile.c their values\nare negated in order to distinguish them from data values.\n\nThey must appear here in the same order as in the opcode definitions below, up\nto ESC_z. There's a dummy for OP_ALLANY because it corresponds to \".\" in DOTALL\nmode rather than an escape sequence. It is also used for [^] in JavaScript\ncompatibility mode, and for \\C in non-utf mode. In non-DOTALL mode, \".\" behaves\nlike \\N.\n\nESC_ub is a special return from check_escape() when, in BSUX mode, \\u{ is not\nfollowed by hex digits and }, in which case it should mean a literal \"u\"\nfollowed by a literal \"{\". This hack is necessary for cases like \\u{ 12}\nbecause without it, this is interpreted as u{12} now that spaces are allowed in\nquantifiers.\n\nNegative numbers are used to encode a backreference (\\1, \\2, \\3, etc.) in\ncheck_escape(). There are tests in the code for an escape greater than ESC_b\nand less than ESC_Z to detect the types that may be repeated. These are the\ntypes that consume characters. If any new escapes are put in between that don't\nconsume a character, that code will have to change. */\n\nenum { ESC_A = 1, ESC_G, ESC_K, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s,\n       ESC_W, ESC_w, ESC_N, ESC_dum, ESC_C, ESC_P, ESC_p, ESC_R, ESC_H,\n       ESC_h, ESC_V, ESC_v, ESC_X, ESC_Z, ESC_z,\n       ESC_E, ESC_Q, ESC_g, ESC_k, ESC_ub };\n\n\n/********************** Opcode definitions ******************/\n\n/****** NOTE NOTE NOTE ******\n\nStarting from 1 (i.e. after OP_END), the values up to OP_EOD must correspond in\norder to the list of escapes immediately above. Furthermore, values up to\nOP_DOLLM must not be changed without adjusting the table called autoposstab in\npcre2_auto_possess.c.\n\nWhenever this list is updated, the two macro definitions that follow must be\nupdated to match. The possessification table called \"opcode_possessify\" in\npcre2_compile.c must also be updated, and also the tables called \"coptable\"\nand \"poptable\" in pcre2_dfa_match.c.\n\n****** NOTE NOTE NOTE ******/\n\n\n/* The values between FIRST_AUTOTAB_OP and LAST_AUTOTAB_RIGHT_OP, inclusive,\nare used in a table for deciding whether a repeated character type can be\nauto-possessified. */\n\n#define FIRST_AUTOTAB_OP       OP_NOT_DIGIT\n#define LAST_AUTOTAB_LEFT_OP   OP_EXTUNI\n#define LAST_AUTOTAB_RIGHT_OP  OP_DOLLM\n\nenum {\n  OP_END,            /* 0 End of pattern */\n\n  /* Values corresponding to backslashed metacharacters */\n\n  OP_SOD,            /* 1 Start of data: \\A */\n  OP_SOM,            /* 2 Start of match (subject + offset): \\G */\n  OP_SET_SOM,        /* 3 Set start of match (\\K) */\n  OP_NOT_WORD_BOUNDARY,  /*  4 \\B -- see also OP_NOT_UCP_WORD_BOUNDARY */\n  OP_WORD_BOUNDARY,      /*  5 \\b -- see also OP_UCP_WORD_BOUNDARY */\n  OP_NOT_DIGIT,          /*  6 \\D */\n  OP_DIGIT,              /*  7 \\d */\n  OP_NOT_WHITESPACE,     /*  8 \\S */\n  OP_WHITESPACE,         /*  9 \\s */\n  OP_NOT_WORDCHAR,       /* 10 \\W */\n  OP_WORDCHAR,           /* 11 \\w */\n\n  OP_ANY,            /* 12 Match any character except newline (\\N) */\n  OP_ALLANY,         /* 13 Match any character */\n  OP_ANYBYTE,        /* 14 Match any byte (\\C); different to OP_ANY for UTF-8 */\n  OP_NOTPROP,        /* 15 \\P (not Unicode property) */\n  OP_PROP,           /* 16 \\p (Unicode property) */\n  OP_ANYNL,          /* 17 \\R (any newline sequence) */\n  OP_NOT_HSPACE,     /* 18 \\H (not horizontal whitespace) */\n  OP_HSPACE,         /* 19 \\h (horizontal whitespace) */\n  OP_NOT_VSPACE,     /* 20 \\V (not vertical whitespace) */\n  OP_VSPACE,         /* 21 \\v (vertical whitespace) */\n  OP_EXTUNI,         /* 22 \\X (extended Unicode sequence */\n  OP_EODN,           /* 23 End of data or \\n at end of data (\\Z) */\n  OP_EOD,            /* 24 End of data (\\z) */\n\n  /* Line end assertions */\n\n  OP_DOLL,           /* 25 End of line - not multiline */\n  OP_DOLLM,          /* 26 End of line - multiline */\n  OP_CIRC,           /* 27 Start of line - not multiline */\n  OP_CIRCM,          /* 28 Start of line - multiline */\n\n  /* Single characters; caseful must precede the caseless ones, and these\n  must remain in this order, and adjacent. */\n\n  OP_CHAR,           /* 29 Match one character, casefully */\n  OP_CHARI,          /* 30 Match one character, caselessly */\n  OP_NOT,            /* 31 Match one character, not the given one, casefully */\n  OP_NOTI,           /* 32 Match one character, not the given one, caselessly */\n\n  /* The following sets of 13 opcodes must always be kept in step because\n  the offset from the first one is used to generate the others. */\n\n  /* Repeated characters; caseful must precede the caseless ones */\n\n  OP_STAR,           /* 33 The maximizing and minimizing versions of */\n  OP_MINSTAR,        /* 34 these six opcodes must come in pairs, with */\n  OP_PLUS,           /* 35 the minimizing one second. */\n  OP_MINPLUS,        /* 36 */\n  OP_QUERY,          /* 37 */\n  OP_MINQUERY,       /* 38 */\n\n  OP_UPTO,           /* 39 From 0 to n matches of one character, caseful*/\n  OP_MINUPTO,        /* 40 */\n  OP_EXACT,          /* 41 Exactly n matches */\n\n  OP_POSSTAR,        /* 42 Possessified star, caseful */\n  OP_POSPLUS,        /* 43 Possessified plus, caseful */\n  OP_POSQUERY,       /* 44 Posesssified query, caseful */\n  OP_POSUPTO,        /* 45 Possessified upto, caseful */\n\n  /* Repeated characters; caseless must follow the caseful ones */\n\n  OP_STARI,          /* 46 */\n  OP_MINSTARI,       /* 47 */\n  OP_PLUSI,          /* 48 */\n  OP_MINPLUSI,       /* 49 */\n  OP_QUERYI,         /* 50 */\n  OP_MINQUERYI,      /* 51 */\n\n  OP_UPTOI,          /* 52 From 0 to n matches of one character, caseless */\n  OP_MINUPTOI,       /* 53 */\n  OP_EXACTI,         /* 54 */\n\n  OP_POSSTARI,       /* 55 Possessified star, caseless */\n  OP_POSPLUSI,       /* 56 Possessified plus, caseless */\n  OP_POSQUERYI,      /* 57 Posesssified query, caseless */\n  OP_POSUPTOI,       /* 58 Possessified upto, caseless */\n\n  /* The negated ones must follow the non-negated ones, and match them */\n  /* Negated repeated character, caseful; must precede the caseless ones */\n\n  OP_NOTSTAR,        /* 59 The maximizing and minimizing versions of */\n  OP_NOTMINSTAR,     /* 60 these six opcodes must come in pairs, with */\n  OP_NOTPLUS,        /* 61 the minimizing one second. They must be in */\n  OP_NOTMINPLUS,     /* 62 exactly the same order as those above. */\n  OP_NOTQUERY,       /* 63 */\n  OP_NOTMINQUERY,    /* 64 */\n\n  OP_NOTUPTO,        /* 65 From 0 to n matches, caseful */\n  OP_NOTMINUPTO,     /* 66 */\n  OP_NOTEXACT,       /* 67 Exactly n matches */\n\n  OP_NOTPOSSTAR,     /* 68 Possessified versions, caseful */\n  OP_NOTPOSPLUS,     /* 69 */\n  OP_NOTPOSQUERY,    /* 70 */\n  OP_NOTPOSUPTO,     /* 71 */\n\n  /* Negated repeated character, caseless; must follow the caseful ones */\n\n  OP_NOTSTARI,       /* 72 */\n  OP_NOTMINSTARI,    /* 73 */\n  OP_NOTPLUSI,       /* 74 */\n  OP_NOTMINPLUSI,    /* 75 */\n  OP_NOTQUERYI,      /* 76 */\n  OP_NOTMINQUERYI,   /* 77 */\n\n  OP_NOTUPTOI,       /* 78 From 0 to n matches, caseless */\n  OP_NOTMINUPTOI,    /* 79 */\n  OP_NOTEXACTI,      /* 80 Exactly n matches */\n\n  OP_NOTPOSSTARI,    /* 81 Possessified versions, caseless */\n  OP_NOTPOSPLUSI,    /* 82 */\n  OP_NOTPOSQUERYI,   /* 83 */\n  OP_NOTPOSUPTOI,    /* 84 */\n\n  /* Character types */\n\n  OP_TYPESTAR,       /* 85 The maximizing and minimizing versions of */\n  OP_TYPEMINSTAR,    /* 86 these six opcodes must come in pairs, with */\n  OP_TYPEPLUS,       /* 87 the minimizing one second. These codes must */\n  OP_TYPEMINPLUS,    /* 88 be in exactly the same order as those above. */\n  OP_TYPEQUERY,      /* 89 */\n  OP_TYPEMINQUERY,   /* 90 */\n\n  OP_TYPEUPTO,       /* 91 From 0 to n matches */\n  OP_TYPEMINUPTO,    /* 92 */\n  OP_TYPEEXACT,      /* 93 Exactly n matches */\n\n  OP_TYPEPOSSTAR,    /* 94 Possessified versions */\n  OP_TYPEPOSPLUS,    /* 95 */\n  OP_TYPEPOSQUERY,   /* 96 */\n  OP_TYPEPOSUPTO,    /* 97 */\n\n  /* These are used for character classes and back references; only the\n  first six are the same as the sets above. */\n\n  OP_CRSTAR,         /* 98 The maximizing and minimizing versions of */\n  OP_CRMINSTAR,      /* 99 all these opcodes must come in pairs, with */\n  OP_CRPLUS,         /* 100 the minimizing one second. These codes must */\n  OP_CRMINPLUS,      /* 101 be in exactly the same order as those above. */\n  OP_CRQUERY,        /* 102 */\n  OP_CRMINQUERY,     /* 103 */\n\n  OP_CRRANGE,        /* 104 These are different to the three sets above. */\n  OP_CRMINRANGE,     /* 105 */\n\n  OP_CRPOSSTAR,      /* 106 Possessified versions */\n  OP_CRPOSPLUS,      /* 107 */\n  OP_CRPOSQUERY,     /* 108 */\n  OP_CRPOSRANGE,     /* 109 */\n\n  /* End of quantifier opcodes */\n\n  OP_CLASS,          /* 110 Match a character class, chars < 256 only */\n  OP_NCLASS,         /* 111 Same, but the bitmap was created from a negative\n                              class - the difference is relevant only when a\n                              character > 255 is encountered. */\n  OP_XCLASS,         /* 112 Extended class for handling > 255 chars within the\n                              class. This does both positive and negative. */\n  OP_ECLASS,         /* 113 Really-extended class, for handling logical\n                              expressions computed over characters. */\n  OP_REF,            /* 114 Match a back reference, casefully */\n  OP_REFI,           /* 115 Match a back reference, caselessly */\n  OP_DNREF,          /* 116 Match a duplicate name backref, casefully */\n  OP_DNREFI,         /* 117 Match a duplicate name backref, caselessly */\n  OP_RECURSE,        /* 118 Match a numbered subpattern (possibly recursive) */\n  OP_CALLOUT,        /* 119 Call out to external function if provided */\n  OP_CALLOUT_STR,    /* 120 Call out with string argument */\n\n  OP_ALT,            /* 121 Start of alternation */\n  OP_KET,            /* 122 End of group that doesn't have an unbounded repeat */\n  OP_KETRMAX,        /* 123 These two must remain together and in this */\n  OP_KETRMIN,        /* 124 order. They are for groups the repeat for ever. */\n  OP_KETRPOS,        /* 125 Possessive unlimited repeat. */\n\n  /* The assertions must come before BRA, CBRA, ONCE, and COND. */\n\n  OP_REVERSE,        /* 126 Move pointer back - used in lookbehind assertions */\n  OP_VREVERSE,       /* 127 Move pointer back - variable */\n  OP_ASSERT,         /* 128 Positive lookahead */\n  OP_ASSERT_NOT,     /* 129 Negative lookahead */\n  OP_ASSERTBACK,     /* 130 Positive lookbehind */\n  OP_ASSERTBACK_NOT, /* 131 Negative lookbehind */\n  OP_ASSERT_NA,      /* 132 Positive non-atomic lookahead */\n  OP_ASSERTBACK_NA,  /* 133 Positive non-atomic lookbehind */\n  OP_ASSERT_SCS,     /* 134 Scan substring */\n\n  /* ONCE, SCRIPT_RUN, BRA, BRAPOS, CBRA, CBRAPOS, and COND must come\n  immediately after the assertions, with ONCE first, as there's a test for >=\n  ONCE for a subpattern that isn't an assertion. The POS versions must\n  immediately follow the non-POS versions in each case. */\n\n  OP_ONCE,           /* 135 Atomic group, contains captures */\n  OP_SCRIPT_RUN,     /* 136 Non-capture, but check characters' scripts */\n  OP_BRA,            /* 137 Start of non-capturing bracket */\n  OP_BRAPOS,         /* 138 Ditto, with unlimited, possessive repeat */\n  OP_CBRA,           /* 139 Start of capturing bracket */\n  OP_CBRAPOS,        /* 140 Ditto, with unlimited, possessive repeat */\n  OP_COND,           /* 141 Conditional group */\n\n  /* These five must follow the previous five, in the same order. There's a\n  check for >= SBRA to distinguish the two sets. */\n\n  OP_SBRA,           /* 142 Start of non-capturing bracket, check empty  */\n  OP_SBRAPOS,        /* 143 Ditto, with unlimited, possessive repeat */\n  OP_SCBRA,          /* 144 Start of capturing bracket, check empty */\n  OP_SCBRAPOS,       /* 145 Ditto, with unlimited, possessive repeat */\n  OP_SCOND,          /* 146 Conditional group, check empty */\n\n  /* The next two pairs must (respectively) be kept together. */\n\n  OP_CREF,           /* 147 Used to hold a capture number as condition */\n  OP_DNCREF,         /* 148 Used to point to duplicate names as a condition */\n  OP_RREF,           /* 149 Used to hold a recursion number as condition */\n  OP_DNRREF,         /* 150 Used to point to duplicate names as a condition */\n  OP_FALSE,          /* 151 Always false (used by DEFINE and VERSION) */\n  OP_TRUE,           /* 152 Always true (used by VERSION) */\n\n  OP_BRAZERO,        /* 153 These two must remain together and in this */\n  OP_BRAMINZERO,     /* 154 order. */\n  OP_BRAPOSZERO,     /* 155 */\n\n  /* These are backtracking control verbs */\n\n  OP_MARK,           /* 156 always has an argument */\n  OP_PRUNE,          /* 157 */\n  OP_PRUNE_ARG,      /* 158 same, but with argument */\n  OP_SKIP,           /* 159 */\n  OP_SKIP_ARG,       /* 160 same, but with argument */\n  OP_THEN,           /* 161 */\n  OP_THEN_ARG,       /* 162 same, but with argument */\n  OP_COMMIT,         /* 163 */\n  OP_COMMIT_ARG,     /* 164 same, but with argument */\n\n  /* These are forced failure and success verbs. FAIL and ACCEPT do accept an\n  argument, but these cases can be compiled as, for example, (*MARK:X)(*FAIL)\n  without the need for a special opcode. */\n\n  OP_FAIL,           /* 165 */\n  OP_ACCEPT,         /* 166 */\n  OP_ASSERT_ACCEPT,  /* 167 Used inside assertions */\n  OP_CLOSE,          /* 168 Used before OP_ACCEPT to close open captures */\n\n  /* This is used to skip a subpattern with a {0} quantifier */\n\n  OP_SKIPZERO,       /* 169 */\n\n  /* This is used to identify a DEFINE group during compilation so that it can\n  be checked for having only one branch. It is changed to OP_FALSE before\n  compilation finishes. */\n\n  OP_DEFINE,         /* 170 */\n\n  /* These opcodes replace their normal counterparts in UCP mode when\n  PCRE2_EXTRA_ASCII_BSW is not set. */\n\n  OP_NOT_UCP_WORD_BOUNDARY, /* 171 */\n  OP_UCP_WORD_BOUNDARY,     /* 172 */\n\n  /* This is not an opcode, but is used to check that tables indexed by opcode\n  are the correct length, in order to catch updating errors - there have been\n  some in the past. */\n\n  OP_TABLE_LENGTH\n\n};\n\n/* *** NOTE NOTE NOTE *** Whenever the list above is updated, the two macro\ndefinitions that follow must also be updated to match. There are also tables\ncalled \"opcode_possessify\" in pcre2_compile.c and \"coptable\" and \"poptable\" in\npcre2_dfa_match.c that must be updated. */\n\n\n/* This macro defines textual names for all the opcodes. These are used only\nfor debugging, and some of them are only partial names. The macro is referenced\nonly in pcre2_printint_inc.h, which fills out the full names in many cases (and in\nsome cases doesn't actually use these names at all). */\n\n#define OP_NAME_LIST \\\n  \"End\", \"\\\\A\", \"\\\\G\", \"\\\\K\", \"\\\\B\", \"\\\\b\", \"\\\\D\", \"\\\\d\",         \\\n  \"\\\\S\", \"\\\\s\", \"\\\\W\", \"\\\\w\", \"Any\", \"AllAny\", \"Anybyte\",         \\\n  \"notprop\", \"prop\", \"\\\\R\", \"\\\\H\", \"\\\\h\", \"\\\\V\", \"\\\\v\",           \\\n  \"extuni\",  \"\\\\Z\", \"\\\\z\",                                        \\\n  \"$\", \"$\", \"^\", \"^\", \"char\", \"chari\", \"not\", \"noti\",             \\\n  \"*\", \"*?\", \"+\", \"+?\", \"?\", \"??\",                                \\\n  \"{\", \"{\", \"{\",                                                  \\\n  \"*+\",\"++\", \"?+\", \"{\",                                           \\\n  \"*\", \"*?\", \"+\", \"+?\", \"?\", \"??\",                                \\\n  \"{\", \"{\", \"{\",                                                  \\\n  \"*+\",\"++\", \"?+\", \"{\",                                           \\\n  \"*\", \"*?\", \"+\", \"+?\", \"?\", \"??\",                                \\\n  \"{\", \"{\", \"{\",                                                  \\\n  \"*+\",\"++\", \"?+\", \"{\",                                           \\\n  \"*\", \"*?\", \"+\", \"+?\", \"?\", \"??\",                                \\\n  \"{\", \"{\", \"{\",                                                  \\\n  \"*+\",\"++\", \"?+\", \"{\",                                           \\\n  \"*\", \"*?\", \"+\", \"+?\", \"?\", \"??\", \"{\", \"{\", \"{\",                 \\\n  \"*+\",\"++\", \"?+\", \"{\",                                           \\\n  \"*\", \"*?\", \"+\", \"+?\", \"?\", \"??\", \"{\", \"{\",                      \\\n  \"*+\",\"++\", \"?+\", \"{\",                                           \\\n  \"class\", \"nclass\", \"xclass\", \"eclass\",                          \\\n  \"Ref\", \"Refi\", \"DnRef\", \"DnRefi\",                               \\\n  \"Recurse\", \"Callout\", \"CalloutStr\",                             \\\n  \"Alt\", \"Ket\", \"KetRmax\", \"KetRmin\", \"KetRpos\",                  \\\n  \"Reverse\", \"VReverse\", \"Assert\", \"Assert not\",                  \\\n  \"Assert back\", \"Assert back not\",                               \\\n  \"Non-atomic assert\", \"Non-atomic assert back\",                  \\\n  \"Scan substring\",                                               \\\n  \"Once\",                                                         \\\n  \"Script run\",                                                   \\\n  \"Bra\", \"BraPos\", \"CBra\", \"CBraPos\",                             \\\n  \"Cond\",                                                         \\\n  \"SBra\", \"SBraPos\", \"SCBra\", \"SCBraPos\",                         \\\n  \"SCond\",                                                        \\\n  \"Capture ref\", \"Capture dnref\", \"Cond rec\", \"Cond dnrec\",       \\\n  \"Cond false\", \"Cond true\",                                      \\\n  \"Brazero\", \"Braminzero\", \"Braposzero\",                          \\\n  \"*MARK\", \"*PRUNE\", \"*PRUNE\", \"*SKIP\", \"*SKIP\",                  \\\n  \"*THEN\", \"*THEN\", \"*COMMIT\", \"*COMMIT\", \"*FAIL\",                \\\n  \"*ACCEPT\", \"*ASSERT_ACCEPT\",                                    \\\n  \"Close\", \"Skip zero\", \"Define\", \"\\\\B (ucp)\", \"\\\\b (ucp)\"\n\n\n/* This macro defines the length of fixed length operations in the compiled\nregex. The lengths are used when searching for specific things, and also in the\ndebugging printing of a compiled regex. We use a macro so that it can be\ndefined close to the definitions of the opcodes themselves.\n\nAs things have been extended, some of these are no longer fixed lenths, but are\nminima instead. For example, the length of a single-character repeat may vary\nin UTF-8 mode. The code that uses this table must know about such things. */\n\n#define OP_LENGTHS \\\n  1,                             /* End                                    */ \\\n  1, 1, 1, 1, 1,                 /* \\A, \\G, \\K, \\B, \\b                     */ \\\n  1, 1, 1, 1, 1, 1,              /* \\D, \\d, \\S, \\s, \\W, \\w                 */ \\\n  1, 1, 1,                       /* Any, AllAny, Anybyte                   */ \\\n  3, 3,                          /* \\P, \\p                                 */ \\\n  1, 1, 1, 1, 1,                 /* \\R, \\H, \\h, \\V, \\v                     */ \\\n  1,                             /* \\X                                     */ \\\n  1, 1, 1, 1, 1, 1,              /* \\Z, \\z, $, $M ^, ^M                    */ \\\n  2,                             /* Char  - the minimum length             */ \\\n  2,                             /* Chari  - the minimum length            */ \\\n  2,                             /* not                                    */ \\\n  2,                             /* noti                                   */ \\\n  /* Positive single-char repeats                             ** These are */ \\\n  2, 2, 2, 2, 2, 2,              /* *, *?, +, +?, ?, ??       ** minima in */ \\\n  2+IMM2_SIZE, 2+IMM2_SIZE,      /* upto, minupto             ** mode      */ \\\n  2+IMM2_SIZE,                   /* exact                                  */ \\\n  2, 2, 2, 2+IMM2_SIZE,          /* *+, ++, ?+, upto+                      */ \\\n  2, 2, 2, 2, 2, 2,              /* *I, *?I, +I, +?I, ?I, ??I ** UTF-8     */ \\\n  2+IMM2_SIZE, 2+IMM2_SIZE,      /* upto I, minupto I                      */ \\\n  2+IMM2_SIZE,                   /* exact I                                */ \\\n  2, 2, 2, 2+IMM2_SIZE,          /* *+I, ++I, ?+I, upto+I                  */ \\\n  /* Negative single-char repeats - only for chars < 256                   */ \\\n  2, 2, 2, 2, 2, 2,              /* NOT *, *?, +, +?, ?, ??                */ \\\n  2+IMM2_SIZE, 2+IMM2_SIZE,      /* NOT upto, minupto                      */ \\\n  2+IMM2_SIZE,                   /* NOT exact                              */ \\\n  2, 2, 2, 2+IMM2_SIZE,          /* Possessive NOT *, +, ?, upto           */ \\\n  2, 2, 2, 2, 2, 2,              /* NOT *I, *?I, +I, +?I, ?I, ??I          */ \\\n  2+IMM2_SIZE, 2+IMM2_SIZE,      /* NOT upto I, minupto I                  */ \\\n  2+IMM2_SIZE,                   /* NOT exact I                            */ \\\n  2, 2, 2, 2+IMM2_SIZE,          /* Possessive NOT *I, +I, ?I, upto I      */ \\\n  /* Positive type repeats                                                 */ \\\n  2, 2, 2, 2, 2, 2,              /* Type *, *?, +, +?, ?, ??               */ \\\n  2+IMM2_SIZE, 2+IMM2_SIZE,      /* Type upto, minupto                     */ \\\n  2+IMM2_SIZE,                   /* Type exact                             */ \\\n  2, 2, 2, 2+IMM2_SIZE,          /* Possessive *+, ++, ?+, upto+           */ \\\n  /* Character class & ref repeats                                         */ \\\n  1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */ \\\n  1+2*IMM2_SIZE, 1+2*IMM2_SIZE,  /* CRRANGE, CRMINRANGE                    */ \\\n  1, 1, 1, 1+2*IMM2_SIZE,        /* Possessive *+, ++, ?+, CRPOSRANGE      */ \\\n  1+(32/sizeof(PCRE2_UCHAR)),    /* CLASS                                  */ \\\n  1+(32/sizeof(PCRE2_UCHAR)),    /* NCLASS                                 */ \\\n  0,                             /* XCLASS - variable length               */ \\\n  0,                             /* ECLASS - variable length               */ \\\n  1+IMM2_SIZE,                   /* REF                                    */ \\\n  1+IMM2_SIZE+1,                 /* REFI                                   */ \\\n  1+2*IMM2_SIZE,                 /* DNREF                                  */ \\\n  1+2*IMM2_SIZE+1,               /* DNREFI                                 */ \\\n  1+LINK_SIZE,                   /* RECURSE                                */ \\\n  1+2*LINK_SIZE+1,               /* CALLOUT                                */ \\\n  0,                             /* CALLOUT_STR - variable length          */ \\\n  1+LINK_SIZE,                   /* Alt                                    */ \\\n  1+LINK_SIZE,                   /* Ket                                    */ \\\n  1+LINK_SIZE,                   /* KetRmax                                */ \\\n  1+LINK_SIZE,                   /* KetRmin                                */ \\\n  1+LINK_SIZE,                   /* KetRpos                                */ \\\n  1+IMM2_SIZE,                   /* Reverse                                */ \\\n  1+2*IMM2_SIZE,                 /* VReverse                               */ \\\n  1+LINK_SIZE,                   /* Assert                                 */ \\\n  1+LINK_SIZE,                   /* Assert not                             */ \\\n  1+LINK_SIZE,                   /* Assert behind                          */ \\\n  1+LINK_SIZE,                   /* Assert behind not                      */ \\\n  1+LINK_SIZE,                   /* NA Assert                              */ \\\n  1+LINK_SIZE,                   /* NA Assert behind                       */ \\\n  1+LINK_SIZE,                   /* Scan substring                         */ \\\n  1+LINK_SIZE,                   /* ONCE                                   */ \\\n  1+LINK_SIZE,                   /* SCRIPT_RUN                             */ \\\n  1+LINK_SIZE,                   /* BRA                                    */ \\\n  1+LINK_SIZE,                   /* BRAPOS                                 */ \\\n  1+LINK_SIZE+IMM2_SIZE,         /* CBRA                                   */ \\\n  1+LINK_SIZE+IMM2_SIZE,         /* CBRAPOS                                */ \\\n  1+LINK_SIZE,                   /* COND                                   */ \\\n  1+LINK_SIZE,                   /* SBRA                                   */ \\\n  1+LINK_SIZE,                   /* SBRAPOS                                */ \\\n  1+LINK_SIZE+IMM2_SIZE,         /* SCBRA                                  */ \\\n  1+LINK_SIZE+IMM2_SIZE,         /* SCBRAPOS                               */ \\\n  1+LINK_SIZE,                   /* SCOND                                  */ \\\n  1+IMM2_SIZE, 1+2*IMM2_SIZE,    /* CREF, DNCREF                           */ \\\n  1+IMM2_SIZE, 1+2*IMM2_SIZE,    /* RREF, DNRREF                           */ \\\n  1, 1,                          /* FALSE, TRUE                            */ \\\n  1, 1, 1,                       /* BRAZERO, BRAMINZERO, BRAPOSZERO        */ \\\n  3, 1, 3,                       /* MARK, PRUNE, PRUNE_ARG                 */ \\\n  1, 3,                          /* SKIP, SKIP_ARG                         */ \\\n  1, 3,                          /* THEN, THEN_ARG                         */ \\\n  1, 3,                          /* COMMIT, COMMIT_ARG                     */ \\\n  1, 1, 1,                       /* FAIL, ACCEPT, ASSERT_ACCEPT            */ \\\n  1+IMM2_SIZE, 1,                /* CLOSE, SKIPZERO                        */ \\\n  1,                             /* DEFINE                                 */ \\\n  1, 1                           /* \\B and \\b in UCP mode                  */\n\n/* A magic value for OP_RREF to indicate the \"any recursion\" condition. */\n\n#define RREF_ANY  0xffff\n\n/* Constants used by OP_REFI and OP_DNREFI to control matching behaviour. */\n\n#define REFI_FLAG_CASELESS_RESTRICT  0x1\n#define REFI_FLAG_TURKISH_CASING     0x2\n\n\n/* ---------- Private structures that are mode-independent. ---------- */\n\n/* Structure to hold data for custom memory management. */\n\ntypedef struct pcre2_memctl {\n  void *    (*malloc)(size_t, void *);\n  void      (*free)(void *, void *);\n  void      *memory_data;\n} pcre2_memctl;\n\n/* Structure for building a chain of open capturing subpatterns during\ncompiling, so that instructions to close them can be compiled when (*ACCEPT) is\nencountered. */\n\ntypedef struct open_capitem {\n  struct open_capitem *next;    /* Chain link */\n  uint16_t number;              /* Capture number */\n  uint16_t assert_depth;        /* Assertion depth when opened */\n} open_capitem;\n\n/* Layout of the UCP type table that translates property names into types and\ncodes. Each entry used to point directly to a name, but to reduce the number of\nrelocations in shared libraries, it now has an offset into a single string\ninstead. */\n\ntypedef struct {\n  uint16_t name_offset;\n  uint16_t type;\n  uint16_t value;\n} ucp_type_table;\n\n/* Unicode character database (UCD) record format */\n\ntypedef struct {\n  uint8_t script;     /* ucp_Arabic, etc. */\n  uint8_t chartype;   /* ucp_Cc, etc. (general categories) */\n  uint8_t gbprop;     /* ucp_gbControl, etc. (grapheme break property) */\n  uint8_t caseset;    /* offset to multichar other cases or zero */\n  int32_t other_case; /* offset to other case, or zero if none */\n  uint16_t scriptx_bidiclass; /* script extension (11 bit) and bidi class (5 bit) values */\n  uint16_t bprops;    /* binary properties offset */\n} ucd_record;\n\n/* UCD access macros */\n\n#define UCD_BLOCK_SIZE 128\n#define REAL_GET_UCD(ch) (PRIV(ucd_records) + \\\n        PRIV(ucd_stage2)[PRIV(ucd_stage1)[(int)(ch) / UCD_BLOCK_SIZE] * \\\n        UCD_BLOCK_SIZE + (int)(ch) % UCD_BLOCK_SIZE])\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\n#define GET_UCD(ch) ((ch > MAX_UTF_CODE_POINT)? \\\n  PRIV(dummy_ucd_record) : REAL_GET_UCD(ch))\n#else\n#define GET_UCD(ch) REAL_GET_UCD(ch)\n#endif\n\n#define UCD_SCRIPTX_MASK 0x3ff\n#define UCD_BIDICLASS_SHIFT 11\n#define UCD_BPROPS_MASK 0xfff\n\n#define UCD_SCRIPTX_PROP(prop) ((prop)->scriptx_bidiclass & UCD_SCRIPTX_MASK)\n#define UCD_BIDICLASS_PROP(prop) ((prop)->scriptx_bidiclass >> UCD_BIDICLASS_SHIFT)\n#define UCD_BPROPS_PROP(prop) ((prop)->bprops & UCD_BPROPS_MASK)\n\n#define UCD_CHARTYPE(ch)    GET_UCD(ch)->chartype\n#define UCD_SCRIPT(ch)      GET_UCD(ch)->script\n#define UCD_CATEGORY(ch)    PRIV(ucp_gentype)[UCD_CHARTYPE(ch)]\n#define UCD_GRAPHBREAK(ch)  GET_UCD(ch)->gbprop\n#define UCD_CASESET(ch)     GET_UCD(ch)->caseset\n#define UCD_OTHERCASE(ch)   ((uint32_t)((int)ch + (int)(GET_UCD(ch)->other_case)))\n#define UCD_SCRIPTX(ch)     UCD_SCRIPTX_PROP(GET_UCD(ch))\n#define UCD_BPROPS(ch)      UCD_BPROPS_PROP(GET_UCD(ch))\n#define UCD_BIDICLASS(ch)   UCD_BIDICLASS_PROP(GET_UCD(ch))\n#define UCD_ANY_I(ch) \\\n  /* match any of the four characters 'i', 'I', U+0130, U+0131 */ \\\n  (((uint32_t)(ch) | 0x20u) == 0x69u || ((uint32_t)(ch) | 1u) == 0x0131u)\n#define UCD_DOTTED_I(ch) \\\n  ((uint32_t)(ch) == 0x69u || (uint32_t)(ch) == 0x0130u)\n#define UCD_FOLD_I_TURKISH(ch) \\\n  ((uint32_t)(ch) == 0x0130u ?   0x69u : \\\n   (uint32_t)(ch) ==   0x49u ? 0x0131u : (uint32_t)(ch))\n\n/* The \"scriptx\" and bprops fields contain offsets into vectors of 32-bit words\nthat form a bitmap representing a list of scripts or boolean properties. These\nmacros test or set a bit in the map by number. */\n\n#define MAPBIT(map,n) ((map)[(n)/32]&(1u<<((n)%32)))\n#define MAPSET(map,n) ((map)[(n)/32]|=(1u<<((n)%32)))\n\n/* Header for serialized pcre2 codes. */\n\ntypedef struct pcre2_serialized_data {\n  uint32_t magic;\n  uint32_t version;\n  uint32_t config;\n  int32_t  number_of_codes;\n} pcre2_serialized_data;\n\n\n\n/* ----------------- Items that need PCRE2_CODE_UNIT_WIDTH ----------------- */\n\n/* When this file is included by pcre2test, PCRE2_CODE_UNIT_WIDTH is defined as\n0, so the following items are omitted. */\n\n#if defined PCRE2_CODE_UNIT_WIDTH && PCRE2_CODE_UNIT_WIDTH != 0\n\n/* EBCDIC is supported only for the 8-bit library. */\n\n#if defined EBCDIC && PCRE2_CODE_UNIT_WIDTH != 8\n#error EBCDIC is not supported for the 16-bit or 32-bit libraries\n#endif\n\n/* This is the largest non-UTF code point. */\n\n#define MAX_NON_UTF_CHAR (0xffffffffU >> (32 - PCRE2_CODE_UNIT_WIDTH))\n\n/* Internal shared data tables and variables. These are used by more than one\nof the exported public functions. They have to be \"external\" in the C sense,\nbut are not part of the PCRE2 public API. Although the data for some of them is\nidentical in all libraries, they must have different names so that multiple\nlibraries can be simultaneously linked to a single application. However, UTF-8\ntables are needed only when compiling the 8-bit library. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nextern const int              PRIV(utf8_table1)[];\nextern const unsigned         PRIV(utf8_table1_size);\nextern const int              PRIV(utf8_table2)[];\nextern const int              PRIV(utf8_table3)[];\nextern const uint8_t          PRIV(utf8_table4)[];\n#endif\n\n#define _pcre2_OP_lengths              PCRE2_SUFFIX(_pcre2_OP_lengths_)\n#define _pcre2_callout_end_delims      PCRE2_SUFFIX(_pcre2_callout_end_delims_)\n#define _pcre2_callout_start_delims    PCRE2_SUFFIX(_pcre2_callout_start_delims_)\n#define _pcre2_default_compile_context PCRE2_SUFFIX(_pcre2_default_compile_context_)\n#define _pcre2_default_convert_context PCRE2_SUFFIX(_pcre2_default_convert_context_)\n#define _pcre2_default_match_context   PCRE2_SUFFIX(_pcre2_default_match_context_)\n#define _pcre2_default_tables          PCRE2_SUFFIX(_pcre2_default_tables_)\n#if PCRE2_CODE_UNIT_WIDTH == 32\n#define _pcre2_dummy_ucd_record        PCRE2_SUFFIX(_pcre2_dummy_ucd_record_)\n#endif\n#define _pcre2_hspace_list             PCRE2_SUFFIX(_pcre2_hspace_list_)\n#define _pcre2_vspace_list             PCRE2_SUFFIX(_pcre2_vspace_list_)\n#define _pcre2_ucd_boolprop_sets       PCRE2_SUFFIX(_pcre2_ucd_boolprop_sets_)\n#define _pcre2_ucd_caseless_sets       PCRE2_SUFFIX(_pcre2_ucd_caseless_sets_)\n#define _pcre2_ucd_turkish_dotted_i_caseset  PCRE2_SUFFIX(_pcre2_ucd_turkish_dotted_i_caseset_)\n#define _pcre2_ucd_nocase_ranges       PCRE2_SUFFIX(_pcre2_ucd_nocase_ranges_)\n#define _pcre2_ucd_nocase_ranges_size  PCRE2_SUFFIX(_pcre2_ucd_nocase_ranges_size_)\n#define _pcre2_ucd_digit_sets          PCRE2_SUFFIX(_pcre2_ucd_digit_sets_)\n#define _pcre2_ucd_script_sets         PCRE2_SUFFIX(_pcre2_ucd_script_sets_)\n#define _pcre2_ucd_records             PCRE2_SUFFIX(_pcre2_ucd_records_)\n#define _pcre2_ucd_stage1              PCRE2_SUFFIX(_pcre2_ucd_stage1_)\n#define _pcre2_ucd_stage2              PCRE2_SUFFIX(_pcre2_ucd_stage2_)\n#define _pcre2_ucp_gbtable             PCRE2_SUFFIX(_pcre2_ucp_gbtable_)\n#define _pcre2_ucp_gentype             PCRE2_SUFFIX(_pcre2_ucp_gentype_)\n#define _pcre2_ucp_typerange           PCRE2_SUFFIX(_pcre2_ucp_typerange_)\n#define _pcre2_unicode_version         PCRE2_SUFFIX(_pcre2_unicode_version_)\n#define _pcre2_utt                     PCRE2_SUFFIX(_pcre2_utt_)\n#define _pcre2_utt_names               PCRE2_SUFFIX(_pcre2_utt_names_)\n#define _pcre2_utt_size                PCRE2_SUFFIX(_pcre2_utt_size_)\n#define _pcre2_ebcdic_1047_to_ascii    PCRE2_SUFFIX(_pcre2_ebcdic_1047_to_ascii_)\n#define _pcre2_ascii_to_ebcdic_1047    PCRE2_SUFFIX(_pcre2_ascii_to_ebcdic_1047_)\n\nextern const uint8_t                   PRIV(OP_lengths)[];\nextern const uint32_t                  PRIV(callout_end_delims)[];\nextern const uint32_t                  PRIV(callout_start_delims)[];\nextern pcre2_compile_context           PRIV(default_compile_context);\nextern pcre2_convert_context           PRIV(default_convert_context);\nextern pcre2_match_context             PRIV(default_match_context);\nextern const uint8_t                   PRIV(default_tables)[];\nextern const uint32_t                  PRIV(hspace_list)[];\nextern const uint32_t                  PRIV(vspace_list)[];\nextern const uint32_t                  PRIV(ucd_boolprop_sets)[];\nextern const uint32_t                  PRIV(ucd_caseless_sets)[];\nextern const uint32_t                  PRIV(ucd_turkish_dotted_i_caseset);\nextern const uint32_t                  PRIV(ucd_nocase_ranges)[];\nextern const uint32_t                  PRIV(ucd_nocase_ranges_size);\nextern const uint32_t                  PRIV(ucd_digit_sets)[];\nextern const uint32_t                  PRIV(ucd_script_sets)[];\nextern const ucd_record                PRIV(ucd_records)[];\n#if PCRE2_CODE_UNIT_WIDTH == 32\nextern const ucd_record                PRIV(dummy_ucd_record)[];\n#endif\nextern const uint16_t                  PRIV(ucd_stage1)[];\nextern const uint16_t                  PRIV(ucd_stage2)[];\nextern const uint32_t                  PRIV(ucp_gbtable)[];\nextern const uint32_t                  PRIV(ucp_gentype)[];\n#ifdef SUPPORT_JIT\nextern const int                       PRIV(ucp_typerange)[];\n#endif\nextern const char                     *PRIV(unicode_version);\nextern const ucp_type_table            PRIV(utt)[];\nextern const char                      PRIV(utt_names)[];\nextern const size_t                    PRIV(utt_size);\nextern const uint8_t                   PRIV(ebcdic_1047_to_ascii)[];\nextern const uint8_t                   PRIV(ascii_to_ebcdic_1047)[];\n\n/* Mode-dependent macros and hidden and private structures are defined in a\nseparate file so that pcre2test can include them at all supported widths. When\ncompiling the library, PCRE2_CODE_UNIT_WIDTH will be defined, and we can\ninclude them at the appropriate width, after setting up suffix macros for the\nprivate structures. */\n\n#define branch_chain                 PCRE2_SUFFIX(branch_chain_)\n#define compile_block                PCRE2_SUFFIX(compile_block_)\n#define dfa_match_block              PCRE2_SUFFIX(dfa_match_block_)\n#define match_block                  PCRE2_SUFFIX(match_block_)\n#define named_group                  PCRE2_SUFFIX(named_group_)\n\n#include \"pcre2_intmodedep.h\"\n\n/* Private \"external\" functions. These are internal functions that are called\nfrom modules other than the one in which they are defined. They have to be\n\"external\" in the C sense, but are not part of the PCRE2 public API. They are\nnot referenced from pcre2test, and must not be defined when no code unit width\nis available. */\n\n#define _pcre2_auto_possessify       PCRE2_SUFFIX(_pcre2_auto_possessify_)\n#define _pcre2_check_escape          PCRE2_SUFFIX(_pcre2_check_escape_)\n#define _pcre2_ckd_smul              PCRE2_SUFFIX(_pcre2_ckd_smul_)\n#define _pcre2_extuni                PCRE2_SUFFIX(_pcre2_extuni_)\n#define _pcre2_find_bracket          PCRE2_SUFFIX(_pcre2_find_bracket_)\n#define _pcre2_is_newline            PCRE2_SUFFIX(_pcre2_is_newline_)\n#define _pcre2_jit_free_rodata       PCRE2_SUFFIX(_pcre2_jit_free_rodata_)\n#define _pcre2_jit_free              PCRE2_SUFFIX(_pcre2_jit_free_)\n#define _pcre2_jit_get_size          PCRE2_SUFFIX(_pcre2_jit_get_size_)\n#define _pcre2_jit_get_target        PCRE2_SUFFIX(_pcre2_jit_get_target_)\n#define _pcre2_memctl_malloc         PCRE2_SUFFIX(_pcre2_memctl_malloc_)\n#define _pcre2_ord2utf               PCRE2_SUFFIX(_pcre2_ord2utf_)\n#define _pcre2_script_run            PCRE2_SUFFIX(_pcre2_script_run_)\n#define _pcre2_strcmp                PCRE2_SUFFIX(_pcre2_strcmp_)\n#define _pcre2_strcmp_c8             PCRE2_SUFFIX(_pcre2_strcmp_c8_)\n#define _pcre2_strcpy_c8             PCRE2_SUFFIX(_pcre2_strcpy_c8_)\n#define _pcre2_strlen                PCRE2_SUFFIX(_pcre2_strlen_)\n#define _pcre2_strncmp               PCRE2_SUFFIX(_pcre2_strncmp_)\n#define _pcre2_strncmp_c8            PCRE2_SUFFIX(_pcre2_strncmp_c8_)\n#define _pcre2_study                 PCRE2_SUFFIX(_pcre2_study_)\n#define _pcre2_valid_utf             PCRE2_SUFFIX(_pcre2_valid_utf_)\n#define _pcre2_was_newline           PCRE2_SUFFIX(_pcre2_was_newline_)\n#define _pcre2_xclass                PCRE2_SUFFIX(_pcre2_xclass_)\n#define _pcre2_eclass                PCRE2_SUFFIX(_pcre2_eclass_)\n\nextern int          _pcre2_auto_possessify(PCRE2_UCHAR *,\n                      const compile_block *);\nextern int          _pcre2_check_escape(PCRE2_SPTR *, PCRE2_SPTR, uint32_t *,\n                      int *, uint32_t, uint32_t, uint32_t, BOOL, compile_block *);\nextern BOOL         _pcre2_ckd_smul(PCRE2_SIZE *, int, int);\nextern PCRE2_SPTR   _pcre2_extuni(uint32_t, PCRE2_SPTR, PCRE2_SPTR, PCRE2_SPTR,\n                      BOOL, int *);\nextern PCRE2_SPTR   _pcre2_find_bracket(PCRE2_SPTR, BOOL, int);\nextern BOOL         _pcre2_is_newline(PCRE2_SPTR, uint32_t, PCRE2_SPTR,\n                      uint32_t *, BOOL);\nextern void         _pcre2_jit_free_rodata(void *, void *);\nextern void         _pcre2_jit_free(void *, pcre2_memctl *);\nextern size_t       _pcre2_jit_get_size(void *);\nconst char *        _pcre2_jit_get_target(void);\nextern void *       _pcre2_memctl_malloc(size_t, pcre2_memctl *);\nextern unsigned int _pcre2_ord2utf(uint32_t, PCRE2_UCHAR *);\nextern BOOL         _pcre2_script_run(PCRE2_SPTR, PCRE2_SPTR, BOOL);\nextern int          _pcre2_strcmp(PCRE2_SPTR, PCRE2_SPTR);\nextern int          _pcre2_strcmp_c8(PCRE2_SPTR, const char *);\nextern PCRE2_SIZE   _pcre2_strcpy_c8(PCRE2_UCHAR *, const char *);\nextern PCRE2_SIZE   _pcre2_strlen(PCRE2_SPTR);\nextern int          _pcre2_strncmp(PCRE2_SPTR, PCRE2_SPTR, size_t);\nextern int          _pcre2_strncmp_c8(PCRE2_SPTR, const char *, size_t);\nextern int          _pcre2_study(pcre2_real_code *);\nextern int          _pcre2_valid_utf(PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE *);\nextern BOOL         _pcre2_was_newline(PCRE2_SPTR, uint32_t, PCRE2_SPTR,\n                      uint32_t *, BOOL);\nextern BOOL         _pcre2_xclass(uint32_t, PCRE2_SPTR, const uint8_t *, BOOL);\nextern BOOL         _pcre2_eclass(uint32_t, PCRE2_SPTR, PCRE2_SPTR,\n                      const uint8_t *, BOOL);\n\n#endif  /* PCRE2_CODE_UNIT_WIDTH */\n\n#include \"pcre2_util.h\"\n\n#endif  /* PCRE2_INTERNAL_H_IDEMPOTENT_GUARD */\n\n/* End of pcre2_internal.h */\n"
  },
  {
    "path": "src/pcre2_intmodedep.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains mode-dependent macro and structure definitions. The\nfile is #included by pcre2_internal.h if PCRE2_CODE_UNIT_WIDTH is defined.\nThese mode-dependent items are kept in a separate file so that they can also be\n#included multiple times for different code unit widths by pcre2test in order\nto have access to the hidden structures at all supported widths.\n\nSome of the mode-dependent macros are required at different widths for\ndifferent parts of the pcre2test code (in particular, the included\npcre2_printint_inc.h file). We undefine them here so that they can be re-defined\nfor multiple inclusions. Not all of these are used in pcre2test, but it's easier\njust to undefine them all.\n\nYou can also include pcre2_intmodedep.h with PCRE2_CODE_UNIT_WIDTH defined to\nzero in order to simply clear the previous macros. */\n\n#ifndef PCRE2_CODE_UNIT_WIDTH\n#error PCRE2_CODE_UNIT_WIDTH must be defined\n#endif\n\n#undef ACROSSCHAR\n#undef BACKCHAR\n#undef BYTES2CU\n#undef CHMAX_255\n#undef CU2BYTES\n#undef FORWARDCHAR\n#undef FORWARDCHARTEST\n#undef GET\n#undef GET2\n#undef GETCHAR\n#undef GETCHARINC\n#undef GETCHARINCTEST\n#undef GETCHARLEN\n#undef GETCHARLENTEST\n#undef GETCHARTEST\n#undef GET_EXTRALEN\n#undef HAS_EXTRALEN\n#undef IMM2_SIZE\n#undef MAX_255\n#undef MAX_MARK\n#undef MAX_PATTERN_SIZE\n#undef MAX_UTF_SINGLE_CU\n#undef NOT_FIRSTCU\n#undef PUT\n#undef PUT2\n#undef PUT2INC\n#undef PUTCHAR\n#undef PUTINC\n#undef TABLE_GET\n\n/*************************************************\n*                    MACROS                      *\n*************************************************/\n\n/* Macros may be undefined and re-defined if the same file handles multiple\nbit-widths. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 0\n\n/* PCRE keeps offsets in its compiled code as at least 16-bit quantities\n(always stored in big-endian order in 8-bit mode) by default. These are used,\nfor example, to link from the start of a subpattern to its alternatives and its\nend. The use of 16 bits per offset limits the size of an 8-bit compiled regex\nto around 64K, which is big enough for almost everybody. However, I received a\nrequest for an even bigger limit. For this reason, and also to make the code\neasier to maintain, the storing and loading of offsets from the compiled code\nunit string is now handled by the macros that are defined here.\n\nThe macros are controlled by the value of LINK_SIZE. This defaults to 2, but\nvalues of 3 or 4 are also supported. */\n\n#ifndef CONFIGURED_LINK_SIZE\n#if LINK_SIZE == 2\n#define CONFIGURED_LINK_SIZE 2\n#elif LINK_SIZE == 3\n#define CONFIGURED_LINK_SIZE 3\n#elif LINK_SIZE == 4\n#define CONFIGURED_LINK_SIZE 4\n#else\n#error LINK_SIZE must be 2, 3, or 4\n#endif\n#endif /* CONFIGURED_LINK_SIZE */\n\n/* ------------------- 8-bit support  ------------------ */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n\n#if CONFIGURED_LINK_SIZE == 2\n#define PUT(a,n,d)   \\\n  (a[n] = (PCRE2_UCHAR)((d) >> 8)), \\\n  (a[(n)+1] = (PCRE2_UCHAR)((d) & 255))\n#define GET(a,n) \\\n  (unsigned int)(((a)[n] << 8) | (a)[(n)+1])\n#define MAX_PATTERN_SIZE (1 << 16)\n\n#elif CONFIGURED_LINK_SIZE == 3\n#define PUT(a,n,d)       \\\n  (a[n] = (PCRE2_UCHAR)((d) >> 16)),    \\\n  (a[(n)+1] = (PCRE2_UCHAR)((d) >> 8)), \\\n  (a[(n)+2] = (PCRE2_UCHAR)((d) & 255))\n#define GET(a,n) \\\n  (unsigned int)(((a)[n] << 16) | ((a)[(n)+1] << 8) | (a)[(n)+2])\n#define MAX_PATTERN_SIZE (1 << 24)\n\n#elif CONFIGURED_LINK_SIZE == 4\n#define PUT(a,n,d)        \\\n  (a[n] = (PCRE2_UCHAR)((d) >> 24)),     \\\n  (a[(n)+1] = (PCRE2_UCHAR)((d) >> 16)), \\\n  (a[(n)+2] = (PCRE2_UCHAR)((d) >> 8)),  \\\n  (a[(n)+3] = (PCRE2_UCHAR)((d) & 255))\n#define GET(a,n) \\\n  (unsigned int)(((a)[n] << 24) | ((a)[(n)+1] << 16) | ((a)[(n)+2] << 8) | (a)[(n)+3])\n#define MAX_PATTERN_SIZE (1 << 30)   /* Keep it positive */\n\n#endif\n\n\n/* ------------------- 16-bit support  ------------------ */\n\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n\n#if CONFIGURED_LINK_SIZE == 2\n#undef LINK_SIZE\n#define LINK_SIZE 1\n#define PUT(a,n,d)   \\\n  (a[n] = (PCRE2_UCHAR)(d))\n#define GET(a,n) \\\n  (a[n])\n#define MAX_PATTERN_SIZE (1 << 16)\n\n#elif CONFIGURED_LINK_SIZE == 3 || CONFIGURED_LINK_SIZE == 4\n#undef LINK_SIZE\n#define LINK_SIZE 2\n#define PUT(a,n,d)   \\\n  (a[n] = (PCRE2_UCHAR)((d) >> 16)), \\\n  (a[(n)+1] = (PCRE2_UCHAR)((d) & 65535))\n#define GET(a,n) \\\n  (unsigned int)(((a)[n] << 16) | (a)[(n)+1])\n#define MAX_PATTERN_SIZE (1 << 30)  /* Keep it positive */\n\n#endif\n\n\n/* ------------------- 32-bit support  ------------------ */\n\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n#undef LINK_SIZE\n#define LINK_SIZE 1\n#define PUT(a,n,d)   \\\n  (a[n] = (d))\n#define GET(a,n) \\\n  (a[n])\n#define MAX_PATTERN_SIZE (1 << 30)  /* Keep it positive */\n\n#else\n#error Unsupported compiling mode\n#endif\n\n\n/* --------------- Other mode-specific macros ----------------- */\n\n/* PCRE uses some other (at least) 16-bit quantities that do not change when\nthe size of offsets changes. There are used for repeat counts and for other\nthings such as capturing parenthesis numbers in back references.\n\nDefine the number of code units required to hold a 16-bit count/offset, and\nmacros to load and store such a value. For reasons that I do not understand,\nthe expression in the 8-bit GET2 macro is treated by gcc as a signed\nexpression, even when a is declared as unsigned. It seems that any kind of\narithmetic results in a signed value. Hence the cast. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#define IMM2_SIZE 2\n#define GET2(a,n) (unsigned int)(((a)[n] << 8) | (a)[(n)+1])\n#define PUT2(a,n,d) a[n] = (d) >> 8, a[(n)+1] = (d) & 255\n\n#elif PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n#define IMM2_SIZE 1\n#define GET2(a,n) a[n]\n#define PUT2(a,n,d) a[n] = d\n#endif\n\n/* Other macros that are different for 8-bit mode. The MAX_255 macro checks\nwhether its argument, which is assumed to be one code unit, is less than 256.\nThe CHMAX_255 macro does not assume one code unit. The maximum length of a MARK\nname must fit in one code unit; currently it is set to 255 or 65535. The\nTABLE_GET macro is used to access elements of tables containing exactly 256\nitems. Its argument is a code unit. When code points can be greater than 255, a\ncheck is needed before accessing these tables. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#define MAX_255(c) TRUE\n#define MAX_MARK ((1u << 8) - 1)\n#define TABLE_GET(c, table, default) ((table)[c])\n#ifdef SUPPORT_UNICODE\n#define SUPPORT_WIDE_CHARS\n#define CHMAX_255(c) ((c) <= 255u)\n#else\n#define CHMAX_255(c) TRUE\n#endif  /* SUPPORT_UNICODE */\n\n#elif PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n#define CHMAX_255(c) ((c) <= 255u)\n#define MAX_255(c) ((c) <= 255u)\n#define MAX_MARK ((1u << 16) - 1)\n#define SUPPORT_WIDE_CHARS\n#define TABLE_GET(c, table, default) (MAX_255(c)? ((table)[c]):(default))\n#endif\n\n\n/* ----------------- Character-handling macros ----------------- */\n\n/* When UTF encoding is being used, a character is no longer just a single\nbyte in 8-bit mode or a single short in 16-bit mode. The macros for character\nhandling generate simple sequences when used in the basic mode, and more\ncomplicated ones for UTF characters. GETCHARLENTEST and other macros are not\nused when UTF is not supported. To make sure they can never even appear when\nUTF support is omitted, we don't even define them. */\n\n#ifndef SUPPORT_UNICODE\n\n/* #define MAX_UTF_SINGLE_CU */\n/* #define HAS_EXTRALEN(c) */\n/* #define GET_EXTRALEN(c) */\n/* #define NOT_FIRSTCU(c) */\n#define GETCHAR(c, eptr) c = *eptr;\n#define GETCHARTEST(c, eptr) c = *eptr;\n#define GETCHARINC(c, eptr) c = *eptr++;\n#define GETCHARINCTEST(c, eptr) c = *eptr++;\n#define GETCHARLEN(c, eptr, len) c = *eptr;\n#define PUTCHAR(c, p) (*p = c, 1)\n/* #define GETCHARLENTEST(c, eptr, len) */\n/* #define BACKCHAR(eptr) */\n/* #define FORWARDCHAR(eptr) */\n/* #define FORWARCCHARTEST(eptr,end) */\n/* #define ACROSSCHAR(condition, eptr, action) */\n\n#else   /* SUPPORT_UNICODE */\n\n/* ------------------- 8-bit support  ------------------ */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#define MAYBE_UTF_MULTI          /* UTF chars may use multiple code units */\n\n/* The largest UTF code point that can be encoded as a single code unit. */\n\n#define MAX_UTF_SINGLE_CU 127\n\n/* Tests whether the code point needs extra characters to decode. */\n\n#define HAS_EXTRALEN(c) HASUTF8EXTRALEN(c)\n\n/* Returns with the additional number of characters if HAS_EXTRALEN(c) is TRUE.\nOtherwise it has an undefined behaviour. */\n\n#define GET_EXTRALEN(c) (PRIV(utf8_table4)[(c) & 0x3fu])\n\n/* Returns TRUE, if the given value is not the first code unit of a UTF\nsequence. */\n\n#define NOT_FIRSTCU(c) (((c) & 0xc0u) == 0x80u)\n\n/* Get the next UTF-8 character, not advancing the pointer. This is called when\nwe know we are in UTF-8 mode. */\n\n#define GETCHAR(c, eptr) \\\n  c = *eptr; \\\n  if (c >= 0xc0u) GETUTF8(c, eptr);\n\n/* Get the next UTF-8 character, testing for UTF-8 mode, and not advancing the\npointer. */\n\n#define GETCHARTEST(c, eptr) \\\n  c = *eptr; \\\n  if (utf && c >= 0xc0u) GETUTF8(c, eptr);\n\n/* Get the next UTF-8 character, advancing the pointer. This is called when we\nknow we are in UTF-8 mode. */\n\n#define GETCHARINC(c, eptr) \\\n  c = *eptr++; \\\n  if (c >= 0xc0u) GETUTF8INC(c, eptr);\n\n/* Get the next character, testing for UTF-8 mode, and advancing the pointer.\nThis is called when we don't know if we are in UTF-8 mode. */\n\n#define GETCHARINCTEST(c, eptr) \\\n  c = *eptr++; \\\n  if (utf && c >= 0xc0u) GETUTF8INC(c, eptr);\n\n/* Get the next UTF-8 character, not advancing the pointer, incrementing length\nif there are extra bytes. This is called when we know we are in UTF-8 mode. */\n\n#define GETCHARLEN(c, eptr, len) \\\n  c = *eptr; \\\n  if (c >= 0xc0u) GETUTF8LEN(c, eptr, len);\n\n/* Get the next UTF-8 character, testing for UTF-8 mode, not advancing the\npointer, incrementing length if there are extra bytes. This is called when we\ndo not know if we are in UTF-8 mode. */\n\n#define GETCHARLENTEST(c, eptr, len) \\\n  c = *eptr; \\\n  if (utf && c >= 0xc0u) GETUTF8LEN(c, eptr, len);\n\n/* If the pointer is not at the start of a character, move it back until\nit is. This is called only in UTF-8 mode - we don't put a test within the macro\nbecause almost all calls are already within a block of UTF-8 only code. */\n\n#define BACKCHAR(eptr) while((*eptr & 0xc0u) == 0x80u) eptr--\n\n/* Same as above, just in the other direction. */\n#define FORWARDCHAR(eptr) while((*eptr & 0xc0u) == 0x80u) eptr++\n#define FORWARDCHARTEST(eptr,end) while(eptr < end && (*eptr & 0xc0u) == 0x80u) eptr++\n\n/* Same as above, but it allows a fully customizable form. */\n#define ACROSSCHAR(condition, eptr, action) \\\n  while((condition) && ((*eptr) & 0xc0u) == 0x80u) action\n\n/* Deposit a character into memory, returning the number of code units. */\n\n#define PUTCHAR(c, p) ((utf && c > MAX_UTF_SINGLE_CU)? \\\n  PRIV(ord2utf)(c,p) : (*p = c, 1))\n\n\n/* ------------------- 16-bit support  ------------------ */\n\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n#define MAYBE_UTF_MULTI          /* UTF chars may use multiple code units */\n\n/* The largest UTF code point that can be encoded as a single code unit. */\n\n#define MAX_UTF_SINGLE_CU 65535\n\n/* Tests whether the code point needs extra characters to decode. */\n\n#define HAS_EXTRALEN(c) (((c) & 0xfc00u) == 0xd800u)\n\n/* Returns with the additional number of characters if HAS_EXTRALEN(c) is TRUE.\nOtherwise it has an undefined behaviour. */\n\n#define GET_EXTRALEN(c) 1\n\n/* Returns TRUE, if the given value is not the first code unit of a UTF\nsequence. */\n\n#define NOT_FIRSTCU(c) (((c) & 0xfc00u) == 0xdc00u)\n\n/* Base macro to pick up the low surrogate of a UTF-16 character, not\nadvancing the pointer. */\n\n#define GETUTF16(c, eptr) \\\n   { c = (((c & 0x3ffu) << 10) | (eptr[1] & 0x3ffu)) + 0x10000u; }\n\n/* Get the next UTF-16 character, not advancing the pointer. This is called when\nwe know we are in UTF-16 mode. */\n\n#define GETCHAR(c, eptr) \\\n  c = *eptr; \\\n  if ((c & 0xfc00u) == 0xd800u) GETUTF16(c, eptr);\n\n/* Get the next UTF-16 character, testing for UTF-16 mode, and not advancing the\npointer. */\n\n#define GETCHARTEST(c, eptr) \\\n  c = *eptr; \\\n  if (utf && (c & 0xfc00u) == 0xd800u) GETUTF16(c, eptr);\n\n/* Base macro to pick up the low surrogate of a UTF-16 character, advancing\nthe pointer. */\n\n#define GETUTF16INC(c, eptr) \\\n   { c = (((c & 0x3ffu) << 10) | (*eptr++ & 0x3ffu)) + 0x10000u; }\n\n/* Get the next UTF-16 character, advancing the pointer. This is called when we\nknow we are in UTF-16 mode. */\n\n#define GETCHARINC(c, eptr) \\\n  c = *eptr++; \\\n  if ((c & 0xfc00u) == 0xd800u) GETUTF16INC(c, eptr);\n\n/* Get the next character, testing for UTF-16 mode, and advancing the pointer.\nThis is called when we don't know if we are in UTF-16 mode. */\n\n#define GETCHARINCTEST(c, eptr) \\\n  c = *eptr++; \\\n  if (utf && (c & 0xfc00u) == 0xd800u) GETUTF16INC(c, eptr);\n\n/* Base macro to pick up the low surrogate of a UTF-16 character, not\nadvancing the pointer, incrementing the length. */\n\n#define GETUTF16LEN(c, eptr, len) \\\n   { c = (((c & 0x3ffu) << 10) | (eptr[1] & 0x3ffu)) + 0x10000u; len++; }\n\n/* Get the next UTF-16 character, not advancing the pointer, incrementing\nlength if there is a low surrogate. This is called when we know we are in\nUTF-16 mode. */\n\n#define GETCHARLEN(c, eptr, len) \\\n  c = *eptr; \\\n  if ((c & 0xfc00u) == 0xd800u) GETUTF16LEN(c, eptr, len);\n\n/* Get the next UTF-16 character, testing for UTF-16 mode, not advancing the\npointer, incrementing length if there is a low surrogate. This is called when\nwe do not know if we are in UTF-16 mode. */\n\n#define GETCHARLENTEST(c, eptr, len) \\\n  c = *eptr; \\\n  if (utf && (c & 0xfc00u) == 0xd800u) GETUTF16LEN(c, eptr, len);\n\n/* If the pointer is not at the start of a character, move it back until\nit is. This is called only in UTF-16 mode - we don't put a test within the\nmacro because almost all calls are already within a block of UTF-16 only\ncode. */\n\n#define BACKCHAR(eptr) if ((*eptr & 0xfc00u) == 0xdc00u) eptr--\n\n/* Same as above, just in the other direction. */\n#define FORWARDCHAR(eptr) if ((*eptr & 0xfc00u) == 0xdc00u) eptr++\n#define FORWARDCHARTEST(eptr,end) if (eptr < end && (*eptr & 0xfc00u) == 0xdc00u) eptr++\n\n/* Same as above, but it allows a fully customizable form. */\n#define ACROSSCHAR(condition, eptr, action) \\\n  if ((condition) && ((*eptr) & 0xfc00u) == 0xdc00u) action\n\n/* Deposit a character into memory, returning the number of code units. */\n\n#define PUTCHAR(c, p) ((utf && c > MAX_UTF_SINGLE_CU)? \\\n  PRIV(ord2utf)(c,p) : (*p = c, 1))\n\n\n/* ------------------- 32-bit support  ------------------ */\n\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n\n/* These are trivial for the 32-bit library, since all UTF-32 characters fit\ninto one PCRE2_UCHAR unit. */\n\n#define MAX_UTF_SINGLE_CU (0x10ffffu)\n#define HAS_EXTRALEN(c) (0)\n#define GET_EXTRALEN(c) (0)\n#define NOT_FIRSTCU(c) (0)\n\n/* Get the next UTF-32 character, not advancing the pointer. This is called when\nwe know we are in UTF-32 mode. */\n\n#define GETCHAR(c, eptr) \\\n  c = *(eptr);\n\n/* Get the next UTF-32 character, testing for UTF-32 mode, and not advancing the\npointer. */\n\n#define GETCHARTEST(c, eptr) \\\n  c = *(eptr);\n\n/* Get the next UTF-32 character, advancing the pointer. This is called when we\nknow we are in UTF-32 mode. */\n\n#define GETCHARINC(c, eptr) \\\n  c = *((eptr)++);\n\n/* Get the next character, testing for UTF-32 mode, and advancing the pointer.\nThis is called when we don't know if we are in UTF-32 mode. */\n\n#define GETCHARINCTEST(c, eptr) \\\n  c = *((eptr)++);\n\n/* Get the next UTF-32 character, not advancing the pointer, not incrementing\nlength (since all UTF-32 is of length 1). This is called when we know we are in\nUTF-32 mode. */\n\n#define GETCHARLEN(c, eptr, len) \\\n  GETCHAR(c, eptr)\n\n/* Get the next UTF-32character, testing for UTF-32 mode, not advancing the\npointer, not incrementing the length (since all UTF-32 is of length 1).\nThis is called when we do not know if we are in UTF-32 mode. */\n\n#define GETCHARLENTEST(c, eptr, len) \\\n  GETCHARTEST(c, eptr)\n\n/* If the pointer is not at the start of a character, move it back until\nit is. This is called only in UTF-32 mode - we don't put a test within the\nmacro because almost all calls are already within a block of UTF-32 only\ncode.\n\nThese are all no-ops since all UTF-32 characters fit into one PCRE2_UCHAR. */\n\n#define BACKCHAR(eptr) do { } while (0)\n\n/* Same as above, just in the other direction. */\n\n#define FORWARDCHAR(eptr) do { } while (0)\n#define FORWARDCHARTEST(eptr,end) do { } while (0)\n\n/* Same as above, but it allows a fully customizable form. */\n\n#define ACROSSCHAR(condition, eptr, action) do { } while (0)\n\n/* Deposit a character into memory, returning the number of code units. */\n\n#define PUTCHAR(c, p) (*p = c, 1)\n\n#endif  /* UTF-32 character handling */\n#endif  /* SUPPORT_UNICODE */\n\n\n/* Mode-dependent macros that have the same definition in all modes. */\n\n#define CU2BYTES(x)     ((x)*((PCRE2_CODE_UNIT_WIDTH/8)))\n#define BYTES2CU(x)     ((x)/((PCRE2_CODE_UNIT_WIDTH/8)))\n#define PUTINC(a,n,d)   PUT(a,n,d), a += LINK_SIZE\n#define PUT2INC(a,n,d)  PUT2(a,n,d), a += IMM2_SIZE\n\n#endif /* PCRE2_CODE_UNIT_WIDTH != 0 */\n\n\n\n/*************************************************\n*                 STRUCTURES                     *\n*************************************************/\n\n/* We need a more complex include guard than usual, because the file can be\nincluded once for each bit-width to define the various structures. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8 && !defined PCRE2_INTMODEDEP_IDEMPOTENT_GUARD_8\n#define PCRE2_INTMODEDEP_IDEMPOTENT_GUARD_8\n#define PCRE2_INTMODEDEP_CAN_DEFINE\n#endif\n#if PCRE2_CODE_UNIT_WIDTH == 16 && !defined PCRE2_INTMODEDEP_IDEMPOTENT_GUARD_16\n#define PCRE2_INTMODEDEP_IDEMPOTENT_GUARD_16\n#define PCRE2_INTMODEDEP_CAN_DEFINE\n#endif\n#if PCRE2_CODE_UNIT_WIDTH == 32 && !defined PCRE2_INTMODEDEP_IDEMPOTENT_GUARD_32\n#define PCRE2_INTMODEDEP_IDEMPOTENT_GUARD_32\n#define PCRE2_INTMODEDEP_CAN_DEFINE\n#endif\n\n#ifdef PCRE2_INTMODEDEP_CAN_DEFINE\n#undef PCRE2_INTMODEDEP_CAN_DEFINE\n\n/* ----------------------- HIDDEN STRUCTURES ----------------------------- */\n\n/* NOTE: All these structures *must* start with a pcre2_memctl structure. The\ncode that uses them is simpler because it assumes this. */\n\n/* The real general context structure. At present it holds only data for custom\nmemory control. */\n\n/* WARNING: if this is ever changed, code in pcre2_substitute.c will have to be\nchanged because it builds a general context \"by hand\" in order to avoid the\nmalloc() call in pcre2_general_context)_create(). There is also code in\npcre2_match.c that makes the same assumption. */\n\ntypedef struct pcre2_real_general_context {\n  pcre2_memctl memctl;\n} pcre2_real_general_context;\n\n/* The real compile context structure */\n\ntypedef struct pcre2_real_compile_context {\n  pcre2_memctl memctl;\n  int (*stack_guard)(uint32_t, void *);\n  void *stack_guard_data;\n  const uint8_t *tables;\n  PCRE2_SIZE max_pattern_length;\n  PCRE2_SIZE max_pattern_compiled_length;\n  uint16_t bsr_convention;\n  uint16_t newline_convention;\n  uint32_t parens_nest_limit;\n  uint32_t extra_options;\n  uint32_t max_varlookbehind;\n  uint32_t optimization_flags;\n} pcre2_real_compile_context;\n\n/* The real match context structure. */\n\ntypedef struct pcre2_real_match_context {\n  pcre2_memctl memctl;\n#ifdef SUPPORT_JIT\n  pcre2_jit_callback jit_callback;\n  void *jit_callback_data;\n#endif\n  int        (*callout)(pcre2_callout_block *, void *);\n  void        *callout_data;\n  int        (*substitute_callout)(pcre2_substitute_callout_block *, void *);\n  void        *substitute_callout_data;\n  PCRE2_SIZE (*substitute_case_callout)(PCRE2_SPTR, PCRE2_SIZE, PCRE2_UCHAR *,\n                                        PCRE2_SIZE, int, void *);\n  void        *substitute_case_callout_data;\n  PCRE2_SIZE offset_limit;\n  uint32_t heap_limit;\n  uint32_t match_limit;\n  uint32_t depth_limit;\n} pcre2_real_match_context;\n\n/* The real convert context structure. */\n\ntypedef struct pcre2_real_convert_context {\n  pcre2_memctl memctl;\n  uint32_t glob_separator;\n  uint32_t glob_escape;\n} pcre2_real_convert_context;\n\n/* The real compiled code structure. The type for the blocksize field is\ndefined specially because it is required in pcre2_serialize_decode() when\ncopying the size from possibly unaligned memory into a variable of the same\ntype. Use a macro rather than a typedef to avoid compiler warnings when this\nfile is included multiple times by pcre2test. LOOKBEHIND_MAX specifies the\nlargest lookbehind that is supported. (OP_REVERSE and OP_VREVERSE in a pattern\nhave 16-bit arguments in 8-bit and 16-bit modes, so we need no more than a\n16-bit field here.) */\n\n#undef  CODE_BLOCKSIZE_TYPE\n#define CODE_BLOCKSIZE_TYPE PCRE2_SIZE\n\n#undef  LOOKBEHIND_MAX\n#define LOOKBEHIND_MAX ((int)UINT16_MAX)\n\ntypedef struct pcre2_real_code {\n  pcre2_memctl memctl;            /* Memory control fields */\n  const uint8_t *tables;          /* The character tables */\n  void    *executable_jit;        /* Pointer to JIT code */\n  uint8_t  start_bitmap[32];      /* Bitmap for starting code unit < 256 */\n  CODE_BLOCKSIZE_TYPE blocksize;  /* Total (bytes) that was malloc-ed */\n  CODE_BLOCKSIZE_TYPE code_start; /* Byte code start offset */\n  uint32_t magic_number;          /* Paranoid and endianness check */\n  uint32_t compile_options;       /* Options passed to pcre2_compile() */\n  uint32_t overall_options;       /* Options after processing the pattern */\n  uint32_t extra_options;         /* Taken from compile_context */\n  uint32_t flags;                 /* Various state flags */\n  uint32_t limit_heap;            /* Limit set in the pattern */\n  uint32_t limit_match;           /* Limit set in the pattern */\n  uint32_t limit_depth;           /* Limit set in the pattern */\n  uint32_t first_codeunit;        /* Starting code unit */\n  uint32_t last_codeunit;         /* This codeunit must be seen */\n  uint16_t bsr_convention;        /* What \\R matches */\n  uint16_t newline_convention;    /* What is a newline? */\n  uint16_t max_lookbehind;        /* Longest lookbehind (characters) */\n  uint16_t minlength;             /* Minimum length of match */\n  uint16_t top_bracket;           /* Highest numbered group */\n  uint16_t top_backref;           /* Highest numbered back reference */\n  uint16_t name_entry_size;       /* Size (code units) of table entries */\n  uint16_t name_count;            /* Number of name entries in the table */\n  uint32_t optimization_flags;    /* Optimizations enabled at compile time */\n} pcre2_real_code;\n\n/* The real match data structure. Define ovector as large as it can ever\nactually be so that array bound checkers don't grumble. Memory for this\nstructure is obtained by calling pcre2_match_data_create(), which sets the size\nas the offset of ovector plus a pair of elements for each capturable string, so\nthe size varies from call to call. As the maximum number of capturing\nsubpatterns is 65535 we must allow for 65536 strings to include the overall\nmatch. (See also the heapframe structure below.) */\n\nstruct heapframe;  /* Forward reference */\n\ntypedef struct pcre2_real_match_data {\n  pcre2_memctl     memctl;           /* Memory control fields */\n  const pcre2_real_code *code;       /* The pattern used for the match */\n  PCRE2_SPTR       subject;          /* The subject that was matched */\n  PCRE2_SPTR       mark;             /* Pointer to last mark */\n  struct heapframe *heapframes;      /* Backtracking frames heap memory */\n  PCRE2_SIZE       heapframes_size;  /* Malloc-ed size */\n  PCRE2_SIZE       subject_length;   /* Subject length */\n  PCRE2_SIZE       start_offset;     /* Offset to start of search */\n  PCRE2_SIZE       leftchar;         /* Offset to leftmost code unit */\n  PCRE2_SIZE       rightchar;        /* Offset to rightmost code unit */\n  PCRE2_SIZE       startchar;        /* Offset to starting code unit */\n  uint8_t          matchedby;        /* Type of match (normal, JIT, DFA) */\n  uint8_t          flags;            /* Various flags */\n  uint16_t         oveccount;        /* Number of pairs */\n  uint32_t         options;          /* Options passed in to the match call */\n  int              rc;               /* The return code from the match */\n  PCRE2_SIZE       ovector[131072];  /* Must be last in the structure */\n} pcre2_real_match_data;\n\n\n/* ----------------------- PRIVATE STRUCTURES ----------------------------- */\n\n/* These structures are not needed for pcre2test. */\n\n#ifndef PCRE2_PCRE2TEST\n\n/* Structures for checking for mutual function recursion when scanning compiled\nor parsed code. */\n\ntypedef struct recurse_check {\n  struct recurse_check *prev;\n  PCRE2_SPTR group;\n} recurse_check;\n\ntypedef struct parsed_recurse_check {\n  struct parsed_recurse_check *prev;\n  uint32_t *groupptr;\n} parsed_recurse_check;\n\n/* Structure for building a cache when filling in pattern recursion offsets. */\n\ntypedef struct recurse_cache {\n  PCRE2_SPTR group;\n  int groupnumber;\n} recurse_cache;\n\n/* Structure for maintaining a chain of pointers to the currently incomplete\nbranches, for testing for left recursion while compiling. */\n\ntypedef struct branch_chain {\n  struct branch_chain *outer;\n  PCRE2_UCHAR *current_branch;\n} branch_chain;\n\n/* Structure for building a list of named groups during the first pass of\ncompiling. When a duplicate name is stored in the list, its name is set to\nthe name of the first entry with the same name, and its length is set to 0. */\n\ntypedef struct named_group {\n  PCRE2_SPTR   name;          /* Points to the name in the pattern */\n  uint32_t     number;        /* Group number */\n  uint16_t     length;        /* Length of the name */\n  uint16_t     hash_dup;      /* A concatenation of a 15 bit hash code and\n                                 a singe bit which represents duplication */\n} named_group;\n\n/* Structure for storing compile time data. */\n\ntypedef struct compile_data {\n  struct compile_data *next;      /* Next compile data */\n#ifdef PCRE2_DEBUG\n  uint8_t type;                   /* Debug only type of the data */\n#endif\n} compile_data;\n\n/* Structure for caching sorted ranges. This improves the performance\nof translating META code to byte code. */\n\ntypedef struct class_ranges {\n  compile_data header;             /* Common header */\n  size_t char_lists_size;          /* Total size of encoded char lists */\n  size_t char_lists_start;         /* Start offset of encoded char lists */\n  uint16_t range_list_size;        /* Size of ranges array */\n  uint16_t char_lists_types;       /* The XCL_LIST header of char lists */\n  /* Followed by the list of ranges (start/end pairs) */\n} class_ranges;\n\n/* Structure for sorted recurse arguments. */\n\ntypedef struct recurse_arguments {\n  compile_data header;             /* Common header */\n  size_t size;                     /* Total size */\n  size_t skip_size;                /* Space consumed by arguments */\n} recurse_arguments;\n\ntypedef union class_bits_storage {\n  uint8_t classbits[32];\n  uint32_t classwords[8];\n} class_bits_storage;\n\n/* Structure for passing \"static\" information around between the functions\ndoing the compiling, so that they are thread-safe. */\n\ntypedef struct compile_block {\n  pcre2_real_compile_context *cx;  /* Points to the compile context */\n  const uint8_t *lcc;              /* Points to lower casing table */\n  const uint8_t *fcc;              /* Points to case-flipping table */\n  const uint8_t *cbits;            /* Points to character type table */\n  const uint8_t *ctypes;           /* Points to table of type maps */\n  PCRE2_UCHAR *start_workspace;    /* The start of working space */\n  PCRE2_UCHAR *start_code;         /* The start of the compiled code */\n  PCRE2_SPTR start_pattern;        /* The start of the pattern */\n  PCRE2_SPTR end_pattern;          /* The end of the pattern */\n  PCRE2_UCHAR *name_table;         /* The name/number table */\n  PCRE2_SIZE workspace_size;       /* Size of workspace */\n  PCRE2_SIZE small_ref_offset[10]; /* Offsets for \\1 to \\9 */\n  PCRE2_SIZE erroroffset;          /* Offset of error in pattern */\n  class_bits_storage classbits;    /* Temporary store for classbits */\n  uint16_t names_found;            /* Number of entries so far */\n  uint16_t name_entry_size;        /* Size of each entry */\n  uint16_t parens_depth;           /* Depth of nested parentheses */\n  uint16_t assert_depth;           /* Depth of nested assertions */\n  named_group *named_groups;       /* Points to vector in pre-compile */\n  uint32_t named_group_list_size;  /* Number of entries in the list */\n  uint32_t external_options;       /* External (initial) options */\n  uint32_t external_flags;         /* External flag bits to be set */\n  uint32_t bracount;               /* Count of capturing parentheses */\n  uint32_t lastcapture;            /* Last capture encountered */\n  uint32_t *parsed_pattern;        /* Parsed pattern buffer */\n  uint32_t *parsed_pattern_end;    /* Parsed pattern should not get here */\n  uint32_t *groupinfo;             /* Group info vector */\n  uint32_t top_backref;            /* Maximum back reference */\n  uint32_t backref_map;            /* Bitmap of low back refs */\n  uint32_t nltype;                 /* Newline type */\n  uint32_t nllen;                  /* Newline string length */\n  PCRE2_UCHAR nl[4];               /* Newline string when fixed length */\n  uint8_t class_op_used[ECLASS_NEST_LIMIT]; /* Operation used for\n                                               extended classes */\n  uint32_t req_varyopt;            /* \"After variable item\" flag for reqbyte */\n  uint32_t max_varlookbehind;      /* Limit for variable lookbehinds */\n  int  max_lookbehind;             /* Maximum lookbehind encountered (characters) */\n  BOOL had_accept;                 /* (*ACCEPT) encountered */\n  BOOL had_pruneorskip;            /* (*PRUNE) or (*SKIP) encountered */\n  BOOL had_recurse;                /* Had a pattern recursion or subroutine call */\n  BOOL dupnames;                   /* Duplicate names exist */\n  compile_data *first_data;        /* First item in the compile data list */\n  compile_data *last_data;         /* Last item in the compile data list */\n#ifdef SUPPORT_WIDE_CHARS\n  size_t char_lists_size;          /* Current size of character lists */\n#endif\n} compile_block;\n\n/* Structure for keeping the properties of the in-memory stack used\nby the JIT matcher. */\n\ntypedef struct pcre2_real_jit_stack {\n  pcre2_memctl memctl;\n  void* stack;\n} pcre2_real_jit_stack;\n\n/* Structure for items in a linked list that represents an explicit recursive\ncall within the pattern when running pcre2_dfa_match(). */\n\ntypedef struct dfa_recursion_info {\n  struct dfa_recursion_info *prevrec;\n  PCRE2_SPTR subject_position;\n  PCRE2_SPTR last_used_ptr;\n  uint32_t group_num;\n} dfa_recursion_info;\n\n/* Structure for \"stack\" frames that are used for remembering backtracking\npositions during matching. As these are used in a vector, with the ovector item\nbeing extended, the size of the structure must be a multiple of PCRE2_SIZE. The\nonly way to check this at compile time is to force an error by generating an\narray with a negative size. By putting this in a typedef (which is never used),\nwe don't generate any code when all is well. */\n\ntypedef struct heapframe {\n\n  /* The first set of fields are variables that have to be preserved over calls\n  to RMATCH(), but which do not need to be copied to new frames. */\n\n  PCRE2_SPTR ecode;          /* The current position in the pattern */\n  PCRE2_SIZE back_frame;     /* Amount to subtract on RRETURN */\n  uint32_t rdepth;           /* Function \"recursion\" depth within pcre2_match() */\n  uint32_t group_frame_type; /* Type information for group frames */\n  uint8_t return_id;         /* Where to go on in internal \"return\" */\n  uint8_t op;                /* Processing opcode */\n  uint8_t byte1;             /* A temporary byte to store anything */\n  uint8_t byte2;             /* A temporary byte to store anything */\n\n  /* At this point, the structure is 32-bit aligned. On most architectures\n  the alignment requirement for a pointer will ensure that the eptr field below\n  is 32-bit or 64-bit aligned. However, on m68k it is fine to have a pointer\n  that is 16-bit aligned, so all uint8_t members above are required for a 32\n  bit alignment. */\n\n  union {\n    /* Fields for storing localized data, which\n    is preserved by RMATCH() calls. */\n\n    struct {\n      PCRE2_SPTR start_eptr;\n      PCRE2_SPTR charptr;\n      uint32_t min;\n      uint32_t max;\n      uint32_t c;\n      union {\n        uint32_t oc;\n        /* Buffer for other case code units. The size of\n        the buffer is enough to store the longest character. */\n#if PCRE2_CODE_UNIT_WIDTH == 8\n        PCRE2_UCHAR occu[4];\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n        PCRE2_UCHAR occu[2];\n#else\n        PCRE2_UCHAR occu[1];\n#endif\n      } oc;\n    } char_repeat;\n\n    struct {\n      PCRE2_SPTR start_eptr;\n      uint32_t min;\n      uint32_t max;\n      uint32_t c;\n      uint32_t oc;\n    } charnot_repeat;\n\n    struct {\n      PCRE2_SPTR start_eptr;\n      PCRE2_SPTR byte_map_address;\n      uint32_t min;\n      uint32_t max;\n    } class_repeat;\n\n    struct {\n      PCRE2_SPTR start_eptr;\n      PCRE2_SPTR xclass_data;\n      uint32_t min;\n      uint32_t max;\n    } xclass_repeat;\n\n    struct {\n      PCRE2_SPTR start_eptr;\n      PCRE2_SPTR eclass_data;\n      PCRE2_SIZE eclass_len;\n      uint32_t min;\n      uint32_t max;\n    } eclass_repeat;\n\n    struct {\n      PCRE2_SPTR start_eptr;\n      uint32_t min;\n      uint32_t max;\n      uint32_t ctype;\n      uint32_t propvalue;\n    } type_repeat;\n\n    struct {\n      PCRE2_SPTR start;\n      PCRE2_SIZE offset;\n      PCRE2_SIZE length;\n      uint32_t min;\n      uint32_t max;\n    } ref_repeat;\n\n    struct {\n      uint32_t frame_type;    /* Set for all that use GROUPLOOP */\n    } op_bra;\n\n    struct {\n      PCRE2_SPTR start_eptr;\n      PCRE2_SPTR start_group;\n      uint32_t frame_type;\n    } op_brapos;\n\n    struct {\n      PCRE2_SPTR start_branch;\n      uint32_t frame_type;\n    } op_recurse;\n\n    struct {\n      PCRE2_SPTR saved_end_subject;\n      PCRE2_SPTR saved_eptr;\n      PCRE2_SIZE true_end_extra;\n      uint32_t saved_moptions;\n    } op_assert_scs;\n\n    struct {\n      PCRE2_SPTR start_branch;\n      PCRE2_SIZE length;\n    } op_cond;\n\n    struct {\n      uint32_t min;\n      uint32_t max;\n    } op_vreverse;\n  } fields;\n\n  /* The rest have to be copied from the previous frame whenever a new frame\n  becomes current. The final field is specified as a large vector so that\n  runtime array bound checks don't catch references to it. However, for any\n  specific call to pcre2_match() the memory allocated for each frame structure\n  allows for exactly the right size ovector for the number of capturing\n  parentheses. (See also the comment for pcre2_real_match_data above.) */\n\n  PCRE2_SPTR eptr;              /* MUST BE FIRST */\n  PCRE2_SPTR start_match;       /* Can be adjusted by \\K */\n  PCRE2_SPTR mark;              /* Most recent mark on the success path */\n  PCRE2_SPTR recurse_last_used; /* Last character used at time of pattern recursion */\n  uint32_t current_recurse;     /* Group number of current (deepest) pattern recursion */\n  uint32_t capture_last;        /* Most recent capture */\n  PCRE2_SIZE last_group_offset; /* Saved offset to most recent group frame */\n  PCRE2_SIZE offset_top;        /* Offset after highest capture */\n  PCRE2_SIZE ovector[131072];   /* Must be last in the structure */\n} heapframe;\n\n/* Assert that the size of the heapframe structure is a multiple of PCRE2_SIZE.\nSee various comments above. */\n\nSTATIC_ASSERT((sizeof(heapframe) % sizeof(PCRE2_SIZE)) == 0, heapframe_size);\n\n/* Structure for computing the alignment of heapframe. */\n\ntypedef struct heapframe_align {\n  char unalign;    /* Completely unalign the current offset */\n  heapframe frame; /* Offset is its alignment */\n} heapframe_align;\n\n/* This define is the minimum alignment required for a heapframe, in bytes. */\n\n#define HEAPFRAME_ALIGNMENT offsetof(heapframe_align, frame)\n\n/* Structure for passing \"static\" information around between the functions\ndoing traditional NFA matching (pcre2_match() and friends). */\n\ntypedef struct match_block {\n  pcre2_memctl memctl;            /* For general use */\n  uint32_t heap_limit;            /* As it says */\n  uint32_t match_limit;           /* As it says */\n  uint32_t match_limit_depth;     /* As it says */\n  uint32_t match_call_count;      /* Number of times a new frame is created */\n  BOOL hitend;                    /* Hit the end of the subject at some point */\n  BOOL hasthen;                   /* Pattern contains (*THEN) */\n  BOOL hasbsk;                    /* Pattern contains \\K */\n  BOOL allowemptypartial;         /* Allow empty hard partial */\n  BOOL allowlookaroundbsk;        /* Allow \\K within lookarounds */\n  const uint8_t *lcc;             /* Points to lower casing table */\n  const uint8_t *fcc;             /* Points to case-flipping table */\n  const uint8_t *ctypes;          /* Points to table of type maps */\n  PCRE2_SIZE start_offset;        /* The start offset value */\n  PCRE2_SIZE end_offset_top;      /* Highwater mark at end of match */\n  uint16_t partial;               /* PARTIAL options */\n  uint16_t bsr_convention;        /* \\R interpretation */\n  uint16_t name_count;            /* Number of names in name table */\n  uint16_t name_entry_size;       /* Size of entry in names table */\n  PCRE2_SPTR name_table;          /* Table of group names */\n  PCRE2_SPTR start_code;          /* For use in pattern recursion */\n  PCRE2_SPTR start_subject;       /* Start of the subject string */\n  PCRE2_SPTR check_subject;       /* Where UTF-checked from */\n  PCRE2_SPTR end_subject;         /* Usable end of the subject string */\n  PCRE2_SPTR true_end_subject;    /* Actual end of the subject string */\n  PCRE2_SPTR end_match_ptr;       /* Subject position at end match */\n  PCRE2_SPTR start_used_ptr;      /* Earliest consulted character */\n  PCRE2_SPTR last_used_ptr;       /* Latest consulted character */\n  PCRE2_SPTR mark;                /* Mark pointer to pass back on success */\n  PCRE2_SPTR nomatch_mark;        /* Mark pointer to pass back on failure */\n  PCRE2_SPTR verb_ecode_ptr;      /* For passing back info */\n  PCRE2_SPTR verb_skip_ptr;       /* For passing back a (*SKIP) name */\n  uint32_t verb_current_recurse;  /* Current recursion group when (*VERB) happens */\n  uint32_t moptions;              /* Match options */\n  uint32_t poptions;              /* Pattern options */\n  uint32_t skip_arg_count;        /* For counting SKIP_ARGs */\n  uint32_t ignore_skip_arg;       /* For re-run when SKIP arg name not found */\n  uint32_t nltype;                /* Newline type */\n  uint32_t nllen;                 /* Newline string length */\n  PCRE2_UCHAR nl[4];              /* Newline string when fixed */\n  pcre2_callout_block *cb;        /* Points to a callout block */\n  void  *callout_data;            /* To pass back to callouts */\n  int (*callout)(pcre2_callout_block *,void *);  /* Callout function or NULL */\n} match_block;\n\n/* A similar structure is used for the same purpose by the DFA matching\nfunctions. */\n\ntypedef struct dfa_match_block {\n  pcre2_memctl memctl;            /* For general use */\n  PCRE2_SPTR start_code;          /* Start of the compiled pattern */\n  PCRE2_SPTR start_subject ;      /* Start of the subject string */\n  PCRE2_SPTR end_subject;         /* End of subject string */\n  PCRE2_SPTR start_used_ptr;      /* Earliest consulted character */\n  PCRE2_SPTR last_used_ptr;       /* Latest consulted character */\n  const uint8_t *tables;          /* Character tables */\n  PCRE2_SIZE start_offset;        /* The start offset value */\n  uint32_t heap_limit;            /* As it says */\n  PCRE2_SIZE heap_used;           /* As it says */\n  uint32_t match_limit;           /* As it says */\n  uint32_t match_limit_depth;     /* As it says */\n  uint32_t match_call_count;      /* Number of calls of internal function */\n  uint32_t moptions;              /* Match options */\n  uint32_t poptions;              /* Pattern options */\n  uint32_t nltype;                /* Newline type */\n  uint32_t nllen;                 /* Newline string length */\n  BOOL allowemptypartial;         /* Allow empty hard partial */\n  PCRE2_UCHAR nl[4];              /* Newline string when fixed */\n  uint16_t bsr_convention;        /* \\R interpretation */\n  pcre2_callout_block *cb;        /* Points to a callout block */\n  void *callout_data;             /* To pass back to callouts */\n  int (*callout)(pcre2_callout_block *,void *);  /* Callout function or NULL */\n  dfa_recursion_info *recursive;  /* Linked list of pattern recursion data */\n} dfa_match_block;\n\n#endif  /* PCRE2_PCRE2TEST */\n\n#endif /* PCRE2_INTMODEDEP_CAN_DEFINE */\n\n/* End of pcre2_intmodedep.h */\n"
  },
  {
    "path": "src/pcre2_jit_char_inc.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n                    This module by Zoltan Herczeg\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n/* XClass matching code. */\n\n#ifdef SUPPORT_WIDE_CHARS\n\n#define ECLASS_CHAR_DATA STACK_TOP\n#define ECLASS_STACK_DATA STACK_LIMIT\n\n#define SET_CHAR_OFFSET(value) \\\n  if ((value) != charoffset) \\\n    { \\\n    if ((value) < charoffset) \\\n      OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(charoffset - (value))); \\\n    else \\\n      OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)((value) - charoffset)); \\\n    } \\\n  charoffset = (value);\n\n#define READ_FROM_CHAR_LIST(destination) \\\n  if (list_ind <= 1) \\\n    { \\\n    destination = *(const uint16_t*)next_char; \\\n    next_char += 2; \\\n    } \\\n  else \\\n    { \\\n    destination = *(const uint32_t*)next_char; \\\n    next_char += 4; \\\n    }\n\n#define XCLASS_LOCAL_RANGES_SIZE 32\n#define XCLASS_LOCAL_RANGES_LOG2_SIZE 5\n\ntypedef struct xclass_stack_item {\n  sljit_u32 first_item;\n  sljit_u32 last_item;\n  struct sljit_jump *jump;\n} xclass_stack_item;\n\ntypedef struct xclass_ranges {\n  size_t range_count;\n  /* Pointer to ranges. A stack area is provided when a small buffer is enough. */\n  uint32_t *ranges;\n  uint32_t local_ranges[XCLASS_LOCAL_RANGES_SIZE * 2];\n  /* Stack size must be log2(ranges / 2). */\n  xclass_stack_item *stack;\n  xclass_stack_item local_stack[XCLASS_LOCAL_RANGES_LOG2_SIZE];\n} xclass_ranges;\n\nstatic void xclass_compute_ranges(compiler_common *common, PCRE2_SPTR cc, xclass_ranges *ranges)\n{\nDEFINE_COMPILER;\nsize_t range_count = 0, est_range_count;\nsize_t est_stack_size, tmp;\nuint32_t type, list_ind;\nuint32_t est_type;\nuint32_t char_list_add, range_start, range_end;\nconst uint8_t *next_char;\nconst uint8_t *est_next_char;\n#if defined SUPPORT_UNICODE && (PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16)\nBOOL utf = common->utf;\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == [8|16] */\n\nif (*cc == XCL_SINGLE || *cc == XCL_RANGE)\n  {\n  /* Only a few ranges are present. */\n  do\n    {\n    type = *cc++;\n    SLJIT_ASSERT(type == XCL_SINGLE || type == XCL_RANGE);\n    GETCHARINCTEST(range_end, cc);\n    ranges->ranges[range_count] = range_end;\n\n    if (type == XCL_RANGE)\n      {\n      GETCHARINCTEST(range_end, cc);\n      }\n\n    ranges->ranges[range_count + 1] = range_end;\n    range_count += 2;\n    }\n  while (*cc != XCL_END);\n\n  SLJIT_ASSERT(range_count <= XCLASS_LOCAL_RANGES_SIZE);\n  ranges->range_count = range_count;\n  return;\n  }\n\nSLJIT_ASSERT(cc[0] >= XCL_LIST);\n#if PCRE2_CODE_UNIT_WIDTH == 8\ntype = (uint32_t)(cc[0] << 8) | cc[1];\ncc += 2;\n#else\ntype = cc[0];\ncc++;\n#endif  /* CODE_UNIT_WIDTH */\n\n/* Align characters. */\nnext_char = (const uint8_t*)common->start - (GET(cc, 0) << 1);\ntype &= XCL_TYPE_MASK;\n\n/* Estimate size. */\nest_next_char = next_char;\nest_type = type;\nest_range_count = 0;\nlist_ind = 0;\n\nwhile (est_type > 0)\n  {\n  uint32_t item_count = est_type & XCL_ITEM_COUNT_MASK;\n\n  if (item_count == XCL_ITEM_COUNT_MASK)\n    {\n    if (list_ind <= 1)\n      {\n      item_count = *(const uint16_t*)est_next_char;\n      est_next_char += 2;\n      }\n    else\n      {\n      item_count = *(const uint32_t*)est_next_char;\n      est_next_char += 4;\n      }\n    }\n\n  est_type >>= XCL_TYPE_BIT_LEN;\n  est_next_char += (size_t)item_count << (list_ind <= 1 ? 1 : 2);\n  list_ind++;\n  est_range_count += item_count + 1;\n  }\n\nif (est_range_count > XCLASS_LOCAL_RANGES_SIZE)\n  {\n  est_stack_size = 0;\n  tmp = est_range_count - 1;\n\n  /* Compute log2(est_range_count) */\n  while (tmp > 0)\n    {\n    est_stack_size++;\n    tmp >>= 1;\n    }\n\n  ranges->stack = (xclass_stack_item*)SLJIT_MALLOC((sizeof(xclass_stack_item) * est_stack_size)\n    + ((sizeof(uint32_t) << 1) * (size_t)est_range_count), compiler->allocator_data);\n\n  if (ranges->stack == NULL)\n    {\n    sljit_set_compiler_memory_error(compiler);\n    ranges->ranges = NULL;\n    return;\n    }\n\n  ranges->ranges = (uint32_t*)(ranges->stack + est_stack_size);\n  }\n\nchar_list_add = XCL_CHAR_LIST_LOW_16_ADD;\nrange_start = ~(uint32_t)0;\nlist_ind = 0;\n\nif ((type & XCL_BEGIN_WITH_RANGE) != 0)\n  range_start = XCL_CHAR_LIST_LOW_16_START;\n\nwhile (type > 0)\n  {\n  uint32_t item_count = type & XCL_ITEM_COUNT_MASK;\n\n  if (item_count == XCL_ITEM_COUNT_MASK)\n    {\n    READ_FROM_CHAR_LIST(item_count);\n    SLJIT_ASSERT(item_count >= XCL_ITEM_COUNT_MASK);\n    }\n\n  while (item_count > 0)\n    {\n    READ_FROM_CHAR_LIST(range_end);\n\n    if ((range_end & XCL_CHAR_END) != 0)\n      {\n      range_end = char_list_add + (range_end >> XCL_CHAR_SHIFT);\n\n      if (range_start == ~(uint32_t)0)\n        range_start = range_end;\n\n      ranges->ranges[range_count] = range_start;\n      ranges->ranges[range_count + 1] = range_end;\n      range_count += 2;\n      range_start = ~(uint32_t)0;\n      }\n    else\n      range_start = char_list_add + (range_end >> XCL_CHAR_SHIFT);\n\n    item_count--;\n    }\n\n  list_ind++;\n  type >>= XCL_TYPE_BIT_LEN;\n\n  if (range_start == ~(uint32_t)0)\n    {\n    if ((type & XCL_BEGIN_WITH_RANGE) != 0)\n      {\n      if (list_ind == 1) range_start = XCL_CHAR_LIST_HIGH_16_START;\n#if PCRE2_CODE_UNIT_WIDTH == 32\n      else if (list_ind == 2) range_start = XCL_CHAR_LIST_LOW_32_START;\n      else range_start = XCL_CHAR_LIST_HIGH_32_START;\n#else\n      else range_start = XCL_CHAR_LIST_LOW_32_START;\n#endif\n      }\n    }\n  else if ((type & XCL_BEGIN_WITH_RANGE) == 0)\n    {\n    if (list_ind == 1) range_end = XCL_CHAR_LIST_LOW_16_END;\n    else if (list_ind == 2) range_end = XCL_CHAR_LIST_HIGH_16_END;\n#if PCRE2_CODE_UNIT_WIDTH == 32\n    else if (list_ind == 3) range_end = XCL_CHAR_LIST_LOW_32_END;\n    else range_end = XCL_CHAR_LIST_HIGH_32_END;\n#else\n    else range_end = XCL_CHAR_LIST_LOW_32_END;\n#endif\n\n    ranges->ranges[range_count] = range_start;\n    ranges->ranges[range_count + 1] = range_end;\n    range_count += 2;\n    range_start = ~(uint32_t)0;\n    }\n\n  if (list_ind == 1) char_list_add = XCL_CHAR_LIST_HIGH_16_ADD;\n#if PCRE2_CODE_UNIT_WIDTH == 32\n  else if (list_ind == 2) char_list_add = XCL_CHAR_LIST_LOW_32_ADD;\n  else char_list_add = XCL_CHAR_LIST_HIGH_32_ADD;\n#else\n  else char_list_add = XCL_CHAR_LIST_LOW_32_ADD;\n#endif\n  }\n\nSLJIT_ASSERT(range_count > 0 && range_count <= (est_range_count << 1));\nSLJIT_ASSERT(next_char <= (const uint8_t*)common->start);\nranges->range_count = range_count;\n}\n\nstatic void xclass_check_bitset(compiler_common *common, const sljit_u8 *bitset, jump_list **found, jump_list **backtracks)\n{\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\n\njump = CMP(SLJIT_GREATER, TMP1, 0, SLJIT_IMM, 255);\nif (!optimize_class(common, bitset, (bitset[31] & 0x80) != 0, TRUE, found))\n  {\n  OP2(SLJIT_AND, TMP2, 0, TMP1, 0, SLJIT_IMM, 0x7);\n  OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3);\n  OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)bitset);\n  OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0);\n  OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP2, 0);\n  add_jump(compiler, found, JUMP(SLJIT_NOT_ZERO));\n  }\n\nadd_jump(compiler, backtracks, JUMP(SLJIT_JUMP));\nJUMPHERE(jump);\n}\n\n#if defined SUPPORT_UNICODE && (PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16)\n\nstatic void xclass_update_min_max(compiler_common *common, PCRE2_SPTR cc, sljit_u32 *min_ptr, sljit_u32 *max_ptr)\n{\nuint32_t type, list_ind, c;\nsljit_u32 min = *min_ptr;\nsljit_u32 max = *max_ptr;\nuint32_t char_list_add;\nconst uint8_t *next_char;\nBOOL utf = TRUE;\n\n/* This function is pointless without utf 8/16. */\nSLJIT_ASSERT(common->utf);\nif (*cc == XCL_SINGLE || *cc == XCL_RANGE)\n  {\n  /* Only a few ranges are present. */\n  do\n    {\n    type = *cc++;\n    SLJIT_ASSERT(type == XCL_SINGLE || type == XCL_RANGE);\n    GETCHARINCTEST(c, cc);\n\n    if (c < min)\n      min = c;\n\n    if (type == XCL_RANGE)\n      {\n      GETCHARINCTEST(c, cc);\n      }\n\n    if (c > max)\n      max = c;\n    }\n  while (*cc != XCL_END);\n\n  SLJIT_ASSERT(min <= MAX_UTF_CODE_POINT && max <= MAX_UTF_CODE_POINT && min <= max);\n  *min_ptr = min;\n  *max_ptr = max;\n  return;\n  }\n\nSLJIT_ASSERT(cc[0] >= XCL_LIST);\n#if PCRE2_CODE_UNIT_WIDTH == 8\ntype = (uint32_t)(cc[0] << 8) | cc[1];\ncc += 2;\n#else\ntype = cc[0];\ncc++;\n#endif  /* CODE_UNIT_WIDTH */\n\n/* Align characters. */\nnext_char = (const uint8_t*)common->start - (GET(cc, 0) << 1);\ntype &= XCL_TYPE_MASK;\n\nSLJIT_ASSERT(type != 0);\n\n/* Detect minimum. */\n\n/* Skip unused ranges. */\nlist_ind = 0;\nwhile ((type & (XCL_BEGIN_WITH_RANGE | XCL_ITEM_COUNT_MASK)) == 0)\n  {\n  type >>= XCL_TYPE_BIT_LEN;\n  list_ind++;\n  }\n\nSLJIT_ASSERT(list_ind <= 2);\nswitch (list_ind)\n  {\n  case 0:\n  char_list_add = XCL_CHAR_LIST_LOW_16_ADD;\n  c = XCL_CHAR_LIST_LOW_16_START;\n  break;\n\n  case 1:\n  char_list_add = XCL_CHAR_LIST_HIGH_16_ADD;\n  c = XCL_CHAR_LIST_HIGH_16_START;\n  break;\n\n  default:\n  char_list_add = XCL_CHAR_LIST_LOW_32_ADD;\n  c = XCL_CHAR_LIST_LOW_32_START;\n  break;\n  }\n\nif ((type & XCL_BEGIN_WITH_RANGE) != 0)\n  {\n  if (c < min)\n    min = c;\n  }\nelse\n  {\n  if ((type & XCL_ITEM_COUNT_MASK) == XCL_ITEM_COUNT_MASK)\n    {\n    if (list_ind <= 1)\n      c = *(const uint16_t*)(next_char + 2);\n    else\n      c = *(const uint32_t*)(next_char + 4);\n    }\n  else\n    {\n    if (list_ind <= 1)\n      c = *(const uint16_t*)next_char;\n    else\n      c = *(const uint32_t*)next_char;\n    }\n\n  c = char_list_add + (c >> XCL_CHAR_SHIFT);\n  if (c < min)\n    min = c;\n  }\n\n/* Detect maximum. */\n\n/* Skip intermediate ranges. */\nwhile (TRUE)\n  {\n  if ((type & XCL_ITEM_COUNT_MASK) == XCL_ITEM_COUNT_MASK)\n    {\n    if (list_ind <= 1)\n      {\n      c = *(const uint16_t*)next_char;\n      next_char += (c + 1) << 1;\n      }\n    else\n      {\n      c = *(const uint32_t*)next_char;\n      next_char += (c + 1) << 2;\n      }\n    }\n  else\n    next_char += (type & XCL_ITEM_COUNT_MASK) << (list_ind <= 1 ? 1 : 2);\n\n  if ((type >> XCL_TYPE_BIT_LEN) == 0)\n    break;\n\n  list_ind++;\n  type >>= XCL_TYPE_BIT_LEN;\n  }\n\nSLJIT_ASSERT(list_ind <= 2 && type != 0);\nswitch (list_ind)\n  {\n  case 0:\n  char_list_add = XCL_CHAR_LIST_LOW_16_ADD;\n  c = XCL_CHAR_LIST_LOW_16_END;\n  break;\n\n  case 1:\n  char_list_add = XCL_CHAR_LIST_HIGH_16_ADD;\n  c = XCL_CHAR_LIST_HIGH_16_END;\n  break;\n\n  default:\n  char_list_add = XCL_CHAR_LIST_LOW_32_ADD;\n  c = XCL_CHAR_LIST_LOW_32_END;\n  break;\n  }\n\nif ((type & XCL_ITEM_COUNT_MASK) != 0)\n  {\n  /* Type is reused as temporary. */\n  if (list_ind <= 1)\n    type = *(const uint16_t*)(next_char - 2);\n  else\n    type = *(const uint32_t*)(next_char - 4);\n\n  if (type & XCL_CHAR_END)\n    c = char_list_add + (type >> XCL_CHAR_SHIFT);\n  }\n\nif (c > max)\n  max = c;\n\nSLJIT_ASSERT(min <= MAX_UTF_CODE_POINT && max <= MAX_UTF_CODE_POINT && min <= max);\n*min_ptr = min;\n*max_ptr = max;\n}\n\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == [8|16] */\n\n#define XCLASS_IS_ECLASS 0x001\n#ifdef SUPPORT_UNICODE\n#define XCLASS_SAVE_CHAR 0x002\n#define XCLASS_HAS_TYPE 0x004\n#define XCLASS_HAS_SCRIPT 0x008\n#define XCLASS_HAS_SCRIPT_EXTENSION 0x010\n#define XCLASS_HAS_BOOL 0x020\n#define XCLASS_HAS_BIDICL 0x040\n#define XCLASS_NEEDS_UCD (XCLASS_HAS_TYPE | XCLASS_HAS_SCRIPT | XCLASS_HAS_SCRIPT_EXTENSION | XCLASS_HAS_BOOL | XCLASS_HAS_BIDICL)\n#define XCLASS_SCRIPT_EXTENSION_NOTPROP 0x080\n#define XCLASS_SCRIPT_EXTENSION_RESTORE_RETURN_ADDR 0x100\n#define XCLASS_SCRIPT_EXTENSION_RESTORE_LOCAL0 0x200\n#endif /* SUPPORT_UNICODE */\n\nstatic PCRE2_SPTR compile_char1_matchingpath(compiler_common *common, PCRE2_UCHAR type, PCRE2_SPTR cc, jump_list **backtracks, BOOL check_str_ptr);\n\n/* TMP3 must be preserved because it is used by compile_iterator_matchingpath. */\nstatic void compile_xclass_matchingpath(compiler_common *common, PCRE2_SPTR cc, jump_list **backtracks, sljit_u32 status)\n{\nDEFINE_COMPILER;\njump_list *found = NULL;\njump_list *check_result = NULL;\njump_list **list = (cc[0] & XCL_NOT) == 0 ? &found : backtracks;\nsljit_uw c, charoffset;\nsljit_u32 max = READ_CHAR_MAX, min = 0;\nstruct sljit_jump *jump = NULL;\nPCRE2_UCHAR flags;\nPCRE2_SPTR ccbegin;\nsljit_u32 compares, invertcmp, depth;\nsljit_u32 first_item, last_item, mid_item;\nsljit_u32 range_start, range_end;\nxclass_ranges ranges;\nBOOL has_cmov, last_range_set;\n\n#ifdef SUPPORT_UNICODE\nsljit_u32 category_list = 0;\nsljit_u32 items;\nint typereg = TMP1;\n#else\n(void)c; /* Avoid compiler warning. */\n#endif /* SUPPORT_UNICODE */\n\nSLJIT_ASSERT(common->locals_size >= SSIZE_OF(sw));\n/* Scanning the necessary info. */\nflags = *cc++;\nccbegin = cc;\ncompares = 0;\n\nif (flags & XCL_MAP)\n  cc += 32 / sizeof(PCRE2_UCHAR);\n\n#ifdef SUPPORT_UNICODE\nwhile (*cc == XCL_PROP || *cc == XCL_NOTPROP)\n  {\n  compares++;\n  cc++;\n\n  items = 0;\n\n  switch(*cc)\n    {\n    case PT_LAMP:\n    items = UCPCAT3(ucp_Lu, ucp_Ll, ucp_Lt);\n    break;\n\n    case PT_GC:\n    items = UCPCAT_RANGE(PRIV(ucp_typerange)[(int)cc[1] * 2], PRIV(ucp_typerange)[(int)cc[1] * 2 + 1]);\n    break;\n\n    case PT_PC:\n    items = UCPCAT(cc[1]);\n    break;\n\n    case PT_WORD:\n    items = UCPCAT2(ucp_Mn, ucp_Pc) | UCPCAT_L | UCPCAT_N;\n    break;\n\n    case PT_ALNUM:\n    items = UCPCAT_L | UCPCAT_N;\n    break;\n\n    case PT_SCX:\n    status |= XCLASS_HAS_SCRIPT_EXTENSION;\n    if (cc[-1] == XCL_NOTPROP)\n      {\n      status |= XCLASS_SCRIPT_EXTENSION_NOTPROP;\n      break;\n      }\n    compares++;\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case PT_SC:\n    status |= XCLASS_HAS_SCRIPT;\n    break;\n\n    case PT_SPACE:\n    case PT_PXSPACE:\n    case PT_PXGRAPH:\n    case PT_PXPRINT:\n    case PT_PXPUNCT:\n    status |= XCLASS_SAVE_CHAR | XCLASS_HAS_TYPE;\n    break;\n\n    case PT_UCNC:\n    case PT_PXXDIGIT:\n    status |= XCLASS_SAVE_CHAR;\n    break;\n\n    case PT_BOOL:\n    status |= XCLASS_HAS_BOOL;\n    break;\n\n    case PT_BIDICL:\n    status |= XCLASS_HAS_BIDICL;\n    break;\n\n    default:\n    SLJIT_UNREACHABLE();\n    break;\n    }\n\n  if (items > 0)\n    {\n    if (cc[-1] == XCL_NOTPROP)\n      items ^= UCPCAT_ALL;\n    category_list |= items;\n    status |= XCLASS_HAS_TYPE;\n    compares--;\n    }\n\n  cc += 2;\n  }\n\nif (category_list == UCPCAT_ALL)\n  {\n  /* All or no characters are accepted, same as dotall. */\n  if (status & XCLASS_IS_ECLASS)\n    {\n    if (list != backtracks)\n      OP2(SLJIT_OR, ECLASS_STACK_DATA, 0, ECLASS_STACK_DATA, 0, SLJIT_IMM, 1);\n    return;\n    }\n\n  compile_char1_matchingpath(common, OP_ALLANY, cc, backtracks, FALSE);\n  if (list == backtracks)\n    add_jump(compiler, backtracks, JUMP(SLJIT_JUMP));\n  return;\n  }\n\nif (category_list != 0)\n  compares++;\n#endif\n\nif (*cc != XCL_END)\n  {\n#if defined SUPPORT_UNICODE && (PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16)\n  if (common->utf && compares == 0 && !(status & XCLASS_IS_ECLASS))\n    {\n    SLJIT_ASSERT(category_list == 0);\n    max = 0;\n    min = (flags & XCL_MAP) != 0 ? 0 : READ_CHAR_MAX;\n    xclass_update_min_max(common, cc, &min, &max);\n    }\n#endif\n  compares++;\n#ifdef SUPPORT_UNICODE\n  status |= XCLASS_SAVE_CHAR;\n#endif /* SUPPORT_UNICODE */\n  }\n\n#ifdef SUPPORT_UNICODE\nSLJIT_ASSERT(compares > 0 || category_list != 0);\n#else /* !SUPPORT_UNICODE */\nSLJIT_ASSERT(compares > 0);\n#endif /* SUPPORT_UNICODE */\n\n/* We are not necessary in utf mode even in 8 bit mode. */\ncc = ccbegin;\nif (!(status & XCLASS_IS_ECLASS))\n  {\n  if ((flags & XCL_NOT) != 0)\n    read_char(common, min, max, backtracks, READ_CHAR_UPDATE_STR_PTR);\n  else\n    {\n#ifdef SUPPORT_UNICODE\n    read_char(common, min, max, (status & XCLASS_NEEDS_UCD) ? backtracks : NULL, 0);\n#else /* !SUPPORT_UNICODE */\n    read_char(common, min, max, NULL, 0);\n#endif /* SUPPORT_UNICODE */\n    }\n  }\n\nif ((flags & XCL_MAP) != 0)\n  {\n  SLJIT_ASSERT(!(status & XCLASS_IS_ECLASS));\n  xclass_check_bitset(common, (const sljit_u8 *)cc, &found, backtracks);\n  cc += 32 / sizeof(PCRE2_UCHAR);\n  }\n\n#ifdef SUPPORT_UNICODE\nif (status & XCLASS_NEEDS_UCD)\n  {\n  if ((status & (XCLASS_SAVE_CHAR | XCLASS_IS_ECLASS)) == XCLASS_SAVE_CHAR)\n    OP1(SLJIT_MOV, RETURN_ADDR, 0, TMP1, 0);\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\n  if (!common->utf)\n    {\n    OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, MAX_UTF_CODE_POINT + 1);\n    SELECT(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, UNASSIGNED_UTF_CHAR, TMP1);\n    }\n#endif /* PCRE2_CODE_UNIT_WIDTH == 32 */\n\n  OP2(SLJIT_LSHR, TMP2, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_SHIFT);\n  OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 1);\n  OP1(SLJIT_MOV_U16, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_stage1));\n  OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_MASK);\n  sljit_emit_op2_shift(compiler, SLJIT_ADD | SLJIT_SHL_IMM | SLJIT_SRC2_UNDEFINED, TMP1, 0, TMP1, 0, TMP2, 0, UCD_BLOCK_SHIFT);\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_stage2));\n  OP1(SLJIT_MOV_U16, TMP2, 0, SLJIT_MEM2(TMP2, TMP1), 1);\n  sljit_emit_op2_shift(compiler, SLJIT_ADD | SLJIT_SHL_IMM | SLJIT_SRC2_UNDEFINED, TMP2, 0, TMP2, 0, TMP2, 0, 1);\n  OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2);\n\n  ccbegin = cc;\n\n  if (status & XCLASS_HAS_BIDICL)\n    {\n    OP1(SLJIT_MOV_U16, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, scriptx_bidiclass));\n    OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BIDICLASS_SHIFT);\n\n    while (*cc == XCL_PROP || *cc == XCL_NOTPROP)\n      {\n      cc++;\n\n      if (*cc == PT_BIDICL)\n        {\n        compares--;\n        invertcmp = (compares == 0 && list != backtracks);\n        if (cc[-1] == XCL_NOTPROP)\n          invertcmp ^= 0x1;\n        jump = CMP(SLJIT_EQUAL ^ invertcmp, TMP1, 0, SLJIT_IMM, (int)cc[1]);\n        add_jump(compiler, compares > 0 ? list : backtracks, jump);\n        }\n      cc += 2;\n      }\n\n    cc = ccbegin;\n    }\n\n  if (status & XCLASS_HAS_BOOL)\n    {\n    OP1(SLJIT_MOV_U16, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, bprops));\n    OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BPROPS_MASK);\n    OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 2);\n\n    while (*cc == XCL_PROP || *cc == XCL_NOTPROP)\n      {\n      cc++;\n      if (*cc == PT_BOOL)\n        {\n        compares--;\n        invertcmp = (compares == 0 && list != backtracks);\n        if (cc[-1] == XCL_NOTPROP)\n          invertcmp ^= 0x1;\n\n        OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), (sljit_sw)(PRIV(ucd_boolprop_sets) + (cc[1] >> 5)), SLJIT_IMM, (sljit_sw)(1u << (cc[1] & 0x1f)));\n        add_jump(compiler, compares > 0 ? list : backtracks, JUMP(SLJIT_NOT_ZERO ^ invertcmp));\n        }\n      cc += 2;\n      }\n\n    cc = ccbegin;\n    }\n\n  if (status & XCLASS_HAS_SCRIPT)\n    {\n    OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script));\n\n    while (*cc == XCL_PROP || *cc == XCL_NOTPROP)\n      {\n      cc++;\n\n      switch (*cc)\n        {\n        case PT_SCX:\n        if (cc[-1] == XCL_NOTPROP)\n          break;\n        PCRE2_FALLTHROUGH /* Fall through */\n\n        case PT_SC:\n        compares--;\n        invertcmp = (compares == 0 && list != backtracks);\n        if (cc[-1] == XCL_NOTPROP)\n          invertcmp ^= 0x1;\n\n        add_jump(compiler, compares > 0 ? list : backtracks, CMP(SLJIT_EQUAL ^ invertcmp, TMP1, 0, SLJIT_IMM, (int)cc[1]));\n        }\n      cc += 2;\n      }\n\n    cc = ccbegin;\n    }\n\n  if (status & XCLASS_HAS_SCRIPT_EXTENSION)\n    {\n    OP1(SLJIT_MOV_U16, TMP1, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, scriptx_bidiclass));\n    OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_SCRIPTX_MASK);\n    OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 2);\n\n    if (status & XCLASS_SCRIPT_EXTENSION_NOTPROP)\n      {\n      if (status & XCLASS_HAS_TYPE)\n        {\n        if ((status & (XCLASS_SAVE_CHAR | XCLASS_IS_ECLASS)) == XCLASS_SAVE_CHAR)\n          {\n          OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL0, TMP2, 0);\n          status |= XCLASS_SCRIPT_EXTENSION_RESTORE_LOCAL0;\n          }\n        else\n          {\n          OP1(SLJIT_MOV, RETURN_ADDR, 0, TMP2, 0);\n          status |= XCLASS_SCRIPT_EXTENSION_RESTORE_RETURN_ADDR;\n          }\n        }\n      OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, script));\n      }\n\n    while (*cc == XCL_PROP || *cc == XCL_NOTPROP)\n      {\n      cc++;\n\n      if (*cc == PT_SCX)\n        {\n        compares--;\n        invertcmp = (compares == 0 && list != backtracks);\n\n        jump = NULL;\n        if (cc[-1] == XCL_NOTPROP)\n          {\n          jump = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, (int)cc[1]);\n          if (invertcmp)\n            {\n            add_jump(compiler, backtracks, jump);\n            jump = NULL;\n            }\n          invertcmp ^= 0x1;\n          }\n\n        OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), (sljit_sw)(PRIV(ucd_script_sets) + (cc[1] >> 5)), SLJIT_IMM, (sljit_sw)(1u << (cc[1] & 0x1f)));\n        add_jump(compiler, compares > 0 ? list : backtracks, JUMP(SLJIT_NOT_ZERO ^ invertcmp));\n\n        if (jump != NULL)\n          JUMPHERE(jump);\n        }\n      cc += 2;\n      }\n\n    if (status & XCLASS_SCRIPT_EXTENSION_RESTORE_LOCAL0)\n      OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\n    else if (status & XCLASS_SCRIPT_EXTENSION_RESTORE_RETURN_ADDR)\n      OP1(SLJIT_MOV, TMP2, 0, RETURN_ADDR, 0);\n    cc = ccbegin;\n    }\n\n  if (status & XCLASS_SAVE_CHAR)\n    OP1(SLJIT_MOV, TMP1, 0, (status & XCLASS_IS_ECLASS) ? ECLASS_CHAR_DATA : RETURN_ADDR, 0);\n\n  if (status & XCLASS_HAS_TYPE)\n    {\n    if (status & XCLASS_SAVE_CHAR)\n      typereg = RETURN_ADDR;\n\n    OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype));\n    OP2(SLJIT_SHL, typereg, 0, SLJIT_IMM, 1, TMP2, 0);\n\n    if (category_list > 0)\n      {\n      compares--;\n      invertcmp = (compares == 0 && list != backtracks);\n      OP2U(SLJIT_AND | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, category_list);\n      add_jump(compiler, compares > 0 ? list : backtracks, JUMP(SLJIT_NOT_ZERO ^ invertcmp));\n      }\n    }\n  }\n#endif /* SUPPORT_UNICODE */\n\n/* Generating code. */\ncharoffset = 0;\n\n#ifdef SUPPORT_UNICODE\nwhile (*cc == XCL_PROP || *cc == XCL_NOTPROP)\n  {\n  compares--;\n  invertcmp = (compares == 0 && list != backtracks);\n  jump = NULL;\n\n  if (*cc == XCL_NOTPROP)\n    invertcmp ^= 0x1;\n  cc++;\n  switch(*cc)\n    {\n    case PT_LAMP:\n    case PT_GC:\n    case PT_PC:\n    case PT_SC:\n    case PT_SCX:\n    case PT_BOOL:\n    case PT_BIDICL:\n    case PT_WORD:\n    case PT_ALNUM:\n    compares++;\n    /* Already handled. */\n    break;\n\n    case PT_SPACE:\n    case PT_PXSPACE:\n    SET_CHAR_OFFSET(9);\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0xd - 0x9);\n    OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL);\n\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x85 - 0x9);\n    OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x180e - 0x9);\n    OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n\n    OP2U(SLJIT_AND | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, UCPCAT_RANGE(ucp_Zl, ucp_Zs));\n    OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_NOT_ZERO);\n    jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp);\n    break;\n\n    case PT_UCNC:\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_DOLLAR_SIGN - charoffset));\n    OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL);\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_COMMERCIAL_AT - charoffset));\n    OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(CHAR_GRAVE_ACCENT - charoffset));\n    OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n\n    SET_CHAR_OFFSET(0xa0);\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, (sljit_sw)(0xd7ff - charoffset));\n    OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL);\n    SET_CHAR_OFFSET(0);\n    OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xe000 - 0);\n    OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_GREATER_EQUAL);\n    jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp);\n    break;\n\n    case PT_PXGRAPH:\n    OP2U(SLJIT_AND | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, UCPCAT_RANGE(ucp_Cc, ucp_Cs) | UCPCAT_RANGE(ucp_Zl, ucp_Zs));\n    OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_NOT_ZERO);\n\n    OP2U(SLJIT_AND | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, UCPCAT(ucp_Cf));\n    jump = JUMP(SLJIT_ZERO);\n\n    c = charoffset;\n    /* In case of ucp_Cf, we overwrite the result. */\n    SET_CHAR_OFFSET(0x2066);\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066);\n    OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL);\n\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066);\n    OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x180e - 0x2066);\n    OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n\n    /* Restore charoffset. */\n    SET_CHAR_OFFSET(c);\n\n    JUMPHERE(jump);\n    jump = CMP(SLJIT_ZERO ^ invertcmp, TMP2, 0, SLJIT_IMM, 0);\n    break;\n\n    case PT_PXPRINT:\n    OP2U(SLJIT_AND | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, UCPCAT_RANGE(ucp_Cc, ucp_Cs) | UCPCAT2(ucp_Zl, ucp_Zp));\n    OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_NOT_ZERO);\n\n    OP2U(SLJIT_AND | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, UCPCAT(ucp_Cf));\n    jump = JUMP(SLJIT_ZERO);\n\n    c = charoffset;\n    /* In case of ucp_Cf, we overwrite the result. */\n    SET_CHAR_OFFSET(0x2066);\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x2069 - 0x2066);\n    OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL);\n\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x061c - 0x2066);\n    OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n\n    /* Restore charoffset. */\n    SET_CHAR_OFFSET(c);\n\n    JUMPHERE(jump);\n    jump = CMP(SLJIT_ZERO ^ invertcmp, TMP2, 0, SLJIT_IMM, 0);\n    break;\n\n    case PT_PXPUNCT:\n    OP2U(SLJIT_AND | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, UCPCAT_RANGE(ucp_Sc, ucp_So));\n    OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_NOT_ZERO);\n\n    SET_CHAR_OFFSET(0);\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x7f);\n    OP_FLAGS(SLJIT_AND, TMP2, 0, SLJIT_LESS_EQUAL);\n\n    OP2U(SLJIT_AND | SLJIT_SET_Z, typereg, 0, SLJIT_IMM, UCPCAT_RANGE(ucp_Pc, ucp_Ps));\n    OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_NOT_ZERO);\n    jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp);\n    break;\n\n    case PT_PXXDIGIT:\n    SET_CHAR_OFFSET(CHAR_A);\n    OP2(SLJIT_AND, TMP2, 0, TMP1, 0, SLJIT_IMM, ~0x20);\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP2, 0, SLJIT_IMM, CHAR_F - CHAR_A);\n    OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL);\n\n    SET_CHAR_OFFSET(CHAR_0);\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_9 - CHAR_0);\n    OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL);\n\n    SET_CHAR_OFFSET(0xff10);\n    jump = CMP(SLJIT_GREATER, TMP1, 0, SLJIT_IMM, 0xff46 - 0xff10);\n\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0xff19 - 0xff10);\n    OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL);\n\n    SET_CHAR_OFFSET(0xff21);\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0xff26 - 0xff21);\n    OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL);\n\n    SET_CHAR_OFFSET(0xff41);\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0xff46 - 0xff41);\n    OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL);\n\n    SET_CHAR_OFFSET(0xff10);\n\n    JUMPHERE(jump);\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, 0);\n    jump = JUMP(SLJIT_NOT_ZERO ^ invertcmp);\n    break;\n\n    default:\n    SLJIT_UNREACHABLE();\n    break;\n    }\n\n  cc += 2;\n\n  if (jump != NULL)\n    add_jump(compiler, compares > 0 ? list : backtracks, jump);\n  }\n\nif (compares == 0)\n  {\n  if (found != NULL)\n    set_jumps(found, LABEL());\n\n  if (status & XCLASS_IS_ECLASS)\n    OP2(SLJIT_OR, ECLASS_STACK_DATA, 0, ECLASS_STACK_DATA, 0, SLJIT_IMM, 1);\n  return;\n  }\n#endif /* SUPPORT_UNICODE */\n\nSLJIT_ASSERT(compares == 1);\nranges.range_count = 0;\nranges.ranges = ranges.local_ranges;\nranges.stack = ranges.local_stack;\n\nxclass_compute_ranges(common, cc, &ranges);\n\n/* Memory error is set for the compiler. */\nif (ranges.stack == NULL)\n  return;\n\n#if (defined SLJIT_DEBUG && SLJIT_DEBUG) && \\\n  defined SUPPORT_UNICODE && (PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16)\nif (common->utf)\n  {\n  min = READ_CHAR_MAX;\n  max = 0;\n  xclass_update_min_max(common, cc, &min, &max);\n  SLJIT_ASSERT(ranges.ranges[0] == min && ranges.ranges[ranges.range_count - 1] == max);\n  }\n#endif /* SLJIT_DEBUG && SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == [8|16] */\n\ninvertcmp = (list != backtracks);\n\nif (ranges.range_count == 2)\n  {\n  range_start = ranges.ranges[0];\n  range_end = ranges.ranges[1];\n\n  if (range_start < range_end)\n    {\n    SET_CHAR_OFFSET(range_start);\n    jump = CMP(SLJIT_LESS_EQUAL ^ invertcmp, TMP1, 0, SLJIT_IMM, (sljit_sw)(range_end - range_start));\n    }\n  else\n    jump = CMP(SLJIT_EQUAL ^ invertcmp, TMP1, 0, SLJIT_IMM, (sljit_sw)(range_start - charoffset));\n\n  add_jump(compiler, backtracks, jump);\n\n  SLJIT_ASSERT(ranges.stack == ranges.local_stack);\n  if (found != NULL)\n    set_jumps(found, LABEL());\n\n  if (status & XCLASS_IS_ECLASS)\n    OP2(SLJIT_OR, ECLASS_STACK_DATA, 0, ECLASS_STACK_DATA, 0, SLJIT_IMM, 1);\n  return;\n  }\n\nrange_start = ranges.ranges[0];\nSET_CHAR_OFFSET(range_start);\nif (ranges.range_count >= 6)\n  {\n  /* Early fail. */\n  range_end = ranges.ranges[ranges.range_count - 1];\n  add_jump(compiler, (flags & XCL_NOT) == 0 ? backtracks : &found,\n    CMP(SLJIT_GREATER, TMP1, 0, SLJIT_IMM, (sljit_sw)(range_end - range_start)));\n  }\n\ndepth = 0;\nfirst_item = 0;\nlast_item = (sljit_u32)(ranges.range_count - 2);\nhas_cmov = sljit_has_cpu_feature(SLJIT_HAS_CMOV) != 0;\n\nwhile (TRUE)\n  {\n  /* At least two items are present. */\n  SLJIT_ASSERT(first_item < last_item && charoffset == ranges.ranges[0]);\n  last_range_set = FALSE;\n\n  if (first_item + 6 <= last_item)\n    {\n    mid_item = ((first_item + last_item) >> 1) & ~(sljit_u32)1;\n    SLJIT_ASSERT(last_item >= mid_item + 4);\n\n    range_end = ranges.ranges[mid_item + 1];\n    if (first_item + 6 > mid_item && ranges.ranges[mid_item] == range_end)\n      {\n      OP2U(SLJIT_SUB | SLJIT_SET_GREATER | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(range_end - charoffset));\n      ranges.stack[depth].jump = JUMP(SLJIT_GREATER);\n      OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL);\n      last_range_set = TRUE;\n      }\n    else\n      ranges.stack[depth].jump = CMP(SLJIT_GREATER, TMP1, 0, SLJIT_IMM, (sljit_sw)(range_end - charoffset));\n\n    ranges.stack[depth].first_item = (sljit_u32)(mid_item + 2);\n    ranges.stack[depth].last_item = (sljit_u32)last_item;\n\n    depth++;\n    SLJIT_ASSERT(ranges.stack == ranges.local_stack ?\n      depth <= XCLASS_LOCAL_RANGES_LOG2_SIZE : (ranges.stack + depth) <= (xclass_stack_item*)ranges.ranges);\n\n    last_item = mid_item;\n    if (!last_range_set)\n      continue;\n\n    last_item -= 2;\n    }\n\n  if (!last_range_set)\n    {\n    range_start = ranges.ranges[first_item];\n    range_end = ranges.ranges[first_item + 1];\n\n    if (range_start < range_end)\n      {\n      SET_CHAR_OFFSET(range_start);\n      OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, (sljit_sw)(range_end - range_start));\n      OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL);\n      }\n    else\n      {\n      OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(range_start - charoffset));\n      OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL);\n      }\n    first_item += 2;\n    }\n\n  SLJIT_ASSERT(first_item <= last_item);\n\n  do\n    {\n    range_start = ranges.ranges[first_item];\n    range_end = ranges.ranges[first_item + 1];\n\n    if (range_start < range_end)\n      {\n      SET_CHAR_OFFSET(range_start);\n      OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, (sljit_sw)(range_end - range_start));\n\n      if (has_cmov)\n        SELECT(SLJIT_LESS_EQUAL, TMP2, STR_END, 0, TMP2);\n      else\n        OP_FLAGS(SLJIT_OR | ((first_item == last_item) ? SLJIT_SET_Z : 0), TMP2, 0, SLJIT_LESS_EQUAL);\n      }\n    else\n      {\n      OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(range_start - charoffset));\n\n      if (has_cmov)\n        SELECT(SLJIT_EQUAL, TMP2, STR_END, 0, TMP2);\n      else\n        OP_FLAGS(SLJIT_OR | ((first_item == last_item) ? SLJIT_SET_Z : 0), TMP2, 0, SLJIT_EQUAL);\n      }\n\n    first_item += 2;\n    }\n  while (first_item <= last_item);\n\n  if (depth == 0) break;\n\n  add_jump(compiler, &check_result, JUMP(SLJIT_JUMP));\n\n  /* The charoffset resets after the end of a branch is reached. */\n  charoffset = ranges.ranges[0];\n  depth--;\n  first_item = ranges.stack[depth].first_item;\n  last_item = ranges.stack[depth].last_item;\n  JUMPHERE(ranges.stack[depth].jump);\n  }\n\nif (check_result != NULL)\n  set_jumps(check_result, LABEL());\n\nif (has_cmov)\n  jump = CMP(SLJIT_NOT_EQUAL ^ invertcmp, TMP2, 0, SLJIT_IMM, 0);\nelse\n  {\n  sljit_set_current_flags(compiler, SLJIT_SET_Z);\n  jump = JUMP(SLJIT_NOT_EQUAL ^ invertcmp);\n  }\n\nadd_jump(compiler, backtracks, jump);\n\nif (found != NULL)\n  set_jumps(found, LABEL());\n\nif (status & XCLASS_IS_ECLASS)\n  OP2(SLJIT_OR, ECLASS_STACK_DATA, 0, ECLASS_STACK_DATA, 0, SLJIT_IMM, 1);\n\nif (ranges.stack != ranges.local_stack)\n  SLJIT_FREE(ranges.stack, compiler->allocator_data);\n}\n\nstatic PCRE2_SPTR compile_eclass_matchingpath(compiler_common *common, PCRE2_SPTR cc, jump_list **backtracks)\n{\nDEFINE_COMPILER;\nPCRE2_SPTR end = cc + GET(cc, 0) - 1;\nPCRE2_SPTR begin;\njump_list *not_found;\njump_list *found = NULL;\n\ncc += LINK_SIZE;\n\n/* Should be optimized later. */\nread_char(common, 0, READ_CHAR_MAX, backtracks, 0);\n\nif (((*cc++) & ECL_MAP) != 0)\n  {\n  xclass_check_bitset(common, (const sljit_u8 *)cc, &found, backtracks);\n  cc += 32 / sizeof(PCRE2_UCHAR);\n  }\n\nbegin = cc;\n\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL0, ECLASS_CHAR_DATA, 0);\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL1, ECLASS_STACK_DATA, 0);\nOP1(SLJIT_MOV, ECLASS_STACK_DATA, 0, SLJIT_IMM, 0);\nOP1(SLJIT_MOV, ECLASS_CHAR_DATA, 0, TMP1, 0);\n\n/* All eclass must start with an xclass. */\nSLJIT_ASSERT(*cc == ECL_XCLASS);\n\nwhile (cc < end)\n  {\n  switch (*cc)\n    {\n    case ECL_AND:\n    ++cc;\n    OP2(SLJIT_OR, TMP2, 0, ECLASS_STACK_DATA, 0, SLJIT_IMM, ~(sljit_sw)1);\n    OP2(SLJIT_LSHR, ECLASS_STACK_DATA, 0, ECLASS_STACK_DATA, 0, SLJIT_IMM, 1);\n    OP2(SLJIT_AND, ECLASS_STACK_DATA, 0, ECLASS_STACK_DATA, 0, TMP2, 0);\n    break;\n\n    case ECL_OR:\n    ++cc;\n    OP2(SLJIT_AND, TMP2, 0, ECLASS_STACK_DATA, 0, SLJIT_IMM, 1);\n    OP2(SLJIT_LSHR, ECLASS_STACK_DATA, 0, ECLASS_STACK_DATA, 0, SLJIT_IMM, 1);\n    OP2(SLJIT_OR, ECLASS_STACK_DATA, 0, ECLASS_STACK_DATA, 0, TMP2, 0);\n    break;\n\n    case ECL_XOR:\n    ++cc;\n    OP2(SLJIT_AND, TMP2, 0, ECLASS_STACK_DATA, 0, SLJIT_IMM, 1);\n    OP2(SLJIT_LSHR, ECLASS_STACK_DATA, 0, ECLASS_STACK_DATA, 0, SLJIT_IMM, 1);\n    OP2(SLJIT_XOR, ECLASS_STACK_DATA, 0, ECLASS_STACK_DATA, 0, TMP2, 0);\n    break;\n\n    case ECL_NOT:\n    ++cc;\n    OP2(SLJIT_XOR, ECLASS_STACK_DATA, 0, ECLASS_STACK_DATA, 0, SLJIT_IMM, 1);\n    break;\n\n    default:\n    SLJIT_ASSERT(*cc == ECL_XCLASS);\n    if (cc != begin)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, ECLASS_CHAR_DATA, 0);\n      OP2(SLJIT_SHL, ECLASS_STACK_DATA, 0, ECLASS_STACK_DATA, 0, SLJIT_IMM, 1);\n      }\n\n    not_found = NULL;\n    compile_xclass_matchingpath(common, cc + 1 + LINK_SIZE, &not_found, XCLASS_IS_ECLASS);\n    set_jumps(not_found, LABEL());\n\n    cc += GET(cc, 1);\n    break;\n    }\n  }\n\nOP2U(SLJIT_SUB | SLJIT_SET_Z, ECLASS_STACK_DATA, 0, SLJIT_IMM, 0);\nOP1(SLJIT_MOV, ECLASS_CHAR_DATA, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\nOP1(SLJIT_MOV, ECLASS_STACK_DATA, 0, SLJIT_MEM1(SLJIT_SP), LOCAL1);\nadd_jump(compiler, backtracks, JUMP(SLJIT_EQUAL));\nset_jumps(found, LABEL());\nreturn end;\n}\n\n/* Generic character matching code. */\n\n#undef SET_CHAR_OFFSET\n#undef READ_FROM_CHAR_LIST\n#undef XCLASS_LOCAL_RANGES_SIZE\n#undef XCLASS_LOCAL_RANGES_LOG2_SIZE\n\n#endif /* SUPPORT_WIDE_CHARS */\n\nstatic PCRE2_SPTR byte_sequence_compare(compiler_common *common, BOOL caseless, PCRE2_SPTR cc,\n    compare_context *context, jump_list **backtracks)\n{\nDEFINE_COMPILER;\nunsigned int othercasebit = 0;\nPCRE2_SPTR othercasechar = NULL;\n#ifdef SUPPORT_UNICODE\nint utflength;\n#endif\n\nif (caseless && char_has_othercase(common, cc))\n  {\n  othercasebit = char_get_othercase_bit(common, cc);\n  SLJIT_ASSERT(othercasebit);\n  /* Extracting bit difference info. */\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  othercasechar = cc + (othercasebit >> 8);\n  othercasebit &= 0xff;\n#elif PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n  /* Note that this code only handles characters in the BMP. If there\n  ever are characters outside the BMP whose othercase differs in only one\n  bit from itself (there currently are none), this code will need to be\n  revised for PCRE2_CODE_UNIT_WIDTH == 32. */\n  othercasechar = cc + (othercasebit >> 9);\n  if ((othercasebit & 0x100) != 0)\n    othercasebit = (othercasebit & 0xff) << 8;\n  else\n    othercasebit &= 0xff;\n#endif /* PCRE2_CODE_UNIT_WIDTH == [8|16|32] */\n  }\n\nif (context->sourcereg == -1)\n  {\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#if defined SLJIT_UNALIGNED && SLJIT_UNALIGNED\n  if (context->length >= 4)\n    OP1(SLJIT_MOV_S32, TMP1, 0, SLJIT_MEM1(STR_PTR), -context->length);\n  else if (context->length >= 2)\n    OP1(SLJIT_MOV_U16, TMP1, 0, SLJIT_MEM1(STR_PTR), -context->length);\n  else\n#endif\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), -context->length);\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n#if defined SLJIT_UNALIGNED && SLJIT_UNALIGNED\n  if (context->length >= 4)\n    OP1(SLJIT_MOV_S32, TMP1, 0, SLJIT_MEM1(STR_PTR), -context->length);\n  else\n#endif\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), -context->length);\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), -context->length);\n#endif /* PCRE2_CODE_UNIT_WIDTH == [8|16|32] */\n  context->sourcereg = TMP2;\n  }\n\n#ifdef SUPPORT_UNICODE\nutflength = 1;\nif (common->utf && HAS_EXTRALEN(*cc))\n  utflength += GET_EXTRALEN(*cc);\n\ndo\n  {\n#endif\n\n  context->length -= IN_UCHARS(1);\n#if (defined SLJIT_UNALIGNED && SLJIT_UNALIGNED) && (PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16)\n\n  /* Unaligned read is supported. */\n  if (othercasebit != 0 && othercasechar == cc)\n    {\n    context->c.asuchars[context->ucharptr] = *cc | othercasebit;\n    context->oc.asuchars[context->ucharptr] = othercasebit;\n    }\n  else\n    {\n    context->c.asuchars[context->ucharptr] = *cc;\n    context->oc.asuchars[context->ucharptr] = 0;\n    }\n  context->ucharptr++;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  if (context->ucharptr >= 4 || context->length == 0 || (context->ucharptr == 2 && context->length == 1))\n#else\n  if (context->ucharptr >= 2 || context->length == 0)\n#endif\n    {\n    if (context->length >= 4)\n      OP1(SLJIT_MOV_S32, context->sourcereg, 0, SLJIT_MEM1(STR_PTR), -context->length);\n    else if (context->length >= 2)\n      OP1(SLJIT_MOV_U16, context->sourcereg, 0, SLJIT_MEM1(STR_PTR), -context->length);\n#if PCRE2_CODE_UNIT_WIDTH == 8\n    else if (context->length >= 1)\n      OP1(SLJIT_MOV_U8, context->sourcereg, 0, SLJIT_MEM1(STR_PTR), -context->length);\n#endif /* PCRE2_CODE_UNIT_WIDTH == 8 */\n    context->sourcereg = context->sourcereg == TMP1 ? TMP2 : TMP1;\n\n    switch(context->ucharptr)\n      {\n      case 4 / sizeof(PCRE2_UCHAR):\n      if (context->oc.asint != 0)\n        OP2(SLJIT_OR, context->sourcereg, 0, context->sourcereg, 0, SLJIT_IMM, context->oc.asint);\n      add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, context->sourcereg, 0, SLJIT_IMM, context->c.asint | context->oc.asint));\n      break;\n\n      case 2 / sizeof(PCRE2_UCHAR):\n      if (context->oc.asushort != 0)\n        OP2(SLJIT_OR, context->sourcereg, 0, context->sourcereg, 0, SLJIT_IMM, context->oc.asushort);\n      add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, context->sourcereg, 0, SLJIT_IMM, context->c.asushort | context->oc.asushort));\n      break;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      case 1:\n      if (context->oc.asbyte != 0)\n        OP2(SLJIT_OR, context->sourcereg, 0, context->sourcereg, 0, SLJIT_IMM, context->oc.asbyte);\n      add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, context->sourcereg, 0, SLJIT_IMM, context->c.asbyte | context->oc.asbyte));\n      break;\n#endif\n\n      default:\n      SLJIT_UNREACHABLE();\n      break;\n      }\n    context->ucharptr = 0;\n    }\n\n#else\n\n  /* Unaligned read is unsupported or in 32 bit mode. */\n  if (context->length >= 1)\n    OP1(MOV_UCHAR, context->sourcereg, 0, SLJIT_MEM1(STR_PTR), -context->length);\n\n  context->sourcereg = context->sourcereg == TMP1 ? TMP2 : TMP1;\n\n  if (othercasebit != 0 && othercasechar == cc)\n    {\n    OP2(SLJIT_OR, context->sourcereg, 0, context->sourcereg, 0, SLJIT_IMM, othercasebit);\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, context->sourcereg, 0, SLJIT_IMM, *cc | othercasebit));\n    }\n  else\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, context->sourcereg, 0, SLJIT_IMM, *cc));\n\n#endif\n\n  cc++;\n#ifdef SUPPORT_UNICODE\n  utflength--;\n  }\nwhile (utflength > 0);\n#endif\n\nreturn cc;\n}\n\n#ifdef SUPPORT_UNICODE\n\n#if PCRE2_CODE_UNIT_WIDTH != 32\n\n/* The code in this function copies the logic of the interpreter function that\nis defined in the pcre2_extuni.c source. If that code is updated, this\nfunction, and those below it, must be kept in step (note by PH, June 2024). */\n\nstatic PCRE2_SPTR SLJIT_FUNC do_extuni_utf(jit_arguments *args, PCRE2_SPTR cc)\n{\nPCRE2_SPTR start_subject = args->begin;\nPCRE2_SPTR end_subject = args->end;\nint lgb = 0, rgb, ricount;\nPCRE2_SPTR prevcc, endcc, bptr;\nBOOL first = TRUE;\nBOOL was_ep_ZWJ = FALSE;\nuint32_t c;\n\nprevcc = cc;\nendcc = NULL;\ndo\n  {\n  GETCHARINC(c, cc);\n  rgb = UCD_GRAPHBREAK(c);\n\n  if (first)\n    {\n    lgb = rgb;\n    endcc = cc;\n    first = FALSE;\n    continue;\n    }\n\n  if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0)\n    break;\n\n  /* ZWJ followed by Extended Pictographic is allowed only if the ZWJ was\n  preceded by Extended Pictographic. */\n\n  if (lgb == ucp_gbZWJ && rgb == ucp_gbExtended_Pictographic && !was_ep_ZWJ)\n    break;\n\n  /* Not breaking between Regional Indicators is allowed only if there\n  are an even number of preceding RIs. */\n\n  if (lgb == ucp_gbRegional_Indicator && rgb == ucp_gbRegional_Indicator)\n    {\n    ricount = 0;\n    bptr = prevcc;\n\n    /* bptr is pointing to the left-hand character */\n    while (bptr > start_subject)\n      {\n      bptr--;\n      BACKCHAR(bptr);\n      GETCHAR(c, bptr);\n\n      if (UCD_GRAPHBREAK(c) != ucp_gbRegional_Indicator)\n        break;\n\n      ricount++;\n      }\n\n    if ((ricount & 1) != 0) break;  /* Grapheme break required */\n    }\n\n  /* Set a flag when ZWJ follows Extended Pictographic (with optional Extend in\n  between; see next statement). */\n\n  was_ep_ZWJ = (lgb == ucp_gbExtended_Pictographic && rgb == ucp_gbZWJ);\n\n  /* If Extend follows Extended_Pictographic, do not update lgb; this allows\n  any number of them before a following ZWJ. */\n\n  if (rgb != ucp_gbExtend || lgb != ucp_gbExtended_Pictographic)\n    lgb = rgb;\n\n  prevcc = endcc;\n  endcc = cc;\n  }\nwhile (cc < end_subject);\n\nreturn endcc;\n}\n\n#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */\n\n/* The code in this function copies the logic of the interpreter function that\nis defined in the pcre2_extuni.c source. If that code is updated, this\nfunction, and the one below it, must be kept in step (note by PH, June 2024). */\n\nstatic PCRE2_SPTR SLJIT_FUNC do_extuni_utf_invalid(jit_arguments *args, PCRE2_SPTR cc)\n{\nPCRE2_SPTR start_subject = args->begin;\nPCRE2_SPTR end_subject = args->end;\nint lgb = 0, rgb, ricount;\nPCRE2_SPTR prevcc, endcc, bptr;\nBOOL first = TRUE;\nBOOL was_ep_ZWJ = FALSE;\nuint32_t c;\n\nprevcc = cc;\nendcc = NULL;\ndo\n  {\n  GETCHARINC_INVALID(c, cc, end_subject, break);\n  rgb = UCD_GRAPHBREAK(c);\n\n  if (first)\n    {\n    lgb = rgb;\n    endcc = cc;\n    first = FALSE;\n    continue;\n    }\n\n  if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0)\n    break;\n\n  /* ZWJ followed by Extended Pictographic is allowed only if the ZWJ was\n  preceded by Extended Pictographic. */\n\n  if (lgb == ucp_gbZWJ && rgb == ucp_gbExtended_Pictographic && !was_ep_ZWJ)\n    break;\n\n  /* Not breaking between Regional Indicators is allowed only if there\n  are an even number of preceding RIs. */\n\n  if (lgb == ucp_gbRegional_Indicator && rgb == ucp_gbRegional_Indicator)\n    {\n    ricount = 0;\n    bptr = prevcc;\n\n    /* bptr is pointing to the left-hand character */\n    while (bptr > start_subject)\n      {\n      GETCHARBACK_INVALID(c, bptr, start_subject, break);\n\n      if (UCD_GRAPHBREAK(c) != ucp_gbRegional_Indicator)\n        break;\n\n      ricount++;\n      }\n\n    if ((ricount & 1) != 0)\n      break;  /* Grapheme break required */\n    }\n\n  /* Set a flag when ZWJ follows Extended Pictographic (with optional Extend in\n  between; see next statement). */\n\n  was_ep_ZWJ = (lgb == ucp_gbExtended_Pictographic && rgb == ucp_gbZWJ);\n\n  /* If Extend follows Extended_Pictographic, do not update lgb; this allows\n  any number of them before a following ZWJ. */\n\n  if (rgb != ucp_gbExtend || lgb != ucp_gbExtended_Pictographic)\n    lgb = rgb;\n\n  prevcc = endcc;\n  endcc = cc;\n  }\nwhile (cc < end_subject);\n\nreturn endcc;\n}\n\n/* The code in this function copies the logic of the interpreter function that\nis defined in the pcre2_extuni.c source. If that code is updated, this\nfunction must be kept in step (note by PH, June 2024). */\n\nstatic PCRE2_SPTR SLJIT_FUNC do_extuni_no_utf(jit_arguments *args, PCRE2_SPTR cc)\n{\nPCRE2_SPTR start_subject = args->begin;\nPCRE2_SPTR end_subject = args->end;\nint lgb, rgb, ricount;\nPCRE2_SPTR bptr;\nuint32_t c;\nBOOL was_ep_ZWJ = FALSE;\n\n/* Patch by PH */\n/* GETCHARINC(c, cc); */\nc = *cc++;\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\nif (c >= 0x110000)\n  return cc;\n#endif /* PCRE2_CODE_UNIT_WIDTH == 32 */\nlgb = UCD_GRAPHBREAK(c);\n\nwhile (cc < end_subject)\n  {\n  c = *cc;\n#if PCRE2_CODE_UNIT_WIDTH == 32\n  if (c >= 0x110000)\n    break;\n#endif /* PCRE2_CODE_UNIT_WIDTH == 32 */\n  rgb = UCD_GRAPHBREAK(c);\n\n  if ((PRIV(ucp_gbtable)[lgb] & (1 << rgb)) == 0)\n    break;\n\n  /* ZWJ followed by Extended Pictographic is allowed only if the ZWJ was\n  preceded by Extended Pictographic. */\n\n  if (lgb == ucp_gbZWJ && rgb == ucp_gbExtended_Pictographic && !was_ep_ZWJ)\n    break;\n\n  /* Not breaking between Regional Indicators is allowed only if there\n  are an even number of preceding RIs. */\n\n  if (lgb == ucp_gbRegional_Indicator && rgb == ucp_gbRegional_Indicator)\n    {\n    ricount = 0;\n    bptr = cc - 1;\n\n    /* bptr is pointing to the left-hand character */\n    while (bptr > start_subject)\n      {\n      bptr--;\n      c = *bptr;\n#if PCRE2_CODE_UNIT_WIDTH == 32\n      if (c >= 0x110000)\n        break;\n#endif /* PCRE2_CODE_UNIT_WIDTH == 32 */\n\n      if (UCD_GRAPHBREAK(c) != ucp_gbRegional_Indicator) break;\n\n      ricount++;\n      }\n\n    if ((ricount & 1) != 0)\n      break;  /* Grapheme break required */\n    }\n\n  /* Set a flag when ZWJ follows Extended Pictographic (with optional Extend in\n  between; see next statement). */\n\n  was_ep_ZWJ = (lgb == ucp_gbExtended_Pictographic && rgb == ucp_gbZWJ);\n\n  /* If Extend follows Extended_Pictographic, do not update lgb; this allows\n  any number of them before a following ZWJ. */\n\n  if (rgb != ucp_gbExtend || lgb != ucp_gbExtended_Pictographic)\n    lgb = rgb;\n\n  cc++;\n  }\n\nreturn cc;\n}\n\nstatic void compile_clist(compiler_common *common, PCRE2_SPTR cc, jump_list **backtracks)\n{\nDEFINE_COMPILER;\nconst sljit_u32 *other_cases;\nstruct sljit_jump *jump;\nsljit_u32 min = 0, max = READ_CHAR_MAX;\nBOOL has_cmov = sljit_has_cpu_feature(SLJIT_HAS_CMOV) != 0;\n\nSLJIT_ASSERT(cc[1] == PT_CLIST);\n\nif (cc[0] == OP_PROP)\n  {\n  other_cases = PRIV(ucd_caseless_sets) + cc[2];\n\n  min = *other_cases++;\n  max = min;\n\n  while (*other_cases != NOTACHAR)\n    {\n    if (*other_cases > max) max = *other_cases;\n    if (*other_cases < min) min = *other_cases;\n    other_cases++;\n    }\n  }\n\nother_cases = PRIV(ucd_caseless_sets) + cc[2];\nSLJIT_ASSERT(other_cases[0] != NOTACHAR && other_cases[1] != NOTACHAR);\n/* The NOTACHAR is higher than any character. */\nSLJIT_ASSERT(other_cases[0] < other_cases[1] && other_cases[1] < other_cases[2]);\n\nread_char(common, min, max, backtracks, READ_CHAR_UPDATE_STR_PTR);\n\n/* At least two characters are required.\n   Otherwise this case would be handled by the normal code path. */\n/* NOTACHAR is the unsigned maximum. */\n\n/* Optimizing character pairs, if their difference is power of 2. */\nif (is_powerof2(other_cases[1] ^ other_cases[0]))\n  {\n  OP2(SLJIT_OR, TMP2, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(other_cases[1] ^ other_cases[0]));\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, other_cases[1]);\n  OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL);\n  other_cases += 2;\n  }\nelse if (is_powerof2(other_cases[2] ^ other_cases[1]))\n  {\n  SLJIT_ASSERT(other_cases[2] != NOTACHAR);\n\n  OP2(SLJIT_OR, TMP2, 0, TMP1, 0, SLJIT_IMM, (sljit_sw)(other_cases[2] ^ other_cases[1]));\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, other_cases[2]);\n  OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL);\n\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)other_cases[0]);\n\n  if (has_cmov)\n    SELECT(SLJIT_EQUAL, TMP2, STR_END, 0, TMP2);\n  else\n    OP_FLAGS(SLJIT_OR | ((other_cases[3] == NOTACHAR) ? SLJIT_SET_Z : 0), TMP2, 0, SLJIT_EQUAL);\n\n  other_cases += 3;\n  }\nelse\n  {\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++));\n  OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL);\n  }\n\nwhile (*other_cases != NOTACHAR)\n  {\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (sljit_sw)(*other_cases++));\n\n  if (has_cmov)\n    SELECT(SLJIT_EQUAL, TMP2, STR_END, 0, TMP2);\n  else\n    OP_FLAGS(SLJIT_OR | ((*other_cases == NOTACHAR) ? SLJIT_SET_Z : 0), TMP2, 0, SLJIT_EQUAL);\n  }\n\nif (has_cmov)\n  jump = CMP(cc[0] == OP_PROP ? SLJIT_EQUAL : SLJIT_NOT_EQUAL, TMP2, 0, SLJIT_IMM, 0);\nelse\n  jump = JUMP(cc[0] == OP_PROP ? SLJIT_ZERO : SLJIT_NOT_ZERO);\n\nadd_jump(compiler, backtracks, jump);\n}\n\n#endif /* SUPPORT_UNICODE */\n\nstatic PCRE2_SPTR compile_char1_matchingpath(compiler_common *common, PCRE2_UCHAR type, PCRE2_SPTR cc, jump_list **backtracks, BOOL check_str_ptr)\n{\nDEFINE_COMPILER;\nint length;\nunsigned int c, oc, bit;\ncompare_context context;\nstruct sljit_jump *jump[3];\njump_list *end_list;\n#ifdef SUPPORT_UNICODE\nPCRE2_UCHAR propdata[5];\n#endif /* SUPPORT_UNICODE */\n\nswitch(type)\n  {\n  case OP_NOT_DIGIT:\n  case OP_DIGIT:\n  /* Digits are usually 0-9, so it is worth to optimize them. */\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n  if (common->utf && is_char7_bitset((const sljit_u8*)common->ctypes - cbit_length + cbit_digit, FALSE))\n    read_char7_type(common, backtracks, type == OP_NOT_DIGIT);\n  else\n#endif\n    read_char8_type(common, backtracks, type == OP_NOT_DIGIT);\n    /* Flip the starting bit in the negative case. */\n  OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, ctype_digit);\n  add_jump(compiler, backtracks, JUMP(type == OP_DIGIT ? SLJIT_ZERO : SLJIT_NOT_ZERO));\n  return cc;\n\n  case OP_NOT_WHITESPACE:\n  case OP_WHITESPACE:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n  if (common->utf && is_char7_bitset((const sljit_u8*)common->ctypes - cbit_length + cbit_space, FALSE))\n    read_char7_type(common, backtracks, type == OP_NOT_WHITESPACE);\n  else\n#endif\n    read_char8_type(common, backtracks, type == OP_NOT_WHITESPACE);\n  OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, ctype_space);\n  add_jump(compiler, backtracks, JUMP(type == OP_WHITESPACE ? SLJIT_ZERO : SLJIT_NOT_ZERO));\n  return cc;\n\n  case OP_NOT_WORDCHAR:\n  case OP_WORDCHAR:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n  if (common->utf && is_char7_bitset((const sljit_u8*)common->ctypes - cbit_length + cbit_word, FALSE))\n    read_char7_type(common, backtracks, type == OP_NOT_WORDCHAR);\n  else\n#endif\n    read_char8_type(common, backtracks, type == OP_NOT_WORDCHAR);\n  OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, ctype_word);\n  add_jump(compiler, backtracks, JUMP(type == OP_WORDCHAR ? SLJIT_ZERO : SLJIT_NOT_ZERO));\n  return cc;\n\n  case OP_ANY:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n  read_char(common, common->nlmin, common->nlmax, backtracks, READ_CHAR_UPDATE_STR_PTR);\n  if (common->nltype == NLTYPE_FIXED && common->newline > 255)\n    {\n    jump[0] = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff);\n    end_list = NULL;\n    if (common->mode != PCRE2_JIT_PARTIAL_HARD)\n      add_jump(compiler, &end_list, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n    else\n      check_str_end(common, &end_list);\n\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, common->newline & 0xff));\n    set_jumps(end_list, LABEL());\n    JUMPHERE(jump[0]);\n    }\n  else\n    check_newlinechar(common, common->nltype, backtracks, TRUE);\n  return cc;\n\n  case OP_ALLANY:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n#ifdef SUPPORT_UNICODE\n  if (common->utf && common->invalid_utf)\n    {\n    read_char(common, 0, READ_CHAR_MAX, backtracks, READ_CHAR_UPDATE_STR_PTR);\n    return cc;\n    }\n#endif /* SUPPORT_UNICODE */\n\n  skip_valid_char(common);\n  return cc;\n\n  case OP_ANYBYTE:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  return cc;\n\n#ifdef SUPPORT_UNICODE\n  case OP_NOTPROP:\n  case OP_PROP:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n  if (cc[0] == PT_CLIST)\n    {\n    compile_clist(common, cc - 1, backtracks);\n    return cc + 2;\n    }\n\n  propdata[0] = 0;\n  propdata[1] = type == OP_NOTPROP ? XCL_NOTPROP : XCL_PROP;\n  propdata[2] = cc[0];\n  propdata[3] = cc[1];\n  propdata[4] = XCL_END;\n  compile_xclass_matchingpath(common, propdata, backtracks, 0);\n  return cc + 2;\n#endif\n\n  case OP_ANYNL:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n  read_char(common, common->bsr_nlmin, common->bsr_nlmax, NULL, 0);\n  jump[0] = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_CR);\n  /* We don't need to handle soft partial matching case. */\n  end_list = NULL;\n  if (common->mode != PCRE2_JIT_PARTIAL_HARD)\n    add_jump(compiler, &end_list, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n  else\n    check_str_end(common, &end_list);\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_NL);\n  OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL);\n#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n  OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT);\n#endif\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n  jump[1] = JUMP(SLJIT_JUMP);\n  JUMPHERE(jump[0]);\n  check_newlinechar(common, common->bsr_nltype, backtracks, FALSE);\n  set_jumps(end_list, LABEL());\n  JUMPHERE(jump[1]);\n  return cc;\n\n  case OP_NOT_HSPACE:\n  case OP_HSPACE:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n\n  if (type == OP_NOT_HSPACE)\n    read_char(common, 0x1, 0x3000, backtracks, READ_CHAR_UPDATE_STR_PTR);\n  else\n    read_char(common, 0x1, 0x3000, NULL, 0);\n\n  add_jump(compiler, &common->hspace, JUMP(SLJIT_FAST_CALL));\n  sljit_set_current_flags(compiler, SLJIT_SET_Z);\n  add_jump(compiler, backtracks, JUMP(type == OP_NOT_HSPACE ? SLJIT_NOT_ZERO : SLJIT_ZERO));\n  return cc;\n\n  case OP_NOT_VSPACE:\n  case OP_VSPACE:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n\n  if (type == OP_NOT_VSPACE)\n    read_char(common, 0x1, 0x2029, backtracks, READ_CHAR_UPDATE_STR_PTR);\n  else\n    read_char(common, 0x1, 0x2029, NULL, 0);\n\n  add_jump(compiler, &common->vspace, JUMP(SLJIT_FAST_CALL));\n  sljit_set_current_flags(compiler, SLJIT_SET_Z);\n  add_jump(compiler, backtracks, JUMP(type == OP_NOT_VSPACE ? SLJIT_NOT_ZERO : SLJIT_ZERO));\n  return cc;\n\n#ifdef SUPPORT_UNICODE\n  case OP_EXTUNI:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n\n  SLJIT_ASSERT(TMP1 == SLJIT_R0 && STR_PTR == SLJIT_R1);\n  OP1(SLJIT_MOV, SLJIT_R0, 0, ARGUMENTS, 0);\n\n#if PCRE2_CODE_UNIT_WIDTH != 32\n  sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM,\n    common->utf ? (common->invalid_utf ? SLJIT_FUNC_ADDR(do_extuni_utf_invalid) : SLJIT_FUNC_ADDR(do_extuni_utf)) : SLJIT_FUNC_ADDR(do_extuni_no_utf));\n  if (common->invalid_utf)\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0));\n#else\n  sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM,\n    common->invalid_utf ? SLJIT_FUNC_ADDR(do_extuni_utf_invalid) : SLJIT_FUNC_ADDR(do_extuni_no_utf));\n  if (common->invalid_utf)\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0));\n#endif\n\n  OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_RETURN_REG, 0);\n\n  if (common->mode == PCRE2_JIT_PARTIAL_HARD)\n    {\n    jump[0] = CMP(SLJIT_LESS, SLJIT_RETURN_REG, 0, STR_END, 0);\n    /* Since we successfully read a char above, partial matching must occur. */\n    check_partial(common, TRUE);\n    JUMPHERE(jump[0]);\n    }\n  return cc;\n#endif\n\n  case OP_CHAR:\n  case OP_CHARI:\n  length = 1;\n#ifdef SUPPORT_UNICODE\n  if (common->utf && HAS_EXTRALEN(*cc)) length += GET_EXTRALEN(*cc);\n#endif\n\n  if (check_str_ptr && common->mode != PCRE2_JIT_COMPLETE)\n    detect_partial_match(common, backtracks);\n\n  if (type == OP_CHAR || !char_has_othercase(common, cc) || char_get_othercase_bit(common, cc) != 0)\n    {\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(length));\n    if (length > 1 || (check_str_ptr && common->mode == PCRE2_JIT_COMPLETE))\n      add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, STR_END, 0));\n\n    context.length = IN_UCHARS(length);\n    context.sourcereg = -1;\n#if defined SLJIT_UNALIGNED && SLJIT_UNALIGNED\n    context.ucharptr = 0;\n#endif\n    return byte_sequence_compare(common, type == OP_CHARI, cc, &context, backtracks);\n    }\n\n#ifdef SUPPORT_UNICODE\n  if (common->utf)\n    {\n    GETCHAR(c, cc);\n    }\n  else\n#endif\n    c = *cc;\n\n  SLJIT_ASSERT(type == OP_CHARI && char_has_othercase(common, cc));\n\n  if (check_str_ptr && common->mode == PCRE2_JIT_COMPLETE)\n    add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n  oc = char_othercase(common, c);\n  read_char(common, c < oc ? c : oc, c > oc ? c : oc, NULL, 0);\n\n  SLJIT_ASSERT(!is_powerof2(c ^ oc));\n\n  if (sljit_has_cpu_feature(SLJIT_HAS_CMOV))\n    {\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, oc);\n    SELECT(SLJIT_EQUAL, TMP1, SLJIT_IMM, c, TMP1);\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, c));\n    }\n  else\n    {\n    jump[0] = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, c);\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, oc));\n    JUMPHERE(jump[0]);\n    }\n  return cc + length;\n\n  case OP_NOT:\n  case OP_NOTI:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n\n  length = 1;\n#ifdef SUPPORT_UNICODE\n  if (common->utf)\n    {\n#if PCRE2_CODE_UNIT_WIDTH == 8\n    c = *cc;\n    if (c < 128 && !common->invalid_utf)\n      {\n      OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\n      if (type == OP_NOT || !char_has_othercase(common, cc))\n        add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, c));\n      else\n        {\n        /* Since UTF8 code page is fixed, we know that c is in [a-z] or [A-Z] range. */\n        OP2(SLJIT_OR, TMP2, 0, TMP1, 0, SLJIT_IMM, 0x20);\n        add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, c | 0x20));\n        }\n      /* Skip the variable-length character. */\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n      jump[0] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xc0);\n      OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(utf8_table4) - 0xc0);\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n      JUMPHERE(jump[0]);\n      return cc + 1;\n      }\n    else\n#endif /* PCRE2_CODE_UNIT_WIDTH == 8 */\n      {\n      GETCHARLEN(c, cc, length);\n      }\n    }\n  else\n#endif /* SUPPORT_UNICODE */\n    c = *cc;\n\n  if (type == OP_NOT || !char_has_othercase(common, cc))\n    {\n    read_char(common, c, c, backtracks, READ_CHAR_UPDATE_STR_PTR);\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, c));\n    }\n  else\n    {\n    oc = char_othercase(common, c);\n    read_char(common, c < oc ? c : oc, c > oc ? c : oc, backtracks, READ_CHAR_UPDATE_STR_PTR);\n    bit = c ^ oc;\n    if (is_powerof2(bit))\n      {\n      OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, bit);\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, c | bit));\n      }\n    else\n      {\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, c));\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, oc));\n      }\n    }\n  return cc + length;\n\n  case OP_CLASS:\n  case OP_NCLASS:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n  bit = (common->utf && is_char7_bitset((const sljit_u8 *)cc, type == OP_NCLASS)) ? 127 : 255;\n  if (type == OP_NCLASS)\n    read_char(common, 0, bit, backtracks, READ_CHAR_UPDATE_STR_PTR);\n  else\n    read_char(common, 0, bit, NULL, 0);\n#else\n  if (type == OP_NCLASS)\n    read_char(common, 0, 255, backtracks, READ_CHAR_UPDATE_STR_PTR);\n  else\n    read_char(common, 0, 255, NULL, 0);\n#endif\n\n  if (optimize_class(common, (const sljit_u8 *)cc, type == OP_NCLASS, FALSE, backtracks))\n    return cc + 32 / sizeof(PCRE2_UCHAR);\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n  jump[0] = NULL;\n  if (common->utf)\n    {\n    jump[0] = CMP(SLJIT_GREATER, TMP1, 0, SLJIT_IMM, bit);\n    if (type == OP_CLASS)\n      {\n      add_jump(compiler, backtracks, jump[0]);\n      jump[0] = NULL;\n      }\n    }\n#elif PCRE2_CODE_UNIT_WIDTH != 8\n  jump[0] = CMP(SLJIT_GREATER, TMP1, 0, SLJIT_IMM, 255);\n  if (type == OP_CLASS)\n    {\n    add_jump(compiler, backtracks, jump[0]);\n    jump[0] = NULL;\n    }\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8 */\n\n  OP2(SLJIT_AND, TMP2, 0, TMP1, 0, SLJIT_IMM, 0x7);\n  OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3);\n  OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)cc);\n  OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0);\n  OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP2, 0);\n  add_jump(compiler, backtracks, JUMP(SLJIT_ZERO));\n\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8\n  if (jump[0] != NULL)\n    JUMPHERE(jump[0]);\n#endif\n  return cc + 32 / sizeof(PCRE2_UCHAR);\n\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n  case OP_XCLASS:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n  compile_xclass_matchingpath(common, cc + LINK_SIZE, backtracks, 0);\n  return cc + GET(cc, 0) - 1;\n\n  case OP_ECLASS:\n  if (check_str_ptr)\n    detect_partial_match(common, backtracks);\n  return compile_eclass_matchingpath(common, cc, backtracks);\n#endif\n  }\nSLJIT_UNREACHABLE();\nreturn cc;\n}\n\nstatic SLJIT_INLINE PCRE2_SPTR compile_charn_matchingpath(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, jump_list **backtracks)\n{\n/* This function consumes at least one input character. */\n/* To decrease the number of length checks, we try to concatenate the fixed length character sequences. */\nDEFINE_COMPILER;\nPCRE2_SPTR ccbegin = cc;\ncompare_context context;\nint size;\n\ncontext.length = 0;\ndo\n  {\n  if (cc >= ccend)\n    break;\n\n  if (*cc == OP_CHAR)\n    {\n    size = 1;\n#ifdef SUPPORT_UNICODE\n    if (common->utf && HAS_EXTRALEN(cc[1]))\n      size += GET_EXTRALEN(cc[1]);\n#endif\n    }\n  else if (*cc == OP_CHARI)\n    {\n    size = 1;\n#ifdef SUPPORT_UNICODE\n    if (common->utf)\n      {\n      if (char_has_othercase(common, cc + 1) && char_get_othercase_bit(common, cc + 1) == 0)\n        size = 0;\n      else if (HAS_EXTRALEN(cc[1]))\n        size += GET_EXTRALEN(cc[1]);\n      }\n    else\n#endif\n    if (char_has_othercase(common, cc + 1) && char_get_othercase_bit(common, cc + 1) == 0)\n      size = 0;\n    }\n  else\n    size = 0;\n\n  cc += 1 + size;\n  context.length += IN_UCHARS(size);\n  }\nwhile (size > 0 && context.length <= 128);\n\ncc = ccbegin;\nif (context.length > 0)\n  {\n  /* We have a fixed-length byte sequence. */\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, context.length);\n  add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, STR_END, 0));\n\n  context.sourcereg = -1;\n#if defined SLJIT_UNALIGNED && SLJIT_UNALIGNED\n  context.ucharptr = 0;\n#endif\n  do cc = byte_sequence_compare(common, *cc == OP_CHARI, cc + 1, &context, backtracks); while (context.length > 0);\n  return cc;\n  }\n\n/* A non-fixed length character will be checked if length == 0. */\nreturn compile_char1_matchingpath(common, *cc, cc + 1, backtracks, TRUE);\n}\n\n\n"
  },
  {
    "path": "src/pcre2_jit_compile.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n                    This module by Zoltan Herczeg\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n#if defined(__has_feature)\n#if __has_feature(memory_sanitizer)\n#include <sanitizer/msan_interface.h>\n#endif /* __has_feature(memory_sanitizer) */\n#endif /* defined(__has_feature) */\n\n#include \"pcre2_internal.h\"\n\n#ifdef SUPPORT_JIT\n\n/* All-in-one: Since we use the JIT compiler only from here,\nwe just include it. This way we don't need to touch the build\nsystem files. */\n\n#define SLJIT_CONFIG_AUTO 1\n#define SLJIT_CONFIG_STATIC 1\n#define SLJIT_VERBOSE 0\n\n#ifdef PCRE2_DEBUG\n#define SLJIT_DEBUG 1\n#else\n#define SLJIT_DEBUG 0\n#endif\n\n#define SLJIT_MALLOC(size, allocator_data) pcre2_jit_malloc(size, allocator_data)\n#define SLJIT_FREE(ptr, allocator_data) pcre2_jit_free(ptr, allocator_data)\n\nstatic void * pcre2_jit_malloc(size_t size, void *allocator_data)\n{\npcre2_memctl *allocator = ((pcre2_memctl*)allocator_data);\nreturn allocator->malloc(size, allocator->memory_data);\n}\n\nstatic void pcre2_jit_free(void *ptr, void *allocator_data)\n{\npcre2_memctl *allocator = ((pcre2_memctl*)allocator_data);\nallocator->free(ptr, allocator->memory_data);\n}\n\n#include \"../deps/sljit/sljit_src/sljitLir.c\"\n\n#if defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED\n#error Unsupported architecture\n#endif\n\n/* Defines for debugging purposes. */\n\n/* 1 - Use unoptimized capturing brackets.\n   2 - Enable capture_last_ptr (includes option 1). */\n/* #define DEBUG_FORCE_UNOPTIMIZED_CBRAS 2 */\n\n/* 1 - Always have a control head. */\n/* #define DEBUG_FORCE_CONTROL_HEAD 1 */\n\n/* Allocate memory for the regex stack on the real machine stack.\nFast, but limited size. */\n#define MACHINE_STACK_SIZE 32768\n\n/* Growth rate for stack allocated by the OS. Should be the multiply\nof page size. */\n#define STACK_GROWTH_RATE 8192\n\n/* Enable to check that the allocation could destroy temporaries. */\n#if defined SLJIT_DEBUG && SLJIT_DEBUG\n#define DESTROY_REGISTERS 1\n#endif\n\n/*\nShort summary about the backtracking mechanism empolyed by the jit code generator:\n\nThe code generator follows the recursive nature of the PERL compatible regular\nexpressions. The basic blocks of regular expressions are condition checkers\nwhose execute different commands depending on the result of the condition check.\nThe relationship between the operators can be horizontal (concatenation) and\nvertical (sub-expression) (See struct backtrack_common for more details).\n\n  'ab' - 'a' and 'b' regexps are concatenated\n  'a+' - 'a' is the sub-expression of the '+' operator\n\nThe condition checkers are boolean (true/false) checkers. Machine code is generated\nfor the checker itself and for the actions depending on the result of the checker.\nThe 'true' case is called as the matching path (expected path), and the other is called as\nthe 'backtrack' path. Branch instructions are expesive for all CPUs, so we avoid taken\nbranches on the matching path.\n\n Greedy star operator (*) :\n   Matching path: match happens.\n   Backtrack path: match failed.\n Non-greedy star operator (*?) :\n   Matching path: no need to perform a match.\n   Backtrack path: match is required.\n\nThe following example shows how the code generated for a capturing bracket\nwith two alternatives. Let A, B, C, D are arbirary regular expressions, and\nwe have the following regular expression:\n\n   A(B|C)D\n\nThe generated code will be the following:\n\n A matching path\n '(' matching path (pushing arguments to the stack)\n B matching path\n ')' matching path (pushing arguments to the stack)\n D matching path\n return with successful match\n\n D backtrack path\n ')' backtrack path (If we arrived from \"C\" jump to the backtrack of \"C\")\n B backtrack path\n C expected path\n jump to D matching path\n C backtrack path\n A backtrack path\n\n Notice, that the order of backtrack code paths are the opposite of the fast\n code paths. In this way the topmost value on the stack is always belong\n to the current backtrack code path. The backtrack path must check\n whether there is a next alternative. If so, it needs to jump back to\n the matching path eventually. Otherwise it needs to clear out its own stack\n frame and continue the execution on the backtrack code paths.\n*/\n\n/*\nSaved stack frames:\n\nAtomic blocks and asserts require reloading the values of private data\nwhen the backtrack mechanism performed. Because of OP_RECURSE, the data\nare not necessarly known in compile time, thus we need a dynamic restore\nmechanism.\n\nThe stack frames are stored in a chain list, and have the following format:\n([ capturing bracket offset ][ start value ][ end value ])+ ... [ 0 ] [ previous head ]\n\nThus we can restore the private data to a particular point in the stack.\n*/\n\ntypedef struct jit_arguments {\n  /* Pointers first. */\n  struct sljit_stack *stack;\n  PCRE2_SPTR str;\n  PCRE2_SPTR begin;\n  PCRE2_SPTR end;\n  pcre2_match_data *match_data;\n  PCRE2_SPTR startchar_ptr;\n  PCRE2_UCHAR *mark_ptr;\n  int (*callout)(pcre2_callout_block *, void *);\n  void *callout_data;\n  /* Everything else after. */\n  sljit_uw offset_limit;\n  sljit_u32 limit_match;\n  sljit_u32 oveccount;\n  sljit_u32 options;\n} jit_arguments;\n\n#define JIT_NUMBER_OF_COMPILE_MODES 3\n\ntypedef struct executable_functions {\n  void *executable_funcs[JIT_NUMBER_OF_COMPILE_MODES];\n  void *read_only_data_heads[JIT_NUMBER_OF_COMPILE_MODES];\n  sljit_uw executable_sizes[JIT_NUMBER_OF_COMPILE_MODES];\n  sljit_u32 top_bracket;\n  sljit_u32 limit_match;\n} executable_functions;\n\ntypedef struct jump_list {\n  struct sljit_jump *jump;\n  struct jump_list *next;\n} jump_list;\n\ntypedef struct stub_list {\n  struct sljit_jump *start;\n  struct sljit_label *quit;\n  struct stub_list *next;\n} stub_list;\n\nenum frame_types {\n  no_frame = -1,\n  no_stack = -2\n};\n\nenum control_types {\n  type_mark = 0,\n  type_then_trap = 1\n};\n\nenum  early_fail_types {\n  type_skip = 0,\n  type_fail = 1,\n  type_fail_range = 2\n};\n\ntypedef int (SLJIT_FUNC *jit_function)(jit_arguments *args);\n\n/* The following structure is the key data type for the recursive\ncode generator. It is allocated by compile_matchingpath, and contains\nthe arguments for compile_backtrackingpath. Must be the first member\nof its descendants. */\ntypedef struct backtrack_common {\n  /* Backtracking path of an opcode, which falls back\n     to our opcode, if it cannot resume matching. */\n  struct backtrack_common *prev;\n  /* Backtracks for opcodes without backtracking path.\n     These opcodes are between 'prev' and the current\n     opcode, and they never resume the match. */\n  jump_list *simple_backtracks;\n  /* Internal backtracking list for block constructs\n     which contains other opcodes, such as brackets,\n     asserts, conditionals, etc. */\n  struct backtrack_common *top;\n  /* Backtracks used internally by the opcode. For component\n     opcodes, this list is also used by those opcodes without\n     backtracking path which follows the 'top' backtrack. */\n  jump_list *own_backtracks;\n  /* Opcode pointer. */\n  PCRE2_SPTR cc;\n} backtrack_common;\n\ntypedef struct assert_backtrack {\n  backtrack_common common;\n  jump_list *condfailed;\n  /* Less than 0 if a frame is not needed. */\n  int framesize;\n  /* Points to our private memory word on the stack. */\n  int private_data_ptr;\n  /* For iterators. */\n  struct sljit_label *matchingpath;\n} assert_backtrack;\n\ntypedef struct bracket_backtrack {\n  backtrack_common common;\n  /* Where to coninue if an alternative is successfully matched. */\n  struct sljit_label *alternative_matchingpath;\n  /* For rmin and rmax iterators. */\n  struct sljit_label *recursive_matchingpath;\n  /* For greedy ? operator. */\n  struct sljit_label *zero_matchingpath;\n  /* Contains the branches of a failed condition. */\n  union {\n    /* Both for OP_COND, OP_SCOND, OP_ASSERT_SCS. */\n    jump_list *no_capture;\n    assert_backtrack *assert;\n    /* For OP_ONCE. Less than 0 if not needed. */\n    int framesize;\n  } u;\n  /* For brackets with >3 alternatives. */\n  struct sljit_jump *matching_mov_addr;\n  /* Points to our private memory word on the stack. */\n  int private_data_ptr;\n} bracket_backtrack;\n\ntypedef struct bracketpos_backtrack {\n  backtrack_common common;\n  /* Points to our private memory word on the stack. */\n  int private_data_ptr;\n  /* Reverting stack is needed. */\n  int framesize;\n  /* Allocated stack size. */\n  int stacksize;\n} bracketpos_backtrack;\n\ntypedef struct braminzero_backtrack {\n  backtrack_common common;\n  struct sljit_label *matchingpath;\n} braminzero_backtrack;\n\ntypedef struct char_iterator_backtrack {\n  backtrack_common common;\n  /* Next iteration. */\n  struct sljit_label *matchingpath;\n  /* Creating a range based on the next character. */\n  struct {\n    unsigned int othercasebit;\n    PCRE2_UCHAR chr;\n    BOOL charpos_enabled;\n  } charpos;\n} char_iterator_backtrack;\n\ntypedef struct ref_iterator_backtrack {\n  backtrack_common common;\n  /* Next iteration. */\n  struct sljit_label *matchingpath;\n  BOOL possessive_or_exact;\n} ref_iterator_backtrack;\n\ntypedef struct recurse_entry {\n  struct recurse_entry *next;\n  /* Contains the function entry label. */\n  struct sljit_label *entry_label;\n  /* Contains the function entry label. */\n  struct sljit_label *backtrack_label;\n  /* Collects the entry calls until the function is not created. */\n  jump_list *entry_calls;\n  /* Collects the backtrack calls until the function is not created. */\n  jump_list *backtrack_calls;\n  /* Points to the starting opcode. */\n  sljit_sw start;\n  /* Start of caller arguments. */\n  PCRE2_SPTR arg_start;\n  /* Size of caller arguments in bytes. */\n  sljit_uw arg_size;\n} recurse_entry;\n\ntypedef struct recurse_backtrack {\n  backtrack_common common;\n  /* Return to the matching path. */\n  struct sljit_label *matchingpath;\n  /* Recursive pattern. */\n  recurse_entry *entry;\n  /* Pattern is inlined. */\n  BOOL inlined_pattern;\n} recurse_backtrack;\n\ntypedef struct vreverse_backtrack {\n  backtrack_common common;\n  /* Return to the matching path. */\n  struct sljit_label *matchingpath;\n} vreverse_backtrack;\n\n#define OP_THEN_TRAP OP_TABLE_LENGTH\n\ntypedef struct then_trap_backtrack {\n  backtrack_common common;\n  /* If then_trap is not NULL, this structure contains the real\n  then_trap for the backtracking path. */\n  struct then_trap_backtrack *then_trap;\n  /* Points to the starting opcode. */\n  sljit_sw start;\n  /* Exit point for the then opcodes of this alternative. */\n  jump_list *quit;\n  /* Frame size of the current alternative. */\n  int framesize;\n} then_trap_backtrack;\n\n#define MAX_N_CHARS 12\n#define MAX_DIFF_CHARS 5\n\ntypedef struct fast_forward_char_data {\n  /* Number of characters in the chars array, 255 for any character. */\n  sljit_u8 count;\n  /* Number of last UTF-8 characters in the chars array. */\n  sljit_u8 last_count;\n  /* Available characters in the current position. */\n  PCRE2_UCHAR chars[MAX_DIFF_CHARS];\n} fast_forward_char_data;\n\n#define MAX_CLASS_RANGE_SIZE 4\n#define MAX_CLASS_CHARS_SIZE 3\n\ntypedef struct compiler_common {\n  /* The sljit ceneric compiler. */\n  struct sljit_compiler *compiler;\n  /* Compiled regular expression. */\n  pcre2_real_code *re;\n  /* First byte code. */\n  PCRE2_SPTR start;\n  /* Maps private data offset to each opcode. */\n  sljit_s32 *private_data_ptrs;\n  /* Chain list of read-only data ptrs. */\n  void *read_only_data_head;\n  /* Bitset which tells which capture brackets can be optimized. */\n  sljit_u8 *optimized_cbrackets;\n  /* Bitset for tracking capture bracket status. */\n  sljit_u8 *cbracket_bitset;\n  /* Tells whether the starting offset is a target of then. */\n  sljit_u8 *then_offsets;\n  /* Current position where a THEN must jump. */\n  then_trap_backtrack *then_trap;\n  /* Starting offset of private data for capturing brackets. */\n  sljit_s32 cbra_ptr;\n#if defined SLJIT_DEBUG && SLJIT_DEBUG\n  /* End offset of locals for assertions. */\n  sljit_s32 locals_size;\n#endif\n  /* Output vector starting point. Must be divisible by 2. */\n  sljit_s32 ovector_start;\n  /* Points to the starting character of the current match. */\n  sljit_s32 start_ptr;\n  /* Last known position of the requested byte. */\n  sljit_s32 req_char_ptr;\n  /* Head of the last recursion. */\n  sljit_s32 recursive_head_ptr;\n  /* First inspected character for partial matching.\n     (Needed for avoiding zero length partial matches.) */\n  sljit_s32 start_used_ptr;\n  /* Starting pointer for partial soft matches. */\n  sljit_s32 hit_start;\n  /* Pointer of the match end position. */\n  sljit_s32 match_end_ptr;\n  /* Points to the marked string. */\n  sljit_s32 mark_ptr;\n  /* Head of the recursive control verb management chain.\n     Each item must have a previous offset and type\n     (see control_types) values. See do_search_mark. */\n  sljit_s32 control_head_ptr;\n  /* The offset of the saved STR_END in the outermost\n     scan substring block. Since scan substring restores\n     STR_END after a match, it is enough to restore\n     STR_END inside a scan substring block. */\n  sljit_s32 restore_end_ptr;\n  /* Points to the last matched capture block index. */\n  sljit_s32 capture_last_ptr;\n  /* Fast forward skipping byte code pointer. */\n  PCRE2_SPTR fast_forward_bc_ptr;\n  /* Locals used by fast fail optimization. */\n  sljit_s32 early_fail_start_ptr;\n  sljit_s32 early_fail_end_ptr;\n  /* Byte length of optimized_cbrackets and cbracket_bitset. */\n  sljit_u32 cbracket_bitset_length;\n  /* Variables used by recursive call generator. */\n  sljit_s32 recurse_bitset_size;\n  uint8_t *recurse_bitset;\n\n  /* Flipped and lower case tables. */\n  const sljit_u8 *fcc;\n  sljit_sw lcc;\n  /* Mode can be PCRE2_JIT_COMPLETE and others. */\n  int mode;\n  /* TRUE, when empty match is accepted for partial matching. */\n  BOOL allow_empty_partial;\n  /* TRUE, when minlength is greater than 0. */\n  BOOL might_be_empty;\n  /* \\K is found in the pattern. */\n  BOOL has_set_som;\n  /* (*SKIP:arg) is found in the pattern. */\n  BOOL has_skip_arg;\n  /* (*THEN) is found in the pattern. */\n  BOOL has_then;\n  /* (*SKIP) or (*SKIP:arg) is found in lookbehind assertion. */\n  BOOL has_skip_in_assert_back;\n  /* Quit is redirected by recurse, negative assertion, or positive assertion in conditional block. */\n  BOOL local_quit_available;\n  /* Currently in a positive assertion. */\n  BOOL in_positive_assertion;\n  /* Newline control. */\n  int nltype;\n  sljit_u32 nlmax;\n  sljit_u32 nlmin;\n  int newline;\n  int bsr_nltype;\n  sljit_u32 bsr_nlmax;\n  sljit_u32 bsr_nlmin;\n  /* Dollar endonly. */\n  int endonly;\n  /* Tables. */\n  sljit_sw ctypes;\n  /* Named capturing brackets. */\n  PCRE2_SPTR name_table;\n  sljit_sw name_count;\n  sljit_sw name_entry_size;\n\n  /* Labels and jump lists. */\n  struct sljit_label *partialmatchlabel;\n  struct sljit_label *quit_label;\n  struct sljit_label *abort_label;\n  struct sljit_label *accept_label;\n  struct sljit_label *ff_newline_shortcut;\n  stub_list *stubs;\n  recurse_entry *entries;\n  recurse_entry *currententry;\n  jump_list *partialmatch;\n  jump_list *quit;\n  jump_list *positive_assertion_quit;\n  jump_list *abort;\n  jump_list *failed_match;\n  jump_list *accept;\n  jump_list *calllimit;\n  jump_list *stackalloc;\n  jump_list *revertframes;\n  jump_list *wordboundary;\n  jump_list *ucp_wordboundary;\n  jump_list *anynewline;\n  jump_list *hspace;\n  jump_list *vspace;\n  jump_list *casefulcmp;\n  jump_list *caselesscmp;\n  jump_list *reset_match;\n  /* Same as reset_match, but resets the STR_PTR as well. */\n  jump_list *restart_match;\n  BOOL unset_backref;\n  BOOL alt_circumflex;\n#ifdef SUPPORT_UNICODE\n  BOOL utf;\n  BOOL invalid_utf;\n  BOOL ucp;\n  /* Points to saving area for iref. */\n  jump_list *getucd;\n  jump_list *getucdtype;\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  jump_list *utfreadchar;\n  jump_list *utfreadtype8;\n  jump_list *utfpeakcharback;\n#endif\n#if PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16\n  jump_list *utfreadchar_invalid;\n  jump_list *utfreadnewline_invalid;\n  jump_list *utfmoveback_invalid;\n  jump_list *utfpeakcharback_invalid;\n#endif\n#endif /* SUPPORT_UNICODE */\n} compiler_common;\n\n/* For byte_sequence_compare. */\n\ntypedef struct compare_context {\n  int length;\n  int sourcereg;\n#if defined SLJIT_UNALIGNED && SLJIT_UNALIGNED\n  int ucharptr;\n  union {\n    sljit_s32 asint;\n    sljit_u16 asushort;\n#if PCRE2_CODE_UNIT_WIDTH == 8\n    sljit_u8 asbyte;\n    sljit_u8 asuchars[4];\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n    sljit_u16 asuchars[2];\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n    sljit_u32 asuchars[1];\n#endif\n  } c;\n  union {\n    sljit_s32 asint;\n    sljit_u16 asushort;\n#if PCRE2_CODE_UNIT_WIDTH == 8\n    sljit_u8 asbyte;\n    sljit_u8 asuchars[4];\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n    sljit_u16 asuchars[2];\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n    sljit_u32 asuchars[1];\n#endif\n  } oc;\n#endif\n} compare_context;\n\n/* Undefine sljit macros. */\n#undef CMP\n\n/* Used for accessing the elements of the stack. */\n#define STACK(i)      ((i) * SSIZE_OF(sw))\n\n#ifdef SLJIT_PREF_SHIFT_REG\n#if SLJIT_PREF_SHIFT_REG == SLJIT_R2\n/* Nothing. */\n#elif SLJIT_PREF_SHIFT_REG == SLJIT_R3\n#define SHIFT_REG_IS_R3\n#else\n#error \"Unsupported shift register\"\n#endif\n#endif\n\n#define TMP1          SLJIT_R0\n#ifdef SHIFT_REG_IS_R3\n#define TMP2          SLJIT_R3\n#define TMP3          SLJIT_R2\n#else\n#define TMP2          SLJIT_R2\n#define TMP3          SLJIT_R3\n#endif\n#define STR_PTR       SLJIT_R1\n#define STR_END       SLJIT_S0\n#define STACK_TOP     SLJIT_S1\n#define STACK_LIMIT   SLJIT_S2\n#define COUNT_MATCH   SLJIT_S3\n#define ARGUMENTS     SLJIT_S4\n#define RETURN_ADDR   SLJIT_R4\n\n#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)\n#define HAS_VIRTUAL_REGISTERS 1\n#else\n#define HAS_VIRTUAL_REGISTERS 0\n#endif\n\n/* Local space layout. */\n/* Max limit of recursions. */\n#define LIMIT_MATCH      (0 * sizeof(sljit_sw))\n/* Local variables. Their number is computed by check_opcode_types. */\n#define LOCAL0           (1 * sizeof(sljit_sw))\n#define LOCAL1           (2 * sizeof(sljit_sw))\n#define LOCAL2           (3 * sizeof(sljit_sw))\n#define LOCAL3           (4 * sizeof(sljit_sw))\n#define LOCAL4           (5 * sizeof(sljit_sw))\n/* The output vector is stored on the stack, and contains pointers\nto characters. The vector data is divided into two groups: the first\ngroup contains the start / end character pointers, and the second is\nthe start pointers when the end of the capturing group has not yet reached. */\n#define OVECTOR_START    (common->ovector_start)\n#define OVECTOR(i)       (OVECTOR_START + (i) * SSIZE_OF(sw))\n#define OVECTOR_PRIV(i)  (common->cbra_ptr + (i) * SSIZE_OF(sw))\n#define PRIVATE_DATA(cc) (common->private_data_ptrs[(cc) - common->start])\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#define MOV_UCHAR  SLJIT_MOV_U8\n#define IN_UCHARS(x) (x)\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n#define MOV_UCHAR  SLJIT_MOV_U16\n#define UCHAR_SHIFT (1)\n#define IN_UCHARS(x) ((x) * 2)\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n#define MOV_UCHAR  SLJIT_MOV_U32\n#define UCHAR_SHIFT (2)\n#define IN_UCHARS(x) ((x) * 4)\n#else\n#error Unsupported compiling mode\n#endif\n\n/* Shortcuts. */\n#define DEFINE_COMPILER \\\n  struct sljit_compiler *compiler = common->compiler\n#define OP1(op, dst, dstw, src, srcw) \\\n  sljit_emit_op1(compiler, (op), (dst), (dstw), (src), (srcw))\n#define OP2(op, dst, dstw, src1, src1w, src2, src2w) \\\n  sljit_emit_op2(compiler, (op), (dst), (dstw), (src1), (src1w), (src2), (src2w))\n#define OP2U(op, src1, src1w, src2, src2w) \\\n  sljit_emit_op2u(compiler, (op), (src1), (src1w), (src2), (src2w))\n#define OP_SRC(op, src, srcw) \\\n  sljit_emit_op_src(compiler, (op), (src), (srcw))\n#define LABEL() \\\n  sljit_emit_label(compiler)\n#define JUMP(type) \\\n  sljit_emit_jump(compiler, (type))\n#define JUMPTO(type, label) \\\n  sljit_set_label(sljit_emit_jump(compiler, (type)), (label))\n#define JUMPHERE(jump) \\\n  sljit_set_label((jump), sljit_emit_label(compiler))\n#define SET_LABEL(jump, label) \\\n  sljit_set_label((jump), (label))\n#define CMP(type, src1, src1w, src2, src2w) \\\n  sljit_emit_cmp(compiler, (type), (src1), (src1w), (src2), (src2w))\n#define CMPTO(type, src1, src1w, src2, src2w, label) \\\n  sljit_set_label(sljit_emit_cmp(compiler, (type), (src1), (src1w), (src2), (src2w)), (label))\n#define OP_FLAGS(op, dst, dstw, type) \\\n  sljit_emit_op_flags(compiler, (op), (dst), (dstw), (type))\n#define SELECT(type, dst_reg, src1, src1w, src2_reg) \\\n  sljit_emit_select(compiler, (type), (dst_reg), (src1), (src1w), (src2_reg))\n#define GET_LOCAL_BASE(dst, dstw, offset) \\\n  sljit_get_local_base(compiler, (dst), (dstw), (offset))\n\n#define READ_CHAR_MAX ((sljit_u32)0xffffffff)\n\n#define INVALID_UTF_CHAR -1\n#define UNASSIGNED_UTF_CHAR 888\n\n#if defined SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\n\n#define GETCHARINC_INVALID(c, ptr, end, invalid_action) \\\n  { \\\n  if (ptr[0] <= 0x7f) \\\n    c = *ptr++; \\\n  else if (ptr + 1 < end && ptr[1] >= 0x80 && ptr[1] < 0xc0) \\\n    { \\\n    c = ptr[1] - 0x80; \\\n    \\\n    if (ptr[0] >= 0xc2 && ptr[0] <= 0xdf) \\\n      { \\\n      c |= (ptr[0] - 0xc0) << 6; \\\n      ptr += 2; \\\n      } \\\n    else if (ptr + 2 < end && ptr[2] >= 0x80 && ptr[2] < 0xc0) \\\n      { \\\n      c = c << 6 | (ptr[2] - 0x80); \\\n      \\\n      if (ptr[0] >= 0xe0 && ptr[0] <= 0xef) \\\n        { \\\n        c |= (ptr[0] - 0xe0) << 12; \\\n        ptr += 3; \\\n        \\\n        if (c < 0x800 || (c >= 0xd800 && c < 0xe000)) \\\n          { \\\n          invalid_action; \\\n          } \\\n        } \\\n      else if (ptr + 3 < end && ptr[3] >= 0x80 && ptr[3] < 0xc0) \\\n        { \\\n        c = c << 6 | (ptr[3] - 0x80); \\\n        \\\n        if (ptr[0] >= 0xf0 && ptr[0] <= 0xf4) \\\n          { \\\n          c |= (ptr[0] - 0xf0) << 18; \\\n          ptr += 4; \\\n          \\\n          if (c >= 0x110000 || c < 0x10000) \\\n            { \\\n            invalid_action; \\\n            } \\\n          } \\\n        else \\\n          { \\\n          invalid_action; \\\n          } \\\n        } \\\n      else \\\n        { \\\n        invalid_action; \\\n        } \\\n      } \\\n    else \\\n      { \\\n      invalid_action; \\\n      } \\\n    } \\\n  else \\\n    { \\\n    invalid_action; \\\n    } \\\n  }\n\n#define GETCHARBACK_INVALID(c, ptr, start, invalid_action) \\\n  { \\\n  c = ptr[-1]; \\\n  if (c <= 0x7f) \\\n    ptr--; \\\n  else if (ptr - 1 > start && ptr[-1] >= 0x80 && ptr[-1] < 0xc0) \\\n    { \\\n    c -= 0x80; \\\n    \\\n    if (ptr[-2] >= 0xc2 && ptr[-2] <= 0xdf) \\\n      { \\\n      c |= (ptr[-2] - 0xc0) << 6; \\\n      ptr -= 2; \\\n      } \\\n    else if (ptr - 2 > start && ptr[-2] >= 0x80 && ptr[-2] < 0xc0) \\\n      { \\\n      c = c << 6 | (ptr[-2] - 0x80); \\\n      \\\n      if (ptr[-3] >= 0xe0 && ptr[-3] <= 0xef) \\\n        { \\\n        c |= (ptr[-3] - 0xe0) << 12; \\\n        ptr -= 3; \\\n        \\\n        if (c < 0x800 || (c >= 0xd800 && c < 0xe000)) \\\n          { \\\n          invalid_action; \\\n          } \\\n        } \\\n      else if (ptr - 3 > start && ptr[-3] >= 0x80 && ptr[-3] < 0xc0) \\\n        { \\\n        c = c << 6 | (ptr[-3] - 0x80); \\\n        \\\n        if (ptr[-4] >= 0xf0 && ptr[-4] <= 0xf4) \\\n          { \\\n          c |= (ptr[-4] - 0xf0) << 18; \\\n          ptr -= 4; \\\n          \\\n          if (c >= 0x110000 || c < 0x10000) \\\n            { \\\n            invalid_action; \\\n            } \\\n          } \\\n        else \\\n          { \\\n          invalid_action; \\\n          } \\\n        } \\\n      else \\\n        { \\\n        invalid_action; \\\n        } \\\n      } \\\n    else \\\n      { \\\n      invalid_action; \\\n      } \\\n    } \\\n  else \\\n    { \\\n    invalid_action; \\\n    } \\\n  }\n\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n\n#define GETCHARINC_INVALID(c, ptr, end, invalid_action) \\\n  { \\\n  if (ptr[0] < 0xd800 || ptr[0] >= 0xe000) \\\n    c = *ptr++; \\\n  else if (ptr[0] < 0xdc00 && ptr + 1 < end && ptr[1] >= 0xdc00 && ptr[1] < 0xe000) \\\n    { \\\n    c = (((ptr[0] - 0xd800) << 10) | (ptr[1] - 0xdc00)) + 0x10000; \\\n    ptr += 2; \\\n    } \\\n  else \\\n    { \\\n    invalid_action; \\\n    } \\\n  }\n\n#define GETCHARBACK_INVALID(c, ptr, start, invalid_action) \\\n  { \\\n  c = ptr[-1]; \\\n  if (c < 0xd800 || c >= 0xe000) \\\n    ptr--; \\\n  else if (c >= 0xdc00 && ptr - 1 > start && ptr[-2] >= 0xd800 && ptr[-2] < 0xdc00) \\\n    { \\\n    c = (((ptr[-2] - 0xd800) << 10) | (c - 0xdc00)) + 0x10000; \\\n    ptr -= 2; \\\n    } \\\n  else \\\n    { \\\n    invalid_action; \\\n    } \\\n  }\n\n\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n\n#define GETCHARINC_INVALID(c, ptr, end, invalid_action) \\\n  { \\\n  if (ptr[0] < 0xd800 || (ptr[0] >= 0xe000 && ptr[0] < 0x110000)) \\\n    c = *ptr++; \\\n  else \\\n    { \\\n    invalid_action; \\\n    } \\\n  }\n\n#define GETCHARBACK_INVALID(c, ptr, start, invalid_action) \\\n  { \\\n  c = ptr[-1]; \\\n  if (ptr[-1] < 0xd800 || (ptr[-1] >= 0xe000 && ptr[-1] < 0x110000)) \\\n    ptr--; \\\n  else \\\n    { \\\n    invalid_action; \\\n    } \\\n  }\n\n#endif /* PCRE2_CODE_UNIT_WIDTH == [8|16|32] */\n#endif /* SUPPORT_UNICODE */\n\nstatic PCRE2_SPTR bracketend(PCRE2_SPTR cc)\n{\nSLJIT_ASSERT((*cc >= OP_ASSERT && *cc <= OP_ASSERT_SCS) || (*cc >= OP_ONCE && *cc <= OP_SCOND));\ndo cc += GET(cc, 1); while (*cc == OP_ALT);\nSLJIT_ASSERT(*cc >= OP_KET && *cc <= OP_KETRPOS);\ncc += 1 + LINK_SIZE;\nreturn cc;\n}\n\nstatic int no_alternatives(PCRE2_SPTR cc)\n{\nint count = 0;\nSLJIT_ASSERT((*cc >= OP_ASSERT && *cc <= OP_ASSERT_SCS) || (*cc >= OP_ONCE && *cc <= OP_SCOND));\ndo\n  {\n  cc += GET(cc, 1);\n  count++;\n  }\nwhile (*cc == OP_ALT);\nSLJIT_ASSERT(*cc >= OP_KET && *cc <= OP_KETRPOS);\nreturn count;\n}\n\nstatic BOOL find_vreverse(PCRE2_SPTR cc)\n{\n  SLJIT_ASSERT(*cc == OP_ASSERTBACK || *cc == OP_ASSERTBACK_NOT ||  *cc == OP_ASSERTBACK_NA);\n\n  do\n    {\n    if (cc[1 + LINK_SIZE] == OP_VREVERSE)\n      return TRUE;\n    cc += GET(cc, 1);\n    }\n  while (*cc == OP_ALT);\n\n  return FALSE;\n}\n\n/* Functions whose might need modification for all new supported opcodes:\n next_opcode\n check_opcode_types\n set_private_data_ptrs\n get_framesize\n init_frame\n get_recurse_data_length\n copy_recurse_data\n compile_matchingpath\n compile_backtrackingpath\n*/\n\nstatic PCRE2_SPTR next_opcode(compiler_common *common, PCRE2_SPTR cc)\n{\nSLJIT_UNUSED_ARG(common);\nswitch(*cc)\n  {\n  case OP_SOD:\n  case OP_SOM:\n  case OP_SET_SOM:\n  case OP_NOT_WORD_BOUNDARY:\n  case OP_WORD_BOUNDARY:\n  case OP_NOT_DIGIT:\n  case OP_DIGIT:\n  case OP_NOT_WHITESPACE:\n  case OP_WHITESPACE:\n  case OP_NOT_WORDCHAR:\n  case OP_WORDCHAR:\n  case OP_ANY:\n  case OP_ALLANY:\n  case OP_NOTPROP:\n  case OP_PROP:\n  case OP_ANYNL:\n  case OP_NOT_HSPACE:\n  case OP_HSPACE:\n  case OP_NOT_VSPACE:\n  case OP_VSPACE:\n  case OP_EXTUNI:\n  case OP_EODN:\n  case OP_EOD:\n  case OP_CIRC:\n  case OP_CIRCM:\n  case OP_DOLL:\n  case OP_DOLLM:\n  case OP_CRSTAR:\n  case OP_CRMINSTAR:\n  case OP_CRPLUS:\n  case OP_CRMINPLUS:\n  case OP_CRQUERY:\n  case OP_CRMINQUERY:\n  case OP_CRRANGE:\n  case OP_CRMINRANGE:\n  case OP_CRPOSSTAR:\n  case OP_CRPOSPLUS:\n  case OP_CRPOSQUERY:\n  case OP_CRPOSRANGE:\n  case OP_CLASS:\n  case OP_NCLASS:\n  case OP_REF:\n  case OP_REFI:\n  case OP_DNREF:\n  case OP_DNREFI:\n  case OP_RECURSE:\n  case OP_CALLOUT:\n  case OP_ALT:\n  case OP_KET:\n  case OP_KETRMAX:\n  case OP_KETRMIN:\n  case OP_KETRPOS:\n  case OP_REVERSE:\n  case OP_VREVERSE:\n  case OP_ASSERT:\n  case OP_ASSERT_NOT:\n  case OP_ASSERTBACK:\n  case OP_ASSERTBACK_NOT:\n  case OP_ASSERT_NA:\n  case OP_ASSERTBACK_NA:\n  case OP_ASSERT_SCS:\n  case OP_ONCE:\n  case OP_SCRIPT_RUN:\n  case OP_BRA:\n  case OP_BRAPOS:\n  case OP_CBRA:\n  case OP_CBRAPOS:\n  case OP_COND:\n  case OP_SBRA:\n  case OP_SBRAPOS:\n  case OP_SCBRA:\n  case OP_SCBRAPOS:\n  case OP_SCOND:\n  case OP_CREF:\n  case OP_DNCREF:\n  case OP_RREF:\n  case OP_DNRREF:\n  case OP_FALSE:\n  case OP_TRUE:\n  case OP_BRAZERO:\n  case OP_BRAMINZERO:\n  case OP_BRAPOSZERO:\n  case OP_PRUNE:\n  case OP_SKIP:\n  case OP_THEN:\n  case OP_COMMIT:\n  case OP_FAIL:\n  case OP_ACCEPT:\n  case OP_ASSERT_ACCEPT:\n  case OP_CLOSE:\n  case OP_SKIPZERO:\n  case OP_NOT_UCP_WORD_BOUNDARY:\n  case OP_UCP_WORD_BOUNDARY:\n  return cc + PRIV(OP_lengths)[*cc];\n\n  case OP_CHAR:\n  case OP_CHARI:\n  case OP_NOT:\n  case OP_NOTI:\n  case OP_STAR:\n  case OP_MINSTAR:\n  case OP_PLUS:\n  case OP_MINPLUS:\n  case OP_QUERY:\n  case OP_MINQUERY:\n  case OP_UPTO:\n  case OP_MINUPTO:\n  case OP_EXACT:\n  case OP_POSSTAR:\n  case OP_POSPLUS:\n  case OP_POSQUERY:\n  case OP_POSUPTO:\n  case OP_STARI:\n  case OP_MINSTARI:\n  case OP_PLUSI:\n  case OP_MINPLUSI:\n  case OP_QUERYI:\n  case OP_MINQUERYI:\n  case OP_UPTOI:\n  case OP_MINUPTOI:\n  case OP_EXACTI:\n  case OP_POSSTARI:\n  case OP_POSPLUSI:\n  case OP_POSQUERYI:\n  case OP_POSUPTOI:\n  case OP_NOTSTAR:\n  case OP_NOTMINSTAR:\n  case OP_NOTPLUS:\n  case OP_NOTMINPLUS:\n  case OP_NOTQUERY:\n  case OP_NOTMINQUERY:\n  case OP_NOTUPTO:\n  case OP_NOTMINUPTO:\n  case OP_NOTEXACT:\n  case OP_NOTPOSSTAR:\n  case OP_NOTPOSPLUS:\n  case OP_NOTPOSQUERY:\n  case OP_NOTPOSUPTO:\n  case OP_NOTSTARI:\n  case OP_NOTMINSTARI:\n  case OP_NOTPLUSI:\n  case OP_NOTMINPLUSI:\n  case OP_NOTQUERYI:\n  case OP_NOTMINQUERYI:\n  case OP_NOTUPTOI:\n  case OP_NOTMINUPTOI:\n  case OP_NOTEXACTI:\n  case OP_NOTPOSSTARI:\n  case OP_NOTPOSPLUSI:\n  case OP_NOTPOSQUERYI:\n  case OP_NOTPOSUPTOI:\n  cc += PRIV(OP_lengths)[*cc];\n#ifdef SUPPORT_UNICODE\n  if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n  return cc;\n\n  /* Special cases. */\n  case OP_TYPESTAR:\n  case OP_TYPEMINSTAR:\n  case OP_TYPEPLUS:\n  case OP_TYPEMINPLUS:\n  case OP_TYPEQUERY:\n  case OP_TYPEMINQUERY:\n  case OP_TYPEUPTO:\n  case OP_TYPEMINUPTO:\n  case OP_TYPEEXACT:\n  case OP_TYPEPOSSTAR:\n  case OP_TYPEPOSPLUS:\n  case OP_TYPEPOSQUERY:\n  case OP_TYPEPOSUPTO:\n  return cc + PRIV(OP_lengths)[*cc] - 1;\n\n  case OP_ANYBYTE:\n#ifdef SUPPORT_UNICODE\n  if (common->utf) return NULL;\n#endif\n  return cc + 1;\n\n  case OP_CALLOUT_STR:\n  return cc + GET(cc, 1 + 2*LINK_SIZE);\n\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8\n  case OP_ECLASS:\n  case OP_XCLASS:\n  SLJIT_COMPILE_ASSERT(OP_XCLASS + 1 == OP_ECLASS && OP_CLASS + 1 == OP_NCLASS && OP_NCLASS < OP_XCLASS, class_byte_code_order);\n  return cc + GET(cc, 1);\n#endif\n\n  case OP_MARK:\n  case OP_COMMIT_ARG:\n  case OP_PRUNE_ARG:\n  case OP_SKIP_ARG:\n  case OP_THEN_ARG:\n  return cc + 1 + 2 + cc[1];\n\n  default:\n  SLJIT_UNREACHABLE();\n  return NULL;\n  }\n}\n\nstatic sljit_s32 ref_update_local_size(compiler_common *common, PCRE2_SPTR cc, sljit_s32 current_locals_size)\n{\n/* Depends on do_casefulcmp(), do_caselesscmp(), and compile_ref_matchingpath() */\nint locals_size = 2 * SSIZE_OF(sw);\nSLJIT_UNUSED_ARG(common);\n\n#ifdef SUPPORT_UNICODE\nif ((*cc == OP_REFI || *cc == OP_DNREFI) && (common->utf || common->ucp))\n  locals_size = 3 * SSIZE_OF(sw);\n#endif\n\ncc += PRIV(OP_lengths)[*cc];\n/* Although do_casefulcmp() uses only one local, the allocate_stack()\ncalls during the repeat destroys LOCAL1 variables. */\nif (*cc >= OP_CRSTAR && *cc <= OP_CRPOSRANGE)\n  {\n  locals_size += 2 * SSIZE_OF(sw);\n  if (*cc >= OP_CRPOSRANGE && GET2(cc, 1 + IMM2_SIZE + 1) != GET2(cc, 1 + IMM2_SIZE + 1 + IMM2_SIZE))\n    locals_size += SSIZE_OF(sw);\n  }\n\nreturn (current_locals_size >= locals_size) ? current_locals_size : locals_size;\n}\n\nstatic SLJIT_INLINE BOOL is_optimized_cbracket(compiler_common *common, sljit_s32 capture_index)\n{\nsljit_u8 bit = (sljit_u8)(1 << (capture_index & 0x7));\nreturn (common->optimized_cbrackets[capture_index >> 3] & bit) != 0;\n}\n\nstatic SLJIT_INLINE void clear_optimized_cbracket(compiler_common *common, sljit_s32 capture_index)\n{\nsljit_u8 mask = (sljit_u8)~(1 << (capture_index & 0x7));\ncommon->optimized_cbrackets[capture_index >> 3] &= mask;\n}\n\nstatic BOOL check_opcode_types(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend)\n{\nint count;\nPCRE2_SPTR slot;\nPCRE2_SPTR assert_back_end = cc - 1;\nPCRE2_SPTR assert_na_end = cc - 1;\nsljit_s32 locals_size = 2 * SSIZE_OF(sw);\nBOOL set_recursive_head = FALSE;\nBOOL set_capture_last = FALSE;\nBOOL set_mark = FALSE;\n\n/* Calculate important variables (like stack size) and checks whether all opcodes are supported. */\nwhile (cc < ccend)\n  {\n  switch(*cc)\n    {\n    case OP_SET_SOM:\n    common->has_set_som = TRUE;\n    common->might_be_empty = TRUE;\n    cc += 1;\n    break;\n\n    case OP_TYPEUPTO:\n    case OP_TYPEEXACT:\n    if (cc[1 + IMM2_SIZE] == OP_EXTUNI && locals_size <= 3 * SSIZE_OF(sw))\n      locals_size = 3 * SSIZE_OF(sw);\n    cc += (2 + IMM2_SIZE) - 1;\n    break;\n\n    case OP_TYPEPOSSTAR:\n    case OP_TYPEPOSPLUS:\n    case OP_TYPEPOSQUERY:\n    if (cc[1] == OP_EXTUNI && locals_size <= 3 * SSIZE_OF(sw))\n      locals_size = 3 * SSIZE_OF(sw);\n    cc += 2 - 1;\n    break;\n\n    case OP_TYPEPOSUPTO:\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n    if (common->utf && locals_size <= 3 * SSIZE_OF(sw))\n      locals_size = 3 * SSIZE_OF(sw);\n#endif\n    if (cc[1 + IMM2_SIZE] == OP_EXTUNI && locals_size <= 3 * SSIZE_OF(sw))\n      locals_size = 3 * SSIZE_OF(sw);\n    cc += (2 + IMM2_SIZE) - 1;\n    break;\n\n    case OP_REFI:\n    case OP_REF:\n    locals_size = ref_update_local_size(common, cc, locals_size);\n    clear_optimized_cbracket(common, GET2(cc, 1));\n    cc += PRIV(OP_lengths)[*cc];\n    break;\n\n    case OP_ASSERT_NA:\n    case OP_ASSERTBACK_NA:\n    case OP_ASSERT_SCS:\n    slot = bracketend(cc);\n    if (slot > assert_na_end)\n      assert_na_end = slot;\n    cc += 1 + LINK_SIZE;\n    break;\n\n    case OP_CBRAPOS:\n    case OP_SCBRAPOS:\n    clear_optimized_cbracket(common, GET2(cc, 1 + LINK_SIZE));\n    cc += 1 + LINK_SIZE + IMM2_SIZE;\n    break;\n\n    case OP_COND:\n    case OP_SCOND:\n    /* Only AUTO_CALLOUT can insert this opcode. We do\n       not intend to support this case. */\n    if (cc[1 + LINK_SIZE] == OP_CALLOUT || cc[1 + LINK_SIZE] == OP_CALLOUT_STR)\n      return FALSE;\n    cc += 1 + LINK_SIZE;\n    break;\n\n    case OP_CREF:\n    clear_optimized_cbracket(common, GET2(cc, 1));\n    cc += 1 + IMM2_SIZE;\n    break;\n\n    case OP_DNREFI:\n    case OP_DNREF:\n    locals_size = ref_update_local_size(common, cc, locals_size);\n    PCRE2_FALLTHROUGH /* Fall through */\n    case OP_DNCREF:\n    count = GET2(cc, 1 + IMM2_SIZE);\n    slot = common->name_table + GET2(cc, 1) * common->name_entry_size;\n    while (count-- > 0)\n      {\n      clear_optimized_cbracket(common, GET2(slot, 0));\n      slot += common->name_entry_size;\n      }\n    cc += PRIV(OP_lengths)[*cc];\n    break;\n\n    case OP_RECURSE:\n    /* Set its value only once. */\n    set_recursive_head = TRUE;\n    cc += 1 + LINK_SIZE;\n    while (*cc == OP_CREF)\n      {\n      clear_optimized_cbracket(common, GET2(cc, 1));\n      cc += 1 + IMM2_SIZE;\n      }\n    break;\n\n    case OP_CALLOUT:\n    case OP_CALLOUT_STR:\n    set_capture_last = TRUE;\n    cc += (*cc == OP_CALLOUT) ? PRIV(OP_lengths)[OP_CALLOUT] : GET(cc, 1 + 2*LINK_SIZE);\n    break;\n\n    case OP_ASSERTBACK:\n    slot = bracketend(cc);\n    if (slot > assert_back_end)\n      assert_back_end = slot;\n    cc += 1 + LINK_SIZE;\n    break;\n\n    case OP_THEN_ARG:\n    common->has_then = TRUE;\n    common->control_head_ptr = 1;\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case OP_COMMIT_ARG:\n    case OP_PRUNE_ARG:\n    case OP_MARK:\n    set_mark = TRUE;\n    cc += 1 + 2 + cc[1];\n    break;\n\n    case OP_THEN:\n    common->has_then = TRUE;\n    common->control_head_ptr = 1;\n    cc += 1;\n    break;\n\n    case OP_SKIP:\n    if (cc < assert_back_end)\n      common->has_skip_in_assert_back = TRUE;\n    cc += 1;\n    break;\n\n    case OP_SKIP_ARG:\n    common->control_head_ptr = 1;\n    common->has_skip_arg = TRUE;\n    if (cc < assert_back_end)\n      common->has_skip_in_assert_back = TRUE;\n    cc += 1 + 2 + cc[1];\n    break;\n\n    case OP_ASSERT_ACCEPT:\n    if (cc < assert_na_end)\n      return FALSE;\n    cc++;\n    break;\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n    case OP_CRPOSRANGE:\n    /* The second value can be 0 for infinite repeats. */\n    if (common->utf && GET2(cc, 1) != GET2(cc, 1 + IMM2_SIZE) && locals_size <= 3 * SSIZE_OF(sw))\n      locals_size = 3 * SSIZE_OF(sw);\n    cc += 1 + 2 * IMM2_SIZE;\n    break;\n\n    case OP_POSUPTO:\n    case OP_POSUPTOI:\n    case OP_NOTPOSUPTO:\n    case OP_NOTPOSUPTOI:\n    if (common->utf && locals_size <= 3 * SSIZE_OF(sw))\n      locals_size = 3 * SSIZE_OF(sw);\n#endif\n    PCRE2_FALLTHROUGH /* Fall through */\n    default:\n    cc = next_opcode(common, cc);\n    if (cc == NULL)\n      return FALSE;\n    break;\n    }\n  }\n\nSLJIT_ASSERT((locals_size & (SSIZE_OF(sw) - 1)) == 0);\n#if defined SLJIT_DEBUG && SLJIT_DEBUG\ncommon->locals_size = locals_size;\n#endif\n\nif (locals_size > 0)\n  common->ovector_start += locals_size;\n\nif (set_mark)\n  {\n  SLJIT_ASSERT(common->mark_ptr == 0);\n  common->mark_ptr = common->ovector_start;\n  common->ovector_start += sizeof(sljit_sw);\n  }\n\nif (set_recursive_head)\n  {\n  SLJIT_ASSERT(common->recursive_head_ptr == 0);\n  common->recursive_head_ptr = common->ovector_start;\n  common->ovector_start += sizeof(sljit_sw);\n  }\n\nif (set_capture_last)\n  {\n  SLJIT_ASSERT(common->capture_last_ptr == 0);\n  common->capture_last_ptr = common->ovector_start;\n  common->ovector_start += sizeof(sljit_sw);\n  }\n\nreturn TRUE;\n}\n\n#define EARLY_FAIL_ENHANCE_MAX (3 + 3)\n\n/*\n  Start represent the number of allowed early fail enhancements\n\n  The 0-2 values has a special meaning:\n    0 - skip is allowed for all iterators\n    1 - fail is allowed for all iterators\n    2 - fail is allowed for greedy iterators\n    3 - only ranged early fail is allowed\n  >3 - (start - 3) number of remaining ranged early fails allowed\n\nreturn: the updated value of start\n*/\nstatic int detect_early_fail(compiler_common *common, PCRE2_SPTR cc,\n   int *private_data_start, sljit_s32 depth, int start)\n{\nPCRE2_SPTR begin = cc;\nPCRE2_SPTR next_alt;\nPCRE2_SPTR end;\nPCRE2_SPTR accelerated_start;\nint result = 0;\nint count, prev_count;\n\nSLJIT_ASSERT(*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA);\nSLJIT_ASSERT(*cc != OP_CBRA || is_optimized_cbracket(common, GET2(cc, 1 + LINK_SIZE)));\nSLJIT_ASSERT(start < EARLY_FAIL_ENHANCE_MAX);\n\nnext_alt = cc + GET(cc, 1);\nif (*next_alt == OP_ALT && start < 1)\n  start = 1;\n\ndo\n  {\n  count = start;\n  cc += 1 + LINK_SIZE + ((*cc == OP_CBRA) ? IMM2_SIZE : 0);\n\n  while (TRUE)\n    {\n    accelerated_start = NULL;\n\n    switch(*cc)\n      {\n      case OP_SOD:\n      case OP_SOM:\n      case OP_SET_SOM:\n      case OP_NOT_WORD_BOUNDARY:\n      case OP_WORD_BOUNDARY:\n      case OP_EODN:\n      case OP_EOD:\n      case OP_CIRC:\n      case OP_CIRCM:\n      case OP_DOLL:\n      case OP_DOLLM:\n      case OP_NOT_UCP_WORD_BOUNDARY:\n      case OP_UCP_WORD_BOUNDARY:\n      /* Zero width assertions. */\n      cc++;\n      continue;\n\n      case OP_NOT_DIGIT:\n      case OP_DIGIT:\n      case OP_NOT_WHITESPACE:\n      case OP_WHITESPACE:\n      case OP_NOT_WORDCHAR:\n      case OP_WORDCHAR:\n      case OP_ANY:\n      case OP_ALLANY:\n      case OP_ANYBYTE:\n      case OP_NOT_HSPACE:\n      case OP_HSPACE:\n      case OP_NOT_VSPACE:\n      case OP_VSPACE:\n      if (count < 1)\n        count = 1;\n      cc++;\n      continue;\n\n      case OP_ANYNL:\n      case OP_EXTUNI:\n      if (count < 3)\n        count = 3;\n      cc++;\n      continue;\n\n      case OP_NOTPROP:\n      case OP_PROP:\n      if (count < 1)\n        count = 1;\n      cc += 1 + 2;\n      continue;\n\n      case OP_CHAR:\n      case OP_CHARI:\n      case OP_NOT:\n      case OP_NOTI:\n      if (count < 1)\n        count = 1;\n      cc += 2;\n#ifdef SUPPORT_UNICODE\n      if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n      continue;\n\n      case OP_TYPEMINSTAR:\n      case OP_TYPEMINPLUS:\n      if (count == 2)\n        count = 3;\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      case OP_TYPESTAR:\n      case OP_TYPEPLUS:\n      case OP_TYPEPOSSTAR:\n      case OP_TYPEPOSPLUS:\n      /* The type or prop opcode is skipped in the next iteration. */\n      cc += 1;\n\n      if (cc[0] != OP_ANYNL && cc[0] != OP_EXTUNI)\n        {\n        accelerated_start = cc - 1;\n        break;\n        }\n\n      if (count < 3)\n        count = 3;\n      continue;\n\n      case OP_TYPEEXACT:\n      if (count < 1)\n        count = 1;\n      cc += 1 + IMM2_SIZE;\n      continue;\n\n      case OP_TYPEUPTO:\n      case OP_TYPEMINUPTO:\n      case OP_TYPEPOSUPTO:\n      cc += IMM2_SIZE;\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      case OP_TYPEQUERY:\n      case OP_TYPEMINQUERY:\n      case OP_TYPEPOSQUERY:\n      /* The type or prop opcode is skipped in the next iteration. */\n      if (count < 3)\n        count = 3;\n      cc += 1;\n      continue;\n\n      case OP_MINSTAR:\n      case OP_MINPLUS:\n      case OP_MINSTARI:\n      case OP_MINPLUSI:\n      case OP_NOTMINSTAR:\n      case OP_NOTMINPLUS:\n      case OP_NOTMINSTARI:\n      case OP_NOTMINPLUSI:\n      if (count == 2)\n        count = 3;\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      case OP_STAR:\n      case OP_PLUS:\n      case OP_POSSTAR:\n      case OP_POSPLUS:\n\n      case OP_STARI:\n      case OP_PLUSI:\n      case OP_POSSTARI:\n      case OP_POSPLUSI:\n\n      case OP_NOTSTAR:\n      case OP_NOTPLUS:\n      case OP_NOTPOSSTAR:\n      case OP_NOTPOSPLUS:\n\n      case OP_NOTSTARI:\n      case OP_NOTPLUSI:\n      case OP_NOTPOSSTARI:\n      case OP_NOTPOSPLUSI:\n      accelerated_start = cc;\n      cc += 2;\n#ifdef SUPPORT_UNICODE\n      if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n      break;\n\n      case OP_EXACT:\n      if (count < 1)\n        count = 1;\n      cc += 2 + IMM2_SIZE;\n#ifdef SUPPORT_UNICODE\n      if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n      continue;\n\n      case OP_UPTO:\n      case OP_MINUPTO:\n      case OP_POSUPTO:\n      case OP_UPTOI:\n      case OP_MINUPTOI:\n      case OP_EXACTI:\n      case OP_POSUPTOI:\n      case OP_NOTUPTO:\n      case OP_NOTMINUPTO:\n      case OP_NOTEXACT:\n      case OP_NOTPOSUPTO:\n      case OP_NOTUPTOI:\n      case OP_NOTMINUPTOI:\n      case OP_NOTEXACTI:\n      case OP_NOTPOSUPTOI:\n      cc += IMM2_SIZE;\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      case OP_QUERY:\n      case OP_MINQUERY:\n      case OP_POSQUERY:\n      case OP_QUERYI:\n      case OP_MINQUERYI:\n      case OP_POSQUERYI:\n      case OP_NOTQUERY:\n      case OP_NOTMINQUERY:\n      case OP_NOTPOSQUERY:\n      case OP_NOTQUERYI:\n      case OP_NOTMINQUERYI:\n      case OP_NOTPOSQUERYI:\n      if (count < 3)\n        count = 3;\n      cc += 2;\n#ifdef SUPPORT_UNICODE\n      if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n      continue;\n\n      case OP_CLASS:\n      case OP_NCLASS:\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8\n      case OP_XCLASS:\n      case OP_ECLASS:\n      accelerated_start = cc;\n      cc += (*cc >= OP_XCLASS) ? GET(cc, 1) : (unsigned int)(1 + (32 / sizeof(PCRE2_UCHAR)));\n#else\n      accelerated_start = cc;\n      cc += (1 + (32 / sizeof(PCRE2_UCHAR)));\n#endif\n\n      switch (*cc)\n        {\n        case OP_CRMINSTAR:\n        case OP_CRMINPLUS:\n        if (count == 2)\n          count = 3;\n        PCRE2_FALLTHROUGH /* Fall through */\n\n        case OP_CRSTAR:\n        case OP_CRPLUS:\n        case OP_CRPOSSTAR:\n        case OP_CRPOSPLUS:\n        cc++;\n        break;\n\n        case OP_CRRANGE:\n        case OP_CRMINRANGE:\n        case OP_CRPOSRANGE:\n        if (GET2(cc, 1) == GET2(cc, 1 + IMM2_SIZE))\n          {\n          /* Exact repeat. */\n          cc += 1 + 2 * IMM2_SIZE;\n          if (count < 1)\n            count = 1;\n          continue;\n          }\n\n        cc += 2 * IMM2_SIZE;\n        PCRE2_FALLTHROUGH /* Fall through */\n        case OP_CRQUERY:\n        case OP_CRMINQUERY:\n        case OP_CRPOSQUERY:\n        cc++;\n        if (count < 3)\n          count = 3;\n        continue;\n\n        default:\n        /* No repeat. */\n        if (count < 1)\n          count = 1;\n        continue;\n        }\n      break;\n\n      case OP_BRA:\n      case OP_CBRA:\n      prev_count = count;\n      if (count < 1)\n        count = 1;\n\n      if (depth >= 4)\n        break;\n\n      if (count < 3 && cc[GET(cc, 1)] == OP_ALT)\n        count = 3;\n\n      end = bracketend(cc);\n      if (end[-1 - LINK_SIZE] != OP_KET || (*cc == OP_CBRA && !is_optimized_cbracket(common, GET2(cc, 1 + LINK_SIZE))))\n        break;\n\n      prev_count = detect_early_fail(common, cc, private_data_start, depth + 1, prev_count);\n\n      if (prev_count > count)\n        count = prev_count;\n\n      if (PRIVATE_DATA(cc) != 0)\n        common->private_data_ptrs[begin - common->start] = 1;\n\n      if (count < EARLY_FAIL_ENHANCE_MAX)\n        {\n        cc = end;\n        continue;\n        }\n      break;\n\n      case OP_KET:\n      SLJIT_ASSERT(PRIVATE_DATA(cc) == 0);\n      if (cc >= next_alt)\n        break;\n      cc += 1 + LINK_SIZE;\n      continue;\n      }\n\n    if (accelerated_start == NULL)\n      break;\n\n    if (count == 0)\n      {\n      common->fast_forward_bc_ptr = accelerated_start;\n      common->private_data_ptrs[(accelerated_start + 1) - common->start] = ((*private_data_start) << 3) | type_skip;\n      *private_data_start += sizeof(sljit_sw);\n      count = 4;\n      }\n    else if (count < 3)\n      {\n      common->private_data_ptrs[(accelerated_start + 1) - common->start] = ((*private_data_start) << 3) | type_fail;\n\n      if (common->early_fail_start_ptr == 0)\n        common->early_fail_start_ptr = *private_data_start;\n\n      *private_data_start += sizeof(sljit_sw);\n      common->early_fail_end_ptr = *private_data_start;\n\n      if (*private_data_start > SLJIT_MAX_LOCAL_SIZE)\n        return EARLY_FAIL_ENHANCE_MAX;\n\n      count = 4;\n      }\n    else\n      {\n      common->private_data_ptrs[(accelerated_start + 1) - common->start] = ((*private_data_start) << 3) | type_fail_range;\n\n      if (common->early_fail_start_ptr == 0)\n        common->early_fail_start_ptr = *private_data_start;\n\n      *private_data_start += 2 * sizeof(sljit_sw);\n      common->early_fail_end_ptr = *private_data_start;\n\n      if (*private_data_start > SLJIT_MAX_LOCAL_SIZE)\n        return EARLY_FAIL_ENHANCE_MAX;\n\n      count++;\n      }\n\n    /* Cannot be part of a repeat. */\n    common->private_data_ptrs[begin - common->start] = 1;\n\n    if (count >= EARLY_FAIL_ENHANCE_MAX)\n      break;\n    }\n\n  if (*cc != OP_ALT && *cc != OP_KET)\n    result = EARLY_FAIL_ENHANCE_MAX;\n  else if (result < count)\n    result = count;\n\n  cc = next_alt;\n  next_alt = cc + GET(cc, 1);\n  }\nwhile (*cc == OP_ALT);\n\nreturn result;\n}\n\nstatic int get_class_iterator_size(PCRE2_SPTR cc)\n{\nsljit_u32 min;\nsljit_u32 max;\nswitch(*cc)\n  {\n  case OP_CRSTAR:\n  case OP_CRPLUS:\n  return 2;\n\n  case OP_CRMINSTAR:\n  case OP_CRMINPLUS:\n  case OP_CRQUERY:\n  case OP_CRMINQUERY:\n  return 1;\n\n  case OP_CRRANGE:\n  case OP_CRMINRANGE:\n  min = GET2(cc, 1);\n  max = GET2(cc, 1 + IMM2_SIZE);\n  if (max == 0)\n    return (*cc == OP_CRRANGE) ? 2 : 1;\n  max -= min;\n  if (max > (sljit_u32)(*cc == OP_CRRANGE ? 0 : 1))\n    max = 2;\n  return max;\n\n  default:\n  return 0;\n  }\n}\n\nstatic BOOL detect_repeat(compiler_common *common, PCRE2_SPTR begin)\n{\nPCRE2_SPTR end = bracketend(begin);\nPCRE2_SPTR next;\nPCRE2_SPTR next_end;\nPCRE2_SPTR max_end;\nPCRE2_UCHAR type;\nsljit_sw length = end - begin;\nsljit_s32 min, max, i;\n\n/* Detect fixed iterations first. */\nif (end[-(1 + LINK_SIZE)] != OP_KET || PRIVATE_DATA(begin) != 0)\n  return FALSE;\n\n/* /(?:AB){4,6}/ is currently converted to /(?:AB){3}(?AB){1,3}/\n * Skip the check of the second part. */\nif (PRIVATE_DATA(end - LINK_SIZE) != 0)\n  return TRUE;\n\nnext = end;\nmin = 1;\nwhile (1)\n  {\n  if (*next != *begin)\n    break;\n  next_end = bracketend(next);\n  if (next_end - next != length || memcmp(begin, next, IN_UCHARS(length)) != 0)\n    break;\n  next = next_end;\n  min++;\n  }\n\nif (min == 2)\n  return FALSE;\n\nmax = 0;\nmax_end = next;\nif (*next == OP_BRAZERO || *next == OP_BRAMINZERO)\n  {\n  type = *next;\n  while (1)\n    {\n    if (next[0] != type || next[1] != OP_BRA || next[2 + LINK_SIZE] != *begin)\n      break;\n    next_end = bracketend(next + 2 + LINK_SIZE);\n    if (next_end - next != (length + 2 + LINK_SIZE) || memcmp(begin, next + 2 + LINK_SIZE, IN_UCHARS(length)) != 0)\n      break;\n    next = next_end;\n    max++;\n    }\n\n  if (next[0] == type && next[1] == *begin && max >= 1)\n    {\n    next_end = bracketend(next + 1);\n    if (next_end - next == (length + 1) && memcmp(begin, next + 1, IN_UCHARS(length)) == 0)\n      {\n      for (i = 0; i < max; i++, next_end += 1 + LINK_SIZE)\n        if (*next_end != OP_KET)\n          break;\n\n      if (i == max)\n        {\n        /* Patterns must fit into an int32 even for link-size=4. */\n        common->private_data_ptrs[max_end - common->start - LINK_SIZE] = (sljit_s32)(next_end - max_end);\n        common->private_data_ptrs[max_end - common->start - LINK_SIZE + 1] = (type == OP_BRAZERO) ? OP_UPTO : OP_MINUPTO;\n        /* +2 the original and the last. */\n        common->private_data_ptrs[max_end - common->start - LINK_SIZE + 2] = max + 2;\n        if (min == 1)\n          return TRUE;\n        min--;\n        max_end -= (1 + LINK_SIZE) + GET(max_end, -LINK_SIZE);\n        }\n      }\n    }\n  }\n\nif (min >= 3)\n  {\n  common->private_data_ptrs[end - common->start - LINK_SIZE] = (sljit_s32)(max_end - end);\n  common->private_data_ptrs[end - common->start - LINK_SIZE + 1] = OP_EXACT;\n  common->private_data_ptrs[end - common->start - LINK_SIZE + 2] = min;\n  return TRUE;\n  }\n\nreturn FALSE;\n}\n\n#define CASE_ITERATOR_PRIVATE_DATA_1 \\\n    case OP_MINSTAR: \\\n    case OP_MINPLUS: \\\n    case OP_QUERY: \\\n    case OP_MINQUERY: \\\n    case OP_MINSTARI: \\\n    case OP_MINPLUSI: \\\n    case OP_QUERYI: \\\n    case OP_MINQUERYI: \\\n    case OP_NOTMINSTAR: \\\n    case OP_NOTMINPLUS: \\\n    case OP_NOTQUERY: \\\n    case OP_NOTMINQUERY: \\\n    case OP_NOTMINSTARI: \\\n    case OP_NOTMINPLUSI: \\\n    case OP_NOTQUERYI: \\\n    case OP_NOTMINQUERYI:\n\n#define CASE_ITERATOR_PRIVATE_DATA_2A \\\n    case OP_STAR: \\\n    case OP_PLUS: \\\n    case OP_STARI: \\\n    case OP_PLUSI: \\\n    case OP_NOTSTAR: \\\n    case OP_NOTPLUS: \\\n    case OP_NOTSTARI: \\\n    case OP_NOTPLUSI:\n\n#define CASE_ITERATOR_PRIVATE_DATA_2B \\\n    case OP_UPTO: \\\n    case OP_MINUPTO: \\\n    case OP_UPTOI: \\\n    case OP_MINUPTOI: \\\n    case OP_NOTUPTO: \\\n    case OP_NOTMINUPTO: \\\n    case OP_NOTUPTOI: \\\n    case OP_NOTMINUPTOI:\n\n#define CASE_ITERATOR_TYPE_PRIVATE_DATA_1 \\\n    case OP_TYPEMINSTAR: \\\n    case OP_TYPEMINPLUS: \\\n    case OP_TYPEQUERY: \\\n    case OP_TYPEMINQUERY:\n\n#define CASE_ITERATOR_TYPE_PRIVATE_DATA_2A \\\n    case OP_TYPESTAR: \\\n    case OP_TYPEPLUS:\n\n#define CASE_ITERATOR_TYPE_PRIVATE_DATA_2B \\\n    case OP_TYPEUPTO: \\\n    case OP_TYPEMINUPTO:\n\nstatic void set_private_data_ptrs(compiler_common *common, int *private_data_start, PCRE2_SPTR ccend)\n{\nPCRE2_SPTR cc = common->start;\nPCRE2_SPTR alternative;\nPCRE2_SPTR end = NULL;\nint private_data_ptr = *private_data_start;\nint space, size, bracketlen;\nBOOL repeat_check = TRUE;\n\nwhile (cc < ccend)\n  {\n  space = 0;\n  size = 0;\n  bracketlen = 0;\n  if (private_data_ptr > SLJIT_MAX_LOCAL_SIZE)\n    break;\n\n  /* When the bracket is prefixed by a zero iteration, skip the repeat check (at this point). */\n  if (repeat_check && (*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA || *cc == OP_COND))\n    {\n    if (detect_repeat(common, cc))\n      {\n      /* These brackets are converted to repeats, so no global\n      based single character repeat is allowed. */\n      if (cc >= end)\n        end = bracketend(cc);\n      }\n    }\n  repeat_check = TRUE;\n\n  switch(*cc)\n    {\n    case OP_KET:\n    if (common->private_data_ptrs[cc + 1 - common->start] != 0)\n      {\n      common->private_data_ptrs[cc - common->start] = private_data_ptr;\n      private_data_ptr += sizeof(sljit_sw);\n      cc += common->private_data_ptrs[cc + 1 - common->start];\n      }\n    cc += 1 + LINK_SIZE;\n    break;\n\n    case OP_ASSERT:\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK:\n    case OP_ASSERTBACK_NOT:\n    case OP_ASSERT_NA:\n    case OP_ONCE:\n    case OP_SCRIPT_RUN:\n    case OP_BRAPOS:\n    case OP_SBRA:\n    case OP_SBRAPOS:\n    case OP_SCOND:\n    common->private_data_ptrs[cc - common->start] = private_data_ptr;\n    private_data_ptr += sizeof(sljit_sw);\n    bracketlen = 1 + LINK_SIZE;\n    break;\n\n    case OP_ASSERTBACK_NA:\n    common->private_data_ptrs[cc - common->start] = private_data_ptr;\n    private_data_ptr += sizeof(sljit_sw);\n\n    if (find_vreverse(cc))\n      {\n      common->private_data_ptrs[cc + 1 - common->start] = 1;\n      private_data_ptr += sizeof(sljit_sw);\n      }\n\n    bracketlen = 1 + LINK_SIZE;\n    break;\n\n    case OP_ASSERT_SCS:\n    common->private_data_ptrs[cc - common->start] = private_data_ptr;\n    private_data_ptr += 2 * sizeof(sljit_sw);\n    bracketlen = 1 + LINK_SIZE;\n    break;\n\n    case OP_CBRAPOS:\n    case OP_SCBRAPOS:\n    common->private_data_ptrs[cc - common->start] = private_data_ptr;\n    private_data_ptr += sizeof(sljit_sw);\n    bracketlen = 1 + LINK_SIZE + IMM2_SIZE;\n    break;\n\n    case OP_COND:\n    /* Might be a hidden SCOND. */\n    common->private_data_ptrs[cc - common->start] = 0;\n    alternative = cc + GET(cc, 1);\n    if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN)\n      {\n      common->private_data_ptrs[cc - common->start] = private_data_ptr;\n      private_data_ptr += sizeof(sljit_sw);\n      }\n    bracketlen = 1 + LINK_SIZE;\n    break;\n\n    case OP_BRA:\n    bracketlen = 1 + LINK_SIZE;\n    break;\n\n    case OP_CBRA:\n    case OP_SCBRA:\n    bracketlen = 1 + LINK_SIZE + IMM2_SIZE;\n    break;\n\n    case OP_BRAZERO:\n    case OP_BRAMINZERO:\n    case OP_BRAPOSZERO:\n    size = 1;\n    repeat_check = FALSE;\n    break;\n\n    CASE_ITERATOR_PRIVATE_DATA_1\n    size = -2;\n    space = 1;\n    break;\n\n    CASE_ITERATOR_PRIVATE_DATA_2A\n    size = -2;\n    space = 2;\n    break;\n\n    CASE_ITERATOR_PRIVATE_DATA_2B\n    size = -(2 + IMM2_SIZE);\n    space = 2;\n    break;\n\n    CASE_ITERATOR_TYPE_PRIVATE_DATA_1\n    size = 1;\n    space = 1;\n    break;\n\n    CASE_ITERATOR_TYPE_PRIVATE_DATA_2A\n    size = 1;\n    if (cc[1] != OP_EXTUNI)\n      space = 2;\n    break;\n\n    case OP_TYPEUPTO:\n    size = 1 + IMM2_SIZE;\n    if (cc[1 + IMM2_SIZE] != OP_EXTUNI)\n      space = 2;\n    break;\n\n    case OP_TYPEMINUPTO:\n    size = 1 + IMM2_SIZE;\n    space = 2;\n    break;\n\n    case OP_CLASS:\n    case OP_NCLASS:\n    size = 1 + 32 / sizeof(PCRE2_UCHAR);\n    space = get_class_iterator_size(cc + size);\n    break;\n\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8\n    case OP_XCLASS:\n    case OP_ECLASS:\n    size = GET(cc, 1);\n    space = get_class_iterator_size(cc + size);\n    break;\n#endif\n\n    default:\n    cc = next_opcode(common, cc);\n    SLJIT_ASSERT(cc != NULL);\n    break;\n    }\n\n  /* Character iterators, which are not inside a repeated bracket,\n     gets a private slot instead of allocating it on the stack. */\n  if (space > 0 && cc >= end)\n    {\n    common->private_data_ptrs[cc - common->start] = private_data_ptr;\n    private_data_ptr += sizeof(sljit_sw) * space;\n    }\n\n  if (size != 0)\n    {\n    if (size < 0)\n      {\n      cc += -size;\n#ifdef SUPPORT_UNICODE\n      if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n      }\n    else\n      cc += size;\n    }\n\n  if (bracketlen > 0)\n    {\n    if (cc >= end)\n      {\n      end = bracketend(cc);\n      if (end[-1 - LINK_SIZE] == OP_KET)\n        end = NULL;\n      }\n    cc += bracketlen;\n    }\n  }\n*private_data_start = private_data_ptr;\n}\n\nstatic SLJIT_INLINE BOOL is_cbracket_processed(compiler_common *common, sljit_s32 capture_index)\n{\nsljit_u8 bit = (sljit_u8)(1 << (capture_index & 0x7));\nsljit_u8 *ptr = common->cbracket_bitset + (capture_index >> 3);\nsljit_u8 value = *ptr;\n\n*ptr |= bit;\nreturn (value & bit) != 0;\n}\n\n/* Returns with a frame_types (always < 0) if no need for frame. */\nstatic int get_framesize(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, BOOL recursive, BOOL *needs_control_head)\n{\nint length = 0;\nint possessive = 0;\nint offset;\nBOOL stack_restore = FALSE;\nBOOL setsom_found = recursive;\nBOOL setmark_found = recursive;\n/* The last capture is a local variable even for recursions. */\nBOOL capture_last_found = FALSE;\n\n#if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD\nSLJIT_ASSERT(common->control_head_ptr != 0);\n*needs_control_head = TRUE;\n#else\n*needs_control_head = FALSE;\n#endif\n\nmemset(common->cbracket_bitset, 0, common->cbracket_bitset_length);\n\nif (ccend == NULL)\n  {\n  ccend = bracketend(cc) - (1 + LINK_SIZE);\n  if (!recursive && (*cc == OP_CBRAPOS || *cc == OP_SCBRAPOS))\n    {\n    possessive = length = (common->capture_last_ptr != 0) ? 5 : 3;\n    /* This is correct regardless of common->capture_last_ptr. */\n    capture_last_found = TRUE;\n    }\n  cc = next_opcode(common, cc);\n  }\n\nSLJIT_ASSERT(cc != NULL);\nwhile (cc < ccend)\n  switch(*cc)\n    {\n    case OP_SET_SOM:\n    SLJIT_ASSERT(common->has_set_som);\n    stack_restore = TRUE;\n    if (!setsom_found)\n      {\n      length += 2;\n      setsom_found = TRUE;\n      }\n    cc += 1;\n    break;\n\n    case OP_MARK:\n    case OP_COMMIT_ARG:\n    case OP_PRUNE_ARG:\n    case OP_THEN_ARG:\n    SLJIT_ASSERT(common->mark_ptr != 0);\n    stack_restore = TRUE;\n    if (!setmark_found)\n      {\n      length += 2;\n      setmark_found = TRUE;\n      }\n    if (common->control_head_ptr != 0)\n      *needs_control_head = TRUE;\n    cc += 1 + 2 + cc[1];\n    break;\n\n    case OP_RECURSE:\n    stack_restore = TRUE;\n    if (common->has_set_som && !setsom_found)\n      {\n      length += 2;\n      setsom_found = TRUE;\n      }\n    if (common->mark_ptr != 0 && !setmark_found)\n      {\n      length += 2;\n      setmark_found = TRUE;\n      }\n    if (common->capture_last_ptr != 0 && !capture_last_found)\n      {\n      length += 2;\n      capture_last_found = TRUE;\n      }\n\n    cc += 1 + LINK_SIZE;\n    while (*cc == OP_CREF)\n      {\n      offset = GET2(cc, 1);\n      if (!is_cbracket_processed(common, offset))\n        length += 3;\n      cc += 1 + IMM2_SIZE;\n      }\n    break;\n\n    case OP_CBRA:\n    case OP_CBRAPOS:\n    case OP_SCBRA:\n    case OP_SCBRAPOS:\n    stack_restore = TRUE;\n    if (common->capture_last_ptr != 0 && !capture_last_found)\n      {\n      length += 2;\n      capture_last_found = TRUE;\n      }\n\n    offset = GET2(cc, 1 + LINK_SIZE);\n    if (!is_cbracket_processed(common, offset))\n      length += 3;\n    cc += 1 + LINK_SIZE + IMM2_SIZE;\n    break;\n\n    case OP_THEN:\n    stack_restore = TRUE;\n    if (common->control_head_ptr != 0)\n      *needs_control_head = TRUE;\n    cc ++;\n    break;\n\n    default:\n    stack_restore = TRUE;\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case OP_NOT_WORD_BOUNDARY:\n    case OP_WORD_BOUNDARY:\n    case OP_NOT_DIGIT:\n    case OP_DIGIT:\n    case OP_NOT_WHITESPACE:\n    case OP_WHITESPACE:\n    case OP_NOT_WORDCHAR:\n    case OP_WORDCHAR:\n    case OP_ANY:\n    case OP_ALLANY:\n    case OP_ANYBYTE:\n    case OP_NOTPROP:\n    case OP_PROP:\n    case OP_ANYNL:\n    case OP_NOT_HSPACE:\n    case OP_HSPACE:\n    case OP_NOT_VSPACE:\n    case OP_VSPACE:\n    case OP_EXTUNI:\n    case OP_EODN:\n    case OP_EOD:\n    case OP_CIRC:\n    case OP_CIRCM:\n    case OP_DOLL:\n    case OP_DOLLM:\n    case OP_CHAR:\n    case OP_CHARI:\n    case OP_NOT:\n    case OP_NOTI:\n\n    case OP_EXACT:\n    case OP_POSSTAR:\n    case OP_POSPLUS:\n    case OP_POSQUERY:\n    case OP_POSUPTO:\n\n    case OP_EXACTI:\n    case OP_POSSTARI:\n    case OP_POSPLUSI:\n    case OP_POSQUERYI:\n    case OP_POSUPTOI:\n\n    case OP_NOTEXACT:\n    case OP_NOTPOSSTAR:\n    case OP_NOTPOSPLUS:\n    case OP_NOTPOSQUERY:\n    case OP_NOTPOSUPTO:\n\n    case OP_NOTEXACTI:\n    case OP_NOTPOSSTARI:\n    case OP_NOTPOSPLUSI:\n    case OP_NOTPOSQUERYI:\n    case OP_NOTPOSUPTOI:\n\n    case OP_TYPEEXACT:\n    case OP_TYPEPOSSTAR:\n    case OP_TYPEPOSPLUS:\n    case OP_TYPEPOSQUERY:\n    case OP_TYPEPOSUPTO:\n\n    case OP_CLASS:\n    case OP_NCLASS:\n    case OP_XCLASS:\n    case OP_ECLASS:\n\n    case OP_CALLOUT:\n    case OP_CALLOUT_STR:\n\n    case OP_NOT_UCP_WORD_BOUNDARY:\n    case OP_UCP_WORD_BOUNDARY:\n\n    cc = next_opcode(common, cc);\n    SLJIT_ASSERT(cc != NULL);\n    break;\n    }\n\n/* Possessive quantifiers can use a special case. */\nif (SLJIT_UNLIKELY(possessive == length))\n  return stack_restore ? no_frame : no_stack;\n\nif (length > 0)\n  return length + 1;\nreturn stack_restore ? no_frame : no_stack;\n}\n\nstatic void init_frame(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, int stackpos, int stacktop)\n{\nDEFINE_COMPILER;\nBOOL setsom_found = FALSE;\nBOOL setmark_found = FALSE;\n/* The last capture is a local variable even for recursions. */\nBOOL capture_last_found = FALSE;\nint offset;\n\n/* >= 1 + shortest item size (2) */\nSLJIT_UNUSED_ARG(stacktop);\nSLJIT_ASSERT(stackpos >= stacktop + 2);\n\nmemset(common->cbracket_bitset, 0, common->cbracket_bitset_length);\n\nstackpos = STACK(stackpos);\nif (ccend == NULL)\n  {\n  ccend = bracketend(cc) - (1 + LINK_SIZE);\n  if (*cc != OP_CBRAPOS && *cc != OP_SCBRAPOS)\n    cc = next_opcode(common, cc);\n  }\n\n/* The data is restored by do_revertframes(). */\nSLJIT_ASSERT(cc != NULL);\nwhile (cc < ccend)\n  switch(*cc)\n    {\n    case OP_SET_SOM:\n    SLJIT_ASSERT(common->has_set_som);\n    if (!setsom_found)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0));\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -OVECTOR(0));\n      stackpos -= SSIZE_OF(sw);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);\n      stackpos -= SSIZE_OF(sw);\n      setsom_found = TRUE;\n      }\n    cc += 1;\n    break;\n\n    case OP_MARK:\n    case OP_COMMIT_ARG:\n    case OP_PRUNE_ARG:\n    case OP_THEN_ARG:\n    SLJIT_ASSERT(common->mark_ptr != 0);\n    if (!setmark_found)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->mark_ptr);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -common->mark_ptr);\n      stackpos -= SSIZE_OF(sw);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);\n      stackpos -= SSIZE_OF(sw);\n      setmark_found = TRUE;\n      }\n    cc += 1 + 2 + cc[1];\n    break;\n\n    case OP_RECURSE:\n    if (common->has_set_som && !setsom_found)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0));\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -OVECTOR(0));\n      stackpos -= SSIZE_OF(sw);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);\n      stackpos -= SSIZE_OF(sw);\n      setsom_found = TRUE;\n      }\n    if (common->mark_ptr != 0 && !setmark_found)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->mark_ptr);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -common->mark_ptr);\n      stackpos -= SSIZE_OF(sw);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);\n      stackpos -= SSIZE_OF(sw);\n      setmark_found = TRUE;\n      }\n    if (common->capture_last_ptr != 0 && !capture_last_found)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -common->capture_last_ptr);\n      stackpos -= SSIZE_OF(sw);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);\n      stackpos -= SSIZE_OF(sw);\n      capture_last_found = TRUE;\n      }\n    cc += 1 + LINK_SIZE;\n    while (*cc == OP_CREF)\n      {\n      offset = GET2(cc, 1);\n      if (!is_cbracket_processed(common, offset))\n        {\n        offset <<= 1;\n        OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, OVECTOR(offset));\n        stackpos -= SSIZE_OF(sw);\n        OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));\n        OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));\n        OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);\n        stackpos -= SSIZE_OF(sw);\n        OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP2, 0);\n        stackpos -= SSIZE_OF(sw);\n        }\n      cc += 1 + IMM2_SIZE;\n      }\n    break;\n\n    case OP_CBRA:\n    case OP_CBRAPOS:\n    case OP_SCBRA:\n    case OP_SCBRAPOS:\n    if (common->capture_last_ptr != 0 && !capture_last_found)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -common->capture_last_ptr);\n      stackpos -= SSIZE_OF(sw);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);\n      stackpos -= SSIZE_OF(sw);\n      capture_last_found = TRUE;\n      }\n\n    offset = GET2(cc, 1 + LINK_SIZE);\n    if (!is_cbracket_processed(common, offset))\n      {\n      offset <<= 1;\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, OVECTOR(offset));\n      stackpos -= SSIZE_OF(sw);\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));\n      OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);\n      stackpos -= SSIZE_OF(sw);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP2, 0);\n      stackpos -= SSIZE_OF(sw);\n      }\n\n    cc += 1 + LINK_SIZE + IMM2_SIZE;\n    break;\n\n    default:\n    cc = next_opcode(common, cc);\n    SLJIT_ASSERT(cc != NULL);\n    break;\n    }\n\nOP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, 0);\nSLJIT_ASSERT(stackpos == STACK(stacktop));\n}\n\n#define RECURSE_TMP_REG_COUNT 3\n\ntypedef struct delayed_mem_copy_status {\n  struct sljit_compiler *compiler;\n  int store_bases[RECURSE_TMP_REG_COUNT];\n  sljit_s32 store_offsets[RECURSE_TMP_REG_COUNT];\n  int tmp_regs[RECURSE_TMP_REG_COUNT];\n  int saved_tmp_regs[RECURSE_TMP_REG_COUNT];\n  int next_tmp_reg;\n} delayed_mem_copy_status;\n\nstatic void delayed_mem_copy_init(delayed_mem_copy_status *status, compiler_common *common)\n{\nint i;\n\nfor (i = 0; i < RECURSE_TMP_REG_COUNT; i++)\n  {\n  SLJIT_ASSERT(status->tmp_regs[i] >= 0);\n  SLJIT_ASSERT(sljit_get_register_index(SLJIT_GP_REGISTER, status->saved_tmp_regs[i]) < 0 || status->tmp_regs[i] == status->saved_tmp_regs[i]);\n\n  status->store_bases[i] = -1;\n  }\nstatus->next_tmp_reg = 0;\nstatus->compiler = common->compiler;\n}\n\nstatic void delayed_mem_copy_move(delayed_mem_copy_status *status, int load_base, sljit_sw load_offset,\n  int store_base, sljit_s32 store_offset)\n{\nstruct sljit_compiler *compiler = status->compiler;\nint next_tmp_reg = status->next_tmp_reg;\nint tmp_reg = status->tmp_regs[next_tmp_reg];\n\nSLJIT_ASSERT(load_base > 0 && store_base > 0);\n\nif (status->store_bases[next_tmp_reg] == -1)\n  {\n  /* Preserve virtual registers. */\n  if (sljit_get_register_index(SLJIT_GP_REGISTER, status->saved_tmp_regs[next_tmp_reg]) < 0)\n    OP1(SLJIT_MOV, status->saved_tmp_regs[next_tmp_reg], 0, tmp_reg, 0);\n  }\nelse\n  OP1(SLJIT_MOV, SLJIT_MEM1(status->store_bases[next_tmp_reg]), status->store_offsets[next_tmp_reg], tmp_reg, 0);\n\nOP1(SLJIT_MOV, tmp_reg, 0, SLJIT_MEM1(load_base), load_offset);\nstatus->store_bases[next_tmp_reg] = store_base;\nstatus->store_offsets[next_tmp_reg] = store_offset;\n\nstatus->next_tmp_reg = (next_tmp_reg + 1) % RECURSE_TMP_REG_COUNT;\n}\n\nstatic void delayed_mem_copy_finish(delayed_mem_copy_status *status)\n{\nstruct sljit_compiler *compiler = status->compiler;\nint next_tmp_reg = status->next_tmp_reg;\nint tmp_reg, saved_tmp_reg, i;\n\nfor (i = 0; i < RECURSE_TMP_REG_COUNT; i++)\n  {\n  if (status->store_bases[next_tmp_reg] != -1)\n    {\n    tmp_reg = status->tmp_regs[next_tmp_reg];\n    saved_tmp_reg = status->saved_tmp_regs[next_tmp_reg];\n\n    OP1(SLJIT_MOV, SLJIT_MEM1(status->store_bases[next_tmp_reg]), status->store_offsets[next_tmp_reg], tmp_reg, 0);\n\n    /* Restore virtual registers. */\n    if (sljit_get_register_index(SLJIT_GP_REGISTER, saved_tmp_reg) < 0)\n      OP1(SLJIT_MOV, tmp_reg, 0, saved_tmp_reg, 0);\n    }\n\n  next_tmp_reg = (next_tmp_reg + 1) % RECURSE_TMP_REG_COUNT;\n  }\n}\n\n#undef RECURSE_TMP_REG_COUNT\n\nstatic BOOL recurse_check_bit(compiler_common *common, sljit_sw bit_index)\n{\nuint8_t *byte;\nuint8_t mask;\n\nSLJIT_ASSERT((bit_index & (sizeof(sljit_sw) - 1)) == 0);\n\nbit_index >>= SLJIT_WORD_SHIFT;\n\nSLJIT_ASSERT((bit_index >> 3) < common->recurse_bitset_size);\n\nmask = 1 << (bit_index & 0x7);\nbyte = common->recurse_bitset + (bit_index >> 3);\n\nif (*byte & mask)\n  return FALSE;\n\n*byte |= mask;\nreturn TRUE;\n}\n\nenum get_recurse_flags {\n  recurse_flag_quit_found = (1 << 0),\n  recurse_flag_accept_found = (1 << 1),\n  recurse_flag_setsom_found = (1 << 2),\n  recurse_flag_setmark_found = (1 << 3),\n  recurse_flag_control_head_found = (1 << 4),\n  recurse_flag_recurse_arg = (1 << 5),\n};\n\nstatic int get_recurse_data_length(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, uint32_t *result_flags)\n{\nint length = 1;\nint size, offset;\nPCRE2_SPTR alternative, cref;\nuint32_t recurse_flags = 0;\n\nmemset(common->recurse_bitset, 0, common->recurse_bitset_size);\n\nif (common->currententry->arg_size > 0)\n  {\n  cref = common->currententry->arg_start;\n\n  do\n    {\n    offset = GET2(cref, 1);\n    recurse_check_bit(common, OVECTOR(offset << 1));\n    cref += 1 + IMM2_SIZE;\n    }\n  while (*cref == OP_CREF);\n  }\n\n#if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD\nSLJIT_ASSERT(common->control_head_ptr != 0);\nrecurse_flags |= recurse_flag_control_head_found;\n#endif\n\n/* Calculate the sum of the private machine words. */\nwhile (cc < ccend)\n  {\n  size = 0;\n  switch(*cc)\n    {\n    case OP_SET_SOM:\n    SLJIT_ASSERT(common->has_set_som);\n    recurse_flags |= recurse_flag_setsom_found;\n    cc += 1;\n    break;\n\n    case OP_RECURSE:\n    if (common->has_set_som)\n      recurse_flags |= recurse_flag_setsom_found;\n    if (common->mark_ptr != 0)\n      recurse_flags |= recurse_flag_setmark_found;\n    if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr))\n      length++;\n    cc += 1 + LINK_SIZE;\n    if (*cc == OP_CREF)\n      recurse_flags |= recurse_flag_recurse_arg;\n    break;\n\n    case OP_KET:\n    offset = PRIVATE_DATA(cc);\n    if (offset != 0)\n      {\n      if (recurse_check_bit(common, offset))\n        length++;\n      SLJIT_ASSERT(PRIVATE_DATA(cc + 1) != 0);\n      cc += PRIVATE_DATA(cc + 1);\n      }\n    cc += 1 + LINK_SIZE;\n    break;\n\n    case OP_ASSERT:\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK:\n    case OP_ASSERTBACK_NOT:\n    case OP_ASSERT_NA:\n    case OP_ASSERTBACK_NA:\n    case OP_ONCE:\n    case OP_SCRIPT_RUN:\n    case OP_BRAPOS:\n    case OP_SBRA:\n    case OP_SBRAPOS:\n    case OP_SCOND:\n    SLJIT_ASSERT(PRIVATE_DATA(cc) != 0);\n    if (recurse_check_bit(common, PRIVATE_DATA(cc)))\n      length++;\n    cc += 1 + LINK_SIZE;\n    break;\n\n    case OP_CREF:\n    if ((recurse_flags & recurse_flag_recurse_arg) != 0)\n      {\n      offset = GET2(cc, 1);\n      if (recurse_check_bit(common, OVECTOR(offset << 1)))\n        {\n        SLJIT_ASSERT(recurse_check_bit(common, OVECTOR((offset << 1) + 1)));\n        length += 2;\n        }\n\n      if (cc[1 + IMM2_SIZE] != OP_CREF)\n        recurse_flags &= ~(uint32_t)recurse_flag_recurse_arg;\n      }\n    cc += 1 + IMM2_SIZE;\n    break;\n\n    case OP_ASSERT_SCS:\n    SLJIT_ASSERT(PRIVATE_DATA(cc) != 0);\n    if (recurse_check_bit(common, PRIVATE_DATA(cc)))\n      length += 2;\n    cc += 1 + LINK_SIZE;\n    break;\n\n    case OP_CBRA:\n    case OP_SCBRA:\n    offset = GET2(cc, 1 + LINK_SIZE);\n    if (recurse_check_bit(common, OVECTOR(offset << 1)))\n      {\n      SLJIT_ASSERT(recurse_check_bit(common, OVECTOR((offset << 1) + 1)));\n      length += 2;\n      }\n    if (!is_optimized_cbracket(common, offset) && recurse_check_bit(common, OVECTOR_PRIV(offset)))\n      length++;\n    if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr))\n      length++;\n    cc += 1 + LINK_SIZE + IMM2_SIZE;\n    break;\n\n    case OP_CBRAPOS:\n    case OP_SCBRAPOS:\n    offset = GET2(cc, 1 + LINK_SIZE);\n    if (recurse_check_bit(common, OVECTOR(offset << 1)))\n      {\n      SLJIT_ASSERT(recurse_check_bit(common, OVECTOR((offset << 1) + 1)));\n      length += 2;\n      }\n    if (recurse_check_bit(common, OVECTOR_PRIV(offset)))\n      length++;\n    if (recurse_check_bit(common, PRIVATE_DATA(cc)))\n      length++;\n    if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr))\n      length++;\n    cc += 1 + LINK_SIZE + IMM2_SIZE;\n    break;\n\n    case OP_COND:\n    /* Might be a hidden SCOND. */\n    alternative = cc + GET(cc, 1);\n    if ((*alternative == OP_KETRMAX || *alternative == OP_KETRMIN) && recurse_check_bit(common, PRIVATE_DATA(cc)))\n      length++;\n    cc += 1 + LINK_SIZE;\n    break;\n\n    CASE_ITERATOR_PRIVATE_DATA_1\n    offset = PRIVATE_DATA(cc);\n    if (offset != 0 && recurse_check_bit(common, offset))\n      length++;\n    cc += 2;\n#ifdef SUPPORT_UNICODE\n    if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n    break;\n\n    CASE_ITERATOR_PRIVATE_DATA_2A\n    offset = PRIVATE_DATA(cc);\n    if (offset != 0 && recurse_check_bit(common, offset))\n      {\n      SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw)));\n      length += 2;\n      }\n    cc += 2;\n#ifdef SUPPORT_UNICODE\n    if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n    break;\n\n    CASE_ITERATOR_PRIVATE_DATA_2B\n    offset = PRIVATE_DATA(cc);\n    if (offset != 0 && recurse_check_bit(common, offset))\n      {\n      SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw)));\n      length += 2;\n      }\n    cc += 2 + IMM2_SIZE;\n#ifdef SUPPORT_UNICODE\n    if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n    break;\n\n    CASE_ITERATOR_TYPE_PRIVATE_DATA_1\n    offset = PRIVATE_DATA(cc);\n    if (offset != 0 && recurse_check_bit(common, offset))\n      length++;\n    cc += 1;\n    break;\n\n    CASE_ITERATOR_TYPE_PRIVATE_DATA_2A\n    offset = PRIVATE_DATA(cc);\n    if (offset != 0 && recurse_check_bit(common, offset))\n      {\n      SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw)));\n      length += 2;\n      }\n    cc += 1;\n    break;\n\n    CASE_ITERATOR_TYPE_PRIVATE_DATA_2B\n    offset = PRIVATE_DATA(cc);\n    if (offset != 0 && recurse_check_bit(common, offset))\n      {\n      SLJIT_ASSERT(recurse_check_bit(common, offset + sizeof(sljit_sw)));\n      length += 2;\n      }\n    cc += 1 + IMM2_SIZE;\n    break;\n\n    case OP_CLASS:\n    case OP_NCLASS:\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8\n    case OP_XCLASS:\n    case OP_ECLASS:\n    size = (*cc >= OP_XCLASS) ? GET(cc, 1) : 1 + 32 / (int)sizeof(PCRE2_UCHAR);\n#else\n    size = 1 + 32 / (int)sizeof(PCRE2_UCHAR);\n#endif\n\n    offset = PRIVATE_DATA(cc);\n    if (offset != 0 && recurse_check_bit(common, offset))\n      length += get_class_iterator_size(cc + size);\n    cc += size;\n    break;\n\n    case OP_MARK:\n    case OP_COMMIT_ARG:\n    case OP_PRUNE_ARG:\n    case OP_THEN_ARG:\n    SLJIT_ASSERT(common->mark_ptr != 0);\n    recurse_flags |= recurse_flag_setmark_found;\n    if (common->control_head_ptr != 0)\n      recurse_flags |= recurse_flag_control_head_found;\n    if (*cc != OP_MARK)\n      recurse_flags |= recurse_flag_quit_found;\n\n    cc += 1 + 2 + cc[1];\n    break;\n\n    case OP_PRUNE:\n    case OP_SKIP:\n    case OP_COMMIT:\n    recurse_flags |= recurse_flag_quit_found;\n    cc++;\n    break;\n\n    case OP_SKIP_ARG:\n    recurse_flags |= recurse_flag_quit_found;\n    cc += 1 + 2 + cc[1];\n    break;\n\n    case OP_THEN:\n    SLJIT_ASSERT(common->control_head_ptr != 0);\n    recurse_flags |= recurse_flag_quit_found | recurse_flag_control_head_found;\n    cc++;\n    break;\n\n    case OP_ACCEPT:\n    case OP_ASSERT_ACCEPT:\n    recurse_flags |= recurse_flag_accept_found;\n    cc++;\n    break;\n\n    default:\n    cc = next_opcode(common, cc);\n    SLJIT_ASSERT(cc != NULL);\n    break;\n    }\n  }\nSLJIT_ASSERT(cc == ccend);\n\nif (recurse_flags & recurse_flag_control_head_found)\n  length++;\nif (recurse_flags & recurse_flag_quit_found)\n  {\n  if (recurse_flags & recurse_flag_setsom_found)\n    length++;\n  if (recurse_flags & recurse_flag_setmark_found)\n    length++;\n  }\n\n*result_flags = recurse_flags;\nreturn length;\n}\n\nenum copy_recurse_data_types {\n  recurse_copy_from_global,\n  recurse_copy_private_to_global,\n  recurse_copy_shared_to_global,\n  recurse_copy_kept_shared_to_global,\n  recurse_swap_global\n};\n\nstatic void copy_recurse_data(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend,\n  int type, int stackptr, int stacktop, uint32_t recurse_flags)\n{\ndelayed_mem_copy_status status;\nPCRE2_SPTR alternative, cref;\nsljit_sw private_srcw[2];\nsljit_sw shared_srcw[3];\nsljit_sw kept_shared_srcw[2];\nint private_count, shared_count, kept_shared_count;\nint from_sp, base_reg, offset, i;\n\nmemset(common->recurse_bitset, 0, common->recurse_bitset_size);\n\nif (common->currententry->arg_size > 0)\n  {\n  cref = common->currententry->arg_start;\n\n  do\n    {\n    offset = GET2(cref, 1);\n    recurse_check_bit(common, OVECTOR(offset << 1));\n    cref += 1 + IMM2_SIZE;\n    }\n  while (*cref == OP_CREF);\n  }\n\n#if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD\nSLJIT_ASSERT(common->control_head_ptr != 0);\nrecurse_check_bit(common, common->control_head_ptr);\n#endif\n\nswitch (type)\n  {\n  case recurse_copy_from_global:\n  from_sp = TRUE;\n  base_reg = STACK_TOP;\n  break;\n\n  case recurse_copy_private_to_global:\n  case recurse_copy_shared_to_global:\n  case recurse_copy_kept_shared_to_global:\n  from_sp = FALSE;\n  base_reg = STACK_TOP;\n  break;\n\n  default:\n  SLJIT_ASSERT(type == recurse_swap_global);\n  from_sp = FALSE;\n  base_reg = TMP2;\n  break;\n  }\n\nstackptr = STACK(stackptr);\nstacktop = STACK(stacktop);\n\nstatus.tmp_regs[0] = TMP1;\nstatus.saved_tmp_regs[0] = TMP1;\n\nif (base_reg != TMP2)\n  {\n  status.tmp_regs[1] = TMP2;\n  status.saved_tmp_regs[1] = TMP2;\n  }\nelse\n  {\n  status.saved_tmp_regs[1] = RETURN_ADDR;\n  if (HAS_VIRTUAL_REGISTERS)\n    status.tmp_regs[1] = STR_PTR;\n  else\n    status.tmp_regs[1] = RETURN_ADDR;\n  }\n\nstatus.saved_tmp_regs[2] = TMP3;\nif (HAS_VIRTUAL_REGISTERS)\n  status.tmp_regs[2] = STR_END;\nelse\n  status.tmp_regs[2] = TMP3;\n\ndelayed_mem_copy_init(&status, common);\n\nif (type != recurse_copy_shared_to_global && type != recurse_copy_kept_shared_to_global)\n  {\n  SLJIT_ASSERT(type == recurse_copy_from_global || type == recurse_copy_private_to_global || type == recurse_swap_global);\n\n  if (!from_sp)\n    delayed_mem_copy_move(&status, base_reg, stackptr, SLJIT_SP, common->recursive_head_ptr);\n\n  if (from_sp || type == recurse_swap_global)\n    delayed_mem_copy_move(&status, SLJIT_SP, common->recursive_head_ptr, base_reg, stackptr);\n  }\n\nstackptr += sizeof(sljit_sw);\n\n#if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD\nif (type != recurse_copy_shared_to_global)\n  {\n  if (!from_sp)\n    delayed_mem_copy_move(&status, base_reg, stackptr, SLJIT_SP, common->control_head_ptr);\n\n  if (from_sp || type == recurse_swap_global)\n    delayed_mem_copy_move(&status, SLJIT_SP, common->control_head_ptr, base_reg, stackptr);\n  }\n\nstackptr += sizeof(sljit_sw);\n#endif\n\nwhile (cc < ccend)\n  {\n  private_count = 0;\n  shared_count = 0;\n  kept_shared_count = 0;\n\n  switch(*cc)\n    {\n    case OP_SET_SOM:\n    SLJIT_ASSERT(common->has_set_som);\n    if ((recurse_flags & recurse_flag_quit_found) && recurse_check_bit(common, OVECTOR(0)))\n      {\n      kept_shared_srcw[0] = OVECTOR(0);\n      kept_shared_count = 1;\n      }\n    cc += 1;\n    break;\n\n    case OP_RECURSE:\n    if (recurse_flags & recurse_flag_quit_found)\n      {\n      if (common->has_set_som && recurse_check_bit(common, OVECTOR(0)))\n        {\n        kept_shared_srcw[0] = OVECTOR(0);\n        kept_shared_count = 1;\n        }\n      if (common->mark_ptr != 0 && recurse_check_bit(common, common->mark_ptr))\n        {\n        kept_shared_srcw[kept_shared_count] = common->mark_ptr;\n        kept_shared_count++;\n        }\n      }\n\n    if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr))\n      {\n      shared_srcw[0] = common->capture_last_ptr;\n      shared_count = 1;\n      }\n\n    cc += 1 + LINK_SIZE;\n    if (*cc == OP_CREF)\n      recurse_flags |= recurse_flag_recurse_arg;\n    break;\n\n    case OP_KET:\n    private_srcw[0] = PRIVATE_DATA(cc);\n    if (private_srcw[0] != 0)\n      {\n      if (recurse_check_bit(common, private_srcw[0]))\n        private_count = 1;\n      SLJIT_ASSERT(PRIVATE_DATA(cc + 1) != 0);\n      cc += PRIVATE_DATA(cc + 1);\n      }\n    cc += 1 + LINK_SIZE;\n    break;\n\n    case OP_ASSERT:\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK:\n    case OP_ASSERTBACK_NOT:\n    case OP_ASSERT_NA:\n    case OP_ASSERTBACK_NA:\n    case OP_ONCE:\n    case OP_SCRIPT_RUN:\n    case OP_BRAPOS:\n    case OP_SBRA:\n    case OP_SBRAPOS:\n    case OP_SCOND:\n    private_srcw[0] = PRIVATE_DATA(cc);\n    if (recurse_check_bit(common, private_srcw[0]))\n      private_count = 1;\n    cc += 1 + LINK_SIZE;\n    break;\n\n    case OP_CREF:\n    if ((recurse_flags & recurse_flag_recurse_arg) != 0)\n      {\n      offset = GET2(cc, 1);\n      shared_srcw[0] = OVECTOR(offset << 1);\n      if (recurse_check_bit(common, shared_srcw[0]))\n        {\n        shared_srcw[1] = shared_srcw[0] + sizeof(sljit_sw);\n        SLJIT_ASSERT(recurse_check_bit(common, shared_srcw[1]));\n        shared_count = 2;\n        }\n\n      if (cc[1 + IMM2_SIZE] != OP_CREF)\n        recurse_flags &= ~(uint32_t)recurse_flag_recurse_arg;\n      }\n    cc += 1 + IMM2_SIZE;\n    break;\n\n    case OP_ASSERT_SCS:\n    private_srcw[0] = PRIVATE_DATA(cc);\n    private_srcw[1] = private_srcw[0] + sizeof(sljit_sw);\n    if (recurse_check_bit(common, private_srcw[0]))\n      private_count = 2;\n    cc += 1 + LINK_SIZE;\n    break;\n\n    case OP_CBRA:\n    case OP_SCBRA:\n    offset = GET2(cc, 1 + LINK_SIZE);\n    shared_srcw[0] = OVECTOR(offset << 1);\n    if (recurse_check_bit(common, shared_srcw[0]))\n      {\n      shared_srcw[1] = shared_srcw[0] + sizeof(sljit_sw);\n      SLJIT_ASSERT(recurse_check_bit(common, shared_srcw[1]));\n      shared_count = 2;\n      }\n\n    if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr))\n      {\n      shared_srcw[shared_count] = common->capture_last_ptr;\n      shared_count++;\n      }\n\n    if (!is_optimized_cbracket(common, offset))\n      {\n      private_srcw[0] = OVECTOR_PRIV(offset);\n      if (recurse_check_bit(common, private_srcw[0]))\n        private_count = 1;\n      }\n\n    cc += 1 + LINK_SIZE + IMM2_SIZE;\n    break;\n\n    case OP_CBRAPOS:\n    case OP_SCBRAPOS:\n    offset = GET2(cc, 1 + LINK_SIZE);\n    shared_srcw[0] = OVECTOR(offset << 1);\n    if (recurse_check_bit(common, shared_srcw[0]))\n      {\n      shared_srcw[1] = shared_srcw[0] + sizeof(sljit_sw);\n      SLJIT_ASSERT(recurse_check_bit(common, shared_srcw[1]));\n      shared_count = 2;\n      }\n\n    if (common->capture_last_ptr != 0 && recurse_check_bit(common, common->capture_last_ptr))\n      {\n      shared_srcw[shared_count] = common->capture_last_ptr;\n      shared_count++;\n      }\n\n    private_srcw[0] = PRIVATE_DATA(cc);\n    if (recurse_check_bit(common, private_srcw[0]))\n      private_count = 1;\n\n    offset = OVECTOR_PRIV(offset);\n    if (recurse_check_bit(common, offset))\n      {\n      private_srcw[private_count] = offset;\n      private_count++;\n      }\n    cc += 1 + LINK_SIZE + IMM2_SIZE;\n    break;\n\n    case OP_COND:\n    /* Might be a hidden SCOND. */\n    alternative = cc + GET(cc, 1);\n    if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN)\n      {\n      private_srcw[0] = PRIVATE_DATA(cc);\n      if (recurse_check_bit(common, private_srcw[0]))\n        private_count = 1;\n      }\n    cc += 1 + LINK_SIZE;\n    break;\n\n    CASE_ITERATOR_PRIVATE_DATA_1\n    private_srcw[0] = PRIVATE_DATA(cc);\n    if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0]))\n      private_count = 1;\n    cc += 2;\n#ifdef SUPPORT_UNICODE\n    if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n    break;\n\n    CASE_ITERATOR_PRIVATE_DATA_2A\n    private_srcw[0] = PRIVATE_DATA(cc);\n    if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0]))\n      {\n      private_count = 2;\n      private_srcw[1] = private_srcw[0] + sizeof(sljit_sw);\n      SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1]));\n      }\n    cc += 2;\n#ifdef SUPPORT_UNICODE\n    if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n    break;\n\n    CASE_ITERATOR_PRIVATE_DATA_2B\n    private_srcw[0] = PRIVATE_DATA(cc);\n    if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0]))\n      {\n      private_count = 2;\n      private_srcw[1] = private_srcw[0] + sizeof(sljit_sw);\n      SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1]));\n      }\n    cc += 2 + IMM2_SIZE;\n#ifdef SUPPORT_UNICODE\n    if (common->utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n    break;\n\n    CASE_ITERATOR_TYPE_PRIVATE_DATA_1\n    private_srcw[0] = PRIVATE_DATA(cc);\n    if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0]))\n      private_count = 1;\n    cc += 1;\n    break;\n\n    CASE_ITERATOR_TYPE_PRIVATE_DATA_2A\n    private_srcw[0] = PRIVATE_DATA(cc);\n    if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0]))\n      {\n      private_count = 2;\n      private_srcw[1] = private_srcw[0] + sizeof(sljit_sw);\n      SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1]));\n      }\n    cc += 1;\n    break;\n\n    CASE_ITERATOR_TYPE_PRIVATE_DATA_2B\n    private_srcw[0] = PRIVATE_DATA(cc);\n    if (private_srcw[0] != 0 && recurse_check_bit(common, private_srcw[0]))\n      {\n      private_count = 2;\n      private_srcw[1] = private_srcw[0] + sizeof(sljit_sw);\n      SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1]));\n      }\n    cc += 1 + IMM2_SIZE;\n    break;\n\n    case OP_CLASS:\n    case OP_NCLASS:\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8\n    case OP_XCLASS:\n    case OP_ECLASS:\n    i = (*cc >= OP_XCLASS) ? GET(cc, 1) : 1 + 32 / (int)sizeof(PCRE2_UCHAR);\n#else\n    i = 1 + 32 / (int)sizeof(PCRE2_UCHAR);\n#endif\n    if (PRIVATE_DATA(cc) != 0)\n      {\n      private_count = 1;\n      private_srcw[0] = PRIVATE_DATA(cc);\n      switch(get_class_iterator_size(cc + i))\n        {\n        case 1:\n        break;\n\n        case 2:\n        if (recurse_check_bit(common, private_srcw[0]))\n          {\n          private_count = 2;\n          private_srcw[1] = private_srcw[0] + sizeof(sljit_sw);\n          SLJIT_ASSERT(recurse_check_bit(common, private_srcw[1]));\n          }\n        break;\n\n        default:\n        SLJIT_UNREACHABLE();\n        break;\n        }\n      }\n    cc += i;\n    break;\n\n    case OP_MARK:\n    case OP_COMMIT_ARG:\n    case OP_PRUNE_ARG:\n    case OP_THEN_ARG:\n    SLJIT_ASSERT(common->mark_ptr != 0);\n    if ((recurse_flags & recurse_flag_quit_found) && recurse_check_bit(common, common->mark_ptr))\n      {\n      kept_shared_srcw[0] = common->mark_ptr;\n      kept_shared_count = 1;\n      }\n    if (common->control_head_ptr != 0 && recurse_check_bit(common, common->control_head_ptr))\n      {\n      private_srcw[0] = common->control_head_ptr;\n      private_count = 1;\n      }\n    cc += 1 + 2 + cc[1];\n    break;\n\n    case OP_THEN:\n    SLJIT_ASSERT(common->control_head_ptr != 0);\n    if (recurse_check_bit(common, common->control_head_ptr))\n      {\n      private_srcw[0] = common->control_head_ptr;\n      private_count = 1;\n      }\n    cc++;\n    break;\n\n    default:\n    cc = next_opcode(common, cc);\n    SLJIT_ASSERT(cc != NULL);\n    continue;\n    }\n\n  if (type != recurse_copy_shared_to_global && type != recurse_copy_kept_shared_to_global)\n    {\n    SLJIT_ASSERT(type == recurse_copy_from_global || type == recurse_copy_private_to_global || type == recurse_swap_global);\n\n    for (i = 0; i < private_count; i++)\n      {\n      SLJIT_ASSERT(private_srcw[i] != 0);\n\n      if (!from_sp)\n        delayed_mem_copy_move(&status, base_reg, stackptr, SLJIT_SP, (sljit_s32)private_srcw[i]);\n\n      if (from_sp || type == recurse_swap_global)\n        delayed_mem_copy_move(&status, SLJIT_SP, private_srcw[i], base_reg, stackptr);\n\n      stackptr += sizeof(sljit_sw);\n      }\n    }\n  else\n    stackptr += sizeof(sljit_sw) * private_count;\n\n  if (type != recurse_copy_private_to_global && type != recurse_copy_kept_shared_to_global)\n    {\n    SLJIT_ASSERT(type == recurse_copy_from_global || type == recurse_copy_shared_to_global || type == recurse_swap_global);\n\n    for (i = 0; i < shared_count; i++)\n      {\n      SLJIT_ASSERT(shared_srcw[i] != 0);\n\n      if (!from_sp)\n        delayed_mem_copy_move(&status, base_reg, stackptr, SLJIT_SP, (sljit_s32)shared_srcw[i]);\n\n      if (from_sp || type == recurse_swap_global)\n        delayed_mem_copy_move(&status, SLJIT_SP, shared_srcw[i], base_reg, stackptr);\n\n      stackptr += sizeof(sljit_sw);\n      }\n    }\n  else\n    stackptr += sizeof(sljit_sw) * shared_count;\n\n  if (type != recurse_copy_private_to_global && type != recurse_swap_global)\n    {\n    SLJIT_ASSERT(type == recurse_copy_from_global || type == recurse_copy_shared_to_global || type == recurse_copy_kept_shared_to_global);\n\n    for (i = 0; i < kept_shared_count; i++)\n      {\n      SLJIT_ASSERT(kept_shared_srcw[i] != 0);\n\n      if (!from_sp)\n        delayed_mem_copy_move(&status, base_reg, stackptr, SLJIT_SP, (sljit_s32)kept_shared_srcw[i]);\n\n      if (from_sp || type == recurse_swap_global)\n        delayed_mem_copy_move(&status, SLJIT_SP, kept_shared_srcw[i], base_reg, stackptr);\n\n      stackptr += sizeof(sljit_sw);\n      }\n    }\n  else\n    stackptr += sizeof(sljit_sw) * kept_shared_count;\n  }\n\nSLJIT_ASSERT(cc == ccend && stackptr == stacktop);\n\ndelayed_mem_copy_finish(&status);\n}\n\nstatic SLJIT_INLINE PCRE2_SPTR set_then_offsets(compiler_common *common, PCRE2_SPTR cc, sljit_u8 *current_offset)\n{\nPCRE2_SPTR end = bracketend(cc);\nBOOL has_alternatives = cc[GET(cc, 1)] == OP_ALT;\n\n/* Assert captures *THEN verb even if it has no alternatives. */\nif (*cc >= OP_ASSERT && *cc <= OP_ASSERTBACK_NOT)\n  current_offset = NULL;\nelse if (*cc >= OP_ASSERT_NA && *cc <= OP_ASSERT_SCS)\n  has_alternatives = TRUE;\n/* Conditional block does never capture. */\nelse if (*cc == OP_COND || *cc == OP_SCOND)\n  has_alternatives = FALSE;\n\ncc = next_opcode(common, cc);\n\nif (has_alternatives)\n  {\n  switch (*cc)\n    {\n    case OP_REVERSE:\n    case OP_CREF:\n      cc += 1 + IMM2_SIZE;\n      break;\n    case OP_VREVERSE:\n    case OP_DNCREF:\n      cc += 1 + 2 * IMM2_SIZE;\n      break;\n    }\n\n  current_offset = common->then_offsets + (cc - common->start);\n  }\n\nwhile (cc < end)\n  {\n  if (*cc >= OP_ASSERT && *cc <= OP_SCOND)\n    {\n    cc = set_then_offsets(common, cc, current_offset);\n    continue;\n    }\n\n  if (*cc == OP_ALT && has_alternatives)\n    {\n    cc += 1 + LINK_SIZE;\n\n    if (*cc == OP_REVERSE)\n      cc += 1 + IMM2_SIZE;\n    else if (*cc == OP_VREVERSE)\n      cc += 1 + 2 * IMM2_SIZE;\n\n    current_offset = common->then_offsets + (cc - common->start);\n    continue;\n    }\n\n  if (*cc >= OP_THEN && *cc <= OP_THEN_ARG && current_offset != NULL)\n    *current_offset = 1;\n  cc = next_opcode(common, cc);\n  }\n\ncc = end - 1 - LINK_SIZE;\n\n/* Ignore repeats. */\nif (*cc == OP_KET && PRIVATE_DATA(cc) != 0)\n  end += PRIVATE_DATA(cc + 1);\n\nreturn end;\n}\n\n#undef CASE_ITERATOR_PRIVATE_DATA_1\n#undef CASE_ITERATOR_PRIVATE_DATA_2A\n#undef CASE_ITERATOR_PRIVATE_DATA_2B\n#undef CASE_ITERATOR_TYPE_PRIVATE_DATA_1\n#undef CASE_ITERATOR_TYPE_PRIVATE_DATA_2A\n#undef CASE_ITERATOR_TYPE_PRIVATE_DATA_2B\n\nstatic SLJIT_INLINE BOOL is_powerof2(unsigned int value)\n{\nreturn (value & (value - 1)) == 0;\n}\n\nstatic SLJIT_INLINE void set_jumps(jump_list *list, struct sljit_label *label)\n{\nwhile (list != NULL)\n  {\n  /* sljit_set_label is clever enough to do nothing\n  if either the jump or the label is NULL. */\n  SET_LABEL(list->jump, label);\n  list = list->next;\n  }\n}\n\nstatic SLJIT_INLINE void add_jump(struct sljit_compiler *compiler, jump_list **list, struct sljit_jump *jump)\n{\njump_list *list_item = sljit_alloc_memory(compiler, sizeof(jump_list));\nif (list_item)\n  {\n  list_item->next = *list;\n  list_item->jump = jump;\n  *list = list_item;\n  }\n}\n\nstatic void add_stub(compiler_common *common, struct sljit_jump *start)\n{\nDEFINE_COMPILER;\nstub_list *list_item = sljit_alloc_memory(compiler, sizeof(stub_list));\n\nif (list_item)\n  {\n  list_item->start = start;\n  list_item->quit = LABEL();\n  list_item->next = common->stubs;\n  common->stubs = list_item;\n  }\n}\n\nstatic void flush_stubs(compiler_common *common)\n{\nDEFINE_COMPILER;\nstub_list *list_item = common->stubs;\n\nwhile (list_item)\n  {\n  JUMPHERE(list_item->start);\n  add_jump(compiler, &common->stackalloc, JUMP(SLJIT_FAST_CALL));\n  JUMPTO(SLJIT_JUMP, list_item->quit);\n  list_item = list_item->next;\n  }\ncommon->stubs = NULL;\n}\n\nstatic SLJIT_INLINE void count_match(compiler_common *common)\n{\nDEFINE_COMPILER;\n\nOP2(SLJIT_SUB | SLJIT_SET_Z, COUNT_MATCH, 0, COUNT_MATCH, 0, SLJIT_IMM, 1);\nadd_jump(compiler, &common->calllimit, JUMP(SLJIT_ZERO));\n}\n\nstatic SLJIT_INLINE void allocate_stack(compiler_common *common, sljit_s32 size)\n{\n/* May destroy all locals and registers except TMP2. */\nDEFINE_COMPILER;\n\nSLJIT_ASSERT(size > 0);\nOP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, size * SSIZE_OF(sw));\n#ifdef DESTROY_REGISTERS\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 12345);\nOP1(SLJIT_MOV, TMP3, 0, TMP1, 0);\nOP1(SLJIT_MOV, RETURN_ADDR, 0, TMP1, 0);\n#if defined SLJIT_DEBUG && SLJIT_DEBUG\nSLJIT_ASSERT(common->locals_size >= 2 * SSIZE_OF(sw));\n/* These two are also used by the stackalloc calls. */\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL0, TMP1, 0);\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL1, TMP1, 0);\n#endif\n#endif\nadd_stub(common, CMP(SLJIT_LESS, STACK_TOP, 0, STACK_LIMIT, 0));\n}\n\nstatic SLJIT_INLINE void free_stack(compiler_common *common, sljit_s32 size)\n{\nDEFINE_COMPILER;\n\nSLJIT_ASSERT(size > 0);\nOP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, size * SSIZE_OF(sw));\n}\n\nstatic sljit_uw * allocate_read_only_data(compiler_common *common, sljit_uw size)\n{\nDEFINE_COMPILER;\nsljit_uw *result;\n\nif (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n  return NULL;\n\nresult = (sljit_uw *)SLJIT_MALLOC(size + sizeof(sljit_uw), compiler->allocator_data);\nif (SLJIT_UNLIKELY(result == NULL))\n  {\n  sljit_set_compiler_memory_error(compiler);\n  return NULL;\n  }\n\n*(void**)result = common->read_only_data_head;\ncommon->read_only_data_head = (void *)result;\nreturn result + 1;\n}\n\nstatic SLJIT_INLINE void reset_ovector(compiler_common *common, int length)\n{\nDEFINE_COMPILER;\nstruct sljit_label *loop;\nsljit_s32 i;\n\n/* At this point we can freely use all temporary registers. */\nSLJIT_ASSERT(length > 1);\n/* TMP1 returns with begin - 1. */\nOP2(SLJIT_SUB, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_S0), SLJIT_OFFSETOF(jit_arguments, begin), SLJIT_IMM, IN_UCHARS(1));\nif (length < 8)\n  {\n  for (i = 1; i < length; i++)\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(i), SLJIT_R0, 0);\n  }\nelse\n  {\n  if (sljit_emit_mem_update(compiler, SLJIT_MOV | SLJIT_MEM_SUPP | SLJIT_MEM_STORE | SLJIT_MEM_PRE, SLJIT_R0, SLJIT_MEM1(SLJIT_R1), sizeof(sljit_sw)) == SLJIT_SUCCESS)\n    {\n    GET_LOCAL_BASE(SLJIT_R1, 0, OVECTOR_START);\n    OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_IMM, length - 1);\n    loop = LABEL();\n    sljit_emit_mem_update(compiler, SLJIT_MOV | SLJIT_MEM_STORE | SLJIT_MEM_PRE, SLJIT_R0, SLJIT_MEM1(SLJIT_R1), sizeof(sljit_sw));\n    OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, 1);\n    JUMPTO(SLJIT_NOT_ZERO, loop);\n    }\n  else\n    {\n    GET_LOCAL_BASE(SLJIT_R1, 0, OVECTOR_START + sizeof(sljit_sw));\n    OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_IMM, length - 1);\n    loop = LABEL();\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_R1), 0, SLJIT_R0, 0);\n    OP2(SLJIT_ADD, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, sizeof(sljit_sw));\n    OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, 1);\n    JUMPTO(SLJIT_NOT_ZERO, loop);\n    }\n  }\n}\n\nstatic SLJIT_INLINE void reset_early_fail(compiler_common *common)\n{\nDEFINE_COMPILER;\nsljit_u32 size = (sljit_u32)(common->early_fail_end_ptr - common->early_fail_start_ptr);\nsljit_u32 uncleared_size;\nsljit_s32 src = SLJIT_IMM;\nsljit_s32 i;\nstruct sljit_label *loop;\n\nSLJIT_ASSERT(common->early_fail_start_ptr < common->early_fail_end_ptr);\n\nif (size == sizeof(sljit_sw))\n  {\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->early_fail_start_ptr, SLJIT_IMM, 0);\n  return;\n  }\n\nif (sljit_get_register_index(SLJIT_GP_REGISTER, TMP3) >= 0 && !sljit_has_cpu_feature(SLJIT_HAS_ZERO_REGISTER))\n  {\n  OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, 0);\n  src = TMP3;\n  }\n\nif (size <= 6 * sizeof(sljit_sw))\n  {\n  for (i = common->early_fail_start_ptr; i < common->early_fail_end_ptr; i += sizeof(sljit_sw))\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), i, src, 0);\n  return;\n  }\n\nGET_LOCAL_BASE(TMP1, 0, common->early_fail_start_ptr);\n\nuncleared_size = ((size / sizeof(sljit_sw)) % 3) * sizeof(sljit_sw);\n\nOP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, size - uncleared_size);\n\nloop = LABEL();\nOP1(SLJIT_MOV, SLJIT_MEM1(TMP1), 0, src, 0);\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 3 * sizeof(sljit_sw));\nOP1(SLJIT_MOV, SLJIT_MEM1(TMP1), -2 * SSIZE_OF(sw), src, 0);\nOP1(SLJIT_MOV, SLJIT_MEM1(TMP1), -1 * SSIZE_OF(sw), src, 0);\nCMPTO(SLJIT_LESS, TMP1, 0, TMP2, 0, loop);\n\nif (uncleared_size >= sizeof(sljit_sw))\n  OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), 0, src, 0);\n\nif (uncleared_size >= 2 * sizeof(sljit_sw))\n  OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), sizeof(sljit_sw), src, 0);\n}\n\nstatic SLJIT_INLINE void do_reset_match(compiler_common *common, int length)\n{\nDEFINE_COMPILER;\nstruct sljit_label *loop;\nint i;\n\nSLJIT_ASSERT(length > 1);\n/* OVECTOR(1) contains the \"string begin - 1\" constant. */\nif (length > 2)\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1));\nif (length < 8)\n  {\n  for (i = 2; i < length; i++)\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(i), TMP1, 0);\n  }\nelse\n  {\n  if (sljit_emit_mem_update(compiler, SLJIT_MOV | SLJIT_MEM_SUPP | SLJIT_MEM_STORE | SLJIT_MEM_PRE, TMP1, SLJIT_MEM1(TMP2), sizeof(sljit_sw)) == SLJIT_SUCCESS)\n    {\n    GET_LOCAL_BASE(TMP2, 0, OVECTOR_START + sizeof(sljit_sw));\n    OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_IMM, length - 2);\n    loop = LABEL();\n    sljit_emit_mem_update(compiler, SLJIT_MOV | SLJIT_MEM_STORE | SLJIT_MEM_PRE, TMP1, SLJIT_MEM1(TMP2), sizeof(sljit_sw));\n    OP2(SLJIT_SUB | SLJIT_SET_Z, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 1);\n    JUMPTO(SLJIT_NOT_ZERO, loop);\n    }\n  else\n    {\n    GET_LOCAL_BASE(TMP2, 0, OVECTOR_START + 2 * sizeof(sljit_sw));\n    OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_IMM, length - 2);\n    loop = LABEL();\n    OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), 0, TMP1, 0);\n    OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, sizeof(sljit_sw));\n    OP2(SLJIT_SUB | SLJIT_SET_Z, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 1);\n    JUMPTO(SLJIT_NOT_ZERO, loop);\n    }\n  }\n\nif (!HAS_VIRTUAL_REGISTERS)\n  OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, stack));\nelse\n  OP1(SLJIT_MOV, STACK_TOP, 0, ARGUMENTS, 0);\n\nif (common->mark_ptr != 0)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->mark_ptr, SLJIT_IMM, 0);\nif (common->control_head_ptr != 0)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0);\nif (HAS_VIRTUAL_REGISTERS)\n  OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(STACK_TOP), SLJIT_OFFSETOF(jit_arguments, stack));\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->start_ptr);\nOP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(STACK_TOP), SLJIT_OFFSETOF(struct sljit_stack, end));\n}\n\nstatic sljit_sw SLJIT_FUNC do_search_mark(sljit_sw *current, PCRE2_SPTR skip_arg)\n{\nwhile (current != NULL)\n  {\n  switch (current[1])\n    {\n    case type_then_trap:\n    break;\n\n    case type_mark:\n    if (PRIV(strcmp)(skip_arg, (PCRE2_SPTR)current[2]) == 0)\n      return current[3];\n    break;\n\n    default:\n    SLJIT_UNREACHABLE();\n    break;\n    }\n  SLJIT_ASSERT(current[0] == 0 || current < (sljit_sw*)current[0]);\n  current = (sljit_sw*)current[0];\n  }\nreturn 0;\n}\n\nstatic SLJIT_INLINE void copy_ovector(compiler_common *common, int topbracket)\n{\nDEFINE_COMPILER;\nstruct sljit_label *loop;\nBOOL has_pre;\n\n/* At this point we can freely use all registers. */\nOP1(SLJIT_MOV, SLJIT_S2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1));\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(1), STR_PTR, 0);\n\nif (HAS_VIRTUAL_REGISTERS)\n  {\n  OP1(SLJIT_MOV, SLJIT_R0, 0, ARGUMENTS, 0);\n  OP1(SLJIT_MOV, SLJIT_S0, 0, SLJIT_MEM1(SLJIT_SP), common->start_ptr);\n  if (common->mark_ptr != 0)\n    OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), common->mark_ptr);\n  OP1(SLJIT_MOV_U32, SLJIT_R1, 0, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, oveccount));\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, startchar_ptr), SLJIT_S0, 0);\n  if (common->mark_ptr != 0)\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, mark_ptr), SLJIT_R2, 0);\n  OP2(SLJIT_ADD, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, match_data),\n    SLJIT_IMM, SLJIT_OFFSETOF(pcre2_match_data, ovector) - sizeof(PCRE2_SIZE));\n  }\nelse\n  {\n  OP1(SLJIT_MOV, SLJIT_S0, 0, SLJIT_MEM1(SLJIT_SP), common->start_ptr);\n  OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, match_data));\n  if (common->mark_ptr != 0)\n    OP1(SLJIT_MOV, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_SP), common->mark_ptr);\n  OP1(SLJIT_MOV_U32, SLJIT_R1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, oveccount));\n  OP1(SLJIT_MOV, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, startchar_ptr), SLJIT_S0, 0);\n  if (common->mark_ptr != 0)\n    OP1(SLJIT_MOV, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, mark_ptr), SLJIT_R0, 0);\n  OP2(SLJIT_ADD, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, SLJIT_OFFSETOF(pcre2_match_data, ovector) - sizeof(PCRE2_SIZE));\n  }\n\nhas_pre = sljit_emit_mem_update(compiler, SLJIT_MOV | SLJIT_MEM_SUPP | SLJIT_MEM_PRE, SLJIT_S1, SLJIT_MEM1(SLJIT_S0), sizeof(sljit_sw)) == SLJIT_SUCCESS;\n\nGET_LOCAL_BASE(SLJIT_S0, 0, OVECTOR_START - (has_pre ? sizeof(sljit_sw) : 0));\nOP1(SLJIT_MOV, SLJIT_R0, 0, SLJIT_MEM1(HAS_VIRTUAL_REGISTERS ? SLJIT_R0 : ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin));\n\nloop = LABEL();\n\nif (has_pre)\n  sljit_emit_mem_update(compiler, SLJIT_MOV | SLJIT_MEM_PRE, SLJIT_S1, SLJIT_MEM1(SLJIT_S0), sizeof(sljit_sw));\nelse\n  {\n  OP1(SLJIT_MOV, SLJIT_S1, 0, SLJIT_MEM1(SLJIT_S0), 0);\n  OP2(SLJIT_ADD, SLJIT_S0, 0, SLJIT_S0, 0, SLJIT_IMM, sizeof(sljit_sw));\n  }\n\nOP2(SLJIT_ADD, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, sizeof(PCRE2_SIZE));\nOP2(SLJIT_SUB, SLJIT_S1, 0, SLJIT_S1, 0, SLJIT_R0, 0);\n/* Copy the integer value to the output buffer */\n#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\nOP2(SLJIT_ASHR, SLJIT_S1, 0, SLJIT_S1, 0, SLJIT_IMM, UCHAR_SHIFT);\n#endif\n\nSLJIT_ASSERT(sizeof(PCRE2_SIZE) == 4 || sizeof(PCRE2_SIZE) == 8);\nOP1(((sizeof(PCRE2_SIZE) == 4) ? SLJIT_MOV_U32 : SLJIT_MOV), SLJIT_MEM1(SLJIT_R2), 0, SLJIT_S1, 0);\n\nOP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1);\nJUMPTO(SLJIT_NOT_ZERO, loop);\n\n/* Calculate the return value, which is the maximum ovector value. */\nif (topbracket > 1)\n  {\n  if (sljit_emit_mem_update(compiler, SLJIT_MOV | SLJIT_MEM_SUPP | SLJIT_MEM_PRE, SLJIT_R2, SLJIT_MEM1(SLJIT_R0), -(2 * SSIZE_OF(sw))) == SLJIT_SUCCESS)\n    {\n    GET_LOCAL_BASE(SLJIT_R0, 0, OVECTOR_START + topbracket * 2 * sizeof(sljit_sw));\n    OP1(SLJIT_MOV, SLJIT_R1, 0, SLJIT_IMM, topbracket + 1);\n\n    /* OVECTOR(0) is never equal to SLJIT_S2. */\n    loop = LABEL();\n    sljit_emit_mem_update(compiler, SLJIT_MOV | SLJIT_MEM_PRE, SLJIT_R2, SLJIT_MEM1(SLJIT_R0), -(2 * SSIZE_OF(sw)));\n    OP2(SLJIT_SUB, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1);\n    CMPTO(SLJIT_EQUAL, SLJIT_R2, 0, SLJIT_S2, 0, loop);\n    OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_R1, 0);\n    }\n  else\n    {\n    GET_LOCAL_BASE(SLJIT_R0, 0, OVECTOR_START + (topbracket - 1) * 2 * sizeof(sljit_sw));\n    OP1(SLJIT_MOV, SLJIT_R1, 0, SLJIT_IMM, topbracket + 1);\n\n    /* OVECTOR(0) is never equal to SLJIT_S2. */\n    loop = LABEL();\n    OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_R0), 0);\n    OP2(SLJIT_SUB, SLJIT_R0, 0, SLJIT_R0, 0, SLJIT_IMM, 2 * SSIZE_OF(sw));\n    OP2(SLJIT_SUB, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1);\n    CMPTO(SLJIT_EQUAL, SLJIT_R2, 0, SLJIT_S2, 0, loop);\n    OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_R1, 0);\n    }\n  }\nelse\n  OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, 1);\n}\n\nstatic SLJIT_INLINE void return_with_partial_match(compiler_common *common, struct sljit_label *quit)\n{\nDEFINE_COMPILER;\nsljit_s32 mov_opcode;\nsljit_s32 arguments_reg = !HAS_VIRTUAL_REGISTERS ? ARGUMENTS : SLJIT_R1;\n\nSLJIT_COMPILE_ASSERT(STR_END == SLJIT_S0, str_end_must_be_saved_reg0);\nSLJIT_ASSERT(common->start_used_ptr != 0 && common->start_ptr != 0\n  && (common->mode == PCRE2_JIT_PARTIAL_SOFT ? common->hit_start != 0 : common->hit_start == 0));\n\nif (arguments_reg != ARGUMENTS)\n  OP1(SLJIT_MOV, arguments_reg, 0, ARGUMENTS, 0);\nOP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP),\n  common->mode == PCRE2_JIT_PARTIAL_SOFT ? common->hit_start : common->start_ptr);\nOP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, PCRE2_ERROR_PARTIAL);\n\n/* Store match begin and end. */\nOP1(SLJIT_MOV, SLJIT_S1, 0, SLJIT_MEM1(arguments_reg), SLJIT_OFFSETOF(jit_arguments, begin));\nOP1(SLJIT_MOV, SLJIT_MEM1(arguments_reg), SLJIT_OFFSETOF(jit_arguments, startchar_ptr), SLJIT_R2, 0);\nOP1(SLJIT_MOV, SLJIT_R1, 0, SLJIT_MEM1(arguments_reg), SLJIT_OFFSETOF(jit_arguments, match_data));\n\nmov_opcode = (sizeof(PCRE2_SIZE) == 4) ? SLJIT_MOV_U32 : SLJIT_MOV;\n\nOP2(SLJIT_SUB, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_S1, 0);\n#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\nOP2(SLJIT_ASHR, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, UCHAR_SHIFT);\n#endif\nOP1(mov_opcode, SLJIT_MEM1(SLJIT_R1), SLJIT_OFFSETOF(pcre2_match_data, ovector), SLJIT_R2, 0);\n\nOP2(SLJIT_SUB, STR_END, 0, STR_END, 0, SLJIT_S1, 0);\n#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\nOP2(SLJIT_ASHR, STR_END, 0, STR_END, 0, SLJIT_IMM, UCHAR_SHIFT);\n#endif\nOP1(mov_opcode, SLJIT_MEM1(SLJIT_R1), SLJIT_OFFSETOF(pcre2_match_data, ovector) + sizeof(PCRE2_SIZE), STR_END, 0);\n\nJUMPTO(SLJIT_JUMP, quit);\n}\n\nstatic SLJIT_INLINE void check_start_used_ptr(compiler_common *common)\n{\n/* May destroy TMP1. */\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\n\nif (common->mode == PCRE2_JIT_PARTIAL_SOFT)\n  {\n  /* The value of -1 must be kept for start_used_ptr! */\n  OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, SLJIT_IMM, 1);\n  /* Jumps if start_used_ptr < STR_PTR, or start_used_ptr == -1. Although overwriting\n  is not necessary if start_used_ptr == STR_PTR, it does not hurt as well. */\n  jump = CMP(SLJIT_LESS_EQUAL, TMP1, 0, STR_PTR, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);\n  JUMPHERE(jump);\n  }\nelse if (common->mode == PCRE2_JIT_PARTIAL_HARD)\n  {\n  jump = CMP(SLJIT_LESS_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);\n  JUMPHERE(jump);\n  }\n}\n\nstatic SLJIT_INLINE BOOL char_has_othercase(compiler_common *common, PCRE2_SPTR cc)\n{\n/* Detects if the character has an othercase. */\nunsigned int c;\n\n#ifdef SUPPORT_UNICODE\nif (common->utf || common->ucp)\n  {\n  if (common->utf)\n    {\n    GETCHAR(c, cc);\n    }\n  else\n    c = *cc;\n\n  if (c > 127)\n    return c != UCD_OTHERCASE(c);\n\n  return common->fcc[c] != c;\n  }\nelse\n#endif\n  c = *cc;\nreturn MAX_255(c) ? common->fcc[c] != c : FALSE;\n}\n\nstatic SLJIT_INLINE unsigned int char_othercase(compiler_common *common, unsigned int c)\n{\n/* Returns with the othercase. */\n#ifdef SUPPORT_UNICODE\nif ((common->utf || common->ucp) && c > 127)\n  return UCD_OTHERCASE(c);\n#endif\nreturn TABLE_GET(c, common->fcc, c);\n}\n\nstatic unsigned int char_get_othercase_bit(compiler_common *common, PCRE2_SPTR cc)\n{\n/* Detects if the character and its othercase has only 1 bit difference. */\nunsigned int c, oc, bit;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\nint n;\n#endif\n\n#ifdef SUPPORT_UNICODE\nif (common->utf || common->ucp)\n  {\n  if (common->utf)\n    {\n    GETCHAR(c, cc);\n    }\n  else\n    c = *cc;\n\n  if (c <= 127)\n    oc = common->fcc[c];\n  else\n    oc = UCD_OTHERCASE(c);\n  }\nelse\n  {\n  c = *cc;\n  oc = TABLE_GET(c, common->fcc, c);\n  }\n#else\nc = *cc;\noc = TABLE_GET(c, common->fcc, c);\n#endif\n\nSLJIT_ASSERT(c != oc);\n\nbit = c ^ oc;\n\n#ifndef EBCDIC\n/* Optimized for English alphabet. */\nif (c <= 127 && bit == 0x20)\n  return (0 << 8) | 0x20;\n#endif\n\n/* Since c != oc, they must have at least 1 bit difference. */\nif (!is_powerof2(bit))\n  return 0;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n\n#ifdef SUPPORT_UNICODE\nif (common->utf && c > 127)\n  {\n  n = GET_EXTRALEN(*cc);\n  while ((bit & 0x3f) == 0)\n    {\n    n--;\n    bit >>= 6;\n    }\n  return (n << 8) | bit;\n  }\n#endif /* SUPPORT_UNICODE */\nreturn (0 << 8) | bit;\n\n#elif PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n\n#ifdef SUPPORT_UNICODE\nif (common->utf && c > 65535)\n  {\n  if (bit >= (1u << 10))\n    bit >>= 10;\n  else\n    return (bit < 256) ? ((2 << 8) | bit) : ((3 << 8) | (bit >> 8));\n  }\n#endif /* SUPPORT_UNICODE */\nreturn (bit < 256) ? ((0u << 8) | bit) : ((1u << 8) | (bit >> 8));\n\n#endif /* PCRE2_CODE_UNIT_WIDTH == [8|16|32] */\n}\n\nstatic void check_partial(compiler_common *common, BOOL force)\n{\n/* Checks whether a partial matching is occurred. Does not modify registers. */\nDEFINE_COMPILER;\nstruct sljit_jump *jump = NULL;\n\nSLJIT_ASSERT(!force || common->mode != PCRE2_JIT_COMPLETE);\n\nif (common->mode == PCRE2_JIT_COMPLETE)\n  return;\n\nif (!force && !common->allow_empty_partial)\n  jump = CMP(SLJIT_GREATER_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);\nelse if (common->mode == PCRE2_JIT_PARTIAL_SOFT)\n  jump = CMP(SLJIT_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, SLJIT_IMM, -1);\n\nif (common->mode == PCRE2_JIT_PARTIAL_SOFT)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, 0);\nelse\n  {\n  if (common->partialmatchlabel != NULL)\n    JUMPTO(SLJIT_JUMP, common->partialmatchlabel);\n  else\n    add_jump(compiler, &common->partialmatch, JUMP(SLJIT_JUMP));\n  }\n\nif (jump != NULL)\n  JUMPHERE(jump);\n}\n\nstatic void check_str_end(compiler_common *common, jump_list **end_reached)\n{\n/* Does not affect registers. Usually used in a tight spot. */\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\n\nif (common->mode == PCRE2_JIT_COMPLETE)\n  {\n  add_jump(compiler, end_reached, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n  return;\n  }\n\njump = CMP(SLJIT_LESS, STR_PTR, 0, STR_END, 0);\nif (common->mode == PCRE2_JIT_PARTIAL_SOFT)\n  {\n  add_jump(compiler, end_reached, CMP(SLJIT_GREATER_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0));\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, 0);\n  add_jump(compiler, end_reached, JUMP(SLJIT_JUMP));\n  }\nelse\n  {\n  add_jump(compiler, end_reached, CMP(SLJIT_GREATER_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0));\n  if (common->partialmatchlabel != NULL)\n    JUMPTO(SLJIT_JUMP, common->partialmatchlabel);\n  else\n    add_jump(compiler, &common->partialmatch, JUMP(SLJIT_JUMP));\n  }\nJUMPHERE(jump);\n}\n\nstatic void detect_partial_match(compiler_common *common, jump_list **backtracks)\n{\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\n\nif (common->mode == PCRE2_JIT_COMPLETE)\n  {\n  add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n  return;\n  }\n\n/* Partial matching mode. */\njump = CMP(SLJIT_LESS, STR_PTR, 0, STR_END, 0);\nif (!common->allow_empty_partial)\n  add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0));\nelse if (common->mode == PCRE2_JIT_PARTIAL_SOFT)\n  add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, SLJIT_IMM, -1));\n\nif (common->mode == PCRE2_JIT_PARTIAL_SOFT)\n  {\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, 0);\n  add_jump(compiler, backtracks, JUMP(SLJIT_JUMP));\n  }\nelse\n  {\n  if (common->partialmatchlabel != NULL)\n    JUMPTO(SLJIT_JUMP, common->partialmatchlabel);\n  else\n    add_jump(compiler, &common->partialmatch, JUMP(SLJIT_JUMP));\n  }\nJUMPHERE(jump);\n}\n\nstatic void process_partial_match(compiler_common *common)\n{\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\n\n/* Partial matching mode. */\nif (common->mode == PCRE2_JIT_PARTIAL_SOFT)\n  {\n  jump = CMP(SLJIT_GREATER_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, 0);\n  JUMPHERE(jump);\n  }\nelse if (common->mode == PCRE2_JIT_PARTIAL_HARD)\n  {\n  if (common->partialmatchlabel != NULL)\n    CMPTO(SLJIT_LESS, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0, common->partialmatchlabel);\n  else\n    add_jump(compiler, &common->partialmatch, CMP(SLJIT_LESS, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0));\n  }\n}\n\nstatic void detect_partial_match_to(compiler_common *common, struct sljit_label *label)\n{\nDEFINE_COMPILER;\n\nCMPTO(SLJIT_LESS, STR_PTR, 0, STR_END, 0, label);\nprocess_partial_match(common);\n}\n\nstatic void peek_char(compiler_common *common, sljit_u32 max, sljit_s32 dst, sljit_sw dstw, jump_list **backtracks)\n{\n/* Reads the character into TMP1, keeps STR_PTR.\nDoes not check STR_END. TMP2, dst, RETURN_ADDR Destroyed. */\nDEFINE_COMPILER;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_jump *jump;\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */\n\nSLJIT_UNUSED_ARG(max);\nSLJIT_UNUSED_ARG(dst);\nSLJIT_UNUSED_ARG(dstw);\nSLJIT_UNUSED_ARG(backtracks);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n\n#ifdef SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\nif (common->utf)\n  {\n  if (max < 128) return;\n\n  jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x80);\n  OP1(SLJIT_MOV, dst, dstw, STR_PTR, 0);\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  add_jump(compiler, common->invalid_utf ? &common->utfreadchar_invalid : &common->utfreadchar, JUMP(SLJIT_FAST_CALL));\n  OP1(SLJIT_MOV, STR_PTR, 0, dst, dstw);\n  if (backtracks && common->invalid_utf)\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR));\n  JUMPHERE(jump);\n  }\n#elif PCRE2_CODE_UNIT_WIDTH == 16\nif (common->utf)\n  {\n  if (max < 0xd800) return;\n\n  OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800);\n\n  if (common->invalid_utf)\n    {\n    jump = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800);\n    OP1(SLJIT_MOV, dst, dstw, STR_PTR, 0);\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL));\n    OP1(SLJIT_MOV, STR_PTR, 0, dst, dstw);\n    if (backtracks && common->invalid_utf)\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR));\n    }\n  else\n    {\n    /* TMP2 contains the high surrogate. */\n    jump = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0xdc00 - 0xd800);\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\n    OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 10);\n    OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x10000 - 0xdc00);\n    OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0);\n    }\n\n  JUMPHERE(jump);\n  }\n#elif PCRE2_CODE_UNIT_WIDTH == 32\nif (common->invalid_utf)\n  {\n  if (max < 0xd800) return;\n\n  if (backtracks != NULL)\n    {\n    OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800);\n    add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x110000));\n    add_jump(compiler, backtracks, CMP(SLJIT_LESS, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800));\n    }\n  else\n    {\n    OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800);\n    OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x110000);\n    SELECT(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR, TMP1);\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800);\n    SELECT(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR, TMP1);\n    }\n  }\n#endif /* PCRE2_CODE_UNIT_WIDTH == [8|16|32] */\n#endif /* SUPPORT_UNICODE */\n}\n\nstatic void peek_char_back(compiler_common *common, sljit_u32 max, jump_list **backtracks)\n{\n/* Reads one character back without moving STR_PTR. TMP2 must\ncontain the start of the subject buffer. Affects TMP1, TMP2, and RETURN_ADDR. */\nDEFINE_COMPILER;\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_jump *jump;\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */\n\nSLJIT_UNUSED_ARG(max);\nSLJIT_UNUSED_ARG(backtracks);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-1));\n\n#ifdef SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\nif (common->utf)\n  {\n  if (max < 128) return;\n\n  jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x80);\n  if (common->invalid_utf)\n    {\n    add_jump(compiler, &common->utfpeakcharback_invalid, JUMP(SLJIT_FAST_CALL));\n    if (backtracks != NULL)\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR));\n    }\n  else\n    add_jump(compiler, &common->utfpeakcharback, JUMP(SLJIT_FAST_CALL));\n  JUMPHERE(jump);\n  }\n#elif PCRE2_CODE_UNIT_WIDTH == 16\nif (common->utf)\n  {\n  if (max < 0xd800) return;\n\n  if (common->invalid_utf)\n    {\n    jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xd800);\n    add_jump(compiler, &common->utfpeakcharback_invalid, JUMP(SLJIT_FAST_CALL));\n    if (backtracks != NULL)\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR));\n    }\n  else\n    {\n    OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xdc00);\n    jump = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0xe000 - 0xdc00);\n    /* TMP2 contains the low surrogate. */\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-2));\n    OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x10000);\n    OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xd800);\n    OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 10);\n    OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0);\n    }\n    JUMPHERE(jump);\n  }\n#elif PCRE2_CODE_UNIT_WIDTH == 32\nif (common->invalid_utf)\n  {\n  OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800);\n  add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x110000));\n  add_jump(compiler, backtracks, CMP(SLJIT_LESS, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800));\n  }\n#endif /* PCRE2_CODE_UNIT_WIDTH == [8|16|32] */\n#endif /* SUPPORT_UNICODE */\n}\n\n#define READ_CHAR_UPDATE_STR_PTR 0x1\n#define READ_CHAR_UTF8_NEWLINE 0x2\n#define READ_CHAR_NEWLINE (READ_CHAR_UPDATE_STR_PTR | READ_CHAR_UTF8_NEWLINE)\n#define READ_CHAR_VALID_UTF 0x4\n\nstatic void read_char(compiler_common *common, sljit_u32 min, sljit_u32 max,\n  jump_list **backtracks, sljit_u32 options)\n{\n/* Reads the precise value of a character into TMP1, if the character is\nbetween min and max (c >= min && c <= max). Otherwise it returns with a value\noutside the range. Does not check STR_END. */\nDEFINE_COMPILER;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_jump *jump;\n#endif\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\nstruct sljit_jump *jump2;\n#endif\n\nSLJIT_UNUSED_ARG(min);\nSLJIT_UNUSED_ARG(max);\nSLJIT_UNUSED_ARG(backtracks);\nSLJIT_UNUSED_ARG(options);\nSLJIT_ASSERT(min <= max);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\n#ifdef SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\nif (common->utf)\n  {\n  if (max < 128 && !(options & READ_CHAR_UPDATE_STR_PTR)) return;\n\n  if (common->invalid_utf && !(options & READ_CHAR_VALID_UTF))\n    {\n    jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x80);\n\n    if (options & READ_CHAR_UTF8_NEWLINE)\n      add_jump(compiler, &common->utfreadnewline_invalid, JUMP(SLJIT_FAST_CALL));\n    else\n      add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL));\n\n    if (backtracks != NULL)\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR));\n    JUMPHERE(jump);\n    return;\n    }\n\n  jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xc0);\n  if (min >= 0x10000)\n    {\n    OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xf0);\n    if (options & READ_CHAR_UPDATE_STR_PTR)\n      OP1(SLJIT_MOV_U8, RETURN_ADDR, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(utf8_table4) - 0xc0);\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n    jump2 = CMP(SLJIT_GREATER, TMP2, 0, SLJIT_IMM, 0x7);\n    OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 6);\n    OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x3f);\n    OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n    OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\n    OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\n    OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f);\n    OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n    OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(2));\n    if (!(options & READ_CHAR_UPDATE_STR_PTR))\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(3));\n    OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\n    OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f);\n    OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n    JUMPHERE(jump2);\n    if (options & READ_CHAR_UPDATE_STR_PTR)\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, RETURN_ADDR, 0);\n    }\n  else if (min >= 0x800 && max <= 0xffff)\n    {\n    OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xe0);\n    if (options & READ_CHAR_UPDATE_STR_PTR)\n      OP1(SLJIT_MOV_U8, RETURN_ADDR, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(utf8_table4) - 0xc0);\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n    jump2 = CMP(SLJIT_GREATER, TMP2, 0, SLJIT_IMM, 0xf);\n    OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 6);\n    OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x3f);\n    OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n    OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\n    if (!(options & READ_CHAR_UPDATE_STR_PTR))\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\n    OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\n    OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f);\n    OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n    JUMPHERE(jump2);\n    if (options & READ_CHAR_UPDATE_STR_PTR)\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, RETURN_ADDR, 0);\n    }\n  else if (max >= 0x800)\n    {\n    add_jump(compiler, &common->utfreadchar, JUMP(SLJIT_FAST_CALL));\n    }\n  else if (max < 128)\n    {\n    OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(utf8_table4) - 0xc0);\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n    }\n  else\n    {\n    OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n    if (!(options & READ_CHAR_UPDATE_STR_PTR))\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    else\n      OP1(SLJIT_MOV_U8, RETURN_ADDR, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(utf8_table4) - 0xc0);\n    OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x3f);\n    OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\n    OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f);\n    OP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n    if (options & READ_CHAR_UPDATE_STR_PTR)\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, RETURN_ADDR, 0);\n    }\n  JUMPHERE(jump);\n  }\n#elif PCRE2_CODE_UNIT_WIDTH == 16\nif (common->utf)\n  {\n  if (max < 0xd800 && !(options & READ_CHAR_UPDATE_STR_PTR)) return;\n\n  if (common->invalid_utf && !(options & READ_CHAR_VALID_UTF))\n    {\n    OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800);\n    jump = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800);\n\n    if (options & READ_CHAR_UTF8_NEWLINE)\n      add_jump(compiler, &common->utfreadnewline_invalid, JUMP(SLJIT_FAST_CALL));\n    else\n      add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL));\n\n    if (backtracks != NULL)\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR));\n    JUMPHERE(jump);\n    return;\n    }\n\n  if (max >= 0x10000)\n    {\n    OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800);\n    jump = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0xdc00 - 0xd800);\n    /* TMP2 contains the high surrogate. */\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n    OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 10);\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x10000 - 0xdc00);\n    OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0);\n    JUMPHERE(jump);\n    return;\n    }\n\n  /* Skip low surrogate if necessary. */\n  OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800);\n\n  if (sljit_has_cpu_feature(SLJIT_HAS_CMOV) && !HAS_VIRTUAL_REGISTERS)\n    {\n    if (options & READ_CHAR_UPDATE_STR_PTR)\n      OP2(SLJIT_ADD, RETURN_ADDR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0x400);\n    if (options & READ_CHAR_UPDATE_STR_PTR)\n      SELECT(SLJIT_LESS, STR_PTR, RETURN_ADDR, 0, STR_PTR);\n    if (max >= 0xd800)\n      SELECT(SLJIT_LESS, TMP1, SLJIT_IMM, 0x10000, TMP1);\n    }\n  else\n    {\n    jump = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x400);\n    if (options & READ_CHAR_UPDATE_STR_PTR)\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    if (max >= 0xd800)\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0x10000);\n    JUMPHERE(jump);\n    }\n  }\n#elif PCRE2_CODE_UNIT_WIDTH == 32\nif (common->invalid_utf)\n  {\n  if (backtracks != NULL)\n    {\n    OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800);\n    add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x110000));\n    add_jump(compiler, backtracks, CMP(SLJIT_LESS, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800));\n    }\n  else\n    {\n    OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800);\n    OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x110000);\n    SELECT(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR, TMP1);\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800);\n    SELECT(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR, TMP1);\n    }\n  }\n#endif /* PCRE2_CODE_UNIT_WIDTH == [8|16|32] */\n#endif /* SUPPORT_UNICODE */\n}\n\nstatic void skip_valid_char(compiler_common *common)\n{\nDEFINE_COMPILER;\n#if (defined SUPPORT_UNICODE) && (PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16)\nstruct sljit_jump *jump;\n#endif\n\n#if (defined SUPPORT_UNICODE) && (PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16)\n  if (common->utf)\n    {\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n#if PCRE2_CODE_UNIT_WIDTH == 8\n    jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xc0);\n    OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(utf8_table4) - 0xc0);\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n    jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xd800);\n    OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xfc00);\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0xd800);\n    OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL);\n    OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 1);\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n#endif /* PCRE2_CODE_UNIT_WIDTH == 8 */\n    JUMPHERE(jump);\n    return;\n    }\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == [8|16] */\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n}\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n\nstatic BOOL is_char7_bitset(const sljit_u8 *bitset, BOOL nclass)\n{\n/* Tells whether the character codes below 128 are enough\nto determine a match. */\nconst sljit_u8 value = nclass ? 0xff : 0;\nconst sljit_u8 *end = bitset + 32;\n\nbitset += 16;\ndo\n  {\n  if (*bitset++ != value)\n    return FALSE;\n  }\nwhile (bitset < end);\nreturn TRUE;\n}\n\nstatic void read_char7_type(compiler_common *common, jump_list **backtracks, BOOL negated)\n{\n/* Reads the precise character type of a character into TMP1, if the character\nis less than 128. Otherwise it returns with zero. Does not check STR_END. The\nfull_read argument tells whether characters above max are accepted or not. */\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\n\nSLJIT_ASSERT(common->utf);\n\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), 0);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\n/* All values > 127 are zero in ctypes. */\nOP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP2), common->ctypes);\n\nif (negated)\n  {\n  jump = CMP(SLJIT_LESS, TMP2, 0, SLJIT_IMM, 0x80);\n\n  if (common->invalid_utf)\n    {\n    OP1(SLJIT_MOV, TMP1, 0, TMP2, 0);\n    add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL));\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR));\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0);\n    }\n  else\n    {\n    OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(utf8_table4) - 0xc0);\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n    }\n  JUMPHERE(jump);\n  }\n}\n\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8 */\n\nstatic void read_char8_type(compiler_common *common, jump_list **backtracks, BOOL negated)\n{\n/* Reads the character type into TMP1, updates STR_PTR. Does not check STR_END. */\nDEFINE_COMPILER;\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8\nstruct sljit_jump *jump;\n#endif\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\nstruct sljit_jump *jump2;\n#endif\n\nSLJIT_UNUSED_ARG(backtracks);\nSLJIT_UNUSED_ARG(negated);\n\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), 0);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\nif (common->utf)\n  {\n  /* The result of this read may be unused, but saves an \"else\" part. */\n  OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP2), common->ctypes);\n  jump = CMP(SLJIT_LESS, TMP2, 0, SLJIT_IMM, 0x80);\n\n  if (!negated)\n    {\n    if (common->invalid_utf)\n      add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xc2);\n    if (common->invalid_utf)\n      add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0xe0 - 0xc2));\n\n    OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 6);\n    OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0);\n    OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x80);\n    if (common->invalid_utf)\n      add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40));\n\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0);\n    jump2 = CMP(SLJIT_GREATER, TMP2, 0, SLJIT_IMM, 255);\n    OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP2), common->ctypes);\n    JUMPHERE(jump2);\n    }\n  else if (common->invalid_utf)\n    {\n    add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL));\n    OP1(SLJIT_MOV, TMP2, 0, TMP1, 0);\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR));\n\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0);\n    jump2 = CMP(SLJIT_GREATER, TMP2, 0, SLJIT_IMM, 255);\n    OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP2), common->ctypes);\n    JUMPHERE(jump2);\n    }\n  else\n    add_jump(compiler, &common->utfreadtype8, JUMP(SLJIT_FAST_CALL));\n\n  JUMPHERE(jump);\n  return;\n  }\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8 */\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 32\nif (common->invalid_utf && negated)\n  add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x110000));\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 32 */\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\n/* The ctypes array contains only 256 values. */\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0);\njump = CMP(SLJIT_GREATER, TMP2, 0, SLJIT_IMM, 255);\n#endif /* PCRE2_CODE_UNIT_WIDTH != 8 */\nOP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP2), common->ctypes);\n#if PCRE2_CODE_UNIT_WIDTH != 8\nJUMPHERE(jump);\n#endif /* PCRE2_CODE_UNIT_WIDTH != 8 */\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 16\nif (common->utf && negated)\n  {\n  /* Skip low surrogate if necessary. */\n  if (!common->invalid_utf)\n    {\n    OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xd800);\n\n    if (sljit_has_cpu_feature(SLJIT_HAS_CMOV) && !HAS_VIRTUAL_REGISTERS)\n      {\n      OP2(SLJIT_ADD, RETURN_ADDR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n      OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0x400);\n      SELECT(SLJIT_LESS, STR_PTR, RETURN_ADDR, 0, STR_PTR);\n      }\n    else\n      {\n      jump = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x400);\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n      JUMPHERE(jump);\n      }\n    return;\n    }\n\n  OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xd800);\n  jump = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800);\n  add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x400));\n  add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n  OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xdc00);\n  add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x400));\n\n  JUMPHERE(jump);\n  return;\n  }\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 16 */\n}\n\nstatic void move_back(compiler_common *common, jump_list **backtracks, BOOL must_be_valid)\n{\n/* Goes one character back. Affects STR_PTR and TMP1. If must_be_valid is TRUE,\nTMP2 is not used. Otherwise TMP2 must contain the start of the subject buffer,\nand it is destroyed. Does not modify STR_PTR for invalid character sequences. */\nDEFINE_COMPILER;\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_jump *jump;\n#endif\n\n#ifdef SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\nstruct sljit_label *label;\n\nif (common->utf)\n  {\n  if (!must_be_valid && common->invalid_utf)\n    {\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), -IN_UCHARS(1));\n    OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x80);\n    add_jump(compiler, &common->utfmoveback_invalid, JUMP(SLJIT_FAST_CALL));\n    if (backtracks != NULL)\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, 0));\n    JUMPHERE(jump);\n    return;\n    }\n\n  label = LABEL();\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), -IN_UCHARS(1));\n  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xc0);\n  CMPTO(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, 0x80, label);\n  return;\n  }\n#elif PCRE2_CODE_UNIT_WIDTH == 16\nif (common->utf)\n  {\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), -IN_UCHARS(1));\n  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\n  if (!must_be_valid && common->invalid_utf)\n    {\n    OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xd800);\n    jump = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xe000 - 0xd800);\n    add_jump(compiler, &common->utfmoveback_invalid, JUMP(SLJIT_FAST_CALL));\n    if (backtracks != NULL)\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, 0));\n    JUMPHERE(jump);\n    return;\n    }\n\n  /* Skip low surrogate if necessary. */\n  OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xfc00);\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0xdc00);\n  OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL);\n  OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT);\n  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n  return;\n  }\n#elif PCRE2_CODE_UNIT_WIDTH == 32\nif (common->invalid_utf && !must_be_valid)\n  {\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), -IN_UCHARS(1));\n  if (backtracks != NULL)\n    {\n    add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x110000));\n    OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    return;\n    }\n\n  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x110000);\n  OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_LESS);\n  OP2(SLJIT_SHL,  TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT);\n  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n  return;\n  }\n#endif /* PCRE2_CODE_UNIT_WIDTH == [8|16|32] */\n#endif /* SUPPORT_UNICODE */\n\nSLJIT_UNUSED_ARG(backtracks);\nSLJIT_UNUSED_ARG(must_be_valid);\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n}\n\nstatic void check_newlinechar(compiler_common *common, int nltype, jump_list **backtracks, BOOL jumpifmatch)\n{\n/* Character comes in TMP1. Checks if it is a newline. TMP2 may be destroyed. */\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\n\nif (nltype == NLTYPE_ANY)\n  {\n  add_jump(compiler, &common->anynewline, JUMP(SLJIT_FAST_CALL));\n  sljit_set_current_flags(compiler, SLJIT_SET_Z);\n  add_jump(compiler, backtracks, JUMP(jumpifmatch ? SLJIT_NOT_ZERO : SLJIT_ZERO));\n  }\nelse if (nltype == NLTYPE_ANYCRLF)\n  {\n  if (jumpifmatch)\n    {\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_CR));\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_NL));\n    }\n  else\n    {\n    jump = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_CR);\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_NL));\n    JUMPHERE(jump);\n    }\n  }\nelse\n  {\n  SLJIT_ASSERT(nltype == NLTYPE_FIXED && common->newline < 256);\n  add_jump(compiler, backtracks, CMP(jumpifmatch ? SLJIT_EQUAL : SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, common->newline));\n  }\n}\n\n#ifdef SUPPORT_UNICODE\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nstatic void do_utfreadchar(compiler_common *common)\n{\n/* Fast decoding a UTF-8 character. TMP1 contains the first byte\nof the character (>= 0xc0). Return char value in TMP1. */\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n\n/* Searching for the first zero. */\nOP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x800);\njump = JUMP(SLJIT_NOT_ZERO);\n/* Two byte sequence. */\nOP2(SLJIT_XOR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x3000);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(jump);\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n\nOP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x10000);\njump = JUMP(SLJIT_NOT_ZERO);\n/* Three byte sequence. */\nOP2(SLJIT_XOR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xe0000);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\n/* Four byte sequence. */\nJUMPHERE(jump);\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(2));\nOP2(SLJIT_XOR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xf0000);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(3));\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x3f);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void do_utfreadtype8(compiler_common *common)\n{\n/* Fast decoding a UTF-8 character type. TMP2 contains the first byte\nof the character (>= 0xc0). Return value in TMP1. */\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\nstruct sljit_jump *compare;\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\nOP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, 0x20);\njump = JUMP(SLJIT_NOT_ZERO);\n/* Two byte sequence. */\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x1f);\n/* The upper 5 bits are known at this point. */\ncompare = CMP(SLJIT_GREATER, TMP2, 0, SLJIT_IMM, 0x3);\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 6);\nOP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x3f);\nOP2(SLJIT_OR, TMP2, 0, TMP2, 0, TMP1, 0);\nOP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP2), common->ctypes);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(compare);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\n/* We only have types for characters less than 256. */\nJUMPHERE(jump);\nOP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(utf8_table4) - 0xc0);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void do_utfreadchar_invalid(compiler_common *common)\n{\n/* Slow decoding a UTF-8 character. TMP1 contains the first byte\nof the character (>= 0xc0). Return char value in TMP1. STR_PTR is\nundefined for invalid characters. */\nDEFINE_COMPILER;\nsljit_s32 i;\nsljit_s32 has_cmov = sljit_has_cpu_feature(SLJIT_HAS_CMOV);\nstruct sljit_jump *jump;\nstruct sljit_jump *buffer_end_close;\nstruct sljit_label *three_byte_entry;\nstruct sljit_label *exit_invalid_label;\nstruct sljit_jump *exit_invalid[11];\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xc2);\n\n/* Usually more than 3 characters remained in the subject buffer. */\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(3));\n\n/* Not a valid start of a multi-byte sequence, no more bytes read. */\nexit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xf5 - 0xc2);\n\nbuffer_end_close = CMP(SLJIT_GREATER, STR_PTR, 0, STR_END, 0);\n\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-3));\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\n/* If TMP2 is in 0x80-0xbf range, TMP1 is also increased by (0x2 << 6). */\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0);\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80);\nexit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40);\n\nOP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x800);\njump = JUMP(SLJIT_NOT_ZERO);\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(jump);\n\n/* Three-byte sequence. */\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-2));\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\nif (has_cmov)\n  {\n  OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40);\n  SELECT(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, 0x20000, TMP1);\n  exit_invalid[2] = NULL;\n  }\nelse\n  exit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40);\n\nOP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x10000);\njump = JUMP(SLJIT_NOT_ZERO);\n\nthree_byte_entry = LABEL();\n\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x2d800);\nif (has_cmov)\n  {\n  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x800);\n  SELECT(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR - 0xd800, TMP1);\n  exit_invalid[3] = NULL;\n  }\nelse\n  exit_invalid[3] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x800);\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xd800);\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\nif (has_cmov)\n  {\n  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x800);\n  SELECT(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR, TMP1);\n  exit_invalid[4] = NULL;\n  }\nelse\n  exit_invalid[4] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x800);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(jump);\n\n/* Four-byte sequence. */\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-1));\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\nif (has_cmov)\n  {\n  OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40);\n  SELECT(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, 0, TMP1);\n  exit_invalid[5] = NULL;\n  }\nelse\n  exit_invalid[5] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40);\n\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xc10000);\nif (has_cmov)\n  {\n  OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x100000);\n  SELECT(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR - 0x10000, TMP1);\n  exit_invalid[6] = NULL;\n  }\nelse\n  exit_invalid[6] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x100000);\n\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x10000);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(buffer_end_close);\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\nexit_invalid[7] = CMP(SLJIT_GREATER, STR_PTR, 0, STR_END, 0);\n\n/* Two-byte sequence. */\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-1));\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\n/* If TMP2 is in 0x80-0xbf range, TMP1 is also increased by (0x2 << 6). */\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0);\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80);\nexit_invalid[8] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40);\n\nOP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x800);\njump = JUMP(SLJIT_NOT_ZERO);\n\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\n/* Three-byte sequence. */\nJUMPHERE(jump);\nexit_invalid[9] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\nif (has_cmov)\n  {\n  OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40);\n  SELECT(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR, TMP1);\n  exit_invalid[10] = NULL;\n  }\nelse\n  exit_invalid[10] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40);\n\n/* One will be substracted from STR_PTR later. */\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\n\n/* Four byte sequences are not possible. */\nCMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x30000, three_byte_entry);\n\nexit_invalid_label = LABEL();\nfor (i = 0; i < 11; i++)\n  sljit_set_label(exit_invalid[i], exit_invalid_label);\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void do_utfreadnewline_invalid(compiler_common *common)\n{\n/* Slow decoding a UTF-8 character, specialized for newlines.\nTMP1 contains the first byte of the character (>= 0xc0). Return\nchar value in TMP1. */\nDEFINE_COMPILER;\nstruct sljit_label *loop;\nstruct sljit_label *skip_start;\nstruct sljit_label *three_byte_exit;\nstruct sljit_jump *jump[5];\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\nif (common->nltype != NLTYPE_ANY)\n  {\n  SLJIT_ASSERT(common->nltype != NLTYPE_FIXED || common->newline < 128);\n\n  /* All newlines are ascii, just skip intermediate octets. */\n  jump[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n  loop = LABEL();\n  if (sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_SUPP | SLJIT_MEM_POST, TMP2, SLJIT_MEM1(STR_PTR), IN_UCHARS(1)) == SLJIT_SUCCESS)\n    sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_POST, TMP2, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\n  else\n    {\n    OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    }\n\n  OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xc0);\n  CMPTO(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, 0x80, loop);\n  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\n  JUMPHERE(jump[0]);\n\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR);\n  OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n  return;\n  }\n\njump[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\njump[1] = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, 0xc2);\njump[2] = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, 0xe2);\n\nskip_start = LABEL();\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xc0);\njump[3] = CMP(SLJIT_NOT_EQUAL, TMP2, 0, SLJIT_IMM, 0x80);\n\n/* Skip intermediate octets. */\nloop = LABEL();\njump[4] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xc0);\nCMPTO(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, 0x80, loop);\n\nJUMPHERE(jump[3]);\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\nthree_byte_exit = LABEL();\nJUMPHERE(jump[0]);\nJUMPHERE(jump[4]);\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\n/* Two byte long newline: 0x85. */\nJUMPHERE(jump[1]);\nCMPTO(SLJIT_NOT_EQUAL, TMP2, 0, SLJIT_IMM, 0x85, skip_start);\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0x85);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\n/* Three byte long newlines: 0x2028 and 0x2029. */\nJUMPHERE(jump[2]);\nCMPTO(SLJIT_NOT_EQUAL, TMP2, 0, SLJIT_IMM, 0x80, skip_start);\nCMPTO(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0, three_byte_exit);\n\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\nOP2(SLJIT_SUB, TMP1, 0, TMP2, 0, SLJIT_IMM, 0x80);\nCMPTO(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x40, skip_start);\n\nOP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, 0x2000);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void do_utfmoveback_invalid(compiler_common *common)\n{\n/* Goes one character back. */\nDEFINE_COMPILER;\nsljit_s32 i;\nstruct sljit_jump *jump;\nstruct sljit_jump *buffer_start_close;\nstruct sljit_label *exit_ok_label;\nstruct sljit_label *exit_invalid_label;\nstruct sljit_jump *exit_invalid[7];\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(3));\nexit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xc0);\n\n/* Two-byte sequence. */\nbuffer_start_close = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(2));\n\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xc0);\njump = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x20);\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 1);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\n/* Three-byte sequence. */\nJUMPHERE(jump);\nexit_invalid[1] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, -0x40);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\n\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xe0);\njump = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x10);\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 1);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\n/* Four-byte sequence. */\nJUMPHERE(jump);\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xe0 - 0x80);\nexit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x40);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xf0);\nexit_invalid[3] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x05);\n\nexit_ok_label = LABEL();\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 1);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\n/* Two-byte sequence. */\nJUMPHERE(buffer_start_close);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\n\nexit_invalid[4] = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xc0);\nCMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x20, exit_ok_label);\n\n/* Three-byte sequence. */\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\nexit_invalid[5] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, -0x40);\nexit_invalid[6] = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xe0);\nCMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x10, exit_ok_label);\n\n/* Four-byte sequences are not possible. */\n\nexit_invalid_label = LABEL();\nsljit_set_label(exit_invalid[5], exit_invalid_label);\nsljit_set_label(exit_invalid[6], exit_invalid_label);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(3));\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(exit_invalid[4]);\n/* -2 + 4 = 2 */\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\n\nexit_invalid_label = LABEL();\nfor (i = 0; i < 4; i++)\n  sljit_set_label(exit_invalid[i], exit_invalid_label);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(4));\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void do_utfpeakcharback(compiler_common *common)\n{\n/* Peak a character back. Does not modify STR_PTR. */\nDEFINE_COMPILER;\nstruct sljit_jump *jump[2];\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-2));\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xc0);\njump[0] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x20);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-3));\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xe0);\njump[1] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x10);\n\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-4));\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xe0 - 0x80);\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xf0);\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 6);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n\nJUMPHERE(jump[1]);\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-2));\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n\nJUMPHERE(jump[0]);\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-1));\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, 6);\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x80);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void do_utfpeakcharback_invalid(compiler_common *common)\n{\n/* Peak a character back. Does not modify STR_PTR. */\nDEFINE_COMPILER;\nsljit_s32 i;\nsljit_s32 has_cmov = sljit_has_cpu_feature(SLJIT_HAS_CMOV);\nstruct sljit_jump *jump[2];\nstruct sljit_label *two_byte_entry;\nstruct sljit_label *three_byte_entry;\nstruct sljit_label *exit_invalid_label;\nstruct sljit_jump *exit_invalid[8];\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\nOP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(3));\nexit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xc0);\njump[0] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, STR_PTR, 0);\n\n/* Two-byte sequence. */\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-2));\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xc2);\njump[1] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x1e);\n\ntwo_byte_entry = LABEL();\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 6);\n/* If TMP1 is in 0x80-0xbf range, TMP1 is also increased by (0x2 << 6). */\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(jump[1]);\nOP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xc2 - 0x80);\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x80);\nexit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40);\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 6);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n\n/* Three-byte sequence. */\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-3));\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xe0);\njump[1] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x10);\n\nthree_byte_entry = LABEL();\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 12);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xd800);\nif (has_cmov)\n  {\n  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x800);\n  SELECT(SLJIT_LESS, TMP1, SLJIT_IMM, -0xd800, TMP1);\n  exit_invalid[2] = NULL;\n  }\nelse\n  exit_invalid[2] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x800);\n\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xd800);\nif (has_cmov)\n  {\n  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x800);\n  SELECT(SLJIT_LESS, TMP1, SLJIT_IMM, INVALID_UTF_CHAR, TMP1);\n  exit_invalid[3] = NULL;\n  }\nelse\n  exit_invalid[3] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x800);\n\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(jump[1]);\nOP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xe0 - 0x80);\nexit_invalid[4] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40);\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 12);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n\n/* Four-byte sequence. */\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-4));\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x10000);\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xf0);\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 18);\n/* ADD is used instead of OR because of the SUB 0x10000 above. */\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0);\n\nif (has_cmov)\n  {\n  OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x100000);\n  SELECT(SLJIT_GREATER_EQUAL, TMP1, SLJIT_IMM, INVALID_UTF_CHAR - 0x10000, TMP1);\n  exit_invalid[5] = NULL;\n  }\nelse\n  exit_invalid[5] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x100000);\n\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x10000);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(jump[0]);\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1));\njump[0] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, STR_PTR, 0);\n\n/* Two-byte sequence. */\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-2));\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xc2);\nCMPTO(SLJIT_LESS, TMP2, 0, SLJIT_IMM, 0x1e, two_byte_entry);\n\nOP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xc2 - 0x80);\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x80);\nexit_invalid[6] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x40);\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 6);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, TMP2, 0);\n\n/* Three-byte sequence. */\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-3));\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xe0);\nCMPTO(SLJIT_LESS, TMP2, 0, SLJIT_IMM, 0x10, three_byte_entry);\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(jump[0]);\nexit_invalid[7] = CMP(SLJIT_GREATER, TMP2, 0, STR_PTR, 0);\n\n/* Two-byte sequence. */\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-2));\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xc2);\nCMPTO(SLJIT_LESS, TMP2, 0, SLJIT_IMM, 0x1e, two_byte_entry);\n\nexit_invalid_label = LABEL();\nfor (i = 0; i < 8; i++)\n  sljit_set_label(exit_invalid[i], exit_invalid_label);\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\n#endif /* PCRE2_CODE_UNIT_WIDTH == 8 */\n\n#if PCRE2_CODE_UNIT_WIDTH == 16\n\nstatic void do_utfreadchar_invalid(compiler_common *common)\n{\n/* Slow decoding a UTF-16 character. TMP1 contains the first half\nof the character (>= 0xd800). Return char value in TMP1. STR_PTR is\nundefined for invalid characters. */\nDEFINE_COMPILER;\nstruct sljit_jump *exit_invalid[3];\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\n/* TMP2 contains the high surrogate. */\nexit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xdc00);\nexit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 10);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xdc00);\nOP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 0x10000);\nexit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x400);\n\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(exit_invalid[0]);\nJUMPHERE(exit_invalid[1]);\nJUMPHERE(exit_invalid[2]);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void do_utfreadnewline_invalid(compiler_common *common)\n{\n/* Slow decoding a UTF-16 character, specialized for newlines.\nTMP1 contains the first half of the character (>= 0xd800). Return\nchar value in TMP1. */\n\nDEFINE_COMPILER;\nstruct sljit_jump *exit_invalid[2];\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\n/* TMP2 contains the high surrogate. */\nexit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\nexit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xdc00);\n\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xdc00);\nOP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, SLJIT_IMM, 0x400);\nOP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0x10000);\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, UCHAR_SHIFT);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(exit_invalid[0]);\nJUMPHERE(exit_invalid[1]);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void do_utfmoveback_invalid(compiler_common *common)\n{\n/* Goes one character back. */\nDEFINE_COMPILER;\nstruct sljit_jump *exit_invalid[3];\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\nexit_invalid[0] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x400);\nexit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, STR_PTR, 0);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-1));\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xd800);\nexit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x400);\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 1);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(exit_invalid[0]);\nJUMPHERE(exit_invalid[1]);\nJUMPHERE(exit_invalid[2]);\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void do_utfpeakcharback_invalid(compiler_common *common)\n{\n/* Peak a character back. Does not modify STR_PTR. */\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\nstruct sljit_jump *exit_invalid[3];\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\njump = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xe000);\nOP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1));\nexit_invalid[0] = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xdc00);\nexit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, STR_PTR, 0);\n\nOP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-2));\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x10000 - 0xdc00);\nOP2(SLJIT_SUB, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xd800);\nexit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x400);\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 10);\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0);\n\nJUMPHERE(jump);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(exit_invalid[0]);\nJUMPHERE(exit_invalid[1]);\nJUMPHERE(exit_invalid[2]);\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\n#endif /* PCRE2_CODE_UNIT_WIDTH == 16 */\n\n/* UCD_BLOCK_SIZE must be 128 (see the assert below). */\n#define UCD_BLOCK_MASK 127\n#define UCD_BLOCK_SHIFT 7\n\nstatic void do_getucd(compiler_common *common)\n{\n/* Search the UCD record for the character comes in TMP1.\nReturns chartype in TMP1 and UCD offset in TMP2. */\nDEFINE_COMPILER;\n#if PCRE2_CODE_UNIT_WIDTH == 32\nstruct sljit_jump *jump;\n#endif\n\n#if defined SLJIT_DEBUG && SLJIT_DEBUG\n/* dummy_ucd_record */\nconst ucd_record *record = GET_UCD(UNASSIGNED_UTF_CHAR);\nSLJIT_ASSERT(record->script == ucp_Unknown && record->chartype == ucp_Cn && record->gbprop == ucp_gbOther);\nSLJIT_ASSERT(record->caseset == 0 && record->other_case == 0);\n#endif\n\nSLJIT_ASSERT(UCD_BLOCK_SIZE == 128 && sizeof(ucd_record) == 12);\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\nif (!common->utf)\n  {\n  jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, MAX_UTF_CODE_POINT + 1);\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, UNASSIGNED_UTF_CHAR);\n  JUMPHERE(jump);\n  }\n#endif\n\nOP2(SLJIT_LSHR, TMP2, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_SHIFT);\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 1);\nOP1(SLJIT_MOV_U16, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_stage1));\nOP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_MASK);\nsljit_emit_op2_shift(compiler, SLJIT_ADD | SLJIT_SHL_IMM | SLJIT_SRC2_UNDEFINED, TMP1, 0, TMP1, 0, TMP2, 0, UCD_BLOCK_SHIFT);\nOP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_stage2));\nOP1(SLJIT_MOV_U16, TMP2, 0, SLJIT_MEM2(TMP2, TMP1), 1);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void do_getucdtype(compiler_common *common)\n{\n/* Search the UCD record for the character comes in TMP1.\nReturns chartype in TMP1 and UCD offset in TMP2. */\nDEFINE_COMPILER;\n#if PCRE2_CODE_UNIT_WIDTH == 32\nstruct sljit_jump *jump;\n#endif\n\n#if defined SLJIT_DEBUG && SLJIT_DEBUG\n/* dummy_ucd_record */\nconst ucd_record *record = GET_UCD(UNASSIGNED_UTF_CHAR);\nSLJIT_ASSERT(record->script == ucp_Unknown && record->chartype == ucp_Cn && record->gbprop == ucp_gbOther);\nSLJIT_ASSERT(record->caseset == 0 && record->other_case == 0);\n#endif\n\nSLJIT_ASSERT(UCD_BLOCK_SIZE == 128 && sizeof(ucd_record) == 12);\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\nif (!common->utf)\n  {\n  jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, MAX_UTF_CODE_POINT + 1);\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, UNASSIGNED_UTF_CHAR);\n  JUMPHERE(jump);\n  }\n#endif\n\nOP2(SLJIT_LSHR, TMP2, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_SHIFT);\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 1);\nOP1(SLJIT_MOV_U16, TMP2, 0, SLJIT_MEM1(TMP2), (sljit_sw)PRIV(ucd_stage1));\nOP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, UCD_BLOCK_MASK);\nsljit_emit_op2_shift(compiler, SLJIT_ADD | SLJIT_SHL_IMM | SLJIT_SRC2_UNDEFINED, TMP1, 0, TMP1, 0, TMP2, 0, UCD_BLOCK_SHIFT);\nOP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_stage2));\nOP1(SLJIT_MOV_U16, TMP2, 0, SLJIT_MEM2(TMP2, TMP1), 1);\n\n/* TMP2 is multiplied by 12. Same as (TMP2 + (TMP2 << 1)) << 2. */\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, chartype));\nsljit_emit_op2_shift(compiler, SLJIT_ADD | SLJIT_SHL_IMM | SLJIT_SRC2_UNDEFINED, TMP2, 0, TMP2, 0, TMP2, 0, 1);\nOP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM2(TMP1, TMP2), 2);\n\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\n#endif /* SUPPORT_UNICODE */\n\nstatic SLJIT_INLINE struct sljit_label *mainloop_entry(compiler_common *common)\n{\nDEFINE_COMPILER;\nstruct sljit_label *mainloop;\nstruct sljit_label *newlinelabel = NULL;\nstruct sljit_jump *start;\nstruct sljit_jump *end = NULL;\nstruct sljit_jump *end2 = NULL;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_label *loop;\nstruct sljit_jump *jump;\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */\njump_list *newline = NULL;\nsljit_u32 overall_options = common->re->overall_options;\nBOOL hascrorlf = (common->re->flags & PCRE2_HASCRORLF) != 0;\nBOOL newlinecheck = FALSE;\nBOOL readuchar = FALSE;\n\nif (!(hascrorlf || (overall_options & PCRE2_FIRSTLINE) != 0)\n    && (common->nltype == NLTYPE_ANY || common->nltype == NLTYPE_ANYCRLF || common->newline > 255))\n  newlinecheck = TRUE;\n\nSLJIT_ASSERT(common->abort_label == NULL);\n\nif ((overall_options & PCRE2_FIRSTLINE) != 0)\n  {\n  /* Search for the end of the first line. */\n  SLJIT_ASSERT(common->match_end_ptr != 0);\n  OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);\n\n  if (common->nltype == NLTYPE_FIXED && common->newline > 255)\n    {\n    mainloop = LABEL();\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    end = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-1));\n    OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n    CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff, mainloop);\n    CMPTO(SLJIT_NOT_EQUAL, TMP2, 0, SLJIT_IMM, common->newline & 0xff, mainloop);\n    JUMPHERE(end);\n    OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    }\n  else\n    {\n    end = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n    mainloop = LABEL();\n    /* Continual stores does not cause data dependency. */\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr, STR_PTR, 0);\n    read_char(common, common->nlmin, common->nlmax, NULL, READ_CHAR_NEWLINE);\n    check_newlinechar(common, common->nltype, &newline, TRUE);\n    CMPTO(SLJIT_LESS, STR_PTR, 0, STR_END, 0, mainloop);\n    JUMPHERE(end);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr, STR_PTR, 0);\n    set_jumps(newline, LABEL());\n    }\n\n  OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0);\n  }\nelse if ((overall_options & PCRE2_USE_OFFSET_LIMIT) != 0)\n  {\n  /* Check whether offset limit is set and valid. */\n  SLJIT_ASSERT(common->match_end_ptr != 0);\n\n  if (HAS_VIRTUAL_REGISTERS)\n    {\n    OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, offset_limit));\n    }\n  else\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, offset_limit));\n\n  OP1(SLJIT_MOV, TMP2, 0, STR_END, 0);\n  end = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, (sljit_sw) PCRE2_UNSET);\n  if (HAS_VIRTUAL_REGISTERS)\n    OP1(SLJIT_MOV, TMP2, 0, ARGUMENTS, 0);\n  else\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin));\n\n#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n  OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT);\n#endif /* PCRE2_CODE_UNIT_WIDTH == [16|32] */\n  if (HAS_VIRTUAL_REGISTERS)\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, begin));\n\n  OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0);\n  end2 = CMP(SLJIT_LESS_EQUAL, TMP2, 0, STR_END, 0);\n  OP1(SLJIT_MOV, TMP2, 0, STR_END, 0);\n  JUMPHERE(end2);\n  OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, PCRE2_ERROR_NOMATCH);\n  add_jump(compiler, &common->abort, CMP(SLJIT_LESS, TMP2, 0, STR_PTR, 0));\n  JUMPHERE(end);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr, TMP2, 0);\n  }\n\nstart = JUMP(SLJIT_JUMP);\n\nif (newlinecheck)\n  {\n  newlinelabel = LABEL();\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  end = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, common->newline & 0xff);\n  OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL);\n#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n  OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT);\n#endif /* PCRE2_CODE_UNIT_WIDTH == [16|32] */\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n  end2 = JUMP(SLJIT_JUMP);\n  }\n\nmainloop = LABEL();\n\n/* Increasing the STR_PTR here requires one less jump in the most common case. */\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nif (common->utf && !common->invalid_utf) readuchar = TRUE;\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */\nif (newlinecheck) readuchar = TRUE;\n\nif (readuchar)\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\n\nif (newlinecheck)\n  CMPTO(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff, newlinelabel);\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n#if PCRE2_CODE_UNIT_WIDTH == 8\nif (common->invalid_utf)\n  {\n  /* Skip continuation code units. */\n  loop = LABEL();\n  jump = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x80);\n  CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x40, loop);\n  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  JUMPHERE(jump);\n  }\nelse if (common->utf)\n  {\n  jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xc0);\n  OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)PRIV(utf8_table4) - 0xc0);\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n  JUMPHERE(jump);\n  }\n#elif PCRE2_CODE_UNIT_WIDTH == 16\nif (common->invalid_utf)\n  {\n  /* Skip continuation code units. */\n  loop = LABEL();\n  jump = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xdc00);\n  CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x400, loop);\n  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  JUMPHERE(jump);\n  }\nelse if (common->utf)\n  {\n  OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xd800);\n\n  if (sljit_has_cpu_feature(SLJIT_HAS_CMOV))\n    {\n    OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x400);\n    SELECT(SLJIT_LESS, STR_PTR, TMP2, 0, STR_PTR);\n    }\n  else\n    {\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, SLJIT_IMM, 0x400);\n    OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_LESS);\n    OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT);\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n    }\n  }\n#endif /* PCRE2_CODE_UNIT_WIDTH == [8|16] */\n#endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */\nJUMPHERE(start);\n\nif (newlinecheck)\n  {\n  JUMPHERE(end);\n  JUMPHERE(end2);\n  }\n\nreturn mainloop;\n}\n\n\nstatic SLJIT_INLINE void add_prefix_char(PCRE2_UCHAR chr, fast_forward_char_data *chars, BOOL last)\n{\nsljit_u32 i, count = chars->count;\n\nif (count == 255)\n  return;\n\nif (count == 0)\n  {\n  chars->count = 1;\n  chars->chars[0] = chr;\n\n  if (last)\n    chars->last_count = 1;\n  return;\n  }\n\nfor (i = 0; i < count; i++)\n  if (chars->chars[i] == chr)\n    return;\n\nif (count >= MAX_DIFF_CHARS)\n  {\n  chars->count = 255;\n  return;\n  }\n\nchars->chars[count] = chr;\nchars->count = count + 1;\n\nif (last)\n  chars->last_count++;\n}\n\n/* Value can be increased if needed. Patterns\nsuch as /(a|){33}b/ can exhaust the stack.\n\nNote: /(a|){29}b/ already stops scan_prefix()\nbecause it reaches the maximum step_count. */\n#define SCAN_PREFIX_STACK_END 32\n\n/*\nScan prefix stores the prefix string in the chars array.\nThe elements of the chars array is either small character\nsets or \"any\" (count is set to 255).\n\nExamples (the chars array is represented by a simple regex):\n\n/(abc|xbyd)/ prefix: /[ax]b[cy]/ (length: 3)\n/a[a-z]b+c/ prefix: a.b (length: 3)\n/ab?cd/ prefix: a[bc][cd] (length: 3)\n/(ab|cd)|(ef|gh)/ prefix: [aceg][bdfh] (length: 2)\n\nThe length is returned by scan_prefix(). The length is\nless than or equal than the minimum length of the pattern.\n*/\n\nstatic int scan_prefix(compiler_common *common, PCRE2_SPTR cc, fast_forward_char_data *chars)\n{\nfast_forward_char_data *chars_start = chars;\nfast_forward_char_data *chars_end = chars + MAX_N_CHARS;\nPCRE2_SPTR cc_stack[SCAN_PREFIX_STACK_END];\nfast_forward_char_data *chars_stack[SCAN_PREFIX_STACK_END];\nsljit_u8 next_alternative_stack[SCAN_PREFIX_STACK_END];\nBOOL last, any, class, caseless;\nint stack_ptr, step_count, repeat, len, len_save;\nsljit_u32 chr; /* Any unicode character. */\nsljit_u8 *bytes, *bytes_end, byte;\nPCRE2_SPTR alternative, cc_save, oc;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\nPCRE2_UCHAR othercase[4];\n#elif defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 16\nPCRE2_UCHAR othercase[2];\n#else\nPCRE2_UCHAR othercase[1];\n#endif\n\nrepeat = 1;\nstack_ptr = 0;\nstep_count = 10000;\nwhile (TRUE)\n  {\n  if (--step_count == 0)\n    return 0;\n\n  SLJIT_ASSERT(chars <= chars_start + MAX_N_CHARS);\n\n  if (chars >= chars_end)\n    {\n    if (stack_ptr == 0)\n      return (int)(chars_end - chars_start);\n\n    --stack_ptr;\n    cc = cc_stack[stack_ptr];\n    chars = chars_stack[stack_ptr];\n\n    if (chars >= chars_end)\n      continue;\n\n    if (next_alternative_stack[stack_ptr] != 0)\n      {\n      /* When an alternative is processed, the\n      next alternative is pushed onto the stack. */\n      SLJIT_ASSERT(*cc == OP_ALT);\n      alternative = cc + GET(cc, 1);\n      if (*alternative == OP_ALT)\n        {\n        SLJIT_ASSERT(stack_ptr < SCAN_PREFIX_STACK_END);\n        SLJIT_ASSERT(chars_stack[stack_ptr] == chars);\n        SLJIT_ASSERT(next_alternative_stack[stack_ptr] == 1);\n        cc_stack[stack_ptr] = alternative;\n        stack_ptr++;\n        }\n      cc += 1 + LINK_SIZE;\n      }\n    }\n\n  last = TRUE;\n  any = FALSE;\n  class = FALSE;\n  caseless = FALSE;\n\n  switch (*cc)\n    {\n    case OP_CHARI:\n    caseless = TRUE;\n    PCRE2_FALLTHROUGH /* Fall through */\n    case OP_CHAR:\n    last = FALSE;\n    cc++;\n    break;\n\n    case OP_SOD:\n    case OP_SOM:\n    case OP_SET_SOM:\n    case OP_NOT_WORD_BOUNDARY:\n    case OP_WORD_BOUNDARY:\n    case OP_EODN:\n    case OP_EOD:\n    case OP_CIRC:\n    case OP_CIRCM:\n    case OP_DOLL:\n    case OP_DOLLM:\n    case OP_NOT_UCP_WORD_BOUNDARY:\n    case OP_UCP_WORD_BOUNDARY:\n    /* Zero width assertions. */\n    cc++;\n    continue;\n\n    case OP_ASSERT:\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK:\n    case OP_ASSERTBACK_NOT:\n    case OP_ASSERT_NA:\n    case OP_ASSERTBACK_NA:\n    case OP_ASSERT_SCS:\n    cc = bracketend(cc);\n    continue;\n\n    case OP_PLUSI:\n    case OP_MINPLUSI:\n    case OP_POSPLUSI:\n    caseless = TRUE;\n    PCRE2_FALLTHROUGH /* Fall through */\n    case OP_PLUS:\n    case OP_MINPLUS:\n    case OP_POSPLUS:\n    cc++;\n    break;\n\n    case OP_EXACTI:\n    caseless = TRUE;\n    PCRE2_FALLTHROUGH /* Fall through */\n    case OP_EXACT:\n    repeat = GET2(cc, 1);\n    last = FALSE;\n    cc += 1 + IMM2_SIZE;\n    break;\n\n    case OP_QUERYI:\n    case OP_MINQUERYI:\n    case OP_POSQUERYI:\n    caseless = TRUE;\n    PCRE2_FALLTHROUGH /* Fall through */\n    case OP_QUERY:\n    case OP_MINQUERY:\n    case OP_POSQUERY:\n    len = 1;\n    cc++;\n#ifdef SUPPORT_UNICODE\n    if (common->utf && HAS_EXTRALEN(*cc)) len += GET_EXTRALEN(*cc);\n#endif\n    if (stack_ptr >= SCAN_PREFIX_STACK_END)\n      {\n      chars_end = chars;\n      continue;\n      }\n\n    cc_stack[stack_ptr] = cc + len;\n    chars_stack[stack_ptr] = chars;\n    next_alternative_stack[stack_ptr] = 0;\n    stack_ptr++;\n\n    last = FALSE;\n    break;\n\n    case OP_KET:\n    cc += 1 + LINK_SIZE;\n    continue;\n\n    case OP_ALT:\n    cc += GET(cc, 1);\n    continue;\n\n    case OP_ONCE:\n    case OP_BRA:\n    case OP_BRAPOS:\n    case OP_CBRA:\n    case OP_CBRAPOS:\n    alternative = cc + GET(cc, 1);\n    if (*alternative == OP_ALT)\n      {\n      if (stack_ptr >= SCAN_PREFIX_STACK_END)\n        {\n        chars_end = chars;\n        continue;\n        }\n\n      cc_stack[stack_ptr] = alternative;\n      chars_stack[stack_ptr] = chars;\n      next_alternative_stack[stack_ptr] = 1;\n      stack_ptr++;\n      }\n\n    if (*cc == OP_CBRA || *cc == OP_CBRAPOS)\n      cc += IMM2_SIZE;\n    cc += 1 + LINK_SIZE;\n    continue;\n\n    case OP_CLASS:\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n    if (common->utf && !is_char7_bitset((const sljit_u8 *)(cc + 1), FALSE))\n      {\n      chars_end = chars;\n      continue;\n      }\n#endif\n    class = TRUE;\n    break;\n\n    case OP_NCLASS:\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n    if (common->utf)\n      {\n      chars_end = chars;\n      continue;\n      }\n#endif\n    class = TRUE;\n    break;\n\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8\n    case OP_XCLASS:\n    case OP_ECLASS:\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n    if (common->utf)\n      {\n      chars_end = chars;\n      continue;\n      }\n#endif\n    any = TRUE;\n    cc += GET(cc, 1);\n    break;\n#endif\n\n    case OP_DIGIT:\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n    if (common->utf && !is_char7_bitset((const sljit_u8 *)common->ctypes - cbit_length + cbit_digit, FALSE))\n      {\n      chars_end = chars;\n      continue;\n      }\n#endif\n    any = TRUE;\n    cc++;\n    break;\n\n    case OP_WHITESPACE:\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n    if (common->utf && !is_char7_bitset((const sljit_u8 *)common->ctypes - cbit_length + cbit_space, FALSE))\n      {\n      chars_end = chars;\n      continue;\n      }\n#endif\n    any = TRUE;\n    cc++;\n    break;\n\n    case OP_WORDCHAR:\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n    if (common->utf && !is_char7_bitset((const sljit_u8 *)common->ctypes - cbit_length + cbit_word, FALSE))\n      {\n      chars_end = chars;\n      continue;\n      }\n#endif\n    any = TRUE;\n    cc++;\n    break;\n\n    case OP_NOT:\n    case OP_NOTI:\n    cc++;\n    PCRE2_FALLTHROUGH /* Fall through */\n    case OP_NOT_DIGIT:\n    case OP_NOT_WHITESPACE:\n    case OP_NOT_WORDCHAR:\n    case OP_ANY:\n    case OP_ALLANY:\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n    if (common->utf)\n      {\n      chars_end = chars;\n      continue;\n      }\n#endif\n    any = TRUE;\n    cc++;\n    break;\n\n#ifdef SUPPORT_UNICODE\n    case OP_NOTPROP:\n    case OP_PROP:\n#if PCRE2_CODE_UNIT_WIDTH != 32\n    if (common->utf)\n      {\n      chars_end = chars;\n      continue;\n      }\n#endif\n    any = TRUE;\n    cc += 1 + 2;\n    break;\n#endif\n\n    case OP_TYPEEXACT:\n    repeat = GET2(cc, 1);\n    cc += 1 + IMM2_SIZE;\n    continue;\n\n    case OP_NOTEXACT:\n    case OP_NOTEXACTI:\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n    if (common->utf)\n      {\n      chars_end = chars;\n      continue;\n      }\n#endif\n    any = TRUE;\n    repeat = GET2(cc, 1);\n    cc += 1 + IMM2_SIZE + 1;\n    break;\n\n    default:\n    chars_end = chars;\n    continue;\n    }\n\n  SLJIT_ASSERT(chars < chars_end);\n\n  if (any)\n    {\n    do\n      {\n      chars->count = 255;\n      chars++;\n      }\n    while (--repeat > 0 && chars < chars_end);\n\n    repeat = 1;\n    continue;\n    }\n\n  if (class)\n    {\n    bytes = (sljit_u8*) (cc + 1);\n    cc += 1 + 32 / sizeof(PCRE2_UCHAR);\n\n    SLJIT_ASSERT(last == TRUE && repeat == 1);\n    switch (*cc)\n      {\n      case OP_CRQUERY:\n      case OP_CRMINQUERY:\n      case OP_CRPOSQUERY:\n      last = FALSE;\n      PCRE2_FALLTHROUGH /* Fall through */\n      case OP_CRSTAR:\n      case OP_CRMINSTAR:\n      case OP_CRPOSSTAR:\n      if (stack_ptr >= SCAN_PREFIX_STACK_END)\n        {\n        chars_end = chars;\n        continue;\n        }\n\n      cc_stack[stack_ptr] = ++cc;\n      chars_stack[stack_ptr] = chars;\n      next_alternative_stack[stack_ptr] = 0;\n      stack_ptr++;\n      break;\n\n      default:\n      case OP_CRPLUS:\n      case OP_CRMINPLUS:\n      case OP_CRPOSPLUS:\n      break;\n\n      case OP_CRRANGE:\n      case OP_CRMINRANGE:\n      case OP_CRPOSRANGE:\n      repeat = GET2(cc, 1);\n      if (repeat <= 0)\n        {\n        repeat = 1;\n        chars_end = chars;\n        continue;\n        }\n\n      last = (repeat != (int)GET2(cc, 1 + IMM2_SIZE));\n      cc += 1 + 2 * IMM2_SIZE;\n      break;\n      }\n\n    do\n      {\n      if (bytes[31] & 0x80)\n        chars->count = 255;\n      else if (chars->count != 255)\n        {\n        bytes_end = bytes + 32;\n        chr = 0;\n        do\n          {\n          byte = *bytes++;\n          SLJIT_ASSERT((chr & 0x7) == 0);\n          if (byte == 0)\n            chr += 8;\n          else\n            {\n            do\n              {\n              if ((byte & 0x1) != 0)\n                add_prefix_char(chr, chars, TRUE);\n              byte >>= 1;\n              chr++;\n              }\n            while (byte != 0);\n            chr = (chr + 7) & (sljit_u32)(~7);\n            }\n          }\n        while (chars->count != 255 && bytes < bytes_end);\n        bytes = bytes_end - 32;\n        }\n\n      chars++;\n      }\n    while (--repeat > 0 && chars < chars_end);\n\n    repeat = 1;\n    if (last)\n      chars_end = chars;\n    continue;\n    }\n\n  len = 1;\n#ifdef SUPPORT_UNICODE\n  if (common->utf && HAS_EXTRALEN(*cc)) len += GET_EXTRALEN(*cc);\n#endif\n\n  if (caseless && char_has_othercase(common, cc))\n    {\n#ifdef SUPPORT_UNICODE\n    if (common->utf)\n      {\n      GETCHAR(chr, cc);\n      if ((int)PRIV(ord2utf)(char_othercase(common, chr), othercase) != len)\n        {\n        chars_end = chars;\n        continue;\n        }\n      }\n    else\n#endif\n      {\n      chr = *cc;\n#ifdef SUPPORT_UNICODE\n      if (common->ucp && chr > 127)\n        {\n        chr = UCD_OTHERCASE(chr);\n        othercase[0] = (chr == (PCRE2_UCHAR)chr) ? chr : *cc;\n        }\n      else\n#endif\n        othercase[0] = TABLE_GET(chr, common->fcc, chr);\n      }\n    }\n  else\n    {\n    caseless = FALSE;\n    othercase[0] = 0; /* Stops compiler warning - PH */\n    }\n\n  len_save = len;\n  cc_save = cc;\n  while (TRUE)\n    {\n    oc = othercase;\n    do\n      {\n      len--;\n\n      chr = *cc;\n      add_prefix_char(*cc, chars, len == 0);\n\n      if (caseless)\n        add_prefix_char(*oc, chars, len == 0);\n\n      chars++;\n      cc++;\n      oc++;\n      }\n    while (len > 0 && chars < chars_end);\n\n    if (--repeat == 0 || chars >= chars_end)\n      break;\n\n    len = len_save;\n    cc = cc_save;\n    }\n\n  repeat = 1;\n  if (last)\n    chars_end = chars;\n  }\n}\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstatic void jumpto_if_not_utf_char_start(struct sljit_compiler *compiler, sljit_s32 reg, struct sljit_label *label)\n{\n#if PCRE2_CODE_UNIT_WIDTH == 8\nOP2(SLJIT_AND, reg, 0, reg, 0, SLJIT_IMM, 0xc0);\nCMPTO(SLJIT_EQUAL, reg, 0, SLJIT_IMM, 0x80, label);\n#elif PCRE2_CODE_UNIT_WIDTH == 16\nOP2(SLJIT_AND, reg, 0, reg, 0, SLJIT_IMM, 0xfc00);\nCMPTO(SLJIT_EQUAL, reg, 0, SLJIT_IMM, 0xdc00, label);\n#else\n#error \"Unknown code width\"\n#endif\n}\n#endif\n\n#include \"pcre2_jit_simd_inc.h\"\n\n#ifdef JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD\n\nstatic BOOL check_fast_forward_char_pair_simd(compiler_common *common, fast_forward_char_data *chars, int max)\n{\n  sljit_s32 i, j, max_i = 0, max_j = 0;\n  sljit_u32 max_pri = 0;\n  sljit_s32 max_offset = max_fast_forward_char_pair_offset();\n  PCRE2_UCHAR a1, a2, a_pri, b1, b2, b_pri;\n\n  for (i = max - 1; i >= 1; i--)\n    {\n    if (chars[i].last_count > 2)\n      {\n      a1 = chars[i].chars[0];\n      a2 = chars[i].chars[1];\n      a_pri = chars[i].last_count;\n\n      j = i - max_offset;\n      if (j < 0)\n        j = 0;\n\n      while (j < i)\n        {\n        b_pri = chars[j].last_count;\n        if (b_pri > 2 && (sljit_u32)a_pri + (sljit_u32)b_pri >= max_pri)\n          {\n          b1 = chars[j].chars[0];\n          b2 = chars[j].chars[1];\n\n          if (a1 != b1 && a1 != b2 && a2 != b1 && a2 != b2)\n            {\n            max_pri = a_pri + b_pri;\n            max_i = i;\n            max_j = j;\n            }\n          }\n        j++;\n        }\n      }\n    }\n\nif (max_pri == 0)\n  return FALSE;\n\nfast_forward_char_pair_simd(common, max_i, chars[max_i].chars[0], chars[max_i].chars[1], max_j, chars[max_j].chars[0], chars[max_j].chars[1]);\nreturn TRUE;\n}\n\n#endif /* JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD */\n\nstatic void fast_forward_first_char2(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)\n{\nDEFINE_COMPILER;\nstruct sljit_label *start;\nstruct sljit_jump *match;\nstruct sljit_jump *partial_quit;\nPCRE2_UCHAR mask;\nBOOL has_match_end = (common->match_end_ptr != 0);\n\nSLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE || offset == 0);\n\nif (has_match_end)\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);\n\nif (offset > 0)\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offset));\n\nif (has_match_end)\n  {\n  OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);\n\n  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offset + 1));\n  OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_END, 0, TMP1, 0);\n  SELECT(SLJIT_GREATER, STR_END, TMP1, 0, STR_END);\n  }\n\n#ifdef JIT_HAS_FAST_FORWARD_CHAR_SIMD\n\nif (JIT_HAS_FAST_FORWARD_CHAR_SIMD)\n  {\n  fast_forward_char_simd(common, char1, char2, offset);\n\n  if (offset > 0)\n    OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offset));\n\n  if (has_match_end)\n    OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);\n  return;\n  }\n\n#endif\n\nstart = LABEL();\n\npartial_quit = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\nif (common->mode == PCRE2_JIT_COMPLETE)\n  add_jump(compiler, &common->failed_match, partial_quit);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\nif (char1 == char2)\n  CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, char1, start);\nelse\n  {\n  mask = char1 ^ char2;\n  if (is_powerof2(mask))\n    {\n    OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, mask);\n    CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, char1 | mask, start);\n    }\n  else\n    {\n    match = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, char1);\n    CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, char2, start);\n    JUMPHERE(match);\n    }\n  }\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nif (common->utf && offset > 0)\n  {\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-(offset + 1)));\n  jumpto_if_not_utf_char_start(compiler, TMP1, start);\n  }\n#endif\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offset + 1));\n\nif (common->mode != PCRE2_JIT_COMPLETE)\n  JUMPHERE(partial_quit);\n\nif (has_match_end)\n  OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);\n}\n\nstatic SLJIT_INLINE BOOL fast_forward_first_n_chars(compiler_common *common)\n{\nDEFINE_COMPILER;\nstruct sljit_label *start;\nstruct sljit_jump *match;\nfast_forward_char_data chars[MAX_N_CHARS];\nsljit_s32 offset;\nPCRE2_UCHAR mask;\nPCRE2_UCHAR *char_set, *char_set_end;\nint i, max, from;\nint range_right = -1, range_len;\nsljit_u8 *update_table = NULL;\nBOOL in_range;\n\nfor (i = 0; i < MAX_N_CHARS; i++)\n  {\n  chars[i].count = 0;\n  chars[i].last_count = 0;\n  }\n\nmax = scan_prefix(common, common->start, chars);\n\nif (max < 1)\n  return FALSE;\n\n/* Convert last_count to priority. */\nfor (i = 0; i < max; i++)\n  {\n  SLJIT_ASSERT(chars[i].last_count <= chars[i].count);\n\n  switch (chars[i].count)\n    {\n    case 0:\n    chars[i].count = 255;\n    chars[i].last_count = 0;\n    break;\n\n    case 1:\n    chars[i].last_count = (chars[i].last_count == 1) ? 7 : 5;\n    /* Simplifies algorithms later. */\n    chars[i].chars[1] = chars[i].chars[0];\n    break;\n\n    case 2:\n    SLJIT_ASSERT(chars[i].chars[0] != chars[i].chars[1]);\n\n    if (is_powerof2(chars[i].chars[0] ^ chars[i].chars[1]))\n      chars[i].last_count = (chars[i].last_count == 2) ? 6 : 4;\n    else\n      chars[i].last_count = (chars[i].last_count == 2) ? 3 : 2;\n    break;\n\n    default:\n    chars[i].last_count = (chars[i].count == 255) ? 0 : 1;\n    break;\n    }\n  }\n\n#ifdef JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD\nif (JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD && check_fast_forward_char_pair_simd(common, chars, max))\n  return TRUE;\n#endif\n\nin_range = FALSE;\n/* Prevent compiler \"uninitialized\" warning */\nfrom = 0;\nrange_len = 4 /* minimum length */ - 1;\nfor (i = 0; i <= max; i++)\n  {\n  if (in_range && (i - from) > range_len && (chars[i - 1].count < 255))\n    {\n    range_len = i - from;\n    range_right = i - 1;\n    }\n\n  if (i < max && chars[i].count < 255)\n    {\n    SLJIT_ASSERT(chars[i].count > 0);\n    if (!in_range)\n      {\n      in_range = TRUE;\n      from = i;\n      }\n    }\n  else\n    in_range = FALSE;\n  }\n\nif (range_right >= 0)\n  {\n  update_table = (sljit_u8 *)allocate_read_only_data(common, 256);\n  if (update_table == NULL)\n    return TRUE;\n  memset(update_table, IN_UCHARS(range_len), 256);\n\n  for (i = 0; i < range_len; i++)\n    {\n    SLJIT_ASSERT(chars[range_right - i].count > 0 && chars[range_right - i].count < 255);\n\n    char_set = chars[range_right - i].chars;\n    char_set_end = char_set + chars[range_right - i].count;\n    do\n      {\n      if (update_table[(*char_set) & 0xff] > IN_UCHARS(i))\n        update_table[(*char_set) & 0xff] = IN_UCHARS(i);\n      char_set++;\n      }\n    while (char_set < char_set_end);\n    }\n  }\n\noffset = -1;\n/* Scan forward. */\nfor (i = 0; i < max; i++)\n  {\n  if (range_right == i)\n    continue;\n\n  if (offset == -1)\n    {\n    if (chars[i].last_count >= 2)\n      offset = i;\n    }\n  else if (chars[offset].last_count < chars[i].last_count)\n    offset = i;\n  }\n\nSLJIT_ASSERT(offset == -1 || (chars[offset].count >= 1 && chars[offset].count <= 2));\n\nif (range_right < 0)\n  {\n  if (offset < 0)\n    return FALSE;\n  /* Works regardless the value is 1 or 2. */\n  fast_forward_first_char2(common, chars[offset].chars[0], chars[offset].chars[1], offset);\n  return TRUE;\n  }\n\nSLJIT_ASSERT(range_right != offset);\n\nif (common->match_end_ptr != 0)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);\n  OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);\n  OP2(SLJIT_SUB | SLJIT_SET_LESS, STR_END, 0, STR_END, 0, SLJIT_IMM, IN_UCHARS(max));\n  add_jump(compiler, &common->failed_match, JUMP(SLJIT_LESS));\n  OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_END, 0, TMP1, 0);\n  SELECT(SLJIT_GREATER, STR_END, TMP1, 0, STR_END);\n  }\nelse\n  {\n  OP2(SLJIT_SUB | SLJIT_SET_LESS, STR_END, 0, STR_END, 0, SLJIT_IMM, IN_UCHARS(max));\n  add_jump(compiler, &common->failed_match, JUMP(SLJIT_LESS));\n  }\n\nSLJIT_ASSERT(range_right >= 0);\n\nif (!HAS_VIRTUAL_REGISTERS)\n  OP1(SLJIT_MOV, RETURN_ADDR, 0, SLJIT_IMM, (sljit_sw)update_table);\n\nstart = LABEL();\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER, STR_PTR, 0, STR_END, 0));\n\n#if PCRE2_CODE_UNIT_WIDTH == 8 || (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN)\nOP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(range_right));\n#else\nOP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(range_right + 1) - 1);\n#endif\n\nif (!HAS_VIRTUAL_REGISTERS)\n  OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM2(RETURN_ADDR, TMP1), 0);\nelse\n  OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)update_table);\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\nCMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 0, start);\n\nif (offset >= 0)\n  {\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(offset));\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\n  if (chars[offset].count == 1)\n    CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, chars[offset].chars[0], start);\n  else\n    {\n    mask = chars[offset].chars[0] ^ chars[offset].chars[1];\n    if (is_powerof2(mask))\n      {\n      OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, mask);\n      CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, chars[offset].chars[0] | mask, start);\n      }\n    else\n      {\n      match = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, chars[offset].chars[0]);\n      CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, chars[offset].chars[1], start);\n      JUMPHERE(match);\n      }\n    }\n  }\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nif (common->utf && offset != 0)\n  {\n  if (offset < 0)\n    {\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    }\n  else\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-1));\n\n  jumpto_if_not_utf_char_start(compiler, TMP1, start);\n\n  if (offset < 0)\n    OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  }\n#endif\n\nif (offset >= 0)\n  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\nif (common->match_end_ptr != 0)\n  OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);\nelse\n  OP2(SLJIT_ADD, STR_END, 0, STR_END, 0, SLJIT_IMM, IN_UCHARS(max));\nreturn TRUE;\n}\n\nstatic SLJIT_INLINE void fast_forward_first_char(compiler_common *common)\n{\nPCRE2_UCHAR first_char = (PCRE2_UCHAR)(common->re->first_codeunit);\nPCRE2_UCHAR oc;\n\noc = first_char;\nif ((common->re->flags & PCRE2_FIRSTCASELESS) != 0)\n  {\n  oc = TABLE_GET(first_char, common->fcc, first_char);\n#if defined SUPPORT_UNICODE\n  if (first_char > 127 && (common->utf || common->ucp))\n    oc = UCD_OTHERCASE(first_char);\n#endif\n  }\n\nfast_forward_first_char2(common, first_char, oc, 0);\n}\n\nstatic SLJIT_INLINE void fast_forward_newline(compiler_common *common)\n{\nDEFINE_COMPILER;\nstruct sljit_label *loop;\nstruct sljit_jump *lastchar = NULL;\nstruct sljit_jump *firstchar;\nstruct sljit_jump *quit = NULL;\nstruct sljit_jump *foundcr = NULL;\nstruct sljit_jump *notfoundnl;\njump_list *newline = NULL;\n\nif (common->match_end_ptr != 0)\n  {\n  OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);\n  OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);\n  }\n\nif (common->nltype == NLTYPE_FIXED && common->newline > 255)\n  {\n#ifdef JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD\n  if (JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD && common->mode == PCRE2_JIT_COMPLETE)\n    {\n    if (HAS_VIRTUAL_REGISTERS)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n      OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, str));\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, begin));\n      }\n    else\n      {\n      OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, str));\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin));\n      }\n    firstchar = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0);\n\n    OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, STR_PTR, 0, TMP1, 0);\n    OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_NOT_EQUAL);\n#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n    OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT);\n#endif\n    OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n\n    fast_forward_char_pair_simd(common, 1, common->newline & 0xff, common->newline & 0xff, 0, (common->newline >> 8) & 0xff, (common->newline >> 8) & 0xff);\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\n    }\n  else\n#endif /* JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD */\n    {\n    lastchar = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n    if (HAS_VIRTUAL_REGISTERS)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n      OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, str));\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, begin));\n      }\n    else\n      {\n      OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, str));\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin));\n      }\n    firstchar = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0);\n\n    OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(2));\n    OP2U(SLJIT_SUB | SLJIT_SET_GREATER_EQUAL, STR_PTR, 0, TMP1, 0);\n    OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_GREATER_EQUAL);\n#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n    OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, UCHAR_SHIFT);\n#endif\n    OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\n    loop = LABEL();\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    quit = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-2));\n    OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-1));\n    CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff, loop);\n    CMPTO(SLJIT_NOT_EQUAL, TMP2, 0, SLJIT_IMM, common->newline & 0xff, loop);\n\n    JUMPHERE(quit);\n    JUMPHERE(lastchar);\n    }\n\n  JUMPHERE(firstchar);\n\n  if (common->match_end_ptr != 0)\n    OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);\n  return;\n  }\n\nif (HAS_VIRTUAL_REGISTERS)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, str));\n  }\nelse\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, str));\n\n/* Example: match /^/ to \\r\\n from offset 1. */\nfirstchar = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0);\n\nif (common->nltype == NLTYPE_ANY)\n  move_back(common, NULL, FALSE);\nelse\n  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\nloop = LABEL();\ncommon->ff_newline_shortcut = loop;\n\n#ifdef JIT_HAS_FAST_FORWARD_CHAR_SIMD\nif (JIT_HAS_FAST_FORWARD_CHAR_SIMD && (common->nltype == NLTYPE_FIXED || common->nltype == NLTYPE_ANYCRLF))\n  {\n  if (common->nltype == NLTYPE_ANYCRLF)\n    {\n    fast_forward_char_simd(common, CHAR_CR, CHAR_LF, 0);\n    if (common->mode != PCRE2_JIT_COMPLETE)\n      lastchar = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    quit = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_CR);\n    }\n  else\n    {\n    fast_forward_char_simd(common, common->newline, common->newline, 0);\n\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    if (common->mode != PCRE2_JIT_COMPLETE)\n      {\n      OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0);\n      SELECT(SLJIT_GREATER, STR_PTR, STR_END, 0, STR_PTR);\n      }\n    }\n  }\nelse\n#endif /* JIT_HAS_FAST_FORWARD_CHAR_SIMD */\n  {\n  read_char(common, common->nlmin, common->nlmax, NULL, READ_CHAR_NEWLINE);\n  lastchar = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n  if (common->nltype == NLTYPE_ANY || common->nltype == NLTYPE_ANYCRLF)\n    foundcr = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_CR);\n  check_newlinechar(common, common->nltype, &newline, FALSE);\n  set_jumps(newline, loop);\n  }\n\nif (common->nltype == NLTYPE_ANY || common->nltype == NLTYPE_ANYCRLF)\n  {\n  if (quit == NULL)\n    {\n    quit = JUMP(SLJIT_JUMP);\n    JUMPHERE(foundcr);\n    }\n\n  notfoundnl = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_NL);\n  OP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL);\n#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n  OP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT);\n#endif\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n  JUMPHERE(notfoundnl);\n  JUMPHERE(quit);\n  }\n\nif (lastchar)\n  JUMPHERE(lastchar);\nJUMPHERE(firstchar);\n\nif (common->match_end_ptr != 0)\n  OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);\n}\n\nstatic BOOL optimize_class(compiler_common *common, const sljit_u8 *bits, BOOL nclass, BOOL invert, jump_list **backtracks);\n\nstatic SLJIT_INLINE void fast_forward_start_bits(compiler_common *common)\n{\nDEFINE_COMPILER;\nconst sljit_u8 *start_bits = common->re->start_bitmap;\nstruct sljit_label *start;\nstruct sljit_jump *partial_quit;\n#if PCRE2_CODE_UNIT_WIDTH != 8\nstruct sljit_jump *found = NULL;\n#endif\njump_list *matches = NULL;\n\nif (common->match_end_ptr != 0)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);\n  OP1(SLJIT_MOV, RETURN_ADDR, 0, STR_END, 0);\n  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));\n  OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_END, 0, TMP1, 0);\n  SELECT(SLJIT_GREATER, STR_END, TMP1, 0, STR_END);\n  }\n\nstart = LABEL();\n\npartial_quit = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\nif (common->mode == PCRE2_JIT_COMPLETE)\n  add_jump(compiler, &common->failed_match, partial_quit);\n\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\nif (!optimize_class(common, start_bits, (start_bits[31] & 0x80) != 0, FALSE, &matches))\n  {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n  if ((start_bits[31] & 0x80) != 0)\n    found = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 255);\n  else\n    CMPTO(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 255, start);\n#elif defined SUPPORT_UNICODE\n  if (common->utf && is_char7_bitset(start_bits, FALSE))\n    CMPTO(SLJIT_GREATER, TMP1, 0, SLJIT_IMM, 127, start);\n#endif\n  OP2(SLJIT_AND, TMP2, 0, TMP1, 0, SLJIT_IMM, 0x7);\n  OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 3);\n  OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), (sljit_sw)start_bits);\n  if (!HAS_VIRTUAL_REGISTERS)\n    {\n    OP2(SLJIT_SHL, TMP3, 0, SLJIT_IMM, 1, TMP2, 0);\n    OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP3, 0);\n    }\n  else\n    {\n    OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP2, 0);\n    OP2U(SLJIT_AND | SLJIT_SET_Z, TMP1, 0, TMP2, 0);\n    }\n  JUMPTO(SLJIT_ZERO, start);\n  }\nelse\n  set_jumps(matches, start);\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\nif (found != NULL)\n  JUMPHERE(found);\n#endif\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\nif (common->mode != PCRE2_JIT_COMPLETE)\n  JUMPHERE(partial_quit);\n\nif (common->match_end_ptr != 0)\n  OP1(SLJIT_MOV, STR_END, 0, RETURN_ADDR, 0);\n}\n\nstatic SLJIT_INLINE jump_list *search_requested_char(compiler_common *common, PCRE2_UCHAR req_char, BOOL caseless, BOOL has_firstchar)\n{\nDEFINE_COMPILER;\nstruct sljit_label *loop;\nstruct sljit_jump *toolong;\nstruct sljit_jump *already_found;\nstruct sljit_jump *found;\nstruct sljit_jump *found_oc = NULL;\njump_list *not_found = NULL;\nsljit_u32 oc, bit;\n\nSLJIT_ASSERT(common->req_char_ptr != 0);\nOP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(REQ_CU_MAX) * 100);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->req_char_ptr);\ntoolong = CMP(SLJIT_LESS, TMP2, 0, STR_END, 0);\nalready_found = CMP(SLJIT_LESS, STR_PTR, 0, TMP1, 0);\n\nif (has_firstchar)\n  OP2(SLJIT_ADD, TMP1, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\nelse\n  OP1(SLJIT_MOV, TMP1, 0, STR_PTR, 0);\n\noc = req_char;\nif (caseless)\n  {\n  oc = TABLE_GET(req_char, common->fcc, req_char);\n#if defined SUPPORT_UNICODE\n  if (req_char > 127 && (common->utf || common->ucp))\n    oc = UCD_OTHERCASE(req_char);\n#endif\n  }\n\n#ifdef JIT_HAS_FAST_REQUESTED_CHAR_SIMD\nif (JIT_HAS_FAST_REQUESTED_CHAR_SIMD)\n  {\n  not_found = fast_requested_char_simd(common, req_char, oc);\n  }\nelse\n#endif\n  {\n  loop = LABEL();\n  add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));\n\n  OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(TMP1), 0);\n\n  if (req_char == oc)\n    found = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, req_char);\n  else\n    {\n    bit = req_char ^ oc;\n    if (is_powerof2(bit))\n      {\n       OP2(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_IMM, bit);\n      found = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, req_char | bit);\n      }\n    else\n      {\n      found = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, req_char);\n      found_oc = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, oc);\n      }\n    }\n  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));\n  JUMPTO(SLJIT_JUMP, loop);\n\n  JUMPHERE(found);\n  if (found_oc)\n    JUMPHERE(found_oc);\n  }\n\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->req_char_ptr, TMP1, 0);\n\nJUMPHERE(already_found);\nJUMPHERE(toolong);\nreturn not_found;\n}\n\nstatic void do_revertframes(compiler_common *common)\n{\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\nstruct sljit_label *mainloop;\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\nGET_LOCAL_BASE(TMP1, 0, 0);\n\n/* Drop frames until we reach STACK_TOP. */\nmainloop = LABEL();\nOP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), -SSIZE_OF(sw));\nOP2U(SLJIT_SUB | SLJIT_SET_SIG_LESS_EQUAL | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, 0);\njump = JUMP(SLJIT_SIG_LESS_EQUAL);\n\nOP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0);\nif (HAS_VIRTUAL_REGISTERS)\n  {\n  OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), 0, SLJIT_MEM1(STACK_TOP), -(2 * SSIZE_OF(sw)));\n  OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), sizeof(sljit_sw), SLJIT_MEM1(STACK_TOP), -(3 * SSIZE_OF(sw)));\n  OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 3 * SSIZE_OF(sw));\n  }\nelse\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), -(2 * SSIZE_OF(sw)));\n  OP1(SLJIT_MOV, TMP3, 0, SLJIT_MEM1(STACK_TOP), -(3 * SSIZE_OF(sw)));\n  OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 3 * SSIZE_OF(sw));\n  OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), 0, TMP1, 0);\n  GET_LOCAL_BASE(TMP1, 0, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), sizeof(sljit_sw), TMP3, 0);\n  }\nJUMPTO(SLJIT_JUMP, mainloop);\n\nJUMPHERE(jump);\nsljit_set_current_flags(compiler, SLJIT_CURRENT_FLAGS_SUB | SLJIT_CURRENT_FLAGS_COMPARE | SLJIT_SET_SIG_LESS_EQUAL | SLJIT_SET_Z);\njump = JUMP(SLJIT_NOT_ZERO /* SIG_LESS */);\n/* End of reverting values. */\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n\nJUMPHERE(jump);\nOP2(SLJIT_SUB, TMP2, 0, TMP1, 0, TMP2, 0);\nif (HAS_VIRTUAL_REGISTERS)\n  {\n  OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), 0, SLJIT_MEM1(STACK_TOP), -(2 * SSIZE_OF(sw)));\n  OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 2 * SSIZE_OF(sw));\n  }\nelse\n  {\n  OP1(SLJIT_MOV, TMP3, 0, SLJIT_MEM1(STACK_TOP), -(2 * SSIZE_OF(sw)));\n  OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, 2 * SSIZE_OF(sw));\n  OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), 0, TMP3, 0);\n  }\nJUMPTO(SLJIT_JUMP, mainloop);\n}\n\n#ifdef SUPPORT_UNICODE\n#define UCPCAT(bit) (1 << (bit))\n#define UCPCAT2(bit1, bit2) (UCPCAT(bit1) | UCPCAT(bit2))\n#define UCPCAT3(bit1, bit2, bit3) (UCPCAT(bit1) | UCPCAT(bit2) | UCPCAT(bit3))\n#define UCPCAT_RANGE(start, end) (((1 << ((end) + 1)) - 1) - ((1 << (start)) - 1))\n#define UCPCAT_L UCPCAT_RANGE(ucp_Ll, ucp_Lu)\n#define UCPCAT_N UCPCAT_RANGE(ucp_Nd, ucp_No)\n#define UCPCAT_ALL ((1 << (ucp_Zs + 1)) - 1)\n#endif\n\nstatic void check_wordboundary(compiler_common *common, BOOL ucp)\n{\nDEFINE_COMPILER;\nstruct sljit_jump *skipread;\njump_list *skipread_list = NULL;\n#ifdef SUPPORT_UNICODE\nstruct sljit_label *valid_utf;\njump_list *invalid_utf1 = NULL;\n#endif /* SUPPORT_UNICODE */\njump_list *invalid_utf2 = NULL;\n#if PCRE2_CODE_UNIT_WIDTH != 8 || defined SUPPORT_UNICODE\nstruct sljit_jump *jump;\n#endif /* PCRE2_CODE_UNIT_WIDTH != 8 || SUPPORT_UNICODE */\n\nSLJIT_UNUSED_ARG(ucp);\nSLJIT_COMPILE_ASSERT(ctype_word == 0x10, ctype_word_must_be_16);\n\nSLJIT_ASSERT(common->locals_size >= 2 * SSIZE_OF(sw));\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, SLJIT_MEM1(SLJIT_SP), LOCAL0);\n/* Get type of the previous char, and put it to TMP3. */\nOP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\nOP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, begin));\nOP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, 0);\nskipread = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0);\n\n#ifdef SUPPORT_UNICODE\nif (common->invalid_utf)\n  {\n  peek_char_back(common, READ_CHAR_MAX, &invalid_utf1);\n\n  if (common->mode != PCRE2_JIT_COMPLETE)\n    {\n    OP1(SLJIT_MOV, RETURN_ADDR, 0, TMP1, 0);\n    OP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);\n    move_back(common, NULL, TRUE);\n    check_start_used_ptr(common);\n    OP1(SLJIT_MOV, TMP1, 0, RETURN_ADDR, 0);\n    OP1(SLJIT_MOV, STR_PTR, 0, TMP2, 0);\n    }\n  }\nelse\n#endif /* SUPPORT_UNICODE */\n  {\n  if (common->mode == PCRE2_JIT_COMPLETE)\n    peek_char_back(common, READ_CHAR_MAX, NULL);\n  else\n    {\n    move_back(common, NULL, TRUE);\n    check_start_used_ptr(common);\n    read_char(common, 0, READ_CHAR_MAX, NULL, READ_CHAR_UPDATE_STR_PTR);\n    }\n  }\n\n/* Testing char type. */\n#ifdef SUPPORT_UNICODE\nif (ucp)\n  {\n  add_jump(compiler, &common->getucdtype, JUMP(SLJIT_FAST_CALL));\n  OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP1, 0);\n  OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, UCPCAT2(ucp_Mn, ucp_Pc) | UCPCAT_L | UCPCAT_N);\n  OP_FLAGS(SLJIT_MOV, TMP3, 0, SLJIT_NOT_ZERO);\n  }\nelse\n#endif /* SUPPORT_UNICODE */\n  {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n  jump = CMP(SLJIT_GREATER, TMP1, 0, SLJIT_IMM, 255);\n#elif defined SUPPORT_UNICODE\n  /* Here TMP3 has already been zeroed. */\n  jump = NULL;\n  if (common->utf)\n    jump = CMP(SLJIT_GREATER, TMP1, 0, SLJIT_IMM, 255);\n#endif /* PCRE2_CODE_UNIT_WIDTH == 8 */\n  OP1(SLJIT_MOV_U8, TMP1, 0, SLJIT_MEM1(TMP1), common->ctypes);\n  OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 4 /* ctype_word */);\n  OP2(SLJIT_AND, TMP3, 0, TMP1, 0, SLJIT_IMM, 1);\n#if PCRE2_CODE_UNIT_WIDTH != 8\n  JUMPHERE(jump);\n#elif defined SUPPORT_UNICODE\n  if (jump != NULL)\n    JUMPHERE(jump);\n#endif /* PCRE2_CODE_UNIT_WIDTH == 8 */\n  }\nJUMPHERE(skipread);\n\nOP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, 0);\ncheck_str_end(common, &skipread_list);\npeek_char(common, READ_CHAR_MAX, SLJIT_MEM1(SLJIT_SP), LOCAL1, &invalid_utf2);\n\n/* Testing char type. This is a code duplication. */\n#ifdef SUPPORT_UNICODE\n\nvalid_utf = LABEL();\n\nif (ucp)\n  {\n  add_jump(compiler, &common->getucdtype, JUMP(SLJIT_FAST_CALL));\n  OP2(SLJIT_SHL, TMP2, 0, SLJIT_IMM, 1, TMP1, 0);\n  OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, UCPCAT2(ucp_Mn, ucp_Pc) | UCPCAT_L | UCPCAT_N);\n  OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_NOT_ZERO);\n  }\nelse\n#endif /* SUPPORT_UNICODE */\n  {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n  /* TMP2 may be destroyed by peek_char. */\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, 0);\n  jump = CMP(SLJIT_GREATER, TMP1, 0, SLJIT_IMM, 255);\n#elif defined SUPPORT_UNICODE\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, 0);\n  jump = NULL;\n  if (common->utf)\n    jump = CMP(SLJIT_GREATER, TMP1, 0, SLJIT_IMM, 255);\n#endif\n  OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP1), common->ctypes);\n  OP2(SLJIT_LSHR, TMP2, 0, TMP2, 0, SLJIT_IMM, 4 /* ctype_word */);\n  OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 1);\n#if PCRE2_CODE_UNIT_WIDTH != 8\n  JUMPHERE(jump);\n#elif defined SUPPORT_UNICODE\n  if (jump != NULL)\n    JUMPHERE(jump);\n#endif /* PCRE2_CODE_UNIT_WIDTH == 8 */\n  }\nset_jumps(skipread_list, LABEL());\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\nOP2(SLJIT_XOR | SLJIT_SET_Z, TMP2, 0, TMP2, 0, TMP3, 0);\nOP_SRC(SLJIT_FAST_RETURN, TMP1, 0);\n\n#ifdef SUPPORT_UNICODE\nif (common->invalid_utf)\n  {\n  set_jumps(invalid_utf1, LABEL());\n\n  peek_char(common, READ_CHAR_MAX, SLJIT_MEM1(SLJIT_SP), LOCAL1, NULL);\n  CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR, valid_utf);\n\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, -1);\n  OP_SRC(SLJIT_FAST_RETURN, TMP1, 0);\n\n  set_jumps(invalid_utf2, LABEL());\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\n  OP1(SLJIT_MOV, TMP2, 0, TMP3, 0);\n  OP_SRC(SLJIT_FAST_RETURN, TMP1, 0);\n  }\n#endif /* SUPPORT_UNICODE */\n}\n\nstatic BOOL optimize_class_ranges(compiler_common *common, const sljit_u8 *bits, BOOL nclass, BOOL invert, jump_list **backtracks)\n{\n/* May destroy TMP1. */\nDEFINE_COMPILER;\nint ranges[MAX_CLASS_RANGE_SIZE];\nsljit_u8 bit, cbit, all;\nint i, byte, length = 0;\n\nbit = bits[0] & 0x1;\n/* All bits will be zero or one (since bit is zero or one). */\nall = (sljit_u8)-bit;\n\nfor (i = 0; i < 256; )\n  {\n  byte = i >> 3;\n  if ((i & 0x7) == 0 && bits[byte] == all)\n    i += 8;\n  else\n    {\n    cbit = (bits[byte] >> (i & 0x7)) & 0x1;\n    if (cbit != bit)\n      {\n      if (length >= MAX_CLASS_RANGE_SIZE)\n        return FALSE;\n      ranges[length] = i;\n      length++;\n      bit = cbit;\n      all = (sljit_u8)-cbit; /* sign extend bit into byte */\n      }\n    i++;\n    }\n  }\n\nif (((bit == 0) && nclass) || ((bit == 1) && !nclass))\n  {\n  if (length >= MAX_CLASS_RANGE_SIZE)\n    return FALSE;\n  ranges[length] = 256;\n  length++;\n  }\n\nif (length < 0 || length > 4)\n  return FALSE;\n\nbit = bits[0] & 0x1;\nif (invert) bit ^= 0x1;\n\n/* No character is accepted. */\nif (length == 0 && bit == 0)\n  add_jump(compiler, backtracks, JUMP(SLJIT_JUMP));\n\nswitch(length)\n  {\n  case 0:\n  /* When bit != 0, all characters are accepted. */\n  return TRUE;\n\n  case 1:\n  add_jump(compiler, backtracks, CMP(bit == 0 ? SLJIT_LESS : SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, ranges[0]));\n  return TRUE;\n\n  case 2:\n  if (ranges[0] + 1 != ranges[1])\n    {\n    OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ranges[0]);\n    add_jump(compiler, backtracks, CMP(bit != 0 ? SLJIT_LESS : SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, ranges[1] - ranges[0]));\n    }\n  else\n    add_jump(compiler, backtracks, CMP(bit != 0 ? SLJIT_EQUAL : SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, ranges[0]));\n  return TRUE;\n\n  case 3:\n  if (bit != 0)\n    {\n    add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, ranges[2]));\n    if (ranges[0] + 1 != ranges[1])\n      {\n      OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ranges[0]);\n      add_jump(compiler, backtracks, CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, ranges[1] - ranges[0]));\n      }\n    else\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, ranges[0]));\n    return TRUE;\n    }\n\n  add_jump(compiler, backtracks, CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, ranges[0]));\n  if (ranges[1] + 1 != ranges[2])\n    {\n    OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ranges[1]);\n    add_jump(compiler, backtracks, CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, ranges[2] - ranges[1]));\n    }\n  else\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, ranges[1]));\n  return TRUE;\n\n  case 4:\n  if ((ranges[1] - ranges[0]) == (ranges[3] - ranges[2])\n      && (ranges[0] | (ranges[2] - ranges[0])) == ranges[2]\n      && (ranges[1] & (ranges[2] - ranges[0])) == 0\n      && is_powerof2(ranges[2] - ranges[0]))\n    {\n    SLJIT_ASSERT((ranges[0] & (ranges[2] - ranges[0])) == 0 && (ranges[2] & ranges[3] & (ranges[2] - ranges[0])) != 0);\n    OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, ranges[2] - ranges[0]);\n    if (ranges[2] + 1 != ranges[3])\n      {\n      OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ranges[2]);\n      add_jump(compiler, backtracks, CMP(bit != 0 ? SLJIT_LESS : SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, ranges[3] - ranges[2]));\n      }\n    else\n      add_jump(compiler, backtracks, CMP(bit != 0 ? SLJIT_EQUAL : SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, ranges[2]));\n    return TRUE;\n    }\n\n  if (bit != 0)\n    {\n    i = 0;\n    if (ranges[0] + 1 != ranges[1])\n      {\n      OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ranges[0]);\n      add_jump(compiler, backtracks, CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, ranges[1] - ranges[0]));\n      i = ranges[0];\n      }\n    else\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, ranges[0]));\n\n    if (ranges[2] + 1 != ranges[3])\n      {\n      OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ranges[2] - i);\n      add_jump(compiler, backtracks, CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, ranges[3] - ranges[2]));\n      }\n    else\n      add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, ranges[2] - i));\n    return TRUE;\n    }\n\n  OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ranges[0]);\n  add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, ranges[3] - ranges[0]));\n  if (ranges[1] + 1 != ranges[2])\n    {\n    OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, ranges[1] - ranges[0]);\n    add_jump(compiler, backtracks, CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, ranges[2] - ranges[1]));\n    }\n  else\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, ranges[1] - ranges[0]));\n  return TRUE;\n\n  default:\n  SLJIT_UNREACHABLE();\n  return FALSE;\n  }\n}\n\nstatic BOOL optimize_class_chars(compiler_common *common, const sljit_u8 *bits, BOOL nclass, BOOL invert, jump_list **backtracks)\n{\n/* May destroy TMP1. */\nDEFINE_COMPILER;\nuint16_t char_list[MAX_CLASS_CHARS_SIZE];\nuint8_t byte;\nsljit_s32 type;\nint i, j, k, len, c;\n\nif (!sljit_has_cpu_feature(SLJIT_HAS_CMOV))\n  return FALSE;\n\nlen = 0;\n\nfor (i = 0; i < 32; i++)\n  {\n  byte = bits[i];\n\n  if (nclass)\n    byte = (sljit_u8)~byte;\n\n  j = 0;\n  while (byte != 0)\n    {\n    if (byte & 0x1)\n      {\n      c = i * 8 + j;\n\n      k = len;\n\n      if ((c & 0x20) != 0)\n        {\n        for (k = 0; k < len; k++)\n          if (char_list[k] == c - 0x20)\n            {\n            char_list[k] |= 0x120;\n            break;\n            }\n        }\n\n      if (k == len)\n        {\n        if (len >= MAX_CLASS_CHARS_SIZE)\n          return FALSE;\n\n        char_list[len++] = (uint16_t) c;\n        }\n      }\n\n    byte >>= 1;\n    j++;\n    }\n  }\n\nif (len == 0) return FALSE;  /* Should never occur, but stops analyzers complaining. */\n\ni = 0;\nj = 0;\n\nif (char_list[0] == 0)\n  {\n  i++;\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0);\n  OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_ZERO);\n  }\nelse\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, 0);\n\nwhile (i < len)\n  {\n  if ((char_list[i] & 0x100) != 0)\n    j++;\n  else\n    {\n    OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, char_list[i]);\n    SELECT(SLJIT_ZERO, TMP2, TMP1, 0, TMP2);\n    }\n  i++;\n  }\n\nif (j != 0)\n  {\n  OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x20);\n\n  for (i = 0; i < len; i++)\n    if ((char_list[i] & 0x100) != 0)\n      {\n      j--;\n      OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, char_list[i] & 0xff);\n      SELECT(SLJIT_ZERO, TMP2, TMP1, 0, TMP2);\n      }\n  }\n\nif (invert)\n  nclass = !nclass;\n\ntype = nclass ? SLJIT_NOT_EQUAL : SLJIT_EQUAL;\nadd_jump(compiler, backtracks, CMP(type, TMP2, 0, SLJIT_IMM, 0));\nreturn TRUE;\n}\n\nstatic BOOL optimize_class(compiler_common *common, const sljit_u8 *bits, BOOL nclass, BOOL invert, jump_list **backtracks)\n{\n/* May destroy TMP1. */\nif (optimize_class_ranges(common, bits, nclass, invert, backtracks))\n  return TRUE;\nreturn optimize_class_chars(common, bits, nclass, invert, backtracks);\n}\n\nstatic void check_anynewline(compiler_common *common)\n{\n/* Check whether TMP1 contains a newline character. TMP2 destroyed. */\nDEFINE_COMPILER;\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\n#ifdef EBCDIC\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_LF);\nOP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_VT);\nOP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_FF);\nOP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_CR);\nOP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_NEL);\n#else\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, CHAR_LF);\nOP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_CR - CHAR_LF);\nOP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_NEL - CHAR_LF);\n#endif\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n#if PCRE2_CODE_UNIT_WIDTH == 8\nif (common->utf)\n  {\n#endif\n  OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n  OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x1);\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x2029 - CHAR_LF);\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  }\n#endif\n#endif /* SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == [16|32] */\nOP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL);\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void check_hspace(compiler_common *common)\n{\n/* Check whether TMP1 contains a newline character. TMP2 destroyed. */\nDEFINE_COMPILER;\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_HT);\nOP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_SPACE);\nOP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_NBSP);\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n#if PCRE2_CODE_UNIT_WIDTH == 8\nif (common->utf)\n  {\n#endif\n  OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x1680);\n  OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x180e);\n  OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n  OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x2000);\n  OP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, 0x200a - 0x2000);\n  OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_LESS_EQUAL);\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x202f - 0x2000);\n  OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x205f - 0x2000);\n  OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x3000 - 0x2000);\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  }\n#endif\n#endif /* SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == [16|32] */\nOP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL);\n\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void check_vspace(compiler_common *common)\n{\n/* Check whether TMP1 contains a newline character. TMP2 destroyed. */\nDEFINE_COMPILER;\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0);\n\n#ifdef EBCDIC\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_LF);\nOP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_EQUAL);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_VT);\nOP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_FF);\nOP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_CR);\nOP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_NEL);\n#else\nOP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, CHAR_LF);\nOP2U(SLJIT_SUB | SLJIT_SET_LESS_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_CR - CHAR_LF);\nOP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS_EQUAL);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_NEL - CHAR_LF);\n#endif\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n#if PCRE2_CODE_UNIT_WIDTH == 8\nif (common->utf)\n  {\n#endif\n  OP_FLAGS(SLJIT_OR, TMP2, 0, SLJIT_EQUAL);\n  OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x1);\n  OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, 0x2029 - CHAR_LF);\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  }\n#endif\n#endif /* SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == [16|32] */\nOP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_EQUAL);\n\nOP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0);\n}\n\nstatic void do_casefulcmp(compiler_common *common)\n{\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\nstruct sljit_label *label;\nint char1_reg;\nint char2_reg;\n\nif (HAS_VIRTUAL_REGISTERS)\n  {\n  char1_reg = STR_END;\n  char2_reg = STACK_TOP;\n  }\nelse\n  {\n  char1_reg = TMP3;\n  char2_reg = RETURN_ADDR;\n  }\n\n/* Update ref_update_local_size() when this changes. */\nSLJIT_ASSERT(common->locals_size >= SSIZE_OF(sw));\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, SLJIT_MEM1(SLJIT_SP), LOCAL0);\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\nif (char1_reg == STR_END)\n  {\n  OP1(SLJIT_MOV, TMP3, 0, char1_reg, 0);\n  OP1(SLJIT_MOV, RETURN_ADDR, 0, char2_reg, 0);\n  }\n\nif (sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_SUPP | SLJIT_MEM_POST, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1)) == SLJIT_SUCCESS)\n  {\n  label = LABEL();\n  sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_POST, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1));\n  sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_POST, char2_reg, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\n  jump = CMP(SLJIT_NOT_EQUAL, char1_reg, 0, char2_reg, 0);\n  OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1));\n  JUMPTO(SLJIT_NOT_ZERO, label);\n\n  JUMPHERE(jump);\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\n  }\nelse if (sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_SUPP | SLJIT_MEM_PRE, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1)) == SLJIT_SUCCESS)\n  {\n  OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));\n  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\n  label = LABEL();\n  sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_PRE, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1));\n  sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_PRE, char2_reg, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\n  jump = CMP(SLJIT_NOT_EQUAL, char1_reg, 0, char2_reg, 0);\n  OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1));\n  JUMPTO(SLJIT_NOT_ZERO, label);\n\n  JUMPHERE(jump);\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  }\nelse\n  {\n  label = LABEL();\n  OP1(MOV_UCHAR, char1_reg, 0, SLJIT_MEM1(TMP1), 0);\n  OP1(MOV_UCHAR, char2_reg, 0, SLJIT_MEM1(STR_PTR), 0);\n  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  jump = CMP(SLJIT_NOT_EQUAL, char1_reg, 0, char2_reg, 0);\n  OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1));\n  JUMPTO(SLJIT_NOT_ZERO, label);\n\n  JUMPHERE(jump);\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\n  }\n\nif (char1_reg == STR_END)\n  {\n  OP1(SLJIT_MOV, char1_reg, 0, TMP3, 0);\n  OP1(SLJIT_MOV, char2_reg, 0, RETURN_ADDR, 0);\n  }\n\nOP_SRC(SLJIT_FAST_RETURN, TMP1, 0);\n}\n\nstatic void do_caselesscmp(compiler_common *common)\n{\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\nstruct sljit_label *label;\nint char1_reg = STR_END;\nint char2_reg;\nint lcc_table;\nint opt_type = 0;\n\nif (HAS_VIRTUAL_REGISTERS)\n  {\n  char2_reg = STACK_TOP;\n  lcc_table = STACK_LIMIT;\n  }\nelse\n  {\n  char2_reg = RETURN_ADDR;\n  lcc_table = TMP3;\n  }\n\nif (sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_SUPP | SLJIT_MEM_POST, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1)) == SLJIT_SUCCESS)\n  opt_type = 1;\nelse if (sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_SUPP | SLJIT_MEM_PRE, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1)) == SLJIT_SUCCESS)\n  opt_type = 2;\n\n/* Update ref_update_local_size() when this changes. */\nSLJIT_ASSERT(common->locals_size >= 2 * SSIZE_OF(sw));\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, SLJIT_MEM1(SLJIT_SP), LOCAL0);\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL1, char1_reg, 0);\n\nif (char2_reg == STACK_TOP)\n  {\n  OP1(SLJIT_MOV, TMP3, 0, char2_reg, 0);\n  OP1(SLJIT_MOV, RETURN_ADDR, 0, lcc_table, 0);\n  }\n\nOP1(SLJIT_MOV, lcc_table, 0, SLJIT_IMM, common->lcc);\n\nif (opt_type == 1)\n  {\n  label = LABEL();\n  sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_POST, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1));\n  sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_POST, char2_reg, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\n  }\nelse if (opt_type == 2)\n  {\n  OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));\n  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\n  label = LABEL();\n  sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_PRE, char1_reg, SLJIT_MEM1(TMP1), IN_UCHARS(1));\n  sljit_emit_mem_update(compiler, MOV_UCHAR | SLJIT_MEM_PRE, char2_reg, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\n  }\nelse\n  {\n  label = LABEL();\n  OP1(MOV_UCHAR, char1_reg, 0, SLJIT_MEM1(TMP1), 0);\n  OP1(MOV_UCHAR, char2_reg, 0, SLJIT_MEM1(STR_PTR), 0);\n  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));\n  }\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\njump = CMP(SLJIT_GREATER, char1_reg, 0, SLJIT_IMM, 255);\n#endif\nOP1(SLJIT_MOV_U8, char1_reg, 0, SLJIT_MEM2(lcc_table, char1_reg), 0);\n#if PCRE2_CODE_UNIT_WIDTH != 8\nJUMPHERE(jump);\njump = CMP(SLJIT_GREATER, char2_reg, 0, SLJIT_IMM, 255);\n#endif\nOP1(SLJIT_MOV_U8, char2_reg, 0, SLJIT_MEM2(lcc_table, char2_reg), 0);\n#if PCRE2_CODE_UNIT_WIDTH != 8\nJUMPHERE(jump);\n#endif\n\nif (opt_type == 0)\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\njump = CMP(SLJIT_NOT_EQUAL, char1_reg, 0, char2_reg, 0);\nOP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, TMP2, 0, SLJIT_IMM, IN_UCHARS(1));\nJUMPTO(SLJIT_NOT_ZERO, label);\n\nJUMPHERE(jump);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\n\nif (opt_type == 2)\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\nif (char2_reg == STACK_TOP)\n  {\n  OP1(SLJIT_MOV, char2_reg, 0, TMP3, 0);\n  OP1(SLJIT_MOV, lcc_table, 0, RETURN_ADDR, 0);\n  }\n\nOP1(SLJIT_MOV, char1_reg, 0, SLJIT_MEM1(SLJIT_SP), LOCAL1);\nOP_SRC(SLJIT_FAST_RETURN, TMP1, 0);\n}\n\n#include \"pcre2_jit_char_inc.h\"\n\nstatic PCRE2_SPTR compile_simple_assertion_matchingpath(compiler_common *common, PCRE2_UCHAR type, PCRE2_SPTR cc, jump_list **backtracks)\n{\nDEFINE_COMPILER;\nstruct sljit_jump *jump[4];\n\nswitch(type)\n  {\n  case OP_SOD:\n  if (HAS_VIRTUAL_REGISTERS)\n    {\n    OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, begin));\n    }\n  else\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin));\n  add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, STR_PTR, 0, TMP1, 0));\n  return cc;\n\n  case OP_SOM:\n  if (HAS_VIRTUAL_REGISTERS)\n    {\n    OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, str));\n    }\n  else\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, str));\n  add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, STR_PTR, 0, TMP1, 0));\n  return cc;\n\n  case OP_NOT_WORD_BOUNDARY:\n  case OP_WORD_BOUNDARY:\n  case OP_NOT_UCP_WORD_BOUNDARY:\n  case OP_UCP_WORD_BOUNDARY:\n  add_jump(compiler, (type == OP_NOT_WORD_BOUNDARY || type == OP_WORD_BOUNDARY) ? &common->wordboundary : &common->ucp_wordboundary, JUMP(SLJIT_FAST_CALL));\n#ifdef SUPPORT_UNICODE\n  if (common->invalid_utf)\n    {\n    add_jump(compiler, backtracks, CMP((type == OP_NOT_WORD_BOUNDARY || type == OP_NOT_UCP_WORD_BOUNDARY) ? SLJIT_NOT_EQUAL : SLJIT_SIG_LESS_EQUAL, TMP2, 0, SLJIT_IMM, 0));\n    return cc;\n    }\n#endif /* SUPPORT_UNICODE */\n  sljit_set_current_flags(compiler, SLJIT_SET_Z);\n  add_jump(compiler, backtracks, JUMP((type == OP_NOT_WORD_BOUNDARY || type == OP_NOT_UCP_WORD_BOUNDARY) ? SLJIT_NOT_ZERO : SLJIT_ZERO));\n  return cc;\n\n  case OP_EODN:\n  /* Requires rather complex checks. */\n  jump[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n  if (common->nltype == NLTYPE_FIXED && common->newline > 255)\n    {\n    OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n    if (common->mode == PCRE2_JIT_COMPLETE)\n      add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP2, 0, STR_END, 0));\n    else\n      {\n      jump[1] = CMP(SLJIT_EQUAL, TMP2, 0, STR_END, 0);\n      OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, STR_END, 0);\n      OP_FLAGS(SLJIT_MOV, TMP2, 0, SLJIT_LESS);\n      OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff);\n      OP_FLAGS(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, SLJIT_NOT_EQUAL);\n      add_jump(compiler, backtracks, JUMP(SLJIT_NOT_EQUAL));\n      check_partial(common, TRUE);\n      add_jump(compiler, backtracks, JUMP(SLJIT_JUMP));\n      JUMPHERE(jump[1]);\n      }\n    OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff));\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP2, 0, SLJIT_IMM, common->newline & 0xff));\n    }\n  else if (common->nltype == NLTYPE_FIXED)\n    {\n    OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP2, 0, STR_END, 0));\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, common->newline));\n    }\n  else\n    {\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n    jump[1] = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_CR);\n    OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\n    OP2U(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_GREATER, TMP2, 0, STR_END, 0);\n    jump[2] = JUMP(SLJIT_GREATER);\n    add_jump(compiler, backtracks, JUMP(SLJIT_NOT_EQUAL) /* LESS */);\n    /* Equal. */\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\n    jump[3] = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_NL);\n    add_jump(compiler, backtracks, JUMP(SLJIT_JUMP));\n\n    JUMPHERE(jump[1]);\n    if (common->nltype == NLTYPE_ANYCRLF)\n      {\n      OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n      add_jump(compiler, backtracks, CMP(SLJIT_LESS, TMP2, 0, STR_END, 0));\n      add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, CHAR_NL));\n      }\n    else\n      {\n      OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);\n      read_char(common, common->nlmin, common->nlmax, backtracks, READ_CHAR_UPDATE_STR_PTR);\n      add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, STR_PTR, 0, STR_END, 0));\n      add_jump(compiler, &common->anynewline, JUMP(SLJIT_FAST_CALL));\n      sljit_set_current_flags(compiler, SLJIT_SET_Z);\n      add_jump(compiler, backtracks, JUMP(SLJIT_ZERO));\n      OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0);\n      }\n    JUMPHERE(jump[2]);\n    JUMPHERE(jump[3]);\n    }\n  JUMPHERE(jump[0]);\n  if (common->mode != PCRE2_JIT_COMPLETE)\n    check_partial(common, TRUE);\n  return cc;\n\n  case OP_EOD:\n  add_jump(compiler, backtracks, CMP(SLJIT_LESS, STR_PTR, 0, STR_END, 0));\n  if (common->mode != PCRE2_JIT_COMPLETE)\n    check_partial(common, TRUE);\n  return cc;\n\n  case OP_DOLL:\n  if (HAS_VIRTUAL_REGISTERS)\n    {\n    OP1(SLJIT_MOV, TMP2, 0, ARGUMENTS, 0);\n    OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL);\n    }\n  else\n    OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL);\n  add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));\n\n  if (!common->endonly)\n    compile_simple_assertion_matchingpath(common, OP_EODN, cc, backtracks);\n  else\n    {\n    add_jump(compiler, backtracks, CMP(SLJIT_LESS, STR_PTR, 0, STR_END, 0));\n    check_partial(common, FALSE);\n    }\n  return cc;\n\n  case OP_DOLLM:\n  jump[1] = CMP(SLJIT_LESS, STR_PTR, 0, STR_END, 0);\n  if (HAS_VIRTUAL_REGISTERS)\n    {\n    OP1(SLJIT_MOV, TMP2, 0, ARGUMENTS, 0);\n    OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL);\n    }\n  else\n    OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL);\n  add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));\n  check_partial(common, FALSE);\n  jump[0] = JUMP(SLJIT_JUMP);\n  JUMPHERE(jump[1]);\n\n  if (common->nltype == NLTYPE_FIXED && common->newline > 255)\n    {\n    OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n    if (common->mode == PCRE2_JIT_COMPLETE)\n      add_jump(compiler, backtracks, CMP(SLJIT_GREATER, TMP2, 0, STR_END, 0));\n    else\n      {\n      jump[1] = CMP(SLJIT_LESS_EQUAL, TMP2, 0, STR_END, 0);\n      /* STR_PTR = STR_END - IN_UCHARS(1) */\n      add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff));\n      check_partial(common, TRUE);\n      add_jump(compiler, backtracks, JUMP(SLJIT_JUMP));\n      JUMPHERE(jump[1]);\n      }\n\n    OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(1));\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff));\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP2, 0, SLJIT_IMM, common->newline & 0xff));\n    }\n  else\n    {\n    peek_char(common, common->nlmax, TMP3, 0, NULL);\n    check_newlinechar(common, common->nltype, backtracks, FALSE);\n    }\n  JUMPHERE(jump[0]);\n  return cc;\n\n  case OP_CIRC:\n  if (HAS_VIRTUAL_REGISTERS)\n    {\n    OP1(SLJIT_MOV, TMP2, 0, ARGUMENTS, 0);\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, begin));\n    add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0));\n    OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);\n    add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));\n    }\n  else\n    {\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin));\n    add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0));\n    OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);\n    add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));\n    }\n  return cc;\n\n  case OP_CIRCM:\n  /* TMP2 might be used by peek_char_back. */\n  if (HAS_VIRTUAL_REGISTERS)\n    {\n    OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, begin));\n    jump[1] = CMP(SLJIT_GREATER, STR_PTR, 0, TMP2, 0);\n    OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);\n    }\n  else\n    {\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin));\n    jump[1] = CMP(SLJIT_GREATER, STR_PTR, 0, TMP2, 0);\n    OP2U(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);\n    }\n  add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));\n  jump[0] = JUMP(SLJIT_JUMP);\n  JUMPHERE(jump[1]);\n\n  if (!common->alt_circumflex)\n    add_jump(compiler, backtracks, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n  if (common->nltype == NLTYPE_FIXED && common->newline > 255)\n    {\n    OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(2));\n    add_jump(compiler, backtracks, CMP(SLJIT_LESS, TMP1, 0, TMP2, 0));\n    OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-2));\n    OP1(MOV_UCHAR, TMP2, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-1));\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff));\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP2, 0, SLJIT_IMM, common->newline & 0xff));\n    }\n  else\n    {\n    peek_char_back(common, common->nlmax, backtracks);\n    check_newlinechar(common, common->nltype, backtracks, FALSE);\n    }\n  JUMPHERE(jump[0]);\n  return cc;\n  }\nSLJIT_UNREACHABLE();\nreturn cc;\n}\n\n/* Forward definitions. */\nstatic void compile_matchingpath(compiler_common *, PCRE2_SPTR, PCRE2_SPTR, backtrack_common *);\nstatic void compile_backtrackingpath(compiler_common *, struct backtrack_common *);\n\n#define PUSH_BACKTRACK(size, ccstart, error) \\\n  do \\\n    { \\\n    backtrack = sljit_alloc_memory(compiler, (size)); \\\n    if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) \\\n      return error; \\\n    memset(backtrack, 0, size); \\\n    backtrack->prev = parent->top; \\\n    backtrack->cc = (ccstart); \\\n    parent->top = backtrack; \\\n    } \\\n  while (0)\n\n#define PUSH_BACKTRACK_NOVALUE(size, ccstart) \\\n  do \\\n    { \\\n    backtrack = sljit_alloc_memory(compiler, (size)); \\\n    if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) \\\n      return; \\\n    memset(backtrack, 0, size); \\\n    backtrack->prev = parent->top; \\\n    backtrack->cc = (ccstart); \\\n    parent->top = backtrack; \\\n    } \\\n  while (0)\n\n#define BACKTRACK_AS(type) ((type *)backtrack)\n\nstatic void compile_dnref_search(compiler_common *common, PCRE2_SPTR cc, jump_list **backtracks)\n{\n/* The OVECTOR offset goes to TMP2. */\nDEFINE_COMPILER;\nint count = GET2(cc, 1 + IMM2_SIZE);\nPCRE2_SPTR slot = common->name_table + GET2(cc, 1) * common->name_entry_size;\nunsigned int offset;\njump_list *found = NULL;\n\nSLJIT_ASSERT(*cc == OP_DNREF || *cc == OP_DNREFI);\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1));\n\ncount--;\nwhile (count-- > 0)\n  {\n  offset = GET2(slot, 0) << 1;\n  GET_LOCAL_BASE(TMP2, 0, OVECTOR(offset));\n  add_jump(compiler, &found, CMP(SLJIT_NOT_EQUAL, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0));\n  slot += common->name_entry_size;\n  }\n\noffset = GET2(slot, 0) << 1;\nGET_LOCAL_BASE(TMP2, 0, OVECTOR(offset));\nif (backtracks != NULL && !common->unset_backref)\n  add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0));\n\nset_jumps(found, LABEL());\n}\n\nstatic void compile_ref_matchingpath(compiler_common *common, PCRE2_SPTR cc, jump_list **backtracks, BOOL withchecks, BOOL emptyfail)\n{\nDEFINE_COMPILER;\nBOOL ref = (*cc == OP_REF || *cc == OP_REFI);\nint offset = 0;\nstruct sljit_jump *jump = NULL;\nstruct sljit_jump *partial;\nstruct sljit_jump *nopartial;\n#if defined SUPPORT_UNICODE\nstruct sljit_label *loop;\nstruct sljit_label *caseless_loop;\nstruct sljit_jump *turkish_ascii_i = NULL;\nstruct sljit_jump *turkish_non_ascii_i = NULL;\njump_list *no_match = NULL;\nint source_reg = COUNT_MATCH;\nint source_end_reg = ARGUMENTS;\nint char1_reg = STACK_LIMIT;\nPCRE2_UCHAR refi_flag = 0;\n\nif (*cc == OP_REFI || *cc == OP_DNREFI)\n  refi_flag = cc[PRIV(OP_lengths)[*cc] - 1];\n#endif /* SUPPORT_UNICODE */\n\nif (ref)\n  {\n  offset = GET2(cc, 1) << 1;\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));\n  /* OVECTOR(1) contains the \"string begin - 1\" constant. */\n  if (withchecks && !common->unset_backref)\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));\n  }\nelse\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0);\n\n#if defined SUPPORT_UNICODE\nif ((common->utf || common->ucp) && (*cc == OP_REFI || *cc == OP_DNREFI))\n  {\n  /* Update ref_update_local_size() when this changes. */\n  SLJIT_ASSERT(common->locals_size >= 3 * SSIZE_OF(sw));\n\n  if (ref)\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));\n  else\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));\n\n  if (withchecks && emptyfail)\n    add_jump(compiler, backtracks, CMP(SLJIT_EQUAL, TMP1, 0, TMP2, 0));\n\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL0, source_reg, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL1, source_end_reg, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL2, char1_reg, 0);\n\n  OP1(SLJIT_MOV, source_reg, 0, TMP1, 0);\n  OP1(SLJIT_MOV, source_end_reg, 0, TMP2, 0);\n\n  loop = LABEL();\n  jump = CMP(SLJIT_GREATER_EQUAL, source_reg, 0, source_end_reg, 0);\n  partial = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\n\n  /* Read original character. It must be a valid UTF character. */\n  OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);\n  OP1(SLJIT_MOV, STR_PTR, 0, source_reg, 0);\n\n  read_char(common, 0, READ_CHAR_MAX, NULL, READ_CHAR_UPDATE_STR_PTR | READ_CHAR_VALID_UTF);\n\n  OP1(SLJIT_MOV, source_reg, 0, STR_PTR, 0);\n  OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0);\n  OP1(SLJIT_MOV, char1_reg, 0, TMP1, 0);\n\n  /* Read second character. */\n  read_char(common, 0, READ_CHAR_MAX, &no_match, READ_CHAR_UPDATE_STR_PTR);\n\n  CMPTO(SLJIT_EQUAL, TMP1, 0, char1_reg, 0, loop);\n\n  if ((refi_flag & (REFI_FLAG_TURKISH_CASING|REFI_FLAG_CASELESS_RESTRICT)) ==\n        REFI_FLAG_TURKISH_CASING)\n    {\n    OP2(SLJIT_OR, SLJIT_TMP_DEST_REG, 0, char1_reg, 0, SLJIT_IMM, 0x20);\n    turkish_ascii_i = CMP(SLJIT_EQUAL, SLJIT_TMP_DEST_REG, 0, SLJIT_IMM, 0x69);\n\n    OP2(SLJIT_OR, SLJIT_TMP_DEST_REG, 0, char1_reg, 0, SLJIT_IMM, 0x1);\n    turkish_non_ascii_i = CMP(SLJIT_EQUAL, SLJIT_TMP_DEST_REG, 0, SLJIT_IMM, 0x131);\n    }\n\n  OP1(SLJIT_MOV, TMP3, 0, TMP1, 0);\n\n  add_jump(compiler, &common->getucd, JUMP(SLJIT_FAST_CALL));\n\n  OP2(SLJIT_SHL, TMP1, 0, TMP2, 0, SLJIT_IMM, 2);\n  OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 3);\n  OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, TMP1, 0);\n\n  OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_records));\n\n  OP1(SLJIT_MOV_S32, TMP1, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(ucd_record, other_case));\n  OP1(SLJIT_MOV_U8, TMP2, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(ucd_record, caseset));\n  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0);\n  CMPTO(SLJIT_EQUAL, TMP1, 0, char1_reg, 0, loop);\n\n  add_jump(compiler, &no_match, CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, 0));\n  OP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2);\n  OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_caseless_sets));\n\n  if (refi_flag & REFI_FLAG_CASELESS_RESTRICT)\n    add_jump(compiler, &no_match, CMP(SLJIT_LESS | SLJIT_32, SLJIT_MEM1(TMP2), 0, SLJIT_IMM, 128));\n\n  caseless_loop = LABEL();\n  OP1(SLJIT_MOV_U32, TMP1, 0, SLJIT_MEM1(TMP2), 0);\n  OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, sizeof(uint32_t));\n  OP2U(SLJIT_SUB | SLJIT_SET_Z | SLJIT_SET_LESS, TMP1, 0, char1_reg, 0);\n  JUMPTO(SLJIT_EQUAL, loop);\n  JUMPTO(SLJIT_LESS, caseless_loop);\n\n  if ((refi_flag & (REFI_FLAG_TURKISH_CASING|REFI_FLAG_CASELESS_RESTRICT)) ==\n        REFI_FLAG_TURKISH_CASING)\n    {\n    add_jump(compiler, &no_match, JUMP(SLJIT_JUMP));\n    JUMPHERE(turkish_ascii_i);\n\n    OP2(SLJIT_LSHR, char1_reg, 0, char1_reg, 0, SLJIT_IMM, 5);\n    OP2(SLJIT_AND, char1_reg, 0, char1_reg, 0, SLJIT_IMM, 1);\n    OP2(SLJIT_XOR, char1_reg, 0, char1_reg, 0, SLJIT_IMM, 1);\n    OP2(SLJIT_ADD, char1_reg, 0, char1_reg, 0, SLJIT_IMM, 0x130);\n    CMPTO(SLJIT_EQUAL, TMP1, 0, char1_reg, 0, loop);\n\n    add_jump(compiler, &no_match, JUMP(SLJIT_JUMP));\n    JUMPHERE(turkish_non_ascii_i);\n\n    OP2(SLJIT_AND, char1_reg, 0, char1_reg, 0, SLJIT_IMM, 1);\n    OP2(SLJIT_XOR, char1_reg, 0, char1_reg, 0, SLJIT_IMM, 1);\n    OP2(SLJIT_SHL, char1_reg, 0, char1_reg, 0, SLJIT_IMM, 5);\n    OP2(SLJIT_ADD, char1_reg, 0, char1_reg, 0, SLJIT_IMM, 0x49);\n    CMPTO(SLJIT_EQUAL, TMP1, 0, char1_reg, 0, loop);\n    }\n\n  set_jumps(no_match, LABEL());\n  if (common->mode == PCRE2_JIT_COMPLETE)\n    JUMPHERE(partial);\n\n  OP1(SLJIT_MOV, source_reg, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\n  OP1(SLJIT_MOV, source_end_reg, 0, SLJIT_MEM1(SLJIT_SP), LOCAL1);\n  OP1(SLJIT_MOV, char1_reg, 0, SLJIT_MEM1(SLJIT_SP), LOCAL2);\n  add_jump(compiler, backtracks, JUMP(SLJIT_JUMP));\n\n  if (common->mode != PCRE2_JIT_COMPLETE)\n    {\n    JUMPHERE(partial);\n    OP1(SLJIT_MOV, source_reg, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\n    OP1(SLJIT_MOV, source_end_reg, 0, SLJIT_MEM1(SLJIT_SP), LOCAL1);\n    OP1(SLJIT_MOV, char1_reg, 0, SLJIT_MEM1(SLJIT_SP), LOCAL2);\n\n    check_partial(common, FALSE);\n    add_jump(compiler, backtracks, JUMP(SLJIT_JUMP));\n    }\n\n  JUMPHERE(jump);\n  OP1(SLJIT_MOV, source_reg, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\n  OP1(SLJIT_MOV, source_end_reg, 0, SLJIT_MEM1(SLJIT_SP), LOCAL1);\n  OP1(SLJIT_MOV, char1_reg, 0, SLJIT_MEM1(SLJIT_SP), LOCAL2);\n  return;\n  }\nelse\n#endif /* SUPPORT_UNICODE */\n  {\n  if (ref)\n    OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), TMP1, 0);\n  else\n    OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw), TMP1, 0);\n\n  if (withchecks)\n    jump = JUMP(SLJIT_ZERO);\n\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n  partial = CMP(SLJIT_GREATER, STR_PTR, 0, STR_END, 0);\n  if (common->mode == PCRE2_JIT_COMPLETE)\n    add_jump(compiler, backtracks, partial);\n\n  add_jump(compiler, (*cc == OP_REF || *cc == OP_DNREF) ? &common->casefulcmp : &common->caselesscmp, JUMP(SLJIT_FAST_CALL));\n  add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP2, 0, SLJIT_IMM, 0));\n\n  if (common->mode != PCRE2_JIT_COMPLETE)\n    {\n    nopartial = JUMP(SLJIT_JUMP);\n    JUMPHERE(partial);\n    /* TMP2 -= STR_END - STR_PTR */\n    OP2(SLJIT_SUB, TMP2, 0, TMP2, 0, STR_PTR, 0);\n    OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, STR_END, 0);\n    partial = CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_IMM, 0);\n    OP1(SLJIT_MOV, STR_PTR, 0, STR_END, 0);\n    add_jump(compiler, (*cc == OP_REF || *cc == OP_DNREF) ? &common->casefulcmp : &common->caselesscmp, JUMP(SLJIT_FAST_CALL));\n    add_jump(compiler, backtracks, CMP(SLJIT_NOT_EQUAL, TMP2, 0, SLJIT_IMM, 0));\n    JUMPHERE(partial);\n    check_partial(common, FALSE);\n    add_jump(compiler, backtracks, JUMP(SLJIT_JUMP));\n    JUMPHERE(nopartial);\n    }\n  }\n\nif (jump != NULL)\n  {\n  if (emptyfail)\n    add_jump(compiler, backtracks, jump);\n  else\n    JUMPHERE(jump);\n  }\n}\n\nstatic SLJIT_INLINE PCRE2_SPTR compile_ref_iterator_matchingpath(compiler_common *common, PCRE2_SPTR cc, backtrack_common *parent)\n{\nDEFINE_COMPILER;\nBOOL ref = (*cc == OP_REF || *cc == OP_REFI);\nbacktrack_common *backtrack;\nPCRE2_UCHAR type;\nint local_start = LOCAL2;\nint offset = 0;\nstruct sljit_label *label;\nstruct sljit_jump *zerolength;\nstruct sljit_jump *jump = NULL;\njump_list *match_failed = NULL;\nPCRE2_SPTR ccbegin = cc;\nint min = 0, max = 0;\nBOOL minimize, exact;\n\nPUSH_BACKTRACK(sizeof(ref_iterator_backtrack), cc, NULL);\n\nif (ref)\n  offset = GET2(cc, 1) << 1;\nelse\n  cc += IMM2_SIZE;\n\nif (*ccbegin == OP_REFI || *ccbegin == OP_DNREFI)\n  {\n  cc += 1;\n#ifdef SUPPORT_UNICODE\n  if (common->utf || common->ucp)\n    local_start = LOCAL3;\n#endif\n  }\n\ntype = cc[1 + IMM2_SIZE];\n\nSLJIT_COMPILE_ASSERT((OP_CRSTAR & 0x1) == 0, crstar_opcode_must_be_even);\n/* Update ref_update_local_size() when this changes. */\nSLJIT_ASSERT(local_start + 2 * SSIZE_OF(sw) <= (int)LOCAL0 + common->locals_size);\nminimize = FALSE;\nexact = FALSE;\nswitch(type)\n  {\n  case OP_CRMINSTAR:\n  minimize = TRUE;\n  PCRE2_FALLTHROUGH /* Fall through */\n  case OP_CRSTAR:\n  case OP_CRPOSSTAR:\n  min = 0;\n  max = 0;\n  cc += 1 + IMM2_SIZE + 1;\n  break;\n\n  case OP_CRMINPLUS:\n  minimize = TRUE;\n  PCRE2_FALLTHROUGH /* Fall through */\n  case OP_CRPLUS:\n  case OP_CRPOSPLUS:\n  min = 1;\n  max = 0;\n  cc += 1 + IMM2_SIZE + 1;\n  break;\n\n  case OP_CRMINQUERY:\n  minimize = TRUE;\n  PCRE2_FALLTHROUGH /* Fall through */\n  case OP_CRQUERY:\n  case OP_CRPOSQUERY:\n  min = 0;\n  max = 1;\n  cc += 1 + IMM2_SIZE + 1;\n  break;\n\n  case OP_CRMINRANGE:\n  minimize = TRUE;\n  PCRE2_FALLTHROUGH /* Fall through */\n  case OP_CRRANGE:\n  case OP_CRPOSRANGE:\n  min = GET2(cc, 1 + IMM2_SIZE + 1);\n  max = GET2(cc, 1 + IMM2_SIZE + 1 + IMM2_SIZE);\n  SLJIT_ASSERT(min > 1 || max > 1);\n  if (min == max)\n    exact = TRUE;\n  cc += 1 + IMM2_SIZE + 1 + 2 * IMM2_SIZE;\n  break;\n  default:\n  SLJIT_UNREACHABLE();\n  break;\n  }\n\nif (type >= OP_CRPOSSTAR || exact)\n  {\n  BACKTRACK_AS(ref_iterator_backtrack)->possessive_or_exact = TRUE;\n  if (ref)\n    {\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));\n    if (min > 0 && !common->unset_backref)\n      add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));\n    zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));\n    }\n  else\n    {\n    compile_dnref_search(common, ccbegin, min > 0 ? &backtrack->own_backtracks : NULL);\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw), TMP2, 0);\n    zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));\n    }\n\n  if (exact)\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, min);\n  else if (type != OP_CRPOSSTAR)\n    {\n    /* STR_PTR is NULL before reaching min. */\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, min > 0 ? SLJIT_IMM : STR_PTR, 0);\n    if (type == OP_CRPOSRANGE)\n      {\n      SLJIT_ASSERT(local_start + 3 * SSIZE_OF(sw) <= (int)LOCAL0 + common->locals_size);\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), SLJIT_IMM, 0);\n      }\n    }\n\n  label = LABEL();\n  if (!ref)\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw));\n\n  if (type == OP_CRPOSSTAR)\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0);\n\n  compile_ref_matchingpath(common, ccbegin, exact ? &backtrack->own_backtracks : &match_failed, FALSE, FALSE);\n\n  if (type == OP_CRPOSSTAR)\n    JUMPTO(SLJIT_JUMP, label);\n  else if (type == OP_CRPOSPLUS || type == OP_CRPOSQUERY)\n    {\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0);\n    if (type == OP_CRPOSPLUS)\n      JUMPTO(SLJIT_JUMP, label);\n    }\n  else if (exact)\n    {\n    OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, 1);\n    JUMPTO(SLJIT_NOT_ZERO, label);\n    }\n  else\n    {\n    OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), SLJIT_IMM, 1);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), TMP1, 0);\n    if (min > 0)\n      CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, min, label);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0);\n    if (max == 0)\n      JUMPTO(SLJIT_JUMP, label);\n    else\n      CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, max, label);\n    }\n\n  if (!exact)\n    {\n    set_jumps(match_failed, LABEL());\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), local_start);\n\n    if (type != OP_CRPOSSTAR)\n      add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0));\n    }\n\n  JUMPHERE(zerolength);\n  count_match(common);\n  return cc;\n  }\n\nif (!minimize)\n  {\n  if (min == 0)\n    {\n    allocate_stack(common, 2);\n    if (ref)\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, 0);\n    /* Temporary release of STR_PTR. */\n    OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));\n\n    /* Handles both invalid and empty cases. Since the minimum repeat,\n    is zero the invalid case is basically the same as an empty case. */\n    if (ref)\n      zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));\n    else\n      {\n      compile_dnref_search(common, ccbegin, NULL);\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0);\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw), TMP2, 0);\n      zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));\n      }\n\n    /* Restore if not zero length. */\n    OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));\n    }\n  else\n    {\n    allocate_stack(common, 1);\n    if (ref)\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));\n\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n\n    if (ref)\n      {\n      if (!common->unset_backref)\n        add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));\n      zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));\n      }\n    else\n      {\n      compile_dnref_search(common, ccbegin, &backtrack->own_backtracks);\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0);\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw), TMP2, 0);\n      zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));\n      }\n    }\n\n  if (min > 1 || max > 1)\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, 0);\n\n  label = LABEL();\n  if (!ref)\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw));\n  compile_ref_matchingpath(common, ccbegin, &backtrack->own_backtracks, FALSE, FALSE);\n\n  if (min > 1 || max > 1)\n    {\n    OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, 1);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, TMP1, 0);\n    if (min > 1)\n      CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, min, label);\n\n    if (max > 1)\n      {\n      jump = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, max);\n      allocate_stack(common, 1);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n      JUMPTO(SLJIT_JUMP, label);\n      JUMPHERE(jump);\n      }\n    }\n\n  if (max == 0)\n    {\n    /* Includes min > 1 case as well. */\n    allocate_stack(common, 1);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n    JUMPTO(SLJIT_JUMP, label);\n    }\n\n  JUMPHERE(zerolength);\n  BACKTRACK_AS(ref_iterator_backtrack)->matchingpath = LABEL();\n\n  count_match(common);\n  return cc;\n  }\n\nallocate_stack(common, ref ? 2 : 3);\nif (ref)\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));\nOP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\nif (type != OP_CRMINSTAR)\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, 0);\n\nif (min == 0)\n  {\n  /* Handles both invalid and empty cases. Since the minimum repeat,\n  is zero the invalid case is basically the same as an empty case. */\n  if (ref)\n    zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));\n  else\n    {\n    compile_dnref_search(common, ccbegin, NULL);\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(2), TMP2, 0);\n    zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));\n    }\n  /* Length is non-zero, we can match real repeats. */\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n  jump = JUMP(SLJIT_JUMP);\n  }\nelse\n  {\n  if (ref)\n    {\n    if (!common->unset_backref)\n      add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));\n    zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));\n    }\n  else\n    {\n    compile_dnref_search(common, ccbegin, &backtrack->own_backtracks);\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(2), TMP2, 0);\n    zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));\n    }\n  }\n\nBACKTRACK_AS(ref_iterator_backtrack)->matchingpath = LABEL();\nif (max > 0)\n  add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_GREATER_EQUAL, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, max));\n\nif (!ref)\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(2));\ncompile_ref_matchingpath(common, ccbegin, &backtrack->own_backtracks, TRUE, TRUE);\nOP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n\nif (min > 1)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 1);\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), TMP1, 0);\n  CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, min, BACKTRACK_AS(ref_iterator_backtrack)->matchingpath);\n  }\nelse if (max > 0)\n  OP2(SLJIT_ADD, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, 1);\n\nif (jump != NULL)\n  JUMPHERE(jump);\nJUMPHERE(zerolength);\n\ncount_match(common);\nreturn cc;\n}\n\nstatic SLJIT_INLINE PCRE2_SPTR compile_recurse_matchingpath(compiler_common *common, PCRE2_SPTR cc, backtrack_common *parent)\n{\nDEFINE_COMPILER;\nbacktrack_common *backtrack;\nrecurse_entry *entry = common->entries;\nrecurse_entry *prev = NULL;\nPCRE2_SPTR end;\nsljit_sw start = GET(cc, 1);\nsljit_uw arg_size;\nPCRE2_SPTR start_cc;\nBOOL needs_control_head;\n\nend = cc + 1 + LINK_SIZE;\n\nwhile (*end == OP_CREF)\n  end += 1 + IMM2_SIZE;\n\nPUSH_BACKTRACK(sizeof(recurse_backtrack), cc, end);\n\n/* Inlining simple patterns. */\nif (get_framesize(common, common->start + start, NULL, TRUE, &needs_control_head) == no_stack)\n  {\n  start_cc = common->start + start;\n  compile_matchingpath(common, next_opcode(common, start_cc), bracketend(start_cc) - (1 + LINK_SIZE), backtrack);\n  BACKTRACK_AS(recurse_backtrack)->inlined_pattern = TRUE;\n  return end;\n  }\n\ncc += 1 + LINK_SIZE;\narg_size = (sljit_uw)IN_UCHARS(end - cc);\nwhile (entry != NULL)\n  {\n  if (entry->start == start && entry->arg_size == arg_size\n      && (arg_size == 0 || memcmp(cc, entry->arg_start, arg_size) == 0))\n    break;\n  prev = entry;\n  entry = entry->next;\n  }\n\nif (entry == NULL)\n  {\n  entry = sljit_alloc_memory(compiler, sizeof(recurse_entry));\n  if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n    return end;\n  entry->next = NULL;\n  entry->entry_label = NULL;\n  entry->backtrack_label = NULL;\n  entry->entry_calls = NULL;\n  entry->backtrack_calls = NULL;\n  entry->start = start;\n  entry->arg_start = cc;\n  entry->arg_size = arg_size;\n\n  if (prev != NULL)\n    prev->next = entry;\n  else\n    common->entries = entry;\n  }\n\nBACKTRACK_AS(recurse_backtrack)->entry = entry;\n\nif (entry->entry_label == NULL)\n  add_jump(compiler, &entry->entry_calls, JUMP(SLJIT_FAST_CALL));\nelse\n  JUMPTO(SLJIT_FAST_CALL, entry->entry_label);\n/* Leave if the match is failed. */\nadd_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, 0));\nBACKTRACK_AS(recurse_backtrack)->matchingpath = LABEL();\nreturn end;\n}\n\nstatic sljit_s32 SLJIT_FUNC do_callout_jit(struct jit_arguments *arguments, pcre2_callout_block *callout_block, PCRE2_SPTR *jit_ovector)\n{\nPCRE2_SPTR begin;\nPCRE2_SIZE *ovector;\nsljit_u32 oveccount, capture_top;\n\nif (arguments->callout == NULL)\n  return 0;\n\nSLJIT_COMPILE_ASSERT(sizeof (PCRE2_SIZE) <= sizeof (sljit_sw), pcre2_size_must_be_lower_than_sljit_sw_size);\n\nbegin = arguments->begin;\novector = (PCRE2_SIZE*)(callout_block + 1);\noveccount = callout_block->capture_top;\n\nSLJIT_ASSERT(oveccount >= 1);\n\ncallout_block->version = 2;\ncallout_block->callout_flags = 0;\n\n/* Offsets in subject. */\ncallout_block->subject_length = arguments->end - arguments->begin;\ncallout_block->start_match = jit_ovector[0] - begin;\ncallout_block->current_position = (PCRE2_SPTR)callout_block->offset_vector - begin;\ncallout_block->subject = begin;\n\n/* Convert and copy the JIT offset vector to the ovector array. */\ncallout_block->capture_top = 1;\ncallout_block->offset_vector = ovector;\n\novector[0] = PCRE2_UNSET;\novector[1] = PCRE2_UNSET;\novector += 2;\njit_ovector += 2;\ncapture_top = 1;\n\n/* Convert pointers to sizes. */\nwhile (--oveccount != 0)\n  {\n  capture_top++;\n\n  ovector[0] = (PCRE2_SIZE)(jit_ovector[0] - begin);\n  ovector[1] = (PCRE2_SIZE)(jit_ovector[1] - begin);\n\n  if (ovector[0] != PCRE2_UNSET)\n    callout_block->capture_top = capture_top;\n\n  ovector += 2;\n  jit_ovector += 2;\n  }\n\nreturn (arguments->callout)(callout_block, arguments->callout_data);\n}\n\n#define CALLOUT_ARG_OFFSET(arg) \\\n    SLJIT_OFFSETOF(pcre2_callout_block, arg)\n\nstatic SLJIT_INLINE PCRE2_SPTR compile_callout_matchingpath(compiler_common *common, PCRE2_SPTR cc, backtrack_common *parent)\n{\nDEFINE_COMPILER;\nbacktrack_common *backtrack;\nsljit_s32 mov_opcode;\nunsigned int callout_length = (*cc == OP_CALLOUT)\n    ? PRIV(OP_lengths)[OP_CALLOUT] : GET(cc, 1 + 2 * LINK_SIZE);\nsljit_sw value1;\nsljit_sw value2;\nsljit_sw value3;\nsljit_s32 callout_arg_size = (common->re->top_bracket + 1) * 2 * SSIZE_OF(sw); /* top_bracket is uint16 so maximum is 1MiB */\n\nPUSH_BACKTRACK(sizeof(backtrack_common), cc, NULL);\n\ncallout_arg_size = (sizeof(pcre2_callout_block) + callout_arg_size + sizeof(sljit_sw) - 1) / sizeof(sljit_sw);\n\nallocate_stack(common, callout_arg_size);\n\nSLJIT_ASSERT(common->capture_last_ptr != 0);\nOP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr);\nOP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\nvalue1 = (*cc == OP_CALLOUT) ? cc[1 + 2 * LINK_SIZE] : 0;\nOP1(SLJIT_MOV_U32, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(callout_number), SLJIT_IMM, value1);\nOP1(SLJIT_MOV_U32, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(capture_last), TMP2, 0);\nOP1(SLJIT_MOV_U32, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(capture_top), SLJIT_IMM, common->re->top_bracket + 1);\n\n/* These pointer sized fields temporarly stores internal variables. */\nOP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(offset_vector), STR_PTR, 0);\n\nif (common->mark_ptr != 0)\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, mark_ptr));\nmov_opcode = (sizeof(PCRE2_SIZE) == 4) ? SLJIT_MOV_U32 : SLJIT_MOV;\nOP1(mov_opcode, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(pattern_position), SLJIT_IMM, GET(cc, 1));\nOP1(mov_opcode, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(next_item_length), SLJIT_IMM, GET(cc, 1 + LINK_SIZE));\n\nif (*cc == OP_CALLOUT)\n  {\n  value1 = 0;\n  value2 = 0;\n  value3 = 0;\n  }\nelse\n  {\n  value1 = (sljit_sw) (cc + (1 + 4*LINK_SIZE) + 1);\n  value2 = (callout_length - (1 + 4*LINK_SIZE + 2));\n  value3 = (sljit_sw) (GET(cc, 1 + 3*LINK_SIZE));\n  }\n\nOP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(callout_string), SLJIT_IMM, value1);\nOP1(mov_opcode, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(callout_string_length), SLJIT_IMM, value2);\nOP1(mov_opcode, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(callout_string_offset), SLJIT_IMM, value3);\nOP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(mark), (common->mark_ptr != 0) ? TMP2 : SLJIT_IMM, 0);\n\nSLJIT_ASSERT(TMP1 == SLJIT_R0 && STR_PTR == SLJIT_R1);\n\n/* Needed to save important temporary registers. */\nSLJIT_ASSERT(common->locals_size >= SSIZE_OF(sw));\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL0, STR_PTR, 0);\n/* SLJIT_R0 = arguments */\nOP1(SLJIT_MOV, SLJIT_R1, 0, STACK_TOP, 0);\nGET_LOCAL_BASE(SLJIT_R2, 0, OVECTOR_START);\nsljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS3(32, W, W, W), SLJIT_IMM, SLJIT_FUNC_ADDR(do_callout_jit));\nOP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\nfree_stack(common, callout_arg_size);\n\n/* Check return value. */\nOP2U(SLJIT_SUB32 | SLJIT_SET_Z | SLJIT_SET_SIG_GREATER, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);\nadd_jump(compiler, &backtrack->own_backtracks, JUMP(SLJIT_SIG_GREATER));\nif (common->abort_label == NULL)\n  add_jump(compiler, &common->abort, JUMP(SLJIT_NOT_EQUAL) /* SIG_LESS */);\nelse\n  JUMPTO(SLJIT_NOT_EQUAL /* SIG_LESS */, common->abort_label);\nreturn cc + callout_length;\n}\n\n#undef CALLOUT_ARG_SIZE\n#undef CALLOUT_ARG_OFFSET\n\nstatic PCRE2_SPTR compile_reverse_matchingpath(compiler_common *common, PCRE2_SPTR cc, backtrack_common *parent)\n{\nDEFINE_COMPILER;\nbacktrack_common *backtrack = NULL;\njump_list **reverse_failed;\nunsigned int lmin, lmax;\n#ifdef SUPPORT_UNICODE\nstruct sljit_jump *jump;\nstruct sljit_label *label;\n#endif\n\nSLJIT_ASSERT(parent->top == NULL);\n\nif (*cc == OP_REVERSE)\n  {\n  reverse_failed = &parent->own_backtracks;\n  lmin = GET2(cc, 1);\n  lmax = lmin;\n  cc += 1 + IMM2_SIZE;\n\n  SLJIT_ASSERT(lmin > 0);\n  }\nelse\n  {\n  SLJIT_ASSERT(*cc == OP_VREVERSE);\n  PUSH_BACKTRACK(sizeof(vreverse_backtrack), cc, cc + 1 + 2 * IMM2_SIZE);\n\n  reverse_failed = &backtrack->own_backtracks;\n  lmin = GET2(cc, 1);\n  lmax = GET2(cc, 1 + IMM2_SIZE);\n  cc += 1 + 2 * IMM2_SIZE;\n\n  SLJIT_ASSERT(lmin < lmax);\n  }\n\nif (HAS_VIRTUAL_REGISTERS)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, begin));\n  }\nelse\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin));\n\n#ifdef SUPPORT_UNICODE\nif (common->utf)\n  {\n  if (lmin > 0)\n    {\n    OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, lmin);\n    label = LABEL();\n    add_jump(compiler, reverse_failed, CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0));\n    move_back(common, reverse_failed, FALSE);\n    OP2(SLJIT_SUB | SLJIT_SET_Z, TMP3, 0, TMP3, 0, SLJIT_IMM, 1);\n    JUMPTO(SLJIT_NOT_ZERO, label);\n    }\n\n  if (lmin < lmax)\n    {\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(3), STR_PTR, 0);\n\n    OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, lmax - lmin);\n    label = LABEL();\n    jump = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0);\n    move_back(common, reverse_failed, FALSE);\n    OP2(SLJIT_SUB | SLJIT_SET_Z, TMP3, 0, TMP3, 0, SLJIT_IMM, 1);\n    JUMPTO(SLJIT_NOT_ZERO, label);\n\n    JUMPHERE(jump);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(2), STR_PTR, 0);\n    }\n  }\nelse\n#endif\n  {\n  if (lmin > 0)\n    {\n    OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(lmin));\n    add_jump(compiler, reverse_failed, CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0));\n    }\n\n  if (lmin < lmax)\n    {\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(3), STR_PTR, 0);\n\n    OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(lmax - lmin));\n    OP2U(SLJIT_SUB | SLJIT_SET_LESS, STR_PTR, 0, TMP2, 0);\n    SELECT(SLJIT_LESS, STR_PTR, TMP2, 0, STR_PTR);\n\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(2), STR_PTR, 0);\n    }\n  }\n\ncheck_start_used_ptr(common);\n\nif (lmin < lmax)\n  BACKTRACK_AS(vreverse_backtrack)->matchingpath = LABEL();\n\nreturn cc;\n}\n\nstatic SLJIT_INLINE BOOL assert_needs_str_ptr_saving(PCRE2_SPTR cc)\n{\nwhile (TRUE)\n  {\n  switch (*cc)\n    {\n    case OP_CALLOUT_STR:\n    cc += GET(cc, 1 + 2*LINK_SIZE);\n    break;\n\n    case OP_NOT_WORD_BOUNDARY:\n    case OP_WORD_BOUNDARY:\n    case OP_CIRC:\n    case OP_CIRCM:\n    case OP_DOLL:\n    case OP_DOLLM:\n    case OP_CALLOUT:\n    case OP_ALT:\n    case OP_NOT_UCP_WORD_BOUNDARY:\n    case OP_UCP_WORD_BOUNDARY:\n    cc += PRIV(OP_lengths)[*cc];\n    break;\n\n    case OP_KET:\n    return FALSE;\n\n    default:\n    return TRUE;\n    }\n  }\n}\n\nstatic PCRE2_SPTR compile_assert_matchingpath(compiler_common *common, PCRE2_SPTR cc, assert_backtrack *backtrack, BOOL conditional)\n{\nDEFINE_COMPILER;\nint framesize;\nint extrasize;\nBOOL local_quit_available = FALSE;\nBOOL needs_control_head;\nBOOL end_block_size = 0;\nBOOL has_vreverse;\nint private_data_ptr;\nbacktrack_common altbacktrack;\nPCRE2_SPTR ccbegin;\nPCRE2_UCHAR opcode;\nPCRE2_UCHAR bra = OP_BRA;\njump_list *tmp = NULL;\njump_list **target = (conditional) ? &backtrack->condfailed : &backtrack->common.own_backtracks;\njump_list **found;\n/* Saving previous accept variables. */\nBOOL save_local_quit_available = common->local_quit_available;\nBOOL save_in_positive_assertion = common->in_positive_assertion;\nsljit_s32 save_restore_end_ptr = common->restore_end_ptr;\nthen_trap_backtrack *save_then_trap = common->then_trap;\nstruct sljit_label *save_quit_label = common->quit_label;\nstruct sljit_label *save_accept_label = common->accept_label;\njump_list *save_quit = common->quit;\njump_list *save_positive_assertion_quit = common->positive_assertion_quit;\njump_list *save_accept = common->accept;\nstruct sljit_jump *jump;\nstruct sljit_jump *brajump = NULL;\n\n/* Assert captures then. */\ncommon->then_trap = NULL;\n\nif (*cc == OP_BRAZERO || *cc == OP_BRAMINZERO)\n  {\n  SLJIT_ASSERT(!conditional);\n  bra = *cc;\n  cc++;\n  }\n\nprivate_data_ptr = PRIVATE_DATA(cc);\nSLJIT_ASSERT(private_data_ptr != 0);\nframesize = get_framesize(common, cc, NULL, FALSE, &needs_control_head);\nbacktrack->framesize = framesize;\nbacktrack->private_data_ptr = private_data_ptr;\nopcode = *cc;\nSLJIT_ASSERT(opcode >= OP_ASSERT && opcode <= OP_ASSERTBACK_NOT);\nfound = (opcode == OP_ASSERT || opcode == OP_ASSERTBACK) ? &tmp : target;\nccbegin = cc;\ncc += GET(cc, 1);\n\nif (bra == OP_BRAMINZERO)\n  {\n  /* This is a braminzero backtrack path. */\n  OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n  free_stack(common, 1);\n  brajump = CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0);\n  }\n\nif ((opcode == OP_ASSERTBACK || opcode == OP_ASSERTBACK_NOT) && find_vreverse(ccbegin))\n  end_block_size = 3;\n\nif (framesize < 0)\n  {\n  extrasize = 1;\n  if (bra == OP_BRA && !assert_needs_str_ptr_saving(ccbegin + 1 + LINK_SIZE))\n    extrasize = 0;\n\n  extrasize += end_block_size;\n\n  if (needs_control_head)\n    extrasize++;\n\n  if (framesize == no_frame)\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0);\n\n  if (extrasize > 0)\n    allocate_stack(common, extrasize);\n\n  if (needs_control_head)\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);\n\n  if (extrasize > 0)\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n\n  if (needs_control_head)\n    {\n    SLJIT_ASSERT(extrasize == end_block_size + 2);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(end_block_size + 1), TMP1, 0);\n    }\n  }\nelse\n  {\n  extrasize = (needs_control_head ? 3 : 2) + end_block_size;\n\n  OP1(SLJIT_MOV, TMP2, 0, STACK_TOP, 0);\n  allocate_stack(common, framesize + extrasize);\n\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP2, 0);\n  if (needs_control_head)\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n\n  if (needs_control_head)\n    {\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(end_block_size + 2), TMP1, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(end_block_size + 1), TMP2, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0);\n    }\n  else\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(end_block_size + 1), TMP1, 0);\n\n  init_frame(common, ccbegin, NULL, framesize + extrasize - 1, extrasize);\n  }\n\nif (end_block_size > 0)\n  {\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), STR_END, 0);\n  OP1(SLJIT_MOV, STR_END, 0, STR_PTR, 0);\n  }\n\nmemset(&altbacktrack, 0, sizeof(backtrack_common));\nif (conditional || (opcode == OP_ASSERT_NOT || opcode == OP_ASSERTBACK_NOT))\n  {\n  /* Control verbs cannot escape from these asserts. */\n  local_quit_available = TRUE;\n  common->restore_end_ptr = 0;\n  common->local_quit_available = TRUE;\n  common->quit_label = NULL;\n  common->quit = NULL;\n  }\n\ncommon->in_positive_assertion = (opcode == OP_ASSERT || opcode == OP_ASSERTBACK);\ncommon->positive_assertion_quit = NULL;\n\nwhile (1)\n  {\n  common->accept_label = NULL;\n  common->accept = NULL;\n  altbacktrack.top = NULL;\n  altbacktrack.own_backtracks = NULL;\n\n  if (*ccbegin == OP_ALT && extrasize > 0)\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n\n  altbacktrack.cc = ccbegin;\n  ccbegin += 1 + LINK_SIZE;\n\n  has_vreverse = (*ccbegin == OP_VREVERSE);\n  if (*ccbegin == OP_REVERSE || has_vreverse)\n    ccbegin = compile_reverse_matchingpath(common, ccbegin, &altbacktrack);\n\n  compile_matchingpath(common, ccbegin, cc, &altbacktrack);\n  if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n    {\n    if (local_quit_available)\n      {\n      common->local_quit_available = save_local_quit_available;\n      common->quit_label = save_quit_label;\n      common->quit = save_quit;\n      }\n    common->in_positive_assertion = save_in_positive_assertion;\n    common->restore_end_ptr = save_restore_end_ptr;\n    common->then_trap = save_then_trap;\n    common->accept_label = save_accept_label;\n    common->positive_assertion_quit = save_positive_assertion_quit;\n    common->accept = save_accept;\n    return NULL;\n    }\n\n  if (has_vreverse)\n    {\n    SLJIT_ASSERT(altbacktrack.top != NULL);\n    add_jump(compiler, &altbacktrack.top->simple_backtracks, CMP(SLJIT_LESS, STR_PTR, 0, STR_END, 0));\n    }\n\n  common->accept_label = LABEL();\n  if (common->accept != NULL)\n    set_jumps(common->accept, common->accept_label);\n\n  /* Reset stack. */\n  if (framesize < 0)\n    {\n    if (framesize == no_frame)\n      OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n    else if (extrasize > 0)\n      free_stack(common, extrasize);\n\n    if (end_block_size > 0)\n      OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(STACK_TOP), STACK(-extrasize + 1));\n\n    if (needs_control_head)\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(-1));\n    }\n  else\n    {\n    if ((opcode != OP_ASSERT_NOT && opcode != OP_ASSERTBACK_NOT) || conditional)\n      {\n      /* We don't need to keep the STR_PTR, only the previous private_data_ptr. */\n      OP2(SLJIT_SUB, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_sw));\n\n      if (end_block_size > 0)\n        OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(STACK_TOP), STACK(-extrasize + 2));\n\n      if (needs_control_head)\n        OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(-1));\n      }\n    else\n      {\n      OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n\n      if (end_block_size > 0)\n        OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(STACK_TOP), STACK(-framesize - extrasize + 1));\n\n      if (needs_control_head)\n        OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(-framesize - 2));\n      add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));\n      OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize - 1) * sizeof(sljit_sw));\n      }\n    }\n\n  if (opcode == OP_ASSERT_NOT || opcode == OP_ASSERTBACK_NOT)\n    {\n    /* We know that STR_PTR was stored on the top of the stack. */\n    if (conditional)\n      {\n      if (extrasize > 0)\n        OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(-end_block_size - (needs_control_head ? 2 : 1)));\n      }\n    else if (bra == OP_BRAZERO)\n      {\n      if (framesize < 0)\n        OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(-extrasize));\n      else\n        {\n        OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(-framesize - 1));\n        OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(-framesize - extrasize));\n        OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);\n        }\n      OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n      }\n    else if (framesize >= 0)\n      {\n      /* For OP_BRA and OP_BRAMINZERO. */\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(-framesize - 1));\n      }\n    }\n  add_jump(compiler, found, JUMP(SLJIT_JUMP));\n\n  compile_backtrackingpath(common, altbacktrack.top);\n  if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n    {\n    if (local_quit_available)\n      {\n      common->local_quit_available = save_local_quit_available;\n      common->quit_label = save_quit_label;\n      common->quit = save_quit;\n      }\n    common->in_positive_assertion = save_in_positive_assertion;\n    common->restore_end_ptr = save_restore_end_ptr;\n    common->then_trap = save_then_trap;\n    common->accept_label = save_accept_label;\n    common->positive_assertion_quit = save_positive_assertion_quit;\n    common->accept = save_accept;\n    return NULL;\n    }\n  set_jumps(altbacktrack.own_backtracks, LABEL());\n\n  if (*cc != OP_ALT)\n    break;\n\n  ccbegin = cc;\n  cc += GET(cc, 1);\n  }\n\nif (local_quit_available)\n  {\n  SLJIT_ASSERT(common->positive_assertion_quit == NULL);\n  /* Makes the check less complicated below. */\n  common->positive_assertion_quit = common->quit;\n  }\n\n/* None of them matched. */\nif (common->positive_assertion_quit != NULL)\n  {\n  jump = JUMP(SLJIT_JUMP);\n  set_jumps(common->positive_assertion_quit, LABEL());\n  SLJIT_ASSERT(framesize != no_stack);\n  if (framesize < 0)\n    OP2(SLJIT_SUB, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, extrasize * sizeof(sljit_sw));\n  else\n    {\n    OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n    add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));\n    OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (extrasize + 1) * sizeof(sljit_sw));\n    }\n  JUMPHERE(jump);\n  }\n\nif (end_block_size > 0)\n  OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n\nif (needs_control_head)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(end_block_size + 1));\n\nif (opcode == OP_ASSERT || opcode == OP_ASSERTBACK)\n  {\n  /* Assert is failed. */\n  if ((conditional && extrasize > 0) || bra == OP_BRAZERO)\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n\n  if (framesize < 0)\n    {\n    /* The topmost item should be 0. */\n    if (bra == OP_BRAZERO)\n      {\n      if (extrasize >= 2)\n        free_stack(common, extrasize - 1);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n      }\n    else if (extrasize > 0)\n      free_stack(common, extrasize);\n    }\n  else\n    {\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(extrasize - 1));\n    /* The topmost item should be 0. */\n    if (bra == OP_BRAZERO)\n      {\n      free_stack(common, framesize + extrasize - 1);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n      }\n    else\n      free_stack(common, framesize + extrasize);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);\n    }\n  jump = JUMP(SLJIT_JUMP);\n  if (bra != OP_BRAZERO)\n    add_jump(compiler, target, jump);\n\n  /* Assert is successful. */\n  set_jumps(tmp, LABEL());\n  if (framesize < 0)\n    {\n    /* We know that STR_PTR was stored on the top of the stack. */\n    if (extrasize > 0)\n      OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(-extrasize));\n\n    /* Keep the STR_PTR on the top of the stack. */\n    if (bra == OP_BRAZERO)\n      {\n      /* This allocation is always successful. */\n      OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));\n      if (extrasize >= 2)\n        OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n      }\n    else if (bra == OP_BRAMINZERO)\n      {\n      OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n      }\n    }\n  else\n    {\n    if (bra == OP_BRA)\n      {\n      /* We don't need to keep the STR_PTR, only the previous private_data_ptr. */\n      OP2(SLJIT_SUB, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_sw));\n      OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(-extrasize + 1));\n      }\n    else\n      {\n      /* We don't need to keep the STR_PTR, only the previous private_data_ptr. */\n      OP2(SLJIT_SUB, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + end_block_size + 2) * sizeof(sljit_sw));\n\n      if (extrasize == 2 + end_block_size)\n        {\n        OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n        if (bra == OP_BRAMINZERO)\n          OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n        }\n      else\n        {\n        SLJIT_ASSERT(extrasize == 3 + end_block_size);\n        OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(-1));\n        OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), bra == OP_BRAZERO ? STR_PTR : SLJIT_IMM, 0);\n        }\n      }\n    }\n\n  if (bra == OP_BRAZERO)\n    {\n    backtrack->matchingpath = LABEL();\n    SET_LABEL(jump, backtrack->matchingpath);\n    }\n  else if (bra == OP_BRAMINZERO)\n    {\n    JUMPTO(SLJIT_JUMP, backtrack->matchingpath);\n    JUMPHERE(brajump);\n    SLJIT_ASSERT(framesize != 0);\n    if (framesize > 0)\n      {\n      OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n      add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(-2));\n      OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize - 1) * sizeof(sljit_sw));\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);\n      }\n    set_jumps(backtrack->common.own_backtracks, LABEL());\n    }\n  }\nelse\n  {\n  /* AssertNot is successful. */\n  if (framesize < 0)\n    {\n    if (extrasize > 0)\n      OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n\n    if (bra != OP_BRA)\n      {\n      if (extrasize >= 2)\n        free_stack(common, extrasize - 1);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n      }\n    else if (extrasize > 0)\n      free_stack(common, extrasize);\n    }\n  else\n    {\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(extrasize - 1));\n    /* The topmost item should be 0. */\n    if (bra != OP_BRA)\n      {\n      free_stack(common, framesize + extrasize - 1);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n      }\n    else\n      free_stack(common, framesize + extrasize);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);\n    }\n\n  if (bra == OP_BRAZERO)\n    backtrack->matchingpath = LABEL();\n  else if (bra == OP_BRAMINZERO)\n    {\n    JUMPTO(SLJIT_JUMP, backtrack->matchingpath);\n    JUMPHERE(brajump);\n    }\n\n  if (bra != OP_BRA)\n    {\n    SLJIT_ASSERT(found == &backtrack->common.own_backtracks);\n    set_jumps(backtrack->common.own_backtracks, LABEL());\n    backtrack->common.own_backtracks = NULL;\n    }\n  }\n\nif (local_quit_available)\n  {\n  common->local_quit_available = save_local_quit_available;\n  common->quit_label = save_quit_label;\n  common->quit = save_quit;\n  }\n\ncommon->in_positive_assertion = save_in_positive_assertion;\ncommon->restore_end_ptr = save_restore_end_ptr;\ncommon->then_trap = save_then_trap;\ncommon->accept_label = save_accept_label;\ncommon->positive_assertion_quit = save_positive_assertion_quit;\ncommon->accept = save_accept;\nreturn cc + 1 + LINK_SIZE;\n}\n\nstatic SLJIT_INLINE void match_once_common(compiler_common *common, PCRE2_UCHAR ket, int framesize, int private_data_ptr, BOOL has_alternatives, BOOL needs_control_head)\n{\nDEFINE_COMPILER;\nint stacksize;\n\nif (framesize < 0)\n  {\n  if (framesize == no_frame)\n    OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n  else\n    {\n    stacksize = needs_control_head ? 1 : 0;\n    if (ket != OP_KET || has_alternatives)\n      stacksize++;\n\n    if (stacksize > 0)\n      free_stack(common, stacksize);\n    }\n\n  if (needs_control_head)\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), (ket != OP_KET || has_alternatives) ? STACK(-2) : STACK(-1));\n\n  /* TMP2 which is set here used by OP_KETRMAX below. */\n  if (ket == OP_KETRMAX)\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(-1));\n  else if (ket == OP_KETRMIN)\n    {\n    /* Move the STR_PTR to the private_data_ptr. */\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(-1));\n    }\n  }\nelse\n  {\n  stacksize = (ket != OP_KET || has_alternatives) ? 2 : 1;\n  OP2(SLJIT_SUB, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + stacksize) * sizeof(sljit_sw));\n  if (needs_control_head)\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(-1));\n\n  if (ket == OP_KETRMAX)\n    {\n    /* TMP2 which is set here used by OP_KETRMAX below. */\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    }\n  }\nif (needs_control_head)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, TMP1, 0);\n}\n\nstatic SLJIT_INLINE int match_capture_common(compiler_common *common, int stacksize, int offset, int private_data_ptr)\n{\nDEFINE_COMPILER;\n\nif (common->capture_last_ptr != 0)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, SLJIT_IMM, offset >> 1);\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), TMP1, 0);\n  stacksize++;\n  }\nif (!is_optimized_cbracket(common, offset >> 1))\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), TMP1, 0);\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize + 1), TMP2, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);\n  stacksize += 2;\n  }\nreturn stacksize;\n}\n\nstatic PCRE2_SPTR SLJIT_FUNC do_script_run(PCRE2_SPTR ptr, PCRE2_SPTR endptr)\n{\n  if (PRIV(script_run)(ptr, endptr, FALSE))\n    return endptr;\n  return NULL;\n}\n\n#ifdef SUPPORT_UNICODE\n\nstatic PCRE2_SPTR SLJIT_FUNC do_script_run_utf(PCRE2_SPTR ptr, PCRE2_SPTR endptr)\n{\n  if (PRIV(script_run)(ptr, endptr, TRUE))\n    return endptr;\n  return NULL;\n}\n\n#endif /* SUPPORT_UNICODE */\n\nstatic void match_script_run_common(compiler_common *common, int private_data_ptr, backtrack_common *parent)\n{\nDEFINE_COMPILER;\n\nSLJIT_ASSERT(TMP1 == SLJIT_R0 && STR_PTR == SLJIT_R1);\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n#ifdef SUPPORT_UNICODE\nsljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM,\n  common->utf ? SLJIT_FUNC_ADDR(do_script_run_utf) : SLJIT_FUNC_ADDR(do_script_run));\n#else\nsljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, SLJIT_FUNC_ADDR(do_script_run));\n#endif\n\nOP1(SLJIT_MOV, STR_PTR, 0, SLJIT_RETURN_REG, 0);\nadd_jump(compiler, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks, CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0));\n}\n\n/*\n  Handling bracketed expressions is probably the most complex part.\n\n  Stack layout naming characters:\n    S - Push the current STR_PTR\n    0 - Push a 0 (NULL)\n    A - Push the current STR_PTR. Needed for restoring the STR_PTR\n        before the next alternative. Not pushed if there are no alternatives.\n    M - Any values pushed by the current alternative. Can be empty, or anything.\n    C - Push the previous OVECTOR(i), OVECTOR(i+1) and OVECTOR_PRIV(i) to the stack.\n    L - Push the previous local (pointed by localptr) to the stack\n   () - opional values stored on the stack\n  ()* - optonal, can be stored multiple times\n\n  The following list shows the regular expression templates, their PCRE byte codes\n  and stack layout supported by pcre-sljit.\n\n  (?:)                     OP_BRA     | OP_KET                A M\n  ()                       OP_CBRA    | OP_KET                C M\n  (?:)+                    OP_BRA     | OP_KETRMAX        0   A M S   ( A M S )*\n                           OP_SBRA    | OP_KETRMAX        0   L M S   ( L M S )*\n  (?:)+?                   OP_BRA     | OP_KETRMIN        0   A M S   ( A M S )*\n                           OP_SBRA    | OP_KETRMIN        0   L M S   ( L M S )*\n  ()+                      OP_CBRA    | OP_KETRMAX        0   C M S   ( C M S )*\n                           OP_SCBRA   | OP_KETRMAX        0   C M S   ( C M S )*\n  ()+?                     OP_CBRA    | OP_KETRMIN        0   C M S   ( C M S )*\n                           OP_SCBRA   | OP_KETRMIN        0   C M S   ( C M S )*\n  (?:)?    OP_BRAZERO    | OP_BRA     | OP_KET            S ( A M 0 )\n  (?:)??   OP_BRAMINZERO | OP_BRA     | OP_KET            S ( A M 0 )\n  ()?      OP_BRAZERO    | OP_CBRA    | OP_KET            S ( C M 0 )\n  ()??     OP_BRAMINZERO | OP_CBRA    | OP_KET            S ( C M 0 )\n  (?:)*    OP_BRAZERO    | OP_BRA     | OP_KETRMAX      S 0 ( A M S )*\n           OP_BRAZERO    | OP_SBRA    | OP_KETRMAX      S 0 ( L M S )*\n  (?:)*?   OP_BRAMINZERO | OP_BRA     | OP_KETRMIN      S 0 ( A M S )*\n           OP_BRAMINZERO | OP_SBRA    | OP_KETRMIN      S 0 ( L M S )*\n  ()*      OP_BRAZERO    | OP_CBRA    | OP_KETRMAX      S 0 ( C M S )*\n           OP_BRAZERO    | OP_SCBRA   | OP_KETRMAX      S 0 ( C M S )*\n  ()*?     OP_BRAMINZERO | OP_CBRA    | OP_KETRMIN      S 0 ( C M S )*\n           OP_BRAMINZERO | OP_SCBRA   | OP_KETRMIN      S 0 ( C M S )*\n\n\n  Stack layout naming characters:\n    A - Push the alternative index (starting from 0) on the stack.\n        Not pushed if there is no alternatives.\n    M - Any values pushed by the current alternative. Can be empty, or anything.\n\n  The next list shows the possible content of a bracket:\n  (|)     OP_*BRA    | OP_ALT ...         M A\n  (?()|)  OP_*COND   | OP_ALT             M A\n  (?>|)   OP_ONCE    | OP_ALT ...         [stack trace] M A\n                                          Or nothing, if trace is unnecessary\n*/\n\nstatic PCRE2_SPTR compile_bracket_matchingpath(compiler_common *common, PCRE2_SPTR cc, backtrack_common *parent)\n{\nDEFINE_COMPILER;\nbacktrack_common *backtrack;\nPCRE2_UCHAR opcode;\nint private_data_ptr = 0;\nint offset = 0;\nint i, stacksize;\nint repeat_ptr = 0, repeat_length = 0;\nint repeat_type = 0, repeat_count = 0;\nPCRE2_SPTR ccbegin;\nPCRE2_SPTR matchingpath;\nPCRE2_SPTR slot;\nPCRE2_UCHAR bra = OP_BRA;\nPCRE2_UCHAR ket;\nassert_backtrack *assert;\nBOOL has_alternatives;\nBOOL needs_control_head = FALSE;\nBOOL has_vreverse = FALSE;\nstruct sljit_jump *jump;\nstruct sljit_jump *skip;\njump_list *jumplist;\nstruct sljit_label *rmax_label = NULL;\nstruct sljit_jump *braminzero = NULL;\n\nPUSH_BACKTRACK(sizeof(bracket_backtrack), cc, NULL);\n\nif (*cc == OP_BRAZERO || *cc == OP_BRAMINZERO)\n  {\n  bra = *cc;\n  cc++;\n  opcode = *cc;\n  }\n\nopcode = *cc;\nccbegin = cc;\nmatchingpath = bracketend(cc) - 1 - LINK_SIZE;\nket = *matchingpath;\nif (ket == OP_KET && PRIVATE_DATA(matchingpath) != 0)\n  {\n  repeat_ptr = PRIVATE_DATA(matchingpath);\n  repeat_length = PRIVATE_DATA(matchingpath + 1);\n  repeat_type = PRIVATE_DATA(matchingpath + 2);\n  repeat_count = PRIVATE_DATA(matchingpath + 3);\n  SLJIT_ASSERT(repeat_length != 0 && repeat_type != 0 && repeat_count != 0);\n  if (repeat_type == OP_UPTO)\n    ket = OP_KETRMAX;\n  if (repeat_type == OP_MINUPTO)\n    ket = OP_KETRMIN;\n  }\n\nmatchingpath = ccbegin + 1 + LINK_SIZE;\nSLJIT_ASSERT(ket == OP_KET || ket == OP_KETRMAX || ket == OP_KETRMIN);\nSLJIT_ASSERT(!((bra == OP_BRAZERO && ket == OP_KETRMIN) || (bra == OP_BRAMINZERO && ket == OP_KETRMAX)));\ncc += GET(cc, 1);\n\nhas_alternatives = *cc == OP_ALT;\nif (SLJIT_UNLIKELY(opcode == OP_COND || opcode == OP_SCOND))\n  {\n  SLJIT_COMPILE_ASSERT(OP_DNRREF == OP_RREF + 1 && OP_FALSE == OP_RREF + 2 && OP_TRUE == OP_RREF + 3,\n    compile_time_checks_must_be_grouped_together);\n  has_alternatives = ((*matchingpath >= OP_RREF && *matchingpath <= OP_TRUE) || *matchingpath == OP_FAIL) ? FALSE : TRUE;\n  }\n\nif (SLJIT_UNLIKELY(opcode == OP_COND) && (*cc == OP_KETRMAX || *cc == OP_KETRMIN))\n  opcode = OP_SCOND;\n\nif (opcode == OP_CBRA || opcode == OP_SCBRA)\n  {\n  /* Capturing brackets has a pre-allocated space. */\n  offset = GET2(ccbegin, 1 + LINK_SIZE);\n  if (!is_optimized_cbracket(common, offset))\n    {\n    private_data_ptr = OVECTOR_PRIV(offset);\n    offset <<= 1;\n    }\n  else\n    {\n    offset <<= 1;\n    private_data_ptr = OVECTOR(offset);\n    }\n  BACKTRACK_AS(bracket_backtrack)->private_data_ptr = private_data_ptr;\n  matchingpath += IMM2_SIZE;\n  }\nelse if (opcode == OP_ASSERT_NA || opcode == OP_ASSERTBACK_NA || opcode == OP_ONCE\n         || opcode == OP_ASSERT_SCS || opcode == OP_SCRIPT_RUN || opcode == OP_SBRA || opcode == OP_SCOND)\n  {\n  /* Other brackets simply allocate the next entry. */\n  private_data_ptr = PRIVATE_DATA(ccbegin);\n  SLJIT_ASSERT(private_data_ptr != 0);\n  BACKTRACK_AS(bracket_backtrack)->private_data_ptr = private_data_ptr;\n  if (opcode == OP_ONCE)\n    BACKTRACK_AS(bracket_backtrack)->u.framesize = get_framesize(common, ccbegin, NULL, FALSE, &needs_control_head);\n  }\n\n/* Instructions before the first alternative. */\nstacksize = 0;\nif (ket == OP_KETRMAX || (ket == OP_KETRMIN && bra != OP_BRAMINZERO))\n  stacksize++;\nif (bra == OP_BRAZERO)\n  stacksize++;\n\nif (stacksize > 0)\n  allocate_stack(common, stacksize);\n\nstacksize = 0;\nif (ket == OP_KETRMAX || (ket == OP_KETRMIN && bra != OP_BRAMINZERO))\n  {\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), SLJIT_IMM, 0);\n  stacksize++;\n  }\n\nif (bra == OP_BRAZERO)\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), STR_PTR, 0);\n\nif (bra == OP_BRAMINZERO)\n  {\n  /* This is a backtrack path! (Since the try-path of OP_BRAMINZERO matches to the empty string) */\n  OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n  if (ket != OP_KETRMIN)\n    {\n    free_stack(common, 1);\n    braminzero = CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0);\n    }\n  else if (opcode == OP_ONCE || opcode >= OP_SBRA)\n    {\n    jump = CMP(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0);\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n    /* Nothing stored during the first run. */\n    skip = JUMP(SLJIT_JUMP);\n    JUMPHERE(jump);\n    /* Checking zero-length iteration. */\n    if (opcode != OP_ONCE || BACKTRACK_AS(bracket_backtrack)->u.framesize < 0)\n      {\n      /* When we come from outside, private_data_ptr contains the previous STR_PTR. */\n      braminzero = CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n      }\n    else\n      {\n      /* Except when the whole stack frame must be saved. */\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n      braminzero = CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_MEM1(TMP1), STACK(-BACKTRACK_AS(bracket_backtrack)->u.framesize - 2));\n      }\n    JUMPHERE(skip);\n    }\n  else\n    {\n    jump = CMP(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0);\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n    JUMPHERE(jump);\n    }\n  }\n\nif (repeat_type != 0)\n  {\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, repeat_count);\n  if (repeat_type == OP_EXACT)\n    rmax_label = LABEL();\n  }\n\nif (ket == OP_KETRMIN)\n  BACKTRACK_AS(bracket_backtrack)->recursive_matchingpath = LABEL();\n\nif (ket == OP_KETRMAX)\n  {\n  rmax_label = LABEL();\n  if (has_alternatives && opcode >= OP_BRA && opcode < OP_SBRA && repeat_type == 0)\n    BACKTRACK_AS(bracket_backtrack)->alternative_matchingpath = rmax_label;\n  }\n\n/* Handling capturing brackets and alternatives. */\nif (opcode == OP_ONCE)\n  {\n  stacksize = 0;\n  if (needs_control_head)\n    {\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);\n    stacksize++;\n    }\n\n  if (BACKTRACK_AS(bracket_backtrack)->u.framesize < 0)\n    {\n    /* Neither capturing brackets nor recursions are found in the block. */\n    if (ket == OP_KETRMIN)\n      {\n      stacksize += 2;\n      if (!needs_control_head)\n        OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n      }\n    else\n      {\n      if (BACKTRACK_AS(bracket_backtrack)->u.framesize == no_frame)\n        OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0);\n      if (ket == OP_KETRMAX || has_alternatives)\n        stacksize++;\n      }\n\n    if (stacksize > 0)\n      allocate_stack(common, stacksize);\n\n    stacksize = 0;\n    if (needs_control_head)\n      {\n      stacksize++;\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);\n      }\n\n    if (ket == OP_KETRMIN)\n      {\n      if (needs_control_head)\n        OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), STR_PTR, 0);\n      if (BACKTRACK_AS(bracket_backtrack)->u.framesize == no_frame)\n        OP2(SLJIT_ADD, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0, SLJIT_IMM, needs_control_head ? (2 * sizeof(sljit_sw)) : sizeof(sljit_sw));\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize + 1), TMP2, 0);\n      }\n    else if (ket == OP_KETRMAX || has_alternatives)\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), STR_PTR, 0);\n    }\n  else\n    {\n    if (ket != OP_KET || has_alternatives)\n      stacksize++;\n\n    stacksize += BACKTRACK_AS(bracket_backtrack)->u.framesize + 1;\n    allocate_stack(common, stacksize);\n\n    if (needs_control_head)\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);\n\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n    OP2(SLJIT_ADD, TMP2, 0, STACK_TOP, 0, SLJIT_IMM, stacksize * sizeof(sljit_sw));\n\n    stacksize = needs_control_head ? 1 : 0;\n    if (ket != OP_KET || has_alternatives)\n      {\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), STR_PTR, 0);\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP2, 0);\n      stacksize++;\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), TMP1, 0);\n      }\n    else\n      {\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP2, 0);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), TMP1, 0);\n      }\n    init_frame(common, ccbegin, NULL, BACKTRACK_AS(bracket_backtrack)->u.framesize + stacksize, stacksize + 1);\n    }\n  }\nelse if (opcode == OP_CBRA || opcode == OP_SCBRA)\n  {\n  /* Saving the previous values. */\n  if (is_optimized_cbracket(common, offset >> 1))\n    {\n    SLJIT_ASSERT(private_data_ptr == OVECTOR(offset));\n    allocate_stack(common, 2);\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw));\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STR_PTR, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP1, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), TMP2, 0);\n    }\n  else\n    {\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n    allocate_stack(common, 1);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STR_PTR, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);\n    }\n  }\nelse if (opcode == OP_ASSERTBACK_NA && PRIVATE_DATA(ccbegin + 1))\n  {\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n  allocate_stack(common, 4);\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw));\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STR_PTR, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw), STR_END, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), TMP1, 0);\n  OP1(SLJIT_MOV, STR_END, 0, STR_PTR, 0);\n\n  has_vreverse = (*matchingpath == OP_VREVERSE);\n  if (*matchingpath == OP_REVERSE || has_vreverse)\n    matchingpath = compile_reverse_matchingpath(common, matchingpath, backtrack);\n  }\nelse if (opcode == OP_ASSERT_NA || opcode == OP_ASSERTBACK_NA || opcode == OP_SCRIPT_RUN || opcode == OP_SBRA || opcode == OP_SCOND)\n  {\n  /* Saving the previous value. */\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n  allocate_stack(common, 1);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STR_PTR, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);\n\n  if (*matchingpath == OP_REVERSE)\n    matchingpath = compile_reverse_matchingpath(common, matchingpath, backtrack);\n  }\nelse if (opcode == OP_ASSERT_SCS)\n  {\n  /* Nested scs blocks will not update this variable. */\n  if (common->restore_end_ptr == 0)\n    common->restore_end_ptr = private_data_ptr + sizeof(sljit_sw);\n\n  if (*matchingpath == OP_CREF && (matchingpath[1 + IMM2_SIZE] != OP_CREF && matchingpath[1 + IMM2_SIZE] != OP_DNCREF))\n    {\n    /* Optimized case for a single capture reference. */\n    i = OVECTOR(GET2(matchingpath, 1) << 1);\n\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), i);\n\n    add_jump(compiler, &(BACKTRACK_AS(bracket_backtrack)->u.no_capture), CMP(SLJIT_EQUAL, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));\n    matchingpath += 1 + IMM2_SIZE;\n\n    allocate_stack(common, has_alternatives ? 3 : 2);\n\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n    OP1(SLJIT_MOV, SLJIT_TMP_DEST_REG, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw));\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw), STR_END, 0);\n    OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), i + sizeof(sljit_sw));\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STR_PTR, 0);\n    OP1(SLJIT_MOV, STR_PTR, 0, TMP2, 0);\n    }\n  else\n    {\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1));\n    jumplist = NULL;\n\n    while (TRUE)\n      {\n      if (*matchingpath == OP_CREF)\n        {\n        sljit_get_local_base(compiler, TMP2, 0, OVECTOR(GET2(matchingpath, 1) << 1));\n        matchingpath += 1 + IMM2_SIZE;\n        }\n      else\n        {\n        SLJIT_ASSERT(*matchingpath == OP_DNCREF);\n\n        i = GET2(matchingpath, 1 + IMM2_SIZE);\n        slot = common->name_table + GET2(matchingpath, 1) * common->name_entry_size;\n\n        while (i-- > 1)\n          {\n          sljit_get_local_base(compiler, TMP2, 0, OVECTOR(GET2(slot, 0) << 1));\n          add_jump(compiler, &jumplist, CMP(SLJIT_NOT_EQUAL, SLJIT_MEM1(TMP2), 0, TMP1, 0));\n          slot += common->name_entry_size;\n          }\n\n        sljit_get_local_base(compiler, TMP2, 0, OVECTOR(GET2(slot, 0) << 1));\n        matchingpath += 1 + 2 * IMM2_SIZE;\n        }\n\n      if (*matchingpath != OP_CREF && *matchingpath != OP_DNCREF)\n        break;\n\n      add_jump(compiler, &jumplist, CMP(SLJIT_NOT_EQUAL, SLJIT_MEM1(TMP2), 0, TMP1, 0));\n      }\n\n    add_jump(compiler, &(BACKTRACK_AS(bracket_backtrack)->u.no_capture),\n      CMP(SLJIT_EQUAL, SLJIT_MEM1(TMP2), 0, TMP1, 0));\n\n    set_jumps(jumplist, LABEL());\n\n    allocate_stack(common, has_alternatives ? 3 : 2);\n\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n    OP1(SLJIT_MOV, SLJIT_TMP_DEST_REG, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw));\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STR_PTR, 0);\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(TMP2), 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw), STR_END, 0);\n    OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));\n    }\n\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP1, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_TMP_DEST_REG, 0);\n\n  if (has_alternatives)\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(2), STR_PTR, 0);\n  }\nelse if (has_alternatives)\n  {\n  /* Pushing the starting string pointer. */\n  allocate_stack(common, 1);\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n  }\n\n/* Generating code for the first alternative. */\nif (opcode == OP_COND || opcode == OP_SCOND)\n  {\n  if (*matchingpath == OP_CREF)\n    {\n    SLJIT_ASSERT(has_alternatives);\n    add_jump(compiler, &(BACKTRACK_AS(bracket_backtrack)->u.no_capture),\n      CMP(SLJIT_EQUAL, SLJIT_MEM1(SLJIT_SP), OVECTOR(GET2(matchingpath, 1) << 1), SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));\n    matchingpath += 1 + IMM2_SIZE;\n    }\n  else if (*matchingpath == OP_DNCREF)\n    {\n    SLJIT_ASSERT(has_alternatives);\n\n    i = GET2(matchingpath, 1 + IMM2_SIZE);\n    slot = common->name_table + GET2(matchingpath, 1) * common->name_entry_size;\n    OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1));\n    OP2(SLJIT_SUB | SLJIT_SET_Z, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(GET2(slot, 0) << 1), TMP1, 0);\n    slot += common->name_entry_size;\n    i--;\n    while (i-- > 0)\n      {\n      OP2(SLJIT_SUB, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(GET2(slot, 0) << 1), TMP1, 0);\n      OP2(SLJIT_OR | SLJIT_SET_Z, TMP2, 0, TMP2, 0, STR_PTR, 0);\n      slot += common->name_entry_size;\n      }\n    OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0);\n    add_jump(compiler, &(BACKTRACK_AS(bracket_backtrack)->u.no_capture), JUMP(SLJIT_ZERO));\n    matchingpath += 1 + 2 * IMM2_SIZE;\n    }\n  else if ((*matchingpath >= OP_RREF && *matchingpath <= OP_TRUE) || *matchingpath == OP_FAIL)\n    {\n    /* Never has other case. */\n    BACKTRACK_AS(bracket_backtrack)->u.no_capture = NULL;\n    SLJIT_ASSERT(!has_alternatives);\n\n    if (*matchingpath == OP_TRUE)\n      {\n      stacksize = 1;\n      matchingpath++;\n      }\n    else if (*matchingpath == OP_FALSE || *matchingpath == OP_FAIL)\n      stacksize = 0;\n    else if (*matchingpath == OP_RREF)\n      {\n      stacksize = GET2(matchingpath, 1);\n      if (common->currententry == NULL)\n        stacksize = 0;\n      else if (stacksize == RREF_ANY)\n        stacksize = 1;\n      else if (common->currententry->start == 0)\n        stacksize = stacksize == 0;\n      else\n        stacksize = stacksize == (int)GET2(common->start, common->currententry->start + 1 + LINK_SIZE);\n\n      if (stacksize != 0)\n        matchingpath += 1 + IMM2_SIZE;\n      }\n    else\n      {\n      if (common->currententry == NULL || common->currententry->start == 0)\n        stacksize = 0;\n      else\n        {\n        stacksize = GET2(matchingpath, 1 + IMM2_SIZE);\n        slot = common->name_table + GET2(matchingpath, 1) * common->name_entry_size;\n        i = (int)GET2(common->start, common->currententry->start + 1 + LINK_SIZE);\n        while (stacksize > 0)\n          {\n          if ((int)GET2(slot, 0) == i)\n            break;\n          slot += common->name_entry_size;\n          stacksize--;\n          }\n        }\n\n      if (stacksize != 0)\n        matchingpath += 1 + 2 * IMM2_SIZE;\n      }\n\n      /* The stacksize == 0 is a common \"else\" case. */\n      if (stacksize == 0)\n        {\n        if (*cc == OP_ALT)\n          {\n          matchingpath = cc + 1 + LINK_SIZE;\n          cc += GET(cc, 1);\n          }\n        else\n          matchingpath = cc;\n        }\n    }\n  else\n    {\n    SLJIT_ASSERT(has_alternatives && *matchingpath >= OP_ASSERT && *matchingpath <= OP_ASSERTBACK_NOT);\n    /* Similar code as PUSH_BACKTRACK macro. */\n    assert = sljit_alloc_memory(compiler, sizeof(assert_backtrack));\n    if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n      return NULL;\n    memset(assert, 0, sizeof(assert_backtrack));\n    assert->common.cc = matchingpath;\n    BACKTRACK_AS(bracket_backtrack)->u.assert = assert;\n    matchingpath = compile_assert_matchingpath(common, matchingpath, assert, TRUE);\n    if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n      return NULL;\n    }\n  }\n\ncompile_matchingpath(common, matchingpath, cc, backtrack);\nif (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n  return NULL;\n\nswitch (opcode)\n  {\n  case OP_ASSERTBACK_NA:\n    if (has_vreverse)\n      {\n      SLJIT_ASSERT(backtrack->top != NULL && PRIVATE_DATA(ccbegin + 1));\n      add_jump(compiler, &backtrack->top->simple_backtracks, CMP(SLJIT_LESS, STR_PTR, 0, STR_END, 0));\n      }\n\n    if (PRIVATE_DATA(ccbegin + 1))\n      OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw));\n    break;\n  case OP_ONCE:\n    match_once_common(common, ket, BACKTRACK_AS(bracket_backtrack)->u.framesize, private_data_ptr, has_alternatives, needs_control_head);\n    break;\n  case OP_SCRIPT_RUN:\n    match_script_run_common(common, private_data_ptr, backtrack);\n    break;\n  }\n\nstacksize = 0;\nif (repeat_type == OP_MINUPTO)\n  {\n  /* We need to preserve the counter. TMP2 will be used below. */\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), repeat_ptr);\n  stacksize++;\n  }\nif (ket != OP_KET || bra != OP_BRA)\n  stacksize++;\nif (offset != 0)\n  {\n  if (common->capture_last_ptr != 0)\n    stacksize++;\n  if (!is_optimized_cbracket(common, offset >> 1))\n    stacksize += 2;\n  }\nif (has_alternatives && opcode != OP_ONCE)\n  stacksize++;\n\nif (stacksize > 0)\n  allocate_stack(common, stacksize);\n\nstacksize = 0;\nif (repeat_type == OP_MINUPTO)\n  {\n  /* TMP2 was set above. */\n  OP2(SLJIT_SUB, SLJIT_MEM1(STACK_TOP), STACK(stacksize), TMP2, 0, SLJIT_IMM, 1);\n  stacksize++;\n  }\n\nif (ket != OP_KET || bra != OP_BRA)\n  {\n  if (ket != OP_KET)\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), STR_PTR, 0);\n  else\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), SLJIT_IMM, 0);\n  stacksize++;\n  }\n\nif (offset != 0)\n  stacksize = match_capture_common(common, stacksize, offset, private_data_ptr);\n\n/* Skip and count the other alternatives. */\ni = 1;\nwhile (*cc == OP_ALT)\n  {\n  cc += GET(cc, 1);\n  i++;\n  }\n\nif (has_alternatives)\n  {\n  if (opcode != OP_ONCE)\n    {\n    if (i <= 3)\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), SLJIT_IMM, 0);\n    else\n      BACKTRACK_AS(bracket_backtrack)->matching_mov_addr = sljit_emit_op_addr(compiler, SLJIT_MOV_ADDR, SLJIT_MEM1(STACK_TOP), STACK(stacksize));\n    }\n  if (ket != OP_KETRMAX)\n    BACKTRACK_AS(bracket_backtrack)->alternative_matchingpath = LABEL();\n  }\n\n/* Must be after the matchingpath label. */\nif (offset != 0 && is_optimized_cbracket(common, offset >> 1))\n  {\n  SLJIT_ASSERT(private_data_ptr == OVECTOR(offset + 0));\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0);\n  }\nelse switch (opcode)\n  {\n  case OP_ASSERT_NA:\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n    break;\n  case OP_ASSERT_SCS:\n    OP1(SLJIT_MOV, TMP1, 0, STR_END, 0);\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n    OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw));\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw), TMP1, 0);\n\n    /* Nested scs blocks will not update this variable. */\n    if (common->restore_end_ptr == private_data_ptr + SSIZE_OF(sw))\n      common->restore_end_ptr = 0;\n    break;\n  }\n\nif (ket == OP_KETRMAX)\n  {\n  if (repeat_type != 0)\n    {\n    if (has_alternatives)\n      BACKTRACK_AS(bracket_backtrack)->alternative_matchingpath = LABEL();\n    OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1);\n    JUMPTO(SLJIT_NOT_ZERO, rmax_label);\n    /* Drop STR_PTR for greedy plus quantifier. */\n    if (opcode != OP_ONCE)\n      free_stack(common, 1);\n    }\n  else if (opcode < OP_BRA || opcode >= OP_SBRA)\n    {\n    if (has_alternatives)\n      BACKTRACK_AS(bracket_backtrack)->alternative_matchingpath = LABEL();\n\n    /* Checking zero-length iteration. */\n    if (opcode != OP_ONCE)\n      {\n      /* This case includes opcodes such as OP_SCRIPT_RUN. */\n      CMPTO(SLJIT_NOT_EQUAL, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STR_PTR, 0, rmax_label);\n      /* Drop STR_PTR for greedy plus quantifier. */\n      if (bra != OP_BRAZERO)\n        free_stack(common, 1);\n      }\n    else\n      /* TMP2 must contain the starting STR_PTR. */\n      CMPTO(SLJIT_NOT_EQUAL, TMP2, 0, STR_PTR, 0, rmax_label);\n    }\n  else\n    JUMPTO(SLJIT_JUMP, rmax_label);\n  BACKTRACK_AS(bracket_backtrack)->recursive_matchingpath = LABEL();\n  }\n\nif (repeat_type == OP_EXACT)\n  {\n  count_match(common);\n  OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1);\n  JUMPTO(SLJIT_NOT_ZERO, rmax_label);\n  }\nelse if (repeat_type == OP_UPTO)\n  {\n  /* We need to preserve the counter. */\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), repeat_ptr);\n  allocate_stack(common, 1);\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);\n  }\n\nif (bra == OP_BRAZERO)\n  BACKTRACK_AS(bracket_backtrack)->zero_matchingpath = LABEL();\n\nif (bra == OP_BRAMINZERO)\n  {\n  /* This is a backtrack path! (From the viewpoint of OP_BRAMINZERO) */\n  JUMPTO(SLJIT_JUMP, ((braminzero_backtrack *)parent)->matchingpath);\n  if (braminzero != NULL)\n    {\n    JUMPHERE(braminzero);\n    /* We need to release the end pointer to perform the\n    backtrack for the zero-length iteration. When\n    framesize is < 0, OP_ONCE will do the release itself. */\n    if (opcode == OP_ONCE)\n      {\n      int framesize = BACKTRACK_AS(bracket_backtrack)->u.framesize;\n\n      SLJIT_ASSERT(framesize != 0);\n      if (framesize > 0)\n        {\n        OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n        add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));\n        OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize - 1) * sizeof(sljit_sw));\n        }\n      }\n    else if (ket == OP_KETRMIN)\n      free_stack(common, 1);\n    }\n  /* Continue to the normal backtrack. */\n  }\n\nif ((ket != OP_KET && bra != OP_BRAMINZERO) || bra == OP_BRAZERO || (has_alternatives && repeat_type != OP_EXACT))\n  count_match(common);\n\ncc += 1 + LINK_SIZE;\n\nif (opcode == OP_ONCE)\n  {\n  int data;\n  int framesize = BACKTRACK_AS(bracket_backtrack)->u.framesize;\n\n  SLJIT_ASSERT(SHRT_MIN <= framesize && framesize < SHRT_MAX/2);\n  /* We temporarily encode the needs_control_head in the lowest bit.\n     The real value should be short enough for this operation to work\n     without triggering Undefined Behaviour. */\n  data = (int)((short)((unsigned short)framesize << 1) | (needs_control_head ? 1 : 0));\n  BACKTRACK_AS(bracket_backtrack)->u.framesize = data;\n  }\nreturn cc + repeat_length;\n}\n\nstatic PCRE2_SPTR compile_bracketpos_matchingpath(compiler_common *common, PCRE2_SPTR cc, backtrack_common *parent)\n{\nDEFINE_COMPILER;\nbacktrack_common *backtrack;\nPCRE2_UCHAR opcode;\nint private_data_ptr;\nint cbraprivptr = 0;\nBOOL needs_control_head;\nint framesize;\nint stacksize;\nint offset = 0;\nBOOL zero = FALSE;\nPCRE2_SPTR ccbegin = NULL;\nint stack; /* Also contains the offset of control head. */\nstruct sljit_label *loop = NULL;\nstruct jump_list *emptymatch = NULL;\n\nPUSH_BACKTRACK(sizeof(bracketpos_backtrack), cc, NULL);\nif (*cc == OP_BRAPOSZERO)\n  {\n  zero = TRUE;\n  cc++;\n  }\n\nopcode = *cc;\nprivate_data_ptr = PRIVATE_DATA(cc);\nSLJIT_ASSERT(private_data_ptr != 0);\nBACKTRACK_AS(bracketpos_backtrack)->private_data_ptr = private_data_ptr;\nswitch(opcode)\n  {\n  case OP_BRAPOS:\n  case OP_SBRAPOS:\n  ccbegin = cc + 1 + LINK_SIZE;\n  break;\n\n  case OP_CBRAPOS:\n  case OP_SCBRAPOS:\n  offset = GET2(cc, 1 + LINK_SIZE);\n  /* This case cannot be optimized in the same way as\n  normal capturing brackets. */\n  SLJIT_ASSERT(!is_optimized_cbracket(common, offset));\n  cbraprivptr = OVECTOR_PRIV(offset);\n  offset <<= 1;\n  ccbegin = cc + 1 + LINK_SIZE + IMM2_SIZE;\n  break;\n\n  default:\n  SLJIT_UNREACHABLE();\n  break;\n  }\n\nframesize = get_framesize(common, cc, NULL, FALSE, &needs_control_head);\nBACKTRACK_AS(bracketpos_backtrack)->framesize = framesize;\nif (framesize < 0)\n  {\n  if (offset != 0)\n    {\n    stacksize = 2;\n    if (common->capture_last_ptr != 0)\n      stacksize++;\n    }\n  else\n    stacksize = 1;\n\n  if (needs_control_head)\n    stacksize++;\n  if (!zero)\n    stacksize++;\n\n  BACKTRACK_AS(bracketpos_backtrack)->stacksize = stacksize;\n  allocate_stack(common, stacksize);\n  if (framesize == no_frame)\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0);\n\n  stack = 0;\n  if (offset != 0)\n    {\n    stack = 2;\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP1, 0);\n    if (common->capture_last_ptr != 0)\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), TMP2, 0);\n    if (needs_control_head)\n      OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);\n    if (common->capture_last_ptr != 0)\n      {\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(2), TMP1, 0);\n      stack = 3;\n      }\n    }\n  else\n    {\n    if (needs_control_head)\n      OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n    stack = 1;\n    }\n\n  if (needs_control_head)\n    stack++;\n  if (!zero)\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stack), SLJIT_IMM, 1);\n  if (needs_control_head)\n    {\n    stack--;\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stack), TMP2, 0);\n    }\n  }\nelse\n  {\n  stacksize = framesize + 1;\n  if (!zero)\n    stacksize++;\n  if (needs_control_head)\n    stacksize++;\n  if (offset == 0)\n    stacksize++;\n  BACKTRACK_AS(bracketpos_backtrack)->stacksize = stacksize;\n\n  allocate_stack(common, stacksize);\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n  if (needs_control_head)\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);\n  OP2(SLJIT_ADD, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0, SLJIT_IMM, stacksize * sizeof(sljit_sw));\n\n  stack = 0;\n  if (!zero)\n    {\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 1);\n    stack = 1;\n    }\n  if (needs_control_head)\n    {\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stack), TMP2, 0);\n    stack++;\n    }\n  if (offset == 0)\n    {\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stack), STR_PTR, 0);\n    stack++;\n    }\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stack), TMP1, 0);\n  init_frame(common, cc, NULL, stacksize - 1, stacksize - framesize);\n  stack -= 1 + (offset == 0);\n  }\n\nif (offset != 0)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), cbraprivptr, STR_PTR, 0);\n\nloop = LABEL();\nwhile (*cc != OP_KETRPOS)\n  {\n  backtrack->top = NULL;\n  backtrack->own_backtracks = NULL;\n  cc += GET(cc, 1);\n\n  compile_matchingpath(common, ccbegin, cc, backtrack);\n  if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n    return NULL;\n\n  if (framesize < 0)\n    {\n    if (framesize == no_frame)\n      OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n\n    if (offset != 0)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), cbraprivptr);\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0);\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), cbraprivptr, STR_PTR, 0);\n      if (common->capture_last_ptr != 0)\n        OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, SLJIT_IMM, offset >> 1);\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);\n      }\n    else\n      {\n      if (opcode == OP_SBRAPOS)\n        OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n      }\n\n    /* Even if the match is empty, we need to reset the control head. */\n    if (needs_control_head)\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(stack));\n\n    if (opcode == OP_SBRAPOS || opcode == OP_SCBRAPOS)\n      add_jump(compiler, &emptymatch, CMP(SLJIT_EQUAL, TMP1, 0, STR_PTR, 0));\n\n    if (!zero)\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize - 1), SLJIT_IMM, 0);\n    }\n  else\n    {\n    if (offset != 0)\n      {\n      OP2(SLJIT_SUB, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, stacksize * sizeof(sljit_sw));\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), cbraprivptr);\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0);\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), cbraprivptr, STR_PTR, 0);\n      if (common->capture_last_ptr != 0)\n        OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, SLJIT_IMM, offset >> 1);\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);\n      }\n    else\n      {\n      OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n      OP2(SLJIT_SUB, STACK_TOP, 0, TMP2, 0, SLJIT_IMM, stacksize * sizeof(sljit_sw));\n      if (opcode == OP_SBRAPOS)\n        OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), STACK(-framesize - 2));\n      OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), STACK(-framesize - 2), STR_PTR, 0);\n      }\n\n    /* Even if the match is empty, we need to reset the control head. */\n    if (needs_control_head)\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(stack));\n\n    if (opcode == OP_SBRAPOS || opcode == OP_SCBRAPOS)\n      add_jump(compiler, &emptymatch, CMP(SLJIT_EQUAL, TMP1, 0, STR_PTR, 0));\n\n    if (!zero)\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n    }\n\n  JUMPTO(SLJIT_JUMP, loop);\n  flush_stubs(common);\n\n  compile_backtrackingpath(common, backtrack->top);\n  if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n    return NULL;\n  set_jumps(backtrack->own_backtracks, LABEL());\n\n  if (framesize < 0)\n    {\n    if (offset != 0)\n      OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), cbraprivptr);\n    else\n      OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    }\n  else\n    {\n    if (offset != 0)\n      {\n      /* Last alternative. */\n      if (*cc == OP_KETRPOS)\n        OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n      OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), cbraprivptr);\n      }\n    else\n      {\n      OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n      OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(TMP2), STACK(-framesize - 2));\n      }\n    }\n\n  if (*cc == OP_KETRPOS)\n    break;\n  ccbegin = cc + 1 + LINK_SIZE;\n  }\n\n/* We don't have to restore the control head in case of a failed match. */\n\nbacktrack->own_backtracks = NULL;\nif (!zero)\n  {\n  if (framesize < 0)\n    add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_NOT_EQUAL, SLJIT_MEM1(STACK_TOP), STACK(stacksize - 1), SLJIT_IMM, 0));\n  else /* TMP2 is set to [private_data_ptr] above. */\n    add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_NOT_EQUAL, SLJIT_MEM1(TMP2), STACK(-stacksize), SLJIT_IMM, 0));\n  }\n\n/* None of them matched. */\nset_jumps(emptymatch, LABEL());\ncount_match(common);\nreturn cc + 1 + LINK_SIZE;\n}\n\nstatic SLJIT_INLINE PCRE2_SPTR get_iterator_parameters(compiler_common *common, PCRE2_SPTR cc, PCRE2_UCHAR *opcode, PCRE2_UCHAR *type, sljit_u32 *max, sljit_u32 *exact, PCRE2_SPTR *end)\n{\nint class_len;\n\n*opcode = *cc;\n*exact = 0;\n\nif (*opcode >= OP_STAR && *opcode <= OP_POSUPTO)\n  {\n  cc++;\n  *type = OP_CHAR;\n  }\nelse if (*opcode >= OP_STARI && *opcode <= OP_POSUPTOI)\n  {\n  cc++;\n  *type = OP_CHARI;\n  *opcode -= OP_STARI - OP_STAR;\n  }\nelse if (*opcode >= OP_NOTSTAR && *opcode <= OP_NOTPOSUPTO)\n  {\n  cc++;\n  *type = OP_NOT;\n  *opcode -= OP_NOTSTAR - OP_STAR;\n  }\nelse if (*opcode >= OP_NOTSTARI && *opcode <= OP_NOTPOSUPTOI)\n  {\n  cc++;\n  *type = OP_NOTI;\n  *opcode -= OP_NOTSTARI - OP_STAR;\n  }\nelse if (*opcode >= OP_TYPESTAR && *opcode <= OP_TYPEPOSUPTO)\n  {\n  cc++;\n  *opcode -= OP_TYPESTAR - OP_STAR;\n  *type = OP_END;\n  }\nelse\n  {\n  SLJIT_ASSERT(*opcode == OP_CLASS || *opcode == OP_NCLASS || *opcode == OP_XCLASS || *opcode == OP_ECLASS);\n  *type = *opcode;\n  class_len = (*type < OP_XCLASS) ? (int)(1 + (32 / sizeof(PCRE2_UCHAR))) : GET(cc, 1);\n  *opcode = cc[class_len];\n  cc++;\n\n  if (*opcode >= OP_CRSTAR && *opcode <= OP_CRMINQUERY)\n    {\n    *opcode -= OP_CRSTAR - OP_STAR;\n    *end = cc + class_len;\n\n    if (*opcode == OP_PLUS || *opcode == OP_MINPLUS)\n      {\n      *exact = 1;\n      *opcode -= OP_PLUS - OP_STAR;\n      }\n    return cc;\n    }\n\n  if (*opcode >= OP_CRPOSSTAR && *opcode <= OP_CRPOSQUERY)\n    {\n    *opcode -= OP_CRPOSSTAR - OP_POSSTAR;\n    *end = cc + class_len;\n\n    if (*opcode == OP_POSPLUS)\n      {\n      *exact = 1;\n      *opcode = OP_POSSTAR;\n      }\n    return cc;\n    }\n\n  SLJIT_ASSERT(*opcode == OP_CRRANGE || *opcode == OP_CRMINRANGE || *opcode == OP_CRPOSRANGE);\n  *max = GET2(cc, (class_len + IMM2_SIZE));\n  *exact = GET2(cc, class_len);\n  *end = cc + class_len + 2 * IMM2_SIZE;\n\n  if (*max == 0)\n    {\n    SLJIT_ASSERT(*exact > 1);\n    if (*opcode == OP_CRRANGE)\n      *opcode = OP_UPTO;\n    else if (*opcode == OP_CRPOSRANGE)\n      *opcode = OP_POSUPTO;\n    else\n      *opcode = OP_MINSTAR;\n    return cc;\n    }\n\n  *max -= *exact;\n  if (*max == 0)\n    *opcode = OP_EXACT;\n  else\n    {\n    SLJIT_ASSERT(*exact > 0 || *max > 1);\n    if (*opcode == OP_CRRANGE)\n      *opcode = OP_UPTO;\n    else if (*opcode == OP_CRPOSRANGE)\n      *opcode = OP_POSUPTO;\n    else if (*max == 1)\n      *opcode = OP_MINQUERY;\n    else\n      *opcode = OP_MINUPTO;\n    }\n  return cc;\n  }\n\nswitch(*opcode)\n  {\n  case OP_EXACT:\n  *exact = GET2(cc, 0);\n  cc += IMM2_SIZE;\n  break;\n\n  case OP_PLUS:\n  case OP_MINPLUS:\n  *exact = 1;\n  *opcode -= OP_PLUS - OP_STAR;\n  break;\n\n  case OP_POSPLUS:\n  *exact = 1;\n  *opcode = OP_POSSTAR;\n  break;\n\n  case OP_UPTO:\n  case OP_MINUPTO:\n  case OP_POSUPTO:\n  *max = GET2(cc, 0);\n  cc += IMM2_SIZE;\n  break;\n  }\n\nif (*type == OP_END)\n  {\n  *type = *cc;\n  *end = next_opcode(common, cc);\n  cc++;\n  return cc;\n  }\n\n*end = cc + 1;\n#ifdef SUPPORT_UNICODE\nif (common->utf && HAS_EXTRALEN(*cc)) *end += GET_EXTRALEN(*cc);\n#endif\nreturn cc;\n}\n\nstatic PCRE2_SPTR compile_iterator_matchingpath(compiler_common *common, PCRE2_SPTR cc, backtrack_common *parent, jump_list **prev_backtracks)\n{\nDEFINE_COMPILER;\nbacktrack_common *backtrack = NULL;\nPCRE2_SPTR begin = cc;\nPCRE2_UCHAR opcode;\nPCRE2_UCHAR type;\nsljit_u32 max = 0, exact;\nsljit_s32 early_fail_ptr = PRIVATE_DATA(cc + 1);\nsljit_s32 early_fail_type;\nBOOL charpos_enabled, use_tmp;\nPCRE2_UCHAR charpos_char;\nunsigned int charpos_othercasebit;\nPCRE2_SPTR end;\njump_list *no_match = NULL;\njump_list *no_char1_match = NULL;\nstruct sljit_jump *jump = NULL;\nstruct sljit_label *label;\nint private_data_ptr = PRIVATE_DATA(cc);\nint base = (private_data_ptr == 0) ? SLJIT_MEM1(STACK_TOP) : SLJIT_MEM1(SLJIT_SP);\nint offset0 = (private_data_ptr == 0) ? STACK(0) : private_data_ptr;\nint offset1 = (private_data_ptr == 0) ? STACK(1) : private_data_ptr + SSIZE_OF(sw);\nint tmp_base, tmp_offset;\n\nearly_fail_type = (early_fail_ptr & 0x7);\nearly_fail_ptr >>= 3;\n\n/* During recursion, these optimizations are disabled. */\nif (common->early_fail_start_ptr == 0 && common->fast_forward_bc_ptr == NULL)\n  {\n  early_fail_ptr = 0;\n  early_fail_type = type_skip;\n  }\n\nSLJIT_ASSERT(common->fast_forward_bc_ptr != NULL || early_fail_ptr == 0\n  || (early_fail_ptr >= common->early_fail_start_ptr && early_fail_ptr <= common->early_fail_end_ptr));\n\nif (early_fail_type == type_fail)\n  add_jump(compiler, prev_backtracks, CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), early_fail_ptr));\n\ncc = get_iterator_parameters(common, cc, &opcode, &type, &max, &exact, &end);\n\nif (type != OP_EXTUNI)\n  {\n  tmp_base = TMP3;\n  tmp_offset = 0;\n  }\nelse\n  {\n  tmp_base = SLJIT_MEM1(SLJIT_SP);\n  tmp_offset = LOCAL2;\n  }\n\nif (opcode == OP_EXACT)\n  {\n  SLJIT_ASSERT(early_fail_ptr == 0 && exact >= 2);\n\n  if (common->mode == PCRE2_JIT_COMPLETE\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n      && !common->utf\n#endif\n      && type != OP_ANYNL && type != OP_EXTUNI)\n    {\n    OP2(SLJIT_SUB, TMP1, 0, STR_END, 0, STR_PTR, 0);\n    add_jump(compiler, prev_backtracks, CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, IN_UCHARS(exact)));\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 32\n    if (type == OP_ALLANY && !common->invalid_utf)\n#else\n    if (type == OP_ALLANY)\n#endif\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(exact));\n    else\n      {\n      OP1(SLJIT_MOV, tmp_base, tmp_offset, SLJIT_IMM, exact);\n      label = LABEL();\n      compile_char1_matchingpath(common, type, cc, prev_backtracks, FALSE);\n      OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1);\n      JUMPTO(SLJIT_NOT_ZERO, label);\n      }\n    }\n  else\n    {\n    SLJIT_ASSERT(tmp_base == TMP3 || common->locals_size >= 3 * SSIZE_OF(sw));\n    OP1(SLJIT_MOV, tmp_base, tmp_offset, SLJIT_IMM, exact);\n    label = LABEL();\n    compile_char1_matchingpath(common, type, cc, prev_backtracks, TRUE);\n    OP2(SLJIT_SUB | SLJIT_SET_Z, tmp_base, tmp_offset, tmp_base, tmp_offset, SLJIT_IMM, 1);\n    JUMPTO(SLJIT_NOT_ZERO, label);\n    }\n  }\n\nif (early_fail_type == type_fail_range)\n  {\n  /* Range end first, followed by range start. */\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), early_fail_ptr);\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), early_fail_ptr + SSIZE_OF(sw));\n  OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, TMP2, 0);\n  OP2(SLJIT_SUB, TMP2, 0, STR_PTR, 0, TMP2, 0);\n  add_jump(compiler, prev_backtracks, CMP(SLJIT_LESS_EQUAL, TMP2, 0, TMP1, 0));\n\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr + SSIZE_OF(sw), STR_PTR, 0);\n  }\n\nif (opcode < OP_EXACT)\n  PUSH_BACKTRACK(sizeof(char_iterator_backtrack), begin, NULL);\n\nswitch(opcode)\n  {\n  case OP_STAR:\n  case OP_UPTO:\n  SLJIT_ASSERT(backtrack != NULL && (early_fail_ptr == 0 || opcode == OP_STAR));\n  max += exact;\n\n  if (type == OP_EXTUNI)\n    {\n    SLJIT_ASSERT(private_data_ptr == 0);\n    SLJIT_ASSERT(early_fail_ptr == 0);\n\n    if (exact == 1)\n      {\n      SLJIT_ASSERT(opcode == OP_STAR);\n      allocate_stack(common, 1);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n      }\n    else\n      {\n      /* If OP_EXTUNI is present, it has a separate EXACT opcode. */\n      SLJIT_ASSERT(exact == 0);\n\n      allocate_stack(common, 2);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, 0);\n      }\n\n    if (opcode == OP_UPTO)\n      {\n      SLJIT_ASSERT(common->locals_size >= 3 * SSIZE_OF(sw));\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL2, SLJIT_IMM, max);\n      }\n\n    label = LABEL();\n    compile_char1_matchingpath(common, type, cc, &backtrack->own_backtracks, TRUE);\n    if (opcode == OP_UPTO)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCAL2);\n      OP2(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, TMP1, 0, SLJIT_IMM, 1);\n      jump = JUMP(SLJIT_ZERO);\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL2, TMP1, 0);\n      }\n\n    /* We cannot use TMP3 because of allocate_stack. */\n    allocate_stack(common, 1);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n    JUMPTO(SLJIT_JUMP, label);\n    if (jump != NULL)\n      JUMPHERE(jump);\n    BACKTRACK_AS(char_iterator_backtrack)->matchingpath = LABEL();\n    break;\n    }\n#ifdef SUPPORT_UNICODE\n  else if (type == OP_ALLANY && !common->invalid_utf)\n#else\n  else if (type == OP_ALLANY)\n#endif\n    {\n    if (opcode == OP_STAR)\n      {\n      if (exact == 1)\n        detect_partial_match(common, prev_backtracks);\n\n      if (private_data_ptr == 0)\n        allocate_stack(common, 2);\n\n      OP1(SLJIT_MOV, base, offset0, STR_END, 0);\n      OP1(SLJIT_MOV, base, offset1, STR_PTR, 0);\n\n      OP1(SLJIT_MOV, STR_PTR, 0, STR_END, 0);\n      process_partial_match(common);\n\n      if (early_fail_ptr != 0)\n        OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_END, 0);\n      BACKTRACK_AS(char_iterator_backtrack)->matchingpath = LABEL();\n      break;\n      }\n#ifdef SUPPORT_UNICODE\n    else if (!common->utf)\n#else\n    else\n#endif\n      {\n      /* If OP_ALLANY is present, it has a separate EXACT opcode. */\n      SLJIT_ASSERT(exact == 0);\n\n      if (private_data_ptr == 0)\n        allocate_stack(common, 2);\n\n      OP1(SLJIT_MOV, base, offset1, STR_PTR, 0);\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(max));\n\n      if (common->mode == PCRE2_JIT_COMPLETE)\n        {\n        OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0);\n        SELECT(SLJIT_GREATER, STR_PTR, STR_END, 0, STR_PTR);\n        }\n      else\n        {\n        jump = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, STR_END, 0);\n        process_partial_match(common);\n        JUMPHERE(jump);\n        }\n\n      OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n\n      if (early_fail_ptr != 0)\n        OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0);\n      BACKTRACK_AS(char_iterator_backtrack)->matchingpath = LABEL();\n      break;\n      }\n    }\n\n  charpos_enabled = FALSE;\n  charpos_char = 0;\n  charpos_othercasebit = 0;\n\n  SLJIT_ASSERT(tmp_base == TMP3);\n  if ((type != OP_CHAR && type != OP_CHARI) && (*end == OP_CHAR || *end == OP_CHARI))\n    {\n#ifdef SUPPORT_UNICODE\n    charpos_enabled = !common->utf || !HAS_EXTRALEN(end[1]);\n#else\n    charpos_enabled = TRUE;\n#endif\n    if (charpos_enabled && *end == OP_CHARI && char_has_othercase(common, end + 1))\n      {\n      charpos_othercasebit = char_get_othercase_bit(common, end + 1);\n      if (charpos_othercasebit == 0)\n        charpos_enabled = FALSE;\n      }\n\n    if (charpos_enabled)\n      {\n      charpos_char = end[1];\n      /* Consume the OP_CHAR opcode. */\n      end += 2;\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      SLJIT_ASSERT((charpos_othercasebit >> 8) == 0);\n#elif PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n      SLJIT_ASSERT((charpos_othercasebit >> 9) == 0);\n      if ((charpos_othercasebit & 0x100) != 0)\n        charpos_othercasebit = (charpos_othercasebit & 0xff) << 8;\n#endif\n      if (charpos_othercasebit != 0)\n        charpos_char |= charpos_othercasebit;\n\n      BACKTRACK_AS(char_iterator_backtrack)->charpos.charpos_enabled = TRUE;\n      BACKTRACK_AS(char_iterator_backtrack)->charpos.chr = charpos_char;\n      BACKTRACK_AS(char_iterator_backtrack)->charpos.othercasebit = charpos_othercasebit;\n\n      if (private_data_ptr == 0)\n        allocate_stack(common, 2);\n\n      use_tmp = (opcode == OP_STAR);\n\n      if (use_tmp)\n        {\n        OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, 0);\n        OP1(SLJIT_MOV, base, offset0, TMP3, 0);\n        }\n      else\n        {\n        OP1(SLJIT_MOV, base, offset1, COUNT_MATCH, 0);\n        OP1(SLJIT_MOV, COUNT_MATCH, 0, SLJIT_IMM, 0);\n        OP1(SLJIT_MOV, base, offset0, COUNT_MATCH, 0);\n        OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, exact == max ? 0 : (max + 1));\n        }\n\n      /* Search the first instance of charpos_char. */\n      if (exact > 0)\n        detect_partial_match(common, &no_match);\n      else\n        jump = JUMP(SLJIT_JUMP);\n\n      label = LABEL();\n\n      if (opcode == OP_UPTO)\n        {\n        if (exact == max)\n          OP2(SLJIT_ADD, TMP3, 0, TMP3, 0, SLJIT_IMM, 1);\n        else\n          {\n          OP2(SLJIT_SUB | SLJIT_SET_Z, TMP3, 0, TMP3, 0, SLJIT_IMM, 1);\n          add_jump(compiler, &no_match, JUMP(SLJIT_ZERO));\n          }\n        }\n\n      compile_char1_matchingpath(common, type, cc, &no_match, FALSE);\n\n      if (early_fail_ptr != 0)\n        OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0);\n\n      if (exact == 0)\n        JUMPHERE(jump);\n\n      detect_partial_match(common, &no_match);\n\n      if (opcode == OP_UPTO && exact > 0)\n        {\n        if (exact == max)\n          CMPTO(SLJIT_LESS, TMP3, 0, SLJIT_IMM, exact, label);\n        else\n          CMPTO(SLJIT_GREATER, TMP3, 0, SLJIT_IMM, (max + 1) - exact, label);\n        }\n\n      OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n      if (charpos_othercasebit != 0)\n        OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, charpos_othercasebit);\n      CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, charpos_char, label);\n\n      OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n      if (use_tmp)\n        {\n        OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP3, 0, SLJIT_IMM, 0);\n        SELECT(SLJIT_EQUAL, TMP3, STR_PTR, 0, TMP3);\n        }\n      else\n        {\n        OP2U(SLJIT_SUB | SLJIT_SET_Z, COUNT_MATCH, 0, SLJIT_IMM, 0);\n        SELECT(SLJIT_EQUAL, COUNT_MATCH, STR_PTR, 0, COUNT_MATCH);\n        }\n      JUMPTO(SLJIT_JUMP, label);\n\n      set_jumps(no_match, LABEL());\n      OP1(SLJIT_MOV, STR_PTR, 0, base, offset0);\n      if (use_tmp)\n        OP1(SLJIT_MOV, base, offset1, TMP3, 0);\n      else\n        {\n        OP1(SLJIT_MOV, TMP1, 0, base, offset1);\n        OP1(SLJIT_MOV, base, offset1, COUNT_MATCH, 0);\n        OP1(SLJIT_MOV, COUNT_MATCH, 0, TMP1, 0);\n        }\n\n      add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0));\n\n      BACKTRACK_AS(char_iterator_backtrack)->matchingpath = LABEL();\n      OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n      break;\n      }\n    }\n\n  if (private_data_ptr == 0)\n    allocate_stack(common, 2);\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n  use_tmp = (opcode == OP_STAR);\n\n  if (common->utf)\n    {\n    if (!use_tmp)\n      OP1(SLJIT_MOV, base, offset0, COUNT_MATCH, 0);\n\n    OP1(SLJIT_MOV, use_tmp ? TMP3 : COUNT_MATCH, 0, STR_PTR, 0);\n    }\n#endif\n\n  if (opcode == OP_UPTO)\n    OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, exact == max ? -(sljit_sw)exact : (sljit_sw)max);\n\n  if (opcode == OP_UPTO && exact > 0)\n    {\n    label = LABEL();\n    detect_partial_match(common, &no_match);\n    compile_char1_matchingpath(common, type, cc, &no_char1_match, FALSE);\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n    if (common->utf)\n      OP1(SLJIT_MOV, use_tmp ? TMP3 : COUNT_MATCH, 0, STR_PTR, 0);\n#endif\n\n    if (exact == max)\n      {\n      OP2(SLJIT_ADD | SLJIT_SET_Z, TMP3, 0, TMP3, 0, SLJIT_IMM, 1);\n      JUMPTO(SLJIT_NOT_ZERO, label);\n      }\n    else\n      {\n      OP2(SLJIT_SUB | SLJIT_SET_Z, TMP3, 0, TMP3, 0, SLJIT_IMM, 1);\n      add_jump(compiler, &no_match, JUMP(SLJIT_ZERO));\n      CMPTO(SLJIT_NOT_EQUAL, TMP3, 0, SLJIT_IMM, max - exact, label);\n      }\n\n    OP1(SLJIT_MOV, base, offset1, STR_PTR, 0);\n    JUMPTO(SLJIT_JUMP, label);\n    }\n  else\n    {\n    OP1(SLJIT_MOV, base, offset1, STR_PTR, 0);\n\n    detect_partial_match(common, &no_match);\n    label = LABEL();\n    compile_char1_matchingpath(common, type, cc, &no_char1_match, FALSE);\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n    if (common->utf)\n      OP1(SLJIT_MOV, use_tmp ? TMP3 : COUNT_MATCH, 0, STR_PTR, 0);\n#endif\n\n    if (opcode == OP_UPTO)\n      {\n      OP2(SLJIT_SUB | SLJIT_SET_Z, TMP3, 0, TMP3, 0, SLJIT_IMM, 1);\n      add_jump(compiler, &no_match, JUMP(SLJIT_ZERO));\n      }\n\n    detect_partial_match_to(common, label);\n    }\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n  if (common->utf)\n    {\n    set_jumps(no_char1_match, LABEL());\n    set_jumps(no_match, LABEL());\n    if (use_tmp)\n      {\n      OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0);\n      OP1(SLJIT_MOV, base, offset0, TMP3, 0);\n      }\n    else\n      {\n      OP1(SLJIT_MOV, STR_PTR, 0, COUNT_MATCH, 0);\n      OP1(SLJIT_MOV, COUNT_MATCH, 0, base, offset0);\n      OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n      }\n    }\n  else\n#endif\n    {\n    if (opcode != OP_UPTO || exact == 0)\n      OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    set_jumps(no_char1_match, LABEL());\n\n    OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n    set_jumps(no_match, LABEL());\n    OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n    }\n\n  if (opcode == OP_UPTO)\n    {\n    if (exact > 0)\n      {\n      if (max == exact)\n        jump = CMP(SLJIT_GREATER_EQUAL, TMP3, 0, SLJIT_IMM, -(sljit_sw)exact);\n      else\n        jump = CMP(SLJIT_GREATER, TMP3, 0, SLJIT_IMM, max - exact);\n\n      add_jump(compiler, &backtrack->own_backtracks, jump);\n      }\n    }\n  else if (exact == 1)\n    add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, base, offset1, STR_PTR, 0));\n\n  if (early_fail_ptr != 0)\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0);\n\n  BACKTRACK_AS(char_iterator_backtrack)->matchingpath = LABEL();\n  break;\n\n  case OP_QUERY:\n  SLJIT_ASSERT(backtrack != NULL && early_fail_ptr == 0);\n  if (private_data_ptr == 0)\n    allocate_stack(common, 1);\n  OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n  compile_char1_matchingpath(common, type, cc, &backtrack->own_backtracks, TRUE);\n  BACKTRACK_AS(char_iterator_backtrack)->matchingpath = LABEL();\n  break;\n\n  case OP_MINSTAR:\n  case OP_MINQUERY:\n  SLJIT_ASSERT(backtrack != NULL && (opcode == OP_MINSTAR || early_fail_ptr == 0));\n  if (private_data_ptr == 0)\n    allocate_stack(common, 1);\n\n  if (exact >= 1)\n    {\n    if (exact >= 2)\n      {\n      /* Extuni has a separate exact opcode. */\n      SLJIT_ASSERT(tmp_base == TMP3 && early_fail_ptr == 0);\n      OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, exact);\n      }\n\n    if (opcode == OP_MINQUERY)\n      OP1(SLJIT_MOV, base, offset0, SLJIT_IMM, -1);\n\n    label = LABEL();\n    BACKTRACK_AS(char_iterator_backtrack)->matchingpath = label;\n\n    compile_char1_matchingpath(common, type, cc, &backtrack->own_backtracks, TRUE);\n\n    if (exact >= 2)\n      {\n      OP2(SLJIT_SUB | SLJIT_SET_Z, TMP3, 0, TMP3, 0, SLJIT_IMM, 1);\n      JUMPTO(SLJIT_NOT_ZERO, label);\n      }\n\n    if (opcode == OP_MINQUERY)\n      OP2(SLJIT_AND, base, offset0, base, offset0, STR_PTR, 0);\n    else\n      OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n    }\n  else\n    {\n    OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n    BACKTRACK_AS(char_iterator_backtrack)->matchingpath = LABEL();\n    }\n\n  if (early_fail_ptr != 0)\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0);\n  break;\n\n  case OP_MINUPTO:\n  SLJIT_ASSERT(backtrack != NULL && early_fail_ptr == 0);\n  if (private_data_ptr == 0)\n    allocate_stack(common, 2);\n\n  OP1(SLJIT_MOV, base, offset1, SLJIT_IMM, max + 1);\n\n  if (exact == 0)\n    {\n    OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n    BACKTRACK_AS(char_iterator_backtrack)->matchingpath = LABEL();\n    break;\n    }\n\n  if (exact >= 2)\n    {\n    /* Extuni has a separate exact opcode. */\n    SLJIT_ASSERT(tmp_base == TMP3);\n    OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, exact);\n    }\n\n  label = LABEL();\n  BACKTRACK_AS(char_iterator_backtrack)->matchingpath = label;\n\n  compile_char1_matchingpath(common, type, cc, &backtrack->own_backtracks, TRUE);\n\n  if (exact >= 2)\n    {\n    OP2(SLJIT_SUB | SLJIT_SET_Z, TMP3, 0, TMP3, 0, SLJIT_IMM, 1);\n    JUMPTO(SLJIT_NOT_ZERO, label);\n    }\n\n  OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n  break;\n\n  case OP_EXACT:\n  SLJIT_ASSERT(backtrack == NULL);\n  break;\n\n  case OP_POSSTAR:\n  SLJIT_ASSERT(backtrack == NULL);\n#if defined SUPPORT_UNICODE\n  if (type == OP_ALLANY && !common->invalid_utf)\n#else\n  if (type == OP_ALLANY)\n#endif\n    {\n    if (exact == 1)\n      detect_partial_match(common, prev_backtracks);\n\n    OP1(SLJIT_MOV, STR_PTR, 0, STR_END, 0);\n    process_partial_match(common);\n    if (early_fail_ptr != 0)\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_END, 0);\n    break;\n    }\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n  if (common->utf)\n    {\n    SLJIT_ASSERT(tmp_base == TMP3 || common->locals_size >= 3 * SSIZE_OF(sw));\n\n    if (tmp_base != TMP3)\n      {\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL2, COUNT_MATCH, 0);\n      tmp_base = COUNT_MATCH;\n      }\n\n    OP1(SLJIT_MOV, tmp_base, 0, exact == 1 ? SLJIT_IMM : STR_PTR, 0);\n    detect_partial_match(common, &no_match);\n    label = LABEL();\n    compile_char1_matchingpath(common, type, cc, &no_match, FALSE);\n    OP1(SLJIT_MOV, tmp_base, 0, STR_PTR, 0);\n    detect_partial_match_to(common, label);\n\n    set_jumps(no_match, LABEL());\n    OP1(SLJIT_MOV, STR_PTR, 0, tmp_base, 0);\n\n    if (tmp_base != TMP3)\n      OP1(SLJIT_MOV, COUNT_MATCH, 0, SLJIT_MEM1(SLJIT_SP), LOCAL2);\n\n    if (exact == 1)\n      add_jump(compiler, prev_backtracks, CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0));\n\n    if (early_fail_ptr != 0)\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0);\n    break;\n    }\n#endif\n\n  if (exact == 1)\n    OP1(SLJIT_MOV, tmp_base, tmp_offset, STR_PTR, 0);\n\n  detect_partial_match(common, &no_match);\n  label = LABEL();\n  /* Extuni never fails, so no_char1_match is not used in that case.\n     Anynl optionally reads an extra character on success. */\n  compile_char1_matchingpath(common, type, cc, &no_char1_match, FALSE);\n  detect_partial_match_to(common, label);\n  if (type != OP_EXTUNI)\n    OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\n  set_jumps(no_char1_match, LABEL());\n  if (type != OP_EXTUNI)\n    OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\n  set_jumps(no_match, LABEL());\n\n  if (exact == 1)\n    add_jump(compiler, prev_backtracks, CMP(SLJIT_EQUAL, tmp_base, tmp_offset, STR_PTR, 0));\n\n  if (early_fail_ptr != 0)\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), early_fail_ptr, STR_PTR, 0);\n  break;\n\n  case OP_POSUPTO:\n  SLJIT_ASSERT(backtrack == NULL && early_fail_ptr == 0);\n  max += exact;\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\n  if (type == OP_EXTUNI || common->utf)\n#else\n  if (type == OP_EXTUNI)\n#endif\n    {\n    SLJIT_ASSERT(common->locals_size >= 3 * SSIZE_OF(sw));\n\n    /* Count match is not modified by compile_char1_matchingpath. */\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL2, COUNT_MATCH, 0);\n    OP1(SLJIT_MOV, COUNT_MATCH, 0, SLJIT_IMM, exact == max ? 0 : max);\n\n    label = LABEL();\n    /* Extuni only modifies TMP3 on successful match. */\n    OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);\n    compile_char1_matchingpath(common, type, cc, &no_match, TRUE);\n\n    if (exact == max)\n      {\n      OP2(SLJIT_ADD, COUNT_MATCH, 0, COUNT_MATCH, 0, SLJIT_IMM, 1);\n      JUMPTO(SLJIT_JUMP, label);\n      }\n    else\n      {\n      OP2(SLJIT_SUB | SLJIT_SET_Z, COUNT_MATCH, 0, COUNT_MATCH, 0, SLJIT_IMM, 1);\n      JUMPTO(SLJIT_NOT_ZERO, label);\n      OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);\n      }\n\n    set_jumps(no_match, LABEL());\n\n    if (exact > 0)\n      {\n      if (exact == max)\n        OP2U(SLJIT_SUB | SLJIT_SET_LESS, COUNT_MATCH, 0, SLJIT_IMM, exact);\n      else\n        OP2U(SLJIT_SUB | SLJIT_SET_GREATER, COUNT_MATCH, 0, SLJIT_IMM, max - exact);\n      }\n\n    OP1(SLJIT_MOV, COUNT_MATCH, 0, SLJIT_MEM1(SLJIT_SP), LOCAL2);\n\n    if (exact > 0)\n      add_jump(compiler, prev_backtracks, JUMP(exact == max ? SLJIT_LESS : SLJIT_GREATER));\n    OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0);\n    break;\n    }\n\n  SLJIT_ASSERT(tmp_base == TMP3);\n\n  OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, exact == max ? 0 : max);\n\n  detect_partial_match(common, &no_match);\n  label = LABEL();\n  compile_char1_matchingpath(common, type, cc, &no_char1_match, FALSE);\n\n  if (exact == max)\n    OP2(SLJIT_ADD, TMP3, 0, TMP3, 0, SLJIT_IMM, 1);\n  else\n    {\n    OP2(SLJIT_SUB | SLJIT_SET_Z, TMP3, 0, TMP3, 0, SLJIT_IMM, 1);\n    add_jump(compiler, &no_match, JUMP(SLJIT_ZERO));\n    }\n  detect_partial_match_to(common, label);\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n\n  set_jumps(no_char1_match, LABEL());\n  OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  set_jumps(no_match, LABEL());\n\n  if (exact > 0)\n    {\n    if (exact == max)\n      jump = CMP(SLJIT_LESS, TMP3, 0, SLJIT_IMM, exact);\n    else\n      jump = CMP(SLJIT_GREATER, TMP3, 0, SLJIT_IMM, max - exact);\n\n    add_jump(compiler, prev_backtracks, jump);\n    }\n  break;\n\n  case OP_POSQUERY:\n  SLJIT_ASSERT(backtrack == NULL && early_fail_ptr == 0);\n  SLJIT_ASSERT(tmp_base == TMP3 || common->locals_size >= 3 * SSIZE_OF(sw));\n  OP1(SLJIT_MOV, tmp_base, tmp_offset, STR_PTR, 0);\n  compile_char1_matchingpath(common, type, cc, &no_match, TRUE);\n  OP1(SLJIT_MOV, tmp_base, tmp_offset, STR_PTR, 0);\n  set_jumps(no_match, LABEL());\n  OP1(SLJIT_MOV, STR_PTR, 0, tmp_base, tmp_offset);\n  break;\n\n  default:\n  SLJIT_UNREACHABLE();\n  break;\n  }\n\ncount_match(common);\nreturn end;\n}\n\nstatic SLJIT_INLINE PCRE2_SPTR compile_fail_accept_matchingpath(compiler_common *common, PCRE2_SPTR cc, backtrack_common *parent)\n{\nDEFINE_COMPILER;\nbacktrack_common *backtrack;\n\nPUSH_BACKTRACK(sizeof(backtrack_common), cc, NULL);\n\nif (*cc == OP_FAIL)\n  {\n  add_jump(compiler, &backtrack->own_backtracks, JUMP(SLJIT_JUMP));\n  return cc + 1;\n  }\n\nif (*cc == OP_ACCEPT && common->currententry == NULL && (common->re->overall_options & PCRE2_ENDANCHORED) != 0)\n  add_jump(compiler, &common->restart_match, CMP(SLJIT_NOT_EQUAL, STR_PTR, 0, STR_END, 0));\n\nif (*cc == OP_ASSERT_ACCEPT || common->currententry != NULL || !common->might_be_empty)\n  {\n  /* No need to check notempty conditions. */\n  if (common->accept_label == NULL)\n    add_jump(compiler, &common->accept, JUMP(SLJIT_JUMP));\n  else\n    JUMPTO(SLJIT_JUMP, common->accept_label);\n  return cc + 1;\n  }\n\nif (common->accept_label == NULL)\n  add_jump(compiler, &common->accept, CMP(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0)));\nelse\n  CMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0), common->accept_label);\n\nif (HAS_VIRTUAL_REGISTERS)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n  OP1(SLJIT_MOV_U32, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, options));\n  }\nelse\n  OP1(SLJIT_MOV_U32, TMP2, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options));\n\nOP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY);\nadd_jump(compiler, &backtrack->own_backtracks, JUMP(SLJIT_NOT_ZERO));\nOP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY_ATSTART);\nif (common->accept_label == NULL)\n  add_jump(compiler, &common->accept, JUMP(SLJIT_ZERO));\nelse\n  JUMPTO(SLJIT_ZERO, common->accept_label);\n\nOP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(HAS_VIRTUAL_REGISTERS ? TMP1 : ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, str));\nif (common->accept_label == NULL)\n  add_jump(compiler, &common->accept, CMP(SLJIT_NOT_EQUAL, TMP2, 0, STR_PTR, 0));\nelse\n  CMPTO(SLJIT_NOT_EQUAL, TMP2, 0, STR_PTR, 0, common->accept_label);\nadd_jump(compiler, &backtrack->own_backtracks, JUMP(SLJIT_JUMP));\nreturn cc + 1;\n}\n\nstatic SLJIT_INLINE PCRE2_SPTR compile_close_matchingpath(compiler_common *common, PCRE2_SPTR cc)\n{\nDEFINE_COMPILER;\nint offset = GET2(cc, 1);\nBOOL optimized_cbracket = is_optimized_cbracket(common, offset);\n\n/* Data will be discarded anyway... */\nif (common->currententry != NULL)\n  return cc + 1 + IMM2_SIZE;\n\nif (!optimized_cbracket)\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR_PRIV(offset));\noffset <<= 1;\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0);\nif (!optimized_cbracket)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);\nreturn cc + 1 + IMM2_SIZE;\n}\n\nstatic SLJIT_INLINE PCRE2_SPTR compile_control_verb_matchingpath(compiler_common *common, PCRE2_SPTR cc, backtrack_common *parent)\n{\nDEFINE_COMPILER;\nbacktrack_common *backtrack;\nPCRE2_UCHAR opcode = *cc;\nPCRE2_SPTR ccend = cc + 1;\n\nif (opcode == OP_COMMIT_ARG || opcode == OP_PRUNE_ARG ||\n    opcode == OP_SKIP_ARG || opcode == OP_THEN_ARG)\n  ccend += 2 + cc[1];\n\nPUSH_BACKTRACK(sizeof(backtrack_common), cc, NULL);\n\nif (opcode == OP_SKIP)\n  {\n  allocate_stack(common, 1);\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n  return ccend;\n  }\n\nif (opcode == OP_COMMIT_ARG || opcode == OP_PRUNE_ARG || opcode == OP_THEN_ARG)\n  {\n  if (HAS_VIRTUAL_REGISTERS)\n    OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_sw)(cc + 2));\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->mark_ptr, TMP2, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(HAS_VIRTUAL_REGISTERS ? TMP1 : ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, mark_ptr), TMP2, 0);\n  }\n\nreturn ccend;\n}\n\nstatic PCRE2_UCHAR then_trap_opcode[1] = { OP_THEN_TRAP };\n\nstatic SLJIT_INLINE void compile_then_trap_matchingpath(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, backtrack_common *parent)\n{\nDEFINE_COMPILER;\nbacktrack_common *backtrack;\nBOOL needs_control_head;\nint size;\n\nPUSH_BACKTRACK_NOVALUE(sizeof(then_trap_backtrack), cc);\ncommon->then_trap = BACKTRACK_AS(then_trap_backtrack);\nBACKTRACK_AS(then_trap_backtrack)->common.cc = then_trap_opcode;\nBACKTRACK_AS(then_trap_backtrack)->start = (sljit_sw)(cc - common->start);\nBACKTRACK_AS(then_trap_backtrack)->framesize = get_framesize(common, cc, ccend, FALSE, &needs_control_head);\n\nsize = BACKTRACK_AS(then_trap_backtrack)->framesize;\nsize = 3 + (size < 0 ? 0 : size);\n\nOP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);\nallocate_stack(common, size);\nif (size > 3)\n  OP2(SLJIT_ADD, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, STACK_TOP, 0, SLJIT_IMM, (size - 3) * sizeof(sljit_sw));\nelse\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, STACK_TOP, 0);\nOP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(size - 1), SLJIT_IMM, BACKTRACK_AS(then_trap_backtrack)->start);\nOP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(size - 2), SLJIT_IMM, type_then_trap);\nOP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(size - 3), TMP2, 0);\n\nsize = BACKTRACK_AS(then_trap_backtrack)->framesize;\nif (size >= 0)\n  init_frame(common, cc, ccend, size - 1, 0);\n}\n\nstatic void compile_matchingpath(compiler_common *common, PCRE2_SPTR cc, PCRE2_SPTR ccend, backtrack_common *parent)\n{\nDEFINE_COMPILER;\nbacktrack_common *backtrack;\nBOOL has_then_trap = FALSE;\nthen_trap_backtrack *save_then_trap = NULL;\nsize_t op_len;\n\nSLJIT_ASSERT(*ccend == OP_END || (*ccend >= OP_ALT && *ccend <= OP_KETRPOS));\n\nif (common->has_then && common->then_offsets[cc - common->start] != 0)\n  {\n  SLJIT_ASSERT(*ccend != OP_END && common->control_head_ptr != 0);\n  has_then_trap = TRUE;\n  save_then_trap = common->then_trap;\n  /* Tail item on backtrack. */\n  compile_then_trap_matchingpath(common, cc, ccend, parent);\n  }\n\nwhile (cc < ccend)\n  {\n  switch(*cc)\n    {\n    case OP_SOD:\n    case OP_SOM:\n    case OP_NOT_WORD_BOUNDARY:\n    case OP_WORD_BOUNDARY:\n    case OP_EODN:\n    case OP_EOD:\n    case OP_DOLL:\n    case OP_DOLLM:\n    case OP_CIRC:\n    case OP_CIRCM:\n    case OP_NOT_UCP_WORD_BOUNDARY:\n    case OP_UCP_WORD_BOUNDARY:\n    cc = compile_simple_assertion_matchingpath(common, *cc, cc + 1, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks);\n    break;\n\n    case OP_NOT_DIGIT:\n    case OP_DIGIT:\n    case OP_NOT_WHITESPACE:\n    case OP_WHITESPACE:\n    case OP_NOT_WORDCHAR:\n    case OP_WORDCHAR:\n    case OP_ANY:\n    case OP_ALLANY:\n    case OP_ANYBYTE:\n    case OP_NOTPROP:\n    case OP_PROP:\n    case OP_ANYNL:\n    case OP_NOT_HSPACE:\n    case OP_HSPACE:\n    case OP_NOT_VSPACE:\n    case OP_VSPACE:\n    case OP_EXTUNI:\n    case OP_NOT:\n    case OP_NOTI:\n    cc = compile_char1_matchingpath(common, *cc, cc + 1, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks, TRUE);\n    break;\n\n    case OP_SET_SOM:\n    PUSH_BACKTRACK_NOVALUE(sizeof(backtrack_common), cc);\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0));\n    allocate_stack(common, 1);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(0), STR_PTR, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);\n    cc++;\n    break;\n\n    case OP_CHAR:\n    case OP_CHARI:\n    if (common->mode == PCRE2_JIT_COMPLETE)\n      cc = compile_charn_matchingpath(common, cc, ccend, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks);\n    else\n      cc = compile_char1_matchingpath(common, *cc, cc + 1, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks, TRUE);\n    break;\n\n    case OP_STAR:\n    case OP_MINSTAR:\n    case OP_PLUS:\n    case OP_MINPLUS:\n    case OP_QUERY:\n    case OP_MINQUERY:\n    case OP_UPTO:\n    case OP_MINUPTO:\n    case OP_EXACT:\n    case OP_POSSTAR:\n    case OP_POSPLUS:\n    case OP_POSQUERY:\n    case OP_POSUPTO:\n    case OP_STARI:\n    case OP_MINSTARI:\n    case OP_PLUSI:\n    case OP_MINPLUSI:\n    case OP_QUERYI:\n    case OP_MINQUERYI:\n    case OP_UPTOI:\n    case OP_MINUPTOI:\n    case OP_EXACTI:\n    case OP_POSSTARI:\n    case OP_POSPLUSI:\n    case OP_POSQUERYI:\n    case OP_POSUPTOI:\n    case OP_NOTSTAR:\n    case OP_NOTMINSTAR:\n    case OP_NOTPLUS:\n    case OP_NOTMINPLUS:\n    case OP_NOTQUERY:\n    case OP_NOTMINQUERY:\n    case OP_NOTUPTO:\n    case OP_NOTMINUPTO:\n    case OP_NOTEXACT:\n    case OP_NOTPOSSTAR:\n    case OP_NOTPOSPLUS:\n    case OP_NOTPOSQUERY:\n    case OP_NOTPOSUPTO:\n    case OP_NOTSTARI:\n    case OP_NOTMINSTARI:\n    case OP_NOTPLUSI:\n    case OP_NOTMINPLUSI:\n    case OP_NOTQUERYI:\n    case OP_NOTMINQUERYI:\n    case OP_NOTUPTOI:\n    case OP_NOTMINUPTOI:\n    case OP_NOTEXACTI:\n    case OP_NOTPOSSTARI:\n    case OP_NOTPOSPLUSI:\n    case OP_NOTPOSQUERYI:\n    case OP_NOTPOSUPTOI:\n    case OP_TYPESTAR:\n    case OP_TYPEMINSTAR:\n    case OP_TYPEPLUS:\n    case OP_TYPEMINPLUS:\n    case OP_TYPEQUERY:\n    case OP_TYPEMINQUERY:\n    case OP_TYPEUPTO:\n    case OP_TYPEMINUPTO:\n    case OP_TYPEEXACT:\n    case OP_TYPEPOSSTAR:\n    case OP_TYPEPOSPLUS:\n    case OP_TYPEPOSQUERY:\n    case OP_TYPEPOSUPTO:\n    cc = compile_iterator_matchingpath(common, cc, parent, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks);\n    break;\n\n    case OP_CLASS:\n    case OP_NCLASS:\n    if (cc[1 + (32 / sizeof(PCRE2_UCHAR))] >= OP_CRSTAR && cc[1 + (32 / sizeof(PCRE2_UCHAR))] <= OP_CRPOSRANGE)\n      cc = compile_iterator_matchingpath(common, cc, parent, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks);\n    else\n      cc = compile_char1_matchingpath(common, *cc, cc + 1, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks, TRUE);\n    break;\n\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n    case OP_XCLASS:\n    case OP_ECLASS:\n    op_len = GET(cc, 1);\n    if (cc[op_len] >= OP_CRSTAR && cc[op_len] <= OP_CRPOSRANGE)\n      cc = compile_iterator_matchingpath(common, cc, parent, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks);\n    else\n      cc = compile_char1_matchingpath(common, *cc, cc + 1, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks, TRUE);\n    break;\n#endif\n\n    case OP_REF:\n    case OP_REFI:\n    op_len = PRIV(OP_lengths)[*cc];\n    if (cc[op_len] >= OP_CRSTAR && cc[op_len] <= OP_CRPOSRANGE)\n      cc = compile_ref_iterator_matchingpath(common, cc, parent);\n    else\n      {\n      compile_ref_matchingpath(common, cc, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks, TRUE, FALSE);\n      cc += op_len;\n      }\n    break;\n\n    case OP_DNREF:\n    case OP_DNREFI:\n    op_len = PRIV(OP_lengths)[*cc];\n    if (cc[op_len] >= OP_CRSTAR && cc[op_len] <= OP_CRPOSRANGE)\n      cc = compile_ref_iterator_matchingpath(common, cc, parent);\n    else\n      {\n      compile_dnref_search(common, cc, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks);\n      compile_ref_matchingpath(common, cc, parent->top != NULL ? &parent->top->simple_backtracks : &parent->own_backtracks, TRUE, FALSE);\n      cc += op_len;\n      }\n    break;\n\n    case OP_RECURSE:\n    cc = compile_recurse_matchingpath(common, cc, parent);\n    break;\n\n    case OP_CALLOUT:\n    case OP_CALLOUT_STR:\n    cc = compile_callout_matchingpath(common, cc, parent);\n    break;\n\n    case OP_ASSERT:\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK:\n    case OP_ASSERTBACK_NOT:\n    PUSH_BACKTRACK_NOVALUE(sizeof(assert_backtrack), cc);\n    cc = compile_assert_matchingpath(common, cc, BACKTRACK_AS(assert_backtrack), FALSE);\n    break;\n\n    case OP_BRAMINZERO:\n    PUSH_BACKTRACK_NOVALUE(sizeof(braminzero_backtrack), cc);\n    cc = bracketend(cc + 1);\n    if (*(cc - 1 - LINK_SIZE) != OP_KETRMIN)\n      {\n      allocate_stack(common, 1);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n      }\n    else\n      {\n      allocate_stack(common, 2);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), STR_PTR, 0);\n      }\n    BACKTRACK_AS(braminzero_backtrack)->matchingpath = LABEL();\n    count_match(common);\n    break;\n\n    case OP_ASSERT_NA:\n    case OP_ASSERTBACK_NA:\n    case OP_ASSERT_SCS:\n    case OP_ONCE:\n    case OP_SCRIPT_RUN:\n    case OP_BRA:\n    case OP_CBRA:\n    case OP_COND:\n    case OP_SBRA:\n    case OP_SCBRA:\n    case OP_SCOND:\n    cc = compile_bracket_matchingpath(common, cc, parent);\n    break;\n\n    case OP_BRAZERO:\n    if (cc[1] > OP_ASSERTBACK_NOT)\n      cc = compile_bracket_matchingpath(common, cc, parent);\n    else\n      {\n      PUSH_BACKTRACK_NOVALUE(sizeof(assert_backtrack), cc);\n      cc = compile_assert_matchingpath(common, cc, BACKTRACK_AS(assert_backtrack), FALSE);\n      }\n    break;\n\n    case OP_BRAPOS:\n    case OP_CBRAPOS:\n    case OP_SBRAPOS:\n    case OP_SCBRAPOS:\n    case OP_BRAPOSZERO:\n    cc = compile_bracketpos_matchingpath(common, cc, parent);\n    break;\n\n    case OP_MARK:\n    PUSH_BACKTRACK_NOVALUE(sizeof(backtrack_common), cc);\n    SLJIT_ASSERT(common->mark_ptr != 0);\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->mark_ptr);\n    allocate_stack(common, common->has_skip_arg ? 5 : 1);\n    if (HAS_VIRTUAL_REGISTERS)\n      OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(common->has_skip_arg ? 4 : 0), TMP2, 0);\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_sw)(cc + 2));\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->mark_ptr, TMP2, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(HAS_VIRTUAL_REGISTERS ? TMP1 : ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, mark_ptr), TMP2, 0);\n    if (common->has_skip_arg)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, STACK_TOP, 0);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, type_mark);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(2), SLJIT_IMM, (sljit_sw)(cc + 2));\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(3), STR_PTR, 0);\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP1, 0);\n      }\n    cc += 1 + 2 + cc[1];\n    break;\n\n    case OP_PRUNE:\n    case OP_PRUNE_ARG:\n    case OP_SKIP:\n    case OP_SKIP_ARG:\n    case OP_THEN:\n    case OP_THEN_ARG:\n    case OP_COMMIT:\n    case OP_COMMIT_ARG:\n    cc = compile_control_verb_matchingpath(common, cc, parent);\n    break;\n\n    case OP_FAIL:\n    case OP_ACCEPT:\n    case OP_ASSERT_ACCEPT:\n    cc = compile_fail_accept_matchingpath(common, cc, parent);\n    break;\n\n    case OP_CLOSE:\n    cc = compile_close_matchingpath(common, cc);\n    break;\n\n    case OP_SKIPZERO:\n    cc = bracketend(cc + 1);\n    break;\n\n    default:\n    SLJIT_UNREACHABLE();\n    return;\n    }\n  if (cc == NULL)\n    return;\n  }\n\nif (has_then_trap)\n  {\n  /* Head item on backtrack. */\n  PUSH_BACKTRACK_NOVALUE(sizeof(then_trap_backtrack), cc);\n  BACKTRACK_AS(then_trap_backtrack)->common.cc = then_trap_opcode;\n  BACKTRACK_AS(then_trap_backtrack)->then_trap = common->then_trap;\n  common->then_trap = save_then_trap;\n  }\nSLJIT_ASSERT(cc == ccend);\n}\n\n#undef PUSH_BACKTRACK\n#undef PUSH_BACKTRACK_NOVALUE\n#undef BACKTRACK_AS\n\n#define COMPILE_BACKTRACKINGPATH(current) \\\n  do \\\n    { \\\n    compile_backtrackingpath(common, (current)); \\\n    if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler))) \\\n      return; \\\n    } \\\n  while (0)\n\n#define CURRENT_AS(type) ((type *)current)\n\nstatic void compile_newline_move_back(compiler_common *common)\n{\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\n\nOP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\njump = CMP(SLJIT_LESS_EQUAL, TMP1, 0, TMP2, 0);\n/* All newlines are single byte, or their last byte\nis not equal to CHAR_NL/CHAR_CR even if UTF is enabled. */\nOP1(MOV_UCHAR, SLJIT_TMP_DEST_REG, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-2));\nOP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-1));\nOP2(SLJIT_SHL, SLJIT_TMP_DEST_REG, 0, SLJIT_TMP_DEST_REG, 0, SLJIT_IMM, 8);\nOP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_TMP_DEST_REG, 0);\nOP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, CHAR_CR << 8 | CHAR_NL);\nOP_FLAGS(SLJIT_MOV, TMP1, 0, SLJIT_EQUAL);\n#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, SLJIT_IMM, UCHAR_SHIFT);\n#endif\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\nJUMPHERE(jump);\n}\n\nstatic void compile_iterator_backtrackingpath(compiler_common *common, struct backtrack_common *current)\n{\nDEFINE_COMPILER;\nPCRE2_SPTR cc = current->cc;\nPCRE2_UCHAR opcode;\nPCRE2_UCHAR type;\nsljit_u32 max = 0, exact;\nstruct sljit_label *label = NULL;\nstruct sljit_jump *jump = NULL;\njump_list *jumplist = NULL;\nPCRE2_SPTR end;\nint private_data_ptr = PRIVATE_DATA(cc);\nint base = (private_data_ptr == 0) ? SLJIT_MEM1(STACK_TOP) : SLJIT_MEM1(SLJIT_SP);\nint offset0 = (private_data_ptr == 0) ? STACK(0) : private_data_ptr;\nint offset1 = (private_data_ptr == 0) ? STACK(1) : private_data_ptr + SSIZE_OF(sw);\n\ncc = get_iterator_parameters(common, cc, &opcode, &type, &max, &exact, &end);\n\nswitch(opcode)\n  {\n  case OP_STAR:\n  case OP_UPTO:\n  if (type == OP_EXTUNI)\n    {\n    SLJIT_ASSERT(private_data_ptr == 0);\n    set_jumps(current->own_backtracks, LABEL());\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    free_stack(common, 1);\n    CMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0, CURRENT_AS(char_iterator_backtrack)->matchingpath);\n    }\n  else\n    {\n    if (CURRENT_AS(char_iterator_backtrack)->charpos.charpos_enabled)\n      {\n      OP1(SLJIT_MOV, STR_PTR, 0, base, offset0);\n      OP1(SLJIT_MOV, TMP2, 0, base, offset1);\n\n      jump = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0);\n      label = LABEL();\n      if (type == OP_ANYNL)\n        compile_newline_move_back(common);\n      move_back(common, NULL, TRUE);\n\n      OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0));\n      if (CURRENT_AS(char_iterator_backtrack)->charpos.othercasebit != 0)\n        OP2(SLJIT_OR, TMP1, 0, TMP1, 0, SLJIT_IMM, CURRENT_AS(char_iterator_backtrack)->charpos.othercasebit);\n      CMPTO(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, CURRENT_AS(char_iterator_backtrack)->charpos.chr, CURRENT_AS(char_iterator_backtrack)->matchingpath);\n      /* The range beginning must match, no need to compare. */\n      JUMPTO(SLJIT_JUMP, label);\n\n      set_jumps(current->own_backtracks, LABEL());\n      current->own_backtracks = NULL;\n      }\n    else\n      {\n      OP1(SLJIT_MOV, STR_PTR, 0, base, offset0);\n\n      if (opcode == OP_STAR && exact == 1)\n        {\n        if (type == OP_ANYNL)\n          {\n          OP1(SLJIT_MOV, TMP2, 0, base, offset1);\n          compile_newline_move_back(common);\n          }\n\n        move_back(common, NULL, TRUE);\n        jump = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, base, offset1);\n        }\n      else\n        {\n        if (type == OP_ANYNL)\n          {\n          OP1(SLJIT_MOV, TMP2, 0, base, offset1);\n          jump = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, TMP2, 0);\n          compile_newline_move_back(common);\n          }\n        else\n          jump = CMP(SLJIT_LESS_EQUAL, STR_PTR, 0, base, offset1);\n\n        move_back(common, NULL, TRUE);\n        }\n\n      OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n      JUMPTO(SLJIT_JUMP, CURRENT_AS(char_iterator_backtrack)->matchingpath);\n\n      set_jumps(current->own_backtracks, LABEL());\n      }\n\n    JUMPHERE(jump);\n    if (private_data_ptr == 0)\n      free_stack(common, 2);\n    }\n  break;\n\n  case OP_QUERY:\n  OP1(SLJIT_MOV, STR_PTR, 0, base, offset0);\n  OP1(SLJIT_MOV, base, offset0, SLJIT_IMM, 0);\n  CMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0, CURRENT_AS(char_iterator_backtrack)->matchingpath);\n  jump = JUMP(SLJIT_JUMP);\n  set_jumps(current->own_backtracks, LABEL());\n  OP1(SLJIT_MOV, STR_PTR, 0, base, offset0);\n  OP1(SLJIT_MOV, base, offset0, SLJIT_IMM, 0);\n  JUMPTO(SLJIT_JUMP, CURRENT_AS(char_iterator_backtrack)->matchingpath);\n  JUMPHERE(jump);\n  if (private_data_ptr == 0)\n    free_stack(common, 1);\n  break;\n\n  case OP_MINSTAR:\n  OP1(SLJIT_MOV, STR_PTR, 0, base, offset0);\n  if (exact == 0)\n    {\n    compile_char1_matchingpath(common, type, cc, &jumplist, TRUE);\n    OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n    }\n  else if (exact > 1)\n    OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, 1);\n\n  JUMPTO(SLJIT_JUMP, CURRENT_AS(char_iterator_backtrack)->matchingpath);\n  set_jumps(exact > 0 ? current->own_backtracks : jumplist, LABEL());\n  if (private_data_ptr == 0)\n    free_stack(common, 1);\n  break;\n\n  case OP_MINUPTO:\n  OP1(SLJIT_MOV, TMP1, 0, base, offset1);\n  OP1(SLJIT_MOV, STR_PTR, 0, base, offset0);\n  OP2(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, TMP1, 0, SLJIT_IMM, 1);\n\n  if (exact == 0)\n    {\n    add_jump(compiler, &jumplist, JUMP(SLJIT_ZERO));\n\n    OP1(SLJIT_MOV, base, offset1, TMP1, 0);\n    compile_char1_matchingpath(common, type, cc, &jumplist, TRUE);\n    OP1(SLJIT_MOV, base, offset0, STR_PTR, 0);\n    JUMPTO(SLJIT_JUMP, CURRENT_AS(char_iterator_backtrack)->matchingpath);\n\n    set_jumps(jumplist, LABEL());\n    }\n  else\n    {\n    if (exact > 1)\n      OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, 1);\n    OP1(SLJIT_MOV, base, offset1, TMP1, 0);\n    JUMPTO(SLJIT_NOT_ZERO, CURRENT_AS(char_iterator_backtrack)->matchingpath);\n\n    set_jumps(current->own_backtracks, LABEL());\n    }\n\n  if (private_data_ptr == 0)\n    free_stack(common, 2);\n  break;\n\n  case OP_MINQUERY:\n  OP1(SLJIT_MOV, STR_PTR, 0, base, offset0);\n  OP1(SLJIT_MOV, base, offset0, SLJIT_IMM, 0);\n\n  if (exact >= 1)\n    {\n    if (exact >= 2)\n      OP1(SLJIT_MOV, TMP3, 0, SLJIT_IMM, 1);\n    CMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0, CURRENT_AS(char_iterator_backtrack)->matchingpath);\n    set_jumps(current->own_backtracks, LABEL());\n    }\n  else\n    {\n    jump = CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0);\n    compile_char1_matchingpath(common, type, cc, &jumplist, TRUE);\n    JUMPTO(SLJIT_JUMP, CURRENT_AS(char_iterator_backtrack)->matchingpath);\n    set_jumps(jumplist, LABEL());\n    JUMPHERE(jump);\n    }\n\n  if (private_data_ptr == 0)\n    free_stack(common, 1);\n  break;\n\n  default:\n  SLJIT_UNREACHABLE();\n  break;\n  }\n}\n\nstatic SLJIT_INLINE void compile_ref_iterator_backtrackingpath(compiler_common *common, struct backtrack_common *current)\n{\nDEFINE_COMPILER;\nPCRE2_SPTR cc = current->cc;\nBOOL ref = (*cc == OP_REF || *cc == OP_REFI);\nPCRE2_UCHAR type;\n\ntype = cc[PRIV(OP_lengths)[*cc]];\n\nif (CURRENT_AS(ref_iterator_backtrack)->possessive_or_exact)\n  {\n  set_jumps(current->own_backtracks, LABEL());\n  return;\n  }\n\nif ((type & 0x1) == 0)\n  {\n  /* Maximize case. */\n  set_jumps(current->own_backtracks, LABEL());\n  OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n  free_stack(common, 1);\n  CMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0, CURRENT_AS(ref_iterator_backtrack)->matchingpath);\n  return;\n  }\n\nOP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\nCMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0, CURRENT_AS(ref_iterator_backtrack)->matchingpath);\nset_jumps(current->own_backtracks, LABEL());\nfree_stack(common, ref ? 2 : 3);\n}\n\nstatic SLJIT_INLINE void compile_recurse_backtrackingpath(compiler_common *common, struct backtrack_common *current)\n{\nDEFINE_COMPILER;\nrecurse_entry *entry;\n\nif (!CURRENT_AS(recurse_backtrack)->inlined_pattern)\n  {\n  entry = CURRENT_AS(recurse_backtrack)->entry;\n  if (entry->backtrack_label == NULL)\n    add_jump(compiler, &entry->backtrack_calls, JUMP(SLJIT_FAST_CALL));\n  else\n    JUMPTO(SLJIT_FAST_CALL, entry->backtrack_label);\n  CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 0, CURRENT_AS(recurse_backtrack)->matchingpath);\n  }\nelse\n  compile_backtrackingpath(common, current->top);\n\nset_jumps(current->own_backtracks, LABEL());\n}\n\nstatic void compile_assert_backtrackingpath(compiler_common *common, struct backtrack_common *current)\n{\nDEFINE_COMPILER;\nPCRE2_SPTR cc = current->cc;\nPCRE2_UCHAR bra = OP_BRA;\nstruct sljit_jump *brajump = NULL;\n\nSLJIT_ASSERT(*cc != OP_BRAMINZERO);\nif (*cc == OP_BRAZERO)\n  {\n  bra = *cc;\n  cc++;\n  }\n\nif (bra == OP_BRAZERO)\n  {\n  SLJIT_ASSERT(current->own_backtracks == NULL);\n  OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n  }\n\nif (CURRENT_AS(assert_backtrack)->framesize < 0)\n  {\n  set_jumps(current->own_backtracks, LABEL());\n\n  if (bra == OP_BRAZERO)\n    {\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n    CMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0, CURRENT_AS(assert_backtrack)->matchingpath);\n    free_stack(common, 1);\n    }\n  return;\n  }\n\nif (bra == OP_BRAZERO)\n  {\n  if (*cc == OP_ASSERT_NOT || *cc == OP_ASSERTBACK_NOT)\n    {\n    OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n    CMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0, CURRENT_AS(assert_backtrack)->matchingpath);\n    free_stack(common, 1);\n    return;\n    }\n  free_stack(common, 1);\n  brajump = CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0);\n  }\n\nif (*cc == OP_ASSERT || *cc == OP_ASSERTBACK)\n  {\n  OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(assert_backtrack)->private_data_ptr);\n  add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(-2));\n  OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (CURRENT_AS(assert_backtrack)->framesize - 1) * sizeof(sljit_sw));\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(assert_backtrack)->private_data_ptr, TMP1, 0);\n\n  set_jumps(current->own_backtracks, LABEL());\n  }\nelse\n  set_jumps(current->own_backtracks, LABEL());\n\nif (bra == OP_BRAZERO)\n  {\n  /* We know there is enough place on the stack. */\n  OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);\n  JUMPTO(SLJIT_JUMP, CURRENT_AS(assert_backtrack)->matchingpath);\n  JUMPHERE(brajump);\n  }\n}\n\nstatic void compile_bracket_backtrackingpath(compiler_common *common, struct backtrack_common *current)\n{\nDEFINE_COMPILER;\nint opcode, stacksize, alt_count, alt_max;\nint offset = 0;\nint private_data_ptr = CURRENT_AS(bracket_backtrack)->private_data_ptr;\nint repeat_ptr = 0, repeat_type = 0, repeat_count = 0;\nPCRE2_SPTR cc = current->cc;\nPCRE2_SPTR ccbegin;\nPCRE2_SPTR ccprev;\nPCRE2_UCHAR bra = OP_BRA;\nPCRE2_UCHAR ket;\nconst assert_backtrack *assert;\nBOOL has_alternatives;\nBOOL needs_control_head = FALSE;\nBOOL has_vreverse;\nstruct sljit_jump *brazero = NULL;\nstruct sljit_jump *next_alt = NULL;\nstruct sljit_jump *once = NULL;\nstruct sljit_jump *cond = NULL;\nstruct sljit_label *rmin_label = NULL;\nstruct sljit_label *exact_label = NULL;\nstruct sljit_jump *mov_addr = NULL;\n\nif (*cc == OP_BRAZERO || *cc == OP_BRAMINZERO)\n  {\n  bra = *cc;\n  cc++;\n  }\n\nopcode = *cc;\nccbegin = bracketend(cc) - 1 - LINK_SIZE;\nket = *ccbegin;\nif (ket == OP_KET && PRIVATE_DATA(ccbegin) != 0)\n  {\n  repeat_ptr = PRIVATE_DATA(ccbegin);\n  repeat_type = PRIVATE_DATA(ccbegin + 2);\n  repeat_count = PRIVATE_DATA(ccbegin + 3);\n  SLJIT_ASSERT(repeat_type != 0 && repeat_count != 0);\n  if (repeat_type == OP_UPTO)\n    ket = OP_KETRMAX;\n  if (repeat_type == OP_MINUPTO)\n    ket = OP_KETRMIN;\n  }\nccbegin = cc;\ncc += GET(cc, 1);\nhas_alternatives = *cc == OP_ALT;\nif (SLJIT_UNLIKELY(opcode == OP_COND) || SLJIT_UNLIKELY(opcode == OP_SCOND))\n  has_alternatives = (ccbegin[1 + LINK_SIZE] >= OP_ASSERT && ccbegin[1 + LINK_SIZE] <= OP_ASSERTBACK_NOT) || CURRENT_AS(bracket_backtrack)->u.no_capture != NULL;\nif (opcode == OP_CBRA || opcode == OP_SCBRA)\n  offset = (GET2(ccbegin, 1 + LINK_SIZE)) << 1;\nif (SLJIT_UNLIKELY(opcode == OP_COND) && (*cc == OP_KETRMAX || *cc == OP_KETRMIN))\n  opcode = OP_SCOND;\n\nalt_max = has_alternatives ? no_alternatives(ccbegin) : 0;\n\n/* Decoding the needs_control_head in framesize. */\nif (opcode == OP_ONCE)\n  {\n  needs_control_head = (CURRENT_AS(bracket_backtrack)->u.framesize & 0x1) != 0;\n  CURRENT_AS(bracket_backtrack)->u.framesize >>= 1;\n  }\n\nif (ket != OP_KET && repeat_type != 0)\n  {\n  /* TMP1 is used in OP_KETRMIN below. */\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n  free_stack(common, 1);\n  if (repeat_type == OP_UPTO)\n    OP2(SLJIT_ADD, SLJIT_MEM1(SLJIT_SP), repeat_ptr, TMP1, 0, SLJIT_IMM, 1);\n  else\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), repeat_ptr, TMP1, 0);\n  }\n\nif (ket == OP_KETRMAX)\n  {\n  if (bra == OP_BRAZERO)\n    {\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    free_stack(common, 1);\n    brazero = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_IMM, 0);\n    }\n  }\nelse if (ket == OP_KETRMIN)\n  {\n  if (bra != OP_BRAMINZERO)\n    {\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    if (repeat_type != 0)\n      {\n      /* TMP1 was set a few lines above. */\n      CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 0, CURRENT_AS(bracket_backtrack)->recursive_matchingpath);\n      /* Drop STR_PTR for non-greedy plus quantifier. */\n      if (opcode != OP_ONCE)\n        free_stack(common, 1);\n      }\n    else if (opcode >= OP_SBRA || opcode == OP_ONCE)\n      {\n      /* Checking zero-length iteration. */\n      if (opcode != OP_ONCE || CURRENT_AS(bracket_backtrack)->u.framesize < 0)\n        CMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, CURRENT_AS(bracket_backtrack)->recursive_matchingpath);\n      else\n        {\n        OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n        CMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(TMP1), STACK(-CURRENT_AS(bracket_backtrack)->u.framesize - 2), CURRENT_AS(bracket_backtrack)->recursive_matchingpath);\n        }\n      /* Drop STR_PTR for non-greedy plus quantifier. */\n      if (opcode != OP_ONCE)\n        free_stack(common, 1);\n      }\n    else\n      JUMPTO(SLJIT_JUMP, CURRENT_AS(bracket_backtrack)->recursive_matchingpath);\n    }\n  rmin_label = LABEL();\n  if (repeat_type != 0)\n    OP2(SLJIT_ADD, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1);\n  }\nelse if (bra == OP_BRAZERO)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n  free_stack(common, 1);\n  brazero = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 0);\n  }\nelse if (repeat_type == OP_EXACT)\n  {\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1);\n  exact_label = LABEL();\n  }\n\nif (offset != 0)\n  {\n  if (common->capture_last_ptr != 0)\n    {\n    SLJIT_ASSERT(!is_optimized_cbracket(common, offset >> 1));\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, TMP1, 0);\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(2));\n    free_stack(common, 3);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP2, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), TMP1, 0);\n    }\n  else if (!is_optimized_cbracket(common, offset >> 1))\n    {\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n    free_stack(common, 2);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), TMP2, 0);\n    }\n  }\nelse if (SLJIT_UNLIKELY(opcode == OP_ASSERT_SCS))\n  {\n  OP1(SLJIT_MOV, TMP1, 0, STR_END, 0);\n  OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw));\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw), TMP1, 0);\n\n  /* Nested scs blocks will not update this variable. */\n  if (common->restore_end_ptr == 0)\n    common->restore_end_ptr = private_data_ptr + sizeof(sljit_sw);\n  }\n\nif (SLJIT_UNLIKELY(opcode == OP_ONCE))\n  {\n  int framesize = CURRENT_AS(bracket_backtrack)->u.framesize;\n\n  SLJIT_ASSERT(framesize != 0);\n  if (framesize > 0)\n    {\n    OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n    add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));\n    OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize - 1) * sizeof(sljit_sw));\n    }\n  once = JUMP(SLJIT_JUMP);\n  }\nelse if (SLJIT_UNLIKELY(opcode == OP_COND) || SLJIT_UNLIKELY(opcode == OP_SCOND))\n  {\n  if (has_alternatives)\n    {\n    /* Always exactly one alternative. */\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    free_stack(common, 1);\n\n    alt_max = 2;\n    next_alt = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 0);\n    }\n  }\nelse if (has_alternatives)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n  free_stack(common, 1);\n\n  if (alt_max > 3)\n    {\n    sljit_emit_ijump(compiler, SLJIT_JUMP, TMP1, 0);\n\n    SLJIT_ASSERT(CURRENT_AS(bracket_backtrack)->matching_mov_addr != NULL);\n    sljit_set_label(CURRENT_AS(bracket_backtrack)->matching_mov_addr, LABEL());\n    sljit_emit_op0(compiler, SLJIT_ENDBR);\n    }\n  else\n    next_alt = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 0);\n  }\n\nCOMPILE_BACKTRACKINGPATH(current->top);\nif (current->own_backtracks)\n  set_jumps(current->own_backtracks, LABEL());\n\nif (SLJIT_UNLIKELY(opcode == OP_COND) || SLJIT_UNLIKELY(opcode == OP_SCOND))\n  {\n  /* Conditional block always has at most one alternative. */\n  if (ccbegin[1 + LINK_SIZE] >= OP_ASSERT && ccbegin[1 + LINK_SIZE] <= OP_ASSERTBACK_NOT)\n    {\n    SLJIT_ASSERT(has_alternatives);\n    assert = CURRENT_AS(bracket_backtrack)->u.assert;\n    SLJIT_ASSERT(assert->framesize != 0);\n    if (assert->framesize > 0 && (ccbegin[1 + LINK_SIZE] == OP_ASSERT || ccbegin[1 + LINK_SIZE] == OP_ASSERTBACK))\n      {\n      OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr);\n      add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(-2));\n      OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (assert->framesize - 1) * sizeof(sljit_sw));\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr, TMP1, 0);\n      }\n    cond = JUMP(SLJIT_JUMP);\n    set_jumps(CURRENT_AS(bracket_backtrack)->u.assert->condfailed, LABEL());\n    }\n  else if (CURRENT_AS(bracket_backtrack)->u.no_capture != NULL)\n    {\n    SLJIT_ASSERT(has_alternatives);\n    cond = JUMP(SLJIT_JUMP);\n    set_jumps(CURRENT_AS(bracket_backtrack)->u.no_capture, LABEL());\n    }\n  else\n    SLJIT_ASSERT(!has_alternatives);\n  }\n\nif (has_alternatives)\n  {\n  alt_count = 1;\n  do\n    {\n    current->top = NULL;\n    current->own_backtracks = NULL;\n    current->simple_backtracks = NULL;\n    /* Conditional blocks always have an additional alternative, even if it is empty. */\n    if (*cc == OP_ALT)\n      {\n      ccprev = cc + 1 + LINK_SIZE;\n      cc += GET(cc, 1);\n\n      has_vreverse = FALSE;\n\n      switch (opcode)\n        {\n        case OP_ASSERTBACK:\n        case OP_ASSERTBACK_NA:\n          SLJIT_ASSERT(private_data_ptr != 0);\n          OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n\n          has_vreverse = (*ccprev == OP_VREVERSE);\n          if (*ccprev == OP_REVERSE || has_vreverse)\n            ccprev = compile_reverse_matchingpath(common, ccprev, current);\n          break;\n        case OP_ASSERT_SCS:\n          OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(2));\n          break;\n        case OP_ONCE:\n          OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(needs_control_head ? 1 : 0));\n          break;\n        case OP_COND:\n        case OP_SCOND:\n          break;\n        default:\n          if (private_data_ptr != 0)\n            OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n          else\n            OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n          break;\n        }\n\n      compile_matchingpath(common, ccprev, cc, current);\n      if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n        return;\n\n      switch (opcode)\n        {\n        case OP_ASSERTBACK_NA:\n          if (has_vreverse)\n            {\n            SLJIT_ASSERT(current->top != NULL && PRIVATE_DATA(ccbegin + 1));\n            add_jump(compiler, &current->top->simple_backtracks, CMP(SLJIT_LESS, STR_PTR, 0, STR_END, 0));\n            }\n\n          if (PRIVATE_DATA(ccbegin + 1))\n            OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw));\n          break;\n        case OP_ASSERT_NA:\n          OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);\n          break;\n        case OP_SCRIPT_RUN:\n          match_script_run_common(common, private_data_ptr, current);\n          break;\n        }\n      }\n\n    /* Instructions after the current alternative is successfully matched. */\n    /* There is a similar code in compile_bracket_matchingpath. */\n    if (opcode == OP_ONCE)\n      match_once_common(common, ket, CURRENT_AS(bracket_backtrack)->u.framesize, private_data_ptr, has_alternatives, needs_control_head);\n\n    stacksize = 0;\n    if (repeat_type == OP_MINUPTO)\n      {\n      /* We need to preserve the counter. TMP2 will be used below. */\n      OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), repeat_ptr);\n      stacksize++;\n      }\n    if (ket != OP_KET || bra != OP_BRA)\n      stacksize++;\n    if (offset != 0)\n      {\n      if (common->capture_last_ptr != 0)\n        stacksize++;\n      if (!is_optimized_cbracket(common, offset >> 1))\n        stacksize += 2;\n      }\n    if (opcode != OP_ONCE)\n      stacksize++;\n\n    if (stacksize > 0)\n      allocate_stack(common, stacksize);\n\n    stacksize = 0;\n    if (repeat_type == OP_MINUPTO)\n      {\n      /* TMP2 was set above. */\n      OP2(SLJIT_SUB, SLJIT_MEM1(STACK_TOP), STACK(stacksize), TMP2, 0, SLJIT_IMM, 1);\n      stacksize++;\n      }\n\n    if (ket != OP_KET || bra != OP_BRA)\n      {\n      if (ket != OP_KET)\n        OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), STR_PTR, 0);\n      else\n        OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), SLJIT_IMM, 0);\n      stacksize++;\n      }\n\n    if (offset != 0)\n      stacksize = match_capture_common(common, stacksize, offset, private_data_ptr);\n\n    if (opcode != OP_ONCE)\n      {\n      if (alt_max <= 3)\n        OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), SLJIT_IMM, alt_count);\n      else\n        mov_addr = sljit_emit_op_addr(compiler, SLJIT_MOV_ADDR, SLJIT_MEM1(STACK_TOP), STACK(stacksize));\n      }\n\n    if (offset != 0 && ket == OP_KETRMAX && is_optimized_cbracket(common, offset >> 1))\n      {\n      /* If ket is not OP_KETRMAX, this code path is executed after the jump to alternative_matchingpath. */\n      SLJIT_ASSERT(private_data_ptr == OVECTOR(offset + 0));\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0);\n      }\n\n    JUMPTO(SLJIT_JUMP, CURRENT_AS(bracket_backtrack)->alternative_matchingpath);\n\n    if (opcode != OP_ONCE)\n      {\n      if (alt_max <= 3)\n        {\n        JUMPHERE(next_alt);\n        alt_count++;\n        if (alt_count < alt_max)\n          {\n          SLJIT_ASSERT(alt_count == 2 && alt_max == 3);\n          next_alt = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 1);\n          }\n        }\n      else\n        {\n        sljit_set_label(mov_addr, LABEL());\n        sljit_emit_op0(compiler, SLJIT_ENDBR);\n        }\n      }\n\n    COMPILE_BACKTRACKINGPATH(current->top);\n    if (current->own_backtracks)\n      set_jumps(current->own_backtracks, LABEL());\n    SLJIT_ASSERT(!current->simple_backtracks);\n    }\n  while (*cc == OP_ALT);\n\n  if (cond != NULL)\n    {\n    SLJIT_ASSERT(opcode == OP_COND || opcode == OP_SCOND);\n    if (ccbegin[1 + LINK_SIZE] == OP_ASSERT_NOT || ccbegin[1 + LINK_SIZE] == OP_ASSERTBACK_NOT)\n      {\n      assert = CURRENT_AS(bracket_backtrack)->u.assert;\n      SLJIT_ASSERT(assert->framesize != 0);\n      if (assert->framesize > 0)\n        {\n        OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr);\n        add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));\n        OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(-2));\n        OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (assert->framesize - 1) * sizeof(sljit_sw));\n        OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr, TMP1, 0);\n        }\n      }\n    JUMPHERE(cond);\n    }\n\n  /* Free the STR_PTR. */\n  if (private_data_ptr == 0)\n    free_stack(common, 1);\n  }\n\nif (offset != 0)\n  {\n  /* Using both tmp register is better for instruction scheduling. */\n  if (is_optimized_cbracket(common, offset >> 1))\n    {\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n    free_stack(common, 2);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), TMP2, 0);\n    }\n  else\n    {\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    free_stack(common, 1);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);\n    }\n  }\nelse if (opcode == OP_ASSERTBACK_NA && PRIVATE_DATA(ccbegin + 1))\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n  OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw));\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw), TMP2, 0);\n  free_stack(common, 4);\n  }\nelse if (opcode == OP_ASSERT_NA || opcode == OP_ASSERTBACK_NA || opcode == OP_SCRIPT_RUN || opcode == OP_SBRA || opcode == OP_SCOND)\n  {\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(0));\n  free_stack(common, 1);\n  }\nelse if (opcode == OP_ASSERT_SCS)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n  OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw));\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw), TMP2, 0);\n  free_stack(common, has_alternatives ? 3 : 2);\n\n  set_jumps(CURRENT_AS(bracket_backtrack)->u.no_capture, LABEL());\n\n  /* Nested scs blocks will not update this variable. */\n  if (common->restore_end_ptr == private_data_ptr + SSIZE_OF(sw))\n    common->restore_end_ptr = 0;\n  }\nelse if (opcode == OP_ONCE)\n  {\n  cc = ccbegin + GET(ccbegin, 1);\n  stacksize = needs_control_head ? 1 : 0;\n\n  if (CURRENT_AS(bracket_backtrack)->u.framesize >= 0)\n    {\n    /* Reset head and drop saved frame. */\n    stacksize += CURRENT_AS(bracket_backtrack)->u.framesize + ((ket != OP_KET || *cc == OP_ALT) ? 2 : 1);\n    }\n  else if (ket == OP_KETRMAX || (*cc == OP_ALT && ket != OP_KETRMIN))\n    {\n    /* The STR_PTR must be released. */\n    stacksize++;\n    }\n\n  if (stacksize > 0)\n    free_stack(common, stacksize);\n\n  JUMPHERE(once);\n  /* Restore previous private_data_ptr */\n  if (CURRENT_AS(bracket_backtrack)->u.framesize >= 0)\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(-CURRENT_AS(bracket_backtrack)->u.framesize - 1));\n  else if (ket == OP_KETRMIN)\n    {\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n    /* See the comment below. */\n    free_stack(common, 2);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);\n    }\n  }\n\nif (repeat_type == OP_EXACT)\n  {\n  OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), repeat_ptr, TMP1, 0);\n  CMPTO(SLJIT_LESS_EQUAL, TMP1, 0, SLJIT_IMM, repeat_count, exact_label);\n  }\nelse if (ket == OP_KETRMAX)\n  {\n  OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n  if (bra != OP_BRAZERO)\n    free_stack(common, 1);\n\n  CMPTO(SLJIT_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0, CURRENT_AS(bracket_backtrack)->recursive_matchingpath);\n  if (bra == OP_BRAZERO)\n    {\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n    JUMPTO(SLJIT_JUMP, CURRENT_AS(bracket_backtrack)->zero_matchingpath);\n    JUMPHERE(brazero);\n    free_stack(common, 1);\n    }\n  }\nelse if (ket == OP_KETRMIN)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n\n  /* OP_ONCE removes everything in case of a backtrack, so we don't\n  need to explicitly release the STR_PTR. The extra release would\n  affect badly the free_stack(2) above. */\n  if (opcode != OP_ONCE)\n    free_stack(common, 1);\n  CMPTO(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 0, rmin_label);\n  if (opcode == OP_ONCE)\n    free_stack(common, bra == OP_BRAMINZERO ? 2 : 1);\n  else if (bra == OP_BRAMINZERO)\n    free_stack(common, 1);\n  }\nelse if (bra == OP_BRAZERO)\n  {\n  OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n  JUMPTO(SLJIT_JUMP, CURRENT_AS(bracket_backtrack)->zero_matchingpath);\n  JUMPHERE(brazero);\n  }\n}\n\nstatic SLJIT_INLINE void compile_bracketpos_backtrackingpath(compiler_common *common, struct backtrack_common *current)\n{\nDEFINE_COMPILER;\nint offset;\nstruct sljit_jump *jump;\nPCRE2_SPTR cc;\n\n/* No retry on backtrack, just drop everything. */\nif (CURRENT_AS(bracketpos_backtrack)->framesize < 0)\n  {\n  cc = current->cc;\n\n  if (*cc == OP_BRAPOSZERO)\n    cc++;\n\n  if (*cc == OP_CBRAPOS || *cc == OP_SCBRAPOS)\n    {\n    offset = (GET2(cc, 1 + LINK_SIZE)) << 1;\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);\n    if (common->capture_last_ptr != 0)\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(2));\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), TMP2, 0);\n    if (common->capture_last_ptr != 0)\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, TMP1, 0);\n    }\n  set_jumps(current->own_backtracks, LABEL());\n  free_stack(common, CURRENT_AS(bracketpos_backtrack)->stacksize);\n  return;\n  }\n\nOP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(bracketpos_backtrack)->private_data_ptr);\nadd_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));\nOP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (CURRENT_AS(bracketpos_backtrack)->framesize - 1) * sizeof(sljit_sw));\n\nif (current->own_backtracks)\n  {\n  jump = JUMP(SLJIT_JUMP);\n  set_jumps(current->own_backtracks, LABEL());\n  /* Drop the stack frame. */\n  free_stack(common, CURRENT_AS(bracketpos_backtrack)->stacksize);\n  JUMPHERE(jump);\n  }\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(bracketpos_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(-CURRENT_AS(bracketpos_backtrack)->framesize - 1));\n}\n\nstatic SLJIT_INLINE void compile_braminzero_backtrackingpath(compiler_common *common, struct backtrack_common *current)\n{\nassert_backtrack backtrack;\n\ncurrent->top = NULL;\ncurrent->own_backtracks = NULL;\ncurrent->simple_backtracks = NULL;\nif (current->cc[1] > OP_ASSERTBACK_NOT)\n  {\n  /* Manual call of compile_bracket_matchingpath and compile_bracket_backtrackingpath. */\n  compile_bracket_matchingpath(common, current->cc, current);\n  if (SLJIT_UNLIKELY(sljit_get_compiler_error(common->compiler)))\n    return;\n  compile_bracket_backtrackingpath(common, current->top);\n  }\nelse\n  {\n  memset(&backtrack, 0, sizeof(backtrack));\n  backtrack.common.cc = current->cc;\n  backtrack.matchingpath = CURRENT_AS(braminzero_backtrack)->matchingpath;\n  /* Manual call of compile_assert_matchingpath. */\n  compile_assert_matchingpath(common, current->cc, &backtrack, FALSE);\n  if (SLJIT_UNLIKELY(sljit_get_compiler_error(common->compiler)))\n    return;\n  }\nSLJIT_ASSERT(!current->simple_backtracks && !current->own_backtracks);\n}\n\nstatic SLJIT_INLINE void compile_control_verb_backtrackingpath(compiler_common *common, struct backtrack_common *current)\n{\nDEFINE_COMPILER;\nPCRE2_UCHAR opcode = *current->cc;\nstruct sljit_label *loop;\nstruct sljit_jump *jump;\n\nif (opcode == OP_THEN || opcode == OP_THEN_ARG)\n  {\n  if (common->then_trap != NULL)\n    {\n    SLJIT_ASSERT(common->control_head_ptr != 0);\n\n    OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, type_then_trap);\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, common->then_trap->start);\n    jump = JUMP(SLJIT_JUMP);\n\n    loop = LABEL();\n    OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    JUMPHERE(jump);\n    CMPTO(SLJIT_NOT_EQUAL, SLJIT_MEM1(STACK_TOP), STACK(1), TMP1, 0, loop);\n    CMPTO(SLJIT_NOT_EQUAL, SLJIT_MEM1(STACK_TOP), STACK(2), TMP2, 0, loop);\n    add_jump(compiler, &common->then_trap->quit, JUMP(SLJIT_JUMP));\n    return;\n    }\n  else if (!common->local_quit_available && common->in_positive_assertion)\n    {\n    add_jump(compiler, &common->positive_assertion_quit, JUMP(SLJIT_JUMP));\n    return;\n    }\n  }\n\nif (common->restore_end_ptr != 0 && opcode != OP_SKIP_ARG)\n  OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), common->restore_end_ptr);\n\nif (common->local_quit_available)\n  {\n  /* Abort match with a fail. */\n  if (common->quit_label == NULL)\n    add_jump(compiler, &common->quit, JUMP(SLJIT_JUMP));\n  else\n    JUMPTO(SLJIT_JUMP, common->quit_label);\n  return;\n  }\n\nif (opcode == OP_SKIP_ARG)\n  {\n  SLJIT_ASSERT(common->control_head_ptr != 0 && TMP1 == SLJIT_R0 && STR_PTR == SLJIT_R1);\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);\n  OP1(SLJIT_MOV, SLJIT_R1, 0, SLJIT_IMM, (sljit_sw)(current->cc + 2));\n  sljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, SLJIT_FUNC_ADDR(do_search_mark));\n\n  if (common->restore_end_ptr == 0)\n    {\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_R0, 0);\n    add_jump(compiler, &common->reset_match, CMP(SLJIT_NOT_EQUAL, SLJIT_R0, 0, SLJIT_IMM, 0));\n    return;\n    }\n\n  jump = CMP(SLJIT_EQUAL, SLJIT_R0, 0, SLJIT_IMM, 0);\n  OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_R0, 0);\n  OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), common->restore_end_ptr);\n  add_jump(compiler, &common->reset_match, JUMP(SLJIT_JUMP));\n  JUMPHERE(jump);\n  return;\n  }\n\nif (opcode == OP_SKIP)\n  OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\nelse\n  OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_IMM, 0);\nadd_jump(compiler, &common->reset_match, JUMP(SLJIT_JUMP));\n}\n\nstatic SLJIT_INLINE void compile_vreverse_backtrackingpath(compiler_common *common, struct backtrack_common *current)\n{\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\nstruct sljit_label *label;\n\nOP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(2));\njump = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(3));\nskip_valid_char(common);\nOP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(2), STR_PTR, 0);\nJUMPTO(SLJIT_JUMP, CURRENT_AS(vreverse_backtrack)->matchingpath);\n\nlabel = LABEL();\nsljit_set_label(jump, label);\nset_jumps(current->own_backtracks, label);\n}\n\nstatic SLJIT_INLINE void compile_then_trap_backtrackingpath(compiler_common *common, struct backtrack_common *current)\n{\nDEFINE_COMPILER;\nstruct sljit_jump *jump;\nint framesize;\nint size;\n\nif (CURRENT_AS(then_trap_backtrack)->then_trap)\n  {\n  common->then_trap = CURRENT_AS(then_trap_backtrack)->then_trap;\n  return;\n  }\n\nsize = CURRENT_AS(then_trap_backtrack)->framesize;\nsize = 3 + (size < 0 ? 0 : size);\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(size - 3));\nfree_stack(common, size);\njump = JUMP(SLJIT_JUMP);\n\nset_jumps(CURRENT_AS(then_trap_backtrack)->quit, LABEL());\n\nframesize = CURRENT_AS(then_trap_backtrack)->framesize;\nSLJIT_ASSERT(framesize != 0);\n\n/* STACK_TOP is set by THEN. */\nif (framesize > 0)\n  {\n  add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));\n  OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize - 1) * sizeof(sljit_sw));\n  }\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\nfree_stack(common, 3);\n\nJUMPHERE(jump);\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, TMP1, 0);\n}\n\nstatic void compile_backtrackingpath(compiler_common *common, struct backtrack_common *current)\n{\nDEFINE_COMPILER;\nthen_trap_backtrack *save_then_trap = common->then_trap;\n\nwhile (current)\n  {\n  if (current->simple_backtracks != NULL)\n    set_jumps(current->simple_backtracks, LABEL());\n  switch(*current->cc)\n    {\n    case OP_SET_SOM:\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    free_stack(common, 1);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(0), TMP1, 0);\n    break;\n\n    case OP_STAR:\n    case OP_MINSTAR:\n    case OP_PLUS:\n    case OP_MINPLUS:\n    case OP_QUERY:\n    case OP_MINQUERY:\n    case OP_UPTO:\n    case OP_MINUPTO:\n    case OP_EXACT:\n    case OP_POSSTAR:\n    case OP_POSPLUS:\n    case OP_POSQUERY:\n    case OP_POSUPTO:\n    case OP_STARI:\n    case OP_MINSTARI:\n    case OP_PLUSI:\n    case OP_MINPLUSI:\n    case OP_QUERYI:\n    case OP_MINQUERYI:\n    case OP_UPTOI:\n    case OP_MINUPTOI:\n    case OP_EXACTI:\n    case OP_POSSTARI:\n    case OP_POSPLUSI:\n    case OP_POSQUERYI:\n    case OP_POSUPTOI:\n    case OP_NOTSTAR:\n    case OP_NOTMINSTAR:\n    case OP_NOTPLUS:\n    case OP_NOTMINPLUS:\n    case OP_NOTQUERY:\n    case OP_NOTMINQUERY:\n    case OP_NOTUPTO:\n    case OP_NOTMINUPTO:\n    case OP_NOTEXACT:\n    case OP_NOTPOSSTAR:\n    case OP_NOTPOSPLUS:\n    case OP_NOTPOSQUERY:\n    case OP_NOTPOSUPTO:\n    case OP_NOTSTARI:\n    case OP_NOTMINSTARI:\n    case OP_NOTPLUSI:\n    case OP_NOTMINPLUSI:\n    case OP_NOTQUERYI:\n    case OP_NOTMINQUERYI:\n    case OP_NOTUPTOI:\n    case OP_NOTMINUPTOI:\n    case OP_NOTEXACTI:\n    case OP_NOTPOSSTARI:\n    case OP_NOTPOSPLUSI:\n    case OP_NOTPOSQUERYI:\n    case OP_NOTPOSUPTOI:\n    case OP_TYPESTAR:\n    case OP_TYPEMINSTAR:\n    case OP_TYPEPLUS:\n    case OP_TYPEMINPLUS:\n    case OP_TYPEQUERY:\n    case OP_TYPEMINQUERY:\n    case OP_TYPEUPTO:\n    case OP_TYPEMINUPTO:\n    case OP_TYPEEXACT:\n    case OP_TYPEPOSSTAR:\n    case OP_TYPEPOSPLUS:\n    case OP_TYPEPOSQUERY:\n    case OP_TYPEPOSUPTO:\n    /* Since classes has no backtracking path, this\n    backtrackingpath was pushed by an iterator. */\n    case OP_CLASS:\n    case OP_NCLASS:\n#if defined SUPPORT_UNICODE || PCRE2_CODE_UNIT_WIDTH != 8\n    case OP_XCLASS:\n    case OP_ECLASS:\n#endif\n    compile_iterator_backtrackingpath(common, current);\n    break;\n\n    case OP_REF:\n    case OP_REFI:\n    case OP_DNREF:\n    case OP_DNREFI:\n    compile_ref_iterator_backtrackingpath(common, current);\n    break;\n\n    case OP_RECURSE:\n    compile_recurse_backtrackingpath(common, current);\n    break;\n\n    case OP_ASSERT:\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK:\n    case OP_ASSERTBACK_NOT:\n    compile_assert_backtrackingpath(common, current);\n    break;\n\n    case OP_ASSERT_NA:\n    case OP_ASSERTBACK_NA:\n    case OP_ASSERT_SCS:\n    case OP_ONCE:\n    case OP_SCRIPT_RUN:\n    case OP_BRA:\n    case OP_CBRA:\n    case OP_COND:\n    case OP_SBRA:\n    case OP_SCBRA:\n    case OP_SCOND:\n    compile_bracket_backtrackingpath(common, current);\n    break;\n\n    case OP_BRAZERO:\n    if (current->cc[1] > OP_ASSERTBACK_NOT)\n      compile_bracket_backtrackingpath(common, current);\n    else\n      compile_assert_backtrackingpath(common, current);\n    break;\n\n    case OP_BRAPOS:\n    case OP_CBRAPOS:\n    case OP_SBRAPOS:\n    case OP_SCBRAPOS:\n    case OP_BRAPOSZERO:\n    compile_bracketpos_backtrackingpath(common, current);\n    break;\n\n    case OP_BRAMINZERO:\n    compile_braminzero_backtrackingpath(common, current);\n    break;\n\n    case OP_MARK:\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(common->has_skip_arg ? 4 : 0));\n    if (common->has_skip_arg)\n      OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    free_stack(common, common->has_skip_arg ? 5 : 1);\n    OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->mark_ptr, TMP1, 0);\n    if (common->has_skip_arg)\n      OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, TMP2, 0);\n    break;\n\n    case OP_THEN:\n    case OP_THEN_ARG:\n    case OP_PRUNE:\n    case OP_PRUNE_ARG:\n    case OP_SKIP:\n    case OP_SKIP_ARG:\n    compile_control_verb_backtrackingpath(common, current);\n    break;\n\n    case OP_COMMIT:\n    case OP_COMMIT_ARG:\n    if (common->restore_end_ptr != 0)\n      OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), common->restore_end_ptr);\n\n    if (!common->local_quit_available)\n      OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, PCRE2_ERROR_NOMATCH);\n\n    if (common->quit_label == NULL)\n      add_jump(compiler, &common->quit, JUMP(SLJIT_JUMP));\n    else\n      JUMPTO(SLJIT_JUMP, common->quit_label);\n    break;\n\n    case OP_CALLOUT:\n    case OP_CALLOUT_STR:\n    case OP_FAIL:\n    case OP_ACCEPT:\n    case OP_ASSERT_ACCEPT:\n    set_jumps(current->own_backtracks, LABEL());\n    break;\n\n    case OP_VREVERSE:\n    compile_vreverse_backtrackingpath(common, current);\n    break;\n\n    case OP_THEN_TRAP:\n    /* A virtual opcode for then traps. */\n    compile_then_trap_backtrackingpath(common, current);\n    break;\n\n    default:\n    SLJIT_UNREACHABLE();\n    break;\n    }\n  current = current->prev;\n  }\ncommon->then_trap = save_then_trap;\n}\n\nstatic SLJIT_INLINE void compile_recurse(compiler_common *common)\n{\nDEFINE_COMPILER;\nPCRE2_SPTR cc = common->start + common->currententry->start;\nPCRE2_SPTR ccbegin = cc + 1 + LINK_SIZE + (*cc == OP_BRA ? 0 : IMM2_SIZE);\nPCRE2_SPTR ccend = bracketend(cc) - (1 + LINK_SIZE);\nuint32_t recurse_flags = 0;\nint private_data_size = get_recurse_data_length(common, ccbegin, ccend, &recurse_flags);\nint alt_count, alt_max, local_size;\nbacktrack_common altbacktrack;\njump_list *match = NULL;\nstruct sljit_jump *next_alt = NULL;\nstruct sljit_jump *accept_exit = NULL;\nstruct sljit_label *quit;\nstruct sljit_jump *mov_addr = NULL;\n\n/* Recurse captures then. */\ncommon->then_trap = NULL;\n\nSLJIT_ASSERT(*cc == OP_BRA || *cc == OP_CBRA || *cc == OP_CBRAPOS || *cc == OP_SCBRA || *cc == OP_SCBRAPOS);\n\nalt_max = no_alternatives(cc);\nalt_count = 0;\n\n/* Matching path. */\nSLJIT_ASSERT(common->currententry->entry_label == NULL && common->recursive_head_ptr != 0);\ncommon->currententry->entry_label = LABEL();\nset_jumps(common->currententry->entry_calls, common->currententry->entry_label);\n\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, TMP2, 0);\ncount_match(common);\n\nlocal_size = (alt_max > 1) ? 2 : 1;\n\n/* (Reversed) stack layout:\n   [private data][return address][optional: str ptr] ... [optional: alternative index][recursive_head_ptr] */\n\nallocate_stack(common, private_data_size + local_size);\n/* Save return address. */\nOP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1), TMP2, 0);\n\ncopy_recurse_data(common, ccbegin, ccend, recurse_copy_from_global, local_size, private_data_size + local_size, recurse_flags);\n\n/* This variable is saved and restored all time when we enter or exit from a recursive context. */\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr, STACK_TOP, 0);\n\nif (recurse_flags & recurse_flag_control_head_found)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0);\n\nif (alt_max > 1)\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);\n\nmemset(&altbacktrack, 0, sizeof(backtrack_common));\ncommon->quit_label = NULL;\ncommon->accept_label = NULL;\ncommon->quit = NULL;\ncommon->accept = NULL;\naltbacktrack.cc = ccbegin;\ncc += GET(cc, 1);\nwhile (1)\n  {\n  altbacktrack.top = NULL;\n  altbacktrack.own_backtracks = NULL;\n\n  if (altbacktrack.cc != ccbegin)\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n\n  compile_matchingpath(common, altbacktrack.cc, cc, &altbacktrack);\n  if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n    return;\n\n  allocate_stack(common, (alt_max > 1 || (recurse_flags & recurse_flag_accept_found)) ? 2 : 1);\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr);\n\n  if (alt_max > 1 || (recurse_flags & recurse_flag_accept_found))\n    {\n    if (alt_max > 3)\n      mov_addr = sljit_emit_op_addr(compiler, SLJIT_MOV_ADDR, SLJIT_MEM1(STACK_TOP), STACK(1));\n    else\n      OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, alt_count);\n    }\n\n  add_jump(compiler, &match, JUMP(SLJIT_JUMP));\n\n  if (alt_count == 0)\n    {\n    /* Backtracking path entry. */\n    SLJIT_ASSERT(common->currententry->backtrack_label == NULL);\n    common->currententry->backtrack_label = LABEL();\n    set_jumps(common->currententry->backtrack_calls, common->currententry->backtrack_label);\n\n    sljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, TMP1, 0);\n\n    if (recurse_flags & recurse_flag_accept_found)\n      accept_exit = CMP(SLJIT_EQUAL, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, -1);\n\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(0));\n    /* Save return address. */\n    OP1(SLJIT_MOV, SLJIT_MEM1(TMP2), STACK(local_size - 1), TMP1, 0);\n\n    copy_recurse_data(common, ccbegin, ccend, recurse_swap_global, local_size, private_data_size + local_size, recurse_flags);\n\n    if (alt_max > 1)\n      {\n      OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(1));\n      free_stack(common, 2);\n\n      if (alt_max > 3)\n        {\n        sljit_emit_ijump(compiler, SLJIT_JUMP, TMP1, 0);\n        sljit_set_label(mov_addr, LABEL());\n        sljit_emit_op0(compiler, SLJIT_ENDBR);\n        }\n      else\n        next_alt = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 0);\n      }\n    else\n      free_stack(common, (recurse_flags & recurse_flag_accept_found) ? 2 : 1);\n    }\n  else if (alt_max > 3)\n    {\n    sljit_set_label(mov_addr, LABEL());\n    sljit_emit_op0(compiler, SLJIT_ENDBR);\n    }\n  else\n    {\n    JUMPHERE(next_alt);\n    if (alt_count + 1 < alt_max)\n      {\n      SLJIT_ASSERT(alt_count == 1 && alt_max == 3);\n      next_alt = CMP(SLJIT_NOT_EQUAL, TMP1, 0, SLJIT_IMM, 1);\n      }\n    }\n\n  alt_count++;\n\n  compile_backtrackingpath(common, altbacktrack.top);\n  if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n    return;\n  set_jumps(altbacktrack.own_backtracks, LABEL());\n\n  if (*cc != OP_ALT)\n    break;\n\n  altbacktrack.cc = cc + 1 + LINK_SIZE;\n  cc += GET(cc, 1);\n  }\n\n/* No alternative is matched. */\n\nquit = LABEL();\n\ncopy_recurse_data(common, ccbegin, ccend, recurse_copy_private_to_global, local_size, private_data_size + local_size, recurse_flags);\n\nOP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1));\nfree_stack(common, private_data_size + local_size);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0);\nOP_SRC(SLJIT_FAST_RETURN, TMP2, 0);\n\nif (common->quit != NULL)\n  {\n  SLJIT_ASSERT(recurse_flags & recurse_flag_quit_found);\n\n  set_jumps(common->quit, LABEL());\n  OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr);\n  copy_recurse_data(common, ccbegin, ccend, recurse_copy_shared_to_global, local_size, private_data_size + local_size, recurse_flags);\n  JUMPTO(SLJIT_JUMP, quit);\n  }\n\nif (recurse_flags & recurse_flag_accept_found)\n  {\n  JUMPHERE(accept_exit);\n  free_stack(common, 2);\n\n  /* Save return address. */\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1), TMP1, 0);\n\n  copy_recurse_data(common, ccbegin, ccend, recurse_copy_kept_shared_to_global, local_size, private_data_size + local_size, recurse_flags);\n\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(local_size - 1));\n  free_stack(common, private_data_size + local_size);\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 0);\n  OP_SRC(SLJIT_FAST_RETURN, TMP2, 0);\n  }\n\nif (common->accept != NULL)\n  {\n  SLJIT_ASSERT(recurse_flags & recurse_flag_accept_found);\n\n  set_jumps(common->accept, LABEL());\n\n  OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr);\n  OP1(SLJIT_MOV, TMP2, 0, STACK_TOP, 0);\n\n  allocate_stack(common, 2);\n  OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, -1);\n  }\n\nset_jumps(match, LABEL());\n\nOP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);\n\ncopy_recurse_data(common, ccbegin, ccend, recurse_swap_global, local_size, private_data_size + local_size, recurse_flags);\n\nOP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP2), STACK(local_size - 1));\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 1);\nOP_SRC(SLJIT_FAST_RETURN, TMP2, 0);\n}\n\n#undef COMPILE_BACKTRACKINGPATH\n#undef CURRENT_AS\n\n#define PUBLIC_JIT_COMPILE_CONFIGURATION_OPTIONS \\\n  (PCRE2_JIT_INVALID_UTF)\n\nstatic int jit_compile(pcre2_code *code, sljit_u32 mode)\n{\npcre2_real_code *re = (pcre2_real_code *)code;\nstruct sljit_compiler *compiler;\nbacktrack_common rootbacktrack;\ncompiler_common common_data;\ncompiler_common *common = &common_data;\nconst sljit_u8 *tables = re->tables;\nvoid *allocator_data = &re->memctl;\nint private_data_size;\nPCRE2_SPTR ccend;\nexecutable_functions *functions;\nvoid *executable_func;\nsljit_uw executable_size, private_data_length, total_length;\nstruct sljit_label *mainloop_label = NULL;\nstruct sljit_label *continue_match_label;\nstruct sljit_label *empty_match_found_label = NULL;\nstruct sljit_label *empty_match_backtrack_label = NULL;\nstruct sljit_label *reset_match_label;\nstruct sljit_label *quit_label;\nstruct sljit_jump *jump;\nstruct sljit_jump *minlength_check_failed = NULL;\nstruct sljit_jump *empty_match = NULL;\nstruct sljit_jump *end_anchor_failed = NULL;\njump_list *reqcu_not_found = NULL;\n\nSLJIT_ASSERT(tables);\n\n#if HAS_VIRTUAL_REGISTERS == 1\nSLJIT_ASSERT(sljit_get_register_index(SLJIT_GP_REGISTER, TMP3) < 0 && sljit_get_register_index(SLJIT_GP_REGISTER, ARGUMENTS) < 0 && sljit_get_register_index(SLJIT_GP_REGISTER, RETURN_ADDR) < 0);\n#elif HAS_VIRTUAL_REGISTERS == 0\nSLJIT_ASSERT(sljit_get_register_index(SLJIT_GP_REGISTER, TMP3) >= 0 && sljit_get_register_index(SLJIT_GP_REGISTER, ARGUMENTS) >= 0 && sljit_get_register_index(SLJIT_GP_REGISTER, RETURN_ADDR) >= 0);\n#else\n#error \"Invalid value for HAS_VIRTUAL_REGISTERS\"\n#endif\n\nmemset(&rootbacktrack, 0, sizeof(backtrack_common));\nmemset(common, 0, sizeof(compiler_common));\ncommon->re = re;\ncommon->name_table = (PCRE2_SPTR)((uint8_t *)re + sizeof(pcre2_real_code));\nrootbacktrack.cc = (PCRE2_SPTR)((uint8_t *)re + re->code_start);\n\n#ifdef SUPPORT_UNICODE\ncommon->invalid_utf = (mode & PCRE2_JIT_INVALID_UTF) != 0;\n#endif /* SUPPORT_UNICODE */\nmode &= ~PUBLIC_JIT_COMPILE_CONFIGURATION_OPTIONS;\n\ncommon->start = rootbacktrack.cc;\ncommon->read_only_data_head = NULL;\ncommon->fcc = tables + fcc_offset;\ncommon->lcc = (sljit_sw)(tables + lcc_offset);\ncommon->mode = mode;\ncommon->might_be_empty = (re->minlength == 0) || (re->flags & PCRE2_MATCH_EMPTY);\ncommon->allow_empty_partial = (re->max_lookbehind > 0) || (re->flags & PCRE2_MATCH_EMPTY);\ncommon->nltype = NLTYPE_FIXED;\nswitch(re->newline_convention)\n  {\n  case PCRE2_NEWLINE_CR: common->newline = CHAR_CR; break;\n  case PCRE2_NEWLINE_LF: common->newline = CHAR_NL; break;\n  case PCRE2_NEWLINE_CRLF: common->newline = (CHAR_CR << 8) | CHAR_NL; break;\n  case PCRE2_NEWLINE_ANY: common->newline = (CHAR_CR << 8) | CHAR_NL; common->nltype = NLTYPE_ANY; break;\n  case PCRE2_NEWLINE_ANYCRLF: common->newline = (CHAR_CR << 8) | CHAR_NL; common->nltype = NLTYPE_ANYCRLF; break;\n  case PCRE2_NEWLINE_NUL: common->newline = CHAR_NUL; break;\n  default: return PCRE2_ERROR_INTERNAL;\n  }\ncommon->nlmax = READ_CHAR_MAX;\ncommon->nlmin = 0;\nif (re->bsr_convention == PCRE2_BSR_UNICODE)\n  common->bsr_nltype = NLTYPE_ANY;\nelse if (re->bsr_convention == PCRE2_BSR_ANYCRLF)\n  common->bsr_nltype = NLTYPE_ANYCRLF;\nelse\n  {\n#ifdef BSR_ANYCRLF\n  common->bsr_nltype = NLTYPE_ANYCRLF;\n#else\n  common->bsr_nltype = NLTYPE_ANY;\n#endif\n  }\ncommon->bsr_nlmax = READ_CHAR_MAX;\ncommon->bsr_nlmin = 0;\ncommon->endonly = (re->overall_options & PCRE2_DOLLAR_ENDONLY) != 0;\ncommon->ctypes = (sljit_sw)(tables + ctypes_offset);\ncommon->name_count = re->name_count;\ncommon->name_entry_size = re->name_entry_size;\ncommon->unset_backref = (re->overall_options & PCRE2_MATCH_UNSET_BACKREF) != 0;\ncommon->alt_circumflex = (re->overall_options & PCRE2_ALT_CIRCUMFLEX) != 0;\n#ifdef SUPPORT_UNICODE\n/* PCRE2_UTF[16|32] have the same value as PCRE2_UTF8. */\ncommon->utf = (re->overall_options & PCRE2_UTF) != 0;\ncommon->ucp = (re->overall_options & PCRE2_UCP) != 0;\nif (common->utf)\n  {\n  if (common->nltype == NLTYPE_ANY)\n    common->nlmax = 0x2029;\n  else if (common->nltype == NLTYPE_ANYCRLF)\n    common->nlmax = (CHAR_CR > CHAR_NL) ? CHAR_CR : CHAR_NL;\n  else\n    {\n    /* We only care about the first newline character. */\n    common->nlmax = common->newline & 0xff;\n    }\n\n  if (common->nltype == NLTYPE_FIXED)\n    common->nlmin = common->newline & 0xff;\n  else\n    common->nlmin = (CHAR_CR < CHAR_NL) ? CHAR_CR : CHAR_NL;\n\n  if (common->bsr_nltype == NLTYPE_ANY)\n    common->bsr_nlmax = 0x2029;\n  else\n    common->bsr_nlmax = (CHAR_CR > CHAR_NL) ? CHAR_CR : CHAR_NL;\n  common->bsr_nlmin = (CHAR_CR < CHAR_NL) ? CHAR_CR : CHAR_NL;\n  }\nelse\n  common->invalid_utf = FALSE;\n#endif /* SUPPORT_UNICODE */\nccend = bracketend(common->start);\n\n/* Calculate the local space size on the stack. */\ncommon->ovector_start = LOCAL0;\n/* Allocate space for temporary data structures. */\nprivate_data_length = ccend - common->start;\n/* The chance of overflow is very low, but might happen on 32 bit. */\nif (private_data_length > ~(sljit_uw)0 / sizeof(sljit_s32))\n  return PCRE2_ERROR_NOMEMORY;\n\nprivate_data_length *= sizeof(sljit_s32);\n/* Align to 32 bit. */\ncommon->cbracket_bitset_length = ((re->top_bracket + 1) + (sljit_u32)7) & ~(sljit_u32)7;\ntotal_length = common->cbracket_bitset_length << 1;\nif (~(sljit_uw)0 - private_data_length < total_length)\n  return PCRE2_ERROR_NOMEMORY;\n\ntotal_length += private_data_length;\ncommon->private_data_ptrs = (sljit_s32*)SLJIT_MALLOC(total_length, allocator_data);\nif (!common->private_data_ptrs)\n  return PCRE2_ERROR_NOMEMORY;\n\nmemset(common->private_data_ptrs, 0, private_data_length);\ncommon->optimized_cbrackets = ((sljit_u8 *)common->private_data_ptrs) + private_data_length;\n#if defined DEBUG_FORCE_UNOPTIMIZED_CBRAS && DEBUG_FORCE_UNOPTIMIZED_CBRAS == 1\nmemset(common->optimized_cbrackets, 0, common->cbracket_bitset_length);\n#else\nmemset(common->optimized_cbrackets, 0xff, common->cbracket_bitset_length);\n#endif\ncommon->cbracket_bitset = common->optimized_cbrackets + common->cbracket_bitset_length;\n\nSLJIT_ASSERT(*common->start == OP_BRA && ccend[-(1 + LINK_SIZE)] == OP_KET);\n#if defined DEBUG_FORCE_UNOPTIMIZED_CBRAS && DEBUG_FORCE_UNOPTIMIZED_CBRAS == 2\ncommon->capture_last_ptr = common->ovector_start;\ncommon->ovector_start += sizeof(sljit_sw);\n#endif\nif (!check_opcode_types(common, common->start, ccend))\n  {\n  SLJIT_FREE(common->private_data_ptrs, allocator_data);\n  return PCRE2_ERROR_JIT_UNSUPPORTED;\n  }\n\n/* Checking flags and updating ovector_start. */\nif (mode == PCRE2_JIT_COMPLETE &&\n    (re->flags & PCRE2_LASTSET) != 0 &&\n    (re->optimization_flags & PCRE2_OPTIM_START_OPTIMIZE) != 0)\n  {\n  common->req_char_ptr = common->ovector_start;\n  common->ovector_start += sizeof(sljit_sw);\n  }\n\nif (mode != PCRE2_JIT_COMPLETE)\n  {\n  common->start_used_ptr = common->ovector_start;\n  common->ovector_start += sizeof(sljit_sw);\n  if (mode == PCRE2_JIT_PARTIAL_SOFT)\n    {\n    common->hit_start = common->ovector_start;\n    common->ovector_start += sizeof(sljit_sw);\n    }\n  }\n\nif ((re->overall_options & (PCRE2_FIRSTLINE | PCRE2_USE_OFFSET_LIMIT)) != 0)\n  {\n  common->match_end_ptr = common->ovector_start;\n  common->ovector_start += sizeof(sljit_sw);\n  }\n\n#if defined DEBUG_FORCE_CONTROL_HEAD && DEBUG_FORCE_CONTROL_HEAD\ncommon->control_head_ptr = 1;\n#endif\n\nif (common->control_head_ptr != 0)\n  {\n  common->control_head_ptr = common->ovector_start;\n  common->ovector_start += sizeof(sljit_sw);\n  }\n\nif (common->has_set_som)\n  {\n  /* Saving the real start pointer is necessary. */\n  common->start_ptr = common->ovector_start;\n  common->ovector_start += sizeof(sljit_sw);\n  }\n\n/* Aligning ovector to even number of sljit words. */\nif ((common->ovector_start & sizeof(sljit_sw)) != 0)\n  common->ovector_start += sizeof(sljit_sw);\n\nif (common->start_ptr == 0)\n  common->start_ptr = OVECTOR(0);\n\n/* Capturing brackets cannot be optimized if callouts are allowed. */\nif (common->capture_last_ptr != 0)\n  memset(common->optimized_cbrackets, 0, common->cbracket_bitset_length);\n\nSLJIT_ASSERT(!(common->req_char_ptr != 0 && common->start_used_ptr != 0));\ncommon->cbra_ptr = OVECTOR_START + (re->top_bracket + 1) * 2 * sizeof(sljit_sw);\nprivate_data_size = common->cbra_ptr + (re->top_bracket + 1) * sizeof(sljit_sw);\n\nif ((re->overall_options & PCRE2_ANCHORED) == 0 &&\n    (re->optimization_flags & PCRE2_OPTIM_START_OPTIMIZE) != 0 &&\n    !common->has_skip_in_assert_back)\n  detect_early_fail(common, common->start, &private_data_size, 0, 0);\n\nset_private_data_ptrs(common, &private_data_size, ccend);\n\nSLJIT_ASSERT(common->early_fail_start_ptr <= common->early_fail_end_ptr);\n\nif (private_data_size > 65536)\n  {\n  SLJIT_FREE(common->private_data_ptrs, allocator_data);\n  return PCRE2_ERROR_JIT_UNSUPPORTED;\n  }\n\nif (common->has_then)\n  {\n  total_length = ccend - common->start;\n  common->then_offsets = (sljit_u8 *)SLJIT_MALLOC(total_length, allocator_data);\n  if (!common->then_offsets)\n    {\n    SLJIT_FREE(common->private_data_ptrs, allocator_data);\n    return PCRE2_ERROR_NOMEMORY;\n    }\n  memset(common->then_offsets, 0, total_length);\n  set_then_offsets(common, common->start, NULL);\n  }\n\ncompiler = sljit_create_compiler(allocator_data);\nif (!compiler)\n  {\n  SLJIT_FREE(common->private_data_ptrs, allocator_data);\n  if (common->has_then)\n    SLJIT_FREE(common->then_offsets, allocator_data);\n  return PCRE2_ERROR_NOMEMORY;\n  }\ncommon->compiler = compiler;\n\n/* Main pcre2_jit_exec entry. */\nSLJIT_ASSERT((private_data_size & (sizeof(sljit_sw) - 1)) == 0);\nsljit_emit_enter(compiler, 0, SLJIT_ARGS1(W, W), 5 | SLJIT_ENTER_VECTOR(SLJIT_NUMBER_OF_SCRATCH_VECTOR_REGISTERS), 5, private_data_size);\n\n/* Register init. */\nreset_ovector(common, (re->top_bracket + 1) * 2);\nif (common->req_char_ptr != 0)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->req_char_ptr, SLJIT_R0, 0);\n\nOP1(SLJIT_MOV, ARGUMENTS, 0, SLJIT_S0, 0);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_S0, 0);\nOP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, str));\nOP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, end));\nOP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, stack));\nOP1(SLJIT_MOV_U32, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, limit_match));\nOP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(struct sljit_stack, end));\nOP1(SLJIT_MOV, STACK_LIMIT, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(struct sljit_stack, start));\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 1);\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LIMIT_MATCH, TMP1, 0);\n\nif (common->early_fail_start_ptr < common->early_fail_end_ptr)\n  reset_early_fail(common);\n\nif (mode == PCRE2_JIT_PARTIAL_SOFT)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, -1);\nif (common->mark_ptr != 0)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->mark_ptr, SLJIT_IMM, 0);\nif (common->control_head_ptr != 0)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0);\n\n/* Main part of the matching */\nif ((re->overall_options & PCRE2_ANCHORED) == 0)\n  {\n  mainloop_label = mainloop_entry(common);\n  continue_match_label = LABEL();\n  /* Forward search if possible. */\n  if ((re->optimization_flags & PCRE2_OPTIM_START_OPTIMIZE) != 0)\n    {\n    if (mode == PCRE2_JIT_COMPLETE && fast_forward_first_n_chars(common))\n      ;\n    else if ((re->flags & PCRE2_FIRSTSET) != 0)\n      fast_forward_first_char(common);\n    else if ((re->flags & PCRE2_STARTLINE) != 0)\n      fast_forward_newline(common);\n    else if ((re->flags & PCRE2_FIRSTMAPSET) != 0)\n      fast_forward_start_bits(common);\n    }\n  }\nelse\n  continue_match_label = LABEL();\n\nif (mode == PCRE2_JIT_COMPLETE && re->minlength > 0 &&\n    (re->optimization_flags & PCRE2_OPTIM_START_OPTIMIZE) != 0)\n  {\n  OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, PCRE2_ERROR_NOMATCH);\n  OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(re->minlength));\n  minlength_check_failed = CMP(SLJIT_GREATER, TMP2, 0, STR_END, 0);\n  }\nif (common->req_char_ptr != 0)\n  reqcu_not_found = search_requested_char(common, (PCRE2_UCHAR)(re->last_codeunit), (re->flags & PCRE2_LASTCASELESS) != 0, (re->flags & PCRE2_FIRSTSET) != 0);\n\n/* Store the current STR_PTR in OVECTOR(0). */\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(0), STR_PTR, 0);\n/* Copy the limit of allowed recursions. */\nOP1(SLJIT_MOV, COUNT_MATCH, 0, SLJIT_MEM1(SLJIT_SP), LIMIT_MATCH);\nif (common->capture_last_ptr != 0)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, SLJIT_IMM, 0);\nif (common->fast_forward_bc_ptr != NULL)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), PRIVATE_DATA(common->fast_forward_bc_ptr + 1) >> 3, STR_PTR, 0);\n\nif (common->start_ptr != OVECTOR(0))\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_ptr, STR_PTR, 0);\n\n/* Copy the beginning of the string. */\nif (mode == PCRE2_JIT_PARTIAL_SOFT)\n  {\n  jump = CMP(SLJIT_NOT_EQUAL, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, -1);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);\n  JUMPHERE(jump);\n  }\nelse if (mode == PCRE2_JIT_PARTIAL_HARD)\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);\n\ncompile_matchingpath(common, common->start, ccend, &rootbacktrack);\nif (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n  {\n  sljit_free_compiler(compiler);\n  SLJIT_FREE(common->private_data_ptrs, allocator_data);\n  if (common->has_then)\n    SLJIT_FREE(common->then_offsets, allocator_data);\n  PRIV(jit_free_rodata)(common->read_only_data_head, allocator_data);\n  return PCRE2_ERROR_NOMEMORY;\n  }\n\nif ((re->overall_options & PCRE2_ENDANCHORED) != 0)\n  end_anchor_failed = CMP(SLJIT_NOT_EQUAL, STR_PTR, 0, STR_END, 0);\n\nif (common->might_be_empty)\n  {\n  empty_match = CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0));\n  empty_match_found_label = LABEL();\n  }\n\ncommon->accept_label = LABEL();\nif (common->accept != NULL)\n  set_jumps(common->accept, common->accept_label);\n\n/* Fail if we detect that the start position was moved to be either after\nthe end position (\\K in lookahead) or before the start offset (\\K in\nlookbehind). */\n\nif (common->has_set_som &&\n    (common->re->extra_options & PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK) == 0)\n  {\n  if (HAS_VIRTUAL_REGISTERS)\n    {\n    OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, str));\n    }\n  else\n    {\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, str));\n    }\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0));\n\n  /* (ovector[0] < jit_arguments->str)? */\n  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP2, 0, TMP1, 0);\n  /* Unconditionally set R0 (aka TMP1), in between the comparison that needs to\n  use TMP1, but before the jump. */\n  OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, PCRE2_ERROR_BAD_BACKSLASH_K);\n  add_jump(compiler, &common->abort, JUMP(SLJIT_LESS));\n  /* (ovector[0] > STR_PTR)?  NB. ovector[1] hasn't yet been set to STR_PTR. */\n  add_jump(compiler, &common->abort, CMP(SLJIT_GREATER, TMP2, 0, STR_PTR, 0));\n  }\n\n/* This means we have a match. Update the ovector. */\ncopy_ovector(common, re->top_bracket + 1);\ncommon->quit_label = common->abort_label = LABEL();\nif (common->quit != NULL)\n  set_jumps(common->quit, common->quit_label);\nif (common->abort != NULL)\n  set_jumps(common->abort, common->abort_label);\nif (minlength_check_failed != NULL)\n  SET_LABEL(minlength_check_failed, common->abort_label);\n\nsljit_emit_op0(compiler, SLJIT_SKIP_FRAMES_BEFORE_RETURN);\nsljit_emit_return(compiler, SLJIT_MOV, SLJIT_RETURN_REG, 0);\n\nif (common->failed_match != NULL)\n  {\n  SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);\n  set_jumps(common->failed_match, LABEL());\n  OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, PCRE2_ERROR_NOMATCH);\n  JUMPTO(SLJIT_JUMP, common->abort_label);\n  }\n\nif ((re->overall_options & PCRE2_ENDANCHORED) != 0)\n  JUMPHERE(end_anchor_failed);\n\nif (mode != PCRE2_JIT_COMPLETE)\n  {\n  common->partialmatchlabel = LABEL();\n  set_jumps(common->partialmatch, common->partialmatchlabel);\n  return_with_partial_match(common, common->quit_label);\n  }\n\nif (common->might_be_empty)\n  empty_match_backtrack_label = LABEL();\ncompile_backtrackingpath(common, rootbacktrack.top);\nif (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n  {\n  sljit_free_compiler(compiler);\n  SLJIT_FREE(common->private_data_ptrs, allocator_data);\n  if (common->has_then)\n    SLJIT_FREE(common->then_offsets, allocator_data);\n  PRIV(jit_free_rodata)(common->read_only_data_head, allocator_data);\n  return PCRE2_ERROR_NOMEMORY;\n  }\n\nSLJIT_ASSERT(rootbacktrack.prev == NULL);\nreset_match_label = LABEL();\n\nif (mode == PCRE2_JIT_PARTIAL_SOFT)\n  {\n  /* Update hit_start only in the first time. */\n  jump = CMP(SLJIT_NOT_EQUAL, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, 0);\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->start_ptr);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, SLJIT_IMM, -1);\n  OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start, TMP1, 0);\n  JUMPHERE(jump);\n  }\n\n/* Check we have remaining characters. */\nif ((re->overall_options & PCRE2_ANCHORED) == 0 && common->match_end_ptr != 0)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);\n  }\n\nOP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP),\n    (common->fast_forward_bc_ptr != NULL) ? (PRIVATE_DATA(common->fast_forward_bc_ptr + 1) >> 3) : common->start_ptr);\n\nif ((re->overall_options & PCRE2_ANCHORED) == 0)\n  {\n  if (common->ff_newline_shortcut != NULL)\n    {\n    /* There cannot be more newlines if PCRE2_FIRSTLINE is set. */\n    if ((re->overall_options & PCRE2_FIRSTLINE) == 0)\n      {\n      if (common->match_end_ptr != 0)\n        {\n        OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);\n        OP1(SLJIT_MOV, STR_END, 0, TMP1, 0);\n        CMPTO(SLJIT_LESS, STR_PTR, 0, TMP1, 0, common->ff_newline_shortcut);\n        OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);\n        }\n      else\n        CMPTO(SLJIT_LESS, STR_PTR, 0, STR_END, 0, common->ff_newline_shortcut);\n      }\n    }\n  else\n    CMPTO(SLJIT_LESS, STR_PTR, 0, (common->match_end_ptr == 0) ? STR_END : TMP1, 0, mainloop_label);\n  }\n\n/* No more remaining characters. */\nif (reqcu_not_found != NULL)\n  set_jumps(reqcu_not_found, LABEL());\n\nif (mode == PCRE2_JIT_PARTIAL_SOFT)\n  CMPTO(SLJIT_NOT_EQUAL, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, -1, common->partialmatchlabel);\n\nOP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, PCRE2_ERROR_NOMATCH);\nJUMPTO(SLJIT_JUMP, common->quit_label);\n\nflush_stubs(common);\n\nif (common->might_be_empty)\n  {\n  JUMPHERE(empty_match);\n  OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);\n  OP1(SLJIT_MOV_U32, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, options));\n  OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY);\n  JUMPTO(SLJIT_NOT_ZERO, empty_match_backtrack_label);\n  OP2U(SLJIT_AND | SLJIT_SET_Z, TMP2, 0, SLJIT_IMM, PCRE2_NOTEMPTY_ATSTART);\n  JUMPTO(SLJIT_ZERO, empty_match_found_label);\n  OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, str));\n  CMPTO(SLJIT_NOT_EQUAL, TMP2, 0, STR_PTR, 0, empty_match_found_label);\n  JUMPTO(SLJIT_JUMP, empty_match_backtrack_label);\n  }\n\ncommon->fast_forward_bc_ptr = NULL;\ncommon->early_fail_start_ptr = 0;\ncommon->early_fail_end_ptr = 0;\ncommon->currententry = common->entries;\ncommon->local_quit_available = TRUE;\nquit_label = common->quit_label;\nSLJIT_ASSERT(common->restore_end_ptr == 0);\n\nif (common->currententry != NULL)\n  {\n  /* A free bit for each private data. */\n  common->recurse_bitset_size = ((private_data_size / SSIZE_OF(sw)) + 7) >> 3;\n  SLJIT_ASSERT(common->recurse_bitset_size > 0);\n  common->recurse_bitset = (sljit_u8*)SLJIT_MALLOC(common->recurse_bitset_size, allocator_data);;\n\n  if (common->recurse_bitset != NULL)\n    {\n    do\n      {\n      /* Might add new entries. */\n      compile_recurse(common);\n      if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))\n        break;\n      flush_stubs(common);\n      common->currententry = common->currententry->next;\n      }\n    while (common->currententry != NULL);\n\n    SLJIT_FREE(common->recurse_bitset, allocator_data);\n    }\n\n  if (common->currententry != NULL)\n    {\n    /* The common->recurse_bitset has been freed. */\n    SLJIT_ASSERT(sljit_get_compiler_error(compiler) || common->recurse_bitset == NULL);\n\n    sljit_free_compiler(compiler);\n    SLJIT_FREE(common->private_data_ptrs, allocator_data);\n    if (common->has_then)\n      SLJIT_FREE(common->then_offsets, allocator_data);\n    PRIV(jit_free_rodata)(common->read_only_data_head, allocator_data);\n    return PCRE2_ERROR_NOMEMORY;\n    }\n  }\n\ncommon->local_quit_available = FALSE;\ncommon->quit_label = quit_label;\nSLJIT_ASSERT(common->restore_end_ptr == 0);\n\n/* Allocating stack, returns with PCRE2_ERROR_JIT_STACKLIMIT if fails. */\n/* This is a (really) rare case. */\nset_jumps(common->stackalloc, LABEL());\n/* RETURN_ADDR is not a saved register. */\nSLJIT_ASSERT(common->locals_size >= 2 * SSIZE_OF(sw));\nsljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, SLJIT_MEM1(SLJIT_SP), LOCAL0);\n\nSLJIT_ASSERT(TMP1 == SLJIT_R0 && STR_PTR == SLJIT_R1);\n\nOP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCAL1, STR_PTR, 0);\nOP1(SLJIT_MOV, SLJIT_R0, 0, ARGUMENTS, 0);\nOP2(SLJIT_SUB, SLJIT_R1, 0, STACK_LIMIT, 0, SLJIT_IMM, STACK_GROWTH_RATE);\nOP1(SLJIT_MOV, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, stack));\nOP1(SLJIT_MOV, STACK_LIMIT, 0, TMP2, 0);\n\nsljit_emit_icall(compiler, SLJIT_CALL, SLJIT_ARGS2(W, W, W), SLJIT_IMM, SLJIT_FUNC_ADDR(sljit_stack_resize));\n\njump = CMP(SLJIT_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);\nOP1(SLJIT_MOV, TMP2, 0, STACK_LIMIT, 0);\nOP1(SLJIT_MOV, STACK_LIMIT, 0, SLJIT_RETURN_REG, 0);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), LOCAL0);\nOP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), LOCAL1);\nOP_SRC(SLJIT_FAST_RETURN, TMP1, 0);\n\n/* Allocation failed. */\nJUMPHERE(jump);\n/* We break the return address cache here, but this is a really rare case. */\nOP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, PCRE2_ERROR_JIT_STACKLIMIT);\nJUMPTO(SLJIT_JUMP, common->quit_label);\n\n/* Call limit reached. */\nset_jumps(common->calllimit, LABEL());\nOP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, PCRE2_ERROR_MATCHLIMIT);\nJUMPTO(SLJIT_JUMP, common->quit_label);\n\nif (common->revertframes != NULL)\n  {\n  set_jumps(common->revertframes, LABEL());\n  do_revertframes(common);\n  }\nif (common->wordboundary != NULL)\n  {\n  set_jumps(common->wordboundary, LABEL());\n  check_wordboundary(common, FALSE);\n  }\nif (common->ucp_wordboundary != NULL)\n  {\n  set_jumps(common->ucp_wordboundary, LABEL());\n  check_wordboundary(common, TRUE);\n  }\nif (common->anynewline != NULL)\n  {\n  set_jumps(common->anynewline, LABEL());\n  check_anynewline(common);\n  }\nif (common->hspace != NULL)\n  {\n  set_jumps(common->hspace, LABEL());\n  check_hspace(common);\n  }\nif (common->vspace != NULL)\n  {\n  set_jumps(common->vspace, LABEL());\n  check_vspace(common);\n  }\nif (common->casefulcmp != NULL)\n  {\n  set_jumps(common->casefulcmp, LABEL());\n  do_casefulcmp(common);\n  }\nif (common->caselesscmp != NULL)\n  {\n  set_jumps(common->caselesscmp, LABEL());\n  do_caselesscmp(common);\n  }\nif (common->reset_match != NULL || common->restart_match != NULL)\n  {\n  if (common->restart_match != NULL)\n    {\n    set_jumps(common->restart_match, LABEL());\n    OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), common->start_ptr);\n    }\n\n  set_jumps(common->reset_match, LABEL());\n  do_reset_match(common, (re->top_bracket + 1) * 2);\n  /* The value of restart_match is in TMP1. */\n  CMPTO(SLJIT_GREATER, STR_PTR, 0, TMP1, 0, continue_match_label);\n  OP1(SLJIT_MOV, STR_PTR, 0, TMP1, 0);\n  JUMPTO(SLJIT_JUMP, reset_match_label);\n  }\n#ifdef SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\nif (common->utfreadchar != NULL)\n  {\n  set_jumps(common->utfreadchar, LABEL());\n  do_utfreadchar(common);\n  }\nif (common->utfreadtype8 != NULL)\n  {\n  set_jumps(common->utfreadtype8, LABEL());\n  do_utfreadtype8(common);\n  }\nif (common->utfpeakcharback != NULL)\n  {\n  set_jumps(common->utfpeakcharback, LABEL());\n  do_utfpeakcharback(common);\n  }\n#endif /* PCRE2_CODE_UNIT_WIDTH == 8 */\n#if PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16\nif (common->utfreadchar_invalid != NULL)\n  {\n  set_jumps(common->utfreadchar_invalid, LABEL());\n  do_utfreadchar_invalid(common);\n  }\nif (common->utfreadnewline_invalid != NULL)\n  {\n  set_jumps(common->utfreadnewline_invalid, LABEL());\n  do_utfreadnewline_invalid(common);\n  }\nif (common->utfmoveback_invalid)\n  {\n  set_jumps(common->utfmoveback_invalid, LABEL());\n  do_utfmoveback_invalid(common);\n  }\nif (common->utfpeakcharback_invalid)\n  {\n  set_jumps(common->utfpeakcharback_invalid, LABEL());\n  do_utfpeakcharback_invalid(common);\n  }\n#endif /* PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16 */\nif (common->getucd != NULL)\n  {\n  set_jumps(common->getucd, LABEL());\n  do_getucd(common);\n  }\nif (common->getucdtype != NULL)\n  {\n  set_jumps(common->getucdtype, LABEL());\n  do_getucdtype(common);\n  }\n#endif /* SUPPORT_UNICODE */\n\nSLJIT_FREE(common->private_data_ptrs, allocator_data);\nif (common->has_then)\n  SLJIT_FREE(common->then_offsets, allocator_data);\n\nexecutable_func = sljit_generate_code(compiler, 0, NULL);\nexecutable_size = sljit_get_generated_code_size(compiler);\nsljit_free_compiler(compiler);\n\nif (executable_func == NULL)\n  {\n  PRIV(jit_free_rodata)(common->read_only_data_head, allocator_data);\n  return PCRE2_ERROR_NOMEMORY;\n  }\n\n/* Reuse the function descriptor if possible. */\nif (re->executable_jit != NULL)\n  functions = (executable_functions *)re->executable_jit;\nelse\n  {\n  functions = SLJIT_MALLOC(sizeof(executable_functions), allocator_data);\n  if (functions == NULL)\n    {\n    /* This case is highly unlikely since we just recently\n    freed a lot of memory. Not impossible though. */\n    sljit_free_code(executable_func, NULL);\n    PRIV(jit_free_rodata)(common->read_only_data_head, allocator_data);\n    return PCRE2_ERROR_NOMEMORY;\n    }\n  memset(functions, 0, sizeof(executable_functions));\n  functions->top_bracket = re->top_bracket + 1;\n  functions->limit_match = re->limit_match;\n  re->executable_jit = functions;\n  }\n\n/* Turn mode into an index. */\nif (mode == PCRE2_JIT_COMPLETE)\n  mode = 0;\nelse\n  mode = (mode == PCRE2_JIT_PARTIAL_SOFT) ? 1 : 2;\n\nSLJIT_ASSERT(mode < JIT_NUMBER_OF_COMPILE_MODES);\nfunctions->executable_funcs[mode] = executable_func;\nfunctions->read_only_data_heads[mode] = common->read_only_data_head;\nfunctions->executable_sizes[mode] = executable_size;\nreturn 0;\n}\n\n#endif\n\n/*************************************************\n*        JIT compile a Regular Expression        *\n*************************************************/\n\n/* This function used JIT to convert a previously-compiled pattern into machine\ncode.\n\nArguments:\n  code          a compiled pattern\n  options       JIT option bits\n\nReturns:        0: success or (*NOJIT) was used\n               <0: an error code\n*/\n\n#define PUBLIC_JIT_COMPILE_OPTIONS \\\n  (PCRE2_JIT_COMPLETE|PCRE2_JIT_PARTIAL_SOFT|PCRE2_JIT_PARTIAL_HARD|PCRE2_JIT_INVALID_UTF)\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_jit_compile(pcre2_code *code, uint32_t options)\n{\npcre2_real_code *re = (pcre2_real_code *)code;\n#ifdef SUPPORT_JIT\nvoid *exec_memory;\nexecutable_functions *functions;\nstatic int executable_allocator_is_working = -1;\n\nif (executable_allocator_is_working == -1)\n  {\n  /* Checks whether the executable allocator is working. This check\n     might run multiple times in multi-threaded environments, but the\n     result should not be affected by it. */\n  exec_memory = SLJIT_MALLOC_EXEC(32, NULL);\n  if (exec_memory != NULL)\n    {\n    SLJIT_FREE_EXEC(((sljit_u8*)(exec_memory)) + SLJIT_EXEC_OFFSET(exec_memory), NULL);\n    executable_allocator_is_working = 1;\n    }\n  else executable_allocator_is_working = 0;\n  }\n#endif\n\nif (options & PCRE2_JIT_TEST_ALLOC)\n  {\n  if (options != PCRE2_JIT_TEST_ALLOC)\n    return PCRE2_ERROR_JIT_BADOPTION;\n\n#ifdef SUPPORT_JIT\n  return executable_allocator_is_working ? 0 : PCRE2_ERROR_NOMEMORY;\n#else\n  return PCRE2_ERROR_JIT_UNSUPPORTED;\n#endif\n  }\n\nif (code == NULL)\n  return PCRE2_ERROR_NULL;\n\nif ((options & ~PUBLIC_JIT_COMPILE_OPTIONS) != 0)\n  return PCRE2_ERROR_JIT_BADOPTION;\n\n/* Support for invalid UTF was first introduced in JIT, with the option\nPCRE2_JIT_INVALID_UTF. Later, support was added to the interpreter, and the\ncompile-time option PCRE2_MATCH_INVALID_UTF was created. This is now the\npreferred feature, with the earlier option deprecated. However, for backward\ncompatibility, if the earlier option is set, it forces the new option so that\nif JIT matching falls back to the interpreter, there is still support for\ninvalid UTF. However, if this function has already been successfully called\nwithout PCRE2_JIT_INVALID_UTF and without PCRE2_MATCH_INVALID_UTF (meaning that\nnon-invalid-supporting JIT code was compiled), give an error.\n\nIf in the future support for PCRE2_JIT_INVALID_UTF is withdrawn, the following\nactions are needed:\n\n  1. Remove the definition from pcre2.h.in and from the list in\n     PUBLIC_JIT_COMPILE_OPTIONS above.\n\n  2. Replace PCRE2_JIT_INVALID_UTF with a local flag in this module.\n\n  3. Replace PCRE2_JIT_INVALID_UTF in pcre2_jit_test.c.\n\n  4. Delete the following short block of code. The setting of \"re\" and\n     \"functions\" can be moved into the JIT-only block below, but if that is\n     done, (void)re and (void)functions will be needed in the non-JIT case, to\n     avoid compiler warnings.\n*/\n\n#ifdef SUPPORT_JIT\nfunctions = (executable_functions *)re->executable_jit;\n#endif\n\nif ((options & PCRE2_JIT_INVALID_UTF) != 0)\n  {\n  if ((re->overall_options & PCRE2_MATCH_INVALID_UTF) == 0)\n    {\n#ifdef SUPPORT_JIT\n    if (functions != NULL) return PCRE2_ERROR_JIT_BADOPTION;\n#endif\n    re->overall_options |= PCRE2_MATCH_INVALID_UTF;\n    }\n  }\n\n/* The above tests are run with and without JIT support. This means that\nPCRE2_JIT_INVALID_UTF propagates back into the regex options (ensuring\ninterpreter support) even in the absence of JIT. But now, if there is no JIT\nsupport, give an error return. */\n\n#ifndef SUPPORT_JIT\nreturn PCRE2_ERROR_JIT_BADOPTION;\n#else  /* SUPPORT_JIT */\n\n/* There is JIT support. Do the necessary. */\n\nif ((re->flags & PCRE2_NOJIT) != 0) return 0;\n\nif (!executable_allocator_is_working)\n  return PCRE2_ERROR_NOMEMORY;\n\nif ((re->overall_options & PCRE2_MATCH_INVALID_UTF) != 0)\n  options |= PCRE2_JIT_INVALID_UTF;\n\nif ((options & PCRE2_JIT_COMPLETE) != 0 && (functions == NULL\n    || functions->executable_funcs[0] == NULL)) {\n  uint32_t excluded_options = (PCRE2_JIT_PARTIAL_SOFT | PCRE2_JIT_PARTIAL_HARD);\n  int result = jit_compile(code, options & ~excluded_options);\n  if (result != 0)\n    return result;\n  }\n\nif ((options & PCRE2_JIT_PARTIAL_SOFT) != 0 && (functions == NULL\n    || functions->executable_funcs[1] == NULL)) {\n  uint32_t excluded_options = (PCRE2_JIT_COMPLETE | PCRE2_JIT_PARTIAL_HARD);\n  int result = jit_compile(code, options & ~excluded_options);\n  if (result != 0)\n    return result;\n  }\n\nif ((options & PCRE2_JIT_PARTIAL_HARD) != 0 && (functions == NULL\n    || functions->executable_funcs[2] == NULL)) {\n  uint32_t excluded_options = (PCRE2_JIT_COMPLETE | PCRE2_JIT_PARTIAL_SOFT);\n  int result = jit_compile(code, options & ~excluded_options);\n  if (result != 0)\n    return result;\n  }\n\nreturn 0;\n\n#endif  /* SUPPORT_JIT */\n}\n\n/* JIT compiler uses an all-in-one approach. This improves security,\n   since the code generator functions are not exported. */\n\n#define INCLUDED_FROM_PCRE2_JIT_COMPILE\n\n#include \"pcre2_jit_match_inc.h\"\n#include \"pcre2_jit_misc_inc.h\"\n\n/* End of pcre2_jit_compile.c */\n"
  },
  {
    "path": "src/pcre2_jit_match_inc.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2023 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n#ifndef INCLUDED_FROM_PCRE2_JIT_COMPILE\n#error This file must be included from pcre2_jit_compile.c.\n#endif\n\n#if defined(__has_feature)\n#if __has_feature(memory_sanitizer)\n#include <sanitizer/msan_interface.h>\n#endif /* __has_feature(memory_sanitizer) */\n#endif /* defined(__has_feature) */\n\n#ifdef SUPPORT_JIT\n\nstatic SLJIT_NOINLINE int jit_machine_stack_exec(jit_arguments *arguments, jit_function executable_func)\n{\nsljit_u8 local_space[MACHINE_STACK_SIZE];\nstruct sljit_stack local_stack;\n\nlocal_stack.min_start = local_space;\nlocal_stack.start = local_space;\nlocal_stack.end = local_space + MACHINE_STACK_SIZE;\nlocal_stack.top = local_space + MACHINE_STACK_SIZE;\narguments->stack = &local_stack;\nreturn executable_func(arguments);\n}\n\n#endif\n\n\n/*************************************************\n*              Do a JIT pattern match            *\n*************************************************/\n\n/* This function runs a JIT pattern match.\n\nArguments:\n  code            points to the compiled expression\n  subject         points to the subject string\n  length          length of subject string (may contain binary zeros)\n  start_offset    where to start in the subject string\n  options         option bits\n  match_data      points to a match_data block\n  mcontext        points to a match context\n\nReturns:          > 0 => success; value is the number of ovector pairs filled\n                  = 0 => success, but ovector is not big enough\n                   -1 => failed to match (PCRE2_ERROR_NOMATCH)\n                 < -1 => some kind of unexpected problem\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_jit_match(const pcre2_code *code, PCRE2_SPTR subject, PCRE2_SIZE length,\n  PCRE2_SIZE start_offset, uint32_t options, pcre2_match_data *match_data,\n  pcre2_match_context *mcontext)\n{\n#ifndef SUPPORT_JIT\n\n(void)code;\n(void)subject;\n(void)length;\n(void)start_offset;\n(void)options;\n(void)mcontext;\nreturn match_data->rc = PCRE2_ERROR_JIT_BADOPTION;\n\n#else  /* SUPPORT_JIT */\n\npcre2_real_code *re = (pcre2_real_code *)code;\nexecutable_functions *functions = (executable_functions *)re->executable_jit;\npcre2_jit_stack *jit_stack;\nuint32_t oveccount = match_data->oveccount;\nuint32_t max_oveccount;\nunion {\n   void *executable_func;\n   jit_function call_executable_func;\n} convert_executable_func;\njit_arguments arguments;\nint rc;\nint index = 0;\n\nif ((options & PCRE2_PARTIAL_HARD) != 0)\n  index = 2;\nelse if ((options & PCRE2_PARTIAL_SOFT) != 0)\n  index = 1;\n\nif (functions == NULL || functions->executable_funcs[index] == NULL)\n  return match_data->rc = PCRE2_ERROR_JIT_BADOPTION;\n\n/* Sanity checks should be handled by pcre2_match. */\narguments.str = subject + start_offset;\narguments.begin = subject;\narguments.end = subject + length;\narguments.match_data = match_data;\narguments.startchar_ptr = subject;\narguments.mark_ptr = NULL;\narguments.options = options;\n\nif (mcontext != NULL)\n  {\n  arguments.callout = mcontext->callout;\n  arguments.callout_data = mcontext->callout_data;\n  arguments.offset_limit = mcontext->offset_limit;\n  arguments.limit_match = (mcontext->match_limit < re->limit_match)?\n    mcontext->match_limit : re->limit_match;\n  if (mcontext->jit_callback != NULL)\n    jit_stack = mcontext->jit_callback(mcontext->jit_callback_data);\n  else\n    jit_stack = (pcre2_jit_stack *)mcontext->jit_callback_data;\n  }\nelse\n  {\n  arguments.callout = NULL;\n  arguments.callout_data = NULL;\n  arguments.offset_limit = PCRE2_UNSET;\n  arguments.limit_match = (MATCH_LIMIT < re->limit_match)?\n    MATCH_LIMIT : re->limit_match;\n  jit_stack = NULL;\n  }\n\n\nmax_oveccount = functions->top_bracket;\nif (oveccount > max_oveccount)\n  oveccount = max_oveccount;\narguments.oveccount = oveccount << 1;\n\n\nconvert_executable_func.executable_func = functions->executable_funcs[index];\nif (jit_stack != NULL)\n  {\n  arguments.stack = (struct sljit_stack *)(jit_stack->stack);\n  rc = convert_executable_func.call_executable_func(&arguments);\n  }\nelse\n  rc = jit_machine_stack_exec(&arguments, convert_executable_func.call_executable_func);\n\nif (rc > (int)oveccount)\n  rc = 0;\nmatch_data->code = re;\nmatch_data->subject =\n  (rc >= 0 || rc == PCRE2_ERROR_NOMATCH || rc == PCRE2_ERROR_PARTIAL)? subject : NULL;\nmatch_data->subject_length = length;\nmatch_data->start_offset = start_offset;\nmatch_data->rc = rc;\nmatch_data->startchar = arguments.startchar_ptr - subject;\nmatch_data->leftchar = 0;\nmatch_data->rightchar = 0;\nmatch_data->mark = arguments.mark_ptr;\nmatch_data->matchedby = PCRE2_MATCHEDBY_JIT;\nmatch_data->options = options;\n\n#if defined(__has_feature)\n#if __has_feature(memory_sanitizer)\nif (rc > 0)\n  __msan_unpoison(match_data->ovector, 2 * rc * sizeof(match_data->ovector[0]));\n#endif /* __has_feature(memory_sanitizer) */\n#endif /* defined(__has_feature) */\n\nreturn match_data->rc;\n\n#endif  /* SUPPORT_JIT */\n}\n\n/* End of pcre2_jit_match_inc.h */\n"
  },
  {
    "path": "src/pcre2_jit_misc_inc.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n         New API code Copyright (c) 2016 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#ifndef INCLUDED_FROM_PCRE2_JIT_COMPILE\n#error This file must be included from pcre2_jit_compile.c.\n#endif\n\n\n\n/*************************************************\n*           Free JIT read-only data              *\n*************************************************/\n\nvoid\nPRIV(jit_free_rodata)(void *current, void *allocator_data)\n{\n#ifndef SUPPORT_JIT\n(void)current;\n(void)allocator_data;\n#else  /* SUPPORT_JIT */\nvoid *next;\n\nSLJIT_UNUSED_ARG(allocator_data);\n\nwhile (current != NULL)\n  {\n  next = *(void**)current;\n  SLJIT_FREE(current, allocator_data);\n  current = next;\n  }\n\n#endif /* SUPPORT_JIT */\n}\n\n/*************************************************\n*           Free JIT compiled code               *\n*************************************************/\n\nvoid\nPRIV(jit_free)(void *executable_jit, pcre2_memctl *memctl)\n{\n#ifndef SUPPORT_JIT\n(void)executable_jit;\n(void)memctl;\n#else  /* SUPPORT_JIT */\n\nexecutable_functions *functions = (executable_functions *)executable_jit;\nvoid *allocator_data = memctl;\nint i;\n\nfor (i = 0; i < JIT_NUMBER_OF_COMPILE_MODES; i++)\n  {\n  if (functions->executable_funcs[i] != NULL)\n    sljit_free_code(functions->executable_funcs[i], NULL);\n  PRIV(jit_free_rodata)(functions->read_only_data_heads[i], allocator_data);\n  }\n\nSLJIT_FREE(functions, allocator_data);\n\n#endif /* SUPPORT_JIT */\n}\n\n\n/*************************************************\n*            Free unused JIT memory              *\n*************************************************/\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_jit_free_unused_memory(pcre2_general_context *gcontext)\n{\n#ifndef SUPPORT_JIT\n(void)gcontext;     /* Suppress warning */\n#else  /* SUPPORT_JIT */\nSLJIT_UNUSED_ARG(gcontext);\n#if (defined SLJIT_EXECUTABLE_ALLOCATOR && SLJIT_EXECUTABLE_ALLOCATOR)\nsljit_free_unused_memory_exec();\n#endif /* SLJIT_EXECUTABLE_ALLOCATOR */\n#endif /* SUPPORT_JIT */\n}\n\n\n\n/*************************************************\n*            Allocate a JIT stack                *\n*************************************************/\n\nPCRE2_EXP_DEFN pcre2_jit_stack * PCRE2_CALL_CONVENTION\npcre2_jit_stack_create(size_t startsize, size_t maxsize,\n  pcre2_general_context *gcontext)\n{\n#ifndef SUPPORT_JIT\n\n(void)gcontext;\n(void)startsize;\n(void)maxsize;\nreturn NULL;\n\n#else  /* SUPPORT_JIT */\n\npcre2_jit_stack *jit_stack;\n\nif (startsize == 0 || maxsize == 0 || maxsize > SIZE_MAX - STACK_GROWTH_RATE)\n  return NULL;\nif (startsize > maxsize)\n  startsize = maxsize;\nstartsize = (startsize + STACK_GROWTH_RATE - 1) & (size_t)(~(STACK_GROWTH_RATE - 1));\nmaxsize = (maxsize + STACK_GROWTH_RATE - 1) & (size_t)(~(STACK_GROWTH_RATE - 1));\n\njit_stack = PRIV(memctl_malloc)(sizeof(pcre2_real_jit_stack), (pcre2_memctl *)gcontext);\nif (jit_stack == NULL) return NULL;\njit_stack->stack = sljit_allocate_stack(startsize, maxsize, &jit_stack->memctl);\nif (jit_stack->stack == NULL)\n  {\n  jit_stack->memctl.free(jit_stack, jit_stack->memctl.memory_data);\n  return NULL;\n  }\nreturn jit_stack;\n\n#endif\n}\n\n\n/*************************************************\n*         Assign a JIT stack to a pattern        *\n*************************************************/\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_jit_stack_assign(pcre2_match_context *mcontext, pcre2_jit_callback callback,\n  void *callback_data)\n{\n#ifndef SUPPORT_JIT\n(void)mcontext;\n(void)callback;\n(void)callback_data;\n#else  /* SUPPORT_JIT */\n\nif (mcontext == NULL) return;\nmcontext->jit_callback = callback;\nmcontext->jit_callback_data = callback_data;\n\n#endif  /* SUPPORT_JIT */\n}\n\n\n/*************************************************\n*               Free a JIT stack                 *\n*************************************************/\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_jit_stack_free(pcre2_jit_stack *jit_stack)\n{\n#ifndef SUPPORT_JIT\n(void)jit_stack;\n#else  /* SUPPORT_JIT */\nif (jit_stack != NULL)\n  {\n  sljit_free_stack((struct sljit_stack *)(jit_stack->stack), &jit_stack->memctl);\n  jit_stack->memctl.free(jit_stack, jit_stack->memctl.memory_data);\n  }\n#endif  /* SUPPORT_JIT */\n}\n\n\n/*************************************************\n*               Get target CPU type              *\n*************************************************/\n\nconst char*\nPRIV(jit_get_target)(void)\n{\n#ifndef SUPPORT_JIT\nreturn \"JIT is not supported\";\n#else  /* SUPPORT_JIT */\nreturn sljit_get_platform_name();\n#endif  /* SUPPORT_JIT */\n}\n\n\n/*************************************************\n*              Get size of JIT code              *\n*************************************************/\n\nsize_t\nPRIV(jit_get_size)(void *executable_jit)\n{\n#ifndef SUPPORT_JIT\n(void)executable_jit;\nreturn 0;\n#else  /* SUPPORT_JIT */\nsljit_uw *executable_sizes = ((executable_functions *)executable_jit)->executable_sizes;\nSLJIT_COMPILE_ASSERT(JIT_NUMBER_OF_COMPILE_MODES == 3, number_of_compile_modes_changed);\nreturn executable_sizes[0] + executable_sizes[1] + executable_sizes[2];\n#endif\n}\n\n/* End of pcre2_jit_misc_inc.h */\n"
  },
  {
    "path": "src/pcre2_jit_simd_inc.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n                    This module by Zoltan Herczeg\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2019 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n#if !(defined SUPPORT_VALGRIND)\n\n#if ((defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \\\n     || (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \\\n     || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \\\n     || (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64))\n\ntypedef enum {\n  vector_compare_match1,\n  vector_compare_match1i,\n  vector_compare_match2,\n} vector_compare_type;\n\n#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86)\nstatic SLJIT_INLINE sljit_s32 max_fast_forward_char_pair_offset(void)\n{\n#if PCRE2_CODE_UNIT_WIDTH == 8\n/* The AVX2 code path is currently disabled. */\n/* return sljit_has_cpu_feature(SLJIT_HAS_AVX2) ? 31 : 15; */\nreturn 15;\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n/* The AVX2 code path is currently disabled. */\n/* return sljit_has_cpu_feature(SLJIT_HAS_AVX2) ? 15 : 7; */\nreturn 7;\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n/* The AVX2 code path is currently disabled. */\n/* return sljit_has_cpu_feature(SLJIT_HAS_AVX2) ? 7 : 3; */\nreturn 3;\n#else\n#error \"Unsupported unit width\"\n#endif\n}\n#else /* !SLJIT_CONFIG_X86 */\nstatic SLJIT_INLINE sljit_s32 max_fast_forward_char_pair_offset(void)\n{\n#if PCRE2_CODE_UNIT_WIDTH == 8\nreturn 15;\n#elif PCRE2_CODE_UNIT_WIDTH == 16\nreturn 7;\n#elif PCRE2_CODE_UNIT_WIDTH == 32\nreturn 3;\n#else\n#error \"Unsupported unit width\"\n#endif\n}\n#endif /* SLJIT_CONFIG_X86 */\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstatic struct sljit_jump *jump_if_utf_char_start(struct sljit_compiler *compiler, sljit_s32 reg)\n{\n#if PCRE2_CODE_UNIT_WIDTH == 8\nOP2(SLJIT_AND, reg, 0, reg, 0, SLJIT_IMM, 0xc0);\nreturn CMP(SLJIT_NOT_EQUAL, reg, 0, SLJIT_IMM, 0x80);\n#elif PCRE2_CODE_UNIT_WIDTH == 16\nOP2(SLJIT_AND, reg, 0, reg, 0, SLJIT_IMM, 0xfc00);\nreturn CMP(SLJIT_NOT_EQUAL, reg, 0, SLJIT_IMM, 0xdc00);\n#else\n#error \"Unknown code width\"\n#endif\n}\n#endif\n\n#endif /* SLJIT_CONFIG_X86 || SLJIT_CONFIG_ARM_64 || SLJIT_CONFIG_S390X || SLJIT_CONFIG_LOONGARCH_64 */\n\n#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86)\n\nstatic sljit_s32 character_to_int32(PCRE2_UCHAR chr)\n{\nsljit_u32 value = chr;\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#define SIMD_COMPARE_TYPE_INDEX 0\nreturn (sljit_s32)((value << 24) | (value << 16) | (value << 8) | value);\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n#define SIMD_COMPARE_TYPE_INDEX 1\nreturn (sljit_s32)((value << 16) | value);\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n#define SIMD_COMPARE_TYPE_INDEX 2\nreturn (sljit_s32)(value);\n#else\n#error \"Unsupported unit width\"\n#endif\n}\n\nstatic void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type,\n  sljit_s32 reg_type, int step, sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind)\n{\nsljit_u8 instruction[4];\n\nif (reg_type == SLJIT_SIMD_REG_128)\n  {\n  instruction[0] = 0x66;\n  instruction[1] = 0x0f;\n  }\nelse\n  {\n  /* Two byte VEX prefix. */\n  instruction[0] = 0xc5;\n  instruction[1] = 0xfd;\n  }\n\nSLJIT_ASSERT(step >= 0 && step <= 3);\n\nif (compare_type != vector_compare_match2)\n  {\n  if (step == 0)\n    {\n    if (compare_type == vector_compare_match1i)\n      {\n      /* POR xmm1, xmm2/m128 */\n      if (reg_type == SLJIT_SIMD_REG_256)\n        instruction[1] ^= (dst_ind << 3);\n\n      /* Prefix is filled. */\n      instruction[2] = 0xeb;\n      instruction[3] = 0xc0 | (dst_ind << 3) | cmp2_ind;\n      sljit_emit_op_custom(compiler, instruction, 4);\n      }\n    return;\n    }\n\n  if (step != 2)\n    return;\n\n  /* PCMPEQB/W/D xmm1, xmm2/m128 */\n  if (reg_type == SLJIT_SIMD_REG_256)\n    instruction[1] ^= (dst_ind << 3);\n\n  /* Prefix is filled. */\n  instruction[2] = 0x74 + SIMD_COMPARE_TYPE_INDEX;\n  instruction[3] = 0xc0 | (dst_ind << 3) | cmp1_ind;\n  sljit_emit_op_custom(compiler, instruction, 4);\n  return;\n  }\n\nif (reg_type == SLJIT_SIMD_REG_256)\n  {\n  if (step == 2)\n    return;\n\n  if (step == 0)\n    {\n    step = 2;\n    instruction[1] ^= (dst_ind << 3);\n    }\n  }\n\nswitch (step)\n  {\n  case 0:\n  SLJIT_ASSERT(reg_type == SLJIT_SIMD_REG_128);\n\n  /* MOVDQA xmm1, xmm2/m128 */\n  /* Prefix is filled. */\n  instruction[2] = 0x6f;\n  instruction[3] = 0xc0 | (tmp_ind << 3) | dst_ind;\n  sljit_emit_op_custom(compiler, instruction, 4);\n  return;\n\n  case 1:\n  /* PCMPEQB/W/D xmm1, xmm2/m128 */\n  if (reg_type == SLJIT_SIMD_REG_256)\n    instruction[1] ^= (dst_ind << 3);\n\n  /* Prefix is filled. */\n  instruction[2] = 0x74 + SIMD_COMPARE_TYPE_INDEX;\n  instruction[3] = 0xc0 | (dst_ind << 3) | cmp1_ind;\n  sljit_emit_op_custom(compiler, instruction, 4);\n  return;\n\n  case 2:\n  /* PCMPEQB/W/D xmm1, xmm2/m128 */\n  /* Prefix is filled. */\n  instruction[2] = 0x74 + SIMD_COMPARE_TYPE_INDEX;\n  instruction[3] = 0xc0 | (tmp_ind << 3) | cmp2_ind;\n  sljit_emit_op_custom(compiler, instruction, 4);\n  return;\n\n  case 3:\n  /* POR xmm1, xmm2/m128 */\n  if (reg_type == SLJIT_SIMD_REG_256)\n    instruction[1] ^= (dst_ind << 3);\n\n  /* Prefix is filled. */\n  instruction[2] = 0xeb;\n  instruction[3] = 0xc0 | (dst_ind << 3) | tmp_ind;\n  sljit_emit_op_custom(compiler, instruction, 4);\n  return;\n  }\n}\n\n/* The AVX2 code path is currently disabled.\n#define JIT_HAS_FAST_FORWARD_CHAR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SIMD))\n*/\n#if defined(SLJIT_CONFIG_X86_64) && SLJIT_CONFIG_X86_64\n#define JIT_HAS_FAST_FORWARD_CHAR_SIMD 1\n#else\n#define JIT_HAS_FAST_FORWARD_CHAR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_FPU))\n#endif\n\nstatic void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)\n{\nDEFINE_COMPILER;\nsljit_u8 instruction[8];\n/* The AVX2 code path is currently disabled. */\n/* sljit_s32 reg_type = sljit_has_cpu_feature(SLJIT_HAS_AVX2) ? SLJIT_SIMD_REG_256 : SLJIT_SIMD_REG_128; */\nsljit_s32 reg_type = SLJIT_SIMD_REG_128;\nsljit_s32 value;\nstruct sljit_label *start;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_label *restart;\n#endif\nstruct sljit_jump *quit;\nstruct sljit_jump *partial_quit[2];\nvector_compare_type compare_type = vector_compare_match1;\nsljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);\nsljit_s32 data_ind = sljit_get_register_index(reg_type, SLJIT_VR0);\nsljit_s32 cmp1_ind = sljit_get_register_index(reg_type, SLJIT_VR1);\nsljit_s32 cmp2_ind = sljit_get_register_index(reg_type, SLJIT_VR2);\nsljit_s32 tmp_ind = sljit_get_register_index(reg_type, SLJIT_VR3);\nsljit_u32 bit = 0;\nint i;\n\nSLJIT_UNUSED_ARG(offset);\n\nif (char1 != char2)\n  {\n  bit = char1 ^ char2;\n  compare_type = vector_compare_match1i;\n\n  if (!is_powerof2(bit))\n    {\n    bit = 0;\n    compare_type = vector_compare_match2;\n    }\n  }\n\npartial_quit[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\nif (common->mode == PCRE2_JIT_COMPLETE)\n  add_jump(compiler, &common->failed_match, partial_quit[0]);\n\n/* First part (unaligned start) */\nvalue = SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_32 | SLJIT_SIMD_LANE_ZERO;\nsljit_emit_simd_lane_mov(compiler, value, SLJIT_VR1, 0, SLJIT_IMM, character_to_int32(char1 | bit));\n\nif (char1 != char2)\n  sljit_emit_simd_lane_mov(compiler, value, SLJIT_VR2, 0, SLJIT_IMM, character_to_int32(bit != 0 ? bit : char2));\n\nOP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);\n\nsljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_VR1, SLJIT_VR1, 0);\n\nif (char1 != char2)\n  sljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_VR2, SLJIT_VR2, 0);\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nrestart = LABEL();\n#endif\n\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? 0x1f : 0xf;\nOP2(SLJIT_AND, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, ~value);\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, value);\n\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? SLJIT_SIMD_MEM_ALIGNED_256 : SLJIT_SIMD_MEM_ALIGNED_128;\nsljit_emit_simd_mov(compiler, reg_type | value, SLJIT_VR0, SLJIT_MEM1(STR_PTR), 0);\n\nfor (i = 0; i < 4; i++)\n  fast_forward_char_pair_sse2_compare(compiler, compare_type, reg_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\nsljit_emit_simd_sign(compiler, SLJIT_SIMD_STORE | reg_type | SLJIT_SIMD_ELEM_8, SLJIT_VR0, TMP1, 0);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\nOP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);\n\nquit = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\n/* Second part (aligned) */\nstart = LABEL();\n\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? 32 : 16;\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, value);\n\npartial_quit[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\nif (common->mode == PCRE2_JIT_COMPLETE)\n  add_jump(compiler, &common->failed_match, partial_quit[1]);\n\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? SLJIT_SIMD_MEM_ALIGNED_256 : SLJIT_SIMD_MEM_ALIGNED_128;\nsljit_emit_simd_mov(compiler, reg_type | value, SLJIT_VR0, SLJIT_MEM1(STR_PTR), 0);\nfor (i = 0; i < 4; i++)\n  fast_forward_char_pair_sse2_compare(compiler, compare_type, reg_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\nsljit_emit_simd_sign(compiler, SLJIT_SIMD_STORE | reg_type | SLJIT_SIMD_ELEM_8, SLJIT_VR0, TMP1, 0);\nCMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);\n\nJUMPHERE(quit);\n\nSLJIT_ASSERT(tmp1_reg_ind < 8);\n/* BSF r32, r/m32 */\ninstruction[0] = 0x0f;\ninstruction[1] = 0xbc;\ninstruction[2] = 0xc0 | (tmp1_reg_ind << 3) | tmp1_reg_ind;\nsljit_emit_op_custom(compiler, instruction, 3);\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n\nif (common->mode != PCRE2_JIT_COMPLETE)\n  {\n  JUMPHERE(partial_quit[0]);\n  JUMPHERE(partial_quit[1]);\n  OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0);\n  SELECT(SLJIT_GREATER, STR_PTR, STR_END, 0, STR_PTR);\n  }\nelse\n  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nif (common->utf && offset > 0)\n  {\n  SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);\n\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offset));\n\n  quit = jump_if_utf_char_start(compiler, TMP1);\n\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n  OP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);\n  JUMPTO(SLJIT_JUMP, restart);\n\n  JUMPHERE(quit);\n  }\n#endif\n}\n\n/* The AVX2 code path is currently disabled.\n#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SIMD))\n*/\n#if defined(SLJIT_CONFIG_X86_64) && SLJIT_CONFIG_X86_64\n#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD 1\n#else\n#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_FPU))\n#endif\n\nstatic jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2)\n{\nDEFINE_COMPILER;\nsljit_u8 instruction[8];\n/* The AVX2 code path is currently disabled. */\n/* sljit_s32 reg_type = sljit_has_cpu_feature(SLJIT_HAS_AVX2) ? SLJIT_SIMD_REG_256 : SLJIT_SIMD_REG_128; */\nsljit_s32 reg_type = SLJIT_SIMD_REG_128;\nsljit_s32 value;\nstruct sljit_label *start;\nstruct sljit_jump *quit;\njump_list *not_found = NULL;\nvector_compare_type compare_type = vector_compare_match1;\nsljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);\nsljit_s32 data_ind = sljit_get_register_index(reg_type, SLJIT_VR0);\nsljit_s32 cmp1_ind = sljit_get_register_index(reg_type, SLJIT_VR1);\nsljit_s32 cmp2_ind = sljit_get_register_index(reg_type, SLJIT_VR2);\nsljit_s32 tmp_ind = sljit_get_register_index(reg_type, SLJIT_VR3);\nsljit_u32 bit = 0;\nint i;\n\nif (char1 != char2)\n  {\n  bit = char1 ^ char2;\n  compare_type = vector_compare_match1i;\n\n  if (!is_powerof2(bit))\n    {\n    bit = 0;\n    compare_type = vector_compare_match2;\n    }\n  }\n\nadd_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));\nOP1(SLJIT_MOV, TMP2, 0, TMP1, 0);\nOP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);\n\n/* First part (unaligned start) */\n\nvalue = SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_32 | SLJIT_SIMD_LANE_ZERO;\nsljit_emit_simd_lane_mov(compiler, value, SLJIT_VR1, 0, SLJIT_IMM, character_to_int32(char1 | bit));\n\nif (char1 != char2)\n  sljit_emit_simd_lane_mov(compiler, value, SLJIT_VR2, 0, SLJIT_IMM, character_to_int32(bit != 0 ? bit : char2));\n\nOP1(SLJIT_MOV, STR_PTR, 0, TMP2, 0);\n\nsljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_VR1, SLJIT_VR1, 0);\n\nif (char1 != char2)\n  sljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_VR2, SLJIT_VR2, 0);\n\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? 0x1f : 0xf;\nOP2(SLJIT_AND, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, ~value);\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, value);\n\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? SLJIT_SIMD_MEM_ALIGNED_256 : SLJIT_SIMD_MEM_ALIGNED_128;\nsljit_emit_simd_mov(compiler, reg_type | value, SLJIT_VR0, SLJIT_MEM1(STR_PTR), 0);\n\nfor (i = 0; i < 4; i++)\n  fast_forward_char_pair_sse2_compare(compiler, compare_type, reg_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\nsljit_emit_simd_sign(compiler, SLJIT_SIMD_STORE | reg_type | SLJIT_SIMD_ELEM_8, SLJIT_VR0, TMP1, 0);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\nOP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);\n\nquit = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\n/* Second part (aligned) */\nstart = LABEL();\n\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? 32 : 16;\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, value);\n\nadd_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? SLJIT_SIMD_MEM_ALIGNED_256 : SLJIT_SIMD_MEM_ALIGNED_128;\nsljit_emit_simd_mov(compiler, reg_type | value, SLJIT_VR0, SLJIT_MEM1(STR_PTR), 0);\n\nfor (i = 0; i < 4; i++)\n  fast_forward_char_pair_sse2_compare(compiler, compare_type, reg_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\nsljit_emit_simd_sign(compiler, SLJIT_SIMD_STORE | reg_type | SLJIT_SIMD_ELEM_8, SLJIT_VR0, TMP1, 0);\nCMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);\n\nJUMPHERE(quit);\n\nSLJIT_ASSERT(tmp1_reg_ind < 8);\n/* BSF r32, r/m32 */\ninstruction[0] = 0x0f;\ninstruction[1] = 0xbc;\ninstruction[2] = 0xc0 | (tmp1_reg_ind << 3) | tmp1_reg_ind;\nsljit_emit_op_custom(compiler, instruction, 3);\n\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, STR_PTR, 0);\nadd_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));\n\nOP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0);\nreturn not_found;\n}\n\n#ifndef _WIN64\n\n/* The AVX2 code path is currently disabled.\n#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SIMD))\n*/\n#if defined(SLJIT_CONFIG_X86_64) && SLJIT_CONFIG_X86_64\n#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD 1\n#else\n#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_FPU))\n#endif\n\nstatic void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1,\n  PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b)\n{\nDEFINE_COMPILER;\nsljit_u8 instruction[8];\n/* The AVX2 code path is currently disabled. */\n/* sljit_s32 reg_type = sljit_has_cpu_feature(SLJIT_HAS_AVX2) ? SLJIT_SIMD_REG_256 : SLJIT_SIMD_REG_128; */\nsljit_s32 reg_type = SLJIT_SIMD_REG_128;\nsljit_s32 value;\nvector_compare_type compare1_type = vector_compare_match1;\nvector_compare_type compare2_type = vector_compare_match1;\nsljit_u32 bit1 = 0;\nsljit_u32 bit2 = 0;\nsljit_u32 diff = IN_UCHARS(offs1 - offs2);\nsljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);\nsljit_s32 data1_ind = sljit_get_register_index(reg_type, SLJIT_VR0);\nsljit_s32 data2_ind = sljit_get_register_index(reg_type, SLJIT_VR1);\nsljit_s32 cmp1a_ind = sljit_get_register_index(reg_type, SLJIT_VR2);\nsljit_s32 cmp2a_ind = sljit_get_register_index(reg_type, SLJIT_VR3);\nsljit_s32 cmp1b_ind = sljit_get_register_index(reg_type, SLJIT_VR4);\nsljit_s32 cmp2b_ind = sljit_get_register_index(reg_type, SLJIT_VR5);\nsljit_s32 tmp1_ind = sljit_get_register_index(reg_type, SLJIT_VR6);\nsljit_s32 tmp2_ind = sljit_get_register_index(reg_type, SLJIT_TMP_DEST_VREG);\nstruct sljit_label *start;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_label *restart;\n#endif\nstruct sljit_jump *jump[2];\nint i;\n\nSLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2 && offs2 >= 0);\nSLJIT_ASSERT(diff <= (unsigned)IN_UCHARS(max_fast_forward_char_pair_offset()));\n\n/* Initialize. */\nif (common->match_end_ptr != 0)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);\n  OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);\n  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));\n\n  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0);\n  SELECT(SLJIT_LESS, STR_END, TMP1, 0, STR_END);\n  }\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\nif (char1a == char1b)\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a));\nelse\n  {\n  bit1 = char1a ^ char1b;\n  if (is_powerof2(bit1))\n    {\n    compare1_type = vector_compare_match1i;\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a | bit1));\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(bit1));\n    }\n  else\n    {\n    compare1_type = vector_compare_match2;\n    bit1 = 0;\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a));\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(char1b));\n    }\n  }\n\nvalue = SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_32 | SLJIT_SIMD_LANE_ZERO;\nsljit_emit_simd_lane_mov(compiler, value, SLJIT_VR2, 0, TMP1, 0);\n\nif (char1a != char1b)\n  sljit_emit_simd_lane_mov(compiler, value, SLJIT_VR4, 0, TMP2, 0);\n\nif (char2a == char2b)\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a));\nelse\n  {\n  bit2 = char2a ^ char2b;\n  if (is_powerof2(bit2))\n    {\n    compare2_type = vector_compare_match1i;\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a | bit2));\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(bit2));\n    }\n  else\n    {\n    compare2_type = vector_compare_match2;\n    bit2 = 0;\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a));\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(char2b));\n    }\n  }\n\nsljit_emit_simd_lane_mov(compiler, value, SLJIT_VR3, 0, TMP1, 0);\n\nif (char2a != char2b)\n  sljit_emit_simd_lane_mov(compiler, value, SLJIT_VR5, 0, TMP2, 0);\n\nsljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_VR2, SLJIT_VR2, 0);\nif (char1a != char1b)\n  sljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_VR4, SLJIT_VR4, 0);\n\nsljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_VR3, SLJIT_VR3, 0);\nif (char2a != char2b)\n  sljit_emit_simd_lane_replicate(compiler, reg_type | SLJIT_SIMD_ELEM_32, SLJIT_VR5, SLJIT_VR5, 0);\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nrestart = LABEL();\n#endif\n\nOP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, diff);\nOP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? ~0x1f : ~0xf;\nOP2(SLJIT_AND, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, value);\n\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? SLJIT_SIMD_MEM_ALIGNED_256 : SLJIT_SIMD_MEM_ALIGNED_128;\nsljit_emit_simd_mov(compiler, reg_type | value, SLJIT_VR0, SLJIT_MEM1(STR_PTR), 0);\n\njump[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_PTR, 0);\n\nsljit_emit_simd_mov(compiler, reg_type, SLJIT_VR1, SLJIT_MEM1(STR_PTR), -(sljit_sw)diff);\njump[1] = JUMP(SLJIT_JUMP);\n\nJUMPHERE(jump[0]);\n\nif (reg_type == SLJIT_SIMD_REG_256)\n  {\n  if (diff != 16)\n    {\n    /* PSLLDQ ymm1, ymm2, imm8 */\n    instruction[0] = 0xc5;\n    instruction[1] = (sljit_u8)(0xf9 ^ (data2_ind << 3));\n    instruction[2] = 0x73;\n    instruction[3] = 0xc0 | (7 << 3) | data1_ind;\n    instruction[4] = diff & 0xf;\n    sljit_emit_op_custom(compiler, instruction, 5);\n    }\n\n  instruction[0] = 0xc4;\n  instruction[1] = 0xe3;\n  if (diff < 16)\n    {\n    /* VINSERTI128 xmm1, xmm2, xmm3/m128 */\n    /* instruction[0] = 0xc4; */\n    /* instruction[1] = 0xe3; */\n    instruction[2] = (sljit_u8)(0x7d ^ (data2_ind << 3));\n    instruction[3] = 0x38;\n    SLJIT_ASSERT(sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR) <= 7);\n    instruction[4] = 0x40 | (data2_ind << 3) | sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR);\n    instruction[5] = (sljit_u8)(16 - diff);\n    instruction[6] = 1;\n    sljit_emit_op_custom(compiler, instruction, 7);\n    }\n  else\n    {\n    /* VPERM2I128 xmm1, xmm2, xmm3/m128 */\n    /* instruction[0] = 0xc4; */\n    /* instruction[1] = 0xe3; */\n    value = (diff == 16) ? data1_ind : data2_ind;\n    instruction[2] = (sljit_u8)(0x7d ^ (value << 3));\n    instruction[3] = 0x46;\n    instruction[4] = 0xc0 | (data2_ind << 3) | value;\n    instruction[5] = 0x08;\n    sljit_emit_op_custom(compiler, instruction, 6);\n    }\n  }\nelse\n  {\n  /* MOVDQA xmm1, xmm2/m128 */\n  instruction[0] = 0x66;\n  instruction[1] = 0x0f;\n  instruction[2] = 0x6f;\n  instruction[3] = 0xc0 | (data2_ind << 3) | data1_ind;\n  sljit_emit_op_custom(compiler, instruction, 4);\n\n  /* PSLLDQ xmm1, imm8 */\n  /* instruction[0] = 0x66; */\n  /* instruction[1] = 0x0f; */\n  instruction[2] = 0x73;\n  instruction[3] = 0xc0 | (7 << 3) | data2_ind;\n  instruction[4] = diff;\n  sljit_emit_op_custom(compiler, instruction, 5);\n  }\n\nJUMPHERE(jump[1]);\n\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? 0x1f : 0xf;\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, value);\n\nfor (i = 0; i < 4; i++)\n  {\n  fast_forward_char_pair_sse2_compare(compiler, compare2_type, reg_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);\n  fast_forward_char_pair_sse2_compare(compiler, compare1_type, reg_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);\n  }\n\nsljit_emit_simd_op2(compiler, SLJIT_SIMD_OP2_AND | reg_type, SLJIT_VR0, SLJIT_VR0, SLJIT_VR1, 0);\nsljit_emit_simd_sign(compiler, SLJIT_SIMD_STORE | reg_type | SLJIT_SIMD_ELEM_8, SLJIT_VR0, TMP1, 0);\n\n/* Ignore matches before the first STR_PTR. */\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\nOP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);\n\njump[0] = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\n/* Main loop. */\nstart = LABEL();\n\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? 32 : 16;\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, value);\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\nvalue = (reg_type == SLJIT_SIMD_REG_256) ? SLJIT_SIMD_MEM_ALIGNED_256 : SLJIT_SIMD_MEM_ALIGNED_128;\nsljit_emit_simd_mov(compiler, reg_type | value, SLJIT_VR0, SLJIT_MEM1(STR_PTR), 0);\nsljit_emit_simd_mov(compiler, reg_type, SLJIT_VR1, SLJIT_MEM1(STR_PTR), -(sljit_sw)diff);\n\nfor (i = 0; i < 4; i++)\n  {\n  fast_forward_char_pair_sse2_compare(compiler, compare1_type, reg_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);\n  fast_forward_char_pair_sse2_compare(compiler, compare2_type, reg_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);\n  }\n\nsljit_emit_simd_op2(compiler, SLJIT_SIMD_OP2_AND | reg_type, SLJIT_VR0, SLJIT_VR0, SLJIT_VR1, 0);\nsljit_emit_simd_sign(compiler, SLJIT_SIMD_STORE | reg_type | SLJIT_SIMD_ELEM_8, SLJIT_VR0, TMP1, 0);\n\nCMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);\n\nJUMPHERE(jump[0]);\n\nSLJIT_ASSERT(tmp1_reg_ind < 8);\n/* BSF r32, r/m32 */\ninstruction[0] = 0x0f;\ninstruction[1] = 0xbc;\ninstruction[2] = 0xc0 | (tmp1_reg_ind << 3) | tmp1_reg_ind;\nsljit_emit_op_custom(compiler, instruction, 3);\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nif (common->utf)\n  {\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offs1));\n\n  jump[0] = jump_if_utf_char_start(compiler, TMP1);\n\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  CMPTO(SLJIT_LESS, STR_PTR, 0, STR_END, 0, restart);\n\n  add_jump(compiler, &common->failed_match, JUMP(SLJIT_JUMP));\n\n  JUMPHERE(jump[0]);\n  }\n#endif\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));\n\nif (common->match_end_ptr != 0)\n  OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);\n}\n\n#endif /* !_WIN64 */\n\n#undef SIMD_COMPARE_TYPE_INDEX\n\n#endif /* SLJIT_CONFIG_X86 */\n\n#if (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64 && (defined __ARM_NEON || defined __ARM_NEON__))\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#define PCRE2_REPLICATE_TYPE (SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_8)\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n#define PCRE2_REPLICATE_TYPE (SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_16)\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n#define PCRE2_REPLICATE_TYPE (SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_32)\n#else\n#error \"Unsupported unit width\"\n#endif\n\n#define JIT_HAS_FAST_FORWARD_CHAR_SIMD 1\n\nstatic void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type,\n  int step, sljit_u32 dst_ind, sljit_u32 cmp1_ind, sljit_u32 cmp2_ind, sljit_u32 tmp_ind)\n{\nsljit_u32 instruction;\n#if PCRE2_CODE_UNIT_WIDTH == 8\nsljit_u32 size = 0 << 22;\n#elif PCRE2_CODE_UNIT_WIDTH == 16\nsljit_u32 size = 1 << 22;\n#elif PCRE2_CODE_UNIT_WIDTH == 32\nsljit_u32 size = 2 << 22;\n#else\n#error \"Unsupported unit width\"\n#endif\n\nSLJIT_ASSERT(step >= 0 && step <= 2);\n\nif (step == 1)\n  {\n  /* CMEQ */\n  instruction = 0x6e208c00 | size | (cmp1_ind << 16) | (dst_ind << 5) | dst_ind;\n  sljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n  return;\n  }\n\nif (compare_type != vector_compare_match2)\n  {\n  if (step == 0 && compare_type == vector_compare_match1i)\n    {\n    /* ORR */\n    instruction = 0x4ea01c00 | (cmp2_ind << 16) | (dst_ind << 5) | dst_ind;\n    sljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n    }\n  return;\n  }\n\nswitch (step)\n  {\n  case 0:\n  /* CMEQ */\n  instruction = 0x6e208c00 | size | (cmp2_ind << 16) | (dst_ind << 5) | tmp_ind;\n  sljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n  return;\n\n  case 2:\n  /* ORR */\n  instruction = 0x4ea01c00 | (tmp_ind << 16) | (dst_ind << 5) | dst_ind;\n  sljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n  return;\n  }\n}\n\nstatic void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)\n{\nDEFINE_COMPILER;\nsljit_u32 instruction;\nstruct sljit_label *start;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_label *restart;\n#endif\nstruct sljit_jump *quit;\nstruct sljit_jump *partial_quit[2];\nvector_compare_type compare_type = vector_compare_match1;\nsljit_u32 data_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR0);\nsljit_u32 cmp1_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR1);\nsljit_u32 cmp2_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR2);\nsljit_u32 tmp_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR3);\nsljit_u32 bit = 0;\nint i;\n\nSLJIT_UNUSED_ARG(offset);\n\nif (char1 != char2)\n  {\n  bit = char1 ^ char2;\n  compare_type = vector_compare_match1i;\n\n  if (!is_powerof2(bit))\n    {\n    bit = 0;\n    compare_type = vector_compare_match2;\n    }\n  }\n\npartial_quit[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\nif (common->mode == PCRE2_JIT_COMPLETE)\n  add_jump(compiler, &common->failed_match, partial_quit[0]);\n\n/* First part (unaligned start) */\nif (char1 != char2)\n  sljit_emit_op1(compiler, SLJIT_MOV, TMP2, 0, SLJIT_IMM, bit != 0 ? bit : char2);\nsljit_emit_op1(compiler, SLJIT_MOV, TMP1, 0, SLJIT_IMM, char1 | bit);\n\nif (char1 != char2)\n  sljit_emit_simd_replicate(compiler, PCRE2_REPLICATE_TYPE, SLJIT_VR2, TMP2, 0);\nsljit_emit_simd_replicate(compiler, PCRE2_REPLICATE_TYPE, SLJIT_VR1, TMP1, 0);\n\nOP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nrestart = LABEL();\n#endif\n\nOP2(SLJIT_AND, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, ~(sljit_sw)0xf);\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xf);\n\nsljit_emit_simd_mov(compiler, SLJIT_SIMD_REG_128 | SLJIT_SIMD_MEM_ALIGNED_128, SLJIT_VR0, SLJIT_MEM1(STR_PTR), 0);\n\nfor (i = 0; i < 3; i++)\n  fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n/* SHRN */\ninstruction = 0x0f0c8400 | (data_ind << 5) | data_ind;\nsljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n\nsljit_emit_simd_lane_mov(compiler, SLJIT_SIMD_STORE | SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_64, SLJIT_VR0, 0, TMP1, 0);\n\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2);\nOP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, TMP2, 0);\n\nquit = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);\n\n/* Second part (aligned) */\nstart = LABEL();\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);\n\npartial_quit[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\nif (common->mode == PCRE2_JIT_COMPLETE)\n  add_jump(compiler, &common->failed_match, partial_quit[1]);\n\nsljit_emit_simd_mov(compiler, SLJIT_SIMD_REG_128 | SLJIT_SIMD_MEM_ALIGNED_128, SLJIT_VR0, SLJIT_MEM1(STR_PTR), 0);\nfor (i = 0; i < 3; i++)\n  fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n/* SHRN */\ninstruction = 0x0f0c8400 | (data_ind << 5) | data_ind;\nsljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n\nsljit_emit_simd_lane_mov(compiler, SLJIT_SIMD_STORE | SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_64, SLJIT_VR0, 0, TMP1, 0);\nCMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);\n\nJUMPHERE(quit);\n\nsljit_emit_op1(compiler, SLJIT_CTZ, TMP1, 0, TMP1, 0);\nOP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 2);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n\nif (common->mode != PCRE2_JIT_COMPLETE)\n  {\n  JUMPHERE(partial_quit[0]);\n  JUMPHERE(partial_quit[1]);\n  OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0);\n  SELECT(SLJIT_GREATER, STR_PTR, STR_END, 0, STR_PTR);\n  }\nelse\n  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nif (common->utf && offset > 0)\n  {\n  SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);\n\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offset));\n\n  quit = jump_if_utf_char_start(compiler, TMP1);\n\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n  OP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);\n  JUMPTO(SLJIT_JUMP, restart);\n\n  JUMPHERE(quit);\n  }\n#endif\n}\n\n#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD 1\n\nstatic jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2)\n{\nDEFINE_COMPILER;\nsljit_u32 instruction;\nstruct sljit_label *start;\nstruct sljit_jump *quit;\njump_list *not_found = NULL;\nvector_compare_type compare_type = vector_compare_match1;\nsljit_u32 data_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR0);\nsljit_u32 cmp1_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR1);\nsljit_u32 cmp2_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR2);\nsljit_u32 tmp_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR3);\nsljit_u32 bit = 0;\nint i;\n\nif (char1 != char2)\n  {\n  bit = char1 ^ char2;\n  compare_type = vector_compare_match1i;\n\n  if (!is_powerof2(bit))\n    {\n    bit = 0;\n    compare_type = vector_compare_match2;\n    }\n  }\n\nadd_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));\n\n/* First part (unaligned start) */\n\nif (char1 != char2)\n  sljit_emit_op1(compiler, SLJIT_MOV, TMP3, 0, SLJIT_IMM, bit != 0 ? bit : char2);\nsljit_emit_op1(compiler, SLJIT_MOV, TMP2, 0, SLJIT_IMM, char1 | bit);\n\nif (char1 != char2)\n  sljit_emit_simd_replicate(compiler, PCRE2_REPLICATE_TYPE, SLJIT_VR2, TMP3, 0);\nsljit_emit_simd_replicate(compiler, PCRE2_REPLICATE_TYPE, SLJIT_VR1, TMP2, 0);\n\nOP2(SLJIT_AND, TMP3, 0, TMP1, 0, SLJIT_IMM, ~(sljit_sw)0xf);\nOP2(SLJIT_AND, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xf);\n\nsljit_emit_simd_mov(compiler, SLJIT_SIMD_REG_128 | SLJIT_SIMD_MEM_ALIGNED_128, SLJIT_VR0, SLJIT_MEM1(TMP3), 0);\n\nfor (i = 0; i < 3; i++)\n  fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n/* SHRN */\ninstruction = 0x0f0c8400 | (data_ind << 5) | data_ind;\nsljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n\nsljit_emit_simd_lane_mov(compiler, SLJIT_SIMD_STORE | SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_64, SLJIT_VR0, 0, TMP1, 0);\n\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2);\nOP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, TMP2, 0);\n\nquit = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);\n\n/* Second part (aligned) */\nstart = LABEL();\n\nOP2(SLJIT_ADD, TMP3, 0, TMP3, 0, SLJIT_IMM, 16);\n\nadd_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP3, 0, STR_END, 0));\n\nsljit_emit_simd_mov(compiler, SLJIT_SIMD_REG_128 | SLJIT_SIMD_MEM_ALIGNED_128, SLJIT_VR0, SLJIT_MEM1(TMP3), 0);\n\nfor (i = 0; i < 3; i++)\n  fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n/* SHRN */\ninstruction = 0x0f0c8400 | (data_ind << 5) | data_ind;\nsljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n\nsljit_emit_simd_lane_mov(compiler, SLJIT_SIMD_STORE | SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_64, SLJIT_VR0, 0, TMP1, 0);\nCMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);\n\nJUMPHERE(quit);\n\nsljit_emit_op1(compiler, SLJIT_CTZ, TMP1, 0, TMP1, 0);\nOP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 2);\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0);\nadd_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));\n\nreturn not_found;\n}\n\n#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD 1\n\nstatic void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1,\n  PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b)\n{\nDEFINE_COMPILER;\nsljit_u32 instruction;\nvector_compare_type compare1_type = vector_compare_match1;\nvector_compare_type compare2_type = vector_compare_match1;\nsljit_u32 bit1 = 0;\nsljit_u32 bit2 = 0;\nsljit_u32 diff = IN_UCHARS(offs1 - offs2);\nsljit_u32 data1_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR0);\nsljit_u32 data2_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR1);\nsljit_u32 cmp1a_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR2);\nsljit_u32 cmp2a_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR3);\nsljit_u32 cmp1b_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR4);\nsljit_u32 cmp2b_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR5);\nsljit_u32 tmp1_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR6);\nsljit_u32 tmp2_ind = (sljit_u32)sljit_get_register_index(SLJIT_SIMD_REG_128, SLJIT_VR7);\nstruct sljit_label *start;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_label *restart;\n#endif\nstruct sljit_jump *jump[2];\nint i;\n\nSLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2 && offs2 >= 0);\nSLJIT_ASSERT(diff <= (unsigned)IN_UCHARS(max_fast_forward_char_pair_offset()));\n\nif (char1a != char1b)\n  {\n  bit1 = char1a ^ char1b;\n  compare1_type = vector_compare_match1i;\n\n  if (!is_powerof2(bit1))\n    {\n    bit1 = 0;\n    compare1_type = vector_compare_match2;\n    }\n  }\n\nif (char2a != char2b)\n  {\n  bit2 = char2a ^ char2b;\n  compare2_type = vector_compare_match1i;\n\n  if (!is_powerof2(bit2))\n    {\n    bit2 = 0;\n    compare2_type = vector_compare_match2;\n    }\n  }\n\n/* Initialize. */\nif (common->match_end_ptr != 0)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);\n  OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);\n  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));\n\n  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0);\n  SELECT(SLJIT_LESS, STR_END, TMP1, 0, STR_END);\n  }\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\nsljit_emit_op1(compiler, SLJIT_MOV, TMP1, 0, SLJIT_IMM, char1a | bit1);\nsljit_emit_op1(compiler, SLJIT_MOV, TMP2, 0, SLJIT_IMM, char2a | bit2);\nsljit_emit_simd_replicate(compiler, PCRE2_REPLICATE_TYPE, SLJIT_VR2, TMP1, 0);\nsljit_emit_simd_replicate(compiler, PCRE2_REPLICATE_TYPE, SLJIT_VR3, TMP2, 0);\n\nif (char1a != char1b)\n  sljit_emit_op1(compiler, SLJIT_MOV, TMP1, 0, SLJIT_IMM, bit1 != 0 ? bit1 : char1b);\n\nif (char2a != char2b)\n  sljit_emit_op1(compiler, SLJIT_MOV, TMP2, 0, SLJIT_IMM, bit2 != 0 ? bit2 : char2b);\n\nif (char1a != char1b)\n  sljit_emit_simd_replicate(compiler, PCRE2_REPLICATE_TYPE, SLJIT_VR4, TMP1, 0);\n\nif (char2a != char2b)\n  sljit_emit_simd_replicate(compiler, PCRE2_REPLICATE_TYPE, SLJIT_VR5, TMP2, 0);\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nrestart = LABEL();\n#endif\n\nOP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, diff);\nOP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);\nOP2(SLJIT_AND, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, ~(sljit_sw)0xf);\n\nsljit_emit_simd_mov(compiler, SLJIT_SIMD_REG_128 | SLJIT_SIMD_MEM_ALIGNED_128, SLJIT_VR0, SLJIT_MEM1(STR_PTR), 0);\n\njump[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_PTR, 0);\n\nsljit_emit_simd_mov(compiler, SLJIT_SIMD_REG_128, SLJIT_VR1, SLJIT_MEM1(STR_PTR), -(sljit_sw)diff);\njump[1] = JUMP(SLJIT_JUMP);\n\nJUMPHERE(jump[0]);\n\nif (diff >= 8)\n  {\n  /* MOV (element) */\n  instruction = 0x6e180400 | (data1_ind << 5) | data2_ind;\n  sljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n\n  if (diff > 8)\n    {\n    /* SHL */\n    instruction = 0x4f405400 | ((diff - 8) << 19) | (data2_ind << 5) | data2_ind;\n    sljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n    }\n  }\nelse\n  {\n  /* MOV (element) */\n  instruction = 0x6e180400 | (data1_ind << 5) | tmp1_ind;\n  sljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n\n  /* SHL */\n  instruction = 0x4f405400 | (diff << 19) | (data1_ind << 5) | data2_ind;\n  sljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n\n  /* USHR */\n  instruction = 0x6f400400 | (diff << 19) | (tmp1_ind << 5) | tmp1_ind;\n  sljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n\n  sljit_emit_simd_op2(compiler, SLJIT_SIMD_OP2_OR | SLJIT_SIMD_REG_128, SLJIT_VR1, SLJIT_VR1, SLJIT_VR6, 0);\n  }\n\nJUMPHERE(jump[1]);\n\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xf);\n\nfor (i = 0; i < 3; i++)\n  {\n  fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);\n  fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);\n  }\n\nsljit_emit_simd_op2(compiler, SLJIT_SIMD_OP2_AND | SLJIT_SIMD_REG_128, SLJIT_VR0, SLJIT_VR0, SLJIT_VR1, 0);\n\n/* SHRN */\ninstruction = 0x0f0c8400 | (data1_ind << 5) | data1_ind;\nsljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n\nsljit_emit_simd_lane_mov(compiler, SLJIT_SIMD_STORE | SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_64, SLJIT_VR0, 0, TMP1, 0);\n\n/* Ignore matches before the first STR_PTR. */\nOP2(SLJIT_SHL, TMP2, 0, TMP2, 0, SLJIT_IMM, 2);\nOP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);\nOP2(SLJIT_SHL, TMP1, 0, TMP1, 0, TMP2, 0);\n\njump[0] = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);\n\n/* Main loop. */\nstart = LABEL();\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\nsljit_emit_simd_mov(compiler, SLJIT_SIMD_REG_128 | SLJIT_SIMD_MEM_ALIGNED_128, SLJIT_VR0, SLJIT_MEM1(STR_PTR), 0);\nsljit_emit_simd_mov(compiler, SLJIT_SIMD_REG_128, SLJIT_VR1, SLJIT_MEM1(STR_PTR), -(sljit_sw)diff);\n\nfor (i = 0; i < 3; i++)\n  {\n  fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);\n  fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);\n  }\n\nsljit_emit_simd_op2(compiler, SLJIT_SIMD_OP2_AND | SLJIT_SIMD_REG_128, SLJIT_VR0, SLJIT_VR0, SLJIT_VR1, 0);\n\n/* SHRN */\ninstruction = 0x0f0c8400 | (data1_ind << 5) | data1_ind;\nsljit_emit_op_custom(compiler, &instruction, sizeof(sljit_u32));\n\nsljit_emit_simd_lane_mov(compiler, SLJIT_SIMD_STORE | SLJIT_SIMD_REG_128 | SLJIT_SIMD_ELEM_64, SLJIT_VR0, 0, TMP1, 0);\n\nCMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);\n\nJUMPHERE(jump[0]);\n\nsljit_emit_op1(compiler, SLJIT_CTZ, TMP1, 0, TMP1, 0);\nOP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 2);\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nif (common->utf)\n  {\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offs1));\n\n  jump[0] = jump_if_utf_char_start(compiler, TMP1);\n\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  CMPTO(SLJIT_LESS, STR_PTR, 0, STR_END, 0, restart);\n\n  add_jump(compiler, &common->failed_match, JUMP(SLJIT_JUMP));\n\n  JUMPHERE(jump[0]);\n  }\n#endif\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));\n\nif (common->match_end_ptr != 0)\n  OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);\n}\n\n#undef PCRE2_REPLICATE_TYPE\n\n#endif /* SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64 */\n\n#if (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#define VECTOR_ELEMENT_SIZE 0\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n#define VECTOR_ELEMENT_SIZE 1\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n#define VECTOR_ELEMENT_SIZE 2\n#else\n#error \"Unsupported unit width\"\n#endif\n\nstatic void load_from_mem_vector(struct sljit_compiler *compiler, BOOL vlbb, sljit_s32 dst_vreg,\n  sljit_s32 base_reg, sljit_s32 index_reg)\n{\nsljit_u16 instruction[3];\n\ninstruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | index_reg);\ninstruction[1] = (sljit_u16)(base_reg << 12);\ninstruction[2] = (sljit_u16)((0x8 << 8) | (vlbb ? 0x07 : 0x06));\n\nsljit_emit_op_custom(compiler, instruction, 6);\n}\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\n\nstatic void replicate_imm_vector(struct sljit_compiler *compiler, int step, sljit_s32 dst_vreg,\n  PCRE2_UCHAR chr, sljit_s32 tmp_general_reg)\n{\nsljit_u16 instruction[3];\n\nSLJIT_ASSERT(step >= 0 && step <= 1);\n\nif (chr < 0x7fff)\n  {\n  if (step == 1)\n    return;\n\n  /* VREPI */\n  instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4));\n  instruction[1] = (sljit_u16)chr;\n  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  return;\n  }\n\nif (step == 0)\n  {\n  OP1(SLJIT_MOV, tmp_general_reg, 0, SLJIT_IMM, chr);\n\n  /* VLVG */\n  instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | sljit_get_register_index(SLJIT_GP_REGISTER, tmp_general_reg));\n  instruction[1] = 0;\n  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x22);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  return;\n  }\n\n/* VREP */\ninstruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | dst_vreg);\ninstruction[1] = 0;\ninstruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xc << 8) | 0x4d);\nsljit_emit_op_custom(compiler, instruction, 6);\n}\n\n#endif\n\nstatic void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type,\n  int step, sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind)\n{\nsljit_u16 instruction[3];\n\nSLJIT_ASSERT(step >= 0 && step <= 2);\n\nif (step == 1)\n  {\n  /* VCEQ */\n  instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind);\n  instruction[1] = (sljit_u16)(cmp1_ind << 12);\n  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0xf8);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  return;\n  }\n\nif (compare_type != vector_compare_match2)\n  {\n  if (step == 0 && compare_type == vector_compare_match1i)\n    {\n    /* VO */\n    instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind);\n    instruction[1] = (sljit_u16)(cmp2_ind << 12);\n    instruction[2] = (sljit_u16)((0xe << 8) | 0x6a);\n    sljit_emit_op_custom(compiler, instruction, 6);\n    }\n  return;\n  }\n\nswitch (step)\n  {\n  case 0:\n  /* VCEQ */\n  instruction[0] = (sljit_u16)(0xe700 | (tmp_ind << 4) | dst_ind);\n  instruction[1] = (sljit_u16)(cmp2_ind << 12);\n  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0xf8);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  return;\n\n  case 2:\n  /* VO */\n  instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind);\n  instruction[1] = (sljit_u16)(tmp_ind << 12);\n  instruction[2] = (sljit_u16)((0xe << 8) | 0x6a);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  return;\n  }\n}\n\n#define JIT_HAS_FAST_FORWARD_CHAR_SIMD 1\n\nstatic void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)\n{\nDEFINE_COMPILER;\nsljit_u16 instruction[3];\nstruct sljit_label *start;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_label *restart;\n#endif\nstruct sljit_jump *quit;\nstruct sljit_jump *partial_quit[2];\nvector_compare_type compare_type = vector_compare_match1;\nsljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);\nsljit_s32 str_ptr_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR);\nsljit_s32 data_ind = 0;\nsljit_s32 tmp_ind = 1;\nsljit_s32 cmp1_ind = 2;\nsljit_s32 cmp2_ind = 3;\nsljit_s32 zero_ind = 4;\nsljit_u32 bit = 0;\nint i;\n\nSLJIT_UNUSED_ARG(offset);\n\nif (char1 != char2)\n  {\n  bit = char1 ^ char2;\n  compare_type = vector_compare_match1i;\n\n  if (!is_powerof2(bit))\n    {\n    bit = 0;\n    compare_type = vector_compare_match2;\n    }\n  }\n\npartial_quit[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\nif (common->mode == PCRE2_JIT_COMPLETE)\n  add_jump(compiler, &common->failed_match, partial_quit[0]);\n\n/* First part (unaligned start) */\n\nOP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, 16);\n\n#if PCRE2_CODE_UNIT_WIDTH != 32\n\n/* VREPI */\ninstruction[0] = (sljit_u16)(0xe700 | (cmp1_ind << 4));\ninstruction[1] = (sljit_u16)(char1 | bit);\ninstruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);\nsljit_emit_op_custom(compiler, instruction, 6);\n\nif (char1 != char2)\n  {\n  /* VREPI */\n  instruction[0] = (sljit_u16)(0xe700 | (cmp2_ind << 4));\n  instruction[1] = (sljit_u16)(bit != 0 ? bit : char2);\n  /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\n\n#else /* PCRE2_CODE_UNIT_WIDTH == 32 */\n\nfor (i = 0; i < 2; i++)\n  {\n  replicate_imm_vector(compiler, i, cmp1_ind, char1 | bit, TMP1);\n\n  if (char1 != char2)\n    replicate_imm_vector(compiler, i, cmp2_ind, bit != 0 ? bit : char2, TMP1);\n  }\n\n#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */\n\nif (compare_type == vector_compare_match2)\n  {\n  /* VREPI */\n  instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4));\n  instruction[1] = 0;\n  instruction[2] = (sljit_u16)((0x8 << 8) | 0x45);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nrestart = LABEL();\n#endif\n\nload_from_mem_vector(compiler, TRUE, data_ind, str_ptr_reg_ind, 0);\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, ~15);\n\nif (compare_type != vector_compare_match2)\n  {\n  if (compare_type == vector_compare_match1i)\n    fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n  /* VFEE */\n  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);\n  instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));\n  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\nelse\n  {\n  for (i = 0; i < 3; i++)\n    fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n  /* VFENE */\n  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);\n  instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));\n  instruction[2] = (sljit_u16)((0xe << 8) | 0x81);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\n\n/* VLGVB */\ninstruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind);\ninstruction[1] = 7;\ninstruction[2] = (sljit_u16)((0x4 << 8) | 0x21);\nsljit_emit_op_custom(compiler, instruction, 6);\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\nquit = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0);\n\nOP2(SLJIT_SUB, STR_PTR, 0, TMP2, 0, SLJIT_IMM, 16);\n\n/* Second part (aligned) */\nstart = LABEL();\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);\n\npartial_quit[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\nif (common->mode == PCRE2_JIT_COMPLETE)\n  add_jump(compiler, &common->failed_match, partial_quit[1]);\n\nload_from_mem_vector(compiler, TRUE, data_ind, str_ptr_reg_ind, 0);\n\nif (compare_type != vector_compare_match2)\n  {\n  if (compare_type == vector_compare_match1i)\n    fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n  /* VFEE */\n  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);\n  instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));\n  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\nelse\n  {\n  for (i = 0; i < 3; i++)\n    fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n  /* VFENE */\n  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);\n  instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));\n  instruction[2] = (sljit_u16)((0xe << 8) | 0x81);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\n\nsljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);\nJUMPTO(SLJIT_OVERFLOW, start);\n\n/* VLGVB */\ninstruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind);\ninstruction[1] = 7;\ninstruction[2] = (sljit_u16)((0x4 << 8) | 0x21);\nsljit_emit_op_custom(compiler, instruction, 6);\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n\nJUMPHERE(quit);\n\nif (common->mode != PCRE2_JIT_COMPLETE)\n  {\n  JUMPHERE(partial_quit[0]);\n  JUMPHERE(partial_quit[1]);\n  OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0);\n  SELECT(SLJIT_GREATER, STR_PTR, STR_END, 0, STR_PTR);\n  }\nelse\n  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nif (common->utf && offset > 0)\n  {\n  SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);\n\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offset));\n\n  quit = jump_if_utf_char_start(compiler, TMP1);\n\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n  OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, 16);\n  JUMPTO(SLJIT_JUMP, restart);\n\n  JUMPHERE(quit);\n  }\n#endif\n}\n\n#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD 1\n\nstatic jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2)\n{\nDEFINE_COMPILER;\nsljit_u16 instruction[3];\nstruct sljit_label *start;\nstruct sljit_jump *quit;\njump_list *not_found = NULL;\nvector_compare_type compare_type = vector_compare_match1;\nsljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);\nsljit_s32 tmp3_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP3);\nsljit_s32 data_ind = 0;\nsljit_s32 tmp_ind = 1;\nsljit_s32 cmp1_ind = 2;\nsljit_s32 cmp2_ind = 3;\nsljit_s32 zero_ind = 4;\nsljit_u32 bit = 0;\nint i;\n\nif (char1 != char2)\n  {\n  bit = char1 ^ char2;\n  compare_type = vector_compare_match1i;\n\n  if (!is_powerof2(bit))\n    {\n    bit = 0;\n    compare_type = vector_compare_match2;\n    }\n  }\n\nadd_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));\n\n/* First part (unaligned start) */\n\nOP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, 16);\n\n#if PCRE2_CODE_UNIT_WIDTH != 32\n\n/* VREPI */\ninstruction[0] = (sljit_u16)(0xe700 | (cmp1_ind << 4));\ninstruction[1] = (sljit_u16)(char1 | bit);\ninstruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);\nsljit_emit_op_custom(compiler, instruction, 6);\n\nif (char1 != char2)\n  {\n  /* VREPI */\n  instruction[0] = (sljit_u16)(0xe700 | (cmp2_ind << 4));\n  instruction[1] = (sljit_u16)(bit != 0 ? bit : char2);\n  /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\n\n#else /* PCRE2_CODE_UNIT_WIDTH == 32 */\n\nfor (i = 0; i < 2; i++)\n  {\n  replicate_imm_vector(compiler, i, cmp1_ind, char1 | bit, TMP3);\n\n  if (char1 != char2)\n    replicate_imm_vector(compiler, i, cmp2_ind, bit != 0 ? bit : char2, TMP3);\n  }\n\n#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */\n\nif (compare_type == vector_compare_match2)\n  {\n  /* VREPI */\n  instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4));\n  instruction[1] = 0;\n  instruction[2] = (sljit_u16)((0x8 << 8) | 0x45);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\n\nload_from_mem_vector(compiler, TRUE, data_ind, tmp1_reg_ind, 0);\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, ~15);\n\nif (compare_type != vector_compare_match2)\n  {\n  if (compare_type == vector_compare_match1i)\n    fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n  /* VFEE */\n  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);\n  instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));\n  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\nelse\n  {\n  for (i = 0; i < 3; i++)\n    fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n  /* VFENE */\n  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);\n  instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));\n  instruction[2] = (sljit_u16)((0xe << 8) | 0x81);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\n\n/* VLGVB */\ninstruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind);\ninstruction[1] = 7;\ninstruction[2] = (sljit_u16)((0x4 << 8) | 0x21);\nsljit_emit_op_custom(compiler, instruction, 6);\n\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0);\nquit = CMP(SLJIT_LESS, TMP1, 0, TMP2, 0);\n\nOP2(SLJIT_SUB, TMP1, 0, TMP2, 0, SLJIT_IMM, 16);\n\n/* Second part (aligned) */\nstart = LABEL();\n\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 16);\n\nadd_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));\n\nload_from_mem_vector(compiler, TRUE, data_ind, tmp1_reg_ind, 0);\n\nif (compare_type != vector_compare_match2)\n  {\n  if (compare_type == vector_compare_match1i)\n    fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n  /* VFEE */\n  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);\n  instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));\n  instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\nelse\n  {\n  for (i = 0; i < 3; i++)\n    fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n  /* VFENE */\n  instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);\n  instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));\n  instruction[2] = (sljit_u16)((0xe << 8) | 0x81);\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\n\nsljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);\nJUMPTO(SLJIT_OVERFLOW, start);\n\n/* VLGVB */\ninstruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind);\ninstruction[1] = 7;\ninstruction[2] = (sljit_u16)((0x4 << 8) | 0x21);\nsljit_emit_op_custom(compiler, instruction, 6);\n\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0);\n\nJUMPHERE(quit);\nadd_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));\n\nreturn not_found;\n}\n\n#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD 1\n\nstatic void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1,\n  PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b)\n{\nDEFINE_COMPILER;\nsljit_u16 instruction[3];\nstruct sljit_label *start;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_label *restart;\n#endif\nstruct sljit_jump *quit;\nstruct sljit_jump *jump[2];\nvector_compare_type compare1_type = vector_compare_match1;\nvector_compare_type compare2_type = vector_compare_match1;\nsljit_u32 bit1 = 0;\nsljit_u32 bit2 = 0;\nsljit_s32 diff = IN_UCHARS(offs2 - offs1);\nsljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);\nsljit_s32 tmp2_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP2);\nsljit_s32 str_ptr_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR);\nsljit_s32 data1_ind = 0;\nsljit_s32 data2_ind = 1;\nsljit_s32 tmp1_ind = 2;\nsljit_s32 tmp2_ind = 3;\nsljit_s32 cmp1a_ind = 4;\nsljit_s32 cmp1b_ind = 5;\nsljit_s32 cmp2a_ind = 6;\nsljit_s32 cmp2b_ind = 7;\nsljit_s32 zero_ind = 8;\nint i;\n\nSLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2);\nSLJIT_ASSERT(-diff <= (sljit_s32)IN_UCHARS(max_fast_forward_char_pair_offset()));\nSLJIT_ASSERT(tmp1_reg_ind != 0 && tmp2_reg_ind != 0);\n\nif (char1a != char1b)\n  {\n  bit1 = char1a ^ char1b;\n  compare1_type = vector_compare_match1i;\n\n  if (!is_powerof2(bit1))\n    {\n    bit1 = 0;\n    compare1_type = vector_compare_match2;\n    }\n  }\n\nif (char2a != char2b)\n  {\n  bit2 = char2a ^ char2b;\n  compare2_type = vector_compare_match1i;\n\n  if (!is_powerof2(bit2))\n    {\n    bit2 = 0;\n    compare2_type = vector_compare_match2;\n    }\n  }\n\n/* Initialize. */\nif (common->match_end_ptr != 0)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);\n  OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);\n  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));\n\n  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0);\n  SELECT(SLJIT_LESS, STR_END, TMP1, 0, STR_END);\n  }\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\nOP2(SLJIT_AND, TMP2, 0, STR_PTR, 0, SLJIT_IMM, ~15);\n\n#if PCRE2_CODE_UNIT_WIDTH != 32\n\nOP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff);\n\n/* VREPI */\ninstruction[0] = (sljit_u16)(0xe700 | (cmp1a_ind << 4));\ninstruction[1] = (sljit_u16)(char1a | bit1);\ninstruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);\nsljit_emit_op_custom(compiler, instruction, 6);\n\nif (char1a != char1b)\n  {\n  /* VREPI */\n  instruction[0] = (sljit_u16)(0xe700 | (cmp1b_ind << 4));\n  instruction[1] = (sljit_u16)(bit1 != 0 ? bit1 : char1b);\n  /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\n\n/* VREPI */\ninstruction[0] = (sljit_u16)(0xe700 | (cmp2a_ind << 4));\ninstruction[1] = (sljit_u16)(char2a | bit2);\n/* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */\nsljit_emit_op_custom(compiler, instruction, 6);\n\nif (char2a != char2b)\n  {\n  /* VREPI */\n  instruction[0] = (sljit_u16)(0xe700 | (cmp2b_ind << 4));\n  instruction[1] = (sljit_u16)(bit2 != 0 ? bit2 : char2b);\n  /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */\n  sljit_emit_op_custom(compiler, instruction, 6);\n  }\n\n#else /* PCRE2_CODE_UNIT_WIDTH == 32 */\n\nfor (i = 0; i < 2; i++)\n  {\n  replicate_imm_vector(compiler, i, cmp1a_ind, char1a | bit1, TMP1);\n\n  if (char1a != char1b)\n    replicate_imm_vector(compiler, i, cmp1b_ind, bit1 != 0 ? bit1 : char1b, TMP1);\n\n  replicate_imm_vector(compiler, i, cmp2a_ind, char2a | bit2, TMP1);\n\n  if (char2a != char2b)\n    replicate_imm_vector(compiler, i, cmp2b_ind, bit2 != 0 ? bit2 : char2b, TMP1);\n  }\n\nOP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff);\n\n#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */\n\n/* VREPI */\ninstruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4));\ninstruction[1] = 0;\ninstruction[2] = (sljit_u16)((0x8 << 8) | 0x45);\nsljit_emit_op_custom(compiler, instruction, 6);\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nrestart = LABEL();\n#endif\n\njump[0] = CMP(SLJIT_LESS, TMP1, 0, TMP2, 0);\nload_from_mem_vector(compiler, TRUE, data2_ind, tmp1_reg_ind, 0);\njump[1] = JUMP(SLJIT_JUMP);\nJUMPHERE(jump[0]);\nload_from_mem_vector(compiler, FALSE, data2_ind, tmp1_reg_ind, 0);\nJUMPHERE(jump[1]);\n\nload_from_mem_vector(compiler, TRUE, data1_ind, str_ptr_reg_ind, 0);\nOP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 16);\n\nfor (i = 0; i < 3; i++)\n  {\n  fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);\n  fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);\n  }\n\n/* VN */\ninstruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);\ninstruction[1] = (sljit_u16)(data2_ind << 12);\ninstruction[2] = (sljit_u16)((0xe << 8) | 0x68);\nsljit_emit_op_custom(compiler, instruction, 6);\n\n/* VFENE */\ninstruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);\ninstruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));\ninstruction[2] = (sljit_u16)((0xe << 8) | 0x81);\nsljit_emit_op_custom(compiler, instruction, 6);\n\n/* VLGVB */\ninstruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data1_ind);\ninstruction[1] = 7;\ninstruction[2] = (sljit_u16)((0x4 << 8) | 0x21);\nsljit_emit_op_custom(compiler, instruction, 6);\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\nquit = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0);\n\nOP2(SLJIT_SUB, STR_PTR, 0, TMP2, 0, SLJIT_IMM, 16);\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, diff);\n\n/* Main loop. */\nstart = LABEL();\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\nload_from_mem_vector(compiler, FALSE, data1_ind, str_ptr_reg_ind, 0);\nload_from_mem_vector(compiler, FALSE, data2_ind, str_ptr_reg_ind, tmp1_reg_ind);\n\nfor (i = 0; i < 3; i++)\n  {\n  fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);\n  fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);\n  }\n\n/* VN */\ninstruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);\ninstruction[1] = (sljit_u16)(data2_ind << 12);\ninstruction[2] = (sljit_u16)((0xe << 8) | 0x68);\nsljit_emit_op_custom(compiler, instruction, 6);\n\n/* VFENE */\ninstruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);\ninstruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));\ninstruction[2] = (sljit_u16)((0xe << 8) | 0x81);\nsljit_emit_op_custom(compiler, instruction, 6);\n\nsljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);\nJUMPTO(SLJIT_OVERFLOW, start);\n\n/* VLGVB */\ninstruction[0] = (sljit_u16)(0xe700 | (tmp2_reg_ind << 4) | data1_ind);\ninstruction[1] = 7;\ninstruction[2] = (sljit_u16)((0x4 << 8) | 0x21);\nsljit_emit_op_custom(compiler, instruction, 6);\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\nJUMPHERE(quit);\n\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nif (common->utf)\n  {\n  SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);\n\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offs1));\n\n  quit = jump_if_utf_char_start(compiler, TMP1);\n\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n  /* TMP1 contains diff. */\n  OP2(SLJIT_AND, TMP2, 0, STR_PTR, 0, SLJIT_IMM, ~15);\n  OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff);\n  JUMPTO(SLJIT_JUMP, restart);\n\n  JUMPHERE(quit);\n  }\n#endif\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));\n\nif (common->match_end_ptr != 0)\n  OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);\n}\n\n#endif /* SLJIT_CONFIG_S390X */\n\n#if (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64)\n\n#ifdef __linux__\n/* Using getauxval(AT_HWCAP) under Linux for detecting whether LSX is available */\n#include <sys/auxv.h>\n#define LOONGARCH_HWCAP_LSX  (1 << 4)\n#define HAS_LSX_SUPPORT ((getauxval(AT_HWCAP) & LOONGARCH_HWCAP_LSX) != 0)\n#else\n#define HAS_LSX_SUPPORT 0\n#endif\n\ntypedef sljit_ins sljit_u32;\n\n#define SI12_IMM_MASK   0x003ffc00\n#define UI5_IMM_MASK    0x00007c00\n#define UI2_IMM_MASK    0x00000c00\n\n#define VD(vd)      ((sljit_ins)vd << 0)\n#define VJ(vj)      ((sljit_ins)vj << 5)\n#define VK(vk)      ((sljit_ins)vk << 10)\n#define RD_V(rd)    ((sljit_ins)rd << 0)\n#define RJ_V(rj)    ((sljit_ins)rj << 5)\n\n#define IMM_SI12(imm)   (((sljit_ins)(imm) << 10) & SI12_IMM_MASK)\n#define IMM_UI5(imm)    (((sljit_ins)(imm) << 10) & UI5_IMM_MASK)\n#define IMM_UI2(imm)    (((sljit_ins)(imm) << 10) & UI2_IMM_MASK)\n\n// LSX OPCODES:\n#define VBSLL_V       0x728e0000\n#define VMSKLTZ_B     0x729c4000\n#define VPICKVE2GR_WU 0x72f3e000\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#define VREPLGR2VR_X  0x729f0000\n#define VSEQ        0x70000000\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n#define VREPLGR2VR_X  0x729f0400\n#define VSEQ        0x70008000\n#else\n#define VREPLGR2VR_X  0x729f0800\n#define VSEQ        0x70010000\n#endif\n\nstatic void fast_forward_char_pair_lsx_compare(struct sljit_compiler *compiler, vector_compare_type compare_type,\n  sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind)\n{\nif (compare_type != vector_compare_match2)\n  {\n  if (compare_type == vector_compare_match1i)\n    {\n    /* VOR.V vd, vj, vk */\n    push_inst(compiler, VOR_V | VD(dst_ind) | VJ(cmp2_ind) | VK(dst_ind));\n    }\n\n  /* VSEQ.B/H/W vd, vj, vk */\n  push_inst(compiler, VSEQ | VD(dst_ind) | VJ(dst_ind) | VK(cmp1_ind));\n  return;\n  }\n\n/* VBSLL.V vd, vj, ui5 */\npush_inst(compiler, VBSLL_V | VD(tmp_ind) | VJ(dst_ind) | IMM_UI5(0));\n\n/* VSEQ.B/H/W vd, vj, vk */\npush_inst(compiler, VSEQ | VD(dst_ind) | VJ(dst_ind) | VK(cmp1_ind));\n\n/* VSEQ.B/H/W vd, vj, vk */\npush_inst(compiler, VSEQ | VD(tmp_ind) | VJ(tmp_ind) | VK(cmp2_ind));\n\n/* VOR vd, vj, vk */\npush_inst(compiler, VOR_V | VD(dst_ind) | VJ(tmp_ind) | VK(dst_ind));\nreturn;\n}\n\n#define JIT_HAS_FAST_FORWARD_CHAR_SIMD HAS_LSX_SUPPORT\n\nstatic void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)\n{\nDEFINE_COMPILER;\nstruct sljit_label *start;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_label *restart;\n#endif\nstruct sljit_jump *quit;\nstruct sljit_jump *partial_quit[2];\nvector_compare_type compare_type = vector_compare_match1;\nsljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);\nsljit_s32 str_ptr_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR);\nsljit_s32 data_ind = 0;\nsljit_s32 tmp_ind = 1;\nsljit_s32 cmp1_ind = 2;\nsljit_s32 cmp2_ind = 3;\nsljit_u32 bit = 0;\n\nSLJIT_UNUSED_ARG(offset);\n\nif (char1 != char2)\n  {\n  bit = char1 ^ char2;\n  compare_type = vector_compare_match1i;\n\n  if (!is_powerof2(bit))\n    {\n    bit = 0;\n    compare_type = vector_compare_match2;\n    }\n  }\n\npartial_quit[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\nif (common->mode == PCRE2_JIT_COMPLETE)\n  add_jump(compiler, &common->failed_match, partial_quit[0]);\n\n/* First part (unaligned start) */\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char1 | bit);\n\n/* VREPLGR2VR.B/H/W vd, rj */\npush_inst(compiler, VREPLGR2VR_X | VD(cmp1_ind) | RJ_V(tmp1_reg_ind));\n\nif (char1 != char2)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, bit != 0 ? bit : char2);\n\n  /* VREPLGR2VR.B/H/W vd, rj */\n  push_inst(compiler, VREPLGR2VR_X | VD(cmp2_ind) | RJ_V(tmp1_reg_ind));\n  }\n\nOP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nrestart = LABEL();\n#endif\n\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xf);\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\n/* VLD vd, rj, si12 */\npush_inst(compiler, VLD | VD(data_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(0));\nfast_forward_char_pair_lsx_compare(compiler, compare_type, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n/* VMSKLTZ.B vd, vj */\npush_inst(compiler, VMSKLTZ_B | VD(tmp_ind) | VJ(data_ind));\n\n/* VPICKVE2GR.WU rd, vj, ui2 */\npush_inst(compiler, VPICKVE2GR_WU | RD_V(tmp1_reg_ind) | VJ(tmp_ind) | IMM_UI2(0));\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\nOP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);\n\nquit = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\n/* Second part (aligned) */\nstart = LABEL();\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);\n\npartial_quit[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);\nif (common->mode == PCRE2_JIT_COMPLETE)\n  add_jump(compiler, &common->failed_match, partial_quit[1]);\n\n/* VLD vd, rj, si12 */\npush_inst(compiler, VLD | VD(data_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(0));\nfast_forward_char_pair_lsx_compare(compiler, compare_type, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n/* VMSKLTZ.B vd, vj */\npush_inst(compiler, VMSKLTZ_B | VD(tmp_ind) | VJ(data_ind));\n\n/* VPICKVE2GR.WU rd, vj, ui2 */\npush_inst(compiler, VPICKVE2GR_WU | RD_V(tmp1_reg_ind) | VJ(tmp_ind) | IMM_UI2(0));\n\nCMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);\n\nJUMPHERE(quit);\n\n/* CTZ.W rd, rj */\npush_inst(compiler, CTZ_W | RD_V(tmp1_reg_ind) | RJ_V(tmp1_reg_ind));\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n\nif (common->mode != PCRE2_JIT_COMPLETE)\n  {\n  JUMPHERE(partial_quit[0]);\n  JUMPHERE(partial_quit[1]);\n  OP2U(SLJIT_SUB | SLJIT_SET_GREATER, STR_PTR, 0, STR_END, 0);\n  SELECT(SLJIT_GREATER, STR_PTR, STR_END, 0, STR_PTR);\n  }\nelse\n  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nif (common->utf && offset > 0)\n  {\n  SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);\n\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offset));\n\n  quit = jump_if_utf_char_start(compiler, TMP1);\n\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n  OP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);\n  JUMPTO(SLJIT_JUMP, restart);\n\n  JUMPHERE(quit);\n  }\n#endif\n}\n\n#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD HAS_LSX_SUPPORT\n\nstatic jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2)\n{\nDEFINE_COMPILER;\nstruct sljit_label *start;\nstruct sljit_jump *quit;\njump_list *not_found = NULL;\nvector_compare_type compare_type = vector_compare_match1;\nsljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);\nsljit_s32 str_ptr_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR);\nsljit_s32 data_ind = 0;\nsljit_s32 tmp_ind = 1;\nsljit_s32 cmp1_ind = 2;\nsljit_s32 cmp2_ind = 3;\nsljit_u32 bit = 0;\n\nif (char1 != char2)\n  {\n  bit = char1 ^ char2;\n  compare_type = vector_compare_match1i;\n\n  if (!is_powerof2(bit))\n    {\n    bit = 0;\n    compare_type = vector_compare_match2;\n    }\n  }\n\nadd_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));\nOP1(SLJIT_MOV, TMP2, 0, TMP1, 0);\nOP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);\n\n/* First part (unaligned start) */\n\nOP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char1 | bit);\n\n/* VREPLGR2VR.B/H/W vd, rj */\npush_inst(compiler, VREPLGR2VR_X | VD(cmp1_ind) | RJ_V(tmp1_reg_ind));\n\nif (char1 != char2)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, bit != 0 ? bit : char2);\n  /* VREPLGR2VR.B/H/W vd, rj */\n  push_inst(compiler, VREPLGR2VR_X | VD(cmp2_ind) | RJ_V(tmp1_reg_ind));\n  }\n\nOP1(SLJIT_MOV, STR_PTR, 0, TMP2, 0);\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xf);\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\n/* VLD vd, rj, si12 */\npush_inst(compiler, VLD | VD(data_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(0));\nfast_forward_char_pair_lsx_compare(compiler, compare_type, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n/* VMSKLTZ.B vd, vj */\npush_inst(compiler, VMSKLTZ_B | VD(tmp_ind) | VJ(data_ind));\n\n/* VPICKVE2GR.WU rd, vj, ui2 */\npush_inst(compiler, VPICKVE2GR_WU | RD_V(tmp1_reg_ind) | VJ(tmp_ind) | IMM_UI2(0));\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\nOP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);\n\nquit = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\n/* Second part (aligned) */\nstart = LABEL();\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);\n\nadd_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n/* VLD vd, rj, si12 */\npush_inst(compiler, VLD | VD(data_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(0));\nfast_forward_char_pair_lsx_compare(compiler, compare_type, data_ind, cmp1_ind, cmp2_ind, tmp_ind);\n\n/* VMSKLTZ.B vd, vj */\npush_inst(compiler, VMSKLTZ_B | VD(tmp_ind) | VJ(data_ind));\n\n/* VPICKVE2GR.WU rd, vj, ui2 */\npush_inst(compiler, VPICKVE2GR_WU | RD_V(tmp1_reg_ind) | VJ(tmp_ind) | IMM_UI2(0));\n\nCMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);\n\nJUMPHERE(quit);\n\n/* CTZ.W rd, rj */\npush_inst(compiler, CTZ_W | RD_V(tmp1_reg_ind) | RJ_V(tmp1_reg_ind));\n\nOP2(SLJIT_ADD, TMP1, 0, TMP1, 0, STR_PTR, 0);\nadd_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));\n\nOP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0);\nreturn not_found;\n}\n\n#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD HAS_LSX_SUPPORT\n\nstatic void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1,\n  PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b)\n{\nDEFINE_COMPILER;\nvector_compare_type compare1_type = vector_compare_match1;\nvector_compare_type compare2_type = vector_compare_match1;\nsljit_u32 bit1 = 0;\nsljit_u32 bit2 = 0;\nsljit_u32 diff = IN_UCHARS(offs1 - offs2);\nsljit_s32 tmp1_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP1);\nsljit_s32 tmp2_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, TMP2);\nsljit_s32 str_ptr_reg_ind = sljit_get_register_index(SLJIT_GP_REGISTER, STR_PTR);\nsljit_s32 data1_ind = 0;\nsljit_s32 data2_ind = 1;\nsljit_s32 tmp1_ind = 2;\nsljit_s32 tmp2_ind = 3;\nsljit_s32 cmp1a_ind = 4;\nsljit_s32 cmp1b_ind = 5;\nsljit_s32 cmp2a_ind = 6;\nsljit_s32 cmp2b_ind = 7;\nstruct sljit_label *start;\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nstruct sljit_label *restart;\n#endif\nstruct sljit_jump *jump[2];\n\nSLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2);\nSLJIT_ASSERT(diff <= (unsigned)IN_UCHARS(max_fast_forward_char_pair_offset()));\n\n/* Initialize. */\nif (common->match_end_ptr != 0)\n  {\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);\n  OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));\n  OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);\n\n  OP2U(SLJIT_SUB | SLJIT_SET_LESS, TMP1, 0, STR_END, 0);\n  SELECT(SLJIT_LESS, STR_END, TMP1, 0, STR_END);\n  }\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\nif (char1a == char1b)\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char1a);\nelse\n  {\n  bit1 = char1a ^ char1b;\n  if (is_powerof2(bit1))\n    {\n    compare1_type = vector_compare_match1i;\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char1a | bit1);\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, bit1);\n    }\n  else\n    {\n    compare1_type = vector_compare_match2;\n    bit1 = 0;\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char1a);\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, char1b);\n    }\n  }\n\n/* VREPLGR2VR.B/H/W vd, rj */\npush_inst(compiler, VREPLGR2VR_X | VD(cmp1a_ind) | RJ_V(tmp1_reg_ind));\n\nif (char1a != char1b)\n  {\n  /* VREPLGR2VR.B/H/W vd, rj */\n  push_inst(compiler, VREPLGR2VR_X | VD(cmp1b_ind) | RJ_V(tmp2_reg_ind));\n  }\n\nif (char2a == char2b)\n  OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char2a);\nelse\n  {\n  bit2 = char2a ^ char2b;\n  if (is_powerof2(bit2))\n    {\n    compare2_type = vector_compare_match1i;\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char2a | bit2);\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, bit2);\n    }\n  else\n    {\n    compare2_type = vector_compare_match2;\n    bit2 = 0;\n    OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, char2a);\n    OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, char2b);\n    }\n  }\n\n/* VREPLGR2VR.B/H/W vd, rj */\npush_inst(compiler, VREPLGR2VR_X | VD(cmp2a_ind) | RJ_V(tmp1_reg_ind));\n\nif (char2a != char2b)\n  {\n  /* VREPLGR2VR.B/H/W vd, rj */\n  push_inst(compiler, VREPLGR2VR_X | VD(cmp2b_ind) | RJ_V(tmp2_reg_ind));\n  }\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nrestart = LABEL();\n#endif\n\nOP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, diff);\nOP1(SLJIT_MOV, TMP2, 0, STR_PTR, 0);\nOP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, 0xf);\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\n/* VLD vd, rj, si12 */\npush_inst(compiler, VLD | VD(data1_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(0));\n\njump[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_PTR, 0);\n\n/* VLD vd, rj, si12 */\npush_inst(compiler, VLD | VD(data2_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(-(sljit_s8)diff));\njump[1] = JUMP(SLJIT_JUMP);\n\nJUMPHERE(jump[0]);\n\n/* VBSLL.V vd, vj, ui5 */\npush_inst(compiler, VBSLL_V | VD(data2_ind) | VJ(data1_ind) | IMM_UI5(diff));\n\nJUMPHERE(jump[1]);\n\nfast_forward_char_pair_lsx_compare(compiler, compare2_type, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);\nfast_forward_char_pair_lsx_compare(compiler, compare1_type, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);\n\n/* VAND vd, vj, vk */\npush_inst(compiler, VOR_V | VD(data1_ind) | VJ(data1_ind) | VK(data2_ind));\n\n/* VMSKLTZ.B vd, vj */\npush_inst(compiler, VMSKLTZ_B | VD(tmp1_ind) | VJ(data1_ind));\n\n/* VPICKVE2GR.WU rd, vj, ui2 */\npush_inst(compiler, VPICKVE2GR_WU | RD_V(tmp1_reg_ind) | VJ(tmp1_ind) | IMM_UI2(0));\n\n/* Ignore matches before the first STR_PTR. */\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\nOP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, TMP2, 0);\n\njump[0] = CMP(SLJIT_NOT_ZERO, TMP1, 0, SLJIT_IMM, 0);\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);\n\n/* Main loop. */\nstart = LABEL();\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n/* VLD vd, rj, si12 */\npush_inst(compiler, VLD | VD(data1_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(0));\npush_inst(compiler, VLD | VD(data2_ind) | RJ_V(str_ptr_reg_ind) | IMM_SI12(-(sljit_s8)diff));\n\nfast_forward_char_pair_lsx_compare(compiler, compare1_type, data1_ind, cmp1a_ind, cmp1b_ind, tmp2_ind);\nfast_forward_char_pair_lsx_compare(compiler, compare2_type, data2_ind, cmp2a_ind, cmp2b_ind, tmp1_ind);\n\n/* VAND.V vd, vj, vk */\npush_inst(compiler, VAND_V | VD(data1_ind) | VJ(data1_ind) | VK(data2_ind));\n\n/* VMSKLTZ.B vd, vj */\npush_inst(compiler, VMSKLTZ_B | VD(tmp1_ind) | VJ(data1_ind));\n\n/* VPICKVE2GR.WU rd, vj, ui2 */\npush_inst(compiler, VPICKVE2GR_WU | RD_V(tmp1_reg_ind) | VJ(tmp1_ind) | IMM_UI2(0));\n\nCMPTO(SLJIT_ZERO, TMP1, 0, SLJIT_IMM, 0, start);\n\nJUMPHERE(jump[0]);\n\n/* CTZ.W rd, rj */\npush_inst(compiler, CTZ_W | RD_V(tmp1_reg_ind) | RJ_V(tmp1_reg_ind));\n\nOP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);\n\nadd_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32\nif (common->utf)\n  {\n  OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offs1));\n\n  jump[0] = jump_if_utf_char_start(compiler, TMP1);\n\n  OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));\n  CMPTO(SLJIT_LESS, STR_PTR, 0, STR_END, 0, restart);\n\n  add_jump(compiler, &common->failed_match, JUMP(SLJIT_JUMP));\n\n  JUMPHERE(jump[0]);\n  }\n#endif\n\nOP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));\n\nif (common->match_end_ptr != 0)\n  OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);\n}\n\n#endif /* SLJIT_CONFIG_LOONGARCH_64 */\n\n#endif /* !SUPPORT_VALGRIND */\n"
  },
  {
    "path": "src/pcre2_jit_test.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n         New API code Copyright (c) 2016 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#if defined HAVE_CONFIG_H && !defined PCRE2_CONFIG_H_IDEMPOTENT_GUARD\n#define PCRE2_CONFIG_H_IDEMPOTENT_GUARD\n#include \"config.h\"\n#endif\n\n\n\n#include <stdio.h>\n#include <string.h>\n\n#define PCRE2_CODE_UNIT_WIDTH 0\n#include \"pcre2.h\"\n\n/*\n Letter characters:\n   \\xe6\\x92\\xad = 0x64ad = 25773 (kanji)\n Non-letter characters:\n   \\xc2\\xa1 = 0xa1 =  (Inverted Exclamation Mark)\n   \\xf3\\xa9\\xb7\\x80 = 0xe9dc0 = 957888\n   \\xed\\xa0\\x80 = 55296 = 0xd800 (Invalid UTF character)\n   \\xed\\xb0\\x80 = 56320 = 0xdc00 (Invalid UTF character)\n Newlines:\n   \\xc2\\x85 = 0x85 = 133 (NExt Line = NEL)\n   \\xe2\\x80\\xa8 = 0x2028 = 8232 (Line Separator)\n Othercase pairs:\n   \\xc3\\xa9 = 0xe9 = 233 (e')\n      \\xc3\\x89 = 0xc9 = 201 (E')\n   \\xc3\\xa1 = 0xe1 = 225 (a')\n      \\xc3\\x81 = 0xc1 = 193 (A')\n   \\x53 = 0x53 = S\n     \\x73 = 0x73 = s\n     \\xc5\\xbf = 0x17f = 383 (long S)\n   \\xc8\\xba = 0x23a = 570\n      \\xe2\\xb1\\xa5 = 0x2c65 = 11365\n   \\xe1\\xbd\\xb8 = 0x1f78 = 8056\n      \\xe1\\xbf\\xb8 = 0x1ff8 = 8184\n   \\xf0\\x90\\x90\\x80 = 0x10400 = 66560\n      \\xf0\\x90\\x90\\xa8 = 0x10428 = 66600\n   \\xc7\\x84 = 0x1c4 = 452\n     \\xc7\\x85 = 0x1c5 = 453\n     \\xc7\\x86 = 0x1c6 = 454\n Caseless sets:\n   ucp_Armenian - \\x{531}-\\x{556} -> \\x{561}-\\x{586}\n   ucp_Coptic - \\x{2c80}-\\x{2ce3} -> caseless: XOR 0x1\n   ucp_Latin - \\x{ff21}-\\x{ff3a} -> \\x{ff41]-\\x{ff5a}\n\n Mark property:\n   \\xcc\\x8d = 0x30d = 781\n Special:\n   \\xc2\\x80 = 0x80 = 128 (lowest 2 byte character)\n   \\xdf\\xbf = 0x7ff = 2047 (highest 2 byte character)\n   \\xe0\\xa0\\x80 = 0x800 = 2048 (lowest 2 byte character)\n   \\xef\\xbf\\xbf = 0xffff = 65535 (highest 3 byte character)\n   \\xf0\\x90\\x80\\x80 = 0x10000 = 65536 (lowest 4 byte character)\n   \\xf4\\x8f\\xbf\\xbf = 0x10ffff = 1114111 (highest allowed utf character)\n*/\n\nstatic int regression_tests(void);\nstatic int invalid_utf8_regression_tests(void);\nstatic int invalid_utf16_regression_tests(void);\nstatic int invalid_utf32_regression_tests(void);\n\nint main(void)\n{\n\tint jit = 0;\n#if defined SUPPORT_PCRE2_8\n\tpcre2_config_8(PCRE2_CONFIG_JIT, &jit);\n#elif defined SUPPORT_PCRE2_16\n\tpcre2_config_16(PCRE2_CONFIG_JIT, &jit);\n#elif defined SUPPORT_PCRE2_32\n\tpcre2_config_32(PCRE2_CONFIG_JIT, &jit);\n#endif\n\tif (!jit) {\n\t\tprintf(\"JIT must be enabled to run pcre2_jit_test\\n\");\n\t\treturn 1;\n\t}\n\treturn regression_tests()\n\t\t| invalid_utf8_regression_tests()\n\t\t| invalid_utf16_regression_tests()\n\t\t| invalid_utf32_regression_tests();\n}\n\n/* --------------------------------------------------------------------------------------- */\n\n#if !(defined SUPPORT_PCRE2_8) && !(defined SUPPORT_PCRE2_16) && !(defined SUPPORT_PCRE2_32)\n#error SUPPORT_PCRE2_8 or SUPPORT_PCRE2_16 or SUPPORT_PCRE2_32 must be defined\n#endif\n\n#define MU\t(PCRE2_MULTILINE | PCRE2_UTF)\n#define MUP\t(PCRE2_MULTILINE | PCRE2_UTF | PCRE2_UCP)\n#define CMU\t(PCRE2_CASELESS | PCRE2_MULTILINE | PCRE2_UTF)\n#define CMUP\t(PCRE2_CASELESS | PCRE2_MULTILINE | PCRE2_UTF | PCRE2_UCP)\n#define M\t(PCRE2_MULTILINE)\n#define MP\t(PCRE2_MULTILINE | PCRE2_UCP)\n#define U\t(PCRE2_UTF)\n#define CM\t(PCRE2_CASELESS | PCRE2_MULTILINE)\n\n#define BSR(x)\t((x) << 16)\n#define A\tPCRE2_NEWLINE_ANYCRLF\n\n#define GET_NEWLINE(x)\t((x) & 0xffff)\n#define GET_BSR(x)\t((x) >> 16)\n\n#define OFFSET_MASK\t0x00ffff\n#define F_NO8\t\t0x010000\n#define F_NO16\t\t0x020000\n#define F_NO32\t\t0x020000\n#define F_NOMATCH\t0x040000\n#define F_DIFF\t\t0x080000\n#define F_FORCECONV\t0x100000\n#define F_PROPERTY\t0x200000\n\nstruct regression_test_case {\n\tuint32_t compile_options;\n\tint newline;\n\tint match_options;\n\tint start_offset;\n\tconst char *pattern;\n\tconst char *input;\n};\n\nstatic struct regression_test_case regression_test_cases[] = {\n\t/* Constant strings. */\n\t{ MU, A, 0, 0, \"AbC\", \"AbAbC\" },\n\t{ MU, A, 0, 0, \"ACCEPT\", \"AACACCACCEACCEPACCEPTACCEPTT\" },\n\t{ CMU, A, 0, 0, \"aA#\\xc3\\xa9\\xc3\\x81\", \"aA#Aa#\\xc3\\x89\\xc3\\xa1\" },\n\t{ M, A, 0, 0, \"[^a]\", \"aAbB\" },\n\t{ CM, A, 0, 0, \"[^m]\", \"mMnN\" },\n\t{ M, A, 0, 0, \"a[^b][^#]\", \"abacd\" },\n\t{ CM, A, 0, 0, \"A[^B][^E]\", \"abacd\" },\n\t{ CMU, A, 0, 0, \"[^x][^#]\", \"XxBll\" },\n\t{ MU, A, 0, 0, \"[^a]\", \"aaa\\xc3\\xa1#Ab\" },\n\t{ CMU, A, 0, 0, \"[^A]\", \"aA\\xe6\\x92\\xad\" },\n\t{ MU, A, 0, 0, \"\\\\W(\\\\W)?\\\\w\", \"\\r\\n+bc\" },\n\t{ MU, A, 0, 0, \"\\\\W(\\\\W)?\\\\w\", \"\\n\\r+bc\" },\n\t{ MU, A, 0, 0, \"\\\\W(\\\\W)?\\\\w\", \"\\r\\r+bc\" },\n\t{ MU, A, 0, 0, \"\\\\W(\\\\W)?\\\\w\", \"\\n\\n+bc\" },\n\t{ MU, A, 0, 0, \"[axd]\", \"sAXd\" },\n\t{ CMU, A, 0, 0, \"[axd]\", \"sAXd\" },\n\t{ CMU, A, 0, 0 | F_NOMATCH, \"[^axd]\", \"DxA\" },\n\t{ MU, A, 0, 0, \"[a-dA-C]\", \"\\xe6\\x92\\xad\\xc3\\xa9.B\" },\n\t{ MU, A, 0, 0, \"[^a-dA-C]\", \"\\xe6\\x92\\xad\\xc3\\xa9\" },\n\t{ CMU, A, 0, 0, \"[^\\xc3\\xa9]\", \"\\xc3\\xa9\\xc3\\x89.\" },\n\t{ MU, A, 0, 0, \"[^\\xc3\\xa9]\", \"\\xc3\\xa9\\xc3\\x89.\" },\n\t{ MU, A, 0, 0, \"[^a]\", \"\\xc2\\x80[]\" },\n\t{ CMU, A, 0, 0, \"\\xf0\\x90\\x90\\xa7\", \"\\xf0\\x90\\x91\\x8f\" },\n\t{ CM, A, 0, 0, \"1a2b3c4\", \"1a2B3c51A2B3C4\" },\n\t{ PCRE2_CASELESS, 0, 0, 0, \"\\xff#a\", \"\\xff#\\xff\\xfe##\\xff#A\" },\n\t{ PCRE2_CASELESS, 0, 0, 0, \"\\xfe\", \"\\xff\\xfc#\\xfe\\xfe\" },\n\t{ PCRE2_CASELESS, 0, 0, 0, \"a1\", \"Aa1\" },\n#ifndef NEVER_BACKSLASH_C\n\t{ M, A, 0, 0, \"\\\\Ca\", \"cda\" },\n\t{ CM, A, 0, 0, \"\\\\Ca\", \"CDA\" },\n\t{ M, A, 0, 0 | F_NOMATCH, \"\\\\Cx\", \"cda\" },\n\t{ CM, A, 0, 0 | F_NOMATCH, \"\\\\Cx\", \"CDA\" },\n#endif /* !NEVER_BACKSLASH_C */\n\t{ CMUP, A, 0, 0, \"\\xf0\\x90\\x90\\x80\\xf0\\x90\\x90\\xa8\", \"\\xf0\\x90\\x90\\xa8\\xf0\\x90\\x90\\x80\" },\n\t{ CMUP, A, 0, 0, \"\\xf0\\x90\\x90\\x80{2}\", \"\\xf0\\x90\\x90\\x80#\\xf0\\x90\\x90\\xa8\\xf0\\x90\\x90\\x80\" },\n\t{ CMUP, A, 0, 0, \"\\xf0\\x90\\x90\\xa8{2}\", \"\\xf0\\x90\\x90\\x80#\\xf0\\x90\\x90\\xa8\\xf0\\x90\\x90\\x80\" },\n\t{ CMUP, A, 0, 0, \"\\xe1\\xbd\\xb8\\xe1\\xbf\\xb8\", \"\\xe1\\xbf\\xb8\\xe1\\xbd\\xb8\" },\n\t{ M, A, 0, 0, \"[3-57-9]\", \"5\" },\n\t{ PCRE2_AUTO_CALLOUT, A, 0, 0, \"12345678901234567890123456789012345678901234567890123456789012345678901234567890\",\n\t\t\"12345678901234567890123456789012345678901234567890123456789012345678901234567890\" },\n\t{ 0, A, 0, 0, \"..a.......b\", \"bbbbbbbbbbbbbbbbbbbbbabbbbbbbb\" },\n\t{ 0, A, 0, 0, \"..a.....b\", \"bbbbbbbbbbbbbbbbbbbbbabbbbbbbb\" },\n\n\t/* Assertions. */\n\t{ MU, A, 0, 0, \"\\\\b[^A]\", \"A_B#\" },\n\t{ M, A, 0, 0 | F_NOMATCH, \"\\\\b\\\\W\", \"\\n*\" },\n\t{ MU, A, 0, 0, \"\\\\B[^,]\\\\b[^s]\\\\b\", \"#X\" },\n\t{ MP, A, 0, 0, \"\\\\B\", \"_\\xa1\" },\n\t{ MP, A, 0, 0 | F_PROPERTY, \"\\\\b_\\\\b[,A]\\\\B\", \"_,\" },\n\t{ MUP, A, 0, 0, \"\\\\b\", \"\\xe6\\x92\\xad!\" },\n\t{ MUP, A, 0, 0, \"\\\\B\", \"_\\xc2\\xa1\\xc3\\xa1\\xc2\\x85\" },\n\t{ MUP, A, 0, 0, \"\\\\b[^A]\\\\B[^c]\\\\b[^_]\\\\B\", \"_\\xc3\\xa1\\xe2\\x80\\xa8\" },\n\t{ MUP, A, 0, 0, \"\\\\b\\\\w+\\\\B\", \"\\xc3\\x89\\xc2\\xa1\\xe6\\x92\\xad\\xc3\\x81\\xc3\\xa1\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"\\\\b.\", \"\\xcd\\xbe\" },\n\t{ CMUP, A, 0, 0, \"\\\\By\", \"\\xf0\\x90\\x90\\xa8y\" },\n\t{ M, A, 0, 0 | F_NOMATCH, \"\\\\R^\", \"\\n\" },\n\t{ M, A, 0, 1 | F_NOMATCH, \"^\", \"\\n\" },\n\t{ 0, 0, 0, 0, \"^ab\", \"ab\" },\n\t{ 0, 0, 0, 0 | F_NOMATCH, \"^ab\", \"aab\" },\n\t{ M, PCRE2_NEWLINE_CRLF, 0, 0, \"^a\", \"\\r\\raa\\n\\naa\\r\\naa\" },\n\t{ MU, A, 0, 0, \"^-\", \"\\xe2\\x80\\xa8--\\xc2\\x85-\\r\\n-\" },\n\t{ M, PCRE2_NEWLINE_ANY, 0, 0, \"^-\", \"a--b--\\x85--\" },\n\t{ MU, PCRE2_NEWLINE_ANY, 0, 0, \"^-\", \"a--\\xe2\\x80\\xa8--\" },\n\t{ MU, PCRE2_NEWLINE_ANY, 0, 0, \"^-\", \"a--\\xc2\\x85--\" },\n\t{ 0, 0, 0, 0, \"ab$\", \"ab\" },\n\t{ 0, 0, 0, 0 | F_NOMATCH, \"ab$\", \"abab\\n\\n\" },\n\t{ PCRE2_DOLLAR_ENDONLY, 0, 0, 0 | F_NOMATCH, \"ab$\", \"abab\\r\\n\" },\n\t{ M, PCRE2_NEWLINE_CRLF, 0, 0, \"a$\", \"\\r\\raa\\n\\naa\\r\\naa\" },\n\t{ M, PCRE2_NEWLINE_ANY, 0, 0, \"a$\", \"aaa\" },\n\t{ MU, PCRE2_NEWLINE_ANYCRLF, 0, 0, \"#$\", \"#\\xc2\\x85###\\r#\" },\n\t{ MU, PCRE2_NEWLINE_ANY, 0, 0, \"#$\", \"#\\xe2\\x80\\xa9\" },\n\t{ 0, PCRE2_NEWLINE_ANY, PCRE2_NOTBOL, 0 | F_NOMATCH, \"^a\", \"aa\\naa\" },\n\t{ M, PCRE2_NEWLINE_ANY, PCRE2_NOTBOL, 0, \"^a\", \"aa\\naa\" },\n\t{ 0, PCRE2_NEWLINE_ANY, PCRE2_NOTEOL, 0 | F_NOMATCH, \"a$\", \"aa\\naa\" },\n\t{ 0, PCRE2_NEWLINE_ANY, PCRE2_NOTEOL, 0 | F_NOMATCH, \"a$\", \"aa\\r\\n\" },\n\t{ U | PCRE2_DOLLAR_ENDONLY, PCRE2_NEWLINE_ANY, 0, 0 | F_PROPERTY, \"\\\\p{Any}{2,}$\", \"aa\\r\\n\" },\n\t{ M, PCRE2_NEWLINE_ANY, PCRE2_NOTEOL, 0, \"a$\", \"aa\\naa\" },\n\t{ 0, PCRE2_NEWLINE_CR, 0, 0, \".\\\\Z\", \"aaa\" },\n\t{ U, PCRE2_NEWLINE_CR, 0, 0, \"a\\\\Z\", \"aaa\\r\" },\n\t{ 0, PCRE2_NEWLINE_CR, 0, 0, \".\\\\Z\", \"aaa\\n\" },\n\t{ 0, PCRE2_NEWLINE_CRLF, 0, 0, \".\\\\Z\", \"aaa\\r\" },\n\t{ U, PCRE2_NEWLINE_CRLF, 0, 0, \".\\\\Z\", \"aaa\\n\" },\n\t{ 0, PCRE2_NEWLINE_CRLF, 0, 0, \".\\\\Z\", \"aaa\\r\\n\" },\n\t{ U, PCRE2_NEWLINE_ANYCRLF, 0, 0, \".\\\\Z\", \"aaa\" },\n\t{ U, PCRE2_NEWLINE_ANYCRLF, 0, 0, \".\\\\Z\", \"aaa\\r\" },\n\t{ U, PCRE2_NEWLINE_ANYCRLF, 0, 0, \".\\\\Z\", \"aaa\\n\" },\n\t{ U, PCRE2_NEWLINE_ANYCRLF, 0, 0, \".\\\\Z\", \"aaa\\r\\n\" },\n\t{ U, PCRE2_NEWLINE_ANYCRLF, 0, 0, \".\\\\Z\", \"aaa\\xe2\\x80\\xa8\" },\n\t{ U, PCRE2_NEWLINE_ANYCRLF, 0, 0, \".\\\\Z\", \"aaa\" },\n\t{ U, PCRE2_NEWLINE_ANYCRLF, 0, 0, \".\\\\Z\", \"aaa\\r\" },\n\t{ U, PCRE2_NEWLINE_ANYCRLF, 0, 0, \".\\\\Z\", \"aaa\\n\" },\n\t{ U, PCRE2_NEWLINE_ANYCRLF, 0, 0, \".\\\\Z\", \"aaa\\r\\n\" },\n\t{ U, PCRE2_NEWLINE_ANY, 0, 0, \".\\\\Z\", \"aaa\\xc2\\x85\" },\n\t{ U, PCRE2_NEWLINE_ANY, 0, 0, \".\\\\Z\", \"aaa\\xe2\\x80\\xa8\" },\n\t{ M, A, 0, 0, \"\\\\Aa\", \"aaa\" },\n\t{ M, A, 0, 1 | F_NOMATCH, \"\\\\Aa\", \"aaa\" },\n\t{ M, A, 0, 1, \"\\\\Ga\", \"aaa\" },\n\t{ M, A, 0, 1 | F_NOMATCH, \"\\\\Ga\", \"aba\" },\n\t{ M, A, 0, 0, \"a\\\\z\", \"aaa\" },\n\t{ M, A, 0, 0 | F_NOMATCH, \"a\\\\z\", \"aab\" },\n\n\t/* Brackets and alternatives. */\n\t{ MU, A, 0, 0, \"(ab|bb|cd)\", \"bacde\" },\n\t{ MU, A, 0, 0, \"(?:ab|a)(bc|c)\", \"ababc\" },\n\t{ MU, A, 0, 0, \"((ab|(cc))|(bb)|(?:cd|efg))\", \"abac\" },\n\t{ CMU, A, 0, 0, \"((aB|(Cc))|(bB)|(?:cd|EFg))\", \"AcCe\" },\n\t{ MU, A, 0, 0, \"((ab|(cc))|(bb)|(?:cd|ebg))\", \"acebebg\" },\n\t{ MU, A, 0, 0, \"(?:(a)|(?:b))(cc|(?:d|e))(a|b)k\", \"accabdbbccbk\" },\n\t{ MU, A, 0, 0, \"\\xc7\\x82|\\xc6\\x82\", \"\\xf1\\x83\\x82\\x82\\xc7\\x82\\xc7\\x83\" },\n\t{ MU, A, 0, 0, \"=\\xc7\\x82|#\\xc6\\x82\", \"\\xf1\\x83\\x82\\x82=\\xc7\\x82\\xc7\\x83\" },\n\t{ MU, A, 0, 0, \"\\xc7\\x82\\xc7\\x83|\\xc6\\x82\\xc6\\x82\", \"\\xf1\\x83\\x82\\x82\\xc7\\x82\\xc7\\x83\" },\n\t{ MU, A, 0, 0, \"\\xc6\\x82\\xc6\\x82|\\xc7\\x83\\xc7\\x83|\\xc8\\x84\\xc8\\x84\", \"\\xf1\\x83\\x82\\x82\\xc8\\x84\\xc8\\x84\" },\n\t{ U, A, 0, 0, \"\\xe1\\x81\\x80|\\xe2\\x82\\x80|\\xe4\\x84\\x80\", \"\\xdf\\xbf\\xc2\\x80\\xe4\\x84\\x80\" },\n\t{ U, A, 0, 0, \"(?:\\xe1\\x81\\x80|\\xe2\\x82\\x80|\\xe4\\x84\\x80)#\", \"\\xdf\\xbf\\xc2\\x80#\\xe4\\x84\\x80#\" },\n\t{ CM, A, 0, 0, \"ab|cd\", \"CD\" },\n\t{ CM, A, 0, 0, \"a1277|a1377|bX487\", \"bx487\" },\n\t{ CM, A, 0, 0, \"a1277|a1377|bx487\", \"bX487\" },\n\t{ 0, A, 0, 0, \"(a|)b*+a\", \"a\" },\n\t{ 0, A, 0, 0 | F_NOMATCH, \"(.|.|.|.|.)(|.|.|.|.)(.||.|.|.)(.|.||.|.)(.|.|.||.)(.|.|.|.|)(A|.|.|.|.)(.|A|.|.|.)(.|.|A|.|.)(.|.|.|A|.)(.|.|.|.|A)(B|.|.|.|.)(.|B|.|.|.)(.|.|B|.|.)(.|.|.|B|.)(.|.|.|.|B)xa\", \"1234567890123456ax\" },\n\t{ 0, A, 0, 0, \"(CHAN|LINE)[ab]{0,2}\", \"LINE\" },\n\n\t/* Greedy and non-greedy ? operators. */\n\t{ MU, A, 0, 0, \"(?:a)?a\", \"laab\" },\n\t{ CMU, A, 0, 0, \"(A)?A\", \"llaab\" },\n\t{ MU, A, 0, 0, \"(a)?\\?a\", \"aab\" }, /* ?? is the prefix of trygraphs in GCC. */\n\t{ MU, A, 0, 0, \"(a)?a\", \"manm\" },\n\t{ CMU, A, 0, 0, \"(a|b)?\\?d((?:e)?)\", \"ABABdx\" },\n\t{ MU, A, 0, 0, \"(a|b)?\\?d((?:e)?)\", \"abcde\" },\n\t{ MU, A, 0, 0, \"((?:ab)?\\?g|b(?:g(nn|d)?\\?)?)?\\?(?:n)?m\", \"abgnbgnnbgdnmm\" },\n\t{ M, A, 0, 0, \"(?:a?|a)b\", \"ba\" },\n\n\t/* Greedy and non-greedy + operators */\n\t{ MU, A, 0, 0, \"(aa)+aa\", \"aaaaaaa\" },\n\t{ MU, A, 0, 0, \"(aa)+?aa\", \"aaaaaaa\" },\n\t{ MU, A, 0, 0, \"(?:aba|ab|a)+l\", \"ababamababal\" },\n\t{ MU, A, 0, 0, \"(?:aba|ab|a)+?l\", \"ababamababal\" },\n\t{ MU, A, 0, 0, \"(a(?:bc|cb|b|c)+?|ss)+e\", \"accssabccbcacbccbbXaccssabccbcacbccbbe\" },\n\t{ MU, A, 0, 0, \"(a(?:bc|cb|b|c)+|ss)+?e\", \"accssabccbcacbccbbXaccssabccbcacbccbbe\" },\n\t{ MU, A, 0, 0, \"(?:(b(c)+?)+)?\\?(?:(bc)+|(cb)+)+(?:m)+\", \"bccbcccbcbccbcbPbccbcccbcbccbcbmmn\" },\n\t{ MU, A, 0, 0, \"(aa|bb){8,1000}\", \"abaabbaabbaabbaab_aabbaabbaabbaabbaabbaabb_\" },\n\n\t/* Greedy and non-greedy * operators */\n\t{ CMU, A, 0, 0, \"(?:AA)*AB\", \"aaaaaaamaaaaaaab\" },\n\t{ MU, A, 0, 0, \"(?:aa)*?ab\", \"aaaaaaamaaaaaaab\" },\n\t{ MU, A, 0, 0, \"(aa|ab)*ab\", \"aaabaaab\" },\n\t{ CMU, A, 0, 0, \"(aa|Ab)*?aB\", \"aaabaaab\" },\n\t{ MU, A, 0, 0, \"(a|b)*(?:a)*(?:b)*m\", \"abbbaaababanabbbaaababamm\" },\n\t{ MU, A, 0, 0, \"(a|b)*?(?:a)*?(?:b)*?m\", \"abbbaaababanabbbaaababamm\" },\n\t{ M, A, 0, 0, \"a(a(\\\\1*)a|(b)b+){0}a\", \"aa\" },\n\t{ M, A, 0, 0, \"((?:a|)*){0}a\", \"a\" },\n\n\t/* Combining ? + * operators */\n\t{ MU, A, 0, 0, \"((bm)+)?\\?(?:a)*(bm)+n|((am)+?)?(?:a)+(am)*n\", \"bmbmabmamaaamambmaman\" },\n\t{ MU, A, 0, 0, \"(((ab)?cd)*ef)+g\", \"abcdcdefcdefefmabcdcdefcdefefgg\" },\n\t{ MU, A, 0, 0, \"(((ab)?\\?cd)*?ef)+?g\", \"abcdcdefcdefefmabcdcdefcdefefgg\" },\n\t{ MU, A, 0, 0, \"(?:(ab)?c|(?:ab)+?d)*g\", \"ababcdccababddg\" },\n\t{ MU, A, 0, 0, \"(?:(?:ab)?\\?c|(ab)+d)*?g\", \"ababcdccababddg\" },\n\n\t/* Single character iterators. */\n\t{ MU, A, 0, 0, \"(a+aab)+aaaab\", \"aaaabcaaaabaabcaabcaaabaaaab\" },\n\t{ MU, A, 0, 0, \"(a*a*aab)+x\", \"aaaaabaabaaabmaabx\" },\n\t{ MU, A, 0, 0, \"(a*?(b|ab)a*?)+x\", \"aaaabcxbbaabaacbaaabaabax\" },\n\t{ MU, A, 0, 0, \"(a+(ab|ad)a+)+x\", \"aaabaaaadaabaaabaaaadaaax\" },\n\t{ MU, A, 0, 0, \"(a?(a)a?)+(aaa)\", \"abaaabaaaaaaaa\" },\n\t{ MU, A, 0, 0, \"(a?\\?(a)a?\\?)+(b)\", \"aaaacaaacaacacbaaab\" },\n\t{ MU, A, 0, 0, \"(a{0,4}(b))+d\", \"aaaaaabaabcaaaaabaaaaabd\" },\n\t{ MU, A, 0, 0, \"(a{0,4}?[^b])+d+(a{0,4}[^b])d+\", \"aaaaadaaaacaadddaaddd\" },\n\t{ MU, A, 0, 0, \"(ba{2})+c\", \"baabaaabacbaabaac\" },\n\t{ MU, A, 0, 0, \"(a*+bc++)+\", \"aaabbcaaabcccab\" },\n\t{ MU, A, 0, 0, \"(a?+[^b])+\", \"babaacacb\" },\n\t{ MU, A, 0, 0, \"(a{0,3}+b)(a{0,3}+b)(a{0,3}+)[^c]\", \"abaabaaacbaabaaaac\" },\n\t{ CMU, A, 0, 0, \"([a-c]+[d-f]+?)+?g\", \"aBdacdehAbDaFgA\" },\n\t{ CMU, A, 0, 0, \"[c-f]+k\", \"DemmFke\" },\n\t{ MU, A, 0, 0, \"([DGH]{0,4}M)+\", \"GGDGHDGMMHMDHHGHM\" },\n\t{ MU, A, 0, 0, \"([a-c]{4,}s)+\", \"abasabbasbbaabsbba\" },\n\t{ CMU, A, 0, 0, \"[ace]{3,7}\", \"AcbDAcEEcEd\" },\n\t{ CMU, A, 0, 0, \"[ace]{3,7}?\", \"AcbDAcEEcEd\" },\n\t{ CMU, A, 0, 0, \"[ace]{3,}\", \"AcbDAcEEcEd\" },\n\t{ CMU, A, 0, 0, \"[ace]{3,}?\", \"AcbDAcEEcEd\" },\n\t{ MU, A, 0, 0, \"[ckl]{2,}?g\", \"cdkkmlglglkcg\" },\n\t{ CMU, A, 0, 0, \"[ace]{5}?\", \"AcCebDAcEEcEd\" },\n\t{ MU, A, 0, 0, \"([AbC]{3,5}?d)+\", \"BACaAbbAEAACCbdCCbdCCAAbb\" },\n\t{ MU, A, 0, 0, \"([^ab]{0,}s){2}\", \"abaabcdsABamsDDs\" },\n\t{ MU, A, 0, 0, \"\\\\b\\\\w+\\\\B\", \"x,a_cd\" },\n\t{ MUP, A, 0, 0, \"\\\\b[^\\xc2\\xa1]+\\\\B\", \"\\xc3\\x89\\xc2\\xa1\\xe6\\x92\\xad\\xc3\\x81\\xc3\\xa1\" },\n\t{ CMU, A, 0, 0, \"[^b]+(a*)([^c]?d{3})\", \"aaaaddd\" },\n\t{ CMUP, A, 0, 0, \"\\xe1\\xbd\\xb8{2}\", \"\\xe1\\xbf\\xb8#\\xe1\\xbf\\xb8\\xe1\\xbd\\xb8\" },\n\t{ CMU, A, 0, 0, \"[^\\xf0\\x90\\x90\\x80]{2,4}@\", \"\\xf0\\x90\\x90\\xa8\\xf0\\x90\\x90\\x80###\\xf0\\x90\\x90\\x80@@@\" },\n\t{ CMU, A, 0, 0, \"[^\\xe1\\xbd\\xb8][^\\xc3\\xa9]\", \"\\xe1\\xbd\\xb8\\xe1\\xbf\\xb8\\xc3\\xa9\\xc3\\x89#\" },\n\t{ MU, A, 0, 0, \"[^\\xe1\\xbd\\xb8][^\\xc3\\xa9]\", \"\\xe1\\xbd\\xb8\\xe1\\xbf\\xb8\\xc3\\xa9\\xc3\\x89#\" },\n\t{ MU, A, 0, 0, \"[^\\xe1\\xbd\\xb8]{3,}?\", \"##\\xe1\\xbd\\xb8#\\xe1\\xbd\\xb8#\\xc3\\x89#\\xe1\\xbd\\xb8\" },\n\t{ MU, A, 0, 0, \"\\\\d+123\", \"987654321,01234\" },\n\t{ MU, A, 0, 0, \"abcd*|\\\\w+xy\", \"aaaaa,abxyz\" },\n\t{ MU, A, 0, 0, \"(?:abc|((?:amc|\\\\b\\\\w*xy)))\", \"aaaaa,abxyz\" },\n\t{ MU, A, 0, 0, \"a(?R)|([a-z]++)#\", \".abcd.abcd#.\"},\n\t{ MU, A, 0, 0, \"a(?R)|([a-z]++)#\", \".abcd.mbcd#.\"},\n\t{ MU, A, 0, 0, \".[ab]*.\", \"xx\" },\n\t{ MU, A, 0, 0, \".[ab]*a\", \"xxa\" },\n\t{ MU, A, 0, 0, \".[ab]?.\", \"xx\" },\n\t{ MU, A, 0, 0, \"_[ab]+_*a\", \"_aa\" },\n\t{ MU, A, 0, 0, \"#(A+)#\\\\d+\", \"#A#A#0\" },\n\t{ MU, A, 0, 0, \"(?P<size>\\\\d+)m|M\", \"4M\" },\n\t{ M, PCRE2_NEWLINE_CRLF, 0, 0, \"\\\\n?.+#\", \"\\n,\\n,#\" },\n\t{ 0, A, 0, 0, \"<(\\\\w+)[\\\\s\\\\w]+id>\", \"<br><div id>\" },\n\t{ MU, A, 0, 0, \"([a-z]{0,3}c;)+\", \"ccccc;c;cc;ccc;cccccccccccccccc;\" },\n\n\t/* Bracket repeats with limit. */\n\t{ MU, A, 0, 0, \"(?:(ab){2}){5}M\", \"abababababababababababM\" },\n\t{ MU, A, 0, 0, \"(?:ab|abab){1,5}M\", \"abababababababababababM\" },\n\t{ MU, A, 0, 0, \"(?>ab|abab){1,5}M\", \"abababababababababababM\" },\n\t{ MU, A, 0, 0, \"(?:ab|abab){1,5}?M\", \"abababababababababababM\" },\n\t{ MU, A, 0, 0, \"(?>ab|abab){1,5}?M\", \"abababababababababababM\" },\n\t{ MU, A, 0, 0, \"(?:(ab){1,4}?){1,3}?M\", \"abababababababababababababM\" },\n\t{ MU, A, 0, 0, \"(?:(ab){1,4}){1,3}abababababababababababM\", \"ababababababababababababM\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?:(ab){1,4}){1,3}abababababababababababM\", \"abababababababababababM\" },\n\t{ MU, A, 0, 0, \"(ab){4,6}?M\", \"abababababababM\" },\n\n\t/* Basic character sets. */\n\t{ MU, A, 0, 0, \"(?:\\\\s)+(?:\\\\S)+\", \"ab \\t\\xc3\\xa9\\xe6\\x92\\xad \" },\n\t{ MU, A, 0, 0, \"(\\\\w)*(k)(\\\\W)?\\?\", \"abcdef abck11\" },\n\t{ MU, A, 0, 0, \"\\\\((\\\\d)+\\\\)\\\\D\", \"a() (83 (8)2 (9)ab\" },\n\t{ MU, A, 0, 0, \"\\\\w(\\\\s|(?:\\\\d)*,)+\\\\w\\\\wb\", \"a 5, 4,, bb 5, 4,, aab\" },\n\t{ MU, A, 0, 0, \"(\\\\v+)(\\\\V+)\", \"\\x0e\\xc2\\x85\\xe2\\x80\\xa8\\x0b\\x09\\xe2\\x80\\xa9\" },\n\t{ MU, A, 0, 0, \"(\\\\h+)(\\\\H+)\", \"\\xe2\\x80\\xa8\\xe2\\x80\\x80\\x20\\xe2\\x80\\x8a\\xe2\\x81\\x9f\\xe3\\x80\\x80\\x09\\x20\\xc2\\xa0\\x0a\" },\n\t{ MU, A, 0, 0, \"x[bcef]+\", \"xaxdxecbfg\" },\n\t{ MU, A, 0, 0, \"x[bcdghij]+\", \"xaxexfxdgbjk\" },\n\t{ MU, A, 0, 0, \"x[^befg]+\", \"xbxexacdhg\" },\n\t{ MU, A, 0, 0, \"x[^bcdl]+\", \"xlxbxaekmd\" },\n\t{ MU, A, 0, 0, \"x[^bcdghi]+\", \"xbxdxgxaefji\" },\n\t{ MU, A, 0, 0, \"x[B-Fb-f]+\", \"xaxAxgxbfBFG\" },\n\t{ CMU, A, 0, 0, \"\\\\x{e9}+\", \"#\\xf0\\x90\\x90\\xa8\\xc3\\xa8\\xc3\\xa9\\xc3\\x89\\xc3\\x88\" },\n\t{ CMU, A, 0, 0, \"[^\\\\x{e9}]+\", \"\\xc3\\xa9#\\xf0\\x90\\x90\\xa8\\xc3\\xa8\\xc3\\x88\\xc3\\x89\" },\n\t{ MU, A, 0, 0, \"[\\\\x02\\\\x7e]+\", \"\\xc3\\x81\\xe1\\xbf\\xb8\\xf0\\x90\\x90\\xa8\\x01\\x02\\x7e\\x7f\" },\n\t{ MU, A, 0, 0, \"[^\\\\x02\\\\x7e]+\", \"\\x02\\xc3\\x81\\xe1\\xbf\\xb8\\xf0\\x90\\x90\\xa8\\x01\\x7f\\x7e\" },\n\t{ MU, A, 0, 0, \"[\\\\x{81}-\\\\x{7fe}]+\", \"#\\xe1\\xbf\\xb8\\xf0\\x90\\x90\\xa8\\xc2\\x80\\xc2\\x81\\xdf\\xbe\\xdf\\xbf\" },\n\t{ MU, A, 0, 0, \"[^\\\\x{81}-\\\\x{7fe}]+\", \"\\xc2\\x81#\\xe1\\xbf\\xb8\\xf0\\x90\\x90\\xa8\\xc2\\x80\\xdf\\xbf\\xdf\\xbe\" },\n\t{ MU, A, 0, 0, \"[\\\\x{801}-\\\\x{fffe}]+\", \"#\\xc3\\xa9\\xf0\\x90\\x90\\x80\\xe0\\xa0\\x80\\xe0\\xa0\\x81\\xef\\xbf\\xbe\\xef\\xbf\\xbf\" },\n\t{ MU, A, 0, 0, \"[^\\\\x{801}-\\\\x{fffe}]+\", \"\\xe0\\xa0\\x81#\\xc3\\xa9\\xf0\\x90\\x90\\x80\\xe0\\xa0\\x80\\xef\\xbf\\xbf\\xef\\xbf\\xbe\" },\n\t{ MU, A, 0, 0, \"[\\\\x{10001}-\\\\x{10fffe}]+\", \"#\\xc3\\xa9\\xe2\\xb1\\xa5\\xf0\\x90\\x80\\x80\\xf0\\x90\\x80\\x81\\xf4\\x8f\\xbf\\xbe\\xf4\\x8f\\xbf\\xbf\" },\n\t{ MU, A, 0, 0, \"[^\\\\x{10001}-\\\\x{10fffe}]+\", \"\\xf0\\x90\\x80\\x81#\\xc3\\xa9\\xe2\\xb1\\xa5\\xf0\\x90\\x80\\x80\\xf4\\x8f\\xbf\\xbf\\xf4\\x8f\\xbf\\xbe\" },\n\t{ CMU, A, 0, 0 | F_NOMATCH | F_PROPERTY, \"^[\\\\x{100}-\\\\x{17f}]\", \" \" },\n\t{ M, A, 0, 0 | F_NOMATCH, \"[^\\\\S\\\\W]{6}\", \"abcdefghijk\" },\n\n\t/* Unicode properties. */\n\t{ MUP, A, 0, 0, \"[1-5\\xc3\\xa9\\\\w]\", \"\\xc3\\xa1_\" },\n\t{ MUP, A, 0, 0 | F_PROPERTY, \"[\\xc3\\x81\\\\p{Ll}]\", \"A_\\xc3\\x89\\xc3\\xa1\" },\n\t{ MUP, A, 0, 0, \"[\\\\Wd-h_x-z]+\", \"a\\xc2\\xa1#_yhzdxi\" },\n\t{ MUP, A, 0, 0 | F_NOMATCH | F_PROPERTY, \"[\\\\P{Any}]\", \"abc\" },\n\t{ MUP, A, 0, 0 | F_NOMATCH | F_PROPERTY, \"[^\\\\p{Any}]\", \"abc\" },\n\t{ MUP, A, 0, 0 | F_NOMATCH | F_PROPERTY, \"[\\\\P{Any}\\xc3\\xa1-\\xc3\\xa8]\", \"abc\" },\n\t{ MUP, A, 0, 0 | F_NOMATCH | F_PROPERTY, \"[^\\\\p{Any}\\xc3\\xa1-\\xc3\\xa8]\", \"abc\" },\n\t{ MUP, A, 0, 0 | F_NOMATCH | F_PROPERTY, \"[\\xc3\\xa1-\\xc3\\xa8\\\\P{Any}]\", \"abc\" },\n\t{ MUP, A, 0, 0 | F_NOMATCH | F_PROPERTY, \"[^\\xc3\\xa1-\\xc3\\xa8\\\\p{Any}]\", \"abc\" },\n\t{ MUP, A, 0, 0 | F_PROPERTY, \"[\\xc3\\xa1-\\xc3\\xa8\\\\p{Any}]\", \"abc\" },\n\t{ MUP, A, 0, 0 | F_PROPERTY, \"[^\\xc3\\xa1-\\xc3\\xa8\\\\P{Any}]\", \"abc\" },\n\t{ MUP, A, 0, 0, \"[b-\\xc3\\xa9\\\\s]\", \"a\\xc\\xe6\\x92\\xad\" },\n\t{ CMUP, A, 0, 0, \"[\\xc2\\x85-\\xc2\\x89\\xc3\\x89]\", \"\\xc2\\x84\\xc3\\xa9\" },\n\t{ MUP, A, 0, 0, \"[^b-d^&\\\\s]{3,}\", \"db^ !a\\xe2\\x80\\xa8_ae\" },\n\t{ MUP, A, 0, 0 | F_PROPERTY, \"[^\\\\S\\\\P{Any}][\\\\sN]{1,3}[\\\\P{N}]{4}\", \"\\xe2\\x80\\xaa\\xa N\\x9\\xc3\\xa9_0\" },\n\t{ MU, A, 0, 0 | F_PROPERTY, \"[^\\\\P{L}\\x9!D-F\\xa]{2,3}\", \"\\x9,.DF\\xa.CG\\xc3\\x81\" },\n\t{ CMUP, A, 0, 0, \"[\\xc3\\xa1-\\xc3\\xa9_\\xe2\\x80\\xa0-\\xe2\\x80\\xaf]{1,5}[^\\xe2\\x80\\xa0-\\xe2\\x80\\xaf]\", \"\\xc2\\xa1\\xc3\\x89\\xc3\\x89\\xe2\\x80\\xaf_\\xe2\\x80\\xa0\" },\n\t{ MUP, A, 0, 0 | F_PROPERTY, \"[\\xc3\\xa2-\\xc3\\xa6\\xc3\\x81-\\xc3\\x84\\xe2\\x80\\xa8-\\xe2\\x80\\xa9\\xe6\\x92\\xad\\\\p{Zs}]{2,}\", \"\\xe2\\x80\\xa7\\xe2\\x80\\xa9\\xe6\\x92\\xad \\xe6\\x92\\xae\" },\n\t{ MUP, A, 0, 0 | F_PROPERTY, \"[\\\\P{L&}]{2}[^\\xc2\\x85-\\xc2\\x89\\\\p{Ll}\\\\p{Lu}]{2}\", \"\\xc3\\xa9\\xe6\\x92\\xad.a\\xe6\\x92\\xad|\\xc2\\x8a#\" },\n\t{ PCRE2_UCP, 0, 0, 0 | F_PROPERTY, \"[a-b\\\\s]{2,5}[^a]\", \"AB  baaa\" },\n\t{ MUP, 0, 0, 0 | F_NOMATCH | F_PROPERTY, \"[^\\\\p{Hangul}\\\\p{Z}]\", \" \" },\n\t{ MUP, 0, 0, 0, \"[\\\\p{Lu}\\\\P{Latin}]+\", \"c\\xEA\\xA4\\xAE,A,b\" },\n\t{ MUP, 0, 0, 0, \"[\\\\x{a92e}\\\\p{Lu}\\\\P{Latin}]+\", \"c\\xEA\\xA4\\xAE,A,b\" },\n\t{ CMUP, 0, 0, 0, \"[^S]\\\\B\", \"\\xe2\\x80\\x8a\" },\n\t{ MUP, 0, 0, 0 | F_NOMATCH, \"[^[:print:]\\\\x{f6f6}]\", \"\\xef\\x9b\\xb6\" },\n\t{ MUP, 0, 0, 0, \"[[:xdigit:]\\\\x{6500}]#\", \"\\xe6\\x94\\x80#\" },\n\t{ MUP, 0, 0, 0 | F_PROPERTY, \"[\\\\pC\\\\PC]#\", \"A#\" },\n\t{ MUP, 0, 0, 0 | F_PROPERTY, \"[\\\\x80-\\\\xff\\\\x{800}\\\\x{802}\\\\x{804}\\\\p{Cc}]\", \"\\xdf\\xbf\\xe0\\xa0\\x80\" },\n\n\t/* Possible empty brackets. */\n\t{ MU, A, 0, 0, \"(?:|ab||bc|a)+d\", \"abcxabcabd\" },\n\t{ MU, A, 0, 0, \"(|ab||bc|a)+d\", \"abcxabcabd\" },\n\t{ MU, A, 0, 0, \"(?:|ab||bc|a)*d\", \"abcxabcabd\" },\n\t{ MU, A, 0, 0, \"(|ab||bc|a)*d\", \"abcxabcabd\" },\n\t{ MU, A, 0, 0, \"(?:|ab||bc|a)+?d\", \"abcxabcabd\" },\n\t{ MU, A, 0, 0, \"(|ab||bc|a)+?d\", \"abcxabcabd\" },\n\t{ MU, A, 0, 0, \"(?:|ab||bc|a)*?d\", \"abcxabcabd\" },\n\t{ MU, A, 0, 0, \"(|ab||bc|a)*?d\", \"abcxabcabd\" },\n\t{ MU, A, 0, 0, \"(((a)*?|(?:ba)+)+?|(?:|c|ca)*)*m\", \"abaacaccabacabalabaacaccabacabamm\" },\n\t{ MU, A, 0, 0, \"(?:((?:a)*|(ba)+?)+|(|c|ca)*?)*?m\", \"abaacaccabacabalabaacaccabacabamm\" },\n\n\t/* Start offset. */\n\t{ MU, A, 0, 3, \"(\\\\d|(?:\\\\w)*\\\\w)+\", \"0ac01Hb\" },\n\t{ MU, A, 0, 4 | F_NOMATCH, \"(\\\\w\\\\W\\\\w)+\", \"ab#d\" },\n\t{ MU, A, 0, 2 | F_NOMATCH, \"(\\\\w\\\\W\\\\w)+\", \"ab#d\" },\n\t{ MU, A, 0, 1, \"(\\\\w\\\\W\\\\w)+\", \"ab#d\" },\n\n\t/* Newline. */\n\t{ M, PCRE2_NEWLINE_CRLF, 0, 0, \"\\\\W{0,2}[^#]{3}\", \"\\r\\n#.....\" },\n\t{ M, PCRE2_NEWLINE_CR, 0, 0, \"\\\\W{0,2}[^#]{3}\", \"\\r\\n#.....\" },\n\t{ M, PCRE2_NEWLINE_CRLF, 0, 0, \"\\\\W{1,3}[^#]\", \"\\r\\n##....\" },\n\t{ MU, A, PCRE2_NO_UTF_CHECK, 1, \"^.a\", \"\\n\\x80\\nxa\" },\n\t{ MU, A, 0, 1, \"^\", \"\\r\\n\" },\n\t{ M, PCRE2_NEWLINE_CRLF, 0, 1 | F_NOMATCH, \"^\", \"\\r\\n\" },\n\t{ M, PCRE2_NEWLINE_CRLF, 0, 1, \"^\", \"\\r\\na\" },\n\n\t/* Any character except newline or any newline. */\n\t{ 0, PCRE2_NEWLINE_CRLF, 0, 0, \".\", \"\\r\" },\n\t{ U, PCRE2_NEWLINE_CRLF, 0, 0, \".(.).\", \"a\\xc3\\xa1\\r\\n\\n\\r\\r\" },\n\t{ 0, PCRE2_NEWLINE_ANYCRLF, 0, 0, \".(.)\", \"a\\rb\\nc\\r\\n\\xc2\\x85\\xe2\\x80\\xa8\" },\n\t{ U, PCRE2_NEWLINE_ANYCRLF, 0, 0, \".(.)\", \"a\\rb\\nc\\r\\n\\xc2\\x85\\xe2\\x80\\xa8\" },\n\t{ U, PCRE2_NEWLINE_ANY, 0, 0, \"(.).\", \"a\\rb\\nc\\r\\n\\xc2\\x85\\xe2\\x80\\xa9$de\" },\n\t{ U, PCRE2_NEWLINE_ANYCRLF, 0, 0 | F_NOMATCH, \".(.).\", \"\\xe2\\x80\\xa8\\nb\\r\" },\n\t{ 0, PCRE2_NEWLINE_ANY, 0, 0, \"(.)(.)\", \"#\\x85#\\r#\\n#\\r\\n#\\x84\" },\n\t{ U, PCRE2_NEWLINE_ANY, 0, 0, \"(.+)#\", \"#\\rMn\\xc2\\x85#\\n###\" },\n\t{ 0, BSR(PCRE2_BSR_ANYCRLF), 0, 0, \"\\\\R\", \"\\r\" },\n\t{ 0, BSR(PCRE2_BSR_ANYCRLF), 0, 0, \"\\\\R\", \"\\x85#\\r\\n#\" },\n\t{ U, BSR(PCRE2_BSR_UNICODE), 0, 0, \"\\\\R\", \"ab\\xe2\\x80\\xa8#c\" },\n\t{ U, BSR(PCRE2_BSR_UNICODE), 0, 0, \"\\\\R\", \"ab\\r\\nc\" },\n\t{ U, PCRE2_NEWLINE_CRLF | BSR(PCRE2_BSR_UNICODE), 0, 0, \"(\\\\R.)+\", \"\\xc2\\x85\\r\\n#\\xe2\\x80\\xa8\\n\\r\\n\\r\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"\\\\R+\", \"ab\" },\n\t{ MU, A, 0, 0, \"\\\\R+\", \"ab\\r\\n\\r\" },\n\t{ MU, A, 0, 0, \"\\\\R*\", \"ab\\r\\n\\r\" },\n\t{ MU, A, 0, 0, \"\\\\R*\", \"\\r\\n\\r\" },\n\t{ M, A, 0, 0, \"\\\\R+\\x85\", \"\\r\\n\\n\\r#\\r\\x85\\n\" },\n\t{ MU, A, 0, 0, \"\\\\R{2,4}\", \"\\r\\nab\\r\\r\" },\n\t{ MU, A, 0, 0, \"\\\\R{2,4}\", \"\\r\\nab\\n\\n\\n\\r\\r\\r\" },\n\t{ MU, A, 0, 0, \"\\\\R{2,}\", \"\\r\\nab\\n\\n\\n\\r\\r\\r\" },\n\t{ MU, A, 0, 0, \"\\\\R{0,3}\", \"\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\" },\n\t{ MU, A, 0, 0, \"\\\\R{2,4}\\n\", \"\\r\\n\\nab\\r\\r\\nab\\r\\r\\n\\n\" },\n\t{ MU, A, 0, 0, \"\\\\R{2,4}\\n\", \"\\r\\n\\nab\\n\\n\\n\\r\\r\\n\" },\n\t{ MU, A, 0, 0, \"\\\\R{3,}\\n\", \"\\r\\n\\r\\n\\nab\\n\\n\\n\\r\\r\\n\\n\" },\n\t{ MU, A, 0, 0, \"\\\\R{0,3}\\n\", \"\\r\\n\\r\\n\\r\\n\\n\" },\n\t{ MU, A, 0, 0, \"\\\\R{0,3}\\n\", \"\\r\\n\\r\\n\\r\\n\\r\" },\n\t{ MU, A, 0, 0, \"(\\\\R{0,3}\\n;)+\", \"\\r\\n\\r\\n\\r\\n\\r\\n\\n;\\n;\\n\\n;\\n\\n\\n;\\n\\n\\n\\n\\n;\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"\\\\R+\\\\R\\\\R\", \"\\r\\n\\r\\n\" },\n\t{ MU, A, 0, 0, \"\\\\R+\\\\R\\\\R\", \"\\r\\r\\r\" },\n\t{ MU, A, 0, 0, \"\\\\R*\\\\R\\\\R\", \"\\n\\r\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"\\\\R{2,4}\\\\R\\\\R\", \"\\r\\r\\r\" },\n\t{ MU, A, 0, 0, \"\\\\R{2,4}\\\\R\\\\R\", \"\\r\\r\\r\\r\" },\n\n\t/* Atomic groups (no fallback from \"next\" direction). */\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?>ab)ab\", \"bab\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?>(ab))ab\", \"bab\" },\n\t{ MU, A, 0, 0, \"(?>ab)+abc(?>de)*def(?>gh)?ghe(?>ij)+?k(?>lm)*?n(?>op)?\\?op\",\n\t\t\t\"bababcdedefgheijijklmlmnop\" },\n\t{ MU, A, 0, 0, \"(?>a(b)+a|(ab)?\\?(b))an\", \"abban\" },\n\t{ MU, A, 0, 0, \"(?>ab+a|(?:ab)?\\?b)an\", \"abban\" },\n\t{ MU, A, 0, 0, \"((?>ab|ad|)*?)(?>|c)*abad\", \"abababcababad\" },\n\t{ MU, A, 0, 0, \"(?>(aa|b|)*+(?>(##)|###)*d|(aa)(?>(baa)?)m)\", \"aabaa#####da\" },\n\t{ MU, A, 0, 0, \"((?>a|)+?)b\", \"aaacaaab\" },\n\t{ MU, A, 0, 0, \"(?>x|)*$\", \"aaa\" },\n\t{ MU, A, 0, 0, \"(?>(x)|)*$\", \"aaa\" },\n\t{ MU, A, 0, 0, \"(?>x|())*$\", \"aaa\" },\n\t{ MU, A, 0, 0, \"((?>[cxy]a|[a-d])*?)b\", \"aaa+ aaab\" },\n\t{ MU, A, 0, 0, \"((?>[cxy](a)|[a-d])*?)b\", \"aaa+ aaab\" },\n\t{ MU, A, 0, 0, \"(?>((?>(a+))))bab|(?>((?>(a+))))bb\", \"aaaabaaabaabab\" },\n\t{ MU, A, 0, 0, \"(?>(?>a+))bab|(?>(?>a+))bb\", \"aaaabaaabaabab\" },\n\t{ MU, A, 0, 0, \"(?>(a)c|(?>(c)|(a))a)b*?bab\", \"aaaabaaabaabab\" },\n\t{ MU, A, 0, 0, \"(?>ac|(?>c|a)a)b*?bab\", \"aaaabaaabaabab\" },\n\t{ MU, A, 0, 0, \"(?>(b)b|(a))*b(?>(c)|d)?x\", \"ababcaaabdbx\" },\n\t{ MU, A, 0, 0, \"(?>bb|a)*b(?>c|d)?x\", \"ababcaaabdbx\" },\n\t{ MU, A, 0, 0, \"(?>(bb)|a)*b(?>c|(d))?x\", \"ababcaaabdbx\" },\n\t{ MU, A, 0, 0, \"(?>(a))*?(?>(a))+?(?>(a))??x\", \"aaaaaacccaaaaabax\" },\n\t{ MU, A, 0, 0, \"(?>a)*?(?>a)+?(?>a)??x\", \"aaaaaacccaaaaabax\" },\n\t{ MU, A, 0, 0, \"(?>(a)|)*?(?>(a)|)+?(?>(a)|)??x\", \"aaaaaacccaaaaabax\" },\n\t{ MU, A, 0, 0, \"(?>a|)*?(?>a|)+?(?>a|)??x\", \"aaaaaacccaaaaabax\" },\n\t{ MU, A, 0, 0, \"(?>a(?>(a{0,2}))*?b|aac)+b\", \"aaaaaaacaaaabaaaaacaaaabaacaaabb\" },\n\t{ CM, A, 0, 0, \"(?>((?>a{32}|b+|(a*))?(?>c+|d*)?\\?)+e)+?f\", \"aaccebbdde bbdaaaccebbdee bbdaaaccebbdeef\" },\n\t{ MU, A, 0, 0, \"(?>(?:(?>aa|a||x)+?b|(?>aa|a||(x))+?c)?(?>[ad]{0,2})*?d)+d\", \"aaacdbaabdcabdbaaacd aacaabdbdcdcaaaadaabcbaadd\" },\n\t{ MU, A, 0, 0, \"(?>(?:(?>aa|a||(x))+?b|(?>aa|a||x)+?c)?(?>[ad]{0,2})*?d)+d\", \"aaacdbaabdcabdbaaacd aacaabdbdcdcaaaadaabcbaadd\" },\n\t{ MU, A, 0, 0 | F_PROPERTY, \"\\\\X\", \"\\xcc\\x8d\\xcc\\x8d\" },\n\t{ MU, A, 0, 0 | F_PROPERTY, \"\\\\X\", \"\\xcc\\x8d\\xcc\\x8d#\\xcc\\x8d\\xcc\\x8d\" },\n\t{ MU, A, 0, 0 | F_PROPERTY, \"\\\\X+..\", \"\\xcc\\x8d#\\xcc\\x8d#\\xcc\\x8d\\xcc\\x8d\" },\n\t{ MU, A, 0, 0 | F_PROPERTY, \"\\\\X{2,4}\", \"abcdef\" },\n\t{ MU, A, 0, 0 | F_PROPERTY, \"\\\\X{2,4}?\", \"abcdef\" },\n\t{ MU, A, 0, 0 | F_NOMATCH | F_PROPERTY, \"\\\\X{2,4}..\", \"#\\xcc\\x8d##\" },\n\t{ MU, A, 0, 0 | F_PROPERTY, \"\\\\X{2,4}..\", \"#\\xcc\\x8d#\\xcc\\x8d##\" },\n\t{ MU, A, 0, 0, \"(c(ab)?+ab)+\", \"cabcababcab\" },\n\t{ MU, A, 0, 0, \"(?>(a+)b)+aabab\", \"aaaabaaabaabab\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?>a*|)a\", \"aaa\" },\n\n\t/* Possessive quantifiers. */\n\t{ MU, A, 0, 0, \"(?:a|b)++m\", \"mababbaaxababbaam\" },\n\t{ MU, A, 0, 0, \"(?:a|b)*+m\", \"mababbaaxababbaam\" },\n\t{ MU, A, 0, 0, \"(?:a|b)*+m\", \"ababbaaxababbaam\" },\n\t{ MU, A, 0, 0, \"(a|b)++m\", \"mababbaaxababbaam\" },\n\t{ MU, A, 0, 0, \"(a|b)*+m\", \"mababbaaxababbaam\" },\n\t{ MU, A, 0, 0, \"(a|b)*+m\", \"ababbaaxababbaam\" },\n\t{ MU, A, 0, 0, \"(a|b(*ACCEPT))++m\", \"maaxab\" },\n\t{ MU, A, 0, 0, \"(?:b*)++m\", \"bxbbxbbbxm\" },\n\t{ MU, A, 0, 0, \"(?:b*)++m\", \"bxbbxbbbxbbm\" },\n\t{ MU, A, 0, 0, \"(?:b*)*+m\", \"bxbbxbbbxm\" },\n\t{ MU, A, 0, 0, \"(?:b*)*+m\", \"bxbbxbbbxbbm\" },\n\t{ MU, A, 0, 0, \"(b*)++m\", \"bxbbxbbbxm\" },\n\t{ MU, A, 0, 0, \"(b*)++m\", \"bxbbxbbbxbbm\" },\n\t{ MU, A, 0, 0, \"(b*)*+m\", \"bxbbxbbbxm\" },\n\t{ MU, A, 0, 0, \"(b*)*+m\", \"bxbbxbbbxbbm\" },\n\t{ MU, A, 0, 0, \"(?:a|(b))++m\", \"mababbaaxababbaam\" },\n\t{ MU, A, 0, 0, \"(?:(a)|b)*+m\", \"mababbaaxababbaam\" },\n\t{ MU, A, 0, 0, \"(?:(a)|(b))*+m\", \"ababbaaxababbaam\" },\n\t{ MU, A, 0, 0, \"(a|(b))++m\", \"mababbaaxababbaam\" },\n\t{ MU, A, 0, 0, \"((a)|b)*+m\", \"mababbaaxababbaam\" },\n\t{ MU, A, 0, 0, \"((a)|(b))*+m\", \"ababbaaxababbaam\" },\n\t{ MU, A, 0, 0, \"(a|(b)(*ACCEPT))++m\", \"maaxab\" },\n\t{ MU, A, 0, 0, \"(?:(b*))++m\", \"bxbbxbbbxm\" },\n\t{ MU, A, 0, 0, \"(?:(b*))++m\", \"bxbbxbbbxbbm\" },\n\t{ MU, A, 0, 0, \"(?:(b*))*+m\", \"bxbbxbbbxm\" },\n\t{ MU, A, 0, 0, \"(?:(b*))*+m\", \"bxbbxbbbxbbm\" },\n\t{ MU, A, 0, 0, \"((b*))++m\", \"bxbbxbbbxm\" },\n\t{ MU, A, 0, 0, \"((b*))++m\", \"bxbbxbbbxbbm\" },\n\t{ MU, A, 0, 0, \"((b*))*+m\", \"bxbbxbbbxm\" },\n\t{ MU, A, 0, 0, \"((b*))*+m\", \"bxbbxbbbxbbm\" },\n\t{ MU, A, 0, 0, \"(A)*+$\", \"ABC\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?>(b{2,4}))(?:(?:(aa|c))++m|(?:(aa|c))+n)\", \"bbaacaaccaaaacxbbbmbn\" },\n\t{ MU, A, 0, 0, \"((?:b)++a)+(cd)*+m\", \"bbababbacdcdnbbababbacdcdm\" },\n\t{ MU, A, 0, 0, \"((?:(b))++a)+((c)d)*+m\", \"bbababbacdcdnbbababbacdcdm\" },\n\t{ MU, A, 0, 0, \"(?:(?:(?:ab)*+k)++(?:n(?:cd)++)*+)*+m\", \"ababkkXababkkabkncXababkkabkncdcdncdXababkkabkncdcdncdkkabkncdXababkkabkncdcdncdkkabkncdm\" },\n\t{ MU, A, 0, 0, \"(?:((ab)*+(k))++(n(?:c(d))++)*+)*+m\", \"ababkkXababkkabkncXababkkabkncdcdncdXababkkabkncdcdncdkkabkncdXababkkabkncdcdncdkkabkncdm\" },\n\n\t/* Back references. */\n\t{ MU, A, 0, 0, \"(aa|bb)(\\\\1*)(ll|)(\\\\3*)bbbbbbc\", \"aaaaaabbbbbbbbc\" },\n\t{ CMU, A, 0, 0, \"(aa|bb)(\\\\1+)(ll|)(\\\\3+)bbbbbbc\", \"bBbbBbCbBbbbBbbcbbBbbbBBbbC\" },\n\t{ CM, A, 0, 0, \"(a{2,4})\\\\1\", \"AaAaaAaA\" },\n\t{ MU, A, 0, 0, \"(aa|bb)(\\\\1?)aa(\\\\1?)(ll|)(\\\\4+)bbc\", \"aaaaaaaabbaabbbbaabbbbc\" },\n\t{ MU, A, 0, 0, \"(aa|bb)(\\\\1{0,5})(ll|)(\\\\3{0,5})cc\", \"bbxxbbbbxxaaaaaaaaaaaaaaaacc\" },\n\t{ MU, A, 0, 0, \"(aa|bb)(\\\\1{3,5})(ll|)(\\\\3{3,5})cc\", \"bbbbbbbbbbbbaaaaaaccbbbbbbbbbbbbbbcc\" },\n\t{ MU, A, 0, 0, \"(aa|bb)(\\\\1{3,})(ll|)(\\\\3{3,})cc\", \"bbbbbbbbbbbbaaaaaaccbbbbbbbbbbbbbbcc\" },\n\t{ MU, A, 0, 0, \"(\\\\w+)b(\\\\1+)c\", \"GabGaGaDbGaDGaDc\" },\n\t{ MU, A, 0, 0, \"(?:(aa)|b)\\\\1?b\", \"bb\" },\n\t{ CMU, A, 0, 0, \"(aa|bb)(\\\\1*?)aa(\\\\1+?)\", \"bBBbaaAAaaAAaa\" },\n\t{ MU, A, 0, 0, \"(aa|bb)(\\\\1*?)(dd|)cc(\\\\3+?)\", \"aaaaaccdd\" },\n\t{ CMU, A, 0, 0, \"(?:(aa|bb)(\\\\1?\\?)cc){2}(\\\\1?\\?)\", \"aAaABBbbAAaAcCaAcCaA\" },\n\t{ MU, A, 0, 0, \"(?:(aa|bb)(\\\\1{3,5}?)){2}(dd|)(\\\\3{3,5}?)\", \"aaaaaabbbbbbbbbbaaaaaaaaaaaaaa\" },\n\t{ CM, A, 0, 0, \"(?:(aa|bb)(\\\\1{3,}?)){2}(dd|)(\\\\3{3,}?)\", \"aaaaaabbbbbbbbbbaaaaaaaaaaaaaa\" },\n\t{ MU, A, 0, 0, \"(?:(aa|bb)(\\\\1{0,3}?)){2}(dd|)(\\\\3{0,3}?)b(\\\\1{0,3}?)(\\\\1{0,3})\", \"aaaaaaaaaaaaaaabaaaaa\" },\n\t{ MU, A, 0, 0, \"(a(?:\\\\1|)a){3}b\", \"aaaaaaaaaaab\" },\n\t{ M, A, 0, 0, \"(a?)b(\\\\1\\\\1*\\\\1+\\\\1?\\\\1*?\\\\1+?\\\\1??\\\\1*+\\\\1++\\\\1?+\\\\1{4}\\\\1{3,5}\\\\1{4,}\\\\1{0,5}\\\\1{3,5}?\\\\1{4,}?\\\\1{0,5}?\\\\1{3,5}+\\\\1{4,}+\\\\1{0,5}+#){2}d\", \"bb#b##d\" },\n\t{ MUP, A, 0, 0 | F_PROPERTY, \"(\\\\P{N})\\\\1{2,}\", \".www.\" },\n\t{ MUP, A, 0, 0 | F_PROPERTY, \"(\\\\P{N})\\\\1{0,2}\", \"wwwww.\" },\n\t{ MUP, A, 0, 0 | F_PROPERTY, \"(\\\\P{N})\\\\1{1,2}ww\", \"wwww\" },\n\t{ MUP, A, 0, 0 | F_PROPERTY, \"(\\\\P{N})\\\\1{1,2}ww\", \"wwwww\" },\n\t{ PCRE2_UCP, 0, 0, 0 | F_PROPERTY, \"(\\\\P{N})\\\\1{2,}\", \".www.\" },\n\t{ CMUP, A, 0, 0, \"(\\xf0\\x90\\x90\\x80)\\\\1\", \"\\xf0\\x90\\x90\\xa8\\xf0\\x90\\x90\\xa8\" },\n\t{ MU | PCRE2_DUPNAMES, A, 0, 0 | F_NOMATCH, \"\\\\k<A>{1,3}(?<A>aa)(?<A>bb)\", \"aabb\" },\n\t{ MU | PCRE2_DUPNAMES | PCRE2_MATCH_UNSET_BACKREF, A, 0, 0, \"\\\\k<A>{1,3}(?<A>aa)(?<A>bb)\", \"aabb\" },\n\t{ MU | PCRE2_DUPNAMES | PCRE2_MATCH_UNSET_BACKREF, A, 0, 0, \"\\\\k<A>*(?<A>aa)(?<A>bb)\", \"aabb\" },\n\t{ MU | PCRE2_DUPNAMES, A, 0, 0, \"(?<A>aa)(?<A>bb)\\\\k<A>{0,3}aaaaaa\", \"aabbaaaaaa\" },\n\t{ MU | PCRE2_DUPNAMES, A, 0, 0, \"(?<A>aa)(?<A>bb)\\\\k<A>{2,5}bb\", \"aabbaaaabb\" },\n\t{ MU | PCRE2_DUPNAMES, A, 0, 0, \"(?:(?<A>aa)|(?<A>bb))\\\\k<A>{0,3}m\", \"aaaaaaaabbbbaabbbbm\" },\n\t{ MU | PCRE2_DUPNAMES, A, 0, 0 | F_NOMATCH, \"\\\\k<A>{1,3}?(?<A>aa)(?<A>bb)\", \"aabb\" },\n\t{ MU | PCRE2_DUPNAMES | PCRE2_MATCH_UNSET_BACKREF, A, 0, 0, \"\\\\k<A>{1,3}?(?<A>aa)(?<A>bb)\", \"aabb\" },\n\t{ MU | PCRE2_DUPNAMES, A, 0, 0, \"\\\\k<A>*?(?<A>aa)(?<A>bb)\", \"aabb\" },\n\t{ MU | PCRE2_DUPNAMES, A, 0, 0, \"(?:(?<A>aa)|(?<A>bb))\\\\k<A>{0,3}?m\", \"aaaaaabbbbbbaabbbbbbbbbbm\" },\n\t{ MU | PCRE2_DUPNAMES, A, 0, 0, \"(?:(?<A>aa)|(?<A>bb))\\\\k<A>*?m\", \"aaaaaabbbbbbaabbbbbbbbbbm\" },\n\t{ MU | PCRE2_DUPNAMES, A, 0, 0, \"(?:(?<A>aa)|(?<A>bb))\\\\k<A>{2,3}?\", \"aaaabbbbaaaabbbbbbbbbb\" },\n\t{ CMU | PCRE2_DUPNAMES, A, 0, 0, \"(?:(?<A>AA)|(?<A>BB))\\\\k<A>{0,3}M\", \"aaaaaaaabbbbaabbbbm\" },\n\t{ CMU | PCRE2_DUPNAMES, A, 0, 0, \"(?:(?<A>AA)|(?<A>BB))\\\\k<A>{1,3}M\", \"aaaaaaaabbbbaabbbbm\" },\n\t{ CMU | PCRE2_DUPNAMES, A, 0, 0, \"(?:(?<A>AA)|(?<A>BB))\\\\k<A>{0,3}?M\", \"aaaaaabbbbbbaabbbbbbbbbbm\" },\n\t{ CMU | PCRE2_DUPNAMES, A, 0, 0, \"(?:(?<A>AA)|(?<A>BB))\\\\k<A>{2,3}?\", \"aaaabbbbaaaabbbbbbbbbb\" },\n\t{ MU | PCRE2_DUPNAMES, A, 0, 0, \"^(?P<NAME>..)(?P<NAME>..)\\\\k<NAME>{2,4}\", \"AaAAAaAaAaaA\" },\n\t{ MU | PCRE2_MATCH_UNSET_BACKREF, A, 0, 0, \"(a)|\\\\1+c\", \"xxc\" },\n\t{ MU | PCRE2_MATCH_UNSET_BACKREF, A, 0, 0, \"\\\\1+?()\", \"\" },\n\n\t/* Assertions. */\n\t{ MU, A, 0, 0, \"(?=xx|yy|zz)\\\\w{4}\", \"abczzdefg\" },\n\t{ MU, A, 0, 0, \"(?=((\\\\w+)b){3}|ab)\", \"dbbbb ab\" },\n\t{ MU, A, 0, 0, \"(?!ab|bc|cd)[a-z]{2}\", \"Xabcdef\" },\n\t{ MU, A, 0, 0, \"(?<=aaa|aa|a)a\", \"aaa\" },\n\t{ MU, A, 0, 2, \"(?<=aaa|aa|a)a\", \"aaa\" },\n\t{ M, A, 0, 0, \"(?<=aaa|aa|a)a\", \"aaa\" },\n\t{ M, A, 0, 2, \"(?<=aaa|aa|a)a\", \"aaa\" },\n\t{ MU, A, 0, 0, \"(\\\\d{2})(?!\\\\w+c|(((\\\\w?)m){2}n)+|\\\\1)\", \"x5656\" },\n\t{ MU, A, 0, 0, \"((?=((\\\\d{2,6}\\\\w){2,}))\\\\w{5,20}K){2,}\", \"567v09708K12l00M00 567v09708K12l00M00K45K\" },\n\t{ MU, A, 0, 0, \"(?=(?:(?=\\\\S+a)\\\\w*(b)){3})\\\\w+\\\\d\", \"bba bbab nbbkba nbbkba0kl\" },\n\t{ MU, A, 0, 0, \"(?>a(?>(b+))a(?=(..)))*?k\", \"acabbcabbaabacabaabbakk\" },\n\t{ MU, A, 0, 0, \"((?(?=(a))a)+k)\", \"bbak\" },\n\t{ MU, A, 0, 0, \"((?(?=a)a)+k)\", \"bbak\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?=(?>(a))m)amk\", \"a k\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?!(?>(a))m)amk\", \"a k\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?>(?=(a))am)amk\", \"a k\" },\n\t{ MU, A, 0, 0, \"(?=(?>a|(?=(?>(b+))a|c)[a-c]+)*?m)[a-cm]+k\", \"aaam bbam baaambaam abbabba baaambaamk\" },\n\t{ MU, A, 0, 0, \"(?> ?\\?\\\\b(?(?=\\\\w{1,4}(a))m)\\\\w{0,8}bc){2,}?\", \"bca ssbc mabd ssbc mabc\" },\n\t{ MU, A, 0, 0, \"(?:(?=ab)?[^n][^n])+m\", \"ababcdabcdcdabnababcdabcdcdabm\" },\n\t{ MU, A, 0, 0, \"(?:(?=a(b))?[^n][^n])+m\", \"ababcdabcdcdabnababcdabcdcdabm\" },\n\t{ MU, A, 0, 0, \"(?:(?=.(.))??\\\\1.)+m\", \"aabbbcbacccanaabbbcbacccam\" },\n\t{ MU, A, 0, 0, \"(?:(?=.)??[a-c])+m\", \"abacdcbacacdcaccam\" },\n\t{ MU, A, 0, 0, \"((?!a)?(?!([^a]))?)+$\", \"acbab\" },\n\t{ MU, A, 0, 0, \"((?!a)?\\?(?!([^a]))?\\?)+$\", \"acbab\" },\n\t{ MU, A, 0, 0, \"a(?=(?C)\\\\B(?C`x`))b\", \"ab\" },\n\t{ MU, A, 0, 0, \"a(?!(?C)\\\\B(?C`x`))bb|ab\", \"abb\" },\n\t{ MU, A, 0, 0, \"a(?=\\\\b|(?C)\\\\B(?C`x`))b\", \"ab\" },\n\t{ MU, A, 0, 0, \"a(?!\\\\b|(?C)\\\\B(?C`x`))bb|ab\", \"abb\" },\n\t{ MU, A, 0, 0, \"c(?(?=(?C)\\\\B(?C`x`))ab|a)\", \"cab\" },\n\t{ MU, A, 0, 0, \"c(?(?!(?C)\\\\B(?C`x`))ab|a)\", \"cab\" },\n\t{ MU, A, 0, 0, \"c(?(?=\\\\b|(?C)\\\\B(?C`x`))ab|a)\", \"cab\" },\n\t{ MU, A, 0, 0, \"c(?(?!\\\\b|(?C)\\\\B(?C`x`))ab|a)\", \"cab\" },\n\t{ MU, A, 0, 0, \"a(?=)b\", \"ab\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"a(?!)b\", \"ab\" },\n\t{ MU, A, 0, 0, \"(?(?<!|(|a)))\", \"a\" },\n\t{ MU, A, 0, 0, \"(?=((?|(a)(.)|(b)(..)|(c)(...)))(?1(2,3))).x\", \"b12c123bx2c123\" },\n\n\t/* Not empty, ACCEPT, FAIL */\n\t{ MU, A, PCRE2_NOTEMPTY, 0 | F_NOMATCH, \"a*\", \"bcx\" },\n\t{ MU, A, PCRE2_NOTEMPTY, 0, \"a*\", \"bcaad\" },\n\t{ MU, A, PCRE2_NOTEMPTY, 0, \"a*?\", \"bcaad\" },\n\t{ MU, A, PCRE2_NOTEMPTY_ATSTART, 0, \"a*\", \"bcaad\" },\n\t{ MU, A, 0, 0, \"a(*ACCEPT)b\", \"ab\" },\n\t{ MU, A, PCRE2_NOTEMPTY, 0 | F_NOMATCH, \"a*(*ACCEPT)b\", \"bcx\" },\n\t{ MU, A, PCRE2_NOTEMPTY, 0, \"a*(*ACCEPT)b\", \"bcaad\" },\n\t{ MU, A, PCRE2_NOTEMPTY, 0, \"a*?(*ACCEPT)b\", \"bcaad\" },\n\t{ MU, A, PCRE2_NOTEMPTY, 0 | F_NOMATCH, \"(?:z|a*(*ACCEPT)b)\", \"bcx\" },\n\t{ MU, A, PCRE2_NOTEMPTY, 0, \"(?:z|a*(*ACCEPT)b)\", \"bcaad\" },\n\t{ MU, A, PCRE2_NOTEMPTY, 0, \"(?:z|a*?(*ACCEPT)b)\", \"bcaad\" },\n\t{ MU, A, PCRE2_NOTEMPTY_ATSTART, 0, \"a*(*ACCEPT)b\", \"bcx\" },\n\t{ MU, A, PCRE2_NOTEMPTY_ATSTART, 0 | F_NOMATCH, \"a*(*ACCEPT)b\", \"\" },\n\t{ MU, A, 0, 0, \"((a(*ACCEPT)b))\", \"ab\" },\n\t{ MU, A, 0, 0, \"(a(*FAIL)a|a)\", \"aaa\" },\n\t{ MU, A, 0, 0, \"(?=ab(*ACCEPT)b)a\", \"ab\" },\n\t{ MU, A, 0, 0, \"(?=(?:x|ab(*ACCEPT)b))\", \"ab\" },\n\t{ MU, A, 0, 0, \"(?=(a(b(*ACCEPT)b)))a\", \"ab\" },\n\t{ MU, A, PCRE2_NOTEMPTY, 0, \"(?=a*(*ACCEPT))c\", \"c\" },\n\t{ MU, A, PCRE2_NOTEMPTY, 0 | F_NOMATCH, \"(?=A)\", \"AB\" },\n\t{ MU | PCRE2_ENDANCHORED, A, 0, 0, \"aa(*ACCEPT)aa\", \"aaa\" },\n\n\t/* Conditional blocks. */\n\t{ MU, A, 0, 0, \"(?(?=(a))a|b)+k\", \"ababbalbbadabak\" },\n\t{ MU, A, 0, 0, \"(?(?!(b))a|b)+k\", \"ababbalbbadabak\" },\n\t{ MU, A, 0, 0, \"(?(?=a)a|b)+k\", \"ababbalbbadabak\" },\n\t{ MU, A, 0, 0, \"(?(?!b)a|b)+k\", \"ababbalbbadabak\" },\n\t{ MU, A, 0, 0, \"(?(?=(a))a*|b*)+k\", \"ababbalbbadabak\" },\n\t{ MU, A, 0, 0, \"(?(?!(b))a*|b*)+k\", \"ababbalbbadabak\" },\n\t{ MU, A, 0, 0, \"(?(?!(b))(?:aaaaaa|a)|(?:bbbbbb|b))+aaaak\", \"aaaaaaaaaaaaaa bbbbbbbbbbbbbbb aaaaaaak\" },\n\t{ MU, A, 0, 0, \"(?(?!b)(?:aaaaaa|a)|(?:bbbbbb|b))+aaaak\", \"aaaaaaaaaaaaaa bbbbbbbbbbbbbbb aaaaaaak\" },\n\t{ MU, A, 0, 0 | F_DIFF, \"(?(?!(b))(?:aaaaaa|a)|(?:bbbbbb|b))+bbbbk\", \"aaaaaaaaaaaaaa bbbbbbbbbbbbbbb bbbbbbbk\" },\n\t{ MU, A, 0, 0, \"(?(?!b)(?:aaaaaa|a)|(?:bbbbbb|b))+bbbbk\", \"aaaaaaaaaaaaaa bbbbbbbbbbbbbbb bbbbbbbk\" },\n\t{ MU, A, 0, 0, \"(?(?=a)a*|b*)+k\", \"ababbalbbadabak\" },\n\t{ MU, A, 0, 0, \"(?(?!b)a*|b*)+k\", \"ababbalbbadabak\" },\n\t{ MU, A, 0, 0, \"(?(?=a)ab)\", \"a\" },\n\t{ MU, A, 0, 0, \"(?(?<!b)c)\", \"b\" },\n\t{ MU, A, 0, 0, \"(?(DEFINE)a(b))\", \"a\" },\n\t{ MU, A, 0, 0, \"a(?(DEFINE)(?:b|(?:c?)+)*)\", \"a\" },\n\t{ MU, A, 0, 0, \"(?(?=.[a-c])[k-l]|[A-D])\", \"kdB\" },\n\t{ MU, A, 0, 0, \"(?(?!.{0,4}[cd])(aa|bb)|(cc|dd))+\", \"aabbccddaa\" },\n\t{ MU, A, 0, 0, \"(?(?=[^#@]*@)(aaab|aa|aba)|(aba|aab)){3,}\", \"aaabaaaba#aaabaaaba#aaabaaaba@\" },\n\t{ MU, A, 0, 0, \"((?=\\\\w{5})\\\\w(?(?=\\\\w*k)\\\\d|[a-f_])*\\\\w\\\\s)+\", \"mol m10kk m088k _f_a_ mbkkl\" },\n\t{ MU, A, 0, 0, \"(c)?\\?(?(1)a|b)\", \"cdcaa\" },\n\t{ MU, A, 0, 0, \"(c)?\\?(?(1)a|b)\", \"cbb\" },\n\t{ MU, A, 0, 0 | F_DIFF, \"(?(?=(a))(aaaa|a?))+aak\", \"aaaaab aaaaak\" },\n\t{ MU, A, 0, 0, \"(?(?=a)(aaaa|a?))+aak\", \"aaaaab aaaaak\" },\n\t{ MU, A, 0, 0, \"(?(?!(b))(aaaa|a?))+aak\", \"aaaaab aaaaak\" },\n\t{ MU, A, 0, 0, \"(?(?!b)(aaaa|a?))+aak\", \"aaaaab aaaaak\" },\n\t{ MU, A, 0, 0 | F_DIFF, \"(?(?=(a))a*)+aak\", \"aaaaab aaaaak\" },\n\t{ MU, A, 0, 0, \"(?(?=a)a*)+aak\", \"aaaaab aaaaak\" },\n\t{ MU, A, 0, 0, \"(?(?!(b))a*)+aak\", \"aaaaab aaaaak\" },\n\t{ MU, A, 0, 0, \"(?(?!b)a*)+aak\", \"aaaaab aaaaak\" },\n\t{ MU, A, 0, 0, \"(?(?=(?=(?!(x))a)aa)aaa|(?(?=(?!y)bb)bbb))*k\", \"abaabbaaabbbaaabbb abaabbaaabbbaaabbbk\" },\n\t{ MU, A, 0, 0, \"(?P<Name>a)?(?P<Name2>b)?(?(Name)c|d)*l\", \"bc ddd abccabccl\" },\n\t{ MU, A, 0, 0, \"(?P<Name>a)?(?P<Name2>b)?(?(Name)c|d)+?dd\", \"bcabcacdb bdddd\" },\n\t{ MU, A, 0, 0, \"(?P<Name>a)?(?P<Name2>b)?(?(Name)c|d)+l\", \"ababccddabdbccd abcccl\" },\n\t{ MU, A, 0, 0, \"((?:a|aa)(?(1)aaa))x\", \"aax\" },\n\t{ MU, A, 0, 0, \"(?(?!)a|b)\", \"ab\" },\n\t{ MU, A, 0, 0, \"(?(?!)a)\", \"ab\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?(?!)a|b)\", \"ac\" },\n\n\t/* Set start of match. */\n\t{ MU, A, 0, 0, \"(?:\\\\Ka)*aaaab\", \"aaaaaaaa aaaaaaabb\" },\n\t{ MU, A, 0, 0, \"(?>\\\\Ka\\\\Ka)*aaaab\", \"aaaaaaaa aaaaaaaaaabb\" },\n\t{ MU, A, 0, 0, \"a+\\\\K(?<=\\\\Gaa)a\", \"aaaaaa\" },\n\t{ MU, A, PCRE2_NOTEMPTY, 0 | F_NOMATCH, \"a\\\\K(*ACCEPT)b\", \"aa\" },\n\t{ MU, A, PCRE2_NOTEMPTY_ATSTART, 0, \"a\\\\K(*ACCEPT)b\", \"aa\" },\n\n\t/* First line. */\n\t{ MU | PCRE2_FIRSTLINE, A, 0, 0 | F_PROPERTY, \"\\\\p{Any}a\", \"bb\\naaa\" },\n\t{ MU | PCRE2_FIRSTLINE, A, 0, 0 | F_NOMATCH | F_PROPERTY, \"\\\\p{Any}a\", \"bb\\r\\naaa\" },\n\t{ MU | PCRE2_FIRSTLINE, A, 0, 0, \"(?<=a)\", \"a\" },\n\t{ MU | PCRE2_FIRSTLINE, A, 0, 0 | F_NOMATCH, \"[^a][^b]\", \"ab\" },\n\t{ MU | PCRE2_FIRSTLINE, A, 0, 0 | F_NOMATCH, \"a\", \"\\na\" },\n\t{ MU | PCRE2_FIRSTLINE, A, 0, 0 | F_NOMATCH, \"[abc]\", \"\\na\" },\n\t{ MU | PCRE2_FIRSTLINE, A, 0, 0 | F_NOMATCH, \"^a\", \"\\na\" },\n\t{ MU | PCRE2_FIRSTLINE, A, 0, 0 | F_NOMATCH, \"^(?<=\\n)\", \"\\na\" },\n\t{ MU | PCRE2_FIRSTLINE, A, 0, 0, \"\\xf0\\x90\\x90\\x80\", \"\\xf0\\x90\\x90\\x80\" },\n\t{ MU | PCRE2_FIRSTLINE, PCRE2_NEWLINE_ANY, 0, 0 | F_NOMATCH, \"#\", \"\\xc2\\x85#\" },\n\t{ M | PCRE2_FIRSTLINE, PCRE2_NEWLINE_ANY, 0, 0 | F_NOMATCH, \"#\", \"\\x85#\" },\n\t{ MU | PCRE2_FIRSTLINE, PCRE2_NEWLINE_ANY, 0, 0 | F_NOMATCH, \"^#\", \"\\xe2\\x80\\xa8#\" },\n\t{ MU | PCRE2_FIRSTLINE, PCRE2_NEWLINE_CRLF, 0, 0 | F_PROPERTY, \"\\\\p{Any}\", \"\\r\\na\" },\n\t{ MU | PCRE2_FIRSTLINE, PCRE2_NEWLINE_CRLF, 0, 0, \".\", \"\\r\" },\n\t{ MU | PCRE2_FIRSTLINE, PCRE2_NEWLINE_CRLF, 0, 0, \"a\", \"\\ra\" },\n\t{ MU | PCRE2_FIRSTLINE, PCRE2_NEWLINE_CRLF, 0, 0 | F_NOMATCH, \"ba\", \"bbb\\r\\nba\" },\n\t{ MU | PCRE2_FIRSTLINE, PCRE2_NEWLINE_CRLF, 0, 0 | F_NOMATCH | F_PROPERTY, \"\\\\p{Any}{4}|a\", \"\\r\\na\" },\n\t{ MU | PCRE2_FIRSTLINE, PCRE2_NEWLINE_CRLF, 0, 1, \".\", \"\\r\\n\" },\n\t{ PCRE2_FIRSTLINE | PCRE2_DOTALL, PCRE2_NEWLINE_LF, 0, 0 | F_NOMATCH, \"ab.\", \"ab\" },\n\t{ MU | PCRE2_FIRSTLINE, A, 0, 1 | F_NOMATCH, \"^[a-d0-9]\", \"\\nxx\\nd\" },\n\t{ PCRE2_FIRSTLINE | PCRE2_DOTALL, PCRE2_NEWLINE_ANY, 0, 0, \"....a\", \"012\\n0a\" },\n\t{ MU | PCRE2_FIRSTLINE, A, 0, 0, \"[aC]\", \"a\" },\n\n\t/* Recurse. */\n\t{ MU, A, 0, 0, \"(a)(?1)\", \"aa\" },\n\t{ MU, A, 0, 0, \"((a))(?1)\", \"aa\" },\n\t{ MU, A, 0, 0, \"(b|a)(?1)\", \"aa\" },\n\t{ MU, A, 0, 0, \"(b|(a))(?1)\", \"aa\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"((a)(b)(?:a*))(?1)\", \"aba\" },\n\t{ MU, A, 0, 0, \"((a)(b)(?:a*))(?1)\", \"abab\" },\n\t{ MU, A, 0, 0, \"((a+)c(?2))b(?1)\", \"aacaabaca\" },\n\t{ MU, A, 0, 0, \"((?2)b|(a)){2}(?1)\", \"aabab\" },\n\t{ MU, A, 0, 0, \"(?1)(a)*+(?2)(b(?1))\", \"aababa\" },\n\t{ MU, A, 0, 0, \"(?1)(((a(*ACCEPT)))b)\", \"axaa\" },\n\t{ MU, A, 0, 0, \"(?1)(?(DEFINE) (((ac(*ACCEPT)))b) )\", \"akaac\" },\n\t{ MU, A, 0, 0, \"(a+)b(?1)b\\\\1\", \"abaaabaaaaa\" },\n\t{ MU, A, 0, 0, \"(?(DEFINE)(aa|a))(?1)ab\", \"aab\" },\n\t{ MU, A, 0, 0, \"(?(DEFINE)(a\\\\Kb))(?1)+ababc\", \"abababxabababc\" },\n\t{ MU, A, 0, 0, \"(a\\\\Kb)(?1)+ababc\", \"abababxababababc\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(a\\\\Kb)(?1)+ababc\", \"abababxababababxc\" },\n\t{ MU, A, 0, 0, \"b|<(?R)*>\", \"<<b>\" },\n\t{ MU, A, 0, 0, \"(a\\\\K){0}(?:(?1)b|ac)\", \"ac\" },\n\t{ MU, A, 0, 0, \"(?(DEFINE)(a(?2)|b)(b(?1)|(a)))(?:(?1)|(?2))m\", \"ababababnababababaam\" },\n\t{ MU, A, 0, 0, \"(a)((?(R)a|b))(?2)\", \"aabbabaa\" },\n\t{ MU, A, 0, 0, \"(a)((?(R2)a|b))(?2)\", \"aabbabaa\" },\n\t{ MU, A, 0, 0, \"(a)((?(R1)a|b))(?2)\", \"ababba\" },\n\t{ MU, A, 0, 0, \"(?(R0)aa|bb(?R))\", \"abba aabb bbaa\" },\n\t{ MU, A, 0, 0, \"((?(R)(?:aaaa|a)|(?:(aaaa)|(a)))+)(?1)$\", \"aaaaaaaaaa aaaa\" },\n\t{ MU, A, 0, 0, \"(?P<Name>a(?(R&Name)a|b))(?1)\", \"aab abb abaa\" },\n\t{ MU, A, 0, 0, \"((?(R)a|(?1)){3})\", \"XaaaaaaaaaX\" },\n\t{ MU, A, 0, 0, \"((?:(?(R)a|(?1))){3})\", \"XaaaaaaaaaX\" },\n\t{ MU, A, 0, 0, \"((?(R)a|(?1)){1,3})aaaaaa\", \"aaaaaaaaXaaaaaaaaa\" },\n\t{ MU, A, 0, 0, \"((?(R)a|(?1)){1,3}?)M\", \"aaaM\" },\n\t{ MU, A, 0, 0, \"((.)(?:.|\\\\2(?1))){0}#(?1)#\", \"#aabbccdde# #aabbccddee#\" },\n\t{ MU, A, 0, 0, \"((.)(?:\\\\2|\\\\2{4}b)){0}#(?:(?1))+#\", \"#aaaab# #aaaaab#\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?1)$((.|\\\\2xx){1,2})\", \"abc\" },\n\n\t/* 16 bit specific tests. */\n\t{ CM, A, 0, 0 | F_FORCECONV, \"\\xc3\\xa1\", \"\\xc3\\x81\\xc3\\xa1\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"\\xe1\\xbd\\xb8\", \"\\xe1\\xbf\\xb8\\xe1\\xbd\\xb8\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"[\\xc3\\xa1]\", \"\\xc3\\x81\\xc3\\xa1\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"[\\xe1\\xbd\\xb8]\", \"\\xe1\\xbf\\xb8\\xe1\\xbd\\xb8\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"[a-\\xed\\xb0\\x80]\", \"A\" },\n\t{ CM, A, 0, 0 | F_NO8 | F_FORCECONV, \"[a-\\\\x{dc00}]\", \"B\" },\n\t{ CM, A, 0, 0 | F_NO8 | F_NOMATCH | F_FORCECONV, \"[b-\\\\x{dc00}]\", \"a\" },\n\t{ CM, A, 0, 0 | F_NO8 | F_FORCECONV, \"\\xed\\xa0\\x80\\\\x{d800}\\xed\\xb0\\x80\\\\x{dc00}\", \"\\xed\\xa0\\x80\\xed\\xa0\\x80\\xed\\xb0\\x80\\xed\\xb0\\x80\" },\n\t{ CM, A, 0, 0 | F_NO8 | F_FORCECONV, \"[\\xed\\xa0\\x80\\\\x{d800}]{1,2}?[\\xed\\xb0\\x80\\\\x{dc00}]{1,2}?#\", \"\\xed\\xa0\\x80\\xed\\xa0\\x80\\xed\\xb0\\x80\\xed\\xb0\\x80#\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"[\\xed\\xa0\\x80\\xed\\xb0\\x80#]{0,3}(?<=\\xed\\xb0\\x80.)\", \"\\xed\\xa0\\x80#\\xed\\xa0\\x80##\\xed\\xb0\\x80\\xed\\xa0\\x80\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"[\\xed\\xa0\\x80-\\xed\\xb3\\xbf]\", \"\\xed\\x9f\\xbf\\xed\\xa0\\x83\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"[\\xed\\xa0\\x80-\\xed\\xb3\\xbf]\", \"\\xed\\xb4\\x80\\xed\\xb3\\xb0\" },\n\t{ CM, A, 0, 0 | F_NO8 | F_FORCECONV, \"[\\\\x{d800}-\\\\x{dcff}]\", \"\\xed\\x9f\\xbf\\xed\\xa0\\x83\" },\n\t{ CM, A, 0, 0 | F_NO8 | F_FORCECONV, \"[\\\\x{d800}-\\\\x{dcff}]\", \"\\xed\\xb4\\x80\\xed\\xb3\\xb0\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"[\\xed\\xa0\\x80-\\xef\\xbf\\xbf]+[\\x1-\\xed\\xb0\\x80]+#\", \"\\xed\\xa0\\x85\\xc3\\x81\\xed\\xa0\\x85\\xef\\xbf\\xb0\\xc2\\x85\\xed\\xa9\\x89#\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"[\\xed\\xa0\\x80][\\xed\\xb0\\x80]{2,}\", \"\\xed\\xa0\\x80\\xed\\xb0\\x80\\xed\\xa0\\x80\\xed\\xb0\\x80\\xed\\xb0\\x80\\xed\\xb0\\x80\" },\n\t{ M, A, 0, 0 | F_FORCECONV, \"[^\\xed\\xb0\\x80]{3,}?\", \"##\\xed\\xb0\\x80#\\xed\\xb0\\x80#\\xc3\\x89#\\xed\\xb0\\x80\" },\n\t{ M, A, 0, 0 | F_NO8 | F_FORCECONV, \"[^\\\\x{dc00}]{3,}?\", \"##\\xed\\xb0\\x80#\\xed\\xb0\\x80#\\xc3\\x89#\\xed\\xb0\\x80\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \".\\\\B.\", \"\\xed\\xa0\\x80\\xed\\xb0\\x80\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"\\\\D+(?:\\\\d+|.)\\\\S+(?:\\\\s+|.)\\\\W+(?:\\\\w+|.)\\xed\\xa0\\x80\\xed\\xa0\\x80\", \"\\xed\\xa0\\x80\\xed\\xa0\\x80\\xed\\xa0\\x80\\xed\\xa0\\x80\\xed\\xa0\\x80\\xed\\xa0\\x80\\xed\\xa0\\x80\\xed\\xa0\\x80\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"\\\\d*\\\\s*\\\\w*\\xed\\xa0\\x80\\xed\\xa0\\x80\", \"\\xed\\xa0\\x80\\xed\\xa0\\x80\" },\n\t{ CM, A, 0, 0 | F_FORCECONV | F_NOMATCH, \"\\\\d*?\\\\D*?\\\\s*?\\\\S*?\\\\w*?\\\\W*?##\", \"\\xed\\xa0\\x80\\xed\\xa0\\x80\\xed\\xa0\\x80\\xed\\xa0\\x80#\" },\n\t{ CM | PCRE2_EXTENDED, A, 0, 0 | F_FORCECONV, \"\\xed\\xa0\\x80 \\xed\\xb0\\x80 !\", \"\\xed\\xa0\\x80\\xed\\xb0\\x80!\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"\\xed\\xa0\\x80+#[^#]+\\xed\\xa0\\x80\", \"\\xed\\xa0\\x80#a\\xed\\xa0\\x80\" },\n\t{ CM, A, 0, 0 | F_FORCECONV, \"(\\xed\\xa0\\x80+)#\\\\1\", \"\\xed\\xa0\\x80\\xed\\xa0\\x80#\\xed\\xa0\\x80\\xed\\xa0\\x80\" },\n\t{ M, PCRE2_NEWLINE_ANY, 0, 0 | F_NO8 | F_FORCECONV, \"^-\", \"a--\\xe2\\x80\\xa8--\" },\n\t{ 0, BSR(PCRE2_BSR_UNICODE), 0, 0 | F_NO8 | F_FORCECONV, \"\\\\R\", \"ab\\xe2\\x80\\xa8\" },\n\t{ 0, 0, 0, 0 | F_NO8 | F_FORCECONV, \"\\\\v\", \"ab\\xe2\\x80\\xa9\" },\n\t{ 0, 0, 0, 0 | F_NO8 | F_FORCECONV, \"\\\\h\", \"ab\\xe1\\xa0\\x8e\" },\n\t{ 0, 0, 0, 0 | F_NO8 | F_FORCECONV, \"\\\\v+?\\\\V+?#\", \"\\xe2\\x80\\xa9\\xe2\\x80\\xa9\\xef\\xbf\\xbf\\xef\\xbf\\xbf#\" },\n\t{ 0, 0, 0, 0 | F_NO8 | F_FORCECONV, \"\\\\h+?\\\\H+?#\", \"\\xe1\\xa0\\x8e\\xe1\\xa0\\x8e\\xef\\xbf\\xbf\\xef\\xbf\\xbf#\" },\n\n\t/* Partial matching. */\n\t{ MU, A, PCRE2_PARTIAL_SOFT, 0, \"ab\", \"a\" },\n\t{ MU, A, PCRE2_PARTIAL_SOFT, 0, \"ab|a\", \"a\" },\n\t{ MU, A, PCRE2_PARTIAL_HARD, 0, \"ab|a\", \"a\" },\n\t{ MU, A, PCRE2_PARTIAL_SOFT, 0, \"\\\\b#\", \"a\" },\n\t{ MU, A, PCRE2_PARTIAL_SOFT, 0, \"(?<=a)b\", \"a\" },\n\t{ MU, A, PCRE2_PARTIAL_SOFT, 0, \"abc|(?<=xxa)bc\", \"xxab\" },\n\t{ MU, A, PCRE2_PARTIAL_SOFT, 0, \"a\\\\B\", \"a\" },\n\t{ MU, A, PCRE2_PARTIAL_HARD, 0, \"a\\\\b\", \"a\" },\n\t{ M | PCRE2_DUPNAMES, A, PCRE2_PARTIAL_HARD, 0, \"^(?P<NAME>..)(?P<NAME>..)\\\\k<NAME>{2,4}\", \"AaAAAaAaAaA\" },\n\t{ M | PCRE2_DUPNAMES, A, PCRE2_PARTIAL_HARD, 0, \"^(?P<NAME>..)(?P<NAME>..)\\\\k<NAME>{2,4}\", \"AaAAAaAaAaa\" },\n\n\t/* (*MARK) verb. */\n\t{ MU, A, 0, 0, \"a(*MARK:aa)a\", \"ababaa\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"a(*:aa)a\", \"abab\" },\n\t{ MU, A, 0, 0, \"a(*:aa)(b(*:bb)b|bc)\", \"abc\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"a(*:1)x|b(*:2)y\", \"abc\" },\n\t{ MU, A, 0, 0, \"(?>a(*:aa))b|ac\", \"ac\" },\n\t{ MU, A, 0, 0, \"(?(DEFINE)(a(*:aa)))(?1)\", \"a\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?(DEFINE)((a)(*:aa)))(?1)b\", \"aa\" },\n\t{ MU, A, 0, 0, \"(?(DEFINE)(a(*:aa)))a(?1)b|aac\", \"aac\" },\n\t{ MU, A, 0, 0, \"(a(*:aa)){0}(?:b(?1)b|c)+c\", \"babbab cc\" },\n\t{ MU, A, 0, 0, \"(a(*:aa)){0}(?:b(?1)b)+\", \"babba\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(a(*:aa)){0}(?:b(?1)b)+\", \"ba\" },\n\t{ MU, A, 0, 0, \"(a\\\\K(*:aa)){0}(?:b(?1)b|c)+c\", \"babbab cc\" },\n\t{ MU, A, 0, 0, \"(a\\\\K(*:aa)){0}(?:b(?1)b)+\", \"babba\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(a\\\\K(*:aa)){0}(?:b(?1)b)+\", \"ba\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(*:mark)m\", \"a\" },\n\n\t/* (*COMMIT) verb. */\n\t{ MU, A, 0, 0 | F_NOMATCH, \"a(*COMMIT)b\", \"ac\" },\n\t{ MU, A, 0, 0, \"aa(*COMMIT)b\", \"xaxaab\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"a(*COMMIT)(*:msg)b|ac\", \"ac\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(a(*COMMIT)b)++\", \"abac\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"((a)(*COMMIT)b)++\", \"abac\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?=a(*COMMIT)b)ab|ad\", \"ad\" },\n\n\t/* (*PRUNE) verb. */\n\t{ MU, A, 0, 0, \"aa\\\\K(*PRUNE)b\", \"aaab\" },\n\t{ MU, A, 0, 0, \"aa(*PRUNE:bb)b|a\", \"aa\" },\n\t{ MU, A, 0, 0, \"(a)(a)(*PRUNE)b|(a)\", \"aa\" },\n\t{ MU, A, 0, 0, \"(a)(a)(a)(a)(a)(a)(a)(a)(*PRUNE)b|(a)\", \"aaaaaaaa\" },\n\t{ MU, A, PCRE2_PARTIAL_SOFT, 0, \"a(*PRUNE)a|\", \"a\" },\n\t{ MU, A, PCRE2_PARTIAL_SOFT, 0, \"a(*PRUNE)a|m\", \"a\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?=a(*PRUNE)b)ab|ad\", \"ad\" },\n\t{ MU, A, 0, 0, \"a(*COMMIT)(*PRUNE)d|bc\", \"abc\" },\n\t{ MU, A, 0, 0, \"(?=a(*COMMIT)b)a(*PRUNE)c|bc\", \"abc\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(*COMMIT)(?=a(*COMMIT)b)a(*PRUNE)c|bc\", \"abc\" },\n\t{ MU, A, 0, 0, \"(?=(a)(*COMMIT)b)a(*PRUNE)c|bc\", \"abc\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(*COMMIT)(?=(a)(*COMMIT)b)a(*PRUNE)c|bc\", \"abc\" },\n\t{ MU, A, 0, 0, \"(a(*COMMIT)b){0}a(?1)(*PRUNE)c|bc\", \"abc\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(a(*COMMIT)b){0}a(*COMMIT)(?1)(*PRUNE)c|bc\", \"abc\" },\n\t{ MU, A, 0, 0, \"(a(*COMMIT)b)++(*PRUNE)d|c\", \"ababc\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(*COMMIT)(a(*COMMIT)b)++(*PRUNE)d|c\", \"ababc\" },\n\t{ MU, A, 0, 0, \"((a)(*COMMIT)b)++(*PRUNE)d|c\", \"ababc\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(*COMMIT)((a)(*COMMIT)b)++(*PRUNE)d|c\", \"ababc\" },\n\t{ MU, A, 0, 0, \"(?>a(*COMMIT)b)*abab(*PRUNE)d|ba\", \"ababab\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(*COMMIT)(?>a(*COMMIT)b)*abab(*PRUNE)d|ba\", \"ababab\" },\n\t{ MU, A, 0, 0, \"(?>a(*COMMIT)b)+abab(*PRUNE)d|ba\", \"ababab\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(*COMMIT)(?>a(*COMMIT)b)+abab(*PRUNE)d|ba\", \"ababab\" },\n\t{ MU, A, 0, 0, \"(?>a(*COMMIT)b)?ab(*PRUNE)d|ba\", \"aba\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(*COMMIT)(?>a(*COMMIT)b)?ab(*PRUNE)d|ba\", \"aba\" },\n\t{ MU, A, 0, 0, \"(?>a(*COMMIT)b)*?n(*PRUNE)d|ba\", \"abababn\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(*COMMIT)(?>a(*COMMIT)b)*?n(*PRUNE)d|ba\", \"abababn\" },\n\t{ MU, A, 0, 0, \"(?>a(*COMMIT)b)+?n(*PRUNE)d|ba\", \"abababn\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(*COMMIT)(?>a(*COMMIT)b)+?n(*PRUNE)d|ba\", \"abababn\" },\n\t{ MU, A, 0, 0, \"(?>a(*COMMIT)b)??n(*PRUNE)d|bn\", \"abn\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(*COMMIT)(?>a(*COMMIT)b)??n(*PRUNE)d|bn\", \"abn\" },\n\n\t/* (*SKIP) verb. */\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?=a(*SKIP)b)ab|ad\", \"ad\" },\n\t{ MU, A, 0, 0, \"(\\\\w+(*SKIP)#)\", \"abcd,xyz#,\" },\n\t{ MU, A, 0, 0, \"\\\\w+(*SKIP)#|mm\", \"abcd,xyz#,\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"b+(?<=(*SKIP)#c)|b+\", \"#bbb\" },\n\n\t/* (*THEN) verb. */\n\t{ MU, A, 0, 0, \"((?:a(*THEN)|aab)(*THEN)c|a+)+m\", \"aabcaabcaabcaabcnacm\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"((?:a(*THEN)|aab)(*THEN)c|a+)+m\", \"aabcm\" },\n\t{ MU, A, 0, 0, \"((?:a(*THEN)|aab)c|a+)+m\", \"aabcaabcnmaabcaabcm\" },\n\t{ MU, A, 0, 0, \"((?:a|aab)(*THEN)c|a+)+m\", \"aam\" },\n\t{ MU, A, 0, 0, \"((?:a(*COMMIT)|aab)(*THEN)c|a+)+m\", \"aam\" },\n\t{ MU, A, 0, 0, \"(?(?=a(*THEN)b)ab|ad)\", \"ad\" },\n\t{ MU, A, 0, 0, \"(?(?!a(*THEN)b)ad|add)\", \"add\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?(?=a)a(*THEN)b|ad)\", \"ad\" },\n\t{ MU, A, 0, 0, \"(?!(?(?=a)ab|b(*THEN)d))bn|bnn\", \"bnn\" },\n\t{ MU, A, 0, 0, \"(?=(*THEN: ))* \", \" \" },\n\t{ MU, A, 0, 0, \"a(*THEN)(?R) |\", \"a\" },\n\t{ MU, A, 0, 0 | F_NOMATCH, \"(?<!(*THEN)a|(*THEN)b|(*THEN)ab?|(*THEN)ba?|)\", \"c\" },\n\n\t/* Recurse and control verbs. */\n\t{ MU, A, 0, 0, \"(a(*ACCEPT)b){0}a(?1)b\", \"aacaabb\" },\n\t{ MU, A, 0, 0, \"((a)\\\\2(*ACCEPT)b){0}a(?1)b\", \"aaacaaabb\" },\n\t{ MU, A, 0, 0, \"((ab|a(*ACCEPT)x)+|ababababax){0}_(?1)_\", \"_ababababax_ _ababababa_\" },\n\t{ MU, A, 0, 0, \"((.)(?:A(*ACCEPT)|(?1)\\\\2)){0}_(?1)_\", \"_bcdaAdcb_bcdaAdcb_\" },\n\t{ MU, A, 0, 0, \"((*MARK:m)(?:a|a(*COMMIT)b|aa)){0}_(?1)_\", \"_ab_\" },\n\t{ MU, A, 0, 0, \"((*MARK:m)(?:a|a(*COMMIT)b|aa)){0}_(?1)_|(_aa_)\", \"_aa_\" },\n\t{ MU, A, 0, 0, \"(a(*COMMIT)(?:b|bb)|c(*ACCEPT)d|dd){0}_(?1)+_\", \"_ax_ _cd_ _abbb_ _abcd_ _abbcdd_\" },\n\t{ MU, A, 0, 0, \"((.)(?:.|(*COMMIT)\\\\2{3}(*ACCEPT).*|.*)){0}_(?1){0,4}_\", \"_aaaabbbbccccddd_ _aaaabbbbccccdddd_\" },\n\n#ifdef SUPPORT_UNICODE\n\t/* Script runs and iterations. */\n\t{ MU, A, 0, 0, \"!(*sr:\\\\w\\\\w|\\\\w\\\\w\\\\w)*#\", \"!abcdefghijklmno!abcdefghijklmno!abcdef#\" },\n\t{ MU, A, 0, 0, \"!(*sr:\\\\w\\\\w|\\\\w\\\\w\\\\w)+#\", \"!abcdefghijklmno!abcdefghijklmno!abcdef#\" },\n\t{ MU, A, 0, 0, \"!(*sr:\\\\w\\\\w|\\\\w\\\\w\\\\w)*?#\", \"!abcdefghijklmno!abcdefghijklmno!abcdef#\" },\n\t{ MU, A, 0, 0, \"!(*sr:\\\\w\\\\w|\\\\w\\\\w\\\\w)+?#\", \"!abcdefghijklmno!abcdefghijklmno!abcdef#\" },\n\t{ MU, A, 0, 0, \"!(*sr:\\\\w\\\\w|\\\\w\\\\w\\\\w)*+#\", \"!abcdefghijklmno!abcdefghijklmno!abcdef#\" },\n\t{ MU, A, 0, 0, \"!(*sr:\\\\w\\\\w|\\\\w\\\\w\\\\w)++#\", \"!abcdefghijklmno!abcdefghijklmno!abcdef#\" },\n\t{ MU, A, 0, 0, \"!(*sr:\\\\w\\\\w|\\\\w\\\\w\\\\w)?#\", \"!ab!abc!ab!ab#\" },\n\t{ MU, A, 0, 0, \"!(*sr:\\\\w\\\\w|\\\\w\\\\w\\\\w)??#\", \"!ab!abc!ab!ab#\" },\n#endif /* SUPPORT_UNICODE */\n\n\t/* Deep recursion. */\n\t{ MU, A, 0, 0, \"((((?:(?:(?:\\\\w)+)?)*|(?>\\\\w)+?)+|(?>\\\\w)?\\?)*)?\\\\s\", \"aaaaa+ \" },\n\t{ MU, A, 0, 0, \"(?:((?:(?:(?:\\\\w*?)+)??|(?>\\\\w)?|\\\\w*+)*)+)+?\\\\s\", \"aa+ \" },\n\t{ MU, A, 0, 0, \"((a?)+)+b\", \"aaaaaaaaaaaa b\" },\n\n\t/* Deep recursion: Stack limit reached. */\n\t{ M, A, 0, 0 | F_NOMATCH, \"a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aaaaaaaaaaaaaaaaaaaaaaa\", \"aaaaaaaaaaaaaaaaaaaaaaa\" },\n\t{ M, A, 0, 0 | F_NOMATCH, \"(?:a+)+b\", \"aaaaaaaaaaaaaaaaaaaaaaaa b\" },\n\t{ M, A, 0, 0 | F_NOMATCH, \"(?:a+?)+?b\", \"aaaaaaaaaaaaaaaaaaaaaaaa b\" },\n\t{ M, A, 0, 0 | F_NOMATCH, \"(?:a*)*b\", \"aaaaaaaaaaaaaaaaaaaaaaaa b\" },\n\t{ M, A, 0, 0 | F_NOMATCH, \"(?:a*?)*?b\", \"aaaaaaaaaaaaaaaaaaaaaaaa b\" },\n\n\t{ 0, 0, 0, 0, NULL, NULL }\n};\n\n#ifdef SUPPORT_PCRE2_8\nstatic pcre2_jit_stack_8* callback8(void *arg)\n{\n\treturn (pcre2_jit_stack_8 *)arg;\n}\n#endif\n\n#ifdef SUPPORT_PCRE2_16\nstatic pcre2_jit_stack_16* callback16(void *arg)\n{\n\treturn (pcre2_jit_stack_16 *)arg;\n}\n#endif\n\n#ifdef SUPPORT_PCRE2_32\nstatic pcre2_jit_stack_32* callback32(void *arg)\n{\n\treturn (pcre2_jit_stack_32 *)arg;\n}\n#endif\n\n#ifdef SUPPORT_PCRE2_8\nstatic pcre2_jit_stack_8 *stack8;\n\nstatic pcre2_jit_stack_8 *getstack8(void)\n{\n\tif (!stack8)\n\t\tstack8 = pcre2_jit_stack_create_8(1, 1024 * 1024, NULL);\n\treturn stack8;\n}\n\nstatic void setstack8(pcre2_match_context_8 *mcontext)\n{\n\tif (!mcontext) {\n\t\tif (stack8)\n\t\t\tpcre2_jit_stack_free_8(stack8);\n\t\tstack8 = NULL;\n\t\treturn;\n\t}\n\n\tpcre2_jit_stack_assign_8(mcontext, callback8, getstack8());\n}\n#endif /* SUPPORT_PCRE2_8 */\n\n#ifdef SUPPORT_PCRE2_16\nstatic pcre2_jit_stack_16 *stack16;\n\nstatic pcre2_jit_stack_16 *getstack16(void)\n{\n\tif (!stack16)\n\t\tstack16 = pcre2_jit_stack_create_16(1, 1024 * 1024, NULL);\n\treturn stack16;\n}\n\nstatic void setstack16(pcre2_match_context_16 *mcontext)\n{\n\tif (!mcontext) {\n\t\tif (stack16)\n\t\t\tpcre2_jit_stack_free_16(stack16);\n\t\tstack16 = NULL;\n\t\treturn;\n\t}\n\n\tpcre2_jit_stack_assign_16(mcontext, callback16, getstack16());\n}\n#endif /* SUPPORT_PCRE2_16 */\n\n#ifdef SUPPORT_PCRE2_32\nstatic pcre2_jit_stack_32 *stack32;\n\nstatic pcre2_jit_stack_32 *getstack32(void)\n{\n\tif (!stack32)\n\t\tstack32 = pcre2_jit_stack_create_32(1, 1024 * 1024, NULL);\n\treturn stack32;\n}\n\nstatic void setstack32(pcre2_match_context_32 *mcontext)\n{\n\tif (!mcontext) {\n\t\tif (stack32)\n\t\t\tpcre2_jit_stack_free_32(stack32);\n\t\tstack32 = NULL;\n\t\treturn;\n\t}\n\n\tpcre2_jit_stack_assign_32(mcontext, callback32, getstack32());\n}\n#endif /* SUPPORT_PCRE2_32 */\n\n#ifdef SUPPORT_PCRE2_16\n\nstatic int convert_utf8_to_utf16(PCRE2_SPTR8 input, PCRE2_UCHAR16 *output, int *offsetmap, int max_length)\n{\n\tPCRE2_SPTR8 iptr = input;\n\tPCRE2_UCHAR16 *optr = output;\n\tunsigned int c;\n\n\tif (max_length == 0)\n\t\treturn 0;\n\n\twhile (*iptr && max_length > 1) {\n\t\tc = 0;\n\t\tif (offsetmap)\n\t\t\t*offsetmap++ = (int)(iptr - (unsigned char*)input);\n\n\t\tif (*iptr < 0xc0)\n\t\t\tc = *iptr++;\n\t\telse if (!(*iptr & 0x20)) {\n\t\t\tc = ((iptr[0] & 0x1f) << 6) | (iptr[1] & 0x3f);\n\t\t\tiptr += 2;\n\t\t} else if (!(*iptr & 0x10)) {\n\t\t\tc = ((iptr[0] & 0x0f) << 12) | ((iptr[1] & 0x3f) << 6) | (iptr[2] & 0x3f);\n\t\t\tiptr += 3;\n\t\t} else if (!(*iptr & 0x08)) {\n\t\t\tc = ((iptr[0] & 0x07) << 18) | ((iptr[1] & 0x3f) << 12) | ((iptr[2] & 0x3f) << 6) | (iptr[3] & 0x3f);\n\t\t\tiptr += 4;\n\t\t}\n\n\t\tif (c < 65536) {\n\t\t\t*optr++ = c;\n\t\t\tmax_length--;\n\t\t} else if (max_length <= 2) {\n\t\t\t*optr = '\\0';\n\t\t\treturn (int)(optr - output);\n\t\t} else {\n\t\t\tc -= 0x10000;\n\t\t\t*optr++ = 0xd800 | ((c >> 10) & 0x3ff);\n\t\t\t*optr++ = 0xdc00 | (c & 0x3ff);\n\t\t\tmax_length -= 2;\n\t\t\tif (offsetmap)\n\t\t\t\toffsetmap++;\n\t\t}\n\t}\n\tif (offsetmap)\n\t\t*offsetmap = (int)(iptr - (unsigned char*)input);\n\t*optr = '\\0';\n\treturn (int)(optr - output);\n}\n\nstatic int copy_char8_to_char16(PCRE2_SPTR8 input, PCRE2_UCHAR16 *output, int max_length)\n{\n\tPCRE2_SPTR8 iptr = input;\n\tPCRE2_UCHAR16 *optr = output;\n\n\tif (max_length == 0)\n\t\treturn 0;\n\n\twhile (*iptr && max_length > 1) {\n\t\t*optr++ = *iptr++;\n\t\tmax_length--;\n\t}\n\t*optr = '\\0';\n\treturn (int)(optr - output);\n}\n\n#define REGTEST_MAX_LENGTH16 4096\nstatic PCRE2_UCHAR16 regtest_buf16[REGTEST_MAX_LENGTH16];\nstatic int regtest_offsetmap16[REGTEST_MAX_LENGTH16];\n\n#endif /* SUPPORT_PCRE2_16 */\n\n#ifdef SUPPORT_PCRE2_32\n\nstatic int convert_utf8_to_utf32(PCRE2_SPTR8 input, PCRE2_UCHAR32 *output, int *offsetmap, int max_length)\n{\n\tPCRE2_SPTR8 iptr = input;\n\tPCRE2_UCHAR32 *optr = output;\n\tunsigned int c;\n\n\tif (max_length == 0)\n\t\treturn 0;\n\n\twhile (*iptr && max_length > 1) {\n\t\tc = 0;\n\t\tif (offsetmap)\n\t\t\t*offsetmap++ = (int)(iptr - (unsigned char*)input);\n\n\t\tif (*iptr < 0xc0)\n\t\t\tc = *iptr++;\n\t\telse if (!(*iptr & 0x20)) {\n\t\t\tc = ((iptr[0] & 0x1f) << 6) | (iptr[1] & 0x3f);\n\t\t\tiptr += 2;\n\t\t} else if (!(*iptr & 0x10)) {\n\t\t\tc = ((iptr[0] & 0x0f) << 12) | ((iptr[1] & 0x3f) << 6) | (iptr[2] & 0x3f);\n\t\t\tiptr += 3;\n\t\t} else if (!(*iptr & 0x08)) {\n\t\t\tc = ((iptr[0] & 0x07) << 18) | ((iptr[1] & 0x3f) << 12) | ((iptr[2] & 0x3f) << 6) | (iptr[3] & 0x3f);\n\t\t\tiptr += 4;\n\t\t}\n\n\t\t*optr++ = c;\n\t\tmax_length--;\n\t}\n\tif (offsetmap)\n\t\t*offsetmap = (int)(iptr - (unsigned char*)input);\n\t*optr = 0;\n\treturn (int)(optr - output);\n}\n\nstatic int copy_char8_to_char32(PCRE2_SPTR8 input, PCRE2_UCHAR32 *output, int max_length)\n{\n\tPCRE2_SPTR8 iptr = input;\n\tPCRE2_UCHAR32 *optr = output;\n\n\tif (max_length == 0)\n\t\treturn 0;\n\n\twhile (*iptr && max_length > 1) {\n\t\t*optr++ = *iptr++;\n\t\tmax_length--;\n\t}\n\t*optr = '\\0';\n\treturn (int)(optr - output);\n}\n\n#define REGTEST_MAX_LENGTH32 4096\nstatic PCRE2_UCHAR32 regtest_buf32[REGTEST_MAX_LENGTH32];\nstatic int regtest_offsetmap32[REGTEST_MAX_LENGTH32];\n\n#endif /* SUPPORT_PCRE2_32 */\n\nstatic int check_ascii(const char *input)\n{\n\tconst unsigned char *ptr = (unsigned char *)input;\n\twhile (*ptr) {\n\t\tif (*ptr > 127)\n\t\t\treturn 0;\n\t\tptr++;\n\t}\n\treturn 1;\n}\n\n#define OVECTOR_SIZE 15\n\nstatic int regression_tests(void)\n{\n\tstruct regression_test_case *current = regression_test_cases;\n\tint error;\n\tPCRE2_SIZE err_offs;\n\tint is_successful;\n\tint is_ascii;\n\tint total = 0;\n\tint successful = 0;\n\tint successful_row = 0;\n\tint counter = 0;\n\tint jit_compile_mode;\n\tint utf = 0;\n\tuint32_t disabled_options = 0;\n\tint i;\n#ifdef SUPPORT_PCRE2_8\n\tpcre2_code_8 *re8;\n\tpcre2_compile_context_8 *ccontext8;\n\tpcre2_match_data_8 *mdata8_1;\n\tpcre2_match_data_8 *mdata8_2;\n\tpcre2_match_context_8 *mcontext8;\n\tPCRE2_SIZE *ovector8_1 = NULL;\n\tPCRE2_SIZE *ovector8_2 = NULL;\n\tint return_value8[2];\n#endif\n#ifdef SUPPORT_PCRE2_16\n\tpcre2_code_16 *re16;\n\tpcre2_compile_context_16 *ccontext16;\n\tpcre2_match_data_16 *mdata16_1;\n\tpcre2_match_data_16 *mdata16_2;\n\tpcre2_match_context_16 *mcontext16;\n\tPCRE2_SIZE *ovector16_1 = NULL;\n\tPCRE2_SIZE *ovector16_2 = NULL;\n\tint return_value16[2];\n\tint length16;\n#endif\n#ifdef SUPPORT_PCRE2_32\n\tpcre2_code_32 *re32;\n\tpcre2_compile_context_32 *ccontext32;\n\tpcre2_match_data_32 *mdata32_1;\n\tpcre2_match_data_32 *mdata32_2;\n\tpcre2_match_context_32 *mcontext32;\n\tPCRE2_SIZE *ovector32_1 = NULL;\n\tPCRE2_SIZE *ovector32_2 = NULL;\n\tint return_value32[2];\n\tint length32;\n#endif\n\n#if defined SUPPORT_PCRE2_8\n\tPCRE2_UCHAR8 cpu_info[128];\n#elif defined SUPPORT_PCRE2_16\n\tPCRE2_UCHAR16 cpu_info[128];\n#elif defined SUPPORT_PCRE2_32\n\tPCRE2_UCHAR32 cpu_info[128];\n#endif\n#if defined SUPPORT_UNICODE && ((defined(SUPPORT_PCRE2_8) + defined(SUPPORT_PCRE2_16) + defined(SUPPORT_PCRE2_32)) >= 2)\n\tint return_value;\n#endif\n\n\t/* This test compares the behaviour of interpreter and JIT. Although disabling\n\tutf or ucp may make tests fail, if the pcre2_match result is the SAME, it is\n\tstill considered successful from pcre2_jit_test point of view. */\n\n#if defined SUPPORT_PCRE2_8\n\tpcre2_config_8(PCRE2_CONFIG_JITTARGET, &cpu_info);\n#elif defined SUPPORT_PCRE2_16\n\tpcre2_config_16(PCRE2_CONFIG_JITTARGET, &cpu_info);\n#elif defined SUPPORT_PCRE2_32\n\tpcre2_config_32(PCRE2_CONFIG_JITTARGET, &cpu_info);\n#endif\n\n\tprintf(\"Running JIT regression tests\\n\");\n\tprintf(\"  target CPU of SLJIT compiler: \");\n\tfor (i = 0; cpu_info[i]; i++)\n\t\tprintf(\"%c\", (char)(cpu_info[i]));\n\tprintf(\"\\n\");\n\n#if defined SUPPORT_PCRE2_8\n\tpcre2_config_8(PCRE2_CONFIG_UNICODE, &utf);\n#elif defined SUPPORT_PCRE2_16\n\tpcre2_config_16(PCRE2_CONFIG_UNICODE, &utf);\n#elif defined SUPPORT_PCRE2_32\n\tpcre2_config_32(PCRE2_CONFIG_UNICODE, &utf);\n#endif\n\n\tif (!utf)\n\t\tdisabled_options |= PCRE2_UTF;\n#ifdef SUPPORT_PCRE2_8\n\tprintf(\"  in  8 bit mode with UTF-8  %s:\\n\", utf ? \"enabled\" : \"disabled\");\n#endif\n#ifdef SUPPORT_PCRE2_16\n\tprintf(\"  in 16 bit mode with UTF-16 %s:\\n\", utf ? \"enabled\" : \"disabled\");\n#endif\n#ifdef SUPPORT_PCRE2_32\n\tprintf(\"  in 32 bit mode with UTF-32 %s:\\n\", utf ? \"enabled\" : \"disabled\");\n#endif\n\n\twhile (current->pattern) {\n\t\t/* printf(\"\\nPattern: %s :\\n\", current->pattern); */\n\t\ttotal++;\n\t\tis_ascii = 0;\n\t\tif (!(current->start_offset & F_PROPERTY))\n\t\t\tis_ascii = check_ascii(current->pattern) && check_ascii(current->input);\n\n\t\tif (current->match_options & PCRE2_PARTIAL_SOFT)\n\t\t\tjit_compile_mode = PCRE2_JIT_PARTIAL_SOFT;\n\t\telse if (current->match_options & PCRE2_PARTIAL_HARD)\n\t\t\tjit_compile_mode = PCRE2_JIT_PARTIAL_HARD;\n\t\telse\n\t\t\tjit_compile_mode = PCRE2_JIT_COMPLETE;\n\t\terror = 0;\n#ifdef SUPPORT_PCRE2_8\n\t\tre8 = NULL;\n\t\tccontext8 = pcre2_compile_context_create_8(NULL);\n\t\tif (ccontext8) {\n\t\t\tif (GET_NEWLINE(current->newline))\n\t\t\t\tpcre2_set_newline_8(ccontext8, GET_NEWLINE(current->newline));\n\t\t\tif (GET_BSR(current->newline))\n\t\t\t\tpcre2_set_bsr_8(ccontext8, GET_BSR(current->newline));\n\n\t\t\tif (!(current->start_offset & F_NO8)) {\n\t\t\t\tre8 = pcre2_compile_8((PCRE2_SPTR8)current->pattern, PCRE2_ZERO_TERMINATED,\n\t\t\t\t\tcurrent->compile_options & ~disabled_options,\n\t\t\t\t\t&error, &err_offs, ccontext8);\n\n\t\t\t\tif (!re8 && (utf || is_ascii))\n\t\t\t\t\tprintf(\"\\n8 bit: Cannot compile pattern \\\"%s\\\": %d\\n\", current->pattern, error);\n\t\t\t}\n\t\t\tpcre2_compile_context_free_8(ccontext8);\n\t\t}\n\t\telse\n\t\t\tprintf(\"\\n8 bit: Cannot allocate compile context\\n\");\n#endif\n#ifdef SUPPORT_PCRE2_16\n\t\tif ((current->compile_options & PCRE2_UTF) || (current->start_offset & F_FORCECONV))\n\t\t\tconvert_utf8_to_utf16((PCRE2_SPTR8)current->pattern, regtest_buf16, NULL, REGTEST_MAX_LENGTH16);\n\t\telse\n\t\t\tcopy_char8_to_char16((PCRE2_SPTR8)current->pattern, regtest_buf16, REGTEST_MAX_LENGTH16);\n\n\t\tre16 = NULL;\n\t\tccontext16 = pcre2_compile_context_create_16(NULL);\n\t\tif (ccontext16) {\n\t\t\tif (GET_NEWLINE(current->newline))\n\t\t\t\tpcre2_set_newline_16(ccontext16, GET_NEWLINE(current->newline));\n\t\t\tif (GET_BSR(current->newline))\n\t\t\t\tpcre2_set_bsr_16(ccontext16, GET_BSR(current->newline));\n\n\t\t\tif (!(current->start_offset & F_NO16)) {\n\t\t\t\tre16 = pcre2_compile_16(regtest_buf16, PCRE2_ZERO_TERMINATED,\n\t\t\t\t\tcurrent->compile_options & ~disabled_options,\n\t\t\t\t\t&error, &err_offs, ccontext16);\n\n\t\t\t\tif (!re16 && (utf || is_ascii))\n\t\t\t\t\tprintf(\"\\n16 bit: Cannot compile pattern \\\"%s\\\": %d\\n\", current->pattern, error);\n\t\t\t}\n\t\t\tpcre2_compile_context_free_16(ccontext16);\n\t\t}\n\t\telse\n\t\t\tprintf(\"\\n16 bit: Cannot allocate compile context\\n\");\n#endif\n#ifdef SUPPORT_PCRE2_32\n\t\tif ((current->compile_options & PCRE2_UTF) || (current->start_offset & F_FORCECONV))\n\t\t\tconvert_utf8_to_utf32((PCRE2_SPTR8)current->pattern, regtest_buf32, NULL, REGTEST_MAX_LENGTH32);\n\t\telse\n\t\t\tcopy_char8_to_char32((PCRE2_SPTR8)current->pattern, regtest_buf32, REGTEST_MAX_LENGTH32);\n\n\t\tre32 = NULL;\n\t\tccontext32 = pcre2_compile_context_create_32(NULL);\n\t\tif (ccontext32) {\n\t\t\tif (GET_NEWLINE(current->newline))\n\t\t\t\tpcre2_set_newline_32(ccontext32, GET_NEWLINE(current->newline));\n\t\t\tif (GET_BSR(current->newline))\n\t\t\t\tpcre2_set_bsr_32(ccontext32, GET_BSR(current->newline));\n\n\t\t\tif (!(current->start_offset & F_NO32)) {\n\t\t\t\tre32 = pcre2_compile_32(regtest_buf32, PCRE2_ZERO_TERMINATED,\n\t\t\t\t\tcurrent->compile_options & ~disabled_options,\n\t\t\t\t\t&error, &err_offs, ccontext32);\n\n\t\t\t\tif (!re32 && (utf || is_ascii))\n\t\t\t\t\tprintf(\"\\n32 bit: Cannot compile pattern \\\"%s\\\": %d\\n\", current->pattern, error);\n\t\t\t}\n\t\t\tpcre2_compile_context_free_32(ccontext32);\n\t\t}\n\t\telse\n\t\t\tprintf(\"\\n32 bit: Cannot allocate compile context\\n\");\n#endif\n\n\t\tcounter++;\n\t\tif ((counter & 0x3) != 0) {\n#ifdef SUPPORT_PCRE2_8\n\t\t\tsetstack8(NULL);\n#endif\n#ifdef SUPPORT_PCRE2_16\n\t\t\tsetstack16(NULL);\n#endif\n#ifdef SUPPORT_PCRE2_32\n\t\t\tsetstack32(NULL);\n#endif\n\t\t}\n\n#ifdef SUPPORT_PCRE2_8\n\t\treturn_value8[0] = -1000;\n\t\treturn_value8[1] = -1000;\n\t\tmdata8_1 = pcre2_match_data_create_8(OVECTOR_SIZE, NULL);\n\t\tmdata8_2 = pcre2_match_data_create_8(OVECTOR_SIZE, NULL);\n\t\tmcontext8 = pcre2_match_context_create_8(NULL);\n\t\tif (!mdata8_1 || !mdata8_2 || !mcontext8) {\n\t\t\tprintf(\"\\n8 bit: Cannot allocate match data\\n\");\n\t\t\tpcre2_match_data_free_8(mdata8_1);\n\t\t\tpcre2_match_data_free_8(mdata8_2);\n\t\t\tpcre2_match_context_free_8(mcontext8);\n\t\t\tpcre2_code_free_8(re8);\n\t\t\tre8 = NULL;\n\t\t} else {\n\t\t\tovector8_1 = pcre2_get_ovector_pointer_8(mdata8_1);\n\t\t\tovector8_2 = pcre2_get_ovector_pointer_8(mdata8_2);\n\t\t\tfor (i = 0; i < OVECTOR_SIZE * 2; ++i)\n\t\t\t\tovector8_1[i] = (PCRE2_SIZE)(-2);\n\t\t\tfor (i = 0; i < OVECTOR_SIZE * 2; ++i)\n\t\t\t\tovector8_2[i] = (PCRE2_SIZE)(-2);\n\t\t\tpcre2_set_match_limit_8(mcontext8, 10000000);\n\t\t}\n\t\tif (re8) {\n\t\t\treturn_value8[1] = pcre2_match_8(re8, (PCRE2_SPTR8)current->input, strlen(current->input),\n\t\t\t\tcurrent->start_offset & OFFSET_MASK, current->match_options, mdata8_2, mcontext8);\n\n\t\t\tif (pcre2_jit_compile_8(re8, jit_compile_mode)) {\n\t\t\t\tprintf(\"\\n8 bit: JIT compiler does not support \\\"%s\\\"\\n\", current->pattern);\n\t\t\t} else if ((counter & 0x1) != 0) {\n\t\t\t\tsetstack8(mcontext8);\n\t\t\t\treturn_value8[0] = pcre2_match_8(re8, (PCRE2_SPTR8)current->input, strlen(current->input),\n\t\t\t\t\tcurrent->start_offset & OFFSET_MASK, current->match_options, mdata8_1, mcontext8);\n\t\t\t} else {\n\t\t\t\tpcre2_jit_stack_assign_8(mcontext8, NULL, getstack8());\n\t\t\t\treturn_value8[0] = pcre2_jit_match_8(re8, (PCRE2_SPTR8)current->input, strlen(current->input),\n\t\t\t\t\tcurrent->start_offset & OFFSET_MASK, current->match_options, mdata8_1, mcontext8);\n\t\t\t}\n\t\t}\n#endif\n\n#ifdef SUPPORT_PCRE2_16\n\t\treturn_value16[0] = -1000;\n\t\treturn_value16[1] = -1000;\n\t\tmdata16_1 = pcre2_match_data_create_16(OVECTOR_SIZE, NULL);\n\t\tmdata16_2 = pcre2_match_data_create_16(OVECTOR_SIZE, NULL);\n\t\tmcontext16 = pcre2_match_context_create_16(NULL);\n\t\tif (!mdata16_1 || !mdata16_2 || !mcontext16) {\n\t\t\tprintf(\"\\n16 bit: Cannot allocate match data\\n\");\n\t\t\tpcre2_match_data_free_16(mdata16_1);\n\t\t\tpcre2_match_data_free_16(mdata16_2);\n\t\t\tpcre2_match_context_free_16(mcontext16);\n\t\t\tpcre2_code_free_16(re16);\n\t\t\tre16 = NULL;\n\t\t} else {\n\t\t\tovector16_1 = pcre2_get_ovector_pointer_16(mdata16_1);\n\t\t\tovector16_2 = pcre2_get_ovector_pointer_16(mdata16_2);\n\t\t\tfor (i = 0; i < OVECTOR_SIZE * 2; ++i)\n\t\t\t\tovector16_1[i] = (PCRE2_SIZE)(-2);\n\t\t\tfor (i = 0; i < OVECTOR_SIZE * 2; ++i)\n\t\t\t\tovector16_2[i] = (PCRE2_SIZE)(-2);\n\t\t\tpcre2_set_match_limit_16(mcontext16, 10000000);\n\t\t}\n\t\tif (re16) {\n\t\t\tif ((current->compile_options & PCRE2_UTF) || (current->start_offset & F_FORCECONV))\n\t\t\t\tlength16 = convert_utf8_to_utf16((PCRE2_SPTR8)current->input, regtest_buf16, regtest_offsetmap16, REGTEST_MAX_LENGTH16);\n\t\t\telse\n\t\t\t\tlength16 = copy_char8_to_char16((PCRE2_SPTR8)current->input, regtest_buf16, REGTEST_MAX_LENGTH16);\n\n\t\t\treturn_value16[1] = pcre2_match_16(re16, regtest_buf16, length16,\n\t\t\t\tcurrent->start_offset & OFFSET_MASK, current->match_options, mdata16_2, mcontext16);\n\n\t\t\tif (pcre2_jit_compile_16(re16, jit_compile_mode)) {\n\t\t\t\tprintf(\"\\n16 bit: JIT compiler does not support \\\"%s\\\"\\n\", current->pattern);\n\t\t\t} else if ((counter & 0x1) != 0) {\n\t\t\t\tsetstack16(mcontext16);\n\t\t\t\treturn_value16[0] = pcre2_match_16(re16, regtest_buf16, length16,\n\t\t\t\t\tcurrent->start_offset & OFFSET_MASK, current->match_options, mdata16_1, mcontext16);\n\t\t\t} else {\n\t\t\t\tpcre2_jit_stack_assign_16(mcontext16, NULL, getstack16());\n\t\t\t\treturn_value16[0] = pcre2_jit_match_16(re16, regtest_buf16, length16,\n\t\t\t\t\tcurrent->start_offset & OFFSET_MASK, current->match_options, mdata16_1, mcontext16);\n\t\t\t}\n\t\t}\n#endif\n\n#ifdef SUPPORT_PCRE2_32\n\t\treturn_value32[0] = -1000;\n\t\treturn_value32[1] = -1000;\n\t\tmdata32_1 = pcre2_match_data_create_32(OVECTOR_SIZE, NULL);\n\t\tmdata32_2 = pcre2_match_data_create_32(OVECTOR_SIZE, NULL);\n\t\tmcontext32 = pcre2_match_context_create_32(NULL);\n\t\tif (!mdata32_1 || !mdata32_2 || !mcontext32) {\n\t\t\tprintf(\"\\n32 bit: Cannot allocate match data\\n\");\n\t\t\tpcre2_match_data_free_32(mdata32_1);\n\t\t\tpcre2_match_data_free_32(mdata32_2);\n\t\t\tpcre2_match_context_free_32(mcontext32);\n\t\t\tpcre2_code_free_32(re32);\n\t\t\tre32 = NULL;\n\t\t} else {\n\t\t\tovector32_1 = pcre2_get_ovector_pointer_32(mdata32_1);\n\t\t\tovector32_2 = pcre2_get_ovector_pointer_32(mdata32_2);\n\t\t\tfor (i = 0; i < OVECTOR_SIZE * 2; ++i)\n\t\t\t\tovector32_1[i] = (PCRE2_SIZE)(-2);\n\t\t\tfor (i = 0; i < OVECTOR_SIZE * 2; ++i)\n\t\t\t\tovector32_2[i] = (PCRE2_SIZE)(-2);\n\t\t\tpcre2_set_match_limit_32(mcontext32, 10000000);\n\t\t}\n\t\tif (re32) {\n\t\t\tif ((current->compile_options & PCRE2_UTF) || (current->start_offset & F_FORCECONV))\n\t\t\t\tlength32 = convert_utf8_to_utf32((PCRE2_SPTR8)current->input, regtest_buf32, regtest_offsetmap32, REGTEST_MAX_LENGTH32);\n\t\t\telse\n\t\t\t\tlength32 = copy_char8_to_char32((PCRE2_SPTR8)current->input, regtest_buf32, REGTEST_MAX_LENGTH32);\n\n\t\t\treturn_value32[1] = pcre2_match_32(re32, regtest_buf32, length32,\n\t\t\t\tcurrent->start_offset & OFFSET_MASK, current->match_options, mdata32_2, mcontext32);\n\n\t\t\tif (pcre2_jit_compile_32(re32, jit_compile_mode)) {\n\t\t\t\tprintf(\"\\n32 bit: JIT compiler does not support \\\"%s\\\"\\n\", current->pattern);\n\t\t\t} else if ((counter & 0x1) != 0) {\n\t\t\t\tsetstack32(mcontext32);\n\t\t\t\treturn_value32[0] = pcre2_match_32(re32, regtest_buf32, length32,\n\t\t\t\t\tcurrent->start_offset & OFFSET_MASK, current->match_options, mdata32_1, mcontext32);\n\t\t\t} else {\n\t\t\t\tpcre2_jit_stack_assign_32(mcontext32, NULL, getstack32());\n\t\t\t\treturn_value32[0] = pcre2_jit_match_32(re32, regtest_buf32, length32,\n\t\t\t\t\tcurrent->start_offset & OFFSET_MASK, current->match_options, mdata32_1, mcontext32);\n\t\t\t}\n\t\t}\n#endif\n\n\t\t/* printf(\"[%d-%d-%d|%d-%d|%d-%d|%d-%d]%s\",\n\t\t\treturn_value8[0], return_value16[0], return_value32[0],\n\t\t\t(int)ovector8_1[0], (int)ovector8_1[1],\n\t\t\t(int)ovector16_1[0], (int)ovector16_1[1],\n\t\t\t(int)ovector32_1[0], (int)ovector32_1[1],\n\t\t\t(current->compile_options & PCRE2_CASELESS) ? \"C\" : \"\"); */\n\n\t\t/* If F_DIFF is set, just run the test, but do not compare the results.\n\t\tSegfaults can still be captured. */\n\n\t\tis_successful = 1;\n\t\tif (!(current->start_offset & F_DIFF)) {\n#if defined SUPPORT_UNICODE && ((defined(SUPPORT_PCRE2_8) + defined(SUPPORT_PCRE2_16) + defined(SUPPORT_PCRE2_32)) >= 2)\n\t\t\tif (!(current->start_offset & F_FORCECONV)) {\n\n\t\t\t\t/* All results must be the same. */\n#ifdef SUPPORT_PCRE2_8\n\t\t\t\tif ((return_value = return_value8[0]) != return_value8[1]) {\n\t\t\t\t\tprintf(\"\\n8 bit: Return value differs(J8:%d,I8:%d): [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\treturn_value8[0], return_value8[1], total, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t} else\n#endif\n#ifdef SUPPORT_PCRE2_16\n\t\t\t\tif ((return_value = return_value16[0]) != return_value16[1]) {\n\t\t\t\t\tprintf(\"\\n16 bit: Return value differs(J16:%d,I16:%d): [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\treturn_value16[0], return_value16[1], total, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t} else\n#endif\n#ifdef SUPPORT_PCRE2_32\n\t\t\t\tif ((return_value = return_value32[0]) != return_value32[1]) {\n\t\t\t\t\tprintf(\"\\n32 bit: Return value differs(J32:%d,I32:%d): [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\treturn_value32[0], return_value32[1], total, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t} else\n#endif\n#if defined SUPPORT_PCRE2_8 && defined SUPPORT_PCRE2_16\n\t\t\t\tif (return_value8[0] != return_value16[0]) {\n\t\t\t\t\tprintf(\"\\n8 and 16 bit: Return value differs(J8:%d,J16:%d): [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\treturn_value8[0], return_value16[0],\n\t\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t} else\n#endif\n#if defined SUPPORT_PCRE2_8 && defined SUPPORT_PCRE2_32\n\t\t\t\tif (return_value8[0] != return_value32[0]) {\n\t\t\t\t\tprintf(\"\\n8 and 32 bit: Return value differs(J8:%d,J32:%d): [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\treturn_value8[0], return_value32[0],\n\t\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t} else\n#endif\n#if defined SUPPORT_PCRE2_16 && defined SUPPORT_PCRE2_32\n\t\t\t\tif (return_value16[0] != return_value32[0]) {\n\t\t\t\t\tprintf(\"\\n16 and 32 bit: Return value differs(J16:%d,J32:%d): [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\treturn_value16[0], return_value32[0],\n\t\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t} else\n#endif\n\t\t\t\tif (return_value >= 0 || return_value == PCRE2_ERROR_PARTIAL) {\n\t\t\t\t\tif (return_value == PCRE2_ERROR_PARTIAL) {\n\t\t\t\t\t\treturn_value = 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn_value *= 2;\n\t\t\t\t\t}\n#ifdef SUPPORT_PCRE2_8\n\t\t\t\t\treturn_value8[0] = return_value;\n#endif\n#ifdef SUPPORT_PCRE2_16\n\t\t\t\t\treturn_value16[0] = return_value;\n#endif\n#ifdef SUPPORT_PCRE2_32\n\t\t\t\t\treturn_value32[0] = return_value;\n#endif\n\t\t\t\t\t/* Transform back the results. */\n\t\t\t\t\tif (current->compile_options & PCRE2_UTF) {\n#ifdef SUPPORT_PCRE2_16\n\t\t\t\t\t\tfor (i = 0; i < return_value; ++i) {\n\t\t\t\t\t\t\tif (ovector16_1[i] != PCRE2_UNSET)\n\t\t\t\t\t\t\t\tovector16_1[i] = regtest_offsetmap16[ovector16_1[i]];\n\t\t\t\t\t\t\tif (ovector16_2[i] != PCRE2_UNSET)\n\t\t\t\t\t\t\t\tovector16_2[i] = regtest_offsetmap16[ovector16_2[i]];\n\t\t\t\t\t\t}\n#endif\n#ifdef SUPPORT_PCRE2_32\n\t\t\t\t\t\tfor (i = 0; i < return_value; ++i) {\n\t\t\t\t\t\t\tif (ovector32_1[i] != PCRE2_UNSET)\n\t\t\t\t\t\t\t\tovector32_1[i] = regtest_offsetmap32[ovector32_1[i]];\n\t\t\t\t\t\t\tif (ovector32_2[i] != PCRE2_UNSET)\n\t\t\t\t\t\t\t\tovector32_2[i] = regtest_offsetmap32[ovector32_2[i]];\n\t\t\t\t\t\t}\n#endif\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (i = 0; i < return_value; ++i) {\n#if defined SUPPORT_PCRE2_8 && defined SUPPORT_PCRE2_16\n\t\t\t\t\t\tif (ovector8_1[i] != ovector8_2[i] || ovector8_1[i] != ovector16_1[i] || ovector8_1[i] != ovector16_2[i]) {\n\t\t\t\t\t\t\tprintf(\"\\n8 and 16 bit: Ovector[%d] value differs(J8:%d,I8:%d,J16:%d,I16:%d): [%d] '%s' @ '%s' \\n\",\n\t\t\t\t\t\t\t\ti, (int)ovector8_1[i], (int)ovector8_2[i], (int)ovector16_1[i], (int)ovector16_2[i],\n\t\t\t\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\t\t\t\tis_successful = 0;\n\t\t\t\t\t\t}\n#endif\n#if defined SUPPORT_PCRE2_8 && defined SUPPORT_PCRE2_32\n\t\t\t\t\t\tif (ovector8_1[i] != ovector8_2[i] || ovector8_1[i] != ovector32_1[i] || ovector8_1[i] != ovector32_2[i]) {\n\t\t\t\t\t\t\tprintf(\"\\n8 and 32 bit: Ovector[%d] value differs(J8:%d,I8:%d,J32:%d,I32:%d): [%d] '%s' @ '%s' \\n\",\n\t\t\t\t\t\t\t\ti, (int)ovector8_1[i], (int)ovector8_2[i], (int)ovector32_1[i], (int)ovector32_2[i],\n\t\t\t\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\t\t\t\tis_successful = 0;\n\t\t\t\t\t\t}\n#endif\n#if defined SUPPORT_PCRE2_16 && defined SUPPORT_PCRE2_32\n\t\t\t\t\t\tif (ovector16_1[i] != ovector16_2[i] || ovector16_1[i] != ovector32_1[i] || ovector16_1[i] != ovector32_2[i]) {\n\t\t\t\t\t\t\tprintf(\"\\n16 and 32 bit: Ovector[%d] value differs(J16:%d,I16:%d,J32:%d,I32:%d): [%d] '%s' @ '%s' \\n\",\n\t\t\t\t\t\t\t\ti, (int)ovector16_1[i], (int)ovector16_2[i], (int)ovector32_1[i], (int)ovector32_2[i],\n\t\t\t\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\t\t\t\tis_successful = 0;\n\t\t\t\t\t\t}\n#endif\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else\n#endif /* more than one of SUPPORT_PCRE2_8, SUPPORT_PCRE2_16 and SUPPORT_PCRE2_32 */\n\t\t\t{\n#ifdef SUPPORT_PCRE2_8\n\t\t\t\tif (return_value8[0] != return_value8[1]) {\n\t\t\t\t\tprintf(\"\\n8 bit: Return value differs(%d:%d): [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\treturn_value8[0], return_value8[1], total, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t} else if (return_value8[0] >= 0 || return_value8[0] == PCRE2_ERROR_PARTIAL) {\n\t\t\t\t\tif (return_value8[0] == PCRE2_ERROR_PARTIAL)\n\t\t\t\t\t\treturn_value8[0] = 2;\n\t\t\t\t\telse\n\t\t\t\t\t\treturn_value8[0] *= 2;\n\n\t\t\t\t\tfor (i = 0; i < return_value8[0]; ++i)\n\t\t\t\t\t\tif (ovector8_1[i] != ovector8_2[i]) {\n\t\t\t\t\t\t\tprintf(\"\\n8 bit: Ovector[%d] value differs(%d:%d): [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\t\t\ti, (int)ovector8_1[i], (int)ovector8_2[i], total, current->pattern, current->input);\n\t\t\t\t\t\t\tis_successful = 0;\n\t\t\t\t\t\t}\n\t\t\t\t}\n#endif\n\n#ifdef SUPPORT_PCRE2_16\n\t\t\t\tif (return_value16[0] != return_value16[1]) {\n\t\t\t\t\tprintf(\"\\n16 bit: Return value differs(%d:%d): [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\treturn_value16[0], return_value16[1], total, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t} else if (return_value16[0] >= 0 || return_value16[0] == PCRE2_ERROR_PARTIAL) {\n\t\t\t\t\tif (return_value16[0] == PCRE2_ERROR_PARTIAL)\n\t\t\t\t\t\treturn_value16[0] = 2;\n\t\t\t\t\telse\n\t\t\t\t\t\treturn_value16[0] *= 2;\n\n\t\t\t\t\tfor (i = 0; i < return_value16[0]; ++i)\n\t\t\t\t\t\tif (ovector16_1[i] != ovector16_2[i]) {\n\t\t\t\t\t\t\tprintf(\"\\n16 bit: Ovector[%d] value differs(%d:%d): [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\t\t\ti, (int)ovector16_1[i], (int)ovector16_2[i], total, current->pattern, current->input);\n\t\t\t\t\t\t\tis_successful = 0;\n\t\t\t\t\t\t}\n\t\t\t\t}\n#endif\n\n#ifdef SUPPORT_PCRE2_32\n\t\t\t\tif (return_value32[0] != return_value32[1]) {\n\t\t\t\t\tprintf(\"\\n32 bit: Return value differs(%d:%d): [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\treturn_value32[0], return_value32[1], total, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t} else if (return_value32[0] >= 0 || return_value32[0] == PCRE2_ERROR_PARTIAL) {\n\t\t\t\t\tif (return_value32[0] == PCRE2_ERROR_PARTIAL)\n\t\t\t\t\t\treturn_value32[0] = 2;\n\t\t\t\t\telse\n\t\t\t\t\t\treturn_value32[0] *= 2;\n\n\t\t\t\t\tfor (i = 0; i < return_value32[0]; ++i)\n\t\t\t\t\t\tif (ovector32_1[i] != ovector32_2[i]) {\n\t\t\t\t\t\t\tprintf(\"\\n32 bit: Ovector[%d] value differs(%d:%d): [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\t\t\ti, (int)ovector32_1[i], (int)ovector32_2[i], total, current->pattern, current->input);\n\t\t\t\t\t\t\tis_successful = 0;\n\t\t\t\t\t\t}\n\t\t\t\t}\n#endif\n\t\t\t}\n\t\t}\n\n\t\tif (is_successful) {\n#ifdef SUPPORT_PCRE2_8\n\t\t\tif (!(current->start_offset & F_NO8) && (utf || is_ascii)) {\n\t\t\t\tif (return_value8[0] < 0 && !(current->start_offset & F_NOMATCH)) {\n\t\t\t\t\tprintf(\"8 bit: Test should match: [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t}\n\n\t\t\t\tif (return_value8[0] >= 0 && (current->start_offset & F_NOMATCH)) {\n\t\t\t\t\tprintf(\"8 bit: Test should not match: [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t}\n\t\t\t}\n#endif\n#ifdef SUPPORT_PCRE2_16\n\t\t\tif (!(current->start_offset & F_NO16) && (utf || is_ascii)) {\n\t\t\t\tif (return_value16[0] < 0 && !(current->start_offset & F_NOMATCH)) {\n\t\t\t\t\tprintf(\"16 bit: Test should match: [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t}\n\n\t\t\t\tif (return_value16[0] >= 0 && (current->start_offset & F_NOMATCH)) {\n\t\t\t\t\tprintf(\"16 bit: Test should not match: [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t}\n\t\t\t}\n#endif\n#ifdef SUPPORT_PCRE2_32\n\t\t\tif (!(current->start_offset & F_NO32) && (utf || is_ascii)) {\n\t\t\t\tif (return_value32[0] < 0 && !(current->start_offset & F_NOMATCH)) {\n\t\t\t\t\tprintf(\"32 bit: Test should match: [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t}\n\n\t\t\t\tif (return_value32[0] >= 0 && (current->start_offset & F_NOMATCH)) {\n\t\t\t\t\tprintf(\"32 bit: Test should not match: [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\t\tis_successful = 0;\n\t\t\t\t}\n\t\t\t}\n#endif\n\t\t}\n\n\t\tif (is_successful) {\n#ifdef SUPPORT_PCRE2_8\n\t\t\tif (re8 && !(current->start_offset & F_NO8) && pcre2_get_mark_8(mdata8_1) != pcre2_get_mark_8(mdata8_2)) {\n\t\t\t\tprintf(\"8 bit: Mark value mismatch: [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\tis_successful = 0;\n\t\t\t}\n#endif\n#ifdef SUPPORT_PCRE2_16\n\t\t\tif (re16 && !(current->start_offset & F_NO16) && pcre2_get_mark_16(mdata16_1) != pcre2_get_mark_16(mdata16_2)) {\n\t\t\t\tprintf(\"16 bit: Mark value mismatch: [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\tis_successful = 0;\n\t\t\t}\n#endif\n#ifdef SUPPORT_PCRE2_32\n\t\t\tif (re32 && !(current->start_offset & F_NO32) && pcre2_get_mark_32(mdata32_1) != pcre2_get_mark_32(mdata32_2)) {\n\t\t\t\tprintf(\"32 bit: Mark value mismatch: [%d] '%s' @ '%s'\\n\",\n\t\t\t\t\ttotal, current->pattern, current->input);\n\t\t\t\tis_successful = 0;\n\t\t\t}\n#endif\n\t\t}\n\n#ifdef SUPPORT_PCRE2_8\n\t\tpcre2_code_free_8(re8);\n\t\tpcre2_match_data_free_8(mdata8_1);\n\t\tpcre2_match_data_free_8(mdata8_2);\n\t\tpcre2_match_context_free_8(mcontext8);\n#endif\n#ifdef SUPPORT_PCRE2_16\n\t\tpcre2_code_free_16(re16);\n\t\tpcre2_match_data_free_16(mdata16_1);\n\t\tpcre2_match_data_free_16(mdata16_2);\n\t\tpcre2_match_context_free_16(mcontext16);\n#endif\n#ifdef SUPPORT_PCRE2_32\n\t\tpcre2_code_free_32(re32);\n\t\tpcre2_match_data_free_32(mdata32_1);\n\t\tpcre2_match_data_free_32(mdata32_2);\n\t\tpcre2_match_context_free_32(mcontext32);\n#endif\n\n\t\tif (is_successful) {\n\t\t\tsuccessful++;\n\t\t\tsuccessful_row++;\n\t\t\tprintf(\".\");\n\t\t\tif (successful_row >= 60) {\n\t\t\t\tsuccessful_row = 0;\n\t\t\t\tprintf(\"\\n\");\n\t\t\t}\n\t\t} else\n\t\t\tsuccessful_row = 0;\n\n\t\tfflush(stdout);\n\t\tcurrent++;\n\t}\n#ifdef SUPPORT_PCRE2_8\n\tsetstack8(NULL);\n#endif\n#ifdef SUPPORT_PCRE2_16\n\tsetstack16(NULL);\n#endif\n#ifdef SUPPORT_PCRE2_32\n\tsetstack32(NULL);\n#endif\n\n\tif (total == successful) {\n\t\tprintf(\"\\nAll JIT regression tests are successfully passed.\\n\");\n\t\treturn 0;\n\t} else {\n\t\tprintf(\"\\nSuccessful test ratio: %d%% (%d failed)\\n\", successful * 100 / total, total - successful);\n\t\treturn 1;\n\t}\n}\n\n#if defined SUPPORT_UNICODE\n\nstatic int check_invalid_utf_result(int pattern_index, const char *type, int result,\n\tint match_start, int match_end, PCRE2_SIZE *ovector)\n{\n\tif (match_start < 0) {\n\t\tif (result != -1) {\n\t\t\tprintf(\"Pattern[%d] %s result is not -1.\\n\", pattern_index, type);\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tif (result <= 0) {\n\t\tprintf(\"Pattern[%d] %s result (%d) is not greater than 0.\\n\", pattern_index, type, result);\n\t\treturn 1;\n\t}\n\n\tif (ovector[0] != (PCRE2_SIZE)match_start) {\n\t\tprintf(\"Pattern[%d] %s ovector[0] is unexpected (%d instead of %d)\\n\",\n\t\t\tpattern_index, type, (int)ovector[0], match_start);\n\t\treturn 1;\n\t}\n\n\tif (ovector[1] != (PCRE2_SIZE)match_end) {\n\t\tprintf(\"Pattern[%d] %s ovector[1] is unexpected (%d instead of %d)\\n\",\n\t\t\tpattern_index, type, (int)ovector[1], match_end);\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n\n#endif /* SUPPORT_UNICODE */\n\n#if defined SUPPORT_UNICODE && defined SUPPORT_PCRE2_8\n\n#define UDA (PCRE2_UTF | PCRE2_DOTALL | PCRE2_ANCHORED)\n#define CI (PCRE2_JIT_COMPLETE | PCRE2_JIT_INVALID_UTF)\n#define CPI (PCRE2_JIT_COMPLETE | PCRE2_JIT_PARTIAL_SOFT | PCRE2_JIT_INVALID_UTF)\n\nstruct invalid_utf8_regression_test_case {\n\tuint32_t compile_options;\n\tint jit_compile_options;\n\tint start_offset;\n\tint skip_left;\n\tint skip_right;\n\tint match_start;\n\tint match_end;\n\tconst char *pattern[2];\n\tconst char *input;\n};\n\nstatic const char invalid_utf8_newline_cr;\n\nstatic const struct invalid_utf8_regression_test_case invalid_utf8_regression_test_cases[] = {\n\t{ UDA, CI, 0, 0, 0, 0, 4, { \".\", NULL }, \"\\xf4\\x8f\\xbf\\xbf\" },\n\t{ UDA, CI, 0, 0, 0, 0, 4, { \".\", NULL }, \"\\xf0\\x90\\x80\\x80\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xf4\\x90\\x80\\x80\" },\n\t{ UDA, CI, 0, 0, 1, -1, -1, { \".\", NULL }, \"\\xf4\\x8f\\xbf\\xbf\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xf0\\x90\\x80\\x7f\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xf0\\x90\\x80\\xc0\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xf0\\x8f\\xbf\\xbf\" },\n\t{ UDA, CI, 0, 0, 0, 0, 3, { \".\", NULL }, \"\\xef\\xbf\\xbf#\" },\n\t{ UDA, CI, 0, 0, 0, 0, 3, { \".\", NULL }, \"\\xef\\xbf\\xbf\" },\n\t{ UDA, CI, 0, 0, 0, 0, 3, { \".\", NULL }, \"\\xe0\\xa0\\x80#\" },\n\t{ UDA, CI, 0, 0, 0, 0, 3, { \".\", NULL }, \"\\xe0\\xa0\\x80\" },\n\t{ UDA, CI, 0, 0, 2, -1, -1, { \".\", NULL }, \"\\xef\\xbf\\xbf#\" },\n\t{ UDA, CI, 0, 0, 1, -1, -1, { \".\", NULL }, \"\\xef\\xbf\\xbf\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xef\\xbf\\x7f#\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xef\\xbf\\xc0\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xe0\\x9f\\xbf#\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xe0\\x9f\\xbf\" },\n\t{ UDA, CI, 0, 0, 0, 0, 3, { \".\", NULL }, \"\\xed\\x9f\\xbf#\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xed\\xa0\\x80#\" },\n\t{ UDA, CI, 0, 0, 0, 0, 3, { \".\", NULL }, \"\\xee\\x80\\x80#\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xed\\xbf\\xbf#\" },\n\t{ UDA, CI, 0, 0, 0, 0, 2, { \".\", NULL }, \"\\xdf\\xbf##\" },\n\t{ UDA, CI, 0, 0, 0, 0, 2, { \".\", NULL }, \"\\xdf\\xbf#\" },\n\t{ UDA, CI, 0, 0, 0, 0, 2, { \".\", NULL }, \"\\xdf\\xbf\" },\n\t{ UDA, CI, 0, 0, 0, 0, 2, { \".\", NULL }, \"\\xc2\\x80##\" },\n\t{ UDA, CI, 0, 0, 0, 0, 2, { \".\", NULL }, \"\\xc2\\x80#\" },\n\t{ UDA, CI, 0, 0, 0, 0, 2, { \".\", NULL }, \"\\xc2\\x80\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xe0\\x80##\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xdf\\xc0##\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xe0\\x80\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xdf\\xc0\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xc1\\xbf##\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xc1\\xbf\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\x80###\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\x80\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xf8###\" },\n\t{ UDA, CI, 0, 0, 0, -1, -1, { \".\", NULL }, \"\\xf8\" },\n\t{ UDA, CI, 0, 0, 0, 0, 1, { \".\", NULL }, \"\\x7f\" },\n\n\t{ UDA, CPI, 4, 0, 0, 4, 4, { \"\\\\B\", NULL }, \"\\xf4\\x8f\\xbf\\xbf#\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xf4\\xa0\\x80\\x80\\xf4\\xa0\\x80\\x80\" },\n\t{ UDA, CPI, 4, 1, 1, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xf4\\x8f\\xbf\\xbf\\xf4\\x8f\\xbf\\xbf\" },\n\t{ UDA, CPI, 4, 0, 0, 4, 4, { \"\\\\B\", NULL }, \"#\\xef\\xbf\\xbf#\" },\n\t{ UDA, CPI, 4, 0, 0, 4, 4, { \"\\\\B\", NULL }, \"#\\xe0\\xa0\\x80#\" },\n\t{ UDA, CPI, 4, 0, 0, 4, 4, { \"\\\\B\", NULL }, \"\\xf0\\x90\\x80\\x80#\" },\n\t{ UDA, CPI, 4, 0, 0, 4, 4, { \"\\\\B\", NULL }, \"\\xf3\\xbf\\xbf\\xbf#\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xf0\\x8f\\xbf\\xbf\\xf0\\x8f\\xbf\\xbf\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xf5\\x80\\x80\\x80\\xf5\\x80\\x80\\x80\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xf4\\x90\\x80\\x80\\xf4\\x90\\x80\\x80\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xf4\\x8f\\xbf\\xff\\xf4\\x8f\\xbf\\xff\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xf4\\x8f\\xff\\xbf\\xf4\\x8f\\xff\\xbf\" },\n\t{ UDA, CPI, 4, 0, 1, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xef\\x80\\x80\\x80\\xef\\x80\\x80\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x80\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"#\\xe0\\x9f\\xbf\\xe0\\x9f\\xbf#\" },\n\t{ UDA, CPI, 4, 2, 2, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"#\\xe0\\xa0\\x80\\xe0\\xa0\\x80#\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"#\\xf0\\x80\\x80\\xf0\\x80\\x80#\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"#\\xed\\xa0\\x80\\xed\\xa0\\x80#\" },\n\t{ UDA, CPI, 4, 0, 0, 4, 4, { \"\\\\B\", NULL }, \"##\\xdf\\xbf#\" },\n\t{ UDA, CPI, 4, 2, 0, 2, 2, { \"\\\\B\", NULL }, \"##\\xdf\\xbf#\" },\n\t{ UDA, CPI, 4, 0, 0, 4, 4, { \"\\\\B\", NULL }, \"##\\xc2\\x80#\" },\n\t{ UDA, CPI, 4, 2, 0, 2, 2, { \"\\\\B\", NULL }, \"##\\xc2\\x80#\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"##\\xc1\\xbf\\xc1\\xbf##\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"##\\xdf\\xc0\\xdf\\xc0##\" },\n\t{ UDA, CPI, 4, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"##\\xe0\\x80\\xe0\\x80##\" },\n\n\t{ UDA, CPI, 3, 0, 0, 3, 3, { \"\\\\B\", NULL }, \"\\xef\\xbf\\xbf#\" },\n\t{ UDA, CPI, 3, 0, 0, 3, 3, { \"\\\\B\", NULL }, \"\\xe0\\xa0\\x80#\" },\n\t{ UDA, CPI, 3, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xe0\\x9f\\xbf\\xe0\\x9f\\xbf\" },\n\t{ UDA, CPI, 3, 1, 1, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xef\\xbf\\xbf\\xef\\xbf\\xbf\" },\n\t{ UDA, CPI, 3, 0, 1, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xdf\\x80\\x80\\xdf\\x80\" },\n\t{ UDA, CPI, 3, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xef\\xbf\\xff\\xef\\xbf\\xff\" },\n\t{ UDA, CPI, 3, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xef\\xff\\xbf\\xef\\xff\\xbf\" },\n\t{ UDA, CPI, 3, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xed\\xbf\\xbf\\xed\\xbf\\xbf\" },\n\n\t{ UDA, CPI, 2, 0, 0, 2, 2, { \"\\\\B\", NULL }, \"\\xdf\\xbf#\" },\n\t{ UDA, CPI, 2, 0, 0, 2, 2, { \"\\\\B\", NULL }, \"\\xc2\\x80#\" },\n\t{ UDA, CPI, 2, 1, 1, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xdf\\xbf\\xdf\\xbf\" },\n\t{ UDA, CPI, 2, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xc1\\xbf\\xc1\\xbf\" },\n\t{ UDA, CPI, 2, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xe0\\x80\\xe0\\x80\" },\n\t{ UDA, CPI, 2, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xdf\\xff\\xdf\\xff\" },\n\t{ UDA, CPI, 2, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xff\\xbf\\xff\\xbf\" },\n\n\t{ UDA, CPI, 1, 0, 0, 1, 1, { \"\\\\B\", NULL }, \"\\x7f#\" },\n\t{ UDA, CPI, 1, 0, 0, 1, 1, { \"\\\\B\", NULL }, \"\\x01#\" },\n\t{ UDA, CPI, 1, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\x80\\x80\" },\n\t{ UDA, CPI, 1, 0, 0, -1, -1, { \"\\\\B\", \"\\\\b\" }, \"\\xb0\\xb0\" },\n\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 0, 0, 2, { \"(.)\\\\1\", NULL }, \"aA\" },\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 0, -1, -1, { \"(.)\\\\1\", NULL }, \"a\\xff\" },\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 0, 0, 4, { \"(.)\\\\1\", NULL }, \"\\xc3\\xa1\\xc3\\x81\" },\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 1, -1, -1, { \"(.)\\\\1\", NULL }, \"\\xc3\\xa1\\xc3\\x81\" },\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 0, -1, -1, { \"(.)\\\\1\", NULL }, \"\\xc2\\x80\\x80\" },\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 0, 0, 6, { \"(.)\\\\1\", NULL }, \"\\xe1\\xbd\\xb8\\xe1\\xbf\\xb8\" },\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 1, -1, -1, { \"(.)\\\\1\", NULL }, \"\\xe1\\xbd\\xb8\\xe1\\xbf\\xb8\" },\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 0, 0, 8, { \"(.)\\\\1\", NULL }, \"\\xf0\\x90\\x90\\x80\\xf0\\x90\\x90\\xa8\" },\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 1, -1, -1, { \"(.)\\\\1\", NULL }, \"\\xf0\\x90\\x90\\x80\\xf0\\x90\\x90\\xa8\" },\n\n\t{ UDA, CPI, 0, 0, 0, 0, 1, { \"\\\\X\", NULL }, \"A\" },\n\t{ UDA, CPI, 0, 0, 0, -1, -1, { \"\\\\X\", NULL }, \"\\xff\" },\n\t{ UDA, CPI, 0, 0, 0, 0, 2, { \"\\\\X\", NULL }, \"\\xc3\\xa1\" },\n\t{ UDA, CPI, 0, 0, 1, -1, -1, { \"\\\\X\", NULL }, \"\\xc3\\xa1\" },\n\t{ UDA, CPI, 0, 0, 0, -1, -1, { \"\\\\X\", NULL }, \"\\xc3\\x7f\" },\n\t{ UDA, CPI, 0, 0, 0, 0, 3, { \"\\\\X\", NULL }, \"\\xe1\\xbd\\xb8\" },\n\t{ UDA, CPI, 0, 0, 1, -1, -1, { \"\\\\X\", NULL }, \"\\xe1\\xbd\\xb8\" },\n\t{ UDA, CPI, 0, 0, 0, 0, 4, { \"\\\\X\", NULL }, \"\\xf0\\x90\\x90\\x80\" },\n\t{ UDA, CPI, 0, 0, 1, -1, -1, { \"\\\\X\", NULL }, \"\\xf0\\x90\\x90\\x80\" },\n\n\t{ UDA, CPI, 0, 0, 0, -1, -1, { \"[^#]\", NULL }, \"#\" },\n\t{ UDA, CPI, 0, 0, 0, 0, 4, { \"[^#]\", NULL }, \"\\xf4\\x8f\\xbf\\xbf\" },\n\t{ UDA, CPI, 0, 0, 0, -1, -1, { \"[^#]\", NULL }, \"\\xf4\\x90\\x80\\x80\" },\n\t{ UDA, CPI, 0, 0, 0, -1, -1, { \"[^#]\", NULL }, \"\\xc1\\x80\" },\n\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 2, 3, { \"^\\\\W\", NULL }, \" \\x0a#\"},\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 14, 15, { \"^\\\\W\", NULL }, \" \\xc0\\x8a#\\xe0\\x80\\x8a#\\xf0\\x80\\x80\\x8a#\\x0a#\"},\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 3, 4, { \"^\\\\W\", NULL }, \" \\xf8\\x0a#\"},\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 3, 4, { \"^\\\\W\", NULL }, \" \\xc3\\x0a#\"},\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 3, 4, { \"^\\\\W\", NULL }, \" \\xf1\\x0a#\"},\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 4, 5, { \"^\\\\W\", NULL }, \" \\xf2\\xbf\\x0a#\"},\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 5, 6, { \"^\\\\W\", NULL }, \" \\xf2\\xbf\\xbf\\x0a#\"},\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 3, 4, { \"^\\\\W\", NULL }, \" \\xef\\x0a#\"},\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 4, 5, { \"^\\\\W\", NULL }, \" \\xef\\xbf\\x0a#\"},\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 5, 6, { \"^\\\\W\", NULL }, \" \\x85#\\xc2\\x85#\"},\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 7, 8, { \"^\\\\W\", NULL }, \" \\xe2\\x80\\xf8\\xe2\\x80\\xa8#\"},\n\n\t{ PCRE2_UTF | PCRE2_FIRSTLINE, CI, 0, 0, 0, -1, -1, { \"#\", NULL }, \"\\xe2\\x80\\xf8\\xe2\\x80\\xa8#\"},\n\t{ PCRE2_UTF | PCRE2_FIRSTLINE, CI, 0, 0, 0, 3, 4, { \"#\", NULL }, \"\\xe2\\x80\\xf8#\\xe2\\x80\\xa8#\"},\n\t{ PCRE2_UTF | PCRE2_FIRSTLINE, CI, 0, 0, 0, -1, -1, { \"#\", NULL }, \"abcd\\xc2\\x85#\"},\n\t{ PCRE2_UTF | PCRE2_FIRSTLINE, CI, 0, 0, 0, 1, 2, { \"#\", NULL }, \"\\x85#\\xc2\\x85#\"},\n\t{ PCRE2_UTF | PCRE2_FIRSTLINE, CI, 0, 0, 0, 5, 6, { \"#\", NULL }, \"\\xef,\\x80,\\xf8#\\x0a\"},\n\t{ PCRE2_UTF | PCRE2_FIRSTLINE, CI, 0, 0, 0, -1, -1, { \"#\", NULL }, \"\\xef,\\x80,\\xf8\\x0a#\"},\n\n\t{ PCRE2_UTF | PCRE2_NO_START_OPTIMIZE, CI, 0, 0, 0, 4, 8, { \"#\\xc7\\x85#\", NULL }, \"\\x80\\x80#\\xc7#\\xc7\\x85#\" },\n\t{ PCRE2_UTF | PCRE2_NO_START_OPTIMIZE, CI, 0, 0, 0, 7, 11, { \"#\\xc7\\x85#\", NULL }, \"\\x80\\x80#\\xc7\\x80\\x80\\x80#\\xc7\\x85#\" },\n\t{ PCRE2_UTF, CI, 0, 0, 0, 4, 8, { \"#\\xc7\\x85#\", NULL }, \"\\x80\\x80#\\xc7#\\xc7\\x85#\" },\n\t{ PCRE2_UTF, CI, 0, 0, 0, 7, 11, { \"#\\xc7\\x85#\", NULL }, \"\\x80\\x80#\\xc7\\x80\\x80\\x80#\\xc7\\x85#\" },\n\n\t{ PCRE2_UTF | PCRE2_UCP, CI, 0, 0, 0, -1, -1, { \"[\\\\s]\", NULL }, \"\\xed\\xa0\\x80\" },\n\t{ PCRE2_UTF, CI, 0, 0, 0, 0, 3, { \"[\\\\D]\", NULL }, \"\\xe0\\xab\\xaa@\" },\n\t{ PCRE2_UTF, CI, 0, 0, 0, 0, 3, { \"\\\\D+\", NULL }, \"n\\xc3\\xb1\" },\n\t{ PCRE2_UTF, CI, 0, 0, 0, 0, 5, { \"\\\\W+\", NULL }, \"@\\xf0\\x9d\\x84\\x9e\" },\n\n\t/* These two are not invalid UTF tests, but this infrastructure fits better for them. */\n\t{ 0, PCRE2_JIT_COMPLETE, 0, 0, 1, -1, -1, { \"\\\\X{2}\", NULL }, \"\\r\\n\\n\" },\n\t{ 0, PCRE2_JIT_COMPLETE, 0, 0, 1, -1, -1, { \"\\\\R{2}\", NULL }, \"\\r\\n\\n\" },\n\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 0, 0, 0, -1, -1, { \"^.a\", &invalid_utf8_newline_cr }, \"\\xc3\\xa7#a\" },\n\n\t{ 0, 0, 0, 0, 0, 0, 0, { NULL, NULL }, NULL }\n};\n\n#undef UDA\n#undef CI\n#undef CPI\n\nstatic int run_invalid_utf8_test(const struct invalid_utf8_regression_test_case *current,\n\tint pattern_index, int i, pcre2_compile_context_8 *ccontext, pcre2_match_data_8 *mdata)\n{\n\tpcre2_code_8 *code;\n\tint result, errorcode;\n\tPCRE2_SIZE length, erroroffset;\n\tPCRE2_SIZE *ovector = pcre2_get_ovector_pointer_8(mdata);\n\n\tif (current->pattern[i] == NULL)\n\t\treturn 1;\n\n\tcode = pcre2_compile_8((PCRE2_UCHAR8*)current->pattern[i], PCRE2_ZERO_TERMINATED,\n\t\tcurrent->compile_options, &errorcode, &erroroffset, ccontext);\n\n\tif (!code) {\n\t\tprintf(\"Pattern[%d:0] cannot be compiled. Error offset: %d\\n\", pattern_index, (int)erroroffset);\n\t\treturn 0;\n\t}\n\n\tif (pcre2_jit_compile_8(code, current->jit_compile_options) != 0) {\n\t\tprintf(\"Pattern[%d:0] cannot be compiled by the JIT compiler.\\n\", pattern_index);\n\t\tpcre2_code_free_8(code);\n\t\treturn 0;\n\t}\n\n\tlength = (PCRE2_SIZE)(strlen(current->input) - current->skip_left - current->skip_right);\n\n\tif (current->jit_compile_options & PCRE2_JIT_COMPLETE) {\n\t\tresult = pcre2_jit_match_8(code, (PCRE2_UCHAR8*)(current->input + current->skip_left),\n\t\t\tlength, current->start_offset - current->skip_left, 0, mdata, NULL);\n\n\t\tif (check_invalid_utf_result(pattern_index, \"match\", result, current->match_start, current->match_end, ovector)) {\n\t\t\tpcre2_code_free_8(code);\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tif (current->jit_compile_options & PCRE2_JIT_PARTIAL_SOFT) {\n\t\tresult = pcre2_jit_match_8(code, (PCRE2_UCHAR8*)(current->input + current->skip_left),\n\t\t\tlength, current->start_offset - current->skip_left, PCRE2_PARTIAL_SOFT, mdata, NULL);\n\n\t\tif (check_invalid_utf_result(pattern_index, \"partial match\", result, current->match_start, current->match_end, ovector)) {\n\t\t\tpcre2_code_free_8(code);\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tpcre2_code_free_8(code);\n\treturn 1;\n}\n\nstatic int invalid_utf8_regression_tests(void)\n{\n\tconst struct invalid_utf8_regression_test_case *current;\n\tpcre2_compile_context_8 *ccontext;\n\tpcre2_match_data_8 *mdata;\n\tint total = 0, successful = 0;\n\tint result;\n\n\tprintf(\"\\nRunning invalid-utf8 JIT regression tests\\n\");\n\n\tccontext = pcre2_compile_context_create_8(NULL);\n\tpcre2_set_newline_8(ccontext, PCRE2_NEWLINE_ANY);\n\tmdata = pcre2_match_data_create_8(4, NULL);\n\n\tfor (current = invalid_utf8_regression_test_cases; current->pattern[0]; current++) {\n\t\t/* printf(\"\\nPattern: %s :\\n\", current->pattern); */\n\t\ttotal++;\n\n\t\tresult = 1;\n\t\tif (current->pattern[1] != &invalid_utf8_newline_cr)\n\t\t{\n\t\t\tif (!run_invalid_utf8_test(current, total - 1, 0, ccontext, mdata))\n\t\t\t\tresult = 0;\n\t\t\tif (!run_invalid_utf8_test(current, total - 1, 1, ccontext, mdata))\n\t\t\t\tresult = 0;\n\t\t} else {\n\t\t\tpcre2_set_newline_8(ccontext, PCRE2_NEWLINE_CR);\n\t\t\tif (!run_invalid_utf8_test(current, total - 1, 0, ccontext, mdata))\n\t\t\t\tresult = 0;\n\t\t\tpcre2_set_newline_8(ccontext, PCRE2_NEWLINE_ANY);\n\t\t}\n\n\t\tif (result) {\n\t\t\tsuccessful++;\n\t\t}\n\n\t\tprintf(\".\");\n\t\tif ((total % 60) == 0)\n\t\t\tprintf(\"\\n\");\n\t}\n\n\tif ((total % 60) != 0)\n\t\tprintf(\"\\n\");\n\n\tpcre2_match_data_free_8(mdata);\n\tpcre2_compile_context_free_8(ccontext);\n\n\tif (total == successful) {\n\t\tprintf(\"\\nAll invalid UTF8 JIT regression tests are successfully passed.\\n\");\n\t\treturn 0;\n\t} else {\n\t\tprintf(\"\\nInvalid UTF8 successful test ratio: %d%% (%d failed)\\n\", successful * 100 / total, total - successful);\n\t\treturn 1;\n\t}\n}\n\n#else /* !SUPPORT_UNICODE || !SUPPORT_PCRE2_8 */\n\nstatic int invalid_utf8_regression_tests(void)\n{\n\treturn 0;\n}\n\n#endif /* SUPPORT_UNICODE && SUPPORT_PCRE2_8 */\n\n#if defined SUPPORT_UNICODE && defined SUPPORT_PCRE2_16\n\n#define UDA (PCRE2_UTF | PCRE2_DOTALL | PCRE2_ANCHORED)\n#define CI (PCRE2_JIT_COMPLETE | PCRE2_JIT_INVALID_UTF)\n#define CPI (PCRE2_JIT_COMPLETE | PCRE2_JIT_PARTIAL_SOFT | PCRE2_JIT_INVALID_UTF)\n\nstruct invalid_utf16_regression_test_case {\n\tuint32_t compile_options;\n\tint jit_compile_options;\n\tint start_offset;\n\tint skip_left;\n\tint skip_right;\n\tint match_start;\n\tint match_end;\n\tconst PCRE2_UCHAR16 *pattern[2];\n\tconst PCRE2_UCHAR16 *input;\n};\n\nstatic PCRE2_UCHAR16 allany16[] = { '.', 0 };\nstatic PCRE2_UCHAR16 non_word_boundary16[] = { '\\\\', 'B', 0 };\nstatic PCRE2_UCHAR16 word_boundary16[] = { '\\\\', 'b', 0 };\nstatic PCRE2_UCHAR16 backreference16[] = { '(', '.', ')', '\\\\', '1', 0 };\nstatic PCRE2_UCHAR16 grapheme16[] = { '\\\\', 'X', 0 };\nstatic PCRE2_UCHAR16 nothashmark16[] = { '[', '^', '#', ']', 0 };\nstatic PCRE2_UCHAR16 afternl16[] = { '^', '\\\\', 'W', 0 };\nstatic PCRE2_UCHAR16 generic16[] = { '#', 0xd800, 0xdc00, '#', 0 };\nstatic PCRE2_UCHAR16 test16_1[] = { 0xd7ff, 0xe000, 0xffff, 0x01, '#', 0 };\nstatic PCRE2_UCHAR16 test16_2[] = { 0xd800, 0xdc00, 0xd800, 0xdc00, 0 };\nstatic PCRE2_UCHAR16 test16_3[] = { 0xdbff, 0xdfff, 0xdbff, 0xdfff, 0 };\nstatic PCRE2_UCHAR16 test16_4[] = { 0xd800, 0xdbff, 0xd800, 0xdbff, 0 };\nstatic PCRE2_UCHAR16 test16_5[] = { '#', 0xd800, 0xdc00, '#', 0 };\nstatic PCRE2_UCHAR16 test16_6[] = { 'a', 'A', 0xdc28, 0 };\nstatic PCRE2_UCHAR16 test16_7[] = { 0xd801, 0xdc00, 0xd801, 0xdc28, 0 };\nstatic PCRE2_UCHAR16 test16_8[] = { '#', 0xd800, 0xdc00, 0 };\nstatic PCRE2_UCHAR16 test16_9[] = { ' ', 0x2028, '#', 0 };\nstatic PCRE2_UCHAR16 test16_10[] = { ' ', 0xdc00, 0xd800, 0x2028, '#', 0 };\nstatic PCRE2_UCHAR16 test16_11[] = { 0xdc00, 0xdc00, 0xd800, 0xdc00, 0xdc00, '#', 0xd800, 0xdc00, '#', 0 };\nstatic PCRE2_UCHAR16 test16_12[] = { '#', 0xd800, 0xdc00, 0xd800, '#', 0xd800, 0xdc00, 0xdc00, 0xdc00, '#', 0xd800, 0xdc00, '#', 0 };\n\nstatic const struct invalid_utf16_regression_test_case invalid_utf16_regression_test_cases[] = {\n\t{ UDA, CI, 0, 0, 0, 0, 1, { allany16, NULL }, test16_1 },\n\t{ UDA, CI, 1, 0, 0, 1, 2, { allany16, NULL }, test16_1 },\n\t{ UDA, CI, 2, 0, 0, 2, 3, { allany16, NULL }, test16_1 },\n\t{ UDA, CI, 3, 0, 0, 3, 4, { allany16, NULL }, test16_1 },\n\t{ UDA, CI, 0, 0, 0, 0, 2, { allany16, NULL }, test16_2 },\n\t{ UDA, CI, 0, 0, 3, -1, -1, { allany16, NULL }, test16_2 },\n\t{ UDA, CI, 1, 0, 0, -1, -1, { allany16, NULL }, test16_2 },\n\t{ UDA, CI, 0, 0, 0, 0, 2, { allany16, NULL }, test16_3 },\n\t{ UDA, CI, 0, 0, 3, -1, -1, { allany16, NULL }, test16_3 },\n\t{ UDA, CI, 1, 0, 0, -1, -1, { allany16, NULL }, test16_3 },\n\n\t{ UDA, CPI, 1, 0, 0, 1, 1, { non_word_boundary16, NULL }, test16_1 },\n\t{ UDA, CPI, 2, 0, 0, 2, 2, { non_word_boundary16, NULL }, test16_1 },\n\t{ UDA, CPI, 3, 0, 0, 3, 3, { non_word_boundary16, NULL }, test16_1 },\n\t{ UDA, CPI, 4, 0, 0, 4, 4, { non_word_boundary16, NULL }, test16_1 },\n\t{ UDA, CPI, 2, 0, 0, 2, 2, { non_word_boundary16, NULL }, test16_2 },\n\t{ UDA, CPI, 2, 0, 0, 2, 2, { non_word_boundary16, NULL }, test16_3 },\n\t{ UDA, CPI, 2, 1, 1, -1, -1, { non_word_boundary16, word_boundary16 }, test16_2 },\n\t{ UDA, CPI, 2, 1, 1, -1, -1, { non_word_boundary16, word_boundary16 }, test16_3 },\n\t{ UDA, CPI, 2, 0, 0, -1, -1, { non_word_boundary16, word_boundary16 }, test16_4 },\n\t{ UDA, CPI, 2, 0, 0, -1, -1, { non_word_boundary16, word_boundary16 }, test16_5 },\n\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 0, 0, 2, { backreference16, NULL }, test16_6 },\n\t{ UDA | PCRE2_CASELESS, CPI, 1, 0, 0, -1, -1, { backreference16, NULL }, test16_6 },\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 0, 0, 4, { backreference16, NULL }, test16_7 },\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 1, -1, -1, { backreference16, NULL }, test16_7 },\n\n\t{ UDA, CPI, 0, 0, 0, 0, 1, { grapheme16, NULL }, test16_6 },\n\t{ UDA, CPI, 1, 0, 0, 1, 2, { grapheme16, NULL }, test16_6 },\n\t{ UDA, CPI, 2, 0, 0, -1, -1, { grapheme16, NULL }, test16_6 },\n\t{ UDA, CPI, 0, 0, 0, 0, 2, { grapheme16, NULL }, test16_7 },\n\t{ UDA, CPI, 2, 0, 0, 2, 4, { grapheme16, NULL }, test16_7 },\n\t{ UDA, CPI, 1, 0, 0, -1, -1, { grapheme16, NULL }, test16_7 },\n\n\t{ UDA, CPI, 0, 0, 0, -1, -1, { nothashmark16, NULL }, test16_8 },\n\t{ UDA, CPI, 1, 0, 0, 1, 3, { nothashmark16, NULL }, test16_8 },\n\t{ UDA, CPI, 2, 0, 0, -1, -1, { nothashmark16, NULL }, test16_8 },\n\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 2, 3, { afternl16, NULL }, test16_9 },\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 4, 5, { afternl16, NULL }, test16_10 },\n\n\t{ PCRE2_UTF | PCRE2_NO_START_OPTIMIZE, CI, 0, 0, 0, 5, 9, { generic16, NULL }, test16_11 },\n\t{ PCRE2_UTF | PCRE2_NO_START_OPTIMIZE, CI, 0, 0, 0, 9, 13, { generic16, NULL }, test16_12 },\n\t{ PCRE2_UTF, CI, 0, 0, 0, 5, 9, { generic16, NULL }, test16_11 },\n\t{ PCRE2_UTF, CI, 0, 0, 0, 9, 13, { generic16, NULL }, test16_12 },\n\n\t{ 0, 0, 0, 0, 0, 0, 0, { NULL, NULL }, NULL }\n};\n\n#undef UDA\n#undef CI\n#undef CPI\n\nstatic int run_invalid_utf16_test(const struct invalid_utf16_regression_test_case *current,\n\tint pattern_index, int i, pcre2_compile_context_16 *ccontext, pcre2_match_data_16 *mdata)\n{\n\tpcre2_code_16 *code;\n\tint result, errorcode;\n\tPCRE2_SIZE length, erroroffset;\n\tconst PCRE2_UCHAR16 *input;\n\tPCRE2_SIZE *ovector = pcre2_get_ovector_pointer_16(mdata);\n\n\tif (current->pattern[i] == NULL)\n\t\treturn 1;\n\n\tcode = pcre2_compile_16(current->pattern[i], PCRE2_ZERO_TERMINATED,\n\t\tcurrent->compile_options, &errorcode, &erroroffset, ccontext);\n\n\tif (!code) {\n\t\tprintf(\"Pattern[%d:0] cannot be compiled. Error offset: %d\\n\", pattern_index, (int)erroroffset);\n\t\treturn 0;\n\t}\n\n\tif (pcre2_jit_compile_16(code, current->jit_compile_options) != 0) {\n\t\tprintf(\"Pattern[%d:0] cannot be compiled by the JIT compiler.\\n\", pattern_index);\n\t\tpcre2_code_free_16(code);\n\t\treturn 0;\n\t}\n\n\tinput = current->input;\n\tlength = 0;\n\n\twhile (*input++ != 0)\n\t\tlength++;\n\n\tlength -= current->skip_left + current->skip_right;\n\n\tif (current->jit_compile_options & PCRE2_JIT_COMPLETE) {\n\t\tresult = pcre2_jit_match_16(code, (current->input + current->skip_left),\n\t\t\tlength, current->start_offset - current->skip_left, 0, mdata, NULL);\n\n\t\tif (check_invalid_utf_result(pattern_index, \"match\", result, current->match_start, current->match_end, ovector)) {\n\t\t\tpcre2_code_free_16(code);\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tif (current->jit_compile_options & PCRE2_JIT_PARTIAL_SOFT) {\n\t\tresult = pcre2_jit_match_16(code, (current->input + current->skip_left),\n\t\t\tlength, current->start_offset - current->skip_left, PCRE2_PARTIAL_SOFT, mdata, NULL);\n\n\t\tif (check_invalid_utf_result(pattern_index, \"partial match\", result, current->match_start, current->match_end, ovector)) {\n\t\t\tpcre2_code_free_16(code);\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tpcre2_code_free_16(code);\n\treturn 1;\n}\n\nstatic int invalid_utf16_regression_tests(void)\n{\n\tconst struct invalid_utf16_regression_test_case *current;\n\tpcre2_compile_context_16 *ccontext;\n\tpcre2_match_data_16 *mdata;\n\tint total = 0, successful = 0;\n\tint result;\n\n\tprintf(\"\\nRunning invalid-utf16 JIT regression tests\\n\");\n\n\tccontext = pcre2_compile_context_create_16(NULL);\n\tpcre2_set_newline_16(ccontext, PCRE2_NEWLINE_ANY);\n\tmdata = pcre2_match_data_create_16(4, NULL);\n\n\tfor (current = invalid_utf16_regression_test_cases; current->pattern[0]; current++) {\n\t\t/* printf(\"\\nPattern: %s :\\n\", current->pattern); */\n\t\ttotal++;\n\n\t\tresult = 1;\n\t\tif (!run_invalid_utf16_test(current, total - 1, 0, ccontext, mdata))\n\t\t\tresult = 0;\n\t\tif (!run_invalid_utf16_test(current, total - 1, 1, ccontext, mdata))\n\t\t\tresult = 0;\n\n\t\tif (result) {\n\t\t\tsuccessful++;\n\t\t}\n\n\t\tprintf(\".\");\n\t\tif ((total % 60) == 0)\n\t\t\tprintf(\"\\n\");\n\t}\n\n\tif ((total % 60) != 0)\n\t\tprintf(\"\\n\");\n\n\tpcre2_match_data_free_16(mdata);\n\tpcre2_compile_context_free_16(ccontext);\n\n\tif (total == successful) {\n\t\tprintf(\"\\nAll invalid UTF16 JIT regression tests are successfully passed.\\n\");\n\t\treturn 0;\n\t} else {\n\t\tprintf(\"\\nInvalid UTF16 successful test ratio: %d%% (%d failed)\\n\", successful * 100 / total, total - successful);\n\t\treturn 1;\n\t}\n}\n\n#else /* !SUPPORT_UNICODE || !SUPPORT_PCRE2_16 */\n\nstatic int invalid_utf16_regression_tests(void)\n{\n\treturn 0;\n}\n\n#endif /* SUPPORT_UNICODE && SUPPORT_PCRE2_16 */\n\n#if defined SUPPORT_UNICODE && defined SUPPORT_PCRE2_32\n\n#define UDA (PCRE2_UTF | PCRE2_DOTALL | PCRE2_ANCHORED)\n#define CI (PCRE2_JIT_COMPLETE | PCRE2_JIT_INVALID_UTF)\n#define CPI (PCRE2_JIT_COMPLETE | PCRE2_JIT_PARTIAL_SOFT | PCRE2_JIT_INVALID_UTF)\n\nstruct invalid_utf32_regression_test_case {\n\tuint32_t compile_options;\n\tint jit_compile_options;\n\tint start_offset;\n\tint skip_left;\n\tint skip_right;\n\tint match_start;\n\tint match_end;\n\tconst PCRE2_UCHAR32 *pattern[2];\n\tconst PCRE2_UCHAR32 *input;\n};\n\nstatic PCRE2_UCHAR32 allany32[] = { '.', 0 };\nstatic PCRE2_UCHAR32 non_word_boundary32[] = { '\\\\', 'B', 0 };\nstatic PCRE2_UCHAR32 word_boundary32[] = { '\\\\', 'b', 0 };\nstatic PCRE2_UCHAR32 backreference32[] = { '(', '.', ')', '\\\\', '1', 0 };\nstatic PCRE2_UCHAR32 grapheme32[] = { '\\\\', 'X', 0 };\nstatic PCRE2_UCHAR32 nothashmark32[] = { '[', '^', '#', ']', 0 };\nstatic PCRE2_UCHAR32 afternl32[] = { '^', '\\\\', 'W', 0 };\nstatic PCRE2_UCHAR32 test32_1[] = { 0x10ffff, 0x10ffff, 0x110000, 0x110000, 0x10ffff, 0 };\nstatic PCRE2_UCHAR32 test32_2[] = { 0xd7ff, 0xe000, 0xd800, 0xdfff, 0xe000, 0xdfff, 0xd800, 0 };\nstatic PCRE2_UCHAR32 test32_3[] = { 'a', 'A', 0x110000, 0 };\nstatic PCRE2_UCHAR32 test32_4[] = { '#', 0x10ffff, 0x110000, 0 };\nstatic PCRE2_UCHAR32 test32_5[] = { ' ', 0x2028, '#', 0 };\nstatic PCRE2_UCHAR32 test32_6[] = { ' ', 0x110000, 0x2028, '#', 0 };\n\nstatic const struct invalid_utf32_regression_test_case invalid_utf32_regression_test_cases[] = {\n\t{ UDA, CI, 0, 0, 0, 0, 1, { allany32, NULL }, test32_1 },\n\t{ UDA, CI, 2, 0, 0, -1, -1, { allany32, NULL }, test32_1 },\n\t{ UDA, CI, 0, 0, 0, 0, 1, { allany32, NULL }, test32_2 },\n\t{ UDA, CI, 1, 0, 0, 1, 2, { allany32, NULL }, test32_2 },\n\t{ UDA, CI, 2, 0, 0, -1, -1, { allany32, NULL }, test32_2 },\n\t{ UDA, CI, 3, 0, 0, -1, -1, { allany32, NULL }, test32_2 },\n\n\t{ UDA, CPI, 1, 0, 0, 1, 1, { non_word_boundary32, NULL }, test32_1 },\n\t{ UDA, CPI, 3, 0, 0, -1, -1, { non_word_boundary32, word_boundary32 }, test32_1 },\n\t{ UDA, CPI, 1, 0, 0, 1, 1, { non_word_boundary32, NULL }, test32_2 },\n\t{ UDA, CPI, 3, 0, 0, -1, -1, { non_word_boundary32, word_boundary32 }, test32_2 },\n\t{ UDA, CPI, 6, 0, 0, -1, -1, { non_word_boundary32, word_boundary32 }, test32_2 },\n\n\t{ UDA | PCRE2_CASELESS, CPI, 0, 0, 0, 0, 2, { backreference32, NULL }, test32_3 },\n\t{ UDA | PCRE2_CASELESS, CPI, 1, 0, 0, -1, -1, { backreference32, NULL }, test32_3 },\n\n\t{ UDA, CPI, 0, 0, 0, 0, 1, { grapheme32, NULL }, test32_1 },\n\t{ UDA, CPI, 2, 0, 0, -1, -1, { grapheme32, NULL }, test32_1 },\n\t{ UDA, CPI, 1, 0, 0, 1, 2, { grapheme32, NULL }, test32_2 },\n\t{ UDA, CPI, 2, 0, 0, -1, -1, { grapheme32, NULL }, test32_2 },\n\t{ UDA, CPI, 3, 0, 0, -1, -1, { grapheme32, NULL }, test32_2 },\n\t{ UDA, CPI, 4, 0, 0, 4, 5, { grapheme32, NULL }, test32_2 },\n\n\t{ UDA, CPI, 0, 0, 0, -1, -1, { nothashmark32, NULL }, test32_4 },\n\t{ UDA, CPI, 1, 0, 0, 1, 2, { nothashmark32, NULL }, test32_4 },\n\t{ UDA, CPI, 2, 0, 0, -1, -1, { nothashmark32, NULL }, test32_4 },\n\t{ UDA, CPI, 1, 0, 0, 1, 2, { nothashmark32, NULL }, test32_2 },\n\t{ UDA, CPI, 2, 0, 0, -1, -1, { nothashmark32, NULL }, test32_2 },\n\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 2, 3, { afternl32, NULL }, test32_5 },\n\t{ PCRE2_UTF | PCRE2_MULTILINE, CI, 1, 0, 0, 3, 4, { afternl32, NULL }, test32_6 },\n\n\t{ 0, 0, 0, 0, 0, 0, 0, { NULL, NULL }, NULL }\n};\n\n#undef UDA\n#undef CI\n#undef CPI\n\nstatic int run_invalid_utf32_test(const struct invalid_utf32_regression_test_case *current,\n\tint pattern_index, int i, pcre2_compile_context_32 *ccontext, pcre2_match_data_32 *mdata)\n{\n\tpcre2_code_32 *code;\n\tint result, errorcode;\n\tPCRE2_SIZE length, erroroffset;\n\tconst PCRE2_UCHAR32 *input;\n\tPCRE2_SIZE *ovector = pcre2_get_ovector_pointer_32(mdata);\n\n\tif (current->pattern[i] == NULL)\n\t\treturn 1;\n\n\tcode = pcre2_compile_32(current->pattern[i], PCRE2_ZERO_TERMINATED,\n\t\tcurrent->compile_options, &errorcode, &erroroffset, ccontext);\n\n\tif (!code) {\n\t\tprintf(\"Pattern[%d:0] cannot be compiled. Error offset: %d\\n\", pattern_index, (int)erroroffset);\n\t\treturn 0;\n\t}\n\n\tif (pcre2_jit_compile_32(code, current->jit_compile_options) != 0) {\n\t\tprintf(\"Pattern[%d:0] cannot be compiled by the JIT compiler.\\n\", pattern_index);\n\t\tpcre2_code_free_32(code);\n\t\treturn 0;\n\t}\n\n\tinput = current->input;\n\tlength = 0;\n\n\twhile (*input++ != 0)\n\t\tlength++;\n\n\tlength -= current->skip_left + current->skip_right;\n\n\tif (current->jit_compile_options & PCRE2_JIT_COMPLETE) {\n\t\tresult = pcre2_jit_match_32(code, (current->input + current->skip_left),\n\t\t\tlength, current->start_offset - current->skip_left, 0, mdata, NULL);\n\n\t\tif (check_invalid_utf_result(pattern_index, \"match\", result, current->match_start, current->match_end, ovector)) {\n\t\t\tpcre2_code_free_32(code);\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tif (current->jit_compile_options & PCRE2_JIT_PARTIAL_SOFT) {\n\t\tresult = pcre2_jit_match_32(code, (current->input + current->skip_left),\n\t\t\tlength, current->start_offset - current->skip_left, PCRE2_PARTIAL_SOFT, mdata, NULL);\n\n\t\tif (check_invalid_utf_result(pattern_index, \"partial match\", result, current->match_start, current->match_end, ovector)) {\n\t\t\tpcre2_code_free_32(code);\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tpcre2_code_free_32(code);\n\treturn 1;\n}\n\nstatic int invalid_utf32_regression_tests(void)\n{\n\tconst struct invalid_utf32_regression_test_case *current;\n\tpcre2_compile_context_32 *ccontext;\n\tpcre2_match_data_32 *mdata;\n\tint total = 0, successful = 0;\n\tint result;\n\n\tprintf(\"\\nRunning invalid-utf32 JIT regression tests\\n\");\n\n\tccontext = pcre2_compile_context_create_32(NULL);\n\tpcre2_set_newline_32(ccontext, PCRE2_NEWLINE_ANY);\n\tmdata = pcre2_match_data_create_32(4, NULL);\n\n\tfor (current = invalid_utf32_regression_test_cases; current->pattern[0]; current++) {\n\t\t/* printf(\"\\nPattern: %s :\\n\", current->pattern); */\n\t\ttotal++;\n\n\t\tresult = 1;\n\t\tif (!run_invalid_utf32_test(current, total - 1, 0, ccontext, mdata))\n\t\t\tresult = 0;\n\t\tif (!run_invalid_utf32_test(current, total - 1, 1, ccontext, mdata))\n\t\t\tresult = 0;\n\n\t\tif (result) {\n\t\t\tsuccessful++;\n\t\t}\n\n\t\tprintf(\".\");\n\t\tif ((total % 60) == 0)\n\t\t\tprintf(\"\\n\");\n\t}\n\n\tif ((total % 60) != 0)\n\t\tprintf(\"\\n\");\n\n\tpcre2_match_data_free_32(mdata);\n\tpcre2_compile_context_free_32(ccontext);\n\n\tif (total == successful) {\n\t\tprintf(\"\\nAll invalid UTF32 JIT regression tests are successfully passed.\\n\");\n\t\treturn 0;\n\t} else {\n\t\tprintf(\"\\nInvalid UTF32 successful test ratio: %d%% (%d failed)\\n\", successful * 100 / total, total - successful);\n\t\treturn 1;\n\t}\n}\n\n#else /* !SUPPORT_UNICODE || !SUPPORT_PCRE2_32 */\n\nstatic int invalid_utf32_regression_tests(void)\n{\n\treturn 0;\n}\n\n#endif /* SUPPORT_UNICODE && SUPPORT_PCRE2_32 */\n\n/* End of pcre2_jit_test.c */\n"
  },
  {
    "path": "src/pcre2_maketables.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains the external function pcre2_maketables(), which builds\ncharacter tables for PCRE2 in the current locale. The file is compiled on its\nown as part of the PCRE2 library. It is also included in the compilation of\npcre2_dftables.c as a freestanding program, in which case the macro\nPCRE2_DFTABLES is defined. */\n\n\n#ifndef PCRE2_DFTABLES    /* Compiling the library */\n#include \"pcre2_internal.h\"\n#endif\n\n\n\n/*************************************************\n*           Create PCRE2 character tables        *\n*************************************************/\n\n/* This function builds a set of character tables for use by PCRE2 and returns\na pointer to them. They are build using the ctype functions, and consequently\ntheir contents will depend upon the current locale setting. When compiled as\npart of the library, the store is obtained via a general context malloc, if\nsupplied, but when PCRE2_DFTABLES is defined (when compiling the pcre2_dftables\nfreestanding auxiliary program) malloc() is used, and the function has a\ndifferent name so as not to clash with the prototype in pcre2.h.\n\nArguments:   pointers to character-transforming functions when PCRE2_DFTABLES is\n             defined;\n               else a PCRE2 general context or NULL\nReturns:     pointer to the contiguous block of data;\n               else NULL if memory allocation failed\n*/\n\n#ifdef PCRE2_DFTABLES  /* Included in freestanding pcre2_dftables program */\nstatic const uint8_t *maketables(int (*charfn_to)(int), int (*charfn_from)(int))\n{\nuint8_t *yield = (uint8_t *)malloc(TABLES_LENGTH);\n\n#else  /* Not PCRE2_DFTABLES, that is, compiling the library */\nPCRE2_EXP_DEFN const uint8_t * PCRE2_CALL_CONVENTION\npcre2_maketables(pcre2_general_context *gcontext)\n{\nuint8_t *yield = (uint8_t *)((gcontext != NULL)?\n  gcontext->memctl.malloc(TABLES_LENGTH, gcontext->memctl.memory_data) :\n  malloc(TABLES_LENGTH));\n\n#define charfn_to(c)    (c)\n#define charfn_from(c)  (c)\n#endif  /* PCRE2_DFTABLES */\n\nint i;\nuint8_t *p;\n\nif (yield == NULL) return NULL;\np = yield;\n\n/* First comes the lower casing table */\n\nfor (i = 0; i < 256; i++)\n  {\n  int c = charfn_from(tolower(charfn_to(i)));\n  *p++ = (c < 256)? c : i;\n  }\n\n/* Next the case-flipping table */\n\nfor (i = 0; i < 256; i++)\n  {\n  int c = charfn_from(islower(charfn_to(i))? toupper(charfn_to(i))\n                                           : tolower(charfn_to(i)));\n  *p++ = (c < 256)? c : i;\n  }\n\n/* Then the character class tables. Don't try to be clever and save effort on\nexclusive ones - in some locales things may be different.\n\nNote that the table for \"space\" includes everything \"isspace\" gives, including\nVT in the default locale. This makes it work for the POSIX class [:space:].\nFrom PCRE1 release 8.34 and for all PCRE2 releases it is also correct for Perl\nspace, because Perl added VT at release 5.18.\n\nNote also that it is possible for a character to be alnum or alpha without\nbeing lower or upper, such as \"male and female ordinals\" (\\xAA and \\xBA) in the\nfr_FR locale (at least under Debian Linux's locales as of 12/2005). So we must\ntest for alnum specially. */\n\nmemset(p, 0, cbit_length);\nfor (i = 0; i < 256; i++)\n  {\n  if (isdigit(charfn_to(i)))  p[cbit_digit  + i/8] |= 1u << (i&7);\n  if (isupper(charfn_to(i)))  p[cbit_upper  + i/8] |= 1u << (i&7);\n  if (islower(charfn_to(i)))  p[cbit_lower  + i/8] |= 1u << (i&7);\n  if (isalnum(charfn_to(i)))  p[cbit_word   + i/8] |= 1u << (i&7);\n  if (i == CHAR_UNDERSCORE)   p[cbit_word   + i/8] |= 1u << (i&7);\n  if (isspace(charfn_to(i)))  p[cbit_space  + i/8] |= 1u << (i&7);\n  if (isxdigit(charfn_to(i))) p[cbit_xdigit + i/8] |= 1u << (i&7);\n  if (isgraph(charfn_to(i)))  p[cbit_graph  + i/8] |= 1u << (i&7);\n  if (isprint(charfn_to(i)))  p[cbit_print  + i/8] |= 1u << (i&7);\n  if (ispunct(charfn_to(i)))  p[cbit_punct  + i/8] |= 1u << (i&7);\n  if (iscntrl(charfn_to(i)))  p[cbit_cntrl  + i/8] |= 1u << (i&7);\n  }\np += cbit_length;\n\n/* Finally, the character type table. In this, we used to exclude VT from the\nwhite space chars, because Perl didn't recognize it as such for \\s and for\ncomments within regexes. However, Perl changed at release 5.18, so PCRE1\nchanged at release 8.34 and it's always been this way for PCRE2. */\n\nfor (i = 0; i < 256; i++)\n  {\n  int x = 0;\n  if (isspace(charfn_to(i))) x += ctype_space;\n  if (isalpha(charfn_to(i))) x += ctype_letter;\n  if (islower(charfn_to(i))) x += ctype_lcletter;\n  if (isdigit(charfn_to(i))) x += ctype_digit;\n  if (isalnum(charfn_to(i)) || i == CHAR_UNDERSCORE) x += ctype_word;\n  *p++ = x;\n  }\n\nreturn yield;\n}\n\n#ifndef PCRE2_DFTABLES   /* Compiling the library */\n#undef charfn_to\n#undef charfn_from\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_maketables_free(pcre2_general_context *gcontext, const uint8_t *tables)\n{\nif (gcontext != NULL)\n  gcontext->memctl.free((void *)tables, gcontext->memctl.memory_data);\nelse\n  free((void *)tables);\n}\n#endif\n\n/* End of pcre2_maketables.c */\n"
  },
  {
    "path": "src/pcre2_match.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2015-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/* These defines enable debugging code */\n\n/* #define DEBUG_FRAMES_DISPLAY */\n/* #define DEBUG_SHOW_OPS */\n/* #define DEBUG_SHOW_RMATCH */\n\n#ifdef DEBUG_FRAMES_DISPLAY\n#include <stdarg.h>\n#endif\n\n#ifdef DEBUG_SHOW_OPS\nstatic const char *OP_names[] = { OP_NAME_LIST };\n#endif\n\n/* These defines identify the name of the block containing \"static\"\ninformation, and fields within it. */\n\n#define NLBLOCK mb              /* Block containing newline information */\n#define PSSTART start_subject   /* Field containing processed string start */\n#define PSEND   end_subject     /* Field containing processed string end */\n\n#define RECURSE_UNSET 0xffffffffu  /* Bigger than max group number */\n\n/* Masks for identifying the public options that are permitted at match time. */\n\n#define PUBLIC_MATCH_OPTIONS \\\n  (PCRE2_ANCHORED|PCRE2_ENDANCHORED|PCRE2_NOTBOL|PCRE2_NOTEOL|PCRE2_NOTEMPTY| \\\n   PCRE2_NOTEMPTY_ATSTART|PCRE2_NO_UTF_CHECK|PCRE2_PARTIAL_HARD| \\\n   PCRE2_PARTIAL_SOFT|PCRE2_NO_JIT|PCRE2_COPY_MATCHED_SUBJECT| \\\n   PCRE2_DISABLE_RECURSELOOP_CHECK)\n\n#define PUBLIC_JIT_MATCH_OPTIONS \\\n   (PCRE2_NO_UTF_CHECK|PCRE2_NOTBOL|PCRE2_NOTEOL|PCRE2_NOTEMPTY|\\\n    PCRE2_NOTEMPTY_ATSTART|PCRE2_PARTIAL_SOFT|PCRE2_PARTIAL_HARD|\\\n    PCRE2_COPY_MATCHED_SUBJECT)\n\n/* Non-error returns from and within the match() function. Error returns are\nexternally defined PCRE2_ERROR_xxx codes, which are all negative. */\n\n#define MATCH_MATCH        1\n#define MATCH_NOMATCH      0\n\n/* Special internal returns used in the match() function. Make them\nsufficiently negative to avoid the external error codes. */\n\n#define MATCH_ACCEPT       (-999)\n#define MATCH_KETRPOS      (-998)\n/* The next 5 must be kept together and in sequence so that a test that checks\nfor any one of them can use a range. */\n#define MATCH_COMMIT       (-997)\n#define MATCH_PRUNE        (-996)\n#define MATCH_SKIP         (-995)\n#define MATCH_SKIP_ARG     (-994)\n#define MATCH_THEN         (-993)\n#define MATCH_BACKTRACK_MAX MATCH_THEN\n#define MATCH_BACKTRACK_MIN MATCH_COMMIT\n\n/* Group frame type values. Zero means the frame is not a group frame. The\nlower 16 bits are used for data (e.g. the capture number). Group frames are\nused for most groups so that information about the start is easily available at\nthe end without having to scan back through intermediate frames (backtrack\npoints). */\n\n#define GF_CAPTURE     0x00010000u\n#define GF_NOCAPTURE   0x00020000u\n#define GF_CONDASSERT  0x00030000u\n#define GF_RECURSE     0x00040000u\n\n/* Masks for the identity and data parts of the group frame type. */\n\n#define GF_IDMASK(a)   ((a) & 0xffff0000u)\n#define GF_DATAMASK(a) ((a) & 0x0000ffffu)\n\n/* Repetition types */\n\nenum { REPTYPE_MIN, REPTYPE_MAX, REPTYPE_POS };\n\n/* Min and max values for the common repeats; a maximum of UINT32_MAX =>\ninfinity. */\n\nstatic const uint32_t rep_min[] = {\n  0, 0,       /* * and *? */\n  1, 1,       /* + and +? */\n  0, 0,       /* ? and ?? */\n  0, 0,       /* dummy placefillers for OP_CR[MIN]RANGE */\n  0, 1, 0 };  /* OP_CRPOS{STAR, PLUS, QUERY} */\n\nstatic const uint32_t rep_max[] = {\n  UINT32_MAX, UINT32_MAX,      /* * and *? */\n  UINT32_MAX, UINT32_MAX,      /* + and +? */\n  1, 1,                        /* ? and ?? */\n  0, 0,                        /* dummy placefillers for OP_CR[MIN]RANGE */\n  UINT32_MAX, UINT32_MAX, 1 }; /* OP_CRPOS{STAR, PLUS, QUERY} */\n\n/* Repetition types - must include OP_CRPOSRANGE (not needed above) */\n\nstatic const uint32_t rep_typ[] = {\n  REPTYPE_MAX, REPTYPE_MIN,    /* * and *? */\n  REPTYPE_MAX, REPTYPE_MIN,    /* + and +? */\n  REPTYPE_MAX, REPTYPE_MIN,    /* ? and ?? */\n  REPTYPE_MAX, REPTYPE_MIN,    /* OP_CRRANGE and OP_CRMINRANGE */\n  REPTYPE_POS, REPTYPE_POS,    /* OP_CRPOSSTAR, OP_CRPOSPLUS */\n  REPTYPE_POS, REPTYPE_POS };  /* OP_CRPOSQUERY, OP_CRPOSRANGE */\n\n/* Numbers for RMATCH calls at backtracking points. When these lists are\nchanged, the code at RETURN_SWITCH below must be updated in sync.  */\n\nenum { RM1=1, RM2,  RM3,  RM4,  RM5,  RM6,  RM7,  RM8,  RM9,  RM10,\n       RM11,  RM12, RM13, RM14, RM15, RM16, RM17, RM18, RM19, RM20,\n       RM21,  RM22, RM23, RM24, RM25, RM26, RM27, RM28, RM29, RM30,\n       RM31,  RM32, RM33, RM34, RM35, RM36, RM37, RM38, RM39 };\n\n#ifdef SUPPORT_WIDE_CHARS\nenum { RM100=100, RM101, RM102, RM103 };\n#endif\n\n#ifdef SUPPORT_UNICODE\nenum { RM200=200, RM201, RM202, RM203, RM204, RM205, RM206, RM207,\n       RM208,     RM209, RM210, RM211, RM212, RM213, RM214, RM215,\n       RM216,     RM217, RM218, RM219, RM220, RM221, RM222, RM223,\n       RM224 };\n#endif\n\n/* Define short names for general fields in the current backtrack frame, which\nis always pointed to by the F variable. Occasional references to fields in\nother frames are written out explicitly. There are also some fields in the\ncurrent frame that are used for short-term, localised backtracking memory.\nThese are members of the fields union and #defined with Lxxx names at the\npoint of use and undefined afterwards. */\n\n#define Fback_frame        F->back_frame\n#define Fcapture_last      F->capture_last\n#define Fcurrent_recurse   F->current_recurse\n#define Fecode             F->ecode\n#define Feptr              F->eptr\n#define Fgroup_frame_type  F->group_frame_type\n#define Flast_group_offset F->last_group_offset\n#define Fmark              F->mark\n#define Frdepth            F->rdepth\n#define Fstart_match       F->start_match\n#define Foffset_top        F->offset_top\n#define Fop                F->op\n#define Fovector           F->ovector\n#define Freturn_id         F->return_id\n\n\n#ifdef DEBUG_FRAMES_DISPLAY\n/*************************************************\n*      Display current frames and contents       *\n*************************************************/\n\n/* This debugging function displays the current set of frames and their\ncontents. It is not called automatically from anywhere, the intention being\nthat calls can be inserted where necessary when debugging frame-related\nproblems.\n\nArguments:\n  f           the file to write to\n  F           the current top frame\n  P           a previous frame of interest\n  frame_size  the frame size\n  mb          points to the match block\n  match_data  points to the match data block\n  s           identification text\n\nReturns:    nothing\n*/\n\nstatic void\ndisplay_frames(FILE *f, heapframe *F, heapframe *P, PCRE2_SIZE frame_size,\n  match_block *mb, pcre2_match_data *match_data, const char *s, ...)\n{\nuint32_t i;\nheapframe *Q;\nva_list ap;\nva_start(ap, s);\n\nfprintf(f, \"FRAMES \");\nvfprintf(f, s, ap);\nva_end(ap);\n\nif (P != NULL) fprintf(f, \" P=%lu\",\n  ((char *)P - (char *)(match_data->heapframes))/frame_size);\nfprintf(f, \"\\n\");\n\nfor (i = 0, Q = match_data->heapframes;\n     Q <= F;\n     i++, Q = (heapframe *)((char *)Q + frame_size))\n  {\n  fprintf(f, \"Frame %d type=%x subj=%lu code=%d back=%lu id=%d\",\n    i, Q->group_frame_type, Q->eptr - mb->start_subject, *(Q->ecode),\n    Q->back_frame, Q->return_id);\n\n  if (Q->last_group_offset == PCRE2_UNSET)\n    fprintf(f, \" lgoffset=unset\\n\");\n  else\n    fprintf(f, \" lgoffset=%lu\\n\",  Q->last_group_offset/frame_size);\n  }\n}\n\n#endif\n\n\n\n/*************************************************\n*                Process a callout               *\n*************************************************/\n\n/* This function is called for all callouts, whether \"standalone\" or at the\nstart of a conditional group. Feptr will be pointing to either OP_CALLOUT or\nOP_CALLOUT_STR. A callout block is allocated in pcre2_match() and initialized\nwith fixed values.\n\nArguments:\n  F          points to the current backtracking frame\n  mb         points to the match block\n  lengthptr  where to return the length of the callout item\n\nReturns:     the return from the callout\n             or 0 if no callout function exists\n*/\n\nstatic int\ndo_callout(heapframe *F, match_block *mb, PCRE2_SIZE *lengthptr)\n{\nint rc;\nPCRE2_SIZE save0, save1;\nPCRE2_SIZE *callout_ovector;\npcre2_callout_block *cb;\n\n*lengthptr = (*Fecode == OP_CALLOUT)?\n  PRIV(OP_lengths)[OP_CALLOUT] : GET(Fecode, 1 + 2*LINK_SIZE);\n\nif (mb->callout == NULL) return 0;   /* No callout function provided */\n\n/* The original matching code (pre 10.30) worked directly with the ovector\npassed by the user, and this was passed to callouts. Now that the working\novector is in the backtracking frame, it no longer needs to reserve space for\nthe overall match offsets (which would waste space in the frame). For backward\ncompatibility, however, we pass capture_top and offset_vector to the callout as\nif for the extended ovector, and we ensure that the first two slots are unset\nby preserving and restoring their current contents. Picky compilers complain if\nreferences such as Fovector[-2] are use directly, so we set up a separate\npointer. */\n\ncallout_ovector = (PCRE2_SIZE *)(Fovector) - 2;\n\n/* The cb->version, cb->subject, cb->subject_length, and cb->start_match fields\nare set externally. The first 3 never change; the last is updated for each\nbumpalong. */\n\ncb = mb->cb;\ncb->capture_top      = (uint32_t)Foffset_top/2 + 1;\ncb->capture_last     = Fcapture_last;\ncb->offset_vector    = callout_ovector;\ncb->mark             = mb->nomatch_mark;\ncb->current_position = (PCRE2_SIZE)(Feptr - mb->start_subject);\ncb->pattern_position = GET(Fecode, 1);\ncb->next_item_length = GET(Fecode, 1 + LINK_SIZE);\n\nif (*Fecode == OP_CALLOUT)  /* Numerical callout */\n  {\n  cb->callout_number = Fecode[1 + 2*LINK_SIZE];\n  cb->callout_string_offset = 0;\n  cb->callout_string = NULL;\n  cb->callout_string_length = 0;\n  }\nelse  /* String callout */\n  {\n  cb->callout_number = 0;\n  cb->callout_string_offset = GET(Fecode, 1 + 3*LINK_SIZE);\n  cb->callout_string = Fecode + (1 + 4*LINK_SIZE) + 1;\n  cb->callout_string_length =\n    *lengthptr - (1 + 4*LINK_SIZE) - 2;\n  }\n\nsave0 = callout_ovector[0];\nsave1 = callout_ovector[1];\ncallout_ovector[0] = callout_ovector[1] = PCRE2_UNSET;\nrc = mb->callout(cb, mb->callout_data);\ncallout_ovector[0] = save0;\ncallout_ovector[1] = save1;\ncb->callout_flags = 0;\nreturn rc;\n}\n\n\n\n/*************************************************\n*          Match a back-reference                *\n*************************************************/\n\n/* This function is called only when it is known that the offset lies within\nthe offsets that have so far been used in the match. Note that in caseless\nUTF-8 mode, the number of subject bytes matched may be different to the number\nof reference bytes. (In theory this could also happen in UTF-16 mode, but it\nseems unlikely.)\n\nArguments:\n  offset      index into the offset vector\n  caseless    TRUE if caseless\n  caseopts    bitmask of REFI_FLAG_XYZ values\n  F           the current backtracking frame pointer\n  mb          points to match block\n  lengthptr   pointer for returning the length matched\n\nReturns:      = 0 sucessful match; number of code units matched is set\n              < 0 no match\n              > 0 partial match\n*/\n\nstatic int\nmatch_ref(PCRE2_SIZE offset, BOOL caseless, int caseopts, heapframe *F,\n  match_block *mb, PCRE2_SIZE *lengthptr)\n{\nPCRE2_SPTR p;\nPCRE2_SIZE length;\nPCRE2_SPTR eptr;\nPCRE2_SPTR eptr_start;\n\n#ifndef SUPPORT_UNICODE\n(void)caseopts; /* Avoid compiler warning. */\n#endif\n\n/* Deal with an unset group. The default is no match, but there is an option to\nmatch an empty string. */\n\nif (offset >= Foffset_top || Fovector[offset] == PCRE2_UNSET)\n  {\n  if ((mb->poptions & PCRE2_MATCH_UNSET_BACKREF) != 0)\n    {\n    *lengthptr = 0;\n    return 0;      /* Match */\n    }\n  else return -1;  /* No match */\n  }\n\n/* Separate the caseless and UTF cases for speed. */\n\neptr = eptr_start = Feptr;\np = mb->start_subject + Fovector[offset];\nlength = Fovector[offset+1] - Fovector[offset];\nPCRE2_ASSERT(eptr <= mb->end_subject);\n\nif (caseless)\n  {\n#if defined SUPPORT_UNICODE\n  BOOL utf = (mb->poptions & PCRE2_UTF) != 0;\n  BOOL caseless_restrict = (caseopts & REFI_FLAG_CASELESS_RESTRICT) != 0;\n  BOOL turkish_casing = !caseless_restrict && (caseopts & REFI_FLAG_TURKISH_CASING) != 0;\n\n  if (utf || (mb->poptions & PCRE2_UCP) != 0)\n    {\n    PCRE2_SPTR endptr = p + length;\n\n    /* Match characters up to the end of the reference. NOTE: the number of\n    code units matched may differ, because in UTF-8 there are some characters\n    whose upper and lower case codes have different numbers of bytes. For\n    example, U+023A (2 bytes in UTF-8) is the upper case version of U+2C65 (3\n    bytes in UTF-8); a sequence of 3 of the former uses 6 bytes, as does a\n    sequence of two of the latter. It is important, therefore, to check the\n    length along the reference, not along the subject (earlier code did this\n    wrong). UCP uses Unicode properties but without UTF encoding. */\n\n    while (p < endptr)\n      {\n      uint32_t c, d;\n      const ucd_record *ur;\n      if (eptr >= mb->end_subject) return 1;   /* Partial match */\n\n      if (utf)\n        {\n        GETCHARINC(c, eptr);\n        GETCHARINC(d, p);\n        }\n      else\n        {\n        c = *eptr++;\n        d = *p++;\n        }\n\n      if (turkish_casing && UCD_ANY_I(d))\n        {\n        c = UCD_FOLD_I_TURKISH(c);\n        d = UCD_FOLD_I_TURKISH(d);\n        if (c != d) return -1;  /* No match */\n        }\n      else if (c != d && c != (uint32_t)((int)d + (ur = GET_UCD(d))->other_case))\n        {\n        const uint32_t *pp = PRIV(ucd_caseless_sets) + ur->caseset;\n\n        /* When PCRE2_EXTRA_CASELESS_RESTRICT is set, ignore any caseless sets\n        that start with an ASCII character. */\n        if (caseless_restrict && *pp < 128) return -1;  /* No match */\n\n        for (;;)\n          {\n          if (c < *pp) return -1;  /* No match */\n          if (c == *pp++) break;\n          }\n        }\n      }\n    }\n  else\n#endif\n\n  /* Not in UTF or UCP mode */\n    {\n    for (; length > 0; length--)\n      {\n      uint32_t cc, cp;\n      if (eptr >= mb->end_subject) return 1;   /* Partial match */\n      cc = *eptr;\n      cp = *p;\n      if (TABLE_GET(cp, mb->lcc, cp) != TABLE_GET(cc, mb->lcc, cc))\n        return -1;  /* No match */\n      p++;\n      eptr++;\n      }\n    }\n  }\n\n/* In the caseful case, we can just compare the code units, whether or not we\nare in UTF and/or UCP mode. When partial matching, we have to do this unit by\nunit. */\n\nelse\n  {\n  if (mb->partial != 0)\n    {\n    for (; length > 0; length--)\n      {\n      if (eptr >= mb->end_subject) return 1;   /* Partial match */\n      if (*p++ != *eptr++) return -1;  /* No match */\n      }\n    }\n\n  /* Not partial matching */\n\n  else\n    {\n    if ((PCRE2_SIZE)(mb->end_subject - eptr) < length ||\n        memcmp(p, eptr, CU2BYTES(length)) != 0) return -1;  /* No match */\n    eptr += length;\n    }\n  }\n\n*lengthptr = eptr - eptr_start;\nreturn 0;  /* Match */\n}\n\n\n\n/*************************************************\n*     Restore offsets after a recurse            *\n*************************************************/\n\n/* This function restores the ovector values when\na recursive block reaches its end, and the triggering\nrecurse has and argument list.\n\nArguments:\n  F           the current backtracking frame pointer\n  P           the previous backtracking frame pointer\n*/\n\nstatic void\nrecurse_update_offsets(heapframe *F, heapframe *P)\n{\nPCRE2_SIZE *dst = F->ovector;\nPCRE2_SIZE *src = P->ovector;\n/* The first bracket has offset 2, because\noffset 0 is reserved for the full match. */\nPCRE2_SIZE offset = 2;\nPCRE2_SIZE offset_top = Foffset_top + 2;\nPCRE2_SIZE diff;\nPCRE2_SPTR ecode = Fecode;\n\ndo\n  {\n  diff = (GET2(ecode, 1) << 1) - offset;\n  ecode += 1 + IMM2_SIZE;\n\n  if (offset + diff >= offset_top)\n    {\n    /* Some OP_CREF opcodes are not\n    processed, they must be skipped. */\n    while (*ecode == OP_CREF) ecode += 1 + IMM2_SIZE;\n    break;\n    }\n\n  if (diff == 2)\n    {\n    dst[0] = src[0];\n    dst[1] = src[1];\n    }\n  else if (diff >= 4)\n    memcpy(dst, src, diff * sizeof(PCRE2_SIZE));\n\n  /* Skip the unmodified entry. */\n  diff += 2;\n  offset += diff;\n  dst += diff;\n  src += diff;\n  }\nwhile (*ecode == OP_CREF);\n\ndiff = offset_top - offset;\nif (diff == 2)\n  {\n  dst[0] = src[0];\n  dst[1] = src[1];\n  }\nelse if (diff >= 4)\n  memcpy(dst, src, diff * sizeof(PCRE2_SIZE));\n\nFecode = ecode;\nFoffset_top = (offset <= P->offset_top) ? P->offset_top : (offset - 2);\n}\n\n\n\n/******************************************************************************\n*******************************************************************************\n                   \"Recursion\" in the match() function\n\nThe original match() function was highly recursive, but this proved to be the\nsource of a number of problems over the years, mostly because of the relatively\nsmall system stacks that are commonly found. As new features were added to\npatterns, various kludges were invented to reduce the amount of stack used,\nmaking the code hard to understand in places.\n\nA version did exist that used individual frames on the heap instead of calling\nmatch() recursively, but this ran substantially slower. The current version is\na refactoring that uses a vector of frames to remember backtracking points.\nThis runs no slower, and possibly even a bit faster than the original recursive\nimplementation.\n\nAt first, an initial vector of size START_FRAMES_SIZE (enough for maybe 50\nframes) was allocated on the system stack. If this was not big enough, the heap\nwas used for a larger vector. However, it turns out that there are environments\nwhere taking as little as 20KiB from the system stack is an embarrassment.\nAfter another refactoring, the heap is used exclusively, but a pointer the\nframes vector and its size are cached in the match_data block, so that there is\nno new memory allocation if the same match_data block is used for multiple\nmatches (unless the frames vector has to be extended).\n*******************************************************************************\n******************************************************************************/\n\n\n\n\n/*************************************************\n*       Macros for the match() function          *\n*************************************************/\n\n/* These macros pack up tests that are used for partial matching several times\nin the code. The second one is used when we already know we are past the end of\nthe subject. We set the \"hit end\" flag if the pointer is at the end of the\nsubject and either (a) the pointer is past the earliest inspected character\n(i.e. something has been matched, even if not part of the actual matched\nstring), or (b) the pattern contains a lookbehind. These are the conditions for\nwhich adding more characters may allow the current match to continue.\n\nFor hard partial matching, we immediately return a partial match. Otherwise,\ncarrying on means that a complete match on the current subject will be sought.\nA partial match is returned only if no complete match can be found. */\n\n#define CHECK_PARTIAL() \\\n  do { \\\n     if (Feptr >= mb->end_subject) \\\n       { \\\n       SCHECK_PARTIAL(); \\\n       } \\\n     } \\\n  while (0)\n\n#define SCHECK_PARTIAL() \\\n  do { \\\n     if (mb->partial != 0 && \\\n         (Feptr > mb->start_used_ptr || mb->allowemptypartial)) \\\n       { \\\n       mb->hitend = TRUE; \\\n       if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; \\\n       } \\\n     } \\\n  while (0)\n\n\n/* These macros are used to implement backtracking. They simulate a recursive\ncall to the match() function by means of a local vector of frames which\nremember the backtracking points. */\n\n#define RMATCH(ra,rb) \\\n  do { \\\n     start_ecode = ra; \\\n     Freturn_id = rb; \\\n     goto MATCH_RECURSE; \\\n     L_##rb:; \\\n     } \\\n  while (0)\n\n#define RRETURN(ra) \\\n  do { \\\n     rrc = ra; \\\n     goto RETURN_SWITCH; \\\n     } \\\n  while (0)\n\n\n\n/*************************************************\n*         Match from current position            *\n*************************************************/\n\n/* This function is called to run one match attempt at a single starting point\nin the subject.\n\nPerformance note: It might be tempting to extract commonly used fields from the\nmb structure (e.g. end_subject) into individual variables to improve\nperformance. Tests using gcc on a SPARC disproved this; in the first case, it\nmade performance worse.\n\nArguments:\n   start_eptr   starting character in subject\n   start_ecode  starting position in compiled code\n   top_bracket  number of capturing parentheses in the pattern\n   frame_size   size of each backtracking frame\n   match_data   pointer to the match_data block\n   mb           pointer to \"static\" variables block\n\nReturns:        MATCH_MATCH if matched            )  these values are >= 0\n                MATCH_NOMATCH if failed to match  )\n                negative MATCH_xxx value for PRUNE, SKIP, etc\n                negative PCRE2_ERROR_xxx value if aborted by an error condition\n                (e.g. stopped by repeated call or depth limit)\n*/\n\nstatic int\nmatch(PCRE2_SPTR start_eptr, PCRE2_SPTR start_ecode, uint16_t top_bracket,\n  PCRE2_SIZE frame_size, pcre2_match_data *match_data, match_block *mb)\n{\n/* Frame-handling variables */\n\nheapframe *F;           /* Current frame pointer */\nheapframe *N = NULL;    /* Temporary frame pointers */\nheapframe *P = NULL;\n\nheapframe *frames_top;  /* End of frames vector */\nheapframe *assert_accept_frame = NULL;  /* For passing back a frame with captures */\nPCRE2_SIZE frame_copy_size;   /* Amount to copy when creating a new frame */\n\n/* Local variables that do not need to be preserved over calls to RMATCH(). */\n\nPCRE2_SPTR branch_end = NULL;\nPCRE2_SPTR branch_start;\nPCRE2_SPTR bracode;     /* Temp pointer to start of group */\nPCRE2_SIZE offset;      /* Used for group offsets */\nPCRE2_SIZE length;      /* Used for various length calculations */\n\nint rrc;                /* Return from functions & backtracking \"recursions\" */\n#ifdef SUPPORT_UNICODE\nint proptype;           /* Type of character property */\n#endif\n\nuint32_t i;             /* Used for local loops */\nuint32_t fc;            /* Character values */\nuint32_t number;        /* Used for group and other numbers */\nuint32_t reptype = 0;   /* Type of repetition (0 to avoid compiler warning) */\nuint32_t group_frame_type;  /* Specifies type for new group frames */\n\nBOOL condition;         /* Used in conditional groups */\nBOOL cur_is_word;       /* Used in \"word\" tests */\nBOOL prev_is_word;      /* Used in \"word\" tests */\n\n/* UTF and UCP flags */\n\n#ifdef SUPPORT_UNICODE\nBOOL utf = (mb->poptions & PCRE2_UTF) != 0;\nBOOL ucp = (mb->poptions & PCRE2_UCP) != 0;\n#else\nBOOL utf = FALSE;  /* Required for convenience even when no Unicode support */\n#endif\n\n/* This is the length of the last part of a backtracking frame that must be\ncopied when a new frame is created. */\n\nframe_copy_size = frame_size - offsetof(heapframe, eptr);\n\n/* Set up the first frame and the end of the frames vector. */\n\nF = match_data->heapframes;\nframes_top = (heapframe *)((char *)F + match_data->heapframes_size);\n\nFrdepth = 0;                        /* \"Recursion\" depth */\nFcapture_last = 0;                  /* Number of most recent capture */\nFcurrent_recurse = RECURSE_UNSET;   /* Not pattern recursing. */\nFstart_match = Feptr = start_eptr;  /* Current data pointer and start match */\nFmark = NULL;                       /* Most recent mark */\nFoffset_top = 0;                    /* End of captures within the frame */\nFlast_group_offset = PCRE2_UNSET;   /* Saved frame of most recent group */\ngroup_frame_type = 0;               /* Not a start of group frame */\ngoto NEW_FRAME;                     /* Start processing with this frame */\n\n/* Come back here when we want to create a new frame for remembering a\nbacktracking point. */\n\nMATCH_RECURSE:\n\n/* Set up a new backtracking frame. If the vector is full, get a new one,\ndoubling the size, but constrained by the heap limit (which is in KiB). */\n\nN = (heapframe *)((char *)F + frame_size);\nif ((heapframe *)((char *)N + frame_size) >= frames_top)\n  {\n  heapframe *new;\n  PCRE2_SIZE newsize;\n  PCRE2_SIZE usedsize = (char *)N - (char *)(match_data->heapframes);\n\n  if (match_data->heapframes_size >= PCRE2_SIZE_MAX / 2)\n    {\n    if (match_data->heapframes_size == PCRE2_SIZE_MAX - 1)\n      return PCRE2_ERROR_NOMEMORY;\n    newsize = PCRE2_SIZE_MAX - 1;\n    }\n  else\n    newsize = match_data->heapframes_size * 2;\n\n  if (newsize / 1024 >= mb->heap_limit)\n    {\n    PCRE2_SIZE old_size = match_data->heapframes_size / 1024;\n    if (mb->heap_limit <= old_size)\n      return PCRE2_ERROR_HEAPLIMIT;\n    else\n      {\n      PCRE2_SIZE max_delta = 1024 * (mb->heap_limit - old_size);\n      int over_bytes = match_data->heapframes_size % 1024;\n      if (over_bytes) max_delta -= (1024 - over_bytes);\n      newsize = match_data->heapframes_size + max_delta;\n      }\n    }\n\n  /* With a heap limit set, the permitted additional size may not be enough for\n  another frame, so do a final check. */\n\n  if (newsize - usedsize < frame_size) return PCRE2_ERROR_HEAPLIMIT;\n  new = match_data->memctl.malloc(newsize, match_data->memctl.memory_data);\n  if (new == NULL) return PCRE2_ERROR_NOMEMORY;\n  memcpy(new, match_data->heapframes, usedsize);\n\n  N = (heapframe *)((char *)new + usedsize);\n  F = (heapframe *)((char *)N - frame_size);\n\n  match_data->memctl.free(match_data->heapframes, match_data->memctl.memory_data);\n  match_data->heapframes = new;\n  match_data->heapframes_size = newsize;\n  frames_top = (heapframe *)((char *)new + newsize);\n  }\n\n#ifdef DEBUG_SHOW_RMATCH\nfprintf(stderr, \"++ RMATCH %d frame=%d\", Freturn_id, Frdepth + 1);\nif (group_frame_type != 0)\n  {\n  fprintf(stderr, \" type=%x \", group_frame_type);\n  switch (GF_IDMASK(group_frame_type))\n    {\n    case GF_CAPTURE:\n    fprintf(stderr, \"capture=%d\", GF_DATAMASK(group_frame_type));\n    break;\n\n    case GF_NOCAPTURE:\n    fprintf(stderr, \"nocapture op=%d\", Fop);\n    break;\n\n    case GF_CONDASSERT:\n    fprintf(stderr, \"condassert op=%d\", Fop);\n    break;\n\n    case GF_RECURSE:\n    fprintf(stderr, \"recurse=%d\", GF_DATAMASK(group_frame_type));\n    break;\n\n    default:\n    fprintf(stderr, \"*** unknown ***\");\n    break;\n    }\n  }\nfprintf(stderr, \"\\n\");\n#endif\n\n/* Copy those fields that must be copied into the new frame, increase the\n\"recursion\" depth (i.e. the new frame's index) and then make the new frame\ncurrent. */\n\nmemcpy((char *)N + offsetof(heapframe, eptr),\n       (char *)F + offsetof(heapframe, eptr),\n       frame_copy_size);\n\nN->rdepth = Frdepth + 1;\nF = N;\n\n/* Carry on processing with a new frame. */\n\nNEW_FRAME:\nFgroup_frame_type = group_frame_type;\nFecode = start_ecode;      /* Starting code pointer */\nFback_frame = frame_size;  /* Default is go back one frame */\n\n/* If this is a special type of group frame, remember its offset for quick\naccess at the end of the group. If this is a recursion, set a new current\nrecursion value. */\n\nif (group_frame_type != 0)\n  {\n  Flast_group_offset = (char *)F - (char *)match_data->heapframes;\n  if (GF_IDMASK(group_frame_type) == GF_RECURSE)\n    Fcurrent_recurse = GF_DATAMASK(group_frame_type);\n  group_frame_type = 0;\n  }\n\n\n/* ========================================================================= */\n/* This is the main processing loop. First check that we haven't recorded too\nmany backtracks (search tree is too large), or that we haven't exceeded the\nrecursive depth limit (used too many backtracking frames). If not, process the\nopcodes. */\n\nif (mb->match_call_count++ >= mb->match_limit) return PCRE2_ERROR_MATCHLIMIT;\nif (Frdepth >= mb->match_limit_depth) return PCRE2_ERROR_DEPTHLIMIT;\n\n#ifdef DEBUG_SHOW_OPS\nfprintf(stderr, \"\\n++ New frame: type=0x%x subject offset %ld\\n\",\n  GF_IDMASK(Fgroup_frame_type), Feptr - mb->start_subject);\n#endif\n\nfor (;;)\n  {\n#ifdef DEBUG_SHOW_OPS\nfprintf(stderr, \"++ %2ld op=%3d %s\\n\", Fecode - mb->start_code, *Fecode,\n  OP_names[*Fecode]);\n#endif\n\n  Fop = (uint8_t)(*Fecode);  /* Cast needed for 16-bit and 32-bit modes */\n  switch(Fop)\n    {\n    /* ===================================================================== */\n    /* Before OP_ACCEPT there may be any number of OP_CLOSE opcodes, to close\n    any currently open capturing brackets. Unlike reaching the end of a group,\n    where we know the starting frame is at the top of the chained frames, in\n    this case we have to search back for the relevant frame in case other types\n    of group that use chained frames have intervened. Multiple OP_CLOSEs always\n    come innermost first, which matches the chain order. We can ignore this in\n    a recursion, because captures are not passed out of recursions. */\n\n    case OP_CLOSE:\n    if (Fcurrent_recurse == RECURSE_UNSET)\n      {\n      number = GET2(Fecode, 1);\n      offset = Flast_group_offset;\n      for(;;)\n        {\n        /* Corrupted heapframes?. Trigger an assert and return an error */\n        PCRE2_ASSERT(offset != PCRE2_UNSET);\n        if (offset == PCRE2_UNSET) return PCRE2_ERROR_INTERNAL;\n\n        N = (heapframe *)((char *)match_data->heapframes + offset);\n        P = (heapframe *)((char *)N - frame_size);\n        if (N->group_frame_type == (GF_CAPTURE | number)) break;\n        offset = P->last_group_offset;\n        }\n      offset = (number << 1) - 2;\n      Fcapture_last = number;\n      Fovector[offset] = P->eptr - mb->start_subject;\n      Fovector[offset+1] = Feptr - mb->start_subject;\n      if (offset >= Foffset_top) Foffset_top = offset + 2;\n      }\n    Fecode += PRIV(OP_lengths)[*Fecode];\n    break;\n\n\n    /* ===================================================================== */\n    /* Real or forced end of the pattern, assertion, or recursion. In an\n    assertion ACCEPT, update the last used pointer and remember the current\n    frame so that the captures and mark can be fished out of it. */\n\n    case OP_ASSERT_ACCEPT:\n    if (Feptr > mb->last_used_ptr) mb->last_used_ptr = Feptr;\n    assert_accept_frame = F;\n    RRETURN(MATCH_ACCEPT);\n\n    /* For ACCEPT within a recursion, we have to find the most recent\n    recursion. If not in a recursion, fall through to code that is common with\n    OP_END. */\n\n    case OP_ACCEPT:\n    if (Fcurrent_recurse != RECURSE_UNSET)\n      {\n#ifdef DEBUG_SHOW_OPS\n      fprintf(stderr, \"++ Accept within recursion\\n\");\n#endif\n      offset = Flast_group_offset;\n      for(;;)\n        {\n        /* Corrupted heapframes?. Trigger an assert and return an error */\n        PCRE2_ASSERT(offset != PCRE2_UNSET);\n        if (offset == PCRE2_UNSET) return PCRE2_ERROR_INTERNAL;\n\n        N = (heapframe *)((char *)match_data->heapframes + offset);\n        P = (heapframe *)((char *)N - frame_size);\n        if (GF_IDMASK(N->group_frame_type) == GF_RECURSE) break;\n        offset = P->last_group_offset;\n        }\n\n      /* N is now the frame of the recursion; the previous frame is at the\n      OP_RECURSE position. Go back there, copying the current subject position\n      and mark, and the start_match position (\\K might have changed it), and\n      then move on past the OP_RECURSE. */\n\n      P->eptr = Feptr;\n      P->mark = Fmark;\n      P->start_match = Fstart_match;\n      F = P;\n      Fecode += 1 + LINK_SIZE;\n      continue;\n      }\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    /* OP_END itself can never be reached within a recursion because that is\n    picked up when the OP_KET that always precedes OP_END is reached. */\n\n    case OP_END:\n\n    /* Fail for an empty string match if either PCRE2_NOTEMPTY is set, or if\n    PCRE2_NOTEMPTY_ATSTART is set and we have matched at the start of the\n    subject. In both cases, backtracking will then try other alternatives, if\n    any. */\n\n    if (Feptr == Fstart_match &&\n         ((mb->moptions & PCRE2_NOTEMPTY) != 0 ||\n           ((mb->moptions & PCRE2_NOTEMPTY_ATSTART) != 0 &&\n             Fstart_match == mb->start_subject + mb->start_offset)))\n      {\n#ifdef DEBUG_SHOW_OPS\n      fprintf(stderr, \"++ Backtrack because empty string\\n\");\n#endif\n      RRETURN(MATCH_NOMATCH);\n      }\n\n    /* Fail if PCRE2_ENDANCHORED is set and the end of the match is not\n    the end of the subject. After (*ACCEPT) we fail the entire match (at this\n    position) but backtrack if we've reached the end of the pattern. This\n    applies whether or not we are in a recursion. */\n\n    if (Feptr < mb->end_subject &&\n        ((mb->moptions | mb->poptions) & PCRE2_ENDANCHORED) != 0)\n      {\n      if (Fop == OP_END)\n        {\n#ifdef DEBUG_SHOW_OPS\n        fprintf(stderr, \"++ Backtrack because not at end (endanchored set)\\n\");\n#endif\n        RRETURN(MATCH_NOMATCH);\n        }\n\n#ifdef DEBUG_SHOW_OPS\n      fprintf(stderr, \"++ Failed ACCEPT not at end (endanchored set)\\n\");\n#endif\n      return MATCH_NOMATCH;   /* (*ACCEPT) */\n      }\n\n    /* Fail if we detect that the start position was moved to be either after\n    the end position (\\K in lookahead) or before the start offset (\\K in\n    lookbehind). If this occurs, the pattern must have used \\K in a somewhat\n    sneaky way (e.g. by pattern recursion), because if the \\K is actually\n    syntactically inside the lookaround, it's blocked at compile-time. */\n\n    if (Fstart_match < mb->start_subject + mb->start_offset ||\n        Fstart_match > Feptr)\n      {\n      /* The \\K expression is fairly rare. We assert it was used so that we\n      catch any unexpected invalid data in start_match. */\n      PCRE2_ASSERT(mb->hasbsk);\n\n      if (!mb->allowlookaroundbsk)\n        return PCRE2_ERROR_BAD_BACKSLASH_K;\n      }\n\n    /* We have a successful match of the whole pattern. Record the result and\n    then do a direct return from the function. If there is space in the offset\n    vector, set any pairs that follow the highest-numbered captured string but\n    are less than the number of capturing groups in the pattern to PCRE2_UNSET.\n    It is documented that this happens. \"Gaps\" are set to PCRE2_UNSET\n    dynamically. It is only those at the end that need setting here. */\n\n    mb->end_match_ptr = Feptr;           /* Record where we ended */\n    mb->end_offset_top = Foffset_top;    /* and how many extracts were taken */\n    mb->mark = Fmark;                    /* and the last success mark */\n    if (Feptr > mb->last_used_ptr) mb->last_used_ptr = Feptr;\n\n    match_data->ovector[0] = Fstart_match - mb->start_subject;\n    match_data->ovector[1] = Feptr - mb->start_subject;\n\n    /* Set i to the smaller of the sizes of the external and frame ovectors. */\n\n    i = 2 * ((top_bracket + 1 > match_data->oveccount)?\n      match_data->oveccount : top_bracket + 1);\n    memcpy(match_data->ovector + 2, Fovector, (i - 2) * sizeof(PCRE2_SIZE));\n    while (--i >= Foffset_top + 2) match_data->ovector[i] = PCRE2_UNSET;\n    return MATCH_MATCH;  /* Note: NOT RRETURN */\n\n\n    /*===================================================================== */\n    /* Match any single character type except newline; have to take care with\n    CRLF newlines and partial matching. */\n\n    case OP_ANY:\n    if (IS_NEWLINE(Feptr)) RRETURN(MATCH_NOMATCH);\n    if (mb->partial != 0 &&\n        Feptr == mb->end_subject - 1 &&\n        NLBLOCK->nltype == NLTYPE_FIXED &&\n        NLBLOCK->nllen == 2 &&\n        *Feptr == NLBLOCK->nl[0])\n      {\n      mb->hitend = TRUE;\n      if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;\n      }\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    /* Match any single character whatsoever. */\n\n    case OP_ALLANY:\n    if (Feptr >= mb->end_subject)  /* DO NOT merge the Feptr++ here; it must */\n      {                            /* not be updated before SCHECK_PARTIAL. */\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    Feptr++;\n#ifdef SUPPORT_UNICODE\n    if (utf) ACROSSCHAR(Feptr < mb->end_subject, Feptr, Feptr++);\n#endif\n    Fecode++;\n    break;\n\n\n    /* ===================================================================== */\n    /* Match a single code unit, even in UTF mode. This opcode really does\n    match any code unit, even newline. (It really should be called ANYCODEUNIT,\n    of course - the byte name is from pre-16 bit days.) */\n\n    case OP_ANYBYTE:\n    if (Feptr >= mb->end_subject)   /* DO NOT merge the Feptr++ here; it must */\n      {                             /* not be updated before SCHECK_PARTIAL. */\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    Feptr++;\n    Fecode++;\n    break;\n\n\n    /* ===================================================================== */\n    /* Match a single character, casefully */\n\n    case OP_CHAR:\n#ifdef SUPPORT_UNICODE\n    if (utf)\n      {\n      length = 1;\n      Fecode++;\n      GETCHARLEN(fc, Fecode, length);\n      if (length > (PCRE2_SIZE)(mb->end_subject - Feptr))\n        {\n        CHECK_PARTIAL();             /* Not SCHECK_PARTIAL() */\n        RRETURN(MATCH_NOMATCH);\n        }\n      for (; length > 0; length--)\n        {\n        if (*Fecode++ != *Feptr++) RRETURN(MATCH_NOMATCH);\n        }\n      }\n    else\n#endif\n\n    /* Not UTF mode */\n      {\n      if (mb->end_subject - Feptr < 1)\n        {\n        SCHECK_PARTIAL();            /* This one can use SCHECK_PARTIAL() */\n        RRETURN(MATCH_NOMATCH);\n        }\n      if (Fecode[1] != *Feptr++) RRETURN(MATCH_NOMATCH);\n      Fecode += 2;\n      }\n    break;\n\n\n    /* ===================================================================== */\n    /* Match a single character, caselessly. If we are at the end of the\n    subject, give up immediately. We get here only when the pattern character\n    has at most one other case. Characters with more than two cases are coded\n    as OP_PROP with the pseudo-property PT_CLIST. */\n\n    case OP_CHARI:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n\n#ifdef SUPPORT_UNICODE\n    if (utf)\n      {\n      length = 1;\n      Fecode++;\n      GETCHARLEN(fc, Fecode, length);\n\n      /* If the pattern character's value is < 128, we know that its other case\n      (if any) is also < 128 (and therefore only one code unit long in all\n      code-unit widths), so we can use the fast lookup table. We checked above\n      that there is at least one character left in the subject. */\n\n      if (fc < 128)\n        {\n        uint32_t cc = *Feptr;\n        if (mb->lcc[fc] != TABLE_GET(cc, mb->lcc, cc)) RRETURN(MATCH_NOMATCH);\n        Fecode++;\n        Feptr++;\n        }\n\n      /* Otherwise we must pick up the subject character and use Unicode\n      property support to test its other case. Note that we cannot use the\n      value of \"length\" to check for sufficient bytes left, because the other\n      case of the character may have more or fewer code units. */\n\n      else\n        {\n        uint32_t dc;\n        GETCHARINC(dc, Feptr);\n        Fecode += length;\n        if (dc != fc && dc != UCD_OTHERCASE(fc)) RRETURN(MATCH_NOMATCH);\n        }\n      }\n\n    /* If UCP is set without UTF we must do the same as above, but with one\n    character per code unit. */\n\n    else if (ucp)\n      {\n      uint32_t cc = *Feptr;\n      fc = Fecode[1];\n      if (fc < 128)\n        {\n        if (mb->lcc[fc] != TABLE_GET(cc, mb->lcc, cc)) RRETURN(MATCH_NOMATCH);\n        }\n      else\n        {\n        if (cc != fc && cc != UCD_OTHERCASE(fc)) RRETURN(MATCH_NOMATCH);\n        }\n      Feptr++;\n      Fecode += 2;\n      }\n\n    else\n#endif   /* SUPPORT_UNICODE */\n\n    /* Not UTF or UCP mode; use the table for characters < 256. */\n      {\n      if (TABLE_GET(Fecode[1], mb->lcc, Fecode[1])\n          != TABLE_GET(*Feptr, mb->lcc, *Feptr)) RRETURN(MATCH_NOMATCH);\n      Feptr++;\n      Fecode += 2;\n      }\n    break;\n\n\n    /* ===================================================================== */\n    /* Match not a single character. */\n\n    case OP_NOT:\n    case OP_NOTI:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n\n#ifdef SUPPORT_UNICODE\n    if (utf)\n      {\n      uint32_t ch;\n      Fecode++;\n      GETCHARINC(ch, Fecode);\n      GETCHARINC(fc, Feptr);\n      if (ch == fc)\n        {\n        RRETURN(MATCH_NOMATCH);  /* Caseful match */\n        }\n      else if (Fop == OP_NOTI)   /* If caseless */\n        {\n        if (ch > 127)\n          ch = UCD_OTHERCASE(ch);\n        else\n          ch = (mb->fcc)[ch];\n        if (ch == fc) RRETURN(MATCH_NOMATCH);\n        }\n      }\n\n    /* UCP without UTF is as above, but with one character per code unit. */\n\n    else if (ucp)\n      {\n      uint32_t ch;\n      fc = *Feptr++;\n      ch = Fecode[1];\n      Fecode += 2;\n\n      if (ch == fc)\n        {\n        RRETURN(MATCH_NOMATCH);  /* Caseful match */\n        }\n      else if (Fop == OP_NOTI)   /* If caseless */\n        {\n        if (ch > 127)\n          ch = UCD_OTHERCASE(ch);\n        else\n          ch = (mb->fcc)[ch];\n        if (ch == fc) RRETURN(MATCH_NOMATCH);\n        }\n      }\n\n    else\n#endif  /* SUPPORT_UNICODE */\n\n    /* Neither UTF nor UCP is set */\n\n      {\n      uint32_t ch = Fecode[1];\n      fc = *Feptr++;\n      if (ch == fc || (Fop == OP_NOTI && TABLE_GET(ch, mb->fcc, ch) == fc))\n        RRETURN(MATCH_NOMATCH);\n      Fecode += 2;\n      }\n    break;\n\n\n    /* ===================================================================== */\n    /* Match a single character repeatedly. */\n\n#define Llength      F->byte1\n#define Loclength    F->byte2\n#define Lstart_eptr  F->fields.char_repeat.start_eptr\n#define Lcharptr     F->fields.char_repeat.charptr\n#define Lmin         F->fields.char_repeat.min\n#define Lmax         F->fields.char_repeat.max\n#define Lc           F->fields.char_repeat.c\n#define Loc          F->fields.char_repeat.oc.oc\n#define Loccu        F->fields.char_repeat.oc.occu\n\n    case OP_EXACT:\n    case OP_EXACTI:\n    Lmin = Lmax = GET2(Fecode, 1);\n    Fecode += 1 + IMM2_SIZE;\n    goto REPEATCHAR;\n\n    case OP_POSUPTO:\n    case OP_POSUPTOI:\n    reptype = REPTYPE_POS;\n    Lmin = 0;\n    Lmax = GET2(Fecode, 1);\n    Fecode += 1 + IMM2_SIZE;\n    goto REPEATCHAR;\n\n    case OP_UPTO:\n    case OP_UPTOI:\n    reptype = REPTYPE_MAX;\n    Lmin = 0;\n    Lmax = GET2(Fecode, 1);\n    Fecode += 1 + IMM2_SIZE;\n    goto REPEATCHAR;\n\n    case OP_MINUPTO:\n    case OP_MINUPTOI:\n    reptype = REPTYPE_MIN;\n    Lmin = 0;\n    Lmax = GET2(Fecode, 1);\n    Fecode += 1 + IMM2_SIZE;\n    goto REPEATCHAR;\n\n    case OP_POSSTAR:\n    case OP_POSSTARI:\n    reptype = REPTYPE_POS;\n    Lmin = 0;\n    Lmax = UINT32_MAX;\n    Fecode++;\n    goto REPEATCHAR;\n\n    case OP_POSPLUS:\n    case OP_POSPLUSI:\n    reptype = REPTYPE_POS;\n    Lmin = 1;\n    Lmax = UINT32_MAX;\n    Fecode++;\n    goto REPEATCHAR;\n\n    case OP_POSQUERY:\n    case OP_POSQUERYI:\n    reptype = REPTYPE_POS;\n    Lmin = 0;\n    Lmax = 1;\n    Fecode++;\n    goto REPEATCHAR;\n\n    case OP_STAR:\n    case OP_STARI:\n    case OP_MINSTAR:\n    case OP_MINSTARI:\n    case OP_PLUS:\n    case OP_PLUSI:\n    case OP_MINPLUS:\n    case OP_MINPLUSI:\n    case OP_QUERY:\n    case OP_QUERYI:\n    case OP_MINQUERY:\n    case OP_MINQUERYI:\n    fc = *Fecode++ - ((Fop < OP_STARI)? OP_STAR : OP_STARI);\n    Lmin = rep_min[fc];\n    Lmax = rep_max[fc];\n    reptype = rep_typ[fc];\n\n    /* Common code for all repeated single-character matches. We first check\n    for the minimum number of characters. If the minimum equals the maximum, we\n    are done. Otherwise, if minimizing, check the rest of the pattern for a\n    match; if there isn't one, advance up to the maximum, one character at a\n    time.\n\n    If maximizing, advance up to the maximum number of matching characters,\n    until Feptr is past the end of the maximum run. If possessive, we are\n    then done (no backing up). Otherwise, match at this position; anything\n    other than no match is immediately returned. For nomatch, back up one\n    character, unless we are matching \\R and the last thing matched was\n    \\r\\n, in which case, back up two code units until we reach the first\n    optional character position.\n\n    The various UTF/non-UTF and caseful/caseless cases are handled separately,\n    for speed. */\n\n    REPEATCHAR:\n#ifdef SUPPORT_UNICODE\n    if (utf)\n      {\n      length = 1;\n      Lcharptr = Fecode;\n      GETCHARLEN(fc, Fecode, length);\n      Fecode += length;\n      Llength = (uint8_t)length;\n\n      /* Handle multi-code-unit character matching, caseful and caseless. */\n\n      if (length > 1)\n        {\n        uint32_t othercase;\n\n        if (Fop >= OP_STARI &&     /* Caseless */\n            (othercase = UCD_OTHERCASE(fc)) != fc)\n          Loclength = (uint8_t)PRIV(ord2utf)(othercase, Loccu);\n        else Loclength = 0;\n\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr <= mb->end_subject - length &&\n            memcmp(Feptr, Lcharptr, CU2BYTES(length)) == 0) Feptr += length;\n          else if (Loclength > 0 &&\n                   Feptr <= mb->end_subject - Loclength &&\n                   memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0)\n            Feptr += Loclength;\n          else\n            {\n            CHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          }\n\n        if (Lmin == Lmax) continue;\n\n        if (reptype == REPTYPE_MIN)\n          {\n          for (;;)\n            {\n            RMATCH(Fecode, RM202);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr <= mb->end_subject - Llength &&\n              memcmp(Feptr, Lcharptr, CU2BYTES(Llength)) == 0) Feptr += Llength;\n            else if (Loclength > 0 &&\n                     Feptr <= mb->end_subject - Loclength &&\n                     memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0)\n              Feptr += Loclength;\n            else\n              {\n              CHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n          }\n        else  /* Maximize */\n          {\n          Lstart_eptr = Feptr;\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr <= mb->end_subject - Llength &&\n                memcmp(Feptr, Lcharptr, CU2BYTES(Llength)) == 0)\n              Feptr += Llength;\n            else if (Loclength > 0 &&\n                     Feptr <= mb->end_subject - Loclength &&\n                     memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0)\n              Feptr += Loclength;\n            else\n              {\n              CHECK_PARTIAL();\n              break;\n              }\n            }\n\n          /* After \\C in UTF mode, Lstart_eptr might be in the middle of a\n          Unicode character. Use <= Lstart_eptr to ensure backtracking doesn't\n          go too far. */\n\n          if (reptype != REPTYPE_POS) for(;;)\n            {\n            if (Feptr <= Lstart_eptr) break;\n            RMATCH(Fecode, RM203);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            Feptr--;\n            BACKCHAR(Feptr);\n            }\n          }\n        break;   /* End of repeated wide character handling */\n        }\n\n      /* Length of UTF character is 1. Put it into the preserved variable and\n      fall through to the non-UTF code. */\n\n      Lc = fc;\n      }\n    else\n#endif  /* SUPPORT_UNICODE */\n\n    /* When not in UTF mode, load a single-code-unit character. Then proceed as\n    above, using Unicode casing if either UTF or UCP is set. */\n\n    Lc = *Fecode++;\n\n    /* Caseless comparison */\n\n    if (Fop >= OP_STARI)\n      {\n#if PCRE2_CODE_UNIT_WIDTH == 8\n#ifdef SUPPORT_UNICODE\n      if (ucp && !utf && Lc > 127) Loc = UCD_OTHERCASE(Lc);\n      else\n#endif  /* SUPPORT_UNICODE */\n      /* Lc will be < 128 in UTF-8 mode. */\n      Loc = mb->fcc[Lc];\n#else /* 16-bit & 32-bit */\n#ifdef SUPPORT_UNICODE\n      if ((utf || ucp) && Lc > 127) Loc = UCD_OTHERCASE(Lc);\n      else\n#endif  /* SUPPORT_UNICODE */\n      Loc = TABLE_GET(Lc, mb->fcc, Lc);\n#endif  /* PCRE2_CODE_UNIT_WIDTH == 8 */\n\n      for (i = 1; i <= Lmin; i++)\n        {\n        uint32_t cc;                 /* Faster than PCRE2_UCHAR */\n        if (Feptr >= mb->end_subject)\n          {\n          SCHECK_PARTIAL();\n          RRETURN(MATCH_NOMATCH);\n          }\n        cc = *Feptr;\n        if (Lc != cc && Loc != cc) RRETURN(MATCH_NOMATCH);\n        Feptr++;\n        }\n      if (Lmin == Lmax) continue;\n\n      if (reptype == REPTYPE_MIN)\n        {\n        for (;;)\n          {\n          uint32_t cc;               /* Faster than PCRE2_UCHAR */\n          RMATCH(Fecode, RM25);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          cc = *Feptr;\n          if (Lc != cc && Loc != cc) RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          }\n        PCRE2_UNREACHABLE(); /* Control never reaches here */\n        }\n\n      else  /* Maximize */\n        {\n        Lstart_eptr = Feptr;\n        for (i = Lmin; i < Lmax; i++)\n          {\n          uint32_t cc;               /* Faster than PCRE2_UCHAR */\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            break;\n            }\n          cc = *Feptr;\n          if (Lc != cc && Loc != cc) break;\n          Feptr++;\n          }\n        if (reptype != REPTYPE_POS) for (;;)\n          {\n          if (Feptr == Lstart_eptr) break;\n          RMATCH(Fecode, RM26);\n          Feptr--;\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          }\n        }\n      }\n\n    /* Caseful comparisons (includes all multi-byte characters) */\n\n    else\n      {\n      for (i = 1; i <= Lmin; i++)\n        {\n        if (Feptr >= mb->end_subject)\n          {\n          SCHECK_PARTIAL();\n          RRETURN(MATCH_NOMATCH);\n          }\n        if (Lc != *Feptr++) RRETURN(MATCH_NOMATCH);\n        }\n\n      if (Lmin == Lmax) continue;\n\n      if (reptype == REPTYPE_MIN)\n        {\n        for (;;)\n          {\n          RMATCH(Fecode, RM27);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (Lc != *Feptr++) RRETURN(MATCH_NOMATCH);\n          }\n        PCRE2_UNREACHABLE(); /* Control never reaches here */\n        }\n      else  /* Maximize */\n        {\n        Lstart_eptr = Feptr;\n        for (i = Lmin; i < Lmax; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            break;\n            }\n\n          if (Lc != *Feptr) break;\n          Feptr++;\n          }\n\n        if (reptype != REPTYPE_POS) for (;;)\n          {\n          if (Feptr <= Lstart_eptr) break;\n          RMATCH(Fecode, RM28);\n          Feptr--;\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          }\n        }\n      }\n    break;\n\n#undef Llength\n#undef Loclength\n#undef Lstart_eptr\n#undef Lcharptr\n#undef Lmin\n#undef Lmax\n#undef Lc\n#undef Loc\n#undef Loccu\n\n\n    /* ===================================================================== */\n    /* Match a negated single one-byte character repeatedly. This is almost a\n    repeat of the code for a repeated single character, but I haven't found a\n    nice way of commoning these up that doesn't require a test of the\n    positive/negative option for each character match. Maybe that wouldn't add\n    very much to the time taken, but character matching *is* what this is all\n    about... */\n\n#define Lstart_eptr  F->fields.charnot_repeat.start_eptr\n#define Lmin         F->fields.charnot_repeat.min\n#define Lmax         F->fields.charnot_repeat.max\n#define Lc           F->fields.charnot_repeat.c\n#define Loc          F->fields.charnot_repeat.oc\n\n    case OP_NOTEXACT:\n    case OP_NOTEXACTI:\n    Lmin = Lmax = GET2(Fecode, 1);\n    Fecode += 1 + IMM2_SIZE;\n    goto REPEATNOTCHAR;\n\n    case OP_NOTUPTO:\n    case OP_NOTUPTOI:\n    Lmin = 0;\n    Lmax = GET2(Fecode, 1);\n    reptype = REPTYPE_MAX;\n    Fecode += 1 + IMM2_SIZE;\n    goto REPEATNOTCHAR;\n\n    case OP_NOTMINUPTO:\n    case OP_NOTMINUPTOI:\n    Lmin = 0;\n    Lmax = GET2(Fecode, 1);\n    reptype = REPTYPE_MIN;\n    Fecode += 1 + IMM2_SIZE;\n    goto REPEATNOTCHAR;\n\n    case OP_NOTPOSSTAR:\n    case OP_NOTPOSSTARI:\n    reptype = REPTYPE_POS;\n    Lmin = 0;\n    Lmax = UINT32_MAX;\n    Fecode++;\n    goto REPEATNOTCHAR;\n\n    case OP_NOTPOSPLUS:\n    case OP_NOTPOSPLUSI:\n    reptype = REPTYPE_POS;\n    Lmin = 1;\n    Lmax = UINT32_MAX;\n    Fecode++;\n    goto REPEATNOTCHAR;\n\n    case OP_NOTPOSQUERY:\n    case OP_NOTPOSQUERYI:\n    reptype = REPTYPE_POS;\n    Lmin = 0;\n    Lmax = 1;\n    Fecode++;\n    goto REPEATNOTCHAR;\n\n    case OP_NOTPOSUPTO:\n    case OP_NOTPOSUPTOI:\n    reptype = REPTYPE_POS;\n    Lmin = 0;\n    Lmax = GET2(Fecode, 1);\n    Fecode += 1 + IMM2_SIZE;\n    goto REPEATNOTCHAR;\n\n    case OP_NOTSTAR:\n    case OP_NOTSTARI:\n    case OP_NOTMINSTAR:\n    case OP_NOTMINSTARI:\n    case OP_NOTPLUS:\n    case OP_NOTPLUSI:\n    case OP_NOTMINPLUS:\n    case OP_NOTMINPLUSI:\n    case OP_NOTQUERY:\n    case OP_NOTQUERYI:\n    case OP_NOTMINQUERY:\n    case OP_NOTMINQUERYI:\n    fc = *Fecode++ - ((Fop >= OP_NOTSTARI)? OP_NOTSTARI: OP_NOTSTAR);\n    Lmin = rep_min[fc];\n    Lmax = rep_max[fc];\n    reptype = rep_typ[fc];\n\n    /* Common code for all repeated single-character non-matches. */\n\n    REPEATNOTCHAR:\n    GETCHARINCTEST(Lc, Fecode);\n\n    /* The code is duplicated for the caseless and caseful cases, for speed,\n    since matching characters is likely to be quite common. First, ensure the\n    minimum number of matches are present. If Lmin = Lmax, we are done.\n    Otherwise, if minimizing, keep trying the rest of the expression and\n    advancing one matching character if failing, up to the maximum.\n    Alternatively, if maximizing, find the maximum number of characters and\n    work backwards. */\n\n    if (Fop >= OP_NOTSTARI)     /* Caseless */\n      {\n#ifdef SUPPORT_UNICODE\n      if ((utf || ucp) && Lc > 127)\n        Loc = UCD_OTHERCASE(Lc);\n      else\n#endif /* SUPPORT_UNICODE */\n\n      Loc = TABLE_GET(Lc, mb->fcc, Lc);  /* Other case from table */\n\n#ifdef SUPPORT_UNICODE\n      if (utf)\n        {\n        uint32_t d;\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          GETCHARINC(d, Feptr);\n          if (Lc == d || Loc == d) RRETURN(MATCH_NOMATCH);\n          }\n        }\n      else\n#endif  /* SUPPORT_UNICODE */\n\n      /* Not UTF mode */\n        {\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (Lc == *Feptr || Loc == *Feptr) RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          }\n        }\n\n      if (Lmin == Lmax) continue;  /* Finished for exact count */\n\n      if (reptype == REPTYPE_MIN)\n        {\n#ifdef SUPPORT_UNICODE\n        if (utf)\n          {\n          uint32_t d;\n          for (;;)\n            {\n            RMATCH(Fecode, RM204);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINC(d, Feptr);\n            if (Lc == d || Loc == d) RRETURN(MATCH_NOMATCH);\n            }\n          }\n        else\n#endif  /*SUPPORT_UNICODE */\n\n        /* Not UTF mode */\n          {\n          for (;;)\n            {\n            RMATCH(Fecode, RM29);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            if (Lc == *Feptr || Loc == *Feptr) RRETURN(MATCH_NOMATCH);\n            Feptr++;\n            }\n          }\n        PCRE2_UNREACHABLE(); /* Control never reaches here */\n        }\n\n      /* Maximize case */\n\n      else\n        {\n        Lstart_eptr = Feptr;\n\n#ifdef SUPPORT_UNICODE\n        if (utf)\n          {\n          uint32_t d;\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLEN(d, Feptr, len);\n            if (Lc == d || Loc == d) break;\n            Feptr += len;\n            }\n\n          /* After \\C in UTF mode, Lstart_eptr might be in the middle of a\n          Unicode character. Use <= Lstart_eptr to ensure backtracking doesn't\n          go too far. */\n\n          if (reptype != REPTYPE_POS) for(;;)\n            {\n            if (Feptr <= Lstart_eptr) break;\n            RMATCH(Fecode, RM205);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            Feptr--;\n            BACKCHAR(Feptr);\n            }\n          }\n        else\n#endif  /* SUPPORT_UNICODE */\n\n        /* Not UTF mode */\n          {\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            if (Lc == *Feptr || Loc == *Feptr) break;\n            Feptr++;\n            }\n          if (reptype != REPTYPE_POS) for (;;)\n            {\n            if (Feptr == Lstart_eptr) break;\n            RMATCH(Fecode, RM30);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            Feptr--;\n            }\n          }\n        }\n      }\n\n    /* Caseful comparisons */\n\n    else\n      {\n#ifdef SUPPORT_UNICODE\n      if (utf)\n        {\n        uint32_t d;\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          GETCHARINC(d, Feptr);\n          if (Lc == d) RRETURN(MATCH_NOMATCH);\n          }\n        }\n      else\n#endif\n      /* Not UTF mode */\n        {\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (Lc == *Feptr++) RRETURN(MATCH_NOMATCH);\n          }\n        }\n\n      if (Lmin == Lmax) continue;\n\n      if (reptype == REPTYPE_MIN)\n        {\n#ifdef SUPPORT_UNICODE\n        if (utf)\n          {\n          uint32_t d;\n          for (;;)\n            {\n            RMATCH(Fecode, RM206);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINC(d, Feptr);\n            if (Lc == d) RRETURN(MATCH_NOMATCH);\n            }\n          }\n        else\n#endif\n        /* Not UTF mode */\n          {\n          for (;;)\n            {\n            RMATCH(Fecode, RM31);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            if (Lc == *Feptr++) RRETURN(MATCH_NOMATCH);\n            }\n          }\n        PCRE2_UNREACHABLE(); /* Control never reaches here */\n        }\n\n      /* Maximize case */\n\n      else\n        {\n        Lstart_eptr = Feptr;\n\n#ifdef SUPPORT_UNICODE\n        if (utf)\n          {\n          uint32_t d;\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLEN(d, Feptr, len);\n            if (Lc == d) break;\n            Feptr += len;\n            }\n\n          /* After \\C in UTF mode, Lstart_eptr might be in the middle of a\n          Unicode character. Use <= Lstart_eptr to ensure backtracking doesn't\n          go too far. */\n\n          if (reptype != REPTYPE_POS) for(;;)\n            {\n            if (Feptr <= Lstart_eptr) break;\n            RMATCH(Fecode, RM207);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            Feptr--;\n            BACKCHAR(Feptr);\n            }\n          }\n        else\n#endif\n        /* Not UTF mode */\n          {\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            if (Lc == *Feptr) break;\n            Feptr++;\n            }\n          if (reptype != REPTYPE_POS) for (;;)\n            {\n            if (Feptr == Lstart_eptr) break;\n            RMATCH(Fecode, RM32);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            Feptr--;\n            }\n          }\n        }\n      }\n    break;\n\n#undef Lstart_eptr\n#undef Lmin\n#undef Lmax\n#undef Lc\n#undef Loc\n\n\n    /* ===================================================================== */\n    /* Match a bit-mapped character class, possibly repeatedly. These opcodes\n    are used when all the characters in the class have values in the range\n    0-255, and either the matching is caseful, or the characters are in the\n    range 0-127 when UTF processing is enabled. The only difference between\n    OP_CLASS and OP_NCLASS occurs when a data character outside the range is\n    encountered. */\n\n#define Lbyte_map_address  F->fields.class_repeat.byte_map_address\n#define Lbyte_map          ((const unsigned char *)Lbyte_map_address)\n#define Lstart_eptr        F->fields.class_repeat.start_eptr\n#define Lmin               F->fields.class_repeat.min\n#define Lmax               F->fields.class_repeat.max\n\n    case OP_NCLASS:\n    case OP_CLASS:\n      {\n      Lbyte_map_address = Fecode + 1;           /* Save for matching */\n      Fecode += 1 + (32 / sizeof(PCRE2_UCHAR)); /* Advance past the item */\n\n      /* Look past the end of the item to see if there is repeat information\n      following. Then obey similar code to character type repeats. */\n\n      switch (*Fecode)\n        {\n        case OP_CRSTAR:\n        case OP_CRMINSTAR:\n        case OP_CRPLUS:\n        case OP_CRMINPLUS:\n        case OP_CRQUERY:\n        case OP_CRMINQUERY:\n        case OP_CRPOSSTAR:\n        case OP_CRPOSPLUS:\n        case OP_CRPOSQUERY:\n        fc = *Fecode++ - OP_CRSTAR;\n        Lmin = rep_min[fc];\n        Lmax = rep_max[fc];\n        reptype = rep_typ[fc];\n        break;\n\n        case OP_CRRANGE:\n        case OP_CRMINRANGE:\n        case OP_CRPOSRANGE:\n        Lmin = GET2(Fecode, 1);\n        Lmax = GET2(Fecode, 1 + IMM2_SIZE);\n        if (Lmax == 0) Lmax = UINT32_MAX;       /* Max 0 => infinity */\n        reptype = rep_typ[*Fecode - OP_CRSTAR];\n        Fecode += 1 + 2 * IMM2_SIZE;\n        break;\n\n        default:               /* No repeat follows */\n        Lmin = Lmax = 1;\n        break;\n        }\n\n      /* First, ensure the minimum number of matches are present. */\n\n#ifdef SUPPORT_UNICODE\n      if (utf)\n        {\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          GETCHARINC(fc, Feptr);\n          if (fc > 255)\n            {\n            if (Fop == OP_CLASS) RRETURN(MATCH_NOMATCH);\n            }\n          else\n            if ((Lbyte_map[fc/8] & (1u << (fc&7))) == 0) RRETURN(MATCH_NOMATCH);\n          }\n        }\n      else\n#endif\n      /* Not UTF mode */\n        {\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          fc = *Feptr++;\n#if PCRE2_CODE_UNIT_WIDTH != 8\n          if (fc > 255)\n            {\n            if (Fop == OP_CLASS) RRETURN(MATCH_NOMATCH);\n            }\n          else\n#endif\n          if ((Lbyte_map[fc/8] & (1u << (fc&7))) == 0) RRETURN(MATCH_NOMATCH);\n          }\n        }\n\n      /* If Lmax == Lmin we are done. Continue with main loop. */\n\n      if (Lmin == Lmax) continue;\n\n      /* If minimizing, keep testing the rest of the expression and advancing\n      the pointer while it matches the class. */\n\n      if (reptype == REPTYPE_MIN)\n        {\n#ifdef SUPPORT_UNICODE\n        if (utf)\n          {\n          for (;;)\n            {\n            RMATCH(Fecode, RM200);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINC(fc, Feptr);\n            if (fc > 255)\n              {\n              if (Fop == OP_CLASS) RRETURN(MATCH_NOMATCH);\n              }\n            else\n              if ((Lbyte_map[fc/8] & (1u << (fc&7))) == 0) RRETURN(MATCH_NOMATCH);\n            }\n          }\n        else\n#endif\n        /* Not UTF mode */\n          {\n          for (;;)\n            {\n            RMATCH(Fecode, RM23);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            fc = *Feptr++;\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            if (fc > 255)\n              {\n              if (Fop == OP_CLASS) RRETURN(MATCH_NOMATCH);\n              }\n            else\n#endif\n            if ((Lbyte_map[fc/8] & (1u << (fc&7))) == 0) RRETURN(MATCH_NOMATCH);\n            }\n          }\n        PCRE2_UNREACHABLE(); /* Control never reaches here */\n        }\n\n      /* If maximizing, find the longest possible run, then work backwards. */\n\n      else\n        {\n        Lstart_eptr = Feptr;\n\n#ifdef SUPPORT_UNICODE\n        if (utf)\n          {\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLEN(fc, Feptr, len);\n            if (fc > 255)\n              {\n              if (Fop == OP_CLASS) break;\n              }\n            else\n              if ((Lbyte_map[fc/8] & (1u << (fc&7))) == 0) break;\n            Feptr += len;\n            }\n\n          if (reptype == REPTYPE_POS) continue;    /* No backtracking */\n\n          /* After \\C in UTF mode, Lstart_eptr might be in the middle of a\n          Unicode character. Use <= Lstart_eptr to ensure backtracking doesn't\n          go too far. */\n\n          for (;;)\n            {\n            RMATCH(Fecode, RM201);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Feptr-- <= Lstart_eptr) break;  /* Tried at original position */\n            BACKCHAR(Feptr);\n            }\n          }\n        else\n#endif\n          /* Not UTF mode */\n          {\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            fc = *Feptr;\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            if (fc > 255)\n              {\n              if (Fop == OP_CLASS) break;\n              }\n            else\n#endif\n            if ((Lbyte_map[fc/8] & (1u << (fc&7))) == 0) break;\n            Feptr++;\n            }\n\n          if (reptype == REPTYPE_POS) continue;    /* No backtracking */\n\n          while (Feptr >= Lstart_eptr)\n            {\n            RMATCH(Fecode, RM24);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            Feptr--;\n            }\n          }\n\n        RRETURN(MATCH_NOMATCH);\n        }\n      }\n\n    PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n#undef Lbyte_map_address\n#undef Lbyte_map\n#undef Lstart_eptr\n#undef Lmin\n#undef Lmax\n\n\n    /* ===================================================================== */\n    /* Match an extended character class. In the 8-bit library, this opcode is\n    encountered only when UTF-8 mode mode is supported. In the 16-bit and\n    32-bit libraries, codepoints greater than 255 may be encountered even when\n    UTF is not supported. */\n\n#define Lstart_eptr  F->fields.xclass_repeat.start_eptr\n#define Lxclass_data F->fields.xclass_repeat.xclass_data\n#define Lmin         F->fields.xclass_repeat.min\n#define Lmax         F->fields.xclass_repeat.max\n\n#ifdef SUPPORT_WIDE_CHARS\n    case OP_XCLASS:\n      {\n      Lxclass_data = Fecode + 1 + LINK_SIZE;  /* Save for matching */\n      Fecode += GET(Fecode, 1);               /* Advance past the item */\n\n      switch (*Fecode)\n        {\n        case OP_CRSTAR:\n        case OP_CRMINSTAR:\n        case OP_CRPLUS:\n        case OP_CRMINPLUS:\n        case OP_CRQUERY:\n        case OP_CRMINQUERY:\n        case OP_CRPOSSTAR:\n        case OP_CRPOSPLUS:\n        case OP_CRPOSQUERY:\n        fc = *Fecode++ - OP_CRSTAR;\n        Lmin = rep_min[fc];\n        Lmax = rep_max[fc];\n        reptype = rep_typ[fc];\n        break;\n\n        case OP_CRRANGE:\n        case OP_CRMINRANGE:\n        case OP_CRPOSRANGE:\n        Lmin = GET2(Fecode, 1);\n        Lmax = GET2(Fecode, 1 + IMM2_SIZE);\n        if (Lmax == 0) Lmax = UINT32_MAX;  /* Max 0 => infinity */\n        reptype = rep_typ[*Fecode - OP_CRSTAR];\n        Fecode += 1 + 2 * IMM2_SIZE;\n        break;\n\n        default:               /* No repeat follows */\n        Lmin = Lmax = 1;\n        break;\n        }\n\n      /* First, ensure the minimum number of matches are present. */\n\n      for (i = 1; i <= Lmin; i++)\n        {\n        if (Feptr >= mb->end_subject)\n          {\n          SCHECK_PARTIAL();\n          RRETURN(MATCH_NOMATCH);\n          }\n        GETCHARINCTEST(fc, Feptr);\n        if (!PRIV(xclass)(fc, Lxclass_data,\n            (const uint8_t*)mb->start_code, utf))\n          RRETURN(MATCH_NOMATCH);\n        }\n\n      /* If Lmax == Lmin we can just continue with the main loop. */\n\n      if (Lmin == Lmax) continue;\n\n      /* If minimizing, keep testing the rest of the expression and advancing\n      the pointer while it matches the class. */\n\n      if (reptype == REPTYPE_MIN)\n        {\n        for (;;)\n          {\n          RMATCH(Fecode, RM100);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          GETCHARINCTEST(fc, Feptr);\n          if (!PRIV(xclass)(fc, Lxclass_data,\n              (const uint8_t*)mb->start_code, utf))\n            RRETURN(MATCH_NOMATCH);\n          }\n        PCRE2_UNREACHABLE(); /* Control never reaches here */\n        }\n\n      /* If maximizing, find the longest possible run, then work backwards. */\n\n      else\n        {\n        Lstart_eptr = Feptr;\n        for (i = Lmin; i < Lmax; i++)\n          {\n          int len = 1;\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            break;\n            }\n#ifdef SUPPORT_UNICODE\n          GETCHARLENTEST(fc, Feptr, len);\n#else\n          fc = *Feptr;\n#endif\n          if (!PRIV(xclass)(fc, Lxclass_data,\n              (const uint8_t*)mb->start_code, utf)) break;\n          Feptr += len;\n          }\n\n        if (reptype == REPTYPE_POS) continue;    /* No backtracking */\n\n        /* After \\C in UTF mode, Lstart_eptr might be in the middle of a\n        Unicode character. Use <= Lstart_eptr to ensure backtracking doesn't\n        go too far. */\n\n        for(;;)\n          {\n          RMATCH(Fecode, RM101);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          if (Feptr-- <= Lstart_eptr) break;  /* Tried at original position */\n#ifdef SUPPORT_UNICODE\n          if (utf) BACKCHAR(Feptr);\n#endif\n          }\n        RRETURN(MATCH_NOMATCH);\n        }\n\n      PCRE2_UNREACHABLE(); /* Control never reaches here */\n      }\n#endif  /* SUPPORT_WIDE_CHARS: end of XCLASS */\n\n#undef Lstart_eptr\n#undef Lxclass_data\n#undef Lmin\n#undef Lmax\n\n\n    /* ===================================================================== */\n    /* Match a complex, set-based character class. This opcodes are used when\n    there is complex nesting or logical operations within the character\n    class. */\n\n#define Lstart_eptr  F->fields.eclass_repeat.start_eptr\n#define Leclass_data F->fields.eclass_repeat.eclass_data\n#define Leclass_len  F->fields.eclass_repeat.eclass_len\n#define Lmin         F->fields.eclass_repeat.min\n#define Lmax         F->fields.eclass_repeat.max\n\n#ifdef SUPPORT_WIDE_CHARS\n    case OP_ECLASS:\n      {\n      Leclass_data = Fecode + 1 + LINK_SIZE;  /* Save for matching */\n      Fecode += GET(Fecode, 1);               /* Advance past the item */\n      Leclass_len = (PCRE2_SIZE)(Fecode - Leclass_data);\n\n      switch (*Fecode)\n        {\n        case OP_CRSTAR:\n        case OP_CRMINSTAR:\n        case OP_CRPLUS:\n        case OP_CRMINPLUS:\n        case OP_CRQUERY:\n        case OP_CRMINQUERY:\n        case OP_CRPOSSTAR:\n        case OP_CRPOSPLUS:\n        case OP_CRPOSQUERY:\n        fc = *Fecode++ - OP_CRSTAR;\n        Lmin = rep_min[fc];\n        Lmax = rep_max[fc];\n        reptype = rep_typ[fc];\n        break;\n\n        case OP_CRRANGE:\n        case OP_CRMINRANGE:\n        case OP_CRPOSRANGE:\n        Lmin = GET2(Fecode, 1);\n        Lmax = GET2(Fecode, 1 + IMM2_SIZE);\n        if (Lmax == 0) Lmax = UINT32_MAX;  /* Max 0 => infinity */\n        reptype = rep_typ[*Fecode - OP_CRSTAR];\n        Fecode += 1 + 2 * IMM2_SIZE;\n        break;\n\n        default:               /* No repeat follows */\n        Lmin = Lmax = 1;\n        break;\n        }\n\n      /* First, ensure the minimum number of matches are present. */\n\n      for (i = 1; i <= Lmin; i++)\n        {\n        if (Feptr >= mb->end_subject)\n          {\n          SCHECK_PARTIAL();\n          RRETURN(MATCH_NOMATCH);\n          }\n        GETCHARINCTEST(fc, Feptr);\n        if (!PRIV(eclass)(fc, Leclass_data, Leclass_data + Leclass_len,\n                          (const uint8_t*)mb->start_code, utf))\n          RRETURN(MATCH_NOMATCH);\n        }\n\n      /* If Lmax == Lmin we can just continue with the main loop. */\n\n      if (Lmin == Lmax) continue;\n\n      /* If minimizing, keep testing the rest of the expression and advancing\n      the pointer while it matches the class. */\n\n      if (reptype == REPTYPE_MIN)\n        {\n        for (;;)\n          {\n          RMATCH(Fecode, RM102);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          GETCHARINCTEST(fc, Feptr);\n          if (!PRIV(eclass)(fc, Leclass_data, Leclass_data + Leclass_len,\n                            (const uint8_t*)mb->start_code, utf))\n            RRETURN(MATCH_NOMATCH);\n          }\n        PCRE2_UNREACHABLE(); /* Control never reaches here */\n        }\n\n      /* If maximizing, find the longest possible run, then work backwards. */\n\n      else\n        {\n        Lstart_eptr = Feptr;\n        for (i = Lmin; i < Lmax; i++)\n          {\n          int len = 1;\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            break;\n            }\n#ifdef SUPPORT_UNICODE\n          GETCHARLENTEST(fc, Feptr, len);\n#else\n          fc = *Feptr;\n#endif\n          if (!PRIV(eclass)(fc, Leclass_data, Leclass_data + Leclass_len,\n                            (const uint8_t*)mb->start_code, utf))\n            break;\n          Feptr += len;\n          }\n\n        if (reptype == REPTYPE_POS) continue;    /* No backtracking */\n\n        /* After \\C in UTF mode, Lstart_eptr might be in the middle of a\n        Unicode character. Use <= Lstart_eptr to ensure backtracking doesn't\n        go too far. */\n\n        for(;;)\n          {\n          RMATCH(Fecode, RM103);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          if (Feptr-- <= Lstart_eptr) break;  /* Tried at original position */\n#ifdef SUPPORT_UNICODE\n          if (utf) BACKCHAR(Feptr);\n#endif\n          }\n        RRETURN(MATCH_NOMATCH);\n        }\n\n      PCRE2_UNREACHABLE(); /* Control never reaches here */\n      }\n#endif  /* SUPPORT_WIDE_CHARS: end of ECLASS */\n\n#undef Lstart_eptr\n#undef Leclass_data\n#undef Leclass_len\n#undef Lmin\n#undef Lmax\n\n\n    /* ===================================================================== */\n    /* Match various character types when PCRE2_UCP is not set. These opcodes\n    are not generated when PCRE2_UCP is set - instead appropriate property\n    tests are compiled. */\n\n    case OP_NOT_DIGIT:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    GETCHARINCTEST(fc, Feptr);\n    if (CHMAX_255(fc) && (mb->ctypes[fc] & ctype_digit) != 0)\n      RRETURN(MATCH_NOMATCH);\n    Fecode++;\n    break;\n\n    case OP_DIGIT:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    GETCHARINCTEST(fc, Feptr);\n    if (!CHMAX_255(fc) || (mb->ctypes[fc] & ctype_digit) == 0)\n      RRETURN(MATCH_NOMATCH);\n    Fecode++;\n    break;\n\n    case OP_NOT_WHITESPACE:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    GETCHARINCTEST(fc, Feptr);\n    if (CHMAX_255(fc) && (mb->ctypes[fc] & ctype_space) != 0)\n      RRETURN(MATCH_NOMATCH);\n    Fecode++;\n    break;\n\n    case OP_WHITESPACE:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    GETCHARINCTEST(fc, Feptr);\n    if (!CHMAX_255(fc) || (mb->ctypes[fc] & ctype_space) == 0)\n      RRETURN(MATCH_NOMATCH);\n    Fecode++;\n    break;\n\n    case OP_NOT_WORDCHAR:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    GETCHARINCTEST(fc, Feptr);\n    if (CHMAX_255(fc) && (mb->ctypes[fc] & ctype_word) != 0)\n      RRETURN(MATCH_NOMATCH);\n    Fecode++;\n    break;\n\n    case OP_WORDCHAR:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    GETCHARINCTEST(fc, Feptr);\n    if (!CHMAX_255(fc) || (mb->ctypes[fc] & ctype_word) == 0)\n      RRETURN(MATCH_NOMATCH);\n    Fecode++;\n    break;\n\n    case OP_ANYNL:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    GETCHARINCTEST(fc, Feptr);\n    switch(fc)\n      {\n      default: RRETURN(MATCH_NOMATCH);\n\n      case CHAR_CR:\n      if (Feptr >= mb->end_subject)\n        {\n        SCHECK_PARTIAL();\n        }\n      else if (*Feptr == CHAR_LF) Feptr++;\n      break;\n\n      case CHAR_LF:\n      break;\n\n      case CHAR_VT:\n      case CHAR_FF:\n      case CHAR_NEL:\n#ifndef EBCDIC\n      case 0x2028:\n      case 0x2029:\n#endif  /* Not EBCDIC */\n      if (mb->bsr_convention == PCRE2_BSR_ANYCRLF) RRETURN(MATCH_NOMATCH);\n      break;\n      }\n    Fecode++;\n    break;\n\n    case OP_NOT_HSPACE:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    GETCHARINCTEST(fc, Feptr);\n    switch(fc)\n      {\n      HSPACE_CASES: RRETURN(MATCH_NOMATCH);  /* Byte and multibyte cases */\n      default: break;\n      }\n    Fecode++;\n    break;\n\n    case OP_HSPACE:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    GETCHARINCTEST(fc, Feptr);\n    switch(fc)\n      {\n      HSPACE_CASES: break;  /* Byte and multibyte cases */\n      default: RRETURN(MATCH_NOMATCH);\n      }\n    Fecode++;\n    break;\n\n    case OP_NOT_VSPACE:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    GETCHARINCTEST(fc, Feptr);\n    switch(fc)\n      {\n      VSPACE_CASES: RRETURN(MATCH_NOMATCH);\n      default: break;\n      }\n    Fecode++;\n    break;\n\n    case OP_VSPACE:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    GETCHARINCTEST(fc, Feptr);\n    switch(fc)\n      {\n      VSPACE_CASES: break;\n      default: RRETURN(MATCH_NOMATCH);\n      }\n    Fecode++;\n    break;\n\n\n#ifdef SUPPORT_UNICODE\n\n    /* ===================================================================== */\n    /* Check the next character by Unicode property. We will get here only\n    if the support is in the binary; otherwise a compile-time error occurs. */\n\n    case OP_PROP:\n    case OP_NOTPROP:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    GETCHARINCTEST(fc, Feptr);\n      {\n      const uint32_t *cp;\n      uint32_t chartype;\n      const ucd_record *prop = GET_UCD(fc);\n      BOOL notmatch = Fop == OP_NOTPROP;\n\n      switch(Fecode[1])\n        {\n        case PT_LAMP:\n        chartype = prop->chartype;\n        if ((chartype == ucp_Lu ||\n             chartype == ucp_Ll ||\n             chartype == ucp_Lt) == notmatch)\n          RRETURN(MATCH_NOMATCH);\n        break;\n\n        case PT_GC:\n        if ((Fecode[2] == PRIV(ucp_gentype)[prop->chartype]) == notmatch)\n          RRETURN(MATCH_NOMATCH);\n        break;\n\n        case PT_PC:\n        if ((Fecode[2] == prop->chartype) == notmatch)\n          RRETURN(MATCH_NOMATCH);\n        break;\n\n        case PT_SC:\n        if ((Fecode[2] == prop->script) == notmatch)\n          RRETURN(MATCH_NOMATCH);\n        break;\n\n        case PT_SCX:\n          {\n          BOOL ok = (Fecode[2] == prop->script ||\n                     MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), Fecode[2]) != 0);\n          if (ok == notmatch) RRETURN(MATCH_NOMATCH);\n          }\n        break;\n\n        /* These are specials */\n\n        case PT_ALNUM:\n        chartype = prop->chartype;\n        if ((PRIV(ucp_gentype)[chartype] == ucp_L ||\n             PRIV(ucp_gentype)[chartype] == ucp_N) == notmatch)\n          RRETURN(MATCH_NOMATCH);\n        break;\n\n        /* Perl space used to exclude VT, but from Perl 5.18 it is included,\n        which means that Perl space and POSIX space are now identical. PCRE\n        was changed at release 8.34. */\n\n        case PT_SPACE:    /* Perl space */\n        case PT_PXSPACE:  /* POSIX space */\n        switch(fc)\n          {\n          HSPACE_CASES:\n          VSPACE_CASES:\n          if (notmatch) RRETURN(MATCH_NOMATCH);\n          break;\n\n          default:\n          if ((PRIV(ucp_gentype)[prop->chartype] == ucp_Z) == notmatch)\n            RRETURN(MATCH_NOMATCH);\n          break;\n          }\n        break;\n\n        case PT_WORD:\n        chartype = prop->chartype;\n        if ((PRIV(ucp_gentype)[chartype] == ucp_L ||\n             PRIV(ucp_gentype)[chartype] == ucp_N ||\n             chartype == ucp_Mn ||\n             chartype == ucp_Pc) == notmatch)\n          RRETURN(MATCH_NOMATCH);\n        break;\n\n        case PT_CLIST:\n#if PCRE2_CODE_UNIT_WIDTH == 32\n            if (fc > MAX_UTF_CODE_POINT)\n              {\n              if (notmatch) break;;\n              RRETURN(MATCH_NOMATCH);\n              }\n#endif\n        cp = PRIV(ucd_caseless_sets) + Fecode[2];\n        for (;;)\n          {\n          if (fc < *cp)\n            { if (notmatch) break; else { RRETURN(MATCH_NOMATCH); } }\n          if (fc == *cp++)\n            { if (notmatch) { RRETURN(MATCH_NOMATCH); } else break; }\n          }\n        break;\n\n        case PT_UCNC:\n        if ((fc == CHAR_DOLLAR_SIGN || fc == CHAR_COMMERCIAL_AT ||\n             fc == CHAR_GRAVE_ACCENT || (fc >= 0xa0 && fc <= 0xd7ff) ||\n             fc >= 0xe000) == notmatch)\n          RRETURN(MATCH_NOMATCH);\n        break;\n\n        case PT_BIDICL:\n        if ((UCD_BIDICLASS_PROP(prop) == Fecode[2]) == notmatch)\n          RRETURN(MATCH_NOMATCH);\n        break;\n\n        case PT_BOOL:\n          {\n          BOOL ok = MAPBIT(PRIV(ucd_boolprop_sets) +\n            UCD_BPROPS_PROP(prop), Fecode[2]) != 0;\n          if (ok == notmatch) RRETURN(MATCH_NOMATCH);\n          }\n        break;\n\n        /* This should never occur */\n\n        /* LCOV_EXCL_START */\n        default:\n        PCRE2_DEBUG_UNREACHABLE();\n        return PCRE2_ERROR_INTERNAL;\n        /* LCOV_EXCL_STOP */\n        }\n\n      Fecode += 3;\n      }\n    break;\n\n\n    /* ===================================================================== */\n    /* Match an extended Unicode sequence. We will get here only if the support\n    is in the binary; otherwise a compile-time error occurs. */\n\n    case OP_EXTUNI:\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      RRETURN(MATCH_NOMATCH);\n      }\n    else\n      {\n      GETCHARINCTEST(fc, Feptr);\n      Feptr = PRIV(extuni)(fc, Feptr, mb->start_subject, mb->end_subject, utf,\n        NULL);\n      }\n    CHECK_PARTIAL();\n    Fecode++;\n    break;\n\n#endif  /* SUPPORT_UNICODE */\n\n\n    /* ===================================================================== */\n    /* Match a single character type repeatedly. Note that the property type\n    does not need to be in a stack frame as it is not used within an RMATCH()\n    loop. */\n\n#define Lstart_eptr  F->fields.type_repeat.start_eptr\n#define Lmin         F->fields.type_repeat.min\n#define Lmax         F->fields.type_repeat.max\n#define Lctype       F->fields.type_repeat.ctype\n#define Lpropvalue   F->fields.type_repeat.propvalue\n\n    case OP_TYPEEXACT:\n    Lmin = Lmax = GET2(Fecode, 1);\n    Fecode += 1 + IMM2_SIZE;\n    goto REPEATTYPE;\n\n    case OP_TYPEUPTO:\n    case OP_TYPEMINUPTO:\n    Lmin = 0;\n    Lmax = GET2(Fecode, 1);\n    reptype = (*Fecode == OP_TYPEMINUPTO)? REPTYPE_MIN : REPTYPE_MAX;\n    Fecode += 1 + IMM2_SIZE;\n    goto REPEATTYPE;\n\n    case OP_TYPEPOSSTAR:\n    reptype = REPTYPE_POS;\n    Lmin = 0;\n    Lmax = UINT32_MAX;\n    Fecode++;\n    goto REPEATTYPE;\n\n    case OP_TYPEPOSPLUS:\n    reptype = REPTYPE_POS;\n    Lmin = 1;\n    Lmax = UINT32_MAX;\n    Fecode++;\n    goto REPEATTYPE;\n\n    case OP_TYPEPOSQUERY:\n    reptype = REPTYPE_POS;\n    Lmin = 0;\n    Lmax = 1;\n    Fecode++;\n    goto REPEATTYPE;\n\n    case OP_TYPEPOSUPTO:\n    reptype = REPTYPE_POS;\n    Lmin = 0;\n    Lmax = GET2(Fecode, 1);\n    Fecode += 1 + IMM2_SIZE;\n    goto REPEATTYPE;\n\n    case OP_TYPESTAR:\n    case OP_TYPEMINSTAR:\n    case OP_TYPEPLUS:\n    case OP_TYPEMINPLUS:\n    case OP_TYPEQUERY:\n    case OP_TYPEMINQUERY:\n    fc = *Fecode++ - OP_TYPESTAR;\n    Lmin = rep_min[fc];\n    Lmax = rep_max[fc];\n    reptype = rep_typ[fc];\n\n    /* Common code for all repeated character type matches. */\n\n    REPEATTYPE:\n    Lctype = *Fecode++;      /* Code for the character type */\n\n#ifdef SUPPORT_UNICODE\n    if (Lctype == OP_PROP || Lctype == OP_NOTPROP)\n      {\n      proptype = *Fecode++;\n      Lpropvalue = *Fecode++;\n      }\n    else proptype = -1;\n#endif\n\n    /* First, ensure the minimum number of matches are present. Use inline\n    code for maximizing the speed, and do the type test once at the start\n    (i.e. keep it out of the loops). As there are no calls to RMATCH in the\n    loops, we can use an ordinary variable for \"notmatch\". The code for UTF\n    mode is separated out for tidiness, except for Unicode property tests. */\n\n    if (Lmin > 0)\n      {\n#ifdef SUPPORT_UNICODE\n      if (proptype >= 0)  /* Property tests in all modes */\n        {\n        BOOL notmatch = Lctype == OP_NOTPROP;\n        switch(proptype)\n          {\n          case PT_LAMP:\n          for (i = 1; i <= Lmin; i++)\n            {\n            int chartype;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            chartype = UCD_CHARTYPE(fc);\n            if ((chartype == ucp_Lu ||\n                 chartype == ucp_Ll ||\n                 chartype == ucp_Lt) == notmatch)\n              RRETURN(MATCH_NOMATCH);\n            }\n          break;\n\n          case PT_GC:\n          for (i = 1; i <= Lmin; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            if ((UCD_CATEGORY(fc) == Lpropvalue) == notmatch)\n              RRETURN(MATCH_NOMATCH);\n            }\n          break;\n\n          case PT_PC:\n          for (i = 1; i <= Lmin; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            if ((UCD_CHARTYPE(fc) == Lpropvalue) == notmatch)\n              RRETURN(MATCH_NOMATCH);\n            }\n          break;\n\n          case PT_SC:\n          for (i = 1; i <= Lmin; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            if ((UCD_SCRIPT(fc) == Lpropvalue) == notmatch)\n              RRETURN(MATCH_NOMATCH);\n            }\n          break;\n\n          case PT_SCX:\n          for (i = 1; i <= Lmin; i++)\n            {\n            BOOL ok;\n            const ucd_record *prop;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            prop = GET_UCD(fc);\n            ok = (prop->script == Lpropvalue ||\n                  MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), Lpropvalue) != 0);\n            if (ok == notmatch)\n              RRETURN(MATCH_NOMATCH);\n            }\n          break;\n\n          case PT_ALNUM:\n          for (i = 1; i <= Lmin; i++)\n            {\n            int category;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            category = UCD_CATEGORY(fc);\n            if ((category == ucp_L || category == ucp_N) == notmatch)\n              RRETURN(MATCH_NOMATCH);\n            }\n          break;\n\n          /* Perl space used to exclude VT, but from Perl 5.18 it is included,\n          which means that Perl space and POSIX space are now identical. PCRE\n          was changed at release 8.34. */\n\n          case PT_SPACE:    /* Perl space */\n          case PT_PXSPACE:  /* POSIX space */\n          for (i = 1; i <= Lmin; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            switch(fc)\n              {\n              HSPACE_CASES:\n              VSPACE_CASES:\n              if (notmatch) RRETURN(MATCH_NOMATCH);\n              break;\n\n              default:\n              if ((UCD_CATEGORY(fc) == ucp_Z) == notmatch)\n                RRETURN(MATCH_NOMATCH);\n              break;\n              }\n            }\n          break;\n\n          case PT_WORD:\n          for (i = 1; i <= Lmin; i++)\n            {\n            int chartype, category;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            chartype = UCD_CHARTYPE(fc);\n            category = PRIV(ucp_gentype)[chartype];\n            if ((category == ucp_L || category == ucp_N ||\n                 chartype == ucp_Mn || chartype == ucp_Pc) == notmatch)\n              RRETURN(MATCH_NOMATCH);\n            }\n          break;\n\n          case PT_CLIST:\n          for (i = 1; i <= Lmin; i++)\n            {\n            const uint32_t *cp;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n#if PCRE2_CODE_UNIT_WIDTH == 32\n            if (fc > MAX_UTF_CODE_POINT)\n              {\n              if (notmatch) continue;\n              RRETURN(MATCH_NOMATCH);\n              }\n#endif\n            cp = PRIV(ucd_caseless_sets) + Lpropvalue;\n            for (;;)\n              {\n              if (fc < *cp)\n                {\n                if (notmatch) break;\n                RRETURN(MATCH_NOMATCH);\n                }\n              if (fc == *cp++)\n                {\n                if (notmatch) RRETURN(MATCH_NOMATCH);\n                break;\n                }\n              }\n            }\n          break;\n\n          case PT_UCNC:\n          for (i = 1; i <= Lmin; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            if ((fc == CHAR_DOLLAR_SIGN || fc == CHAR_COMMERCIAL_AT ||\n                 fc == CHAR_GRAVE_ACCENT || (fc >= 0xa0 && fc <= 0xd7ff) ||\n                 fc >= 0xe000) == notmatch)\n              RRETURN(MATCH_NOMATCH);\n            }\n          break;\n\n          case PT_BIDICL:\n          for (i = 1; i <= Lmin; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            if ((UCD_BIDICLASS(fc) == Lpropvalue) == notmatch)\n              RRETURN(MATCH_NOMATCH);\n            }\n          break;\n\n          case PT_BOOL:\n          for (i = 1; i <= Lmin; i++)\n            {\n            BOOL ok;\n            const ucd_record *prop;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            prop = GET_UCD(fc);\n            ok = MAPBIT(PRIV(ucd_boolprop_sets) +\n              UCD_BPROPS_PROP(prop), Lpropvalue) != 0;\n            if (ok == notmatch)\n              RRETURN(MATCH_NOMATCH);\n            }\n          break;\n\n          /* This should not occur */\n\n          /* LCOV_EXCL_START */\n          default:\n          PCRE2_DEBUG_UNREACHABLE();\n          return PCRE2_ERROR_INTERNAL;\n          /* LCOV_EXCL_STOP */\n          }\n        }\n\n      /* Match extended Unicode sequences. We will get here only if the\n      support is in the binary; otherwise a compile-time error occurs. */\n\n      else if (Lctype == OP_EXTUNI)\n        {\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          else\n            {\n            GETCHARINCTEST(fc, Feptr);\n            Feptr = PRIV(extuni)(fc, Feptr, mb->start_subject,\n              mb->end_subject, utf, NULL);\n            }\n          CHECK_PARTIAL();\n          }\n        }\n      else\n#endif     /* SUPPORT_UNICODE */\n\n/* Handle all other cases in UTF mode */\n\n#ifdef SUPPORT_UNICODE\n      if (utf) switch(Lctype)\n        {\n        case OP_ANY:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (IS_NEWLINE(Feptr)) RRETURN(MATCH_NOMATCH);\n          if (mb->partial != 0 &&\n              Feptr + 1 >= mb->end_subject &&\n              NLBLOCK->nltype == NLTYPE_FIXED &&\n              NLBLOCK->nllen == 2 &&\n              *Feptr == NLBLOCK->nl[0])\n            {\n            mb->hitend = TRUE;\n            if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;\n            }\n          Feptr++;\n          ACROSSCHAR(Feptr < mb->end_subject, Feptr, Feptr++);\n          }\n        break;\n\n        case OP_ALLANY:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          Feptr++;\n          ACROSSCHAR(Feptr < mb->end_subject, Feptr, Feptr++);\n          }\n        break;\n\n        case OP_ANYBYTE:\n        if (Feptr > mb->end_subject - Lmin) RRETURN(MATCH_NOMATCH);\n        Feptr += Lmin;\n        break;\n\n        case OP_ANYNL:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          GETCHARINC(fc, Feptr);\n          switch(fc)\n            {\n            default: RRETURN(MATCH_NOMATCH);\n\n            case CHAR_CR:\n            if (Feptr < mb->end_subject && *Feptr == CHAR_LF) Feptr++;\n            break;\n\n            case CHAR_LF:\n            break;\n\n            case CHAR_VT:\n            case CHAR_FF:\n            case CHAR_NEL:\n#ifndef EBCDIC\n            case 0x2028:\n            case 0x2029:\n#endif  /* Not EBCDIC */\n            if (mb->bsr_convention == PCRE2_BSR_ANYCRLF) RRETURN(MATCH_NOMATCH);\n            break;\n            }\n          }\n        break;\n\n        case OP_NOT_HSPACE:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          GETCHARINC(fc, Feptr);\n          switch(fc)\n            {\n            HSPACE_CASES: RRETURN(MATCH_NOMATCH);\n            default: break;\n            }\n          }\n        break;\n\n        case OP_HSPACE:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          GETCHARINC(fc, Feptr);\n          switch(fc)\n            {\n            HSPACE_CASES: break;\n            default: RRETURN(MATCH_NOMATCH);\n            }\n          }\n        break;\n\n        case OP_NOT_VSPACE:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          GETCHARINC(fc, Feptr);\n          switch(fc)\n            {\n            VSPACE_CASES: RRETURN(MATCH_NOMATCH);\n            default: break;\n            }\n          }\n        break;\n\n        case OP_VSPACE:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          GETCHARINC(fc, Feptr);\n          switch(fc)\n            {\n            VSPACE_CASES: break;\n            default: RRETURN(MATCH_NOMATCH);\n            }\n          }\n        break;\n\n        case OP_NOT_DIGIT:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          GETCHARINC(fc, Feptr);\n          if (fc < 128 && (mb->ctypes[fc] & ctype_digit) != 0)\n            RRETURN(MATCH_NOMATCH);\n          }\n        break;\n\n        case OP_DIGIT:\n        for (i = 1; i <= Lmin; i++)\n          {\n          uint32_t cc;\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          cc = *Feptr;\n          if (cc >= 128 || (mb->ctypes[cc] & ctype_digit) == 0)\n            RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          /* No need to skip more code units - we know it has only one. */\n          }\n        break;\n\n        case OP_NOT_WHITESPACE:\n        for (i = 1; i <= Lmin; i++)\n          {\n          uint32_t cc;\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          cc = *Feptr;\n          if (cc < 128 && (mb->ctypes[cc] & ctype_space) != 0)\n            RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          ACROSSCHAR(Feptr < mb->end_subject, Feptr, Feptr++);\n          }\n        break;\n\n        case OP_WHITESPACE:\n        for (i = 1; i <= Lmin; i++)\n          {\n          uint32_t cc;\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          cc = *Feptr;\n          if (cc >= 128 || (mb->ctypes[cc] & ctype_space) == 0)\n            RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          /* No need to skip more code units - we know it has only one. */\n          }\n        break;\n\n        case OP_NOT_WORDCHAR:\n        for (i = 1; i <= Lmin; i++)\n          {\n          uint32_t cc;\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          cc = *Feptr;\n          if (cc < 128 && (mb->ctypes[cc] & ctype_word) != 0)\n            RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          ACROSSCHAR(Feptr < mb->end_subject, Feptr, Feptr++);\n          }\n        break;\n\n        case OP_WORDCHAR:\n        for (i = 1; i <= Lmin; i++)\n          {\n          uint32_t cc;\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          cc = *Feptr;\n          if (cc >= 128 || (mb->ctypes[cc] & ctype_word) == 0)\n            RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          /* No need to skip more code units - we know it has only one. */\n          }\n        break;\n\n        /* LCOV_EXCL_START */\n        default:\n        PCRE2_DEBUG_UNREACHABLE();\n        return PCRE2_ERROR_INTERNAL;\n        /* LCOV_EXCL_STOP */\n        }  /* End switch(Lctype) */\n\n      else\n#endif     /* SUPPORT_UNICODE */\n\n      /* Code for the non-UTF case for minimum matching of operators other\n      than OP_PROP and OP_NOTPROP. */\n\n      switch(Lctype)\n        {\n        case OP_ANY:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (IS_NEWLINE(Feptr)) RRETURN(MATCH_NOMATCH);\n          if (mb->partial != 0 &&\n              Feptr + 1 >= mb->end_subject &&\n              NLBLOCK->nltype == NLTYPE_FIXED &&\n              NLBLOCK->nllen == 2 &&\n              *Feptr == NLBLOCK->nl[0])\n            {\n            mb->hitend = TRUE;\n            if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;\n            }\n          Feptr++;\n          }\n        break;\n\n        case OP_ALLANY:\n        if (Feptr > mb->end_subject - Lmin)\n          {\n          SCHECK_PARTIAL();\n          RRETURN(MATCH_NOMATCH);\n          }\n        Feptr += Lmin;\n        break;\n\n        /* This OP_ANYBYTE case will never be reached because \\C gets turned\n        into OP_ALLANY in non-UTF mode. Cut out the code so that coverage\n        reports don't complain about it's never being used. */\n\n/*        case OP_ANYBYTE:\n*        if (Feptr > mb->end_subject - Lmin)\n*          {\n*          SCHECK_PARTIAL();\n*          RRETURN(MATCH_NOMATCH);\n*          }\n*        Feptr += Lmin;\n*        break;\n*/\n        case OP_ANYNL:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          switch(*Feptr++)\n            {\n            default: RRETURN(MATCH_NOMATCH);\n\n            case CHAR_CR:\n            if (Feptr < mb->end_subject && *Feptr == CHAR_LF) Feptr++;\n            break;\n\n            case CHAR_LF:\n            break;\n\n            case CHAR_VT:\n            case CHAR_FF:\n            case CHAR_NEL:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            case 0x2028:\n            case 0x2029:\n#endif\n            if (mb->bsr_convention == PCRE2_BSR_ANYCRLF) RRETURN(MATCH_NOMATCH);\n            break;\n            }\n          }\n        break;\n\n        case OP_NOT_HSPACE:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          switch(*Feptr++)\n            {\n            default: break;\n            HSPACE_BYTE_CASES:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            HSPACE_MULTIBYTE_CASES:\n#endif\n            RRETURN(MATCH_NOMATCH);\n            }\n          }\n        break;\n\n        case OP_HSPACE:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          switch(*Feptr++)\n            {\n            default: RRETURN(MATCH_NOMATCH);\n            HSPACE_BYTE_CASES:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            HSPACE_MULTIBYTE_CASES:\n#endif\n            break;\n            }\n          }\n        break;\n\n        case OP_NOT_VSPACE:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          switch(*Feptr++)\n            {\n            VSPACE_BYTE_CASES:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            VSPACE_MULTIBYTE_CASES:\n#endif\n            RRETURN(MATCH_NOMATCH);\n            default: break;\n            }\n          }\n        break;\n\n        case OP_VSPACE:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          switch(*Feptr++)\n            {\n            default: RRETURN(MATCH_NOMATCH);\n            VSPACE_BYTE_CASES:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            VSPACE_MULTIBYTE_CASES:\n#endif\n            break;\n            }\n          }\n        break;\n\n        case OP_NOT_DIGIT:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (MAX_255(*Feptr) && (mb->ctypes[*Feptr] & ctype_digit) != 0)\n            RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          }\n        break;\n\n        case OP_DIGIT:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (!MAX_255(*Feptr) || (mb->ctypes[*Feptr] & ctype_digit) == 0)\n            RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          }\n        break;\n\n        case OP_NOT_WHITESPACE:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (MAX_255(*Feptr) && (mb->ctypes[*Feptr] & ctype_space) != 0)\n            RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          }\n        break;\n\n        case OP_WHITESPACE:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (!MAX_255(*Feptr) || (mb->ctypes[*Feptr] & ctype_space) == 0)\n            RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          }\n        break;\n\n        case OP_NOT_WORDCHAR:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (MAX_255(*Feptr) && (mb->ctypes[*Feptr] & ctype_word) != 0)\n            RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          }\n        break;\n\n        case OP_WORDCHAR:\n        for (i = 1; i <= Lmin; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (!MAX_255(*Feptr) || (mb->ctypes[*Feptr] & ctype_word) == 0)\n            RRETURN(MATCH_NOMATCH);\n          Feptr++;\n          }\n        break;\n\n        /* LCOV_EXCL_START */\n        default:\n        PCRE2_DEBUG_UNREACHABLE();\n        return PCRE2_ERROR_INTERNAL;\n        /* LCOV_EXCL_STOP */\n        }\n      }\n\n    /* If Lmin = Lmax we are done. Continue with the main loop. */\n\n    if (Lmin == Lmax) continue;\n\n    /* If minimizing, we have to test the rest of the pattern before each\n    subsequent match. This means we cannot use a local \"notmatch\" variable as\n    in the other cases. As all 4 temporary 32-bit values in the frame are\n    already in use, just test the type each time. */\n\n    if (reptype == REPTYPE_MIN)\n      {\n#ifdef SUPPORT_UNICODE\n      if (proptype >= 0)\n        {\n        switch(proptype)\n          {\n          case PT_LAMP:\n          for (;;)\n            {\n            int chartype;\n            RMATCH(Fecode, RM208);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            chartype = UCD_CHARTYPE(fc);\n            if ((chartype == ucp_Lu ||\n                 chartype == ucp_Ll ||\n                 chartype == ucp_Lt) == (Lctype == OP_NOTPROP))\n              RRETURN(MATCH_NOMATCH);\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n          case PT_GC:\n          for (;;)\n            {\n            RMATCH(Fecode, RM209);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            if ((UCD_CATEGORY(fc) == Lpropvalue) == (Lctype == OP_NOTPROP))\n              RRETURN(MATCH_NOMATCH);\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n          case PT_PC:\n          for (;;)\n            {\n            RMATCH(Fecode, RM210);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            if ((UCD_CHARTYPE(fc) == Lpropvalue) == (Lctype == OP_NOTPROP))\n              RRETURN(MATCH_NOMATCH);\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n          case PT_SC:\n          for (;;)\n            {\n            RMATCH(Fecode, RM211);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            if ((UCD_SCRIPT(fc) == Lpropvalue) == (Lctype == OP_NOTPROP))\n              RRETURN(MATCH_NOMATCH);\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n          case PT_SCX:\n          for (;;)\n            {\n            BOOL ok;\n            const ucd_record *prop;\n            RMATCH(Fecode, RM224);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            prop = GET_UCD(fc);\n            ok = (prop->script == Lpropvalue\n                  || MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), Lpropvalue) != 0);\n            if (ok == (Lctype == OP_NOTPROP))\n              RRETURN(MATCH_NOMATCH);\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n          case PT_ALNUM:\n          for (;;)\n            {\n            int category;\n            RMATCH(Fecode, RM212);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            category = UCD_CATEGORY(fc);\n            if ((category == ucp_L || category == ucp_N) == (Lctype == OP_NOTPROP))\n              RRETURN(MATCH_NOMATCH);\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n          /* Perl space used to exclude VT, but from Perl 5.18 it is included,\n          which means that Perl space and POSIX space are now identical. PCRE\n          was changed at release 8.34. */\n\n          case PT_SPACE:    /* Perl space */\n          case PT_PXSPACE:  /* POSIX space */\n          for (;;)\n            {\n            RMATCH(Fecode, RM213);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            switch(fc)\n              {\n              HSPACE_CASES:\n              VSPACE_CASES:\n              if (Lctype == OP_NOTPROP) RRETURN(MATCH_NOMATCH);\n              break;\n\n              default:\n              if ((UCD_CATEGORY(fc) == ucp_Z) == (Lctype == OP_NOTPROP))\n                RRETURN(MATCH_NOMATCH);\n              break;\n              }\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n          case PT_WORD:\n          for (;;)\n            {\n            int chartype, category;\n            RMATCH(Fecode, RM214);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            chartype = UCD_CHARTYPE(fc);\n            category = PRIV(ucp_gentype)[chartype];\n            if ((category == ucp_L ||\n                 category == ucp_N ||\n                 chartype == ucp_Mn ||\n                 chartype == ucp_Pc) == (Lctype == OP_NOTPROP))\n              RRETURN(MATCH_NOMATCH);\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n          case PT_CLIST:\n          for (;;)\n            {\n            const uint32_t *cp;\n            RMATCH(Fecode, RM215);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n#if PCRE2_CODE_UNIT_WIDTH == 32\n            if (fc > MAX_UTF_CODE_POINT)\n              {\n              if (Lctype == OP_NOTPROP) continue;\n              RRETURN(MATCH_NOMATCH);\n              }\n#endif\n            cp = PRIV(ucd_caseless_sets) + Lpropvalue;\n            for (;;)\n              {\n              if (fc < *cp)\n                {\n                if (Lctype == OP_NOTPROP) break;\n                RRETURN(MATCH_NOMATCH);\n                }\n              if (fc == *cp++)\n                {\n                if (Lctype == OP_NOTPROP) RRETURN(MATCH_NOMATCH);\n                break;\n                }\n              }\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n          case PT_UCNC:\n          for (;;)\n            {\n            RMATCH(Fecode, RM216);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            if ((fc == CHAR_DOLLAR_SIGN || fc == CHAR_COMMERCIAL_AT ||\n                 fc == CHAR_GRAVE_ACCENT || (fc >= 0xa0 && fc <= 0xd7ff) ||\n                 fc >= 0xe000) == (Lctype == OP_NOTPROP))\n              RRETURN(MATCH_NOMATCH);\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n          case PT_BIDICL:\n          for (;;)\n            {\n            RMATCH(Fecode, RM223);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            if ((UCD_BIDICLASS(fc) == Lpropvalue) == (Lctype == OP_NOTPROP))\n              RRETURN(MATCH_NOMATCH);\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n          case PT_BOOL:\n          for (;;)\n            {\n            BOOL ok;\n            const ucd_record *prop;\n            RMATCH(Fecode, RM222);\n            if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n            if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              RRETURN(MATCH_NOMATCH);\n              }\n            GETCHARINCTEST(fc, Feptr);\n            prop = GET_UCD(fc);\n            ok = MAPBIT(PRIV(ucd_boolprop_sets) +\n              UCD_BPROPS_PROP(prop), Lpropvalue) != 0;\n            if (ok == (Lctype == OP_NOTPROP))\n              RRETURN(MATCH_NOMATCH);\n            }\n          PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n          /* This should never occur */\n\n          /* LCOV_EXCL_START */\n          default:\n          PCRE2_DEBUG_UNREACHABLE();\n          return PCRE2_ERROR_INTERNAL;\n          /* LCOV_EXCL_STOP */\n          }\n        }\n\n      /* Match extended Unicode sequences. We will get here only if the\n      support is in the binary; otherwise a compile-time error occurs. */\n\n      else if (Lctype == OP_EXTUNI)\n        {\n        for (;;)\n          {\n          RMATCH(Fecode, RM217);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          else\n            {\n            GETCHARINCTEST(fc, Feptr);\n            Feptr = PRIV(extuni)(fc, Feptr, mb->start_subject, mb->end_subject,\n              utf, NULL);\n            }\n          CHECK_PARTIAL();\n          }\n        }\n      else\n#endif     /* SUPPORT_UNICODE */\n\n      /* UTF mode for non-property testing character types. */\n\n#ifdef SUPPORT_UNICODE\n      if (utf)\n        {\n        for (;;)\n          {\n          RMATCH(Fecode, RM218);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (Lctype == OP_ANY && IS_NEWLINE(Feptr)) RRETURN(MATCH_NOMATCH);\n          GETCHARINC(fc, Feptr);\n          switch(Lctype)\n            {\n            case OP_ANY:               /* This is the non-NL case */\n            if (mb->partial != 0 &&    /* Take care with CRLF partial */\n                Feptr >= mb->end_subject &&\n                NLBLOCK->nltype == NLTYPE_FIXED &&\n                NLBLOCK->nllen == 2 &&\n                fc == NLBLOCK->nl[0])\n              {\n              mb->hitend = TRUE;\n              if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;\n              }\n            break;\n\n            case OP_ALLANY:\n            case OP_ANYBYTE:\n            break;\n\n            case OP_ANYNL:\n            switch(fc)\n              {\n              default: RRETURN(MATCH_NOMATCH);\n\n              case CHAR_CR:\n              if (Feptr < mb->end_subject && *Feptr == CHAR_LF) Feptr++;\n              break;\n\n              case CHAR_LF:\n              break;\n\n              case CHAR_VT:\n              case CHAR_FF:\n              case CHAR_NEL:\n#ifndef EBCDIC\n              case 0x2028:\n              case 0x2029:\n#endif  /* Not EBCDIC */\n              if (mb->bsr_convention == PCRE2_BSR_ANYCRLF)\n                RRETURN(MATCH_NOMATCH);\n              break;\n              }\n            break;\n\n            case OP_NOT_HSPACE:\n            switch(fc)\n              {\n              HSPACE_CASES: RRETURN(MATCH_NOMATCH);\n              default: break;\n              }\n            break;\n\n            case OP_HSPACE:\n            switch(fc)\n              {\n              HSPACE_CASES: break;\n              default: RRETURN(MATCH_NOMATCH);\n              }\n            break;\n\n            case OP_NOT_VSPACE:\n            switch(fc)\n              {\n              VSPACE_CASES: RRETURN(MATCH_NOMATCH);\n              default: break;\n              }\n            break;\n\n            case OP_VSPACE:\n            switch(fc)\n              {\n              VSPACE_CASES: break;\n              default: RRETURN(MATCH_NOMATCH);\n              }\n            break;\n\n            case OP_NOT_DIGIT:\n            if (fc < 256 && (mb->ctypes[fc] & ctype_digit) != 0)\n              RRETURN(MATCH_NOMATCH);\n            break;\n\n            case OP_DIGIT:\n            if (fc >= 256 || (mb->ctypes[fc] & ctype_digit) == 0)\n              RRETURN(MATCH_NOMATCH);\n            break;\n\n            case OP_NOT_WHITESPACE:\n            if (fc < 256 && (mb->ctypes[fc] & ctype_space) != 0)\n              RRETURN(MATCH_NOMATCH);\n            break;\n\n            case OP_WHITESPACE:\n            if (fc >= 256 || (mb->ctypes[fc] & ctype_space) == 0)\n              RRETURN(MATCH_NOMATCH);\n            break;\n\n            case OP_NOT_WORDCHAR:\n            if (fc < 256 && (mb->ctypes[fc] & ctype_word) != 0)\n              RRETURN(MATCH_NOMATCH);\n            break;\n\n            case OP_WORDCHAR:\n            if (fc >= 256 || (mb->ctypes[fc] & ctype_word) == 0)\n              RRETURN(MATCH_NOMATCH);\n            break;\n\n            /* LCOV_EXCL_START */\n            default:\n            PCRE2_DEBUG_UNREACHABLE();\n            return PCRE2_ERROR_INTERNAL;\n            /* LCOV_EXCL_STOP */\n            }\n          }\n        }\n      else\n#endif  /* SUPPORT_UNICODE */\n\n      /* Not UTF mode */\n        {\n        for (;;)\n          {\n          RMATCH(Fecode, RM33);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            RRETURN(MATCH_NOMATCH);\n            }\n          if (Lctype == OP_ANY && IS_NEWLINE(Feptr))\n            RRETURN(MATCH_NOMATCH);\n          fc = *Feptr++;\n          switch(Lctype)\n            {\n            case OP_ANY:               /* This is the non-NL case */\n            if (mb->partial != 0 &&    /* Take care with CRLF partial */\n                Feptr >= mb->end_subject &&\n                NLBLOCK->nltype == NLTYPE_FIXED &&\n                NLBLOCK->nllen == 2 &&\n                fc == NLBLOCK->nl[0])\n              {\n              mb->hitend = TRUE;\n              if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;\n              }\n            break;\n\n            case OP_ALLANY:\n            case OP_ANYBYTE:\n            break;\n\n            case OP_ANYNL:\n            switch(fc)\n              {\n              default: RRETURN(MATCH_NOMATCH);\n\n              case CHAR_CR:\n              if (Feptr < mb->end_subject && *Feptr == CHAR_LF) Feptr++;\n              break;\n\n              case CHAR_LF:\n              break;\n\n              case CHAR_VT:\n              case CHAR_FF:\n              case CHAR_NEL:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n              case 0x2028:\n              case 0x2029:\n#endif\n              if (mb->bsr_convention == PCRE2_BSR_ANYCRLF)\n                RRETURN(MATCH_NOMATCH);\n              break;\n              }\n            break;\n\n            case OP_NOT_HSPACE:\n            switch(fc)\n              {\n              default: break;\n              HSPACE_BYTE_CASES:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n              HSPACE_MULTIBYTE_CASES:\n#endif\n              RRETURN(MATCH_NOMATCH);\n              }\n            break;\n\n            case OP_HSPACE:\n            switch(fc)\n              {\n              default: RRETURN(MATCH_NOMATCH);\n              HSPACE_BYTE_CASES:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n              HSPACE_MULTIBYTE_CASES:\n#endif\n              break;\n              }\n            break;\n\n            case OP_NOT_VSPACE:\n            switch(fc)\n              {\n              default: break;\n              VSPACE_BYTE_CASES:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n              VSPACE_MULTIBYTE_CASES:\n#endif\n              RRETURN(MATCH_NOMATCH);\n              }\n            break;\n\n            case OP_VSPACE:\n            switch(fc)\n              {\n              default: RRETURN(MATCH_NOMATCH);\n              VSPACE_BYTE_CASES:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n              VSPACE_MULTIBYTE_CASES:\n#endif\n              break;\n              }\n            break;\n\n            case OP_NOT_DIGIT:\n            if (MAX_255(fc) && (mb->ctypes[fc] & ctype_digit) != 0)\n              RRETURN(MATCH_NOMATCH);\n            break;\n\n            case OP_DIGIT:\n            if (!MAX_255(fc) || (mb->ctypes[fc] & ctype_digit) == 0)\n              RRETURN(MATCH_NOMATCH);\n            break;\n\n            case OP_NOT_WHITESPACE:\n            if (MAX_255(fc) && (mb->ctypes[fc] & ctype_space) != 0)\n              RRETURN(MATCH_NOMATCH);\n            break;\n\n            case OP_WHITESPACE:\n            if (!MAX_255(fc) || (mb->ctypes[fc] & ctype_space) == 0)\n              RRETURN(MATCH_NOMATCH);\n            break;\n\n            case OP_NOT_WORDCHAR:\n            if (MAX_255(fc) && (mb->ctypes[fc] & ctype_word) != 0)\n              RRETURN(MATCH_NOMATCH);\n            break;\n\n            case OP_WORDCHAR:\n            if (!MAX_255(fc) || (mb->ctypes[fc] & ctype_word) == 0)\n              RRETURN(MATCH_NOMATCH);\n            break;\n\n            /* LCOV_EXCL_START */\n            default:\n            PCRE2_DEBUG_UNREACHABLE();\n            return PCRE2_ERROR_INTERNAL;\n            /* LCOV_EXCL_STOP */\n            }\n          }\n        }\n\n      PCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */\n      }\n\n    /* If maximizing, it is worth using inline code for speed, doing the type\n    test once at the start (i.e. keep it out of the loops). Once again,\n    \"notmatch\" can be an ordinary local variable because the loops do not call\n    RMATCH. */\n\n    else\n      {\n      Lstart_eptr = Feptr;  /* Remember where we started */\n\n#ifdef SUPPORT_UNICODE\n      if (proptype >= 0)\n        {\n        BOOL notmatch = Lctype == OP_NOTPROP;\n        switch(proptype)\n          {\n          case PT_LAMP:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int chartype;\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLENTEST(fc, Feptr, len);\n            chartype = UCD_CHARTYPE(fc);\n            if ((chartype == ucp_Lu ||\n                 chartype == ucp_Ll ||\n                 chartype == ucp_Lt) == notmatch)\n              break;\n            Feptr+= len;\n            }\n          break;\n\n          case PT_GC:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLENTEST(fc, Feptr, len);\n            if ((UCD_CATEGORY(fc) == Lpropvalue) == notmatch) break;\n            Feptr+= len;\n            }\n          break;\n\n          case PT_PC:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLENTEST(fc, Feptr, len);\n            if ((UCD_CHARTYPE(fc) == Lpropvalue) == notmatch) break;\n            Feptr+= len;\n            }\n          break;\n\n          case PT_SC:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLENTEST(fc, Feptr, len);\n            if ((UCD_SCRIPT(fc) == Lpropvalue) == notmatch) break;\n            Feptr+= len;\n            }\n          break;\n\n          case PT_SCX:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            BOOL ok;\n            const ucd_record *prop;\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLENTEST(fc, Feptr, len);\n            prop = GET_UCD(fc);\n            ok = (prop->script == Lpropvalue ||\n                  MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), Lpropvalue) != 0);\n            if (ok == notmatch) break;\n            Feptr+= len;\n            }\n          break;\n\n          case PT_ALNUM:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int category;\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLENTEST(fc, Feptr, len);\n            category = UCD_CATEGORY(fc);\n            if ((category == ucp_L || category == ucp_N) == notmatch)\n              break;\n            Feptr+= len;\n            }\n          break;\n\n          /* Perl space used to exclude VT, but from Perl 5.18 it is included,\n          which means that Perl space and POSIX space are now identical. PCRE\n          was changed at release 8.34. */\n\n          case PT_SPACE:    /* Perl space */\n          case PT_PXSPACE:  /* POSIX space */\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLENTEST(fc, Feptr, len);\n            switch(fc)\n              {\n              HSPACE_CASES:\n              VSPACE_CASES:\n              if (notmatch) goto ENDLOOP99;  /* Break the loop */\n              break;\n\n              default:\n              if ((UCD_CATEGORY(fc) == ucp_Z) == notmatch)\n                goto ENDLOOP99;   /* Break the loop */\n              break;\n              }\n            Feptr+= len;\n            }\n          ENDLOOP99:\n          break;\n\n          case PT_WORD:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int chartype, category;\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLENTEST(fc, Feptr, len);\n            chartype = UCD_CHARTYPE(fc);\n            category = PRIV(ucp_gentype)[chartype];\n            if ((category == ucp_L ||\n                 category == ucp_N ||\n                 chartype == ucp_Mn ||\n                 chartype == ucp_Pc) == notmatch)\n              break;\n            Feptr+= len;\n            }\n          break;\n\n          case PT_CLIST:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            const uint32_t *cp;\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLENTEST(fc, Feptr, len);\n#if PCRE2_CODE_UNIT_WIDTH == 32\n            if (fc > MAX_UTF_CODE_POINT)\n              {\n              if (!notmatch) goto GOT_MAX;\n              }\n            else\n#endif\n              {\n              cp = PRIV(ucd_caseless_sets) + Lpropvalue;\n              for (;;)\n                {\n                if (fc < *cp)\n                  { if (notmatch) break; else goto GOT_MAX; }\n                if (fc == *cp++)\n                  { if (notmatch) goto GOT_MAX; else break; }\n                }\n              }\n\n            Feptr += len;\n            }\n          GOT_MAX:\n          break;\n\n          case PT_UCNC:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLENTEST(fc, Feptr, len);\n            if ((fc == CHAR_DOLLAR_SIGN || fc == CHAR_COMMERCIAL_AT ||\n                 fc == CHAR_GRAVE_ACCENT || (fc >= 0xa0 && fc <= 0xd7ff) ||\n                 fc >= 0xe000) == notmatch)\n              break;\n            Feptr += len;\n            }\n          break;\n\n          case PT_BIDICL:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLENTEST(fc, Feptr, len);\n            if ((UCD_BIDICLASS(fc) == Lpropvalue) == notmatch) break;\n            Feptr+= len;\n            }\n          break;\n\n          case PT_BOOL:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            BOOL ok;\n            const ucd_record *prop;\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLENTEST(fc, Feptr, len);\n            prop = GET_UCD(fc);\n            ok = MAPBIT(PRIV(ucd_boolprop_sets) +\n              UCD_BPROPS_PROP(prop), Lpropvalue) != 0;\n            if (ok == notmatch) break;\n            Feptr+= len;\n            }\n          break;\n\n          /* LCOV_EXCL_START */\n          default:\n          PCRE2_DEBUG_UNREACHABLE();\n          return PCRE2_ERROR_INTERNAL;\n          /* LCOV_EXCL_STOP */\n          }\n\n        /* Feptr is now past the end of the maximum run */\n\n        if (reptype == REPTYPE_POS) continue;    /* No backtracking */\n\n        /* After \\C in UTF mode, Lstart_eptr might be in the middle of a\n        Unicode character. Use <= Lstart_eptr to ensure backtracking doesn't\n        go too far. */\n\n        for(;;)\n          {\n          if (Feptr <= Lstart_eptr) break;\n          RMATCH(Fecode, RM221);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          Feptr--;\n          if (utf) BACKCHAR(Feptr);\n          }\n        }\n\n      /* Match extended Unicode grapheme clusters. We will get here only if the\n      support is in the binary; otherwise a compile-time error occurs. */\n\n      else if (Lctype == OP_EXTUNI)\n        {\n        for (i = Lmin; i < Lmax; i++)\n          {\n          if (Feptr >= mb->end_subject)\n            {\n            SCHECK_PARTIAL();\n            break;\n            }\n          else\n            {\n            GETCHARINCTEST(fc, Feptr);\n            Feptr = PRIV(extuni)(fc, Feptr, mb->start_subject, mb->end_subject,\n              utf, NULL);\n            }\n          CHECK_PARTIAL();\n          }\n\n        /* Feptr is now past the end of the maximum run */\n\n        if (reptype == REPTYPE_POS) continue;    /* No backtracking */\n\n        /* We use <= Lstart_eptr rather than == Lstart_eptr to detect the start\n        of the run while backtracking because the use of \\C in UTF mode can\n        cause BACKCHAR to move back past Lstart_eptr. This is just palliative;\n        the use of \\C in UTF mode is fraught with danger. */\n\n        for(;;)\n          {\n          int lgb, rgb;\n          PCRE2_SPTR fptr;\n\n          if (Feptr <= Lstart_eptr) break;   /* At start of char run */\n          RMATCH(Fecode, RM219);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n\n          /* Backtracking over an extended grapheme cluster involves inspecting\n          the previous two characters (if present) to see if a break is\n          permitted between them. */\n\n          Feptr--;\n          if (!utf) fc = *Feptr; else\n            {\n            BACKCHAR(Feptr);\n            GETCHAR(fc, Feptr);\n            }\n          rgb = UCD_GRAPHBREAK(fc);\n\n          for (;;)\n            {\n            if (Feptr <= Lstart_eptr) break;   /* At start of char run */\n            fptr = Feptr - 1;\n            if (!utf) fc = *fptr; else\n              {\n              BACKCHAR(fptr);\n              GETCHAR(fc, fptr);\n              }\n            lgb = UCD_GRAPHBREAK(fc);\n            if ((PRIV(ucp_gbtable)[lgb] & (1u << rgb)) == 0) break;\n            Feptr = fptr;\n            rgb = lgb;\n            }\n          }\n        }\n\n      else\n#endif   /* SUPPORT_UNICODE */\n\n#ifdef SUPPORT_UNICODE\n      if (utf)\n        {\n        switch(Lctype)\n          {\n          case OP_ANY:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            if (IS_NEWLINE(Feptr)) break;\n            if (mb->partial != 0 &&    /* Take care with CRLF partial */\n                Feptr + 1 >= mb->end_subject &&\n                NLBLOCK->nltype == NLTYPE_FIXED &&\n                NLBLOCK->nllen == 2 &&\n                *Feptr == NLBLOCK->nl[0])\n              {\n              mb->hitend = TRUE;\n              if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;\n              }\n            Feptr++;\n            ACROSSCHAR(Feptr < mb->end_subject, Feptr, Feptr++);\n            }\n          break;\n\n          case OP_ALLANY:\n          if (Lmax < UINT32_MAX)\n            {\n            for (i = Lmin; i < Lmax; i++)\n              {\n              if (Feptr >= mb->end_subject)\n                {\n                SCHECK_PARTIAL();\n                break;\n                }\n              Feptr++;\n              ACROSSCHAR(Feptr < mb->end_subject, Feptr, Feptr++);\n              }\n            }\n          else\n            {\n            Feptr = mb->end_subject;   /* Unlimited UTF-8 repeat */\n            SCHECK_PARTIAL();\n            }\n          break;\n\n          /* The \"byte\" (i.e. \"code unit\") case is the same as non-UTF */\n\n          case OP_ANYBYTE:\n          fc = Lmax - Lmin;\n          if (fc > (uint32_t)(mb->end_subject - Feptr))\n            {\n            Feptr = mb->end_subject;\n            SCHECK_PARTIAL();\n            }\n          else Feptr += fc;\n          break;\n\n          case OP_ANYNL:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLEN(fc, Feptr, len);\n            if (fc == CHAR_CR)\n              {\n              if (++Feptr >= mb->end_subject) break;\n              if (*Feptr == CHAR_LF) Feptr++;\n              }\n            else\n              {\n              if (fc != CHAR_LF &&\n                  (mb->bsr_convention == PCRE2_BSR_ANYCRLF ||\n                   (fc != CHAR_VT && fc != CHAR_FF && fc != CHAR_NEL\n#ifndef EBCDIC\n                    && fc != 0x2028 && fc != 0x2029\n#endif  /* Not EBCDIC */\n                    )))\n                break;\n              Feptr += len;\n              }\n            }\n          break;\n\n          case OP_NOT_HSPACE:\n          case OP_HSPACE:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            BOOL gotspace;\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLEN(fc, Feptr, len);\n            switch(fc)\n              {\n              HSPACE_CASES: gotspace = TRUE; break;\n              default: gotspace = FALSE; break;\n              }\n            if (gotspace == (Lctype == OP_NOT_HSPACE)) break;\n            Feptr += len;\n            }\n          break;\n\n          case OP_NOT_VSPACE:\n          case OP_VSPACE:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            BOOL gotspace;\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLEN(fc, Feptr, len);\n            switch(fc)\n              {\n              VSPACE_CASES: gotspace = TRUE; break;\n              default: gotspace = FALSE; break;\n              }\n            if (gotspace == (Lctype == OP_NOT_VSPACE)) break;\n            Feptr += len;\n            }\n          break;\n\n          case OP_NOT_DIGIT:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLEN(fc, Feptr, len);\n            if (fc < 256 && (mb->ctypes[fc] & ctype_digit) != 0) break;\n            Feptr+= len;\n            }\n          break;\n\n          case OP_DIGIT:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLEN(fc, Feptr, len);\n            if (fc >= 256 ||(mb->ctypes[fc] & ctype_digit) == 0) break;\n            Feptr+= len;\n            }\n          break;\n\n          case OP_NOT_WHITESPACE:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLEN(fc, Feptr, len);\n            if (fc < 256 && (mb->ctypes[fc] & ctype_space) != 0) break;\n            Feptr+= len;\n            }\n          break;\n\n          case OP_WHITESPACE:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLEN(fc, Feptr, len);\n            if (fc >= 256 ||(mb->ctypes[fc] & ctype_space) == 0) break;\n            Feptr+= len;\n            }\n          break;\n\n          case OP_NOT_WORDCHAR:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLEN(fc, Feptr, len);\n            if (fc < 256 && (mb->ctypes[fc] & ctype_word) != 0) break;\n            Feptr+= len;\n            }\n          break;\n\n          case OP_WORDCHAR:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            int len = 1;\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            GETCHARLEN(fc, Feptr, len);\n            if (fc >= 256 || (mb->ctypes[fc] & ctype_word) == 0) break;\n            Feptr+= len;\n            }\n          break;\n\n          /* LCOV_EXCL_START */\n          default:\n          PCRE2_DEBUG_UNREACHABLE();\n          return PCRE2_ERROR_INTERNAL;\n          /* LCOV_EXCL_STOP */\n          }\n\n        if (reptype == REPTYPE_POS) continue;    /* No backtracking */\n\n        /* After \\C in UTF mode, Lstart_eptr might be in the middle of a\n        Unicode character. Use <= Lstart_eptr to ensure backtracking doesn't go\n        too far. */\n\n        for(;;)\n          {\n          if (Feptr <= Lstart_eptr) break;\n          RMATCH(Fecode, RM220);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          Feptr--;\n          BACKCHAR(Feptr);\n          if (Lctype == OP_ANYNL && Feptr > Lstart_eptr &&\n              *Feptr == CHAR_NL && Feptr[-1] == CHAR_CR)\n            Feptr--;\n          }\n        }\n      else\n#endif  /* SUPPORT_UNICODE */\n\n      /* Not UTF mode */\n        {\n        switch(Lctype)\n          {\n          case OP_ANY:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            if (IS_NEWLINE(Feptr)) break;\n            if (mb->partial != 0 &&    /* Take care with CRLF partial */\n                Feptr + 1 >= mb->end_subject &&\n                NLBLOCK->nltype == NLTYPE_FIXED &&\n                NLBLOCK->nllen == 2 &&\n                *Feptr == NLBLOCK->nl[0])\n              {\n              mb->hitend = TRUE;\n              if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;\n              }\n            Feptr++;\n            }\n          break;\n\n          case OP_ALLANY:\n          case OP_ANYBYTE:\n          fc = Lmax - Lmin;\n          if (fc > (uint32_t)(mb->end_subject - Feptr))\n            {\n            Feptr = mb->end_subject;\n            SCHECK_PARTIAL();\n            }\n          else Feptr += fc;\n          break;\n\n          case OP_ANYNL:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            fc = *Feptr;\n            if (fc == CHAR_CR)\n              {\n              if (++Feptr >= mb->end_subject) break;\n              if (*Feptr == CHAR_LF) Feptr++;\n              }\n            else\n              {\n              if (fc != CHAR_LF && (mb->bsr_convention == PCRE2_BSR_ANYCRLF ||\n                 (fc != CHAR_VT && fc != CHAR_FF && fc != CHAR_NEL\n#if PCRE2_CODE_UNIT_WIDTH != 8\n                 && fc != 0x2028 && fc != 0x2029\n#endif\n                 ))) break;\n              Feptr++;\n              }\n            }\n          break;\n\n          case OP_NOT_HSPACE:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            switch(*Feptr)\n              {\n              default: Feptr++; break;\n              HSPACE_BYTE_CASES:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n              HSPACE_MULTIBYTE_CASES:\n#endif\n              goto ENDLOOP00;\n              }\n            }\n          ENDLOOP00:\n          break;\n\n          case OP_HSPACE:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            switch(*Feptr)\n              {\n              default: goto ENDLOOP01;\n              HSPACE_BYTE_CASES:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n              HSPACE_MULTIBYTE_CASES:\n#endif\n              Feptr++; break;\n              }\n            }\n          ENDLOOP01:\n          break;\n\n          case OP_NOT_VSPACE:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            switch(*Feptr)\n              {\n              default: Feptr++; break;\n              VSPACE_BYTE_CASES:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n              VSPACE_MULTIBYTE_CASES:\n#endif\n              goto ENDLOOP02;\n              }\n            }\n          ENDLOOP02:\n          break;\n\n          case OP_VSPACE:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            switch(*Feptr)\n              {\n              default: goto ENDLOOP03;\n              VSPACE_BYTE_CASES:\n#if PCRE2_CODE_UNIT_WIDTH != 8\n              VSPACE_MULTIBYTE_CASES:\n#endif\n              Feptr++; break;\n              }\n            }\n          ENDLOOP03:\n          break;\n\n          case OP_NOT_DIGIT:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            if (MAX_255(*Feptr) && (mb->ctypes[*Feptr] & ctype_digit) != 0)\n              break;\n            Feptr++;\n            }\n          break;\n\n          case OP_DIGIT:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            if (!MAX_255(*Feptr) || (mb->ctypes[*Feptr] & ctype_digit) == 0)\n              break;\n            Feptr++;\n            }\n          break;\n\n          case OP_NOT_WHITESPACE:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            if (MAX_255(*Feptr) && (mb->ctypes[*Feptr] & ctype_space) != 0)\n              break;\n            Feptr++;\n            }\n          break;\n\n          case OP_WHITESPACE:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            if (!MAX_255(*Feptr) || (mb->ctypes[*Feptr] & ctype_space) == 0)\n              break;\n            Feptr++;\n            }\n          break;\n\n          case OP_NOT_WORDCHAR:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            if (MAX_255(*Feptr) && (mb->ctypes[*Feptr] & ctype_word) != 0)\n              break;\n            Feptr++;\n            }\n          break;\n\n          case OP_WORDCHAR:\n          for (i = Lmin; i < Lmax; i++)\n            {\n            if (Feptr >= mb->end_subject)\n              {\n              SCHECK_PARTIAL();\n              break;\n              }\n            if (!MAX_255(*Feptr) || (mb->ctypes[*Feptr] & ctype_word) == 0)\n              break;\n            Feptr++;\n            }\n          break;\n\n          /* LCOV_EXCL_START */\n          default:\n          PCRE2_DEBUG_UNREACHABLE();\n          return PCRE2_ERROR_INTERNAL;\n          /* LCOV_EXCL_STOP */\n          }\n\n        if (reptype == REPTYPE_POS) continue;    /* No backtracking */\n\n        for (;;)\n          {\n          if (Feptr == Lstart_eptr) break;\n          RMATCH(Fecode, RM34);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          Feptr--;\n          if (Lctype == OP_ANYNL && Feptr > Lstart_eptr && *Feptr == CHAR_LF &&\n              Feptr[-1] == CHAR_CR) Feptr--;\n          }\n        }\n      }\n    break;  /* End of repeat character type processing */\n\n#undef Lstart_eptr\n#undef Lmin\n#undef Lmax\n#undef Lctype\n#undef Lpropvalue\n\n\n    /* ===================================================================== */\n    /* Match a back reference, possibly repeatedly. Look past the end of the\n    item to see if there is repeat information following. The OP_REF and\n    OP_REFI opcodes are used for a reference to a numbered group or to a\n    non-duplicated named group. For a duplicated named group, OP_DNREF and\n    OP_DNREFI are used. In this case we must scan the list of groups to which\n    the name refers, and use the first one that is set. */\n\n#define Lstart    F->fields.ref_repeat.start\n#define Loffset   F->fields.ref_repeat.offset\n#define Llength   F->fields.ref_repeat.length\n#define Lmin      F->fields.ref_repeat.min\n#define Lmax      F->fields.ref_repeat.max\n#define Lcaseless F->byte1\n#define Lcaseopts F->byte2\n\n    case OP_DNREF:\n    case OP_DNREFI:\n    Lcaseless = (uint8_t)(Fop == OP_DNREFI);\n    Lcaseopts = (uint8_t)((Fop == OP_DNREFI)? Fecode[1 + 2*IMM2_SIZE] : 0);\n      {\n      int count = GET2(Fecode, 1+IMM2_SIZE);\n      PCRE2_SPTR slot = mb->name_table + GET2(Fecode, 1) * mb->name_entry_size;\n      Fecode += 1 + 2*IMM2_SIZE + (Fop == OP_DNREFI? 1 : 0);\n\n      while (count-- > 0)\n        {\n        Loffset = (GET2(slot, 0) << 1) - 2;\n        if (Loffset < Foffset_top && Fovector[Loffset] != PCRE2_UNSET) break;\n        slot += mb->name_entry_size;\n        }\n      }\n    goto REF_REPEAT;\n\n    case OP_REF:\n    case OP_REFI:\n    Lcaseless = (Fop == OP_REFI);\n    Lcaseopts = (Fop == OP_REFI)? Fecode[1 + IMM2_SIZE] : 0;\n    Loffset = (GET2(Fecode, 1) << 1) - 2;\n    Fecode += 1 + IMM2_SIZE + (Fop == OP_REFI? 1 : 0);\n\n    /* Set up for repetition, or handle the non-repeated case. The maximum and\n    minimum must be in the heap frame, but as they are short-term values, we\n    use temporary fields. */\n\n    REF_REPEAT:\n    switch (*Fecode)\n      {\n      case OP_CRSTAR:\n      case OP_CRMINSTAR:\n      case OP_CRPLUS:\n      case OP_CRMINPLUS:\n      case OP_CRQUERY:\n      case OP_CRMINQUERY:\n      case OP_CRPOSSTAR:\n      case OP_CRPOSPLUS:\n      case OP_CRPOSQUERY:\n      fc = *Fecode++ - OP_CRSTAR;\n      Lmin = rep_min[fc];\n      Lmax = rep_max[fc];\n      reptype = rep_typ[fc];\n      break;\n\n      case OP_CRRANGE:\n      case OP_CRMINRANGE:\n      case OP_CRPOSRANGE:\n      Lmin = GET2(Fecode, 1);\n      Lmax = GET2(Fecode, 1 + IMM2_SIZE);\n      reptype = rep_typ[*Fecode - OP_CRSTAR];\n      if (Lmax == 0) Lmax = UINT32_MAX;  /* Max 0 => infinity */\n      Fecode += 1 + 2 * IMM2_SIZE;\n      break;\n\n      default:                  /* No repeat follows */\n        {\n        rrc = match_ref(Loffset, Lcaseless, Lcaseopts, F, mb, &length);\n        if (rrc != 0)\n          {\n          if (rrc > 0) Feptr = mb->end_subject;   /* Partial match */\n          CHECK_PARTIAL();\n          RRETURN(MATCH_NOMATCH);\n          }\n        }\n      Feptr += length;\n      continue;              /* With the main loop */\n      }\n\n    /* Handle repeated back references. If a set group has length zero, just\n    continue with the main loop, because it matches however many times. For an\n    unset reference, if the minimum is zero, we can also just continue. We can\n    also continue if PCRE2_MATCH_UNSET_BACKREF is set, because this makes unset\n    group behave as a zero-length group. For any other unset cases, carrying\n    on will result in NOMATCH. */\n\n    if (Loffset < Foffset_top && Fovector[Loffset] != PCRE2_UNSET)\n      {\n      if (Fovector[Loffset] == Fovector[Loffset + 1]) continue;\n      }\n    else  /* Group is not set */\n      {\n      if (Lmin == 0 || (mb->poptions & PCRE2_MATCH_UNSET_BACKREF) != 0)\n        continue;\n      }\n\n    /* First, ensure the minimum number of matches are present. */\n\n    for (i = 1; i <= Lmin; i++)\n      {\n      PCRE2_SIZE slength;\n      rrc = match_ref(Loffset, Lcaseless, Lcaseopts, F, mb, &slength);\n      if (rrc != 0)\n        {\n        if (rrc > 0) Feptr = mb->end_subject;   /* Partial match */\n        CHECK_PARTIAL();\n        RRETURN(MATCH_NOMATCH);\n        }\n      Feptr += slength;\n      }\n\n    /* If min = max, we are done. They are not both allowed to be zero. */\n\n    if (Lmin == Lmax) continue;\n\n    /* If minimizing, keep trying and advancing the pointer. */\n\n    if (reptype == REPTYPE_MIN)\n      {\n      for (;;)\n        {\n        PCRE2_SIZE slength;\n        RMATCH(Fecode, RM20);\n        if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n        if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH);\n        rrc = match_ref(Loffset, Lcaseless, Lcaseopts, F, mb, &slength);\n        if (rrc != 0)\n          {\n          if (rrc > 0) Feptr = mb->end_subject;   /* Partial match */\n          CHECK_PARTIAL();\n          RRETURN(MATCH_NOMATCH);\n          }\n        Feptr += slength;\n        }\n\n      PCRE2_UNREACHABLE(); /* Control never reaches here */\n      }\n\n    /* If maximizing, find the longest string and work backwards, as long as\n    the matched lengths for each iteration are the same. */\n\n    else\n      {\n      BOOL samelengths = TRUE;\n      Lstart = Feptr;     /* Starting position */\n      Llength = Fovector[Loffset+1] - Fovector[Loffset];\n\n      for (i = Lmin; i < Lmax; i++)\n        {\n        PCRE2_SIZE slength;\n        rrc = match_ref(Loffset, Lcaseless, Lcaseopts, F, mb, &slength);\n        if (rrc != 0)\n          {\n          /* Can't use CHECK_PARTIAL because we don't want to update Feptr in\n          the soft partial matching case. */\n\n          if (rrc > 0 && mb->partial != 0 &&\n              mb->end_subject > mb->start_used_ptr)\n            {\n            mb->hitend = TRUE;\n            if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;\n            }\n          break;\n          }\n\n        if (slength != Llength) samelengths = FALSE;\n        Feptr += slength;\n        }\n\n      /* No recursion if the repeat type is possessive. */\n      if (reptype == REPTYPE_POS) break;\n\n      /* If the length matched for each repetition is the same as the length of\n      the captured group, we can easily work backwards. This is the normal\n      case. However, in caseless UTF-8 mode there are pairs of case-equivalent\n      characters whose lengths (in terms of code units) differ. However, this\n      is very rare, so we handle it by re-matching fewer and fewer times. */\n\n      if (samelengths)\n        {\n        while (Feptr >= Lstart)\n          {\n          RMATCH(Fecode, RM21);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          Feptr -= Llength;\n          }\n        }\n\n      /* The rare case of non-matching lengths. Re-scan the repetition for each\n      iteration. We know that match_ref() will succeed every time. */\n\n      else\n        {\n        Lmax = i;\n        for (;;)\n          {\n          RMATCH(Fecode, RM22);\n          if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n          if (Feptr == Lstart) break; /* Failed after minimal repetition */\n          Feptr = Lstart;\n          Lmax--;\n          for (i = Lmin; i < Lmax; i++)\n            {\n            PCRE2_SIZE slength;\n            (void)match_ref(Loffset, Lcaseless, Lcaseopts, F, mb, &slength);\n            Feptr += slength;\n            }\n          }\n        }\n\n      RRETURN(MATCH_NOMATCH);\n      }\n\n    PCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */\n\n#undef Lstart\n#undef Loffset\n#undef Llength\n#undef Lmin\n#undef Lmax\n#undef Lcaseless\n#undef Lcaseopts\n\n\n/* ========================================================================= */\n/*           Opcodes for the start of various parenthesized items            */\n/* ========================================================================= */\n\n    /* In all cases, if the result of RMATCH() is MATCH_THEN, check whether the\n    (*THEN) is within the current branch by comparing the address of OP_THEN\n    that is passed back with the end of the branch. If (*THEN) is within the\n    current branch, and the branch is one of two or more alternatives (it\n    either starts or ends with OP_ALT), we have reached the limit of THEN's\n    action, so convert the return code to NOMATCH, which will cause normal\n    backtracking to happen from now on. Otherwise, THEN is passed back to an\n    outer alternative. This implements Perl's treatment of parenthesized\n    groups, where a group not containing | does not affect the current\n    alternative, that is, (X) is NOT the same as (X|(*F)). */\n\n\n    /* ===================================================================== */\n    /* BRAZERO, BRAMINZERO and SKIPZERO occur just before a non-possessive\n    bracket group, indicating that it may occur zero times. It may repeat\n    infinitely, or not at all - i.e. it could be ()* or ()? or even (){0} in\n    the pattern. Brackets with fixed upper repeat limits are compiled as a\n    number of copies, with the optional ones preceded by BRAZERO or BRAMINZERO.\n    Possessive groups with possible zero repeats are preceded by BRAPOSZERO. */\n\n    case OP_BRAZERO:\n      {\n      PCRE2_SPTR next_ecode;\n\n      Fecode++;\n      RMATCH(Fecode, RM9);\n      if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n      next_ecode = Fecode;\n      do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT);\n      Fecode = next_ecode + 1 + LINK_SIZE;\n      }\n    break;\n\n    case OP_BRAMINZERO:\n      {\n      PCRE2_SPTR next_ecode;\n\n      Fecode++;\n      next_ecode = Fecode;\n      do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT);\n      RMATCH(next_ecode + 1 + LINK_SIZE, RM10);\n      if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n      }\n    break;\n\n    case OP_SKIPZERO:\n      {\n      PCRE2_SPTR next_ecode = Fecode + 1;\n      do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT);\n      Fecode = next_ecode + 1 + LINK_SIZE;\n      }\n    break;\n\n\n    /* ===================================================================== */\n    /* Handle possessive brackets with an unlimited repeat. The end of these\n    brackets will always be OP_KETRPOS, which returns MATCH_KETRPOS without\n    going further in the pattern. */\n\n#define Lstart_eptr    F->fields.op_brapos.start_eptr\n#define Lstart_group   F->fields.op_brapos.start_group\n#define Lframe_type    F->fields.op_brapos.frame_type\n#define Lmatched_once  F->byte1\n#define Lzero_allowed  F->byte2\n\n    case OP_BRAPOSZERO:\n    Lzero_allowed = TRUE;                /* Zero repeat is allowed */\n    Fecode += 1;\n    if (*Fecode == OP_CBRAPOS || *Fecode == OP_SCBRAPOS)\n      goto POSSESSIVE_CAPTURE;\n    goto POSSESSIVE_NON_CAPTURE;\n\n    case OP_BRAPOS:\n    case OP_SBRAPOS:\n    Lzero_allowed = FALSE;               /* Zero repeat not allowed */\n\n    POSSESSIVE_NON_CAPTURE:\n    Lframe_type = GF_NOCAPTURE;          /* Remembered frame type */\n    goto POSSESSIVE_GROUP;\n\n    case OP_CBRAPOS:\n    case OP_SCBRAPOS:\n    Lzero_allowed = FALSE;               /* Zero repeat not allowed */\n\n    POSSESSIVE_CAPTURE:\n    number = GET2(Fecode, 1+LINK_SIZE);\n    Lframe_type = GF_CAPTURE | number;   /* Remembered frame type */\n\n    POSSESSIVE_GROUP:\n    Lmatched_once = FALSE;               /* Never matched */\n    Lstart_group = Fecode;               /* Start of this group */\n\n    for (;;)\n      {\n      Lstart_eptr = Feptr;               /* Position at group start */\n      group_frame_type = Lframe_type;\n      RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM8);\n      if (rrc == MATCH_KETRPOS)\n        {\n        Lmatched_once = TRUE;            /* Matched at least once */\n        if (Feptr == Lstart_eptr)        /* Empty match; skip to end */\n          {\n          do Fecode += GET(Fecode, 1); while (*Fecode == OP_ALT);\n          break;\n          }\n\n        Fecode = Lstart_group;\n        continue;\n        }\n\n      /* See comment above about handling THEN. */\n\n      if (rrc == MATCH_THEN)\n        {\n        PCRE2_SPTR next_ecode = Fecode + GET(Fecode,1);\n        if (mb->verb_ecode_ptr < next_ecode &&\n            (*Fecode == OP_ALT || *next_ecode == OP_ALT))\n          rrc = MATCH_NOMATCH;\n        }\n\n      if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n      Fecode += GET(Fecode, 1);\n      if (*Fecode != OP_ALT) break;\n      }\n\n    /* Success if matched something or zero repeat allowed */\n\n    if (Lmatched_once || Lzero_allowed)\n      {\n      Fecode += 1 + LINK_SIZE;\n      break;\n      }\n\n    RRETURN(MATCH_NOMATCH);\n\n#undef Lstart_eptr\n#undef Lstart_group\n#undef Lframe_type\n#undef Lmatched_once\n#undef Lzero_allowed\n\n\n    /* ===================================================================== */\n    /* Handle non-capturing brackets that cannot match an empty string. When we\n    get to the final alternative within the brackets, as long as there are no\n    THEN's in the pattern, we can optimize by not recording a new backtracking\n    point. (Ideally we should test for a THEN within this group, but we don't\n    have that information.) Don't do this if we are at the very top level,\n    however, because that would make handling assertions and once-only brackets\n    messier when there is nothing to go back to. */\n\n#define Lframe_type    F->fields.op_bra.frame_type\n\n    case OP_BRA:\n    if (mb->hasthen || Frdepth == 0)\n      {\n      Lframe_type = 0;\n      goto GROUPLOOP;\n      }\n\n    for (;;)\n      {\n      PCRE2_SPTR current_branch = Fecode;\n      PCRE2_SPTR next_branch = current_branch + GET(current_branch, 1);\n\n      if (*next_branch != OP_ALT) break;\n\n      /* This is never the final branch. We do not need to test for MATCH_THEN\n      here because this code is not used when there is a THEN in the pattern. */\n\n      Fecode = next_branch;\n      PCRE2_ASSERT((*current_branch == OP_BRA || *current_branch == OP_ALT) &&\n                   PRIV(OP_lengths)[OP_BRA] == 1 + LINK_SIZE &&\n                   PRIV(OP_lengths)[OP_ALT] == 1 + LINK_SIZE);\n\n      RMATCH(current_branch + 1 + LINK_SIZE, RM1);\n      if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n      }\n\n    /* Hit the start of the final branch. Continue at this level. */\n\n    PCRE2_ASSERT((*Fecode == OP_BRA || *Fecode == OP_ALT) &&\n                 PRIV(OP_lengths)[OP_BRA] == 1 + LINK_SIZE &&\n                 PRIV(OP_lengths)[OP_ALT] == 1 + LINK_SIZE);\n    Fecode += 1 + LINK_SIZE;\n    break;\n\n\n    /* ===================================================================== */\n    /* Handle a capturing bracket, other than those that are possessive with an\n    unlimited repeat. */\n\n    case OP_CBRA:\n    case OP_SCBRA:\n    Lframe_type = GF_CAPTURE | GET2(Fecode, 1+LINK_SIZE);\n    goto GROUPLOOP;\n\n\n    /* ===================================================================== */\n    /* Atomic groups and non-capturing brackets that can match an empty string\n    must record a backtracking point and also set up a chained frame. */\n\n    case OP_ONCE:\n    case OP_SCRIPT_RUN:\n    case OP_SBRA:\n    Lframe_type = GF_NOCAPTURE;\n\n    GROUPLOOP:\n    for (;;)\n      {\n      group_frame_type = Lframe_type;\n      RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM2);\n      if (rrc == MATCH_THEN)\n        {\n        PCRE2_SPTR next_ecode = Fecode + GET(Fecode,1);\n        if (mb->verb_ecode_ptr < next_ecode &&\n            (*Fecode == OP_ALT || *next_ecode == OP_ALT))\n          rrc = MATCH_NOMATCH;\n        }\n      if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n      Fecode += GET(Fecode, 1);\n      if (*Fecode != OP_ALT) RRETURN(MATCH_NOMATCH);\n      }\n    PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n#undef Lframe_type\n\n\n    /* ===================================================================== */\n    /* Pattern recursion either matches the current regex, or some\n    subexpression. The offset data is the offset to the starting bracket from\n    the start of the whole pattern. This is so that it works from duplicated\n    subpatterns. For a whole-pattern recursion, we have to infer the number\n    zero. */\n\n#define Lstart_branch  F->fields.op_recurse.start_branch\n#define Lframe_type    F->fields.op_recurse.frame_type\n\n    case OP_RECURSE:\n    bracode = mb->start_code + GET(Fecode, 1);\n    number = (bracode == mb->start_code)? 0 : GET2(bracode, 1 + LINK_SIZE);\n\n    /* If we are already in a pattern recursion, check for repeating the same\n    one without changing the subject pointer or the last referenced character\n    in the subject. This should catch convoluted mutual recursions; some\n    simple cases are caught at compile time. However, there are rare cases when\n    this check needs to be turned off. In this case, actual recursion loops\n    will be caught by the match or heap limits. */\n\n    if (Fcurrent_recurse != RECURSE_UNSET)\n      {\n      offset = Flast_group_offset;\n      while (offset != PCRE2_UNSET)\n        {\n        N = (heapframe *)((char *)match_data->heapframes + offset);\n        P = (heapframe *)((char *)N - frame_size);\n        if (N->group_frame_type == (GF_RECURSE | number))\n          {\n          if (Feptr == P->eptr && mb->last_used_ptr == P->recurse_last_used &&\n               (mb->moptions & PCRE2_DISABLE_RECURSELOOP_CHECK) == 0)\n            return PCRE2_ERROR_RECURSELOOP;\n          break;\n          }\n        offset = P->last_group_offset;\n        }\n      }\n\n    /* Remember the current last referenced character and then run the\n    recursion branch by branch. */\n\n    F->recurse_last_used = mb->last_used_ptr;\n    Lstart_branch = bracode;\n    Lframe_type = GF_RECURSE | number;\n\n    for (;;)\n      {\n      PCRE2_SPTR next_ecode;\n\n      group_frame_type = Lframe_type;\n      RMATCH(Lstart_branch + PRIV(OP_lengths)[*Lstart_branch], RM11);\n      next_ecode = Lstart_branch + GET(Lstart_branch,1);\n\n      /* Handle backtracking verbs, which are defined in a range that can\n      easily be tested for. PCRE does not allow THEN, SKIP, PRUNE or COMMIT to\n      escape beyond a recursion; they cause a NOMATCH for the entire recursion.\n\n      When one of these verbs triggers, the current recursion group number is\n      recorded. If it matches the recursion we are processing, the verb\n      happened within the recursion and we must deal with it. Otherwise it must\n      have happened after the recursion completed, and so has to be passed\n      back. See comment above about handling THEN. */\n\n      if (rrc >= MATCH_BACKTRACK_MIN && rrc <= MATCH_BACKTRACK_MAX &&\n          mb->verb_current_recurse == (Lframe_type ^ GF_RECURSE))\n        {\n        if (rrc == MATCH_THEN && mb->verb_ecode_ptr < next_ecode &&\n            (*Lstart_branch == OP_ALT || *next_ecode == OP_ALT))\n          rrc = MATCH_NOMATCH;\n        else RRETURN(MATCH_NOMATCH);\n        }\n\n      /* Note that carrying on after (*ACCEPT) in a recursion is handled in the\n      OP_ACCEPT code. Nothing needs to be done here. */\n\n      if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n      Lstart_branch = next_ecode;\n      if (*Lstart_branch != OP_ALT) RRETURN(MATCH_NOMATCH);\n      }\n    PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n#undef Lstart_branch\n#undef Lframe_type\n\n\n    /* ===================================================================== */\n    /* Positive assertions are like other groups except that PCRE doesn't allow\n    the effect of (*THEN) to escape beyond an assertion; it is therefore\n    treated as NOMATCH. (*ACCEPT) is treated as successful assertion, with its\n    captures and mark retained. Any other return is an error. */\n\n    case OP_ASSERT:\n    case OP_ASSERTBACK:\n    case OP_ASSERT_NA:\n    case OP_ASSERTBACK_NA:\n    for (;;)\n      {\n      group_frame_type = GF_NOCAPTURE;\n      RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM3);\n      if (rrc == MATCH_ACCEPT)\n        {\n        memcpy(Fovector,\n              (char *)assert_accept_frame + offsetof(heapframe, ovector),\n              assert_accept_frame->offset_top * sizeof(PCRE2_SIZE));\n        Foffset_top = assert_accept_frame->offset_top;\n        Fmark = assert_accept_frame->mark;\n        break;\n        }\n      if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc);\n      Fecode += GET(Fecode, 1);\n      if (*Fecode != OP_ALT) RRETURN(MATCH_NOMATCH);\n      }\n\n    do Fecode += GET(Fecode, 1); while (*Fecode == OP_ALT);\n    Fecode += 1 + LINK_SIZE;\n    break;\n\n\n    /* ===================================================================== */\n    /* Handle negative assertions. Loop for each non-matching branch as for\n    positive assertions. */\n\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK_NOT:\n    for (;;)\n      {\n      group_frame_type = GF_NOCAPTURE;\n      RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM4);\n      switch(rrc)\n        {\n        case MATCH_ACCEPT:   /* Assertion matched, therefore it fails. */\n        case MATCH_MATCH:\n        RRETURN (MATCH_NOMATCH);\n\n        case MATCH_NOMATCH:  /* Branch failed, try next if present. */\n        case MATCH_THEN:\n        Fecode += GET(Fecode, 1);\n        if (*Fecode != OP_ALT) goto ASSERT_NOT_FAILED;\n        break;\n\n        case MATCH_COMMIT:   /* Assertion forced to fail, therefore continue. */\n        case MATCH_SKIP:\n        case MATCH_PRUNE:\n        do Fecode += GET(Fecode, 1); while (*Fecode == OP_ALT);\n        goto ASSERT_NOT_FAILED;\n\n        default:             /* Pass back any other return */\n        RRETURN(rrc);\n        }\n      }\n\n    /* None of the branches have matched or there was a backtrack to (*COMMIT),\n    (*SKIP), (*PRUNE), or (*THEN) in the last branch. This is success for a\n    negative assertion, so carry on. */\n\n    ASSERT_NOT_FAILED:\n    Fecode += 1 + LINK_SIZE;\n    break;\n\n\n    /* ===================================================================== */\n    /* Handle scan substring operation. */\n\n#define Lsaved_end_subject   F->fields.op_assert_scs.saved_end_subject\n#define Lsaved_eptr          F->fields.op_assert_scs.saved_eptr\n#define Ltrue_end_extra      F->fields.op_assert_scs.true_end_extra\n#define Lextra_size          F->fields.op_assert_scs.extra_size\n#define Lsaved_moptions      F->fields.op_assert_scs.saved_moptions\n\n    case OP_ASSERT_SCS:\n    length = 0;\n      {\n      PCRE2_SPTR ecode = Fecode + 1 + LINK_SIZE;\n      int count;\n      PCRE2_SPTR slot;\n\n      /* Disable compiler warning. */\n      offset = 0;\n      (void)offset;\n\n      for (;;)\n        {\n        if (*ecode == OP_CREF)\n          {\n          length += 1+IMM2_SIZE;\n          offset = (GET2(ecode, 1) << 1) - 2;\n          ecode += 1+IMM2_SIZE;\n          if (offset < Foffset_top && Fovector[offset] != PCRE2_UNSET)\n            goto SCS_OFFSET_FOUND;\n          continue;\n          }\n\n        if (*ecode != OP_DNCREF) RRETURN(MATCH_NOMATCH);\n\n        count = GET2(ecode, 1 + IMM2_SIZE);\n        slot = mb->name_table + GET2(ecode, 1) * mb->name_entry_size;\n        length += 1+2*IMM2_SIZE;\n        ecode += 1+2*IMM2_SIZE;\n\n        while (count > 0)\n          {\n          offset = (GET2(slot, 0) << 1) - 2;\n          if (offset < Foffset_top && Fovector[offset] != PCRE2_UNSET)\n            goto SCS_OFFSET_FOUND;\n          slot += mb->name_entry_size;\n          count--;\n          }\n        }\n\n      SCS_OFFSET_FOUND:\n\n      /* Skip remaining options. */\n      for (;;)\n        {\n        if (*ecode == OP_CREF)\n          {\n          length += 1+IMM2_SIZE;\n          ecode += 1+IMM2_SIZE;\n          }\n        else if (*ecode == OP_DNCREF)\n          {\n          length += 1+2*IMM2_SIZE;\n          ecode += 1+2*IMM2_SIZE;\n          }\n        else break;\n        }\n      }\n\n    Lsaved_end_subject = mb->end_subject;\n    Ltrue_end_extra = mb->true_end_subject - mb->end_subject;\n    Lsaved_eptr = Feptr;\n    Lsaved_moptions = mb->moptions;\n\n    Feptr = mb->start_subject + Fovector[offset];\n    mb->true_end_subject = mb->end_subject =\n      mb->start_subject + Fovector[offset + 1];\n    mb->moptions &= ~PCRE2_NOTEOL;\n\n    for (;;)\n      {\n      group_frame_type = GF_NOCAPTURE;\n      RMATCH(Fecode + 1 + LINK_SIZE + length, RM38);\n      if (rrc == MATCH_ACCEPT)\n        {\n        memcpy(Fovector,\n              (char *)assert_accept_frame + offsetof(heapframe, ovector),\n              assert_accept_frame->offset_top * sizeof(PCRE2_SIZE));\n        Foffset_top = assert_accept_frame->offset_top;\n        Fmark = assert_accept_frame->mark;\n        mb->end_subject = Lsaved_end_subject;\n        mb->true_end_subject = mb->end_subject + Ltrue_end_extra;\n        mb->moptions = Lsaved_moptions;\n        break;\n        }\n\n      if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN)\n        {\n        mb->end_subject = Lsaved_end_subject;\n        mb->true_end_subject = mb->end_subject + Ltrue_end_extra;\n        mb->moptions = Lsaved_moptions;\n        RRETURN(rrc);\n        }\n\n      Fecode += GET(Fecode, 1);\n      if (*Fecode != OP_ALT)\n        {\n        mb->end_subject = Lsaved_end_subject;\n        mb->true_end_subject = mb->end_subject + Ltrue_end_extra;\n        mb->moptions = Lsaved_moptions;\n        RRETURN(MATCH_NOMATCH);\n        }\n      length = 0;\n      }\n\n    do Fecode += GET(Fecode, 1); while (*Fecode == OP_ALT);\n    Fecode += 1 + LINK_SIZE;\n    Feptr = Lsaved_eptr;\n    break;\n\n#undef Lsaved_end_subject\n#undef Lsaved_eptr\n#undef Ltrue_end_extra\n#undef Lextra_size\n#undef Lsave_moptions\n\n\n    /* ===================================================================== */\n    /* The callout item calls an external function, if one is provided, passing\n    details of the match so far. This is mainly for debugging, though the\n    function is able to force a failure. */\n\n    case OP_CALLOUT:\n    case OP_CALLOUT_STR:\n    rrc = do_callout(F, mb, &length);\n    if (rrc > 0) RRETURN(MATCH_NOMATCH);\n    if (rrc < 0) RRETURN(rrc);\n    Fecode += length;\n    break;\n\n\n    /* ===================================================================== */\n    /* Conditional group: compilation checked that there are no more than two\n    branches. If the condition is false, skipping the first branch takes us\n    past the end of the item if there is only one branch, but that's exactly\n    what we want. */\n\n#define Lstart_branch  F->fields.op_cond.start_branch\n#define Llength        F->fields.op_cond.length\n#define Lpositive      F->byte1\n\n    case OP_COND:\n    case OP_SCOND:\n\n    /* The variable Llength will be added to Fecode when the condition is\n    false, to get to the second branch. Setting it to the offset to the ALT or\n    KET, then incrementing Fecode achieves this effect. However, if the second\n    branch is non-existent, we must point to the KET so that the end of the\n    group is correctly processed. We now have Fecode pointing to the condition\n    or callout. */\n\n    Llength = GET(Fecode, 1);    /* Offset to the second branch */\n    if (Fecode[Llength] != OP_ALT) Llength -= 1 + LINK_SIZE;\n    Fecode += 1 + LINK_SIZE;     /* From this opcode */\n\n    /* Because of the way auto-callout works during compile, a callout item is\n    inserted between OP_COND and an assertion condition. Such a callout can\n    also be inserted manually. */\n\n    if (*Fecode == OP_CALLOUT || *Fecode == OP_CALLOUT_STR)\n      {\n      rrc = do_callout(F, mb, &length);\n      if (rrc > 0) RRETURN(MATCH_NOMATCH);\n      if (rrc < 0) RRETURN(rrc);\n\n      /* Advance Fecode past the callout, so it now points to the condition. We\n      must adjust Llength so that the value of Fecode+Llength is unchanged. */\n\n      Fecode += length;\n      Llength -= length;\n      }\n\n    /* Test the various possible conditions */\n\n    condition = FALSE;\n    switch(*Fecode)\n      {\n      case OP_RREF:                  /* Group recursion test */\n      if (Fcurrent_recurse != RECURSE_UNSET)\n        {\n        number = GET2(Fecode, 1);\n        condition = (number == RREF_ANY || number == Fcurrent_recurse);\n        }\n      break;\n\n      case OP_DNRREF:       /* Duplicate named group recursion test */\n      if (Fcurrent_recurse != RECURSE_UNSET)\n        {\n        int count = GET2(Fecode, 1 + IMM2_SIZE);\n        PCRE2_SPTR slot = mb->name_table + GET2(Fecode, 1) * mb->name_entry_size;\n        while (count-- > 0)\n          {\n          number = GET2(slot, 0);\n          condition = number == Fcurrent_recurse;\n          if (condition) break;\n          slot += mb->name_entry_size;\n          }\n        }\n      break;\n\n      case OP_CREF:                         /* Numbered group used test */\n      offset = (GET2(Fecode, 1) << 1) - 2;  /* Doubled ref number */\n      condition = offset < Foffset_top && Fovector[offset] != PCRE2_UNSET;\n      break;\n\n      case OP_DNCREF:      /* Duplicate named group used test */\n        {\n        int count = GET2(Fecode, 1 + IMM2_SIZE);\n        PCRE2_SPTR slot = mb->name_table + GET2(Fecode, 1) * mb->name_entry_size;\n        while (count-- > 0)\n          {\n          offset = (GET2(slot, 0) << 1) - 2;\n          condition = offset < Foffset_top && Fovector[offset] != PCRE2_UNSET;\n          if (condition) break;\n          slot += mb->name_entry_size;\n          }\n        }\n      break;\n\n      case OP_FALSE:\n      case OP_FAIL:   /* The assertion (?!) becomes OP_FAIL */\n      break;\n\n      case OP_TRUE:\n      condition = TRUE;\n      break;\n\n      /* The condition is an assertion. Run code similar to the assertion code\n      above. */\n\n\n      default:\n      Lpositive = (uint8_t)(*Fecode == OP_ASSERT || *Fecode == OP_ASSERTBACK);\n      Lstart_branch = Fecode;\n\n      for (;;)\n        {\n        group_frame_type = GF_CONDASSERT;\n        RMATCH(Lstart_branch + PRIV(OP_lengths)[*Lstart_branch], RM5);\n\n        switch(rrc)\n          {\n          case MATCH_ACCEPT:  /* Save captures */\n          memcpy(Fovector,\n                (char *)assert_accept_frame + offsetof(heapframe, ovector),\n                assert_accept_frame->offset_top * sizeof(PCRE2_SIZE));\n          Foffset_top = assert_accept_frame->offset_top;\n\n          PCRE2_FALLTHROUGH /* Fall through */\n          /* In the case of a match, the captures have already been put into\n          the current frame. */\n\n          case MATCH_MATCH:\n          condition = Lpositive;   /* TRUE for positive assertion */\n          break;\n\n          /* PCRE doesn't allow the effect of (*THEN) to escape beyond an\n          assertion; it is therefore always treated as NOMATCH. */\n\n          case MATCH_NOMATCH:\n          case MATCH_THEN:\n          Lstart_branch += GET(Lstart_branch, 1);\n          if (*Lstart_branch == OP_ALT) continue;  /* Try next branch */\n          condition = !Lpositive;  /* TRUE for negative assertion */\n          break;\n\n          /* These force no match without checking other branches. */\n\n          case MATCH_COMMIT:\n          case MATCH_SKIP:\n          case MATCH_PRUNE:\n          condition = !Lpositive;\n          break;\n\n          default:\n          RRETURN(rrc);\n          }\n        break;  /* Out of the branch loop */\n        }\n\n      /* If the condition is true, find the end of the assertion so that\n      advancing past it gets us to the start of the first branch. */\n\n      if (condition)\n        {\n        do Fecode += GET(Fecode, 1); while (*Fecode == OP_ALT);\n        }\n      break;  /* End of assertion condition */\n      }\n\n    /* Choose branch according to the condition. */\n\n    Fecode += condition? PRIV(OP_lengths)[*Fecode] : Llength;\n\n    /* If the opcode is OP_SCOND it means we are at a repeated conditional\n    group that might match an empty string. We must therefore descend a level\n    so that the start is remembered for checking. For OP_COND we can just\n    continue at this level. */\n\n    if (Fop == OP_SCOND)\n      {\n      group_frame_type = GF_NOCAPTURE;\n      RMATCH(Fecode, RM35);\n      RRETURN(rrc);\n      }\n    break;\n\n#undef Lstart_branch\n#undef Llength\n#undef Lpositive\n\n\n/* ========================================================================= */\n/*                  End of start of parenthesis opcodes                      */\n/* ========================================================================= */\n\n\n    /* ===================================================================== */\n    /* Move the subject pointer back by one fixed amount. This occurs at the\n    start of each branch that has a fixed length in a lookbehind assertion. If\n    we are too close to the start to move back, fail. When working with UTF-8\n    we move back a number of characters, not bytes. */\n\n    case OP_REVERSE:\n    number = GET2(Fecode, 1);\n#ifdef SUPPORT_UNICODE\n    if (utf)\n      {\n      /* We used to do a simpler `while (number-- > 0)` but that triggers\n      clang's unsigned integer overflow sanitizer. */\n      while (number > 0)\n        {\n        --number;\n        if (Feptr <= mb->check_subject) RRETURN(MATCH_NOMATCH);\n        Feptr--;\n        BACKCHAR(Feptr);\n        }\n      }\n    else\n#endif\n\n    /* No UTF support, or not in UTF mode: count is code unit count */\n\n      {\n      if ((ptrdiff_t)number > Feptr - mb->start_subject) RRETURN(MATCH_NOMATCH);\n      Feptr -= number;\n      }\n\n    /* Save the earliest consulted character, then skip to next opcode */\n\n    if (Feptr < mb->start_used_ptr) mb->start_used_ptr = Feptr;\n    Fecode += 1 + IMM2_SIZE;\n    break;\n\n\n    /* ===================================================================== */\n    /* Move the subject pointer back by a variable amount. This occurs at the\n    start of each branch of a lookbehind assertion when the branch has a\n    variable, but limited, length. A loop is needed to try matching the branch\n    after moving back different numbers of characters. If we are too close to\n    the start to move back even the minimum amount, fail. When working with\n    UTF-8 we move back a number of characters, not bytes. */\n\n#define Lmin    F->fields.op_vreverse.min\n#define Lmax    F->fields.op_vreverse.max\n\n    case OP_VREVERSE:\n    Lmin = GET2(Fecode, 1);\n    Lmax = GET2(Fecode, 1 + IMM2_SIZE);\n\n    /* Move back by the maximum branch length and then work forwards. This\n    ensures that items such as \\d{3,5} get the maximum length, which is\n    relevant for captures, and makes for Perl compatibility. */\n\n#ifdef SUPPORT_UNICODE\n    if (utf)\n      {\n      for (i = 0; i < Lmax; i++)\n        {\n        if (Feptr == mb->start_subject)\n          {\n          if (i < Lmin) RRETURN(MATCH_NOMATCH);\n          Lmax = i;\n          break;\n          }\n        Feptr--;\n        BACKCHAR(Feptr);\n        }\n      }\n    else\n#endif\n\n    /* No UTF support or not in UTF mode */\n\n      {\n      ptrdiff_t diff = Feptr - mb->start_subject;\n      uint32_t available = (diff > 65535)? 65535 : ((diff > 0)? (int)diff : 0);\n      if (Lmin > available) RRETURN(MATCH_NOMATCH);\n      if (Lmax > available) Lmax = available;\n      Feptr -= Lmax;\n      }\n\n    /* Now try matching, moving forward one character on failure, until we\n    reach the minimum back length. */\n\n    for (;;)\n      {\n      RMATCH(Fecode + 1 + 2 * IMM2_SIZE, RM37);\n      if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n      if (Lmax-- <= Lmin) RRETURN(MATCH_NOMATCH);\n      Feptr++;\n#ifdef SUPPORT_UNICODE\n      if (utf) { FORWARDCHARTEST(Feptr, mb->end_subject); }\n#endif\n      }\n    PCRE2_UNREACHABLE(); /* Control never reaches here */\n\n#undef Lmin\n#undef Lmax\n\n\n    /* ===================================================================== */\n    /* An alternation is the end of a branch; scan along to find the end of the\n    bracketed group. */\n\n    case OP_ALT:\n    branch_end = Fecode;\n    do Fecode += GET(Fecode,1); while (*Fecode == OP_ALT);\n    break;\n\n\n    /* ===================================================================== */\n    /* The end of a parenthesized group. For all but OP_BRA and OP_COND, the\n    starting frame was added to the chained frames in order to remember the\n    starting subject position for the group. (Not true for OP_BRA when it's a\n    whole pattern recursion, but that is handled separately below.)*/\n\n    case OP_KET:\n    case OP_KETRMIN:\n    case OP_KETRMAX:\n    case OP_KETRPOS:\n\n    bracode = Fecode - GET(Fecode, 1);\n\n    if (branch_end == NULL) branch_end = Fecode;\n    branch_start = bracode;\n    while (branch_start + GET(branch_start, 1) != branch_end)\n      branch_start += GET(branch_start, 1);\n    branch_end = NULL;\n\n    /* Point N to the frame at the start of the most recent group, and P to its\n    predecessor. Remember the subject pointer at the start of the group. */\n\n    if (*bracode != OP_BRA && *bracode != OP_COND)\n      {\n      N = (heapframe *)((char *)match_data->heapframes + Flast_group_offset);\n      P = (heapframe *)((char *)N - frame_size);\n      Flast_group_offset = P->last_group_offset;\n\n#ifdef DEBUG_SHOW_RMATCH\n      fprintf(stderr, \"++ KET for frame=%d type=%x prev char offset=%lu\\n\",\n        N->rdepth, N->group_frame_type,\n        (char *)P->eptr - (char *)mb->start_subject);\n#endif\n\n      /* If we are at the end of an assertion that is a condition, first check\n      to see if we are at the end of a variable-length branch in a lookbehind.\n      If this is the case and we have not landed on the current character,\n      return no match. Compare code below for non-condition lookbehinds. In\n      other cases, return a match, discarding any intermediate backtracking\n      points. Copy back the mark setting and the captures into the frame before\n      N so that they are set on return. Doing this for all assertions, both\n      positive and negative, seems to match what Perl does. */\n\n      if (N->group_frame_type == GF_CONDASSERT)\n        {\n        if ((*bracode == OP_ASSERTBACK || *bracode == OP_ASSERTBACK_NOT) &&\n            branch_start[1 + LINK_SIZE] == OP_VREVERSE && Feptr != P->eptr)\n          RRETURN(MATCH_NOMATCH);\n        memcpy((char *)P + offsetof(heapframe, ovector), Fovector,\n          Foffset_top * sizeof(PCRE2_SIZE));\n        P->offset_top = Foffset_top;\n        P->mark = Fmark;\n        Fback_frame = (char *)F - (char *)P;\n        RRETURN(MATCH_MATCH);\n        }\n      }\n    else P = NULL;   /* Indicates starting frame not recorded */\n\n    /* The group was not a conditional assertion. */\n\n    switch (*bracode)\n      {\n      /* Whole pattern recursion is handled as a recursion into group 0, but\n      the entire pattern is wrapped in OP_BRA/OP_KET rather than a capturing\n      group - a design mistake: it should perhaps have been capture group 0.\n      Anyway, that means the end of such recursion must be handled here. It is\n      detected by checking for an immediately following OP_END when we are\n      recursing in group 0. If this is not the end of a whole-pattern\n      recursion, there is nothing to be done. */\n\n      case OP_BRA:\n      if (Fcurrent_recurse != 0 || Fecode[1+LINK_SIZE] != OP_END) break;\n\n      /* It is the end of whole-pattern recursion. */\n\n      offset = Flast_group_offset;\n\n      /* Corrupted heapframes?. Trigger an assert and return an error */\n      PCRE2_ASSERT(offset != PCRE2_UNSET);\n      if (offset == PCRE2_UNSET) return PCRE2_ERROR_INTERNAL;\n\n      N = (heapframe *)((char *)match_data->heapframes + offset);\n      P = (heapframe *)((char *)N - frame_size);\n      Flast_group_offset = P->last_group_offset;\n\n      /* Reinstate the previous set of captures and then carry on after the\n      recursion call. */\n\n      Fecode = P->ecode + 1 + LINK_SIZE;\n\n      if (*Fecode != OP_CREF)\n        {\n        memcpy(F->ovector, P->ovector, Foffset_top * sizeof(PCRE2_SIZE));\n        Foffset_top = P->offset_top;\n        }\n      else\n        recurse_update_offsets(F, P);\n\n      Fcapture_last = P->capture_last;\n      Fcurrent_recurse = P->current_recurse;\n      continue;  /* With next opcode */\n\n      case OP_COND:     /* No need to do anything for these */\n      case OP_SCOND:\n      break;\n\n      /* Non-atomic positive assertions are like OP_BRA, except that the\n      subject pointer must be put back to where it was at the start of the\n      assertion. For a variable lookbehind, check its end point. */\n\n      case OP_ASSERTBACK_NA:\n      if (branch_start[1 + LINK_SIZE] == OP_VREVERSE && Feptr != P->eptr)\n        RRETURN(MATCH_NOMATCH);\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      case OP_ASSERT_NA:\n      if (Feptr > mb->last_used_ptr) mb->last_used_ptr = Feptr;\n      Feptr = P->eptr;\n      break;\n\n      /* Atomic positive assertions are like OP_ONCE, except that in addition\n      the subject pointer must be put back to where it was at the start of the\n      assertion. For a variable lookbehind, check its end point. */\n\n      case OP_ASSERTBACK:\n      if (branch_start[1 + LINK_SIZE] == OP_VREVERSE && Feptr != P->eptr)\n        RRETURN(MATCH_NOMATCH);\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      case OP_ASSERT:\n      if (Feptr > mb->last_used_ptr) mb->last_used_ptr = Feptr;\n      Feptr = P->eptr;\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      /* For an atomic group, discard internal backtracking points. We must\n      also ensure that any remaining branches within the top-level of the group\n      are not tried. Do this by adjusting the code pointer within the backtrack\n      frame so that it points to the final branch. */\n\n      case OP_ONCE:\n      Fback_frame = ((char *)F - (char *)P);\n      for (;;)\n        {\n        uint32_t y = GET(P->ecode,1);\n        if ((P->ecode)[y] != OP_ALT) break;\n        P->ecode += y;\n        }\n      break;\n\n      /* A matching negative assertion returns MATCH, which is turned into\n      NOMATCH at the assertion level. For a variable lookbehind, check its end\n      point. */\n\n      case OP_ASSERTBACK_NOT:\n      if (branch_start[1 + LINK_SIZE] == OP_VREVERSE && Feptr != P->eptr)\n        RRETURN(MATCH_NOMATCH);\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      case OP_ASSERT_NOT:\n      RRETURN(MATCH_MATCH);\n\n      /* A scan substring group must preserve the current end_subject,\n      and restore it before the backtracking is performed into its sub\n      pattern. */\n\n      case OP_ASSERT_SCS:\n      F->fields.op_assert_scs.saved_end_subject = mb->end_subject;\n      mb->end_subject = P->fields.op_assert_scs.saved_end_subject;\n      mb->true_end_subject = mb->end_subject + P->fields.op_assert_scs.true_end_extra;\n      Feptr = P->fields.op_assert_scs.saved_eptr;\n\n      RMATCH(Fecode + 1 + LINK_SIZE, RM39);\n\n      mb->end_subject = F->fields.op_assert_scs.saved_end_subject;\n      mb->true_end_subject = mb->end_subject;\n      RRETURN(rrc);\n      break;\n\n      /* At the end of a script run, apply the script-checking rules. This code\n      will never by exercised if Unicode support it not compiled, because in\n      that environment script runs cause an error at compile time. */\n\n      case OP_SCRIPT_RUN:\n      if (!PRIV(script_run)(P->eptr, Feptr, utf)) RRETURN(MATCH_NOMATCH);\n      break;\n\n      /* Whole-pattern recursion is coded as a recurse into group 0, and is\n      handled with OP_BRA above. Other recursion is handled here. */\n\n      case OP_CBRA:\n      case OP_CBRAPOS:\n      case OP_SCBRA:\n      case OP_SCBRAPOS:\n      number = GET2(bracode, 1+LINK_SIZE);\n\n      /* Handle a recursively called group. We reinstate the previous set of\n      captures and then carry on after the recursion call. */\n\n      if (Fcurrent_recurse == number)\n        {\n        P = (heapframe *)((char *)N - frame_size);\n        Fecode = P->ecode + 1 + LINK_SIZE;\n\n        if (*Fecode != OP_CREF)\n          {\n          memcpy(F->ovector, P->ovector, Foffset_top * sizeof(PCRE2_SIZE));\n          Foffset_top = P->offset_top;\n          }\n        else\n          recurse_update_offsets(F, P);\n\n        Fcapture_last = P->capture_last;\n        Fcurrent_recurse = P->current_recurse;\n        continue;  /* With next opcode */\n        }\n\n      /* Deal with actual capturing. */\n\n      offset = (number << 1) - 2;\n      Fcapture_last = number;\n      Fovector[offset] = P->eptr - mb->start_subject;\n      Fovector[offset+1] = Feptr - mb->start_subject;\n      if (offset >= Foffset_top) Foffset_top = offset + 2;\n      break;\n      }  /* End actions relating to the starting opcode */\n\n    /* OP_KETRPOS is a possessive repeating ket. Remember the current position,\n    and return the MATCH_KETRPOS. This makes it possible to do the repeats one\n    at a time from the outer level. This must precede the empty string test -\n    in this case that test is done at the outer level. */\n\n    if (*Fecode == OP_KETRPOS)\n      {\n      memcpy((char *)P + offsetof(heapframe, eptr),\n             (char *)F + offsetof(heapframe, eptr),\n             frame_copy_size);\n      RRETURN(MATCH_KETRPOS);\n      }\n\n    /* Handle the different kinds of closing brackets. A non-repeating ket\n    needs no special action, just continuing at this level. This also happens\n    for the repeating kets if the group matched no characters, in order to\n    forcibly break infinite loops. Otherwise, the repeating kets try the rest\n    of the pattern or restart from the preceding bracket, in the appropriate\n    order. */\n\n    if (Fop != OP_KET && (P == NULL || Feptr != P->eptr))\n      {\n      if (Fop == OP_KETRMIN)\n        {\n        RMATCH(Fecode + 1 + LINK_SIZE, RM6);\n        if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n        Fecode -= GET(Fecode, 1);\n        break;   /* End of ket processing */\n        }\n\n      /* Repeat the maximum number of times (KETRMAX) */\n\n      RMATCH(bracode, RM7);\n      if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n      }\n\n    /* Carry on at this level for a non-repeating ket, or after matching an\n    empty string, or after repeating for a maximum number of times. */\n\n    Fecode += 1 + LINK_SIZE;\n    break;\n\n\n    /* ===================================================================== */\n    /* Start and end of line assertions, not multiline mode. */\n\n    case OP_CIRC:   /* Start of line, unless PCRE2_NOTBOL is set. */\n    if (Feptr != mb->start_subject || (mb->moptions & PCRE2_NOTBOL) != 0)\n      RRETURN(MATCH_NOMATCH);\n    Fecode++;\n    break;\n\n    case OP_SOD:    /* Unconditional start of subject */\n    if (Feptr != mb->start_subject) RRETURN(MATCH_NOMATCH);\n    Fecode++;\n    break;\n\n    /* When PCRE2_NOTEOL is unset, assert before the subject end, or a\n    terminating newline unless PCRE2_DOLLAR_ENDONLY is set. */\n\n    case OP_DOLL:\n    if ((mb->moptions & PCRE2_NOTEOL) != 0) RRETURN(MATCH_NOMATCH);\n    if ((mb->poptions & PCRE2_DOLLAR_ENDONLY) == 0) goto ASSERT_NL_OR_EOS;\n\n    PCRE2_FALLTHROUGH /* Fall through */\n    /* Unconditional end of subject assertion (\\z). */\n\n    case OP_EOD:\n    if (Feptr < mb->true_end_subject) RRETURN(MATCH_NOMATCH);\n    if (mb->partial != 0)\n      {\n      mb->hitend = TRUE;\n      if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;\n      }\n    Fecode++;\n    break;\n\n    /* End of subject or ending \\n assertion (\\Z) */\n\n    case OP_EODN:\n    ASSERT_NL_OR_EOS:\n    if (Feptr < mb->true_end_subject &&\n        (!IS_NEWLINE(Feptr) || Feptr != mb->true_end_subject - mb->nllen))\n      {\n      if (mb->partial != 0 &&\n          Feptr + 1 >= mb->end_subject &&\n          NLBLOCK->nltype == NLTYPE_FIXED &&\n          NLBLOCK->nllen == 2 &&\n          *Feptr == NLBLOCK->nl[0])\n        {\n        mb->hitend = TRUE;\n        if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;\n        }\n      RRETURN(MATCH_NOMATCH);\n      }\n\n    /* Either at end of string or \\n before end. */\n\n    if (mb->partial != 0)\n      {\n      mb->hitend = TRUE;\n      if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;\n      }\n    Fecode++;\n    break;\n\n\n    /* ===================================================================== */\n    /* Start and end of line assertions, multiline mode. */\n\n    /* Start of subject unless notbol, or after any newline except for one at\n    the very end, unless PCRE2_ALT_CIRCUMFLEX is set. */\n\n    case OP_CIRCM:\n    if ((mb->moptions & PCRE2_NOTBOL) != 0 && Feptr == mb->start_subject)\n      RRETURN(MATCH_NOMATCH);\n    if (Feptr != mb->start_subject &&\n        ((Feptr == mb->end_subject &&\n           (mb->poptions & PCRE2_ALT_CIRCUMFLEX) == 0) ||\n         !WAS_NEWLINE(Feptr)))\n      RRETURN(MATCH_NOMATCH);\n    Fecode++;\n    break;\n\n    /* Assert before any newline, or before end of subject unless noteol is\n    set. */\n\n    case OP_DOLLM:\n    if (Feptr < mb->end_subject)\n      {\n      if (!IS_NEWLINE(Feptr))\n        {\n        if (mb->partial != 0 &&\n            Feptr + 1 >= mb->end_subject &&\n            NLBLOCK->nltype == NLTYPE_FIXED &&\n            NLBLOCK->nllen == 2 &&\n            *Feptr == NLBLOCK->nl[0])\n          {\n          mb->hitend = TRUE;\n          if (mb->partial > 1) return PCRE2_ERROR_PARTIAL;\n          }\n        RRETURN(MATCH_NOMATCH);\n        }\n      }\n    else\n      {\n      if ((mb->moptions & PCRE2_NOTEOL) != 0) RRETURN(MATCH_NOMATCH);\n      SCHECK_PARTIAL();\n      }\n    Fecode++;\n    break;\n\n\n    /* ===================================================================== */\n    /* Start of match assertion */\n\n    case OP_SOM:\n    if (Feptr != mb->start_subject + mb->start_offset) RRETURN(MATCH_NOMATCH);\n    Fecode++;\n    break;\n\n\n    /* ===================================================================== */\n    /* Reset the start of match point */\n\n    case OP_SET_SOM:\n    Fstart_match = Feptr;\n    Fecode++;\n    break;\n\n\n    /* ===================================================================== */\n    /* Word boundary assertions. Find out if the previous and current\n    characters are \"word\" characters. It takes a bit more work in UTF mode.\n    Characters > 255 are assumed to be \"non-word\" characters when PCRE2_UCP is\n    not set. When it is set, use Unicode properties if available, even when not\n    in UTF mode. Remember the earliest and latest consulted characters. */\n\n    case OP_NOT_WORD_BOUNDARY:\n    case OP_WORD_BOUNDARY:\n    case OP_NOT_UCP_WORD_BOUNDARY:\n    case OP_UCP_WORD_BOUNDARY:\n    if (Feptr == mb->check_subject) prev_is_word = FALSE; else\n      {\n      PCRE2_SPTR lastptr = Feptr - 1;\n#ifdef SUPPORT_UNICODE\n      if (utf)\n        {\n        BACKCHAR(lastptr);\n        GETCHAR(fc, lastptr);\n        }\n      else\n#endif  /* SUPPORT_UNICODE */\n      fc = *lastptr;\n      if (lastptr < mb->start_used_ptr) mb->start_used_ptr = lastptr;\n#ifdef SUPPORT_UNICODE\n      if (Fop == OP_UCP_WORD_BOUNDARY || Fop == OP_NOT_UCP_WORD_BOUNDARY)\n        {\n        int chartype = UCD_CHARTYPE(fc);\n        int category = PRIV(ucp_gentype)[chartype];\n        prev_is_word = (category == ucp_L || category == ucp_N ||\n          chartype == ucp_Mn || chartype == ucp_Pc);\n        }\n      else\n#endif  /* SUPPORT_UNICODE */\n      prev_is_word = CHMAX_255(fc) && (mb->ctypes[fc] & ctype_word) != 0;\n      }\n\n    /* Get status of next character */\n\n    if (Feptr >= mb->end_subject)\n      {\n      SCHECK_PARTIAL();\n      cur_is_word = FALSE;\n      }\n    else\n      {\n      PCRE2_SPTR nextptr = Feptr + 1;\n#ifdef SUPPORT_UNICODE\n      if (utf)\n        {\n        FORWARDCHARTEST(nextptr, mb->end_subject);\n        GETCHAR(fc, Feptr);\n        }\n      else\n#endif  /* SUPPORT_UNICODE */\n      fc = *Feptr;\n      if (nextptr > mb->last_used_ptr) mb->last_used_ptr = nextptr;\n#ifdef SUPPORT_UNICODE\n      if (Fop == OP_UCP_WORD_BOUNDARY || Fop == OP_NOT_UCP_WORD_BOUNDARY)\n        {\n        int chartype = UCD_CHARTYPE(fc);\n        int category = PRIV(ucp_gentype)[chartype];\n        cur_is_word = (category == ucp_L || category == ucp_N ||\n          chartype == ucp_Mn || chartype == ucp_Pc);\n        }\n      else\n#endif  /* SUPPORT_UNICODE */\n      cur_is_word = CHMAX_255(fc) && (mb->ctypes[fc] & ctype_word) != 0;\n      }\n\n    /* Now see if the situation is what we want */\n\n    if ((*Fecode++ == OP_WORD_BOUNDARY || Fop == OP_UCP_WORD_BOUNDARY)?\n         cur_is_word == prev_is_word : cur_is_word != prev_is_word)\n      RRETURN(MATCH_NOMATCH);\n    break;\n\n\n    /* ===================================================================== */\n    /* Backtracking (*VERB)s, with and without arguments. Note that if the\n    pattern is successfully matched, we do not come back from RMATCH. */\n\n    case OP_MARK:\n    Fmark = mb->nomatch_mark = Fecode + 2;\n    RMATCH(Fecode + PRIV(OP_lengths)[*Fecode] + Fecode[1], RM12);\n\n    /* A return of MATCH_SKIP_ARG means that matching failed at SKIP with an\n    argument, and we must check whether that argument matches this MARK's\n    argument. It is passed back in mb->verb_skip_ptr. If it does match, we\n    return MATCH_SKIP with mb->verb_skip_ptr now pointing to the subject\n    position that corresponds to this mark. Otherwise, pass back the return\n    code unaltered. */\n\n    if (rrc == MATCH_SKIP_ARG &&\n             PRIV(strcmp)(Fecode + 2, mb->verb_skip_ptr) == 0)\n      {\n      mb->verb_skip_ptr = Feptr;   /* Pass back current position */\n      RRETURN(MATCH_SKIP);\n      }\n    RRETURN(rrc);\n\n    case OP_FAIL:\n    RRETURN(MATCH_NOMATCH);\n\n    /* Record the current recursing group number in mb->verb_current_recurse\n    when a backtracking return such as MATCH_COMMIT is given. This enables the\n    recurse processing to catch verbs from within the recursion. */\n\n    case OP_COMMIT:\n    RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM13);\n    if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n    mb->verb_current_recurse = Fcurrent_recurse;\n    RRETURN(MATCH_COMMIT);\n\n    case OP_COMMIT_ARG:\n    Fmark = mb->nomatch_mark = Fecode + 2;\n    RMATCH(Fecode + PRIV(OP_lengths)[*Fecode] + Fecode[1], RM36);\n    if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n    mb->verb_current_recurse = Fcurrent_recurse;\n    RRETURN(MATCH_COMMIT);\n\n    case OP_PRUNE:\n    RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM14);\n    if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n    mb->verb_current_recurse = Fcurrent_recurse;\n    RRETURN(MATCH_PRUNE);\n\n    case OP_PRUNE_ARG:\n    Fmark = mb->nomatch_mark = Fecode + 2;\n    RMATCH(Fecode + PRIV(OP_lengths)[*Fecode] + Fecode[1], RM15);\n    if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n    mb->verb_current_recurse = Fcurrent_recurse;\n    RRETURN(MATCH_PRUNE);\n\n    case OP_SKIP:\n    RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM16);\n    if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n    mb->verb_skip_ptr = Feptr;   /* Pass back current position */\n    mb->verb_current_recurse = Fcurrent_recurse;\n    RRETURN(MATCH_SKIP);\n\n    /* Note that, for Perl compatibility, SKIP with an argument does NOT set\n    nomatch_mark. When a pattern match ends with a SKIP_ARG for which there was\n    not a matching mark, we have to re-run the match, ignoring the SKIP_ARG\n    that failed and any that precede it (either they also failed, or were not\n    triggered). To do this, we maintain a count of executed SKIP_ARGs. If a\n    SKIP_ARG gets to top level, the match is re-run with mb->ignore_skip_arg\n    set to the count of the one that failed. */\n\n    case OP_SKIP_ARG:\n    mb->skip_arg_count++;\n    if (mb->skip_arg_count <= mb->ignore_skip_arg)\n      {\n      Fecode += PRIV(OP_lengths)[*Fecode] + Fecode[1];\n      break;\n      }\n    RMATCH(Fecode + PRIV(OP_lengths)[*Fecode] + Fecode[1], RM17);\n    if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n\n    /* Pass back the current skip name and return the special MATCH_SKIP_ARG\n    return code. This will either be caught by a matching MARK, or get to the\n    top, where it causes a rematch with mb->ignore_skip_arg set to the value of\n    mb->skip_arg_count. */\n\n    mb->verb_skip_ptr = Fecode + 2;\n    mb->verb_current_recurse = Fcurrent_recurse;\n    RRETURN(MATCH_SKIP_ARG);\n\n    /* For THEN (and THEN_ARG) we pass back the address of the opcode, so that\n    the branch in which it occurs can be determined. */\n\n    case OP_THEN:\n    RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM18);\n    if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n    mb->verb_ecode_ptr = Fecode;\n    mb->verb_current_recurse = Fcurrent_recurse;\n    RRETURN(MATCH_THEN);\n\n    case OP_THEN_ARG:\n    Fmark = mb->nomatch_mark = Fecode + 2;\n    RMATCH(Fecode + PRIV(OP_lengths)[*Fecode] + Fecode[1], RM19);\n    if (rrc != MATCH_NOMATCH) RRETURN(rrc);\n    mb->verb_ecode_ptr = Fecode;\n    mb->verb_current_recurse = Fcurrent_recurse;\n    RRETURN(MATCH_THEN);\n\n\n    /* ===================================================================== */\n    /* There's been some horrible disaster. Arrival here can only mean there is\n    something seriously wrong in the code above or the OP_xxx definitions. */\n\n    /* LCOV_EXCL_START */\n    default:\n    PCRE2_DEBUG_UNREACHABLE();\n    return PCRE2_ERROR_INTERNAL;\n    /* LCOV_EXCL_STOP */\n    }\n\n  /* Do not insert any code in here without much thought; it is assumed\n  that \"continue\" in the code above comes out to here to repeat the main\n  loop. */\n\n  }  /* End of main loop */\n\nPCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */\n\n/* ========================================================================= */\n/* The RRETURN() macro jumps here. The number that is saved in Freturn_id\nindicates which label we actually want to return to. The value in Frdepth is\nthe index number of the frame in the vector. The return value has been placed\nin rrc. */\n\n#define LBL(val) case val: goto L_RM##val;\n\nRETURN_SWITCH:\nif (Feptr > mb->last_used_ptr) mb->last_used_ptr = Feptr;\nif (Frdepth == 0) return rrc;                     /* Exit from the top level */\nF = (heapframe *)((char *)F - Fback_frame);       /* Backtrack */\nmb->cb->callout_flags |= PCRE2_CALLOUT_BACKTRACK; /* Note for callouts */\n\n#ifdef DEBUG_SHOW_RMATCH\nfprintf(stderr, \"++ RETURN %d to RM%d\\n\", rrc, Freturn_id);\n#endif\n\nswitch (Freturn_id)\n  {\n  LBL( 1) LBL( 2) LBL( 3) LBL( 4) LBL( 5) LBL( 6) LBL( 7) LBL( 8)\n  LBL( 9) LBL(10) LBL(11) LBL(12) LBL(13) LBL(14) LBL(15) LBL(16)\n  LBL(17) LBL(18) LBL(19) LBL(20) LBL(21) LBL(22) LBL(23) LBL(24)\n  LBL(25) LBL(26) LBL(27) LBL(28) LBL(29) LBL(30) LBL(31) LBL(32)\n  LBL(33) LBL(34) LBL(35) LBL(36) LBL(37) LBL(38) LBL(39)\n\n#ifdef SUPPORT_WIDE_CHARS\n  LBL(100) LBL(101) LBL(102) LBL(103)\n#endif\n\n#ifdef SUPPORT_UNICODE\n  LBL(200) LBL(201) LBL(202) LBL(203) LBL(204) LBL(205) LBL(206)\n  LBL(207) LBL(208) LBL(209) LBL(210) LBL(211) LBL(212) LBL(213)\n  LBL(214) LBL(215) LBL(216) LBL(217) LBL(218) LBL(219) LBL(220)\n  LBL(221) LBL(222) LBL(223) LBL(224)\n#endif\n\n  /* LCOV_EXCL_START */\n  default:\n  PCRE2_DEBUG_UNREACHABLE();\n  return PCRE2_ERROR_INTERNAL;\n  /* LCOV_EXCL_STOP */\n  }\n#undef LBL\n}\n\n\n/*************************************************\n*           Match a Regular Expression           *\n*************************************************/\n\n/* This function applies a compiled pattern to a subject string and picks out\nportions of the string if it matches. Two elements in the vector are set for\neach substring: the offsets to the start and end of the substring.\n\nArguments:\n  code            points to the compiled expression\n  subject         points to the subject string\n  length          length of subject string (may contain binary zeros)\n  start_offset    where to start in the subject string\n  options         option bits\n  match_data      points to a match_data block\n  mcontext        points a PCRE2 context\n\nReturns:          > 0 => success; value is the number of ovector pairs filled\n                  = 0 => success, but ovector is not big enough\n                  = -1 => failed to match (PCRE2_ERROR_NOMATCH)\n                  = -2 => partial match (PCRE2_ERROR_PARTIAL)\n                  < -2 => some kind of unexpected problem\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_match(const pcre2_code *code, PCRE2_SPTR subject, PCRE2_SIZE length,\n  PCRE2_SIZE start_offset, uint32_t options, pcre2_match_data *match_data,\n  pcre2_match_context *mcontext)\n{\nint rc;\nconst uint8_t *start_bits = NULL;\nconst pcre2_real_code *re = (const pcre2_real_code *)code;\nuint32_t original_options = options;\n\nBOOL anchored;\nBOOL firstline;\nBOOL has_first_cu = FALSE;\nBOOL has_req_cu = FALSE;\nBOOL startline;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nPCRE2_SPTR memchr_found_first_cu;\nPCRE2_SPTR memchr_found_first_cu2;\n#endif\n\nPCRE2_UCHAR first_cu = 0;\nPCRE2_UCHAR first_cu2 = 0;\nPCRE2_UCHAR req_cu = 0;\nPCRE2_UCHAR req_cu2 = 0;\n\nPCRE2_UCHAR null_str[1] = { 0xcd };\nPCRE2_SPTR original_subject = subject;\nPCRE2_SPTR bumpalong_limit;\nPCRE2_SPTR end_subject;\nPCRE2_SPTR true_end_subject;\nPCRE2_SPTR start_match;\nPCRE2_SPTR req_cu_ptr;\nPCRE2_SPTR start_partial;\nPCRE2_SPTR match_partial;\n\n#ifdef SUPPORT_JIT\nBOOL use_jit;\n#endif\n\n/* This flag is needed even when Unicode is not supported for convenience\n(it is used by the IS_NEWLINE macro). */\n\nBOOL utf = FALSE;\n\n#ifdef SUPPORT_UNICODE\nBOOL ucp = FALSE;\nBOOL allow_invalid;\nuint32_t fragment_options = 0;\n#ifdef SUPPORT_JIT\nBOOL jit_checked_utf = FALSE;\n#endif\n#endif  /* SUPPORT_UNICODE */\n\nPCRE2_SIZE frame_size;\nPCRE2_SIZE heapframes_size;\n\n/* We need to have mb as a pointer to a match block, because the IS_NEWLINE\nmacro is used below, and it expects NLBLOCK to be defined as a pointer. */\n\npcre2_callout_block cb;\nmatch_block actual_match_block;\nmatch_block *mb = &actual_match_block;\n\n/* Recognize NULL, length 0 as an empty string. */\n\nif (subject == NULL && length == 0) subject = null_str;\n\n/* Plausibility checks */\n\nif (match_data == NULL) return PCRE2_ERROR_NULL;\nif (code == NULL || subject == NULL)\n  return match_data->rc = PCRE2_ERROR_NULL;\nif ((options & ~PUBLIC_MATCH_OPTIONS) != 0)\n  return match_data->rc = PCRE2_ERROR_BADOPTION;\n\nstart_match = subject + start_offset;\nreq_cu_ptr = start_match - 1;\nif (length == PCRE2_ZERO_TERMINATED)\n  {\n  length = PRIV(strlen)(subject);\n  }\ntrue_end_subject = end_subject = subject + length;\n\nif (start_offset > length) return match_data->rc = PCRE2_ERROR_BADOFFSET;\n\n/* Check that the first field in the block is the magic number. */\n\nif (re->magic_number != MAGIC_NUMBER)\n  return match_data->rc = PCRE2_ERROR_BADMAGIC;\n\n/* Check the code unit width. */\n\nif ((re->flags & PCRE2_MODE_MASK) != PCRE2_CODE_UNIT_WIDTH/8)\n  return match_data->rc = PCRE2_ERROR_BADMODE;\n\n/* PCRE2_NOTEMPTY and PCRE2_NOTEMPTY_ATSTART are match-time flags in the\noptions variable for this function. Users of PCRE2 who are not calling the\nfunction directly would like to have a way of setting these flags, in the same\nway that they can set pcre2_compile() flags like PCRE2_NO_AUTO_POSSESS with\nconstructions like (*NO_AUTOPOSSESS). To enable this, (*NOTEMPTY) and\n(*NOTEMPTY_ATSTART) set bits in the pattern's \"flag\" function which we now\ntransfer to the options for this function. The bits are guaranteed to be\nadjacent, but do not have the same values. This bit of Boolean trickery assumes\nthat the match-time bits are not more significant than the flag bits. If by\naccident this is not the case, a compile-time division by zero error will\noccur. */\n\n#define FF (PCRE2_NOTEMPTY_SET|PCRE2_NE_ATST_SET)\n#define OO (PCRE2_NOTEMPTY|PCRE2_NOTEMPTY_ATSTART)\noptions |= (re->flags & FF) / ((FF & (~FF+1)) / (OO & (~OO+1)));\n#undef FF\n#undef OO\n\n/* If the pattern was successfully studied with JIT support, we will run the\nJIT executable instead of the rest of this function. Most options must be set\nat compile time for the JIT code to be usable. */\n\n#ifdef SUPPORT_JIT\nuse_jit = (re->executable_jit != NULL &&\n          (options & ~PUBLIC_JIT_MATCH_OPTIONS) == 0);\n#endif\n\n/* Initialize UTF/UCP parameters. */\n\n#ifdef SUPPORT_UNICODE\nutf = (re->overall_options & PCRE2_UTF) != 0;\nallow_invalid = (re->overall_options & PCRE2_MATCH_INVALID_UTF) != 0;\nucp = (re->overall_options & PCRE2_UCP) != 0;\n#endif  /* SUPPORT_UNICODE */\n\n/* Convert the partial matching flags into an integer. */\n\nmb->partial = ((options & PCRE2_PARTIAL_HARD) != 0)? 2 :\n              ((options & PCRE2_PARTIAL_SOFT) != 0)? 1 : 0;\n\n/* Partial matching and PCRE2_ENDANCHORED are currently not allowed at the same\ntime. */\n\nif (mb->partial != 0 &&\n   ((re->overall_options | options) & PCRE2_ENDANCHORED) != 0)\n  return match_data->rc = PCRE2_ERROR_BADOPTION;\n\n/* It is an error to set an offset limit without setting the flag at compile\ntime. */\n\nif (mcontext != NULL && mcontext->offset_limit != PCRE2_UNSET &&\n     (re->overall_options & PCRE2_USE_OFFSET_LIMIT) == 0)\n  return match_data->rc = PCRE2_ERROR_BADOFFSETLIMIT;\n\n/* If the match data block was previously used with PCRE2_COPY_MATCHED_SUBJECT,\nfree the memory that was obtained. Set the field to NULL for match error\ncases. */\n\nif ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) != 0)\n  {\n  match_data->memctl.free((void *)match_data->subject,\n    match_data->memctl.memory_data);\n  match_data->flags &= ~PCRE2_MD_COPIED_SUBJECT;\n  }\nmatch_data->subject = NULL;\n\n/* Zero the error offset in case the first code unit is invalid UTF. */\n\nmatch_data->startchar = 0;\n\n\n/* ============================= JIT matching ============================== */\n\n/* Prepare for JIT matching. Check a UTF string for validity unless no check is\nrequested or invalid UTF can be handled. We check only the portion of the\nsubject that might be be inspected during matching - from the offset minus the\nmaximum lookbehind to the given length. This saves time when a small part of a\nlarge subject is being matched by the use of a starting offset. Note that the\nmaximum lookbehind is a number of characters, not code units. */\n\n#ifdef SUPPORT_JIT\nif (use_jit)\n  {\n#ifdef SUPPORT_UNICODE\n  if (utf && (options & PCRE2_NO_UTF_CHECK) == 0 && !allow_invalid)\n    {\n\n    /* For 8-bit and 16-bit UTF, check that the first code unit is a valid\n    character start. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 32\n    if (start_match < end_subject && NOT_FIRSTCU(*start_match))\n      {\n      if (start_offset > 0) return match_data->rc = PCRE2_ERROR_BADUTFOFFSET;\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      return match_data->rc = PCRE2_ERROR_UTF8_ERR20;  /* Isolated 0x80 byte */\n#else\n      return match_data->rc = PCRE2_ERROR_UTF16_ERR3;  /* Isolated low surrogate */\n#endif\n      }\n#endif  /* WIDTH != 32 */\n\n    /* Move back by the maximum lookbehind, just in case it happens at the very\n    start of matching. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 32\n    for (unsigned int i = re->max_lookbehind; i > 0 && start_match > subject; i--)\n      {\n      start_match--;\n      while (start_match > subject &&\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      (*start_match & 0xc0) == 0x80)\n#else  /* 16-bit */\n      (*start_match & 0xfc00) == 0xdc00)\n#endif\n        start_match--;\n      }\n#else  /* PCRE2_CODE_UNIT_WIDTH != 32 */\n\n    /* In the 32-bit library, one code unit equals one character. However,\n    we cannot just subtract the lookbehind and then compare pointers, because\n    a very large lookbehind could create an invalid pointer. */\n\n    if (start_offset >= re->max_lookbehind)\n      start_match -= re->max_lookbehind;\n    else\n      start_match = subject;\n#endif  /* PCRE2_CODE_UNIT_WIDTH != 32 */\n\n    /* Validate the relevant portion of the subject. Adjust the offset of an\n    invalid code point to be an absolute offset in the whole string. */\n\n    rc = PRIV(valid_utf)(start_match,\n      length - (start_match - subject), &(match_data->startchar));\n    if (rc != 0)\n      {\n      match_data->startchar += start_match - subject;\n      return match_data->rc = rc;\n      }\n    jit_checked_utf = TRUE;\n    }\n#endif  /* SUPPORT_UNICODE */\n\n  /* If JIT returns BADOPTION, which means that the selected complete or\n  partial matching mode was not compiled, fall through to the interpreter. */\n\n  rc = pcre2_jit_match(code, subject, length, start_offset, options,\n    match_data, mcontext);\n  if (rc != PCRE2_ERROR_JIT_BADOPTION)\n    {\n    match_data->options = original_options;\n    if (rc >= 0 && (options & PCRE2_COPY_MATCHED_SUBJECT) != 0)\n      {\n      if (length != 0)\n        {\n        match_data->subject = match_data->memctl.malloc(CU2BYTES(length),\n          match_data->memctl.memory_data);\n        if (match_data->subject == NULL)\n          return match_data->rc = PCRE2_ERROR_NOMEMORY;\n        memcpy((void *)match_data->subject, subject, CU2BYTES(length));\n        }\n      else\n        match_data->subject = NULL;\n      match_data->flags |= PCRE2_MD_COPIED_SUBJECT;\n      }\n    else\n      {\n      /* When pcre2_jit_match sets the subject, it doesn't know what the\n      original passed-in pointer was. */\n      if (match_data->subject != NULL) match_data->subject = original_subject;\n      }\n    return rc;\n    }\n  }\n#endif  /* SUPPORT_JIT */\n\n/* ========================= End of JIT matching ========================== */\n\n\n/* Proceed with non-JIT matching. The default is to allow lookbehinds to the\nstart of the subject. A UTF check when there is a non-zero offset may change\nthis. */\n\nmb->check_subject = subject;\n\n/* If a UTF subject string was not checked for validity in the JIT code above,\ncheck it here, and handle support for invalid UTF strings. The check above\nhappens only when invalid UTF is not supported and PCRE2_NO_CHECK_UTF is unset.\nIf we get here in those circumstances, it means the subject string is valid,\nbut for some reason JIT matching was not successful. There is no need to check\nthe subject again.\n\nWe check only the portion of the subject that might be be inspected during\nmatching - from the offset minus the maximum lookbehind to the given length.\nThis saves time when a small part of a large subject is being matched by the\nuse of a starting offset. Note that the maximum lookbehind is a number of\ncharacters, not code units.\n\nNote also that support for invalid UTF forces a check, overriding the setting\nof PCRE2_NO_CHECK_UTF. */\n\n#ifdef SUPPORT_UNICODE\nif (utf &&\n#ifdef SUPPORT_JIT\n    !jit_checked_utf &&\n#endif\n    ((options & PCRE2_NO_UTF_CHECK) == 0 || allow_invalid))\n  {\n#if PCRE2_CODE_UNIT_WIDTH != 32\n  BOOL skipped_bad_start = FALSE;\n#endif\n\n  /* For 8-bit and 16-bit UTF, check that the first code unit is a valid\n  character start. If we are handling invalid UTF, just skip over such code\n  units. Otherwise, give an appropriate error. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 32\n  if (allow_invalid)\n    {\n    while (start_match < end_subject && NOT_FIRSTCU(*start_match))\n      {\n      start_match++;\n      skipped_bad_start = TRUE;\n      }\n    }\n  else if (start_match < end_subject && NOT_FIRSTCU(*start_match))\n    {\n    if (start_offset > 0) return match_data->rc = PCRE2_ERROR_BADUTFOFFSET;\n#if PCRE2_CODE_UNIT_WIDTH == 8\n    return match_data->rc = PCRE2_ERROR_UTF8_ERR20;  /* Isolated 0x80 byte */\n#else\n    return match_data->rc = PCRE2_ERROR_UTF16_ERR3;  /* Isolated low surrogate */\n#endif\n    }\n#endif  /* WIDTH != 32 */\n\n  /* The mb->check_subject field points to the start of UTF checking;\n  lookbehinds can go back no further than this. */\n\n  mb->check_subject = start_match;\n\n  /* Move back by the maximum lookbehind, just in case it happens at the very\n  start of matching, but don't do this if we skipped bad 8-bit or 16-bit code\n  units above. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 32\n  if (!skipped_bad_start)\n    {\n    unsigned int i;\n    for (i = re->max_lookbehind; i > 0 && mb->check_subject > subject; i--)\n      {\n      mb->check_subject--;\n      while (mb->check_subject > subject &&\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      (*mb->check_subject & 0xc0) == 0x80)\n#else  /* 16-bit */\n      (*mb->check_subject & 0xfc00) == 0xdc00)\n#endif\n        mb->check_subject--;\n      }\n    }\n#else  /* PCRE2_CODE_UNIT_WIDTH != 32 */\n\n  /* In the 32-bit library, one code unit equals one character. However,\n  we cannot just subtract the lookbehind and then compare pointers, because\n  a very large lookbehind could create an invalid pointer. */\n\n  if (start_offset >= re->max_lookbehind)\n    mb->check_subject -= re->max_lookbehind;\n  else\n    mb->check_subject = subject;\n#endif  /* PCRE2_CODE_UNIT_WIDTH != 32 */\n\n  /* Validate the relevant portion of the subject. There's a loop in case we\n  encounter bad UTF in the characters preceding start_match which we are\n  scanning because of a lookbehind. */\n\n  for (;;)\n    {\n    rc = PRIV(valid_utf)(mb->check_subject,\n      length - (mb->check_subject - subject), &(match_data->startchar));\n\n    if (rc == 0) break;   /* Valid UTF string */\n\n    /* Invalid UTF string. Adjust the offset to be an absolute offset in the\n    whole string. If we are handling invalid UTF strings, set end_subject to\n    stop before the bad code unit, and set the options to \"not end of line\".\n    Otherwise return the error. */\n\n    match_data->startchar += mb->check_subject - subject;\n    if (!allow_invalid || rc > 0) return match_data->rc = rc;\n    end_subject = subject + match_data->startchar;\n\n    /* If the end precedes start_match, it means there is invalid UTF in the\n    extra code units we reversed over because of a lookbehind. Advance past the\n    first bad code unit, and then skip invalid character starting code units in\n    8-bit and 16-bit modes, and try again with the original end point. */\n\n    if (end_subject < start_match)\n      {\n      mb->check_subject = end_subject + 1;\n#if PCRE2_CODE_UNIT_WIDTH != 32\n      while (mb->check_subject < start_match && NOT_FIRSTCU(*mb->check_subject))\n        mb->check_subject++;\n#endif\n      end_subject = true_end_subject;\n      }\n\n    /* Otherwise, set the not end of line option, and do the match. */\n\n    else\n      {\n      fragment_options = PCRE2_NOTEOL;\n      break;\n      }\n    }\n  }\n#endif  /* SUPPORT_UNICODE */\n\n/* A NULL match context means \"use a default context\", but we take the memory\ncontrol functions from the pattern. */\n\nif (mcontext == NULL)\n  {\n  mcontext = (pcre2_match_context *)(&PRIV(default_match_context));\n  mb->memctl = re->memctl;\n  }\nelse mb->memctl = mcontext->memctl;\n\nanchored = ((re->overall_options | options) & PCRE2_ANCHORED) != 0;\nfirstline = !anchored && (re->overall_options & PCRE2_FIRSTLINE) != 0;\nstartline = (re->flags & PCRE2_STARTLINE) != 0;\nbumpalong_limit = (mcontext->offset_limit == PCRE2_UNSET)?\n  true_end_subject : subject + mcontext->offset_limit;\n\n/* Initialize and set up the fixed fields in the callout block, with a pointer\nin the match block. */\n\nmb->cb = &cb;\ncb.version = 2;\ncb.subject = subject;\ncb.subject_length = (PCRE2_SIZE)(end_subject - subject);\ncb.callout_flags = 0;\n\n/* Fill in the remaining fields in the match block, except for moptions, which\ngets set later. */\n\nmb->callout = mcontext->callout;\nmb->callout_data = mcontext->callout_data;\n\nmb->start_subject = subject;\nmb->start_offset = start_offset;\nmb->end_subject = end_subject;\nmb->true_end_subject = true_end_subject;\nmb->hasthen = (re->flags & PCRE2_HASTHEN) != 0;\nmb->hasbsk = (re->flags & PCRE2_HASBSK) != 0;\nmb->allowemptypartial = (re->max_lookbehind > 0) ||\n    (re->flags & PCRE2_MATCH_EMPTY) != 0;\nmb->allowlookaroundbsk =\n  (re->extra_options & PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK) != 0;\nmb->poptions = re->overall_options;          /* Pattern options */\nmb->ignore_skip_arg = 0;\nmb->mark = mb->nomatch_mark = NULL;          /* In case never set */\n\n/* The name table is needed for finding all the numbers associated with a\ngiven name, for condition testing. The code follows the name table. */\n\nmb->name_table = (PCRE2_SPTR)((const uint8_t *)re + sizeof(pcre2_real_code));\nmb->name_count = re->name_count;\nmb->name_entry_size = re->name_entry_size;\nmb->start_code = (PCRE2_SPTR)((const uint8_t *)re + re->code_start);\n\n/* Process the \\R and newline settings. */\n\nmb->bsr_convention = re->bsr_convention;\nmb->nltype = NLTYPE_FIXED;\nswitch(re->newline_convention)\n  {\n  case PCRE2_NEWLINE_CR:\n  mb->nllen = 1;\n  mb->nl[0] = CHAR_CR;\n  break;\n\n  case PCRE2_NEWLINE_LF:\n  mb->nllen = 1;\n  mb->nl[0] = CHAR_NL;\n  break;\n\n  case PCRE2_NEWLINE_NUL:\n  mb->nllen = 1;\n  mb->nl[0] = CHAR_NUL;\n  break;\n\n  case PCRE2_NEWLINE_CRLF:\n  mb->nllen = 2;\n  mb->nl[0] = CHAR_CR;\n  mb->nl[1] = CHAR_NL;\n  break;\n\n  case PCRE2_NEWLINE_ANY:\n  mb->nltype = NLTYPE_ANY;\n  break;\n\n  case PCRE2_NEWLINE_ANYCRLF:\n  mb->nltype = NLTYPE_ANYCRLF;\n  break;\n\n  /* LCOV_EXCL_START */\n  default:\n  PCRE2_DEBUG_UNREACHABLE();\n  return match_data->rc = PCRE2_ERROR_INTERNAL;\n  /* LCOV_EXCL_STOP */\n  }\n\n/* The backtracking frames have fixed data at the front, and a PCRE2_SIZE\nvector at the end, whose size depends on the number of capturing parentheses in\nthe pattern. It is not used at all if there are no capturing parentheses.\n\n  frame_size                   is the total size of each frame\n  match_data->heapframes       is the pointer to the frames vector\n  match_data->heapframes_size  is the allocated size of the vector\n\nWe must pad the frame_size for alignment to ensure subsequent frames are as\naligned as heapframe. Whilst ovector is word-aligned due to being a PCRE2_SIZE\narray, that does not guarantee it is suitably aligned for pointers, as some\narchitectures have pointers that are larger than a size_t. */\n\nframe_size = (offsetof(heapframe, ovector) +\n  re->top_bracket * 2 * sizeof(PCRE2_SIZE) + HEAPFRAME_ALIGNMENT - 1) &\n  ~(HEAPFRAME_ALIGNMENT - 1);\n\n/* Limits set in the pattern override the match context only if they are\nsmaller. */\n\nmb->heap_limit = ((mcontext->heap_limit < re->limit_heap)?\n  mcontext->heap_limit : re->limit_heap);\n\nmb->match_limit = (mcontext->match_limit < re->limit_match)?\n  mcontext->match_limit : re->limit_match;\n\nmb->match_limit_depth = (mcontext->depth_limit < re->limit_depth)?\n  mcontext->depth_limit : re->limit_depth;\n\n/* If a pattern has very many capturing parentheses, the frame size may be very\nlarge. Set the initial frame vector size to ensure that there are at least 10\navailable frames, but enforce a minimum of START_FRAMES_SIZE. If this is\ngreater than the heap limit, get as large a vector as possible. */\n\nheapframes_size = frame_size * 10;\nif (heapframes_size < START_FRAMES_SIZE) heapframes_size = START_FRAMES_SIZE;\nif (heapframes_size / 1024 > mb->heap_limit)\n  {\n  PCRE2_SIZE max_size = 1024 * mb->heap_limit;\n  if (max_size < frame_size) return match_data->rc = PCRE2_ERROR_HEAPLIMIT;\n  heapframes_size = max_size;\n  }\n\n/* If an existing frame vector in the match_data block is large enough, we can\nuse it. Otherwise, free any pre-existing vector and get a new one. */\n\nif (match_data->heapframes_size < heapframes_size)\n  {\n  match_data->memctl.free(match_data->heapframes,\n    match_data->memctl.memory_data);\n  match_data->heapframes = match_data->memctl.malloc(heapframes_size,\n    match_data->memctl.memory_data);\n  if (match_data->heapframes == NULL)\n    {\n    match_data->heapframes_size = 0;\n    return match_data->rc = PCRE2_ERROR_NOMEMORY;\n    }\n  match_data->heapframes_size = heapframes_size;\n  }\n\n/* Write to the ovector within the first frame to mark every capture unset and\nto avoid uninitialized memory read errors when it is copied to a new frame. */\n\nmemset((char *)(match_data->heapframes) + offsetof(heapframe, ovector), 0xff,\n  frame_size - offsetof(heapframe, ovector));\n\n/* Pointers to the individual character tables */\n\nmb->lcc = re->tables + lcc_offset;\nmb->fcc = re->tables + fcc_offset;\nmb->ctypes = re->tables + ctypes_offset;\n\n/* Set up the first code unit to match, if available. If there's no first code\nunit there may be a bitmap of possible first characters. */\n\nif ((re->flags & PCRE2_FIRSTSET) != 0)\n  {\n  has_first_cu = TRUE;\n  first_cu = first_cu2 = (PCRE2_UCHAR)(re->first_codeunit);\n  if ((re->flags & PCRE2_FIRSTCASELESS) != 0)\n    {\n    first_cu2 = TABLE_GET(first_cu, mb->fcc, first_cu);\n#ifdef SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\n    if (first_cu > 127 && ucp && !utf) first_cu2 = UCD_OTHERCASE(first_cu);\n#else\n    if (first_cu > 127 && (utf || ucp)) first_cu2 = UCD_OTHERCASE(first_cu);\n#endif\n#endif  /* SUPPORT_UNICODE */\n    }\n  }\nelse\n  if (!startline && (re->flags & PCRE2_FIRSTMAPSET) != 0)\n    start_bits = re->start_bitmap;\n\n/* There may also be a \"last known required character\" set. */\n\nif ((re->flags & PCRE2_LASTSET) != 0)\n  {\n  has_req_cu = TRUE;\n  req_cu = req_cu2 = (PCRE2_UCHAR)(re->last_codeunit);\n  if ((re->flags & PCRE2_LASTCASELESS) != 0)\n    {\n    req_cu2 = TABLE_GET(req_cu, mb->fcc, req_cu);\n#ifdef SUPPORT_UNICODE\n#if PCRE2_CODE_UNIT_WIDTH == 8\n    if (req_cu > 127 && ucp && !utf) req_cu2 = UCD_OTHERCASE(req_cu);\n#else\n    if (req_cu > 127 && (utf || ucp)) req_cu2 = UCD_OTHERCASE(req_cu);\n#endif\n#endif  /* SUPPORT_UNICODE */\n    }\n  }\n\n\n/* ==========================================================================*/\n\n/* Loop for handling unanchored repeated matching attempts; for anchored regexs\nthe loop runs just once. */\n\n#ifdef SUPPORT_UNICODE\nFRAGMENT_RESTART:\n#endif\n\nstart_partial = match_partial = NULL;\nmb->hitend = FALSE;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nmemchr_found_first_cu = NULL;\nmemchr_found_first_cu2 = NULL;\n#endif\n\nfor(;;)\n  {\n  PCRE2_SPTR new_start_match;\n\n  /* ----------------- Start of match optimizations ---------------- */\n\n  /* There are some optimizations that avoid running the match if a known\n  starting point is not found, or if a known later code unit is not present.\n  However, there is an option (settable at compile time) that disables these,\n  for testing and for ensuring that all callouts do actually occur. */\n\n  if ((re->optimization_flags & PCRE2_OPTIM_START_OPTIMIZE) != 0)\n    {\n    /* If firstline is TRUE, the start of the match is constrained to the first\n    line of a multiline string. That is, the match must be before or at the\n    first newline following the start of matching. Temporarily adjust\n    end_subject so that we stop the scans for a first code unit at a newline.\n    If the match fails at the newline, later code breaks the loop. */\n\n    if (firstline)\n      {\n      PCRE2_SPTR t = start_match;\n#ifdef SUPPORT_UNICODE\n      if (utf)\n        {\n        while (t < end_subject && !IS_NEWLINE(t))\n          {\n          t++;\n          ACROSSCHAR(t < end_subject, t, t++);\n          }\n        }\n      else\n#endif\n      while (t < end_subject && !IS_NEWLINE(t)) t++;\n      end_subject = t;\n      }\n\n    /* Anchored: check the first code unit if one is recorded. This may seem\n    pointless but it can help in detecting a no match case without scanning for\n    the required code unit. */\n\n    if (anchored)\n      {\n      if (has_first_cu || start_bits != NULL)\n        {\n        BOOL ok = start_match < end_subject;\n        if (ok)\n          {\n          PCRE2_UCHAR c = *start_match;\n          ok = has_first_cu && (c == first_cu || c == first_cu2);\n          if (!ok && start_bits != NULL)\n            {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            if (c > 255) c = 255;\n#endif\n            ok = (start_bits[c/8] & (1u << (c&7))) != 0;\n            }\n          }\n        if (!ok)\n          {\n          rc = MATCH_NOMATCH;\n          break;\n          }\n        }\n      }\n\n    /* Not anchored. Advance to a unique first code unit if there is one. */\n\n    else\n      {\n      if (has_first_cu)\n        {\n        if (first_cu != first_cu2)  /* Caseless */\n          {\n          /* In 16-bit and 32_bit modes we have to do our own search, so can\n          look for both cases at once. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\n          PCRE2_UCHAR smc;\n          while (start_match < end_subject &&\n                (smc = *start_match) != first_cu &&\n                 smc != first_cu2)\n            start_match++;\n#else\n          /* In 8-bit mode, the use of memchr() gives a big speed up, even\n          though we have to call it twice in order to find the earliest\n          occurrence of the code unit in either of its cases. Caching is used\n          to remember the positions of previously found code units. This can\n          make a huge difference when the strings are very long and only one\n          case is actually present. */\n\n          PCRE2_SPTR pp1 = NULL;\n          PCRE2_SPTR pp2 = NULL;\n          PCRE2_SIZE searchlength = end_subject - start_match;\n\n          /* If we haven't got a previously found position for first_cu, or if\n          the current starting position is later, we need to do a search. If\n          the code unit is not found, set it to the end. */\n\n          if (memchr_found_first_cu == NULL ||\n              start_match > memchr_found_first_cu)\n            {\n            pp1 = memchr(start_match, first_cu, searchlength);\n            memchr_found_first_cu = (pp1 == NULL)? end_subject : pp1;\n            }\n\n          /* If the start is before a previously found position, use the\n          previous position, or NULL if a previous search failed. */\n\n          else pp1 = (memchr_found_first_cu == end_subject)? NULL :\n            memchr_found_first_cu;\n\n          /* Do the same thing for the other case. */\n\n          if (memchr_found_first_cu2 == NULL ||\n              start_match > memchr_found_first_cu2)\n            {\n            pp2 = memchr(start_match, first_cu2, searchlength);\n            memchr_found_first_cu2 = (pp2 == NULL)? end_subject : pp2;\n            }\n\n          else pp2 = (memchr_found_first_cu2 == end_subject)? NULL :\n            memchr_found_first_cu2;\n\n          /* Set the start to the end of the subject if neither case was found.\n          Otherwise, use the earlier found point. */\n\n          if (pp1 == NULL)\n            start_match = (pp2 == NULL)? end_subject : pp2;\n          else\n            start_match = (pp2 == NULL || pp1 < pp2)? pp1 : pp2;\n\n#endif  /* 8-bit handling */\n          }\n\n        /* The caseful case is much simpler. */\n\n        else\n          {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n          while (start_match < end_subject && *start_match !=\n                 first_cu)\n            start_match++;\n#else\n          start_match = memchr(start_match, first_cu, end_subject - start_match);\n          if (start_match == NULL) start_match = end_subject;\n#endif\n          }\n\n        /* If we can't find the required first code unit, having reached the\n        true end of the subject, break the bumpalong loop, to force a match\n        failure, except when doing partial matching, when we let the next cycle\n        run at the end of the subject. To see why, consider the pattern\n        /(?<=abc)def/, which partially matches \"abc\", even though the string\n        does not contain the starting character \"d\". If we have not reached the\n        true end of the subject (PCRE2_FIRSTLINE caused end_subject to be\n        temporarily modified) we also let the cycle run, because the matching\n        string is legitimately allowed to start with the first code unit of a\n        newline. */\n\n        if (mb->partial == 0 && start_match >= mb->end_subject)\n          {\n          rc = MATCH_NOMATCH;\n          break;\n          }\n        }\n\n      /* If there's no first code unit, advance to just after a linebreak for a\n      multiline match if required. */\n\n      else if (startline)\n        {\n        if (start_match > mb->start_subject + start_offset)\n          {\n#ifdef SUPPORT_UNICODE\n          if (utf)\n            {\n            while (start_match < end_subject && !WAS_NEWLINE(start_match))\n              {\n              start_match++;\n              ACROSSCHAR(start_match < end_subject, start_match, start_match++);\n              }\n            }\n          else\n#endif\n          while (start_match < end_subject && !WAS_NEWLINE(start_match))\n            start_match++;\n\n          /* If we have just passed a CR and the newline option is ANY or\n          ANYCRLF, and we are now at a LF, advance the match position by one\n          more code unit. */\n\n          if (start_match[-1] == CHAR_CR &&\n               (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF) &&\n               start_match < end_subject &&\n               *start_match == CHAR_NL)\n            start_match++;\n          }\n        }\n\n      /* If there's no first code unit or a requirement for a multiline line\n      start, advance to a non-unique first code unit if any have been\n      identified. The bitmap contains only 256 bits. When code units are 16 or\n      32 bits wide, all code units greater than 254 set the 255 bit. */\n\n      else if (start_bits != NULL)\n        {\n        while (start_match < end_subject)\n          {\n          uint32_t c = *start_match;\n#if PCRE2_CODE_UNIT_WIDTH != 8\n          if (c > 255) c = 255;\n#endif\n          if ((start_bits[c/8] & (1u << (c&7))) != 0) break;\n          start_match++;\n          }\n\n        /* See comment above in first_cu checking about the next few lines. */\n\n        if (mb->partial == 0 && start_match >= mb->end_subject)\n          {\n          rc = MATCH_NOMATCH;\n          break;\n          }\n        }\n      }   /* End first code unit handling */\n\n    /* Restore fudged end_subject */\n\n    end_subject = mb->end_subject;\n\n    /* The following two optimizations must be disabled for partial matching. */\n\n    if (mb->partial == 0)\n      {\n      PCRE2_SPTR p;\n\n      /* The minimum matching length is a lower bound; no string of that length\n      may actually match the pattern. Although the value is, strictly, in\n      characters, we treat it as code units to avoid spending too much time in\n      this optimization. */\n\n      if (end_subject - start_match < re->minlength)\n        {\n        rc = MATCH_NOMATCH;\n        break;\n        }\n\n      /* If req_cu is set, we know that that code unit must appear in the\n      subject for the (non-partial) match to succeed. If the first code unit is\n      set, req_cu must be later in the subject; otherwise the test starts at\n      the match point. This optimization can save a huge amount of backtracking\n      in patterns with nested unlimited repeats that aren't going to match.\n      Writing separate code for caseful/caseless versions makes it go faster,\n      as does using an autoincrement and backing off on a match. As in the case\n      of the first code unit, using memchr() in the 8-bit library gives a big\n      speed up. Unlike the first_cu check above, we do not need to call\n      memchr() twice in the caseless case because we only need to check for the\n      presence of the character in either case, not find the first occurrence.\n\n      The search can be skipped if the code unit was found later than the\n      current starting point in a previous iteration of the bumpalong loop.\n\n      HOWEVER: when the subject string is very, very long, searching to its end\n      can take a long time, and give bad performance on quite ordinary\n      anchored patterns. This showed up when somebody was matching something\n      like /^\\d+C/ on a 32-megabyte string... so we don't do this when the\n      string is sufficiently long, but it's worth searching a lot more for\n      unanchored patterns. */\n\n      p = start_match + (has_first_cu? 1:0);\n      if (has_req_cu && p > req_cu_ptr)\n        {\n        PCRE2_SIZE check_length = end_subject - start_match;\n\n        if (check_length < REQ_CU_MAX ||\n              (!anchored && check_length < REQ_CU_MAX * 1000))\n          {\n          if (req_cu != req_cu2)  /* Caseless */\n            {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            while (p < end_subject)\n              {\n              uint32_t pp = *p++;\n              if (pp == req_cu || pp == req_cu2) { p--; break; }\n              }\n#else  /* 8-bit code units */\n            PCRE2_SPTR pp = p;\n            p = memchr(pp, req_cu, end_subject - pp);\n            if (p == NULL)\n              {\n              p = memchr(pp, req_cu2, end_subject - pp);\n              if (p == NULL) p = end_subject;\n              }\n#endif /* PCRE2_CODE_UNIT_WIDTH != 8 */\n            }\n\n          /* The caseful case */\n\n          else\n            {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n            while (p < end_subject)\n              {\n              if (*p++ == req_cu) { p--; break; }\n              }\n\n#else  /* 8-bit code units */\n            p = memchr(p, req_cu, end_subject - p);\n            if (p == NULL) p = end_subject;\n#endif\n            }\n\n          /* If we can't find the required code unit, break the bumpalong loop,\n          forcing a match failure. */\n\n          if (p >= end_subject)\n            {\n            rc = MATCH_NOMATCH;\n            break;\n            }\n\n          /* If we have found the required code unit, save the point where we\n          found it, so that we don't search again next time round the bumpalong\n          loop if the start hasn't yet passed this code unit. */\n\n          req_cu_ptr = p;\n          }\n        }\n      }\n    }\n\n  /* ------------ End of start of match optimizations ------------ */\n\n  /* Give no match if we have passed the bumpalong limit. */\n\n  if (start_match > bumpalong_limit)\n    {\n    rc = MATCH_NOMATCH;\n    break;\n    }\n\n  /* OK, we can now run the match. If \"hitend\" is set afterwards, remember the\n  first starting point for which a partial match was found. */\n\n  cb.start_match = (PCRE2_SIZE)(start_match - subject);\n  cb.callout_flags |= PCRE2_CALLOUT_STARTMATCH;\n\n  mb->start_used_ptr = start_match;\n  mb->last_used_ptr = start_match;\n#ifdef SUPPORT_UNICODE\n  mb->moptions = options | fragment_options;\n#else\n  mb->moptions = options;\n#endif\n  mb->match_call_count = 0;\n  mb->end_offset_top = 0;\n  mb->skip_arg_count = 0;\n\n#ifdef DEBUG_SHOW_OPS\n  fprintf(stderr, \"++ Calling match()\\n\");\n#endif\n\n  rc = match(start_match, mb->start_code, re->top_bracket, frame_size,\n    match_data, mb);\n\n#ifdef DEBUG_SHOW_OPS\n  fprintf(stderr, \"++ match() returned %d\\n\\n\", rc);\n#endif\n\n  if (mb->hitend && start_partial == NULL)\n    {\n    start_partial = mb->start_used_ptr;\n    match_partial = start_match;\n    }\n\n  switch(rc)\n    {\n    /* If MATCH_SKIP_ARG reaches this level it means that a MARK that matched\n    the SKIP's arg was not found. In this circumstance, Perl ignores the SKIP\n    entirely. The only way we can do that is to re-do the match at the same\n    point, with a flag to force SKIP with an argument to be ignored. Just\n    treating this case as NOMATCH does not work because it does not check other\n    alternatives in patterns such as A(*SKIP:A)B|AC when the subject is AC. */\n\n    case MATCH_SKIP_ARG:\n    new_start_match = start_match;\n    mb->ignore_skip_arg = mb->skip_arg_count;\n    break;\n\n    /* SKIP passes back the next starting point explicitly, but if it is no\n    greater than the match we have just done, treat it as NOMATCH. */\n\n    case MATCH_SKIP:\n    if (mb->verb_skip_ptr > start_match)\n      {\n      new_start_match = mb->verb_skip_ptr;\n      break;\n      }\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    /* NOMATCH and PRUNE advance by one character. THEN at this level acts\n    exactly like PRUNE. Unset ignore SKIP-with-argument. */\n\n    case MATCH_NOMATCH:\n    case MATCH_PRUNE:\n    case MATCH_THEN:\n    mb->ignore_skip_arg = 0;\n    new_start_match = start_match + 1;\n#ifdef SUPPORT_UNICODE\n    if (utf)\n      ACROSSCHAR(new_start_match < end_subject, new_start_match,\n        new_start_match++);\n#endif\n    break;\n\n    /* COMMIT disables the bumpalong, but otherwise behaves as NOMATCH. */\n\n    case MATCH_COMMIT:\n    rc = MATCH_NOMATCH;\n    goto ENDLOOP;\n\n    /* Any other return is either a match, or some kind of error. */\n\n    default:\n    goto ENDLOOP;\n    }\n\n  /* Control reaches here for the various types of \"no match at this point\"\n  result. Reset the code to MATCH_NOMATCH for subsequent checking. */\n\n  rc = MATCH_NOMATCH;\n\n  /* If PCRE2_FIRSTLINE is set, the match must happen before or at the first\n  newline in the subject (though it may continue over the newline). Therefore,\n  if we have just failed to match, starting at a newline, do not continue. */\n\n  if (firstline && IS_NEWLINE(start_match)) break;\n\n  /* Advance to new matching position */\n\n  start_match = new_start_match;\n\n  /* Break the loop if the pattern is anchored or if we have passed the end of\n  the subject. */\n\n  if (anchored || start_match > end_subject) break;\n\n  /* If we have just passed a CR and we are now at a LF, and the pattern does\n  not contain any explicit matches for \\r or \\n, and the newline option is CRLF\n  or ANY or ANYCRLF, advance the match position by one more code unit. In\n  normal matching start_match will aways be greater than the first position at\n  this stage, but a failed *SKIP can cause a return at the same point, which is\n  why the first test exists. */\n\n  if (start_match > subject + start_offset &&\n      start_match[-1] == CHAR_CR &&\n      start_match < end_subject &&\n      *start_match == CHAR_NL &&\n      (re->flags & PCRE2_HASCRORLF) == 0 &&\n        (mb->nltype == NLTYPE_ANY ||\n         mb->nltype == NLTYPE_ANYCRLF ||\n         mb->nllen == 2))\n    start_match++;\n\n  mb->mark = NULL;   /* Reset for start of next match attempt */\n  }                  /* End of for(;;) \"bumpalong\" loop */\n\n/* ==========================================================================*/\n\n/* When we reach here, one of the following stopping conditions is true:\n\n(1) The match succeeded, either completely, or partially;\n\n(2) The pattern is anchored or the match was failed after (*COMMIT);\n\n(3) We are past the end of the subject or the bumpalong limit;\n\n(4) PCRE2_FIRSTLINE is set and we have failed to match at a newline, because\n    this option requests that a match occur at or before the first newline in\n    the subject.\n\n(5) Some kind of error occurred.\n\n*/\n\nENDLOOP:\n\n/* If end_subject != true_end_subject, it means we are handling invalid UTF,\nand have just processed a non-terminal fragment. If this resulted in no match\nor a partial match we must carry on to the next fragment (a partial match is\nreturned to the caller only at the very end of the subject). A loop is used to\navoid trying to match against empty fragments; if the pattern can match an\nempty string it would have done so already. */\n\n#ifdef SUPPORT_UNICODE\nif (utf && end_subject != true_end_subject &&\n    (rc == MATCH_NOMATCH || rc == PCRE2_ERROR_PARTIAL))\n  {\n  for (;;)\n    {\n    /* Advance past the first bad code unit, and then skip invalid character\n    starting code units in 8-bit and 16-bit modes. */\n\n    start_match = end_subject + 1;\n\n#if PCRE2_CODE_UNIT_WIDTH != 32\n    while (start_match < true_end_subject && NOT_FIRSTCU(*start_match))\n      start_match++;\n#endif\n\n    /* If we have hit the end of the subject, there isn't another non-empty\n    fragment, so give up. */\n\n    if (start_match >= true_end_subject)\n      {\n      rc = MATCH_NOMATCH;  /* In case it was partial */\n      match_partial = NULL;\n      break;\n      }\n\n    /* Check the rest of the subject */\n\n    mb->check_subject = start_match;\n    rc = PRIV(valid_utf)(start_match, length - (start_match - subject),\n      &(match_data->startchar));\n\n    /* The rest of the subject is valid UTF. */\n\n    if (rc == 0)\n      {\n      mb->end_subject = end_subject = true_end_subject;\n      fragment_options = PCRE2_NOTBOL;\n      goto FRAGMENT_RESTART;\n      }\n\n    /* A subsequent UTF error has been found; if the next fragment is\n    non-empty, set up to process it. Otherwise, let the loop advance. */\n\n    else if (rc < 0)\n      {\n      mb->end_subject = end_subject = start_match + match_data->startchar;\n      if (end_subject > start_match)\n        {\n        fragment_options = PCRE2_NOTBOL|PCRE2_NOTEOL;\n        goto FRAGMENT_RESTART;\n        }\n      }\n    }\n  }\n#endif  /* SUPPORT_UNICODE */\n\n/* Fill in fields that are always returned in the match data. */\n\nmatch_data->code = re;\nmatch_data->mark = mb->mark;\nmatch_data->matchedby = PCRE2_MATCHEDBY_INTERPRETER;\nmatch_data->options = original_options;\n\n/* Handle a fully successful match. Set the return code to the number of\ncaptured strings, or 0 if there were too many to fit into the ovector, and then\nset the remaining returned values before returning. Make a copy of the subject\nstring if requested. */\n\nif (rc == MATCH_MATCH)\n  {\n  match_data->rc = ((int)mb->end_offset_top >= 2 * match_data->oveccount)?\n    0 : (int)mb->end_offset_top/2 + 1;\n  match_data->subject_length = length;\n  match_data->start_offset = start_offset;\n  match_data->startchar = start_match - subject;\n  match_data->leftchar = mb->start_used_ptr - subject;\n  match_data->rightchar = ((mb->last_used_ptr > mb->end_match_ptr)?\n    mb->last_used_ptr : mb->end_match_ptr) - subject;\n  if ((options & PCRE2_COPY_MATCHED_SUBJECT) != 0)\n    {\n    if (length != 0)\n      {\n      match_data->subject = match_data->memctl.malloc(CU2BYTES(length),\n        match_data->memctl.memory_data);\n      if (match_data->subject == NULL)\n        return match_data->rc = PCRE2_ERROR_NOMEMORY;\n      memcpy((void *)match_data->subject, subject, CU2BYTES(length));\n      }\n    else\n      match_data->subject = NULL;\n    match_data->flags |= PCRE2_MD_COPIED_SUBJECT;\n    }\n  else match_data->subject = original_subject;\n\n  return match_data->rc;\n  }\n\n/* Control gets here if there has been a partial match, an error, or if the\noverall match attempt has failed at all permitted starting positions. Any mark\ndata is in the nomatch_mark field. */\n\nmatch_data->mark = mb->nomatch_mark;\n\n/* For anything other than nomatch or partial match, just return the code. */\n\nif (rc != MATCH_NOMATCH && rc != PCRE2_ERROR_PARTIAL) match_data->rc = rc;\n\n/* Handle a partial match. If a \"soft\" partial match was requested, searching\nfor a complete match will have continued, and the value of rc at this point\nwill be MATCH_NOMATCH. For a \"hard\" partial match, it will already be\nPCRE2_ERROR_PARTIAL. */\n\nelse if (match_partial != NULL)\n  {\n  match_data->subject = original_subject;\n  match_data->subject_length = length;\n  match_data->start_offset = start_offset;\n  match_data->ovector[0] = match_partial - subject;\n  match_data->ovector[1] = end_subject - subject;\n  match_data->startchar = match_partial - subject;\n  match_data->leftchar = start_partial - subject;\n  match_data->rightchar = end_subject - subject;\n  match_data->rc = PCRE2_ERROR_PARTIAL;\n  }\n\n/* Else this is the classic nomatch case. */\n\nelse\n  {\n  match_data->subject = original_subject;\n  match_data->subject_length = length;\n  match_data->start_offset = start_offset;\n  match_data->rc = PCRE2_ERROR_NOMATCH;\n  }\n\nreturn match_data->rc;\n}\n\n/* These #undefs are here to enable unity builds with CMake. */\n\n#undef NLBLOCK /* Block containing newline information */\n#undef PSSTART /* Field containing processed string start */\n#undef PSEND   /* Field containing processed string end */\n\n/* End of pcre2_match.c */\n"
  },
  {
    "path": "src/pcre2_match_data.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/*************************************************\n*  Create a match data block given ovector size  *\n*************************************************/\n\n/* A minimum of 1 is imposed on the number of ovector pairs. A maximum is also\nimposed because the oveccount field in a match data block is uintt6_t. */\n\nPCRE2_EXP_DEFN pcre2_match_data * PCRE2_CALL_CONVENTION\npcre2_match_data_create(uint32_t oveccount, pcre2_general_context *gcontext)\n{\npcre2_match_data *yield;\nif (oveccount < 1) oveccount = 1;\nif (oveccount > UINT16_MAX) oveccount = UINT16_MAX;\nyield = PRIV(memctl_malloc)(\n  offsetof(pcre2_match_data, ovector) + 2*oveccount*sizeof(PCRE2_SIZE),\n  (pcre2_memctl *)gcontext);\nif (yield == NULL) return NULL;\nyield->oveccount = oveccount;\nyield->flags = 0;\nyield->heapframes = NULL;\nyield->heapframes_size = 0;\nreturn yield;\n}\n\n\n\n/*************************************************\n*  Create a match data block using pattern data  *\n*************************************************/\n\n/* If no context is supplied, use the memory allocator from the code. This code\nassumes that a general context contains nothing other than a memory allocator.\nIf that ever changes, this code will need fixing. */\n\nPCRE2_EXP_DEFN pcre2_match_data * PCRE2_CALL_CONVENTION\npcre2_match_data_create_from_pattern(const pcre2_code *code,\n  pcre2_general_context *gcontext)\n{\nif (code == NULL) return NULL;\nif (gcontext == NULL) gcontext = (pcre2_general_context *)code;\nreturn pcre2_match_data_create(((const pcre2_real_code *)code)->top_bracket + 1,\n  gcontext);\n}\n\n\n\n/*************************************************\n*            Free a match data block             *\n*************************************************/\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_match_data_free(pcre2_match_data *match_data)\n{\nif (match_data != NULL)\n  {\n  if (match_data->heapframes != NULL)\n    match_data->memctl.free(match_data->heapframes,\n      match_data->memctl.memory_data);\n  if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) != 0)\n    match_data->memctl.free((void *)match_data->subject,\n      match_data->memctl.memory_data);\n  match_data->memctl.free(match_data, match_data->memctl.memory_data);\n  }\n}\n\n\n\n/*************************************************\n*         Get last mark in match                 *\n*************************************************/\n\nPCRE2_EXP_DEFN PCRE2_SPTR PCRE2_CALL_CONVENTION\npcre2_get_mark(pcre2_match_data *match_data)\n{\nreturn match_data->mark;\n}\n\n\n\n/*************************************************\n*          Get pointer to ovector                *\n*************************************************/\n\nPCRE2_EXP_DEFN PCRE2_SIZE * PCRE2_CALL_CONVENTION\npcre2_get_ovector_pointer(pcre2_match_data *match_data)\n{\nreturn match_data->ovector;\n}\n\n\n\n/*************************************************\n*          Get number of ovector slots           *\n*************************************************/\n\nPCRE2_EXP_DEFN uint32_t PCRE2_CALL_CONVENTION\npcre2_get_ovector_count(pcre2_match_data *match_data)\n{\nreturn match_data->oveccount;\n}\n\n\n\n/*************************************************\n*         Get starting code unit in match        *\n*************************************************/\n\nPCRE2_EXP_DEFN PCRE2_SIZE PCRE2_CALL_CONVENTION\npcre2_get_startchar(pcre2_match_data *match_data)\n{\nreturn match_data->startchar;\n}\n\n\n\n/*************************************************\n*         Get size of match data block           *\n*************************************************/\n\nPCRE2_EXP_DEFN PCRE2_SIZE PCRE2_CALL_CONVENTION\npcre2_get_match_data_size(pcre2_match_data *match_data)\n{\nreturn offsetof(pcre2_match_data, ovector) +\n  2 * (match_data->oveccount) * sizeof(PCRE2_SIZE);\n}\n\n\n\n/*************************************************\n*             Get heapframes size                *\n*************************************************/\n\nPCRE2_EXP_DEFN PCRE2_SIZE PCRE2_CALL_CONVENTION\npcre2_get_match_data_heapframes_size(pcre2_match_data *match_data)\n{\nreturn match_data->heapframes_size;\n}\n\n/* End of pcre2_match_data.c */\n"
  },
  {
    "path": "src/pcre2_match_next.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/* Advance the offset by one code unit, and return the new value.\nIt is only called when the offset is not at the end of the subject. */\n\nstatic PCRE2_SIZE do_bumpalong(pcre2_match_data *match_data,\n  PCRE2_SIZE offset)\n{\nPCRE2_SPTR subject = match_data->subject;\nPCRE2_SIZE subject_length = match_data->subject_length;\n#ifdef SUPPORT_UNICODE\nBOOL utf = (match_data->code->overall_options & PCRE2_UTF) != 0;\n#endif\n\n/* Skip over CRLF as an atomic sequence, if CRLF is configured as a newline\nsequence. */\n\nif (subject[offset] == CHAR_CR && offset + 1 < subject_length &&\n    subject[offset + 1] == CHAR_LF)\n  {\n  switch(match_data->code->newline_convention)\n    {\n    case PCRE2_NEWLINE_CRLF:\n    case PCRE2_NEWLINE_ANY:\n    case PCRE2_NEWLINE_ANYCRLF:\n    return offset + 2;\n    }\n  }\n\n/* Advance by one full character if in UTF mode. */\n\n#ifdef SUPPORT_UNICODE\nif (utf)\n  {\n  PCRE2_SPTR next = subject + offset + 1;\n  PCRE2_SPTR subject_end = subject + subject_length;\n\n  (void)subject_end; /* Suppress warning; 32-bit FORWARDCHARTEST ignores this */\n  FORWARDCHARTEST(next, subject_end);\n  return next - subject;\n  }\n#endif\n\nreturn offset + 1;\n}\n\n\n\n/*************************************************\n*                Advance the match               *\n*************************************************/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_next_match(pcre2_match_data *match_data, PCRE2_SIZE *pstart_offset,\n  uint32_t *poptions)\n{\nint rc = match_data->rc;\nPCRE2_SIZE start_offset = match_data->start_offset;\nPCRE2_SIZE *ovector = match_data->ovector;\n\n/* Match error, or no match: no further iteration possible. In previous versions\nof PCRE2, we recommended that clients use a strategy which involved retrying in\ncertain cases after PCRE2_ERROR_NOMATCH, but this is no longer required. */\n\nif (rc < 0)\n  return FALSE;\n\n/* Match succeeded: get the start offset for the next match */\n\n/* Although \\K can affect the position of ovector[0], there are no ways to do\nanything surprising with ovector[1], which must always be >= start_offset. */\n\nPCRE2_ASSERT(ovector[1] >= start_offset);\n\n/* Special handling for patterns which contain \\K in a lookaround, which enables\nthe match start to be pushed back to before the starting search offset\n(ovector[0] < start_offset) or after the match ends (ovector[0] > ovector[1]).\nThis is not a problem if ovector[1] > start_offset, because in this case, we can\njust attempt the next match at ovector[1]: we are making progress, which is all\nthat we require.\n\nHowever, if we have ovector[1] == start_offset, then we have a very rare case\nwhich must be handled specially, because it's a non-empty match which\nnonetheless fails to make progress through the subject. */\n\nif (ovector[0] != start_offset && ovector[1] == start_offset)\n  {\n  /* If the match end is at the end of the subject, we are done. */\n\n  if (start_offset >= match_data->subject_length)\n    return FALSE;\n\n  /* Otherwise, bump along by one code unit, and do a normal search. */\n\n  *pstart_offset = do_bumpalong(match_data, ovector[1]);\n  *poptions = 0;\n  return TRUE;\n  }\n\n/* If the previous match was for an empty string, we are finished if we are at\nthe end of the subject. Otherwise, arrange to run another match at the same\npoint to see if a non-empty match can be found. */\n\nif (ovector[0] == ovector[1])\n  {\n  /* If the match is at the end of the subject, we are done. */\n\n  if (ovector[0] >= match_data->subject_length)\n    return FALSE;\n\n  /* Otherwise, continue at this exact same point, but we must set the flag\n  which ensures that we don't return the exact same empty match again. */\n\n  *pstart_offset = ovector[1];\n  *poptions = PCRE2_NOTEMPTY_ATSTART;\n  return TRUE;\n  }\n\n/* Finally, we must be in the happy state of a non-empty match, where the end of\nthe match is further on in the subject than start_offset, so we are easily able\nto continue and make progress. */\n\n*pstart_offset = ovector[1];\n*poptions = 0;\nreturn TRUE;\n}\n\n/* End of pcre2_match_next.c */\n"
  },
  {
    "path": "src/pcre2_newline.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n         New API code Copyright (c) 2016 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains internal functions for testing newlines when more than\none kind of newline is to be recognized. When a newline is found, its length is\nreturned. In principle, we could implement several newline \"types\", each\nreferring to a different set of newline characters. At present, PCRE2 supports\nonly NLTYPE_FIXED, which gets handled without these functions, NLTYPE_ANYCRLF,\nand NLTYPE_ANY. The full list of Unicode newline characters is taken from\nhttp://unicode.org/unicode/reports/tr18/. */\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/*************************************************\n*      Check for newline at given position       *\n*************************************************/\n\n/* This function is called only via the IS_NEWLINE macro, which does so only\nwhen the newline type is NLTYPE_ANY or NLTYPE_ANYCRLF. The case of a fixed\nnewline (NLTYPE_FIXED) is handled inline. It is guaranteed that the code unit\npointed to by ptr is less than the end of the string.\n\nArguments:\n  ptr          pointer to possible newline\n  type         the newline type\n  endptr       pointer to the end of the string\n  lenptr       where to return the length\n  utf          TRUE if in utf mode\n\nReturns:       TRUE or FALSE\n*/\n\nBOOL\nPRIV(is_newline)(PCRE2_SPTR ptr, uint32_t type, PCRE2_SPTR endptr,\n  uint32_t *lenptr, BOOL utf)\n{\nuint32_t c;\n\n#ifdef SUPPORT_UNICODE\nif (utf) { GETCHAR(c, ptr); } else c = *ptr;\n#else\n(void)utf;\nc = *ptr;\n#endif  /* SUPPORT_UNICODE */\n\nif (type == NLTYPE_ANYCRLF) switch(c)\n  {\n  case CHAR_LF:\n  *lenptr = 1;\n  return TRUE;\n\n  case CHAR_CR:\n  *lenptr = (ptr < endptr - 1 && ptr[1] == CHAR_LF)? 2 : 1;\n  return TRUE;\n\n  default:\n  return FALSE;\n  }\n\n/* NLTYPE_ANY */\n\nelse switch(c)\n  {\n#ifdef EBCDIC\n  case CHAR_NEL:\n#endif\n  case CHAR_LF:\n  case CHAR_VT:\n  case CHAR_FF:\n  *lenptr = 1;\n  return TRUE;\n\n  case CHAR_CR:\n  *lenptr = (ptr < endptr - 1 && ptr[1] == CHAR_LF)? 2 : 1;\n  return TRUE;\n\n#ifndef EBCDIC\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  case CHAR_NEL:\n  *lenptr = utf? 2 : 1;\n  return TRUE;\n\n  case 0x2028:   /* LS */\n  case 0x2029:   /* PS */\n  *lenptr = 3;\n  return TRUE;\n\n#else  /* 16-bit or 32-bit code units */\n  case CHAR_NEL:\n  case 0x2028:   /* LS */\n  case 0x2029:   /* PS */\n  *lenptr = 1;\n  return TRUE;\n#endif\n#endif /* Not EBCDIC */\n\n  default:\n  return FALSE;\n  }\n}\n\n\n\n/*************************************************\n*     Check for newline at previous position     *\n*************************************************/\n\n/* This function is called only via the WAS_NEWLINE macro, which does so only\nwhen the newline type is NLTYPE_ANY or NLTYPE_ANYCRLF. The case of a fixed\nnewline (NLTYPE_FIXED) is handled inline. It is guaranteed that the initial\nvalue of ptr is greater than the start of the string that is being processed.\n\nArguments:\n  ptr          pointer to possible newline\n  type         the newline type\n  startptr     pointer to the start of the string\n  lenptr       where to return the length\n  utf          TRUE if in utf mode\n\nReturns:       TRUE or FALSE\n*/\n\nBOOL\nPRIV(was_newline)(PCRE2_SPTR ptr, uint32_t type, PCRE2_SPTR startptr,\n  uint32_t *lenptr, BOOL utf)\n{\nuint32_t c;\nptr--;\n\n#ifdef SUPPORT_UNICODE\nif (utf)\n  {\n  BACKCHAR(ptr);\n  GETCHAR(c, ptr);\n  }\nelse c = *ptr;\n#else\n(void)utf;\nc = *ptr;\n#endif  /* SUPPORT_UNICODE */\n\nif (type == NLTYPE_ANYCRLF) switch(c)\n  {\n  case CHAR_LF:\n  *lenptr = (ptr > startptr && ptr[-1] == CHAR_CR)? 2 : 1;\n  return TRUE;\n\n  case CHAR_CR:\n  *lenptr = 1;\n  return TRUE;\n\n  default:\n  return FALSE;\n  }\n\n/* NLTYPE_ANY */\n\nelse switch(c)\n  {\n  case CHAR_LF:\n  *lenptr = (ptr > startptr && ptr[-1] == CHAR_CR)? 2 : 1;\n  return TRUE;\n\n#ifdef EBCDIC\n  case CHAR_NEL:\n#endif\n  case CHAR_VT:\n  case CHAR_FF:\n  case CHAR_CR:\n  *lenptr = 1;\n  return TRUE;\n\n#ifndef EBCDIC\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  case CHAR_NEL:\n  *lenptr = utf? 2 : 1;\n  return TRUE;\n\n  case 0x2028:   /* LS */\n  case 0x2029:   /* PS */\n  *lenptr = 3;\n  return TRUE;\n\n#else /* 16-bit or 32-bit code units */\n  case CHAR_NEL:\n  case 0x2028:   /* LS */\n  case 0x2029:   /* PS */\n  *lenptr = 1;\n  return TRUE;\n#endif\n#endif /* Not EBCDIC */\n\n  default:\n  return FALSE;\n  }\n}\n\n/* End of pcre2_newline.c */\n"
  },
  {
    "path": "src/pcre2_ord2utf.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n         New API code Copyright (c) 2016 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This file contains a function that converts a Unicode character code point\ninto a UTF string. The behaviour is different for each code unit width. */\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/* If SUPPORT_UNICODE is not defined, this function will never be called.\nSupply a dummy function because some compilers do not like empty source\nmodules. */\n\n#ifndef SUPPORT_UNICODE\nunsigned int\nPRIV(ord2utf)(uint32_t cvalue, PCRE2_UCHAR *buffer)\n{\n(void)(cvalue);\n(void)(buffer);\nreturn 0;\n}\n#else  /* SUPPORT_UNICODE */\n\n\n/*************************************************\n*          Convert code point to UTF             *\n*************************************************/\n\n/*\nArguments:\n  cvalue     the character value\n  buffer     pointer to buffer for result\n\nReturns:     number of code units placed in the buffer\n*/\n\nunsigned int\nPRIV(ord2utf)(uint32_t cvalue, PCRE2_UCHAR *buffer)\n{\n/* Convert to UTF-8 */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nunsigned int i;\n\nfor (i = 0; i < PRIV(utf8_table1_size); i++)\n  if ((int)cvalue <= PRIV(utf8_table1)[i]) break;\nbuffer += i;\nfor (unsigned int j = i; j != 0; j--)\n {\n *buffer-- = 0x80 | (cvalue & 0x3f);\n cvalue >>= 6;\n }\n*buffer = (PCRE2_UCHAR)(PRIV(utf8_table2)[i] | (int)cvalue);\nreturn i + 1;\n\n/* Convert to UTF-16 */\n\n#elif PCRE2_CODE_UNIT_WIDTH == 16\nif (cvalue <= 0xffff)\n  {\n  *buffer = (PCRE2_UCHAR)cvalue;\n  return 1;\n  }\ncvalue -= 0x10000;\n*buffer++ = 0xd800 | (cvalue >> 10);\n*buffer = 0xdc00 | (cvalue & 0x3ff);\nreturn 2;\n\n/* Convert to UTF-32 */\n\n#else\n*buffer = (PCRE2_UCHAR)cvalue;\nreturn 1;\n#endif\n}\n#endif  /* SUPPORT_UNICODE */\n\n/* End of pcre2_ord2utf.c */\n"
  },
  {
    "path": "src/pcre2_pattern_info.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/*************************************************\n*        Return info about compiled pattern      *\n*************************************************/\n\n/*\nArguments:\n  code          points to compiled code\n  what          what information is required\n  where         where to put the information; if NULL, return length\n\nReturns:        0 when data returned\n                > 0 when length requested\n                < 0 on error or unset value\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_pattern_info(const pcre2_code *code, uint32_t what, void *where)\n{\nconst pcre2_real_code *re = (const pcre2_real_code *)code;\n\nif (where == NULL)   /* Requests field length */\n  {\n  switch(what)\n    {\n    case PCRE2_INFO_ALLOPTIONS:\n    case PCRE2_INFO_ARGOPTIONS:\n    case PCRE2_INFO_BACKREFMAX:\n    case PCRE2_INFO_BSR:\n    case PCRE2_INFO_CAPTURECOUNT:\n    case PCRE2_INFO_DEPTHLIMIT:\n    case PCRE2_INFO_EXTRAOPTIONS:\n    case PCRE2_INFO_FIRSTCODETYPE:\n    case PCRE2_INFO_FIRSTCODEUNIT:\n    case PCRE2_INFO_HASBACKSLASHC:\n    case PCRE2_INFO_HASCRORLF:\n    case PCRE2_INFO_HEAPLIMIT:\n    case PCRE2_INFO_JCHANGED:\n    case PCRE2_INFO_LASTCODETYPE:\n    case PCRE2_INFO_LASTCODEUNIT:\n    case PCRE2_INFO_MATCHEMPTY:\n    case PCRE2_INFO_MATCHLIMIT:\n    case PCRE2_INFO_MAXLOOKBEHIND:\n    case PCRE2_INFO_MINLENGTH:\n    case PCRE2_INFO_NAMEENTRYSIZE:\n    case PCRE2_INFO_NAMECOUNT:\n    case PCRE2_INFO_NEWLINE:\n    return sizeof(uint32_t);\n\n    case PCRE2_INFO_FIRSTBITMAP:\n    return sizeof(const uint8_t *);\n\n    case PCRE2_INFO_JITSIZE:\n    case PCRE2_INFO_SIZE:\n    case PCRE2_INFO_FRAMESIZE:\n    return sizeof(size_t);\n\n    case PCRE2_INFO_NAMETABLE:\n    return sizeof(PCRE2_SPTR);\n    }\n  }\n\nif (re == NULL) return PCRE2_ERROR_NULL;\n\n/* Check that the first field in the block is the magic number. If it is not,\nreturn with PCRE2_ERROR_BADMAGIC. */\n\nif (re->magic_number != MAGIC_NUMBER) return PCRE2_ERROR_BADMAGIC;\n\n/* Check that this pattern was compiled in the correct bit mode */\n\nif ((re->flags & (PCRE2_CODE_UNIT_WIDTH/8)) == 0) return PCRE2_ERROR_BADMODE;\n\nswitch(what)\n  {\n  case PCRE2_INFO_ALLOPTIONS:\n  *((uint32_t *)where) = re->overall_options;\n  break;\n\n  case PCRE2_INFO_ARGOPTIONS:\n  *((uint32_t *)where) = re->compile_options;\n  break;\n\n  case PCRE2_INFO_BACKREFMAX:\n  *((uint32_t *)where) = re->top_backref;\n  break;\n\n  case PCRE2_INFO_BSR:\n  *((uint32_t *)where) = re->bsr_convention;\n  break;\n\n  case PCRE2_INFO_CAPTURECOUNT:\n  *((uint32_t *)where) = re->top_bracket;\n  break;\n\n  case PCRE2_INFO_DEPTHLIMIT:\n  *((uint32_t *)where) = re->limit_depth;\n  if (re->limit_depth == UINT32_MAX) return PCRE2_ERROR_UNSET;\n  break;\n\n  case PCRE2_INFO_EXTRAOPTIONS:\n  *((uint32_t *)where) = re->extra_options;\n  break;\n\n  case PCRE2_INFO_FIRSTCODETYPE:\n  *((uint32_t *)where) = ((re->flags & PCRE2_FIRSTSET) != 0)? 1 :\n                         ((re->flags & PCRE2_STARTLINE) != 0)? 2 : 0;\n  break;\n\n  case PCRE2_INFO_FIRSTCODEUNIT:\n  *((uint32_t *)where) = ((re->flags & PCRE2_FIRSTSET) != 0)?\n    re->first_codeunit : 0;\n  break;\n\n  case PCRE2_INFO_FIRSTBITMAP:\n  *((const uint8_t **)where) = ((re->flags & PCRE2_FIRSTMAPSET) != 0)?\n    &(re->start_bitmap[0]) : NULL;\n  break;\n\n  case PCRE2_INFO_FRAMESIZE:\n  *((size_t *)where) = offsetof(heapframe, ovector) +\n    re->top_bracket * 2 * sizeof(PCRE2_SIZE);\n  break;\n\n  case PCRE2_INFO_HASBACKSLASHC:\n  *((uint32_t *)where) = (re->flags & PCRE2_HASBKC) != 0;\n  break;\n\n  case PCRE2_INFO_HASCRORLF:\n  *((uint32_t *)where) = (re->flags & PCRE2_HASCRORLF) != 0;\n  break;\n\n  case PCRE2_INFO_HEAPLIMIT:\n  *((uint32_t *)where) = re->limit_heap;\n  if (re->limit_heap == UINT32_MAX) return PCRE2_ERROR_UNSET;\n  break;\n\n  case PCRE2_INFO_JCHANGED:\n  *((uint32_t *)where) = (re->flags & PCRE2_JCHANGED) != 0;\n  break;\n\n  case PCRE2_INFO_JITSIZE:\n#ifdef SUPPORT_JIT\n  *((size_t *)where) = (re->executable_jit != NULL)?\n    PRIV(jit_get_size)(re->executable_jit) : 0;\n#else\n  *((size_t *)where) = 0;\n#endif\n  break;\n\n  case PCRE2_INFO_LASTCODETYPE:\n  *((uint32_t *)where) = ((re->flags & PCRE2_LASTSET) != 0)? 1 : 0;\n  break;\n\n  case PCRE2_INFO_LASTCODEUNIT:\n  *((uint32_t *)where) = ((re->flags & PCRE2_LASTSET) != 0)?\n    re->last_codeunit : 0;\n  break;\n\n  case PCRE2_INFO_MATCHEMPTY:\n  *((uint32_t *)where) = (re->flags & PCRE2_MATCH_EMPTY) != 0;\n  break;\n\n  case PCRE2_INFO_MATCHLIMIT:\n  *((uint32_t *)where) = re->limit_match;\n  if (re->limit_match == UINT32_MAX) return PCRE2_ERROR_UNSET;\n  break;\n\n  case PCRE2_INFO_MAXLOOKBEHIND:\n  *((uint32_t *)where) = re->max_lookbehind;\n  break;\n\n  case PCRE2_INFO_MINLENGTH:\n  *((uint32_t *)where) = re->minlength;\n  break;\n\n  case PCRE2_INFO_NAMEENTRYSIZE:\n  *((uint32_t *)where) = re->name_entry_size;\n  break;\n\n  case PCRE2_INFO_NAMECOUNT:\n  *((uint32_t *)where) = re->name_count;\n  break;\n\n  case PCRE2_INFO_NAMETABLE:\n  *((PCRE2_SPTR *)where) = (PCRE2_SPTR)((const char *)re +\n    sizeof(pcre2_real_code));\n  break;\n\n  case PCRE2_INFO_NEWLINE:\n  *((uint32_t *)where) = re->newline_convention;\n  break;\n\n  case PCRE2_INFO_SIZE:\n  *((size_t *)where) = re->blocksize;\n  break;\n\n  default: return PCRE2_ERROR_BADOPTION;\n  }\n\nreturn 0;\n}\n\n\n\n/*************************************************\n*              Callout enumerator                *\n*************************************************/\n\n/*\nArguments:\n  code          points to compiled code\n  callback      function called for each callout block\n  callout_data  user data passed to the callback\n\nReturns:        0 when successfully completed\n                < 0 on local error\n               != 0 for callback error\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_callout_enumerate(const pcre2_code *code,\n  int (*callback)(pcre2_callout_enumerate_block *, void *), void *callout_data)\n{\nconst pcre2_real_code *re = (const pcre2_real_code *)code;\npcre2_callout_enumerate_block cb;\nPCRE2_SPTR cc;\n#ifdef SUPPORT_UNICODE\nBOOL utf;\n#endif\n\nif (re == NULL) return PCRE2_ERROR_NULL;\n\n#ifdef SUPPORT_UNICODE\nutf = (re->overall_options & PCRE2_UTF) != 0;\n#endif\n\n/* Check that the first field in the block is the magic number. If it is not,\nreturn with PCRE2_ERROR_BADMAGIC. */\n\nif (re->magic_number != MAGIC_NUMBER) return PCRE2_ERROR_BADMAGIC;\n\n/* Check that this pattern was compiled in the correct bit mode */\n\nif ((re->flags & (PCRE2_CODE_UNIT_WIDTH/8)) == 0) return PCRE2_ERROR_BADMODE;\n\ncb.version = 0;\ncc = (PCRE2_SPTR)((uint8_t *)re + re->code_start);\n\nwhile (TRUE)\n  {\n  int rc;\n  switch (*cc)\n    {\n    case OP_END:\n    return 0;\n\n    case OP_CHAR:\n    case OP_CHARI:\n    case OP_NOT:\n    case OP_NOTI:\n    case OP_STAR:\n    case OP_MINSTAR:\n    case OP_PLUS:\n    case OP_MINPLUS:\n    case OP_QUERY:\n    case OP_MINQUERY:\n    case OP_UPTO:\n    case OP_MINUPTO:\n    case OP_EXACT:\n    case OP_POSSTAR:\n    case OP_POSPLUS:\n    case OP_POSQUERY:\n    case OP_POSUPTO:\n    case OP_STARI:\n    case OP_MINSTARI:\n    case OP_PLUSI:\n    case OP_MINPLUSI:\n    case OP_QUERYI:\n    case OP_MINQUERYI:\n    case OP_UPTOI:\n    case OP_MINUPTOI:\n    case OP_EXACTI:\n    case OP_POSSTARI:\n    case OP_POSPLUSI:\n    case OP_POSQUERYI:\n    case OP_POSUPTOI:\n    case OP_NOTSTAR:\n    case OP_NOTMINSTAR:\n    case OP_NOTPLUS:\n    case OP_NOTMINPLUS:\n    case OP_NOTQUERY:\n    case OP_NOTMINQUERY:\n    case OP_NOTUPTO:\n    case OP_NOTMINUPTO:\n    case OP_NOTEXACT:\n    case OP_NOTPOSSTAR:\n    case OP_NOTPOSPLUS:\n    case OP_NOTPOSQUERY:\n    case OP_NOTPOSUPTO:\n    case OP_NOTSTARI:\n    case OP_NOTMINSTARI:\n    case OP_NOTPLUSI:\n    case OP_NOTMINPLUSI:\n    case OP_NOTQUERYI:\n    case OP_NOTMINQUERYI:\n    case OP_NOTUPTOI:\n    case OP_NOTMINUPTOI:\n    case OP_NOTEXACTI:\n    case OP_NOTPOSSTARI:\n    case OP_NOTPOSPLUSI:\n    case OP_NOTPOSQUERYI:\n    case OP_NOTPOSUPTOI:\n    cc += PRIV(OP_lengths)[*cc];\n#ifdef SUPPORT_UNICODE\n    if (utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n    break;\n\n    case OP_TYPESTAR:\n    case OP_TYPEMINSTAR:\n    case OP_TYPEPLUS:\n    case OP_TYPEMINPLUS:\n    case OP_TYPEQUERY:\n    case OP_TYPEMINQUERY:\n    case OP_TYPEUPTO:\n    case OP_TYPEMINUPTO:\n    case OP_TYPEEXACT:\n    case OP_TYPEPOSSTAR:\n    case OP_TYPEPOSPLUS:\n    case OP_TYPEPOSQUERY:\n    case OP_TYPEPOSUPTO:\n    cc += PRIV(OP_lengths)[*cc];\n#ifdef SUPPORT_UNICODE\n    if (cc[-1] == OP_PROP || cc[-1] == OP_NOTPROP) cc += 2;\n#endif\n    break;\n\n#ifdef SUPPORT_WIDE_CHARS\n    case OP_XCLASS:\n    case OP_ECLASS:\n    cc += GET(cc, 1);\n    break;\n#endif\n\n    case OP_MARK:\n    case OP_COMMIT_ARG:\n    case OP_PRUNE_ARG:\n    case OP_SKIP_ARG:\n    case OP_THEN_ARG:\n    cc += PRIV(OP_lengths)[*cc] + cc[1];\n    break;\n\n    case OP_CALLOUT:\n    cb.pattern_position = GET(cc, 1);\n    cb.next_item_length = GET(cc, 1 + LINK_SIZE);\n    cb.callout_number = cc[1 + 2*LINK_SIZE];\n    cb.callout_string_offset = 0;\n    cb.callout_string_length = 0;\n    cb.callout_string = NULL;\n    rc = callback(&cb, callout_data);\n    if (rc != 0) return rc;\n    cc += PRIV(OP_lengths)[*cc];\n    break;\n\n    case OP_CALLOUT_STR:\n    cb.pattern_position = GET(cc, 1);\n    cb.next_item_length = GET(cc, 1 + LINK_SIZE);\n    cb.callout_number = 0;\n    cb.callout_string_offset = GET(cc, 1 + 3*LINK_SIZE);\n    cb.callout_string_length =\n      GET(cc, 1 + 2*LINK_SIZE) - (1 + 4*LINK_SIZE) - 2;\n    cb.callout_string = cc + (1 + 4*LINK_SIZE) + 1;\n    rc = callback(&cb, callout_data);\n    if (rc != 0) return rc;\n    cc += GET(cc, 1 + 2*LINK_SIZE);\n    break;\n\n    default:\n    cc += PRIV(OP_lengths)[*cc];\n    break;\n    }\n  }\n}\n\n/* End of pcre2_pattern_info.c */\n"
  },
  {
    "path": "src/pcre2_printint_inc.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains a PCRE private debugging function for printing out the\ninternal form of a compiled regular expression, along with some supporting\nlocal functions. This source file is #included in pcre2test.c at each supported\ncode unit width, with PCRE2_SUFFIX set appropriately, just like the functions\nthat comprise the library. It can also optionally be included in\npcre2_compile.c for detailed debugging in error situations. */\n\n\n\n/* Tables of operator names. The same 8-bit table is used for all code unit\nwidths, so it must be defined only once. The list itself is defined in\npcre2_internal.h, which is #included by pcre2test before this file. */\n\n#ifndef OP_LISTS_DEFINED\nstatic const char *OP_names[] = { OP_NAME_LIST };\nSTATIC_ASSERT(sizeof(OP_names)/sizeof(*OP_names) == OP_TABLE_LENGTH, OP_names);\n#define OP_LISTS_DEFINED\n#endif\n\n/* The functions and tables herein must all have mode-dependent names. */\n\n#define OP_lengths            PCRE2_SUFFIX(OP_lengths_)\n#define get_ucpname           PCRE2_SUFFIX(get_ucpname_)\n#define pcre2_printint        PCRE2_SUFFIX(pcre2_printint_)\n#define print_char            PCRE2_SUFFIX(print_char_)\n#define print_custring        PCRE2_SUFFIX(print_custring_)\n#define print_custring_bylen  PCRE2_SUFFIX(print_custring_bylen_)\n#define print_prop            PCRE2_SUFFIX(print_prop_)\n#define print_char_list       PCRE2_SUFFIX(print_char_list_)\n#define print_map             PCRE2_SUFFIX(print_map_)\n#define print_class           PCRE2_SUFFIX(print_class_)\n\n/* Table of sizes for the fixed-length opcodes. It's defined in a macro so that\nthe definition is next to the definition of the opcodes in pcre2_internal.h.\nThe contents of the table are, however, mode-dependent. */\n\nstatic const uint8_t OP_lengths[] = { OP_LENGTHS };\nSTATIC_ASSERT(sizeof(OP_lengths)/sizeof(*OP_lengths) == OP_TABLE_LENGTH,\n              PCRE2_SUFFIX(OP_lengths_));\n\n\n/*************************************************\n*       Print one character from a string        *\n*************************************************/\n\n/* In UTF mode the character may occupy more than one code unit.\n\nArguments:\n  f           file to write to\n  ptr         pointer to first code unit of the character\n  utf         TRUE if string is UTF (will be FALSE if UTF is not supported)\n\nReturns:      number of additional code units used\n*/\n\nstatic unsigned int\nprint_char(FILE *f, PCRE2_SPTR ptr, BOOL utf)\n{\nuint32_t c = *ptr;\nBOOL one_code_unit = !utf;\n\n/* If UTF is supported and requested, check for a valid single code unit. */\n\n#ifdef SUPPORT_UNICODE\nif (utf)\n  {\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  one_code_unit = c < 0x80;\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n  one_code_unit = (c & 0xfc00) != 0xd800;\n#else\n  one_code_unit = (c & 0xfffff800u) != 0xd800u;\n#endif  /* CODE_UNIT_WIDTH */\n  }\n#endif  /* SUPPORT_UNICODE */\n\n/* Handle a valid one-code-unit character at any width. */\n\nif (one_code_unit)\n  {\n  if (PRINTABLE(c))\n    fprintf(f, \"%c\", CHAR_OUTPUT(c));\n  else\n    {\n    c = CHAR_OUTPUT_HEX(c);\n    if (c < 0x80) fprintf(f, \"\\\\x%02x\", c);\n    else fprintf(f, \"\\\\x{%02x}\", c);\n    }\n  return 0;\n  }\n\n/* Code for invalid UTF code units and multi-unit UTF characters is different\nfor each width. If UTF is not supported, control should never get here, but we\nneed a return statement to keep the compiler happy. */\n\n#ifndef SUPPORT_UNICODE\nreturn 0;\n#else\n\n/* Malformed UTF-8 should occur only if the sanity check has been turned off.\nRather than swallow random bytes, just stop if we hit a bad one. Print it with\n\\X instead of \\x as an indication. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nif ((c & 0xc0) != 0xc0)\n  {\n  fprintf(f, \"\\\\X{%x}\", c);       /* Invalid starting byte */\n  return 0;\n  }\nelse\n  {\n  int i;\n  int a = PRIV(utf8_table4)[c & 0x3f];  /* Number of additional bytes */\n  int s = 6*a;\n  c = (c & PRIV(utf8_table3)[a]) << s;\n  for (i = 1; i <= a; i++)\n    {\n    if ((ptr[i] & 0xc0) != 0x80)\n      {\n      fprintf(f, \"\\\\X{%x}\", c);   /* Invalid secondary byte */\n      return i - 1;\n      }\n    s -= 6;\n    c |= (ptr[i] & 0x3f) << s;\n    }\n  fprintf(f, \"\\\\x{%x}\", c);\n  return a;\n}\n#endif  /* PCRE2_CODE_UNIT_WIDTH == 8 */\n\n/* UTF-16: rather than swallow a low surrogate, just stop if we hit a bad one.\nPrint it with \\X instead of \\x as an indication. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 16\nif ((ptr[1] & 0xfc00) != 0xdc00)\n  {\n  fprintf(f, \"\\\\X{%x}\", c);\n  return 0;\n  }\nc = (((c & 0x3ff) << 10) | (ptr[1] & 0x3ff)) + 0x10000;\nfprintf(f, \"\\\\x{%x}\", c);\nreturn 1;\n#endif  /* PCRE2_CODE_UNIT_WIDTH == 16 */\n\n/* For UTF-32 we get here only for a malformed code unit, which should only\noccur if the sanity check has been turned off. Print it with \\X instead of \\x\nas an indication. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\nfprintf(f, \"\\\\X{%x}\", c);\nreturn 0;\n#endif  /* PCRE2_CODE_UNIT_WIDTH == 32 */\n#endif  /* SUPPORT_UNICODE */\n}\n\n\n\n/*************************************************\n*     Print string as a list of code units       *\n*************************************************/\n\n/* These take no account of UTF as they always print each individual code unit.\nThe string is zero-terminated for print_custring(); the length is given for\nprint_custring_bylen().\n\nArguments:\n  f          file to write to\n  ptr        point to the string\n  len        length for print_custring_bylen()\n\nReturns:     nothing\n*/\n\nstatic void\nprint_custring(FILE *f, PCRE2_SPTR ptr)\n{\nwhile (*ptr != '\\0')\n  {\n  uint32_t c = *ptr++;\n  if (PRINTABLE(c)) fprintf(f, \"%c\", CHAR_OUTPUT(c));\n  else fprintf(f, \"\\\\x{%x}\", CHAR_OUTPUT_HEX(c));\n  }\n}\n\nstatic void\nprint_custring_bylen(FILE *f, PCRE2_SPTR ptr, PCRE2_UCHAR len)\n{\nfor (; len > 0; len--)\n  {\n  uint32_t c = *ptr++;\n  if (PRINTABLE(c)) fprintf(f, \"%c\", CHAR_OUTPUT(c));\n  else fprintf(f, \"\\\\x{%x}\", CHAR_OUTPUT_HEX(c));\n  }\n}\n\n\n\n/*************************************************\n*          Find Unicode property name            *\n*************************************************/\n\n/* When there is no UTF/UCP support, the table of names does not exist. This\nfunction should not be called in such configurations, because a pattern that\ntries to use Unicode properties won't compile. Rather than put lots of #ifdefs\ninto the main code, however, we just put one into this function.\n\nNow that the table contains both full names and their abbreviations, we do some\nfiddling to try to get the full name, which is either the longer of two found\nnames, or a 3-character script name. */\n\nstatic const char *\nget_ucpname(unsigned int ptype, unsigned int pvalue)\n{\n#ifdef SUPPORT_UNICODE\nint count = 0;\nconst char *yield = \"??\";\nsize_t len = 0;\nunsigned int ptypex = (ptype == PT_SC)? PT_SCX : ptype;\n\nfor (ptrdiff_t i = PRIV(utt_size) - 1; i >= 0; i--)\n  {\n  const ucp_type_table *u = PRIV(utt) + i;\n\n  if ((ptype == u->type || ptypex == u->type) && pvalue == u->value)\n    {\n    const char *s = PRIV(utt_names) + u->name_offset;\n    size_t sl = strlen(s);\n\n    if (sl == 3 && (u->type == PT_SC || u->type == PT_SCX))\n      {\n      yield = s;\n      break;\n      }\n\n    if (sl > len)\n      {\n      yield = s;\n      len = sl;\n      }\n\n    if (++count >= 2) break;\n    }\n  }\n\nreturn yield;\n\n#else   /* No UTF support */\n(void)ptype;\n(void)pvalue;\nreturn \"??\";\n#endif  /* SUPPORT_UNICODE */\n}\n\n\n\n/*************************************************\n*       Print Unicode property value             *\n*************************************************/\n\n/* \"Normal\" properties can be printed from tables. The PT_CLIST property is a\npseudo-property that contains a pointer to a list of case-equivalent\ncharacters.\n\nArguments:\n  f            file to write to\n  code         pointer in the compiled code\n  before       text to print before\n  after        text to print after\n\nReturns:       nothing\n*/\n\nstatic void\nprint_prop(FILE *f, PCRE2_SPTR code, const char *before, const char *after)\n{\nif (code[1] != PT_CLIST)\n  {\n  const char *sc = (code[1] == PT_SC)? \"script:\" : \"\";\n  const char *s = get_ucpname(code[1], code[2]);\n  fprintf(f, \"%s%s %s%c%s%s\", before, OP_names[*code], sc, toupper(s[0]), s+1, after);\n  }\nelse\n  {\n  const uint32_t *p = PRIV(ucd_caseless_sets) + code[2];\n  fprintf (f, \"%s%sclist\", before, (*code == OP_PROP)? \"\" : \"not \");\n  while (*p < NOTACHAR) fprintf(f, \" %04x\", *p++);\n  fprintf(f, \"%s\", after);\n  }\n}\n\n\n\n/*************************************************\n*              Print character list              *\n*************************************************/\n\n/* Prints the characters and character ranges in a character list.\n\nArguments:\n  f            file to write to\n  code         pointer in the compiled code\n*/\n\nstatic PCRE2_SPTR\nprint_char_list(FILE *f, PCRE2_SPTR code, const uint8_t *char_lists_end)\n{\nuint32_t type, list_ind;\nuint32_t char_list_add = XCL_CHAR_LIST_LOW_16_ADD;\nuint32_t range_start = ~(uint32_t)0, range_end = 0;\nconst uint8_t *next_char;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\ntype = (uint32_t)(code[0] << 8) | code[1];\ncode += 2;\n#else\ntype = code[0];\ncode++;\n#endif  /* CODE_UNIT_WIDTH */\n\n/* Align characters. */\nnext_char = char_lists_end - (GET(code, 0) << 1);\ntype &= XCL_TYPE_MASK;\nlist_ind = 0;\n\nif ((type & XCL_BEGIN_WITH_RANGE) != 0)\n  range_start = XCL_CHAR_LIST_LOW_16_START;\n\nwhile (type > 0)\n  {\n  uint32_t item_count = type & XCL_ITEM_COUNT_MASK;\n\n  if (item_count == XCL_ITEM_COUNT_MASK)\n    {\n    if (list_ind <= 1)\n      {\n      item_count = *(const uint16_t*)next_char;\n      next_char += 2;\n      }\n    else\n      {\n      item_count = *(const uint32_t*)next_char;\n      next_char += 4;\n      }\n    }\n\n  while (item_count > 0)\n    {\n    if (list_ind <= 1)\n      {\n      range_end = *(const uint16_t*)next_char;\n      next_char += 2;\n      }\n    else\n      {\n      range_end = *(const uint32_t*)next_char;\n      next_char += 4;\n      }\n\n    if ((range_end & XCL_CHAR_END) != 0)\n      {\n      range_end = char_list_add + (range_end >> XCL_CHAR_SHIFT);\n\n      if (range_start < range_end)\n        fprintf(f, \"\\\\x{%x}-\", range_start);\n\n      fprintf(f, \"\\\\x{%x}\", range_end);\n      range_start = ~(uint32_t)0;\n      }\n    else\n      range_start = char_list_add + (range_end >> XCL_CHAR_SHIFT);\n\n    item_count--;\n    }\n\n  list_ind++;\n  type >>= XCL_TYPE_BIT_LEN;\n\n  /* The following code could be optimized to 8/16/32 bit,\n  but it is not worth it for a debugging function. */\n\n  if (range_start == ~(uint32_t)0)\n    {\n    if ((type & XCL_BEGIN_WITH_RANGE) != 0)\n      {\n      if (list_ind == 1) range_start = XCL_CHAR_LIST_HIGH_16_START;\n      else if (list_ind == 2) range_start = XCL_CHAR_LIST_LOW_32_START;\n      else range_start = XCL_CHAR_LIST_HIGH_32_START;\n      }\n    }\n  else if ((type & XCL_BEGIN_WITH_RANGE) == 0)\n    {\n    fprintf(f, \"\\\\x{%x}-\", range_start);\n\n    if (list_ind == 1) range_end = XCL_CHAR_LIST_LOW_16_END;\n    else if (list_ind == 2) range_end = XCL_CHAR_LIST_HIGH_16_END;\n    else if (list_ind == 3) range_end = XCL_CHAR_LIST_LOW_32_END;\n    else range_end = XCL_CHAR_LIST_HIGH_32_END;\n\n    fprintf(f, \"\\\\x{%x}\", range_end);\n    range_start = ~(uint32_t)0;\n    }\n\n  if (list_ind == 1) char_list_add = XCL_CHAR_LIST_HIGH_16_ADD;\n  else if (list_ind == 2) char_list_add = XCL_CHAR_LIST_LOW_32_ADD;\n  else char_list_add = XCL_CHAR_LIST_HIGH_32_ADD;\n  }\n\nreturn code + LINK_SIZE;\n}\n\n\n\n/*************************************************\n*       Print a character bitmap                 *\n*************************************************/\n\n/* Prints a 32-byte bitmap, which occurs within a character class opcode.\n\nArguments:\n  f            file to write to\n  map          pointer to the bitmap\n  negated      TRUE if the bitmap will be printed as negated\n\nReturns:       nothing\n*/\n\nstatic void\nprint_map(FILE *f, const uint8_t *map, BOOL negated)\n{\nBOOL first = TRUE;\nuint8_t inverted_map[32];\nint i, input;\n\nif (negated)\n  {\n  /* Using 255 ^ instead of ~ avoids clang sanitize warning. */\n  for (i = 0; i < 32; i++) inverted_map[i] = 255 ^ map[i];\n  map = inverted_map;\n  }\n\nfor (input = 0; input < 256; input++)\n  {\n  i = CHAR_INPUT_HEX(input);\n  if ((map[i/8] & (1u << (i&7))) != 0)\n    {\n    int j, jinput;\n    for (jinput = input; jinput+1 < 256; jinput++)\n      {\n      j = CHAR_INPUT_HEX(jinput+1);\n      if ((map[j/8] & (1u << (j&7))) == 0) break;\n      }\n    j = CHAR_INPUT_HEX(jinput);\n    if (i == CHAR_MINUS || i == CHAR_BACKSLASH ||\n        i == CHAR_RIGHT_SQUARE_BRACKET ||\n        (first && i == CHAR_CIRCUMFLEX_ACCENT))\n      fprintf(f, \"\\\\\");\n    if (PRINTABLE(i)) fprintf(f, \"%c\", CHAR_OUTPUT(i));\n    else fprintf(f, \"\\\\x%02x\", CHAR_OUTPUT_HEX(i));\n    first = FALSE;\n    if (jinput > input)\n      {\n      if (jinput != input + 1) fprintf(f, \"-\");\n      if (j == CHAR_MINUS || j == CHAR_BACKSLASH ||\n          j == CHAR_RIGHT_SQUARE_BRACKET)\n        fprintf(f, \"\\\\\");\n      if (PRINTABLE(j)) fprintf(f, \"%c\", CHAR_OUTPUT(j));\n      else fprintf(f, \"\\\\x%02x\", CHAR_OUTPUT_HEX(j));\n      }\n    input = jinput;\n    }\n  }\n}\n\n\n\n/*************************************************\n*       Print character class                    *\n*************************************************/\n\n/* Prints a character class, which must be either an OP_CLASS, OP_NCLASS, or\nOP_XCLASS.\n\nArguments:\n  f            file to write to\n  type         OP_CLASS, OP_NCLASS, or OP_XCLASS\n  code         pointer in the compiled code (after the OP tag)\n  utf          TRUE if re is UTF (will be FALSE if UTF is not supported)\n  before       text to print before\n  after        text to print after\n\nReturns:       nothing\n*/\n\nstatic void\nprint_class(FILE *f, int type, PCRE2_SPTR code, const uint8_t *char_lists_end,\n  BOOL utf, const char *before, const char *after)\n{\nBOOL printmap, negated;\nPCRE2_SPTR ccode;\n\n/* Negative XCLASS and NCLASS both have a bitmap indicating which characters\nare accepted. For clarity we print this inverted and prefixed by \"^\". */\nif (type == OP_XCLASS)\n  {\n  ccode = code + LINK_SIZE;\n  printmap = (*ccode & XCL_MAP) != 0;\n  negated = (*ccode & XCL_NOT) != 0;\n  ccode++;\n  }\nelse  /* CLASS or NCLASS */\n  {\n  printmap = TRUE;\n  negated = type == OP_NCLASS;\n  ccode = code;\n  }\n\nfprintf(f, \"%s[%s\", before, negated? \"^\" : \"\");\n\n/* Print a bit map */\nif (printmap)\n  {\n  print_map(f, (const uint8_t *)ccode, negated);\n  ccode += 32 / sizeof(PCRE2_UCHAR);\n  }\n\n/* For an XCLASS there is always some additional data */\nif (type == OP_XCLASS)\n  {\n  PCRE2_UCHAR ch;\n\n  while ((ch = *ccode++) != XCL_END)\n    {\n    const char *notch = \"\";\n\n    if (ch >= XCL_LIST)\n      {\n      ccode = print_char_list(f, ccode - 1, char_lists_end);\n      break;\n      }\n\n    switch(ch)\n      {\n      case XCL_NOTPROP:\n      notch = \"^\";\n      PCRE2_FALLTHROUGH /* Fall through */\n      case XCL_PROP:\n        {\n        unsigned int ptype = *ccode++;\n        unsigned int pvalue = *ccode++;\n        const char *s;\n        switch(ptype)\n          {\n          case PT_PXGRAPH:\n          fprintf(f, \"[:%sgraph:]\", notch);\n          break;\n          case PT_PXPRINT:\n          fprintf(f, \"[:%sprint:]\", notch);\n          break;\n          case PT_PXPUNCT:\n          fprintf(f, \"[:%spunct:]\", notch);\n          break;\n          case PT_PXXDIGIT:\n          fprintf(f, \"[:%sxdigit:]\", notch);\n          break;\n          default:\n          s = get_ucpname(ptype, pvalue);\n          fprintf(f, \"\\\\%c{%c%s}\", ((notch[0] == '^')? 'P':'p'),\n            toupper(s[0]), s+1);\n          break;\n          }\n        }\n      break;\n\n      default:\n      ccode += 1 + print_char(f, ccode, utf);\n      if (ch == XCL_RANGE)\n        {\n        fprintf(f, \"-\");\n        ccode += 1 + print_char(f, ccode, utf);\n        }\n      break;\n      }\n    }\n\n  PCRE2_ASSERT(ccode == code + (GET(code, 0) - 1));\n  }\n\n/* Indicate a non-UTF class which was created by negation */\nfprintf(f, \"]%s\", after);\n}\n\n\n\n/*************************************************\n*            Print compiled pattern              *\n*************************************************/\n\n/* The print_lengths flag controls whether offsets and lengths of items are\nprinted. Lenths can be turned off from pcre2test so that automatic tests on\nbytecode can be written that do not depend on the value of LINK_SIZE.\n\nArguments:\n  re              a compiled pattern\n  f               the file to write to\n  print_lengths   show various lengths\n\nReturns:          nothing\n*/\n\nstatic void\npcre2_printint(pcre2_code *re, FILE *f, BOOL print_lengths)\n{\nPCRE2_SPTR codestart, nametable, code;\nuint32_t nesize = re->name_entry_size;\nBOOL utf = (re->overall_options & PCRE2_UTF) != 0;\n\nnametable = (PCRE2_SPTR)((uint8_t *)re + sizeof(pcre2_real_code));\ncode = codestart = (PCRE2_SPTR)((uint8_t *)re + re->code_start);\n\nfor(;;)\n  {\n  PCRE2_SPTR ccode;\n  uint32_t c;\n  int i;\n  const char *flag = \"  \";\n  unsigned int extra = 0;\n\n  if (print_lengths)\n    fprintf(f, \"%3d \", (int)(code - codestart));\n  else\n    fprintf(f, \"    \");\n\n  switch(*code)\n    {\n    case OP_END:\n    fprintf(f, \"    %s\\n\", OP_names[*code]);\n    fprintf(f, \"------------------------------------------------------------------\\n\");\n    return;\n\n    case OP_CHAR:\n    fprintf(f, \"    \");\n    do\n      {\n      code++;\n      code += 1 + print_char(f, code, utf);\n      }\n    while (*code == OP_CHAR);\n    fprintf(f, \"\\n\");\n    continue;\n\n    case OP_CHARI:\n    fprintf(f, \" /i \");\n    do\n      {\n      code++;\n      code += 1 + print_char(f, code, utf);\n      }\n    while (*code == OP_CHARI);\n    fprintf(f, \"\\n\");\n    continue;\n\n    case OP_CBRA:\n    case OP_CBRAPOS:\n    case OP_SCBRA:\n    case OP_SCBRAPOS:\n    if (print_lengths) fprintf(f, \"%3d \", GET(code, 1));\n      else fprintf(f, \"    \");\n    fprintf(f, \"%s %d\", OP_names[*code], GET2(code, 1+LINK_SIZE));\n    break;\n\n    case OP_BRA:\n    case OP_BRAPOS:\n    case OP_SBRA:\n    case OP_SBRAPOS:\n    case OP_KETRMAX:\n    case OP_KETRMIN:\n    case OP_KETRPOS:\n    case OP_ALT:\n    case OP_KET:\n    case OP_ASSERT:\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK:\n    case OP_ASSERTBACK_NOT:\n    case OP_ASSERT_NA:\n    case OP_ASSERTBACK_NA:\n    case OP_ASSERT_SCS:\n    case OP_ONCE:\n    case OP_SCRIPT_RUN:\n    case OP_COND:\n    case OP_SCOND:\n    if (print_lengths) fprintf(f, \"%3d \", GET(code, 1));\n      else fprintf(f, \"    \");\n    fprintf(f, \"%s\", OP_names[*code]);\n    break;\n\n    case OP_CLOSE:\n    fprintf(f, \"    %s %d\", OP_names[*code], GET2(code, 1));\n    break;\n\n    case OP_CREF:\n    case OP_REVERSE:\n    case OP_VREVERSE:\n    fprintf(f, \"%3d %s\", GET2(code, 1), OP_names[*code]);\n    if (*code == OP_VREVERSE) fprintf(f, \" %d\", GET2(code, 1 + IMM2_SIZE));\n    break;\n\n    case OP_DNCREF:\n    case OP_DNRREF:\n      {\n      PCRE2_SPTR entry = nametable + (GET2(code, 1) * nesize) + IMM2_SIZE;\n      fprintf(f, \" %s %s<\", flag, OP_names[*code]);\n      print_custring(f, entry);\n      fprintf(f, \">%d\", GET2(code, 1 + IMM2_SIZE));\n      }\n    break;\n\n    case OP_RREF:\n    c = GET2(code, 1);\n    if (c == RREF_ANY)\n      fprintf(f, \"    %s any\", OP_names[*code]);\n    else\n      fprintf(f, \"    %s %d\", OP_names[*code], c);\n    break;\n\n    case OP_STARI:\n    case OP_MINSTARI:\n    case OP_POSSTARI:\n    case OP_PLUSI:\n    case OP_MINPLUSI:\n    case OP_POSPLUSI:\n    case OP_QUERYI:\n    case OP_MINQUERYI:\n    case OP_POSQUERYI:\n    flag = \"/i\";\n    PCRE2_FALLTHROUGH /* Fall through */\n    case OP_STAR:\n    case OP_MINSTAR:\n    case OP_POSSTAR:\n    case OP_PLUS:\n    case OP_MINPLUS:\n    case OP_POSPLUS:\n    case OP_QUERY:\n    case OP_MINQUERY:\n    case OP_POSQUERY:\n    case OP_TYPESTAR:\n    case OP_TYPEMINSTAR:\n    case OP_TYPEPOSSTAR:\n    case OP_TYPEPLUS:\n    case OP_TYPEMINPLUS:\n    case OP_TYPEPOSPLUS:\n    case OP_TYPEQUERY:\n    case OP_TYPEMINQUERY:\n    case OP_TYPEPOSQUERY:\n    fprintf(f, \" %s \", flag);\n\n    if (*code >= OP_TYPESTAR)\n      {\n      if (code[1] == OP_PROP || code[1] == OP_NOTPROP)\n        {\n        print_prop(f, code + 1, \"\", \" \");\n        extra = 2;\n        }\n      else fprintf(f, \"%s\", OP_names[code[1]]);\n      }\n    else extra = print_char(f, code+1, utf);\n    fprintf(f, \"%s\", OP_names[*code]);\n    break;\n\n    case OP_EXACTI:\n    case OP_UPTOI:\n    case OP_MINUPTOI:\n    case OP_POSUPTOI:\n    flag = \"/i\";\n    PCRE2_FALLTHROUGH /* Fall through */\n    case OP_EXACT:\n    case OP_UPTO:\n    case OP_MINUPTO:\n    case OP_POSUPTO:\n    fprintf(f, \" %s \", flag);\n    extra = print_char(f, code + 1 + IMM2_SIZE, utf);\n    fprintf(f, \"{\");\n    if (*code != OP_EXACT && *code != OP_EXACTI) fprintf(f, \"0,\");\n    fprintf(f, \"%d}\", GET2(code,1));\n    if (*code == OP_MINUPTO || *code == OP_MINUPTOI) fprintf(f, \"?\");\n      else if (*code == OP_POSUPTO || *code == OP_POSUPTOI) fprintf(f, \"+\");\n    break;\n\n    case OP_TYPEEXACT:\n    case OP_TYPEUPTO:\n    case OP_TYPEMINUPTO:\n    case OP_TYPEPOSUPTO:\n    if (code[1 + IMM2_SIZE] == OP_PROP || code[1 + IMM2_SIZE] == OP_NOTPROP)\n      {\n      print_prop(f, code + IMM2_SIZE + 1, \"    \", \" \");\n      extra = 2;\n      }\n    else fprintf(f, \"    %s\", OP_names[code[1 + IMM2_SIZE]]);\n    fprintf(f, \"{\");\n    if (*code != OP_TYPEEXACT) fprintf(f, \"0,\");\n    fprintf(f, \"%d}\", GET2(code,1));\n    if (*code == OP_TYPEMINUPTO) fprintf(f, \"?\");\n      else if (*code == OP_TYPEPOSUPTO) fprintf(f, \"+\");\n    break;\n\n    case OP_NOTI:\n    flag = \"/i\";\n    PCRE2_FALLTHROUGH /* Fall through */\n    case OP_NOT:\n    fprintf(f, \" %s [^\", flag);\n    extra = print_char(f, code + 1, utf);\n    fprintf(f, \"] (not)\");\n    break;\n\n    case OP_NOTSTARI:\n    case OP_NOTMINSTARI:\n    case OP_NOTPOSSTARI:\n    case OP_NOTPLUSI:\n    case OP_NOTMINPLUSI:\n    case OP_NOTPOSPLUSI:\n    case OP_NOTQUERYI:\n    case OP_NOTMINQUERYI:\n    case OP_NOTPOSQUERYI:\n    flag = \"/i\";\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case OP_NOTSTAR:\n    case OP_NOTMINSTAR:\n    case OP_NOTPOSSTAR:\n    case OP_NOTPLUS:\n    case OP_NOTMINPLUS:\n    case OP_NOTPOSPLUS:\n    case OP_NOTQUERY:\n    case OP_NOTMINQUERY:\n    case OP_NOTPOSQUERY:\n    fprintf(f, \" %s [^\", flag);\n    extra = print_char(f, code + 1, utf);\n    fprintf(f, \"]%s (not)\", OP_names[*code]);\n    break;\n\n    case OP_NOTEXACTI:\n    case OP_NOTUPTOI:\n    case OP_NOTMINUPTOI:\n    case OP_NOTPOSUPTOI:\n    flag = \"/i\";\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case OP_NOTEXACT:\n    case OP_NOTUPTO:\n    case OP_NOTMINUPTO:\n    case OP_NOTPOSUPTO:\n    fprintf(f, \" %s [^\", flag);\n    extra = print_char(f, code + 1 + IMM2_SIZE, utf);\n    fprintf(f, \"]{\");\n    if (*code != OP_NOTEXACT && *code != OP_NOTEXACTI) fprintf(f, \"0,\");\n    fprintf(f, \"%d}\", GET2(code,1));\n    if (*code == OP_NOTMINUPTO || *code == OP_NOTMINUPTOI) fprintf(f, \"?\");\n      else\n    if (*code == OP_NOTPOSUPTO || *code == OP_NOTPOSUPTOI) fprintf(f, \"+\");\n    fprintf(f, \" (not)\");\n    break;\n\n    case OP_RECURSE:\n    if (print_lengths) fprintf(f, \"%3d \", GET(code, 1));\n      else fprintf(f, \"    \");\n    fprintf(f, \"%s\", OP_names[*code]);\n    break;\n\n    case OP_REFI:\n    flag = \"/i\";\n    PCRE2_FALLTHROUGH /* Fall through */\n    case OP_REF:\n    fprintf(f, \" %s \\\\g{%d}\", flag, GET2(code, 1));\n    i = (*code == OP_REFI)? code[1 + IMM2_SIZE] : 0;\n    if (i != 0) fprintf(f, \" 0x%02x\", i);\n    ccode = code + OP_lengths[*code];\n    goto CLASS_REF_REPEAT;\n\n    case OP_DNREFI:\n    flag = \"/i\";\n    PCRE2_FALLTHROUGH /* Fall through */\n    case OP_DNREF:\n      {\n      PCRE2_SPTR entry = nametable + (GET2(code, 1) * nesize) + IMM2_SIZE;\n      fprintf(f, \" %s \\\\k<\", flag);\n      print_custring(f, entry);\n      fprintf(f, \">%d\", GET2(code, 1 + IMM2_SIZE));\n      i = (*code == OP_DNREFI)? code[1 + 2*IMM2_SIZE] : 0;\n      if (i != 0) fprintf(f, \" 0x%02x\", i);\n      }\n    ccode = code + OP_lengths[*code];\n    goto CLASS_REF_REPEAT;\n\n    case OP_CALLOUT:\n    fprintf(f, \"    %s %d %d %d\", OP_names[*code], code[1 + 2*LINK_SIZE],\n      GET(code, 1), GET(code, 1 + LINK_SIZE));\n    break;\n\n    case OP_CALLOUT_STR:\n    c = code[1 + 4*LINK_SIZE];\n    fprintf(f, \"    %s %c\", OP_names[*code], CHAR_OUTPUT(c));\n    extra = GET(code, 1 + 2*LINK_SIZE);\n    print_custring_bylen(f, code + 2 + 4*LINK_SIZE, extra - 3 - 4*LINK_SIZE);\n    for (i = 0; PRIV(callout_start_delims)[i] != 0; i++)\n      if (c == PRIV(callout_start_delims)[i])\n        {\n        c = PRIV(callout_end_delims)[i];\n        break;\n        }\n    fprintf(f, \"%c %d %d %d\", CHAR_OUTPUT(c), GET(code, 1 + 3*LINK_SIZE),\n      GET(code, 1), GET(code, 1 + LINK_SIZE));\n    break;\n\n    case OP_PROP:\n    case OP_NOTPROP:\n    print_prop(f, code, \"    \", \"\");\n    break;\n\n#ifdef SUPPORT_WIDE_CHARS\n    case OP_ECLASS:\n    extra = GET(code, 1);\n    fprintf(f, \"    eclass[\\n\");\n    /* We print the opcodes contained inside as well. */\n    ccode = code + 1 + LINK_SIZE + 1;\n    if ((ccode[-1] & ECL_MAP) != 0)\n      {\n      const uint8_t *map = (const uint8_t *)ccode;\n      /* The first 6 ASCII characters (SOH...ACK) are totally, utterly useless.\n      If they're set in the bitmap, then it's clearly been formed by negation.*/\n      BOOL print_negated = (map[0] & 0x7e) == 0x7e;\n\n      fprintf(f, \"          bitmap: [%s\", print_negated? \"^\" : \"\");\n      print_map(f, map, print_negated);\n      fprintf(f, \"]\\n\");\n      ccode += 32 / sizeof(PCRE2_UCHAR);\n      }\n    else\n      fprintf(f, \"          no bitmap\\n\");\n    while (ccode < code + extra)\n      {\n      if (print_lengths)\n        fprintf(f, \"%3d \", (int)(ccode - codestart));\n      else\n        fprintf(f, \"    \");\n\n      switch (*ccode)\n        {\n        case ECL_AND:\n        fprintf(f, \"      AND\\n\");\n        ccode += 1;\n        break;\n        case ECL_OR:\n        fprintf(f, \"      OR\\n\");\n        ccode += 1;\n        break;\n        case ECL_XOR:\n        fprintf(f, \"      XOR\\n\");\n        ccode += 1;\n        break;\n        case ECL_NOT:\n        fprintf(f, \"      NOT\\n\");\n        ccode += 1;\n        break;\n\n        case ECL_XCLASS:\n        print_class(f, OP_XCLASS, ccode+1, (uint8_t*)codestart, utf,\n                    \"      xclass: \", \"\\n\");\n        ccode += GET(ccode, 1);\n        break;\n\n        default:\n        fprintf(f, \"      UNEXPECTED\\n\");\n        ccode += 1;\n        break;\n        }\n      }\n    fprintf(f, \"        ]\");\n    goto CLASS_REF_REPEAT;\n#endif  /* SUPPORT_WIDE_CHARS */\n\n    case OP_CLASS:\n    case OP_NCLASS:\n#ifdef SUPPORT_WIDE_CHARS\n    case OP_XCLASS:\n    if (*code == OP_XCLASS)\n      extra = GET(code, 1);\n#endif\n    print_class(f, *code, code+1, (uint8_t*)codestart, utf, \"    \", \"\");\n    ccode = code + OP_lengths[*code] + extra;\n\n    /* Handle repeats after a class or a back reference */\n\n    CLASS_REF_REPEAT:\n    switch(*ccode)\n      {\n      unsigned int min, max;\n\n      case OP_CRSTAR:\n      case OP_CRMINSTAR:\n      case OP_CRPLUS:\n      case OP_CRMINPLUS:\n      case OP_CRQUERY:\n      case OP_CRMINQUERY:\n      case OP_CRPOSSTAR:\n      case OP_CRPOSPLUS:\n      case OP_CRPOSQUERY:\n      fprintf(f, \"%s\", OP_names[*ccode]);\n      extra += OP_lengths[*ccode];\n      break;\n\n      case OP_CRRANGE:\n      case OP_CRMINRANGE:\n      case OP_CRPOSRANGE:\n      min = GET2(ccode,1);\n      max = GET2(ccode,1 + IMM2_SIZE);\n      if (max == 0) fprintf(f, \"{%u,}\", min);\n      else fprintf(f, \"{%u,%u}\", min, max);\n      if (*ccode == OP_CRMINRANGE) fprintf(f, \"?\");\n      else if (*ccode == OP_CRPOSRANGE) fprintf(f, \"+\");\n      extra += OP_lengths[*ccode];\n      break;\n\n      /* Do nothing if it's not a repeat; this code stops picky compilers\n      warning about the lack of a default code path. */\n\n      default:\n      break;\n      }\n    break;\n\n    case OP_MARK:\n    case OP_COMMIT_ARG:\n    case OP_PRUNE_ARG:\n    case OP_SKIP_ARG:\n    case OP_THEN_ARG:\n    fprintf(f, \"    %s \", OP_names[*code]);\n    print_custring_bylen(f, code + 2, code[1]);\n    extra += code[1];\n    break;\n\n    case OP_CIRCM:\n    case OP_DOLLM:\n    flag = \"/m\";\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    /* Anything else is just an item with no data, but possibly a flag. */\n\n    default:\n    fprintf(f, \" %s %s\", flag, OP_names[*code]);\n    break;\n    }\n\n  code += OP_lengths[*code] + extra;\n  putc('\\n', f);\n  }\n}\n\n/* End of pcre2_printint_inc.h */\n"
  },
  {
    "path": "src/pcre2_script_run.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2021 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains the function for checking a script run. */\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/*************************************************\n*                Check script run                *\n*************************************************/\n\n/* A script run is conceptually a sequence of characters all in the same\nUnicode script. However, it isn't quite that simple. There are special rules\nfor scripts that are commonly used together, and also special rules for digits.\nThis function implements the appropriate checks, which is possible only when\nPCRE2 is compiled with Unicode support. The function returns TRUE if there is\nno Unicode support; however, it should never be called in that circumstance\nbecause an error is given by pcre2_compile() if a script run is called for in a\nversion of PCRE2 compiled without Unicode support.\n\nArguments:\n  pgr       point to the first character\n  endptr    point after the last character\n  utf       TRUE if in UTF mode\n\nReturns:    TRUE if this is a valid script run\n*/\n\n/* These are states in the checking process. */\n\nenum { SCRIPT_UNSET,          /* Requirement as yet unknown */\n       SCRIPT_MAP,            /* Bitmap contains acceptable scripts */\n       SCRIPT_HANPENDING,     /* Have had only Han characters */\n       SCRIPT_HANHIRAKATA,    /* Expect Han or Hirikata */\n       SCRIPT_HANBOPOMOFO,    /* Expect Han or Bopomofo */\n       SCRIPT_HANHANGUL       /* Expect Han or Hangul */\n       };\n\n#define UCD_MAPSIZE (ucp_Unknown/32 + 1)\n#define FULL_MAPSIZE (ucp_Script_Count/32 + 1)\n\nBOOL\nPRIV(script_run)(PCRE2_SPTR ptr, PCRE2_SPTR endptr, BOOL utf)\n{\n#ifdef SUPPORT_UNICODE\nuint32_t require_state = SCRIPT_UNSET;\nuint32_t require_map[FULL_MAPSIZE];\nuint32_t map[FULL_MAPSIZE];\nuint32_t require_digitset = 0;\nuint32_t c;\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\n(void)utf;    /* Avoid compiler warning */\n#endif\n\n/* Any string containing fewer than 2 characters is a valid script run. */\n\nif (ptr >= endptr) return TRUE;\nGETCHARINCTEST(c, ptr);\nif (ptr >= endptr) return TRUE;\n\n/* Initialize the require map. This is a full-size bitmap that has a bit for\nevery script, as opposed to the maps in ucd_script_sets, which only have bits\nfor scripts less than ucp_Unknown - those that appear in script extension\nlists. */\n\nfor (int i = 0; i < FULL_MAPSIZE; i++) require_map[i] = 0;\n\n/* Scan strings of two or more characters, checking the Unicode characteristics\nof each code point. There is special code for scripts that can be combined with\ncharacters from the Han Chinese script. This may be used in conjunction with\nfour other scripts in these combinations:\n\n. Han with Hiragana and Katakana is allowed (for Japanese).\n. Han with Bopomofo is allowed (for Taiwanese Mandarin).\n. Han with Hangul is allowed (for Korean).\n\nIf the first significant character's script is one of the four, the required\nscript type is immediately known. However, if the first significant\ncharacter's script is Han, we have to keep checking for a non-Han character.\nHence the SCRIPT_HANPENDING state. */\n\nfor (;;)\n  {\n  const ucd_record *ucd = GET_UCD(c);\n  uint32_t script = ucd->script;\n\n  /* If the script is Unknown, the string is not a valid script run. Such\n  characters can only form script runs of length one (see test above). */\n\n  if (script == ucp_Unknown) return FALSE;\n\n  /* A character without any script extensions whose script is Inherited or\n  Common is always accepted with any script. If there are extensions, the\n  following processing happens for all scripts. */\n\n  if (UCD_SCRIPTX_PROP(ucd) != 0 || (script != ucp_Inherited && script != ucp_Common))\n    {\n    BOOL OK;\n\n    /* Set up a full-sized map for this character that can include bits for all\n    scripts. Copy the scriptx map for this character (which covers those\n    scripts that appear in script extension lists), set the remaining values to\n    zero, and then, except for Common or Inherited, add this script's bit to\n    the map. */\n\n    memcpy(map, PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(ucd), UCD_MAPSIZE * sizeof(uint32_t));\n    memset(map + UCD_MAPSIZE, 0, (FULL_MAPSIZE - UCD_MAPSIZE) * sizeof(uint32_t));\n    if (script != ucp_Common && script != ucp_Inherited) MAPSET(map, script);\n\n    /* Handle the different checking states */\n\n    switch(require_state)\n      {\n      /* First significant character - it might follow Common or Inherited\n      characters that do not have any script extensions. */\n\n      case SCRIPT_UNSET:\n      switch(script)\n        {\n        case ucp_Han:\n        require_state = SCRIPT_HANPENDING;\n        break;\n\n        case ucp_Hiragana:\n        case ucp_Katakana:\n        require_state = SCRIPT_HANHIRAKATA;\n        break;\n\n        case ucp_Bopomofo:\n        require_state = SCRIPT_HANBOPOMOFO;\n        break;\n\n        case ucp_Hangul:\n        require_state = SCRIPT_HANHANGUL;\n        break;\n\n        default:\n        memcpy(require_map, map, FULL_MAPSIZE * sizeof(uint32_t));\n        require_state = SCRIPT_MAP;\n        break;\n        }\n      break;\n\n      /* The first significant character was Han. An inspection of the Unicode\n      11.0.0 files shows that there are the following types of Script Extension\n      list that involve the Han, Bopomofo, Hiragana, Katakana, and Hangul\n      scripts:\n\n      . Bopomofo + Han\n      . Han + Hiragana + Katakana\n      . Hiragana + Katakana\n      . Bopopmofo + Hangul + Han + Hiragana + Katakana\n\n      The following code tries to make sense of this. */\n\n#define FOUND_BOPOMOFO 1\n#define FOUND_HIRAGANA 2\n#define FOUND_KATAKANA 4\n#define FOUND_HANGUL   8\n\n      case SCRIPT_HANPENDING:\n      if (script != ucp_Han)   /* Another Han does nothing */\n        {\n        uint32_t chspecial = 0;\n\n        if (MAPBIT(map, ucp_Bopomofo) != 0) chspecial |= FOUND_BOPOMOFO;\n        if (MAPBIT(map, ucp_Hiragana) != 0) chspecial |= FOUND_HIRAGANA;\n        if (MAPBIT(map, ucp_Katakana) != 0) chspecial |= FOUND_KATAKANA;\n        if (MAPBIT(map, ucp_Hangul) != 0)   chspecial |= FOUND_HANGUL;\n\n        if (chspecial == 0) return FALSE;   /* Not allowed with Han */\n\n        if (chspecial == FOUND_BOPOMOFO)\n          require_state = SCRIPT_HANBOPOMOFO;\n        else if (chspecial == (FOUND_HIRAGANA|FOUND_KATAKANA))\n          require_state = SCRIPT_HANHIRAKATA;\n\n        /* Otherwise this character must be allowed with all of them, so remain\n        in the pending state. */\n        }\n      break;\n\n      /* Previously encountered one of the \"with Han\" scripts. Check that\n      this character is appropriate. */\n\n      case SCRIPT_HANHIRAKATA:\n      if (MAPBIT(map, ucp_Han) + MAPBIT(map, ucp_Hiragana) +\n          MAPBIT(map, ucp_Katakana) == 0) return FALSE;\n      break;\n\n      case SCRIPT_HANBOPOMOFO:\n      if (MAPBIT(map, ucp_Han) + MAPBIT(map, ucp_Bopomofo) == 0) return FALSE;\n      break;\n\n      case SCRIPT_HANHANGUL:\n      if (MAPBIT(map, ucp_Han) + MAPBIT(map, ucp_Hangul) == 0) return FALSE;\n      break;\n\n      /* Previously encountered one or more characters that are allowed with a\n      list of scripts. */\n\n      case SCRIPT_MAP:\n      OK = FALSE;\n\n      for (int i = 0; i < FULL_MAPSIZE; i++)\n        {\n        if ((require_map[i] & map[i]) != 0)\n          {\n          OK = TRUE;\n          break;\n          }\n        }\n\n      if (!OK) return FALSE;\n\n      /* The rest of the string must be in this script, but we have to\n      allow for the Han complications. */\n\n      switch(script)\n        {\n        case ucp_Han:\n        require_state = SCRIPT_HANPENDING;\n        break;\n\n        case ucp_Hiragana:\n        case ucp_Katakana:\n        require_state = SCRIPT_HANHIRAKATA;\n        break;\n\n        case ucp_Bopomofo:\n        require_state = SCRIPT_HANBOPOMOFO;\n        break;\n\n        case ucp_Hangul:\n        require_state = SCRIPT_HANHANGUL;\n        break;\n\n        /* Compute the intersection of the required list of scripts and the\n        allowed scripts for this character. */\n\n        default:\n        for (int i = 0; i < FULL_MAPSIZE; i++) require_map[i] &= map[i];\n        break;\n        }\n\n      break;\n      }\n    }   /* End checking character's script and extensions. */\n\n  /* The character is in an acceptable script. We must now ensure that all\n  decimal digits in the string come from the same set. Some scripts (e.g.\n  Common, Arabic) have more than one set of decimal digits. This code does\n  not allow mixing sets, even within the same script. The vector called\n  PRIV(ucd_digit_sets)[] contains, in its first element, the number of\n  following elements, and then, in ascending order, the code points of the\n  '9' characters in every set of 10 digits. Each set is identified by the\n  offset in the vector of its '9' character. An initial check of the first\n  value picks up ASCII digits quickly. Otherwise, a binary chop is used. */\n\n  if (ucd->chartype == ucp_Nd)\n    {\n    uint32_t digitset;\n\n    if (c <= PRIV(ucd_digit_sets)[1]) digitset = 1; else\n      {\n      int mid;\n      int bot = 1;\n      int top = PRIV(ucd_digit_sets)[0];\n      for (;;)\n        {\n        if (top <= bot + 1)    /* <= rather than == is paranoia */\n          {\n          digitset = top;\n          break;\n          }\n        mid = (top + bot) / 2;\n        if (c <= PRIV(ucd_digit_sets)[mid]) top = mid; else bot = mid;\n        }\n      }\n\n    /* A required value of 0 means \"unset\". */\n\n    if (require_digitset == 0) require_digitset = digitset;\n      else if (digitset != require_digitset) return FALSE;\n    }   /* End digit handling */\n\n  /* If we haven't yet got to the end, pick up the next character. */\n\n  if (ptr >= endptr) return TRUE;\n  GETCHARINCTEST(c, ptr);\n  }  /* End checking loop */\n\n#else   /* NOT SUPPORT_UNICODE */\n(void)ptr;\n(void)endptr;\n(void)utf;\nreturn TRUE;\n#endif  /* SUPPORT_UNICODE */\n}\n\n/* End of pcre2_script_run.c */\n"
  },
  {
    "path": "src/pcre2_serialize.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains functions for serializing and deserializing\na sequence of compiled codes. */\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/* Magic number to provide a small check against being handed junk. */\n\n#define SERIALIZED_DATA_MAGIC 0x50523253u\n\n/* Deserialization is limited to the current PCRE version and\ncharacter width. */\n\n#define SERIALIZED_DATA_VERSION \\\n  ((PCRE2_MAJOR) | ((PCRE2_MINOR) << 16))\n\n#define SERIALIZED_DATA_CONFIG \\\n  (sizeof(PCRE2_UCHAR) | ((sizeof(void*)) << 8) | ((sizeof(PCRE2_SIZE)) << 16))\n\n\n\n/*************************************************\n*           Serialize compiled patterns          *\n*************************************************/\n\nPCRE2_EXP_DEFN int32_t PCRE2_CALL_CONVENTION\npcre2_serialize_encode(const pcre2_code **codes, int32_t number_of_codes,\n   uint8_t **serialized_bytes, PCRE2_SIZE *serialized_size,\n   pcre2_general_context *gcontext)\n{\nuint8_t *bytes;\nuint8_t *dst_bytes;\nint32_t i;\nPCRE2_SIZE total_size;\nconst pcre2_real_code *re;\nconst uint8_t *tables;\npcre2_serialized_data *data;\n\nconst pcre2_memctl *memctl = (gcontext != NULL) ?\n  &gcontext->memctl : &PRIV(default_compile_context).memctl;\n\nif (codes == NULL || serialized_bytes == NULL || serialized_size == NULL)\n  return PCRE2_ERROR_NULL;\n\nif (number_of_codes <= 0) return PCRE2_ERROR_BADDATA;\n\n/* Compute total size. */\ntotal_size = sizeof(pcre2_serialized_data) + TABLES_LENGTH;\ntables = NULL;\n\nfor (i = 0; i < number_of_codes; i++)\n  {\n  if (codes[i] == NULL) return PCRE2_ERROR_NULL;\n  re = (const pcre2_real_code *)(codes[i]);\n  if (re->magic_number != MAGIC_NUMBER) return PCRE2_ERROR_BADMAGIC;\n  if (tables == NULL)\n    tables = re->tables;\n  else if (tables != re->tables)\n    return PCRE2_ERROR_MIXEDTABLES;\n  total_size += re->blocksize;\n  }\n\n/* Initialize the byte stream. */\nbytes = memctl->malloc(total_size + sizeof(pcre2_memctl), memctl->memory_data);\nif (bytes == NULL) return PCRE2_ERROR_NOMEMORY;\n\n/* The controller is stored as a hidden parameter. */\nmemcpy(bytes, memctl, sizeof(pcre2_memctl));\nbytes += sizeof(pcre2_memctl);\n\ndata = (pcre2_serialized_data *)bytes;\ndata->magic = SERIALIZED_DATA_MAGIC;\ndata->version = SERIALIZED_DATA_VERSION;\ndata->config = SERIALIZED_DATA_CONFIG;\ndata->number_of_codes = number_of_codes;\n\n/* Copy all compiled code data. */\ndst_bytes = bytes + sizeof(pcre2_serialized_data);\nmemcpy(dst_bytes, tables, TABLES_LENGTH);\ndst_bytes += TABLES_LENGTH;\n\nfor (i = 0; i < number_of_codes; i++)\n  {\n  re = (const pcre2_real_code *)(codes[i]);\n  (void)memcpy(dst_bytes, (const char *)re, re->blocksize);\n\n  /* Certain fields in the compiled code block are re-set during\n  deserialization. In order to ensure that the serialized data stream is always\n  the same for the same pattern, set them to zero here. We can't assume the\n  copy of the pattern is correctly aligned for accessing the fields as part of\n  a structure. Note the use of sizeof(void *) in the second of these, to\n  specify the size of a pointer. If sizeof(uint8_t *) is used (tables is a\n  pointer to uint8_t), gcc gives a warning because the first argument is also a\n  pointer to uint8_t. Casting the first argument to (void *) can stop this, but\n  it didn't stop Coverity giving the same complaint. */\n\n  (void)memset(dst_bytes + offsetof(pcre2_real_code, memctl), 0,\n    sizeof(pcre2_memctl));\n  (void)memset(dst_bytes + offsetof(pcre2_real_code, tables), 0,\n    sizeof(void *));\n  (void)memset(dst_bytes + offsetof(pcre2_real_code, executable_jit), 0,\n    sizeof(void *));\n\n  dst_bytes += re->blocksize;\n  }\n\n*serialized_bytes = bytes;\n*serialized_size = total_size;\nreturn number_of_codes;\n}\n\n\n/*************************************************\n*          Deserialize compiled patterns         *\n*************************************************/\n\nPCRE2_EXP_DEFN int32_t PCRE2_CALL_CONVENTION\npcre2_serialize_decode(pcre2_code **codes, int32_t number_of_codes,\n   const uint8_t *bytes, pcre2_general_context *gcontext)\n{\nconst pcre2_serialized_data *data = (const pcre2_serialized_data *)bytes;\nconst pcre2_memctl *memctl = (gcontext != NULL) ?\n  &gcontext->memctl : &PRIV(default_compile_context).memctl;\n\nconst uint8_t *src_bytes;\npcre2_real_code *dst_re = NULL;\nuint8_t *tables;\nint32_t i, j;\nint32_t error;\n\n/* Sanity checks. */\n\nif (data == NULL || codes == NULL) return PCRE2_ERROR_NULL;\nif (number_of_codes <= 0) return PCRE2_ERROR_BADDATA;\nif (data->number_of_codes <= 0) return PCRE2_ERROR_BADSERIALIZEDDATA;\nif (data->magic != SERIALIZED_DATA_MAGIC) return PCRE2_ERROR_BADMAGIC;\nif (data->version != SERIALIZED_DATA_VERSION) return PCRE2_ERROR_BADMODE;\nif (data->config != SERIALIZED_DATA_CONFIG) return PCRE2_ERROR_BADMODE;\n\nif (number_of_codes > data->number_of_codes)\n  number_of_codes = data->number_of_codes;\n\nsrc_bytes = bytes + sizeof(pcre2_serialized_data);\n\n/* Decode tables. The reference count for the tables is stored immediately\nfollowing them. */\n\ntables = memctl->malloc(TABLES_LENGTH + sizeof(PCRE2_SIZE), memctl->memory_data);\nif (tables == NULL) return PCRE2_ERROR_NOMEMORY;\n\nmemcpy(tables, src_bytes, TABLES_LENGTH);\n*(PCRE2_SIZE *)(tables + TABLES_LENGTH) = number_of_codes;\nsrc_bytes += TABLES_LENGTH;\n\n/* Decode the byte stream. We must not try to read the size from the compiled\ncode block in the stream, because it might be unaligned, which causes errors on\nhardware such as Sparc-64 that doesn't like unaligned memory accesses. The type\nof the blocksize field is given its own name to ensure that it is the same here\nas in the block. */\n\nfor (i = 0; i < number_of_codes; i++)\n  {\n  CODE_BLOCKSIZE_TYPE blocksize;\n  memcpy(&blocksize, src_bytes + offsetof(pcre2_real_code, blocksize),\n    sizeof(CODE_BLOCKSIZE_TYPE));\n  if (blocksize <= sizeof(pcre2_real_code))\n    {\n    error = PCRE2_ERROR_BADSERIALIZEDDATA;\n    goto cleanup;\n    }\n\n  /* The allocator provided by gcontext replaces the original one. */\n\n  dst_re = (pcre2_real_code *)PRIV(memctl_malloc)(blocksize,\n    (pcre2_memctl *)gcontext);\n  if (dst_re == NULL)\n    {\n    error = PCRE2_ERROR_NOMEMORY;\n    goto cleanup;\n    }\n\n  /* The new allocator must be preserved. */\n\n  memcpy(((uint8_t *)dst_re) + sizeof(pcre2_memctl),\n    src_bytes + sizeof(pcre2_memctl), blocksize - sizeof(pcre2_memctl));\n  if (dst_re->magic_number != MAGIC_NUMBER ||\n      dst_re->name_entry_size > MAX_NAME_SIZE + IMM2_SIZE + 1 ||\n      dst_re->name_count > MAX_NAME_COUNT)\n      {\n        error = PCRE2_ERROR_BADSERIALIZEDDATA;\n        goto cleanup;\n      }\n\n  /* At the moment only one table is supported. */\n\n  dst_re->tables = tables;\n  dst_re->executable_jit = NULL;\n  dst_re->flags |= PCRE2_DEREF_TABLES;\n\n  codes[i] = dst_re;\n  dst_re = NULL;\n  src_bytes += blocksize;\n  }\n\nreturn number_of_codes;\n\ncleanup:\nif (dst_re != NULL)\n  memctl->free(dst_re, memctl->memory_data);\nmemctl->free(tables, memctl->memory_data);\nfor (j = 0; j < i; j++)\n  {\n  memctl->free(codes[j], memctl->memory_data);\n  codes[j] = NULL;\n  }\nreturn error;\n}\n\n\n/*************************************************\n*    Get the number of serialized patterns       *\n*************************************************/\n\nPCRE2_EXP_DEFN int32_t PCRE2_CALL_CONVENTION\npcre2_serialize_get_number_of_codes(const uint8_t *bytes)\n{\nconst pcre2_serialized_data *data = (const pcre2_serialized_data *)bytes;\n\nif (data == NULL) return PCRE2_ERROR_NULL;\nif (data->magic != SERIALIZED_DATA_MAGIC) return PCRE2_ERROR_BADMAGIC;\nif (data->version != SERIALIZED_DATA_VERSION) return PCRE2_ERROR_BADMODE;\nif (data->config != SERIALIZED_DATA_CONFIG) return PCRE2_ERROR_BADMODE;\n\nreturn data->number_of_codes;\n}\n\n\n/*************************************************\n*            Free the allocated stream           *\n*************************************************/\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_serialize_free(uint8_t *bytes)\n{\nif (bytes != NULL)\n  {\n  pcre2_memctl *memctl = (pcre2_memctl *)(bytes - sizeof(pcre2_memctl));\n  memctl->free(memctl, memctl->memory_data);\n  }\n}\n\n/* End of pcre2_serialize.c */\n"
  },
  {
    "path": "src/pcre2_string_utils.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2018-2021 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains internal functions for comparing and finding the length\nof strings. These are used instead of strcmp() etc because the standard\nfunctions work only on 8-bit data. */\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/*************************************************\n*    Compare two zero-terminated PCRE2 strings   *\n*************************************************/\n\n/*\nArguments:\n  str1        first string\n  str2        second string\n\nReturns:      0, 1, or -1\n*/\n\nint\nPRIV(strcmp)(PCRE2_SPTR str1, PCRE2_SPTR str2)\n{\nPCRE2_UCHAR c1, c2;\nwhile (*str1 != '\\0' || *str2 != '\\0')\n  {\n  c1 = *str1++;\n  c2 = *str2++;\n  if (c1 != c2) return ((c1 > c2) << 1) - 1;\n  }\nreturn 0;\n}\n\n\n/*************************************************\n*  Compare zero-terminated PCRE2 & 8-bit strings *\n*************************************************/\n\n/* As the 8-bit string is almost always a literal, its type is specified as\nconst char *.\n\nArguments:\n  str1        first string\n  str2        second string\n\nReturns:      0, 1, or -1\n*/\n\nint\nPRIV(strcmp_c8)(PCRE2_SPTR str1, const char *str2)\n{\nPCRE2_UCHAR c1, c2;\nwhile (*str1 != '\\0' || *str2 != '\\0')\n  {\n  c1 = *str1++;\n  c2 = *str2++;\n  if (c1 != c2) return ((c1 > c2) << 1) - 1;\n  }\nreturn 0;\n}\n\n\n/*************************************************\n*    Compare two PCRE2 strings, given a length   *\n*************************************************/\n\n/*\nArguments:\n  str1        first string\n  str2        second string\n  len         the length\n\nReturns:      0, 1, or -1\n*/\n\nint\nPRIV(strncmp)(PCRE2_SPTR str1, PCRE2_SPTR str2, size_t len)\n{\nPCRE2_UCHAR c1, c2;\nfor (; len > 0; len--)\n  {\n  c1 = *str1++;\n  c2 = *str2++;\n  if (c1 != c2) return ((c1 > c2) << 1) - 1;\n  }\nreturn 0;\n}\n\n\n/*************************************************\n* Compare PCRE2 string to 8-bit string by length *\n*************************************************/\n\n/* As the 8-bit string is almost always a literal, its type is specified as\nconst char *.\n\nArguments:\n  str1        first string\n  str2        second string\n  len         the length\n\nReturns:      0, 1, or -1\n*/\n\nint\nPRIV(strncmp_c8)(PCRE2_SPTR str1, const char *str2, size_t len)\n{\nPCRE2_UCHAR c1, c2;\nfor (; len > 0; len--)\n  {\n  c1 = *str1++;\n  c2 = *str2++;\n  if (c1 != c2) return ((c1 > c2) << 1) - 1;\n  }\nreturn 0;\n}\n\n\n/*************************************************\n*        Find the length of a PCRE2 string       *\n*************************************************/\n\n/*\nArgument:    the string\nReturns:     the length\n*/\n\nPCRE2_SIZE\nPRIV(strlen)(PCRE2_SPTR str)\n{\nPCRE2_SIZE c = 0;\nwhile (*str++ != 0) c++;\nreturn c;\n}\n\n\n/*************************************************\n* Copy 8-bit 0-terminated string to PCRE2 string *\n*************************************************/\n\n/* Arguments:\n  str1     buffer to receive the string\n  str2     8-bit string to be copied\n\nReturns:   the number of code units used (excluding trailing zero)\n*/\n\nPCRE2_SIZE\nPRIV(strcpy_c8)(PCRE2_UCHAR *str1, const char *str2)\n{\nPCRE2_UCHAR *t = str1;\nwhile (*str2 != 0) *t++ = *str2++;\n*t = 0;\nreturn t - str1;\n}\n\n/* End of pcre2_string_utils.c */\n"
  },
  {
    "path": "src/pcre2_study.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains functions for scanning a compiled pattern and\ncollecting data (e.g. minimum matching length). */\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/* The maximum remembered capturing brackets minimum. */\n\n#define MAX_CACHE_BACKREF 128\n\n/* Set a bit in the starting code unit bit map. */\n\n#define SET_BIT(c) re->start_bitmap[(c)/8] |= (1u << ((c)&7))\n\n/* Returns from set_start_bits() */\n\nenum { SSB_FAIL, SSB_DONE, SSB_CONTINUE, SSB_UNKNOWN, SSB_TOODEEP };\n\n\n/*************************************************\n*   Find the minimum subject length for a group  *\n*************************************************/\n\n/* Scan a parenthesized group and compute the minimum length of subject that\nis needed to match it. This is a lower bound; it does not mean there is a\nstring of that length that matches. In UTF mode, the result is in characters\nrather than code units. The field in a compiled pattern for storing the minimum\nlength is 16-bits long (on the grounds that anything longer than that is\npathological), so we give up when we reach that amount. This also means that\ninteger overflow for really crazy patterns cannot happen.\n\nBackreference minimum lengths are cached to speed up multiple references. This\nfunction is called only when the highest back reference in the pattern is less\nthan or equal to MAX_CACHE_BACKREF, which is one less than the size of the\ncaching vector. The zeroth element contains the number of the highest set\nvalue.\n\nArguments:\n  re              compiled pattern block\n  code            pointer to start of group (the bracket)\n  startcode       pointer to start of the whole pattern's code\n  utf             UTF flag\n  recurses        chain of recurse_check to catch mutual recursion\n  countptr        pointer to call count (to catch over complexity)\n  backref_cache   vector for caching back references.\n\nThis function is no longer called when the pattern contains (*ACCEPT); however,\nthe old code for returning -1 is retained, just in case.\n\nReturns:   the minimum length\n           -1 \\C in UTF-8 mode\n              or (*ACCEPT)\n              or pattern too complicated\n           -2 internal error (missing capturing bracket)\n           -3 internal error (opcode not listed)\n*/\n\nstatic int\nfind_minlength(const pcre2_real_code *re, PCRE2_SPTR code,\n  PCRE2_SPTR startcode, BOOL utf, recurse_check *recurses, int *countptr,\n  int *backref_cache)\n{\nint length = -1;\nint branchlength = 0;\nint prev_cap_recno = -1;\nint prev_cap_d = 0;\nint prev_recurse_recno = -1;\nint prev_recurse_d = 0;\nuint32_t once_fudge = 0;\nBOOL had_recurse = FALSE;\nBOOL dupcapused = (re->flags & PCRE2_DUPCAPUSED) != 0;\nPCRE2_SPTR nextbranch = code + GET(code, 1);\nPCRE2_SPTR cc = code + 1 + LINK_SIZE;\nrecurse_check this_recurse;\n\n/* If this is a \"could be empty\" group, its minimum length is 0. */\n\nif (*code >= OP_SBRA && *code <= OP_SCOND) return 0;\n\n/* Skip over capturing bracket number */\n\nif (*code == OP_CBRA || *code == OP_CBRAPOS) cc += IMM2_SIZE;\n\n/* A large and/or complex regex can take too long to process. */\n\nif ((*countptr)++ > 1000) return -1;\n\n/* Scan along the opcodes for this branch. If we get to the end of the branch,\ncheck the length against that of the other branches. If the accumulated length\npasses 16-bits, reset to that value and skip the rest of the branch. */\n\nfor (;;)\n  {\n  int d, min, recno;\n  PCRE2_UCHAR op;\n  PCRE2_SPTR cs, ce;\n\n  if (branchlength >= (int)UINT16_MAX)\n    {\n    branchlength = UINT16_MAX;\n    cc = nextbranch;\n    }\n\n  op = *cc;\n  switch (op)\n    {\n    case OP_COND:\n    case OP_SCOND:\n\n    /* If there is only one branch in a condition, the implied branch has zero\n    length, so we don't add anything. This covers the DEFINE \"condition\"\n    automatically. If there are two branches we can treat it the same as any\n    other non-capturing subpattern. */\n\n    cs = cc + GET(cc, 1);\n    if (*cs != OP_ALT)\n      {\n      cc = cs + 1 + LINK_SIZE;\n      break;\n      }\n    goto PROCESS_NON_CAPTURE;\n\n    case OP_BRA:\n    /* There's a special case of OP_BRA, when it is wrapped round a repeated\n    OP_RECURSE. We'd like to process the latter at this level so that\n    remembering the value works for repeated cases. So we do nothing, but\n    set a fudge value to skip over the OP_KET after the recurse. */\n\n    if (cc[1+LINK_SIZE] == OP_RECURSE && cc[2*(1+LINK_SIZE)] == OP_KET)\n      {\n      once_fudge = 1 + LINK_SIZE;\n      cc += 1 + LINK_SIZE;\n      break;\n      }\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case OP_ONCE:\n    case OP_SCRIPT_RUN:\n    case OP_SBRA:\n    case OP_BRAPOS:\n    case OP_SBRAPOS:\n    PROCESS_NON_CAPTURE:\n    d = find_minlength(re, cc, startcode, utf, recurses, countptr,\n      backref_cache);\n    if (d < 0) return d;\n    branchlength += d;\n    do cc += GET(cc, 1); while (*cc == OP_ALT);\n    cc += 1 + LINK_SIZE;\n    break;\n\n    /* To save time for repeated capturing subpatterns, we remember the\n    length of the previous one. Unfortunately we can't do the same for\n    the unnumbered ones above. Nor can we do this if (?| is present in the\n    pattern because captures with the same number are not then identical. */\n\n    case OP_CBRA:\n    case OP_SCBRA:\n    case OP_CBRAPOS:\n    case OP_SCBRAPOS:\n    recno = (int)GET2(cc, 1+LINK_SIZE);\n    if (dupcapused || recno != prev_cap_recno)\n      {\n      prev_cap_recno = recno;\n      prev_cap_d = find_minlength(re, cc, startcode, utf, recurses, countptr,\n        backref_cache);\n      if (prev_cap_d < 0) return prev_cap_d;\n      }\n    branchlength += prev_cap_d;\n    do cc += GET(cc, 1); while (*cc == OP_ALT);\n    cc += 1 + LINK_SIZE;\n    break;\n\n    /* ACCEPT makes things far too complicated; we have to give up. In fact,\n    from 10.34 onwards, if a pattern contains (*ACCEPT), this function is not\n    used. However, leave the code in place, just in case. */\n\n    case OP_ACCEPT:\n    case OP_ASSERT_ACCEPT:\n    return -1;\n\n    /* Reached end of a branch; if it's a ket it is the end of a nested\n    call. If it's ALT it is an alternation in a nested call. If it is END it's\n    the end of the outer call. All can be handled by the same code. If the\n    length of any branch is zero, there is no need to scan any subsequent\n    branches. */\n\n    case OP_ALT:\n    case OP_KET:\n    case OP_KETRMAX:\n    case OP_KETRMIN:\n    case OP_KETRPOS:\n    case OP_END:\n    if (length < 0 || (!had_recurse && branchlength < length))\n      length = branchlength;\n    if (op != OP_ALT || length == 0) return length;\n    nextbranch = cc + GET(cc, 1);\n    cc += 1 + LINK_SIZE;\n    branchlength = 0;\n    had_recurse = FALSE;\n    break;\n\n    /* Skip over assertive subpatterns */\n\n    case OP_ASSERT:\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK:\n    case OP_ASSERTBACK_NOT:\n    case OP_ASSERT_NA:\n    case OP_ASSERT_SCS:\n    case OP_ASSERTBACK_NA:\n    do cc += GET(cc, 1); while (*cc == OP_ALT);\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    /* Skip over things that don't match chars */\n\n    case OP_REVERSE:\n    case OP_VREVERSE:\n    case OP_CREF:\n    case OP_DNCREF:\n    case OP_RREF:\n    case OP_DNRREF:\n    case OP_FALSE:\n    case OP_TRUE:\n    case OP_CALLOUT:\n    case OP_SOD:\n    case OP_SOM:\n    case OP_EOD:\n    case OP_EODN:\n    case OP_CIRC:\n    case OP_CIRCM:\n    case OP_DOLL:\n    case OP_DOLLM:\n    case OP_NOT_WORD_BOUNDARY:\n    case OP_WORD_BOUNDARY:\n    case OP_NOT_UCP_WORD_BOUNDARY:\n    case OP_UCP_WORD_BOUNDARY:\n    cc += PRIV(OP_lengths)[*cc];\n    break;\n\n    case OP_CALLOUT_STR:\n    cc += GET(cc, 1 + 2*LINK_SIZE);\n    break;\n\n    /* Skip over a subpattern that has a {0} or {0,x} quantifier */\n\n    case OP_BRAZERO:\n    case OP_BRAMINZERO:\n    case OP_BRAPOSZERO:\n    case OP_SKIPZERO:\n    cc += PRIV(OP_lengths)[*cc];\n    do cc += GET(cc, 1); while (*cc == OP_ALT);\n    cc += 1 + LINK_SIZE;\n    break;\n\n    /* Handle literal characters and + repetitions */\n\n    case OP_CHAR:\n    case OP_CHARI:\n    case OP_NOT:\n    case OP_NOTI:\n    case OP_PLUS:\n    case OP_PLUSI:\n    case OP_MINPLUS:\n    case OP_MINPLUSI:\n    case OP_POSPLUS:\n    case OP_POSPLUSI:\n    case OP_NOTPLUS:\n    case OP_NOTPLUSI:\n    case OP_NOTMINPLUS:\n    case OP_NOTMINPLUSI:\n    case OP_NOTPOSPLUS:\n    case OP_NOTPOSPLUSI:\n    branchlength++;\n    cc += 2;\n#ifdef SUPPORT_UNICODE\n    if (utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n    break;\n\n    case OP_TYPEPLUS:\n    case OP_TYPEMINPLUS:\n    case OP_TYPEPOSPLUS:\n    branchlength++;\n    cc += (cc[1] == OP_PROP || cc[1] == OP_NOTPROP)? 4 : 2;\n    break;\n\n    /* Handle exact repetitions. The count is already in characters, but we\n    may need to skip over a multibyte character in UTF mode.  */\n\n    case OP_EXACT:\n    case OP_EXACTI:\n    case OP_NOTEXACT:\n    case OP_NOTEXACTI:\n    branchlength += GET2(cc,1);\n    cc += 2 + IMM2_SIZE;\n#ifdef SUPPORT_UNICODE\n    if (utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n    break;\n\n    case OP_TYPEEXACT:\n    branchlength += GET2(cc,1);\n    cc += 2 + IMM2_SIZE + ((cc[1 + IMM2_SIZE] == OP_PROP\n      || cc[1 + IMM2_SIZE] == OP_NOTPROP)? 2 : 0);\n    break;\n\n    /* Handle single-char non-literal matchers */\n\n    case OP_PROP:\n    case OP_NOTPROP:\n    cc += 2;\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case OP_NOT_DIGIT:\n    case OP_DIGIT:\n    case OP_NOT_WHITESPACE:\n    case OP_WHITESPACE:\n    case OP_NOT_WORDCHAR:\n    case OP_WORDCHAR:\n    case OP_ANY:\n    case OP_ALLANY:\n    case OP_EXTUNI:\n    case OP_HSPACE:\n    case OP_NOT_HSPACE:\n    case OP_VSPACE:\n    case OP_NOT_VSPACE:\n    branchlength++;\n    cc++;\n    break;\n\n    /* \"Any newline\" might match two characters, but it also might match just\n    one. */\n\n    case OP_ANYNL:\n    branchlength += 1;\n    cc++;\n    break;\n\n    /* The single-byte matcher means we can't proceed in UTF mode. (In\n    non-UTF mode \\C will actually be turned into OP_ALLANY, so won't ever\n    appear, but leave the code, just in case.) */\n\n    case OP_ANYBYTE:\n#ifdef SUPPORT_UNICODE\n    if (utf) return -1;\n#endif\n    branchlength++;\n    cc++;\n    break;\n\n    /* For repeated character types, we have to test for \\p and \\P, which have\n    an extra two bytes of parameters. */\n\n    case OP_TYPESTAR:\n    case OP_TYPEMINSTAR:\n    case OP_TYPEQUERY:\n    case OP_TYPEMINQUERY:\n    case OP_TYPEPOSSTAR:\n    case OP_TYPEPOSQUERY:\n    if (cc[1] == OP_PROP || cc[1] == OP_NOTPROP) cc += 2;\n    cc += PRIV(OP_lengths)[op];\n    break;\n\n    case OP_TYPEUPTO:\n    case OP_TYPEMINUPTO:\n    case OP_TYPEPOSUPTO:\n    if (cc[1 + IMM2_SIZE] == OP_PROP\n      || cc[1 + IMM2_SIZE] == OP_NOTPROP) cc += 2;\n    cc += PRIV(OP_lengths)[op];\n    break;\n\n    /* Check a class for variable quantification */\n\n    case OP_CLASS:\n    case OP_NCLASS:\n#ifdef SUPPORT_WIDE_CHARS\n    case OP_XCLASS:\n    case OP_ECLASS:\n    /* The original code caused an unsigned overflow in 64 bit systems,\n    so now we use a conditional statement. */\n    if (op == OP_XCLASS || op == OP_ECLASS)\n      cc += GET(cc, 1);\n    else\n#endif\n      cc += PRIV(OP_lengths)[OP_CLASS];\n\n    switch (*cc)\n      {\n      case OP_CRPLUS:\n      case OP_CRMINPLUS:\n      case OP_CRPOSPLUS:\n      branchlength++;\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      case OP_CRSTAR:\n      case OP_CRMINSTAR:\n      case OP_CRQUERY:\n      case OP_CRMINQUERY:\n      case OP_CRPOSSTAR:\n      case OP_CRPOSQUERY:\n      cc++;\n      break;\n\n      case OP_CRRANGE:\n      case OP_CRMINRANGE:\n      case OP_CRPOSRANGE:\n      branchlength += GET2(cc,1);\n      cc += 1 + 2 * IMM2_SIZE;\n      break;\n\n      default:\n      branchlength++;\n      break;\n      }\n    break;\n\n    /* Backreferences and subroutine calls (OP_RECURSE) are treated in the same\n    way: we find the minimum length for the subpattern. A recursion\n    (backreference or subroutine) causes an a flag to be set that causes the\n    length of this branch to be ignored. The logic is that a recursion can only\n    make sense if there is another alternative that stops the recursing. That\n    will provide the minimum length (when no recursion happens).\n\n    If PCRE2_MATCH_UNSET_BACKREF is set, a backreference to an unset bracket\n    matches an empty string (by default it causes a matching failure), so in\n    that case we must set the minimum length to zero.\n\n    For backreferenes, if duplicate numbers are present in the pattern we check\n    for a reference to a duplicate. If it is, we don't know which version will\n    be referenced, so we have to set the minimum length to zero. */\n\n    /* Duplicate named pattern back reference. */\n\n    case OP_DNREF:\n    case OP_DNREFI:\n    if (!dupcapused && (re->overall_options & PCRE2_MATCH_UNSET_BACKREF) == 0)\n      {\n      int count = GET2(cc, 1+IMM2_SIZE);\n      PCRE2_SPTR slot =\n        (PCRE2_SPTR)((const uint8_t *)re + sizeof(pcre2_real_code)) +\n          GET2(cc, 1) * re->name_entry_size;\n\n      d = INT_MAX;\n\n      /* Scan all groups with the same name; find the shortest. */\n\n      while (count-- > 0)\n        {\n        int dd, i;\n        recno = GET2(slot, 0);\n\n        if (recno <= backref_cache[0] && backref_cache[recno] >= 0)\n          dd = backref_cache[recno];\n        else\n          {\n          ce = cs = PRIV(find_bracket)(startcode, utf, recno);\n          if (cs == NULL) return -2;\n          do ce += GET(ce, 1); while (*ce == OP_ALT);\n\n          dd = 0;\n          if (!dupcapused || PRIV(find_bracket)(ce, utf, recno) == NULL)\n            {\n            if (cc > cs && cc < ce)    /* Simple recursion */\n              {\n              had_recurse = TRUE;\n              }\n            else\n              {\n              recurse_check *r = recurses;\n              for (r = recurses; r != NULL; r = r->prev)\n                if (r->group == cs) break;\n              if (r != NULL)           /* Mutual recursion */\n                {\n                had_recurse = TRUE;\n                }\n              else\n                {\n                this_recurse.prev = recurses;  /* No recursion */\n                this_recurse.group = cs;\n                dd = find_minlength(re, cs, startcode, utf, &this_recurse,\n                  countptr, backref_cache);\n                if (dd < 0) return dd;\n                }\n              }\n            }\n\n          backref_cache[recno] = dd;\n          for (i = backref_cache[0] + 1; i < recno; i++) backref_cache[i] = -1;\n          backref_cache[0] = recno;\n          }\n\n        if (dd < d) d = dd;\n        if (d <= 0) break;    /* No point looking at any more */\n        slot += re->name_entry_size;\n        }\n      }\n    else d = 0;\n    cc += PRIV(OP_lengths)[*cc];\n    goto REPEAT_BACK_REFERENCE;\n\n    /* Single back reference by number. References by name are converted to by\n    number when there is no duplication. */\n\n    case OP_REF:\n    case OP_REFI:\n    recno = GET2(cc, 1);\n    if (recno <= backref_cache[0] && backref_cache[recno] >= 0)\n      d = backref_cache[recno];\n    else\n      {\n      int i;\n      d = 0;\n\n      if ((re->overall_options & PCRE2_MATCH_UNSET_BACKREF) == 0)\n        {\n        ce = cs = PRIV(find_bracket)(startcode, utf, recno);\n        if (cs == NULL) return -2;\n        do ce += GET(ce, 1); while (*ce == OP_ALT);\n\n        if (!dupcapused || PRIV(find_bracket)(ce, utf, recno) == NULL)\n          {\n          if (cc > cs && cc < ce)    /* Simple recursion */\n            {\n            had_recurse = TRUE;\n            }\n          else\n            {\n            recurse_check *r = recurses;\n            for (r = recurses; r != NULL; r = r->prev) if (r->group == cs) break;\n            if (r != NULL)           /* Mutual recursion */\n              {\n              had_recurse = TRUE;\n              }\n            else                     /* No recursion */\n              {\n              this_recurse.prev = recurses;\n              this_recurse.group = cs;\n              d = find_minlength(re, cs, startcode, utf, &this_recurse, countptr,\n                backref_cache);\n              if (d < 0) return d;\n              }\n            }\n          }\n        }\n\n      backref_cache[recno] = d;\n      for (i = backref_cache[0] + 1; i < recno; i++) backref_cache[i] = -1;\n      backref_cache[0] = recno;\n      }\n\n    cc += PRIV(OP_lengths)[*cc];\n\n    /* Handle repeated back references */\n\n    REPEAT_BACK_REFERENCE:\n    switch (*cc)\n      {\n      case OP_CRSTAR:\n      case OP_CRMINSTAR:\n      case OP_CRQUERY:\n      case OP_CRMINQUERY:\n      case OP_CRPOSSTAR:\n      case OP_CRPOSQUERY:\n      min = 0;\n      cc++;\n      break;\n\n      case OP_CRPLUS:\n      case OP_CRMINPLUS:\n      case OP_CRPOSPLUS:\n      min = 1;\n      cc++;\n      break;\n\n      case OP_CRRANGE:\n      case OP_CRMINRANGE:\n      case OP_CRPOSRANGE:\n      min = GET2(cc, 1);\n      cc += 1 + 2 * IMM2_SIZE;\n      break;\n\n      default:\n      min = 1;\n      break;\n      }\n\n    /* Take care not to overflow: (1) min and d are ints, so check that their\n    product is not greater than INT_MAX. (2) branchlength is limited to\n    UINT16_MAX (checked at the top of the loop). */\n\n    if ((d > 0 && (INT_MAX/d) < min) || (int)UINT16_MAX - branchlength < min*d)\n      branchlength = UINT16_MAX;\n    else branchlength += min * d;\n    break;\n\n    /* Recursion always refers to the first occurrence of a subpattern with a\n    given number. Therefore, we can always make use of caching, even when the\n    pattern contains multiple subpatterns with the same number. */\n\n    case OP_RECURSE:\n    cs = ce = startcode + GET(cc, 1);\n    recno = GET2(cs, 1+LINK_SIZE);\n    if (recno == prev_recurse_recno)\n      {\n      branchlength += prev_recurse_d;\n      }\n    else\n      {\n      do ce += GET(ce, 1); while (*ce == OP_ALT);\n      if (cc > cs && cc < ce)    /* Simple recursion */\n        had_recurse = TRUE;\n      else\n        {\n        recurse_check *r = recurses;\n        for (r = recurses; r != NULL; r = r->prev) if (r->group == cs) break;\n        if (r != NULL)          /* Mutual recursion */\n          had_recurse = TRUE;\n        else\n          {\n          this_recurse.prev = recurses;\n          this_recurse.group = cs;\n          prev_recurse_d = find_minlength(re, cs, startcode, utf, &this_recurse,\n            countptr, backref_cache);\n          if (prev_recurse_d < 0) return prev_recurse_d;\n          prev_recurse_recno = recno;\n          branchlength += prev_recurse_d;\n          }\n        }\n      }\n    cc += 1 + LINK_SIZE + once_fudge;\n    once_fudge = 0;\n    break;\n\n    /* Anything else does not or need not match a character. We can get the\n    item's length from the table, but for those that can match zero occurrences\n    of a character, we must take special action for UTF-8 characters. As it\n    happens, the \"NOT\" versions of these opcodes are used at present only for\n    ASCII characters, so they could be omitted from this list. However, in\n    future that may change, so we include them here so as not to leave a\n    gotcha for a future maintainer. */\n\n    case OP_UPTO:\n    case OP_UPTOI:\n    case OP_NOTUPTO:\n    case OP_NOTUPTOI:\n    case OP_MINUPTO:\n    case OP_MINUPTOI:\n    case OP_NOTMINUPTO:\n    case OP_NOTMINUPTOI:\n    case OP_POSUPTO:\n    case OP_POSUPTOI:\n    case OP_NOTPOSUPTO:\n    case OP_NOTPOSUPTOI:\n\n    case OP_STAR:\n    case OP_STARI:\n    case OP_NOTSTAR:\n    case OP_NOTSTARI:\n    case OP_MINSTAR:\n    case OP_MINSTARI:\n    case OP_NOTMINSTAR:\n    case OP_NOTMINSTARI:\n    case OP_POSSTAR:\n    case OP_POSSTARI:\n    case OP_NOTPOSSTAR:\n    case OP_NOTPOSSTARI:\n\n    case OP_QUERY:\n    case OP_QUERYI:\n    case OP_NOTQUERY:\n    case OP_NOTQUERYI:\n    case OP_MINQUERY:\n    case OP_MINQUERYI:\n    case OP_NOTMINQUERY:\n    case OP_NOTMINQUERYI:\n    case OP_POSQUERY:\n    case OP_POSQUERYI:\n    case OP_NOTPOSQUERY:\n    case OP_NOTPOSQUERYI:\n\n    cc += PRIV(OP_lengths)[op];\n#ifdef SUPPORT_UNICODE\n    if (utf && HAS_EXTRALEN(cc[-1])) cc += GET_EXTRALEN(cc[-1]);\n#endif\n    break;\n\n    /* Skip these, but we need to add in the name length. */\n\n    case OP_MARK:\n    case OP_COMMIT_ARG:\n    case OP_PRUNE_ARG:\n    case OP_SKIP_ARG:\n    case OP_THEN_ARG:\n    cc += PRIV(OP_lengths)[op] + cc[1];\n    break;\n\n    /* The remaining opcodes are just skipped over. */\n\n    case OP_CLOSE:\n    case OP_COMMIT:\n    case OP_FAIL:\n    case OP_PRUNE:\n    case OP_SET_SOM:\n    case OP_SKIP:\n    case OP_THEN:\n    cc += PRIV(OP_lengths)[op];\n    break;\n\n    /* This should not occur: we list all opcodes explicitly so that when\n    new ones get added they are properly considered. */\n\n    /* LCOV_EXCL_START */\n    default:\n    PCRE2_DEBUG_UNREACHABLE();\n    return -3;\n    /* LCOV_EXCL_STOP */\n    }\n  }\n\n/* LCOV_EXCL_START */\nPCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */\nreturn -3;                 /* Avoid compiler warnings */\n/* LCOV_EXCL_STOP */\n}\n\n\n\n/*************************************************\n*      Set a bit and maybe its alternate case    *\n*************************************************/\n\n/* Given a character, set its first code unit's bit in the table, and also the\ncorresponding bit for the other version of a letter if we are caseless.\n\nArguments:\n  re            points to the regex block\n  p             points to the first code unit of the character\n  caseless      TRUE if caseless\n  utf           TRUE for UTF mode\n  ucp           TRUE for UCP mode\n\nReturns:        pointer after the character\n*/\n\nstatic PCRE2_SPTR\nset_table_bit(pcre2_real_code *re, PCRE2_SPTR p, BOOL caseless, BOOL utf,\n  BOOL ucp)\n{\nuint32_t c = *p++;   /* First code unit */\n\n(void)utf;           /* Stop compiler warnings when UTF not supported */\n(void)ucp;\n\n/* In 16-bit and 32-bit modes, code units greater than 0xff set the bit for\n0xff. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\nif (c > 0xff) SET_BIT(0xff); else\n#endif\n\nSET_BIT(c);\n\n/* In UTF-8 or UTF-16 mode, pick up the remaining code units in order to find\nthe end of the character, even when caseless. */\n\n#ifdef SUPPORT_UNICODE\nif (utf)\n  {\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  if (c >= 0xc0) GETUTF8INC(c, p);\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n  if ((c & 0xfc00) == 0xd800) GETUTF16INC(c, p);\n#endif\n  }\n#endif  /* SUPPORT_UNICODE */\n\n/* If caseless, handle the other case of the character. */\n\nif (caseless)\n  {\n#ifdef SUPPORT_UNICODE\n  if (utf || ucp)\n    {\n    c = UCD_OTHERCASE(c);\n#if PCRE2_CODE_UNIT_WIDTH == 8\n    if (utf)\n      {\n      PCRE2_UCHAR buff[6];\n      (void)PRIV(ord2utf)(c, buff);\n      SET_BIT(buff[0]);\n      }\n    else if (c < 256) SET_BIT(c);\n#else  /* 16-bit or 32-bit mode */\n    if (c > 0xff) SET_BIT(0xff); else SET_BIT(c);\n#endif\n    }\n\n  else\n#endif  /* SUPPORT_UNICODE */\n\n  /* Not UTF or UCP */\n\n  if (MAX_255(c)) SET_BIT(re->tables[fcc_offset + c]);\n  }\n\nreturn p;\n}\n\n\n\n/*************************************************\n*     Set bits for a positive character type     *\n*************************************************/\n\n/* This function sets starting bits for a character type. In UTF-8 mode, we can\nonly do a direct setting for bytes less than 128, as otherwise there can be\nconfusion with bytes in the middle of UTF-8 characters. In a \"traditional\"\nenvironment, the tables will only recognize ASCII characters anyway, but in at\nleast one Windows environment, some higher bytes bits were set in the tables.\nSo we deal with that case by considering the UTF-8 encoding.\n\nArguments:\n  re             the regex block\n  cbit type      the type of character wanted\n  table_limit    32 for non-UTF-8; 16 for UTF-8\n\nReturns:         nothing\n*/\n\nstatic void\nset_type_bits(pcre2_real_code *re, int cbit_type, unsigned int table_limit)\n{\nuint32_t c;\nfor (c = 0; c < table_limit; c++)\n  re->start_bitmap[c] |= re->tables[c+cbits_offset+cbit_type];\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\nif (table_limit == 32) return;\nfor (c = 128; c < 256; c++)\n  {\n  if ((re->tables[cbits_offset + c/8] & (1u << (c&7))) != 0)\n    {\n    PCRE2_UCHAR buff[6];\n    (void)PRIV(ord2utf)(c, buff);\n    SET_BIT(buff[0]);\n    }\n  }\n#endif  /* UTF-8 */\n}\n\n\n/*************************************************\n*     Set bits for a negative character type     *\n*************************************************/\n\n/* This function sets starting bits for a negative character type such as \\D.\nIn UTF-8 mode, we can only do a direct setting for bytes less than 128, as\notherwise there can be confusion with bytes in the middle of UTF-8 characters.\nUnlike in the positive case, where we can set appropriate starting bits for\nspecific high-valued UTF-8 characters, in this case we have to set the bits for\nall high-valued characters. The lowest is 0xc2, but we overkill by starting at\n0xc0 (192) for simplicity.\n\nArguments:\n  re             the regex block\n  cbit type      the type of character wanted\n  table_limit    32 for non-UTF-8; 16 for UTF-8\n\nReturns:         nothing\n*/\n\nstatic void\nset_nottype_bits(pcre2_real_code *re, int cbit_type, unsigned int table_limit)\n{\nuint32_t c;\nfor (c = 0; c < table_limit; c++)\n  re->start_bitmap[c] |= (uint8_t)(~(re->tables[c+cbits_offset+cbit_type]));\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\nif (table_limit != 32) for (c = 24; c < 32; c++) re->start_bitmap[c] = 0xff;\n#endif\n}\n\n\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n/*************************************************\n*     Set starting bits for a character list.    *\n*************************************************/\n\n/* This function sets starting bits for a character list. It enumerates\nall characters and character ranges in the character list, and sets\nthe starting bits accordingly.\n\nArguments:\n  code           pointer to the code\n  start_bitmap   pointer to the starting bitmap\n\nReturns:         nothing\n*/\nstatic void\nstudy_char_list(PCRE2_SPTR code, uint8_t *start_bitmap,\n  const uint8_t *char_lists_end)\n{\nuint32_t type, list_ind;\nuint32_t char_list_add = XCL_CHAR_LIST_LOW_16_ADD;\nuint32_t range_start = ~(uint32_t)0, range_end = 0;\nconst uint8_t *next_char;\nPCRE2_UCHAR start_buffer[6], end_buffer[6];\nPCRE2_UCHAR start, end;\n\n/* Only needed in 8-bit mode at the moment. */\ntype = (uint32_t)(code[0] << 8) | code[1];\ncode += 2;\n\n/* Align characters. */\nnext_char = char_lists_end - (GET(code, 0) << 1);\ntype &= XCL_TYPE_MASK;\nlist_ind = 0;\n\nif ((type & XCL_BEGIN_WITH_RANGE) != 0)\n  range_start = XCL_CHAR_LIST_LOW_16_START;\n\nwhile (type > 0)\n  {\n  uint32_t item_count = type & XCL_ITEM_COUNT_MASK;\n\n  if (item_count == XCL_ITEM_COUNT_MASK)\n    {\n    if (list_ind <= 1)\n      {\n      item_count = *(const uint16_t*)next_char;\n      next_char += 2;\n      }\n    else\n      {\n      item_count = *(const uint32_t*)next_char;\n      next_char += 4;\n      }\n    }\n\n  while (item_count > 0)\n    {\n    if (list_ind <= 1)\n      {\n      range_end = *(const uint16_t*)next_char;\n      next_char += 2;\n      }\n    else\n      {\n      range_end = *(const uint32_t*)next_char;\n      next_char += 4;\n      }\n\n    if ((range_end & XCL_CHAR_END) != 0)\n      {\n      range_end = char_list_add + (range_end >> XCL_CHAR_SHIFT);\n\n      PRIV(ord2utf)(range_end, end_buffer);\n      end = end_buffer[0];\n\n      if (range_start < range_end)\n        {\n        PRIV(ord2utf)(range_start, start_buffer);\n        for (start = start_buffer[0]; start <= end; start++)\n          start_bitmap[start / 8] |= (1u << (start & 7));\n        }\n      else\n        start_bitmap[end / 8] |= (1u << (end & 7));\n\n      range_start = ~(uint32_t)0;\n      }\n    else\n      range_start = char_list_add + (range_end >> XCL_CHAR_SHIFT);\n\n    item_count--;\n    }\n\n  list_ind++;\n  type >>= XCL_TYPE_BIT_LEN;\n\n  if (range_start == ~(uint32_t)0)\n    {\n    if ((type & XCL_BEGIN_WITH_RANGE) != 0)\n      {\n      /* In 8 bit mode XCL_CHAR_LIST_HIGH_32_START is not possible. */\n      if (list_ind == 1) range_start = XCL_CHAR_LIST_HIGH_16_START;\n      else range_start = XCL_CHAR_LIST_LOW_32_START;\n      }\n    }\n  else if ((type & XCL_BEGIN_WITH_RANGE) == 0)\n    {\n    PRIV(ord2utf)(range_start, start_buffer);\n\n    /* In 8 bit mode XCL_CHAR_LIST_LOW_32_END and\n    XCL_CHAR_LIST_HIGH_32_END are not possible. */\n    if (list_ind == 1) range_end = XCL_CHAR_LIST_LOW_16_END;\n    else range_end = XCL_CHAR_LIST_HIGH_16_END;\n\n    PRIV(ord2utf)(range_end, end_buffer);\n    end = end_buffer[0];\n\n    for (start = start_buffer[0]; start <= end; start++)\n      start_bitmap[start / 8] |= (1u << (start & 7));\n\n    range_start = ~(uint32_t)0;\n    }\n\n  /* In 8 bit mode XCL_CHAR_LIST_HIGH_32_ADD is not possible. */\n  if (list_ind == 1) char_list_add = XCL_CHAR_LIST_HIGH_16_ADD;\n  else char_list_add = XCL_CHAR_LIST_LOW_32_ADD;\n  }\n}\n#endif\n\n\n\n/*************************************************\n*      Create bitmap of starting code units      *\n*************************************************/\n\n/* This function scans a compiled unanchored expression recursively and\nattempts to build a bitmap of the set of possible starting code units whose\nvalues are less than 256. In 16-bit and 32-bit mode, values above 255 all cause\nthe 255 bit to be set. When calling set[_not]_type_bits() in UTF-8 (sic) mode\nwe pass a value of 16 rather than 32 as the final argument. (See comments in\nthose functions for the reason.)\n\nThe SSB_CONTINUE return is useful for parenthesized groups in patterns such as\n(a*)b where the group provides some optional starting code units but scanning\nmust continue at the outer level to find at least one mandatory code unit. At\nthe outermost level, this function fails unless the result is SSB_DONE.\n\nWe restrict recursion (for nested groups) to 1000 to avoid stack overflow\nissues.\n\nArguments:\n  re           points to the compiled regex block\n  code         points to an expression\n  utf          TRUE if in UTF mode\n  ucp          TRUE if in UCP mode\n  depthptr     pointer to recurse depth\n\nReturns:       SSB_FAIL     => Failed to find any starting code units\n               SSB_DONE     => Found mandatory starting code units\n               SSB_CONTINUE => Found optional starting code units\n               SSB_UNKNOWN  => Hit an unrecognized opcode\n               SSB_TOODEEP  => Recursion is too deep\n*/\n\nstatic int\nset_start_bits(pcre2_real_code *re, PCRE2_SPTR code, BOOL utf, BOOL ucp,\n  int *depthptr)\n{\nuint32_t c;\nint yield = SSB_DONE;\n\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\nint table_limit = utf? 16:32;\n#else\nint table_limit = 32;\n#endif\n\n*depthptr += 1;\nif (*depthptr > 1000) return SSB_TOODEEP;\n\ndo\n  {\n  BOOL try_next = TRUE;\n  PCRE2_SPTR tcode = code + 1 + LINK_SIZE;\n\n  if (*code == OP_CBRA || *code == OP_SCBRA ||\n      *code == OP_CBRAPOS || *code == OP_SCBRAPOS) tcode += IMM2_SIZE;\n\n  while (try_next)    /* Loop for items in this branch */\n    {\n    int rc;\n    PCRE2_SPTR ncode;\n    const uint8_t *classmap = NULL;\n#ifdef SUPPORT_WIDE_CHARS\n    PCRE2_UCHAR xclassflags;\n#endif\n\n    switch(*tcode)\n      {\n      /* If we reach something we don't understand, it means a new opcode has\n      been created that hasn't been added to this function. Hopefully this\n      problem will be discovered during testing. */\n\n      default:\n      return SSB_UNKNOWN;\n\n      /* Fail for a valid opcode that implies no starting bits. */\n\n      case OP_ACCEPT:\n      case OP_ASSERT_ACCEPT:\n      case OP_ALLANY:\n      case OP_ANY:\n      case OP_ANYBYTE:\n      case OP_CIRCM:\n      case OP_CLOSE:\n      case OP_COMMIT:\n      case OP_COMMIT_ARG:\n      case OP_COND:\n      case OP_CREF:\n      case OP_FALSE:\n      case OP_TRUE:\n      case OP_DNCREF:\n      case OP_DNREF:\n      case OP_DNREFI:\n      case OP_DNRREF:\n      case OP_DOLL:\n      case OP_DOLLM:\n      case OP_END:\n      case OP_EOD:\n      case OP_EODN:\n      case OP_EXTUNI:\n      case OP_FAIL:\n      case OP_MARK:\n      case OP_NOT:\n      case OP_NOTEXACT:\n      case OP_NOTEXACTI:\n      case OP_NOTI:\n      case OP_NOTMINPLUS:\n      case OP_NOTMINPLUSI:\n      case OP_NOTMINQUERY:\n      case OP_NOTMINQUERYI:\n      case OP_NOTMINSTAR:\n      case OP_NOTMINSTARI:\n      case OP_NOTMINUPTO:\n      case OP_NOTMINUPTOI:\n      case OP_NOTPLUS:\n      case OP_NOTPLUSI:\n      case OP_NOTPOSPLUS:\n      case OP_NOTPOSPLUSI:\n      case OP_NOTPOSQUERY:\n      case OP_NOTPOSQUERYI:\n      case OP_NOTPOSSTAR:\n      case OP_NOTPOSSTARI:\n      case OP_NOTPOSUPTO:\n      case OP_NOTPOSUPTOI:\n      case OP_NOTPROP:\n      case OP_NOTQUERY:\n      case OP_NOTQUERYI:\n      case OP_NOTSTAR:\n      case OP_NOTSTARI:\n      case OP_NOTUPTO:\n      case OP_NOTUPTOI:\n      case OP_NOT_HSPACE:\n      case OP_NOT_VSPACE:\n      case OP_PRUNE:\n      case OP_PRUNE_ARG:\n      case OP_RECURSE:\n      case OP_REF:\n      case OP_REFI:\n      case OP_REVERSE:\n      case OP_VREVERSE:\n      case OP_RREF:\n      case OP_SCOND:\n      case OP_SET_SOM:\n      case OP_SKIP:\n      case OP_SKIP_ARG:\n      case OP_SOD:\n      case OP_SOM:\n      case OP_THEN:\n      case OP_THEN_ARG:\n      return SSB_FAIL;\n\n      /* OP_CIRC happens only at the start of an anchored branch (multiline ^\n      uses OP_CIRCM). Skip over it. */\n\n      case OP_CIRC:\n      tcode += PRIV(OP_lengths)[OP_CIRC];\n      break;\n\n      /* A \"real\" property test implies no starting bits, but the fake property\n      PT_CLIST identifies a list of characters. These lists are short, as they\n      are used for characters with more than one \"other case\", so there is no\n      point in recognizing them for OP_NOTPROP. */\n\n      case OP_PROP:\n      if (tcode[1] != PT_CLIST) return SSB_FAIL;\n        {\n        const uint32_t *p = PRIV(ucd_caseless_sets) + tcode[2];\n        while ((c = *p++) < NOTACHAR)\n          {\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n          if (utf)\n            {\n            PCRE2_UCHAR buff[6];\n            (void)PRIV(ord2utf)(c, buff);\n            c = buff[0];\n            }\n#endif\n          if (c > 0xff) SET_BIT(0xff); else SET_BIT(c);\n          }\n        }\n      try_next = FALSE;\n      break;\n\n      /* We can ignore word boundary tests. */\n\n      case OP_WORD_BOUNDARY:\n      case OP_NOT_WORD_BOUNDARY:\n      case OP_UCP_WORD_BOUNDARY:\n      case OP_NOT_UCP_WORD_BOUNDARY:\n      tcode++;\n      break;\n\n      /* For a positive lookahead assertion, inspect what immediately follows,\n      ignoring intermediate assertions and callouts. If the next item is one\n      that sets a mandatory character, skip this assertion. Otherwise, treat it\n      the same as other bracket groups. */\n\n      case OP_ASSERT:\n      case OP_ASSERT_NA:\n      ncode = tcode + GET(tcode, 1);\n      while (*ncode == OP_ALT) ncode += GET(ncode, 1);\n      ncode += 1 + LINK_SIZE;\n\n      /* Skip irrelevant items */\n\n      for (BOOL done = FALSE; !done;)\n        {\n        switch (*ncode)\n          {\n          case OP_ASSERT:\n          case OP_ASSERT_NOT:\n          case OP_ASSERTBACK:\n          case OP_ASSERTBACK_NOT:\n          case OP_ASSERT_NA:\n          case OP_ASSERTBACK_NA:\n          case OP_ASSERT_SCS:\n          ncode += GET(ncode, 1);\n          while (*ncode == OP_ALT) ncode += GET(ncode, 1);\n          ncode += 1 + LINK_SIZE;\n          break;\n\n          case OP_WORD_BOUNDARY:\n          case OP_NOT_WORD_BOUNDARY:\n          case OP_UCP_WORD_BOUNDARY:\n          case OP_NOT_UCP_WORD_BOUNDARY:\n          ncode++;\n          break;\n\n          case OP_CALLOUT:\n          ncode += PRIV(OP_lengths)[OP_CALLOUT];\n          break;\n\n          case OP_CALLOUT_STR:\n          ncode += GET(ncode, 1 + 2*LINK_SIZE);\n          break;\n\n          default:\n          done = TRUE;\n          break;\n          }\n        }\n\n      /* Now check the next significant item. */\n\n      switch(*ncode)\n        {\n        default:\n        break;\n\n        case OP_PROP:\n        if (ncode[1] != PT_CLIST) break;\n        PCRE2_FALLTHROUGH /* Fall through */\n        case OP_ANYNL:\n        case OP_CHAR:\n        case OP_CHARI:\n        case OP_EXACT:\n        case OP_EXACTI:\n        case OP_HSPACE:\n        case OP_MINPLUS:\n        case OP_MINPLUSI:\n        case OP_PLUS:\n        case OP_PLUSI:\n        case OP_POSPLUS:\n        case OP_POSPLUSI:\n        case OP_VSPACE:\n        /* Note that these types will only be present in non-UCP mode. */\n        case OP_DIGIT:\n        case OP_NOT_DIGIT:\n        case OP_WORDCHAR:\n        case OP_NOT_WORDCHAR:\n        case OP_WHITESPACE:\n        case OP_NOT_WHITESPACE:\n        tcode = ncode;\n        continue;   /* With the following significant opcode */\n        }\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      /* For a group bracket or a positive assertion without an immediately\n      following mandatory setting, recurse to set bits from within the\n      subpattern. If it can't find anything, we have to give up. If it finds\n      some mandatory character(s), we are done for this branch. Otherwise,\n      carry on scanning after the subpattern. */\n\n      case OP_BRA:\n      case OP_SBRA:\n      case OP_CBRA:\n      case OP_SCBRA:\n      case OP_BRAPOS:\n      case OP_SBRAPOS:\n      case OP_CBRAPOS:\n      case OP_SCBRAPOS:\n      case OP_ONCE:\n      case OP_SCRIPT_RUN:\n      rc = set_start_bits(re, tcode, utf, ucp, depthptr);\n      if (rc == SSB_DONE)\n        {\n        try_next = FALSE;\n        }\n      else if (rc == SSB_CONTINUE)\n        {\n        do tcode += GET(tcode, 1); while (*tcode == OP_ALT);\n        tcode += 1 + LINK_SIZE;\n        }\n      else return rc;   /* FAIL, UNKNOWN, or TOODEEP */\n      break;\n\n      /* If we hit ALT or KET, it means we haven't found anything mandatory in\n      this branch, though we might have found something optional. For ALT, we\n      continue with the next alternative, but we have to arrange that the final\n      result from subpattern is SSB_CONTINUE rather than SSB_DONE. For KET,\n      return SSB_CONTINUE: if this is the top level, that indicates failure,\n      but after a nested subpattern, it causes scanning to continue. */\n\n      case OP_ALT:\n      yield = SSB_CONTINUE;\n      try_next = FALSE;\n      break;\n\n      case OP_KET:\n      case OP_KETRMAX:\n      case OP_KETRMIN:\n      case OP_KETRPOS:\n      return SSB_CONTINUE;\n\n      /* Skip over callout */\n\n      case OP_CALLOUT:\n      tcode += PRIV(OP_lengths)[OP_CALLOUT];\n      break;\n\n      case OP_CALLOUT_STR:\n      tcode += GET(tcode, 1 + 2*LINK_SIZE);\n      break;\n\n      /* Skip over lookbehind, negative lookahead, and scan substring\n      assertions */\n\n      case OP_ASSERT_NOT:\n      case OP_ASSERTBACK:\n      case OP_ASSERTBACK_NOT:\n      case OP_ASSERTBACK_NA:\n      case OP_ASSERT_SCS:\n      do tcode += GET(tcode, 1); while (*tcode == OP_ALT);\n      tcode += 1 + LINK_SIZE;\n      break;\n\n      /* BRAZERO does the bracket, but carries on. */\n\n      case OP_BRAZERO:\n      case OP_BRAMINZERO:\n      case OP_BRAPOSZERO:\n      rc = set_start_bits(re, ++tcode, utf, ucp, depthptr);\n      if (rc == SSB_FAIL || rc == SSB_UNKNOWN || rc == SSB_TOODEEP) return rc;\n      do tcode += GET(tcode,1); while (*tcode == OP_ALT);\n      tcode += 1 + LINK_SIZE;\n      break;\n\n      /* SKIPZERO skips the bracket. */\n\n      case OP_SKIPZERO:\n      tcode++;\n      do tcode += GET(tcode,1); while (*tcode == OP_ALT);\n      tcode += 1 + LINK_SIZE;\n      break;\n\n      /* Single-char * or ? sets the bit and tries the next item */\n\n      case OP_STAR:\n      case OP_MINSTAR:\n      case OP_POSSTAR:\n      case OP_QUERY:\n      case OP_MINQUERY:\n      case OP_POSQUERY:\n      tcode = set_table_bit(re, tcode + 1, FALSE, utf, ucp);\n      break;\n\n      case OP_STARI:\n      case OP_MINSTARI:\n      case OP_POSSTARI:\n      case OP_QUERYI:\n      case OP_MINQUERYI:\n      case OP_POSQUERYI:\n      tcode = set_table_bit(re, tcode + 1, TRUE, utf, ucp);\n      break;\n\n      /* Single-char upto sets the bit and tries the next */\n\n      case OP_UPTO:\n      case OP_MINUPTO:\n      case OP_POSUPTO:\n      tcode = set_table_bit(re, tcode + 1 + IMM2_SIZE, FALSE, utf, ucp);\n      break;\n\n      case OP_UPTOI:\n      case OP_MINUPTOI:\n      case OP_POSUPTOI:\n      tcode = set_table_bit(re, tcode + 1 + IMM2_SIZE, TRUE, utf, ucp);\n      break;\n\n      /* At least one single char sets the bit and stops */\n\n      case OP_EXACT:\n      tcode += IMM2_SIZE;\n      PCRE2_FALLTHROUGH /* Fall through */\n      case OP_CHAR:\n      case OP_PLUS:\n      case OP_MINPLUS:\n      case OP_POSPLUS:\n      (void)set_table_bit(re, tcode + 1, FALSE, utf, ucp);\n      try_next = FALSE;\n      break;\n\n      case OP_EXACTI:\n      tcode += IMM2_SIZE;\n      PCRE2_FALLTHROUGH /* Fall through */\n      case OP_CHARI:\n      case OP_PLUSI:\n      case OP_MINPLUSI:\n      case OP_POSPLUSI:\n      (void)set_table_bit(re, tcode + 1, TRUE, utf, ucp);\n      try_next = FALSE;\n      break;\n\n      /* Special spacing and line-terminating items. These recognize specific\n      lists of characters. The difference between VSPACE and ANYNL is that the\n      latter can match the two-character CRLF sequence, but that is not\n      relevant for finding the first character, so their code here is\n      identical. */\n\n      case OP_HSPACE:\n      SET_BIT(CHAR_HT);\n      SET_BIT(CHAR_SPACE);\n\n      /* For the 16-bit and 32-bit libraries (which can never be EBCDIC), set\n      the bits for NBSP and for code units >= 255, independently of UTF. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\n      SET_BIT(CHAR_NBSP);\n      SET_BIT(0xFF);\n#else\n      /* For the 8-bit library in UTF-8 mode, set the bits for the first code\n      units of horizontal space characters. */\n\n#ifdef SUPPORT_UNICODE\n      if (utf)\n        {\n        SET_BIT(0xC2);  /* For U+00A0 */\n        SET_BIT(0xE1);  /* For U+1680, U+180E */\n        SET_BIT(0xE2);  /* For U+2000 - U+200A, U+202F, U+205F */\n        SET_BIT(0xE3);  /* For U+3000 */\n        }\n      else\n#endif\n      /* For the 8-bit library not in UTF-8 mode, set the bit for NBSP. */\n        {\n        SET_BIT(CHAR_NBSP);\n        }\n#endif  /* 8-bit support */\n\n      try_next = FALSE;\n      break;\n\n      case OP_ANYNL:\n      case OP_VSPACE:\n      SET_BIT(CHAR_LF);\n      SET_BIT(CHAR_VT);\n      SET_BIT(CHAR_FF);\n      SET_BIT(CHAR_CR);\n\n      /* For the 16-bit and 32-bit libraries (which can never be EBCDIC), set\n      the bits for NEL and for code units >= 255, independently of UTF. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\n      SET_BIT(CHAR_NEL);\n      SET_BIT(0xFF);\n#else\n      /* For the 8-bit library in UTF-8 mode, set the bits for the first code\n      units of vertical space characters. */\n\n#ifdef SUPPORT_UNICODE\n      if (utf)\n        {\n        SET_BIT(0xC2);  /* For U+0085 (NEL) */\n        SET_BIT(0xE2);  /* For U+2028, U+2029 */\n        }\n      else\n#endif\n      /* For the 8-bit library not in UTF-8 mode, set the bit for NEL. */\n        {\n        SET_BIT(CHAR_NEL);\n        }\n#endif  /* 8-bit support */\n\n      try_next = FALSE;\n      break;\n\n      /* Single character types set the bits and stop. Note that if PCRE2_UCP\n      is set, we do not see these opcodes because \\d etc are converted to\n      properties. Therefore, these apply in the case when only characters less\n      than 256 are recognized to match the types. */\n\n      case OP_NOT_DIGIT:\n      set_nottype_bits(re, cbit_digit, table_limit);\n      try_next = FALSE;\n      break;\n\n      case OP_DIGIT:\n      set_type_bits(re, cbit_digit, table_limit);\n      try_next = FALSE;\n      break;\n\n      case OP_NOT_WHITESPACE:\n      set_nottype_bits(re, cbit_space, table_limit);\n      try_next = FALSE;\n      break;\n\n      case OP_WHITESPACE:\n      set_type_bits(re, cbit_space, table_limit);\n      try_next = FALSE;\n      break;\n\n      case OP_NOT_WORDCHAR:\n      set_nottype_bits(re, cbit_word, table_limit);\n      try_next = FALSE;\n      break;\n\n      case OP_WORDCHAR:\n      set_type_bits(re, cbit_word, table_limit);\n      try_next = FALSE;\n      break;\n\n      /* One or more character type fudges the pointer and restarts, knowing\n      it will hit a single character type and stop there. */\n\n      case OP_TYPEPLUS:\n      case OP_TYPEMINPLUS:\n      case OP_TYPEPOSPLUS:\n      tcode++;\n      break;\n\n      case OP_TYPEEXACT:\n      tcode += 1 + IMM2_SIZE;\n      break;\n\n      /* Zero or more repeats of character types set the bits and then\n      try again. */\n\n      case OP_TYPEUPTO:\n      case OP_TYPEMINUPTO:\n      case OP_TYPEPOSUPTO:\n      tcode += IMM2_SIZE;\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      case OP_TYPESTAR:\n      case OP_TYPEMINSTAR:\n      case OP_TYPEPOSSTAR:\n      case OP_TYPEQUERY:\n      case OP_TYPEMINQUERY:\n      case OP_TYPEPOSQUERY:\n      switch(tcode[1])\n        {\n        default:\n        case OP_ANY:\n        case OP_ALLANY:\n        return SSB_FAIL;\n\n        case OP_HSPACE:\n        SET_BIT(CHAR_HT);\n        SET_BIT(CHAR_SPACE);\n\n        /* For the 16-bit and 32-bit libraries (which can never be EBCDIC), set\n        the bits for NBSP and for code units >= 255, independently of UTF. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\n        SET_BIT(CHAR_NBSP);\n        SET_BIT(0xFF);\n#else\n        /* For the 8-bit library in UTF-8 mode, set the bits for the first code\n        units of horizontal space characters. */\n\n#ifdef SUPPORT_UNICODE\n        if (utf)\n          {\n          SET_BIT(0xC2);  /* For U+00A0 */\n          SET_BIT(0xE1);  /* For U+1680, U+180E */\n          SET_BIT(0xE2);  /* For U+2000 - U+200A, U+202F, U+205F */\n          SET_BIT(0xE3);  /* For U+3000 */\n          }\n        else\n#endif\n        /* For the 8-bit library not in UTF-8 mode, set the bit for NBSP. */\n          {\n          SET_BIT(CHAR_NBSP);\n          }\n#endif  /* 8-bit support */\n        break;\n\n        case OP_ANYNL:\n        case OP_VSPACE:\n        SET_BIT(CHAR_LF);\n        SET_BIT(CHAR_VT);\n        SET_BIT(CHAR_FF);\n        SET_BIT(CHAR_CR);\n\n        /* For the 16-bit and 32-bit libraries (which can never be EBCDIC), set\n        the bits for NEL and for code units >= 255, independently of UTF. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\n        SET_BIT(CHAR_NEL);\n        SET_BIT(0xFF);\n#else\n        /* For the 8-bit library in UTF-8 mode, set the bits for the first code\n        units of vertical space characters. */\n\n#ifdef SUPPORT_UNICODE\n        if (utf)\n          {\n          SET_BIT(0xC2);  /* For U+0085 (NEL) */\n          SET_BIT(0xE2);  /* For U+2028, U+2029 */\n          }\n        else\n#endif\n        /* For the 8-bit library not in UTF-8 mode, set the bit for NEL. */\n          {\n          SET_BIT(CHAR_NEL);\n          }\n#endif  /* 8-bit support */\n        break;\n\n        case OP_NOT_DIGIT:\n        set_nottype_bits(re, cbit_digit, table_limit);\n        break;\n\n        case OP_DIGIT:\n        set_type_bits(re, cbit_digit, table_limit);\n        break;\n\n        case OP_NOT_WHITESPACE:\n        set_nottype_bits(re, cbit_space, table_limit);\n        break;\n\n        case OP_WHITESPACE:\n        set_type_bits(re, cbit_space, table_limit);\n        break;\n\n        case OP_NOT_WORDCHAR:\n        set_nottype_bits(re, cbit_word, table_limit);\n        break;\n\n        case OP_WORDCHAR:\n        set_type_bits(re, cbit_word, table_limit);\n        break;\n        }\n\n      tcode += 2;\n      break;\n\n      /* Set-based ECLASS: treat it the same as a \"complex\" XCLASS; give up. */\n\n#ifdef SUPPORT_WIDE_CHARS\n      case OP_ECLASS:\n      return SSB_FAIL;\n#endif\n\n      /* Extended class: if there are any property checks, or if this is a\n      negative XCLASS without a map, give up. If there are no property checks,\n      there must be wide characters on the XCLASS list, because otherwise an\n      XCLASS would not have been created. This means that code points >= 255\n      are potential starters. In the UTF-8 case we can scan them and set bits\n      for the relevant leading bytes. */\n\n#ifdef SUPPORT_WIDE_CHARS\n      case OP_XCLASS:\n      xclassflags = tcode[1 + LINK_SIZE];\n      if ((xclassflags & XCL_HASPROP) != 0 ||\n          (xclassflags & (XCL_MAP|XCL_NOT)) == XCL_NOT)\n        return SSB_FAIL;\n\n      /* We have a positive XCLASS or a negative one without a map. Set up the\n      map pointer if there is one, and fall through. */\n\n      classmap = ((xclassflags & XCL_MAP) == 0)? NULL :\n        (const uint8_t *)(tcode + 1 + LINK_SIZE + 1);\n\n      /* In UTF-8 mode, scan the character list and set bits for leading bytes,\n      then jump to handle the map. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      if (utf && (xclassflags & XCL_NOT) == 0)\n        {\n        PCRE2_UCHAR b, e;\n        PCRE2_SPTR p = tcode + 1 + LINK_SIZE + 1 + ((classmap == NULL)? 0:32);\n        tcode += GET(tcode, 1);\n\n        if (*p >= XCL_LIST)\n          {\n          study_char_list(p, re->start_bitmap,\n            ((const uint8_t *)re + re->code_start));\n          goto HANDLE_CLASSMAP;\n          }\n\n        for (;;) switch (*p++)\n          {\n          case XCL_SINGLE:\n          b = *p++;\n          while ((*p & 0xc0) == 0x80) p++;\n          re->start_bitmap[b/8] |= (1u << (b&7));\n          break;\n\n          case XCL_RANGE:\n          b = *p++;\n          while ((*p & 0xc0) == 0x80) p++;\n          e = *p++;\n          while ((*p & 0xc0) == 0x80) p++;\n          for (; b <= e; b++)\n            re->start_bitmap[b/8] |= (1u << (b&7));\n          break;\n\n          case XCL_END:\n          goto HANDLE_CLASSMAP;\n\n          /* LCOV_EXCL_START */\n          default:\n          PCRE2_DEBUG_UNREACHABLE();\n          return SSB_UNKNOWN;   /* Internal error, should not occur */\n          /* LCOV_EXCL_STOP */\n          }\n        }\n#endif  /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8 */\n#endif  /* SUPPORT_WIDE_CHARS */\n\n      /* It seems that the fall through comment must be outside the #ifdef if\n      it is to avoid the gcc compiler warning. */\n\n      PCRE2_FALLTHROUGH /* Fall through */\n\n      /* Enter here for a negative non-XCLASS. In the 8-bit library, if we are\n      in UTF mode, any byte with a value >= 0xc4 is a potentially valid starter\n      because it starts a character with a value > 255. In 8-bit non-UTF mode,\n      there is no difference between CLASS and NCLASS. In all other wide\n      character modes, set the 0xFF bit to indicate code units >= 255. */\n\n      case OP_NCLASS:\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n      if (utf)\n        {\n        re->start_bitmap[24] |= 0xf0;            /* Bits for 0xc4 - 0xc8 */\n        memset(re->start_bitmap+25, 0xff, 7);    /* Bits for 0xc9 - 0xff */\n        }\n      PCRE2_FALLTHROUGH /* Fall through */\n#elif PCRE2_CODE_UNIT_WIDTH != 8\n      SET_BIT(0xFF);                             /* For characters >= 255 */\n      PCRE2_FALLTHROUGH /* Fall through */\n#endif\n\n      /* Enter here for a positive non-XCLASS. If we have fallen through from\n      an XCLASS, classmap will already be set; just advance the code pointer.\n      Otherwise, set up classmap for a non-XCLASS and advance past it. */\n\n      case OP_CLASS:\n      if (*tcode == OP_XCLASS) tcode += GET(tcode, 1); else\n        {\n        classmap = (const uint8_t *)(++tcode);\n        tcode += 32 / sizeof(PCRE2_UCHAR);\n        }\n\n      /* When wide characters are supported, classmap may be NULL. In UTF-8\n      (sic) mode, the bits in a class bit map correspond to character values,\n      not to byte values. However, the bit map we are constructing is for byte\n      values. So we have to do a conversion for characters whose code point is\n      greater than 127. In fact, there are only two possible starting bytes for\n      characters in the range 128 - 255. */\n\n#if defined SUPPORT_WIDE_CHARS && PCRE2_CODE_UNIT_WIDTH == 8\n      HANDLE_CLASSMAP:\n#endif\n      if (classmap != NULL)\n        {\n#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH == 8\n        if (utf)\n          {\n          for (c = 0; c < 16; c++) re->start_bitmap[c] |= classmap[c];\n          for (c = 128; c < 256; c++)\n            {\n            if ((classmap[c/8] & (1u << (c&7))) != 0)\n              {\n              int d = (c >> 6) | 0xc0;                 /* Set bit for this starter */\n              re->start_bitmap[d/8] |= (1u << (d&7));  /* and then skip on to the */\n              c = (c & 0xc0) + 0x40 - 1;               /* next relevant character. */\n              }\n            }\n          }\n        else\n#endif\n        /* In all modes except UTF-8, the two bit maps are compatible. */\n\n          {\n          for (c = 0; c < 32; c++) re->start_bitmap[c] |= classmap[c];\n          }\n        }\n\n      /* Act on what follows the class. For a zero minimum repeat, continue;\n      otherwise stop processing. */\n\n      switch (*tcode)\n        {\n        case OP_CRSTAR:\n        case OP_CRMINSTAR:\n        case OP_CRQUERY:\n        case OP_CRMINQUERY:\n        case OP_CRPOSSTAR:\n        case OP_CRPOSQUERY:\n        tcode++;\n        break;\n\n        case OP_CRRANGE:\n        case OP_CRMINRANGE:\n        case OP_CRPOSRANGE:\n        if (GET2(tcode, 1) == 0) tcode += 1 + 2 * IMM2_SIZE;\n          else try_next = FALSE;\n        break;\n\n        default:\n        try_next = FALSE;\n        break;\n        }\n      break; /* End of class handling case */\n      }      /* End of switch for opcodes */\n    }        /* End of try_next loop */\n\n  code += GET(code, 1);   /* Advance to next branch */\n  }\nwhile (*code == OP_ALT);\n\nreturn yield;\n}\n\n\n\n/*************************************************\n*          Study a compiled expression           *\n*************************************************/\n\n/* This function is handed a compiled expression that it must study to produce\ninformation that will speed up the matching.\n\nArgument:\n  re       points to the compiled expression\n\nReturns:   0 normally; non-zero should never normally occur\n           1 unknown opcode in set_start_bits\n           2 missing capturing bracket\n           3 unknown opcode in find_minlength\n*/\n\nint\nPRIV(study)(pcre2_real_code *re)\n{\nint count = 0;\nPCRE2_UCHAR *code;\nBOOL utf = (re->overall_options & PCRE2_UTF) != 0;\nBOOL ucp = (re->overall_options & PCRE2_UCP) != 0;\n\n/* Find start of compiled code */\n\ncode = (PCRE2_UCHAR *)((uint8_t *)re + re->code_start);\n\n/* For a pattern that has a first code unit, or a multiline pattern that\nmatches only at \"line start\", there is no point in seeking a list of starting\ncode units. */\n\nif ((re->flags & (PCRE2_FIRSTSET|PCRE2_STARTLINE)) == 0)\n  {\n  int depth = 0;\n  int rc = set_start_bits(re, code, utf, ucp, &depth);\n  /* LCOV_EXCL_START */\n  if (rc == SSB_UNKNOWN)\n    {\n    PCRE2_DEBUG_UNREACHABLE();\n    return 1;\n    }\n  /* LCOV_EXCL_STOP */\n\n  /* If a list of starting code units was set up, scan the list to see if only\n  one or two were listed. Having only one listed is rare because usually a\n  single starting code unit will have been recognized and PCRE2_FIRSTSET set.\n  If two are listed, see if they are caseless versions of the same character;\n  if so we can replace the list with a caseless first code unit. This gives\n  better performance and is plausibly worth doing for patterns such as [Ww]ord\n  or (word|WORD). */\n\n  if (rc == SSB_DONE)\n    {\n    int i;\n    int a = -1;\n    int b = -1;\n    uint8_t *p = re->start_bitmap;\n    uint32_t flags = PCRE2_FIRSTMAPSET;\n\n    for (i = 0; i < 256; p++, i += 8)\n      {\n      uint8_t x = *p;\n      if (x != 0)\n        {\n        int c;\n        uint8_t y = x & (~x + 1);   /* Least significant bit */\n        if (y != x) goto DONE;      /* More than one bit set */\n\n        /* In the 16-bit and 32-bit libraries, the bit for 0xff means \"0xff and\n        all wide characters\", so we cannot use it here. */\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\n        if (i == 248 && x == 0x80) goto DONE;\n#endif\n\n        /* Compute the character value */\n\n        c = i;\n        switch (x)\n          {\n          case 1:   break;\n          case 2:   c += 1; break;  case 4:  c += 2; break;\n          case 8:   c += 3; break;  case 16: c += 4; break;\n          case 32:  c += 5; break;  case 64: c += 6; break;\n          case 128: c += 7; break;\n          }\n\n        /* c contains the code unit value, in the range 0-255. In 8-bit UTF\n        mode, only values < 128 can be used. In all the other cases, c is a\n        character value. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n        if (utf && c > 127) goto DONE;\n#endif\n        if (a < 0) a = c;   /* First one found, save in a */\n        else if (b < 0)     /* Second one found */\n          {\n          int d = TABLE_GET((unsigned int)c, re->tables + fcc_offset, c);\n\n#ifdef SUPPORT_UNICODE\n          if (utf || ucp)\n            {\n            if (UCD_CASESET(c) != 0) goto DONE;     /* Multiple case set */\n            if (c > 127) d = UCD_OTHERCASE(c);\n            }\n#endif  /* SUPPORT_UNICODE */\n\n          if (d != a) goto DONE;   /* Not the other case of a */\n          b = c;                   /* Save second in b */\n\n#ifdef EBCDIC\n          /* To match ASCII (which puts the uppercase one in a), swap a & b\n          if needed. This doesn't really matter, but neatens the tests. */\n          if (TABLE_GET((unsigned int)a, re->tables + lcc_offset, a) == a)\n            {\n            b = a;\n            a = c;\n            }\n#endif\n          }\n        else goto DONE;   /* More than two characters found */\n        }\n      }\n\n    /* Replace the start code unit bits with a first code unit. If it is the\n    same as a required later code unit, then clear the required later code\n    unit. This is because a search for a required code unit starts after an\n    explicit first code unit, but at a code unit found from the bitmap.\n    Patterns such as /a*a/ don't work if both the start unit and required\n    unit are the same. */\n\n    if (a >= 0) {\n      if ((re->flags & PCRE2_LASTSET) && (re->last_codeunit == (uint32_t)a || (b >= 0 && re->last_codeunit == (uint32_t)b))) {\n        re->flags &= ~(PCRE2_LASTSET | PCRE2_LASTCASELESS);\n        re->last_codeunit = 0;\n      }\n      re->first_codeunit = a;\n      flags = PCRE2_FIRSTSET;\n      if (b >= 0) flags |= PCRE2_FIRSTCASELESS;\n    }\n\n    DONE:\n    re->flags |= flags;\n    }\n  }\n\n/* Find the minimum length of subject string. If the pattern can match an empty\nstring, the minimum length is already known. If the pattern contains (*ACCEPT)\nall bets are off, and we don't even try to find a minimum length. If there are\nmore back references than the size of the vector we are going to cache them in,\ndo nothing. A pattern that complicated will probably take a long time to\nanalyze and may in any case turn out to be too complicated. Note that back\nreference minima are held as 16-bit numbers. */\n\nif ((re->flags & (PCRE2_MATCH_EMPTY|PCRE2_HASACCEPT)) == 0 &&\n     re->top_backref <= MAX_CACHE_BACKREF)\n  {\n  int min;\n  int backref_cache[MAX_CACHE_BACKREF+1];\n  backref_cache[0] = 0;    /* Highest one that is set */\n  min = find_minlength(re, code, code, utf, NULL, &count, backref_cache);\n  switch(min)\n    {\n    case -1:  /* \\C in UTF mode or over-complex regex */\n    break;    /* Leave minlength unchanged (will be zero) */\n\n    /* LCOV_EXCL_START */\n    case -2:\n    PCRE2_DEBUG_UNREACHABLE();\n    return 2; /* missing capturing bracket */\n    /* LCOV_EXCL_STOP */\n\n    /* LCOV_EXCL_START */\n    case -3:\n    PCRE2_DEBUG_UNREACHABLE();\n    return 3; /* unrecognized opcode */\n    /* LCOV_EXCL_STOP */\n\n    default:\n    re->minlength = (min > (int)UINT16_MAX)? (int)UINT16_MAX : min;\n    break;\n    }\n  }\n\nreturn 0;\n}\n\n/* End of pcre2_study.c */\n"
  },
  {
    "path": "src/pcre2_substitute.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_internal.h\"\n\n\n\n#define PTR_STACK_SIZE 20\n\n#define SUBSTITUTE_OPTIONS \\\n  (PCRE2_SUBSTITUTE_EXTENDED|PCRE2_SUBSTITUTE_GLOBAL| \\\n   PCRE2_SUBSTITUTE_LITERAL|PCRE2_SUBSTITUTE_MATCHED| \\\n   PCRE2_SUBSTITUTE_OVERFLOW_LENGTH|PCRE2_SUBSTITUTE_REPLACEMENT_ONLY| \\\n   PCRE2_SUBSTITUTE_UNKNOWN_UNSET|PCRE2_SUBSTITUTE_UNSET_EMPTY)\n\n\n\n/*************************************************\n*           Find end of substitute text          *\n*************************************************/\n\n/* In extended mode, we recognize ${name:+set text:unset text} and similar\nconstructions. This requires the identification of unescaped : and }\ncharacters. This function scans for such. It must deal with nested ${\nconstructions. The pointer to the text is updated, either to the required end\ncharacter, or to where an error was detected.\n\nArguments:\n  code      points to the compiled expression (for options)\n  ptrptr    points to the pointer to the start of the text (updated)\n  ptrend    end of the whole string\n  last      TRUE if the last expected string (only } recognized)\n\nReturns:    0 on success\n            negative error code on failure\n*/\n\nstatic int\nfind_text_end(const pcre2_code *code, PCRE2_SPTR *ptrptr, PCRE2_SPTR ptrend,\n  BOOL last)\n{\nint rc = 0;\nuint32_t nestlevel = 0;\nBOOL literal = FALSE;\nPCRE2_SPTR ptr = *ptrptr;\n\nfor (; ptr < ptrend; ptr++)\n  {\n  if (literal)\n    {\n    if (ptr[0] == CHAR_BACKSLASH && ptr < ptrend - 1 && ptr[1] == CHAR_E)\n      {\n      literal = FALSE;\n      ptr += 1;\n      }\n    }\n\n  else if (*ptr == CHAR_RIGHT_CURLY_BRACKET)\n    {\n    if (nestlevel == 0) goto EXIT;\n    nestlevel--;\n    }\n\n  else if (*ptr == CHAR_COLON && !last && nestlevel == 0) goto EXIT;\n\n  else if (*ptr == CHAR_DOLLAR_SIGN)\n    {\n    if (ptr < ptrend - 1 && ptr[1] == CHAR_LEFT_CURLY_BRACKET)\n      {\n      nestlevel++;\n      ptr += 1;\n      }\n    }\n\n  else if (*ptr == CHAR_BACKSLASH)\n    {\n    int erc;\n    int errorcode;\n    uint32_t ch;\n    PCRE2_SPTR esc_end_ptr;\n\n    if (ptr < ptrend - 1) switch (ptr[1])\n      {\n      case CHAR_L:\n      case CHAR_l:\n      case CHAR_U:\n      case CHAR_u:\n      ptr += 1;\n      continue;\n      }\n\n    ptr += 1;  /* Must point after \\ */\n    erc = PRIV(check_escape)(&ptr, ptrend, &ch, &errorcode,\n      code->overall_options, code->extra_options, code->top_bracket, FALSE, NULL);\n    if (errorcode != 0)\n      {\n      /* errorcode from check_escape is positive, so must not be returned by\n      pcre2_substitute(). */\n      rc = PCRE2_ERROR_BADREPESCAPE;\n      goto EXIT;\n      }\n\n    esc_end_ptr = ptr;\n    ptr -= 1;  /* Rewind by one, because the for-loop will increment it */\n\n    switch(erc)\n      {\n      case 0:      /* Data character */\n      case ESC_b:  /* Data character */\n      case ESC_v:  /* Data character */\n      case ESC_E:  /* Isolated \\E is ignored */\n      break;\n\n      case ESC_Q:\n      literal = TRUE;\n      break;\n\n      case ESC_g:\n      /* The \\g<name> form (\\g<number> already handled by check_escape)\n\n      Don't worry about finding the matching \">\". We are super, super lenient\n      about validating ${} replacements inside find_text_end(), so we certainly\n      don't need to worry about other syntax. Importantly, a \\g<..> or $<...>\n      sequence can't contain a '}' character. */\n      break;\n\n      default:\n      if (erc < 0)\n        break;  /* capture group reference */\n      ptr = esc_end_ptr;\n      rc = PCRE2_ERROR_BADREPESCAPE;\n      goto EXIT;\n      }\n    }\n  }\n\nrc = PCRE2_ERROR_REPMISSINGBRACE;   /* Terminator not found */\n\nEXIT:\n*ptrptr = ptr;\nreturn rc;\n}\n\n\n/*************************************************\n*           Validate group name                  *\n*************************************************/\n\n/* This function scans for a capture group name, validating it\nconsists of legal characters, is not empty, and does not exceed\nMAX_NAME_SIZE.\n\nArguments:\n  ptrptr    points to the pointer to the start of the text (updated)\n  ptrend    end of the whole string\n  utf       true if the input is UTF-encoded\n  ctypes    pointer to the character types table\n\nReturns:    TRUE if a name was read\n            FALSE otherwise\n*/\n\nstatic BOOL\nread_name_subst(PCRE2_SPTR *ptrptr, PCRE2_SPTR ptrend, BOOL utf,\n    const uint8_t* ctypes)\n{\nPCRE2_SPTR ptr = *ptrptr;\nPCRE2_SPTR nameptr = ptr;\n\nif (ptr >= ptrend)                 /* No characters in name */\n  goto FAILED;\n\n/* We do not need to check whether the name starts with a non-digit.\nWe are simply referencing names here, not defining them. */\n\n/* See read_name in the pcre2_compile.c for the corresponding logic\nrestricting group names inside the pattern itself. */\n\n#ifdef SUPPORT_UNICODE\nif (utf)\n  {\n  uint32_t c, type;\n\n  while (ptr < ptrend)\n    {\n    GETCHAR(c, ptr);\n    type = UCD_CHARTYPE(c);\n    if (type != ucp_Nd && PRIV(ucp_gentype)[type] != ucp_L &&\n        c != CHAR_UNDERSCORE) break;\n    ptr++;\n    FORWARDCHARTEST(ptr, ptrend);\n    }\n  }\nelse\n#else\n(void)utf;  /* Avoid compiler warning */\n#endif      /* SUPPORT_UNICODE */\n\n/* Handle group names in non-UTF modes. */\n\n  {\n  while (ptr < ptrend && MAX_255(*ptr) && (ctypes[*ptr] & ctype_word) != 0)\n    {\n    ptr++;\n    }\n  }\n\n/* Check name length */\n\nif (ptr - nameptr > MAX_NAME_SIZE)\n  goto FAILED;\n\n/* Subpattern names must not be empty */\nif (ptr == nameptr)\n  goto FAILED;\n\n*ptrptr = ptr;\nreturn TRUE;\n\nFAILED:\n*ptrptr = ptr;\nreturn FALSE;\n}\n\n\n/*************************************************\n*              Case transformations              *\n*************************************************/\n\n#define PCRE2_SUBSTITUTE_CASE_NONE                 0\n// 1, 2, 3 are PCRE2_SUBSTITUTE_CASE_LOWER, UPPER, TITLE_FIRST.\n#define PCRE2_SUBSTITUTE_CASE_REVERSE_TITLE_FIRST  4\n\ntypedef struct {\n  int to_case; /* One of PCRE2_SUBSTITUTE_CASE_xyz */\n  BOOL single_char;\n} case_state;\n\n/* Helper to guess how much a string is likely to increase in size when\ncase-transformed. Usually, strings don't change size at all, but some rare\ncharacters do grow. Estimate +10%, plus another few characters.\n\nPerforming this estimation is unfortunate, but inevitable, since we can't call\nthe callout if we ran out of buffer space to prepare its input.\n\nBecause this estimate is inexact (and in pathological cases, underestimates the\nrequired buffer size) we must document that when you have a\nsubstitute_case_callout, and you are using PCRE2_SUBSTITUTE_OVERFLOW_LENGTH, you\nmay need more than two calls to determine the final buffer size. */\n\nstatic PCRE2_SIZE\npessimistic_case_inflation(PCRE2_SIZE len)\n{\nreturn (len >> 3u) + 10;\n}\n\n/* Case transformation behaviour if no callout is passed. */\n\nstatic PCRE2_SIZE\ndefault_substitute_case_callout(\n  PCRE2_SPTR input, PCRE2_SIZE input_len,\n  PCRE2_UCHAR *output, PCRE2_SIZE output_cap,\n  case_state *state, const pcre2_code *code)\n{\nPCRE2_SPTR input_end = input + input_len;\n#ifdef SUPPORT_UNICODE\nBOOL utf;\nBOOL ucp;\n#endif\nPCRE2_UCHAR temp[6];\nBOOL next_to_upper;\nBOOL rest_to_upper;\nBOOL single_char;\nBOOL overflow = FALSE;\nPCRE2_SIZE written = 0;\n\n/* Helpful simplifying invariant: input and output are disjoint buffers.\nI believe that this code is technically undefined behaviour, because the two\npointers input/output are \"unrelated\" pointers and hence not comparable. Casting\nvia char* bypasses some but not all of those technical rules. It is not included\nin release builds, in any case. */\nPCRE2_ASSERT((char *)(input + input_len) <= (char *)output ||\n             (char *)(output + output_cap) <= (char *)input);\n\n#ifdef SUPPORT_UNICODE\nutf = (code->overall_options & PCRE2_UTF) != 0;\nucp = (code->overall_options & PCRE2_UCP) != 0;\n#endif\n\nif (input_len == 0) return 0;\n\nswitch (state->to_case)\n  {\n  /* LCOV_EXCL_START */\n  default:\n  PCRE2_DEBUG_UNREACHABLE();\n  return 0;\n  /* LCOV_EXCL_STOP */\n\n  case PCRE2_SUBSTITUTE_CASE_LOWER: // Can be single_char TRUE or FALSE\n  case PCRE2_SUBSTITUTE_CASE_UPPER: // Can only be single_char FALSE\n  next_to_upper = rest_to_upper = (state->to_case == PCRE2_SUBSTITUTE_CASE_UPPER);\n  break;\n\n  case PCRE2_SUBSTITUTE_CASE_TITLE_FIRST: // Can be single_char TRUE or FALSE\n  next_to_upper = TRUE;\n  rest_to_upper = FALSE;\n  state->to_case = PCRE2_SUBSTITUTE_CASE_LOWER;\n  break;\n\n  case PCRE2_SUBSTITUTE_CASE_REVERSE_TITLE_FIRST: // Can only be single_char FALSE\n  next_to_upper = FALSE;\n  rest_to_upper = TRUE;\n  state->to_case = PCRE2_SUBSTITUTE_CASE_UPPER;\n  break;\n  }\n\nsingle_char = state->single_char;\nif (single_char)\n  state->to_case = PCRE2_SUBSTITUTE_CASE_NONE;\n\nwhile (input < input_end)\n  {\n  uint32_t ch;\n  unsigned int chlen;\n\n  GETCHARINCTEST(ch, input);\n\n#ifdef SUPPORT_UNICODE\n  if ((utf || ucp) && ch >= 128)\n    {\n    uint32_t type = UCD_CHARTYPE(ch);\n    if (PRIV(ucp_gentype)[type] == ucp_L &&\n        type != (next_to_upper? ucp_Lu : ucp_Ll))\n      ch = UCD_OTHERCASE(ch);\n\n    /* TODO This is far from correct... it doesn't support the SpecialCasing.txt\n    mappings, but worse, it's not even correct for all the ordinary case\n    mappings. We should add support for those (at least), and then add the\n    SpecialCasing.txt mappings for Esszet and ligatures, and finally use the\n    Turkish casing flag on the match context. */\n    }\n  else\n#endif\n  if (MAX_255(ch))\n    {\n    if (((code->tables + cbits_offset +\n        (next_to_upper? cbit_upper:cbit_lower)\n        )[ch/8] & (1u << (ch%8))) == 0)\n      ch = (code->tables + fcc_offset)[ch];\n    }\n\n#ifdef SUPPORT_UNICODE\n  if (utf) chlen = PRIV(ord2utf)(ch, temp); else\n#endif\n    {\n    temp[0] = ch;\n    chlen = 1;\n    }\n\n  if (!overflow && chlen <= output_cap)\n    {\n    memcpy(output, temp, CU2BYTES(chlen));\n    output += chlen;\n    output_cap -= chlen;\n    }\n  else\n    {\n    overflow = TRUE;\n    }\n\n  if (chlen > ~(PCRE2_SIZE)0 - written)  /* Integer overflow */\n    return ~(PCRE2_SIZE)0;\n  written += chlen;\n\n  next_to_upper = rest_to_upper;\n\n  /* memcpy the remainder, if only transforming a single character. */\n\n  if (single_char)\n    {\n    PCRE2_SIZE rest_len = input_end - input;\n\n    if (!overflow && rest_len <= output_cap)\n      memcpy(output, input, CU2BYTES(rest_len));\n\n    if (rest_len > ~(PCRE2_SIZE)0 - written)  /* Integer overflow */\n      return ~(PCRE2_SIZE)0;\n    written += rest_len;\n\n    return written;\n    }\n  }\n\nreturn written;\n}\n\n/* Helper to perform the call to the substitute_case_callout. We wrap the\nuser-provided callout because our internal arguments are slightly extended. We\ndon't want the user callout to handle the case of \"\\l\" (first character only to\nlowercase) or \"\\l\\U\" (first character to lowercase, rest to uppercase) because\nthose are not operations defined by Unicode. Instead the user callout simply\nneeds to provide the three Unicode primitives: lower, upper, titlecase. */\n\nstatic PCRE2_SIZE\ndo_case_copy(\n  PCRE2_UCHAR *input_output, PCRE2_SIZE input_len, PCRE2_SIZE output_cap,\n  case_state *state, BOOL utf,\n  PCRE2_SIZE (*substitute_case_callout)(PCRE2_SPTR, PCRE2_SIZE, PCRE2_UCHAR *,\n                                        PCRE2_SIZE, int, void *),\n  void *substitute_case_callout_data)\n{\nPCRE2_SPTR input = input_output;\nPCRE2_UCHAR *output = input_output;\nPCRE2_SIZE rc;\nPCRE2_SIZE rc2;\nint ch1_to_case;\nint rest_to_case;\nPCRE2_UCHAR ch1[6];\nPCRE2_SIZE ch1_len;\nPCRE2_SPTR rest;\nPCRE2_SIZE rest_len;\nBOOL ch1_overflow = FALSE;\nBOOL rest_overflow = FALSE;\n\n#if PCRE2_CODE_UNIT_WIDTH == 32 || !defined(SUPPORT_UNICODE)\n(void)utf; /* Avoid compiler warning. */\n#endif\n\nPCRE2_ASSERT(input_len != 0);\n\nswitch (state->to_case)\n  {\n  /* LCOV_EXCL_START */\n  default:\n  PCRE2_DEBUG_UNREACHABLE();\n  return 0;\n  /* LCOV_EXCL_STOP */\n\n  case PCRE2_SUBSTITUTE_CASE_LOWER: // Can be single_char TRUE or FALSE\n  case PCRE2_SUBSTITUTE_CASE_UPPER: // Can only be single_char FALSE\n  case PCRE2_SUBSTITUTE_CASE_TITLE_FIRST: // Can be single_char TRUE or FALSE\n\n  /* The easy case, where our internal casing operations align with those of\n  the callout. */\n\n  if (state->single_char == FALSE)\n    {\n    rc = substitute_case_callout(input, input_len, output, output_cap,\n                                 state->to_case, substitute_case_callout_data);\n\n    if (state->to_case == PCRE2_SUBSTITUTE_CASE_TITLE_FIRST)\n      state->to_case = PCRE2_SUBSTITUTE_CASE_LOWER;\n\n    return rc;\n    }\n\n  ch1_to_case = state->to_case;\n  rest_to_case = PCRE2_SUBSTITUTE_CASE_NONE;\n  break;\n\n  case PCRE2_SUBSTITUTE_CASE_REVERSE_TITLE_FIRST: // Can only be single_char FALSE\n  ch1_to_case = PCRE2_SUBSTITUTE_CASE_LOWER;\n  rest_to_case = PCRE2_SUBSTITUTE_CASE_UPPER;\n  break;\n  }\n\n/* Identify the leading character. Take copy, because its storage overlaps with\n`output`, and hence may be scrambled by the callout. */\n\n  {\n  PCRE2_SPTR ch_end = input;\n  uint32_t ch;\n\n  GETCHARINCTEST(ch, ch_end);\n  (void) ch;\n  PCRE2_ASSERT(ch_end <= input + input_len && ch_end - input <= 6);\n  ch1_len = ch_end - input;\n  memcpy(ch1, input, CU2BYTES(ch1_len));\n  }\n\nrest = input + ch1_len;\nrest_len = input_len - ch1_len;\n\n/* Transform just ch1. The buffers are always in-place (input == output). With a\ncustom callout, we need a loop to discover its required buffer size. The loop\nwouldn't be required if the callout were well-behaved, but it might be naughty\nand return \"5\" the first time, then \"10\" the next time we call it using the\nexact same input! */\n\n  {\n  PCRE2_SIZE ch1_cap;\n  PCRE2_SIZE max_ch1_cap;\n\n  ch1_cap = ch1_len;  /* First attempt uses the space vacated by ch1. */\n  PCRE2_ASSERT(output_cap >= input_len && input_len >= rest_len);\n  max_ch1_cap = output_cap - rest_len;\n\n  while (TRUE)\n    {\n    rc = substitute_case_callout(ch1, ch1_len, output, ch1_cap, ch1_to_case,\n                                 substitute_case_callout_data);\n    if (rc == ~(PCRE2_SIZE)0) return rc;\n\n    if (rc <= ch1_cap) break;\n\n    if (rc > max_ch1_cap)\n      {\n      ch1_overflow = TRUE;\n      break;\n      }\n\n    /* Move the rest to the right, to make room for expanding ch1. */\n\n    memmove(input_output + rc, rest, CU2BYTES(rest_len));\n    rest = input + rc;\n\n    ch1_cap = rc;\n\n    /* Proof of loop termination: `ch1_cap` is growing on each iteration, but\n    the loop ends if `rc` reaches the (unchanging) upper bound of output_cap. */\n    }\n  }\n\nif (rest_to_case == PCRE2_SUBSTITUTE_CASE_NONE)\n  {\n  if (!ch1_overflow)\n    {\n    PCRE2_ASSERT(rest_len <= output_cap - rc);\n    memmove(output + rc, rest, CU2BYTES(rest_len));\n    }\n  rc2 = rest_len;\n\n  state->to_case = PCRE2_SUBSTITUTE_CASE_NONE;\n  }\nelse\n  {\n  PCRE2_UCHAR dummy[1];\n\n  rc2 = substitute_case_callout(rest, rest_len,\n                                ch1_overflow? dummy : output + rc,\n                                ch1_overflow? 0u : output_cap - rc,\n                                rest_to_case, substitute_case_callout_data);\n  if (rc2 == ~(PCRE2_SIZE)0) return rc2;\n\n  if (!ch1_overflow && rc2 > output_cap - rc) rest_overflow = TRUE;\n\n  /* If ch1 grows so that `xform(ch1)+rest` can't fit in the buffer, but then\n  `rest` shrinks, it's actually possible for the total calculated length of\n  `xform(ch1)+xform(rest)` to come out at less than output_cap. But we can't\n  report that, because it would make it seem that the operation succeeded.\n  If either of xform(ch1) or xform(rest) won't fit in the buffer, our final\n  result must be > output_cap. */\n  if (ch1_overflow && rc2 < rest_len)\n    rc2 = rest_len;\n\n  state->to_case = PCRE2_SUBSTITUTE_CASE_UPPER;\n  }\n\nif (rc2 > ~(PCRE2_SIZE)0 - rc)  /* Integer overflow */\n  return ~(PCRE2_SIZE)0;\n\nPCRE2_ASSERT(!(ch1_overflow || rest_overflow) || rc + rc2 > output_cap);\n(void)rest_overflow;\n\nreturn rc + rc2;\n}\n\n\n/*************************************************\n*              Match and substitute              *\n*************************************************/\n\n/* This function applies a compiled re to a subject string and creates a new\nstring with substitutions. The first 7 arguments are the same as for\npcre2_match(). Either string length may be PCRE2_ZERO_TERMINATED.\n\nArguments:\n  code            points to the compiled expression\n  subject         points to the subject string\n  length          length of subject string (may contain binary zeros)\n  start_offset    where to start in the subject string\n  options         option bits\n  match_data      points to a match_data block, or is NULL\n  context         points a PCRE2 context\n  replacement     points to the replacement string\n  rlength         length of replacement string\n  buffer          where to put the substituted string\n  blength         points to length of buffer; updated to length of string\n\nReturns:          >= 0 number of substitutions made\n                  < 0 an error code\n                  PCRE2_ERROR_BADREPLACEMENT means invalid use of $\n*/\n\n/* This macro checks for space in the buffer before copying into it. On\noverflow, either give an error immediately, or keep on, accumulating the\nlength. */\n\n#define CHECKMEMCPY(from, length_) \\\n  do {    \\\n     PCRE2_SIZE chkmc_length = length_; \\\n     if (overflowed) \\\n       {  \\\n       if (chkmc_length > ~(PCRE2_SIZE)0 - extra_needed)  /* Integer overflow */ \\\n         goto TOOLARGEREPLACE; \\\n       extra_needed += chkmc_length; \\\n       }  \\\n     else if (lengthleft < chkmc_length) \\\n       {  \\\n       if ((suboptions & PCRE2_SUBSTITUTE_OVERFLOW_LENGTH) == 0) goto NOROOM; \\\n       overflowed = TRUE; \\\n       extra_needed = chkmc_length - lengthleft; \\\n       }  \\\n     else \\\n       {  \\\n       memcpy(buffer + buff_offset, from, CU2BYTES(chkmc_length)); \\\n       buff_offset += chkmc_length; \\\n       lengthleft -= chkmc_length; \\\n       }  \\\n     }    \\\n  while (0)\n\n/* This macro checks for space and copies characters with casing modifications.\nOn overflow, it behaves as for CHECKMEMCPY().\n\nWhen substitute_case_callout is NULL, the source and destination buffers must\nnot overlap, because our default handler does not support this. */\n\n#define CHECKCASECPY_BASE(length_, do_call) \\\n  do {    \\\n     PCRE2_SIZE chkcc_length = (PCRE2_SIZE)(length_); \\\n     PCRE2_SIZE chkcc_rc; \\\n     do_call \\\n     if (lengthleft < chkcc_rc) \\\n       {  \\\n       if ((suboptions & PCRE2_SUBSTITUTE_OVERFLOW_LENGTH) == 0) goto NOROOM; \\\n       overflowed = TRUE; \\\n       extra_needed = chkcc_rc - lengthleft; \\\n       }  \\\n     else \\\n       {  \\\n       buff_offset += chkcc_rc; \\\n       lengthleft -= chkcc_rc; \\\n       }  \\\n     }    \\\n  while (0)\n\n#define CHECKCASECPY_DEFAULT(from, length_) \\\n  CHECKCASECPY_BASE(length_, { \\\n    chkcc_rc = default_substitute_case_callout(from, chkcc_length,         \\\n                                               buffer + buff_offset,       \\\n                                               overflowed? 0 : lengthleft, \\\n                                               &forcecase, code);          \\\n    if (overflowed) \\\n      { \\\n      if (chkcc_rc > ~(PCRE2_SIZE)0 - extra_needed)  /* Integer overflow */ \\\n        goto TOOLARGEREPLACE; \\\n      extra_needed += chkcc_rc; \\\n      break; \\\n      } \\\n  })\n\n#define CHECKCASECPY_CALLOUT(length_) \\\n  CHECKCASECPY_BASE(length_, { \\\n    chkcc_rc = do_case_copy(buffer + buff_offset, chkcc_length, \\\n                            lengthleft, &forcecase, utf,        \\\n                            substitute_case_callout,            \\\n                            substitute_case_callout_data);      \\\n    if (chkcc_rc == ~(PCRE2_SIZE)0) goto CASEERROR; \\\n  })\n\n/* This macro does a delayed case transformation, for the situation when we have\na case-forcing callout. */\n\n#define DELAYEDFORCECASE() \\\n  do {      \\\n     PCRE2_SIZE chars_outstanding = (buff_offset - casestart_offset) + \\\n            (extra_needed - casestart_extra_needed); \\\n     if (chars_outstanding > 0) \\\n       {    \\\n       if (overflowed) \\\n         {  \\\n         PCRE2_SIZE guess = pessimistic_case_inflation(chars_outstanding); \\\n         if (guess > ~(PCRE2_SIZE)0 - extra_needed)  /* Integer overflow */ \\\n           goto TOOLARGEREPLACE; \\\n         extra_needed += guess; \\\n         }  \\\n       else \\\n         {  \\\n         /* Rewind the buffer */ \\\n         lengthleft += (buff_offset - casestart_offset); \\\n         buff_offset = casestart_offset; \\\n         /* Care! In-place case transformation */ \\\n         CHECKCASECPY_CALLOUT(chars_outstanding); \\\n         }  \\\n       }    \\\n     }      \\\n  while (0)\n\n\n/* Here's the function */\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_substitute(const pcre2_code *code, PCRE2_SPTR subject, PCRE2_SIZE length,\n  PCRE2_SIZE start_offset, uint32_t options, pcre2_match_data *match_data,\n  pcre2_match_context *mcontext, PCRE2_SPTR replacement, PCRE2_SIZE rlength,\n  PCRE2_UCHAR *buffer, PCRE2_SIZE *blength)\n{\nint rc;\nint subs;\nuint32_t ovector_count;\nuint32_t goptions = 0;\nuint32_t suboptions;\npcre2_match_data *internal_match_data = NULL;\nBOOL escaped_literal = FALSE;\nBOOL overflowed = FALSE;\nBOOL use_existing_match;\nBOOL replacement_only;\nBOOL utf = (code->overall_options & PCRE2_UTF) != 0;\nBOOL partial = (options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0;\nPCRE2_UCHAR temp[6];\nPCRE2_UCHAR null_str[1] = { 0xcd };\nPCRE2_SPTR original_subject = subject;\nPCRE2_SPTR ptr;\nPCRE2_SPTR repend = NULL;\nPCRE2_SIZE extra_needed = 0;\nPCRE2_SIZE buff_offset, buff_length, lengthleft, fraglength;\nPCRE2_SIZE *ovector;\nPCRE2_SIZE ovecsave[2] = { 0, 0 };\npcre2_substitute_callout_block scb;\nPCRE2_SIZE sub_start_extra_needed;\nPCRE2_SIZE (*substitute_case_callout)(PCRE2_SPTR, PCRE2_SIZE, PCRE2_UCHAR *,\n                                      PCRE2_SIZE, int, void *) = NULL;\nvoid *substitute_case_callout_data = NULL;\n\n/* General initialization */\n\nbuff_offset = 0;\nlengthleft = buff_length = *blength;\n*blength = PCRE2_UNSET;\n\nif (mcontext != NULL)\n  {\n  substitute_case_callout = mcontext->substitute_case_callout;\n  substitute_case_callout_data = mcontext->substitute_case_callout_data;\n  }\n\n/* Partial matching is supported, with limitations. We allow matching in partial\nmode, however, if a partial match is found, the substitution will fail with a\nPCRE2_ERROR_PARTIAL error. Additionally, outputting the after-match text is not\nallowed (PCRE2_ERROR_BADOPTION), and certain replacement items such as $' and $_\nare not supported (PCRE2_ERROR_PARTIALSUBS).\n\nThis must come after setting *blength to PCRE2_UNSET, so as not to imply an\noffset in the replacement. */\n\nif (partial && (options & PCRE2_SUBSTITUTE_REPLACEMENT_ONLY) == 0)\n  return PCRE2_ERROR_BADOPTION;\n\n/* Validate length and find the end of the replacement. A NULL replacement of\nzero length is interpreted as an empty string. */\n\nif (replacement == NULL)\n  {\n  if (rlength != 0) return PCRE2_ERROR_NULL;\n  replacement = null_str;\n  }\n\nif (rlength == PCRE2_ZERO_TERMINATED) rlength = PRIV(strlen)(replacement);\nrepend = replacement + rlength;\n\n/* A NULL subject of zero length is treated as an empty string. */\n\nif (subject == NULL)\n  {\n  if (length != 0) return PCRE2_ERROR_NULL;\n  subject = null_str;\n  }\n\nif (length == PCRE2_ZERO_TERMINATED) length = PRIV(strlen)(subject);\n\n/* Check for using a match that has already happened. Note that the subject\npointer in the match data may be NULL after a no-match. */\n\nuse_existing_match = ((options & PCRE2_SUBSTITUTE_MATCHED) != 0);\nreplacement_only = ((options & PCRE2_SUBSTITUTE_REPLACEMENT_ONLY) != 0);\n\nif (use_existing_match && match_data == NULL) return PCRE2_ERROR_NULL;\n\n/* If an existing match is being passed in, we should check that it matches\nthe passed-in subject pointer, length, and match options. We don't currently\nhave a use-case for someone to match on one subject, then try and use that\nmatch data on a different subject. In a UTF-encoded string, a simple change\nlike replacing one character for another won't preserve the code unit offsets,\nso it's hard to see, in the general case, how it would be safe or useful to\nsupport swapping or mutating the subject string.\n\nSimilarly, using different match options between the first (external) and\nsubsequent (internal, global) matches is hard to justify. */\n\nif (use_existing_match)\n  {\n  /* Return early, as the rest of the match_data may not have been\n  initialised. This duplicates and must be in sync with the check below that\n  aborts substitution on any result other than success or no-match. */\n  if (match_data->rc < 0 && match_data->rc != PCRE2_ERROR_NOMATCH)\n    return match_data->rc;\n\n  /* Not supported if the passed-in match was from the DFA interpreter. */\n  if (match_data->matchedby == PCRE2_MATCHEDBY_DFA_INTERPRETER)\n    return PCRE2_ERROR_DFA_UFUNC;\n\n  if (code != match_data->code)\n    return PCRE2_ERROR_DIFFSUBSPATTERN;\n\n  /* We want the passed-in subject strings to match. This implies the effective\n  length must match, and either: the pointers are equal (with strict matching\n  of NULL against NULL); or, the special case of PCRE2_COPY_MATCHED_SUBJECT\n  where we cannot compare pointers but we can verify the contents. */\n  if (length != match_data->subject_length ||\n      !(original_subject == match_data->subject ||\n        ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) != 0 &&\n         (length == 0 ||\n          memcmp(subject, match_data->subject, CU2BYTES(length)) == 0))))\n    return PCRE2_ERROR_DIFFSUBSSUBJECT;\n\n  if (start_offset != match_data->start_offset)\n    return PCRE2_ERROR_DIFFSUBSOFFSET;\n\n  if ((options & ~(SUBSTITUTE_OPTIONS|PCRE2_NO_UTF_CHECK)) !=\n      (match_data->options & ~PCRE2_NO_UTF_CHECK))\n    return PCRE2_ERROR_DIFFSUBSOPTIONS;\n  }\n\n/* If starting from an existing match, there must be an externally provided\nmatch data block. We create an internal match_data block in two cases: (a) an\nexternal one is not supplied (and we are not starting from an existing match);\n(b) an existing match is to be used for the first substitution. In the latter\ncase, we copy the existing match into the internal block, except for any cached\nheap frame size and pointer. This ensures that no changes are made to the\nexternal match data block. */\n\n/* WARNING: In both cases below a general context is constructed \"by hand\"\nbecause calling pcre2_general_context_create() involves a memory allocation. If\nthe contents of a general context control block are ever changed there will\nhave to be changes below. */\n\nif (match_data == NULL)\n  {\n  pcre2_general_context gcontext;\n  gcontext.memctl = (mcontext == NULL)?\n    ((pcre2_real_code *)code)->memctl :\n    ((pcre2_real_match_context *)mcontext)->memctl;\n  match_data = internal_match_data =\n    pcre2_match_data_create_from_pattern(code, &gcontext);\n  if (internal_match_data == NULL) return PCRE2_ERROR_NOMEMORY;\n  }\n\nelse if (use_existing_match)\n  {\n  int pairs;\n  pcre2_general_context gcontext;\n  gcontext.memctl = (mcontext == NULL)?\n    ((pcre2_real_code *)code)->memctl :\n    ((pcre2_real_match_context *)mcontext)->memctl;\n  pairs = (code->top_bracket + 1 < match_data->oveccount)?\n    code->top_bracket + 1 : match_data->oveccount;\n  internal_match_data = pcre2_match_data_create(match_data->oveccount,\n    &gcontext);\n  if (internal_match_data == NULL) return PCRE2_ERROR_NOMEMORY;\n  memcpy(internal_match_data, match_data, offsetof(pcre2_match_data, ovector)\n    + 2*pairs*sizeof(PCRE2_SIZE));\n  internal_match_data->heapframes = NULL;\n  internal_match_data->heapframes_size = 0;\n  /* Ensure that the subject is not freed when internal_match_data is */\n  internal_match_data->flags &= ~PCRE2_MD_COPIED_SUBJECT;\n  match_data = internal_match_data;\n  }\n\n/* If using an internal match data, there's no need to copy the subject. */\n\nif (internal_match_data != NULL) options &= ~PCRE2_COPY_MATCHED_SUBJECT;\n\n/* Remember ovector details */\n\novector = pcre2_get_ovector_pointer(match_data);\novector_count = pcre2_get_ovector_count(match_data);\n\n/* Fixed things in the callout block */\n\nscb.version = 0;\nscb.input = subject;\nscb.output = (PCRE2_SPTR)buffer;\nscb.ovector = ovector;\n\n/* Check UTF replacement string if necessary. */\n\n#ifdef SUPPORT_UNICODE\nif (utf && (options & PCRE2_NO_UTF_CHECK) == 0)\n  {\n  rc = PRIV(valid_utf)(replacement, rlength, &(match_data->startchar));\n  if (rc != 0)\n    {\n    match_data->leftchar = 0;\n    goto EXIT;\n    }\n  }\n#endif  /* SUPPORT_UNICODE */\n\n/* Save the substitute options and remove them from the match options. */\n\nsuboptions = options & SUBSTITUTE_OPTIONS;\noptions &= ~SUBSTITUTE_OPTIONS;\n\n/* Error if the start match offset is greater than the length of the subject. */\n\nif (start_offset > length)\n  {\n  match_data->leftchar = 0;\n  rc = PCRE2_ERROR_BADOFFSET;\n  goto EXIT;\n  }\n\n/* Copy up to the start offset, unless only the replacement is required. */\n\nif (!replacement_only) CHECKMEMCPY(subject, start_offset);\n\n/* Loop for global substituting. If PCRE2_SUBSTITUTE_MATCHED is set, the first\nmatch is taken from the match_data that was passed in. */\n\nsubs = 0;\nfor (;;)\n  {\n  PCRE2_SPTR ptrstack[PTR_STACK_SIZE];\n  uint32_t ptrstackptr = 0;\n  case_state forcecase = { PCRE2_SUBSTITUTE_CASE_NONE, FALSE };\n  PCRE2_SIZE casestart_offset = 0;\n  PCRE2_SIZE casestart_extra_needed = 0;\n\n  if (use_existing_match)\n    {\n    rc = match_data->rc;\n    use_existing_match = FALSE;\n    }\n  else rc = pcre2_match(code, subject, length, start_offset, options|goptions,\n    match_data, mcontext);\n\n#ifdef SUPPORT_UNICODE\n  if (utf) options |= PCRE2_NO_UTF_CHECK;  /* Only need to check once */\n#endif\n\n  /* Any error other than no match returns the error code. No match breaks the\n  global loop. */\n\n  if (rc == PCRE2_ERROR_NOMATCH) break;\n\n  if (rc < 0) goto EXIT;\n\n  /* Handle a successful match. Matches that use \\K to end before they start\n  or start before the current point in the subject are not supported. */\n\n  if (ovector[1] < ovector[0] || ovector[0] < start_offset)\n    {\n    rc = PCRE2_ERROR_BADSUBSPATTERN;\n    goto EXIT;\n    }\n\n  /* Assert that our replacement loop is making progress, checked even in\n  release builds. This should be impossible to hit, however, an infinite loop\n  would be fairly catastrophic.\n\n  \"Progress\" is measured as ovector[1] strictly advancing, or, an empty match\n  after a non-empty match. */\n\n  /* LCOV_EXCL_START */\n  if (subs > 0 &&\n      !(ovector[1] > ovecsave[1] ||\n        (ovector[1] == ovector[0] && ovecsave[1] > ovecsave[0] &&\n         ovector[1] == ovecsave[1])))\n    {\n    PCRE2_DEBUG_UNREACHABLE();\n    rc = PCRE2_ERROR_INTERNAL_DUPMATCH;\n    goto EXIT;\n    }\n  /* LCOV_EXCL_STOP */\n\n  ovecsave[0] = ovector[0];\n  ovecsave[1] = ovector[1];\n\n  /* Count substitutions with a paranoid check for integer overflow; surely no\n  real call to this function would ever hit this! */\n\n  if (subs == INT_MAX)\n    {\n    rc = PCRE2_ERROR_TOOMANYREPLACE;\n    goto EXIT;\n    }\n  subs++;\n\n  /* Copy the text leading up to the match (unless not required); remember\n  where the insert begins and how many ovector pairs are set; and remember how\n  much space we have requested in extra_needed. */\n\n  if (rc == 0) rc = ovector_count;\n  fraglength = ovector[0] - start_offset;\n  if (!replacement_only) CHECKMEMCPY(subject + start_offset, fraglength);\n  scb.output_offsets[0] = buff_offset;\n  scb.oveccount = rc;\n  sub_start_extra_needed = extra_needed;\n\n  /* Process the replacement string. If the entire replacement is literal, just\n  copy it with length check. */\n\n  ptr = replacement;\n  if ((suboptions & PCRE2_SUBSTITUTE_LITERAL) != 0)\n    {\n    CHECKMEMCPY(ptr, rlength);\n    }\n\n  /* Within a non-literal replacement, which must be scanned character by\n  character, local literal mode can be set by \\Q, but only in extended mode\n  when backslashes are being interpreted. In extended mode we must handle\n  nested substrings that are to be reprocessed. */\n\n  else for (;;)\n    {\n    uint32_t ch;\n    unsigned int chlen;\n    int group;\n    uint32_t special;\n    PCRE2_SPTR text1_start = NULL;\n    PCRE2_SPTR text1_end = NULL;\n    PCRE2_SPTR text2_start = NULL;\n    PCRE2_SPTR text2_end = NULL;\n    PCRE2_UCHAR name[MAX_NAME_SIZE + 1];\n\n    /* If at the end of a nested substring, pop the stack. */\n\n    if (ptr >= repend)\n      {\n      if (ptrstackptr == 0) break;       /* End of replacement string */\n      repend = ptrstack[--ptrstackptr];\n      ptr = ptrstack[--ptrstackptr];\n      continue;\n      }\n\n    /* Handle the next character */\n\n    if (escaped_literal)\n      {\n      if (ptr[0] == CHAR_BACKSLASH && ptr < repend - 1 && ptr[1] == CHAR_E)\n        {\n        escaped_literal = FALSE;\n        ptr += 2;\n        continue;\n        }\n      goto LOADLITERAL;\n      }\n\n    /* Not in literal mode. */\n\n    if (*ptr == CHAR_DOLLAR_SIGN)\n      {\n      BOOL inparens;\n      BOOL inangle;\n      BOOL star;\n      PCRE2_SIZE sublength;\n      PCRE2_UCHAR next;\n      PCRE2_SPTR subptr, subptrend;\n\n      if (++ptr >= repend) goto BAD;\n      if ((next = *ptr) == CHAR_DOLLAR_SIGN) goto LOADLITERAL;\n\n      special = 0;\n      text1_start = NULL;\n      text1_end = NULL;\n      text2_start = NULL;\n      text2_end = NULL;\n      group = -1;\n      inparens = FALSE;\n      inangle = FALSE;\n      star = FALSE;\n      subptr = NULL;\n      subptrend = NULL;\n\n      /* Special $ sequences, as supported by Perl, JavaScript, .NET and others. */\n      if (next == CHAR_AMPERSAND)\n        {\n        ++ptr;\n        group = 0;\n        goto GROUP_SUBSTITUTE;\n        }\n      if (next == CHAR_GRAVE_ACCENT || next == CHAR_APOSTROPHE)\n        {\n        ++ptr;\n\n        /* (Sanity-check ovector before reading from it.) */\n        rc = pcre2_substring_length_bynumber(match_data, 0, &sublength);\n        /* LCOV_EXCL_START */\n        if (rc < 0)\n          {\n          PCRE2_DEBUG_UNREACHABLE();\n          goto PTREXIT;\n          }\n        /* LCOV_EXCL_STOP */\n\n        if (next == CHAR_GRAVE_ACCENT)\n          {\n          subptr = subject;\n          subptrend = subject + ovector[0];\n          }\n        else\n          {\n          if (partial)\n            {\n            rc = PCRE2_ERROR_PARTIALSUBS;\n            goto PTREXIT;\n            }\n\n          subptr = subject + ovector[1];\n          subptrend = subject + length;\n          }\n\n        goto SUBPTR_SUBSTITUTE;\n        }\n      if (next == CHAR_UNDERSCORE)\n        {\n        /* Java, .NET support $_ for \"entire input string\". */\n        ++ptr;\n\n        if (partial)\n          {\n          rc = PCRE2_ERROR_PARTIALSUBS;\n          goto PTREXIT;\n          }\n\n        subptr = subject;\n        subptrend = subject + length;\n        goto SUBPTR_SUBSTITUTE;\n        }\n      if (next == CHAR_PLUS &&\n          !(ptr+1 < repend && ptr[1] == CHAR_LEFT_CURLY_BRACKET))\n        {\n        /* Perl supports $+ for \"highest captured group\" (not the same as $^N\n        which is mainly only useful inside Perl's match callbacks). We also\n        don't accept \"$+{...\" since that's Perl syntax for our ${name}. */\n        ++ptr;\n        if (code->top_bracket == 0)\n          {\n          /* Treat either as \"no such group\" or \"all groups unset\" based on the\n          PCRE2_SUBSTITUTE_UNKNOWN_UNSET option. */\n          if ((suboptions & PCRE2_SUBSTITUTE_UNKNOWN_UNSET) == 0)\n            {\n            rc = PCRE2_ERROR_NOSUBSTRING;\n            goto PTREXIT;\n            }\n          group = 0;\n          }\n        else\n          {\n          /* If we have any capture groups, then the ovector needs to be large\n          enough for all of them, or the result won't be accurate. */\n          if (match_data->oveccount < code->top_bracket + 1)\n            {\n            rc = PCRE2_ERROR_UNAVAILABLE;\n            goto PTREXIT;\n            }\n          for (group = code->top_bracket; group > 0; group--)\n            if (ovector[2*group] != PCRE2_UNSET) break;\n          }\n        if (group == 0)\n          {\n          if ((suboptions & PCRE2_SUBSTITUTE_UNSET_EMPTY) != 0) continue;\n          rc = PCRE2_ERROR_UNSET;\n          goto PTREXIT;\n          }\n        goto GROUP_SUBSTITUTE;\n        }\n\n      if (next == CHAR_LEFT_CURLY_BRACKET)\n        {\n        if (++ptr >= repend) goto BAD;\n        next = *ptr;\n        inparens = TRUE;\n        }\n      else if (next == CHAR_LESS_THAN_SIGN)\n        {\n        /* JavaScript compatibility syntax, $<name>. Processes only named\n        groups (not numbered) and does not support extensions such as star\n        (you can do ${name} and ${*name}, but not $<*name>). */\n        if (++ptr >= repend) goto BAD;\n        next = *ptr;\n        inangle = TRUE;\n        }\n\n      if (!inangle && next == CHAR_ASTERISK)\n        {\n        if (++ptr >= repend) goto BAD;\n        next = *ptr;\n        star = TRUE;\n        }\n\n      if (!star && !inangle && next >= CHAR_0 && next <= CHAR_9)\n        {\n        group = next - CHAR_0;\n        while (++ptr < repend)\n          {\n          next = *ptr;\n          if (next < CHAR_0 || next > CHAR_9) break;\n          group = group * 10 + (next - CHAR_0);\n\n          /* A check for a number greater than the hightest captured group\n          is sufficient here; no need for a separate overflow check. If unknown\n          groups are to be treated as unset, just skip over any remaining\n          digits and carry on. */\n\n          if (group > code->top_bracket)\n            {\n            if ((suboptions & PCRE2_SUBSTITUTE_UNKNOWN_UNSET) != 0)\n              {\n              while (++ptr < repend && *ptr >= CHAR_0 && *ptr <= CHAR_9);\n              break;\n              }\n            else\n              {\n              rc = PCRE2_ERROR_NOSUBSTRING;\n              goto PTREXIT;\n              }\n            }\n          }\n        }\n      else\n        {\n        PCRE2_SIZE name_len;\n        PCRE2_SPTR name_start = ptr;\n        if (!read_name_subst(&ptr, repend, utf, code->tables + ctypes_offset))\n          goto BAD;\n        name_len = ptr - name_start;\n        memcpy(name, name_start, CU2BYTES(name_len));\n        name[name_len] = 0;\n        }\n\n      next = 0; /* not used or updated after this point */\n      (void)next;\n\n      /* In extended mode we recognize ${name:+set text:unset text} and\n      ${name:-default text}. */\n\n      if (inparens)\n        {\n        if ((suboptions & PCRE2_SUBSTITUTE_EXTENDED) != 0 &&\n             !star && ptr < repend - 2 && *ptr == CHAR_COLON)\n          {\n          special = *(++ptr);\n          if (special != CHAR_PLUS && special != CHAR_MINUS)\n            {\n            rc = PCRE2_ERROR_BADSUBSTITUTION;\n            goto PTREXIT;\n            }\n\n          text1_start = ++ptr;\n          rc = find_text_end(code, &ptr, repend, special == CHAR_MINUS);\n          if (rc != 0) goto PTREXIT;\n          text1_end = ptr;\n\n          if (special == CHAR_PLUS && *ptr == CHAR_COLON)\n            {\n            text2_start = ++ptr;\n            rc = find_text_end(code, &ptr, repend, TRUE);\n            if (rc != 0) goto PTREXIT;\n            text2_end = ptr;\n            }\n          }\n\n        else\n          {\n          if (ptr >= repend || *ptr != CHAR_RIGHT_CURLY_BRACKET)\n            {\n            rc = PCRE2_ERROR_REPMISSINGBRACE;\n            goto PTREXIT;\n            }\n          }\n\n        ptr++;\n        }\n\n      if (inangle)\n        {\n        if (ptr >= repend || *ptr != CHAR_GREATER_THAN_SIGN)\n          goto BAD;\n        ptr++;\n        }\n\n      /* Have found a syntactically correct group number or name, or *name.\n      Only *MARK is currently recognized. */\n\n      if (star)\n        {\n        if (PRIV(strcmp_c8)(name, STRING_MARK) == 0)\n          {\n          PCRE2_SPTR mark = pcre2_get_mark(match_data);\n          if (mark != NULL)\n            {\n            /* Peek backwards one code unit to obtain the length of the mark.\n            It can (theoretically) contain an embedded NUL. */\n            fraglength = mark[-1];\n            if (forcecase.to_case != PCRE2_SUBSTITUTE_CASE_NONE &&\n                substitute_case_callout == NULL)\n              CHECKCASECPY_DEFAULT(mark, fraglength);\n            else\n              CHECKMEMCPY(mark, fraglength);\n            }\n          }\n        else goto BAD;\n        }\n\n      /* Substitute the contents of a group. We don't use substring_copy\n      functions any more, in order to support case forcing. */\n\n      else\n        {\n        GROUP_SUBSTITUTE:\n        /* Find a number for a named group. In case there are duplicate names,\n        search for the first one that is set. If the name is not found when\n        PCRE2_SUBSTITUTE_UNKNOWN_EMPTY is set, set the group number to a\n        non-existent group. */\n\n        if (group < 0)\n          {\n          PCRE2_SPTR first, last, entry;\n          rc = pcre2_substring_nametable_scan(code, name, &first, &last);\n          if (rc == PCRE2_ERROR_NOSUBSTRING &&\n              (suboptions & PCRE2_SUBSTITUTE_UNKNOWN_UNSET) != 0)\n            {\n            group = code->top_bracket + 1;\n            }\n          else\n            {\n            if (rc < 0) goto PTREXIT;\n            for (entry = first; entry <= last; entry += rc)\n              {\n              uint32_t ng = GET2(entry, 0);\n              if (ng < ovector_count)\n                {\n                if (group < 0) group = ng;          /* First in ovector */\n                if (ovector[ng*2] != PCRE2_UNSET)\n                  {\n                  group = ng;                       /* First that is set */\n                  break;\n                  }\n                }\n              }\n\n            /* If group is still negative, it means we did not find a group\n            that is in the ovector. Just set the first group. */\n\n            if (group < 0) group = GET2(first, 0);\n            }\n          }\n\n        /* We now have a group that is identified by number. Find the length of\n        the captured string. If a group in a non-special substitution is unset\n        when PCRE2_SUBSTITUTE_UNSET_EMPTY is set, substitute nothing. */\n\n        rc = pcre2_substring_length_bynumber(match_data, group, &sublength);\n        if (rc < 0)\n          {\n          if (rc == PCRE2_ERROR_NOSUBSTRING &&\n              (suboptions & PCRE2_SUBSTITUTE_UNKNOWN_UNSET) != 0)\n            {\n            rc = PCRE2_ERROR_UNSET;\n            }\n          if (rc != PCRE2_ERROR_UNSET) goto PTREXIT;  /* Non-unset errors */\n          if (special == 0)                           /* Plain substitution */\n            {\n            if ((suboptions & PCRE2_SUBSTITUTE_UNSET_EMPTY) != 0) continue;\n            goto PTREXIT;                             /* Else error */\n            }\n          }\n\n        /* If special is '+' we have a 'set' and possibly an 'unset' text,\n        both of which are reprocessed when used. If special is '-' we have a\n        default text for when the group is unset; it must be reprocessed. */\n\n        if (special != 0)\n          {\n          if (special == CHAR_MINUS)\n            {\n            if (rc == 0) goto LITERAL_SUBSTITUTE;\n            text2_start = text1_start;\n            text2_end = text1_end;\n            }\n\n          if (ptrstackptr >= PTR_STACK_SIZE) goto BAD;\n          ptrstack[ptrstackptr++] = ptr;\n          ptrstack[ptrstackptr++] = repend;\n\n          if (rc == 0)\n            {\n            ptr = text1_start;\n            repend = text1_end;\n            }\n          else\n            {\n            ptr = text2_start;\n            repend = text2_end;\n            }\n          continue;\n          }\n\n        /* Otherwise we have a literal substitution of a group's contents. */\n\n        LITERAL_SUBSTITUTE:\n        subptr = subject + ovector[group*2];\n        subptrend = subject + ovector[group*2 + 1];\n\n        /* Substitute a literal string, possibly forcing alphabetic case. */\n\n        SUBPTR_SUBSTITUTE:\n        if (forcecase.to_case != PCRE2_SUBSTITUTE_CASE_NONE &&\n            substitute_case_callout == NULL)\n          CHECKCASECPY_DEFAULT(subptr, subptrend - subptr);\n        else\n          CHECKMEMCPY(subptr, subptrend - subptr);\n        }\n      }   /* End of $ processing */\n\n    /* Handle an escape sequence in extended mode. We can use check_escape()\n    to process \\Q, \\E, \\c, \\o, \\x and \\ followed by non-alphanumerics, but\n    the case-forcing escapes are not supported in pcre2_compile() so must be\n    recognized here. */\n\n    else if ((suboptions & PCRE2_SUBSTITUTE_EXTENDED) != 0 &&\n              *ptr == CHAR_BACKSLASH)\n      {\n      int errorcode;\n      case_state new_forcecase = { PCRE2_SUBSTITUTE_CASE_NONE, FALSE };\n\n      if (ptr < repend - 1) switch (ptr[1])\n        {\n        case CHAR_L:\n        new_forcecase.to_case = PCRE2_SUBSTITUTE_CASE_LOWER;\n        new_forcecase.single_char = FALSE;\n        ptr += 2;\n        break;\n\n        case CHAR_l:\n        new_forcecase.to_case = PCRE2_SUBSTITUTE_CASE_LOWER;\n        new_forcecase.single_char = TRUE;\n        ptr += 2;\n        if (ptr + 2 < repend && ptr[0] == CHAR_BACKSLASH && ptr[1] == CHAR_U)\n          {\n          /* Perl reverse-title-casing feature for \\l\\U */\n          new_forcecase.to_case = PCRE2_SUBSTITUTE_CASE_REVERSE_TITLE_FIRST;\n          new_forcecase.single_char = FALSE;\n          ptr += 2;\n          }\n        break;\n\n        case CHAR_U:\n        new_forcecase.to_case = PCRE2_SUBSTITUTE_CASE_UPPER;\n        new_forcecase.single_char = FALSE;\n        ptr += 2;\n        break;\n\n        case CHAR_u:\n        new_forcecase.to_case = PCRE2_SUBSTITUTE_CASE_TITLE_FIRST;\n        new_forcecase.single_char = TRUE;\n        ptr += 2;\n        if (ptr + 2 < repend && ptr[0] == CHAR_BACKSLASH && ptr[1] == CHAR_L)\n          {\n          /* Perl title-casing feature for \\u\\L */\n          new_forcecase.to_case = PCRE2_SUBSTITUTE_CASE_TITLE_FIRST;\n          new_forcecase.single_char = FALSE;\n          ptr += 2;\n          }\n        break;\n\n        default:\n        break;\n        }\n\n      if (new_forcecase.to_case != PCRE2_SUBSTITUTE_CASE_NONE)\n        {\n        SETFORCECASE:\n\n        /* If the substitute_case_callout is unset, our case-forcing is done\n        immediately. If there is a callout however, then its action is delayed\n        until all the characters have been collected.\n\n        Apply the callout now, before we set the new casing mode. */\n\n        if (substitute_case_callout != NULL &&\n            forcecase.to_case != PCRE2_SUBSTITUTE_CASE_NONE)\n          DELAYEDFORCECASE();\n\n        forcecase = new_forcecase;\n        casestart_offset = buff_offset;\n        casestart_extra_needed = extra_needed;\n        continue;\n        }\n\n      ptr++;  /* Point after \\ */\n      rc = PRIV(check_escape)(&ptr, repend, &ch, &errorcode,\n        code->overall_options, code->extra_options, code->top_bracket, FALSE, NULL);\n      if (errorcode != 0) goto BADESCAPE;\n\n      switch(rc)\n        {\n        case ESC_E:\n        goto SETFORCECASE;\n\n        case ESC_Q:\n        escaped_literal = TRUE;\n        continue;\n\n        case 0:      /* Data character */\n        case ESC_b:  /* \\b is backspace in a substitution */\n        case ESC_v:  /* \\v is vertical tab in a substitution */\n\n        if (rc == ESC_b) ch = CHAR_BS;\n        if (rc == ESC_v) ch = CHAR_VT;\n\n#ifdef SUPPORT_UNICODE\n        if (utf) chlen = PRIV(ord2utf)(ch, temp); else\n#endif\n          {\n          temp[0] = ch;\n          chlen = 1;\n          }\n\n        if (forcecase.to_case != PCRE2_SUBSTITUTE_CASE_NONE &&\n            substitute_case_callout == NULL)\n          CHECKCASECPY_DEFAULT(temp, chlen);\n        else\n          CHECKMEMCPY(temp, chlen);\n        continue;\n\n        case ESC_g:\n          {\n          PCRE2_SIZE name_len;\n          PCRE2_SPTR name_start;\n\n          /* Parse the \\g<name> form (\\g<number> already handled by check_escape) */\n          if (ptr >= repend || *ptr != CHAR_LESS_THAN_SIGN)\n            goto BADESCAPE;\n          ++ptr;\n\n          name_start = ptr;\n          if (!read_name_subst(&ptr, repend, utf, code->tables + ctypes_offset))\n            goto BADESCAPE;\n          name_len = ptr - name_start;\n\n          if (ptr >= repend || *ptr != CHAR_GREATER_THAN_SIGN)\n            goto BADESCAPE;\n          ++ptr;\n\n          special = 0;\n          group = -1;\n          memcpy(name, name_start, CU2BYTES(name_len));\n          name[name_len] = 0;\n          goto GROUP_SUBSTITUTE;\n          }\n\n        default:\n        if (rc < 0)\n          {\n          special = 0;\n          group = -rc - 1;\n          goto GROUP_SUBSTITUTE;\n          }\n        goto BADESCAPE;\n        }\n      }   /* End of backslash processing */\n\n    /* Handle a literal code unit */\n\n    else\n      {\n      PCRE2_SPTR ch_start;\n\n      LOADLITERAL:\n      ch_start = ptr;\n      GETCHARINCTEST(ch, ptr);    /* Get character value, increment pointer */\n      (void) ch;\n\n      if (forcecase.to_case != PCRE2_SUBSTITUTE_CASE_NONE &&\n          substitute_case_callout == NULL)\n        CHECKCASECPY_DEFAULT(ch_start, ptr - ch_start);\n      else\n        CHECKMEMCPY(ch_start, ptr - ch_start);\n      } /* End handling a literal code unit */\n    }   /* End of loop for scanning the replacement. */\n\n  /* If the substitute_case_callout is unset, our case-forcing is done\n  immediately. If there is a callout however, then its action is delayed\n  until all the characters have been collected.\n\n  We now clean up any trailing section of the replacement for which we deferred\n  the case-forcing. */\n\n  if (substitute_case_callout != NULL &&\n      forcecase.to_case != PCRE2_SUBSTITUTE_CASE_NONE)\n    DELAYEDFORCECASE();\n\n  /* The replacement has been copied to the output, or its size has been\n  remembered. Handle the callout if there is one. */\n\n  if (mcontext != NULL && mcontext->substitute_callout != NULL)\n    {\n    /* If we an actual (non-simulated) replacement, do the callout. */\n\n    if (!overflowed)\n      {\n      scb.subscount = subs;\n      scb.output_offsets[1] = buff_offset;\n      rc = mcontext->substitute_callout(&scb,\n                                        mcontext->substitute_callout_data);\n\n      /* A non-zero return means cancel this substitution. Instead, copy the\n      matched string fragment. */\n\n      if (rc != 0)\n        {\n        PCRE2_SIZE newlength = scb.output_offsets[1] - scb.output_offsets[0];\n        PCRE2_SIZE oldlength = ovector[1] - ovector[0];\n\n        buff_offset -= newlength;\n        lengthleft += newlength;\n        if (!replacement_only) CHECKMEMCPY(subject + ovector[0], oldlength);\n\n        /* A negative return means do not do any more. */\n\n        if (rc < 0) suboptions &= (~PCRE2_SUBSTITUTE_GLOBAL);\n        }\n      }\n\n    /* In this interesting case, we cannot do the callout, so it's hard to\n    estimate the required buffer size. What callers want is to be able to make\n    two calls to pcre2_substitute(), once with PCRE2_SUBSTITUTE_OVERFLOW_LENGTH\n    to discover the buffer size, and then a second and final call. Older\n    versions of PCRE2 violated this assumption, by proceding as if the callout\n    had returned zero - but on the second call to pcre2_substitute() it could\n    return non-zero and then overflow the buffer again. Callers probably don't\n    want to keep on looping to incrementally discover the buffer size. */\n\n    else\n      {\n      PCRE2_SIZE newlength_buf = buff_offset - scb.output_offsets[0];\n      PCRE2_SIZE newlength_extra = extra_needed - sub_start_extra_needed;\n      PCRE2_SIZE newlength =\n        (newlength_extra > ~(PCRE2_SIZE)0 - newlength_buf)?  /* Integer overflow */\n        ~(PCRE2_SIZE)0 : newlength_buf + newlength_extra;    /* Cap the addition */\n      PCRE2_SIZE oldlength = ovector[1] - ovector[0];\n\n      /* Be pessimistic: request whichever buffer size is larger out of\n      accepting or rejecting the substitution. */\n\n      if (oldlength > newlength)\n        {\n        PCRE2_SIZE additional = oldlength - newlength;\n        if (additional > ~(PCRE2_SIZE)0 - extra_needed)  /* Integer overflow */\n          goto TOOLARGEREPLACE;\n        extra_needed += additional;\n        }\n\n      /* Proceed as if the callout did not return a negative. A negative\n      effectively rejects all future substitutions, but we want to examine them\n      pessimistically. */\n      }\n    }\n\n  /* Exit the global loop if we are not in global mode, or if pcre2_next_match()\n  indicates we have reached the end of the subject. */\n\n  if ((suboptions & PCRE2_SUBSTITUTE_GLOBAL) == 0 ||\n      !pcre2_next_match(match_data, &start_offset, &goptions))\n    {\n    start_offset = ovector[1];\n    break;\n    }\n\n  /* Verify that pcre2_next_match() has not done a bumpalong (because we have\n  already returned PCRE2_ERROR_BADSUBSPATTERN for \\K in lookarounds).\n\n  We would otherwise have to memcpy the fragment spanning from ovector[1] to the\n  new start_offset.*/\n\n  PCRE2_ASSERT(start_offset == ovector[1]);\n\n  }  /* End of global loop */\n\n/* Copy the rest of the subject unless not required, and terminate the output\nwith a binary zero. */\n\nif (!replacement_only)\n  {\n  fraglength = length - start_offset;\n  CHECKMEMCPY(subject + start_offset, fraglength);\n  }\n\ntemp[0] = 0;\nCHECKMEMCPY(temp, 1);\n\n/* If overflowed is set it means the PCRE2_SUBSTITUTE_OVERFLOW_LENGTH is set,\nand matching has carried on after a full buffer, in order to compute the length\nneeded. Otherwise, an overflow generates an immediate error return. */\n\nif (overflowed)\n  {\n  rc = PCRE2_ERROR_NOMEMORY;\n\n  if (extra_needed > ~(PCRE2_SIZE)0 - buff_length)  /* Integer overflow */\n    goto TOOLARGEREPLACE;\n  *blength = buff_length + extra_needed;\n  }\n\n/* After a successful execution, return the number of substitutions and set the\nlength of buffer used, excluding the trailing zero. */\n\nelse\n  {\n  rc = subs;\n  *blength = buff_offset - 1;\n  }\n\nEXIT:\nif (internal_match_data != NULL) pcre2_match_data_free(internal_match_data);\n  else match_data->rc = rc;\nreturn rc;\n\nNOROOM:\nrc = PCRE2_ERROR_NOMEMORY;\ngoto EXIT;\n\nCASEERROR:\nrc = PCRE2_ERROR_REPLACECASE;\ngoto EXIT;\n\nTOOLARGEREPLACE:\nrc = PCRE2_ERROR_TOOLARGEREPLACE;\ngoto EXIT;\n\nBAD:\nrc = PCRE2_ERROR_BADREPLACEMENT;\ngoto PTREXIT;\n\nBADESCAPE:\nrc = PCRE2_ERROR_BADREPESCAPE;\n\nPTREXIT:\n*blength = (PCRE2_SIZE)(ptr - replacement);\ngoto EXIT;\n}\n\n/* End of pcre2_substitute.c */\n"
  },
  {
    "path": "src/pcre2_substring.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/*************************************************\n*   Copy named captured string to given buffer   *\n*************************************************/\n\n/* This function copies a single captured substring into a given buffer,\nidentifying it by name. If the regex permits duplicate names, the first\nsubstring that is set is chosen.\n\nArguments:\n  match_data     points to the match data\n  stringname     the name of the required substring\n  buffer         where to put the substring\n  sizeptr        the size of the buffer, updated to the size of the substring\n\nReturns:         if successful: zero\n                 if not successful, a negative error code:\n                   (1) an error from nametable_scan()\n                   (2) an error from copy_bynumber()\n                   (3) PCRE2_ERROR_UNAVAILABLE: no group is in ovector\n                   (4) PCRE2_ERROR_UNSET: all named groups in ovector are unset\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_substring_copy_byname(pcre2_match_data *match_data, PCRE2_SPTR stringname,\n  PCRE2_UCHAR *buffer, PCRE2_SIZE *sizeptr)\n{\nPCRE2_SPTR first, last, entry;\nint failrc, entrysize;\nif (match_data->matchedby == PCRE2_MATCHEDBY_DFA_INTERPRETER)\n  return PCRE2_ERROR_DFA_UFUNC;\nentrysize = pcre2_substring_nametable_scan(match_data->code, stringname,\n  &first, &last);\nif (entrysize < 0) return entrysize;\nfailrc = PCRE2_ERROR_UNAVAILABLE;\nfor (entry = first; entry <= last; entry += entrysize)\n  {\n  uint32_t n = GET2(entry, 0);\n  if (n < match_data->oveccount)\n    {\n    if (match_data->ovector[n*2] != PCRE2_UNSET)\n      return pcre2_substring_copy_bynumber(match_data, n, buffer, sizeptr);\n    failrc = PCRE2_ERROR_UNSET;\n    }\n  }\nreturn failrc;\n}\n\n\n\n/*************************************************\n*  Copy numbered captured string to given buffer *\n*************************************************/\n\n/* This function copies a single captured substring into a given buffer,\nidentifying it by number.\n\nArguments:\n  match_data     points to the match data\n  stringnumber   the number of the required substring\n  buffer         where to put the substring\n  sizeptr        the size of the buffer, updated to the size of the substring\n\nReturns:         if successful: 0\n                 if not successful, a negative error code:\n                   PCRE2_ERROR_NOMEMORY: buffer too small\n                   PCRE2_ERROR_NOSUBSTRING: no such substring\n                   PCRE2_ERROR_UNAVAILABLE: ovector too small\n                   PCRE2_ERROR_UNSET: substring is not set\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_substring_copy_bynumber(pcre2_match_data *match_data,\n  uint32_t stringnumber, PCRE2_UCHAR *buffer, PCRE2_SIZE *sizeptr)\n{\nint rc;\nPCRE2_SIZE size;\nrc = pcre2_substring_length_bynumber(match_data, stringnumber, &size);\nif (rc < 0) return rc;\nif (size + 1 > *sizeptr) return PCRE2_ERROR_NOMEMORY;\nif (size != 0) memcpy(buffer, match_data->subject + match_data->ovector[stringnumber*2],\n  CU2BYTES(size));\nbuffer[size] = 0;\n*sizeptr = size;\nreturn 0;\n}\n\n\n\n/*************************************************\n*          Extract named captured string         *\n*************************************************/\n\n/* This function copies a single captured substring, identified by name, into\nnew memory. If the regex permits duplicate names, the first substring that is\nset is chosen.\n\nArguments:\n  match_data     pointer to match_data\n  stringname     the name of the required substring\n  stringptr      where to put the pointer to the new memory\n  sizeptr        where to put the length of the substring\n\nReturns:         if successful: zero\n                 if not successful, a negative value:\n                   (1) an error from nametable_scan()\n                   (2) an error from get_bynumber()\n                   (3) PCRE2_ERROR_UNAVAILABLE: no group is in ovector\n                   (4) PCRE2_ERROR_UNSET: all named groups in ovector are unset\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_substring_get_byname(pcre2_match_data *match_data,\n  PCRE2_SPTR stringname, PCRE2_UCHAR **stringptr, PCRE2_SIZE *sizeptr)\n{\nPCRE2_SPTR first, last, entry;\nint failrc, entrysize;\nif (match_data->matchedby == PCRE2_MATCHEDBY_DFA_INTERPRETER)\n  return PCRE2_ERROR_DFA_UFUNC;\nentrysize = pcre2_substring_nametable_scan(match_data->code, stringname,\n  &first, &last);\nif (entrysize < 0) return entrysize;\nfailrc = PCRE2_ERROR_UNAVAILABLE;\nfor (entry = first; entry <= last; entry += entrysize)\n  {\n  uint32_t n = GET2(entry, 0);\n  if (n < match_data->oveccount)\n    {\n    if (match_data->ovector[n*2] != PCRE2_UNSET)\n      return pcre2_substring_get_bynumber(match_data, n, stringptr, sizeptr);\n    failrc = PCRE2_ERROR_UNSET;\n    }\n  }\nreturn failrc;\n}\n\n\n\n/*************************************************\n*      Extract captured string to new memory     *\n*************************************************/\n\n/* This function copies a single captured substring into a piece of new\nmemory.\n\nArguments:\n  match_data     points to match data\n  stringnumber   the number of the required substring\n  stringptr      where to put a pointer to the new memory\n  sizeptr        where to put the size of the substring\n\nReturns:         if successful: 0\n                 if not successful, a negative error code:\n                   PCRE2_ERROR_NOMEMORY: failed to get memory\n                   PCRE2_ERROR_NOSUBSTRING: no such substring\n                   PCRE2_ERROR_UNAVAILABLE: ovector too small\n                   PCRE2_ERROR_UNSET: substring is not set\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_substring_get_bynumber(pcre2_match_data *match_data,\n  uint32_t stringnumber, PCRE2_UCHAR **stringptr, PCRE2_SIZE *sizeptr)\n{\nint rc;\nPCRE2_SIZE size;\nPCRE2_UCHAR *yield;\nrc = pcre2_substring_length_bynumber(match_data, stringnumber, &size);\nif (rc < 0) return rc;\nyield = PRIV(memctl_malloc)(sizeof(pcre2_memctl) +\n  (size + 1)*PCRE2_CODE_UNIT_WIDTH, (pcre2_memctl *)match_data);\nif (yield == NULL) return PCRE2_ERROR_NOMEMORY;\nyield = (PCRE2_UCHAR *)(((char *)yield) + sizeof(pcre2_memctl));\nif (size != 0) memcpy(yield, match_data->subject + match_data->ovector[stringnumber*2],\n  CU2BYTES(size));\nyield[size] = 0;\n*stringptr = yield;\n*sizeptr = size;\nreturn 0;\n}\n\n\n\n/*************************************************\n*       Free memory obtained by get_substring    *\n*************************************************/\n\n/*\nArgument:     the result of a previous pcre2_substring_get_byxxx()\nReturns:      nothing\n*/\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_substring_free(PCRE2_UCHAR *string)\n{\nif (string != NULL)\n  {\n  pcre2_memctl *memctl = (pcre2_memctl *)((char *)string - sizeof(pcre2_memctl));\n  memctl->free(memctl, memctl->memory_data);\n  }\n}\n\n\n\n/*************************************************\n*         Get length of a named substring        *\n*************************************************/\n\n/* This function returns the length of a named captured substring. If the regex\npermits duplicate names, the first substring that is set is chosen.\n\nArguments:\n  match_data      pointer to match data\n  stringname      the name of the required substring\n  sizeptr         where to put the length, if not NULL\n\nReturns:          0 if successful, else a negative error number\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_substring_length_byname(pcre2_match_data *match_data,\n  PCRE2_SPTR stringname, PCRE2_SIZE *sizeptr)\n{\nPCRE2_SPTR first, last, entry;\nint failrc, entrysize;\nif (match_data->matchedby == PCRE2_MATCHEDBY_DFA_INTERPRETER)\n  return PCRE2_ERROR_DFA_UFUNC;\nentrysize = pcre2_substring_nametable_scan(match_data->code, stringname,\n  &first, &last);\nif (entrysize < 0) return entrysize;\nfailrc = PCRE2_ERROR_UNAVAILABLE;\nfor (entry = first; entry <= last; entry += entrysize)\n  {\n  uint32_t n = GET2(entry, 0);\n  if (n < match_data->oveccount)\n    {\n    if (match_data->ovector[n*2] != PCRE2_UNSET)\n      return pcre2_substring_length_bynumber(match_data, n, sizeptr);\n    failrc = PCRE2_ERROR_UNSET;\n    }\n  }\nreturn failrc;\n}\n\n\n\n/*************************************************\n*        Get length of a numbered substring      *\n*************************************************/\n\n/* This function returns the length of a captured substring. If the start is\nbeyond the end (which can happen when \\K is used in an assertion), it sets the\nlength to zero.\n\nArguments:\n  match_data      pointer to match data\n  stringnumber    the number of the required substring\n  sizeptr         where to put the length, if not NULL\n\nReturns:         if successful: 0\n                 if not successful, a negative error code:\n                   PCRE2_ERROR_NOSUBSTRING: no such substring\n                   PCRE2_ERROR_UNAVAILABLE: ovector is too small\n                   PCRE2_ERROR_UNSET: substring is not set\n                   PCRE2_ERROR_INVALIDOFFSET: internal error, should not occur\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_substring_length_bynumber(pcre2_match_data *match_data,\n  uint32_t stringnumber, PCRE2_SIZE *sizeptr)\n{\nPCRE2_SIZE left, right;\nint count = match_data->rc;\nif (count == PCRE2_ERROR_PARTIAL)\n  {\n  if (stringnumber > 0) return PCRE2_ERROR_PARTIAL;\n  count = 0;\n  }\nelse if (count < 0) return count;            /* Match failed */\n\nif (match_data->matchedby != PCRE2_MATCHEDBY_DFA_INTERPRETER)\n  {\n  if (stringnumber > match_data->code->top_bracket)\n    return PCRE2_ERROR_NOSUBSTRING;\n  if (stringnumber >= match_data->oveccount)\n    return PCRE2_ERROR_UNAVAILABLE;\n  if (match_data->ovector[stringnumber*2] == PCRE2_UNSET)\n    return PCRE2_ERROR_UNSET;\n  }\nelse  /* Matched using pcre2_dfa_match() */\n  {\n  if (stringnumber >= match_data->oveccount) return PCRE2_ERROR_UNAVAILABLE;\n  if (count != 0 && stringnumber >= (uint32_t)count) return PCRE2_ERROR_UNSET;\n  }\n\nleft = match_data->ovector[stringnumber*2];\nright = match_data->ovector[stringnumber*2+1];\n/* LCOV_EXCL_START - this appears to be unreachable, as the ovector and\nsubject_length should always be set consistently, no matter what misbehaviour\nthe caller has committed. */\nif (left > match_data->subject_length || right > match_data->subject_length)\n  {\n  PCRE2_DEBUG_UNREACHABLE();\n  return PCRE2_ERROR_INVALIDOFFSET;\n  }\n/* LCOV_EXCL_STOP */\nif (sizeptr != NULL) *sizeptr = (left > right)? 0 : right - left;\nreturn 0;\n}\n\n\n\n/*************************************************\n*    Extract all captured strings to new memory  *\n*************************************************/\n\n/* This function gets one chunk of memory and builds a list of pointers and all\nthe captured substrings in it. A NULL pointer is put on the end of the list.\nThe substrings are zero-terminated, but also, if the final argument is\nnon-NULL, a list of lengths is also returned. This allows binary data to be\nhandled.\n\nArguments:\n  match_data     points to the match data\n  listptr        set to point to the list of pointers\n  lengthsptr     set to point to the list of lengths (may be NULL)\n\nReturns:         if successful: 0\n                 if not successful, a negative error code:\n                   PCRE2_ERROR_NOMEMORY: failed to get memory,\n                   or a match failure code\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_substring_list_get(pcre2_match_data *match_data, PCRE2_UCHAR ***listptr,\n  PCRE2_SIZE **lengthsptr)\n{\nint i, count, count2;\nPCRE2_SIZE size;\nPCRE2_SIZE *lensp;\npcre2_memctl *memp;\nPCRE2_UCHAR **listp;\nPCRE2_UCHAR *sp;\nPCRE2_SIZE *ovector;\n\nif ((count = match_data->rc) < 0) return count;   /* Match failed */\nif (count == 0) count = match_data->oveccount;    /* Ovector too small */\n\ncount2 = 2*count;\novector = match_data->ovector;\nsize = sizeof(pcre2_memctl) + sizeof(PCRE2_UCHAR *);      /* For final NULL */\nif (lengthsptr != NULL) size += sizeof(PCRE2_SIZE) * count;  /* For lengths */\n\nfor (i = 0; i < count2; i += 2)\n  {\n  size += sizeof(PCRE2_UCHAR *) + CU2BYTES(1);\n  if (ovector[i+1] > ovector[i]) size += CU2BYTES(ovector[i+1] - ovector[i]);\n  }\n\nmemp = PRIV(memctl_malloc)(size, (pcre2_memctl *)match_data);\nif (memp == NULL) return PCRE2_ERROR_NOMEMORY;\n\n*listptr = listp = (PCRE2_UCHAR **)((char *)memp + sizeof(pcre2_memctl));\nlensp = (PCRE2_SIZE *)((char *)listp + sizeof(PCRE2_UCHAR *) * (count + 1));\n\nif (lengthsptr == NULL)\n  {\n  sp = (PCRE2_UCHAR *)lensp;\n  lensp = NULL;\n  }\nelse\n  {\n  *lengthsptr = lensp;\n  sp = (PCRE2_UCHAR *)((char *)lensp + sizeof(PCRE2_SIZE) * count);\n  }\n\nfor (i = 0; i < count2; i += 2)\n  {\n  size = (ovector[i+1] > ovector[i])? (ovector[i+1] - ovector[i]) : 0;\n\n  /* Size == 0 includes the case when the capture is unset. Avoid adding\n  PCRE2_UNSET to match_data->subject because it overflows, even though with\n  zero size calling memcpy() is harmless. */\n\n  if (size != 0) memcpy(sp, match_data->subject + ovector[i], CU2BYTES(size));\n  *listp++ = sp;\n  if (lensp != NULL) *lensp++ = size;\n  sp += size;\n  *sp++ = 0;\n  }\n\n*listp = NULL;\nreturn 0;\n}\n\n\n\n/*************************************************\n*   Free memory obtained by substring_list_get   *\n*************************************************/\n\n/*\nArgument:     the result of a previous pcre2_substring_list_get()\nReturns:      nothing\n*/\n\nPCRE2_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_substring_list_free(PCRE2_UCHAR **list)\n{\nif (list != NULL)\n  {\n  pcre2_memctl *memctl = (pcre2_memctl *)((char *)list - sizeof(pcre2_memctl));\n  memctl->free(memctl, memctl->memory_data);\n  }\n}\n\n\n\n/*************************************************\n*     Find (multiple) entries for named string   *\n*************************************************/\n\n/* This function scans the nametable for a given name, using binary chop. It\nreturns either two pointers to the entries in the table, or, if no pointers are\ngiven, the number of a unique group with the given name. If duplicate names are\npermitted, and the name is not unique, an error is generated.\n\nArguments:\n  code        the compiled regex\n  stringname  the name whose entries required\n  firstptr    where to put the pointer to the first entry\n  lastptr     where to put the pointer to the last entry\n\nReturns:      PCRE2_ERROR_NOSUBSTRING if the name is not found\n              otherwise, if firstptr and lastptr are NULL:\n                a group number for a unique substring\n                else PCRE2_ERROR_NOUNIQUESUBSTRING\n              otherwise:\n                the length of each entry, having set firstptr and lastptr\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_substring_nametable_scan(const pcre2_code *code, PCRE2_SPTR stringname,\n  PCRE2_SPTR *firstptr, PCRE2_SPTR *lastptr)\n{\nuint16_t bot = 0;\nuint16_t top = code->name_count;\nuint16_t entrysize = code->name_entry_size;\nPCRE2_SPTR nametable = (PCRE2_SPTR)((const char *)code + sizeof(pcre2_real_code));\n\nwhile (top > bot)\n  {\n  uint16_t mid = (top + bot) / 2;\n  PCRE2_SPTR entry = nametable + entrysize*mid;\n  int c = PRIV(strcmp)(stringname, entry + IMM2_SIZE);\n  if (c == 0)\n    {\n    PCRE2_SPTR first;\n    PCRE2_SPTR last;\n    PCRE2_SPTR lastentry;\n    lastentry = nametable + entrysize * (code->name_count - 1);\n    first = last = entry;\n    while (first > nametable)\n      {\n      if (PRIV(strcmp)(stringname, (first - entrysize + IMM2_SIZE)) != 0) break;\n      first -= entrysize;\n      }\n    while (last < lastentry)\n      {\n      if (PRIV(strcmp)(stringname, (last + entrysize + IMM2_SIZE)) != 0) break;\n      last += entrysize;\n      }\n    if (firstptr == NULL) return (first == last)?\n      (int)GET2(entry, 0) : PCRE2_ERROR_NOUNIQUESUBSTRING;\n    *firstptr = first;\n    *lastptr = last;\n    return entrysize;\n    }\n  if (c > 0) bot = mid + 1; else top = mid;\n  }\n\nreturn PCRE2_ERROR_NOSUBSTRING;\n}\n\n\n/*************************************************\n*           Find number for named string         *\n*************************************************/\n\n/* This function is a convenience wrapper for pcre2_substring_nametable_scan()\nwhen it is known that names are unique. If there are duplicate names, it is not\ndefined which number is returned.\n\nArguments:\n  code        the compiled regex\n  stringname  the name whose number is required\n\nReturns:      the number of the named parenthesis, or a negative number\n                PCRE2_ERROR_NOSUBSTRING if not found\n                PCRE2_ERROR_NOUNIQUESUBSTRING if not unique\n*/\n\nPCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_substring_number_from_name(const pcre2_code *code,\n  PCRE2_SPTR stringname)\n{\nreturn pcre2_substring_nametable_scan(code, stringname, NULL, NULL);\n}\n\n/* End of pcre2_substring.c */\n"
  },
  {
    "path": "src/pcre2_tables.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains some fixed tables that are used by more than one of the\nPCRE2 code modules. The tables are also #included by the pcre2test program,\nwhich uses macros to change their names from _pcre2_xxx to xxxx, thereby\navoiding name clashes with the library. In this case, PCRE2_PCRE2TEST is\ndefined. */\n\n\n#if !defined(PCRE2_PCRE2TEST) && !defined(PCRE2_DFTABLES) && \\\n    !defined(PCRE2_PCRE2POSIX) /* We're compiling the library */\n#include \"pcre2_internal.h\"\n#endif\n\n\n/* Utility macros */\n#define ARR_SIZE(x) sizeof(x)/sizeof(x[0])\n\n\n#if !defined(PCRE2_PCRE2TEST) && !defined(PCRE2_DFTABLES) && \\\n    !defined(PCRE2_PCRE2POSIX)\n\n/* Table of sizes for the fixed-length opcodes. It's defined in a macro so that\nthe definition is next to the definition of the opcodes in pcre2_internal.h.\nThis is mode-dependent, so it is skipped when this file is included by\npcre2test. */\n\nconst uint8_t PRIV(OP_lengths)[] = { OP_LENGTHS };\n\n/* Tables of horizontal and vertical whitespace characters, suitable for\nadding to classes. */\n\nconst uint32_t PRIV(hspace_list)[] = { HSPACE_LIST };\nconst uint32_t PRIV(vspace_list)[] = { VSPACE_LIST };\n\n#endif /* !PCRE2_PCRE2TEST && !PCRE2_DFTABLES && !PCRE2_PCRE2POSIX */\n\n\n#if !defined(PCRE2_DFTABLES) && !defined(PCRE2_PCRE2POSIX)\n\n/* These tables are the pairs of delimiters that are valid for callout string\narguments. For each starting delimiter there must be a matching ending\ndelimiter, which in fact is different only for bracket-like delimiters. */\n\nconst uint32_t PRIV(callout_start_delims)[] = {\n  CHAR_GRAVE_ACCENT, CHAR_APOSTROPHE, CHAR_QUOTATION_MARK,\n  CHAR_CIRCUMFLEX_ACCENT, CHAR_PERCENT_SIGN, CHAR_NUMBER_SIGN,\n  CHAR_DOLLAR_SIGN, CHAR_LEFT_CURLY_BRACKET, 0 };\n\nconst uint32_t PRIV(callout_end_delims[]) = {\n  CHAR_GRAVE_ACCENT, CHAR_APOSTROPHE, CHAR_QUOTATION_MARK,\n  CHAR_CIRCUMFLEX_ACCENT, CHAR_PERCENT_SIGN, CHAR_NUMBER_SIGN,\n  CHAR_DOLLAR_SIGN, CHAR_RIGHT_CURLY_BRACKET, 0 };\n\n#endif /* !PCRE2_DFTABLES && !PCRE2_PCRE2POSIX */\n\n\n/*************************************************\n*           Tables for UTF-8 support             *\n*************************************************/\n\n/* These tables are required by pcre2test in 16- or 32-bit mode, as well\nas for the library in 8-bit mode, because pcre2test uses UTF-8 internally for\nhandling wide characters. */\n\n#if defined PCRE2_PCRE2TEST || \\\n    (!defined(PCRE2_DFTABLES) && !defined(PCRE2_PCRE2POSIX) && \\\n     defined SUPPORT_UNICODE && \\\n     defined PCRE2_CODE_UNIT_WIDTH && \\\n     PCRE2_CODE_UNIT_WIDTH == 8)\n\n/* These are the breakpoints for different numbers of bytes in a UTF-8\ncharacter. */\n\nconst int PRIV(utf8_table1)[] =\n  { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff };\n\nconst unsigned PRIV(utf8_table1_size) = ARR_SIZE(PRIV(utf8_table1));\n\n/* These are the indicator bits and the mask for the data bits to set in the\nfirst byte of a character, indexed by the number of additional bytes. */\n\nconst int PRIV(utf8_table2)[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc };\nconst int PRIV(utf8_table3)[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01 };\n\n/* Table of the number of extra bytes, indexed by the first byte masked with\n0x3f. The highest number for a valid UTF-8 first byte is in fact 0x3d. */\n\nconst uint8_t PRIV(utf8_table4)[] = {\n  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,\n  3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };\n\n#endif /* UTF-8 support needed */\n\n/* Tables concerned with Unicode properties are relevant only when Unicode\nsupport is enabled. See also the pcre2_ucptables_inc.h file, which is generated by\na Python script from Unicode data files. */\n\n#if !defined(PCRE2_DFTABLES) && !defined(PCRE2_PCRE2POSIX) && \\\n    defined(SUPPORT_UNICODE)\n\n/* Table to translate from particular type value to the general value. */\n\nconst uint32_t PRIV(ucp_gentype)[] = {\n  ucp_C, ucp_C, ucp_C, ucp_C, ucp_C,  /* Cc, Cf, Cn, Co, Cs */\n  ucp_L, ucp_L, ucp_L, ucp_L, ucp_L,  /* Ll, Lu, Lm, Lo, Lt */\n  ucp_M, ucp_M, ucp_M,                /* Mc, Me, Mn */\n  ucp_N, ucp_N, ucp_N,                /* Nd, Nl, No */\n  ucp_P, ucp_P, ucp_P, ucp_P, ucp_P,  /* Pc, Pd, Pe, Pf, Pi */\n  ucp_P, ucp_P,                       /* Ps, Po */\n  ucp_S, ucp_S, ucp_S, ucp_S,         /* Sc, Sk, Sm, So */\n  ucp_Z, ucp_Z, ucp_Z                 /* Zl, Zp, Zs */\n};\n\n/* This table encodes the rules for finding the end of an extended grapheme\ncluster. Every code point has a grapheme break property which is one of the\nucp_gbXX values defined in pcre2_ucp.h. These changed between Unicode versions\n10 and 11. The 2-dimensional table is indexed by the properties of two adjacent\ncode points. The left property selects a word from the table, and the right\nproperty selects a bit from that word like this:\n\n  PRIV(ucp_gbtable)[left-property] & (1u << right-property)\n\nThe value is non-zero if a grapheme break is NOT permitted between the relevant\ntwo code points. The breaking rules are as follows:\n\n1. Break at the start and end of text (pretty obviously).\n\n2. Do not break between a CR and LF; otherwise, break before and after\n   controls.\n\n3. Do not break Hangul syllable sequences, the rules for which are:\n\n    L may be followed by L, V, LV or LVT\n    LV or V may be followed by V or T\n    LVT or T may be followed by T\n\n4. Do not break before extending characters or zero-width-joiner (ZWJ).\n\nThe following rules are only for extended grapheme clusters (but that's what we\nare implementing).\n\n5. Do not break before SpacingMarks.\n\n6. Do not break after Prepend characters.\n\n7. Do not break within emoji modifier sequences or emoji zwj sequences. That\n   is, do not break between characters with the Extended_Pictographic property\n   if a ZWJ intervenes. Extend characters are allowed between the characters;\n   this cannot be represented in this table, the code has to deal with it.\n\n8. Do not break within emoji flag sequences. That is, do not break between\n   regional indicator (RI) symbols if there are an odd number of RI characters\n   before the break point. This table encodes \"join RI characters\"; the code\n   has to deal with checking for previous adjoining RIs.\n\n9. Otherwise, break everywhere.\n*/\n\n#define ESZ (1<<ucp_gbExtend)|(1<<ucp_gbSpacingMark)|(1<<ucp_gbZWJ)\n\nconst uint32_t PRIV(ucp_gbtable)[] = {\n   (1u<<ucp_gbLF),                                      /*  0 CR */\n   0,                                                   /*  1 LF */\n   0,                                                   /*  2 Control */\n   ESZ,                                                 /*  3 Extend */\n   ESZ|(1u<<ucp_gbPrepend)|                             /*  4 Prepend */\n       (1u<<ucp_gbL)|(1u<<ucp_gbV)|(1u<<ucp_gbT)|\n       (1u<<ucp_gbLV)|(1u<<ucp_gbLVT)|(1u<<ucp_gbOther)|\n       (1u<<ucp_gbRegional_Indicator),\n   ESZ,                                                 /*  5 SpacingMark */\n   ESZ|(1u<<ucp_gbL)|(1u<<ucp_gbV)|(1u<<ucp_gbLV)|      /*  6 L */\n       (1u<<ucp_gbLVT),\n   ESZ|(1u<<ucp_gbV)|(1u<<ucp_gbT),                     /*  7 V */\n   ESZ|(1u<<ucp_gbT),                                   /*  8 T */\n   ESZ|(1u<<ucp_gbV)|(1u<<ucp_gbT),                     /*  9 LV */\n   ESZ|(1u<<ucp_gbT),                                   /* 10 LVT */\n   (1u<<ucp_gbRegional_Indicator),                      /* 11 Regional Indicator */\n   ESZ,                                                 /* 12 Other */\n   ESZ|(1u<<ucp_gbExtended_Pictographic),               /* 13 ZWJ */\n   ESZ                                                  /* 14 Extended Pictographic */\n};\n\n#undef ESZ\n\n#ifdef SUPPORT_JIT\n/* This table reverses PRIV(ucp_gentype). We can save the cost\nof a memory load. */\n\nconst int PRIV(ucp_typerange)[] = {\n  ucp_Cc, ucp_Cs,\n  ucp_Ll, ucp_Lu,\n  ucp_Mc, ucp_Mn,\n  ucp_Nd, ucp_No,\n  ucp_Pc, ucp_Ps,\n  ucp_Sc, ucp_So,\n  ucp_Zl, ucp_Zs,\n};\n#endif /* SUPPORT_JIT */\n\n/* Finally, include the tables that are auto-generated from the Unicode data\nfiles. */\n\n#include \"pcre2_ucptables_inc.h\"\n\n#endif /* Unicode support needed */\n\n\n/*************************************************\n*          Tables for EBCDIC support             *\n*************************************************/\n\n#if defined(EBCDIC) && \\\n  (defined(PCRE2_PCRE2TEST) || defined(PCRE2_DFTABLES) || 'a' != 0x81)\n\nconst uint8_t PRIV(ebcdic_1047_to_ascii)[256] = {\n  0x00,0x01,0x02,0x03,0x9c,0x09,0x86,0x7f,0x97,0x8d,0x8e,0x0b,0x0c,0x0d,0x0e,0x0f,\n#ifdef EBCDIC_NL25\n  0x10,0x11,0x12,0x13,0x9d,0x85,0x08,0x87,0x18,0x19,0x92,0x8f,0x1c,0x1d,0x1e,0x1f,\n  0x80,0x81,0x82,0x83,0x84,0x0a,0x17,0x1b,0x88,0x89,0x8a,0x8b,0x8c,0x05,0x06,0x07,\n#else\n  0x10,0x11,0x12,0x13,0x9d,0x0a,0x08,0x87,0x18,0x19,0x92,0x8f,0x1c,0x1d,0x1e,0x1f,\n  0x80,0x81,0x82,0x83,0x84,0x85,0x17,0x1b,0x88,0x89,0x8a,0x8b,0x8c,0x05,0x06,0x07,\n#endif\n  0x90,0x91,0x16,0x93,0x94,0x95,0x96,0x04,0x98,0x99,0x9a,0x9b,0x14,0x15,0x9e,0x1a,\n  0x20,0xa0,0xe2,0xe4,0xe0,0xe1,0xe3,0xe5,0xe7,0xf1,0xa2,0x2e,0x3c,0x28,0x2b,0x7c,\n  0x26,0xe9,0xea,0xeb,0xe8,0xed,0xee,0xef,0xec,0xdf,0x21,0x24,0x2a,0x29,0x3b,0x5e,\n  0x2d,0x2f,0xc2,0xc4,0xc0,0xc1,0xc3,0xc5,0xc7,0xd1,0xa6,0x2c,0x25,0x5f,0x3e,0x3f,\n  0xf8,0xc9,0xca,0xcb,0xc8,0xcd,0xce,0xcf,0xcc,0x60,0x3a,0x23,0x40,0x27,0x3d,0x22,\n  0xd8,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0xab,0xbb,0xf0,0xfd,0xfe,0xb1,\n  0xb0,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0xaa,0xba,0xe6,0xb8,0xc6,0xa4,\n  0xb5,0x7e,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0xa1,0xbf,0xd0,0x5b,0xde,0xae,\n  0xac,0xa3,0xa5,0xb7,0xa9,0xa7,0xb6,0xbc,0xbd,0xbe,0xdd,0xa8,0xaf,0x5d,0xb4,0xd7,\n  0x7b,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0xad,0xf4,0xf6,0xf2,0xf3,0xf5,\n  0x7d,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0xb9,0xfb,0xfc,0xf9,0xfa,0xff,\n  0x5c,0xf7,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0xb2,0xd4,0xd6,0xd2,0xd3,0xd5,\n  0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xb3,0xdb,0xdc,0xd9,0xda,0x9f,\n};\n\nconst uint8_t PRIV(ascii_to_ebcdic_1047)[256] = {\n#ifdef EBCDIC_NL25\n  0x00,0x01,0x02,0x03,0x37,0x2d,0x2e,0x2f,0x16,0x05,0x25,0x0b,0x0c,0x0d,0x0e,0x0f,\n#else\n  0x00,0x01,0x02,0x03,0x37,0x2d,0x2e,0x2f,0x16,0x05,0x15,0x0b,0x0c,0x0d,0x0e,0x0f,\n#endif\n  0x10,0x11,0x12,0x13,0x3c,0x3d,0x32,0x26,0x18,0x19,0x3f,0x27,0x1c,0x1d,0x1e,0x1f,\n  0x40,0x5a,0x7f,0x7b,0x5b,0x6c,0x50,0x7d,0x4d,0x5d,0x5c,0x4e,0x6b,0x60,0x4b,0x61,\n  0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0x7a,0x5e,0x4c,0x7e,0x6e,0x6f,\n  0x7c,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,\n  0xd7,0xd8,0xd9,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xad,0xe0,0xbd,0x5f,0x6d,\n  0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96,\n  0x97,0x98,0x99,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xc0,0x4f,0xd0,0xa1,0x07,\n#ifdef EBCDIC_NL25\n  0x20,0x21,0x22,0x23,0x24,0x15,0x06,0x17,0x28,0x29,0x2a,0x2b,0x2c,0x09,0x0a,0x1b,\n#else\n  0x20,0x21,0x22,0x23,0x24,0x25,0x06,0x17,0x28,0x29,0x2a,0x2b,0x2c,0x09,0x0a,0x1b,\n#endif\n  0x30,0x31,0x1a,0x33,0x34,0x35,0x36,0x08,0x38,0x39,0x3a,0x3b,0x04,0x14,0x3e,0xff,\n  0x41,0xaa,0x4a,0xb1,0x9f,0xb2,0x6a,0xb5,0xbb,0xb4,0x9a,0x8a,0xb0,0xca,0xaf,0xbc,\n  0x90,0x8f,0xea,0xfa,0xbe,0xa0,0xb6,0xb3,0x9d,0xda,0x9b,0x8b,0xb7,0xb8,0xb9,0xab,\n  0x64,0x65,0x62,0x66,0x63,0x67,0x9e,0x68,0x74,0x71,0x72,0x73,0x78,0x75,0x76,0x77,\n  0xac,0x69,0xed,0xee,0xeb,0xef,0xec,0xbf,0x80,0xfd,0xfe,0xfb,0xfc,0xba,0xae,0x59,\n  0x44,0x45,0x42,0x46,0x43,0x47,0x9c,0x48,0x54,0x51,0x52,0x53,0x58,0x55,0x56,0x57,\n  0x8c,0x49,0xcd,0xce,0xcb,0xcf,0xcc,0xe1,0x70,0xdd,0xde,0xdb,0xdc,0x8d,0x8e,0xdf,\n};\n\n#endif /* EBCDIC support needed */\n\n/* End of pcre2_tables.c */\n"
  },
  {
    "path": "src/pcre2_ucd.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2022 University of Cambridge\n\nThis module is auto-generated from Unicode data files. DO NOT EDIT MANUALLY!\nInstead, modify the maint/GenerateUcd.py script and run it to generate\na new version of this code.\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This file contains tables of Unicode properties that are extracted from\nUnicode data files. See the comments at the start of maint/GenerateUcd.py for\ndetails.\n\nAs well as being part of the PCRE2 library, this file is #included by the\npcre2test program, which redefines the PRIV macro to change table names from\n_pcre2_xxx to xxxx, thereby avoiding name clashes with the library. At present,\njust one of these tables is actually needed. When compiling the library, some\nheaders are needed. */\n\n\n#ifndef PCRE2_PCRE2TEST\n#include \"pcre2_internal.h\"\n#endif /* PCRE2_PCRE2TEST */\n\n\n\n/* The tables herein are needed only when UCP support is built, and in PCRE2\nthat happens automatically with UTF support. This module should not be\nreferenced otherwise, so it should not matter whether it is compiled or not.\nHowever a comment was received about space saving - maybe the guy linked all\nthe modules rather than using a library - so we include a condition to cut out\nthe tables when not needed. But don't leave a totally empty module because some\ncompilers barf at that. Instead, just supply some small dummy tables. */\n\n#ifndef SUPPORT_UNICODE\nconst ucd_record PRIV(ucd_records)[] = {{0,0,0,0,0,0,0}};\nconst uint16_t PRIV(ucd_stage1)[] = {0};\nconst uint16_t PRIV(ucd_stage2)[] = {0};\nconst uint32_t PRIV(ucd_caseless_sets)[] = {0};\nconst uint32_t PRIV(ucd_nocase_ranges)[] = {0};\nconst uint32_t PRIV(ucd_nocase_ranges_size) = 0;\n#else\n\n/* Total size: 116548 bytes, block size: 128. */\n\nconst char *PRIV(unicode_version) = \"17.0.0\";\n\n/* When recompiling tables with a new Unicode version, please check the types\nin this structure definition with those in pcre2_internal.h (the actual field\nnames will be different).\n\ntypedef struct {\nuint8_t property_0;\nuint8_t property_1;\nuint8_t property_2;\nuint8_t property_3;\nint32_t property_4;\nuint16_t property_5;\nuint16_t property_6;\n} ucd_record;\n*/\n\n/* If the 32-bit library is run in non-32-bit mode, character values greater\nthan 0x10ffff may be encountered. For these we set up a special record. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\nconst ucd_record PRIV(dummy_ucd_record)[] = {{\n  ucp_Unknown,    /* script */\n  ucp_Cn,         /* type unassigned */\n  ucp_gbOther,    /* grapheme break property */\n  0,              /* case set */\n  0,              /* other case */\n  0 | (ucp_bidiL << UCD_BIDICLASS_SHIFT), /* script extension and bidi class */\n  0,              /* bool properties offset */\n  }};\n#endif\n\n/* This table contains lists of characters that are caseless sets of\nmore than one character. Each list is terminated by NOTACHAR. */\n\nconst uint32_t PRIV(ucd_caseless_sets)[] = {\n  NOTACHAR,\n  0x0053,  0x0073,  0x017f,  NOTACHAR,\n  0x01c4,  0x01c5,  0x01c6,  NOTACHAR,\n  0x01c7,  0x01c8,  0x01c9,  NOTACHAR,\n  0x01ca,  0x01cb,  0x01cc,  NOTACHAR,\n  0x01f1,  0x01f2,  0x01f3,  NOTACHAR,\n  0x0345,  0x0399,  0x03b9,  0x1fbe,  NOTACHAR,\n  0x00b5,  0x039c,  0x03bc,  NOTACHAR,\n  0x03a3,  0x03c2,  0x03c3,  NOTACHAR,\n  0x0392,  0x03b2,  0x03d0,  NOTACHAR,\n  0x0398,  0x03b8,  0x03d1,  0x03f4,  NOTACHAR,\n  0x03a6,  0x03c6,  0x03d5,  NOTACHAR,\n  0x03a0,  0x03c0,  0x03d6,  NOTACHAR,\n  0x039a,  0x03ba,  0x03f0,  NOTACHAR,\n  0x03a1,  0x03c1,  0x03f1,  NOTACHAR,\n  0x0395,  0x03b5,  0x03f5,  NOTACHAR,\n  0x0412,  0x0432,  0x1c80,  NOTACHAR,\n  0x0414,  0x0434,  0x1c81,  NOTACHAR,\n  0x041e,  0x043e,  0x1c82,  NOTACHAR,\n  0x0421,  0x0441,  0x1c83,  NOTACHAR,\n  0x0422,  0x0442,  0x1c84,  0x1c85,  NOTACHAR,\n  0x042a,  0x044a,  0x1c86,  NOTACHAR,\n  0x0462,  0x0463,  0x1c87,  NOTACHAR,\n  0x1e60,  0x1e61,  0x1e9b,  NOTACHAR,\n  0x03a9,  0x03c9,  0x2126,  NOTACHAR,\n  0x004b,  0x006b,  0x212a,  NOTACHAR,\n  0x00c5,  0x00e5,  0x212b,  NOTACHAR,\n  0x1c88,  0xa64a,  0xa64b,  NOTACHAR,\n  0x0069,  0x0130,  NOTACHAR,\n  0x0049,  0x0131,  NOTACHAR,\n};\n\n/* This is the index, within ucd_caseless_sets, of the additional\nTurkish case-equivalences. The dotted I ones are this offset; the\ndotless I are +3 from here. */\n\nconst uint32_t PRIV(ucd_turkish_dotted_i_caseset) = 112;\n\n/* When #included in pcre2test, we don't need the table of digit sets, nor the\nthe large main UCD tables. */\n\n#ifndef PCRE2_PCRE2TEST\n\n/* This table contains character ranges, where the characters in the range have\nno other case. Both start and end values are excluded from the range. */\n\nconst uint32_t PRIV(ucd_nocase_ranges)[] = {\n  0x0000, 0x0041, /* 64 */\n  0x007a, 0x00b5, /* 58 */\n  0x00b5, 0x00c0, /* 10 */\n  0x0292, 0x029d, /* 10 */\n  0x029e, 0x0345, /* 166 */\n  0x0345, 0x0370, /* 42 */\n  0x0481, 0x048a, /* 8 */\n  0x0556, 0x0561, /* 10 */\n  0x0586, 0x10a0, /* 2841 */\n  0x10ff, 0x13a0, /* 672 */\n  0x13fd, 0x1c80, /* 2178 */\n  0x1cbf, 0x1d79, /* 185 */\n  0x1d7d, 0x1d8e, /* 16 */\n  0x1d8e, 0x1e00, /* 113 */\n  0x1ffc, 0x2126, /* 297 */\n  0x2132, 0x214e, /* 27 */\n  0x214e, 0x2160, /* 17 */\n  0x2184, 0x24b6, /* 817 */\n  0x24e9, 0x2c00, /* 1814 */\n  0x2cf3, 0x2d00, /* 12 */\n  0x2d2d, 0xa640, /* 30994 */\n  0xa66d, 0xa680, /* 18 */\n  0xa69b, 0xa722, /* 134 */\n  0xa76f, 0xa779, /* 9 */\n  0xa7dc, 0xa7f5, /* 24 */\n  0xa7f6, 0xab53, /* 860 */\n  0xab53, 0xab70, /* 28 */\n  0xabbf, 0xfb05, /* 20293 */\n  0xfb06, 0xff21, /* 1050 */\n  0xff5a, 0x10400, /* 1189 */\n  0x1044f, 0x104b0, /* 96 */\n  0x104fb, 0x10570, /* 116 */\n  0x105bc, 0x10c80, /* 1731 */\n  0x10cb2, 0x10cc0, /* 13 */\n  0x10cf2, 0x10d50, /* 93 */\n  0x10d65, 0x10d70, /* 10 */\n  0x10d85, 0x118a0, /* 2842 */\n  0x118df, 0x16e40, /* 21856 */\n  0x16e7f, 0x16ea0, /* 32 */\n  0x16ed3, 0x1e900, /* 31276 */\n  0x1e943, 0x110000, /* 988860 */\n  0xffffffff, 0xffffffff /* terminator */\n};\n\n/* Total: 1110881 characters. */\nconst uint32_t PRIV(ucd_nocase_ranges_size) = 82;\n\n/* This table lists the code points for the '9' characters in each set of\ndecimal digits. It is used to ensure that all the digits in a script run come\nfrom the same set. */\n\nconst uint32_t PRIV(ucd_digit_sets)[] = {\n  77,  /* Number of subsequent values */\n  0x00039, 0x00669, 0x006f9, 0x007c9, 0x0096f, 0x009ef, 0x00a6f, 0x00aef,\n  0x00b6f, 0x00bef, 0x00c6f, 0x00cef, 0x00d6f, 0x00def, 0x00e59, 0x00ed9,\n  0x00f29, 0x01049, 0x01099, 0x017e9, 0x01819, 0x0194f, 0x019d9, 0x01a89,\n  0x01a99, 0x01b59, 0x01bb9, 0x01c49, 0x01c59, 0x0a629, 0x0a8d9, 0x0a909,\n  0x0a9d9, 0x0a9f9, 0x0aa59, 0x0abf9, 0x0ff19, 0x104a9, 0x10d39, 0x10d49,\n  0x1106f, 0x110f9, 0x1113f, 0x111d9, 0x112f9, 0x11459, 0x114d9, 0x11659,\n  0x116c9, 0x116d9, 0x116e3, 0x11739, 0x118e9, 0x11959, 0x11bf9, 0x11c59,\n  0x11d59, 0x11da9, 0x11de9, 0x11f59, 0x16139, 0x16a69, 0x16ac9, 0x16b59,\n  0x16d79, 0x1ccf9, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149,\n  0x1e2f9, 0x1e4f9, 0x1e5fa, 0x1e959, 0x1fbf9,\n};\n\n/* This vector is a list of script bitsets for the Script Extension property.\nThe number of 32-bit words in each bitset is #defined in pcre2_ucp.h as\nucd_script_sets_item_size. */\n\nconst uint32_t PRIV(ucd_script_sets)[] = {\n 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x40200003u, 0x00381901u, 0x00200246u, 0x00000000u,\n 0x00040305u, 0x00800000u, 0x10000000u, 0x00000000u,\n 0x20000001u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00000001u, 0x00800000u, 0x00000000u, 0x00000000u,\n 0x00040001u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x01000007u, 0x00000840u, 0x00000200u, 0x00000001u,\n 0x01000007u, 0x00000040u, 0x00020000u, 0x00000003u,\n 0x01000005u, 0x00002000u, 0x00000000u, 0x00000000u,\n 0x00040041u, 0x00001000u, 0x00000000u, 0x00000001u,\n 0x01000047u, 0x00002801u, 0x00020001u, 0x00000002u,\n 0x10000001u, 0x00001801u, 0x00000004u, 0x00000000u,\n 0x00000007u, 0x00002000u, 0x00000200u, 0x00000000u,\n 0x00000051u, 0x00002840u, 0x00000202u, 0x00000002u,\n 0x0000005fu, 0x00002041u, 0x00000202u, 0x00000000u,\n 0x00000001u, 0x00002000u, 0x00000000u, 0x00000000u,\n 0x00000041u, 0x00000000u, 0x00000002u, 0x00000000u,\n 0x01000005u, 0x00000000u, 0x00020000u, 0x00000000u,\n 0x01000001u, 0x00000040u, 0x00000000u, 0x00000000u,\n 0x00000001u, 0x00000000u, 0x00000000u, 0x00000001u,\n 0x00800001u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00000005u, 0x00000000u, 0x00000000u, 0x00000002u,\n 0x00000003u, 0x00000000u, 0x00000200u, 0x00000002u,\n 0x11000041u, 0x00002000u, 0x00000002u, 0x00000000u,\n 0x01000041u, 0x00000000u, 0x00000002u, 0x00000000u,\n 0x00000041u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00000041u, 0x00000000u, 0x00000000u, 0x00000001u,\n 0x01000041u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x01040041u, 0x00000001u, 0x00000001u, 0x00000001u,\n 0x00000002u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00000001u, 0x00000000u, 0x00020000u, 0x00000000u,\n 0x00000001u, 0x00000000u, 0x00000001u, 0x00000002u,\n 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00000002u, 0x00000800u, 0x00000000u, 0x00000000u,\n 0x00000004u, 0x00000000u, 0x00000200u, 0x00000000u,\n 0x00000004u, 0x00001000u, 0x00000000u, 0x00000000u,\n 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00200008u, 0x00001000u, 0x00000000u, 0x00000000u,\n 0x000000e0u, 0x00010000u, 0x22400000u, 0x00000000u,\n 0x000000e0u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x000000e0u, 0x00010000u, 0x22408000u, 0x00000000u,\n 0x00000060u, 0x08000000u, 0x08c08480u, 0x00000000u,\n 0x00000060u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x000000a0u, 0x00000000u, 0x02000000u, 0x00000000u,\n 0x00000020u, 0x00000000u, 0x00400000u, 0x00000000u,\n 0x0001ff01u, 0x40000000u, 0x01011008u, 0x00000000u,\n 0x0001ff01u, 0x00000000u, 0x00011008u, 0x00000000u,\n 0x0003ff00u, 0x80004000u, 0x81381848u, 0x00000000u,\n 0x0003ff00u, 0x80004020u, 0xc1381848u, 0x00000000u,\n 0x00000100u, 0x04000000u, 0x00100040u, 0x00000000u,\n 0x00000200u, 0x10004000u, 0x00000000u, 0x00000000u,\n 0x00000400u, 0x00000000u, 0x00002000u, 0x00000000u,\n 0x00000800u, 0x00000000u, 0x00000010u, 0x00000000u,\n 0x00002000u, 0x00000000u, 0x00000008u, 0x00000000u,\n 0x00008000u, 0x00000000u, 0x01000000u, 0x00000004u,\n 0x00100000u, 0x10000040u, 0x00000000u, 0x00000000u,\n 0x00200001u, 0x00001000u, 0x00000000u, 0x00000000u,\n 0x02000000u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00000000u, 0x0000001eu, 0x00000000u, 0x00000000u,\n 0x04000000u, 0x00008000u, 0x00000000u, 0x00000000u,\n 0x00008300u, 0x00000000u, 0x00000008u, 0x00000000u,\n 0x00000100u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00008100u, 0x00000000u, 0x00000008u, 0x00000000u,\n 0x00004300u, 0x00000000u, 0x00011000u, 0x00000000u,\n 0x00004300u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00000100u, 0x40000000u, 0x00010000u, 0x00000000u,\n 0x00004300u, 0x00000000u, 0x00010000u, 0x00000000u,\n 0x00000100u, 0x40000000u, 0x00000000u, 0x00000000u,\n 0x0001f100u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00000300u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00000100u, 0x00000000u, 0x00011000u, 0x00000000u,\n 0x00000100u, 0x00000000u, 0x01010000u, 0x00000000u,\n 0x00000300u, 0x40000000u, 0x00000000u, 0x00000000u,\n 0x00000100u, 0x00000000u, 0x00010000u, 0x00000000u,\n 0x00000300u, 0x40000000u, 0x00010000u, 0x00000000u,\n 0x0003d300u, 0x00000000u, 0x01001008u, 0x00000004u,\n 0x00000100u, 0x00000000u, 0x00000008u, 0x00000000u,\n 0x00008100u, 0x00000000u, 0x00000008u, 0x00000004u,\n 0x00000200u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00000000u, 0x00000000u, 0x01000000u, 0x00000000u,\n 0x00000045u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00000040u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x04000001u, 0x00008000u, 0x00000000u, 0x00000000u,\n 0x00000020u, 0x00000000u, 0x00008000u, 0x00000000u,\n 0x00200000u, 0x020c1000u, 0x00004000u, 0x00000000u,\n 0x00000002u, 0x20080000u, 0x00004000u, 0x00000000u,\n 0x00000101u, 0x00000000u, 0x00000008u, 0x00000000u,\n 0x00000001u, 0x00000800u, 0x00000000u, 0x00000000u,\n 0x00000000u, 0x02200000u, 0x00000000u, 0x00000000u,\n 0x00200000u, 0x04780000u, 0x00004000u, 0x00000000u,\n 0x00000000u, 0x00000000u, 0x00000002u, 0x00000000u,\n 0x00000020u, 0x00000000u, 0x0000c000u, 0x00000000u,\n 0x40000000u, 0x00000000u, 0x00040000u, 0x00000000u,\n 0xfc400000u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0xfc400000u, 0x00008000u, 0x00000000u, 0x00000000u,\n 0x78400000u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x40000000u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0xfc480000u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0xfc480000u, 0x00800000u, 0x00000000u, 0x00000000u,\n 0xf8400000u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x60000000u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x18000000u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x58000000u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x40000001u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00018d00u, 0xc4000000u, 0x01101950u, 0x00000004u,\n 0x00008d00u, 0xc4000000u, 0x01101950u, 0x00000004u,\n 0x00000d00u, 0x84000000u, 0x00101950u, 0x00000000u,\n 0x00000d00u, 0xc4000000u, 0x00101950u, 0x00000000u,\n 0x00000300u, 0x00000000u, 0x00000000u, 0x00000004u,\n 0x00002100u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00100001u, 0x00020000u, 0x00000000u, 0x00000000u,\n 0x00000000u, 0x01000400u, 0x00000000u, 0x00000000u,\n 0x00000020u, 0x00010000u, 0x00000000u, 0x00000000u,\n 0x000000a0u, 0x00000000u, 0x00000000u, 0x00000000u,\n 0x00000000u, 0x00000280u, 0x04000000u, 0x00000000u,\n 0x00000000u, 0x00000280u, 0x00000000u, 0x00000000u,\n 0x00000000u, 0x00000280u, 0x00000020u, 0x00000000u,\n 0x00000020u, 0x00000800u, 0x00000000u, 0x00000000u,\n 0x00000000u, 0x00000000u, 0x08000080u, 0x00000000u,\n};\n\n/* This vector is a list of bitsets for Boolean properties. The number of\n32_bit words in each bitset is #defined as ucd_boolprop_sets_item_size in\npcre2_ucp.h. */\n\nconst uint32_t PRIV(ucd_boolprop_sets)[] = {\n 0x00000000u, 0x00000000u,\n 0x00000001u, 0x00000000u,\n 0x00000001u, 0x00400800u,\n 0x00800001u, 0x00400800u,\n 0x00800001u, 0x00050400u,\n 0x00800001u, 0x00002400u,\n 0x00830001u, 0x00000400u,\n 0x00800001u, 0x00000400u,\n 0x00800021u, 0x00002400u,\n 0x00800011u, 0x00000400u,\n 0x00800001u, 0x00000480u,\n 0x00800001u, 0x00040400u,\n 0x00801001u, 0x00000400u,\n 0x00800021u, 0x00050400u,\n 0x04830003u, 0x00800001u,\n 0x00800021u, 0x00040400u,\n 0x00800011u, 0x00000480u,\n 0x048003c7u, 0x01900003u,\n 0x008003c5u, 0x01900003u,\n 0x00808021u, 0x00000480u,\n 0x00800001u, 0x00800001u,\n 0x00808021u, 0x00000400u,\n 0x04800d47u, 0x01800043u,\n 0x00800d45u, 0x01800043u,\n 0x00800d45u, 0x01820043u,\n 0x00000000u, 0x00400800u,\n 0x00800000u, 0x00400000u,\n 0x00800000u, 0x00000400u,\n 0x00808020u, 0x00000000u,\n 0x00a10000u, 0x00000400u,\n 0x00800044u, 0x01800043u,\n 0x00800010u, 0x00002400u,\n 0x00800000u, 0x00000480u,\n 0x00002020u, 0x00000000u,\n 0x40800000u, 0x00000000u,\n 0x00800dc4u, 0x01800043u,\n 0x00c08020u, 0x00800001u,\n 0x00800000u, 0x00000000u,\n 0x008003c4u, 0x01900003u,\n 0x00800d44u, 0x01800043u,\n 0x00800d44u, 0x01820043u,\n 0x00804dc4u, 0x01800043u,\n 0x00800004u, 0x01800003u,\n 0x008007c4u, 0x01900003u,\n 0x00800bc4u, 0x01800003u,\n 0x00808064u, 0x01800043u,\n 0x00808064u, 0x01820043u,\n 0x00808024u, 0x01800003u,\n 0x00c08024u, 0x01800003u,\n 0x01008020u, 0x00800009u,\n 0x01008de4u, 0x00800049u,\n 0x01002020u, 0x00800009u,\n 0x01000020u, 0x00800009u,\n 0x01000024u, 0x00800009u,\n 0x00808064u, 0x00000043u,\n 0x00800000u, 0x00040000u,\n 0x00800020u, 0x00840001u,\n 0x00800dc4u, 0x018000c3u,\n 0x00800044u, 0x01900083u,\n 0x00800044u, 0x01900003u,\n 0x008003c4u, 0x01900083u,\n 0x00800000u, 0x00000080u,\n 0x01000020u, 0x00000008u,\n 0x00800020u, 0x00000000u,\n 0x00800000u, 0x00050000u,\n 0x00801000u, 0x00000000u,\n 0x01008024u, 0x00800009u,\n 0x00000020u, 0x00001000u,\n 0x00002028u, 0x00000000u,\n 0x00c00024u, 0x01800003u,\n 0x01000024u, 0x00800109u,\n 0x01008020u, 0x00800109u,\n 0x00800000u, 0x00800001u,\n 0x00804004u, 0x01800003u,\n 0x00800024u, 0x01800003u,\n 0x01000020u, 0x00800109u,\n 0x01008024u, 0x00800109u,\n 0x00800004u, 0x00800001u,\n 0x00800004u, 0x0180000bu,\n 0x03008020u, 0x00800009u,\n 0x01000004u, 0x00800009u,\n 0x01400024u, 0x00800009u,\n 0x01408020u, 0x00800009u,\n 0x00800004u, 0x00800003u,\n 0x03008024u, 0x00800009u,\n 0x00800004u, 0x01800023u,\n 0x00800010u, 0x00000000u,\n 0x00808000u, 0x00800001u,\n 0x01004024u, 0x00800009u,\n 0x00808004u, 0x00800001u,\n 0x00800944u, 0x01800043u,\n 0x00800064u, 0x01800043u,\n 0x00802004u, 0x01800003u,\n 0x00800344u, 0x01900003u,\n 0x03008000u, 0x00800009u,\n 0x00804004u, 0x0180000bu,\n 0x00c00000u, 0x00000000u,\n 0x01002020u, 0x00a00009u,\n 0x01000024u, 0x0180000bu,\n 0x01008020u, 0x00000008u,\n 0x01408024u, 0x00800009u,\n 0x00808000u, 0x00000000u,\n 0x00800044u, 0x01820043u,\n 0x01002020u, 0x00800011u,\n 0x00022020u, 0x00800019u,\n 0x00002028u, 0x00000800u,\n 0x00801000u, 0x00000400u,\n 0x00800020u, 0x00002400u,\n 0x00800000u, 0x00002400u,\n 0x00800020u, 0x00050400u,\n 0x00800020u, 0x00000400u,\n 0x00a10000u, 0x00050400u,\n 0x00800000u, 0x00050400u,\n 0x00800000u, 0x00800081u,\n 0x00800010u, 0x00000400u,\n 0x00002020u, 0x00000080u,\n 0x00002000u, 0x00000000u,\n 0x00006020u, 0x00000000u,\n 0x00800064u, 0x01820043u,\n 0x40800000u, 0x00000080u,\n 0x40801000u, 0x00000080u,\n 0x40800010u, 0x00000080u,\n 0x01000020u, 0x00800089u,\n 0x01020020u, 0x00000008u,\n 0x00800044u, 0x018000c3u,\n 0x00800000u, 0x01800083u,\n 0x00a10000u, 0x00000000u,\n 0x00800000u, 0x01800003u,\n 0x00800004u, 0x01800083u,\n 0x00a10044u, 0x01800043u,\n 0x00800044u, 0x018200c3u,\n 0x00a10000u, 0x00000480u,\n 0xc0800000u, 0x00000480u,\n 0x00800010u, 0x00000480u,\n 0x00801000u, 0x00000480u,\n 0x00b10000u, 0x00000400u,\n 0x00804010u, 0x00000400u,\n 0x00000000u, 0x00000400u,\n 0x008003c4u, 0x00100000u,\n 0x00a103c4u, 0x00100000u,\n 0x00800d44u, 0x00000040u,\n 0x00b10000u, 0x00000480u,\n 0x00a90000u, 0x00000400u,\n 0x00b90000u, 0x00000400u,\n 0x03000020u, 0x00800009u,\n 0x00808024u, 0x00000400u,\n 0x00800000u, 0x00040400u,\n 0x00800000u, 0x00004000u,\n 0x08800000u, 0x00000000u,\n 0x10800000u, 0x00000000u,\n 0x20800000u, 0x00000000u,\n 0x00800004u, 0x01800007u,\n 0x01008000u, 0x00800009u,\n 0x00a11000u, 0x00000400u,\n 0x00808020u, 0x00000003u,\n 0x00800004u, 0x01880007u,\n 0x00808004u, 0x01800003u,\n 0x00800004u, 0x00000003u,\n 0x00000000u, 0x00000200u,\n 0x01022020u, 0x00a00009u,\n 0x00800000u, 0x00002000u,\n 0x00800020u, 0x00050000u,\n 0x00800020u, 0x00040000u,\n 0x00801000u, 0x00000080u,\n 0x00800010u, 0x00000080u,\n 0x00800020u, 0x00002000u,\n 0x04800000u, 0x00800001u,\n 0x048003c4u, 0x01900003u,\n 0x00808020u, 0x00000080u,\n 0x04800d44u, 0x01800043u,\n 0x00800010u, 0x00002000u,\n 0x01008024u, 0x0080000bu,\n 0x00000020u, 0x00000000u,\n 0x00c00004u, 0x01800003u,\n 0x00c08004u, 0x01800003u,\n 0x01400020u, 0x00800009u,\n 0x01000020u, 0x0080000du,\n 0x01008004u, 0x00800009u,\n 0x00c00024u, 0x01800007u,\n 0x01000000u, 0x00800009u,\n 0xc0800000u, 0x00000080u,\n 0x00b10000u, 0x00000000u,\n 0x00200000u, 0x00000000u,\n 0x00800044u, 0x00100000u,\n 0x00a10044u, 0x00100000u,\n 0x00930000u, 0x00008000u,\n 0x00b90000u, 0x00000000u,\n 0x00a90000u, 0x00000000u,\n 0x00970020u, 0x00000008u,\n 0x00b30000u, 0x00000000u,\n 0x01022020u, 0x00000008u,\n};\n\n/* These are the main two-stage UCD tables. The fields in each record are:\nscript (8 bits), character type (8 bits), grapheme break property (8 bits),\noffset to multichar other cases or zero (8 bits), offset to other case or zero\n(32 bits, signed), bidi class (5 bits) and script extension (11 bits) packed\ninto a 16-bit field, and offset in binary properties table (16 bits). */\n\nconst ucd_record PRIV(ucd_records)[] = { /* 18756 bytes, record size 12 */\n  {   100,      0,      2,      0,      0,   6144,      2, }, /*   0 */\n  {   100,      0,      2,      0,      0,  43008,      4, }, /*   1 */\n  {   100,      0,      1,      0,      0,   4096,      4, }, /*   2 */\n  {   100,      0,      2,      0,      0,  45056,      4, }, /*   3 */\n  {   100,      0,      0,      0,      0,   4096,      4, }, /*   4 */\n  {   100,      0,      2,      0,      0,   4096,      2, }, /*   5 */\n  {   100,      0,      2,      0,      0,  43008,      2, }, /*   6 */\n  {   100,     29,     12,      0,      0,  45056,      6, }, /*   7 */\n  {   100,     21,     12,      0,      0,  28672,      8, }, /*   8 */\n  {   100,     21,     12,      0,      0,  28672,     10, }, /*   9 */\n  {   100,     21,     12,      0,      0,  14336,     12, }, /*  10 */\n  {   100,     23,     12,      0,      0,  14336,     14, }, /*  11 */\n  {   100,     21,     12,      0,      0,  14336,     14, }, /*  12 */\n  {   100,     21,     12,      0,      0,  28672,     14, }, /*  13 */\n  {   100,     21,     12,      0,      0,  28672,     16, }, /*  14 */\n  {   100,     22,     12,      0,      0,  28672,     18, }, /*  15 */\n  {   100,     18,     12,      0,      0,  28672,     18, }, /*  16 */\n  {   100,     21,     12,      0,      0,  28672,     12, }, /*  17 */\n  {   100,     25,     12,      0,      0,  12288,     20, }, /*  18 */\n  {   100,     21,     12,      0,      0,   8192,     22, }, /*  19 */\n  {   100,     17,     12,      0,      0,  12288,     24, }, /*  20 */\n  {   100,     21,     12,      0,      0,   8192,     26, }, /*  21 */\n  {   100,     21,     12,      0,      0,   8192,     14, }, /*  22 */\n  {   100,     13,     12,      0,      0,  10240,     28, }, /*  23 */\n  {   100,     21,     12,      0,      0,   8192,     30, }, /*  24 */\n  {   100,     21,     12,      0,      0,  28672,     22, }, /*  25 */\n  {   100,     25,     12,      0,      0,  28672,     32, }, /*  26 */\n  {   100,     25,     12,      0,      0,  28672,     20, }, /*  27 */\n  {     0,      9,     12,      0,     32,  18432,     34, }, /*  28 */\n  {     0,      9,     12,      0,     32,  18432,     36, }, /*  29 */\n  {     0,      9,     12,    100,     32,  18432,     36, }, /*  30 */\n  {     0,      9,     12,      1,     32,  18432,     36, }, /*  31 */\n  {   100,     24,     12,      0,      0,  28672,     38, }, /*  32 */\n  {   100,     16,     12,      0,      0,  28672,     40, }, /*  33 */\n  {   100,     24,     12,      0,      0,  28672,     42, }, /*  34 */\n  {     0,      5,     12,      0,    -32,  18432,     44, }, /*  35 */\n  {     0,      5,     12,      0,    -32,  18432,     46, }, /*  36 */\n  {     0,      5,     12,      0,    -32,  18432,     48, }, /*  37 */\n  {     0,      5,     12,    100,    -32,  18432,     46, }, /*  38 */\n  {     0,      5,     12,      1,    -32,  18432,     46, }, /*  39 */\n  {   100,      0,      2,      0,      0,   6144,      0, }, /*  40 */\n  {   100,      0,      2,      0,      0,   4096,     50, }, /*  41 */\n  {   100,     29,     12,      0,      0,   8192,     52, }, /*  42 */\n  {   100,     21,     12,      0,      0,  28672,     54, }, /*  43 */\n  {   100,     23,     12,      0,      0,  14336,     54, }, /*  44 */\n  {   100,     26,     12,      0,      0,  28672,     54, }, /*  45 */\n  {   100,     24,     12,      0,      0,  28672,     56, }, /*  46 */\n  {   100,     26,     14,      0,      0,  28672,     58, }, /*  47 */\n  {     0,      7,     12,      0,      0,  18432,     60, }, /*  48 */\n  {   100,     20,     12,      0,      0,  28672,     62, }, /*  49 */\n  {   100,     25,     12,      0,      0,  28672,     64, }, /*  50 */\n  {   100,      1,      2,      0,      0,   6144,     66, }, /*  51 */\n  {   100,     26,     12,      0,      0,  14336,     54, }, /*  52 */\n  {   100,     25,     12,      0,      0,  14336,     64, }, /*  53 */\n  {   100,     15,     12,      0,      0,  10240,     68, }, /*  54 */\n  {   100,      5,     12,     26,    775,  18432,     70, }, /*  55 */\n  {   100,     21,     12,      0,      0,  28676,     72, }, /*  56 */\n  {   100,     19,     12,      0,      0,  28672,     62, }, /*  57 */\n  {   100,     15,     12,      0,      0,  28672,     74, }, /*  58 */\n  {     0,      9,     12,      0,     32,  18432,     76, }, /*  59 */\n  {     0,      9,     12,    104,     32,  18432,     76, }, /*  60 */\n  {     0,      5,     12,      0,   7615,  18432,     70, }, /*  61 */\n  {     0,      5,     12,      0,    -32,  18432,     78, }, /*  62 */\n  {     0,      5,     12,    104,    -32,  18432,     78, }, /*  63 */\n  {     0,      5,     12,      0,    121,  18432,     78, }, /*  64 */\n  {     0,      9,     12,      0,      1,  18432,     76, }, /*  65 */\n  {     0,      5,     12,      0,     -1,  18432,     78, }, /*  66 */\n  {     0,      5,     12,      0,     -1,  18432,     80, }, /*  67 */\n  {     0,      9,     12,      0,      0,  18432,     76, }, /*  68 */\n  {     0,      5,     12,      0,      0,  18432,     78, }, /*  69 */\n  {     0,      5,     12,      0,      0,  18432,     60, }, /*  70 */\n  {     0,      5,     12,      0,      0,  18432,     82, }, /*  71 */\n  {     0,      9,     12,      0,   -121,  18432,     76, }, /*  72 */\n  {     0,      5,     12,      1,      0,  18432,     70, }, /*  73 */\n  {     0,      5,     12,      0,    195,  18432,     78, }, /*  74 */\n  {     0,      9,     12,      0,    210,  18432,     76, }, /*  75 */\n  {     0,      9,     12,      0,    206,  18432,     76, }, /*  76 */\n  {     0,      9,     12,      0,    205,  18432,     76, }, /*  77 */\n  {     0,      9,     12,      0,     79,  18432,     76, }, /*  78 */\n  {     0,      9,     12,      0,    202,  18432,     76, }, /*  79 */\n  {     0,      9,     12,      0,    203,  18432,     76, }, /*  80 */\n  {     0,      9,     12,      0,    207,  18432,     76, }, /*  81 */\n  {     0,      5,     12,      0,     97,  18432,     78, }, /*  82 */\n  {     0,      9,     12,      0,    211,  18432,     76, }, /*  83 */\n  {     0,      9,     12,      0,    209,  18432,     76, }, /*  84 */\n  {     0,      5,     12,      0,    163,  18432,     78, }, /*  85 */\n  {     0,      5,     12,      0,  42561,  18432,     78, }, /*  86 */\n  {     0,      9,     12,      0,    213,  18432,     76, }, /*  87 */\n  {     0,      5,     12,      0,    130,  18432,     78, }, /*  88 */\n  {     0,      9,     12,      0,    214,  18432,     76, }, /*  89 */\n  {     0,      9,     12,      0,    218,  18432,     76, }, /*  90 */\n  {     0,      9,     12,      0,    217,  18432,     76, }, /*  91 */\n  {     0,      9,     12,      0,    219,  18432,     76, }, /*  92 */\n  {     0,      7,     12,      0,      0,  18432,     84, }, /*  93 */\n  {     0,      5,     12,      0,     56,  18432,     78, }, /*  94 */\n  {     0,      9,     12,      5,      2,  18432,     86, }, /*  95 */\n  {     0,      8,     12,      5,      1,  18432,     88, }, /*  96 */\n  {     0,      5,     12,      5,     -2,  18432,     78, }, /*  97 */\n  {     0,      9,     12,      9,      2,  18432,     86, }, /*  98 */\n  {     0,      8,     12,      9,      1,  18432,     88, }, /*  99 */\n  {     0,      5,     12,      9,     -2,  18432,     78, }, /* 100 */\n  {     0,      9,     12,     13,      2,  18432,     86, }, /* 101 */\n  {     0,      8,     12,     13,      1,  18432,     88, }, /* 102 */\n  {     0,      5,     12,     13,     -2,  18432,     78, }, /* 103 */\n  {     0,      5,     12,      0,    -79,  18432,     78, }, /* 104 */\n  {     0,      9,     12,     17,      2,  18432,     86, }, /* 105 */\n  {     0,      8,     12,     17,      1,  18432,     88, }, /* 106 */\n  {     0,      5,     12,     17,     -2,  18432,     78, }, /* 107 */\n  {     0,      9,     12,      0,    -97,  18432,     76, }, /* 108 */\n  {     0,      9,     12,      0,    -56,  18432,     76, }, /* 109 */\n  {     0,      9,     12,      0,   -130,  18432,     76, }, /* 110 */\n  {     0,      9,     12,      0,  10795,  18432,     76, }, /* 111 */\n  {     0,      9,     12,      0,   -163,  18432,     76, }, /* 112 */\n  {     0,      9,     12,      0,  10792,  18432,     76, }, /* 113 */\n  {     0,      5,     12,      0,  10815,  18432,     78, }, /* 114 */\n  {     0,      9,     12,      0,   -195,  18432,     76, }, /* 115 */\n  {     0,      9,     12,      0,     69,  18432,     76, }, /* 116 */\n  {     0,      9,     12,      0,     71,  18432,     76, }, /* 117 */\n  {     0,      5,     12,      0,  10783,  18432,     78, }, /* 118 */\n  {     0,      5,     12,      0,  10780,  18432,     78, }, /* 119 */\n  {     0,      5,     12,      0,  10782,  18432,     78, }, /* 120 */\n  {     0,      5,     12,      0,   -210,  18432,     78, }, /* 121 */\n  {     0,      5,     12,      0,   -206,  18432,     78, }, /* 122 */\n  {     0,      5,     12,      0,   -205,  18432,     78, }, /* 123 */\n  {     0,      5,     12,      0,   -202,  18432,     78, }, /* 124 */\n  {     0,      5,     12,      0,   -203,  18432,     78, }, /* 125 */\n  {     0,      5,     12,      0,  42319,  18432,     78, }, /* 126 */\n  {     0,      5,     12,      0,  42315,  18432,     78, }, /* 127 */\n  {     0,      5,     12,      0,   -207,  18432,     78, }, /* 128 */\n  {     0,      5,     12,      0,  42343,  18432,     78, }, /* 129 */\n  {     0,      5,     12,      0,  42280,  18432,     78, }, /* 130 */\n  {     0,      5,     12,      0,  42308,  18432,     78, }, /* 131 */\n  {     0,      5,     12,      0,   -209,  18432,     80, }, /* 132 */\n  {     0,      5,     12,      0,   -211,  18432,     78, }, /* 133 */\n  {     0,      5,     12,      0,  10743,  18432,     78, }, /* 134 */\n  {     0,      5,     12,      0,  42305,  18432,     78, }, /* 135 */\n  {     0,      5,     12,      0,  10749,  18432,     78, }, /* 136 */\n  {     0,      5,     12,      0,   -213,  18432,     78, }, /* 137 */\n  {     0,      5,     12,      0,   -214,  18432,     78, }, /* 138 */\n  {     0,      5,     12,      0,  10727,  18432,     78, }, /* 139 */\n  {     0,      5,     12,      0,   -218,  18432,     78, }, /* 140 */\n  {     0,      5,     12,      0,  42307,  18432,     78, }, /* 141 */\n  {     0,      5,     12,      0,  42282,  18432,     78, }, /* 142 */\n  {     0,      5,     12,      0,    -69,  18432,     78, }, /* 143 */\n  {     0,      5,     12,      0,   -217,  18432,     78, }, /* 144 */\n  {     0,      5,     12,      0,    -71,  18432,     78, }, /* 145 */\n  {     0,      5,     12,      0,   -219,  18432,     78, }, /* 146 */\n  {     0,      5,     12,      0,  42261,  18432,     80, }, /* 147 */\n  {     0,      5,     12,      0,  42258,  18432,     78, }, /* 148 */\n  {     0,      6,     12,      0,      0,  18432,     90, }, /* 149 */\n  {     0,      6,     12,      0,      0,  18432,     92, }, /* 150 */\n  {   100,      6,     12,      0,      0,  28672,     94, }, /* 151 */\n  {   100,      6,     12,      0,      0,  18432,     94, }, /* 152 */\n  {   100,      6,     12,      0,      0,  18440,     94, }, /* 153 */\n  {   100,      6,     12,      0,      0,  18432,     90, }, /* 154 */\n  {   100,      6,     12,      0,      0,  28684,     94, }, /* 155 */\n  {   100,      6,     12,      0,      0,  28688,     94, }, /* 156 */\n  {   100,      6,     12,      0,      0,  18432,     96, }, /* 157 */\n  {   100,     24,     12,      0,      0,  28692,     56, }, /* 158 */\n  {   100,     24,     12,      0,      0,  28684,     56, }, /* 159 */\n  {    29,     24,     12,      0,      0,  28672,     56, }, /* 160 */\n  {   107,     12,      3,      0,      0,  26648,     98, }, /* 161 */\n  {   107,     12,      3,      0,      0,  26652,     98, }, /* 162 */\n  {   107,     12,      3,      0,      0,  26656,     98, }, /* 163 */\n  {   107,     12,      3,      0,      0,  26660,     98, }, /* 164 */\n  {   107,     12,      3,      0,      0,  26664,     98, }, /* 165 */\n  {   107,     12,      3,      0,      0,  26668,     98, }, /* 166 */\n  {   107,     12,      3,      0,      0,  26672,     98, }, /* 167 */\n  {   107,     12,      3,      0,      0,  26676,     98, }, /* 168 */\n  {   107,     12,      3,      0,      0,  26680,     98, }, /* 169 */\n  {   107,     12,      3,      0,      0,  26684,     98, }, /* 170 */\n  {   107,     12,      3,      0,      0,  26688,     98, }, /* 171 */\n  {   107,     12,      3,      0,      0,  26692,     98, }, /* 172 */\n  {   107,     12,      3,      0,      0,  26696,     98, }, /* 173 */\n  {   107,     12,      3,      0,      0,  26700,     98, }, /* 174 */\n  {   107,     12,      3,      0,      0,  26704,     98, }, /* 175 */\n  {   107,     12,      3,      0,      0,  26624,     98, }, /* 176 */\n  {   107,     12,      3,      0,      0,  26708,     98, }, /* 177 */\n  {   107,     12,      3,      0,      0,  26712,     98, }, /* 178 */\n  {   107,     12,      3,      0,      0,  26716,     98, }, /* 179 */\n  {   107,     12,      3,      0,      0,  26720,     98, }, /* 180 */\n  {   107,     12,      3,      0,      0,  26724,     98, }, /* 181 */\n  {   107,     12,      3,      0,      0,  26728,     98, }, /* 182 */\n  {   107,     12,      3,      0,      0,  26732,     98, }, /* 183 */\n  {   107,     12,      3,      0,      0,  26736,     98, }, /* 184 */\n  {   107,     12,      3,      0,      0,  26740,     98, }, /* 185 */\n  {   107,     12,      3,     21,    116,  26740,    100, }, /* 186 */\n  {   107,     12,      3,      0,      0,  26624,    102, }, /* 187 */\n  {   107,     12,      3,      0,      0,  26744,    104, }, /* 188 */\n  {   107,     12,      3,      0,      0,  26624,    104, }, /* 189 */\n  {   107,     12,      3,      0,      0,  26748,     98, }, /* 190 */\n  {   107,     12,      3,      0,      0,  26752,    106, }, /* 191 */\n  {     1,      9,     12,      0,      1,  18432,     76, }, /* 192 */\n  {     1,      5,     12,      0,     -1,  18432,     78, }, /* 193 */\n  {   100,      6,     12,      0,      0,  28804,     94, }, /* 194 */\n  {     1,     24,     12,      0,      0,  28804,     56, }, /* 195 */\n  {    99,      2,     12,      0,      0,  18432,      0, }, /* 196 */\n  {     1,      6,     12,      0,      0,  18432,    108, }, /* 197 */\n  {     1,      5,     12,      0,    130,  18432,     78, }, /* 198 */\n  {   100,     21,     12,      0,      0,  28672,    110, }, /* 199 */\n  {     1,      9,     12,      0,    116,  18432,     76, }, /* 200 */\n  {     1,     24,     12,      0,      0,  28672,     56, }, /* 201 */\n  {     1,      9,     12,      0,     38,  18432,     76, }, /* 202 */\n  {   100,     21,     12,      0,      0,  28672,    112, }, /* 203 */\n  {     1,      9,     12,      0,     37,  18432,     76, }, /* 204 */\n  {     1,      9,     12,      0,     64,  18432,     76, }, /* 205 */\n  {     1,      9,     12,      0,     63,  18432,     76, }, /* 206 */\n  {     1,      5,     12,      0,   7235,  18432,     78, }, /* 207 */\n  {     1,      9,     12,      0,     32,  18432,     76, }, /* 208 */\n  {     1,      9,     12,     34,     32,  18432,     76, }, /* 209 */\n  {     1,      9,     12,     59,     32,  18432,     76, }, /* 210 */\n  {     1,      9,     12,     38,     32,  18432,     76, }, /* 211 */\n  {     1,      9,     12,     21,     32,  18432,     76, }, /* 212 */\n  {     1,      9,     12,     51,     32,  18432,     76, }, /* 213 */\n  {     1,      9,     12,     26,     32,  18432,     76, }, /* 214 */\n  {     1,      9,     12,     47,     32,  18432,     76, }, /* 215 */\n  {     1,      9,     12,     55,     32,  18432,     76, }, /* 216 */\n  {     1,      9,     12,     30,     32,  18432,     76, }, /* 217 */\n  {     1,      9,     12,     43,     32,  18432,     76, }, /* 218 */\n  {     1,      9,     12,     96,     32,  18432,     76, }, /* 219 */\n  {     1,      5,     12,      0,    -38,  18432,     78, }, /* 220 */\n  {     1,      5,     12,      0,    -37,  18432,     78, }, /* 221 */\n  {     1,      5,     12,      0,   7219,  18432,     78, }, /* 222 */\n  {     1,      5,     12,      0,    -32,  18432,     78, }, /* 223 */\n  {     1,      5,     12,     34,    -32,  18432,     78, }, /* 224 */\n  {     1,      5,     12,     59,    -32,  18432,     78, }, /* 225 */\n  {     1,      5,     12,     38,    -32,  18432,     78, }, /* 226 */\n  {     1,      5,     12,     21,   -116,  18432,     78, }, /* 227 */\n  {     1,      5,     12,     51,    -32,  18432,     78, }, /* 228 */\n  {     1,      5,     12,     26,   -775,  18432,     78, }, /* 229 */\n  {     1,      5,     12,     47,    -32,  18432,     78, }, /* 230 */\n  {     1,      5,     12,     55,    -32,  18432,     78, }, /* 231 */\n  {     1,      5,     12,     30,      1,  18432,     70, }, /* 232 */\n  {     1,      5,     12,     30,    -32,  18432,     78, }, /* 233 */\n  {     1,      5,     12,     43,    -32,  18432,     78, }, /* 234 */\n  {     1,      5,     12,     96,    -32,  18432,     78, }, /* 235 */\n  {     1,      5,     12,      0,    -64,  18432,     78, }, /* 236 */\n  {     1,      5,     12,      0,    -63,  18432,     78, }, /* 237 */\n  {     1,      9,     12,      0,      8,  18432,     76, }, /* 238 */\n  {     1,      5,     12,     34,    -30,  18432,    114, }, /* 239 */\n  {     1,      5,     12,     38,    -25,  18432,    114, }, /* 240 */\n  {     1,      9,     12,      0,      0,  18432,    116, }, /* 241 */\n  {     1,      9,     12,      0,      0,  18432,    118, }, /* 242 */\n  {     1,      5,     12,     43,    -15,  18432,    114, }, /* 243 */\n  {     1,      5,     12,     47,    -22,  18432,     70, }, /* 244 */\n  {     1,      5,     12,      0,     -8,  18432,     78, }, /* 245 */\n  {    43,      9,     12,      0,      1,  18432,     76, }, /* 246 */\n  {    43,      5,     12,      0,     -1,  18432,     78, }, /* 247 */\n  {     1,      5,     12,     51,    -54,  18432,    114, }, /* 248 */\n  {     1,      5,     12,     55,    -48,  18432,    114, }, /* 249 */\n  {     1,      5,     12,      0,      7,  18432,     78, }, /* 250 */\n  {     1,      5,     12,      0,   -116,  18432,     80, }, /* 251 */\n  {     1,      9,     12,     38,    -60,  18432,    120, }, /* 252 */\n  {     1,      5,     12,     59,    -64,  18432,    114, }, /* 253 */\n  {     1,     25,     12,      0,      0,  28672,    122, }, /* 254 */\n  {     1,      9,     12,      0,     -7,  18432,     76, }, /* 255 */\n  {     1,      5,     12,      0,      0,  18432,     60, }, /* 256 */\n  {     1,      9,     12,      0,   -130,  18432,     76, }, /* 257 */\n  {     2,      9,     12,      0,     80,  18432,     76, }, /* 258 */\n  {     2,      9,     12,      0,     32,  18432,     76, }, /* 259 */\n  {     2,      9,     12,     63,     32,  18432,     76, }, /* 260 */\n  {     2,      9,     12,     67,     32,  18432,     76, }, /* 261 */\n  {     2,      9,     12,     71,     32,  18432,     76, }, /* 262 */\n  {     2,      9,     12,     75,     32,  18432,     76, }, /* 263 */\n  {     2,      9,     12,     79,     32,  18432,     76, }, /* 264 */\n  {     2,      9,     12,     84,     32,  18432,     76, }, /* 265 */\n  {     2,      5,     12,      0,    -32,  18432,     78, }, /* 266 */\n  {     2,      5,     12,     63,    -32,  18432,     78, }, /* 267 */\n  {     2,      5,     12,     67,    -32,  18432,     78, }, /* 268 */\n  {     2,      5,     12,     71,    -32,  18432,     78, }, /* 269 */\n  {     2,      5,     12,     75,    -32,  18432,     78, }, /* 270 */\n  {     2,      5,     12,     79,    -32,  18432,     78, }, /* 271 */\n  {     2,      5,     12,     84,    -32,  18432,     78, }, /* 272 */\n  {     2,      5,     12,      0,    -80,  18432,     78, }, /* 273 */\n  {     2,      5,     12,      0,    -80,  18432,     80, }, /* 274 */\n  {     2,      9,     12,      0,      1,  18432,     76, }, /* 275 */\n  {     2,      5,     12,      0,     -1,  18432,     78, }, /* 276 */\n  {     2,      9,     12,     88,      1,  18432,     76, }, /* 277 */\n  {     2,      5,     12,     88,     -1,  18432,     78, }, /* 278 */\n  {     2,     26,     12,      0,      0,  18432,     74, }, /* 279 */\n  {     2,     12,      3,      0,      0,  26760,     98, }, /* 280 */\n  {     2,     12,      3,      0,      0,  26764,     98, }, /* 281 */\n  {   107,     12,      3,      0,      0,  26768,     98, }, /* 282 */\n  {     2,     11,      3,      0,      0,  26624,    124, }, /* 283 */\n  {     2,      9,     12,      0,     15,  18432,     76, }, /* 284 */\n  {     2,      5,     12,      0,    -15,  18432,     78, }, /* 285 */\n  {     3,      9,     12,      0,     48,  18432,     76, }, /* 286 */\n  {     3,      6,     12,      0,      0,  18432,     94, }, /* 287 */\n  {     3,     21,     12,      0,      0,  18432,     74, }, /* 288 */\n  {     3,     21,     12,      0,      0,  18432,    126, }, /* 289 */\n  {     3,      5,     12,      0,      0,  18432,     60, }, /* 290 */\n  {     3,      5,     12,      0,    -48,  18432,     78, }, /* 291 */\n  {     3,      5,     12,      0,      0,  18432,     70, }, /* 292 */\n  {     3,     21,     12,      0,      0,  18580,    128, }, /* 293 */\n  {     3,     17,     12,      0,      0,  28672,    130, }, /* 294 */\n  {     3,     26,     12,      0,      0,  28672,     74, }, /* 295 */\n  {     3,     23,     12,      0,      0,  14336,     74, }, /* 296 */\n  {    99,      2,     12,      0,      0,  34816,      0, }, /* 297 */\n  {     4,     12,      3,      0,      0,  26624,     98, }, /* 298 */\n  {     4,     12,      3,      0,      0,  26624,    132, }, /* 299 */\n  {     4,     17,     12,      0,      0,  34816,    130, }, /* 300 */\n  {     4,     21,     12,      0,      0,  34816,     74, }, /* 301 */\n  {     4,     21,     12,      0,      0,  34816,    110, }, /* 302 */\n  {     4,      7,     12,      0,      0,  34816,     84, }, /* 303 */\n  {     4,     21,     12,      0,      0,  34816,    126, }, /* 304 */\n  {     5,      1,      4,      0,      0,   2048,    134, }, /* 305 */\n  {   100,      1,      4,      0,      0,   2048,    134, }, /* 306 */\n  {     5,     25,     12,      0,      0,  28672,    122, }, /* 307 */\n  {     5,     25,     12,      0,      0,      0,    122, }, /* 308 */\n  {     5,     21,     12,      0,      0,  14336,     74, }, /* 309 */\n  {     5,     23,     12,      0,      0,      0,     74, }, /* 310 */\n  {   100,     21,     12,      0,      0,   8344,    110, }, /* 311 */\n  {     5,     21,     12,      0,      0,      0,     74, }, /* 312 */\n  {     5,     26,     12,      0,      0,  28672,     74, }, /* 313 */\n  {     5,     12,      3,      0,      0,  26624,    106, }, /* 314 */\n  {   100,     21,     12,      0,      0,    152,    110, }, /* 315 */\n  {     5,      1,      2,      0,      0,    156,    136, }, /* 316 */\n  {     5,     21,     12,      0,      0,      0,    128, }, /* 317 */\n  {   100,     21,     12,      0,      0,    160,    128, }, /* 318 */\n  {     5,      7,     12,      0,      0,      0,     84, }, /* 319 */\n  {   100,      6,     12,      0,      0,    164,    138, }, /* 320 */\n  {   107,     12,      3,      0,      0,  26792,    132, }, /* 321 */\n  {   107,     12,      3,      0,      0,  26792,    106, }, /* 322 */\n  {   107,     12,      3,      0,      0,  26792,    140, }, /* 323 */\n  {     5,     12,      3,      0,      0,  26624,    132, }, /* 324 */\n  {     5,     12,      3,      0,      0,  26624,    142, }, /* 325 */\n  {     5,     13,     12,      0,      0,   2220,    144, }, /* 326 */\n  {     5,     21,     12,      0,      0,   2048,     74, }, /* 327 */\n  {     5,      7,     12,      0,      0,      0,    146, }, /* 328 */\n  {     5,     21,     12,      0,      0,    176,    128, }, /* 329 */\n  {     5,     12,      3,      0,      0,  26624,    140, }, /* 330 */\n  {     5,     12,      3,      0,      0,  26624,     98, }, /* 331 */\n  {     5,      6,     12,      0,      0,      0,     94, }, /* 332 */\n  {     5,     13,     12,      0,      0,  10240,    144, }, /* 333 */\n  {     5,     26,     12,      0,      0,      0,     74, }, /* 334 */\n  {     6,     21,     12,      0,      0,      0,    128, }, /* 335 */\n  {     6,     21,     12,      0,      0,      0,    110, }, /* 336 */\n  {     6,     21,     12,      0,      0,      0,     74, }, /* 337 */\n  {    99,      2,     12,      0,      0,      0,      0, }, /* 338 */\n  {     6,      1,      4,      0,      0,      0,    134, }, /* 339 */\n  {     6,      7,     12,      0,      0,      0,     84, }, /* 340 */\n  {     6,     12,      3,      0,      0,  26624,    106, }, /* 341 */\n  {     6,     12,      3,      0,      0,  26624,    132, }, /* 342 */\n  {     6,     12,      3,      0,      0,  26624,     98, }, /* 343 */\n  {     7,      7,     12,      0,      0,      0,     84, }, /* 344 */\n  {     7,     12,      3,      0,      0,  26624,    132, }, /* 345 */\n  {    48,     13,     12,      0,      0,  34816,    144, }, /* 346 */\n  {    48,      7,     12,      0,      0,  34816,     84, }, /* 347 */\n  {    48,     12,      3,      0,      0,  26624,     98, }, /* 348 */\n  {    48,      6,     12,      0,      0,  34816,     94, }, /* 349 */\n  {    48,     26,     12,      0,      0,  28672,     74, }, /* 350 */\n  {    48,     21,     12,      0,      0,  28672,     74, }, /* 351 */\n  {    48,     21,     12,      0,      0,  28672,    110, }, /* 352 */\n  {    48,     21,     12,      0,      0,  28672,    128, }, /* 353 */\n  {    48,      6,     12,      0,      0,  34816,    138, }, /* 354 */\n  {    48,     12,      3,      0,      0,  26624,    104, }, /* 355 */\n  {    48,     23,     12,      0,      0,  34816,     74, }, /* 356 */\n  {    54,      7,     12,      0,      0,  34816,     84, }, /* 357 */\n  {    54,     12,      3,      0,      0,  26624,    106, }, /* 358 */\n  {    54,     12,      3,      0,      0,  26624,     98, }, /* 359 */\n  {    54,      6,     12,      0,      0,  34816,    148, }, /* 360 */\n  {    54,     12,      3,      0,      0,  26624,    104, }, /* 361 */\n  {    54,     21,     12,      0,      0,  34816,    110, }, /* 362 */\n  {    54,     21,     12,      0,      0,  34816,     74, }, /* 363 */\n  {    54,     21,     12,      0,      0,  34816,    128, }, /* 364 */\n  {    59,      7,     12,      0,      0,  34816,     84, }, /* 365 */\n  {    59,     12,      3,      0,      0,  26624,    104, }, /* 366 */\n  {    59,     21,     12,      0,      0,  34816,    110, }, /* 367 */\n  {     5,     24,     12,      0,      0,      0,    126, }, /* 368 */\n  {     5,     12,      3,      0,      0,  26624,    150, }, /* 369 */\n  {     5,     12,      3,      0,      0,  26624,    104, }, /* 370 */\n  {     5,     12,      3,      0,      0,  26624,    152, }, /* 371 */\n  {     8,     12,      3,      0,      0,  26624,    106, }, /* 372 */\n  {     8,     10,      5,      0,      0,  18432,    154, }, /* 373 */\n  {     8,      7,     12,      0,      0,  18432,     84, }, /* 374 */\n  {     8,      7,     12,      0,      0,  18432,    156, }, /* 375 */\n  {     8,     12,      3,      0,      0,  26624,     98, }, /* 376 */\n  {     8,     12,      3,      0,      0,  26624,    158, }, /* 377 */\n  {   107,     12,      3,      0,      0,  26804,     98, }, /* 378 */\n  {   107,     12,      3,      0,      0,  26808,     98, }, /* 379 */\n  {   100,     21,     12,      0,      0,  18620,    128, }, /* 380 */\n  {   100,     21,     12,      0,      0,  18624,    128, }, /* 381 */\n  {     8,     13,     12,      0,      0,  18628,    144, }, /* 382 */\n  {     8,     21,     12,      0,      0,  18432,     74, }, /* 383 */\n  {     8,      6,     12,      0,      0,  18432,     94, }, /* 384 */\n  {     9,      7,     12,      0,      0,  18432,     84, }, /* 385 */\n  {     9,     12,      3,      0,      0,  26624,    106, }, /* 386 */\n  {     9,     10,      5,      0,      0,  18432,    154, }, /* 387 */\n  {     9,      7,     12,      0,      0,  18432,    156, }, /* 388 */\n  {     9,     12,      3,      0,      0,  26624,     98, }, /* 389 */\n  {     9,     10,      3,      0,      0,  18432,    160, }, /* 390 */\n  {     9,     12,      3,      0,      0,  26624,    158, }, /* 391 */\n  {     9,     13,     12,      0,      0,  18632,    144, }, /* 392 */\n  {     9,     23,     12,      0,      0,  14336,     74, }, /* 393 */\n  {     9,     15,     12,      0,      0,  18432,     74, }, /* 394 */\n  {     9,     26,     12,      0,      0,  18432,     74, }, /* 395 */\n  {     9,     21,     12,      0,      0,  18432,     74, }, /* 396 */\n  {     9,     12,      3,      0,      0,  26624,    104, }, /* 397 */\n  {    10,     12,      3,      0,      0,  26624,    106, }, /* 398 */\n  {    10,     10,      5,      0,      0,  18432,    154, }, /* 399 */\n  {    10,      7,     12,      0,      0,  18432,     84, }, /* 400 */\n  {    10,     12,      3,      0,      0,  26624,     98, }, /* 401 */\n  {    10,     12,      3,      0,      0,  26624,    158, }, /* 402 */\n  {    10,     13,     12,      0,      0,  18636,    144, }, /* 403 */\n  {    10,     12,      3,      0,      0,  26624,    162, }, /* 404 */\n  {    10,     21,     12,      0,      0,  18432,     74, }, /* 405 */\n  {    11,     12,      3,      0,      0,  26624,    106, }, /* 406 */\n  {    11,     10,      5,      0,      0,  18432,    154, }, /* 407 */\n  {    11,      7,     12,      0,      0,  18432,     84, }, /* 408 */\n  {    11,      7,     12,      0,      0,  18432,    156, }, /* 409 */\n  {    11,     12,      3,      0,      0,  26624,     98, }, /* 410 */\n  {    11,     12,      3,      0,      0,  26624,    158, }, /* 411 */\n  {    11,     13,     12,      0,      0,  18640,    144, }, /* 412 */\n  {    11,     21,     12,      0,      0,  18432,     74, }, /* 413 */\n  {    11,     23,     12,      0,      0,  14336,     74, }, /* 414 */\n  {    11,     12,      3,      0,      0,  26624,    162, }, /* 415 */\n  {    12,     12,      3,      0,      0,  26624,    106, }, /* 416 */\n  {    12,     10,      5,      0,      0,  18432,    154, }, /* 417 */\n  {    12,      7,     12,      0,      0,  18432,     84, }, /* 418 */\n  {    12,      7,     12,      0,      0,  18432,    156, }, /* 419 */\n  {    12,     12,      3,      0,      0,  26624,     98, }, /* 420 */\n  {    12,     10,      3,      0,      0,  18432,    160, }, /* 421 */\n  {    12,     12,      3,      0,      0,  26624,    158, }, /* 422 */\n  {    12,     12,      3,      0,      0,  26624,    164, }, /* 423 */\n  {    12,     13,     12,      0,      0,  18432,    144, }, /* 424 */\n  {    12,     26,     12,      0,      0,  18432,     74, }, /* 425 */\n  {    12,     15,     12,      0,      0,  18432,     74, }, /* 426 */\n  {    13,     12,      3,      0,      0,  26624,    106, }, /* 427 */\n  {    13,      7,     12,      0,      0,  18432,     84, }, /* 428 */\n  {    13,     10,      3,      0,      0,  18432,    160, }, /* 429 */\n  {    13,     10,      5,      0,      0,  18432,    154, }, /* 430 */\n  {    13,     12,      3,      0,      0,  26624,    158, }, /* 431 */\n  {    13,     13,     12,      0,      0,  18644,    144, }, /* 432 */\n  {    13,     15,     12,      0,      0,  18644,     74, }, /* 433 */\n  {    13,     26,     12,      0,      0,  28884,     74, }, /* 434 */\n  {    13,     26,     12,      0,      0,  28672,     74, }, /* 435 */\n  {    13,     23,     12,      0,      0,  14336,     74, }, /* 436 */\n  {    14,     12,      3,      0,      0,  26624,    106, }, /* 437 */\n  {    14,     10,      5,      0,      0,  18432,    154, }, /* 438 */\n  {    14,      7,     12,      0,      0,  18432,     84, }, /* 439 */\n  {    14,      7,     12,      0,      0,  18432,    156, }, /* 440 */\n  {    14,     12,      3,      0,      0,  26624,     98, }, /* 441 */\n  {    14,     12,      3,      0,      0,  26624,    158, }, /* 442 */\n  {    14,     13,     12,      0,      0,  18432,    144, }, /* 443 */\n  {    14,     21,     12,      0,      0,  18432,     74, }, /* 444 */\n  {    14,     15,     12,      0,      0,  28672,     74, }, /* 445 */\n  {    14,     26,     12,      0,      0,  18432,     74, }, /* 446 */\n  {    15,      7,     12,      0,      0,  18432,     84, }, /* 447 */\n  {    15,     12,      3,      0,      0,  26624,    106, }, /* 448 */\n  {    15,     10,      5,      0,      0,  18432,    154, }, /* 449 */\n  {    15,     21,     12,      0,      0,  18432,     74, }, /* 450 */\n  {    15,     12,      3,      0,      0,  26624,     98, }, /* 451 */\n  {    15,     12,      3,      0,      0,  18432,    106, }, /* 452 */\n  {    15,     10,      3,      0,      0,  18432,    160, }, /* 453 */\n  {    15,     12,      3,      0,      0,  26624,    158, }, /* 454 */\n  {    15,     13,     12,      0,      0,  18648,    144, }, /* 455 */\n  {    16,     12,      3,      0,      0,  26624,    106, }, /* 456 */\n  {    16,     10,      5,      0,      0,  18432,    154, }, /* 457 */\n  {    16,      7,     12,      0,      0,  18432,     84, }, /* 458 */\n  {    16,      7,     12,      0,      0,  18432,    156, }, /* 459 */\n  {    16,     12,      3,      0,      0,  26624,    158, }, /* 460 */\n  {    16,     10,      3,      0,      0,  18432,    160, }, /* 461 */\n  {    16,      7,      4,      0,      0,  18432,     84, }, /* 462 */\n  {    16,     26,     12,      0,      0,  18432,     74, }, /* 463 */\n  {    16,     15,     12,      0,      0,  18432,     74, }, /* 464 */\n  {    16,     13,     12,      0,      0,  18432,    144, }, /* 465 */\n  {    17,     12,      3,      0,      0,  26624,    106, }, /* 466 */\n  {    17,     10,      5,      0,      0,  18432,    154, }, /* 467 */\n  {    17,      7,     12,      0,      0,  18432,     84, }, /* 468 */\n  {    17,     12,      3,      0,      0,  26624,    158, }, /* 469 */\n  {    17,     10,      3,      0,      0,  18432,    160, }, /* 470 */\n  {    17,     13,     12,      0,      0,  18432,    144, }, /* 471 */\n  {    17,     21,     12,      0,      0,  18432,     74, }, /* 472 */\n  {    18,      7,     12,      0,      0,  18432,     84, }, /* 473 */\n  {    18,     12,      3,      0,      0,  26624,    106, }, /* 474 */\n  {    18,      7,      5,      0,      0,  18432,    166, }, /* 475 */\n  {    18,     12,      3,      0,      0,  26624,    168, }, /* 476 */\n  {   100,     23,     12,      0,      0,  14336,     74, }, /* 477 */\n  {    18,      7,     12,      0,      0,  18432,    170, }, /* 478 */\n  {    18,      6,     12,      0,      0,  18432,    138, }, /* 479 */\n  {    18,     12,      3,      0,      0,  26624,     98, }, /* 480 */\n  {    18,     21,     12,      0,      0,  18432,     74, }, /* 481 */\n  {    18,     13,     12,      0,      0,  18432,    144, }, /* 482 */\n  {    18,     21,     12,      0,      0,  18432,    110, }, /* 483 */\n  {   101,      7,     12,      0,      0,  18432,     84, }, /* 484 */\n  {   101,     12,      3,      0,      0,  26624,    106, }, /* 485 */\n  {   101,      7,      5,      0,      0,  18432,    166, }, /* 486 */\n  {   101,     12,      3,      0,      0,  26624,    158, }, /* 487 */\n  {   101,      7,     12,      0,      0,  18432,    170, }, /* 488 */\n  {   101,      6,     12,      0,      0,  18432,    138, }, /* 489 */\n  {   101,     12,      3,      0,      0,  26624,     98, }, /* 490 */\n  {   101,     12,      3,      0,      0,  26624,    104, }, /* 491 */\n  {   101,     13,     12,      0,      0,  18432,    144, }, /* 492 */\n  {    19,      7,     12,      0,      0,  18432,     84, }, /* 493 */\n  {    19,     26,     12,      0,      0,  18432,     74, }, /* 494 */\n  {    19,     21,     12,      0,      0,  18432,     74, }, /* 495 */\n  {    19,     21,     12,      0,      0,  18432,    110, }, /* 496 */\n  {    19,     12,      3,      0,      0,  26624,     98, }, /* 497 */\n  {    19,     13,     12,      0,      0,  18432,    144, }, /* 498 */\n  {    19,     15,     12,      0,      0,  18432,     74, }, /* 499 */\n  {    19,     22,     12,      0,      0,  28672,    172, }, /* 500 */\n  {    19,     18,     12,      0,      0,  28672,    172, }, /* 501 */\n  {    19,     10,      5,      0,      0,  18432,    174, }, /* 502 */\n  {    19,     12,      3,      0,      0,  26624,    106, }, /* 503 */\n  {    19,     12,      3,      0,      0,  26624,    176, }, /* 504 */\n  {    19,     10,      5,      0,      0,  18432,    154, }, /* 505 */\n  {    19,     12,      3,      0,      0,  26624,    132, }, /* 506 */\n  {    19,     12,      3,      0,      0,  26624,    158, }, /* 507 */\n  {   100,     26,     12,      0,      0,  18432,     74, }, /* 508 */\n  {    20,      7,     12,      0,      0,  18432,    156, }, /* 509 */\n  {    20,     10,     12,      0,      0,  18432,    154, }, /* 510 */\n  {    20,     12,      3,      0,      0,  26624,    106, }, /* 511 */\n  {    20,     10,      5,      0,      0,  18432,    154, }, /* 512 */\n  {    20,     12,      3,      0,      0,  26624,     98, }, /* 513 */\n  {    20,     12,      3,      0,      0,  26624,    158, }, /* 514 */\n  {    20,     13,     12,      0,      0,  18652,    144, }, /* 515 */\n  {    20,     21,     12,      0,      0,  18432,    128, }, /* 516 */\n  {    20,     21,     12,      0,      0,  18432,     74, }, /* 517 */\n  {    20,     10,     12,      0,      0,  18432,    178, }, /* 518 */\n  {    20,     12,      3,      0,      0,  26624,    132, }, /* 519 */\n  {    20,     13,     12,      0,      0,  18432,    144, }, /* 520 */\n  {    20,     26,     12,      0,      0,  18432,     74, }, /* 521 */\n  {    21,      9,     12,      0,   7264,  18432,     76, }, /* 522 */\n  {    21,      5,     12,      0,   3008,  18432,    180, }, /* 523 */\n  {   100,     21,     12,      0,      0,  18656,     74, }, /* 524 */\n  {    21,      6,     12,      0,      0,  18432,    182, }, /* 525 */\n  {    22,      7,      6,      0,      0,  18432,     84, }, /* 526 */\n  {    22,      7,      6,      0,      0,  18432,    184, }, /* 527 */\n  {    22,      7,      7,      0,      0,  18432,    184, }, /* 528 */\n  {    22,      7,      7,      0,      0,  18432,     84, }, /* 529 */\n  {    22,      7,      8,      0,      0,  18432,     84, }, /* 530 */\n  {    23,      7,     12,      0,      0,  18432,     84, }, /* 531 */\n  {    23,     12,      3,      0,      0,  26624,     98, }, /* 532 */\n  {    23,     21,     12,      0,      0,  18432,     74, }, /* 533 */\n  {    23,     21,     12,      0,      0,  18432,    110, }, /* 534 */\n  {    23,     21,     12,      0,      0,  18432,    128, }, /* 535 */\n  {    23,     15,     12,      0,      0,  18432,    144, }, /* 536 */\n  {    23,     15,     12,      0,      0,  18432,     74, }, /* 537 */\n  {    23,     26,     12,      0,      0,  28672,     74, }, /* 538 */\n  {    24,      9,     12,      0,  38864,  18432,    186, }, /* 539 */\n  {    24,      9,     12,      0,      8,  18432,    186, }, /* 540 */\n  {    24,      5,     12,      0,     -8,  18432,     70, }, /* 541 */\n  {   102,     17,     12,      0,      0,  28672,    130, }, /* 542 */\n  {   102,      7,     12,      0,      0,  18432,     84, }, /* 543 */\n  {   102,     26,     12,      0,      0,  18432,     74, }, /* 544 */\n  {   102,     21,     12,      0,      0,  18432,    128, }, /* 545 */\n  {   103,     29,     12,      0,      0,  45056,     52, }, /* 546 */\n  {   103,      7,     12,      0,      0,  18432,     84, }, /* 547 */\n  {   103,     22,     12,      0,      0,  28672,    172, }, /* 548 */\n  {   103,     18,     12,      0,      0,  28672,    172, }, /* 549 */\n  {    25,      7,     12,      0,      0,  18432,     84, }, /* 550 */\n  {   100,     21,     12,      0,      0,  18660,    110, }, /* 551 */\n  {    25,     14,     12,      0,      0,  18432,     84, }, /* 552 */\n  {    33,      7,     12,      0,      0,  18432,     84, }, /* 553 */\n  {    33,     12,      3,      0,      0,  26624,    106, }, /* 554 */\n  {    33,     12,      3,      0,      0,  26624,    158, }, /* 555 */\n  {    33,     10,      3,      0,      0,  18432,    188, }, /* 556 */\n  {    34,      7,     12,      0,      0,  18432,     84, }, /* 557 */\n  {    34,     12,      3,      0,      0,  26624,    106, }, /* 558 */\n  {    34,     10,      3,      0,      0,  18432,    188, }, /* 559 */\n  {   100,     21,     12,      0,      0,  18664,    128, }, /* 560 */\n  {    35,      7,     12,      0,      0,  18432,     84, }, /* 561 */\n  {    35,     12,      3,      0,      0,  26624,    106, }, /* 562 */\n  {    36,      7,     12,      0,      0,  18432,     84, }, /* 563 */\n  {    36,     12,      3,      0,      0,  26624,    106, }, /* 564 */\n  {   104,      7,     12,      0,      0,  18432,    156, }, /* 565 */\n  {   104,      7,     12,      0,      0,  18432,    190, }, /* 566 */\n  {   104,     12,      3,      0,      0,  26624,    102, }, /* 567 */\n  {   104,     10,      5,      0,      0,  18432,    154, }, /* 568 */\n  {   104,     12,      3,      0,      0,  26624,    106, }, /* 569 */\n  {   104,     12,      3,      0,      0,  26624,     98, }, /* 570 */\n  {   104,     12,      3,      0,      0,  26624,    158, }, /* 571 */\n  {   104,     21,     12,      0,      0,  18432,    128, }, /* 572 */\n  {   104,     21,     12,      0,      0,  18432,    110, }, /* 573 */\n  {   104,      6,     12,      0,      0,  18432,    148, }, /* 574 */\n  {   104,     21,     12,      0,      0,  18432,     74, }, /* 575 */\n  {   104,     23,     12,      0,      0,  14336,     74, }, /* 576 */\n  {   104,      7,     12,      0,      0,  18432,     84, }, /* 577 */\n  {   104,     13,     12,      0,      0,  18432,    144, }, /* 578 */\n  {   104,     15,     12,      0,      0,  28672,     74, }, /* 579 */\n  {    26,     21,     12,      0,      0,  28672,     74, }, /* 580 */\n  {   100,     21,     12,      0,      0,  28908,    110, }, /* 581 */\n  {   100,     21,     12,      0,      0,  28908,    128, }, /* 582 */\n  {    26,     21,     12,      0,      0,  28672,    110, }, /* 583 */\n  {    26,     17,     12,      0,      0,  28672,    130, }, /* 584 */\n  {    26,     21,     12,      0,      0,  28672,    128, }, /* 585 */\n  {    26,     21,     12,      0,      0,  28672,    192, }, /* 586 */\n  {    26,     12,      3,      0,      0,  26624,    194, }, /* 587 */\n  {    26,      1,      2,      0,      0,   6144,     66, }, /* 588 */\n  {    26,     13,     12,      0,      0,  18432,    144, }, /* 589 */\n  {    26,      7,     12,      0,      0,  18432,     84, }, /* 590 */\n  {    26,      6,     12,      0,      0,  18432,    138, }, /* 591 */\n  {    26,     12,      3,      0,      0,  26624,    196, }, /* 592 */\n  {    26,     12,      3,      0,      0,  26624,    106, }, /* 593 */\n  {    37,      7,     12,      0,      0,  18432,     84, }, /* 594 */\n  {    37,     12,      3,      0,      0,  26624,    106, }, /* 595 */\n  {    37,     10,      5,      0,      0,  18432,    154, }, /* 596 */\n  {    37,     12,      3,      0,      0,  26624,     98, }, /* 597 */\n  {    37,     26,     12,      0,      0,  28672,     74, }, /* 598 */\n  {    37,     21,     12,      0,      0,  28672,    128, }, /* 599 */\n  {    37,     13,     12,      0,      0,  18432,    144, }, /* 600 */\n  {    38,      7,     12,      0,      0,  18432,     84, }, /* 601 */\n  {   111,      7,     12,      0,      0,  18432,     84, }, /* 602 */\n  {   111,      7,     12,      0,      0,  18432,    170, }, /* 603 */\n  {   111,     13,     12,      0,      0,  18432,    144, }, /* 604 */\n  {   111,     15,     12,      0,      0,  18432,    144, }, /* 605 */\n  {   111,     26,     12,      0,      0,  28672,     74, }, /* 606 */\n  {   104,     26,     12,      0,      0,  28672,     74, }, /* 607 */\n  {    42,      7,     12,      0,      0,  18432,     84, }, /* 608 */\n  {    42,     12,      3,      0,      0,  26624,    106, }, /* 609 */\n  {    42,     10,      5,      0,      0,  18432,    154, }, /* 610 */\n  {    42,     21,     12,      0,      0,  18432,     74, }, /* 611 */\n  {   124,      7,     12,      0,      0,  18432,    156, }, /* 612 */\n  {   124,     10,      5,      0,      0,  18432,    154, }, /* 613 */\n  {   124,     12,      3,      0,      0,  26624,    106, }, /* 614 */\n  {   124,     12,      3,      0,      0,  26624,    158, }, /* 615 */\n  {   124,     10,     12,      0,      0,  18432,    154, }, /* 616 */\n  {   124,     12,      3,      0,      0,  26624,     98, }, /* 617 */\n  {   124,     13,     12,      0,      0,  18432,    144, }, /* 618 */\n  {   124,     21,     12,      0,      0,  18432,     74, }, /* 619 */\n  {   124,      6,     12,      0,      0,  18432,    138, }, /* 620 */\n  {   124,     21,     12,      0,      0,  18432,    128, }, /* 621 */\n  {   107,     11,      3,      0,      0,  26624,    198, }, /* 622 */\n  {   107,     12,      3,      0,      0,  26624,    106, }, /* 623 */\n  {   114,     12,      3,      0,      0,  26624,    106, }, /* 624 */\n  {   114,     10,      5,      0,      0,  18432,    154, }, /* 625 */\n  {   114,      7,     12,      0,      0,  18432,     84, }, /* 626 */\n  {   114,      7,     12,      0,      0,  18432,    156, }, /* 627 */\n  {   114,     12,      3,      0,      0,  26624,     98, }, /* 628 */\n  {   114,     10,      3,      0,      0,  18432,    160, }, /* 629 */\n  {   114,     10,      3,      0,      0,  18432,    188, }, /* 630 */\n  {   114,     21,     12,      0,      0,  18432,    128, }, /* 631 */\n  {   114,     13,     12,      0,      0,  18432,    144, }, /* 632 */\n  {   114,     21,     12,      0,      0,  18432,     74, }, /* 633 */\n  {   114,     21,     12,      0,      0,  18432,    110, }, /* 634 */\n  {   114,     26,     12,      0,      0,  18432,     74, }, /* 635 */\n  {   117,     12,      3,      0,      0,  26624,    106, }, /* 636 */\n  {   117,     10,      5,      0,      0,  18432,    154, }, /* 637 */\n  {   117,      7,     12,      0,      0,  18432,    156, }, /* 638 */\n  {   117,     10,      3,      0,      0,  18432,    188, }, /* 639 */\n  {   117,     12,      3,      0,      0,  26624,    158, }, /* 640 */\n  {   117,     13,     12,      0,      0,  18432,    144, }, /* 641 */\n  {   117,      7,     12,      0,      0,  18432,     84, }, /* 642 */\n  {   133,      7,     12,      0,      0,  18432,     84, }, /* 643 */\n  {   133,     12,      3,      0,      0,  26624,     98, }, /* 644 */\n  {   133,     10,      5,      0,      0,  18432,    154, }, /* 645 */\n  {   133,     12,      3,      0,      0,  26624,    106, }, /* 646 */\n  {   133,     10,      3,      0,      0,  18432,    188, }, /* 647 */\n  {   133,     21,     12,      0,      0,  18432,     74, }, /* 648 */\n  {   118,      7,     12,      0,      0,  18432,     84, }, /* 649 */\n  {   118,     10,      5,      0,      0,  18432,    154, }, /* 650 */\n  {   118,     12,      3,      0,      0,  26624,    106, }, /* 651 */\n  {   118,     12,      3,      0,      0,  26624,    200, }, /* 652 */\n  {   118,     12,      3,      0,      0,  26624,     98, }, /* 653 */\n  {   118,     21,     12,      0,      0,  18432,    128, }, /* 654 */\n  {   118,     21,     12,      0,      0,  18432,    110, }, /* 655 */\n  {   118,     13,     12,      0,      0,  18432,    144, }, /* 656 */\n  {   119,     13,     12,      0,      0,  18432,    144, }, /* 657 */\n  {   119,      7,     12,      0,      0,  18432,     84, }, /* 658 */\n  {   119,      6,     12,      0,      0,  18432,     94, }, /* 659 */\n  {   119,      6,     12,      0,      0,  18432,     96, }, /* 660 */\n  {   119,     21,     12,      0,      0,  18432,    128, }, /* 661 */\n  {     2,      5,     12,     63,  -6222,  18432,     70, }, /* 662 */\n  {     2,      5,     12,     67,  -6221,  18432,     70, }, /* 663 */\n  {     2,      5,     12,     71,  -6212,  18432,     70, }, /* 664 */\n  {     2,      5,     12,     75,  -6210,  18432,     70, }, /* 665 */\n  {     2,      5,     12,     79,  -6210,  18432,     70, }, /* 666 */\n  {     2,      5,     12,     79,  -6211,  18432,     70, }, /* 667 */\n  {     2,      5,     12,     84,  -6204,  18432,     70, }, /* 668 */\n  {     2,      5,     12,     88,  -6180,  18432,     70, }, /* 669 */\n  {     2,      5,     12,    108,  35267,  18432,     70, }, /* 670 */\n  {    21,      9,     12,      0,  -3008,  18432,     76, }, /* 671 */\n  {   117,     21,     12,      0,      0,  18432,     74, }, /* 672 */\n  {   107,     12,      3,      0,      0,  26864,     98, }, /* 673 */\n  {   107,     12,      3,      0,      0,  26868,     98, }, /* 674 */\n  {   100,     21,     12,      0,      0,  18680,    202, }, /* 675 */\n  {   107,     12,      3,      0,      0,  26876,     98, }, /* 676 */\n  {   107,     12,      3,      0,      0,  26880,     98, }, /* 677 */\n  {   107,     12,      3,      0,      0,  26884,     98, }, /* 678 */\n  {   107,     12,      3,      0,      0,  26888,     98, }, /* 679 */\n  {   107,     12,      3,      0,      0,  26892,     98, }, /* 680 */\n  {   107,     12,      3,      0,      0,  26896,     98, }, /* 681 */\n  {   100,     10,      5,      0,      0,  18708,    174, }, /* 682 */\n  {   107,     12,      3,      0,      0,  26904,     98, }, /* 683 */\n  {   100,      7,     12,      0,      0,  18716,     84, }, /* 684 */\n  {   100,      7,     12,      0,      0,  18720,     84, }, /* 685 */\n  {   100,      7,     12,      0,      0,  18724,     84, }, /* 686 */\n  {   100,      7,     12,      0,      0,  18676,     84, }, /* 687 */\n  {   107,     12,      3,      0,      0,  26920,     98, }, /* 688 */\n  {   100,      7,     12,      0,      0,  18732,     84, }, /* 689 */\n  {   100,      7,     12,      0,      0,  18736,     84, }, /* 690 */\n  {   107,     12,      3,      0,      0,  26932,     98, }, /* 691 */\n  {   100,      7,     12,      0,      0,  18708,     84, }, /* 692 */\n  {   100,     10,      5,      0,      0,  18744,    174, }, /* 693 */\n  {   107,     12,      3,      0,      0,  26928,     98, }, /* 694 */\n  {   100,      7,     12,      0,      0,  18748,     84, }, /* 695 */\n  {     2,      5,     12,      0,      0,  18432,     60, }, /* 696 */\n  {     1,      6,     12,      0,      0,  18432,     90, }, /* 697 */\n  {     2,      6,     12,      0,      0,  18432,    182, }, /* 698 */\n  {     0,      5,     12,      0,  35332,  18432,     78, }, /* 699 */\n  {     0,      5,     12,      0,   3814,  18432,     78, }, /* 700 */\n  {     0,      5,     12,      0,  35384,  18432,     78, }, /* 701 */\n  {     0,      5,     12,      0,      0,  18432,    204, }, /* 702 */\n  {     1,      6,     12,      0,      0,  18432,    182, }, /* 703 */\n  {   107,     12,      3,      0,      0,  26740,    104, }, /* 704 */\n  {   107,     12,      3,      0,      0,  26944,     98, }, /* 705 */\n  {   107,     12,      3,      0,      0,  26948,     98, }, /* 706 */\n  {     0,      9,     12,     92,      1,  18432,     76, }, /* 707 */\n  {     0,      5,     12,     92,     -1,  18432,     78, }, /* 708 */\n  {     0,      5,     12,      0,      0,  18432,     70, }, /* 709 */\n  {     0,      5,     12,     92,    -58,  18432,     70, }, /* 710 */\n  {     0,      9,     12,      0,  -7615,  18432,     76, }, /* 711 */\n  {     1,      5,     12,      0,      8,  18432,     78, }, /* 712 */\n  {     1,      9,     12,      0,     -8,  18432,     76, }, /* 713 */\n  {     1,      5,     12,      0,      0,  18432,     78, }, /* 714 */\n  {     1,      5,     12,      0,     74,  18432,     78, }, /* 715 */\n  {     1,      5,     12,      0,     86,  18432,     78, }, /* 716 */\n  {     1,      5,     12,      0,    100,  18432,     78, }, /* 717 */\n  {     1,      5,     12,      0,    128,  18432,     78, }, /* 718 */\n  {     1,      5,     12,      0,    112,  18432,     78, }, /* 719 */\n  {     1,      5,     12,      0,    126,  18432,     78, }, /* 720 */\n  {     1,      5,     12,      0,      8,  18432,     70, }, /* 721 */\n  {     1,      8,     12,      0,     -8,  18432,     88, }, /* 722 */\n  {     1,      5,     12,      0,      0,  18432,     70, }, /* 723 */\n  {     1,      5,     12,      0,      9,  18432,     70, }, /* 724 */\n  {     1,      9,     12,      0,    -74,  18432,     76, }, /* 725 */\n  {     1,      8,     12,      0,     -9,  18432,     88, }, /* 726 */\n  {     1,      5,     12,     21,  -7173,  18432,     78, }, /* 727 */\n  {     1,      9,     12,      0,    -86,  18432,     76, }, /* 728 */\n  {     1,      5,     12,      0,  -7235,  18432,     78, }, /* 729 */\n  {     1,      9,     12,      0,   -100,  18432,     76, }, /* 730 */\n  {     1,      5,     12,      0,  -7219,  18432,     78, }, /* 731 */\n  {     1,      9,     12,      0,   -112,  18432,     76, }, /* 732 */\n  {     1,      9,     12,      0,   -128,  18432,     76, }, /* 733 */\n  {     1,      9,     12,      0,   -126,  18432,     76, }, /* 734 */\n  {   100,     29,     12,      0,      0,  45056,     52, }, /* 735 */\n  {   107,      1,      3,      0,      0,   6144,    206, }, /* 736 */\n  {   107,      1,     13,      0,      0,   6144,    208, }, /* 737 */\n  {   100,      1,      2,      0,      0,  18432,    210, }, /* 738 */\n  {   100,      1,      2,      0,      0,  34816,    210, }, /* 739 */\n  {   100,     17,     12,      0,      0,  28672,    212, }, /* 740 */\n  {   100,     21,     12,      0,      0,  28672,     64, }, /* 741 */\n  {   100,     20,     12,      0,      0,  28672,    214, }, /* 742 */\n  {   100,     19,     12,      0,      0,  28672,    214, }, /* 743 */\n  {   100,     22,     12,      0,      0,  28672,    216, }, /* 744 */\n  {   100,     20,     12,      0,      0,  28672,    216, }, /* 745 */\n  {   100,     19,     12,      0,      0,  28672,    216, }, /* 746 */\n  {   100,     21,     12,      0,      0,  28672,    218, }, /* 747 */\n  {   100,     21,     12,      0,      0,  28672,    220, }, /* 748 */\n  {   100,     27,      2,      0,      0,  45056,     50, }, /* 749 */\n  {   100,     28,      2,      0,      0,   4096,     50, }, /* 750 */\n  {   100,      1,      2,      0,      0,  20480,    136, }, /* 751 */\n  {   100,      1,      2,      0,      0,  36864,    136, }, /* 752 */\n  {   100,      1,      2,      0,      0,  30720,    136, }, /* 753 */\n  {   100,      1,      2,      0,      0,  24576,    136, }, /* 754 */\n  {   100,      1,      2,      0,      0,  40960,    136, }, /* 755 */\n  {   100,     29,     12,      0,      0,   8520,     52, }, /* 756 */\n  {   100,     21,     12,      0,      0,  14336,     54, }, /* 757 */\n  {   100,     21,     12,      0,      0,  14336,     64, }, /* 758 */\n  {   100,     21,     14,      0,      0,  28672,    222, }, /* 759 */\n  {   100,     21,     12,      0,      0,  28672,    224, }, /* 760 */\n  {   100,     16,     12,      0,      0,  28672,    144, }, /* 761 */\n  {   100,     16,     12,      0,      0,  28672,    226, }, /* 762 */\n  {   100,     25,     12,      0,      0,   8192,     64, }, /* 763 */\n  {   100,     22,     12,      0,      0,  28672,    228, }, /* 764 */\n  {   100,     18,     12,      0,      0,  28672,    228, }, /* 765 */\n  {   100,     21,     12,      0,      0,  29004,     54, }, /* 766 */\n  {   100,     21,     12,      0,      0,  28672,    212, }, /* 767 */\n  {   100,     21,     12,      0,      0,  29008,     54, }, /* 768 */\n  {   100,     21,     12,      0,      0,  29012,     54, }, /* 769 */\n  {   100,      1,      2,      0,      0,   6144,    230, }, /* 770 */\n  {    99,      2,      2,      0,      0,   6144,    232, }, /* 771 */\n  {   100,      1,      2,      0,      0,  22528,    136, }, /* 772 */\n  {   100,      1,      2,      0,      0,  38912,    136, }, /* 773 */\n  {   100,      1,      2,      0,      0,  16384,    136, }, /* 774 */\n  {   100,      1,      2,      0,      0,  32768,    136, }, /* 775 */\n  {   100,      1,      2,      0,      0,   6144,    234, }, /* 776 */\n  {     0,      6,     12,      0,      0,  18432,    236, }, /* 777 */\n  {   100,     25,     12,      0,      0,  12288,    238, }, /* 778 */\n  {   100,     25,     12,      0,      0,  12288,    240, }, /* 779 */\n  {   100,     25,     12,      0,      0,  28672,    238, }, /* 780 */\n  {   100,     22,     12,      0,      0,  28672,    242, }, /* 781 */\n  {   100,     18,     12,      0,      0,  28672,    242, }, /* 782 */\n  {     0,      6,     12,      0,      0,  18432,    182, }, /* 783 */\n  {    99,      2,     12,      0,      0,  14336,      0, }, /* 784 */\n  {   107,     12,      3,      0,      0,  26624,    244, }, /* 785 */\n  {   107,     11,      3,      0,      0,  26624,    124, }, /* 786 */\n  {   107,     11,      3,      0,      0,  26624,    246, }, /* 787 */\n  {   107,     12,      3,      0,      0,  26968,    104, }, /* 788 */\n  {   100,     26,     12,      0,      0,  28672,     74, }, /* 789 */\n  {   100,      9,     12,      0,      0,  18432,    116, }, /* 790 */\n  {   100,      5,     12,      0,      0,  18432,    248, }, /* 791 */\n  {   100,     25,     12,      0,      0,  28672,    250, }, /* 792 */\n  {   100,     26,     14,      0,      0,  28672,    252, }, /* 793 */\n  {     1,      9,     12,     96,  -7517,  18432,     76, }, /* 794 */\n  {   100,     26,     12,      0,      0,  28672,    122, }, /* 795 */\n  {     0,      9,     12,    100,      0,  18432,     76, }, /* 796 */\n  {     0,      9,     12,    104,  -8262,  18432,     76, }, /* 797 */\n  {   100,     26,     12,      0,      0,  14336,    254, }, /* 798 */\n  {     0,      9,     12,      0,     28,  18432,     76, }, /* 799 */\n  {   100,      7,     12,      0,      0,  18432,    256, }, /* 800 */\n  {   100,      5,     14,      0,      0,  18432,    258, }, /* 801 */\n  {   100,     25,     12,      0,      0,  28672,    122, }, /* 802 */\n  {   100,      5,     12,      0,      0,  18432,    260, }, /* 803 */\n  {     0,      5,     12,      0,    -28,  18432,     78, }, /* 804 */\n  {     0,     14,     12,      0,     16,  18432,     76, }, /* 805 */\n  {     0,     14,     12,      0,    -16,  18432,     78, }, /* 806 */\n  {     0,     14,     12,      0,      0,  18432,     84, }, /* 807 */\n  {   100,     25,     14,      0,      0,  28672,    262, }, /* 808 */\n  {   100,     26,     14,      0,      0,  28672,    262, }, /* 809 */\n  {   100,     26,     12,      0,      0,  28672,     64, }, /* 810 */\n  {   100,     25,     12,      0,      0,  28672,    264, }, /* 811 */\n  {   100,     25,     12,      0,      0,  28672,    266, }, /* 812 */\n  {   100,     25,     12,      0,      0,  12288,    268, }, /* 813 */\n  {   100,     22,     12,      0,      0,  28672,    266, }, /* 814 */\n  {   100,     18,     12,      0,      0,  28672,    266, }, /* 815 */\n  {   100,     26,     14,      0,      0,  28672,    270, }, /* 816 */\n  {   100,     22,     12,      0,      0,  28672,    272, }, /* 817 */\n  {   100,     18,     12,      0,      0,  28672,    272, }, /* 818 */\n  {   100,     26,     12,      0,      0,  18432,     54, }, /* 819 */\n  {    99,      2,     12,      0,      0,  18432,    274, }, /* 820 */\n  {   100,     15,     12,      0,      0,  10240,     74, }, /* 821 */\n  {   100,     26,     12,      0,     26,  18432,    276, }, /* 822 */\n  {   100,     26,     14,      0,     26,  18432,    278, }, /* 823 */\n  {   100,     26,     12,      0,    -26,  18432,    280, }, /* 824 */\n  {   100,     25,     14,      0,      0,  28672,    282, }, /* 825 */\n  {   100,     26,     14,      0,      0,  28672,    284, }, /* 826 */\n  {   100,     26,     14,      0,      0,  28672,    286, }, /* 827 */\n  {   110,     26,     12,      0,      0,  18432,     54, }, /* 828 */\n  {   100,     26,     12,      0,      0,  28672,    228, }, /* 829 */\n  {    44,      9,     12,      0,     48,  18432,     76, }, /* 830 */\n  {    44,      5,     12,      0,    -48,  18432,     78, }, /* 831 */\n  {     0,      9,     12,      0, -10743,  18432,     76, }, /* 832 */\n  {     0,      9,     12,      0,  -3814,  18432,     76, }, /* 833 */\n  {     0,      9,     12,      0, -10727,  18432,     76, }, /* 834 */\n  {     0,      5,     12,      0, -10795,  18432,     78, }, /* 835 */\n  {     0,      5,     12,      0, -10792,  18432,     78, }, /* 836 */\n  {     0,      9,     12,      0, -10780,  18432,     76, }, /* 837 */\n  {     0,      9,     12,      0, -10749,  18432,     76, }, /* 838 */\n  {     0,      9,     12,      0, -10783,  18432,     76, }, /* 839 */\n  {     0,      9,     12,      0, -10782,  18432,     76, }, /* 840 */\n  {     0,      9,     12,      0, -10815,  18432,     76, }, /* 841 */\n  {    43,      5,     12,      0,      0,  18432,     60, }, /* 842 */\n  {    43,     26,     12,      0,      0,  28672,     74, }, /* 843 */\n  {    43,     12,      3,      0,      0,  26624,     98, }, /* 844 */\n  {    43,     21,     12,      0,      0,  28672,    128, }, /* 845 */\n  {    43,     21,     12,      0,      0,  28672,     74, }, /* 846 */\n  {    43,     15,     12,      0,      0,  28672,     74, }, /* 847 */\n  {    21,      5,     12,      0,  -7264,  18432,     78, }, /* 848 */\n  {    45,      7,     12,      0,      0,  18432,     84, }, /* 849 */\n  {    45,      6,     12,      0,      0,  18432,    148, }, /* 850 */\n  {    45,     21,     12,      0,      0,  18432,     74, }, /* 851 */\n  {    45,     12,      3,      0,      0,  26624,    288, }, /* 852 */\n  {     2,     12,      3,      0,      0,  26624,    106, }, /* 853 */\n  {   100,     20,     12,      0,      0,  28672,    228, }, /* 854 */\n  {   100,     19,     12,      0,      0,  28672,    228, }, /* 855 */\n  {   100,     17,     12,      0,      0,  29020,    212, }, /* 856 */\n  {   100,      6,     12,      0,      0,  28672,    290, }, /* 857 */\n  {   100,     21,     12,      0,      0,  29024,     54, }, /* 858 */\n  {   100,     21,     12,      0,      0,  29028,     54, }, /* 859 */\n  {   100,     21,     12,      0,      0,  29032,    224, }, /* 860 */\n  {   100,     21,     12,      0,      0,  29036,    292, }, /* 861 */\n  {   100,     21,     12,      0,      0,  28812,     54, }, /* 862 */\n  {   100,     21,     12,      0,      0,  28672,    292, }, /* 863 */\n  {    30,     26,     12,      0,      0,  28672,    294, }, /* 864 */\n  {   100,     26,     12,      0,      0,  29040,    296, }, /* 865 */\n  {   100,     26,     12,      0,      0,  29040,    298, }, /* 866 */\n  {   100,     26,     12,      0,      0,  29040,    300, }, /* 867 */\n  {   100,     21,     12,      0,      0,  29044,    292, }, /* 868 */\n  {   100,     21,     12,      0,      0,  29048,    224, }, /* 869 */\n  {   100,     21,     12,      0,      0,  29052,     54, }, /* 870 */\n  {    30,      6,     12,      0,      0,  18432,    138, }, /* 871 */\n  {   100,      7,     12,      0,      0,  18816,    302, }, /* 872 */\n  {    30,     14,     12,      0,      0,  18432,    302, }, /* 873 */\n  {   100,     22,     12,      0,      0,  29060,    228, }, /* 874 */\n  {   100,     18,     12,      0,      0,  29060,    228, }, /* 875 */\n  {   100,     22,     12,      0,      0,  29064,    228, }, /* 876 */\n  {   100,     18,     12,      0,      0,  29064,    228, }, /* 877 */\n  {   100,     22,     12,      0,      0,  29068,     62, }, /* 878 */\n  {   100,     18,     12,      0,      0,  29068,     62, }, /* 879 */\n  {   100,     22,     12,      0,      0,  29068,    228, }, /* 880 */\n  {   100,     18,     12,      0,      0,  29068,    228, }, /* 881 */\n  {   100,     26,     12,      0,      0,  29052,     54, }, /* 882 */\n  {   100,     17,     12,      0,      0,  29052,    212, }, /* 883 */\n  {   100,     22,     12,      0,      0,  29052,    216, }, /* 884 */\n  {   100,     18,     12,      0,      0,  29052,    216, }, /* 885 */\n  {   107,     12,      3,      0,      0,  27024,     98, }, /* 886 */\n  {    22,     10,      3,      0,      0,  18432,    304, }, /* 887 */\n  {   100,     17,     14,      0,      0,  29052,    306, }, /* 888 */\n  {   100,      6,     12,      0,      0,  18836,    138, }, /* 889 */\n  {   100,     26,     12,      0,      0,  29052,     74, }, /* 890 */\n  {    30,      6,     12,      0,      0,  18432,    148, }, /* 891 */\n  {   100,      7,     12,      0,      0,  18840,     84, }, /* 892 */\n  {   100,     21,     14,      0,      0,  29080,    252, }, /* 893 */\n  {   100,     26,     12,      0,      0,  29056,     74, }, /* 894 */\n  {    27,      7,     12,      0,      0,  18432,     84, }, /* 895 */\n  {   107,     12,      3,      0,      0,  27028,     98, }, /* 896 */\n  {   100,     24,     12,      0,      0,  29076,    308, }, /* 897 */\n  {    27,      6,     12,      0,      0,  18432,    138, }, /* 898 */\n  {   100,     17,     12,      0,      0,  29076,    130, }, /* 899 */\n  {    28,      7,     12,      0,      0,  18432,     84, }, /* 900 */\n  {   100,     21,     12,      0,      0,  29068,    144, }, /* 901 */\n  {   100,      6,     12,      0,      0,  18836,     96, }, /* 902 */\n  {    28,      6,     12,      0,      0,  18432,    138, }, /* 903 */\n  {    29,      7,     12,      0,      0,  18432,     84, }, /* 904 */\n  {    22,      7,     12,      0,      0,  18432,     84, }, /* 905 */\n  {    22,      7,     12,      0,      0,  18432,    184, }, /* 906 */\n  {   100,     26,     12,      0,      0,  18816,     74, }, /* 907 */\n  {   100,     15,     12,      0,      0,  18816,     74, }, /* 908 */\n  {    22,     26,     12,      0,      0,  18432,     74, }, /* 909 */\n  {    22,     26,     12,      0,      0,  28672,     74, }, /* 910 */\n  {   100,     15,     12,      0,      0,  18432,     74, }, /* 911 */\n  {   100,     26,     14,      0,      0,  18816,    252, }, /* 912 */\n  {    28,     26,     12,      0,      0,  18432,     74, }, /* 913 */\n  {    30,      7,     12,      0,      0,  18432,    310, }, /* 914 */\n  {    31,      7,     12,      0,      0,  18432,     84, }, /* 915 */\n  {    31,      6,     12,      0,      0,  18432,    138, }, /* 916 */\n  {    31,     26,     12,      0,      0,  28672,     74, }, /* 917 */\n  {    55,      7,     12,      0,      0,  18432,     84, }, /* 918 */\n  {    55,      6,     12,      0,      0,  18432,    148, }, /* 919 */\n  {    55,     21,     12,      0,      0,  18432,    110, }, /* 920 */\n  {    55,     21,     12,      0,      0,  18432,    128, }, /* 921 */\n  {   120,      7,     12,      0,      0,  18432,     84, }, /* 922 */\n  {   120,      6,     12,      0,      0,  18432,    138, }, /* 923 */\n  {   120,     21,     12,      0,      0,  28672,    110, }, /* 924 */\n  {   120,     21,     12,      0,      0,  28672,    128, }, /* 925 */\n  {   120,     13,     12,      0,      0,  18432,    144, }, /* 926 */\n  {     2,      9,     12,    108,      1,  18432,     76, }, /* 927 */\n  {     2,      5,     12,    108, -35267,  18432,     78, }, /* 928 */\n  {     2,      7,     12,      0,      0,  18432,     84, }, /* 929 */\n  {     2,     21,     12,      0,      0,  28672,     74, }, /* 930 */\n  {     2,     12,      3,      0,      0,  26624,     98, }, /* 931 */\n  {     2,      6,     12,      0,      0,  28672,     94, }, /* 932 */\n  {     2,      6,     12,      0,      0,  18432,     90, }, /* 933 */\n  {   127,      7,     12,      0,      0,  18432,     84, }, /* 934 */\n  {   127,     14,     12,      0,      0,  18432,     84, }, /* 935 */\n  {   127,     12,      3,      0,      0,  26624,     98, }, /* 936 */\n  {   127,     21,     12,      0,      0,  18432,     74, }, /* 937 */\n  {   127,     21,     12,      0,      0,  18432,    128, }, /* 938 */\n  {   127,     21,     12,      0,      0,  18432,    110, }, /* 939 */\n  {   100,     24,     12,      0,      0,  29084,     56, }, /* 940 */\n  {     0,      9,     12,      0, -35332,  18432,     76, }, /* 941 */\n  {   100,     24,     12,      0,      0,  18432,     56, }, /* 942 */\n  {     0,      9,     12,      0, -42280,  18432,     76, }, /* 943 */\n  {     0,      5,     12,      0,     48,  18432,     78, }, /* 944 */\n  {     0,      9,     12,      0, -42308,  18432,     76, }, /* 945 */\n  {     0,      9,     12,      0, -42319,  18432,     76, }, /* 946 */\n  {     0,      9,     12,      0, -42315,  18432,     76, }, /* 947 */\n  {     0,      9,     12,      0, -42305,  18432,     76, }, /* 948 */\n  {     0,      9,     12,      0, -42258,  18432,     76, }, /* 949 */\n  {     0,      9,     12,      0, -42282,  18432,     76, }, /* 950 */\n  {     0,      9,     12,      0, -42261,  18432,     76, }, /* 951 */\n  {     0,      9,     12,      0,    928,  18432,     76, }, /* 952 */\n  {     0,      9,     12,      0,    -48,  18432,     76, }, /* 953 */\n  {     0,      9,     12,      0, -42307,  18432,     76, }, /* 954 */\n  {     0,      9,     12,      0, -35384,  18432,     76, }, /* 955 */\n  {     0,      9,     12,      0, -42343,  18432,     76, }, /* 956 */\n  {     0,      9,     12,      0, -42561,  18432,     76, }, /* 957 */\n  {    46,      7,     12,      0,      0,  18432,     84, }, /* 958 */\n  {    46,     12,      3,      0,      0,  26624,    106, }, /* 959 */\n  {    46,     12,      3,      0,      0,  26624,    158, }, /* 960 */\n  {    46,     10,      5,      0,      0,  18432,    154, }, /* 961 */\n  {    46,     26,     12,      0,      0,  28672,     74, }, /* 962 */\n  {   100,     15,     12,      0,      0,  18848,     74, }, /* 963 */\n  {   100,     15,     12,      0,      0,  18852,     74, }, /* 964 */\n  {   100,     26,     12,      0,      0,  18856,     74, }, /* 965 */\n  {   100,     23,     12,      0,      0,  14764,     74, }, /* 966 */\n  {   100,     26,     12,      0,      0,  14760,     74, }, /* 967 */\n  {    47,      7,     12,      0,      0,  18432,     84, }, /* 968 */\n  {    47,     21,     12,      0,      0,  28672,     74, }, /* 969 */\n  {    47,     21,     12,      0,      0,  28672,    128, }, /* 970 */\n  {   121,     10,      5,      0,      0,  18432,    154, }, /* 971 */\n  {   121,      7,     12,      0,      0,  18432,     84, }, /* 972 */\n  {   121,     12,      3,      0,      0,  26624,    158, }, /* 973 */\n  {   121,     12,      3,      0,      0,  26624,    106, }, /* 974 */\n  {   121,     21,     12,      0,      0,  18432,    128, }, /* 975 */\n  {   121,     13,     12,      0,      0,  18432,    144, }, /* 976 */\n  {     8,     12,      3,      0,      0,  27056,     98, }, /* 977 */\n  {     8,      7,     12,      0,      0,  18868,     84, }, /* 978 */\n  {    49,     13,     12,      0,      0,  18432,    144, }, /* 979 */\n  {    49,      7,     12,      0,      0,  18432,     84, }, /* 980 */\n  {    49,     12,      3,      0,      0,  26624,    106, }, /* 981 */\n  {    49,     12,      3,      0,      0,  26624,     98, }, /* 982 */\n  {   100,     21,     12,      0,      0,  18872,    202, }, /* 983 */\n  {    49,     21,     12,      0,      0,  18432,    128, }, /* 984 */\n  {   122,      7,     12,      0,      0,  18432,     84, }, /* 985 */\n  {   122,     12,      3,      0,      0,  26624,    106, }, /* 986 */\n  {   122,     10,      5,      0,      0,  18432,    154, }, /* 987 */\n  {   122,     10,      3,      0,      0,  18432,    188, }, /* 988 */\n  {   122,     21,     12,      0,      0,  18432,     74, }, /* 989 */\n  {    56,     12,      3,      0,      0,  26624,    106, }, /* 990 */\n  {    56,     10,      5,      0,      0,  18432,    154, }, /* 991 */\n  {    56,      7,     12,      0,      0,  18432,     84, }, /* 992 */\n  {    56,      7,     12,      0,      0,  18432,    156, }, /* 993 */\n  {    56,     12,      3,      0,      0,  26624,     98, }, /* 994 */\n  {    56,     10,      3,      0,      0,  18432,    188, }, /* 995 */\n  {    56,     21,     12,      0,      0,  18432,     74, }, /* 996 */\n  {    56,     21,     12,      0,      0,  18432,    110, }, /* 997 */\n  {    56,     21,     12,      0,      0,  18432,    128, }, /* 998 */\n  {   100,      6,     12,      0,      0,  18876,    138, }, /* 999 */\n  {    56,     13,     12,      0,      0,  18432,    144, }, /* 1000 */\n  {    20,      6,     12,      0,      0,  18432,    138, }, /* 1001 */\n  {   123,      7,     12,      0,      0,  18432,     84, }, /* 1002 */\n  {   123,     12,      3,      0,      0,  26624,    106, }, /* 1003 */\n  {   123,     10,      5,      0,      0,  18432,    154, }, /* 1004 */\n  {   123,     13,     12,      0,      0,  18432,    144, }, /* 1005 */\n  {   123,     21,     12,      0,      0,  18432,     74, }, /* 1006 */\n  {   123,     21,     12,      0,      0,  18432,    128, }, /* 1007 */\n  {    20,      7,     12,      0,      0,  18432,     84, }, /* 1008 */\n  {   125,      7,     12,      0,      0,  18432,     84, }, /* 1009 */\n  {   125,     12,      3,      0,      0,  26624,    106, }, /* 1010 */\n  {   125,      7,     12,      0,      0,  18432,    170, }, /* 1011 */\n  {   125,     12,      3,      0,      0,  26624,     98, }, /* 1012 */\n  {   125,      7,     12,      0,      0,  18432,    312, }, /* 1013 */\n  {   125,      6,     12,      0,      0,  18432,    138, }, /* 1014 */\n  {   125,     21,     12,      0,      0,  18432,     74, }, /* 1015 */\n  {   125,     21,     12,      0,      0,  18432,    110, }, /* 1016 */\n  {   128,      7,     12,      0,      0,  18432,    156, }, /* 1017 */\n  {   128,     10,      5,      0,      0,  18432,    154, }, /* 1018 */\n  {   128,     12,      3,      0,      0,  26624,    106, }, /* 1019 */\n  {   128,     21,     12,      0,      0,  18432,    128, }, /* 1020 */\n  {   128,      7,     12,      0,      0,  18432,     84, }, /* 1021 */\n  {   128,      6,     12,      0,      0,  18432,    138, }, /* 1022 */\n  {   128,     12,      3,      0,      0,  26624,    158, }, /* 1023 */\n  {     0,      5,     12,      0,   -928,  18432,     78, }, /* 1024 */\n  {    24,      5,     12,      0, -38864,  18432,     70, }, /* 1025 */\n  {   128,     10,      5,      0,      0,  18432,    174, }, /* 1026 */\n  {   128,     13,     12,      0,      0,  18432,    144, }, /* 1027 */\n  {    22,      7,      9,      0,      0,  18432,     84, }, /* 1028 */\n  {    22,      7,     10,      0,      0,  18432,     84, }, /* 1029 */\n  {    99,      4,     12,      0,      0,  18432,      0, }, /* 1030 */\n  {    99,      3,     12,      0,      0,  18432,      0, }, /* 1031 */\n  {    30,      7,     12,      0,      0,  18432,    302, }, /* 1032 */\n  {     0,      5,     12,      0,      1,  18432,     70, }, /* 1033 */\n  {     0,      5,     12,      0,     -1,  18432,     70, }, /* 1034 */\n  {     4,     25,     12,      0,      0,  12288,    122, }, /* 1035 */\n  {     5,      7,     12,      0,      0,      0,    314, }, /* 1036 */\n  {   100,     18,     12,      0,      0,  29120,     54, }, /* 1037 */\n  {   100,     22,     12,      0,      0,  29120,     54, }, /* 1038 */\n  {    99,      2,     12,      0,      0,   6144,    316, }, /* 1039 */\n  {     5,      7,     12,      0,      0,    452,     84, }, /* 1040 */\n  {     5,     26,     12,      0,      0,  29124,     74, }, /* 1041 */\n  {   107,     12,      3,      0,      0,  26624,    194, }, /* 1042 */\n  {   107,     12,      3,      0,      0,  26624,    318, }, /* 1043 */\n  {   100,     21,     12,      0,      0,  28672,     74, }, /* 1044 */\n  {   100,     21,     12,      0,      0,  28672,    128, }, /* 1045 */\n  {   100,     21,     12,      0,      0,  28672,    126, }, /* 1046 */\n  {   100,     22,     12,      0,      0,  28672,     74, }, /* 1047 */\n  {   100,     18,     12,      0,      0,  28672,     74, }, /* 1048 */\n  {   100,     17,     12,      0,      0,  28672,    130, }, /* 1049 */\n  {   100,     22,     12,      0,      0,  28672,    320, }, /* 1050 */\n  {   100,     18,     12,      0,      0,  28672,    320, }, /* 1051 */\n  {   100,     21,     12,      0,      0,   8192,    110, }, /* 1052 */\n  {   100,     21,     12,      0,      0,   8192,    322, }, /* 1053 */\n  {   100,     21,     12,      0,      0,   8192,    324, }, /* 1054 */\n  {   100,     22,     12,      0,      0,  28672,    172, }, /* 1055 */\n  {   100,     18,     12,      0,      0,  28672,    172, }, /* 1056 */\n  {   100,     21,     12,      0,      0,  14336,     74, }, /* 1057 */\n  {   100,     21,     12,      0,      0,  28672,    122, }, /* 1058 */\n  {   100,     25,     12,      0,      0,  12288,    122, }, /* 1059 */\n  {   100,     17,     12,      0,      0,  12288,    326, }, /* 1060 */\n  {   100,     25,     12,      0,      0,  28672,    328, }, /* 1061 */\n  {   100,     21,     12,      0,      0,  28672,    320, }, /* 1062 */\n  {   100,     21,     12,      0,      0,  28672,    330, }, /* 1063 */\n  {   100,     17,     12,      0,      0,  12288,    130, }, /* 1064 */\n  {   100,     21,     12,      0,      0,   8192,     74, }, /* 1065 */\n  {   100,     13,     12,      0,      0,  10240,    332, }, /* 1066 */\n  {     0,      9,     12,      0,     32,  18432,    334, }, /* 1067 */\n  {   100,     24,     12,      0,      0,  28672,    336, }, /* 1068 */\n  {     0,      5,     12,      0,    -32,  18432,    338, }, /* 1069 */\n  {   100,     21,     12,      0,      0,  29068,    128, }, /* 1070 */\n  {   100,     22,     12,      0,      0,  29068,    340, }, /* 1071 */\n  {   100,     18,     12,      0,      0,  29068,    340, }, /* 1072 */\n  {   100,     21,     12,      0,      0,  29068,    110, }, /* 1073 */\n  {   100,      6,      3,      0,      0,  18836,    342, }, /* 1074 */\n  {   100,      1,      2,      0,      0,  28672,    344, }, /* 1075 */\n  {    39,      7,     12,      0,      0,  18432,     84, }, /* 1076 */\n  {   100,     21,     12,      0,      0,  18888,     74, }, /* 1077 */\n  {   100,     21,     12,      0,      0,  29128,     74, }, /* 1078 */\n  {   100,     21,     12,      0,      0,  18892,     74, }, /* 1079 */\n  {   100,     15,     12,      0,      0,  18896,     74, }, /* 1080 */\n  {   100,     26,     12,      0,      0,  18892,     74, }, /* 1081 */\n  {     1,     14,     12,      0,      0,  28672,     84, }, /* 1082 */\n  {     1,     15,     12,      0,      0,  28672,     74, }, /* 1083 */\n  {     1,     26,     12,      0,      0,  28672,     74, }, /* 1084 */\n  {     1,     26,     12,      0,      0,  18432,     74, }, /* 1085 */\n  {    50,      7,     12,      0,      0,  18432,     84, }, /* 1086 */\n  {    51,      7,     12,      0,      0,  18432,     84, }, /* 1087 */\n  {   107,     12,      3,      0,      0,  27092,     98, }, /* 1088 */\n  {   100,     15,     12,      0,      0,  10708,     74, }, /* 1089 */\n  {   105,      7,     12,      0,      0,  18432,     84, }, /* 1090 */\n  {   105,     15,     12,      0,      0,  18432,     74, }, /* 1091 */\n  {    32,      7,     12,      0,      0,  18432,     84, }, /* 1092 */\n  {    32,     14,     12,      0,      0,  18432,     84, }, /* 1093 */\n  {    73,      7,     12,      0,      0,  18432,     84, }, /* 1094 */\n  {    73,     12,      3,      0,      0,  26624,    106, }, /* 1095 */\n  {   108,      7,     12,      0,      0,  18432,     84, }, /* 1096 */\n  {   108,     21,     12,      0,      0,  18432,    110, }, /* 1097 */\n  {   112,      7,     12,      0,      0,  18432,     84, }, /* 1098 */\n  {   112,     21,     12,      0,      0,  18432,    110, }, /* 1099 */\n  {   112,     14,     12,      0,      0,  18432,     84, }, /* 1100 */\n  {   106,      9,     12,      0,     40,  18432,     76, }, /* 1101 */\n  {   106,      5,     12,      0,    -40,  18432,     78, }, /* 1102 */\n  {    40,      7,     12,      0,      0,  18432,     84, }, /* 1103 */\n  {   109,      7,     12,      0,      0,  18432,     84, }, /* 1104 */\n  {   109,     13,     12,      0,      0,  18432,    144, }, /* 1105 */\n  {    81,      9,     12,      0,     40,  18432,     76, }, /* 1106 */\n  {    81,      5,     12,      0,    -40,  18432,     78, }, /* 1107 */\n  {    66,      7,     12,      0,      0,  18432,     84, }, /* 1108 */\n  {    64,      7,     12,      0,      0,  18432,     84, }, /* 1109 */\n  {    64,     21,     12,      0,      0,  18432,     74, }, /* 1110 */\n  {   167,      9,     12,      0,     39,  18432,     76, }, /* 1111 */\n  {   167,      5,     12,      0,    -39,  18432,     78, }, /* 1112 */\n  {    97,      7,     12,      0,      0,  18432,     84, }, /* 1113 */\n  {    69,      7,     12,      0,      0,  18432,     84, }, /* 1114 */\n  {     0,      6,     12,      0,      0,  18432,     96, }, /* 1115 */\n  {    41,      7,     12,      0,      0,  34816,     84, }, /* 1116 */\n  {   129,      7,     12,      0,      0,  34816,     84, }, /* 1117 */\n  {   129,     21,     12,      0,      0,  34816,    110, }, /* 1118 */\n  {   129,     15,     12,      0,      0,  34816,     74, }, /* 1119 */\n  {   144,      7,     12,      0,      0,  34816,     84, }, /* 1120 */\n  {   144,     26,     12,      0,      0,  34816,     74, }, /* 1121 */\n  {   144,     15,     12,      0,      0,  34816,     74, }, /* 1122 */\n  {   143,      7,     12,      0,      0,  34816,     84, }, /* 1123 */\n  {   143,     15,     12,      0,      0,  34816,     74, }, /* 1124 */\n  {   150,      7,     12,      0,      0,  34816,     84, }, /* 1125 */\n  {   150,     15,     12,      0,      0,  34816,     74, }, /* 1126 */\n  {   116,      7,     12,      0,      0,  34816,     84, }, /* 1127 */\n  {   116,     15,     12,      0,      0,  34816,     74, }, /* 1128 */\n  {   116,     21,     12,      0,      0,  28672,    110, }, /* 1129 */\n  {    52,      7,     12,      0,      0,  34816,     84, }, /* 1130 */\n  {    52,     21,     12,      0,      0,  34816,     74, }, /* 1131 */\n  {   171,      7,     12,      0,      0,  34816,     84, }, /* 1132 */\n  {    61,      7,     12,      0,      0,  34816,     84, }, /* 1133 */\n  {   135,      7,     12,      0,      0,  34816,     84, }, /* 1134 */\n  {   135,     15,     12,      0,      0,  34816,     74, }, /* 1135 */\n  {   113,      7,     12,      0,      0,  34816,    156, }, /* 1136 */\n  {   113,     12,      3,      0,      0,  26624,    106, }, /* 1137 */\n  {   113,     12,      3,      0,      0,  26624,     98, }, /* 1138 */\n  {   113,     12,      3,      0,      0,  26624,    158, }, /* 1139 */\n  {   113,     15,     12,      0,      0,  34816,     74, }, /* 1140 */\n  {   113,     21,     12,      0,      0,  34816,     74, }, /* 1141 */\n  {   113,     21,     12,      0,      0,  34816,    128, }, /* 1142 */\n  {   130,      7,     12,      0,      0,  34816,     84, }, /* 1143 */\n  {   130,     15,     12,      0,      0,  34816,     74, }, /* 1144 */\n  {   130,     21,     12,      0,      0,  34816,     74, }, /* 1145 */\n  {   142,      7,     12,      0,      0,  34816,     84, }, /* 1146 */\n  {   142,     15,     12,      0,      0,  34816,     74, }, /* 1147 */\n  {    71,      7,     12,      0,      0,  34816,     84, }, /* 1148 */\n  {    71,     26,     12,      0,      0,  34816,     74, }, /* 1149 */\n  {    71,     12,      3,      0,      0,  26624,     98, }, /* 1150 */\n  {    71,     15,     12,      0,      0,  34816,     74, }, /* 1151 */\n  {    71,     21,     12,      0,      0,  34816,    110, }, /* 1152 */\n  {    71,     21,     12,      0,      0,  35288,    110, }, /* 1153 */\n  {    71,     21,     12,      0,      0,  34816,     74, }, /* 1154 */\n  {    53,      7,     12,      0,      0,  34816,     84, }, /* 1155 */\n  {    53,     21,     12,      0,      0,  28672,     74, }, /* 1156 */\n  {    53,     21,     12,      0,      0,  28672,    110, }, /* 1157 */\n  {   131,      7,     12,      0,      0,  34816,     84, }, /* 1158 */\n  {   131,     15,     12,      0,      0,  34816,     74, }, /* 1159 */\n  {   132,      7,     12,      0,      0,  34816,     84, }, /* 1160 */\n  {   132,     15,     12,      0,      0,  34816,     74, }, /* 1161 */\n  {    74,      7,     12,      0,      0,  34816,     84, }, /* 1162 */\n  {    74,     21,     12,      0,      0,  34816,    110, }, /* 1163 */\n  {    74,     15,     12,      0,      0,  34816,     74, }, /* 1164 */\n  {    57,      7,     12,      0,      0,  34816,     84, }, /* 1165 */\n  {    78,      9,     12,      0,     64,  34816,     76, }, /* 1166 */\n  {    78,      5,     12,      0,    -64,  34816,     78, }, /* 1167 */\n  {    78,     15,     12,      0,      0,  34816,     74, }, /* 1168 */\n  {    86,      7,     12,      0,      0,      0,     84, }, /* 1169 */\n  {    86,      7,     12,      0,      0,      0,    312, }, /* 1170 */\n  {    86,     12,      3,      0,      0,  26624,    132, }, /* 1171 */\n  {    86,     13,     12,      0,      0,   2048,    144, }, /* 1172 */\n  {    93,     13,     12,      0,      0,   2048,    144, }, /* 1173 */\n  {    93,      7,     12,      0,      0,  34816,     84, }, /* 1174 */\n  {    93,      6,     12,      0,      0,  34816,     96, }, /* 1175 */\n  {    93,      9,     12,      0,     32,  34816,     76, }, /* 1176 */\n  {    93,     12,      3,      0,      0,  26624,    132, }, /* 1177 */\n  {    93,     12,      3,      0,      0,  26624,    164, }, /* 1178 */\n  {    93,     12,      3,      0,      0,  26624,     98, }, /* 1179 */\n  {    93,     17,     12,      0,      0,  28672,    130, }, /* 1180 */\n  {    93,      6,     12,      0,      0,  34816,    138, }, /* 1181 */\n  {    93,      5,     12,      0,    -32,  34816,     78, }, /* 1182 */\n  {    93,     25,     12,      0,      0,  34816,    122, }, /* 1183 */\n  {     5,     15,     12,      0,      0,   2048,     74, }, /* 1184 */\n  {    89,      7,     12,      0,      0,  34816,     84, }, /* 1185 */\n  {    89,     12,      3,      0,      0,  26624,    106, }, /* 1186 */\n  {    89,     17,     12,      0,      0,  34816,    130, }, /* 1187 */\n  {     5,      6,     12,      0,      0,      0,    148, }, /* 1188 */\n  {     5,     21,     12,      0,      0,  28672,     74, }, /* 1189 */\n  {   159,      7,     12,      0,      0,  34816,     84, }, /* 1190 */\n  {   159,     15,     12,      0,      0,  34816,     74, }, /* 1191 */\n  {    87,      7,     12,      0,      0,      0,     84, }, /* 1192 */\n  {    87,     12,      3,      0,      0,  26624,     98, }, /* 1193 */\n  {    87,     15,     12,      0,      0,      0,     74, }, /* 1194 */\n  {    87,     21,     12,      0,      0,      0,    128, }, /* 1195 */\n  {    91,      7,     12,      0,      0,  34816,     84, }, /* 1196 */\n  {    91,     12,      3,      0,      0,  26624,     98, }, /* 1197 */\n  {    91,     21,     12,      0,      0,  34816,    128, }, /* 1198 */\n  {   163,      7,     12,      0,      0,  34816,     84, }, /* 1199 */\n  {   163,     15,     12,      0,      0,  34816,     74, }, /* 1200 */\n  {   160,      7,     12,      0,      0,  34816,     84, }, /* 1201 */\n  {   134,     10,      5,      0,      0,  18432,    154, }, /* 1202 */\n  {   134,     12,      3,      0,      0,  26624,    106, }, /* 1203 */\n  {   134,      7,     12,      0,      0,  18432,     84, }, /* 1204 */\n  {   134,     12,      3,      0,      0,  26624,    158, }, /* 1205 */\n  {   134,     21,     12,      0,      0,  18432,    128, }, /* 1206 */\n  {   134,     21,     12,      0,      0,  18432,    110, }, /* 1207 */\n  {   134,     15,     12,      0,      0,  28672,     74, }, /* 1208 */\n  {   134,     13,     12,      0,      0,  18432,    144, }, /* 1209 */\n  {   134,     12,      3,      0,      0,  26624,    288, }, /* 1210 */\n  {    58,     12,      3,      0,      0,  26624,    106, }, /* 1211 */\n  {    58,     10,      5,      0,      0,  18432,    154, }, /* 1212 */\n  {    58,      7,     12,      0,      0,  18432,     84, }, /* 1213 */\n  {    58,     12,      3,      0,      0,  26624,    158, }, /* 1214 */\n  {    58,     12,      3,      0,      0,  26624,     98, }, /* 1215 */\n  {    58,     21,     12,      0,      0,  18432,     74, }, /* 1216 */\n  {    58,      1,      4,      0,      0,  18432,    134, }, /* 1217 */\n  {    58,     21,     12,      0,      0,  18432,    128, }, /* 1218 */\n  {   137,      7,     12,      0,      0,  18432,     84, }, /* 1219 */\n  {   137,     13,     12,      0,      0,  18432,    144, }, /* 1220 */\n  {    60,     12,      3,      0,      0,  26624,    106, }, /* 1221 */\n  {    60,      7,     12,      0,      0,  18432,    156, }, /* 1222 */\n  {    60,     10,      5,      0,      0,  18432,    154, }, /* 1223 */\n  {    60,     12,      3,      0,      0,  26624,    158, }, /* 1224 */\n  {    60,     13,     12,      0,      0,  18432,    144, }, /* 1225 */\n  {    60,     21,     12,      0,      0,  18432,     74, }, /* 1226 */\n  {    60,     21,     12,      0,      0,  18432,    128, }, /* 1227 */\n  {    70,      7,     12,      0,      0,  18432,     84, }, /* 1228 */\n  {    70,     12,      3,      0,      0,  26624,     98, }, /* 1229 */\n  {    70,     21,     12,      0,      0,  18432,     74, }, /* 1230 */\n  {    62,     12,      3,      0,      0,  26624,    106, }, /* 1231 */\n  {    62,     10,      5,      0,      0,  18432,    154, }, /* 1232 */\n  {    62,      7,     12,      0,      0,  18432,     84, }, /* 1233 */\n  {    62,     10,      3,      0,      0,  18432,    188, }, /* 1234 */\n  {    62,      7,      4,      0,      0,  18432,     84, }, /* 1235 */\n  {    62,     21,     12,      0,      0,  18432,    128, }, /* 1236 */\n  {    62,     21,     12,      0,      0,  18432,     74, }, /* 1237 */\n  {    62,     12,      3,      0,      0,  26624,    104, }, /* 1238 */\n  {    62,     12,      3,      0,      0,  26624,     98, }, /* 1239 */\n  {    62,     13,     12,      0,      0,  18432,    144, }, /* 1240 */\n  {    17,     15,     12,      0,      0,  18432,     74, }, /* 1241 */\n  {    68,      7,     12,      0,      0,  18432,     84, }, /* 1242 */\n  {    68,     10,      5,      0,      0,  18432,    154, }, /* 1243 */\n  {    68,     12,      3,      0,      0,  26624,    106, }, /* 1244 */\n  {    68,     10,      3,      0,      0,  18432,    188, }, /* 1245 */\n  {    68,     12,      3,      0,      0,  26624,     98, }, /* 1246 */\n  {    68,     12,      3,      0,      0,  26624,    162, }, /* 1247 */\n  {    68,     21,     12,      0,      0,  18432,    128, }, /* 1248 */\n  {    68,     21,     12,      0,      0,  18432,    110, }, /* 1249 */\n  {    68,     21,     12,      0,      0,  18432,     74, }, /* 1250 */\n  {    77,      7,     12,      0,      0,  18432,     84, }, /* 1251 */\n  {    77,     21,     12,      0,      0,  18432,    128, }, /* 1252 */\n  {    75,      7,     12,      0,      0,  18432,     84, }, /* 1253 */\n  {    75,     12,      3,      0,      0,  26624,    106, }, /* 1254 */\n  {    75,     10,      5,      0,      0,  18432,    154, }, /* 1255 */\n  {    75,     12,      3,      0,      0,  26624,     98, }, /* 1256 */\n  {    75,     12,      3,      0,      0,  26624,    158, }, /* 1257 */\n  {    75,     13,     12,      0,      0,  18432,    144, }, /* 1258 */\n  {    67,     12,      3,      0,      0,  26624,    106, }, /* 1259 */\n  {    67,     12,      3,      0,      0,  26836,    106, }, /* 1260 */\n  {    67,     10,      5,      0,      0,  18432,    154, }, /* 1261 */\n  {    67,     10,      5,      0,      0,  18644,    154, }, /* 1262 */\n  {    67,      7,     12,      0,      0,  18432,     84, }, /* 1263 */\n  {   107,     12,      3,      0,      0,  26836,     98, }, /* 1264 */\n  {    67,     12,      3,      0,      0,  26836,     98, }, /* 1265 */\n  {    67,     10,      3,      0,      0,  18432,    160, }, /* 1266 */\n  {    67,     10,      3,      0,      0,  18432,    188, }, /* 1267 */\n  {    67,      7,     12,      0,      0,  18432,    346, }, /* 1268 */\n  {    67,     12,      3,      0,      0,  26624,     98, }, /* 1269 */\n  {    98,      7,     12,      0,      0,  18432,    156, }, /* 1270 */\n  {    98,      7,     12,      0,      0,  18432,     84, }, /* 1271 */\n  {    98,     10,      3,      0,      0,  18432,    160, }, /* 1272 */\n  {    98,     10,      5,      0,      0,  18432,    154, }, /* 1273 */\n  {    98,     12,      3,      0,      0,  26624,    106, }, /* 1274 */\n  {    98,     12,      3,      0,      0,  26624,    158, }, /* 1275 */\n  {    98,     10,      3,      0,      0,  18432,    188, }, /* 1276 */\n  {    98,      7,      4,      0,      0,  18432,     84, }, /* 1277 */\n  {    98,     12,      3,      0,      0,  26624,    164, }, /* 1278 */\n  {    98,      7,     12,      0,      0,  18432,    348, }, /* 1279 */\n  {    98,     21,     12,      0,      0,  18432,    128, }, /* 1280 */\n  {    98,     21,     12,      0,      0,  18432,     74, }, /* 1281 */\n  {    98,     12,      3,      0,      0,  26624,     98, }, /* 1282 */\n  {    80,      7,     12,      0,      0,  18432,     84, }, /* 1283 */\n  {    80,     10,      5,      0,      0,  18432,    154, }, /* 1284 */\n  {    80,     12,      3,      0,      0,  26624,    106, }, /* 1285 */\n  {    80,     12,      3,      0,      0,  26624,    158, }, /* 1286 */\n  {    80,     12,      3,      0,      0,  26624,     98, }, /* 1287 */\n  {    80,     21,     12,      0,      0,  18432,    128, }, /* 1288 */\n  {    80,     21,     12,      0,      0,  18432,    110, }, /* 1289 */\n  {    80,     21,     12,      0,      0,  18432,     74, }, /* 1290 */\n  {    80,     13,     12,      0,      0,  18432,    144, }, /* 1291 */\n  {    80,     12,      3,      0,      0,  26624,    104, }, /* 1292 */\n  {    76,      7,     12,      0,      0,  18432,     84, }, /* 1293 */\n  {    76,     10,      3,      0,      0,  18432,    160, }, /* 1294 */\n  {    76,     10,      5,      0,      0,  18432,    154, }, /* 1295 */\n  {    76,     12,      3,      0,      0,  26624,    106, }, /* 1296 */\n  {    76,     12,      3,      0,      0,  26624,    158, }, /* 1297 */\n  {    76,     12,      3,      0,      0,  26624,     98, }, /* 1298 */\n  {    76,     21,     12,      0,      0,  18432,     74, }, /* 1299 */\n  {    76,     13,     12,      0,      0,  18432,    144, }, /* 1300 */\n  {   146,      7,     12,      0,      0,  18432,     84, }, /* 1301 */\n  {   146,     10,      3,      0,      0,  18432,    160, }, /* 1302 */\n  {   146,     10,      5,      0,      0,  18432,    154, }, /* 1303 */\n  {   146,     12,      3,      0,      0,  26624,    106, }, /* 1304 */\n  {   146,     12,      3,      0,      0,  26624,    158, }, /* 1305 */\n  {   146,     12,      3,      0,      0,  26624,     98, }, /* 1306 */\n  {   146,     21,     12,      0,      0,  18432,     74, }, /* 1307 */\n  {   146,     21,     12,      0,      0,  18432,    128, }, /* 1308 */\n  {   146,     21,     12,      0,      0,  18432,    110, }, /* 1309 */\n  {   146,     21,     12,      0,      0,  18432,    192, }, /* 1310 */\n  {    72,      7,     12,      0,      0,  18432,     84, }, /* 1311 */\n  {    72,     10,      5,      0,      0,  18432,    154, }, /* 1312 */\n  {    72,     12,      3,      0,      0,  26624,    106, }, /* 1313 */\n  {    72,     12,      3,      0,      0,  26624,    158, }, /* 1314 */\n  {    72,     21,     12,      0,      0,  18432,    128, }, /* 1315 */\n  {    72,     21,     12,      0,      0,  18432,     74, }, /* 1316 */\n  {    72,     13,     12,      0,      0,  18432,    144, }, /* 1317 */\n  {    63,      7,     12,      0,      0,  18432,     84, }, /* 1318 */\n  {    63,     12,      3,      0,      0,  26624,    106, }, /* 1319 */\n  {    63,     10,      5,      0,      0,  18432,    154, }, /* 1320 */\n  {    63,     10,      3,      0,      0,  18432,    188, }, /* 1321 */\n  {    63,     12,      3,      0,      0,  26624,     98, }, /* 1322 */\n  {    63,     21,     12,      0,      0,  18432,     74, }, /* 1323 */\n  {    63,     13,     12,      0,      0,  18432,    144, }, /* 1324 */\n  {   148,      7,     12,      0,      0,  18432,     84, }, /* 1325 */\n  {   148,     12,      3,      0,      0,  26624,    106, }, /* 1326 */\n  {   148,     10,      5,      0,      0,  18432,    154, }, /* 1327 */\n  {   148,     10,     12,      0,      0,  18432,    154, }, /* 1328 */\n  {   148,     12,      3,      0,      0,  26624,    158, }, /* 1329 */\n  {   148,     13,     12,      0,      0,  18432,    144, }, /* 1330 */\n  {   148,     15,     12,      0,      0,  18432,     74, }, /* 1331 */\n  {   148,     21,     12,      0,      0,  18432,    128, }, /* 1332 */\n  {   148,     26,     12,      0,      0,  18432,     74, }, /* 1333 */\n  {    84,      7,     12,      0,      0,  18432,     84, }, /* 1334 */\n  {    84,     10,      5,      0,      0,  18432,    154, }, /* 1335 */\n  {    84,     12,      3,      0,      0,  26624,    106, }, /* 1336 */\n  {    84,     12,      3,      0,      0,  26624,    158, }, /* 1337 */\n  {    84,     12,      3,      0,      0,  26624,     98, }, /* 1338 */\n  {    84,     21,     12,      0,      0,  18432,     74, }, /* 1339 */\n  {   147,      9,     12,      0,     32,  18432,     76, }, /* 1340 */\n  {   147,      5,     12,      0,    -32,  18432,     78, }, /* 1341 */\n  {   147,     13,     12,      0,      0,  18432,    144, }, /* 1342 */\n  {   147,     15,     12,      0,      0,  18432,     74, }, /* 1343 */\n  {   147,      7,     12,      0,      0,  18432,     84, }, /* 1344 */\n  {   164,      7,     12,      0,      0,  18432,    156, }, /* 1345 */\n  {   164,     10,      3,      0,      0,  18432,    160, }, /* 1346 */\n  {   164,     10,      5,      0,      0,  18432,    154, }, /* 1347 */\n  {   164,     12,      3,      0,      0,  26624,    106, }, /* 1348 */\n  {   164,     10,      3,      0,      0,  18432,    188, }, /* 1349 */\n  {   164,     12,      3,      0,      0,  26624,    158, }, /* 1350 */\n  {   164,      7,      4,      0,      0,  18432,     84, }, /* 1351 */\n  {   164,     12,      3,      0,      0,  26624,     98, }, /* 1352 */\n  {   164,     21,     12,      0,      0,  18432,    128, }, /* 1353 */\n  {   164,     21,     12,      0,      0,  18432,     74, }, /* 1354 */\n  {   164,     13,     12,      0,      0,  18432,    144, }, /* 1355 */\n  {    88,      7,     12,      0,      0,  18432,     84, }, /* 1356 */\n  {    88,     10,      5,      0,      0,  18432,    154, }, /* 1357 */\n  {    88,     12,      3,      0,      0,  26624,    106, }, /* 1358 */\n  {    88,     12,      3,      0,      0,  26624,    158, }, /* 1359 */\n  {    88,     21,     12,      0,      0,  18432,     74, }, /* 1360 */\n  {   156,      7,     12,      0,      0,  18432,    156, }, /* 1361 */\n  {   156,     12,      3,      0,      0,  26624,    106, }, /* 1362 */\n  {   156,     12,      3,      0,      0,  18432,    106, }, /* 1363 */\n  {   156,     12,      3,      0,      0,  26624,    104, }, /* 1364 */\n  {   156,     12,      3,      0,      0,  26624,    158, }, /* 1365 */\n  {   156,     10,      5,      0,      0,  18432,    154, }, /* 1366 */\n  {   156,      7,     12,      0,      0,  18432,     84, }, /* 1367 */\n  {   156,     21,     12,      0,      0,  18432,     74, }, /* 1368 */\n  {   156,     21,     12,      0,      0,  18432,    128, }, /* 1369 */\n  {   155,      7,     12,      0,      0,  18432,    156, }, /* 1370 */\n  {   155,     12,      3,      0,      0,  26624,    106, }, /* 1371 */\n  {   155,     10,      5,      0,      0,  18432,    154, }, /* 1372 */\n  {   155,      7,      4,      0,      0,  18432,     84, }, /* 1373 */\n  {   155,     12,      3,      0,      0,  26624,    350, }, /* 1374 */\n  {   155,     12,      3,      0,      0,  26624,    158, }, /* 1375 */\n  {   155,     21,     12,      0,      0,  18432,     74, }, /* 1376 */\n  {   155,     21,     12,      0,      0,  18432,    128, }, /* 1377 */\n  {   155,      7,     12,      0,      0,  18432,     84, }, /* 1378 */\n  {   155,     21,     12,      0,      0,  18432,    110, }, /* 1379 */\n  {   145,      7,     12,      0,      0,  18432,     84, }, /* 1380 */\n  {    96,      7,     12,      0,      0,  18432,     84, }, /* 1381 */\n  {    96,     21,     12,      0,      0,  18432,     74, }, /* 1382 */\n  {    96,     13,     12,      0,      0,  18432,    144, }, /* 1383 */\n  {   152,      7,     12,      0,      0,  18432,     84, }, /* 1384 */\n  {   152,     10,      5,      0,      0,  18432,    154, }, /* 1385 */\n  {   152,     12,      3,      0,      0,  26624,    106, }, /* 1386 */\n  {   152,     12,      3,      0,      0,  18432,    158, }, /* 1387 */\n  {   152,     21,     12,      0,      0,  18432,    128, }, /* 1388 */\n  {   152,     21,     12,      0,      0,  18432,    110, }, /* 1389 */\n  {   152,     21,     12,      0,      0,  18432,     74, }, /* 1390 */\n  {   152,     13,     12,      0,      0,  18432,    144, }, /* 1391 */\n  {   152,     15,     12,      0,      0,  18432,     74, }, /* 1392 */\n  {   153,     21,     12,      0,      0,  18432,     74, }, /* 1393 */\n  {   153,     21,     12,      0,      0,  18432,    110, }, /* 1394 */\n  {   153,      7,     12,      0,      0,  18432,     84, }, /* 1395 */\n  {   153,     12,      3,      0,      0,  26624,    106, }, /* 1396 */\n  {   153,     10,      5,      0,      0,  18432,    154, }, /* 1397 */\n  {    83,      7,     12,      0,      0,  18432,     84, }, /* 1398 */\n  {    83,     12,      3,      0,      0,  26624,    106, }, /* 1399 */\n  {    83,     12,      3,      0,      0,  26624,     98, }, /* 1400 */\n  {    83,     12,      3,      0,      0,  26624,    158, }, /* 1401 */\n  {    83,      7,      4,      0,      0,  18432,     84, }, /* 1402 */\n  {    83,     13,     12,      0,      0,  18432,    144, }, /* 1403 */\n  {    85,      7,     12,      0,      0,  18432,     84, }, /* 1404 */\n  {    85,     10,      5,      0,      0,  18432,    154, }, /* 1405 */\n  {    85,     12,      3,      0,      0,  26624,    106, }, /* 1406 */\n  {    85,     12,      3,      0,      0,  26624,    158, }, /* 1407 */\n  {    85,     13,     12,      0,      0,  18432,    144, }, /* 1408 */\n  {   173,      7,     12,      0,      0,  18432,     84, }, /* 1409 */\n  {   173,      6,     12,      0,      0,  18432,     96, }, /* 1410 */\n  {   173,     13,     12,      0,      0,  18432,    144, }, /* 1411 */\n  {   157,      7,     12,      0,      0,  18432,     84, }, /* 1412 */\n  {   157,     12,      3,      0,      0,  26624,    106, }, /* 1413 */\n  {   157,     10,      5,      0,      0,  18432,    154, }, /* 1414 */\n  {   157,     21,     12,      0,      0,  18432,    128, }, /* 1415 */\n  {   168,     12,      3,      0,      0,  26624,    106, }, /* 1416 */\n  {   168,      7,      4,      0,      0,  18432,     84, }, /* 1417 */\n  {   168,     10,      5,      0,      0,  18432,    154, }, /* 1418 */\n  {   168,      7,     12,      0,      0,  18432,    156, }, /* 1419 */\n  {   168,     10,      3,      0,      0,  18432,    188, }, /* 1420 */\n  {   168,     12,      3,      0,      0,  26624,    158, }, /* 1421 */\n  {   168,     21,     12,      0,      0,  18432,    128, }, /* 1422 */\n  {   168,     21,     12,      0,      0,  18432,     74, }, /* 1423 */\n  {   168,     13,     12,      0,      0,  18432,    144, }, /* 1424 */\n  {   168,     12,      3,      0,      0,  26624,     98, }, /* 1425 */\n  {    13,     15,     12,      0,      0,  18432,     74, }, /* 1426 */\n  {    13,     21,     12,      0,      0,  18432,     74, }, /* 1427 */\n  {   115,      7,     12,      0,      0,  18432,     84, }, /* 1428 */\n  {   115,     14,     12,      0,      0,  18432,     84, }, /* 1429 */\n  {   115,     21,     12,      0,      0,  18432,    110, }, /* 1430 */\n  {    90,      7,     12,      0,      0,  18432,     84, }, /* 1431 */\n  {    90,     21,     12,      0,      0,  18432,     74, }, /* 1432 */\n  {   126,      7,     12,      0,      0,  18432,     84, }, /* 1433 */\n  {   126,      1,      2,      0,      0,  18432,    344, }, /* 1434 */\n  {   126,     12,      3,      0,      0,  26624,    104, }, /* 1435 */\n  {   126,     12,      3,      0,      0,  26624,     98, }, /* 1436 */\n  {   149,      7,     12,      0,      0,  18432,     84, }, /* 1437 */\n  {    94,      7,     12,      0,      0,  18432,     84, }, /* 1438 */\n  {    94,     12,      3,      0,      0,  26624,    106, }, /* 1439 */\n  {    94,     10,      5,      0,      0,  18432,    154, }, /* 1440 */\n  {    94,     12,      3,      0,      0,  26624,    158, }, /* 1441 */\n  {    94,     13,     12,      0,      0,  18432,    144, }, /* 1442 */\n  {   141,      7,     12,      0,      0,  18432,     84, }, /* 1443 */\n  {   141,     13,     12,      0,      0,  18432,    144, }, /* 1444 */\n  {   141,     21,     12,      0,      0,  18432,    128, }, /* 1445 */\n  {   166,      7,     12,      0,      0,  18432,     84, }, /* 1446 */\n  {   166,     13,     12,      0,      0,  18432,    144, }, /* 1447 */\n  {   138,      7,     12,      0,      0,  18432,     84, }, /* 1448 */\n  {   138,     12,      3,      0,      0,  26624,     98, }, /* 1449 */\n  {   138,     21,     12,      0,      0,  18432,    128, }, /* 1450 */\n  {   139,      7,     12,      0,      0,  18432,     84, }, /* 1451 */\n  {   139,     12,      3,      0,      0,  26624,     98, }, /* 1452 */\n  {   139,     21,     12,      0,      0,  18432,    128, }, /* 1453 */\n  {   139,     21,     12,      0,      0,  18432,    110, }, /* 1454 */\n  {   139,     21,     12,      0,      0,  18432,     74, }, /* 1455 */\n  {   139,     26,     12,      0,      0,  18432,     74, }, /* 1456 */\n  {   139,      6,     12,      0,      0,  18432,    148, }, /* 1457 */\n  {   139,      6,     12,      0,      0,  18432,    138, }, /* 1458 */\n  {   139,     13,     12,      0,      0,  18432,    144, }, /* 1459 */\n  {   139,     15,     12,      0,      0,  18432,     74, }, /* 1460 */\n  {   170,      6,     12,      0,      0,  18432,    148, }, /* 1461 */\n  {   170,      7,     12,      0,      0,  18432,     84, }, /* 1462 */\n  {   170,      7,      7,      0,      0,  18432,     84, }, /* 1463 */\n  {   170,      6,     12,      0,      0,  18432,     94, }, /* 1464 */\n  {   170,     21,     12,      0,      0,  18432,     74, }, /* 1465 */\n  {   170,     21,     12,      0,      0,  18432,    128, }, /* 1466 */\n  {   170,     13,     12,      0,      0,  18432,    144, }, /* 1467 */\n  {   158,      9,     12,      0,     32,  18432,     76, }, /* 1468 */\n  {   158,      5,     12,      0,    -32,  18432,     78, }, /* 1469 */\n  {   158,     15,     12,      0,      0,  18432,     74, }, /* 1470 */\n  {   158,     21,     12,      0,      0,  18432,    110, }, /* 1471 */\n  {   158,     21,     12,      0,      0,  18432,    128, }, /* 1472 */\n  {   158,     21,     12,      0,      0,  18432,     74, }, /* 1473 */\n  {   174,      9,     12,      0,     27,  18432,     76, }, /* 1474 */\n  {   174,      5,     12,      0,    -27,  18432,     78, }, /* 1475 */\n  {   136,      7,     12,      0,      0,  18432,     84, }, /* 1476 */\n  {   136,     12,      3,      0,      0,  26624,    106, }, /* 1477 */\n  {   136,     10,      5,      0,      0,  18432,    154, }, /* 1478 */\n  {   136,     12,      3,      0,      0,  26624,    132, }, /* 1479 */\n  {   136,      6,     12,      0,      0,  18432,     94, }, /* 1480 */\n  {    82,      6,     12,      0,      0,  18432,    138, }, /* 1481 */\n  {   154,      6,     12,      0,      0,  18432,    138, }, /* 1482 */\n  {    30,     21,     12,      0,      0,  28672,     74, }, /* 1483 */\n  {   165,     12,      3,      0,      0,  26624,    352, }, /* 1484 */\n  {    30,     10,      3,      0,      0,  18432,    354, }, /* 1485 */\n  {    30,      6,     12,      0,      0,  18432,    356, }, /* 1486 */\n  {    82,      7,     12,      0,      0,  18432,    302, }, /* 1487 */\n  {   165,      7,     12,      0,      0,  18432,    302, }, /* 1488 */\n  {    28,      6,     12,      0,      0,  18432,     94, }, /* 1489 */\n  {   154,      7,     12,      0,      0,  18432,    302, }, /* 1490 */\n  {    65,      7,     12,      0,      0,  18432,     84, }, /* 1491 */\n  {    65,     26,     12,      0,      0,  18432,     74, }, /* 1492 */\n  {    65,     12,      3,      0,      0,  26624,    104, }, /* 1493 */\n  {    65,     12,      3,      0,      0,  26624,    106, }, /* 1494 */\n  {    65,     21,     12,      0,      0,  18432,    128, }, /* 1495 */\n  {   100,      1,      2,      0,      0,   6504,     66, }, /* 1496 */\n  {   100,     13,     12,      0,      0,  10240,    144, }, /* 1497 */\n  {   100,     10,      3,      0,      0,  18432,    358, }, /* 1498 */\n  {   100,     10,      3,      0,      0,  18432,    304, }, /* 1499 */\n  {     1,     12,      3,      0,      0,  26624,    104, }, /* 1500 */\n  {   100,     25,     12,      0,      0,  28672,    360, }, /* 1501 */\n  {   100,     13,     12,      0,      0,  10240,    226, }, /* 1502 */\n  {   151,     26,     12,      0,      0,  18432,     74, }, /* 1503 */\n  {   151,     12,      3,      0,      0,  26624,    104, }, /* 1504 */\n  {   151,     21,     12,      0,      0,  18432,    110, }, /* 1505 */\n  {   151,     21,     12,      0,      0,  18432,    128, }, /* 1506 */\n  {   151,     21,     12,      0,      0,  18432,     74, }, /* 1507 */\n  {    44,     12,      3,      0,      0,  26624,    106, }, /* 1508 */\n  {     2,      6,     12,      0,      0,  18432,     92, }, /* 1509 */\n  {   161,      7,     12,      0,      0,  18432,     84, }, /* 1510 */\n  {   161,     12,      3,      0,      0,  26624,     98, }, /* 1511 */\n  {   161,      6,     12,      0,      0,  18432,    148, }, /* 1512 */\n  {   161,      6,     12,      0,      0,  18432,    138, }, /* 1513 */\n  {   161,     13,     12,      0,      0,  18432,    144, }, /* 1514 */\n  {   161,     26,     12,      0,      0,  18432,     74, }, /* 1515 */\n  {    92,      7,     12,      0,      0,  18432,     84, }, /* 1516 */\n  {    92,     12,      3,      0,      0,  26624,     98, }, /* 1517 */\n  {   162,      7,     12,      0,      0,  18432,     84, }, /* 1518 */\n  {   162,     12,      3,      0,      0,  26624,     98, }, /* 1519 */\n  {   162,     13,     12,      0,      0,  18432,    144, }, /* 1520 */\n  {   162,     23,     12,      0,      0,  14336,     74, }, /* 1521 */\n  {   169,      7,     12,      0,      0,  18432,     84, }, /* 1522 */\n  {   169,      6,     12,      0,      0,  18432,    148, }, /* 1523 */\n  {   169,     12,      3,      0,      0,  26624,    104, }, /* 1524 */\n  {   169,     13,     12,      0,      0,  18432,    144, }, /* 1525 */\n  {    95,      7,     12,      0,      0,  18432,     84, }, /* 1526 */\n  {    95,     12,      3,      0,      0,  26624,     98, }, /* 1527 */\n  {    95,     12,      3,      0,      0,  26624,    164, }, /* 1528 */\n  {    95,     13,     12,      0,      0,  18432,    144, }, /* 1529 */\n  {    95,     21,     12,      0,      0,  18432,     74, }, /* 1530 */\n  {   172,      7,     12,      0,      0,  18432,     84, }, /* 1531 */\n  {   172,     12,      3,      0,      0,  26624,    106, }, /* 1532 */\n  {   172,      6,     12,      0,      0,  18432,    148, }, /* 1533 */\n  {   140,      7,     12,      0,      0,  34816,     84, }, /* 1534 */\n  {   140,     15,     12,      0,      0,  34816,     74, }, /* 1535 */\n  {   140,     12,      3,      0,      0,  26624,     98, }, /* 1536 */\n  {    79,      9,     12,      0,     34,  34816,     76, }, /* 1537 */\n  {    79,      5,     12,      0,    -34,  34816,     78, }, /* 1538 */\n  {    79,     12,      3,      0,      0,  26624,    164, }, /* 1539 */\n  {    79,     12,      3,      0,      0,  26624,    106, }, /* 1540 */\n  {    79,     12,      3,      0,      0,  26624,     98, }, /* 1541 */\n  {    79,      6,     12,      0,      0,  34816,    148, }, /* 1542 */\n  {    79,     13,     12,      0,      0,  34816,    144, }, /* 1543 */\n  {    79,     21,     12,      0,      0,  34816,     74, }, /* 1544 */\n  {   100,     15,     12,      0,      0,      0,     74, }, /* 1545 */\n  {   100,     26,     12,      0,      0,      0,     74, }, /* 1546 */\n  {   100,     23,     12,      0,      0,      0,     74, }, /* 1547 */\n  {     5,      7,     12,      0,      0,      0,    256, }, /* 1548 */\n  {   100,     26,     14,      0,      0,  28672,    362, }, /* 1549 */\n  {    99,      2,     14,      0,      0,  18432,    364, }, /* 1550 */\n  {   100,     26,     12,      0,      0,  18432,    366, }, /* 1551 */\n  {   100,     26,     14,      0,      0,  18432,    368, }, /* 1552 */\n  {   100,     26,     14,      0,      0,  18432,    362, }, /* 1553 */\n  {   100,     26,     11,      0,      0,  18432,    370, }, /* 1554 */\n  {    27,     26,     12,      0,      0,  18432,     74, }, /* 1555 */\n  {   100,     26,     14,      0,      0,  18432,    252, }, /* 1556 */\n  {   100,     26,     14,      0,      0,  18816,    362, }, /* 1557 */\n  {   100,     26,     14,      0,      0,  28672,    372, }, /* 1558 */\n  {   100,     26,     14,      0,      0,  28672,    374, }, /* 1559 */\n  {   100,     24,      3,      0,      0,  28672,    376, }, /* 1560 */\n  {   100,     26,     14,      0,      0,  28672,    378, }, /* 1561 */\n  {   100,      1,      3,      0,      0,   6144,    380, }, /* 1562 */\n};\n\nconst uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */\n  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, /* U+0000 */\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, /* U+0800 */\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 41, 41, 42, 43, 44, 45, /* U+1000 */\n 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, /* U+1800 */\n 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, /* U+2000 */\n 78, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, /* U+2800 */\n 93, 94, 95, 96, 97, 98, 99,100,101,101,101,101,101,101,101,101, /* U+3000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+3800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+4000 */\n101,101,101,101,101,101,101,101,101,101,101,102,101,101,101,101, /* U+4800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+5000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+5800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+6000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+6800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+7000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+7800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+8000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+8800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+9000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+9800 */\n103,104,104,104,104,104,104,104,104,105,106,106,107,108,109,110, /* U+A000 */\n111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,119, /* U+A800 */\n120,121,122,123,124,125,119,120,121,122,123,124,125,119,120,121, /* U+B000 */\n122,123,124,125,119,120,121,122,123,124,125,119,120,121,122,123, /* U+B800 */\n124,125,119,120,121,122,123,124,125,119,120,121,122,123,124,125, /* U+C000 */\n119,120,121,122,123,124,125,119,120,121,122,123,124,125,119,120, /* U+C800 */\n121,122,123,124,125,119,120,121,122,123,124,125,119,120,121,126, /* U+D000 */\n127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, /* U+D800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+E000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+E800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F000 */\n128,128,129,129,130,131,132,133,134,135,136,137,138,139,140,141, /* U+F800 */\n142,143,144,145,146,147,148,149,150,151,152,153,154,154,155,156, /* U+10000 */\n157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172, /* U+10800 */\n173,174,175,176,177,178,179,180,181,182,146,183,184,185,186,146, /* U+11000 */\n187,188,189,190,191,192,193,194,195,196,197,198,146,199,200,201, /* U+11800 */\n202,202,202,202,202,202,202,203,204,202,205,146,146,146,146,146, /* U+12000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,206, /* U+12800 */\n207,207,207,207,207,207,207,207,208,207,207,207,207,207,207,207, /* U+13000 */\n207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, /* U+13800 */\n207,207,207,207,207,207,207,209,210,210,210,210,211,146,146,146, /* U+14000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+14800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+15000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+15800 */\n146,146,212,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+16000 */\n213,213,213,213,214,215,216,217,146,146,218,146,219,220,221,222, /* U+16800 */\n223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+17000 */\n223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+17800 */\n223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+18000 */\n223,223,223,223,223,223,224,224,224,225,226,227,146,146,146,146, /* U+18800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+19000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+19800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+1A000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,228, /* U+1A800 */\n229,230,231,232,232,233,146,146,146,146,146,146,146,146,146,146, /* U+1B000 */\n146,146,146,146,146,146,146,146,234,235,146,146,146,146,146,146, /* U+1B800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+1C000 */\n146,146,146,146,146,146,146,146,236,237,236,236,236,238,239,240, /* U+1C800 */\n241,242,243,244,245,246,247,146,248,249,250,251,252,253,254,255, /* U+1D000 */\n256,256,256,256,257,258,146,146,146,146,146,146,146,146,259,146, /* U+1D800 */\n260,261,262,146,146,263,146,146,146,264,146,265,146,266,146,267, /* U+1E000 */\n268,269,270,271,271,271,271,271,272,273,274,271,275,276,271,271, /* U+1E800 */\n277,278,279,280,281,282,283,284,285,286,287,288,289,290,236,291, /* U+1F000 */\n292,293,294,295,296,297,236,298,282,282,282,282,282,282,282,299, /* U+1F800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+20000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+20800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+21000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+21800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+22000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+22800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+23000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+23800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+24000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+24800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+25000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+25800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+26000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+26800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+27000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+27800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+28000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+28800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+29000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+29800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,300,101,101, /* U+2A000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2A800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B000 */\n301,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2C000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,302,101,101, /* U+2C800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2D000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2D800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2E000 */\n101,101,101,101,101,101,101,303,101,101,101,101,304,146,146,146, /* U+2E800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+2F000 */\n129,129,129,129,305,146,146,146,146,146,146,146,146,146,146,306, /* U+2F800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+30000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+30800 */\n101,101,101,101,101,101,307,101,101,101,101,101,101,101,101,101, /* U+31000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+31800 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+32000 */\n101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+32800 */\n101,101,101,101,101,101,101,101,308,146,146,146,146,146,146,146, /* U+33000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+33800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+34000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+34800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+35000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+35800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+36000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+36800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+37000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+37800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+38000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+38800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+39000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+39800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3A000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3A800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3B000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3B800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3C000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3C800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3D000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3D800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3E000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3E800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3F000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+3F800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+40000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+40800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+41000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+41800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+42000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+42800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+43000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+43800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+44000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+44800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+45000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+45800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+46000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+46800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+47000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+47800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+48000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+48800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+49000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+49800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4A000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4A800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4B000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4B800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4C000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4C800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4D000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4D800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4E000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4E800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4F000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+4F800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+50000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+50800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+51000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+51800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+52000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+52800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+53000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+53800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+54000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+54800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+55000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+55800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+56000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+56800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+57000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+57800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+58000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+58800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+59000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+59800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5A000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5A800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5B000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5B800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5C000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5C800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5D000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5D800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5E000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5E800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5F000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+5F800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+60000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+60800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+61000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+61800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+62000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+62800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+63000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+63800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+64000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+64800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+65000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+65800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+66000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+66800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+67000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+67800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+68000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+68800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+69000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+69800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6A000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6A800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6B000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6B800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6C000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6C800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6D000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6D800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6E000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6E800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6F000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+6F800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+70000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+70800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+71000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+71800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+72000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+72800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+73000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+73800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+74000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+74800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+75000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+75800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+76000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+76800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+77000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+77800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+78000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+78800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+79000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+79800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7A000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7A800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7B000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7B800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7C000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7C800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7D000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7D800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7E000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7E800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7F000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+7F800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+80000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+80800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+81000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+81800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+82000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+82800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+83000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+83800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+84000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+84800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+85000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+85800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+86000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+86800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+87000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+87800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+88000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+88800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+89000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+89800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8A000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8A800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8B000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8B800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8C000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8C800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8D000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8D800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8E000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8E800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8F000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+8F800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+90000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+90800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+91000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+91800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+92000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+92800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+93000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+93800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+94000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+94800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+95000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+95800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+96000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+96800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+97000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+97800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+98000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+98800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+99000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+99800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9A000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9A800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9B000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9B800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9C000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9C800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9D000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9D800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9E000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9E800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9F000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+9F800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A0000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A0800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A1000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A1800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A2000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A2800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A3000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A3800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A4000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A4800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A5000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A5800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A6000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A6800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A7000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A7800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A8000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A8800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A9000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A9800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AA000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AA800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AB000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AB800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AC000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AC800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AD000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AD800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AE000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AE800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AF000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+AF800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B0000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B0800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B1000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B1800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B2000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B2800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B3000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B3800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B4000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B4800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B5000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B5800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B6000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B6800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B7000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B7800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B8000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B8800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B9000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B9800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BA000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BA800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BB000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BB800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BC000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BC800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BD000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BD800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BE000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BE800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BF000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+BF800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C0000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C0800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C1000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C1800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C2000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C2800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C3000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C3800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C4000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C4800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C5000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C5800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C6000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C6800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C7000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C7800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C8000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C8800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C9000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C9800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CA000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CA800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CB000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CB800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CC000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CC800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CD000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CD800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CE000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CE800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CF000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+CF800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D0000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D0800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D1000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D1800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D2000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D2800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D3000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D3800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D4000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D4800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D5000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D5800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D6000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D6800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D7000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D7800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D8000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D8800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D9000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D9800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DA000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DA800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DB000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DB800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DC000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DC800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DD000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DD800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DE000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DE800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DF000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+DF800 */\n309,310,311,312,310,310,310,310,310,310,310,310,310,310,310,310, /* U+E0000 */\n310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310, /* U+E0800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E1000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E1800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E2000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E2800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E3000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E3800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E4000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E4800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E5000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E5800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E6000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E6800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E7000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E7800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E8000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E8800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E9000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E9800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EA000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EA800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EB000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EB800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EC000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EC800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+ED000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+ED800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EE000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EE800 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EF000 */\n146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+EF800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F0000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F0800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F1000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F1800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F2000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F2800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F3000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F3800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F4000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F4800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F5000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F5800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F6000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F6800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F7000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F7800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F8000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F8800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F9000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F9800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FA000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FA800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FB000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FB800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FC000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FC800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FD000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FD800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FE000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FE800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FF000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,313, /* U+FF800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+100000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+100800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+101000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+101800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+102000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+102800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+103000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+103800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+104000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+104800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+105000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+105800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+106000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+106800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+107000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+107800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+108000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+108800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+109000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+109800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10A000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10A800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10B000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10B800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10C000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10C800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10D000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10D800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10E000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10E800 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10F000 */\n128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,313, /* U+10F800 */\n};\n\nconst uint16_t PRIV(ucd_stage2)[] = { /* 80384 bytes, block = 128 */\n\n/* block 0 */\n  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  2,  1,  3,  4,  0,  0,\n  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  5,  5,  5,  6,\n  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 25, 26, 27, 26,  8,\n 13, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 30, 29, 29, 29, 29,\n 29, 29, 29, 31, 29, 29, 29, 29, 29, 29, 29, 15, 13, 16, 32, 33,\n 34, 35, 35, 35, 35, 35, 35, 36, 36, 37, 37, 38, 36, 36, 36, 36,\n 36, 36, 36, 39, 36, 36, 36, 36, 36, 36, 36, 15, 27, 16, 27,  0,\n\n/* block 1 */\n 40, 40, 40, 40, 40, 41, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n 42, 43, 44, 44, 44, 44, 45, 43, 46, 47, 48, 49, 50, 51, 47, 46,\n 52, 53, 54, 54, 46, 55, 43, 56, 46, 54, 48, 57, 58, 58, 58, 43,\n 59, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,\n 59, 59, 59, 59, 59, 59, 59, 50, 59, 59, 59, 59, 59, 59, 59, 61,\n 62, 62, 62, 62, 62, 63, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,\n 62, 62, 62, 62, 62, 62, 62, 50, 62, 62, 62, 62, 62, 62, 62, 64,\n\n/* block 2 */\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 67,\n 68, 69, 65, 66, 65, 66, 65, 66, 70, 65, 66, 65, 66, 65, 66, 65,\n 66, 65, 66, 65, 66, 65, 66, 65, 66, 71, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 72, 65, 66, 65, 66, 65, 66, 73,\n\n/* block 3 */\n 74, 75, 65, 66, 65, 66, 76, 65, 66, 77, 77, 65, 66, 70, 78, 79,\n 80, 65, 66, 77, 81, 82, 83, 84, 65, 66, 85, 86, 83, 87, 88, 89,\n 65, 66, 65, 66, 65, 66, 90, 65, 66, 90, 70, 70, 65, 66, 90, 65,\n 66, 91, 91, 65, 66, 65, 66, 92, 65, 66, 70, 93, 65, 66, 70, 94,\n 93, 93, 93, 93, 95, 96, 97, 98, 99,100,101,102,103, 65, 66, 65,\n 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,104, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 69,105,106,107, 65, 66,108,109, 65, 66, 65, 66, 65, 66, 65, 66,\n\n/* block 4 */\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n110, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 70, 70, 70, 70, 70, 70,111, 65, 66,112,113,114,\n114, 65, 66,115,116,117, 65, 66, 65, 67, 65, 66, 65, 66, 65, 66,\n118,119,120,121,122, 70,123,123, 70,124, 70,125,126, 70, 70, 70,\n123,127, 70,128,129,130,131, 70,132,133,131,134,135, 70, 70,133,\n 70,136,137, 70, 70,138, 70, 70, 70, 70, 70, 70, 70,139, 70, 70,\n\n/* block 5 */\n140, 70,141,140, 70, 70, 70,142,140,143,144,144,145, 70, 70, 70,\n 70, 70,146, 70, 93, 93, 70, 70, 70, 70, 70, 70, 70,147,148, 70,\n 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,\n149,149,150,149,149,149,149,149,149,151,151,152,153,152,152,152,\n154,154, 46, 46, 46, 46,151,155,151,155,155,155,151,156,151,151,\n157,157, 46, 46, 46, 46, 46,158, 46,159, 46, 46, 46, 46, 46, 46,\n149,149,149,149,149, 46, 46, 46, 46, 46,160,160,151, 46,152, 46,\n 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,\n\n/* block 6 */\n161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,\n174,177,176,178,176,176,176,176,176,176,176,176,176,176,176,176,\n176,176,176,179,180,181,176,176,176,176,176,176,176,182,181,176,\n183,184,176,176,176,176,176,176,176,176,176,176,176,176,176,176,\n176,176,185,176,176,186,176,176,176,176,176,176,176,176,176,187,\n176,176,176,176,176,176,176,176,188,189,189,189,189,176,190,176,\n176,176,176,191,191,191,191,191,191,191,191,191,191,191,191,191,\n192,193,192,193,194,195,192,193,196,196,197,198,198,198,199,200,\n\n/* block 7 */\n196,196,196,196,201, 46,202,203,204,204,204,196,205,196,206,206,\n207,208,209,208,208,210,208,208,211,212,213,208,214,208,208,208,\n215,216,196,217,208,208,218,208,208,219,208,208,220,221,221,221,\n222,223,224,223,223,225,223,223,226,227,228,223,229,223,223,223,\n230,231,232,233,223,223,234,223,223,235,223,223,236,237,237,238,\n239,240,241,242,242,243,244,245,192,193,192,193,192,193,192,193,\n192,193,246,247,246,247,246,247,246,247,246,247,246,247,246,247,\n248,249,250,251,252,253,254,192,193,255,192,193,256,257,257,257,\n\n/* block 8 */\n258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,\n259,259,260,259,261,259,259,259,259,259,259,259,259,259,262,259,\n259,263,264,259,259,259,259,259,259,259,265,259,259,259,259,259,\n266,266,267,266,268,266,266,266,266,266,266,266,266,266,269,266,\n266,270,271,266,266,266,266,266,266,266,272,266,266,266,266,266,\n273,273,273,273,273,273,274,273,274,273,273,273,273,273,273,273,\n275,276,277,278,275,276,275,276,275,276,275,276,275,276,275,276,\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,\n\n/* block 9 */\n275,276,279,280,281,282,282,281,283,283,275,276,275,276,275,276,\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,\n284,275,276,275,276,275,276,275,276,275,276,275,276,275,276,285,\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,\n\n/* block 10 */\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,\n196,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,\n286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,\n286,286,286,286,286,286,286,196,196,287,288,288,288,288,288,289,\n290,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,\n291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,\n\n/* block 11 */\n291,291,291,291,291,291,291,292,290,293,294,196,196,295,295,296,\n297,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,\n298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,\n299,299,299,299,299,299,299,299,299,299,299,299,299,299,300,299,\n301,299,299,302,299,299,301,299,297,297,297,297,297,297,297,297,\n303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,\n303,303,303,303,303,303,303,303,303,303,303,297,297,297,297,303,\n303,303,303,301,304,297,297,297,297,297,297,297,297,297,297,297,\n\n/* block 12 */\n305,305,305,305,305,306,307,307,308,309,309,310,311,312,313,313,\n314,314,314,314,314,314,314,314,314,314,314,315,316,317,317,318,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n320,319,319,319,319,319,319,319,319,319,319,321,321,321,321,321,\n321,321,321,322,323,323,314,324,325,314,314,314,314,314,314,314,\n326,326,326,326,326,326,326,326,326,326,309,327,327,312,319,319,\n322,319,319,328,319,319,319,319,319,319,319,319,319,319,319,319,\n\n/* block 13 */\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,329,319,314,314,314,314,314,314,330,306,313,331,\n331,314,314,330,314,332,332,330,330,313,331,331,331,314,319,319,\n333,333,333,333,333,333,333,333,333,333,319,319,319,334,334,319,\n\n/* block 14 */\n335,335,335,336,336,336,336,336,336,336,336,337,336,337,338,339,\n340,341,340,340,340,340,340,340,340,340,340,340,340,340,340,340,\n340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,\n342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,\n343,343,343,343,343,343,343,343,343,343,343,338,338,340,340,340,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n\n/* block 15 */\n344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,\n344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,\n344,344,344,344,344,344,345,345,345,345,345,345,345,345,345,345,\n345,344,338,338,338,338,338,338,338,338,338,338,338,338,338,338,\n346,346,346,346,346,346,346,346,346,346,347,347,347,347,347,347,\n347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,\n347,347,347,347,347,347,347,347,347,347,347,348,348,348,348,348,\n348,348,348,348,349,349,350,351,352,353,354,297,297,355,356,356,\n\n/* block 16 */\n357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,\n357,357,357,357,357,357,358,358,359,359,360,358,358,358,358,358,\n358,358,358,358,360,358,358,358,360,358,358,358,358,361,297,297,\n362,362,362,362,362,362,363,364,362,364,362,362,362,364,364,297,\n365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,\n365,365,365,365,365,365,365,365,365,366,366,366,297,297,367,297,\n340,340,340,340,340,340,340,340,340,340,340,338,338,338,338,338,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n\n/* block 17 */\n319,319,319,319,319,319,319,319,368,319,319,319,319,319,319,319,\n305,305,338,338,338,338,338,314,331,331,331,331,331,331,331,331,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,332,325,325,331,325,325,325,\n331,331,331,369,314,314,314,314,314,314,314,314,314,314,314,314,\n370,370,306,324,324,324,324,324,324,324,331,331,331,331,331,331,\n324,324,324,371,324,324,324,324,324,324,324,324,324,324,324,314,\n\n/* block 18 */\n372,372,372,373,374,374,374,374,374,374,374,374,374,374,374,374,\n374,374,374,374,374,375,375,375,375,375,375,375,375,375,375,375,\n375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,\n375,375,375,375,375,375,375,375,375,375,372,373,376,374,373,373,\n373,372,372,372,372,372,372,372,372,373,373,373,373,377,373,373,\n374,378,379,176,176,372,372,372,375,375,375,375,375,375,375,375,\n374,374,372,372,380,381,382,382,382,382,382,382,382,382,382,382,\n383,384,374,374,374,374,374,374,375,375,375,375,375,375,375,375,\n\n/* block 19 */\n385,386,387,387,196,385,385,385,385,385,385,385,385,196,196,385,\n385,196,196,385,385,388,388,388,388,388,388,388,388,388,388,388,\n388,388,388,388,388,388,388,388,388,196,388,388,388,388,388,388,\n388,196,388,196,196,196,388,388,388,388,196,196,389,385,390,387,\n387,386,386,386,386,196,196,387,387,196,196,387,387,391,385,196,\n196,196,196,196,196,196,196,390,196,196,196,196,388,388,196,388,\n385,385,386,386,196,196,392,392,392,392,392,392,392,392,392,392,\n388,388,393,393,394,394,394,394,394,394,395,393,385,396,397,196,\n\n/* block 20 */\n196,398,398,399,196,400,400,400,400,400,400,196,196,196,196,400,\n400,196,196,400,400,400,400,400,400,400,400,400,400,400,400,400,\n400,400,400,400,400,400,400,400,400,196,400,400,400,400,400,400,\n400,196,400,400,196,400,400,196,400,400,196,196,401,196,399,399,\n399,398,398,196,196,196,196,398,398,196,196,398,398,402,196,196,\n196,398,196,196,196,196,196,196,196,400,400,400,400,196,400,196,\n196,196,196,196,196,196,403,403,403,403,403,403,403,403,403,403,\n398,404,400,400,400,398,405,196,196,196,196,196,196,196,196,196,\n\n/* block 21 */\n196,406,406,407,196,408,408,408,408,408,408,408,408,408,196,408,\n408,408,196,408,408,409,409,409,409,409,409,409,409,409,409,409,\n409,409,409,409,409,409,409,409,409,196,409,409,409,409,409,409,\n409,196,409,409,196,409,409,409,409,409,196,196,410,408,407,407,\n407,406,406,406,406,406,196,406,406,407,196,407,407,411,196,196,\n408,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n408,408,406,406,196,196,412,412,412,412,412,412,412,412,412,412,\n413,414,196,196,196,196,196,196,196,409,406,415,406,410,410,410,\n\n/* block 22 */\n196,416,417,417,196,418,418,418,418,418,418,418,418,196,196,418,\n418,196,196,418,418,419,419,419,419,419,419,419,419,419,419,419,\n419,419,419,419,419,419,419,419,419,196,419,419,419,419,419,419,\n419,196,419,419,196,419,419,419,419,419,196,196,420,418,421,416,\n417,416,416,416,416,196,196,417,417,196,196,417,417,422,196,196,\n196,196,196,196,196,423,416,421,196,196,196,196,419,419,196,419,\n418,418,416,416,196,196,424,424,424,424,424,424,424,424,424,424,\n425,419,426,426,426,426,426,426,196,196,196,196,196,196,196,196,\n\n/* block 23 */\n196,196,427,428,196,428,428,428,428,428,428,196,196,196,428,428,\n428,196,428,428,428,428,196,196,196,428,428,196,428,196,428,428,\n196,196,196,428,428,196,196,196,428,428,428,196,196,196,428,428,\n428,428,428,428,428,428,428,428,428,428,196,196,196,196,429,430,\n427,430,430,196,196,196,430,430,430,196,430,430,430,431,196,196,\n428,196,196,196,196,196,196,429,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,432,432,432,432,432,432,432,432,432,432,\n433,433,433,434,435,435,435,435,435,436,435,196,196,196,196,196,\n\n/* block 24 */\n437,438,438,438,437,439,439,439,439,439,439,439,439,196,439,439,\n439,196,439,439,439,440,440,440,440,440,440,440,440,440,440,440,\n440,440,440,440,440,440,440,440,440,196,440,440,440,440,440,440,\n440,440,440,440,440,440,440,440,440,440,196,196,441,439,437,437,\n437,438,438,438,438,196,437,437,437,196,437,437,437,442,196,196,\n196,196,196,196,196,437,437,196,440,440,440,196,439,439,196,196,\n439,439,437,437,196,196,443,443,443,443,443,443,443,443,443,443,\n196,196,196,196,196,196,196,444,445,445,445,445,445,445,445,446,\n\n/* block 25 */\n447,448,449,449,450,447,447,447,447,447,447,447,447,196,447,447,\n447,196,447,447,447,447,447,447,447,447,447,447,447,447,447,447,\n447,447,447,447,447,447,447,447,447,196,447,447,447,447,447,447,\n447,447,447,447,196,447,447,447,447,447,196,196,451,447,449,452,\n453,449,453,449,449,196,452,453,453,196,453,453,448,454,196,196,\n196,196,196,196,196,453,453,196,196,196,196,196,447,447,447,196,\n447,447,448,448,196,196,455,455,455,455,455,455,455,455,455,455,\n196,447,447,449,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 26 */\n456,456,457,457,458,458,458,458,458,458,458,458,458,196,458,458,\n458,196,458,458,458,459,459,459,459,459,459,459,459,459,459,459,\n459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,\n459,459,459,459,459,459,459,459,459,459,459,460,460,458,461,457,\n457,456,456,456,456,196,457,457,457,196,457,457,457,460,462,463,\n196,196,196,196,458,458,458,461,464,464,464,464,464,464,464,458,\n458,458,456,456,196,196,465,465,465,465,465,465,465,465,465,465,\n464,464,464,464,464,464,464,464,464,463,458,458,458,458,458,458,\n\n/* block 27 */\n196,466,467,467,196,468,468,468,468,468,468,468,468,468,468,468,\n468,468,468,468,468,468,468,196,196,196,468,468,468,468,468,468,\n468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,\n468,468,196,468,468,468,468,468,468,468,468,468,196,468,196,196,\n468,468,468,468,468,468,468,196,196,196,469,196,196,196,196,470,\n467,467,466,466,466,196,466,196,467,467,467,467,467,467,467,470,\n196,196,196,196,196,196,471,471,471,471,471,471,471,471,471,471,\n196,196,467,467,472,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 28 */\n196,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,\n473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,\n473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,\n473,474,473,475,474,474,474,474,474,474,476,196,196,196,196,477,\n478,478,478,478,478,473,479,480,480,480,480,480,480,474,480,481,\n482,482,482,482,482,482,482,482,482,482,483,483,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 29 */\n196,484,484,196,484,196,484,484,484,484,484,196,484,484,484,484,\n484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,\n484,484,484,484,196,484,196,484,484,484,484,484,484,484,484,484,\n484,485,484,486,485,485,485,485,485,485,487,485,485,484,196,196,\n488,488,488,488,488,196,489,196,490,490,490,490,490,485,491,196,\n492,492,492,492,492,492,492,492,492,492,196,196,484,484,484,484,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 30 */\n493,494,494,494,495,495,495,495,496,495,495,495,495,496,496,496,\n496,496,496,494,495,494,494,494,497,497,494,494,494,494,494,494,\n498,498,498,498,498,498,498,498,498,498,499,499,499,499,499,499,\n499,499,499,499,494,497,494,497,494,497,500,501,500,501,502,502,\n493,493,493,493,493,493,493,493,196,493,493,493,493,493,493,493,\n493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,\n493,493,493,493,493,493,493,493,493,493,493,493,493,196,196,196,\n196,503,503,503,503,503,503,504,503,504,503,503,503,503,503,505,\n\n/* block 31 */\n503,503,506,506,507,495,497,497,493,493,493,493,493,503,503,503,\n503,503,503,503,503,503,503,503,196,503,503,503,503,503,503,503,\n503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,\n503,503,503,503,503,503,503,503,503,503,503,503,503,196,494,494,\n494,494,494,494,494,494,497,494,494,494,494,494,494,196,494,494,\n495,495,495,495,495,508,508,508,508,495,495,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 32 */\n509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,\n509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,\n509,509,509,509,509,509,509,509,509,509,509,510,510,511,511,511,\n511,512,511,511,511,511,511,513,510,514,514,512,512,511,511,509,\n515,515,515,515,515,515,515,515,515,515,516,516,517,517,517,517,\n509,509,509,509,509,509,512,512,511,511,509,509,509,509,511,511,\n511,509,510,518,518,509,509,510,510,518,518,518,518,518,509,509,\n509,511,511,511,511,509,509,509,509,509,509,509,509,509,509,509,\n\n/* block 33 */\n509,509,511,510,512,511,511,518,518,518,518,518,518,519,509,518,\n520,520,520,520,520,520,520,520,520,520,518,518,510,511,521,521,\n522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,\n522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,\n522,522,522,522,522,522,196,522,196,196,196,196,196,522,196,196,\n523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,\n523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,\n523,523,523,523,523,523,523,523,523,523,523,524,525,523,523,523,\n\n/* block 34 */\n526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,\n526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,\n526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,\n526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,\n526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,\n526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,527,\n528,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,\n529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,\n\n/* block 35 */\n529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,\n529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,\n529,529,529,529,529,529,529,529,530,530,530,530,530,530,530,530,\n530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,\n530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,\n530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,\n530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,\n530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,\n\n/* block 36 */\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,531,531,196,531,531,531,531,196,196,\n531,531,531,531,531,531,531,196,531,196,531,531,531,531,196,196,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n\n/* block 37 */\n531,531,531,531,531,531,531,531,531,196,531,531,531,531,196,196,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,196,\n531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n\n/* block 38 */\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,531,531,531,531,196,196,532,532,532,\n533,534,535,534,534,534,534,535,535,536,536,536,536,536,536,536,\n536,536,537,537,537,537,537,537,537,537,537,537,537,196,196,196,\n\n/* block 39 */\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n538,538,538,538,538,538,538,538,538,538,196,196,196,196,196,196,\n539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,\n539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,\n539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,\n539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,\n539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,\n540,540,540,540,540,540,196,196,541,541,541,541,541,541,196,196,\n\n/* block 40 */\n542,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n\n/* block 41 */\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n\n/* block 42 */\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,544,545,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n\n/* block 43 */\n546,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,\n547,547,547,547,547,547,547,547,547,547,547,548,549,196,196,196,\n550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,\n550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,\n550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,\n550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,\n550,550,550,550,550,550,550,550,550,550,550,551,551,551,552,552,\n552,550,550,550,550,550,550,550,550,196,196,196,196,196,196,196,\n\n/* block 44 */\n553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,\n553,553,554,554,555,556,196,196,196,196,196,196,196,196,196,553,\n557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,\n557,557,558,558,559,560,560,196,196,196,196,196,196,196,196,196,\n561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,\n561,561,562,562,196,196,196,196,196,196,196,196,196,196,196,196,\n563,563,563,563,563,563,563,563,563,563,563,563,563,196,563,563,\n563,196,564,564,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 45 */\n565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,\n565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,\n565,565,565,566,566,565,565,565,565,565,565,565,565,565,565,565,\n565,565,565,565,567,567,568,569,569,569,569,569,569,569,568,568,\n568,568,568,568,568,568,569,568,568,570,570,570,570,570,570,570,\n570,570,571,570,572,572,573,574,575,575,573,576,577,570,196,196,\n578,578,578,578,578,578,578,578,578,578,196,196,196,196,196,196,\n579,579,579,579,579,579,579,579,579,579,196,196,196,196,196,196,\n\n/* block 46 */\n580,580,581,582,583,581,584,580,583,585,586,587,587,587,588,587,\n589,589,589,589,589,589,589,589,589,589,196,196,196,196,196,196,\n590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,\n590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,\n590,590,590,591,590,590,590,590,590,590,590,590,590,590,590,590,\n590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,\n590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,\n590,590,590,590,590,590,590,590,590,196,196,196,196,196,196,196,\n\n/* block 47 */\n590,590,590,590,590,592,592,590,590,590,590,590,590,590,590,590,\n590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,\n590,590,590,590,590,590,590,590,590,593,590,196,196,196,196,196,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n543,543,543,543,543,543,196,196,196,196,196,196,196,196,196,196,\n\n/* block 48 */\n594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,\n594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,196,\n595,595,595,596,596,596,596,595,595,596,596,596,196,196,196,196,\n596,596,595,596,596,596,596,596,596,597,597,597,196,196,196,196,\n598,196,196,196,599,599,600,600,600,600,600,600,600,600,600,600,\n601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,\n601,601,601,601,601,601,601,601,601,601,601,601,601,601,196,196,\n601,601,601,601,601,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 49 */\n602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,\n602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,\n602,602,602,602,602,602,602,602,602,602,602,602,196,196,196,196,\n602,602,602,602,602,603,603,603,602,602,603,602,602,602,602,602,\n602,602,602,602,602,602,602,602,602,602,196,196,196,196,196,196,\n604,604,604,604,604,604,604,604,604,604,605,196,196,196,606,606,\n607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,\n607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,\n\n/* block 50 */\n608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,\n608,608,608,608,608,608,608,609,609,610,610,609,196,196,611,611,\n612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,\n612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,\n612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,\n612,612,612,612,612,613,614,613,614,614,614,614,614,614,614,196,\n615,616,614,616,616,614,614,614,614,614,614,614,614,613,613,613,\n613,613,613,614,614,617,617,617,617,617,617,617,617,196,196,617,\n\n/* block 51 */\n618,618,618,618,618,618,618,618,618,618,196,196,196,196,196,196,\n618,618,618,618,618,618,618,618,618,618,196,196,196,196,196,196,\n619,619,619,619,619,619,619,620,621,621,621,621,619,619,196,196,\n176,176,176,176,176,176,176,176,176,176,176,176,176,176,622,623,\n623,176,176,176,176,176,176,176,176,176,176,176,623,623,623,176,\n176,176,176,176,176,176,176,176,176,176,176,176,176,176,196,196,\n176,176,176,176,176,176,176,176,176,176,176,176,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 52 */\n624,624,624,624,625,626,626,626,626,626,626,627,627,626,626,626,\n626,626,626,627,627,627,627,627,627,627,627,627,627,627,627,627,\n627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,\n627,627,627,627,628,629,624,624,624,624,624,629,624,629,625,625,\n625,625,624,629,630,627,627,627,627,627,627,627,627,196,631,631,\n632,632,632,632,632,632,632,632,632,632,631,631,633,634,631,631,\n633,635,635,635,635,635,635,635,635,635,635,628,628,628,628,628,\n628,628,628,628,635,635,635,635,635,635,635,635,635,631,631,631,\n\n/* block 53 */\n636,636,637,638,638,638,638,638,638,638,638,638,638,638,638,638,\n638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,\n638,637,636,636,636,636,637,637,636,636,639,640,636,636,638,638,\n641,641,641,641,641,641,641,641,641,641,642,638,638,638,642,642,\n643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,\n643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,\n643,643,643,643,643,643,644,645,646,646,645,645,645,646,645,646,\n646,646,647,647,196,196,196,196,196,196,196,196,648,648,648,648,\n\n/* block 54 */\n649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,\n649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,\n649,649,649,649,650,650,650,650,650,650,650,650,651,651,651,651,\n651,651,651,651,650,650,652,653,196,196,196,654,654,655,655,655,\n656,656,656,656,656,656,656,656,656,656,196,196,196,649,649,649,\n657,657,657,657,657,657,657,657,657,657,658,658,658,658,658,658,\n658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,\n658,658,658,658,658,658,658,658,659,659,659,660,659,659,661,661,\n\n/* block 55 */\n662,663,664,665,666,667,668,669,670,275,276,196,196,196,196,196,\n671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,\n671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,\n671,671,671,671,671,671,671,671,671,671,671,196,196,671,671,671,\n672,672,672,672,672,672,672,672,196,196,196,196,196,196,196,196,\n673,674,673,675,674,676,677,678,679,680,681,674,680,680,674,674,\n680,682,683,674,674,674,674,674,674,684,685,686,687,688,687,687,\n687,687,689,690,691,692,692,693,694,694,695,196,196,196,196,196,\n\n/* block 56 */\n 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,\n 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,\n 70, 70, 70, 70, 70, 70,256,256,256,256,256,696,149,149,149,149,\n149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,\n149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,\n149,149,149,149,149,149,149,149,149,149,149,149,149,697,697,697,\n697,697,150,149,149,149,697,697,697,697,697, 70, 70, 70, 70, 70,\n 70, 70, 70, 70, 70, 70, 70, 70,698,699, 70, 70, 70,700, 70, 70,\n\n/* block 57 */\n 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,701, 70,\n 70, 70, 70, 70, 70, 70,702, 70, 70, 70, 70,149,149,149,149,149,\n149,149,149,149,150,149,149,149,150,149,149,149,149,149,149,149,\n149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,703,\n704,704,189,189,176,176,176,176,176,176,176,176,176,176,176,176,\n189,189,189,623,623,623,623,623,623,623,623,623,623,623,623,623,\n623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,\n623,623,623,623,623,176,176,176,705,176,706,176,176,176,176,176,\n\n/* block 58 */\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 67, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n707,708, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n\n/* block 59 */\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 69, 69, 69, 69,709,710, 70, 70,711, 70,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 67, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n\n/* block 60 */\n712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713,\n712,712,712,712,712,712,196,196,713,713,713,713,713,713,196,196,\n712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713,\n712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713,\n712,712,712,712,712,712,196,196,713,713,713,713,713,713,196,196,\n714,712,714,712,714,712,714,712,196,713,196,713,196,713,196,713,\n712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713,\n715,715,716,716,716,716,717,717,718,718,719,719,720,720,196,196,\n\n/* block 61 */\n721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722,\n721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722,\n721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722,\n712,712,723,724,723,196,714,723,713,713,725,725,726,201,727,201,\n201,201,723,724,723,196,714,723,728,728,728,728,726,201,201,201,\n712,712,714,729,196,196,714,714,713,713,730,730,196,201,201,201,\n712,712,714,731,714,250,714,714,713,713,732,732,255,201,201,201,\n196,196,723,724,723,196,714,723,733,733,734,734,726,201,201,196,\n\n/* block 62 */\n735,735,735,735,735,735,735,735,735,735,735, 51,736,737,738,739,\n740,740,740,740,740,740,741, 43,742,743,744,745,745,746,744,745,\n 43, 43, 43, 43,747, 43, 43,748,749,750,751,752,753,754,755,756,\n757,757,758,758,758, 43, 43, 43, 43, 49, 57, 43,759,760, 43,761,\n762, 43, 43, 43,763,764,765,760,760,759, 43, 43, 43, 43, 43,766,\n 43, 43, 50,767,761, 43, 43, 43, 43, 43,768, 43, 43,769, 43,735,\n 51,770,770,770,770,771,772,773,774,775,776,776,776,776,776,776,\n 54,777,196,196, 54, 54, 54, 54, 54, 54,778,779,780,781,782,783,\n\n/* block 63 */\n 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,778,779,780,781,782,196,\n783,783,783,783,783,783,783,783,783,783,783,783,783,196,196,196,\n477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,\n477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,\n477,477,784,784,784,784,784,784,784,784,784,784,784,784,784,784,\n785,785,785,785,785,785,785,785,785,785,785,785,785,786,786,786,\n786,785,786,787,786,785,785,189,189,189,189,785,785,785,785,785,\n788,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 64 */\n789,789,790,789,789,789,789,790,789,789,791,790,790,790,791,791,\n790,790,790,791,789,790,789,789,792,790,790,790,790,790,789,789,\n789,789,793,789,790,789,794,789,790,795,796,797,790,790,798,791,\n790,790,799,790,791,800,800,800,800,801,789,789,791,791,790,790,\n802,802,802,802,802,790,791,791,803,803,789,802,789,789,804,508,\n 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,\n805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,\n806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,\n\n/* block 65 */\n807,807,807, 65, 66,807,807,807,807, 58,789,789,196,196,196,196,\n 50, 50, 50, 50,808,809,809,809,809,809, 50, 50,810,810,810,810,\n 50,810,810, 50,810,810, 50,810, 45,809,809,810,810,810, 50, 45,\n810,810, 45, 45, 45, 45,810,810, 45, 45, 45, 45,810,810,810,810,\n810,810,810,810,810,810,810,810,810,810,810,810,810,810, 50, 50,\n810,810, 50,810, 50,810,810,810,810,810,810,810, 45,810, 45, 45,\n 45, 45, 45, 45,810,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n\n/* block 66 */\n 50, 50,811, 50, 50, 50, 50,811,812,812,812,812,812,812, 50, 50,\n 50, 50,813, 53, 50,812, 50, 50, 50, 50, 50, 50, 50, 50,811,812,\n812,812,812, 50,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812, 50, 50,\n 50, 50, 50,812, 50,812, 50, 50, 50, 50, 50, 50,812, 50, 50, 50,\n 50, 50,812,812,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50,812,812,812,812,812,812,812,812, 50, 50,812,812,\n812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,\n\n/* block 67 */\n812,812,812,812,812,812,812,812,812,812,812,812, 50, 50, 50,812,\n812,812,812, 50, 50, 50, 50, 50,812, 50, 50, 50, 50, 50, 50, 50,\n 50, 50,812,812, 50, 50,812, 50,812,812, 50,812, 50, 50, 50, 50,\n812,812,812,812,812,812,812,812,812, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812,812, 50, 50,\n812,812, 50, 50, 50, 50,812,812,812,812,812,812,812,812,812,812,\n812,812,812,812,812,812,812,812,812,812,812,812,812,812, 50, 50,\n812,812,812,812,812, 50,812,812, 50, 50,812,812,812,812,812, 50,\n\n/* block 68 */\n 45, 45, 45, 45, 45, 45, 45, 45,814,815,814,815, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, 45, 45, 45,\n 50, 50, 45, 45, 45, 45, 45, 45, 47,817,818, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45,819,819,819,819,819,819,819,819,819,819,\n819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,\n819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,\n819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,\n819,819,819,819,819,819,819,819,819,819,819, 45, 50, 45, 45, 45,\n\n/* block 69 */\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45,819, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50,810,810, 45,810, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47,\n810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50,\n 50, 50,810, 45, 45, 45, 45, 45, 45,816,816,816,816, 47, 47, 47,\n816, 47, 47,816, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45,\n\n/* block 70 */\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,820,820,820,820,820,820,\n820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,820,820,820,820,820,\n820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,\n 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,\n 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,\n\n/* block 71 */\n 58, 58, 58, 58, 58, 58, 58, 58,821,821,821,821,821,821,821,821,\n821,821,821,821,821,821,821,821,821,821,821,821,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,822,822,822,822,822,822,822,822,822,822,\n822,822,823,822,822,822,822,822,822,822,822,822,822,822,822,822,\n824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,\n824,824,824,824,824,824,824,824,824,824, 58, 58, 58, 58, 58, 58,\n 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,\n\n/* block 72 */\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n\n/* block 73 */\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n810,810, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45,810,810,\n810,810,810,810,810,810,809, 50, 45, 45, 45, 45,810,810,810,810,\n809, 50, 45, 45, 45, 45,810,810, 45, 45,810,810, 45, 45, 45,810,\n810,810,810,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45,810, 45,810, 45, 45,810,810,810,810,810,810, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50,808,808,825,825, 50,\n\n/* block 74 */\n 47, 47, 47, 47, 47,810,810, 45, 45, 45, 45, 45, 45, 45, 47, 45,\n 45, 47, 45, 45,816,816, 45, 45, 47, 45, 45, 45, 45,826, 45, 45,\n 47, 45, 47, 47, 45, 45, 47, 45, 45, 45, 47, 45, 45, 45, 47, 47,\n 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45,\n809, 45,809, 45, 45, 45, 45, 45,816,816,816,816,816,816,816,816,\n816,816,816,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47,\n809,810,810,809, 45, 47, 47, 45, 47, 45, 45, 45, 45,810,810, 50,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 47,816,\n\n/* block 75 */\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 47,816, 47, 47, 47, 47, 45, 47, 45, 47, 47, 45, 45, 45,\n 47,816, 45, 45, 45, 45, 45, 47, 45, 45,816,816,819, 45, 45, 45,\n 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45,\n 45, 45, 45, 45,816,816, 45, 45, 47, 45, 45, 45, 45, 45,816, 47,\n 45, 47, 45, 47,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 47,816, 45, 45, 45, 45, 45,\n 47, 47,816,816, 47,816, 45, 47, 47,826,816, 45, 45,816, 45, 45,\n\n/* block 76 */\n 45, 45, 47, 45, 45,816, 45, 45, 47, 47,827,827,826,826, 45, 47,\n 45, 45, 47, 45, 47, 45, 47, 45, 45, 45, 45, 45, 45, 47, 45, 45,\n 45, 47, 45, 45, 45, 45, 45, 45,816, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 47, 45, 45, 47, 45, 45, 45, 45,816, 45,816, 45,\n 45, 45, 45,816,816,816, 45,816, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 47, 47, 45, 45, 45,764,765,764,765,764,765,764,765,\n764,765,764,765,764,765, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,\n\n/* block 77 */\n 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,\n 58, 58, 58, 58, 45,816,816,816, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,\n 50, 50, 50,812,812,814,815, 50,812,812, 50,812, 50,812, 50, 50,\n 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50,812,812,812, 50,\n 50, 50,812,812,812,812,814,815,814,815,814,815,814,815,814,815,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n\n/* block 78 */\n828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,\n828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,\n828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,\n828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,\n828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,\n828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,\n828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,\n828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,\n\n/* block 79 */\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50,808,808, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n\n/* block 80 */\n 50, 50, 50,814,815,814,815,814,815,814,815,814,815,814,815,814,\n815,814,815,814,815,814,815,814,815, 50, 50,812, 50, 50, 50, 50,\n812, 50, 50,812,812,812, 50, 50,812,812,812,812,812,812,812,812,\n 50, 50, 50, 50, 50, 50, 50, 50,812, 50, 50, 50, 50, 50, 50, 50,\n812,812, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50,812,\n812,812,812, 50,812,812, 50, 50,814,815,814,815, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50,812, 50, 50,812,812, 50, 50,814,815, 50, 50,\n\n/* block 81 */\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812, 50,\n 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50,812,812, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812,812,812,812,\n\n/* block 82 */\n812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,\n812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,\n812,812,812, 50, 50, 50,812,812,812,812,812,812,812,812, 50,812,\n812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,\n812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,\n812,812,812,812,812,812,812, 50, 50, 50, 50, 50, 50, 50,812, 50,\n 50, 50, 50,812,812,812, 50, 50, 50, 50, 50, 50,812,812,812, 50,\n 50, 50, 50, 50, 50, 50, 50,812,812,812,812, 50, 50, 50, 50, 50,\n\n/* block 83 */\n 45, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,\n 50, 50, 50, 50, 50, 45, 45, 50, 50, 50, 50, 50, 50, 45, 45, 45,\n816, 45, 45, 45, 45,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45,820,820, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n\n/* block 84 */\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,829, 45,\n\n/* block 85 */\n830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,\n830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,\n830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,\n831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,\n831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,\n831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,\n 65, 66,832,833,834,835,836, 65, 66, 65, 66, 65, 66,837,838,839,\n840, 70, 65, 66, 70, 65, 66, 70, 70, 70, 70, 70,777,783,841,841,\n\n/* block 86 */\n246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247,\n246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247,\n246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247,\n246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247,\n246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247,\n246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247,\n246,247,246,247,842,843,843,843,843,843,843,246,247,246,247,844,\n844,844,246,247,196,196,196,196,196,845,845,845,846,847,846,846,\n\n/* block 87 */\n848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,\n848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,\n848,848,848,848,848,848,196,848,196,196,196,196,196,848,196,196,\n849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,\n849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,\n849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,\n849,849,849,849,849,849,849,849,196,196,196,196,196,196,196,850,\n851,196,196,196,196,196,196,196,196,196,196,196,196,196,196,852,\n\n/* block 88 */\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,\n531,531,531,531,531,531,531,196,196,196,196,196,196,196,196,196,\n531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196,\n531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196,\n531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196,\n531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196,\n853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,\n853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,\n\n/* block 89 */\n 43, 43,854,855,854,855, 43, 43, 43,854,855, 43,854,855, 43, 43,\n 43, 43, 43, 43, 43, 43, 43,856, 43, 43,740, 43,854,855, 43, 43,\n854,855,764,765,764,765,764,765,764,765, 43, 43, 43, 43,760,857,\n858,859, 43, 43, 43, 43, 43, 43, 43, 43,740,740,860, 43, 43, 43,\n740,861,744,862, 43, 43, 43, 43, 43, 43, 43, 43,863, 43,863,863,\n 45, 45, 43,760,760,764,765,764,765,764,765,764,765,740,820,820,\n820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,\n820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,\n\n/* block 90 */\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,196,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 91 */\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n\n/* block 92 */\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,\n864,864,864,864,864,864,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n865,865,866,866,865,865,865,865,865,865,865,865,865,865,867,867,\n\n/* block 93 */\n735,868,869,870,789,871,872,873,874,875,876,877,878,879,878,879,\n880,881, 45,882,880,881,880,881,880,881,880,881,883,884,885,885,\n 45,873,873,873,873,873,873,873,873,873,886,886,886,886,887,887,\n888,889,889,889,889,889,789,890,873,873,873,891,892,893,894,894,\n196,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n\n/* block 94 */\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,196,196,896,896,897,897,898,898,895,\n899,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,\n900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,\n900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,\n900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,\n900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,\n900,900,900,900,900,900,900,900,900,900,900,901,902,903,903,900,\n\n/* block 95 */\n196,196,196,196,196,904,904,904,904,904,904,904,904,904,904,904,\n904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,\n904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,\n196,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,\n905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,\n905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,\n905,905,905,905,906,905,905,905,905,905,905,905,905,905,905,905,\n905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,\n\n/* block 96 */\n905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,196,\n907,907,908,908,908,908,907,907,907,907,907,907,907,907,907,907,\n904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,\n904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,\n894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,\n894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,\n894,894,894,894,894,894,196,196,196,196,196,196,196,196,196,865,\n900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,\n\n/* block 97 */\n909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,\n909,909,909,909,909,909,909,909,909,909,909,909,909,910,910,196,\n908,908,908,908,908,908,908,908,908,908,907,907,907,907,907,907,\n907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,\n907,907,907,907,907,907,907,907,911,911,911,911,911,911,911,911,\n789, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,\n909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,\n909,909,909,909,909,909,909,909,909,909,909,909,910,910,910,508,\n\n/* block 98 */\n908,908,908,908,908,908,908,908,908,908,907,907,907,907,907,907,\n907,907,907,907,907,907,907,912,907,912,907,907,907,907,907,907,\n907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,\n907, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,\n907,907,907,907,907,907,907,907,907,907,907,907,789,789,789,789,\n913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,\n913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,\n913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,907,\n\n/* block 99 */\n913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,\n913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,\n913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,\n913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,\n913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,\n913,913,913,913,913,913,913,913,907,907,907,907,907,907,907,907,\n907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,\n907,508,508,508,508,508,508,789,789,789,789,907,907,907,907,907,\n\n/* block 100 */\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,789,789,\n907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,\n907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,789,\n\n/* block 101 */\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n\n/* block 102 */\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n\n/* block 103 */\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,916,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n\n/* block 104 */\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,\n\n/* block 105 */\n915,915,915,915,915,915,915,915,915,915,915,915,915,196,196,196,\n917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,\n917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,\n917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,\n917,917,917,917,917,917,917,196,196,196,196,196,196,196,196,196,\n918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,\n918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,\n918,918,918,918,918,918,918,918,919,919,919,919,919,919,920,921,\n\n/* block 106 */\n922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,\n922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,\n922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,\n922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,\n922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,\n922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,\n922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,\n922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,\n\n/* block 107 */\n922,922,922,922,922,922,922,922,922,922,922,922,923,924,925,925,\n922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,\n926,926,926,926,926,926,926,926,926,926,922,922,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n275,276,275,276,275,276,275,276,275,276,927,928,275,276,275,276,\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,929,281,\n283,283,283,930,853,853,853,853,853,853,853,853,931,931,930,932,\n\n/* block 108 */\n275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276,\n275,276,275,276,275,276,275,276,275,276,275,276,933,933,853,853,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,935,935,935,935,935,935,935,935,935,935,\n936,936,937,938,939,939,939,938,196,196,196,196,196,196,196,196,\n\n/* block 109 */\n940,940,940,940,940,940,940,940, 46, 46, 46, 46, 46, 46, 46, 46,\n 46, 46, 46, 46, 46, 46, 46,151,151,151,151,151,151,151,151,151,\n 46, 46, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 70, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n783, 70, 70, 70, 70, 70, 70, 70, 70, 65, 66, 65, 66,941, 65, 66,\n\n/* block 110 */\n 65, 66, 65, 66, 65, 66, 65, 66,151,942,942, 65, 66,943, 70, 93,\n 65, 66, 65, 66,944, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,945,946,947,948,945, 70,\n949,950,951,952, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,\n 65, 66, 65, 66,953,954,955, 65, 66, 65, 66,956, 65, 66, 65, 66,\n 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,957,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,149,783,783,783, 65, 66, 93,149,149, 70, 93, 93, 93, 93, 93,\n\n/* block 111 */\n958,958,959,958,958,958,960,958,958,958,958,959,958,958,958,958,\n958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,\n958,958,958,961,961,959,959,961,962,962,962,962,960,196,196,196,\n963,963,963,964,964,964,965,965,966,967,196,196,196,196,196,196,\n968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,\n968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,\n968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,\n968,968,968,968,969,969,970,970,196,196,196,196,196,196,196,196,\n\n/* block 112 */\n971,971,972,972,972,972,972,972,972,972,972,972,972,972,972,972,\n972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,\n972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,\n972,972,972,972,971,971,971,971,971,971,971,971,971,971,971,971,\n971,971,971,971,973,974,196,196,196,196,196,196,196,196,975,975,\n976,976,976,976,976,976,976,976,976,976,196,196,196,196,196,196,\n376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,\n376,977,374,978,374,374,374,374,383,383,383,374,383,374,374,372,\n\n/* block 113 */\n979,979,979,979,979,979,979,979,979,979,980,980,980,980,980,980,\n980,980,980,980,980,980,980,980,980,980,980,980,980,980,980,980,\n980,980,980,980,980,980,981,981,981,981,981,982,982,982,983,984,\n985,985,985,985,985,985,985,985,985,985,985,985,985,985,985,985,\n985,985,985,985,985,985,985,986,986,986,986,986,986,986,986,986,\n986,986,987,988,196,196,196,196,196,196,196,196,196,196,196,989,\n526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,\n526,526,526,526,526,526,526,526,526,526,526,526,526,196,196,196,\n\n/* block 114 */\n990,990,990,991,992,992,992,992,992,993,993,993,992,992,992,993,\n993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,\n993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,\n993,993,993,994,991,991,990,990,990,990,991,991,990,990,991,991,\n995,996,996,996,996,996,996,997,998,998,996,996,996,996,196,999,\n1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,196,196,196,196,996,996,\n509,509,509,509,509,519,1001,509,509,509,509,509,509,509,509,509,\n520,520,520,520,520,520,520,520,520,520,509,509,509,509,509,196,\n\n/* block 115 */\n1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,\n1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,\n1002,1002,1002,1002,1002,1002,1002,1002,1002,1003,1003,1003,1003,1003,1003,1004,\n1004,1003,1003,1004,1004,1003,1003,196,196,196,196,196,196,196,196,196,\n1002,1002,1002,1003,1002,1002,1002,1002,1002,1002,1002,1002,1003,1004,196,196,\n1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,196,196,1006,1007,1007,1007,\n509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,\n1001,509,509,509,1008,1008,1008,521,521,521,509,518,519,518,509,509,\n\n/* block 116 */\n1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,\n1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,\n1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,\n1010,1009,1010,1010,1010,1011,1011,1010,1010,1011,1009,1011,1011,1009,1010,1012,\n1013,1012,1013,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,1009,1009,1014,1015,1016,\n1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1018,1019,1019,1018,1018,\n1020,1020,1021,1022,1022,1018,1023,196,196,196,196,196,196,196,196,196,\n\n/* block 117 */\n196,531,531,531,531,531,531,196,196,531,531,531,531,531,531,196,\n196,531,531,531,531,531,531,196,196,196,196,196,196,196,196,196,\n531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196,\n 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,\n 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,\n 70, 70, 70,1024, 70, 70, 70, 70, 70, 70, 70,942,149,149,149,149,\n 70, 70, 70, 70, 70,256, 70, 70, 70,149, 46, 46,196,196,196,196,\n1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,\n\n/* block 118 */\n1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,\n1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,\n1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,\n1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,\n1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,\n1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1021,1021,1021,1021,1021,\n1021,1021,1021,1018,1018,1019,1018,1018,1019,1018,1018,1020,1026,1023,196,196,\n1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,196,196,196,196,196,196,\n\n/* block 119 */\n1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n\n/* block 120 */\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,\n\n/* block 121 */\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n\n/* block 122 */\n1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,\n\n/* block 123 */\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n\n/* block 124 */\n1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n\n/* block 125 */\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n\n/* block 126 */\n1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,\n1029,1029,1029,1029,196,196,196,196,196,196,196,196,196,196,196,196,\n529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,\n529,529,529,529,529,529,529,196,196,196,196,530,530,530,530,530,\n530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,\n530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,\n530,530,530,530,530,530,530,530,530,530,530,530,196,196,196,196,\n\n/* block 127 */\n1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,\n1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,\n1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,\n1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,\n1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,\n1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,\n1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,\n1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,\n\n/* block 128 */\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n\n/* block 129 */\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n\n/* block 130 */\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,914,914,\n1032,914,1032,914,914,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,914,\n1032,914,1032,914,914,1032,1032,914,914,914,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n\n/* block 131 */\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 132 */\n709,709,709,709,709,1033,1034,196,196,196,196,196,196,196,196,196,\n196,196,196,292,292,292,292,292,196,196,196,196,196,303,299,303,\n303,303,303,303,303,303,303,303,303,1035,303,303,303,303,303,303,\n303,303,303,303,303,303,303,297,303,303,303,303,303,297,303,297,\n303,303,297,303,303,297,303,303,303,303,303,303,303,303,303,303,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n\n/* block 133 */\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,368,368,368,368,368,368,368,368,368,368,368,368,368,368,\n368,368,368,313,313,313,313,313,313,313,313,313,313,313,313,313,\n313,313,313,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n\n/* block 134 */\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,1036,1036,\n1036,1036,1036,1036,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n\n/* block 135 */\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n\n/* block 136 */\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,1037,1038,\n313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n\n/* block 137 */\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n313,313,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,313,313,313,313,313,313,313,313,\n1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,\n1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,\n319,319,1040,319,319,319,319,319,319,319,1036,1036,310,1041,313,313,\n\n/* block 138 */\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1043,\n1044,1044,1045,1046,1044,1045,1045,1047,1048,1044,196,196,196,196,196,196,\n176,176,176,176,176,176,176,176,176,176,176,176,176,176,931,931,\n1044,1049,1049,761,761,1047,1048,1047,1048,1047,1048,1047,1048,1047,1048,1047,\n1048,1050,1051,1050,1051,870,870,1047,1048,1044,1044,1044,1044,761,761,761,\n1052,199,1053,196,199,1054,1045,1045,1049,1055,1056,1055,1056,1055,1056,1057,\n1044,1058,1059,1060,1061,1061,802,196,1058,477,1057,1044,196,196,196,196,\n1036,319,1036,319,1036,338,1036,319,1036,319,1036,319,1036,319,1036,319,\n\n/* block 139 */\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,\n319,319,319,319,319,319,319,319,319,319,319,319,319,338,338, 51,\n\n/* block 140 */\n196,1045,1062,1057,477,1057,1044,1063,1055,1056,1044,1059,1052,1064,1053,1065,\n1066,1066,1066,1066,1066,1066,1066,1066,1066,1066,1054,199,1061,802,1061,1045,\n1044,1067,1067,1067,1067,1067,1067, 59, 59, 59, 59, 59, 59, 59, 59, 59,\n 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,1055,1058,1056,1068,761,\n 46,1069,1069,1069,1069,1069,1069, 62, 62, 62, 62, 62, 62, 62, 62, 62,\n 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,1055,802,1056,802,1055,\n1056,1070,1071,1072,1073,901,900,900,900,900,900,900,900,900,900,900,\n902,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,\n\n/* block 141 */\n900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,\n900,900,900,900,900,900,900,900,900,900,900,900,900,900,1074,1074,\n906,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,\n905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,196,\n196,196,905,905,905,905,905,905,196,196,905,905,905,905,905,905,\n196,196,905,905,905,905,905,905,196,196,905,905,905,196,196,196,\n477,477,802, 46,789,477,477,196,789,802,802,802,802,789,789,196,\n771,771,771,771,771,771,771,771,771,1075,1075,1075,789,789,1039,1039,\n\n/* block 142 */\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,1076,1076,1076,\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,\n1076,1076,1076,1076,1076,1076,1076,196,1076,1076,1076,1076,1076,1076,1076,1076,\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,1076,1076,196,1076,\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196,\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 143 */\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,\n1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196,196,196,196,\n\n/* block 144 */\n1077,1078,1079,196,196,196,196,1080,1080,1080,1080,1080,1080,1080,1080,1080,\n1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,\n1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,\n1080,1080,1080,1080,196,196,196,1081,1081,1081,1081,1081,1081,1081,1081,1081,\n1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,\n1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,\n1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,\n1082,1082,1082,1082,1082,1083,1083,1083,1083,1084,1084,1084,1084,1084,1084,1084,\n\n/* block 145 */\n1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1083,1083,1084,1085,1085,196,\n789,789,789,789,789,789,789,789,789,789,789,789,789,196,196,196,\n1084,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,189,196,196,\n\n/* block 146 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 147 */\n1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,\n1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,196,196,196,\n1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,\n1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,\n1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,\n1087,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1088,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,\n1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,196,196,196,196,\n\n/* block 148 */\n1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,\n1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,\n1091,1091,1091,1091,196,196,196,196,196,196,196,196,196,1090,1090,1090,\n1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,\n1092,1093,1092,1092,1092,1092,1092,1092,1092,1092,1093,196,196,196,196,196,\n1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,\n1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,\n1094,1094,1094,1094,1094,1094,1095,1095,1095,1095,1095,196,196,196,196,196,\n\n/* block 149 */\n1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,\n1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,196,1097,\n1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,\n1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,\n1098,1098,1098,1098,196,196,196,196,1098,1098,1098,1098,1098,1098,1098,1098,\n1099,1100,1100,1100,1100,1100,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 150 */\n1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,\n1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,\n1101,1101,1101,1101,1101,1101,1101,1101,1102,1102,1102,1102,1102,1102,1102,1102,\n1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,\n1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,\n1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,\n1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,\n1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,\n\n/* block 151 */\n1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,\n1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,196,\n1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,196,196,196,196,196,196,\n1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,\n1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,\n1106,1106,1106,1106,196,196,196,196,1107,1107,1107,1107,1107,1107,1107,1107,\n1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,\n1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,196,196,196,196,\n\n/* block 152 */\n1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,\n1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,\n1108,1108,1108,1108,1108,1108,1108,1108,196,196,196,196,196,196,196,196,\n1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,\n1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,\n1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,\n1109,1109,1109,1109,196,196,196,196,196,196,196,196,196,196,196,1110,\n1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,196,1111,1111,1111,1111,\n\n/* block 153 */\n1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,196,1111,1111,1111,1111,\n1111,1111,1111,196,1111,1111,196,1112,1112,1112,1112,1112,1112,1112,1112,1112,\n1112,1112,196,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,\n1112,1112,196,1112,1112,1112,1112,1112,1112,1112,196,1112,1112,196,196,196,\n1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,\n1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,\n1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,\n1113,1113,1113,1113,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 154 */\n1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,\n1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,\n1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,\n1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,\n1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,\n1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,\n1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,\n1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,\n\n/* block 155 */\n1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,\n1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,\n1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,\n1114,1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196,196,\n1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,\n1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196,196,196,\n1114,1114,1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 156 */\n149,1115,1115,149,149,149,196,149,149,149,149,149,149,149,149,149,\n149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,\n149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,\n149,196,149,149,149,149,149,149,149,149,149,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 157 */\n1116,1116,1116,1116,1116,1116,297,297,1116,297,1116,1116,1116,1116,1116,1116,\n1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,\n1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,\n1116,1116,1116,1116,1116,1116,297,1116,1116,297,297,297,1116,297,297,1116,\n1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,\n1117,1117,1117,1117,1117,1117,297,1118,1119,1119,1119,1119,1119,1119,1119,1119,\n1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,\n1120,1120,1120,1120,1120,1120,1120,1121,1121,1122,1122,1122,1122,1122,1122,1122,\n\n/* block 158 */\n1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,\n1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,297,\n297,297,297,297,297,297,297,1124,1124,1124,1124,1124,1124,1124,1124,1124,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,\n1125,1125,1125,297,1125,1125,297,297,297,297,297,1126,1126,1126,1126,1126,\n\n/* block 159 */\n1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,\n1127,1127,1127,1127,1127,1127,1128,1128,1128,1128,1128,1128,297,297,297,1129,\n1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,\n1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,297,297,297,297,297,1131,\n1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,\n1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n\n/* block 160 */\n1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,\n1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,\n1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,\n1134,1134,1134,1134,1134,1134,1134,1134,297,297,297,297,1135,1135,1134,1134,\n1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,\n297,297,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,\n1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,\n1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,\n\n/* block 161 */\n1136,1137,1137,1137,297,1137,1137,297,297,297,297,297,1137,1137,1137,1137,\n1136,1136,1136,1136,297,1136,1136,1136,297,1136,1136,1136,1136,1136,1136,1136,\n1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,\n1136,1136,1136,1136,1136,1136,297,297,1138,1138,1138,297,297,297,297,1139,\n1140,1140,1140,1140,1140,1140,1140,1140,1140,297,297,297,297,297,297,297,\n1141,1141,1141,1141,1141,1141,1142,1142,1141,297,297,297,297,297,297,297,\n1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,\n1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1144,1144,1145,\n\n/* block 162 */\n1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,\n1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1147,1147,1147,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n1148,1148,1148,1148,1148,1148,1148,1148,1149,1148,1148,1148,1148,1148,1148,1148,\n1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,\n1148,1148,1148,1148,1148,1150,1150,297,297,297,297,1151,1151,1151,1151,1151,\n1152,1152,1153,1152,1152,1152,1154,297,297,297,297,297,297,297,297,297,\n\n/* block 163 */\n1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,\n1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,\n1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,\n1155,1155,1155,1155,1155,1155,297,297,297,1156,1157,1157,1157,1157,1157,1157,\n1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,\n1158,1158,1158,1158,1158,1158,297,297,1159,1159,1159,1159,1159,1159,1159,1159,\n1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,\n1160,1160,1160,297,297,297,297,297,1161,1161,1161,1161,1161,1161,1161,1161,\n\n/* block 164 */\n1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,\n1162,1162,297,297,297,297,297,297,297,1163,1163,1163,1163,297,297,297,\n297,297,297,297,297,297,297,297,297,1164,1164,1164,1164,1164,1164,1164,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n\n/* block 165 */\n1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,\n1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,\n1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,\n1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,\n1165,1165,1165,1165,1165,1165,1165,1165,1165,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n\n/* block 166 */\n1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,\n1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,\n1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,\n1166,1166,1166,297,297,297,297,297,297,297,297,297,297,297,297,297,\n1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,\n1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,\n1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,\n1167,1167,1167,297,297,297,297,297,297,297,1168,1168,1168,1168,1168,1168,\n\n/* block 167 */\n1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,\n1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,\n1169,1169,1170,1170,1171,1171,1171,1171,338,338,338,338,338,338,338,338,\n1172,1172,1172,1172,1172,1172,1172,1172,1172,1172,338,338,338,338,338,338,\n1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1174,1174,1174,1174,1175,1174,\n1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,\n1176,1176,1176,1176,1176,1176,297,297,297,1177,1178,1179,1179,1179,1180,1181,\n1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,\n\n/* block 168 */\n1182,1182,1182,1182,1182,1182,297,297,297,297,297,297,297,297,1183,1183,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n\n/* block 169 */\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,\n1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,297,\n\n/* block 170 */\n1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,\n1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,\n1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,297,1186,1186,1187,297,297,\n1185,1185,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n338,338,319,319,319,1188,319,319,338,338,338,338,338,338,338,338,\n1189,313,313,313,313,313,313,313,313,338,338,338,338,338,338,338,\n338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,\n338,338,338,338,338,338,338,338,338,338,324,314,314,331,331,331,\n\n/* block 171 */\n1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,\n1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1191,1191,1191,\n1191,1191,1191,1191,1191,1191,1191,1190,297,297,297,297,297,297,297,297,\n1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,\n1192,1192,1192,1192,1192,1192,1193,1193,1193,1193,1193,1193,1193,1193,1193,1193,\n1193,1194,1194,1194,1194,1195,1195,1195,1195,1195,338,338,338,338,338,338,\n338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,\n1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,\n\n/* block 172 */\n1196,1196,1197,1197,1197,1197,1198,1198,1198,1198,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,\n1199,1199,1199,1199,1199,1200,1200,1200,1200,1200,1200,1200,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,\n1201,1201,1201,1201,1201,1201,1201,297,297,297,297,297,297,297,297,297,\n\n/* block 173 */\n1202,1203,1202,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,\n1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,\n1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,\n1204,1204,1204,1204,1204,1204,1204,1204,1203,1203,1203,1203,1203,1203,1203,1203,\n1203,1203,1203,1203,1203,1203,1205,1206,1206,1207,1207,1207,1207,1207,196,196,\n196,196,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,\n1208,1208,1208,1208,1208,1208,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,\n1205,1204,1204,1203,1203,1204,196,196,196,196,196,196,196,196,196,1210,\n\n/* block 174 */\n1211,1211,1212,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,\n1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,\n1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,\n1212,1212,1212,1211,1211,1211,1211,1212,1212,1214,1215,1216,1216,1217,1218,1218,\n1218,1218,1211,196,196,196,196,196,196,196,196,196,196,1217,196,196,\n1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,\n1219,1219,1219,1219,1219,1219,1219,1219,1219,196,196,196,196,196,196,196,\n1220,1220,1220,1220,1220,1220,1220,1220,1220,1220,196,196,196,196,196,196,\n\n/* block 175 */\n1221,1221,1221,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,\n1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,\n1222,1222,1222,1222,1222,1222,1222,1221,1221,1221,1221,1221,1223,1221,1221,1221,\n1221,1221,1221,1224,1224,196,1225,1225,1225,1225,1225,1225,1225,1225,1225,1225,\n1226,1227,1227,1227,1222,1223,1223,1222,196,196,196,196,196,196,196,196,\n1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,\n1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,\n1228,1228,1228,1229,1230,1230,1228,196,196,196,196,196,196,196,196,196,\n\n/* block 176 */\n1231,1231,1232,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,\n1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,\n1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,\n1233,1233,1233,1232,1232,1232,1231,1231,1231,1231,1231,1231,1231,1231,1231,1232,\n1234,1233,1235,1235,1233,1236,1236,1237,1237,1238,1239,1239,1239,1236,1232,1231,\n1240,1240,1240,1240,1240,1240,1240,1240,1240,1240,1233,1237,1233,1237,1236,1236,\n196,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,\n1241,1241,1241,1241,1241,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 177 */\n1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,\n1242,1242,196,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,\n1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1243,1243,1243,1244,\n1244,1244,1243,1243,1244,1245,1246,1247,1248,1248,1249,1248,1248,1250,1244,1242,\n1242,1244,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 178 */\n1251,1251,1251,1251,1251,1251,1251,196,1251,196,1251,1251,1251,1251,196,1251,\n1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,196,1251,\n1251,1251,1251,1251,1251,1251,1251,1251,1251,1252,196,196,196,196,196,196,\n1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,\n1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,\n1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1254,\n1255,1255,1255,1254,1254,1254,1254,1254,1254,1256,1257,196,196,196,196,196,\n1258,1258,1258,1258,1258,1258,1258,1258,1258,1258,196,196,196,196,196,196,\n\n/* block 179 */\n1259,1260,1261,1262,196,1263,1263,1263,1263,1263,1263,1263,1263,196,196,1263,\n1263,196,196,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,\n1263,1263,1263,1263,1263,1263,1263,1263,1263,196,1263,1263,1263,1263,1263,1263,\n1263,196,1263,1263,196,1263,1263,1263,1263,1263,196,1264,1265,1263,1266,1261,\n1259,1261,1261,1261,1261,196,196,1261,1261,196,196,1261,1261,1267,196,196,\n1263,196,196,196,196,196,196,1266,196,196,196,196,196,1268,1263,1263,\n1263,1263,1261,1261,196,196,1269,1269,1269,1269,1269,1269,1269,196,196,196,\n1269,1269,1269,1269,1269,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 180 */\n1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,196,1270,196,196,1270,196,\n1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,\n1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,\n1270,1270,1270,1270,1270,1270,196,1271,1272,1273,1273,1274,1274,1274,1274,1274,\n1274,196,1272,196,196,1272,196,1272,1272,1272,1273,196,1273,1273,1275,1276,\n1275,1277,1278,1279,1280,1280,196,1281,1281,196,196,196,196,196,196,196,\n196,1282,1282,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 181 */\n1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,\n1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,\n1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,\n1283,1283,1283,1283,1283,1284,1284,1284,1285,1285,1285,1285,1285,1285,1285,1285,\n1284,1284,1286,1285,1285,1284,1287,1283,1283,1283,1283,1288,1288,1289,1290,1290,\n1291,1291,1291,1291,1291,1291,1291,1291,1291,1291,1289,1289,196,1290,1292,1283,\n1283,1283,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 182 */\n1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,\n1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,\n1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,\n1294,1295,1295,1296,1296,1296,1296,1296,1296,1295,1296,1295,1295,1294,1295,1296,\n1296,1295,1297,1298,1293,1293,1299,1293,196,196,196,196,196,196,196,196,\n1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 183 */\n1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,\n1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,\n1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1302,\n1303,1303,1304,1304,1304,1304,196,196,1303,1303,1303,1303,1304,1304,1303,1305,\n1306,1307,1308,1308,1309,1309,1310,1310,1310,1308,1308,1308,1308,1308,1308,1308,\n1308,1308,1308,1308,1308,1308,1308,1308,1301,1301,1301,1301,1304,1304,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 184 */\n1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,\n1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,\n1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,\n1312,1312,1312,1313,1313,1313,1313,1313,1313,1313,1313,1312,1312,1313,1312,1314,\n1313,1315,1315,1316,1311,196,196,196,196,196,196,196,196,196,196,196,\n1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,196,196,196,196,196,196,\n580,580,580,580,580,580,580,580,580,580,580,580,580,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 185 */\n1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,\n1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,\n1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1319,1320,1319,1320,1320,\n1319,1319,1319,1319,1319,1319,1321,1322,1318,1323,196,196,196,196,196,196,\n1324,1324,1324,1324,1324,1324,1324,1324,1324,1324,196,196,196,196,196,196,\n520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,\n520,520,520,520,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 186 */\n1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,\n1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,196,196,1326,1327,1326,\n1328,1328,1326,1326,1326,1326,1327,1326,1326,1326,1326,1329,196,196,196,196,\n1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1331,1331,1332,1332,1332,1333,\n1325,1325,1325,1325,1325,1325,1325,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 187 */\n1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,\n1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,\n1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1335,1335,1335,1336,\n1336,1336,1336,1336,1336,1336,1336,1336,1335,1337,1338,1339,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 188 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,\n1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,\n1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,\n1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,\n1342,1342,1342,1342,1342,1342,1342,1342,1342,1342,1343,1343,1343,1343,1343,1343,\n1343,1343,1343,196,196,196,196,196,196,196,196,196,196,196,196,1344,\n\n/* block 189 */\n1345,1345,1345,1345,1345,1345,1345,196,196,1345,196,196,1345,1345,1345,1345,\n1345,1345,1345,1345,196,1345,1345,196,1345,1345,1345,1345,1345,1345,1345,1345,\n1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,\n1346,1347,1347,1347,1347,1347,196,1347,1347,196,196,1348,1348,1349,1350,1351,\n1347,1351,1347,1352,1353,1354,1353,196,196,196,196,196,196,196,196,196,\n1355,1355,1355,1355,1355,1355,1355,1355,1355,1355,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 190 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1356,1356,1356,1356,1356,1356,1356,1356,196,196,1356,1356,1356,1356,1356,1356,\n1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,\n1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,\n1356,1357,1357,1357,1358,1358,1358,1358,196,196,1358,1358,1357,1357,1357,1357,\n1359,1356,1360,1356,1357,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 191 */\n1361,1362,1362,1362,1362,1362,1362,1363,1363,1362,1362,1361,1361,1361,1361,1361,\n1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,\n1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,\n1361,1361,1361,1364,1365,1362,1362,1362,1362,1366,1367,1362,1362,1362,1362,1368,\n1368,1368,1369,1369,1368,1368,1368,1365,196,196,196,196,196,196,196,196,\n1370,1371,1371,1371,1371,1371,1371,1372,1372,1371,1371,1371,1370,1370,1370,1370,\n1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,\n1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,\n\n/* block 192 */\n1370,1370,1370,1370,1373,1373,1373,1373,1373,1373,1371,1371,1371,1371,1371,1371,\n1371,1371,1371,1371,1371,1371,1371,1372,1374,1375,1376,1377,1377,1378,1376,1376,\n1376,1379,1379,196,196,196,196,196,196,196,196,196,196,196,196,196,\n543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,\n1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,\n1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,\n1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,\n1380,1380,1380,1380,1380,1380,1380,1380,1380,196,196,196,196,196,196,196,\n\n/* block 193 */\n383,383,383,383,383,383,383,383,383,383,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1231,1232,1231,1231,1231,1232,1231,1232,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 194 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,\n1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,\n1381,1382,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,196,196,196,196,196,196,\n\n/* block 195 */\n1384,1384,1384,1384,1384,1384,1384,1384,1384,196,1384,1384,1384,1384,1384,1384,\n1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,\n1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1385,\n1386,1386,1386,1386,1386,1386,1386,196,1386,1386,1386,1386,1386,1386,1385,1387,\n1384,1388,1388,1389,1390,1390,196,196,196,196,196,196,196,196,196,196,\n1391,1391,1391,1391,1391,1391,1391,1391,1391,1391,1392,1392,1392,1392,1392,1392,\n1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,196,196,196,\n1393,1394,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,\n\n/* block 196 */\n1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,\n196,196,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,\n1396,1396,1396,1396,1396,1396,1396,1396,196,1397,1396,1396,1396,1396,1396,1396,\n1396,1397,1396,1396,1397,1396,1396,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 197 */\n1398,1398,1398,1398,1398,1398,1398,196,1398,1398,196,1398,1398,1398,1398,1398,\n1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,\n1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,\n1398,1399,1399,1399,1399,1399,1399,196,196,196,1399,196,1399,1399,196,1399,\n1399,1399,1400,1399,1401,1401,1402,1399,196,196,196,196,196,196,196,196,\n1403,1403,1403,1403,1403,1403,1403,1403,1403,1403,196,196,196,196,196,196,\n1404,1404,1404,1404,1404,1404,196,1404,1404,196,1404,1404,1404,1404,1404,1404,\n1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,\n\n/* block 198 */\n1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1405,1405,1405,1405,1405,196,\n1406,1406,196,1405,1405,1406,1405,1407,1404,196,196,196,196,196,196,196,\n1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,196,196,196,196,196,196,\n1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,\n1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,\n1409,1409,1409,1409,1409,1409,1409,1409,1409,1410,1409,1409,196,196,196,196,\n1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 199 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,\n1412,1412,1412,1413,1413,1414,1414,1415,1415,196,196,196,196,196,196,196,\n\n/* block 200 */\n1416,1416,1417,1418,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,\n1419,196,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,\n1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,\n1419,1419,1419,1419,1418,1418,1416,1416,1416,1416,1416,196,196,196,1418,1418,\n1416,1420,1421,1422,1422,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,\n1424,1424,1424,1424,1424,1424,1424,1424,1424,1424,1425,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 201 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n918,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,\n433,433,1426,433,1426,435,435,435,435,435,435,435,435,436,436,436,\n436,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,\n435,435,196,196,196,196,196,196,196,196,196,196,196,196,196,1427,\n\n/* block 202 */\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n\n/* block 203 */\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 204 */\n1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,\n1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,\n1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,\n1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,\n1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,\n1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,\n1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,196,\n1430,1430,1430,1430,1430,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 205 */\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,\n1428,1428,1428,1428,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 206 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,\n1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,\n1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,\n1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,\n1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,\n1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,\n1431,1432,1432,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 207 */\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n\n/* block 208 */\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,\n1435,1433,1433,1433,1433,1433,1433,1436,1436,1436,1436,1436,1436,1436,1436,1436,\n1436,1436,1436,1436,1436,1436,196,196,196,196,196,196,196,196,196,196,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n\n/* block 209 */\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,\n1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,196,196,196,196,196,\n\n/* block 210 */\n1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,\n1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,\n1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,\n1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,\n1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,\n1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,\n1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,\n1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,\n\n/* block 211 */\n1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,\n1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,\n1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,\n1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,\n1437,1437,1437,1437,1437,1437,1437,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 212 */\n1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,\n1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1439,1439,\n1439,1439,1439,1439,1439,1439,1439,1439,1439,1439,1440,1440,1440,1439,1439,1441,\n1442,1442,1442,1442,1442,1442,1442,1442,1442,1442,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 213 */\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n\n/* block 214 */\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,\n934,934,934,934,934,934,934,934,934,196,196,196,196,196,196,196,\n1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,\n1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,196,\n1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,196,196,196,196,1445,1445,\n1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,\n\n/* block 215 */\n1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,\n1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,\n1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,\n1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,196,\n1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,196,196,196,196,196,196,\n1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,\n1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,196,196,\n1449,1449,1449,1449,1449,1450,196,196,196,196,196,196,196,196,196,196,\n\n/* block 216 */\n1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,\n1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,\n1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,\n1452,1452,1452,1452,1452,1452,1452,1453,1453,1454,1455,1455,1456,1456,1456,1456,\n1457,1457,1458,1458,1453,1456,196,196,196,196,196,196,196,196,196,196,\n1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,196,1460,1460,1460,1460,1460,\n1460,1460,196,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,\n1451,1451,1451,1451,1451,1451,1451,1451,196,196,196,196,196,1451,1451,1451,\n\n/* block 217 */\n1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 218 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1461,1461,1461,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,\n1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,\n1462,1462,1462,1463,1462,1462,1462,1463,1463,1463,1463,1464,1464,1465,1466,1466,\n1467,1467,1467,1467,1467,1467,1467,1467,1467,1467,196,196,196,196,196,196,\n\n/* block 219 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,\n1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,\n1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,\n1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,\n\n/* block 220 */\n1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,\n1470,1470,1470,1470,1470,1470,1470,1471,1472,1473,1473,196,196,196,196,196,\n1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,\n1474,1474,1474,1474,1474,1474,1474,1474,1474,196,196,1475,1475,1475,1475,1475,\n1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,\n1475,1475,1475,1475,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 221 */\n1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,\n1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,\n1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,\n1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,\n1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,196,196,196,196,1477,\n1476,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,\n1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,\n1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,\n\n/* block 222 */\n1478,1478,1478,1478,1478,1478,1478,1478,196,196,196,196,196,196,196,1479,\n1479,1479,1479,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1481,1482,1483,871,1484,196,196,196,196,196,196,196,196,196,196,196,\n1485,1485,1486,1486,873,873,873,196,196,196,196,196,196,196,196,196,\n\n/* block 223 */\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n\n/* block 224 */\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n\n/* block 225 */\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,\n1488,1488,1488,1488,1488,1488,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,1488,\n\n/* block 226 */\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 227 */\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,\n1487,1487,1487,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 228 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1489,1489,1489,1489,196,1489,1489,1489,1489,1489,1489,1489,196,1489,1489,196,\n\n/* block 229 */\n900,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n\n/* block 230 */\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n\n/* block 231 */\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,\n900,900,900,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,895,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n895,895,895,196,196,900,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,900,900,900,900,196,196,196,196,196,196,196,196,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n\n/* block 232 */\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n\n/* block 233 */\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,\n1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,196,196,196,196,\n\n/* block 234 */\n1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,\n1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,\n1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,\n1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,\n1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,\n1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,\n1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196,196,196,\n1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196,\n\n/* block 235 */\n1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196,196,196,196,196,\n1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,1492,1493,1494,1495,\n1496,1496,1496,1496,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 236 */\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n\n/* block 237 */\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n1497,1497,1497,1497,1497,1497,1497,1497,1497,1497,789,789,789,196,196,196,\n\n/* block 238 */\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,196,196,196,196,196,196,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n802,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 239 */\n176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,\n176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,\n176,176,176,176,176,176,176,176,176,176,176,176,176,176,196,196,\n176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,\n176,176,176,176,176,176,176,196,196,196,196,196,196,196,196,196,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n\n/* block 240 */\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 241 */\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n\n/* block 242 */\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,196,196,196,196,196,196,196,196,196,196,\n\n/* block 243 */\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,196,196,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,1498,1498,176,176,176,508,508,508,1499,1499,1499,\n1499,1499,1499, 51, 51, 51, 51, 51, 51, 51, 51,176,176,176,176,176,\n\n/* block 244 */\n176,176,176,508,508,176,176,176,176,176,176,176,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,176,176,176,176,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,789,789,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 245 */\n1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,\n1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,\n1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,\n1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,\n1084,1084,1500,1500,1500,1084,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 246 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,\n911,911,911,911,196,196,196,196,196,196,196,196,196,196,196,196,\n911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,\n911,911,911,911,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 247 */\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,196,196,196,196,196,196,196,196,196,\n908,908,908,908,908,908,908,908,908,908,908,908,908,908,908,908,\n908,908,911,911,911,911,911,911,911,196,196,196,196,196,196,196,\n\n/* block 248 */\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791,\n791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791,\n791,791,791,791,790,790,790,790,790,790,790,790,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,791,791,\n791,791,791,791,791,196,803,803,791,791,791,791,791,791,791,791,\n791,791,791,791,791,791,791,791,790,790,790,790,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,\n\n/* block 249 */\n790,790,791,791,791,791,791,791,791,791,803,803,791,791,791,791,\n791,791,791,791,791,791,791,791,791,791,791,791,790,196,790,790,\n196,196,790,196,196,790,790,196,196,790,790,790,790,196,790,790,\n790,790,790,790,790,790,791,791,791,791,196,791,196,791,803,803,\n791,791,791,791,196,791,791,791,791,791,791,791,791,791,791,791,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791,\n791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791,\n\n/* block 250 */\n791,791,791,791,790,790,196,790,790,790,790,196,196,790,790,790,\n790,790,790,790,790,196,790,790,790,790,790,790,790,196,791,791,\n791,791,791,791,791,791,803,803,791,791,791,791,791,791,791,791,\n791,791,791,791,791,791,791,791,790,790,196,790,790,790,790,196,\n790,790,790,790,790,196,790,196,196,196,790,790,790,790,790,790,\n790,196,791,791,791,791,791,791,791,791,803,803,791,791,791,791,\n791,791,791,791,791,791,791,791,791,791,791,791,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,\n\n/* block 251 */\n790,790,790,790,790,790,791,791,791,791,791,791,791,791,803,803,\n791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791,\n791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791,\n791,791,791,791,790,790,790,790,790,790,790,790,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,791,791,\n791,791,791,791,791,791,803,803,791,791,791,791,791,791,791,791,\n\n/* block 252 */\n791,791,791,791,791,791,791,791,790,790,790,790,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,\n790,790,791,791,791,791,791,791,791,791,803,803,791,791,791,791,\n791,791,791,791,791,791,791,791,791,791,791,791,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,\n790,790,790,790,790,790,791,791,791,791,791,791,791,791,803,803,\n791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,\n\n/* block 253 */\n790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791,\n791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791,\n791,791,791,791,791,791,196,196,790,790,790,790,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,\n790,1501,791,791,791,791,791,791,791,791,791,791,791,791,791,791,\n791,791,791,791,791,791,791,791,791,791,791,1501,791,791,791,791,\n791,791,790,790,790,790,790,790,790,790,790,790,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,790,1501,791,791,791,791,\n\n/* block 254 */\n791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,\n791,791,791,791,791,1501,791,791,791,791,791,791,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,\n790,790,790,790,790,1501,791,791,791,791,791,791,791,791,791,791,\n791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,1501,\n791,791,791,791,791,791,790,790,790,790,790,790,790,790,790,790,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,1501,\n791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,\n\n/* block 255 */\n791,791,791,791,791,791,791,791,791,1501,791,791,791,791,791,791,\n790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,\n790,790,790,790,790,790,790,790,790,1501,791,791,791,791,791,791,\n791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,\n791,791,791,1501,791,791,791,791,791,791,790,791,196,196,1502,1502,\n1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,\n1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,\n1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,\n\n/* block 256 */\n1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,\n1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,\n1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,\n1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,\n1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,\n1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,\n1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,\n1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,\n\n/* block 257 */\n1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,\n1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,\n1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,\n1504,1504,1504,1504,1504,1504,1504,1503,1503,1503,1503,1504,1504,1504,1504,1504,\n1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,\n1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,\n1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1503,1503,1503,\n1503,1503,1503,1503,1503,1504,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,\n\n/* block 258 */\n1503,1503,1503,1503,1504,1503,1503,1505,1506,1505,1505,1507,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,1504,1504,1504,1504,1504,\n196,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 259 */\n 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 93, 70, 70, 70, 70, 70,\n 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,702, 70, 70, 70, 70,196,\n196,196,196,196,196, 70, 70, 70, 70, 70, 70,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 260 */\n1508,1508,1508,1508,1508,1508,1508,196,1508,1508,1508,1508,1508,1508,1508,1508,\n1508,1508,1508,1508,1508,1508,1508,1508,1508,196,196,1508,1508,1508,1508,1508,\n1508,1508,196,1508,1508,196,1508,1508,1508,1508,1508,196,196,196,196,196,\n933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,\n933,933,933,933,933,933,933,933,933,933,933,933,1509,1509,933,933,\n933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,\n933,933,933,933,933,933,933,933,1509,933,933,933,933,933,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 261 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,853,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 262 */\n1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,\n1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,\n1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,196,196,196,\n1511,1511,1511,1511,1511,1511,1511,1512,1512,1512,1512,1512,1513,1513,196,196,\n1514,1514,1514,1514,1514,1514,1514,1514,1514,1514,196,196,196,196,1510,1515,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 263 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,\n1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1517,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,\n1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,\n1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1519,1519,1519,1519,\n1520,1520,1520,1520,1520,1520,1520,1520,1520,1520,196,196,196,196,196,1521,\n\n/* block 264 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,\n1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1523,1524,1524,1524,1524,\n1525,1525,1525,1525,1525,1525,1525,1525,1525,1525,196,196,196,196,196,196,\n\n/* block 265 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,\n1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1527,1528,\n1526,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,196,196,196,196,1530,\n\n/* block 266 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,\n1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,196,\n1531,1531,1531,1532,1531,1531,1532,1531,1531,1531,1531,1531,1531,1531,1532,1532,\n1531,1531,1531,1531,1531,1532,196,196,196,196,196,196,196,196,1531,1533,\n\n/* block 267 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n531,531,531,531,531,531,531,196,531,531,531,531,196,531,531,196,\n531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,196,\n\n/* block 268 */\n1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,\n1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,\n1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,\n1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,\n1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,\n1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,\n1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,\n1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,\n\n/* block 269 */\n1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,\n1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,\n1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,\n1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,\n1534,1534,1534,1534,1534,297,297,1535,1535,1535,1535,1535,1535,1535,1535,1535,\n1536,1536,1536,1536,1536,1536,1536,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n\n/* block 270 */\n1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,\n1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,\n1537,1537,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,\n1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,\n1538,1538,1538,1538,1539,1539,1539,1540,1541,1541,1541,1542,297,297,297,297,\n1543,1543,1543,1543,1543,1543,1543,1543,1543,1543,297,297,297,297,1544,1544,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n\n/* block 271 */\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n\n/* block 272 */\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n338,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,\n\n/* block 273 */\n1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,\n1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,\n1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1546,1545,1545,1545,\n1547,1545,1545,1545,1545,338,338,338,338,338,338,338,338,338,338,338,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n\n/* block 274 */\n338,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,\n1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,\n1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1546,1545,\n1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,338,338,\n338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,\n\n/* block 275 */\n1548,1548,1548,1548,338,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,\n1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,\n338,1548,1548,338,1548,338,338,1548,338,1548,1548,1548,1548,1548,1548,1548,\n1548,1548,1548,338,1548,1548,1548,1548,338,1548,338,1548,338,338,338,338,\n338,338,1548,338,338,338,338,1548,338,1548,338,1548,338,1548,1548,1548,\n338,1548,1548,338,1548,338,338,1548,338,1548,338,1548,338,1548,338,1548,\n338,1548,1548,338,1548,338,338,1548,1548,1548,1548,338,1548,1548,1548,1548,\n1548,1548,1548,338,1548,1548,1548,1548,338,1548,1548,1548,1548,338,1548,338,\n\n/* block 276 */\n1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,1548,1548,1548,1548,1548,\n1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,338,338,338,\n338,1548,1548,1548,338,1548,1548,1548,1548,1548,338,1548,1548,1548,1548,1548,\n1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,338,338,338,\n338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,\n338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,\n338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,\n307,307,338,338,338,338,338,338,338,338,338,338,338,338,338,338,\n\n/* block 277 */\n789,789,789,789,1549,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n\n/* block 278 */\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550,\n1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,1549,\n1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n\n/* block 279 */\n821,821,821,821,821,821,821,821,821,821,821, 58, 58,789,789,789,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,789,\n1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,\n1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,508,508,508,508,508,508,\n1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,\n1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,789,789,789,789,789,789,\n1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552,\n\n/* block 280 */\n1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,508,508,508,508,1553,508,\n508,1553,1553,1553,1553,1553,1553,1553,1553,1553,1553,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,789,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,\n1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,\n\n/* block 281 */\n1555,1553,1556,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n508,508,508,508,508,508,508,508,508,508,1553,508,508,508,508,508,\n508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,1553,\n508,508,1553,1553,1553,1553,1553,1556,1553,1553,1553,508,1550,1550,1550,1550,\n508,508,508,508,508,508,508,508,508,1550,1550,1550,1550,1550,1550,1550,\n1557,1557,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n\n/* block 282 */\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n\n/* block 283 */\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,793,789,789,793,793,793,793,793,793,793,793,793,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,793,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793,1549,1549,\n\n/* block 284 */\n1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,789,789,793,793,789,793,793,793,789,789,793,793,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1558,1558,1558,1549,1549,1558,1549,1549,1558,1559,1559,793,793,1549,\n1549,1549,1549,1549,793,793,793,793,793,793,793,793,793,793,793,793,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,789,789,793,1549,793,789,793,1549,1549,1549,1560,1560,1560,1560,1560,\n\n/* block 285 */\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793,\n1549,793,1558,1558,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,\n1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,\n1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,1549,1549,1558,1549,1549,1549,\n\n/* block 286 */\n1549,1558,1558,1558,1549,1558,1558,1558,1549,1549,1549,1549,1549,1549,1549,1558,\n1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793,789,1549,\n\n/* block 287 */\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,789,789,\n789,789,789,789,789,789,789,789,789,793,793,1549,1549,1549,1549,789,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,789,789,789,789,789,789,789,793,\n793,789,789,793,1559,1559,793,793,793,793,1558,789,789,789,789,789,\n\n/* block 288 */\n789,789,789,789,789,789,789,793,789,789,793,793,793,793,789,789,\n1559,789,789,789,789,1558,1558,789,789,789,789,789,789,789,789,789,\n789,789,789,789,1549,793,789,789,793,789,789,789,789,789,789,789,\n789,793,793,789,789,789,789,789,789,789,789,789,793,789,789,789,\n789,789,793,793,793,789,789,789,789,789,789,789,789,789,789,789,\n789,793,793,793,789,789,789,789,789,789,789,789,793,793,793,789,\n789,793,789,793,789,789,789,789,793,789,789,789,789,789,789,793,\n789,789,789,793,789,789,789,789,789,789,793,1549,1549,1549,1549,1549,\n\n/* block 289 */\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1558,1558,1558,1549,1549,1549,1558,1558,1558,1558,1558,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n\n/* block 290 */\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1558,1558,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1558,1549,1549,1549,1549,1549,789,789,789,789,789,793,1558,793,793,793,\n1549,1549,1549,789,789,1549,1549,1549,1549,1550,1550,1550,1549,1549,1549,1549,\n793,793,793,793,793,793,789,789,789,793,789,1549,1549,1550,1550,1550,\n793,789,789,793,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,\n\n/* block 291 */\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1550,\n1549,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n\n/* block 292 */\n789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,\n789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n\n/* block 293 */\n789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,\n789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,\n789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n802,802,802,802,802,802,802,802,802,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n\n/* block 294 */\n789,789,789,789,789,789,789,789,789,789,789,789,1558,1549,1549,1558,\n1549,1549,1549,1549,1549,1549,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558,\n1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,789,1558,1558,1558,1549,\n1549,1549,1549,1549,1549,1549,789,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,\n\n/* block 295 */\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1561,1561,1561,1561,1549,1558,1558,1549,1558,1558,1549,1558,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1558,1558,1558,\n1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n\n/* block 296 */\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,\n\n/* block 297 */\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,\n1549,1549,1549,1558,1558,1558,1549,1550,1549,1550,1550,1550,1550,1549,1549,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1549,\n1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1550,1549,\n1558,1558,1558,1558,1558,1558,1558,1558,1558,1550,1550,1550,1550,1550,1550,1550,\n\n/* block 298 */\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,196,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,\n1497,1497,1497,1497,1497,1497,1497,1497,1497,1497,789,196,196,196,196,196,\n\n/* block 299 */\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,\n1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1039,1039,\n\n/* block 300 */\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 301 */\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n\n/* block 302 */\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n\n/* block 303 */\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n\n/* block 304 */\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 305 */\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,\n1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n\n/* block 306 */\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,\n196,196,196,196,196,196,196,196,196,196,196,196,196,196,1039,1039,\n\n/* block 307 */\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,196,196,196,196,196,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n\n/* block 308 */\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,\n914,914,914,914,914,914,914,914,914,914,196,196,196,196,196,196,\n\n/* block 309 */\n771,776,771,771,771,771,771,771,771,771,771,771,771,771,771,771,\n771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,\n1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,\n1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,\n1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,\n1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,\n1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,\n1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,\n\n/* block 310 */\n771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,\n771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,\n771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,\n771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,\n771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,\n771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,\n771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,\n771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,\n\n/* block 311 */\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n\n/* block 312 */\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,\n771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,\n\n/* block 313 */\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,\n1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1039,1039,\n};\n\n#if UCD_BLOCK_SIZE != 128\n#error Please correct UCD_BLOCK_SIZE in pcre2_internal.h\n#endif\n#endif  /* SUPPORT_UNICODE */\n\n#endif  /* PCRE2_PCRE2TEST */\n\n/* End of pcre2_ucd.c */\n"
  },
  {
    "path": "src/pcre2_ucp.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2022 University of Cambridge\n\nThis module is auto-generated from Unicode data files. DO NOT EDIT MANUALLY!\nInstead, modify the maint/GenerateUcpHeader.py script and run it to generate\na new version of this code.\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#ifndef PCRE2_UCP_H_IDEMPOTENT_GUARD\n#define PCRE2_UCP_H_IDEMPOTENT_GUARD\n\n/* This file contains definitions of the Unicode property values that are\nreturned by the UCD access macros and used throughout PCRE2.\n\nIMPORTANT: The specific values of the first two enums (general and particular\ncharacter categories) are assumed by the table called catposstab in the file\npcre2_auto_possess.c. They are unlikely to change, but should be checked after\nan update. */\n\n/* These are the general character categories. */\n\nenum {\n  ucp_C,\n  ucp_L,\n  ucp_M,\n  ucp_N,\n  ucp_P,\n  ucp_S,\n  ucp_Z,\n};\n\n/* These are the particular character categories. */\n\nenum {\n  ucp_Cc,    /* Control */\n  ucp_Cf,    /* Format */\n  ucp_Cn,    /* Unassigned */\n  ucp_Co,    /* Private use */\n  ucp_Cs,    /* Surrogate */\n  ucp_Ll,    /* Lower case letter */\n  ucp_Lm,    /* Modifier letter */\n  ucp_Lo,    /* Other letter */\n  ucp_Lt,    /* Title case letter */\n  ucp_Lu,    /* Upper case letter */\n  ucp_Mc,    /* Spacing mark */\n  ucp_Me,    /* Enclosing mark */\n  ucp_Mn,    /* Non-spacing mark */\n  ucp_Nd,    /* Decimal number */\n  ucp_Nl,    /* Letter number */\n  ucp_No,    /* Other number */\n  ucp_Pc,    /* Connector punctuation */\n  ucp_Pd,    /* Dash punctuation */\n  ucp_Pe,    /* Close punctuation */\n  ucp_Pf,    /* Final punctuation */\n  ucp_Pi,    /* Initial punctuation */\n  ucp_Po,    /* Other punctuation */\n  ucp_Ps,    /* Open punctuation */\n  ucp_Sc,    /* Currency symbol */\n  ucp_Sk,    /* Modifier symbol */\n  ucp_Sm,    /* Mathematical symbol */\n  ucp_So,    /* Other symbol */\n  ucp_Zl,    /* Line separator */\n  ucp_Zp,    /* Paragraph separator */\n  ucp_Zs,    /* Space separator */\n};\n\n/* These are Boolean properties. */\n\nenum {\n  ucp_ASCII,\n  ucp_ASCII_Hex_Digit,\n  ucp_Alphabetic,\n  ucp_Bidi_Control,\n  ucp_Bidi_Mirrored,\n  ucp_Case_Ignorable,\n  ucp_Cased,\n  ucp_Changes_When_Casefolded,\n  ucp_Changes_When_Casemapped,\n  ucp_Changes_When_Lowercased,\n  ucp_Changes_When_Titlecased,\n  ucp_Changes_When_Uppercased,\n  ucp_Dash,\n  ucp_Default_Ignorable_Code_Point,\n  ucp_Deprecated,\n  ucp_Diacritic,\n  ucp_Emoji,\n  ucp_Emoji_Component,\n  ucp_Emoji_Modifier,\n  ucp_Emoji_Modifier_Base,\n  ucp_Emoji_Presentation,\n  ucp_Extended_Pictographic,\n  ucp_Extender,\n  ucp_Grapheme_Base,\n  ucp_Grapheme_Extend,\n  ucp_Grapheme_Link,\n  ucp_Hex_Digit,\n  ucp_IDS_Binary_Operator,\n  ucp_IDS_Trinary_Operator,\n  ucp_IDS_Unary_Operator,\n  ucp_ID_Compat_Math_Continue,\n  ucp_ID_Compat_Math_Start,\n  ucp_ID_Continue,\n  ucp_ID_Start,\n  ucp_Ideographic,\n  ucp_InCB,\n  ucp_Join_Control,\n  ucp_Logical_Order_Exception,\n  ucp_Lowercase,\n  ucp_Math,\n  ucp_Modifier_Combining_Mark,\n  ucp_Noncharacter_Code_Point,\n  ucp_Pattern_Syntax,\n  ucp_Pattern_White_Space,\n  ucp_Prepended_Concatenation_Mark,\n  ucp_Quotation_Mark,\n  ucp_Radical,\n  ucp_Regional_Indicator,\n  ucp_Sentence_Terminal,\n  ucp_Soft_Dotted,\n  ucp_Terminal_Punctuation,\n  ucp_Unified_Ideograph,\n  ucp_Uppercase,\n  ucp_Variation_Selector,\n  ucp_White_Space,\n  ucp_XID_Continue,\n  ucp_XID_Start,\n  /* This must be last */\n  ucp_Bprop_Count\n};\n\n/* Size of entries in ucd_boolprop_sets[] */\n\n#define ucd_boolprop_sets_item_size 2\n\n/* These are the bidi class values. */\n\nenum {\n  ucp_bidiAL,   /* Arabic_Letter */\n  ucp_bidiAN,   /* Arabic_Number */\n  ucp_bidiB,    /* Paragraph_Separator */\n  ucp_bidiBN,   /* Boundary_Neutral */\n  ucp_bidiCS,   /* Common_Separator */\n  ucp_bidiEN,   /* European_Number */\n  ucp_bidiES,   /* European_Separator */\n  ucp_bidiET,   /* European_Terminator */\n  ucp_bidiFSI,  /* First_Strong_Isolate */\n  ucp_bidiL,    /* Left_To_Right */\n  ucp_bidiLRE,  /* Left_To_Right_Embedding */\n  ucp_bidiLRI,  /* Left_To_Right_Isolate */\n  ucp_bidiLRO,  /* Left_To_Right_Override */\n  ucp_bidiNSM,  /* Nonspacing_Mark */\n  ucp_bidiON,   /* Other_Neutral */\n  ucp_bidiPDF,  /* Pop_Directional_Format */\n  ucp_bidiPDI,  /* Pop_Directional_Isolate */\n  ucp_bidiR,    /* Right_To_Left */\n  ucp_bidiRLE,  /* Right_To_Left_Embedding */\n  ucp_bidiRLI,  /* Right_To_Left_Isolate */\n  ucp_bidiRLO,  /* Right_To_Left_Override */\n  ucp_bidiS,    /* Segment_Separator */\n  ucp_bidiWS,   /* White_Space */\n};\n\n/* These are grapheme break properties. The Extended Pictographic property\ncomes from the emoji-data.txt file. */\n\nenum {\n  ucp_gbCR,                    /*  0 */\n  ucp_gbLF,                    /*  1 */\n  ucp_gbControl,               /*  2 */\n  ucp_gbExtend,                /*  3 */\n  ucp_gbPrepend,               /*  4 */\n  ucp_gbSpacingMark,           /*  5 */\n  ucp_gbL,                     /*  6 Hangul syllable type L */\n  ucp_gbV,                     /*  7 Hangul syllable type V */\n  ucp_gbT,                     /*  8 Hangul syllable type T */\n  ucp_gbLV,                    /*  9 Hangul syllable type LV */\n  ucp_gbLVT,                   /* 10 Hangul syllable type LVT */\n  ucp_gbRegional_Indicator,    /* 11 */\n  ucp_gbOther,                 /* 12 */\n  ucp_gbZWJ,                   /* 13 */\n  ucp_gbExtended_Pictographic, /* 14 */\n};\n\n/* These are the script identifications. */\n\nenum {\n  /* Scripts which has characters in other scripts. */\n  ucp_Latin,\n  ucp_Greek,\n  ucp_Cyrillic,\n  ucp_Armenian,\n  ucp_Hebrew,\n  ucp_Arabic,\n  ucp_Syriac,\n  ucp_Thaana,\n  ucp_Devanagari,\n  ucp_Bengali,\n  ucp_Gurmukhi,\n  ucp_Gujarati,\n  ucp_Oriya,\n  ucp_Tamil,\n  ucp_Telugu,\n  ucp_Kannada,\n  ucp_Malayalam,\n  ucp_Sinhala,\n  ucp_Thai,\n  ucp_Tibetan,\n  ucp_Myanmar,\n  ucp_Georgian,\n  ucp_Hangul,\n  ucp_Ethiopic,\n  ucp_Cherokee,\n  ucp_Runic,\n  ucp_Mongolian,\n  ucp_Hiragana,\n  ucp_Katakana,\n  ucp_Bopomofo,\n  ucp_Han,\n  ucp_Yi,\n  ucp_Gothic,\n  ucp_Tagalog,\n  ucp_Hanunoo,\n  ucp_Buhid,\n  ucp_Tagbanwa,\n  ucp_Limbu,\n  ucp_Tai_Le,\n  ucp_Linear_B,\n  ucp_Shavian,\n  ucp_Cypriot,\n  ucp_Buginese,\n  ucp_Coptic,\n  ucp_Glagolitic,\n  ucp_Tifinagh,\n  ucp_Syloti_Nagri,\n  ucp_Phags_Pa,\n  ucp_Nko,\n  ucp_Kayah_Li,\n  ucp_Lycian,\n  ucp_Carian,\n  ucp_Lydian,\n  ucp_Avestan,\n  ucp_Samaritan,\n  ucp_Lisu,\n  ucp_Javanese,\n  ucp_Old_Turkic,\n  ucp_Kaithi,\n  ucp_Mandaic,\n  ucp_Chakma,\n  ucp_Meroitic_Hieroglyphs,\n  ucp_Sharada,\n  ucp_Takri,\n  ucp_Caucasian_Albanian,\n  ucp_Duployan,\n  ucp_Elbasan,\n  ucp_Grantha,\n  ucp_Khojki,\n  ucp_Linear_A,\n  ucp_Mahajani,\n  ucp_Manichaean,\n  ucp_Modi,\n  ucp_Old_Permic,\n  ucp_Psalter_Pahlavi,\n  ucp_Khudawadi,\n  ucp_Tirhuta,\n  ucp_Multani,\n  ucp_Old_Hungarian,\n  ucp_Adlam,\n  ucp_Newa,\n  ucp_Osage,\n  ucp_Tangut,\n  ucp_Masaram_Gondi,\n  ucp_Dogra,\n  ucp_Gunjala_Gondi,\n  ucp_Hanifi_Rohingya,\n  ucp_Sogdian,\n  ucp_Nandinagari,\n  ucp_Yezidi,\n  ucp_Cypro_Minoan,\n  ucp_Old_Uyghur,\n  ucp_Toto,\n  ucp_Garay,\n  ucp_Gurung_Khema,\n  ucp_Ol_Onal,\n  ucp_Sunuwar,\n  ucp_Todhri,\n  ucp_Tulu_Tigalari,\n\n  /* Scripts which has no characters in other scripts. */\n  ucp_Unknown,\n  ucp_Common,\n  ucp_Lao,\n  ucp_Canadian_Aboriginal,\n  ucp_Ogham,\n  ucp_Khmer,\n  ucp_Old_Italic,\n  ucp_Deseret,\n  ucp_Inherited,\n  ucp_Ugaritic,\n  ucp_Osmanya,\n  ucp_Braille,\n  ucp_New_Tai_Lue,\n  ucp_Old_Persian,\n  ucp_Kharoshthi,\n  ucp_Balinese,\n  ucp_Cuneiform,\n  ucp_Phoenician,\n  ucp_Sundanese,\n  ucp_Lepcha,\n  ucp_Ol_Chiki,\n  ucp_Vai,\n  ucp_Saurashtra,\n  ucp_Rejang,\n  ucp_Cham,\n  ucp_Tai_Tham,\n  ucp_Tai_Viet,\n  ucp_Egyptian_Hieroglyphs,\n  ucp_Bamum,\n  ucp_Meetei_Mayek,\n  ucp_Imperial_Aramaic,\n  ucp_Old_South_Arabian,\n  ucp_Inscriptional_Parthian,\n  ucp_Inscriptional_Pahlavi,\n  ucp_Batak,\n  ucp_Brahmi,\n  ucp_Meroitic_Cursive,\n  ucp_Miao,\n  ucp_Sora_Sompeng,\n  ucp_Bassa_Vah,\n  ucp_Pahawh_Hmong,\n  ucp_Mende_Kikakui,\n  ucp_Mro,\n  ucp_Old_North_Arabian,\n  ucp_Nabataean,\n  ucp_Palmyrene,\n  ucp_Pau_Cin_Hau,\n  ucp_Siddham,\n  ucp_Warang_Citi,\n  ucp_Ahom,\n  ucp_Anatolian_Hieroglyphs,\n  ucp_Hatran,\n  ucp_SignWriting,\n  ucp_Bhaiksuki,\n  ucp_Marchen,\n  ucp_Nushu,\n  ucp_Soyombo,\n  ucp_Zanabazar_Square,\n  ucp_Makasar,\n  ucp_Medefaidrin,\n  ucp_Old_Sogdian,\n  ucp_Elymaic,\n  ucp_Nyiakeng_Puachue_Hmong,\n  ucp_Wancho,\n  ucp_Chorasmian,\n  ucp_Dives_Akuru,\n  ucp_Khitan_Small_Script,\n  ucp_Tangsa,\n  ucp_Vithkuqi,\n  ucp_Kawi,\n  ucp_Nag_Mundari,\n  ucp_Kirat_Rai,\n  ucp_Sidetic,\n  ucp_Tai_Yo,\n  ucp_Tolong_Siki,\n  ucp_Beria_Erfe,\n\n  /* This must be last */\n  ucp_Script_Count\n};\n\n/* Size of entries in ucd_script_sets[] */\n\n#define ucd_script_sets_item_size 4\n\n#endif  /* PCRE2_UCP_H_IDEMPOTENT_GUARD */\n\n/* End of pcre2_ucp.h */\n"
  },
  {
    "path": "src/pcre2_ucptables_inc.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2022 University of Cambridge\n\nThis module is auto-generated from Unicode data files. DO NOT EDIT MANUALLY!\nInstead, modify the maint/GenerateUcpTables.py script and run it to generate\na new version of this code.\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n#ifdef SUPPORT_UNICODE\n\n/* The PRIV(utt)[] table below translates Unicode property names into type and\ncode values. It is searched by binary chop, so must be in collating sequence of\nname. Originally, the table contained pointers to the name strings in the first\nfield of each entry. However, that leads to a large number of relocations when\na shared library is dynamically loaded. A significant reduction is made by\nputting all the names into a single, large string and using offsets instead.\nAll letters are lower cased, and underscores are removed, in accordance with\nthe \"loose matching\" rules that Unicode advises and Perl uses. */\n\n#define STRING_adlam0 STR_a STR_d STR_l STR_a STR_m \"\\0\"\n#define STRING_adlm0 STR_a STR_d STR_l STR_m \"\\0\"\n#define STRING_aghb0 STR_a STR_g STR_h STR_b \"\\0\"\n#define STRING_ahex0 STR_a STR_h STR_e STR_x \"\\0\"\n#define STRING_ahom0 STR_a STR_h STR_o STR_m \"\\0\"\n#define STRING_alpha0 STR_a STR_l STR_p STR_h STR_a \"\\0\"\n#define STRING_alphabetic0 STR_a STR_l STR_p STR_h STR_a STR_b STR_e STR_t STR_i STR_c \"\\0\"\n#define STRING_anatolianhieroglyphs0 STR_a STR_n STR_a STR_t STR_o STR_l STR_i STR_a STR_n STR_h STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s \"\\0\"\n#define STRING_any0 STR_a STR_n STR_y \"\\0\"\n#define STRING_arab0 STR_a STR_r STR_a STR_b \"\\0\"\n#define STRING_arabic0 STR_a STR_r STR_a STR_b STR_i STR_c \"\\0\"\n#define STRING_armenian0 STR_a STR_r STR_m STR_e STR_n STR_i STR_a STR_n \"\\0\"\n#define STRING_armi0 STR_a STR_r STR_m STR_i \"\\0\"\n#define STRING_armn0 STR_a STR_r STR_m STR_n \"\\0\"\n#define STRING_ascii0 STR_a STR_s STR_c STR_i STR_i \"\\0\"\n#define STRING_asciihexdigit0 STR_a STR_s STR_c STR_i STR_i STR_h STR_e STR_x STR_d STR_i STR_g STR_i STR_t \"\\0\"\n#define STRING_avestan0 STR_a STR_v STR_e STR_s STR_t STR_a STR_n \"\\0\"\n#define STRING_avst0 STR_a STR_v STR_s STR_t \"\\0\"\n#define STRING_bali0 STR_b STR_a STR_l STR_i \"\\0\"\n#define STRING_balinese0 STR_b STR_a STR_l STR_i STR_n STR_e STR_s STR_e \"\\0\"\n#define STRING_bamu0 STR_b STR_a STR_m STR_u \"\\0\"\n#define STRING_bamum0 STR_b STR_a STR_m STR_u STR_m \"\\0\"\n#define STRING_bass0 STR_b STR_a STR_s STR_s \"\\0\"\n#define STRING_bassavah0 STR_b STR_a STR_s STR_s STR_a STR_v STR_a STR_h \"\\0\"\n#define STRING_batak0 STR_b STR_a STR_t STR_a STR_k \"\\0\"\n#define STRING_batk0 STR_b STR_a STR_t STR_k \"\\0\"\n#define STRING_beng0 STR_b STR_e STR_n STR_g \"\\0\"\n#define STRING_bengali0 STR_b STR_e STR_n STR_g STR_a STR_l STR_i \"\\0\"\n#define STRING_berf0 STR_b STR_e STR_r STR_f \"\\0\"\n#define STRING_beriaerfe0 STR_b STR_e STR_r STR_i STR_a STR_e STR_r STR_f STR_e \"\\0\"\n#define STRING_bhaiksuki0 STR_b STR_h STR_a STR_i STR_k STR_s STR_u STR_k STR_i \"\\0\"\n#define STRING_bhks0 STR_b STR_h STR_k STR_s \"\\0\"\n#define STRING_bidial0 STR_b STR_i STR_d STR_i STR_a STR_l \"\\0\"\n#define STRING_bidian0 STR_b STR_i STR_d STR_i STR_a STR_n \"\\0\"\n#define STRING_bidib0 STR_b STR_i STR_d STR_i STR_b \"\\0\"\n#define STRING_bidibn0 STR_b STR_i STR_d STR_i STR_b STR_n \"\\0\"\n#define STRING_bidic0 STR_b STR_i STR_d STR_i STR_c \"\\0\"\n#define STRING_bidicontrol0 STR_b STR_i STR_d STR_i STR_c STR_o STR_n STR_t STR_r STR_o STR_l \"\\0\"\n#define STRING_bidics0 STR_b STR_i STR_d STR_i STR_c STR_s \"\\0\"\n#define STRING_bidien0 STR_b STR_i STR_d STR_i STR_e STR_n \"\\0\"\n#define STRING_bidies0 STR_b STR_i STR_d STR_i STR_e STR_s \"\\0\"\n#define STRING_bidiet0 STR_b STR_i STR_d STR_i STR_e STR_t \"\\0\"\n#define STRING_bidifsi0 STR_b STR_i STR_d STR_i STR_f STR_s STR_i \"\\0\"\n#define STRING_bidil0 STR_b STR_i STR_d STR_i STR_l \"\\0\"\n#define STRING_bidilre0 STR_b STR_i STR_d STR_i STR_l STR_r STR_e \"\\0\"\n#define STRING_bidilri0 STR_b STR_i STR_d STR_i STR_l STR_r STR_i \"\\0\"\n#define STRING_bidilro0 STR_b STR_i STR_d STR_i STR_l STR_r STR_o \"\\0\"\n#define STRING_bidim0 STR_b STR_i STR_d STR_i STR_m \"\\0\"\n#define STRING_bidimirrored0 STR_b STR_i STR_d STR_i STR_m STR_i STR_r STR_r STR_o STR_r STR_e STR_d \"\\0\"\n#define STRING_bidinsm0 STR_b STR_i STR_d STR_i STR_n STR_s STR_m \"\\0\"\n#define STRING_bidion0 STR_b STR_i STR_d STR_i STR_o STR_n \"\\0\"\n#define STRING_bidipdf0 STR_b STR_i STR_d STR_i STR_p STR_d STR_f \"\\0\"\n#define STRING_bidipdi0 STR_b STR_i STR_d STR_i STR_p STR_d STR_i \"\\0\"\n#define STRING_bidir0 STR_b STR_i STR_d STR_i STR_r \"\\0\"\n#define STRING_bidirle0 STR_b STR_i STR_d STR_i STR_r STR_l STR_e \"\\0\"\n#define STRING_bidirli0 STR_b STR_i STR_d STR_i STR_r STR_l STR_i \"\\0\"\n#define STRING_bidirlo0 STR_b STR_i STR_d STR_i STR_r STR_l STR_o \"\\0\"\n#define STRING_bidis0 STR_b STR_i STR_d STR_i STR_s \"\\0\"\n#define STRING_bidiws0 STR_b STR_i STR_d STR_i STR_w STR_s \"\\0\"\n#define STRING_bopo0 STR_b STR_o STR_p STR_o \"\\0\"\n#define STRING_bopomofo0 STR_b STR_o STR_p STR_o STR_m STR_o STR_f STR_o \"\\0\"\n#define STRING_brah0 STR_b STR_r STR_a STR_h \"\\0\"\n#define STRING_brahmi0 STR_b STR_r STR_a STR_h STR_m STR_i \"\\0\"\n#define STRING_brai0 STR_b STR_r STR_a STR_i \"\\0\"\n#define STRING_braille0 STR_b STR_r STR_a STR_i STR_l STR_l STR_e \"\\0\"\n#define STRING_bugi0 STR_b STR_u STR_g STR_i \"\\0\"\n#define STRING_buginese0 STR_b STR_u STR_g STR_i STR_n STR_e STR_s STR_e \"\\0\"\n#define STRING_buhd0 STR_b STR_u STR_h STR_d \"\\0\"\n#define STRING_buhid0 STR_b STR_u STR_h STR_i STR_d \"\\0\"\n#define STRING_c0 STR_c \"\\0\"\n#define STRING_cakm0 STR_c STR_a STR_k STR_m \"\\0\"\n#define STRING_canadianaboriginal0 STR_c STR_a STR_n STR_a STR_d STR_i STR_a STR_n STR_a STR_b STR_o STR_r STR_i STR_g STR_i STR_n STR_a STR_l \"\\0\"\n#define STRING_cans0 STR_c STR_a STR_n STR_s \"\\0\"\n#define STRING_cari0 STR_c STR_a STR_r STR_i \"\\0\"\n#define STRING_carian0 STR_c STR_a STR_r STR_i STR_a STR_n \"\\0\"\n#define STRING_cased0 STR_c STR_a STR_s STR_e STR_d \"\\0\"\n#define STRING_caseignorable0 STR_c STR_a STR_s STR_e STR_i STR_g STR_n STR_o STR_r STR_a STR_b STR_l STR_e \"\\0\"\n#define STRING_caucasianalbanian0 STR_c STR_a STR_u STR_c STR_a STR_s STR_i STR_a STR_n STR_a STR_l STR_b STR_a STR_n STR_i STR_a STR_n \"\\0\"\n#define STRING_cc0 STR_c STR_c \"\\0\"\n#define STRING_cf0 STR_c STR_f \"\\0\"\n#define STRING_chakma0 STR_c STR_h STR_a STR_k STR_m STR_a \"\\0\"\n#define STRING_cham0 STR_c STR_h STR_a STR_m \"\\0\"\n#define STRING_changeswhencasefolded0 STR_c STR_h STR_a STR_n STR_g STR_e STR_s STR_w STR_h STR_e STR_n STR_c STR_a STR_s STR_e STR_f STR_o STR_l STR_d STR_e STR_d \"\\0\"\n#define STRING_changeswhencasemapped0 STR_c STR_h STR_a STR_n STR_g STR_e STR_s STR_w STR_h STR_e STR_n STR_c STR_a STR_s STR_e STR_m STR_a STR_p STR_p STR_e STR_d \"\\0\"\n#define STRING_changeswhenlowercased0 STR_c STR_h STR_a STR_n STR_g STR_e STR_s STR_w STR_h STR_e STR_n STR_l STR_o STR_w STR_e STR_r STR_c STR_a STR_s STR_e STR_d \"\\0\"\n#define STRING_changeswhentitlecased0 STR_c STR_h STR_a STR_n STR_g STR_e STR_s STR_w STR_h STR_e STR_n STR_t STR_i STR_t STR_l STR_e STR_c STR_a STR_s STR_e STR_d \"\\0\"\n#define STRING_changeswhenuppercased0 STR_c STR_h STR_a STR_n STR_g STR_e STR_s STR_w STR_h STR_e STR_n STR_u STR_p STR_p STR_e STR_r STR_c STR_a STR_s STR_e STR_d \"\\0\"\n#define STRING_cher0 STR_c STR_h STR_e STR_r \"\\0\"\n#define STRING_cherokee0 STR_c STR_h STR_e STR_r STR_o STR_k STR_e STR_e \"\\0\"\n#define STRING_chorasmian0 STR_c STR_h STR_o STR_r STR_a STR_s STR_m STR_i STR_a STR_n \"\\0\"\n#define STRING_chrs0 STR_c STR_h STR_r STR_s \"\\0\"\n#define STRING_ci0 STR_c STR_i \"\\0\"\n#define STRING_cn0 STR_c STR_n \"\\0\"\n#define STRING_co0 STR_c STR_o \"\\0\"\n#define STRING_common0 STR_c STR_o STR_m STR_m STR_o STR_n \"\\0\"\n#define STRING_copt0 STR_c STR_o STR_p STR_t \"\\0\"\n#define STRING_coptic0 STR_c STR_o STR_p STR_t STR_i STR_c \"\\0\"\n#define STRING_cpmn0 STR_c STR_p STR_m STR_n \"\\0\"\n#define STRING_cprt0 STR_c STR_p STR_r STR_t \"\\0\"\n#define STRING_cs0 STR_c STR_s \"\\0\"\n#define STRING_cuneiform0 STR_c STR_u STR_n STR_e STR_i STR_f STR_o STR_r STR_m \"\\0\"\n#define STRING_cwcf0 STR_c STR_w STR_c STR_f \"\\0\"\n#define STRING_cwcm0 STR_c STR_w STR_c STR_m \"\\0\"\n#define STRING_cwl0 STR_c STR_w STR_l \"\\0\"\n#define STRING_cwt0 STR_c STR_w STR_t \"\\0\"\n#define STRING_cwu0 STR_c STR_w STR_u \"\\0\"\n#define STRING_cypriot0 STR_c STR_y STR_p STR_r STR_i STR_o STR_t \"\\0\"\n#define STRING_cyprominoan0 STR_c STR_y STR_p STR_r STR_o STR_m STR_i STR_n STR_o STR_a STR_n \"\\0\"\n#define STRING_cyrillic0 STR_c STR_y STR_r STR_i STR_l STR_l STR_i STR_c \"\\0\"\n#define STRING_cyrl0 STR_c STR_y STR_r STR_l \"\\0\"\n#define STRING_dash0 STR_d STR_a STR_s STR_h \"\\0\"\n#define STRING_defaultignorablecodepoint0 STR_d STR_e STR_f STR_a STR_u STR_l STR_t STR_i STR_g STR_n STR_o STR_r STR_a STR_b STR_l STR_e STR_c STR_o STR_d STR_e STR_p STR_o STR_i STR_n STR_t \"\\0\"\n#define STRING_dep0 STR_d STR_e STR_p \"\\0\"\n#define STRING_deprecated0 STR_d STR_e STR_p STR_r STR_e STR_c STR_a STR_t STR_e STR_d \"\\0\"\n#define STRING_deseret0 STR_d STR_e STR_s STR_e STR_r STR_e STR_t \"\\0\"\n#define STRING_deva0 STR_d STR_e STR_v STR_a \"\\0\"\n#define STRING_devanagari0 STR_d STR_e STR_v STR_a STR_n STR_a STR_g STR_a STR_r STR_i \"\\0\"\n#define STRING_di0 STR_d STR_i \"\\0\"\n#define STRING_dia0 STR_d STR_i STR_a \"\\0\"\n#define STRING_diacritic0 STR_d STR_i STR_a STR_c STR_r STR_i STR_t STR_i STR_c \"\\0\"\n#define STRING_diak0 STR_d STR_i STR_a STR_k \"\\0\"\n#define STRING_divesakuru0 STR_d STR_i STR_v STR_e STR_s STR_a STR_k STR_u STR_r STR_u \"\\0\"\n#define STRING_dogr0 STR_d STR_o STR_g STR_r \"\\0\"\n#define STRING_dogra0 STR_d STR_o STR_g STR_r STR_a \"\\0\"\n#define STRING_dsrt0 STR_d STR_s STR_r STR_t \"\\0\"\n#define STRING_dupl0 STR_d STR_u STR_p STR_l \"\\0\"\n#define STRING_duployan0 STR_d STR_u STR_p STR_l STR_o STR_y STR_a STR_n \"\\0\"\n#define STRING_ebase0 STR_e STR_b STR_a STR_s STR_e \"\\0\"\n#define STRING_ecomp0 STR_e STR_c STR_o STR_m STR_p \"\\0\"\n#define STRING_egyp0 STR_e STR_g STR_y STR_p \"\\0\"\n#define STRING_egyptianhieroglyphs0 STR_e STR_g STR_y STR_p STR_t STR_i STR_a STR_n STR_h STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s \"\\0\"\n#define STRING_elba0 STR_e STR_l STR_b STR_a \"\\0\"\n#define STRING_elbasan0 STR_e STR_l STR_b STR_a STR_s STR_a STR_n \"\\0\"\n#define STRING_elym0 STR_e STR_l STR_y STR_m \"\\0\"\n#define STRING_elymaic0 STR_e STR_l STR_y STR_m STR_a STR_i STR_c \"\\0\"\n#define STRING_emod0 STR_e STR_m STR_o STR_d \"\\0\"\n#define STRING_emoji0 STR_e STR_m STR_o STR_j STR_i \"\\0\"\n#define STRING_emojicomponent0 STR_e STR_m STR_o STR_j STR_i STR_c STR_o STR_m STR_p STR_o STR_n STR_e STR_n STR_t \"\\0\"\n#define STRING_emojimodifier0 STR_e STR_m STR_o STR_j STR_i STR_m STR_o STR_d STR_i STR_f STR_i STR_e STR_r \"\\0\"\n#define STRING_emojimodifierbase0 STR_e STR_m STR_o STR_j STR_i STR_m STR_o STR_d STR_i STR_f STR_i STR_e STR_r STR_b STR_a STR_s STR_e \"\\0\"\n#define STRING_emojipresentation0 STR_e STR_m STR_o STR_j STR_i STR_p STR_r STR_e STR_s STR_e STR_n STR_t STR_a STR_t STR_i STR_o STR_n \"\\0\"\n#define STRING_epres0 STR_e STR_p STR_r STR_e STR_s \"\\0\"\n#define STRING_ethi0 STR_e STR_t STR_h STR_i \"\\0\"\n#define STRING_ethiopic0 STR_e STR_t STR_h STR_i STR_o STR_p STR_i STR_c \"\\0\"\n#define STRING_ext0 STR_e STR_x STR_t \"\\0\"\n#define STRING_extendedpictographic0 STR_e STR_x STR_t STR_e STR_n STR_d STR_e STR_d STR_p STR_i STR_c STR_t STR_o STR_g STR_r STR_a STR_p STR_h STR_i STR_c \"\\0\"\n#define STRING_extender0 STR_e STR_x STR_t STR_e STR_n STR_d STR_e STR_r \"\\0\"\n#define STRING_extpict0 STR_e STR_x STR_t STR_p STR_i STR_c STR_t \"\\0\"\n#define STRING_gara0 STR_g STR_a STR_r STR_a \"\\0\"\n#define STRING_garay0 STR_g STR_a STR_r STR_a STR_y \"\\0\"\n#define STRING_geor0 STR_g STR_e STR_o STR_r \"\\0\"\n#define STRING_georgian0 STR_g STR_e STR_o STR_r STR_g STR_i STR_a STR_n \"\\0\"\n#define STRING_glag0 STR_g STR_l STR_a STR_g \"\\0\"\n#define STRING_glagolitic0 STR_g STR_l STR_a STR_g STR_o STR_l STR_i STR_t STR_i STR_c \"\\0\"\n#define STRING_gong0 STR_g STR_o STR_n STR_g \"\\0\"\n#define STRING_gonm0 STR_g STR_o STR_n STR_m \"\\0\"\n#define STRING_goth0 STR_g STR_o STR_t STR_h \"\\0\"\n#define STRING_gothic0 STR_g STR_o STR_t STR_h STR_i STR_c \"\\0\"\n#define STRING_gran0 STR_g STR_r STR_a STR_n \"\\0\"\n#define STRING_grantha0 STR_g STR_r STR_a STR_n STR_t STR_h STR_a \"\\0\"\n#define STRING_graphemebase0 STR_g STR_r STR_a STR_p STR_h STR_e STR_m STR_e STR_b STR_a STR_s STR_e \"\\0\"\n#define STRING_graphemeextend0 STR_g STR_r STR_a STR_p STR_h STR_e STR_m STR_e STR_e STR_x STR_t STR_e STR_n STR_d \"\\0\"\n#define STRING_graphemelink0 STR_g STR_r STR_a STR_p STR_h STR_e STR_m STR_e STR_l STR_i STR_n STR_k \"\\0\"\n#define STRING_grbase0 STR_g STR_r STR_b STR_a STR_s STR_e \"\\0\"\n#define STRING_greek0 STR_g STR_r STR_e STR_e STR_k \"\\0\"\n#define STRING_grek0 STR_g STR_r STR_e STR_k \"\\0\"\n#define STRING_grext0 STR_g STR_r STR_e STR_x STR_t \"\\0\"\n#define STRING_grlink0 STR_g STR_r STR_l STR_i STR_n STR_k \"\\0\"\n#define STRING_gujarati0 STR_g STR_u STR_j STR_a STR_r STR_a STR_t STR_i \"\\0\"\n#define STRING_gujr0 STR_g STR_u STR_j STR_r \"\\0\"\n#define STRING_gukh0 STR_g STR_u STR_k STR_h \"\\0\"\n#define STRING_gunjalagondi0 STR_g STR_u STR_n STR_j STR_a STR_l STR_a STR_g STR_o STR_n STR_d STR_i \"\\0\"\n#define STRING_gurmukhi0 STR_g STR_u STR_r STR_m STR_u STR_k STR_h STR_i \"\\0\"\n#define STRING_guru0 STR_g STR_u STR_r STR_u \"\\0\"\n#define STRING_gurungkhema0 STR_g STR_u STR_r STR_u STR_n STR_g STR_k STR_h STR_e STR_m STR_a \"\\0\"\n#define STRING_han0 STR_h STR_a STR_n \"\\0\"\n#define STRING_hang0 STR_h STR_a STR_n STR_g \"\\0\"\n#define STRING_hangul0 STR_h STR_a STR_n STR_g STR_u STR_l \"\\0\"\n#define STRING_hani0 STR_h STR_a STR_n STR_i \"\\0\"\n#define STRING_hanifirohingya0 STR_h STR_a STR_n STR_i STR_f STR_i STR_r STR_o STR_h STR_i STR_n STR_g STR_y STR_a \"\\0\"\n#define STRING_hano0 STR_h STR_a STR_n STR_o \"\\0\"\n#define STRING_hanunoo0 STR_h STR_a STR_n STR_u STR_n STR_o STR_o \"\\0\"\n#define STRING_hatr0 STR_h STR_a STR_t STR_r \"\\0\"\n#define STRING_hatran0 STR_h STR_a STR_t STR_r STR_a STR_n \"\\0\"\n#define STRING_hebr0 STR_h STR_e STR_b STR_r \"\\0\"\n#define STRING_hebrew0 STR_h STR_e STR_b STR_r STR_e STR_w \"\\0\"\n#define STRING_hex0 STR_h STR_e STR_x \"\\0\"\n#define STRING_hexdigit0 STR_h STR_e STR_x STR_d STR_i STR_g STR_i STR_t \"\\0\"\n#define STRING_hira0 STR_h STR_i STR_r STR_a \"\\0\"\n#define STRING_hiragana0 STR_h STR_i STR_r STR_a STR_g STR_a STR_n STR_a \"\\0\"\n#define STRING_hluw0 STR_h STR_l STR_u STR_w \"\\0\"\n#define STRING_hmng0 STR_h STR_m STR_n STR_g \"\\0\"\n#define STRING_hmnp0 STR_h STR_m STR_n STR_p \"\\0\"\n#define STRING_hung0 STR_h STR_u STR_n STR_g \"\\0\"\n#define STRING_idc0 STR_i STR_d STR_c \"\\0\"\n#define STRING_idcompatmathcontinue0 STR_i STR_d STR_c STR_o STR_m STR_p STR_a STR_t STR_m STR_a STR_t STR_h STR_c STR_o STR_n STR_t STR_i STR_n STR_u STR_e \"\\0\"\n#define STRING_idcompatmathstart0 STR_i STR_d STR_c STR_o STR_m STR_p STR_a STR_t STR_m STR_a STR_t STR_h STR_s STR_t STR_a STR_r STR_t \"\\0\"\n#define STRING_idcontinue0 STR_i STR_d STR_c STR_o STR_n STR_t STR_i STR_n STR_u STR_e \"\\0\"\n#define STRING_ideo0 STR_i STR_d STR_e STR_o \"\\0\"\n#define STRING_ideographic0 STR_i STR_d STR_e STR_o STR_g STR_r STR_a STR_p STR_h STR_i STR_c \"\\0\"\n#define STRING_ids0 STR_i STR_d STR_s \"\\0\"\n#define STRING_idsb0 STR_i STR_d STR_s STR_b \"\\0\"\n#define STRING_idsbinaryoperator0 STR_i STR_d STR_s STR_b STR_i STR_n STR_a STR_r STR_y STR_o STR_p STR_e STR_r STR_a STR_t STR_o STR_r \"\\0\"\n#define STRING_idst0 STR_i STR_d STR_s STR_t \"\\0\"\n#define STRING_idstart0 STR_i STR_d STR_s STR_t STR_a STR_r STR_t \"\\0\"\n#define STRING_idstrinaryoperator0 STR_i STR_d STR_s STR_t STR_r STR_i STR_n STR_a STR_r STR_y STR_o STR_p STR_e STR_r STR_a STR_t STR_o STR_r \"\\0\"\n#define STRING_idsu0 STR_i STR_d STR_s STR_u \"\\0\"\n#define STRING_idsunaryoperator0 STR_i STR_d STR_s STR_u STR_n STR_a STR_r STR_y STR_o STR_p STR_e STR_r STR_a STR_t STR_o STR_r \"\\0\"\n#define STRING_imperialaramaic0 STR_i STR_m STR_p STR_e STR_r STR_i STR_a STR_l STR_a STR_r STR_a STR_m STR_a STR_i STR_c \"\\0\"\n#define STRING_incb0 STR_i STR_n STR_c STR_b \"\\0\"\n#define STRING_inherited0 STR_i STR_n STR_h STR_e STR_r STR_i STR_t STR_e STR_d \"\\0\"\n#define STRING_inscriptionalpahlavi0 STR_i STR_n STR_s STR_c STR_r STR_i STR_p STR_t STR_i STR_o STR_n STR_a STR_l STR_p STR_a STR_h STR_l STR_a STR_v STR_i \"\\0\"\n#define STRING_inscriptionalparthian0 STR_i STR_n STR_s STR_c STR_r STR_i STR_p STR_t STR_i STR_o STR_n STR_a STR_l STR_p STR_a STR_r STR_t STR_h STR_i STR_a STR_n \"\\0\"\n#define STRING_ital0 STR_i STR_t STR_a STR_l \"\\0\"\n#define STRING_java0 STR_j STR_a STR_v STR_a \"\\0\"\n#define STRING_javanese0 STR_j STR_a STR_v STR_a STR_n STR_e STR_s STR_e \"\\0\"\n#define STRING_joinc0 STR_j STR_o STR_i STR_n STR_c \"\\0\"\n#define STRING_joincontrol0 STR_j STR_o STR_i STR_n STR_c STR_o STR_n STR_t STR_r STR_o STR_l \"\\0\"\n#define STRING_kaithi0 STR_k STR_a STR_i STR_t STR_h STR_i \"\\0\"\n#define STRING_kali0 STR_k STR_a STR_l STR_i \"\\0\"\n#define STRING_kana0 STR_k STR_a STR_n STR_a \"\\0\"\n#define STRING_kannada0 STR_k STR_a STR_n STR_n STR_a STR_d STR_a \"\\0\"\n#define STRING_katakana0 STR_k STR_a STR_t STR_a STR_k STR_a STR_n STR_a \"\\0\"\n#define STRING_kawi0 STR_k STR_a STR_w STR_i \"\\0\"\n#define STRING_kayahli0 STR_k STR_a STR_y STR_a STR_h STR_l STR_i \"\\0\"\n#define STRING_khar0 STR_k STR_h STR_a STR_r \"\\0\"\n#define STRING_kharoshthi0 STR_k STR_h STR_a STR_r STR_o STR_s STR_h STR_t STR_h STR_i \"\\0\"\n#define STRING_khitansmallscript0 STR_k STR_h STR_i STR_t STR_a STR_n STR_s STR_m STR_a STR_l STR_l STR_s STR_c STR_r STR_i STR_p STR_t \"\\0\"\n#define STRING_khmer0 STR_k STR_h STR_m STR_e STR_r \"\\0\"\n#define STRING_khmr0 STR_k STR_h STR_m STR_r \"\\0\"\n#define STRING_khoj0 STR_k STR_h STR_o STR_j \"\\0\"\n#define STRING_khojki0 STR_k STR_h STR_o STR_j STR_k STR_i \"\\0\"\n#define STRING_khudawadi0 STR_k STR_h STR_u STR_d STR_a STR_w STR_a STR_d STR_i \"\\0\"\n#define STRING_kiratrai0 STR_k STR_i STR_r STR_a STR_t STR_r STR_a STR_i \"\\0\"\n#define STRING_kits0 STR_k STR_i STR_t STR_s \"\\0\"\n#define STRING_knda0 STR_k STR_n STR_d STR_a \"\\0\"\n#define STRING_krai0 STR_k STR_r STR_a STR_i \"\\0\"\n#define STRING_kthi0 STR_k STR_t STR_h STR_i \"\\0\"\n#define STRING_l0 STR_l \"\\0\"\n#define STRING_l_AMPERSAND0 STR_l STR_AMPERSAND \"\\0\"\n#define STRING_lana0 STR_l STR_a STR_n STR_a \"\\0\"\n#define STRING_lao0 STR_l STR_a STR_o \"\\0\"\n#define STRING_laoo0 STR_l STR_a STR_o STR_o \"\\0\"\n#define STRING_latin0 STR_l STR_a STR_t STR_i STR_n \"\\0\"\n#define STRING_latn0 STR_l STR_a STR_t STR_n \"\\0\"\n#define STRING_lc0 STR_l STR_c \"\\0\"\n#define STRING_lepc0 STR_l STR_e STR_p STR_c \"\\0\"\n#define STRING_lepcha0 STR_l STR_e STR_p STR_c STR_h STR_a \"\\0\"\n#define STRING_limb0 STR_l STR_i STR_m STR_b \"\\0\"\n#define STRING_limbu0 STR_l STR_i STR_m STR_b STR_u \"\\0\"\n#define STRING_lina0 STR_l STR_i STR_n STR_a \"\\0\"\n#define STRING_linb0 STR_l STR_i STR_n STR_b \"\\0\"\n#define STRING_lineara0 STR_l STR_i STR_n STR_e STR_a STR_r STR_a \"\\0\"\n#define STRING_linearb0 STR_l STR_i STR_n STR_e STR_a STR_r STR_b \"\\0\"\n#define STRING_lisu0 STR_l STR_i STR_s STR_u \"\\0\"\n#define STRING_ll0 STR_l STR_l \"\\0\"\n#define STRING_lm0 STR_l STR_m \"\\0\"\n#define STRING_lo0 STR_l STR_o \"\\0\"\n#define STRING_loe0 STR_l STR_o STR_e \"\\0\"\n#define STRING_logicalorderexception0 STR_l STR_o STR_g STR_i STR_c STR_a STR_l STR_o STR_r STR_d STR_e STR_r STR_e STR_x STR_c STR_e STR_p STR_t STR_i STR_o STR_n \"\\0\"\n#define STRING_lower0 STR_l STR_o STR_w STR_e STR_r \"\\0\"\n#define STRING_lowercase0 STR_l STR_o STR_w STR_e STR_r STR_c STR_a STR_s STR_e \"\\0\"\n#define STRING_lt0 STR_l STR_t \"\\0\"\n#define STRING_lu0 STR_l STR_u \"\\0\"\n#define STRING_lyci0 STR_l STR_y STR_c STR_i \"\\0\"\n#define STRING_lycian0 STR_l STR_y STR_c STR_i STR_a STR_n \"\\0\"\n#define STRING_lydi0 STR_l STR_y STR_d STR_i \"\\0\"\n#define STRING_lydian0 STR_l STR_y STR_d STR_i STR_a STR_n \"\\0\"\n#define STRING_m0 STR_m \"\\0\"\n#define STRING_mahajani0 STR_m STR_a STR_h STR_a STR_j STR_a STR_n STR_i \"\\0\"\n#define STRING_mahj0 STR_m STR_a STR_h STR_j \"\\0\"\n#define STRING_maka0 STR_m STR_a STR_k STR_a \"\\0\"\n#define STRING_makasar0 STR_m STR_a STR_k STR_a STR_s STR_a STR_r \"\\0\"\n#define STRING_malayalam0 STR_m STR_a STR_l STR_a STR_y STR_a STR_l STR_a STR_m \"\\0\"\n#define STRING_mand0 STR_m STR_a STR_n STR_d \"\\0\"\n#define STRING_mandaic0 STR_m STR_a STR_n STR_d STR_a STR_i STR_c \"\\0\"\n#define STRING_mani0 STR_m STR_a STR_n STR_i \"\\0\"\n#define STRING_manichaean0 STR_m STR_a STR_n STR_i STR_c STR_h STR_a STR_e STR_a STR_n \"\\0\"\n#define STRING_marc0 STR_m STR_a STR_r STR_c \"\\0\"\n#define STRING_marchen0 STR_m STR_a STR_r STR_c STR_h STR_e STR_n \"\\0\"\n#define STRING_masaramgondi0 STR_m STR_a STR_s STR_a STR_r STR_a STR_m STR_g STR_o STR_n STR_d STR_i \"\\0\"\n#define STRING_math0 STR_m STR_a STR_t STR_h \"\\0\"\n#define STRING_mc0 STR_m STR_c \"\\0\"\n#define STRING_mcm0 STR_m STR_c STR_m \"\\0\"\n#define STRING_me0 STR_m STR_e \"\\0\"\n#define STRING_medefaidrin0 STR_m STR_e STR_d STR_e STR_f STR_a STR_i STR_d STR_r STR_i STR_n \"\\0\"\n#define STRING_medf0 STR_m STR_e STR_d STR_f \"\\0\"\n#define STRING_meeteimayek0 STR_m STR_e STR_e STR_t STR_e STR_i STR_m STR_a STR_y STR_e STR_k \"\\0\"\n#define STRING_mend0 STR_m STR_e STR_n STR_d \"\\0\"\n#define STRING_mendekikakui0 STR_m STR_e STR_n STR_d STR_e STR_k STR_i STR_k STR_a STR_k STR_u STR_i \"\\0\"\n#define STRING_merc0 STR_m STR_e STR_r STR_c \"\\0\"\n#define STRING_mero0 STR_m STR_e STR_r STR_o \"\\0\"\n#define STRING_meroiticcursive0 STR_m STR_e STR_r STR_o STR_i STR_t STR_i STR_c STR_c STR_u STR_r STR_s STR_i STR_v STR_e \"\\0\"\n#define STRING_meroitichieroglyphs0 STR_m STR_e STR_r STR_o STR_i STR_t STR_i STR_c STR_h STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s \"\\0\"\n#define STRING_miao0 STR_m STR_i STR_a STR_o \"\\0\"\n#define STRING_mlym0 STR_m STR_l STR_y STR_m \"\\0\"\n#define STRING_mn0 STR_m STR_n \"\\0\"\n#define STRING_modi0 STR_m STR_o STR_d STR_i \"\\0\"\n#define STRING_modifiercombiningmark0 STR_m STR_o STR_d STR_i STR_f STR_i STR_e STR_r STR_c STR_o STR_m STR_b STR_i STR_n STR_i STR_n STR_g STR_m STR_a STR_r STR_k \"\\0\"\n#define STRING_mong0 STR_m STR_o STR_n STR_g \"\\0\"\n#define STRING_mongolian0 STR_m STR_o STR_n STR_g STR_o STR_l STR_i STR_a STR_n \"\\0\"\n#define STRING_mro0 STR_m STR_r STR_o \"\\0\"\n#define STRING_mroo0 STR_m STR_r STR_o STR_o \"\\0\"\n#define STRING_mtei0 STR_m STR_t STR_e STR_i \"\\0\"\n#define STRING_mult0 STR_m STR_u STR_l STR_t \"\\0\"\n#define STRING_multani0 STR_m STR_u STR_l STR_t STR_a STR_n STR_i \"\\0\"\n#define STRING_myanmar0 STR_m STR_y STR_a STR_n STR_m STR_a STR_r \"\\0\"\n#define STRING_mymr0 STR_m STR_y STR_m STR_r \"\\0\"\n#define STRING_n0 STR_n \"\\0\"\n#define STRING_nabataean0 STR_n STR_a STR_b STR_a STR_t STR_a STR_e STR_a STR_n \"\\0\"\n#define STRING_nagm0 STR_n STR_a STR_g STR_m \"\\0\"\n#define STRING_nagmundari0 STR_n STR_a STR_g STR_m STR_u STR_n STR_d STR_a STR_r STR_i \"\\0\"\n#define STRING_nand0 STR_n STR_a STR_n STR_d \"\\0\"\n#define STRING_nandinagari0 STR_n STR_a STR_n STR_d STR_i STR_n STR_a STR_g STR_a STR_r STR_i \"\\0\"\n#define STRING_narb0 STR_n STR_a STR_r STR_b \"\\0\"\n#define STRING_nbat0 STR_n STR_b STR_a STR_t \"\\0\"\n#define STRING_nchar0 STR_n STR_c STR_h STR_a STR_r \"\\0\"\n#define STRING_nd0 STR_n STR_d \"\\0\"\n#define STRING_newa0 STR_n STR_e STR_w STR_a \"\\0\"\n#define STRING_newtailue0 STR_n STR_e STR_w STR_t STR_a STR_i STR_l STR_u STR_e \"\\0\"\n#define STRING_nko0 STR_n STR_k STR_o \"\\0\"\n#define STRING_nkoo0 STR_n STR_k STR_o STR_o \"\\0\"\n#define STRING_nl0 STR_n STR_l \"\\0\"\n#define STRING_no0 STR_n STR_o \"\\0\"\n#define STRING_noncharactercodepoint0 STR_n STR_o STR_n STR_c STR_h STR_a STR_r STR_a STR_c STR_t STR_e STR_r STR_c STR_o STR_d STR_e STR_p STR_o STR_i STR_n STR_t \"\\0\"\n#define STRING_nshu0 STR_n STR_s STR_h STR_u \"\\0\"\n#define STRING_nushu0 STR_n STR_u STR_s STR_h STR_u \"\\0\"\n#define STRING_nyiakengpuachuehmong0 STR_n STR_y STR_i STR_a STR_k STR_e STR_n STR_g STR_p STR_u STR_a STR_c STR_h STR_u STR_e STR_h STR_m STR_o STR_n STR_g \"\\0\"\n#define STRING_ogam0 STR_o STR_g STR_a STR_m \"\\0\"\n#define STRING_ogham0 STR_o STR_g STR_h STR_a STR_m \"\\0\"\n#define STRING_olchiki0 STR_o STR_l STR_c STR_h STR_i STR_k STR_i \"\\0\"\n#define STRING_olck0 STR_o STR_l STR_c STR_k \"\\0\"\n#define STRING_oldhungarian0 STR_o STR_l STR_d STR_h STR_u STR_n STR_g STR_a STR_r STR_i STR_a STR_n \"\\0\"\n#define STRING_olditalic0 STR_o STR_l STR_d STR_i STR_t STR_a STR_l STR_i STR_c \"\\0\"\n#define STRING_oldnortharabian0 STR_o STR_l STR_d STR_n STR_o STR_r STR_t STR_h STR_a STR_r STR_a STR_b STR_i STR_a STR_n \"\\0\"\n#define STRING_oldpermic0 STR_o STR_l STR_d STR_p STR_e STR_r STR_m STR_i STR_c \"\\0\"\n#define STRING_oldpersian0 STR_o STR_l STR_d STR_p STR_e STR_r STR_s STR_i STR_a STR_n \"\\0\"\n#define STRING_oldsogdian0 STR_o STR_l STR_d STR_s STR_o STR_g STR_d STR_i STR_a STR_n \"\\0\"\n#define STRING_oldsoutharabian0 STR_o STR_l STR_d STR_s STR_o STR_u STR_t STR_h STR_a STR_r STR_a STR_b STR_i STR_a STR_n \"\\0\"\n#define STRING_oldturkic0 STR_o STR_l STR_d STR_t STR_u STR_r STR_k STR_i STR_c \"\\0\"\n#define STRING_olduyghur0 STR_o STR_l STR_d STR_u STR_y STR_g STR_h STR_u STR_r \"\\0\"\n#define STRING_olonal0 STR_o STR_l STR_o STR_n STR_a STR_l \"\\0\"\n#define STRING_onao0 STR_o STR_n STR_a STR_o \"\\0\"\n#define STRING_oriya0 STR_o STR_r STR_i STR_y STR_a \"\\0\"\n#define STRING_orkh0 STR_o STR_r STR_k STR_h \"\\0\"\n#define STRING_orya0 STR_o STR_r STR_y STR_a \"\\0\"\n#define STRING_osage0 STR_o STR_s STR_a STR_g STR_e \"\\0\"\n#define STRING_osge0 STR_o STR_s STR_g STR_e \"\\0\"\n#define STRING_osma0 STR_o STR_s STR_m STR_a \"\\0\"\n#define STRING_osmanya0 STR_o STR_s STR_m STR_a STR_n STR_y STR_a \"\\0\"\n#define STRING_ougr0 STR_o STR_u STR_g STR_r \"\\0\"\n#define STRING_p0 STR_p \"\\0\"\n#define STRING_pahawhhmong0 STR_p STR_a STR_h STR_a STR_w STR_h STR_h STR_m STR_o STR_n STR_g \"\\0\"\n#define STRING_palm0 STR_p STR_a STR_l STR_m \"\\0\"\n#define STRING_palmyrene0 STR_p STR_a STR_l STR_m STR_y STR_r STR_e STR_n STR_e \"\\0\"\n#define STRING_patsyn0 STR_p STR_a STR_t STR_s STR_y STR_n \"\\0\"\n#define STRING_patternsyntax0 STR_p STR_a STR_t STR_t STR_e STR_r STR_n STR_s STR_y STR_n STR_t STR_a STR_x \"\\0\"\n#define STRING_patternwhitespace0 STR_p STR_a STR_t STR_t STR_e STR_r STR_n STR_w STR_h STR_i STR_t STR_e STR_s STR_p STR_a STR_c STR_e \"\\0\"\n#define STRING_patws0 STR_p STR_a STR_t STR_w STR_s \"\\0\"\n#define STRING_pauc0 STR_p STR_a STR_u STR_c \"\\0\"\n#define STRING_paucinhau0 STR_p STR_a STR_u STR_c STR_i STR_n STR_h STR_a STR_u \"\\0\"\n#define STRING_pc0 STR_p STR_c \"\\0\"\n#define STRING_pcm0 STR_p STR_c STR_m \"\\0\"\n#define STRING_pd0 STR_p STR_d \"\\0\"\n#define STRING_pe0 STR_p STR_e \"\\0\"\n#define STRING_perm0 STR_p STR_e STR_r STR_m \"\\0\"\n#define STRING_pf0 STR_p STR_f \"\\0\"\n#define STRING_phag0 STR_p STR_h STR_a STR_g \"\\0\"\n#define STRING_phagspa0 STR_p STR_h STR_a STR_g STR_s STR_p STR_a \"\\0\"\n#define STRING_phli0 STR_p STR_h STR_l STR_i \"\\0\"\n#define STRING_phlp0 STR_p STR_h STR_l STR_p \"\\0\"\n#define STRING_phnx0 STR_p STR_h STR_n STR_x \"\\0\"\n#define STRING_phoenician0 STR_p STR_h STR_o STR_e STR_n STR_i STR_c STR_i STR_a STR_n \"\\0\"\n#define STRING_pi0 STR_p STR_i \"\\0\"\n#define STRING_plrd0 STR_p STR_l STR_r STR_d \"\\0\"\n#define STRING_po0 STR_p STR_o \"\\0\"\n#define STRING_prependedconcatenationmark0 STR_p STR_r STR_e STR_p STR_e STR_n STR_d STR_e STR_d STR_c STR_o STR_n STR_c STR_a STR_t STR_e STR_n STR_a STR_t STR_i STR_o STR_n STR_m STR_a STR_r STR_k \"\\0\"\n#define STRING_prti0 STR_p STR_r STR_t STR_i \"\\0\"\n#define STRING_ps0 STR_p STR_s \"\\0\"\n#define STRING_psalterpahlavi0 STR_p STR_s STR_a STR_l STR_t STR_e STR_r STR_p STR_a STR_h STR_l STR_a STR_v STR_i \"\\0\"\n#define STRING_qaac0 STR_q STR_a STR_a STR_c \"\\0\"\n#define STRING_qaai0 STR_q STR_a STR_a STR_i \"\\0\"\n#define STRING_qmark0 STR_q STR_m STR_a STR_r STR_k \"\\0\"\n#define STRING_quotationmark0 STR_q STR_u STR_o STR_t STR_a STR_t STR_i STR_o STR_n STR_m STR_a STR_r STR_k \"\\0\"\n#define STRING_radical0 STR_r STR_a STR_d STR_i STR_c STR_a STR_l \"\\0\"\n#define STRING_regionalindicator0 STR_r STR_e STR_g STR_i STR_o STR_n STR_a STR_l STR_i STR_n STR_d STR_i STR_c STR_a STR_t STR_o STR_r \"\\0\"\n#define STRING_rejang0 STR_r STR_e STR_j STR_a STR_n STR_g \"\\0\"\n#define STRING_ri0 STR_r STR_i \"\\0\"\n#define STRING_rjng0 STR_r STR_j STR_n STR_g \"\\0\"\n#define STRING_rohg0 STR_r STR_o STR_h STR_g \"\\0\"\n#define STRING_runic0 STR_r STR_u STR_n STR_i STR_c \"\\0\"\n#define STRING_runr0 STR_r STR_u STR_n STR_r \"\\0\"\n#define STRING_s0 STR_s \"\\0\"\n#define STRING_samaritan0 STR_s STR_a STR_m STR_a STR_r STR_i STR_t STR_a STR_n \"\\0\"\n#define STRING_samr0 STR_s STR_a STR_m STR_r \"\\0\"\n#define STRING_sarb0 STR_s STR_a STR_r STR_b \"\\0\"\n#define STRING_saur0 STR_s STR_a STR_u STR_r \"\\0\"\n#define STRING_saurashtra0 STR_s STR_a STR_u STR_r STR_a STR_s STR_h STR_t STR_r STR_a \"\\0\"\n#define STRING_sc0 STR_s STR_c \"\\0\"\n#define STRING_sd0 STR_s STR_d \"\\0\"\n#define STRING_sentenceterminal0 STR_s STR_e STR_n STR_t STR_e STR_n STR_c STR_e STR_t STR_e STR_r STR_m STR_i STR_n STR_a STR_l \"\\0\"\n#define STRING_sgnw0 STR_s STR_g STR_n STR_w \"\\0\"\n#define STRING_sharada0 STR_s STR_h STR_a STR_r STR_a STR_d STR_a \"\\0\"\n#define STRING_shavian0 STR_s STR_h STR_a STR_v STR_i STR_a STR_n \"\\0\"\n#define STRING_shaw0 STR_s STR_h STR_a STR_w \"\\0\"\n#define STRING_shrd0 STR_s STR_h STR_r STR_d \"\\0\"\n#define STRING_sidd0 STR_s STR_i STR_d STR_d \"\\0\"\n#define STRING_siddham0 STR_s STR_i STR_d STR_d STR_h STR_a STR_m \"\\0\"\n#define STRING_sidetic0 STR_s STR_i STR_d STR_e STR_t STR_i STR_c \"\\0\"\n#define STRING_sidt0 STR_s STR_i STR_d STR_t \"\\0\"\n#define STRING_signwriting0 STR_s STR_i STR_g STR_n STR_w STR_r STR_i STR_t STR_i STR_n STR_g \"\\0\"\n#define STRING_sind0 STR_s STR_i STR_n STR_d \"\\0\"\n#define STRING_sinh0 STR_s STR_i STR_n STR_h \"\\0\"\n#define STRING_sinhala0 STR_s STR_i STR_n STR_h STR_a STR_l STR_a \"\\0\"\n#define STRING_sk0 STR_s STR_k \"\\0\"\n#define STRING_sm0 STR_s STR_m \"\\0\"\n#define STRING_so0 STR_s STR_o \"\\0\"\n#define STRING_softdotted0 STR_s STR_o STR_f STR_t STR_d STR_o STR_t STR_t STR_e STR_d \"\\0\"\n#define STRING_sogd0 STR_s STR_o STR_g STR_d \"\\0\"\n#define STRING_sogdian0 STR_s STR_o STR_g STR_d STR_i STR_a STR_n \"\\0\"\n#define STRING_sogo0 STR_s STR_o STR_g STR_o \"\\0\"\n#define STRING_sora0 STR_s STR_o STR_r STR_a \"\\0\"\n#define STRING_sorasompeng0 STR_s STR_o STR_r STR_a STR_s STR_o STR_m STR_p STR_e STR_n STR_g \"\\0\"\n#define STRING_soyo0 STR_s STR_o STR_y STR_o \"\\0\"\n#define STRING_soyombo0 STR_s STR_o STR_y STR_o STR_m STR_b STR_o \"\\0\"\n#define STRING_space0 STR_s STR_p STR_a STR_c STR_e \"\\0\"\n#define STRING_sterm0 STR_s STR_t STR_e STR_r STR_m \"\\0\"\n#define STRING_sund0 STR_s STR_u STR_n STR_d \"\\0\"\n#define STRING_sundanese0 STR_s STR_u STR_n STR_d STR_a STR_n STR_e STR_s STR_e \"\\0\"\n#define STRING_sunu0 STR_s STR_u STR_n STR_u \"\\0\"\n#define STRING_sunuwar0 STR_s STR_u STR_n STR_u STR_w STR_a STR_r \"\\0\"\n#define STRING_sylo0 STR_s STR_y STR_l STR_o \"\\0\"\n#define STRING_sylotinagri0 STR_s STR_y STR_l STR_o STR_t STR_i STR_n STR_a STR_g STR_r STR_i \"\\0\"\n#define STRING_syrc0 STR_s STR_y STR_r STR_c \"\\0\"\n#define STRING_syriac0 STR_s STR_y STR_r STR_i STR_a STR_c \"\\0\"\n#define STRING_tagalog0 STR_t STR_a STR_g STR_a STR_l STR_o STR_g \"\\0\"\n#define STRING_tagb0 STR_t STR_a STR_g STR_b \"\\0\"\n#define STRING_tagbanwa0 STR_t STR_a STR_g STR_b STR_a STR_n STR_w STR_a \"\\0\"\n#define STRING_taile0 STR_t STR_a STR_i STR_l STR_e \"\\0\"\n#define STRING_taitham0 STR_t STR_a STR_i STR_t STR_h STR_a STR_m \"\\0\"\n#define STRING_taiviet0 STR_t STR_a STR_i STR_v STR_i STR_e STR_t \"\\0\"\n#define STRING_taiyo0 STR_t STR_a STR_i STR_y STR_o \"\\0\"\n#define STRING_takr0 STR_t STR_a STR_k STR_r \"\\0\"\n#define STRING_takri0 STR_t STR_a STR_k STR_r STR_i \"\\0\"\n#define STRING_tale0 STR_t STR_a STR_l STR_e \"\\0\"\n#define STRING_talu0 STR_t STR_a STR_l STR_u \"\\0\"\n#define STRING_tamil0 STR_t STR_a STR_m STR_i STR_l \"\\0\"\n#define STRING_taml0 STR_t STR_a STR_m STR_l \"\\0\"\n#define STRING_tang0 STR_t STR_a STR_n STR_g \"\\0\"\n#define STRING_tangsa0 STR_t STR_a STR_n STR_g STR_s STR_a \"\\0\"\n#define STRING_tangut0 STR_t STR_a STR_n STR_g STR_u STR_t \"\\0\"\n#define STRING_tavt0 STR_t STR_a STR_v STR_t \"\\0\"\n#define STRING_tayo0 STR_t STR_a STR_y STR_o \"\\0\"\n#define STRING_telu0 STR_t STR_e STR_l STR_u \"\\0\"\n#define STRING_telugu0 STR_t STR_e STR_l STR_u STR_g STR_u \"\\0\"\n#define STRING_term0 STR_t STR_e STR_r STR_m \"\\0\"\n#define STRING_terminalpunctuation0 STR_t STR_e STR_r STR_m STR_i STR_n STR_a STR_l STR_p STR_u STR_n STR_c STR_t STR_u STR_a STR_t STR_i STR_o STR_n \"\\0\"\n#define STRING_tfng0 STR_t STR_f STR_n STR_g \"\\0\"\n#define STRING_tglg0 STR_t STR_g STR_l STR_g \"\\0\"\n#define STRING_thaa0 STR_t STR_h STR_a STR_a \"\\0\"\n#define STRING_thaana0 STR_t STR_h STR_a STR_a STR_n STR_a \"\\0\"\n#define STRING_thai0 STR_t STR_h STR_a STR_i \"\\0\"\n#define STRING_tibetan0 STR_t STR_i STR_b STR_e STR_t STR_a STR_n \"\\0\"\n#define STRING_tibt0 STR_t STR_i STR_b STR_t \"\\0\"\n#define STRING_tifinagh0 STR_t STR_i STR_f STR_i STR_n STR_a STR_g STR_h \"\\0\"\n#define STRING_tirh0 STR_t STR_i STR_r STR_h \"\\0\"\n#define STRING_tirhuta0 STR_t STR_i STR_r STR_h STR_u STR_t STR_a \"\\0\"\n#define STRING_tnsa0 STR_t STR_n STR_s STR_a \"\\0\"\n#define STRING_todhri0 STR_t STR_o STR_d STR_h STR_r STR_i \"\\0\"\n#define STRING_todr0 STR_t STR_o STR_d STR_r \"\\0\"\n#define STRING_tolongsiki0 STR_t STR_o STR_l STR_o STR_n STR_g STR_s STR_i STR_k STR_i \"\\0\"\n#define STRING_tols0 STR_t STR_o STR_l STR_s \"\\0\"\n#define STRING_toto0 STR_t STR_o STR_t STR_o \"\\0\"\n#define STRING_tulutigalari0 STR_t STR_u STR_l STR_u STR_t STR_i STR_g STR_a STR_l STR_a STR_r STR_i \"\\0\"\n#define STRING_tutg0 STR_t STR_u STR_t STR_g \"\\0\"\n#define STRING_ugar0 STR_u STR_g STR_a STR_r \"\\0\"\n#define STRING_ugaritic0 STR_u STR_g STR_a STR_r STR_i STR_t STR_i STR_c \"\\0\"\n#define STRING_uideo0 STR_u STR_i STR_d STR_e STR_o \"\\0\"\n#define STRING_unifiedideograph0 STR_u STR_n STR_i STR_f STR_i STR_e STR_d STR_i STR_d STR_e STR_o STR_g STR_r STR_a STR_p STR_h \"\\0\"\n#define STRING_unknown0 STR_u STR_n STR_k STR_n STR_o STR_w STR_n \"\\0\"\n#define STRING_upper0 STR_u STR_p STR_p STR_e STR_r \"\\0\"\n#define STRING_uppercase0 STR_u STR_p STR_p STR_e STR_r STR_c STR_a STR_s STR_e \"\\0\"\n#define STRING_vai0 STR_v STR_a STR_i \"\\0\"\n#define STRING_vaii0 STR_v STR_a STR_i STR_i \"\\0\"\n#define STRING_variationselector0 STR_v STR_a STR_r STR_i STR_a STR_t STR_i STR_o STR_n STR_s STR_e STR_l STR_e STR_c STR_t STR_o STR_r \"\\0\"\n#define STRING_vith0 STR_v STR_i STR_t STR_h \"\\0\"\n#define STRING_vithkuqi0 STR_v STR_i STR_t STR_h STR_k STR_u STR_q STR_i \"\\0\"\n#define STRING_vs0 STR_v STR_s \"\\0\"\n#define STRING_wancho0 STR_w STR_a STR_n STR_c STR_h STR_o \"\\0\"\n#define STRING_wara0 STR_w STR_a STR_r STR_a \"\\0\"\n#define STRING_warangciti0 STR_w STR_a STR_r STR_a STR_n STR_g STR_c STR_i STR_t STR_i \"\\0\"\n#define STRING_wcho0 STR_w STR_c STR_h STR_o \"\\0\"\n#define STRING_whitespace0 STR_w STR_h STR_i STR_t STR_e STR_s STR_p STR_a STR_c STR_e \"\\0\"\n#define STRING_wspace0 STR_w STR_s STR_p STR_a STR_c STR_e \"\\0\"\n#define STRING_xan0 STR_x STR_a STR_n \"\\0\"\n#define STRING_xidc0 STR_x STR_i STR_d STR_c \"\\0\"\n#define STRING_xidcontinue0 STR_x STR_i STR_d STR_c STR_o STR_n STR_t STR_i STR_n STR_u STR_e \"\\0\"\n#define STRING_xids0 STR_x STR_i STR_d STR_s \"\\0\"\n#define STRING_xidstart0 STR_x STR_i STR_d STR_s STR_t STR_a STR_r STR_t \"\\0\"\n#define STRING_xpeo0 STR_x STR_p STR_e STR_o \"\\0\"\n#define STRING_xps0 STR_x STR_p STR_s \"\\0\"\n#define STRING_xsp0 STR_x STR_s STR_p \"\\0\"\n#define STRING_xsux0 STR_x STR_s STR_u STR_x \"\\0\"\n#define STRING_xuc0 STR_x STR_u STR_c \"\\0\"\n#define STRING_xwd0 STR_x STR_w STR_d \"\\0\"\n#define STRING_yezi0 STR_y STR_e STR_z STR_i \"\\0\"\n#define STRING_yezidi0 STR_y STR_e STR_z STR_i STR_d STR_i \"\\0\"\n#define STRING_yi0 STR_y STR_i \"\\0\"\n#define STRING_yiii0 STR_y STR_i STR_i STR_i \"\\0\"\n#define STRING_z0 STR_z \"\\0\"\n#define STRING_zanabazarsquare0 STR_z STR_a STR_n STR_a STR_b STR_a STR_z STR_a STR_r STR_s STR_q STR_u STR_a STR_r STR_e \"\\0\"\n#define STRING_zanb0 STR_z STR_a STR_n STR_b \"\\0\"\n#define STRING_zinh0 STR_z STR_i STR_n STR_h \"\\0\"\n#define STRING_zl0 STR_z STR_l \"\\0\"\n#define STRING_zp0 STR_z STR_p \"\\0\"\n#define STRING_zs0 STR_z STR_s \"\\0\"\n#define STRING_zyyy0 STR_z STR_y STR_y STR_y \"\\0\"\n#define STRING_zzzz0 STR_z STR_z STR_z STR_z \"\\0\"\n\nconst char PRIV(utt_names)[] =\n  STRING_adlam0\n  STRING_adlm0\n  STRING_aghb0\n  STRING_ahex0\n  STRING_ahom0\n  STRING_alpha0\n  STRING_alphabetic0\n  STRING_anatolianhieroglyphs0\n  STRING_any0\n  STRING_arab0\n  STRING_arabic0\n  STRING_armenian0\n  STRING_armi0\n  STRING_armn0\n  STRING_ascii0\n  STRING_asciihexdigit0\n  STRING_avestan0\n  STRING_avst0\n  STRING_bali0\n  STRING_balinese0\n  STRING_bamu0\n  STRING_bamum0\n  STRING_bass0\n  STRING_bassavah0\n  STRING_batak0\n  STRING_batk0\n  STRING_beng0\n  STRING_bengali0\n  STRING_berf0\n  STRING_beriaerfe0\n  STRING_bhaiksuki0\n  STRING_bhks0\n  STRING_bidial0\n  STRING_bidian0\n  STRING_bidib0\n  STRING_bidibn0\n  STRING_bidic0\n  STRING_bidicontrol0\n  STRING_bidics0\n  STRING_bidien0\n  STRING_bidies0\n  STRING_bidiet0\n  STRING_bidifsi0\n  STRING_bidil0\n  STRING_bidilre0\n  STRING_bidilri0\n  STRING_bidilro0\n  STRING_bidim0\n  STRING_bidimirrored0\n  STRING_bidinsm0\n  STRING_bidion0\n  STRING_bidipdf0\n  STRING_bidipdi0\n  STRING_bidir0\n  STRING_bidirle0\n  STRING_bidirli0\n  STRING_bidirlo0\n  STRING_bidis0\n  STRING_bidiws0\n  STRING_bopo0\n  STRING_bopomofo0\n  STRING_brah0\n  STRING_brahmi0\n  STRING_brai0\n  STRING_braille0\n  STRING_bugi0\n  STRING_buginese0\n  STRING_buhd0\n  STRING_buhid0\n  STRING_c0\n  STRING_cakm0\n  STRING_canadianaboriginal0\n  STRING_cans0\n  STRING_cari0\n  STRING_carian0\n  STRING_cased0\n  STRING_caseignorable0\n  STRING_caucasianalbanian0\n  STRING_cc0\n  STRING_cf0\n  STRING_chakma0\n  STRING_cham0\n  STRING_changeswhencasefolded0\n  STRING_changeswhencasemapped0\n  STRING_changeswhenlowercased0\n  STRING_changeswhentitlecased0\n  STRING_changeswhenuppercased0\n  STRING_cher0\n  STRING_cherokee0\n  STRING_chorasmian0\n  STRING_chrs0\n  STRING_ci0\n  STRING_cn0\n  STRING_co0\n  STRING_common0\n  STRING_copt0\n  STRING_coptic0\n  STRING_cpmn0\n  STRING_cprt0\n  STRING_cs0\n  STRING_cuneiform0\n  STRING_cwcf0\n  STRING_cwcm0\n  STRING_cwl0\n  STRING_cwt0\n  STRING_cwu0\n  STRING_cypriot0\n  STRING_cyprominoan0\n  STRING_cyrillic0\n  STRING_cyrl0\n  STRING_dash0\n  STRING_defaultignorablecodepoint0\n  STRING_dep0\n  STRING_deprecated0\n  STRING_deseret0\n  STRING_deva0\n  STRING_devanagari0\n  STRING_di0\n  STRING_dia0\n  STRING_diacritic0\n  STRING_diak0\n  STRING_divesakuru0\n  STRING_dogr0\n  STRING_dogra0\n  STRING_dsrt0\n  STRING_dupl0\n  STRING_duployan0\n  STRING_ebase0\n  STRING_ecomp0\n  STRING_egyp0\n  STRING_egyptianhieroglyphs0\n  STRING_elba0\n  STRING_elbasan0\n  STRING_elym0\n  STRING_elymaic0\n  STRING_emod0\n  STRING_emoji0\n  STRING_emojicomponent0\n  STRING_emojimodifier0\n  STRING_emojimodifierbase0\n  STRING_emojipresentation0\n  STRING_epres0\n  STRING_ethi0\n  STRING_ethiopic0\n  STRING_ext0\n  STRING_extendedpictographic0\n  STRING_extender0\n  STRING_extpict0\n  STRING_gara0\n  STRING_garay0\n  STRING_geor0\n  STRING_georgian0\n  STRING_glag0\n  STRING_glagolitic0\n  STRING_gong0\n  STRING_gonm0\n  STRING_goth0\n  STRING_gothic0\n  STRING_gran0\n  STRING_grantha0\n  STRING_graphemebase0\n  STRING_graphemeextend0\n  STRING_graphemelink0\n  STRING_grbase0\n  STRING_greek0\n  STRING_grek0\n  STRING_grext0\n  STRING_grlink0\n  STRING_gujarati0\n  STRING_gujr0\n  STRING_gukh0\n  STRING_gunjalagondi0\n  STRING_gurmukhi0\n  STRING_guru0\n  STRING_gurungkhema0\n  STRING_han0\n  STRING_hang0\n  STRING_hangul0\n  STRING_hani0\n  STRING_hanifirohingya0\n  STRING_hano0\n  STRING_hanunoo0\n  STRING_hatr0\n  STRING_hatran0\n  STRING_hebr0\n  STRING_hebrew0\n  STRING_hex0\n  STRING_hexdigit0\n  STRING_hira0\n  STRING_hiragana0\n  STRING_hluw0\n  STRING_hmng0\n  STRING_hmnp0\n  STRING_hung0\n  STRING_idc0\n  STRING_idcompatmathcontinue0\n  STRING_idcompatmathstart0\n  STRING_idcontinue0\n  STRING_ideo0\n  STRING_ideographic0\n  STRING_ids0\n  STRING_idsb0\n  STRING_idsbinaryoperator0\n  STRING_idst0\n  STRING_idstart0\n  STRING_idstrinaryoperator0\n  STRING_idsu0\n  STRING_idsunaryoperator0\n  STRING_imperialaramaic0\n  STRING_incb0\n  STRING_inherited0\n  STRING_inscriptionalpahlavi0\n  STRING_inscriptionalparthian0\n  STRING_ital0\n  STRING_java0\n  STRING_javanese0\n  STRING_joinc0\n  STRING_joincontrol0\n  STRING_kaithi0\n  STRING_kali0\n  STRING_kana0\n  STRING_kannada0\n  STRING_katakana0\n  STRING_kawi0\n  STRING_kayahli0\n  STRING_khar0\n  STRING_kharoshthi0\n  STRING_khitansmallscript0\n  STRING_khmer0\n  STRING_khmr0\n  STRING_khoj0\n  STRING_khojki0\n  STRING_khudawadi0\n  STRING_kiratrai0\n  STRING_kits0\n  STRING_knda0\n  STRING_krai0\n  STRING_kthi0\n  STRING_l0\n  STRING_l_AMPERSAND0\n  STRING_lana0\n  STRING_lao0\n  STRING_laoo0\n  STRING_latin0\n  STRING_latn0\n  STRING_lc0\n  STRING_lepc0\n  STRING_lepcha0\n  STRING_limb0\n  STRING_limbu0\n  STRING_lina0\n  STRING_linb0\n  STRING_lineara0\n  STRING_linearb0\n  STRING_lisu0\n  STRING_ll0\n  STRING_lm0\n  STRING_lo0\n  STRING_loe0\n  STRING_logicalorderexception0\n  STRING_lower0\n  STRING_lowercase0\n  STRING_lt0\n  STRING_lu0\n  STRING_lyci0\n  STRING_lycian0\n  STRING_lydi0\n  STRING_lydian0\n  STRING_m0\n  STRING_mahajani0\n  STRING_mahj0\n  STRING_maka0\n  STRING_makasar0\n  STRING_malayalam0\n  STRING_mand0\n  STRING_mandaic0\n  STRING_mani0\n  STRING_manichaean0\n  STRING_marc0\n  STRING_marchen0\n  STRING_masaramgondi0\n  STRING_math0\n  STRING_mc0\n  STRING_mcm0\n  STRING_me0\n  STRING_medefaidrin0\n  STRING_medf0\n  STRING_meeteimayek0\n  STRING_mend0\n  STRING_mendekikakui0\n  STRING_merc0\n  STRING_mero0\n  STRING_meroiticcursive0\n  STRING_meroitichieroglyphs0\n  STRING_miao0\n  STRING_mlym0\n  STRING_mn0\n  STRING_modi0\n  STRING_modifiercombiningmark0\n  STRING_mong0\n  STRING_mongolian0\n  STRING_mro0\n  STRING_mroo0\n  STRING_mtei0\n  STRING_mult0\n  STRING_multani0\n  STRING_myanmar0\n  STRING_mymr0\n  STRING_n0\n  STRING_nabataean0\n  STRING_nagm0\n  STRING_nagmundari0\n  STRING_nand0\n  STRING_nandinagari0\n  STRING_narb0\n  STRING_nbat0\n  STRING_nchar0\n  STRING_nd0\n  STRING_newa0\n  STRING_newtailue0\n  STRING_nko0\n  STRING_nkoo0\n  STRING_nl0\n  STRING_no0\n  STRING_noncharactercodepoint0\n  STRING_nshu0\n  STRING_nushu0\n  STRING_nyiakengpuachuehmong0\n  STRING_ogam0\n  STRING_ogham0\n  STRING_olchiki0\n  STRING_olck0\n  STRING_oldhungarian0\n  STRING_olditalic0\n  STRING_oldnortharabian0\n  STRING_oldpermic0\n  STRING_oldpersian0\n  STRING_oldsogdian0\n  STRING_oldsoutharabian0\n  STRING_oldturkic0\n  STRING_olduyghur0\n  STRING_olonal0\n  STRING_onao0\n  STRING_oriya0\n  STRING_orkh0\n  STRING_orya0\n  STRING_osage0\n  STRING_osge0\n  STRING_osma0\n  STRING_osmanya0\n  STRING_ougr0\n  STRING_p0\n  STRING_pahawhhmong0\n  STRING_palm0\n  STRING_palmyrene0\n  STRING_patsyn0\n  STRING_patternsyntax0\n  STRING_patternwhitespace0\n  STRING_patws0\n  STRING_pauc0\n  STRING_paucinhau0\n  STRING_pc0\n  STRING_pcm0\n  STRING_pd0\n  STRING_pe0\n  STRING_perm0\n  STRING_pf0\n  STRING_phag0\n  STRING_phagspa0\n  STRING_phli0\n  STRING_phlp0\n  STRING_phnx0\n  STRING_phoenician0\n  STRING_pi0\n  STRING_plrd0\n  STRING_po0\n  STRING_prependedconcatenationmark0\n  STRING_prti0\n  STRING_ps0\n  STRING_psalterpahlavi0\n  STRING_qaac0\n  STRING_qaai0\n  STRING_qmark0\n  STRING_quotationmark0\n  STRING_radical0\n  STRING_regionalindicator0\n  STRING_rejang0\n  STRING_ri0\n  STRING_rjng0\n  STRING_rohg0\n  STRING_runic0\n  STRING_runr0\n  STRING_s0\n  STRING_samaritan0\n  STRING_samr0\n  STRING_sarb0\n  STRING_saur0\n  STRING_saurashtra0\n  STRING_sc0\n  STRING_sd0\n  STRING_sentenceterminal0\n  STRING_sgnw0\n  STRING_sharada0\n  STRING_shavian0\n  STRING_shaw0\n  STRING_shrd0\n  STRING_sidd0\n  STRING_siddham0\n  STRING_sidetic0\n  STRING_sidt0\n  STRING_signwriting0\n  STRING_sind0\n  STRING_sinh0\n  STRING_sinhala0\n  STRING_sk0\n  STRING_sm0\n  STRING_so0\n  STRING_softdotted0\n  STRING_sogd0\n  STRING_sogdian0\n  STRING_sogo0\n  STRING_sora0\n  STRING_sorasompeng0\n  STRING_soyo0\n  STRING_soyombo0\n  STRING_space0\n  STRING_sterm0\n  STRING_sund0\n  STRING_sundanese0\n  STRING_sunu0\n  STRING_sunuwar0\n  STRING_sylo0\n  STRING_sylotinagri0\n  STRING_syrc0\n  STRING_syriac0\n  STRING_tagalog0\n  STRING_tagb0\n  STRING_tagbanwa0\n  STRING_taile0\n  STRING_taitham0\n  STRING_taiviet0\n  STRING_taiyo0\n  STRING_takr0\n  STRING_takri0\n  STRING_tale0\n  STRING_talu0\n  STRING_tamil0\n  STRING_taml0\n  STRING_tang0\n  STRING_tangsa0\n  STRING_tangut0\n  STRING_tavt0\n  STRING_tayo0\n  STRING_telu0\n  STRING_telugu0\n  STRING_term0\n  STRING_terminalpunctuation0\n  STRING_tfng0\n  STRING_tglg0\n  STRING_thaa0\n  STRING_thaana0\n  STRING_thai0\n  STRING_tibetan0\n  STRING_tibt0\n  STRING_tifinagh0\n  STRING_tirh0\n  STRING_tirhuta0\n  STRING_tnsa0\n  STRING_todhri0\n  STRING_todr0\n  STRING_tolongsiki0\n  STRING_tols0\n  STRING_toto0\n  STRING_tulutigalari0\n  STRING_tutg0\n  STRING_ugar0\n  STRING_ugaritic0\n  STRING_uideo0\n  STRING_unifiedideograph0\n  STRING_unknown0\n  STRING_upper0\n  STRING_uppercase0\n  STRING_vai0\n  STRING_vaii0\n  STRING_variationselector0\n  STRING_vith0\n  STRING_vithkuqi0\n  STRING_vs0\n  STRING_wancho0\n  STRING_wara0\n  STRING_warangciti0\n  STRING_wcho0\n  STRING_whitespace0\n  STRING_wspace0\n  STRING_xan0\n  STRING_xidc0\n  STRING_xidcontinue0\n  STRING_xids0\n  STRING_xidstart0\n  STRING_xpeo0\n  STRING_xps0\n  STRING_xsp0\n  STRING_xsux0\n  STRING_xuc0\n  STRING_xwd0\n  STRING_yezi0\n  STRING_yezidi0\n  STRING_yi0\n  STRING_yiii0\n  STRING_z0\n  STRING_zanabazarsquare0\n  STRING_zanb0\n  STRING_zinh0\n  STRING_zl0\n  STRING_zp0\n  STRING_zs0\n  STRING_zyyy0\n  STRING_zzzz0;\n\nconst ucp_type_table PRIV(utt)[] = {\n  {   0, PT_SCX, ucp_Adlam },\n  {   6, PT_SCX, ucp_Adlam },\n  {  11, PT_SCX, ucp_Caucasian_Albanian },\n  {  16, PT_BOOL, ucp_ASCII_Hex_Digit },\n  {  21, PT_SC, ucp_Ahom },\n  {  26, PT_BOOL, ucp_Alphabetic },\n  {  32, PT_BOOL, ucp_Alphabetic },\n  {  43, PT_SC, ucp_Anatolian_Hieroglyphs },\n  {  64, PT_ANY, 0 },\n  {  68, PT_SCX, ucp_Arabic },\n  {  73, PT_SCX, ucp_Arabic },\n  {  80, PT_SCX, ucp_Armenian },\n  {  89, PT_SC, ucp_Imperial_Aramaic },\n  {  94, PT_SCX, ucp_Armenian },\n  {  99, PT_BOOL, ucp_ASCII },\n  { 105, PT_BOOL, ucp_ASCII_Hex_Digit },\n  { 119, PT_SCX, ucp_Avestan },\n  { 127, PT_SCX, ucp_Avestan },\n  { 132, PT_SC, ucp_Balinese },\n  { 137, PT_SC, ucp_Balinese },\n  { 146, PT_SC, ucp_Bamum },\n  { 151, PT_SC, ucp_Bamum },\n  { 157, PT_SC, ucp_Bassa_Vah },\n  { 162, PT_SC, ucp_Bassa_Vah },\n  { 171, PT_SC, ucp_Batak },\n  { 177, PT_SC, ucp_Batak },\n  { 182, PT_SCX, ucp_Bengali },\n  { 187, PT_SCX, ucp_Bengali },\n  { 195, PT_SC, ucp_Beria_Erfe },\n  { 200, PT_SC, ucp_Beria_Erfe },\n  { 210, PT_SC, ucp_Bhaiksuki },\n  { 220, PT_SC, ucp_Bhaiksuki },\n  { 225, PT_BIDICL, ucp_bidiAL },\n  { 232, PT_BIDICL, ucp_bidiAN },\n  { 239, PT_BIDICL, ucp_bidiB },\n  { 245, PT_BIDICL, ucp_bidiBN },\n  { 252, PT_BOOL, ucp_Bidi_Control },\n  { 258, PT_BOOL, ucp_Bidi_Control },\n  { 270, PT_BIDICL, ucp_bidiCS },\n  { 277, PT_BIDICL, ucp_bidiEN },\n  { 284, PT_BIDICL, ucp_bidiES },\n  { 291, PT_BIDICL, ucp_bidiET },\n  { 298, PT_BIDICL, ucp_bidiFSI },\n  { 306, PT_BIDICL, ucp_bidiL },\n  { 312, PT_BIDICL, ucp_bidiLRE },\n  { 320, PT_BIDICL, ucp_bidiLRI },\n  { 328, PT_BIDICL, ucp_bidiLRO },\n  { 336, PT_BOOL, ucp_Bidi_Mirrored },\n  { 342, PT_BOOL, ucp_Bidi_Mirrored },\n  { 355, PT_BIDICL, ucp_bidiNSM },\n  { 363, PT_BIDICL, ucp_bidiON },\n  { 370, PT_BIDICL, ucp_bidiPDF },\n  { 378, PT_BIDICL, ucp_bidiPDI },\n  { 386, PT_BIDICL, ucp_bidiR },\n  { 392, PT_BIDICL, ucp_bidiRLE },\n  { 400, PT_BIDICL, ucp_bidiRLI },\n  { 408, PT_BIDICL, ucp_bidiRLO },\n  { 416, PT_BIDICL, ucp_bidiS },\n  { 422, PT_BIDICL, ucp_bidiWS },\n  { 429, PT_SCX, ucp_Bopomofo },\n  { 434, PT_SCX, ucp_Bopomofo },\n  { 443, PT_SC, ucp_Brahmi },\n  { 448, PT_SC, ucp_Brahmi },\n  { 455, PT_SC, ucp_Braille },\n  { 460, PT_SC, ucp_Braille },\n  { 468, PT_SCX, ucp_Buginese },\n  { 473, PT_SCX, ucp_Buginese },\n  { 482, PT_SCX, ucp_Buhid },\n  { 487, PT_SCX, ucp_Buhid },\n  { 493, PT_GC, ucp_C },\n  { 495, PT_SCX, ucp_Chakma },\n  { 500, PT_SC, ucp_Canadian_Aboriginal },\n  { 519, PT_SC, ucp_Canadian_Aboriginal },\n  { 524, PT_SCX, ucp_Carian },\n  { 529, PT_SCX, ucp_Carian },\n  { 536, PT_BOOL, ucp_Cased },\n  { 542, PT_BOOL, ucp_Case_Ignorable },\n  { 556, PT_SCX, ucp_Caucasian_Albanian },\n  { 574, PT_PC, ucp_Cc },\n  { 577, PT_PC, ucp_Cf },\n  { 580, PT_SCX, ucp_Chakma },\n  { 587, PT_SC, ucp_Cham },\n  { 592, PT_BOOL, ucp_Changes_When_Casefolded },\n  { 614, PT_BOOL, ucp_Changes_When_Casemapped },\n  { 636, PT_BOOL, ucp_Changes_When_Lowercased },\n  { 658, PT_BOOL, ucp_Changes_When_Titlecased },\n  { 680, PT_BOOL, ucp_Changes_When_Uppercased },\n  { 702, PT_SCX, ucp_Cherokee },\n  { 707, PT_SCX, ucp_Cherokee },\n  { 716, PT_SC, ucp_Chorasmian },\n  { 727, PT_SC, ucp_Chorasmian },\n  { 732, PT_BOOL, ucp_Case_Ignorable },\n  { 735, PT_PC, ucp_Cn },\n  { 738, PT_PC, ucp_Co },\n  { 741, PT_SC, ucp_Common },\n  { 748, PT_SCX, ucp_Coptic },\n  { 753, PT_SCX, ucp_Coptic },\n  { 760, PT_SCX, ucp_Cypro_Minoan },\n  { 765, PT_SCX, ucp_Cypriot },\n  { 770, PT_PC, ucp_Cs },\n  { 773, PT_SC, ucp_Cuneiform },\n  { 783, PT_BOOL, ucp_Changes_When_Casefolded },\n  { 788, PT_BOOL, ucp_Changes_When_Casemapped },\n  { 793, PT_BOOL, ucp_Changes_When_Lowercased },\n  { 797, PT_BOOL, ucp_Changes_When_Titlecased },\n  { 801, PT_BOOL, ucp_Changes_When_Uppercased },\n  { 805, PT_SCX, ucp_Cypriot },\n  { 813, PT_SCX, ucp_Cypro_Minoan },\n  { 825, PT_SCX, ucp_Cyrillic },\n  { 834, PT_SCX, ucp_Cyrillic },\n  { 839, PT_BOOL, ucp_Dash },\n  { 844, PT_BOOL, ucp_Default_Ignorable_Code_Point },\n  { 870, PT_BOOL, ucp_Deprecated },\n  { 874, PT_BOOL, ucp_Deprecated },\n  { 885, PT_SC, ucp_Deseret },\n  { 893, PT_SCX, ucp_Devanagari },\n  { 898, PT_SCX, ucp_Devanagari },\n  { 909, PT_BOOL, ucp_Default_Ignorable_Code_Point },\n  { 912, PT_BOOL, ucp_Diacritic },\n  { 916, PT_BOOL, ucp_Diacritic },\n  { 926, PT_SC, ucp_Dives_Akuru },\n  { 931, PT_SC, ucp_Dives_Akuru },\n  { 942, PT_SCX, ucp_Dogra },\n  { 947, PT_SCX, ucp_Dogra },\n  { 953, PT_SC, ucp_Deseret },\n  { 958, PT_SCX, ucp_Duployan },\n  { 963, PT_SCX, ucp_Duployan },\n  { 972, PT_BOOL, ucp_Emoji_Modifier_Base },\n  { 978, PT_BOOL, ucp_Emoji_Component },\n  { 984, PT_SC, ucp_Egyptian_Hieroglyphs },\n  { 989, PT_SC, ucp_Egyptian_Hieroglyphs },\n  { 1009, PT_SCX, ucp_Elbasan },\n  { 1014, PT_SCX, ucp_Elbasan },\n  { 1022, PT_SC, ucp_Elymaic },\n  { 1027, PT_SC, ucp_Elymaic },\n  { 1035, PT_BOOL, ucp_Emoji_Modifier },\n  { 1040, PT_BOOL, ucp_Emoji },\n  { 1046, PT_BOOL, ucp_Emoji_Component },\n  { 1061, PT_BOOL, ucp_Emoji_Modifier },\n  { 1075, PT_BOOL, ucp_Emoji_Modifier_Base },\n  { 1093, PT_BOOL, ucp_Emoji_Presentation },\n  { 1111, PT_BOOL, ucp_Emoji_Presentation },\n  { 1117, PT_SCX, ucp_Ethiopic },\n  { 1122, PT_SCX, ucp_Ethiopic },\n  { 1131, PT_BOOL, ucp_Extender },\n  { 1135, PT_BOOL, ucp_Extended_Pictographic },\n  { 1156, PT_BOOL, ucp_Extender },\n  { 1165, PT_BOOL, ucp_Extended_Pictographic },\n  { 1173, PT_SCX, ucp_Garay },\n  { 1178, PT_SCX, ucp_Garay },\n  { 1184, PT_SCX, ucp_Georgian },\n  { 1189, PT_SCX, ucp_Georgian },\n  { 1198, PT_SCX, ucp_Glagolitic },\n  { 1203, PT_SCX, ucp_Glagolitic },\n  { 1214, PT_SCX, ucp_Gunjala_Gondi },\n  { 1219, PT_SCX, ucp_Masaram_Gondi },\n  { 1224, PT_SCX, ucp_Gothic },\n  { 1229, PT_SCX, ucp_Gothic },\n  { 1236, PT_SCX, ucp_Grantha },\n  { 1241, PT_SCX, ucp_Grantha },\n  { 1249, PT_BOOL, ucp_Grapheme_Base },\n  { 1262, PT_BOOL, ucp_Grapheme_Extend },\n  { 1277, PT_BOOL, ucp_Grapheme_Link },\n  { 1290, PT_BOOL, ucp_Grapheme_Base },\n  { 1297, PT_SCX, ucp_Greek },\n  { 1303, PT_SCX, ucp_Greek },\n  { 1308, PT_BOOL, ucp_Grapheme_Extend },\n  { 1314, PT_BOOL, ucp_Grapheme_Link },\n  { 1321, PT_SCX, ucp_Gujarati },\n  { 1330, PT_SCX, ucp_Gujarati },\n  { 1335, PT_SCX, ucp_Gurung_Khema },\n  { 1340, PT_SCX, ucp_Gunjala_Gondi },\n  { 1353, PT_SCX, ucp_Gurmukhi },\n  { 1362, PT_SCX, ucp_Gurmukhi },\n  { 1367, PT_SCX, ucp_Gurung_Khema },\n  { 1379, PT_SCX, ucp_Han },\n  { 1383, PT_SCX, ucp_Hangul },\n  { 1388, PT_SCX, ucp_Hangul },\n  { 1395, PT_SCX, ucp_Han },\n  { 1400, PT_SCX, ucp_Hanifi_Rohingya },\n  { 1415, PT_SCX, ucp_Hanunoo },\n  { 1420, PT_SCX, ucp_Hanunoo },\n  { 1428, PT_SC, ucp_Hatran },\n  { 1433, PT_SC, ucp_Hatran },\n  { 1440, PT_SCX, ucp_Hebrew },\n  { 1445, PT_SCX, ucp_Hebrew },\n  { 1452, PT_BOOL, ucp_Hex_Digit },\n  { 1456, PT_BOOL, ucp_Hex_Digit },\n  { 1465, PT_SCX, ucp_Hiragana },\n  { 1470, PT_SCX, ucp_Hiragana },\n  { 1479, PT_SC, ucp_Anatolian_Hieroglyphs },\n  { 1484, PT_SC, ucp_Pahawh_Hmong },\n  { 1489, PT_SC, ucp_Nyiakeng_Puachue_Hmong },\n  { 1494, PT_SCX, ucp_Old_Hungarian },\n  { 1499, PT_BOOL, ucp_ID_Continue },\n  { 1503, PT_BOOL, ucp_ID_Compat_Math_Continue },\n  { 1524, PT_BOOL, ucp_ID_Compat_Math_Start },\n  { 1542, PT_BOOL, ucp_ID_Continue },\n  { 1553, PT_BOOL, ucp_Ideographic },\n  { 1558, PT_BOOL, ucp_Ideographic },\n  { 1570, PT_BOOL, ucp_ID_Start },\n  { 1574, PT_BOOL, ucp_IDS_Binary_Operator },\n  { 1579, PT_BOOL, ucp_IDS_Binary_Operator },\n  { 1597, PT_BOOL, ucp_IDS_Trinary_Operator },\n  { 1602, PT_BOOL, ucp_ID_Start },\n  { 1610, PT_BOOL, ucp_IDS_Trinary_Operator },\n  { 1629, PT_BOOL, ucp_IDS_Unary_Operator },\n  { 1634, PT_BOOL, ucp_IDS_Unary_Operator },\n  { 1651, PT_SC, ucp_Imperial_Aramaic },\n  { 1667, PT_BOOL, ucp_InCB },\n  { 1672, PT_SC, ucp_Inherited },\n  { 1682, PT_SC, ucp_Inscriptional_Pahlavi },\n  { 1703, PT_SC, ucp_Inscriptional_Parthian },\n  { 1725, PT_SC, ucp_Old_Italic },\n  { 1730, PT_SCX, ucp_Javanese },\n  { 1735, PT_SCX, ucp_Javanese },\n  { 1744, PT_BOOL, ucp_Join_Control },\n  { 1750, PT_BOOL, ucp_Join_Control },\n  { 1762, PT_SCX, ucp_Kaithi },\n  { 1769, PT_SCX, ucp_Kayah_Li },\n  { 1774, PT_SCX, ucp_Katakana },\n  { 1779, PT_SCX, ucp_Kannada },\n  { 1787, PT_SCX, ucp_Katakana },\n  { 1796, PT_SC, ucp_Kawi },\n  { 1801, PT_SCX, ucp_Kayah_Li },\n  { 1809, PT_SC, ucp_Kharoshthi },\n  { 1814, PT_SC, ucp_Kharoshthi },\n  { 1825, PT_SC, ucp_Khitan_Small_Script },\n  { 1843, PT_SC, ucp_Khmer },\n  { 1849, PT_SC, ucp_Khmer },\n  { 1854, PT_SCX, ucp_Khojki },\n  { 1859, PT_SCX, ucp_Khojki },\n  { 1866, PT_SCX, ucp_Khudawadi },\n  { 1876, PT_SC, ucp_Kirat_Rai },\n  { 1885, PT_SC, ucp_Khitan_Small_Script },\n  { 1890, PT_SCX, ucp_Kannada },\n  { 1895, PT_SC, ucp_Kirat_Rai },\n  { 1900, PT_SCX, ucp_Kaithi },\n  { 1905, PT_GC, ucp_L },\n  { 1907, PT_LAMP, 0 },\n  { 1910, PT_SC, ucp_Tai_Tham },\n  { 1915, PT_SC, ucp_Lao },\n  { 1919, PT_SC, ucp_Lao },\n  { 1924, PT_SCX, ucp_Latin },\n  { 1930, PT_SCX, ucp_Latin },\n  { 1935, PT_LAMP, 0 },\n  { 1938, PT_SC, ucp_Lepcha },\n  { 1943, PT_SC, ucp_Lepcha },\n  { 1950, PT_SCX, ucp_Limbu },\n  { 1955, PT_SCX, ucp_Limbu },\n  { 1961, PT_SCX, ucp_Linear_A },\n  { 1966, PT_SCX, ucp_Linear_B },\n  { 1971, PT_SCX, ucp_Linear_A },\n  { 1979, PT_SCX, ucp_Linear_B },\n  { 1987, PT_SCX, ucp_Lisu },\n  { 1992, PT_PC, ucp_Ll },\n  { 1995, PT_PC, ucp_Lm },\n  { 1998, PT_PC, ucp_Lo },\n  { 2001, PT_BOOL, ucp_Logical_Order_Exception },\n  { 2005, PT_BOOL, ucp_Logical_Order_Exception },\n  { 2027, PT_BOOL, ucp_Lowercase },\n  { 2033, PT_BOOL, ucp_Lowercase },\n  { 2043, PT_PC, ucp_Lt },\n  { 2046, PT_PC, ucp_Lu },\n  { 2049, PT_SCX, ucp_Lycian },\n  { 2054, PT_SCX, ucp_Lycian },\n  { 2061, PT_SCX, ucp_Lydian },\n  { 2066, PT_SCX, ucp_Lydian },\n  { 2073, PT_GC, ucp_M },\n  { 2075, PT_SCX, ucp_Mahajani },\n  { 2084, PT_SCX, ucp_Mahajani },\n  { 2089, PT_SC, ucp_Makasar },\n  { 2094, PT_SC, ucp_Makasar },\n  { 2102, PT_SCX, ucp_Malayalam },\n  { 2112, PT_SCX, ucp_Mandaic },\n  { 2117, PT_SCX, ucp_Mandaic },\n  { 2125, PT_SCX, ucp_Manichaean },\n  { 2130, PT_SCX, ucp_Manichaean },\n  { 2141, PT_SC, ucp_Marchen },\n  { 2146, PT_SC, ucp_Marchen },\n  { 2154, PT_SCX, ucp_Masaram_Gondi },\n  { 2167, PT_BOOL, ucp_Math },\n  { 2172, PT_PC, ucp_Mc },\n  { 2175, PT_BOOL, ucp_Modifier_Combining_Mark },\n  { 2179, PT_PC, ucp_Me },\n  { 2182, PT_SC, ucp_Medefaidrin },\n  { 2194, PT_SC, ucp_Medefaidrin },\n  { 2199, PT_SC, ucp_Meetei_Mayek },\n  { 2211, PT_SC, ucp_Mende_Kikakui },\n  { 2216, PT_SC, ucp_Mende_Kikakui },\n  { 2229, PT_SC, ucp_Meroitic_Cursive },\n  { 2234, PT_SCX, ucp_Meroitic_Hieroglyphs },\n  { 2239, PT_SC, ucp_Meroitic_Cursive },\n  { 2255, PT_SCX, ucp_Meroitic_Hieroglyphs },\n  { 2275, PT_SC, ucp_Miao },\n  { 2280, PT_SCX, ucp_Malayalam },\n  { 2285, PT_PC, ucp_Mn },\n  { 2288, PT_SCX, ucp_Modi },\n  { 2293, PT_BOOL, ucp_Modifier_Combining_Mark },\n  { 2315, PT_SCX, ucp_Mongolian },\n  { 2320, PT_SCX, ucp_Mongolian },\n  { 2330, PT_SC, ucp_Mro },\n  { 2334, PT_SC, ucp_Mro },\n  { 2339, PT_SC, ucp_Meetei_Mayek },\n  { 2344, PT_SCX, ucp_Multani },\n  { 2349, PT_SCX, ucp_Multani },\n  { 2357, PT_SCX, ucp_Myanmar },\n  { 2365, PT_SCX, ucp_Myanmar },\n  { 2370, PT_GC, ucp_N },\n  { 2372, PT_SC, ucp_Nabataean },\n  { 2382, PT_SC, ucp_Nag_Mundari },\n  { 2387, PT_SC, ucp_Nag_Mundari },\n  { 2398, PT_SCX, ucp_Nandinagari },\n  { 2403, PT_SCX, ucp_Nandinagari },\n  { 2415, PT_SC, ucp_Old_North_Arabian },\n  { 2420, PT_SC, ucp_Nabataean },\n  { 2425, PT_BOOL, ucp_Noncharacter_Code_Point },\n  { 2431, PT_PC, ucp_Nd },\n  { 2434, PT_SCX, ucp_Newa },\n  { 2439, PT_SC, ucp_New_Tai_Lue },\n  { 2449, PT_SCX, ucp_Nko },\n  { 2453, PT_SCX, ucp_Nko },\n  { 2458, PT_PC, ucp_Nl },\n  { 2461, PT_PC, ucp_No },\n  { 2464, PT_BOOL, ucp_Noncharacter_Code_Point },\n  { 2486, PT_SC, ucp_Nushu },\n  { 2491, PT_SC, ucp_Nushu },\n  { 2497, PT_SC, ucp_Nyiakeng_Puachue_Hmong },\n  { 2518, PT_SC, ucp_Ogham },\n  { 2523, PT_SC, ucp_Ogham },\n  { 2529, PT_SC, ucp_Ol_Chiki },\n  { 2537, PT_SC, ucp_Ol_Chiki },\n  { 2542, PT_SCX, ucp_Old_Hungarian },\n  { 2555, PT_SC, ucp_Old_Italic },\n  { 2565, PT_SC, ucp_Old_North_Arabian },\n  { 2581, PT_SCX, ucp_Old_Permic },\n  { 2591, PT_SC, ucp_Old_Persian },\n  { 2602, PT_SC, ucp_Old_Sogdian },\n  { 2613, PT_SC, ucp_Old_South_Arabian },\n  { 2629, PT_SCX, ucp_Old_Turkic },\n  { 2639, PT_SCX, ucp_Old_Uyghur },\n  { 2649, PT_SCX, ucp_Ol_Onal },\n  { 2656, PT_SCX, ucp_Ol_Onal },\n  { 2661, PT_SCX, ucp_Oriya },\n  { 2667, PT_SCX, ucp_Old_Turkic },\n  { 2672, PT_SCX, ucp_Oriya },\n  { 2677, PT_SCX, ucp_Osage },\n  { 2683, PT_SCX, ucp_Osage },\n  { 2688, PT_SC, ucp_Osmanya },\n  { 2693, PT_SC, ucp_Osmanya },\n  { 2701, PT_SCX, ucp_Old_Uyghur },\n  { 2706, PT_GC, ucp_P },\n  { 2708, PT_SC, ucp_Pahawh_Hmong },\n  { 2720, PT_SC, ucp_Palmyrene },\n  { 2725, PT_SC, ucp_Palmyrene },\n  { 2735, PT_BOOL, ucp_Pattern_Syntax },\n  { 2742, PT_BOOL, ucp_Pattern_Syntax },\n  { 2756, PT_BOOL, ucp_Pattern_White_Space },\n  { 2774, PT_BOOL, ucp_Pattern_White_Space },\n  { 2780, PT_SC, ucp_Pau_Cin_Hau },\n  { 2785, PT_SC, ucp_Pau_Cin_Hau },\n  { 2795, PT_PC, ucp_Pc },\n  { 2798, PT_BOOL, ucp_Prepended_Concatenation_Mark },\n  { 2802, PT_PC, ucp_Pd },\n  { 2805, PT_PC, ucp_Pe },\n  { 2808, PT_SCX, ucp_Old_Permic },\n  { 2813, PT_PC, ucp_Pf },\n  { 2816, PT_SCX, ucp_Phags_Pa },\n  { 2821, PT_SCX, ucp_Phags_Pa },\n  { 2829, PT_SC, ucp_Inscriptional_Pahlavi },\n  { 2834, PT_SCX, ucp_Psalter_Pahlavi },\n  { 2839, PT_SC, ucp_Phoenician },\n  { 2844, PT_SC, ucp_Phoenician },\n  { 2855, PT_PC, ucp_Pi },\n  { 2858, PT_SC, ucp_Miao },\n  { 2863, PT_PC, ucp_Po },\n  { 2866, PT_BOOL, ucp_Prepended_Concatenation_Mark },\n  { 2893, PT_SC, ucp_Inscriptional_Parthian },\n  { 2898, PT_PC, ucp_Ps },\n  { 2901, PT_SCX, ucp_Psalter_Pahlavi },\n  { 2916, PT_SCX, ucp_Coptic },\n  { 2921, PT_SC, ucp_Inherited },\n  { 2926, PT_BOOL, ucp_Quotation_Mark },\n  { 2932, PT_BOOL, ucp_Quotation_Mark },\n  { 2946, PT_BOOL, ucp_Radical },\n  { 2954, PT_BOOL, ucp_Regional_Indicator },\n  { 2972, PT_SC, ucp_Rejang },\n  { 2979, PT_BOOL, ucp_Regional_Indicator },\n  { 2982, PT_SC, ucp_Rejang },\n  { 2987, PT_SCX, ucp_Hanifi_Rohingya },\n  { 2992, PT_SCX, ucp_Runic },\n  { 2998, PT_SCX, ucp_Runic },\n  { 3003, PT_GC, ucp_S },\n  { 3005, PT_SCX, ucp_Samaritan },\n  { 3015, PT_SCX, ucp_Samaritan },\n  { 3020, PT_SC, ucp_Old_South_Arabian },\n  { 3025, PT_SC, ucp_Saurashtra },\n  { 3030, PT_SC, ucp_Saurashtra },\n  { 3041, PT_PC, ucp_Sc },\n  { 3044, PT_BOOL, ucp_Soft_Dotted },\n  { 3047, PT_BOOL, ucp_Sentence_Terminal },\n  { 3064, PT_SC, ucp_SignWriting },\n  { 3069, PT_SCX, ucp_Sharada },\n  { 3077, PT_SCX, ucp_Shavian },\n  { 3085, PT_SCX, ucp_Shavian },\n  { 3090, PT_SCX, ucp_Sharada },\n  { 3095, PT_SC, ucp_Siddham },\n  { 3100, PT_SC, ucp_Siddham },\n  { 3108, PT_SC, ucp_Sidetic },\n  { 3116, PT_SC, ucp_Sidetic },\n  { 3121, PT_SC, ucp_SignWriting },\n  { 3133, PT_SCX, ucp_Khudawadi },\n  { 3138, PT_SCX, ucp_Sinhala },\n  { 3143, PT_SCX, ucp_Sinhala },\n  { 3151, PT_PC, ucp_Sk },\n  { 3154, PT_PC, ucp_Sm },\n  { 3157, PT_PC, ucp_So },\n  { 3160, PT_BOOL, ucp_Soft_Dotted },\n  { 3171, PT_SCX, ucp_Sogdian },\n  { 3176, PT_SCX, ucp_Sogdian },\n  { 3184, PT_SC, ucp_Old_Sogdian },\n  { 3189, PT_SC, ucp_Sora_Sompeng },\n  { 3194, PT_SC, ucp_Sora_Sompeng },\n  { 3206, PT_SC, ucp_Soyombo },\n  { 3211, PT_SC, ucp_Soyombo },\n  { 3219, PT_BOOL, ucp_White_Space },\n  { 3225, PT_BOOL, ucp_Sentence_Terminal },\n  { 3231, PT_SC, ucp_Sundanese },\n  { 3236, PT_SC, ucp_Sundanese },\n  { 3246, PT_SCX, ucp_Sunuwar },\n  { 3251, PT_SCX, ucp_Sunuwar },\n  { 3259, PT_SCX, ucp_Syloti_Nagri },\n  { 3264, PT_SCX, ucp_Syloti_Nagri },\n  { 3276, PT_SCX, ucp_Syriac },\n  { 3281, PT_SCX, ucp_Syriac },\n  { 3288, PT_SCX, ucp_Tagalog },\n  { 3296, PT_SCX, ucp_Tagbanwa },\n  { 3301, PT_SCX, ucp_Tagbanwa },\n  { 3310, PT_SCX, ucp_Tai_Le },\n  { 3316, PT_SC, ucp_Tai_Tham },\n  { 3324, PT_SC, ucp_Tai_Viet },\n  { 3332, PT_SC, ucp_Tai_Yo },\n  { 3338, PT_SCX, ucp_Takri },\n  { 3343, PT_SCX, ucp_Takri },\n  { 3349, PT_SCX, ucp_Tai_Le },\n  { 3354, PT_SC, ucp_New_Tai_Lue },\n  { 3359, PT_SCX, ucp_Tamil },\n  { 3365, PT_SCX, ucp_Tamil },\n  { 3370, PT_SCX, ucp_Tangut },\n  { 3375, PT_SC, ucp_Tangsa },\n  { 3382, PT_SCX, ucp_Tangut },\n  { 3389, PT_SC, ucp_Tai_Viet },\n  { 3394, PT_SC, ucp_Tai_Yo },\n  { 3399, PT_SCX, ucp_Telugu },\n  { 3404, PT_SCX, ucp_Telugu },\n  { 3411, PT_BOOL, ucp_Terminal_Punctuation },\n  { 3416, PT_BOOL, ucp_Terminal_Punctuation },\n  { 3436, PT_SCX, ucp_Tifinagh },\n  { 3441, PT_SCX, ucp_Tagalog },\n  { 3446, PT_SCX, ucp_Thaana },\n  { 3451, PT_SCX, ucp_Thaana },\n  { 3458, PT_SCX, ucp_Thai },\n  { 3463, PT_SCX, ucp_Tibetan },\n  { 3471, PT_SCX, ucp_Tibetan },\n  { 3476, PT_SCX, ucp_Tifinagh },\n  { 3485, PT_SCX, ucp_Tirhuta },\n  { 3490, PT_SCX, ucp_Tirhuta },\n  { 3498, PT_SC, ucp_Tangsa },\n  { 3503, PT_SCX, ucp_Todhri },\n  { 3510, PT_SCX, ucp_Todhri },\n  { 3515, PT_SC, ucp_Tolong_Siki },\n  { 3526, PT_SC, ucp_Tolong_Siki },\n  { 3531, PT_SCX, ucp_Toto },\n  { 3536, PT_SCX, ucp_Tulu_Tigalari },\n  { 3549, PT_SCX, ucp_Tulu_Tigalari },\n  { 3554, PT_SC, ucp_Ugaritic },\n  { 3559, PT_SC, ucp_Ugaritic },\n  { 3568, PT_BOOL, ucp_Unified_Ideograph },\n  { 3574, PT_BOOL, ucp_Unified_Ideograph },\n  { 3591, PT_SC, ucp_Unknown },\n  { 3599, PT_BOOL, ucp_Uppercase },\n  { 3605, PT_BOOL, ucp_Uppercase },\n  { 3615, PT_SC, ucp_Vai },\n  { 3619, PT_SC, ucp_Vai },\n  { 3624, PT_BOOL, ucp_Variation_Selector },\n  { 3642, PT_SC, ucp_Vithkuqi },\n  { 3647, PT_SC, ucp_Vithkuqi },\n  { 3656, PT_BOOL, ucp_Variation_Selector },\n  { 3659, PT_SC, ucp_Wancho },\n  { 3666, PT_SC, ucp_Warang_Citi },\n  { 3671, PT_SC, ucp_Warang_Citi },\n  { 3682, PT_SC, ucp_Wancho },\n  { 3687, PT_BOOL, ucp_White_Space },\n  { 3698, PT_BOOL, ucp_White_Space },\n  { 3705, PT_ALNUM, 0 },\n  { 3709, PT_BOOL, ucp_XID_Continue },\n  { 3714, PT_BOOL, ucp_XID_Continue },\n  { 3726, PT_BOOL, ucp_XID_Start },\n  { 3731, PT_BOOL, ucp_XID_Start },\n  { 3740, PT_SC, ucp_Old_Persian },\n  { 3745, PT_PXSPACE, 0 },\n  { 3749, PT_SPACE, 0 },\n  { 3753, PT_SC, ucp_Cuneiform },\n  { 3758, PT_UCNC, 0 },\n  { 3762, PT_WORD, 0 },\n  { 3766, PT_SCX, ucp_Yezidi },\n  { 3771, PT_SCX, ucp_Yezidi },\n  { 3778, PT_SCX, ucp_Yi },\n  { 3781, PT_SCX, ucp_Yi },\n  { 3786, PT_GC, ucp_Z },\n  { 3788, PT_SC, ucp_Zanabazar_Square },\n  { 3804, PT_SC, ucp_Zanabazar_Square },\n  { 3809, PT_SC, ucp_Inherited },\n  { 3814, PT_PC, ucp_Zl },\n  { 3817, PT_PC, ucp_Zp },\n  { 3820, PT_PC, ucp_Zs },\n  { 3823, PT_SC, ucp_Common },\n  { 3828, PT_SC, ucp_Unknown }\n};\n\nconst size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table);\n\n#endif /* SUPPORT_UNICODE */\n\n/* End of pcre2_ucptables_inc.h */\n"
  },
  {
    "path": "src/pcre2_util.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE2 is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n#ifndef PCRE2_UTIL_H_IDEMPOTENT_GUARD\n#define PCRE2_UTIL_H_IDEMPOTENT_GUARD\n\n/* Assertion macros */\n\n#ifdef PCRE2_DEBUG\n\n#if defined(HAVE_ASSERT_H) && !defined(NDEBUG)\n#include <assert.h>\n#endif\n\n/* PCRE2_ASSERT(x) can be used to inject an assert() for conditions\nthat the code below doesn't support. It is a NOP for non debug builds\nbut in debug builds will print information about the location of the\ncode where it triggered and crash.\n\nIt is meant to work like assert(), and therefore the expression used\nshould indicate what the expected state is, and shouldn't have any\nside-effects. */\n\n#if defined(HAVE_ASSERT_H) && !defined(NDEBUG)\n#define PCRE2_ASSERT(x) assert(x)\n#else\n#define PCRE2_ASSERT(x) do                                            \\\n{                                                                     \\\n  if (!(x))                                                           \\\n  {                                                                   \\\n  fprintf(stderr, \"Assertion failed at \" __FILE__ \":%d\\n\", __LINE__); \\\n  abort();                                                            \\\n  }                                                                   \\\n} while(0)\n#endif\n\n/* LCOV_EXCL_START */\n\n/* PCRE2_UNREACHABLE() can be used to mark locations on the code that\nshouldn't be reached. In non debug builds is defined as a hint for\nthe compiler to eliminate any code after it, so it is useful also for\nperformance reasons, but should be used with care because if it is\never reached will trigger Undefined Behaviour and if you are lucky a\ncrash. In debug builds it will report the location where it was triggered\nand crash. One important point to consider when using this macro, is\nthat it is only implemented for a few compilers, and therefore can't\nbe relied on to always be active either, so if it is followed by some\ncode it is important to make sure that the whole thing is safe to\nuse even if the macro is not there (ex: make sure there is a `break`\nafter it if used at the end of a `case`) and to test your code also\nwith a configuration where the macro will be a NOP. */\n\n#if defined(HAVE_ASSERT_H) && !defined(NDEBUG)\n#define PCRE2_UNREACHABLE()                                         \\\nassert(((void)\"Execution reached unexpected point\", 0))\n#else\n#define PCRE2_UNREACHABLE() do                                      \\\n{                                                                   \\\nfprintf(stderr, \"Execution reached unexpected point at \" __FILE__   \\\n                \":%d\\n\", __LINE__);                                 \\\nabort();                                                            \\\n} while(0)\n#endif\n\n/* PCRE2_DEBUG_UNREACHABLE() is a debug only version of the previous\nmacro. It is meant to be used in places where the code is handling\nan error situation in code that shouldn't be reached, but that has\nsome sort of fallback code to normally handle the error. When in\ndoubt you should use this instead of the previous macro. Like in\nthe previous case, it is a good idea to document as much as possible\nthe reason and the actions that should be taken if it ever triggers. */\n\n#define PCRE2_DEBUG_UNREACHABLE() PCRE2_UNREACHABLE()\n\n/* LCOV_EXCL_STOP */\n\n#endif /* PCRE2_DEBUG */\n\n#ifndef PCRE2_ASSERT\n#define PCRE2_ASSERT(x) do {} while(0)\n#endif\n\n/* LCOV_EXCL_START */\n\n#ifndef PCRE2_DEBUG_UNREACHABLE\n#define PCRE2_DEBUG_UNREACHABLE() do {} while(0)\n#endif\n\n#ifndef PCRE2_UNREACHABLE\n#ifdef HAVE_BUILTIN_UNREACHABLE\n#define PCRE2_UNREACHABLE() __builtin_unreachable()\n#elif defined(HAVE_BUILTIN_ASSUME)\n#define PCRE2_UNREACHABLE() __assume(0)\n#else\n#define PCRE2_UNREACHABLE() do {} while(0)\n#endif\n#endif /* !PCRE2_UNREACHABLE */\n\n/* LCOV_EXCL_STOP */\n\n/* We define this fallthrough macro for suppressing -Wimplicit-fallthrough warnings.\nClang only allows this via an attribute, whereas other compilers (eg. GCC) match attributes\nand also specially-formatted comments.\n\nThis macro should be used with no following semicolon, and ideally with a comment: */\n\n//  PCRE2_FALLTHROUGH /* Fall through */\n\n#ifndef PCRE2_FALLTHROUGH\n\n#if defined(__cplusplus) && __cplusplus >= 202002L && \\\n    defined(__has_cpp_attribute)\n/* Standards-compatible C++ variant. */\n#if __has_cpp_attribute(fallthrough)\n#define PCRE2_FALLTHROUGH [[fallthrough]];\n#endif\n#elif !defined(__cplusplus) && \\\n      defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L && \\\n      defined(__has_c_attribute)\n/* Standards-compatible C variant. */\n#if __has_c_attribute(fallthrough)\n#define PCRE2_FALLTHROUGH [[fallthrough]];\n#endif\n#elif ((defined(__clang__) && __clang_major__ >= 10) || \\\n       (defined(__GNUC__) && __GNUC__ >= 7)) && \\\n      defined(__has_attribute)\n/* Clang and GCC syntax. Rule out old versions because apparently Clang at\n   least has a broken implementation of __has_attribute. */\n#if __has_attribute(fallthrough)\n#define PCRE2_FALLTHROUGH __attribute__((fallthrough));\n#endif\n#endif\n\n#endif /* !PCRE2_FALLTHROUGH */\n\n#ifndef PCRE2_FALLTHROUGH\n#define PCRE2_FALLTHROUGH\n#endif\n\n#endif /* PCRE2_UTIL_H_IDEMPOTENT_GUARD */\n\n/* End of pcre2_util.h */\n"
  },
  {
    "path": "src/pcre2_valid_utf.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2020 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains an internal function for validating UTF character\nstrings. This file is also #included by the pcre2test program, which uses\nmacros to change names from _pcre2_xxx to xxxx, thereby avoiding name clashes\nwith the library. In this case, PCRE2_PCRE2TEST is defined. */\n\n\n#ifndef PCRE2_PCRE2TEST           /* We're compiling the library */\n#include \"pcre2_internal.h\"\n#endif /* PCRE2_PCRE2TEST */\n\n\n\n#ifndef SUPPORT_UNICODE\n/*************************************************\n*  Dummy function when Unicode is not supported  *\n*************************************************/\n\n/* This function should never be called when Unicode is not supported. */\n\nint\nPRIV(valid_utf)(PCRE2_SPTR string, PCRE2_SIZE length, PCRE2_SIZE *erroroffset)\n{\n(void)string;\n(void)length;\n(void)erroroffset;\nreturn 0;\n}\n#else  /* UTF is supported */\n\n\n\n/*************************************************\n*           Validate a UTF string                *\n*************************************************/\n\n/* This function is called (optionally) at the start of compile or match, to\ncheck that a supposed UTF string is actually valid. The early check means\nthat subsequent code can assume it is dealing with a valid string. The check\ncan be turned off for maximum performance, but the consequences of supplying an\ninvalid string are then undefined.\n\nArguments:\n  string       points to the string\n  length       length of string\n  errp         pointer to an error position offset variable\n\nReturns:       == 0    if the string is a valid UTF string\n               != 0    otherwise, setting the offset of the bad character\n*/\n\nint\nPRIV(valid_utf)(PCRE2_SPTR string, PCRE2_SIZE length, PCRE2_SIZE *erroroffset)\n{\nPCRE2_SPTR p;\nuint32_t c;\n\n/* ----------------- Check a UTF-8 string ----------------- */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n\n/* Originally, this function checked according to RFC 2279, allowing for values\nin the range 0 to 0x7fffffff, up to 6 bytes long, but ensuring that they were\nin the canonical format. Once somebody had pointed out RFC 3629 to me (it\nobsoletes 2279), additional restrictions were applied. The values are now\nlimited to be between 0 and 0x0010ffff, no more than 4 bytes long, and the\nsubrange 0xd000 to 0xdfff is excluded. However, the format of 5-byte and 6-byte\ncharacters is still checked. Error returns are as follows:\n\nPCRE2_ERROR_UTF8_ERR1   Missing 1 byte at the end of the string\nPCRE2_ERROR_UTF8_ERR2   Missing 2 bytes at the end of the string\nPCRE2_ERROR_UTF8_ERR3   Missing 3 bytes at the end of the string\nPCRE2_ERROR_UTF8_ERR4   Missing 4 bytes at the end of the string\nPCRE2_ERROR_UTF8_ERR5   Missing 5 bytes at the end of the string\nPCRE2_ERROR_UTF8_ERR6   2nd-byte's two top bits are not 0x80\nPCRE2_ERROR_UTF8_ERR7   3rd-byte's two top bits are not 0x80\nPCRE2_ERROR_UTF8_ERR8   4th-byte's two top bits are not 0x80\nPCRE2_ERROR_UTF8_ERR9   5th-byte's two top bits are not 0x80\nPCRE2_ERROR_UTF8_ERR10  6th-byte's two top bits are not 0x80\nPCRE2_ERROR_UTF8_ERR11  5-byte character is not permitted by RFC 3629\nPCRE2_ERROR_UTF8_ERR12  6-byte character is not permitted by RFC 3629\nPCRE2_ERROR_UTF8_ERR13  4-byte character with value > 0x10ffff is not permitted\nPCRE2_ERROR_UTF8_ERR14  3-byte character with value 0xd800-0xdfff is not permitted\nPCRE2_ERROR_UTF8_ERR15  Overlong 2-byte sequence\nPCRE2_ERROR_UTF8_ERR16  Overlong 3-byte sequence\nPCRE2_ERROR_UTF8_ERR17  Overlong 4-byte sequence\nPCRE2_ERROR_UTF8_ERR18  Overlong 5-byte sequence (won't ever occur)\nPCRE2_ERROR_UTF8_ERR19  Overlong 6-byte sequence (won't ever occur)\nPCRE2_ERROR_UTF8_ERR20  Isolated 0x80 byte (not within UTF-8 character)\nPCRE2_ERROR_UTF8_ERR21  Byte with the illegal value 0xfe or 0xff\n*/\n\nfor (p = string; length > 0; p++)\n  {\n  uint32_t ab, d;\n\n  c = *p;\n  length--;\n\n  if (c < 128) continue;                /* ASCII character */\n\n  if (c < 0xc0)                         /* Isolated 10xx xxxx byte */\n    {\n    *erroroffset = (PCRE2_SIZE)(p - string);\n    return PCRE2_ERROR_UTF8_ERR20;\n    }\n\n  if (c >= 0xfe)                        /* Invalid 0xfe or 0xff bytes */\n    {\n    *erroroffset = (PCRE2_SIZE)(p - string);\n    return PCRE2_ERROR_UTF8_ERR21;\n    }\n\n  ab = PRIV(utf8_table4)[c & 0x3f];     /* Number of additional bytes (1-5) */\n  if (length < ab)                      /* Missing bytes */\n    {\n    *erroroffset = (PCRE2_SIZE)(p - string);\n    switch(ab - length)\n      {\n      case 1: return PCRE2_ERROR_UTF8_ERR1;\n      case 2: return PCRE2_ERROR_UTF8_ERR2;\n      case 3: return PCRE2_ERROR_UTF8_ERR3;\n      case 4: return PCRE2_ERROR_UTF8_ERR4;\n      case 5: return PCRE2_ERROR_UTF8_ERR5;\n      }\n    }\n  length -= ab;                         /* Length remaining */\n\n  /* Check top bits in the second byte */\n\n  if (((d = *(++p)) & 0xc0) != 0x80)\n    {\n    *erroroffset = (PCRE2_SIZE)(p - string) - 1;\n    return PCRE2_ERROR_UTF8_ERR6;\n    }\n\n  /* For each length, check that the remaining bytes start with the 0x80 bit\n  set and not the 0x40 bit. Then check for an overlong sequence, and for the\n  excluded range 0xd800 to 0xdfff. */\n\n  switch (ab)\n    {\n    /* 2-byte character. No further bytes to check for 0x80. Check first byte\n    for for xx00 000x (overlong sequence). */\n\n    case 1: if ((c & 0x3e) == 0)\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 1;\n      return PCRE2_ERROR_UTF8_ERR15;\n      }\n    break;\n\n    /* 3-byte character. Check third byte for 0x80. Then check first 2 bytes\n      for 1110 0000, xx0x xxxx (overlong sequence) or\n          1110 1101, 1010 xxxx (0xd800 - 0xdfff) */\n\n    case 2:\n    if ((*(++p) & 0xc0) != 0x80)     /* Third byte */\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 2;\n      return PCRE2_ERROR_UTF8_ERR7;\n      }\n    if (c == 0xe0 && (d & 0x20) == 0)\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 2;\n      return PCRE2_ERROR_UTF8_ERR16;\n      }\n    if (c == 0xed && d >= 0xa0)\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 2;\n      return PCRE2_ERROR_UTF8_ERR14;\n      }\n    break;\n\n    /* 4-byte character. Check 3rd and 4th bytes for 0x80. Then check first 2\n       bytes for for 1111 0000, xx00 xxxx (overlong sequence), then check for a\n       character greater than 0x0010ffff (f4 8f bf bf) */\n\n    case 3:\n    if ((*(++p) & 0xc0) != 0x80)     /* Third byte */\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 2;\n      return PCRE2_ERROR_UTF8_ERR7;\n      }\n    if ((*(++p) & 0xc0) != 0x80)     /* Fourth byte */\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 3;\n      return PCRE2_ERROR_UTF8_ERR8;\n      }\n    if (c == 0xf0 && (d & 0x30) == 0)\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 3;\n      return PCRE2_ERROR_UTF8_ERR17;\n      }\n    if (c > 0xf4 || (c == 0xf4 && d > 0x8f))\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 3;\n      return PCRE2_ERROR_UTF8_ERR13;\n      }\n    break;\n\n    /* 5-byte and 6-byte characters are not allowed by RFC 3629, and will be\n    rejected by the length test below. However, we do the appropriate tests\n    here so that overlong sequences get diagnosed, and also in case there is\n    ever an option for handling these larger code points. */\n\n    /* 5-byte character. Check 3rd, 4th, and 5th bytes for 0x80. Then check for\n    1111 1000, xx00 0xxx */\n\n    case 4:\n    if ((*(++p) & 0xc0) != 0x80)     /* Third byte */\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 2;\n      return PCRE2_ERROR_UTF8_ERR7;\n      }\n    if ((*(++p) & 0xc0) != 0x80)     /* Fourth byte */\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 3;\n      return PCRE2_ERROR_UTF8_ERR8;\n      }\n    if ((*(++p) & 0xc0) != 0x80)     /* Fifth byte */\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 4;\n      return PCRE2_ERROR_UTF8_ERR9;\n      }\n    if (c == 0xf8 && (d & 0x38) == 0)\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 4;\n      return PCRE2_ERROR_UTF8_ERR18;\n      }\n    break;\n\n    /* 6-byte character. Check 3rd-6th bytes for 0x80. Then check for\n    1111 1100, xx00 00xx. */\n\n    case 5:\n    if ((*(++p) & 0xc0) != 0x80)     /* Third byte */\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 2;\n      return PCRE2_ERROR_UTF8_ERR7;\n      }\n    if ((*(++p) & 0xc0) != 0x80)     /* Fourth byte */\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 3;\n      return PCRE2_ERROR_UTF8_ERR8;\n      }\n    if ((*(++p) & 0xc0) != 0x80)     /* Fifth byte */\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 4;\n      return PCRE2_ERROR_UTF8_ERR9;\n      }\n    if ((*(++p) & 0xc0) != 0x80)     /* Sixth byte */\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 5;\n      return PCRE2_ERROR_UTF8_ERR10;\n      }\n    if (c == 0xfc && (d & 0x3c) == 0)\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 5;\n      return PCRE2_ERROR_UTF8_ERR19;\n      }\n    break;\n    }\n\n  /* Character is valid under RFC 2279, but 4-byte and 5-byte characters are\n  excluded by RFC 3629. The pointer p is currently at the last byte of the\n  character. */\n\n  if (ab > 3)\n    {\n    *erroroffset = (PCRE2_SIZE)(p - string) - ab;\n    return (ab == 4)? PCRE2_ERROR_UTF8_ERR11 : PCRE2_ERROR_UTF8_ERR12;\n    }\n  }\nreturn 0;\n\n\n/* ----------------- Check a UTF-16 string ----------------- */\n\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n\n/* There's not so much work, nor so many errors, for UTF-16.\nPCRE2_ERROR_UTF16_ERR1  Missing low surrogate at the end of the string\nPCRE2_ERROR_UTF16_ERR2  Invalid low surrogate\nPCRE2_ERROR_UTF16_ERR3  Isolated low surrogate\n*/\n\nfor (p = string; length > 0; p++)\n  {\n  c = *p;\n  length--;\n\n  if ((c & 0xf800) != 0xd800)\n    {\n    /* Normal UTF-16 code point. Neither high nor low surrogate. */\n    }\n  else if ((c & 0x0400) == 0)\n    {\n    /* High surrogate. Must be a followed by a low surrogate. */\n    if (length == 0)\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string);\n      return PCRE2_ERROR_UTF16_ERR1;\n      }\n    p++;\n    length--;\n    if ((*p & 0xfc00) != 0xdc00)\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string) - 1;\n      return PCRE2_ERROR_UTF16_ERR2;\n      }\n    }\n  else\n    {\n    /* Isolated low surrogate. Always an error. */\n    *erroroffset = (PCRE2_SIZE)(p - string);\n    return PCRE2_ERROR_UTF16_ERR3;\n    }\n  }\nreturn 0;\n\n\n\n/* ----------------- Check a UTF-32 string ----------------- */\n\n#else\n\n/* There is very little to do for a UTF-32 string.\nPCRE2_ERROR_UTF32_ERR1  Surrogate character\nPCRE2_ERROR_UTF32_ERR2  Character > 0x10ffff\n*/\n\nfor (p = string; length > 0; length--, p++)\n  {\n  c = *p;\n  if ((c & 0xfffff800u) != 0xd800u)\n    {\n    /* Normal UTF-32 code point. Neither high nor low surrogate. */\n    if (c > 0x10ffffu)\n      {\n      *erroroffset = (PCRE2_SIZE)(p - string);\n      return PCRE2_ERROR_UTF32_ERR2;\n      }\n    }\n  else\n    {\n    /* A surrogate */\n    *erroroffset = (PCRE2_SIZE)(p - string);\n    return PCRE2_ERROR_UTF32_ERR1;\n    }\n  }\nreturn 0;\n#endif  /* CODE_UNIT_WIDTH */\n}\n#endif  /* SUPPORT_UNICODE */\n\n/* End of pcre2_valid_utf.c */\n"
  },
  {
    "path": "src/pcre2_xclass.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains two internal functions that are used to match\nOP_XCLASS and OP_ECLASS. It is used by pcre2_auto_possessify() and by both\npcre2_match() and pcre2_dfa_match(). */\n\n\n#include \"pcre2_internal.h\"\n\n\n\n/*************************************************\n*       Match character against an XCLASS        *\n*************************************************/\n\n/* This function is called to match a character against an extended class that\nmight contain codepoints above 255 and/or Unicode properties.\n\nArguments:\n  c           the character\n  data        points to the flag code unit of the XCLASS data\n  utf         TRUE if in UTF mode\n\nReturns:      TRUE if character matches, else FALSE\n*/\n\nBOOL\nPRIV(xclass)(uint32_t c, PCRE2_SPTR data, const uint8_t *char_lists_end, BOOL utf)\n{\n/* Update PRIV(update_classbits) when this function is changed. */\nPCRE2_UCHAR t;\nBOOL not_negated = (*data & XCL_NOT) == 0;\nuint32_t type, max_index, min_index, value;\nconst uint8_t *next_char;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n/* In 8 bit mode, this must always be TRUE. Help the compiler to know that. */\nutf = TRUE;\n#endif\n\n/* Code points < 256 are matched against a bitmap, if one is present. */\n\nif ((*data++ & XCL_MAP) != 0)\n  {\n  if (c < 256)\n    return (((const uint8_t *)data)[c/8] & (1u << (c&7))) != 0;\n  /* Skip bitmap. */\n  data += 32 / sizeof(PCRE2_UCHAR);\n  }\n\n/* Match against the list of Unicode properties. We won't ever\nencounter XCL_PROP or XCL_NOTPROP when UTF support is not compiled. */\n#ifdef SUPPORT_UNICODE\nif (*data == XCL_PROP || *data == XCL_NOTPROP)\n  {\n  /* The UCD record is the same for all properties. */\n  const ucd_record *prop = GET_UCD(c);\n\n  do\n    {\n    int chartype;\n    BOOL isprop = (*data++) == XCL_PROP;\n    BOOL ok;\n\n    switch(*data)\n      {\n      case PT_LAMP:\n      chartype = prop->chartype;\n      if ((chartype == ucp_Lu || chartype == ucp_Ll ||\n           chartype == ucp_Lt) == isprop) return not_negated;\n      break;\n\n      case PT_GC:\n      if ((data[1] == PRIV(ucp_gentype)[prop->chartype]) == isprop)\n        return not_negated;\n      break;\n\n      case PT_PC:\n      if ((data[1] == prop->chartype) == isprop) return not_negated;\n      break;\n\n      case PT_SC:\n      if ((data[1] == prop->script) == isprop) return not_negated;\n      break;\n\n      case PT_SCX:\n      ok = (data[1] == prop->script ||\n            MAPBIT(PRIV(ucd_script_sets) + UCD_SCRIPTX_PROP(prop), data[1]) != 0);\n      if (ok == isprop) return not_negated;\n      break;\n\n      case PT_ALNUM:\n      chartype = prop->chartype;\n      if ((PRIV(ucp_gentype)[chartype] == ucp_L ||\n           PRIV(ucp_gentype)[chartype] == ucp_N) == isprop)\n        return not_negated;\n      break;\n\n      /* Perl space used to exclude VT, but from Perl 5.18 it is included,\n      which means that Perl space and POSIX space are now identical. PCRE\n      was changed at release 8.34. */\n\n      case PT_SPACE:    /* Perl space */\n      case PT_PXSPACE:  /* POSIX space */\n      switch(c)\n        {\n        HSPACE_CASES:\n        VSPACE_CASES:\n        if (isprop) return not_negated;\n        break;\n\n        default:\n        if ((PRIV(ucp_gentype)[prop->chartype] == ucp_Z) == isprop)\n          return not_negated;\n        break;\n        }\n      break;\n\n      case PT_WORD:\n      chartype = prop->chartype;\n      if ((PRIV(ucp_gentype)[chartype] == ucp_L ||\n           PRIV(ucp_gentype)[chartype] == ucp_N ||\n           chartype == ucp_Mn || chartype == ucp_Pc) == isprop)\n        return not_negated;\n      break;\n\n      case PT_UCNC:\n      if (c < 0xa0)\n        {\n        if ((c == CHAR_DOLLAR_SIGN || c == CHAR_COMMERCIAL_AT ||\n             c == CHAR_GRAVE_ACCENT) == isprop)\n          return not_negated;\n        }\n      else\n        {\n        if ((c < 0xd800 || c > 0xdfff) == isprop)\n          return not_negated;\n        }\n      break;\n\n      case PT_BIDICL:\n      if ((UCD_BIDICLASS_PROP(prop) == data[1]) == isprop)\n        return not_negated;\n      break;\n\n      case PT_BOOL:\n      ok = MAPBIT(PRIV(ucd_boolprop_sets) +\n        UCD_BPROPS_PROP(prop), data[1]) != 0;\n      if (ok == isprop) return not_negated;\n      break;\n\n      /* The following three properties can occur only in an XCLASS, as there\n      is no \\p or \\P coding for them. */\n\n      /* Graphic character. Implement this as not Z (space or separator) and\n      not C (other), except for Cf (format) with a few exceptions. This seems\n      to be what Perl does. The exceptional characters are:\n\n      U+061C           Arabic Letter Mark\n      U+180E           Mongolian Vowel Separator\n      U+2066 - U+2069  Various \"isolate\"s\n      */\n\n      case PT_PXGRAPH:\n      chartype = prop->chartype;\n      if ((PRIV(ucp_gentype)[chartype] != ucp_Z &&\n            (PRIV(ucp_gentype)[chartype] != ucp_C ||\n              (chartype == ucp_Cf &&\n                c != 0x061c && c != 0x180e && (c < 0x2066 || c > 0x2069))\n         )) == isprop)\n        return not_negated;\n      break;\n\n      /* Printable character: same as graphic, with the addition of Zs, i.e.\n      not Zl and not Zp, and U+180E. */\n\n      case PT_PXPRINT:\n      chartype = prop->chartype;\n      if ((chartype != ucp_Zl &&\n           chartype != ucp_Zp &&\n            (PRIV(ucp_gentype)[chartype] != ucp_C ||\n              (chartype == ucp_Cf &&\n                c != 0x061c && (c < 0x2066 || c > 0x2069))\n         )) == isprop)\n        return not_negated;\n      break;\n\n      /* Punctuation: all Unicode punctuation, plus ASCII characters that\n      Unicode treats as symbols rather than punctuation, for Perl\n      compatibility (these are $+<=>^`|~). */\n\n      case PT_PXPUNCT:\n      chartype = prop->chartype;\n      if ((PRIV(ucp_gentype)[chartype] == ucp_P ||\n            (c < 128 && PRIV(ucp_gentype)[chartype] == ucp_S)) == isprop)\n        return not_negated;\n      break;\n\n      /* Perl has two sets of hex digits */\n\n      case PT_PXXDIGIT:\n      if (((c >= CHAR_0 && c <= CHAR_9) ||\n           (c >= CHAR_A && c <= CHAR_F) ||\n           (c >= CHAR_a && c <= CHAR_f) ||\n           (c >= 0xff10 && c <= 0xff19) ||  /* Fullwidth digits */\n           (c >= 0xff21 && c <= 0xff26) ||  /* Fullwidth letters */\n           (c >= 0xff41 && c <= 0xff46)) == isprop)\n        return not_negated;\n      break;\n\n      /* This should never occur, but compilers may mutter if there is no\n      default. */\n\n      /* LCOV_EXCL_START */\n      default:\n      PCRE2_DEBUG_UNREACHABLE();\n      return FALSE;\n      /* LCOV_EXCL_STOP */\n      }\n\n    data += 2;\n    }\n  while (*data == XCL_PROP || *data == XCL_NOTPROP);\n  }\n#else\n  (void)utf;  /* Avoid compiler warning */\n#endif  /* SUPPORT_UNICODE */\n\n/* Match against large chars or ranges that end with a large char. */\nif (*data < XCL_LIST)\n  {\n  while ((t = *data++) != XCL_END)\n    {\n    uint32_t x, y;\n\n#ifdef SUPPORT_UNICODE\n    if (utf)\n      {\n      GETCHARINC(x, data); /* macro generates multiple statements */\n      }\n    else\n#endif\n      x = *data++;\n\n    if (t == XCL_SINGLE)\n      {\n      /* Since character ranges follow the properties, and they are\n      sorted, early return is possible for all characters <= x. */\n      if (c <= x) return (c == x) ? not_negated : !not_negated;\n      continue;\n      }\n\n    PCRE2_ASSERT(t == XCL_RANGE);\n#ifdef SUPPORT_UNICODE\n    if (utf)\n      {\n      GETCHARINC(y, data); /* macro generates multiple statements */\n      }\n    else\n#endif\n      y = *data++;\n\n    /* Since character ranges follow the properties, and they are\n    sorted, early return is possible for all characters <= y. */\n    if (c <= y) return (c >= x) ? not_negated : !not_negated;\n    }\n\n  return !not_negated;   /* char did not match */\n  }\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\ntype = (uint32_t)(data[0] << 8) | data[1];\ndata += 2;\n#else\ntype = data[0];\ndata++;\n#endif  /* CODE_UNIT_WIDTH */\n\n/* Align characters. */\nnext_char = char_lists_end - (GET(data, 0) << 1);\ntype &= XCL_TYPE_MASK;\n\n/* Alignment check. */\nPCRE2_ASSERT(((uintptr_t)next_char & 0x1) == 0);\n\nif (c >= XCL_CHAR_LIST_HIGH_16_START)\n  {\n  max_index = type & XCL_ITEM_COUNT_MASK;\n  if (max_index == XCL_ITEM_COUNT_MASK)\n    {\n    max_index = *(const uint16_t*)next_char;\n    PCRE2_ASSERT(max_index >= XCL_ITEM_COUNT_MASK);\n    next_char += 2;\n    }\n\n  next_char += max_index << 1;\n  type >>= XCL_TYPE_BIT_LEN;\n  }\n\nif (c < XCL_CHAR_LIST_LOW_32_START)\n  {\n  max_index = type & XCL_ITEM_COUNT_MASK;\n\n  c = (uint16_t)((c << XCL_CHAR_SHIFT) | XCL_CHAR_END);\n\n  if (max_index == XCL_ITEM_COUNT_MASK)\n    {\n    max_index = *(const uint16_t*)next_char;\n    PCRE2_ASSERT(max_index >= XCL_ITEM_COUNT_MASK);\n    next_char += 2;\n    }\n\n  if (max_index == 0 || c < *(const uint16_t*)next_char)\n    return ((type & XCL_BEGIN_WITH_RANGE) != 0) == not_negated;\n\n  min_index = 0;\n  value = ((const uint16_t*)next_char)[--max_index];\n  if (c >= value)\n    return (value == c || (value & XCL_CHAR_END) == 0) == not_negated;\n\n  max_index--;\n\n  /* Binary search of a range. */\n  while (TRUE)\n    {\n    uint32_t mid_index = (min_index + max_index) >> 1;\n    value = ((const uint16_t*)next_char)[mid_index];\n\n    if (c < value)\n      max_index = mid_index - 1;\n    else if (((const uint16_t*)next_char)[mid_index + 1] <= c)\n      min_index = mid_index + 1;\n    else\n      return (value == c || (value & XCL_CHAR_END) == 0) == not_negated;\n    }\n  }\n\n/* Skip the 16 bit ranges. */\nmax_index = type & XCL_ITEM_COUNT_MASK;\nif (max_index == XCL_ITEM_COUNT_MASK)\n  {\n  max_index = *(const uint16_t*)next_char;\n  PCRE2_ASSERT(max_index >= XCL_ITEM_COUNT_MASK);\n  next_char += 2;\n  }\n\nnext_char += (max_index << 1);\ntype >>= XCL_TYPE_BIT_LEN;\n\n/* Alignment check. */\nPCRE2_ASSERT(((uintptr_t)next_char & 0x3) == 0);\n\nmax_index = type & XCL_ITEM_COUNT_MASK;\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\nif (c >= XCL_CHAR_LIST_HIGH_32_START)\n  {\n  if (max_index == XCL_ITEM_COUNT_MASK)\n    {\n    max_index = *(const uint32_t*)next_char;\n    PCRE2_ASSERT(max_index >= XCL_ITEM_COUNT_MASK);\n    next_char += 4;\n    }\n\n  next_char += max_index << 2;\n  type >>= XCL_TYPE_BIT_LEN;\n  max_index = type & XCL_ITEM_COUNT_MASK;\n  }\n#endif\n\nc = (uint32_t)((c << XCL_CHAR_SHIFT) | XCL_CHAR_END);\n\nif (max_index == XCL_ITEM_COUNT_MASK)\n  {\n  max_index = *(const uint32_t*)next_char;\n  next_char += 4;\n  }\n\nif (max_index == 0 || c < *(const uint32_t*)next_char)\n  return ((type & XCL_BEGIN_WITH_RANGE) != 0) == not_negated;\n\nmin_index = 0;\nvalue = ((const uint32_t*)next_char)[--max_index];\nif (c >= value)\n  return (value == c || (value & XCL_CHAR_END) == 0) == not_negated;\n\nmax_index--;\n\n/* Binary search of a range. */\nwhile (TRUE)\n  {\n  uint32_t mid_index = (min_index + max_index) >> 1;\n  value = ((const uint32_t*)next_char)[mid_index];\n\n  if (c < value)\n    max_index = mid_index - 1;\n  else if (((const uint32_t*)next_char)[mid_index + 1] <= c)\n    min_index = mid_index + 1;\n  else\n    return (value == c || (value & XCL_CHAR_END) == 0) == not_negated;\n  }\n}\n\n\n\n/*************************************************\n*       Match character against an ECLASS        *\n*************************************************/\n\n/* This function is called to match a character against an extended class\nused for describing characters using boolean operations on sets.\n\nArguments:\n  c           the character\n  data_start  points to the start of the ECLASS data\n  data_end    points one-past-the-last of the ECLASS data\n  utf         TRUE if in UTF mode\n\nReturns:      TRUE if character matches, else FALSE\n*/\n\nBOOL\nPRIV(eclass)(uint32_t c, PCRE2_SPTR data_start, PCRE2_SPTR data_end,\n  const uint8_t *char_lists_end, BOOL utf)\n{\nPCRE2_SPTR ptr = data_start;\nPCRE2_UCHAR flags;\nuint32_t stack = 0;\nint stack_depth = 0;\n\nPCRE2_ASSERT(data_start < data_end);\nflags = *ptr++;\nPCRE2_ASSERT((flags & ECL_MAP) == 0 ||\n             (data_end - ptr) >= 32 / (int)sizeof(PCRE2_UCHAR));\n\n/* Code points < 256 are matched against a bitmap, if one is present.\nOtherwise all codepoints are checked later. */\n\nif ((flags & ECL_MAP) != 0)\n  {\n  if (c < 256)\n    return (((const uint8_t *)ptr)[c/8] & (1u << (c&7))) != 0;\n\n  /* Skip the bitmap. */\n  ptr += 32 / sizeof(PCRE2_UCHAR);\n  }\n\n/* Do a little loop, until we reach the end of the ECLASS. */\nwhile (ptr < data_end)\n  {\n  switch (*ptr)\n    {\n    case ECL_AND:\n    ++ptr;\n    stack = (stack >> 1) & (stack | ~(uint32_t)1u);\n    PCRE2_ASSERT(stack_depth >= 2);\n    --stack_depth;\n    break;\n\n    case ECL_OR:\n    ++ptr;\n    stack = (stack >> 1) | (stack & (uint32_t)1u);\n    PCRE2_ASSERT(stack_depth >= 2);\n    --stack_depth;\n    break;\n\n    case ECL_XOR:\n    ++ptr;\n    stack = (stack >> 1) ^ (stack & (uint32_t)1u);\n    PCRE2_ASSERT(stack_depth >= 2);\n    --stack_depth;\n    break;\n\n    case ECL_NOT:\n    ++ptr;\n    stack ^= (uint32_t)1u;\n    PCRE2_ASSERT(stack_depth >= 1);\n    break;\n\n    case ECL_XCLASS:\n      {\n      uint32_t matched = PRIV(xclass)(c, ptr + 1 + LINK_SIZE, char_lists_end, utf);\n\n      ptr += GET(ptr, 1);\n      stack = (stack << 1) | matched;\n      ++stack_depth;\n      break;\n      }\n\n    /* This should never occur, but compilers may mutter if there is no\n    default. */\n\n    /* LCOV_EXCL_START */\n    default:\n    PCRE2_DEBUG_UNREACHABLE();\n    return FALSE;\n    /* LCOV_EXCL_STOP */\n    }\n  }\n\nPCRE2_ASSERT(stack_depth == 1);\n(void)stack_depth;  /* Ignore unused variable, if assertions are disabled. */\n\n/* The final bit left on the stack now holds the match result. */\nreturn (stack & 1u) != 0;\n}\n\n/* End of pcre2_xclass.c */\n"
  },
  {
    "path": "src/pcre2demo.c",
    "content": "/*************************************************\n*           PCRE2 DEMONSTRATION PROGRAM          *\n*************************************************/\n\n/* This is a demonstration program to illustrate a straightforward way of\nusing the PCRE2 regular expression library from a C program. See the\npcre2sample documentation for a short discussion (\"man pcre2sample\" if you have\nthe PCRE2 man pages installed). PCRE2 is a revised API for the library, and is\nincompatible with the original PCRE API.\n\nThere are actually three libraries, each supporting a different code unit\nwidth. This demonstration program uses the 8-bit library. The default is to\nprocess each code unit as a separate character, but if the pattern begins with\n\"(*UTF)\", both it and the subject are treated as UTF-8 strings, where\ncharacters may occupy multiple code units.\n\nIn Unix-like environments, if PCRE2 is installed in your standard system\nlibraries, you should be able to compile this program using this command:\n\ncc -Wall pcre2demo.c -lpcre2-8 -o pcre2demo\n\nIf PCRE2 is not installed in a standard place, it is likely to be installed\nwith support for the pkg-config mechanism. If you have pkg-config, you can\ncompile this program using this command:\n\ncc -Wall pcre2demo.c `pkg-config --cflags --libs libpcre2-8` -o pcre2demo\n\nIf you do not have pkg-config, you may have to use something like this:\n\ncc -Wall pcre2demo.c -I/usr/local/include -L/usr/local/lib \\\n  -R/usr/local/lib -lpcre2-8 -o pcre2demo\n\nReplace \"/usr/local/include\" and \"/usr/local/lib\" with wherever the include and\nlibrary files for PCRE2 are installed on your system. Only some operating\nsystems (Solaris is one) use the -R option.\n\nBuilding under Windows:\n\nIf you want to statically link this program against a non-dll .a file, you must\ndefine PCRE2_STATIC before including pcre2.h, so in this environment, uncomment\nthe following line. */\n\n/* #define PCRE2_STATIC */\n\n/* The PCRE2_CODE_UNIT_WIDTH macro must be defined before including pcre2.h.\nFor a program that uses only one code unit width, setting it to 8, 16, or 32\nmakes it possible to use generic function names such as pcre2_compile(). Note\nthat just changing 8 to 16 (for example) is not sufficient to convert this\nprogram to process 16-bit characters. Even in a fully 16-bit environment, where\nstring-handling functions such as strcmp() and printf() work with 16-bit\ncharacters, the code for handling the table of named substrings will still need\nto be modified. */\n\n#define PCRE2_CODE_UNIT_WIDTH 8\n\n#include <stdio.h>\n#include <string.h>\n#include <pcre2.h>\n\n\n/**************************************************************************\n* Here is the program. The API includes the concept of \"contexts\" for     *\n* setting up unusual interface requirements for compiling and matching,   *\n* such as custom memory managers and non-standard newline definitions.    *\n* This program does not do any of this, so it makes no use of contexts,   *\n* always passing NULL where a context could be given.                     *\n**************************************************************************/\n\nint main(int argc, char **argv)\n{\npcre2_code *re;\nPCRE2_SPTR pattern;     /* PCRE2_SPTR is a pointer to unsigned code units of */\nPCRE2_SPTR subject;     /* the appropriate width (in this case, 8 bits). */\nPCRE2_SPTR name_table;\n\nint errornumber;\nint find_all, caseless_match;\nint i;\nint rc;\n\nuint32_t namecount;\nuint32_t name_entry_size;\n\nPCRE2_SIZE erroroffset;\nPCRE2_SIZE *ovector;\nPCRE2_SIZE ovector_last[2];\nPCRE2_SIZE subject_length;\n\npcre2_match_data *match_data;\n\n\n/**************************************************************************\n* First, sort out the command line. Options:                              *\n* - \"-g\" to request repeated matching to find all occurrences,            *\n*   like Perl's /g option. We set the variable find_all to a non-zero     *\n*   value if the -g option is present.                                    *\n* - \"-i\" to request caseless matching, like Perl's /i option.  We set the *\n*   variable caseless_match to PCRE2_CASELESS if the -i option is         *\n*   present.                                                              *\n**************************************************************************/\n\nfind_all = 0;\ncaseless_match = 0;\nfor (i = 1; i < argc; i++)\n  {\n  if (strcmp(argv[i], \"-g\") == 0) find_all = 1;\n  else if (strcmp(argv[i], \"-i\") == 0) caseless_match = PCRE2_CASELESS;\n  else if (argv[i][0] == '-')\n    {\n    printf(\"Unrecognised option %s\\n\", argv[i]);\n    return 1;\n    }\n  else break;\n  }\n\n/* After the options, we require exactly two arguments, which are the pattern,\nand the subject string. */\n\nif (argc - i != 2)\n  {\n  printf(\"Exactly two arguments required: a regex and a subject string\\n\");\n  return 1;\n  }\n\n/* Pattern and subject are char arguments, so they can be straightforwardly\ncast to PCRE2_SPTR because we are working in 8-bit code units. The subject\nlength is cast to PCRE2_SIZE for completeness, though PCRE2_SIZE is in fact\ndefined to be size_t. */\n\npattern = (PCRE2_SPTR)argv[i];\nsubject = (PCRE2_SPTR)argv[i+1];\nsubject_length = (PCRE2_SIZE)strlen((char *)subject);\n\n\n/*************************************************************************\n* Now we are going to compile the regular expression pattern, and handle *\n* any errors that are detected.                                          *\n*************************************************************************/\n\nre = pcre2_compile(\n  pattern,               /* the pattern */\n  PCRE2_ZERO_TERMINATED, /* indicates pattern is zero-terminated */\n  caseless_match,        /* possibly enable caseless */\n  &errornumber,          /* for error number */\n  &erroroffset,          /* for error offset */\n  NULL);                 /* use default compile context */\n\n/* Compilation failed: print the error message and exit. */\n\nif (re == NULL)\n  {\n  PCRE2_UCHAR buffer[256];\n  pcre2_get_error_message(errornumber, buffer, sizeof(buffer));\n  printf(\"PCRE2 compilation failed at offset %d: %s\\n\", (int)erroroffset,\n    buffer);\n  return 1;\n  }\n\n\n/*************************************************************************\n* If the compilation succeeded, we call PCRE2 again, in order to do a    *\n* pattern match against the subject string. This does just ONE match. If *\n* further matching is needed, it will be done below. Before running the  *\n* match we must set up a match_data block for holding the result. Using  *\n* pcre2_match_data_create_from_pattern() ensures that the block is       *\n* exactly the right size for the number of capturing parentheses in the  *\n* pattern. If you need to know the actual size of a match_data block as  *\n* a number of bytes, you can find it like this:                          *\n*                                                                        *\n* PCRE2_SIZE match_data_size = pcre2_get_match_data_size(match_data);    *\n*************************************************************************/\n\nmatch_data = pcre2_match_data_create_from_pattern(re, NULL);\n\n/* Now run the match. */\n\nrc = pcre2_match(\n  re,                   /* the compiled pattern */\n  subject,              /* the subject string */\n  subject_length,       /* the length of the subject */\n  0,                    /* start at offset 0 in the subject */\n  0,                    /* default options */\n  match_data,           /* block for storing the result */\n  NULL);                /* use default match context */\n\n/* Matching failed: handle error cases */\n\nif (rc < 0)\n  {\n  switch(rc)\n    {\n    case PCRE2_ERROR_NOMATCH: printf(\"No match\\n\"); break;\n    /*\n    Handle other special cases if you like\n    */\n    default: printf(\"Matching error %d\\n\", rc); break;\n    }\n  pcre2_match_data_free(match_data);   /* Release memory used for the match */\n  pcre2_code_free(re);                 /*   data and the compiled pattern. */\n  return 1;\n  }\n\n/* Match succeeded. Get a pointer to the output vector, where string offsets\nare stored. */\n\novector = pcre2_get_ovector_pointer(match_data);\nprintf(\"Match succeeded at offset %d\\n\", (int)ovector[0]);\n\n\n/*************************************************************************\n* We have found the first match within the subject string. If the output *\n* vector wasn't big enough, say so. Then output any substrings that were *\n* captured.                                                              *\n*************************************************************************/\n\n/* The output vector wasn't big enough. This should not happen, because we used\npcre2_match_data_create_from_pattern() above. */\n\nif (rc == 0)\n  printf(\"ovector was not big enough for all the captured substrings\\n\");\n\n/* Since release 10.38 PCRE2 has locked out the use of \\K in lookaround\nassertions. This is the recommended behaviour. However, the option\nPCRE2_EXTRA_ALLOW_LOOKAROUND_BSK allows applications to re-enable the old\nbehaviour. If that is set, it is possible to run patterns such as /(?=.\\K)/ that\nuse \\K in an assertion to set the start of a match later than its end. In this\ndemonstration program, we show how to detect this case, although it cannot arise\nbecause the option is never set. */\n\nif (ovector[0] > ovector[1])\n  {\n  printf(\"\\\\K was used in an assertion to set the match start after its end.\\n\"\n    \"From end to start the match was: %.*s\\n\", (int)(ovector[0] - ovector[1]),\n      (char *)(subject + ovector[1]));\n  printf(\"Run abandoned\\n\");\n  pcre2_match_data_free(match_data);\n  pcre2_code_free(re);\n  return 1;\n  }\n\n/* Show substrings stored in the output vector by number. Obviously, in a real\napplication you might want to do things other than print them. */\n\nfor (i = 0; i < rc; i++)\n  {\n  PCRE2_SPTR substring_start = subject + ovector[2*i];\n  PCRE2_SIZE substring_length = ovector[2*i+1] - ovector[2*i];\n  printf(\"%2d: %.*s\\n\", i, (int)substring_length, (char *)substring_start);\n  }\n\n\n/**************************************************************************\n* That concludes the basic part of this demonstration program. We have    *\n* compiled a pattern, and performed a single match. The code that follows *\n* shows first how to access named substrings, and then how to code for    *\n* repeated matches on the same subject.                                   *\n**************************************************************************/\n\n/* See if there are any named substrings, and if so, show them by name. First\nwe have to extract the count of named parentheses from the pattern. */\n\n(void)pcre2_pattern_info(\n  re,                   /* the compiled pattern */\n  PCRE2_INFO_NAMECOUNT, /* get the number of named substrings */\n  &namecount);          /* where to put the answer */\n\nif (namecount == 0)\n  printf(\"No named substrings\\n\");\nelse\n  {\n  PCRE2_SPTR tabptr;\n  printf(\"Named substrings\\n\");\n\n  /* Before we can access the substrings, we must extract the table for\n  translating names to numbers, and the size of each entry in the table. */\n\n  (void)pcre2_pattern_info(\n    re,                       /* the compiled pattern */\n    PCRE2_INFO_NAMETABLE,     /* address of the table */\n    &name_table);             /* where to put the answer */\n\n  (void)pcre2_pattern_info(\n    re,                       /* the compiled pattern */\n    PCRE2_INFO_NAMEENTRYSIZE, /* size of each entry in the table */\n    &name_entry_size);        /* where to put the answer */\n\n  /* Now we can scan the table and, for each entry, print the number, the name,\n  and the substring itself. In the 8-bit library the number is held in two\n  bytes, most significant first. */\n\n  tabptr = name_table;\n  for (i = 0; i < namecount; i++)\n    {\n    int n = (tabptr[0] << 8) | tabptr[1];\n    printf(\"(%d) %*s: %.*s\\n\", n, name_entry_size - 3, tabptr + 2,\n      (int)(ovector[2*n+1] - ovector[2*n]), subject + ovector[2*n]);\n    tabptr += name_entry_size;\n    }\n  }\n\n\n/*************************************************************************\n* If the \"-g\" option was given on the command line, we want to continue  *\n* to search for additional matches in the subject string, in a similar   *\n* way to the /g option in Perl. This turns out to be trickier than you   *\n* might think because of the possibility of matching an empty string.    *\n*                                                                        *\n* To help with this task, PCRE2 provides the pcre2_next_match() helper.  *\n*************************************************************************/\n\nif (!find_all)     /* Check for -g */\n  {\n  pcre2_match_data_free(match_data);  /* Release the memory that was used */\n  pcre2_code_free(re);                /* for the match data and the pattern. */\n  return 0;                           /* Exit the program. */\n  }\n\n/* Loop for second and subsequent matches */\n\novector_last[0] = ovector[0];\novector_last[1] = ovector[1];\n\nfor (;;)\n  {\n  PCRE2_SIZE start_offset;\n  uint32_t options;\n\n  /* After each successful match, we use pcre2_next_match() to obtain the match\n  parameters for subsequent match attempts. */\n\n  if (!pcre2_next_match(match_data, &start_offset, &options))\n    break;\n\n  /* Run the next matching operation */\n\n  rc = pcre2_match(\n    re,                   /* the compiled pattern */\n    subject,              /* the subject string */\n    subject_length,       /* the length of the subject */\n    start_offset,         /* starting offset in the subject */\n    options,              /* options */\n    match_data,           /* block for storing the result */\n    NULL);                /* use default match context */\n\n  /* If this match attempt fails, exit the loop for subsequent matches. */\n\n  if (rc == PCRE2_ERROR_NOMATCH)\n    break;\n\n  /* Other matching errors are not recoverable. */\n\n  if (rc < 0)\n    {\n    printf(\"Matching error %d\\n\", rc);\n    pcre2_match_data_free(match_data);\n    pcre2_code_free(re);\n    return 1;\n    }\n\n  /* This demonstration program depends on pcre2_next_match() to ensure that the\n  loop for second and subsequent matches does not run forever. However, it would\n  be robust practice for a production application to verify this. The following\n  block of code shows how to do this. This error case is not reachable unless\n  there is a bug in PCRE2.\n\n  Because this program does not set the PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK option,\n  the logic is simple. We verify that either ovector[1] has advanced, or that we\n  have an empty match touching the end of a previous non-empty match. See the\n  API documentation for guidance if your application uses\n  PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK and searches for multiple matches. */\n\n  if (!(ovector[1] > ovector_last[1] ||\n        (ovector[1] == ovector[0] && ovector_last[1] > ovector_last[0] &&\n         ovector[1] == ovector_last[1])))\n    {\n    printf(\"\\\\K was used in an assertion to yield non-advancing matches.\\n\");\n    printf(\"Run abandoned\\n\");\n    pcre2_match_data_free(match_data);\n    pcre2_code_free(re);\n    return 1;\n    }\n\n  ovector_last[0] = ovector[0];\n  ovector_last[1] = ovector[1];\n\n  /* Match succeeded. */\n\n  printf(\"\\nMatch succeeded again at offset %d\\n\", (int)ovector[0]);\n\n  /* The match succeeded, but the output vector wasn't big enough. This\n  should not happen. */\n\n  if (rc == 0)\n    printf(\"ovector was not big enough for all the captured substrings\\n\");\n\n  /* We guard against patterns such as /(?=.\\K)/ that use \\K in an assertion to\n  set the start of a match later than its end. As explained above, this case\n  should not occur because this demonstration program does not set the\n  PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK option, however, we do include code showing\n  how to detect it. */\n\n  if (ovector[0] > ovector[1])\n    {\n    printf(\"\\\\K was used in an assertion to set the match start after its end.\\n\"\n      \"From end to start the match was: %.*s\\n\", (int)(ovector[0] - ovector[1]),\n        (char *)(subject + ovector[1]));\n    printf(\"Run abandoned\\n\");\n    pcre2_match_data_free(match_data);\n    pcre2_code_free(re);\n    return 1;\n    }\n\n  /* As before, show substrings stored in the output vector by number, and then\n  also any named substrings. */\n\n  for (i = 0; i < rc; i++)\n    {\n    PCRE2_SPTR substring_start = subject + ovector[2*i];\n    size_t substring_length = ovector[2*i+1] - ovector[2*i];\n    printf(\"%2d: %.*s\\n\", i, (int)substring_length, (char *)substring_start);\n    }\n\n  if (namecount == 0)\n    printf(\"No named substrings\\n\");\n  else\n    {\n    PCRE2_SPTR tabptr = name_table;\n    printf(\"Named substrings\\n\");\n    for (i = 0; i < namecount; i++)\n      {\n      int n = (tabptr[0] << 8) | tabptr[1];\n      printf(\"(%d) %*s: %.*s\\n\", n, name_entry_size - 3, tabptr + 2,\n        (int)(ovector[2*n+1] - ovector[2*n]), subject + ovector[2*n]);\n      tabptr += name_entry_size;\n      }\n    }\n  }      /* End of loop to find second and subsequent matches */\n\nprintf(\"\\n\");\n\npcre2_match_data_free(match_data);\npcre2_code_free(re);\nreturn 0;\n}\n\n/* End of pcre2demo.c */\n"
  },
  {
    "path": "src/pcre2grep.c",
    "content": "/*************************************************\n*               pcre2grep program                *\n*************************************************/\n\n/* This is a grep program that uses the 8-bit PCRE regular expression library\nvia the PCRE2 updated API to do its pattern matching. On Unix-like, Windows,\nand native z/OS systems it can recurse into directories, and in z/OS it can\nhandle PDS files.\n\nNote that for native z/OS, in addition to defining the NATIVE_ZOS macro, an\nadditional header is required. That header is not included in the main PCRE2\ndistribution because other apparatus is needed to compile pcre2grep for z/OS.\nThe header can be found in the special z/OS distribution, which is available\nfrom www.zaconsultants.net or from www.cbttape.org.\n\n           Copyright (c) 1997-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"pcre2_util.h\"\n\n#include <ctype.h>\n#include <limits.h>\n#include <locale.h>\n#include <stddef.h>\n#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include <errno.h>\n\n#include <sys/types.h>\n#include <sys/stat.h>\n\n#if (defined _WIN32 || (defined HAVE_WINDOWS_H && HAVE_WINDOWS_H)) \\\n  && !defined WIN32 && !defined(__CYGWIN__)\n#define WIN32\n#endif\n\n/* Some CMake's define it still */\n#if defined(__CYGWIN__) && defined(WIN32)\n#undef WIN32\n#endif\n\n#ifdef __VMS\n#include clidef\n#include descrip\n#include lib$routines\n#endif\n\n#ifdef WIN32\n#include <io.h>                /* For _setmode() */\n#include <fcntl.h>             /* For _O_BINARY */\n#endif\n\n#if defined(SUPPORT_PCRE2GREP_CALLOUT) && defined(SUPPORT_PCRE2GREP_CALLOUT_FORK)\n#ifdef WIN32\n#include <process.h>\n#else\n#include <sys/wait.h>\n#endif\n#endif\n\n#ifdef SUPPORT_VALGRIND\n#include <valgrind/memcheck.h>\n#endif\n\n#ifdef HAVE_UNISTD_H\n#include <unistd.h>\n#endif\n\n#ifdef SUPPORT_LIBZ\n#include <zlib.h>\n#endif\n\n#ifdef SUPPORT_LIBBZ2\n#include <bzlib.h>\n#endif\n\n#define PCRE2_CODE_UNIT_WIDTH 8\n#include \"pcre2.h\"\n\n/* Older versions of MSVC lack snprintf(). This define allows for\nwarning/error-free compilation and testing with MSVC compilers back to at least\nMSVC 10/2010. Except for VC6 (which is missing some fundamentals and fails). */\n\n#if defined(_MSC_VER) && (_MSC_VER < 1900)\n#define snprintf _snprintf\n#endif\n\n/* old VC and older compilers don't support %td or %zu, and even some that claim to\nbe C99 don't support it (hence DISABLE_PERCENT_ZT). */\n\n#if defined(DISABLE_PERCENT_ZT) || (defined(_MSC_VER) && (_MSC_VER < 1800)) || \\\n  (!defined(_MSC_VER) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L))\n#ifdef _WIN64\n#define SIZ_FORM \"llu\"\n#else\n#define SIZ_FORM \"lu\"\n#endif\n#else\n#define SIZ_FORM \"zu\"\n#endif\n\n#define FALSE 0\n#define TRUE 1\n\ntypedef int BOOL;\n\n#define DEFAULT_CAPTURE_MAX 50\n\n#if BUFSIZ > 8192\n#define MAXPATLEN BUFSIZ\n#else\n#define MAXPATLEN 8192\n#endif\n\n#define FNBUFSIZ 2048\n#define ERRBUFSIZ 256\n\n/* Values for the \"filenames\" variable, which specifies options for file name\noutput. The order is important; it is assumed that a file name is wanted for\nall values greater than FN_DEFAULT. */\n\nenum { FN_NONE, FN_DEFAULT, FN_MATCH_ONLY, FN_NOMATCH_ONLY, FN_FORCE };\n\n/* File reading styles */\n\nenum { FR_PLAIN, FR_LIBZ, FR_LIBBZ2 };\n\n/* Actions for the -d and -D options */\n\nenum { dee_READ, dee_SKIP, dee_RECURSE };\nenum { DEE_READ, DEE_SKIP };\n\n/* Actions for special processing options (flag bits) */\n\n#define PO_WORD_MATCH     0x0001\n#define PO_LINE_MATCH     0x0002\n#define PO_FIXED_STRINGS  0x0004\n\n/* Binary file options */\n\nenum { BIN_BINARY, BIN_NOMATCH, BIN_TEXT };\n\n/* Return values from decode_dollar_escape() */\n\nenum { DDE_ERROR, DDE_CAPTURE, DDE_CHAR };\n\n/* In newer versions of gcc, with FORTIFY_SOURCE set (the default in some\nenvironments), a warning is issued if the value of fwrite() is ignored.\nUnfortunately, casting to (void) does not suppress the warning. To get round\nthis, we use a macro that compiles a fudge. Oddly, this does not also seem to\napply to fprintf(). */\n\n#define FWRITE_IGNORE(a,b,c,d) if (fwrite(a,b,c,d)) {}\n\n/* Under Windows, we have to set stdout to be binary, so that it does not\nconvert \\r\\n at the ends of output lines to \\r\\r\\n. However, that means that\nany messages written to stdout must have \\r\\n as their line terminator. This is\nhandled by using STDOUT_NL as the newline string. We also use a normal double\nquote for the example, as single quotes aren't usually available. */\n\n#ifdef WIN32\n#define STDOUT_NL     \"\\r\\n\"\n#define STDOUT_NL_LEN  2\n#define QUOT          \"\\\"\"\n#else\n#define STDOUT_NL      \"\\n\"\n#define STDOUT_NL_LEN  1\n#define QUOT           \"'\"\n#endif\n\n/* This code is returned from decode_dollar_escape() when $n is encountered,\nand used to mean \"output STDOUT_NL\". It is, of course, not a valid Unicode code\npoint. */\n\n#define STDOUT_NL_CODE 0x7fffffffu\n\n\n\n/*************************************************\n*               Global variables                 *\n*************************************************/\n\nstatic const char *colour_string = \"1;31\";\nstatic const char *colour_option = NULL;\nstatic const char *dee_option = NULL;\nstatic const char *DEE_option = NULL;\nstatic const char *locale = NULL;\nstatic const char *newline_arg = NULL;\nstatic const char *group_separator = \"--\";\nstatic const char *om_separator = NULL;\nstatic const char *stdin_name = \"(standard input)\";\nstatic const char *output_text = NULL;\n\nstatic char *main_buffer = NULL;\n\nstatic const char *printname_nl = STDOUT_NL;  /* Changed to NULL for -Z */\nstatic int printname_colon = ':';             /* Changed to 0 for -Z */\nstatic int printname_hyphen = '-';            /* Changed to 0 for -Z */\n\nstatic int after_context = 0;\nstatic int before_context = 0;\nstatic int binary_files = BIN_BINARY;\nstatic int both_context = 0;\nstatic int endlinetype;\n\nstatic int count_limit = -1;  /* Not long, so that it works with OP_NUMBER */\nstatic unsigned long int counts_printed = 0;\nstatic unsigned long int total_count = 0;\n\nstatic PCRE2_SIZE bufthird = PCRE2GREP_BUFSIZE;\nstatic PCRE2_SIZE max_bufthird = PCRE2GREP_MAX_BUFSIZE;\nstatic PCRE2_SIZE bufsize = 3*PCRE2GREP_BUFSIZE;\n\n#ifdef WIN32\nstatic int dee_action = dee_SKIP;\n#else\nstatic int dee_action = dee_READ;\n#endif\n\nstatic int DEE_action = DEE_READ;\nstatic int error_count = 0;\nstatic int filenames = FN_DEFAULT;\n\n#ifdef SUPPORT_PCRE2GREP_JIT\nstatic BOOL use_jit = TRUE;\n#else\nstatic BOOL use_jit = FALSE;\n#endif\n\nstatic const uint8_t *character_tables = NULL;\n\nstatic uint32_t pcre2_options = 0;\nstatic uint32_t extra_options = 0;\nstatic uint32_t heap_limit = ~(uint32_t)0;\nstatic uint32_t match_limit = 0;\nstatic uint32_t depth_limit = 0;\n\nstatic pcre2_compile_context *compile_context;\nstatic pcre2_match_context *match_context;\nstatic pcre2_match_data *match_data, *match_data_pair[2];\nstatic PCRE2_SIZE *offsets, *offsets_pair[2];\nstatic int match_data_toggle;\nstatic uint32_t offset_size;\nstatic uint32_t capture_max = DEFAULT_CAPTURE_MAX;\n\nstatic BOOL all_matches = FALSE;\nstatic BOOL case_restrict = FALSE;\nstatic BOOL count_only = FALSE;\nstatic BOOL do_colour = FALSE;\n#ifdef WIN32\nstatic BOOL do_ansi = FALSE;\n#endif\nstatic BOOL file_offsets = FALSE;\nstatic BOOL hyphenpending = FALSE;\nstatic BOOL invert = FALSE;\nstatic BOOL line_buffered = FALSE;\nstatic BOOL line_offsets = FALSE;\nstatic BOOL multiline = FALSE;\nstatic BOOL no_ucp = FALSE;\nstatic BOOL number = FALSE;\nstatic BOOL omit_zero_count = FALSE;\nstatic BOOL resource_error = FALSE;\nstatic BOOL quiet = FALSE;\nstatic BOOL show_total_count = FALSE;\nstatic BOOL silent = FALSE;\nstatic BOOL utf = FALSE;\nstatic BOOL posix_digit = FALSE;\nstatic BOOL posix_pattern_file = FALSE;\n\nstatic uint8_t utf8_buffer[8];\n\n\n/* Structure for list of --only-matching capturing numbers. */\n\ntypedef struct omstr {\n  struct omstr *next;\n  int groupnum;\n} omstr;\n\nstatic omstr *only_matching = NULL;\nstatic omstr *only_matching_last = NULL;\nstatic int only_matching_count;\n\n/* Structure for holding the two variables that describe a number chain. */\n\ntypedef struct omdatastr {\n  omstr **anchor;\n  omstr **lastptr;\n} omdatastr;\n\nstatic omdatastr only_matching_data = { &only_matching, &only_matching_last };\n\n/* Structure for list of file names (for -f and --{in,ex}clude-from) */\n\ntypedef struct fnstr {\n  struct fnstr *next;\n  char *name;\n} fnstr;\n\nstatic fnstr *exclude_from = NULL;\nstatic fnstr *exclude_from_last = NULL;\nstatic fnstr *include_from = NULL;\nstatic fnstr *include_from_last = NULL;\n\nstatic fnstr *file_lists = NULL;\nstatic fnstr *file_lists_last = NULL;\nstatic fnstr *pattern_files = NULL;\nstatic fnstr *pattern_files_last = NULL;\n\n/* Structure for holding the two variables that describe a file name chain. */\n\ntypedef struct fndatastr {\n  fnstr **anchor;\n  fnstr **lastptr;\n} fndatastr;\n\nstatic fndatastr exclude_from_data = { &exclude_from, &exclude_from_last };\nstatic fndatastr include_from_data = { &include_from, &include_from_last };\nstatic fndatastr file_lists_data = { &file_lists, &file_lists_last };\nstatic fndatastr pattern_files_data = { &pattern_files, &pattern_files_last };\n\n/* Structure for pattern and its compiled form; used for matching patterns and\nalso for include/exclude patterns. */\n\ntypedef struct patstr {\n  struct patstr *next;\n  char *string;\n  PCRE2_SIZE length;\n  pcre2_code *compiled;\n} patstr;\n\nstatic patstr *patterns = NULL;\nstatic patstr *patterns_last = NULL;\nstatic patstr *include_patterns = NULL;\nstatic patstr *include_patterns_last = NULL;\nstatic patstr *exclude_patterns = NULL;\nstatic patstr *exclude_patterns_last = NULL;\nstatic patstr *include_dir_patterns = NULL;\nstatic patstr *include_dir_patterns_last = NULL;\nstatic patstr *exclude_dir_patterns = NULL;\nstatic patstr *exclude_dir_patterns_last = NULL;\n\n/* Structure holding the two variables that describe a pattern chain. A pointer\nto such structures is used for each appropriate option. */\n\ntypedef struct patdatastr {\n  patstr **anchor;\n  patstr **lastptr;\n} patdatastr;\n\nstatic patdatastr match_patdata = { &patterns, &patterns_last };\nstatic patdatastr include_patdata = { &include_patterns, &include_patterns_last };\nstatic patdatastr exclude_patdata = { &exclude_patterns, &exclude_patterns_last };\nstatic patdatastr include_dir_patdata = { &include_dir_patterns, &include_dir_patterns_last };\nstatic patdatastr exclude_dir_patdata = { &exclude_dir_patterns, &exclude_dir_patterns_last };\n\nstatic patstr **incexlist[4] = { &include_patterns, &exclude_patterns,\n                                 &include_dir_patterns, &exclude_dir_patterns };\n\nstatic const char *incexname[4] = { \"--include\", \"--exclude\",\n                                    \"--include-dir\", \"--exclude-dir\" };\n\n/* Structure for options and list of them */\n\nenum { OP_NODATA, OP_STRING, OP_OP_STRING, OP_NUMBER, OP_U32NUMBER, OP_SIZE,\n       OP_OP_NUMBER, OP_OP_NUMBERS, OP_PATLIST, OP_FILELIST, OP_BINFILES };\n\ntypedef struct option_item {\n  int type;\n  int one_char;\n  void *dataptr;\n  const char *long_name;\n  const char *help_text;\n} option_item;\n\n/* Options without a single-letter equivalent get a negative value. This can be\nused to identify them. */\n\n#define N_COLOUR       (-1)\n#define N_EXCLUDE      (-2)\n#define N_EXCLUDE_DIR  (-3)\n#define N_HELP         (-4)\n#define N_INCLUDE      (-5)\n#define N_INCLUDE_DIR  (-6)\n#define N_LABEL        (-7)\n#define N_LOCALE       (-8)\n#define N_NULL         (-9)\n#define N_LOFFSETS     (-10)\n#define N_FOFFSETS     (-11)\n#define N_LBUFFER      (-12)\n#define N_H_LIMIT      (-13)\n#define N_M_LIMIT      (-14)\n#define N_M_LIMIT_DEP  (-15)\n#define N_BUFSIZE      (-16)\n#define N_NOJIT        (-17)\n#define N_FILE_LIST    (-18)\n#define N_BINARY_FILES (-19)\n#define N_EXCLUDE_FROM (-20)\n#define N_INCLUDE_FROM (-21)\n#define N_OM_SEPARATOR (-22)\n#define N_MAX_BUFSIZE  (-23)\n#define N_OM_CAPTURE   (-24)\n#define N_ALLABSK      (-25)\n#define N_POSIX_DIGIT  (-26)\n#define N_GROUP_SEPARATOR (-27)\n#define N_NO_GROUP_SEPARATOR (-28)\n#define N_POSIX_PATFILE (-29)\n\nstatic option_item optionlist[] = {\n  { OP_NODATA,     N_NULL,   NULL,              \"\",              \"terminate options\" },\n  { OP_NODATA,     N_HELP,   NULL,              \"help\",          \"display this help and exit\" },\n  { OP_NUMBER,     'A',      &after_context,    \"after-context=number\", \"set number of following context lines\" },\n  { OP_NODATA,     'a',      NULL,              \"text\",          \"treat binary files as text\" },\n  { OP_NUMBER,     'B',      &before_context,   \"before-context=number\", \"set number of prior context lines\" },\n  { OP_BINFILES,   N_BINARY_FILES, NULL,        \"binary-files=word\", \"set treatment of binary files\" },\n  { OP_SIZE,       N_BUFSIZE,&bufthird,         \"buffer-size=number\", \"set processing buffer starting size\" },\n  { OP_SIZE,       N_MAX_BUFSIZE,&max_bufthird, \"max-buffer-size=number\",  \"set processing buffer maximum size\" },\n  { OP_OP_STRING,  N_COLOUR, &colour_option,    \"color=option\",  \"matched text color option\" },\n  { OP_OP_STRING,  N_COLOUR, &colour_option,    \"colour=option\", \"matched text colour option\" },\n  { OP_NUMBER,     'C',      &both_context,     \"context=number\", \"set number of context lines, before & after\" },\n  { OP_NODATA,     'c',      NULL,              \"count\",         \"print only a count of matching lines per FILE\" },\n  { OP_STRING,     'D',      &DEE_option,       \"devices=action\",\"how to handle devices, FIFOs, and sockets\" },\n  { OP_STRING,     'd',      &dee_option,       \"directories=action\", \"how to handle directories\" },\n  { OP_NODATA, N_POSIX_DIGIT, NULL,             \"posix-digit\",   \"\\\\d always matches [0-9], even in UTF/UCP mode\" },\n  { OP_NODATA,     'E',      NULL,              \"case-restrict\", \"restrict case matching (no mix ASCII/non-ASCII)\" },\n  { OP_PATLIST,    'e',      &match_patdata,    \"regex(p)=pattern\", \"specify pattern (may be used more than once)\" },\n  { OP_NODATA,     'F',      NULL,              \"fixed-strings\", \"patterns are sets of newline-separated strings\" },\n  { OP_FILELIST,   'f',      &pattern_files_data, \"file=path\",   \"read patterns from file\" },\n  { OP_NODATA, N_POSIX_PATFILE, NULL,           \"posix-pattern-file\", \"use POSIX semantics for pattern files\" },\n  { OP_FILELIST,   N_FILE_LIST, &file_lists_data, \"file-list=path\",\"read files to search from file\" },\n  { OP_NODATA,     N_FOFFSETS, NULL,            \"file-offsets\",  \"output file offsets, not text\" },\n  { OP_STRING,     N_GROUP_SEPARATOR, &group_separator, \"group-separator=text\", \"set separator between groups of lines\" },\n  { OP_NODATA,     'H',      NULL,              \"with-filename\", \"force the prefixing filename on output\" },\n  { OP_NODATA,     'h',      NULL,              \"no-filename\",   \"suppress the prefixing filename on output\" },\n  { OP_NODATA,     'I',      NULL,              \"\",              \"treat binary files as not matching (ignore)\" },\n  { OP_NODATA,     'i',      NULL,              \"ignore-case\",   \"ignore case distinctions\" },\n  { OP_NODATA,     'l',      NULL,              \"files-with-matches\", \"print only FILE names containing matches\" },\n  { OP_NODATA,     'L',      NULL,              \"files-without-match\",\"print only FILE names not containing matches\" },\n  { OP_STRING,     N_LABEL,  &stdin_name,       \"label=name\",    \"set name for standard input\" },\n  { OP_NODATA,     N_LBUFFER, NULL,             \"line-buffered\", \"use line buffering\" },\n  { OP_NODATA,     N_LOFFSETS, NULL,            \"line-offsets\",  \"output line numbers and offsets, not text\" },\n  { OP_STRING,     N_LOCALE, &locale,           \"locale=locale\", \"use the named locale\" },\n  { OP_U32NUMBER,  N_H_LIMIT, &heap_limit,      \"heap-limit=number\",  \"set PCRE2 heap limit option (kibibytes)\" },\n  { OP_U32NUMBER,  N_M_LIMIT, &match_limit,     \"match-limit=number\", \"set PCRE2 match limit option\" },\n  { OP_U32NUMBER,  N_M_LIMIT_DEP, &depth_limit, \"depth-limit=number\", \"set PCRE2 depth limit option\" },\n  { OP_U32NUMBER,  N_M_LIMIT_DEP, &depth_limit, \"recursion-limit=number\", \"obsolete synonym for depth-limit\" },\n  { OP_NODATA,     'M',      NULL,              \"multiline\",     \"run in multiline mode\" },\n  { OP_NUMBER,     'm',      &count_limit,      \"max-count=number\", \"stop after <number> matched lines\" },\n  { OP_STRING,     'N',      &newline_arg,      \"newline=type\",  \"set newline type (CR, LF, CRLF, ANYCRLF, ANY, or NUL)\" },\n  { OP_NODATA,     'n',      NULL,              \"line-number\",   \"print line number with output lines\" },\n#ifdef SUPPORT_PCRE2GREP_JIT\n  { OP_NODATA,     N_NOJIT,  NULL,              \"no-jit\",        \"do not use just-in-time compiler optimization\" },\n#else\n  { OP_NODATA,     N_NOJIT,  NULL,              \"no-jit\",        \"ignored: this pcre2grep does not support JIT\" },\n#endif\n  { OP_NODATA,     N_NO_GROUP_SEPARATOR, NULL,   \"no-group-separator\", \"suppress separators between groups of lines\" },\n  { OP_STRING,     'O',      &output_text,       \"output=text\",   \"show only this text (possibly expanded)\" },\n  { OP_OP_NUMBERS, 'o',      &only_matching_data, \"only-matching=n\", \"show only the part of the line that matched\" },\n  { OP_STRING,     N_OM_SEPARATOR, &om_separator, \"om-separator=text\", \"set separator for multiple -o output\" },\n  { OP_U32NUMBER,  N_OM_CAPTURE, &capture_max,  \"om-capture=n\",  \"set capture count for --only-matching\" },\n  { OP_NODATA,     'P',      NULL,              \"no-ucp\",        \"do not enable UCP mode with Unicode\" },\n  { OP_NODATA,     'q',      NULL,              \"quiet\",         \"suppress output, just set return code\" },\n  { OP_NODATA,     'r',      NULL,              \"recursive\",     \"recursively scan sub-directories\" },\n  { OP_PATLIST,    N_EXCLUDE,&exclude_patdata,  \"exclude=pattern\",\"exclude matching files when recursing\" },\n  { OP_PATLIST,    N_INCLUDE,&include_patdata,  \"include=pattern\",\"include matching files when recursing\" },\n  { OP_PATLIST,    N_EXCLUDE_DIR,&exclude_dir_patdata, \"exclude-dir=pattern\",\"exclude matching directories when recursing\" },\n  { OP_PATLIST,    N_INCLUDE_DIR,&include_dir_patdata, \"include-dir=pattern\",\"include matching directories when recursing\" },\n  { OP_FILELIST,   N_EXCLUDE_FROM,&exclude_from_data, \"exclude-from=path\", \"read exclude list from file\" },\n  { OP_FILELIST,   N_INCLUDE_FROM,&include_from_data, \"include-from=path\", \"read include list from file\" },\n  { OP_NODATA,    's',      NULL,              \"no-messages\",   \"suppress error messages\" },\n  { OP_NODATA,    't',      NULL,              \"total-count\",   \"print total count of matching lines\" },\n  { OP_NODATA,    'u',      NULL,              \"utf\",           \"use UTF/Unicode\" },\n  { OP_NODATA,    'U',      NULL,              \"utf-allow-invalid\", \"use UTF/Unicode, allow for invalid code units\" },\n  { OP_NODATA,    'V',      NULL,              \"version\",       \"print version information and exit\" },\n  { OP_NODATA,    'v',      NULL,              \"invert-match\",  \"select non-matching lines\" },\n  { OP_NODATA,    'w',      NULL,              \"word-regex(p)\", \"force patterns to match only as words\"  },\n  { OP_NODATA,    'x',      NULL,              \"line-regex(p)\", \"force patterns to match only whole lines\" },\n  { OP_NODATA,   N_ALLABSK, NULL,              \"allow-lookaround-bsk\", \"allow \\\\K in lookarounds\" },\n  { OP_NODATA,    'Z',      NULL,              \"null\",          \"output 0 byte after file names\"  },\n  { OP_NODATA,    0,        NULL,               NULL,            NULL }\n};\n\n/* Table of names for newline types. Must be kept in step with the definitions\nof PCRE2_NEWLINE_xx in pcre2.h. */\n\nstatic const char *newlines[] = {\n  \"DEFAULT\", \"CR\", \"LF\", \"CRLF\", \"ANY\", \"ANYCRLF\", \"NUL\" };\n\n/* UTF-8 tables  */\n\nconst int utf8_table1[] =\n  { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};\nconst int utf8_table1_size = sizeof(utf8_table1) / sizeof(int);\n\nconst int utf8_table2[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc};\nconst int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};\n\nconst char utf8_table4[] = {\n  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,\n  3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };\n\n\n\n/*************************************************\n*           Convert code point to UTF-8          *\n*************************************************/\n\n/* A static buffer is used. Returns the number of bytes. */\n\nstatic int\nord2utf8(uint32_t value)\n{\nint i, j;\nuint8_t *utf8bytes = utf8_buffer;\nfor (i = 0; i < utf8_table1_size; i++)\n  if (value <= (uint32_t)utf8_table1[i]) break;\nutf8bytes += i;\nfor (j = i; j > 0; j--)\n  {\n  *utf8bytes-- = 0x80 | (value & 0x3f);\n  value >>= 6;\n  }\n*utf8bytes = utf8_table2[i] | value;\nreturn i + 1;\n}\n\n\n\n/*************************************************\n*         Case-independent string compare        *\n*************************************************/\n\nstatic int\nstrcmpic(const char *str1, const char *str2)\n{\nunsigned int c1, c2;\nwhile (*str1 != '\\0' || *str2 != '\\0')\n  {\n  c1 = tolower(*str1++);\n  c2 = tolower(*str2++);\n  if (c1 != c2) return ((c1 > c2) << 1) - 1;\n  }\nreturn 0;\n}\n\n\n/*************************************************\n*         Parse GREP_COLORS                      *\n*************************************************/\n\n/* Extract ms or mt from GREP_COLORS.\n\nArgument:  the string, possibly NULL\nReturns:   the value of ms or mt, or NULL if neither present\n*/\n\nstatic char *\nparse_grep_colors(const char *gc)\n{\nstatic char seq[16];\nconst char *col;\nuint32_t len;\nif (gc == NULL) return NULL;\ncol = strstr(gc, \"ms=\");\nif (col == NULL) col = strstr(gc, \"mt=\");\nif (col == NULL) return NULL;\nlen = 0;\ncol += 3;\nwhile (*col != ':' && *col != 0 && len < sizeof(seq)-1)\n  seq[len++] = *col++;\nseq[len] = 0;\nreturn seq;\n}\n\n\n/*************************************************\n*         Exit from the program                  *\n*************************************************/\n\n/* If there has been a resource error, give a suitable message.\n\nArgument:  the return code\nReturns:   does not return\n*/\n\nstatic void\npcre2grep_exit(int rc)\n{\n/* VMS does exit codes differently: both exit(1) and exit(0) return with a\nstatus of 1, which is not helpful. To help with this problem, define a symbol\n(akin to an environment variable) called \"PCRE2GREP_RC\" and put the exit code\ntherein. */\n\n#ifdef __VMS\n  char val_buf[4];\n  $DESCRIPTOR(sym_nam, \"PCRE2GREP_RC\");\n  $DESCRIPTOR(sym_val, val_buf);\n  sprintf(val_buf, \"%d\", rc);\n  sym_val.dsc$w_length = strlen(val_buf);\n  lib$set_symbol(&sym_nam, &sym_val);\n#endif\n\nif (resource_error)\n  {\n  fprintf(stderr, \"pcre2grep: Error %d, %d, %d or %d means that a resource \"\n    \"limit was exceeded.\\n\", PCRE2_ERROR_JIT_STACKLIMIT, PCRE2_ERROR_MATCHLIMIT,\n    PCRE2_ERROR_DEPTHLIMIT, PCRE2_ERROR_HEAPLIMIT);\n  fprintf(stderr, \"pcre2grep: Check your regex for nested unlimited loops.\\n\");\n  }\nexit(rc);\n}\n\n\n/*************************************************\n*          Add item to chain of patterns         *\n*************************************************/\n\n/* Used to add an item onto a chain, or just return an unconnected item if the\n\"after\" argument is NULL.\n\nArguments:\n  s          pattern string to add\n  patlen     length of pattern\n  after      if not NULL points to item to insert after\n\nReturns:     new pattern block or NULL on error\n*/\n\nstatic patstr *\nadd_pattern(char *s, PCRE2_SIZE patlen, patstr *after)\n{\npatstr *p = (patstr *)malloc(sizeof(patstr));\n\n/* LCOV_EXCL_START - These won't be hit in normal testing. */\n\nif (p == NULL)\n  {\n  fprintf(stderr, \"pcre2grep: malloc failed\\n\");\n  pcre2grep_exit(2);\n  }\nif (patlen > MAXPATLEN)\n  {\n  fprintf(stderr, \"pcre2grep: pattern is too long (limit is %d bytes)\\n\",\n    MAXPATLEN);\n  free(p);\n  return NULL;\n  }\n\n/* LCOV_EXCL_STOP */\n\np->next = NULL;\np->string = s;\np->length = patlen;\np->compiled = NULL;\n\nif (after != NULL)\n  {\n  p->next = after->next;\n  after->next = p;\n  }\nreturn p;\n}\n\n\n/*************************************************\n*           Free chain of patterns               *\n*************************************************/\n\n/* Used for several chains of patterns.\n\nArgument: pointer to start of chain\nReturns:  nothing\n*/\n\nstatic void\nfree_pattern_chain(patstr *pc)\n{\nwhile (pc != NULL)\n  {\n  patstr *p = pc;\n  pc = p->next;\n  if (p->compiled != NULL) pcre2_code_free(p->compiled);\n  free(p);\n  }\n}\n\n\n/*************************************************\n*           Free chain of file names             *\n*************************************************/\n\n/*\nArgument: pointer to start of chain\nReturns:  nothing\n*/\n\nstatic void\nfree_file_chain(fnstr *fn)\n{\nwhile (fn != NULL)\n  {\n  fnstr *f = fn;\n  fn = f->next;\n  free(f);\n  }\n}\n\n\n/*************************************************\n*            OS-specific functions               *\n*************************************************/\n\n/* These definitions are needed in all Windows environments, even those where\nUnix-style directory scanning can be used (see below). */\n\n#ifdef WIN32\n\n#ifndef STRICT\n# define STRICT\n#endif\n#ifndef WIN32_LEAN_AND_MEAN\n# define WIN32_LEAN_AND_MEAN\n#endif\n\n#include <windows.h>\n\n#define iswild(name) (strpbrk(name, \"*?\") != NULL)\n\n/* Convert ANSI BGR format to RGB used by Windows */\n#define BGR_RGB(x) (((x) & 1 ? 4 : 0) | ((x) & 2) | ((x) & 4 ? 1 : 0))\n\nstatic HANDLE hstdout;\nstatic CONSOLE_SCREEN_BUFFER_INFO csbi;\nstatic WORD match_colour;\n\nstatic WORD\ndecode_ANSI_colour(const char *cs)\n{\nWORD result = csbi.wAttributes;\nwhile (*cs)\n  {\n  if (isdigit((unsigned char)(*cs)))\n    {\n    int code = atoi(cs);\n    if (code == 1) result |= 0x08;\n    else if (code == 4) result |= 0x8000;\n    else if (code == 5) result |= 0x80;\n    else if (code >= 30 && code <= 37) result = (result & 0xF8) | BGR_RGB(code - 30);\n    else if (code == 39) result = (result & 0xF0) | (csbi.wAttributes & 0x0F);\n    else if (code >= 40 && code <= 47) result = (result & 0x8F) | (BGR_RGB(code - 40) << 4);\n    else if (code == 49) result = (result & 0x0F) | (csbi.wAttributes & 0xF0);\n    /* aixterm high intensity colour codes */\n    else if (code >= 90 && code <= 97) result = (result & 0xF0) | BGR_RGB(code - 90) | 0x08;\n    else if (code >= 100 && code <= 107) result = (result & 0x0F) | (BGR_RGB(code - 100) << 4) | 0x80;\n\n    while (isdigit((unsigned char)(*cs))) cs++;\n    }\n  if (*cs) cs++;\n  }\nreturn result;\n}\n\n\nstatic void\ninit_colour_output(void)\n{\nif (do_colour)\n  {\n  hstdout = GetStdHandle(STD_OUTPUT_HANDLE);\n  /* This fails when redirected to con; try again if so. */\n  if (!GetConsoleScreenBufferInfo(hstdout, &csbi) && !do_ansi)\n    {\n    HANDLE hcon = CreateFile(\"CONOUT$\", GENERIC_READ | GENERIC_WRITE,\n      FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);\n    GetConsoleScreenBufferInfo(hcon, &csbi);\n    CloseHandle(hcon);\n    }\n  match_colour = decode_ANSI_colour(colour_string);\n  /* No valid colour found - turn off colouring */\n  if (!match_colour) do_colour = FALSE;\n  }\n}\n\n#endif  /* WIN32 */\n\n\n/* The following sets of functions are defined so that they can be made system\nspecific. At present there are versions for Unix-style environments, Windows,\nnative z/OS, and \"no support\". */\n\n\n/************* Directory scanning Unix-style and z/OS ***********/\n\n#if !defined WIN32 && \\\n  (defined HAVE_SYS_STAT_H && defined HAVE_DIRENT_H && defined HAVE_SYS_TYPES_H) || \\\n  defined NATIVE_ZOS\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <dirent.h>\n\n#if defined NATIVE_ZOS\n/************* Directory and PDS/E scanning for z/OS ***********/\n/************* z/OS looks mostly like Unix with USS ************/\n/* However, z/OS needs the #include statements in this header */\n#include \"pcrzosfs.h\"\n/* That header is not included in the main PCRE distribution because\n   other apparatus is needed to compile pcre2grep for z/OS. The header\n   can be found in the special z/OS distribution, which is available\n   from www.zaconsultants.net or from www.cbttape.org. */\n#endif\n\ntypedef DIR directory_type;\n#define FILESEP '/'\n\nstatic int\nisdirectory(char *filename)\n{\nstruct stat statbuf;\nif (stat(filename, &statbuf) < 0)\n  return 0;        /* In the expectation that opening as a file will fail */\nreturn S_ISDIR(statbuf.st_mode);\n}\n\nstatic directory_type *\nopendirectory(char *filename)\n{\nreturn opendir(filename);\n}\n\nstatic char *\nreaddirectory(directory_type *dir)\n{\nfor (;;)\n  {\n  struct dirent *dent = readdir(dir);\n  if (dent == NULL) break;\n  if (strcmp(dent->d_name, \".\") != 0 && strcmp(dent->d_name, \"..\") != 0)\n    return dent->d_name;\n  }\n\nreturn NULL;\n}\n\nstatic void\nclosedirectory(directory_type *dir)\n{\nclosedir(dir);\n}\n\n\n/************* Test for regular file, Unix-style **********/\n\nstatic int\nisregfile(char *filename)\n{\nstruct stat statbuf;\nif (stat(filename, &statbuf) < 0)\n  return 1;        /* In the expectation that opening as a file will fail */\nreturn S_ISREG(statbuf.st_mode);\n}\n\n\n#if defined NATIVE_ZOS\n/************* Test for a terminal in z/OS **********/\n/* isatty() does not work in a TSO environment, so always give FALSE.*/\n\nstatic BOOL\nis_stdout_tty(void)\n{\nreturn FALSE;\n}\n\nstatic BOOL\nis_file_tty(FILE *f)\n{\nreturn FALSE;\n}\n\n\n/************* Test for a terminal, Unix-style **********/\n\n#else\nstatic BOOL\nis_stdout_tty(void)\n{\nreturn isatty(fileno(stdout));\n}\n\nstatic BOOL\nis_file_tty(FILE *f)\n{\nreturn isatty(fileno(f));\n}\n#endif\n\n\n/************* Print optionally coloured match Unix-style and z/OS **********/\n\nstatic void\nprint_match(const void *buf, size_t length)\n{\nif (length == 0) return;\nif (do_colour) fprintf(stdout, \"%c[%sm\", 0x1b, colour_string);\nFWRITE_IGNORE(buf, 1, length, stdout);\nif (do_colour) fprintf(stdout, \"%c[0m\", 0x1b);\n}\n\n/* End of Unix-style or native z/OS environment functions. */\n\n\n/************* Directory scanning in Windows ***********/\n\n/* I (Philip Hazel) have no means of testing this code. It was contributed by\nLionel Fourquaux. David Burgess added a patch to define INVALID_FILE_ATTRIBUTES\nwhen it did not exist. David Byron added a patch that moved the #include of\n<windows.h> to before the INVALID_FILE_ATTRIBUTES definition rather than after.\n*/\n\n#elif defined WIN32\n\n#ifndef INVALID_FILE_ATTRIBUTES\n#define INVALID_FILE_ATTRIBUTES 0xFFFFFFFF\n#endif\n\ntypedef struct directory_type\n{\nHANDLE handle;\nBOOL first;\nWIN32_FIND_DATA data;\n} directory_type;\n\n#define FILESEP '/'\n\nint\nisdirectory(char *filename)\n{\nDWORD attr = GetFileAttributes(filename);\nif (attr == INVALID_FILE_ATTRIBUTES)\n  return 0;\nreturn (attr & FILE_ATTRIBUTE_DIRECTORY) != 0;\n}\n\ndirectory_type *\nopendirectory(char *filename)\n{\nsize_t len;\nchar *pattern;\ndirectory_type *dir;\nDWORD err;\nlen = strlen(filename);\npattern = (char *)malloc(len + 3);\ndir = (directory_type *)malloc(sizeof(*dir));\nif ((pattern == NULL) || (dir == NULL))\n  {\n  fprintf(stderr, \"pcre2grep: malloc failed\\n\");\n  pcre2grep_exit(2);\n  }\nmemcpy(pattern, filename, len);\nif (iswild(filename))\n  pattern[len] = 0;\nelse\n  memcpy(&(pattern[len]), \"\\\\*\", 3);\ndir->handle = FindFirstFile(pattern, &(dir->data));\nif (dir->handle != INVALID_HANDLE_VALUE)\n  {\n  free(pattern);\n  dir->first = TRUE;\n  return dir;\n  }\nerr = GetLastError();\nfree(pattern);\nfree(dir);\nerrno = (err == ERROR_ACCESS_DENIED) ? EACCES : ENOENT;\nreturn NULL;\n}\n\nchar *\nreaddirectory(directory_type *dir)\n{\nfor (;;)\n  {\n  if (!dir->first)\n    {\n    if (!FindNextFile(dir->handle, &(dir->data)))\n      return NULL;\n    }\n  else\n    {\n    dir->first = FALSE;\n    }\n  if (strcmp(dir->data.cFileName, \".\") != 0 && strcmp(dir->data.cFileName, \"..\") != 0)\n    return dir->data.cFileName;\n  }\n#ifndef _MSC_VER\nreturn NULL;   /* Keep compiler happy; never executed */\n#endif\n}\n\nvoid\nclosedirectory(directory_type *dir)\n{\nFindClose(dir->handle);\nfree(dir);\n}\n\n\n/************* Test for regular file in Windows **********/\n\n/* I don't know how to do this, or if it can be done; assume all paths are\nregular if they are not directories. */\n\nint isregfile(char *filename)\n{\nreturn !isdirectory(filename);\n}\n\n\n/************* Test for a terminal in Windows **********/\n\nstatic BOOL\nis_stdout_tty(void)\n{\nreturn _isatty(_fileno(stdout));\n}\n\nstatic BOOL\nis_file_tty(FILE *f)\n{\nreturn _isatty(_fileno(f));\n}\n\n\n/************* Print optionally coloured match in Windows **********/\n\nstatic void\nprint_match(const void *buf, size_t length)\n{\nif (length == 0) return;\nif (do_colour)\n  {\n  if (do_ansi) fprintf(stdout, \"%c[%sm\", 0x1b, colour_string);\n    else SetConsoleTextAttribute(hstdout, match_colour);\n  }\nFWRITE_IGNORE(buf, 1, length, stdout);\nif (do_colour)\n  {\n  if (do_ansi) fprintf(stdout, \"%c[0m\", 0x1b);\n    else SetConsoleTextAttribute(hstdout, csbi.wAttributes);\n  }\n}\n\n/* End of Windows functions */\n\n\n/************* Directory scanning when we can't do it ***********/\n\n/* The type is void, and apart from isdirectory(), the functions do nothing. */\n\n#else\n\n#define FILESEP 0\ntypedef void directory_type;\n\nint isdirectory(char *filename) { return 0; }\ndirectory_type * opendirectory(char *filename) { return (directory_type*)0;}\nchar *readdirectory(directory_type *dir) { return (char*)0;}\nvoid closedirectory(directory_type *dir) {}\n\n\n/************* Test for regular file when we can't do it **********/\n\n/* Assume all files are regular. */\n\nint isregfile(char *filename) { return 1; }\n\n\n/************* Test for a terminal when we can't do it **********/\n\nstatic BOOL\nis_stdout_tty(void)\n{\nreturn FALSE;\n}\n\nstatic BOOL\nis_file_tty(FILE *f)\n{\nreturn FALSE;\n}\n\n\n/************* Print optionally coloured match when we can't do it **********/\n\nstatic void\nprint_match(const void *buf, size_t length)\n{\nif (length == 0) return;\nFWRITE_IGNORE(buf, 1, length, stdout);\n}\n\n#endif  /* End of system-specific functions */\n\n\n\n/*************************************************\n*                Usage function                  *\n*************************************************/\n\nstatic int\nusage(int rc)\n{\noption_item *op;\nfprintf(stderr, \"Usage: pcre2grep [-\");\nfor (op = optionlist; op->one_char != 0; op++)\n  {\n  if (op->one_char > 0) fprintf(stderr, \"%c\", op->one_char);\n  }\nfprintf(stderr, \"] [long options] [pattern] [files]\\n\");\nfprintf(stderr, \"Type \\\"pcre2grep --help\\\" for more information and the long \"\n  \"options.\\n\");\nreturn rc;\n}\n\n\n\n/*************************************************\n*                Help function                   *\n*************************************************/\n\nstatic void\nhelp(void)\n{\noption_item *op;\n\nprintf(\"Usage: pcre2grep [OPTION]... [PATTERN] [FILE1 FILE2 ...]\" STDOUT_NL);\nprintf(\"Search for PATTERN in each FILE or standard input.\" STDOUT_NL);\nprintf(\"PATTERN must be present if neither -e nor -f is used.\" STDOUT_NL);\n\n#ifdef SUPPORT_PCRE2GREP_CALLOUT\n#ifdef SUPPORT_PCRE2GREP_CALLOUT_FORK\nprintf(\"All callout scripts in patterns are supported.\" STDOUT_NL);\n#else\nprintf(\"Non-fork callout scripts in patterns are supported.\" STDOUT_NL);\n#endif\n#else\nprintf(\"Callout scripts are not supported in this pcre2grep.\" STDOUT_NL);\n#endif\n\nprintf(\"\\\"-\\\" can be used as a file name to mean STDIN.\" STDOUT_NL);\n\n#ifdef SUPPORT_LIBZ\nprintf(\"Files whose names end in .gz are read using zlib.\" STDOUT_NL);\n#endif\n\n#ifdef SUPPORT_LIBBZ2\nprintf(\"Files whose names end in .bz2 are read using bzlib2.\" STDOUT_NL);\n#endif\n\n#if defined SUPPORT_LIBZ || defined SUPPORT_LIBBZ2\nprintf(\"Other files and the standard input are read as plain files.\" STDOUT_NL STDOUT_NL);\n#else\nprintf(\"All files are read as plain files, without any interpretation.\" STDOUT_NL STDOUT_NL);\n#endif\n\nprintf(\"Example: pcre2grep -i \" QUOT \"hello.*world\" QUOT \" menu.h main.c\" STDOUT_NL STDOUT_NL);\nprintf(\"Options:\" STDOUT_NL);\n\nfor (op = optionlist; op->one_char != 0; op++)\n  {\n  int n;\n  char s[4];\n\n  if (op->one_char > 0 && (op->long_name)[0] == 0)\n    n = 31 - printf(\"  -%c\", op->one_char);\n  else\n    {\n    if (op->one_char > 0) snprintf(s, sizeof(s), \"-%c,\", op->one_char);\n      else snprintf(s, sizeof(s), \"   \");\n    n = 31 - printf(\"  %s --%s\", s, op->long_name);\n    }\n\n  if (n < 1) n = 1;\n  printf(\"%.*s%s\" STDOUT_NL, n, \"                           \", op->help_text);\n  }\n\nprintf(STDOUT_NL \"Numbers may be followed by K or M, e.g. --max-buffer-size=100K.\" STDOUT_NL);\nprintf(\"The default value for --buffer-size is %d.\" STDOUT_NL, PCRE2GREP_BUFSIZE);\nprintf(\"The default value for --max-buffer-size is %d.\" STDOUT_NL, PCRE2GREP_MAX_BUFSIZE);\nprintf(\"When reading patterns or file names from a file, trailing white\" STDOUT_NL);\nprintf(\"space is removed and blank lines are ignored.\" STDOUT_NL);\nprintf(\"The maximum size of any pattern is %d bytes.\" STDOUT_NL, MAXPATLEN);\n\nprintf(STDOUT_NL \"With no FILEs, read standard input. If fewer than two FILEs given, assume -h.\" STDOUT_NL);\nprintf(\"Exit status is 0 if any matches, 1 if no matches, and 2 if trouble.\" STDOUT_NL);\n}\n\n\n\n/*************************************************\n*            Test exclude/includes               *\n*************************************************/\n\n/* If any exclude pattern matches, the path is excluded. Otherwise, unless\nthere are no includes, the path must match an include pattern.\n\nArguments:\n  path      the path to be matched\n  ip        the chain of include patterns\n  ep        the chain of exclude patterns\n\nReturns:    TRUE if the path is not excluded\n*/\n\nstatic BOOL\ntest_incexc(char *path, patstr *ip, patstr *ep)\n{\nsize_t plen = strlen((const char *)path);\n\nfor (; ep != NULL; ep = ep->next)\n  {\n  if (pcre2_match(ep->compiled, (PCRE2_SPTR)path, plen, 0, 0, match_data, NULL) >= 0)\n    return FALSE;\n  }\n\nif (ip == NULL) return TRUE;\n\nfor (; ip != NULL; ip = ip->next)\n  {\n  if (pcre2_match(ip->compiled, (PCRE2_SPTR)path, plen, 0, 0, match_data, NULL) >= 0)\n    return TRUE;\n  }\n\nreturn FALSE;\n}\n\n\n\n/*************************************************\n*         Decode integer argument value          *\n*************************************************/\n\n/* Integer arguments can be followed by K or M. Avoid the use of strtoul()\nbecause SunOS4 doesn't have it. This is used only for unpicking arguments, so\njust keep it simple.\n\nArguments:\n  option_data   the option data string\n  op            the option item (for error messages)\n  longop        TRUE if option given in long form\n\nReturns:        a long integer\n*/\n\nstatic long int\ndecode_number(char *option_data, option_item *op, BOOL longop)\n{\nunsigned long int n = 0;\nchar *endptr = option_data;\nwhile (*endptr != 0 && isspace((unsigned char)(*endptr))) endptr++;\nwhile (isdigit((unsigned char)(*endptr)))\n  n = n * 10 + (int)(*endptr++ - '0');\nif (toupper(*endptr) == 'K')\n  {\n  n *= 1024;\n  endptr++;\n  }\nelse if (toupper(*endptr) == 'M')\n  {\n  n *= 1024*1024;\n  endptr++;\n  }\n\nif (*endptr != 0)   /* Error */\n  {\n  if (longop)\n    {\n    const char *equals = strchr(op->long_name, '=');\n    int nlen = (equals == NULL)? (int)strlen(op->long_name) :\n      (int)(equals - op->long_name);\n    fprintf(stderr, \"pcre2grep: Malformed number \\\"%s\\\" after --%.*s\\n\",\n      option_data, nlen, op->long_name);\n    }\n  else\n    fprintf(stderr, \"pcre2grep: Malformed number \\\"%s\\\" after -%c\\n\",\n      option_data, op->one_char);\n  pcre2grep_exit(usage(2));\n  }\n\nreturn n;\n}\n\n\n\n/*************************************************\n*       Add item to a chain of numbers           *\n*************************************************/\n\n/* Used to add an item onto a chain, or just return an unconnected item if the\n\"after\" argument is NULL.\n\nArguments:\n  n          the number to add\n  after      if not NULL points to item to insert after\n\nReturns:     new number block\n*/\n\nstatic omstr *\nadd_number(int n, omstr *after)\n{\nomstr *om = (omstr *)malloc(sizeof(omstr));\n\n/* LCOV_EXCL_START - These lines won't be hit in normal testing. */\n\nif (om == NULL)\n  {\n  fprintf(stderr, \"pcre2grep: malloc failed\\n\");\n  pcre2grep_exit(2);\n  }\n\n/* LCOV_EXCL_STOP */\n\nom->next = NULL;\nom->groupnum = n;\n\nif (after != NULL)\n  {\n  om->next = after->next;\n  after->next = om;\n  }\nreturn om;\n}\n\n\n\n/*************************************************\n*            Read one line of input              *\n*************************************************/\n\n/* Normally, input that is to be scanned is read using fread() (or gzread, or\nBZ2_read) into a large buffer, so many lines may be read at once. However,\ndoing this for tty input means that no output appears until a lot of input has\nbeen typed. Instead, tty input is handled line by line. We cannot use fgets()\nfor this, because it does not stop at a binary zero, and therefore there is no\nway of telling how many characters it has read, because there may be binary\nzeros embedded in the data. This function is also used for reading patterns\nfrom files (the -f option).\n\nArguments:\n  buffer     the buffer to read into\n  length     the maximum number of characters to read\n  f          the file\n\nReturns:     the number of characters read, zero at end of file\n*/\n\nstatic PCRE2_SIZE\nread_one_line(char *buffer, PCRE2_SIZE length, FILE *f)\n{\nint c;\nPCRE2_SIZE yield = 0;\nwhile ((c = fgetc(f)) != EOF)\n  {\n  buffer[yield++] = c;\n  if (c == '\\n' || yield >= length) break;\n  }\nreturn yield;\n}\n\n/*************************************************\n*           Read one pattern from file           *\n*************************************************/\n\n/* Wrap around read_one_line() to make sure any terminating '\\n' is not\nincluded in the pattern and empty patterns are correctly identified.\n\nArguments:\n  buffer     the buffer to read into\n  length     maximum number of characters to read and report how many were\n  f          the file\n\nReturns:     TRUE if a pattern was read into buffer\n*/\n\nstatic BOOL\nread_pattern(char *buffer, PCRE2_SIZE *length, FILE *f)\n{\n*buffer = '\\0';\n*length = read_one_line(buffer, *length, f);\nif (*length > 0 && buffer[*length-1] == '\\n') *length = *length - 1;\nif (posix_pattern_file && *length > 0 && buffer[*length-1] == '\\r')\n  {\n  *length = *length - 1;\n  if (*length == 0) return TRUE;\n  }\nreturn (*length > 0 || *buffer == '\\n');\n}\n\n/*************************************************\n*             Find end of line                   *\n*************************************************/\n\n/* The length of the endline sequence that is found is set via lenptr. This may\nbe zero at the very end of the file if there is no line-ending sequence there.\n\nArguments:\n  p         current position in line\n  endptr    end of available data\n  lenptr    where to put the length of the eol sequence\n\nReturns:    pointer after the last byte of the line,\n            including the newline byte(s)\n*/\n\nstatic char *\nend_of_line(char *p, char *endptr, int *lenptr)\n{\nswitch(endlinetype)\n  {\n  default:      /* Just in case */\n  case PCRE2_NEWLINE_LF:\n  while (p < endptr && *p != '\\n') p++;\n  if (p < endptr)\n    {\n    *lenptr = 1;\n    return p + 1;\n    }\n  *lenptr = 0;\n  return endptr;\n\n  case PCRE2_NEWLINE_CR:\n  while (p < endptr && *p != '\\r') p++;\n  if (p < endptr)\n    {\n    *lenptr = 1;\n    return p + 1;\n    }\n  *lenptr = 0;\n  return endptr;\n\n  case PCRE2_NEWLINE_NUL:\n  while (p < endptr && *p != '\\0') p++;\n  if (p < endptr)\n    {\n    *lenptr = 1;\n    return p + 1;\n    }\n  *lenptr = 0;\n  return endptr;\n\n  case PCRE2_NEWLINE_CRLF:\n  for (;;)\n    {\n    while (p < endptr && *p != '\\r') p++;\n    if (p == endptr)\n      {\n      *lenptr = 0;\n      return endptr;\n      }\n    p++;\n    if (p < endptr && *p == '\\n')\n      {\n      *lenptr = 2;\n      return p + 1;\n      }\n    }\n  break;\n\n  case PCRE2_NEWLINE_ANYCRLF:\n  while (p < endptr)\n    {\n    if (*p == '\\n')\n      {\n      *lenptr = 1;\n      return p + 1;\n      }\n\n    if (*p == '\\r')\n      {\n      if (p + 1 < endptr && p[1] == '\\n')\n        {\n        *lenptr = 2;\n        return p + 2;\n        }\n\n      *lenptr = 1;\n      return p + 1;\n      }\n\n    p++;\n    }   /* End of loop for ANYCRLF case */\n\n  *lenptr = 0;  /* Must have hit the end */\n  return endptr;\n\n  case PCRE2_NEWLINE_ANY:\n  while (p < endptr)\n    {\n    int extra = 0;\n    int c = *((unsigned char *)p);\n\n    if (utf && c >= 0xc0)\n      {\n      int gcii, gcss;\n      extra = utf8_table4[c & 0x3f];  /* Number of additional bytes */\n      if (endptr - p < 1 + extra)\n        {\n        *lenptr = 0;  /* Hit the end, halfway through a character */\n        return endptr;\n        }\n      gcss = 6*extra;\n      c = (c & utf8_table3[extra]) << gcss;\n      for (gcii = 1; gcii <= extra; gcii++)\n        {\n        gcss -= 6;\n        c |= (p[gcii] & 0x3f) << gcss;\n        }\n      }\n\n    p += 1 + extra;\n\n    switch (c)\n      {\n      case '\\n':    /* LF */\n      case '\\v':    /* VT */\n      case '\\f':    /* FF */\n      *lenptr = 1 + extra;\n      return p;\n\n      case '\\r':    /* CR */\n      if (extra == 0 && p < endptr && *p == '\\n')\n        {\n        *lenptr = 2;\n        p++;\n        }\n      else *lenptr = 1 + extra;\n      return p;\n\n#ifndef EBCDIC\n      case 0x85:    /* Unicode NEL */\n      *lenptr = 1 + extra;\n      return p;\n\n      case 0x2028:  /* Unicode LS */\n      case 0x2029:  /* Unicode PS */\n      *lenptr = 1 + extra;\n      return p;\n#endif  /* Not EBCDIC */\n\n      default:\n      break;\n      }\n    }   /* End of loop for ANY case */\n\n  *lenptr = 0;  /* Must have hit the end */\n  return endptr;\n  }     /* End of overall switch */\n}\n\n\n\n/*************************************************\n*         Find start of previous line            *\n*************************************************/\n\n/* This is called when looking back for before lines to print.\n\nArguments:\n  p         start of the subsequent line\n  startptr  start of available data\n\nReturns:    pointer to the start of the previous line\n*/\n\nstatic char *\nprevious_line(char *p, char *startptr)\n{\nswitch(endlinetype)\n  {\n  default:      /* Just in case */\n  case PCRE2_NEWLINE_LF:\n  p--;\n  while (p > startptr && p[-1] != '\\n') p--;\n  return p;\n\n  case PCRE2_NEWLINE_CR:\n  p--;\n  while (p > startptr && p[-1] != '\\n') p--;\n  return p;\n\n  case PCRE2_NEWLINE_NUL:\n  p--;\n  while (p > startptr && p[-1] != '\\0') p--;\n  return p;\n\n  case PCRE2_NEWLINE_CRLF:\n  p -= 2;\n  for (;;)\n    {\n    while (p > startptr && p[-1] != '\\n') p--;\n    if (p == startptr) break;\n    if (p - startptr >= 2 && p[-2] == '\\r') break;\n    p--;\n    }\n  return p;\n\n  case PCRE2_NEWLINE_ANYCRLF:\n  if (p - startptr >= 2 && p[-2] == '\\r' && p[-1] == '\\n') p -= 2;\n    else p--;\n  while (p > startptr)\n    {\n    if (p[-1] == '\\n' || p[-1] == '\\r') break;\n    p--;\n    }\n  return p;\n\n  case PCRE2_NEWLINE_ANY:\n  if (p - startptr >= 2 && p[-2] == '\\r' && p[-1] == '\\n') p -= 2;\n  else\n    {\n    if (utf) while (p > startptr && (p[-1] & 0xc0) == 0x80) p--;\n    if (p > startptr) p--;\n    }\n\n  while (p > startptr)\n    {\n    int c;\n    char *pp = p - 1;\n\n    if (utf)\n      {\n      int extra = 0;\n      while (pp > startptr && (*pp & 0xc0) == 0x80) pp--;\n      c = *((unsigned char *)pp);\n      if (c >= 0xc0)\n        {\n        int gcii, gcss;\n        extra = utf8_table4[c & 0x3f];  /* Number of additional bytes */\n        if (p - pp < 1 + extra)\n          {\n          p = pp;  /* Rewind over the broken character */\n          continue;\n          }\n        gcss = 6*extra;\n        c = (c & utf8_table3[extra]) << gcss;\n        for (gcii = 1; gcii <= extra; gcii++)\n          {\n          gcss -= 6;\n          c |= (pp[gcii] & 0x3f) << gcss;\n          }\n        }\n      }\n    else c = *((unsigned char *)pp);\n\n    switch (c)\n      {\n      case '\\n':    /* LF */\n      case '\\v':    /* VT */\n      case '\\f':    /* FF */\n      case '\\r':    /* CR */\n#ifndef EBCDIC\n      case 0x85:    /* Unicode NEL */\n      case 0x2028:  /* Unicode LS */\n      case 0x2029:  /* Unicode PS */\n#endif  /* Not EBCDIC */\n      return p;\n\n      default:\n      break;\n      }\n\n    p = pp;  /* Back one character */\n    }        /* End of loop for ANY case */\n\n  return p;\n  }     /* End of overall switch */\n}\n\n\n\n/*************************************************\n*              Output newline at end             *\n*************************************************/\n\n/* This function is called if the final line of a file has been written to\nstdout, but it does not have a terminating newline.\n\nArguments:  none\nReturns:    nothing\n*/\n\nstatic void\nwrite_final_newline(void)\n{\nswitch(endlinetype)\n  {\n  default:      /* Just in case */\n  case PCRE2_NEWLINE_LF:\n  case PCRE2_NEWLINE_ANY:\n  case PCRE2_NEWLINE_ANYCRLF:\n  fprintf(stdout, \"\\n\");\n  break;\n\n  case PCRE2_NEWLINE_CR:\n  fprintf(stdout, \"\\r\");\n  break;\n\n  case PCRE2_NEWLINE_CRLF:\n  fprintf(stdout, \"\\r\\n\");\n  break;\n\n  case PCRE2_NEWLINE_NUL:\n  fprintf(stdout, \"%c\", 0);\n  break;\n  }\n}\n\n\n/*************************************************\n*       Print the previous \"after\" lines         *\n*************************************************/\n\n/* This is called if we are about to lose said lines because of buffer filling,\nand at the end of the file. The data in the line is written using fwrite() so\nthat a binary zero does not terminate it.\n\nArguments:\n  lastmatchnumber   the number of the last matching line, plus one\n  lastmatchrestart  where we restarted after the last match\n  endptr            end of available data\n  printname         filename for printing\n\nReturns:            nothing\n*/\n\nstatic void\ndo_after_lines(unsigned long int lastmatchnumber, char *lastmatchrestart,\n  char *endptr, const char *printname)\n{\nif (after_context > 0 && lastmatchnumber > 0)\n  {\n  int count = 0;\n  int ellength = 0;\n  while (lastmatchrestart < endptr && count < after_context)\n    {\n    char *pp = end_of_line(lastmatchrestart, endptr, &ellength);\n    if (ellength == 0 && pp == main_buffer + bufsize) break;\n    if (printname != NULL) fprintf(stdout, \"%s%c\", printname, printname_hyphen);\n    if (number) fprintf(stdout, \"%lu-\", lastmatchnumber++);\n    FWRITE_IGNORE(lastmatchrestart, 1, pp - lastmatchrestart, stdout);\n    lastmatchrestart = pp;\n    count++;\n    }\n\n  /* If we have printed any lines, arrange for a hyphen separator if anything\n  else follows. Also, if the last line is the final line in the file and it had\n  no newline, add one. */\n\n  if (count > 0)\n    {\n    hyphenpending = TRUE;\n    if (ellength == 0 && lastmatchrestart >= endptr)\n      write_final_newline();\n    }\n  }\n}\n\n\n\n/*************************************************\n*   Apply patterns to subject till one matches   *\n*************************************************/\n\n/* This function is called to run through all the patterns, looking for a\nmatch. When all possible matches are required, for example, for colouring, it\nchecks all patterns for matching, and returns the earliest match. Otherwise, it\nreturns the first pattern that has matched.\n\nArguments:\n  matchptr     the start of the subject\n  length       the length of the subject to match\n  options      options for pcre2_match\n  startoffset  where to start matching\n  mrc          address of where to put the result of pcre2_match()\n\nReturns:       TRUE if there was a match, match_data and offsets are set\n               FALSE if there was no match (but no errors)\n               invert if there was a non-fatal error\n*/\n\nstatic BOOL\nmatch_patterns(char *matchptr, PCRE2_SIZE length, unsigned int options,\n  PCRE2_SIZE startoffset, int *mrc)\n{\nPCRE2_SIZE slen = length;\nint first = -1;\nint firstrc = 0;\npatstr *p = patterns;\nconst char *msg = \"this text:\\n\\n\";\n\nif (slen > 200)\n  {\n  slen = 200;\n  msg = \"text that starts:\\n\\n\";\n  }\n\nfor (int i = 1; p != NULL; p = p->next, i++)\n  {\n  int rc = pcre2_match(p->compiled, (PCRE2_SPTR)matchptr, length,\n    startoffset, options, match_data, match_context);\n  if (rc == PCRE2_ERROR_NOMATCH) continue;\n\n  /* Handle a successful match. When all_matches is false, we are done.\n  Otherwise we must save the earliest match. */\n\n  if (rc >= 0)\n    {\n    if (!all_matches)\n      {\n      *mrc = rc;\n      return TRUE;\n      }\n\n    if (first < 0 || offsets[0] < offsets_pair[first][0] ||\n         (offsets[0] == offsets_pair[first][0] &&\n          offsets[1] > offsets_pair[first][1]))\n      {\n      first = match_data_toggle;\n      firstrc = rc;\n      match_data_toggle ^= 1;\n      match_data = match_data_pair[match_data_toggle];\n      offsets = offsets_pair[match_data_toggle];\n      }\n    continue;\n    }\n\n  /* Deal with PCRE2 error. */\n\n  fprintf(stderr, \"pcre2grep: pcre2_match() gave error %d while matching \", rc);\n  if (patterns->next != NULL) fprintf(stderr, \"pattern number %d to \", i);\n  fprintf(stderr, \"%s\", msg);\n  FWRITE_IGNORE(matchptr, 1, slen, stderr);   /* In case binary zero included */\n  fprintf(stderr, \"\\n\\n\");\n  if (rc <= PCRE2_ERROR_UTF8_ERR1 &&\n      rc >= PCRE2_ERROR_UTF8_ERR21)\n    {\n    unsigned char mbuffer[256];\n    PCRE2_SIZE startchar = pcre2_get_startchar(match_data);\n    (void)pcre2_get_error_message(rc, mbuffer, sizeof(mbuffer));\n    fprintf(stderr, \"%s at offset %\" SIZ_FORM \"\\n\\n\", mbuffer, startchar);\n    }\n  if (rc == PCRE2_ERROR_MATCHLIMIT || rc == PCRE2_ERROR_DEPTHLIMIT ||\n      rc == PCRE2_ERROR_HEAPLIMIT || rc == PCRE2_ERROR_JIT_STACKLIMIT)\n    resource_error = TRUE;\n  if (error_count++ > 20)\n    {\n    fprintf(stderr, \"pcre2grep: Too many errors - abandoned.\\n\");\n    pcre2grep_exit(2);\n    }\n  return invert;    /* No more matching; don't show the line again */\n  }\n\n/* We get here when all patterns have been tried. If all_matches is false,\nthis means that none of them matched. If all_matches is true, matched_first\nwill be non-NULL if there was at least one match, and it will point to the\nappropriate match_data block. */\n\nif (!all_matches || first < 0) return FALSE;\n\nmatch_data_toggle = first;\nmatch_data = match_data_pair[first];\noffsets = offsets_pair[first];\n*mrc = firstrc;\nreturn TRUE;\n}\n\n\n\n/*************************************************\n*          Decode dollar escape sequence         *\n*************************************************/\n\n/* Called from various places to decode $ escapes in output strings. The escape\nsequences are as follows:\n\n$<digits> or ${<digits>} returns a capture number. However, if callout is TRUE,\nzero is never returned; '0' is substituted.\n\n$a returns bell.\n$b returns backspace.\n$e returns escape.\n$f returns form feed.\n$n returns newline.\n$r returns carriage return.\n$t returns tab.\n$v returns vertical tab.\n$o<digits> returns the character represented by the given octal\n  number; up to three digits are processed.\n$o{<digits>} does the same, up to 7 digits, but gives an error for mode-invalid\n  code points.\n$x<digits> returns the character represented by the given hexadecimal\n  number; up to two digits are processed.\n$x{<digits} does the same, up to 6 digits, but gives an error for mode-invalid\n  code points.\nAny other character is substituted by itself. E.g: $$ is replaced by a single\ndollar.\n\nArguments:\n  begin      the start of the whole string\n  string     points to the $\n  callout    TRUE if in a callout (inhibits error messages)\n  value      where to return a value\n  last       where to return pointer to the last used character\n\nReturns:     DDE_ERROR    after a syntax error\n             DDE_CAPTURE  if *value is a capture number\n             DDE_CHAR     if *value is a character code\n*/\n\nstatic int\ndecode_dollar_escape(PCRE2_SPTR begin, PCRE2_SPTR string, BOOL callout,\n  uint32_t *value, PCRE2_SPTR *last)\n{\nuint32_t c = 0;\nint base = 10;\nint dcount;\nint rc = DDE_CHAR;\nBOOL brace = FALSE;\n\nswitch (*(++string))\n  {\n  case 0:   /* Syntax error: a character must be present after $. */\n  if (!callout)\n    fprintf(stderr, \"pcre2grep: Error in output text at offset %d: %s\\n\",\n      (int)(string - begin), \"no character after $\");\n  *last = string;\n  return DDE_ERROR;\n\n  case '&':\n  /* In a callout, no capture is available. Return the character '0' for\n  consistency with $0. */\n\n  if (callout) *value = '0';\n  else\n    {\n    *value = 0;\n    rc = DDE_CAPTURE;\n    }\n  break;\n\n  case '{':\n  brace = TRUE;\n  string++;\n  if (!isdigit((unsigned char)(*string)))  /* Syntax error:              */\n    {                                      /* a decimal number required. */\n    if (!callout)\n      fprintf(stderr, \"pcre2grep: Error in output text at offset %d: %s\\n\",\n        (int)(string - begin), \"decimal number expected\");\n    rc = DDE_ERROR;\n    break;\n    }\n\n  PCRE2_FALLTHROUGH /* Fall through */\n\n  /* The maximum capture number is 65535, so any number greater than that will\n  always be an unknown capture number. We just stop incrementing, in order to\n  avoid overflow. */\n\n  case '0': case '1': case '2': case '3': case '4':\n  case '5': case '6': case '7': case '8': case '9':\n  do\n    {\n    if (c <= 65535) c = c * 10 + (*string - '0');\n    string++;\n    }\n  while (*string >= '0' && *string <= '9');\n  string--;  /* Point to last digit */\n\n  /* In a callout, capture number 0 is not available. No error can be given,\n  so just return the character '0'. */\n\n  if (callout && c == 0)\n    {\n    *value = '0';\n    }\n  else\n    {\n    *value = c;\n    rc = DDE_CAPTURE;\n    }\n  break;\n\n  /* Limit octal numbers to 3 digits without braces, or up to 7 with braces,\n  for valid Unicode code points. */\n\n  case 'o':\n  base = 8;\n  string++;\n  if (*string == '{')\n    {\n    brace = TRUE;\n    string++;\n    dcount = 7;\n    }\n  else dcount = 3;\n  for (; dcount > 0; dcount--)\n    {\n    if (*string < '0' || *string > '7') break;\n    c = c * 8 + (*string++ - '0');\n    }\n  *value = c;\n  string--;  /* Point to last digit */\n  break;\n\n  /* Limit hex numbers to 2 digits without braces, or up to 6 with braces,\n  for valid Unicode code points. */\n\n  case 'x':\n  base = 16;\n  string++;\n  if (*string == '{')\n    {\n    brace = TRUE;\n    string++;\n    dcount = 6;\n    }\n  else dcount = 2;\n  for (; dcount > 0; dcount--)\n    {\n    if (!isxdigit(*string)) break;\n    if (*string >= '0' && *string <= '9')\n      c = c *16 + (*string++ - '0');\n    else\n      c = c * 16 + ((*string++ | 0x20) - 'a') + 10;\n    }\n  *value = c;\n  string--;  /* Point to last digit */\n  break;\n\n  case 'a': *value = '\\a'; break;\n  case 'b': *value = '\\b'; break;\n#ifndef EBCDIC\n  case 'e': *value = '\\033'; break;\n#else\n  case 'e': *value = '\\047'; break;\n#endif\n  case 'f': *value = '\\f'; break;\n  case 'n': *value = STDOUT_NL_CODE; break;\n  case 'r': *value = '\\r'; break;\n  case 't': *value = '\\t'; break;\n  case 'v': *value = '\\v'; break;\n\n  default: *value = *string; break;\n  }\n\nif (brace)\n  {\n  c = string[1];\n  if (c != '}')\n    {\n    rc = DDE_ERROR;\n    if (!callout)\n      {\n      if ((base == 8 && c >= '0' && c <= '7') ||\n          (base == 16 && isxdigit(c)))\n        {\n        fprintf(stderr, \"pcre2grep: Error in output text at offset %d: \"\n          \"too many %s digits\\n\", (int)(string - begin),\n          (base == 8)? \"octal\" : \"hex\");\n        }\n      else\n        {\n        fprintf(stderr, \"pcre2grep: Error in output text at offset %d: %s\\n\",\n          (int)(string - begin), \"missing closing brace\");\n        }\n      }\n    }\n  else string++;\n  }\n\n/* Check maximum code point values, but take note of STDOUT_NL_CODE. */\n\nif (rc == DDE_CHAR && *value != STDOUT_NL_CODE)\n  {\n  uint32_t max = utf? 0x0010ffffu : 0xffu;\n  if (*value > max)\n    {\n    if (!callout)\n      fprintf(stderr, \"pcre2grep: Error in output text at offset %d: \"\n        \"code point greater than 0x%x is invalid\\n\", (int)(string - begin), max);\n    rc = DDE_ERROR;\n    }\n  }\n\n*last = string;\nreturn rc;\n}\n\n\n\n/*************************************************\n*          Check output text for errors          *\n*************************************************/\n\n/* Called early, to get errors before doing anything for -O text; also called\nfrom callouts to check before outputting.\n\nArguments:\n  string    an --output text string\n  callout   TRUE if in a callout (stops printing errors)\n\nReturns:    TRUE if OK, FALSE on error\n*/\n\nstatic BOOL\nsyntax_check_output_text(PCRE2_SPTR string, BOOL callout)\n{\nuint32_t value;\nPCRE2_SPTR begin = string;\n\nfor (; *string != 0; string++)\n  {\n  if (*string == '$' &&\n    decode_dollar_escape(begin, string, callout, &value, &string) == DDE_ERROR)\n      return FALSE;\n  }\n\nreturn TRUE;\n}\n\n\n/*************************************************\n*              Display output text               *\n*************************************************/\n\n/* Display the output text, which is assumed to have already been syntax\nchecked. Output may contain escape sequences started by the dollar sign.\n\nArguments:\n  string:       the output text\n  callout:      TRUE for the builtin callout, FALSE for --output\n  subject       the start of the subject\n  ovector:      capture offsets\n  capture_top:  number of captures\n\nReturns:        TRUE if something was output, other than newline\n                FALSE if nothing was output, or newline was last output\n*/\n\nstatic BOOL\ndisplay_output_text(PCRE2_SPTR string, BOOL callout, PCRE2_SPTR subject,\n  PCRE2_SIZE *ovector, PCRE2_SIZE capture_top)\n{\nuint32_t value;\nBOOL printed = FALSE;\nPCRE2_SPTR begin = string;\n\nfor (; *string != 0; string++)\n  {\n  if (*string == '$')\n    {\n    switch(decode_dollar_escape(begin, string, callout, &value, &string))\n      {\n      case DDE_CHAR:\n      if (value == STDOUT_NL_CODE)\n        {\n        fprintf(stdout, STDOUT_NL);\n        printed = FALSE;\n        continue;\n        }\n      break;  /* Will print value */\n\n      case DDE_CAPTURE:\n      if (value < capture_top)\n        {\n        PCRE2_SIZE capturesize;\n        value *= 2;\n        capturesize = ovector[value + 1] - ovector[value];\n        if (capturesize > 0)\n          {\n          print_match(subject + ovector[value], capturesize);\n          printed = TRUE;\n          }\n        }\n      continue;\n\n      /* LCOV_EXCL_START */\n      default:  /* Should not occur */\n      break;\n      /* LCOV_EXCL_STOP */\n      }\n    }\n\n  else value = *string;  /* Not a $ escape */\n\n  if (!utf || value <= 127) fprintf(stdout, \"%c\", value); else\n    {\n    int n = ord2utf8(value);\n    for (int i = 0; i < n; i++) fputc(utf8_buffer[i], stdout);\n    }\n\n  printed = TRUE;\n  }\n\nreturn printed;\n}\n\n\n#ifdef SUPPORT_PCRE2GREP_CALLOUT\n\n/*************************************************\n*        Parse and execute callout scripts       *\n*************************************************/\n\n/* If SUPPORT_PCRE2GREP_CALLOUT_FORK is defined, this function parses a callout\nstring block and executes the program specified by the string. The string is a\nlist of substrings separated by pipe characters. The first substring represents\nthe executable name, and the following substrings specify the arguments:\n\n  program_name|param1|param2|...\n\nAny substring (including the program name) can contain escape sequences\nstarted by the dollar character. The escape sequences are substituted as\nfollows:\n\n  $<digits> or ${<digits>} is replaced by the captured substring of the given\n  decimal number, which must be greater than zero. If the number is greater\n  than the number of capturing substrings, or if the capture is unset, the\n  replacement is empty.\n\n  Any other character is substituted by itself. E.g: $$ is replaced by a single\n  dollar or $| replaced by a pipe character.\n\nAlternatively, if string starts with pipe, the remainder is taken as an output\nstring, same as --output. This is the only form that is supported if\nSUPPORT_PCRE2GREP_FORK is not defined. In this case, --om-separator is used to\nseparate each callout, defaulting to newline.\n\nExample:\n\n  echo -e \"abcde\\n12345\" | pcre2grep \\\n    '(.)(..(.))(?C\"/bin/echo|Arg1: [$1] [$2] [$3]|Arg2: $|${1}$| ($4)\")()' -\n\n  Output:\n\n    Arg1: [a] [bcd] [d] Arg2: |a| ()\n    abcde\n    Arg1: [1] [234] [4] Arg2: |1| ()\n    12345\n\nArguments:\n  blockptr     the callout block\n\nReturns:       currently it always returns with 0\n*/\n\nstatic int\npcre2grep_callout(pcre2_callout_block *calloutptr, void *unused)\n{\nPCRE2_SIZE length = calloutptr->callout_string_length;\nPCRE2_SPTR string = calloutptr->callout_string;\nPCRE2_SPTR subject = calloutptr->subject;\nPCRE2_SIZE *ovector = calloutptr->offset_vector;\nPCRE2_SIZE capture_top = calloutptr->capture_top;\n\n#ifdef SUPPORT_PCRE2GREP_CALLOUT_FORK\nPCRE2_SIZE argsvectorlen = 2;\nPCRE2_SIZE argslen = 1;\nchar *args;\nchar *argsptr;\nchar **argsvector;\nchar **argsvectorptr;\n#ifndef WIN32\npid_t pid;\n#endif\nint result = 0;\n#endif  /* SUPPORT_PCRE2GREP_CALLOUT_FORK */\n\n(void)unused;   /* Avoid compiler warning */\n\n/* Only callouts with strings are supported. */\n\nif (string == NULL || length == 0) return 0;\n\n/* If there's no command, output the remainder directly. */\n\nif (*string == '|')\n  {\n  string++;\n  if (!syntax_check_output_text(string, TRUE)) return 0;\n  (void)display_output_text(string, TRUE, subject, ovector, capture_top);\n  return 0;\n  }\n\n#ifndef SUPPORT_PCRE2GREP_CALLOUT_FORK\nreturn 0;\n#else\n\n/* Checking syntax and compute the number of string fragments. Callout strings\nare silently ignored in the event of a syntax error. */\n\nwhile (length > 0)\n  {\n  if (*string == '|')\n    {\n    argsvectorlen++;\n    if (argsvectorlen > 10000) return 0;  /* Too many args */\n    }\n\n  else if (*string == '$')\n    {\n    uint32_t value;\n    PCRE2_SPTR begin = string;\n\n    switch (decode_dollar_escape(begin, string, TRUE, &value, &string))\n      {\n      case DDE_CAPTURE:\n      if (value < capture_top)\n        {\n        value *= 2;\n        argslen += ovector[value + 1] - ovector[value];\n        }\n      argslen--;   /* Negate the effect of argslen++ below. */\n      break;\n\n      case DDE_CHAR:\n      if (value == STDOUT_NL_CODE) argslen += STDOUT_NL_LEN - 1;\n        else if (utf && value > 127) argslen += ord2utf8(value) - 1;\n      break;\n\n      /* LCOV_EXCL_START */\n      default:         /* Should not occur */\n      case DDE_ERROR:\n      return 0;\n      /* LCOV_EXCL_STOP */\n      }\n\n    length -= (string - begin);\n    }\n\n  string++;\n  length--;\n  argslen++;\n  }\n\n/* Get memory for the argument vector and its strings. */\n\nargs = (char*)malloc(argslen);\nif (args == NULL) return 0;\n\nargsvector = (char**)malloc(argsvectorlen * sizeof(char*));\nif (argsvector == NULL)\n  {\n  /* LCOV_EXCL_START */\n  free(args);\n  return 0;\n  /* LCOV_EXCL_STOP */\n  }\n\n/* Now reprocess the string and set up the arguments. */\n\nargsptr = args;\nargsvectorptr = argsvector;\n*argsvectorptr++ = argsptr;\n\nlength = calloutptr->callout_string_length;\nstring = calloutptr->callout_string;\n\nwhile (length > 0)\n  {\n  if (*string == '|')\n    {\n    *argsptr++ = '\\0';\n    *argsvectorptr++ = argsptr;\n    }\n\n  else if (*string == '$')\n    {\n    uint32_t value;\n    PCRE2_SPTR begin = string;\n\n    switch (decode_dollar_escape(begin, string, TRUE, &value, &string))\n      {\n      case DDE_CAPTURE:\n      if (value < capture_top)\n        {\n        PCRE2_SIZE capturesize;\n        value *= 2;\n        capturesize = ovector[value + 1] - ovector[value];\n        memcpy(argsptr, subject + ovector[value], capturesize);\n        argsptr += capturesize;\n        }\n      break;\n\n      case DDE_CHAR:\n      if (value == STDOUT_NL_CODE)\n        {\n        memcpy(argsptr, STDOUT_NL, STDOUT_NL_LEN);\n        argsptr += STDOUT_NL_LEN;\n        }\n      else if (utf && value > 127)\n        {\n        int n = ord2utf8(value);\n        memcpy(argsptr, utf8_buffer, n);\n        argsptr += n;\n        }\n      else\n        {\n        *argsptr++ = value;\n        }\n      break;\n\n      /* LCOV_EXCL_START */\n      default:\n      /* Even though this should not occur, the string having been checked above,\n       * we need to include the free() calls so that source checkers do not complain. */\n      case DDE_ERROR:\n      free(args);\n      free(argsvector);\n      abort();\n      return 0;\n      /* LCOV_EXCL_STOP */\n      }\n\n    length -= (string - begin);\n    }\n\n  else *argsptr++ = *string;\n\n  /* Advance along the string */\n\n  string++;\n  length--;\n  }\n\n*argsptr++ = '\\0';\n*argsvectorptr = NULL;\n\n/* Running an external command is system-dependent. Handle Windows and VMS as\nnecessary, otherwise assume fork(). */\n\n#ifdef WIN32\n(void)fflush(stdout);\nresult = _spawnvp(_P_WAIT, argsvector[0], (const char * const *)argsvector) != 0;\n\n#elif defined __VMS\n  {\n  char cmdbuf[500];\n  short i = 0;\n  int flags = CLI$M_NOCLISYM|CLI$M_NOLOGNAM|CLI$M_NOKEYPAD, status, retstat;\n  $DESCRIPTOR(cmd, cmdbuf);\n\n  cmdbuf[0] = 0;\n  while (argsvector[i])\n  {\n    strcat(cmdbuf, argsvector[i]);\n    strcat(cmdbuf, \" \");\n    i++;\n  }\n  cmd.dsc$w_length = strlen(cmdbuf) - 1;\n  status = lib$spawn(&cmd, 0,0, &flags, 0,0, &retstat);\n  if (!(status & 1)) result = 0;\n  else result = retstat & 1 ? 0 : 1;\n  }\n\n#else  /* Neither Windows nor VMS */\n(void)fflush(stdout);\npid = fork();\nif (pid == 0)\n  {\n  (void)execv(argsvector[0], argsvector);\n  /* Control gets here if there is an error, e.g. a non-existent program */\n  exit(1);\n  }\nelse if (pid > 0)\n  {\n  (void)waitpid(pid, &result, 0);\n  }\n#endif  /* End Windows/VMS/other handling */\n\nfree(args);\nfree(argsvector);\n\n/* Currently negative return values are not supported, only zero (match\ncontinues) or non-zero (match fails). */\n\nreturn result != 0;\n#endif  /* SUPPORT_PCRE2GREP_CALLOUT_FORK */\n}\n#endif  /* SUPPORT_PCRE2GREP_CALLOUT */\n\n\n\n/*************************************************\n*     Read a portion of the file into buffer     *\n*************************************************/\n\nstatic ptrdiff_t\nfill_buffer(void *handle, int frtype, char *buffer, PCRE2_SIZE length,\n  BOOL input_line_buffered)\n{\nPCRE2_SIZE nread;\n(void)frtype;  /* Avoid warning when not used */\n\n#ifdef SUPPORT_LIBZ\nif (frtype == FR_LIBZ)\n  return gzread((gzFile)handle, buffer,\n                (length > UINT_MAX)? UINT_MAX : (unsigned)length);\nelse\n#endif\n\n#ifdef SUPPORT_LIBBZ2\nif (frtype == FR_LIBBZ2)\n  return BZ2_bzread((BZFILE *)handle, buffer,\n                    (length > UINT_MAX)? UINT_MAX : (unsigned)length);\nelse\n#endif\n\nnread = (input_line_buffered ?\n  read_one_line(buffer, length, (FILE *)handle) :\n  fread(buffer, 1, length, (FILE *)handle));\n\n#ifdef SUPPORT_VALGRIND\nif (nread > 0) VALGRIND_MAKE_MEM_DEFINED_IF_ADDRESSABLE(buffer, nread);\nif (nread < length) VALGRIND_MAKE_MEM_UNDEFINED(buffer + nread, length - nread);\n#endif\n\nreturn (ptrdiff_t)nread;\n}\n\n\n\n/*************************************************\n*            Grep an individual file             *\n*************************************************/\n\n/* This is called from grep_or_recurse() below. It uses a buffer that is three\ntimes the value of bufthird. The matching point is never allowed to stray into\nthe top third of the buffer, thus keeping more of the file available for\ncontext printing or for multiline scanning. For large files, the pointer will\nbe in the middle third most of the time, so the bottom third is available for\n\"before\" context printing.\n\nArguments:\n  handle       the fopened FILE stream for a normal file\n               the gzFile pointer when reading is via libz\n               the BZFILE pointer when reading is via libbz2\n  frtype       FR_PLAIN, FR_LIBZ, or FR_LIBBZ2\n  filename     the file name or NULL (for errors)\n  printname    the file name if it is to be printed for each match\n               or NULL if the file name is not to be printed\n               it cannot be NULL if filenames[_nomatch]_only is set\n\nReturns:       0 if there was at least one match\n               1 otherwise (no matches)\n               2 if an overlong line is encountered\n               3 if there is a read error on a .bz2 file\n*/\n\nstatic int\npcre2grep(void *handle, int frtype, const char *filename, const char *printname)\n{\nint rc = 1;\nint filepos = 0;\nunsigned long int linenumber = 1;\nunsigned long int lastmatchnumber = 0;\nunsigned long int count = 0;\nlong int count_matched_lines = 0;\nchar *lastmatchrestart = main_buffer;\nchar *ptr = main_buffer;\nchar *endptr;\nPCRE2_SIZE bufflength;\nptrdiff_t buffrc;\nBOOL binary = FALSE;\nBOOL endhyphenpending = FALSE;\nBOOL lines_printed = FALSE;\nBOOL input_line_buffered = line_buffered;\nFILE *in = NULL;                    /* Ensure initialized */\nlong stream_start = -1;             /* Only non-negative if relevant */\n\n/* Do the first read into the start of the buffer and set up the pointer to end\nof what we have. In the case of libz, a non-zipped .gz file will be read as a\nplain file. However, if a .bz2 file isn't actually bzipped, the first read will\nfail. */\n\nif (frtype != FR_LIBZ && frtype != FR_LIBBZ2)\n  {\n  in = (FILE *)handle;\n  if (feof(in)) return 1;\n  if (is_file_tty(in)) input_line_buffered = TRUE;\n  else\n    {\n    if (count_limit >= 0  && filename == stdin_name)\n      stream_start = ftell(in);\n    }\n  }\nelse input_line_buffered = FALSE;\n\nbuffrc = fill_buffer(handle, frtype, main_buffer, bufsize,\n  input_line_buffered);\n\n#if defined SUPPORT_LIBZ\nif (frtype == FR_LIBZ && buffrc < 0) return 3;\n#endif\n#ifdef SUPPORT_LIBBZ2\nif (frtype == FR_LIBBZ2 && buffrc < 0) return 3;\n#endif\n\nbufflength = (PCRE2_SIZE)buffrc;\nendptr = main_buffer + bufflength;\n\n/* Unless binary-files=text, see if we have a binary file. This uses the same\nrule as GNU grep, namely, a search for a binary zero byte near the start of the\nfile. However, when the newline convention is binary zero, we can't do this. */\n\nif (binary_files != BIN_TEXT)\n  {\n  if (endlinetype != PCRE2_NEWLINE_NUL)\n    binary = memchr(main_buffer, 0, (bufflength > 1024)? 1024 : bufflength)\n      != NULL;\n  if (binary && binary_files == BIN_NOMATCH) return 1;\n  }\n\n/* Loop while the current pointer is not at the end of the file. For large\nfiles, endptr will be at the end of the buffer when we are in the middle of the\nfile, but ptr will never get there, because as soon as it gets over 2/3 of the\nway, the buffer is shifted left and re-filled. */\n\nwhile (ptr < endptr)\n  {\n  int endlinelength;\n  int mrc = 0;\n  unsigned int options = 0;\n  BOOL match;\n  BOOL line_matched = FALSE;\n  char *t = ptr;\n  PCRE2_SIZE length, linelength;\n  PCRE2_SIZE startoffset = 0;\n\n  /* If the -m option set a limit for the number of matched or non-matched\n  lines, check it here. A limit of zero means that no matching is ever done.\n  For stdin from a file, set the file position. */\n\n  if (count_limit >= 0 && count_matched_lines >= count_limit)\n    {\n    if (stream_start >= 0)\n      (void)fseek(handle, stream_start + (long int)filepos, SEEK_SET);\n    rc = (count_limit == 0)? 1 : 0;\n    break;\n    }\n\n  /* At this point, ptr is at the start of a line. We need to find the length\n  of the subject string to pass to pcre2_match(). In multiline mode, it is the\n  length remainder of the data in the buffer. Otherwise, it is the length of\n  the next line, excluding the terminating newline. After matching, we always\n  advance by the length of the next line. In multiline mode the PCRE2_FIRSTLINE\n  option is used for compiling, so that any match is constrained to be in the\n  first line. */\n\n  t = end_of_line(t, endptr, &endlinelength);\n  linelength = t - ptr - endlinelength;\n  length = multiline? (PCRE2_SIZE)(endptr - ptr) : linelength;\n\n  /* Check to see if the line we are looking at extends right to the very end\n  of the buffer without a line terminator. This means the line is too long to\n  handle at the current buffer size. Until the buffer reaches its maximum size,\n  try doubling it and reading more data. */\n\n  if (endlinelength == 0 && t == main_buffer + bufsize)\n    {\n    if (bufthird < max_bufthird)\n      {\n      char *new_buffer;\n      PCRE2_SIZE new_bufthird = 2*bufthird;\n\n      if (new_bufthird > max_bufthird) new_bufthird = max_bufthird;\n      new_buffer = (char *)malloc(3*new_bufthird);\n\n      if (new_buffer == NULL)\n        {\n        /* LCOV_EXCL_START */\n        fprintf(stderr,\n          \"pcre2grep: line %lu%s%s is too long for the internal buffer\\n\"\n          \"pcre2grep: not enough memory to increase the buffer size to %\"\n            SIZ_FORM \"\\n\",\n          linenumber,\n          (filename == NULL)? \"\" : \" of file \",\n          (filename == NULL)? \"\" : filename,\n          new_bufthird);\n        return 2;\n        /* LCOV_EXCL_STOP */\n        }\n\n      /* Copy the data and adjust pointers to the new buffer location. */\n\n      memcpy(new_buffer, main_buffer, bufsize);\n      bufthird = new_bufthird;\n      bufsize = 3*bufthird;\n      ptr = new_buffer + (ptr - main_buffer);\n      lastmatchrestart = new_buffer + (lastmatchrestart - main_buffer);\n      free(main_buffer);\n      main_buffer = new_buffer;\n\n      /* Read more data into the buffer and then try to find the line ending\n      again. */\n\n      buffrc = fill_buffer(handle, frtype, main_buffer + bufflength,\n        bufsize - bufflength, input_line_buffered);\n\n#if defined SUPPORT_LIBZ\n      if (frtype == FR_LIBZ && buffrc < 0) return 3;\n#endif\n#ifdef SUPPORT_LIBBZ2\n      if (frtype == FR_LIBBZ2 && buffrc < 0) return 3;\n#endif\n\n      bufflength += (PCRE2_SIZE)buffrc;\n      endptr = main_buffer + bufflength;\n      continue;\n      }\n    else\n      {\n      fprintf(stderr,\n        \"pcre2grep: line %lu%s%s is too long for the internal buffer\\n\"\n        \"pcre2grep: the maximum buffer size is %\" SIZ_FORM \"\\n\"\n        \"pcre2grep: use the --max-buffer-size option to change it\\n\",\n        linenumber,\n        (filename == NULL)? \"\" : \" of file \",\n        (filename == NULL)? \"\" : filename,\n        bufthird);\n      return 2;\n      }\n    }\n\n  /* We come back here after a match when only_matching_count is non-zero, in\n  order to find any further matches in the same line. This applies to\n  --only-matching, --file-offsets, and --line-offsets. */\n\n  ONLY_MATCHING_RESTART:\n\n  /* Run through all the patterns until one matches or there is an error other\n  than NOMATCH. This code is in a subroutine so that it can be re-used for\n  finding subsequent matches when colouring matched lines. After finding one\n  match, set PCRE2_NOTEMPTY to disable any further matches of null strings in\n  this line. */\n\n  match = match_patterns(ptr, length, options, startoffset, &mrc);\n  options = PCRE2_NOTEMPTY;\n\n  /* If it's a match or a not-match (as required), do what's wanted. NOTE: Use\n  only FWRITE_IGNORE() - which is just a packaged fwrite() that ignores its\n  return code - to output data lines, so that binary zeroes are treated as just\n  another data character. */\n\n  if (match != invert)\n    {\n    BOOL hyphenprinted = FALSE;\n\n    /* We've failed if we want a file that doesn't have any matches. */\n\n    if (filenames == FN_NOMATCH_ONLY) return 1;\n\n    /* Remember that this line matched (for counting matched lines) */\n\n    line_matched = TRUE;\n\n    /* If all we want is a yes/no answer, we can return immediately. */\n\n    if (quiet) return 0;\n\n    /* Just count if just counting is wanted. */\n\n    else if (count_only || show_total_count) count++;\n\n    /* When handling a binary file and binary-files==binary, the \"binary\"\n    variable will be set true (it's false in all other cases). In this\n    situation we just want to output the file name. No need to scan further. */\n\n    else if (binary)\n      {\n      fprintf(stdout, \"Binary file %s matches\" STDOUT_NL, filename);\n      return 0;\n      }\n\n    /* Likewise, if all we want is a file name, there is no need to scan any\n    more lines in the file. */\n\n    else if (filenames == FN_MATCH_ONLY)\n      {\n      fprintf(stdout, \"%s\", printname);\n      if (printname_nl == NULL) fprintf(stdout, \"%c\", 0);\n        else fprintf(stdout, \"%s\", printname_nl);\n      return 0;\n      }\n\n    /* The --only-matching option prints just the substring that matched,\n    and/or one or more captured portions of it, as long as these strings are\n    not empty. The --file-offsets and --line-offsets options output offsets for\n    the matching substring (all three set only_matching_count non-zero). None\n    of these mutually exclusive options prints any context. Afterwards, adjust\n    the start and then jump back to look for further matches in the same line.\n    If we are in invert mode, however, nothing is printed and we do not restart\n    - this could still be useful because the return code is set. */\n\n    else if (only_matching_count != 0)\n      {\n      if (!invert)\n        {\n        PCRE2_SIZE oldstartoffset;\n\n        if (printname != NULL) fprintf(stdout, \"%s%c\", printname,\n          printname_colon);\n        if (number) fprintf(stdout, \"%lu:\", linenumber);\n\n        /* Handle --line-offsets */\n\n        if (line_offsets)\n          fprintf(stdout, \"%d,%d\" STDOUT_NL, (int)(ptr + offsets[0] - ptr),\n            (int)(offsets[1] - offsets[0]));\n\n        /* Handle --file-offsets */\n\n        else if (file_offsets)\n          fprintf(stdout, \"%d,%d\" STDOUT_NL,\n            (int)(filepos + ptr + offsets[0] - ptr),\n            (int)(offsets[1] - offsets[0]));\n\n        /* Handle --output (which has already been syntax checked) */\n\n        else if (output_text != NULL)\n          {\n          (void)display_output_text((PCRE2_SPTR)output_text, FALSE,\n              (PCRE2_SPTR)ptr, offsets, mrc);\n          fprintf(stdout, STDOUT_NL);\n          }\n\n        /* Handle --only-matching, which may occur many times */\n\n        else\n          {\n          BOOL printed = FALSE;\n          omstr *om;\n\n          for (om = only_matching; om != NULL; om = om->next)\n            {\n            int n = om->groupnum;\n            if (n == 0 || n < mrc)\n              {\n              size_t plen = offsets[2*n + 1] - offsets[2*n];\n              if (plen > 0)\n                {\n                if (printed && om_separator != NULL)\n                  fprintf(stdout, \"%s\", om_separator);\n                print_match(ptr + offsets[n*2], plen);\n                printed = TRUE;\n                }\n              }\n            }\n          if (printed || printname != NULL || number)\n            fprintf(stdout, STDOUT_NL);\n          }\n\n        /* Prepare to repeat to find the next match in the line. */\n\n        //match = FALSE;\n        if (line_buffered) fflush(stdout);\n        rc = 0;                      /* Had some success */\n\n        /* If the pattern contained a lookbehind that included \\K, it is\n        possible that the end of the match might be at or before the actual\n        starting offset we have just used. In this case, start one character\n        further on. */\n\n        startoffset = offsets[1];    /* Restart after the match */\n        oldstartoffset = pcre2_get_startchar(match_data);\n        if (startoffset <= oldstartoffset)\n          {\n          if (startoffset >= length) goto END_ONE_MATCH;  /* Were at end */\n          startoffset = oldstartoffset + 1;\n          if (utf) while ((ptr[startoffset] & 0xc0) == 0x80) startoffset++;\n          }\n\n        /* If the current match ended past the end of the line (only possible\n        in multiline mode), we must move on to the line in which it did end\n        before searching for more matches. */\n\n        while (startoffset > linelength)\n          {\n          ptr += linelength + endlinelength;\n          filepos += (int)(linelength + endlinelength);\n          linenumber++;\n          startoffset -= (int)(linelength + endlinelength);\n          t = end_of_line(ptr, endptr, &endlinelength);\n          linelength = t - ptr - endlinelength;\n          length = (PCRE2_SIZE)(endptr - ptr);\n          }\n\n        goto ONLY_MATCHING_RESTART;\n        }\n      }\n\n    /* This is the default case when none of the above options is set. We print\n    the matching lines(s), possibly preceded and/or followed by other lines of\n    context. */\n\n    else\n      {\n      lines_printed = TRUE;\n\n      /* See if there is a requirement to print some \"after\" lines from a\n      previous match. We never print any overlaps. */\n\n      if (after_context > 0 && lastmatchnumber > 0)\n        {\n        int ellength;\n        int linecount = 0;\n        char *p = lastmatchrestart;\n\n        while (p < ptr && linecount < after_context)\n          {\n          p = end_of_line(p, ptr, &ellength);\n          linecount++;\n          }\n\n        /* It is important to advance lastmatchrestart during this printing so\n        that it interacts correctly with any \"before\" printing below. Print\n        each line's data using fwrite() in case there are binary zeroes. */\n\n        while (lastmatchrestart < p)\n          {\n          char *pp = lastmatchrestart;\n          if (printname != NULL) fprintf(stdout, \"%s%c\", printname,\n            printname_hyphen);\n          if (number) fprintf(stdout, \"%lu-\", lastmatchnumber++);\n          pp = end_of_line(pp, endptr, &ellength);\n          FWRITE_IGNORE(lastmatchrestart, 1, pp - lastmatchrestart, stdout);\n          lastmatchrestart = pp;\n          }\n\n        if (lastmatchrestart != ptr) hyphenpending = TRUE;\n        }\n\n      /* If hyphenpending is TRUE when there is no \"after\" context, it means we\n      are at the start of a new file, having output something from the previous\n      file. Output a separator if enabled.*/\n\n      else if (hyphenpending)\n        {\n        if (group_separator != NULL)\n          fprintf(stdout, \"%s%s\", group_separator, STDOUT_NL);\n        hyphenpending = FALSE;\n        hyphenprinted = TRUE;\n        }\n\n      /* See if there is a requirement to print some \"before\" lines for this\n      match. Again, don't print overlaps. */\n\n      if (before_context > 0)\n        {\n        int linecount = 0;\n        char *p = ptr;\n\n        while (p > main_buffer &&\n               (lastmatchnumber == 0 || p > lastmatchrestart) &&\n               linecount < before_context)\n          {\n          linecount++;\n          p = previous_line(p, main_buffer);\n          }\n\n        if (lastmatchnumber > 0 && p > lastmatchrestart && !hyphenprinted &&\n            group_separator != NULL)\n          fprintf(stdout, \"%s%s\", group_separator, STDOUT_NL);\n        hyphenpending = FALSE;\n\n        while (p < ptr)\n          {\n          int ellength;\n          char *pp = p;\n          if (printname != NULL) fprintf(stdout, \"%s%c\", printname,\n            printname_hyphen);\n          if (number) fprintf(stdout, \"%lu-\", linenumber - linecount--);\n          pp = end_of_line(pp, endptr, &ellength);\n          FWRITE_IGNORE(p, 1, pp - p, stdout);\n          p = pp;\n          }\n        }\n\n      /* If hyphenpending is TRUE here, it was set after outputting some\n      \"after\" lines (and there are no \"before\" lines). */\n\n      else if (hyphenpending)\n        {\n        if (group_separator != NULL)\n          fprintf(stdout, \"%s%s\", group_separator, STDOUT_NL);\n        hyphenpending = FALSE;\n        }\n\n      /* Now print the matching line(s); ensure we set hyphenpending at the end\n      of the file if any context lines are being output. */\n\n      if (after_context > 0 || before_context > 0)\n        endhyphenpending = TRUE;\n\n\n      if (printname != NULL) fprintf(stdout, \"%s%c\", printname,\n        printname_colon);\n      if (number) fprintf(stdout, \"%lu:\", linenumber);\n\n      /* In multiline mode, or if colouring, we have to split the line(s) up\n      and search for further matches, but not of course if the line is a\n      non-match. In multiline mode this is necessary in case there is another\n      match that spans the end of the current line. When colouring we want to\n      colour all matches. */\n\n      if ((multiline || do_colour) && !invert)\n        {\n        int plength;\n        PCRE2_SIZE endprevious;\n\n        /* The use of \\K may make the end offset earlier than the start. In\n        this situation, swap them round. */\n\n        if (offsets[0] > offsets[1])\n          {\n          PCRE2_SIZE temp = offsets[0];\n          offsets[0] = offsets[1];\n          offsets[1] = temp;\n          }\n\n        FWRITE_IGNORE(ptr, 1, offsets[0], stdout);\n        print_match(ptr + offsets[0], offsets[1] - offsets[0]);\n\n        for (;;)\n          {\n          PCRE2_SIZE oldstartoffset = pcre2_get_startchar(match_data);\n\n          endprevious = offsets[1];\n          startoffset = endprevious;  /* Advance after previous match. */\n\n          /* If the pattern contained a lookbehind that included \\K, it is\n          possible that the end of the match might be at or before the actual\n          starting offset we have just used. In this case, start one character\n          further on. */\n\n          if (startoffset <= oldstartoffset)\n            {\n            startoffset = oldstartoffset + 1;\n            if (utf) while ((ptr[startoffset] & 0xc0) == 0x80) startoffset++;\n            }\n\n          /* If the current match ended past the end of the line (only possible\n          in multiline mode), we must move on to the line in which it did end\n          before searching for more matches. Because the PCRE2_FIRSTLINE option\n          is set, the start of the match will always be before the first\n          newline sequence. */\n\n          while (startoffset > linelength + endlinelength)\n            {\n            ptr += linelength + endlinelength;\n            filepos += (int)(linelength + endlinelength);\n            linenumber++;\n            startoffset -= (int)(linelength + endlinelength);\n            endprevious -= (int)(linelength + endlinelength);\n            t = end_of_line(ptr, endptr, &endlinelength);\n            linelength = t - ptr - endlinelength;\n            length = (PCRE2_SIZE)(endptr - ptr);\n            }\n\n          /* If startoffset is at the exact end of the line it means this\n          complete line was the final part of the match, so there is nothing\n          more to do. */\n\n          if (startoffset == linelength + endlinelength) break;\n\n          /* Otherwise, run a match from within the final line, and if found,\n          loop for any that may follow. */\n\n          if (!match_patterns(ptr, length, options, startoffset, &mrc)) break;\n\n          /* The use of \\K may make the end offset earlier than the start. In\n          this situation, swap them round. */\n\n          if (offsets[0] > offsets[1])\n            {\n            PCRE2_SIZE temp = offsets[0];\n            offsets[0] = offsets[1];\n            offsets[1] = temp;\n            }\n\n          FWRITE_IGNORE(ptr + endprevious, 1, offsets[0] - endprevious, stdout);\n          print_match(ptr + offsets[0], offsets[1] - offsets[0]);\n          }\n\n        /* In multiline mode, we may have already printed the complete line\n        and its line-ending characters (if they matched the pattern), so there\n        may be no more to print. */\n\n        plength = (int)((linelength + endlinelength) - endprevious);\n        if (plength > 0) FWRITE_IGNORE(ptr + endprevious, 1, plength, stdout);\n        }\n\n      /* Not colouring or multiline; no need to search for further matches. */\n\n      else FWRITE_IGNORE(ptr, 1, linelength + endlinelength, stdout);\n      }\n\n    /* End of doing what has to be done for a match. If --line-buffered was\n    given, flush the output. */\n\n    if (line_buffered) fflush(stdout);\n    rc = 0;    /* Had some success */\n\n    /* Remember where the last match happened for after_context. We remember\n    where we are about to restart, and that line's number. */\n\n    lastmatchrestart = ptr + linelength + endlinelength;\n    lastmatchnumber = linenumber + 1;\n\n    /* If a line was printed and we are now at the end of the file and the last\n    line had no newline, output one. */\n\n    if (lines_printed && lastmatchrestart >= endptr && endlinelength == 0)\n      write_final_newline();\n    }\n\n  /* For a match in multiline inverted mode (which of course did not cause\n  anything to be printed), we have to move on to the end of the match before\n  proceeding. */\n\n  if (multiline && invert && match)\n    {\n    int ellength;\n    char *endmatch = ptr + offsets[1];\n    t = ptr;\n    while (t < endmatch)\n      {\n      t = end_of_line(t, endptr, &ellength);\n      if (t <= endmatch) linenumber++; else break;\n      }\n    endmatch = end_of_line(endmatch, endptr, &ellength);\n    linelength = endmatch - ptr - ellength;\n    }\n\n  /* Advance to after the newline and increment the line number. The file\n  offset to the current line is maintained in filepos. */\n\n  END_ONE_MATCH:\n  ptr += linelength + endlinelength;\n  filepos += (int)(linelength + endlinelength);\n  linenumber++;\n\n  /* If there was at least one match (or a non-match, as required) in the line,\n  increment the count for the -m option. */\n\n  if (line_matched) count_matched_lines++;\n\n  /* If input is line buffered, and the buffer is not yet full, read another\n  line and add it into the buffer. */\n\n  if (input_line_buffered && bufflength < (PCRE2_SIZE)bufsize)\n    {\n    PCRE2_SIZE add = read_one_line(ptr, bufsize - (ptr - main_buffer), in);\n    bufflength += add;\n    endptr += add;\n    }\n\n  /* If we haven't yet reached the end of the file (the buffer is full), and\n  the current point is in the top 1/3 of the buffer, slide the buffer down by\n  1/3 and refill it. Before we do this, if some unprinted \"after\" lines are\n  about to be lost, print them. */\n\n  if (bufflength >= (PCRE2_SIZE)bufsize && ptr > main_buffer + 2*bufthird)\n    {\n    if (after_context > 0 &&\n        lastmatchnumber > 0 &&\n        lastmatchrestart < main_buffer + bufthird)\n      {\n      do_after_lines(lastmatchnumber, lastmatchrestart, endptr, printname);\n      lastmatchnumber = 0;  /* Indicates no after lines pending */\n      }\n\n    /* Now do the shuffle */\n\n    (void)memmove(main_buffer, main_buffer + bufthird, 2*bufthird);\n    ptr -= bufthird;\n\n    buffrc = fill_buffer(handle, frtype, main_buffer + 2*bufthird, bufthird,\n      input_line_buffered);\n\n#if defined SUPPORT_LIBZ\n    if (frtype == FR_LIBZ && buffrc < 0) return 3;\n#endif\n#ifdef SUPPORT_LIBBZ2\n    if (frtype == FR_LIBBZ2 && buffrc < 0) return 3;\n#endif\n\n    bufflength = 2*bufthird + (PCRE2_SIZE)buffrc;\n    endptr = main_buffer + bufflength;\n\n    /* Adjust any last match point */\n\n    if (lastmatchnumber > 0) lastmatchrestart -= bufthird;\n    }\n  }     /* Loop through the whole file */\n\n/* End of file; print final \"after\" lines if wanted; do_after_lines sets\nhyphenpending if it prints something. */\n\nif (only_matching_count == 0 && !(count_only|show_total_count))\n  {\n  do_after_lines(lastmatchnumber, lastmatchrestart, endptr, printname);\n  hyphenpending |= endhyphenpending;\n  }\n\n/* Print the file name if we are looking for those without matches and there\nwere none. If we found a match, we won't have got this far. */\n\nif (filenames == FN_NOMATCH_ONLY)\n  {\n  fprintf(stdout, \"%s\", printname);\n  if (printname_nl == NULL) fprintf(stdout, \"%c\", 0);\n    else fprintf(stdout, \"%s\", printname_nl);\n  return 0;\n  }\n\n/* Print the match count if wanted */\n\nif (count_only && !quiet)\n  {\n  if (count > 0 || !omit_zero_count)\n    {\n    if (printname != NULL && filenames != FN_NONE)\n      fprintf(stdout, \"%s%c\", printname, printname_colon);\n    fprintf(stdout, \"%lu\" STDOUT_NL, count);\n    counts_printed++;\n    }\n  }\n\ntotal_count += count;   /* Can be set without count_only */\nreturn rc;\n}\n\n\n\n/*************************************************\n*     Grep a file or recurse into a directory    *\n*************************************************/\n\n/* Given a path name, if it's a directory, scan all the files if we are\nrecursing; if it's a file, grep it.\n\nArguments:\n  pathname          the path to investigate\n  dir_recurse       TRUE if recursing is wanted (-r or -drecurse)\n  only_one_at_top   TRUE if the path is the only one at toplevel\n\nReturns:  -1 the file/directory was skipped\n           0 if there was at least one match\n           1 if there were no matches\n           2 there was some kind of error\n\nHowever, file opening failures are suppressed if \"silent\" is set.\n*/\n\nstatic int\ngrep_or_recurse(char *pathname, BOOL dir_recurse, BOOL only_one_at_top)\n{\nint rc = 1;\nint frtype;\nvoid *handle;\nchar *lastcomp;\nFILE *in = NULL;           /* Ensure initialized */\n\n#ifdef SUPPORT_LIBZ\ngzFile ingz = NULL;\n#endif\n\n#ifdef SUPPORT_LIBBZ2\nBZFILE *inbz2 = NULL;\n#endif\n\n#if defined SUPPORT_LIBZ || defined SUPPORT_LIBBZ2\nint pathlen;\n#endif\n\n#if defined NATIVE_ZOS\nint zos_type;\nFILE *zos_test_file;\n#endif\n\n/* If the file name is \"-\" we scan stdin */\n\nif (strcmp(pathname, \"-\") == 0)\n  {\n  if (count_limit >= 0) setbuf(stdin, NULL);\n  return pcre2grep(stdin, FR_PLAIN, stdin_name,\n    (filenames > FN_DEFAULT || (filenames == FN_DEFAULT && !only_one_at_top))?\n      stdin_name : NULL);\n  }\n\n/* Inclusion and exclusion: --include-dir and --exclude-dir apply only to\ndirectories, whereas --include and --exclude apply to everything else. The test\nis against the final component of the path. */\n\nlastcomp = strrchr(pathname, FILESEP);\nlastcomp = (lastcomp == NULL)? pathname : lastcomp + 1;\n\n/* If the file is a directory, skip if not recursing or if explicitly excluded.\nOtherwise, scan the directory and recurse for each path within it. The scanning\ncode is localized so it can be made system-specific. */\n\n\n/* For z/OS, determine the file type. */\n\n#if defined NATIVE_ZOS\nzos_test_file =  fopen(pathname,\"rb\");\n\nif (zos_test_file == NULL)\n   {\n   if (!silent) fprintf(stderr, \"pcre2grep: failed to test next file %s\\n\",\n     pathname, strerror(errno));\n   return -1;\n   }\nzos_type = identifyzosfiletype (zos_test_file);\nfclose (zos_test_file);\n\n/* Handle a PDS in separate code */\n\nif (zos_type == __ZOS_PDS || zos_type == __ZOS_PDSE)\n   {\n   return travelonpdsdir (pathname, only_one_at_top);\n   }\n\n/* Deal with regular files in the normal way below. These types are:\n   zos_type == __ZOS_PDS_MEMBER\n   zos_type == __ZOS_PS\n   zos_type == __ZOS_VSAM_KSDS\n   zos_type == __ZOS_VSAM_ESDS\n   zos_type == __ZOS_VSAM_RRDS\n*/\n\n/* Handle a z/OS directory using common code. */\n\nelse if (zos_type == __ZOS_HFS)\n {\n#endif  /* NATIVE_ZOS */\n\n\n/* Handle directories: common code for all OS */\n\nif (isdirectory(pathname))\n  {\n  if (dee_action == dee_SKIP ||\n      !test_incexc(lastcomp, include_dir_patterns, exclude_dir_patterns))\n    return -1;\n\n  if (dee_action == dee_RECURSE)\n    {\n    char childpath[FNBUFSIZ];\n    char *nextfile;\n    directory_type *dir = opendirectory(pathname);\n\n    if (dir == NULL)\n      {\n      /* LCOV_EXCL_START - this is a \"never\" event */\n      if (!silent)\n        fprintf(stderr, \"pcre2grep: Failed to open directory %s: %s\\n\", pathname,\n          strerror(errno));\n      return 2;\n      /* LCOV_EXCL_STOP */\n      }\n\n    while ((nextfile = readdirectory(dir)) != NULL)\n      {\n      int frc;\n      int prc;\n      if (strlen(pathname) + strlen(nextfile) + 2 > sizeof(childpath) ||\n        (prc = snprintf(childpath, sizeof(childpath), \"%s%c%s\", pathname,\n                        FILESEP, nextfile)) < 0 ||\n        prc >= (int)sizeof(childpath))\n        {\n        /* LCOV_EXCL_START - this is a \"never\" event */\n        fprintf(stderr, \"pcre2grep: recursive filename is too long\\n\");\n        rc = 2;\n        break;\n        /* LCOV_EXCL_STOP */\n        }\n\n      /* If the realpath() function is available, we can try to prevent endless\n      recursion caused by a symlink pointing to a parent directory (GitHub\n      issue #2 (old Bugzilla #2794). Original patch from Thomas Tempelmann.\n      Modified to avoid using strlcat() because that isn't a standard C\n      function, and also modified not to copy back the fully resolved path,\n      because that affects the output from pcre2grep. */\n\n#ifdef HAVE_REALPATH\n      {\n      char resolvedpath[PATH_MAX];\n      BOOL isSame;\n      size_t rlen;\n      if (realpath(childpath, resolvedpath) == NULL)\n        /* LCOV_EXCL_START - this is a \"never\" event */\n        continue;     /* This path is invalid - we can skip processing this */\n        /* LCOV_EXCL_STOP */\n      isSame = strcmp(pathname, resolvedpath) == 0;\n      if (isSame) continue;    /* We have a recursion */\n      rlen = strlen(resolvedpath);\n      if (rlen++ < sizeof(resolvedpath) - 3)\n        {\n        BOOL contained;\n        strcat(resolvedpath, \"/\");\n        contained = strncmp(pathname, resolvedpath, rlen) == 0;\n        if (contained) continue;    /* We have a recursion */\n        }\n      }\n#endif  /* HAVE_REALPATH */\n\n      frc = grep_or_recurse(childpath, dir_recurse, FALSE);\n      if (frc > 1) rc = frc;\n       else if (frc == 0 && rc == 1) rc = 0;\n      }\n\n    closedirectory(dir);\n    return rc;\n    }\n  }\n\n#ifdef WIN32\nif (iswild(pathname))\n  {\n  char buffer[1024];\n  char *nextfile;\n  char *name;\n  directory_type *dir = opendirectory(pathname);\n\n  if (dir == NULL)\n    return 0;\n\n  for (nextfile = name = pathname; *nextfile != 0; nextfile++)\n    if (*nextfile == '/' || *nextfile == '\\\\')\n      name = nextfile + 1;\n  *name = 0;\n\n  while ((nextfile = readdirectory(dir)) != NULL)\n    {\n    int frc;\n    int prc;\n    if (strlen(pathname) + strlen(nextfile) + 1 > sizeof(buffer) ||\n      (prc = snprintf(buffer, sizeof(buffer), \"%s%s\", pathname,\n                      nextfile)) < 0 ||\n      prc >= (int)sizeof(buffer))\n      {\n      /* LCOV_EXCL_START - this is a \"never\" event */\n      fprintf(stderr, \"pcre2grep: wildcard filename is too long\\n\");\n      rc = 2;\n      break;\n      /* LCOV_EXCL_STOP */\n      }\n\n    frc = grep_or_recurse(buffer, dir_recurse, FALSE);\n    if (frc > 1) rc = frc;\n     else if (frc == 0 && rc == 1) rc = 0;\n    }\n\n  closedirectory(dir);\n  return rc;\n  }\n#endif\n\n#if defined NATIVE_ZOS\n }\n#endif\n\n/* If the file is not a directory, check for a regular file, and if it is not,\nskip it if that's been requested. Otherwise, check for an explicit inclusion or\nexclusion. */\n\nelse if (\n#if defined NATIVE_ZOS\n        (zos_type == __ZOS_NOFILE && DEE_action == DEE_SKIP) ||\n#else  /* all other OS */\n        (!isregfile(pathname) && DEE_action == DEE_SKIP) ||\n#endif\n        !test_incexc(lastcomp, include_patterns, exclude_patterns))\n  return -1;  /* File skipped */\n\n/* Control reaches here if we have a regular file, or if we have a directory\nand recursion or skipping was not requested, or if we have anything else and\nskipping was not requested. The scan proceeds. If this is the first and only\nargument at top level, we don't show the file name, unless we are only showing\nthe file name, or the filename was forced (-H). */\n\n#if defined SUPPORT_LIBZ || defined SUPPORT_LIBBZ2\npathlen = (int)(strlen(pathname));\n#endif\n\n/* Open using zlib if it is supported and the file name ends with .gz. */\n\n#ifdef SUPPORT_LIBZ\nif (pathlen > 3 && strcmp(pathname + pathlen - 3, \".gz\") == 0)\n  {\n  ingz = gzopen(pathname, \"rb\");\n  if (ingz == NULL)\n    {\n    /* LCOV_EXCL_START */\n    if (!silent)\n      fprintf(stderr, \"pcre2grep: Failed to open %s: %s\\n\", pathname,\n        strerror(errno));\n    return 2;\n    /* LCOV_EXCL_STOP */\n    }\n  handle = (void *)ingz;\n  frtype = FR_LIBZ;\n  }\nelse\n#endif\n\n/* Otherwise open with bz2lib if it is supported and the name ends with .bz2. */\n\n#ifdef SUPPORT_LIBBZ2\nif (pathlen > 4 && strcmp(pathname + pathlen - 4, \".bz2\") == 0)\n  {\n  inbz2 = BZ2_bzopen(pathname, \"rb\");\n  handle = (void *)inbz2;\n  frtype = FR_LIBBZ2;\n  }\nelse\n#endif\n\n/* Otherwise use plain fopen(). The label is so that we can come back here if\nan attempt to read a .bz2 file indicates that it really is a plain file. */\n\n#ifdef SUPPORT_LIBBZ2\nPLAIN_FILE:\n#endif\n  {\n  in = fopen(pathname, \"rb\");\n  handle = (void *)in;\n  frtype = FR_PLAIN;\n  }\n\n/* All the opening methods return errno when they fail. */\n\nif (handle == NULL)\n  {\n  if (!silent)\n    fprintf(stderr, \"pcre2grep: Failed to open %s: %s\\n\", pathname,\n      strerror(errno));\n  return 2;\n  }\n\n/* Now grep the file */\n\nrc = pcre2grep(handle, frtype, pathname, (filenames > FN_DEFAULT ||\n  (filenames == FN_DEFAULT && !only_one_at_top))? pathname : NULL);\n\n/* Close in an appropriate manner. */\n\n#ifdef SUPPORT_LIBZ\nif (frtype == FR_LIBZ)\n  {\n  if (rc == 3)\n    {\n    int errnum;\n    const char *err = gzerror(ingz, &errnum);\n    if (!silent)\n      fprintf(stderr, \"pcre2grep: Failed to read %s using zlib: %s\\n\",\n        pathname, err);\n    rc = 2;    /* The normal \"something went wrong\" code */\n    }\n  gzclose(ingz);\n  }\nelse\n#endif\n\n/* If it is a .bz2 file and the result is 3, it means that the first attempt to\nread failed. If the error indicates that the file isn't in fact bzipped, try\nagain as a normal file. */\n\n#ifdef SUPPORT_LIBBZ2\nif (frtype == FR_LIBBZ2)\n  {\n  if (rc == 3)\n    {\n    int errnum;\n    const char *err = BZ2_bzerror(inbz2, &errnum);\n    if (errnum == BZ_DATA_ERROR_MAGIC)\n      {\n      BZ2_bzclose(inbz2);\n      goto PLAIN_FILE;\n      }\n    /* LCOV_EXCL_START */\n    else if (!silent)\n      fprintf(stderr, \"pcre2grep: Failed to read %s using bzlib: %s\\n\",\n        pathname, err);\n    rc = 2;    /* The normal \"something went wrong\" code */\n    /* LCOV_EXCL_STOP */\n    }\n  BZ2_bzclose(inbz2);\n  }\nelse\n#endif\n\n/* Normal file close */\n\nfclose(in);\n\n/* Pass back the yield from pcre2grep(). */\n\nreturn rc;\n}\n\n\n\n/*************************************************\n*          Handle a no-data option               *\n*************************************************/\n\n/* This is called when a known option has been identified. */\n\nstatic int\nhandle_option(int letter, int options)\n{\nswitch(letter)\n  {\n  case N_FOFFSETS: file_offsets = TRUE; break;\n  case N_HELP: help(); pcre2grep_exit(0); break; /* Stops compiler warning */\n  case N_LBUFFER: line_buffered = TRUE; break;\n  case N_LOFFSETS: line_offsets = number = TRUE; break;\n  case N_NOJIT: use_jit = FALSE; break;\n  case N_ALLABSK: extra_options |= PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK; break;\n  case N_NO_GROUP_SEPARATOR: group_separator = NULL; break;\n  case N_POSIX_PATFILE: posix_pattern_file = TRUE; break;\n  case 'a': binary_files = BIN_TEXT; break;\n  case 'c': count_only = TRUE; break;\n  case N_POSIX_DIGIT: posix_digit = TRUE; break;\n  case 'E': case_restrict = TRUE; break;\n  case 'F': options |= PCRE2_LITERAL; break;\n  case 'H': filenames = FN_FORCE; break;\n  case 'I': binary_files = BIN_NOMATCH; break;\n  case 'h': filenames = FN_NONE; break;\n  case 'i': options |= PCRE2_CASELESS; break;\n  case 'l': omit_zero_count = TRUE; filenames = FN_MATCH_ONLY; break;\n  case 'L': filenames = FN_NOMATCH_ONLY; break;\n  case 'M': multiline = TRUE; options |= PCRE2_MULTILINE|PCRE2_FIRSTLINE; break;\n  case 'n': number = TRUE; break;\n\n  case 'o':\n  only_matching_last = add_number(0, only_matching_last);\n  if (only_matching == NULL) only_matching = only_matching_last;\n  break;\n\n  case 'P': no_ucp = TRUE; break;\n  case 'q': quiet = TRUE; break;\n  case 'r': dee_action = dee_RECURSE; break;\n  case 's': silent = TRUE; break;\n  case 't': show_total_count = TRUE; break;\n  case 'u': options |= PCRE2_UTF | PCRE2_UCP; utf = TRUE; break;\n  case 'U': options |= PCRE2_UTF | PCRE2_MATCH_INVALID_UTF | PCRE2_UCP;\n            utf = TRUE; break;\n  case 'v': invert = TRUE; break;\n\n  case 'V':\n    {\n    unsigned char buffer[128];\n    (void)pcre2_config(PCRE2_CONFIG_VERSION, buffer);\n    fprintf(stdout, \"pcre2grep version %s\" STDOUT_NL, buffer);\n    }\n  pcre2grep_exit(0);\n  break;  /* LCOV_EXCL_LINE - statement kept to avoid compiler warning */\n\n  case 'w': extra_options |= PCRE2_EXTRA_MATCH_WORD; break;\n  case 'x': extra_options |= PCRE2_EXTRA_MATCH_LINE; break;\n  case 'Z': printname_colon = printname_hyphen = 0; printname_nl = NULL; break;\n\n  /* LCOV_EXCL_START - this is a \"never event\" */\n  default:\n  fprintf(stderr, \"pcre2grep: Unknown option -%c\\n\", letter);\n  pcre2grep_exit(usage(2));\n  /* LCOV_EXCL_STOP */\n  }\n\nreturn options;\n}\n\n\n\n/*************************************************\n*          Construct printed ordinal             *\n*************************************************/\n\n/* This turns a number into \"1st\", \"3rd\", etc. */\n\nstatic char *\nordin(int n)\n{\nstatic char buffer[14];\nchar *p = buffer;\nsnprintf(p, sizeof(buffer), \"%d\", n);\nwhile (*p != 0) p++;\nn %= 100;\nif (n >= 11 && n <= 13) n = 0;\nswitch (n%10)\n  {\n  case 1: snprintf(p, (buffer + sizeof(buffer)) - p, \"st\"); break;\n  case 2: snprintf(p, (buffer + sizeof(buffer)) - p, \"nd\"); break;\n  case 3: snprintf(p, (buffer + sizeof(buffer)) - p, \"rd\"); break;\n  default: snprintf(p, (buffer + sizeof(buffer)) - p, \"th\"); break;\n  }\nreturn buffer;\n}\n\n\n\n/*************************************************\n*          Compile a single pattern              *\n*************************************************/\n\n/* Do nothing if the pattern has already been compiled. This is the case for\ninclude/exclude patterns read from a file.\n\nWhen the -F option has been used, each \"pattern\" may be a list of strings,\nseparated by line breaks. They will be matched literally. We split such a\nstring and compile the first substring, inserting an additional block into the\npattern chain.\n\nArguments:\n  p              points to the pattern block\n  options        the PCRE options\n  fromfile       TRUE if the pattern was read from a file\n  fromtext       file name or identifying text (e.g. \"include\")\n  count          0 if this is the only command line pattern, or\n                 number of the command line pattern, or\n                 linenumber for a pattern from a file\n\nReturns:         TRUE on success, FALSE after an error\n*/\n\nstatic BOOL\ncompile_pattern(patstr *p, int options, int fromfile, const char *fromtext,\n  int count)\n{\nchar *ps;\nint errcode;\nPCRE2_SIZE patlen, erroffset;\nPCRE2_UCHAR errmessbuffer[ERRBUFSIZ];\n\nif (p->compiled != NULL) return TRUE;\nps = p->string;\npatlen = p->length;\n\nif ((options & PCRE2_LITERAL) != 0)\n  {\n  int ellength;\n  char *eop = ps + patlen;\n  char *pe = end_of_line(ps, eop, &ellength);\n\n  if (ellength != 0)\n    {\n    patlen = pe - ps - ellength;\n    if (add_pattern(pe, p->length-patlen-ellength, p) == NULL) return FALSE;\n    }\n  }\n\np->compiled = pcre2_compile((PCRE2_SPTR)ps, patlen, options, &errcode,\n  &erroffset, compile_context);\n\n/* Handle successful compile. Try JIT-compiling if supported and enabled. We\nignore any JIT compiler errors, relying falling back to interpreting if\nanything goes wrong with JIT. */\n\nif (p->compiled != NULL)\n  {\n#ifdef SUPPORT_PCRE2GREP_JIT\n  if (use_jit) (void)pcre2_jit_compile(p->compiled, PCRE2_JIT_COMPLETE);\n#endif\n  return TRUE;\n  }\n\n/* Handle compile errors */\n\nif (erroffset > patlen) erroffset = patlen;\npcre2_get_error_message(errcode, errmessbuffer, sizeof(errmessbuffer));\n\nif (fromfile)\n  {\n  fprintf(stderr, \"pcre2grep: Error in regex in line %d of %s \"\n    \"at offset %d: %s\\n\", count, fromtext, (int)erroffset, errmessbuffer);\n  }\nelse\n  {\n  if (count == 0)\n    fprintf(stderr, \"pcre2grep: Error in %s regex at offset %d: %s\\n\",\n      fromtext, (int)erroffset, errmessbuffer);\n  else\n    fprintf(stderr, \"pcre2grep: Error in %s %s regex at offset %d: %s\\n\",\n      ordin(count), fromtext, (int)erroffset, errmessbuffer);\n  }\n\nreturn FALSE;\n}\n\n\n\n/*************************************************\n*     Read and compile a file of patterns        *\n*************************************************/\n\n/* This is used for --filelist, --include-from, and --exclude-from.\n\nArguments:\n  name         the name of the file; \"-\" is stdin\n  patptr       pointer to the pattern chain anchor\n  patlastptr   pointer to the last pattern pointer\n\nReturns:       TRUE if all went well\n*/\n\nstatic BOOL\nread_pattern_file(char *name, patstr **patptr, patstr **patlastptr)\n{\nint linenumber = 0;\nPCRE2_SIZE patlen;\nFILE *f;\nconst char *filename;\nchar buffer[MAXPATLEN+20];\n\nif (strcmp(name, \"-\") == 0)\n  {\n  f = stdin;\n  filename = stdin_name;\n  }\nelse\n  {\n  f = fopen(name, \"r\");\n  if (f == NULL)\n    {\n    fprintf(stderr, \"pcre2grep: Failed to open %s: %s\\n\", name, strerror(errno));\n    return FALSE;\n    }\n  filename = name;\n  }\n\nwhile (TRUE)\n  {\n  patlen = sizeof(buffer);\n  if (!read_pattern(buffer, &patlen, f))\n    break;\n\n  if (!posix_pattern_file)\n   {\n   while (patlen > 0 && isspace((unsigned char)(buffer[patlen-1]))) patlen--;\n   }\n\n  linenumber++;\n  if (!posix_pattern_file && patlen == 0) continue; /* Skip blank lines */\n\n  /* Note: this call to add_pattern() puts a pointer to the local variable\n  \"buffer\" into the pattern chain. However, that pointer is used only when\n  compiling the pattern, which happens immediately below, so we flatten it\n  afterwards, as a precaution against any later code trying to use it. */\n\n  *patlastptr = add_pattern(buffer, patlen, *patlastptr);\n  if (*patlastptr == NULL)\n    {\n    /* LCOV_EXCL_START - won't happen in testing */\n    if (f != stdin) fclose(f);\n    return FALSE;\n    /* LCOV_EXCL_STOP */\n    }\n  if (*patptr == NULL) *patptr = *patlastptr;\n\n  /* This loop is needed because compiling a \"pattern\" when -F is set may add\n  on additional literal patterns if the original contains a newline. In the\n  common case, it never will, because read_one_line() stops at a newline.\n  However, the -N option can be used to give pcre2grep a different newline\n  setting. */\n\n  for(;;)\n    {\n    if (!compile_pattern(*patlastptr, pcre2_options, TRUE, filename,\n        linenumber))\n      {\n      if (f != stdin) fclose(f);\n      return FALSE;\n      }\n    (*patlastptr)->string = NULL;            /* Insurance */\n    if ((*patlastptr)->next == NULL) break;\n    *patlastptr = (*patlastptr)->next;\n    }\n  }\n\nif (f != stdin) fclose(f);\nreturn TRUE;\n}\n\n\n\n/*************************************************\n*                Main program                    *\n*************************************************/\n\n/* Returns 0 if something matched, 1 if nothing matched, 2 after an error. */\n\nint\nmain(int argc, char **argv)\n{\nint i, j;\nint rc = 1;\nBOOL only_one_at_top;\npatstr *cp;\nfnstr *fn;\nomstr *om;\nconst char *locale_from = \"--locale\";\n\n#ifdef SUPPORT_PCRE2GREP_JIT\npcre2_jit_stack *jit_stack = NULL;\n#endif\n\n/* In Windows, stdout is set up as a text stream, which means that \\n is\nconverted to \\r\\n. This causes output lines that are copied from the input to\nchange from ....\\r\\n to ....\\r\\r\\n, which is not right. We therefore ensure\nthat stdout is a binary stream. Note that this means all other output to stdout\nmust use STDOUT_NL to terminate lines. */\n\n#ifdef WIN32\n_setmode(_fileno(stdout), _O_BINARY);\n#endif\n\n/* Process the options */\n\nfor (i = 1; i < argc; i++)\n  {\n  option_item *op = NULL;\n  char *option_data = (char *)\"\";    /* default to keep compiler happy */\n  BOOL longop;\n  BOOL longopwasequals = FALSE;\n\n  if (argv[i][0] != '-') break;\n\n  /* If we hit an argument that is just \"-\", it may be a reference to STDIN,\n  but only if we have previously had -e or -f to define the patterns. */\n\n  if (argv[i][1] == 0)\n    {\n    if (pattern_files != NULL || patterns != NULL) break;\n      else pcre2grep_exit(usage(2));\n    }\n\n  /* Handle a long name option, or -- to terminate the options */\n\n  if (argv[i][1] == '-')\n    {\n    char *arg = argv[i] + 2;\n    char *argequals = strchr(arg, '=');\n\n    if (*arg == 0)    /* -- terminates options */\n      {\n      i++;\n      break;                /* out of the options-handling loop */\n      }\n\n    longop = TRUE;\n\n    /* Some long options have data that follows after =, for example file=name.\n    Some options have variations in the long name spelling: specifically, we\n    allow \"regexp\" because GNU grep allows it, though I personally go along\n    with Jeffrey Friedl and Larry Wall in preferring \"regex\" without the \"p\".\n    These options are entered in the table as \"regex(p)\". Options can be in\n    both these categories. */\n\n    for (op = optionlist; op->one_char != 0; op++)\n      {\n      const char *opbra = strchr(op->long_name, '(');\n      const char *equals = strchr(op->long_name, '=');\n\n      /* Handle options with only one spelling of the name */\n\n      if (opbra == NULL)     /* Does not contain '(' */\n        {\n        if (equals == NULL)  /* Not thing=data case */\n          {\n          if (strcmp(arg, op->long_name) == 0) break;\n          }\n        else                 /* Special case xxx=data */\n          {\n          int oplen = (int)(equals - op->long_name);\n          int arglen = (argequals == NULL)?\n            (int)strlen(arg) : (int)(argequals - arg);\n          if (oplen == arglen && strncmp(arg, op->long_name, oplen) == 0)\n            {\n            option_data = arg + arglen;\n            if (*option_data == '=')\n              {\n              option_data++;\n              longopwasequals = TRUE;\n              }\n            break;\n            }\n          }\n        }\n\n      /* Handle options with an alternate spelling of the name */\n\n      else\n        {\n        char buff1[24];\n        char buff2[24];\n        int ret;\n\n        int baselen = (int)(opbra - op->long_name);\n        int fulllen = (int)(strchr(op->long_name, ')') - op->long_name + 1);\n        int arglen = (argequals == NULL || equals == NULL)?\n          (int)strlen(arg) : (int)(argequals - arg);\n\n        if ((ret = snprintf(buff1, sizeof(buff1), \"%.*s\", baselen, op->long_name),\n             ret < 0 || ret >= (int)sizeof(buff1)) ||\n            (ret = snprintf(buff2, sizeof(buff2), \"%s%.*s\", buff1,\n                     fulllen - baselen - 2, opbra + 1),\n             ret < 0 || ret >= (int)sizeof(buff2)))\n          {\n          /* LCOV_EXCL_START - this is a \"never\" event */\n          fprintf(stderr, \"pcre2grep: Buffer overflow when parsing %s option\\n\",\n            op->long_name);\n          pcre2grep_exit(2);\n          /* LCOV_EXCL_STOP */\n          }\n\n        if (strncmp(arg, buff1, arglen) == 0 ||\n           strncmp(arg, buff2, arglen) == 0)\n          {\n          if (equals != NULL && argequals != NULL)\n            {\n            option_data = argequals;\n            if (*option_data == '=')\n              {\n              option_data++;\n              longopwasequals = TRUE;\n              }\n            }\n          break;\n          }\n        }\n      }\n\n    if (op->one_char == 0)\n      {\n      fprintf(stderr, \"pcre2grep: Unknown option %s\\n\", argv[i]);\n      pcre2grep_exit(usage(2));\n      }\n    }\n\n  /* One-char options; many that have no data may be in a single argument; we\n  continue till we hit the last one or one that needs data. */\n\n  else\n    {\n    char *s = argv[i] + 1;\n    longop = FALSE;\n\n    while (*s != 0)\n      {\n      for (op = optionlist; op->one_char != 0; op++)\n        {\n        if (*s == op->one_char) break;\n        }\n      if (op->one_char == 0)\n        {\n        fprintf(stderr, \"pcre2grep: Unknown option letter '%c' in \\\"%s\\\"\\n\",\n          *s, argv[i]);\n        pcre2grep_exit(usage(2));\n        }\n\n      option_data = s+1;\n\n      /* Break out if this is the last character in the string; it's handled\n      below like a single multi-char option. */\n\n      if (*option_data == 0) break;\n\n      /* Check for a single-character option that has data: OP_OP_NUMBER(S)\n      are used for ones that either have a numerical number or defaults, i.e.\n      the data is optional. If a digit follows, there is data; if not, carry on\n      with other single-character options in the same string. */\n\n      if (op->type == OP_OP_NUMBER || op->type == OP_OP_NUMBERS)\n        {\n        if (isdigit((unsigned char)(s[1]))) break;\n        }\n      else   /* Check for an option with data */\n        {\n        if (op->type != OP_NODATA) break;\n        }\n\n      /* Handle a single-character option with no data, then loop for the\n      next character in the string. */\n\n      pcre2_options = handle_option(*s++, pcre2_options);\n      }\n    }\n\n  /* At this point we should have op pointing to a matched option. If the type\n  is NO_DATA, it means that there is no data, and the option might set\n  something in the PCRE options. */\n\n  if (op->type == OP_NODATA)\n    {\n    pcre2_options = handle_option(op->one_char, pcre2_options);\n    continue;\n    }\n\n  /* If the option type is OP_OP_STRING or OP_OP_NUMBER(S), it's an option that\n  either has a value or defaults to something. It cannot have data in a\n  separate item. At the moment, the only such options are \"colo(u)r\",\n  and \"only-matching\". */\n\n  if (*option_data == 0 &&\n      (op->type == OP_OP_STRING || op->type == OP_OP_NUMBER ||\n       op->type == OP_OP_NUMBERS))\n    {\n    switch (op->one_char)\n      {\n      case N_COLOUR:\n      colour_option = \"auto\";\n      break;\n\n      case 'o':\n      only_matching_last = add_number(0, only_matching_last);\n      if (only_matching == NULL) only_matching = only_matching_last;\n      break;\n      }\n    continue;\n    }\n\n  /* Otherwise, find the data string for the option. */\n\n  if (*option_data == 0)\n    {\n    if (i >= argc - 1 || longopwasequals)\n      {\n      fprintf(stderr, \"pcre2grep: Data missing after %s\\n\", argv[i]);\n      pcre2grep_exit(usage(2));\n      }\n    option_data = argv[++i];\n    }\n\n  /* If the option type is OP_OP_NUMBERS, the value is a number that is to be\n  added to a chain of numbers. */\n\n  if (op->type == OP_OP_NUMBERS)\n    {\n    unsigned long int n = decode_number(option_data, op, longop);\n    omdatastr *omd = (omdatastr *)op->dataptr;\n    *(omd->lastptr) = add_number((int)n, *(omd->lastptr));\n    if (*(omd->anchor) == NULL) *(omd->anchor) = *(omd->lastptr);\n    }\n\n  /* If the option type is OP_PATLIST, it's the -e option, or one of the\n  include/exclude options, which can be called multiple times to create lists\n  of patterns. */\n\n  else if (op->type == OP_PATLIST)\n    {\n    patdatastr *pd = (patdatastr *)op->dataptr;\n    *(pd->lastptr) = add_pattern(option_data, (PCRE2_SIZE)strlen(option_data),\n      *(pd->lastptr));\n    if (*(pd->lastptr) == NULL) goto EXIT2;\n    if (*(pd->anchor) == NULL) *(pd->anchor) = *(pd->lastptr);\n    }\n\n  /* If the option type is OP_FILELIST, it's one of the options that names a\n  file. */\n\n  else if (op->type == OP_FILELIST)\n    {\n    fndatastr *fd = (fndatastr *)op->dataptr;\n    fn = (fnstr *)malloc(sizeof(fnstr));\n    if (fn == NULL)\n      {\n      /* LCOV_EXCL_START */\n      fprintf(stderr, \"pcre2grep: malloc failed\\n\");\n      goto EXIT2;\n      /* LCOV_EXCL_STOP */\n      }\n    fn->next = NULL;\n    fn->name = option_data;\n    if (*(fd->anchor) == NULL)\n      *(fd->anchor) = fn;\n    else\n      (*(fd->lastptr))->next = fn;\n    *(fd->lastptr) = fn;\n    }\n\n  /* Handle OP_BINARY_FILES */\n\n  else if (op->type == OP_BINFILES)\n    {\n    if (strcmp(option_data, \"binary\") == 0)\n      binary_files = BIN_BINARY;\n    else if (strcmp(option_data, \"without-match\") == 0)\n      binary_files = BIN_NOMATCH;\n    else if (strcmp(option_data, \"text\") == 0)\n      binary_files = BIN_TEXT;\n    else\n      {\n      fprintf(stderr, \"pcre2grep: unknown value \\\"%s\\\" for binary-files\\n\",\n        option_data);\n      pcre2grep_exit(usage(2));\n      }\n    }\n\n  /* Otherwise, deal with a single string or numeric data value. */\n\n  else if (op->type != OP_NUMBER && op->type != OP_U32NUMBER &&\n           op->type != OP_OP_NUMBER && op->type != OP_SIZE)\n    {\n    *((char **)op->dataptr) = option_data;\n    }\n  else\n    {\n    unsigned long int n = decode_number(option_data, op, longop);\n    if (op->type == OP_U32NUMBER) *((uint32_t *)op->dataptr) = (uint32_t)n;\n      else if (op->type == OP_SIZE) *((PCRE2_SIZE *)op->dataptr) = n;\n      else *((int *)op->dataptr) = (int)n;\n    }\n  }\n\n/* Options have been decoded. If -C was used, its value is used as a default\nfor -A and -B. */\n\nif (both_context > 0)\n  {\n  if (after_context == 0) after_context = both_context;\n  if (before_context == 0) before_context = both_context;\n  }\n\n/* Only one of --only-matching, --output, --file-offsets, or --line-offsets is\npermitted. They display, each in their own way, only the data that has matched.\n*/\n\nonly_matching_count = (only_matching != NULL) + (output_text != NULL) +\n  file_offsets + line_offsets;\n\nif (only_matching_count > 1)\n  {\n  fprintf(stderr, \"pcre2grep: Cannot mix --only-matching, --output, \"\n    \"--file-offsets and/or --line-offsets\\n\");\n  pcre2grep_exit(usage(2));\n  }\n\n/* Check that there is a big enough ovector for all -o settings. */\n\nfor (om = only_matching; om != NULL; om = om->next)\n  {\n  int n = om->groupnum;\n  if (n > (int)capture_max)\n    {\n    fprintf(stderr, \"pcre2grep: Requested group %d cannot be captured.\\n\", n);\n    fprintf(stderr, \"pcre2grep: Use --om-capture to increase the size of the capture vector.\\n\");\n    goto EXIT2;\n    }\n  }\n\n/* Check the text supplied to --output for errors. */\n\nif (output_text != NULL &&\n    !syntax_check_output_text((PCRE2_SPTR)output_text, FALSE))\n  goto EXIT2;\n\n/* Set up default compile and match contexts and match data blocks. */\n\noffset_size = capture_max + 1;\ncompile_context = pcre2_compile_context_create(NULL);\nmatch_context = pcre2_match_context_create(NULL);\nmatch_data_pair[0] = pcre2_match_data_create(offset_size, NULL);\nmatch_data_pair[1] = pcre2_match_data_create(offset_size, NULL);\noffsets_pair[0] = pcre2_get_ovector_pointer(match_data_pair[0]);\noffsets_pair[1] = pcre2_get_ovector_pointer(match_data_pair[1]);\nmatch_data = match_data_pair[0];\noffsets = offsets_pair[0];\nmatch_data_toggle = 0;\n\n/* If string (script) callouts are supported, set up the callout processing\nfunction in the match context. */\n\n#ifdef SUPPORT_PCRE2GREP_CALLOUT\npcre2_set_callout(match_context, pcre2grep_callout, NULL);\n#else\nextra_options |= PCRE2_EXTRA_NEVER_CALLOUT;\n#endif\n\n/* Put limits into the match context. */\n\nif (heap_limit != ~(uint32_t)0) pcre2_set_heap_limit(match_context, heap_limit);\nif (match_limit > 0) pcre2_set_match_limit(match_context, match_limit);\nif (depth_limit > 0) pcre2_set_depth_limit(match_context, depth_limit);\n\n/* If a locale has not been provided as an option, see if the LC_CTYPE or\nLC_ALL environment variable is set, and if so, use it. */\n\nif (locale == NULL)\n  {\n  locale = getenv(\"LC_ALL\");\n  locale_from = \"LC_ALL\";\n  }\n\nif (locale == NULL)\n  {\n  locale = getenv(\"LC_CTYPE\");\n  locale_from = \"LC_CTYPE\";\n  }\n\n/* If a locale is set, use it to generate the tables the PCRE needs. Passing\nNULL to pcre2_maketables() means that malloc() is used to get the memory. */\n\nif (locale != NULL)\n  {\n  if (setlocale(LC_CTYPE, locale) == NULL)\n    {\n    fprintf(stderr, \"pcre2grep: Failed to set locale %s (obtained from %s)\\n\",\n      locale, locale_from);\n    goto EXIT2;\n    }\n  character_tables = pcre2_maketables(NULL);\n  pcre2_set_character_tables(compile_context, character_tables);\n  }\n\n/* Sort out colouring */\n\nif (colour_option != NULL && strcmp(colour_option, \"never\") != 0)\n  {\n  if (strcmp(colour_option, \"always\") == 0)\n#ifdef WIN32\n    do_ansi = !is_stdout_tty(),\n#endif\n    do_colour = TRUE;\n  else if (strcmp(colour_option, \"auto\") == 0) do_colour = is_stdout_tty();\n  else\n    {\n    fprintf(stderr, \"pcre2grep: Unknown colour setting \\\"%s\\\"\\n\",\n      colour_option);\n    goto EXIT2;\n    }\n  if (do_colour)\n    {\n    char *cs = getenv(\"PCRE2GREP_COLOUR\");\n    if (cs == NULL) cs = getenv(\"PCRE2GREP_COLOR\");\n    if (cs == NULL) cs = getenv(\"PCREGREP_COLOUR\");\n    if (cs == NULL) cs = getenv(\"PCREGREP_COLOR\");\n    if (cs == NULL) cs = parse_grep_colors(getenv(\"GREP_COLORS\"));\n    if (cs == NULL) cs = getenv(\"GREP_COLOR\");\n    if (cs != NULL)\n      {\n      if (strspn(cs, \";0123456789\") == strlen(cs)) colour_string = cs;\n      }\n#ifdef WIN32\n    init_colour_output();\n#endif\n    }\n  }\n\n/* When colouring or otherwise identifying matching substrings, we need to find\nall possible matches when there are multiple patterns. */\n\nall_matches = do_colour || only_matching_count != 0;\n\n/* Sort out a newline setting. */\n\nif (newline_arg != NULL)\n  {\n  for (endlinetype = 1; endlinetype < (int)(sizeof(newlines)/sizeof(char *));\n       endlinetype++)\n    {\n    if (strcmpic(newline_arg, newlines[endlinetype]) == 0) break;\n    }\n  if (endlinetype < (int)(sizeof(newlines)/sizeof(char *)))\n    pcre2_set_newline(compile_context, endlinetype);\n  else\n    {\n    fprintf(stderr, \"pcre2grep: Invalid newline specifier \\\"%s\\\"\\n\",\n      newline_arg);\n    goto EXIT2;\n    }\n  }\n\n/* Find default newline convention */\n\nelse\n  {\n  (void)pcre2_config(PCRE2_CONFIG_NEWLINE, &endlinetype);\n  }\n\n/* Interpret the text values for -d and -D */\n\nif (dee_option != NULL)\n  {\n  if (strcmp(dee_option, \"read\") == 0) dee_action = dee_READ;\n  else if (strcmp(dee_option, \"recurse\") == 0) dee_action = dee_RECURSE;\n  else if (strcmp(dee_option, \"skip\") == 0) dee_action = dee_SKIP;\n  else\n    {\n    fprintf(stderr, \"pcre2grep: Invalid value \\\"%s\\\" for -d\\n\", dee_option);\n    goto EXIT2;\n    }\n  }\n\nif (DEE_option != NULL)\n  {\n  if (strcmp(DEE_option, \"read\") == 0) DEE_action = DEE_READ;\n  else if (strcmp(DEE_option, \"skip\") == 0) DEE_action = DEE_SKIP;\n  else\n    {\n    fprintf(stderr, \"pcre2grep: Invalid value \\\"%s\\\" for -D\\n\", DEE_option);\n    goto EXIT2;\n    }\n  }\n\n/* If no_ucp is set, remove PCRE2_UCP from the compile options. */\n\nif (no_ucp) pcre2_options &= ~PCRE2_UCP;\n\n/* adjust the extra options. */\n\nif (case_restrict) extra_options |= PCRE2_EXTRA_CASELESS_RESTRICT;\nif (posix_digit)\n  extra_options |= (PCRE2_EXTRA_ASCII_BSD | PCRE2_EXTRA_ASCII_DIGIT);\nif ((pcre2_options & PCRE2_LITERAL) != 0)\n  extra_options &= ~PCRE2_EXTRA_NEVER_CALLOUT;\n\n/* Set the extra options in the compile context. */\n\n(void)pcre2_set_compile_extra_options(compile_context, extra_options);\n\n/* If use_jit is set, check whether JIT is available. If not, do not try\nto use JIT. */\n\nif (use_jit)\n  {\n  uint32_t answer;\n  (void)pcre2_config(PCRE2_CONFIG_JIT, &answer);\n  if (!answer) use_jit = FALSE;\n  }\n\n/* Get memory for the main buffer. */\n\nif (bufthird <= 0)\n  {\n  fprintf(stderr, \"pcre2grep: --buffer-size must be greater than zero\\n\");\n  goto EXIT2;\n  }\n\nbufsize = 3*bufthird;\nmain_buffer = (char *)malloc(bufsize);\n\nif (main_buffer == NULL)\n  {\n  /* LCOV_EXCL_START */\n  fprintf(stderr, \"pcre2grep: malloc failed\\n\");\n  goto EXIT2;\n  /* LCOV_EXCL_STOP */\n  }\n\n/* If no patterns were provided by -e, and there are no files provided by -f,\nthe first argument is the one and only pattern, and it must exist. */\n\nif (patterns == NULL && pattern_files == NULL)\n  {\n  if (i >= argc) return usage(2);\n  patterns = patterns_last = add_pattern(argv[i], (PCRE2_SIZE)strlen(argv[i]),\n    NULL);\n  i++;\n  if (patterns == NULL) goto EXIT2;\n  }\n\n/* Compile the patterns that were provided on the command line, either by\nmultiple uses of -e or as a single unkeyed pattern. We cannot do this until\nafter all the command-line options are read so that we know which PCRE options\nto use. When -F is used, compile_pattern() may add another block into the\nchain, so we must not access the next pointer till after the compile. */\n\nfor (j = 1, cp = patterns; cp != NULL; j++, cp = cp->next)\n  {\n  if (!compile_pattern(cp, pcre2_options, FALSE, \"command-line\",\n       (j == 1 && patterns->next == NULL)? 0 : j))\n    goto EXIT2;\n  }\n\n/* Read and compile the regular expressions that are provided in files. */\n\nfor (fn = pattern_files; fn != NULL; fn = fn->next)\n  {\n  if (!read_pattern_file(fn->name, &patterns, &patterns_last)) goto EXIT2;\n  }\n\n/* Unless JIT has been explicitly disabled, arrange a stack for it to use. */\n\n#ifdef SUPPORT_PCRE2GREP_JIT\nif (use_jit)\n  {\n  jit_stack = pcre2_jit_stack_create(32*1024, 1024*1024, NULL);\n  if (jit_stack != NULL                        )\n    pcre2_jit_stack_assign(match_context, NULL, jit_stack);\n  }\n#endif\n\n/* -F, -w, and -x do not apply to include or exclude patterns, so we must\nadjust the options. */\n\npcre2_options &= ~PCRE2_LITERAL;\n(void)pcre2_set_compile_extra_options(compile_context, 0);\n\n/* If there are include or exclude patterns read from the command line, compile\nthem. */\n\nfor (j = 0; j < 4; j++)\n  {\n  int k;\n  for (k = 1, cp = *(incexlist[j]); cp != NULL; k++, cp = cp->next)\n    {\n    if (!compile_pattern(cp, pcre2_options, FALSE, incexname[j],\n         (k == 1 && cp->next == NULL)? 0 : k))\n      goto EXIT2;\n    }\n  }\n\n/* Read and compile include/exclude patterns from files. */\n\nfor (fn = include_from; fn != NULL; fn = fn->next)\n  {\n  if (!read_pattern_file(fn->name, &include_patterns, &include_patterns_last))\n    goto EXIT2;\n  }\n\nfor (fn = exclude_from; fn != NULL; fn = fn->next)\n  {\n  if (!read_pattern_file(fn->name, &exclude_patterns, &exclude_patterns_last))\n    goto EXIT2;\n  }\n\n/* If there are no files that contain lists of files to search, and there are\nno file arguments, search stdin, and then exit. */\n\nif (file_lists == NULL && i >= argc)\n  {\n  /* Using a buffered stdin, that then is seek is not portable,\n     so attempt to remove the buffer, to workaround reported issues\n     affecting several BSD and AIX */\n  if (count_limit >= 0)\n    setbuf(stdin, NULL);\n  rc = pcre2grep(stdin, FR_PLAIN, stdin_name,\n    (filenames > FN_DEFAULT)? stdin_name : NULL);\n  goto EXIT;\n  }\n\n/* If any files that contains a list of files to search have been specified,\nread them line by line and search the given files. */\n\nfor (fn = file_lists; fn != NULL; fn = fn->next)\n  {\n  char buffer[FNBUFSIZ];\n  FILE *fl;\n  if (strcmp(fn->name, \"-\") == 0) fl = stdin; else\n    {\n    fl = fopen(fn->name, \"rb\");\n    if (fl == NULL)\n      {\n      fprintf(stderr, \"pcre2grep: Failed to open %s: %s\\n\", fn->name,\n        strerror(errno));\n      goto EXIT2;\n      }\n    }\n  while (fgets(buffer, sizeof(buffer), fl) != NULL)\n    {\n    int frc;\n    char *end = buffer + (int)strlen(buffer);\n    while (end > buffer && isspace((unsigned char)(end[-1]))) end--;\n    *end = 0;\n    if (*buffer != 0)\n      {\n      frc = grep_or_recurse(buffer, dee_action == dee_RECURSE, FALSE);\n      if (frc > 1) rc = frc;\n        else if (frc == 0 && rc == 1) rc = 0;\n      }\n    }\n  if (fl != stdin) fclose(fl);\n  }\n\n/* After handling file-list, work through remaining arguments. Pass in the fact\nthat there is only one argument at top level - this suppresses the file name if\nthe argument is not a directory and filenames are not otherwise forced. */\n\nonly_one_at_top = i == argc - 1 && file_lists == NULL;\n\nfor (; i < argc; i++)\n  {\n  int frc = grep_or_recurse(argv[i], dee_action == dee_RECURSE,\n    only_one_at_top);\n  if (frc > 1) rc = frc;\n    else if (frc == 0 && rc == 1) rc = 0;\n  }\n\n/* Show the total number of matches if requested, but not if only one file's\ncount was printed. */\n\nif (show_total_count && counts_printed != 1 && filenames != FN_NOMATCH_ONLY)\n  {\n  if (counts_printed != 0 && filenames >= FN_DEFAULT)\n    fprintf(stdout, \"TOTAL:\");\n  fprintf(stdout, \"%lu\" STDOUT_NL, total_count);\n  }\n\nEXIT:\n#ifdef SUPPORT_PCRE2GREP_JIT\npcre2_jit_free_unused_memory(NULL);\nif (jit_stack != NULL) pcre2_jit_stack_free(jit_stack);\n#endif\n\nfree(main_buffer);\nif (character_tables != NULL) pcre2_maketables_free(NULL, character_tables);\n\npcre2_compile_context_free(compile_context);\npcre2_match_context_free(match_context);\npcre2_match_data_free(match_data_pair[0]);\npcre2_match_data_free(match_data_pair[1]);\n\nfree_pattern_chain(patterns);\nfree_pattern_chain(include_patterns);\nfree_pattern_chain(include_dir_patterns);\nfree_pattern_chain(exclude_patterns);\nfree_pattern_chain(exclude_dir_patterns);\n\nfree_file_chain(exclude_from);\nfree_file_chain(include_from);\nfree_file_chain(pattern_files);\nfree_file_chain(file_lists);\n\nwhile (only_matching != NULL)\n  {\n  omstr *this = only_matching;\n  only_matching = this->next;\n  free(this);\n  }\n\npcre2grep_exit(rc);\n\nEXIT2:\nrc = 2;\ngoto EXIT;\n}\n\n/* End of pcre2grep */\n"
  },
  {
    "path": "src/pcre2posix.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module is a wrapper that provides a POSIX API to the underlying PCRE2\nfunctions. The functions are called pcre2_regcomp(), pcre2_regexec(), etc.\npcre2posix.h defines the POSIX names as macros for the corresponding pcre2_xxx\nfunctions, so any program that includes it and uses the POSIX names will call\nthe PCRE2 implementations instead. */\n\n\n/* This module doesn't use pcre2_internal.h, because the pcre2posix dynamic\nlibrary has an \"internal\" view of some macros, but is an \"external\" client of\nthe pcre2-8 dynamic library. This is unusual, and justifies a (rare) direct\ninclusion of config.h. */\n\n#if defined HAVE_CONFIG_H && !defined PCRE2_CONFIG_H_IDEMPOTENT_GUARD\n#define PCRE2_CONFIG_H_IDEMPOTENT_GUARD\n#include \"config.h\"\n#endif\n\n\n\n/* Ensure that the PCRE2POSIX_EXP_xxx macros are set appropriately for\ncompiling these functions. This must come before including pcre2posix.h, where\nthey are set for an application (using these functions) if they have not\npreviously been set. */\n\n#if defined __cplusplus\n#error This project uses C99. C++ is not supported.\n#endif\n\n#ifndef PCRE2POSIX_EXP_DECL\n#  if defined(_WIN32) && defined(PCRE2POSIX_SHARED)\n#    define PCRE2POSIX_EXP_DECL  extern __declspec(dllexport)\n#  else\n#    define PCRE2POSIX_EXP_DECL  extern PCRE2_EXPORT\n#  endif\n#endif\n\n#ifndef PCRE2POSIX_EXP_DEFN\n#  if defined(_WIN32) && defined(PCRE2POSIX_SHARED)\n#    define PCRE2POSIX_EXP_DEFN  extern __declspec(dllexport)\n#  else\n#    define PCRE2POSIX_EXP_DEFN  extern PCRE2_EXPORT\n#  endif\n#endif\n\n/* Older versions of MSVC lack snprintf(). This define allows for\nwarning/error-free compilation and testing with MSVC compilers back to at least\nMSVC 10/2010. Except for VC6 (which is missing some fundamentals and fails). */\n\n#if defined(_MSC_VER) && (_MSC_VER < 1900)\n#define snprintf _snprintf\n#endif\n\n\n/* Compile-time error numbers start at this value. It should probably never be\nchanged. This #define is a copy of the one in pcre2_internal.h. */\n\n#define COMPILE_ERROR_BASE 100\n\n\n/* Standard C headers */\n\n#include <ctype.h>\n#include <limits.h>\n#include <stddef.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n/* PCRE2 headers */\n\n#include \"pcre2.h\"\n#include \"pcre2posix.h\"\n#include \"pcre2_util.h\"\n\n/* For pcre2_tables.c */\n#define PCRE2_PCRE2POSIX\n/* For pcre2_tables.c */\n#define PRIV(name) name\n\n#include \"pcre2_tables.c\"\n\n/* Table to translate PCRE2 compile time error codes into POSIX error codes.\nOnly a few PCRE2 errors with a value greater than 23 turn into special POSIX\ncodes: most go to REG_BADPAT. The second table lists, in pairs, those that\ndon't, even though some of them cannot currently be provoked from within the\nPOSIX wrapper. */\n\nstatic const int eint1[] = {\n  0,           /* No error */\n  REG_EESCAPE, /* \\ at end of pattern */\n  REG_EESCAPE, /* \\c at end of pattern */\n  REG_EESCAPE, /* unrecognized character follows \\ */\n  REG_BADBR,   /* numbers out of order in {} quantifier */\n  /* 5 */\n  REG_BADBR,   /* number too big in {} quantifier */\n  REG_EBRACK,  /* missing terminating ] for character class */\n  REG_ECTYPE,  /* invalid escape sequence in character class */\n  REG_ERANGE,  /* range out of order in character class */\n  REG_BADRPT,  /* nothing to repeat */\n  /* 10 */\n  REG_ASSERT,  /* internal error: unexpected repeat */\n  REG_BADPAT,  /* unrecognized character after (? or (?- */\n  REG_BADPAT,  /* POSIX named classes are supported only within a class */\n  REG_BADPAT,  /* POSIX collating elements are not supported */\n  REG_EPAREN,  /* missing ) */\n  /* 15 */\n  REG_ESUBREG, /* reference to non-existent subpattern */\n  REG_INVARG,  /* pattern passed as NULL */\n  REG_INVARG,  /* unknown compile-time option bit(s) */\n  REG_EPAREN,  /* missing ) after (?# comment */\n  REG_ESIZE,   /* parentheses nested too deeply */\n  /* 20 */\n  REG_ESIZE,   /* regular expression too large */\n  REG_ESPACE,  /* failed to get memory */\n  REG_EPAREN,  /* unmatched closing parenthesis */\n  REG_ASSERT   /* internal error: code overflow */\n  };\n\nstatic const int eint2[] = {\n  30, REG_ECTYPE,  /* unknown POSIX class name */\n  32, REG_INVARG,  /* this version of PCRE2 does not have Unicode support */\n  37, REG_EESCAPE, /* PCRE2 does not support \\L, \\l, \\N{name}, \\U, or \\u */\n  56, REG_INVARG,  /* internal error: unknown newline setting */\n  92, REG_INVARG,  /* invalid option bits with PCRE2_LITERAL */\n  98, REG_EESCAPE, /* missing digit after \\0 in NO_BS0 mode */\n  99, REG_EESCAPE, /* \\K in lookaround */\n 102, REG_EESCAPE  /* \\ddd octal > \\377 in PYTHON_OCTAL mode */\n};\n\n/* Table of texts corresponding to POSIX error codes */\n\nstatic const char *const pstring[] = {\n  \"\",                                /* Dummy for value 0 */\n  \"internal error\",                  /* REG_ASSERT */\n  \"invalid repeat counts in {}\",     /* BADBR      */\n  \"pattern error\",                   /* BADPAT     */\n  \"? * + invalid\",                   /* BADRPT     */\n  \"unbalanced {}\",                   /* EBRACE     */\n  \"unbalanced []\",                   /* EBRACK     */\n  \"collation error - not relevant\",  /* ECOLLATE   */\n  \"bad class\",                       /* ECTYPE     */\n  \"bad escape sequence\",             /* EESCAPE    */\n  \"empty expression\",                /* EMPTY      */\n  \"unbalanced ()\",                   /* EPAREN     */\n  \"bad range inside []\",             /* ERANGE     */\n  \"expression too big\",              /* ESIZE      */\n  \"failed to get memory\",            /* ESPACE     */\n  \"bad back reference\",              /* ESUBREG    */\n  \"bad argument\",                    /* INVARG     */\n  \"match failed\"                     /* NOMATCH    */\n};\n\n/*************************************************\n*          Translate error code to string        *\n*************************************************/\n\nPCRE2POSIX_EXP_DEFN size_t PCRE2_CALL_CONVENTION\npcre2_regerror(int errcode, const regex_t *preg, char *errbuf,\n  size_t errbuf_size)\n{\nconst char *message;\nchar offset_buf[11+12]; /* big enough for \" at offset -2147483648\" */\nint snprintf_rc, have_offset = 0;\nPCRE2_SIZE i;\n\nmessage = (errcode <= 0 || errcode >= (int)(sizeof(pstring)/sizeof(char *)))?\n  \"unknown error code\" : pstring[errcode];\n\nif (preg != NULL && preg->re_erroffset != (size_t)(-1)\n    /* LCOV_EXCL_START - snprintf failures here are essentially unreachable */\n    && (snprintf_rc = snprintf(offset_buf, sizeof(offset_buf), \" at offset %d\",\n                               (int)preg->re_erroffset)) > 0\n    && snprintf_rc < (int)sizeof(offset_buf))\n    /* LCOV_EXCL_STOP */\n  {\n  have_offset = 1;\n  offset_buf[sizeof(offset_buf) - 1] = 0; /* Paranoia for very old snprintf */\n  }\n\nfor (i = 0; *message != 0; i++, message++)\n  if (i + 1 < errbuf_size) errbuf[i] = *message;\n\nif (have_offset)\n  {\n  for (message = offset_buf; *message != 0; i++, message++)\n    if (i + 1 < errbuf_size) errbuf[i] = *message;\n  }\n\n#if defined EBCDIC && 'a' != 0x81\n/* If compiling for EBCDIC, but the compiler's string literals are not EBCDIC,\nthen we are in the \"force EBCDIC 1047\" mode. I have chosen to add a few lines\nhere to translate the error strings on the fly, rather than require the string\nliterals above to be written out arduously using the \"STR_XYZ\" macros. */\nfor (PCRE2_SIZE j = 0; j < i && j < errbuf_size; ++j)\n  errbuf[j] = PRIV(ascii_to_ebcdic_1047)[(uint8_t)errbuf[j]];\n#endif\n\n/* Terminate message, even if truncated. */\n\nif (errbuf_size > 0)\n  errbuf[(i < errbuf_size)? i : errbuf_size - 1] = 0;\ni++;\n\nreturn (int)i;\n}\n\n\n\n/*************************************************\n*           Free store held by a regex           *\n*************************************************/\n\nPCRE2POSIX_EXP_DEFN void PCRE2_CALL_CONVENTION\npcre2_regfree(regex_t *preg)\n{\npcre2_match_data_free(preg->re_match_data);\npcre2_code_free(preg->re_pcre2_code);\n}\n\n\n\n/*************************************************\n*            Compile a regular expression        *\n*************************************************/\n\n/*\nArguments:\n  preg        points to a structure for recording the compiled expression\n  pattern     the pattern to compile\n  cflags      compilation flags\n\nReturns:      0 on success\n              various non-zero codes on failure\n*/\n\nPCRE2POSIX_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_regcomp(regex_t *preg, const char *pattern, int cflags)\n{\nPCRE2_SIZE erroffset;\nPCRE2_SIZE patlen;\nint errorcode;\nint options = 0;\nint re_nsub = 0;\n\npreg->re_match_data = NULL;\npreg->re_pcre2_code = NULL;\n\npatlen = ((cflags & REG_PEND) != 0)? (PCRE2_SIZE)(preg->re_endp - pattern) :\n  PCRE2_ZERO_TERMINATED;\n\nif ((cflags & REG_ICASE) != 0)    options |= PCRE2_CASELESS;\nif ((cflags & REG_NEWLINE) != 0)  options |= PCRE2_MULTILINE;\nif ((cflags & REG_DOTALL) != 0)   options |= PCRE2_DOTALL;\nif ((cflags & REG_NOSPEC) != 0)   options |= PCRE2_LITERAL;\nif ((cflags & REG_UTF) != 0)      options |= PCRE2_UTF;\nif ((cflags & REG_UCP) != 0)      options |= PCRE2_UCP;\nif ((cflags & REG_UNGREEDY) != 0) options |= PCRE2_UNGREEDY;\n\npreg->re_cflags = cflags;\npreg->re_pcre2_code = pcre2_compile((PCRE2_SPTR)pattern, patlen, options,\n  &errorcode, &erroffset, NULL);\npreg->re_erroffset = erroffset;\n\nif (preg->re_pcre2_code == NULL)\n  {\n  unsigned int i;\n\n  /* A negative value is a UTF error; otherwise all error codes are greater\n  than COMPILE_ERROR_BASE, but check, just in case. */\n\n  if (errorcode < COMPILE_ERROR_BASE) return REG_BADPAT;\n  errorcode -= COMPILE_ERROR_BASE;\n\n  if (errorcode < (int)(sizeof(eint1)/sizeof(const int)))\n    return eint1[errorcode];\n  for (i = 0; i < sizeof(eint2)/sizeof(const int); i += 2)\n    if (errorcode == eint2[i]) return eint2[i+1];\n  return REG_BADPAT;\n  }\n\n(void)pcre2_pattern_info((const pcre2_code *)preg->re_pcre2_code,\n  PCRE2_INFO_CAPTURECOUNT, &re_nsub);\npreg->re_nsub = (size_t)re_nsub;\npreg->re_match_data = pcre2_match_data_create(re_nsub + 1, NULL);\npreg->re_erroffset = (size_t)(-1);  /* No meaning after successful compile */\n\nif (preg->re_match_data == NULL)\n  {\n  /* There is no facility for passing a custom allocator to the POSIX API, so\n  our test code cannot force a malloc failure here. If there were an API to\n  customize the default (global) PCRE2 allocator, we could test it. Since the\n  code is nonetheless reachable, I prefer not to exclude it from coverage\n  reporting. */\n  pcre2_code_free(preg->re_pcre2_code);\n  preg->re_pcre2_code = NULL;\n  return REG_ESPACE;\n  }\n\nreturn 0;\n}\n\n\n\n/*************************************************\n*              Match a regular expression        *\n*************************************************/\n\n/* A suitable match_data block, large enough to hold all possible captures, was\nobtained when the pattern was compiled, to save having to allocate and free it\nfor each match. If REG_NOSUB was specified at compile time, the nmatch and\npmatch arguments are ignored, and the only result is yes/no/error. */\n\nPCRE2POSIX_EXP_DEFN int PCRE2_CALL_CONVENTION\npcre2_regexec(const regex_t *preg, const char *string, size_t nmatch,\n  regmatch_t pmatch[], int eflags)\n{\nint rc, so, eo;\nint options = 0;\npcre2_match_data *md = (pcre2_match_data *)preg->re_match_data;\n\nif (string == NULL) return REG_INVARG;\n\nif ((eflags & REG_NOTBOL) != 0) options |= PCRE2_NOTBOL;\nif ((eflags & REG_NOTEOL) != 0) options |= PCRE2_NOTEOL;\nif ((eflags & REG_NOTEMPTY) != 0) options |= PCRE2_NOTEMPTY;\n\n/* When REG_NOSUB was specified, or if no vector has been passed in which to\nput captured strings, ensure that nmatch is zero. This will stop any attempt to\nwrite to pmatch. */\n\nif ((preg->re_cflags & REG_NOSUB) != 0 || pmatch == NULL) nmatch = 0;\n\n/* REG_STARTEND is a BSD extension, to allow for non-NUL-terminated strings.\nThe man page from OS X says \"REG_STARTEND affects only the location of the\nstring, not how it is matched\". That is why the \"so\" value is used to bump the\nstart location rather than being passed as a PCRE2 \"starting offset\". */\n\nif ((eflags & REG_STARTEND) != 0)\n  {\n  if (pmatch == NULL) return REG_INVARG;\n  so = pmatch[0].rm_so;\n  eo = pmatch[0].rm_eo;\n  }\nelse\n  {\n  so = 0;\n  eo = (int)strlen(string);\n  }\n\nrc = pcre2_match((const pcre2_code *)preg->re_pcre2_code,\n  (PCRE2_SPTR)string + so, (eo - so), 0, options, md, NULL);\n\n/* Successful match */\n\nif (rc >= 0)\n  {\n  size_t i;\n  PCRE2_SIZE *ovector = pcre2_get_ovector_pointer(md);\n  if ((size_t)rc > nmatch) rc = (int)nmatch;\n  for (i = 0; i < (size_t)rc; i++)\n    {\n    pmatch[i].rm_so = (ovector[i*2] == PCRE2_UNSET)? -1 :\n      (int)(ovector[i*2] + so);\n    pmatch[i].rm_eo = (ovector[i*2+1] == PCRE2_UNSET)? -1 :\n      (int)(ovector[i*2+1] + so);\n    }\n  for (; i < nmatch; i++) pmatch[i].rm_so = pmatch[i].rm_eo = -1;\n  return 0;\n  }\n\n/* Unsuccessful match */\n\nif (rc <= PCRE2_ERROR_UTF8_ERR1 && rc >= PCRE2_ERROR_UTF8_ERR21)\n  return REG_INVARG;\n\n/* Most of these are events that won't occur during testing, so exclude them\nfrom coverage. */\n\nswitch(rc)\n  {\n  case PCRE2_ERROR_HEAPLIMIT: return REG_ESPACE;\n  case PCRE2_ERROR_NOMATCH: return REG_NOMATCH;\n\n  /* LCOV_EXCL_START */\n  case PCRE2_ERROR_BADMODE: return REG_INVARG;\n  case PCRE2_ERROR_BADMAGIC: return REG_INVARG;\n  case PCRE2_ERROR_BADOPTION: return REG_INVARG;\n  case PCRE2_ERROR_BADUTFOFFSET: return REG_INVARG;\n  case PCRE2_ERROR_MATCHLIMIT: return REG_ESPACE;\n  case PCRE2_ERROR_NOMEMORY: return REG_ESPACE;\n  case PCRE2_ERROR_NULL: return REG_INVARG;\n  default: return REG_ASSERT;\n  /* LCOV_EXCL_STOP */\n  }\n}\n\n/* End of pcre2posix.c */\n"
  },
  {
    "path": "src/pcre2posix.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE2 is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language. This is\nthe public header file to be #included by applications that call PCRE2 via the\nPOSIX wrapper interface.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2023 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n#ifndef PCRE2POSIX_H_IDEMPOTENT_GUARD\n#define PCRE2POSIX_H_IDEMPOTENT_GUARD\n\n/* Have to include stdlib.h in order to ensure that size_t is defined. */\n\n#include <stdlib.h>\n\n/* Allow for C++ users */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Options, mostly defined by POSIX, but with some extras. */\n\n#define REG_ICASE     0x0001  /* Maps to PCRE2_CASELESS */\n#define REG_NEWLINE   0x0002  /* Maps to PCRE2_MULTILINE */\n#define REG_NOTBOL    0x0004  /* Maps to PCRE2_NOTBOL */\n#define REG_NOTEOL    0x0008  /* Maps to PCRE2_NOTEOL */\n#define REG_DOTALL    0x0010  /* NOT defined by POSIX; maps to PCRE2_DOTALL */\n#define REG_NOSUB     0x0020  /* Do not report what was matched */\n#define REG_UTF       0x0040  /* NOT defined by POSIX; maps to PCRE2_UTF */\n#define REG_STARTEND  0x0080  /* BSD feature: pass subject string by so,eo */\n#define REG_NOTEMPTY  0x0100  /* NOT defined by POSIX; maps to PCRE2_NOTEMPTY */\n#define REG_UNGREEDY  0x0200  /* NOT defined by POSIX; maps to PCRE2_UNGREEDY */\n#define REG_UCP       0x0400  /* NOT defined by POSIX; maps to PCRE2_UCP */\n#define REG_PEND      0x0800  /* GNU feature: pass end pattern by re_endp */\n#define REG_NOSPEC    0x1000  /* Maps to PCRE2_LITERAL */\n\n/* This is not used by PCRE2, but by defining it we make it easier\nto slot PCRE2 into existing programs that make POSIX calls. */\n\n#define REG_EXTENDED  0\n\n/* Error values. Not all these are relevant or used by the wrapper. */\n\nenum {\n  REG_ASSERT = 1,  /* internal error ? */\n  REG_BADBR,       /* invalid repeat counts in {} */\n  REG_BADPAT,      /* pattern error */\n  REG_BADRPT,      /* ? * + invalid */\n  REG_EBRACE,      /* unbalanced {} */\n  REG_EBRACK,      /* unbalanced [] */\n  REG_ECOLLATE,    /* collation error - not relevant */\n  REG_ECTYPE,      /* bad class */\n  REG_EESCAPE,     /* bad escape sequence */\n  REG_EMPTY,       /* empty expression */\n  REG_EPAREN,      /* unbalanced () */\n  REG_ERANGE,      /* bad range inside [] */\n  REG_ESIZE,       /* expression too big */\n  REG_ESPACE,      /* failed to get memory */\n  REG_ESUBREG,     /* bad back reference */\n  REG_INVARG,      /* bad argument */\n  REG_NOMATCH      /* match failed */\n};\n\n\n/* The structure representing a compiled regular expression. It is also used\nfor passing the pattern end pointer when REG_PEND is set. */\n\ntypedef struct {\n  void *re_pcre2_code;\n  void *re_match_data;\n  const char *re_endp;\n  size_t re_nsub;\n  size_t re_erroffset;\n  int re_cflags;\n} regex_t;\n\n/* The structure in which a captured offset is returned. */\n\ntypedef int regoff_t;\n\ntypedef struct {\n  regoff_t rm_so;\n  regoff_t rm_eo;\n} regmatch_t;\n\n/* When an application links to a PCRE2 DLL in Windows, the symbols that are\nimported have to be identified as such. When building PCRE2, the appropriate\nexport settings are needed, and are set in pcre2posix.c before including this\nfile. So, we don't change existing definitions of PCRE2POSIX_EXP_DECL.\n\nBy default, we use the standard \"extern\" declarations. */\n\n#ifndef PCRE2POSIX_EXP_DECL\n#  if defined(_WIN32) && defined(PCRE2POSIX_SHARED)\n#    define PCRE2POSIX_EXP_DECL  extern __declspec(dllimport)\n#  elif defined __cplusplus\n#    define PCRE2POSIX_EXP_DECL  extern \"C\"\n#  else\n#    define PCRE2POSIX_EXP_DECL  extern\n#  endif\n#endif\n\n/* When compiling with the MSVC compiler, it is sometimes necessary to include\na \"calling convention\" before exported function names. For example:\n\n  void __cdecl function(....)\n\nmight be needed. In order to make this easy, all the exported functions have\nPCRE2_CALL_CONVENTION just before their names.\n\nPCRE2 normally uses the platform's standard calling convention, so this should\nnot be set unless you know you need it. */\n\n#ifndef PCRE2_CALL_CONVENTION\n#define PCRE2_CALL_CONVENTION\n#endif\n\n/* The functions. The actual code is in functions with pcre2_xxx names for\nuniqueness. POSIX names are provided as macros for API compatibility with POSIX\nregex functions. It's done this way to ensure to they are always linked from\nthe PCRE2 library and not by accident from elsewhere (regex_t differs in size\nelsewhere). */\n\nPCRE2POSIX_EXP_DECL int PCRE2_CALL_CONVENTION pcre2_regcomp(regex_t *, const char *, int);\nPCRE2POSIX_EXP_DECL int PCRE2_CALL_CONVENTION pcre2_regexec(const regex_t *, const char *, size_t,\n                     regmatch_t *, int);\nPCRE2POSIX_EXP_DECL size_t PCRE2_CALL_CONVENTION pcre2_regerror(int, const regex_t *, char *, size_t);\nPCRE2POSIX_EXP_DECL void PCRE2_CALL_CONVENTION pcre2_regfree(regex_t *);\n\n#define regcomp  pcre2_regcomp\n#define regexec  pcre2_regexec\n#define regerror pcre2_regerror\n#define regfree  pcre2_regfree\n\n/* Debian had a patch that used different names. These are now here to save\nthem having to maintain their own patch, but are not documented by PCRE2. */\n\n#define PCRE2regcomp  pcre2_regcomp\n#define PCRE2regexec  pcre2_regexec\n#define PCRE2regerror pcre2_regerror\n#define PCRE2regfree  pcre2_regfree\n\n#ifdef __cplusplus\n}   /* extern \"C\" */\n#endif\n\n#endif /* PCRE2POSIX_H_IDEMPOTENT_GUARD */\n\n/* End of pcre2posix.h */\n"
  },
  {
    "path": "src/pcre2posix_test.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2023 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This program tests the POSIX wrapper to the PCRE2 regular expression library.\nThe main PCRE2 test program is pcre2test, which also tests these function\ncalls. This little program is needed to test the case where the client includes\npcre2posix.h but not pcre2.h, mainly to make sure that it builds successfully.\nHowever, the code is written as a flexible test program to which extra tests\ncan be added.\n\nCompile with -lpcre2-posix -lpcre2-8\n\nIf run with no options, there is no output on success, and the return code is\nzero. If any test fails there is output to stderr, and the return code is 1.\n\nFor testing purposes, the \"-v\" option causes verification output to be written\nto stdout. */\n\n\n#include <stdio.h>\n#include <string.h>\n#include <pcre2posix.h>\n\n#define CAPCOUNT 5               /* Number of captures supported */\n#define PRINTF if (v) printf     /* Shorthand for testing output */\n\n/* This vector contains compiler flags for each pattern that is tested. */\n\nstatic int cflags[] = {\n  0,           /* Test 0 */\n  REG_ICASE,   /* Test 1 */\n  0,           /* Test 2 */\n  REG_NEWLINE, /* Test 3 */\n  0            /* Test 4 */\n};\n\n/* This vector contains match flags for each pattern that is tested. */\n\nstatic int mflags[] = {\n  0,           /* Test 0 */\n  0,           /* Test 1 */\n  0,           /* Test 2 */\n  REG_NOTBOL,  /* Test 3 */\n  0            /* Test 4 */\n};\n\n/* Automate the number of patterns */\n\n#define count (int)(sizeof(cflags)/sizeof(int))\n\n/* The data for each pattern consists of a pattern string, followed by any\nnumber of subject strings, terminated by NULL. Some tests share data, but use\ndifferent flags. */\n\nstatic const char *data0_1[] = { \"posix\", \"lower posix\", \"upper POSIX\", NULL };\nstatic const char *data2_3[] = { \"(*LF)^(cat|dog)\", \"catastrophic\\ncataclysm\",\n  \"dogfight\", \"no animals\", NULL };\nstatic const char *data4[] = { \"*badpattern\", NULL };\n\n/* Index the data strings */\n\nstatic char **data[] = {\n  (char **)(&data0_1),\n  (char **)(&data0_1),\n  (char **)(&data2_3),\n  (char **)(&data2_3),\n  (char **)(&data4)\n};\n\n/* The expected results for each pattern consist of a compiler return code,\noptionally followed, for each subject string, by a match return code and, for a\nsuccessful match, up to CAPCOUNT pairs of returned match data. */\n\nstatic int results0[] = {\n  0,             /* Compiler rc */\n  0, 6, 11,      /* 1st match */\n  REG_NOMATCH    /* 2nd match */\n};\n\nstatic int results1[] = {\n  0,             /* Compiler rc */\n  0, 6, 11,      /* 1st match */\n  0, 6, 11       /* 2nd match */\n};\n\nstatic int results2[] = {\n  0,             /* Compiler rc */\n  0, 0, 3, 0, 3, /* 1st match */\n  0, 0, 3, 0, 3, /* 2nd match */\n  REG_NOMATCH    /* 3rd match */\n};\n\nstatic int results3[] = {\n  0,                 /* Compiler rc */\n  0, 13, 16, 13, 16, /* 1st match */\n  REG_NOMATCH,       /* 2nd match */\n  REG_NOMATCH        /* 3rd match */\n};\n\nstatic int results4[] = {\n  REG_BADRPT         /* Compiler rc */\n};\n\n/* Index the result vectors */\n\nstatic int *results[] = {\n  (int *)(&results0),\n  (int *)(&results1),\n  (int *)(&results2),\n  (int *)(&results3),\n  (int *)(&results4)\n};\n\n/* And here is the program */\n\nint main(int argc, char **argv)\n{\nregex_t re;\nregmatch_t match[CAPCOUNT];\nint v = argc > 1 && strcmp(argv[1], \"-v\") == 0;\n\nPRINTF(\"Test of pcre2posix.h without pcre2.h\\n\");\n\nfor (int i = 0; i < count; i++)\n  {\n  char *pattern = data[i][0];\n  char **subjects = data[i] + 1;\n  int *rd = results[i];\n  int rc = regcomp(&re, pattern, cflags[i]);\n\n  PRINTF(\"Pattern: %s flags=0x%02x\\n\", pattern, cflags[i]);\n\n  if (rc != *rd)\n    {\n    fprintf(stderr, \"Unexpected compile error %d (expected %d)\\n\", rc, *rd);\n    fprintf(stderr, \"Pattern is: %s\\n\", pattern);\n    return 1;\n    }\n\n  if (rc != 0)\n    {\n    char buffer[256];\n    (void)regerror(rc, &re, buffer, sizeof(buffer));\n    PRINTF(\"Compile error %d: %s (expected)\\n\", rc, buffer);\n    continue;\n    }\n\n  for (; *subjects != NULL; subjects++)\n    {\n    rc = regexec(&re, *subjects, CAPCOUNT, match, mflags[i]);\n\n    PRINTF(\"Subject: %s\\n\", *subjects);\n    PRINTF(\"Return:  %d\", rc);\n\n    if (rc != *(++rd))\n      {\n      PRINTF(\"\\n\");\n      fprintf(stderr, \"Unexpected match error %d (expected %d)\\n\", rc, *rd);\n      fprintf(stderr, \"Pattern is: %s\\n\", pattern);\n      fprintf(stderr, \"Subject is: %s\\n\", *subjects);\n      return 1;\n      }\n\n    if (rc == 0)\n      {\n      for (int j = 0; j < CAPCOUNT; j++)\n        {\n        regmatch_t *m = match + j;\n        if (m->rm_so < 0) continue;\n        if (m->rm_so != *(++rd) || m->rm_eo != *(++rd))\n          {\n          PRINTF(\"\\n\");\n          fprintf(stderr, \"Mismatched results for successful match\\n\");\n          fprintf(stderr, \"Pattern is: %s\\n\", pattern);\n          fprintf(stderr, \"Subject is: %s\\n\", *subjects);\n          fprintf(stderr, \"Result %d: expected %d %d received %d %d\\n\",\n            j, rd[-1], rd[0], m->rm_so, m->rm_eo);\n          return 1;\n          }\n        PRINTF(\" (%d %d %d)\", j, m->rm_so, m->rm_eo);\n        }\n      }\n\n    else\n      {\n      char buffer[256];\n      (void)regerror(rc, &re, buffer, sizeof(buffer));\n      PRINTF(\": %s (expected)\", buffer);\n      }\n\n    PRINTF(\"\\n\");\n    }\n\n  regfree(&re);\n  }\n\nPRINTF(\"End of test\\n\");\nreturn 0;\n}\n\n/* End of pcre2posix_test.c */\n"
  },
  {
    "path": "src/pcre2test.c",
    "content": "/*************************************************\n*             PCRE2 testing program              *\n*************************************************/\n\n/* PCRE2 is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language. In 2014\nthe API was completely revised and '2' was added to the name, because the old\nAPI, which had lasted for 16 years, could not accommodate new requirements. At\nthe same time, this testing program was re-designed because its original\nhacked-up (non-) design had also run out of steam.\n\n                       Written by Philip Hazel\n     Original code Copyright (c) 1997-2012 University of Cambridge\n    Rewritten code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This program supports testing of the 8-bit, 16-bit, and 32-bit PCRE2\nlibraries in a single program, though its input and output are always 8-bit.\nIt is different from modules such as pcre2_compile.c in the library itself,\nwhich are compiled separately for each code unit width. If two widths are\nenabled, for example, pcre2_compile.c is compiled twice. In contrast,\npcre2test.c is compiled only once, and linked with all the enabled libraries.\nTherefore, it must not make use of any of the macros from pcre2.h or\npcre2_internal.h that depend on PCRE2_CODE_UNIT_WIDTH. It does, however, make\nuse of SUPPORT_PCRE2_8, SUPPORT_PCRE2_16, and SUPPORT_PCRE2_32, to ensure that\nit references only the enabled library functions. */\n\n\n#if defined HAVE_CONFIG_H && !defined PCRE2_CONFIG_H_IDEMPOTENT_GUARD\n#define PCRE2_CONFIG_H_IDEMPOTENT_GUARD\n#include \"config.h\"\n#endif\n\n\n\n#include <ctype.h>\n#include <stdio.h>\n#include <string.h>\n#include <stdarg.h>\n#include <stdlib.h>\n#include <time.h>\n#include <locale.h>\n#include <errno.h>\n\n#if defined NATIVE_ZOS\n#include \"pcrzoscs.h\"\n/* That header is not included in the main PCRE2 distribution because other\napparatus is needed to compile pcre2test for z/OS. The header can be found in\nthe special z/OS distribution, which is available from www.zaconsultants.net or\nfrom www.cbttape.org. */\n#endif\n\n#ifdef HAVE_UNISTD_H\n#include <unistd.h>\n#endif\n\n/* Debugging code enabler */\n\n/* #define DEBUG_SHOW_MALLOC_ADDRESSES */\n\n/* Both libreadline and libedit are optionally supported */\n#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)\n#if defined(SUPPORT_LIBREADLINE)\n#include <readline/readline.h>\n#include <readline/history.h>\n#else\n#if defined(HAVE_EDITLINE_READLINE_H)\n#include <editline/readline.h>\n#elif defined(HAVE_EDIT_READLINE_READLINE_H)\n#include <edit/readline/readline.h>\n#else\n#include <readline.h>\n/* GNU readline defines this macro but libedit doesn't, if that ever changes\nthis needs to be updated or the build could break */\n#ifdef RL_VERSION_MAJOR\n#include <history.h>\n#endif\n#endif\n#endif\n#endif\n\n/* Put the test for interactive input into a macro so that it can be changed if\nrequired for different environments. */\n\n#define INTERACTIVE(f) isatty(fileno(f))\n\n\n/* ---------------------- System-specific definitions ---------------------- */\n\n/* A number of things vary for Windows builds. Originally, pcretest opened its\ninput and output without \"b\"; then I was told that \"b\" was needed in some\nenvironments, so it was added for release 5.0 to both the input and output. (It\nmakes no difference on Unix-like systems.) Later I was told that it is wrong\nfor the input on Windows. I've now abstracted the modes into macros that are\nset here, to make it easier to fiddle with them, and removed \"b\" from the input\nmode under Windows. The BINARY versions are used when saving/restoring compiled\npatterns. */\n\n#if defined(_WIN32) || defined(WIN32)\n#include <io.h>                /* For _setmode() */\n#include <fcntl.h>             /* For _O_BINARY */\n#define INPUT_MODE          \"r\"\n#define OUTPUT_MODE         \"wb\"\n#define BINARY_INPUT_MODE   \"rb\"\n#define BINARY_OUTPUT_MODE  \"wb\"\n\n#ifndef isatty\n#define isatty _isatty         /* This is what Windows calls them, I'm told, */\n#endif                         /* though in some environments they seem to   */\n                               /* be already defined, hence the #ifndefs.    */\n#ifndef fileno\n#define fileno _fileno\n#endif\n\n/* A user sent this fix for Borland Builder 5 under Windows. */\n\n#ifdef __BORLANDC__\n#define _setmode(handle, mode) setmode(handle, mode)\n#endif\n\n/* Not Windows */\n\n#else\n#ifdef HAVE_SETRLIMIT\n#include <sys/time.h>          /* These two includes are needed */\n#include <sys/resource.h>      /* for setrlimit(). */\n#endif\n#if defined NATIVE_ZOS         /* z/OS uses non-binary I/O */\n#define INPUT_MODE   \"r\"\n#define OUTPUT_MODE  \"w\"\n#define BINARY_INPUT_MODE   \"rb\"\n#define BINARY_OUTPUT_MODE  \"wb\"\n#else\n#define INPUT_MODE          \"rb\"\n#define OUTPUT_MODE         \"wb\"\n#define BINARY_INPUT_MODE   \"rb\"\n#define BINARY_OUTPUT_MODE  \"wb\"\n#endif\n#endif\n\n/* VMS-specific code was included as suggested by a VMS user [1]. Another VMS\nuser [2] provided alternative code which worked better for him. I have\ncommented out the original, but kept it around just in case. */\n\n#ifdef __VMS\n#include <ssdef.h>\n/* These two includes came from [2]. */\n#include descrip\n#include lib$routines\n/* void vms_setsymbol( char *, char *, int ); Original code from [1]. */\n#endif\n\n/* old VC and older compilers don't support %td or %zu, and even some that\nclaim to be C99 don't support it (hence DISABLE_PERCENT_ZT). */\n\n#if defined(DISABLE_PERCENT_ZT) || (defined(_MSC_VER) && (_MSC_VER < 1800)) || \\\n  (!defined(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)))\n#ifdef _WIN64\n#define PTR_FORM \"lld\"\n#define SIZ_FORM \"llu\"\n#else\n#define PTR_FORM \"ld\"\n#define SIZ_FORM \"lu\"\n#endif\n#else\n#define PTR_FORM \"td\"\n#define SIZ_FORM \"zu\"\n#endif\n\n/* ------------------End of system-specific definitions -------------------- */\n\n/* Glueing macros that are used in several places below. */\n\n#define glue(a,b) a##b\n#define G(a,b) glue(a,b)\n\n#define stringify(x) #x\n#define STR(x) stringify(x)\n\n/* Miscellaneous parameters and manifests */\n\n#ifndef CLOCKS_PER_SEC\n#ifdef CLK_TCK\n#define CLOCKS_PER_SEC CLK_TCK\n#else\n#define CLOCKS_PER_SEC 100\n#endif\n#endif\n\n#define CFORE_UNSET UINT32_MAX    /* Unset value for startend/cfail/cerror fields */\n#define CONVERT_UNSET UINT32_MAX  /* Unset value for convert_type/convert_length fields */\n#define MOD_STR_UNSET UINT8_MAX   /* Sentinel length for unset string options */\n#define DFA_WS_DIMENSION 1000     /* Size of DFA workspace */\n#define DEFAULT_OVECCOUNT 15      /* Default ovector count */\n#define JUNK_OFFSET 0xdeadbeef    /* For initializing ovector */\n#define LOCALESIZE 32             /* Size of locale name */\n#define LOOPREPEAT 500000         /* Default loop count for timing */\n#define MALLOCLISTSIZE 20         /* For remembering mallocs */\n#define PARENS_NEST_DEFAULT 220   /* Default parentheses nest limit */\n#define PATSTACKSIZE 20           /* Pattern stack for save/restore testing */\n#define REPLACE_MODSIZE 100       /* Field for reading 8-bit replacement */\n#define SUBSTITUTE_SUBJECT_MODSIZE 100 /* Field for reading 8-bit subject for substitute */\n#define REPLACE_BUFFSIZE 256      /* Code units for replacement buffer */\n\n/* Default JIT compile options */\n\n#define JIT_DEFAULT (PCRE2_JIT_COMPLETE|\\\n                     PCRE2_JIT_PARTIAL_SOFT|\\\n                     PCRE2_JIT_PARTIAL_HARD)\n\n/* Execution modes */\n\n#define PCRE2TEST_MODE_8   8\n#define PCRE2TEST_MODE_16 16\n#define PCRE2TEST_MODE_32 32\n\n/* Processing returns */\n\nenum { PR_OK, PR_SKIP, PR_ABEND, PR_ENDIF };\n\n/* The macro EBCDIC_IO describes whether pcre2tests takes ASCII or EBCDIC as\nits input files (or terminal input). If the compiler uses ASCII for character\nliterals, then we make pcre2test take ASCII as its input and output. This is\ndifferent to the core PCRE2 library, where we use macros like \"CHAR_A\" for every\nsingle character and string literal used in pattern parsing and matching. It\nwould simply be too arduous to do the same for pcre2test, so we make its\ninput/output format match the compiler's codepage. */\n#if defined(EBCDIC) && 'a' == 0x81\n#define EBCDIC_IO 1\n#else\n#define EBCDIC_IO 0\n#endif\n\n/* The macro PRINTABLE determines whether to print an output character as-is or\nas a hex value when showing compiled patterns. We use it in cases when the\nlocale has not been explicitly changed, so as to get consistent output from\nsystems that differ in their output from isprint() even in the \"C\" locale. */\n\n#if defined(EBCDIC)\n#define PRINTABLE(c) printable(c)\n#else\n#define PRINTABLE(c) ((c) >= 32 && (c) < 127)\n#endif\n\n/* The macro CHAR_OUTPUT is used to output characters in pcre2test's output\nformat. The input character is encoded in PCRE2's native codepage (EBCDIC, if\nenabled), but the output may differ in the case where pcre2test uses ASCII input\nand output. */\n#if defined(EBCDIC) && !EBCDIC_IO\n#define CHAR_OUTPUT(c)      ebcdic_to_ascii(c)\n#define CHAR_OUTPUT_HEX(c)  CHAR_OUTPUT(c)\n#define CHAR_INPUT(c)       ascii_to_ebcdic(c)\n#define CHAR_INPUT_HEX(c)   CHAR_INPUT(c)\n#elif defined(EBCDIC)\n#define CHAR_OUTPUT(c)      (c)\n#define CHAR_OUTPUT_HEX(c)  ebcdic_to_ascii(c)\n#define CHAR_INPUT(c)       (c)\n#define CHAR_INPUT_HEX(c)   ascii_to_ebcdic(c)\n#else\n#define CHAR_OUTPUT(c)      (c)\n#define CHAR_OUTPUT_HEX(c)  CHAR_OUTPUT(c)\n#define CHAR_INPUT(c)       (c)\n#define CHAR_INPUT_HEX(c)   CHAR_INPUT(c)\n#endif\n\n/* We have to include some of the library source files because we need\nto use some of the macros, internal structure definitions, and other internal\nvalues - pcre2test has \"inside information\" compared to an application program\nthat strictly follows the PCRE2 API.\n\nBefore including pcre2_internal.h we define PRIV so that it does not get\ndefined therein. This ensures that PRIV names in the included files do not\nclash with those in the libraries. Also, although pcre2_internal.h does itself\ninclude pcre2.h, we explicitly include it beforehand, along with pcre2posix.h,\nso that the PCRE2_EXP_xxx macros get set appropriately for an application, not\nfor building the library.\n\nSetting PCRE2_CODE_UNIT_WIDTH to zero cuts out all the width-specific settings\nin pcre2.h and pcre2_internal.h. Defining PCRE2_PCRE2TEST cuts out the check in\npcre2_internal.h that ensures PCRE2_CODE_UNIT_WIDTH is 8, 16, or 32 (which it\nneeds to be when compiling one of the libraries). */\n\n#define PRIV(name) name\n#define PCRE2_CODE_UNIT_WIDTH 0\n#define PCRE2_PCRE2TEST\n#include \"pcre2.h\"\n#include \"pcre2posix.h\"\n#include \"pcre2_internal.h\"\n\n/* We need access to some of the data tables that PCRE2 uses. The previous\ndefinition of PCRE2_PCRE2TEST makes some minor changes in the files. The\nprevious definition of PRIV avoids name clashes. */\n\n#include \"pcre2_tables.c\"\n#include \"pcre2_ucd.c\"\n\n/* Forward-declarations for PRINTABLE(), etc. */\n\n#if defined(EBCDIC)\nstatic BOOL printable(uint32_t c);\n#endif\n#if defined(EBCDIC) && !EBCDIC_IO\nstatic void ascii_to_ebcdic_str(uint8_t *buf, size_t len);\nstatic void ebcdic_to_ascii_str(uint8_t *buf, size_t len);\n#endif\n#if defined(EBCDIC)\nstatic uint32_t ascii_to_ebcdic(uint32_t c);\nstatic uint32_t ebcdic_to_ascii(uint32_t c);\n#endif\n\n/* 32-bit integer values in the input are read by strtoul() or strtol(). The\ncheck needed for overflow depends on whether long ints are in fact longer than\nints. They are defined not to be shorter. */\n\n#if ULONG_MAX > UINT32_MAX\n#define U32OVERFLOW(x) (x > UINT32_MAX)\n#else\n#define U32OVERFLOW(x) (x == UINT32_MAX)\n#endif\n\n#if LONG_MAX > INT32_MAX\n#define S32OVERFLOW(x) (x > INT32_MAX || x < INT32_MIN)\n#else\n#define S32OVERFLOW(x) (x == INT32_MAX || x == INT32_MIN)\n#endif\n\n/* When PCRE2_CODE_UNIT_WIDTH is zero, pcre2_internal.h does not include\npcre2_intmodedep.h, which is where mode-dependent macros and structures are\ndefined. We can now include it for each supported code unit width. Because\nPCRE2_CODE_UNIT_WIDTH was defined as zero before including pcre2.h, it will\nhave left PCRE2_SUFFIX defined as a no-op. We must re-define it appropriately\nwhile including these files, and then restore it to a no-op. Because LINK_SIZE\nmay be changed in 16-bit mode and forced to 1 in 32-bit mode, the order of\nthese inclusions should not be changed. */\n\n#undef PCRE2_SUFFIX\n#undef PCRE2_CODE_UNIT_WIDTH\n\n#ifdef   SUPPORT_PCRE2_8\n#define  PCRE2_CODE_UNIT_WIDTH 8\n#define  PCRE2_SUFFIX(a) G(a,8)\n#include \"pcre2_intmodedep.h\"\n#include \"pcre2_printint_inc.h\"\n#undef   PCRE2_CODE_UNIT_WIDTH\n#undef   PCRE2_SUFFIX\n#endif   /* SUPPORT_PCRE2_8 */\n\n#ifdef   SUPPORT_PCRE2_16\n#define  PCRE2_CODE_UNIT_WIDTH 16\n#define  PCRE2_SUFFIX(a) G(a,16)\n#include \"pcre2_intmodedep.h\"\n#include \"pcre2_printint_inc.h\"\n#undef   PCRE2_CODE_UNIT_WIDTH\n#undef   PCRE2_SUFFIX\n#endif   /* SUPPORT_PCRE2_16 */\n\n#ifdef   SUPPORT_PCRE2_32\n#define  PCRE2_CODE_UNIT_WIDTH 32\n#define  PCRE2_SUFFIX(a) G(a,32)\n#include \"pcre2_intmodedep.h\"\n#include \"pcre2_printint_inc.h\"\n#undef   PCRE2_CODE_UNIT_WIDTH\n#undef   PCRE2_SUFFIX\n#endif   /* SUPPORT_PCRE2_32 */\n\n#define PCRE2_CODE_UNIT_WIDTH 0\n#include \"pcre2_intmodedep.h\"  /* Clear out the stale macros */\n#undef PCRE2_CODE_UNIT_WIDTH\n\n#define PCRE2_SUFFIX(a) a\n\n/* We need to be able to check input text for UTF-8 validity, whatever code\nwidths are actually available, because the input to pcre2test is always in\n8-bit code units. So we include the UTF validity checking function for 8-bit\ncode units. */\n\nextern int valid_utf(PCRE2_SPTR8, PCRE2_SIZE, PCRE2_SIZE *);\n\n#define  PCRE2_CODE_UNIT_WIDTH 8\n#undef   PCRE2_SPTR\n#define  PCRE2_SPTR PCRE2_SPTR8\n#include \"pcre2_valid_utf.c\"\n#undef   PCRE2_CODE_UNIT_WIDTH\n#undef   PCRE2_SPTR\n#define  PCRE2_SPTR PCRE2_SUFFIX(PCRE2_SPTR)\n\n/* If we have 8-bit support, default to it; if there is also 16-or 32-bit\nsupport, it can be selected by a command line option. If there is no 8-bit\nsupport, there must be 16-bit or 32-bit support, so default to one of them.\n\nThe contexts just happen to be exactly the same layout on all bit-widths\n(although the contents are very much not the same). For example, the 8-bit\nand 16-bit match contexts have the same fields, all at the same offsets and\nsizes, but the function pointers for the callouts in the 8-bit context are not\nof the same type as in the 16-bit context. When we are parsing the modifier\nbits, it is convenient to be able to uniformly set flags in any of the contexts,\nso for that purpose only we may ignore the differences between the contexts at\ndifferent bit-widths. Choose one arbitrarily (does not need to match the\ntest mode). */\n\n#if defined SUPPORT_PCRE2_8\n#define DEFAULT_TEST_MODE PCRE2TEST_MODE_8\n#define PCRE2_REAL_COMPILE_CONTEXT pcre2_real_compile_context_8\n#define PCRE2_REAL_MATCH_CONTEXT pcre2_real_match_context_8\n\n#elif defined SUPPORT_PCRE2_16\n#define DEFAULT_TEST_MODE PCRE2TEST_MODE_16\n#define PCRE2_REAL_COMPILE_CONTEXT pcre2_real_compile_context_16\n#define PCRE2_REAL_MATCH_CONTEXT pcre2_real_match_context_16\n\n#elif defined SUPPORT_PCRE2_32\n#define DEFAULT_TEST_MODE PCRE2TEST_MODE_32\n#define PCRE2_REAL_COMPILE_CONTEXT pcre2_real_compile_context_32\n#define PCRE2_REAL_MATCH_CONTEXT pcre2_real_match_context_32\n#endif\n\n/* ------------- Structure and table for handling #-commands ------------- */\n\ntypedef struct cmdstruct {\n  const char *name;\n  int  value;\n} cmdstruct;\n\nenum { CMD_ENDIF, CMD_FORBID_UTF, CMD_IF, CMD_LOAD, CMD_LOADTABLES,\n  CMD_NEWLINE_DEFAULT, CMD_PATTERN, CMD_PERLTEST, CMD_POP, CMD_POPCOPY,\n  CMD_SAVE, CMD_SUBJECT, CMD_UNKNOWN };\n\nstatic cmdstruct cmdlist[] = {\n  { \"endif\",           CMD_ENDIF },\n  { \"forbid_utf\",      CMD_FORBID_UTF },\n  { \"if\",              CMD_IF },\n  { \"load\",            CMD_LOAD },\n  { \"loadtables\",      CMD_LOADTABLES },\n  { \"newline_default\", CMD_NEWLINE_DEFAULT },\n  { \"pattern\",         CMD_PATTERN },\n  { \"perltest\",        CMD_PERLTEST },\n  { \"pop\",             CMD_POP },\n  { \"popcopy\",         CMD_POPCOPY },\n  { \"save\",            CMD_SAVE },\n  { \"subject\",         CMD_SUBJECT }};\n\n#define cmdlistcount (sizeof(cmdlist)/sizeof(cmdstruct))\n\n/* ------------- Structures and tables for handling modifiers -------------- */\n\n/* Table of names for newline types. Must be kept in step with the definitions\nof PCRE2_NEWLINE_xx in pcre2.h. */\n\nstatic const char *newlines[] = {\n  \"DEFAULT\", \"CR\", \"LF\", \"CRLF\", \"ANY\", \"ANYCRLF\", \"NUL\" };\n\n/* Structure and table for handling pattern conversion types. */\n\ntypedef struct convertstruct {\n  const char *name;\n  uint32_t option;\n} convertstruct;\n\nstatic convertstruct convertlist[] = {\n  { \"glob\",                   PCRE2_CONVERT_GLOB },\n  { \"glob_no_starstar\",       PCRE2_CONVERT_GLOB_NO_STARSTAR },\n  { \"glob_no_wild_separator\", PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR },\n  { \"posix_basic\",            PCRE2_CONVERT_POSIX_BASIC },\n  { \"posix_extended\",         PCRE2_CONVERT_POSIX_EXTENDED },\n  { \"unset\",                  CONVERT_UNSET }};\n\n#define convertlistcount (sizeof(convertlist)/sizeof(convertstruct))\n\n/* Modifier types and applicability */\n\nenum { MOD_CTC,    /* Applies to a compile context */\n       MOD_CTM,    /* Applies to a match context */\n       MOD_PAT,    /* Applies to a pattern */\n       MOD_PATP,   /* Ditto, OK for Perl test */\n       MOD_DAT,    /* Applies to a data line */\n       MOD_DATP,   /* Ditto, OK for Perl test */\n       MOD_PD,     /* Applies to a pattern or a data line */\n       MOD_PDP,    /* As MOD_PD, OK for Perl test */\n       MOD_PND,    /* As MOD_PD, but not for a default pattern */\n       MOD_PNDP,   /* As MOD_PND, OK for Perl test */\n       MOD_CHR,    /* Is a single character */\n       MOD_CON,    /* Is a \"convert\" type/options list */\n       MOD_CTL,    /* Is a control bit */\n       MOD_BSR,    /* Is a BSR value */\n       MOD_IN2,    /* Is one or two unsigned integers */\n       MOD_INS,    /* Is a signed integer */\n       MOD_INT,    /* Is an unsigned integer */\n       MOD_IND,    /* Is an unsigned integer, but no value => default */\n       MOD_NL,     /* Is a newline value */\n       MOD_NN,     /* Is a number or a name; more than one may occur */\n       MOD_OPT,    /* Is an option bit */\n       MOD_OPTMZ,  /* Is an optimization directive */\n       MOD_SIZ,    /* Is a PCRE2_SIZE value */\n       MOD_STR };  /* Is a string; Pascal-encoded with length in first byte */\n\n/* Control bits. Some apply to compiling, some to matching, but some can be set\neither on a pattern or a data line, so they must all be distinct. There are now\nso many of them that they are split into two fields. */\n\n#define CTL_AFTERTEXT                    0x00000001u\n#define CTL_ALLAFTERTEXT                 0x00000002u\n#define CTL_ALLCAPTURES                  0x00000004u\n#define CTL_ALLUSEDTEXT                  0x00000008u\n#define CTL_ALTGLOBAL                    0x00000010u\n#define CTL_BINCODE                      0x00000020u\n#define CTL_CALLOUT_CAPTURE              0x00000040u\n#define CTL_CALLOUT_INFO                 0x00000080u\n#define CTL_CALLOUT_NONE                 0x00000100u\n#define CTL_DFA                          0x00000200u\n#define CTL_EXPAND                       0x00000400u\n#define CTL_FINDLIMITS                   0x00000800u\n#define CTL_FINDLIMITS_NOHEAP            0x00001000u\n#define CTL_FULLBINCODE                  0x00002000u\n#define CTL_GETALL                       0x00004000u\n#define CTL_GLOBAL                       0x00008000u\n#define CTL_HEXPAT                       0x00010000u  /* Same word as USE_LENGTH */\n#define CTL_INFO                         0x00020000u\n#define CTL_JITFAST                      0x00040000u\n#define CTL_JITVERIFY                    0x00080000u\n#define CTL_MARK                         0x00100000u\n#define CTL_MEMORY                       0x00200000u\n#define CTL_NULLCONTEXT                  0x00400000u\n#define CTL_POSIX                        0x00800000u\n#define CTL_POSIX_NOSUB                  0x01000000u\n#define CTL_PUSH                         0x02000000u  /* These three must be */\n#define CTL_PUSHCOPY                     0x04000000u  /*   all in the same */\n#define CTL_PUSHTABLESCOPY               0x08000000u  /*     word. */\n#define CTL_STARTCHAR                    0x10000000u\n#define CTL_USE_LENGTH                   0x20000000u  /* Same word as HEXPAT */\n#define CTL_UTF8_INPUT                   0x40000000u\n#define CTL_ZERO_TERMINATE               0x80000000u\n\n/* Combinations */\n\n#define CTL_DEBUG            (CTL_FULLBINCODE|CTL_INFO)  /* For setting */\n#define CTL_ANYGLOB          (CTL_ALTGLOBAL|CTL_GLOBAL)\n\n/* Second control word */\n\n#define CTL2_SUBSTITUTE_CALLOUT          0x00000001u\n#define CTL2_SUBSTITUTE_EXTENDED         0x00000002u\n#define CTL2_SUBSTITUTE_LITERAL          0x00000004u\n#define CTL2_SUBSTITUTE_MATCHED          0x00000008u\n#define CTL2_SUBSTITUTE_OVERFLOW_LENGTH  0x00000010u\n#define CTL2_SUBSTITUTE_REPLACEMENT_ONLY 0x00000020u\n#define CTL2_SUBSTITUTE_UNKNOWN_UNSET    0x00000040u\n#define CTL2_SUBSTITUTE_UNSET_EMPTY      0x00000080u\n#define CTL2_SUBJECT_LITERAL             0x00000100u\n#define CTL2_CALLOUT_NO_WHERE            0x00000200u\n#define CTL2_CALLOUT_EXTRA               0x00000400u\n#define CTL2_ALLVECTOR                   0x00000800u\n#define CTL2_NULL_PATTERN                0x00001000u\n#define CTL2_NULL_SUBJECT                0x00002000u\n#define CTL2_NULL_REPLACEMENT            0x00004000u\n#define CTL2_FRAMESIZE                   0x00008000u\n#define CTL2_SUBSTITUTE_CASE_CALLOUT     0x00010000u\n#define CTL2_NULL_SUBSTITUTE_MATCH_DATA  0x00020000u\n\n#define CTL2_HEAPFRAMES_SIZE             0x20000000u  /* Informational */\n#define CTL2_NL_SET                      0x40000000u  /* Informational */\n#define CTL2_BSR_SET                     0x80000000u  /* Informational */\n\n/* These are the matching controls that may be set either on a pattern or on a\ndata line. They are copied from the pattern controls as initial settings for\ndata line controls. Note that CTL_MEMORY is not included here, because it does\ndifferent things in the two cases. */\n\n#define CTL_ALLPD  (CTL_AFTERTEXT|\\\n                    CTL_ALLAFTERTEXT|\\\n                    CTL_ALLCAPTURES|\\\n                    CTL_ALLUSEDTEXT|\\\n                    CTL_ALTGLOBAL|\\\n                    CTL_GLOBAL|\\\n                    CTL_MARK|\\\n                    CTL_STARTCHAR|\\\n                    CTL_UTF8_INPUT)\n\n#define CTL2_ALLPD (CTL2_SUBSTITUTE_CALLOUT|\\\n                    CTL2_SUBSTITUTE_EXTENDED|\\\n                    CTL2_SUBSTITUTE_LITERAL|\\\n                    CTL2_SUBSTITUTE_MATCHED|\\\n                    CTL2_SUBSTITUTE_OVERFLOW_LENGTH|\\\n                    CTL2_SUBSTITUTE_REPLACEMENT_ONLY|\\\n                    CTL2_SUBSTITUTE_UNKNOWN_UNSET|\\\n                    CTL2_SUBSTITUTE_UNSET_EMPTY|\\\n                    CTL2_ALLVECTOR|\\\n                    CTL2_SUBSTITUTE_CASE_CALLOUT|\\\n                    CTL2_NULL_SUBSTITUTE_MATCH_DATA|\\\n                    CTL2_HEAPFRAMES_SIZE)\n\n/* Structures for holding modifier information for patterns and subject strings\n(data). Fields containing modifiers that can be set either for a pattern or a\nsubject (MOD_PD[P]/MOD_PND) must be at the start and in the same order in both\nstructures so that the same offset in the big table below works for both. */\n\ntypedef struct patctl {       /* Structure for pattern modifiers. */\n  uint32_t  options;          /* Must be in same position as datctl */\n  uint32_t  control;          /* Must be in same position as datctl */\n  uint32_t  control2;         /* Must be in same position as datctl */\n  uint32_t  jitstack;         /* Must be in same position as datctl */\n   uint8_t  replacement[1+REPLACE_MODSIZE];         /* So must this */\n  uint32_t  substitute_skip;  /* Must be in same position as datctl */\n  uint32_t  substitute_stop;  /* Must be in same position as datctl */\n  uint32_t  jit;\n  uint32_t  stackguard_test;\n  uint32_t  tables_id;\n  uint32_t  convert_type;\n  uint32_t  convert_length;\n  uint32_t  convert_glob_escape;\n  uint32_t  convert_glob_separator;\n   int32_t  regerror_buffsize;\n   uint8_t  locale[1+LOCALESIZE];\n} patctl;\n\n#define MAXCPYGET 10\n#define LENCPYGET 64\n\ntypedef struct datctl {        /* Structure for data line modifiers. */\n  uint32_t   options;          /* Must be in same position as patctl */\n  uint32_t   control;          /* Must be in same position as patctl */\n  uint32_t   control2;         /* Must be in same position as patctl */\n  uint32_t   jitstack;         /* Must be in same position as patctl */\n   uint8_t   replacement[1+REPLACE_MODSIZE];         /* So must this */\n  uint32_t   substitute_skip;  /* Must be in same position as patctl */\n  uint32_t   substitute_stop;  /* Must be in same position as patctl */\n   uint8_t   substitute_subject[1+SUBSTITUTE_SUBJECT_MODSIZE];\n  uint32_t   startend[2];\n  uint32_t   cerror[2];\n  uint32_t   cfail[2];\n   int32_t   callout_data;\n   int32_t   copy_numbers[MAXCPYGET];\n   int32_t   get_numbers[MAXCPYGET];\n  uint32_t   oveccount;\n  PCRE2_SIZE offset;\n  uint8_t    copy_names[LENCPYGET];\n  uint8_t    get_names[LENCPYGET];\n} datctl;\n\n/* Helper functions to zero out the structures. */\n\nstatic void patctl_zero(patctl *p)\n{\nmemset(p, 0, sizeof(patctl));\np->replacement[0] = MOD_STR_UNSET;\np->convert_type = CONVERT_UNSET;\np->convert_length = CONVERT_UNSET;\np->regerror_buffsize = -1;\np->locale[0] = MOD_STR_UNSET;\n}\n\nstatic void datctl_zero(datctl *d)\n{\nmemset(d, 0, sizeof(datctl));\nd->replacement[0] = MOD_STR_UNSET;\nd->substitute_subject[0] = MOD_STR_UNSET;\nd->oveccount = DEFAULT_OVECCOUNT;\nd->copy_numbers[0] = -1;\nd->get_numbers[0] = -1;\nd->startend[0] = d->startend[1] = CFORE_UNSET;\nd->cerror[0] = d->cerror[1] = CFORE_UNSET;\nd->cfail[0] = d->cfail[1] = CFORE_UNSET;\n}\n\n/* Ids for which context to modify. */\n\nenum { CTX_PAT,            /* Active pattern context */\n       CTX_POPPAT,         /* Ditto, for a popped pattern */\n       CTX_DEFPAT,         /* Default pattern context */\n       CTX_DAT,            /* Active data (match) context */\n       CTX_DEFDAT };       /* Default data (match) context */\n\n/* Macros to simplify the big table below. */\n\n#define CO(name) offsetof(PCRE2_REAL_COMPILE_CONTEXT, name)\n#define MO(name) offsetof(PCRE2_REAL_MATCH_CONTEXT, name)\n#define PO(name) offsetof(patctl, name)\n#define DO(name) offsetof(datctl, name)\n\n/* Validate that the offsets for the shared fields do indeed match. */\n\nSTATIC_ASSERT(PO(options) == DO(options), options_mismatch);\nSTATIC_ASSERT(PO(control) == DO(control), control_mismatch);\nSTATIC_ASSERT(PO(control2) == DO(control2), control2_mismatch);\nSTATIC_ASSERT(PO(jitstack) == DO(jitstack), jitstack_mismatch);\nSTATIC_ASSERT(PO(replacement) == DO(replacement), replacement_mismatch);\nSTATIC_ASSERT(PO(substitute_skip) == DO(substitute_skip), substitute_skip_mismatch);\nSTATIC_ASSERT(PO(substitute_stop) == DO(substitute_stop), substitute_stop_mismatch);\n\n/* Table of all long-form modifiers. Must be in collating sequence of modifier\nname because it is searched by binary chop. */\n\ntypedef struct modstruct {\n  const char   *name;\n  uint16_t      which;\n  uint16_t      type;\n  uint32_t      value;\n  PCRE2_SIZE    offset;\n} modstruct;\n\n#define PCRE2_EXTRA_ASCII_ALL (PCRE2_EXTRA_ASCII_BSD|PCRE2_EXTRA_ASCII_BSS| \\\n  PCRE2_EXTRA_ASCII_BSW|PCRE2_EXTRA_ASCII_POSIX)\n\nstatic modstruct modlist[] = {\n  { \"aftertext\",                   MOD_PNDP, MOD_CTL, CTL_AFTERTEXT,              PO(control) },\n  { \"allaftertext\",                MOD_PNDP, MOD_CTL, CTL_ALLAFTERTEXT,           PO(control) },\n  { \"allcaptures\",                 MOD_PND,  MOD_CTL, CTL_ALLCAPTURES,            PO(control) },\n  { \"allow_empty_class\",           MOD_PAT,  MOD_OPT, PCRE2_ALLOW_EMPTY_CLASS,    PO(options) },\n  { \"allow_lookaround_bsk\",        MOD_CTC,  MOD_OPT, PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK, CO(extra_options) },\n  { \"allow_surrogate_escapes\",     MOD_CTC,  MOD_OPT, PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES, CO(extra_options) },\n  { \"allusedtext\",                 MOD_PNDP, MOD_CTL, CTL_ALLUSEDTEXT,            PO(control) },\n  { \"allvector\",                   MOD_PND,  MOD_CTL, CTL2_ALLVECTOR,             PO(control2) },\n  { \"alt_bsux\",                    MOD_PAT,  MOD_OPT, PCRE2_ALT_BSUX,             PO(options) },\n  { \"alt_circumflex\",              MOD_PAT,  MOD_OPT, PCRE2_ALT_CIRCUMFLEX,       PO(options) },\n  { \"alt_extended_class\",          MOD_PAT,  MOD_OPT, PCRE2_ALT_EXTENDED_CLASS,   PO(options) },\n  { \"alt_verbnames\",               MOD_PAT,  MOD_OPT, PCRE2_ALT_VERBNAMES,        PO(options) },\n  { \"altglobal\",                   MOD_PND,  MOD_CTL, CTL_ALTGLOBAL,              PO(control) },\n  { \"anchored\",                    MOD_PD,   MOD_OPT, PCRE2_ANCHORED,             PO(options) },\n  { \"ascii_all\",                   MOD_CTC,  MOD_OPT, PCRE2_EXTRA_ASCII_ALL,      CO(extra_options) },\n  { \"ascii_bsd\",                   MOD_CTC,  MOD_OPT, PCRE2_EXTRA_ASCII_BSD,      CO(extra_options) },\n  { \"ascii_bss\",                   MOD_CTC,  MOD_OPT, PCRE2_EXTRA_ASCII_BSS,      CO(extra_options) },\n  { \"ascii_bsw\",                   MOD_CTC,  MOD_OPT, PCRE2_EXTRA_ASCII_BSW,      CO(extra_options) },\n  { \"ascii_digit\",                 MOD_CTC,  MOD_OPT, PCRE2_EXTRA_ASCII_DIGIT,    CO(extra_options) },\n  { \"ascii_posix\",                 MOD_CTC,  MOD_OPT, PCRE2_EXTRA_ASCII_POSIX,    CO(extra_options) },\n  { \"auto_callout\",                MOD_PAT,  MOD_OPT, PCRE2_AUTO_CALLOUT,         PO(options) },\n  { \"auto_possess\",                MOD_CTC,  MOD_OPTMZ, PCRE2_AUTO_POSSESS,       0 },\n  { \"auto_possess_off\",            MOD_CTC,  MOD_OPTMZ, PCRE2_AUTO_POSSESS_OFF,   0 },\n  { \"bad_escape_is_literal\",       MOD_CTC,  MOD_OPT, PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL, CO(extra_options) },\n  { \"bincode\",                     MOD_PAT,  MOD_CTL, CTL_BINCODE,                PO(control) },\n  { \"bsr\",                         MOD_CTC,  MOD_BSR, 0,                          CO(bsr_convention) },\n  { \"callout_capture\",             MOD_DAT,  MOD_CTL, CTL_CALLOUT_CAPTURE,        DO(control) },\n  { \"callout_data\",                MOD_DAT,  MOD_INS, 0,                          DO(callout_data) },\n  { \"callout_error\",               MOD_DAT,  MOD_IN2, 0,                          DO(cerror) },\n  { \"callout_extra\",               MOD_DAT,  MOD_CTL, CTL2_CALLOUT_EXTRA,         DO(control2) },\n  { \"callout_fail\",                MOD_DAT,  MOD_IN2, 0,                          DO(cfail) },\n  { \"callout_info\",                MOD_PAT,  MOD_CTL, CTL_CALLOUT_INFO,           PO(control) },\n  { \"callout_no_where\",            MOD_DAT,  MOD_CTL, CTL2_CALLOUT_NO_WHERE,      DO(control2) },\n  { \"callout_none\",                MOD_DAT,  MOD_CTL, CTL_CALLOUT_NONE,           DO(control) },\n  { \"caseless\",                    MOD_PATP, MOD_OPT, PCRE2_CASELESS,             PO(options) },\n  { \"caseless_restrict\",           MOD_CTC,  MOD_OPT, PCRE2_EXTRA_CASELESS_RESTRICT, CO(extra_options) },\n  { \"convert\",                     MOD_PAT,  MOD_CON, 0,                          PO(convert_type) },\n  { \"convert_glob_escape\",         MOD_PAT,  MOD_CHR, 0,                          PO(convert_glob_escape) },\n  { \"convert_glob_separator\",      MOD_PAT,  MOD_CHR, 0,                          PO(convert_glob_separator) },\n  { \"convert_length\",              MOD_PAT,  MOD_INT, 0,                          PO(convert_length) },\n  { \"copy\",                        MOD_DAT,  MOD_NN,  DO(copy_numbers),           DO(copy_names) },\n  { \"copy_matched_subject\",        MOD_DAT,  MOD_OPT, PCRE2_COPY_MATCHED_SUBJECT, DO(options) },\n  { \"debug\",                       MOD_PAT,  MOD_CTL, CTL_DEBUG,                  PO(control) },\n  { \"depth_limit\",                 MOD_CTM,  MOD_INT, 0,                          MO(depth_limit) },\n  { \"dfa\",                         MOD_DAT,  MOD_CTL, CTL_DFA,                    DO(control) },\n  { \"dfa_restart\",                 MOD_DAT,  MOD_OPT, PCRE2_DFA_RESTART,          DO(options) },\n  { \"dfa_shortest\",                MOD_DAT,  MOD_OPT, PCRE2_DFA_SHORTEST,         DO(options) },\n  { \"disable_recurseloop_check\",   MOD_DAT,  MOD_OPT, PCRE2_DISABLE_RECURSELOOP_CHECK, DO(options) },\n  { \"dollar_endonly\",              MOD_PAT,  MOD_OPT, PCRE2_DOLLAR_ENDONLY,       PO(options) },\n  { \"dotall\",                      MOD_PATP, MOD_OPT, PCRE2_DOTALL,               PO(options) },\n  { \"dotstar_anchor\",              MOD_CTC,  MOD_OPTMZ, PCRE2_DOTSTAR_ANCHOR,     0 },\n  { \"dotstar_anchor_off\",          MOD_CTC,  MOD_OPTMZ, PCRE2_DOTSTAR_ANCHOR_OFF, 0 },\n  { \"dupnames\",                    MOD_PATP, MOD_OPT, PCRE2_DUPNAMES,             PO(options) },\n  { \"endanchored\",                 MOD_PD,   MOD_OPT, PCRE2_ENDANCHORED,          PO(options) },\n  { \"escaped_cr_is_lf\",            MOD_CTC,  MOD_OPT, PCRE2_EXTRA_ESCAPED_CR_IS_LF, CO(extra_options) },\n  { \"expand\",                      MOD_PAT,  MOD_CTL, CTL_EXPAND,                 PO(control) },\n  { \"extended\",                    MOD_PATP, MOD_OPT, PCRE2_EXTENDED,             PO(options) },\n  { \"extended_more\",               MOD_PATP, MOD_OPT, PCRE2_EXTENDED_MORE,        PO(options) },\n  { \"extra_alt_bsux\",              MOD_CTC,  MOD_OPT, PCRE2_EXTRA_ALT_BSUX,       CO(extra_options) },\n  { \"find_limits\",                 MOD_DAT,  MOD_CTL, CTL_FINDLIMITS,             DO(control) },\n  { \"find_limits_noheap\",          MOD_DAT,  MOD_CTL, CTL_FINDLIMITS_NOHEAP,      DO(control) },\n  { \"firstline\",                   MOD_PAT,  MOD_OPT, PCRE2_FIRSTLINE,            PO(options) },\n  { \"framesize\",                   MOD_PAT,  MOD_CTL, CTL2_FRAMESIZE,             PO(control2) },\n  { \"fullbincode\",                 MOD_PAT,  MOD_CTL, CTL_FULLBINCODE,            PO(control) },\n  { \"get\",                         MOD_DAT,  MOD_NN,  DO(get_numbers),            DO(get_names) },\n  { \"getall\",                      MOD_DAT,  MOD_CTL, CTL_GETALL,                 DO(control) },\n  { \"global\",                      MOD_PNDP, MOD_CTL, CTL_GLOBAL,                 PO(control) },\n  { \"heap_limit\",                  MOD_CTM,  MOD_INT, 0,                          MO(heap_limit) },\n  { \"heapframes_size\",             MOD_PND,  MOD_CTL, CTL2_HEAPFRAMES_SIZE,       PO(control2) },\n  { \"hex\",                         MOD_PATP, MOD_CTL, CTL_HEXPAT,                 PO(control) },\n  { \"info\",                        MOD_PAT,  MOD_CTL, CTL_INFO,                   PO(control) },\n  { \"jit\",                         MOD_PAT,  MOD_IND, 7,                          PO(jit) },\n  { \"jitfast\",                     MOD_PAT,  MOD_CTL, CTL_JITFAST,                PO(control) },\n  { \"jitstack\",                    MOD_PNDP, MOD_INT, 0,                          PO(jitstack) },\n  { \"jitverify\",                   MOD_PAT,  MOD_CTL, CTL_JITVERIFY,              PO(control) },\n  { \"literal\",                     MOD_PAT,  MOD_OPT, PCRE2_LITERAL,              PO(options) },\n  { \"locale\",                      MOD_PATP, MOD_STR, LOCALESIZE,                 PO(locale) },\n  { \"mark\",                        MOD_PNDP, MOD_CTL, CTL_MARK,                   PO(control) },\n  { \"match_invalid_utf\",           MOD_PAT,  MOD_OPT, PCRE2_MATCH_INVALID_UTF,    PO(options) },\n  { \"match_limit\",                 MOD_CTM,  MOD_INT, 0,                          MO(match_limit) },\n  { \"match_line\",                  MOD_CTC,  MOD_OPT, PCRE2_EXTRA_MATCH_LINE,     CO(extra_options) },\n  { \"match_unset_backref\",         MOD_PAT,  MOD_OPT, PCRE2_MATCH_UNSET_BACKREF,  PO(options) },\n  { \"match_word\",                  MOD_CTC,  MOD_OPT, PCRE2_EXTRA_MATCH_WORD,     CO(extra_options) },\n  { \"max_pattern_compiled_length\", MOD_CTC,  MOD_SIZ, 0,                          CO(max_pattern_compiled_length) },\n  { \"max_pattern_length\",          MOD_CTC,  MOD_SIZ, 0,                          CO(max_pattern_length) },\n  { \"max_varlookbehind\",           MOD_CTC,  MOD_INT, 0,                          CO(max_varlookbehind) },\n  { \"memory\",                      MOD_PD,   MOD_CTL, CTL_MEMORY,                 PO(control) },\n  { \"multiline\",                   MOD_PATP, MOD_OPT, PCRE2_MULTILINE,            PO(options) },\n  { \"never_backslash_c\",           MOD_PAT,  MOD_OPT, PCRE2_NEVER_BACKSLASH_C,    PO(options) },\n  { \"never_callout\",               MOD_CTC,  MOD_OPT, PCRE2_EXTRA_NEVER_CALLOUT,  CO(extra_options) },\n  { \"never_ucp\",                   MOD_PAT,  MOD_OPT, PCRE2_NEVER_UCP,            PO(options) },\n  { \"never_utf\",                   MOD_PAT,  MOD_OPT, PCRE2_NEVER_UTF,            PO(options) },\n  { \"newline\",                     MOD_CTC,  MOD_NL,  0,                          0 },\n  { \"no_auto_capture\",             MOD_PAT,  MOD_OPT, PCRE2_NO_AUTO_CAPTURE,      PO(options) },\n  { \"no_auto_possess\",             MOD_PATP, MOD_OPT, PCRE2_NO_AUTO_POSSESS,      PO(options) },\n  { \"no_bs0\",                      MOD_CTC,  MOD_OPT, PCRE2_EXTRA_NO_BS0,         CO(extra_options) },\n  { \"no_dotstar_anchor\",           MOD_PAT,  MOD_OPT, PCRE2_NO_DOTSTAR_ANCHOR,    PO(options) },\n  { \"no_jit\",                      MOD_DATP, MOD_OPT, PCRE2_NO_JIT,               DO(options) },\n  { \"no_start_optimize\",           MOD_PATP, MOD_OPT, PCRE2_NO_START_OPTIMIZE,    PO(options) },\n  { \"no_utf_check\",                MOD_PD,   MOD_OPT, PCRE2_NO_UTF_CHECK,         PO(options) },\n  { \"notbol\",                      MOD_DAT,  MOD_OPT, PCRE2_NOTBOL,               DO(options) },\n  { \"notempty\",                    MOD_DAT,  MOD_OPT, PCRE2_NOTEMPTY,             DO(options) },\n  { \"notempty_atstart\",            MOD_DAT,  MOD_OPT, PCRE2_NOTEMPTY_ATSTART,     DO(options) },\n  { \"noteol\",                      MOD_DAT,  MOD_OPT, PCRE2_NOTEOL,               DO(options) },\n  { \"null_context\",                MOD_PD,   MOD_CTL, CTL_NULLCONTEXT,            PO(control) },\n  { \"null_pattern\",                MOD_PAT,  MOD_CTL, CTL2_NULL_PATTERN,          PO(control2) },\n  { \"null_replacement\",            MOD_DAT,  MOD_CTL, CTL2_NULL_REPLACEMENT,      DO(control2) },\n  { \"null_subject\",                MOD_DAT,  MOD_CTL, CTL2_NULL_SUBJECT,          DO(control2) },\n  { \"null_substitute_match_data\",  MOD_PND,  MOD_CTL, CTL2_NULL_SUBSTITUTE_MATCH_DATA, PO(control2) },\n  { \"offset\",                      MOD_DAT,  MOD_SIZ, 0,                          DO(offset) },\n  { \"offset_limit\",                MOD_CTM,  MOD_SIZ, 0,                          MO(offset_limit)},\n  { \"optimization_full\",           MOD_CTC,  MOD_OPTMZ, PCRE2_OPTIMIZATION_FULL,  0 },\n  { \"optimization_none\",           MOD_CTC,  MOD_OPTMZ, PCRE2_OPTIMIZATION_NONE,  0 },\n  { \"ovector\",                     MOD_DAT,  MOD_INT, 0,                          DO(oveccount) },\n  { \"parens_nest_limit\",           MOD_CTC,  MOD_INT, 0,                          CO(parens_nest_limit) },\n  { \"partial_hard\",                MOD_DAT,  MOD_OPT, PCRE2_PARTIAL_HARD,         DO(options) },\n  { \"partial_soft\",                MOD_DAT,  MOD_OPT, PCRE2_PARTIAL_SOFT,         DO(options) },\n  { \"ph\",                          MOD_DAT,  MOD_OPT, PCRE2_PARTIAL_HARD,         DO(options) },\n  { \"posix\",                       MOD_PAT,  MOD_CTL, CTL_POSIX,                  PO(control) },\n  { \"posix_nosub\",                 MOD_PAT,  MOD_CTL, CTL_POSIX|CTL_POSIX_NOSUB,  PO(control) },\n  { \"posix_startend\",              MOD_DAT,  MOD_IN2, 0,                          DO(startend) },\n  { \"ps\",                          MOD_DAT,  MOD_OPT, PCRE2_PARTIAL_SOFT,         DO(options) },\n  { \"push\",                        MOD_PAT,  MOD_CTL, CTL_PUSH,                   PO(control) },\n  { \"pushcopy\",                    MOD_PAT,  MOD_CTL, CTL_PUSHCOPY,               PO(control) },\n  { \"pushtablescopy\",              MOD_PAT,  MOD_CTL, CTL_PUSHTABLESCOPY,         PO(control) },\n  { \"python_octal\",                MOD_CTC,  MOD_OPT, PCRE2_EXTRA_PYTHON_OCTAL,   CO(extra_options) },\n  { \"recursion_limit\",             MOD_CTM,  MOD_INT, 0,                          MO(depth_limit) },  /* Obsolete synonym */\n  { \"regerror_buffsize\",           MOD_PAT,  MOD_INS, 0,                          PO(regerror_buffsize) },\n  { \"replace\",                     MOD_PND,  MOD_STR, REPLACE_MODSIZE,            PO(replacement) },\n  { \"stackguard\",                  MOD_PAT,  MOD_INT, 0,                          PO(stackguard_test) },\n  { \"start_optimize\",              MOD_CTC,  MOD_OPTMZ, PCRE2_START_OPTIMIZE,     0 },\n  { \"start_optimize_off\",          MOD_CTC,  MOD_OPTMZ, PCRE2_START_OPTIMIZE_OFF, 0 },\n  { \"startchar\",                   MOD_PND,  MOD_CTL, CTL_STARTCHAR,              PO(control) },\n  { \"startoffset\",                 MOD_DAT,  MOD_SIZ, 0,                          DO(offset) },\n  { \"subject_literal\",             MOD_PATP, MOD_CTL, CTL2_SUBJECT_LITERAL,       PO(control2) },\n  { \"substitute_callout\",          MOD_PND,  MOD_CTL, CTL2_SUBSTITUTE_CALLOUT,    PO(control2) },\n  { \"substitute_case_callout\",     MOD_PND,  MOD_CTL, CTL2_SUBSTITUTE_CASE_CALLOUT, PO(control2) },\n  { \"substitute_extended\",         MOD_PND,  MOD_CTL, CTL2_SUBSTITUTE_EXTENDED,   PO(control2) },\n  { \"substitute_literal\",          MOD_PND,  MOD_CTL, CTL2_SUBSTITUTE_LITERAL,    PO(control2) },\n  { \"substitute_matched\",          MOD_PND,  MOD_CTL, CTL2_SUBSTITUTE_MATCHED,    PO(control2) },\n  { \"substitute_overflow_length\",  MOD_PND,  MOD_CTL, CTL2_SUBSTITUTE_OVERFLOW_LENGTH, PO(control2) },\n  { \"substitute_replacement_only\", MOD_PND,  MOD_CTL, CTL2_SUBSTITUTE_REPLACEMENT_ONLY, PO(control2) },\n  { \"substitute_skip\",             MOD_PND,  MOD_INT, 0,                          PO(substitute_skip) },\n  { \"substitute_stop\",             MOD_PND,  MOD_INT, 0,                          PO(substitute_stop) },\n  { \"substitute_subject\",          MOD_DAT,  MOD_STR, SUBSTITUTE_SUBJECT_MODSIZE, DO(substitute_subject) },\n  { \"substitute_unknown_unset\",    MOD_PND,  MOD_CTL, CTL2_SUBSTITUTE_UNKNOWN_UNSET, PO(control2) },\n  { \"substitute_unset_empty\",      MOD_PND,  MOD_CTL, CTL2_SUBSTITUTE_UNSET_EMPTY, PO(control2) },\n  { \"tables\",                      MOD_PAT,  MOD_INT, 0,                          PO(tables_id) },\n  { \"turkish_casing\",              MOD_CTC,  MOD_OPT, PCRE2_EXTRA_TURKISH_CASING, CO(extra_options) },\n  { \"ucp\",                         MOD_PATP, MOD_OPT, PCRE2_UCP,                  PO(options) },\n  { \"ungreedy\",                    MOD_PAT,  MOD_OPT, PCRE2_UNGREEDY,             PO(options) },\n  { \"use_length\",                  MOD_PAT,  MOD_CTL, CTL_USE_LENGTH,             PO(control) },\n  { \"use_offset_limit\",            MOD_PAT,  MOD_OPT, PCRE2_USE_OFFSET_LIMIT,     PO(options) },\n  { \"utf\",                         MOD_PATP, MOD_OPT, PCRE2_UTF,                  PO(options) },\n  { \"utf8_input\",                  MOD_PAT,  MOD_CTL, CTL_UTF8_INPUT,             PO(control) },\n  { \"zero_terminate\",              MOD_DAT,  MOD_CTL, CTL_ZERO_TERMINATE,         DO(control) }\n};\n\n#define MODLISTCOUNT sizeof(modlist)/sizeof(modstruct)\n\n/* Controls and options that are supported for use with the POSIX interface. */\n\n#define POSIX_SUPPORTED_COMPILE_OPTIONS ( \\\n  PCRE2_CASELESS|PCRE2_DOTALL|PCRE2_LITERAL|PCRE2_MULTILINE|PCRE2_UCP| \\\n  PCRE2_UTF|PCRE2_UNGREEDY)\n\n#define POSIX_SUPPORTED_COMPILE_EXTRA_OPTIONS (0)\n\n#define POSIX_SUPPORTED_COMPILE_CONTROLS ( \\\n  CTL_AFTERTEXT|CTL_ALLAFTERTEXT|CTL_EXPAND|CTL_HEXPAT|CTL_POSIX| \\\n  CTL_POSIX_NOSUB|CTL_USE_LENGTH)\n\n#define POSIX_SUPPORTED_COMPILE_CONTROLS2 (0)\n\n#define POSIX_SUPPORTED_MATCH_OPTIONS ( \\\n  PCRE2_NOTBOL|PCRE2_NOTEMPTY|PCRE2_NOTEOL)\n\n#define POSIX_SUPPORTED_MATCH_CONTROLS  (CTL_AFTERTEXT|CTL_ALLAFTERTEXT)\n#define POSIX_SUPPORTED_MATCH_CONTROLS2 (CTL2_NULL_SUBJECT)\n\n/* Control bits that are not ignored with 'push'. */\n\n#define PUSH_SUPPORTED_COMPILE_CONTROLS ( \\\n  CTL_BINCODE|CTL_CALLOUT_INFO|CTL_FULLBINCODE|CTL_HEXPAT|CTL_INFO| \\\n  CTL_JITVERIFY|CTL_MEMORY|CTL_PUSH|CTL_PUSHCOPY| \\\n  CTL_PUSHTABLESCOPY|CTL_USE_LENGTH)\n\n#define PUSH_SUPPORTED_COMPILE_CONTROLS2 (CTL2_BSR_SET| \\\n  CTL2_HEAPFRAMES_SIZE|CTL2_FRAMESIZE|CTL2_NL_SET)\n\n/* Controls that apply only at compile time with 'push'. */\n\n#define PUSH_COMPILE_ONLY_CONTROLS   CTL_JITVERIFY\n#define PUSH_COMPILE_ONLY_CONTROLS2  (0)\n\n/* Controls that are forbidden with #pop or #popcopy. */\n\n#define NOTPOP_CONTROLS (CTL_HEXPAT|CTL_POSIX|CTL_POSIX_NOSUB|CTL_PUSH| \\\n  CTL_PUSHCOPY|CTL_PUSHTABLESCOPY|CTL_USE_LENGTH)\n\n/* Pattern controls that are mutually exclusive. At present these are all in\nthe first control word. Note that CTL_POSIX_NOSUB is always accompanied by\nCTL_POSIX, so it doesn't need its own entries. */\n\nstatic uint32_t exclusive_pat_controls[] = {\n  CTL_POSIX    | CTL_PUSH,\n  CTL_POSIX    | CTL_PUSHCOPY,\n  CTL_POSIX    | CTL_PUSHTABLESCOPY,\n  CTL_PUSH     | CTL_PUSHCOPY,\n  CTL_PUSH     | CTL_PUSHTABLESCOPY,\n  CTL_PUSHCOPY | CTL_PUSHTABLESCOPY,\n  CTL_EXPAND   | CTL_HEXPAT };\n\n/* Data controls that are mutually exclusive. At present these are all in the\nfirst control word. */\n\nstatic uint32_t exclusive_dat_controls[] = {\n  CTL_ALLUSEDTEXT        | CTL_STARTCHAR,\n  CTL_FINDLIMITS         | CTL_NULLCONTEXT,\n  CTL_FINDLIMITS_NOHEAP  | CTL_NULLCONTEXT };\n\n/* Table of single-character abbreviated modifiers. The index field is\ninitialized to -1, but the first time the modifier is encountered, it is filled\nin with the index of the full entry in modlist, to save repeated searching when\nprocessing multiple test items. This short list is searched serially, so its\norder does not matter. */\n\ntypedef struct c1modstruct {\n  const char *fullname;\n  uint32_t    onechar;\n  int         index;\n} c1modstruct;\n\nstatic c1modstruct c1modlist[] = {\n  { \"bincode\",           'B',           -1 },\n  { \"info\",              'I',           -1 },\n  { \"ascii_all\",         'a',           -1 },\n  { \"global\",            'g',           -1 },\n  { \"caseless\",          'i',           -1 },\n  { \"multiline\",         'm',           -1 },\n  { \"no_auto_capture\",   'n',           -1 },\n  { \"caseless_restrict\", 'r',           -1 },\n  { \"dotall\",            's',           -1 },\n  { \"extended\",          'x',           -1 }\n};\n\n#define C1MODLISTCOUNT sizeof(c1modlist)/sizeof(c1modstruct)\n\n/* Table of arguments for the -C command line option. Use macros to make the\ntable itself easier to read. */\n\n#if defined SUPPORT_PCRE2_8\n#define SUPPORT_8 1\n#endif\n#if defined SUPPORT_PCRE2_16\n#define SUPPORT_16 1\n#endif\n#if defined SUPPORT_PCRE2_32\n#define SUPPORT_32 1\n#endif\n\n#ifndef SUPPORT_8\n#define SUPPORT_8 0\n#endif\n#ifndef SUPPORT_16\n#define SUPPORT_16 0\n#endif\n#ifndef SUPPORT_32\n#define SUPPORT_32 0\n#endif\n\n#if defined EBCDIC\n#define SUPPORT_EBCDIC 1\n#define SUPPORT_EBCDIC_NL25 CHAR_LF == 0x25\n#else\n#define SUPPORT_EBCDIC 0\n#define SUPPORT_EBCDIC_NL25 0\n#endif\n\n#ifdef NEVER_BACKSLASH_C\n#define BACKSLASH_C 0\n#else\n#define BACKSLASH_C 1\n#endif\n\ntypedef struct coptstruct {\n  const char *name;\n  uint32_t    type;\n  uint32_t    value;\n} coptstruct;\n\nenum { CONF_BSR,\n       CONF_FIX,\n       CONF_INT,\n       CONF_NL,\n       CONF_JU\n};\n\nstatic coptstruct coptlist[] = {\n  { \"backslash-C\", CONF_FIX, BACKSLASH_C },\n  { \"bsr\",         CONF_BSR, PCRE2_CONFIG_BSR },\n  { \"ebcdic\",      CONF_FIX, SUPPORT_EBCDIC },\n  { \"ebcdic-io\",   CONF_FIX, EBCDIC_IO },\n  { \"ebcdic-nl25\", CONF_FIX, SUPPORT_EBCDIC_NL25 },\n  { \"jit\",         CONF_INT, PCRE2_CONFIG_JIT },\n  { \"jitusable\",   CONF_JU,  0 },\n  { \"linksize\",    CONF_INT, PCRE2_CONFIG_EFFECTIVE_LINKSIZE },\n  { \"newline\",     CONF_NL,  PCRE2_CONFIG_NEWLINE },\n  { \"pcre2-16\",    CONF_FIX, SUPPORT_16 },\n  { \"pcre2-32\",    CONF_FIX, SUPPORT_32 },\n  { \"pcre2-8\",     CONF_FIX, SUPPORT_8 },\n  { \"unicode\",     CONF_INT, PCRE2_CONFIG_UNICODE }\n};\n\n#define COPTLISTCOUNT sizeof(coptlist)/sizeof(coptstruct)\n\n#undef SUPPORT_8\n#undef SUPPORT_16\n#undef SUPPORT_32\n#undef SUPPORT_EBCDIC\n#undef SUPPORT_EBDCIC_NL25\n#undef BACKSLASH_C\n\n/* Types for the parser, to be used in process_data() */\n\nenum force_encoding {\n  FORCE_NONE,         /* No preference, follow utf modifier */\n  FORCE_RAW,          /* Encode as a code point or error if too wide */\n  FORCE_UTF           /* Encode as a character or error if too wide */\n};\n\n/* ----------------------- Static variables ------------------------ */\n\nstatic FILE *infile;\nstatic FILE *outfile;\n\nstatic const void *last_callout_mark;\n\nstatic BOOL first_callout;\nstatic BOOL jit_was_used;\nstatic BOOL restrict_for_perl_test = FALSE;\nstatic BOOL show_memory = FALSE;\nstatic BOOL preprocess_only = FALSE;\nstatic BOOL inside_if = FALSE;\nstatic BOOL malloc_testing = FALSE;\n\nstatic int jitrc;                             /* Return from JIT compile */\nstatic int timeit = 0;\nstatic int timeitm = 0;\nstatic int mallocs_until_failure = INT_MAX;\nstatic int mallocs_called = 0;\n\nstatic clock_t total_compile_time = 0;\nstatic clock_t total_jit_compile_time = 0;\nstatic clock_t total_match_time = 0;\n\nstatic uint32_t dfa_matched;\nstatic uint32_t forbid_utf = 0;\nstatic uint32_t maxlookbehind;\nstatic uint32_t max_oveccount;\nstatic uint32_t callout_count;\nstatic uint32_t maxcapcount;\n\nstatic uint16_t local_newline_default = 0;\n\nstatic patctl def_patctl;\nstatic patctl pat_patctl;\nstatic datctl def_datctl;\nstatic datctl dat_datctl;\n\nstatic void *malloclist[MALLOCLISTSIZE];\nstatic PCRE2_SIZE malloclistlength[MALLOCLISTSIZE];\nstatic uint32_t malloclistptr = 0;\n\n#ifdef SUPPORT_PCRE2_8\nstatic regex_t preg = { NULL, NULL, 0, 0, 0, 0 };\n#endif\n\nstatic int *dfa_workspace = NULL;\nstatic const uint8_t *locale_tables = NULL;\nstatic const uint8_t *use_tables = NULL;\nstatic uint8_t locale_name[LOCALESIZE];\nstatic uint8_t *tables3 = NULL;         /* For binary-loaded tables */\nstatic uint32_t loadtables_length = 0;\n\n/* We need buffers for building 16/32-bit strings; 8-bit strings don't need\nrebuilding, but set up the same naming scheme for use in macros. The \"buffer\"\nbuffer is where all input lines are read. Its size is the same as pbuffer8. */\n\nstatic size_t    pbuffer8_size  = 50000;        /* Initial size, bytes */\nstatic uint8_t  *pbuffer8 = NULL;\n#ifdef SUPPORT_PCRE2_16\nstatic size_t    pbuffer16_size = 0;   /* Size, bytes! Set only when needed */\nstatic uint16_t *pbuffer16 = NULL;\n#endif\n#ifdef SUPPORT_PCRE2_32\nstatic size_t    pbuffer32_size = 0;   /* Size, bytes! Set only when needed */\nstatic uint32_t *pbuffer32 = NULL;\n#endif\nstatic uint8_t  *buffer = NULL;\n\n/* The dbuffer is where all processed data lines are put. In non-8-bit modes it\nis cast as needed. For long data lines it grows as necessary. */\n\nstatic size_t dbuffer_size = 1u << 14;    /* Initial size, bytes */\nstatic uint8_t *dbuffer = NULL;\n\n/* ------------------ Colour highlighting definitions -------------------- */\n\n/* Colour of input text that was a comment, when echoing back to the terminal */\nstatic const int clr_comment = 37; /* grey */\n/* Colour of other input text that is echoed back to the terminal */\nstatic const int clr_input = 32; /* green */\n/* Colour of prompt output */\nstatic const int clr_prompt = 34; /* blue */\n/* Colour of output that represents a PCRE2 API error */\nstatic const int clr_api_error = 35; /* magenta */\n/* Colour of error messages for the test script itself\n(i.e. an error in the testing tool, not an API error) */\nstatic const int clr_test_error = 31; /* red */\n/* Colour of profiling information, which doesn't have a \"right\" answer */\nstatic const int clr_profiling = 36; /* cyan */\n/* No colour, for APIs that take a colour value */\nstatic const int clr_none = -1;\n\nenum { COLOUR_NEVER, COLOUR_ALWAYS, COLOUR_AUTO };\nstatic int colour_setting = COLOUR_AUTO;\nstatic int colour_last_fd = -1;\nstatic BOOL colour_fd_interactive = FALSE;\n\nstatic BOOL\nshould_print_colour(int clr, FILE* f)\n{\nif (f == NULL) return FALSE;\nif (clr == clr_none) return FALSE;\nif (colour_setting == COLOUR_NEVER) return FALSE;\nif (colour_setting == COLOUR_AUTO)\n  {\n  if (fileno(f) != colour_last_fd)\n    {\n    colour_last_fd = fileno(f);\n    colour_fd_interactive = INTERACTIVE(f);\n    }\n  if (!colour_fd_interactive) return FALSE;\n  }\nreturn TRUE;\n}\n\n/* Starts a block of colour (but only if colour is enabled). */\nstatic void\ncolour_begin(int clr, FILE* f)\n{\nif (should_print_colour(clr, f))\n  fprintf(f, \"\\x1b[%dm\", clr);\n}\n\n/* Ends a block of colour (but only if colour is enabled). */\nstatic void\ncolour_end(FILE* f)\n{\ncolour_begin(0, f);\n}\n\n/* cfprintf is like fprintf but takes a colour to wrap its output. */\nstatic int\ncfprintf(int clr, FILE *file, const char* fmt, ...)\n{\nva_list args;\nint ret;\nva_start(args, fmt);\ncolour_begin(clr, file);\nret = vfprintf(file, fmt, args);\nva_end(args);\ncolour_end(file);\nreturn ret;\n}\n\n\n\n/*************************************************\n*         Alternate character tables             *\n*************************************************/\n\n/* By default, the \"tables\" pointer in the compile context when calling\npcre2_compile() is not set (= NULL), thereby using the default tables of the\nlibrary. However, the tables modifier can be used to select alternate sets of\ntables, for different kinds of testing. Note that the locale modifier also\nadjusts the tables. */\n\n/* This is the set of tables distributed as default with PCRE2. It recognizes\nonly ASCII characters. */\n\nstatic const uint8_t tables1[] = {\n\n/* This table is a lower casing table. */\n\n    0,  1,  2,  3,  4,  5,  6,  7,\n    8,  9, 10, 11, 12, 13, 14, 15,\n   16, 17, 18, 19, 20, 21, 22, 23,\n   24, 25, 26, 27, 28, 29, 30, 31,\n   32, 33, 34, 35, 36, 37, 38, 39,\n   40, 41, 42, 43, 44, 45, 46, 47,\n   48, 49, 50, 51, 52, 53, 54, 55,\n   56, 57, 58, 59, 60, 61, 62, 63,\n   64, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122, 91, 92, 93, 94, 95,\n   96, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122,123,124,125,126,127,\n  128,129,130,131,132,133,134,135,\n  136,137,138,139,140,141,142,143,\n  144,145,146,147,148,149,150,151,\n  152,153,154,155,156,157,158,159,\n  160,161,162,163,164,165,166,167,\n  168,169,170,171,172,173,174,175,\n  176,177,178,179,180,181,182,183,\n  184,185,186,187,188,189,190,191,\n  192,193,194,195,196,197,198,199,\n  200,201,202,203,204,205,206,207,\n  208,209,210,211,212,213,214,215,\n  216,217,218,219,220,221,222,223,\n  224,225,226,227,228,229,230,231,\n  232,233,234,235,236,237,238,239,\n  240,241,242,243,244,245,246,247,\n  248,249,250,251,252,253,254,255,\n\n/* This table is a case flipping table. */\n\n    0,  1,  2,  3,  4,  5,  6,  7,\n    8,  9, 10, 11, 12, 13, 14, 15,\n   16, 17, 18, 19, 20, 21, 22, 23,\n   24, 25, 26, 27, 28, 29, 30, 31,\n   32, 33, 34, 35, 36, 37, 38, 39,\n   40, 41, 42, 43, 44, 45, 46, 47,\n   48, 49, 50, 51, 52, 53, 54, 55,\n   56, 57, 58, 59, 60, 61, 62, 63,\n   64, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122, 91, 92, 93, 94, 95,\n   96, 65, 66, 67, 68, 69, 70, 71,\n   72, 73, 74, 75, 76, 77, 78, 79,\n   80, 81, 82, 83, 84, 85, 86, 87,\n   88, 89, 90,123,124,125,126,127,\n  128,129,130,131,132,133,134,135,\n  136,137,138,139,140,141,142,143,\n  144,145,146,147,148,149,150,151,\n  152,153,154,155,156,157,158,159,\n  160,161,162,163,164,165,166,167,\n  168,169,170,171,172,173,174,175,\n  176,177,178,179,180,181,182,183,\n  184,185,186,187,188,189,190,191,\n  192,193,194,195,196,197,198,199,\n  200,201,202,203,204,205,206,207,\n  208,209,210,211,212,213,214,215,\n  216,217,218,219,220,221,222,223,\n  224,225,226,227,228,229,230,231,\n  232,233,234,235,236,237,238,239,\n  240,241,242,243,244,245,246,247,\n  248,249,250,251,252,253,254,255,\n\n/* This table contains bit maps for various character classes. Each map is 32\nbytes long and the bits run from the least significant end of each byte. The\nclasses that have their own maps are: space, xdigit, digit, upper, lower, word,\ngraph, print, punct, and cntrl. Other classes are built from combinations. */\n\n  0x00,0x3e,0x00,0x00,0x01,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,\n  0x7e,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,\n  0xfe,0xff,0xff,0x87,0xfe,0xff,0xff,0x07,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0xfc,\n  0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x78,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n/* This table identifies various classes of character by individual bits:\n  0x01   white space character\n  0x02   letter\n  0x04   decimal digit\n  0x08   hexadecimal digit\n  0x10   alphanumeric or '_'\n  0x80   regular expression metacharacter or binary zero\n*/\n\n  0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7 */\n  0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00, /*   8- 15 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */\n  0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00, /*    - '  */\n  0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x00, /*  ( - /  */\n  0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /*  0 - 7  */\n  0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x80, /*  8 - ?  */\n  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  @ - G  */\n  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  H - O  */\n  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  P - W  */\n  0x12,0x12,0x12,0x80,0x80,0x00,0x80,0x10, /*  X - _  */\n  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  ` - g  */\n  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  h - o  */\n  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  p - w  */\n  0x12,0x12,0x12,0x80,0x80,0x00,0x00,0x00, /*  x -127 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */\n\n/* This is a set of tables that came originally from a Windows user. It seems\nto be at least an approximation of ISO 8859. In particular, there are\ncharacters greater than 128 that are marked as spaces, letters, etc. */\n\nstatic const uint8_t tables2[] = {\n0,1,2,3,4,5,6,7,\n8,9,10,11,12,13,14,15,\n16,17,18,19,20,21,22,23,\n24,25,26,27,28,29,30,31,\n32,33,34,35,36,37,38,39,\n40,41,42,43,44,45,46,47,\n48,49,50,51,52,53,54,55,\n56,57,58,59,60,61,62,63,\n64,97,98,99,100,101,102,103,\n104,105,106,107,108,109,110,111,\n112,113,114,115,116,117,118,119,\n120,121,122,91,92,93,94,95,\n96,97,98,99,100,101,102,103,\n104,105,106,107,108,109,110,111,\n112,113,114,115,116,117,118,119,\n120,121,122,123,124,125,126,127,\n128,129,130,131,132,133,134,135,\n136,137,138,139,140,141,142,143,\n144,145,146,147,148,149,150,151,\n152,153,154,155,156,157,158,159,\n160,161,162,163,164,165,166,167,\n168,169,170,171,172,173,174,175,\n176,177,178,179,180,181,182,183,\n184,185,186,187,188,189,190,191,\n224,225,226,227,228,229,230,231,\n232,233,234,235,236,237,238,239,\n240,241,242,243,244,245,246,215,\n248,249,250,251,252,253,254,223,\n224,225,226,227,228,229,230,231,\n232,233,234,235,236,237,238,239,\n240,241,242,243,244,245,246,247,\n248,249,250,251,252,253,254,255,\n0,1,2,3,4,5,6,7,\n8,9,10,11,12,13,14,15,\n16,17,18,19,20,21,22,23,\n24,25,26,27,28,29,30,31,\n32,33,34,35,36,37,38,39,\n40,41,42,43,44,45,46,47,\n48,49,50,51,52,53,54,55,\n56,57,58,59,60,61,62,63,\n64,97,98,99,100,101,102,103,\n104,105,106,107,108,109,110,111,\n112,113,114,115,116,117,118,119,\n120,121,122,91,92,93,94,95,\n96,65,66,67,68,69,70,71,\n72,73,74,75,76,77,78,79,\n80,81,82,83,84,85,86,87,\n88,89,90,123,124,125,126,127,\n128,129,130,131,132,133,134,135,\n136,137,138,139,140,141,142,143,\n144,145,146,147,148,149,150,151,\n152,153,154,155,156,157,158,159,\n160,161,162,163,164,165,166,167,\n168,169,170,171,172,173,174,175,\n176,177,178,179,180,181,182,183,\n184,185,186,187,188,189,190,191,\n224,225,226,227,228,229,230,231,\n232,233,234,235,236,237,238,239,\n240,241,242,243,244,245,246,215,\n248,249,250,251,252,253,254,223,\n192,193,194,195,196,197,198,199,\n200,201,202,203,204,205,206,207,\n208,209,210,211,212,213,214,247,\n216,217,218,219,220,221,222,255,\n0,62,0,0,1,0,0,0,\n0,0,0,0,0,0,0,0,\n32,0,0,0,1,0,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,255,3,\n126,0,0,0,126,0,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,255,3,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,12,2,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,\n254,255,255,7,0,0,0,0,\n0,0,0,0,0,0,0,0,\n255,255,127,127,0,0,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,254,255,255,7,\n0,0,0,0,0,4,32,4,\n0,0,0,128,255,255,127,255,\n0,0,0,0,0,0,255,3,\n254,255,255,135,254,255,255,7,\n0,0,0,0,0,4,44,6,\n255,255,127,255,255,255,127,255,\n0,0,0,0,254,255,255,255,\n255,255,255,255,255,255,255,127,\n0,0,0,0,254,255,255,255,\n255,255,255,255,255,255,255,255,\n0,2,0,0,255,255,255,255,\n255,255,255,255,255,255,255,127,\n0,0,0,0,255,255,255,255,\n255,255,255,255,255,255,255,255,\n0,0,0,0,254,255,0,252,\n1,0,0,248,1,0,0,120,\n0,0,0,0,254,255,255,255,\n0,0,128,0,0,0,128,0,\n255,255,255,255,0,0,0,0,\n0,0,0,0,0,0,0,128,\n255,255,255,255,0,0,0,0,\n0,0,0,0,0,0,0,0,\n128,0,0,0,0,0,0,0,\n0,1,1,0,1,1,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,\n1,0,0,0,128,0,0,0,\n128,128,128,128,0,0,128,0,\n28,28,28,28,28,28,28,28,\n28,28,0,0,0,0,0,128,\n0,26,26,26,26,26,26,18,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,\n18,18,18,128,128,0,128,16,\n0,26,26,26,26,26,26,18,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,\n18,18,18,128,128,0,0,0,\n0,0,0,0,0,1,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,\n1,0,0,0,0,0,0,0,\n0,0,18,0,0,0,0,0,\n0,0,20,20,0,18,0,0,\n0,20,18,0,0,0,0,0,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,0,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,18,\n18,18,18,18,18,18,18,0,\n18,18,18,18,18,18,18,18\n};\n\n\n\n/*************************************************\n*              Callout state reset               *\n*************************************************/\n\n/* Several callout functions use global state to track progress. For convenience\nthis function resets all relevant state variables, for all the different\ncallouts. This ensures consistent execution when repeating a match. */\n\nstatic void\nreset_callout_state(void)\n{\nmallocs_called = 0;\nfirst_callout = TRUE;\nlast_callout_mark = NULL;\ncallout_count = 0;\n}\n\n\n\n/*************************************************\n*            Local memory functions              *\n*************************************************/\n\n/* Alternative memory functions, to test functionality. */\n\nstatic void *my_malloc(size_t size, void *data)\n{\nvoid *block;\n\n(void)data;\n\nmallocs_called++;\nif (mallocs_until_failure != INT_MAX && mallocs_until_failure-- <= 0)\n  return NULL;\n\nblock = malloc(size);\nif (show_memory && outfile != NULL)\n  {\n  if (block == NULL)\n    {\n    cfprintf(clr_test_error, outfile, \"** malloc() failed for %\" SIZ_FORM \"\\n\", size);\n    }\n  else\n    {\n    cfprintf(clr_profiling, outfile, \"malloc  %5\" SIZ_FORM, size);\n#ifdef DEBUG_SHOW_MALLOC_ADDRESSES\n    cfprintf(clr_profiling, outfile, \" %p\", block);   /* Not portable */\n#endif\n    if (malloclistptr < MALLOCLISTSIZE)\n      {\n      malloclist[malloclistptr] = block;\n      malloclistlength[malloclistptr++] = size;\n      }\n    else\n      cfprintf(clr_profiling, outfile, \" (not remembered)\");\n    fprintf(outfile, \"\\n\");\n    }\n  }\nreturn block;\n}\n\nstatic void my_free(void *block, void *data)\n{\n(void)data;\n\nif (show_memory && outfile != NULL && block != NULL)\n  {\n  uint32_t i, j;\n  BOOL found = FALSE;\n\n  cfprintf(clr_profiling, outfile, \"free\");\n  for (i = 0; i < malloclistptr; i++)\n    {\n    if (block == malloclist[i])\n      {\n      cfprintf(clr_profiling, outfile, \"    %5\" SIZ_FORM, malloclistlength[i]);\n      malloclistptr--;\n      for (j = i; j < malloclistptr; j++)\n        {\n        malloclist[j] = malloclist[j+1];\n        malloclistlength[j] = malloclistlength[j+1];\n        }\n      found = TRUE;\n      break;\n      }\n    }\n  if (!found) cfprintf(clr_profiling, outfile, \" unremembered block\");\n#ifdef DEBUG_SHOW_MALLOC_ADDRESSES\n  cfprintf(clr_profiling, outfile, \" %p\", block);  /* Not portable */\n#endif\n  fprintf(outfile, \"\\n\");\n  }\nfree(block);\n}\n\n\n\n/*************************************************\n*       Callback function for stack guard        *\n*************************************************/\n\n/* This is set up to be called from pcre2_compile() when the stackguard=n\nmodifier sets a value greater than zero. The test we do is whether the\nparenthesis nesting depth is greater than the value set by the modifier.\n\nArgument:  the current parenthesis nesting depth\nReturns:   non-zero to kill the compilation\n*/\n\nstatic int\nstack_guard(uint32_t depth, void *user_data)\n{\n(void)user_data;\nreturn depth > pat_patctl.stackguard_test;\n}\n\n\n\n/*************************************************\n*         EBCDIC support functions               *\n*************************************************/\n\n#if defined(EBCDIC)\nstatic BOOL\nprintable(uint32_t c)\n{\nif ((c >= CHAR_a && c <= CHAR_i) ||\n    (c >= CHAR_j && c <= CHAR_r) ||\n    (c >= CHAR_s && c <= CHAR_z) ||\n    (c >= CHAR_A && c <= CHAR_I) ||\n    (c >= CHAR_J && c <= CHAR_R) ||\n    (c >= CHAR_S && c <= CHAR_Z) ||\n    (c >= CHAR_0 && c <= CHAR_9))\n  return TRUE;\n\nswitch (c)\n  {\n  case CHAR_SPACE:\n  case CHAR_EXCLAMATION_MARK:\n  case CHAR_QUOTATION_MARK:\n  case CHAR_NUMBER_SIGN:\n  case CHAR_DOLLAR_SIGN:\n  case CHAR_PERCENT_SIGN:\n  case CHAR_AMPERSAND:\n  case CHAR_APOSTROPHE:\n  case CHAR_LEFT_PARENTHESIS:\n  case CHAR_RIGHT_PARENTHESIS:\n  case CHAR_ASTERISK:\n  case CHAR_PLUS:\n  case CHAR_COMMA:\n  case CHAR_MINUS:\n  case CHAR_DOT:\n  case CHAR_SLASH:\n  case CHAR_COLON:\n  case CHAR_SEMICOLON:\n  case CHAR_LESS_THAN_SIGN:\n  case CHAR_EQUALS_SIGN:\n  case CHAR_GREATER_THAN_SIGN:\n  case CHAR_QUESTION_MARK:\n  case CHAR_COMMERCIAL_AT:\n  case CHAR_LEFT_SQUARE_BRACKET:\n  case CHAR_BACKSLASH:\n  case CHAR_RIGHT_SQUARE_BRACKET:\n  case CHAR_CIRCUMFLEX_ACCENT:\n  case CHAR_UNDERSCORE:\n  case CHAR_GRAVE_ACCENT:\n  case CHAR_LEFT_CURLY_BRACKET:\n  case CHAR_VERTICAL_LINE:\n  case CHAR_RIGHT_CURLY_BRACKET:\n  case CHAR_TILDE:\n  return TRUE;\n  }\n\nreturn FALSE;\n}\n#endif\n\n#if defined(EBCDIC) && !EBCDIC_IO\nstatic void\nascii_to_ebcdic_str(uint8_t *buf, size_t len)\n{\nfor (size_t i = 0; i < len; ++i)\n  buf[i] = ascii_to_ebcdic_1047[buf[i]];\n}\n\nstatic void\nebcdic_to_ascii_str(uint8_t *buf, size_t len)\n{\nfor (size_t i = 0; i < len; ++i)\n  buf[i] = ebcdic_1047_to_ascii[buf[i]];\n}\n#endif\n\n#if defined(EBCDIC)\nstatic uint32_t\nascii_to_ebcdic(uint32_t c)\n{\nreturn (c < 256)? ascii_to_ebcdic_1047[c] : c;\n}\n\nstatic uint32_t\nebcdic_to_ascii(uint32_t c)\n{\nreturn (c < 256)? ebcdic_1047_to_ascii[c] : c;\n}\n#endif\n\n\n\n/*************************************************\n*      Convert UTF-8 character to code point     *\n*************************************************/\n\n/* This function reads one or more bytes that represent a UTF-8 character,\nand returns the codepoint of that character. Note that the function supports\nthe original UTF-8 definition of RFC 2279, allowing for values in the range 0\nto 0x7fffffff, up to 6 bytes long. This makes it possible to generate\ncodepoints greater than 0x10ffff which are useful for testing PCRE2's error\nchecking, and also for generating 32-bit non-UTF data values above the UTF\nlimit.\n\nArgument:\n  utf8bytes   a pointer to the byte vector\n  end         a pointer to the end of the byte vector\n  vptr        a pointer to an int to receive the value\n\nReturns:      >  0 => the number of bytes consumed\n              -6 to 0 => malformed UTF-8 character at offset = (-return)\n*/\n\nstatic int\nutf8_to_ord(PCRE2_SPTR8 utf8bytes, PCRE2_SPTR8 end, uint32_t *vptr)\n{\nuint32_t c = *utf8bytes++;\nuint32_t d = c;\nint i, j, s;\n\nfor (i = -1; i < 6; i++)               /* i is number of additional bytes */\n  {\n  if ((d & 0x80) == 0) break;\n  d <<= 1;\n  }\n\nif (i == -1) { *vptr = c; return 1; }  /* ascii character */\nif (i == 0 || i == 6) return 0;        /* invalid UTF-8 */\n\n/* i now has a value in the range 1-5 */\n\ns = 6*i;\nd = (c & utf8_table3[i]) << s;\n\nfor (j = 0; j < i; j++)\n  {\n  if (utf8bytes >= end) return 0;\n\n  c = *utf8bytes++;\n  if ((c & 0xc0) != 0x80) return -(j+1);\n  s -= 6;\n  d |= (c & 0x3f) << s;\n  }\n\n/* Check that encoding was the correct unique one */\n\nfor (j = 0; j < (int)utf8_table1_size; j++)\n  if (d <= (uint32_t)utf8_table1[j]) break;\nif (j != i) return -(i+1);\n\n/* Valid value */\n\n*vptr = d;\nreturn i+1;\n}\n\n\n\n#ifdef SUPPORT_PCRE2_16\n/*************************************************\n*      Convert UTF-16 character to code point     *\n*************************************************/\n\n/* This function reads one or more UTF-16 code units, and returns the\ncodepoint of that character.\n\nArgument:\n  utf16units  a pointer to the units vector\n  end         a pointer to the end of the units vector\n  vptr        a pointer to an int to receive the value\n\nReturns:      > 0  => the number of 16-bit units consumed\n              -1   => malformed UTF-16\n*/\n\nstatic int\nutf16_to_ord(PCRE2_SPTR16 utf16units, PCRE2_SPTR16 end, uint32_t *vptr)\n{\nuint32_t c = *utf16units++;\n\nif (c >= 0xdc00 && c <= 0xdfff) return -1;\n\nif (c >= 0xd800 && c < 0xdc00)\n  {\n  uint32_t c2;\n\n  if (utf16units >= end) return -1;\n\n  c2 = *utf16units++;\n  if (c2 < 0xdc00 || c2 > 0xdfff) return -1;\n  *vptr = ((c & 0x3ff) << 10) + (c2 & 0x3ff) + 0x10000;\n  return 2;\n  }\n\n*vptr = c;\nreturn 1;\n}\n#endif  /* SUPPORT_PCRE2_16 */\n\n\n\n/*************************************************\n*       Convert character value to UTF-8         *\n*************************************************/\n\n/* This function takes an integer value in the range 0 - 0x7fffffff\nand encodes it as a UTF-8 character in 0 to 6 bytes. It is needed even when the\n8-bit library is not supported, to generate UTF-8 output for non-ASCII\ncharacters.\n\nArguments:\n  cvalue     the character value\n  utf8bytes  pointer to buffer for result - at least 6 bytes long\n\nReturns:     number of characters placed in the buffer\n*/\n\nstatic int\nord_to_utf8(uint32_t cvalue, uint8_t *utf8bytes)\n{\nint i, j;\nif (cvalue > 0x7fffffffu)\n  return -1;\nfor (i = 0; i < (int)utf8_table1_size; i++)\n  if (cvalue <= (uint32_t)utf8_table1[i]) break;\nutf8bytes += i;\nfor (j = i; j > 0; j--)\n  {\n  *utf8bytes-- = 0x80 | (cvalue & 0x3f);\n  cvalue >>= 6;\n  }\n*utf8bytes = utf8_table2[i] | cvalue;\nreturn i + 1;\n}\n\n\n\n/*************************************************\n*             Print one character                *\n*************************************************/\n\n/* Print a single character either literally, or as a hex escape, and count how\nmany printed characters are used.\n\nArguments:\n  c            the character\n  utf          TRUE in UTF mode\n  f            the FILE to print to, or NULL just to count characters\n\nReturns:       number of characters written\n*/\n\nstatic int\npchar(uint32_t c, BOOL utf, FILE *f)\n{\nint n = 0;\nchar tempbuffer[16];\n\nif (PRINTABLE(c))\n  {\n  c = CHAR_OUTPUT(c);\n  if (f != NULL) fprintf(f, \"%c\", c);\n  return 1;\n  }\n\nc = CHAR_OUTPUT_HEX(c);\n\nif (c < 0x100)\n  {\n  if (utf)\n    {\n    if (f != NULL) fprintf(f, \"\\\\x{%02x}\", c);\n    return 6;\n    }\n  else\n    {\n    if (f != NULL) fprintf(f, \"\\\\x%02x\", c);\n    return 4;\n    }\n  }\n\nif (f != NULL) n = fprintf(f, \"\\\\x{%02x}\", c);\n  else n = snprintf(tempbuffer, sizeof(tempbuffer), \"\\\\x{%02x}\", c);\n\nreturn n >= 0 ? n : 0;\n}\n\n\n\n/*************************************************\n*           Expand input buffers                 *\n*************************************************/\n\n/* This function doubles the size of the input buffer and the buffer for\nkeeping an 8-bit copy of patterns (pbuffer8), and copies the current buffers to\nthe new ones.\n\nArguments: none\nReturns:   nothing (aborts if malloc() fails)\n*/\n\nstatic void\nexpand_input_buffers(void)\n{\nsize_t new_pbuffer8_size = 2*pbuffer8_size;\nuint8_t *new_buffer = (uint8_t *)malloc(new_pbuffer8_size);\nuint8_t *new_pbuffer8 = (uint8_t *)malloc(new_pbuffer8_size);\n\nif (new_buffer == NULL || new_pbuffer8 == NULL)\n  {\n  cfprintf(clr_test_error, stderr, \"pcre2test: malloc(%\" SIZ_FORM \") failed\\n\",\n          new_pbuffer8_size);\n  exit(1);\n  }\n\nmemcpy(new_buffer, buffer, pbuffer8_size);\nmemcpy(new_pbuffer8, pbuffer8, pbuffer8_size);\n\npbuffer8_size = new_pbuffer8_size;\n\nfree(buffer);\nfree(pbuffer8);\n\nbuffer = new_buffer;\npbuffer8 = new_pbuffer8;\n}\n\n\n\n/*************************************************\n*        Read or extend an input line            *\n*************************************************/\n\n/* Input lines are read into buffer, but both patterns and data lines can be\ncontinued over multiple input lines. In addition, if the buffer fills up, we\nwant to automatically expand it so as to be able to handle extremely large\nlines that are needed for certain stress tests, although this is less likely\nnow that there are repetition features for both patterns and data. When the\ninput buffer is expanded, the other two buffers must also be expanded likewise,\nand the contents of pbuffer, which are a copy of the input for callouts, must\nbe preserved (for when expansion happens for a data line). This is not the most\noptimal way of handling this, but hey, this is just a test program!\n\nArguments:\n  f            the file to read\n  start        where in buffer to start (this *must* be within buffer)\n  prompt       for stdin or readline()\n\nReturns:       pointer to the start of new data\n               could be a copy of start, or could be moved\n               NULL if no data read and EOF reached\n*/\n\nstatic uint8_t *\nextend_inputline(FILE *f, uint8_t *start, const char *prompt)\n{\nuint8_t *here = start;\n\nfor (;;)\n  {\n  size_t dlen;\n  size_t rlen = (size_t)(pbuffer8_size - (here - buffer));\n\n  /* If libreadline or libedit support is required, use readline() to read a\n  line if the input is a terminal. Note that readline() removes the trailing\n  newline, so we must put it back again, to be compatible with fgets(). */\n\n#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)\n  if (INTERACTIVE(f))\n    {\n    char promptbuf[80];\n    int snprintf_rc;\n    char *s;\n    if (should_print_colour(clr_prompt, stdout) &&\n        (snprintf_rc = snprintf(promptbuf, sizeof(promptbuf), \"\\x1b[%dm%s\\x1b[0m\", clr_prompt, prompt)) > 0 &&\n        snprintf_rc < (int)sizeof(promptbuf))\n      s = readline(promptbuf);\n    else\n      s = readline(prompt);\n    if (s == NULL) return (here == start)? NULL : start;\n    dlen = strlen(s);\n    if (dlen > rlen - 2)\n      {\n      cfprintf(clr_test_error, outfile, \"** Interactive input exceeds buffer space\\n\");\n      exit(1);\n      }\n    if (dlen > 0) add_history(s);\n    memcpy(here, s, dlen);\n    here[dlen] = '\\n';\n    here[dlen+1] = 0;\n    free(s);\n    return start;\n    }\n#endif\n\n  if (rlen > 1000)\n    {\n    int rlen_trunc = (rlen > (unsigned)INT_MAX)? INT_MAX : (int)rlen;\n\n    /* Read the next line by normal means, prompting if the file is a tty. */\n\n    if (INTERACTIVE(f)) cfprintf(clr_prompt, stdout, \"%s\", prompt);\n    if (fgets((char *)here, rlen_trunc, f) == NULL)\n      return (here == start)? NULL : start;\n\n    dlen = strlen((char *)here);\n    here += dlen;\n\n    /* Check for end of line reached. Take care not to read data from before\n    start (dlen will be zero for a file starting with a binary zero). */\n\n    if (here > start && here[-1] == '\\n') return start;\n\n    /* If we have not read a newline when reading a file, we have either filled\n    the buffer or reached the end of the file. We can detect the former by\n    checking that the string fills the buffer, and the latter by feof(). If\n    neither of these is true, it means we read a binary zero which has caused\n    strlen() to give a short length. This is a hard error because pcre2test\n    expects to work with C strings. */\n\n    if (dlen < (unsigned)rlen_trunc - 1 && !feof(f))\n      {\n      cfprintf(clr_test_error, outfile, \"** Binary zero encountered in input\\n\");\n      cfprintf(clr_test_error, outfile, \"** pcre2test run abandoned\\n\");\n      exit(1);\n      }\n    }\n\n  else\n    {\n    size_t start_offset = start - buffer;\n    size_t here_offset = here - buffer;\n    expand_input_buffers();\n    start = buffer + start_offset;\n    here = buffer + here_offset;\n    }\n  }\n\nPCRE2_UNREACHABLE(); /* Control never reaches here */\n}\n\n\n\n/*************************************************\n*         Case-independent strncmp() function    *\n*************************************************/\n\n/*\nArguments:\n  s         first string\n  t         second string\n  n         number of characters to compare\n\nReturns:    < 0, = 0, or > 0, according to the comparison\n*/\n\nstatic int\nstrncmpic(const uint8_t *s, const uint8_t *t, size_t n)\n{\nif (n > 0) do\n  {\n  int c = tolower(*s++) - tolower(*t++);\n  if (c != 0) return c;\n  }\nwhile (--n > 0);\n\nreturn 0;\n}\n\n\n\n/*************************************************\n*          Scan the main modifier list           *\n*************************************************/\n\n/* This function searches the modifier list for a long modifier name.\n\nArgument:\n  p         start of the name\n  lenp      length of the name\n\nReturns:    an index in the modifier list, or -1 on failure\n*/\n\nstatic int\nscan_modifiers(const uint8_t *p, size_t len)\n{\nint bot = 0;\nint top = MODLISTCOUNT;\n\nwhile (top > bot)\n  {\n  int mid = (bot + top)/2;\n  size_t mlen = strlen(modlist[mid].name);\n  int c = strncmp((const char *)p, modlist[mid].name, (len < mlen)? len : mlen);\n  if (c == 0)\n    {\n    if (len == mlen) return mid;\n    c = len > mlen ? 1 : -1;\n    }\n  if (c > 0) bot = mid + 1; else top = mid;\n  }\n\nreturn -1;\n}\n\n\n\n/*************************************************\n*     Determine how to print an error offset     *\n*************************************************/\n\n/* Each error code has an associated direction - does it refer\nto the characters to the right or to the left of the offset?\n\nArguments:\n  rc           the error code associated with the offset\n  erroroffset  the offset in the pattern where the error occurred\n\nReturns:      -1 if the error is unimplemented\n               0 if the offset is to be ignored (should be zero)\n               1 if the error refers to the left of the offset\n               2 if the error refers to the right of the offset\n               3 if the error refers to both sides of the offset\n*/\n\nstatic int\nerror_direction(int rc, PCRE2_SIZE erroroffset)\n{\nswitch (rc)\n  {\n  /* These cases are all for things which don't affect a specific part of the\n  pattern, and should always return zero offset. */\n\n  case PCRE2_ERROR_NULL_PATTERN:\n  case PCRE2_ERROR_BAD_OPTIONS:\n  case PCRE2_ERROR_PATTERN_TOO_LARGE:\n  case PCRE2_ERROR_HEAP_FAILED:\n  case PCRE2_ERROR_UNICODE_NOT_SUPPORTED:\n  case PCRE2_ERROR_PARENTHESES_STACK_CHECK:\n  case PCRE2_ERROR_PATTERN_TOO_COMPLICATED:\n  case PCRE2_ERROR_PATTERN_STRING_TOO_LONG:\n  case PCRE2_ERROR_NO_SURROGATES_IN_UTF16:\n  case PCRE2_ERROR_BAD_LITERAL_OPTIONS:\n  case PCRE2_ERROR_PATTERN_COMPILED_SIZE_TOO_BIG:\n  case PCRE2_ERROR_EXTRA_CASING_REQUIRES_UNICODE:\n  case PCRE2_ERROR_TURKISH_CASING_REQUIRES_UTF:\n  case PCRE2_ERROR_EXTRA_CASING_INCOMPATIBLE:\n  return 0;\n\n  /* A few exceptional cases use the errorofset to point rightwards. These are\n  used when indicating an error in a capture group or lookaround parentheses.\n  It is more user-friendly to identify the capture group by its start. */\n\n  case PCRE2_ERROR_PARENTHESES_NEST_TOO_DEEP:\n  case PCRE2_ERROR_LOOKBEHIND_NOT_FIXED_LENGTH:\n  case PCRE2_ERROR_TOO_MANY_CONDITION_BRANCHES:\n  case PCRE2_ERROR_LOOKBEHIND_TOO_COMPLICATED:\n  case PCRE2_ERROR_LOOKBEHIND_INVALID_BACKSLASH_C:\n  case PCRE2_ERROR_CALLOUT_NO_STRING_DELIMITER:\n  case PCRE2_ERROR_QUERY_BARJX_NEST_TOO_DEEP:\n  case PCRE2_ERROR_LOOKBEHIND_TOO_LONG:\n  case PCRE2_ERROR_MAX_VAR_LOOKBEHIND_EXCEEDED:\n  case PCRE2_ERROR_ECLASS_NEST_TOO_DEEP:\n  return 2;\n\n  /* The standard erroroffset should occur just after the affected portion of\n  the pattern, unless there is a good reason not to do this. Consistency is\n  good, but if there's a specific need then that's more important. */\n\n  case PCRE2_ERROR_END_BACKSLASH:\n  case PCRE2_ERROR_END_BACKSLASH_C:\n  case PCRE2_ERROR_UNKNOWN_ESCAPE:\n  case PCRE2_ERROR_QUANTIFIER_OUT_OF_ORDER:\n  case PCRE2_ERROR_QUANTIFIER_TOO_BIG:\n  case PCRE2_ERROR_MISSING_SQUARE_BRACKET:\n  case PCRE2_ERROR_ESCAPE_INVALID_IN_CLASS:\n  case PCRE2_ERROR_CLASS_RANGE_ORDER:\n  case PCRE2_ERROR_QUANTIFIER_INVALID:\n  case PCRE2_ERROR_INVALID_AFTER_PARENS_QUERY:\n  case PCRE2_ERROR_POSIX_CLASS_NOT_IN_CLASS:\n  case PCRE2_ERROR_POSIX_NO_SUPPORT_COLLATING:\n  case PCRE2_ERROR_MISSING_CLOSING_PARENTHESIS:\n  return 1;\n  case PCRE2_ERROR_BAD_SUBPATTERN_REFERENCE:\n  return 3; /* TODO I'd like to fix this, but some of the cases are _hard_ */\n  case PCRE2_ERROR_MISSING_COMMENT_CLOSING:\n  case PCRE2_ERROR_UNMATCHED_CLOSING_PARENTHESIS:\n  case PCRE2_ERROR_MISSING_CONDITION_CLOSING:\n  case PCRE2_ERROR_ZERO_RELATIVE_REFERENCE:\n  case PCRE2_ERROR_CONDITION_ASSERTION_EXPECTED:\n  case PCRE2_ERROR_BAD_RELATIVE_REFERENCE:\n  case PCRE2_ERROR_UNKNOWN_POSIX_CLASS:\n  case PCRE2_ERROR_CODE_POINT_TOO_BIG:\n  case PCRE2_ERROR_UNSUPPORTED_ESCAPE_SEQUENCE:\n  case PCRE2_ERROR_CALLOUT_NUMBER_TOO_BIG:\n  case PCRE2_ERROR_MISSING_CALLOUT_CLOSING:\n  case PCRE2_ERROR_ESCAPE_INVALID_IN_VERB:\n  case PCRE2_ERROR_UNRECOGNIZED_AFTER_QUERY_P:\n  case PCRE2_ERROR_MISSING_NAME_TERMINATOR:\n  case PCRE2_ERROR_DUPLICATE_SUBPATTERN_NAME:\n  case PCRE2_ERROR_INVALID_SUBPATTERN_NAME:\n  case PCRE2_ERROR_UNICODE_PROPERTIES_UNAVAILABLE:\n  case PCRE2_ERROR_MALFORMED_UNICODE_PROPERTY:\n  case PCRE2_ERROR_UNKNOWN_UNICODE_PROPERTY:\n  case PCRE2_ERROR_SUBPATTERN_NAME_TOO_LONG:\n  case PCRE2_ERROR_TOO_MANY_NAMED_SUBPATTERNS:\n  case PCRE2_ERROR_CLASS_INVALID_RANGE:\n  case PCRE2_ERROR_OCTAL_BYTE_TOO_BIG:\n  return 1;\n  case PCRE2_ERROR_DEFINE_TOO_MANY_BRANCHES:\n  return 2; /* TODO Not ideally placed; I'd like to fix this */\n  case PCRE2_ERROR_BACKSLASH_O_MISSING_BRACE:\n  case PCRE2_ERROR_BACKSLASH_G_SYNTAX:\n  case PCRE2_ERROR_PARENS_QUERY_R_MISSING_CLOSING:\n  case PCRE2_ERROR_VERB_UNKNOWN:\n  case PCRE2_ERROR_SUBPATTERN_NUMBER_TOO_BIG:\n  case PCRE2_ERROR_SUBPATTERN_NAME_EXPECTED:\n  case PCRE2_ERROR_INVALID_OCTAL:\n  case PCRE2_ERROR_SUBPATTERN_NAMES_MISMATCH:\n  case PCRE2_ERROR_MARK_MISSING_ARGUMENT:\n  case PCRE2_ERROR_INVALID_HEXADECIMAL:\n  case PCRE2_ERROR_BACKSLASH_C_SYNTAX:\n  case PCRE2_ERROR_BACKSLASH_K_SYNTAX:\n  case PCRE2_ERROR_BACKSLASH_N_IN_CLASS:\n  case PCRE2_ERROR_CALLOUT_STRING_TOO_LONG:\n  case PCRE2_ERROR_UNICODE_DISALLOWED_CODE_POINT:\n  return 1;\n  case PCRE2_ERROR_VERB_NAME_TOO_LONG:\n  case PCRE2_ERROR_BACKSLASH_U_CODE_POINT_TOO_BIG:\n  case PCRE2_ERROR_MISSING_OCTAL_OR_HEX_DIGITS:\n  case PCRE2_ERROR_VERSION_CONDITION_SYNTAX:\n  case PCRE2_ERROR_CALLOUT_BAD_STRING_DELIMITER:\n  case PCRE2_ERROR_BACKSLASH_C_CALLER_DISABLED:\n  case PCRE2_ERROR_BACKSLASH_C_LIBRARY_DISABLED:\n  case PCRE2_ERROR_SUPPORTED_ONLY_IN_UNICODE:\n  case PCRE2_ERROR_INVALID_HYPHEN_IN_OPTIONS:\n  case PCRE2_ERROR_ALPHA_ASSERTION_UNKNOWN:\n  case PCRE2_ERROR_SCRIPT_RUN_NOT_AVAILABLE:\n  case PCRE2_ERROR_TOO_MANY_CAPTURES:\n  case PCRE2_ERROR_MISSING_OCTAL_DIGIT:\n  return 1;\n  case PCRE2_ERROR_BACKSLASH_K_IN_LOOKAROUND:\n  return 3; /* TODO No erroroffset implemented yet, sadly */\n  case PCRE2_ERROR_OVERSIZE_PYTHON_OCTAL:\n  case PCRE2_ERROR_CALLOUT_CALLER_DISABLED:\n  case PCRE2_ERROR_ECLASS_INVALID_OPERATOR:\n  case PCRE2_ERROR_ECLASS_UNEXPECTED_OPERATOR:\n  case PCRE2_ERROR_ECLASS_EXPECTED_OPERAND:\n  case PCRE2_ERROR_ECLASS_MIXED_OPERATORS:\n  case PCRE2_ERROR_ECLASS_HINT_SQUARE_BRACKET:\n  case PCRE2_ERROR_PERL_ECLASS_UNEXPECTED_EXPR:\n  case PCRE2_ERROR_PERL_ECLASS_EMPTY_EXPR:\n  case PCRE2_ERROR_PERL_ECLASS_MISSING_CLOSE:\n  case PCRE2_ERROR_PERL_ECLASS_UNEXPECTED_CHAR:\n  case PCRE2_ERROR_EXPECTED_CAPTURE_GROUP:\n  case PCRE2_ERROR_MISSING_OPENING_PARENTHESIS:\n  case PCRE2_ERROR_MISSING_NUMBER_TERMINATOR:\n  return 1;\n\n  /* These two are a little fiddly. They can be triggered by passed-in options\n  (when erroroffset is zero), or by text in the pattern \"(*UTF)\". We only\n  indicate an pattern error in the latter case. */\n\n  case PCRE2_ERROR_UTF_IS_DISABLED:\n  case PCRE2_ERROR_UCP_IS_DISABLED:\n  return (erroroffset > 0)? 1 : 0;\n\n  case PCRE2_ERROR_UTF8_ERR1:\n  case PCRE2_ERROR_UTF8_ERR2:\n  case PCRE2_ERROR_UTF8_ERR3:\n  case PCRE2_ERROR_UTF8_ERR4:\n  case PCRE2_ERROR_UTF8_ERR5:\n  case PCRE2_ERROR_UTF8_ERR6:\n  case PCRE2_ERROR_UTF8_ERR7:\n  case PCRE2_ERROR_UTF8_ERR8:\n  case PCRE2_ERROR_UTF8_ERR9:\n  case PCRE2_ERROR_UTF8_ERR10:\n  case PCRE2_ERROR_UTF8_ERR11:\n  case PCRE2_ERROR_UTF8_ERR12:\n  case PCRE2_ERROR_UTF8_ERR13:\n  case PCRE2_ERROR_UTF8_ERR14:\n  case PCRE2_ERROR_UTF8_ERR15:\n  case PCRE2_ERROR_UTF8_ERR16:\n  case PCRE2_ERROR_UTF8_ERR17:\n  case PCRE2_ERROR_UTF8_ERR18:\n  case PCRE2_ERROR_UTF8_ERR19:\n  case PCRE2_ERROR_UTF8_ERR20:\n  case PCRE2_ERROR_UTF8_ERR21:\n  case PCRE2_ERROR_UTF16_ERR1:\n  case PCRE2_ERROR_UTF16_ERR2:\n  case PCRE2_ERROR_UTF16_ERR3:\n  case PCRE2_ERROR_UTF32_ERR1:\n  case PCRE2_ERROR_UTF32_ERR2:\n  return 2;\n  }\n\nreturn -1;\n}\n\n\n\n#ifdef SUPPORT_PCRE2_8\n/*************************************************\n*             Show something in a list           *\n*************************************************/\n\n/* This function just helps to keep the code that uses it tidier. It's used for\nvarious lists of things where there needs to be introductory text before the\nfirst item. As these calls are all in the POSIX-support code, they happen only\nwhen 8-bit mode is supported. */\n\nstatic void\nprmsg(const char **msg, const char *s)\n{\ncfprintf(clr_test_error, outfile, \"%s %s\", *msg, s);\n*msg = \"\";\n}\n#endif  /* SUPPORT_PCRE2_8 */\n\n\n\n/*************************************************\n*                Show control bits               *\n*************************************************/\n\n/* Called for mutually exclusive controls and for unsupported POSIX controls.\nBecause the bits are unique, this can be used for both pattern and data control\nwords.\n\nArguments:\n  clr         colour for output\n  controls    control bits\n  controls2   more control bits\n  before      text to print before\n\nReturns:      nothing\n*/\n\nstatic void\nshow_controls(int clr, uint32_t controls, uint32_t controls2, const char *before)\n{\ncfprintf(clr, outfile, \"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\",\n  before,\n  ((controls & CTL_AFTERTEXT) != 0)? \" aftertext\" : \"\",\n  ((controls & CTL_ALLAFTERTEXT) != 0)? \" allaftertext\" : \"\",\n  ((controls & CTL_ALLCAPTURES) != 0)? \" allcaptures\" : \"\",\n  ((controls & CTL_ALLUSEDTEXT) != 0)? \" allusedtext\" : \"\",\n  ((controls2 & CTL2_ALLVECTOR) != 0)? \" allvector\" : \"\",\n  ((controls & CTL_ALTGLOBAL) != 0)? \" altglobal\" : \"\",\n  ((controls & CTL_BINCODE) != 0)? \" bincode\" : \"\",\n  ((controls2 & CTL2_BSR_SET) != 0)? \" bsr\" : \"\",\n  ((controls & CTL_CALLOUT_CAPTURE) != 0)? \" callout_capture\" : \"\",\n  ((controls2 & CTL2_CALLOUT_EXTRA) != 0)? \" callout_extra\" : \"\",\n  ((controls & CTL_CALLOUT_INFO) != 0)? \" callout_info\" : \"\",\n  ((controls & CTL_CALLOUT_NONE) != 0)? \" callout_none\" : \"\",\n  ((controls2 & CTL2_CALLOUT_NO_WHERE) != 0)? \" callout_no_where\" : \"\",\n  ((controls & CTL_DFA) != 0)? \" dfa\" : \"\",\n  ((controls & CTL_EXPAND) != 0)? \" expand\" : \"\",\n  ((controls & CTL_FINDLIMITS) != 0)? \" find_limits\" : \"\",\n  ((controls & CTL_FINDLIMITS_NOHEAP) != 0)? \" find_limits_noheap\" : \"\",\n  ((controls2 & CTL2_FRAMESIZE) != 0)? \" framesize\" : \"\",\n  ((controls & CTL_FULLBINCODE) != 0)? \" fullbincode\" : \"\",\n  ((controls & CTL_GETALL) != 0)? \" getall\" : \"\",\n  ((controls & CTL_GLOBAL) != 0)? \" global\" : \"\",\n  ((controls2 & CTL2_HEAPFRAMES_SIZE) != 0)? \" heapframes_size\" : \"\",\n  ((controls & CTL_HEXPAT) != 0)? \" hex\" : \"\",\n  ((controls & CTL_INFO) != 0)? \" info\" : \"\",\n  ((controls & CTL_JITFAST) != 0)? \" jitfast\" : \"\",\n  ((controls & CTL_JITVERIFY) != 0)? \" jitverify\" : \"\",\n  ((controls & CTL_MARK) != 0)? \" mark\" : \"\",\n  ((controls & CTL_MEMORY) != 0)? \" memory\" : \"\",\n  ((controls2 & CTL2_NL_SET) != 0)? \" newline\" : \"\",\n  ((controls & CTL_NULLCONTEXT) != 0)? \" null_context\" : \"\",\n  ((controls2 & CTL2_NULL_REPLACEMENT) != 0)? \" null_replacement\" : \"\",\n  ((controls2 & CTL2_NULL_SUBJECT) != 0)? \" null_subject\" : \"\",\n  ((controls2 & CTL2_NULL_SUBSTITUTE_MATCH_DATA) != 0)? \" null_substitute_match_data\" : \"\",\n  ((controls & CTL_POSIX) != 0)? \" posix\" : \"\",\n  ((controls & CTL_POSIX_NOSUB) != 0)? \" posix_nosub\" : \"\",\n  ((controls & CTL_PUSH) != 0)? \" push\" : \"\",\n  ((controls & CTL_PUSHCOPY) != 0)? \" pushcopy\" : \"\",\n  ((controls & CTL_PUSHTABLESCOPY) != 0)? \" pushtablescopy\" : \"\",\n  ((controls & CTL_STARTCHAR) != 0)? \" startchar\" : \"\",\n  ((controls2 & CTL2_SUBSTITUTE_CALLOUT) != 0)? \" substitute_callout\" : \"\",\n  ((controls2 & CTL2_SUBSTITUTE_CASE_CALLOUT) != 0)? \" substitute_case_callout\" : \"\",\n  ((controls2 & CTL2_SUBSTITUTE_EXTENDED) != 0)? \" substitute_extended\" : \"\",\n  ((controls2 & CTL2_SUBSTITUTE_LITERAL) != 0)? \" substitute_literal\" : \"\",\n  ((controls2 & CTL2_SUBSTITUTE_MATCHED) != 0)? \" substitute_matched\" : \"\",\n  ((controls2 & CTL2_SUBSTITUTE_OVERFLOW_LENGTH) != 0)? \" substitute_overflow_length\" : \"\",\n  ((controls2 & CTL2_SUBSTITUTE_REPLACEMENT_ONLY) != 0)? \" substitute_replacement_only\" : \"\",\n  ((controls2 & CTL2_SUBSTITUTE_UNKNOWN_UNSET) != 0)? \" substitute_unknown_unset\" : \"\",\n  ((controls2 & CTL2_SUBSTITUTE_UNSET_EMPTY) != 0)? \" substitute_unset_empty\" : \"\",\n  ((controls & CTL_USE_LENGTH) != 0)? \" use_length\" : \"\",\n  ((controls & CTL_UTF8_INPUT) != 0)? \" utf8_input\" : \"\",\n  ((controls & CTL_ZERO_TERMINATE) != 0)? \" zero_terminate\" : \"\");\n}\n\n\n\n/*************************************************\n*                Show compile options            *\n*************************************************/\n\n/* Called from show_pattern_info() and for unsupported POSIX options.\n\nArguments:\n  clr         colour for output\n  options     an options word\n  before      text to print before\n  after       text to print after\n\nReturns:      nothing\n*/\n\nstatic void\nshow_compile_options(int clr, uint32_t options, const char *before, const char *after)\n{\nif (options == 0) cfprintf(clr, outfile, \"%s <none>%s\", before, after);\nelse cfprintf(clr, outfile, \"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\",\n  before,\n  ((options & PCRE2_ALT_BSUX) != 0)? \" alt_bsux\" : \"\",\n  ((options & PCRE2_ALT_CIRCUMFLEX) != 0)? \" alt_circumflex\" : \"\",\n  ((options & PCRE2_ALT_EXTENDED_CLASS) != 0)? \" alt_extended_class\" : \"\",\n  ((options & PCRE2_ALT_VERBNAMES) != 0)? \" alt_verbnames\" : \"\",\n  ((options & PCRE2_ALLOW_EMPTY_CLASS) != 0)? \" allow_empty_class\" : \"\",\n  ((options & PCRE2_ANCHORED) != 0)? \" anchored\" : \"\",\n  ((options & PCRE2_AUTO_CALLOUT) != 0)? \" auto_callout\" : \"\",\n  ((options & PCRE2_CASELESS) != 0)? \" caseless\" : \"\",\n  ((options & PCRE2_DOLLAR_ENDONLY) != 0)? \" dollar_endonly\" : \"\",\n  ((options & PCRE2_DOTALL) != 0)? \" dotall\" : \"\",\n  ((options & PCRE2_DUPNAMES) != 0)? \" dupnames\" : \"\",\n  ((options & PCRE2_ENDANCHORED) != 0)? \" endanchored\" : \"\",\n  ((options & PCRE2_EXTENDED) != 0)? \" extended\" : \"\",\n  ((options & PCRE2_EXTENDED_MORE) != 0)? \" extended_more\" : \"\",\n  ((options & PCRE2_FIRSTLINE) != 0)? \" firstline\" : \"\",\n  ((options & PCRE2_LITERAL) != 0)? \" literal\" : \"\",\n  ((options & PCRE2_MATCH_INVALID_UTF) != 0)? \" match_invalid_utf\" : \"\",\n  ((options & PCRE2_MATCH_UNSET_BACKREF) != 0)? \" match_unset_backref\" : \"\",\n  ((options & PCRE2_MULTILINE) != 0)? \" multiline\" : \"\",\n  ((options & PCRE2_NEVER_BACKSLASH_C) != 0)? \" never_backslash_c\" : \"\",\n  ((options & PCRE2_NEVER_UCP) != 0)? \" never_ucp\" : \"\",\n  ((options & PCRE2_NEVER_UTF) != 0)? \" never_utf\" : \"\",\n  ((options & PCRE2_NO_AUTO_CAPTURE) != 0)? \" no_auto_capture\" : \"\",\n  ((options & PCRE2_NO_AUTO_POSSESS) != 0)? \" no_auto_possess\" : \"\",\n  ((options & PCRE2_NO_DOTSTAR_ANCHOR) != 0)? \" no_dotstar_anchor\" : \"\",\n  ((options & PCRE2_NO_UTF_CHECK) != 0)? \" no_utf_check\" : \"\",\n  ((options & PCRE2_NO_START_OPTIMIZE) != 0)? \" no_start_optimize\" : \"\",\n  ((options & PCRE2_UCP) != 0)? \" ucp\" : \"\",\n  ((options & PCRE2_UNGREEDY) != 0)? \" ungreedy\" : \"\",\n  ((options & PCRE2_USE_OFFSET_LIMIT) != 0)? \" use_offset_limit\" : \"\",\n  ((options & PCRE2_UTF) != 0)? \" utf\" : \"\",\n  after);\n}\n\n\n/*************************************************\n*           Show compile extra options           *\n*************************************************/\n\n/* Called from show_pattern_info() and for unsupported POSIX options.\n\nArguments:\n  clr         colour for output\n  options     an options word\n  before      text to print before\n  after       text to print after\n\nReturns:      nothing\n*/\n\nstatic void\nshow_compile_extra_options(int clr, uint32_t options, const char *before,\n  const char *after)\n{\nif (options == 0) cfprintf(clr, outfile, \"%s <none>%s\", before, after);\nelse cfprintf(clr, outfile, \"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\",\n  before,\n  ((options & PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK) != 0) ? \" allow_lookaround_bsk\" : \"\",\n  ((options & PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES) != 0)? \" allow_surrogate_escapes\" : \"\",\n  ((options & PCRE2_EXTRA_ALT_BSUX) != 0)? \" alt_bsux\" : \"\",\n  ((options & PCRE2_EXTRA_ASCII_BSD) != 0)? \" ascii_bsd\" : \"\",\n  ((options & PCRE2_EXTRA_ASCII_BSS) != 0)? \" ascii_bss\" : \"\",\n  ((options & PCRE2_EXTRA_ASCII_BSW) != 0)? \" ascii_bsw\" : \"\",\n  ((options & PCRE2_EXTRA_ASCII_DIGIT) != 0)? \" ascii_digit\" : \"\",\n  ((options & PCRE2_EXTRA_ASCII_POSIX) != 0)? \" ascii_posix\" : \"\",\n  ((options & PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL) != 0)? \" bad_escape_is_literal\" : \"\",\n  ((options & PCRE2_EXTRA_CASELESS_RESTRICT) != 0)? \" caseless_restrict\" : \"\",\n  ((options & PCRE2_EXTRA_ESCAPED_CR_IS_LF) != 0)? \" escaped_cr_is_lf\" : \"\",\n  ((options & PCRE2_EXTRA_MATCH_WORD) != 0)? \" match_word\" : \"\",\n  ((options & PCRE2_EXTRA_MATCH_LINE) != 0)? \" match_line\" : \"\",\n  ((options & PCRE2_EXTRA_NEVER_CALLOUT) != 0)? \" never_callout\" : \"\",\n  ((options & PCRE2_EXTRA_NO_BS0) != 0)? \" no_bs0\" : \"\",\n  ((options & PCRE2_EXTRA_PYTHON_OCTAL) != 0)? \" python_octal\" : \"\",\n  ((options & PCRE2_EXTRA_TURKISH_CASING) != 0)? \" turkish_casing\" : \"\",\n  after);\n}\n\n\n/*************************************************\n*           Show optimization flags              *\n*************************************************/\n\n/*\nArguments:\n  clr         colour for output\n  flags       an options word\n  before      text to print before\n  after       text to print after\n\nReturns:      nothing\n*/\n\nstatic void\nshow_optimize_flags(int clr, uint32_t flags, const char *before, const char *after)\n{\nif (flags == 0) cfprintf(clr, outfile, \"%s<none>%s\", before, after);\nelse cfprintf(clr, outfile, \"%s%s%s%s%s%s%s\",\n  before,\n  ((flags & PCRE2_OPTIM_AUTO_POSSESS) != 0) ? \"auto_possess\" : \"\",\n  ((flags & PCRE2_OPTIM_AUTO_POSSESS) != 0 && (flags >> 1) != 0) ? \",\" : \"\",\n  ((flags & PCRE2_OPTIM_DOTSTAR_ANCHOR) != 0) ? \"dotstar_anchor\" : \"\",\n  ((flags & PCRE2_OPTIM_DOTSTAR_ANCHOR) != 0 && (flags >> 2) != 0) ? \",\" : \"\",\n  ((flags & PCRE2_OPTIM_START_OPTIMIZE) != 0) ? \"start_optimize\" : \"\",\n  after);\n}\n\n\n#ifdef SUPPORT_PCRE2_8\n/*************************************************\n*                Show match options              *\n*************************************************/\n\n/* Called for unsupported POSIX options. */\n\nstatic void\nshow_match_options(int clr, uint32_t options)\n{\ncfprintf(clr, outfile, \"%s%s%s%s%s%s%s%s%s%s%s%s%s%s\",\n  ((options & PCRE2_ANCHORED) != 0)? \" anchored\" : \"\",\n  ((options & PCRE2_COPY_MATCHED_SUBJECT) != 0)? \" copy_matched_subject\" : \"\",\n  ((options & PCRE2_DFA_RESTART) != 0)? \" dfa_restart\" : \"\",\n  ((options & PCRE2_DFA_SHORTEST) != 0)? \" dfa_shortest\" : \"\",\n  ((options & PCRE2_DISABLE_RECURSELOOP_CHECK) != 0)? \" disable_recurseloop_check\" : \"\",\n  ((options & PCRE2_ENDANCHORED) != 0)? \" endanchored\" : \"\",\n  ((options & PCRE2_NO_JIT) != 0)? \" no_jit\" : \"\",\n  ((options & PCRE2_NO_UTF_CHECK) != 0)? \" no_utf_check\" : \"\",\n  ((options & PCRE2_NOTBOL) != 0)? \" notbol\" : \"\",\n  ((options & PCRE2_NOTEMPTY) != 0)? \" notempty\" : \"\",\n  ((options & PCRE2_NOTEMPTY_ATSTART) != 0)? \" notempty_atstart\" : \"\",\n  ((options & PCRE2_NOTEOL) != 0)? \" noteol\" : \"\",\n  ((options & PCRE2_PARTIAL_HARD) != 0)? \" partial_hard\" : \"\",\n  ((options & PCRE2_PARTIAL_SOFT) != 0)? \" partial_soft\" : \"\");\n}\n#endif  /* SUPPORT_PCRE2_8 */\n\n\n\n/*************************************************\n*        Open file for save/load commands        *\n*************************************************/\n\n/* This function decodes the file name and opens the file.\n\nArguments:\n  buffptr     point after the #command\n  mode        open mode\n  fptr        points to the FILE variable\n  name        name of # command\n\nReturns:      PR_OK or PR_ABEND\n*/\n\nstatic int\nopen_file(uint8_t *buffptr, const char *mode, FILE **fptr, const char *name)\n{\nchar *endf;\nchar *filename = (char *)buffptr;\nwhile (isspace((unsigned char)*filename)) filename++;\nendf = filename + strlen(filename);\nwhile (endf > filename && isspace((unsigned char)endf[-1])) endf--;\n\nif (endf == filename)\n  {\n  cfprintf(clr_test_error, outfile, \"** File name expected after %s\\n\", name);\n  return PR_ABEND;\n  }\n\n*endf = 0;\n*fptr = fopen((const char *)filename, mode);\nif (*fptr == NULL)\n  {\n  cfprintf(clr_test_error, outfile, \"** Failed to open \\\"%s\\\": %s\\n\", filename, strerror(errno));\n  return PR_ABEND;\n  }\n\nreturn PR_OK;\n}\n\n\n\n\n/*************************************************\n*       Substitute case callout transform        *\n*************************************************/\n\n/* Function to implement our test-only custom case mappings.\nTo ease implementation, we only work in the ASCII range (so that we don't need\nto read & write UTF sequences).\nHowever, we aim to implement case mappings which fairly well represent the range\nof interesting behaviours that exist for Unicode codepoints. */\n\nstatic BOOL\ncase_transform(int to_case, int num_in, int *num_read, int *num_write,\n  uint32_t *c1, uint32_t *c2)\n{\n/* Let's have one character which aborts the substitution. */\nif (*c1 == CHAR_EXCLAMATION_MARK) return FALSE;\n\n/* Default behaviour is to read one character, and write back that same one\ncharacter (treating all characters as \"uncased\"). */\n*num_read = *num_write = 1;\n\n/* Add a normal case pair 'a' (l) <-> 'B' (t,u). Standard ASCII letter\nbehaviour, but with switched letters for testing. */\nif (*c1 == CHAR_a && to_case != PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_B;\nelse if (*c1 == CHAR_B && to_case == PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_a;\n\n/* Add a titlecased triplet 'd' (l) <-> 'D' (t) <-> 'Z' (u). Example: the\n'dz'/'Dz'/'DZ' ligature character (\"Latin Small Letter DZ\" <-> \"Latin Capital\nLetter D with Small Letter Z\" <-> \"Latin Capital Letter DZ\"). */\nelse if (*c1 == CHAR_d && to_case != PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = (to_case == PCRE2_SUBSTITUTE_CASE_TITLE_FIRST)? CHAR_D : CHAR_Z;\nelse if (*c1 == CHAR_D && to_case != PCRE2_SUBSTITUTE_CASE_TITLE_FIRST)\n  *c1 = (to_case == PCRE2_SUBSTITUTE_CASE_LOWER)? CHAR_d : CHAR_Z;\nelse if (*c1 == CHAR_Z && to_case != PCRE2_SUBSTITUTE_CASE_UPPER)\n  *c1 = (to_case == PCRE2_SUBSTITUTE_CASE_LOWER)? CHAR_d : CHAR_D;\n\n/* Expands when uppercased. Example: Esszet 'f' <-> 'SS'. */\nelse if (*c1 == CHAR_f && to_case != PCRE2_SUBSTITUTE_CASE_LOWER)\n  {\n  *c1 = CHAR_S;\n  *c2 = CHAR_S;\n  *num_write = 2;\n  }\nelse if (*c1 == CHAR_s && to_case != PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_S;\nelse if (*c1 == CHAR_S && to_case == PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_s;\n\n/* Expanding and contracting characters, 'o' <-> 'OO'. You can get this purely\ndue to UTF-8 encoding length, for example uppercase Omega (3 bytes in UTF-8)\nlowercases to 2 bytes in UTF-8. */\nelse if (num_in == 2 && *c1 == CHAR_O && *c2 == CHAR_O &&\n         to_case == PCRE2_SUBSTITUTE_CASE_LOWER)\n  {\n  *c1 = CHAR_o;\n  *num_read = 2;\n  }\nelse if (*c1 == CHAR_o && to_case != PCRE2_SUBSTITUTE_CASE_LOWER)\n  {\n  *c1 = CHAR_O;\n  *c2 = CHAR_O;\n  *num_write = 2;\n  }\nelse if (num_in == 2 && *c1 == CHAR_p && *c2 == CHAR_p &&\n         to_case != PCRE2_SUBSTITUTE_CASE_LOWER)\n  {\n  *c1 = CHAR_P;\n  *num_read = 2;\n  }\nelse if (*c1 == CHAR_P && to_case == PCRE2_SUBSTITUTE_CASE_LOWER)\n  {\n  *c1 = CHAR_p;\n  *c2 = CHAR_p;\n  *num_write = 2;\n  }\n\n/* Use 'l' -> 'Mn' or 'MN' as an expanding ligature, like 'fi' -> 'Fi' ->\n'FI'. */\nelse if (*c1 == CHAR_l && to_case != PCRE2_SUBSTITUTE_CASE_LOWER)\n  {\n  *c1 = CHAR_M;\n  *c2 = (to_case == PCRE2_SUBSTITUTE_CASE_TITLE_FIRST)? CHAR_n : CHAR_N;\n  *num_write = 2;\n  }\nelse if (*c1 == CHAR_M && to_case == PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_m;\nelse if (*c1 == CHAR_m && to_case != PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_M;\nelse if (*c1 == CHAR_N && to_case == PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_n;\nelse if (*c1 == CHAR_n && to_case != PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_N;\n\n/* An example of a context-dependent mapping, the Greek Sigma. It lowercases\ndepending on the following character. Use 'c'/'k' -> 'K'. */\nelse if ((*c1 == CHAR_c || *c1 == CHAR_k) &&\n         to_case != PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_K;\nelse if (*c1 == CHAR_K && to_case == PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = (num_in == 1 || *c2 == CHAR_SPACE)? CHAR_c : CHAR_k;\n\n/* An example of a context-dependent multi mapping, the Dutch IJ. When those\nletters appear together, they titlecase 'ij' (l) <-> 'IJ' (t) <-> 'IJ' (u).\nNamely, English titlecasing of 'ijnssel' would be 'Ijnssel' (just uppercase the\nfirst letter), but the Dutch rule is 'IJnssel'. */\nelse if (num_in == 2 && (*c1 == CHAR_i || *c1 == CHAR_I) &&\n         (*c2 == CHAR_j || *c2 == CHAR_J) &&\n         to_case == PCRE2_SUBSTITUTE_CASE_TITLE_FIRST)\n  {\n  *c1 = CHAR_I;\n  *c2 = CHAR_J;\n  *num_read = 2;\n  *num_write = 2;\n  }\nelse if (*c1 == CHAR_i && to_case != PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_I;\nelse if (*c1 == CHAR_I && to_case == PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_i;\nelse if (*c1 == CHAR_j && to_case != PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_J;\nelse if (*c1 == CHAR_J && to_case == PCRE2_SUBSTITUTE_CASE_LOWER)\n  *c1 = CHAR_j;\n\nreturn TRUE;\n}\n\n\n\n/*************************************************\n*            Show an entire ovector              *\n*************************************************/\n\n/* This function is called after partial matching or match failure, when the\n\"allvector\" modifier is set. It is a means of checking the contents of the\nentire ovector, to ensure no modification of fields that should be unchanged.\n\nArguments:\n  ovector      points to the ovector\n  oveccount    number of pairs\n\nReturns:       nothing\n*/\n\nstatic void\nshow_ovector(PCRE2_SIZE *ovector, uint32_t oveccount)\n{\nuint32_t i;\nfor (i = 0; i < 2*oveccount; i += 2)\n  {\n  PCRE2_SIZE start = ovector[i];\n  PCRE2_SIZE end = ovector[i+1];\n\n  fprintf(outfile, \"%2d: \", i/2);\n  if (start == PCRE2_UNSET && end == PCRE2_UNSET)\n    fprintf(outfile, \"<unset>\\n\");\n  else if (start == JUNK_OFFSET && end == JUNK_OFFSET)\n    fprintf(outfile, \"<unchanged>\\n\");\n  else\n    fprintf(outfile, \"%ld %ld\\n\", (unsigned long int)start,\n      (unsigned long int)end);\n  }\n}\n\n\n\n/*************************************************\n*            Mode-dependent code                 *\n*************************************************/\n\n/* All the mode-independent utilities should go above this section, so that\nthe mode-dependent code can use them.\n\nThe structure is:\n   main\n     -> calls into usage, command line parsing, top-level dispatch\n       -> calls into mode-dependent code to handle input lines\n         -> calls into mode-independent utilities\n\nThe ordering of the code blocks is therefore:\n  - mode-independent utilities (ABOVE THIS SECTION)\n  - mode-dependent code to handle input lines (THIS SECTION)\n  - usage, command line parsing, top-level dispatch (NEXT SECTION)\n  - main (AT THE BOTTOM)\n*/\n\n/* --- Repeated pre-processor inclusions to build the mode-dependent code -- */\n\n#undef PCRE2_SUFFIX\n\n#ifdef SUPPORT_PCRE2_8\n#define PCRE2_CODE_UNIT_WIDTH 8\n#define PCRE2_SUFFIX(a) G(a,8)\n#include \"pcre2_intmodedep.h\"\n#include \"pcre2test_inc.h\"\n#undef PCRE2_CODE_UNIT_WIDTH\n#undef PCRE2_SUFFIX\n#endif\n\n#ifdef SUPPORT_PCRE2_16\n#define PCRE2_CODE_UNIT_WIDTH 16\n#define PCRE2_SUFFIX(a) G(a,16)\n#include \"pcre2_intmodedep.h\"\n#include \"pcre2test_inc.h\"\n#undef PCRE2_CODE_UNIT_WIDTH\n#undef PCRE2_SUFFIX\n#endif\n\n#ifdef SUPPORT_PCRE2_32\n#define PCRE2_CODE_UNIT_WIDTH 32\n#define PCRE2_SUFFIX(a) G(a,32)\n#include \"pcre2_intmodedep.h\"\n#include \"pcre2test_inc.h\"\n#undef PCRE2_CODE_UNIT_WIDTH\n#undef PCRE2_SUFFIX\n#endif\n\n#define PCRE2_CODE_UNIT_WIDTH 0\n#include \"pcre2_intmodedep.h\"  /* Clear out the stale macros */\n#undef PCRE2_CODE_UNIT_WIDTH\n\n#define PCRE2_SUFFIX(a) a\n\n/* --------------------------- Static variables ---------------------------- */\n\n/* Declared after mode-dependent code. */\n\nstatic int test_mode = DEFAULT_TEST_MODE;\n\n/* -------------------- Mode-dependent dispatch helper --------------------- */\n\n/* When there are three supported bit widths, use a three-way ternary. */\n\n#if defined(SUPPORT_PCRE2_8) && defined(SUPPORT_PCRE2_16) && defined(SUPPORT_PCRE2_32)\n\n#define DISPATCH(opt_ret, fname, fargs) opt_ret \\\n  ((test_mode == PCRE2TEST_MODE_8)? G(fname,8) fargs : \\\n   (test_mode == PCRE2TEST_MODE_16)? G(fname,16) fargs : \\\n   G(fname,32) fargs)\n\n#elif (defined(SUPPORT_PCRE2_8) + defined(SUPPORT_PCRE2_16) + \\\n       defined(SUPPORT_PCRE2_32)) == 2\n\n/* With some macro trickery, we can make a single definition work to dispatch\nbetween any two bit widths. */\n\n#if defined(SUPPORT_PCRE2_32) && defined(SUPPORT_PCRE2_16)\n#define BITONE 32\n#define BITTWO 16\n#elif defined(SUPPORT_PCRE2_32) && defined(SUPPORT_PCRE2_8)\n#define BITONE 32\n#define BITTWO 8\n#else\n#define BITONE 16\n#define BITTWO 8\n#endif\n\n#define DISPATCH(opt_ret, fname, fargs) opt_ret \\\n  ((test_mode == G(PCRE2TEST_MODE_,BITONE))? G(fname,BITONE) fargs : \\\n   G(fname,BITTWO) fargs)\n\n#else  /* Only one bit width supported */\n\n#if defined(SUPPORT_PCRE2_32)\n#define BITONE 32\n#elif defined(SUPPORT_PCRE2_16)\n#define BITONE 16\n#else\n#define BITONE 8\n#endif\n\n#define DISPATCH(opt_ret, fname, fargs) \\\n  opt_ret (G(fname,BITONE) fargs)\n\n#endif\n\n/* -------------------- Mode-dependent dispatch wrappers ------------------- */\n\nstatic int jit_compile_test(void)\n{\nDISPATCH(return, pcre2_jit_compile_, (NULL, PCRE2_JIT_TEST_ALLOC));\n}\n\nstatic int pcre2_config(uint32_t what, void *where)\n{\nDISPATCH(return, pcre2_config_, (what, where));\n}\n\nstatic char *config_str(uint32_t what)\n{\nDISPATCH(return, config_str_, (what));\n}\n\nstatic BOOL decode_modifiers(uint8_t *p, int ctx, patctl *pctl, datctl *dctl)\n{\nDISPATCH(return, decode_modifiers_, (p, ctx, pctl, dctl));\n}\n\nstatic BOOL\nprint_error_message_file(FILE *file, int errorcode, const char *before,\n  const char *after, BOOL badcode_ok)\n{\nDISPATCH(return, print_error_message_file_, \\\n  (file, errorcode, before, after, badcode_ok));\n}\n\nstatic int process_command(void)\n{\nDISPATCH(return, process_command_, ());\n}\n\nstatic int process_pattern(void)\n{\nDISPATCH(return, process_pattern_, ());\n}\n\nstatic BOOL have_active_pattern(void)\n{\nDISPATCH(return, have_active_pattern_, ());\n}\n\nstatic void free_active_pattern(void)\n{\nDISPATCH(, free_active_pattern_, ());\n}\n\nstatic int process_data(void)\n{\nDISPATCH(return, process_data_, ());\n}\n\nstatic void init_globals(void)\n{\nDISPATCH(, init_globals_, ());\n}\n\nstatic void free_globals(void)\n{\nDISPATCH(, free_globals_, ());\n}\n\nstatic void unittest(void)\n{\nDISPATCH(, unittest_, ());\n}\n\n#undef DISPATCH\n#undef BITONE\n#undef BITTWO\n\n\n\n/*************************************************\n*               Print PCRE2 version              *\n*************************************************/\n\nstatic void\nprint_version(FILE *f, BOOL include_mode)\n{\nchar *buf = config_str(PCRE2_CONFIG_VERSION);\nfprintf(f, \"PCRE2 version %s\", buf);\nif (include_mode)\n  {\n  fprintf(f, \" (%d-bit)\", test_mode);\n  }\nfprintf(f, \"\\n\");\nfree(buf);\n}\n\n\n\n/*************************************************\n*               Print Unicode version            *\n*************************************************/\n\nstatic void\nprint_unicode_version(FILE *f)\n{\nchar *buf = config_str(PCRE2_CONFIG_UNICODE_VERSION);\nfprintf(f, \"Unicode version %s\", buf);\nfree(buf);\n}\n\n\n\n/*************************************************\n*               Print JIT target                 *\n*************************************************/\n\nstatic void\nprint_jit_target(FILE *f)\n{\nchar *buf = config_str(PCRE2_CONFIG_JITTARGET);\nfputs(buf, f);\nfree(buf);\n}\n\n\n\n/*************************************************\n*       Print newline configuration              *\n*************************************************/\n\n/* Output is always to stdout.\n\nArguments:\n  rc         the return code from PCRE2_CONFIG_NEWLINE\n  isc        TRUE if called from \"-C newline\"\nReturns:     nothing\n*/\n\nstatic void\nprint_newline_config(uint32_t optval, BOOL isc)\n{\nif (!isc) printf(\"  Default newline sequence is \");\nif (optval < sizeof(newlines)/sizeof(char *))\n  printf(\"%s\\n\", newlines[optval]);\nelse\n  printf(\"a non-standard value: %d\\n\", optval);\n}\n\n\n\n/*************************************************\n*             Usage function                     *\n*************************************************/\n\nstatic void\nusage(void)\n{\nprintf(\"Usage:     pcre2test [options] [<input file> [<output file>]]\\n\\n\");\nprintf(\"Input and output default to stdin and stdout.\\n\");\n#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)\nprintf(\"If input is a terminal, readline() is used to read from it.\\n\");\n#else\nprintf(\"This version of pcre2test is not linked with readline().\\n\");\n#endif\nprintf(\"\\nOptions:\\n\");\n#ifdef SUPPORT_PCRE2_8\nprintf(\"  -8            use the 8-bit library\\n\");\n#endif\n#ifdef SUPPORT_PCRE2_16\nprintf(\"  -16           use the 16-bit library\\n\");\n#endif\n#ifdef SUPPORT_PCRE2_32\nprintf(\"  -32           use the 32-bit library\\n\");\n#endif\nprintf(\"  -ac           set default pattern modifier PCRE2_AUTO_CALLOUT\\n\");\nprintf(\"  -AC           as -ac, but also set subject 'callout_extra' modifier\\n\");\nprintf(\"  -b            set default pattern modifier 'fullbincode'\\n\");\nprintf(\"  -C            show PCRE2 compile-time options and exit\\n\");\nprintf(\"  -C arg        show a specific compile-time option and exit with its\\n\");\nprintf(\"                  value if numeric (else 0). The arg can be:\\n\");\nprintf(\"     backslash-C    use of \\\\C is enabled [0, 1]\\n\");\nprintf(\"     bsr            \\\\R type [ANYCRLF, ANY]\\n\");\nprintf(\"     ebcdic         compiled for EBCDIC character code [0, 1]\\n\");\nprintf(\"     ebcdic-io      if compiled for EBCDIC, whether pcre2test's input\\n\");\nprintf(\"                      and output is EBCDIC or ASCII [0, 1]\\n\");\nprintf(\"     ebcdic-nl25    if compiled for EBCDIC, whether NL is 0x25 [0, 1]\\n\");\nprintf(\"     jit            just-in-time compiler supported [0, 1]\\n\");\nprintf(\"     jitusable      test JIT usability [0, 1, 2, 3]\\n\");\nprintf(\"     linksize       internal link size [2, 3, 4]\\n\");\nprintf(\"     newline        newline type [CR, LF, CRLF, ANYCRLF, ANY, NUL]\\n\");\nprintf(\"     pcre2-8        8 bit library support enabled [0, 1]\\n\");\nprintf(\"     pcre2-16       16 bit library support enabled [0, 1]\\n\");\nprintf(\"     pcre2-32       32 bit library support enabled [0, 1]\\n\");\nprintf(\"     unicode        Unicode and UTF support enabled [0, 1]\\n\");\nprintf(\"  --colo[u]r[=<always,auto,never>]\\n\");\nprintf(\"                show output in colour\\n\");\nprintf(\"  -d            set default pattern modifier 'debug'\\n\");\nprintf(\"  -dfa          set default subject modifier 'dfa'\\n\");\nprintf(\"  -E            preprocess input only (#if ... #endif)\\n\");\nprintf(\"  -error <n,m,..>  show messages for error numbers, then exit\\n\");\nprintf(\"  -help         show usage information\\n\");\nprintf(\"  -i            set default pattern modifier 'info'\\n\");\nprintf(\"  -jit          set default pattern modifier 'jit'\\n\");\nprintf(\"  -jitfast      set default pattern modifier 'jitfast'\\n\");\nprintf(\"  -jitverify    set default pattern modifier 'jitverify'\\n\");\nprintf(\"  -LM           list pattern and subject modifiers, then exit\\n\");\nprintf(\"  -LP           list non-script properties, then exit\\n\");\nprintf(\"  -LS           list supported scripts, then exit\\n\");\nprintf(\"  -malloc       exercise malloc() failures\\n\");\nprintf(\"  -q            quiet: do not output PCRE2 version number at start\\n\");\nprintf(\"  -pattern <s>  set default pattern modifier fields\\n\");\nprintf(\"  -subject <s>  set default subject modifier fields\\n\");\nprintf(\"  -S <n>        set stack size to <n> mebibytes\\n\");\nprintf(\"  -t [<n>]      time compilation and execution, repeating <n> times\\n\");\nprintf(\"  -tm [<n>]     time execution (matching) only, repeating <n> times\\n\");\nprintf(\"  -T            same as -t, but show total times at the end\\n\");\nprintf(\"  -TM           same as -tm, but show total time at the end\\n\");\nprintf(\"  -unittest     run unit tests, then exit\\n\");\nprintf(\"  -v|--version  show PCRE2 version and exit\\n\");\n}\n\n\n\n/*************************************************\n*             Handle -C option                   *\n*************************************************/\n\n/* This option outputs configuration options and sets an appropriate return\ncode when asked for a single option. The code is abstracted into a separate\nfunction because of its size.\n\nMost, but not all, of the data is independent of the test mode.\n\nArgument:   an option name or NULL\nReturns:    the return code\n*/\n\nstatic int\nc_option(const char *arg)\n{\nuint32_t optval;\nunsigned int i = COPTLISTCOUNT;\nint rc, yield = 0;\n\nif (arg != NULL && arg[0] != '-')\n  {\n  for (i = 0; i < COPTLISTCOUNT; i++)\n    if (strcmp(arg, coptlist[i].name) == 0) break;\n\n  if (i >= COPTLISTCOUNT)\n    {\n    cfprintf(clr_test_error, stderr, \"pcre2test: Unknown -C option \\\"%s\\\"\\n\", arg);\n    return 0;\n    }\n\n  switch (coptlist[i].type)\n    {\n    case CONF_BSR:\n    (void)pcre2_config(coptlist[i].value, &optval);\n    printf(\"%s\\n\", (optval == PCRE2_BSR_ANYCRLF)? \"ANYCRLF\" : \"ANY\");\n    break;\n\n    case CONF_FIX:\n    yield = coptlist[i].value;\n    printf(\"%d\\n\", yield);\n    break;\n\n    case CONF_INT:\n    (void)pcre2_config(coptlist[i].value, &yield);\n    printf(\"%d\\n\", yield);\n    break;\n\n    case CONF_NL:\n    (void)pcre2_config(coptlist[i].value, &optval);\n    print_newline_config(optval, TRUE);\n    break;\n\n    case CONF_JU:\n    rc = jit_compile_test();\n    switch(rc)\n      {\n      case 0: yield = 0; break;\n      case PCRE2_ERROR_NOMEMORY: yield = 1; break;\n      case PCRE2_ERROR_JIT_UNSUPPORTED: yield = 2; break;\n      default: yield = 3; break;\n      }\n    printf(\"%d\\n\", yield);\n    break;\n    }\n\n/* For VMS, return the value by setting a symbol, for certain values only. This\nis contributed code which the PCRE2 developers have no means of testing. */\n\n#ifdef __VMS\n\n/* This is the original code provided by the first VMS contributor. */\n#ifdef NEVER\n  if (copytlist[i].type == CONF_FIX || coptlist[i].type == CONF_INT)\n    {\n    char ucname[16];\n    strcpy(ucname, coptlist[i].name);\n    for (i = 0; ucname[i] != 0; i++) ucname[i] = toupper[ucname[i]];\n    vms_setsymbol(ucname, 0, optval);\n    }\n#endif\n\n/* This is the new code, provided by a second VMS contributor. */\n\n  if (coptlist[i].type == CONF_FIX || coptlist[i].type == CONF_INT)\n    {\n    char nam_buf[22], val_buf[4];\n    $DESCRIPTOR(nam, nam_buf);\n    $DESCRIPTOR(val, val_buf);\n\n    strcpy(nam_buf, coptlist[i].name);\n    nam.dsc$w_length = strlen(nam_buf);\n    sprintf(val_buf, \"%d\", yield);\n    val.dsc$w_length = strlen(val_buf);\n    lib$set_symbol(&nam, &val);\n    }\n#endif  /* __VMS */\n\n  return yield;\n  }\n\n/* No argument for -C: output all configuration information. */\n\nprint_version(stdout, FALSE);\nprintf(\"Compiled with\\n\");\n\n#ifdef EBCDIC\nprintf(\"  EBCDIC code support: LF is 0x%02x\\n\", CHAR_LF);\n#if defined NATIVE_ZOS\nprintf(\"  EBCDIC code page %s or similar\\n\", pcrz_cpversion());\n#endif\n#if EBCDIC_IO\nprintf(\"  Input/output for pcre2test is EBCDIC\\n\");\n#else\nprintf(\"  Input/output for pcre2test is ASCII, not EBCDIC\\n\");\n#endif\n#endif\n\n(void)pcre2_config(PCRE2_CONFIG_COMPILED_WIDTHS, &optval);\nif (optval & 1) printf(\"  8-bit support\\n\");\nif (optval & 2) printf(\"  16-bit support\\n\");\nif (optval & 4) printf(\"  32-bit support\\n\");\n\n#ifdef SUPPORT_VALGRIND\nprintf(\"  Valgrind support\\n\");\n#endif\n\n(void)pcre2_config(PCRE2_CONFIG_UNICODE, &optval);\nif (optval != 0)\n  {\n  printf(\"  UTF and UCP support (\");\n  print_unicode_version(stdout);\n  printf(\")\\n\");\n  }\nelse printf(\"  No Unicode support\\n\");\n\n(void)pcre2_config(PCRE2_CONFIG_JIT, &optval);\nif (optval != 0)\n  {\n  printf(\"  Just-in-time compiler support\\n\");\n  printf(\"    Architecture: \");\n  print_jit_target(stdout);\n  printf(\"\\n\");\n\n  printf(\"    Can allocate executable memory: \");\n  rc = jit_compile_test();\n  switch(rc)\n    {\n    case 0:\n    printf(\"Yes\\n\");\n    break;\n\n    case PCRE2_ERROR_NOMEMORY:\n    printf(\"No (so cannot work)\\n\");\n    break;\n\n    default:\n    cfprintf(clr_test_error, stdout, \"\\n** Unexpected return %d from \"\n      \"pcre2_jit_compile(NULL, PCRE2_JIT_TEST_ALLOC)\\n\", rc);\n    cfprintf(clr_test_error, stdout, \"** Should not occur\\n\");\n    yield = 1;\n    break;\n    }\n  }\nelse\n  {\n  printf(\"  No just-in-time compiler support\\n\");\n  }\n\n(void)pcre2_config(PCRE2_CONFIG_NEWLINE, &optval);\nprint_newline_config(optval, FALSE);\n(void)pcre2_config(PCRE2_CONFIG_BSR, &optval);\nprintf(\"  \\\\R matches %s\\n\",\n  (optval == PCRE2_BSR_ANYCRLF)? \"CR, LF, or CRLF only\" :\n                                 \"all Unicode newlines\");\n(void)pcre2_config(PCRE2_CONFIG_NEVER_BACKSLASH_C, &optval);\nprintf(\"  \\\\C is %ssupported\\n\", optval? \"not \":\"\");\nprintf(\"  Internal link size\\n\");\n(void)pcre2_config(PCRE2_CONFIG_LINKSIZE, &optval);\nprintf(\"    Requested = %d\\n\", optval);\n(void)pcre2_config(PCRE2_CONFIG_EFFECTIVE_LINKSIZE, &optval);\nprintf(\"    Effective = %d\\n\", optval);\n(void)pcre2_config(PCRE2_CONFIG_PARENSLIMIT, &optval);\nprintf(\"  Parentheses nest limit = %d\\n\", optval);\n(void)pcre2_config(PCRE2_CONFIG_HEAPLIMIT, &optval);\nprintf(\"  Default heap limit = %d kibibytes\\n\", optval);\n(void)pcre2_config(PCRE2_CONFIG_MATCHLIMIT, &optval);\nprintf(\"  Default match limit = %d\\n\", optval);\n(void)pcre2_config(PCRE2_CONFIG_DEPTHLIMIT, &optval);\nprintf(\"  Default depth limit = %d\\n\", optval);\n\n#if defined SUPPORT_LIBREADLINE\nprintf(\"  pcre2test has libreadline support\\n\");\n#elif defined SUPPORT_LIBEDIT\nprintf(\"  pcre2test has libedit support\\n\");\n#else\nprintf(\"  pcre2test has neither libreadline nor libedit support\\n\");\n#endif\n\nreturn yield;\n}\n\n\n/*************************************************\n*      Format one property/script list item      *\n*************************************************/\n\n#ifdef SUPPORT_UNICODE\nstatic void\nformat_list_item(int16_t *ff, char *buff, BOOL isscript)\n{\nint count;\nint maxi = 0;\nconst char *maxs = \"\";\nsize_t max = 0;\n\nfor (count = 0; ff[count] >= 0; count++) {}\n\n/* Find the name to put first. For scripts, any 3-character name is chosen.\nFor non-scripts, or if there is no 3-character name, take the longest. */\n\nfor (int i = 0; ff[i] >= 0; i++)\n  {\n  const char *s = PRIV(utt_names) + ff[i];\n  size_t len = strlen(s);\n  if (isscript && len == 3)\n    {\n    maxi = i;\n    max = len;\n    maxs = s;\n    break;\n    }\n  else if (len > max)\n    {\n    max = len;\n    maxi = i;\n    maxs = s;\n    }\n  }\n\nstrcpy(buff, maxs);\nbuff += max;\n\nif (count > 1)\n  {\n  const char *sep = \" (\";\n  for (int i = 0; i < count; i++)\n    {\n    if (i == maxi) continue;\n    buff += sprintf(buff, \"%s%s\", sep, PRIV(utt_names) + ff[i]);\n    sep = \", \";\n    }\n  (void)sprintf(buff, \")\");\n  }\n}\n#endif  /* SUPPORT_UNICODE */\n\n\n\n/*************************************************\n*        Display scripts or properties           *\n*************************************************/\n\n#define MAX_SYNONYMS 5\n\nstatic void\ndisplay_properties(BOOL wantscripts)\n{\n#ifndef SUPPORT_UNICODE\n(void)wantscripts;\nprintf(\"** This version of PCRE2 was compiled without Unicode support.\\n\");\n#else\n\nuint16_t seentypes[1024];\nuint16_t seenvalues[1024];\nint seencount = 0;\nint16_t found[256][MAX_SYNONYMS + 1];\nint fc = 0;\nint colwidth = 40;\nint n = wantscripts? ucp_Script_Count : ucp_Bprop_Count;\n\nfor (size_t i = 0; i < PRIV(utt_size); i++)\n  {\n  int k;\n  int m = 0;\n  int16_t *fv;\n  const ucp_type_table *t = PRIV(utt) + i;\n  unsigned int value = t->value;\n\n  if (wantscripts)\n    {\n    if (t->type != PT_SC && t->type != PT_SCX) continue;\n    }\n  else\n    {\n    if (t->type != PT_BOOL) continue;\n    }\n\n  for (k = 0; k < seencount; k++)\n    {\n    if (t->type == seentypes[k] && t->value == seenvalues[k]) break;\n    }\n  if (k < seencount) continue;\n\n  seentypes[seencount] = t->type;\n  seenvalues[seencount++] = t->value;\n\n  fv = found[fc++];\n  fv[m++] = t->name_offset;\n\n  for (size_t j = i + 1; j < PRIV(utt_size); j++)\n    {\n    const ucp_type_table *tt = PRIV(utt) + j;\n    if (tt->type != t->type || tt->value != value) continue;\n    if (m >= MAX_SYNONYMS)\n      cfprintf(clr_test_error, stdout, \"** Too many synonyms: %s ignored\\n\",\n        PRIV(utt_names) + tt->name_offset);\n    else fv[m++] = tt->name_offset;\n    }\n\n  fv[m] = -1;\n  }\n\nprintf(\"-------------------------- SUPPORTED %s --------------------------\\n\\n\",\n  wantscripts? \"SCRIPTS\" : \"PROPERTIES\");\n\nif (!wantscripts) printf(\n\"This release of PCRE2 supports Unicode's general category properties such\\n\"\n\"as Lu (upper case letter), bi-directional properties such as Bidi_Class,\\n\"\n\"and the following binary (yes/no) properties:\\n\\n\");\n\n\nfor (int k = 0; k < (n+1)/2; k++)\n  {\n  int x;\n  char buff1[128];\n  char buff2[128];\n\n  format_list_item(found[k], buff1, wantscripts);\n  x = k + (n+1)/2;\n  if (x < n) format_list_item(found[x], buff2, wantscripts);\n    else buff2[0] = 0;\n\n  x = printf(\"%s\", buff1);\n  while (x++ < colwidth) printf(\" \");\n  printf(\"%s\\n\", buff2);\n  }\n\n#endif  /* SUPPORT_UNICODE */\n}\n\n\n\n/*************************************************\n*              Display one modifier              *\n*************************************************/\n\nstatic void\ndisplay_one_modifier(modstruct *m, BOOL for_pattern)\n{\nuint32_t c = (!for_pattern && (m->which == MOD_PND || m->which == MOD_PNDP))?\n  '*' : ' ';\nprintf(\"%c%s\", c, m->name);\nfor (size_t i = 0; i < C1MODLISTCOUNT; i++)\n  {\n  if (strcmp(m->name, c1modlist[i].fullname) == 0)\n    printf(\" (%c)\", c1modlist[i].onechar);\n  }\n}\n\n\n\n/*************************************************\n*       Display pattern or subject modifiers     *\n*************************************************/\n\n/* In order to print in two columns, first scan without printing to get a list\nof the modifiers that are required.\n\nArguments:\n  for_pattern   TRUE for pattern modifiers, FALSE for subject modifiers\n  title         string to be used in title\n\nReturns:        nothing\n*/\n\nstatic void\ndisplay_selected_modifiers(BOOL for_pattern, const char *title)\n{\nuint32_t i, j;\nuint32_t n = 0;\nuint32_t list[MODLISTCOUNT];\nuint32_t extra[MODLISTCOUNT];\n\nfor (i = 0; i < MODLISTCOUNT; i++)\n  {\n  BOOL is_pattern = TRUE;\n  modstruct *m = modlist + i;\n\n  switch (m->which)\n    {\n    case MOD_CTC:       /* Compile context */\n    case MOD_PAT:       /* Pattern */\n    case MOD_PATP:      /* Pattern, OK for Perl-compatible test */\n    break;\n\n    /* The MOD_PND and MOD_PNDP modifiers are precisely those that affect\n    subjects, but can be given with a pattern. We list them as subject\n    modifiers, but marked with an asterisk.*/\n\n    case MOD_CTM:       /* Match context */\n    case MOD_DAT:       /* Subject line */\n    case MOD_DATP:      /* Subject line, OK for Perl-compatible test */\n    case MOD_PND:       /* As PD, but not default pattern */\n    case MOD_PNDP:      /* As PND, OK for Perl-compatible test */\n    is_pattern = FALSE;\n    break;\n\n    case MOD_PD:        /* Pattern or subject */\n    case MOD_PDP:       /* As PD, OK for Perl-compatible test */\n    is_pattern = for_pattern;\n    break;\n\n    default:\n    printf(\"** Unknown type for modifier \\\"%s\\\"\\n\", m->name);\n    PCRE2_DEBUG_UNREACHABLE();\n    exit(1);\n    }\n\n  if (for_pattern == is_pattern)\n    {\n    extra[n] = 0;\n    for (size_t k = 0; k < C1MODLISTCOUNT; k++)\n      {\n      if (strcmp(m->name, c1modlist[k].fullname) == 0)\n        {\n        extra[n] += 4;\n        break;\n        }\n      }\n    list[n++] = i;\n    }\n  }\n\n/* Now print from the list in two columns. */\n\nprintf(\"-------------- %s MODIFIERS --------------\\n\", title);\n\nfor (i = 0, j = (n+1)/2; i < (n+1)/2; i++, j++)\n  {\n  modstruct *m = modlist + list[i];\n  display_one_modifier(m, for_pattern);\n  if (j < n)\n    {\n    size_t k = 27 - strlen(m->name) - extra[i];\n    while (k-- > 0) printf(\" \");\n    display_one_modifier(modlist + list[j], for_pattern);\n    }\n  printf(\"\\n\");\n  }\n}\n\n\n\n/*************************************************\n*          Display the list of modifiers         *\n*************************************************/\n\nstatic void\ndisplay_modifiers(void)\n{\nprintf(\n  \"An asterisk on a subject modifier means that it may be given on a pattern\\n\"\n  \"line, in order to apply to all subjects matched by that pattern. Modifiers\\n\"\n  \"that are listed for both patterns and subjects have different effects in\\n\"\n  \"each case.\\n\\n\");\ndisplay_selected_modifiers(TRUE, \"PATTERN\");\nprintf(\"\\n\");\ndisplay_selected_modifiers(FALSE, \"SUBJECT\");\n}\n\n\n\n/*************************************************\n*                Main Program                    *\n*************************************************/\n\nint\nmain(int argc, char **argv)\n{\nuint32_t yield = 0;\nuint32_t op = 1;\nBOOL notdone = TRUE;\nBOOL quiet = FALSE;\nBOOL showtotaltimes = FALSE;\nBOOL skipping = FALSE;\nBOOL skipping_endif = FALSE;\nchar *arg_subject = NULL;\nchar *arg_pattern = NULL;\nchar *arg_error = NULL;\n\n/* Get buffers from malloc() so that valgrind will check their misuse when\ndebugging. They grow automatically when very long lines are read. The 16-\nand 32-bit buffers (pbuffer16, pbuffer32) are obtained only if needed. */\n\nbuffer = (uint8_t *)malloc(pbuffer8_size);\npbuffer8 = (uint8_t *)malloc(pbuffer8_size);\n\n/* The following  _setmode() stuff is some Windows magic that tells its runtime\nlibrary to translate CRLF into a single LF character. At least, that's what\nI've been told: never having used Windows I take this all on trust. Originally\nit set 0x8000, but then I was advised that _O_BINARY was better. */\n\n#if defined(_WIN32) || defined(WIN32)\n_setmode( _fileno( stdout ), _O_BINARY );\n#endif\n\n/* Initialization that does not depend on the running mode. */\n\nlocale_name[0] = 0;\n\npatctl_zero(&def_patctl);\ndatctl_zero(&def_datctl);\n\n/* Scan command line options. */\n\nwhile (argc > 1 && argv[op][0] == '-' && argv[op][1] != 0)\n  {\n  char *endptr;\n  char *arg = argv[op];\n  unsigned long uli;\n\n  /* List modifiers and exit. */\n\n  if (strcmp(arg, \"-LM\") == 0)\n    {\n    display_modifiers();\n    goto EXIT;\n    }\n\n  /* List properties and exit */\n\n  if (strcmp(arg, \"-LP\") == 0)\n    {\n    display_properties(FALSE);\n    goto EXIT;\n    }\n\n  /* List scripts and exit */\n\n  if (strcmp(arg, \"-LS\") == 0)\n    {\n    display_properties(TRUE);\n    goto EXIT;\n    }\n\n  /* Perform additional edge-case and error-handling tests of public API\n  functions, which wouldn't otherwise be covered by the standard use of the API\n  in pcre2test. */\n\n  if (strcmp(arg, \"-unittest\") == 0)\n    {\n    unittest();\n    goto EXIT;\n    }\n\n  /* Display and/or set return code for configuration options. */\n\n  if (strcmp(arg, \"-C\") == 0)\n    {\n    yield = c_option(argv[op + 1]);\n    goto EXIT;\n    }\n\n  /* Select operating mode. */\n\n  if (strcmp(arg, \"-8\") == 0)\n    {\n#ifdef SUPPORT_PCRE2_8\n    test_mode = PCRE2TEST_MODE_8;\n#else\n    cfprintf(clr_test_error, stderr,\n      \"pcre2test: This version of PCRE2 was built without 8-bit support\\n\");\n    exit(1);\n#endif\n    }\n\n  else if (strcmp(arg, \"-16\") == 0)\n    {\n#ifdef SUPPORT_PCRE2_16\n    test_mode = PCRE2TEST_MODE_16;\n#else\n    cfprintf(clr_test_error, stderr,\n      \"pcre2test: This version of PCRE2 was built without 16-bit support\\n\");\n    exit(1);\n#endif\n    }\n\n  else if (strcmp(arg, \"-32\") == 0)\n    {\n#ifdef SUPPORT_PCRE2_32\n    test_mode = PCRE2TEST_MODE_32;\n#else\n    cfprintf(clr_test_error, stderr,\n      \"pcre2test: This version of PCRE2 was built without 32-bit support\\n\");\n    exit(1);\n#endif\n    }\n\n  /* Set preprocess-only (only handle #if ... #endif) */\n\n  else if (strcmp(arg, \"-E\") == 0) preprocess_only = TRUE;\n\n  /* Set quiet (no version verification) */\n\n  else if (strcmp(arg, \"-q\") == 0) quiet = TRUE;\n\n  /* Set system stack size */\n\n  else if (strcmp(arg, \"-S\") == 0 && argc > 2 &&\n      ((uli = strtoul(argv[op+1], &endptr, 10)), *endptr == 0))\n    {\n    /* On Win32, we exclude setrlimit() regardless of whether it may have been detected\n    due to some Unix emulation environment. On Haiku and z/OS, setrlimit() is reported\n    to be detected (with the function linking successfully and RLIMIT_STACK defined in\n    the headers), but it does not actually work, so we exclude it as well. */\n#if defined(_WIN32) || defined(WIN32) || !defined(HAVE_SETRLIMIT) || \\\n  defined(__HAIKU__) || defined(NATIVE_ZOS)\n    cfprintf(clr_test_error, stderr, \"pcre2test: -S is not supported on this OS\\n\");\n    exit(1);\n#else\n    int rc = 0;\n    uint32_t stack_size;\n    struct rlimit rlim, rlim_old;\n    if (uli > INT32_MAX / (1024 * 1024))\n      {\n      cfprintf(clr_test_error, stderr, \"pcre2test: Argument for -S is too big\\n\");\n      exit(1);\n      }\n    stack_size = (uint32_t)uli;\n    getrlimit(RLIMIT_STACK, &rlim_old);\n    rlim = rlim_old;\n    rlim.rlim_cur = stack_size * 1024 * 1024;\n    if (rlim.rlim_max != RLIM_INFINITY && rlim.rlim_cur > rlim.rlim_max)\n      {\n      cfprintf(clr_test_error, stderr,\n        \"pcre2test: requested stack size %luMiB is greater than hard limit \",\n          (unsigned long int)stack_size);\n      if (rlim.rlim_max % (1024*1024) == 0)\n        cfprintf(clr_test_error, stderr, \"%luMiB\\n\", (unsigned long)(rlim.rlim_max/(1024*1024)));\n      else if (rlim.rlim_max % 1024 == 0)\n        cfprintf(clr_test_error, stderr, \"%luKiB\\n\", (unsigned long)(rlim.rlim_max/1024));\n      else\n        cfprintf(clr_test_error, stderr, \"%lu bytes\\n\", (unsigned long)(rlim.rlim_max));\n      exit(1);\n      }\n    if (rlim_old.rlim_cur != RLIM_INFINITY && rlim_old.rlim_cur <= INT32_MAX &&\n        rlim.rlim_cur > rlim_old.rlim_cur)\n      rc = setrlimit(RLIMIT_STACK, &rlim);\n    if (rc != 0)\n      {\n      cfprintf(clr_test_error, stderr, \"pcre2test: setting stack size %luMiB failed: %s\\n\",\n        (unsigned long int)stack_size, strerror(errno));\n      exit(1);\n      }\n    op++;\n    argc--;\n#endif\n    }\n\n  /* Set some common pattern and subject controls */\n\n  else if (strcmp(arg, \"-AC\") == 0)\n    {\n    def_patctl.options |= PCRE2_AUTO_CALLOUT;\n    def_datctl.control2 |= CTL2_CALLOUT_EXTRA;\n    }\n  else if (strcmp(arg, \"-ac\") == 0)  def_patctl.options |= PCRE2_AUTO_CALLOUT;\n  else if (strcmp(arg, \"-b\") == 0)   def_patctl.control |= CTL_FULLBINCODE;\n  else if (strcmp(arg, \"-d\") == 0)   def_patctl.control |= CTL_DEBUG;\n  else if (strcmp(arg, \"-dfa\") == 0) def_datctl.control |= CTL_DFA;\n  else if (strcmp(arg, \"-i\") == 0)   def_patctl.control |= CTL_INFO;\n  else if (strcmp(arg, \"-jit\") == 0 || strcmp(arg, \"-jitverify\") == 0 ||\n           strcmp(arg, \"-jitfast\") == 0)\n    {\n    if (arg[4] == 'v') def_patctl.control |= CTL_JITVERIFY;\n      else if (arg[4] == 'f') def_patctl.control |= CTL_JITFAST;\n    def_patctl.jit = JIT_DEFAULT;  /* full & partial */\n#ifndef SUPPORT_JIT\n    cfprintf(clr_test_error, stderr, \"pcre2test: Warning: JIT support is not available: \"\n                    \"-jit[fast|verify] calls functions that do nothing.\\n\");\n#endif\n    }\n\n  /* Set timing parameters */\n\n  else if (strcmp(arg, \"-t\") == 0 || strcmp(arg, \"-tm\") == 0 ||\n           strcmp(arg, \"-T\") == 0 || strcmp(arg, \"-TM\") == 0)\n    {\n    int both = arg[2] == 0;\n    showtotaltimes = arg[1] == 'T';\n    if (argc > 2 && (uli = strtoul(argv[op+1], &endptr, 10), *endptr == 0))\n      {\n      if (uli == 0)\n        {\n        cfprintf(clr_test_error, stderr, \"pcre2test: Argument for %s must not be zero\\n\", arg);\n        exit(1);\n        }\n      if (U32OVERFLOW(uli))\n        {\n        cfprintf(clr_test_error, stderr, \"pcre2test: Argument for %s is too big\\n\", arg);\n        exit(1);\n        }\n      timeitm = (int)uli;\n      op++;\n      argc--;\n      }\n    else timeitm = LOOPREPEAT;\n    if (both) timeit = timeitm;\n    }\n\n  /* Set malloc testing */\n\n  else if (strcmp(arg, \"-malloc\") == 0)\n    {\n    malloc_testing = TRUE;\n    }\n\n  /* Give help */\n\n  else if (strcmp(arg, \"-help\") == 0 ||\n           strcmp(arg, \"--help\") == 0)\n    {\n    usage();\n    goto EXIT;\n    }\n\n  /* Show version */\n\n  else if (memcmp(arg, \"-v\", 2) == 0 ||\n           strcmp(arg, \"--version\") == 0)\n    {\n    print_version(stdout, FALSE);\n    goto EXIT;\n    }\n\n  /* The following options save their data for processing once we know what\n  the running mode is. */\n\n  else if (strcmp(arg, \"-error\") == 0)\n    {\n    arg_error = argv[op+1];\n    goto CHECK_VALUE_EXISTS;\n    }\n\n  else if (strcmp(arg, \"-subject\") == 0)\n    {\n    arg_subject = argv[op+1];\n    goto CHECK_VALUE_EXISTS;\n    }\n\n  else if (strcmp(arg, \"-pattern\") == 0)\n    {\n    arg_pattern = argv[op+1];\n    CHECK_VALUE_EXISTS:\n    if (argc <= 2)\n      {\n      cfprintf(clr_test_error, stderr, \"pcre2test: Missing value for %s\\n\", arg);\n      yield = 1;\n      goto EXIT;\n      }\n    op++;\n    argc--;\n    }\n\n  else if (strcmp(arg, \"--color\") == 0 || strcmp(arg, \"--colour\") == 0)\n    {\n    colour_setting = COLOUR_ALWAYS;\n    }\n\n  else if (strstr(arg, \"--color=\") == arg || strstr(arg, \"--colour=\") == arg)\n    {\n    char *val = strchr(arg, '=') + 1;\n    if (strcmp(val, \"always\") == 0) colour_setting = COLOUR_ALWAYS;\n    else if (strcmp(val, \"never\") == 0) colour_setting = COLOUR_NEVER;\n    else if (strcmp(val, \"auto\") == 0) colour_setting = COLOUR_AUTO;\n    else\n      {\n      cfprintf(clr_test_error, stderr,\n        \"pcre2test: Invalid value for \\\"%.*s\\\"\\n\", (int)(val - 1 - arg), arg);\n      yield = 1;\n      goto EXIT;\n      }\n    }\n\n  /* Unrecognized option */\n\n  else\n    {\n    cfprintf(clr_test_error, stderr, \"pcre2test: Unknown or malformed option \\\"%s\\\"\\n\", arg);\n    usage();\n    yield = 1;\n    goto EXIT;\n    }\n  op++;\n  argc--;\n  }\n\n/* If -error was present, get the error numbers, show the messages, and exit.\nWe wait to do this until we know which mode we are in. */\n\nif (arg_error != NULL)\n  {\n  int errcode;\n  char *endptr;\n  long li;\n\n  /* Loop along a list of error numbers. */\n\n  for (;;)\n    {\n    li = strtol(arg_error, &endptr, 10);\n    if (S32OVERFLOW(li) || (*endptr != 0 && *endptr != ','))\n      {\n      cfprintf(clr_test_error, stderr, \"pcre2test: \\\"%s\\\" is not a valid error number list\\n\", arg_error);\n      yield = 1;\n      goto EXIT;\n      }\n    errcode = (int)li;\n    printf(\"Error %d: \", errcode);\n    print_error_message_file(stdout, errcode, \"\", \"\\n\", TRUE);\n    if (*endptr == 0) goto EXIT;\n    arg_error = endptr + 1;\n    }\n\n  PCRE2_UNREACHABLE(); /* Control never reaches here */\n  }  /* End of -error handling */\n\n/* Initialize things that cannot be done until we know which test mode we are\nrunning in. */\n\nmax_oveccount = DEFAULT_OVECCOUNT;\n\n/* Initialise the globals for the current mode. */\n\ninit_globals();\n\n/* Handle command line modifier settings, sending any error messages to\nstderr. We need to know the mode before modifying the context, and it is tidier\nto do them all in the same way. */\n\noutfile = stderr;\nif ((arg_pattern != NULL &&\n    !decode_modifiers((uint8_t *)arg_pattern, CTX_DEFPAT, &def_patctl, NULL)) ||\n    (arg_subject != NULL &&\n    !decode_modifiers((uint8_t *)arg_subject, CTX_DEFDAT, NULL, &def_datctl)))\n  {\n  yield = 1;\n  goto EXIT;\n  }\n\n/* Sort out the input and output files, defaulting to stdin/stdout. */\n\ninfile = stdin;\noutfile = stdout;\n\nif (argc > 1 && strcmp(argv[op], \"-\") != 0)\n  {\n  infile = fopen(argv[op], INPUT_MODE);\n  if (infile == NULL)\n    {\n    cfprintf(clr_test_error, stderr, \"pcre2test: Failed to open \\\"%s\\\": %s\\n\", argv[op], strerror(errno));\n    yield = 1;\n    goto EXIT;\n    }\n  }\n\n#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)\nif (INTERACTIVE(infile)) using_history();\n#endif\n\nif (argc > 2)\n  {\n  outfile = fopen(argv[op+1], OUTPUT_MODE);\n  if (outfile == NULL)\n    {\n    cfprintf(clr_test_error, stderr, \"pcre2test: Failed to open \\\"%s\\\": %s\\n\", argv[op+1], strerror(errno));\n    yield = 1;\n    goto EXIT;\n    }\n  }\n\n/* Output a heading line unless quiet, then process input lines. */\n\nif (!quiet) print_version(outfile, TRUE);\n\n#ifdef SUPPORT_PCRE2_8\npreg.re_pcre2_code = NULL;\npreg.re_match_data = NULL;\n#endif\n\nwhile (notdone)\n  {\n  const uint8_t *p;\n  const uint8_t *p_notsp;\n  int rc = PR_OK;\n  BOOL expectdata = have_active_pattern();\n  BOOL is_pattern_comment;\n  BOOL is_data_comment;\n#ifdef SUPPORT_PCRE2_8\n  expectdata |= preg.re_pcre2_code != NULL;\n#endif\n\n  if (extend_inputline(infile, buffer, expectdata? \"data> \" : \"  re> \") == NULL)\n    break;\n\n  /* Pre-process input lines with #if...#endif. */\n\n  if (skipping_endif)\n    {\n    if (strncmp((char*)buffer, \"#endif\", 6) != 0 ||\n        !(buffer[6] == 0 || isspace(buffer[6])))\n      continue;\n    skipping_endif = FALSE;\n    }\n\n  /* Begin processing the line. */\n\n  p = p_notsp = buffer;\n  while (isspace(*p_notsp)) p_notsp++;\n\n  is_pattern_comment = p[0] == '#' &&\n    (isspace(p[1]) || p[1] == '!' || p[1] == 0);\n  is_data_comment = expectdata && p_notsp[0] == '\\\\' && p_notsp[1] == '=' &&\n    (isspace(p_notsp[2]) || p_notsp[2] == 0);\n\n  if (!INTERACTIVE(infile))\n    cfprintf((is_pattern_comment || is_data_comment)? clr_comment : clr_input,\n      outfile, \"%s\", (char *)buffer);\n  fflush(outfile);\n\n  if (preprocess_only && *p != '#') continue;\n\n  /* If we have a pattern set up for testing, or we are skipping after a\n  compile failure, a blank line terminates this test. */\n\n  if (expectdata || skipping)\n    {\n    if (*p_notsp == 0)\n      {\n#ifdef SUPPORT_PCRE2_8\n      if (preg.re_pcre2_code != NULL)\n        {\n        regfree(&preg);\n        preg.re_pcre2_code = NULL;\n        preg.re_match_data = NULL;\n        }\n#endif  /* SUPPORT_PCRE2_8 */\n      free_active_pattern();\n      skipping = FALSE;\n      setlocale(LC_CTYPE, \"C\");\n      }\n\n    /* Otherwise, if we are not skipping, and the line is not a data comment\n    line starting with \"\\=\", process a data line. */\n\n    else if (!skipping && !is_data_comment)\n      {\n      rc = process_data();\n      }\n    }\n\n  /* We do not have a pattern set up for testing. Lines starting with # are\n  either comments or special commands. Blank lines are ignored. Otherwise, the\n  line must start with a valid delimiter. It is then processed as a pattern\n  line. The pattern remains in pbuffer8/16/32 after compilation, for use by\n  callouts. Under valgrind, make the unused part of the buffer undefined, to\n  catch overruns. */\n\n  else if (*p == '#')\n    {\n    if (is_pattern_comment) continue;\n    rc = process_command();\n    }\n\n  else if (strchr(\"/!\\\"'`%&-=_:;,@~\", *p) != NULL)\n    {\n    rc = process_pattern();\n    dfa_matched = 0;\n    }\n\n  else\n    {\n    if (*p_notsp != 0)\n      {\n      cfprintf(clr_test_error, outfile, \"** Invalid pattern delimiter '%c' (x%x).\\n\", *buffer,\n        *buffer);\n      rc = PR_SKIP;\n      }\n    }\n\n  if (rc == PR_SKIP && !INTERACTIVE(infile)) skipping = TRUE;\n  else if (rc == PR_ENDIF) skipping_endif = TRUE;\n  else if (rc == PR_ABEND)\n    {\n    cfprintf(clr_test_error, outfile, \"** pcre2test run abandoned\\n\");\n    yield = 1;\n    goto EXIT;\n    }\n  }\n\n/* Finish off a normal run. */\n\nif (skipping_endif)\n  {\n  cfprintf(clr_test_error, outfile, \"** Expected #endif\\n\");\n  yield = 1;\n  goto EXIT;\n  }\n\nif (INTERACTIVE(infile)) fprintf(outfile, \"\\n\");\n\nif (showtotaltimes)\n  {\n  const char *pad = \"\";\n  cfprintf(clr_profiling, outfile, \"--------------------------------------\\n\");\n  if (timeit > 0)\n    {\n    cfprintf(clr_profiling, outfile, \"Total compile time %8.2f microseconds\\n\",\n      ((1000000 / CLOCKS_PER_SEC) * (double)total_compile_time) / timeit);\n    if (total_jit_compile_time > 0)\n      cfprintf(clr_profiling, outfile, \"Total JIT compile  %8.2f microseconds\\n\",\n        ((1000000 / CLOCKS_PER_SEC) * (double)total_jit_compile_time) / \\\n        timeit);\n    pad = \"  \";\n    }\n  cfprintf(clr_profiling, outfile, \"Total match time %s%8.2f microseconds\\n\", pad,\n    ((1000000 / CLOCKS_PER_SEC) * (double)total_match_time) / timeitm);\n  }\n\n\nEXIT:\n\n#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)\nif (infile != NULL && INTERACTIVE(infile)) clear_history();\n#endif\n\nif (infile != NULL && infile != stdin) fclose(infile);\nif (outfile != NULL && outfile != stdout) fclose(outfile);\n\n#ifdef SUPPORT_PCRE2_8\nif (preg.re_pcre2_code != NULL) regfree(&preg);\n#endif\n\nfree(buffer);\nfree(dbuffer);\nfree(pbuffer8);\n#ifdef SUPPORT_PCRE2_16\nfree(pbuffer16);\n#endif\n#ifdef SUPPORT_PCRE2_32\nfree(pbuffer32);\n#endif\nfree(dfa_workspace);\nfree(tables3);\nfree_globals();\n\n#if defined(__VMS)\n  yield = SS$_NORMAL;  /* Return values via DCL symbols */\n#endif\n\nreturn yield;\n}\n\n/* End of pcre2test.c */\n"
  },
  {
    "path": "src/pcre2test_inc.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* PCRE is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language.\n\n                       Written by Philip Hazel\n     Original API code Copyright (c) 1997-2012 University of Cambridge\n          New API code Copyright (c) 2016-2024 University of Cambridge\n\n-----------------------------------------------------------------------------\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n    * Neither the name of the University of Cambridge nor the names of its\n      contributors may be used to endorse or promote products derived from\n      this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n-----------------------------------------------------------------------------\n*/\n\n\n/* This module contains the mode-dependent code which is used by pcre2test.c.\nIt is #included in pcre2test.c at each supported code unit width, with\nPCRE2_SUFFIX set appropriately, just like the functions that comprise the\nlibrary. */\n\n\n/* ------- Macros for hiding the bit width of this file's members ---------- */\n\n#define pbuffer               PCRE2_SUFFIX(pbuffer)\n#define pbuffer_size          G(pbuffer,_size)\n\n#if PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16\n#define utf_to_ord            G(G(utf,PCRE2_CODE_UNIT_WIDTH),_to_ord)\n#endif\n\n#define compiled_code         PCRE2_SUFFIX(compiled_code_)\n#define general_context       PCRE2_SUFFIX(general_context_)\n#define general_context_copy  PCRE2_SUFFIX(general_context_copy_)\n#define pat_context           PCRE2_SUFFIX(pat_context_)\n#define default_pat_context   PCRE2_SUFFIX(default_pat_context_)\n#define con_context           PCRE2_SUFFIX(con_context_)\n#define default_con_context   PCRE2_SUFFIX(default_con_context_)\n#define dat_context           PCRE2_SUFFIX(dat_context_)\n#define default_dat_context   PCRE2_SUFFIX(default_dat_context_)\n#define match_data            PCRE2_SUFFIX(match_data_)\n#define jit_stack             PCRE2_SUFFIX(jit_stack_)\n#define jit_stack_size        PCRE2_SUFFIX(jit_stack_size_)\n#define patstack              PCRE2_SUFFIX(patstack_)\n#define patstacknext          PCRE2_SUFFIX(patstacknext_)\n#define rep_in_buffer         PCRE2_SUFFIX(rep_in_buffer_)\n#define rep_in_buffer_size    PCRE2_SUFFIX(rep_in_buffer_size_)\n#define rep_out_buffer        PCRE2_SUFFIX(rep_out_buffer_)\n#define rep_out_buffer_size   PCRE2_SUFFIX(rep_out_buffer_size_)\n\n#define jit_callback                      PCRE2_SUFFIX(jit_callback_)\n#define pcre2_strcmp_c8                   PCRE2_SUFFIX(pcre2_strcmp_c8_)\n#define pcre2_strlen                      PCRE2_SUFFIX(pcre2_strlen_)\n#define pchars                            PCRE2_SUFFIX(pchars_)\n#define ptrunc                            PCRE2_SUFFIX(ptrunc_)\n#define config_str                        PCRE2_SUFFIX(config_str_)\n#define check_modifier                    PCRE2_SUFFIX(check_modifier_)\n#define decode_modifiers                  PCRE2_SUFFIX(decode_modifiers_)\n#define pattern_info                      PCRE2_SUFFIX(pattern_info_)\n#define show_memory_info                  PCRE2_SUFFIX(show_memory_info_)\n#define show_framesize                    PCRE2_SUFFIX(show_framesize_)\n#define show_heapframes_size              PCRE2_SUFFIX(show_heapframes_size_)\n#define print_error_message_file          PCRE2_SUFFIX(print_error_message_file_)\n#define print_error_message               PCRE2_SUFFIX(print_error_message_)\n#define callout_enumerate_function        PCRE2_SUFFIX(callout_enumerate_function_)\n#define callout_enumerate_function_void   PCRE2_SUFFIX(callout_enumerate_function_void_)\n#define callout_enumerate_function_fail   PCRE2_SUFFIX(callout_enumerate_function_fail_)\n#define show_pattern_info                 PCRE2_SUFFIX(show_pattern_info_)\n#define serial_error                      PCRE2_SUFFIX(serial_error_)\n#define process_command                   PCRE2_SUFFIX(process_command_)\n#define process_pattern                   PCRE2_SUFFIX(process_pattern_)\n#define have_active_pattern               PCRE2_SUFFIX(have_active_pattern_)\n#define free_active_pattern               PCRE2_SUFFIX(free_active_pattern_)\n#define check_match_limit                 PCRE2_SUFFIX(check_match_limit_)\n#define substitute_callout_function       PCRE2_SUFFIX(substitute_callout_function_)\n#define substitute_case_callout_function  PCRE2_SUFFIX(substitute_case_callout_function_)\n#define callout_function                  PCRE2_SUFFIX(callout_function_)\n#define copy_and_get                      PCRE2_SUFFIX(copy_and_get_)\n#define copy_substitute_string            PCRE2_SUFFIX(copy_substitute_string_)\n#define process_data                      PCRE2_SUFFIX(process_data_)\n#define init_globals                      PCRE2_SUFFIX(init_globals_)\n#define free_globals                      PCRE2_SUFFIX(free_globals_)\n#define unittest                          PCRE2_SUFFIX(unittest_)\n\n\n/* ---------------------- Mode-dependent variables ------------------------- */\n\nstatic pcre2_code             *compiled_code = NULL;\nstatic pcre2_general_context  *general_context = NULL, *general_context_copy = NULL;\nstatic pcre2_compile_context  *pat_context = NULL, *default_pat_context = NULL;\nstatic pcre2_convert_context  *con_context = NULL, *default_con_context = NULL;\nstatic pcre2_match_context    *dat_context = NULL, *default_dat_context = NULL;\nstatic pcre2_match_data       *match_data = NULL;\n\nstatic pcre2_jit_stack *jit_stack = NULL;\nstatic size_t           jit_stack_size = 0;\n\nstatic pcre2_code *patstack[PATSTACKSIZE];\nstatic int         patstacknext = 0;\n\nstatic PCRE2_UCHAR *rep_in_buffer = NULL;\nstatic size_t       rep_in_buffer_size = REPLACE_MODSIZE;    /* Code units */\nstatic PCRE2_UCHAR *rep_out_buffer = NULL;\nstatic size_t       rep_out_buffer_size = REPLACE_BUFFSIZE;  /* Code units */\n\n\n\n/*************************************************\n*         JIT memory callback                    *\n*************************************************/\n\nstatic pcre2_jit_stack*\njit_callback(void *arg)\n{\njit_was_used = TRUE;\nreturn (pcre2_jit_stack *)arg;\n}\n\n\n\n/*************************************************\n*  Compare zero-terminated PCRE2 & 8-bit strings *\n*************************************************/\n\nstatic int\npcre2_strcmp_c8(PCRE2_SPTR str1, const char *str2)\n{\nPCRE2_UCHAR c1, c2;\nwhile (*str1 != '\\0' || *str2 != '\\0')\n  {\n  c1 = *str1++;\n  c2 = *str2++;\n  if (c1 != c2) return ((c1 > c2) << 1) - 1;\n  }\nreturn 0;\n}\n\n\n\n/*************************************************\n*        Find the length of a PCRE2 string       *\n*************************************************/\n\nstatic size_t\npcre2_strlen(PCRE2_SPTR str)\n{\nsize_t c = 0;\nwhile (*str++ != 0) c++;\nreturn c;\n}\n\n\n\n/*************************************************\n*           Print character string               *\n*************************************************/\n\n/* Must handle Unicode strings in UTF mode. Yields number of characters printed.\nFor printing *MARK strings, a negative length is given, indicating that the\nlength is in the first code unit. If handed a NULL file, this function just\ncounts chars without printing (because pchar() does that). */\n\nstatic int pchars(int clr, PCRE2_SPTR p, ptrdiff_t length, BOOL utf, FILE *f)\n{\n#if PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16\nPCRE2_SPTR end;\nuint32_t c = 0;\nint yield = 0;\n\ncolour_begin(clr, f);\n\nif (length < 0) length = *p++;\nend = p + length;\nwhile (length-- > 0)\n  {\n  if (utf)\n    {\n    int rc = utf_to_ord(p, end, &c);\n    if (rc > 0 && rc <= length + 1)   /* Mustn't run over the end */\n      {\n      length -= rc - 1;\n      p += rc;\n      yield += pchar(c, utf, f);\n      continue;\n      }\n    }\n  c = *p++;\n  yield += pchar(c, utf, f);\n  }\n\ncolour_end(f);\nreturn yield;\n\n#else\nint yield = 0;\n\ncolour_begin(clr, f);\n\nif (length < 0) length = *p++;\nwhile (length-- > 0)\n  {\n  uint32_t c = *p++;\n  yield += pchar(c, utf, f);\n  }\n\ncolour_end(f);\nreturn yield;\n\n#endif\n}\n\n\n\n/*************************************************\n*        Print truncated character string        *\n*************************************************/\n\n/* Must handle Unicode strings in UTF mode. Passed the total input string, and\nthe offset to print from/to. If left is true, prints up to the offset,\ntruncated; otherwise prints from the offset to the right, truncated. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nstatic void ptrunc_8(int clr, PCRE2_SPTR p, size_t p_len, size_t offset,\n  BOOL left, BOOL utf, FILE *f)\n{\nPCRE2_SPTR start = p + offset;\nPCRE2_SPTR end = p + offset;\nsize_t printed = 0;\n\ncolour_begin(clr, f);\n\nif (left)\n  {\n  while (start > p && printed < 10)\n    {\n    printed++;\n    start--;\n    if (utf)\n      { while(start > p && (*start & 0xc0u) == 0x80u) start--; }\n    }\n  }\nelse\n  {\n  while (end < p + p_len && printed < 10)\n    {\n    printed++;\n    end++;\n    if (utf)\n      { while(end < p + p_len && (*end & 0xc0u) == 0x80u) end++; }\n    }\n  }\n\nif (left && start > p) fprintf(f, \"...\");\nfor (; start < end; start++) fprintf(f, \"%c\", CHAR_OUTPUT(*start));\nif (!left && end < p + p_len) fprintf(f, \"...\");\n\ncolour_end(f);\n}\n\n#elif PCRE2_CODE_UNIT_WIDTH == 16\nstatic void ptrunc_16(int clr, PCRE2_SPTR p, size_t p_len, size_t offset,\n  BOOL left, BOOL utf, FILE *f)\n{\nPCRE2_SPTR start = p + offset;\nPCRE2_SPTR end = p + offset;\nsize_t printed = 0;\n\ncolour_begin(clr, f);\n\nif (left)\n  {\n  while (start > p && printed < 10)\n    {\n    printed++;\n    start--;\n    if (utf)\n      { while(start > p && (*start & 0xfc00u) == 0xdc00u) start--; }\n    }\n  }\nelse\n  {\n  while (end < p + p_len && printed < 10)\n    {\n    printed++;\n    end++;\n    if (utf)\n      { while(end < p + p_len && (*end & 0xfc00u) == 0xdc00u) end++; }\n    }\n  }\n\nif (left && start > p) fprintf(f, \"...\");\nwhile (start < end)\n  {\n  uint32_t c;\n  int rc = utf16_to_ord(start, end, &c);\n  if (rc < 0) c = *start++;\n  else start += rc;\n  if (c > 0xff || (utf && c > 0x7f))\n    {\n    uint8_t u8buff[6];\n    int clen = ord_to_utf8(c, u8buff);\n    fprintf(f, \"%.*s\", clen, u8buff);\n    continue;\n    }\n  fputc((int)c, f);\n  }\nif (!left && end < p + p_len) fprintf(f, \"...\");\n\ncolour_end(f);\n}\n\n#elif PCRE2_CODE_UNIT_WIDTH == 32\nstatic void ptrunc_32(int clr, PCRE2_SPTR p, size_t p_len, size_t offset,\n  BOOL left, BOOL utf, FILE *f)\n{\nPCRE2_SPTR start = p + offset;\nPCRE2_SPTR end = p + offset;\n\ncolour_begin(clr, f);\n\nif (left)\n  {\n  start -= (offset > 10)? 10 : offset;\n  }\nelse\n  {\n  end += (p + p_len - end > 10)? 10 : p + p_len - end;\n  }\n\nif (left && start > p) fprintf(f, \"...\");\nwhile (start < end)\n  {\n  uint32_t c = *start++;\n  if (c > 0xff || (utf && c > 0x7f))\n    {\n    uint8_t u8buff[6];\n    int clen = ord_to_utf8(c, u8buff);\n    fprintf(f, \"%.*s\", clen, u8buff);\n    continue;\n    }\n  fputc((int)c, f);\n  }\nif (!left && end < p + p_len) fprintf(f, \"...\");\n\ncolour_end(f);\n}\n#endif\n\n#if PCRE2_CODE_UNIT_WIDTH == 16\n/*************************************************\n*           Convert string to 16-bit             *\n*************************************************/\n\n/* In UTF mode the input is always interpreted as a string of UTF-8 bytes using\nthe original UTF-8 definition of RFC 2279, which allows for up to 6 bytes, and\ncode values from 0 to 0x7fffffff. However, values greater than the later UTF\nlimit of 0x10ffff cause an error. In non-UTF mode the input is interpreted as\nUTF-8 if the utf8_input modifier is set, but an error is generated for values\ngreater than 0xffff.\n\nIf all the input bytes are ASCII, the space needed for a 16-bit string is\nexactly double the 8-bit size. Otherwise, the size needed for a 16-bit string\nis no more than double, because up to 0xffff uses no more than 3 bytes in UTF-8\nbut possibly 4 in UTF-16. Higher values use 4 bytes in UTF-8 and up to 4 bytes\nin UTF-16. The result is always left in pbuffer16. Impose a minimum size to\nsave repeated re-sizing.\n\nNote that this function does not object to surrogate values. This is\ndeliberate; it makes it possible to construct UTF-16 strings that are invalid,\nfor the purpose of testing that they are correctly faulted.\n\nArguments:\n  p          points to a byte string\n  utf        true in UTF mode\n  lenptr     points to number of bytes in the string (excluding trailing zero)\n\nReturns:     0 on success, with the length updated to the number of 16-bit\n               data items used (excluding the trailing zero)\n             OR -1 if a UTF-8 string is malformed\n             OR -2 if a value > 0x10ffff is encountered in UTF mode\n             OR -3 if a value > 0xffff is encountered when not in UTF mode\n*/\n\nstatic int\nto16(uint8_t *p, int utf, PCRE2_SIZE *lenptr)\n{\nuint16_t *pp;\nPCRE2_SIZE len = *lenptr;\n\nif (pbuffer16_size < 2*len + 2)\n  {\n  if (pbuffer16 != NULL) free(pbuffer16);\n  pbuffer16_size = 2*len + 2;\n  if (pbuffer16_size < 4096) pbuffer16_size = 4096;\n  pbuffer16 = (uint16_t *)malloc(pbuffer16_size);\n  if (pbuffer16 == NULL)\n    {\n    cfprintf(clr_test_error, stderr, \"pcre2test: malloc(%\" SIZ_FORM \") failed for pbuffer16\\n\",\n      pbuffer16_size);\n    exit(1);\n    }\n  }\n\npp = pbuffer16;\nif (!utf && (pat_patctl.control & CTL_UTF8_INPUT) == 0)\n  {\n  for (; len > 0; len--) *pp++ = *p++;\n  }\n\nelse while (len > 0)\n  {\n  uint32_t c;\n  const uint8_t *end = p + len;\n  int chlen = utf8_to_ord(p, end, &c);\n  if (chlen <= 0) return -1;\n  if (!utf && c > 0xffff) return -3;\n  if (c > 0x10ffff) return -2;\n  p += chlen;\n  len -= chlen;\n  if (c < 0x10000) *pp++ = c; else\n    {\n    c -= 0x10000;\n    *pp++ = 0xd800 | (c >> 10);\n    *pp++ = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n*pp = 0;\n*lenptr = pp - pbuffer16;\nreturn 0;\n}\n#endif /* PCRE2_CODE_UNIT_WIDTH == 16 */\n\n\n\n#if PCRE2_CODE_UNIT_WIDTH == 32\n/*************************************************\n*           Convert string to 32-bit             *\n*************************************************/\n\n/* In UTF mode the input is always interpreted as a string of UTF-8 bytes using\nthe original UTF-8 definition of RFC 2279, which allows for up to 6 bytes, and\ncode values from 0 to 0x7fffffff. However, values greater than the later UTF\nlimit of 0x10ffff cause an error.\n\nIn non-UTF mode the input is interpreted as UTF-8 if the utf8_input modifier\nis set, and no limit is imposed. There is special interpretation of the 0xff\nbyte (which is illegal in UTF-8) in this case: it causes the top bit of the\nnext character to be set. This provides a way of generating 32-bit characters\ngreater than 0x7fffffff.\n\nIf all the input bytes are ASCII, the space needed for a 32-bit string is\nexactly four times the 8-bit size. Otherwise, the size needed for a 32-bit\nstring is no more than four times, because the number of characters must be\nless than the number of bytes. The result is always left in pbuffer32. Impose a\nminimum size to save repeated re-sizing.\n\nNote that this function does not object to surrogate values. This is\ndeliberate; it makes it possible to construct UTF-32 strings that are invalid,\nfor the purpose of testing that they are correctly faulted.\n\nArguments:\n  p          points to a byte string\n  utf        true in UTF mode\n  lenptr     points to number of bytes in the string (excluding trailing zero)\n\nReturns:     0 on success, with the length updated to the number of 32-bit\n               data items used (excluding the trailing zero)\n             OR -1 if a UTF-8 string is malformed\n             OR -2 if a value > 0x10ffff is encountered in UTF mode\n*/\n\nstatic int\nto32(uint8_t *p, int utf, PCRE2_SIZE *lenptr)\n{\nuint32_t *pp;\nPCRE2_SIZE len = *lenptr;\n\nif (pbuffer32_size < 4*len + 4)\n  {\n  if (pbuffer32 != NULL) free(pbuffer32);\n  pbuffer32_size = 4*len + 4;\n  if (pbuffer32_size < 8192) pbuffer32_size = 8192;\n  pbuffer32 = (uint32_t *)malloc(pbuffer32_size);\n  if (pbuffer32 == NULL)\n    {\n    cfprintf(clr_test_error, stderr, \"pcre2test: malloc(%\" SIZ_FORM \") failed for pbuffer32\\n\",\n      pbuffer32_size);\n    exit(1);\n    }\n  }\n\npp = pbuffer32;\nif (!utf && (pat_patctl.control & CTL_UTF8_INPUT) == 0)\n  {\n  for (; len > 0; len--) *pp++ = *p++;\n  }\n\nelse while (len > 0)\n  {\n  int chlen;\n  uint32_t c;\n  uint32_t topbit = 0;\n  const uint8_t *end = p + len;\n  if (!utf && *p == 0xff && len > 1)\n    {\n    topbit = 0x80000000u;\n    p++;\n    len--;\n    }\n  chlen = utf8_to_ord(p, end, &c);\n  if (chlen <= 0) return -1;\n  if (utf && c > 0x10ffff) return -2;\n  p += chlen;\n  len -= chlen;\n  *pp++ = c | topbit;\n  }\n\n*pp = 0;\n*lenptr = pp - pbuffer32;\nreturn 0;\n}\n#endif /* PCRE2_CODE_UNIT_WIDTH == 32 */\n\n\n\n/*************************************************\n*        Read a string from pcre2_config()       *\n*************************************************/\n\n/* Read out a version string from pcre2_config(), transcoding it into an\n8-bit buffer.\n\nArguments:\n  what       the item to read\n\nReturns:     a buffer which must be freed by the caller, where the string has\n             been written\n*/\n\nstatic char *\nconfig_str(uint32_t what)\n{\nint r2;\nPCRE2_UCHAR *buf;\nchar *buf8;\nint needed_len;\n\nneeded_len = pcre2_config(what, NULL);\nif (needed_len <= 0)\n  {\n  cfprintf(clr_test_error, stderr, \"pcre2test: Error in pcre2_config(%d)\\n\", what);\n  exit(1);\n  }\n\nbuf = malloc((unsigned)needed_len * sizeof(PCRE2_UCHAR));\nbuf8 = malloc((unsigned)needed_len);\nif (buf == NULL || buf8 == NULL)\n  {\n  cfprintf(clr_test_error, stderr, \"pcre2test: malloc failed in config_str()\\n\");\n  exit(1);\n  }\n\nr2 = pcre2_config(what, buf);\nif (r2 != needed_len)\n  {\n  cfprintf(clr_test_error, stderr,\n    \"pcre2test: pcre2_config(%d) returned %d, expected %d\\n\",\n    what, r2, needed_len);\n  exit(1);\n  }\n\nwhile (r2-- > 0) buf8[r2] = (char)buf[r2];\nfree(buf);\n\nreturn buf8;\n}\n\n\n\n/*************************************************\n*       Check a modifier and find its field      *\n*************************************************/\n\n/* This function is called when a modifier has been identified. We check that\nit is allowed here and find the field that is to be changed.\n\nArguments:\n  m          the modifier list entry\n  ctx        CTX_PAT     => pattern context\n             CTX_POPPAT  => pattern context for popped pattern\n             CTX_DEFPAT  => default pattern context\n             CTX_DAT     => data context\n             CTX_DEFDAT  => default data context\n  pctl       point to pattern control block\n  dctl       point to data control block\n  c          a single character or 0\n\nReturns:     a field pointer or NULL\n*/\n\nstatic void *\ncheck_modifier(modstruct *m, int ctx, patctl *pctl, datctl *dctl, uint32_t c)\n{\nvoid *field = NULL;\nPCRE2_SIZE offset = m->offset;\n\nif (restrict_for_perl_test) switch(m->which)\n  {\n  case MOD_PNDP:\n  case MOD_PATP:\n  case MOD_DATP:\n  case MOD_PDP:\n  break;\n\n  default:\n  cfprintf(clr_test_error, outfile, \"** \\\"%s\\\" is not allowed in a Perl-compatible test\\n\",\n    m->name);\n  return NULL;\n  }\n\nswitch (m->which)\n  {\n  case MOD_CTC:  /* Compile context modifier */\n  if (ctx == CTX_DEFPAT) field = default_pat_context;\n    else if (ctx == CTX_PAT) field = pat_context;\n  break;\n\n  case MOD_CTM:  /* Match context modifier */\n  if (ctx == CTX_DEFDAT) field = default_dat_context;\n    else if (ctx == CTX_DAT) field = dat_context;\n  break;\n\n  case MOD_DAT:    /* Data line modifier */\n  case MOD_DATP:   /* Allowed for Perl test */\n  if (dctl != NULL) field = dctl;\n  break;\n\n  case MOD_PAT:    /* Pattern modifier */\n  case MOD_PATP:   /* Allowed for Perl test */\n  if (pctl != NULL) field = pctl;\n  break;\n\n  case MOD_PD:   /* Pattern or data line modifier */\n  case MOD_PDP:  /* Ditto, allowed for Perl test */\n  case MOD_PND:  /* Ditto, but not default pattern */\n  case MOD_PNDP: /* Ditto, allowed for Perl test */\n  if (dctl != NULL) field = dctl;\n    else if (pctl != NULL && (m->which == MOD_PD || m->which == MOD_PDP ||\n             ctx != CTX_DEFPAT))\n      field = pctl;\n  break;\n  }\n\nif (field == NULL)\n  {\n  if (c == 0)\n    cfprintf(clr_test_error, outfile, \"** \\\"%s\\\" is not valid here\\n\", m->name);\n  else\n    cfprintf(clr_test_error, outfile, \"** /%c is not valid here\\n\", c);\n  return NULL;\n  }\n\nreturn (char *)field + offset;\n}\n\n\n\n/*************************************************\n*            Decode a modifier list              *\n*************************************************/\n\n/* A pointer to a control block is NULL when called in cases when that block is\nnot relevant. They are never all relevant in one call. At least one of patctl\nand datctl is NULL. The second argument specifies which context to use for\nmodifiers that apply to contexts.\n\nArguments:\n  p          point to modifier string\n  ctx        CTX_PAT     => pattern context\n             CTX_POPPAT  => pattern context for popped pattern\n             CTX_DEFPAT  => default pattern context\n             CTX_DAT     => data context\n             CTX_DEFDAT  => default data context\n  pctl       point to pattern control block\n  dctl       point to data control block\n\nReturns: TRUE if successful decode, FALSE otherwise\n*/\n\nstatic BOOL\ndecode_modifiers(uint8_t *p, int ctx, patctl *pctl, datctl *dctl)\n{\nuint8_t *ep, *pp;\nlong li;\nunsigned long uli;\nBOOL first = TRUE;\n\nfor (;;)\n  {\n  void *field;\n  modstruct *m;\n  BOOL off = FALSE;\n  unsigned int i;\n  size_t len;\n  int index;\n  char *endptr;\n\n  /* Skip white space and commas. */\n\n  while (isspace(*p) || *p == ',') p++;\n  if (*p == 0) break;\n\n  /* Find the end of the item; lose trailing whitespace at end of line. */\n\n  for (ep = p; *ep != 0 && *ep != ','; ep++);\n  if (*ep == 0)\n    {\n    while (ep > p && isspace(ep[-1])) ep--;\n    *ep = 0;\n    }\n\n  /* Remember if the first character is '-'. */\n\n  if (*p == '-')\n    {\n    off = TRUE;\n    p++;\n    }\n\n  /* Find the length of a full-length modifier name, and scan for it. */\n\n  pp = p;\n  while (pp < ep && *pp != '=') pp++;\n  index = scan_modifiers(p, pp - p);\n\n  /* If the first modifier is unrecognized, try to interpret it as a sequence\n  of single-character abbreviated modifiers. None of these modifiers have any\n  associated data. They just set options or control bits. */\n\n  if (index < 0)\n    {\n    uint32_t cc;\n    uint8_t *mp = p;\n\n    if (!first)\n      {\n      cfprintf(clr_test_error, outfile, \"** Unrecognized modifier \\\"%.*s\\\"\\n\", (int)(ep-p), p);\n      if (ep - p == 1)\n        cfprintf(clr_test_error, outfile, \"** Single-character modifiers must come first\\n\");\n      return FALSE;\n      }\n\n    first = FALSE;\n\n    for (cc = *p; cc != ',' && cc != '\\n' && cc != 0; cc = *(++p))\n      {\n      for (i = 0; i < C1MODLISTCOUNT; i++)\n        if (cc == c1modlist[i].onechar) break;\n\n      if (i >= C1MODLISTCOUNT)\n        {\n        cfprintf(clr_test_error, outfile, \"** Unrecognized modifier '%c' in modifier string \"\n          \"\\\"%.*s\\\"\\n\", *p, (int)(ep-mp), mp);\n        return FALSE;\n        }\n\n      if (c1modlist[i].index >= 0)\n        {\n        index = c1modlist[i].index;\n        }\n\n      else\n        {\n        index = scan_modifiers((const uint8_t *)(c1modlist[i].fullname),\n          strlen(c1modlist[i].fullname));\n        if (index < 0)\n          {\n          cfprintf(clr_test_error, outfile, \"** Internal error: single-character equivalent \"\n            \"modifier \\\"%s\\\" not found\\n\", c1modlist[i].fullname);\n          return FALSE;\n          }\n        c1modlist[i].index = index;     /* Cache for next time */\n        }\n\n      field = check_modifier(modlist + index, ctx, pctl, dctl, *p);\n      if (field == NULL) return FALSE;\n\n      /* /x is a special case; a second appearance changes PCRE2_EXTENDED to\n      PCRE2_EXTENDED_MORE. */\n\n      if (cc == 'x' && (*((uint32_t *)field) & PCRE2_EXTENDED) != 0)\n        {\n        *((uint32_t *)field) &= ~PCRE2_EXTENDED;\n        *((uint32_t *)field) |= PCRE2_EXTENDED_MORE;\n        }\n      else\n        *((uint32_t *)field) |= modlist[index].value;\n      }\n\n    continue;    /* With the next (fullname) modifier */\n    }\n\n  /* We have a match on a full-name modifier. Check for the existence of data\n  when needed. */\n\n  m = modlist + index;      /* Save typing */\n  if (m->type != MOD_CTL && m->type != MOD_OPT && m->type != MOD_OPTMZ &&\n      (m->type != MOD_IND || *pp == '='))\n    {\n    if (*pp++ != '=')\n      {\n      cfprintf(clr_test_error, outfile, \"** '=' expected after \\\"%s\\\"\\n\", m->name);\n      return FALSE;\n      }\n    if (off)\n      {\n      cfprintf(clr_test_error, outfile, \"** '-' is not valid for \\\"%s\\\"\\n\", m->name);\n      return FALSE;\n      }\n    }\n\n  /* These on/off types have no data. */\n\n  else if (*pp != ',' && *pp != '\\n' && *pp != ' ' && *pp != 0)\n    {\n    cfprintf(clr_test_error, outfile, \"** Unrecognized modifier '%.*s'\\n\", (int)(ep-p), p);\n    return FALSE;\n    }\n\n  /* Set the data length for those types that have data. Then find the field\n  that is to be set. If check_modifier() returns NULL, it has already output an\n  error message. */\n\n  len = ep - pp;\n  field = check_modifier(m, ctx, pctl, dctl, 0);\n  if (field == NULL) return FALSE;\n\n  /* Process according to data type. */\n\n  switch (m->type)\n    {\n    case MOD_CTL:\n    case MOD_OPT:\n    if (off) *((uint32_t *)field) &= ~m->value;\n      else *((uint32_t *)field) |= m->value;\n    break;\n\n    case MOD_OPTMZ:\n    pcre2_set_optimize(field, m->value);\n    break;\n\n    case MOD_BSR:\n    if (len == 7 && strncmpic(pp, (const uint8_t *)\"default\", 7) == 0)\n      {\n#ifdef BSR_ANYCRLF\n      *((uint16_t *)field) = PCRE2_BSR_ANYCRLF;\n#else\n      *((uint16_t *)field) = PCRE2_BSR_UNICODE;\n#endif\n      if (ctx == CTX_PAT || ctx == CTX_DEFPAT) pctl->control2 &= ~CTL2_BSR_SET;\n        else dctl->control2 &= ~CTL2_BSR_SET;\n      }\n    else\n      {\n      if (len == 7 && strncmpic(pp, (const uint8_t *)\"anycrlf\", 7) == 0)\n        *((uint16_t *)field) = PCRE2_BSR_ANYCRLF;\n      else if (len == 7 && strncmpic(pp, (const uint8_t *)\"unicode\", 7) == 0)\n        *((uint16_t *)field) = PCRE2_BSR_UNICODE;\n      else goto INVALID_VALUE;\n      if (ctx == CTX_PAT || ctx == CTX_DEFPAT) pctl->control2 |= CTL2_BSR_SET;\n        else dctl->control2 |= CTL2_BSR_SET;\n      }\n    pp = ep;\n    break;\n\n    case MOD_CHR:  /* A single character */\n    *((uint32_t *)field) = *pp++;\n    break;\n\n    case MOD_CON:  /* A convert type/options list */\n    for (;; pp++)\n      {\n      uint8_t *colon = (uint8_t *)strchr((const char *)pp, ':');\n      len = ((colon != NULL && colon < ep)? colon:ep) - pp;\n      for (i = 0; i < convertlistcount; i++)\n        {\n        if (strncmpic(pp, (const uint8_t *)convertlist[i].name, len) == 0)\n          {\n          if (*((uint32_t *)field) == CONVERT_UNSET)\n            *((uint32_t *)field) = convertlist[i].option;\n          else\n            *((uint32_t *)field) |= convertlist[i].option;\n          break;\n          }\n        }\n      if (i >= convertlistcount) goto INVALID_VALUE;\n      pp += len;\n      if (*pp != ':') break;\n      }\n    break;\n\n    case MOD_IN2:    /* One or two unsigned integers */\n    if (!isdigit(*pp)) goto INVALID_VALUE;\n    uli = strtoul((const char *)pp, &endptr, 10);\n    if (U32OVERFLOW(uli)) goto INVALID_VALUE;\n    ((uint32_t *)field)[0] = (uint32_t)uli;\n    if (*endptr == ':')\n      {\n      uli = strtoul((const char *)endptr+1, &endptr, 10);\n      if (U32OVERFLOW(uli)) goto INVALID_VALUE;\n      ((uint32_t *)field)[1] = (uint32_t)uli;\n      }\n    else ((uint32_t *)field)[1] = 0;\n    pp = (uint8_t *)endptr;\n    break;\n\n    /* PCRE2_SIZE_MAX is usually SIZE_MAX, which may be greater, equal to, or\n    less than ULONG_MAX. So first test for overflowing the long int, and then\n    test for overflowing PCRE2_SIZE_MAX if it is smaller than ULONG_MAX. */\n\n    case MOD_SIZ:    /* PCRE2_SIZE value */\n    if (!isdigit(*pp)) goto INVALID_VALUE;\n    uli = strtoul((const char *)pp, &endptr, 10);\n    if (uli == ULONG_MAX) goto INVALID_VALUE;\n#if ULONG_MAX > PCRE2_SIZE_MAX\n    if (uli > PCRE2_SIZE_MAX) goto INVALID_VALUE;\n#endif\n    *((PCRE2_SIZE *)field) = (PCRE2_SIZE)uli;\n    pp = (uint8_t *)endptr;\n    break;\n\n    case MOD_IND:    /* Unsigned integer with default */\n    if (len == 0)\n      {\n      *((uint32_t *)field) = (uint32_t)(m->value);\n      break;\n      }\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case MOD_INT:    /* Unsigned integer */\n    if (!isdigit(*pp)) goto INVALID_VALUE;\n    uli = strtoul((const char *)pp, &endptr, 10);\n    if (U32OVERFLOW(uli)) goto INVALID_VALUE;\n    *((uint32_t *)field) = (uint32_t)uli;\n    pp = (uint8_t *)endptr;\n    break;\n\n    case MOD_INS:   /* Signed integer */\n    if (!isdigit(*pp) && *pp != '-') goto INVALID_VALUE;\n    li = strtol((const char *)pp, &endptr, 10);\n    if (S32OVERFLOW(li)) goto INVALID_VALUE;\n    *((int32_t *)field) = (int32_t)li;\n    pp = (uint8_t *)endptr;\n    break;\n\n    case MOD_NL:\n    for (i = 0; i < sizeof(newlines)/sizeof(char *); i++)\n      if (len == strlen(newlines[i]) &&\n        strncmpic(pp, (const uint8_t *)newlines[i], len) == 0) break;\n    if (i >= sizeof(newlines)/sizeof(char *)) goto INVALID_VALUE;\n    if (i == 0)\n      {\n      pcre2_set_newline(field, NEWLINE_DEFAULT);\n      if (ctx == CTX_PAT || ctx == CTX_DEFPAT) pctl->control2 &= ~CTL2_NL_SET;\n        else dctl->control2 &= ~CTL2_NL_SET;\n      }\n    else\n      {\n      pcre2_set_newline(field, i);\n      if (ctx == CTX_PAT || ctx == CTX_DEFPAT) pctl->control2 |= CTL2_NL_SET;\n        else dctl->control2 |= CTL2_NL_SET;\n      }\n    pp = ep;\n    break;\n\n    case MOD_NN:              /* Name or (signed) number; may be several */\n    if (isdigit(*pp) || *pp == '-')\n      {\n      int ct = MAXCPYGET - 1;\n      int32_t value;\n      li = strtol((const char *)pp, &endptr, 10);\n      if (S32OVERFLOW(li)) goto INVALID_VALUE;\n      value = (int32_t)li;\n      field = (char *)field - m->offset + m->value;      /* Adjust field ptr */\n      if (value >= 0)                                    /* Add new number */\n        {\n        while (*((int32_t *)field) >= 0 && ct-- > 0)   /* Skip previous */\n          field = (char *)field + sizeof(int32_t);\n        if (ct <= 0)\n          {\n          cfprintf(clr_test_error, outfile, \"** Too many numeric \\\"%s\\\" modifiers\\n\", m->name);\n          return FALSE;\n          }\n        }\n      *((int32_t *)field) = value;\n      if (ct > 0) ((int32_t *)field)[1] = -1;\n      pp = (uint8_t *)endptr;\n      }\n\n    /* Multiple strings are put end to end. */\n\n    else\n      {\n      char *nn = (char *)field;\n      if (len > 0)                    /* Add new name */\n        {\n        if (len > MAX_NAME_SIZE)\n          {\n          cfprintf(clr_test_error, outfile, \"** Group name in \\\"%s\\\" is too long\\n\", m->name);\n          return FALSE;\n          }\n        while (*nn != 0) nn += strlen(nn) + 1;\n        if (nn + len + 2 - (char *)field > LENCPYGET)\n          {\n          cfprintf(clr_test_error, outfile, \"** Too many characters in named \\\"%s\\\" modifiers\\n\",\n            m->name);\n          return FALSE;\n          }\n        memcpy(nn, pp, len);\n        }\n      nn[len] = 0 ;\n      nn[len+1] = 0;\n      pp = ep;\n      }\n    break;\n\n    case MOD_STR:\n    if (m->value > (uint32_t)(UINT8_MAX) + 1)\n      {\n      cfprintf(clr_test_error, stderr, \"pcre2test: mod %s size > 256 \\n\", m->name);\n      exit(1);\n      }\n    if (len + 1 > m->value)\n      {\n      cfprintf(clr_test_error, outfile, \"** Overlong value for \\\"%s\\\" (max %d code units)\\n\",\n        m->name, m->value - 1);\n      return FALSE;\n      }\n    ((uint8_t *)field)[0] = (uint8_t)len;  /* len <= m->value - 1 <= UINT8_MAX */\n    memcpy(((uint8_t *)field)+1, pp, len);\n    ((uint8_t *)field)[len+1] = 0;\n    pp = ep;\n    break;\n    }\n\n  if (*pp != ',' && *pp != '\\n' && *pp != ' ' && *pp != 0)\n    {\n    cfprintf(clr_test_error, outfile, \"** Comma expected after modifier item \\\"%s\\\"\\n\", m->name);\n    return FALSE;\n    }\n\n  p = pp;\n\n  if (ctx == CTX_POPPAT &&\n     (pctl->options != 0 ||\n      pctl->tables_id != 0 ||\n      pctl->locale[0] != MOD_STR_UNSET ||\n      (pctl->control & NOTPOP_CONTROLS) != 0))\n    {\n    cfprintf(clr_test_error, outfile, \"** \\\"%s\\\" is not valid here\\n\", m->name);\n    return FALSE;\n    }\n  }\n\nreturn TRUE;\n\nINVALID_VALUE:\ncfprintf(clr_test_error, outfile, \"** Invalid value in \\\"%.*s\\\"\\n\", (int)(ep-p), p);\nreturn FALSE;\n}\n\n\n\n/*************************************************\n*             Get info from a pattern            *\n*************************************************/\n\n/* A wrapped call to pcre2_pattern_info(), applied to the current compiled\npattern.\n\nArguments:\n  what        code for the required information\n  where       where to put the answer\n  unsetok     PCRE2_ERROR_UNSET is an \"expected\" result\n\nReturns:      the return from pcre2_pattern_info()\n*/\n\nstatic int\npattern_info(int what, void *where, BOOL unsetok)\n{\nint rc;\n(void)pcre2_pattern_info(compiled_code, what, NULL);  /* Exercise the code */\nrc = pcre2_pattern_info(compiled_code, what, where);\nif (rc >= 0) return 0;\nif (rc != PCRE2_ERROR_UNSET || !unsetok)\n  {\n  cfprintf(clr_api_error, outfile, \"Error %d from \"\n    \"pcre2_pattern_info_\" STR(PCRE2_CODE_UNIT_WIDTH) \"(%d)\\n\", rc, what);\n  }\nreturn rc;\n}\n\n\n\n/*************************************************\n*      Show memory usage info for a pattern      *\n*************************************************/\n\nstatic void\nshow_memory_info(void)\n{\nuint32_t name_count, name_entry_size;\nPCRE2_SIZE size, cblock_size, data_size;\n\ncblock_size = sizeof(pcre2_real_code);\n\n(void)pattern_info(PCRE2_INFO_SIZE, &size, FALSE);\n(void)pattern_info(PCRE2_INFO_NAMECOUNT, &name_count, FALSE);\n(void)pattern_info(PCRE2_INFO_NAMEENTRYSIZE, &name_entry_size, FALSE);\n\n/* The uint32_t variables are cast before multiplying to avoid potential\n integer overflow. */\ndata_size = CU2BYTES((PCRE2_SIZE)name_count * (PCRE2_SIZE)name_entry_size);\n\ncfprintf(clr_profiling, outfile, \"Memory allocation - code size : %\" SIZ_FORM \"\\n\", size -\n  cblock_size - data_size);\nif (data_size != 0)\n  cfprintf(clr_profiling, outfile, \"Memory allocation - data size : %\" SIZ_FORM \"\\n\", data_size);\n\nif (pat_patctl.jit != 0)\n  {\n  (void)pattern_info(PCRE2_INFO_JITSIZE, &size, FALSE);\n  cfprintf(clr_profiling, outfile, \"Memory allocation - JIT code  : %\" SIZ_FORM \"\\n\", size);\n  }\n}\n\n\n\n/*************************************************\n*       Show frame size info for a pattern       *\n*************************************************/\n\nstatic void\nshow_framesize(void)\n{\nPCRE2_SIZE frame_size;\n(void)pattern_info(PCRE2_INFO_FRAMESIZE, &frame_size, FALSE);\ncfprintf(clr_profiling, outfile, \"Frame size for pcre2_match(): %\" SIZ_FORM \"\\n\", frame_size);\n}\n\n\n\n/*************************************************\n*   Show heapframes size info for a match_data   *\n*************************************************/\n\nstatic void\nshow_heapframes_size(void)\n{\nPCRE2_SIZE heapframes_size;\nheapframes_size = pcre2_get_match_data_heapframes_size(match_data);\ncfprintf(clr_profiling, outfile, \"Heapframes size in match_data: %\" SIZ_FORM \"\\n\",\n  heapframes_size);\n}\n\n\n\n/*************************************************\n*         Get and output an error message        *\n*************************************************/\n\nstatic BOOL\nprint_error_message_file(FILE *file, int errorcode, const char *before,\n  const char *after, BOOL badcode_ok)\n{\nint len;\nPCRE2_UCHAR buf[128];\n\nlen = pcre2_get_error_message(errorcode, buf, sizeof(buf)/sizeof(*buf));\nif (len == PCRE2_ERROR_BADDATA && badcode_ok)\n  {\n  cfprintf(clr_api_error, file, \"%sPCRE2_ERROR_BADDATA (unknown error number)%s\", before,\n    after);\n  }\nelse if (len < 0)\n  {\n  cfprintf(clr_test_error, file, \"\\n** pcre2test internal error: cannot interpret error \"\n    \"number\\n** Unexpected return (%d) from pcre2_get_error_message()\\n\", len);\n  }\nelse if ((unsigned)len != pcre2_strlen(buf))\n  {\n  cfprintf(clr_test_error, file, \"\\n** pcre2test: unexpected length %d from pcre2_get_error_message()\\n\", len);\n  return FALSE;\n  }\nelse\n  {\n  cfprintf(clr_api_error, file, \"%s\", before);\n  pchars(clr_api_error, buf, len, FALSE, file);\n  cfprintf(clr_api_error, file, \"%s\", after);\n  }\nreturn len >= 0;\n}\n\nstatic BOOL\nprint_error_message(int errorcode, const char *before, const char *after)\n{\nreturn print_error_message_file(outfile, errorcode, before, after, FALSE);\n}\n\n\n/*************************************************\n*     Callback function for callout enumeration  *\n*************************************************/\n\n/* Testing function to log data inside callout enumeration callbacks.\n\nArgument:\n  cb            pointer to enumerate block\n  callout_data  user data\n\nReturns:    0\n*/\n\nstatic int callout_enumerate_function(pcre2_callout_enumerate_block *cb,\n  void *callout_data)\n{\nuint32_t i;\nPCRE2_SPTR pattern_string = pbuffer;\nBOOL utf = (compiled_code->overall_options & PCRE2_UTF) != 0;\nPCRE2_SIZE next_item_length = cb->next_item_length;\n\n(void)callout_data;  /* Not currently displayed */\n\nfprintf(outfile, \"Callout \");\nif (cb->callout_string != NULL)\n  {\n  uint32_t delimiter = cb->callout_string[-1];\n  fprintf(outfile, \"%c\", CHAR_OUTPUT(delimiter));\n  pchars(clr_none, cb->callout_string, cb->callout_string_length, utf, outfile);\n  for (i = 0; callout_start_delims[i] != 0; i++)\n    if (delimiter == callout_start_delims[i])\n      {\n      delimiter = callout_end_delims[i];\n      break;\n      }\n  fprintf(outfile, \"%c  \", CHAR_OUTPUT(delimiter));\n  }\nelse fprintf(outfile, \"%d  \", cb->callout_number);\n\nif (next_item_length == 0 && pattern_string[cb->pattern_position] != 0)\n  next_item_length = 1;\npchars(clr_none, pattern_string+cb->pattern_position, next_item_length, utf, outfile);\nfprintf(outfile, \"\\n\");\n\nreturn 0;\n}\n\nstatic int callout_enumerate_function_void(pcre2_callout_enumerate_block *cb,\n  void *callout_data)\n{\n(void)cb;\n(void)callout_data;\nreturn 0;\n}\n\nstatic int callout_enumerate_function_fail(pcre2_callout_enumerate_block *cb,\n  void *callout_data)\n{\n(void)cb;\nreturn *(int *)callout_data;\n}\n\n\n\n/*************************************************\n*        Show information about a pattern        *\n*************************************************/\n\n/* This function is called after a pattern has been compiled if any of the\ninformation-requesting controls have been set.\n\nArguments:  none\n\nReturns:    PR_OK     continue processing next line\n            PR_SKIP   skip to a blank line\n            PR_ABEND  abort the pcre2test run\n*/\n\nstatic int\nshow_pattern_info(void)\n{\nint rc;\nuint32_t compile_options, overall_options, extra_options;\nBOOL utf = (compiled_code->overall_options & PCRE2_UTF) != 0;\n\nif ((pat_patctl.control & CTL_MEMORY) != 0)\n  show_memory_info();\n\nif ((pat_patctl.control2 & CTL2_FRAMESIZE) != 0)\n  show_framesize();\n\nif ((pat_patctl.control & (CTL_BINCODE|CTL_FULLBINCODE)) != 0)\n  {\n  fprintf(outfile, \"------------------------------------------------------------------\\n\");\n  pcre2_printint(compiled_code, outfile,\n    (pat_patctl.control & CTL_FULLBINCODE) != 0);\n  }\n\nif ((pat_patctl.control & CTL_INFO) != 0)\n  {\n  PCRE2_SPTR nametable;\n  uint8_t *start_bits;\n  BOOL heap_limit_set, match_limit_set, depth_limit_set;\n  uint32_t backrefmax, bsr_convention, capture_count, first_ctype, first_cunit,\n    hasbackslashc, hascrorlf, jchanged, last_ctype, last_cunit, match_empty,\n    depth_limit, heap_limit, match_limit, minlength, nameentrysize, namecount,\n    newline_convention;\n\n  /* These info requests may return PCRE2_ERROR_UNSET. */\n\n  switch(pattern_info(PCRE2_INFO_HEAPLIMIT, &heap_limit, TRUE))\n    {\n    case 0:\n    heap_limit_set = TRUE;\n    break;\n\n    case PCRE2_ERROR_UNSET:\n    heap_limit_set = FALSE;\n    break;\n\n    default:\n    return PR_ABEND;\n    }\n\n  switch(pattern_info(PCRE2_INFO_MATCHLIMIT, &match_limit, TRUE))\n    {\n    case 0:\n    match_limit_set = TRUE;\n    break;\n\n    case PCRE2_ERROR_UNSET:\n    match_limit_set = FALSE;\n    break;\n\n    default:\n    return PR_ABEND;\n    }\n\n  switch(pattern_info(PCRE2_INFO_DEPTHLIMIT, &depth_limit, TRUE))\n    {\n    case 0:\n    depth_limit_set = TRUE;\n    break;\n\n    case PCRE2_ERROR_UNSET:\n    depth_limit_set = FALSE;\n    break;\n\n    default:\n    return PR_ABEND;\n    }\n\n  /* These info requests should always succeed. */\n\n  if (pattern_info(PCRE2_INFO_BACKREFMAX, &backrefmax, FALSE) +\n      pattern_info(PCRE2_INFO_BSR, &bsr_convention, FALSE) +\n      pattern_info(PCRE2_INFO_CAPTURECOUNT, &capture_count, FALSE) +\n      pattern_info(PCRE2_INFO_FIRSTBITMAP, &start_bits, FALSE) +\n      pattern_info(PCRE2_INFO_FIRSTCODEUNIT, &first_cunit, FALSE) +\n      pattern_info(PCRE2_INFO_FIRSTCODETYPE, &first_ctype, FALSE) +\n      pattern_info(PCRE2_INFO_HASBACKSLASHC, &hasbackslashc, FALSE) +\n      pattern_info(PCRE2_INFO_HASCRORLF, &hascrorlf, FALSE) +\n      pattern_info(PCRE2_INFO_JCHANGED, &jchanged, FALSE) +\n      pattern_info(PCRE2_INFO_LASTCODEUNIT, &last_cunit, FALSE) +\n      pattern_info(PCRE2_INFO_LASTCODETYPE, &last_ctype, FALSE) +\n      pattern_info(PCRE2_INFO_MATCHEMPTY, &match_empty, FALSE) +\n      pattern_info(PCRE2_INFO_MINLENGTH, &minlength, FALSE) +\n      pattern_info(PCRE2_INFO_NAMECOUNT, &namecount, FALSE) +\n      pattern_info(PCRE2_INFO_NAMEENTRYSIZE, &nameentrysize, FALSE) +\n      pattern_info(PCRE2_INFO_NAMETABLE, &nametable, FALSE) +\n      pattern_info(PCRE2_INFO_NEWLINE, &newline_convention, FALSE)\n      != 0)\n    return PR_ABEND;\n\n  fprintf(outfile, \"Capture group count = %d\\n\", capture_count);\n\n  if (backrefmax > 0)\n    fprintf(outfile, \"Max back reference = %d\\n\", backrefmax);\n\n  if (maxlookbehind > 0)\n    fprintf(outfile, \"Max lookbehind = %d\\n\", maxlookbehind);\n\n  if (heap_limit_set)\n    fprintf(outfile, \"Heap limit = %u\\n\", heap_limit);\n\n  if (match_limit_set)\n    fprintf(outfile, \"Match limit = %u\\n\", match_limit);\n\n  if (depth_limit_set)\n    fprintf(outfile, \"Depth limit = %u\\n\", depth_limit);\n\n  if (namecount > 0)\n    {\n    fprintf(outfile, \"Named capture groups:\\n\");\n    for (; namecount > 0; namecount--)\n      {\n      size_t length = pcre2_strlen(nametable + IMM2_SIZE);\n      fprintf(outfile, \"  \");\n\n      /* In UTF mode the name may be a UTF string containing non-ASCII\n      letters and digits. We must output it as a UTF-8 string. In non-UTF mode,\n      use the normal string printing functions, which use escapes for all\n      non-ASCII characters. */\n\n      if (utf)\n        {\n#if PCRE2_CODE_UNIT_WIDTH == 32\n        PCRE2_SPTR nameptr = nametable + IMM2_SIZE;\n        while (*nameptr != 0)\n          {\n          uint8_t u8buff[6];\n          int len = ord_to_utf8(*nameptr++, u8buff);\n          fprintf(outfile, \"%.*s\", len, u8buff);\n          }\n#endif\n#if PCRE2_CODE_UNIT_WIDTH == 16\n        PCRE2_SPTR nameptr = nametable + IMM2_SIZE;\n        PCRE2_SPTR nameptr_end = nameptr + pcre2_strlen(nameptr);\n        while (*nameptr != 0)\n          {\n          int len;\n          uint8_t u8buff[6];\n          uint32_t c;\n          int ord_rc = utf16_to_ord(nameptr, nameptr_end, &c);\n          if (ord_rc > 0) nameptr += ord_rc;\n          else c = *nameptr++;\n          len = ord_to_utf8(c, u8buff);\n          fprintf(outfile, \"%.*s\", len, u8buff);\n          }\n#endif\n#if PCRE2_CODE_UNIT_WIDTH == 8\n        fprintf(outfile, \"%s\", nametable + IMM2_SIZE);\n#endif\n        }\n      else  /* Not UTF mode */\n        {\n        pchars(clr_none, nametable + IMM2_SIZE, length, FALSE, outfile);\n        }\n\n      while (length++ < nameentrysize - IMM2_SIZE) putc(' ', outfile);\n\n      fprintf(outfile, \"%3d\\n\", GET2(nametable, 0));\n\n      nametable = nametable + nameentrysize;\n      }\n    }\n\n  if (hascrorlf)     fprintf(outfile, \"Contains explicit CR or LF match\\n\");\n  if (hasbackslashc) fprintf(outfile, \"Contains \\\\C\\n\");\n  if (match_empty)   fprintf(outfile, \"May match empty string\\n\");\n\n  pattern_info(PCRE2_INFO_ARGOPTIONS, &compile_options, FALSE);\n  pattern_info(PCRE2_INFO_ALLOPTIONS, &overall_options, FALSE);\n  pattern_info(PCRE2_INFO_EXTRAOPTIONS, &extra_options, FALSE);\n\n  /* Remove UTF/UCP if they were there only because of forbid_utf. This saves\n  cluttering up the verification output of non-UTF test files. */\n\n  if ((pat_patctl.options & PCRE2_NEVER_UTF) == 0)\n    {\n    compile_options &= ~PCRE2_NEVER_UTF;\n    overall_options &= ~PCRE2_NEVER_UTF;\n    }\n\n  if ((pat_patctl.options & PCRE2_NEVER_UCP) == 0)\n    {\n    compile_options &= ~PCRE2_NEVER_UCP;\n    overall_options &= ~PCRE2_NEVER_UCP;\n    }\n\n  if ((compile_options|overall_options) != 0)\n    {\n    if (compile_options == overall_options)\n      show_compile_options(clr_none, compile_options, \"Options:\", \"\\n\");\n    else\n      {\n      show_compile_options(clr_none, compile_options, \"Compile options:\", \"\\n\");\n      show_compile_options(clr_none, overall_options, \"Overall options:\", \"\\n\");\n      }\n    }\n\n  if (extra_options != 0)\n    show_compile_extra_options(clr_none, extra_options, \"Extra options:\", \"\\n\");\n\n  if (compiled_code->optimization_flags != PCRE2_OPTIMIZATION_ALL)\n    show_optimize_flags(clr_none, compiled_code->optimization_flags, \"Optimizations: \", \"\\n\");\n\n  if (jchanged) fprintf(outfile, \"Duplicate name status changes\\n\");\n\n  if ((pat_patctl.control2 & CTL2_BSR_SET) != 0 ||\n      (compiled_code->flags & PCRE2_BSR_SET) != 0)\n    fprintf(outfile, \"\\\\R matches %s\\n\", (bsr_convention == PCRE2_BSR_UNICODE)?\n      \"any Unicode newline\" : \"CR, LF, or CRLF\");\n\n  if ((compiled_code->flags & PCRE2_NL_SET) != 0)\n    {\n    switch (newline_convention)\n      {\n      case PCRE2_NEWLINE_CR:\n      fprintf(outfile, \"Forced newline is CR\\n\");\n      break;\n\n      case PCRE2_NEWLINE_LF:\n      fprintf(outfile, \"Forced newline is LF\\n\");\n      break;\n\n      case PCRE2_NEWLINE_CRLF:\n      fprintf(outfile, \"Forced newline is CRLF\\n\");\n      break;\n\n      case PCRE2_NEWLINE_ANYCRLF:\n      fprintf(outfile, \"Forced newline is CR, LF, or CRLF\\n\");\n      break;\n\n      case PCRE2_NEWLINE_ANY:\n      fprintf(outfile, \"Forced newline is any Unicode newline\\n\");\n      break;\n\n      case PCRE2_NEWLINE_NUL:\n      fprintf(outfile, \"Forced newline is NUL\\n\");\n      break;\n\n      default:\n      break;\n      }\n    }\n\n  if (first_ctype == 2)\n    {\n    fprintf(outfile, \"First code unit at start or follows newline\\n\");\n    }\n  else if (first_ctype == 1)\n    {\n    const char *caseless =\n      ((compiled_code->flags & PCRE2_FIRSTCASELESS) == 0)?\n      \"\" : \" (caseless)\";\n    if (first_cunit != 0xff && PRINTABLE(first_cunit))\n      fprintf(outfile, \"First code unit = \\'%c\\'%s\\n\", CHAR_OUTPUT(first_cunit),\n              caseless);\n    else\n      {\n      fprintf(outfile, \"First code unit = \");\n      if (first_cunit == 0xff)\n        fprintf(outfile, \"\\\\xff\");\n      else\n        pchar(first_cunit, FALSE, outfile);\n      fprintf(outfile, \"%s\\n\", caseless);\n      }\n    }\n  else if (start_bits != NULL)\n    {\n    int input;\n    int c = 24;\n    fprintf(outfile, \"Starting code units:\");\n    for (input = 0; input < 256; input++)\n      {\n      int i = CHAR_INPUT_HEX(input);\n      if ((start_bits[i/8] & (1u << (i&7))) != 0)\n        {\n        if (c > 75)\n          {\n          fprintf(outfile, \"\\n \");\n          c = 2;\n          }\n        if (PRINTABLE(i) && i != CHAR_SPACE)\n          {\n          fprintf(outfile, \" %c\", CHAR_OUTPUT(i));\n          c += 2;\n          }\n        else\n          {\n          fprintf(outfile, \" \\\\x%02x\", CHAR_OUTPUT_HEX(i));\n          c += 5;\n          }\n        }\n      }\n    fprintf(outfile, \"\\n\");\n    }\n\n  if (last_ctype != 0)\n    {\n    const char *caseless =\n      ((compiled_code->flags & PCRE2_LASTCASELESS) == 0)?\n      \"\" : \" (caseless)\";\n    if (PRINTABLE(last_cunit))\n      fprintf(outfile, \"Last code unit = \\'%c\\'%s\\n\", CHAR_OUTPUT(last_cunit),\n              caseless);\n    else\n      {\n      fprintf(outfile, \"Last code unit = \");\n      pchar(last_cunit, FALSE, outfile);\n      fprintf(outfile, \"%s\\n\", caseless);\n      }\n    }\n\n  if ((compiled_code->optimization_flags & PCRE2_OPTIM_START_OPTIMIZE) != 0)\n    fprintf(outfile, \"Subject length lower bound = %d\\n\", minlength);\n\n  if (pat_patctl.jit != 0 && (pat_patctl.control & CTL_JITVERIFY) != 0)\n    {\n#ifdef SUPPORT_JIT\n    if (compiled_code->executable_jit != NULL)\n      fprintf(outfile, \"JIT compilation was successful\\n\");\n    else\n      {\n      cfprintf(clr_api_error, outfile, \"JIT compilation was not successful\");\n      if (jitrc != 0 && !print_error_message(jitrc, \" (\", \")\"))\n        return PR_ABEND;\n      fprintf(outfile, \"\\n\");\n      }\n#else\n      cfprintf(clr_api_error, outfile, \"JIT support is not available in this version of PCRE2\\n\");\n#endif\n    }\n  }\n\nrc = pcre2_callout_enumerate(compiled_code,\n  ((pat_patctl.control & CTL_CALLOUT_INFO) != 0)? callout_enumerate_function :\n  /* Exercise the callout enumeration code with a dummy callback to make sure\n  it works. */\n  callout_enumerate_function_void, NULL);\nif (rc != 0)\n  {\n  cfprintf(clr_api_error, outfile, \"Callout enumerate failed: error %d: \", rc);\n  if (rc < 0 && !print_error_message(rc, \"\", \"\\n\"))\n    return PR_ABEND;\n  return PR_SKIP;\n  }\n\nreturn PR_OK;\n}\n\n\n\n/*************************************************\n*              Handle serialization error        *\n*************************************************/\n\n/* Print an error message after a serialization failure.\n\nArguments:\n  rc         the error code\n  msg        an initial message for what failed\n\nReturns:     FALSE if print_error_message() fails\n*/\n\nstatic BOOL\nserial_error(int rc, const char *msg)\n{\ncfprintf(clr_api_error, outfile, \"%s failed: error %d: \", msg, rc);\nreturn print_error_message(rc, \"\", \"\\n\");\n}\n\n\n\n/*************************************************\n*               Process command line             *\n*************************************************/\n\n/* This function is called for lines beginning with # and a character that is\nnot ! or whitespace, when encountered between tests, which means that there is\nno compiled pattern (compiled_code is NULL). The line is in buffer.\n\nArguments:  none\n\nReturns:    PR_OK     continue processing next line\n            PR_SKIP   skip to a blank line\n            PR_ABEND  abort the pcre2test run\n*/\n\nstatic int\nprocess_command(void)\n{\nFILE *f;\nPCRE2_SIZE serial_size;\nsize_t i;\nint rc, cmd, yield;\nuint16_t first_listed_newline;\nconst char *cmdname;\nsize_t cmdlen;\nuint8_t *argptr, *serial;\nBOOL if_inverted;\n\nyield = PR_OK;\ncmd = CMD_UNKNOWN;\ncmdlen = 0;\n\nfor (i = 0; i < cmdlistcount; i++)\n  {\n  cmdname = cmdlist[i].name;\n  cmdlen = strlen(cmdname);\n  if (strncmp((char *)(buffer+1), cmdname, cmdlen) == 0 &&\n      (buffer[cmdlen+1] == 0 || isspace(buffer[cmdlen+1])))\n    {\n    cmd = cmdlist[i].value;\n    break;\n    }\n  }\n\nif (preprocess_only && cmd != CMD_IF && cmd != CMD_ENDIF)\n  return PR_OK;\n\nargptr = buffer + cmdlen + 1;\n\nif (restrict_for_perl_test && cmd != CMD_PATTERN && cmd != CMD_SUBJECT &&\n    cmd != CMD_IF && cmd != CMD_ENDIF)\n  {\n  cfprintf(clr_test_error, outfile, \"** #%s is not allowed after #perltest\\n\", cmdname);\n  return PR_ABEND;\n  }\n\nswitch(cmd)\n  {\n  case CMD_UNKNOWN:\n  cfprintf(clr_test_error, outfile, \"** Unknown command: %s\", buffer);\n  break;\n\n  case CMD_FORBID_UTF:\n  forbid_utf = PCRE2_NEVER_UTF|PCRE2_NEVER_UCP;\n  break;\n\n  case CMD_PERLTEST:\n  restrict_for_perl_test = TRUE;\n  break;\n\n  /* Set default pattern modifiers */\n\n  case CMD_PATTERN:\n  (void)decode_modifiers(argptr, CTX_DEFPAT, &def_patctl, NULL);\n  if (def_patctl.jit == 0 && (def_patctl.control & CTL_JITVERIFY) != 0)\n    def_patctl.jit = JIT_DEFAULT;\n  break;\n\n  /* Set default subject modifiers */\n\n  case CMD_SUBJECT:\n  (void)decode_modifiers(argptr, CTX_DEFDAT, NULL, &def_datctl);\n  break;\n\n  /* Check the default newline, and if not one of those listed, set up the\n  first one to be forced. An empty list unsets. */\n\n  case CMD_NEWLINE_DEFAULT:\n  local_newline_default = 0;   /* Unset */\n  first_listed_newline = 0;\n  for (;;)\n    {\n    while (isspace(*argptr)) argptr++;\n    if (*argptr == 0) break;\n    for (uint16_t j = 1; j < sizeof(newlines)/sizeof(char *); j++)\n      {\n      size_t nlen = strlen(newlines[j]);\n      if (strncmpic(argptr, (const uint8_t *)newlines[j], nlen) == 0 &&\n          isspace(argptr[nlen]))\n        {\n        if (j == NEWLINE_DEFAULT) return PR_OK;  /* Default is valid */\n        if (first_listed_newline == 0) first_listed_newline = j;\n        }\n      }\n    while (*argptr != 0 && !isspace(*argptr)) argptr++;\n    }\n  local_newline_default = first_listed_newline;\n  break;\n\n  /* Pop or copy a compiled pattern off the stack. Modifiers that do not affect\n  the compiled pattern (e.g. to give information) are permitted. The default\n  pattern modifiers are ignored. */\n\n  case CMD_POP:\n  case CMD_POPCOPY:\n  if (patstacknext <= 0)\n    {\n    cfprintf(clr_test_error, outfile, \"** Can't pop off an empty stack\\n\");\n    return PR_SKIP;\n    }\n  patctl_zero(&pat_patctl);  /* Completely unset */\n  if (!decode_modifiers(argptr, CTX_POPPAT, &pat_patctl, NULL))\n    return PR_SKIP;\n\n  if (cmd == CMD_POP)\n    {\n    compiled_code = patstack[--patstacknext];\n    }\n  else\n    {\n    compiled_code = pcre2_code_copy(patstack[patstacknext - 1]);\n    }\n\n  if (pat_patctl.jit != 0)\n    {\n    jitrc = pcre2_jit_compile(compiled_code, pat_patctl.jit);\n    }\n\n  rc = show_pattern_info();\n  if (rc != PR_OK) return rc;\n  break;\n\n  /* Save the stack of compiled patterns to a file, then empty the stack. */\n\n  case CMD_SAVE:\n  if (patstacknext <= 0)\n    {\n    cfprintf(clr_test_error, outfile, \"** No stacked patterns to save\\n\");\n    return PR_OK;\n    }\n\n  rc = open_file(argptr+1, BINARY_OUTPUT_MODE, &f, \"#save\");\n  if (rc != PR_OK) return rc;\n\n  rc = pcre2_serialize_encode((const pcre2_code **)patstack, patstacknext,\n    &serial, &serial_size, general_context);\n  if (rc < 0)\n    {\n    fclose(f);\n    if (!serial_error(rc, \"Serialization\")) return PR_ABEND;\n    break;\n    }\n\n  /* Write the length at the start of the file to make it straightforward to\n  get the right memory when re-loading. This saves having to read the file size\n  in different operating systems. To allow for different endianness (even\n  though reloading with the opposite endianness does not work), write the\n  length byte-by-byte. */\n\n  for (i = 0; i < 4; i++) fputc((serial_size >> (i*8)) & 255, f);\n  if (fwrite(serial, 1, serial_size, f) != serial_size)\n    {\n    cfprintf(clr_test_error, outfile, \"** Wrong return from fwrite()\\n\");\n    fclose(f);\n    return PR_ABEND;\n    }\n\n  fclose(f);\n  pcre2_serialize_free(serial);\n  while(patstacknext > 0)\n    {\n    compiled_code = patstack[--patstacknext];\n    pcre2_code_free(compiled_code);\n    }\n  compiled_code = NULL;\n  break;\n\n  /* Load a set of compiled patterns from a file onto the stack */\n\n  case CMD_LOAD:\n  rc = open_file(argptr+1, BINARY_INPUT_MODE, &f, \"#load\");\n  if (rc != PR_OK) return rc;\n\n  serial_size = 0;\n  for (i = 0; i < 4; i++) serial_size |= fgetc(f) << (i*8);\n\n  serial = malloc(serial_size);\n  if (serial == NULL)\n    {\n    cfprintf(clr_test_error, outfile, \"** Failed to get memory (size %\" SIZ_FORM \") for #load\\n\",\n      serial_size);\n    fclose(f);\n    return PR_ABEND;\n    }\n\n  i = fread(serial, 1, serial_size, f);\n  fclose(f);\n\n  if (i != serial_size)\n    {\n    cfprintf(clr_test_error, outfile, \"** Wrong return from fread()\\n\");\n    yield = PR_ABEND;\n    }\n  else\n    {\n    rc = pcre2_serialize_get_number_of_codes(serial);\n    if (rc < 0)\n      {\n      if (!serial_error(rc, \"Get number of codes\")) yield = PR_ABEND;\n      }\n    else\n      {\n      if (rc + patstacknext > PATSTACKSIZE)\n        {\n        cfprintf(clr_test_error, outfile, \"** Not enough space on pattern stack for %d pattern%s\\n\",\n          rc, (rc == 1)? \"\" : \"s\");\n        rc = PATSTACKSIZE - patstacknext;\n        cfprintf(clr_test_error, outfile, \"** Decoding %d pattern%s\\n\", rc,\n          (rc == 1)? \"\" : \"s\");\n        }\n      rc = pcre2_serialize_decode(patstack + patstacknext, rc, serial,\n        general_context);\n      if (rc < 0)\n        {\n        if (!serial_error(rc, \"Deserialization\")) yield = PR_ABEND;\n        }\n      else patstacknext += rc;\n      }\n    }\n\n  free(serial);\n  break;\n\n  /* Load a set of binary tables into tables3. */\n\n  case CMD_LOADTABLES:\n  rc = open_file(argptr+1, BINARY_INPUT_MODE, &f, \"#loadtables\");\n  if (rc != PR_OK) return rc;\n\n  if (tables3 == NULL)\n    {\n    int r;\n    r = pcre2_config(PCRE2_CONFIG_TABLES_LENGTH, &loadtables_length);\n    if (r >= 0) tables3 = malloc(loadtables_length);\n    }\n\n  if (tables3 == NULL)\n    {\n    cfprintf(clr_test_error, outfile, \"** Failed: malloc/config for #loadtables\\n\");\n    yield = PR_ABEND;\n    }\n  else if (fread(tables3, 1, loadtables_length, f) != loadtables_length)\n    {\n    cfprintf(clr_test_error, outfile, \"** Wrong return from fread()\\n\");\n    yield = PR_ABEND;\n    }\n\n  fclose(f);\n  break;\n\n  case CMD_IF:\n  if (inside_if)\n    {\n    cfprintf(clr_test_error, outfile, \"** Nested #if not supported\\n\");\n    return PR_ABEND;\n    }\n\n  while (isspace(*argptr)) argptr++;\n  if_inverted = FALSE;\n  if (*argptr == '!')\n    {\n    argptr++;\n    if_inverted = TRUE;\n    }\n  while (isspace(*argptr)) argptr++;\n  for (i = 0; i < COPTLISTCOUNT; i++)\n    {\n    size_t optlen = strlen(coptlist[i].name);\n    const uint8_t *argptr_trail;\n    if (coptlist[i].type != CONF_FIX)\n      continue;\n    if (strncmp((const char*)argptr, coptlist[i].name, optlen) != 0)\n      continue;\n    argptr_trail = argptr + optlen;\n    while (isspace(*argptr_trail)) argptr_trail++;\n    if (*argptr_trail == 0 || *argptr_trail == '\\n')\n      break;\n    }\n  if (i == COPTLISTCOUNT)\n    {\n    cfprintf(clr_test_error, outfile, \"** Unknown condition: %s\\n\", buffer);\n    return PR_ABEND;\n    }\n\n  /* Condition FALSE - skip this line and everything until #endif. */\n  if ((coptlist[i].value != 0) == if_inverted)\n    yield = PR_ENDIF;\n\n  inside_if = TRUE;\n  break;\n\n  case CMD_ENDIF:\n  if (!inside_if)\n    {\n    cfprintf(clr_test_error, outfile, \"** Unexpected #endif\\n\");\n    return PR_ABEND;\n    }\n  inside_if = FALSE;\n  break;\n  }\n\nreturn yield;\n}\n\n\n\n/*************************************************\n*               Process pattern line             *\n*************************************************/\n\n/* This function is called when the input buffer contains the start of a\npattern. The first character is known to be a valid delimiter. The pattern is\nread, modifiers are interpreted, and a suitable local context is set up for\nthis test. The pattern is then compiled.\n\nArguments:  none\n\nReturns:    PR_OK     continue processing next line\n            PR_SKIP   skip to a blank line\n            PR_ABEND  abort the pcre2test run\n*/\n\nstatic int\nprocess_pattern(void)\n{\nBOOL utf;\nuint32_t k;\nuint8_t *p = buffer;\nunsigned int delimiter = *p++;\nint rc, errorcode;\npcre2_compile_context *use_pat_context;\nPCRE2_SPTR use_pbuffer;\nuint32_t use_forbid_utf = forbid_utf;\nPCRE2_SIZE patlen, full_patlen;\nPCRE2_SIZE valgrind_access_length;\nPCRE2_SIZE erroroffset;\nint32_t serialize_rc;\nuint8_t *serialized_bytes;\nPCRE2_SIZE serialized_size;\n\n/* The perltest.sh script supports only / as a delimiter. */\n\nif (restrict_for_perl_test && delimiter != '/')\n  {\n  cfprintf(clr_test_error, outfile, \"** The only allowed delimiter after #perltest is '/'\\n\");\n  return PR_ABEND;\n  }\n\n/* Initialize the context and pattern/data controls for this test from the\ndefaults. */\n\nmemcpy(pat_context, default_pat_context, sizeof(pcre2_compile_context));\nmemcpy(&pat_patctl, &def_patctl, sizeof(patctl));\n\n/* Find the end of the pattern, reading more lines if necessary. */\n\nfor(;;)\n  {\n  while (*p != 0)\n    {\n    if (*p == '\\\\' && p[1] != 0) p++;\n      else if (*p == delimiter) break;\n    p++;\n    }\n  if (*p != 0) break;\n  if ((p = extend_inputline(infile, p, \"    > \")) == NULL)\n    {\n    cfprintf(clr_test_error, outfile, \"** Unexpected EOF\\n\");\n    return PR_ABEND;\n    }\n  if (!INTERACTIVE(infile)) cfprintf(clr_input, outfile, \"%s\", (char *)p);\n  }\n\n/* If the first character after the delimiter is backslash, make the pattern\nend with backslash. This is purely to provide a way of testing for the error\nmessage when a pattern ends with backslash. */\n\nif (p[1] == '\\\\') *p++ = '\\\\';\n\n/* Terminate the pattern at the delimiter, and compute the length. */\n\n*p++ = 0;\npatlen = p - buffer - 2;\n\n/* Look for modifiers and options after the final delimiter. */\n\nif (!decode_modifiers(p, CTX_PAT, &pat_patctl, NULL)) return PR_SKIP;\n\n/* Note that the match_invalid_utf option also sets utf when passed to\npcre2_compile(). */\n\nutf = (pat_patctl.options & (PCRE2_UTF|PCRE2_MATCH_INVALID_UTF)) != 0;\n\n/* The utf8_input modifier is not allowed in 8-bit mode, and is mutually\nexclusive with the utf modifier. */\n\nif ((pat_patctl.control & CTL_UTF8_INPUT) != 0)\n  {\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  cfprintf(clr_test_error, outfile, \"** The utf8_input modifier is not allowed in 8-bit mode\\n\");\n  return PR_SKIP;\n#else\n  if (utf)\n    {\n    cfprintf(clr_test_error, outfile, \"** The utf and utf8_input modifiers are mutually exclusive\\n\");\n    return PR_SKIP;\n    }\n#endif\n  }\n\n/* The convert and posix modifiers are mutually exclusive. */\n\nif (pat_patctl.convert_type != CONVERT_UNSET &&\n    (pat_patctl.control & CTL_POSIX) != 0)\n  {\n  cfprintf(clr_test_error, outfile, \"** The convert and posix modifiers are mutually exclusive\\n\");\n  return PR_SKIP;\n  }\n\n/* Check for mutually exclusive control modifiers. At present, these are all in\nthe first control word. */\n\nfor (k = 0; k < sizeof(exclusive_pat_controls)/sizeof(uint32_t); k++)\n  {\n  uint32_t c = pat_patctl.control & exclusive_pat_controls[k];\n  if (c != 0 && c != (c & (~c+1)))\n    {\n    show_controls(clr_test_error, c, 0, \"** Not allowed together:\");\n    fprintf(outfile, \"\\n\");\n    return PR_SKIP;\n    }\n  }\n\n/* Assume full JIT compile for jitverify and/or jitfast if nothing else was\nspecified. */\n\nif (pat_patctl.jit == 0 &&\n    (pat_patctl.control & (CTL_JITVERIFY|CTL_JITFAST)) != 0)\n  pat_patctl.jit = JIT_DEFAULT;\n\n/* Now copy the pattern to pbuffer8 for use in 8-bit testing. Convert from hex\nif requested (literal strings in quotes may be present within the hexadecimal\npairs). The result must necessarily be fewer characters so will always fit in\npbuffer8. */\n\nif ((pat_patctl.control & CTL_HEXPAT) != 0)\n  {\n  uint8_t *pp, *pt;\n  uint32_t c, d;\n\n  pt = pbuffer8;\n  for (pp = buffer + 1; *pp != 0; pp++)\n    {\n    if (isspace(*pp)) continue;\n    c = *pp++;\n\n    /* Handle a literal substring */\n\n    if (c == '\\'' || c == '\"')\n      {\n      uint8_t *pq = pp;\n      for (;; pp++)\n        {\n        d = *pp;\n        if (d == 0)\n          {\n          cfprintf(clr_test_error, outfile, \"** Missing closing quote in hex pattern: \"\n            \"opening quote is at offset %\" PTR_FORM \".\\n\", pq - buffer - 2);\n          return PR_SKIP;\n          }\n        if (d == c) break;\n        *pt++ = d;\n        }\n      }\n\n    /* Expect a hex pair */\n\n    else\n      {\n      if (!isxdigit(c))\n        {\n        cfprintf(clr_test_error, outfile, \"** Unexpected non-hex-digit '%c' at offset %\"\n          PTR_FORM \" in hex pattern: quote missing?\\n\", c, pp - buffer - 2);\n        return PR_SKIP;\n        }\n      if (*pp == 0)\n        {\n        cfprintf(clr_test_error, outfile, \"** Odd number of digits in hex pattern\\n\");\n        return PR_SKIP;\n        }\n      d = *pp;\n      if (!isxdigit(d))\n        {\n        cfprintf(clr_test_error, outfile, \"** Unexpected non-hex-digit '%c' at offset %\"\n          PTR_FORM \" in hex pattern: quote missing?\\n\", d, pp - buffer - 1);\n        return PR_SKIP;\n        }\n      c = toupper(c);\n      d = toupper(d);\n      c = isdigit(c)? (c - '0') : (c - 'A' + 10);\n      d = isdigit(d)? (d - '0') : (d - 'A' + 10);\n      *pt++ = CHAR_OUTPUT(CHAR_INPUT_HEX((c << 4) + d));\n      }\n    }\n  *pt = 0;\n  patlen = pt - pbuffer8;\n  }\n\n/* If not a hex string, process for repetition expansion if requested. */\n\nelse if ((pat_patctl.control & CTL_EXPAND) != 0)\n  {\n  uint8_t *pp, *pt;\n\n  pt = pbuffer8;\n  for (pp = buffer + 1; *pp != 0; pp++)\n    {\n    uint8_t *pc = pp;\n    uint32_t count = 1;\n    size_t length = 1;\n\n    /* Check for replication syntax; if not found, the defaults just set will\n    prevail and one character will be copied. */\n\n    if (pp[0] == '\\\\' && pp[1] == '[')\n      {\n      uint8_t *pe;\n      for (pe = pp + 2; *pe != 0; pe++)\n        {\n        if (pe[0] == ']' && pe[1] == '{')\n          {\n          size_t clen = pe - pc - 2;\n          uint32_t i = 0;\n          unsigned long uli;\n          char *endptr;\n\n          pe += 2;\n          uli = strtoul((const char *)pe, &endptr, 10);\n          if (U32OVERFLOW(uli))\n            {\n            cfprintf(clr_test_error, outfile, \"** Pattern repeat count too large\\n\");\n            return PR_SKIP;\n            }\n\n          i = (uint32_t)uli;\n          pe = (uint8_t *)endptr;\n          if (*pe == '}')\n            {\n            if (i == 0)\n              {\n              cfprintf(clr_test_error, outfile, \"** Zero repeat not allowed\\n\");\n              return PR_SKIP;\n              }\n            pc += 2;\n            count = i;\n            length = clen;\n            pp = pe;\n            break;\n            }\n          }\n        }\n      }\n\n    /* Add to output. If the buffer is too small expand it. The function for\n    expanding buffers always keeps buffer and pbuffer8 in step as far as their\n    size goes. */\n\n    while (pt + count * length > pbuffer8 + pbuffer8_size)\n      {\n      size_t pc_offset = pc - buffer;\n      size_t pp_offset = pp - buffer;\n      size_t pt_offset = pt - pbuffer8;\n      expand_input_buffers();\n      pc = buffer + pc_offset;\n      pp = buffer + pp_offset;\n      pt = pbuffer8 + pt_offset;\n      }\n\n    for (; count > 0; count--)\n      {\n      memcpy(pt, pc, length);\n      pt += length;\n      }\n    }\n\n  *pt = 0;\n  patlen = pt - pbuffer8;\n\n  if ((pat_patctl.control & CTL_INFO) != 0)\n    fprintf(outfile, \"Expanded: %s\\n\", pbuffer8);\n  }\n\n/* Neither hex nor expanded, just copy the input verbatim. */\n\nelse\n  {\n  strncpy((char *)pbuffer8, (char *)(buffer+1), patlen + 1);\n  }\n\n/* Sort out character tables */\n\nif (pat_patctl.locale[0] != MOD_STR_UNSET)\n  {\n  if (pat_patctl.tables_id != 0)\n    {\n    cfprintf(clr_test_error, outfile, \"** 'Locale' and 'tables' must not both be set\\n\");\n    return PR_SKIP;\n    }\n  if (setlocale(LC_CTYPE, (const char *)pat_patctl.locale+1) == NULL)\n    {\n    cfprintf(clr_test_error, outfile, \"** Failed to set locale \\\"%s\\\"\\n\", pat_patctl.locale+1);\n    return PR_SKIP;\n    }\n  if (strcmp((const char *)pat_patctl.locale+1, (const char *)locale_name) != 0)\n    {\n    strncpy((char *)locale_name, (char *)pat_patctl.locale + 1, sizeof(locale_name));\n    locale_name[sizeof(locale_name) - 1] = '\\0';\n    if (locale_tables != NULL)\n      {\n      pcre2_maketables_free(general_context, locale_tables);\n      }\n    locale_tables = pcre2_maketables(general_context);\n    }\n  use_tables = locale_tables;\n  }\n\nelse switch (pat_patctl.tables_id)\n  {\n  case 0: use_tables = NULL; break;\n  case 1: use_tables = tables1; break;\n  case 2: use_tables = tables2; break;\n\n  case 3:\n  if (tables3 == NULL)\n    {\n    cfprintf(clr_test_error, outfile, \"** 'Tables = 3' is invalid: binary tables have not \"\n      \"been loaded\\n\");\n    return PR_SKIP;\n    }\n  use_tables = tables3;\n  break;\n\n  default:\n  cfprintf(clr_test_error, outfile, \"** 'Tables' must specify 0, 1, 2, or 3.\\n\");\n  return PR_SKIP;\n  }\n\npcre2_set_character_tables(pat_context, use_tables);\n\n/* Set up for the stackguard test. */\n\nif (pat_patctl.stackguard_test != 0)\n  {\n  pcre2_set_compile_recursion_guard(pat_context, stack_guard, NULL);\n  }\n\n/* Handle compiling via the POSIX interface, which doesn't support the\ntiming, showing, or debugging options, nor the ability to pass over\nlocal character tables. Neither does it have 16-bit or 32-bit support. */\n\nif ((pat_patctl.control & CTL_POSIX) != 0)\n  {\n#if PCRE2_CODE_UNIT_WIDTH != 8\n  cfprintf(clr_test_error, outfile, \"** The POSIX interface is available only in 8-bit mode\\n\");\n  return PR_SKIP;\n\n#else\n  int cflags = 0;\n  const char *msg = \"** Ignored with POSIX interface:\";\n\n  /* Check for features that the POSIX interface does not support. */\n\n  if (pat_patctl.locale[0] != MOD_STR_UNSET) prmsg(&msg, \"locale\");\n  if (pat_patctl.replacement[0] != MOD_STR_UNSET) prmsg(&msg, \"replace\");\n  if (pat_patctl.tables_id != 0) prmsg(&msg, \"tables\");\n  if (pat_patctl.stackguard_test != 0) prmsg(&msg, \"stackguard\");\n  if (timeit > 0) prmsg(&msg, \"timing\");\n  if (pat_patctl.jit != 0) prmsg(&msg, \"JIT\");\n\n  if ((pat_patctl.options & ~POSIX_SUPPORTED_COMPILE_OPTIONS) != 0)\n    {\n    show_compile_options(\n      clr_test_error,\n      pat_patctl.options & (uint32_t)(~POSIX_SUPPORTED_COMPILE_OPTIONS),\n      msg, \"\");\n    msg = \"\";\n    }\n\n  if ((pat_context->extra_options &\n       (uint32_t)(~POSIX_SUPPORTED_COMPILE_EXTRA_OPTIONS)) != 0)\n    {\n    show_compile_extra_options(\n      clr_test_error,\n      pat_context->extra_options &\n        (uint32_t)(~POSIX_SUPPORTED_COMPILE_EXTRA_OPTIONS),\n      msg, \"\");\n    msg = \"\";\n    }\n\n  if ((pat_patctl.control & (uint32_t)(~POSIX_SUPPORTED_COMPILE_CONTROLS)) != 0 ||\n      (pat_patctl.control2 & (uint32_t)(~POSIX_SUPPORTED_COMPILE_CONTROLS2)) != 0)\n    {\n    show_controls(\n      clr_test_error,\n      pat_patctl.control & (uint32_t)(~POSIX_SUPPORTED_COMPILE_CONTROLS),\n      pat_patctl.control2 & (uint32_t)(~POSIX_SUPPORTED_COMPILE_CONTROLS2),\n      msg);\n    msg = \"\";\n\n    /* Remove ignored options so as not to get a repeated message for those\n    that are actually subject controls. */\n\n    pat_patctl.control &= (uint32_t)(POSIX_SUPPORTED_COMPILE_CONTROLS);\n    pat_patctl.control2 &= (uint32_t)(POSIX_SUPPORTED_COMPILE_CONTROLS2);\n    }\n\n  if (local_newline_default != 0) prmsg(&msg, \"#newline_default\");\n  if (pat_context->max_pattern_length != PCRE2_UNSET)\n    prmsg(&msg, \"max_pattern_length\");\n  if (pat_context->max_pattern_compiled_length != PCRE2_UNSET)\n    prmsg(&msg, \"max_pattern_compiled_length\");\n  if (pat_context->parens_nest_limit != PARENS_NEST_DEFAULT)\n    prmsg(&msg, \"parens_nest_limit\");\n\n  if (msg[0] == 0) fprintf(outfile, \"\\n\");\n\n  /* Translate PCRE2 options to POSIX options and then compile. */\n\n  if (utf) cflags |= REG_UTF;\n  if ((pat_patctl.control & CTL_POSIX_NOSUB) != 0) cflags |= REG_NOSUB;\n  if ((pat_patctl.options & PCRE2_UCP) != 0) cflags |= REG_UCP;\n  if ((pat_patctl.options & PCRE2_CASELESS) != 0) cflags |= REG_ICASE;\n  if ((pat_patctl.options & PCRE2_LITERAL) != 0) cflags |= REG_NOSPEC;\n  if ((pat_patctl.options & PCRE2_MULTILINE) != 0) cflags |= REG_NEWLINE;\n  if ((pat_patctl.options & PCRE2_DOTALL) != 0) cflags |= REG_DOTALL;\n  if ((pat_patctl.options & PCRE2_UNGREEDY) != 0) cflags |= REG_UNGREEDY;\n\n  if ((pat_patctl.control & (CTL_HEXPAT|CTL_USE_LENGTH)) != 0)\n    {\n    preg.re_endp = (char *)pbuffer8 + patlen;\n    cflags |= REG_PEND;\n    }\n\n#if defined(EBCDIC) && !EBCDIC_IO\n  ascii_to_ebcdic_str(pbuffer8, patlen);\n#endif\n\n  rc = regcomp(&preg, (char *)pbuffer8, cflags);\n\n  /* Compiling failed */\n\n  if (rc != 0)\n    {\n    char *regbuffer;\n    size_t bsize, usize, strsize;\n\n    preg.re_pcre2_code = NULL;     /* In case something was left in there */\n    preg.re_match_data = NULL;\n\n    bsize = (pat_patctl.regerror_buffsize >= 0 &&\n             (unsigned)pat_patctl.regerror_buffsize <= pbuffer8_size)?\n      (unsigned)pat_patctl.regerror_buffsize : pbuffer8_size;\n    regbuffer = (char *)pbuffer8 + (pbuffer8_size - bsize);\n    usize = regerror(rc, &preg, regbuffer, bsize);\n    strsize = ((usize > bsize)? bsize : usize) - 1;\n\n    cfprintf(clr_api_error, outfile, \"Failed: POSIX code %d: \", rc);\n    if (bsize > 0) pchars(clr_api_error, (PCRE2_SPTR8)regbuffer, strsize, utf, outfile);\n    fputs(\"\\n\", outfile);\n    if (usize > bsize)\n      {\n      cfprintf(clr_test_error, outfile, \"** regerror() message truncated\\n\");\n      }\n    if (bsize > 0 && strlen(regbuffer) != strsize)\n      {\n      cfprintf(clr_test_error, outfile, \"** regerror() strlen incorrect\\n\");\n      return PR_ABEND;\n      }\n    return PR_SKIP;\n    }\n\n  /* Compiling succeeded. Check that the values in the preg block are sensible.\n  It can happen that pcre2test is accidentally linked with a different POSIX\n  library which succeeds, but of course puts different things into preg. In\n  this situation, calling regfree() may cause a segfault (or invalid free() in\n  valgrind), so ensure that preg.re_pcre2_code is NULL, which suppresses the\n  calling of regfree() on exit. */\n\n  if (preg.re_pcre2_code == NULL ||\n      ((pcre2_real_code_8 *)preg.re_pcre2_code)->magic_number != MAGIC_NUMBER ||\n      ((pcre2_real_code_8 *)preg.re_pcre2_code)->top_bracket != preg.re_nsub ||\n      preg.re_match_data == NULL ||\n      preg.re_cflags != cflags)\n    {\n    cfprintf(clr_test_error, outfile,\n      \"** The regcomp() function returned zero (success), but the values set\\n\"\n      \"** in the preg block are not valid for PCRE2. Check that pcre2test is\\n\"\n      \"** linked with PCRE2's pcre2posix module (-lpcre2-posix) and not with\\n\"\n      \"** some other POSIX regex library.\\n**\\n\");\n    preg.re_pcre2_code = NULL;\n    return PR_ABEND;\n    }\n\n  return PR_OK;\n#endif  /* PCRE2_CODE_UNIT_WIDTH != 8 */\n  }\n\n/* Handle compiling via the native interface. Controls that act later are\nignored with \"push\". Replacements are locked out. */\n\nif ((pat_patctl.control & (CTL_PUSH|CTL_PUSHCOPY|CTL_PUSHTABLESCOPY)) != 0)\n  {\n  if (pat_patctl.replacement[0] != MOD_STR_UNSET)\n    {\n    cfprintf(clr_test_error, outfile, \"** Replacement text is not supported with 'push'.\\n\");\n    return PR_OK;\n    }\n  if ((pat_patctl.control & ~PUSH_SUPPORTED_COMPILE_CONTROLS) != 0 ||\n      (pat_patctl.control2 & ~PUSH_SUPPORTED_COMPILE_CONTROLS2) != 0)\n    {\n    show_controls(clr_test_error, pat_patctl.control & ~PUSH_SUPPORTED_COMPILE_CONTROLS,\n                  pat_patctl.control2 & ~PUSH_SUPPORTED_COMPILE_CONTROLS2,\n      \"** Ignored when compiled pattern is stacked with 'push':\");\n    fprintf(outfile, \"\\n\");\n    }\n  if ((pat_patctl.control & PUSH_COMPILE_ONLY_CONTROLS) != 0 ||\n      (pat_patctl.control2 & PUSH_COMPILE_ONLY_CONTROLS2) != 0)\n    {\n    show_controls(clr_test_error, pat_patctl.control & PUSH_COMPILE_ONLY_CONTROLS,\n                  pat_patctl.control2 & PUSH_COMPILE_ONLY_CONTROLS2,\n      \"** Applies only to compile when pattern is stacked with 'push':\");\n    fprintf(outfile, \"\\n\");\n    }\n  }\n\n/* Convert the input in non-8-bit modes. */\n\nerrorcode = 0;\n\n#if defined(EBCDIC) && !EBCDIC_IO\nascii_to_ebcdic_str(pbuffer8, patlen);\n#endif\n\n#if PCRE2_CODE_UNIT_WIDTH != 8\nerrorcode = G(to,PCRE2_CODE_UNIT_WIDTH)(pbuffer8, utf, &patlen);\nswitch(errorcode)\n  {\n  case -1:\n  cfprintf(clr_test_error, outfile, \"** Failed: invalid UTF-8 string cannot be \"\n    \"converted to \" STR(PCRE2_CODE_UNIT_WIDTH) \"-bit string\\n\");\n  return PR_SKIP;\n\n  case -2:\n  cfprintf(clr_test_error, outfile, \"** Failed: character value greater than 0x10ffff \"\n    \"cannot be converted to UTF\\n\");\n  return PR_SKIP;\n\n  case -3:\n  cfprintf(clr_test_error, outfile, \"** Failed: character value greater than 0xffff \"\n    \"cannot be converted to 16-bit in non-UTF mode\\n\");\n  return PR_SKIP;\n\n  default:\n  break;\n  }\n#endif\n\n/* When valgrind is supported, detect accesses to the 8-bit buffer now that we\nhave finished with it. */\n\n#if defined SUPPORT_VALGRIND && PCRE2_CODE_UNIT_WIDTH != 8\nVALGRIND_MAKE_MEM_UNDEFINED(pbuffer8, pbuffer8_size);\n#endif\n\n/* The pattern is now in pbuffer[8|16|32], with the length in code units in\npatlen. If it is to be converted, copy the result back afterwards so that it\nends up back in the usual place. */\n\nif (pat_patctl.convert_type != CONVERT_UNSET)\n  {\n  int convert_return = PR_OK;\n  uint32_t convert_options = pat_patctl.convert_type;\n  PCRE2_UCHAR *converted_pattern;\n  PCRE2_SIZE converted_length = JUNK_OFFSET;\n  BOOL zero_terminate;\n\n  if (pat_patctl.convert_length != CONVERT_UNSET)\n    {\n    converted_length = pat_patctl.convert_length;\n    converted_pattern = malloc(converted_length? CU2BYTES(converted_length) : 1);\n    if (converted_pattern == NULL)\n      {\n      cfprintf(clr_test_error, outfile, \"** Failed: malloc failed for converted pattern\\n\");\n      return PR_ABEND;\n      }\n    }\n  else converted_pattern = NULL;  /* Let the library allocate */\n\n  if (utf) convert_options |= PCRE2_CONVERT_UTF;\n  if ((pat_patctl.options & PCRE2_NO_UTF_CHECK) != 0)\n    convert_options |= PCRE2_CONVERT_NO_UTF_CHECK;\n\n  memcpy(con_context, default_con_context, sizeof(pcre2_convert_context));\n\n  if (pat_patctl.convert_glob_escape != 0)\n    {\n    uint32_t escape = (pat_patctl.convert_glob_escape == '0')? 0 :\n      pat_patctl.convert_glob_escape;\n    rc = pcre2_set_glob_escape(con_context, CHAR_INPUT(escape));\n    if (rc != 0)\n      {\n      cfprintf(clr_test_error, outfile, \"** Invalid glob escape '%c'\\n\",\n        pat_patctl.convert_glob_escape);\n      convert_return = PR_SKIP;\n      goto CONVERT_FINISH;\n      }\n    }\n\n  if (pat_patctl.convert_glob_separator != 0)\n    {\n    uint32_t separator = pat_patctl.convert_glob_separator;\n    rc = pcre2_set_glob_separator(con_context, CHAR_INPUT(separator));\n    if (rc != 0)\n      {\n      cfprintf(clr_test_error, outfile, \"** Invalid glob separator '%c'\\n\",\n        pat_patctl.convert_glob_separator);\n      convert_return = PR_SKIP;\n      goto CONVERT_FINISH;\n      }\n    }\n\n  /* Set up the input buffer in the same way as for pcre2_compile() below. */\n\n  zero_terminate = (pat_patctl.control & (CTL_HEXPAT|CTL_USE_LENGTH)) == 0;\n\n#ifdef SUPPORT_VALGRIND\n  VALGRIND_MAKE_MEM_NOACCESS(pbuffer + CU2BYTES(patlen + zero_terminate),\n    pbuffer_size - CU2BYTES(patlen + zero_terminate));\n#endif\n\n  if (zero_terminate) patlen = PCRE2_ZERO_TERMINATED;\n  use_pbuffer = ((pat_patctl.control2 & CTL2_NULL_PATTERN) == 0)? pbuffer : NULL;\n\n  rc = pcre2_pattern_convert(use_pbuffer, patlen, convert_options,\n    &converted_pattern, &converted_length, con_context);\n\n#ifdef SUPPORT_VALGRIND\n  VALGRIND_MAKE_MEM_UNDEFINED(pbuffer, pbuffer_size);\n#endif\n\n  if (rc != 0)\n    {\n    cfprintf(clr_api_error, outfile, \"** Pattern conversion error at offset %\" SIZ_FORM \": \",\n      converted_length);\n    convert_return = print_error_message(rc, \"\", \"\\n\")? PR_SKIP:PR_ABEND;\n    }\n\n  /* Output the converted pattern, then copy it. */\n\n  else\n    {\n    pchars(clr_none, converted_pattern, converted_length, utf, outfile);\n    fprintf(outfile, \"\\n\");\n\n    if (CU2BYTES(converted_length + 1) > pbuffer_size)\n      {\n      // TODO This seems... unfortunate? There must be some patterns that can\n      // expand when converted from glob to regex, but we aren't allowing for\n      // that here. Presumably we should expand the buffer rather than moan.\n      cfprintf(clr_test_error, outfile, \"** Pattern conversion is too long for the buffer\\n\");\n      convert_return = PR_SKIP;\n      }\n    else\n      {\n      memcpy(pbuffer, converted_pattern, CU2BYTES(converted_length + 1));\n      patlen = converted_length;\n      }\n    }\n\n  /* Free the converted pattern. */\n\n  CONVERT_FINISH:\n  if (pat_patctl.convert_length != CONVERT_UNSET)\n    free(converted_pattern);\n  else\n    pcre2_converted_pattern_free(converted_pattern);\n\n  /* Return if conversion was unsuccessful. */\n\n  if (convert_return != PR_OK) return convert_return;\n  }\n\n/* By default we pass a zero-terminated pattern, but a length is passed if\n\"use_length\" was specified or this is a hex pattern (which might contain binary\nzeros). When valgrind is supported, arrange for the unused part of the buffer\nto be marked as no-access. */\n\nfull_patlen = patlen;\nvalgrind_access_length = patlen;\nif ((pat_patctl.control & (CTL_HEXPAT|CTL_USE_LENGTH)) == 0)\n  {\n  patlen = PCRE2_ZERO_TERMINATED;\n  valgrind_access_length += 1;  /* For the terminating zero */\n  }\n\n#ifdef SUPPORT_VALGRIND\nVALGRIND_MAKE_MEM_NOACCESS(pbuffer + valgrind_access_length,\n  pbuffer_size - CU2BYTES(valgrind_access_length));\n#else  /* Valgrind not supported */\n(void)valgrind_access_length;  /* Avoid compiler warning */\n#endif\n\n/* If #newline_default has been used and the library was not compiled with an\nappropriate default newline setting, local_newline_default will be non-zero. We\nuse this if there is no explicit newline modifier. */\n\nif ((pat_patctl.control2 & CTL2_NL_SET) == 0 && local_newline_default != 0)\n  {\n  pcre2_set_newline(pat_context, local_newline_default);\n  }\n\n/* The null_context modifier is used to test calling pcre2_compile() with a\nNULL context. */\n\nuse_pat_context = ((pat_patctl.control & CTL_NULLCONTEXT) != 0)?\n  NULL : pat_context;\n\n/* If PCRE2_LITERAL is set, set use_forbid_utf zero because PCRE2_NEVER_UTF\nand PCRE2_NEVER_UCP are invalid with it. */\n\nif ((pat_patctl.options & PCRE2_LITERAL) != 0) use_forbid_utf = 0;\n\n/* Set use_pbuffer to the input buffer or NULL as requested. */\n\nuse_pbuffer = ((pat_patctl.control2 & CTL2_NULL_PATTERN) == 0)? pbuffer : NULL;\n\n/* Compile many times when timing. */\n\nif (timeit > 0)\n  {\n  int i;\n  clock_t time_taken = 0;\n  for (i = 0; i < timeit; i++)\n    {\n    clock_t start_time = clock();\n    compiled_code = pcre2_compile(use_pbuffer, patlen,\n      pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset,\n        use_pat_context);\n    time_taken += clock() - start_time;\n    if (compiled_code != NULL)\n      pcre2_code_free(compiled_code);\n    }\n  total_compile_time += time_taken;\n  cfprintf(clr_profiling, outfile, \"Compile time %8.4f microseconds\\n\",\n    ((1000000 / CLOCKS_PER_SEC) * (double)time_taken) / timeit);\n  }\n\n/* A final compile that is used \"for real\". */\n\nmallocs_called = 0;\ncompiled_code = pcre2_compile(use_pbuffer, patlen,\n  pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset, use_pat_context);\n\n/* For malloc testing, we repeat the compilation. */\n\nif (malloc_testing)\n  {\n  for (int i = 0, target_mallocs = mallocs_called; i <= target_mallocs; i++)\n    {\n    if (compiled_code != NULL)\n      pcre2_code_free(compiled_code);\n\n    errorcode = 0;\n    erroroffset = 0;\n    mallocs_until_failure = i;\n    compiled_code = pcre2_compile(use_pbuffer, patlen,\n      pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset, use_pat_context);\n    mallocs_until_failure = INT_MAX;\n\n    if (i < target_mallocs &&\n        !(compiled_code == NULL && errorcode == PCRE2_ERROR_HEAP_FAILED))\n      {\n      cfprintf(clr_test_error, outfile, \"** malloc() compile test did not fail as expected (%d)\\n\",\n              errorcode);\n      return PR_ABEND;\n      }\n    }\n  }\n\n/* If valgrind is supported, mark the pbuffer as accessible again. We leave the\npattern in the test-mode's buffer defined because it may be read from a callout\nduring matching. */\n\n#ifdef SUPPORT_VALGRIND\nVALGRIND_MAKE_MEM_UNDEFINED(pbuffer + valgrind_access_length,\n  pbuffer_size - CU2BYTES(valgrind_access_length));\n#endif\n\n/* Call the JIT compiler if requested. When timing, or testing malloc failures,\nwe must free and recompile the pattern each time because that is the only way to\nfree the JIT compiled code. We know that compilation will always succeed. */\n\nif (compiled_code != NULL && pat_patctl.jit != 0)\n  {\n  if (timeit > 0)\n    {\n    int i;\n    clock_t time_taken = 0;\n\n    for (i = 0; i < timeit; i++)\n      {\n      clock_t start_time = clock();\n      jitrc = pcre2_jit_compile(compiled_code, pat_patctl.jit);\n      time_taken += clock() - start_time;\n\n      pcre2_code_free(compiled_code);\n      compiled_code = pcre2_compile(use_pbuffer, patlen,\n        pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset,\n        use_pat_context);\n      if (compiled_code == NULL)\n        {\n        cfprintf(clr_test_error, outfile, \"** Unexpected - pattern compilation not successful\\n\");\n        return PR_ABEND;\n        }\n\n      if (jitrc != 0)\n        {\n        cfprintf(clr_api_error, outfile, \"JIT compilation was not successful\");\n        if (!print_error_message(jitrc, \" (\", \")\\n\")) return PR_ABEND;\n        break;\n        }\n      }\n    total_jit_compile_time += time_taken;\n    if (jitrc == 0)\n      cfprintf(clr_profiling, outfile, \"JIT compile  %8.4f microseconds\\n\",\n        ((1000000 / CLOCKS_PER_SEC) * (double)time_taken) / timeit);\n    }\n\n  mallocs_called = 0;\n  jitrc = pcre2_jit_compile(compiled_code, pat_patctl.jit);\n\n  /* For malloc testing, we repeat the compilation. */\n\n  if (malloc_testing)\n    {\n    for (int i = 0, target_mallocs = mallocs_called; i <= target_mallocs; i++)\n      {\n      pcre2_code_free(compiled_code);\n      compiled_code = pcre2_compile(use_pbuffer, patlen,\n        pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset,\n        use_pat_context);\n      if (compiled_code == NULL)\n        {\n        cfprintf(clr_test_error, outfile, \"** Unexpected - pattern compilation not successful\\n\");\n        return PR_ABEND;\n        }\n\n      mallocs_until_failure = i;\n      jitrc = pcre2_jit_compile(compiled_code, pat_patctl.jit);\n      mallocs_until_failure = INT_MAX;\n\n      if (i < target_mallocs && jitrc != PCRE2_ERROR_NOMEMORY)\n        {\n        cfprintf(clr_test_error, outfile, \"** malloc() JIT compile test did not fail as expected (%d)\\n\",\n                jitrc);\n        return PR_ABEND;\n        }\n      }\n    }\n\n  /* Check whether JIT compilation failed; but continue with an error message\n  if not. */\n\n  if (jitrc != 0 && (pat_patctl.control & CTL_JITVERIFY) != 0)\n    {\n    cfprintf(clr_api_error, outfile, \"JIT compilation was not successful\");\n    if (!print_error_message(jitrc, \" (\", \")\\n\")) return PR_ABEND;\n    }\n  }\n\n/* Compilation failed; go back for another re, skipping to blank line\nif non-interactive. */\n\nif (compiled_code == NULL)\n  {\n  int direction = error_direction(errorcode, erroroffset);\n\n  cfprintf(clr_api_error, outfile, \"Failed: error %d at offset %d: \", errorcode,\n    (int)erroroffset);\n  if (!print_error_message(errorcode, \"\", \"\\n\")) return PR_ABEND;\n\n  /* It's important that the erroroffset doesn't slice halfway through a UTF-8\n  or UTF-16 character. We can verify this by checking that the input left of the\n  erroroffset is valid. Note that if the input is invalid (which is exercised in\n  some tests) then the offset will be positioned with the valid part to the left\n  of erroroffset. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16\n  if (utf)\n    {\n    uint32_t cc;\n    int n = 1;\n    for (PCRE2_UCHAR *q = pbuffer, *q_end = q + erroroffset; q < q_end && n > 0; q += n)\n      n = utf_to_ord(q, q_end, &cc);\n    if (n <= 0)\n      {\n      cfprintf(clr_test_error, outfile, \"** Erroroffset %d splits a UTF character\\n\", (int)erroroffset);\n      return PR_ABEND;\n      }\n    }\n#endif\n\n  /* Print the surrounding context around the erroroffset. */\n\n  if (direction < 0)\n    {\n    cfprintf(clr_test_error, outfile, \"** Error code %d not implemented in error_direction().\\n\", errorcode);\n    cfprintf(clr_test_error, outfile, \"   error_direction() should usually return '1' for newly-added errors,\\n\");\n    cfprintf(clr_test_error, outfile, \"   and the offset should be just to the right of the bad character.\\n\");\n    return PR_ABEND;\n    }\n\n  else if (direction != 0)\n    {\n    cfprintf(clr_api_error, outfile, \"        here: \");\n    if (erroroffset > 0)\n      {\n      ptrunc(clr_input, pbuffer, full_patlen, erroroffset, TRUE, utf, outfile);\n      fprintf(outfile, \" \");\n      }\n    cfprintf(clr_api_error, outfile, (direction == 1)? \"|<--|\" : (direction == 2)? \"|-->|\" : \"|<-->|\");\n    if (erroroffset < full_patlen)\n      {\n      fprintf(outfile, \" \");\n      ptrunc(clr_input, pbuffer, full_patlen, erroroffset, FALSE, utf, outfile);\n      }\n    fprintf(outfile, \"\\n\");\n    }\n\n  else if (erroroffset != 0)\n    {\n    cfprintf(clr_test_error, outfile, \"** Unexpected non-zero erroroffset %d for error code %d\\n\",\n      (int)erroroffset, errorcode);\n    return PR_ABEND;\n    }\n\n  return PR_SKIP;\n  }\n\n/* If forbid_utf is non-zero, we are running a non-UTF test. UTF and UCP are\nlocked out at compile time, but we must also check for occurrences of \\P, \\p,\nand \\X, which are only supported when Unicode is supported. */\n\nif (forbid_utf != 0)\n  {\n  if ((compiled_code->flags & PCRE2_HASBKPORX) != 0)\n    {\n    cfprintf(clr_test_error, outfile, \"** \\\\P, \\\\p, and \\\\X are not allowed after the \"\n      \"#forbid_utf command\\n\");\n    return PR_SKIP;\n    }\n  }\n\n/* Remember the maximum lookbehind, for partial matching. */\n\nif (pattern_info(PCRE2_INFO_MAXLOOKBEHIND, &maxlookbehind, FALSE) != 0)\n  return PR_ABEND;\n\n/* Remember the number of captures. */\n\nif (pattern_info(PCRE2_INFO_CAPTURECOUNT, &maxcapcount, FALSE) < 0)\n  return PR_ABEND;\n\n/* If an explicit newline modifier was given, set the information flag in the\npattern so that it is preserved over push/pop. */\n\nif ((pat_patctl.control2 & CTL2_NL_SET) != 0)\n  {\n  compiled_code->flags |= PCRE2_NL_SET;\n  }\n\n/* Output code size and other information if requested. */\n\nrc = show_pattern_info();\nif (rc != PR_OK) return rc;\n\n/* Verify that the compiled structure can be serialized without generating\nmemory errors. */\n\nserialize_rc = pcre2_serialize_encode((const pcre2_code **)&compiled_code, 1,\n  &serialized_bytes, &serialized_size, general_context);\nif (serialize_rc != 1)\n  {\n  cfprintf(clr_test_error, outfile, \"** pcre2_serialize_encode() returned %d instead of 1\\n\",\n    serialize_rc);\n  return PR_ABEND;\n  }\n\n#if defined SUPPORT_VALGRIND\nif (VALGRIND_CHECK_MEM_IS_DEFINED(serialized_bytes, serialized_size) != 0)\n  {\n  cfprintf(clr_test_error, outfile, \"** pcre2_serialize_encode() returned undefined data\\n\");\n  return PR_ABEND;\n  }\n#endif\n\npcre2_serialize_free(serialized_bytes);\n\n/* The \"push\" control requests that the compiled pattern be remembered on a\nstack. This is mainly for testing the serialization functionality. */\n\nif ((pat_patctl.control & CTL_PUSH) != 0)\n  {\n  if (patstacknext >= PATSTACKSIZE)\n    {\n    cfprintf(clr_test_error, outfile, \"** Too many pushed patterns (max %d)\\n\", PATSTACKSIZE);\n    return PR_ABEND;\n    }\n  patstack[patstacknext++] = compiled_code;\n  compiled_code = NULL;\n  }\n\n/* The \"pushcopy\" and \"pushtablescopy\" controls are similar, but push a\ncopy of the pattern, the latter with a copy of its character tables. This tests\nthe pcre2_code_copy() and pcre2_code_copy_with_tables() functions. */\n\nif ((pat_patctl.control & (CTL_PUSHCOPY|CTL_PUSHTABLESCOPY)) != 0)\n  {\n  if (patstacknext >= PATSTACKSIZE)\n    {\n    cfprintf(clr_test_error, outfile, \"** Too many pushed patterns (max %d)\\n\", PATSTACKSIZE);\n    return PR_ABEND;\n    }\n  if ((pat_patctl.control & CTL_PUSHCOPY) != 0)\n    {\n    patstack[patstacknext++] = pcre2_code_copy(compiled_code);\n    }\n  else\n    {\n    patstack[patstacknext++] = pcre2_code_copy_with_tables(compiled_code);\n    }\n  }\n\nreturn PR_OK;\n}\n\n\n\n/* Helper to test for an active pattern. */\n\nstatic BOOL\nhave_active_pattern(void)\n{\nreturn compiled_code != NULL;\n}\n\n\n/* Helper to free (and null-out) the active pattern. Safe to call even if there\nis no active pattern. */\n\nstatic void\nfree_active_pattern(void)\n{\npcre2_code_free(compiled_code);\ncompiled_code = NULL;\n}\n\n\n\n/*************************************************\n*          Check heap, match or depth limit      *\n*************************************************/\n\n/* This is used for DFA, normal, and JIT fast matching. For DFA matching it\nshould only be called with the third argument set to PCRE2_ERROR_DEPTHLIMIT.\n\nArguments:\n  pp        the subject string\n  ulen      length of subject or PCRE2_ZERO_TERMINATED\n  errnumber defines which limit to test\n  msg       string to include in final message\n\nReturns:    the return from the final match function call\n*/\n\nstatic int\ncheck_match_limit(PCRE2_SPTR pp, PCRE2_SIZE ulen, int errnumber, const char *msg)\n{\nint capcount;\nuint32_t min = 0;\nuint32_t mid = 64;\nuint32_t max = UINT32_MAX;\nFILE *saved_outfile = outfile;\n\npcre2_set_match_limit(dat_context, max);\npcre2_set_depth_limit(dat_context, max);\npcre2_set_heap_limit(dat_context, max);\n\nfor (;;)\n  {\n  uint32_t stack_start = 0;\n\n  /* If we are checking the heap limit, free any frames vector that is cached\n  in the match_data so we always start without one. */\n\n  if (errnumber == PCRE2_ERROR_HEAPLIMIT)\n    {\n    pcre2_set_heap_limit(dat_context, mid);\n\n    match_data->memctl.free(match_data->heapframes,\n      match_data->memctl.memory_data);\n    match_data->heapframes = NULL;\n    match_data->heapframes_size = 0;\n    }\n\n  /* No need to mess with the frames vector for match or depth limits. */\n\n  else if (errnumber == PCRE2_ERROR_MATCHLIMIT)\n    {\n    pcre2_set_match_limit(dat_context, mid);\n    }\n  else\n    {\n    pcre2_set_depth_limit(dat_context, mid);\n    }\n\n  /* Do the appropriate match */\n\n  reset_callout_state();\n  outfile = NULL;  /* Suppress callout output during the repeated search */\n\n  if ((dat_datctl.control & CTL_DFA) != 0)\n    {\n    stack_start = DFA_START_RWS_SIZE/1024;\n    if (dfa_workspace == NULL)\n      dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int));\n    if (dfa_matched++ == 0)\n      dfa_workspace[0] = -1;  /* To catch bad restart */\n    capcount = pcre2_dfa_match(compiled_code, pp, ulen, dat_datctl.offset,\n      dat_datctl.options, match_data,\n      dat_context, dfa_workspace, DFA_WS_DIMENSION);\n    }\n\n  else if ((pat_patctl.control & CTL_JITFAST) != 0)\n    capcount = pcre2_jit_match(compiled_code, pp, ulen, dat_datctl.offset,\n      dat_datctl.options, match_data, dat_context);\n\n  else\n    {\n    capcount = pcre2_match(compiled_code, pp, ulen, dat_datctl.offset,\n      dat_datctl.options, match_data, dat_context);\n    }\n\n  outfile = saved_outfile;\n\n  if (capcount == errnumber)\n    {\n    if ((mid & 0x80000000u) != 0)\n      {\n      cfprintf(clr_test_error, outfile, \"** Can't find minimum %s limit: check pattern for \"\n        \"restriction\\n\", msg);\n      break;\n      }\n\n    min = mid;\n    mid = (mid == max - 1)? max : (max != UINT32_MAX)? (min + max)/2 : mid*2;\n    }\n  else if (capcount >= 0 ||\n           capcount == PCRE2_ERROR_NOMATCH ||\n           capcount == PCRE2_ERROR_PARTIAL)\n    {\n    /* If we've not hit the error with a heap limit less than the size of the\n    initial stack frame vector (for pcre2_match()) or the initial stack\n    workspace vector (for pcre2_dfa_match()), the heap is not being used, so\n    the minimum limit is zero; there's no need to go on. The other limits are\n    always greater than zero. */\n\n    if (errnumber == PCRE2_ERROR_HEAPLIMIT && mid < stack_start)\n      {\n      fprintf(outfile, \"Minimum %s limit = 0\\n\", msg);\n      break;\n      }\n    if (mid == min + 1)\n      {\n      fprintf(outfile, \"Minimum %s limit = %d\\n\", msg, mid);\n      break;\n      }\n    max = mid;\n    mid = (min + max)/2;\n    }\n  else break;    /* Some other error */\n  }\n\nreturn capcount;\n}\n\n\n\n/*************************************************\n*        Substitute callout function             *\n*************************************************/\n\n/* Called from pcre2_substitute() when the substitute_callout modifier is set.\nPrint out the data that is passed back.\n\nArguments:\n  scb         pointer to substitute callout block\n  data_ptr    callout data\n\nReturns:      nothing\n*/\n\nstatic int\nsubstitute_callout_function(pcre2_substitute_callout_block *scb,\n  void *data_ptr)\n{\nint yield = 0;\nBOOL utf = (compiled_code->overall_options & PCRE2_UTF) != 0;\n(void)data_ptr;   /* Not used */\n\nif (outfile == NULL) goto YIELD;\n\nfprintf(outfile, \"%2d(%d) Old %\" SIZ_FORM \" %\" SIZ_FORM \" \\\"\",\n  scb->subscount, scb->oveccount,\n  scb->ovector[0], scb->ovector[1]);\n\npchars(clr_none, scb->input + scb->ovector[0], scb->ovector[1] - scb->ovector[0],\n  utf, outfile);\n\nfprintf(outfile, \"\\\" New %\" SIZ_FORM \" %\" SIZ_FORM \" \\\"\",\n  scb->output_offsets[0], scb->output_offsets[1]);\n\npchars(clr_none, scb->output + scb->output_offsets[0],\n  scb->output_offsets[1] - scb->output_offsets[0], utf, outfile);\n\nYIELD:\n\nif (scb->subscount == dat_datctl.substitute_stop)\n  {\n  yield = -1;\n  if (outfile != NULL) fprintf(outfile, \" STOPPED\");\n  }\nelse if (scb->subscount == dat_datctl.substitute_skip)\n  {\n  yield = +1;\n  if (outfile != NULL) fprintf(outfile, \" SKIPPED\");\n  }\n\nif (outfile != NULL) fprintf(outfile, \"\\\"\\n\");\nreturn yield;\n}\n\n\n\n/*************************************************\n*        Substitute case callout function        *\n*************************************************/\n\n/* Called from pcre2_substitute() when the substitute_case_callout\nmodifier is set. The substitute callout block is not identical for all code unit\nwidths, so we have to duplicate the function for each supported width.\n\nArguments:\n  input          the input character\n  input_len      the length of the input\n  output         the output buffer\n  output_cap     the output buffer capacity\n  to_case        the case conversion type\n  data_ptr       callout data (unused)\n\nReturns:         the number of code units of the output\n*/\n\nstatic PCRE2_SIZE\nsubstitute_case_callout_function(\n  PCRE2_SPTR input, PCRE2_SIZE input_len,\n  PCRE2_UCHAR *output, PCRE2_SIZE output_cap,\n  int to_case, void *data_ptr)\n{\nPCRE2_UCHAR buf[16];\nPCRE2_SPTR input_copy;\nPCRE2_SIZE written = 0;\n\n(void)data_ptr;   /* Not used */\n\nif (input_len > sizeof(buf)/sizeof(*buf))\n  {\n  PCRE2_UCHAR *input_buf = malloc(CU2BYTES(input_len));\n  if (input_buf == NULL) return ~(PCRE2_SIZE)0;\n  memcpy(input_buf, input, CU2BYTES(input_len));\n  input_copy = input_buf;\n  }\nelse\n  {\n  memcpy(buf, input, CU2BYTES(input_len));\n  input_copy = buf;\n  }\n\nfor (PCRE2_SIZE i = 0; i < input_len; )\n  {\n  int num_in = i + 1 < input_len ? 2 : 1;\n  uint32_t c1 = input_copy[i];\n  uint32_t c2 = i + 1 < input_len ? input_copy[i + 1] : 0;\n  int num_read;\n  int num_write;\n\n  if (!case_transform(to_case, num_in, &num_read, &num_write, &c1, &c2))\n    {\n    written = ~(PCRE2_SIZE)0;\n    goto END;\n    }\n\n  i += num_read;\n  if (to_case == PCRE2_SUBSTITUTE_CASE_TITLE_FIRST)\n    to_case = PCRE2_SUBSTITUTE_CASE_LOWER;\n\n  if (written + num_write > output_cap)\n    {\n    written += num_write;\n    }\n  else\n    {\n    if (num_write > 0) output[written++] = c1;\n    if (num_write > 1) output[written++] = c2;\n    }\n  }\n\nEND:\nif (input_copy != buf) free((PCRE2_UCHAR *)input_copy);\n\n/* Let's be maximally cruel. The case callout is allowed to leave the output\nbuffer in any state at all if it overflows, so let's use random garbage. */\nif (written > output_cap)\n  memset(output, time(NULL) & 1 ? 0xcd : 0xdc,\n         CU2BYTES(output_cap));\n\nreturn written;\n}\n\n\n\n/*************************************************\n*              Callout function                  *\n*************************************************/\n\n/* Called from a PCRE2 library as a result of the (?C) item. We print out where\nwe are in the match (unless suppressed). Yield zero unless more callouts than\nthe fail count, or the callout data is not zero. The only differences in the\ncallout block for different code unit widths are that the pointers to the\nsubject, the most recent MARK, and a callout argument string point to strings\nof the appropriate width. Casts can be used to deal with this.\n\nArguments:\n  cb                a pointer to a callout block\n  callout_data_ptr  the provided callout data\n\nReturns:            0 or 1 or an error, as determined by settings\n*/\n\nstatic int\ncallout_function(pcre2_callout_block *cb, void *callout_data_ptr)\n{\nFILE *f, *fdefault;\nuint32_t i, pre_start, post_start, subject_length;\nPCRE2_SIZE current_position;\nBOOL utf = (compiled_code->overall_options & PCRE2_UTF) != 0;\nBOOL callout_capture = (dat_datctl.control & CTL_CALLOUT_CAPTURE) != 0;\nBOOL callout_where = (dat_datctl.control2 & CTL2_CALLOUT_NO_WHERE) == 0;\n\nif (outfile == NULL) goto YIELD;\n\n/* The FILE f is used for echoing the subject string if it is non-NULL. This\nhappens only once in simple cases, but we want to repeat after any additional\noutput caused by CALLOUT_EXTRA. */\n\nfdefault = (!first_callout && !callout_capture && cb->callout_string == NULL)?\n  NULL : outfile;\n\nif ((dat_datctl.control2 & CTL2_CALLOUT_EXTRA) != 0)\n  {\n  f = outfile;\n  switch (cb->callout_flags)\n    {\n    case PCRE2_CALLOUT_BACKTRACK:\n    fprintf(f, \"Backtrack\\n\");\n    break;\n\n    case PCRE2_CALLOUT_STARTMATCH|PCRE2_CALLOUT_BACKTRACK:\n    fprintf(f, \"Backtrack\\nNo other matching paths\\n\");\n    PCRE2_FALLTHROUGH /* Fall through */\n\n    case PCRE2_CALLOUT_STARTMATCH:\n    fprintf(f, \"New match attempt\\n\");\n    break;\n\n    default:\n    f = fdefault;\n    break;\n    }\n  }\nelse f = fdefault;\n\n/* For a callout with a string argument, show the string first because there\nisn't a tidy way to fit it in the rest of the data. */\n\nif (cb->callout_string != NULL)\n  {\n  uint32_t delimiter = cb->callout_string[-1];\n  fprintf(outfile, \"Callout (%\" SIZ_FORM \"): %c\",\n    cb->callout_string_offset, CHAR_OUTPUT(delimiter));\n  pchars(clr_none, cb->callout_string, cb->callout_string_length, utf, outfile);\n  for (i = 0; callout_start_delims[i] != 0; i++)\n    if (delimiter == callout_start_delims[i])\n      {\n      delimiter = callout_end_delims[i];\n      break;\n      }\n  fprintf(outfile, \"%c\", CHAR_OUTPUT(delimiter));\n  if (!callout_capture) fprintf(outfile, \"\\n\");\n  }\n\n/* Show captured strings if required */\n\nif (callout_capture)\n  {\n  if (cb->callout_string == NULL)\n    fprintf(outfile, \"Callout %d:\", cb->callout_number);\n  fprintf(outfile, \" last capture = %d\\n\", cb->capture_last);\n  for (i = 2; i < cb->capture_top * 2; i += 2)\n    {\n    fprintf(outfile, \"%2d: \", i/2);\n    if (cb->offset_vector[i] == PCRE2_UNSET)\n      fprintf(outfile, \"<unset>\");\n    else\n      {\n      pchars(clr_none, cb->subject + cb->offset_vector[i],\n        cb->offset_vector[i+1] - cb->offset_vector[i], utf, f);\n      }\n    fprintf(outfile, \"\\n\");\n    }\n  }\n\n/* Unless suppressed, re-print the subject in canonical form (with escapes for\nnon-printing characters), the first time, or if giving full details. On\nsubsequent calls in the same match, we use pchars() just to find the printed\nlengths of the substrings. */\n\nif (callout_where)\n  {\n  if (f != NULL) fprintf(f, \"--->\");\n\n  /* The subject before the match start. */\n\n  pre_start = pchars(clr_none, cb->subject, cb->start_match, utf, f);\n\n  /* If a lookbehind is involved, the current position may be earlier than the\n  match start. If so, use the match start instead. */\n\n  current_position = (cb->current_position >= cb->start_match)?\n    cb->current_position : cb->start_match;\n\n  /* The subject between the match start and the current position. */\n\n  post_start = pchars(clr_none, cb->subject + cb->start_match,\n    current_position - cb->start_match, utf, f);\n\n  /* Print from the current position to the end. */\n\n  pchars(clr_none, cb->subject + current_position, cb->subject_length - current_position,\n    utf, f);\n\n  /* Calculate the total subject printed length (no print). */\n\n  subject_length = pchars(clr_none, cb->subject, cb->subject_length, utf, NULL);\n\n  if (f != NULL) fprintf(f, \"\\n\");\n\n  /* For automatic callouts, show the pattern offset. Otherwise, for a\n  numerical callout whose number has not already been shown with captured\n  strings, show the number here. A callout with a string argument has been\n  displayed above. */\n\n  if (cb->callout_number == 255)\n    {\n    fprintf(outfile, \"%+3d \", (int)cb->pattern_position);\n    if (cb->pattern_position > 99) fprintf(outfile, \"\\n    \");\n    }\n  else\n    {\n    if (callout_capture || cb->callout_string != NULL) fprintf(outfile, \"    \");\n      else fprintf(outfile, \"%3d \", cb->callout_number);\n    }\n\n  /* Now show position indicators */\n\n  for (i = 0; i < pre_start; i++) fprintf(outfile, \" \");\n  fprintf(outfile, \"^\");\n\n  if (post_start > 0)\n    {\n    for (i = 0; i < post_start - 1; i++) fprintf(outfile, \" \");\n    fprintf(outfile, \"^\");\n    }\n\n  for (i = 0; i < subject_length - pre_start - post_start + 4; i++)\n    fprintf(outfile, \" \");\n\n  if (cb->next_item_length != 0)\n    {\n    pchars(clr_none, pbuffer + cb->pattern_position, cb->next_item_length, utf, outfile);\n    }\n  else\n    fprintf(outfile, \"End of pattern\");\n\n  fprintf(outfile, \"\\n\");\n  }\n\n/* Show any mark info */\n\nif (cb->mark != last_callout_mark)\n  {\n  if (cb->mark == NULL)\n    fprintf(outfile, \"Latest Mark: <unset>\\n\");\n  else\n    {\n    fprintf(outfile, \"Latest Mark: \");\n    pchars(clr_none, cb->mark - 1, -1, utf, outfile);\n    putc('\\n', outfile);\n    }\n  }\n\nYIELD:\n\n/* Keep count */\n\nfirst_callout = FALSE;\nlast_callout_mark = cb->mark;\ncallout_count++;\n\n/* Show callout data if that determines the return code */\n\nif (callout_data_ptr != NULL)\n  {\n  int callout_data = *((int32_t *)callout_data_ptr);\n  if (callout_data != 0)\n    {\n    if (outfile != NULL) fprintf(outfile, \"Callout data = %d\\n\", callout_data);\n    return callout_data;\n    }\n  }\n\n/* Otherwise, the callout_error and callout_fail settings provide the return\ncode. */\n\nif (cb->callout_number == dat_datctl.cerror[0] &&\n    callout_count >= dat_datctl.cerror[1])\n  return PCRE2_ERROR_CALLOUT;\n\nif (cb->callout_number == dat_datctl.cfail[0] &&\n    callout_count >= dat_datctl.cfail[1])\n  return 1;\n\nreturn 0;\n}\n\n\n\n/*************************************************\n*       Handle *MARK and copy/get tests          *\n*************************************************/\n\n/* This function is called after complete and partial matches. It runs the\ntests for substring extraction.\n\nArguments:\n  utf       TRUE for utf\n  capcount  return from pcre2_match()\n\nReturns:    FALSE if print_error_message() fails\n*/\n\nstatic BOOL\ncopy_and_get(BOOL utf, int capcount)\n{\nint i;\nuint8_t *nptr;\n\n/* Test copy strings by number */\n\nfor (i = 0; i < MAXCPYGET && dat_datctl.copy_numbers[i] >= 0; i++)\n  {\n  int rc, rc2;\n  PCRE2_SIZE length, length2;\n  PCRE2_UCHAR copybuffer[256];\n  uint32_t n = (uint32_t)(dat_datctl.copy_numbers[i]);\n  length = sizeof(copybuffer)/sizeof(*copybuffer);\n  rc = pcre2_substring_copy_bynumber(match_data, n, copybuffer, &length);\n  if (rc < 0)\n    {\n    cfprintf(clr_api_error, outfile, \"Copy substring %d failed (%d): \", n, rc);\n    if (!print_error_message(rc, \"\", \"\\n\")) return FALSE;\n    }\n  else\n    {\n    fprintf(outfile, \"%2dC \", n);\n    pchars(clr_none, copybuffer, length, utf, outfile);\n    fprintf(outfile, \" (%\" SIZ_FORM \")\\n\", length);\n    }\n  rc2 = pcre2_substring_length_bynumber(match_data, n, &length2);\n  if (rc2 < 0)\n    {\n    cfprintf(clr_api_error, outfile, \"Get substring %d length failed (%d): \", n, rc2);\n    if (!print_error_message(rc2, \"\", \"\\n\")) return FALSE;\n    }\n  else if (rc >= 0 && length2 != length)\n    {\n    cfprintf(clr_test_error, outfile, \"** Mismatched substring lengths: %\"\n      SIZ_FORM \" %\" SIZ_FORM \"\\n\", length, length2);\n    }\n  }\n\n/* Test copy strings by name */\n\nnptr = dat_datctl.copy_names;\nfor (;;)\n  {\n  int rc, rc2;\n  int groupnumber;\n  PCRE2_SIZE length, length2;\n  PCRE2_UCHAR copybuffer[256];\n  size_t namelen = strlen((const char *)nptr);\n#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n  PCRE2_SIZE cnl = namelen;\n#endif\n  if (namelen == 0) break;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  strcpy((char *)pbuffer8, (char *)nptr);\n#endif\n#if defined(EBCDIC) && !EBCDIC_IO\n  ascii_to_ebcdic_str(pbuffer8, namelen);\n#endif\n#if PCRE2_CODE_UNIT_WIDTH == 16\n  (void)to16(nptr, utf, &cnl);\n#endif\n#if PCRE2_CODE_UNIT_WIDTH == 32\n  (void)to32(nptr, utf, &cnl);\n#endif\n\n  groupnumber = pcre2_substring_number_from_name(compiled_code, pbuffer);\n  if (groupnumber < 0 && groupnumber != PCRE2_ERROR_NOUNIQUESUBSTRING)\n    cfprintf(clr_api_error, outfile, \"Number not found for group \\\"%s\\\"\\n\", nptr);\n\n  length = sizeof(copybuffer)/sizeof(*copybuffer);\n  rc = pcre2_substring_copy_byname(match_data, pbuffer, copybuffer, &length);\n  if (rc < 0)\n    {\n    cfprintf(clr_api_error, outfile, \"Copy substring \\\"%s\\\" failed (%d): \", nptr, rc);\n    if (!print_error_message(rc, \"\", \"\\n\")) return FALSE;\n    }\n  else\n    {\n    fprintf(outfile, \"  C \");\n    pchars(clr_none, copybuffer, length, utf, outfile);\n    fprintf(outfile, \" (%\" SIZ_FORM \") %s\", length, nptr);\n    if (groupnumber >= 0) fprintf(outfile, \" (group %d)\\n\", groupnumber);\n      else fprintf(outfile, \" (non-unique)\\n\");\n    }\n  rc2 = pcre2_substring_length_byname(match_data, pbuffer, &length2);\n  if (rc2 < 0)\n    {\n    cfprintf(clr_api_error, outfile, \"Get substring \\\"%s\\\" length failed (%d): \", nptr, rc2);\n    if (!print_error_message(rc2, \"\", \"\\n\")) return FALSE;\n    }\n  else if (rc >= 0 && length2 != length)\n    {\n    cfprintf(clr_test_error, outfile, \"** Mismatched substring lengths: %\"\n      SIZ_FORM \" %\" SIZ_FORM \"\\n\", length, length2);\n    }\n  nptr += namelen + 1;\n  }\n\n/* Test get strings by number */\n\nfor (i = 0; i < MAXCPYGET && dat_datctl.get_numbers[i] >= 0; i++)\n  {\n  int rc;\n  PCRE2_SIZE length;\n  PCRE2_UCHAR *gotbuffer;\n  uint32_t n = (uint32_t)(dat_datctl.get_numbers[i]);\n  rc = pcre2_substring_get_bynumber(match_data, n, &gotbuffer, &length);\n  if (rc < 0)\n    {\n    cfprintf(clr_api_error, outfile, \"Get substring %d failed (%d): \", n, rc);\n    if (!print_error_message(rc, \"\", \"\\n\")) return FALSE;\n    }\n  else\n    {\n    fprintf(outfile, \"%2dG \", n);\n    pchars(clr_none, gotbuffer, length, utf, outfile);\n    fprintf(outfile, \" (%\" SIZ_FORM \")\\n\", length);\n    pcre2_substring_free(gotbuffer);\n    }\n  }\n\n/* Test get strings by name */\n\nnptr = dat_datctl.get_names;\nfor (;;)\n  {\n  PCRE2_SIZE length;\n  PCRE2_UCHAR *gotbuffer;\n  int rc;\n  int groupnumber;\n  size_t namelen = strlen((const char *)nptr);\n#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32\n  PCRE2_SIZE cnl = namelen;\n#endif\n  if (namelen == 0) break;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  strcpy((char *)pbuffer8, (char *)nptr);\n#endif\n#if defined(EBCDIC) && !EBCDIC_IO\n  ascii_to_ebcdic_str(pbuffer8, namelen);\n#endif\n#if PCRE2_CODE_UNIT_WIDTH == 16\n  (void)to16(nptr, utf, &cnl);\n#endif\n#if PCRE2_CODE_UNIT_WIDTH == 32\n  (void)to32(nptr, utf, &cnl);\n#endif\n\n  groupnumber = pcre2_substring_number_from_name(compiled_code, pbuffer);\n  if (groupnumber < 0 && groupnumber != PCRE2_ERROR_NOUNIQUESUBSTRING)\n    cfprintf(clr_api_error, outfile, \"Number not found for group \\\"%s\\\"\\n\", nptr);\n\n  rc = pcre2_substring_get_byname(match_data, pbuffer, &gotbuffer, &length);\n  if (rc < 0)\n    {\n    cfprintf(clr_api_error, outfile, \"Get substring \\\"%s\\\" failed (%d): \", nptr, rc);\n    if (!print_error_message(rc, \"\", \"\\n\")) return FALSE;\n    }\n  else\n    {\n    fprintf(outfile, \"  G \");\n    pchars(clr_none, gotbuffer, length, utf, outfile);\n    fprintf(outfile, \" (%\" SIZ_FORM \") %s\", length, nptr);\n    if (groupnumber >= 0) fprintf(outfile, \" (group %d)\\n\", groupnumber);\n      else fprintf(outfile, \" (non-unique)\\n\");\n    pcre2_substring_free(gotbuffer);\n    }\n  nptr += namelen + 1;\n  }\n\n/* Test getting the complete list of captured strings. */\n\nif ((dat_datctl.control & CTL_GETALL) != 0)\n  {\n  int rc;\n  PCRE2_UCHAR **stringlist;\n  PCRE2_SIZE *lengths;\n  rc = pcre2_substring_list_get(match_data, &stringlist, &lengths);\n  if (rc < 0)\n    {\n    cfprintf(clr_api_error, outfile, \"get substring list failed (%d): \", rc);\n    if (!print_error_message(rc, \"\", \"\\n\")) return FALSE;\n    }\n  else\n    {\n    for (i = 0; i < capcount; i++)\n      {\n      fprintf(outfile, \"%2dL \", i);\n      pchars(clr_none, stringlist[i], lengths[i], utf, outfile);\n      putc('\\n', outfile);\n      }\n    if (stringlist[i] != NULL)\n      cfprintf(clr_test_error, outfile, \"** string list not terminated by NULL\\n\");\n    pcre2_substring_list_free(stringlist);\n    }\n  }\n\nreturn TRUE;\n}\n\n\n\n/*************************************************\n*          Copy a substitution string            *\n*************************************************/\n\n/* Copy one of the string arguments to pcre2_substitute() from its uint8_t\ntest input to the appropriate width buffer.\n*/\n\nstatic void\ncopy_substitute_string(BOOL utf, uint8_t *input, PCRE2_SIZE inlen,\n  PCRE2_UCHAR *output, PCRE2_SIZE *outlen)\n{\nuint32_t c;\nuint8_t *input_end = input + inlen;\nPCRE2_UCHAR *output_start = output;\nPCRE2_SIZE erroroffset;\nBOOL badutf = FALSE;\n\n/* When copying the replacement string to a buffer of the appropriate width, no\nescape processing is done.\n\nIn UTF mode, check for an invalid UTF-8 input string, and if it is invalid, just\ncopy its code units without UTF interpretation. This provides a means of\nchecking that an invalid string is detected. Otherwise, UTF-8 can be used to\ninclude wide characters in a replacement. */\n\nif (utf) badutf = valid_utf(input, inlen, &erroroffset);\n\n/* Not UTF or invalid UTF-8: just copy the code units. */\n\nif (!utf || badutf)\n  {\n  while (input < input_end)\n    {\n    c = *input++;\n#if defined(EBCDIC) && !EBCDIC_IO\n    c = ascii_to_ebcdic(c);\n#endif\n    *output++ = c;\n    }\n  }\n\n/* Valid UTF-8 replacement string */\n\nelse while (input < input_end)\n  {\n  c = *input++;\n  if (HASUTF8EXTRALEN(c)) { GETUTF8INC(c, input); }\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  output += ord_to_utf8(c, output);\n\n#elif PCRE2_CODE_UNIT_WIDTH == 16\n  if (c >= 0x10000u)\n    {\n    c-= 0x10000u;\n    *output++ = 0xd800 | (c >> 10);\n    *output++ = 0xdc00 | (c & 0x3ff);\n    }\n  else *output++ = c;\n\n#elif PCRE2_CODE_UNIT_WIDTH == 32\n  *output++ = c;\n#endif\n  }\n\n*output = 0;\n*outlen = output - output_start;\n}\n\n\n\n/*************************************************\n*               Process a data line              *\n*************************************************/\n\n/* The line is in buffer; it will not be empty.\n\nArguments:  none\n\nReturns:    PR_OK     continue processing next line\n            PR_SKIP   skip to a blank line\n            PR_ABEND  abort the pcre2test run\n*/\n\nstatic int\nprocess_data(void)\n{\nPCRE2_SIZE ulen, arg_ulen;\nuint32_t gmatched;\nuint32_t c, k;\nuint32_t g_notempty = 0;\nuint8_t *p; /* Position within buffer (raw input line) */\nsize_t len;\nsize_t needlen;  /* Bytes, for sizing dbuffer */\npcre2_match_context *use_dat_context;\nBOOL utf;\nBOOL subject_literal;\n\nPCRE2_SIZE *ovector;\nPCRE2_SPTR ovecsave[2] = { NULL, NULL };\nuint32_t oveccount;\n\nPCRE2_UCHAR *q = NULL;   /* Typed pointer within dbuffer */\nPCRE2_UCHAR *start_rep;  /* Position within dbuffer; stashed value of q */\nPCRE2_UCHAR *pp;         /* Subject pointer within dbuffer */\n\nsubject_literal = (pat_patctl.control2 & CTL2_SUBJECT_LITERAL) != 0;\n\n/* Copy the default context and data control blocks to the active ones. Then\ncopy from the pattern the controls that can be set in either the pattern or the\ndata. This allows them to be overridden in the data line. We do not do this for\noptions because those that are common apply separately to compiling and\nmatching. */\n\nmemcpy(dat_context, default_dat_context, sizeof(pcre2_match_context));\nmemcpy(&dat_datctl, &def_datctl, sizeof(datctl));\ndat_datctl.control |= (pat_patctl.control & CTL_ALLPD);\ndat_datctl.control2 |= (pat_patctl.control2 & CTL2_ALLPD);\ndat_datctl.replacement[0] = pat_patctl.replacement[0];\nif (pat_patctl.replacement[0] != MOD_STR_UNSET)\n  memcpy(dat_datctl.replacement + 1, pat_patctl.replacement + 1,\n    pat_patctl.replacement[0] + 1);\nif (dat_datctl.jitstack == 0) dat_datctl.jitstack = pat_patctl.jitstack;\n\nif (dat_datctl.substitute_skip == 0)\n    dat_datctl.substitute_skip = pat_patctl.substitute_skip;\nif (dat_datctl.substitute_stop == 0)\n    dat_datctl.substitute_stop = pat_patctl.substitute_stop;\n\n/* Initialize for scanning the data line. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nutf = ((((pat_patctl.control & CTL_POSIX) != 0)?\n  ((pcre2_real_code *)preg.re_pcre2_code)->overall_options :\n  compiled_code->overall_options) & PCRE2_UTF) != 0;\n#else\nutf = (compiled_code->overall_options & PCRE2_UTF) != 0;\n#endif\n\nstart_rep = NULL;\nlen = strlen((const char *)buffer);\nwhile (len > 0 && isspace(buffer[len-1])) len--;\nbuffer[len] = 0;\np = buffer;\nwhile (isspace(*p))\n  {\n  p++;\n  len--;\n  }\n\n/* Check that the data is well-formed UTF-8 if we're in UTF mode. To create\ninvalid input to pcre2_match(), you must use \\x?? or \\x{} sequences. */\n\nif (utf)\n  {\n  uint8_t *ptmp;\n  uint32_t cc;\n  int n = 1;\n  uint8_t *ptmp_end = p + len;\n\n  for (ptmp = p; n > 0 && *ptmp; ptmp += n)\n    n = utf8_to_ord(ptmp, ptmp_end, &cc);\n  if (n <= 0)\n    {\n    cfprintf(clr_test_error, outfile, \"** Failed: invalid UTF-8 string cannot be used as input \"\n      \"in UTF mode\\n\");\n    return PR_OK;\n    }\n  }\n\n#ifdef SUPPORT_VALGRIND\n/* Mark the dbuffer as addressable but undefined again. */\nif (dbuffer != NULL)\n  {\n  VALGRIND_MAKE_MEM_UNDEFINED(dbuffer, dbuffer_size);\n  }\n#endif\n\n/* Allocate a buffer to hold the data line; len+1 is an upper bound on\nthe number of code units that will be needed (though the buffer may have to be\nextended if replication is involved). */\n\nneedlen = CU2BYTES(len+1);\nif (dbuffer == NULL || needlen >= dbuffer_size)\n  {\n  while (needlen >= dbuffer_size)\n    {\n    if (dbuffer_size < SIZE_MAX/2) dbuffer_size *= 2;\n      else dbuffer_size = needlen + 1;\n    }\n  dbuffer = (uint8_t *)realloc(dbuffer, dbuffer_size);\n  if (dbuffer == NULL)\n    {\n    cfprintf(clr_test_error, stderr, \"pcre2test: realloc(%\" SIZ_FORM \") failed\\n\", dbuffer_size);\n    exit(1);\n    }\n  }\nq = (PCRE2_UCHAR *)dbuffer;\n\n/* Scan the data line, interpreting data escapes, and put the result into a\nbuffer of the appropriate width. In UTF mode, input is always UTF-8; otherwise,\nin 16- and 32-bit modes, it can be forced to UTF-8 by the utf8_input modifier.\n*/\n\nwhile ((c = *p++) != 0)\n  {\n  int i = 0;\n  size_t replen;  /* Bytes, for sizing dbuffer */\n  enum force_encoding encoding = FORCE_NONE;\n\n  /* ] may mark the end of a replicated sequence */\n\n  if (c == ']' && start_rep != NULL)\n    {\n    long li;\n    char *endptr;\n\n    if (*p++ != '{')\n      {\n      cfprintf(clr_test_error, outfile, \"** Expected '{' after \\\\[....]\\n\");\n      return PR_OK;\n      }\n\n    li = strtol((const char *)p, &endptr, 10);\n    if (S32OVERFLOW(li))\n      {\n      cfprintf(clr_test_error, outfile, \"** Repeat count too large\\n\");\n      return PR_OK;\n      }\n    i = (int)li;\n\n    p = (uint8_t *)endptr;\n    if (*p++ != '}')\n      {\n      cfprintf(clr_test_error, outfile, \"** Expected '}' after \\\\[...]{...\\n\");\n      return PR_OK;\n      }\n\n    if (i-- <= 0)\n      {\n      cfprintf(clr_test_error, outfile, \"** Zero or negative repeat not allowed\\n\");\n      return PR_OK;\n      }\n\n    replen = (uint8_t *)q - (uint8_t *)start_rep;\n    if (i > 0 && replen > (SIZE_MAX - needlen) / i)\n      {\n      cfprintf(clr_test_error, outfile, \"** Expanded content too large\\n\");\n      return PR_OK;\n      }\n    needlen += replen * i;\n\n    if (needlen >= dbuffer_size)\n      {\n      size_t qoffset = (uint8_t *)q - dbuffer;\n      size_t rep_offset = (uint8_t *)start_rep - dbuffer;\n      while (needlen >= dbuffer_size)\n        {\n        if (dbuffer_size < SIZE_MAX/2) dbuffer_size *= 2;\n          else dbuffer_size = needlen + 1;\n        }\n      dbuffer = (uint8_t *)realloc(dbuffer, dbuffer_size);\n      if (dbuffer == NULL)\n        {\n        cfprintf(clr_test_error, stderr, \"pcre2test: realloc(%\" SIZ_FORM \") failed\\n\",\n          dbuffer_size);\n        exit(1);\n        }\n      q = (PCRE2_UCHAR *)(dbuffer + qoffset);\n      start_rep = (PCRE2_UCHAR *)(dbuffer + rep_offset);\n      }\n\n    while (i-- > 0)\n      {\n      memcpy(q, start_rep, replen);\n      q += BYTES2CU(replen);\n      }\n\n    start_rep = NULL;\n    continue;\n    }\n\n  /* Handle a non-escaped character. In non-UTF 32-bit mode with utf8_input\n  set, do the fudge for setting the top bit. */\n\n  if (c != '\\\\' || subject_literal)\n    {\n    uint32_t topbit = 0;\n#if PCRE2_CODE_UNIT_WIDTH == 32\n    if (c == 0xff && *p != 0)\n      {\n      topbit = 0x80000000;\n      c = *p++;\n      }\n#endif\n    if ((utf || (pat_patctl.control & CTL_UTF8_INPUT) != 0) &&\n        HASUTF8EXTRALEN(c))\n      {\n      GETUTF8INC(c, p);\n      }\n    c |= topbit;\n    }\n\n  /* Handle backslash escapes */\n\n  else switch ((c = *p++))\n    {\n    case '\\\\': break;\n    case 'a': c = '\\a'; break;\n    case 'b': c = '\\b'; break;\n#if defined(EBCDIC) && !EBCDIC_IO\n    /* \\e is the odd one out since it's not defined in the C standard,\n    precisely because of EBCDIC (apparently EBCDIC 'ESC' character isn't\n    an exact match to Latin-1 'ESC', hence '\\e' isn't necessarily\n    supported by EBCDIC compilers). */\n    case 'e': c = '\\x1b'; break;\n#else\n    case 'e': c = CHAR_ESC; break;\n#endif\n    case 'f': c = '\\f'; break;\n    case 'n': c = '\\n'; break;\n    case 'r': c = '\\r'; break;\n    case 't': c = '\\t'; break;\n    case 'v': c = '\\v'; break;\n\n    case '0': case '1': case '2': case '3':\n    case '4': case '5': case '6': case '7':\n    c -= '0';\n    while (i++ < 2 && *p >= '0' && *p < '8')\n      c = c * 8 + (*p++ - '0');\n    c = CHAR_OUTPUT(CHAR_INPUT_HEX(c));\n\n    encoding = (utf && c > 255)? FORCE_UTF : FORCE_RAW;\n    break;\n\n    case 'o':\n    if (*p == '{')\n      {\n      uint8_t *pt = p;\n      c = 0;\n      for (pt++; isdigit(*pt) && *pt < '8'; ++i, pt++)\n        {\n        if (c >= 0x20000000u)\n          {\n          cfprintf(clr_test_error, outfile, \"** \\\\o{ escape too large\\n\");\n          return PR_OK;\n          }\n        else c = c * 8 + (*pt - '0');\n        }\n      c = CHAR_OUTPUT(CHAR_INPUT_HEX(c));\n      if (i == 0 || *pt != '}')\n        {\n        cfprintf(clr_test_error, outfile, \"** Malformed \\\\o{ escape\\n\");\n        return PR_OK;\n        }\n      else p = pt + 1;\n      }\n    break;\n\n    case 'x':\n    c = 0;\n    if (*p == '{')\n      {\n      uint8_t *pt = p;\n\n      /* We used to have \"while (isxdigit(*(++pt)))\" here, but it fails\n      when isxdigit() is a macro that refers to its argument more than\n      once. This is banned by the C Standard, but apparently happens in at\n      least one macOS environment. */\n\n      for (pt++; isxdigit(*pt); pt++)\n        {\n        if (++i == 9)\n          {\n          cfprintf(clr_test_error, outfile, \"** Too many hex digits in \\\\x{...} item; \"\n                           \"using only the first eight.\\n\");\n          while (isxdigit(*pt)) pt++;\n          break;\n          }\n        else c = c * 16 + (tolower(*pt) - (isdigit(*pt)? '0' : 'a' - 10));\n        }\n      c = CHAR_OUTPUT(CHAR_INPUT_HEX(c));\n      if (i == 0 || *pt != '}')\n        {\n        cfprintf(clr_test_error, outfile, \"** Malformed \\\\x{ escape\\n\");\n        return PR_OK;\n        }\n      else p = pt + 1;\n      }\n    else\n      {\n      /* \\x without {} always defines just one byte in 8-bit mode. This\n      allows UTF-8 characters to be constructed byte by byte, and also allows\n      invalid UTF-8 sequences to be made. Just copy the byte in UTF-8 mode.\n      Otherwise, pass it down as data. */\n\n      while (i++ < 2 && isxdigit(*p))\n        {\n        c = c * 16 + (tolower(*p) - (isdigit(*p)? '0' : 'a' - 10));\n        p++;\n        }\n      c = CHAR_OUTPUT(CHAR_INPUT_HEX(c));\n#if PCRE2_CODE_UNIT_WIDTH == 8\n      if (utf) encoding = FORCE_RAW;\n#endif\n      }\n    break;\n\n    case 'N':\n#ifndef EBCDIC\n    if (memcmp(p, \"{U+\", 3) == 0 && isxdigit(p[3]))\n      {\n      char *endptr;\n      unsigned long uli;\n\n      p += 3;\n      errno = 0;\n      uli = strtoul((const char *)p, &endptr, 16);\n      if (errno == 0 && *endptr == '}' && uli <= UINT32_MAX)\n        {\n        c = (uint32_t)uli;\n        p = (uint8_t *)endptr + 1;\n        encoding = FORCE_UTF;\n        break;\n        }\n      }\n#endif\n    cfprintf(clr_test_error, outfile, \"** Malformed \\\\N{U+ escape\\n\");\n    return PR_OK;\n\n    case 0:     /* \\ followed by EOF allows for an empty line */\n    p--;\n    continue;\n\n    case '=':   /* \\= terminates the data, starts modifiers */\n    goto ENDSTRING;\n\n    case '[':   /* \\[ introduces a replicated character sequence */\n    if (start_rep != NULL)\n      {\n      cfprintf(clr_test_error, outfile, \"** Nested replication is not supported\\n\");\n      return PR_OK;\n      }\n    start_rep = q;\n    continue;\n\n    default:\n    if (isalnum(c))\n      {\n      cfprintf(clr_test_error, outfile, \"** Unrecognized escape sequence \\\"\\\\%c\\\"\\n\", c);\n      return PR_OK;\n      }\n    }\n\n  /* We now have a character value in c that may be greater than 255.\n  Depending of how we got it, the encoding enum could be set to tell\n  us how to encode it, otherwise follow the utf modifier. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n  if (encoding == FORCE_RAW || !(utf || encoding == FORCE_UTF))\n    {\n    if (c > 0xffu)\n      {\n      cfprintf(clr_test_error, outfile, \"** Character \\\\x{%x} is greater than 255 \"\n        \"and UTF-8 mode is not enabled.\\n\", c);\n      cfprintf(clr_test_error, outfile, \"** Truncation will probably give the wrong \"\n        \"result.\\n\");\n      }\n    *q++ = (uint8_t)c;\n    }\n  else\n    {\n    if (c > 0x7fffffff)\n      {\n      cfprintf(clr_test_error, outfile, \"** Character \\\\N{U+%x} is greater than 0x7fffffff \"\n                        \"and therefore cannot be encoded as UTF-8\\n\", c);\n      return PR_OK;\n      }\n    else if (encoding == FORCE_UTF && c > MAX_UTF_CODE_POINT)\n      cfprintf(clr_test_error, outfile, \"** Warning: character \\\\N{U+%x} is greater than \"\n                        \"0x%x and should not be encoded as UTF-8\\n\",\n                        c, MAX_UTF_CODE_POINT);\n    q += ord_to_utf8(c, q);\n    }\n#endif\n#if PCRE2_CODE_UNIT_WIDTH == 16\n  /* Unlike the 8-bit code, there are no forced raw suggestions for the\n  16-bit mode, so assume raw unless utf is preferred */\n\n  if (!(encoding == FORCE_UTF || utf))\n    {\n    if (c > 0xffffu)\n      {\n      cfprintf(clr_test_error, outfile, \"** Character \\\\x{%x} is greater than 0xffff \"\n        \"and UTF-16 mode is not enabled.\\n\", c);\n      cfprintf(clr_test_error, outfile, \"** Truncation will probably give the wrong \"\n        \"result.\\n\");\n      }\n    *q++ = (uint16_t)c;\n    }\n  else\n    {\n    if (c > MAX_UTF_CODE_POINT)\n      {\n      cfprintf(clr_test_error, outfile, \"** Failed: character \\\\N{U+%x} is greater than \"\n                        \"0x%x and therefore cannot be encoded as UTF-16\\n\",\n              c, MAX_UTF_CODE_POINT);\n      return PR_OK;\n      }\n    else if (c >= 0x10000u)\n      {\n      c -= 0x10000u;\n      *q++ = 0xd800 | (c >> 10);\n      *q++ = 0xdc00 | (c & 0x3ff);\n      }\n    else\n      {\n      if (encoding == FORCE_UTF && 0xe000u > c && c >= 0xd800u)\n        cfprintf(clr_test_error, outfile, \"** Warning: character \\\\N{U+%x} is a surrogate \"\n                          \"and should not be encoded as UTF-16\\n\", c);\n      *q++ = c;\n      }\n    }\n#endif\n#if PCRE2_CODE_UNIT_WIDTH == 32\n  if (encoding == FORCE_UTF && c > MAX_UTF_CODE_POINT)\n    cfprintf(clr_test_error, outfile, \"** Warning: character \\\\N{U+%x} is greater than \"\n                      \"0x%x and should not be encoded as UTF-32\\n\",\n                      c, MAX_UTF_CODE_POINT);\n  *q++ = c;\n#endif\n  }\n\nENDSTRING:\n*q = 0;\nlen = (uint8_t *)q - dbuffer;             /* Length in bytes */\nulen = BYTES2CU(len);                     /* Length in code units */\narg_ulen = ulen;                          /* Value to use in match arg */\n\n/* If the string was terminated by \\= we must now interpret modifiers. */\n\nif (p[-1] != 0 && !decode_modifiers(p, CTX_DAT, NULL, &dat_datctl))\n  return PR_OK;\n\n/* Setting substitute_{skip,fail} implies a substitute callout. */\n\nif (dat_datctl.substitute_skip != 0 || dat_datctl.substitute_stop != 0)\n  dat_datctl.control2 |= CTL2_SUBSTITUTE_CALLOUT;\n\n/* Check for mutually exclusive modifiers. At present, these are all in the\nfirst control word. */\n\nfor (k = 0; k < sizeof(exclusive_dat_controls)/sizeof(uint32_t); k++)\n  {\n  c = dat_datctl.control & exclusive_dat_controls[k];\n  if (c != 0 && c != (c & (~c+1)))\n    {\n    show_controls(clr_test_error, c, 0, \"** Not allowed together:\");\n    fprintf(outfile, \"\\n\");\n    return PR_OK;\n    }\n  }\n\nif (dat_datctl.replacement[0] != MOD_STR_UNSET)\n  {\n  if ((dat_datctl.control2 & CTL2_SUBSTITUTE_CALLOUT) != 0 &&\n      (dat_datctl.control & CTL_NULLCONTEXT) != 0)\n    {\n    cfprintf(clr_test_error, outfile, \"** Replacement callouts are not supported with null_context.\\n\");\n    return PR_OK;\n    }\n\n  if ((dat_datctl.control2 & CTL2_SUBSTITUTE_CASE_CALLOUT) != 0 &&\n      (dat_datctl.control & CTL_NULLCONTEXT) != 0)\n    {\n    cfprintf(clr_test_error, outfile, \"** Replacement case callouts are not supported with null_context.\\n\");\n    return PR_OK;\n    }\n\n  if ((dat_datctl.control & CTL_ALLCAPTURES) != 0)\n    cfprintf(clr_test_error, outfile, \"** Ignored with replacement text: allcaptures\\n\");\n\n  if (dat_datctl.substitute_subject[0] != MOD_STR_UNSET &&\n      (dat_datctl.control2 & CTL2_SUBSTITUTE_MATCHED) == 0)\n    {\n    cfprintf(clr_test_error, outfile, \"** substitute_subject requires substitute_matched.\\n\");\n    return PR_OK;\n    }\n  }\n\nelse\n  {\n  if (dat_datctl.substitute_subject[0] != MOD_STR_UNSET)\n    {\n    cfprintf(clr_test_error, outfile, \"** substitute_subject requires replacement text.\\n\");\n    return PR_OK;\n    }\n  }\n\n/* Warn for modifiers that are ignored for DFA. */\n\nif ((dat_datctl.control & CTL_DFA) != 0)\n  {\n  if ((dat_datctl.control & CTL_ALLCAPTURES) != 0)\n    cfprintf(clr_test_error, outfile, \"** Ignored for DFA matching: allcaptures\\n\");\n  if ((dat_datctl.control2 & CTL2_HEAPFRAMES_SIZE) != 0)\n    cfprintf(clr_test_error, outfile, \"** Ignored for DFA matching: heapframes_size\\n\");\n  }\n\n/* We now have the subject in dbuffer, with len containing the byte length, and\nulen containing the code unit length, with a copy in arg_ulen for use in match\nfunction arguments (this gets changed to PCRE2_ZERO_TERMINATED when the\nzero_terminate modifier is present).\n\nMove the data to the end of the buffer so that a read over the end can be\ncaught by valgrind or other means. If we have explicit valgrind support, mark\nthe unused start of the buffer unaddressable. If we are using the POSIX\ninterface, or testing zero-termination, we must include the terminating zero in\nthe usable data. */\n\nc = ((pat_patctl.control & CTL_POSIX) != 0 ||\n     (dat_datctl.control & CTL_ZERO_TERMINATE) != 0)? CU2BYTES(1) : 0;\npp = memmove(dbuffer + dbuffer_size - (len + c), dbuffer, len + c);\n#ifdef SUPPORT_VALGRIND\nVALGRIND_MAKE_MEM_NOACCESS(dbuffer, dbuffer_size - (len + c));\n#endif\n\n#if defined(EBCDIC) && !EBCDIC_IO\nascii_to_ebcdic_str(pp, len);\n#endif\n\n/* Now pp points to the subject string, but if null_subject was specified, set\nit to NULL to test PCRE2's behaviour. */\n\nif ((dat_datctl.control2 & CTL2_NULL_SUBJECT) != 0) pp = NULL;\n\n/* POSIX matching is only possible in 8-bit mode, and it does not support\ntiming or other fancy features. Some were checked at compile time, but we need\nto check the match-time settings here. */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nif ((pat_patctl.control & CTL_POSIX) != 0)\n  {\n  int rc;\n  int eflags = 0;\n  regmatch_t *pmatch = NULL;\n  regmatch_t startend_buf;\n  const char *msg = \"** Ignored with POSIX interface:\";\n\n  if (dat_datctl.cerror[0] != CFORE_UNSET || dat_datctl.cerror[1] != CFORE_UNSET)\n    prmsg(&msg, \"callout_error\");\n  if (dat_datctl.cfail[0] != CFORE_UNSET || dat_datctl.cfail[1] != CFORE_UNSET)\n    prmsg(&msg, \"callout_fail\");\n  if (dat_datctl.copy_numbers[0] >= 0 || dat_datctl.copy_names[0] != 0)\n    prmsg(&msg, \"copy\");\n  if (dat_datctl.get_numbers[0] >= 0 || dat_datctl.get_names[0] != 0)\n    prmsg(&msg, \"get\");\n  if (dat_datctl.jitstack != 0) prmsg(&msg, \"jitstack\");\n  if (dat_datctl.offset != 0) prmsg(&msg, \"offset\");\n\n  if ((dat_datctl.options & ~POSIX_SUPPORTED_MATCH_OPTIONS) != 0)\n    {\n    cfprintf(clr_test_error, outfile, \"%s\", msg);\n    show_match_options(clr_test_error, dat_datctl.options & ~POSIX_SUPPORTED_MATCH_OPTIONS);\n    msg = \"\";\n    }\n\n  if ((dat_datctl.control & ~POSIX_SUPPORTED_MATCH_CONTROLS) != 0 ||\n      (dat_datctl.control2 & ~POSIX_SUPPORTED_MATCH_CONTROLS2) != 0)\n    {\n    show_controls(clr_test_error, dat_datctl.control & ~POSIX_SUPPORTED_MATCH_CONTROLS,\n                  dat_datctl.control2 & ~POSIX_SUPPORTED_MATCH_CONTROLS2, msg);\n    msg = \"\";\n    }\n\n  if (msg[0] == 0) fprintf(outfile, \"\\n\");\n\n  if (dat_datctl.oveccount > 0)\n    {\n    pmatch = (regmatch_t *)malloc(sizeof(regmatch_t) * dat_datctl.oveccount);\n    if (pmatch == NULL)\n      {\n      cfprintf(clr_test_error, outfile, \"** Failed to get memory for recording matching \"\n        \"information (size set = %du)\\n\", dat_datctl.oveccount);\n      return PR_ABEND;\n      }\n    }\n\n  if (dat_datctl.startend[0] != CFORE_UNSET)\n    {\n    if (pmatch == NULL) pmatch = &startend_buf;\n    pmatch[0].rm_so = (regoff_t)dat_datctl.startend[0];\n    pmatch[0].rm_eo = (dat_datctl.startend[1] != 0)?\n      (regoff_t)dat_datctl.startend[1] : (regoff_t)len;\n    eflags |= REG_STARTEND;\n    }\n\n  if ((dat_datctl.options & PCRE2_NOTBOL) != 0) eflags |= REG_NOTBOL;\n  if ((dat_datctl.options & PCRE2_NOTEOL) != 0) eflags |= REG_NOTEOL;\n  if ((dat_datctl.options & PCRE2_NOTEMPTY) != 0) eflags |= REG_NOTEMPTY;\n\n  rc = regexec(&preg, (const char *)pp, dat_datctl.oveccount, pmatch, eflags);\n  if (rc != 0)\n    {\n    size_t usize = regerror(rc, &preg, (char *)pbuffer8, pbuffer8_size);\n    cfprintf(clr_api_error, outfile, \"No match: POSIX code %d: \", rc);\n    pchars(clr_api_error, (PCRE2_SPTR8)pbuffer8, usize - 1, utf, outfile);\n    fputs(\"\\n\", outfile);\n    }\n  else if ((pat_patctl.control & CTL_POSIX_NOSUB) != 0)\n    fprintf(outfile, \"Matched with REG_NOSUB\\n\");\n  else if (dat_datctl.oveccount == 0)\n    fprintf(outfile, \"Matched without capture\\n\");\n  else\n    {\n    size_t i, j;\n    size_t last_printed = (size_t)dat_datctl.oveccount;\n    for (i = 0; i < (size_t)dat_datctl.oveccount; i++)\n      {\n      if (pmatch[i].rm_so >= 0)\n        {\n        PCRE2_SIZE start = pmatch[i].rm_so;\n        PCRE2_SIZE end = pmatch[i].rm_eo;\n        for (j = last_printed + 1; j < i; j++)\n          fprintf(outfile, \"%2d: <unset>\\n\", (int)j);\n        last_printed = i;\n        if (start > end)\n          {\n          start = pmatch[i].rm_eo;\n          end = pmatch[i].rm_so;\n          cfprintf(clr_api_error, outfile, \"Start of matched string is beyond its end - \"\n            \"displaying from end to start.\\n\");\n          }\n        fprintf(outfile, \"%2d: \", (int)i);\n        pchars(clr_none, pp + start, end - start, utf, outfile);\n        fprintf(outfile, \"\\n\");\n\n        if ((i == 0 && (dat_datctl.control & CTL_AFTERTEXT) != 0) ||\n            (dat_datctl.control & CTL_ALLAFTERTEXT) != 0)\n          {\n          fprintf(outfile, \"%2d+ \", (int)i);\n          /* Note: don't use the start/end variables here because we want to\n          show the text from what is reported as the end. */\n          pchars(clr_none, pp + pmatch[i].rm_eo, len - pmatch[i].rm_eo, utf, outfile);\n          fprintf(outfile, \"\\n\");\n          }\n        }\n      }\n    }\n  if (pmatch != &startend_buf) free(pmatch);\n  return PR_OK;\n  }\n#endif  /* PCRE2_CODE_UNIT_WIDTH == 8 */\n\n /* Handle matching via the native interface. Check for consistency of\nmodifiers. */\n\nif (dat_datctl.startend[0] != CFORE_UNSET)\n  cfprintf(clr_test_error, outfile, \"** \\\\=posix_startend ignored for non-POSIX matching\\n\");\n\n/* ALLUSEDTEXT is not supported with JIT, but JIT is not used with DFA\nmatching, even if the JIT compiler was used. */\n\nif ((dat_datctl.control & (CTL_ALLUSEDTEXT|CTL_DFA)) == CTL_ALLUSEDTEXT &&\n    compiled_code->executable_jit != NULL)\n  {\n  cfprintf(clr_test_error, outfile, \"** Showing all consulted text is not supported by JIT: ignored\\n\");\n  dat_datctl.control &= ~CTL_ALLUSEDTEXT;\n  }\n\n/* Handle passing the subject as zero-terminated. */\n\nif ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0)\n  arg_ulen = PCRE2_ZERO_TERMINATED;\n\n/* The nullcontext modifier is used to test calling pcre2_[jit_]match() with a\nNULL context. */\n\nuse_dat_context = ((dat_datctl.control & CTL_NULLCONTEXT) != 0)?\n  NULL : dat_context;\n\n/* Enable display of malloc/free if wanted. We can do this only if either the\npattern or the subject is processed with a context. */\n\nshow_memory = (dat_datctl.control & CTL_MEMORY) != 0;\n\nif (show_memory &&\n    (pat_patctl.control & dat_datctl.control & CTL_NULLCONTEXT) != 0)\n  cfprintf(clr_test_error, outfile, \"** \\\\=memory requires either a pattern or a subject \"\n    \"context: ignored\\n\");\n\n/* Create and assign a JIT stack if requested. */\n\nif (dat_datctl.jitstack != 0)\n  {\n  if (dat_datctl.jitstack != jit_stack_size)\n    {\n    pcre2_jit_stack_free(jit_stack);\n    jit_stack = pcre2_jit_stack_create(1, dat_datctl.jitstack * 1024, NULL);\n    jit_stack_size = dat_datctl.jitstack;\n    }\n  pcre2_jit_stack_assign(dat_context, jit_callback, jit_stack);\n  }\n\n/* Or de-assign */\n\nelse if (jit_stack != NULL)\n  {\n  pcre2_jit_stack_assign(dat_context, NULL, NULL);\n  pcre2_jit_stack_free(jit_stack);\n  jit_stack = NULL;\n  jit_stack_size = 0;\n  }\n\n/* When no JIT stack is assigned, we must ensure that there is a JIT callback\nif we want to verify that JIT was actually used. */\n\nif ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_stack == NULL)\n   {\n   pcre2_jit_stack_assign(dat_context, jit_callback, NULL);\n   }\n\n/* Set up the match callout. The pattern remains in pbuffer8/16/32 after\ncompilation, for use by the callout. */\n\nif ((dat_datctl.control & CTL_CALLOUT_NONE) == 0)\n  {\n  pcre2_set_callout(dat_context, callout_function,\n    (void *)(&dat_datctl.callout_data));\n  }\nelse\n  {\n  pcre2_set_callout(dat_context, NULL, NULL);  /* No callout */\n  }\n\n/* Adjust match_data according to size of offsets required. A size of zero\ncauses a new match data block to be obtained that exactly fits the pattern. */\n\nif (dat_datctl.oveccount == 0)\n  {\n  pcre2_match_data_free(match_data);\n  match_data = pcre2_match_data_create_from_pattern(compiled_code,\n    general_context);\n  max_oveccount = pcre2_get_ovector_count(match_data);\n  }\nelse if (dat_datctl.oveccount <= max_oveccount)\n  {\n  match_data->oveccount = dat_datctl.oveccount;\n  }\nelse\n  {\n  max_oveccount = dat_datctl.oveccount;\n  pcre2_match_data_free(match_data);\n  match_data = pcre2_match_data_create(max_oveccount, general_context);\n  }\n\nif (match_data == NULL)\n  {\n  cfprintf(clr_test_error, outfile, \"** Failed to get memory for recording matching \"\n    \"information (size requested: %d)\\n\", dat_datctl.oveccount);\n  max_oveccount = 0;\n  return PR_ABEND;\n  }\n\novector = match_data->ovector;\noveccount = pcre2_get_ovector_count(match_data);\n\n/* Helper to clear any cached heap frames from the match_data. */\n\n#define CLEAR_HEAP_FRAMES() \\\n  do { \\\n     void *heapframes = (void *)(match_data->heapframes); \\\n     void *memory_data = match_data->memctl.memory_data; \\\n     match_data->memctl.free(heapframes, memory_data); \\\n     match_data->heapframes = NULL; \\\n     match_data->heapframes_size = 0; \\\n     } \\\n  while (0)\n\n/* Replacement processing is ignored for DFA matching. Allow this for\nreplacements with PCRE2_SUBSTITUTE_MATCHED, even though it won't work, in order\nto exercise the error condition. */\n\nif (dat_datctl.replacement[0] != MOD_STR_UNSET &&\n    (dat_datctl.control & CTL_DFA) != 0 &&\n    (dat_datctl.control2 & CTL2_SUBSTITUTE_MATCHED) == 0)\n  {\n  cfprintf(clr_test_error, outfile, \"** Ignored for DFA matching: replace\\n\");\n  dat_datctl.replacement[0] = MOD_STR_UNSET;\n  }\n\n/* If a replacement string is provided, call pcre2_substitute() instead of or\nafter one of the matching functions. First we have to convert the replacement\nstring to the appropriate width. */\n\nif (dat_datctl.replacement[0] != MOD_STR_UNSET)\n  {\n  int rc;\n  uint8_t *pr, *prend;\n  PCRE2_UCHAR sbuffer[SUBSTITUTE_SUBJECT_MODSIZE]; /* Staging, not seen by pcre2_substitute() */\n  PCRE2_UCHAR *rbptr;\n  PCRE2_UCHAR *sbptr;\n  uint32_t xoptions;\n  uint32_t emoption;  /* External match option */\n  PCRE2_SIZE j, rlen, full_rlen, nsize, nsize_input, slen;\n  pcre2_match_data *smatch_data;\n\n  /* Fill the ovector with junk to detect elements that do not get set\n  when they should be (relevant only when \"allvector\" is specified). */\n\n  for (j = 0; j < 2*oveccount; j++) ovector[j] = JUNK_OFFSET;\n\n  if (timeitm)\n    cfprintf(clr_test_error, outfile, \"** Timing is not supported with replace: ignored\\n\");\n\n  if ((dat_datctl.control & CTL_ALTGLOBAL) != 0)\n    cfprintf(clr_test_error, outfile, \"** Altglobal is not supported with replace: ignored\\n\");\n\n  /* Check for a test that does substitution after an initial external match.\n  If this is set, we run the external match, but leave the interpretation of\n  its output to pcre2_substitute(). */\n\n  emoption = ((dat_datctl.control2 & CTL2_SUBSTITUTE_MATCHED) == 0)? 0 :\n    PCRE2_SUBSTITUTE_MATCHED;\n\n  if (emoption != 0)\n    {\n    reset_callout_state();\n    if ((dat_datctl.control & CTL_DFA) != 0)\n      {\n      if (dfa_workspace == NULL)\n        dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int));\n      dfa_workspace[0] = -1;\n      (void)pcre2_dfa_match(compiled_code, pp, arg_ulen,\n        dat_datctl.offset, dat_datctl.options, match_data,\n        use_dat_context, dfa_workspace, DFA_WS_DIMENSION);\n      }\n    else if ((pat_patctl.control & CTL_JITFAST) != 0)\n      {\n      (void)pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset,\n        dat_datctl.options, match_data, use_dat_context);\n      }\n    else\n      {\n      (void)pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset,\n        dat_datctl.options, match_data, use_dat_context);\n      }\n    }\n\n  xoptions = emoption |\n             (((dat_datctl.control & CTL_GLOBAL) == 0)? 0 :\n                PCRE2_SUBSTITUTE_GLOBAL) |\n             (((dat_datctl.control2 & CTL2_SUBSTITUTE_EXTENDED) == 0)? 0 :\n                PCRE2_SUBSTITUTE_EXTENDED) |\n             (((dat_datctl.control2 & CTL2_SUBSTITUTE_LITERAL) == 0)? 0 :\n                PCRE2_SUBSTITUTE_LITERAL) |\n             (((dat_datctl.control2 & CTL2_SUBSTITUTE_OVERFLOW_LENGTH) == 0)? 0 :\n                PCRE2_SUBSTITUTE_OVERFLOW_LENGTH) |\n             (((dat_datctl.control2 & CTL2_SUBSTITUTE_REPLACEMENT_ONLY) == 0)? 0 :\n                PCRE2_SUBSTITUTE_REPLACEMENT_ONLY) |\n             (((dat_datctl.control2 & CTL2_SUBSTITUTE_UNKNOWN_UNSET) == 0)? 0 :\n                PCRE2_SUBSTITUTE_UNKNOWN_UNSET) |\n             (((dat_datctl.control2 & CTL2_SUBSTITUTE_UNSET_EMPTY) == 0)? 0 :\n                PCRE2_SUBSTITUTE_UNSET_EMPTY);\n\n  pr = dat_datctl.replacement+1;\n  prend = pr + dat_datctl.replacement[0];\n\n  /* If the replacement starts with '[<number>]' we interpret that as length\n  value for the replacement buffer. */\n\n  nsize = rep_out_buffer_size;\n  if (pr < prend && *pr == '[')\n    {\n    PCRE2_SIZE n = 0;\n    ++pr;\n    for (; pr < prend && (c = *pr) >= '0' && c <= '9'; ++pr)\n      n = n * 10 + (c - '0');\n    if (pr >= prend || *pr != ']')\n      {\n      cfprintf(clr_test_error, outfile, \"** Bad buffer size in replacement string\\n\");\n      return PR_OK;\n      }\n    ++pr;\n    if (n > nsize)\n      {\n      cfprintf(clr_test_error, outfile, \"** Replacement buffer setting (%\" SIZ_FORM \") is too \"\n        \"large (max %\" SIZ_FORM \")\\n\", n, nsize);\n      return PR_OK;\n      }\n    nsize = n;\n    }\n\n#ifdef SUPPORT_VALGRIND\n  VALGRIND_MAKE_MEM_UNDEFINED(rep_out_buffer, CU2BYTES(nsize));\n  VALGRIND_MAKE_MEM_NOACCESS(rep_out_buffer + nsize,\n    CU2BYTES(rep_out_buffer_size - nsize));\n#endif\n\n  /* Now copy the rest of the replacement string to the buffer. */\n\n#ifdef SUPPORT_VALGRIND\n  VALGRIND_MAKE_MEM_UNDEFINED(rep_in_buffer, CU2BYTES(rep_in_buffer_size));\n#endif\n\n  copy_substitute_string(utf, pr, prend-pr, rep_in_buffer, &rlen);\n\n#ifdef SUPPORT_VALGRIND\n  c = ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0)? 1 : 0;\n  VALGRIND_MAKE_MEM_NOACCESS(rep_in_buffer + rlen + c,\n    CU2BYTES(rep_in_buffer_size - rlen + c));\n#endif\n\n  full_rlen = rlen;\n  if ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0)\n    rlen = PCRE2_ZERO_TERMINATED;\n  rbptr = ((dat_datctl.control2 & CTL2_NULL_REPLACEMENT) == 0)? rep_in_buffer : NULL;\n\n  /* If the substitute_subject modifier is set, then we will modify the\n  subject in between the call to pcre2_match and pcre2_substitute. */\n\n  sbptr = pp;\n  slen = arg_ulen;\n\n  if (dat_datctl.substitute_subject[0] != MOD_STR_UNSET)\n    {\n    copy_substitute_string(utf, dat_datctl.substitute_subject+1,\n      dat_datctl.substitute_subject[0], sbuffer, &slen);\n\n    /* The buffer pointed to by pp has exactly the correct length (butted up\n    against the end of the memory allocation) so it would be possible but\n    awkward to extend the subject. However, since pcre2_substitute() won't allow\n    changing the length of the subject, and also early-exits if the subject\n    pointer changes, we can test all the branches just by supporting shrinking\n    the subject. */\n    if (slen > ulen)\n      {\n      cfprintf(clr_test_error, outfile, \"** substitute_subject is longer than match subject buffer\\n\");\n      return PR_OK;\n      }\n\n    /* In the null-subject case, there's no need to copy. */\n    if (pp != NULL)\n      {\n      memcpy(pp, sbuffer, CU2BYTES(slen));\n      if (slen < ulen) ((PCRE2_UCHAR *)pp)[slen] = 0;\n\n      /* If we shrank the subject, adjust the Valgrind readable area. */\n#ifdef SUPPORT_VALGRIND\n      c = ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0)? 1 : 0;\n      VALGRIND_MAKE_MEM_NOACCESS((uint8_t *)pp + CU2BYTES(slen+c),\n        (dbuffer + dbuffer_size) - ((uint8_t *)pp + CU2BYTES(slen+c)));\n#endif\n      }\n\n    if ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0)\n      slen = PCRE2_ZERO_TERMINATED;\n    }\n\n  /* Set up the required callouts and context, and call pcre2_substitute(). */\n\n  smatch_data = ((CTL2_NULL_SUBSTITUTE_MATCH_DATA & dat_datctl.control2) == 0)?\n    match_data : NULL;\n\n  if ((dat_datctl.control2 & CTL2_SUBSTITUTE_CALLOUT) != 0)\n    {\n    pcre2_set_substitute_callout(dat_context, substitute_callout_function, NULL);\n    }\n  else\n    {\n    pcre2_set_substitute_callout(dat_context, NULL, NULL);  /* No callout */\n    }\n\n  if ((dat_datctl.control2 & CTL2_SUBSTITUTE_CASE_CALLOUT) != 0)\n    {\n    pcre2_set_substitute_case_callout(dat_context, substitute_case_callout_function, NULL);\n    }\n  else\n    {\n    pcre2_set_substitute_case_callout(dat_context, NULL, NULL);  /* No callout */\n    }\n\n  if (malloc_testing) CLEAR_HEAP_FRAMES();\n  reset_callout_state();\n  nsize_input = nsize;\n  rc = pcre2_substitute(compiled_code, sbptr, slen, dat_datctl.offset,\n    dat_datctl.options|xoptions, smatch_data, use_dat_context,\n    rbptr, rlen, rep_out_buffer, &nsize);\n\n  /* For malloc testing, we repeat the substitution. */\n\n  if (malloc_testing && (dat_datctl.control2 & CTL2_SUBSTITUTE_CALLOUT) == 0)\n    {\n    for (int i = 0, target_mallocs = mallocs_called; i <= target_mallocs; i++)\n      {\n      FILE *saved_outfile = outfile;\n      CLEAR_HEAP_FRAMES();\n      reset_callout_state();\n      mallocs_until_failure = i;\n      outfile = NULL;  /* Suppress callout output during the malloc repetitions */\n      nsize = nsize_input;\n      rc = pcre2_substitute(compiled_code, sbptr, slen, dat_datctl.offset,\n        dat_datctl.options|xoptions, smatch_data, use_dat_context,\n        rbptr, rlen, rep_out_buffer, &nsize);\n      mallocs_until_failure = INT_MAX;\n      outfile = saved_outfile;\n\n      if (i < target_mallocs && rc != PCRE2_ERROR_NOMEMORY)\n        {\n        cfprintf(clr_test_error, outfile, \"** malloc() Substitution test did not fail as expected (%d)\\n\",\n                rc);\n        return PR_ABEND;\n        }\n      }\n    }\n\n  if (rc < 0)\n    {\n    cfprintf(clr_api_error, outfile, \"Failed: error %d\", rc);\n    if (rc != PCRE2_ERROR_NOMEMORY && nsize != PCRE2_UNSET)\n      cfprintf(clr_api_error, outfile, \" at offset %ld in replacement\", (long int)nsize);\n    cfprintf(clr_api_error, outfile, \": \");\n    if (!print_error_message(rc, \"\", \"\")) return PR_ABEND;\n    if (rc == PCRE2_ERROR_NOMEMORY &&\n        (xoptions & PCRE2_SUBSTITUTE_OVERFLOW_LENGTH) != 0)\n      cfprintf(clr_api_error, outfile, \": %ld code units are needed\", (long int)nsize);\n\n    if (rc != PCRE2_ERROR_NOMEMORY && nsize != PCRE2_UNSET)\n      {\n      cfprintf(clr_api_error, outfile, \"\\n        here: \");\n      if (nsize > 0)\n        {\n        ptrunc(clr_input, rbptr, full_rlen, nsize, TRUE, utf, outfile);\n        fprintf(outfile, \" \");\n        }\n      cfprintf(clr_api_error, outfile, \"|<--|\");\n      if (nsize < full_rlen)\n        {\n        fprintf(outfile, \" \");\n        ptrunc(clr_input, rbptr, full_rlen, nsize, FALSE, utf, outfile);\n        }\n      }\n    }\n  else\n    {\n    cfprintf(clr_api_error, outfile, \"%2d: \", rc);\n    pchars(clr_api_error, rep_out_buffer, nsize, utf, outfile);\n    }\n\n  fprintf(outfile, \"\\n\");\n  show_memory = FALSE;\n\n  /* Show final ovector contents and resulting heapframe size if requested. */\n\n  if ((dat_datctl.control2 & CTL2_ALLVECTOR) != 0)\n    show_ovector(ovector, oveccount);\n\n  if ((dat_datctl.control2 & CTL2_HEAPFRAMES_SIZE) != 0 &&\n      (dat_datctl.control & CTL_DFA) == 0)\n    show_heapframes_size();\n\n  return PR_OK;\n  }   /* End of substitution handling */\n\n/* When a replacement string is not provided, run a loop for global matching\nwith one of the basic matching functions. */\n\nfor (gmatched = 0;; gmatched++)\n  {\n  PCRE2_SIZE j;\n  int capcount;\n\n  /* Fill the ovector with junk to detect elements that do not get set\n  when they should be. */\n\n  for (j = 0; j < 2*oveccount; j++) ovector[j] = JUNK_OFFSET;\n\n  /* When matching is via pcre2_match(), we will detect the use of JIT via the\n  stack callback function. */\n\n  jit_was_used = (pat_patctl.control & CTL_JITFAST) != 0;\n\n  /* Do timing if required. */\n\n  if (timeitm > 0)\n    {\n    int i;\n    clock_t start_time, time_taken;\n    FILE *saved_outfile = outfile;\n\n    outfile = NULL;  /* Suppress callout output during the timing repetitions */\n\n    if ((dat_datctl.control & CTL_DFA) != 0)\n      {\n      if ((dat_datctl.options & PCRE2_DFA_RESTART) != 0)\n        {\n        outfile = saved_outfile;\n        cfprintf(clr_test_error, outfile, \"** Timing DFA restarts is not supported\\n\");\n        return PR_ABEND;\n        }\n      if (dfa_workspace == NULL)\n        dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int));\n      start_time = clock();\n      for (i = 0; i < timeitm; i++)\n        {\n        (void)pcre2_dfa_match(compiled_code, pp, arg_ulen,\n          dat_datctl.offset, dat_datctl.options | g_notempty, match_data,\n          use_dat_context, dfa_workspace, DFA_WS_DIMENSION);\n        }\n      }\n\n    else if ((pat_patctl.control & CTL_JITFAST) != 0)\n      {\n      start_time = clock();\n      for (i = 0; i < timeitm; i++)\n        {\n        (void)pcre2_jit_match(compiled_code, pp, arg_ulen,\n          dat_datctl.offset, dat_datctl.options | g_notempty, match_data,\n          use_dat_context);\n        }\n      }\n\n    else\n      {\n      start_time = clock();\n      for (i = 0; i < timeitm; i++)\n        {\n        (void)pcre2_match(compiled_code, pp, arg_ulen,\n          dat_datctl.offset, dat_datctl.options | g_notempty, match_data,\n          use_dat_context);\n        }\n      }\n    total_match_time += (time_taken = clock() - start_time);\n\n    outfile = saved_outfile;\n    cfprintf(clr_profiling, outfile, \"Match time %7.4f microseconds\\n\",\n      ((1000000 / CLOCKS_PER_SEC) * (double)time_taken) / timeitm);\n    }\n\n  /* Find the heap, match and depth limits if requested. The depth and heap\n  limits are not relevant for JIT. The return from check_match_limit() is the\n  return from the final call to pcre2_match() or pcre2_dfa_match(). */\n\n  if ((dat_datctl.control & (CTL_FINDLIMITS|CTL_FINDLIMITS_NOHEAP)) != 0)\n    {\n    if ((dat_datctl.control & CTL_FINDLIMITS_NOHEAP) == 0 &&\n        (compiled_code->executable_jit == NULL ||\n          (dat_datctl.options & PCRE2_NO_JIT) != 0))\n      {\n      (void)check_match_limit(pp, arg_ulen, PCRE2_ERROR_HEAPLIMIT, \"heap\");\n      }\n\n    capcount = check_match_limit(pp, arg_ulen, PCRE2_ERROR_MATCHLIMIT,\n      \"match\");\n\n    if (compiled_code->executable_jit == NULL ||\n        (dat_datctl.options & PCRE2_NO_JIT) != 0 ||\n        (dat_datctl.control & CTL_DFA) != 0)\n      {\n      capcount = check_match_limit(pp, arg_ulen, PCRE2_ERROR_DEPTHLIMIT,\n        \"depth\");\n      }\n\n    if (capcount == 0)\n      {\n      cfprintf(clr_api_error, outfile, \"Matched, but offsets vector is too small to show all matches\\n\");\n      capcount = dat_datctl.oveccount;\n      }\n    }\n\n  /* Otherwise just run a single match. */\n\n  else\n    {\n    /* Run a single DFA or NFA match. */\n\n    if (malloc_testing) CLEAR_HEAP_FRAMES();\n    reset_callout_state();\n    if ((dat_datctl.control & CTL_DFA) != 0)\n      {\n      if (dfa_workspace == NULL)\n        dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int));\n      if (dfa_matched++ == 0)\n        dfa_workspace[0] = -1;  /* To catch bad restart */\n      capcount = pcre2_dfa_match(compiled_code, pp, arg_ulen,\n        dat_datctl.offset, dat_datctl.options | g_notempty, match_data,\n        use_dat_context, dfa_workspace, DFA_WS_DIMENSION);\n      if (capcount == 0)\n        {\n        cfprintf(clr_api_error, outfile, \"Matched, but offsets vector is too small to show all matches\\n\");\n        capcount = dat_datctl.oveccount;\n        }\n      }\n    else\n      {\n      if ((pat_patctl.control & CTL_JITFAST) != 0)\n        capcount = pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset,\n          dat_datctl.options | g_notempty, match_data, use_dat_context);\n      else\n        capcount = pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset,\n          dat_datctl.options | g_notempty, match_data, use_dat_context);\n      if (capcount == 0)\n        {\n        cfprintf(clr_api_error, outfile, \"Matched, but too many substrings\\n\");\n        capcount = dat_datctl.oveccount;\n        }\n      }\n\n    /* For malloc testing, we repeat the matching. */\n\n    if (malloc_testing && (dat_datctl.control & CTL_CALLOUT_NONE) != 0)\n      {\n      for (int i = 0, target_mallocs = mallocs_called; i <= target_mallocs; i++)\n        {\n        FILE *saved_outfile = outfile;\n\n        CLEAR_HEAP_FRAMES();\n        reset_callout_state();\n\n        mallocs_until_failure = i;\n        outfile = NULL;  /* Suppress callout output during the malloc repetitions */\n\n        if ((dat_datctl.control & CTL_DFA) != 0)\n          {\n          if (dfa_matched++ == 0)\n            dfa_workspace[0] = -1;  /* To catch bad restart */\n          capcount = pcre2_dfa_match(compiled_code, pp, arg_ulen,\n            dat_datctl.offset, dat_datctl.options | g_notempty, match_data,\n            use_dat_context, dfa_workspace, DFA_WS_DIMENSION);\n          }\n        else\n          {\n          if ((pat_patctl.control & CTL_JITFAST) != 0)\n            capcount = pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset,\n              dat_datctl.options | g_notempty, match_data, use_dat_context);\n          else\n            capcount = pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset,\n              dat_datctl.options | g_notempty, match_data, use_dat_context);\n          }\n\n        mallocs_until_failure = INT_MAX;\n        outfile = saved_outfile;\n\n        if (capcount == 0)\n          capcount = dat_datctl.oveccount;\n\n        if (i < target_mallocs && capcount != PCRE2_ERROR_NOMEMORY)\n          {\n          cfprintf(clr_test_error, outfile, \"** malloc() match test did not fail as expected (%d)\\n\",\n                  capcount);\n          return PR_ABEND;\n          }\n        }\n      }\n    }\n\n  /* Verify that it's safe to call pcre2_next_match with rc < 0. */\n\n  if (capcount < 0 && (dat_datctl.control & CTL_ANYGLOB) != 0)\n    {\n      BOOL rc_nextmatch;\n      PCRE2_SIZE tmp_offset = 0xcd;\n      uint32_t tmp_options = 0xcd;\n      rc_nextmatch = pcre2_next_match(match_data, &tmp_offset, &tmp_options);\n      if (rc_nextmatch || tmp_offset != 0xcd || tmp_options != 0xcd)\n        {\n        cfprintf(clr_test_error, outfile, \"** unexpected pcre2_next_match() for rc < 0\\n\");\n        return PR_ABEND;\n        }\n    }\n\n  /* The result of the match is now in capcount. First handle a successful\n  match. If pp was forced to be NULL (to test NULL handling) it will have been\n  treated as an empty string if the length was zero. So, re-create that for\n  outputting, preserving the invariant that pp is a valid pointer to a region\n  of length len followed by a null. */\n\n  if (capcount >= 0)\n    {\n    if (pp == NULL)\n      {\n#ifdef SUPPORT_VALGRIND\n      /* Mark the start of dbuffer addressable again. */\n      VALGRIND_MAKE_MEM_UNDEFINED(dbuffer, CU2BYTES(1));\n#endif\n      pp = (PCRE2_UCHAR *)dbuffer;\n      *pp = 0;\n      }\n\n    if ((unsigned)capcount > oveccount)   /* Check for lunatic return value */\n      {\n      cfprintf(clr_test_error, outfile,\n        \"** PCRE2 error: returned count %d is too big for ovector count %d\\n\",\n        capcount, oveccount);\n      return PR_ABEND;\n      }\n\n    /* If PCRE2_COPY_MATCHED_SUBJECT was set, check that things are as they\n    should be, but not for fast JIT, where it isn't supported. */\n\n    if ((dat_datctl.options & PCRE2_COPY_MATCHED_SUBJECT) != 0 &&\n        (pat_patctl.control & CTL_JITFAST) == 0)\n      {\n      if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) == 0)\n        cfprintf(clr_test_error, outfile,\n          \"** PCRE2 error: flag not set after copy_matched_subject\\n\");\n\n      if (match_data->subject == pp)\n        cfprintf(clr_test_error, outfile,\n          \"** PCRE2 error: copy_matched_subject has not copied\\n\");\n\n      if (memcmp(match_data->subject, pp, ulen) != 0)\n        cfprintf(clr_test_error, outfile,\n          \"** PCRE2 error: copy_matched_subject mismatch\\n\");\n      }\n\n    /* If this is not the first time round a global loop, check that the\n    returned string has advanced.\n\n    There is one known case where this doesn't happen: when you have a\n    \"badly-behaved\" pattern which uses \\K in a lookaround, and breaks the core\n    sanity rule that start_offset <= ovector[0] <= ovector[1]. An example would\n    be /(?<=\\Ka)/g matching \"aaa\".\n      * first attempt, start_offset=0: ovector[0]=0, ovector[1]=1\n      * second attempt, start_offset=1: ovector[0]=0, ovector[1]=1\n\n    You can see that even though we *always* ensure that start_offset advances,\n    this doesn't guarantee to avoid duplicate matches.\n\n    The pcre2test behaviour is to return all the matches found, except in the\n    case where two adjacent matches are an exact duplicate. */\n\n    if (gmatched > 0 &&\n        !(dat_datctl.offset <= ovector[0] && ovector[0] <= ovector[1]) &&\n        pp + ovector[0] == ovecsave[0] && pp + ovector[1] == ovecsave[1])\n      {\n      cfprintf(clr_api_error, outfile, \"global repeat returned the same match as previous\\n\");\n      goto NEXT_MATCH;\n      }\n\n    /* Outside of this exceptional case, we check that either we have a\n    \"badly-behaved\" match (note that not all badly-behaved matches are caught\n    above, only *duplicate* ones); or else in the well-behaved case the match\n    must make progress.\n\n    \"Progress\" is measured as ovector[1] strictly advancing, or, an empty match\n    after a non-empty match. */\n\n    if (gmatched > 0 &&\n        (dat_datctl.offset <= ovector[0] && ovector[0] <= ovector[1]) &&\n        !(pp + ovector[1] > ovecsave[1] ||\n          (ovector[1] == ovector[0] && ovecsave[1] != ovecsave[0] &&\n           pp + ovector[1] == ovecsave[1])))\n      {\n      cfprintf(clr_test_error, outfile,\n        \"** PCRE2 error: global repeat did not make progress\\n\");\n      return PR_ABEND;\n      }\n\n    ovecsave[0] = pp + ovector[0];\n    ovecsave[1] = pp + ovector[1];\n\n    /* \"allcaptures\" requests showing of all captures in the pattern, to check\n    unset ones at the end. It may be set on the pattern or the data. Implement\n    by setting capcount to the maximum. This is not relevant for DFA matching,\n    so ignore it (warning given above). */\n\n    if ((dat_datctl.control & (CTL_ALLCAPTURES|CTL_DFA)) == CTL_ALLCAPTURES)\n      {\n      capcount = maxcapcount + 1;   /* Allow for full match */\n      if ((unsigned)capcount > oveccount) capcount = oveccount;\n      }\n\n    /* \"allvector\" request showing the entire ovector. */\n\n    if ((dat_datctl.control2 & CTL2_ALLVECTOR) != 0) capcount = oveccount;\n\n    /* Output the captured substrings. Note that, for the matched string,\n    the use of \\K in an assertion can make the start later than the end. */\n\n    for (int i = 0; i < 2*capcount; i += 2)\n      {\n      PCRE2_SIZE lleft, lmiddle, lright;\n      PCRE2_SIZE start = ovector[i];\n      PCRE2_SIZE end = ovector[i+1];\n\n      if (start > end)\n        {\n        start = ovector[i+1];\n        end = ovector[i];\n        cfprintf(clr_api_error, outfile, \"Start of matched string is beyond its end - \"\n          \"displaying from end to start.\\n\");\n        }\n\n      fprintf(outfile, \"%2d: \", i/2);\n\n      /* Check for an unset group */\n\n      if (start == PCRE2_UNSET && end == PCRE2_UNSET)\n        {\n        fprintf(outfile, \"<unset>\\n\");\n        continue;\n        }\n\n      /* Check for silly offsets, in particular, values that have not been\n      set when they should have been. However, if we are past the end of the\n      captures for this pattern (\"allvector\" causes this), or if we are DFA\n      matching, it isn't an error if the entry is unchanged. */\n\n      if (start > ulen || end > ulen)\n        {\n        if (((dat_datctl.control & CTL_DFA) != 0 ||\n              i >= (int)(2*maxcapcount + 2)) &&\n            start == JUNK_OFFSET && end == JUNK_OFFSET)\n          fprintf(outfile, \"<unchanged>\\n\");\n        else\n          cfprintf(clr_test_error, outfile, \"** ERROR: bad value(s) for offset(s): 0x%lx 0x%lx\\n\",\n            (unsigned long int)start, (unsigned long int)end);\n        continue;\n        }\n\n      /* When JIT is not being used, ALLUSEDTEXT may be set. (It if is set with\n      JIT, it is disabled above, with a comment.) When the match is done by the\n      interpreter, leftchar and rightchar are available, and if ALLUSEDTEXT is\n      set, and if the leftmost consulted character is before the start of the\n      match or the rightmost consulted character is past the end of the match,\n      we want to show all consulted characters for the main matched string, and\n      indicate which were lookarounds. */\n\n      if (i == 0)\n        {\n        BOOL showallused;\n        PCRE2_SIZE leftchar, rightchar;\n\n        if ((dat_datctl.control & CTL_ALLUSEDTEXT) != 0)\n          {\n          leftchar = match_data->leftchar;\n          rightchar = match_data->rightchar;\n          showallused = i == 0 && (leftchar < start || rightchar > end);\n          }\n        else showallused = FALSE;\n\n        if (showallused)\n          {\n          lleft = pchars(clr_none, pp + leftchar, start - leftchar, utf, outfile);\n          lmiddle = pchars(clr_none, pp + start, end - start, utf, outfile);\n          lright = pchars(clr_none, pp + end, rightchar - end, utf, outfile);\n          if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used)\n            fprintf(outfile, \" (JIT)\");\n          fprintf(outfile, \"\\n    \");\n          for (j = 0; j < lleft; j++) fprintf(outfile, \"<\");\n          for (j = 0; j < lmiddle; j++) fprintf(outfile, \" \");\n          for (j = 0; j < lright; j++) fprintf(outfile, \">\");\n          }\n\n        /* When a pattern contains \\K, the start of match position may be\n        different to the start of the matched string. When this is the case,\n        show it when requested. */\n\n        else if ((dat_datctl.control & CTL_STARTCHAR) != 0)\n          {\n          PCRE2_SIZE startchar;\n          startchar = pcre2_get_startchar(match_data);\n          lleft = pchars(clr_none, pp + startchar, start - startchar, utf, outfile);\n          pchars(clr_none, pp+start, end - start, utf, outfile);\n          if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used)\n            fprintf(outfile, \" (JIT)\");\n          if (startchar != start)\n            {\n            fprintf(outfile, \"\\n    \");\n            for (j = 0; j < lleft; j++) fprintf(outfile, \"^\");\n            }\n          }\n\n        /* Otherwise, just show the matched string. */\n\n        else\n          {\n          pchars(clr_none, pp + start, end - start, utf, outfile);\n          if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used)\n            fprintf(outfile, \" (JIT)\");\n          }\n        }\n\n      /* Not the main matched string. Just show it unadorned. */\n\n      else\n        {\n        pchars(clr_none, pp + start, end - start, utf, outfile);\n        }\n\n      fprintf(outfile, \"\\n\");\n\n      /* Note: don't use the start/end variables here because we want to\n      show the text from what is reported as the end. */\n\n      if ((dat_datctl.control & CTL_ALLAFTERTEXT) != 0 ||\n          (i == 0 && (dat_datctl.control & CTL_AFTERTEXT) != 0))\n        {\n        fprintf(outfile, \"%2d+ \", i/2);\n        pchars(clr_none, pp + ovector[i+1], ulen - ovector[i+1], utf, outfile);\n        fprintf(outfile, \"\\n\");\n        }\n      }\n\n    /* Output (*MARK) data if requested */\n\n    if ((dat_datctl.control & CTL_MARK) != 0 &&\n         match_data->mark != NULL)\n      {\n      fprintf(outfile, \"MK: \");\n      pchars(clr_none, match_data->mark - 1, -1, utf, outfile);\n      fprintf(outfile, \"\\n\");\n      }\n\n    /* Process copy/get strings */\n\n    if (!copy_and_get(utf, capcount)) return PR_ABEND;\n\n    }    /* End of handling a successful match */\n\n  /* There was a partial match. The value of ovector[0] is the bumpalong point,\n  that is, startchar, not any \\K point that might have been passed. When JIT is\n  not in use, \"allusedtext\" may be set, in which case we indicate the leftmost\n  consulted character. */\n\n  else if (capcount == PCRE2_ERROR_PARTIAL)\n    {\n    PCRE2_SIZE leftchar;\n    int backlength;\n    int rubriclength = 0;\n\n    if ((dat_datctl.control & CTL_ALLUSEDTEXT) != 0)\n      {\n      leftchar = match_data->leftchar;\n      }\n    else leftchar = ovector[0];\n\n    cfprintf(clr_api_error, outfile, \"Partial match\");\n    if ((dat_datctl.control & CTL_MARK) != 0 &&\n         match_data->mark != NULL)\n      {\n      fprintf(outfile, \", mark=\");\n      rubriclength = pchars(clr_none, match_data->mark - 1, -1, utf, outfile);\n      rubriclength += 7;\n      }\n    fprintf(outfile, \": \");\n    rubriclength += 15;\n\n    backlength = pchars(clr_input, pp + leftchar, ovector[0] - leftchar, utf, outfile);\n    pchars(clr_input, pp + ovector[0], ovector[1] - ovector[0], utf, outfile);\n\n    if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used)\n      fprintf(outfile, \" (JIT)\");\n    fprintf(outfile, \"\\n\");\n\n    if (backlength != 0)\n      {\n      for (int i = 0; i < rubriclength; i++) fprintf(outfile, \" \");\n      for (int i = 0; i < backlength; i++) fprintf(outfile, \"<\");\n      fprintf(outfile, \"\\n\");\n      }\n\n    if (ulen != ovector[1])\n      cfprintf(clr_test_error, outfile, \"** ovector[1] is not equal to the subject length: \"\n        \"%ld != %ld\\n\", (unsigned long int)ovector[1], (unsigned long int)ulen);\n\n    /* Process copy/get strings */\n\n    if (!copy_and_get(utf, 1)) return PR_ABEND;\n\n    /* \"allvector\" outputs the entire vector */\n\n    if ((dat_datctl.control2 & CTL2_ALLVECTOR) != 0)\n      show_ovector(ovector, oveccount);\n\n    break;  /* Out of the /g loop */\n    }       /* End of handling partial match */\n\n  /* A \"normal\" match failure. There will be a negative error number in\n  capcount. */\n\n  else\n    {\n    switch(capcount)\n      {\n      case PCRE2_ERROR_NOMATCH:\n      if (gmatched == 0)\n        {\n        cfprintf(clr_api_error, outfile, \"No match\");\n        if ((dat_datctl.control & CTL_MARK) != 0 &&\n             match_data->mark != NULL)\n          {\n          fprintf(outfile, \", mark = \");\n          pchars(clr_none, match_data->mark - 1, -1, utf, outfile);\n          }\n        if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used)\n          fprintf(outfile, \" (JIT)\");\n        fprintf(outfile, \"\\n\");\n\n        /* \"allvector\" outputs the entire vector */\n\n        if ((dat_datctl.control2 & CTL2_ALLVECTOR) != 0)\n          show_ovector(ovector, oveccount);\n        }\n      break;\n\n      case PCRE2_ERROR_BADUTFOFFSET:\n      cfprintf(clr_api_error, outfile, \"Error %d (bad UTF-\" STR(PCRE2_CODE_UNIT_WIDTH)\n        \" offset)\\n\", capcount);\n      break;\n\n      default:\n      cfprintf(clr_api_error, outfile, \"Failed: error %d: \", capcount);\n      if (!print_error_message(capcount, \"\", \"\")) return PR_ABEND;\n      if (capcount <= PCRE2_ERROR_UTF8_ERR1 &&\n          capcount >= PCRE2_ERROR_UTF32_ERR2)\n        {\n        PCRE2_SIZE startchar;\n        startchar = pcre2_get_startchar(match_data);\n        cfprintf(clr_api_error, outfile, \" at offset %\" SIZ_FORM, startchar);\n        }\n      fprintf(outfile, \"\\n\");\n      break;\n      }\n\n    break;  /* Out of the /g loop */\n    }       /* End of failed match handling */\n\n  /* Control reaches here after a match. If we are not doing a global search,\n  we are done. Otherwise, we adjust the parameters for the next match and\n  continue the matching loop. */\n\n  NEXT_MATCH:\n\n  if ((dat_datctl.control & CTL_ANYGLOB) == 0)\n    break;\n  else\n    {\n    PCRE2_SIZE new_start_offset = (PCRE2_SIZE)-1;\n    BOOL rc_nextmatch;\n\n    /* Use pcre2_next_match() to safely advance. This guarantees that the start\n    offset will advance, except after an empty match, in which case it sets\n    the PCRE2_NOTEMPTY_ATSTART flag to ensure the next match does not return a\n    duplicate. */\n\n    rc_nextmatch = pcre2_next_match(match_data, &new_start_offset, &g_notempty);\n    if (!rc_nextmatch) break;  /* Out of the /g loop */\n\n    /* For a normal global (/g) iteration, update the start offset, leaving\n    other parameters alone. */\n\n    if ((dat_datctl.control & CTL_GLOBAL) != 0)\n      {\n      dat_datctl.offset = new_start_offset;\n      }\n\n    /* For altglobal, just update the pointer and length. */\n\n    else\n      {\n      pp += new_start_offset;\n      len -= CU2BYTES(new_start_offset);\n      ulen -= new_start_offset;\n      if (arg_ulen != PCRE2_ZERO_TERMINATED) arg_ulen -= new_start_offset;\n      }\n    }\n  }  /* End of global loop */\n\n/* All matching is done; show the resulting heapframe size if requested. */\n\nif ((dat_datctl.control2 & CTL2_HEAPFRAMES_SIZE) != 0 &&\n    (dat_datctl.control & CTL_DFA) == 0)\n  show_heapframes_size();\n\nshow_memory = FALSE;\nreturn PR_OK;\n}\n\n\n\n/*************************************************\n*      Initialise the mode-dependent globals     *\n*************************************************/\n\n/* Sets up the global variables used for the current test mode. */\n\nstatic void\ninit_globals(void)\n{\ngeneral_context = pcre2_general_context_create(&my_malloc, &my_free, NULL);\ngeneral_context_copy = pcre2_general_context_copy(general_context);\ndefault_pat_context = pcre2_compile_context_create(general_context);\npat_context = pcre2_compile_context_copy(default_pat_context);\ndefault_dat_context = pcre2_match_context_create(general_context);\ndat_context = pcre2_match_context_copy(default_dat_context);\ndefault_con_context = pcre2_convert_context_create(general_context);\ncon_context = pcre2_convert_context_copy(default_con_context);\nmatch_data = pcre2_match_data_create(max_oveccount, general_context);\nrep_in_buffer = malloc(sizeof(PCRE2_UCHAR) * rep_in_buffer_size);\nrep_out_buffer = malloc(sizeof(PCRE2_UCHAR) * rep_out_buffer_size);\n\n/* Set a default parentheses nest limit that is large enough to run the\nstandard tests (this also exercises the function). */\n\npcre2_set_parens_nest_limit(default_pat_context, PARENS_NEST_DEFAULT);\n}\n\n/* Frees the global variables used for the current test mode. */\n\nstatic void\nfree_globals(void)\n{\npcre2_maketables_free(general_context, locale_tables);\npcre2_match_data_free(match_data);\npcre2_code_free(compiled_code);\n\nwhile(patstacknext-- > 0)\n  {\n  compiled_code = patstack[patstacknext];\n  pcre2_code_free(compiled_code);\n  }\n\npcre2_jit_free_unused_memory(general_context);\nif (jit_stack != NULL)\n  {\n  pcre2_jit_stack_free(jit_stack);\n  }\n\npcre2_general_context_free(general_context);\npcre2_general_context_free(general_context_copy);\npcre2_compile_context_free(pat_context);\npcre2_compile_context_free(default_pat_context);\npcre2_match_context_free(dat_context);\npcre2_match_context_free(default_dat_context);\npcre2_convert_context_free(default_con_context);\npcre2_convert_context_free(con_context);\nfree(rep_in_buffer);\nfree(rep_out_buffer);\n}\n\n\n\n/*************************************************\n*            Specific function tests             *\n*************************************************/\n\n/* For tests exercising a mismatched bitmode, identify a suitable API. */\n\n#if (defined(SUPPORT_PCRE2_8) + defined(SUPPORT_PCRE2_16) + \\\n     defined(SUPPORT_PCRE2_32)) >= 2\n\n#if defined(SUPPORT_PCRE2_8) && PCRE2_CODE_UNIT_WIDTH != 8\n#define BITOTHER 8\n#elif defined(SUPPORT_PCRE2_16) && PCRE2_CODE_UNIT_WIDTH != 16\n#define BITOTHER 16\n#elif defined(SUPPORT_PCRE2_32) && PCRE2_CODE_UNIT_WIDTH != 32\n#define BITOTHER 32\n#else\n#error \"One other bit width must be supported\"\n#endif\n\n#endif\n\n/* These are tests of the public API functions in PCRE2, which wouldn't\notherwise be covered by pcre2test. This usually implies they are error cases,\nor edge cases that are hard to hit in the standard flow of compile-match or\ncompile-substitute.\n\nI think of them as perhaps more like unit tests, although they are still testing\nthe public API, rather than internal modules.\n\nInside pcre2test, which can be dynamically linked to lib-pcreX.so, we don't\nhave access to any non-exported functions. */\n\nstatic void\nunittest(void)\n{\nint rc;\nuint32_t uval;\nPCRE2_SIZE sizeval;\nPCRE2_UCHAR *sptrval;\nconst char *failure = NULL;\npcre2_general_context *test_gen_context = NULL, *test_gen_context_copy = NULL;\npcre2_compile_context *test_pat_context = NULL, *test_pat_context_copy = NULL;\npcre2_match_context *test_dat_context = NULL, *test_dat_context_copy = NULL;\npcre2_convert_context *test_con_context = NULL, *test_con_context_copy = NULL;\npcre2_match_data *test_match_data = NULL;\npcre2_code *test_compiled_code = NULL;\nPCRE2_UCHAR pattern[] = { CHAR_A, CHAR_B, CHAR_C, 0 };\nPCRE2_UCHAR callout_int_pattern[] = {\n  CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK, CHAR_C, CHAR_RIGHT_PARENTHESIS, 0 };\nPCRE2_UCHAR callout_str_pattern[] = {\n  CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK, CHAR_C, CHAR_QUOTATION_MARK,\n  CHAR_Z, CHAR_QUOTATION_MARK, CHAR_RIGHT_PARENTHESIS, 0 };\nPCRE2_UCHAR capture_pattern[] = {\n  CHAR_A, CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK, CHAR_LESS_THAN_SIGN,\n  CHAR_N, CHAR_GREATER_THAN_SIGN, CHAR_DOT, CHAR_ASTERISK,\n  CHAR_RIGHT_PARENTHESIS, CHAR_Z, 0 };\nPCRE2_UCHAR subject_abcz[] = {\n  CHAR_A, CHAR_B, CHAR_C, CHAR_Z, 0 };\nPCRE2_UCHAR substitute_subject[6];\nPCRE2_UCHAR name_n[] = { CHAR_N, 0 };\n#ifdef BITOTHER\nG(pcre2_code_,BITOTHER) *bitother_code = NULL;\nG(PCRE2_,G(UCHAR,BITOTHER)) bitother_pattern[] = { CHAR_A, CHAR_B, CHAR_C, 0 };\n#endif\nint errorcode;\nPCRE2_SIZE erroroffset;\nPCRE2_UCHAR errorbuffer[256];\n#if PCRE2_CODE_UNIT_WIDTH == 8\nchar errorbuffer8[256];\nregex_t test_preg;\n#endif\nvoid *invalid_code = NULL;\nconst uint8_t *test_tables = NULL;\nPCRE2_UCHAR copy_buf[64];\nPCRE2_UCHAR **stringlist;\nPCRE2_SIZE *lengthslist;\nPCRE2_UCHAR replace_buf[64];\npcre2_code *subs_other_code = NULL;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\nmemset(&test_preg, 0, sizeof(test_preg));\n#endif\n\n#if defined PCRE2_DEBUG && !defined NDEBUG\n#define ASSERT(cond, msg) \\\n  do { \\\n    if (!(cond)) { failure = msg \" at \" __FILE__ \":\" STR(__LINE__); goto EXIT; } \\\n  } while (0)\n#else\n#define ASSERT(cond, msg) \\\n  do { \\\n    if (!(cond)) { failure = msg; goto EXIT; } \\\n  } while (0)\n#endif\n\n/* -------------------------- pcre2_config --------------------------------- */\n\nrc = pcre2_config(PCRE2_CONFIG_BSR, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_COMPILED_WIDTHS, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_DEPTHLIMIT, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_EFFECTIVE_LINKSIZE, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_HEAPLIMIT, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_JIT, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_LINKSIZE, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_MATCHLIMIT, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_NEVER_BACKSLASH_C, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_NEWLINE, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_PARENSLIMIT, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_STACKRECURSE, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_TABLES_LENGTH, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_UNICODE, NULL);\nASSERT(rc == (int)sizeof(uint32_t), \"pcre2_config(NULL)\");\n\n#ifdef SUPPORT_JIT\nrc = pcre2_config(PCRE2_CONFIG_JITTARGET, NULL);\nASSERT(rc > 0, \"pcre2_config(NULL)\");\n#endif\nrc = pcre2_config(PCRE2_CONFIG_UNICODE_VERSION, NULL);\nASSERT(rc > 4, \"pcre2_config(NULL)\");\nrc = pcre2_config(PCRE2_CONFIG_VERSION, NULL);\nASSERT(rc > 4, \"pcre2_config(NULL)\");\n\nrc = pcre2_config(PCRE2_CONFIG_MATCHLIMIT, &uval);\nASSERT(rc == 0, \"pcre2_config(PCRE2_CONFIG_MATCHLIMIT)\");\n\nrc = pcre2_config(999, NULL);\nASSERT(rc == PCRE2_ERROR_BADOPTION, \"pcre2_config(bad option)\");\n\nrc = pcre2_config(999, &uval);\nASSERT(rc == PCRE2_ERROR_BADOPTION, \"pcre2_config(bad option)\");\n\nrc = pcre2_config(PCRE2_CONFIG_STACKRECURSE, &uval);\nASSERT(rc == 0, \"pcre2_config(PCRE2_CONFIG_STACKRECURSE)\");\n\nrc = pcre2_config(PCRE2_CONFIG_LINKSIZE, &uval);\nASSERT(rc == 0, \"pcre2_config(PCRE2_CONFIG_LINKSIZE)\");\n\n/* ------------------------ Context functions ------------------------------ */\n\ntest_gen_context = pcre2_general_context_create(NULL, NULL, NULL);\nASSERT(test_gen_context != NULL, \"pcre2_general_context_create(null)\");\npcre2_general_context_free(test_gen_context);\n\nmallocs_until_failure = 0;\ntest_gen_context = pcre2_general_context_create(&my_malloc, &my_free, NULL);\nASSERT(test_gen_context == NULL, \"pcre2_general_context_create(malloc)\");\n\nmallocs_until_failure = 1;\ntest_gen_context = pcre2_general_context_create(&my_malloc, &my_free, NULL);\nASSERT(test_gen_context != NULL, \"pcre2_general_context_create(malloc)\");\n\ntest_pat_context = pcre2_compile_context_create(test_gen_context);\nASSERT(test_pat_context == NULL, \"pcre2_compile_context_create()\");\ntest_dat_context = pcre2_match_context_create(test_gen_context);\nASSERT(test_dat_context == NULL, \"pcre2_match_context_create()\");\ntest_con_context = pcre2_convert_context_create(test_gen_context);\nASSERT(test_con_context == NULL, \"pcre2_convert_context_create()\");\n\ntest_pat_context = pcre2_compile_context_create(NULL);\nASSERT(test_pat_context != NULL, \"pcre2_compile_context_create(null)\");\npcre2_compile_context_free(test_pat_context);\ntest_dat_context = pcre2_match_context_create(NULL);\nASSERT(test_dat_context != NULL, \"pcre2_match_context_create(null)\");\npcre2_match_context_free(test_dat_context);\ntest_con_context = pcre2_convert_context_create(NULL);\nASSERT(test_con_context != NULL, \"pcre2_convert_context_create(null)\");\npcre2_convert_context_free(test_con_context);\n\nmallocs_until_failure = INT_MAX;\ntest_pat_context = pcre2_compile_context_create(test_gen_context);\nASSERT(test_pat_context != NULL, \"pcre2_compile_context_create()\");\ntest_dat_context = pcre2_match_context_create(test_gen_context);\nASSERT(test_dat_context != NULL, \"pcre2_match_context_create()\");\ntest_con_context = pcre2_convert_context_create(test_gen_context);\nASSERT(test_con_context != NULL, \"pcre2_convert_context_create()\");\n\nmallocs_until_failure = 0;\ntest_gen_context_copy = pcre2_general_context_copy(test_gen_context);\nASSERT(test_gen_context_copy == NULL, \"pcre2_general_context_copy()\");\ntest_pat_context_copy = pcre2_compile_context_copy(test_pat_context);\nASSERT(test_pat_context_copy == NULL, \"pcre2_compile_context_copy()\");\ntest_dat_context_copy = pcre2_match_context_copy(test_dat_context);\nASSERT(test_dat_context_copy == NULL, \"pcre2_match_context_copy()\");\ntest_con_context_copy = pcre2_convert_context_copy(test_con_context);\nASSERT(test_con_context_copy == NULL, \"pcre2_convert_context_copy()\");\n\nmallocs_until_failure = INT_MAX;\ntest_gen_context_copy = pcre2_general_context_copy(test_gen_context);\nASSERT(test_gen_context_copy != NULL, \"pcre2_general_context_copy()\");\ntest_pat_context_copy = pcre2_compile_context_copy(test_pat_context);\nASSERT(test_pat_context_copy != NULL, \"pcre2_compile_context_copy()\");\ntest_dat_context_copy = pcre2_match_context_copy(test_dat_context);\nASSERT(test_dat_context_copy != NULL, \"pcre2_match_context_copy()\");\ntest_con_context_copy = pcre2_convert_context_copy(test_con_context);\nASSERT(test_con_context_copy != NULL, \"pcre2_convert_context_copy()\");\n\nrc = pcre2_set_compile_extra_options(test_pat_context, 0);\nASSERT(rc == 0, \"pcre2_set_compile_extra_options()\");\n\nrc = pcre2_set_max_pattern_length(test_pat_context, 10);\nASSERT(rc == 0, \"pcre2_set_max_pattern_length()\");\n\nrc = pcre2_set_max_pattern_compiled_length(test_pat_context, 256);\nASSERT(rc == 0, \"pcre2_set_max_pattern_compiled_length()\");\n\nrc = pcre2_set_max_varlookbehind(test_pat_context, 0);\nASSERT(rc == 0, \"pcre2_set_max_varlookbehind()\");\n\nrc = pcre2_set_offset_limit(test_dat_context, 0);\nASSERT(rc == 0, \"pcre2_set_offset_limit()\");\n\nrc = pcre2_set_bsr(test_pat_context, 999);\nASSERT(rc == PCRE2_ERROR_BADDATA, \"pcre2_set_bsr()\");\n\nrc = pcre2_set_newline(test_pat_context, 999);\nASSERT(rc == PCRE2_ERROR_BADDATA, \"pcre2_set_newline()\");\n\nrc = pcre2_set_recursion_limit(test_dat_context, 10);\nASSERT(rc == 0, \"pcre2_set_recursion_limit()\");\n\nrc = pcre2_set_recursion_memory_management(test_dat_context, NULL, NULL, NULL);\nASSERT(rc == 0, \"pcre2_set_recursion_memory_management()\");\n\nrc = pcre2_set_optimize(NULL, PCRE2_OPTIMIZATION_NONE);\nASSERT(rc == PCRE2_ERROR_NULL, \"pcre2_set_optimize(null)\");\n\nrc = pcre2_set_optimize(test_pat_context, PCRE2_AUTO_POSSESS - 1);\nASSERT(rc == PCRE2_ERROR_BADOPTION, \"pcre2_set_optimize(bad option)\");\n\nrc = pcre2_set_optimize(test_pat_context, PCRE2_START_OPTIMIZE_OFF + 1);\nASSERT(rc == PCRE2_ERROR_BADOPTION, \"pcre2_set_optimize(bad option)\");\n\nrc = pcre2_set_glob_escape(test_con_context, 0);\nASSERT(rc == 0, \"pcre2_set_glob_escape(0)\");\n\nrc = pcre2_set_glob_escape(test_con_context, 1);\nASSERT(rc == PCRE2_ERROR_BADDATA, \"pcre2_set_glob_escape(1)\");\n\nrc = pcre2_set_glob_escape(test_con_context, 256);\nASSERT(rc == PCRE2_ERROR_BADDATA, \"pcre2_set_glob_escape(256)\");\n\n/* ----------------------- pcre2_compile ----------------------------------- */\n\ntest_compiled_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED,\n  0, NULL, &erroroffset, test_pat_context);\nASSERT(test_compiled_code == NULL, \"test pattern compilation\");\n\ntest_compiled_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED,\n  0, &errorcode, NULL, test_pat_context);\nASSERT(test_compiled_code == NULL && errorcode == PCRE2_ERROR_NULL_ERROROFFSET, \"test pattern compilation\");\n\ntest_compiled_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED,\n  0, &errorcode, &erroroffset, test_pat_context);\nASSERT(test_compiled_code != NULL && errorcode == 100 && erroroffset == 0, \"test pattern compilation\");\n\n#ifdef BITOTHER\nbitother_code = G(pcre2_compile_,BITOTHER)(bitother_pattern,\n  PCRE2_ZERO_TERMINATED, 0, &errorcode, &erroroffset, NULL);\nASSERT(bitother_code != NULL, \"bitmode mismatch compile\");\n#endif\n\n/* ---------------------- Match data functions ----------------------------- */\n\nmallocs_until_failure = 0;\ntest_match_data = pcre2_match_data_create(10, test_gen_context);\nASSERT(test_match_data == NULL, \"pcre2_match_data_create()\");\n\ntest_match_data = pcre2_match_data_create(10, NULL);\nASSERT(test_match_data != NULL, \"pcre2_match_data_create()\");\nASSERT(pcre2_get_ovector_count(test_match_data) == 10, \"pcre2_get_ovector_count()\");\n\nsizeval = pcre2_get_match_data_size(test_match_data);\nASSERT(sizeval >= 2, \"pcre2_get_match_data_size()\");\n\nmallocs_until_failure = INT_MAX;\n\npcre2_match_data_free(test_match_data);\ntest_match_data = pcre2_match_data_create(0, test_gen_context);\nASSERT(test_match_data != NULL, \"pcre2_match_data_create()\");\nASSERT(pcre2_get_ovector_count(test_match_data) == 1, \"pcre2_get_ovector_count()\");\n\npcre2_match_data_free(test_match_data);\ntest_match_data = pcre2_match_data_create_from_pattern(NULL, NULL);\nASSERT(test_match_data == NULL, \"pcre2_match_data_create_from_pattern(null)\");\n\ntest_match_data = pcre2_match_data_create_from_pattern(test_compiled_code, NULL);\nASSERT(test_match_data != NULL, \"pcre2_match_data_create_from_pattern()\");\nASSERT(pcre2_get_ovector_count(test_match_data) == 1, \"pcre2_get_ovector_count()\");\n\nmallocs_until_failure = 0;\npcre2_match_data_free(test_match_data);\ntest_match_data = pcre2_match_data_create_from_pattern(test_compiled_code,\n  test_gen_context);\nASSERT(test_match_data == NULL, \"pcre2_match_data_create_from_pattern()\");\n\nmallocs_until_failure = INT_MAX;\npcre2_match_data_free(test_match_data);\ntest_match_data = pcre2_match_data_create_from_pattern(test_compiled_code,\n  test_gen_context);\nASSERT(test_match_data != NULL, \"pcre2_match_data_create_from_pattern()\");\n\nrc = pcre2_match(test_compiled_code, pattern, PCRE2_ZERO_TERMINATED, 0,\n  PCRE2_COPY_MATCHED_SUBJECT, test_match_data, NULL);\nASSERT(rc == 1, \"pcre2_match()\");\n\npcre2_match_data_free(test_match_data);\ntest_match_data = NULL;\n\n/* ----------------------- pcre2_pattern_info ------------------------------ */\n\nrc = pcre2_pattern_info(NULL, PCRE2_INFO_NEWLINE, &uval);\nASSERT(rc == PCRE2_ERROR_NULL, \"pcre2_pattern_info(null)\");\n\nrc = pcre2_pattern_info(test_compiled_code, 999, NULL);\nASSERT(rc == PCRE2_ERROR_BADOPTION, \"pcre2_pattern_info(bad option)\");\n\nrc = pcre2_pattern_info(test_compiled_code, 999, &uval);\nASSERT(rc == PCRE2_ERROR_BADOPTION, \"pcre2_pattern_info(bad option)\");\n\ninvalid_code = malloc(1024);\nASSERT(invalid_code != NULL, \"malloc()\");\nmemset(invalid_code, 0, 1024);\nrc = pcre2_pattern_info(invalid_code, PCRE2_INFO_NEWLINE, &uval);\nASSERT(rc == PCRE2_ERROR_BADMAGIC, \"pcre2_pattern_info(bad magic)\");\n\n#ifdef BITOTHER\nrc = pcre2_pattern_info((pcre2_code *)bitother_code, PCRE2_INFO_NEWLINE, &uval);\nASSERT(rc == PCRE2_ERROR_BADMODE, \"pcre2_pattern_info(bitmode mismatch)\");\n#endif\n\n#ifdef SUPPORT_JIT\nsizeval = 0xcdcdcdcd;\nrc = pcre2_pattern_info(test_compiled_code, PCRE2_INFO_JITSIZE, &sizeval);\nASSERT(rc == 0 && sizeval == 0, \"pcre2_pattern_info(JIT)\");\n\nif (pcre2_jit_compile(test_compiled_code, PCRE2_JIT_COMPLETE) == 0)\n  {\n  rc = pcre2_pattern_info(test_compiled_code, PCRE2_INFO_JITSIZE, &sizeval);\n  ASSERT(rc == 0 && sizeval > 0, \"pcre2_pattern_info(JIT after compile)\");\n  }\n#endif\n\n/* ----------------------- POSIX functions --------------------------------- */\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\n\n#if defined(EBCDIC) && !EBCDIC_IO\n#define BUFFER_OUTPUT ebcdic_to_ascii_str((uint8_t *)errorbuffer8, sizeof(errorbuffer8));\n#else\n#define BUFFER_OUTPUT\n#endif\n\nrc = pcre2_regcomp(&test_preg, \"abc\", 0);\nASSERT(rc == 0, \"pcre2_regcomp()\");\n\nrc = pcre2_regexec(&test_preg, \"zabcz\", 0, NULL, 0);\nASSERT(rc == 0, \"pcre2_regexec(0)\");\n\nrc = pcre2_regexec(&test_preg, \"zabcz\", 0, NULL, REG_STARTEND);\nASSERT(rc == REG_INVARG, \"pcre2_regexec(REG_STARTEND)\");\n\nmemset(errorbuffer8, 0, sizeof(errorbuffer8));\nrc = regerror(REG_ASSERT, NULL, errorbuffer8, sizeof(errorbuffer8));\nBUFFER_OUTPUT\nASSERT(rc > 0 && rc <= (int)sizeof(errorbuffer8) && rc == (int)strlen(errorbuffer8) + 1, \"regerror()\");\n\nrc = regerror(REG_NOMATCH, NULL, errorbuffer8, sizeof(errorbuffer8));\nBUFFER_OUTPUT\nASSERT(rc > 0 && rc <= (int)sizeof(errorbuffer8) && rc == (int)strlen(errorbuffer8) + 1, \"regerror()\");\n\nrc = regerror(REG_ASSERT-1, NULL, errorbuffer8, sizeof(errorbuffer8));\nBUFFER_OUTPUT\nASSERT(rc == (int)strlen(\"unknown error code\")+1 && strcmp(errorbuffer8, \"unknown error code\") == 0, \"regerror(bad error code)\");\n\nrc = regerror(REG_NOMATCH+1, NULL, errorbuffer8, sizeof(errorbuffer8));\nBUFFER_OUTPUT\nASSERT(rc == (int)strlen(\"unknown error code\")+1 && strcmp(errorbuffer8, \"unknown error code\") == 0, \"regerror(bad error code)\");\n\n#undef BUFFER_OUTPUT\n\n#endif\n\n/* -------------------- pcre2_get_error_message ---------------------------- */\n\n#if defined(EBCDIC) && !EBCDIC_IO\n#define BUFFER_OUTPUT ebcdic_to_ascii_str(errorbuffer, sizeof(errorbuffer));\n#else\n#define BUFFER_OUTPUT\n#endif\n\nrc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, NULL, 0);\nASSERT(rc == PCRE2_ERROR_NOMEMORY, \"pcre2_get_error_message(null)\");\n\nmemset(errorbuffer, 0, sizeof(errorbuffer));\nrc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, errorbuffer, 0);\nBUFFER_OUTPUT\nASSERT(rc == PCRE2_ERROR_NOMEMORY, \"pcre2_get_error_message(null)\");\n\nrc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, errorbuffer, 4);\nBUFFER_OUTPUT\nASSERT(rc == PCRE2_ERROR_NOMEMORY && pcre2_strcmp_c8(errorbuffer, \"bad\") == 0, \"pcre2_get_error_message(null)\");\n\nrc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, errorbuffer, 14);\nBUFFER_OUTPUT\nASSERT(rc == PCRE2_ERROR_NOMEMORY && pcre2_strcmp_c8(errorbuffer, \"bad data valu\") == 0, \"pcre2_get_error_message(null)\");\n\nrc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, errorbuffer, 15);\nBUFFER_OUTPUT\nASSERT(rc == 14 && pcre2_strcmp_c8(errorbuffer, \"bad data value\") == 0, \"pcre2_get_error_message(null)\");\n\n#undef BUFFER_OUTPUT\n\n/* ----------------------- pcre2_maketables -------------------------------- */\n\ntest_tables = pcre2_maketables(NULL);\nASSERT(test_tables != NULL, \"pcre2_maketables(null)\");\npcre2_maketables_free(NULL, test_tables);\n\ntest_tables = pcre2_maketables(test_gen_context);\nASSERT(test_tables != NULL, \"pcre2_maketables()\");\npcre2_maketables_free(test_gen_context, test_tables);\n\nmallocs_until_failure = 0;\ntest_tables = pcre2_maketables(test_gen_context);\nASSERT(test_tables == NULL, \"pcre2_maketables()\");\n\nmallocs_until_failure = INT_MAX;\n\n/* -------------------- pcre2_callout_enumerate ---------------------------- */\n\nrc = pcre2_callout_enumerate(NULL, callout_enumerate_function_void, NULL);\nASSERT(rc == PCRE2_ERROR_NULL, \"pcre2_callout_enumerate(null)\");\n\nrc = pcre2_callout_enumerate(invalid_code, callout_enumerate_function_void, NULL);\nASSERT(rc == PCRE2_ERROR_BADMAGIC, \"pcre2_callout_enumerate(invalid)\");\n\n#ifdef BITOTHER\nrc = pcre2_callout_enumerate((pcre2_code *)bitother_code, callout_enumerate_function_void, NULL);\nASSERT(rc == PCRE2_ERROR_BADMODE, \"pcre2_callout_enumerate(bitmode mismatch)\");\n#endif\n\npcre2_code_free(test_compiled_code);\ntest_compiled_code = pcre2_compile(callout_int_pattern, PCRE2_ZERO_TERMINATED,\n  0, &errorcode, &erroroffset, NULL);\nASSERT(test_compiled_code != NULL, \"test pattern compilation\");\n\nrc = pcre2_callout_enumerate(test_compiled_code, callout_enumerate_function_void, &errorcode);\nASSERT(rc == 0, \"pcre2_callout_enumerate(void)\");\n\nerrorcode = -12;\nrc = pcre2_callout_enumerate(test_compiled_code, callout_enumerate_function_fail, &errorcode);\nASSERT(rc == -12, \"pcre2_callout_enumerate(fail)\");\n\npcre2_code_free(test_compiled_code);\ntest_compiled_code = pcre2_compile(callout_str_pattern, PCRE2_ZERO_TERMINATED,\n  0, &errorcode, &erroroffset, NULL);\nASSERT(test_compiled_code != NULL, \"test pattern compilation\");\n\nerrorcode = -123;\nrc = pcre2_callout_enumerate(test_compiled_code, callout_enumerate_function_fail, &errorcode);\nASSERT(rc == -123, \"pcre2_callout_enumerate(fail)\");\n\n/* ---------------------- Substring functions ------------------------------ */\n\n/* Must handle NULL without crashing. */\npcre2_substring_free(NULL);\npcre2_substring_list_free(NULL);\n\npcre2_code_free(test_compiled_code);\ntest_compiled_code = pcre2_compile(capture_pattern, PCRE2_ZERO_TERMINATED,\n  0, &errorcode, &erroroffset, NULL);\nASSERT(test_compiled_code != NULL, \"test pattern compilation\");\n\npcre2_match_data_free(test_match_data);\ntest_match_data = pcre2_match_data_create_from_pattern(\n  test_compiled_code, test_gen_context);\nASSERT(test_match_data != NULL, \"pcre2_match_data_create()\");\n\nrc = pcre2_match(test_compiled_code, subject_abcz, PCRE2_ZERO_TERMINATED, 0,\n  0, test_match_data, NULL);\nASSERT(rc == 2, \"pcre2_match()\");\n\n/* Test the functions with insufficient buffer size. It hardly seems worth\nadding controls to the pcre2test input file format to exercise this case. */\n\nsizeval = 2;\nrc = pcre2_substring_copy_byname(test_match_data, name_n, copy_buf, &sizeval);\nASSERT(rc == PCRE2_ERROR_NOMEMORY && sizeval == 2, \"pcre2_substring_copy_byname(small buffer)\");\nsizeval = 3;\nrc = pcre2_substring_copy_byname(test_match_data, name_n, copy_buf, &sizeval);\nASSERT(rc == 0 && sizeval == 2, \"pcre2_substring_copy_byname(small buffer)\");\nsizeval = 4;\nrc = pcre2_substring_copy_byname(test_match_data, name_n, copy_buf, &sizeval);\nASSERT(rc == 0 && sizeval == 2, \"pcre2_substring_copy_byname(small buffer)\");\n\nsizeval = 2;\nrc = pcre2_substring_copy_bynumber(test_match_data, 1, copy_buf, &sizeval);\nASSERT(rc == PCRE2_ERROR_NOMEMORY && sizeval == 2, \"pcre2_substring_copy_bynumber(small buffer)\");\nsizeval = 3;\nrc = pcre2_substring_copy_bynumber(test_match_data, 1, copy_buf, &sizeval);\nASSERT(rc == 0 && sizeval == 2, \"pcre2_substring_copy_bynumber(small buffer)\");\n\nmallocs_until_failure = 0;\n\nsizeval = 0;\nsptrval = NULL;\nrc = pcre2_substring_get_byname(test_match_data, name_n, &sptrval, &sizeval);\nASSERT(rc == PCRE2_ERROR_NOMEMORY && sptrval == NULL, \"pcre2_substring_get_byname(small buffer)\");\n\nsizeval = 0;\nrc = pcre2_substring_get_bynumber(test_match_data, 1, &sptrval, &sizeval);\nASSERT(rc == PCRE2_ERROR_NOMEMORY && sptrval == NULL, \"pcre2_substring_get_bynumber(small buffer)\");\n\nmallocs_until_failure = INT_MAX;\n\n/* Test some unusual conditions, for which again it doesn't seem worth adding\npcre2test controls. */\n\nsizeval = 0;\nrc = pcre2_substring_length_bynumber(test_match_data, 1, &sizeval);\nASSERT(rc == 0 && sizeval == 2, \"pcre2_substring_length_bynumber()\");\nrc = pcre2_substring_length_bynumber(test_match_data, 1, NULL);\nASSERT(rc == 0, \"pcre2_substring_length_bynumber()\");\n\nsizeval = 0;\nrc = pcre2_substring_length_byname(test_match_data, name_n, &sizeval);\nASSERT(rc == 0 && sizeval == 2, \"pcre2_substring_length_byname()\");\nrc = pcre2_substring_length_byname(test_match_data, name_n, NULL);\nASSERT(rc == 0, \"pcre2_substring_length_byname()\");\n\n/* Test pcre2_substring_list_get() with some NULL inputs. */\n\nrc = pcre2_substring_list_get(test_match_data, &stringlist, &lengthslist);\nASSERT(rc == 0 && stringlist != NULL && lengthslist != NULL, \"pcre2_substring_list_get()\");\npcre2_substring_list_free(stringlist);\n\nstringlist = NULL;\nrc = pcre2_substring_list_get(test_match_data, &stringlist, NULL);\nASSERT(rc == 0 && stringlist != NULL, \"pcre2_substring_list_get()\");\npcre2_substring_list_free(stringlist);\n\nmallocs_until_failure = 0;\n\nstringlist = NULL;\nrc = pcre2_substring_list_get(test_match_data, &stringlist, &lengthslist);\nASSERT(rc == PCRE2_ERROR_NOMEMORY && stringlist == NULL, \"pcre2_substring_list_get()\");\n\nmallocs_until_failure = INT_MAX;\n\n/* Test after an unsuccessful match. */\n\nrc = pcre2_match(test_compiled_code, subject_abcz, PCRE2_ZERO_TERMINATED, 2,\n  0, test_match_data, NULL);\nASSERT(rc == PCRE2_ERROR_NOMATCH, \"pcre2_match()\");\n\nsizeval = 4;\nrc = pcre2_substring_copy_byname(test_match_data, name_n, copy_buf, &sizeval);\nASSERT(rc == PCRE2_ERROR_NOMATCH, \"pcre2_substring_copy_byname(no match)\");\nrc = pcre2_substring_copy_bynumber(test_match_data, 1, copy_buf, &sizeval);\nASSERT(rc == PCRE2_ERROR_NOMATCH, \"pcre2_substring_copy_bynumber(no match)\");\nrc = pcre2_substring_get_byname(test_match_data, name_n, &sptrval, &sizeval);\nASSERT(rc == PCRE2_ERROR_NOMATCH && sptrval == NULL, \"pcre2_substring_get_byname(no match)\");\nrc = pcre2_substring_get_bynumber(test_match_data, 1, &sptrval, &sizeval);\nASSERT(rc == PCRE2_ERROR_NOMATCH && sptrval == NULL, \"pcre2_substring_get_bynumber(no match)\");\n\n/* ------------- pcre2_substitute with PCRE2_SUBSTITUTE_MATCHED ------------ */\n\n/* There are some specific edge cases here that would be a pain to exercise via\nthe standard pcre2test modifiers. The documentation is clear that when you do\na match externally and pass it in with PCRE2_SUBSTITUTE_MATCHED, you must also\npass the same match options. Here we test what happens when you don't. */\n\npcre2_code_free(test_compiled_code);\ntest_compiled_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED,\n  0, &errorcode, &erroroffset, NULL);\nASSERT(test_compiled_code != NULL, \"test pattern compilation\");\n\nsubs_other_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED,\n  0, &errorcode, &erroroffset, NULL);\nASSERT(subs_other_code != NULL, \"test pattern compilation\");\n\npcre2_match_data_free(test_match_data);\ntest_match_data = pcre2_match_data_create_from_pattern(\n  test_compiled_code, NULL);\nASSERT(test_match_data != NULL, \"pcre2_match_data_create()\");\n\nmemcpy(substitute_subject, subject_abcz, sizeof(subject_abcz));\nrc = pcre2_match(test_compiled_code, substitute_subject, PCRE2_ZERO_TERMINATED,\n  0, 0, test_match_data, NULL);\nASSERT(rc == 1, \"pcre2_match()\");\n\n/* Baseline, should succeed */\nmemcpy(substitute_subject, subject_abcz, sizeof(subject_abcz));\nsizeval = sizeof(replace_buf)/sizeof(*replace_buf);\nrc = pcre2_substitute(test_compiled_code, substitute_subject,\n  PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL,\n  NULL, 0, replace_buf, &sizeval);\nASSERT(rc == 1, \"pcre2_substitute(baseline)\");\n\n/* Move the subject pointer, but keep the contents and length the same */\nmemcpy(substitute_subject+1, subject_abcz, sizeof(subject_abcz));\nsizeval = sizeof(replace_buf)/sizeof(*replace_buf);\nrc = pcre2_substitute(test_compiled_code, substitute_subject+1,\n  PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL,\n  NULL, 0, replace_buf, &sizeval);\nASSERT(rc == PCRE2_ERROR_DIFFSUBSSUBJECT, \"pcre2_substitute(moved)\");\n\n/* Keep the subject pointer the same but extend its length */\nmemcpy(substitute_subject, subject_abcz, sizeof(subject_abcz));\nsubstitute_subject[4] = CHAR_Y;\nsubstitute_subject[5] = 0;\nsizeval = sizeof(replace_buf)/sizeof(*replace_buf);\nrc = pcre2_substitute(test_compiled_code, substitute_subject,\n  PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL,\n  NULL, 0, replace_buf, &sizeval);\nASSERT(rc == PCRE2_ERROR_DIFFSUBSSUBJECT, \"pcre2_substitute(extended)\");\n\n/* Change the offset */\nmemcpy(substitute_subject, subject_abcz, sizeof(subject_abcz));\nsizeval = sizeof(replace_buf)/sizeof(*replace_buf);\nrc = pcre2_substitute(test_compiled_code, substitute_subject,\n  PCRE2_ZERO_TERMINATED, 1, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL,\n  NULL, 0, replace_buf, &sizeval);\nASSERT(rc == PCRE2_ERROR_DIFFSUBSOFFSET, \"pcre2_substitute(offset)\");\n\n/* Change the options */\nmemcpy(substitute_subject, subject_abcz, sizeof(subject_abcz));\nsizeval = sizeof(replace_buf)/sizeof(*replace_buf);\nrc = pcre2_substitute(test_compiled_code, substitute_subject,\n  PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED | PCRE2_NOTEMPTY,\n  test_match_data, NULL, NULL, 0, replace_buf, &sizeval);\nASSERT(rc == PCRE2_ERROR_DIFFSUBSOPTIONS, \"pcre2_substitute(options)\");\n\n/* Change the pattern */\nmemcpy(substitute_subject, subject_abcz, sizeof(subject_abcz));\nsizeval = sizeof(replace_buf)/sizeof(*replace_buf);\nrc = pcre2_substitute(subs_other_code, substitute_subject,\n  PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL,\n  NULL, 0, replace_buf, &sizeval);\nASSERT(rc == PCRE2_ERROR_DIFFSUBSPATTERN, \"pcre2_substitute(pattern)\");\n\n/* -------------- pcre2_serialize_decode: three goto cleanup branches -------- */\n\n{\n  pcre2_code *serialize_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED,\n    0, &errorcode, &erroroffset, NULL);\n  uint8_t *serialized_bytes = NULL;\n  PCRE2_SIZE serialized_size = 0;\n  pcre2_code *decode_codes[1] = { NULL };\n\n  ASSERT(serialize_code != NULL, \"serialize setup\");\n  rc = pcre2_serialize_encode((const pcre2_code **)&serialize_code, 1,\n    &serialized_bytes, &serialized_size, NULL);\n  pcre2_code_free(serialize_code);\n  ASSERT(rc == 1 && serialized_bytes != NULL, \"serialize setup\");\n\n  /* goto 1: blocksize <= sizeof(pcre2_real_code) */\n  {\n    size_t blocksize_offset = sizeof(pcre2_serialized_data) + TABLES_LENGTH +\n      offsetof(pcre2_real_code, blocksize);\n    uint8_t saved_blocksize[sizeof(PCRE2_SIZE)];\n    memcpy(saved_blocksize, serialized_bytes + blocksize_offset,\n      sizeof(saved_blocksize));\n    memset(serialized_bytes + blocksize_offset, 0, sizeof(PCRE2_SIZE));\n\n    rc = pcre2_serialize_decode(decode_codes, 1, serialized_bytes, NULL);\n    ASSERT(rc == PCRE2_ERROR_BADSERIALIZEDDATA &&\n      decode_codes[0] == NULL, \"pcre2_serialize_decode(bad blocksize)\");\n\n    memcpy(serialized_bytes + blocksize_offset, saved_blocksize,\n      sizeof(saved_blocksize));\n  }\n\n  /* goto 2: dst_re malloc failure */\n  mallocs_until_failure = 2;\n  {\n    pcre2_general_context *serialize_test_context =\n      pcre2_general_context_create(&my_malloc, &my_free, NULL);\n    ASSERT(serialize_test_context != NULL, \"general_context for serialize test\");\n    rc = pcre2_serialize_decode(decode_codes, 1, serialized_bytes,\n      serialize_test_context);\n    ASSERT(rc == PCRE2_ERROR_NOMEMORY && decode_codes[0] == NULL,\n      \"pcre2_serialize_decode(malloc failure)\");\n    mallocs_until_failure = INT_MAX;\n    pcre2_general_context_free(serialize_test_context);\n  }\n\n  /* goto 3: magic_number / name_entry_size / name_count validation */\n  {\n    size_t off = sizeof(pcre2_serialized_data) + TABLES_LENGTH +\n      offsetof(pcre2_real_code, magic_number);\n    uint8_t saved[4];\n    memcpy(saved, serialized_bytes + off, 4);\n    memset(serialized_bytes + off, 0, 4);\n\n    decode_codes[0] = NULL;\n    rc = pcre2_serialize_decode(decode_codes, 1, serialized_bytes, NULL);\n    memcpy(serialized_bytes + off, saved, 4);\n    ASSERT(rc == PCRE2_ERROR_BADSERIALIZEDDATA &&\n      decode_codes[0] == NULL, \"pcre2_serialize_decode(goto 3)\");\n  }\n\n  /* Regression: avoid stale dst_re double free on later iteration failure. */\n  {\n    pcre2_code *multi_codes[2];\n    pcre2_code *multi_decode_codes[2] = { NULL, NULL };\n    uint8_t *multi_serialized_bytes = NULL;\n    PCRE2_SIZE multi_serialized_size = 0;\n    CODE_BLOCKSIZE_TYPE first_blocksize;\n    size_t first_blocksize_offset = sizeof(pcre2_serialized_data) +\n      TABLES_LENGTH + offsetof(pcre2_real_code, blocksize);\n    size_t second_blocksize_offset;\n    uint8_t saved_second_blocksize[sizeof(CODE_BLOCKSIZE_TYPE)];\n\n    multi_codes[0] = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, 0,\n      &errorcode, &erroroffset, NULL);\n    multi_codes[1] = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, 0,\n      &errorcode, &erroroffset, NULL);\n    ASSERT(multi_codes[0] != NULL && multi_codes[1] != NULL,\n      \"serialize setup (multi-code compile)\");\n\n    rc = pcre2_serialize_encode((const pcre2_code **)multi_codes, 2,\n      &multi_serialized_bytes, &multi_serialized_size, NULL);\n    pcre2_code_free(multi_codes[0]);\n    pcre2_code_free(multi_codes[1]);\n    ASSERT(rc == 2 && multi_serialized_bytes != NULL,\n      \"serialize setup (multi-code encode)\");\n\n    memcpy(&first_blocksize, multi_serialized_bytes + first_blocksize_offset,\n      sizeof(first_blocksize));\n    second_blocksize_offset = sizeof(pcre2_serialized_data) + TABLES_LENGTH +\n      first_blocksize + offsetof(pcre2_real_code, blocksize);\n\n    memcpy(saved_second_blocksize,\n      multi_serialized_bytes + second_blocksize_offset,\n      sizeof(saved_second_blocksize));\n    memset(multi_serialized_bytes + second_blocksize_offset, 0,\n      sizeof(saved_second_blocksize));\n\n    rc = pcre2_serialize_decode(multi_decode_codes, 2, multi_serialized_bytes,\n      NULL);\n    memcpy(multi_serialized_bytes + second_blocksize_offset,\n      saved_second_blocksize, sizeof(saved_second_blocksize));\n    ASSERT(rc == PCRE2_ERROR_BADSERIALIZEDDATA &&\n      multi_decode_codes[0] == NULL && multi_decode_codes[1] == NULL,\n      \"pcre2_serialize_decode(regression stale dst_re)\");\n\n    pcre2_serialize_free(multi_serialized_bytes);\n  }\n\n  pcre2_serialize_free(serialized_bytes);\n}\n\n/* ------------------------------------------------------------------------- */\n\n#undef ASSERT\nEXIT:\n\nmallocs_until_failure = INT_MAX;\n\n#if PCRE2_CODE_UNIT_WIDTH == 8\npcre2_regfree(&test_preg);\n#endif\n\nif (test_compiled_code != NULL) pcre2_code_free(test_compiled_code);\n#ifdef BITOTHER\nif (bitother_code != NULL) G(pcre2_code_free_,BITOTHER)(bitother_code);\n#endif\nif (subs_other_code != NULL) pcre2_code_free(subs_other_code);\n\nif (test_match_data != NULL) pcre2_match_data_free(test_match_data);\n\nif (test_con_context_copy != NULL) pcre2_convert_context_free(test_con_context_copy);\nif (test_dat_context_copy != NULL) pcre2_match_context_free(test_dat_context_copy);\nif (test_pat_context_copy != NULL) pcre2_compile_context_free(test_pat_context_copy);\nif (test_gen_context_copy != NULL) pcre2_general_context_free(test_gen_context_copy);\nif (test_con_context != NULL) pcre2_convert_context_free(test_con_context);\nif (test_dat_context != NULL) pcre2_match_context_free(test_dat_context);\nif (test_pat_context != NULL) pcre2_compile_context_free(test_pat_context);\nif (test_gen_context != NULL) pcre2_general_context_free(test_gen_context);\n\nfree(invalid_code);\n\nif (failure != NULL)\n  {\n  cfprintf(clr_test_error, stderr, \"pcre2test: Unit test error in %s\\n\", failure);\n  exit(1);\n  }\n}\n\n#undef BITOTHER\n\n\n/* -------------------- Undo the macro definitions --------------------------*/\n\n#undef pbuffer\n#undef pbuffer_size\n\n#undef utf_to_ord\n\n#undef compiled_code\n#undef general_context\n#undef general_context_copy\n#undef pat_context\n#undef default_pat_context\n#undef con_context\n#undef default_con_context\n#undef dat_context\n#undef default_dat_context\n#undef match_data\n#undef jit_stack\n#undef jit_stack_size\n#undef patstack\n#undef patstacknext\n#undef rep_in_buffer\n#undef rep_in_buffer_size\n#undef rep_out_buffer\n#undef rep_out_buffer_size\n\n#undef jit_callback\n#undef pcre2_strcmp_c8\n#undef pcre2_strlen\n#undef pchars\n#undef ptrunc\n#undef config_str\n#undef check_modifier\n#undef decode_modifiers\n#undef pattern_info\n#undef show_memory_info\n#undef show_framesize\n#undef show_heapframes_size\n#undef print_error_message_file\n#undef print_error_message\n#undef callout_enumerate_function\n#undef callout_enumerate_function_void\n#undef callout_enumerate_function_fail\n#undef show_pattern_info\n#undef serial_error\n#undef process_command\n#undef process_pattern\n#undef have_active_pattern\n#undef free_active_pattern\n#undef check_match_limit\n#undef substitute_callout_function\n#undef substitute_case_callout_function\n#undef callout_function\n#undef copy_and_get\n#undef copy_substitute_string\n#undef process_data\n#undef init_globals\n#undef free_globals\n#undef unittest\n\n\n\n/* End of pcre2test_inc.h */\n"
  },
  {
    "path": "testdata/fuzzing/pcre2_fuzzer.dict",
    "content": "# This is attempt at a fuzzer dictionary for PCRE2.\n\n\"\\\\A\"\n\"\\\\b\"\n\"\\\\B\"\n\"\\\\d\"\n\"\\\\D\"\n\"\\\\h\"\n\"\\\\H\"\n\"\\\\n\"\n\"\\\\N\"\n\"\\\\s\"\n\"\\\\S\"\n\"\\\\w\"\n\"\\\\W\"\n\"\\\\z\"\n\"\\\\Z\"\n\n\"(?\"\n\"(?:\"\n\"(?>\"\n\"(?=\"\n\"(?!\"\n\"(?<=\"\n\"(?<!\"\n\"(?|\"\n\n\"[:alnum:]\"\n\"[:alpha:]\"\n\"[:ascii:]\"\n\"[:blank:]\"\n\"[:cntrl:]\"\n\"[:digit:]\"\n\"[:graph:]\"\n\"[:lower:]\"\n\"[:print:]\"\n\"[:punct:]\"\n\"[:space:]\"\n\"[:upper:]\"\n\"[:word:]\"\n\"[:xdigit:]\"\n\n\"(*ACCEPT)\"\n\"(*FAIL)\"\n\"(*COMMIT)\"\n\"(*PRUNE)\"\n\"(*SKIP)\"\n\"(*THEN)\"\n\n# End\n"
  },
  {
    "path": "testdata/fuzzing/pcre2_fuzzer.options",
    "content": "[libfuzzer]\ndict = pcre2_fuzzer.dict\nmax_len = 50000\n"
  },
  {
    "path": "testdata/fuzzing/pcre2_fuzzer_16.dict",
    "content": "# This is attempt at a fuzzer dictionary for PCRE2.\n\n\"\\\\\\x00A\\x00\"\n\"\\\\\\x00b\\x00\"\n\"\\\\\\x00B\\x00\"\n\"\\\\\\x00d\\x00\"\n\"\\\\\\x00D\\x00\"\n\"\\\\\\x00h\\x00\"\n\"\\\\\\x00H\\x00\"\n\"\\\\\\x00n\\x00\"\n\"\\\\\\x00N\\x00\"\n\"\\\\\\x00s\\x00\"\n\"\\\\\\x00S\\x00\"\n\"\\\\\\x00w\\x00\"\n\"\\\\\\x00W\\x00\"\n\"\\\\\\x00z\\x00\"\n\"\\\\\\x00Z\\x00\"\n\n\"(\\x00?\\x00\"\n\"(\\x00?\\x00:\\x00\"\n\"(\\x00?\\x00>\\x00\"\n\"(\\x00?\\x00=\\x00\"\n\"(\\x00?\\x00!\\x00\"\n\"(\\x00?\\x00<\\x00=\\x00\"\n\"(\\x00?\\x00<\\x00!\\x00\"\n\"(\\x00?\\x00|\\x00\"\n\n\"[\\x00:\\x00a\\x00l\\x00n\\x00u\\x00m\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00a\\x00l\\x00p\\x00h\\x00a\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00a\\x00s\\x00c\\x00i\\x00i\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00b\\x00l\\x00a\\x00n\\x00k\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00c\\x00n\\x00t\\x00r\\x00l\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00d\\x00i\\x00g\\x00i\\x00t\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00g\\x00r\\x00a\\x00p\\x00h\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00l\\x00o\\x00w\\x00e\\x00r\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00p\\x00r\\x00i\\x00n\\x00t\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00p\\x00u\\x00n\\x00c\\x00t\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00s\\x00p\\x00a\\x00c\\x00e\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00u\\x00p\\x00p\\x00e\\x00r\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00w\\x00o\\x00r\\x00d\\x00:\\x00]\\x00\"\n\"[\\x00:\\x00x\\x00d\\x00i\\x00g\\x00i\\x00t\\x00:\\x00]\\x00\"\n\n\"(\\x00*\\x00A\\x00C\\x00C\\x00E\\x00P\\x00T\\x00)\\x00\"\n\"(\\x00*\\x00F\\x00A\\x00I\\x00L\\x00)\\x00\"\n\"(\\x00*\\x00C\\x00O\\x00M\\x00M\\x00I\\x00T\\x00)\\x00\"\n\"(\\x00*\\x00P\\x00R\\x00U\\x00N\\x00E\\x00)\\x00\"\n\"(\\x00*\\x00S\\x00K\\x00I\\x00P\\x00)\\x00\"\n\"(\\x00*\\x00T\\x00H\\x00E\\x00N\\x00)\\x00\"\n\n# End\n"
  },
  {
    "path": "testdata/fuzzing/pcre2_fuzzer_16.options",
    "content": "[libfuzzer]\ndict = pcre2_fuzzer_16.dict\nmax_len = 50000\n"
  },
  {
    "path": "testdata/fuzzing/pcre2_fuzzer_32.dict",
    "content": "# This is attempt at a fuzzer dictionary for PCRE2.\n\n\"\\\\\\x00\\x00\\x00A\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00b\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00B\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00d\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00D\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00h\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00H\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00n\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00N\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00s\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00S\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00w\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00W\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00z\\x00\\x00\\x00\"\n\"\\\\\\x00\\x00\\x00Z\\x00\\x00\\x00\"\n\n\"(\\x00\\x00\\x00?\\x00\\x00\\x00\"\n\"(\\x00\\x00\\x00?\\x00\\x00\\x00:\\x00\\x00\\x00\"\n\"(\\x00\\x00\\x00?\\x00\\x00\\x00>\\x00\\x00\\x00\"\n\"(\\x00\\x00\\x00?\\x00\\x00\\x00=\\x00\\x00\\x00\"\n\"(\\x00\\x00\\x00?\\x00\\x00\\x00!\\x00\\x00\\x00\"\n\"(\\x00\\x00\\x00?\\x00\\x00\\x00<\\x00\\x00\\x00=\\x00\\x00\\x00\"\n\"(\\x00\\x00\\x00?\\x00\\x00\\x00<\\x00\\x00\\x00!\\x00\\x00\\x00\"\n\"(\\x00\\x00\\x00?\\x00\\x00\\x00|\\x00\\x00\\x00\"\n\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00a\\x00\\x00\\x00l\\x00\\x00\\x00n\\x00\\x00\\x00u\\x00\\x00\\x00m\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00a\\x00\\x00\\x00l\\x00\\x00\\x00p\\x00\\x00\\x00h\\x00\\x00\\x00a\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00a\\x00\\x00\\x00s\\x00\\x00\\x00c\\x00\\x00\\x00i\\x00\\x00\\x00i\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00b\\x00\\x00\\x00l\\x00\\x00\\x00a\\x00\\x00\\x00n\\x00\\x00\\x00k\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00c\\x00\\x00\\x00n\\x00\\x00\\x00t\\x00\\x00\\x00r\\x00\\x00\\x00l\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00d\\x00\\x00\\x00i\\x00\\x00\\x00g\\x00\\x00\\x00i\\x00\\x00\\x00t\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00g\\x00\\x00\\x00r\\x00\\x00\\x00a\\x00\\x00\\x00p\\x00\\x00\\x00h\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00l\\x00\\x00\\x00o\\x00\\x00\\x00w\\x00\\x00\\x00e\\x00\\x00\\x00r\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00p\\x00\\x00\\x00r\\x00\\x00\\x00i\\x00\\x00\\x00n\\x00\\x00\\x00t\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00p\\x00\\x00\\x00u\\x00\\x00\\x00n\\x00\\x00\\x00c\\x00\\x00\\x00t\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00s\\x00\\x00\\x00p\\x00\\x00\\x00a\\x00\\x00\\x00c\\x00\\x00\\x00e\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00u\\x00\\x00\\x00p\\x00\\x00\\x00p\\x00\\x00\\x00e\\x00\\x00\\x00r\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00w\\x00\\x00\\x00o\\x00\\x00\\x00r\\x00\\x00\\x00d\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\"[\\x00\\x00\\x00:\\x00\\x00\\x00x\\x00\\x00\\x00d\\x00\\x00\\x00i\\x00\\x00\\x00g\\x00\\x00\\x00i\\x00\\x00\\x00t\\x00\\x00\\x00:\\x00\\x00\\x00]\\x00\\x00\\x00\"\n\n\"(\\x00\\x00\\x00*\\x00\\x00\\x00A\\x00\\x00\\x00C\\x00\\x00\\x00C\\x00\\x00\\x00E\\x00\\x00\\x00P\\x00\\x00\\x00T\\x00\\x00\\x00)\\x00\\x00\\x00\"\n\"(\\x00\\x00\\x00*\\x00\\x00\\x00F\\x00\\x00\\x00A\\x00\\x00\\x00I\\x00\\x00\\x00L\\x00\\x00\\x00)\\x00\\x00\\x00\"\n\"(\\x00\\x00\\x00*\\x00\\x00\\x00C\\x00\\x00\\x00O\\x00\\x00\\x00M\\x00\\x00\\x00M\\x00\\x00\\x00I\\x00\\x00\\x00T\\x00\\x00\\x00)\\x00\\x00\\x00\"\n\"(\\x00\\x00\\x00*\\x00\\x00\\x00P\\x00\\x00\\x00R\\x00\\x00\\x00U\\x00\\x00\\x00N\\x00\\x00\\x00E\\x00\\x00\\x00)\\x00\\x00\\x00\"\n\"(\\x00\\x00\\x00*\\x00\\x00\\x00S\\x00\\x00\\x00K\\x00\\x00\\x00I\\x00\\x00\\x00P\\x00\\x00\\x00)\\x00\\x00\\x00\"\n\"(\\x00\\x00\\x00*\\x00\\x00\\x00T\\x00\\x00\\x00H\\x00\\x00\\x00E\\x00\\x00\\x00N\\x00\\x00\\x00)\\x00\\x00\\x00\"\n\n# End\n"
  },
  {
    "path": "testdata/fuzzing/pcre2_fuzzer_32.options",
    "content": "[libfuzzer]\ndict = pcre2_fuzzer_32.dict\nmax_len = 50000\n"
  },
  {
    "path": "testdata/grepfilelist",
    "content": "testdata/grepinputv\n\ntestdata/grepinputx\n"
  },
  {
    "path": "testdata/grepinput",
    "content": "This is a file of miscellaneous text that is used as test data for checking\nthat the pcregrep command is working correctly. The file must be more than\n24KiB long so that it needs more than a single read() call to process it. New\nfeatures should be added at the end, because some of the tests involve the\noutput of line numbers, and we don't want these to change.\n\nPATTERN at the start of a line.\nIn the middle of a line, PATTERN appears.\n\nThis pattern is in lower case.\n\nHere follows a whole lot of stuff that makes the file over 24KiB long.\n\n-------------------------------------------------------------------------------\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\njumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick\nbrown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n-------------------------------------------------------------------------------\n\naaaaa0\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nbbbbbb\ncccccccccccccccccccccccccccccccccccccccccc\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\neeeee\naaaaa2\nffffffffff\n\nThis is a line before the binary zero.\nThis line contains a binary zero here >\u0000< for testing.\nThis is a line after the binary zero.\n\nABOVE the elephant \nABOVE\nABOVE theatre\nAB.VE\nAB.VE the turtle\n\n010203040506\n\nmatch 1:\n a\nmatch 2:\n b\nmatch 3:\n c\nmatch 4:\n d\nmatch 5:\n e\nRhubarb\nCustard Tart\n\nzxc\ncvb\nbnm\nasd\nqwe\nert\ntyu\nuio\nggg\nasd\ndfg\nghj\njkl\nabx\ndef\nghi\nxyz\n\n\nPUT NEW DATA ABOVE THIS LINE.\n=============================\n\nCheck up on PATTERN near the end.\nThis is the last line of this file.\n"
  },
  {
    "path": "testdata/grepinput3",
    "content": "triple:\tt1_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\ntriple:\tt2_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\t\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\ntriple:\tt3_txt\ts2_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\ntriple:\tt4_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\ntriple:\tt5_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\t\no_txt\n\ntriple:\tt6_txt\ts2_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\ntriple:\tt7_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n"
  },
  {
    "path": "testdata/grepinput8",
    "content": "X one\nX two\u000bX three\fX four\rX five\r\nX six\nX sevenX eight X nine X ten\n\nBefore 111\nBefore 222 Before 333Match\r\nAfter 111\nAfter 222 After 333\nAnd so on and so on\nAnd so on and so on\nſ\nſſſſſ\nÁabcÁ KkK\n\nA１\nA1\n"
  },
  {
    "path": "testdata/grepinputBad8",
    "content": "AကCD Z\n"
  },
  {
    "path": "testdata/grepinputBad8_Trail",
    "content": "abc"
  },
  {
    "path": "testdata/grepinputM",
    "content": "Data file for multiline tests of multiple matches.\n\nstart end in between start\nend and following\nOther stuff\n\nstart end in between start\nend and following start\nend other stuff\n\nstart end in between start\n\nend\n\n** These two lines must be last.\nstart end in between start\nend\n"
  },
  {
    "path": "testdata/grepinputUN",
    "content": "abcሴdef\nxyz"
  },
  {
    "path": "testdata/grepinputv",
    "content": "The quick brown\nfox jumps\nover the lazy dog.\nThis time it jumps and jumps and jumps.\nThis line contains \\E and (regex) *meta* [characters].\nThe word is cat in this line\nThe caterpillar sat on the mat\nThe snowcat is not an animal\nA buried feline in the syndicate\ntrailing spaces \n"
  },
  {
    "path": "testdata/grepinputx",
    "content": "This is a second file of input for the pcre2grep tests.\n\nHere is the pattern again.\n\nPattern\nThat time it was on a line by itself.\n\nTo pat or not to pat, that is the question.\n\ncomplete pair\nof lines\n\nThat was a complete pair\nof lines all by themselves.\n\ncomplete pair\nof lines\n\nAnd there they were again, to check line numbers.\n\none\ntwo\nthree\nfour\nfive\nsix\nseven\neight\nnine\nten\neleven\ntwelve\nthirteen\nfourteen\nfifteen\nsixteen\nseventeen\neighteen\nnineteen\ntwenty\n\nThis line contains pattern not on a line by itself.\nThis is the last line of this file.\n"
  },
  {
    "path": "testdata/greplist",
    "content": "This is a file of patterns for testing the -f option. Don't include any blank\nlines because they will match everything! This is no longer true, so have one.\n\npattern\nline by itself\n\nEnd of the list of patterns.\n"
  },
  {
    "path": "testdata/greplistBad",
    "content": "This is a file of bad patterns for testing the -f option.\n?Should(not compile\n"
  },
  {
    "path": "testdata/grepnot.bz2",
    "content": "This is a second file of input for the pcre2grep tests.\n\nHere is the pattern again.\n\nPattern\nThat time it was on a line by itself.\n\nTo pat or not to pat, that is the question.\n\ncomplete pair\nof lines\n\nThat was a complete pair\nof lines all by themselves.\n\ncomplete pair\nof lines\n\nAnd there they were again, to check line numbers.\n\none\ntwo\nthree\nfour\nfive\nsix\nseven\neight\nnine\nten\neleven\ntwelve\nthirteen\nfourteen\nfifteen\nsixteen\nseventeen\neighteen\nnineteen\ntwenty\n\nThis line contains pattern not on a line by itself.\nThis is the last line of this file.\n"
  },
  {
    "path": "testdata/grepoutput",
    "content": "---------------------------- Test 1 ------------------------------\nPATTERN at the start of a line.\nIn the middle of a line, PATTERN appears.\nCheck up on PATTERN near the end.\nRC=0\n---------------------------- Test 2 ------------------------------\nPATTERN at the start of a line.\nRC=0\n---------------------------- Test 3 ------------------------------\n7:PATTERN at the start of a line.\n8:In the middle of a line, PATTERN appears.\n10:This pattern is in lower case.\n642:Check up on PATTERN near the end.\nRC=0\n---------------------------- Test 4 ------------------------------\n4\nRC=0\n---------------------------- Test 5 ------------------------------\n./testdata/grepinput:7:PATTERN at the start of a line.\n./testdata/grepinput:8:In the middle of a line, PATTERN appears.\n./testdata/grepinput:10:This pattern is in lower case.\n./testdata/grepinput:642:Check up on PATTERN near the end.\n./testdata/grepinputx:3:Here is the pattern again.\n./testdata/grepinputx:5:Pattern\n./testdata/grepinputx:42:This line contains pattern not on a line by itself.\nRC=0\n---------------------------- Test 6 ------------------------------\n7:PATTERN at the start of a line.\n8:In the middle of a line, PATTERN appears.\n10:This pattern is in lower case.\n642:Check up on PATTERN near the end.\n3:Here is the pattern again.\n5:Pattern\n42:This line contains pattern not on a line by itself.\nRC=0\n---------------------------- Test 7 ------------------------------\n./testdata/grepinput\n./testdata/grepinputx\nRC=0\n---------------------------- Test 8 ------------------------------\n./testdata/grepinput\nRC=0\n---------------------------- Test 9 ------------------------------\nRC=0\n---------------------------- Test 10 -----------------------------\nRC=1\n---------------------------- Test 11 -----------------------------\n1:This is a second file of input for the pcre2grep tests.\n2:\n4:\n5:Pattern\n6:That time it was on a line by itself.\n7:\n8:To pat or not to pat, that is the question.\n9:\n10:complete pair\n11:of lines\n12:\n13:That was a complete pair\n14:of lines all by themselves.\n15:\n16:complete pair\n17:of lines\n18:\n19:And there they were again, to check line numbers.\n20:\n21:one\n22:two\n23:three\n24:four\n25:five\n26:six\n27:seven\n28:eight\n29:nine\n30:ten\n31:eleven\n32:twelve\n33:thirteen\n34:fourteen\n35:fifteen\n36:sixteen\n37:seventeen\n38:eighteen\n39:nineteen\n40:twenty\n41:\n43:This is the last line of this file.\nRC=0\n---------------------------- Test 12 -----------------------------\nPattern\nRC=0\n---------------------------- Test 13 -----------------------------\nHere is the pattern again.\nThat time it was on a line by itself.\nseventeen\nThis line contains pattern not on a line by itself.\nRC=0\n---------------------------- Test 14 -----------------------------\n./testdata/grepinputx:To pat or not to pat, that is the question.\nRC=0\n---------------------------- Test 15 -----------------------------\npcre2grep: Error in command-line regex at offset 5: quantifier does not follow a repeatable item\nRC=2\n---------------------------- Test 16 -----------------------------\npcre2grep: Failed to open ./testdata/nonexistfile: No such file or directory\nRC=2\n---------------------------- Test 17 -----------------------------\nfeatures should be added at the end, because some of the tests involve the\noutput of line numbers, and we don't want these to change.\nRC=0\n---------------------------- Test 18 -----------------------------\n4:features should be added at the end, because some of the tests involve the\noutput of line numbers, and we don't want these to change.\n583:brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n-------------------------------------------------------------------------------\nRC=0\n---------------------------- Test 19 -----------------------------\nPattern\nRC=0\n---------------------------- Test 20 -----------------------------\n10:complete pair\nof lines\n16:complete pair\nof lines\nRC=0\n---------------------------- Test 21 -----------------------------\n24:four\n25-five\n26-six\n27-seven\n--\n34:fourteen\n35-fifteen\n36-sixteen\n37-seventeen\nRC=0\n---------------------------- Test 22 -----------------------------\n21-one\n22-two\n23-three\n24:four\n--\n31-eleven\n32-twelve\n33-thirteen\n34:fourteen\nRC=0\n---------------------------- Test 23 -----------------------------\none\ntwo\nthree\nfour\nfive\nsix\nseven\n--\neleven\ntwelve\nthirteen\nfourteen\nfifteen\nsixteen\nseventeen\nRC=0\n---------------------------- Test 24 -----------------------------\nfour\nfive\nsix\nseven\neight\nnine\nten\neleven\ntwelve\nthirteen\nfourteen\nfifteen\nsixteen\nseventeen\neighteen\nnineteen\ntwenty\n\nThis line contains pattern not on a line by itself.\nThis is the last line of this file.\nRC=0\n---------------------------- Test 25 -----------------------------\n15-\n16-complete pair\n17-of lines\n18-\n19-And there they were again, to check line numbers.\n20-\n21-one\n22-two\n23-three\n24:four\n25-five\n26-six\n27-seven\n28-eight\n29-nine\n30-ten\n31-eleven\n32-twelve\n33-thirteen\n34:fourteen\nRC=0\n---------------------------- Test 26 -----------------------------\n\ncomplete pair\nof lines\n\nAnd there they were again, to check line numbers.\n\none\ntwo\nthree\nfour\nfive\nsix\nseven\neight\nnine\nten\neleven\ntwelve\nthirteen\nfourteen\nfifteen\nsixteen\nseventeen\neighteen\nnineteen\ntwenty\n\nThis line contains pattern not on a line by itself.\nThis is the last line of this file.\nRC=0\n---------------------------- Test 27 -----------------------------\nfour\nfive\nsix\nseven\neight\nnine\nten\neleven\ntwelve\nthirteen\nfourteen\nfifteen\nsixteen\nseventeen\neighteen\nnineteen\ntwenty\n\nThis line contains pattern not on a line by itself.\nThis is the last line of this file.\nRC=0\n---------------------------- Test 28 -----------------------------\n14-of lines all by themselves.\n15-\n16-complete pair\n17-of lines\n18-\n19-And there they were again, to check line numbers.\n20-\n21-one\n22-two\n23-three\n24:four\n25-five\n26-six\n27-seven\n28-eight\n29-nine\n30-ten\n31-eleven\n32-twelve\n33-thirteen\n34:fourteen\nRC=0\n---------------------------- Test 29 -----------------------------\nof lines all by themselves.\n\ncomplete pair\nof lines\n\nAnd there they were again, to check line numbers.\n\none\ntwo\nthree\nfour\nfive\nsix\nseven\neight\nnine\nten\neleven\ntwelve\nthirteen\nfourteen\nfifteen\nsixteen\nseventeen\neighteen\nnineteen\ntwenty\n\nThis line contains pattern not on a line by itself.\nThis is the last line of this file.\nRC=0\n---------------------------- Test 30 -----------------------------\n./testdata/grepinput-4-features should be added at the end, because some of the tests involve the\n./testdata/grepinput-5-output of line numbers, and we don't want these to change.\n./testdata/grepinput-6-\n./testdata/grepinput:7:PATTERN at the start of a line.\n./testdata/grepinput:8:In the middle of a line, PATTERN appears.\n./testdata/grepinput-9-\n./testdata/grepinput:10:This pattern is in lower case.\n--\n./testdata/grepinput-639-PUT NEW DATA ABOVE THIS LINE.\n./testdata/grepinput-640-=============================\n./testdata/grepinput-641-\n./testdata/grepinput:642:Check up on PATTERN near the end.\n--\n./testdata/grepinputx-1-This is a second file of input for the pcre2grep tests.\n./testdata/grepinputx-2-\n./testdata/grepinputx:3:Here is the pattern again.\n./testdata/grepinputx-4-\n./testdata/grepinputx:5:Pattern\n--\n./testdata/grepinputx-39-nineteen\n./testdata/grepinputx-40-twenty\n./testdata/grepinputx-41-\n./testdata/grepinputx:42:This line contains pattern not on a line by itself.\nRC=0\n---------------------------- Test 31 -----------------------------\n./testdata/grepinput:7:PATTERN at the start of a line.\n./testdata/grepinput:8:In the middle of a line, PATTERN appears.\n./testdata/grepinput-9-\n./testdata/grepinput:10:This pattern is in lower case.\n./testdata/grepinput-11-\n./testdata/grepinput-12-Here follows a whole lot of stuff that makes the file over 24KiB long.\n./testdata/grepinput-13-\n--\n./testdata/grepinput:642:Check up on PATTERN near the end.\n./testdata/grepinput-643-This is the last line of this file.\n--\n./testdata/grepinputx:3:Here is the pattern again.\n./testdata/grepinputx-4-\n./testdata/grepinputx:5:Pattern\n./testdata/grepinputx-6-That time it was on a line by itself.\n./testdata/grepinputx-7-\n./testdata/grepinputx-8-To pat or not to pat, that is the question.\n--\n./testdata/grepinputx:42:This line contains pattern not on a line by itself.\n./testdata/grepinputx-43-This is the last line of this file.\nRC=0\n---------------------------- Test 32 -----------------------------\n./testdata/grepinputx\nRC=0\n---------------------------- Test 33 -----------------------------\npcre2grep: Failed to open ./testdata/grepnonexist: No such file or directory\nRC=2\n---------------------------- Test 34 -----------------------------\nRC=2\n---------------------------- Test 35 -----------------------------\n./testdata/grepinput8\n./testdata/grepinputx\nRC=0\n---------------------------- Test 36 -----------------------------\n./testdata/grepinput3\n./testdata/grepinputx\nRC=0\n---------------------------- Test 37 -----------------------------\n24KiB long so that it needs more than a single read() call to process it. New\naaaaa0\naaaaa2\n010203040506\nRC=0\n======== STDERR ========\npcre2grep: pcre2_match() gave error -47 while matching this text:\n\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\npcre2grep: pcre2_match() gave error -47 while matching this text:\n\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\npcre2grep: Error -46, -47, -53 or -63 means that a resource limit was exceeded.\npcre2grep: Check your regex for nested unlimited loops.\n---------------------------- Test 38 ------------------------------\nThis line contains a binary zero here >\u0000< for testing.\nRC=0\n---------------------------- Test 39 ------------------------------\nThis is a line before the binary zero.\nThis line contains a binary zero here >\u0000< for testing.\nRC=0\n---------------------------- Test 40 ------------------------------\nThis line contains a binary zero here >\u0000< for testing.\nThis is a line after the binary zero.\nRC=0\n---------------------------- Test 41 ------------------------------\nbefore the binary zero\nafter the binary zero\nRC=0\n---------------------------- Test 42 ------------------------------\n./testdata/grepinput:595:before the binary zero\n./testdata/grepinput:597:after the binary zero\nRC=0\n---------------------------- Test 43 ------------------------------\n595:before\n595:zero\n596:zero\n597:after\n597:zero\nRC=0\n---------------------------- Test 44 ------------------------------\n595:before\n595:zero\n596:zero\n597:after\n597:zero\nRC=0\n---------------------------- Test 45 ------------------------------\n10:pattern\n595:binary\n596:binary\n597:binary\nRC=0\n---------------------------- Test 46 ------------------------------\npcre2grep: Error in 1st command-line regex at offset 9: unmatched closing parenthesis\nRC=2\npcre2grep: Error in 2nd command-line regex at offset 9: missing closing parenthesis\nRC=2\npcre2grep: Error in 3rd command-line regex at offset 9: missing terminating ] for character class\nRC=2\npcre2grep: Error in 4th command-line regex at offset 9: missing terminating ] for character class\nRC=2\n---------------------------- Test 47 ------------------------------\nAB.VE\nRC=0\n---------------------------- Test 48 ------------------------------\nABOVE the elephant \nAB.VE\nAB.VE the turtle\nRC=0\n---------------------------- Test 49 ------------------------------\nABOVE the elephant \nAB.VE\nAB.VE the turtle\nPUT NEW DATA ABOVE THIS LINE.\nRC=0\n---------------------------- Test 50 ------------------------------\nRC=1\n---------------------------- Test 51 ------------------------------\nover the lazy dog.\nThis time it jumps and jumps and jumps.\nThis line contains \\E and (regex) *meta* [characters].\nThe word is cat in this line\nThe caterpillar sat on the mat\nThe snowcat is not an animal\nA buried feline in the syndicate\ntrailing spaces \nRC=0\n---------------------------- Test 52 ------------------------------\nfox \u001b[1;31mjumps\u001b[0m\nThis time it \u001b[1;31mjumps\u001b[0m and \u001b[1;31mjumps\u001b[0m and \u001b[1;31mjumps\u001b[0m.\nRC=0\n---------------------------- Test 53 ------------------------------\n36976,6\n36994,4\n37028,4\n37070,5\n37087,4\nRC=0\n---------------------------- Test 54 ------------------------------\n595:15,6\n595:33,4\n596:28,4\n597:15,5\n597:32,4\nRC=0\n---------------------------- Test 55 -----------------------------\nHere is the \u001b[1;31mpattern\u001b[0m again.\nThat time it was on a \u001b[1;31mline by itself\u001b[0m.\nThis line contains \u001b[1;31mpattern\u001b[0m not on a \u001b[1;31mline by itself\u001b[0m.\nRC=0\n---------------------------- Test 56 -----------------------------\n./testdata/grepinput:456\n./testdata/grepinput3:0\n./testdata/grepinput8:0\n./testdata/grepinputBad8:0\n./testdata/grepinputBad8_Trail:0\n./testdata/grepinputM:0\n./testdata/grepinputUN:0\n./testdata/grepinputv:1\n./testdata/grepinputx:0\nRC=0\n---------------------------- Test 57 -----------------------------\n./testdata/grepinput:456\n./testdata/grepinputv:1\nRC=0\n---------------------------- Test 58 -----------------------------\nPATTERN at the start of a line.\nIn the middle of a line, PATTERN appears.\nCheck up on PATTERN near the end.\nRC=0\n---------------------------- Test 59 -----------------------------\nPATTERN at the start of a line.\nIn the middle of a line, PATTERN appears.\nCheck up on PATTERN near the end.\nRC=0\n---------------------------- Test 60 -----------------------------\nPATTERN at the start of a line.\nIn the middle of a line, PATTERN appears.\nCheck up on PATTERN near the end.\nRC=0\n---------------------------- Test 61 -----------------------------\nPATTERN at the start of a line.\nIn the middle of a line, PATTERN appears.\nCheck up on PATTERN near the end.\nRC=0\n---------------------------- Test 62 -----------------------------\npcre2grep: pcre2_match() gave error -47 while matching text that starts:\n\nThis is a file of miscellaneous text that is used as test data for checking\nthat the pcregrep command is working correctly. The file must be more than\n24KiB long so that it needs more than a single re\n\npcre2grep: Error -46, -47, -53 or -63 means that a resource limit was exceeded.\npcre2grep: Check your regex for nested unlimited loops.\nRC=1\n---------------------------- Test 63 -----------------------------\npcre2grep: pcre2_match() gave error -53 while matching text that starts:\n\nThis is a file of miscellaneous text that is used as test data for checking\nthat the pcregrep command is working correctly. The file must be more than\n24KiB long so that it needs more than a single re\n\npcre2grep: Error -46, -47, -53 or -63 means that a resource limit was exceeded.\npcre2grep: Check your regex for nested unlimited loops.\nRC=1\n---------------------------- Test 64 ------------------------------\nappears\nRC=0\n---------------------------- Test 65 ------------------------------\npear\nRC=0\n---------------------------- Test 66 ------------------------------\nRC=0\n---------------------------- Test 67 ------------------------------\nRC=0\n---------------------------- Test 68 ------------------------------\npear\nRC=0\n---------------------------- Test 69 -----------------------------\n1:This is a second file of input for the pcre2grep tests.\n2:\n4:\n5:Pattern\n6:That time it was on a line by itself.\n7:\n8:To pat or not to pat, that is the question.\n9:\n10:complete pair\n11:of lines\n12:\n13:That was a complete pair\n14:of lines all by themselves.\n15:\n16:complete pair\n17:of lines\n18:\n19:And there they were again, to check line numbers.\n20:\n21:one\n22:two\n23:three\n24:four\n25:five\n26:six\n27:seven\n28:eight\n29:nine\n30:ten\n31:eleven\n32:twelve\n33:thirteen\n34:fourteen\n35:fifteen\n36:sixteen\n37:seventeen\n38:eighteen\n39:nineteen\n40:twenty\n41:\n43:This is the last line of this file.\nRC=0\n---------------------------- Test 70 -----------------------------\n\u001b[1;31mtriple:\tt1_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\n\u001b[0m\u001b[1;31mtriple:\tt3_txt\ts2_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\n\u001b[0m\u001b[1;31mtriple:\tt4_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\n\u001b[0m\u001b[1;31mtriple:\tt6_txt\ts2_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\n\u001b[0mRC=0\n1:\u001b[1;31mtriple:\tt1_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\n\u001b[0m6:\u001b[1;31mtriple:\tt3_txt\ts2_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\n\u001b[0m8:\u001b[1;31mtriple:\tt4_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\n\u001b[0m13:\u001b[1;31mtriple:\tt6_txt\ts2_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\n\u001b[0mRC=0\ntriple:\tt1_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\ntriple:\tt3_txt\ts2_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\ntriple:\tt4_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\ntriple:\tt6_txt\ts2_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\nRC=0\n1:triple:\tt1_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\n6:triple:\tt3_txt\ts2_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\n8:triple:\tt4_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\n13:triple:\tt6_txt\ts2_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\nRC=0\n---------------------------- Test 71 -----------------------------\n01\nRC=0\n---------------------------- Test 72 -----------------------------\n\u001b[1;31m01\u001b[0m0203040506\nRC=0\n---------------------------- Test 73 -----------------------------\n\u001b[1;31m01\u001b[0m\nRC=0\n---------------------------- Test 74 -----------------------------\n01\n02\nRC=0\n---------------------------- Test 75 -----------------------------\n\u001b[1;31m01\u001b[0m\u001b[1;31m02\u001b[0m03040506\nRC=0\n---------------------------- Test 76 -----------------------------\n\u001b[1;31m01\u001b[0m\n\u001b[1;31m02\u001b[0m\nRC=0\n---------------------------- Test 77 -----------------------------\n01\n03\nRC=0\n---------------------------- Test 78 -----------------------------\n\u001b[1;31m01\u001b[0m02\u001b[1;31m03\u001b[0m040506\nRC=0\n---------------------------- Test 79 -----------------------------\n\u001b[1;31m01\u001b[0m\n\u001b[1;31m03\u001b[0m\nRC=0\n---------------------------- Test 80 -----------------------------\n01\nRC=0\n---------------------------- Test 81 -----------------------------\n\u001b[1;31m01\u001b[0m0203040506\nRC=0\n---------------------------- Test 82 -----------------------------\n\u001b[1;31m01\u001b[0m\nRC=0\n---------------------------- Test 83 -----------------------------\npcre2grep: line 4 of file ./testdata/grepinput3 is too long for the internal buffer\npcre2grep: the maximum buffer size is 100\npcre2grep: use the --max-buffer-size option to change it\nRC=2\n---------------------------- Test 84 -----------------------------\ntestdata/grepinputv:fox jumps\ntestdata/grepinputx:complete pair\ntestdata/grepinputx:That was a complete pair\ntestdata/grepinputx:complete pair\ntestdata/grepinput3:triple:\tt7_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\nRC=0\n---------------------------- Test 85 -----------------------------\n./testdata/grepinput3:Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\nRC=0\n---------------------------- Test 86 -----------------------------\nBinary file ./testdata/grepbinary matches\nRC=0\n---------------------------- Test 87 -----------------------------\nRC=1\n---------------------------- Test 88 -----------------------------\nBinary file ./testdata/grepbinary matches\nRC=0\n---------------------------- Test 89 -----------------------------\nRC=1\n---------------------------- Test 90 -----------------------------\nRC=1\n---------------------------- Test 91 -----------------------------\nThe quick brown f\u0000x jumps over the lazy dog.\nRC=0\n---------------------------- Test 92 -----------------------------\nThe quick brown f\u0000x jumps over the lazy dog.\nRC=0\n---------------------------- Test 93 -----------------------------\nThe quick brown f\u0000x jumps over the lazy dog.\nRC=0\n---------------------------- Test 94 -----------------------------\n./testdata/grepinput8\n./testdata/grepinputx\nRC=0\n---------------------------- Test 95 -----------------------------\ntestdata/grepinputx:complete pair\ntestdata/grepinputx:That was a complete pair\ntestdata/grepinputx:complete pair\nRC=0\n---------------------------- Test 96 -----------------------------\n./testdata/grepinput3\n./testdata/grepinput8\n./testdata/grepinputBad8\n./testdata/grepinputBad8_Trail\n./testdata/grepinputx\nRC=0\n---------------------------- Test 97 -----------------------------\n./testdata/grepinput3\n./testdata/grepinputx\nRC=0\n---------------------------- Test 98 -----------------------------\n./testdata/grepinputx\nRC=0\n---------------------------- Test 99 -----------------------------\n./testdata/grepinput3\n./testdata/grepinputx\nRC=0\n---------------------------- Test 100 ------------------------------\n./testdata/grepinput:zerothe.\n./testdata/grepinput:zeroa\n./testdata/grepinput:zerothe.\nRC=0\n---------------------------- Test 101 ------------------------------\n./testdata/grepinput:\u001b[1;31m.\u001b[0m|\u001b[1;31mzero\u001b[0m|\u001b[1;31mthe\u001b[0m|\u001b[1;31m.\u001b[0m\n./testdata/grepinput:\u001b[1;31mzero\u001b[0m|\u001b[1;31ma\u001b[0m\n./testdata/grepinput:\u001b[1;31m.\u001b[0m|\u001b[1;31mzero\u001b[0m|\u001b[1;31mthe\u001b[0m|\u001b[1;31m.\u001b[0m\nRC=0\n---------------------------- Test 102 -----------------------------\n2:\n5:\n7:\n9:\n12:\n14:\nRC=0\n---------------------------- Test 103 -----------------------------\nRC=0\n---------------------------- Test 104 -----------------------------\n2:\n5:\n7:\n9:\n12:\n14:\nRC=0\n---------------------------- Test 105 -----------------------------\ntriple:\tt1_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\ntriple:\tt2_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\t\nLorem \u001b[1;31mipsum\u001b[0m dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\ntriple:\tt3_txt\ts2_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\ntriple:\tt4_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\ntriple:\tt5_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\t\no_txt\n\ntriple:\tt6_txt\ts2_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\n\ntriple:\tt7_txt\ts1_tag\ts_txt\tp_tag\tp_txt\to_tag\to_txt\nRC=0\n---------------------------- Test 106 -----------------------------\na\nRC=0\n---------------------------- Test 107 -----------------------------\n1:0,1\n2:0,1\n2:1,1\n2:2,1\n2:3,1\n2:4,1\nRC=0\n---------------------------- Test 108 ------------------------------\nRC=0\n---------------------------- Test 109 -----------------------------\nRC=0\n---------------------------- Test 110 -----------------------------\nmatch 1:\n a\n/1/a\nmatch 2:\n b\n/2/b\nmatch 3:\n c\n/3/c\nmatch 4:\n d\n/4/d\nmatch 5:\n e\n/5/e\nRC=0\n---------------------------- Test 111 -----------------------------\n607:0,12\n609:0,12\n611:0,12\n613:0,12\n615:0,12\nRC=0\n---------------------------- Test 112 -----------------------------\n37172,12\n37184,12\n37196,12\n37208,12\n37220,12\nRC=0\n---------------------------- Test 113 -----------------------------\n480\nRC=0\n---------------------------- Test 114 -----------------------------\ntestdata/grepinput:469\ntestdata/grepinput3:0\ntestdata/grepinput8:0\ntestdata/grepinputBad8:0\ntestdata/grepinputBad8_Trail:0\ntestdata/grepinputM:2\ntestdata/grepinputUN:0\ntestdata/grepinputv:3\ntestdata/grepinputx:6\nTOTAL:480\nRC=0\n---------------------------- Test 115 -----------------------------\ntestdata/grepinput:469\ntestdata/grepinputM:2\ntestdata/grepinputv:3\ntestdata/grepinputx:6\nTOTAL:480\nRC=0\n---------------------------- Test 116 -----------------------------\n478\nRC=0\n---------------------------- Test 117 -----------------------------\n469\n0\n0\n0\n0\n2\n0\n3\n6\n480\nRC=0\n---------------------------- Test 118 -----------------------------\ntestdata/grepinput3\ntestdata/grepinput8\ntestdata/grepinputBad8\ntestdata/grepinputBad8_Trail\ntestdata/grepinputUN\nRC=0\n---------------------------- Test 119 -----------------------------\n123\n456\n789\n---\nabc\ndef\nxyz\n---\nRC=0\n---------------------------- Test 120 ------------------------------\n./testdata/grepinput:the binary zero.:zerothe.\n./testdata/grepinput:a binary zero:zeroa\n./testdata/grepinput:the binary zero.:zerothe.\nRC=0\n./testdata/grepinput:the binary zero.:zerothe.\n./testdata/grepinput:a binary zero:zeroa\n./testdata/grepinput:the binary zero.:zerothe.\nRC=0\nthe binary zero.:\u0007\b\u001b\f\r\t\u000b\nRC=0\npcre2grep: Error in output text at offset 2: decimal number expected\nRC=2\npcre2grep: Error in output text at offset 3: no character after $\nRC=2\npcre2grep: Error in output text at offset 8: too many hex digits\nRC=2\npcre2grep: Error in output text at offset 5: missing closing brace\nRC=2\npcre2grep: Error in output text at offset 7: code point greater than 0xff is invalid\nRC=2\n---------------------------- Test 121 -----------------------------\nThis line contains \\E and (regex) *meta* [characters].\nRC=0\n---------------------------- Test 122 -----------------------------\nover the lazy dog.\nThe word is cat in this line\nRC=0\n---------------------------- Test 123 -----------------------------\nover the lazy dog.\nThe word is cat in this line\nRC=0\n---------------------------- Test 124 -----------------------------\n3:\u001b[1;31mstart end\u001b[0m in between \u001b[1;31mstart\nend\u001b[0m and following\n7:\u001b[1;31mstart end\u001b[0m in between \u001b[1;31mstart\nend\u001b[0m and following \u001b[1;31mstart\nend\u001b[0m other stuff\n11:\u001b[1;31mstart end\u001b[0m in between \u001b[1;31mstart\n\nend\u001b[0m\n16:\u001b[1;31mstart end\u001b[0m in between \u001b[1;31mstart\nend\u001b[0m\nRC=0\n3:\u001b[1;31mstart end\u001b[0m in between \u001b[1;31mstart\nend\u001b[0m and following\n5-Other stuff\n6-\n7:\u001b[1;31mstart end\u001b[0m in between \u001b[1;31mstart\nend\u001b[0m and following \u001b[1;31mstart\nend\u001b[0m other stuff\n10-\n11:\u001b[1;31mstart end\u001b[0m in between \u001b[1;31mstart\n\nend\u001b[0m\n14-\n15-** These two lines must be last.\n16:\u001b[1;31mstart end\u001b[0m in between \u001b[1;31mstart\nend\u001b[0m\nRC=0\n3:start end in between start\nend and following\n7:start end in between start\nend and following start\nend other stuff\n11:start end in between start\n\nend\n16:start end in between start\nend\nRC=0\n3:start end in between start\nend and following\n5-Other stuff\n6-\n7:start end in between start\nend and following start\nend other stuff\n10-\n11:start end in between start\n\nend\n14-\n15-** These two lines must be last.\n16:start end in between start\nend\nRC=0\n---------------------------- Test 125 -----------------------------\n\u001b[1;31ma\u001b[0m\u001b[1;31mb\u001b[0m\u001b[1;31mc\u001b[0m\u001b[1;31md\u001b[0m\nRC=0\n\u001b[1;31ma\u001b[0m\u001b[1;31mb\u001b[0m\u001b[1;31mc\u001b[0m\u001b[1;31md\u001b[0m\nRC=0\n\u001b[1;31ma\u001b[0mb\u001b[1;31mc\u001b[0md\nRC=0\n\u001b[1;31ma\u001b[0mb\u001b[1;31mc\u001b[0md\nRC=0\n\u001b[1;20ma\u001b[0mb\u001b[1;20mc\u001b[0md\nRC=0\n---------------------------- Test 126 -----------------------------\nABC\u0000XYZ\nRC=0\npcre2grep: Error in regex in line 2 of testtemp1grep at offset 5: unmatched closing parenthesis\nRC=2\n---------------------------- Test 127 -----------------------------\npattern\nRC=0\n---------------------------- Test 128 -----------------------------\npcre2grep: Requested group 1 cannot be captured.\npcre2grep: Use --om-capture to increase the size of the capture vector.\nRC=2\n---------------------------- Test 129 -----------------------------\nThe quick brown fox jumps over the lazy dog. The quick brown fox jumps over the\nlazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox\nRC=0\n---------------------------- Test 130 -----------------------------\nfox\nfox\nfox\nfox\nRC=0\n---------------------------- Test 131 -----------------------------\n2\nRC=0\n---------------------------- Test 132 -----------------------------\nmatch 1:\n a\nmatch 2:\n b\n---\n a\nRC=0\n---------------------------- Test 133 -----------------------------\nmatch 1:\n a\nmatch 2:\n b\n---\nmatch 2:\n b\nmatch 3:\n c\nRC=0\n---------------------------- Test 134 -----------------------------\n(standard input):2:=AB3CD5=\nRC=0\n---------------------------- Test 135 -----------------------------\n./testdata/grepinputv@The word is cat in this line\nRC=0\n./testdata/grepinputv@./testdata/grepinputv@RC=0\n./testdata/grepinputv@This line contains \\E and (regex) *meta* [characters].\n./testdata/grepinputv@The word is cat in this line\n./testdata/grepinputv@The caterpillar sat on the mat\nRC=0\ntestdata/grepinputM\u00003:start end in between start\nend and following\ntestdata/grepinputM\u00007:start end in between start\nend and following start\nend other stuff\ntestdata/grepinputM\u000011:start end in between start\n\nend\ntestdata/grepinputM\u000016:start end in between start\nend\nRC=0\n---------------------------- Test 136 -----------------------------\npcre2grep: Malformed number \"1MK\" after -m\nUsage: pcre2grep [-AaBCcDdEeFfHhIilLMmNnOoPqrstuUVvwxZ] [long options] [pattern] [files]\nType \"pcre2grep --help\" for more information and the long options.\nRC=2\npcre2grep: Malformed number \"1MK\" after --max-count\nUsage: pcre2grep [-AaBCcDdEeFfHhIilLMmNnOoPqrstuUVvwxZ] [long options] [pattern] [files]\nType \"pcre2grep --help\" for more information and the long options.\nRC=2\n---------------------------- Test 137 -----------------------------\nLast line\nhas no newline\nRC=0\n---------------------------- Test 138 -----------------------------\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: pcre2_match() gave error -63 while matching this text:\n\nAbC\n\npcre2grep: Too many errors - abandoned.\npcre2grep: Error -46, -47, -53 or -63 means that a resource limit was exceeded.\npcre2grep: Check your regex for nested unlimited loops.\nRC=2\n---------------------------- Test 139 -----------------------------\nfox jumps\nRC=0\n---------------------------- Test 140 -----------------------------\nThe quick brown\nfox jumps\nRC=0\n---------------------------- Test 141 -----------------------------\n(standard input):This is a line from stdin.\nRC=0\n---------------------------- Test 142 -----------------------------\npcre2grep: Failed to open /does/not/exist: No such file or directory\nRC=2\n---------------------------- Test 143 -----------------------------\nfox jumps\nThe word is cat in this line\nThe caterpillar sat on the mat\nThe snowcat is not an animal\nA buried feline in the syndicate\nRC=0\n---------------------------- Test 144 -----------------------------\npcre2grep: Failed to open /non/exist: No such file or directory\nRC=2\n---------------------------- Test 145 -----------------------------\nThe quick brown\nfox jumps\nover the lazy dog.\nThis time it jumps and jumps and jumps.\nThis line contains \\E and (regex) *meta* [characters].\nThe word is cat in this line\nThe caterpillar sat on the mat\nThe snowcat is not an animal\nA buried feline in the syndicate\ntrailing spaces \n\rRC=0\n---------------------------- Test 146 -----------------------------\n(standard input):A123B\nRC=0\nA123B\nfox jumps\nRC=0\nUsage: pcre2grep [-AaBCcDdEeFfHhIilLMmNnOoPqrstuUVvwxZ] [long options] [pattern] [files]\nType \"pcre2grep --help\" for more information and the long options.\nRC=2\n---------------------------- Test 147 -----------------------------\npcre2grep: Failed to open -nonfile: No such file or directory\nRC=2\n---------------------------- Test 148 -----------------------------\npcre2grep: Unknown option --nonexist\nUsage: pcre2grep [-AaBCcDdEeFfHhIilLMmNnOoPqrstuUVvwxZ] [long options] [pattern] [files]\nType \"pcre2grep --help\" for more information and the long options.\nRC=2\npcre2grep: Unknown option letter '-' in \"-n-n-bad\"\nUsage: pcre2grep [-AaBCcDdEeFfHhIilLMmNnOoPqrstuUVvwxZ] [long options] [pattern] [files]\nType \"pcre2grep --help\" for more information and the long options.\nRC=2\npcre2grep: Data missing after --context\nUsage: pcre2grep [-AaBCcDdEeFfHhIilLMmNnOoPqrstuUVvwxZ] [long options] [pattern] [files]\nType \"pcre2grep --help\" for more information and the long options.\nRC=2\npcre2grep: Cannot mix --only-matching, --output, --file-offsets and/or --line-offsets\nUsage: pcre2grep [-AaBCcDdEeFfHhIilLMmNnOoPqrstuUVvwxZ] [long options] [pattern] [files]\nType \"pcre2grep --help\" for more information and the long options.\nRC=2\npcre2grep: Unknown colour setting \"badvalue\"\nRC=2\npcre2grep: Invalid newline specifier \"badvalue\"\nRC=2\npcre2grep: Invalid value \"badvalue\" for -d\nRC=2\npcre2grep: Invalid value \"badvalue\" for -D\nRC=2\npcre2grep: --buffer-size must be greater than zero\nRC=2\npcre2grep: Error in --exclude regex at offset 7: missing closing parenthesis\nRC=2\npcre2grep: Failed to open /non/exist: No such file or directory\nRC=2\npcre2grep: Failed to open /non/exist: No such file or directory\nRC=2\npcre2grep: Failed to open /non/exist: No such file or directory\nRC=2\n---------------------------- Test 149 -----------------------------\nBinary file ./testdata/grepbinary matches\nRC=0\npcre2grep: unknown value \"wrong\" for binary-files\nUsage: pcre2grep [-AaBCcDdEeFfHhIilLMmNnOoPqrstuUVvwxZ] [long options] [pattern] [files]\nType \"pcre2grep --help\" for more information and the long options.\nRC=2\n---------------------------- Test 150 -----------------------------\npcre2grep: Failed to set locale locale.bad (obtained from LC_CTYPE)\nRC=2\n---------------------------- Test 151 -----------------------------\n\u001b[1;31mThe\u001b[0m quick brown\n\u001b[1;31mThe wo\u001b[0mrd is cat in \u001b[1;31mthis\u001b[0m line\n\u001b[1;31mThe\u001b[0m caterpillar sat on the mat\n\u001b[1;31mThe\u001b[0m snowcat is not an animal\nRC=0\n---------------------------- Test 152 -----------------------------\n24:four\n25-five\n26-six\n27-seven\n++\n34:fourteen\n35-fifteen\n36-sixteen\n37-seventeen\nRC=0\n---------------------------- Test 153 -----------------------------\n24:four\n25-five\n26-six\n27-seven\n34:fourteen\n35-fifteen\n36-sixteen\n37-seventeen\nRC=0\n---------------------------- Test 154 -----------------------------\nRC=1\n---------------------------- Test 155 -----------------------------\nRC=1\n---------------------------- Test 156 -----------------------------\nThe quick brown\nfox jumps\nover the lazy dog.\nThis time it jumps and jumps and jumps.\nThis line contains \\E and (regex) *meta* [characters].\nThe word is cat in this line\nThe caterpillar sat on the mat\nThe snowcat is not an animal\nA buried feline in the syndicate\ntrailing spaces \nRC=0\n---------------------------- Test 157 -----------------------------\nRC=0\n---------------------------- Test 158 -----------------------------\ntrailing spaces \nRC=0\n---------------------------- Test 159 -----------------------------\ntrailing spaces \nRC=0\n---------------------------- Test 160 -----------------------------\n622-bnm\n623-asd\n624-qwe\n625:ert\n626-tyu\n627-uio\n628-ggg\n629-asd\n630-dfg\n631-ghj\n632:jkl\n633-abx\n634-def\n635-ghi\nRC=0\n621-cvb\n622-bnm\n623-asd\n624-qwe\n625:ert\n626-tyu\n627-uio\n628-ggg\n629-asd\n630:dfg\n631-ghj\n632-jkl\nRC=0\n"
  },
  {
    "path": "testdata/grepoutput8",
    "content": "---------------------------- Test U1 ------------------------------\n1:X one\n2:X two\u000b3:X three\f4:X four\r5:X five\r\n6:X six\n7:X seven8:X eight 9:X nine 10:X ten\nRC=0\n---------------------------- Test U2 ------------------------------\n12-Before 111\n13-Before 222 14-Before 33315:Match\r\n16-After 111\n17-After 222 18-After 333\nRC=0\n---------------------------- Test U3 ------------------------------\n21:0,2\n22:0,2\n22:2,2\n22:4,2\n22:6,2\n22:8,2\nRC=0\n---------------------------- Test U4 ------------------------------\npcre2grep: pcre2_match() gave error -22 while matching this text:\n\nAကCD Z\n\nUTF-8 error: isolated byte with 0x80 bit set at offset 4\n\nRC=1\n---------------------------- Test U5 ------------------------------\nCD Z\nRC=0\n---------------------------- Test U6 -----------------------------\n=ǓǤ=\nRC=0\n---------------------------- Test U7 ------------------------------\nÁabcÁ \u001b[1;31mKkK\u001b[0m\nRC=0\n---------------------------- Test U8 ------------------------------\nÁ\u001b[1;31mabc\u001b[0mÁ \u001b[1;31mKk\u001b[0mK\nRC=0\n---------------------------- Test U9 ------------------------------\n\u001b[1;31mA１\u001b[0m\n\u001b[1;31mA1\u001b[0m\nRC=0\n---------------------------- Test U10 ------------------------------\n\u001b[1;31mA1\u001b[0m\nRC=0\n"
  },
  {
    "path": "testdata/grepoutputC",
    "content": "--- Test 1 ---\nArg1: [T] [he ] [ ] Arg2: |T| () () (0)\nThe quick brown\nArg1: [T] [his] [s] Arg2: |T| () () (0)\nThis time it jumps and jumps and jumps.\nArg1: [T] [his] [s] Arg2: |T| () () (0)\nThis line contains \\E and (regex) *meta* [characters].\nArg1: [T] [he ] [ ] Arg2: |T| () () (0)\nThe word is cat in this line\nArg1: [T] [he ] [ ] Arg2: |T| () () (0)\nThe caterpillar sat on the mat\nArg1: [T] [he ] [ ] Arg2: |T| () () (0)\nThe snowcat is not an animal\nRC=0\n--- Test 2 ---\nArg1: [qu] [qu]\nThe quick brown\nArg1: [ t] [ t]\nThis time it jumps and jumps and jumps.\nArg1: [ l] [ l]\nThis line contains \\E and (regex) *meta* [characters].\nArg1: [wo] [wo]\nThe word is cat in this line\nArg1: [ca] [ca]\nThe caterpillar sat on the mat\nArg1: [sn] [sn]\nThe snowcat is not an animal\nRC=0\n--- Test 3 ---\n0:T\nThe quick brown\n0:T\nThis time it jumps and jumps and jumps.\n0:T\nThis line contains \\E and (regex) *meta* [characters].\n0:T\nThe word is cat in this line\n0:T\nThe caterpillar sat on the mat\n0:T\nThe snowcat is not an animal\nRC=0\n--- Test 4 ---\n0:T\n\nThe quick brown\n0:T\n\nThis time it jumps and jumps and jumps.\n0:T\n\nThis line contains \\E and (regex) *meta* [characters].\n0:T\n\nThe word is cat in this line\n0:T\n\nThe caterpillar sat on the mat\n0:T\n\nThe snowcat is not an animal\nRC=0\n--- Test 5 ---\nT\nT\nT\nT\nT\nT\nRC=1\n--- Test 6 ---\n0:T:AA\nThe quick brown\nRC=0\n"
  },
  {
    "path": "testdata/grepoutputCN",
    "content": "--- Test 1 ---\nThe quick brown\nThis time it jumps and jumps and jumps.\nThis line contains \\E and (regex) *meta* [characters].\nThe word is cat in this line\nThe caterpillar sat on the mat\nThe snowcat is not an animal\nRC=0\n--- Test 2 ---\nThe quick brown\nThis time it jumps and jumps and jumps.\nThis line contains \\E and (regex) *meta* [characters].\nThe word is cat in this line\nThe caterpillar sat on the mat\nThe snowcat is not an animal\nRC=0\n--- Test 3 ---\n0:T\nThe quick brown\n0:T\nThis time it jumps and jumps and jumps.\n0:T\nThis line contains \\E and (regex) *meta* [characters].\n0:T\nThe word is cat in this line\n0:T\nThe caterpillar sat on the mat\n0:T\nThe snowcat is not an animal\nRC=0\n--- Test 4 ---\nThe quick brown\nThis time it jumps and jumps and jumps.\nThis line contains \\E and (regex) *meta* [characters].\nThe word is cat in this line\nThe caterpillar sat on the mat\nThe snowcat is not an animal\nRC=0\n--- Test 5 ---\nT\nT\nT\nT\nT\nT\nRC=1\n--- Test 6 ---\n0:T:AA\nThe quick brown\nRC=0\n"
  },
  {
    "path": "testdata/grepoutputCNU",
    "content": "--- Test 1 ---\n0:¦\nThe quick brown\n0:¦\nThis time it jumps and jumps and jumps.\n0:¦\nThis line contains \\E and (regex) *meta* [characters].\n0:¦\nThe word is cat in this line\n0:¦\nThe caterpillar sat on the mat\n0:¦\nThe snowcat is not an animal\nRC=0\n--- Test 2 ---\nThe quick brown\nThis time it jumps and jumps and jumps.\nThis line contains \\E and (regex) *meta* [characters].\nThe word is cat in this line\nThe caterpillar sat on the mat\nThe snowcat is not an animal\nRC=0\n"
  },
  {
    "path": "testdata/grepoutputCU",
    "content": "--- Test 1 ---\n0:¦\nThe quick brown\n0:¦\nThis time it jumps and jumps and jumps.\n0:¦\nThis line contains \\E and (regex) *meta* [characters].\n0:¦\nThe word is cat in this line\n0:¦\nThe caterpillar sat on the mat\n0:¦\nThe snowcat is not an animal\nRC=0\n--- Test 2 ---\n0:¦\n\nThe quick brown\n0:¦\n\nThis time it jumps and jumps and jumps.\n0:¦\n\nThis line contains \\E and (regex) *meta* [characters].\n0:¦\n\nThe word is cat in this line\n0:¦\n\nThe caterpillar sat on the mat\n0:¦\n\nThe snowcat is not an animal\nRC=0\n"
  },
  {
    "path": "testdata/grepoutputCbz2",
    "content": "one\ntwo\nRC=0\none\ntwo\nRC=0\n"
  },
  {
    "path": "testdata/grepoutputCgz",
    "content": "one\ntwo\nRC=0\n"
  },
  {
    "path": "testdata/grepoutputN",
    "content": "---------------------------- Test N1 ------------------------------\r\n1:abc\r2:def\rRC=0\n1-abc\r2:def\rRC=0\n---------------------------- Test N2 ------------------------------\r\n1:abc\rdef\r\n2:ghi\njkl\r\nRC=0\n1-abc\rdef\r\n2:ghi\njkl\r\nRC=0\n---------------------------- Test N3 ------------------------------\r\n2:def\r3:\nghi\njkl\rRC=0\n---------------------------- Test N4 ------------------------------\r\n2:ghi\njkl\r\nRC=0\n---------------------------- Test N5 ------------------------------\r\n1:abc\r2:def\r\n3:ghi\n4:jkl\nRC=0\n1-abc\r2:def\r\nRC=0\n---------------------------- Test N6 ------------------------------\r\n1:abc\r2:def\r\n3:ghi\n4:jkl\nRC=0\n3-ghi\n4:jkl\nRC=0\n---------------------------- Test N7 ------------------------------\r\n2:abc@3:def@RC=0\n1-xyz@2:abc@3:def@RC=0\n---------------------------- Test N8 ------------------------------\r\n1:abc\nRC=0\n\n"
  },
  {
    "path": "testdata/grepoutputUN",
    "content": "---------------------------- Test UN2 ------------------------------\r\n1:abc\nRC=0\n\n"
  },
  {
    "path": "testdata/greppatN4",
    "content": "xxx\r\njkl"
  },
  {
    "path": "testdata/testinput1",
    "content": "# This set of tests is for features that are compatible with all versions of\n# Perl >= 5.10, in non-UTF mode. It should run clean for the 8-bit, 16-bit, and\n# 32-bit PCRE libraries, and also using the perltest.sh script.\n\n# WARNING: Use only / as the pattern delimiter. Although pcre2test supports\n# a number of delimiters, all those other than / give problems with the\n# perltest.sh script.\n    \n#forbid_utf\n#newline_default lf any anycrlf\n#perltest\n\n/the quick brown fox/\n    the quick brown fox\n    What do you know about the quick brown fox?\n\\= Expect no match\n    The quick brown FOX\n    What do you know about THE QUICK BROWN FOX?\n\n/The quick brown fox/i\n    the quick brown fox\n    The quick brown FOX\n    What do you know about the quick brown fox?\n    What do you know about THE QUICK BROWN FOX?\n\n#if !ebcdic\n\n/abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz/\n    abcd\\t\\n\\r\\f\\a\\e9;\\$\\\\?caxyz\n\n#endif\n\n/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/\n    abxyzpqrrrabbxyyyypqAzz\n    abxyzpqrrrabbxyyyypqAzz\n    aabxyzpqrrrabbxyyyypqAzz\n    aaabxyzpqrrrabbxyyyypqAzz\n    aaaabxyzpqrrrabbxyyyypqAzz\n    abcxyzpqrrrabbxyyyypqAzz\n    aabcxyzpqrrrabbxyyyypqAzz\n    aaabcxyzpqrrrabbxyyyypAzz\n    aaabcxyzpqrrrabbxyyyypqAzz\n    aaabcxyzpqrrrabbxyyyypqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqqqAzz\n    aaaabcxyzpqrrrabbxyyyypqAzz\n    abxyzzpqrrrabbxyyyypqAzz\n    aabxyzzzpqrrrabbxyyyypqAzz\n    aaabxyzzzzpqrrrabbxyyyypqAzz\n    aaaabxyzzzzpqrrrabbxyyyypqAzz\n    abcxyzzpqrrrabbxyyyypqAzz\n    aabcxyzzzpqrrrabbxyyyypqAzz\n    aaabcxyzzzzpqrrrabbxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbbxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz\n    aaabcxyzpqrrrabbxyyyypABzz\n    aaabcxyzpqrrrabbxyyyypABBzz\n    >>>aaabxyzpqrrrabbxyyyypqAzz\n    >aaaabxyzpqrrrabbxyyyypqAzz\n    >>>>abcxyzpqrrrabbxyyyypqAzz\n\\= Expect no match\n    abxyzpqrrabbxyyyypqAzz\n    abxyzpqrrrrabbxyyyypqAzz\n    abxyzpqrrrabxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz\n    aaaabcxyzzzzpqrrrabbbxyyypqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz\n\n/^(abc){1,2}zz/\n    abczz\n    abcabczz\n\\= Expect no match\n    zz\n    abcabcabczz\n    >>abczz\n\n/^(b+?|a){1,2}?c/\n    bc\n    bbc\n    bbbc\n    bac\n    bbac\n    aac\n    abbbbbbbbbbbc\n    bbbbbbbbbbbac\n\\= Expect no match\n    aaac\n    abbbbbbbbbbbac\n\n/^(b+|a){1,2}c/\n    bc\n    bbc\n    bbbc\n    bac\n    bbac\n    aac\n    abbbbbbbbbbbc\n    bbbbbbbbbbbac\n\\= Expect no match\n    aaac\n    abbbbbbbbbbbac\n\n/^(ba|b*){1,2}?bc/\n    babc\n    bbabc\n    bababc\n\\= Expect no match\n    bababbc\n    babababc\n\n#if !ebcdic\n\n/^\\ca\\cA\\c[;\\c:/\n    \\x01\\x01\\e;z\n\n#endif\n\n/^[ab\\]cde]/\n    athing\n    bthing\n    ]thing\n    cthing\n    dthing\n    ething\n\\= Expect no match\n    fthing\n    [thing\n    \\\\thing\n\n/^[]cde]/\n    ]thing\n    cthing\n    dthing\n    ething\n\\= Expect no match\n    athing\n    fthing\n\n/^[^ab\\]cde]/\n    fthing\n    [thing\n    \\\\thing\n\\= Expect no match\n    athing\n    bthing\n    ]thing\n    cthing\n    dthing\n    ething\n\n/^[^]cde]/\n    athing\n    fthing\n\\= Expect no match\n    ]thing\n    cthing\n    dthing\n    ething\n\n/^\\/\n    \n\n/^/\n    \n\n/^[0-9]+$/\n    0\n    1\n    2\n    3\n    4\n    5\n    6\n    7\n    8\n    9\n    10\n    100\n\\= Expect no match\n    abc\n\n/^.*nter/\n    enter\n    inter\n    uponter\n\n/^xxx[0-9]+$/\n    xxx0\n    xxx1234\n\\= Expect no match\n    xxx\n\n/^.+[0-9][0-9][0-9]$/\n    x123\n    x1234\n    xx123\n    123456\n\\= Expect no match\n    123\n\n/^.+?[0-9][0-9][0-9]$/\n    x123\n    x1234\n    xx123\n    123456\n\\= Expect no match\n    123\n\n/^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$/\n    abc!pqr=apquxz.ixr.zzz.ac.uk\n\\= Expect no match\n    !pqr=apquxz.ixr.zzz.ac.uk\n    abc!=apquxz.ixr.zzz.ac.uk\n    abc!pqr=apquxz:ixr.zzz.ac.uk\n    abc!pqr=apquxz.ixr.zzz.ac.ukk\n\n/:/\n    Well, we need a colon: somewhere\n\\= Expect no match\n    Fail without a colon\n\n/([\\da-f:]+)$/i\n    0abc\n    abc\n    fed\n    E\n    ::\n    5f03:12C0::932e\n    fed def\n    Any old stuff\n\\= Expect no match\n    0zzz\n    gzzz\n    fed\\x20\n    Any old rubbish\n\n/^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/\n    .1.2.3\n    A.12.123.0\n\\= Expect no match\n    .1.2.3333\n    1.2.3\n    1234.2.3\n\n/^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$/\n    1 IN SOA non-sp1 non-sp2(\n    1    IN    SOA    non-sp1    non-sp2   (\n\\= Expect no match\n    1IN SOA non-sp1 non-sp2(\n\n/^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-Z\\d\\-]*)*\\.$/\n    a.\n    Z.\n    2.\n    ab-c.pq-r.\n    sxk.zzz.ac.uk.\n    x-.y-.\n\\= Expect no match\n    -abc.peq.\n\n/^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$/\n    *.a\n    *.b0-a\n    *.c3-b.c\n    *.c-a.b-c\n\\= Expect no match\n    *.0\n    *.a-\n    *.a-b.c-\n    *.c-a.0-c\n\n/^(?=ab(de))(abd)(e)/\n    abde\n\n/^(?!(ab)de|x)(abd)(f)/\n    abdf\n\n/^(?=(ab(cd)))(ab)/\n    abcd\n\n/^[\\da-f](\\.[\\da-f])*$/i\n    a.b.c.d\n    A.B.C.D\n    a.b.c.1.2.3.C\n\n/^\\\".*\\\"\\s*(;.*)?$/\n    \\\"1234\\\"\n    \\\"abcd\\\" ;\n    \\\"\\\" ; rhubarb\n\\= Expect no match\n    \\\"1234\\\" : things\n\n/^$/\n    \\\n\\= Expect no match\n    A non-empty line\n\n/   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)/x\n    ab c\n\\= Expect no match\n    abc\n    ab cde\n\n/(?x)   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)/\n    ab c\n\\= Expect no match\n    abc\n    ab cde\n\n/^   a\\ b[c ]d       $/x\n    a bcd\n    a b d\n\\= Expect no match\n    abcd\n    ab d\n\n/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/\n    abcdefhijklm\n\n/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/\n    abcdefhijklm\n\n/^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]/\n    a+ Z0+\\x08\\n\\x1d\\x12\n\n/^[.^$|()*+?{,}]+/\n    .^\\$(*+)|{?,?}\n\n/^a*\\w/\n    z\n    az\n    aaaz\n    a\n    aa\n    aaaa\n    a+\n    aa+\n\n/^a*?\\w/\n    z\n    az\n    aaaz\n    a\n    aa\n    aaaa\n    a+\n    aa+\n\n/^a+\\w/\n    az\n    aaaz\n    aa\n    aaaa\n    aa+\n\n/^a+?\\w/\n    az\n    aaaz\n    aa\n    aaaa\n    aa+\n\n/^\\d{8}\\w{2,}/\n    1234567890\n    12345678ab\n    12345678__\n\\= Expect no match\n    1234567\n\n/^[aeiou\\d]{4,5}$/\n    uoie\n    1234\n    12345\n    aaaaa\n\\= Expect no match\n    123456\n\n/^[aeiou\\d]{4,5}?/\n    uoie\n    1234\n    12345\n    aaaaa\n    123456\n\n/\\A(abc|def)=(\\1){2,3}\\Z/\n    abc=abcabc\n    def=defdefdef\n\\= Expect no match\n    abc=defdef\n\n/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$/\n    abcdefghijkcda2\n    abcdefghijkkkkcda2\n\n/(cat(a(ract|tonic)|erpillar)) \\1()2(3)/\n    cataract cataract23\n    catatonic catatonic23\n    caterpillar caterpillar23\n\n\n/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/\n    From abcd  Mon Sep 01 12:33:02 1997\n\n/^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d/\n    From abcd  Mon Sep 01 12:33:02 1997\n    From abcd  Mon Sep  1 12:33:02 1997\n\\= Expect no match\n    From abcd  Sep 01 12:33:02 1997\n\n/^12.34/s\n    12\\n34\n    12\\r34\n\n/\\w+(?=\\t)/\n    the quick brown\\t fox\n\n/foo(?!bar)(.*)/\n    foobar is foolish see?\n\n/(?:(?!foo)...|^.{0,2})bar(.*)/\n    foobar crowbar etc\n    barrel\n    2barrel\n    A barrel\n\n/^(\\D*)(?=\\d)(?!123)/\n    abc456\n\\= Expect no match\n    abc123\n\n/^1234(?# test newlines\n  inside)/\n    1234\n\n/^1234 #comment in extended re\n  /x\n    1234\n\n/#rhubarb\n  abcd/x\n    abcd\n\n/^abcd#rhubarb/x\n    abcd\n\n/^(a)\\1{2,3}(.)/\n    aaab\n    aaaab\n    aaaaab\n    aaaaaab\n\n/(?!^)abc/\n    the abc\n\\= Expect no match\n    abc\n\n/(?=^)abc/\n    abc\n\\= Expect no match\n    the abc\n\n/^[ab]{1,3}(ab*|b)/\n    aabbbbb\n\n/^[ab]{1,3}?(ab*|b)/\n    aabbbbb\n\n/^[ab]{1,3}?(ab*?|b)/\n    aabbbbb\n\n/^[ab]{1,3}(ab*?|b)/\n    aabbbbb\n\n#if !ebcdic\n\n/  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                          # optional leading comment\n(?:    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n# address\n|                     #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)             # one word, optionally followed by....\n(?:\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037]  |  # atom and space parts, or...\n\\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)       |  # comments, or...\n\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n# quoted strings\n)*\n<  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                     # leading <\n(?:  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  ,  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n)* # further okay, if led by comma\n:                                # closing colon\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  )? #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n#       address spec\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  > #                  trailing >\n# name and address\n)  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                       # optional trailing comment\n/x\n    Alan Other <user\\@dom.ain>\n    <user\\@dom.ain>\n    user\\@dom.ain\n    \\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)\n    A. Other <user.1234\\@dom.ain> (a comment)\n    \\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay\n    A missing angle <user\\@some.where\n\\= Expect no match\n    The quick brown fox\n\n/[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional leading comment\n(?:\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# additional words\n)*\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n# address\n|                             #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n# leading word\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] *               # \"normal\" atoms and or spaces\n(?:\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n|\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n) # \"special\" comment or quoted string\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] *            #  more \"normal\"\n)*\n<\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# <\n(?:\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n(?: ,\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n)*  # additional domains\n:\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)?     #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# additional words\n)*\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n#       address spec\n>                    #                 >\n# name and address\n)\n/x\n    Alan Other <user\\@dom.ain>\n    <user\\@dom.ain>\n    user\\@dom.ain\n    \\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)\n    A. Other <user.1234\\@dom.ain> (a comment)\n    \\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay\n    A missing angle <user\\@some.where\n\\= Expect no match\n    The quick brown fox\n\n#endif\n\n/abc\\0def\\00pqr\\000xyz\\0000AB/\n    abc\\0def\\00pqr\\000xyz\\0000AB\n    abc456 abc\\0def\\00pqr\\000xyz\\0000ABCDE\n\n/abc\\x0def\\x00pqr\\x000xyz\\x0000AB/\n    abc\\x0def\\x00pqr\\x000xyz\\x0000AB\n    abc456 abc\\x0def\\x00pqr\\x000xyz\\x0000ABCDE\n\n/^[\\000-\\037]/\n    \\0A\n    \\01B\n    \\037C\n\n/\\0*/\n    \\0\\0\\0\\0\n\n/A\\x0{2,3}Z/\n    The A\\x0\\x0Z\n    An A\\0\\x0\\0Z\n\\= Expect no match\n    A\\0Z\n    A\\0\\x0\\0\\x0Z\n\n/^(cow|)\\1(bell)/\n    cowcowbell\n    bell\n\\= Expect no match\n    cowbell\n\n/^\\s/\n    \\040abc\n    \\x0cabc\n    \\nabc\n    \\rabc\n    \\tabc\n\\= Expect no match\n    abc\n\n/^a\tb\n    \f  c/x\n    abc\n\n/^(a|)\\1*b/\n    ab\n    aaaab\n    b\n\\= Expect no match\n    acb\n\n/^(a|)\\1+b/\n    aab\n    aaaab\n    b\n\\= Expect no match\n    ab\n\n/^(a|)\\1?b/\n    ab\n    aab\n    b\n\\= Expect no match\n    acb\n\n/^(a|)\\1{2}b/\n    aaab\n    b\n\\= Expect no match\n    ab\n    aab\n    aaaab\n\n/^(a|)\\1{2,3}b/\n    aaab\n    aaaab\n    b\n\\= Expect no match\n    ab\n    aab\n    aaaaab\n\n/ab{1,3}bc/\n    abbbbc\n    abbbc\n    abbc\n\\= Expect no match\n    abc\n    abbbbbc\n\n/([^.]*)\\.([^:]*):[T ]+(.*)/\n    track1.title:TBlah blah blah\n\n/([^.]*)\\.([^:]*):[T ]+(.*)/i\n    track1.title:TBlah blah blah\n\n/([^.]*)\\.([^:]*):[t ]+(.*)/i\n    track1.title:TBlah blah blah\n\n#if !ebcdic\n\n/^[W-c]+$/\n    WXY_^abc\n\\= Expect no match\n    wxy\n\n/^[W-c]+$/i\n    WXY_^abc\n    wxy_^ABC\n\n/^[\\x3f-\\x5F]+$/i\n    WXY_^abc\n    wxy_^ABC\n\n#endif\n\n/^abc$/m\n    abc\n    qqq\\nabc\n    abc\\nzzz\n    qqq\\nabc\\nzzz\n\n/^abc$/\n    abc\n\\= Expect no match\n    qqq\\nabc\n    abc\\nzzz\n    qqq\\nabc\\nzzz\n\n/\\Aabc\\Z/m\n    abc\n    abc\\n \n\\= Expect no match\n    qqq\\nabc\n    abc\\nzzz\n    qqq\\nabc\\nzzz\n    \n/\\A(.)*\\Z/s\n    abc\\ndef\n\n/\\A(.)*\\Z/m\n\\= Expect no match\n    abc\\ndef\n\n/(?:b)|(?::+)/\n    b::c\n    c::b\n\n/[-az]+/\n    az-\n\\= Expect no match\n    b\n\n/[az-]+/\n    za-\n\\= Expect no match\n    b\n\n/[a\\-z]+/\n    a-z\n\\= Expect no match\n    b\n\n/[a-z]+/\n    abcdxyz\n\n/[\\d-]+/\n    12-34\n\\= Expect no match\n    aaa\n\n#if !ebcdic\n\n/\\x5c/\n    \\\\\n\n/\\x20Z/\n    the Zoo\n\\= Expect no match\n    Zulu\n\n#endif\n\n/(abc)\\1/i\n    abcabc\n    ABCabc\n    abcABC\n\n/abc$/\n    abc\n    abc\\n\n\\= Expect no match\n    abc\\ndef\n\n#if !ebcdic\n\n/(abc)\\123/\n    abc\\x53\n\n/(abc)\\223/\n    abc\\x93\n\n/(abc)\\323/\n    abc\\xd3\n\n/(abc)\\100/\n    abc\\x40\n    abc\\100\n\n/(abc)\\1000/\n    abc\\x400\n    abc\\x40\\x30\n    abc\\1000\n    abc\\100\\x30\n    abc\\100\\060\n    abc\\100\\60\n\n#endif\n    \n/^(A)(B)(C)(D)(E)(F)(G)(H)(I)\\8\\9$/\n    ABCDEFGHIHI \n\n/^[A\\8B\\9C]+$/\n    A8B9C\n\\= Expect no match \n    A8B9C\\x00\n\n#if !ebcdic\n\n/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123/\n    abcdefghijkllS\n\n/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123/\n    abcdefghijk\\12S\n\n#endif\n\n/a{0}bc/\n    bc\n\n/(a|(bc)){0,0}?xyz/\n    xyz\n\n#if !ebcdic\n\n/abc[\\10]de/\n    abc\\010de\n\n#endif\n\n/abc[\\1]de/\n    abc\\1de\n\n/(abc)[\\1]de/\n    abc\\1de\n\n/(?s)a.b/\n    a\\nb\n\n/^([^a])([^\\b])([^c]*)([^d]{3,4})/\n    baNOTccccd\n    baNOTcccd\n    baNOTccd\n    bacccd\n\\= Expect no match\n    anything\n    b\\bc   \n    baccd\n\n/[^a]/\n    Abc\n  \n/[^a]/i\n    Abc \n\n/[^a]+/\n    AAAaAbc\n  \n/[^a]+/i\n    AAAaAbc \n\n/[^a]+/\n    bbb\\nccc\n   \n/[^k]$/\n    abc\n\\= Expect no match\n    abk   \n   \n/[^k]{2,3}$/\n    abc\n    kbc\n    kabc \n\\= Expect no match\n    abk\n    akb\n    akk \n\n/^\\d{8,}\\@.+[^k]$/\n    12345678\\@a.b.c.d\n    123456789\\@x.y.z\n\\= Expect no match\n    12345678\\@x.y.uk\n    1234567\\@a.b.c.d       \n\n/(a)\\1{8,}/\n    aaaaaaaaa\n    aaaaaaaaaa\n\\= Expect no match\n    aaaaaaa   \n\n/[^a]/\n    aaaabcd\n    aaAabcd \n\n/[^a]/i\n    aaaabcd\n    aaAabcd \n\n/[^az]/\n    aaaabcd\n    aaAabcd \n\n/[^az]/i\n    aaaabcd\n    aaAabcd \n\n#if !ebcdic\n\n/\\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377/\n \\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377\n\n#endif\n\n/P[^*]TAIRE[^*]{1,6}?LL/\n    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx\n\n/P[^*]TAIRE[^*]{1,}?LL/\n    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx\n\n/(\\.\\d\\d[1-9]?)\\d+/\n    1.230003938\n    1.875000282   \n    1.235  \n                  \n/(\\.\\d\\d((?=0)|\\d(?=\\d)))/\n    1.230003938      \n    1.875000282\n\\= Expect no match \n    1.235 \n    \n/a(?)b/\n    ab \n \n/\\b(foo)\\s+(\\w+)/i\n    Food is on the foo table\n    \n/foo(.*)bar/\n    The food is under the bar in the barn.\n    \n/foo(.*?)bar/\n    The food is under the bar in the barn.\n\n/(.*)(\\d*)/\n    I have 2 numbers: 53147\n    \n/(.*)(\\d+)/\n    I have 2 numbers: 53147\n \n/(.*?)(\\d*)/\n    I have 2 numbers: 53147\n\n/(.*?)(\\d+)/\n    I have 2 numbers: 53147\n\n/(.*)(\\d+)$/\n    I have 2 numbers: 53147\n\n/(.*?)(\\d+)$/\n    I have 2 numbers: 53147\n\n/(.*)\\b(\\d+)$/\n    I have 2 numbers: 53147\n\n/(.*\\D)(\\d+)$/\n    I have 2 numbers: 53147\n\n/^\\D*(?!123)/\n    ABC123\n     \n/^(\\D*)(?=\\d)(?!123)/\n    ABC445\n\\= Expect no match\n    ABC123\n    \n/^[W-]46]/\n    W46]789 \n    -46]789\n\\= Expect no match\n    Wall\n    Zebra\n    42\n    [abcd] \n    ]abcd[\n\n#if !ebcdic\n       \n/^[W-\\]46]/\n    W46]789 \n    Wall\n    Zebra\n    Xylophone  \n    42\n    [abcd] \n    ]abcd[\n    \\\\backslash \n\\= Expect no match\n    -46]789\n    well\n\n#endif\n    \n/\\d\\d\\/\\d\\d\\/\\d\\d\\d\\d/\n    01/01/2000\n\n/word (?:[a-zA-Z0-9]+ ){0,10}otherword/\n    word cat dog elephant mussel cow horse canary baboon snake shark otherword\n\\= Expect no match\n    word cat dog elephant mussel cow horse canary baboon snake shark\n\n/word (?:[a-zA-Z0-9]+ ){0,300}otherword/\n\\= Expect no match\n    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope\n\n/^(a){0,0}/\n    bcd\n    abc\n    aab     \n\n/^(a){0,1}/\n    bcd\n    abc\n    aab  \n\n/^(a){0,2}/\n    bcd\n    abc\n    aab  \n\n/^(a){0,3}/\n    bcd\n    abc\n    aab\n    aaa   \n\n/^(a){0,}/\n    bcd\n    abc\n    aab\n    aaa\n    aaaaaaaa    \n\n/^(a){1,1}/\n    abc\n    aab  \n\\= Expect no match\n    bcd\n\n/^(a){1,2}/\n    abc\n    aab  \n\\= Expect no match\n    bcd\n\n/^(a){1,3}/\n    abc\n    aab\n    aaa   \n\\= Expect no match\n    bcd\n\n/^(a){1,}/\n    abc\n    aab\n    aaa\n    aaaaaaaa    \n\\= Expect no match\n    bcd\n\n/.*\\.gif/\n    borfle\\nbib.gif\\nno\n\n/.{0,}\\.gif/\n    borfle\\nbib.gif\\nno\n\n/.*\\.gif/m\n    borfle\\nbib.gif\\nno\n\n/.*\\.gif/s\n    borfle\\nbib.gif\\nno\n\n/.*\\.gif/ms\n    borfle\\nbib.gif\\nno\n    \n/.*$/\n    borfle\\nbib.gif\\nno\n\n/.*$/m\n    borfle\\nbib.gif\\nno\n\n/.*$/s\n    borfle\\nbib.gif\\nno\n\n/.*$/ms\n    borfle\\nbib.gif\\nno\n    \n/.*$/\n    borfle\\nbib.gif\\nno\\n\n\n/.*$/m\n    borfle\\nbib.gif\\nno\\n\n\n/.*$/s\n    borfle\\nbib.gif\\nno\\n\n\n/.*$/ms\n    borfle\\nbib.gif\\nno\\n\n    \n/(.*X|^B)/\n    abcde\\n1234Xyz\n    BarFoo \n\\= Expect no match\n    abcde\\nBar  \n\n/(.*X|^B)/m\n    abcde\\n1234Xyz\n    BarFoo \n    abcde\\nBar  \n\n/(.*X|^B)/s\n    abcde\\n1234Xyz\n    BarFoo \n\\= Expect no match\n    abcde\\nBar  \n\n/(.*X|^B)/ms\n    abcde\\n1234Xyz\n    BarFoo \n    abcde\\nBar  \n\n/(?s)(.*X|^B)/\n    abcde\\n1234Xyz\n    BarFoo \n\\= Expect no match \n    abcde\\nBar  \n\n/(?s:.*X|^B)/\n    abcde\\n1234Xyz\n    BarFoo \n\\= Expect no match \n    abcde\\nBar  \n\n/^.*B/\n\\= Expect no match\n    abc\\nB\n     \n/(?s)^.*B/\n    abc\\nB\n\n/(?m)^.*B/\n    abc\\nB\n     \n/(?ms)^.*B/\n    abc\\nB\n\n/(?ms)^B/\n    abc\\nB\n\n/(?s)B$/\n    B\\n\n\n/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/\n    123456654321\n  \n/^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d/\n    123456654321 \n\n/^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]/\n    123456654321\n  \n/^[abc]{12}/\n    abcabcabcabc\n    \n/^[a-c]{12}/\n    abcabcabcabc\n    \n/^(a|b|c){12}/\n    abcabcabcabc \n\n/^[abcdefghijklmnopqrstuvwxy0123456789]/\n    n\n\\= Expect no match \n    z \n\n/abcde{0,0}/\n    abcd\n\\= Expect no match\n    abce  \n\n/ab[cd]{0,0}e/\n    abe\n\\= Expect no match\n    abcde \n    \n/ab(c){0,0}d/\n    abd\n\\= Expect no match\n    abcd   \n\n/a(b*)/\n    a\n    ab\n    abbbb\n\\= Expect no match\n    bbbbb    \n    \n/ab\\d{0}e/\n    abe\n\\= Expect no match\n    ab1e   \n    \n/\"([^\\\\\"]+|\\\\.)*\"/\n    the \\\"quick\\\" brown fox\n    \\\"the \\\\\\\"quick\\\\\\\" brown fox\\\" \n\n/.*?/g,aftertext\n    abc\n  \n/\\b/g,aftertext\n    abc \n\n/\\b/g,aftertext\n    abc \n\n//g\n    abc\n\n/<tr([\\w\\W\\s\\d][^<>]{0,})><TD([\\w\\W\\s\\d][^<>]{0,})>([\\d]{0,}\\.)(.*)((<BR>([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>/is\n  <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>\n\n/a[^a]b/\n    acb\n    a\\nb\n    \n/a.b/\n    acb\n\\= Expect no match \n    a\\nb   \n    \n/a[^a]b/s\n    acb\n    a\\nb  \n    \n/a.b/s\n    acb\n    a\\nb  \n\n/^(b+?|a){1,2}?c/\n    bac\n    bbac\n    bbbac\n    bbbbac\n    bbbbbac \n\n/^(b+|a){1,2}?c/\n    bac\n    bbac\n    bbbac\n    bbbbac\n    bbbbbac \n    \n/(?!\\A)x/m\n    a\\bx\\n\n    a\\nx\\n\n\\= Expect no match     \n    x\\nb\\n\n    \n/(A|B)*?CD/\n    CD \n    \n/(A|B)*CD/\n    CD \n\n/(AB)*?\\1/\n    ABABAB\n\n/(AB)*\\1/\n    ABABAB\n    \n/(?<!bar)foo/\n    foo\n    catfood\n    arfootle\n    rfoosh\n\\= Expect no match\n    barfoo\n    towbarfoo\n\n/\\w{3}(?<!bar)foo/\n    catfood\n\\= Expect no match\n    foo\n    barfoo\n    towbarfoo\n\n/(?<=(foo)a)bar/\n    fooabar\n\\= Expect no match\n    bar\n    foobbar\n      \n/\\Aabc\\z/m\n    abc\n\\= Expect no match\n    abc\\n   \n    qqq\\nabc\n    abc\\nzzz\n    qqq\\nabc\\nzzz\n\n/(?>.*\\/)foo/\n    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo\n\\= Expect no match     \n    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/\n\n/(?>(\\.\\d\\d[1-9]?))\\d+/\n    1.230003938\n    1.875000282\n\\= Expect no match \n    1.235 \n\n/^((?>\\w+)|(?>\\s+))*$/\n    now is the time for all good men to come to the aid of the party\n\\= Expect no match\n    this is not a line with only words and spaces!\n    \n/(\\d+)(\\w)/\n    12345a\n    12345+ \n\n/((?>\\d+))(\\w)/\n    12345a\n\\= Expect no match\n    12345+ \n\n/(?>a+)b/\n    aaab\n\n/((?>a+)b)/\n    aaab\n\n/(?>(a+))b/\n    aaab\n\n/(?>b)+/\n    aaabbbccc\n\n/(?>a+|b+|c+)*c/\n    aaabbbbccccd\n\n/((?>[^()]+)|\\([^()]*\\))+/\n    ((abc(ade)ufh()()x\n    \n/\\(((?>[^()]+)|\\([^()]+\\))+\\)/\n    (abc)\n    (abc(def)xyz)\n\\= Expect no match\n    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   \n\n/a(?-i)b/i\n    ab\n    Ab\n\\= Expect no match \n    aB\n    AB\n        \n/(a (?x)b c)d e/\n    a bcd e\n\\= Expect no match\n    a b cd e\n    abcd e   \n    a bcde \n \n/(a b(?x)c d (?-x)e f)/\n    a bcde f\n\\= Expect no match\n    abcdef  \n\n/(a(?i)b)c/\n    abc\n    aBc\n\\= Expect no match\n    abC\n    aBC  \n    Abc\n    ABc\n    ABC\n    AbC\n    \n/a(?i:b)c/\n    abc\n    aBc\n\\= Expect no match \n    ABC\n    abC\n    aBC\n    \n/a(?i:b)*c/\n    aBc\n    aBBc\n\\= Expect no match \n    aBC\n    aBBC\n    \n/a(?=b(?i)c)\\w\\wd/\n    abcd\n    abCd\n\\= Expect no match\n    aBCd\n    abcD     \n    \n/(?s-i:more.*than).*million/i\n    more than million\n    more than MILLION\n    more \\n than Million \n\\= Expect no match\n    MORE THAN MILLION    \n    more \\n than \\n million \n\n/(?:(?s-i)more.*than).*million/i\n    more than million\n    more than MILLION\n    more \\n than Million \n\\= Expect no match\n    MORE THAN MILLION    \n    more \\n than \\n million \n    \n/(?>a(?i)b+)+c/\n    abc\n    aBbc\n    aBBc \n\\= Expect no match\n    Abc\n    abAb    \n    abbC \n    \n/(?=a(?i)b)\\w\\wc/\n    abc\n    aBc\n\\= Expect no match\n    Ab \n    abC\n    aBC     \n    \n/(?<=a(?i)b)(\\w\\w)c/\n    abxxc\n    aBxxc\n\\= Expect no match\n    Abxxc\n    ABxxc\n    abxxC      \n\n/(?:(a)|b)(?(1)A|B)/\n    aA\n    bB\n\\= Expect no match\n    aB\n    bA    \n\n/^(a)?(?(1)a|b)+$/\n    aa\n    b\n    bb  \n\\= Expect no match\n    ab   \n    \n# Perl gets this next one wrong if the pattern ends with $; in that case it\n# fails to match \"12\". \n\n/^(?(?=abc)\\w{3}:|\\d\\d)/\n    abc:\n    12\n    123\n\\= Expect no match\n    xyz    \n\n/^(?(?!abc)\\d\\d|\\w{3}:)$/\n    abc:\n    12\n\\= Expect no match\n    123\n    xyz    \n    \n/(?(?<=foo)bar|cat)/\n    foobar\n    cat\n    fcat\n    focat   \n\\= Expect no match\n    foocat  \n\n/(?(?<!foo)cat|bar)/\n    foobar\n    cat\n    fcat\n    focat   \n\\= Expect no match\n    foocat  \n\n/( \\( )? [^()]+ (?(1) \\) |) /x\n    abcd\n    (abcd)\n    the quick (abcd) fox\n    (abcd   \n\n/( \\( )? [^()]+ (?(1) \\) ) /x\n    abcd\n    (abcd)\n    the quick (abcd) fox\n    (abcd   \n\n/^(?(2)a|(1)(2))+$/\n    12\n    12a\n    12aa\n\\= Expect no match\n    1234    \n\n/((?i)blah)\\s+\\1/\n    blah blah\n    BLAH BLAH\n    Blah Blah\n    blaH blaH\n\\= Expect no match\n    blah BLAH\n    Blah blah      \n    blaH blah \n\n/((?i)blah)\\s+(?i:\\1)/\n    blah blah\n    BLAH BLAH\n    Blah Blah\n    blaH blaH\n    blah BLAH\n    Blah blah      \n    blaH blah \n\n/((?i)blah)\\s+(?m)A(?i:\\1)/\n    blah ABLAH\n\\= Expect no match\n    blah aBLAH\n\n/(?>a*)*/\n    a\n    aa\n    aaaa\n    \n/(abc|)+/\n    abc\n    abcabc\n    abcabcabc\n    xyz      \n\n/([a]*)*/\n    a\n    aaaaa \n \n/([ab]*)*/\n    a\n    b\n    ababab\n    aaaabcde\n    bbbb    \n \n/([^a]*)*/\n    b\n    bbbb\n    aaa   \n \n/([^ab]*)*/\n    cccc\n    abab  \n \n/([a]*?)*/\n    a\n    aaaa \n \n/([ab]*?)*/\n    a\n    b\n    abab\n    baba   \n \n/([^a]*?)*/\n    b\n    bbbb\n    aaa   \n \n/([^ab]*?)*/\n    c\n    cccc\n    baba   \n \n/(?>a*)*/\n    a\n    aaabcde \n \n/((?>a*))*/\n    aaaaa\n    aabbaa \n \n/((?>a*?))*/\n    aaaaa\n    aabbaa \n\n/(?(?=[^a-z]+[a-z])  \\d{2}-[a-z]{3}-\\d{2}  |  \\d{2}-\\d{2}-\\d{2} ) /x\n    12-sep-98\n    12-09-98\n\\= Expect no match\n    sep-12-98\n        \n/(?<=(foo))bar\\1/\n    foobarfoo\n    foobarfootling \n\\= Expect no match\n    foobar\n    barfoo   \n\n/(?i:saturday|sunday)/\n    saturday\n    sunday\n    Saturday\n    Sunday\n    SATURDAY\n    SUNDAY\n    SunDay\n    \n/(a(?i)bc|BB)x/\n    abcx\n    aBCx\n    bbx\n    BBx\n\\= Expect no match\n    abcX\n    aBCX\n    bbX\n    BBX               \n\n/^([ab](?i)[cd]|[ef])/\n    ac\n    aC\n    bD\n    elephant\n    Europe \n    frog\n    France\n\\= Expect no match\n    Africa     \n\n/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/\n    ab\n    aBd\n    xy\n    xY\n    zebra\n    Zambesi\n\\= Expect no match\n    aCD  \n    XY  \n\n/(?<=foo\\n)^bar/m\n    foo\\nbar\n\\= Expect no match\n    bar\n    baz\\nbar   \n\n/(?<=(?<!foo)bar)baz/\n    barbaz\n    barbarbaz \n    koobarbaz \n\\= Expect no match\n    baz\n    foobarbaz \n\n# The cases of aaaa and aaaaaa are missed out below because Perl does things\n# differently. We know that odd, and maybe incorrect, things happen with\n# recursive references in Perl, as far as 5.11.3 - see some stuff in test #2.\n\n/^(a\\1?){4}$/\n    aaaaa\n    aaaaaaa\n    aaaaaaaaaa\n\\= Expect no match\n    a\n    aa\n    aaa\n    aaaaaaaa\n    aaaaaaaaa\n    aaaaaaaaaaa\n    aaaaaaaaaaaa\n    aaaaaaaaaaaaa\n    aaaaaaaaaaaaaa\n    aaaaaaaaaaaaaaa\n    aaaaaaaaaaaaaaaa\n\n/^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$/\n    aaaa\n    aaaaa\n    aaaaaa\n    aaaaaaa\n    aaaaaaaaaa\n\\= Expect no match\n    a\n    aa\n    aaa\n    aaaaaaaa\n    aaaaaaaaa\n    aaaaaaaaaaa\n    aaaaaaaaaaaa\n    aaaaaaaaaaaaa\n    aaaaaaaaaaaaaa\n    aaaaaaaaaaaaaaa\n    aaaaaaaaaaaaaaaa               \n\n# The following tests are taken from the Perl 5.005 test suite; some of them\n# are compatible with 5.004, but I'd rather not have to sort them out.\n\n/abc/\n    abc\n    xabcy\n    ababc\n\\= Expect no match\n    xbc\n    axc\n    abx\n\n/ab*c/\n    abc\n\n/ab*bc/\n    abc\n    abbc\n    abbbbc\n\n/.{1}/\n    abbbbc\n\n/.{3,4}/\n    abbbbc\n\n/ab{0,}bc/\n    abbbbc\n\n/ab+bc/\n    abbc\n\\= Expect no match\n    abc\n    abq\n\n/ab{1,}bc/\n\n/ab+bc/\n    abbbbc\n\n/ab{1,}bc/\n    abbbbc\n\n/ab{1,3}bc/\n    abbbbc\n\n/ab{3,4}bc/\n    abbbbc\n\n/ab{4,5}bc/\n\\= Expect no match\n    abq\n    abbbbc\n\n/ab?bc/\n    abbc\n    abc\n\n/ab{0,1}bc/\n    abc\n\n/ab?bc/\n\n/ab?c/\n    abc\n\n/ab{0,1}c/\n    abc\n\n/^abc$/\n    abc\n\\= Expect no match\n    abbbbc\n    abcc\n\n/^abc/\n    abcc\n\n/^abc$/\n\n/abc$/\n    aabc\n\\= Expect no match\n    aabcd\n\n/^/\n    abc\n\n/$/\n    abc\n\n/a.c/\n    abc\n    axc\n\n/a.*c/\n    axyzc\n\n/a[bc]d/\n    abd\n\\= Expect no match\n    axyzd\n    abc\n\n/a[b-d]e/\n    ace\n\n/a[b-d]/\n    aac\n\n/a[-b]/\n    a-\n\n/a[b-]/\n    a-\n\n/a]/\n    a]\n\n/a[]]b/\n    a]b\n\n/a[^bc]d/\n    aed\n\\= Expect no match\n    abd\n    abd\n\n/a[^-b]c/\n    adc\n\n/a[^]b]c/\n    adc\n    a-c\n\\= Expect no match\n    a]c\n\n/\\ba\\b/\n    a-\n    -a\n    -a-\n\n/\\by\\b/\n\\= Expect no match\n    xy\n    yz\n    xyz\n\n/\\Ba\\B/\n\\= Expect no match\n    a-\n    -a\n    -a-\n\n/\\By\\b/\n    xy\n\n/\\by\\B/\n    yz\n\n/\\By\\B/\n    xyz\n\n/\\w/\n    a\n\n/\\W/\n    -\n\\= Expect no match\n    a\n\n/a\\sb/\n    a b\n\n/a\\Sb/\n    a-b\n\\= Expect no match\n    a b\n\n/\\d/\n    1\n\n/\\D/\n    -\n\\= Expect no match\n    1\n\n/[\\w]/\n    a\n\n/[\\W]/\n    -\n\\= Expect no match\n    a\n\n/a[\\s]b/\n    a b\n\n/a[\\S]b/\n    a-b\n\\= Expect no match\n    a b\n\n/[\\d]/\n    1\n\n/[\\D]/\n    -\n\\= Expect no match\n    1\n\n/ab|cd/\n    abc\n    abcd\n\n/()ef/\n    def\n\n/$b/\n\n/a\\(b/\n    a(b\n\n/a\\(*b/\n    ab\n    a((b\n\n/a\\\\b/\n    a\\\\b\n\n/((a))/\n    abc\n\n/(a)b(c)/\n    abc\n\n/a+b+c/\n    aabbabc\n\n/a{1,}b{1,}c/\n    aabbabc\n\n/a.+?c/\n    abcabc\n\n/(a+|b)*/\n    ab\n\n/(a+|b){0,}/\n    ab\n\n/(a+|b)+/\n    ab\n\n/(a+|b){1,}/\n    ab\n\n/(a+|b)?/\n    ab\n\n/(a+|b){0,1}/\n    ab\n\n/[^ab]*/\n    cde\n\n/abc/\n\\= Expect no match\n    b\n\n/a*/\n    \\\n\n/([abc])*d/\n    abbbcd\n\n/([abc])*bcd/\n    abcd\n\n/a|b|c|d|e/\n    e\n\n/(a|b|c|d|e)f/\n    ef\n\n/abcd*efg/\n    abcdefg\n\n/ab*/\n    xabyabbbz\n    xayabbbz\n\n/(ab|cd)e/\n    abcde\n\n/[abhgefdc]ij/\n    hij\n\n/^(ab|cd)e/\n\n/(abc|)ef/\n    abcdef\n\n/(a|b)c*d/\n    abcd\n\n/(ab|ab*)bc/\n    abc\n\n/a([bc]*)c*/\n    abc\n\n/a([bc]*)(c*d)/\n    abcd\n\n/a([bc]+)(c*d)/\n    abcd\n\n/a([bc]*)(c+d)/\n    abcd\n\n/a[bcd]*dcdcde/\n    adcdcde\n\n/a[bcd]+dcdcde/\n\\= Expect no match\n    abcde\n    adcdcde\n\n/(ab|a)b*c/\n    abc\n\n/((a)(b)c)(d)/\n    abcd\n\n/[a-zA-Z_][a-zA-Z0-9_]*/\n    alpha\n\n/^a(bc+|b[eh])g|.h$/\n    abh\n\n/(bc+d$|ef*g.|h?i(j|k))/\n    effgz\n    ij\n    reffgz\n\\= Expect no match\n    effg\n    bcdd\n\n/((((((((((a))))))))))/\n    a\n\n/((((((((((a))))))))))\\10/\n    aa\n\n/(((((((((a)))))))))/\n    a\n\n/multiple words of text/\n\\= Expect no match\n    aa\n    uh-uh\n\n/multiple words/\n    multiple words, yeah\n\n/(.*)c(.*)/\n    abcde\n\n/\\((.*), (.*)\\)/\n    (a, b)\n\n/[k]/\n\n/abcd/\n    abcd\n\n/a(bc)d/\n    abcd\n\n/a[-]?c/\n    ac\n\n/(abc)\\1/\n    abcabc\n\n/([a-c]*)\\1/\n    abcabc\n\n/(a)|\\1/\n    a\n    ab\n\\= Expect no match\n    x\n\n/(([a-c])b*?\\2)*/\n    ababbbcbc\n\n/(([a-c])b*?\\2){3}/\n    ababbbcbc\n\n/((\\3|b)\\2(a)x)+/\n    aaaxabaxbaaxbbax\n\n/((\\3|b)\\2(a)){2,}/\n    bbaababbabaaaaabbaaaabba\n\n/abc/i\n    ABC\n    XABCY\n    ABABC\n\\= Expect no match\n    aaxabxbaxbbx\n    XBC\n    AXC\n    ABX\n\n/ab*c/i\n    ABC\n\n/ab*bc/i\n    ABC\n    ABBC\n\n/ab*?bc/i\n    ABBBBC\n\n/ab{0,}?bc/i\n    ABBBBC\n\n/ab+?bc/i\n    ABBC\n\n/ab+bc/i\n\\= Expect no match\n    ABC\n    ABQ\n\n/ab{1,}bc/i\n\n/ab+bc/i\n    ABBBBC\n\n/ab{1,}?bc/i\n    ABBBBC\n\n/ab{1,3}?bc/i\n    ABBBBC\n\n/ab{3,4}?bc/i\n    ABBBBC\n\n/ab{4,5}?bc/i\n\\= Expect no match\n    ABQ\n    ABBBBC\n\n/ab??bc/i\n    ABBC\n    ABC\n\n/ab{0,1}?bc/i\n    ABC\n\n/ab??bc/i\n\n/ab??c/i\n    ABC\n\n/x?(x|b)/\n    xb\n\n/x??(x|b)/\n    x\n\n/x?(x|b)/i\n    Xb\n\n/x??(x|b)/i\n    X\n\n/x{,2}(x|b)/\n    xb\n\n/x{,2}?(x|b)/\n    x\n\n/x{,2}(x|b)/i\n    Xb\n\n/x{,2}?(x|b)/i\n    X\n\n/[^b]?([^b]|b)/\n    xb\n\n/[^b]??([^b]|b)/\n    x\n\n/[^b]?([^b]|b)/i\n    Xb\n\n/[^b]??([^b]|b)/i\n    X\n\n/[^b]{,2}([^b]|b)/\n    xb\n\n/[^b]{,2}?([^b]|b)/\n    x\n\n/[^b]{,2}([^b]|b)/i\n    Xb\n\n/[^b]{,2}?([^b]|b)/i\n    X\n\n/ab{0,1}?c/i\n    ABC\n\n/^abc$/i\n    ABC\n\\= Expect no match\n    ABBBBC\n    ABCC\n\n/^abc/i\n    ABCC\n\n/^abc$/i\n\n/abc$/i\n    AABC\n\n/^/i\n    ABC\n\n/$/i\n    ABC\n\n/a.c/i\n    ABC\n    AXC\n\n/a.*?c/i\n    AXYZC\n\n/a.*c/i\n    AABC\n\\= Expect no match\n    AXYZD\n\n/a[bc]d/i\n    ABD\n\n/a[b-d]e/i\n    ACE\n\\= Expect no match\n    ABC\n    ABD\n\n/a[b-d]/i\n    AAC\n\n/a[-b]/i\n    A-\n\n/a[b-]/i\n    A-\n\n/a]/i\n    A]\n\n/a[]]b/i\n    A]B\n\n/a[^bc]d/i\n    AED\n\n/a[^-b]c/i\n    ADC\n\\= Expect no match\n    ABD\n    A-C\n\n/a[^]b]c/i\n    ADC\n\n/ab|cd/i\n    ABC\n    ABCD\n\n/()ef/i\n    DEF\n\n/$b/i\n\\= Expect no match\n    A]C\n    B\n\n/a\\(b/i\n    A(B\n\n/a\\(*b/i\n    AB\n    A((B\n\n/a\\\\b/i\n    A\\\\b\n    a\\\\B \n\n/((a))/i\n    ABC\n\n/(a)b(c)/i\n    ABC\n\n/a+b+c/i\n    AABBABC\n\n/a{1,}b{1,}c/i\n    AABBABC\n\n/a.+?c/i\n    ABCABC\n\n/a.*?c/i\n    ABCABC\n\n/a.{0,5}?c/i\n    ABCABC\n\n/(a+|b)*/i\n    AB\n\n/(a+|b){0,}/i\n    AB\n\n/(a+|b)+/i\n    AB\n\n/(a+|b){1,}/i\n    AB\n\n/(a+|b)?/i\n    AB\n\n/(a+|b){0,1}/i\n    AB\n\n/(a+|b){0,1}?/i\n    AB\n\n/[^ab]*/i\n    CDE\n\n/([abc])*d/i\n    ABBBCD\n\n/([abc])*bcd/i\n    ABCD\n\n/a|b|c|d|e/i\n    E\n\n/(a|b|c|d|e)f/i\n    EF\n\n/abcd*efg/i\n    ABCDEFG\n\n/ab*/i\n    XABYABBBZ\n    XAYABBBZ\n\n/(ab|cd)e/i\n    ABCDE\n\n/[abhgefdc]ij/i\n    HIJ\n\n/^(ab|cd)e/i\n\\= Expect no match\n    ABCDE\n\n/(abc|)ef/i\n    ABCDEF\n\n/(a|b)c*d/i\n    ABCD\n\n/(ab|ab*)bc/i\n    ABC\n\n/a([bc]*)c*/i\n    ABC\n\n/a([bc]*)(c*d)/i\n    ABCD\n\n/a([bc]+)(c*d)/i\n    ABCD\n\n/a([bc]*)(c+d)/i\n    ABCD\n\n/a[bcd]*dcdcde/i\n    ADCDCDE\n\n/a[bcd]+dcdcde/i\n\n/(ab|a)b*c/i\n    ABC\n\n/((a)(b)c)(d)/i\n    ABCD\n\n/[a-zA-Z_][a-zA-Z0-9_]*/i\n    ALPHA\n\n/^a(bc+|b[eh])g|.h$/i\n    ABH\n\n/(bc+d$|ef*g.|h?i(j|k))/i\n    EFFGZ\n    IJ\n    REFFGZ\n\\= Expect no match\n    ADCDCDE\n    EFFG\n    BCDD\n\n/((((((((((a))))))))))/i\n    A\n\n/((((((((((a))))))))))\\10/i\n    AA\n\n/(((((((((a)))))))))/i\n    A\n\n/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i\n    A\n\n/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i\n    C\n\n/multiple words of text/i\n\\= Expect no match\n    AA\n    UH-UH\n\n/multiple words/i\n    MULTIPLE WORDS, YEAH\n\n/(.*)c(.*)/i\n    ABCDE\n\n/\\((.*), (.*)\\)/i\n    (A, B)\n\n/[k]/i\n\n/abcd/i\n    ABCD\n\n/a(bc)d/i\n    ABCD\n\n/a[-]?c/i\n    AC\n\n/(abc)\\1/i\n    ABCABC\n\n/([a-c]*)\\1/i\n    ABCABC\n\n/a(?!b)./\n    abad\n\n/a(?=d)./\n    abad\n\n/a(?=c|d)./\n    abad\n\n/a(?:b|c|d)(.)/\n    ace\n\n/a(?:b|c|d)*(.)/\n    ace\n\n/a(?:b|c|d)+?(.)/\n    ace\n    acdbcdbe\n\n/a(?:b|c|d)+(.)/\n    acdbcdbe\n\n/a(?:b|c|d){2}(.)/\n    acdbcdbe\n\n/a(?:b|c|d){4,5}(.)/\n    acdbcdbe\n\n/a(?:b|c|d){4,5}?(.)/\n    acdbcdbe\n\n/a(?:b|c|d){6,7}(.)/\n    acdbcdbe\n\n/a(?:b|c|d){6,7}?(.)/\n    acdbcdbe\n\n/a(?:b|c|d){5,6}(.)/\n    acdbcdbe\n\n/a(?:b|c|d){5,6}?(.)/\n    acdbcdbe\n\n/a(?:b|c|d){5,7}(.)/\n    acdbcdbe\n\n/a(?:b|c|d){5,7}?(.)/\n    acdbcdbe\n\n/a(?:b|(c|e){1,2}?|d)+?(.)/\n    ace\n\n/^(.+)?B/\n    AB\n\n/^([^a-z])|(\\^)$/\n    .\n\n/^[<>]&/\n    <&OUT\n\n/^(a\\1?){4}$/\n    aaaaaaaaaa\n\\= Expect no match\n    AB\n    aaaaaaaaa\n    aaaaaaaaaaa\n\n/^(a(?(1)\\1)){4}$/\n    aaaaaaaaaa\n\\= Expect no match\n    aaaaaaaaa\n    aaaaaaaaaaa\n\n/(?<=a)b/\n    ab\n\\= Expect no match\n    cb\n    b\n\n/(?<!c)b/\n    ab\n    b\n    b\n\n/(?:..)*a/\n    aba\n\n/(?:..)*?a/\n    aba\n\n/^(?:b|a(?=(.)))*\\1/\n    abc\n\n/^(){3,5}/\n    abc\n\n/^(a+)*ax/\n    aax\n\n/^((a|b)+)*ax/\n    aax\n\n/^((a|bc)+)*ax/\n    aax\n\n/(a|x)*ab/\n    cab\n\n/(a)*ab/\n    cab\n\n/(?:(?i)a)b/\n    ab\n\n/((?i)a)b/\n    ab\n\n/(?:(?i)a)b/\n    Ab\n\n/((?i)a)b/\n    Ab\n\n/(?:(?i)a)b/\n\\= Expect no match\n    cb\n    aB\n\n/((?i)a)b/\n\n/(?i:a)b/\n    ab\n\n/((?i:a))b/\n    ab\n\n/(?i:a)b/\n    Ab\n\n/((?i:a))b/\n    Ab\n\n/(?i:a)b/\n\\= Expect no match\n    aB\n    aB\n\n/((?i:a))b/\n\n/(?:(?-i)a)b/i\n    ab\n\n/((?-i)a)b/i\n    ab\n\n/(?:(?-i)a)b/i\n    aB\n\n/((?-i)a)b/i\n    aB\n\n/(?:(?-i)a)b/i\n    aB\n\\= Expect no match\n    Ab\n    AB\n\n/(?-i:a)b/i\n    ab\n\n/((?-i:a))b/i\n    ab\n\n/(?-i:a)b/i\n    aB\n\n/((?-i:a))b/i\n    aB\n\n/(?-i:a)b/i\n\\= Expect no match\n    AB\n    Ab\n\n/((?-i:a))b/i\n\n/(?-i:a)b/i\n    aB\n\n/((?-i:a))b/i\n    aB\n\n/(?-i:a)b/i\n\\= Expect no match\n    Ab\n    AB\n\n/((?-i:a))b/i\n\n/((?-i:a.))b/i\n\\= Expect no match\n    AB\n    a\\nB\n\n/((?s-i:a.))b/i\n    a\\nB\n\n/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/\n    cabbbb\n\n/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/\n    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n\n/(ab)\\d\\1/i\n    Ab4ab\n    ab4Ab\n\n/foo\\w*\\d{4}baz/\n    foobar1234baz\n\n/x(~~)*(?:(?:F)?)?/\n    x~~\n\n/^a(?#xxx){3}c/\n    aaac\n\n/^a (?#xxx) (?#yyy) {3}c/x\n    aaac\n\n/(?<![cd])b/\n\\= Expect no match\n    B\\nB\n    dbcb\n\n/(?<![cd])[ab]/\n    dbaacb\n\n/(?<!(c|d))b/\n\n/(?<!(c|d))[ab]/\n    dbaacb\n\n/(?<!cd)[ab]/\n    cdaccb\n\n/^(?:a?b?)*$/\n    \\\n    a\n    ab\n    aaa   \n\\= Expect no match\n    dbcb\n    a--\n    aa-- \n\n/((?s)^a(.))((?m)^b$)/\n    a\\nb\\nc\\n\n\n/((?m)^b$)/\n    a\\nb\\nc\\n\n\n/(?m)^b/\n    a\\nb\\n\n\n/(?m)^(b)/\n    a\\nb\\n\n\n/((?m)^b)/\n    a\\nb\\n\n\n/\\n((?m)^b)/\n    a\\nb\\n\n\n/((?s).)c(?!.)/\n    a\\nb\\nc\\n\n    a\\nb\\nc\\n\n\n/((?s)b.)c(?!.)/\n    a\\nb\\nc\\n\n    a\\nb\\nc\\n\n\n/^b/\n\n/()^b/\n\\= Expect no match\n    a\\nb\\nc\\n\n    a\\nb\\nc\\n\n\n/((?m)^b)/\n    a\\nb\\nc\\n\n\n/(x)?(?(1)a|b)/\n\\= Expect no match\n    a\n    a\n\n/(x)?(?(1)b|a)/\n    a\n\n/()?(?(1)b|a)/\n    a\n\n/()(?(1)b|a)/\n\n/()?(?(1)a|b)/\n    a\n\n/^(\\()?blah(?(1)(\\)))$/\n    (blah)\n    blah\n\\= Expect no match\n    a\n    blah)\n    (blah\n\n/^(\\(+)?blah(?(1)(\\)))$/\n    (blah)\n    blah\n\\= Expect no match\n    blah)\n    (blah\n\n/(?(?!a)a|b)/\n\n/(?(?!a)b|a)/\n    a\n\n/(?(?=a)b|a)/\n\\= Expect no match\n    a\n    a\n\n/(?(?=a)a|b)/\n    a\n\n/(?=(a+?))(\\1ab)/\n    aaab\n\n/^(?=(a+?))\\1ab/\n\n/(\\w+:)+/\n    one:\n\n/$(?<=^(a))/\n    a\n\n/(?=(a+?))(\\1ab)/\n    aaab\n\n/^(?=(a+?))\\1ab/\n\\= Expect no match\n    aaab\n    aaab\n\n/([\\w:]+::)?(\\w+)$/\n    abcd\n    xy:z:::abcd\n\n/^[^bcd]*(c+)/\n    aexycd\n\n/(a*)b+/\n    caab\n\n/([\\w:]+::)?(\\w+)$/\n    abcd\n    xy:z:::abcd\n\\= Expect no match\n    abcd:\n    abcd:\n\n/^[^bcd]*(c+)/\n    aexycd\n\n/(>a+)ab/\n\n/(?>a+)b/\n    aaab\n\n/([[:]+)/\n    a:[b]:\n\n/([[=]+)/\n    a=[b]=\n\n/([[.]+)/\n    a.[b].\n\n/((?>a+)b)/\n    aaab\n\n/(?>(a+))b/\n    aaab\n\n/((?>[^()]+)|\\([^()]*\\))+/\n    ((abc(ade)ufh()()x\n\n/a\\Z/\n\\= Expect no match\n    aaab\n    a\\nb\\n\n\n/b\\Z/\n    a\\nb\\n\n\n/b\\z/\n\n/b\\Z/\n    a\\nb\n\n/b\\z/\n    a\\nb\n    \n/^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$/\n    a\n    abc\n    a-b\n    0-9 \n    a.b\n    5.6.7  \n    the.quick.brown.fox\n    a100.b200.300c  \n    12-ab.1245 \n\\= Expect no match\n    \\\n    .a\n    -a\n    a-\n    a.  \n    a_b \n    a.-\n    a..  \n    ab..bc \n    the.quick.brown.fox-\n    the.quick.brown.fox.\n    the.quick.brown.fox_\n    the.quick.brown.fox+       \n\n/(?>.*)(?<=(abcd|wxyz))/\n    alphabetabcd\n    endingwxyz\n\\= Expect no match\n    a rather long string that doesn't end with one of them\n\n/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/\n    word cat dog elephant mussel cow horse canary baboon snake shark otherword\n\\= Expect no match\n    word cat dog elephant mussel cow horse canary baboon snake shark\n  \n/word (?>[a-zA-Z0-9]+ ){0,30}otherword/\n\\= Expect no match\n    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope\n\n/(?<=\\d{3}(?!999))foo/\n    999foo\n    123999foo \n\\= Expect no match\n    123abcfoo\n    \n/(?<=(?!...999)\\d{3})foo/\n    999foo\n    123999foo \n\\= Expect no match\n    123abcfoo\n\n/(?<=\\d{3}(?!999)...)foo/\n    123abcfoo\n    123456foo \n\\= Expect no match\n    123999foo  \n    \n/(?<=\\d{3}...)(?<!999)foo/\n    123abcfoo   \n    123456foo \n\\= Expect no match\n    123999foo  \n\n/<a[\\s]+href[\\s]*=[\\s]*          # find <a href=\n ([\\\"\\'])?                       # find single or double quote\n (?(1) (.*?)\\1 | ([^\\s]+))       # if quote found, match up to next matching\n                                 # quote, otherwise match up to next space\n/isx\n    <a href=abcd xyz\n    <a href=\\\"abcd xyz pqr\\\" cats\n    <a href=\\'abcd xyz pqr\\' cats\n\n/<a\\s+href\\s*=\\s*                # find <a href=\n ([\"'])?                         # find single or double quote\n (?(1) (.*?)\\1 | (\\S+))          # if quote found, match up to next matching\n                                 # quote, otherwise match up to next space\n/isx\n    <a href=abcd xyz\n    <a href=\\\"abcd xyz pqr\\\" cats\n    <a href       =       \\'abcd xyz pqr\\' cats\n\n/<a\\s+href(?>\\s*)=(?>\\s*)        # find <a href=\n ([\"'])?                         # find single or double quote\n (?(1) (.*?)\\1 | (\\S+))          # if quote found, match up to next matching\n                                 # quote, otherwise match up to next space\n/isx\n    <a href=abcd xyz\n    <a href=\\\"abcd xyz pqr\\\" cats\n    <a href       =       \\'abcd xyz pqr\\' cats\n\n/(Z()|A)*/\n    ZABCDEFG\n\n/(Z(())|A)*/\n    ZABCDEFG\n\n/((?>Z)+|A)*/\n    ZABCDEFG\n\n/((?>)+|A)*/\n    ZABCDEFG\n\n/a*/g\n    abbab\n\n/[[:space:]]+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n     \n/[[:blank:]]+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n     \n/[\\s]+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n     \n/\\s+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n     \n/a\u000bb/x\n    ab\n\n/(?!\\A)x/m\n    a\\nxb\\n\n\n/(?!^)x/m\n\\= Expect no match\n    a\\nxb\\n\n\n/abc\\Qabc\\Eabc/\n    abcabcabc\n    \n/abc\\Q(*+|\\Eabc/\n    abc(*+|abc \n\n/   abc\\Q abc\\Eabc/x\n    abc abcabc\n\\= Expect no match\n    abcabcabc  \n    \n/abc#comment\n    \\Q#not comment\n    literal\\E/x\n    abc#not comment\\n    literal     \n\n/abc#comment\n    \\Q#not comment\n    literal/x\n    abc#not comment\\n    literal     \n\n/abc#comment\n    \\Q#not comment\n    literal\\E #more comment\n    /x\n    abc#not comment\\n    literal     \n\n/abc#comment\n    \\Q#not comment\n    literal\\E #more comment/x\n    abc#not comment\\n    literal     \n\n/\\Qabc\\$xyz\\E/\n    abc\\\\\\$xyz\n\n/\\Qabc\\E\\$\\Qxyz\\E/\n    abc\\$xyz\n\n/\\Gabc/\n    abc\n\\= Expect no match\n    xyzabc  \n\n/\\Gabc./g\n    abc1abc2xyzabc3\n\n/abc./g\n    abc1abc2xyzabc3 \n\n/a(?x: b c )d/\n    XabcdY\n\\= Expect no match \n    Xa b c d Y \n\n/((?x)x y z | a b c)/\n    XabcY\n    AxyzB \n\n/(?i)AB(?-i)C/\n    XabCY\n\\= Expect no match\n    XabcY  \n\n/((?i)AB(?-i)C|D)E/\n    abCE\n    DE\n\\= Expect no match\n    abcE\n    abCe  \n    dE\n    De    \n\n/(.*)\\d+\\1/\n    abc123abc\n    abc123bc \n\n/(.*)\\d+\\1/s\n    abc123abc\n    abc123bc \n    \n/((.*))\\d+\\1/\n    abc123abc\n    abc123bc  \n\n# This tests for an IPv6 address in the form where it can have up to\n# eight components, one and only one of which is empty. This must be\n# an internal component. \n\n/^(?!:)                       # colon disallowed at start\n  (?:                         # start of item\n    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or\n    (?(1)0 | () ) )           # if null previously matched, fail; else null\n    :                         # followed by colon\n  ){1,7}                      # end item; 1-7 of them required               \n  [0-9a-f]{1,4} $             # final hex number at end of string\n  (?(1)|.)                    # check that there was an empty component\n  /ix\n    a123::a123\n    a123:b342::abcd\n    a123:b342::324e:abcd\n    a123:ddde:b342::324e:abcd\n    a123:ddde:b342::324e:dcba:abcd\n    a123:ddde:9999:b342::324e:dcba:abcd\n\\= Expect no match\n    1:2:3:4:5:6:7:8\n    a123:bce:ddde:9999:b342::324e:dcba:abcd\n    a123::9999:b342::324e:dcba:abcd\n    abcde:2:3:4:5:6:7:8\n    ::1\n    abcd:fee0:123::   \n    :1\n    1:  \n\n/[z\\Qa-d]\\E]/\n    z\n    a\n    -\n    d\n    ] \n\\= Expect no match\n    b     \n\n/(a+)*b/\n\\= Expect no match\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \n    \n/(?i)reg(?:ul(?:[a]|ae)r|ex)/\n    REGular\n    regulaer\n    Regex  \n    regulr \n\n#if !ebcdic\n\n/[--]+/\n    \n    \n    \n    \n\n#endif\n\n/(?<=Z)X./\n  \\x84XAZXB\n\n/ab cd (?x) de fg/\n    ab cd defg\n\n/ab cd(?x) de fg/\n    ab cddefg\n\\= Expect no match \n    abcddefg\n\n/(?<![^f]oo)(bar)/\n    foobarX \n\\= Expect no match \n    boobarX\n\n/(?<![^f])X/\n    offX\n\\= Expect no match\n    onyX  \n\n/(?<=[^f])X/\n    onyX\n\\= Expect no match\n    offX \n\n/^/gm\n    a\\nb\\nc\\n\n    \\ \n    \n/(?<=C\\n)^/gm\n    A\\nC\\nC\\n \n\n/(?:(?(1)a|b)(X))+/\n    bXaX\n\n/(?:(?(1)\\1a|b)(X|Y))+/\n    bXXaYYaY\n    bXYaXXaX  \n\n/()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+/\n    bXXaYYaY\n\n/[[,abc,]+]/\n    abc]\n    a,b]\n    [a,b,c]  \n\n/(?-x: )/x\n    A\\x20B\n    \n/(?x)(?-x: \\s*#\\s*)/\n    A # B\n\\= Expect no match\n    #  \n    A s#s B\n\n/(?x-is)(?:(?-ixs) \\s*#\\s*) include/\n    A #include\n\\= Expect no match\n    A#include  \n    A #Include\n\n/a*b*\\w/\n    aaabbbb\n    aaaa\n    a\n\n/a*b?\\w/\n    aaabbbb\n    aaaa\n    a\n\n/a*b{0,4}\\w/\n    aaabbbb\n    aaaa\n    a\n\n/a*b{0,}\\w/\n    aaabbbb\n    aaaa\n    a\n    \n/a*\\d*\\w/\n    0a\n    a \n    \n/a*b *\\w/x\n    a \n\n/a*b#comment\n  *\\w/x\n    a \n\n/a* b *\\w/x\n    a \n\n/^\\w+=.*(\\\\\\n.*)*/\n    abc=xyz\\\\\\npqr\n\n/(?=(\\w+))\\1:/\n    abcd:\n\n/^(?=(\\w+))\\1:/\n    abcd:\n\n/^\\Eabc/\n    abc\n    \n/^[\\Eabc]/\n    a\n\\= Expect no match \n    E \n    \n/^[a-\\Ec]/\n    b\n\\= Expect no match\n    -\n    E    \n\n/^[a\\E\\E-\\Ec]/\n    b\n\\= Expect no match\n    -\n    E    \n\n/^[\\E\\Qa\\E-\\Qz\\E]+/\n    b\n\\= Expect no match\n    -  \n    \n/^[a\\Q]bc\\E]/\n    a\n    ]\n    c\n    \n/^[a-\\Q\\E]/\n    a\n    -     \n\n/^(a()*)*/\n    aaaa\n\n/^(?:a(?:(?:))*)*/\n    aaaa\n\n/^(a()+)+/\n    aaaa\n\n/^(?:a(?:(?:))+)+/\n    aaaa\n\n/(a){0,3}(?(1)b|(c|))*D/\n    abbD\n    ccccD\n    D  \n\n/(a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/(?>a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/(?:a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/\\Z/g\n  abc\\n\n  \n/^(?s)(?>.*)(?<!\\n)/\n  abc\n\\= Expect no match\n  abc\\n  \n\n/^(?![^\\n]*\\n\\z)/\n  abc\n\\= Expect no match\n  abc\\n \n  \n/\\z(?<!\\n)/\n  abc\n\\= Expect no match\n  abc\\n  \n\n/(.*(.)?)*/\n    abcd\n\n/( (A | (?(1)0|) )*   )/x\n    abcd\n\n/( ( (?(1)0|) )*   )/x\n    abcd\n\n/(  (?(1)0|)*   )/x\n    abcd\n\n/[[:abcd:xyz]]/\n    a]\n    :] \n    \n/[abc[:x\\]pqr]/\n    a\n    [\n    :\n    ]\n    p    \n\n/.*[op][xyz]/\n\\= Expect no match\n    fooabcfoo\n\n/(?(?=.*b)b|^)/\n   adc\n   abc \n\n/(?(?=^.*b)b|^)/\n   adc\n\\= Expect no match\n   abc \n\n/(?(?=.*b)b|^)*/\n   adc\n   abc \n\n/(?(?=.*b)b|^)+/\n   adc\n   abc \n\n/(?(?=b).*b|^d)/\n    abc\n\n/(?(?=.*b).*b|^d)/\n    abc\n\n/^%((?(?=[a])[^%])|b)*%$/\n    %ab%\n\n/(?i)a(?-i)b|c/\n    XabX\n    XAbX\n    CcC \n\\= Expect no match\n    XABX   \n\n/[\\x00-\\xff\\s]+/\n    \\x0a\\x0b\\x0c\\x0d\n\n/(abc)\\1/i\n\\= Expect no match\n   abc\n\n/(abc)\\1/\n\\= Expect no match\n   abc\n\n/[^a]*/i\n    12abc\n    12ABC\n\n/[^a]*+/i\n    12abc\n    12ABC\n\n/[^a]*?X/i\n\\= Expect no match\n    12abc\n    12ABC\n    \n/[^a]+?X/i\n\\= Expect no match\n    12abc\n    12ABC\n\n/[^a]?X/i\n    12aXbcX\n    12AXBCX\n    BCX \n\n/[^a]??X/i\n    12aXbcX\n    12AXBCX\n    BCX\n    \n/[^a]?+X/i\n    12aXbcX\n    12AXBCX\n    BCX \n\n/[^a]{2,3}/i\n    abcdef\n    ABCDEF  \n\n/[^a]{2,3}?/i\n    abcdef\n    ABCDEF  \n\n/[^a]{2,3}+/i\n    abcdef\n    ABCDEF  \n\n/((a|)+)+Z/\n    Z\n\n/(a)b|(a)c/\n    ac\n\n/(?>(a))b|(a)c/\n    ac\n\n/(?=(a))ab|(a)c/\n    ac\n\n/((?>(a))b|(a)c)/\n    ac\n\n/((?>(a))b|(a)c)++/\n    ac\n\n/(?:(?>(a))b|(a)c)++/\n    ac\n\n/(?=(?>(a))b|(a)c)(..)/\n    ac\n\n/(?>(?>(a))b|(a)c)/\n    ac\n\n/(?:(?>([ab])))+a=/aftertext\n    =ba=\n\n/(?>([ab]))+a=/aftertext\n    =ba=\n\n/((?>(a+)b)+(aabab))/\n    aaaabaaabaabab\n\n/(?>a+|ab)+?c/\n\\= Expect no match\n    aabc\n\n/(?>a+|ab)+c/\n\\= Expect no match\n    aabc\n\n/(?:a+|ab)+c/\n    aabc\n\n/(?(?=(a))a)/\n    a\n\n/(?(?=(a))a)(b)/\n    ab\n\n/^(?:a|ab)++c/\n\\= Expect no match\n    aaaabc\n\n/^(?>a|ab)++c/\n\\= Expect no match\n    aaaabc\n\n/^(?:a|ab)+c/\n    aaaabc\n\n/(?=abc){3}abc/aftertext\n    abcabcabc\n\\= Expect no match\n    xyz  \n    \n/(?=abc)+abc/aftertext\n    abcabcabc\n\\= Expect no match\n    xyz  \n    \n/(?=abc)++abc/aftertext\n    abcabcabc\n\\= Expect no match\n    xyz  \n    \n/(?=abc){0}xyz/\n    xyz \n\n/(?=abc){1}xyz/\n\\= Expect no match\n    xyz \n    \n/(?=(a))?./\n    ab\n    bc\n      \n/(?=(a))??./\n    ab\n    bc\n\n/^(?=(?1))?[az]([abc])d/\n    abd \n    zcdxx \n\n/^(?!a){0}\\w+/\n    aaaaa\n\n/(?<=(abc))?xyz/\n    abcxyz\n    pqrxyz \n\n/^[\\g<a>]+/\n    ggg<<<aaa>>>\n\\= Expect no match\n    \\\\ga  \n    \n/^[\\ga]+/\n    gggagagaxyz \n    \n/^[:a[:digit:]]+/\n    aaaa444:::Z \n\n/^[:a[:digit:]:b]+/\n    aaaa444:::bbbZ \n\n/[:a]xxx[b:]/\n     :xxx:\n     \n/(?<=a{2})b/i\n    xaabc\n\\= Expect no match\n    xabc  \n\n/(?<!a{2})b/i\n    xabc\n\\= Expect no match\n    xaabc  \n\n/(?<=a\\h)c/\n    xa c\n    \n/(?<=[^a]{2})b/\n    axxbc\n    aAAbc \n\\= Expect no match\n    xaabc    \n\n/(?<=[^a]{2})b/i\n    axxbc  \n\\= Expect no match\n    aAAbc \n    xaabc    \n\n/(?<=a\\H)c/\n    abc\n\n/(?<=a\\V)c/\n    abc\n    \n/(?<=a\\v)c/\n    a\\nc\n\n/(?(?=c)c|d)++Y/\n    XcccddYX\n\n/(?(?=c)c|d)*+Y/\n    XcccddYX\n\n/^(a{2,3}){2,}+a/\n    aaaaaaa\n\\= Expect no match\n    aaaaaa\n    aaaaaaaaa \n\n/^(a{2,3})++a/\n\\= Expect no match\n    aaaaaa\n\n/^(a{2,3})*+a/\n\\= Expect no match\n    aaaaaa\n\n/\\H\\h\\V\\v/\n    X X\\x0a\n    X\\x09X\\x0b\n\\= Expect no match\n    \\xa0 X\\x0a   \n    \n/\\H*\\h+\\V?\\v{3,4}/\n    \\x09\\x20\\xa0X\\x0a\\x0b\\x0c\\x0d\\x0a\n    \\x09\\x20\\xa0\\x0a\\x0b\\x0c\\x0d\\x0a\n    \\x09\\x20\\xa0\\x0a\\x0b\\x0c\n\\= Expect no match \n    \\x09\\x20\\xa0\\x0a\\x0b\n     \n/\\H{3,4}/\n    XY  ABCDE\n    XY  PQR ST \n    \n/.\\h{3,4}./\n    XY  AB    PQRS\n\n/\\h*X\\h?\\H+Y\\H?Z/\n    >XNNNYZ\n    >  X NYQZ\n\\= Expect no match\n    >XYZ   \n    >  X NY Z\n\n#if !ebcdic\n\n/\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c/\n    >XY\\x0aZ\\x0aA\\x0bNN\\x0c\n    >\\x0a\\x0dX\\x0aY\\x0a\\x0bZZZ\\x0aAAA\\x0bNNN\\x0c\n\n#endif\n\n/(foo)\\Kbar/\n    foobar\n   \n/(foo)(\\Kbar|baz)/\n    foobar\n    foobaz \n\n/(foo\\Kbar)baz/\n    foobarbaz\n\n/abc\\K|def\\K/g,aftertext\n    Xabcdefghi\n\n/ab\\Kc|de\\Kf/g,aftertext\n    Xabcdefghi\n    \n/(?=C)/g,aftertext\n    ABCDECBA\n    \n/^abc\\K/aftertext\n    abcdef\n\\= Expect no match\n    defabcxyz   \n\n/^(a(b))\\1\\g1\\g{1}\\g-1\\g{-1}\\g{-2}Z/\n    ababababbbabZXXXX\n\n/(?<A>tom|bon)-\\g{A}/\n    tom-tom\n    bon-bon \n    \n/(^(a|b\\g{-1}))/\n\\= Expect no match\n    bacxxx\n\n/(?|(abc)|(xyz))\\1/\n    abcabc\n    xyzxyz \n\\= Expect no match\n    abcxyz\n    xyzabc   \n    \n/(?|(abc)|(xyz))(?1)/\n    abcabc\n    xyzabc \n\\= Expect no match \n    xyzxyz \n \n/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/\n    XYabcdY\n\n/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/\n    XYabcdY\n\n/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/\n    XYabcdY\n\n/(?'abc'\\w+):\\k<abc>{2}/\n    a:aaxyz\n    ab:ababxyz\n\\= Expect no match\n    a:axyz\n    ab:abxyz\n\n/(?'abc'\\w+):\\g{abc}{2}/\n    a:aaxyz\n    ab:ababxyz\n\\= Expect no match\n    a:axyz\n    ab:abxyz\n\n/^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x\n    abd\n    ce\n\n/^(a.)\\g-1Z/\n    aXaXZ\n\n/^(a.)\\g{-1}Z/\n    aXaXZ\n\n/^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /x\n    abcd\n\n/(?<all>(?:(?:a(?&all))|(b))(c?))/\n    aabc\n    \n/(a(b)|(c))(?1)/\n    abc\n    cab \n\n/(?1)(a(b)|(c))/\n    abc\n    cab \n\n/(?<NAME>(?&NAME_PAT))\\s+(?<ADDR>(?&ADDRESS_PAT))\n  (?(DEFINE)\n  (?<NAME_PAT>[a-z]+)\n  (?<ADDRESS_PAT>\\d+)\n  )/x\n    metcalfe 33\n\n/(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}/\n    1.2.3.4\n    131.111.10.206\n    10.0.0.0\n\\= Expect no match\n    10.6\n    455.3.4.5\n\n/\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))/\n    1.2.3.4\n    131.111.10.206\n    10.0.0.0\n\\= Expect no match\n    10.6\n    455.3.4.5\n\n/^(\\w++|\\s++)*$/\n    now is the time for all good men to come to the aid of the party\n\\= Expect no match\n    this is not a line with only words and spaces!\n\n/(\\d++)(\\w)/\n    12345a\n\\= Expect no match\n    12345+\n\n/a++b/\n    aaab\n\n/(a++b)/\n    aaab\n\n/(a++)b/\n    aaab\n\n/([^()]++|\\([^()]*\\))+/\n    ((abc(ade)ufh()()x\n\n/\\(([^()]++|\\([^()]+\\))+\\)/\n    (abc)\n    (abc(def)xyz)\n\\= Expect no match\n    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/^([^()]|\\((?1)*\\))*$/\n    abc\n    a(b)c\n    a(b(c))d\n\\= Expect no match)\n    a(b(c)d\n\n/^>abc>([^()]|\\((?1)*\\))*<xyz<$/\n   >abc>123<xyz<\n   >abc>1(2)3<xyz<\n   >abc>(1(2)3)<xyz<\n\n/^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$/i\n    1221\n    Satanoscillatemymetallicsonatas\n    AmanaplanacanalPanama\n    AblewasIereIsawElba\n\\= Expect no match\n    Thequickbrownfox\n\n/^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$/\n    12\n    (((2+2)*-3)-7)\n    -12\n\\= Expect no match\n    ((2+2)*-3)-7)\n\n/^(x(y|(?1){2})z)/\n    xyz\n    xxyzxyzz\n\\= Expect no match\n    xxyzz\n    xxyzxyzxyzz\n\n/((< (?: (?(R) \\d++  | [^<>]*+) | (?2)) * >))/x\n    <>\n    <abcd>\n    <abc <123> hij>\n    <abc <def> hij>\n    <abc<>def>\n    <abc<>\n\\= Expect no match\n    <abc\n\n/^a+(*FAIL)/\n\\= Expect no match\n    aaaaaa\n    \n/a+b?c+(*FAIL)/\n\\= Expect no match\n    aaabccc\n\n/a+b?(*PRUNE)c+(*FAIL)/\n\\= Expect no match\n    aaabccc\n\n/a+b?(*COMMIT)c+(*FAIL)/\n\\= Expect no match\n    aaabccc\n    \n/a+b?(*SKIP)c+(*FAIL)/\n\\= Expect no match\n    aaabcccaaabccc\n\n/^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})/\n    aaaxxxxxx\n    aaa++++++ \n    bbbxxxxx\n    bbb+++++ \n    cccxxxx\n    ccc++++ \n    dddddddd   \n\n/^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})/\n    aaaxxxxxx\n    aaa++++++ \n    bbbxxxxx\n    bbb+++++ \n    cccxxxx\n    ccc++++ \n    dddddddd   \n\n/a+b?(*THEN)c+(*FAIL)/\n\\= Expect no match\n    aaabccc\n\n/(A (A|B(*ACCEPT)|C) D)(E)/x\n    AB\n    ABX\n    AADE\n    ACDE\n\\= Expect no match\n    AD \n        \n/^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$/i\n    1221\n    Satan, oscillate my metallic sonatas!\n    A man, a plan, a canal: Panama!\n    Able was I ere I saw Elba.\n\\= Expect no match\n    The quick brown fox\n\n/^((.)(?1)\\2|.)$/\n    a\n    aba\n    aabaa  \n    abcdcba \n    pqaabaaqp  \n    ablewasiereisawelba\n\\= Expect no match     \n    rhubarb\n    the quick brown fox  \n\n/(a)(?<=b(?1))/\n    baz\n\\= Expect no match\n    caz  \n    \n/(?<=b(?1))(a)/\n    zbaaz\n\\= Expect no match\n    aaa  \n    \n/(?<X>a)(?<=b(?&X))/\n    baz\n\n/^(?|(abc)|(def))\\1/\n    abcabc\n    defdef \n\\= Expect no match\n    abcdef\n    defabc   \n    \n/^(?|(abc)|(def))(?1)/\n    abcabc\n    defabc\n\\= Expect no match\n    defdef\n    abcdef    \n\n/(?:a(?<quote> (?<apostrophe>')|(?<realquote>\")) |b(?<quote> (?<apostrophe>')|(?<realquote>\")) ) (?('quote')[a-z]+|[0-9]+)/x,dupnames\n    a\\\"aaaaa\n    b\\\"aaaaa \n\\= Expect no match \n    b\\\"11111\n\n/(?:(?1)|B)(A(*F)|C)/\n    ABCD\n    CCD\n\\= Expect no match\n    CAD   \n\n/^(?:(?1)|B)(A(*F)|C)/\n    CCD\n    BCD \n\\= Expect no match\n    ABCD\n    CAD\n    BAD    \n\n/(?:(?1)|B)(A(*ACCEPT)XX|C)D/\n    AAD\n    ACD\n    BAD\n    BCD\n    BAX  \n\\= Expect no match\n    ACX\n    ABC   \n\n/(?(DEFINE)(A))B(?1)C/\n    BAC\n\n/(?(DEFINE)((A)\\2))B(?1)C/\n    BAAC\n\n/(?<pn> \\( ( [^()]++ | (?&pn) )* \\) )/x\n    (ab(cd)ef)\n\n/^(?=a(*SKIP)b|ac)/\n\\= Expect no match\n    ac\n    \n/^(?=a(*PRUNE)b)/\n    ab  \n\\= Expect no match \n    ac\n\n/^(?=a(*ACCEPT)b)/\n    ac\n\n/(?>a\\Kb)/\n    ab\n\n/((?>a\\Kb))/\n    ab\n\n/(a\\Kb)/\n    ab\n    \n/^a\\Kcz|ac/\n    ac\n    \n/(?>a\\Kbz|ab)/\n    ab \n\n/^(?&t)(?(DEFINE)(?<t>a\\Kb))$/\n    ab\n\n/^([^()]|\\((?1)*\\))*$/\n    a(b)c\n    a(b(c)d)e \n\n/(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/\n    0\n    00\n    0000  \n\n/(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/\n    0\n    00\n    0000  \n\n# This one does fail, as expected, in Perl. It needs the complex item at the\n# end of the pattern. A single letter instead of (B|D) makes it not fail, which\n# I think is a Perl bug.\n\n/A(*COMMIT)(B|D)/\n\\= Expect no match\n    ACABX\n\n# Check the use of names for failure\n\n/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark\n\\= Expect no match\n    AC\n    CB    \n    \n/(*MARK:A)(*SKIP:B)(C|X)/mark\n    C\n\\= Expect no match\n    D\n     \n/^(A(*THEN:A)B|C(*THEN:B)D)/mark\n\\= Expect no match\n    CB    \n\n/^(?:A(*THEN:A)B|C(*THEN:B)D)/mark\n\\= Expect no match\n    CB    \n    \n/^(?>A(*THEN:A)B|C(*THEN:B)D)/mark\n\\= Expect no match\n    CB    \n    \n# This should succeed, as the skip causes bump to offset 1 (the mark). Note\n# that we have to have something complicated such as (B|Z) at the end because,\n# for Perl, a simple character somehow causes an unwanted optimization to mess\n# with the handling of backtracking verbs.\n\n/A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/x,mark\n    AAAC\n    \n# Test skipping over a non-matching mark.\n\n/A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/x,mark\n    AAAC\n    \n# Check shorthand for MARK.\n\n/A(*:A)A+(*SKIP:A)(B|Z) | AC/x,mark\n    AAAC\n\n/(*:A)A+(*SKIP:A)(B|Z)/mark\n\\= Expect no match\n    AAAC\n\n# This should succeed, as a non-existent skip name disables the skip.\n\n/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark\n    AAAC\n\n/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/x,mark\n    AAAC\n\n# COMMIT at the start of a pattern should act like an anchor. Again, however,\n# we need the complication for Perl.\n\n/(*COMMIT)(A|P)(B|P)(C|P)/\n    ABCDEFG\n\\= Expect no match\n    DEFGABC  \n\n# COMMIT inside an atomic group can't stop backtracking over the group.\n\n/(\\w+)(?>b(*COMMIT))\\w{2}/\n    abbb\n\n/(\\w+)b(*COMMIT)\\w{2}/\n\\= Expect no match\n    abbb\n\n# Check opening parens in comment when seeking forward reference.\n\n/(?&t)(?#()(?(DEFINE)(?<t>a))/\n    bac\n\n# COMMIT should override THEN.\n\n/(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/\n\\= Expect no match\n  yes\n\n/(?>(*COMMIT)(yes|no)(*THEN)(*F))?/\n\\= Expect no match\n  yes\n\n/b?(*SKIP)c/\n    bc\n    abc\n   \n/(*SKIP)bc/\n\\= Expect no match\n    a\n\n/(*SKIP)b/\n\\= Expect no match\n    a \n\n/(?P<abn>(?P=abn)xxx|)+/\n    xxx\n\n/(?i:([^b]))(?1)/\n    aa\n    aA     \n\\= Expect no match\n    ab\n    aB\n    Ba\n    ba\n\n/^(?&t)*+(?(DEFINE)(?<t>a))\\w$/\n    aaaaaaX\n\\= Expect no match \n    aaaaaa \n\n/^(?&t)*(?(DEFINE)(?<t>a))\\w$/\n    aaaaaaX\n    aaaaaa \n\n/^(a)*+(\\w)/\n    aaaaX\n    YZ \n\\= Expect no match \n    aaaa\n\n/^(?:a)*+(\\w)/\n    aaaaX\n    YZ \n\\= Expect no match \n    aaaa\n\n/^(a)++(\\w)/\n    aaaaX\n\\= Expect no match \n    aaaa\n    YZ \n\n/^(?:a)++(\\w)/\n    aaaaX\n\\= Expect no match \n    aaaa\n    YZ \n\n/^(a)?+(\\w)/\n    aaaaX\n    YZ \n\n/^(?:a)?+(\\w)/\n    aaaaX\n    YZ \n\n/^(a){2,}+(\\w)/\n    aaaaX\n\\= Expect no match\n    aaa\n    YZ \n\n/^(?:a){2,}+(\\w)/\n    aaaaX\n\\= Expect no match\n    aaa\n    YZ \n\n/(a|)*(?1)b/\n    b\n    ab\n    aab  \n\n/(a)++(?1)b/\n\\= Expect no match\n    ab \n    aab\n\n/(a)*+(?1)b/\n\\= Expect no match\n    ab\n    aab  \n\n/(?1)(?:(b)){0}/\n    b\n\n/(foo ( \\( ((?:(?> [^()]+ )|(?2))*) \\) ) )/x\n    foo(bar(baz)+baz(bop))\n\n/(A (A|B(*ACCEPT)|C) D)(E)/x\n    AB\n\n/\\A.*?(a|bc)/\n    ba\n\n/\\A.*?(?:a|bc)++/\n    ba\n\n/\\A.*?(a|bc)++/\n    ba\n\n/\\A.*?(?:a|bc|d)/\n    ba\n\n/(?:(b))++/\n    beetle\n\n/(?(?=(a(*ACCEPT)z))a)/\n    a\n\n/^(a)(?1)+ab/\n    aaaab\n    \n/^(a)(?1)++ab/\n\\= Expect no match\n    aaaab\n\n/^(?=a(*:M))aZ/mark\n    aZbc\n\n/^(?!(*:M)b)aZ/mark\n    aZbc\n\n/(?(DEFINE)(a))?b(?1)/\n    backgammon\n\n/^\\N+/\n    abc\\ndef\n    \n/^\\N{1,}/\n    abc\\ndef \n\n/(?(R)a+|(?R)b)/\n    aaaabcde\n\n/(?(R)a+|((?R))b)/\n    aaaabcde\n\n/((?(R)a+|(?1)b))/\n    aaaabcde\n\n/((?(R1)a+|(?1)b))/\n    aaaabcde\n    \n/((?(R)a|(?1)))*/\n    aaa\n\n/((?(R)a|(?1)))+/\n    aaa \n\n/a(*:any \nname)/mark\n    abc\n    \n/(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/\n    a\n    ba\n    bba \n    \n# Checking revised (*THEN) handling.\n\n# Capture\n\n/^.*? (a(*THEN)b) c/x\n\\= Expect no match\n    aabc\n\n/^.*? (a(*THEN)b|(*F)) c/x\n    aabc\n\n/^.*? ( (a(*THEN)b) | (*F) ) c/x\n    aabc\n\n/^.*? ( (a(*THEN)b) ) c/x\n\\= Expect no match\n    aabc\n\n# Non-capture\n\n/^.*? (?:a(*THEN)b) c/x\n\\= Expect no match\n    aabc\n\n/^.*? (?:a(*THEN)b|(*F)) c/x\n    aabc\n\n/^.*? (?: (?:a(*THEN)b) | (*F) ) c/x\n    aabc\n\n/^.*? (?: (?:a(*THEN)b) ) c/x\n\\= Expect no match\n    aabc\n\n# Atomic\n\n/^.*? (?>a(*THEN)b) c/x\n\\= Expect no match\n    aabc\n\n/^.*? (?>a(*THEN)b|(*F)) c/x\n    aabc\n\n/^.*? (?> (?>a(*THEN)b) | (*F) ) c/x\n    aabc\n\n/^.*? (?> (?>a(*THEN)b) ) c/x\n\\= Expect no match\n    aabc\n\n# Possessive capture\n\n/^.*? (a(*THEN)b)++ c/x\n\\= Expect no match\n    aabc\n\n/^.*? (a(*THEN)b|(*F))++ c/x\n    aabc\n\n/^.*? ( (a(*THEN)b)++ | (*F) )++ c/x\n    aabc\n\n/^.*? ( (a(*THEN)b)++ )++ c/x\n\\= Expect no match\n    aabc\n\n# Possessive non-capture\n\n/^.*? (?:a(*THEN)b)++ c/x\n\\= Expect no match\n    aabc\n\n/^.*? (?:a(*THEN)b|(*F))++ c/x\n    aabc\n\n/^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x\n    aabc\n\n/^.*? (?: (?:a(*THEN)b)++ )++ c/x\n\\= Expect no match\n    aabc\n    \n# Condition assertion\n\n/^(?(?=a(*THEN)b)ab|ac)/\n    ac\n \n# Condition\n\n/^.*?(?(?=a)a|b(*THEN)c)/\n\\= Expect no match\n    ba\n\n/^.*?(?:(?(?=a)a|b(*THEN)c)|d)/\n    ba\n\n/^.*?(?(?=a)a(*THEN)b|c)/\n\\= Expect no match\n    ac\n\n# Assertion\n\n/^.*(?=a(*THEN)b)/\n    aabc\n\n# --------------------------\n\n/(?>a(*:m))/imsx,mark\n    a\n\n/(?>(a)(*:m))/imsx,mark\n    a\n\n/(?<=a(*ACCEPT)b)c/\n    xacd\n\n/(?<=(a(*ACCEPT)b))c/\n    xacd\n\n/(?<=(a(*COMMIT)b))c/\n    xabcd\n\\= Expect no match \n    xacd\n    \n/(?<!a(*FAIL)b)c/\n    xcd\n    acd \n\n/(?<=a(*:N)b)c/mark\n    xabcd\n    \n/(?<=a(*PRUNE)b)c/\n    xabcd \n\n/(?<=a(*SKIP)b)c/\n    xabcd \n\n/(?<=a(*THEN)b)c/\n    xabcd \n\n/(a)(?2){2}(.)/\n    abcd\n\n/(*MARK:A)(*PRUNE:B)(C|X)/mark\n    C\n\\= Expect no match\n    D \n\n/(*MARK:A)(*PRUNE:B)(C|X)/mark\n    C\n\\= Expect no match\n    D \n\n/(*MARK:A)(*THEN:B)(C|X)/mark\n    C\n\\= Expect no match\n    D \n\n/(*MARK:A)(*THEN:B)(C|X)/mark,no_start_optimize\n    C\n\\= Expect no match\n    D \n\n/(*MARK:A)(*THEN:B)(C|X)/mark\n    C\n\\= Expect no match\n    D \n\n/(*COMMIT)ABC/no_start_optimize\n    ABC\n\\= Expect no match\n    DEFABC\n\n/(*COMMIT)ABC/\n    ABC\n    DEFABC\n\n# This should fail, as the skip causes a bump to offset 3 (the skip).\n\n/A(*MARK:A)A+(*SKIP)(B|Z) | AC/x,mark\n\\= Expect no match\n    AAAC\n\n# Same \n\n/A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/x,mark\n\\= Expect no match\n    AAAC\n\n/A(*:A)A+(*SKIP)(B|Z) | AC/x,mark\n\\= Expect no match\n    AAAC\n\n# This should fail, as a null name is the same as no name.\n\n/A(*MARK:A)A+(*SKIP:)(B|Z) | AC/x,mark\n\\= Expect no match\n    AAAC\n\n# A check on what happens after hitting a mark and them bumping along to\n# something that does not even start. Perl reports tags after the failures\n# here, though it does not when the individual letters are made into something\n# more complicated.\n\n/A(*:A)B|XX(*:B)Y/mark\n    AABC\n    XXYZ \n\\= Expect no match\n    XAQQ  \n    XAQQXZZ  \n    AXQQQ \n    AXXQQQ \n    \n/^(A(*THEN:A)B|C(*THEN:B)D)/mark\n    AB\n    CD\n\\= Expect no match\n    AC\n    CB    \n    \n/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark\n    AB\n    CD\n\\= Expect no match\n    AC\n    CB    \n    \n# An empty name does not pass back an empty string. It is the same as if no\n# name were given.\n\n/^(A(*PRUNE:)B|C(*PRUNE:B)D)/mark\n    AB\n    CD \n\n# PRUNE goes to next bumpalong; COMMIT does not.\n    \n/A(*PRUNE:A)B/mark\n    ACAB\n\n# Mark names can be duplicated.\n\n/A(*:A)B|X(*:A)Y/mark\n    AABC\n    XXYZ \n    \n/b(*:m)f|a(*:n)w/mark\n    aw \n\\= Expect no match \n    abc\n\n/b(*:m)f|aw/mark\n    abaw\n\\= Expect no match \n    abc\n    abax \n\n/A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/x,mark\n    AAAC\n\n/(?=a(*MARK:A)b)..x/mark\n    abxy\n\\= Expect no match\n    abpq  \n\n/(?=a(*MARK:A)b)..(*:Y)x/mark\n    abxy\n\\= Expect no match\n    abpq  \n\n/(?=a(*PRUNE:A)b)..x/mark\n    abxy\n\\= Expect no match\n    abpq  \n\n/(?=a(*PRUNE:A)b)..(*:Y)x/mark\n    abxy\n\\= Expect no match\n    abpq  \n\n/(?=a(*THEN:A)b)..x/mark\n    abxy\n\\= Expect no match\n    abpq  \n\n/(?=a(*THEN:A)b)..(*:Y)x/mark\n    abxy\n\\= Expect no match\n    abpq  \n\n/(another)?(\\1?)test/\n    hello world test\n\n/(another)?(\\1+)test/\n\\= Expect no match\n    hello world test\n\n/(a(*COMMIT)b){0}a(?1)|aac/\n    aac\n\n/((?:a?)*)*c/\n    aac   \n\n/((?>a?)*)*c/\n    aac   \n\n/(?>.*?a)(?<=ba)/\n    aba\n\n/(?:.*?a)(?<=ba)/\n    aba\n\n/(?>.*?a)b/s\n    aab\n\n/(?>.*?a)b/\n    aab\n\n/(?>^a)b/s\n\\= Expect no match\n    aab\n\n/(?>.*?)(?<=(abcd)|(wxyz))/\n    alphabetabcd\n    endingwxyz \n\n/(?>.*)(?<=(abcd)|(wxyz))/\n    alphabetabcd\n    endingwxyz \n\n/(?>.*)foo/\n\\= Expect no match\n    abcdfooxyz\n    \n/(?>.*?)foo/\n    abcdfooxyz\n\n/(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/\n    ac\n    \n/(?:(a(*SKIP)b)){0}(?:(?1)|ac)/\n    ac \n\n/(?<=(*SKIP)ac)a/\n\\= Expect no match\n    aa\n\n/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark\n    AAAC\n\n/a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/mark\n    acacd\n\n/A(*SKIP:m)x|A(*SKIP:n)x|AB/mark\n    AB\n\n/((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/mark\n    acacd\n\n# Tests that try to figure out how Perl works. My hypothesis is that the first\n# verb that is backtracked onto is the one that acts. This seems to be the case\n# almost all the time, but there is one exception that is perhaps a bug.\n\n# This matches \"aaaac\"; each PRUNE advances one character until the subject no\n# longer starts with 5 'a's.\n\n/aaaaa(*PRUNE)b|a+c/\n    aaaaaac\n\n# Putting SKIP in front of PRUNE makes no difference, as it is never\n# backtracked onto, whether or not it has a label.\n\n/aaaaa(*SKIP)(*PRUNE)b|a+c/\n    aaaaaac\n\n/aaaaa(*SKIP:N)(*PRUNE)b|a+c/\n    aaaaaac\n\n/aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/\n    aaaaaac\n\n# Putting THEN in front makes no difference.\n    \n/aaaaa(*THEN)(*PRUNE)b|a+c/\n    aaaaaac\n \n# However, putting COMMIT in front of the prune changes it to \"no match\". I \n# think this is inconsistent and possibly a bug. For the moment, running this\n# test is moved out of the Perl-compatible file. \n\n/aaaaa(*COMMIT)(*PRUNE)b|a+c/\n    \n# OK, lets play the same game again using SKIP instead of PRUNE.\n\n# This matches \"ac\" because SKIP forces the next match to start on the\n# sixth \"a\". \n\n/aaaaa(*SKIP)b|a+c/\n    aaaaaac\n \n# Putting PRUNE in front makes no difference. \n\n/aaaaa(*PRUNE)(*SKIP)b|a+c/\n    aaaaaac\n\n# Putting THEN in front makes no difference. \n\n/aaaaa(*THEN)(*SKIP)b|a+c/\n    aaaaaac\n\n# In this case, neither does COMMIT. This still matches \"ac\". \n\n/aaaaa(*COMMIT)(*SKIP)b|a+c/\n    aaaaaac\n    \n# This gives \"no match\", as expected. \n\n/aaaaa(*COMMIT)b|a+c/\n\\= Expect no match\n    aaaaaac\n\n# ---- Tests using THEN ----\n\n# This matches \"aaaaaac\", as expected. \n\n/aaaaa(*THEN)b|a+c/\n    aaaaaac\n\n# Putting SKIP in front makes no difference. \n\n/aaaaa(*SKIP)(*THEN)b|a+c/\n    aaaaaac\n    \n# Putting PRUNE in front makes no difference. \n\n/aaaaa(*PRUNE)(*THEN)b|a+c/\n    aaaaaac\n    \n# Putting COMMIT in front makes no difference. \n\n/aaaaa(*COMMIT)(*THEN)b|a+c/\n    aaaaaac\n    \n# End of \"priority\" tests  \n\n/aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/\n    aaaaaa\n\n/aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/\n    aaaaaa\n\n/aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/\n    aaaaaa\n\n/aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/\n    aaaaaa\n\n/a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/\n    aaaac\n\n/a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/\n    aaaac\n\n/aaa(*PRUNE:A)a(*SKIP:A)b|a+c/\n    aaaac\n\n/aaa(*MARK:A)a(*SKIP:A)b|a+c/\n    aaaac\n\n/a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/mark\n    aaaaaac\n\n/.?(a|b(*THEN)c)/\n    ba\n\n/(a(*COMMIT)b)c|abd/\n    abc\n\\= Expect no match\n    abd\n\n/(?=a(*COMMIT)b)abc|abd/\n    abc\n    abd\n\n/(?>a(*COMMIT)b)c|abd/\n    abc\n    abd\n\n/a(?=b(*COMMIT)c)[^d]|abd/\n    abc\n\\= Expect no match\n    abd\n\n/a(?=bc).|abd/\n    abd\n    abc \n    \n/a(?>b(*COMMIT)c)d|abd/\n\\= Expect no match\n    abceabd \n\n/a(?>bc)d|abd/\n    abceabd \n\n/(?>a(*COMMIT)b)c|abd/\n    abd\n\n/(?>a(*COMMIT)c)d|abd/\n\\= Expect no match\n    abd\n\n/((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/\n    ac \n    \n# These tests were formerly in test 2, but changes in PCRE and Perl have\n# made them compatible. \n    \n/^(a)?(?(1)a|b)+$/\n\\= Expect no match\n    a\n\n/A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/x,mark\n\\= Expect no match\n    AAAC\n\n/^((abc|abcx)(*THEN)y|abcd)/\n    abcd\n\\= Expect no match \n    abcxy \n    \n/^((yes|no)(*THEN)(*F))?/\n\\= Expect no match\n    yes\n\n/(A (.*)   C? (*THEN)  | A D) (*FAIL)/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\n\n/(A (.*)   C? (*THEN)  | A D) z/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\n\n/(A (.*)   C? (*THEN)  | A D) \\s* (*FAIL)/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\n\n/(A (.*)   C? (*THEN)  | A D) \\s* z/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\n\n/(A (.*)   (?:C|) (*THEN)  | A D) (*FAIL)/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\n\n/(A (.*)   (?:C|) (*THEN)  | A D) z/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\n\n/(A (.*)   C{0,6} (*THEN)  | A D) (*FAIL)/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\n\n/(A (.*)   C{0,6} (*THEN)  | A D) z/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\n\n/(A (.*)   (CE){0,6} (*THEN)  | A D) (*FAIL)/x\n\\= Expect no match\n    AbcdCEBefgBhiBqz\n\n/(A (.*)   (CE){0,6} (*THEN)  | A D) z/x\n\\= Expect no match\n    AbcdCEBefgBhiBqz\n\n/(A (.*)   (CE*){0,6} (*THEN)  | A D) (*FAIL)/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\n\n/(A (.*)   (CE*){0,6} (*THEN)  | A D) z/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\n\n/(?=a(*COMMIT)b|ac)ac|ac/\n\\= Expect no match\n    ac\n\n/(?=a(*COMMIT)b|(ac)) ac | (a)c/x\n\\= Expect no match\n    ac\n\n# ----\n\n/(?(?!b(*THEN)a)bn|bnn)/\n    bnn \n\n/(?!b(*SKIP)a)bn|bnn/\n    bnn\n    \n/(?(?!b(*SKIP)a)bn|bnn)/\n    bnn \n\n/(?!b(*PRUNE)a)bn|bnn/\n    bnn\n    \n/(?(?!b(*PRUNE)a)bn|bnn)/\n    bnn \n   \n/(?!b(*COMMIT)a)bn|bnn/\n    bnn\n    \n/(?(?!b(*COMMIT)a)bn|bnn)/\n   bnn \n\n/(?=b(*SKIP)a)bn|bnn/\n\\= Expect no match\n    bnn\n\n/(?=b(*THEN)a)bn|bnn/\n    bnn\n    \n/^(?!a(*SKIP)b)/\n    ac\n\n/^(?!a(*SKIP)b)../\n    acd\n\n/(?!a(*SKIP)b)../\n    acd\n\n/^(?(?!a(*SKIP)b))/\n    ac\n\n/^(?!a(*PRUNE)b)../\n    acd\n\n/(?!a(*PRUNE)b)../\n    acd\n\n/(?!a(*COMMIT)b)ac|cd/\n    ac\n\n/\\A.*?(?:a|bc)/\n    ba\n\n/^(A(*THEN)B|C(*THEN)D)/\n    CD           \n\n/(*:m(m)(?&y)(?(DEFINE)(?<y>b))/mark\n    abc\n\n/(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/mark\n    abc\n\n/(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/mark\n    abc\n\n/(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/mark\n    abc\n\n/^\\d*\\w{4}/\n    1234\n\\= Expect no match\n    123 \n\n/^[^b]*\\w{4}/\n    aaaa\n\\= Expect no match\n    aaa     \n\n/^[^b]*\\w{4}/i\n    aaaa\n\\= Expect no match\n    aaa     \n\n/^a*\\w{4}/\n    aaaa\n\\= Expect no match\n    aaa     \n\n/^a*\\w{4}/i\n    aaaa\n\\= Expect no match\n    aaa     \n\n/(?:(?<n>foo)|(?<n>bar))\\k<n>/dupnames\n    foofoo\n    barbar\n\n/(?<n>A)(?:(?<n>foo)|(?<n>bar))\\k<n>/dupnames\n    AfooA\n    AbarA  \n\\= Expect no match \n    Afoofoo\n    Abarbar\n\n/^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$/\n    1 IN SOA non-sp1 non-sp2(\n\n/^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/x,dupnames\n    Ax\n    BAxy \n\n#if !ebcdic\n\n/^A\\xBz/\n    A\\x{0B}z\n\n/^A\\xABz/\n    A\\x{AB}z\n\n/^A\\xABCz/\n    A\\x{AB}Cz\n\n/^A\\o{123}B/\n    A\\123B\n\n#endif\n\n/ ^ a + + b $ /x\n    aaaab\n    \n/ ^ a + #comment\n  + b $ /x\n    aaaab\n    \n/ ^ a + #comment\n  #comment\n  + b $ /x\n    aaaab\n    \n/ ^ (?> a + ) b $ /x\n    aaaab \n\n/ ^ ( a + ) + + \\w $ /x\n    aaaab \n\n/(?:a\\Kb)*+/aftertext\n    ababc\n\n/(?>a\\Kb)*/aftertext\n    ababc\n\n/(?:a\\Kb)*/aftertext\n    ababc\n\n/(a\\Kb)*+/aftertext\n    ababc\n\n/(a\\Kb)*/aftertext\n    ababc\n\n/(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/\n\\= Expect no match\n    acb\n\n/\\A(?:[^\\\"]++|\\\"(?:[^\\\"]*+|\\\"\\\")*+\\\")++/\n    NON QUOTED \\\"QUOT\\\"\\\"ED\\\" AFTER \\\"NOT MATCHED\n\n/\\A(?:[^\\\"]++|\\\"(?:[^\\\"]++|\\\"\\\")*+\\\")++/\n    NON QUOTED \\\"QUOT\\\"\\\"ED\\\" AFTER \\\"NOT MATCHED\n\n/\\A(?:[^\\\"]++|\\\"(?:[^\\\"]++|\\\"\\\")++\\\")++/\n    NON QUOTED \\\"QUOT\\\"\\\"ED\\\" AFTER \\\"NOT MATCHED\n\n/\\A([^\\\"1]++|[\\\"2]([^\\\"3]*+|[\\\"4][\\\"5])*+[\\\"6])++/\n    NON QUOTED \\\"QUOT\\\"\\\"ED\\\" AFTER \\\"NOT MATCHED\n\n/^\\w+(?>\\s*)(?<=\\w)/\n    test test\n\n/(?P<same>a)(?P<same>b)/g,dupnames\n    abbaba\n\n/(?P<same>a)(?P<same>b)(?P=same)/g,dupnames\n    abbaba\n\n/(?P=same)?(?P<same>a)(?P<same>b)/g,dupnames\n    abbaba\n\n/(?:(?P=same)?(?:(?P=same)(?P<same>a)(?P=same)|(?P=same)?(?P<same>b)(?P=same)){2}(?P=same)(?P<same>c)(?P=same)){2}(?P<same>z)?/g,dupnames\n\\= Expect no match\n    bbbaaaccccaaabbbcc\n\n/(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/\n    acl\n    bdl\n    adl\n    bcl    \n\n/\\sabc/\n    \\x{0b}abc\n\n/[\\Qa]\\E]+/\n    aa]]\n\n/[\\Q]a\\E]+/\n    aa]]\n\n/A((((((((a))))))))\\8B/ \n    AaaB\n\n/A(((((((((a)))))))))\\9B/ \n    AaaB\n    \n/A[\\8\\9]B/\n    A8B\n    A9B  \n\n/(|ab)*?d/\n   abd\n   xyd \n\n/(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))/\n    1234abcd\n\n/(\\2|a)(\\1)/\n    aaa\n\n/(\\2)(\\1)/\n\n/Z*(|d*){216}/\n\n/(?1)(?#?'){8}(a)/\n    baaaaaaaaac\n\n/((((((((((((x))))))))))))\\12/\n    xx\n\n/A[\\8]B[\\9]C/\n    A8B9C\n\n#if !ebcdic\n\n/(?1)()((((((\\1++))\\x85)+)|))/\n    \\x85\\x85\n\n#endif\n\n/(?|(\\k'Pm')|(?'Pm'))/\n    abcd\n\n/(?|(aaa)|(b))\\g{1}/\n    aaaaaa\n    bb \n\n/(?|(aaa)|(b))(?1)/\n    aaaaaa\n    baaa \n\\= Expect no match \n    bb \n\n/(?|(aaa)|(b))/\n    xaaa\n    xbc \n\n/(?|(?'a'aaa)|(?'a'b))\\k'a'/\n    aaaaaa\n    bb \n\n/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\\k'a'/dupnames\n    aaaccccaaa\n    bccccb \n\n# /x does not apply to MARK labels \n\n/x (*MARK:ab cd # comment\nef) x/x,mark\n    axxz\n\n/(?<=a(B){0}c)X/\n    acX\n\n/(?<DEFINE>b)(?(DEFINE)(a+))(?&DEFINE)/          \n    bbbb \n\\= Expect no match     \n    baaab\n\n/(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\\s])/\n    \\   Fred:099\n\n/(?=.*X)X$/ \n    \\  X\n\n/(?s)(?=.*?)b/\n    aabc\n\n/(Z)(a)\\2{1,2}?(?-i)\\1X/i\n    ZaAAZX\n\n/(?'c')XX(?'YYYYYYYYYYYYYYYYYYYYYYYCl')/\n\n/a+(?:|b)a/\n    aaaa\n\n/X?(R||){3335}/\n\n/(?1)(A(*COMMIT)|B)D/\n    ABD\n    XABD\n    BAD\n    ABXABD  \n\\= Expect no match \n    ABX \n\n/(?(DEFINE)(?<m> 1? (?=(?<cond>2)?) 1 2 (?('cond')|3)))\n    \\A\n    ()\n    (?&m)\n    \\Z/x\n    123\n\n/^(?: \n(?: A| (1? (?=(?<cond>2)?) (1) 2 (?('cond')|3)) )\n(Z)\n)+$/x\n    AZ123Z\n\\= Expect no match     \n    AZ12Z \n    \n/^ (?(DEFINE) ( (?!(a)\\2b)..) )   ()(?1)  /x\n    acb\n\\= Expect no match     \n    aab\n    \n/(?>ab|abab){1,5}?M/\n    abababababababababababM\n\n/(?>ab|abab){2}?M/\n    abababM\n\n/((?(?=(a))a)+k)/\n    bbak\n\n/((?(?=(a))a|)+k)/\n    bbak\n\n/(?(?!(b))a|b)+k/\n    ababbalbbadabak\n\n/(?!(b))c|b/\n    Ab\n    Ac \n\n/(?=(b))b|c/\n    Ab\n    Ac \n\n/^(.|(.)(?1)\\2)$/\n    a\n    aba\n    abcba\n    ababa\n    abcdcba\n\n/^((.)(?1)\\2|.?)$/\n    a\n    aba\n    abba\n    abcba\n    ababa\n    abccba\n    abcdcba\n    abcddcba\n\n/^(.)(\\1|a(?2))/\n    bab\n\n/^(.|(.)(?1)?\\2)$/\n    abcba\n    \n/^(?(?=(a))abc|def)/\n    abc\n\n/^(?(?!(a))def|abc)/\n    abc\n\n/^(?(?=(a)(*ACCEPT))abc|def)/\n    abc\n\n/^(?(?!(a)(*ACCEPT))def|abc)/\n    abc\n\n/^(?1)\\d{3}(a)/\n    a123a\n\n#if !ebcdic\n\n# This pattern uses a lot of named subpatterns in order to match email\n# addresses in various formats. It's a heavy test for named subpatterns. In the\n# <atext> group, slash is coded as \\x{2f} so that this pattern can also be\n# processed by perltest.sh, which does not cater for an escaped delimiter\n# within the pattern. $ within the pattern must also be escaped. All $ and @\n# characters in subject strings are escaped so that Perl doesn't interpret them\n# as variable insertions and \" characters must also be escaped for Perl.\n\n# This set of subpatterns is more or less a direct transliteration of the BNF\n# definitions in RFC2822, without any of the obsolete features. The addition of\n# a possessive + to the definition of <phrase> reduced the match limit in PCRE2\n# from over 5 million to just under 400, and eliminated a very noticeable delay\n# when this file was passed to perltest.sh.\n\n/(?ix)(?(DEFINE)\n(?<addr_spec>       (?&local_part) \\@ (?&domain) )\n(?<angle_addr>      (?&CFWS)?+ < (?&addr_spec) > (?&CFWS)?+ )\n(?<atext>           [a-z\\d!#\\$%&'*+-\\x{2f}=?^_`{|}~] )\n(?<atom>            (?&CFWS)?+ (?&atext)+ (?&CFWS)?+ )\n(?<ccontent>        (?&ctext) | (?&quoted_pair) | (?&comment) )\n(?<ctext>           [^\\x{9}\\x{10}\\x{13}\\x{7f}-\\x{ff}\\ ()\\\\] )\n(?<comment>         \\( (?: (?&FWS)?+ (?&ccontent) )*+ (?&FWS)?+ \\) )\n(?<CFWS>            (?: (?&FWS)?+ (?&comment) )* (?# NOT possessive)\n                    (?: (?&FWS)?+ (?&comment) | (?&FWS) ) )\n(?<dcontent>        (?&dtext) | (?&quoted_pair) )\n(?<display_name>    (?&phrase) )\n(?<domain>          (?&dot_atom) | (?&domain_literal) )\n(?<domain_literal>  (?&CFWS)?+ \\[ (?: (?&FWS)?+ (?&dcontent) )* (?&FWS)?+ \\]\n                    (?&CFWS)?+ )\n(?<dot_atom>        (?&CFWS)?+ (?&dot_atom_text) (?&CFWS)?+ )\n(?<dot_atom_text>   (?&atext)++ (?: \\. (?&atext)++)*+ )\n(?<dtext>           [^\\x{9}\\x{10}\\x{13}\\x{7f}-\\x{ff}\\ \\[\\]\\\\] )\n(?<FWS>             (?: [\\t\\ ]*+ \\n)?+ [\\t\\ ]++ )\n(?<local_part>      (?&dot_atom) | (?&quoted_string)  )\n(?<mailbox>         (?&name_addr) | (?&addr_spec) )\n(?<name_addr>       (?&display_name)? (?&angle_addr) )\n(?<phrase>          (?&word)++ )\n(?<qcontent>        (?&qtext) | (?&quoted_pair) )\n(?<quoted_pair>     \" (?&text) )\n(?<quoted_string>   (?&CFWS)?+ \" (?: (?&FWS)?+ (?&qcontent))* (?&FWS)?+ \"\n                    (?&CFWS)?+ )\n(?<qtext>           [^\\x{9}\\x{10}\\x{13}\\x{7f}-\\x{ff}\\ \"\\\\] )\n(?<text>            [^\\r\\n] )\n(?<word>            (?&atom) | (?&quoted_string) )\n) # End DEFINE\n^(?&mailbox)$/\n    Alan Other <user\\@dom.ain>\n    <user\\@dom.ain>\n    user\\@dom.ain\n    user\\@[] \n    user\\@[domain literal] \n    user\\@[domain literal with \\\"[square brackets\\\"] inside] \n    \\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)\n    A. Other <user.1234\\@dom.ain> (a comment)\n    \\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay\n\\= Expect no match\n    A missing angle <user\\@some.where\n    The quick brown fox\n\n#endif\n    \n# -------------------------------------------------------------------------- \n\n#if !ebcdic\n\n# This pattern uses named groups to match default PCRE2 patterns. It's another\n# heavy test for named subpatterns. Once again, code slash as \\x{2f} and escape \n# $ even in classes so that this works with pcre2test.\n\n/(?sx)(?(DEFINE)\n\n(?<assertion>         (?&simple_assertion) | (?&lookaround) )\n\n(?<atomic_group>      \\( \\? > (?&regex) \\) )\n\n(?<back_reference>    \\\\ \\d+ |\n                      \\\\g (?: [+-]?\\d+ | \\{ (?: [+-]?\\d+ | (?&groupname) ) \\} ) |\n                      \\\\k <(?&groupname)> |\n                      \\\\k '(?&groupname)' |\n                      \\\\k \\{ (?&groupname) \\} |\n                      \\( \\? P= (?&groupname) \\) )\n\n(?<branch>            (?:(?&assertion) |\n                         (?&callout) |\n                         (?&comment) |\n                         (?&option_setting) |\n                         (?&qualified_item) |\n                         (?&quoted_string) |\n                         (?&quoted_string_empty) | \n                         (?&special_escape) |\n                         (?&verb)\n                      )* )\n\n(?<callout>           \\(\\?C (?: \\d+ | \n                      (?: (?<D>[\"'`^%\\#\\$]) \n                        (?: \\k'D'\\k'D' | (?!\\k'D') . )* \\k'D' |\n                      \\{ (?: \\}\\} | [^}]*+ )* \\} ) \n                      )? \\) )\n\n(?<capturing_group>   \\( (?: \\? P? < (?&groupname) > | \\? ' (?&groupname) ' )?\n                      (?&regex) \\) )\n\n(?<character_class>   \\[ \\^?+ (?: \\] (?&class_item)* | (?&class_item)+ ) \\] )\n\n(?<character_type>    (?! \\\\N\\{\\w+\\} ) \\\\ [dDsSwWhHvVRN] )\n\n(?<class_item>        (?: \\[ : (?:\n                      alnum|alpha|ascii|blank|cntrl|digit|graph|lower|print|\n                      punct|space|upper|word|xdigit\n                      ) : \\] |\n                      (?&quoted_string) |  \n                      (?&quoted_string_empty) | \n                      (?&escaped_character) | \n                      (?&character_type) | \n                      [^]] ) )\n\n(?<comment>           \\(\\?\\# [^)]* \\) | (?&quoted_string_empty) | \\\\E )\n\n(?<condition>         (?: \\( [+-]? \\d+ \\) |\n                          \\( < (?&groupname) > \\) |\n                          \\( ' (?&groupname) ' \\) |\n                          \\( R \\d* \\) |\n                          \\( R & (?&groupname) \\) |\n                          \\( (?&groupname) \\) | \n                          \\( DEFINE \\) |\n                          \\( VERSION >?=\\d+(?:\\.\\d\\d?)? \\) |\n                          (?&callout)?+ (?&comment)* (?&lookaround) ) )\n\n(?<conditional_group> \\(\\? (?&condition) (?&branch) (?: \\| (?&branch) )? \\) )\n\n(?<delimited_regex>   (?<delimiter> [-\\x{2f}!\"'`=_:;,%&@~]) (?&regex) \n                      \\k'delimiter' .* )\n\n(?<escaped_character> \\\\ (?: 0[0-7]{1,2} | [0-7]{1,3} | o\\{ [0-7]+ \\} |\n                      x \\{ (*COMMIT) [[:xdigit:]]* \\} | x [[:xdigit:]]{0,2} | \n                      [aefnrt] | c[[:print:]] |\n                      [^[:alnum:]] ) )\n\n(?<group>             (?&capturing_group) | (?&non_capturing_group) |\n                      (?&resetting_group) | (?&atomic_group) |\n                      (?&conditional_group) )\n\n(?<groupname>         [a-zA-Z_]\\w* )\n\n(?<literal_character> (?! (?&range_qualifier) ) [^[()|*+?.\\$\\\\] )\n\n(?<lookaround>        \\(\\? (?: = | ! | <= | <! ) (?&regex) \\) )\n\n(?<non_capturing_group> \\(\\? [iJmnsUx-]* : (?&regex) \\) )\n\n(?<option_setting>    \\(\\? [iJmnsUx-]* \\) )\n\n(?<qualified_item>    (?:\\. |\n                         (?&lookaround) |\n                         (?&back_reference) |\n                         (?&character_class) |\n                         (?&character_type) |\n                         (?&escaped_character) |\n                         (?&group) |\n                         (?&subroutine_call) |\n                         (?&literal_character) |\n                         (?&quoted_string) \n                      ) (?&comment)? (?&qualifier)? )\n\n(?<qualifier>         (?: [?*+] | (?&range_qualifier) ) [+?]? )\n\n(?<quoted_string>     (?: \\\\Q (?: (?!\\\\E | \\k'delimiter') . )++ (?: \\\\E | ) ) ) \n                      \n(?<quoted_string_empty>  \\\\Q\\\\E ) \n\n(?<range_qualifier>   \\{ (?: \\d+ (?: , \\d* )? | , \\d+ ) \\} )\n\n(?<regex>             (?&start_item)* (?&branch) (?: \\| (?&branch) )* )\n\n(?<resetting_group>   \\( \\? \\| (?&regex) \\) )\n\n(?<simple_assertion>  \\^ | \\$ | \\\\A | \\\\b | \\\\B | \\\\G | \\\\z | \\\\Z )\n\n(?<special_escape>    \\\\K )\n\n(?<start_item>        \\( \\* (?:\n                      ANY |\n                      ANYCRLF |\n                      BSR_ANYCRLF |\n                      BSR_UNICODE |\n                      CR |\n                      CRLF |\n                      LF |\n                      LIMIT_MATCH=\\d+ |\n                      LIMIT_DEPTH=\\d+ |\n                      LIMIT_HEAP=\\d+ | \n                      NOTEMPTY |\n                      NOTEMPTY_ATSTART |\n                      NO_AUTO_POSSESS |\n                      NO_DOTSTAR_ANCHOR |\n                      NO_JIT |\n                      NO_START_OPT |\n                      NUL |\n                      UTF |\n                      UCP ) \\) )\n\n(?<subroutine_call>   (?: \\(\\?R\\) | \\(\\?[+-]?\\d+\\) |\n                      \\(\\? (?: & | P> ) (?&groupname) \\) |\n                      \\\\g < (?&groupname) > |\n                      \\\\g ' (?&groupname) ' |\n                      \\\\g < [+-]? \\d+ > |\n                      \\\\g ' [+-]? \\d+ ) )\n\n(?<verb>              \\(\\* (?: ACCEPT | FAIL | F | COMMIT |\n                      (?:MARK)?:(?&verbname) |\n                      (?:PRUNE|SKIP|THEN) (?: : (?&verbname)? )? ) \\) )\n\n(?<verbname>          [^)]+ )\n\n) # End DEFINE\n# Kick it all off...\n^(?&delimited_regex)$/subject_literal,jitstack=256\n    /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$/\n    /(cat(a(ract|tonic)|erpillar)) \\1()2(3)/\n    /^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/\n    /^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d/\n    /<tr([\\w\\W\\s\\d][^<>]{0,})><TD([\\w\\W\\s\\d][^<>]{0,})>([\\d]{0,}\\.)(.*)((<BR>([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>/is\n    /^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /\n    /(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}/\n    /\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))/\n    /^(\\w++|\\s++)*$/\n    /a+b?(*THEN)c+(*FAIL)/\n    /(A (A|B(*ACCEPT)|C) D)(E)/x\n    /^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$/i\n    /A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/B\n    /(?C`a``b`)(?C'a''b')(?C\"a\"\"b\")(?C^a^^b^)(?C%a%%b%)(?C#a##b#)(?C$a$$b$)(?C{a}}b})/B,callout_info\n    /(?sx)(?(DEFINE)(?<assertion> (?&simple_assertion) | (?&lookaround) )(?<atomic_group> \\( \\? > (?&regex) \\) )(?<back_reference> \\\\ \\d+ | \\\\g (?: [+-]?\\d+ | \\{ (?: [+-]?\\d+ | (?&groupname) ) \\} ) | \\\\k <(?&groupname)> | \\\\k '(?&groupname)' | \\\\k \\{ (?&groupname) \\} | \\( \\? P= (?&groupname) \\) )(?<branch> (?:(?&assertion) | (?&callout) | (?&comment) | (?&option_setting) | (?&qualified_item) | (?&quoted_string) | (?&quoted_string_empty) | (?&special_escape) | (?&verb) )* )(?<callout> \\(\\?C (?: \\d+ | (?: (?<D>[\"'`^%\\#\\$]) (?: \\k'D'\\k'D' | (?!\\k'D') . )* \\k'D' | \\{ (?: \\}\\} | [^}]*+ )* \\} ) )? \\) )(?<capturing_group> \\( (?: \\? P? < (?&groupname) > | \\? ' (?&groupname) ' )? (?&regex) \\) )(?<character_class> \\[ \\^?+ (?: \\] (?&class_item)* | (?&class_item)+ ) \\] )(?<character_type> (?! \\\\N\\{\\w+\\} ) \\\\ [dDsSwWhHvVRN] )(?<class_item> (?: \\[ : (?: alnum|alpha|ascii|blank|cntrl|digit|graph|lower|print| punct|space|upper|word|xdigit ) : \\] | (?&quoted_string) | (?&quoted_string_empty) | (?&escaped_character) | (?&character_type) | [^]] ) )(?<comment> \\(\\?\\# [^)]* \\) | (?&quoted_string_empty) | \\\\E )(?<condition> (?: \\( [+-]? \\d+ \\) | \\( < (?&groupname) > \\) | \\( ' (?&groupname) ' \\) | \\( R \\d* \\) | \\( R & (?&groupname) \\) | \\( (?&groupname) \\) | \\( DEFINE \\) | \\( VERSION >?=\\d+(?:\\.\\d\\d?)? \\) | (?&callout)?+ (?&comment)* (?&lookaround) ) )(?<conditional_group> \\(\\? (?&condition) (?&branch) (?: \\| (?&branch) )? \\) )(?<delimited_regex> (?<delimiter> [-\\x{2f}!\"'`=_:;,%&@~]) (?&regex) \\k'delimiter' .* )(?<escaped_character> \\\\ (?: 0[0-7]{1,2} | [0-7]{1,3} | o\\{ [0-7]+ \\} | x \\{ (*COMMIT) [[:xdigit:]]* \\} | x [[:xdigit:]]{0,2} | [aefnrt] | c[[:print:]] | [^[:alnum:]] ) )(?<group> (?&capturing_group) | (?&non_capturing_group) | (?&resetting_group) | (?&atomic_group) | (?&conditional_group) )(?<groupname> [a-zA-Z_]\\w* )(?<literal_character> (?! (?&range_qualifier) ) [^[()|*+?.\\$\\\\] )(?<lookaround> \\(\\? (?: = | ! | <= | <! ) (?&regex) \\) )(?<non_capturing_group> \\(\\? [iJmnsUx-]* : (?&regex) \\) )(?<option_setting> \\(\\? [iJmnsUx-]* \\) )(?<qualified_item> (?:\\. | (?&lookaround) | (?&back_reference) | (?&character_class) | (?&character_type) | (?&escaped_character) | (?&group) | (?&subroutine_call) | (?&literal_character) | (?&quoted_string) ) (?&comment)? (?&qualifier)? )(?<qualifier> (?: [?*+] | (?&range_qualifier) ) [+?]? )(?<quoted_string> (?: \\\\Q (?: (?!\\\\E | \\k'delimiter') . )++ (?: \\\\E | ) ) ) (?<quoted_string_empty> \\\\Q\\\\E ) (?<range_qualifier> \\{ (?: \\d+ (?: , \\d* )? | , \\d+ ) \\} )(?<regex> (?&start_item)* (?&branch) (?: \\| (?&branch) )* )(?<resetting_group> \\( \\? \\| (?&regex) \\) )(?<simple_assertion> \\^ | \\$ | \\\\A | \\\\b | \\\\B | \\\\G | \\\\z | \\\\Z )(?<special_escape> \\\\K )(?<start_item> \\( \\* (?: ANY | ANYCRLF | BSR_ANYCRLF | BSR_UNICODE | CR | CRLF | LF | LIMIT_MATCH=\\d+ | LIMIT_DEPTH=\\d+ | LIMIT_HEAP=\\d+ | NOTEMPTY | NOTEMPTY_ATSTART | NO_AUTO_POSSESS | NO_DOTSTAR_ANCHOR | NO_JIT | NO_START_OPT | NUL | UTF | UCP ) \\) )(?<subroutine_call> (?: \\(\\?R\\) | \\(\\?[+-]?\\d+\\) | \\(\\? (?: & | P> ) (?&groupname) \\) | \\\\g < (?&groupname) > | \\\\g ' (?&groupname) ' | \\\\g < [+-]? \\d+ > | \\\\g ' [+-]? \\d+ ) )(?<verb> \\(\\* (?: ACCEPT | FAIL | F | COMMIT | (?:MARK)?:(?&verbname) | (?:PRUNE|SKIP|THEN) (?: : (?&verbname)? )? ) \\) )(?<verbname> [^)]+ ))^(?&delimited_regex)$/\n\\= Expect no match\n    /((?(?C'')\\QX\\E(?!((?(?C'')(?!X=X));=)r*X=X));=)/\n    /(?:(?(2y)a|b)(X))+/\n    /a(*MARK)b/\n    /a(*CR)b/\n    /(?P<abn>(?P=abn)(?<badstufxxx)/\n\n#endif\n\n# -------------------------------------------------------------------------- \n\n/<(?x:[a b])>/xx\n    < >\n\n/<(?:[a b])>/xx\n    < >\n\n/<(?xxx:[a b])>/\n    < >\n    \n/<(?-x:[a b])>/xx\n    < >\n\n/[[:digit:]-]+/\n    12-24\n\n/((?<=((*ACCEPT)) )\\1?\\b) /\n\\= Expect no match     \n    ((?<=((*ACCEPT)) )\\\\1?\\\\b)\\x20\n\n/((?<=((*ACCEPT))X)\\1?Y)\\1/\n    XYYZ\n\n/((?<=((*ACCEPT))X)\\1?Y(*ACCEPT))\\1/\n    XYYZ\n\n/(?(DEFINE)(?<optional_a>a?)X)^(?&optional_a)a$/\n    aa\n    a\n\n/^(a?)b(?1)a/\n    abaa\n    aba \n    baa\n    ba  \n\n/^(a?)+b(?1)a/\n    abaa\n    aba \n    baa\n    ba  \n\n/^(a?)++b(?1)a/\n    abaa\n    aba \n    baa\n    ba  \n\n/^(a?)+b/\n    b\n    ab\n    aaab \n\n/(?=a+)a(a+)++b/\n    aab\n\n/(?<=\\G.)/g,aftertext\n    abc\n\n/(?<=(?=.)?)/\n\n/(?<=(?=.)?+)/\n\n/(?<=(?=.)*)/\n\n/(?<=(?=.){4,5})/\n\n/(?<=(?=.){4,5}x)/\n\n/a(?=.(*:X))(*SKIP:X)(*F)|(.)/\n    abc\n\n/a(?>(*:X))(*SKIP:X)(*F)|(.)/\n    abc\n\n/a(?:(*:X))(*SKIP:X)(*F)|(.)/\n    abc\n\n#pattern no_start_optimize\n\n/(?>a(*:1))(?>b(*:1))(*SKIP:1)x|.*/\n    abc\n\n/(?>a(*:1))(?>b)(*SKIP:1)x|.*/\n    abc\n\n#subject mark\n\n/a(*ACCEPT:X)b/\n    abc\n    \n/(?=a(*ACCEPT:QQ)bc)axyz/\n    axyz\n\n/(?(DEFINE)(a(*ACCEPT:X)))(?1)b/\n    abc\n    \n/a(*F:X)b/\n    abc\n    \n/(?(DEFINE)(a(*F:X)))(?1)b/\n    abc\n\n/a(*COMMIT:X)b/\n    abc\n    \n/(?(DEFINE)(a(*COMMIT:X)))(?1)b/\n    abc\n    \n/a+(*:Z)b(*COMMIT:X)(*SKIP:Z)c|.*/\n    aaaabd\n\n/a+(*:Z)b(*COMMIT:X)(*SKIP:X)c|.*/\n    aaaabd\n\n/a(*COMMIT:X)b/\n    axabc\n\n#pattern -no_start_optimize\n#subject -mark \n\n/(.COMMIT)(*COMMIT::::::::::interal error:::)/\n\n/(*COMMIT:)/\n\n/(*COMMIT:]w)/\n\n/(?i)A(?^)B(?^x:C D)(?^i)e f/\n    aBCDE F\n\\= Expect no match\n    aBCDEF\n    AbCDe f\n\n/(*pla:foo).{6}/\n    abcfoobarxyz\n\\= Expect no match\n    abcfooba\n\n/(*positive_lookahead:foo).{6}/\n    abcfoobarxyz\n    \n/(?(*pla:foo).{6}|a..)/\n    foobarbaz\n    abcfoobar       \n\n/(?(*positive_lookahead:foo).{6}|a..)/\n    foobarbaz\n    abcfoobar       \n    \n/(*plb:foo)bar/\n    abcfoobar\n\\= Expect no match\n    abcbarfoo     \n\n/(*positive_lookbehind:foo)bar/\n    abcfoobar\n\\= Expect no match\n    abcbarfoo\n    \n/(?(*plb:foo)bar|baz)/\n    abcfoobar\n    bazfoobar\n    abcbazfoobar\n    foobazfoobar    \n \n/(?(*positive_lookbehind:foo)bar|baz)/\n    abcfoobar\n    bazfoobar\n    abcbazfoobar\n    foobazfoobar    \n \n/(*nlb:foo)bar/\n    abcbarfoo     \n\\= Expect no match\n    abcfoobar\n\n/(*negative_lookbehind:foo)bar/\n    abcbarfoo     \n\\= Expect no match\n    abcfoobar\n    \n/(?(*nlb:foo)bar|baz)/\n    abcfoobaz \n    abcbarbaz \n\\= Expect no match\n    abcfoobar\n \n/(?(*negative_lookbehind:foo)bar|baz)/\n    abcfoobaz \n    abcbarbaz \n\\= Expect no match\n    abcfoobar\n \n/(*atomic:a+)\\w/\n    aaab\n\\= Expect no match\n    aaaa      \n\n/   (?<word> \\w+ )*    \\.   /xi\n    pokus.\n    \n/(?(DEFINE) (?<word> \\w+ ) ) (?&word)*   \\./xi\n    pokus.\n\n/(?(DEFINE) (?<word> \\w+ ) ) ( (?&word)* )   \\./xi \n    pokus.\n\n/(?&word)*  (?(DEFINE) (?<word> \\w+ ) )  \\./xi\n    pokus.\n\n/(?&word)*  \\. (?<word> \\w+ )/xi\n    pokus.hokus\n\n/a(?(?=(*:2)b).)/mark\n    abc\n    acb     \n\n/a(?(?!(*:2)b).)/mark\n    acb\n    abc     \n\n/(?:a|ab){1}+c/\n\\= Expect no match\n    abc\n\n/(a|ab){1}+c/\n    abc\n    \n/(a+){1}+a/\n\\= Expect no match\n    aaaa\n\n/(?(DEFINE)(a|ab))(?1){1}+c/\n    abc    \n\n/(?:a|(?=b)|.)*\\z/\n    abc\n    \n/(?:a|(?=b)|.)*/\n    abc \n    \n/(?<=a(*SKIP)x)|c/\n    abcd\n    \n/(?<=a(*SKIP)x)|d/\n    abcd\n \n/(?<=(?=.(?<=x)))/aftertext\n    abx\n\n/(?<=(?=(?<=a)))b/\n    ab\n\n/^(?<A>a)(?(<A>)b)((?<=b).*)$/\n    abc\n\n/^(a\\1?){4}$/\n    aaaa\n    aaaaaa\n\n/^((\\1+)|\\d)+133X$/\n    111133X\n\n/^(?>.*?([A-Z])(?!.*\\1)){26}/i\n    The quick brown fox jumps over the lazy dog.\n    Jackdaws love my big sphinx of quartz.\n    Pack my box with five dozen liquor jugs.\n\\= Expect no match\n    The quick brown fox jumps over the lazy cat.\n    Hackdaws love my big sphinx of quartz.\n    Pack my fox with five dozen liquor jugs.\n\n/(?<=X(?(DEFINE)(A)))X(*F)/\n\\= Expect no match\n    AXYZ\n\n/(?<=X(?(DEFINE)(A)))./\n    AXYZ\n\n/(?<=X(?(DEFINE)(.*))Y)./\n    AXYZ\n\n/(?<=X(?(DEFINE)(Y))(?1))./\n    AXYZ\n\n/(?(DEFINE)(?<foo>bar))(?<![-a-z0-9])word/\n    word\n\n/a{1,2,3}b/\n    a{1,2,3}b\n\n#if !ebcdic\n\n/\\214748364/\n    >\\x{8c}748364<\n\n# smaller than GROUP_MAX\n/\\21300/\n    \\x8b00\n\n# larger than GROUP_MAX\n/\\213000/\n    \\x8b000\n\n# larger than INT_MAX\n/\\21300000000/\n    \\x8b00000000\n\n#endif\n\n/a{65536/\n    >a{65536<\n\n/a\\K.(?0)*/\n    abac\n\n/(a\\K.(?1)*)/\n    abac\n\n# -------------------------------------------------------------------------- \n# Perl-compatible tests of variable-length lookbehinds.\n\n/(?<=ab?c).../g\n    abcdefgacxyz\n\n/(?<=PQR|ab?c).../g\n    abcdefgacxyzPQR123\n\n/(?<=ab?c|PQR).../g\n    abcdefgacxyzPQR123\n\n/(?<=PQ|ab?c).../g\n    abcdefgacxyzPQR123\n\n/(?<=ab?c|PQ).../g\n    abcdefgacxyzPQR123\n\n/(?<=a(b?c|d?e?e)f)X./g\n     acfX1zzzaefX2zzzadeefX3zzzX4zzz\n\n/(?<!a(b?c|d?e?e)f)X./g\n     acfX1zzzaefX2zzzadeefX3zzzX4zzz\n     \n/(?(?<=ab?c)d|e)/\n    abcdefg\n    acdefg\n    axdefg\n    \n/(?<=\\d{2,3}|ABC)./\n    ABCD   \n\n/(?<=(\\d{1,255}))X/\n    1234X\n\n/(?<=a(b?c){3}d)X/\n   ZXacbccdXYZ\n   \n/(?<=a(b?c){0}d)X/\n   ZXadXYZ\n \n/(?<=a?(b?c){0}d)X./\n   ZXadXYZ\n \n/(?<=\\R)X/\n    \\x{0a}X\n    a\\x{0a}X\n    a\\x{0d}\\x{0a}X\n\n# -------------------------------------------------------------------------- \n\n# Altered interpretation of {,n}\n\n/a{,3}B/\n    XBBB\n    XaBBB\n    XaaBBB\n    XaaaBBB\n    XaaaaBBB\n\n# But {,} remains not a qualifier\n\n/a{,}B/\n    Xa{,}BBB\n\\= Expect no match     \n    XBBB\n    XaBBB\n    \n# Checks for non-quantifiers after refactored code\n\n/X{/\n    ZZX{}YY\n\n/X{A/\n    ZZX{ABC}\n\n/X{}/\n    ZZX{}YZ\n    \n/X{1234/\n    ZZX{123456\n    \n/X{12ABC}/ \n    ZZX{12ABC}Y\n    \n/X{1,/\n    ZZX{1,...\n    \n/X{,9/\n    ZZX{,9}abc\n    \n/X{,9]/\n    ZZX{,9]..   \n    \n# -------------------------------------------------------------------------- \n\n/(A)(?-1)(?+1)(B)/\n    xxAABBzz\n   \n/(A)(\\g{ -2 }B)/\n    XAABX\n\n/(A)((?-2)B)/\n    XAABX\n\n/a\\c\\X/\n    --a\\x1cX--\n    \n/(a)\\g{ 1 }/\n    baab\n\n/a{ 1,2 }/\n    Xaaaaa\n\n/a{ 1 , 2 }/\n    Xaaaaa\n\n/(?'name'ab)\\k{ name }(?P=name)/\n    XabababX \n\n/A{,}B/\n    A{,}B\n\n/A{ , }B/\n    A{ , }B\n    \n/A{ ,3}/\n    AAAAAACC \n\n/A{ 3, }/\n    BBAAAAAACC \n\n# This pattern validates regular expression patterns. The original that I was\n# sent was this:\n# /^((?:(?:[^?+*{}()[\\]\\\\|]+|\\\\.|\\[(?:\\^?\\\\.|\\^[^\\\\]|[^\\\\^])(?:[^\\]\\\\]+|\\\\.)*\\]|\\((?:\\?[:=!]|\\?<[=!]|\\?>)?(?1)??\\)|\\(\\?(?:R|[+-]?\\d+)\\))(?:(?:[?+*]|\\{\\d+(?:,\\d*)?\\})[?+]?)?|\\|)*)$/\n# This is not very readable, and also does not handle all features. I have done\n# some work on it.\n\n/^\n(?<re>\n# A regular expression is zero or more of these items.\n  (?:\n  # An item is one of these:\n    (?:\n      [^?+*{}()\\[\\]\\\\|]++|  # Non-meta characters or unquoted .\n      \\\\.|                  # Quoted .\n\n      \\[                    # Class, which is [\n      (?:                   # Followed by\n        \\^?\\\\.|             # Optional ^ and any escaped character\n        \\^[^\\\\]|            # OR ^ and not escaped character\n        [^\\\\^]              # OR neither ^ nor \\\n      )                     # Followed by\n      (?:[^\\]\\\\]+|\\\\.)*+    # Zero or more (not ] or \\) OR escaped dot\n      \\]|                   # Class ends with ]\n\n      \\(                    # Parenthesized group\n        (?:                 # Start with optional\n          \\?[:=!]|          # ? followed by : = !\n          \\?<[=!]|          # OR ?< followed by = or !\n          \\?>               # OR ?>\n        )?\n        (?&re)??            # Then a nested <re>\n      \\)|                   # End parenthesized group\n\n      \\(\\?                  # Other parenthesized items\n        (?:                 # (? followed by\n          R|                # R\n          [+-]?\\d++         # Or optional +- and digits\n        )\n      \\)|                   # End parens\n\n      \\(\\*                  # Verbs\n        (?:\n          COMMIT|\n          FAIL|\n          MARK:[^)]*|\n          (?:PRUNE|SKIP|THEN)(?::[^\\)]*+)?\n        )\n      \\)\n    )                       # End list of items\n\n    # Followed by an optional quantifier\n\n    (?:\n      (?:\n        [?+*]     # ?+*\n        |         # OR\n        \\{\\d+     # { digits\n        (?:,\\d*)? # optionally followed by ,digits\n        \\}        # then closing }\n        |         # OR\n        \\{,\\d+}   # {,digits}\n      )\n      [?+]?       # optional ungreedy or possessive\n    )?\n\n    | # OR an \"item\" is a branch ending\n\n    \\|\n\n  )*  # Zero or more top-level items.\n)     # End regex group.\n$/x\n    [abcdef]\n    [abc\\\\]def]\n    a.b|abcd\n    ab()d\n    ab{1,3}d\n    ab{,3}d\n    ab(*FAIL)d(*COMMIT)(*SKIP)(*THEN:abc)\n    ab(*MARK:xyz)\n    (?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\\\\s])\n    abcd\\\\t\\\\n\\\\r\\\\f\\\\a\\\\e\\\\071\\\\x3b\\\\^\\\\\\\\\\\\?caxyz\n    a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz\n    \\\\G(?:(?=(\\\\1.|)(.))){1,13}?(?!.*\\\\2.*\\\\2)\\\\1\\\\K\\\\2\n\\= Expect no match\n    ab)d\n    ab(d\n    {4,5}\n    a[]b\n    (a)(?(1)a|b|c)\n\n/^..A(*SKIP)B|C/\n    12ADC\n\n/(?<!a?)/\n    a\n\n/\\Qab*\\E{2,}/\n    ab***z\n\n/[\\Qabc\\E-z]+/\n    abcdwxyz\n\n/[\\Qa-\\Ez]+/\n    xz-zaax\n\n/a{(?#XYZ),2}/\n    xa{,2}x\n\\= Expect no match     \n    xaax\n \n/(?<=PQ|Pc.b?)(.?)(b?)/\n    Pc.b\n    \n/(?(?<=aa.b|ab)b).b/\n    aaab\n\n/(?(?<=a(?:a.b|b))b).b/\n    aaab\n\n/(?=a)b?a/\n    a\n\n/(?=a)b?a./\n    ab\n\n/\\w(?R)*\\w/\n    grtgt\n    abcdef\n    abcdefg\n    .a.bc.d.\n\\= Expect no match\n    .a.b.c.\n\n/65 00 64/hex\n    e\\0d\n\n/[[:digit:]-   ]/xx\n    1\n    -\n\\= Expect no match\n    z\n    \\ \\\n\n/[\\d-   ]/xx\n    1\n    -\n\\= Expect no match\n    z\n    \\ \\\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n/(?[\\n])/\n    \\n\n\\= Expect no match\n    \\\\\n    n\n\n#if !ebcdic\n\n/^(?[\\x61])b/\n    ab\n\\= Expect no match\n    b\n    a\n\n/^(?[\\x61])+b/\n    ab\n    aab\n\\= Expect no match\n    b\n\n#endif\n\n/(?[ [[:graph:]] ])/\n    a\n\\= Expect no match\n    \\x01\n\n/(?[ [:graph:] ])/\n    a\n\\= Expect no match\n    \\x01\n\n/(?[ [[:graph:]\\x02] ])/\n    a\n    \\x02\n\\= Expect no match\n    \\x01\n\n/(?[\\E\\n])/\n    \\n\n\\= Expect no match\n    \\\\\n    E\n\n/(?[\\n \\Q\\E])/\n    \\n\n\\= Expect no match\n    \\\\\n    Q\n\n/(?[ ( \\x02 + [:graph:] ) | [ \\x02 [:graph:] ] ])/\n    a\n    \\x02\n\\= Expect no match\n    \\x01\n\n/(?[ \\d ])/\n    1\n\\= Expect no match\n    d\n\n/(?[[1]])/\n    1\n\\= Expect no match\n    ]\n\n/(?[[a]])/\n    a\n\\= Expect no match\n    ]\n\n/(?[[a-c]])/\n    a\n    b\n\\= Expect no match\n    -\n    ]\n\n/(?[ [\\t] + [\\n] ])/\n    \\t\n    \\n\n\\= Expect no match\n    t\n    \\\\\n    [\n\n/(?[ \\t + \\n ])/\n    \\t\n    \\n\n\\= Expect no match\n    t\n    \\\\\n    [\n\n/(?[ [()] ])/\n    )\n    (\n\\= Expect no match\n    ]\n\n/(?[ ( [()] ) ])/\n    )\n    (\n\\= Expect no match\n    ]\n\n/(?[ (( [\\n\\t] )) ])/\n    \\n\n    \\t\n\\= Expect no match\n    )\n    (\n    t\n\n# Each syntax element, with unary operator applied to it\n\n/(?[ !\\n ])/\n    z\n\\= Expect no match\n    \\n\n\n/(?[ !\\d ])/\n    a\n\\= Expect no match\n    1\n\n/(?[ ![:alpha:] ])/\n    1\n\\= Expect no match\n    a\n\n/(?[ ![\\n] ])/\n    z\n\\= Expect no match\n    \\n\n\n/(?[ !(\\n) ])/\n    z\n\\= Expect no match\n    \\n\n\n/(?[ !!\\n ])/\n    \\n\n\\= Expect no match\n    z\n\n# Each syntax element, as contents of parens\n\n/(?[ (\\n) ])/\n    \\n\n\\= Expect no match\n    z\n\n/(?[ (\\d) ])/\n    1\n\\= Expect no match\n    a\n\n/(?[ ([:alpha:]) ])/\n    a\n\\= Expect no match\n    1\n\n/(?[ ([\\n]) ])/\n    \\n\n\\= Expect no match\n    z\n\n/(?[ ((\\n)) ])/\n    \\n\n\\= Expect no match\n    z\n\n/(?[ (!\\n) ])/\n    z\n\\= Expect no match\n    \\n\n\n/(?[ (\\n + \\t) ])/\n    \\n\n    \\t\n\\= Expect no match\n    z\n\n# Each syntax element, as LHS of a binary operator\n\n/(?[ \\n & [\\n\\t] ])/\n    \\n\n\\= Expect no match\n    t\n\n/(?[ \\d & [\\d\\t] ])/\n    1\n\\= Expect no match\n    a\n\n/(?[ [:alpha:] & [a-z\\t] ])/\n    a\n\\= Expect no match\n    A\n    \\t\n\n/(?[ [\\n] & [\\n\\t] ])/\n    \\n\n\\= Expect no match\n    \\t\n\n/(?[ (\\n) & [\\n\\t] ])/\n    \\n\n\\= Expect no match\n    \\t\n\n/(?[ !\\n & [^\\n\\t] ])/\n    a\n\\= Expect no match\n    \\n\n    \\t\n\n/(?[ \\n & [\\n\\t] + [\\d] ])/\n    \\n\n    1\n\\= Expect no match\n    \\t\n    a\n\n# Each syntax element, as RHS of a binary operator\n\n/(?[ [\\n\\t] & \\n ])/\n    \\n\n\\= Expect no match\n    t\n\n/(?[ [\\d\\t] & \\d ])/\n    1\n\\= Expect no match\n    a\n\n/(?[ [a-z\\t] & [:alpha:] ])/\n    a\n\\= Expect no match\n    A\n    \\t\n\n/(?[ [\\n\\t] & [\\n] ])/\n    \\n\n\\= Expect no match\n    \\t\n\n/(?[ [\\n\\t] & (\\n) ])/\n    \\n\n\\= Expect no match\n    \\t\n\n/(?[ [^\\n\\t] & !\\n ])/\n    a\n\\= Expect no match\n    \\n\n    \\t\n\n/(?[ [\\d] + \\n & [\\n\\t] ])/\n    \\n\n    1\n\\= Expect no match\n    \\t\n    a\n\n/(?[ [\\d] + \\n + [\\t] ])/\n    \\n\n    \\t\n    1\n\\= Expect no match\n    a\n\n# end op surrounding syntax tests\n\n/(?[ \\d + \\n ])/\n    \\n\n    1\n\\= Expect no match\n    a\n\n/(?[ \\d | \\n ])/\n    \\n\n    1\n\\= Expect no match\n    a\n\n/(?[ \\d - [2] ])/\n    1\n    3\n\\= Expect no match\n    2\n\n/(?[ [AC] ^ [BC] ])/\n    A\n    B\n\\= Expect no match\n    C\n    D\n\n/(?[\t(\t[\t^\tz\t]\t) ])/\n    j\n\\= Expect no match\n    z\n\n/^.{4}/s\n    abcdef\n    abcde\n    abcd\n\\= Expect no match\n    abc\n    ab\n    a\n\n/^(.{3,6}!)+$/s\n  abc!defghi!\n  abcdef!ghi!\n  abc!def!ghi!jkl!\n  ab!cd!\n\\= Expect no match\n  abcd!ef!\n  ab!cdefg!\n\n/[a-z]{5,}b|x/\n  abcdefghbijb\n  abcdefghbij\n  abcdeb\n  abcdefghijx\n\\= Expect no match\n  abcdb\n  abcdefghijk\n\n/[a-z]{1,6}?s|x/\n  asbs\n  abcdefs\n  abcdefghijkss\n  abcdefghijkx\n  ss\n\\= Expect no match\n  s\n  aaa\n\n# --------------\n\n# End of testinput1 \n"
  },
  {
    "path": "testdata/testinput10",
    "content": "# This set of tests is for UTF-8 support and Unicode property support, with\n# relevance only for the 8-bit library.\n\n#newline_default lf any anycrlf\n\n# The next 5 patterns have UTF-8 errors\n\n/[]/utf\n\n//utf\n\n/xxx/utf\n\n/Â/utf\n\n/Â/match_invalid_utf\n\n# Now test subjects\n\n/badutf/utf\n\\= Expect UTF-8 errors\n    X\\xdf\n    XX\\xef\n    XXX\\xef\\x80\n    X\\xf7\n    XX\\xf7\\x80\n    XXX\\xf7\\x80\\x80\n    \\xfb\n    \\xfb\\x80\n    \\xfb\\x80\\x80\n    \\xfb\\x80\\x80\\x80\n    \\xfd\n    \\xfd\\x80\n    \\xfd\\x80\\x80\n    \\xfd\\x80\\x80\\x80\n    \\xfd\\x80\\x80\\x80\\x80\n    \\xdf\\x7f\n    \\xef\\x7f\\x80\n    \\xef\\x80\\x7f\n    \\xf7\\x7f\\x80\\x80\n    \\xf7\\x80\\x7f\\x80\n    \\xf7\\x80\\x80\\x7f\n    \\xfb\\x7f\\x80\\x80\\x80\n    \\xfb\\x80\\x7f\\x80\\x80\n    \\xfb\\x80\\x80\\x7f\\x80\n    \\xfb\\x80\\x80\\x80\\x7f\n    \\xfd\\x7f\\x80\\x80\\x80\\x80\n    \\xfd\\x80\\x7f\\x80\\x80\\x80\n    \\xfd\\x80\\x80\\x7f\\x80\\x80\n    \\xfd\\x80\\x80\\x80\\x7f\\x80\n    \\xfd\\x80\\x80\\x80\\x80\\x7f\n    \\xed\\xa0\\x80\n    \\xc0\\x8f\n    \\xe0\\x80\\x8f\n    \\xf0\\x80\\x80\\x8f\n    \\xf8\\x80\\x80\\x80\\x8f\n    \\xfc\\x80\\x80\\x80\\x80\\x8f\n    \\x80\n    \\xfe\n    \\xff\n\n/badutf/utf\n\\= Expect UTF-8 errors\n    XX\\xfb\\x80\\x80\\x80\\x80\n    XX\\xfd\\x80\\x80\\x80\\x80\\x80\n    XX\\xf7\\xbf\\xbf\\xbf\n\n/shortutf/utf\n\\= Expect UTF-8 errors\n    XX\\xdf\\=ph\n    XX\\xef\\=ph\n    XX\\xef\\x80\\=ph\n    \\xf7\\=ph\n    \\xf7\\x80\\=ph\n    \\xf7\\x80\\x80\\=ph\n    \\xfb\\=ph\n    \\xfb\\x80\\=ph\n    \\xfb\\x80\\x80\\=ph\n    \\xfb\\x80\\x80\\x80\\=ph\n    \\xfd\\=ph\n    \\xfd\\x80\\=ph\n    \\xfd\\x80\\x80\\=ph\n    \\xfd\\x80\\x80\\x80\\=ph\n    \\xfd\\x80\\x80\\x80\\x80\\=ph\n\n/anything/utf\n\\= Expect UTF-8 errors\n    X\\xc0\\x80\n    XX\\xc1\\x8f\n    XXX\\xe0\\x9f\\x80\n    \\xf0\\x8f\\x80\\x80\n    \\xf8\\x87\\x80\\x80\\x80\n    \\xfc\\x83\\x80\\x80\\x80\\x80\n    \\xfe\\x80\\x80\\x80\\x80\\x80\n    \\xff\\x80\\x80\\x80\\x80\\x80\n    \\xf8\\x88\\x80\\x80\\x80\n    \\xf9\\x87\\x80\\x80\\x80\n    \\xfc\\x84\\x80\\x80\\x80\\x80\n    \\xfd\\x83\\x80\\x80\\x80\\x80\n\\= Expect no match\n    \\xc3\\x8f\n    \\xe0\\xaf\\x80\n    \\xe1\\x80\\x80\n    \\xf0\\x9f\\x80\\x80\n    \\xf1\\x8f\\x80\\x80\n    \\xf8\\x88\\x80\\x80\\x80\\=no_utf_check\n    \\xf9\\x87\\x80\\x80\\x80\\=no_utf_check\n    \\xfc\\x84\\x80\\x80\\x80\\x80\\=no_utf_check\n    \\xfd\\x83\\x80\\x80\\x80\\x80\\=no_utf_check\n    \n# Similar tests with offsets\n\n/badutf/utf\n\\= Expect UTF-8 errors\n    X\\xdfabcd\n    X\\xdfabcd\\=offset=1\n\\= Expect no match\n    X\\xdfabcd\\=offset=2\n\n/(?<=x)badutf/utf\n\\= Expect UTF-8 errors\n    X\\xdfabcd\n    X\\xdfabcd\\=offset=1\n    X\\xdfabcd\\=offset=2\n    X\\xdfabcd\\xdf\\=offset=3\n\\= Expect no match\n    X\\xdfabcd\\=offset=3\n\n/(?<=xx)badutf/utf\n\\= Expect UTF-8 errors\n    X\\xdfabcd\n    X\\xdfabcd\\=offset=1\n    X\\xdfabcd\\=offset=2\n    X\\xdfabcd\\=offset=3\n\n/(?<=xxxx)badutf/utf\n\\= Expect UTF-8 errors\n    X\\xdfabcd\n    X\\xdfabcd\\=offset=1\n    X\\xdfabcd\\=offset=2\n    X\\xdfabcd\\=offset=3\n    X\\xdfabc\\xdf\\=offset=6\n    X\\xdfabc\\xdf\\=offset=7\n\\= Expect no match\n    X\\xdfabcd\\=offset=6\n \n/\\x{100}/IB,utf\n\n/\\x{1000}/IB,utf\n\n/\\x{10000}/IB,utf\n\n/\\x{100000}/IB,utf\n\n/\\x{10ffff}/IB,utf\n\n/[\\x{ff}]/IB,utf\n\n/[\\x{100}]/IB,utf\n\n/\\x80/IB,utf\n\n/\\xff/IB,utf\n\n/\\x{D55c}\\x{ad6d}\\x{C5B4}/IB,utf\n    \\x{D55c}\\x{ad6d}\\x{C5B4}\n\n/\\x{65e5}\\x{672c}\\x{8a9e}/IB,utf\n    \\x{65e5}\\x{672c}\\x{8a9e}\n\n/\\x{80}/IB,utf\n\n/\\x{084}/IB,utf\n\n/\\x{104}/IB,utf\n\n/\\x{861}/IB,utf\n\n/\\x{212ab}/IB,utf\n\n/[^ab\\xC0-\\xF0]/IB,utf\n    \\x{f1}\n    \\x{bf}\n    \\x{100}\n    \\x{1000}\n\\= Expect no match\n    \\x{c0}\n    \\x{f0}\n\n/(\\x{100}+|x)/IB,utf\n\n/(\\x{100}*a|x)/IB,utf\n\n/(\\x{100}{0,2}a|x)/IB,utf\n\n/(\\x{100}{1,2}a|x)/IB,utf\n\n/\\x{100}/IB,utf\n\n/a\\x{100}\\x{101}*/IB,utf\n\n/a\\x{100}\\x{101}+/IB,utf\n\n/[^\\x{c4}]/IB\n\n/[\\x{100}]/IB,utf\n    \\x{100}\n    Z\\x{100}\n    \\x{100}Z\n\n/[\\xff]/IB,utf\n    >\\x{ff}<\n\n/[^\\xff]/IB,utf\n\n/\\x{100}abc(xyz(?1))/IB,utf\n\n/\\777/I,utf\n  \\x{1ff}\n  \\777\n\n/\\x{100}+\\x{200}/IB,utf\n\n/\\x{100}+X/IB,utf\n\n/^[\\QĀ\\E-\\QŐ\\E/B,utf\n\n# This tests the stricter UTF-8 check according to RFC 3629.\n\n/X/utf\n\\= Expect UTF-8 errors\n    \\x{d800}\n    \\x{da00}\n    \\x{dfff}\n    \\x{110000}\n    \\x{2000000}\n    \\x{7fffffff}\n\\= Expect no match\n    \\x{d800}\\=no_utf_check\n    \\x{da00}\\=no_utf_check\n    \\x{dfff}\\=no_utf_check\n    \\x{110000}\\=no_utf_check\n    \\x{2000000}\\=no_utf_check\n    \\x{7fffffff}\\=no_utf_check\n\n/(*UTF8)\\x{1234}/\n    abcd\\x{1234}pqr\n\n/(*CRLF)(*UTF)(*BSR_UNICODE)a\\Rb/I\n\n/\\h/I,utf\n    ABC\\x{09}\n    ABC\\x{20}\n    ABC\\x{a0}\n    ABC\\x{1680}\n    ABC\\x{180e}\n    ABC\\x{2000}\n    ABC\\x{202f}\n    ABC\\x{205f}\n    ABC\\x{3000}\n\n/\\v/I,utf\n    ABC\\x{0a}\n    ABC\\x{0b}\n    ABC\\x{0c}\n    ABC\\x{0d}\n    ABC\\x{85}\n    ABC\\x{2028}\n\n/\\h*A/I,utf\n    CDBABC\n\n/\\v+A/I,utf\n\n/\\s?xxx\\s/I,utf\n\n/\\sxxx\\s/I,utf,tables=2\n    AB\\x{85}xxx\\x{a0}XYZ\n    AB\\x{a0}xxx\\x{85}XYZ\n\n/\\S \\S/I,utf,tables=2\n    \\x{a2} \\x{84}\n    A Z\n\n/a+/utf\n    a\\x{123}aa\\=offset=1\n    a\\x{123}aa\\=offset=3\n    a\\x{123}aa\\=offset=4\n\\= Expect bad offset value\n    a\\x{123}aa\\=offset=6\n\\= Expect bad UTF-8 offset     \n    a\\x{123}aa\\=offset=2\n\\= Expect no match\n    a\\x{123}aa\\=offset=5\n\n/\\x{1234}+/Ii,utf\n\n/\\x{1234}+?/Ii,utf\n\n/\\x{1234}++/Ii,utf\n\n/\\x{1234}{2}/Ii,utf\n\n/[^\\x{c4}]/IB,utf\n\n/X+\\x{200}/IB,utf\n\n/\\R/I,utf\n\n/\\777/IB,utf\n\n/\\w+\\x{C4}/B,utf\n    a\\x{C4}\\x{C4}\n\n/\\w+\\x{C4}/B,utf,tables=2\n    a\\x{C4}\\x{C4}\n\n/\\W+\\x{C4}/B,utf\n    !\\x{C4}\n\n/\\W+\\x{C4}/B,utf,tables=2\n    !\\x{C4}\n\n/\\W+\\x{A1}/B,utf\n    !\\x{A1}\n\n/\\W+\\x{A1}/B,utf,tables=2\n    !\\x{A1}\n\n/X\\s+\\x{A0}/B,utf\n    X\\x20\\x{A0}\\x{A0}\n\n/X\\s+\\x{A0}/B,utf,tables=2\n    X\\x20\\x{A0}\\x{A0}\n\n/\\S+\\x{A0}/B,utf\n    X\\x{A0}\\x{A0}\n\n/\\S+\\x{A0}/B,utf,tables=2\n    X\\x{A0}\\x{A0}\n\n/\\x{a0}+\\s!/B,utf\n    \\x{a0}\\x20!\n\n/\\x{a0}+\\s!/B,utf,tables=2\n    \\x{a0}\\x20!\n\n/A/utf\n  \\x{ff000041}\n  \\x{7f000041}\n\n/(*UTF8)abc/never_utf\n\n/abc/utf,never_utf\n\n/(*UCP)abc/never_ucp\n\n/abc/ucp,never_ucp\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/IBi,utf\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/IB,utf\n\n/AB\\x{1fb0}/IB,utf\n\n/AB\\x{1fb0}/IBi,utf\n\n/\\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}/Ii,utf\n    \\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}\n    \\x{451}\\x{440}\\x{441}\\x{442}\\x{443}\\x{444}\\x{445}\\x{446}\\x{447}\\x{448}\\x{449}\\x{44a}\\x{44b}\\x{44c}\\x{44d}\\x{44e}\\x{44f}\n\n/[ⱥ]/Bi,utf\n\n/[^ⱥ]/Bi,utf\n\n/\\h/I\n\n/\\v/I\n\n/\\R/I\n\n/[[:blank:]]/B,ucp\n\n/\\x{212a}+/Ii,utf\n    KKkk\\x{212a}\n\n/s+/Ii,utf\n    SSss\\x{17f}\n\n/\\x{100}*A/IB,utf\n    A\n\n/\\x{100}*\\d(?R)/IB,utf\n\n/[Z\\x{100}]/IB,utf\n    Z\\x{100}\n    \\x{100}\n    \\x{100}Z\n\n/[z-\\x{100}]/IB,utf\n\n/[z\\Qa-d]Ā\\E]/IB,utf\n    \\x{100}\n    Ā \n\n/[ab\\x{100}]abc(xyz(?1))/IB,utf\n\n/\\x{100}*\\s/IB,utf\n\n/\\x{100}*\\d/IB,utf\n\n/\\x{100}*\\w/IB,utf\n\n/\\x{100}*\\D/IB,utf\n\n/\\x{100}*\\S/IB,utf\n\n/\\x{100}*\\W/IB,utf\n\n/[\\x{105}-\\x{109}]/IBi,utf\n    \\x{104}\n    \\x{105}\n    \\x{109}  \n\\= Expect no match\n    \\x{100}\n    \\x{10a} \n    \n/[z-\\x{100}]/IBi,utf\n    Z\n    z\n    \\x{39c}\n    \\x{178}\n    |\n    \\x{80}\n    \\x{ff}\n    \\x{100}\n    \\x{101} \n\\= Expect no match\n    \\x{102}\n    Y\n    y           \n\n/[z-\\x{100}]/IBi,utf\n\n/\\x{3a3}B/IBi,utf\n\n/abc/utf,replace=\n    abc\n\n/(?<=(a)(?-1))x/I,utf\n    a\\x80zx\\=offset=3\n\n/[\\W\\p{Any}]/B\n    abc\n    123 \n\n/[\\W\\pL]/B\n    abc\n\\= Expect no match\n    123     \n\n/\\p{  Aሴ}/utf\n\n/\\p{BC: Aሴ}/utf\n\n/(*:*++++++++++++''''''''''''''''''''+''+++'+++x+++++++++++++++++++++++++++++++++++(++++++++++++++++++++:++++++%++:''''''''''''''''''''''''+++++++++++++++++++++++++++++++++++++++++++++++++++++-++++++++k+++++++''''+++'+++++++++++++++++++++++''''++++++++++++':ƿ)/utf\n\n/[\\s[:^ascii:]]/B,ucp\n\n# A special extra option allows excaped surrogate code points in 8-bit mode,\n# but subjects containing them must not be UTF-checked.\n\n/\\x{d800}/I,utf,allow_surrogate_escapes\n    \\x{d800}\\=no_utf_check\n\n/\\udfff\\o{157401}/utf,alt_bsux,allow_surrogate_escapes\n    \\x{dfff}\\x{df01}\\=no_utf_check\n    \n# This has different starting code units in 8-bit mode. \n\n/^[^ab]/IB,utf\n    c\n    \\x{ff}\n    \\x{100}\n\\= Expect no match\n    aaa\n    \n# Offsets are different in 8-bit mode. \n\n/(?<=abc)(|def)/g,utf,replace=<$0>,substitute_callout\n    123abcáyzabcdef789abcሴqr\n    \n# Check name length with non-ASCII characters \n\n/(?'ABáC678901234567890123456789012012345678901234567890123456789AB012345678901234567890123456789AB012345678901234567890123456789AB'...)/utf\n\n/(?'ABáC6789012345678901234567890123012345678901234567890123456789AB012345678901234567890123456789AB012345678901234567890123456789AB'...)/utf\n\n/(?'ABZC6789012345678901234567890123012345678901234567890123456789AB012345678901234567890123456789AB012345678901234567890123456789AB'...)/utf\n\n/(?(n/utf\n\n/(?(á/utf\n\n/^\\cģ/utf\n\n/(?'٠ABC'...)/utf\n\n# Invalid UTF-8 tests\n\n/.../g,match_invalid_utf\n    abcd\\x80wxzy\\x80pqrs\n    abcd\\x{80}wxzy\\x80pqrs\n\n/abc/match_invalid_utf\n    ab\\x80ab\\=ph\n\\= Expect no match\n    ab\\x80cdef\\=ph\n\n/.a/match_invalid_utf\n    ab\\=ph\n    ab\\=ps\n    b\\xf0\\x91\\x88b\\=ph\n    b\\xf0\\x91\\x88b\\=ps\n    b\\xf0\\x91\\x88\\xb4a\n\\= Expect no match\n    b\\x80\\=ph\n    b\\x80\\=ps\n    b\\xf0\\x91\\x88\\=ph\n    b\\xf0\\x91\\x88\\=ps\n\n/.a$/match_invalid_utf\n    ab\\=ph\n    ab\\=ps\n\\= Expect no match\n    b\\xf0\\x91\\x98\\=ph\n    b\\xf0\\x91\\x98\\=ps\n\n/ab$/match_invalid_utf\n    ab\\x80cdeab\n\\= Expect no match\n    ab\\x80cde\n\n/.../g,match_invalid_utf\n    abcd\\x{80}wxzy\\x80pqrs\n\n/(?<=x)../g,match_invalid_utf\n    abcd\\x{80}wxzy\\x80pqrs\n    abcd\\x{80}wxzy\\x80xpqrs\n    \n/X$/match_invalid_utf\n\\= Expect no match\n    X\\xc4\n    \n/(?<=..)X/match_invalid_utf,aftertext\n    AB\\x80AQXYZ\n    AB\\x80AQXYZ\\=offset=5\n    AB\\x80\\x80AXYZXC\\=offset=5\n\\= Expect no match\n    AB\\x80XYZ\n    AB\\x80XYZ\\=offset=3 \n    AB\\xfeXYZ\n    AB\\xffXYZ\\=offset=3 \n    AB\\x80AXYZ\n    AB\\x80AXYZ\\=offset=4\n    AB\\x80\\x80AXYZ\\=offset=5\n\n/.../match_invalid_utf\n    AB\\xc4CCC\n\\= Expect no match\n    A\\x{d800}B\n    A\\x{110000}B\n    A\\xc4B  \n\n/\\bX/match_invalid_utf\n    A\\x80X\n\n/\\BX/match_invalid_utf\n\\= Expect no match\n    A\\x80X\n    \n/(?<=...)X/match_invalid_utf\n    AAA\\x80BBBXYZ \n\\= Expect no match\n    AAA\\x80BXYZ \n    AAA\\x80BBXYZ \n\n# -------------------------------------\n\n/(*UTF)(?=\\x{123})/I\n\n/[\\x{c1}\\x{e1}]X[\\x{145}\\x{146}]/I,utf\n\n/[󿾟,]/BI,utf\n\n/[\\x{fff4}-\\x{ffff8}]/I,utf\n\n/[\\x{fff4}-\\x{afff8}\\x{10ffff}]/I,utf\n\n/[\\xff\\x{ffff}]/I,utf\n\n/[\\xff\\x{ff}]/I,utf\n    abc\\x{ff}def\n\n/[\\xff\\x{ff}]/I\n    abc\\x{ff}def\n\n/[Ss]/I\n\n/[Ss]/I,utf\n\n/(?:\\x{ff}|\\x{3000})/I,utf\n\n/x/utf\n    abxyz\n    \\x80\\=startchar\n    abc\\x80\\=startchar\n    abc\\x80\\=startchar,offset=3\n\n/\\x{c1}+\\x{e1}/iIB,ucp\n    \\x{c1}\\x{c1}\\x{c1}\n    \\x{e1}\\x{e1}\\x{e1} \n\n/a|\\x{c1}/iI,ucp\n    \\x{e1}xxx\n\n/a|\\x{c1}/iI,utf\n    \\x{e1}xxx\n\n/\\x{c1}|\\x{e1}/iI,ucp\n\n/X(\\x{e1})Y/ucp,replace=>\\U$1<,substitute_extended\n    X\\x{e1}Y\n\n/X(\\x{e1})Y/i,ucp,replace=>\\L$1<,substitute_extended\n    X\\x{c1}Y\n\n# Without UTF or UCP characters > 127 have only one case in the default locale.\n\n/X(\\x{e1})Y/replace=>\\U$1<,substitute_extended\n    X\\x{e1}Y\n\n/A/utf,match_invalid_utf,caseless\n    \\xe5A\n\n/\\bch\\b/utf,match_invalid_utf\n    qchq\\=ph\n    qchq\\=ps\n\n/line1\\nbreak/firstline,utf,match_invalid_utf\n    line1\\nbreak\n    line0\\nline1\\nbreak\n\n/A\\z/utf,match_invalid_utf\n    A\\x80\\x42\\n\n\n/ab$/match_invalid_utf\n\\= Expect no match            \n    ab\\x80cde         \n\n/ab\\z/match_invalid_utf\n\\= Expect no match            \n    ab\\x80cde         \n\n/ab\\Z/match_invalid_utf\n\\= Expect no match            \n    ab\\x80cde         \n\n/(..)(*scs:(1)ab\\z)/match_invalid_utf\n    ab\\x80cde         \n\n/(..)(*scs:(1)ab\\Z)/match_invalid_utf\n    ab\\x80cde         \n\n/(..)(*scs:(1)ab$)/match_invalid_utf\n    ab\\x80cde         \n\n/(.) \\1/i,ucp\n    i I\n\n/(.) \\1/i,ucp,turkish_casing\n\n/[\\x60-\\x7f]/i,ucp,turkish_casing\n    i\n\\= Expect no match\n    I\n\n/[\\x60-\\xc0]/i,ucp,turkish_casing\n    i\n\\= Expect no match\n    I\n\n/[\\x80-\\xc0]/i,ucp,turkish_casing\n\\= Expect no match\n    i\n    I\n\n# python_octal\n\n/\\400/\n\n/abc/substitute_extended\n    abc\\=replace=\\400\n\n/\\400/python_octal\n\n/abc/substitute_extended,python_octal\n    abc\\=replace=\\400\n\n/\\400/utf\n\n/abc/utf,substitute_extended\n    abc\\=replace=\\400\n\n/\\400/utf,python_octal\n\n/abc/utf,substitute_extended,python_octal\n    abc\\=replace=\\400\n\n/[\\x00-\\x2f\\x11-\\xff]+/B\n    abcd\n\n/[\\x00-\\x2f\\x11-\\xff]{4,}/B,utf\n    abcd\n\n# End of testinput10\n"
  },
  {
    "path": "testdata/testinput11",
    "content": "# This set of tests is for the 16-bit and 32-bit libraries' basic (non-UTF)\n# features that are not compatible with the 8-bit library, or which give\n# different output in 16-bit or 32-bit mode. The output for the two widths is\n# different, so they have separate output files.\n    \n#forbid_utf\n#newline_default LF ANY ANYCRLF\n\n/[^\\x{c4}]/IB\n  \n/\\x{100}/I\n\n/  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                          # optional leading comment\n(?:    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n# address\n|                     #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)             # one word, optionally followed by....\n(?:\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037]  |  # atom and space parts, or...\n\\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)       |  # comments, or...\n\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n# quoted strings\n)*\n<  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                     # leading <\n(?:  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  ,  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n)* # further okay, if led by comma\n:                                # closing colon\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  )? #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n#       address spec\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  > #                  trailing >\n# name and address\n)  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                       # optional trailing comment\n/Ix\n\n/[\\h]/B\n    >\\x09<\n\n/[\\h]+/B\n    >\\x09\\x20\\xa0<\n\n/[\\v]/B\n\n/[^\\h]/B\n\n/\\h+/I\n    \\x{1681}\\x{200b}\\x{1680}\\x{2000}\\x{202f}\\x{3000}\n    \\x{3001}\\x{2fff}\\x{200a}\\xa0\\x{2000}\n\n/[\\h\\x{dc00}]+/IB\n    \\x{1681}\\x{200b}\\x{1680}\\x{2000}\\x{202f}\\x{3000}\n    \\x{3001}\\x{2fff}\\x{200a}\\xa0\\x{2000}\n\n/\\H+/I\n    \\x{1680}\\x{180e}\\x{167f}\\x{1681}\\x{180d}\\x{180f}\n    \\x{2000}\\x{200a}\\x{1fff}\\x{200b}\n    \\x{202f}\\x{205f}\\x{202e}\\x{2030}\\x{205e}\\x{2060}\n    \\xa0\\x{3000}\\x9f\\xa1\\x{2fff}\\x{3001}\n\n/[\\H\\x{d800}]+/\n    \\x{1680}\\x{180e}\\x{167f}\\x{1681}\\x{180d}\\x{180f}\n    \\x{2000}\\x{200a}\\x{1fff}\\x{200b}\n    \\x{202f}\\x{205f}\\x{202e}\\x{2030}\\x{205e}\\x{2060}\n    \\xa0\\x{3000}\\x9f\\xa1\\x{2fff}\\x{3001}\n\n/\\v+/I\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n    \\x09\\x0e\\x84\\x86\\x85\\x0a\\x0b\\x0c\\x0d\n\n/[\\v\\x{dc00}]+/IB\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n    \\x09\\x0e\\x84\\x86\\x85\\x0a\\x0b\\x0c\\x0d\n\n/\\V+/I\n    \\x{2028}\\x{2029}\\x{2027}\\x{2030}\n    \\x85\\x0a\\x0b\\x0c\\x0d\\x09\\x0e\\x84\\x86\n\n/[\\V\\x{d800}]+/\n    \\x{2028}\\x{2029}\\x{2027}\\x{2030}\n    \\x85\\x0a\\x0b\\x0c\\x0d\\x09\\x0e\\x84\\x86\n\n/\\R+/I,bsr=unicode\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n    \\x09\\x0e\\x84\\x86\\x85\\x0a\\x0b\\x0c\\x0d\n\n/\\x{d800}\\x{d7ff}\\x{dc00}\\x{dc00}\\x{dcff}\\x{dd00}/I\n    \\x{d800}\\x{d7ff}\\x{dc00}\\x{dc00}\\x{dcff}\\x{dd00}\n\n/[^\\x{80}][^\\x{ff}][^\\x{100}][^\\x{1000}][^\\x{ffff}]/B\n\n/[^\\x{80}][^\\x{ff}][^\\x{100}][^\\x{1000}][^\\x{ffff}]/Bi\n\n/[^\\x{100}]*[^\\x{1000}]+[^\\x{ffff}]??[^\\x{8000}]{4,}[^\\x{7fff}]{2,9}?[^\\x{100}]{5,6}+/B\n\n/[^\\x{100}]*[^\\x{1000}]+[^\\x{ffff}]??[^\\x{8000}]{4,}[^\\x{7fff}]{2,9}?[^\\x{100}]{5,6}+/Bi\n\n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/mark\n    XX\n     \n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/mark\n    XX\n\n/\\u0100/B,alt_bsux,allow_empty_class,match_unset_backref\n\n/[\\u0100-\\u0200]/B,alt_bsux,allow_empty_class,match_unset_backref\n\n/\\ud800/B,alt_bsux,allow_empty_class,match_unset_backref\n\n/^\\x{ffff}+/i\n    \\x{ffff}\n\n/^\\x{ffff}?/i\n    \\x{ffff}\n\n/^\\x{ffff}*/i\n    \\x{ffff}\n\n/^\\x{ffff}{3}/i\n    \\x{ffff}\\x{ffff}\\x{ffff}\n\n/^\\x{ffff}{0,3}/i\n    \\x{ffff}\n\n/[^\\x00-a]{12,}[^b-\\xff]*/B\n\n/[^\\s]*\\s* [^\\W]+\\W+ [^\\d]*?\\d0 [^\\d\\w]{4,6}?\\w*A/B\n\n/a*[b-\\x{200}]?a#a*[b-\\x{200}]?b#[a-f]*[g-\\x{200}]*#[g-\\x{200}]*[a-c]*#[g-\\x{200}]*[a-h]*/B\n\n/^[\\x{1234}\\x{4321}]{2,4}?/\n    \\x{1234}\\x{1234}\\x{1234}\n\n# Check maximum non-UTF character size for the 16-bit library.\n\n/\\x{ffff}/\n    A\\x{ffff}B\n\n/\\x{10000}/\n\n/\\o{20000}/\n\n# Check maximum character size for the 32-bit library. These will all give\n# errors in the 16-bit library.\n\n/\\x{110000}/\n\n/\\x{7fffffff}/\n\n/\\x{80000000}/\n\n/\\x{ffffffff}/\n\n/\\x{100000000}/\n\n/\\o{17777777777}/\n\n/\\o{20000000000}/\n\n/\\o{37777777777}/\n\n/\\o{40000000000}/\n\n/\\x{7fffffff}\\x{7fffffff}/I\n\n/\\x{80000000}\\x{80000000}/I\n\n/\\x{ffffffff}\\x{ffffffff}/I\n\n# Non-UTF characters \n\n/.{2,3}/\n    \\x{400000}\\x{400001}\\x{400002}\\x{400003}\n\n/\\x{400000}\\x{800000}/IBi\n\n# Check character ranges \n\n/[\\H]/IB\n\n/[\\V]/IB\n\n/(*THEN:\\[A]{65501})/expand\n\n# We can use pcre2test's utf8_input modifier to create wide pattern characters,\n# even though this test is run when UTF is not supported.\n\n/a\\x{d800}b/utf8_input\n    ab\n    a\\x{d800}b\n    a\\o{154000}b\n\\= Expect warning unless 32bit\n    a\\N{U+d800}b\n\n/a\\x{ffff}b/utf8_input\n    a￿b\n    a\\x{ffff}b\n    a\\o{177777}b\n    a\\N{U+ffff}b\n\n/abz/utf8_input\n    abz\n    ab\\x{7fffffff}z\n    ab\\o{17777777777}z\n    ab\\N{U+7fffffff}z\n\n/abz/utf8_input\n    abz\n    ab\\x{ffffffff}z \n\n/abAz/utf8_input\n    abAz\n    ab\\x{80000041}z \n\\= Expect no match\n    abAz\n    aAz\n    ab\\377Az\n    ab\\xff\\N{U+0041}z\n    ab\\N{U+ff}\\N{U+41}z\n\n/ab\\x{80000041}z/\n    ab\\x{80000041}z\n\n/(?i:A{1,}\\6666666666)/\n    A\\x{1b6}6666666\n\n/abc/substitute_extended,replace=>\\777<\n    abc\n\n/abc/substitute_extended,replace=>\\o{012345}<\n    abc\n\n# Character range merging tests\n\n/[\\x{100}-\\x{200}\\H\\x{8000}-\\x{9000}]/B\n\n/[\\x{100}-\\x{200}\\V\\x{8000}-\\x{9000}]/B\n\n/[\\x00-\\x{6000}\\x{3000}-\\x{ffff}]#[\\x00-\\x{6000}\\x{3000}-\\x{ffff}]{5,7}?/B\n\n/[\\x00-\\x{6000}\\x{3000}-\\x{ffffffff}]#[\\x00-\\x{6000}\\x{3000}-\\x{ffffffff}]{5,7}?/B\n\n/[\\x00-\\x2f\\x11-\\xff]*?!/B\n    abcd!e\n\n/i/turkish_casing\n\n# Character list tests\n\n/([\\x{100}-\\x{7fff}\\x{9000}\\x{9002}\\x{9004}\\x{9006}\\x{9008}\\x{10000}-\\x{7fffffff}]{3,8}?).#/B\n  \\x{9001}\\x{9007}\\x{8000}\\x{ffff}\\x{9002}\\x{7fff}\\x{10000}\\x{7fffffff}\\x{500000}\\x{9006}#\n\n/([\\x{3000}\\x{3001}\\x{3003}\\x{3004}\\x{3006}\\x{3007}\\x{8000}-\\x{ffff}\\x{100001}\\x{100002}\\x{100004}\\x{100005}\\x{100007}\\x{100008}\\x{10000a}\\x{10000b}\\x{80000000}-\\x{ffffffff}]{5,}).#/B\n  \\x{2fff}\\x{3002}\\x{7fff}\\x{100000}\\x{7fffffff}\\x{3000}\\x{3007}\\x{8000}\\x{ffff}\\x{100001}\\x{10000b}\\x{80000000}\\x{ffffffff}\\x{3000}#\n\n/([^\\x{4000}\\x{4002}\\x{4004}\\x{4005}\\x{4007}\\x{4009}\\x{400a}\\x{f000}\\x{f002}\\x{f004}\\x{f005}\\x{f007}\\x{f009}\\x{f00a}\\x{100000}\\x{100002}\\x{100004}\\x{100005}\\x{100007}\\x{100009}\\x{10000a}\\x{a0000000}\\x{a0000002}\\x{a0000004}\\x{a0000005}\\x{a0000007}\\x{a0000009}\\x{a000000a}]+).#/B\n  \\x{4000}\\x{4002}\\x{4004}\\x{4005}\\x{4007}\\x{4009}\\x{400a}\\x{3fff}\\x{4001}\\x{4003}\\x{4006}\\x{4008}\\x{400b}\\x{100}#\n  \\x{f000}\\x{f002}\\x{f004}\\x{f005}\\x{f007}\\x{f009}\\x{f00a}\\x{efff}\\x{f001}\\x{f003}\\x{f006}\\x{f008}\\x{f00b}\\x{100}#\n  \\x{100000}\\x{100002}\\x{100004}\\x{100005}\\x{100007}\\x{100009}\\x{10000a}\\x{fffff}\\x{100001}\\x{100003}\\x{100006}\\x{100008}\\x{10000b}\\x{100}#\n  \\x{a0000000}\\x{a0000002}\\x{a0000004}\\x{a0000005}\\x{a0000007}\\x{a0000009}\\x{a000000a}\\x{9fffffff}\\x{a0000001}\\x{a0000003}\\x{a0000006}\\x{a0000008}\\x{a000000b}\\x{100}#\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (UTS#18)\n\n# META_BIGVALUE tests\n\n/\\x{80000000}/B\n    \\x{80000000}\n\\= Expect no match\n    \\x{7fffffff}\n    \\x{80000001}\n\n/[\\x{80000000}-\\x{8000000f}\\x{8fffffff}]/B\n    \\x{80000002}\n    \\x{8fffffff}\n\\= Expect no match\n    \\x{7fffffff}\n    \\x{90000000}\n\n/\\x{80000000}/B,alt_extended_class\n    \\x{80000000}\n\\= Expect no match\n    \\x{7fffffff}\n    \\x{80000001}\n\n/[\\x{80000000}-\\x{8000000f}\\x{8fffffff}]/B,alt_extended_class\n    \\x{80000002}\n    \\x{8fffffff}\n\\= Expect no match\n    \\x{7fffffff}\n    \\x{90000000}\n\n/[\\x{80000000}-\\x{8000000f}--\\x{80000002}]/B,alt_extended_class\n    \\x{80000001}\n    \\x{80000003}\n\\= Expect no match\n    \\x{80000002}\n\n/[[\\x{80000000}-\\x{8000000f}]--[\\x{80000002}]]/B,alt_extended_class\n    \\x{80000001}\n    \\x{80000003}\n\\= Expect no match\n    \\x{80000002}\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n# META_BIGVALUE tests\n\n/(?[[\\x{80000000}-\\x{8000000f}]+\\x{8fffffff}])/B\n    \\x{80000002}\n    \\x{8fffffff}\n\\= Expect no match\n    \\x{7fffffff}\n    \\x{90000000}\n\n/(?[[\\x{80000000}-\\x{8000000f}]-\\x{80000002}])/B\n    \\x{80000001}\n    \\x{80000003}\n\\= Expect no match\n    \\x{80000002}\n\n/(?[[\\x{80000000}-\\x{8000000f}]-\\x{80000002}])/B\n    \\x{80000001}\n    \\x{80000003}\n\\= Expect no match\n    \\x{80000002}\n\n# --------------\n\n# End of testinput11\n"
  },
  {
    "path": "testdata/testinput12",
    "content": "# This set of tests is for UTF-16 and UTF-32 support, including Unicode\n# properties. It is relevant only to the 16-bit and 32-bit libraries. The\n# output is different for each library, so there are separate output files.\n\n/xxx/IB,utf,no_utf_check\n\n/abc/utf\n    ]\n\n# Check maximum character size \n\n/\\x{ffff}/IB,utf\n\n/\\x{10000}/IB,utf\n\n/\\x{100}/IB,utf\n\n/\\x{1000}/IB,utf\n\n/\\x{10000}/IB,utf\n\n/\\x{100000}/IB,utf\n\n/\\x{10ffff}/IB,utf\n\n/[\\x{ff}]/IB,utf\n\n/[\\x{100}]/IB,utf\n\n/\\x80/IB,utf\n\n/\\xff/IB,utf\n\n/\\x{D55c}\\x{ad6d}\\x{C5B4}/IB,utf\n    \\x{D55c}\\x{ad6d}\\x{C5B4}\n\n/\\x{65e5}\\x{672c}\\x{8a9e}/IB,utf\n    \\x{65e5}\\x{672c}\\x{8a9e}\n\n/\\x{80}/IB,utf\n\n/\\x{084}/IB,utf\n\n/\\x{104}/IB,utf\n\n/\\x{861}/IB,utf\n\n/\\x{212ab}/IB,utf\n\n/[^ab\\xC0-\\xF0]/IB,utf\n    \\x{f1}\n    \\x{bf}\n    \\x{100}\n    \\x{1000}\n\\= Expect no match\n    \\x{c0}\n    \\x{f0}\n\n/(\\x{100}+|x)/IB,utf\n\n/(\\x{100}*a|x)/IB,utf\n\n/(\\x{100}{0,2}a|x)/IB,utf\n\n/(\\x{100}{1,2}a|x)/IB,utf\n\n/\\x{100}/IB,utf\n\n/a\\x{100}\\x{101}*/IB,utf\n\n/a\\x{100}\\x{101}+/IB,utf\n\n/[^\\x{c4}]/IB\n\n/[\\x{100}]/IB,utf\n    \\x{100}\n    Z\\x{100}\n    \\x{100}Z\n\n/[\\xff]/IB,utf\n    >\\x{ff}<\n\n/[^\\xff]/IB,utf\n\n/\\x{100}abc(xyz(?1))/IB,utf\n\n/\\777/I,utf\n  \\x{1ff}\n  \\777\n\n/\\x{100}+\\x{200}/IB,utf\n\n/\\x{100}+X/IB,utf\n\n/^[\\QĀ\\E-\\QŐ\\E/B,utf\n\n/X/utf\n    XX\\x{d800}\\=no_utf_check\n    XX\\x{da00}\\=no_utf_check\n    XX\\x{dc00}\\=no_utf_check\n    XX\\x{de00}\\=no_utf_check\n    XX\\x{dfff}\\=no_utf_check\n\\= Expect UTF error\n    XX\\x{d800}\n    XX\\x{da00}\n    XX\\x{dc00}\n    XX\\x{de00}\n    XX\\x{dfff}\n    XX\\x{110000}\n    XX\\x{d800}\\x{1234}\n\\= Expect no match\n    XX\\x{d800}\\=offset=3\n    \n/(?<=.)X/utf\n    XX\\x{d800}\\=offset=3\n\n/(*UTF16)\\x{11234}/\n  abcd\\x{11234}pqr\n\n/(*UTF)\\x{11234}/I\n  abcd\\x{11234}pqr\n\n/(*UTF-32)\\x{11234}/\n  abcd\\x{11234}pqr\n\n/(*UTF-32)\\x{112}/\n  abcd\\x{11234}pqr\n\n/(*CRLF)(*UTF16)(*BSR_UNICODE)a\\Rb/I\n\n/(*CRLF)(*UTF32)(*BSR_UNICODE)a\\Rb/I\n\n/\\h/I,utf\n    ABC\\x{09}\n    ABC\\x{20}\n    ABC\\x{a0}\n    ABC\\x{1680}\n    ABC\\x{180e}\n    ABC\\x{2000}\n    ABC\\x{202f}\n    ABC\\x{205f}\n    ABC\\x{3000}\n\n/\\v/I,utf\n    ABC\\x{0a}\n    ABC\\x{0b}\n    ABC\\x{0c}\n    ABC\\x{0d}\n    ABC\\x{85}\n    ABC\\x{2028}\n\n/\\h*A/I,utf\n    CDBABC\n    \\x{2000}ABC\n\n/\\R*A/I,bsr=unicode,utf\n    CDBABC\n    \\x{2028}A\n\n/\\v+A/I,utf\n\n/\\s?xxx\\s/I,utf\n\n/\\sxxx\\s/I,utf,tables=2\n    AB\\x{85}xxx\\x{a0}XYZ\n    AB\\x{a0}xxx\\x{85}XYZ\n\n/\\S \\S/I,utf,tables=2\n    \\x{a2} \\x{84}\n    A Z\n\n/a+/utf\n    a\\x{123}aa\\=offset=1\n    a\\x{123}aa\\=offset=2\n    a\\x{123}aa\\=offset=3\n\\= Expect no match\n    a\\x{123}aa\\=offset=4\n\\= Expect bad offset error     \n    a\\x{123}aa\\=offset=5\n    a\\x{123}aa\\=offset=6\n\n/\\x{1234}+/Ii,utf\n\n/\\x{1234}+?/Ii,utf\n\n/\\x{1234}++/Ii,utf\n\n/\\x{1234}{2}/Ii,utf\n\n/[^\\x{c4}]/IB,utf\n\n/X+\\x{200}/IB,utf\n\n/\\R/I,utf\n\n# Check bad offset \n\n/a/utf\n\\= Expect bad UTF-16 offset, or no match in 32-bit\n    \\x{10000}\\=offset=1\n    \\x{10000}ab\\=offset=1\n\\= Expect 16-bit match, 32-bit no match\n    \\x{10000}ab\\=offset=2\n\\= Expect no match     \n    \\x{10000}ab\\=offset=3\n\\= Expect no match in 16-bit, bad offset in 32-bit    \n    \\x{10000}ab\\=offset=4\n\\= Expect bad offset     \n    \\x{10000}ab\\=offset=5\n\n//utf\n\n/\\w+\\x{C4}/B,utf\n    a\\x{C4}\\x{C4}\n\n/\\w+\\x{C4}/B,utf,tables=2\n    a\\x{C4}\\x{C4}\n    \n/\\W+\\x{C4}/B,utf\n    !\\x{C4}\n \n/\\W+\\x{C4}/B,utf,tables=2\n    !\\x{C4}\n\n/\\W+\\x{A1}/B,utf\n    !\\x{A1}\n \n/\\W+\\x{A1}/B,utf,tables=2\n    !\\x{A1}\n\n/X\\s+\\x{A0}/B,utf\n    X\\x20\\x{A0}\\x{A0}\n\n/X\\s+\\x{A0}/B,utf,tables=2\n    X\\x20\\x{A0}\\x{A0}\n\n/\\S+\\x{A0}/B,utf\n    X\\x{A0}\\x{A0}\n\n/\\S+\\x{A0}/B,utf,tables=2\n    X\\x{A0}\\x{A0}\n\n/\\x{a0}+\\s!/B,utf\n    \\x{a0}\\x20!\n\n/\\x{a0}+\\s!/B,utf,tables=2\n    \\x{a0}\\x20!\n\n/(*UTF)abc/never_utf\n\n/abc/utf,never_utf\n\n/(*UCP)abc/never_ucp\n\n/abc/ucp,never_ucp\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/IBi,utf\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/IB,utf\n\n/AB\\x{1fb0}/IB,utf\n\n/AB\\x{1fb0}/IBi,utf\n\n/\\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}/Ii,utf\n    \\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}\n    \\x{451}\\x{440}\\x{441}\\x{442}\\x{443}\\x{444}\\x{445}\\x{446}\\x{447}\\x{448}\\x{449}\\x{44a}\\x{44b}\\x{44c}\\x{44d}\\x{44e}\\x{44f}\n\n/[ⱥ]/Bi,utf\n\n/[^ⱥ]/Bi,utf\n\n/[[:blank:]]/B,ucp\n\n/\\x{212a}+/Ii,utf\n    KKkk\\x{212a}\n\n/s+/Ii,utf\n    SSss\\x{17f}\n\n# Non-UTF characters should give errors in both 16-bit and 32-bit modes.\n\n/\\x{110000}/utf\n\n/\\o{4200000}/utf\n\n/\\x{100}*A/IB,utf\n    A\n\n/\\x{100}*\\d(?R)/IB,utf\n\n/[Z\\x{100}]/IB,utf\n    Z\\x{100}\n    \\x{100}\n    \\x{100}Z\n\n/[z-\\x{100}]/IB,utf\n\n/[z\\Qa-d]Ā\\E]/IB,utf\n    \\x{100}\n    Ā \n\n/[ab\\x{100}]abc(xyz(?1))/IB,utf\n\n/\\x{100}*\\s/IB,utf\n\n/\\x{100}*\\d/IB,utf\n\n/\\x{100}*\\w/IB,utf\n\n/\\x{100}*\\D/IB,utf\n\n/\\x{100}*\\S/IB,utf\n\n/\\x{100}*\\W/IB,utf\n\n/[\\x{105}-\\x{109}]/IBi,utf\n    \\x{104}\n    \\x{105}\n    \\x{109}  \n\\= Expect no match\n    \\x{100}\n    \\x{10a} \n    \n/[z-\\x{100}]/IBi,utf\n    Z\n    z\n    \\x{39c}\n    \\x{178}\n    |\n    \\x{80}\n    \\x{ff}\n    \\x{100}\n    \\x{101} \n\\= Expect no match\n    \\x{102}\n    Y\n    y           \n\n/[z-\\x{100}]/IBi,utf\n\n/\\x{3a3}B/IBi,utf\n\n/./utf\n    \\x{110000}\n\n/(*UTF)abz/B\n\n/abz/utf\n\n/[\\W\\p{Any}]/B\n    abc\n    123 \n\n/[\\W\\pL]/B\n    abc\n    \\x{100}\n    \\x{308}  \n\\= Expect no match\n    123     \n\n/[\\s[:^ascii:]]/B,ucp\n\n/\\pP/ucp\n    \\x{7fffffff}\n\n/\\p{  Aሴ}/utf\n\n/\\p{BC: Aሴ}/utf\n\n# A special extra option allows escaped surrogate code points in 32-bit mode,\n# but subjects containing them must not be UTF-checked. These patterns give\n# errors in 16-bit mode.\n\n/\\x{d800}/I,utf,allow_surrogate_escapes\n    \\x{d800}\\=no_utf_check\n\n/\\udfff\\o{157401}/utf,alt_bsux,allow_surrogate_escapes\n    \\x{dfff}\\x{df01}\\=no_utf_check\n\n# This has different starting code units in 8-bit mode. \n\n/^[^ab]/IB,utf\n    c\n    \\x{ff}\n    \\x{100}\n\\= Expect no match\n    aaa\n    \n# Offsets are different in 8-bit mode. \n\n/(?<=abc)(|def)/g,utf,replace=<$0>,substitute_callout\n    123abcáyzabcdef789abcሴqr\n    \n# A few script run tests in non-UTF mode (but they need Unicode support)\n\n/^(*script_run:.{4})/\n    \\x{3041}\\x{30a1}\\x{3007}\\x{3007}   Hiragana Katakana Han Han\n    \\x{30a1}\\x{3041}\\x{3007}\\x{3007}   Katakana Hiragana Han Han\n    \\x{1100}\\x{2e80}\\x{2e80}\\x{1101}   Hangul Han Han Hangul\n \n/^(*sr:.*)/utf,allow_surrogate_escapes\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\n    \\x{d800}\\x{dfff}                   Surrogates (Unknown) \\=no_utf_check\n\n/(?(n/utf\n\n/(?(á/utf\n\n/^\\cģ/utf\n\n/(?'٠ABC'...)/utf\n\n# Invalid UTF-16/32 tests.\n\n/.../g,match_invalid_utf\n    abcd\\x{df00}wxzy\\x{df00}pqrs\n    abcd\\x{80}wxzy\\x{df00}pqrs\n\n/abc/match_invalid_utf\n    ab\\x{df00}ab\\=ph\n\\= Expect no match\n    ab\\x{df00}cdef\\=ph\n\n/.a/match_invalid_utf\n    ab\\=ph\n    ab\\=ps\n\\= Expect no match\n    b\\x{df00}\\=ph\n    b\\x{df00}\\=ps\n\n/.a$/match_invalid_utf\n    ab\\=ph\n    ab\\=ps\n\\= Expect no match\n    b\\x{df00}\\=ph\n    b\\x{df00}\\=ps\n\n/ab$/match_invalid_utf\n    ab\\x{df00}cdeab\n\\= Expect no match\n    ab\\x{df00}cde\n\n/.../g,match_invalid_utf\n    abcd\\x{80}wxzy\\x{df00}pqrs\n\n/(?<=x)../g,match_invalid_utf\n    abcd\\x{80}wxzy\\x{df00}pqrs\n    abcd\\x{80}wxzy\\x{df00}xpqrs\n\n/X$/match_invalid_utf\n\\= Expect no match\n    X\\x{df00}\n    \n/(?<=..)X/match_invalid_utf,aftertext\n    AB\\x{df00}AQXYZ\n    AB\\x{df00}AQXYZ\\=offset=5\n    AB\\x{df00}\\x{df00}AXYZXC\\=offset=5\n\\= Expect no match\n    AB\\x{df00}XYZ\n    AB\\x{df00}XYZ\\=offset=3 \n    AB\\x{df00}AXYZ\n    AB\\x{df00}AXYZ\\=offset=4\n    AB\\x{df00}\\x{df00}AXYZ\\=offset=5\n\n/.../match_invalid_utf\n\\= Expect no match\n    A\\x{d800}B\n    A\\x{110000}B \n    \n/aa/utf,ucp,match_invalid_utf,global\n    aa\\x{d800}aa\n\n/aa/utf,ucp,match_invalid_utf,global\n    \\x{d800}aa\n    \n/A\\z/utf,match_invalid_utf\n    A\\x{df00}\\n\n\n/ab$/match_invalid_utf\n\\= Expect no match            \n    ab\\x{df00}cde         \n\n/ab\\z/match_invalid_utf\n\\= Expect no match            \n    ab\\x{df00}cde         \n\n/ab\\Z/match_invalid_utf\n\\= Expect no match            \n    ab\\x{df00}cde         \n\n/(..)(*scs:(1)ab\\z)/match_invalid_utf\n    ab\\x{df00}cde         \n\n/(..)(*scs:(1)ab\\Z)/match_invalid_utf\n    ab\\x{df00}cde         \n\n/(..)(*scs:(1)ab$)/match_invalid_utf\n    ab\\x{df00}cde         \n\n# ---------------------------------------------------- \n\n/(*UTF)(?=\\x{123})/I\n\n/[\\x{c1}\\x{e1}]X[\\x{145}\\x{146}]/I,utf\n\n/[\\xff\\x{ffff}]/I,utf\n\n/[\\xff\\x{ff}]/I,utf\n\n/[\\xff\\x{ff}]/I\n\n/[Ss]/I\n\n/[Ss]/I,utf\n\n/(?:\\x{ff}|\\x{3000})/I,utf\n\n# ---------------------------------------------------- \n# UCP and casing tests\n\n/\\x{120}/iI\n\n/\\x{c1}/iI,ucp\n\n/[\\x{120}\\x{121}]/iB,ucp\n\n/[ab\\x{120}]+/iB,ucp\n    aABb\\x{121}\\x{120}\n\n/\\x{c1}/i,no_start_optimize\n\\= Expect no match\n    \\x{e1}\n\n/\\x{120}\\x{c1}/i,ucp,no_start_optimize\n    \\x{121}\\x{e1}\n\n/\\x{120}\\x{c1}/i,ucp\n    \\x{121}\\x{e1}\n\n/[^\\x{120}]/i,no_start_optimize\n    \\x{121}\n\n/[^\\x{120}]/i,ucp,no_start_optimize\n\\= Expect no match\n    \\x{121}\n\n/[^\\x{120}]/i\n    \\x{121}\n\n/[^\\x{120}]/i,ucp\n\\= Expect no match\n    \\x{121}\n    \n/\\x{120}{2}/i,ucp\n    \\x{121}\\x{121}\n\n/[^\\x{120}]{2}/i,ucp\n\\= Expect no match\n    \\x{121}\\x{121}\n\n/\\x{c1}+\\x{e1}/iB,ucp\n    \\x{c1}\\x{c1}\\x{c1}\n\n/\\x{c1}+\\x{e1}/iIB,ucp\n    \\x{c1}\\x{c1}\\x{c1}\n    \\x{e1}\\x{e1}\\x{e1} \n\n/a|\\x{c1}/iI,ucp\n    \\x{e1}xxx\n\n/\\x{c1}|\\x{e1}/iI,ucp\n\n/X(\\x{e1})Y/ucp,replace=>\\U$1<,substitute_extended\n    X\\x{e1}Y\n\n/X(\\x{121})Y/ucp,replace=>\\U$1<,substitute_extended\n    X\\x{121}Y\n\n/s/i,ucp\n    \\x{17f} \n\n/s/i,utf\n    \\x{17f} \n\n/[^s]/i,ucp\n\\= Expect no match\n    \\x{17f} \n\n/[^s]/i,utf\n\\= Expect no match\n    \\x{17f} \n\n/(.) \\1/i,ucp\n    i I\n\n/(.) \\1/i,ucp,turkish_casing\n\\= Expect no match\n    i I\n\n/(.) \\1/i,ucp\n    i I\n    \\x{212a} k\n\\= Expect no match\n    i \\x{0130}\n    \\x{0131} I\n\n/(.) \\1/i,ucp,turkish_casing\n    \\x{212a} k\n    i \\x{0130}\n    \\x{0131} I\n\\= Expect no match\n    i I\n\n/(.) (?r:\\1)/i,ucp,turkish_casing\n    i I\n\\= Expect no match\n    i \\x{0130}\n    \\x{0131} I\n    \\x{212a} k\n\n/[a-z][^i]I/ucp,turkish_casing\n    bII\n    b\\x{0130}I\n    b\\x{0131}I\n\\= Expect no match\n    biI\n\n/[a-z][^i]I/i,ucp,turkish_casing\n    b\\x{0131}I\n    bII\n\\= Expect no match\n    biI\n    b\\x{0130}I\n\n/[a-z](?r:[^i])I/i,ucp,turkish_casing\n    b\\x{0131}I\n    b\\x{0130}I\n\\= Expect no match\n    bII\n    biI\n\n/b(?r:[\\x{00FF}-\\x{FFEE}])/i,ucp,turkish_casing\n    b\\x{0130}\n    b\\x{0131}\n    B\\x{212a}\n\\= Expect no match\n    bi\n    bI\n    bk\n\n/[\\x60-\\x7f]/i,ucp,turkish_casing\n    i\n\\= Expect no match\n    I\n\n/[\\x60-\\xc0]/i,ucp,turkish_casing\n    i\n\\= Expect no match\n    I\n\n/[\\x80-\\xc0]/i,ucp,turkish_casing\n\\= Expect no match\n    i\n    I\n\n# ---------------------------------------------------- \n\n/b[\\x{00FF}-\\x{FFEE}]/ir\n    b\\x{0130}\n    b\\x{0131}\n    B\\x{212a}\n\\= Expect no match\n    bi\n    bI\n    bk\n\n# Quantifier after a literal that has the value of META_ACCEPT (not UTF). This\n# fails in 16-bit mode, but is OK for 32-bit.\n\n/\\x{802a0000}*/\n    \\x{802a0000}\\x{802a0000}\n\n# UTF matching without UTF, check invalid UTF characters\n/\\X++/\n    a\\x{110000}\\x{ffffffff}\n\n# This used to loop in 32-bit mode; it will fail in 16-bit mode.\n/[\\x{ffffffff}]/caseless,ucp\n    \\x{ffffffff}xyz\n    \n# These are 32-bit tests for handing 0xffffffff when in UCP caselsss mode. They\n# will give errors in 16-bit mode.\n\n/k*\\x{ffffffff}/caseless,ucp\n    \\x{ffffffff}\n\n/k+\\x{ffffffff}/caseless,ucp,no_start_optimize\n    K\\x{ffffffff}\n\\= Expect no match     \n    \\x{ffffffff}\\x{ffffffff}\n\n/k{2}\\x{ffffffff}/caseless,ucp,no_start_optimize\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\n\n/k\\x{ffffffff}/caseless,ucp,no_start_optimize\n    K\\x{ffffffff}\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\n\n/k{2,}?Z/caseless,ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    Kk\\x{ffffffff}\\x{ffffffff}\\x{ffffffff}Z\n\n/[sk](?r:[sk])[sk]/Bi,ucp\n    SKS\n    sks\n    \\x{212a}S\\x{17f}\n    \\x{17f}K\\x{212a}\n\\= Expect no match\n    s\\x{212a}s\n    K\\x{17f}K\n\n# --------------------------------------------------------- \n\n# End of testinput12\n"
  },
  {
    "path": "testdata/testinput13",
    "content": "# These DFA tests are for the handling of characters greater than 255 in\n# 16-bit or 32-bit, non-UTF mode. \n\n#forbid_utf\n#subject dfa\n\n/^\\x{ffff}+/i\n    \\x{ffff}\n\n/^\\x{ffff}?/i\n    \\x{ffff}\n\n/^\\x{ffff}*/i\n    \\x{ffff}\n\n/^\\x{ffff}{3}/i\n    \\x{ffff}\\x{ffff}\\x{ffff}\n\n/^\\x{ffff}{0,3}/i\n    \\x{ffff}\n\n# End of testinput13\n"
  },
  {
    "path": "testdata/testinput14",
    "content": "# These test special UTF and UCP features of DFA matching. The output is\n# different for the different widths.\n\n#subject dfa\n\n# ---------------------------------------------------- \n# These are a selection of the more comprehensive tests that are run for\n# non-DFA matching.\n\n/X/utf\n    XX\\x{d800}\n    XX\\x{d800}\\=offset=3\n    XX\\x{d800}\\=no_utf_check\n    XX\\x{da00}\n    XX\\x{da00}\\=no_utf_check\n    XX\\x{dc00}\n    XX\\x{dc00}\\=no_utf_check\n    XX\\x{de00}\n    XX\\x{de00}\\=no_utf_check\n    XX\\x{dfff}\n    XX\\x{dfff}\\=no_utf_check\n    XX\\x{110000}\n    XX\\x{d800}\\x{1234}\n          \n/badutf/utf\n    X\\xdf\n    XX\\xef\n    XXX\\xef\\x80\n    X\\xf7\n    XX\\xf7\\x80\n    XXX\\xf7\\x80\\x80\n\n/shortutf/utf\n    XX\\xdf\\=ph\n    XX\\xef\\=ph\n    XX\\xef\\x80\\=ph\n    \\xf7\\=ph\n    \\xf7\\x80\\=ph\n    \n# ---------------------------------------------------- \n# UCP and casing tests - except for the first two, these will all fail in 8-bit\n# mode because they are testing UCP without UTF and use characters > 255.\n\n/\\x{c1}/i,no_start_optimize\n\\= Expect no match\n    \\x{e1}\n\n/\\x{c1}+\\x{e1}/iB,ucp\n    \\x{c1}\\x{c1}\\x{c1}\n    \\x{e1}\\x{e1}\\x{e1} \n\n/\\x{120}\\x{c1}/i,ucp,no_start_optimize\n    \\x{121}\\x{e1}\n\n/\\x{120}\\x{c1}/i,ucp\n    \\x{121}\\x{e1}\n\n/[^\\x{120}]/i,no_start_optimize\n    \\x{121}\n\n/[^\\x{120}]/i,ucp,no_start_optimize\n\\= Expect no match\n    \\x{121}\n\n/[^\\x{120}]/i\n    \\x{121}\n\n/[^\\x{120}]/i,ucp\n\\= Expect no match\n    \\x{121}\n    \n/\\x{120}{2}/i,ucp\n    \\x{121}\\x{121}\n\n/[^\\x{120}]{2}/i,ucp\n\\= Expect no match\n    \\x{121}\\x{121}\n\n# ---------------------------------------------------- \n\n# ---------------------------------------------------- \n# Tests for handling 0xffffffff in caseless UCP mode. They only apply to 32-bit\n# mode; for the other widths they will fail.\n\n/k*\\x{ffffffff}/caseless,ucp\n    \\x{ffffffff}\n\n/k+\\x{ffffffff}/caseless,ucp,no_start_optimize\n    K\\x{ffffffff}\n\\= Expect no match     \n    \\x{ffffffff}\\x{ffffffff}\n\n/k{2}\\x{ffffffff}/caseless,ucp,no_start_optimize\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\n\n/k\\x{ffffffff}/caseless,ucp,no_start_optimize\n    K\\x{ffffffff}\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\n\n/k{2,}?Z/caseless,ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    Kk\\x{ffffffff}\\x{ffffffff}\\x{ffffffff}Z\n\n# ---------------------------------------------------- \n\n# End of testinput14\n"
  },
  {
    "path": "testdata/testinput15",
    "content": "# These are:\n#\n# (1) Tests of the match-limiting features. The results are different for\n# interpretive or JIT matching, so this test should not be run with JIT. The\n# same tests are run using JIT in test 17.\n\n# (2) Other tests that must not be run with JIT.\n\n# These tests are first so that they don't inherit a large enough heap frame \n# vector from a previous test.\n\n/(*LIMIT_HEAP=21)\\[(a)]{60}/expand\n    \\[a]{60}\n\n\"(*LIMIT_HEAP=21)()((?))()()()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()\"\n  xx\n\n# -----------------------------------------------------------------------\n\n/(a+)*zz/I\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\\=find_limits_noheap\n  aaaaaaaaaaaaaz\\=find_limits_noheap\n\n!((?:\\s|//.*\\\\n|/[*](?:\\\\n|.)*?[*]/)*)!I\n   /* this is a C style comment */\\=find_limits_noheap\n\n/^(?>a)++/\n    aa\\=find_limits_noheap\n    aaaaaaaaa\\=find_limits_noheap\n\n/(a)(?1)++/\n    aa\\=find_limits_noheap\n    aaaaaaaaa\\=find_limits_noheap\n\n/a(?:.)*?a/ims\n    abbbbbbbbbbbbbbbbbbbbba\\=find_limits_noheap\n\n/a(?:.(*THEN))*?a/ims\n    abbbbbbbbbbbbbbbbbbbbba\\=find_limits_noheap\n\n/a(?:.(*THEN:ABC))*?a/ims\n    abbbbbbbbbbbbbbbbbbbbba\\=find_limits_noheap\n\n/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/\n     aabbccddee\\=find_limits_noheap\n\n/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/\n     aabbccddee\\=find_limits_noheap\n\n/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/\n     aabbccddee\\=find_limits_noheap\n\n/(*LIMIT_MATCH=12bc)abc/\n\n/(*LIMIT_MATCH=4294967290)abc/\n\n/(*LIMIT_DEPTH=4294967280)abc/I\n\n/(a+)*zz/\n\\= Expect no match\n    aaaaaaaaaaaaaz\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=match_limit=3000\n\n/(a+)*zz/\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=depth_limit=10\n\n/(*LIMIT_MATCH=3000)(a+)*zz/I\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=match_limit=60000\n\n/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\n\n/(*LIMIT_MATCH=60000)(a+)*zz/I\n\\= Expect no match\n    aaaaaaaaaaaaaz\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=match_limit=3000\n\n/(*LIMIT_DEPTH=10)(a+)*zz/I\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=depth_limit=1000\n\n/(*LIMIT_DEPTH=10)(*LIMIT_DEPTH=1000)(a+)*zz/I\n\\= Expect no match\n    aaaaaaaaaaaaaz\n\n/(*LIMIT_DEPTH=1000)(a+)*zz/I\n\\= Expect no match\n    aaaaaaaaaaaaaz\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=depth_limit=10\n\n# These three have infinitely nested recursions.\n\n/((?2))((?1))/\n    abc\n\n/((?(R2)a+|(?1)b))()/\n    aaaabcde\n\n/(?(R)a*(?1)|((?R))b)/\n    aaaabcde\n\n# The allusedtext modifier does not work with JIT, which does not maintain\n# the leftchar/rightchar data.\n\n/abc(?=xyz)/allusedtext\n    abcxyzpqr\n    abcxyzpqr\\=aftertext\n\n/(?<=pqr)abc(?=xyz)/allusedtext\n    xyzpqrabcxyzpqr\n    xyzpqrabcxyzpqr\\=aftertext\n\n/a\\b/\n    a.\\=allusedtext\n    a\\=allusedtext\n\n/abc\\Kxyz/\n    abcxyz\\=allusedtext\n\n/abc(?=xyz(*ACCEPT))/\n    abcxyz\\=allusedtext\n\n/abc(?=abcde)(?=ab)/allusedtext\n    abcabcdefg\n\n#subject allusedtext\n\n/(?<=abc)123/\n    xyzabc123pqr\n    xyzabc12\\=ps\n    xyzabc12\\=ph\n\n/\\babc\\b/\n    +++abc+++\n    +++ab\\=ps\n    +++ab\\=ph\n\n/(?<=abc)def/\n    abc\\=ph\n\n/(?<=123)(*MARK:xx)abc/mark\n    xxxx123a\\=ph\n    xxxx123a\\=ps\n\n/(?<=(?<=a)b)c.*/I\n    abc\\=ph\n\\= Expect no match\n    xbc\\=ph\n\n/(?<=ab)c.*/I\n    abc\\=ph\n\\= Expect no match\n    xbc\\=ph\n\n/abc(?<=bc)def/\n    xxxabcd\\=ph\n\n/(?<=ab)cdef/\n    xxabcd\\=ph\n\n/(?<=(?<=(?<=a)b)c)./I\n    123abcXYZ\n\n/(?<=ab(cd(?<=...)))./I\n    abcdX\n\n/(?<=ab((?<=...)cd))./I\n    ZabcdX\n\n/(?<=((?<=(?<=ab).))(?1)(?1))./I\n    abxZ\n\n#subject\n# -------------------------------------------------------------------\n\n# These tests provoke recursion loops, which give a different error message\n# when JIT is used.\n\n/(?R)/I\n    abcd\n\n/(a|(?R))/I\n    abcd\n    defg\n\n/(ab|(bc|(de|(?R))))/I\n    abcd\n    fghi\n\n/(ab|(bc|(de|(?1))))/I\n    abcd\n    fghi\n\n/x(ab|(bc|(de|(?1)x)x)x)/I\n    xab123\n    xfghi\n\n/(?!\\w)(?R)/\n    abcd\n    =abc\n\n/(?=\\w)(?R)/\n    =abc\n    abcd\n\n/(?<!\\w)(?R)/\n    abcd\n\n/(?<=\\w)(?R)/\n    abcd\n\n/(a+|(?R)b)/\n    aaa\n    bbb\n\n#if !ebcdic\n\n/[^\\xff]((?1))/BI\n    abcd\n\n#endif\n\n# These tests don't behave the same with JIT\n\n/\\w+(?C1)/BI,no_auto_possess\n    abc\\=callout_fail=1\n\n/(*NO_AUTO_POSSESS)\\w+(?C1)/BI\n    abc\\=callout_fail=1\n\n# This test breaks the JIT stack limit\n\n/(|]+){2,2452}/\n    (|]+){2,2452}\n\n/b(?<!ax)(?!cx)/allusedtext\n    abc\n    abcz\n\n# This test triggers the recursion limit in the interpreter, but completes in\n# JIT. It's in testinput2 with disable_recurse_loop_check to get it to work\n# in the interpreter.\n\n/(a(?1)z||(?1)++)$/\n    abcd\n\n# End of testinput15\n"
  },
  {
    "path": "testdata/testinput16",
    "content": "# This test is run only when JIT support is not available. It checks that an\n# attempt to use it has the expected behaviour. It also tests things that\n# are different without JIT.\n\n/abc/I,jit,jitverify\n\n/a*/I\n\n# End of testinput16\n"
  },
  {
    "path": "testdata/testinput17",
    "content": "# This test is run only when JIT support is available. It checks JIT complete\n# and partial modes, and things that are different with JIT.\n\n#pattern jitverify\n\n# JIT does not support this pattern (callout at start of condition).\n\n/(?(?C1)(?=a)a)/I\n\n# The following pattern cannot be compiled by JIT.\n\n/b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*/I\n\n# Check that an infinite recursion loop is caught.\n\n/(?(R)a*(?1)|((?R))b)/\n    aaaabcde\n\n/abcd/I\n    abcd\n\\= Expect no match\n    xyz\n\n/(*NO_JIT)abcd/I\n    abcd\n\\= Expect no match\n    xyz\n\n/abcd/\n    abcd\n    ab\\=ps\n    ab\\=ph\n\\= Expect no match\n    xyz\n\n/abcd/jitfast\n    abcd\n    ab\\=ps\n    ab\\=ph\n\\= Expect no match\n    xyz\n\n/abcd/jit=1\n    abcd\n    ab\\=ps\n    ab\\=ph\n\\= Expect no match\n    xyz\n    xyz\\=ps\n\n/abcd/jit=1,jitfast\n    abcd\n    ab\\=ps\n    ab\\=ph\n    xyz\\=ps\n\\= Expect no match\n    xyz\n\n/abcd/jit=2\n    abcd\n    ab\\=ps\n    ab\\=ph\n\\= Expect no match\n    xyz\n\n/abcd/jit=2,jitfast\n    abcd\n    ab\\=ps\n    ab\\=ph\n    xyz\n\n/abcd/jit=3\n    abcd\n    ab\\=ps\n    ab\\=ph\n\\= Expect no match\n    xyz\n\n/abcd/jit=4\n    abcd\n    ab\\=ps\n    ab\\=ph\n\\= Expect no match\n    xyz\n\n/abcd/jit=5\n    abcd\n    ab\\=ps\n    ab\\=ph\n\\= Expect no match\n    xyz\n\n/abcd/jit=6\n    abcd\n    ab\\=ps\n    ab\\=ph\n\\= Expect no match\n    xyz\n\n/abcd/jit=7\n    abcd\n    ab\\=ps\n    ab\\=ph\n\\= Expect no match\n    xyz\n\n/abcd/I,jit=2\n\n/(*NO_START_OPT)a(*:m)b/mark\n\\= Expect no match\n    a\n\n/^12345678abcd/m\n    12345678abcd\n    \n# Limits tests that give different output with JIT. \n\n/(a+)*zz/I\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\\=find_limits\n\\= Expect no match\n  aaaaaaaaaaaaaz\\=find_limits\n\n!((?:\\s|//.*\\\\n|/[*](?:\\\\n|.)*?[*]/)*)!I\n   /* this is a C style comment */\\=find_limits\n\n/^(?>a)++/\n    aa\\=find_limits\n    aaaaaaaaa\\=find_limits\n    \n/(a)(?1)++/\n    aa\\=find_limits\n    aaaaaaaaa\\=find_limits\n\n/a(?:.)*?a/ims\n    abbbbbbbbbbbbbbbbbbbbba\\=find_limits\n    \n/a(?:.(*THEN))*?a/ims\n    abbbbbbbbbbbbbbbbbbbbba\\=find_limits\n\n/a(?:.(*THEN:ABC))*?a/ims\n    abbbbbbbbbbbbbbbbbbbbba\\=find_limits\n\n/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/\n     aabbccddee\\=find_limits\n\n/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/\n     aabbccddee\\=find_limits\n\n/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/\n     aabbccddee\\=find_limits\n\n/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/jitfast\n     aabbccddee\\=find_limits\n     aabbccddee\\=jitstack=1\n\n/(a+)*zz/\n\\= Expect no match\n    aaaaaaaaaaaaaz\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=match_limit=3000\n\n/(*LIMIT_MATCH=3000)(a+)*zz/I\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=match_limit=60000\n\n/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\n\n/(*LIMIT_MATCH=60000)(a+)*zz/I\n\\= Expect no match\n    aaaaaaaaaaaaaz\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=match_limit=3000\n\n# These three have infinitely nested recursions. \n    \n/((?2))((?1))/\n\\= Expect JIT stack limit reached\n    abc\n\n/((?(R2)a+|(?1)b))()/\n\\= Expect JIT stack limit reached\n    aaaabcde\n\n/(?(R)a*(?1)|((?R))b)/\n\\= Expect JIT stack limit reached\n    aaaabcde\n    \n# Invalid options disable JIT when called via pcre2_match(), causing the\n# match to happen via the interpreter, but for fast JIT invalid options are\n# ignored, so an unanchored match happens.\n\n/abcd/\n    abcd\\=anchored\n\\= Expect no match\n    fail abcd\\=anchored \n    \n/abcd/jitfast\n    abcd\\=anchored \n    succeed abcd\\=anchored \n    \n# Push/pop does not lose the JIT information, though jitverify applies only to\n# compilation, but serializing (save/load) discards JIT data completely.\n\n/^abc\\Kdef/info,push\n#pop jitverify\n    abcdef\n\n/^abc\\Kdef/info,push\n#save testsaved1\n#load testsaved1\n#pop jitverify\n    abcdef\n    \n#load testsaved1\n#pop jit,jitverify\n    abcdef\n    \n/abcd/pushcopy,jitverify\n    abcd\n    \n#pop jitverify\n    abcd\n    \n# Test pattern compilation\n\n/(?:a|b|c|d|e)(?R)/jit=1\n\n/(?:a|b|c|d|e)(?R)(?R)/jit=1\n\n/(a(?:a|b|c|d|e)b){8,16}/jit=1\n\n/(?:|a|){100}x/jit=1\n\n# These tests provoke recursion loops, which give a different error message\n# when JIT is used.\n\n/(?R)/I\n    abcd\n\n/(a|(?R))/I\n    abcd\n    defg \n\n/(ab|(bc|(de|(?R))))/I\n    abcd\n    fghi \n\n/(ab|(bc|(de|(?1))))/I\n    abcd\n    fghi \n\n/x(ab|(bc|(de|(?1)x)x)x)/I\n    xab123\n    xfghi \n\n/(?!\\w)(?R)/\n    abcd\n    =abc \n\n/(?=\\w)(?R)/\n    =abc \n    abcd\n\n/(?<!\\w)(?R)/\n    abcd\n\n/(?<=\\w)(?R)/\n    abcd\n\n/(a+|(?R)b)/\n    aaa\n    bbb \n\n#if !ebcdic\n\n/[^\\xff]((?1))/BI\n    abcd\n\n#endif\n\n/(x(?1)){4}/\n\n/[axm]{7}/\n\n/(.|.)*?bx/\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabax\\=match_limit=10000000\n    \n# Test JIT disable \n\n/abc/\n    abc\n    abc\\=no_jit \n    \n/abc/jitfast\n    abc\n    abc\\=no_jit \n    \n# ---- \n\n/[aC]/mg,firstline,newline=lf\n    match\\nmatch\n\n/[aCz]/mg,firstline,newline=lf\n    match\\nmatch\n\n//jit\n    \\=null_subject\n    \n/(.)(.)/jitfast,replace=$2+$1\n    ABCD\n\n/(...)-(...)/jitfast\n    abc-xyz\\=get=2\n\n# Check the JIT sets all the correct match state for pcre2_substitute\n\n/abc/jitfast,replace=yy\n    zabcz\n    zabcz\\=substitute_matched\n\n/abc/jitfast,replace=yy\n    zABCz\n    zABCz\\=substitute_matched\n\n/abc/jitfast\n    ab\\=replace=yy,partial_hard\n    ab\\=replace=yy,partial_hard,substitute_matched\n\n/(?C1)abc/jitfast,replace=yy\n    zabcz\\=callout_error=1\n    zabcz\\=callout_error=1,substitute_matched\n\n# End of testinput17\n"
  },
  {
    "path": "testdata/testinput18",
    "content": "# This set of tests is run only with the 8-bit library. It tests the POSIX\n# interface, which is supported only with the 8-bit library. This test should\n# not be run with JIT (which is not available for the POSIX interface).\n    \n#forbid_utf\n#pattern posix\n\n# Test some invalid options\n\n/abc/auto_callout\n\n/abc/\n   abc\\=find_limits\n\n/abc/\n  abc\\=partial_hard\n  \n/a(())bc/parens_nest_limit=1\n\n/abc/allow_surrogate_escapes,max_pattern_length=2\n\n# Real tests\n\n/abc/\n    abc\n\n/^abc|def/\n    abcdef\n    abcdef\\=notbol\n\n/.*((abc)$|(def))/\n    defabc\n    defabc\\=noteol\n\n/the quick brown fox/\n    the quick brown fox\n\\= Expect no match\n    The Quick Brown Fox\n\n/the quick brown fox/i\n    the quick brown fox\n    The Quick Brown Fox\n\n/(*LF)abc.def/\n\\= Expect no match\n    abc\\ndef\n\n/(*LF)abc$/\n    abc\n    abc\\n\n\n/(abc)\\2/\n\n/(abc\\1)/\n\\= Expect no match\n    abc\n\n/a*(b+)(z)(z)/\n    aaaabbbbzzzz\n    aaaabbbbzzzz\\=ovector=0\n    aaaabbbbzzzz\\=ovector=1\n    aaaabbbbzzzz\\=ovector=2\n\n/(a)(b)/\n    ab\\=posix_startend=0:2,ovector=1\n    ab\\=posix_startend=0:2,ovector=0\n    ab\\=posix_startend=1:2,ovector=1\n    ab\\=posix_startend=1:2,ovector=0\n\n/(*ANY)ab.cd/\n    ab-cd\n    ab=cd\n\\= Expect no match\n    ab\\ncd\n\n/ab.cd/s\n    ab-cd\n    ab=cd\n    ab\\ncd\n\n/a(b)c/posix_nosub\n    abc\n\n/a(?P<name>b)c/posix_nosub\n    abc\n\n/(a)\\1/posix_nosub\n    zaay\n\n/a?|b?/\n    abc\n\\= Expect no match\n    ddd\\=notempty\n\n/\\w+A/\n   CDAAAAB\n\n/\\w+A/ungreedy\n   CDAAAAB\n   \n/\\Biss\\B/I,aftertext\n    Mississippi\n\n/abc/\\\n\n\"(?(?C)\"\n\n\"(?(?C))\"\n\n/abcd/substitute_extended\n\n/\\[A]{1000000}**/expand,regerror_buffsize=31\n\n/\\[A]{1000000}**/expand,regerror_buffsize=32\n\n/a(b/regerror_buffsize=0\n\n/a(b/regerror_buffsize=1\n\n/a(b/regerror_buffsize=12\n\n/a(b/regerror_buffsize=13\n\n/a(b/regerror_buffsize=14\n\n/a(b/regerror_buffsize=15\n\n/a(b/regerror_buffsize=25\n\n/a(b/regerror_buffsize=26\n\n//posix_nosub\n    \\=offset=70000\n\n/^d(e)$/posix\n    acdef\\=posix_startend=2:4\n    acde\\=posix_startend=2 \n\\= Expect no match     \n    acdef\n    acdef\\=posix_startend=2 \n\n/^a\\x{00}b$/posix\n    a\\x{00}b\\=posix_startend=0:3\n\n/\"A\" 00 \"B\"/hex\n    A\\x{00}B\\=posix_startend=0:3\n    \n/ABC/use_length \n    ABC\n\n/a\\b(c/literal,posix\n    a\\\\b(c\n\n/a\\b(c/literal,posix,dotall\n\n/((a)(b)?(c))/posix\n    123ace\n    123ace\\=posix_startend=2:6\n\n//posix\n\\= Expect errors\n    \\=null_subject\n    abc\\=null_subject\n    \n/(*LIMIT_HEAP=0)xx/posix\n\\= Expect error\n    xxxx \n\n# End of testdata/testinput18\n"
  },
  {
    "path": "testdata/testinput19",
    "content": "# This set of tests is run only with the 8-bit library. It tests the POSIX\n# interface with UTF/UCP support, which is supported only with the 8-bit\n# library. This test should not be run with JIT (which is not available for the\n# POSIX interface).\n\n#pattern posix\n\n/a\\x{1234}b/utf\n    a\\x{1234}b\n\n/\\w/\n\\= Expect no match\n    +++\\x{c2}\n\n/\\w/ucp\n    +++\\x{c2}\n\n/\"^AB\" 00 \"\\x{1234}$\"/hex,utf\n    AB\\x{00}\\x{1234}\\=posix_startend=0:6\n\n/\\w/utf\n\\= Expect UTF error\n    A\\xabB\n\n/ AB /hex,utf\n\n# End of testdata/testinput19\n"
  },
  {
    "path": "testdata/testinput2",
    "content": "# This set of tests is not Perl-compatible. It checks on special features\n# of PCRE2's API, error diagnostics, and the compiled code of some patterns.\n# It also checks the non-Perl syntax that PCRE2 supports (Python, .NET,\n# Oniguruma). There are also some tests where PCRE2 and Perl differ,\n# either because PCRE2 can't be compatible, or there is a possible Perl\n# bug.\n\n# NOTE: This is a non-UTF set of tests. When UTF support is needed, use\n# test 5.\n\n#forbid_utf\n#newline_default lf any anycrlf\n\n# Test binary zeroes in the pattern\n\n# /a\\0B/ where 0 is a binary zero\n/61 5c 00 62/B,hex\n    a\\x{0}b\n\n# /a0b/ where 0 is a binary zero\n/61 00 62/B,hex\n    a\\x{0}b\n\n# /(?#B0C)DE/ where 0 is a binary zero\n/28 3f 23 42 00 43 29 44 45/B,hex\n    DE\n\n/(a)b|/I\n\n/abc/I\n    abc\n    defabc\n    abc\\=anchored\n\\= Expect no match\n    defabc\\=anchored\n    ABC\n\n/^abc/I\n    abc\n    abc\\=anchored\n\\= Expect no match\n    defabc\n    defabc\\=anchored\n\n/a+bc/I\n\n/a*bc/I\n\n/a{3}bc/I\n\n/(abc|a+z)/I\n\n/^abc$/I\n    abc\n\\= Expect no match\n    def\\nabc\n\n/ab\\idef/\n\n/(?X)ab\\idef/\n\n/x{5,4}/\n\n/z{65536}/\n\n/[abcd/\n\n/[\\B]/B\n\n/[\\R]/B\n\n/[\\X]/B\n\n/[z-a]/\n\n/^*/\n\n/(abc/\n\n/(?# abc/\n\n/(?z)abc/\n\n/.*b/I\n\n/.*?b/I\n\n/cat|dog|elephant/I\n    this sentence eventually mentions a cat\n    this sentences rambles on and on for a while and then reaches elephant\n\n/cat|dog|elephant/I\n    this sentence eventually mentions a cat\n    this sentences rambles on and on for a while and then reaches elephant\n\n/cat|dog|elephant/Ii\n    this sentence eventually mentions a CAT cat\n    this sentences rambles on and on for a while to elephant ElePhant\n\n/a|[bcd]/I\n\n/(a|[^\\dZ])/I\n\n/(a|b)*[\\s]/I\n\n/(ab\\2)/\n\n/{4,5}abc/\n\n/(a)(b)(c)\\2/I\n    abcb\n    abcb\\=ovector=0\n    abcb\\=ovector=1\n    abcb\\=ovector=2\n    abcb\\=ovector=3\n    abcb\\=ovector=4\n\n/(a)bc|(a)(b)\\2/I\n    abc\n    abc\\=ovector=0\n    abc\\=ovector=1\n    abc\\=ovector=2\n    aba\n    aba\\=ovector=0\n    aba\\=ovector=1\n    aba\\=ovector=2\n    aba\\=ovector=3\n    aba\\=ovector=4\n\n/abc$/I,dollar_endonly\n    abc\n\\= Expect no match\n    abc\\n\n    abc\\ndef\n\n/(a)(b)(c)(d)(e)\\6/\n\n/the quick brown fox/I\n    the quick brown fox\n    this is a line with the quick brown fox\n\n/the quick brown fox/I,anchored\n    the quick brown fox\n\\= Expect no match\n    this is a line with the quick brown fox\n\n/ab(?z)cd/\n\n/^abc|def/I\n    abcdef\n    abcdef\\=notbol\n\n/.*((abc)$|(def))/I\n    defabc\n    defabc\\=noteol\n\n/)/\n\n/a[]b/\n\n/[^aeiou ]{3,}/I\n    co-processors, and for\n\n/<.*>/I\n    abc<def>ghi<klm>nop\n\n/<.*?>/I\n    abc<def>ghi<klm>nop\n\n/<.*>/I,ungreedy\n    abc<def>ghi<klm>nop\n\n/(?U)<.*>/I\n    abc<def>ghi<klm>nop\n\n/<.*?>/I,ungreedy\n    abc<def>ghi<klm>nop\n\n/={3,}/I,ungreedy\n    abc========def\n\n/(?U)={3,}?/I\n    abc========def\n\n/(?<!bar|cattle)foo/I\n    foo\n    catfoo\n\\= Expect no match\n    the barfoo\n    and cattlefoo\n\n/abc(?<=a+)b/\n\n/(?<!(foo)a\\1)bar/\n\n/(?i)abc/I\n\n/(a|(?m)a)/I\n\n/(?i)^1234/I\n\n/(^b|(?i)^d)/I\n\n/(?s).*/I\n\n/[abcd]/I\n\n/(?i)[abcd]/I\n\n/(?m)[xy]|(b|c)/I\n\n/(^a|^b)/Im\n\n/(?i)(^a|^b)/Im\n\n/(a)(?(1)a|b|c)/\n\n/(?(?=a)a|b|c)/\n\n/(?(1a)/\n\n/(?(1a))/\n\n/(?(?i))/\n\n/(?(abc))/\n\n/(?(?<ab))/\n\n/((?s)blah)\\s+\\1/I\n\n/((?i)blah)\\s+\\1/I\n\n/((?i)b)/IB\n\n/(a*b|(?i:c*(?-i)d))/I\n\n/a$/I\n    a\n    a\\n\n\\= Expect no match\n    a\\=noteol\n    a\\n\\=noteol\n\n/a$/Im\n    a\n    a\\n\n    a\\n\\=noteol\n\\= Expect no match\n    a\\=noteol\n\n/\\Aabc/Im\n\n/^abc/Im\n\n/^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))/I\n  aaaaabbbbbcccccdef\n\n/(?<=foo)[ab]/I\n\n/(?<!foo)(alpha|omega)/I\n\n/(?!alphabet)[ab]/I\n\n/(?<=foo\\n)^bar/Im\n    foo\\nbarbar\n\\= Expect no match\n    rhubarb\n    barbell\n    abc\\nbarton\n\n/^(?<=foo\\n)bar/Im\n    foo\\nbarbar\n\\= Expect no match\n    rhubarb\n    barbell\n    abc\\nbarton\n\n/(?>^abc)/Im\n    abc\n    def\\nabc\n\\= Expect no match\n    defabc\n\n/(?<=ab(c+)d)ef/\n\n/(?<=ab(?<=c+)d)ef/\n\n/The next three are in testinput2 because they have variable length branches/\n\n/(?<=bullock|donkey)-cart/I\n    the bullock-cart\n    a donkey-cart race\n\\= Expect no match\n    cart\n    horse-and-cart\n\n/(?<=ab(?i)x|y|z)/I\n\n/(?>.*)(?<=(abcd)|(xyz))/I\n    alphabetabcd\n    endingxyz\n\n/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/I\n    abxyZZ\n    abXyZZ\n    ZZZ\n    zZZ\n    bZZ\n    BZZ\n\\= Expect no match\n    ZZ\n    abXYZZ\n    zzz\n    bzz\n\n/(?<!(foo)a)bar/I\n    bar\n    foobbar\n\\= Expect no match\n    fooabar\n\n# Perl does not fail these two for the final subjects.\n\n/^(xa|=?\\1a){2}$/\n    xa=xaa\n\\= Expect no match\n    xa=xaaa\n\n/^(xa|=?\\1a)+$/\n    xa=xaa\n\\= Expect no match\n    xa=xaaa\n\n# These are syntax tests from Perl 5.005\n\n/a[b-a]/\n\n/a[]b/\n\n/a[/\n\n/*a/\n\n/(*)b/\n\n/abc)/\n\n/(abc/\n\n/a**/\n\n/)(/\n\n/\\1/\n\n/\\2/\n\n/(a)|\\2/\n\n/a[b-a]/Ii\n\n/a[]b/Ii\n\n/a[/Ii\n\n/*a/Ii\n\n/(*)b/Ii\n\n/abc)/Ii\n\n/(abc/Ii\n\n/a**/Ii\n\n/)(/Ii\n\n/:(?:/\n\n/(?<%)b/\n\n/a(?{)b/\n\n/a(?{{})b/\n\n/a(?{}})b/\n\n/a(?{\"{\"})b/\n\n/a(?{\"{\"}})b/\n\n/(?(1?)a|b)/\n\n/[a[:xyz:/\n\n/(?<=x+)y/\n\n/a{37,17}/\n\n/abc/\\\n\n/abc/\\i\n\n/(a)bc(d)/I\n    abcd\n    abcd\\=copy=2\n    abcd\\=copy=5\n\n/(.{20})/I\n    abcdefghijklmnopqrstuvwxyz\n    abcdefghijklmnopqrstuvwxyz\\=copy=1\n    abcdefghijklmnopqrstuvwxyz\\=get=1\n\n/(.{15})/I\n    abcdefghijklmnopqrstuvwxyz\n    abcdefghijklmnopqrstuvwxyz\\=copy=1,get=1\n\n/(.{16})/I\n    abcdefghijklmnopqrstuvwxyz\n    abcdefghijklmnopqrstuvwxyz\\=copy=1,get=1,getall\n\n/^(a|(bc))de(f)/I\n    adef\\=get=1,get=2,get=3,get=4,getall\n    bcdef\\=get=1,get=2,get=3,get=4,getall\n    adefghijk\\=copy=0\n\n/^abc\\00def/I\n    abc\\00def\\=copy=0,getall\n\n/word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+\n)((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+\n)?)?)?)?)?)?)?)?)?otherword/I\n\n/.*X/IB\n\n/.*X/IBs\n\n/(.*X|^B)/IB\n\n/(.*X|^B)/IBs\n\n/(?s)(.*X|^B)/IB\n\n/(?s:.*X|^B)/IB\n\n/\\Biss\\B/I,aftertext\n    Mississippi\n\n/iss/I,aftertext,altglobal\n    Mississippi\n\n/\\Biss\\B/I,aftertext,altglobal\n    Mississippi\n\n/\\Biss\\B/Ig,aftertext\n    Mississippi\n\\= Expect no match\n    Mississippi\\=anchored\n\n/(?<=[Ms])iss/Ig,aftertext\n    Mississippi\n\n/(?<=[Ms])iss/I,aftertext,altglobal\n    Mississippi\n\n/^iss/Ig,aftertext\n    ississippi\n\n/.*iss/Ig,aftertext\n    abciss\\nxyzisspqr\n\n/.i./Ig,aftertext\n    Mississippi\n    Mississippi\\=anchored\n    Missouri river\n    Missouri river\\=anchored\n\n/^.is/Ig,aftertext\n    Mississippi\n\n/^ab\\n/Ig,aftertext\n    ab\\nab\\ncd\n\n/^ab\\n/Igm,aftertext\n    ab\\nab\\ncd\n\n/^/gm,newline=any\n    a\\rb\\nc\\r\\nxyz\\=aftertext\n\n/abc/I\n\n/abc|bac/I\n\n/(abc|bac)/I\n\n/(abc|(c|dc))/I\n\n/(abc|(d|de)c)/I\n\n/a*/I\n\n/a+/I\n\n/(baa|a+)/I\n\n/a{0,3}/I\n\n/baa{3,}/I\n\n/\"([^\\\\\"]+|\\\\.)*\"/I\n\n/(abc|ab[cd])/I\n\n/(a|.)/I\n\n/a|ba|\\w/I\n\n/abc(?=pqr)/I\n\n/...(?<=abc)/I\n\n/abc(?!pqr)/I\n\n/ab./I\n\n/ab[xyz]/I\n\n/abc*/I\n\n/ab.c*/I\n\n/a.c*/I\n\n/.c*/I\n\n/ac*/I\n\n/(a.c*|b.c*)/I\n\n/a.c*|aba/I\n\n/.+a/I\n\n/(?=abcda)a.*/I\n\n/(?=a)a.*/I\n\n/a(b)*/I\n\n/a\\d*/I\n\n/ab\\d*/I\n\n/a(\\d)*/I\n\n/abcde{0,0}/I\n\n/ab\\d+/I\n\n/a(?(1)b)(.)/I\n\n/a(?(1)bag|big)(.)/I\n\n/a(?(1)bag|big)*(.)/I\n\n/a(?(1)bag|big)+(.)/I\n\n/a(?(1)b..|b..)(.)/I\n\n/ab\\d{0}e/I\n\n/a?b?/I\n    a\n    b\n    ab\n    \\\n\\= Expect no match\n    \\=notempty\n\n/|-/I\n    abcd\n    -abc\n    ab-c\\=notempty\n\\= Expect no match\n    abc\\=notempty\n\n/^.?abcd/I\n\n/\\(             # ( at start\n  (?:           # Non-capturing bracket\n  (?>[^()]+)    # Either a sequence of non-brackets (no backtracking)\n  |             # Or\n  (?R)          # Recurse - i.e. nested bracketed string\n  )*            # Zero or more contents\n  \\)            # Closing )\n  /Ix\n    (abcd)\n    (abcd)xyz\n    xyz(abcd)\n    (ab(xy)cd)pqr\n    (ab(xycd)pqr\n    () abc ()\n    12(abcde(fsh)xyz(foo(bar))lmno)89\n\\= Expect no match\n    abcd\n    abcd)\n    (abcd\n\n/\\(  ( (?>[^()]+) | (?R) )* \\) /Igx\n    (ab(xy)cd)pqr\n    1(abcd)(x(y)z)pqr\n\n/\\(  (?: (?>[^()]+) | (?R) ) \\) /Ix\n    (abcd)\n    (ab(xy)cd)\n    (a(b(c)d)e)\n    ((ab))\n\\= Expect no match\n    ()\n\n/\\(  (?: (?>[^()]+) | (?R) )? \\) /Ix\n    ()\n    12(abcde(fsh)xyz(foo(bar))lmno)89\n\n/\\(  ( (?>[^()]+) | (?R) )* \\) /Ix\n    (ab(xy)cd)\n\n/\\( ( ( (?>[^()]+) | (?R) )* ) \\) /Ix\n    (ab(xy)cd)\n\n/\\( (123)? ( ( (?>[^()]+) | (?R) )* ) \\) /Ix\n    (ab(xy)cd)\n    (123ab(xy)cd)\n\n/\\( ( (123)? ( (?>[^()]+) | (?R) )* ) \\) /Ix\n    (ab(xy)cd)\n    (123ab(xy)cd)\n\n/\\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \\) /Ix\n    (ab(xy)cd)\n\n/\\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \\) /Ix\n    (abcd(xyz<p>qrs)123)\n\n/\\( ( ( (?>[^()]+) | ((?R)) )* ) \\) /Ix\n    (ab(cd)ef)\n    (ab(cd(ef)gh)ij)\n\n/^[[:alnum:]]/IB\n\n/^[[:^alnum:]]/IB\n\n/^[[:alpha:]]/IB\n\n/^[[:^alpha:]]/IB\n\n/[_[:alpha:]]/I\n\n/^[[:ascii:]]/IB\n\n/^[[:^ascii:]]/IB\n\n/^[[:blank:]]/IB\n\n/^[[:^blank:]]/IB\n\n/[\\n\\x0b\\x0c\\x0d[:blank:]]/I\n\n/^[[:cntrl:]]/IB\n\n/^[[:digit:]]/IB\n\n/^[[:graph:]]/IB\n\n/^[[:lower:]]/IB\n\n/^[[:print:]]/IB\n\n/^[[:punct:]]/IB\n\n/^[[:space:]]/IB\n\n/^[[:upper:]]/IB\n\n/^[[:xdigit:]]/IB\n\n/^[[:word:]]/IB\n\n/^[[:^cntrl:]]/IB\n\n/^[12[:^digit:]]/IB\n\n/^[[:^blank:]]/IB\n\n/[01[:alpha:]%]/IB\n\n/[[.ch.]]/I\n\n/[[=ch=]]/I\n\n/[[:rhubarb:]]/I\n\n/[[:upper:]]/Ii\n    A\n    a\n\n/[[:lower:]]/Ii\n    A\n    a\n\n/((?-i)[[:lower:]])[[:lower:]]/Ii\n    ab\n    aB\n\\= Expect no match\n    Ab\n    AB\n\n/[\\200-\\110]/I\n\n/^(?(0)f|b)oo/I\n\n# This one's here because of the large output vector needed\n\n/(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\w+)\\s+(\\270)/I\n     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC\\=ovector=300\n\n# This one's here because Perl does this differently and PCRE2 can't at present\n\n/(main(O)?)+/I\n    mainmain\n    mainOmain\n\n# These are all cases where Perl does it differently (nested captures)\n\n/^(a(b)?)+$/I\n    aba\n\n/^(aa(bb)?)+$/I\n    aabbaa\n\n/^(aa|aa(bb))+$/I\n    aabbaa\n\n/^(aa(bb)??)+$/I\n    aabbaa\n\n/^(?:aa(bb)?)+$/I\n    aabbaa\n\n/^(aa(b(b))?)+$/I\n    aabbaa\n\n/^(?:aa(b(b))?)+$/I\n    aabbaa\n\n/^(?:aa(b(?:b))?)+$/I\n    aabbaa\n\n/^(?:aa(bb(?:b))?)+$/I\n    aabbbaa\n\n/^(?:aa(b(?:bb))?)+$/I\n    aabbbaa\n\n/^(?:aa(?:b(b))?)+$/I\n    aabbaa\n\n/^(?:aa(?:b(bb))?)+$/I\n    aabbbaa\n\n/^(aa(b(bb))?)+$/I\n    aabbbaa\n\n/^(aa(bb(bb))?)+$/I\n    aabbbbaa\n\n# ----------------\n\n/#/IBx\n\n/a#/IBx\n\n/[\\s]/IB\n\n/[\\S]/IB\n\n/a(?i)b/IB\n    ab\n    aB\n\\= Expect no match\n    AB\n\n/(a(?i)b)/IB\n    ab\n    aB\n\\= Expect no match\n    AB\n\n/   (?i)abc/IBx\n\n/#this is a comment\n  (?i)abc/IBx\n\n/123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/IB\n\n/\\Q123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/IB\n\n/\\Q\\E/IB\n    \\\n\n/\\Q\\Ex/IB\n\n/ \\Q\\E/IB\n\n/a\\Q\\E/IB\n  abc\n  bca\n  bac\n\n/a\\Q\\Eb/IB\n  abc\n\n/\\Q\\Eabc/IB\n\n/x*+\\w/IB\n\\= Expect no match\n    xxxxx\n\n/x?+/IB\n\n/x++/IB\n\n# For comparison with the following test, which disables auto-possessification\n# In this regex, x+ should be converted to x++\n/x+y/B,auto_possess\n\n# In this regex, x+ should not be converted to x++\n/x+y/B,auto_possess_off\n\n# Also in this regex, x+ should not be converted to x++\n/x+y/B,optimization_none\n\n# In this one too, x+ should not be converted to x++\n/x+y/B,no_auto_possess\n\n/x{1,3}+/B,no_auto_possess\n\n/x{1,3}+/Bi,no_auto_possess\n\n/[^x]{1,3}+/B,no_auto_possess\n\n/[^x]{1,3}+/Bi,no_auto_possess\n\n/x{1,3}+/IB,auto_possess_off\n\n/(x)*+/IB\n\n/^(\\w++|\\s++)*$/I\n    now is the time for all good men to come to the aid of the party\n\\= Expect no match\n    this is not a line with only words and spaces!\n\n/(\\d++)(\\w)/I\n    12345a\n\\= Expect no match\n    12345+\n\n/a++b/I\n    aaab\n\n/(a++b)/I\n    aaab\n\n/(a++)b/I\n    aaab\n\n/([^()]++|\\([^()]*\\))+/I\n    ((abc(ade)ufh()()x\n\n/\\(([^()]++|\\([^()]+\\))+\\)/I\n    (abc)\n    (abc(def)xyz)\n\\= Expect no match\n    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/(abc){1,3}+/IB\n\n/a+?+/I\n\n/a{2,3}?+b/I\n\n/(?U)a+?+/I\n\n/a{2,3}?+b/I,ungreedy\n\n/x(?U)a++b/IB\n    xaaaab\n\n/(?U)xa++b/IB\n    xaaaab\n\n/^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))/IB\n\n/^x(?U)a+b/IB\n\n/^x(?U)(a+)b/IB\n\n/[.x.]/I\n\n/[=x=]/I\n\n/[:x:]/I\n\n/\\F/I\n\n/\\l/I\n\n/\\L/I\n\n/\\N{name}/I\n\n/\\u/I\n\n/\\U/I\n\n/\\N{4}/\n    abcdefg\n\n/\\N{,}/\n\n/\\N{25,ab}/\n\n/[\\N]/\n\n/[\\N{4}]/\n\n/[\\N{name}]/\n\n/a{1,3}b/ungreedy\n    ab\n\n/[/I\n\n/[a-/I\n\n/[[:space:]/I\n\n/[\\s]/IB\n\n/[[:space:]]/IB\n\n/[[:space:]abcde]/IB\n\n/< (?: (?(R) \\d++  | [^<>]*+) | (?R)) * >/Ix\n    <>\n    <abcd>\n    <abc <123> hij>\n    <abc <def> hij>\n    <abc<>def>\n    <abc<>\n\\= Expect no match\n    <abc\n\n/8J\\$WE\\<\\.rX\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b/IB\n\n/\\$\\<\\.X\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b/IB\n\n/(.*)\\d+\\1/I\n\n/(.*)\\d+/I\n\n/(.*)\\d+\\1/Is\n\n/(.*)\\d+/Is\n\n/(.*(xyz))\\d+\\2/I\n\n/((.*))\\d+\\1/I\n    abc123bc\n\n/a[b]/I\n\n/(?=a).*/I\n\n/(?=abc).xyz/Ii\n\n/(?=abc)(?i).xyz/I\n\n/(?=a)(?=b)/I\n\n/(?=.)a/I\n\n/((?=abcda)a)/I\n\n/((?=abcda)ab)/I\n\n/()a/I\n\n/(?:(?=.)|(?<!x))a/I\n\n/(?(1)ab|ac)(.)/I\n\n/(?(1)abz|acz)(.)/I\n\n/(?(1)abz)(.)/I\n\n/(?(1)abz)(1)23/I\n\n/(a)+/I\n\n/(a){2,3}/I\n\n/(a)*/I\n\n/[a]/I\n\n/[ab]/I\n\n/[ab]/I\n\n/[^a]/I\n\n/\\d456/I\n\n/\\d456/I\n\n/a^b/I\n\n/^a/Im\n  abcde\n  xy\\nabc\n\\= Expect no match\n  xyabc\n\n/c|abc/I\n\n/(?i)[ab]/I\n\n/[ab](?i)cd/I\n\n/abc(?C)def/I\n    abcdef\n    1234abcdef\n\\= Expect no match\n    abcxyz\n    abcxyzf\n\n/abc(?C)de(?C1)f/I\n    123abcdef\n\n/(?C1)\\dabc(?C2)def/I\n    1234abcdef\n\\= Expect no match\n    abcdef\n\n/(?C1)\\dabc(?C2)def/I\n    1234abcdef\n\\= Expect no match\n    abcdef\n\n/(?C255)ab/I\n\n/(?C256)ab/I\n\n/(?Cab)xx/I\n\n/(?C12vr)x/I\n\n/abc(?C)def/I\n    \\x83\\x0\\x61bcdef\n\n/(abc)(?C)de(?C1)f/I\n    123abcdef\n    123abcdef\\=callout_capture\n    123abcdefC-\\=callout_none\n\\= Expect no match\n    123abcdef\\=callout_fail=1\n\n/(?C0)(abc(?C1))*/I\n    abcabcabc\n    abcabc\\=callout_fail=1:4\n    abcabcabc\\=callout_fail=1:4\n\n/(\\d{3}(?C))*/I\n    123\\=callout_capture\n    123456\\=callout_capture\n    123456789\\=callout_capture\n\n/((xyz)(?C)p|(?C1)xyzabc)/I\n    xyzabc\\=callout_capture\n\n/(X)((xyz)(?C)p|(?C1)xyzabc)/I\n    Xxyzabc\\=callout_capture\n\n/(?=(abc))(?C)abcdef/I\n    abcdef\\=callout_capture\n\n/(?!(abc)(?C1)d)(?C2)abcxyz/I\n    abcxyz\\=callout_capture\n\n/(?<=(abc)(?C))xyz/I\n   abcxyz\\=callout_capture\n\n/a(b+)(c*)(?C1)/I\n\\= Expect no match\n    abbbbbccc\\=callout_data=1\n\n/a(b+?)(c*?)(?C1)/I\n\\= Expect no match\n    abbbbbccc\\=callout_data=1\n\n/(?C)abc/I\n\n/(?C)^abc/I\n\n/(?C)a|b/I\n\n/a|(b)(?C)/I\n    b\n\n/x(ab|(bc|(de|(?R))))/I\n    xab\n    xbc\n    xde\n    xxab\n    xxxab\n\\= Expect no match\n    xyab\n\n/^([^()]|\\((?1)*\\))*$/I\n    abc\n    a(b)c\n    a(b(c))d\n\\= Expect no match)\n    a(b(c)d\n\n/^>abc>([^()]|\\((?1)*\\))*<xyz<$/I\n   >abc>123<xyz<\n   >abc>1(2)3<xyz<\n   >abc>(1(2)3)<xyz<\n\n/(a(?1)b)/IB\n\n/(a(?1)+b)/IB\n\n/^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$/I\n    12\n    (((2+2)*-3)-7)\n    -12\n\\= Expect no match\n    ((2+2)*-3)-7)\n\n/^(x(y|(?1){2})z)/I\n    xyz\n    xxyzxyzz\n\\= Expect no match\n    xxyzz\n    xxyzxyzxyzz\n\n/((< (?: (?(R) \\d++  | [^<>]*+) | (?2)) * >))/Ix\n    <>\n    <abcd>\n    <abc <123> hij>\n    <abc <def> hij>\n    <abc<>def>\n    <abc<>\n\\= Expect no match\n    <abc\n\n/(?1)/I\n\n/((?2)(abc)/I\n\n/^(abc)def(?1)/I\n    abcdefabc\n\n/^(a|b|c)=(?1)+/I\n    a=a\n    a=b\n    a=bc\n\n/^(a|b|c)=((?1))+/I\n    a=a\n    a=b\n    a=bc\n\n/a(?P<name1>b|c)d(?P<longername2>e)/IB\n    abde\n    acde\n\n/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/IB\n\n/(?P<a>a)...(?P=a)bbb(?P>a)d/IB\n\n/^\\W*(?:(?P<one>(?P<two>.)\\W*(?P>one)\\W*(?P=two)|)|(?P<three>(?P<four>.)\\W*(?P>three)\\W*(?P=four)|\\W*.\\W*))\\W*$/Ii\n    1221\n    Satan, oscillate my metallic sonatas!\n    A man, a plan, a canal: Panama!\n    Able was I ere I saw Elba.\n\\= Expect no match\n    The quick brown fox\n\n/((?(R)a|b))\\1(?1)?/I\n  bb\n  bbaa\n\n/(.*)a/Is\n\n/(.*)a\\1/Is\n\n/(.*)a(b)\\2/Is\n\n/((.*)a|(.*)b)z/Is\n\n/((.*)a|(.*)b)z\\1/Is\n\n/((.*)a|(.*)b)z\\2/Is\n\n/((.*)a|(.*)b)z\\3/Is\n\n/((.*)a|^(.*)b)z\\3/Is\n\n/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a/Is\n\n/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a\\31/Is\n\n/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a\\32/Is\n\n/(a)(bc)/IB,no_auto_capture\n  abc\n\n/(?P<one>a)(bc)/IB,no_auto_capture\n  abc\n\n/(a)(?P<named>bc)/IB,no_auto_capture\n\n/(aaa(?C1)bbb|ab)/I\n   aaabbb\n   aaabbb\\=callout_data=0\n   aaabbb\\=callout_data=1\n\\= Expect no match\n   aaabbb\\=callout_data=-1\n\n/ab(?P<one>cd)ef(?P<two>gh)/I\n    abcdefgh\n    abcdefgh\\=copy=1,get=two\n    abcdefgh\\=copy=one,copy=two\n    abcdefgh\\=copy=three\n\n/(?P<Tes>)(?P<Test>)/IB\n\n/(?P<Test>)(?P<Tes>)/IB\n\n/(?P<Z>zz)(?P<A>aa)/I\n    zzaa\\=copy=Z\n    zzaa\\=copy=A\n\n/(?P<x>eks)(?P<x>eccs)/I\n\n/(?P<abc>abc(?P<def>def)(?P<abc>xyz))/I\n\n\"\\[((?P<elem>\\d+)(,(?P>elem))*)\\]\"I\n    [10,20,30,5,5,4,4,2,43,23,4234]\n\\= Expect no match\n    []\n\n\"\\[((?P<elem>\\d+)(,(?P>elem))*)?\\]\"I\n    [10,20,30,5,5,4,4,2,43,23,4234]\n    []\n\n/(a(b(?2)c))?/IB\n\n/(a(b(?2)c))*/IB\n\n/(a(b(?2)c)){0,2}/IB\n\n/[ab]{1}+/B\n\n/()(?1){1}/B\n\n/()(?1)/B\n\n/((w\\/|-|with)*(free|immediate)*.*?shipping\\s*[!.-]*)/Ii\n     Baby Bjorn Active Carrier - With free SHIPPING!!\n\n/((w\\/|-|with)*(free|immediate)*.*?shipping\\s*[!.-]*)/Ii\n     Baby Bjorn Active Carrier - With free SHIPPING!!\n\n/a*.*b/IB\n\n/(a|b)*.?c/IB\n\n/abc(?C255)de(?C)f/IB\n\n/abcde/IB,auto_callout\n  abcde\n\\= Expect no match\n  abcdfe\n\n/a*b/IB,auto_callout\n  ab\n  aaaab\n  aaaacb\n\n/a*b/IB,auto_callout\n  ab\n  aaaab\n  aaaacb\n\n/a+b/IB,auto_callout\n  ab\n  aaaab\n\\= Expect no match\n  aaaacb\n\n/(abc|def)x/IB,auto_callout\n  abcx\n  defx\n\\= Expect no match\n  abcdefzx\n\n/(abc|def)x/IB,auto_callout\n  abcx\n  defx\n\\= Expect no match\n  abcdefzx\n\n/(ab|cd){3,4}/I,auto_callout\n  ababab\n  abcdabcd\n  abcdcdcdcdcd\n\n/([ab]{,}c|xy)/IB,auto_callout\n\\= Expect no match\n    Note: that {,} does NOT introduce a quantifier\n\n/([ab]{,}c|xy)/IB,auto_callout\n\\= Expect no match\n    Note: that {,} does NOT introduce a quantifier\n\n/([ab]{1,4}c|xy){4,5}?123/IB,auto_callout\n    aacaacaacaacaac123\n\n/\\b.*/I\n  ab cd\\=offset=1\n\n/\\b.*/Is\n  ab cd\\=startoffset=1\n\n/(?!.bcd).*/I\n  Xbcd12345\n\n/abcde/I\n    ab\\=ps\n    abc\\=ps\n    abcd\\=ps\n    abcde\\=ps\n    the quick brown abc\\=ps\n\\= Expect no match\\=ps\n    the quick brown abxyz fox\\=ps\n\n\"^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/(20)?\\d\\d$\"I\n    13/05/04\\=ps\n    13/5/2004\\=ps\n    02/05/09\\=ps\n    1\\=ps\n    1/2\\=ps\n    1/2/0\\=ps\n    1/2/04\\=ps\n    0\\=ps\n    02/\\=ps\n    02/0\\=ps\n    02/1\\=ps\n\\= Expect no match\\=ps\n    \\=ps\n    123\\=ps\n    33/4/04\\=ps\n    3/13/04\\=ps\n    0/1/2003\\=ps\n    0/\\=ps\n    02/0/\\=ps\n    02/13\\=ps\n\n/0{0,2}ABC/I\n\n/\\d{3,}ABC/I\n\n/\\d*ABC/I\n\n/[abc]+DE/I\n\n/[abc]?123/I\n    123\\=ps\n    a\\=ps\n    b\\=ps\n    c\\=ps\n    c12\\=ps\n    c123\\=ps\n\n/^(?:\\d){3,5}X/I\n    1\\=ps\n    123\\=ps\n    123X\n    1234\\=ps\n    1234X\n    12345\\=ps\n    12345X\n\\= Expect no match\n    1X\n    123456\\=ps\n\n\"<(\\w+)/?>(.)*</(\\1)>\"Igms\n    <!DOCTYPE seite SYSTEM \"http://www.lco.lineas.de/xmlCms.dtd\">\\n<seite>\\n<dokumenteninformation>\\n<seitentitel>Partner der LCO</seitentitel>\\n<sprache>de</sprache>\\n<seitenbeschreibung>Partner der LINEAS Consulting\\nGmbH</seitenbeschreibung>\\n<schluesselworte>LINEAS Consulting GmbH Hamburg\\nPartnerfirmen</schluesselworte>\\n<revisit>30 days</revisit>\\n<robots>index,follow</robots>\\n<menueinformation>\\n<aktiv>ja</aktiv>\\n<menueposition>3</menueposition>\\n<menuetext>Partner</menuetext>\\n</menueinformation>\\n<lastedited>\\n<autor>LCO</autor>\\n<firma>LINEAS Consulting</firma>\\n<datum>15.10.2003</datum>\\n</lastedited>\\n</dokumenteninformation>\\n<inhalt>\\n\\n<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\\nGmbH</absatzueberschrift>\\n\\n<absatz><link ziel=\"http://www.ca.com/\" zielfenster=\"_blank\">\\n<bild name=\"logo_ca.gif\" rahmen=\"no\"/></link> <link\\nziel=\"http://www.ey.com/\" zielfenster=\"_blank\"><bild\\nname=\"logo_euy.gif\" rahmen=\"no\"/></link>\\n</absatz>\\n\\n<absatz><link ziel=\"http://www.cisco.de/\" zielfenster=\"_blank\">\\n<bild name=\"logo_cisco.gif\" rahmen=\"ja\"/></link></absatz>\\n\\n<absatz><link ziel=\"http://www.atelion.de/\"\\nzielfenster=\"_blank\"><bild\\nname=\"logo_atelion.gif\" rahmen=\"no\"/></link>\\n</absatz>\\n\\n<absatz><link ziel=\"http://www.line-information.de/\"\\nzielfenster=\"_blank\">\\n<bild name=\"logo_line_information.gif\" rahmen=\"no\"/></link>\\n</absatz>\\n\\n<absatz><bild name=\"logo_aw.gif\" rahmen=\"no\"/></absatz>\\n\\n<absatz><link ziel=\"http://www.incognis.de/\"\\nzielfenster=\"_blank\"><bild\\nname=\"logo_incognis.gif\" rahmen=\"no\"/></link></absatz>\\n\\n<absatz><link ziel=\"http://www.addcraft.com/\"\\nzielfenster=\"_blank\"><bild\\nname=\"logo_addcraft.gif\" rahmen=\"no\"/></link></absatz>\\n\\n<absatz><link ziel=\"http://www.comendo.com/\"\\nzielfenster=\"_blank\"><bild\\nname=\"logo_comendo.gif\" rahmen=\"no\"/></link></absatz>\\n\\n</inhalt>\\n</seite>\\=jitstack=1024\n\n/line\\nbreak/I\n    this is a line\\nbreak\n    line one\\nthis is a line\\nbreak in the second line\n\n/line\\nbreak/I,firstline\n    this is a line\\nbreak\n\\= Expect no match\n    line one\\nthis is a line\\nbreak in the second line\n\n/line\\nbreak/Im,firstline\n    this is a line\\nbreak\n\\= Expect no match\n    line one\\nthis is a line\\nbreak in the second line\n\n/(?i)(?-i)AbCd/I\n    AbCd\n\\= Expect no match\n    abcd\n\n/a{11111111111111111111}/I\n\n/(){64294967295}/I\n\n/(){2,4294967295}/I\n\n\"(?i:a)(?i:b)(?i:c)(?i:d)(?i:e)(?i:f)(?i:g)(?i:h)(?i:i)(?i:j)(k)(?i:l)A\\1B\"I\n    abcdefghijklAkB\n\n\"(?P<n0>a)(?P<n1>b)(?P<n2>c)(?P<n3>d)(?P<n4>e)(?P<n5>f)(?P<n6>g)(?P<n7>h)(?P<n8>i)(?P<n9>j)(?P<n10>k)(?P<n11>l)A\\11B\"I\n    abcdefghijklAkB\n\n\"(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)A\\11B\"I\n    abcdefghijklAkB\n\n\"(?P<name0>a)(?P<name1>a)(?P<name2>a)(?P<name3>a)(?P<name4>a)(?P<name5>a)(?P<name6>a)(?P<name7>a)(?P<name8>a)(?P<name9>a)(?P<name10>a)(?P<name11>a)(?P<name12>a)(?P<name13>a)(?P<name14>a)(?P<name15>a)(?P<name16>a)(?P<name17>a)(?P<name18>a)(?P<name19>a)(?P<name20>a)(?P<name21>a)(?P<name22>a)(?P<name23>a)(?P<name24>a)(?P<name25>a)(?P<name26>a)(?P<name27>a)(?P<name28>a)(?P<name29>a)(?P<name30>a)(?P<name31>a)(?P<name32>a)(?P<name33>a)(?P<name34>a)(?P<name35>a)(?P<name36>a)(?P<name37>a)(?P<name38>a)(?P<name39>a)(?P<name40>a)(?P<name41>a)(?P<name42>a)(?P<name43>a)(?P<name44>a)(?P<name45>a)(?P<name46>a)(?P<name47>a)(?P<name48>a)(?P<name49>a)(?P<name50>a)(?P<name51>a)(?P<name52>a)(?P<name53>a)(?P<name54>a)(?P<name55>a)(?P<name56>a)(?P<name57>a)(?P<name58>a)(?P<name59>a)(?P<name60>a)(?P<name61>a)(?P<name62>a)(?P<name63>a)(?P<name64>a)(?P<name65>a)(?P<name66>a)(?P<name67>a)(?P<name68>a)(?P<name69>a)(?P<name70>a)(?P<name71>a)(?P<name72>a)(?P<name73>a)(?P<name74>a)(?P<name75>a)(?P<name76>a)(?P<name77>a)(?P<name78>a)(?P<name79>a)(?P<name80>a)(?P<name81>a)(?P<name82>a)(?P<name83>a)(?P<name84>a)(?P<name85>a)(?P<name86>a)(?P<name87>a)(?P<name88>a)(?P<name89>a)(?P<name90>a)(?P<name91>a)(?P<name92>a)(?P<name93>a)(?P<name94>a)(?P<name95>a)(?P<name96>a)(?P<name97>a)(?P<name98>a)(?P<name99>a)(?P<name100>a)\"I\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n\"(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)\"I\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/[^()]*(?:\\((?R)\\)[^()]*)*/I\n    (this(and)that\n    (this(and)that)\n    (this(and)that)stuff\n\n/[^()]*(?:\\((?>(?R))\\)[^()]*)*/I\n    (this(and)that\n    (this(and)that)\n\n/[^()]*(?:\\((?R)\\))*[^()]*/I\n    (this(and)that\n    (this(and)that)\n\n/(?:\\((?R)\\))*[^()]*/I\n    (this(and)that\n    (this(and)that)\n    ((this))\n\n/(?:\\((?R)\\))|[^()]*/I\n    (this(and)that\n    (this(and)that)\n    (this)\n    ((this))\n\n/\\x{0000ff}/I\n\n/^((?P<A>a1)|(?P<A>a2)b)/I\n\n/^((?P<A>a1)|(?P<A>a2)b)/I,dupnames\n    a1b\\=copy=A\n    a2b\\=copy=A\n    a1b\\=copy=Z,copy=A\n\n/(?|(?<a>)(?<b>)(?<a>)|(?<a>)(?<b>)(?<a>))/I,dupnames\n\n/^(?P<A>a)(?P<A>b)/I,dupnames\n    ab\\=copy=A\n\n/^(?P<A>a)(?P<A>b)|cd/I,dupnames\n    ab\\=copy=A\n    cd\\=copy=A\n\n/^(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)/I,dupnames\n    cdefgh\\=copy=A\n\n/^((?P<A>a1)|(?P<A>a2)b)/I,dupnames\n    a1b\\=get=A\n    a2b\\=get=A\n    a1b\\=get=Z,get=A\n\n/^(?P<A>a)(?P<A>b)/I,dupnames\n    ab\\=get=A\n\n/^(?P<A>a)(?P<A>b)|cd/I,dupnames\n    ab\\=get=A\n    cd\\=get=A\n\n/^(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)/I,dupnames\n    cdefgh\\=get=A\n\n/(?J)^((?P<A>a1)|(?P<A>a2)b)/I\n    a1b\\=copy=A\n    a2b\\=copy=A\n\n/^(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<A>d)/I\n\n# In this next test, J is not set at the outer level; consequently it isn't set\n# in the pattern's options; consequently pcre2_substring_get_byname() produces\n# a random value.\n\n/^(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<C>d)/I\n    a bc d\\=copy=A,copy=B,copy=C\n\n/^(?P<A>a)?(?(A)a|b)/I\n    aabc\n    bc\n\\= Expect no match\n    abc\n\n/(?:(?(ZZ)a|b)(?P<ZZ>X))+/I\n    bXaX\n\n/(?:(?(2y)a|b)(X))+/I\n\n/(?:(?(ZA)a|b)(?P<ZZ>X))+/I\n\n/(?:(?(ZZ)a|b)(?(ZZ)a|b)(?P<ZZ>X))+/I\n    bbXaaX\n\n/(?:(?(ZZ)a|\\(b\\))\\\\(?P<ZZ>X))+/I\n    (b)\\\\Xa\\\\X\n\n/(?P<ABC/I\n\n/(?:(?(A)(?P=A)a|b)(?P<A>X|Y))+/I\n    bXXaYYaY\n    bXYaXXaX\n\n/()()()()()()()()()(?:(?(A)(?P=A)a|b)(?P<A>X|Y))+/I\n    bXXaYYaY\n\n/\\s*,\\s*/I\n    \\x0b,\\x0b\n    \\x0c,\\x0d\n\n/^abc/Im,newline=lf\n    xyz\\nabc\n    xyz\\r\\nabc\n\\= Expect no match\n    xyz\\rabc\n    xyzabc\\r\n    xyzabc\\rpqr\n    xyzabc\\r\\n\n    xyzabc\\r\\npqr\n\n/^abc/Im,newline=crlf\n    xyz\\r\\nabclf>\n\\= Expect no match\n    xyz\\nabclf\n    xyz\\rabclf\n\n/^abc/Im,newline=cr\n    xyz\\rabc\n\\= Expect no match\n    xyz\\nabc\n    xyz\\r\\nabc\n\n/^abc/Im,newline=bad\n\n/.*/I,newline=lf\n    abc\\ndef\n    abc\\rdef\n    abc\\r\\ndef\n\n/.*/I,newline=cr\n    abc\\ndef\n    abc\\rdef\n    abc\\r\\ndef\n\n/.*/I,newline=crlf\n    abc\\ndef\n    abc\\rdef\n    abc\\r\\ndef\n\n/\\w+(.)(.)?def/Is\n    abc\\ndef\n    abc\\rdef\n    abc\\r\\ndef\n\n/(?P<B>25[0-5]|2[0-4]\\d|[01]?\\d?\\d)(?:\\.(?P>B)){3}/I\n\n/()()()()()()()()()()()()()()()()()()()()\n ()()()()()()()()()()()()()()()()()()()()\n ()()()()()()()()()()()()()()()()()()()()\n ()()()()()()()()()()()()()()()()()()()()\n ()()()()()()()()()()()()()()()()()()()()\n (.(.))/Ix\n    XY\\=ovector=133\n\n/(a*b|(?i:c*(?-i)d))/I\n\n/()[ab]xyz/I\n\n/(|)[ab]xyz/I\n\n/(|c)[ab]xyz/I\n\n/(|c?)[ab]xyz/I\n\n/(d?|c?)[ab]xyz/I\n\n/(d?|c)[ab]xyz/I\n\n/^a*b\\d/IB\n\n/^a*+b\\d/IB\n\n/^a*?b\\d/IB\n\n/^a+A\\d/IB\n    aaaA5\n\\= Expect no match\n    aaaa5\n\n/^a*A\\d/IBi\n    aaaA5\n    aaaa5\n    a5 \n\n/(a*|b*)[cd]/I\n\n/(a+|b*)[cd]/I\n\n/(a*|b+)[cd]/I\n\n/(a+|b+)[cd]/I\n\n/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((\n ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((\n (((\n a\n ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n )))\n/Ix\n  large nest\n\n/a*\\d/B\n\n/a*\\D/B\n\n/0*\\d/B\n\n/0*\\D/B\n\n/a*\\s/B\n\n/a*\\S/B\n\n/ *\\s/B\n\n/ *\\S/B\n\n/a*\\w/B\n\n/a*\\W/B\n\n/=*\\w/B\n\n/=*\\W/B\n\n/\\d*a/B\n\n/\\d*2/B\n\n/\\d*\\d/B\n\n/\\d*\\D/B\n\n/\\d*\\s/B\n\n/\\d*\\S/B\n\n/\\d*\\w/B\n\n/\\d*\\W/B\n\n/\\D*a/B\n\n/\\D*2/B\n\n/\\D*\\d/B\n\n/\\D*\\D/B\n\n/\\D*\\s/B\n\n/\\D*\\S/B\n\n/\\D*\\w/B\n\n/\\D*\\W/B\n\n/\\s*a/B\n\n/\\s*2/B\n\n/\\s*\\d/B\n\n/\\s*\\D/B\n\n/\\s*\\s/B\n\n/\\s*\\S/B\n\n/\\s*\\w/B\n\n/\\s*\\W/B\n\n/\\S*a/B\n\n/\\S*2/B\n\n/\\S*\\d/B\n\n/\\S*\\D/B\n\n/\\S*\\s/B\n\n/\\S*\\S/B\n\n/\\S*\\w/B\n\n/\\S*\\W/B\n\n/\\w*a/B\n\n/\\w*2/B\n\n/\\w*\\d/B\n\n/\\w*\\D/B\n\n/\\w*\\s/B\n\n/\\w*\\S/B\n\n/\\w*\\w/B\n\n/\\w*\\W/B\n\n/\\W*a/B\n\n/\\W*2/B\n\n/\\W*\\d/B\n\n/\\W*\\D/B\n\n/\\W*\\s/B\n\n/\\W*\\S/B\n\n/\\W*\\w/B\n\n/\\W*\\W/B\n\n/[^a]+a/B\n\n/[^a]+a/Bi\n\n/[^a]+A/Bi\n\n/[^a]+b/B\n\n/[^a]+\\d/B\n\n/a*[^a]/B\n\n/(?P<abc>x)(?P<xyz>y)/I\n    xy\\=copy=abc,copy=xyz\n\n/(?<abc>x)(?'xyz'y)/I\n    xy\\=copy=abc,copy=xyz\n\n/(?<abc'x)(?'xyz'y)/I\n\n/(?<abc>x)(?'xyz>y)/I\n\n/(?P'abc'x)(?P<xyz>y)/I\n\n/^(?:(?(ZZ)a|b)(?<ZZ>X))+/\n    bXaX\n    bXbX\n\\= Expect no match\n    aXaX\n    aXbX\n\n/^(?P>abc)(?<abcd>xxx)/\n\n/^(?P>abc)(?<abc>x|y)/\n    xx\n    xy\n    yy\n    yx\n\n/^(?P>abc)(?P<abc>x|y)/\n    xx\n    xy\n    yy\n    yx\n\n/^((?(abc)a|b)(?<abc>x|y))+/\n    bxay\n    bxby\n\\= Expect no match\n    axby\n\n/^(((?P=abc)|X)(?<abc>x|y))+/\n    XxXxxx\n    XxXyyx\n    XxXyxx\n\\= Expect no match\n    x\n\n/^(?1)(abc)/\n    abcabc\n\n/^(?:(?:\\1|X)(a|b))+/\n    Xaaa\n    Xaba\n\n/^[\\E\\Qa\\E-\\Qz\\E]+/B\n\n/^[a\\Q]bc\\E]/B\n\n/^[a-\\Q\\E]/B\n\n/^(?P>abc)[()](?<abc>)/B\n\n/^((?(abc)y)[()](?P<abc>x))+/B\n    (xy)x\n\n/^(?P>abc)\\Q()\\E(?<abc>)/B\n\n/^(?P>abc)[a\\Q(]\\E(](?<abc>)/B\n\n/^(?P>abc) # this is (a comment)\n  (?<abc>)/Bx\n\n/^\\W*(?:(?<one>(?<two>.)\\W*(?&one)\\W*\\k<two>|)|(?<three>(?<four>.)\\W*(?&three)\\W*\\k'four'|\\W*.\\W*))\\W*$/Ii\n    1221\n    Satan, oscillate my metallic sonatas!\n    A man, a plan, a canal: Panama!\n    Able was I ere I saw Elba.\n\\= Expect no match\n    The quick brown fox\n\n/(?=(\\w+))\\1:/I\n    abcd:\n\n/(?=(?'abc'\\w+))\\k<abc>:/I\n    abcd:\n\n/(?'abc'a|b)(?<abc>d|e)\\k<abc>{2}/dupnames\n    adaa\n\\= Expect no match\n    addd\n    adbb\n\n/(?'abc'a|b)(?<abc>d|e)(?&abc){2}/dupnames\n    bdaa\n    bdab\n\\= Expect no match\n    bddd\n\n/(?(<bc))/\n\n/(?(''))/\n\n/(?('R')stuff)/\n\n/((abc (?(R) (?(R1)1) (?(R2)2) X  |  (?1)  (?2)   (?R) ))) /x\n    abcabc1Xabc2XabcXabcabc\n\n/(?<A> (?'B' abc (?(R) (?(R&A)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) /x\n    abcabc1Xabc2XabcXabcabc\n\n/(?<A> (?'B' abc (?(R) (?(R&C)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) /x\n\n/^(?(DEFINE) abc | xyz ) /x\n\n/(?(DEFINE) abc) xyz/Ix\n\n/(a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\\=ovector=0\n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\=ovector=0\n\n/^a.b/newline=lf\n    a\\rb\n\\= Expect no match\n    a\\nb\n\n/^a.b/newline=cr\n    a\\nb\n\\= Expect no match\n    a\\rb\n\n/^a.b/newline=anycrlf\n    a\\x85b\n\\= Expect no match\n    a\\rb\n    a\\r\\nb\n\n/^a.b/newline=any\n\\= Expect no match\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x85b\n\n/^a.b/newline=nul\n    a\\nb\n\\= Expect no match\n    a\\x{00}b\n\n/^a./newline=lf\n    a\\r\n\\= Expect no match\n    a\\n\n\n/^a./newline=cr\n    a\\n\n\\= Expect no match\n    a\\r\n\n/^a./newline=anycrlf\n    a\\x85\n\\= Expect no match\n    a\\r\n    a\\n\n    a\\r\\n\n\n/^a./newline=any\n\\= Expect no match\n    a\\n\n    a\\r\n    a\\r\\n\n    a\\x85\n\n/^a./newline=nul\n    a\\n\n\\= Expect no match\n    a\\x{00}\n\n/^b/m,newline=lf\n    a\\nb\n\\= Expect no match\n    a\\rb\n\n/^b/m,newline=cr\n    a\\rb\n\\= Expect no match\n    a\\nb\n\n/^b/m,newline=anycrlf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n    \\nb\n    \\rb\n    \\r\\nb\n\\= Expect no match\n    a\\x85b\n\n/^b/m,newline=any\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x85b\n    \\nb\n    \\rb\n    \\r\\nb\n\n/^b/m,newline=nul\n    a\\x{00}b\n\\= Expect no match\n    a\\nb\n\n/^abc./gmx,newline=any\n    abc1 \\x0aabc2 \\x0babc3xx \\x0cabc4 \\x0dabc5xx \\x0d\\x0aabc6 \\x85abc7 JUNK\n\n/abc.$/gmx,newline=any\n    abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x85 abc7 abc9\n\n/^a\\Rb/bsr=unicode\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x0bb\n    a\\x0cb\n    a\\x85b\n\\= Expect no match\n    a\\n\\rb\n\n/^a\\R*b/bsr=unicode\n    ab\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x0bb\n    a\\x0cb\n    a\\x85b\n    a\\n\\rb\n    a\\n\\r\\x85\\x0cb\n\n/^a\\R+b/bsr=unicode\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x0bb\n    a\\x0cb\n    a\\x85b\n    a\\n\\rb\n    a\\n\\r\\x85\\x0cb\n\\= Expect no match\n    ab\n\n/^a\\R{1,3}b/bsr=unicode\n    a\\nb\n    a\\n\\rb\n    a\\n\\r\\x85b\n    a\\r\\n\\r\\nb\n    a\\r\\n\\r\\n\\r\\nb\n    a\\n\\r\\n\\rb\n    a\\n\\n\\r\\nb\n\\= Expect no match\n    a\\n\\n\\n\\rb\n    a\\r\n\n/(?&abc)X(?<abc>P)/I\n    abcPXP123\n\n/(?1)X(?<abc>P)/I\n    abcPXP123\n\n/(?:a(?&abc)b)*(?<abc>x)/\n    123axbaxbaxbx456\n    123axbaxbaxb456\n\n/(?:a(?&abc)b){1,5}(?<abc>x)/\n    123axbaxbaxbx456\n\n/(?:a(?&abc)b){2,5}(?<abc>x)/\n    123axbaxbaxbx456\n\n/(?:a(?&abc)b){2,}(?<abc>x)/\n    123axbaxbaxbx456\n\n/(abc)(?i:(?1))/\n    defabcabcxyz\n\\= Expect no match\n    DEFabcABCXYZ\n\n/(abc)(?:(?i)(?1))/\n    defabcabcxyz\n\\= Expect no match\n    DEFabcABCXYZ\n\n/^(a)\\g-2/\n\n/^(a)\\g/\n\n/^(a)\\g{0}/\n\n/^(a)\\g{3/\n\n/^(a)\\g{aa}/\n\n/^a.b/newline=lf\n    a\\rb\n\\= Expect no match\n    a\\nb\n\n/.+foo/\n    afoo\n\\= Expect no match\n    \\r\\nfoo\n    \\nfoo\n\n/.+foo/newline=crlf\n    afoo\n    \\nfoo\n\\= Expect no match\n    \\r\\nfoo\n\n/.+foo/newline=any\n    afoo\n\\= Expect no match\n    \\nfoo\n    \\r\\nfoo\n\n/.+foo/s\n    afoo\n    \\r\\nfoo\n    \\nfoo\n\n/^$/gm,newline=any\n    abc\\r\\rxyz\n    abc\\n\\rxyz\n\\= Expect no match\n    abc\\r\\nxyz\n\n/(?m)^$/g,newline=any,aftertext\n    abc\\r\\n\\r\\n\n\n/(?m)^$|^\\r\\n/g,newline=any,aftertext\n    abc\\r\\n\\r\\n\n\n/(?m)$/g,newline=any,aftertext\n    abc\\r\\n\\r\\n\n\n/abc.$/gmx,newline=anycrlf\n    abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x85 abc9\n\n/^X/m\n    XABC\n\\= Expect no match\n    XABC\\=notbol\n\n/(ab|c)(?-1)/B\n    abc\n\n/xy(?+1)(abc)/B\n    xyabcabc\n\\= Expect no match\n    xyabc\n\n/x(?-0)y/\n\n/x(?-1)y/\n\n/x(?+0)y/\n\n/x(?+1)y/\n\n/^(abc)?(?(-1)X|Y)/B\n    abcX\n    Y\n\\= Expect no match\n    abcY\n\n/^((?(+1)X|Y)(abc))+/B\n    YabcXabc\n    YabcXabcXabc\n\\= Expect no match\n    XabcXabc\n\n/(?(-1)a)/B\n\n/((?(-1)a))/B\n\n/((?(-2)a))/B\n\n/^(?(+1)X|Y)(.)/B\n    Y!\n\n/(?<A>tom|bon)-\\k{A}/\n    tom-tom\n    bon-bon\n\\= Expect no match\n    tom-bon\n\n/\\g{A/\n\n/(?|(abc)|(xyz))/B\n   >abc<\n   >xyz<\n\n/(x)(?|(abc)|(xyz))(x)/B\n    xabcx\n    xxyzx\n\n/(x)(?|(abc)(pqr)|(xyz))(x)/B\n    xabcpqrx\n    xxyzx\n\n/\\H++X/B\n\\= Expect no match\n    XXXX\n\n/\\H+\\hY/B\n    XXXX Y\n\n/\\H+ Y/B\n\n/\\h+A/B\n\n/\\v*B/B\n\n#if !ebcdic\n\n/\\V+\\x0a/B\n\n#endif\n\n/A+\\h/B\n\n/ *\\H/B\n\n/A*\\v/B\n\n/\\x0b*\\V/B\n\n/\\d+\\h/B\n\n/\\d*\\v/B\n\n/S+\\h\\S+\\v/B\n\n/\\w{3,}\\h\\w+\\v/B\n\n/\\h+\\d\\h+\\w\\h+\\S\\h+\\H/B\n\n/\\v+\\d\\v+\\w\\v+\\S\\v+\\V/B\n\n/\\H+\\h\\H+\\d/B\n\n/\\V+\\v\\V+\\w/B\n\n/\\( (?: [^()]* | (?R) )* \\)/x\n(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(00)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)\\=jitstack=1024\n\n/[\\E]AAA/\n\n/[\\Q\\E]AAA/\n\n/[^\\E]AAA/\n\n/[^\\Q\\E]AAA/\n\n/[\\E^]AAA/\n\n/[\\Q\\E^]AAA/\n\n/A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/B\n\n/^a+(*FAIL)/auto_callout\n\\= Expect no match\n    aaaaaa\n\n/a+b?c+(*FAIL)/auto_callout\n\\= Expect no match\n    aaabccc\n\n/a+b?(*PRUNE)c+(*FAIL)/auto_callout\n\\= Expect no match\n    aaabccc\n\n/a+b?(*COMMIT)c+(*FAIL)/auto_callout\n\\= Expect no match\n    aaabccc\n\n/a+b?(*SKIP)c+(*FAIL)/auto_callout\n\\= Expect no match\n    aaabcccaaabccc\n\n/a+b?(*THEN)c+(*FAIL)/auto_callout\n\\= Expect no match\n    aaabccc\n\n/a(*MARK)b/\n\n/\\g6666666666/\n\n/[\\g6666666666]/B\n\n/(?1)\\c[/\n\n/.+A/newline=crlf\n\\= Expect no match\n    \\r\\nA\n\n/\\nA/newline=crlf\n    \\r\\nA\n\n/[\\r\\n]A/newline=crlf\n    \\r\\nA\n\n/(\\r|\\n)A/newline=crlf\n    \\r\\nA\n\n/a(*CR)b/\n\n/(*CR)a.b/\n    a\\nb\n\\= Expect no match\n    a\\rb\n\n/(*CR)a.b/newline=lf\n    a\\nb\n\\= Expect no match\n    a\\rb\n\n/(*LF)a.b/newline=CRLF\n    a\\rb\n\\= Expect no match\n    a\\nb\n\n/(*CRLF)a.b/\n    a\\rb\n    a\\nb\n\\= Expect no match\n    a\\r\\nb\n\n/(*ANYCRLF)a.b/newline=CR\n\\= Expect no match\n    a\\rb\n    a\\nb\n    a\\r\\nb\n\n/(*ANY)a.b/newline=cr\n\\= Expect no match\n    a\\rb\n    a\\nb\n    a\\r\\nb\n    a\\x85b\n\n/(*ANY).*/g\n    abc\\r\\ndef\n\n/(*ANYCRLF).*/g\n    abc\\r\\ndef\n\n/(*CRLF).*/g\n    abc\\r\\ndef\n\n/(*NUL)^.*/\n    a\\nb\\x00ccc\n\n/(*NUL)^.*/s\n    a\\nb\\x00ccc\n\n/^x/m,newline=NUL\n    ab\\x00xy\n\n/'#comment' 0d 0a 00 '^x\\' 0a 'y'/x,newline=nul,hex\n    x\\nyz\n\n/(*NUL)^X\\NY/\n    X\\nY\n    X\\rY\n\\= Expect no match\n    X\\x00Y\n\n/a\\Rb/I,bsr=anycrlf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n\\= Expect no match\n    a\\x85b\n    a\\x0bb\n\n/a\\Rb/I,bsr=unicode\n    a\\rb\n    a\\nb\n    a\\r\\nb\n    a\\x85b\n    a\\x0bb\n\n/a\\R?b/I,bsr=anycrlf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n\\= Expect no match\n    a\\x85b\n    a\\x0bb\n\n/a\\R?b/I,bsr=unicode\n    a\\rb\n    a\\nb\n    a\\r\\nb\n    a\\x85b\n    a\\x0bb\n\n/a\\R{2,4}b/I,bsr=anycrlf\n    a\\r\\n\\nb\n    a\\n\\r\\rb\n    a\\r\\n\\r\\n\\r\\n\\r\\nb\n\\= Expect no match\n    a\\x85\\x85b\n    a\\x0b\\x0bb\n\n/a\\R{2,4}b/I,bsr=unicode\n    a\\r\\rb\n    a\\n\\n\\nb\n    a\\r\\n\\n\\r\\rb\n    a\\x85\\x85b\n    a\\x0b\\x0bb\n\\= Expect no match\n    a\\r\\r\\r\\r\\rb\n\n/(*BSR_ANYCRLF)a\\Rb/I\n    a\\nb\n    a\\rb\n\n/(*BSR_UNICODE)a\\Rb/I\n    a\\x85b\n\n/(*BSR_ANYCRLF)(*CRLF)a\\Rb/I\n    a\\nb\n    a\\rb\n\n/(*CRLF)(*BSR_UNICODE)a\\Rb/I\n    a\\x85b\n\n/(*CRLF)(*BSR_ANYCRLF)(*CR)ab/I\n\n/(?<a>)(?&)/\n\n/(?<abc>)(?&a)/\n\n/(?<a>)(?&aaaaaaaaaaaaaaaaaaaaaaa)/\n\n/(?+-a)/\n\n/(?-+a)/\n\n/(?(-1))/\n\n/(?(+10))/\n\n/(?(10))/\n\n/(?(+2))()()/\n\n/(?(2))()()/\n\n/\\k''/\n\n/\\k<>/\n\n/\\k{}/\n\n/\\k/\n\n/\\kabc/\n\n/(?P=)/\n\n/(?P>)/\n\n/[[:foo:]]/\n\n/[[:1234:]]/\n\n/[[:f\\oo:]]/\n\n/[[: :]]/\n\n/[[:...:]]/\n\n/[[:l\\ower:]]/\n\n/[[:abc\\:]]/\n\n/[abc[:x\\]pqr:]]/\n\n/[[:a\\dz:]]/\n\n/(^(a|b\\g<-1'c))/\n\n/^(?+1)(?<a>x|y){0}z/\n    xzxx\n    yzyy\n\\= Expect no match\n    xxz\n\n/(\\3)(\\1)(a)/\n\\= Expect no match\n    cat\n\n/cat[]/B,allow_empty_class\n    cat\\=ph\n\n/(\\3)(\\1)(a)/allow_empty_class,match_unset_backref,dupnames\n    cat\n\n/TA]/\n    The ACTA] comes\n\n/TA]/allow_empty_class,match_unset_backref,dupnames\n    The ACTA] comes\n\n/(?2)[]a()b](abc)/\n    abcbabc\n\n/(?2)[^]a()b](abc)/\n    abcbabc\n\n/(?1)[]a()b](abc)/\n    abcbabc\n\\= Expect no match\n    abcXabc\n\n/(?1)[^]a()b](abc)/\n    abcXabc\n\\= Expect no match\n    abcbabc\n\n/(?2)[]a()b](abc)(xyz)/\n    xyzbabcxyz\n\n/(?&N)[]a(?<N>)](?<M>abc)/\n   abc<abc\n\n/(?&N)[]a(?<N>)](abc)/\n   abc<abc\n\n/a[]b/\n\n/a[^]b/\n\n/a[]b/allow_empty_class,match_unset_backref,dupnames\n\\= Expect no match\n    ab\n\n/a[]+b/allow_empty_class,match_unset_backref,dupnames\n\\= Expect no match\n    ab\n\n/a[]*+b/allow_empty_class,match_unset_backref,dupnames\n    ab\n\n/a[^]b/allow_empty_class,match_unset_backref,dupnames\n    aXb\n    a\\nb\n\\= Expect no match\n    ab\n\n/a[^]+b/allow_empty_class,match_unset_backref,dupnames\n    aXb\n    a\\nX\\nXb\n\\= Expect no match\n    ab\n\n/a(?!)b/B\n\n/(?!)?a/B\n    ab\n\n/a(*FAIL)+b/\n\n/(abc|pqr|123){0}[xyz]/I\n\n/(?(?=.*b)b|^)/I,auto_callout\n   adc\n   abc\n\n/(?(?=b).*b|^d)/I\n\n/(?(?=.*b).*b|^d)/I\n\n/xyz/auto_callout\n  xyz\n  abcxyz\n\\= Expect no match\n  abc\n  abcxypqr\n\n/xyz/auto_callout,no_start_optimize\n  abcxyz\n\\= Expect no match\n  abc\n  abcxypqr\n\n/(*NO_START_OPT)xyz/auto_callout\n  abcxyz\n\n/(*NO_AUTO_POSSESS)a+b/B\n\n/xyz/auto_callout,no_start_optimize\n  abcxyz\n\n/^\"((?(?=[a])[^\"])|b)*\"$/auto_callout\n    \"ab\"\n\n/^\"((?(?=[a])[^\"])|b)*\"$/\n    \"ab\"\n\n/^X(?5)(a)(?|(b)|(q))(c)(d)Y/\n    XYabcdY\n\n/^X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)/\n    XYabcdY\n\n/Xa{2,4}b/\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/Xa{2,4}?b/\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/Xa{2,4}+b/\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X\\d{2,4}b/\n    X\\=ps\n    X3\\=ps\n    X33\\=ps\n    X333\\=ps\n    X3333\\=ps\n\n/X\\d{2,4}?b/\n    X\\=ps\n    X3\\=ps\n    X33\\=ps\n    X333\\=ps\n    X3333\\=ps\n\n/X\\d{2,4}+b/\n    X\\=ps\n    X3\\=ps\n    X33\\=ps\n    X333\\=ps\n    X3333\\=ps\n\n/X\\D{2,4}b/\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X\\D{2,4}?b/\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X\\D{2,4}+b/\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X[abc]{2,4}b/\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X[abc]{2,4}?b/\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X[abc]{2,4}+b/\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X[^a]{2,4}b/\n    X\\=ps\n    Xz\\=ps\n    Xzz\\=ps\n    Xzzz\\=ps\n    Xzzzz\\=ps\n\n/X[^a]{2,4}?b/\n    X\\=ps\n    Xz\\=ps\n    Xzz\\=ps\n    Xzzz\\=ps\n    Xzzzz\\=ps\n\n/X[^a]{2,4}+b/\n    X\\=ps\n    Xz\\=ps\n    Xzz\\=ps\n    Xzzz\\=ps\n    Xzzzz\\=ps\n\n/(Y)X\\1{2,4}b/\n    YX\\=ps\n    YXY\\=ps\n    YXYY\\=ps\n    YXYYY\\=ps\n    YXYYYY\\=ps\n\n/(Y)X\\1{2,4}?b/\n    YX\\=ps\n    YXY\\=ps\n    YXYY\\=ps\n    YXYYY\\=ps\n    YXYYYY\\=ps\n\n/(Y)X\\1{2,4}+b/\n    YX\\=ps\n    YXY\\=ps\n    YXYY\\=ps\n    YXYYY\\=ps\n    YXYYYY\\=ps\n\n/\\++\\KZ|\\d+X|9+Y/startchar\n    ++++123999\\=ps\n    ++++123999Y\\=ps\n    ++++Z1234\\=ps\n\n/Z(*F)/\n\\= Expect no match\n    Z\\=ps\n    ZA\\=ps\n\n/Z(?!)/\n\\= Expect no match\n    Z\\=ps\n    ZA\\=ps\n\n/dog(sbody)?/\n    dogs\\=ps\n    dogs\\=ph\n\n/dog(sbody)??/\n    dogs\\=ps\n    dogs\\=ph\n\n/dog|dogsbody/\n    dogs\\=ps\n    dogs\\=ph\n\n/dogsbody|dog/\n    dogs\\=ps\n    dogs\\=ph\n\n/\\bthe cat\\b/\n    the cat\\=ps\n    the cat\\=ph\n\n/abc/\n   abc\\=ps\n   abc\\=ph\n\n/abc\\K123/startchar\n    xyzabc123pqr\n    xyzabc12\\=ps\n    xyzabc12\\=ph\n\n/(?<=abc)123/\n    xyzabc123pqr\n    xyzabc12\\=ps\n    xyzabc12\\=ph\n\n/\\babc\\b/\n    +++abc+++\n    +++ab\\=ps\n    +++ab\\=ph\n\n/(?&word)(?&element)(?(DEFINE)(?<element><[^m][^>]>[^<])(?<word>\\w*+))/B\n\n/(?&word)(?&element)(?(DEFINE)(?<element><[^\\d][^>]>[^<])(?<word>\\w*+))/B\n\n/(ab)(x(y)z(cd(*ACCEPT)))pq/B\n\n/abc\\K/aftertext,startchar\n    abcdef\n    abcdef\\=notempty_atstart\n    xyzabcdef\\=notempty_atstart\n\\= Expect no match\n    abcdef\\=notempty\n    xyzabcdef\\=notempty\n\n/^(?:(?=abc)|abc\\K)/aftertext,startchar\n    abcdef\n    abcdef\\=notempty_atstart\n\\= Expect no match\n    abcdef\\=notempty\n\n/a?b?/aftertext\n    xyz\n    xyzabc\n    xyzabc\\=notempty\n    xyzabc\\=notempty_atstart\n    xyz\\=notempty_atstart\n\\= Expect no match\n    xyz\\=notempty\n\n/^a?b?/aftertext\n    xyz\n    xyzabc\n\\= Expect no match\n    xyzabc\\=notempty\n    xyzabc\\=notempty_atstart\n    xyz\\=notempty_atstart\n    xyz\\=notempty\n\n/^(?<name>a|b\\g<name>c)/\n    aaaa\n    bacxxx\n    bbaccxxx\n    bbbacccxx\n\n/^(?<name>a|b\\g'name'c)/\n    aaaa\n    bacxxx\n    bbaccxxx\n    bbbacccxx\n\n/^(a|b\\g<1>c)/\n    aaaa\n    bacxxx\n    bbaccxxx\n    bbbacccxx\n\n/^(a|b\\g'1'c)/\n    aaaa\n    bacxxx\n    bbaccxxx\n    bbbacccxx\n\n/^(a|b\\g'-1'c)/\n    aaaa\n    bacxxx\n    bbaccxxx\n    bbbacccxx\n\n/(^(a|b\\g<-1>c))/\n    aaaa\n    bacxxx\n    bbaccxxx\n    bbbacccxx\n\n/(?-i:\\g<name>)(?i:(?<name>a))/\n    XaaX\n    XAAX\n\n/(?i:\\g<name>)(?-i:(?<name>a))/\n    XaaX\n\\= Expect no match\n    XAAX\n\n/(?-i:\\g<+1>)(?i:(a))/\n    XaaX\n    XAAX\n\n/(?=(?<regex>(?#simplesyntax)\\$(?<name>[a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)(?:\\[(?<index>[a-zA-Z0-9_\\x{7f}-\\x{ff}]+|\\$\\g<name>)\\]|->\\g<name>(\\(.*?\\))?)?|(?#simple syntax withbraces)\\$\\{(?:\\g<name>(?<indices>\\[(?:\\g<index>|'(?:\\\\.|[^'\\\\])*'|\"(?:\\g<regex>|\\\\.|[^\"\\\\])*\")\\])?|\\g<complex>|\\$\\{\\g<complex>\\})\\}|(?#complexsyntax)\\{(?<complex>\\$(?<segment>\\g<name>(\\g<indices>*|\\(.*?\\))?)(?:->\\g<segment>)*|\\$\\g<complex>|\\$\\{\\g<complex>\\})\\}))\\{/\n\n/(?<n>a|b|c)\\g<n>*/\n   abc\n   accccbbb\n\n/^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)/\n    XYabcdY\n\n/(?<=b(?1)|zzz)(a)/\n    xbaax\n    xzzzax\n\n/(a)(?<=b\\1)/\n\n/(a)(?<=b+(?1))/\n\n/(a+)(?<=b(?1))/\n\n/(a(?<=b(?1)))/\n\n/(?<=b(?1))xyz/\n\n/(?<=b(?1))xyz(b+)pqrstuvew/\n\n/(a|bc)\\1/I\n\n/(a|bc)\\1{2,3}/I\n\n/(a|bc)(?1)/I\n\n/(a|b\\1)(a|b\\1)/I\n\n/(a|b\\1){2}/I\n\n/(a|bbbb\\1)(a|bbbb\\1)/I\n\n/(a|bbbb\\1){2}/I\n\n/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/I\n\n/<tr([\\w\\W\\s\\d][^<>]{0,})><TD([\\w\\W\\s\\d][^<>]{0,})>([\\d]{0,}\\.)(.*)((<BR>([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>/Iis\n\n\"(?>.*/)foo\"I\n\n/(?(?=[^a-z]+[a-z])  \\d{2}-[a-z]{3}-\\d{2}  |  \\d{2}-\\d{2}-\\d{2} ) /Ix\n\n/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/Ii\n\n/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/I\n\n/<a[\\s]+href[\\s]*=[\\s]*          # find <a href=\n ([\\\"\\'])?                       # find single or double quote\n (?(1) (.*?)\\1 | ([^\\s]+))       # if quote found, match up to next matching\n                                 # quote, otherwise match up to next space\n/Iisx\n\n/^(?!:)                       # colon disallowed at start\n  (?:                         # start of item\n    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or\n    (?(1)0 | () ) )           # if null previously matched, fail; else null\n    :                         # followed by colon\n  ){1,7}                      # end item; 1-7 of them required\n  [0-9a-f]{1,4} $             # final hex number at end of string\n  (?(1)|.)                    # check that there was an empty component\n  /Iix\n\n/(?|(?<a>A)|(?<a>B))/I\n    AB\\=copy=a\n    BA\\=copy=a\n\n/(?|(?<a>A)|(?<b>B))/\n\n/(?:a(?<quote> (?<apostrophe>')|(?<realquote>\")) |\n    b(?<quote> (?<apostrophe>')|(?<realquote>\")) )\n    (?('quote')[a-z]+|[0-9]+)/Ix,dupnames\n    a\"aaaaa\n    b\"aaaaa\n\\= Expect no match\n    b\"11111\n    a\"11111\n\n/(?:a(?<digit>[0-5])|b(?<digit>[4-7]))c(?(<digit>)d|e)/B,dupnames\n    a4cd\n    b4cd\n\\= Expect no match\n    a6cd\n    a6ce\n\n/^(?|(a)(b)(c)(?<D>d)|(?<D>e)) (?('D')X|Y)/IBx,dupnames\n    abcdX\n    eX\n\\= Expect no match\n    abcdY\n    ey\n\n/(?<A>a) (b)(c)  (?<A>d  (?(R&A)$ | (?4)) )/IBx,dupnames\n    abcdd\n\\= Expect no match\n    abcdde\n\n/abcd*/\n    xxxxabcd\\=ps\n    xxxxabcd\\=ph\n\n/abcd*/i\n    xxxxabcd\\=ps\n    xxxxabcd\\=ph\n    XXXXABCD\\=ps\n    XXXXABCD\\=ph\n\n/abc\\d*/\n    xxxxabc1\\=ps\n    xxxxabc1\\=ph\n\n/(a)bc\\1*/\n    xxxxabca\\=ps\n    xxxxabca\\=ph\n\n/abc[de]*/\n    xxxxabcde\\=ps\n    xxxxabcde\\=ph\n\n/(\\3)(\\1)(a)/allow_empty_class,match_unset_backref,dupnames\n    cat\n\n/(\\3)(\\1)(a)/I,allow_empty_class,match_unset_backref,dupnames\n    cat\n\n/(\\3)(\\1)(a)/I\n\\= Expect no match\n    cat\n\n/i(?(DEFINE)(?<s>a))/I\n    i\n\n/()i(?(1)a)/I\n    ia\n\n/(?i)a(?-i)b|c/B\n    XabX\n    XAbX\n    CcC\n\\= Expect no match\n    XABX\n\n/(?i)a(?s)b|c/B\n\n/(?i)a(?s-i)b|c/B\n\n/^(ab(c\\1)d|x){2}$/B\n    xabcxd\n\n/^(?&t)*+(?(DEFINE)(?<t>.))$/B\n\n/^(?&t)*(?(DEFINE)(?<t>.))$/B\n\n# This one is here because Perl gives the match as \"b\" rather than \"ab\". I\n# believe this to be a Perl bug.\n\n/(?>a\\Kb)z|(ab)/\n    ab\\=startchar\n\n/(?P<L1>(?P<L2>0|)|(?P>L2)(?P>L1))/\n    abcd\n    0abc\n\n/abc(*MARK:)pqr/\n\n/abc(*:)pqr/\n\n/(*COMMIT:X)/B\n\n# This should, and does, fail. In Perl, it does not, which I think is a\n# bug because replacing the B in the pattern by (B|D) does make it fail.\n# Turning off Perl's optimization by inserting (??{\"\"}) also makes it fail.\n\n/A(*COMMIT)B/aftertext,mark\n\\= Expect no match\n    ACABX\n\n# These should be different, but in Perl they are not, which I think\n# is a bug in Perl.\n\n/A(*THEN)B|A(*THEN)C/mark\n    AC\n\n/A(*PRUNE)B|A(*PRUNE)C/mark\n\\= Expect no match\n    AC\n\n# Mark names can be duplicated. Perl doesn't give a mark for this one,\n# though PCRE2 does.\n\n/^A(*:A)B|^X(*:A)Y/mark\n\\= Expect no match\n    XAQQ\n\n# COMMIT at the start of a pattern should be the same as an anchor. Perl\n# optimizations defeat this. So does the PCRE2 optimization unless we disable\n# it.\n\n/(*COMMIT)ABC/\n    ABCDEFG\n\n/(*COMMIT)ABC/no_start_optimize\n\\= Expect no match\n    DEFGABC\n\n/^(ab (c+(*THEN)cd) | xyz)/x\n\\= Expect no match\n    abcccd\n\n/^(ab (c+(*PRUNE)cd) | xyz)/x\n\\= Expect no match\n    abcccd\n\n/^(ab (c+(*FAIL)cd) | xyz)/x\n\\= Expect no match\n    abcccd\n\n# Perl gets some of these wrong\n\n/(?>.(*ACCEPT))*?5/\n    abcde\n\n/(.(*ACCEPT))*?5/\n    abcde\n\n/(.(*ACCEPT))5/\n    abcde\n\n/(.(*ACCEPT))*5/\n    abcde\n\n/A\\NB./B\n    ACBD\n\\= Expect no match\n    A\\nB\n    ACB\\n\n\n/A\\NB./Bs\n    ACBD\n    ACB\\n\n\\= Expect no match\n    A\\nB\n\n/A\\NB/newline=crlf\n    A\\nB\n    A\\rB\n\\= Expect no match\n    A\\r\\nB\n\n/\\R+b/B\n\n/\\R+\\n/B\n\n/\\R+\\d/B\n\n/\\d*\\R/B\n\n/\\s*\\R/B\n    \\x20\\x0a\n    \\x20\\x0d\n    \\x20\\x0d\\x0a\n\n/\\S*\\R/B\n    a\\x0a\n\n/X\\h*\\R/B\n    X\\x20\\x0a\n\n/X\\H*\\R/B\n    X\\x0d\\x0a\n\n/X\\H+\\R/B\n    X\\x0d\\x0a\n\n/X\\H++\\R/B\n\\= Expect no match\n    X\\x0d\\x0a\n\n/(?<=abc)def/\n    abc\\=ph\n\n/abc$/\n    abc\n    abc\\=ps\n    abc\\=ph\n\n/abc$/m\n    abc\n    abc\\n\n    abc\\=ph\n    abc\\n\\=ph\n    abc\\=ps\n    abc\\n\\=ps\n\n/abc\\z/\n    abc\n    abc\\=ps\n    abc\\=ph\n\n/abc\\Z/\n    abc\n    abc\\=ps\n    abc\\=ph\n\n/abc\\b/\n    abc\n    abc\\=ps\n    abc\\=ph\n\n/abc\\B/\n    abc\\=ps\n    abc\\=ph\n\\= Expect no match\n    abc\n\n/.+/\n\\= Bad offsets\n    abc\\=offset=4\n    abc\\=offset=-4\n\\= Valid data\n    abc\\=offset=0\n    abc\\=offset=1\n    abc\\=offset=2\n\\= Expect no match\n    abc\\=offset=3\n\n#if !ebcdic\n\n/^\\cģ/\n\n#endif\n\n/^\\c/\n\n/(?P<abn>(?P=abn)xxx)/B\n\n/(a\\1z)/B\n\n/(?P<abn>(?P=abn)(?<badstufxxx)/B\n\n/(?P<abn>(?P=axn)xxx)/B\n\n/(?P<abn>(?P=axn)xxx)(?<axn>yy)/B\n\n# These tests are here because Perl gets the first one wrong.\n\n/(\\R*)(.)/s\n    \\r\\n\n    \\r\\r\\n\\n\\r\n    \\r\\r\\n\\n\\r\\n\n\n/(\\R)*(.)/s\n    \\r\\n\n    \\r\\r\\n\\n\\r\n    \\r\\r\\n\\n\\r\\n\n\n/((?>\\r\\n|\\n|\\x0b|\\f|\\r|\\x85)*)(.)/s\n    \\r\\n\n    \\r\\r\\n\\n\\r\n    \\r\\r\\n\\n\\r\\n\n\n# -------------\n\n/^abc$/B\n\n/^abc$/Bm\n\n/^(a)*+(\\w)/\n    aaaaX\n\\= Expect no match\n    aaaa\n\n/^(?:a)*+(\\w)/\n    aaaaX\n\\= Expect no match\n    aaaa\n\n/(a)++1234/IB\n\n/([abc])++1234/I\n\n/(?<=(abc)+)X/\n\n/(^ab)/I\n\n/(^ab)++/I\n\n/(^ab|^)+/I\n\n/(^ab|^)++/I\n\n/(?:^ab)/I\n\n/(?:^ab)++/I\n\n/(?:^ab|^)+/I\n\n/(?:^ab|^)++/I\n\n/(.*ab)/I\n\n/(.*ab)++/I\n\n/(.*ab|.*)+/I\n\n/(.*ab|.*)++/I\n\n/(?:.*ab)/I\n\n/(?:.*ab)++/I\n\n/(?:.*ab|.*)+/I\n\n/(?:.*ab|.*)++/I\n\n/(?=a)[bcd]/I\n\n/((?=a))[bcd]/I\n\n/((?=a))+[bcd]/I\n\n/((?=a))++[bcd]/I\n\n/(?=a+)[bcd]/Ii\n\n/(?=a+?)[bcd]/Ii\n\n/(?=a++)[bcd]/Ii\n\n/(?=a{3})[bcd]/Ii\n\n/(abc)\\1+/\n\n# Perl doesn't get these right IMO (the 3rd is PCRE2-specific)\n\n/(?1)(?:(b(*ACCEPT))){0}/\n    b\n\n/(?1)(?:(b(*ACCEPT))){0}c/\n    bc\n\\= Expect no match\n    b\n\n/(?1)(?:((*ACCEPT))){0}c/\n    c\n    c\\=notempty\n\n/^.*?(?(?=a)a|b(*THEN)c)/\n\\= Expect no match\n    ba\n\n/^.*?(?(?=a)a|bc)/\n    ba\n\n/^.*?(?(?=a)a(*THEN)b|c)/\n\\= Expect no match\n    ac\n\n/^.*?(?(?=a)a(*THEN)b)c/\n\\= Expect no match\n    ac\n\n/^.*?(a(*THEN)b)c/\n\\= Expect no match\n    aabc\n\n/^.*? (?1) c (?(DEFINE)(a(*THEN)b))/x\n    aabc\n\n/^.*?(a(*THEN)b|z)c/\n    aabc\n\n/^.*?(z|a(*THEN)b)c/\n    aabc\n\n# These are here because they are not Perl-compatible; the studying means the\n# mark is not seen.\n\n/(*MARK:A)(*SKIP:B)(C|X)/mark\n    C\n\\= Expect no match\n    D\n\n/(*:A)A+(*SKIP:A)(B|Z)/mark\n\\= Expect no match\n    AAAC\n\n# ----------------------------\n\n\"(?=a*(*ACCEPT)b)c\"\n    c\n    c\\=notempty\n\n/(?1)c(?(DEFINE)((*ACCEPT)b))/\n    c\n    c\\=notempty\n\n/(?>(*ACCEPT)b)c/\n    c\n\\= Expect no match\n    c\\=notempty\n\n/(?:(?>(a)))+a%/allaftertext\n    %aa%\n\n/(a)b|ac/allaftertext\n    ac\\=ovector=1\n\n/(a)(b)x|abc/allaftertext\n     abc\\=ovector=2\n\n/(a)bc|(a)(b)\\2/\n    abc\\=ovector=1\n    abc\\=ovector=2\n    aba\\=ovector=1\n    aba\\=ovector=2\n    aba\\=ovector=3\n    aba\\=ovector=4\n\n/(?(DEFINE)(a(?2)|b)(b(?1)|a))(?:(?1)|(?2))/I\n\n/(a(?2)|b)(b(?1)|a)(?:(?1)|(?2))/I\n\n/(a(?2)|b)(b(?1)|a)(?1)(?2)/I\n\n/(abc)(?1)/I\n\n/(?:(foo)|(bar)|(baz))X/allcaptures\n    bazfooX\n    foobazbarX\n    barfooX\n    bazX\n    foobarbazX\n    bazfooX\\=ovector=0\n    bazfooX\\=ovector=1\n    bazfooX\\=ovector=2\n    bazfooX\\=ovector=3\n\n/(?=abc){3}abc/B\n\n/(?=abc)+abc/B\n\n/(?=abc)++abc/B\n\n/(?=abc){0}xyz/B\n\n/(?=(a))?./B\n\n/(?=(a))??./B\n\n/^(?=(a)){0}b(?1)/B\n\n/(?(DEFINE)(a))?b(?1)/B\n\n/^(?=(?1))?[az]([abc])d/B\n\n/^(?!a){0}\\w+/B\n\n/(?<=(abc))?xyz/B\n\n/[:a[:abc]b:]/B\n\n/^(a(*:A)(d|e(*:B))z|aeq)/auto_callout\n    adz\n    aez\n    aeqwerty\n\n/.(*F)/\n\\= Expect no match\n    abc\\=ph\n\n/\\btype\\b\\W*?\\btext\\b\\W*?\\bjavascript\\b/I\n\n/\\btype\\b\\W*?\\btext\\b\\W*?\\bjavascript\\b|\\burl\\b\\W*?\\bshell:|<input\\b.*?\\btype\\b\\W*?\\bimage\\b|\\bonkeyup\\b\\W*?\\=/I\n\n/a(*SKIP)c|b(*ACCEPT)|/I,aftertext\n    a\n\n/a(*SKIP)c|b(*ACCEPT)cd(*ACCEPT)|x/I\n    ax\n\n'a*(*ACCEPT)b'aftertext\n    abc\\=notempty_atstart\n    bbb\\=notempty_atstart\n\\= Expect no match\n    \\=notempty_atstart\n\n/(*ACCEPT)a/I,aftertext\n    bax\n\n/z(*ACCEPT)a/I,aftertext\n    baxzbx\n\n/^(?>a+)(?>(z+))\\w/B\n    aaaazzzzb\n\\= Expect no match\n    aazz\n\n/(.)(\\1|a(?2))/\n    bab\n\n/\\1|(.)(?R)\\1/\n    cbbbc\n\n/(.)((?(1)c|a)|a(?2))/\n\\= Expect no match\n    baa\n\n/(?P<abn>(?P=abn)xxx)/B\n\n/(a\\1z)/B\n\n#if !ebcdic\n\n/^a\\x41z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aAz\n\\= Expect no match\n    ax41z\n\n/^a[m\\x41]z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aAz\n\n/^a\\x1z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    ax1z\n\n/^a\\u0041z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aAz\n\\= Expect no match\n    au0041z\n\n/^a[m\\u0041]z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aAz\n\n/^a\\u041z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    au041z\n\\= Expect no match\n    aAz\n\n/^a\\U0041z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aU0041z\n\\= Expect no match\n    aAz\n    \n/^\\u{7a}/alt_bsux\n    u{7a}\n\\= Expect no match\n    zoo \n\n/^\\u{7a}/extra_alt_bsux\n    zoo \n\n#endif\n\n/\\u{}/extra_alt_bsux\n    u{}\n\n/\\u{Q12}/extra_alt_bsux\n    --u{Q12}--\n\n/\\u{ 12}/extra_alt_bsux\n    --u{ 12}--\n\n/\\u{{3}}/extra_alt_bsux\n    --u{{{}--\n\n/(?(?=c)c|d)++Y/B\n\n/(?(?=c)c|d)*+Y/B\n\n/a[\\NB]c/\n    aNc\n\n/a[B-\\Nc]/\n\n/a[B\\Nc]/\n\n/(a)(?2){0,1999}?(b)/\n\n/(a)(?(DEFINE)(b))(?2){0,1999}?(?2)/\n\n# This test, with something more complicated than individual letters, causes\n# different behaviour in Perl. Perhaps it disables some optimization; no tag is\n# passed back for the failures, whereas in PCRE2 there is a tag.\n\n/(A|P)(*:A)(B|P) | (X|P)(X|P)(*:B)(Y|P)/x,mark\n    AABC\n    XXYZ\n\\= Expect no match\n    XAQQ\n    XAQQXZZ\n    AXQQQ\n    AXXQQQ\n\n# Perl doesn't give marks for these, though it does if the alternatives are\n# replaced by single letters.\n\n/(b|q)(*:m)f|a(*:n)w/mark\n    aw\n\\= Expect no match\n    abc\n\n/(q|b)(*:m)f|a(*:n)w/mark\n    aw\n\\= Expect no match\n    abc\n\n# After a partial match, the behaviour is as for a failure.\n\n/^a(*:X)bcde/mark\n   abc\\=ps\n\n# These are here because Perl doesn't return a mark, except for the first.\n\n/(?=(*:x))(q|)/aftertext,mark\n    abc\n\n/(?=(*:x))((*:y)q|)/aftertext,mark\n    abc\n\n/(?=(*:x))(?:(*:y)q|)/aftertext,mark\n    abc\n\n/(?=(*:x))(?>(*:y)q|)/aftertext,mark\n    abc\n\n/(?=a(*:x))(?!a(*:y)c)/aftertext,mark\n    ab\n\n/(?=a(*:x))(?=a(*:y)c|)/aftertext,mark\n    ab\n\n/(..)\\1/\n    ab\\=ps\n    aba\\=ps\n    abab\\=ps\n\n/(..)\\1/i\n    ab\\=ps\n    abA\\=ps\n    aBAb\\=ps\n\n/(..)\\1{2,}/\n    ab\\=ps\n    aba\\=ps\n    abab\\=ps\n    ababa\\=ps\n    ababab\\=ps\n    ababab\\=ph\n    abababa\\=ps\n    abababa\\=ph\n\n/(..)\\1{2,}/i\n    ab\\=ps\n    aBa\\=ps\n    aBAb\\=ps\n    AbaBA\\=ps\n    abABAb\\=ps\n    aBAbaB\\=ph\n    abABabA\\=ps\n    abaBABa\\=ph\n\n/(..)\\1{2,}?x/i\n    ab\\=ps\n    abA\\=ps\n    aBAb\\=ps\n    abaBA\\=ps\n    abAbaB\\=ps\n    abaBabA\\=ps\n    abAbABaBx\\=ps\n\n/^(..)\\1/\n    aba\\=ps\n\n/^(..)\\1{2,3}x/\n    aba\\=ps\n    ababa\\=ps\n    ababa\\=ph\n    abababx\n    ababababx\n\n/^(..)\\1{2,3}?x/\n    aba\\=ps\n    ababa\\=ps\n    ababa\\=ph\n    abababx\n    ababababx\n\n/^(..)(\\1{2,3})ab/\n    abababab\n\n/^\\R/\n    \\r\\=ps\n    \\r\\=ph\n\n/^\\R{2,3}x/\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\r\\=ps\n    \\r\\r\\=ph\n    \\r\\r\\r\\=ps\n    \\r\\r\\r\\=ph\n    \\r\\rx\n    \\r\\r\\rx\n\n/^\\R{2,3}?x/\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\r\\=ps\n    \\r\\r\\=ph\n    \\r\\r\\r\\=ps\n    \\r\\r\\r\\=ph\n    \\r\\rx\n    \\r\\r\\rx\n\n/^\\R?x/\n    \\r\\=ps\n    \\r\\=ph\n    x\n    \\rx\n\n/^\\R+x/\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\n\\=ps\n    \\r\\n\\=ph\n    \\rx\n\n/^a$/newline=crlf\n    a\\r\\=ps\n    a\\r\\=ph\n\n/^a$/m,newline=crlf\n    a\\r\\=ps\n    a\\r\\=ph\n\n/^(a$|a\\r)/newline=crlf\n    a\\r\\=ps\n    a\\r\\=ph\n\n/^(a$|a\\r)/m,newline=crlf\n    a\\r\\=ps\n    a\\r\\=ph\n\n/./newline=crlf\n    \\r\\=ps\n    \\r\\=ph\n\n/.{2,3}/newline=crlf\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\r\\=ps\n    \\r\\r\\=ph\n    \\r\\r\\r\\=ps\n    \\r\\r\\r\\=ph\n\n/.{2,3}?/newline=crlf\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\r\\=ps\n    \\r\\r\\=ph\n    \\r\\r\\r\\=ps\n    \\r\\r\\r\\=ph\n\n\"AB(C(D))(E(F))?(?(?=\\2)(?=\\4))\"\n    ABCDGHI\\=ovector=01\n\n# These are all run as real matches in test 1; here we are just checking the\n# settings of the anchored and startline bits.\n\n/(?>.*?a)(?<=ba)/I\n\n/(?:.*?a)(?<=ba)/I\n\n/.*?a(*PRUNE)b/I\n\n/.*?a(*PRUNE)b/Is\n\n/^a(*PRUNE)b/Is\n\n/.*?a(*SKIP)b/I\n\n/(?>.*?a)b/Is\n\n/(?>.*?a)b/I\n\n/(?>^a)b/Is\n\n/(?>.*?)(?<=(abcd)|(wxyz))/I\n\n/(?>.*)(?<=(abcd)|(wxyz))/I\n\n\"(?>.*)foo\"I\n\n\"(?>.*?)foo\"I\n\n/(?>^abc)/Im\n\n/(?>.*abc)/Im\n\n/(?:.*abc)/Im\n\n/(?:(a)+(?C1)bb|aa(?C2)b)/\n    aab\\=callout_capture\n\n/(?:(a)++(?C1)bb|aa(?C2)b)/\n    aab\\=callout_capture\n\n/(?:(?>(a))(?C1)bb|aa(?C2)b)/\n    aab\\=callout_capture\n\n/(?:(?1)(?C1)x|ab(?C2))((a)){0}/\n    aab\\=callout_capture\n\n/(?1)(?C1)((a)(?C2)){0}/\n    aab\\=callout_capture\n\n/(?:(a)+(?C1)bb|aa(?C2)b)++/\n    aab\\=callout_capture\n    aab\\=callout_capture,ovector=1\n\n/(ab)x|ab/\n    ab\\=ovector=0\n    ab\\=ovector=1\n\n/(?<=123)(*MARK:xx)abc/mark\n    xxxx123a\\=ph\n    xxxx123a\\=ps\n\n/123\\Kabc/startchar\n    xxxx123a\\=ph\n    xxxx123a\\=ps\n\n/^(?(?=a)aa|bb)/auto_callout\n    bb\n\n/(?C1)^(?C2)(?(?C99)(?=(?C3)a(?C4))(?C5)a(?C6)a(?C7)|(?C8)b(?C9)b(?C10))(?C11)/\n    bb\n\n# Perl seems to have a bug with this one.\n\n/aaaaa(*COMMIT)(*PRUNE)b|a+c/\n    aaaaaac\n\n# Here are some that Perl treats differently because of the way it handles\n# backtracking verbs.\n\n/(?!a(*COMMIT)b)ac|ad/\n     ac\n     ad\n\n/^(?!a(*THEN)b|ac)../\n     ad\n\\= Expect no match\n     ac\n\n/^(?=a(*THEN)b|ac)/\n    ac\n\n/\\A.*?(?:a|b(*THEN)c)/\n    ba\n\n/\\A.*?(?:a|b(*THEN)c)++/\n    ba\n\n/\\A.*?(?:a|b(*THEN)c|d)/\n    ba\n\n/(?:(a(*MARK:X)a+(*SKIP:X)b)){0}(?:(?1)|aac)/\n    aac\n\n/\\A.*?(a|b(*THEN)c)/\n    ba\n\n/^(A(*THEN)B|A(*THEN)D)/\n    AD\n\n/(?!b(*THEN)a)bn|bnn/\n    bnn\n\n/(?(?=b(*SKIP)a)bn|bnn)/\n    bnn\n\n/(?=b(*THEN)a|)bn|bnn/\n    bnn\n\n# This test causes a segfault with Perl 5.18.0\n\n/^(?=(a)){0}b(?1)/\n    backgammon\n\n/(?|(?<n>f)|(?<n>b))/I,dupnames\n\n/(?<a>abc)(?<a>z)\\k<a>()/IB,dupnames\n\n/a*[bcd]/B\n\n/[bcd]*a/B\n\n# A complete set of tests for auto-possessification of character types, but\n# omitting \\C because it might be disabled (it has its own tests).\n\n/\\D+\\D \\D+\\d \\D+\\S \\D+\\s \\D+\\W \\D+\\w \\D+. \\D+\\R \\D+\\H \\D+\\h \\D+\\V \\D+\\v \\D+\\Z \\D+\\z \\D+$/Bx\n\n/\\d+\\D \\d+\\d \\d+\\S \\d+\\s \\d+\\W \\d+\\w \\d+. \\d+\\R \\d+\\H \\d+\\h \\d+\\V \\d+\\v \\d+\\Z \\d+\\z \\d+$/Bx\n\n/\\S+\\D \\S+\\d \\S+\\S \\S+\\s \\S+\\W \\S+\\w \\S+. \\S+\\R \\S+\\H \\S+\\h \\S+\\V \\S+\\v \\S+\\Z \\S+\\z \\S+$/Bx\n\n/\\s+\\D \\s+\\d \\s+\\S \\s+\\s \\s+\\W \\s+\\w \\s+. \\s+\\R \\s+\\H \\s+\\h \\s+\\V \\s+\\v \\s+\\Z \\s+\\z \\s+$/Bx\n\n/\\W+\\D \\W+\\d \\W+\\S \\W+\\s \\W+\\W \\W+\\w \\W+. \\W+\\R \\W+\\H \\W+\\h \\W+\\V \\W+\\v \\W+\\Z \\W+\\z \\W+$/Bx\n\n/\\w+\\D \\w+\\d \\w+\\S \\w+\\s \\w+\\W \\w+\\w \\w+. \\w+\\R \\w+\\H \\w+\\h \\w+\\V \\w+\\v \\w+\\Z \\w+\\z \\w+$/Bx\n\n/\\R+\\D \\R+\\d \\R+\\S \\R+\\s \\R+\\W \\R+\\w \\R+. \\R+\\R \\R+\\H \\R+\\h \\R+\\V \\R+\\v \\R+\\Z \\R+\\z \\R+$/Bx\n\n/\\H+\\D \\H+\\d \\H+\\S \\H+\\s \\H+\\W \\H+\\w \\H+. \\H+\\R \\H+\\H \\H+\\h \\H+\\V \\H+\\v \\H+\\Z \\H+\\z \\H+$/Bx\n\n/\\h+\\D \\h+\\d \\h+\\S \\h+\\s \\h+\\W \\h+\\w \\h+. \\h+\\R \\h+\\H \\h+\\h \\h+\\V \\h+\\v \\h+\\Z \\h+\\z \\h+$/Bx\n\n/\\V+\\D \\V+\\d \\V+\\S \\V+\\s \\V+\\W \\V+\\w \\V+. \\V+\\R \\V+\\H \\V+\\h \\V+\\V \\V+\\v \\V+\\Z \\V+\\z \\V+$/Bx\n\n/\\v+\\D \\v+\\d \\v+\\S \\v+\\s \\v+\\W \\v+\\w \\v+. \\v+\\R \\v+\\H \\v+\\h \\v+\\V \\v+\\v \\v+\\Z \\v+\\z \\v+$/Bx\n\n/ a+\\D  a+\\d  a+\\S  a+\\s  a+\\W  a+\\w  a+.  a+\\R  a+\\H  a+\\h  a+\\V  a+\\v  a+\\Z  a+\\z  a+$/Bx\n\n/\\n+\\D \\n+\\d \\n+\\S \\n+\\s \\n+\\W \\n+\\w \\n+. \\n+\\R \\n+\\H \\n+\\h \\n+\\V \\n+\\v \\n+\\Z \\n+\\z \\n+$/Bx\n\n/ .+\\D  .+\\d  .+\\S  .+\\s  .+\\W  .+\\w  .+.  .+\\R  .+\\H  .+\\h  .+\\V  .+\\v  .+\\Z  .+\\z  .+$/Bx\n\n/ .+\\D  .+\\d  .+\\S  .+\\s  .+\\W  .+\\w  .+.  .+\\R  .+\\H  .+\\h  .+\\V  .+\\v  .+\\Z  .+\\z  .+$/Bsx\n\n/ \\D+$  \\d+$  \\S+$  \\s+$  \\W+$  \\w+$  \\R+$  \\H+$  \\h+$  \\V+$ \\v+$  a+$   \\n+$  .+$  .+$/Bmx\n\n/(?=a+)a(a+)++a/B\n\n/a+(bb|cc)a+(?:bb|cc)a+(?>bb|cc)a+(?:bb|cc)+a+(aa)a+(?:bb|aa)/B\n\n/a+(bb|cc)?#a+(?:bb|cc)??#a+(?:bb|cc)?+#a+(?:bb|cc)*#a+(bb|cc)?a#a+(?:aa)?/B\n\n/a+(?:bb)?a#a+(?:|||)#a+(?:|b)a#a+(?:|||)?a/B\n\n/[ab]*/B\n    aaaa\n\n/[ab]*?/B\n    aaaa\n\n/[ab]?/B\n    aaaa\n\n/[ab]??/B\n    aaaa\n\n/[ab]+/B\n    aaaa\n\n/[ab]+?/B\n    aaaa\n\n/[ab]{2,3}/B\n    aaaa\n\n/[ab]{2,3}?/B\n    aaaa\n\n/[ab]{2,}/B\n    aaaa\n\n/[ab]{2,}?/B\n    aaaa\n\n/\\d+\\s{0,5}=\\s*\\S?=\\w{0,4}\\W*/B\n\n/[a-d]{5,12}[e-z0-9]*#[^a-z]+[b-y]*a[2-7]?[^0-9a-z]+/B\n\n/[a-z]*\\s#[ \\t]?\\S#[a-c]*\\S#[C-G]+?\\d#[4-8]*\\D#[4-9,]*\\D#[!$]{0,5}\\w#[M-Xf-l]+\\W#[a-c,]?\\W/B\n\n/a+(aa|bb)*c#a*(bb|cc)*a#a?(bb|cc)*d#[a-f]*(g|hh)*f/B\n\n/[a-f]*(g|hh|i)*i#[a-x]{4,}(y{0,6})*y#[a-k]+(ll|mm)+n/B\n\n/[a-f]*(?>gg|hh)+#[a-f]*(?>gg|hh)?#[a-f]*(?>gg|hh)*a#[a-f]*(?>gg|hh)*h/B\n\n/[a-c]*d/IB\n\n/[a-c]+d/IB\n\n/[a-c]?d/IB\n\n/[a-c]{4,6}d/IB\n\n/[a-c]{0,6}d/IB\n\n# End of special auto-possessive tests\n\n/^A\\o{1239}B/\n    A\\123B\n\n/^A\\oB/\n\n/^A\\x{zz}B/\n\n/^A\\x{12Z/\n\n/^A\\x{/\n\n/[ab]++/B,no_auto_possess\n\n/[^ab]*+/B,no_auto_possess\n\n/a{4}+/B,no_auto_possess\n\n/a{4}+/Bi,no_auto_possess\n\n/[a-[:digit:]]+/\n\n/[A-[:digit:]]+/\n\n/[a-[.xxx.]]+/\n\n/[a-[=xxx=]]+/\n\n#if !ebcdic\n\n/[a-[!xxx!]]+/\n\n/[A-[!xxx!]]+/\n    A]]]\n\n#endif\n\n/[a-\\d]+/\n\n/(?<0abc>xx)/\n\n/(?&1abc)xx(?<1abc>y)/\n\n/(?<ab-cd>xx)/\n\n/(?'0abc'xx)/\n\n/(?P<0abc>xx)/\n\n/\\k<5ghj>/\n\n/\\k'5ghj'/\n\n/\\k{2fgh}/\n\n/(?P=8yuki)/\n\n/\\g{4df}/\n\n/(?&1abc)xx(?<1abc>y)/\n\n/(?P>1abc)xx(?<1abc>y)/\n\n/\\g'3gh'/\n\n/\\g<5fg>/\n\n/(?(<4gh>)abc)/\n\n/(?('4gh')abc)/\n\n/(?(4gh)abc)/\n\n/(?(R&6yh)abc)/\n\n/(((a\\2)|(a*)\\g<-1>))*a?/B\n\n# Test the ugly \"start or end of word\" compatibility syntax.\n\n/[[:<:]]red[[:>:]]/B\n    little red riding hood\n    a /red/ thing\n    red is a colour\n    put it all on red\n\\= Expect no match\n    no reduction\n    Alfred Winifred\n\n/[[:<:]]+red/B\n    little red riding hood\n    red is a colour\n\\= Expect no match\n    Alfred\n\n/[a[:<:]] should give error/\n\n/(?=ab\\K)/aftertext,allow_lookaround_bsk\n    abcd\\=startchar\n\n/abcd/newline=lf,firstline\n\\= Expect no match\n    xx\\nxabcd\n\n# Test stack guard external calls.\n\n/(((a)))/stackguard=1\n\n/(((a)))/stackguard=2\n\n/(((a)))/stackguard=3\n\n/(((((a)))))/\n\n# End stack guard tests\n\n/^\\w+(?>\\s*)(?<=\\w)/B\n\n/\\othing/\n\n/\\o{}/\n\n/\\o{whatever}/\n\n/\\xthing/\n\n/^A\\xZ/\n\n/^A\\x/\n\n/\\x{}/\n\n/\\x{whatever}/\n\n/A\\8B/\n\n/A\\9B/\n\n# This one is here because Perl fails to match \"12\" for this pattern when the $\n# is present.\n\n/^(?(?=abc)\\w{3}:|\\d\\d)$/\n    abc:\n    12\n\\= Expect no match\n    123\n    xyz\n\n# Perl gets this one wrong, giving \"a\" as the after text for ca and failing to\n# match for cd.\n\n/(?(?=ab)ab)/aftertext\n    abxxx\n    ca\n    cd\n\n# This should test both paths for processing OP_RECURSE.\n\n/(?(R)a+|(?R)b)/\n    aaaabcde\n    aaaabcde\\=ovector=100\n\n/a*?b*?/\n    ab\n\n/(*NOTEMPTY)a*?b*?/\n    ab\n    ba\n    cb\n\n/(*NOTEMPTY_ATSTART)a*?b*?/aftertext\n    ab\n    cdab\n\n/(?(VERSION>=10.0)yes|no)/I\n    yesno\n\n/(?(VERSION>=10.04)yes|no)/\n    yesno\n\n/(?(VERSION=8)yes){3}/BI,aftertext\n    yesno\n\n/(?(VERSION=8)yes|no){3}/I\n    yesnononoyes\n\\= Expect no match\n    yesno\n\n/(?:(?<VERSION>abc)|xyz)(?(VERSION)yes|no)/I\n    abcyes\n    xyzno\n\\= Expect no match\n    abcno\n    xyzyes\n\n/(?(VERSION<10)yes|no)/\n\n/(?(VERSION>10)yes|no)/\n\n/(?(VERSION>=10.0.0)yes|no)/\n\n/(?(VERSION=10.101)yes|no)/\n\n/(?(VERSION=10z)yes|no)/\n\n# We should see the starting code unit, required code unit, and minimum length set for this regex:\n/abcd/I\n\n# None of the following three should have the starting code unit, required code unit, and minimum length set:\n/abcd/I,no_start_optimize\n\n/abcd/I,start_optimize_off\n\n/abcd/I,optimization_none\n\n/(|ab)*?d/I\n   abd\n   xyd\n\n/(|ab)*?d/I,no_start_optimize\n   abd\n   xyd\n\n/\\k<A>*(?<A>aa)(?<A>bb)/match_unset_backref,dupnames\n    aabb\n\n/(((((a)))))/parens_nest_limit=2\n\n/abc/replace=XYZ\n    123123\n    123abc123\n    123abc123abc123\n    123123\\=zero_terminate\n    123abc123\\=zero_terminate\n    123abc123abc123\\=zero_terminate\n\n/abc/g,replace=XYZ\n    123abc123\n    123abc123abc123\n\n/abc/replace=X$$Z\n    123abc123\n\n/abc/g,replace=X$$Z\n    123abc123abc123\n\n/a(b)c(d)e/replace=X$1Y${2}Z\n    \"abcde\"\n\n/a(b)c(d)e/replace=X$1Y${2}Z,global\n    \"abcde-abcde\"\n\n/a(?<ONE>b)c(?<TWO>d)e/replace=X$ONE+${TWO}Z\n    \"abcde\"\n\n/a(?<ONE>b)c(?<TWO>d)e/g,replace=X$ONE+${TWO}Z\n    \"abcde-abcde-\"\n\n/abc/replace=a$++\n    123abc\n\n/abc/replace=a$bad\n    123abc\n\n/abc/replace=a${A234567890123456789_123456789012}z\n    123abc\n\n/abc/replace=a${A23456789012345678901234567890123}z\n    123abc\n\n/abc/replace=a${bcd\n    123abc\n\n/abc/replace=a${b+d}z\n    123abc\n\n/abc/replace=[10]XYZ\n    123abc123\n\n/abc/replace=[9]XYZ\n    123abc123\n\n/abc/replace=xyz\n    1abc2\\=partial_hard\n\n/abc/replace=xyz\n    123abc456\n    123abc456\\=replace=pqr\n    123abc456abc789\n    123abc456abc789\\=g\n\n/(?<=abc)(|def)/g,replace=<$0>\n    123abcxyzabcdef789abcpqr\n\n/./replace=$0\n    a\n\n/(.)(.)/replace=$2+$1\n    abc\n\n/(?<A>.)(?<B>.)/replace=$B+$A\n    abc\n\n/(.)(.)/g,replace=$2$1\n    abcdefgh\n\n/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=${*MARK}\n    apple lemon blackberry\n    apple strudel\n    fruitless\n\n/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/replace=${*MARK} sauce,\n    apple lemon blackberry\n\n/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=<$*MARK>\n    apple lemon blackberry\n    apple strudel\n    fruitless\n\n/(*:pear)apple/g,replace=${*MARKING}\n    apple lemon blackberry\n\n/(*:pear)apple/g,replace=${*MARK-time\n    apple lemon blackberry\n\n/(*:pear)apple/g,replace=${*mark}\n    apple lemon blackberry\n\n/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=<$*MARKET>\n    apple lemon blackberry\n\n/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=[22]${*MARK}\n    apple lemon blackberry\n    apple lemon blackberry\\=substitute_overflow_length\n\n/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=[23]${*MARK}\n    apple lemon blackberry\n\n/\"(*:fruit\" 00 \"juice)apple\"/hex,g,replace=${*MARK}\n    apple lemon blackberry\n\n/abc/\n    123abc123\\=replace=XYZ\n    123abc123\\=replace=[10]XYZ\n\\= Expect error\n    123abc123\\=replace=[9]XYZ\n    123abc123\\=substitute_overflow_length,replace=[9]XYZ\n    123abc123\\=substitute_overflow_length,replace=[6]XYZ\n    123abc123\\=substitute_overflow_length,replace=[1]XYZ\n    123abc123\\=substitute_overflow_length,replace=[0]XYZ\n\n/abc/\n    123abc123\\=replace=XY\n    123abc123\\=replace=[9]XY\n    123abc123\\=replace=[9]XY,substitute_literal\n\\= Expect error\n    123abc123\\=replace=[8]XY,substitute_overflow_length\n    123abc123\\=replace=[8]XY,substitute_overflow_length,substitute_literal\n    123abc123\\=replace=[6]XY,substitute_overflow_length\n    123abc123\\=replace=[6]XY,substitute_overflow_length,substitute_literal\n    123abc123\\=replace=[5]XY,substitute_overflow_length\n    123abc123\\=replace=[5]XY,substitute_overflow_length,substitute_literal\n    123abc123\\=replace=[4]XY,substitute_overflow_length\n    123abc123\\=replace=[4]XY,substitute_overflow_length,substitute_literal\n    123abc123\\=replace=[3]XY,substitute_overflow_length\n    123abc123\\=replace=[3]XY,substitute_overflow_length,substitute_literal\n    123abc123\\=replace=[2]XY,substitute_overflow_length\n    123abc123\\=replace=[2]XY,substitute_overflow_length,substitute_literal\n\n/abc/substitute_literal\n    123abc123\\=replace=XYZ\n    123abc123\\=replace=[10]XYZ\n\\= Expect error\n    123abc123\\=replace=[9]XYZ\n    123abc123\\=substitute_overflow_length,replace=[9]XYZ\n    123abc123\\=substitute_overflow_length,replace=[6]XYZ\n    123abc123\\=substitute_overflow_length,replace=[1]XYZ\n    123abc123\\=substitute_overflow_length,replace=[0]XYZ\n\n/a(b)c/\n    123abc123\\=replace=[9]x$1z\n    123abc123\\=substitute_overflow_length,replace=[9]x$1z\n    123abc123\\=substitute_overflow_length,replace=[6]x$1z\n    123abc123\\=substitute_overflow_length,replace=[1]x$1z\n    123abc123\\=substitute_overflow_length,replace=[0]x$1z\n\n/a(b)c/substitute_extended\n    ZabcZ\\=replace=>\\1<\n    ZabcZ\\=replace=>\\2<\n    ZabcZ\\=replace=>\\8<\n    ZabcZ\\=replace=>${1}<\n    ZabcZ\\=replace=>${ 1 }<\n    ZabcZ\\=replace=>${2}<\n    ZabcZ\\=replace=>${8}<\n    ZabcZ\\=replace=>$<1><\n    ZabcZ\\=replace=>$< 1 ><\n    ZabcZ\\=replace=>$<2><\n    ZabcZ\\=replace=>$<8><\n    ZabcZ\\=replace=>\\g<-1><\n    ZabcZ\\=replace=>\\g<0><\n    ZabcZ\\=replace=>\\g<1><\n    ZabcZ\\=replace=>\\g< 1 ><\n    ZabcZ\\=replace=>\\g<2><\n    ZabcZ\\=replace=>\\g<8><\n\n/(*:pear)apple/substitute_extended\n    ZappleZ\\=replace=>${*MARK}<\n    ZappleZ\\=replace=>$<*MARK><\n    ZappleZ\\=replace=>\\g<*MARK><\n\n/a(?<named>b)c/substitute_extended\n    ZabcZ\\=replace=>${named}<\n    ZabcZ\\=replace=>${noexist}<\n    ZabcZ\\=replace=>${}<\n    ZabcZ\\=replace=>${ }<\n    ZabcZ\\=replace=>${ named }<\n    ZabcZ\\=replace=>$<named><\n    ZabcZ\\=replace=>$<noexist><\n    ZabcZ\\=replace=>$<><\n    ZabcZ\\=replace=>$< ><\n    ZabcZ\\=replace=>$< named ><\n    ZabcZ\\=replace=>\\g<named><\n    ZabcZ\\=replace=>\\g<noexist><\n    ZabcZ\\=replace=>\\g<><\n    ZabcZ\\=replace=>\\g< ><\n    ZabcZ\\=replace=>\\g< named ><\n\n/a(b)c/substitute_extended\n    ZabcZ\\=replace=>${1:+ yes : no }\n    ZabcZ\\=replace=>${1:+ \\o{Z} : no }\n    ZabcZ\\=replace=>${1:+ yes : \\o{Z} }\n    ZabcZ\\=replace=>${1:+ \\g<1> : no }\n    ZabcZ\\=replace=>${1:+ yes : \\g<1> }\n    ZabcZ\\=replace=>${1:+ \\g<1 : no }\n    ZabcZ\\=replace=>${1:+ yes : \\g<1 }\n    ZabcZ\\=replace=>${1:+ $<1> : no }\n    ZabcZ\\=replace=>${1:+ yes : $<1> }\n    ZabcZ\\=replace=>${1:+ $<1 : no }\n    ZabcZ\\=replace=>${1:+ yes : $<1 }\n\n#if !ebcdic\n\n/a(b)c/substitute_extended\n    ZabcZ\\=replace=>${1:+ \\o{100} : \\o{100} }\n\n#endif\n\n/a(b)c/substitute_extended\n    ZabcZ\\=replace=>${\n    ZabcZ\\=replace=>${1\n    ZabcZ\\=replace=>${1Z\n    ZabcZ\\=replace=>${1;\n    ZabcZ\\=replace=>$<\n    ZabcZ\\=replace=>$<1\n    ZabcZ\\=replace=>$<1Z\n    ZabcZ\\=replace=>$<1;\n    ZabcZ\\=replace=>\\g<\n    ZabcZ\\=replace=>\\g<1\n    ZabcZ\\=replace=>\\g<1Z\n    ZabcZ\\=replace=>\\g<1;\n\n\"((?=(?(?=(?(?=(?(?=()))))))))\"\n    a\n\n\"(?(?=)==)(((((((((?=)))))))))\"\n\\= Expect no match\n    a\n\n/(a)(b)|(c)/\n    XcX\\=ovector=2,get=1,get=2,get=3,get=4,getall\n\n/x(?=ab\\K)/allow_lookaround_bsk\n    xab\\=get=0\n    xab\\=copy=0\n    xab\\=getall\n\n/(?<A>a)|(?<A>b)/dupnames\n    a\\=ovector=1,copy=A,get=A,get=2\n    a\\=ovector=2,copy=A,get=A,get=2\n    b\\=ovector=2,copy=A,get=A,get=2\n\n/a(b)c(d)/\n    abc\\=ph,copy=0,copy=1,getall\n\n/^abc/info\n\n/^abc/info,no_dotstar_anchor\n\n/^abc/info,dotstar_anchor_off\n\n# For comparison with the following tests, which disable automatic dotstar anchoring\n/.*abc/BI\n\n/.*abc/BI,dotstar_anchor_off\n\n/.*abc/BI,start_optimize_off\n\n/.*abc/BI,optimization_none\n\n/.*abc/BI,no_dotstar_anchor\n\n/.*\\d/info,auto_callout\n\\= Expect no match\n    aaa\n\n/.*\\d/info,no_dotstar_anchor,auto_callout\n\\= Expect no match\n    aaa\n\n/.*\\d/dotall,info\n\n/.*\\d/dotall,no_dotstar_anchor,info\n\n/(*NO_DOTSTAR_ANCHOR)(?s).*\\d/info\n\n'^(?:(a)|b)(?(1)A|B)'\n    aA123\\=ovector=1\n    aA123\\=ovector=2\n\n'^(?:(?<AA>a)|b)(?(<AA>)A|B)'\n    aA123\\=ovector=1\n    aA123\\=ovector=2\n\n'^(?<AA>)(?:(?<AA>a)|b)(?(<AA>)A|B)'dupnames\n    aA123\\=ovector=1\n    aA123\\=ovector=2\n    aA123\\=ovector=3\n\n'^(?:(?<AA>X)|)(?:(?<AA>a)|b)\\k{AA}'dupnames\n    aa123\\=ovector=1\n    aa123\\=ovector=2\n    aa123\\=ovector=3\n\n/(?<N111>(?J)(?<N111>1(111111)11|)1|1|)(?(<N111>)1)/\n\n/(?<N>(?J)(?<N>))(?-J)\\k<N>/\n\n# Quantifiers are not allowed on condition assertions, but are otherwise\n# OK in conditions.\n\n/(?(?=0)?)+/\n\n/(?(?=0)(?=00)?00765)/\n     00765\n\n/(?(?=0)(?=00)?00765|(?!3).56)/\n     00765\n     456\n\\= Expect no match\n     356\n\n'^(a)*+(\\w)'\n    g\n    g\\=ovector=1\n\n'^(?:a)*+(\\w)'\n    g\n    g\\=ovector=1\n\n# These two pattern showeds up compile-time bugs\n\n\"((?2){0,1999}())?\"\n\n/((?+1)(\\1))/B\n\n# Callouts with string arguments\n\n/a(?C\"/\n\n/a(?C\"a/\n\n/a(?C\"a\"/\n\n/a(?C\"a\"bcde(?C\"b\")xyz/\n\n/a(?C\"a)b\"\"c\")/B\n\n/ab(?C\" any text with spaces \")cde/B\n    abcde\n    12abcde\n\n/^a(b)c(?C1)def/\n      abcdef\n\n/^a(b)c(?C\"AB\")def/\n      abcdef\n\n/^a(b)c(?C1)def/\n      abcdef\\=callout_capture\n\n/^a(b)c(?C{AB})def/B\n      abcdef\\=callout_capture\n\n/(?C`a``b`)(?C'a''b')(?C\"a\"\"b\")(?C^a^^b^)(?C%a%%b%)(?C#a##b#)(?C$a$$b$)(?C{a}}b})/B,callout_info\n\n/(?:a(?C`code`)){3}/B\n\n/^(?(?C25)(?=abc)abcd|xyz)/B,callout_info\n    abcdefg\n    xyz123\n\n/^(?(?C$abc$)(?=abc)abcd|xyz)/B\n    abcdefg\n    xyz123\n\n/^ab(?C'first')cd(?C\"second\")ef/\n    abcdefg\n\n/(?:a(?C`code`)){3}X/\n    aaaXY\n\n# Binary zero in callout string\n#  a  (  ?  C  '  x     z  '  )  b\n/ 61 28 3f 43 27 78 00 7a 27 29 62/hex,callout_info\n    abcdefgh\n\n/(?(?!)^)/\n\n/(?(?!)a|b)/\n    bbb\n\\= Expect no match\n    aaa\n\n# JIT gives a different error message for the infinite recursion\n\n\"(*NO_JIT)((?2)+)((?1)){\"\n    abcd{\n\n# Perl fails to diagnose the absence of an assertion\n\n\"(?(?<E>.*!.*)?)\"\n\n\"X((?2)()*+){2}+\"B\n\n\"X((?2)()*+){2}\"B\n\n/(?<=\\bABQ(3(?-7)))/\n\n/(?<=\\bABQ(3(?+7)))/\n\n\";(?<=()((?3))((?2)))\"\n\n# Perl loops on this (PCRE2 used to!)\n\n# duplicate matches\n/(?<=\\Ka)/g,aftertext,allow_lookaround_bsk\n    aaaaa\n\n/(?<=\\Ka)/altglobal,aftertext,allow_lookaround_bsk\n    aaaaa\n\n# overlapping matches\n/(?(?=\\Gc)(?<=\\Kb)c|(?<=\\Kab))/g,aftertext,allow_lookaround_bsk\n    abc\n\n# not-sorted matches\n/(?(?=\\Gc)(?<=\\Kab)|(?<=\\Kb))/g,aftertext,allow_lookaround_bsk\n    abc\n\n# CRLF cases\n\n/(?<=\\Kback)|\\Gstart/g,aftertext,allow_lookaround_bsk,newline=LF\n    back\\rstart back\\nstart back\\r\\nstart back\\r\n\n/(?<=\\Kback)|\\Gstart/g,aftertext,allow_lookaround_bsk,newline=CRLF\n    back\\rstart back\\nstart back\\r\\nstart back\\r\n\n/(?<=\\Kback)|\\Gstart/g,aftertext,allow_lookaround_bsk,newline=ANYCRLF\n    back\\rstart back\\nstart back\\r\\nstart back\\r\n\n/(?<=\\Kback)|\\Gstart/g,aftertext,allow_lookaround_bsk,newline=ANY\n    back\\rstart back\\nstart back\\r\\nstart back\\r\n\n/((?2){73}(?2))((?1))/info\n\n/abc/\n\\= Expect no match\n    \\[9x!xxx(]{9999}\n\n/(abc)*/\n    \\[abc]{5}\n\n/(abc)*/\n    \\[abc]{1}\n\n/(abc)*/\n    \\[abc]{0}\n\n/^/gm\n    \\n\\n\\n\n\n/^/gm,alt_circumflex\n    \\n\\n\\n\n\n/((((((((x))))))))\\81/\n    xx1\n\n/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((x))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\\80/\n    xx\n\n/\\80/\n\n/A\\8B\\9C/\n    A8B9C\n\n/(?x:((?'a')) # comment (with parentheses) and | vertical\n(?-x:#not a comment (?'b')) # this is a comment ()\n(?'c')) # not a comment (?'d')/info\n\n/(?|(?'a')(2)(?'b')|(?'a')(?'a')(3))/I,dupnames\n    A23B\n    B32A\n\n# These are some patterns that used to cause buffer overflows or other errors\n# while compiling.\n\n/.((?2)(?R)|\\1|$)()/B\n\n/.((?3)(?R)()(?2)|\\1|$)()/B\n\n/(\\9*+(?2);\\3++()2|)++{/\n\n/\\V\\x85\\9*+((?2)\\3++()2)*:2/\n\n/(((?(R)){0,2}) (?'x'((?'R')((?'R')))))/dupnames\n\n/(((?(X)){0,2}) (?'x'((?'X')((?'X')))))/dupnames\n\n/(((?(R)){0,2}) (?'x'((?'X')((?'R')))))/\n\n\"(?J)(?'d'(?'d'\\g{d}))\"\n\n\"(?=!((?2)(?))({8(?<=(?1){29}8bbbb\\x16\\xd\\xc6^($(\\xa9H4){4}h}?1)B))\\x15')\"\n\n/A(?'')Z/\n\n\"(?J:(?|(?'R')(\\k'R')|((?'R'))))\"\n\n/(?<=|(\\,\\$(?73591620449005828816)\\xa8.{7}){6}\\x09)/\n\n/^(?:(?(1)x|)+)+$()/B\n\n/[[:>:]](?<)/\n\n/((?x)(*:0))#(?'/\n\n/(?C$[$)(?<]/\n\n/(?C$)$)(?<]/\n\n/(?(R))*+/B\n    abcd\n\n/((?x)(?#))#(?'/\n\n/((?x)(?#))#(?'abc')/I\n\n/[[:\\\\](?<[::]/\n\n/[[:\\\\](?'abc')[a:]/I\n\n\"[[[.\\xe8Nq\\xffq\\xff\\xe0\\x2|||::Nq\\xffq\\xff\\xe0\\x6\\x2|||::[[[:[::::::[[[[[::::::::[:[[[:[:::[[[[[[[[[[[[:::::::::::::::::[[.\\xe8Nq\\xffq\\xff\\xe0\\x2|||::Nq\\xffq\\xff\\xe0\\x6\\x2|||::[[[:[::::::[[[[[::::::::[:[[[:[:::[[[[[[[[[[[[[[:::E[[[:[:[[:[:::[[:::E[[[:[:[[:'[:::::E[[[:[::::::[[[:[[[[[[[::E[[[:[::::::[[[:[[[[[[[[:[[::[::::[[:::::::[[:[[[[[[[:[[::[:[[:[~\"\n\n/()(?(R)0)*+/B\n\n/(?R-:(?</\n\n/(?R-:(?<)/\n\n/(?(?C{\\Q})(?!(?'/\n\n/(?(?C{\\Q})(?!(?'abc')))/I\n\n/(?1){3918}(((((0(\\k'R'))))(?J)(?'R'(?'R'\\3){99})))/I\n\n/(?|(aaa)|(b))\\g{1}/I\n\n/(?|(aaa)|(b))(?1)/I\n\n/(?|(aaa)|(b))/I\n\n/(?|(?'a'aaa)|(?'a'b))\\k'a'/I\n\n/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\\k'a'/I,dupnames\n\n/ab{3cd/\n    ab{3cd\n\n/ab{3,cd/\n    ab{3,cd\n\n/ab{3,4a}cd/\n    ab{3,4a}cd\n\n/{4,5a}bc/\n    {4,5a}bc\n\n/\\x0{ab}/\n    \\0{ab}\n\n/^(a(b))\\1\\g1\\g{1}\\g-1\\g{-1}\\g{-02}Z/\n    ababababbbabZXXXX\n\n/.*?a(*PRUNE)b/\n    aab\n\n/.*?a(*PRUNE)b/s\n    aab\n\n/^a(*PRUNE)b/s\n\\= Expect no match\n    aab\n\n/.*?a(*SKIP)b/\n    aab\n\n/(?(8000000000/\n\n/((?(R8000000000)))/\n\n/0(?0)|(1)(*THEN)(*SKIP:0)(*FAIL)/\n\\= Expect no match\n    01\n\n/(?(1)()\\983040\\2)/\n\n/(*LIMIT_MATCH=)abc/\n\n/(*CRLF)(*LIMIT_MATCH=)abc/\n\n/(?:ab)?(?:ab)(?:ab)/\n    abab\n    ababab\n\\= Expect no match\n    aba\n\n/((*MARK:A))++a(*SKIP:B)b/\n\\= Expect no match\n    aacb\n\n/(^aa(*MARK:X)a(*SKIP:X)c|(?!^)a+b)/g\n    aaab\n\n/(^aa(*MARK:X)a(*SKIP:Y)c|(?!^)a+b)/g\n    aaab\n\n/(^aa(*MARK:Y)a(*SKIP:X)c|(?!^)a+b)/g\n    aaab\n\n/(^aa(*MARK:X)a(*SKIP:XX)c|(?!^)a+b)/g\n    aaab\n\n/(^aa(*MARK:XX)a(*SKIP:X)c|(?!^)a+b)/g\n    aaab\n\n/(*MARK:a\\zb)z/alt_verbnames\n\n/(*:ab\\t(d\\)c)xxx/\n\n/(*:ab\\t(d\\)c)xxx/alt_verbnames,mark\n    cxxxz\n\n/(*:A\\Qxx)x\\EB)x/alt_verbnames,mark\n    x\n\n/(*:A\\ExxxB)x/alt_verbnames,mark\n    x\n\n/(*: A \\ and #comment\n     \\ B)x/x,alt_verbnames,mark\n    x\n\n/(*: A \\ and #comment\n     \\ B)x/alt_verbnames,mark\n    x\n\n/(*: A \\ and #comment\n     \\ B)x/x,mark\n    x\n\n/(*: A \\ and #comment\n     \\ B)x/mark\n    x\n\n/(*:A\nB)x/alt_verbnames,mark\n    x\n\n/(*:abc\\Qpqr)/alt_verbnames\n\n/abc/use_offset_limit\n    1234abcde\\=offset_limit=100\n    1234abcde\\=offset_limit=9\n    1234abcde\\=offset_limit=4\n    1234abcde\\=offset_limit=4,offset=4\n\\= Expect no match\n    1234abcde\\=offset_limit=4,offset=5\n    1234abcde\\=offset_limit=3\n\n/(?<=abc)/use_offset_limit\n    1234abc\\=offset_limit=7\n\\= Expect no match\n    1234abc\\=offset_limit=6\n\n/A/g,replace=-,use_offset_limit\n    XAXAXAXAXA\\=offset_limit=4\n\n/abc/\n\\= Expect error\n    1234abcde\\=offset_limit=4\n\n/^\\w/m,use_offset_limit\n    \\n..\\naa\\=offset_limit=3\n    \\n..\\naa\\=offset_limit=4\n\n/abcd/null_context\n    abcd\\=null_context\n\\= Expect not allowed together\n    abcd\\=null_context,find_limits\n    abcd\\=allusedtext,startchar\n\n#if !ebcdic\n\n/abcd/replace=w\\rx\\x82y\\o{333}z(\\Q12\\$34$$\\x34\\E5$$),substitute_extended\n    abcd\n\n/abcd/replace=w\\rx\\x82y\\o{333}z(\\Q12\\$34$$\\x34\\E5$$),substitute_extended,substitute_literal\n    >>abcd<<\n\n#endif\n    \n/abcd/g,replace=\\$1$2\\,substitute_literal\n    XabcdYabcdZ\n\n/a(bc)(DE)/replace=a\\u$1\\U$1\\E$1\\l$2\\L$2\\Eab\\Uab\\LYZ\\EDone,substitute_extended\n    abcDE\n\n/(Hello)|wORLD/g,replace=>${1:+\\l\\U$0:\\u\\L$0}<,substitute_extended\n    Hello between wORLD\n\n/abcd/replace=xy\\kz,substitute_extended\n    abcd\n\n/a(?:(b)|(c))/substitute_extended,replace=X${1:+1:-1}X${2:+2:-2}\n    ab\n    ac\n    ab\\=replace=${1:+$1\\:$1:$2}\n    ac\\=replace=${1:+$1\\:$1:$2}\n    >>ac<<\\=replace=${1:+$1\\:$1:$2},substitute_literal\n\n/a(?:(b)|(c))/substitute_extended,replace=X${1:-1:-1}X${2:-2:-2}\n    ab\n    ac\n\n/(a)/substitute_extended,replace=>${1:+\\Q$1:{}$$\\E+\\U$1}<\n    a\n\n/X(b)Y/substitute_extended\n    XbY\\=replace=x${1:+$1\\U$1}y\n    XbY\\=replace=\\Ux${1:+$1$1}y\n\n/a/substitute_extended,replace=${*MARK:+a:b}\n    a\n\n/(abcd)/replace=${1:+xy\\kz},substitute_extended\n    abcd\n\n/(abcd)/\n    abcd\\=replace=${1:+xy\\kz},substitute_extended\n\n/abcd/substitute_extended,replace=>$1<\n    abcd\n\n/abcd/substitute_extended,replace=>xxx${xyz}<<<\n    abcd\n\n/(?J)(?:(?<A>a)|(?<A>b))/replace=<$A>\n    [a]\n    [b]\n\\= Expect error\n    (a)\\=ovector=1\n\n/(a)|(b)/replace=<$1>\n\\= Expect error\n    b\n\n/(aa)(BB)/substitute_extended,replace=\\U$1\\L$2\\E$1..\\U$1\\l$2$1\n    aaBB\n    \n/abcd/replace=wxyz,substitute_matched\n    abcd\n    pqrs \n\n/abcd/g\n    >abcd1234abcd5678<\\=replace=wxyz,substitute_matched\n\n#if !ebcdic\n\n/abc/substitute_extended,replace=>\\045<\n    abc\n\n/abc/substitute_extended,replace=>\\45<\n    abc\n\n/abc/substitute_extended,replace=>\\o{45}<\n    abc\n\n#endif\n\n/abc/substitute_extended,replace=>\\845<\n    abc\n\n/a(b)(c)/substitute_extended,replace=>\\1<\n    abc\n\n/a(b)(c)/substitute_extended,replace=>\\2<\n    abc\n\n/a(b)(c)/substitute_extended,replace=>\\3<\n    abc\n\n/a(?<namED_1>b)c/substitute_extended\n    abc\\=replace=>${namED_1}<\n\n/a(?<namedverylongbutperfectlylegalsoyoushouldnthaveaproblem_1>b)c/substitute_extended\n    abc\\=replace=>${namedverylongbutperfectlylegalsoyoushouldnthaveaproblem_1}<\n\n/abc/substitute_extended\n    abc\\=replace=\\a\\b\\e\\f\\n\\r\\t\\v\\\\\n\n/a(b)c/\n    LabcR\\=replace=>$&<\n    LabcR\\=replace=>$`<\n    LabcR\\=replace=>$'<\n    LabcR\\=replace=>$_<\n\n/A(.)|B(.)/\n    AMZ\\=replace=>$+<\n    BMZ\\=replace=>$+<\n    AMZ\\=replace=>$+\n    AMZ\\=replace=>$+{name}\n    BMZ\\=ovector=2\n    BMZ\\=ovector=3\n    BMZ\\=ovector=2,replace=>$+<\n    BMZ\\=ovector=3,replace=>$+<\n    BMZ\\=ovector=2,substitute_matched,replace=>$+<\n    BMZ\\=ovector=3,substitute_matched,replace=>$+<\n\n/A|(B)/\n    B\\=replace=>$1<\n    A\\=replace=>$1<\n    B\\=substitute_unset_empty,replace=>$1<\n    A\\=substitute_unset_empty,replace=>$1<\n    B\\=replace=>$+<\n    A\\=replace=>$+<\n    B\\=substitute_unset_empty,replace=>$+<\n    A\\=substitute_unset_empty,replace=>$+<\n\n/ABC/\n    ABC\\=replace=$+z\n    ABC\\=substitute_unknown_unset,replace=$+z\n    ABC\\=substitute_unset_empty,replace=$+z\n    ABC\\=substitute_unknown_unset,substitute_unset_empty,replace=$+z\n\n/^(o(\\1{72}{\\\"{\\\\{00000059079}\\d*){74}}){19}/I\n\n/((p(?'K/\n\n/((p(?'K/no_auto_capture\n\n/abc/replace=A$3123456789Z\n    abc\n\n/(?<!a{65535}a{5})x/I\n\n/(?<!a{65535})x/I\n\n/(?=a\\K)/replace=z,allow_lookaround_bsk\n    BaCaD\n    \n/(?<=\\K.)/g,replace=-,allow_lookaround_bsk\n    ab\n\n/(?'abcdefghijklmnopqrstuvwxyzABCDEFGabcdefghijklmnopqrstuvwxyzABCDEabcdefghijklmnopqrstuvwxyzABCDEabcdefghijklmnopqrstuvwxyzABCDEFGH'toolong)/\n\n/(?'abcdefghijklmnopqrstuvwxyzABCDEFGabcdefghijklmnopqrstuvwxyzABCDEabcdefghijklmnopqrstuvwxyzABCDEabcdefghijklmnopqrstuvwxyzABCDEFG'justright)/\n\n# These two use zero-termination\n/abcd/max_pattern_length=3\n\n/abc/max_pattern_length=3\n\n# These two, being hex, pass the length\n/abcdefab/hex,max_pattern_length=3\n\n/abcdef/hex,max_pattern_length=3\n\n# Test compiled length limit\n/(abcdefg){10}/max_pattern_compiled_length=100\n\n# These patterns used to take a long time to compile\n\n\"(.*)\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\"xI\n\n\"(?<=a()\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\na)\"xI\n\n\"(?|()|())(.*)\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\"xI\n\n\"(?|()|())(?<=a()\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\na)\"xI\n\n# Test the use of malloc for caching group information when there are more\n# groups than fit into the on-stack workspace.\n\n/\\[()]{1024}/I,expand\n\n# Test minlength capped at 65535\n\n/(A{65000})\\1{65000}/I\n\n# Test group scans when numbers are not unique\n\n/(?|()+|(a)+)/BI\n\n/(?|(a)+|()+)/BI\n\n/(?|()|(a))/BI\n\n/(?|(a)|())/BI\n\n# Test CRLF handling in empty string substitutions\n\n/^$/gm,newline=anycrlf,replace=-\n    X\\r\\n\\r\\nY\n\n/^$/gm,newline=crlf,replace=-\n    X\\r\\n\\r\\nY\n\n/^$/gm,newline=any,replace=-\n    X\\r\\n\\r\\nY\n\n\"(*ANYCRLF)(?m)^(.*[^0-9\\r\\n].*|)$\"g,replace=NaN\n    15\\r\\nfoo\\r\\n20\\r\\nbar\\r\\nbaz\\r\\n\\r\\n20\n\n/a[[:punct:]b]/bincode\n\n/a[b[:punct:]]/bincode\n\n/L(?#(|++<!(2)?/B\n\n/L(?#(|++<!(2)?/B,no_auto_possess\n\n/L(?#(|++<!(2)?/B,auto_callout\n\n/L(?#(|++<!(2)?/B,no_auto_possess,auto_callout\n\n/(A*)\\E+/B,auto_callout\n\n/()\\Q\\E*]/B,auto_callout\n    a[bc]d\n\n#if !ebcdic\n\n/\\x8a+f|;T?(*:;.'?`(\\xeap ){![^()!y*''C*(?';]{1;(\\x08)/B,alt_verbnames,dupnames,extended\n\n#endif\n\n# Tests for NULL characters in comments and verb \"names\" and callouts\n\n# /A#B\\x00C\\x0aZ/\n/41 23 42 00 43 0a 5a/Bx,hex\n\n# /A+#B\\x00C\\x0a+/\n/41 2b 23 42 00 43 0a 2b/Bx,hex\n\n# /A(*:B\\x00W#X\\00Y\\x0aC)Z/\n/41 28 2a 3a 42 00 57 23 58 00 59 0a 43 29 5a/Bx,hex,alt_verbnames\n\n# /A(*:B\\x00W#X\\00Y\\x0aC)Z/\n/41 28 2a 3a 42 00 57 23 58 00 59 0a 43 29 5a/Bx,hex\n\n# /A(?C{X\\x00Y})B/\n/41 28 3f 43 7b 58 00 59 7d 29 42/B,hex\n\n# /A(?#X\\x00Y)B/\n/41 28 3f 23 7b 00 7d 29 42/B,hex\n\n# Tests for leading comment in extended patterns\n\n/ (?-x):?/extended\n\n/\u000b(?-x):?/extended\n\n/0b 28 3f 2d 78 29 3a/hex,extended\n\n/#comment\n(?-x):?/extended\n\n/(8(*:6^\\x09x\\xa6l\\)6!|\\xd0:[^:|)\\x09d\\Z\\d{85*m(?'(?<1!)*\\W[*\\xff]!!h\\w]*\\xbe;/alt_bsux,alt_verbnames,allow_empty_class,dollar_endonly,extended,multiline,never_utf,no_dotstar_anchor,no_start_optimize\n\n/a|(b)c/replace=>$1<,substitute_unset_empty\n    cat\n    xbcom\n\n/a|(b)c/\n    cat\\=replace=>$1<\n    cat\\=replace=>$1<,substitute_unset_empty\n    xbcom\\=replace=>$1<,substitute_unset_empty\n\n/a|(b)c/substitute_extended\n    cat\\=replace=>${2:-xx}<\n    cat\\=replace=>${2:-xx}<,substitute_unknown_unset\n    cat\\=replace=>${X:-xx}<,substitute_unknown_unset\n\n/a|(?'X'b)c/replace=>$X<,substitute_unset_empty\n    cat\n    xbcom\n\n/a|(?'X'b)c/replace=>$Y<,substitute_unset_empty\n    cat\n    cat\\=substitute_unknown_unset\n    cat\\=substitute_unknown_unset,-substitute_unset_empty\n\n/a|(b)c/replace=>$2<,substitute_unset_empty\n    cat\n    cat\\=substitute_unknown_unset\n    cat\\=substitute_unknown_unset,-substitute_unset_empty\n\n/()()()/use_offset_limit\n    \\=ovector=11000000000\n    \\=callout_fail=11000000000\n    \\=callout_fail=1:11000000000\n    \\=callout_data=11000000000\n    \\=callout_data=-11000000000\n    \\=offset_limit=1100000000000000000000\n    \\=copy=11000000000\n\n/(*MARK:A\\x00b)/mark\n    abc\n\n/(*MARK:A\\x00b)/mark,alt_verbnames\n    abc\n\n/\"(*MARK:A\" 00 \"b)\"/mark,hex\n    abc\n\n/\"(*MARK:A\" 00 \"b)\"/mark,hex,alt_verbnames\n    abc\n\n/efg/hex\n\n/eff/hex\n\n/effg/hex\n\n/(?J)(?'a'))(?'a')/\n\n/(?<=((?C)0))/\n    9010\n\\= Expect no match\n    abc\n\n/aaa/\n\\[abc]{10000000000000000000000000000}\n\\[a]{3}\n\n/\\[AB]{6000000000000000000000}/expand\n\n# Hex uses pattern length, not zero-terminated. This tests for overrunning\n# the given length of a pattern.\n\n/'(*U'/hex\n\n/'(*'/hex\n\n/'('/hex\n\n//hex\n\n# These tests are here because Perl never allows a back reference in a\n# lookbehind. PCRE2 supports some limited cases.\n\n/([ab])...(?<=\\1)z/\n    a11az\n    b11bz\n\\= Expect no match\n    b11az\n\n/(?|([ab]))...(?<=\\1)z/\n\n/([ab])(\\1)...(?<=\\2)z/\n    aa11az\n\n/(a\\2)(b\\1)(?<=\\2)/\n\n/(?<A>[ab])...(?<=\\k'A')z/\n    a11az\n    b11bz\n\\= Expect no match\n    b11az\n\n/(?<A>[ab])...(?<=\\k'A')(?<A>)z/dupnames\n\n# Perl does not support \\g+n\n\n/((\\g+1X)?([ab]))+/\n    aaXbbXa\n\n/ab(?C1)c/auto_callout\n    abc\n\n/'ab(?C1)c'/hex,auto_callout\n    abc\n\n# Perl accepts these, but gives a warning. We can't warn, so give an error.\n\n/[a-[:digit:]]+/\n    a-a9-a\n\n/[A-[:digit:]]+/\n    A-A9-A\n\n/[a-\\d]+/\n    a-a9-a\n\n/(?<RA>abc)(?(R)xyz)/B\n\n/(?<R>abc)(?(R)xyz)/B\n\n/(?=.*[A-Z])/I\n\n/()(?<=(?0))/\n\n/(?<!|!(?<!))/\n\n/(?<!|!|!||||||(?<!)||(?<!)!|!||(?<!)!|!(?<!)!|!|!|!||||!!|<!)!|!||||!|/\n\n/{2,2{2,2/use_length\n\n/.>*?\\g'0/use_length\n\n/.>*?\\g'0/\n\n/{̈́̈́{'{22{2{{2{'{22{\u0012{22{2{'{22{2{{2{{222{{2{'{22{2{22{2{'{22{2{{2{'{22{2{22{2{'{'{22{2{22{2{'{22{2{{2{'{22{2{22{2{'{222{2Ą̈́̈́{'{22{2{{2{'{22{\u0012{11{2{'{22{2{{2{{'{22{2{{2{'{22{\u0012{22{1{'{22{2{{2{{222{{2{'{22{2{22{2{'{/auto_callout\n\n//\n\\=get=i00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\\=get=i2345678901234567890123456789012,get=i1245678901234567890123456789012\n\n\"(?(?C))\"\n\n/(?(?(?(?(?(?))))))/\n\n/(?<=(?1))((?s))/anchored\n\n/(*:ab)*/\n\n%(*:\u001e(:\u0011(\u001fsvvvvvvvvvv:]*[   Z!*;[]*[^[]*!^[\u0019+.+{{2,7}'      _\\\\\\\\\\\\\\\\\\\\\\\\\\)?.:..    *w////\\\\\\Q\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\T\\\\\\\\\\+/?/////'+\\\\\\EEE?/////'+/*+/[^K]?]//(w)%never_backslash_c,alt_verbnames,auto_callout\n\n/./newline=crlf\n    \\=ph\n\n/(\\x0e00\\000000\\xc)/replace=\\P,substitute_extended\n    \\x0e00\\000000\\xc\n\n//replace=0\n    \\=offset=7\n\n/(?<=\\G.)/g,replace=+\n    abc\n\n\".+\\QX\\E+\"B,no_auto_possess\n\n\".+\\QX\\E+\"B,auto_callout,no_auto_possess\n\n# This one is here because Perl gives an 'unmatched )' error which goes away\n# if one of the \\) sequences is removed - which is weird. PCRE finds it too\n# complicated to find a minimum matching length.\n\n\"()X|((((((((()))))))((((())))))\\2())((((((\\2\\2)))\\2)(\\22((((\\2\\2)2))\\2)))(2\\ZZZ)+:)Z^|91ZiZZnter(ZZ |91Z(ZZ ZZ(\\r2Z( or#(\\Z2(Z\\Z(\\2\\2)2))\\2Z)Z(\\22Z((\\Z2(Z\\Z(\\2\\2)2))\\2Z+:)Z|91Z(ZZ ZZ(\\r2Z( or#(\\Z2(Z\\Z((Z*(\\2(Z\\':))\\0)i|||||||||||||||loZ\\2\\2)2))\\2Z)Z(\\22Z((\\Z2(Z\\Z(\\2\\2)2))\\2Z)))int \\)\\0nte!rnal errpr\\2\\\\21r(2\\ZZZ)+:)Z!|91Z(ZZ ZZ(\\r2Z( or#(\\Z2(Z\\Z(\\2\\2)2))\\2Z)Z(\\22Z((\\Z2(Z\\Z(\\2\\2)2))\\2Z)))int \\)\\0(2\\ZZZ)+:)Z^|91ZiZZnter(ZZ |91Z(ZZ ZZ(\\r2Z( or#(\\Z2(Z\\Z(\\2\\2)2))\\2Z)Z(\\22Z((\\Z2(Z\\Z(\\2\\2)2))\\2Z)))int \\)\\0(2\\ZZZ)+:)Z^)))int \\)\\0(2\\ZZZ)+:)Z^|91ZiZZnter(ZZernZal ZZ(\\r2Z( or#(\\Z2(Z\\Z(\\2\\2)2))\\2Z)Z(\\22Z((\\Z2(Z\\Z(\\2\\2)2))\\2Z)))int \\))\\ZZ(\\r2Z( or#(\\Z2(Z\\Z(\\2\\2)2))\\2Z)Z(\\22Z((\\Z2(Z\\Z(\\2\\2)))\\2))))((((((\\2\\2))))))\"I\n\n# This checks that new code for handling groups that may match an empty string\n# works on a very large number of alternatives. This pattern used to provoke a\n# complaint that it was too complicated.\n\n/(?:\\[A|B|C|D|E|F|G|H|I|J|]{200}Z)/expand\n\n# This one used to compile rubbish instead of a compile error, and then\n# behave unpredictably at match time.\n\n/.+(?(?C'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'))?!XXXX.=X/\n    .+(?(?C'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'))?!XXXX.=X\n\n/[:[:alnum:]-[[a:lnum:]+/\n\n/((?(?C'')\\QX\\E(?!((?(?C'')(?!X=X));=)r*X=X));=)/\n\n/((?(?C'')\\Q\\E(?!((?(?C'')(?!X=X));=)r*X=X));=)/\n\n/abcd/auto_callout\n    abcd\\=callout_error=255:2\n\n/()(\\g+65534)/\n\n/()(\\g+65533)/\n\n/\\x00\\x00\\x00\u0017(\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\x00k\\d+\\x00‎\\x00\\x00\\x00\\x00\\x00\\2*\\x00\\x00\\1*.){36}int^\\x00\\x00\b\\x00(\\1{50779}?)J\\w2/I\n\n/(a)(b)\\2\\1\\1\\1\\1/I\n\n/(?<a>a)(?<b>b)\\g{b}\\g{a}\\g{a}\\g{a}\\g{a}(?<a>xx)(?<b>zz)/I,dupnames\n\n//\n    \\=ovector=7777777777\n\n# This is here because Perl matches, even though a COMMIT is encountered\n# outside of the recursion.\n\n/(?1)(A(*COMMIT)|B)D/\n    BAXBAD\n\n\"(?1){2}(a)\"B\n\n\"(?1){2,4}(a)\"B\n\n# This test differs from Perl for the first subject. Perl ends up with\n# $1 set to 'B'; PCRE2 has it unset (which I think is right).\n\n/^(?:\n(?:A| (?:B|B(*ACCEPT)) (?<=(.)) D)\n(Z)\n)+$/x\n    AZB\n    AZBDZ\n\n# The first of these, when run by Perl, gives the mark 'aa', which is wrong.\n\n'(?>a(*:aa))b|ac' mark\n    ac\n\n'(?:a(*:aa))b|ac' mark\n    ac\n\n/(R?){65}/\n    (R?){65}\n\n/\\[(a)]{60}/expand\n    aaaa\n\n/(?<!\\1((?U)1((?U))))(*F)/never_backslash_c,alt_bsux,anchored,extended\n\n/\\g{3/\n\n/(a(?C1)(b)(c)d)+/\n  abcdabcd\\=callout_capture\n\n# Perl matches this one, but PCRE does not because (*ACCEPT) clears out any\n# pending backtracks in the recursion.\n\n/^ (?(DEFINE) (..(*ACCEPT)|...) ) (?1)$/x\n\\= Expect no match\n    abc\n\n# Perl gives no match for this one\n\n/(a(*MARK:m)(*ACCEPT)){0}(?1)/mark\n    abc\n\n/abc/endanchored\n    xyzabc\n\\= Expect no match\n    xyzabcdef\n\\= Expect error\n    xyzabc\\=ph\n\n/abc/\n    xyzabc\\=endanchored\n\\= Expect no match\n    xyzabcdef\\=endanchored\n\\= Expect error\n    xyzabc\\=ps,endanchored\n\n/abc(*ACCEPT)d/endanchored\n    xyzabc\n\\= Expect no match\n    xyzabcdef\n\n/abc|bcd/endanchored\n    xyzabcd\n\\= Expect no match\n    xyzabcdef\n\n/a(*ACCEPT)x|aa/endanchored\n    aaa\n\n# Check auto-anchoring when there is a group that is never obeyed at\n# the start of a branch.\n\n/(?(DEFINE)(a))^bc/I\n\n/(a){0}.*bc/sI\n\n# This should be anchored, as the condition is always false and there is\n# no alternative branch.\n\n/(?(VERSION>=999)yes)^bc/I\n\n# This should not be anchored.\n\n/(?(VERSION>=999)yes|no)^bc/I\n\n/(*LIMIT_HEAP=0)xxx/I\n\n/(*LIMIT_HEAP=123/use_length\n\n/(*LIMIT_MATCH=/use_length\n\n/(*CRLF)(*LIMIT_DEPTH=/use_length\n\n/(*CRLF)(*LIMIT_RECURSION=1)(*BOGUS/use_length\n\n/\\d{0,3}(*:abc)(?C1)xxx/callout_info\n\n# ----------------------------------------------------------------------\n\n# These are a whole pile of tests that touch lines of code that are not\n# used by any other tests (at least when these were created).\n\n/^a+?x/i,no_start_optimize,no_auto_possess\n\\= Expect no match\n    aaa\n\n/^[^a]{3,}?x/i,no_start_optimize,no_auto_possess\n\\= Expect no match\n    bbb\n    cc\n\n/^X\\S/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\W/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\H/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\h/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\V/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\v/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\h/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\n\n/^X\\V/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\n\n\n/^X\\v/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XX\n\n/^X.+?/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\R+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XX\n\n/^X\\H+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\h+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\V+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n    X\\n\n\n/^X\\D+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n    X9\n\n/^X\\S+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n    X\\n\n\n/^X\\W+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n    XX\n\n/^X.+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\n\n\n/(*CRLF)^X.+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\r\\=ps\n\n/^X\\R+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\nX\n    X\\n\\r\\n\n    X\\n\\rY\n    X\\n\\nY\n    X\\n\\x{0c}Y\n\n/(*BSR_ANYCRLF)^X\\R+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\nX\n    X\\n\\r\\n\n    X\\n\\rY\n    X\\n\\nY\n    X\\n\\x{0c}Y\n\n/^X\\H+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\t\n    XYY\n\n/^X\\h+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\t\\t\n    X\\tY\n\n/^X\\V+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\n\n    XYY\n\n/^X\\v+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\n\\n\n    X\\nY\n\n/^X\\D+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY9\n    XYY\n\n/^X\\d+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X99\n    X9Y\n\n/^X\\S+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\n\n    XYY\n\n/^X\\s+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\n\\n\n    X\\nY\n\n/^X\\W+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X.A\n    X++\n\n/^X\\w+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    Xa.\n    Xaa\n\n/^X.{1,3}Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    Xa.bd\n\n/^X\\h+Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\t\\t\n    X\\tY\n\n/^X\\V+Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\n\n    XYY\n\n/^(X(*THEN)Y|AB){0}(?1)/\n    ABX\n\\= Expect no match\n    XAB\n\n/^(?!A(?C1)B)C/\n    ABC\\=callout_error=1,no_jit\n\n/^(?!A(?C1)B)C/no_start_optimize\n    ABC\\=callout_error=1\n\n/^(?(?!A(?C1)B)C)/\n    ABC\\=callout_error=1\n\n# ----------------------------------------------------------------------\n\n/[a b c]/BxxI\n\n/[a b c]/BxxxI\n\n/[a b c]/B,extended_more\n\n/[ a b c ]/B,extended_more\n\n/[a b](?xx: [ 12 ] (?-xx:[ 34 ]) )y z/B\n\n# Unsetting /x also unsets /xx\n\n/[a b](?xx: [ 12 ] (?-x:[ 34 ]) )y z/B\n\n/(a)(?-n:(b))(c)/nB\n\n# ----------------------------------------------------------------------\n# These test the dangerous PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL option.\n\n/\\j\\x{z}\\o{82}\\L\\uabcd\\u\\U\\g{\\g/B,\\bad_escape_is_literal\n\n/\\N{\\c/IB,bad_escape_is_literal\n\n/[\\j\\x{z}\\o\\gAb\\g]/B,bad_escape_is_literal\n\n/[Q-\\N]/B,bad_escape_is_literal\n\n/[\\s-_]/bad_escape_is_literal\n\n/[_-\\s]/bad_escape_is_literal\n\n/[\\B\\R\\X]/B\n\n/[\\B\\R\\X]/B,bad_escape_is_literal\n\n/[A-\\BP-\\RV-\\X]/B\n\n/[A-\\BP-\\RV-\\X]/B,bad_escape_is_literal\n\n# ----------------------------------------------------------------------\n\n/a\\b(c/literal\n    a\\\\b(c\n\n/a\\b(c/literal,caseless\n    a\\\\b(c\n    a\\\\B(c\n\n/a\\b(c/literal,firstline\n    XYYa\\\\b(c\n\\= Expect no match\n    X\\na\\\\b(c\n\n/a\\b?c/literal,use_offset_limit\n    XXXXa\\\\b?c\\=offset_limit=4\n\\= Expect no match\n    XXXXa\\\\b?c\\=offset_limit=3\n\n/a\\b(c/literal,anchored,endanchored\n    a\\\\b(c\n\\= Expect no match\n    Xa\\\\b(c\n    a\\\\b(cX\n    Xa\\\\b(cX\n\n//literal,extended\n\n/a\\b(c/literal,auto_callout,no_start_optimize\n    XXXXa\\\\b(c\n\n/a\\b(c/literal,auto_callout\n    XXXXa\\\\b(c\n\n/(*CR)abc/literal\n    (*CR)abc\n\n/cat|dog/I,match_word\n    the cat sat\n\\= Expect no match\n    caterpillar\n    snowcat\n    syndicate\n\n/(cat)|dog/I,match_line,literal\n    (cat)|dog\n\\= Expect no match\n    the cat sat\n    caterpillar\n    snowcat\n    syndicate\n\n# Confirm that the pcre2_set_optimize API does not have any undesired effect on literal patterns\n/(cat)|dog/I,literal,auto_possess_off\n    (cat)|dog\n\\= Expect no match\n    the cat sat\n\n/(cat)|dog/I,literal,dotstar_anchor_off\n    (cat)|dog\n\\= Expect no match\n    the cat sat\n\n/(cat)|dog/I,literal,optimization_none\n    (cat)|dog\n\\= Expect no match\n    the cat sat\n\n# These should result in errors, since it is not permitted to use the\n# PCRE2_NO_AUTO_POSSESS and PCRE2_NO_DOTSTAR_ANCHOR options on a literal pattern\n/(cat)|dog/literal,no_auto_possess\n\n/(cat)|dog/literal,no_dotstar_anchor\n\n/a whole line/match_line,multiline\n    Rhubarb \\na whole line\\n custard\n\\= Expect no match\n    Not a whole line\n\n# Perl gets this wrong, failing to capture 'b' in group 1.\n\n/^(b+|a){1,2}?bc/\n    bbc\n    \n# And again here, for the \"babc\" subject string. \n\n/^(b*|ba){1,2}?bc/\n    babc\n    bbabc\n    bababc\n\\= Expect no match\n    bababbc\n    babababc\n\n/[[:digit:]-a]/\n\n/[[:digit:]-[:print:]]/\n\n/[\\d-a]/\n\n/[\\H-z]/\n\n/[\\d-[:print:]]/\n\n# Perl gets the second of these wrong, giving no match.\n\n\"(?<=(a))\\1?b\"I\n    ab\n    aaab \n\n\"(?=(a))\\1?b\"I\n    ab\n    aaab\n    \n# JIT does not support callout_extra  \n    \n/(*NO_JIT)(a+)b/auto_callout,no_start_optimize,no_auto_possess\n\\= Expect no match\n    aac\\=callout_extra \n    \n/(*NO_JIT)a+(?C'XXX')b/no_start_optimize,no_auto_possess\n\\= Expect no match\n    aac\\=callout_extra \n\n/\\n/firstline\n    xyz\\nabc\n\n/\\nabc/firstline\n    xyz\\nabc\n\n/\\x{0a}abc/firstline,newline=crlf\n\\= Expect no match\n    xyz\\r\\nabc\n\n/[abc]/firstline\n\\= Expect no match\n    \\na\n    \n# These tests are matched in test 1 as they are Perl compatible. Here we are\n# looking at what does and does not get auto-possessified. \n\n/(?(DEFINE)(?<optional_a>a?))^(?&optional_a)a$/B\n\n/(?(DEFINE)(?<optional_a>a?)X)^(?&optional_a)a$/B\n    \n/^(a?)b(?1)a/B\n\n/^(a?)+b(?1)a/B\n\n/^(a?)++b(?1)a/B\n\n/^(a?)+b/B\n\n/(?=a+)a(a+)++b/B\n\n/(?<=(?=.){4,5}x)/B\n\n# Perl behaves differently with these when optimization is turned off\n\n/a(*PRUNE:X)bc|qq/mark,no_start_optimize\n\\= Expect no match\n    axy\n\n/a(*THEN:X)bc|qq/mark,no_start_optimize\n\\= Expect no match\n    axy\n\n/(?^x-i)AB/ \n\n/(?^-i)AB/ \n\n/(?x-i-i)/\n\n/(?(?=^))b/I\n    abc\n\n/(?(?=^)|)b/I\n    abc\n\n/(?(?=^)|^)b/I\n    bbc\n\\= Expect no match\n    abc     \n\n/(?(1)^|^())/I\n\n/(?(1)^())b/I\n\n/(?(1)^())+b/I,aftertext\n    abc\n\n/(?(1)^()|^)+b/I,aftertext\n    bbc \n\\= Expect no match     \n    abc\n\n/(?(1)^()|^)*b/I,aftertext\n    bbc \n    abc\n    xbc \n\n/(?(1)^())+b/I,aftertext\n    abc\n\n/(?(1)^a()|^a)+b/I,aftertext\n    abc \n\\= Expect no match     \n    bbc\n\n/(?(1)^|^(a))+b/I,aftertext\n    abc \n\\= Expect no match     \n    bbc\n\n/(?(1)^a()|^a)*b/I,aftertext\n    abc \n    bbc\n    xbc \n\n/a(b)c|xyz/g,allvector,replace=<$0>\n    abcdefabcpqr\\=ovector=4\n    abxyz\\=ovector=4\n    abcdefxyz\\=ovector=4\n    \n/a(b)c|xyz/allvector\n    abcdef\\=ovector=4\n    abxyz\\=ovector=4\n\n/a(b)c|xyz/g,replace=<$0>,substitute_callout\n    abcdefabcpqr\n    abxyzpqrabcxyz\n    12abc34xyz99abc55\\=substitute_stop=2\n    12abc34xyz99abc55\\=substitute_skip=1\n    12abc34xyz99abc55\\=substitute_skip=2\n\n/a(b)c|xyz/g,replace=<$0>\n    abcdefabcpqr\n    abxyzpqrabcxyz\n    12abc34xyz\\=substitute_stop=2\n    12abc34xyz\\=substitute_skip=1\n\n/a(b)c|xyz/replace=<$0>\n    abcdefabcpqr\n    12abc34xyz\\=substitute_skip=1\n    12abc34xyz\\=substitute_stop=1\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[1]12\n    abc\\=substitute_skip=1\n    abc\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[2]12\n    abc\\=substitute_skip=1\n    abc\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[3]12\n    abc\\=substitute_skip=1\n    abc\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[4]12\n    abc\\=substitute_skip=1\n    abc\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[2]1234\n    abc\\=substitute_skip=1\n    abc\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[3]1234\n    abc\\=substitute_skip=1\n    abc\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[4]1234\n    abc\\=substitute_skip=1\n    abc\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[5]1234\n    abc\\=substitute_skip=1\n    abc\n\n/a(b)c/substitute_callout,replace=[1]12\n    abc\\=substitute_skip=1\n    abc\n\n/a(b)c/substitute_callout,replace=[2]12\n    abc\\=substitute_skip=1\n    abc\n\n/a(b)c/substitute_callout,replace=[3]12\n    abc\\=substitute_skip=1\n    abc\n\n/a(b)c/substitute_callout,replace=[4]12\n    abc\\=substitute_skip=1\n    abc\n\n/abc\\rdef/\n    abc\\ndef\n\n/abc\\rdef\\x{0d}xyz/escaped_cr_is_lf\n    abc\\ndef\\rxyz\n\\= Expect no match     \n    abc\\ndef\\nxyz\n\n/(?(*ACCEPT)xxx)/\n\n/(?(*atomic:xx)xxx)/\n\n/(?(*script_run:xxx)zzz)/\n\n/foobar/\n    the foobar thing\\=copy_matched_subject\n    the foobar thing\\=copy_matched_subject,zero_terminate\n\n/foobar/g\n    the foobar thing foobar again\\=copy_matched_subject\n\n/(*:XX)^abc/I\n\n/(*COMMIT:XX)^abc/I\n\n/(*ACCEPT:XX)^abc/I\n\n/abc/replace=xyz\n    abc\\=null_context\n\n/abc/replace=xyz,substitute_callout\n    abc \n\\= Expect error message\n    abc\\=null_context\n\n/\\[()]{65535}()/expand\n\n/\\[()]{65535}(?<A>)/expand\n\n/a(?:(*ACCEPT))??bc/\n    abc\n    axy\n\n/a(*ACCEPT)??bc/\n    abc\n    axy\n\n/a(*ACCEPT:XX)??bc/mark\n    abc\n    axy\n\n/(*:\\)?/\n\n/(*:\\Q \\E){5}/alt_verbnames\n\n/(?=abc)/I\n\n/(?|(X)|(XY))\\1abc/I\n\n/(?|(a)|(bcde))(c)\\2/I\n\n/(?|(a)|(bcde))(c)\\1/I\n\n/(?|(?'A'a)|(?'A'bcde))(?'B'c)\\k'B'(?'A')/I,dupnames\n\n/(?|(?'A'a)|(?'A'bcde))(?'B'c)\\k'A'(?'A')/I,dupnames\n\n/((a|)+)+Z/I\n\n/((?=a))[abcd]/I\n\n/A(?:(*ACCEPT))?B/info\n\n/(A(*ACCEPT)??B)C/\n    ABC\n    AXY \n\n/(?<=(?<=a)b)c.*/I\n    abc\\=ph\n\\= Expect no match\n    xbc\\=ph\n\n/(?<=ab)c.*/I\n    abc\\=ph\n\\= Expect no match\n    xbc\\=ph\n\n/(?<=a(?<=a|a)c)/I\n\n/(?<=a(?<=a|ba)c)/I\n\n/(?<=(?<=a)b)(?<!abcd)/I\n\n/(?<=(?<=a)b)(?<!abcd)(?<=(?<=a)bcde)/I\n\n# Addition overflow\n/( {32742} {42})(?<!\\1{65481})/\n\n# Multiplication overflow\n/(X{65535})(?<=\\1{32770})/\n\n# ---- Non-atomic assertion tests ----\n\n/(*ploo:abc)/\n\n/(*pla:abc/\n\n/(*pla:/\n\n/(*pla/\n\n/(*pla}abc)/\n\n# Expect error: not allowed as a condition\n/(?(*napla:xx)bc)/\n\n/\\A(*pla:.*\\b(\\w++))(?>.*?\\b\\1\\b){3}/\n    word1 word3 word1 word2 word3 word2 word2 word1 word3 word4\n\n/\\A(*napla:.*\\b(\\w++))(?>.*?\\b\\1\\b){3}/\n    word1 word3 word1 word2 word3 word2 word2 word1 word3 word4\n\n/\\A(?*.*\\b(\\w++))(?>.*?\\b\\1\\b){3}/\n    word1 word3 word1 word2 word3 word2 word2 word1 word3 word4\n\n/(*plb:(.)..|(.)...)(\\1|\\2)/\n    abcdb\\=offset=4 \n    abcda\\=offset=4 \n\n/(*naplb:(.)..|(.)...)(\\1|\\2)/\n    abcdb\\=offset=4 \n    abcda\\=offset=4 \n    \n/(?<*(.)..|(.)...)(\\1|\\2)/\n    abcdb\\=offset=4 \n    abcda\\=offset=4 \n    \n/(*non_atomic_positive_lookahead:ab)/B\n \n/(*non_atomic_positive_lookbehind:ab)/B \n\n/(*pla:ab+)/B\n\n/(*napla:ab+)/B\n\n/(*napla:)+/\n\n/(*naplb:)+/\n\n/(*napla:^x|^y)/I\n\n/(*napla:abc|abd)/I\n\n/(*napla:a|(.)(*ACCEPT)zz)\\1../\n    abcd\n    \n/(*napla:a(*ACCEPT)zz|(.))\\1../\n    abcd\n    \n/(*napla:a|(*COMMIT)(.))\\1\\1/\n    aabc\n\\= Expect no match     \n    abbc   \n\n/(*napla:a|(.))\\1\\1/\n    aabc\n    abbc   \n\n/(*naplb:ab?c|PQ).../g\n    abcdefgacxyzPQR123\n\n# ----\n\n# Expect error (recursion => not fixed length)\n/(\\2)((?=(?<=\\1)))/\n\n/c*+(?<=[bc])/\n    abc\\=ph\n    ab\\=ph\n    abc\\=ps\n    ab\\=ps\n\n/c++(?<=[bc])/\n    abc\\=ph\n    ab\\=ph\n\n/(?<=(?=.(?<=x)))/\n    abx\n    ab\\=ph\n    bxyz \n    xyz\n    \n/\\z/\n   abc\\=ph\n   abc\\=ps \n   \n/\\Z/\n   abc\\=ph\n   abc\\=ps \n   abc\\n\\=ph\n   abc\\n\\=ps\n\n/(?![ab]).*/\n    ab\\=ph\n\n/c*+/\n    ab\\=ph,offset=2\n\n/\\A\\s*(a|(?:[^`]{28500}){4})/I\n    a\n\n/\\A\\s*((?:[^`]{28500}){4})/I\n\n/\\A\\s*((?:[^`]{28500}){4}|a)/I\n    a\n\n/(?<A>a)(?(<A>)b)((?<=b).*)/B\n\n/(?(1)b)((?<=b).*)/B\n\n/(?(R1)b)((?<=b).*)/B\n\n/(?(DEFINE)b)((?<=b).*)/B\n\n/(?(VERSION=10.3)b)((?<=b).*)/B\n\n/(?(VERSION>=10.3)b)((?<=b).*)/B\n\n/[aA]b[cC]/IB\n\n/[cc]abcd/I\n\n/[Cc]abcd/I\n\n/[c]abcd/I\n\n/(?:c|C)abcd/I\n\n/(a)?a/I\n    manm\n\n/^(?|(\\*)(*napla:\\S*_(\\2?+.+))|(\\w)(?=\\S*_(\\2?+\\1)))+_\\2$/\n    *abc_12345abc\n\n/^(?|(\\*)(*napla:\\S*_(\\3?+.+))|(\\w)(?=\\S*_((\\2?+\\1))))+_\\2$/\n    *abc_12345abc\n\n/^((\\1+)(?C)|\\d)+133X$/\n    111133X\\=callout_capture\n\n/abc/replace=xyz,substitute_replacement_only\n    123abc456\n\n/a(?<ONE>b)c(?<TWO>d)e/g,replace=X$ONE+${TWO}Z,substitute_replacement_only\n    \"abcde-abcde-\"\n     \n/a(b)c|xyz/g,replace=<$0>,substitute_callout,substitute_replacement_only\n    abcdefabcpqr                \n    abxyzpqrabcxyz              \n    12abc34xyz99abc55\\=substitute_stop=2                          \n    12abc34xyz99abc55\\=substitute_skip=1\n    12abc34xyz99abc55\\=substitute_skip=2\n\n/a(..)d/replace=>$1<,substitute_matched\n    xyzabcdxyzabcdxyz\n    xyzabcdxyzabcdxyz\\=ovector=2\n\\= Expect error     \n    xyzabcdxyzabcdxyz\\=ovector=1\n\n/a(..)d/g,replace=>$1<,substitute_matched\n    xyzabcdxyzabcdxyz\n    xyzabcdxyzabcdxyz\\=ovector=2\n\\= Expect error     \n    xyzabcdxyzabcdxyz\\=ovector=1\n    xyzabcdxyzabcdxyz\\=ovector=1,substitute_unset_empty\n\n/55|a(..)d/g,replace=>$1<,substitute_matched\n    xyz55abcdxyzabcdxyz\\=ovector=2,substitute_unset_empty\n\\= Expect error     \n    xyz55abcdxyzabcdxyz\\=ovector=2\n\n/55|a(..)d/replace=>$1<,substitute_matched\n    xyz55abcdxyzabcdxyz\\=ovector=2,substitute_unset_empty\n\n/55|a(..)d/replace=>$1<\n    xyz55abcdxyzabcdxyz\\=ovector=2,substitute_unset_empty\n\n/55|a(..)d/g,replace=>$1<\n    xyz55abcdxyzabcdxyz\\=ovector=2,substitute_unset_empty\n    \n/abc/replace=,caseless\n    XabcY\n    XABCY \n\n/abc/replace=[4],caseless\n    XabcY\n    XABCY \n\n/abc/replace=*,caseless\n    XabcY\n    XABCY\n    XabcY\\=replace=  \n\n/abc/replace=\\U$0,substitute_extended,substitute_case_callout\n    XabcY\n\\= Expect not supported\n    XabcY\\=null_context\n\n/a/substitute_extended,substitute_case_callout\n    XaY\\=replace=\\U$0\n    XaY\\=replace=\\L$0\n    XaY\\=replace=\\u\\L$0\n    XaY\\=replace=\\l\\U$0\n\n# Expect non-fixed-length error\n\n\"(?<=X(?(DEFINE)(.*))(?1)).\"\n\n#if !ebcdic\n\n/\\sxxx\\s/tables=1\n\\= Expect no match\n    AB\\x{85}xxx\\x{a0}XYZ\n\n/\\sxxx\\s/tables=2\n    AB\\x{85}xxx\\x{a0}XYZ\n\n/^\\w+/tables=2\n    École\n\n/^\\w+/tables=3\n    École\n\n#loadtables ./testbtables\n\n/^\\w+/tables=3\n    École\n\n#endif\n\n/\"(*MARK:>\" 00 \"<)..\"/hex,mark,no_start_optimize\n    AB\n    A\\=ph \n\\= Expect no match\n    A\n\n/\"(*MARK:>\" 00 \"<).(?C1).\"/hex,mark,no_start_optimize\n    AB\n\n/(?(VERSION=0.0/\n\n# Perl has made \\K in lookarounds an error. PCRE2 now rejects as well, unless\n# explicitly authorized.\n\n/(?=a\\Kb)ab/\n\n/(?=a\\Kb)ab/allow_lookaround_bsk\n    ab \n\n/(?!a\\Kb)ac/\n\n/(?!a\\Kb)ac/allow_lookaround_bsk\n    ac \n    \n/^abc(?<=b\\Kc)d/\n\n/^abc(?<=b\\Kc)d/allow_lookaround_bsk\n    abcd\n\n/^abc(?<!b\\Kq)d/\n\n/^abc(?<!b\\Kq)d/,allow_lookaround_bsk\n    abcd\n\n# PCRE2 now also rejects sneaky cases where the \\K is inside a lookaround... but\n# it's not always easy to detect this syntactically at compile-time (indeed,\n# a conditional expression could dynamically invoke \\K via a subroutine, based\n# on the subject contents).\n\n/(?(DEFINE)(?<sneaky>b\\K))a(?=(?&sneaky))/g,allow_lookaround_bsk\n    ab\n\n/(?(DEFINE)(?<sneaky>b\\K))a(?=(?&sneaky))/g\n    ab\n    zz\n\n/a|(?(DEFINE)(?<sneaky>\\Ka))(?<=(?&sneaky))b/g,allow_lookaround_bsk\n    ab\n\n/a|(?(DEFINE)(?<sneaky>\\Ka))(?<=(?&sneaky))b/g\n    ab\n    zz\n\n/a|(?(DEFINE)(?<sneaky>\\K\\Ga))(?<=(?&sneaky))b/g\n    ab\n    zz\n\n/(?=.{10}(?1))x(\\K){0}/\n    x1234567890\n\n/(?=.{10}(.))(*scs:(1)(?2))x(\\K){0}/\n    x1234567890\n\n/(?=.{5}(?1))\\d*(\\K){0}/\n\\= Totally fine - pattern does nothing bad even though \\K is reachable\n    1234567890\n\\= Not fine - the subject now causes the \\K to misbehave\n    abcdefgh\n\n# --------- \n\n# Tests for zero-length NULL to be treated as an empty string.\n\n//\n    \\=null_subject\n\\= Expect error     \n    abc\\=null_subject\n\n//replace=[20]\n    abc\\=null_replacement\n    \\=null_subject\n    \\=null_replacement\n\n/abc/replace=\n    XabcY\\=null_replacement\n\n/X*/g,replace=xy\n\\= Expect error\n    >X<\\=null_replacement\n\n/X+/replace=[20]\n    >XX<\\=null_replacement\n\n# --------- \n\n/[Aa]{2}/BI\n    aabcd\n\n/A{2}/iBI\n    aabcd\n\n/[Aa]{2,3}/BI\n    aabcd\n\n--\n    \\[X]{-10}\n    \n# Check imposition of maximum by match_data_create().\n\n/abcd/\n    abcd\\=ovector=65536\n\n# Use recurse to test \\K and Mark in atomic scope.\n/(?>this line\\s*((?R)|)\\K)/\n    this line this line this line\n\n/(?>this line\\s*((?R)|)(*MARK:A))/\n    this line this line this line\n    \n# Check use of NULL pattern with zero length.\n\n//null_pattern,use_length\n    abc\n    \n//null_pattern\n\n/bad null pattern/null_pattern,use_length\n\n/bad null pattern/null_pattern\n\n# -------- Variable length lookbehinds --------\n/12345(?<=\\d{1,256})X/\n\n/(?<=(\\d{1,256}))X/max_varlookbehind=256\n    12345XYZ\n\n/12345(?<=a?bc)X/max_varlookbehind=0\n\n/12345(?<=abc)X/max_varlookbehind=0\n\n/(?<!( {65054}){9,44965})/\n\n/(?(?<!|(|a)))/\n    aaaa\\=get=0\n\n/(?(?<!|a?))/\n    aaaa\\=get=0\n\n# --------\n\n/(?<=(()()()()()()()()()()()()()(()()()()(())()()()()(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(())()()()()(()()()()()()(()()()()()()()()()()()()()()()()()()()()()(())()()()()(()()()()()()()()()()()()()(()()()()()()()()()()()()()(()())))))))))/\n\n/(?<!( {65054}){0,44965})/auto_callout\n\n/A+{,3}/\n\n/(\\g{+1}Z|(A))+/\n    BAAZCD \n    ZAAAZAZAZAACD \n\n# This doesn't work in Perl (though I think it used to)\n\n/^(?=.*(?=(([A-Z]).*(?(1)\\1)))(?!.+\\2)){26}/i\n    The quick brown fox jumps over the lazy dog.\n    Jackdaws love my big sphinx of quartz.\n    Pack my box with five dozen liquor jugs.\n\\= Expect no match\n    The quick brown fox jumps over the lazy cat.\n    Hackdaws love my big sphinx of quartz.\n    Pack my fox with five dozen liquor jugs.\n    \n# These are different to Perl because of the different capturing in repeating\n# groups.\n\n/((foo)|(bar))*/\n    foobar\n\n/(?:(f)(o)(o)|(b)(a)(r))*/\n    foobar\n\n/((Z)+|A)*/\n    ZABCDEFG\n\n/(?:(?P=same)?(?:(?P<same>a)|(?P<same>b))(?P=same))+/g,dupnames\n    bbbaaabaabb\n\n# --------\n\n/\n/anchored, firstline\n    \\x0a\n\n/\n/anchored,firstline,no_start_optimize\n    \\x0a\n\n/\n/firstline\n    \\x0a\n    abc\\x0adef\n\n/|a(?0)/endanchored\n    aaaa\n\n/A +/extended\n\n/(*ACCEPT)+/B,auto_callout\n\n/a\\z/\n    a\n    a\\=noteol \n\n# This matches a character that only exists once in the subject, sort of like a\n# hypothetical \"(.)(?<!\\1.+)(?!.*\\1)\". That has unlimited variable length\n# lookbehind, so is invalid. This pattern doesn't work in Perl 5.38.0.\n\n/\\G(?:(?=(\\1.|)(.))){1,13}?(?!.*\\2.*\\2)\\1\\K\\2/g\n    aaabcccdeee\n\n/|(?0)./endanchored\n    abcd\n\n/|a(?0)/endanchored\n    aaaa\n\n/(?:|(?0).)(?(R)|\\z)/\n    abcd\n\n/a?(?=b(*COMMIT)c|)d/I\n    bd\n\n/(?=b(*COMMIT)c|)d/I\n    bd\n\n/a?(?=b(*COMMIT)c|)d/I,no_start_optimize\n    bd\n\n/(?=b(*COMMIT)c|)d/I,no_start_optimize\n    bd\n\n/a?(?=bc|)d/I,auto_callout\n    bd\n    \n/a?(?=bc|)\\bd/I \n    bd\n\n/(?0)/\n    abc\\=disable_recurseloop_check,match_limit=100\n\n/(a(?1)z||(?1)++)$/\n    abcd\\=disable_recurseloop_check\n\n/(((?<=123?456456|ABC)))(?<=\\2)../\n    ABCDEFG\n    12345645678910 \n    \n# This test is crashing Perl 5.38.2.\n\n/[^\\S\\W]{6}/\n    .abc def..\n\n/(*MARK:a/y_)/debug\n\n//i,sr\n\n# The behaviour of these tests is different from Perl because PCRE2 doesn't\n# recognize \\Q or \\E within a quantifier, so these examples are not treated\n# as quantifiers. Subsequent processing of the string removes the escapes.\n\n/a{\\Q1\\E,2}/\n    xa{1,2}x\n\\= Expect no match     \n    xaax\n    \n/a{\\E1,2}/\n    xa{1,2}x\n\\= Expect no match     \n    xaax\n    \n# --------------\n\n/(?<=|b?)./B\n\n/(?=|b?)./B\n\n/(?>|b?)./B\n\n/(?<=xy|a.b?|cd)/B\n\n# Tests for scan substring, a non Perl feature of PCRE2\n\n# Parse errors first\n\n/(*scs:/\n\n/(*scan_substring:(/\n\n/(*scs:('name'/\n\n/(*scs:(1)a|b)/\n\n/(*scs:(0)a)/\n\n/(*scan_substring:(1)a|b)/\n\n/(*scs:(<name>)a|b)/\n\n/(*scan_substring:(<name>)a|b)/\n\n/()(*scs:(1)+a)/\n\n/()(*scs:(1,1,1,1,1,1,1,1,2))/\n\n/()()(*scs:(1,2,1,2,1,2,2,'XYZ'))/\n\n# Tests for iterating scan_substring\n\n/(a)(*scs:(1)b)*c/B\n\n/(a)(*scs:(1)b)*?c/B\n\n/(a)(*scs:(1)b)*+c/B\n\n/(a)(*scs:(1)b)+c/B\n\n/(a)(*scs:(1)b)+?c/B\n\n/(a)(*scs:(1)b)++c/B\n\n/(a)(*scs:(1)b)?c/B\n\n/(a)(*scs:(1)b)??c/B\n\n/(a)(*scs:(1)b)?+c/B\n\n/(a)(*scs:(1)b){3}c/B\n\n/(a)(*scs:(1)b){3,5}?c/B\n\n/(a)(*scs:(1)b){3,}+c/B\n\n/(\\w++)=(?(*scs:(1)(abc))pqr|xyz)(\\w++)/\n\n# Tests for scan_substring\n\n/([a-z]++)(*scs:(1)(stx)|(ne))(.)/B\n    ##string##next!##\n    __aastxaa:__\n    __abababab:__\n\n/(?<XX>[a-z]++)##(*scan_substring:('XX').*(..)$)\\2/B\n    ##abcd##abcd##cd##\n    ##abcd##abcd##abcd##\n\n/([a-z])([a-z]++)(#+)(*scs:(2)(ab.))/\n    xab##\n    yabc###\n    zababc####\n\n/(?:(?<YYY>[a-z]++)|(?<YYY>[0-9]++)|$)(*scan_substring:('YYY')((?<START>.).*\\k<START>$))/dupnames\n    $$abacd$$112345$$abca$$\n    $$abcdeaf$$1234567819$$123456781$$\n\n/([a-zA-Z]+)(*scs:(1).*?(?<ABC>[A-Z]+)(*scan_substring:('ABC').*(.)\\3))#+/\n    ##abABCtuTUVXz##abCDEFGxyCDEEFGhi##\n    ##abAABCtuTUVXXz!!abCDEFGxyCDEFGGhi##\n\n/([a-zA-Z]+)(*scs:(1)(xy|ab(*ACCEPT)cd))/B\n    ##cdefgh##cdeabxy##\n\n/(?<AA>[a-zA-Z]+)(*scs:('AA')(ab(*ACCEPT)cd|xy))/B\n    ##cdefgh##cdeabxy##\n\n/([a-z]++)##(*scs:(1)(abc))?!/\n    ##xyz##abc##!\n    ##xyz##!\n    ##xyz##\n\n/([a-z]++)##(*scs:(1)(abc))??(?(2)!|:)/\n    ##abc##abc##!\n    ##abc##xyz##:\n    ##abc###\n\n/([a-z]++)##(*scs:(1)(abc)|xyz){8}(?(2)!|:)/\n    ##abc##abc##!\n    ##abc##xyz##:\n    ##nnn##!\n    ##nnn##:\n\n/[A-Z]{3}([A-Z]++)#(*scs:(1)(?<=BC)XY)#/\n    ABCXY##AKCXY##\n  \n/()(\\w++)=(*scs:(2)(?=abc))(\\w++)/\n    xabcx=pqr.\n      \n/(\\d++)(*scs:(1)\\d+\\z)(\\w+)/\n    X123XYZ\n\n/(\\d++)(*scs:(1)\\d+\\Z)(\\w+)/\n    X123XYZ\n\n/(\\d++)(*scs:(1)\\d+$)(\\w+)/\n    X123XYZ\n\n/([a-z]{2})[a-z](*scs:(1)(.*?))\\2$/\n    abcab\n    abcabc\n\n/^(([a-z]([a-z]*+))(*scs:(2).(?=(?1)|$)\\3)|#){5}/\n    abcdefg#hijk#!\n    abcdefg#hijk#lmnopqr#\n\n/(*scs:(1)a)(a)|x/\n    a\n    x\n\n/(*scs:(<GOOD_NAME>)a)(?<GOOD_NAME>a)(?<GOOD_NAME>b)(?<GOOD_NAME>c)(?<GOOD_NAME>d)|x/dupnames\n    abcd\n    x\n\n/(*scs:(1)a)?(a)/\n    b\n    a\n\n/(*scs:(1)a)??(a)/\n    b\n    a\n\n# Custom backtrack, goes back n - 1 characters in the input (n=8)\n/x(?|(*scs:(1)(?<=(.)))|()){8}/\n    abcdefghx\n\n/(a)(b)(*scs:(2)(*scs:(1)a(*PRUNE)x)).+|(.+)/\n    abcdef\n\n/(a)(b)(*scs:(2)(*scs:(1)a(*PRUNE:markstr)x)).+|(.+)/mark\n    abcdef\n\n/(a)(b)(*scs:(2)(*scs:(1)a(*PRUNE:markstr))).+|(.+)/mark\n    abcdef\n\n/(a)(b)(*scs:(2)(*scs:(1)a(*COMMIT)x)).+|(.+)/\n    abcdef\n\n/(a)(b)(*scs:(2)(*scs:(1)a(*COMMIT:markstr)x)).+|(.+)/mark\n    abcdef\n\n/(a)(b)(*scs:(2)(*scs:(1)a(*COMMIT:markstr))).+|(.+)/mark\n    abcdef\n\n/(abc)(def)(*scs:(1)(*scs:(2)de(*SKIP)x)).+|(.+)/\n    abcdefghi\n\n/(abc)(def)(*scs:(2)(*scs:(1)(*SKIP)x)).+|(.+)/\n    abcdefghi\n\n/(?<=(abc))(def)(*scs:(2)(*scs:(1)(*SKIP)x)).+|(ef.+)/\n    abcdefghi\n\n/(abc)(def)(*scs:(2)(?:(*scs:(1)abc(*SKIP:notfound)x|abcd|(abc)))).+/\n    abcdefghi\n\n/(abc)(def)(*MARK:markstr)(*scs:(2)(?:(*scs:(1)abc(*SKIP:markstr)x))).+|(.+)/\n    abcdefghi\n\n/^([a-z]++)(?:((?6))|((?7))|((?8))|(#))(?(DEFINE)((*scs:(1)abc(*PRUNE)d))((*scs:(1)abc(*COMMIT)e))((*scs:(1)abc(*SKIP)f)))/\n    abcd#\n    abce#\n    abcf#\n    abc#\n\n/\\b(\\w++)(*scs:(1)^)/\n    sausages and mash\n\\= Expect no match\n    !sausages and mash\n\n/(\\b\\w{3,}+\\b)(*scs:(1)\\W*+(?:((.)\\W*+(?2)\\W*+\\3|)|((.)\\W*+(?4)\\W*+\\5|\\W*+.\\W*+))\\W*+$)/ig\n    ipsum lorem revel level able was I ere I saw Elba\n\n/(?:(?'A'a)|(?<A>b))(*scs:('A')b)c/dupnames\n    abc\n\n# Relative reference\n/(xyz)(abc)(*scs:(-1)abc)(*scs:(-2)\\1)/\n    >xyzabc<\n\n/^([a-z]++)#(*scs:(1)a|ab|abc|abcd|abcde|abcdef|(abcdefg))\\2/\n    abcdefg#abcdefg\n\n/^([a-z]++)(*scs:(1)(a+)(*THEN)b|(a+)(*THEN)c|(aa))/\n    aaaax\n\n/^([a-z]++)(*scs:(1)((a+)(*THEN)b)|(a+)(*THEN)c|(aa))/\n    aaaax\n\n/^([a-z]++)(*scs:(1)((a+)(*THEN)b))?/\n    aaaax\n\n/^([a-z]++)(*scs:(1)(abc|(a+)(*THEN)b))?/\n    aaaax\n\n/^(?:(.){20,30}#|([a-z]++)(*scs:(1)(a+)(*THEN)b){20,30}#|(.){20,30}!)/\n    aaaaaaaaaaaaaaaaaaaaaaaaab!\n\n# List of captures\n\n/(?:(abc)|(?<PP>def)|ghi)(*scs:(1,'PP').(.))/B\n    abc\n    def\n    ghi\n\n/(?:(?<MM>abc)|(?<MM>def)|(ghi)|(?'NN'jkl)|mno)(*scs:('MM',3,<NN>).(.))/B,dupnames\n    abc\n    def\n    ghi\n    jkl\n    mno\n\n/f(?:(*scs:(+1,+2)(?<=(.)))|()){16}/\n    1234567890abcdef\n    1ffffffffffffff\n\n/(?<AA>a)(*scan_substring:(1,'AA',1,<AA>)a)b/B\n    ab\n    ac\n\n/()()()(?<=ab(*scs:(1,2,3))cd)xyz/\n    abcdxyz\n\n/()()()(?<=ab(*ACCEPT)(*scs:(1,2,3))cd|efg)xyz/\n    abxyz\n    efgxyz\n\n/(a)(*scs:(1)a(*ACCEPT))bbb/\n    abbb\n\n/(a)(b+)(*scs:(1)a(*ACCEPT))(\\2)/\n    abbb\n\n# Duplicated capture references\n\n/(a)(b)(c)(d)(*scs:(4,3,1,2,2,1,3,3,4,4)x)/B\n\n/(?<n>a)(?<n>b)(?<n>c)(d)(*scs:(2,3,1,1,<n>,<n>)abc)/B,dupnames\n\n/(?<n>a)(?<n>b)(?<n>c)(d)(*scs:(2,1,1,<n>,<n>)abc)/B,dupnames\n\n/(?<n>a)(?<n>b)(?<n>c)(d)(?<m>e)(?<m>f)(*scs:(<n>,5,3,2,1,4,1,4,<m>,6,<n>,<m>)abc)/B,dupnames\n\n# Tests for pcre2_set_optimize()\n\n/abc/I,optimization_none\n\n/abc/I,optimization_none,auto_possess\n\n/abc/I,optimization_none,dotstar_anchor,auto_possess\n\n/abc/I,optimization_none,start_optimize\n\n/abc/I,dotstar_anchor_off,optimization_full\n\n# If pcre2_set_optimize() is used to turn on some optimization, but at the same time,\n# the compile options word turns it off... the compile options word \"wins\":\n\n/abc/I,no_auto_possess,auto_possess\n\n/abc/I,no_dotstar_anchor,dotstar_anchor\n\n/abc/I,no_start_optimize,start_optimize\n\n# --------------\n\n# larger than GROUP_MAX, smaller than INT_MAX\n/a\\800000b/\n\n# coming up on INT_MAX... (used to succeed with \\8 being literal 8)\n/a\\800000000b/\n\n# over INT_MAX (used to succeed with \\8 being literal 8)\n/a\\8000000000b/\n\n# --------------\n\n# no_bs0\n\n/a\\0b\\x00c\\00d/\n    a\\x{00}b\\x{00}c\\x{00}d\n\n/a\\0b/no_bs0\n\n/b\\x00c\\00d/no_bs0\n    b\\x{00}c\\x{00}d\n\n/abc/substitute_extended\n    abc\\=replace=a\\0b\\x00c\\00d\n\n/abc/substitute_extended,no_bs0\n    abc\\=replace=a\\0b\n    abc\\=replace=b\\x00c\\00d\n\n# python_octal\n\n#if !ebcdic\n\n/\\0-\\00-\\01-\\012-\\0123-\\123-\\1234/\n    \\x00-\\x00-\\x01-\\o{12}-\\o{12}3-\\o{123}-\\o{123}4\n\n/\\1/\n\n/\\12/\n    \\o{12}\n\n/abc/substitute_extended\n    abc\\=replace=\\0-\\00-\\01-\\012-\\0123-\\123-\\1234\n    abc\\=replace=\\1\n    abc\\=replace=\\12\n\n/\\0-\\00-\\01-\\012-\\0123-\\123-\\1234/python_octal\n    \\x00-\\x00-\\x01-\\o{12}-\\o{12}3-\\o{123}-\\o{123}4\n\n/\\1/python_octal\n\n/\\12/python_octal\n\n/abc/substitute_extended,python_octal\n    abc\\=replace=\\0-\\00-\\01-\\012-\\0123-\\123-\\1234\n    abc\\=replace=\\1\n    abc\\=replace=\\12\n\n#endif\n\n# --------------\n\n/a(?C)b/\n    abc\n    abc\\=callout_none\n\n/a(?C)b/never_callout\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (UTS#18)\n\n/[a[]/\n    [\n\n/[a[]/alt_extended_class\n\n/[a[B]/alt_extended_class\n\n/[a[B]]C/B,alt_extended_class\n    aC\n    BC\n\\= Expect no match\n    [C\n\n/[[A][B]]/B,alt_extended_class\n    A\n    B\n\\= Expect no match\n    [\n    ]\n\n/[[A]||[B]]/B,alt_extended_class\n    A\n    B\n\\= Expect no match\n    C\n\n/[[^A][B]]/B,alt_extended_class\n    B\n    C\n\\= Expect no match\n    A\n\n/[^[A][B]]/B,alt_extended_class\n    C\n\\= Expect no match\n    A\n    B\n\n/[^[A]&&[B]]/B,alt_extended_class\n    A\n    B\n    C\n\n/[[AC]||[BC]]/B,alt_extended_class\n    A\n    B\n    C\n\\= Expect no match\n    D\n\n/[[AC]&&[BC]]/B,alt_extended_class\n    C\n\\= Expect no match\n    A\n    B\n    D\n\n/[[AC]--[BC]]/B,alt_extended_class\n    A\n\\= Expect no match\n    B\n    C\n    D\n\n/[[AC]~~[BC]]/B,alt_extended_class\n    A\n    B\n\\= Expect no match\n    C\n    D\n\n/[A[]]]/B,alt_extended_class\n    A\n    ]\n\\= Expect no match\n    [\n\n/[A[^]]]/B,alt_extended_class\n    A\n    [\n    C\n\\= Expect no match\n    ]\n\n/[A[]]/B,alt_extended_class,allow_empty_class\n    A\n\\= Expect no match\n    ]\n    [\n\n/[A[^]]/B,alt_extended_class,allow_empty_class\n    A\n    C\n    [\n    ]\n\n/[A-C--B]/B,alt_extended_class\n    A\n    C\n\\= Expect no match\n    B\n\n/[^A-C--B]/B,alt_extended_class\n    B\n\\= Expect no match\n    A\n    C\n\n/[[\\d\\D]--b]/B,alt_extended_class\n    a\n    c\n\\= Expect no match\n    b\n\n/[\\dAC-E[:space:]&&[^z]]/B,alt_extended_class\n    0\n    A\n    C\n    D\n    E\n    \\t\n\\= Expect no match\n    B\n    F\n    ;\n\n/[z||[^\\dAC-E[:space:]]]/B,alt_extended_class\n    z\n    B\n    F\n    ;\n\\= Expect no match\n    0\n    A\n    C\n    D\n    E\n    \\t\n\n/[ab||cd]/B,alt_extended_class\n    a\n    c\n\\= Expect no match\n    e\n\n/[[a]b||[c]d]/B,alt_extended_class\n    a\n    c\n\\= Expect no match\n    e\n\n/[a[b]||c[d]]/B,alt_extended_class\n    a\n    c\n\\= Expect no match\n    e\n\n/[-&&-]/B,alt_extended_class\n    -\n\\= Expect no match\n    a\n\n/[a-&&-a]/B,alt_extended_class\n    -\n    a\n\\= Expect no match\n    b\n\n/[-a&&a-]/B,alt_extended_class\n    -\n    a\n\\= Expect no match\n    b\n\n/[[a]-&&-[a]]/B,alt_extended_class\n    -\n    a\n\\= Expect no match\n    b\n\n/[-[a]&&[a]-]/B,alt_extended_class\n    -\n    a\n\\= Expect no match\n    b\n\n/(?xx:[  ^  a[  ^  b]  ])/B,alt_extended_class\n    b\n\\= Expect no match\n    A\n    a\n    c\n\n/[  ^  a[  ^  b]  ]/B,alt_extended_class\n    \\x20\n    ^\n    a\n    b\n\\= Expect no match\n    c\n\n/[a-c--b]+/B,alt_extended_class\n    ac\n    a\n\\= Expect no match\n    b\n\n/[a-c--b]{2,3}/B,alt_extended_class\n    ac\n    cac\n\\= Expect no match\n    a\n    bb\n\n/x[a-c--b]+y/B,alt_extended_class\n    xacy\n    xaay\n    xay\n\\= Expect no match\n    zacy\n    xacz\n    xy\n    xby\n\n/[A--B--C--D]/B,alt_extended_class\n    A\n\\= Expect no match\n    B\n\n/[A--A--A]/B,alt_extended_class\n\\= Expect no match\n    A\n    B\n\n/[[A--A]--A]/B,alt_extended_class\n\\= Expect no match\n    A\n    B\n\n/[A--[A--A]]/B,alt_extended_class\n    A\n\\= Expect no match\n    B\n\n/[A--^B]/B,alt_extended_class\n    A\n\\= Expect no match\n    B\n    ^\n    z\n\n/([a-z--n])\\1/B,alt_extended_class\n    aa\n    zz\n\\= Expect no match\n    az\n    nn\n\n/(x[a-z--n]y)\\1/B,alt_extended_class\n    xayxay\n    xzyxzy\n\\= Expect no match\n    xnyxny\n\n/(?:_\\1|([a-z--n])){2}/B,alt_extended_class\n    a_a\n    z_z\n\\= Expect no match\n    a_z\n    n_n\n\n/(?:_\\1|([a-z--n]))+/B,alt_extended_class\n    a_a\n    z_z\n    a_partial\n\\= Expect no match\n    n_n\n\n/[\\d-[z]]/B,alt_extended_class\n    1\n    -\n    z\n\n/[\\d-||z]/B,alt_extended_class\n    1\n    -\n    z\n\n/[z[\\d-]]/B,alt_extended_class\n    1\n    -\n    z\n\n/[1-[z]]/B,alt_extended_class\n    1\n    -\n    z\n\n/[1-||z]/B,alt_extended_class\n    1\n    -\n    z\n\n/[z[1-]]/B,alt_extended_class\n    1\n    -\n    z\n\n/[a--/alt_extended_class\n\n/[a--a/alt_extended_class\n\n/[a--[a/alt_extended_class\n\n/[a--[a]/alt_extended_class\n\n/[a--[a]--/alt_extended_class\n\n/[a--]/alt_extended_class\n\n/[--a]/alt_extended_class\n\n/[^--a]/alt_extended_class\n\n/[--]/alt_extended_class\n\n/[a---b]/alt_extended_class\n\n/[a----b]/alt_extended_class\n\n/[a&&&b]/alt_extended_class\n\n/[a|||b]/alt_extended_class\n\n/[a~~~b]/alt_extended_class\n\n/[a~~~~b]/alt_extended_class\n\n/[a~~/alt_extended_class\n\n/[a~~~/alt_extended_class\n\n/[a~~~~/alt_extended_class\n\n/[a||b&&c]/alt_extended_class\n\n/[a||b~~c]/alt_extended_class\n\n/[a~~b&&c]/alt_extended_class\n\n/[a--b~~c]/alt_extended_class\n\n/[a--b&&c]/alt_extended_class\n\n/[a||b--c]/alt_extended_class\n\n/[a||[b--c]]/alt_extended_class\n    a\n    b\n\\= Expect no match\n    c\n\n/[\\d-z]/B,alt_extended_class\n\n/[z-\\d]/B,alt_extended_class\n\n/[abc -- b]+/B,alt_extended_class\n    acacbac\n\n/[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a&&a]]]]]]]]]]]]]]]/alt_extended_class\n    a\n\\= Expect no match\n    b\n\n/[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[z]&&a]]]]]]]]]]]]]]]/alt_extended_class\n\n/[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a&&a[z]]]]]]]]]]]]]]]]/alt_extended_class\n\n/[z&/alt_extended_class\n\n/[[^]~~[^]]/B,alt_extended_class,allow_empty_class\n\\= Expect no match\n    a\n\n/[^[[^]~~[^]]]/B,alt_extended_class,allow_empty_class\n    a\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n# allow-empty-class does nothing inside (?[...])\n/(?[ []] ])/B,allow_empty_class\n    ]\n\n# bad-escape-is-literal does nothing inside (?[...])\n/[ \\j ]/\n\n/[ /\\\n\n/(?[ \\j ])/\n\n/(?[ /\\\n\n/[ \\j ]/bad_escape_is_literal\n    j\n\\= Expect no match\n    k\n\n/[ /\\bad_escape_is_literal\n\n/(?[ \\j ])/bad_escape_is_literal\n\n/(?[ /\\bad_escape_is_literal\n\n/(?[ [\\j] ])/bad_escape_is_literal\n\n/(?[ (\\j) ])/bad_escape_is_literal\n\n# We can't test error cases in testinput1\n\n/(?[])/\n\n/(?[/\n\n/(?[]/\n\n/(?[\\n/\n\n/(?[\\n]/\n\n/(?[\\n]z)/\n\n/(?[\\n] )/\n\n/(?[(/\n\n/(?[( /\n\n/(?[(\\n/\n\n/(?[ \\n + () ])/\n\n/(?[1])/\n\n/(?[a])/\n\n/(?[a-c])/\n\n/(?[(])/\n\n/(?[(\\n])/\n\n/(?[\\n)])/\n\n/(?[^\\n])/\n\n/(?[ \\n \\t ])/\n\n/(?[ \\d \\t ])/\n\n/(?[ [\\n] \\t ])/\n\n/(?[ (\\n) \\t ])/\n\n/(?[ [:alpha:] \\t ])/\n\n/(?[ \\n + \\t \\d ])/\n\n/(?[ !\\n \\t ])/\n\n/(?[ \\n [:alpha:] ])/\n\n/(?[ \\n [\\d] ])/\n\n/(?[ \\n (\\t) ])/\n\n/(?[ \\n !\\t ])/\n\n/(?[ \\n \\t ])/\n\n/(?[:graph:])/\n\n/(?[\\Qn\\E])/\n\n# maximum depth tests\n\n/(?[\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n&\\n))))))))))))))])/\n    \\n\n\\= Expect no match\n    a\n    b\n\n/(?[\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+([\\n]&\\n))))))))))))))])/\n\n/(?[\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n&[\\n]))))))))))))))])/\n\n/(?[\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+((\\n)&\\n))))))))))))))])/\n\n# --------------\n\n/[[:digit:]   -Z]/xx\n\n/[\\d   -Z]/xx\n\n/[[:digit:]\\E-H]/\n\n/[[:digit:]\\Q\\E-H]+/\n\n/[z-[:space:]]/\n\n/[z-\\d]/\n\n/[[:space:]-z]/\n\n/[\\d-z]/\n\n/[\\d-\\w]/\n\n/[\\Q/\n\n/[\\Q/\\\n\n/[\\Q\\E/\n\n/[\\Q\\n/\n\n/[\\Q\\n]/\n\n/[\\Q\\n/\\\n\n/[\\Q\\n\\]/\n\n/[\\Q\\n\\E/\n\n/[\\Q\\n\\E]/\n    \\\\\n    n\n\\= Expect no match\n    \\n\n    Q\n\n/[z\\Q/\n\n/[z\\Q/\\\n\n/[z\\Q\\E/\n\n/[/\\\n\n/[\\n/\n\n/[\\E/\n\n/[\\^z]/B\n\n/[ \\^]/B\n\n/[\\\\z]/B\n\n#if !ebcdic\n\n/[0-z]/B\n\n#endif\n\n/[0\\-z]/B\n\n/[]z]/B\n\n/[ \\]]/B\n\n#if !ebcdic\n\n/[ --]/B\n\n/[A-\\]]/B\n\n/[A-\\\\]/B\n\n#endif\n\n/[\\A]/\n\n/[\\Z]/\n\n/[\\z]/\n\n/[\\G]/\n\n/[\\K]/\n\n/[\\g<1>]/\n    <\n    g\n\\= Expect no match\n    \\\\\n\n/[\\k<1>]/\n    <\n    k\n\\= Expect no match\n    \\\\\n\n/[\\u{ 1z}]/alt_bsux,extra_alt_bsux\n    u\n    {\n    }\n    \\x20\n    1\n\\= Expect no match\n    \\\\\n\n#if !ebcdic\n\n/[a\\x{e1}]/iB\n    a\n    A\n    \\x{e1}\n\n#endif\n\n# --------------\n\n# Test backreferences with possessive repeats\n\n/(..)\\1*+/B\n  ab\n  abc\n  abababc\n\n/(..)\\1++/B\n  abc\n  ababc\n  aababab\n  aabababc\n\n/(..)\\1?+/B\n  aa\n  aac\n  ababab\n\n# The + is intentionally missing,\n# exact repeat is always possessive\n/(..)\\1{3}/B\n  abababac\n  abababab\n  ababababc\n\n/(..)\\1{2,}+/B\n  ababac\n  ababab\n  abababab\n  ababababab\n  abababababc\n\n/(..)\\1{3,5}+/B\n  abababac\n  abababab\n  ababababab\n  abababababab\n  ababababababab\n\n# --------------\n\n# Attempt at full coverage of the substitution buffer-management code - not\n# just covering each line in each macro, but covering each instantiation of each\n# line in those macros.\n\n#\n# CHECKMEMCPY tests\n#\n# Four conditions for CHECKMEMCPY:\n#   no overflow;\n#   first overflow (with/without substitute_overflow_length);\n#   overflow after previous overflow\n# Additionally some CHECKMEMCPYs have a substitute_replacement_only branch.\n#\n\n# pre-start-offset fragment\n# no \"overflow after previous overflow\" condition\n/a/\n    XYaZ\\=offset=2,replace=foo\n    XYaZ\\=offset=2,replace=[1]foo\n    XYaZ\\=offset=2,substitute_overflow_length,replace=[1]foo\n    XYaZ\\=offset=2,substitute_replacement_only,replace=foo\n\n# pre-match fragment\n/a/\n    XYaZ\\=replace=foo\n    XYaZ\\=replace=[1]foo\n    XYaZ\\=substitute_overflow_length,replace=[1]foo\n    XXYaZ\\=offset=2,substitute_overflow_length,replace=[1]foo\n    XYaZ\\=substitute_replacement_only,replace=foo\n\n# empty match bumpalong\n/(?<=abc)(|DEF)/g\n    abcDEFabcZ\\=replace=+\n    abcDEFabcZ\\=replace=[5]+\n    abcDEFabcZ\\=substitute_overflow_length,replace=[5]+\n    abcDEFabcZ\\=replace=[9]+\n    abcDEFabcZ\\=substitute_overflow_length,replace=[9]+\n    abcDEFabcZ\\=substitute_overflow_length,replace=[1]+\n    abcDEFabcZ\\=substitute_replacement_only,replace=+\n\n# literal replacement\n/a/\n    XYaZ\\=substitute_literal,replace=$0\n    XYaZ\\=substitute_literal,replace=[3]$0\n    XYaZ\\=substitute_literal,substitute_overflow_length,replace=[3]$0\n    XYaZ\\=substitute_literal,substitute_overflow_length,replace=[1]$0\n\n# a MARK\n/(*:pear)apple/\n    XappleY\\=replace=${*MARK}\n    XappleY\\=replace=[3]${*MARK}\n    XappleY\\=substitute_overflow_length,replace=[3]${*MARK}\n    XXappleY\\=substitute_overflow_length,replace=[1]${*MARK}\n\n# a subject fragment\n/a(bb)c/\n    XabbcY\\=replace=$1\n    XabbcY\\=replace=[2]$1\n    XabbcY\\=substitute_overflow_length,replace=[2]$1\n    XXabbcY\\=substitute_overflow_length,replace=[1]$1\n\n# a zero-length subject fragment\n/a()c/\n    XacY\\=replace=$1\n    XacY\\=replace=[2]$1\n    XacY\\=substitute_overflow_length,replace=[2]$1\n\n#if !ebcdic\n\n# a data character via an escape\n/abc/substitute_extended\n    XabcY\\=replace=\\x{48}\n    XabcY\\=replace=[1]\\x{48}\n    XabcY\\=substitute_overflow_length,replace=[1]\\x{48}\n    XXabcY\\=substitute_overflow_length,replace=[1]\\x{48}\n\n#endif\n\n# a replacement literal character\n/abc/\n    XabcY\\=replace=Z\n    XabcY\\=replace=[1]Z\n    XabcY\\=substitute_overflow_length,replace=[1]Z\n    XXabcY\\=substitute_overflow_length,replace=[1]Z\n\n# a cancelled substitution\n# no \"overflow after previous overflow\" condition\n/abc/substitute_skip=1\n    XabcY\\=replace=Z\n    XabcY\\=replace=[3]Z\n    XabcY\\=substitute_overflow_length,replace=[3]Z\n    XabcY\\=substitute_replacement_only,replace=Z\n\n# the rest of the subject\n/abc/\n    XabcYY\\=replace=Z\n    XabcYY\\=replace=[3]Z\n    XabcYY\\=substitute_overflow_length,replace=[3]Z\n    XabcYY\\=substitute_overflow_length,replace=[1]Z\n    XabcYY\\=substitute_replacement_only,replace=Z\n\n# the trailing NULL\n/abc/\n    XabcY\\=replace=Z\n    XabcY\\=replace=[3]Z\n    XabcY\\=substitute_overflow_length,replace=[3]Z\n    XabcY\\=substitute_overflow_length,replace=[1]Z\n\n#\n# CHECKCASECPY tests\n#\n# The same four conditions for CHECKCASECPY as for CHECKMEMCPY:\n#   no overflow;\n#   first overflow (with/without substitute_overflow_length);\n#   overflow after previous overflow\n# Also the condition where CHECKCASECPY isn't called due to a custom callout\n#\n\n# a MARK\n/(*:pear)apple/substitute_extended\n    XappleY\\=replace=\\U${*MARK}\n    XappleY\\=replace=[3]\\U${*MARK}\n    XappleY\\=substitute_overflow_length,replace=[3]\\U${*MARK}\n    XXappleY\\=substitute_overflow_length,replace=[1]\\U${*MARK}\n    XappleY\\=substitute_case_callout,replace=\\U${*MARK}\n\n# a subject fragment\n/a(bb)c/substitute_extended\n    XabbcY\\=replace=\\U$1\n    XabbcY\\=replace=[2]\\U$1\n    XabbcY\\=substitute_overflow_length,replace=[2]\\U$1\n    XXabbcY\\=substitute_overflow_length,replace=[1]\\U$1\n    XabbcY\\=substitute_case_callout,replace=\\U$1\n\n# a zero-length subject fragment\n/a()c/substitute_extended\n    XacY\\=replace=\\U$1\n    XacY\\=replace=[2]\\U$1\n    XacY\\=substitute_overflow_length,replace=[2]\\U$1\n\n#if !ebcdic\n\n# a data character via an escape\n/abc/substitute_extended\n    XabcY\\=replace=\\U\\x{48}\n    XabcY\\=replace=[1]\\U\\x{48}\n    XabcY\\=substitute_overflow_length,replace=[1]\\U\\x{48}\n    XXabcY\\=substitute_overflow_length,replace=[1]\\U\\x{48}\n    XabcY\\=substitute_case_callout,replace=\\U\\x{48}\n\n#endif\n\n# a replacement literal character\n/abc/substitute_extended\n    XabcY\\=replace=\\UZ\n    XabcY\\=replace=[1]\\UZ\n    XabcY\\=substitute_overflow_length,replace=[1]\\UZ\n    XXabcY\\=substitute_overflow_length,replace=[1]\\UZ\n    XabcY\\=substitute_case_callout,replace=\\UZ\n\n#\n# DELAYEDFORCECASE tests\n#\n# Some different triggering conditions for DELAYEDFORCECASE:\n#   no overflow;\n#   first overflow (with/without substitute_overflow_length);\n#   if there was a previous overflow, then the case callout can't be invoked\n# Also, the CASEERROR branch.\n# Also, the branch for where chars_outstanding is zero, both with and without\n#   a previous overflow.\n#\n\n# on set casing mode\n/abc/substitute_extended,substitute_case_callout\n    XabcY\\=replace=\\Uf\\Lq\n    XabcY\\=replace=[2]\\Uf\\Lq\n    XabcY\\=substitute_overflow_length,replace=[2]\\Uf\\Lq\n    XabcY\\=substitute_overflow_length,replace=[1]\\Uf\\Lq\n    XabcY\\=replace=\\U!\\Lq\n    XabcY\\=replace=\\U\\Lq\n    XXabcY\\=substitute_overflow_length,replace=[1]\\U\\Lq\n\n# trailing fragment\n/abc/substitute_extended,substitute_case_callout\n    XabcY\\=replace=f\n    XabcY\\=replace=\\Uf\n    XabcY\\=replace=[2]\\Uf\n    XabcY\\=substitute_overflow_length,replace=[2]\\Uf\n    XabcY\\=substitute_overflow_length,replace=[1]\\Uf\n    XabcY\\=replace=\\U!\n    XabcY\\=replace=\\U\n    XXabcY\\=substitute_overflow_length,replace=[1]\\U\n\n#\n# do_case_copy tests\n#\n\n/aa/i,substitute_extended\n    XaaY\\=replace=\\Uaa\\uaa\\LAA\\lAA\\U\\lAA\\L\\uaa\\u\\LaaA\\l\\UAAa\n    XaaY\\=replace=[1]\\uaa\n    XaaY\\=replace=[2]\\uaa\n    XaaY\\=replace=[3]\\uaa\n    XaaY\\=replace=[4]\\uaa\n    XaaY\\=replace=[5]\\uaa\n    XaaY\\=replace=[1]\\u$0\n    XaaY\\=replace=[2]\\u$0\n    XaaY\\=replace=[3]\\u$0\n    XaaY\\=replace=[4]\\u$0\n    XaaY\\=replace=[5]\\u$0\n    XaaY\\=replace=[1]\\lAA\n    XaaY\\=replace=[2]\\lAA\n    XaaY\\=replace=[3]\\lAA\n    XaaY\\=replace=[4]\\lAA\n    XaaY\\=replace=[5]\\lAA\n    XAAY\\=replace=[1]\\l$0\n    XAAY\\=replace=[2]\\l$0\n    XAAY\\=replace=[3]\\l$0\n    XAAY\\=replace=[4]\\l$0\n    XAAY\\=replace=[5]\\l$0\n    XaaY\\=replace=[1]\\l\\UAa\n    XaaY\\=replace=[2]\\l\\UAa\n    XaaY\\=replace=[3]\\l\\UAa\n    XaaY\\=replace=[4]\\l\\UAa\n    XaaY\\=replace=[5]\\l\\UAa\n    XAaY\\=replace=[1]\\l\\U$0\n    XAaY\\=replace=[2]\\l\\U$0\n    XAaY\\=replace=[3]\\l\\U$0\n    XAaY\\=replace=[4]\\l\\U$0\n    XAaY\\=replace=[5]\\l\\U$0\n    XaaY\\=replace=[1]\\u\\LaA\n    XaaY\\=replace=[2]\\u\\LaA\n    XaaY\\=replace=[3]\\u\\LaA\n    XaaY\\=replace=[4]\\u\\LaA\n    XaaY\\=replace=[5]\\u\\LaA\n    XaAY\\=replace=[1]\\u\\L$0\n    XaAY\\=replace=[2]\\u\\L$0\n    XaAY\\=replace=[3]\\u\\L$0\n    XaAY\\=replace=[4]\\u\\L$0\n    XaAY\\=replace=[5]\\u\\L$0\n\n/aa/i,substitute_extended,substitute_overflow_length\n    XaaY\\=replace=[1]\\uaa\n    XaaY\\=replace=[2]\\uaa\n    XaaY\\=replace=[3]\\uaa\n    XaaY\\=replace=[4]\\uaa\n    XaaY\\=replace=[5]\\uaa\n    XaaY\\=replace=[1]\\u$0\n    XaaY\\=replace=[2]\\u$0\n    XaaY\\=replace=[3]\\u$0\n    XaaY\\=replace=[4]\\u$0\n    XaaY\\=replace=[5]\\u$0\n    XaaY\\=replace=[1]\\lAA\n    XaaY\\=replace=[2]\\lAA\n    XaaY\\=replace=[3]\\lAA\n    XaaY\\=replace=[4]\\lAA\n    XaaY\\=replace=[5]\\lAA\n    XAAY\\=replace=[1]\\l$0\n    XAAY\\=replace=[2]\\l$0\n    XAAY\\=replace=[3]\\l$0\n    XAAY\\=replace=[4]\\l$0\n    XAAY\\=replace=[5]\\l$0\n    XaaY\\=replace=[1]\\l\\UAa\n    XaaY\\=replace=[2]\\l\\UAa\n    XaaY\\=replace=[3]\\l\\UAa\n    XaaY\\=replace=[4]\\l\\UAa\n    XaaY\\=replace=[5]\\l\\UAa\n    XAaY\\=replace=[1]\\l\\U$0\n    XAaY\\=replace=[2]\\l\\U$0\n    XAaY\\=replace=[3]\\l\\U$0\n    XAaY\\=replace=[4]\\l\\U$0\n    XAaY\\=replace=[5]\\l\\U$0\n    XaaY\\=replace=[1]\\u\\LaA\n    XaaY\\=replace=[2]\\u\\LaA\n    XaaY\\=replace=[3]\\u\\LaA\n    XaaY\\=replace=[4]\\u\\LaA\n    XaaY\\=replace=[5]\\u\\LaA\n    XaAY\\=replace=[1]\\u\\L$0\n    XaAY\\=replace=[2]\\u\\L$0\n    XaAY\\=replace=[3]\\u\\L$0\n    XaAY\\=replace=[4]\\u\\L$0\n    XaAY\\=replace=[5]\\u\\L$0\n\n/aa/i,substitute_extended,substitute_case_callout\n    XaaY\\=replace=\\Uaa\\uaa\\LBB\\lBB\\U\\lBB\\L\\uaa\\u\\LaaB\\l\\UBBa\n    XaaY\\=replace=[1]\\uaa\n    XaaY\\=replace=[2]\\uaa\n    XaaY\\=replace=[3]\\uaa\n    XaaY\\=replace=[4]\\uaa\n    XaaY\\=replace=[5]\\uaa\n    XaaY\\=replace=[1]\\u$0\n    XaaY\\=replace=[2]\\u$0\n    XaaY\\=replace=[3]\\u$0\n    XaaY\\=replace=[4]\\u$0\n    XaaY\\=replace=[5]\\u$0\n    XaaY\\=replace=[1]\\lBB\n    XaaY\\=replace=[2]\\lBB\n    XaaY\\=replace=[3]\\lBB\n    XaaY\\=replace=[4]\\lBB\n    XaaY\\=replace=[5]\\lBB\n    XBBY\\=replace=[1]\\l$0\n    XBBY\\=replace=[2]\\l$0\n    XBBY\\=replace=[3]\\l$0\n    XBBY\\=replace=[4]\\l$0\n    XBBY\\=replace=[5]\\l$0\n    XaaY\\=replace=[1]\\l\\UBa\n    XaaY\\=replace=[2]\\l\\UBa\n    XaaY\\=replace=[3]\\l\\UBa\n    XaaY\\=replace=[4]\\l\\UBa\n    XaaY\\=replace=[5]\\l\\UBa\n    XBaY\\=replace=[1]\\l\\U$0\n    XBaY\\=replace=[2]\\l\\U$0\n    XBaY\\=replace=[3]\\l\\U$0\n    XBaY\\=replace=[4]\\l\\U$0\n    XBaY\\=replace=[5]\\l\\U$0\n    XaaY\\=replace=[1]\\u\\LaB\n    XaaY\\=replace=[2]\\u\\LaB\n    XaaY\\=replace=[3]\\u\\LaB\n    XaaY\\=replace=[4]\\u\\LaB\n    XaaY\\=replace=[5]\\u\\LaB\n    XaBY\\=replace=[1]\\u\\L$0\n    XaBY\\=replace=[2]\\u\\L$0\n    XaBY\\=replace=[3]\\u\\L$0\n    XaBY\\=replace=[4]\\u\\L$0\n    XaBY\\=replace=[5]\\u\\L$0\n\n/aa/i,substitute_extended,substitute_case_callout,substitute_overflow_length\n    XaaY\\=replace=[1]\\uaa\n    XaaY\\=replace=[2]\\uaa\n    XaaY\\=replace=[3]\\uaa\n    XaaY\\=replace=[4]\\uaa\n    XaaY\\=replace=[5]\\uaa\n    XaaY\\=replace=[1]\\u$0\n    XaaY\\=replace=[2]\\u$0\n    XaaY\\=replace=[3]\\u$0\n    XaaY\\=replace=[4]\\u$0\n    XaaY\\=replace=[5]\\u$0\n    XaaY\\=replace=[1]\\lBB\n    XaaY\\=replace=[2]\\lBB\n    XaaY\\=replace=[3]\\lBB\n    XaaY\\=replace=[4]\\lBB\n    XaaY\\=replace=[5]\\lBB\n    XBBY\\=replace=[1]\\l$0\n    XBBY\\=replace=[2]\\l$0\n    XBBY\\=replace=[3]\\l$0\n    XBBY\\=replace=[4]\\l$0\n    XBBY\\=replace=[5]\\l$0\n    XaaY\\=replace=[1]\\l\\UBa\n    XaaY\\=replace=[2]\\l\\UBa\n    XaaY\\=replace=[3]\\l\\UBa\n    XaaY\\=replace=[4]\\l\\UBa\n    XaaY\\=replace=[5]\\l\\UBa\n    XBaY\\=replace=[1]\\l\\U$0\n    XBaY\\=replace=[2]\\l\\U$0\n    XBaY\\=replace=[3]\\l\\U$0\n    XBaY\\=replace=[4]\\l\\U$0\n    XBaY\\=replace=[5]\\l\\U$0\n    XaaY\\=replace=[1]\\u\\LaB\n    XaaY\\=replace=[2]\\u\\LaB\n    XaaY\\=replace=[3]\\u\\LaB\n    XaaY\\=replace=[4]\\u\\LaB\n    XaaY\\=replace=[5]\\u\\LaB\n    XaBY\\=replace=[1]\\u\\L$0\n    XaBY\\=replace=[2]\\u\\L$0\n    XaBY\\=replace=[3]\\u\\L$0\n    XaBY\\=replace=[4]\\u\\L$0\n    XaBY\\=replace=[5]\\u\\L$0\n\n/aa/substitute_extended,substitute_case_callout\n    XaaY\\=replace=\\l\\U!a\n    XaaY\\=replace=\\l\\Ua!\n    XaaY\\=replace=\\ufa\n    XaaY\\=replace=[3]\\ufa\n    XaaY\\=replace=\\l\\Uaoo\n    XaaY\\=replace=[4]\\l\\Uaoo\n    XaaY\\=replace=\\l\\UPa\n    XaaY\\=replace=[3]\\l\\UPa\n    XaaY\\=replace=[4]\\l\\UPa\n    XaaY\\=replace=\\l\\UPo\n    XaaY\\=replace=[3]\\l\\UPo\n    XaaY\\=replace=[4]\\l\\UPo\n    XaaY\\=replace=\\l\\UPpp\n    XaaY\\=replace=[4]\\l\\UPpp\n    XaaY\\=replace=[5]\\l\\UPpp\n\n#\n# special test-callback case transformation tests\n#\n\n/aa/substitute_extended,substitute_case_callout\n    XaaY\\=replace=\\l!\n    XaaY\\=replace=\\ua\\lB\n    XaaY\\=replace=\\LdDZ\\UdDZ\\ud\\uD\\uZ\n    XaaY\\=replace=\\uf\\Uf\\Lf\\Us\\Ls\\uS\\lS\n    XaaY\\=replace=\\LOO\\LOQ\\UOO\\uo\\lo\n    XaaY\\=replace=\\upq\\upp\\lpp\\Upp\\Lpp\\lP\\uP\n    XaaY\\=replace=\\ll\\ul\\Ul\\LMmNn\\UMmNn\n    XaaY\\=replace=\\Uac\\Uaca\\Uak\\Uaka\\Lck\\LBK\\LBKB\\LBK \\UK\n    Xaay\\=replace=\\u\\Lqj\\u\\Lij\\u\\LIj\\u\\LiJ\\u\\LIJ\\u\\Liq\\u\\Lij\\Uij\\UiIjJ\\LiIjJ\n    Xaay\\=replace=\\Uaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n# --------------\n\n# Tests for recurse with returned captures\n\n# Parse error tests\n\n/(?1/\n\n/(?1(/\n\n/(?R(1/\n\n/(?R(1,/\n\n/(?R0(1,2!/\n\n/(?1(1,0))()/\n\n/(?1(1,+2))()/\n\n/(?1(<name>))/\n\n# Operation tests\n\n/^(?1(2))\\2(?(DEFINE)(a(.)b(.)c))/B\n  axbycx\n\\= Expect no match\n  axby\n  axbycy\n\n/^((.)(?<id>.))(?1('id'))(.)/B\n  abcde\n\n/^(?1(3,2,2,3,2))(?1(3))(?(DEFINE)(a(.)b(.)c))/B\n  a1b2cafbgc\n\n/(?1(2))#(?1(3))#(?1(4))#(?(DEFINE)((.)\\2(.)\\3(.)\\4))/\n  aabbcc#ddeeff#gghhii!aabbcc#ddeeff#gghhii#\n\\= Expect no match\n  aabbcc#ddeeff#gghhii\n\n/^(?1(1,2)){2,4}(?(DEFINE)((..)#))xx#/B\n  aa#bb#xx#\n  aa#bb#cc#xx#\n  aa#bb#cc#dd#xx#\n\\= Expect no match\n  aa#xx#\n  aa#bb#cc#dd#ee#xx#\n\n/^(?1(1,2)){2,}+(?(DEFINE)((..)#))!/B\n  aa#bb#!\n  aa#bb#cc#dd#ee#!\n\\= Expect no match\n  aa#!\n  aa#bb#cc#dd#ee#\n\n/^(?1)(?(DEFINE)(<(?2(3,4))><\\4\\3>)((..)(..)))/\n  <abcd><cdab>\n\n/(?1)#(?(DEFINE)(a(.(*ACCEPT).)b))/\n  #axyb#axax#\n\n/^(?>(?1(<n>)))!(?(DEFINE)((?<n>..)(?<n>..)))|abcde/dupnames\n  abcd!\n  abcde\n\n/<(?:[^<>]*?(?:(AB)[^<>]*|)(?:|(?R(1))))+>/\n  <aa<bb>cc<dd>ee>\n  <aa<bb<cc>dd>ee<ff<gg>hh>ii>\n  <aa<bb<cc>dd>ee\n  <aa<bb>cc<dd>AB>\n  <aa<AB>cc<dd>ee>\n  <aa<bbAB<cc>dd>ee\n  <aa<bb<ABcc>dd>ee<ff<gg>hh>ii>\n  <aa<bb<cc>dd>ee<ff<gg>hABhABh>ii>\n\n/(?:(?1(<prefix>))#){4}(?(DEFINE)((?(<prefix>)\\2)(?<prefix>.{3})))$/\n  abc#abcdef#defghi#ghijkl#\n  abc#abcdef#defghi#ghijkl#jklmno#\n  abc#abcdef#defghi#ghijkl#jklmno#mnopqr#\n\\= Expect no match\n  abc#abcdef#defghi#ghijkl\n  abc#abcdef#defghi#ghXjkl#\n\n% # Define the routine \"weekendday\" which matches Saturday or Sunday, and\n  # returns the Sat/Sun prefix as \\k<short>.\n  (?(DEFINE)(?<weekendday>(?|(?<short>Sat)urday|(?<short>Sun)day)))\n  # Call the routine. Matches \"Saturday,Sat\" or \"Sunday,Sun\".\n  (?&weekendday(<short>)),\\k<short> %x\n  Saturday,Sat\n  Sunday,Sun\n\\= Expect no match\n  Saturday,Sun\n\n/()()()(?2(2,3,2,3,2))/B\n  abc\n\n# Test each syntax used for recursion\n\n/(?(R)(Sat)urday|(?R(1)),\\1)/\n    Saturday,Sat\n\n/(?(DEFINE)((Sat)urday))(?1(2)),\\2/\n    Saturday,Sat\n\n/(?(DEFINE)((Sat)urday))(?-2(-1)),\\2/\n    Saturday,Sat\n\n/(?+1(+2)),\\2(?(DEFINE)((Sat)urday))/\n    Saturday,Sat\n\n/(?(DEFINE)(?<fn>(?<ret>Sat)urday))(?&fn('ret')),\\k<ret>/\n    Saturday,Sat\n\n/(?(DEFINE)(?<fn>(?<ret>Sat)urday))(?P>fn(<ret>)),\\k<ret>/\n    Saturday,Sat\n\n/(?(DEFINE)(?<fn>(?<ret>Sat)urday))\\g<fn('ret')>,\\k<ret>/\n\n/(?(DEFINE)((Sat)urday))(?1),\\2/\n\\= Expect no match\n    Saturday,Sat\n\n/(?(DEFINE)((Sat)urday))(?1()),\\2/\n\n/(?(DEFINE)((Sat)(urday)))(?1(2,3)),\\2,\\3/\n    Saturday,Sat,urday\n\n# --------------\n\n# Test that a memory leak has been fixed\n/x/replace=r,substitute_matched\n    x\\=null_subject\n\n# Test that a couple of double frees have been fixed\n/foo/replace=bar,substitute_matched\n    foo\\=copy_matched_subject\n    foo\\=global,copy_matched_subject\n\n# Tests for reading matches from NULL subjects\n/(.?)/\n    \\=null_subject,copy=0,copy=1,get=0,get=1,getall\n\n# --------------\n# A batch of additional tests of pcre2_substitute error cases\n# --------------\n\n# Some baseline tests of the NULL-handling cases\n\n/\\w+|^$/replace=<$&>,global\n    :::\n    \\=null_subject\n    foo\\=zero_terminate\n    \\=null_subject,zero_terminate\n    foo|bar\\=offset=1\n\n/\\w+|^$/replace=<$&>,global,substitute_matched\n    :::\n    \\=null_subject\n    foo\\=zero_terminate\n    \\=null_subject,zero_terminate\n    foo|bar\\=offset=1\n\n/\\w+|^$/replace=<$&>,global,null_substitute_match_data\n    :::\n    \\=null_subject\n    foo\\=zero_terminate\n    \\=null_subject,zero_terminate\n    foo|bar\\=offset=1\n\n/\\w+|^$/replace=<$&>,global,substitute_matched,null_substitute_match_data\n    :::\n    \\=null_subject\n    foo\\=zero_terminate\n    \\=null_subject,zero_terminate\n    foo|bar\\=offset=1\n\n# Now some NULL context tests\n\n/\\w+|^$/replace=<$&>,global\n    :::\\=null_context\n    foo\\=null_context\n    :::\\=null_context,null_substitute_match_data\n    foo\\=null_context,null_substitute_match_data\n    :::\\=null_context,substitute_matched\n    foo\\=null_context,substitute_matched\n    :::\\=null_context,null_substitute_match_data,substitute_matched\n    foo\\=null_context,null_substitute_match_data,substitute_matched\n\n# Failed matches: no-match; partial; other failure (callout-triggered)\n\n/abc/replace=yy\n    zABCz\n    zABCz\\=substitute_matched\n\n/abc/\n    ab\\=replace=yy,partial_hard\n    ab\\=replace=yy,partial_hard,substitute_matched\n\n/(?C1)abc/replace=yy\n    zabcz\\=callout_error=1\n    zabcz\\=callout_error=1,substitute_matched\n\n# Exercise PCRE2_ERROR_DIFFSUBSSUBJECT branches\n\n# Changing the length is always an error\n# (using PCRE2_ZERO_TERMINATED but with different length strings also counts)\n# Using PCRE2_ZERO_TERMINATED vs a concrete length doesn't count as changing the length\n/\\w+|^$/replace=<$&>,global,substitute_matched\n    foo\\=substitute_subject=foo\n    foo\\=substitute_subject=foo,copy_matched_subject\n    foo\\=substitute_subject=foo,zero_terminate\n    foo\\=substitute_subject=f\n    foo\\=substitute_subject=f,copy_matched_subject\n    foo\\=substitute_subject=f,zero_terminate\n    \\\n    \\=copy_matched_subject\n    \\=zero_terminate\n    \\=null_subject\n    \\=null_subject,copy_matched_subject\n\n# Keeping the length the same, the offset the same, and the pointer the same\n# Is ok, even if the contents DIFFER\n/\\w+|^$/replace=<$&>,global,substitute_matched\n    foo|bar\\=offset=1,substitute_subject=F|OOBAR\n    foo|bar\\=offset=1,substitute_subject=F|OOBAR,zero_terminate\n\n# With copy_matched_subject however we are able to detect the mismatch\n/\\w+|^$/replace=<$&>,global,substitute_matched\n    foo|bar\\=offset=1,substitute_subject=foo|bar,copy_matched_subject\n    foo|bar\\=offset=1,substitute_subject=F|OOBAR,copy_matched_subject\n    foo|bar\\=offset=1,substitute_subject=F|OOBAR,copy_matched_subject,zero_terminate\n\n# --------------\n# Some more tests for a substitution regression\n# --------------\n\n/foo(?<Bar>BAR)?/substitute_extended,replace=X${Bar:+\\:\\:text}Y\n    foo\n    fooBAR\n\n# --------------\n# Tests for substitution with partial\n# --------------\n\n/(a)b+/\n\\= Expect to fail with \"bad option\"\n    ab\\=ph,replace=FOO\n\\= Expect to fail with \"partial match\"\n    ab\\=ph,substitute_replacement_only,replace=FOO\n\\= Expect success\n    abc\\=ph,substitute_replacement_only,replace=FOO\n    zabc\\=ph,substitute_replacement_only,replace=>$&|$1|$`<\n\\= Expect to fail with PCRE2_ERROR_PARTIALSUBS\n    abc\\=ph,substitute_replacement_only,replace=>$_<\n    abc\\=ph,substitute_replacement_only,replace=>$'<\n\n/(a)b+/\n\\= Expect to fail with \"bad option\"\n    ab\\=ps,replace=FOO\n\\= Expect to fail with \"partial match\"\n    a\\=ps,substitute_replacement_only,replace=FOO\n\\= Expect success\n    ab\\=ps,substitute_replacement_only,replace=FOO\n    abc\\=ps,substitute_replacement_only,replace=FOO\n    zabc\\=ps,substitute_replacement_only,replace=>$&|$1|$`<\n\\= Expect to fail with PCRE2_ERROR_PARTIALSUBS\n    abc\\=ps,substitute_replacement_only,replace=>$_<\n    abc\\=ps,substitute_replacement_only,replace=>$'<\n\n# End of testinput2\n"
  },
  {
    "path": "testdata/testinput20",
    "content": "# This set of tests exercises the serialization/deserialization and code copy\n# functions in the library. It does not use UTF or JIT.\n\n#forbid_utf\n\n# Compile several patterns, push them onto the stack, and then write them\n# all to a file.\n\n#pattern push\n\n/(?<NAME>(?&NAME_PAT))\\s+(?<ADDR>(?&ADDRESS_PAT))\n  (?(DEFINE)\n  (?<NAME_PAT>[a-z]+)\n  (?<ADDRESS_PAT>\\d+)\n  )/x\n/^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$/i\n\n#save testsaved1\n\n# Do it again for some more patterns.\n\n/(*MARK:A)(*SKIP:B)(C|X)/mark\n/(?:(?<n>foo)|(?<n>bar))\\k<n>/dupnames\n\n#save testsaved2\n#pattern -push\n\n# Reload the patterns, then pop them one by one and check them.\n\n#load testsaved1\n#load testsaved2\n\n#pop info\n    foofoo\n    barbar\n\n#pop mark\n    C\n\\= Expect no match\n    D\n\n#pop\n    AmanaplanacanalPanama\n\n#pop info\n    metcalfe 33\n\n# Check for an error when different tables are used.\n\n/abc/push,tables=1\n/xyz/push,tables=2\n#save testsaved1\n\n#pop\n    xyz\n\n#pop\n    abc\n\n#pop should give an error\n    pqr\n\n/abcd/pushcopy\n    abcd\n\n#pop\n    abcd\n\n#pop should give an error\n\n/abcd/push\n#popcopy\n    abcd\n\n#pop\n    abcd\n\n/abcd/push\n#save testsaved1\n#pop should give an error\n\n#load testsaved1\n#popcopy\n    abcd\n\n#pop\n    abcd\n\n#pop should give an error\n\n/abcd/pushtablescopy\n    abcd\n\n#popcopy\n    abcd\n\n#pop\n    abcd\n\n# Must only specify one of these\n\n//push,pushcopy\n\n//push,pushtablescopy\n\n//pushcopy,pushtablescopy\n\n# End of testinput20\n"
  },
  {
    "path": "testdata/testinput21",
    "content": "# These are tests of \\C that do not involve UTF. They are not run when \\C is\n# disabled by compiling with --enable-never-backslash-C.\n\n/\\C+\\D \\C+\\d \\C+\\S \\C+\\s \\C+\\W \\C+\\w \\C+. \\C+\\R \\C+\\H \\C+\\h \\C+\\V \\C+\\v \\C+\\Z \\C+\\z \\C+$/Bx\n\n/\\D+\\C \\d+\\C \\S+\\C \\s+\\C \\W+\\C \\w+\\C .+\\C \\R+\\C \\H+\\C \\h+\\C \\V+\\C \\v+\\C a+\\C \\n+\\C \\C+\\C/Bx\n\n/ab\\Cde/never_backslash_c\n\n/ab\\Cde/info\n    abXde\n    \n/(?<=ab\\Cde)X/\n    abZdeX\n\n/[\\C]/\n\n# End of testinput21\n"
  },
  {
    "path": "testdata/testinput22",
    "content": "# Tests of \\C when Unicode support is available. Note that \\C is not supported\n# for DFA matching in UTF mode, so this test is not run with -dfa. The output\n# of this test is different in 8-, 16-, and 32-bit modes. Some tests may match\n# in some widths and not in others.\n\n/ab\\Cde/utf,info\n    abXde\n\n# This should produce an error diagnostic (\\C in UTF lookbehind) in 8-bit and\n# 16-bit modes, but not in 32-bit mode.\n\n/(?<=ab\\Cde)X/utf\n    ab!deXYZ\n\n# Autopossessification tests\n\n/\\C+\\X \\X+\\C/Bx\n\n/\\C+\\X \\X+\\C/Bx,utf\n\n/\\C\\X*TӅ;\r\n{0,6}\\v+\rF\n/utf\n\\= Expect no match\n    Ӆ\\x0a\n\n/\\C(\\W?ſ)'?{{/utf\n\\= Expect no match\n    \\\\C(\\\\W?ſ)'?{{\n\n/X(\\C{3})/utf\n    X\\x{1234}\n    X\\x{11234}Y\n    X\\x{11234}YZ\n\n/X(\\C{4})/utf\n    X\\x{1234}YZ\n    X\\x{11234}YZ\n    X\\x{11234}YZW\n\n/X\\C*/utf\n    XYZabcdce\n\n/X\\C*?/utf\n    XYZabcde\n\n/X\\C{3,5}/utf\n    Xabcdefg\n    X\\x{1234}\n    X\\x{1234}YZ\n    X\\x{1234}\\x{512}\n    X\\x{1234}\\x{512}YZ\n    X\\x{11234}Y\n    X\\x{11234}YZ\n    X\\x{11234}\\x{512}\n    X\\x{11234}\\x{512}YZ\n    X\\x{11234}\\x{512}\\x{11234}Z\n\n/X\\C{3,5}?/utf\n    Xabcdefg\n    X\\x{1234}\n    X\\x{1234}YZ\n    X\\x{1234}\\x{512}\n    X\\x{11234}Y\n    X\\x{11234}YZ\n    X\\x{11234}\\x{512}YZ\n    X\\x{11234}\n\n/a\\Cb/utf\n    aXb\n    a\\nb\n    a\\x{100}b\n\n/a\\C\\Cb/utf\n    a\\x{100}b\n    a\\x{12257}b\n    a\\x{12257}\\x{11234}b\n\n/ab\\Cde/utf\n    abXde\n\n# This one is here not because it's different to Perl, but because the way\n# the captured single code unit is displayed. (In Perl it becomes a character,\n# and you can't tell the difference.)\n\n/X(\\C)(.*)/utf\n    X\\x{1234}\n    X\\nabc\n\n# This one is here because Perl gives out a grumbly error message (quite\n# correctly, but that messes up comparisons).\n\n/a\\Cb/utf\n\\= Expect no match in 8-bit mode\n    a\\x{100}b\n\n/^ab\\C/utf,no_start_optimize\n\\= Expect no match - tests \\C at end of subject\n    ab\n\n/\\C[^\\v]+\\x80/utf\n    [AΏBŀC]\n\n/\\C[^\\d]+\\x80/utf\n    [AΏBŀC]\n\n# End of testinput22\n"
  },
  {
    "path": "testdata/testinput23",
    "content": "# This test is run when PCRE2 has been built with --enable-never-backslash-C,\n# which disables the use of \\C. All we can do is check that it gives the \n# correct error message.\n\n/a\\Cb/\n\n/a[\\C]b/\n\n# End of testinput23\n"
  },
  {
    "path": "testdata/testinput24",
    "content": "# This file tests the auxiliary pattern conversion features of the PCRE2\n# library, in non-UTF mode.\n\n#forbid_utf\n#newline_default lf any anycrlf\n\n# -------- Tests of glob conversion --------\n\n# Set the glob separator explicitly so that different OS defaults are not a\n# problem. Then test various errors.\n\n#pattern convert=glob,convert_glob_escape=\\,convert_glob_separator=/\n\n/abc/posix\n\n# Separator must be / \\ or .\n\n/a*b/convert_glob_separator=%\n\n# Can't have separator in a class\n\n\"[ab/cd]\"\n\n#if !ebcdic\n\n\"[,-/]\"\n\n#endif\n\n/[ab/\n\n# Length check\n\n/abc/convert_length=0\n\n/abc/convert_length=1\n\n/abc/convert_length=11\n\n/abc/convert_length=12\n\n# Now some actual tests\n\n/a?b[]xy]*c/\n    azb]1234c\n\n# Tests from the gitwildmatch list, with some additions\n\n/foo/\n    foo\n/= Expect no match\n    bar\n\n//\n    \\\n\n/???/\n    foo\n\\= Expect no match\n    foobar\n\n/*/\n    foo\n    \\\n\n/f*/\n    foo\n    f\n\n/*f/\n    oof\n\\= Expect no match\n    foo\n\n/*foo*/\n    foo\n    food\n    aprilfool\n\n/*ob*a*r*/\n    foobar\n\n/*ab/\n    aaaaaaabababab\n\n/foo\\*/\n    foo*\n\n/foo\\*bar/\n\\= Expect no match\n    foobar\n\n/f\\\\oo/\n    f\\\\oo\n\n/*[al]?/\n    ball\n\n/[ten]/\n\\= Expect no match\n    ten\n\n/t[a-g]n/\n    ten\n\n/a[]]b/\n    a]b\n\n/a[]a-]b/\n\n/a[]-]b/\n    a-b\n    a]b\n\\= Expect no match\n    aab\n\n/a[]a-z]b/\n    aab\n\n/]/\n    ]\n\n/t[!a-g]n/\n    ton\n\\= Expect no match\n    ten\n\n'[[:alpha:]][[:digit:]][[:upper:]]'\n    a1B\n\n'[[:digit:][:upper:][:space:]]'\n    A\n    1\n    \\ \\=\n\\= Expect no match\n    a\n    .\n\n'[a-c[:digit:]x-z]'\n    5\n    b\n    y\n\\= Expect no match\n    q\n\n# End of gitwildmatch tests\n\n/*.j?g/\n    pic01.jpg\n    .jpg\n    pic02.jxg\n\\= Expect no match\n    pic03.j/g\n\n#if !ebcdic\n\n/A[+-0]B/\n    A+B\n    A.B\n    A0B\n\\= Expect no match\n    A/B\n\n#endif\n\n/*x?z/\n    abc.xyz\n\\= Expect no match\n    .xyz\n\n/?x?z/\n    axyz\n\\= Expect no match\n    .xyz\n\n#if !ebcdic\n\n\"[,-0]x?z\"\n    ,xyz\n\\= Expect no match\n    /xyz\n    .xyz\n\n#endif\n\n\".x*\"\n    .xabc\n\n#if !ebcdic\n\n/a[--0]z/\n    a-z\n    a.z\n    a0z\n\\= Expect no match\n    a/z\n    a1z\n\n#endif\n\n/<[a-c-d]>/\n    <a>\n    <b>\n    <c>\n    <d>\n    <->\n\n/a[[:digit:].]z/\n    a1z\n    a.z\n\\= Expect no match\n    a:z\n\n/a[[:digit].]z/\n    a[.]z\n    a:.]z\n    ad.]z\n\n/<[[:a[:digit:]b]>/\n    <[>\n    <:>\n    <a>\n    <9>\n    <b>\n\\= Expect no match\n    <d>\n\n/a*b/convert_glob_separator=\\\n\n/a*b/convert_glob_separator=.\n\n/a*b/convert_glob_separator=/\n\n# Non control character checking\n\n/A\\B\\\\C\\D/\n\n/\\\\{}\\?\\*+\\[\\]()|.^$/\n\n/*a*\\/*b*/\n\n/?a?\\/?b?/\n\n/[a\\\\b\\c][]][-][\\]\\-]/\n\n/[^a\\\\b\\c][!]][!-][^\\]\\-]/\n\n/[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:word:][:xdigit:]]/\n\n\"[/-/]\"\n\n/[-----]/\n\n/[------]/\n\n/[!------]/\n\n/[[:alpha:]-a]/\n\n/[[:alpha:]][[:punct:]][[:ascii:]]/\n\n/[a-[:alpha:]]/\n\n/[[:alpha:/\n\n/[[:alpha:]/\n\n/[[:alphaa:]]/\n\n/[[:xdigi:]]/\n\n/[[:xdigit::]]/\n\n/****/\n\n/**\\/abc/\n  abc\n  x/abc\n  xabc\n\n/abc\\/**/\n\n/abc\\/**\\/abc/\n\n/**\\/*a*b*g*n*t/\n  abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt\n\n/**\\/*a*\\/**/\n  xx/xx/xx/xax/xx/xb\n\n/**\\/*a*/\n  xx/xx/xx/xax\n  xx/xx/xx/xax/xx\n\n/**\\/*a*\\/**\\/*b*/\n  xx/xx/xx/xax/xx/xb\n  xx/xx/xx/xax/xx/x\n\n\"**a\"convert=glob\n  a\n  c/b/a\n  c/b/aaa\n\n\"a**/b\"convert=glob\n  a/b\n  ab\n\n\"a/**b\"convert=glob\n  a/b\n  ab\n\n#pattern convert=glob:glob_no_starstar\n\n/***/\n\n/**a**/\n\n#pattern convert=unset\n#pattern convert=glob:glob_no_wild_separator\n\n/*/\n\n/*a*/\n\n/**a**/\n\n/a*b/\n\n/*a*b*/\n\n/??a??/\n\n#pattern convert=unset\n#pattern convert=glob,convert_glob_escape=0\n\n/a\\b\\cd/\n\n/**\\/a/\n\n/a`*b/convert_glob_escape=`\n\n/a`*b/convert_glob_escape=0\n\n/a`*b/convert_glob_escape=x\n\n# Tests of null and empty inputs\n\n/a*b/use_length\n\n//use_length\n\n# Error\n/a*b/null_pattern\n\n# Error\n//null_pattern\n\n# Error\n/a*b/use_length,null_pattern\n\n# Kind-of error... pattern conversion succeeds, but it converts to a non-empty\n# pattern, and null_pattern applies to the regex parse afterwards too, which\n# fails.\n//use_length,null_pattern\n\n# -------- Tests of extended POSIX conversion --------\n\n#pattern convert=unset:posix_extended\n\n/<[[:a[:digit:]b]>/\n    <[>\n    <:>\n    <a>\n    <9>\n    <b>\n\\= Expect no match\n    <d>\n\n/a+\\1b\\\\c|d[ab\\c]/\n\n/<[]bc]>/\n    <]>\n    <b>\n    <c>\n\n/<[^]bc]>/\n    <.>\n\\= Expect no match\n    <]>\n    <b>\n\n/(a)\\1b/\n    a1b\n\\= Expect no match\n    aab\n\n/(ab)c)d]/\n    Xabc)d]Y\n\n/a***b/\n\n# Tests of empty inputs\n\n/a*b/use_length\n\n//use_length\n\n# -------- Tests of basic POSIX conversion --------\n\n#pattern convert=unset:posix_basic\n\n/a*b+c\\+[def](ab)\\(cd\\)/\n\n/\\(a\\)\\1b/\n    aab\n\\= Expect no match\n    a1b\n\n/how.to how\\.to/\n    how\\nto how.to\n\\= Expect no match     \n    how\\x{0}to how.to\n\n/^how to \\^how to/\n\n/^*abc/\n\n/*abc/\n    X*abcY\n\n/**abc/\n    XabcY\n    X*abcY\n    X**abcY\n    \n/*ab\\(*cd\\)/ \n\n/^b\\(c^d\\)\\(^e^f\\)/\n\n/a***b/\n\n# Tests of empty inputs\n\n/a*b/use_length\n\n//use_length\n\n# End of testinput24\n"
  },
  {
    "path": "testdata/testinput25",
    "content": "# This file tests the auxiliary pattern conversion features of the PCRE2 \n# library, in UTF mode.\n\n#newline_default lf any anycrlf\n\n# -------- Tests of glob conversion --------\n\n# Set the glob separator explicitly so that different OS defaults are not a\n# problem. Then test various errors.\n\n#pattern convert=glob,convert_glob_escape=\\,convert_glob_separator=/\n\n# The fact that this one works in 13 bytes in the 8-bit library shows that the\n# output is in UTF-8, though pcre2test shows the character as an escape.\n\n/'>' c4 a3 '<'/hex,utf,convert_length=13\n\n# This expansion creates a string that is too long for the input buffer.\n\n/\\[()]{65535}()/expand\n\n# End of testinput25\n"
  },
  {
    "path": "testdata/testinput26",
    "content": "# These tests were generated by maint/GenerateTest.py using PCRE2's UCP\n# data, do not edit unless that data has changed and they are reflecting\n# a previous version.\n\n# Unicode Script Extension tests for version 15.0.0\n\n#perltest\n\n# Base script check\n/^\\p{sc=Latin}/utf\n    A\n\n/^\\p{Script=Latn}/utf\n    \\x{1df2a}\n\n# Script extension check\n/^\\p{Latin}/utf\n    \\x{363}\n\n/^\\p{scx=Latn}/utf\n    \\x{a92e}\n\n# Script extension only character\n/^\\p{Latin}/utf\n    \\x{363}\n\n/^\\p{sc=Latin}/utf\n    \\x{363}\n\n# Character not in script\n/^\\p{Latin}/utf\n    \\x{1df2b}\n\n# Base script check\n/^\\p{sc=Greek}/utf\n    \\x{370}\n\n/^\\p{Script=Grek}/utf\n    \\x{1d245}\n\n# Script extension check\n/^\\p{Greek}/utf\n    \\x{342}\n\n/^\\p{Script_Extensions=Grek}/utf\n    \\x{1dc1}\n\n# Script extension only character\n/^\\p{Greek}/utf\n    \\x{342}\n\n/^\\p{sc=Greek}/utf\n    \\x{342}\n\n# Character not in script\n/^\\p{Greek}/utf\n    \\x{1d246}\n\n# Base script check\n/^\\p{sc=Cyrillic}/utf\n    \\x{400}\n\n/^\\p{Script=Cyrl}/utf\n    \\x{1e08f}\n\n# Script extension check\n/^\\p{Cyrillic}/utf\n    \\x{483}\n\n/^\\p{scx=Cyrl}/utf\n    \\x{a66f}\n\n# Script extension only character\n/^\\p{Cyrillic}/utf\n    \\x{2e43}\n\n/^\\p{sc=Cyrillic}/utf\n    \\x{2e43}\n\n# Character not in script\n/^\\p{Cyrillic}/utf\n    \\x{1e090}\n\n# Base script check\n/^\\p{sc=Arabic}/utf\n    \\x{600}\n\n/^\\p{Script=Arab}/utf\n    \\x{1eef1}\n\n# Script extension check\n/^\\p{Arabic}/utf\n    \\x{60c}\n\n/^\\p{Script_Extensions=Arab}/utf\n    \\x{102fb}\n\n# Script extension only character\n/^\\p{Arabic}/utf\n    \\x{102e0}\n\n/^\\p{sc=Arabic}/utf\n    \\x{102e0}\n\n# Character not in script\n/^\\p{Arabic}/utf\n    \\x{1eef2}\n\n# Base script check\n/^\\p{sc=Syriac}/utf\n    \\x{700}\n\n/^\\p{Script=Syrc}/utf\n    \\x{86a}\n\n# Script extension check\n/^\\p{Syriac}/utf\n    \\x{60c}\n\n/^\\p{scx=Syrc}/utf\n    \\x{1dfa}\n\n# Script extension only character\n/^\\p{Syriac}/utf\n    \\x{1dfa}\n\n/^\\p{sc=Syriac}/utf\n    \\x{1dfa}\n\n# Character not in script\n/^\\p{Syriac}/utf\n    \\x{1dfb}\n\n# Base script check\n/^\\p{sc=Thaana}/utf\n    \\x{780}\n\n/^\\p{Script=Thaa}/utf\n    \\x{7b1}\n\n# Script extension check\n/^\\p{Thaana}/utf\n    \\x{60c}\n\n/^\\p{Script_Extensions=Thaa}/utf\n    \\x{fdfd}\n\n# Script extension only character\n/^\\p{Thaana}/utf\n    \\x{fdf2}\n\n/^\\p{sc=Thaana}/utf\n    \\x{fdf2}\n\n# Character not in script\n/^\\p{Thaana}/utf\n    \\x{fdfe}\n\n# Base script check\n/^\\p{sc=Devanagari}/utf\n    \\x{900}\n\n/^\\p{Script=Deva}/utf\n    \\x{11b09}\n\n# Script extension check\n/^\\p{Devanagari}/utf\n    \\x{951}\n\n/^\\p{scx=Deva}/utf\n    \\x{a8f3}\n\n# Script extension only character\n/^\\p{Devanagari}/utf\n    \\x{1cd1}\n\n/^\\p{sc=Devanagari}/utf\n    \\x{1cd1}\n\n# Character not in script\n/^\\p{Devanagari}/utf\n    \\x{11b0a}\n\n# Base script check\n/^\\p{sc=Bengali}/utf\n    \\x{980}\n\n/^\\p{Script=Beng}/utf\n    \\x{9fe}\n\n# Script extension check\n/^\\p{Bengali}/utf\n    \\x{951}\n\n/^\\p{Script_Extensions=Beng}/utf\n    \\x{a8f1}\n\n# Script extension only character\n/^\\p{Bengali}/utf\n    \\x{1cf7}\n\n/^\\p{sc=Bengali}/utf\n    \\x{1cf7}\n\n# Character not in script\n/^\\p{Bengali}/utf\n    \\x{a8f2}\n\n# Base script check\n/^\\p{sc=Gurmukhi}/utf\n    \\x{a01}\n\n/^\\p{Script=Guru}/utf\n    \\x{a76}\n\n# Script extension check\n/^\\p{Gurmukhi}/utf\n    \\x{951}\n\n/^\\p{scx=Guru}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Gurmukhi}/utf\n    \\x{a836}\n\n/^\\p{sc=Gurmukhi}/utf\n    \\x{a836}\n\n# Character not in script\n/^\\p{Gurmukhi}/utf\n    \\x{a83a}\n\n# Base script check\n/^\\p{sc=Gujarati}/utf\n    \\x{a81}\n\n/^\\p{Script=Gujr}/utf\n    \\x{aff}\n\n# Script extension check\n/^\\p{Gujarati}/utf\n    \\x{951}\n\n/^\\p{Script_Extensions=Gujr}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Gujarati}/utf\n    \\x{a836}\n\n/^\\p{sc=Gujarati}/utf\n    \\x{a836}\n\n# Character not in script\n/^\\p{Gujarati}/utf\n    \\x{a83a}\n\n# Base script check\n/^\\p{sc=Oriya}/utf\n    \\x{b01}\n\n/^\\p{Script=Orya}/utf\n    \\x{b77}\n\n# Script extension check\n/^\\p{Oriya}/utf\n    \\x{951}\n\n/^\\p{scx=Orya}/utf\n    \\x{1cf2}\n\n# Script extension only character\n/^\\p{Oriya}/utf\n    \\x{1cda}\n\n/^\\p{sc=Oriya}/utf\n    \\x{1cda}\n\n# Character not in script\n/^\\p{Oriya}/utf\n    \\x{1cf3}\n\n# Base script check\n/^\\p{sc=Tamil}/utf\n    \\x{b82}\n\n/^\\p{Script=Taml}/utf\n    \\x{11fff}\n\n# Script extension check\n/^\\p{Tamil}/utf\n    \\x{951}\n\n/^\\p{Script_Extensions=Taml}/utf\n    \\x{11fd3}\n\n# Script extension only character\n/^\\p{Tamil}/utf\n    \\x{a8f3}\n\n/^\\p{sc=Tamil}/utf\n    \\x{a8f3}\n\n# Character not in script\n/^\\p{Tamil}/utf\n    \\x{12000}\n\n# Base script check\n/^\\p{sc=Telugu}/utf\n    \\x{c00}\n\n/^\\p{Script=Telu}/utf\n    \\x{c7f}\n\n# Script extension check\n/^\\p{Telugu}/utf\n    \\x{951}\n\n/^\\p{scx=Telu}/utf\n    \\x{1cf2}\n\n# Script extension only character\n/^\\p{Telugu}/utf\n    \\x{1cda}\n\n/^\\p{sc=Telugu}/utf\n    \\x{1cda}\n\n# Character not in script\n/^\\p{Telugu}/utf\n    \\x{1cf3}\n\n# Base script check\n/^\\p{sc=Kannada}/utf\n    \\x{c80}\n\n/^\\p{Script=Knda}/utf\n    \\x{cf3}\n\n# Script extension check\n/^\\p{Kannada}/utf\n    \\x{951}\n\n/^\\p{Script_Extensions=Knda}/utf\n    \\x{a835}\n\n# Script extension only character\n/^\\p{Kannada}/utf\n    \\x{1cf4}\n\n/^\\p{sc=Kannada}/utf\n    \\x{1cf4}\n\n# Character not in script\n/^\\p{Kannada}/utf\n    \\x{a836}\n\n# Base script check\n/^\\p{sc=Malayalam}/utf\n    \\x{d00}\n\n/^\\p{Script=Mlym}/utf\n    \\x{d7f}\n\n# Script extension check\n/^\\p{Malayalam}/utf\n    \\x{951}\n\n/^\\p{scx=Mlym}/utf\n    \\x{a832}\n\n# Script extension only character\n/^\\p{Malayalam}/utf\n    \\x{1cda}\n\n/^\\p{sc=Malayalam}/utf\n    \\x{1cda}\n\n# Character not in script\n/^\\p{Malayalam}/utf\n    \\x{a833}\n\n# Base script check\n/^\\p{sc=Sinhala}/utf\n    \\x{d81}\n\n/^\\p{Script=Sinh}/utf\n    \\x{111f4}\n\n# Script extension check\n/^\\p{Sinhala}/utf\n    \\x{964}\n\n/^\\p{Script_Extensions=Sinh}/utf\n    \\x{965}\n\n# Script extension only character\n/^\\p{Sinhala}/utf\n    \\x{964}\n\n/^\\p{sc=Sinhala}/utf\n    \\x{964}\n\n# Character not in script\n/^\\p{Sinhala}/utf\n    \\x{111f5}\n\n# Base script check\n/^\\p{sc=Myanmar}/utf\n    \\x{1000}\n\n/^\\p{Script=Mymr}/utf\n    \\x{aa7f}\n\n# Script extension check\n/^\\p{Myanmar}/utf\n    \\x{1040}\n\n/^\\p{scx=Mymr}/utf\n    \\x{a92e}\n\n# Script extension only character\n/^\\p{Myanmar}/utf\n    \\x{a92e}\n\n/^\\p{sc=Myanmar}/utf\n    \\x{a92e}\n\n# Character not in script\n/^\\p{Myanmar}/utf\n    \\x{aa80}\n\n# Base script check\n/^\\p{sc=Georgian}/utf\n    \\x{10a0}\n\n/^\\p{Script=Geor}/utf\n    \\x{2d2d}\n\n# Script extension check\n/^\\p{Georgian}/utf\n    \\x{10fb}\n\n/^\\p{Script_Extensions=Geor}/utf\n    \\x{10fb}\n\n# Script extension only character\n/^\\p{Georgian}/utf\n    \\x{10fb}\n\n/^\\p{sc=Georgian}/utf\n    \\x{10fb}\n\n# Character not in script\n/^\\p{Georgian}/utf\n    \\x{2d2e}\n\n# Base script check\n/^\\p{sc=Hangul}/utf\n    \\x{1100}\n\n/^\\p{Script=Hang}/utf\n    \\x{ffdc}\n\n# Script extension check\n/^\\p{Hangul}/utf\n    \\x{3001}\n\n/^\\p{scx=Hang}/utf\n    \\x{ff65}\n\n# Script extension only character\n/^\\p{Hangul}/utf\n    \\x{3003}\n\n/^\\p{sc=Hangul}/utf\n    \\x{3003}\n\n# Character not in script\n/^\\p{Hangul}/utf\n    \\x{ffdd}\n\n# Base script check\n/^\\p{sc=Mongolian}/utf\n    \\x{1800}\n\n/^\\p{Script=Mong}/utf\n    \\x{1166c}\n\n# Script extension check\n/^\\p{Mongolian}/utf\n    \\x{1802}\n\n/^\\p{Script_Extensions=Mong}/utf\n    \\x{202f}\n\n# Script extension only character\n/^\\p{Mongolian}/utf\n    \\x{202f}\n\n/^\\p{sc=Mongolian}/utf\n    \\x{202f}\n\n# Character not in script\n/^\\p{Mongolian}/utf\n    \\x{1166d}\n\n# Base script check\n/^\\p{sc=Hiragana}/utf\n    \\x{3041}\n\n/^\\p{Script=Hira}/utf\n    \\x{1f200}\n\n# Script extension check\n/^\\p{Hiragana}/utf\n    \\x{3001}\n\n/^\\p{scx=Hira}/utf\n    \\x{ff9f}\n\n# Script extension only character\n/^\\p{Hiragana}/utf\n    \\x{3031}\n\n/^\\p{sc=Hiragana}/utf\n    \\x{3031}\n\n# Character not in script\n/^\\p{Hiragana}/utf\n    \\x{1f201}\n\n# Base script check\n/^\\p{sc=Katakana}/utf\n    \\x{30a1}\n\n/^\\p{Script=Kana}/utf\n    \\x{1b167}\n\n# Script extension check\n/^\\p{Katakana}/utf\n    \\x{3001}\n\n/^\\p{Script_Extensions=Kana}/utf\n    \\x{ff9f}\n\n# Script extension only character\n/^\\p{Katakana}/utf\n    \\x{3031}\n\n/^\\p{sc=Katakana}/utf\n    \\x{3031}\n\n# Character not in script\n/^\\p{Katakana}/utf\n    \\x{1b168}\n\n# Base script check\n/^\\p{sc=Bopomofo}/utf\n    \\x{2ea}\n\n/^\\p{Script=Bopo}/utf\n    \\x{31bf}\n\n# Script extension check\n/^\\p{Bopomofo}/utf\n    \\x{3001}\n\n/^\\p{scx=Bopo}/utf\n    \\x{ff65}\n\n# Script extension only character\n/^\\p{Bopomofo}/utf\n    \\x{302a}\n\n/^\\p{sc=Bopomofo}/utf\n    \\x{302a}\n\n# Character not in script\n/^\\p{Bopomofo}/utf\n    \\x{ff66}\n\n# Base script check\n/^\\p{sc=Han}/utf\n    \\x{2e80}\n\n/^\\p{Script=Hani}/utf\n    \\x{323af}\n\n# Script extension check\n/^\\p{Han}/utf\n    \\x{3001}\n\n/^\\p{Script_Extensions=Hani}/utf\n    \\x{1f251}\n\n# Script extension only character\n/^\\p{Han}/utf\n    \\x{3006}\n\n/^\\p{sc=Han}/utf\n    \\x{3006}\n\n# Character not in script\n/^\\p{Han}/utf\n    \\x{3347a}\n\n# Base script check\n/^\\p{sc=Yi}/utf\n    \\x{a000}\n\n/^\\p{Script=Yiii}/utf\n    \\x{a4c6}\n\n# Script extension check\n/^\\p{Yi}/utf\n    \\x{3001}\n\n/^\\p{scx=Yiii}/utf\n    \\x{ff65}\n\n# Script extension only character\n/^\\p{Yi}/utf\n    \\x{3001}\n\n/^\\p{sc=Yi}/utf\n    \\x{3001}\n\n# Character not in script\n/^\\p{Yi}/utf\n    \\x{ff66}\n\n# Base script check\n/^\\p{sc=Tagalog}/utf\n    \\x{1700}\n\n/^\\p{Script=Tglg}/utf\n    \\x{171f}\n\n# Script extension check\n/^\\p{Tagalog}/utf\n    \\x{1735}\n\n/^\\p{Script_Extensions=Tglg}/utf\n    \\x{1736}\n\n# Script extension only character\n/^\\p{Tagalog}/utf\n    \\x{1735}\n\n/^\\p{sc=Tagalog}/utf\n    \\x{1735}\n\n# Character not in script\n/^\\p{Tagalog}/utf\n    \\x{1737}\n\n# Base script check\n/^\\p{sc=Hanunoo}/utf\n    \\x{1720}\n\n/^\\p{Script=Hano}/utf\n    \\x{1734}\n\n# Script extension check\n/^\\p{Hanunoo}/utf\n    \\x{1735}\n\n/^\\p{scx=Hano}/utf\n    \\x{1736}\n\n# Script extension only character\n/^\\p{Hanunoo}/utf\n    \\x{1735}\n\n/^\\p{sc=Hanunoo}/utf\n    \\x{1735}\n\n# Character not in script\n/^\\p{Hanunoo}/utf\n    \\x{1737}\n\n# Base script check\n/^\\p{sc=Buhid}/utf\n    \\x{1740}\n\n/^\\p{Script=Buhd}/utf\n    \\x{1753}\n\n# Script extension check\n/^\\p{Buhid}/utf\n    \\x{1735}\n\n/^\\p{Script_Extensions=Buhd}/utf\n    \\x{1736}\n\n# Script extension only character\n/^\\p{Buhid}/utf\n    \\x{1735}\n\n/^\\p{sc=Buhid}/utf\n    \\x{1735}\n\n# Character not in script\n/^\\p{Buhid}/utf\n    \\x{1754}\n\n# Base script check\n/^\\p{sc=Tagbanwa}/utf\n    \\x{1760}\n\n/^\\p{Script=Tagb}/utf\n    \\x{1773}\n\n# Script extension check\n/^\\p{Tagbanwa}/utf\n    \\x{1735}\n\n/^\\p{scx=Tagb}/utf\n    \\x{1736}\n\n# Script extension only character\n/^\\p{Tagbanwa}/utf\n    \\x{1735}\n\n/^\\p{sc=Tagbanwa}/utf\n    \\x{1735}\n\n# Character not in script\n/^\\p{Tagbanwa}/utf\n    \\x{1774}\n\n# Base script check\n/^\\p{sc=Limbu}/utf\n    \\x{1900}\n\n/^\\p{Script=Limb}/utf\n    \\x{194f}\n\n# Script extension check\n/^\\p{Limbu}/utf\n    \\x{965}\n\n/^\\p{Script_Extensions=Limb}/utf\n    \\x{965}\n\n# Script extension only character\n/^\\p{Limbu}/utf\n    \\x{965}\n\n/^\\p{sc=Limbu}/utf\n    \\x{965}\n\n# Character not in script\n/^\\p{Limbu}/utf\n    \\x{1950}\n\n# Base script check\n/^\\p{sc=Tai_Le}/utf\n    \\x{1950}\n\n/^\\p{Script=Tale}/utf\n    \\x{1974}\n\n# Script extension check\n/^\\p{Tai_Le}/utf\n    \\x{1040}\n\n/^\\p{scx=Tale}/utf\n    \\x{1049}\n\n# Script extension only character\n/^\\p{Tai_Le}/utf\n    \\x{1040}\n\n/^\\p{sc=Tai_Le}/utf\n    \\x{1040}\n\n# Character not in script\n/^\\p{Tai_Le}/utf\n    \\x{1975}\n\n# Base script check\n/^\\p{sc=Linear_B}/utf\n    \\x{10000}\n\n/^\\p{Script=Linb}/utf\n    \\x{100fa}\n\n# Script extension check\n/^\\p{Linear_B}/utf\n    \\x{10100}\n\n/^\\p{Script_Extensions=Linb}/utf\n    \\x{1013f}\n\n# Script extension only character\n/^\\p{Linear_B}/utf\n    \\x{10102}\n\n/^\\p{sc=Linear_B}/utf\n    \\x{10102}\n\n# Character not in script\n/^\\p{Linear_B}/utf\n    \\x{10140}\n\n# Base script check\n/^\\p{sc=Cypriot}/utf\n    \\x{10800}\n\n/^\\p{Script=Cprt}/utf\n    \\x{1083f}\n\n# Script extension check\n/^\\p{Cypriot}/utf\n    \\x{10100}\n\n/^\\p{scx=Cprt}/utf\n    \\x{1013f}\n\n# Script extension only character\n/^\\p{Cypriot}/utf\n    \\x{10102}\n\n/^\\p{sc=Cypriot}/utf\n    \\x{10102}\n\n# Character not in script\n/^\\p{Cypriot}/utf\n    \\x{10840}\n\n# Base script check\n/^\\p{sc=Buginese}/utf\n    \\x{1a00}\n\n/^\\p{Script=Bugi}/utf\n    \\x{1a1f}\n\n# Script extension check\n/^\\p{Buginese}/utf\n    \\x{a9cf}\n\n/^\\p{Script_Extensions=Bugi}/utf\n    \\x{a9cf}\n\n# Script extension only character\n/^\\p{Buginese}/utf\n    \\x{a9cf}\n\n/^\\p{sc=Buginese}/utf\n    \\x{a9cf}\n\n# Character not in script\n/^\\p{Buginese}/utf\n    \\x{a9d0}\n\n# Base script check\n/^\\p{sc=Coptic}/utf\n    \\x{3e2}\n\n/^\\p{Script=Copt}/utf\n    \\x{2cff}\n\n# Script extension check\n/^\\p{Coptic}/utf\n    \\x{102e0}\n\n/^\\p{scx=Copt}/utf\n    \\x{102fb}\n\n# Script extension only character\n/^\\p{Coptic}/utf\n    \\x{102e0}\n\n/^\\p{sc=Coptic}/utf\n    \\x{102e0}\n\n# Character not in script\n/^\\p{Coptic}/utf\n    \\x{102fc}\n\n# Base script check\n/^\\p{sc=Glagolitic}/utf\n    \\x{2c00}\n\n/^\\p{Script=Glag}/utf\n    \\x{1e02a}\n\n# Script extension check\n/^\\p{Glagolitic}/utf\n    \\x{484}\n\n/^\\p{Script_Extensions=Glag}/utf\n    \\x{a66f}\n\n# Script extension only character\n/^\\p{Glagolitic}/utf\n    \\x{484}\n\n/^\\p{sc=Glagolitic}/utf\n    \\x{484}\n\n# Character not in script\n/^\\p{Glagolitic}/utf\n    \\x{1e02b}\n\n# Base script check\n/^\\p{sc=Syloti_Nagri}/utf\n    \\x{a800}\n\n/^\\p{Script=Sylo}/utf\n    \\x{a82c}\n\n# Script extension check\n/^\\p{Syloti_Nagri}/utf\n    \\x{964}\n\n/^\\p{scx=Sylo}/utf\n    \\x{9ef}\n\n# Script extension only character\n/^\\p{Syloti_Nagri}/utf\n    \\x{9e6}\n\n/^\\p{sc=Syloti_Nagri}/utf\n    \\x{9e6}\n\n# Character not in script\n/^\\p{Syloti_Nagri}/utf\n    \\x{a82d}\n\n# Base script check\n/^\\p{sc=Phags_Pa}/utf\n    \\x{a840}\n\n/^\\p{Script=Phag}/utf\n    \\x{a877}\n\n# Script extension check\n/^\\p{Phags_Pa}/utf\n    \\x{1802}\n\n/^\\p{Script_Extensions=Phag}/utf\n    \\x{1805}\n\n# Script extension only character\n/^\\p{Phags_Pa}/utf\n    \\x{1802}\n\n/^\\p{sc=Phags_Pa}/utf\n    \\x{1802}\n\n# Character not in script\n/^\\p{Phags_Pa}/utf\n    \\x{a878}\n\n# Base script check\n/^\\p{sc=Nko}/utf\n    \\x{7c0}\n\n/^\\p{Script=Nkoo}/utf\n    \\x{7ff}\n\n# Script extension check\n/^\\p{Nko}/utf\n    \\x{60c}\n\n/^\\p{scx=Nkoo}/utf\n    \\x{fd3f}\n\n# Script extension only character\n/^\\p{Nko}/utf\n    \\x{fd3e}\n\n/^\\p{sc=Nko}/utf\n    \\x{fd3e}\n\n# Character not in script\n/^\\p{Nko}/utf\n    \\x{fd40}\n\n# Base script check\n/^\\p{sc=Kayah_Li}/utf\n    \\x{a900}\n\n/^\\p{Script=Kali}/utf\n    \\x{a92f}\n\n# Script extension check\n/^\\p{Kayah_Li}/utf\n    \\x{a92e}\n\n/^\\p{Script_Extensions=Kali}/utf\n    \\x{a92e}\n\n# Script extension only character\n/^\\p{Kayah_Li}/utf\n    \\x{a92e}\n\n/^\\p{sc=Kayah_Li}/utf\n    \\x{a92e}\n\n# Character not in script\n/^\\p{Kayah_Li}/utf\n    \\x{a930}\n\n# Base script check\n/^\\p{sc=Javanese}/utf\n    \\x{a980}\n\n/^\\p{Script=Java}/utf\n    \\x{a9df}\n\n# Script extension check\n/^\\p{Javanese}/utf\n    \\x{a9cf}\n\n/^\\p{scx=Java}/utf\n    \\x{a9cf}\n\n# Script extension only character\n/^\\p{Javanese}/utf\n    \\x{a9cf}\n\n/^\\p{sc=Javanese}/utf\n    \\x{a9cf}\n\n# Character not in script\n/^\\p{Javanese}/utf\n    \\x{a9e0}\n\n# Base script check\n/^\\p{sc=Kaithi}/utf\n    \\x{11080}\n\n/^\\p{Script=Kthi}/utf\n    \\x{110cd}\n\n# Script extension check\n/^\\p{Kaithi}/utf\n    \\x{966}\n\n/^\\p{Script_Extensions=Kthi}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Kaithi}/utf\n    \\x{966}\n\n/^\\p{sc=Kaithi}/utf\n    \\x{966}\n\n# Character not in script\n/^\\p{Kaithi}/utf\n    \\x{110ce}\n\n# Base script check\n/^\\p{sc=Mandaic}/utf\n    \\x{840}\n\n/^\\p{Script=Mand}/utf\n    \\x{85e}\n\n# Script extension check\n/^\\p{Mandaic}/utf\n    \\x{640}\n\n/^\\p{scx=Mand}/utf\n    \\x{640}\n\n# Script extension only character\n/^\\p{Mandaic}/utf\n    \\x{640}\n\n/^\\p{sc=Mandaic}/utf\n    \\x{640}\n\n# Character not in script\n/^\\p{Mandaic}/utf\n    \\x{85f}\n\n# Base script check\n/^\\p{sc=Chakma}/utf\n    \\x{11100}\n\n/^\\p{Script=Cakm}/utf\n    \\x{11147}\n\n# Script extension check\n/^\\p{Chakma}/utf\n    \\x{9e6}\n\n/^\\p{Script_Extensions=Cakm}/utf\n    \\x{1049}\n\n# Script extension only character\n/^\\p{Chakma}/utf\n    \\x{9e6}\n\n/^\\p{sc=Chakma}/utf\n    \\x{9e6}\n\n# Character not in script\n/^\\p{Chakma}/utf\n    \\x{11148}\n\n# Base script check\n/^\\p{sc=Sharada}/utf\n    \\x{11180}\n\n/^\\p{Script=Shrd}/utf\n    \\x{111df}\n\n# Script extension check\n/^\\p{Sharada}/utf\n    \\x{951}\n\n/^\\p{scx=Shrd}/utf\n    \\x{1ce0}\n\n# Script extension only character\n/^\\p{Sharada}/utf\n    \\x{1cd7}\n\n/^\\p{sc=Sharada}/utf\n    \\x{1cd7}\n\n# Character not in script\n/^\\p{Sharada}/utf\n    \\x{111e0}\n\n# Base script check\n/^\\p{sc=Takri}/utf\n    \\x{11680}\n\n/^\\p{Script=Takr}/utf\n    \\x{116c9}\n\n# Script extension check\n/^\\p{Takri}/utf\n    \\x{964}\n\n/^\\p{Script_Extensions=Takr}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Takri}/utf\n    \\x{a836}\n\n/^\\p{sc=Takri}/utf\n    \\x{a836}\n\n# Character not in script\n/^\\p{Takri}/utf\n    \\x{116ca}\n\n# Base script check\n/^\\p{sc=Duployan}/utf\n    \\x{1bc00}\n\n/^\\p{Script=Dupl}/utf\n    \\x{1bc9f}\n\n# Script extension check\n/^\\p{Duployan}/utf\n    \\x{1bca0}\n\n/^\\p{scx=Dupl}/utf\n    \\x{1bca3}\n\n# Script extension only character\n/^\\p{Duployan}/utf\n    \\x{1bca0}\n\n/^\\p{sc=Duployan}/utf\n    \\x{1bca0}\n\n# Character not in script\n/^\\p{Duployan}/utf\n    \\x{1bca4}\n\n# Base script check\n/^\\p{sc=Grantha}/utf\n    \\x{11300}\n\n/^\\p{Script=Gran}/utf\n    \\x{11374}\n\n# Script extension check\n/^\\p{Grantha}/utf\n    \\x{951}\n\n/^\\p{Script_Extensions=Gran}/utf\n    \\x{11fd3}\n\n# Script extension only character\n/^\\p{Grantha}/utf\n    \\x{1cd3}\n\n/^\\p{sc=Grantha}/utf\n    \\x{1cd3}\n\n# Character not in script\n/^\\p{Grantha}/utf\n    \\x{11fd4}\n\n# Base script check\n/^\\p{sc=Khojki}/utf\n    \\x{11200}\n\n/^\\p{Script=Khoj}/utf\n    \\x{11241}\n\n# Script extension check\n/^\\p{Khojki}/utf\n    \\x{ae6}\n\n/^\\p{scx=Khoj}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Khojki}/utf\n    \\x{ae6}\n\n/^\\p{sc=Khojki}/utf\n    \\x{ae6}\n\n# Character not in script\n/^\\p{Khojki}/utf\n    \\x{11242}\n\n# Base script check\n/^\\p{sc=Linear_A}/utf\n    \\x{10600}\n\n/^\\p{Script=Lina}/utf\n    \\x{10767}\n\n# Script extension check\n/^\\p{Linear_A}/utf\n    \\x{10107}\n\n/^\\p{Script_Extensions=Lina}/utf\n    \\x{10133}\n\n# Script extension only character\n/^\\p{Linear_A}/utf\n    \\x{10107}\n\n/^\\p{sc=Linear_A}/utf\n    \\x{10107}\n\n# Character not in script\n/^\\p{Linear_A}/utf\n    \\x{10768}\n\n# Base script check\n/^\\p{sc=Mahajani}/utf\n    \\x{11150}\n\n/^\\p{Script=Mahj}/utf\n    \\x{11176}\n\n# Script extension check\n/^\\p{Mahajani}/utf\n    \\x{964}\n\n/^\\p{scx=Mahj}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Mahajani}/utf\n    \\x{966}\n\n/^\\p{sc=Mahajani}/utf\n    \\x{966}\n\n# Character not in script\n/^\\p{Mahajani}/utf\n    \\x{11177}\n\n# Base script check\n/^\\p{sc=Manichaean}/utf\n    \\x{10ac0}\n\n/^\\p{Script=Mani}/utf\n    \\x{10af6}\n\n# Script extension check\n/^\\p{Manichaean}/utf\n    \\x{640}\n\n/^\\p{Script_Extensions=Mani}/utf\n    \\x{10af2}\n\n# Script extension only character\n/^\\p{Manichaean}/utf\n    \\x{640}\n\n/^\\p{sc=Manichaean}/utf\n    \\x{640}\n\n# Character not in script\n/^\\p{Manichaean}/utf\n    \\x{10af7}\n\n# Base script check\n/^\\p{sc=Modi}/utf\n    \\x{11600}\n\n/^\\p{Script=Modi}/utf\n    \\x{11659}\n\n# Script extension check\n/^\\p{Modi}/utf\n    \\x{a830}\n\n/^\\p{scx=Modi}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Modi}/utf\n    \\x{a836}\n\n/^\\p{sc=Modi}/utf\n    \\x{a836}\n\n# Character not in script\n/^\\p{Modi}/utf\n    \\x{1165a}\n\n# Base script check\n/^\\p{sc=Old_Permic}/utf\n    \\x{10350}\n\n/^\\p{Script=Perm}/utf\n    \\x{1037a}\n\n# Script extension check\n/^\\p{Old_Permic}/utf\n    \\x{483}\n\n/^\\p{Script_Extensions=Perm}/utf\n    \\x{483}\n\n# Script extension only character\n/^\\p{Old_Permic}/utf\n    \\x{483}\n\n/^\\p{sc=Old_Permic}/utf\n    \\x{483}\n\n# Character not in script\n/^\\p{Old_Permic}/utf\n    \\x{1037b}\n\n# Base script check\n/^\\p{sc=Psalter_Pahlavi}/utf\n    \\x{10b80}\n\n/^\\p{Script=Phlp}/utf\n    \\x{10baf}\n\n# Script extension check\n/^\\p{Psalter_Pahlavi}/utf\n    \\x{640}\n\n/^\\p{scx=Phlp}/utf\n    \\x{640}\n\n# Script extension only character\n/^\\p{Psalter_Pahlavi}/utf\n    \\x{640}\n\n/^\\p{sc=Psalter_Pahlavi}/utf\n    \\x{640}\n\n# Character not in script\n/^\\p{Psalter_Pahlavi}/utf\n    \\x{10bb0}\n\n# Base script check\n/^\\p{sc=Khudawadi}/utf\n    \\x{112b0}\n\n/^\\p{Script=Sind}/utf\n    \\x{112f9}\n\n# Script extension check\n/^\\p{Khudawadi}/utf\n    \\x{964}\n\n/^\\p{Script_Extensions=Sind}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Khudawadi}/utf\n    \\x{a836}\n\n/^\\p{sc=Khudawadi}/utf\n    \\x{a836}\n\n# Character not in script\n/^\\p{Khudawadi}/utf\n    \\x{112fa}\n\n# Base script check\n/^\\p{sc=Tirhuta}/utf\n    \\x{11480}\n\n/^\\p{Script=Tirh}/utf\n    \\x{114d9}\n\n# Script extension check\n/^\\p{Tirhuta}/utf\n    \\x{951}\n\n/^\\p{scx=Tirh}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Tirhuta}/utf\n    \\x{1cf2}\n\n/^\\p{sc=Tirhuta}/utf\n    \\x{1cf2}\n\n# Character not in script\n/^\\p{Tirhuta}/utf\n    \\x{114da}\n\n# Base script check\n/^\\p{sc=Multani}/utf\n    \\x{11280}\n\n/^\\p{Script=Mult}/utf\n    \\x{112a9}\n\n# Script extension check\n/^\\p{Multani}/utf\n    \\x{a66}\n\n/^\\p{Script_Extensions=Mult}/utf\n    \\x{a6f}\n\n# Script extension only character\n/^\\p{Multani}/utf\n    \\x{a66}\n\n/^\\p{sc=Multani}/utf\n    \\x{a66}\n\n# Character not in script\n/^\\p{Multani}/utf\n    \\x{112aa}\n\n# Base script check\n/^\\p{sc=Adlam}/utf\n    \\x{1e900}\n\n/^\\p{Script=Adlm}/utf\n    \\x{1e95f}\n\n# Script extension check\n/^\\p{Adlam}/utf\n    \\x{61f}\n\n/^\\p{scx=Adlm}/utf\n    \\x{640}\n\n# Script extension only character\n/^\\p{Adlam}/utf\n    \\x{61f}\n\n/^\\p{sc=Adlam}/utf\n    \\x{61f}\n\n# Character not in script\n/^\\p{Adlam}/utf\n    \\x{1e960}\n\n# Base script check\n/^\\p{sc=Masaram_Gondi}/utf\n    \\x{11d00}\n\n/^\\p{Script=Gonm}/utf\n    \\x{11d59}\n\n# Script extension check\n/^\\p{Masaram_Gondi}/utf\n    \\x{964}\n\n/^\\p{Script_Extensions=Gonm}/utf\n    \\x{965}\n\n# Script extension only character\n/^\\p{Masaram_Gondi}/utf\n    \\x{964}\n\n/^\\p{sc=Masaram_Gondi}/utf\n    \\x{964}\n\n# Character not in script\n/^\\p{Masaram_Gondi}/utf\n    \\x{11d5a}\n\n# Base script check\n/^\\p{sc=Dogra}/utf\n    \\x{11800}\n\n/^\\p{Script=Dogr}/utf\n    \\x{1183b}\n\n# Script extension check\n/^\\p{Dogra}/utf\n    \\x{964}\n\n/^\\p{scx=Dogr}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Dogra}/utf\n    \\x{966}\n\n/^\\p{sc=Dogra}/utf\n    \\x{966}\n\n# Character not in script\n/^\\p{Dogra}/utf\n    \\x{1183c}\n\n# Base script check\n/^\\p{sc=Gunjala_Gondi}/utf\n    \\x{11d60}\n\n/^\\p{Script=Gong}/utf\n    \\x{11da9}\n\n# Script extension check\n/^\\p{Gunjala_Gondi}/utf\n    \\x{964}\n\n/^\\p{Script_Extensions=Gong}/utf\n    \\x{965}\n\n# Script extension only character\n/^\\p{Gunjala_Gondi}/utf\n    \\x{964}\n\n/^\\p{sc=Gunjala_Gondi}/utf\n    \\x{964}\n\n# Character not in script\n/^\\p{Gunjala_Gondi}/utf\n    \\x{11daa}\n\n# Base script check\n/^\\p{sc=Hanifi_Rohingya}/utf\n    \\x{10d00}\n\n/^\\p{Script=Rohg}/utf\n    \\x{10d39}\n\n# Script extension check\n/^\\p{Hanifi_Rohingya}/utf\n    \\x{60c}\n\n/^\\p{scx=Rohg}/utf\n    \\x{6d4}\n\n# Script extension only character\n/^\\p{Hanifi_Rohingya}/utf\n    \\x{6d4}\n\n/^\\p{sc=Hanifi_Rohingya}/utf\n    \\x{6d4}\n\n# Character not in script\n/^\\p{Hanifi_Rohingya}/utf\n    \\x{10d3a}\n\n# Base script check\n/^\\p{sc=Sogdian}/utf\n    \\x{10f30}\n\n/^\\p{Script=Sogd}/utf\n    \\x{10f59}\n\n# Script extension check\n/^\\p{Sogdian}/utf\n    \\x{640}\n\n/^\\p{Script_Extensions=Sogd}/utf\n    \\x{640}\n\n# Script extension only character\n/^\\p{Sogdian}/utf\n    \\x{640}\n\n/^\\p{sc=Sogdian}/utf\n    \\x{640}\n\n# Character not in script\n/^\\p{Sogdian}/utf\n    \\x{10f5a}\n\n# Base script check\n/^\\p{sc=Nandinagari}/utf\n    \\x{119a0}\n\n/^\\p{Script=Nand}/utf\n    \\x{119e4}\n\n# Script extension check\n/^\\p{Nandinagari}/utf\n    \\x{964}\n\n/^\\p{scx=Nand}/utf\n    \\x{a835}\n\n# Script extension only character\n/^\\p{Nandinagari}/utf\n    \\x{1cfa}\n\n/^\\p{sc=Nandinagari}/utf\n    \\x{1cfa}\n\n# Character not in script\n/^\\p{Nandinagari}/utf\n    \\x{119e5}\n\n# Base script check\n/^\\p{sc=Yezidi}/utf\n    \\x{10e80}\n\n/^\\p{Script=Yezi}/utf\n    \\x{10eb1}\n\n# Script extension check\n/^\\p{Yezidi}/utf\n    \\x{60c}\n\n/^\\p{Script_Extensions=Yezi}/utf\n    \\x{669}\n\n# Script extension only character\n/^\\p{Yezidi}/utf\n    \\x{660}\n\n/^\\p{sc=Yezidi}/utf\n    \\x{660}\n\n# Character not in script\n/^\\p{Yezidi}/utf\n    \\x{10eb2}\n\n# Base script check\n/^\\p{sc=Cypro_Minoan}/utf\n    \\x{12f90}\n\n/^\\p{Script=Cpmn}/utf\n    \\x{12ff2}\n\n# Script extension check\n/^\\p{Cypro_Minoan}/utf\n    \\x{10100}\n\n/^\\p{scx=Cpmn}/utf\n    \\x{10101}\n\n# Script extension only character\n/^\\p{Cypro_Minoan}/utf\n    \\x{10100}\n\n/^\\p{sc=Cypro_Minoan}/utf\n    \\x{10100}\n\n# Character not in script\n/^\\p{Cypro_Minoan}/utf\n    \\x{12ff3}\n\n# Base script check\n/^\\p{sc=Old_Uyghur}/utf\n    \\x{10f70}\n\n/^\\p{Script=Ougr}/utf\n    \\x{10f89}\n\n# Script extension check\n/^\\p{Old_Uyghur}/utf\n    \\x{640}\n\n/^\\p{Script_Extensions=Ougr}/utf\n    \\x{10af2}\n\n# Script extension only character\n/^\\p{Old_Uyghur}/utf\n    \\x{10af2}\n\n/^\\p{sc=Old_Uyghur}/utf\n    \\x{10af2}\n\n# Character not in script\n/^\\p{Old_Uyghur}/utf\n    \\x{10f8a}\n\n# Base script check\n/^\\p{sc=Common}/utf\n    \\x{00}\n\n/^\\p{Script=Zyyy}/utf\n    \\x{e007f}\n\n# Character not in script\n/^\\p{Common}/utf\n    \\x{e0080}\n\n# Base script check\n/^\\p{sc=Armenian}/utf\n    \\x{531}\n\n/^\\p{Script=Armn}/utf\n    \\x{fb17}\n\n# Character not in script\n/^\\p{Armenian}/utf\n    \\x{fb18}\n\n# Base script check\n/^\\p{sc=Hebrew}/utf\n    \\x{591}\n\n/^\\p{Script=Hebr}/utf\n    \\x{fb4f}\n\n# Character not in script\n/^\\p{Hebrew}/utf\n    \\x{fb50}\n\n# Base script check\n/^\\p{sc=Thai}/utf\n    \\x{e01}\n\n/^\\p{Script=Thai}/utf\n    \\x{e5b}\n\n# Character not in script\n/^\\p{Thai}/utf\n    \\x{e5c}\n\n# Base script check\n/^\\p{sc=Lao}/utf\n    \\x{e81}\n\n/^\\p{Script=Laoo}/utf\n    \\x{edf}\n\n# Character not in script\n/^\\p{Lao}/utf\n    \\x{ee0}\n\n# Base script check\n/^\\p{sc=Tibetan}/utf\n    \\x{f00}\n\n/^\\p{Script=Tibt}/utf\n    \\x{fda}\n\n# Character not in script\n/^\\p{Tibetan}/utf\n    \\x{fdb}\n\n# Base script check\n/^\\p{sc=Ethiopic}/utf\n    \\x{1200}\n\n/^\\p{Script=Ethi}/utf\n    \\x{1e7fe}\n\n# Character not in script\n/^\\p{Ethiopic}/utf\n    \\x{1e7ff}\n\n# Base script check\n/^\\p{sc=Cherokee}/utf\n    \\x{13a0}\n\n/^\\p{Script=Cher}/utf\n    \\x{abbf}\n\n# Character not in script\n/^\\p{Cherokee}/utf\n    \\x{abc0}\n\n# Base script check\n/^\\p{sc=Canadian_Aboriginal}/utf\n    \\x{1400}\n\n/^\\p{Script=Cans}/utf\n    \\x{11abf}\n\n# Character not in script\n/^\\p{Canadian_Aboriginal}/utf\n    \\x{11ac0}\n\n# Base script check\n/^\\p{sc=Ogham}/utf\n    \\x{1680}\n\n/^\\p{Script=Ogam}/utf\n    \\x{169c}\n\n# Character not in script\n/^\\p{Ogham}/utf\n    \\x{169d}\n\n# Base script check\n/^\\p{sc=Runic}/utf\n    \\x{16a0}\n\n/^\\p{Script=Runr}/utf\n    \\x{16f8}\n\n# Character not in script\n/^\\p{Runic}/utf\n    \\x{16f9}\n\n# Base script check\n/^\\p{sc=Khmer}/utf\n    \\x{1780}\n\n/^\\p{Script=Khmr}/utf\n    \\x{19ff}\n\n# Character not in script\n/^\\p{Khmer}/utf\n    \\x{1a00}\n\n# Base script check\n/^\\p{sc=Old_Italic}/utf\n    \\x{10300}\n\n/^\\p{Script=Ital}/utf\n    \\x{1032f}\n\n# Character not in script\n/^\\p{Old_Italic}/utf\n    \\x{10330}\n\n# Base script check\n/^\\p{sc=Gothic}/utf\n    \\x{10330}\n\n/^\\p{Script=Goth}/utf\n    \\x{1034a}\n\n# Character not in script\n/^\\p{Gothic}/utf\n    \\x{1034b}\n\n# Base script check\n/^\\p{sc=Deseret}/utf\n    \\x{10400}\n\n/^\\p{Script=Dsrt}/utf\n    \\x{1044f}\n\n# Character not in script\n/^\\p{Deseret}/utf\n    \\x{10450}\n\n# Base script check\n/^\\p{sc=Inherited}/utf\n    \\x{300}\n\n/^\\p{Script=Zinh}/utf\n    \\x{e01ef}\n\n# Character not in script\n/^\\p{Inherited}/utf\n    \\x{e01f0}\n\n# Base script check\n/^\\p{sc=Ugaritic}/utf\n    \\x{10380}\n\n/^\\p{Script=Ugar}/utf\n    \\x{1039f}\n\n# Character not in script\n/^\\p{Ugaritic}/utf\n    \\x{103a0}\n\n# Base script check\n/^\\p{sc=Shavian}/utf\n    \\x{10450}\n\n/^\\p{Script=Shaw}/utf\n    \\x{1047f}\n\n# Character not in script\n/^\\p{Shavian}/utf\n    \\x{10480}\n\n# Base script check\n/^\\p{sc=Osmanya}/utf\n    \\x{10480}\n\n/^\\p{Script=Osma}/utf\n    \\x{104a9}\n\n# Character not in script\n/^\\p{Osmanya}/utf\n    \\x{104aa}\n\n# Base script check\n/^\\p{sc=Braille}/utf\n    \\x{2800}\n\n/^\\p{Script=Brai}/utf\n    \\x{28ff}\n\n# Character not in script\n/^\\p{Braille}/utf\n    \\x{2900}\n\n# Base script check\n/^\\p{sc=New_Tai_Lue}/utf\n    \\x{1980}\n\n/^\\p{Script=Talu}/utf\n    \\x{19df}\n\n# Character not in script\n/^\\p{New_Tai_Lue}/utf\n    \\x{19e0}\n\n# Base script check\n/^\\p{sc=Tifinagh}/utf\n    \\x{2d30}\n\n/^\\p{Script=Tfng}/utf\n    \\x{2d7f}\n\n# Character not in script\n/^\\p{Tifinagh}/utf\n    \\x{2d80}\n\n# Base script check\n/^\\p{sc=Old_Persian}/utf\n    \\x{103a0}\n\n/^\\p{Script=Xpeo}/utf\n    \\x{103d5}\n\n# Character not in script\n/^\\p{Old_Persian}/utf\n    \\x{103d6}\n\n# Base script check\n/^\\p{sc=Kharoshthi}/utf\n    \\x{10a00}\n\n/^\\p{Script=Khar}/utf\n    \\x{10a58}\n\n# Character not in script\n/^\\p{Kharoshthi}/utf\n    \\x{10a59}\n\n# Base script check\n/^\\p{sc=Balinese}/utf\n    \\x{1b00}\n\n/^\\p{Script=Bali}/utf\n    \\x{1b7e}\n\n# Character not in script\n/^\\p{Balinese}/utf\n    \\x{1b8f}\n\n# Base script check\n/^\\p{sc=Cuneiform}/utf\n    \\x{12000}\n\n/^\\p{Script=Xsux}/utf\n    \\x{12543}\n\n# Character not in script\n/^\\p{Cuneiform}/utf\n    \\x{12544}\n\n# Base script check\n/^\\p{sc=Phoenician}/utf\n    \\x{10900}\n\n/^\\p{Script=Phnx}/utf\n    \\x{1091f}\n\n# Character not in script\n/^\\p{Phoenician}/utf\n    \\x{10920}\n\n# Base script check\n/^\\p{sc=Sundanese}/utf\n    \\x{1b80}\n\n/^\\p{Script=Sund}/utf\n    \\x{1cc7}\n\n# Character not in script\n/^\\p{Sundanese}/utf\n    \\x{1cc8}\n\n# Base script check\n/^\\p{sc=Lepcha}/utf\n    \\x{1c00}\n\n/^\\p{Script=Lepc}/utf\n    \\x{1c4f}\n\n# Character not in script\n/^\\p{Lepcha}/utf\n    \\x{1c50}\n\n# Base script check\n/^\\p{sc=Ol_Chiki}/utf\n    \\x{1c50}\n\n/^\\p{Script=Olck}/utf\n    \\x{1c7f}\n\n# Character not in script\n/^\\p{Ol_Chiki}/utf\n    \\x{1c80}\n\n# Base script check\n/^\\p{sc=Vai}/utf\n    \\x{a500}\n\n/^\\p{Script=Vaii}/utf\n    \\x{a62b}\n\n# Character not in script\n/^\\p{Vai}/utf\n    \\x{a62c}\n\n# Base script check\n/^\\p{sc=Saurashtra}/utf\n    \\x{a880}\n\n/^\\p{Script=Saur}/utf\n    \\x{a8d9}\n\n# Character not in script\n/^\\p{Saurashtra}/utf\n    \\x{a8da}\n\n# Base script check\n/^\\p{sc=Rejang}/utf\n    \\x{a930}\n\n/^\\p{Script=Rjng}/utf\n    \\x{a95f}\n\n# Character not in script\n/^\\p{Rejang}/utf\n    \\x{a960}\n\n# Base script check\n/^\\p{sc=Lycian}/utf\n    \\x{10280}\n\n/^\\p{Script=Lyci}/utf\n    \\x{1029c}\n\n# Character not in script\n/^\\p{Lycian}/utf\n    \\x{1029d}\n\n# Base script check\n/^\\p{sc=Carian}/utf\n    \\x{102a0}\n\n/^\\p{Script=Cari}/utf\n    \\x{102d0}\n\n# Character not in script\n/^\\p{Carian}/utf\n    \\x{102d1}\n\n# Base script check\n/^\\p{sc=Lydian}/utf\n    \\x{10920}\n\n/^\\p{Script=Lydi}/utf\n    \\x{1093f}\n\n# Character not in script\n/^\\p{Lydian}/utf\n    \\x{10940}\n\n# Base script check\n/^\\p{sc=Cham}/utf\n    \\x{aa00}\n\n/^\\p{Script=Cham}/utf\n    \\x{aa5f}\n\n# Character not in script\n/^\\p{Cham}/utf\n    \\x{aa60}\n\n# Base script check\n/^\\p{sc=Tai_Tham}/utf\n    \\x{1a20}\n\n/^\\p{Script=Lana}/utf\n    \\x{1aad}\n\n# Character not in script\n/^\\p{Tai_Tham}/utf\n    \\x{1aae}\n\n# Base script check\n/^\\p{sc=Tai_Viet}/utf\n    \\x{aa80}\n\n/^\\p{Script=Tavt}/utf\n    \\x{aadf}\n\n# Character not in script\n/^\\p{Tai_Viet}/utf\n    \\x{aae0}\n\n# Base script check\n/^\\p{sc=Avestan}/utf\n    \\x{10b00}\n\n/^\\p{Script=Avst}/utf\n    \\x{10b3f}\n\n# Character not in script\n/^\\p{Avestan}/utf\n    \\x{10b40}\n\n# Base script check\n/^\\p{sc=Egyptian_Hieroglyphs}/utf\n    \\x{13000}\n\n/^\\p{Script=Egyp}/utf\n    \\x{13455}\n\n# Character not in script\n/^\\p{Egyptian_Hieroglyphs}/utf\n    \\x{13456}\n\n# Base script check\n/^\\p{sc=Samaritan}/utf\n    \\x{800}\n\n/^\\p{Script=Samr}/utf\n    \\x{83e}\n\n# Character not in script\n/^\\p{Samaritan}/utf\n    \\x{83f}\n\n# Base script check\n/^\\p{sc=Lisu}/utf\n    \\x{a4d0}\n\n/^\\p{Script=Lisu}/utf\n    \\x{11fb0}\n\n# Character not in script\n/^\\p{Lisu}/utf\n    \\x{11fb1}\n\n# Base script check\n/^\\p{sc=Bamum}/utf\n    \\x{a6a0}\n\n/^\\p{Script=Bamu}/utf\n    \\x{16a38}\n\n# Character not in script\n/^\\p{Bamum}/utf\n    \\x{16a39}\n\n# Base script check\n/^\\p{sc=Meetei_Mayek}/utf\n    \\x{aae0}\n\n/^\\p{Script=Mtei}/utf\n    \\x{abf9}\n\n# Character not in script\n/^\\p{Meetei_Mayek}/utf\n    \\x{abfa}\n\n# Base script check\n/^\\p{sc=Imperial_Aramaic}/utf\n    \\x{10840}\n\n/^\\p{Script=Armi}/utf\n    \\x{1085f}\n\n# Character not in script\n/^\\p{Imperial_Aramaic}/utf\n    \\x{10860}\n\n# Base script check\n/^\\p{sc=Old_South_Arabian}/utf\n    \\x{10a60}\n\n/^\\p{Script=Sarb}/utf\n    \\x{10a7f}\n\n# Character not in script\n/^\\p{Old_South_Arabian}/utf\n    \\x{10a80}\n\n# Base script check\n/^\\p{sc=Inscriptional_Parthian}/utf\n    \\x{10b40}\n\n/^\\p{Script=Prti}/utf\n    \\x{10b5f}\n\n# Character not in script\n/^\\p{Inscriptional_Parthian}/utf\n    \\x{10b60}\n\n# Base script check\n/^\\p{sc=Inscriptional_Pahlavi}/utf\n    \\x{10b60}\n\n/^\\p{Script=Phli}/utf\n    \\x{10b7f}\n\n# Character not in script\n/^\\p{Inscriptional_Pahlavi}/utf\n    \\x{10b80}\n\n# Base script check\n/^\\p{sc=Old_Turkic}/utf\n    \\x{10c00}\n\n/^\\p{Script=Orkh}/utf\n    \\x{10c48}\n\n# Character not in script\n/^\\p{Old_Turkic}/utf\n    \\x{10c49}\n\n# Base script check\n/^\\p{sc=Batak}/utf\n    \\x{1bc0}\n\n/^\\p{Script=Batk}/utf\n    \\x{1bff}\n\n# Character not in script\n/^\\p{Batak}/utf\n    \\x{1c00}\n\n# Base script check\n/^\\p{sc=Brahmi}/utf\n    \\x{11000}\n\n/^\\p{Script=Brah}/utf\n    \\x{1107f}\n\n# Character not in script\n/^\\p{Brahmi}/utf\n    \\x{11080}\n\n# Base script check\n/^\\p{sc=Meroitic_Cursive}/utf\n    \\x{109a0}\n\n/^\\p{Script=Merc}/utf\n    \\x{109ff}\n\n# Character not in script\n/^\\p{Meroitic_Cursive}/utf\n    \\x{10a00}\n\n# Base script check\n/^\\p{sc=Meroitic_Hieroglyphs}/utf\n    \\x{10980}\n\n/^\\p{Script=Mero}/utf\n    \\x{1099f}\n\n# Character not in script\n/^\\p{Meroitic_Hieroglyphs}/utf\n    \\x{109a0}\n\n# Base script check\n/^\\p{sc=Miao}/utf\n    \\x{16f00}\n\n/^\\p{Script=Plrd}/utf\n    \\x{16f9f}\n\n# Character not in script\n/^\\p{Miao}/utf\n    \\x{16fa0}\n\n# Base script check\n/^\\p{sc=Sora_Sompeng}/utf\n    \\x{110d0}\n\n/^\\p{Script=Sora}/utf\n    \\x{110f9}\n\n# Character not in script\n/^\\p{Sora_Sompeng}/utf\n    \\x{110fa}\n\n# Base script check\n/^\\p{sc=Caucasian_Albanian}/utf\n    \\x{10530}\n\n/^\\p{Script=Aghb}/utf\n    \\x{1056f}\n\n# Character not in script\n/^\\p{Caucasian_Albanian}/utf\n    \\x{10570}\n\n# Base script check\n/^\\p{sc=Bassa_Vah}/utf\n    \\x{16ad0}\n\n/^\\p{Script=Bass}/utf\n    \\x{16af5}\n\n# Character not in script\n/^\\p{Bassa_Vah}/utf\n    \\x{16af6}\n\n# Base script check\n/^\\p{sc=Elbasan}/utf\n    \\x{10500}\n\n/^\\p{Script=Elba}/utf\n    \\x{10527}\n\n# Character not in script\n/^\\p{Elbasan}/utf\n    \\x{10528}\n\n# Base script check\n/^\\p{sc=Pahawh_Hmong}/utf\n    \\x{16b00}\n\n/^\\p{Script=Hmng}/utf\n    \\x{16b8f}\n\n# Character not in script\n/^\\p{Pahawh_Hmong}/utf\n    \\x{16b90}\n\n# Base script check\n/^\\p{sc=Mende_Kikakui}/utf\n    \\x{1e800}\n\n/^\\p{Script=Mend}/utf\n    \\x{1e8d6}\n\n# Character not in script\n/^\\p{Mende_Kikakui}/utf\n    \\x{1e8d7}\n\n# Base script check\n/^\\p{sc=Mro}/utf\n    \\x{16a40}\n\n/^\\p{Script=Mroo}/utf\n    \\x{16a6f}\n\n# Character not in script\n/^\\p{Mro}/utf\n    \\x{16a70}\n\n# Base script check\n/^\\p{sc=Old_North_Arabian}/utf\n    \\x{10a80}\n\n/^\\p{Script=Narb}/utf\n    \\x{10a9f}\n\n# Character not in script\n/^\\p{Old_North_Arabian}/utf\n    \\x{10aa0}\n\n# Base script check\n/^\\p{sc=Nabataean}/utf\n    \\x{10880}\n\n/^\\p{Script=Nbat}/utf\n    \\x{108af}\n\n# Character not in script\n/^\\p{Nabataean}/utf\n    \\x{108b0}\n\n# Base script check\n/^\\p{sc=Palmyrene}/utf\n    \\x{10860}\n\n/^\\p{Script=Palm}/utf\n    \\x{1087f}\n\n# Character not in script\n/^\\p{Palmyrene}/utf\n    \\x{10880}\n\n# Base script check\n/^\\p{sc=Pau_Cin_Hau}/utf\n    \\x{11ac0}\n\n/^\\p{Script=Pauc}/utf\n    \\x{11af8}\n\n# Character not in script\n/^\\p{Pau_Cin_Hau}/utf\n    \\x{11af9}\n\n# Base script check\n/^\\p{sc=Siddham}/utf\n    \\x{11580}\n\n/^\\p{Script=Sidd}/utf\n    \\x{115dd}\n\n# Character not in script\n/^\\p{Siddham}/utf\n    \\x{115de}\n\n# Base script check\n/^\\p{sc=Warang_Citi}/utf\n    \\x{118a0}\n\n/^\\p{Script=Wara}/utf\n    \\x{118ff}\n\n# Character not in script\n/^\\p{Warang_Citi}/utf\n    \\x{11900}\n\n# Base script check\n/^\\p{sc=Ahom}/utf\n    \\x{11700}\n\n/^\\p{Script=Ahom}/utf\n    \\x{11746}\n\n# Character not in script\n/^\\p{Ahom}/utf\n    \\x{11747}\n\n# Base script check\n/^\\p{sc=Anatolian_Hieroglyphs}/utf\n    \\x{14400}\n\n/^\\p{Script=Hluw}/utf\n    \\x{14646}\n\n# Character not in script\n/^\\p{Anatolian_Hieroglyphs}/utf\n    \\x{14647}\n\n# Base script check\n/^\\p{sc=Hatran}/utf\n    \\x{108e0}\n\n/^\\p{Script=Hatr}/utf\n    \\x{108ff}\n\n# Character not in script\n/^\\p{Hatran}/utf\n    \\x{10900}\n\n# Base script check\n/^\\p{sc=Old_Hungarian}/utf\n    \\x{10c80}\n\n/^\\p{Script=Hung}/utf\n    \\x{10cff}\n\n# Character not in script\n/^\\p{Old_Hungarian}/utf\n    \\x{10d00}\n\n# Base script check\n/^\\p{sc=SignWriting}/utf\n    \\x{1d800}\n\n/^\\p{Script=Sgnw}/utf\n    \\x{1daaf}\n\n# Character not in script\n/^\\p{SignWriting}/utf\n    \\x{1dab0}\n\n# Base script check\n/^\\p{sc=Bhaiksuki}/utf\n    \\x{11c00}\n\n/^\\p{Script=Bhks}/utf\n    \\x{11c6c}\n\n# Character not in script\n/^\\p{Bhaiksuki}/utf\n    \\x{11c6d}\n\n# Base script check\n/^\\p{sc=Marchen}/utf\n    \\x{11c70}\n\n/^\\p{Script=Marc}/utf\n    \\x{11cb6}\n\n# Character not in script\n/^\\p{Marchen}/utf\n    \\x{11cb7}\n\n# Base script check\n/^\\p{sc=Newa}/utf\n    \\x{11400}\n\n/^\\p{Script=Newa}/utf\n    \\x{11461}\n\n# Character not in script\n/^\\p{Newa}/utf\n    \\x{11462}\n\n# Base script check\n/^\\p{sc=Osage}/utf\n    \\x{104b0}\n\n/^\\p{Script=Osge}/utf\n    \\x{104fb}\n\n# Character not in script\n/^\\p{Osage}/utf\n    \\x{104fc}\n\n# Base script check\n/^\\p{sc=Tangut}/utf\n    \\x{16fe0}\n\n/^\\p{Script=Tang}/utf\n    \\x{18d08}\n\n# Character not in script\n/^\\p{Tangut}/utf\n    \\x{18d20}\n\n# Base script check\n/^\\p{sc=Nushu}/utf\n    \\x{16fe1}\n\n/^\\p{Script=Nshu}/utf\n    \\x{1b2fb}\n\n# Character not in script\n/^\\p{Nushu}/utf\n    \\x{1b2fc}\n\n# Base script check\n/^\\p{sc=Soyombo}/utf\n    \\x{11a50}\n\n/^\\p{Script=Soyo}/utf\n    \\x{11aa2}\n\n# Character not in script\n/^\\p{Soyombo}/utf\n    \\x{11aa3}\n\n# Base script check\n/^\\p{sc=Zanabazar_Square}/utf\n    \\x{11a00}\n\n/^\\p{Script=Zanb}/utf\n    \\x{11a47}\n\n# Character not in script\n/^\\p{Zanabazar_Square}/utf\n    \\x{11a48}\n\n# Base script check\n/^\\p{sc=Makasar}/utf\n    \\x{11ee0}\n\n/^\\p{Script=Maka}/utf\n    \\x{11ef8}\n\n# Character not in script\n/^\\p{Makasar}/utf\n    \\x{11ef9}\n\n# Base script check\n/^\\p{sc=Medefaidrin}/utf\n    \\x{16e40}\n\n/^\\p{Script=Medf}/utf\n    \\x{16e9a}\n\n# Character not in script\n/^\\p{Medefaidrin}/utf\n    \\x{16e9b}\n\n# Base script check\n/^\\p{sc=Old_Sogdian}/utf\n    \\x{10f00}\n\n/^\\p{Script=Sogo}/utf\n    \\x{10f27}\n\n# Character not in script\n/^\\p{Old_Sogdian}/utf\n    \\x{10f28}\n\n# Base script check\n/^\\p{sc=Elymaic}/utf\n    \\x{10fe0}\n\n/^\\p{Script=Elym}/utf\n    \\x{10ff6}\n\n# Character not in script\n/^\\p{Elymaic}/utf\n    \\x{10ff7}\n\n# Base script check\n/^\\p{sc=Nyiakeng_Puachue_Hmong}/utf\n    \\x{1e100}\n\n/^\\p{Script=Hmnp}/utf\n    \\x{1e14f}\n\n# Character not in script\n/^\\p{Nyiakeng_Puachue_Hmong}/utf\n    \\x{1e150}\n\n# Base script check\n/^\\p{sc=Wancho}/utf\n    \\x{1e2c0}\n\n/^\\p{Script=Wcho}/utf\n    \\x{1e2ff}\n\n# Character not in script\n/^\\p{Wancho}/utf\n    \\x{1e300}\n\n# Base script check\n/^\\p{sc=Chorasmian}/utf\n    \\x{10fb0}\n\n/^\\p{Script=Chrs}/utf\n    \\x{10fcb}\n\n# Character not in script\n/^\\p{Chorasmian}/utf\n    \\x{10fcc}\n\n# Base script check\n/^\\p{sc=Dives_Akuru}/utf\n    \\x{11900}\n\n/^\\p{Script=Diak}/utf\n    \\x{11959}\n\n# Character not in script\n/^\\p{Dives_Akuru}/utf\n    \\x{1195a}\n\n# Base script check\n/^\\p{sc=Khitan_Small_Script}/utf\n    \\x{16fe4}\n\n/^\\p{Script=Kits}/utf\n    \\x{18cd5}\n\n# Character not in script\n/^\\p{Khitan_Small_Script}/utf\n    \\x{18cd6}\n\n# Base script check\n/^\\p{sc=Tangsa}/utf\n    \\x{16a70}\n\n/^\\p{Script=Tnsa}/utf\n    \\x{16ac9}\n\n# Character not in script\n/^\\p{Tangsa}/utf\n    \\x{16aca}\n\n# Base script check\n/^\\p{sc=Toto}/utf\n    \\x{1e290}\n\n/^\\p{Script=Toto}/utf\n    \\x{1e2ae}\n\n# Character not in script\n/^\\p{Toto}/utf\n    \\x{1e2af}\n\n# Base script check\n/^\\p{sc=Vithkuqi}/utf\n    \\x{10570}\n\n/^\\p{Script=Vith}/utf\n    \\x{105bc}\n\n# Character not in script\n/^\\p{Vithkuqi}/utf\n    \\x{105bd}\n\n# Base script check\n/^\\p{sc=Kawi}/utf\n    \\x{11f00}\n\n/^\\p{Script=Kawi}/utf\n    \\x{11f59}\n\n# Character not in script\n/^\\p{Kawi}/utf\n    \\x{11f6a}\n\n# Base script check\n/^\\p{sc=Nag_Mundari}/utf\n    \\x{1e4d0}\n\n/^\\p{Script=Nagm}/utf\n    \\x{1e4f9}\n\n# Character not in script\n/^\\p{Nag_Mundari}/utf\n    \\x{1e4fa}\n\n# End of testinput26\n"
  },
  {
    "path": "testdata/testinput27",
    "content": "# These tests were generated by maint/GenerateTest.py using PCRE2's UCP\n# data, do not edit unless that data has changed and they are reflecting\n# a previous version.\n\n# Unicode Script Extension tests for version 17.0.0\n\n#perltest\n\n# Base script check\n/^\\p{sc=Latin}/utf\n    A\n\n/^\\p{Script=Latn}/utf\n    \\x{1df2a}\n\n# Script extension check\n/^\\p{Latin}/utf\n    \\x{b7}\n\n/^\\p{scx=Latn}/utf\n    \\x{a92e}\n\n# Script extension only character\n/^\\p{Latin}/utf\n    \\x{b7}\n\n/^\\p{sc=Latin}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Latin}/utf\n    \\x{1df2b}\n\n# Base script check\n/^\\p{sc=Greek}/utf\n    \\x{370}\n\n/^\\p{Script=Grek}/utf\n    \\x{1d245}\n\n# Script extension check\n/^\\p{Greek}/utf\n    \\x{b7}\n\n/^\\p{Script_Extensions=Grek}/utf\n    \\x{205d}\n\n# Script extension only character\n/^\\p{Greek}/utf\n    \\x{b7}\n\n/^\\p{sc=Greek}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Greek}/utf\n    \\x{1d246}\n\n# Base script check\n/^\\p{sc=Cyrillic}/utf\n    \\x{400}\n\n/^\\p{Script=Cyrl}/utf\n    \\x{1e08f}\n\n# Script extension check\n/^\\p{Cyrillic}/utf\n    \\x{2bc}\n\n/^\\p{scx=Cyrl}/utf\n    \\x{a66f}\n\n# Script extension only character\n/^\\p{Cyrillic}/utf\n    \\x{2bc}\n\n/^\\p{sc=Cyrillic}/utf\n    \\x{2bc}\n\n# Character not in script\n/^\\p{Cyrillic}/utf\n    \\x{1e090}\n\n# Base script check\n/^\\p{sc=Armenian}/utf\n    \\x{531}\n\n/^\\p{Script=Armn}/utf\n    \\x{fb17}\n\n# Script extension check\n/^\\p{Armenian}/utf\n    \\x{308}\n\n/^\\p{Script_Extensions=Armn}/utf\n    \\x{589}\n\n# Script extension only character\n/^\\p{Armenian}/utf\n    \\x{308}\n\n/^\\p{sc=Armenian}/utf\n    \\x{308}\n\n# Character not in script\n/^\\p{Armenian}/utf\n    \\x{fb18}\n\n# Base script check\n/^\\p{sc=Hebrew}/utf\n    \\x{591}\n\n/^\\p{Script=Hebr}/utf\n    \\x{fb4f}\n\n# Script extension check\n/^\\p{Hebrew}/utf\n    \\x{307}\n\n/^\\p{scx=Hebr}/utf\n    \\x{308}\n\n# Script extension only character\n/^\\p{Hebrew}/utf\n    \\x{307}\n\n/^\\p{sc=Hebrew}/utf\n    \\x{307}\n\n# Character not in script\n/^\\p{Hebrew}/utf\n    \\x{fb50}\n\n# Base script check\n/^\\p{sc=Arabic}/utf\n    \\x{600}\n\n/^\\p{Script=Arab}/utf\n    \\x{1eef1}\n\n# Script extension check\n/^\\p{Arabic}/utf\n    \\x{60c}\n\n/^\\p{Script_Extensions=Arab}/utf\n    \\x{102fb}\n\n# Script extension only character\n/^\\p{Arabic}/utf\n    \\x{60c}\n\n/^\\p{sc=Arabic}/utf\n    \\x{60c}\n\n# Character not in script\n/^\\p{Arabic}/utf\n    \\x{1eef2}\n\n# Base script check\n/^\\p{sc=Syriac}/utf\n    \\x{700}\n\n/^\\p{Script=Syrc}/utf\n    \\x{86a}\n\n# Script extension check\n/^\\p{Syriac}/utf\n    \\x{303}\n\n/^\\p{scx=Syrc}/utf\n    \\x{1dfa}\n\n# Script extension only character\n/^\\p{Syriac}/utf\n    \\x{303}\n\n/^\\p{sc=Syriac}/utf\n    \\x{303}\n\n# Character not in script\n/^\\p{Syriac}/utf\n    \\x{1dfb}\n\n# Base script check\n/^\\p{sc=Thaana}/utf\n    \\x{780}\n\n/^\\p{Script=Thaa}/utf\n    \\x{7b1}\n\n# Script extension check\n/^\\p{Thaana}/utf\n    \\x{60c}\n\n/^\\p{Script_Extensions=Thaa}/utf\n    \\x{fdfd}\n\n# Script extension only character\n/^\\p{Thaana}/utf\n    \\x{60c}\n\n/^\\p{sc=Thaana}/utf\n    \\x{60c}\n\n# Character not in script\n/^\\p{Thaana}/utf\n    \\x{fdfe}\n\n# Base script check\n/^\\p{sc=Devanagari}/utf\n    \\x{900}\n\n/^\\p{Script=Deva}/utf\n    \\x{11b09}\n\n# Script extension check\n/^\\p{Devanagari}/utf\n    \\x{2bc}\n\n/^\\p{scx=Deva}/utf\n    \\x{a8f3}\n\n# Script extension only character\n/^\\p{Devanagari}/utf\n    \\x{2bc}\n\n/^\\p{sc=Devanagari}/utf\n    \\x{2bc}\n\n# Character not in script\n/^\\p{Devanagari}/utf\n    \\x{11b0a}\n\n# Base script check\n/^\\p{sc=Bengali}/utf\n    \\x{980}\n\n/^\\p{Script=Beng}/utf\n    \\x{9fe}\n\n# Script extension check\n/^\\p{Bengali}/utf\n    \\x{2bc}\n\n/^\\p{Script_Extensions=Beng}/utf\n    \\x{a8f1}\n\n# Script extension only character\n/^\\p{Bengali}/utf\n    \\x{2bc}\n\n/^\\p{sc=Bengali}/utf\n    \\x{2bc}\n\n# Character not in script\n/^\\p{Bengali}/utf\n    \\x{a8f2}\n\n# Base script check\n/^\\p{sc=Gurmukhi}/utf\n    \\x{a01}\n\n/^\\p{Script=Guru}/utf\n    \\x{a76}\n\n# Script extension check\n/^\\p{Gurmukhi}/utf\n    \\x{951}\n\n/^\\p{scx=Guru}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Gurmukhi}/utf\n    \\x{951}\n\n/^\\p{sc=Gurmukhi}/utf\n    \\x{951}\n\n# Character not in script\n/^\\p{Gurmukhi}/utf\n    \\x{a83a}\n\n# Base script check\n/^\\p{sc=Gujarati}/utf\n    \\x{a81}\n\n/^\\p{Script=Gujr}/utf\n    \\x{aff}\n\n# Script extension check\n/^\\p{Gujarati}/utf\n    \\x{951}\n\n/^\\p{Script_Extensions=Gujr}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Gujarati}/utf\n    \\x{951}\n\n/^\\p{sc=Gujarati}/utf\n    \\x{951}\n\n# Character not in script\n/^\\p{Gujarati}/utf\n    \\x{a83a}\n\n# Base script check\n/^\\p{sc=Oriya}/utf\n    \\x{b01}\n\n/^\\p{Script=Orya}/utf\n    \\x{b77}\n\n# Script extension check\n/^\\p{Oriya}/utf\n    \\x{951}\n\n/^\\p{scx=Orya}/utf\n    \\x{1cf2}\n\n# Script extension only character\n/^\\p{Oriya}/utf\n    \\x{951}\n\n/^\\p{sc=Oriya}/utf\n    \\x{951}\n\n# Character not in script\n/^\\p{Oriya}/utf\n    \\x{1cf3}\n\n# Base script check\n/^\\p{sc=Tamil}/utf\n    \\x{b82}\n\n/^\\p{Script=Taml}/utf\n    \\x{11fff}\n\n# Script extension check\n/^\\p{Tamil}/utf\n    \\x{951}\n\n/^\\p{Script_Extensions=Taml}/utf\n    \\x{11fd3}\n\n# Script extension only character\n/^\\p{Tamil}/utf\n    \\x{951}\n\n/^\\p{sc=Tamil}/utf\n    \\x{951}\n\n# Character not in script\n/^\\p{Tamil}/utf\n    \\x{12000}\n\n# Base script check\n/^\\p{sc=Telugu}/utf\n    \\x{c00}\n\n/^\\p{Script=Telu}/utf\n    \\x{c7f}\n\n# Script extension check\n/^\\p{Telugu}/utf\n    \\x{951}\n\n/^\\p{scx=Telu}/utf\n    \\x{1cf2}\n\n# Script extension only character\n/^\\p{Telugu}/utf\n    \\x{951}\n\n/^\\p{sc=Telugu}/utf\n    \\x{951}\n\n# Character not in script\n/^\\p{Telugu}/utf\n    \\x{1cf3}\n\n# Base script check\n/^\\p{sc=Kannada}/utf\n    \\x{c80}\n\n/^\\p{Script=Knda}/utf\n    \\x{cf3}\n\n# Script extension check\n/^\\p{Kannada}/utf\n    \\x{951}\n\n/^\\p{Script_Extensions=Knda}/utf\n    \\x{a835}\n\n# Script extension only character\n/^\\p{Kannada}/utf\n    \\x{951}\n\n/^\\p{sc=Kannada}/utf\n    \\x{951}\n\n# Character not in script\n/^\\p{Kannada}/utf\n    \\x{a836}\n\n# Base script check\n/^\\p{sc=Malayalam}/utf\n    \\x{d00}\n\n/^\\p{Script=Mlym}/utf\n    \\x{d7f}\n\n# Script extension check\n/^\\p{Malayalam}/utf\n    \\x{951}\n\n/^\\p{scx=Mlym}/utf\n    \\x{a832}\n\n# Script extension only character\n/^\\p{Malayalam}/utf\n    \\x{951}\n\n/^\\p{sc=Malayalam}/utf\n    \\x{951}\n\n# Character not in script\n/^\\p{Malayalam}/utf\n    \\x{a833}\n\n# Base script check\n/^\\p{sc=Sinhala}/utf\n    \\x{d81}\n\n/^\\p{Script=Sinh}/utf\n    \\x{111f4}\n\n# Script extension check\n/^\\p{Sinhala}/utf\n    \\x{964}\n\n/^\\p{Script_Extensions=Sinh}/utf\n    \\x{1cf2}\n\n# Script extension only character\n/^\\p{Sinhala}/utf\n    \\x{964}\n\n/^\\p{sc=Sinhala}/utf\n    \\x{964}\n\n# Character not in script\n/^\\p{Sinhala}/utf\n    \\x{111f5}\n\n# Base script check\n/^\\p{sc=Thai}/utf\n    \\x{e01}\n\n/^\\p{Script=Thai}/utf\n    \\x{e5b}\n\n# Script extension check\n/^\\p{Thai}/utf\n    \\x{2bc}\n\n/^\\p{scx=Thai}/utf\n    \\x{331}\n\n# Script extension only character\n/^\\p{Thai}/utf\n    \\x{2bc}\n\n/^\\p{sc=Thai}/utf\n    \\x{2bc}\n\n# Character not in script\n/^\\p{Thai}/utf\n    \\x{e5c}\n\n# Base script check\n/^\\p{sc=Tibetan}/utf\n    \\x{f00}\n\n/^\\p{Script=Tibt}/utf\n    \\x{fda}\n\n# Script extension check\n/^\\p{Tibetan}/utf\n    \\x{3008}\n\n/^\\p{Script_Extensions=Tibt}/utf\n    \\x{300b}\n\n# Script extension only character\n/^\\p{Tibetan}/utf\n    \\x{3008}\n\n/^\\p{sc=Tibetan}/utf\n    \\x{3008}\n\n# Character not in script\n/^\\p{Tibetan}/utf\n    \\x{300c}\n\n# Base script check\n/^\\p{sc=Myanmar}/utf\n    \\x{1000}\n\n/^\\p{Script=Mymr}/utf\n    \\x{116e3}\n\n# Script extension check\n/^\\p{Myanmar}/utf\n    \\x{1040}\n\n/^\\p{scx=Mymr}/utf\n    \\x{a92e}\n\n# Script extension only character\n/^\\p{Myanmar}/utf\n    \\x{a92e}\n\n/^\\p{sc=Myanmar}/utf\n    \\x{a92e}\n\n# Character not in script\n/^\\p{Myanmar}/utf\n    \\x{116e4}\n\n# Base script check\n/^\\p{sc=Georgian}/utf\n    \\x{10a0}\n\n/^\\p{Script=Geor}/utf\n    \\x{2d2d}\n\n# Script extension check\n/^\\p{Georgian}/utf\n    \\x{b7}\n\n/^\\p{Script_Extensions=Geor}/utf\n    \\x{2e31}\n\n# Script extension only character\n/^\\p{Georgian}/utf\n    \\x{b7}\n\n/^\\p{sc=Georgian}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Georgian}/utf\n    \\x{2e32}\n\n# Base script check\n/^\\p{sc=Hangul}/utf\n    \\x{1100}\n\n/^\\p{Script=Hang}/utf\n    \\x{ffdc}\n\n# Script extension check\n/^\\p{Hangul}/utf\n    \\x{3001}\n\n/^\\p{scx=Hang}/utf\n    \\x{ff65}\n\n# Script extension only character\n/^\\p{Hangul}/utf\n    \\x{3001}\n\n/^\\p{sc=Hangul}/utf\n    \\x{3001}\n\n# Character not in script\n/^\\p{Hangul}/utf\n    \\x{ffdd}\n\n# Base script check\n/^\\p{sc=Ethiopic}/utf\n    \\x{1200}\n\n/^\\p{Script=Ethi}/utf\n    \\x{1e7fe}\n\n# Script extension check\n/^\\p{Ethiopic}/utf\n    \\x{30e}\n\n/^\\p{Script_Extensions=Ethi}/utf\n    \\x{30e}\n\n# Script extension only character\n/^\\p{Ethiopic}/utf\n    \\x{30e}\n\n/^\\p{sc=Ethiopic}/utf\n    \\x{30e}\n\n# Character not in script\n/^\\p{Ethiopic}/utf\n    \\x{1e7ff}\n\n# Base script check\n/^\\p{sc=Cherokee}/utf\n    \\x{13a0}\n\n/^\\p{Script=Cher}/utf\n    \\x{abbf}\n\n# Script extension check\n/^\\p{Cherokee}/utf\n    \\x{300}\n\n/^\\p{scx=Cher}/utf\n    \\x{331}\n\n# Script extension only character\n/^\\p{Cherokee}/utf\n    \\x{300}\n\n/^\\p{sc=Cherokee}/utf\n    \\x{300}\n\n# Character not in script\n/^\\p{Cherokee}/utf\n    \\x{abc0}\n\n# Base script check\n/^\\p{sc=Runic}/utf\n    \\x{16a0}\n\n/^\\p{Script=Runr}/utf\n    \\x{16f8}\n\n# Script extension check\n/^\\p{Runic}/utf\n    \\x{16eb}\n\n/^\\p{Script_Extensions=Runr}/utf\n    \\x{16ed}\n\n# Script extension only character\n/^\\p{Runic}/utf\n    \\x{16eb}\n\n/^\\p{sc=Runic}/utf\n    \\x{16eb}\n\n# Character not in script\n/^\\p{Runic}/utf\n    \\x{16f9}\n\n# Base script check\n/^\\p{sc=Mongolian}/utf\n    \\x{1800}\n\n/^\\p{Script=Mong}/utf\n    \\x{1166c}\n\n# Script extension check\n/^\\p{Mongolian}/utf\n    \\x{1802}\n\n/^\\p{scx=Mong}/utf\n    \\x{300b}\n\n# Script extension only character\n/^\\p{Mongolian}/utf\n    \\x{1802}\n\n/^\\p{sc=Mongolian}/utf\n    \\x{1802}\n\n# Character not in script\n/^\\p{Mongolian}/utf\n    \\x{1166d}\n\n# Base script check\n/^\\p{sc=Hiragana}/utf\n    \\x{3041}\n\n/^\\p{Script=Hira}/utf\n    \\x{1f200}\n\n# Script extension check\n/^\\p{Hiragana}/utf\n    \\x{3001}\n\n/^\\p{Script_Extensions=Hira}/utf\n    \\x{ff9f}\n\n# Script extension only character\n/^\\p{Hiragana}/utf\n    \\x{3001}\n\n/^\\p{sc=Hiragana}/utf\n    \\x{3001}\n\n# Character not in script\n/^\\p{Hiragana}/utf\n    \\x{1f201}\n\n# Base script check\n/^\\p{sc=Katakana}/utf\n    \\x{30a1}\n\n/^\\p{Script=Kana}/utf\n    \\x{1b167}\n\n# Script extension check\n/^\\p{Katakana}/utf\n    \\x{305}\n\n/^\\p{scx=Kana}/utf\n    \\x{ff9f}\n\n# Script extension only character\n/^\\p{Katakana}/utf\n    \\x{305}\n\n/^\\p{sc=Katakana}/utf\n    \\x{305}\n\n# Character not in script\n/^\\p{Katakana}/utf\n    \\x{1b168}\n\n# Base script check\n/^\\p{sc=Bopomofo}/utf\n    \\x{2ea}\n\n/^\\p{Script=Bopo}/utf\n    \\x{31bf}\n\n# Script extension check\n/^\\p{Bopomofo}/utf\n    \\x{2c7}\n\n/^\\p{Script_Extensions=Bopo}/utf\n    \\x{ff65}\n\n# Script extension only character\n/^\\p{Bopomofo}/utf\n    \\x{2c7}\n\n/^\\p{sc=Bopomofo}/utf\n    \\x{2c7}\n\n# Character not in script\n/^\\p{Bopomofo}/utf\n    \\x{ff66}\n\n# Base script check\n/^\\p{sc=Han}/utf\n    \\x{2e80}\n\n/^\\p{Script=Hani}/utf\n    \\x{33479}\n\n# Script extension check\n/^\\p{Han}/utf\n    \\x{b7}\n\n/^\\p{scx=Hani}/utf\n    \\x{1f251}\n\n# Script extension only character\n/^\\p{Han}/utf\n    \\x{b7}\n\n/^\\p{sc=Han}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Han}/utf\n    \\x{3347a}\n\n# Base script check\n/^\\p{sc=Yi}/utf\n    \\x{a000}\n\n/^\\p{Script=Yiii}/utf\n    \\x{a4c6}\n\n# Script extension check\n/^\\p{Yi}/utf\n    \\x{3001}\n\n/^\\p{Script_Extensions=Yiii}/utf\n    \\x{ff65}\n\n# Script extension only character\n/^\\p{Yi}/utf\n    \\x{3001}\n\n/^\\p{sc=Yi}/utf\n    \\x{3001}\n\n# Character not in script\n/^\\p{Yi}/utf\n    \\x{ff66}\n\n# Base script check\n/^\\p{sc=Gothic}/utf\n    \\x{10330}\n\n/^\\p{Script=Goth}/utf\n    \\x{1034a}\n\n# Script extension check\n/^\\p{Gothic}/utf\n    \\x{b7}\n\n/^\\p{scx=Goth}/utf\n    \\x{331}\n\n# Script extension only character\n/^\\p{Gothic}/utf\n    \\x{b7}\n\n/^\\p{sc=Gothic}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Gothic}/utf\n    \\x{1034b}\n\n# Base script check\n/^\\p{sc=Tagalog}/utf\n    \\x{1700}\n\n/^\\p{Script=Tglg}/utf\n    \\x{171f}\n\n# Script extension check\n/^\\p{Tagalog}/utf\n    \\x{1735}\n\n/^\\p{Script_Extensions=Tglg}/utf\n    \\x{1736}\n\n# Script extension only character\n/^\\p{Tagalog}/utf\n    \\x{1735}\n\n/^\\p{sc=Tagalog}/utf\n    \\x{1735}\n\n# Character not in script\n/^\\p{Tagalog}/utf\n    \\x{1737}\n\n# Base script check\n/^\\p{sc=Hanunoo}/utf\n    \\x{1720}\n\n/^\\p{Script=Hano}/utf\n    \\x{1734}\n\n# Script extension check\n/^\\p{Hanunoo}/utf\n    \\x{1735}\n\n/^\\p{scx=Hano}/utf\n    \\x{1736}\n\n# Script extension only character\n/^\\p{Hanunoo}/utf\n    \\x{1735}\n\n/^\\p{sc=Hanunoo}/utf\n    \\x{1735}\n\n# Character not in script\n/^\\p{Hanunoo}/utf\n    \\x{1737}\n\n# Base script check\n/^\\p{sc=Buhid}/utf\n    \\x{1740}\n\n/^\\p{Script=Buhd}/utf\n    \\x{1753}\n\n# Script extension check\n/^\\p{Buhid}/utf\n    \\x{1735}\n\n/^\\p{Script_Extensions=Buhd}/utf\n    \\x{1736}\n\n# Script extension only character\n/^\\p{Buhid}/utf\n    \\x{1735}\n\n/^\\p{sc=Buhid}/utf\n    \\x{1735}\n\n# Character not in script\n/^\\p{Buhid}/utf\n    \\x{1754}\n\n# Base script check\n/^\\p{sc=Tagbanwa}/utf\n    \\x{1760}\n\n/^\\p{Script=Tagb}/utf\n    \\x{1773}\n\n# Script extension check\n/^\\p{Tagbanwa}/utf\n    \\x{1735}\n\n/^\\p{scx=Tagb}/utf\n    \\x{1736}\n\n# Script extension only character\n/^\\p{Tagbanwa}/utf\n    \\x{1735}\n\n/^\\p{sc=Tagbanwa}/utf\n    \\x{1735}\n\n# Character not in script\n/^\\p{Tagbanwa}/utf\n    \\x{1774}\n\n# Base script check\n/^\\p{sc=Limbu}/utf\n    \\x{1900}\n\n/^\\p{Script=Limb}/utf\n    \\x{194f}\n\n# Script extension check\n/^\\p{Limbu}/utf\n    \\x{965}\n\n/^\\p{Script_Extensions=Limb}/utf\n    \\x{965}\n\n# Script extension only character\n/^\\p{Limbu}/utf\n    \\x{965}\n\n/^\\p{sc=Limbu}/utf\n    \\x{965}\n\n# Character not in script\n/^\\p{Limbu}/utf\n    \\x{1950}\n\n# Base script check\n/^\\p{sc=Tai_Le}/utf\n    \\x{1950}\n\n/^\\p{Script=Tale}/utf\n    \\x{1974}\n\n# Script extension check\n/^\\p{Tai_Le}/utf\n    \\x{300}\n\n/^\\p{scx=Tale}/utf\n    \\x{1049}\n\n# Script extension only character\n/^\\p{Tai_Le}/utf\n    \\x{300}\n\n/^\\p{sc=Tai_Le}/utf\n    \\x{300}\n\n# Character not in script\n/^\\p{Tai_Le}/utf\n    \\x{1975}\n\n# Base script check\n/^\\p{sc=Linear_B}/utf\n    \\x{10000}\n\n/^\\p{Script=Linb}/utf\n    \\x{100fa}\n\n# Script extension check\n/^\\p{Linear_B}/utf\n    \\x{10100}\n\n/^\\p{Script_Extensions=Linb}/utf\n    \\x{1013f}\n\n# Script extension only character\n/^\\p{Linear_B}/utf\n    \\x{10100}\n\n/^\\p{sc=Linear_B}/utf\n    \\x{10100}\n\n# Character not in script\n/^\\p{Linear_B}/utf\n    \\x{10140}\n\n# Base script check\n/^\\p{sc=Shavian}/utf\n    \\x{10450}\n\n/^\\p{Script=Shaw}/utf\n    \\x{1047f}\n\n# Script extension check\n/^\\p{Shavian}/utf\n    \\x{b7}\n\n/^\\p{scx=Shaw}/utf\n    \\x{b7}\n\n# Script extension only character\n/^\\p{Shavian}/utf\n    \\x{b7}\n\n/^\\p{sc=Shavian}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Shavian}/utf\n    \\x{10480}\n\n# Base script check\n/^\\p{sc=Cypriot}/utf\n    \\x{10800}\n\n/^\\p{Script=Cprt}/utf\n    \\x{1083f}\n\n# Script extension check\n/^\\p{Cypriot}/utf\n    \\x{10100}\n\n/^\\p{Script_Extensions=Cprt}/utf\n    \\x{1013f}\n\n# Script extension only character\n/^\\p{Cypriot}/utf\n    \\x{10100}\n\n/^\\p{sc=Cypriot}/utf\n    \\x{10100}\n\n# Character not in script\n/^\\p{Cypriot}/utf\n    \\x{10840}\n\n# Base script check\n/^\\p{sc=Buginese}/utf\n    \\x{1a00}\n\n/^\\p{Script=Bugi}/utf\n    \\x{1a1f}\n\n# Script extension check\n/^\\p{Buginese}/utf\n    \\x{a9cf}\n\n/^\\p{scx=Bugi}/utf\n    \\x{a9cf}\n\n# Script extension only character\n/^\\p{Buginese}/utf\n    \\x{a9cf}\n\n/^\\p{sc=Buginese}/utf\n    \\x{a9cf}\n\n# Character not in script\n/^\\p{Buginese}/utf\n    \\x{a9d0}\n\n# Base script check\n/^\\p{sc=Coptic}/utf\n    \\x{3e2}\n\n/^\\p{Script=Copt}/utf\n    \\x{2cff}\n\n# Script extension check\n/^\\p{Coptic}/utf\n    \\x{b7}\n\n/^\\p{Script_Extensions=Copt}/utf\n    \\x{102fb}\n\n# Script extension only character\n/^\\p{Coptic}/utf\n    \\x{b7}\n\n/^\\p{sc=Coptic}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Coptic}/utf\n    \\x{102fc}\n\n# Base script check\n/^\\p{sc=Glagolitic}/utf\n    \\x{2c00}\n\n/^\\p{Script=Glag}/utf\n    \\x{1e02a}\n\n# Script extension check\n/^\\p{Glagolitic}/utf\n    \\x{b7}\n\n/^\\p{scx=Glag}/utf\n    \\x{a66f}\n\n# Script extension only character\n/^\\p{Glagolitic}/utf\n    \\x{b7}\n\n/^\\p{sc=Glagolitic}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Glagolitic}/utf\n    \\x{1e02b}\n\n# Base script check\n/^\\p{sc=Tifinagh}/utf\n    \\x{2d30}\n\n/^\\p{Script=Tfng}/utf\n    \\x{2d7f}\n\n# Script extension check\n/^\\p{Tifinagh}/utf\n    \\x{302}\n\n/^\\p{Script_Extensions=Tfng}/utf\n    \\x{323}\n\n# Script extension only character\n/^\\p{Tifinagh}/utf\n    \\x{302}\n\n/^\\p{sc=Tifinagh}/utf\n    \\x{302}\n\n# Character not in script\n/^\\p{Tifinagh}/utf\n    \\x{2d80}\n\n# Base script check\n/^\\p{sc=Syloti_Nagri}/utf\n    \\x{a800}\n\n/^\\p{Script=Sylo}/utf\n    \\x{a82c}\n\n# Script extension check\n/^\\p{Syloti_Nagri}/utf\n    \\x{964}\n\n/^\\p{scx=Sylo}/utf\n    \\x{9ef}\n\n# Script extension only character\n/^\\p{Syloti_Nagri}/utf\n    \\x{964}\n\n/^\\p{sc=Syloti_Nagri}/utf\n    \\x{964}\n\n# Character not in script\n/^\\p{Syloti_Nagri}/utf\n    \\x{a82d}\n\n# Base script check\n/^\\p{sc=Phags_Pa}/utf\n    \\x{a840}\n\n/^\\p{Script=Phag}/utf\n    \\x{a877}\n\n# Script extension check\n/^\\p{Phags_Pa}/utf\n    \\x{1802}\n\n/^\\p{Script_Extensions=Phag}/utf\n    \\x{3002}\n\n# Script extension only character\n/^\\p{Phags_Pa}/utf\n    \\x{1802}\n\n/^\\p{sc=Phags_Pa}/utf\n    \\x{1802}\n\n# Character not in script\n/^\\p{Phags_Pa}/utf\n    \\x{a878}\n\n# Base script check\n/^\\p{sc=Nko}/utf\n    \\x{7c0}\n\n/^\\p{Script=Nkoo}/utf\n    \\x{7ff}\n\n# Script extension check\n/^\\p{Nko}/utf\n    \\x{60c}\n\n/^\\p{scx=Nkoo}/utf\n    \\x{fd3f}\n\n# Script extension only character\n/^\\p{Nko}/utf\n    \\x{60c}\n\n/^\\p{sc=Nko}/utf\n    \\x{60c}\n\n# Character not in script\n/^\\p{Nko}/utf\n    \\x{fd40}\n\n# Base script check\n/^\\p{sc=Kayah_Li}/utf\n    \\x{a900}\n\n/^\\p{Script=Kali}/utf\n    \\x{a92f}\n\n# Script extension check\n/^\\p{Kayah_Li}/utf\n    \\x{a92e}\n\n/^\\p{Script_Extensions=Kali}/utf\n    \\x{a92e}\n\n# Script extension only character\n/^\\p{Kayah_Li}/utf\n    \\x{a92e}\n\n/^\\p{sc=Kayah_Li}/utf\n    \\x{a92e}\n\n# Character not in script\n/^\\p{Kayah_Li}/utf\n    \\x{a930}\n\n# Base script check\n/^\\p{sc=Lycian}/utf\n    \\x{10280}\n\n/^\\p{Script=Lyci}/utf\n    \\x{1029c}\n\n# Script extension check\n/^\\p{Lycian}/utf\n    \\x{205a}\n\n/^\\p{scx=Lyci}/utf\n    \\x{205a}\n\n# Script extension only character\n/^\\p{Lycian}/utf\n    \\x{205a}\n\n/^\\p{sc=Lycian}/utf\n    \\x{205a}\n\n# Character not in script\n/^\\p{Lycian}/utf\n    \\x{1029d}\n\n# Base script check\n/^\\p{sc=Carian}/utf\n    \\x{102a0}\n\n/^\\p{Script=Cari}/utf\n    \\x{102d0}\n\n# Script extension check\n/^\\p{Carian}/utf\n    \\x{b7}\n\n/^\\p{Script_Extensions=Cari}/utf\n    \\x{2e31}\n\n# Script extension only character\n/^\\p{Carian}/utf\n    \\x{b7}\n\n/^\\p{sc=Carian}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Carian}/utf\n    \\x{102d1}\n\n# Base script check\n/^\\p{sc=Lydian}/utf\n    \\x{10920}\n\n/^\\p{Script=Lydi}/utf\n    \\x{1093f}\n\n# Script extension check\n/^\\p{Lydian}/utf\n    \\x{b7}\n\n/^\\p{scx=Lydi}/utf\n    \\x{2e31}\n\n# Script extension only character\n/^\\p{Lydian}/utf\n    \\x{b7}\n\n/^\\p{sc=Lydian}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Lydian}/utf\n    \\x{10940}\n\n# Base script check\n/^\\p{sc=Avestan}/utf\n    \\x{10b00}\n\n/^\\p{Script=Avst}/utf\n    \\x{10b3f}\n\n# Script extension check\n/^\\p{Avestan}/utf\n    \\x{b7}\n\n/^\\p{Script_Extensions=Avst}/utf\n    \\x{2e31}\n\n# Script extension only character\n/^\\p{Avestan}/utf\n    \\x{b7}\n\n/^\\p{sc=Avestan}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Avestan}/utf\n    \\x{10b40}\n\n# Base script check\n/^\\p{sc=Samaritan}/utf\n    \\x{800}\n\n/^\\p{Script=Samr}/utf\n    \\x{83e}\n\n# Script extension check\n/^\\p{Samaritan}/utf\n    \\x{2e31}\n\n/^\\p{scx=Samr}/utf\n    \\x{2e31}\n\n# Script extension only character\n/^\\p{Samaritan}/utf\n    \\x{2e31}\n\n/^\\p{sc=Samaritan}/utf\n    \\x{2e31}\n\n# Character not in script\n/^\\p{Samaritan}/utf\n    \\x{2e32}\n\n# Base script check\n/^\\p{sc=Lisu}/utf\n    \\x{a4d0}\n\n/^\\p{Script=Lisu}/utf\n    \\x{11fb0}\n\n# Script extension check\n/^\\p{Lisu}/utf\n    \\x{2bc}\n\n/^\\p{Script_Extensions=Lisu}/utf\n    \\x{300b}\n\n# Script extension only character\n/^\\p{Lisu}/utf\n    \\x{2bc}\n\n/^\\p{sc=Lisu}/utf\n    \\x{2bc}\n\n# Character not in script\n/^\\p{Lisu}/utf\n    \\x{11fb1}\n\n# Base script check\n/^\\p{sc=Javanese}/utf\n    \\x{a980}\n\n/^\\p{Script=Java}/utf\n    \\x{a9df}\n\n# Script extension check\n/^\\p{Javanese}/utf\n    \\x{a9cf}\n\n/^\\p{scx=Java}/utf\n    \\x{a9cf}\n\n# Script extension only character\n/^\\p{Javanese}/utf\n    \\x{a9cf}\n\n/^\\p{sc=Javanese}/utf\n    \\x{a9cf}\n\n# Character not in script\n/^\\p{Javanese}/utf\n    \\x{a9e0}\n\n# Base script check\n/^\\p{sc=Old_Turkic}/utf\n    \\x{10c00}\n\n/^\\p{Script=Orkh}/utf\n    \\x{10c48}\n\n# Script extension check\n/^\\p{Old_Turkic}/utf\n    \\x{205a}\n\n/^\\p{Script_Extensions=Orkh}/utf\n    \\x{2e30}\n\n# Script extension only character\n/^\\p{Old_Turkic}/utf\n    \\x{205a}\n\n/^\\p{sc=Old_Turkic}/utf\n    \\x{205a}\n\n# Character not in script\n/^\\p{Old_Turkic}/utf\n    \\x{10c49}\n\n# Base script check\n/^\\p{sc=Kaithi}/utf\n    \\x{11080}\n\n/^\\p{Script=Kthi}/utf\n    \\x{110cd}\n\n# Script extension check\n/^\\p{Kaithi}/utf\n    \\x{966}\n\n/^\\p{scx=Kthi}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Kaithi}/utf\n    \\x{966}\n\n/^\\p{sc=Kaithi}/utf\n    \\x{966}\n\n# Character not in script\n/^\\p{Kaithi}/utf\n    \\x{110ce}\n\n# Base script check\n/^\\p{sc=Mandaic}/utf\n    \\x{840}\n\n/^\\p{Script=Mand}/utf\n    \\x{85e}\n\n# Script extension check\n/^\\p{Mandaic}/utf\n    \\x{640}\n\n/^\\p{Script_Extensions=Mand}/utf\n    \\x{640}\n\n# Script extension only character\n/^\\p{Mandaic}/utf\n    \\x{640}\n\n/^\\p{sc=Mandaic}/utf\n    \\x{640}\n\n# Character not in script\n/^\\p{Mandaic}/utf\n    \\x{85f}\n\n# Base script check\n/^\\p{sc=Chakma}/utf\n    \\x{11100}\n\n/^\\p{Script=Cakm}/utf\n    \\x{11147}\n\n# Script extension check\n/^\\p{Chakma}/utf\n    \\x{9e6}\n\n/^\\p{scx=Cakm}/utf\n    \\x{1049}\n\n# Script extension only character\n/^\\p{Chakma}/utf\n    \\x{9e6}\n\n/^\\p{sc=Chakma}/utf\n    \\x{9e6}\n\n# Character not in script\n/^\\p{Chakma}/utf\n    \\x{11148}\n\n# Base script check\n/^\\p{sc=Meroitic_Hieroglyphs}/utf\n    \\x{10980}\n\n/^\\p{Script=Mero}/utf\n    \\x{1099f}\n\n# Script extension check\n/^\\p{Meroitic_Hieroglyphs}/utf\n    \\x{205d}\n\n/^\\p{Script_Extensions=Mero}/utf\n    \\x{205d}\n\n# Script extension only character\n/^\\p{Meroitic_Hieroglyphs}/utf\n    \\x{205d}\n\n/^\\p{sc=Meroitic_Hieroglyphs}/utf\n    \\x{205d}\n\n# Character not in script\n/^\\p{Meroitic_Hieroglyphs}/utf\n    \\x{109a0}\n\n# Base script check\n/^\\p{sc=Sharada}/utf\n    \\x{11180}\n\n/^\\p{Script=Shrd}/utf\n    \\x{11b67}\n\n# Script extension check\n/^\\p{Sharada}/utf\n    \\x{951}\n\n/^\\p{scx=Shrd}/utf\n    \\x{a838}\n\n# Script extension only character\n/^\\p{Sharada}/utf\n    \\x{951}\n\n/^\\p{sc=Sharada}/utf\n    \\x{951}\n\n# Character not in script\n/^\\p{Sharada}/utf\n    \\x{11b68}\n\n# Base script check\n/^\\p{sc=Takri}/utf\n    \\x{11680}\n\n/^\\p{Script=Takr}/utf\n    \\x{116c9}\n\n# Script extension check\n/^\\p{Takri}/utf\n    \\x{964}\n\n/^\\p{Script_Extensions=Takr}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Takri}/utf\n    \\x{964}\n\n/^\\p{sc=Takri}/utf\n    \\x{964}\n\n# Character not in script\n/^\\p{Takri}/utf\n    \\x{116ca}\n\n# Base script check\n/^\\p{sc=Caucasian_Albanian}/utf\n    \\x{10530}\n\n/^\\p{Script=Aghb}/utf\n    \\x{1056f}\n\n# Script extension check\n/^\\p{Caucasian_Albanian}/utf\n    \\x{304}\n\n/^\\p{scx=Aghb}/utf\n    \\x{35e}\n\n# Script extension only character\n/^\\p{Caucasian_Albanian}/utf\n    \\x{304}\n\n/^\\p{sc=Caucasian_Albanian}/utf\n    \\x{304}\n\n# Character not in script\n/^\\p{Caucasian_Albanian}/utf\n    \\x{10570}\n\n# Base script check\n/^\\p{sc=Duployan}/utf\n    \\x{1bc00}\n\n/^\\p{Script=Dupl}/utf\n    \\x{1bc9f}\n\n# Script extension check\n/^\\p{Duployan}/utf\n    \\x{b7}\n\n/^\\p{Script_Extensions=Dupl}/utf\n    \\x{1bca3}\n\n# Script extension only character\n/^\\p{Duployan}/utf\n    \\x{b7}\n\n/^\\p{sc=Duployan}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Duployan}/utf\n    \\x{1bca4}\n\n# Base script check\n/^\\p{sc=Elbasan}/utf\n    \\x{10500}\n\n/^\\p{Script=Elba}/utf\n    \\x{10527}\n\n# Script extension check\n/^\\p{Elbasan}/utf\n    \\x{b7}\n\n/^\\p{scx=Elba}/utf\n    \\x{305}\n\n# Script extension only character\n/^\\p{Elbasan}/utf\n    \\x{b7}\n\n/^\\p{sc=Elbasan}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Elbasan}/utf\n    \\x{10528}\n\n# Base script check\n/^\\p{sc=Grantha}/utf\n    \\x{11300}\n\n/^\\p{Script=Gran}/utf\n    \\x{11374}\n\n# Script extension check\n/^\\p{Grantha}/utf\n    \\x{951}\n\n/^\\p{Script_Extensions=Gran}/utf\n    \\x{11fd3}\n\n# Script extension only character\n/^\\p{Grantha}/utf\n    \\x{951}\n\n/^\\p{sc=Grantha}/utf\n    \\x{951}\n\n# Character not in script\n/^\\p{Grantha}/utf\n    \\x{11fd4}\n\n# Base script check\n/^\\p{sc=Khojki}/utf\n    \\x{11200}\n\n/^\\p{Script=Khoj}/utf\n    \\x{11241}\n\n# Script extension check\n/^\\p{Khojki}/utf\n    \\x{ae6}\n\n/^\\p{scx=Khoj}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Khojki}/utf\n    \\x{ae6}\n\n/^\\p{sc=Khojki}/utf\n    \\x{ae6}\n\n# Character not in script\n/^\\p{Khojki}/utf\n    \\x{11242}\n\n# Base script check\n/^\\p{sc=Linear_A}/utf\n    \\x{10600}\n\n/^\\p{Script=Lina}/utf\n    \\x{10767}\n\n# Script extension check\n/^\\p{Linear_A}/utf\n    \\x{10107}\n\n/^\\p{Script_Extensions=Lina}/utf\n    \\x{10133}\n\n# Script extension only character\n/^\\p{Linear_A}/utf\n    \\x{10107}\n\n/^\\p{sc=Linear_A}/utf\n    \\x{10107}\n\n# Character not in script\n/^\\p{Linear_A}/utf\n    \\x{10768}\n\n# Base script check\n/^\\p{sc=Mahajani}/utf\n    \\x{11150}\n\n/^\\p{Script=Mahj}/utf\n    \\x{11176}\n\n# Script extension check\n/^\\p{Mahajani}/utf\n    \\x{b7}\n\n/^\\p{scx=Mahj}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Mahajani}/utf\n    \\x{b7}\n\n/^\\p{sc=Mahajani}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Mahajani}/utf\n    \\x{11177}\n\n# Base script check\n/^\\p{sc=Manichaean}/utf\n    \\x{10ac0}\n\n/^\\p{Script=Mani}/utf\n    \\x{10af6}\n\n# Script extension check\n/^\\p{Manichaean}/utf\n    \\x{640}\n\n/^\\p{Script_Extensions=Mani}/utf\n    \\x{10af2}\n\n# Script extension only character\n/^\\p{Manichaean}/utf\n    \\x{640}\n\n/^\\p{sc=Manichaean}/utf\n    \\x{640}\n\n# Character not in script\n/^\\p{Manichaean}/utf\n    \\x{10af7}\n\n# Base script check\n/^\\p{sc=Modi}/utf\n    \\x{11600}\n\n/^\\p{Script=Modi}/utf\n    \\x{11659}\n\n# Script extension check\n/^\\p{Modi}/utf\n    \\x{a830}\n\n/^\\p{scx=Modi}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Modi}/utf\n    \\x{a830}\n\n/^\\p{sc=Modi}/utf\n    \\x{a830}\n\n# Character not in script\n/^\\p{Modi}/utf\n    \\x{1165a}\n\n# Base script check\n/^\\p{sc=Old_Permic}/utf\n    \\x{10350}\n\n/^\\p{Script=Perm}/utf\n    \\x{1037a}\n\n# Script extension check\n/^\\p{Old_Permic}/utf\n    \\x{b7}\n\n/^\\p{Script_Extensions=Perm}/utf\n    \\x{483}\n\n# Script extension only character\n/^\\p{Old_Permic}/utf\n    \\x{b7}\n\n/^\\p{sc=Old_Permic}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Old_Permic}/utf\n    \\x{1037b}\n\n# Base script check\n/^\\p{sc=Psalter_Pahlavi}/utf\n    \\x{10b80}\n\n/^\\p{Script=Phlp}/utf\n    \\x{10baf}\n\n# Script extension check\n/^\\p{Psalter_Pahlavi}/utf\n    \\x{640}\n\n/^\\p{scx=Phlp}/utf\n    \\x{640}\n\n# Script extension only character\n/^\\p{Psalter_Pahlavi}/utf\n    \\x{640}\n\n/^\\p{sc=Psalter_Pahlavi}/utf\n    \\x{640}\n\n# Character not in script\n/^\\p{Psalter_Pahlavi}/utf\n    \\x{10bb0}\n\n# Base script check\n/^\\p{sc=Khudawadi}/utf\n    \\x{112b0}\n\n/^\\p{Script=Sind}/utf\n    \\x{112f9}\n\n# Script extension check\n/^\\p{Khudawadi}/utf\n    \\x{964}\n\n/^\\p{Script_Extensions=Sind}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Khudawadi}/utf\n    \\x{964}\n\n/^\\p{sc=Khudawadi}/utf\n    \\x{964}\n\n# Character not in script\n/^\\p{Khudawadi}/utf\n    \\x{112fa}\n\n# Base script check\n/^\\p{sc=Tirhuta}/utf\n    \\x{11480}\n\n/^\\p{Script=Tirh}/utf\n    \\x{114d9}\n\n# Script extension check\n/^\\p{Tirhuta}/utf\n    \\x{951}\n\n/^\\p{scx=Tirh}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Tirhuta}/utf\n    \\x{951}\n\n/^\\p{sc=Tirhuta}/utf\n    \\x{951}\n\n# Character not in script\n/^\\p{Tirhuta}/utf\n    \\x{114da}\n\n# Base script check\n/^\\p{sc=Multani}/utf\n    \\x{11280}\n\n/^\\p{Script=Mult}/utf\n    \\x{112a9}\n\n# Script extension check\n/^\\p{Multani}/utf\n    \\x{a66}\n\n/^\\p{Script_Extensions=Mult}/utf\n    \\x{a6f}\n\n# Script extension only character\n/^\\p{Multani}/utf\n    \\x{a66}\n\n/^\\p{sc=Multani}/utf\n    \\x{a66}\n\n# Character not in script\n/^\\p{Multani}/utf\n    \\x{112aa}\n\n# Base script check\n/^\\p{sc=Old_Hungarian}/utf\n    \\x{10c80}\n\n/^\\p{Script=Hung}/utf\n    \\x{10cff}\n\n# Script extension check\n/^\\p{Old_Hungarian}/utf\n    \\x{205a}\n\n/^\\p{scx=Hung}/utf\n    \\x{2e41}\n\n# Script extension only character\n/^\\p{Old_Hungarian}/utf\n    \\x{205a}\n\n/^\\p{sc=Old_Hungarian}/utf\n    \\x{205a}\n\n# Character not in script\n/^\\p{Old_Hungarian}/utf\n    \\x{10d00}\n\n# Base script check\n/^\\p{sc=Adlam}/utf\n    \\x{1e900}\n\n/^\\p{Script=Adlm}/utf\n    \\x{1e95f}\n\n# Script extension check\n/^\\p{Adlam}/utf\n    \\x{61f}\n\n/^\\p{Script_Extensions=Adlm}/utf\n    \\x{2e41}\n\n# Script extension only character\n/^\\p{Adlam}/utf\n    \\x{61f}\n\n/^\\p{sc=Adlam}/utf\n    \\x{61f}\n\n# Character not in script\n/^\\p{Adlam}/utf\n    \\x{1e960}\n\n# Base script check\n/^\\p{sc=Newa}/utf\n    \\x{11400}\n\n/^\\p{Script=Newa}/utf\n    \\x{11461}\n\n# Script extension check\n/^\\p{Newa}/utf\n    \\x{951}\n\n/^\\p{scx=Newa}/utf\n    \\x{1ced}\n\n# Script extension only character\n/^\\p{Newa}/utf\n    \\x{951}\n\n/^\\p{sc=Newa}/utf\n    \\x{951}\n\n# Character not in script\n/^\\p{Newa}/utf\n    \\x{11462}\n\n# Base script check\n/^\\p{sc=Osage}/utf\n    \\x{104b0}\n\n/^\\p{Script=Osge}/utf\n    \\x{104fb}\n\n# Script extension check\n/^\\p{Osage}/utf\n    \\x{301}\n\n/^\\p{Script_Extensions=Osge}/utf\n    \\x{358}\n\n# Script extension only character\n/^\\p{Osage}/utf\n    \\x{301}\n\n/^\\p{sc=Osage}/utf\n    \\x{301}\n\n# Character not in script\n/^\\p{Osage}/utf\n    \\x{104fc}\n\n# Base script check\n/^\\p{sc=Tangut}/utf\n    \\x{16fe0}\n\n/^\\p{Script=Tang}/utf\n    \\x{18df2}\n\n# Script extension check\n/^\\p{Tangut}/utf\n    \\x{2ff0}\n\n/^\\p{scx=Tang}/utf\n    \\x{31ef}\n\n# Script extension only character\n/^\\p{Tangut}/utf\n    \\x{2ff0}\n\n/^\\p{sc=Tangut}/utf\n    \\x{2ff0}\n\n# Character not in script\n/^\\p{Tangut}/utf\n    \\x{18df3}\n\n# Base script check\n/^\\p{sc=Masaram_Gondi}/utf\n    \\x{11d00}\n\n/^\\p{Script=Gonm}/utf\n    \\x{11d59}\n\n# Script extension check\n/^\\p{Masaram_Gondi}/utf\n    \\x{964}\n\n/^\\p{Script_Extensions=Gonm}/utf\n    \\x{965}\n\n# Script extension only character\n/^\\p{Masaram_Gondi}/utf\n    \\x{964}\n\n/^\\p{sc=Masaram_Gondi}/utf\n    \\x{964}\n\n# Character not in script\n/^\\p{Masaram_Gondi}/utf\n    \\x{11d5a}\n\n# Base script check\n/^\\p{sc=Dogra}/utf\n    \\x{11800}\n\n/^\\p{Script=Dogr}/utf\n    \\x{1183b}\n\n# Script extension check\n/^\\p{Dogra}/utf\n    \\x{964}\n\n/^\\p{scx=Dogr}/utf\n    \\x{a839}\n\n# Script extension only character\n/^\\p{Dogra}/utf\n    \\x{964}\n\n/^\\p{sc=Dogra}/utf\n    \\x{964}\n\n# Character not in script\n/^\\p{Dogra}/utf\n    \\x{1183c}\n\n# Base script check\n/^\\p{sc=Gunjala_Gondi}/utf\n    \\x{11d60}\n\n/^\\p{Script=Gong}/utf\n    \\x{11da9}\n\n# Script extension check\n/^\\p{Gunjala_Gondi}/utf\n    \\x{b7}\n\n/^\\p{Script_Extensions=Gong}/utf\n    \\x{965}\n\n# Script extension only character\n/^\\p{Gunjala_Gondi}/utf\n    \\x{b7}\n\n/^\\p{sc=Gunjala_Gondi}/utf\n    \\x{b7}\n\n# Character not in script\n/^\\p{Gunjala_Gondi}/utf\n    \\x{11daa}\n\n# Base script check\n/^\\p{sc=Hanifi_Rohingya}/utf\n    \\x{10d00}\n\n/^\\p{Script=Rohg}/utf\n    \\x{10d39}\n\n# Script extension check\n/^\\p{Hanifi_Rohingya}/utf\n    \\x{60c}\n\n/^\\p{scx=Rohg}/utf\n    \\x{6d4}\n\n# Script extension only character\n/^\\p{Hanifi_Rohingya}/utf\n    \\x{60c}\n\n/^\\p{sc=Hanifi_Rohingya}/utf\n    \\x{60c}\n\n# Character not in script\n/^\\p{Hanifi_Rohingya}/utf\n    \\x{10d3a}\n\n# Base script check\n/^\\p{sc=Sogdian}/utf\n    \\x{10f30}\n\n/^\\p{Script=Sogd}/utf\n    \\x{10f59}\n\n# Script extension check\n/^\\p{Sogdian}/utf\n    \\x{640}\n\n/^\\p{Script_Extensions=Sogd}/utf\n    \\x{640}\n\n# Script extension only character\n/^\\p{Sogdian}/utf\n    \\x{640}\n\n/^\\p{sc=Sogdian}/utf\n    \\x{640}\n\n# Character not in script\n/^\\p{Sogdian}/utf\n    \\x{10f5a}\n\n# Base script check\n/^\\p{sc=Nandinagari}/utf\n    \\x{119a0}\n\n/^\\p{Script=Nand}/utf\n    \\x{119e4}\n\n# Script extension check\n/^\\p{Nandinagari}/utf\n    \\x{951}\n\n/^\\p{scx=Nand}/utf\n    \\x{a835}\n\n# Script extension only character\n/^\\p{Nandinagari}/utf\n    \\x{951}\n\n/^\\p{sc=Nandinagari}/utf\n    \\x{951}\n\n# Character not in script\n/^\\p{Nandinagari}/utf\n    \\x{119e5}\n\n# Base script check\n/^\\p{sc=Yezidi}/utf\n    \\x{10e80}\n\n/^\\p{Script=Yezi}/utf\n    \\x{10eb1}\n\n# Script extension check\n/^\\p{Yezidi}/utf\n    \\x{60c}\n\n/^\\p{Script_Extensions=Yezi}/utf\n    \\x{669}\n\n# Script extension only character\n/^\\p{Yezidi}/utf\n    \\x{60c}\n\n/^\\p{sc=Yezidi}/utf\n    \\x{60c}\n\n# Character not in script\n/^\\p{Yezidi}/utf\n    \\x{10eb2}\n\n# Base script check\n/^\\p{sc=Cypro_Minoan}/utf\n    \\x{12f90}\n\n/^\\p{Script=Cpmn}/utf\n    \\x{12ff2}\n\n# Script extension check\n/^\\p{Cypro_Minoan}/utf\n    \\x{10100}\n\n/^\\p{scx=Cpmn}/utf\n    \\x{10101}\n\n# Script extension only character\n/^\\p{Cypro_Minoan}/utf\n    \\x{10100}\n\n/^\\p{sc=Cypro_Minoan}/utf\n    \\x{10100}\n\n# Character not in script\n/^\\p{Cypro_Minoan}/utf\n    \\x{12ff3}\n\n# Base script check\n/^\\p{sc=Old_Uyghur}/utf\n    \\x{10f70}\n\n/^\\p{Script=Ougr}/utf\n    \\x{10f89}\n\n# Script extension check\n/^\\p{Old_Uyghur}/utf\n    \\x{640}\n\n/^\\p{Script_Extensions=Ougr}/utf\n    \\x{10af2}\n\n# Script extension only character\n/^\\p{Old_Uyghur}/utf\n    \\x{640}\n\n/^\\p{sc=Old_Uyghur}/utf\n    \\x{640}\n\n# Character not in script\n/^\\p{Old_Uyghur}/utf\n    \\x{10f8a}\n\n# Base script check\n/^\\p{sc=Toto}/utf\n    \\x{1e290}\n\n/^\\p{Script=Toto}/utf\n    \\x{1e2ae}\n\n# Script extension check\n/^\\p{Toto}/utf\n    \\x{2bc}\n\n/^\\p{scx=Toto}/utf\n    \\x{2bc}\n\n# Script extension only character\n/^\\p{Toto}/utf\n    \\x{2bc}\n\n/^\\p{sc=Toto}/utf\n    \\x{2bc}\n\n# Character not in script\n/^\\p{Toto}/utf\n    \\x{1e2af}\n\n# Base script check\n/^\\p{sc=Garay}/utf\n    \\x{10d40}\n\n/^\\p{Script=Gara}/utf\n    \\x{10d8f}\n\n# Script extension check\n/^\\p{Garay}/utf\n    \\x{60c}\n\n/^\\p{Script_Extensions=Gara}/utf\n    \\x{61f}\n\n# Script extension only character\n/^\\p{Garay}/utf\n    \\x{60c}\n\n/^\\p{sc=Garay}/utf\n    \\x{60c}\n\n# Character not in script\n/^\\p{Garay}/utf\n    \\x{10d90}\n\n# Base script check\n/^\\p{sc=Gurung_Khema}/utf\n    \\x{16100}\n\n/^\\p{Script=Gukh}/utf\n    \\x{16139}\n\n# Script extension check\n/^\\p{Gurung_Khema}/utf\n    \\x{965}\n\n/^\\p{scx=Gukh}/utf\n    \\x{965}\n\n# Script extension only character\n/^\\p{Gurung_Khema}/utf\n    \\x{965}\n\n/^\\p{sc=Gurung_Khema}/utf\n    \\x{965}\n\n# Character not in script\n/^\\p{Gurung_Khema}/utf\n    \\x{1613a}\n\n# Base script check\n/^\\p{sc=Ol_Onal}/utf\n    \\x{1e5d0}\n\n/^\\p{Script=Onao}/utf\n    \\x{1e5ff}\n\n# Script extension check\n/^\\p{Ol_Onal}/utf\n    \\x{964}\n\n/^\\p{Script_Extensions=Onao}/utf\n    \\x{965}\n\n# Script extension only character\n/^\\p{Ol_Onal}/utf\n    \\x{964}\n\n/^\\p{sc=Ol_Onal}/utf\n    \\x{964}\n\n# Character not in script\n/^\\p{Ol_Onal}/utf\n    \\x{1e600}\n\n# Base script check\n/^\\p{sc=Sunuwar}/utf\n    \\x{11bc0}\n\n/^\\p{Script=Sunu}/utf\n    \\x{11bf9}\n\n# Script extension check\n/^\\p{Sunuwar}/utf\n    \\x{300}\n\n/^\\p{scx=Sunu}/utf\n    \\x{331}\n\n# Script extension only character\n/^\\p{Sunuwar}/utf\n    \\x{300}\n\n/^\\p{sc=Sunuwar}/utf\n    \\x{300}\n\n# Character not in script\n/^\\p{Sunuwar}/utf\n    \\x{11bfa}\n\n# Base script check\n/^\\p{sc=Todhri}/utf\n    \\x{105c0}\n\n/^\\p{Script=Todr}/utf\n    \\x{105f3}\n\n# Script extension check\n/^\\p{Todhri}/utf\n    \\x{301}\n\n/^\\p{Script_Extensions=Todr}/utf\n    \\x{35e}\n\n# Script extension only character\n/^\\p{Todhri}/utf\n    \\x{301}\n\n/^\\p{sc=Todhri}/utf\n    \\x{301}\n\n# Character not in script\n/^\\p{Todhri}/utf\n    \\x{105f4}\n\n# Base script check\n/^\\p{sc=Tulu_Tigalari}/utf\n    \\x{11380}\n\n/^\\p{Script=Tutg}/utf\n    \\x{113e2}\n\n# Script extension check\n/^\\p{Tulu_Tigalari}/utf\n    \\x{ce6}\n\n/^\\p{scx=Tutg}/utf\n    \\x{a8f1}\n\n# Script extension only character\n/^\\p{Tulu_Tigalari}/utf\n    \\x{ce6}\n\n/^\\p{sc=Tulu_Tigalari}/utf\n    \\x{ce6}\n\n# Character not in script\n/^\\p{Tulu_Tigalari}/utf\n    \\x{113e3}\n\n# Base script check\n/^\\p{sc=Common}/utf\n    \\x{00}\n\n/^\\p{Script=Zyyy}/utf\n    \\x{e007f}\n\n# Character not in script\n/^\\p{Common}/utf\n    \\x{e0080}\n\n# Base script check\n/^\\p{sc=Lao}/utf\n    \\x{e81}\n\n/^\\p{Script=Laoo}/utf\n    \\x{edf}\n\n# Character not in script\n/^\\p{Lao}/utf\n    \\x{ee0}\n\n# Base script check\n/^\\p{sc=Canadian_Aboriginal}/utf\n    \\x{1400}\n\n/^\\p{Script=Cans}/utf\n    \\x{11abf}\n\n# Character not in script\n/^\\p{Canadian_Aboriginal}/utf\n    \\x{11ac0}\n\n# Base script check\n/^\\p{sc=Ogham}/utf\n    \\x{1680}\n\n/^\\p{Script=Ogam}/utf\n    \\x{169c}\n\n# Character not in script\n/^\\p{Ogham}/utf\n    \\x{169d}\n\n# Base script check\n/^\\p{sc=Khmer}/utf\n    \\x{1780}\n\n/^\\p{Script=Khmr}/utf\n    \\x{19ff}\n\n# Character not in script\n/^\\p{Khmer}/utf\n    \\x{1a00}\n\n# Base script check\n/^\\p{sc=Old_Italic}/utf\n    \\x{10300}\n\n/^\\p{Script=Ital}/utf\n    \\x{1032f}\n\n# Character not in script\n/^\\p{Old_Italic}/utf\n    \\x{10330}\n\n# Base script check\n/^\\p{sc=Deseret}/utf\n    \\x{10400}\n\n/^\\p{Script=Dsrt}/utf\n    \\x{1044f}\n\n# Character not in script\n/^\\p{Deseret}/utf\n    \\x{10450}\n\n# Base script check\n/^\\p{sc=Inherited}/utf\n    \\x{300}\n\n/^\\p{Script=Zinh}/utf\n    \\x{e01ef}\n\n# Character not in script\n/^\\p{Inherited}/utf\n    \\x{e01f0}\n\n# Base script check\n/^\\p{sc=Ugaritic}/utf\n    \\x{10380}\n\n/^\\p{Script=Ugar}/utf\n    \\x{1039f}\n\n# Character not in script\n/^\\p{Ugaritic}/utf\n    \\x{103a0}\n\n# Base script check\n/^\\p{sc=Osmanya}/utf\n    \\x{10480}\n\n/^\\p{Script=Osma}/utf\n    \\x{104a9}\n\n# Character not in script\n/^\\p{Osmanya}/utf\n    \\x{104aa}\n\n# Base script check\n/^\\p{sc=Braille}/utf\n    \\x{2800}\n\n/^\\p{Script=Brai}/utf\n    \\x{28ff}\n\n# Character not in script\n/^\\p{Braille}/utf\n    \\x{2900}\n\n# Base script check\n/^\\p{sc=New_Tai_Lue}/utf\n    \\x{1980}\n\n/^\\p{Script=Talu}/utf\n    \\x{19df}\n\n# Character not in script\n/^\\p{New_Tai_Lue}/utf\n    \\x{19e0}\n\n# Base script check\n/^\\p{sc=Old_Persian}/utf\n    \\x{103a0}\n\n/^\\p{Script=Xpeo}/utf\n    \\x{103d5}\n\n# Character not in script\n/^\\p{Old_Persian}/utf\n    \\x{103d6}\n\n# Base script check\n/^\\p{sc=Kharoshthi}/utf\n    \\x{10a00}\n\n/^\\p{Script=Khar}/utf\n    \\x{10a58}\n\n# Character not in script\n/^\\p{Kharoshthi}/utf\n    \\x{10a59}\n\n# Base script check\n/^\\p{sc=Balinese}/utf\n    \\x{1b00}\n\n/^\\p{Script=Bali}/utf\n    \\x{1b7f}\n\n# Character not in script\n/^\\p{Balinese}/utf\n    \\x{1b80}\n\n# Base script check\n/^\\p{sc=Cuneiform}/utf\n    \\x{12000}\n\n/^\\p{Script=Xsux}/utf\n    \\x{12543}\n\n# Character not in script\n/^\\p{Cuneiform}/utf\n    \\x{12544}\n\n# Base script check\n/^\\p{sc=Phoenician}/utf\n    \\x{10900}\n\n/^\\p{Script=Phnx}/utf\n    \\x{1091f}\n\n# Character not in script\n/^\\p{Phoenician}/utf\n    \\x{10920}\n\n# Base script check\n/^\\p{sc=Sundanese}/utf\n    \\x{1b80}\n\n/^\\p{Script=Sund}/utf\n    \\x{1cc7}\n\n# Character not in script\n/^\\p{Sundanese}/utf\n    \\x{1cc8}\n\n# Base script check\n/^\\p{sc=Lepcha}/utf\n    \\x{1c00}\n\n/^\\p{Script=Lepc}/utf\n    \\x{1c4f}\n\n# Character not in script\n/^\\p{Lepcha}/utf\n    \\x{1c50}\n\n# Base script check\n/^\\p{sc=Ol_Chiki}/utf\n    \\x{1c50}\n\n/^\\p{Script=Olck}/utf\n    \\x{1c7f}\n\n# Character not in script\n/^\\p{Ol_Chiki}/utf\n    \\x{1c80}\n\n# Base script check\n/^\\p{sc=Vai}/utf\n    \\x{a500}\n\n/^\\p{Script=Vaii}/utf\n    \\x{a62b}\n\n# Character not in script\n/^\\p{Vai}/utf\n    \\x{a62c}\n\n# Base script check\n/^\\p{sc=Saurashtra}/utf\n    \\x{a880}\n\n/^\\p{Script=Saur}/utf\n    \\x{a8d9}\n\n# Character not in script\n/^\\p{Saurashtra}/utf\n    \\x{a8da}\n\n# Base script check\n/^\\p{sc=Rejang}/utf\n    \\x{a930}\n\n/^\\p{Script=Rjng}/utf\n    \\x{a95f}\n\n# Character not in script\n/^\\p{Rejang}/utf\n    \\x{a960}\n\n# Base script check\n/^\\p{sc=Cham}/utf\n    \\x{aa00}\n\n/^\\p{Script=Cham}/utf\n    \\x{aa5f}\n\n# Character not in script\n/^\\p{Cham}/utf\n    \\x{aa60}\n\n# Base script check\n/^\\p{sc=Tai_Tham}/utf\n    \\x{1a20}\n\n/^\\p{Script=Lana}/utf\n    \\x{1aad}\n\n# Character not in script\n/^\\p{Tai_Tham}/utf\n    \\x{1aae}\n\n# Base script check\n/^\\p{sc=Tai_Viet}/utf\n    \\x{aa80}\n\n/^\\p{Script=Tavt}/utf\n    \\x{aadf}\n\n# Character not in script\n/^\\p{Tai_Viet}/utf\n    \\x{aae0}\n\n# Base script check\n/^\\p{sc=Egyptian_Hieroglyphs}/utf\n    \\x{13000}\n\n/^\\p{Script=Egyp}/utf\n    \\x{143fa}\n\n# Character not in script\n/^\\p{Egyptian_Hieroglyphs}/utf\n    \\x{143fb}\n\n# Base script check\n/^\\p{sc=Bamum}/utf\n    \\x{a6a0}\n\n/^\\p{Script=Bamu}/utf\n    \\x{16a38}\n\n# Character not in script\n/^\\p{Bamum}/utf\n    \\x{16a39}\n\n# Base script check\n/^\\p{sc=Meetei_Mayek}/utf\n    \\x{aae0}\n\n/^\\p{Script=Mtei}/utf\n    \\x{abf9}\n\n# Character not in script\n/^\\p{Meetei_Mayek}/utf\n    \\x{abfa}\n\n# Base script check\n/^\\p{sc=Imperial_Aramaic}/utf\n    \\x{10840}\n\n/^\\p{Script=Armi}/utf\n    \\x{1085f}\n\n# Character not in script\n/^\\p{Imperial_Aramaic}/utf\n    \\x{10860}\n\n# Base script check\n/^\\p{sc=Old_South_Arabian}/utf\n    \\x{10a60}\n\n/^\\p{Script=Sarb}/utf\n    \\x{10a7f}\n\n# Character not in script\n/^\\p{Old_South_Arabian}/utf\n    \\x{10a80}\n\n# Base script check\n/^\\p{sc=Inscriptional_Parthian}/utf\n    \\x{10b40}\n\n/^\\p{Script=Prti}/utf\n    \\x{10b5f}\n\n# Character not in script\n/^\\p{Inscriptional_Parthian}/utf\n    \\x{10b60}\n\n# Base script check\n/^\\p{sc=Inscriptional_Pahlavi}/utf\n    \\x{10b60}\n\n/^\\p{Script=Phli}/utf\n    \\x{10b7f}\n\n# Character not in script\n/^\\p{Inscriptional_Pahlavi}/utf\n    \\x{10b80}\n\n# Base script check\n/^\\p{sc=Batak}/utf\n    \\x{1bc0}\n\n/^\\p{Script=Batk}/utf\n    \\x{1bff}\n\n# Character not in script\n/^\\p{Batak}/utf\n    \\x{1c00}\n\n# Base script check\n/^\\p{sc=Brahmi}/utf\n    \\x{11000}\n\n/^\\p{Script=Brah}/utf\n    \\x{1107f}\n\n# Character not in script\n/^\\p{Brahmi}/utf\n    \\x{11080}\n\n# Base script check\n/^\\p{sc=Meroitic_Cursive}/utf\n    \\x{109a0}\n\n/^\\p{Script=Merc}/utf\n    \\x{109ff}\n\n# Character not in script\n/^\\p{Meroitic_Cursive}/utf\n    \\x{10a00}\n\n# Base script check\n/^\\p{sc=Miao}/utf\n    \\x{16f00}\n\n/^\\p{Script=Plrd}/utf\n    \\x{16f9f}\n\n# Character not in script\n/^\\p{Miao}/utf\n    \\x{16fa0}\n\n# Base script check\n/^\\p{sc=Sora_Sompeng}/utf\n    \\x{110d0}\n\n/^\\p{Script=Sora}/utf\n    \\x{110f9}\n\n# Character not in script\n/^\\p{Sora_Sompeng}/utf\n    \\x{110fa}\n\n# Base script check\n/^\\p{sc=Bassa_Vah}/utf\n    \\x{16ad0}\n\n/^\\p{Script=Bass}/utf\n    \\x{16af5}\n\n# Character not in script\n/^\\p{Bassa_Vah}/utf\n    \\x{16af6}\n\n# Base script check\n/^\\p{sc=Pahawh_Hmong}/utf\n    \\x{16b00}\n\n/^\\p{Script=Hmng}/utf\n    \\x{16b8f}\n\n# Character not in script\n/^\\p{Pahawh_Hmong}/utf\n    \\x{16b90}\n\n# Base script check\n/^\\p{sc=Mende_Kikakui}/utf\n    \\x{1e800}\n\n/^\\p{Script=Mend}/utf\n    \\x{1e8d6}\n\n# Character not in script\n/^\\p{Mende_Kikakui}/utf\n    \\x{1e8d7}\n\n# Base script check\n/^\\p{sc=Mro}/utf\n    \\x{16a40}\n\n/^\\p{Script=Mroo}/utf\n    \\x{16a6f}\n\n# Character not in script\n/^\\p{Mro}/utf\n    \\x{16a70}\n\n# Base script check\n/^\\p{sc=Old_North_Arabian}/utf\n    \\x{10a80}\n\n/^\\p{Script=Narb}/utf\n    \\x{10a9f}\n\n# Character not in script\n/^\\p{Old_North_Arabian}/utf\n    \\x{10aa0}\n\n# Base script check\n/^\\p{sc=Nabataean}/utf\n    \\x{10880}\n\n/^\\p{Script=Nbat}/utf\n    \\x{108af}\n\n# Character not in script\n/^\\p{Nabataean}/utf\n    \\x{108b0}\n\n# Base script check\n/^\\p{sc=Palmyrene}/utf\n    \\x{10860}\n\n/^\\p{Script=Palm}/utf\n    \\x{1087f}\n\n# Character not in script\n/^\\p{Palmyrene}/utf\n    \\x{10880}\n\n# Base script check\n/^\\p{sc=Pau_Cin_Hau}/utf\n    \\x{11ac0}\n\n/^\\p{Script=Pauc}/utf\n    \\x{11af8}\n\n# Character not in script\n/^\\p{Pau_Cin_Hau}/utf\n    \\x{11af9}\n\n# Base script check\n/^\\p{sc=Siddham}/utf\n    \\x{11580}\n\n/^\\p{Script=Sidd}/utf\n    \\x{115dd}\n\n# Character not in script\n/^\\p{Siddham}/utf\n    \\x{115de}\n\n# Base script check\n/^\\p{sc=Warang_Citi}/utf\n    \\x{118a0}\n\n/^\\p{Script=Wara}/utf\n    \\x{118ff}\n\n# Character not in script\n/^\\p{Warang_Citi}/utf\n    \\x{11900}\n\n# Base script check\n/^\\p{sc=Ahom}/utf\n    \\x{11700}\n\n/^\\p{Script=Ahom}/utf\n    \\x{11746}\n\n# Character not in script\n/^\\p{Ahom}/utf\n    \\x{11747}\n\n# Base script check\n/^\\p{sc=Anatolian_Hieroglyphs}/utf\n    \\x{14400}\n\n/^\\p{Script=Hluw}/utf\n    \\x{14646}\n\n# Character not in script\n/^\\p{Anatolian_Hieroglyphs}/utf\n    \\x{14647}\n\n# Base script check\n/^\\p{sc=Hatran}/utf\n    \\x{108e0}\n\n/^\\p{Script=Hatr}/utf\n    \\x{108ff}\n\n# Character not in script\n/^\\p{Hatran}/utf\n    \\x{10900}\n\n# Base script check\n/^\\p{sc=SignWriting}/utf\n    \\x{1d800}\n\n/^\\p{Script=Sgnw}/utf\n    \\x{1daaf}\n\n# Character not in script\n/^\\p{SignWriting}/utf\n    \\x{1dab0}\n\n# Base script check\n/^\\p{sc=Bhaiksuki}/utf\n    \\x{11c00}\n\n/^\\p{Script=Bhks}/utf\n    \\x{11c6c}\n\n# Character not in script\n/^\\p{Bhaiksuki}/utf\n    \\x{11c6d}\n\n# Base script check\n/^\\p{sc=Marchen}/utf\n    \\x{11c70}\n\n/^\\p{Script=Marc}/utf\n    \\x{11cb6}\n\n# Character not in script\n/^\\p{Marchen}/utf\n    \\x{11cb7}\n\n# Base script check\n/^\\p{sc=Nushu}/utf\n    \\x{16fe1}\n\n/^\\p{Script=Nshu}/utf\n    \\x{1b2fb}\n\n# Character not in script\n/^\\p{Nushu}/utf\n    \\x{1b2fc}\n\n# Base script check\n/^\\p{sc=Soyombo}/utf\n    \\x{11a50}\n\n/^\\p{Script=Soyo}/utf\n    \\x{11aa2}\n\n# Character not in script\n/^\\p{Soyombo}/utf\n    \\x{11aa3}\n\n# Base script check\n/^\\p{sc=Zanabazar_Square}/utf\n    \\x{11a00}\n\n/^\\p{Script=Zanb}/utf\n    \\x{11a47}\n\n# Character not in script\n/^\\p{Zanabazar_Square}/utf\n    \\x{11a48}\n\n# Base script check\n/^\\p{sc=Makasar}/utf\n    \\x{11ee0}\n\n/^\\p{Script=Maka}/utf\n    \\x{11ef8}\n\n# Character not in script\n/^\\p{Makasar}/utf\n    \\x{11ef9}\n\n# Base script check\n/^\\p{sc=Medefaidrin}/utf\n    \\x{16e40}\n\n/^\\p{Script=Medf}/utf\n    \\x{16e9a}\n\n# Character not in script\n/^\\p{Medefaidrin}/utf\n    \\x{16e9b}\n\n# Base script check\n/^\\p{sc=Old_Sogdian}/utf\n    \\x{10f00}\n\n/^\\p{Script=Sogo}/utf\n    \\x{10f27}\n\n# Character not in script\n/^\\p{Old_Sogdian}/utf\n    \\x{10f28}\n\n# Base script check\n/^\\p{sc=Elymaic}/utf\n    \\x{10fe0}\n\n/^\\p{Script=Elym}/utf\n    \\x{10ff6}\n\n# Character not in script\n/^\\p{Elymaic}/utf\n    \\x{10ff7}\n\n# Base script check\n/^\\p{sc=Nyiakeng_Puachue_Hmong}/utf\n    \\x{1e100}\n\n/^\\p{Script=Hmnp}/utf\n    \\x{1e14f}\n\n# Character not in script\n/^\\p{Nyiakeng_Puachue_Hmong}/utf\n    \\x{1e150}\n\n# Base script check\n/^\\p{sc=Wancho}/utf\n    \\x{1e2c0}\n\n/^\\p{Script=Wcho}/utf\n    \\x{1e2ff}\n\n# Character not in script\n/^\\p{Wancho}/utf\n    \\x{1e300}\n\n# Base script check\n/^\\p{sc=Chorasmian}/utf\n    \\x{10fb0}\n\n/^\\p{Script=Chrs}/utf\n    \\x{10fcb}\n\n# Character not in script\n/^\\p{Chorasmian}/utf\n    \\x{10fcc}\n\n# Base script check\n/^\\p{sc=Dives_Akuru}/utf\n    \\x{11900}\n\n/^\\p{Script=Diak}/utf\n    \\x{11959}\n\n# Character not in script\n/^\\p{Dives_Akuru}/utf\n    \\x{1195a}\n\n# Base script check\n/^\\p{sc=Khitan_Small_Script}/utf\n    \\x{16fe4}\n\n/^\\p{Script=Kits}/utf\n    \\x{18cff}\n\n# Character not in script\n/^\\p{Khitan_Small_Script}/utf\n    \\x{18d00}\n\n# Base script check\n/^\\p{sc=Tangsa}/utf\n    \\x{16a70}\n\n/^\\p{Script=Tnsa}/utf\n    \\x{16ac9}\n\n# Character not in script\n/^\\p{Tangsa}/utf\n    \\x{16aca}\n\n# Base script check\n/^\\p{sc=Vithkuqi}/utf\n    \\x{10570}\n\n/^\\p{Script=Vith}/utf\n    \\x{105bc}\n\n# Character not in script\n/^\\p{Vithkuqi}/utf\n    \\x{105bd}\n\n# Base script check\n/^\\p{sc=Kawi}/utf\n    \\x{11f00}\n\n/^\\p{Script=Kawi}/utf\n    \\x{11f5a}\n\n# Character not in script\n/^\\p{Kawi}/utf\n    \\x{11f5b}\n\n# Base script check\n/^\\p{sc=Nag_Mundari}/utf\n    \\x{1e4d0}\n\n/^\\p{Script=Nagm}/utf\n    \\x{1e4f9}\n\n# Character not in script\n/^\\p{Nag_Mundari}/utf\n    \\x{1e4fa}\n\n# Base script check\n/^\\p{sc=Kirat_Rai}/utf\n    \\x{16d40}\n\n/^\\p{Script=Krai}/utf\n    \\x{16d79}\n\n# Character not in script\n/^\\p{Kirat_Rai}/utf\n    \\x{16d7a}\n\n# Base script check\n/^\\p{sc=Sidetic}/utf\n    \\x{10940}\n\n/^\\p{Script=Sidt}/utf\n    \\x{10959}\n\n# Character not in script\n/^\\p{Sidetic}/utf\n    \\x{1095a}\n\n# Base script check\n/^\\p{sc=Tai_Yo}/utf\n    \\x{1e6c0}\n\n/^\\p{Script=Tayo}/utf\n    \\x{1e6ff}\n\n# Character not in script\n/^\\p{Tai_Yo}/utf\n    \\x{1e700}\n\n# Base script check\n/^\\p{sc=Tolong_Siki}/utf\n    \\x{11db0}\n\n/^\\p{Script=Tols}/utf\n    \\x{11de9}\n\n# Character not in script\n/^\\p{Tolong_Siki}/utf\n    \\x{11dea}\n\n# Base script check\n/^\\p{sc=Beria_Erfe}/utf\n    \\x{16ea0}\n\n/^\\p{Script=Berf}/utf\n    \\x{16ed3}\n\n# Character not in script\n/^\\p{Beria_Erfe}/utf\n    \\x{16ed4}\n\n# End of test\n"
  },
  {
    "path": "testdata/testinput28",
    "content": "# This tests the EBCDIC support in PCRE2. It catches cases where explicit values\n# such as 0x0a have been used instead of names like CHAR_LF.\n#\n# This test file however is checked in to the repository encoded as ISO-8859-1,\n# using a reversible mapping from EBCDIC. This lets us easily author test cases.\n# However, they will only be run against a genuine EBCDIC when the input and\n# output files are converted to EBCDIC.\n#\n# There is also a special mode, on ASCII systems, where pcre2test takes ASCII\n# input (actually, ISO-8859-1), and then does the transcoding internally before\n# calling the genuinely-EBCDIC version of PCRE2.\n\n# Test default newline and variations\n\n/^A/m\n    ABC\n    12\\nABC\n\n/^A/m,newline=any\n    12\\nABC\n    12\\rABC\n    12\\r\\nABC\n    12\\x85ABC\n\n/^A/m,newline=anycrlf\n    12\\nABC\n    12\\rABC\n    12\\r\\nABC\n\\= Expect no match\n    12\\x85ABC\n\n# Test \\h\n\n/^A\\h/\n    A B\n    A\\tB\n    A\\xA0B\n\n# Test \\H\n\n/^A\\H/\n    AB\n    A\\x42B\n\\= Expect no match\n    A B\n\n# Test \\R\n\n/^A\\R/\n    A\\nB\n    A\\rB\n    A\\x85B\n    A\\x0bB\n    A\\x0cB\n\\= Expect no match\n    A B\n\n# Test \\v\n\n/^A\\v/\n    A\\nB\n    A\\rB\n    A\\x85B\n    A\\x0bB\n    A\\x0cB\n\\= Expect no match\n    A B\n\n# Test \\V\n\n/^A\\V/\n    A B\n\\= Expect no match\n    A\\nB\n    A\\rB\n    A\\x85B\n    A\\x0bB\n    A\\x0cB\n\n# For repeated items, use an atomic group so that the output is the same\n# for DFA matching (otherwise it may show multiple matches).\n\n# Test \\h+\n\n/^A(?>\\h+)/\n    A B\n\n# Test \\H+\n\n/^A(?>\\H+)/\n    AB\n\\= Expect no match\n    A B\n\n# Test \\R+\n\n/^A(?>\\R+)/\n    A\\nB\n    A\\rB\n    A\\x85B\n    A\\x0bB\n    A\\x0cB\n\\= Expect no match\n    A B\n\n# Test \\v+\n\n/^A(?>\\v+)/\n    A\\nB\n    A\\rB\n    A\\x85B\n    A\\x0bB\n    A\\x0cB\n\\= Expect no match\n    A B\n\n# Test \\V+\n\n/^A(?>\\V+)/\n    A B\n\\= Expect no match\n    A\\nB\n    A\\rB\n    A\\x85B\n    A\\x0bB\n    A\\x0cB\n\n# Test \\c functionality\n\n/\\c@\\cA\\cb\\cC\\cd\\cE\\cf\\cG\\ch\\cI\\cJ\\cK\\cl\\cm\\cN\\cO\\cp\\cq\\cr\\cS\\cT\\cV\\cW\\cX\\cy\\cZ/\n  \\x00\\x01\\x02\\x03\\x9c\\x09\\x86\\x7f\\x97\\x8d\\x8e\\x0b\\x0c\\x0d\\x0e\\x0f\\x10\\x11\\x12\\x13\\x9d\\x08\\x87\\x18\\x19\\x92\n  \\x00\\x01\\x02\\x03\\x9c\\x09\\x86\\x7f\\x97\\x8d\\x8e\\x0b\\x0c\\x0d\\x0e\\x0f\\x10\\x11\\x12\\x13\\x9d\\x08\\x87\\x18\\x19\\x92\n\n#if !ebcdic-nl25\n\n/^\\x15$/\n  \\n\n\n/\\cU/\n  \\x0a\n  \\x85\n\n#endif\n\n/\\c[\\c\\\\c]\\c^\\c_/\n    \\x8f\\x1c\\x1d\\x1e\\x1f\n\n/\\c?/\n    A\\x9fB\n\n/\\c&/\n\n# End\n"
  },
  {
    "path": "testdata/testinput29",
    "content": "# This tests the EBCDIC support in PCRE2, specifically when NL has been\n# configured to be 0x25.\n\n/^\\x25$/\n  \\n\n\n/\\cU/\n  \\x0a\n  \\x85\n"
  },
  {
    "path": "testdata/testinput3",
    "content": "# This set of tests checks local-specific features, using the \"fr_FR\" locale. \n# It is almost Perl-compatible. When run via RunTest, the locale is edited to\n# be whichever of \"fr_FR\", \"french\", or \"fr\" is found to exist. There is\n# different version of this file called wintestinput3 for use on Windows,\n# where the locale is called \"french\" and the tests are run using\n# RunTest.bat. \n\n#forbid_utf\n\n/^[\\w]+/\n\\= Expect no match\n    cole\n\n/^[\\w]+/locale=fr_FR\n    cole\n\n/^[\\W]+/\n    cole\n\n/^[\\W]+/locale=fr_FR\n\\= Expect no match\n    cole\n\n/[\\b]/\n    \\b\n\\= Expect no match\n    a\n\n/[\\b]/locale=fr_FR\n    \\b\n\\= Expect no match\n    a\n\n/^\\w+/\n\\= Expect no match\n    cole\n\n/^\\w+/locale=fr_FR\n    cole\n\n/(.+)\\b(.+)/\n    cole\n\n/(.+)\\b(.+)/locale=fr_FR\n\\= Expect no match\n    cole\n\n/cole/i\n    cole\n\\= Expect no match\n    cole\n\n/cole/i,locale=fr_FR\n    cole\n    cole\n\n/\\w/I\n\n/\\w/I,locale=fr_FR\n\n# All remaining tests are in the fr_FR locale, so set the default.\n\n#pattern locale=fr_FR\n\n/^[\\xc8-\\xc9]/i\n    cole\n    cole\n\n/^[\\xc8-\\xc9]/\n    cole\n\\= Expect no match\n    cole\n\n/\\xb5/i\n    \n\\= Expect no match\n    \\x9c\n\n//i\n    \\xff\n\\= Expect no match\n    y\n\n/(.)\\1/i\n    \\xfe\\xde\n\n/\\W+/\n    >>>\\xaa<<<\n    >>>\\xba<<< \n\n/[\\W]+/\n    >>>\\xaa<<<\n    >>>\\xba<<< \n\n/[^[:alpha:]]+/\n    >>>\\xaa<<<\n    >>>\\xba<<< \n\n/\\w+/\n    >>>\\xaa<<<\n    >>>\\xba<<< \n\n/[\\w]+/\n    >>>\\xaa<<<\n    >>>\\xba<<< \n\n/[[:alpha:]]+/\n    >>>\\xaa<<<\n    >>>\\xba<<< \n    \n/[[:alpha:]][[:lower:]][[:upper:]]/IB\n\n# End of testinput3 \n"
  },
  {
    "path": "testdata/testinput4",
    "content": "# This set of tests is for UTF support, including Unicode properties. The\n# Unicode tests are all compatible with all versions of Perl >= 5.10, but\n# some of the property tests may differ because of different versions of\n# Unicode in use by PCRE2 and Perl.\n\n# WARNING: Use only / as the pattern delimiter. Although pcre2test supports\n# a number of delimiters, all those other than / give problems with the\n# perltest.sh script.\n\n#newline_default lf anycrlf any\n#perltest\n\n/a.b/utf\n    acb\n    a\\x7fb\n    a\\x{100}b\n\\= Expect no match\n    a\\nb\n\n/a(.{3})b/utf\n    a\\x{4000}xyb\n    a\\x{4000}\\x7fyb\n    a\\x{4000}\\x{100}yb\n\\= Expect no match\n    a\\x{4000}b\n    ac\\ncb\n\n/a(.*?)(.)/\n    a\\xc0\\x88b\n\n/a(.*?)(.)/utf\n    a\\x{100}b\n\n/a(.*)(.)/\n    a\\xc0\\x88b\n\n/a(.*)(.)/utf\n    a\\x{100}b\n\n/a(.)(.)/\n    a\\xc0\\x92bcd\n\n/a(.)(.)/utf\n    a\\x{240}bcd\n\n/a(.?)(.)/\n    a\\xc0\\x92bcd\n\n/a(.?)(.)/utf\n    a\\x{240}bcd\n\n/a(.??)(.)/\n    a\\xc0\\x92bcd\n\n/a(.??)(.)/utf\n    a\\x{240}bcd\n\n/a(.{3})b/utf\n    a\\x{1234}xyb\n    a\\x{1234}\\x{4321}yb\n    a\\x{1234}\\x{4321}\\x{3412}b\n\\= Expect no match\n    a\\x{1234}b\n    ac\\ncb\n\n/a(.{3,})b/utf\n    a\\x{1234}xyb\n    a\\x{1234}\\x{4321}yb\n    a\\x{1234}\\x{4321}\\x{3412}b\n    axxxxbcdefghijb\n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n\\= Expect no match\n    a\\x{1234}b\n\n/a(.{3,}?)b/utf\n    a\\x{1234}xyb\n    a\\x{1234}\\x{4321}yb\n    a\\x{1234}\\x{4321}\\x{3412}b\n    axxxxbcdefghijb\n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n\\= Expect no match\n    a\\x{1234}b\n\n/a(.{3,5})b/utf\n    a\\x{1234}xyb\n    a\\x{1234}\\x{4321}yb\n    a\\x{1234}\\x{4321}\\x{3412}b\n    axxxxbcdefghijb\n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n    axbxxbcdefghijb\n    axxxxxbcdefghijb\n\\= Expect no match\n    a\\x{1234}b\n    axxxxxxbcdefghijb\n\n/a(.{3,5}?)b/utf\n    a\\x{1234}xyb\n    a\\x{1234}\\x{4321}yb\n    a\\x{1234}\\x{4321}\\x{3412}b\n    axxxxbcdefghijb\n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n    axbxxbcdefghijb\n    axxxxxbcdefghijb\n\\= Expect no match\n    a\\x{1234}b\n    axxxxxxbcdefghijb\n\n/^[a\\x{c0}]/utf\n\\= Expect no match\n    \\x{100}\n\n/(?<=aXb)cd/utf\n    aXbcd\n\n/(?<=a\\x{100}b)cd/utf\n    a\\x{100}bcd\n\n/(?<=a\\x{100000}b)cd/utf\n    a\\x{100000}bcd\n\n/(?:\\x{100}){3}b/utf\n    \\x{100}\\x{100}\\x{100}b\n\\= Expect no match\n    \\x{100}\\x{100}b\n\n/\\x{ab}/utf\n    \\x{ab}\n    \\xc2\\xab\n\\= Expect no match\n    \\x00{ab}\n\n/(?<=(.))X/utf\n    WXYZ\n    \\x{256}XYZ\n\\= Expect no match\n    XYZ\n\n/[^a]+/g,utf\n    bcd\n    \\x{100}aY\\x{256}Z\n\n/^[^a]{2}/utf\n    \\x{100}bc\n\n/^[^a]{2,}/utf\n    \\x{100}bcAa\n\n/^[^a]{2,}?/utf\n    \\x{100}bca\n\n/[^a]+/gi,utf\n    bcd\n    \\x{100}aY\\x{256}Z\n\n/^[^a]{2}/i,utf\n    \\x{100}bc\n\n/^[^a]{2,}/i,utf\n    \\x{100}bcAa\n\n/^[^a]{2,}?/i,utf\n    \\x{100}bca\n\n/\\x{100}{0,0}/utf\n    abcd\n\n/\\x{100}?/utf\n    abcd\n    \\x{100}\\x{100}\n\n/\\x{100}{0,3}/utf\n    \\x{100}\\x{100}\n    \\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\x{100}*/utf\n    abce\n    \\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\x{100}{1,1}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\x{100}{1,3}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\x{100}+/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\x{100}{3}/utf\n    abcd\\x{100}\\x{100}\\x{100}XX\n\n/\\x{100}{3,5}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}XX\n\n/\\x{100}{3,}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}XX\n\n/(?<=a\\x{100}{2}b)X/utf,aftertext\n    Xyyya\\x{100}\\x{100}bXzzz\n\n/\\D*/utf\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/\\D*/utf\n  \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\D/utf\n    1X2\n    1\\x{100}2\n\n/>\\S/utf\n    > >X Y\n    > >\\x{100} Y\n\n/\\d/utf\n    \\x{100}3\n\n/\\s/utf\n    \\x{100} X\n\n/\\D+/utf\n    12abcd34\n\\= Expect no match\n    1234\n\n/\\D{2,3}/utf\n    12abcd34\n    12ab34\n\\= Expect no match\n    1234\n    12a34\n\n/\\D{2,3}?/utf\n    12abcd34\n    12ab34\n\\= Expect no match\n    1234\n    12a34\n\n/\\d+/utf\n    12abcd34\n\n/\\d{2,3}/utf\n    12abcd34\n    1234abcd\n\\= Expect no match\n    1.4\n\n/\\d{2,3}?/utf\n    12abcd34\n    1234abcd\n\\= Expect no match\n    1.4\n\n/\\S+/utf\n    12abcd34\n\\= Expect no match\n    \\    \\\n\n/\\S{2,3}/utf\n    12abcd34\n    1234abcd\n\\= Expect no match\n    \\     \\\n\n/\\S{2,3}?/utf\n    12abcd34\n    1234abcd\n\\= Expect no match\n    \\     \\\n\n/>\\s+</utf,aftertext\n    12>      <34\n\n/>\\s{2,3}</utf,aftertext\n    ab>  <cd\n    ab>   <ce\n\\= Expect no match\n    ab>    <cd\n\n/>\\s{2,3}?</utf,aftertext\n    ab>  <cd\n    ab>   <ce\n\\= Expect no match\n    ab>    <cd\n\n/\\w+/utf\n    12      34\n\\= Expect no match\n    +++=*!\n\n/\\w{2,3}/utf\n    ab  cd\n    abcd ce\n\\= Expect no match\n    a.b.c\n\n/\\w{2,3}?/utf\n    ab  cd\n    abcd ce\n\\= Expect no match\n    a.b.c\n\n/\\W+/utf\n    12====34\n\\= Expect no match\n    abcd\n\n/\\W{2,3}/utf\n    ab====cd\n    ab==cd\n\\= Expect no match\n    a.b.c\n\n/\\W{2,3}?/utf\n    ab====cd\n    ab==cd\n\\= Expect no match\n    a.b.c\n\n/[\\x{100}]/utf\n    \\x{100}\n    Z\\x{100}\n    \\x{100}Z\n\n/[Z\\x{100}]/utf\n    Z\\x{100}\n    \\x{100}\n    \\x{100}Z\n\n/[\\x{100}\\x{200}]/utf\n    ab\\x{100}cd\n    ab\\x{200}cd\n\n/[\\x{100}-\\x{200}]/utf\n    ab\\x{100}cd\n    ab\\x{200}cd\n    ab\\x{111}cd\n\n/[z-\\x{200}]/utf\n    ab\\x{100}cd\n    ab\\x{200}cd\n    ab\\x{111}cd\n    abzcd\n    ab|cd\n\n/[Q\\x{100}\\x{200}]/utf\n    ab\\x{100}cd\n    ab\\x{200}cd\n    Q?\n\n/[Q\\x{100}-\\x{200}]/utf\n    ab\\x{100}cd\n    ab\\x{200}cd\n    ab\\x{111}cd\n    Q?\n\n/[Qz-\\x{200}]/utf\n    ab\\x{100}cd\n    ab\\x{200}cd\n    ab\\x{111}cd\n    abzcd\n    ab|cd\n    Q?\n\n/[\\x{100}\\x{200}]{1,3}/utf\n    ab\\x{100}cd\n    ab\\x{200}cd\n    ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n\n/[\\x{100}\\x{200}]{1,3}?/utf\n    ab\\x{100}cd\n    ab\\x{200}cd\n    ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n\n/[Q\\x{100}\\x{200}]{1,3}/utf\n    ab\\x{100}cd\n    ab\\x{200}cd\n    ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n\n/[Q\\x{100}\\x{200}]{1,3}?/utf\n    ab\\x{100}cd\n    ab\\x{200}cd\n    ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n\n/(?<=[\\x{100}\\x{200}])X/utf\n    abc\\x{200}X\n    abc\\x{100}X\n\\= Expect no match\n    X\n\n/(?<=[Q\\x{100}\\x{200}])X/utf\n    abc\\x{200}X\n    abc\\x{100}X\n    abQX\n\\= Expect no match\n    X\n\n/(?<=[\\x{100}\\x{200}]{3})X/utf\n    abc\\x{100}\\x{200}\\x{100}X\n\\= Expect no match\n    abc\\x{200}X\n    X\n\n/[^\\x{100}\\x{200}]X/utf\n    AX\n    \\x{150}X\n    \\x{500}X\n\\= Expect no match\n    \\x{100}X\n    \\x{200}X\n\n/[^Q\\x{100}\\x{200}]X/utf\n    AX\n    \\x{150}X\n    \\x{500}X\n\\= Expect no match\n    \\x{100}X\n    \\x{200}X\n    QX\n\n/[^\\x{100}-\\x{200}]X/utf\n    AX\n    \\x{500}X\n\\= Expect no match\n    \\x{100}X\n    \\x{150}X\n    \\x{200}X\n\n/[z-\\x{100}]/i,utf\n    z\n    Z\n    \\x{100}\n\\= Expect no match\n    \\x{102}\n    y\n\n/[\\xFF]/\n    >\\xff<\n\n/[\\xff]/utf\n    >\\x{ff}<\n\n/[^\\xFF]/\n    XYZ\n\n/[^\\xff]/utf\n    XYZ\n    \\x{123}\n\n/^[ac]*b/utf\n\\= Expect no match\n  xb\n\n/^[ac\\x{100}]*b/utf\n\\= Expect no match\n  xb\n\n/^[^x]*b/i,utf\n\\= Expect no match\n  xb\n\n/^[^x]*b/utf\n\\= Expect no match\n  xb\n\n/^\\d*b/utf\n\\= Expect no match\n  xb\n\n/(|a)/g,utf\n    catac\n    a\\x{256}a\n\n/^\\x{85}$/i,utf\n    \\x{85}\n\n/^ሴ/utf\n    ሴ\n\n/^\\ሴ/utf\n    ሴ\n\n/(?s)(.{1,5})/utf\n    abcdefg\n    ab\n\n/a*\\x{100}*\\w/utf\n    a\n\n/\\S\\S/g,utf\n    A\\x{a3}BC\n\n/\\S{2}/g,utf\n    A\\x{a3}BC\n\n/\\W\\W/g,utf\n    +\\x{a3}==\n\n/\\W{2}/g,utf\n    +\\x{a3}==\n\n/\\S/g,utf\n    \\x{442}\\x{435}\\x{441}\\x{442}\n\n/[\\S]/g,utf\n    \\x{442}\\x{435}\\x{441}\\x{442}\n\n/\\D/g,utf\n    \\x{442}\\x{435}\\x{441}\\x{442}\n\n/[\\D]/g,utf\n    \\x{442}\\x{435}\\x{441}\\x{442}\n\n/\\W/g,utf\n    \\x{2442}\\x{2435}\\x{2441}\\x{2442}\n\n/[\\W]/g,utf\n    \\x{2442}\\x{2435}\\x{2441}\\x{2442}\n\n/[\\S\\s]*/utf\n    abc\\n\\r\\x{442}\\x{435}\\x{441}\\x{442}xyz\n\n/[\\x{41f}\\S]/g,utf\n    \\x{442}\\x{435}\\x{441}\\x{442}\n\n/.[^\\S]./g,utf\n    abc def\\x{442}\\x{443}xyz\\npqr\n\n/.[^\\S\\n]./g,utf\n    abc def\\x{442}\\x{443}xyz\\npqr\n\n/[[:^alnum:]]/g,utf\n    +\\x{2442}\n\n/[[:^alpha:]]/g,utf\n    +\\x{2442}\n\n/[[:^ascii:]]/g,utf\n    A\\x{442}\n\n/[[:^blank:]]/g,utf\n    A\\x{442}\n\n/[[:^cntrl:]]/g,utf\n    A\\x{442}\n\n/[[:^digit:]]/g,utf\n    A\\x{442}\n\n/[[:^graph:]]/g,utf\n    \\x19\\x{e01ff}\n\n/[[:^lower:]]/g,utf\n    A\\x{422}\n\n/[[:^print:]]/g,utf\n    \\x{19}\\x{e01ff}\n\n/[[:^punct:]]/g,utf\n    A\\x{442}\n\n/[[:^space:]]/g,utf\n    A\\x{442}\n\n/[[:^upper:]]/g,utf\n    a\\x{442}\n\n/[[:^word:]]/g,utf\n    +\\x{2442}\n\n/[[:^xdigit:]]/g,utf\n    M\\x{442}\n\n/[^ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİĲĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽƁƂƄƆƇƉƊƋƎƏƐƑƓƔƖƗƘƜƝƟƠƢƤƦƧƩƬƮƯƱƲƳƵƷƸƼǄǇǊǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮǱǴǶǷǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾɁΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫϒϓϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹϺϽϾϿЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸԀԂԄԆԈԊԌԎԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸἈἉἊἋἌἍἎἏἘἙἚἛἜἝἨἩἪἫἬἭἮἯἸἹἺἻἼἽἾἿὈὉὊὋὌὍὙὛὝὟὨὩὪὫὬὭὮὯᾸᾹᾺΆῈΈῊΉῘῙῚΊῨῩῪΎῬῸΌῺΏabcdefghijklmnopqrstuvwxyzªµºßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĳĵķĸĺļľŀłńņňŉŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżžſƀƃƅƈƌƍƒƕƙƚƛƞơƣƥƨƪƫƭưƴƶƹƺƽƾƿǆǉǌǎǐǒǔǖǘǚǜǝǟǡǣǥǧǩǫǭǯǰǳǵǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟȡȣȥȧȩȫȭȯȱȳȴȵȶȷȸȹȼȿɀɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕʖʗʘʙʚʛʜʝʞʟʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯΐάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώϐϑϕϖϗϙϛϝϟϡϣϥϧϩϫϭϯϰϱϲϳϵϸϻϼабвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹԁԃԅԇԉԋԍԏաբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆևᴀᴁᴂᴃᴄᴅᴆᴇᴈᴉᴊᴋᴌᴍᴎᴏᴐᴑᴒᴓᴔᴕᴖᴗᴘᴙᴚᴛᴜᴝᴞᴟᴠᴡᴢᴣᴤᴥᴦᴧᴨᴩᴪᴫᵢᵣᵤᵥᵦᵧᵨᵩᵪᵫᵬᵭᵮᵯᵰᵱᵲᵳᵴᵵᵶᵷᵹᵺᵻᵼᵽᵾᵿᶀᶁᶂᶃᶄᶅᶆᶇᶈᶉᶊᶋᶌᶍᶎᶏᶐᶑᶒᶓᶔᶕᶖᶗᶘᶙᶚḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕẖẗẘẙẚẛạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹἀἁἂἃἄἅἆἇἐἑἒἓἔἕἠἡἢἣἤἥἦἧἰἱἲἳἴἵἶἷὀὁὂὃὄὅὐὑὒὓὔὕὖὗὠὡὢὣὤὥὦὧὰάὲέὴήὶίὸόὺύὼώᾀᾁᾂᾃᾄᾅᾆᾇᾐᾑᾒᾓᾔᾕᾖᾗᾠᾡᾢᾣᾤᾥᾦᾧᾰᾱᾲᾳᾴᾶᾷιῂῃῄῆῇῐῑῒΐῖῗῠῡῢΰῤῥῦῧῲῳῴῶῷⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣⳤⴀⴁⴂⴃⴄⴅⴆⴇⴈⴉⴊⴋⴌⴍⴎⴏⴐⴑⴒⴓⴔⴕⴖⴗⴘⴙⴚⴛⴜⴝⴞⴟⴠⴡⴢⴣⴤⴥﬀﬁﬂﬃﬄﬅﬆﬓﬔﬕﬖﬗ\\d_^]/utf\n\n/^[^d]*?$/\n    abc\n\n/^[^d]*?$/utf\n    abc\n\n/^[^d]*?$/i\n    abc\n\n/^[^d]*?$/i,utf\n    abc\n\n/(?i)[\\xc3\\xa9\\xc3\\xbd]|[\\xc3\\xa9\\xc3\\xbdA]/utf\n\n/^[a\\x{c0}]b/utf\n    \\x{c0}b\n\n/^([a\\x{c0}]*?)aa/utf\n    a\\x{c0}aaaa/\n\n/^([a\\x{c0}]*?)aa/utf\n    a\\x{c0}aaaa/\n    a\\x{c0}a\\x{c0}aaa/\n\n/^([a\\x{c0}]*)aa/utf\n    a\\x{c0}aaaa/\n    a\\x{c0}a\\x{c0}aaa/\n\n/^([a\\x{c0}]*)a\\x{c0}/utf\n    a\\x{c0}aaaa/\n    a\\x{c0}a\\x{c0}aaa/\n\n/A*/g,utf\n    AAB\\x{123}BAA\n\n/(abc)\\1/i,utf\n\\= Expect no match\n   abc\n\n/(abc)\\1/utf\n\\= Expect no match\n   abc\n\n/a(*:a\\x{1234}b)/utf,mark\n    abc\n\n/a(*:a£b)/utf,mark\n    abc\n\n# Noncharacters\n\n/./utf\n    \\x{fffe}\n    \\x{ffff}\n    \\x{1fffe}\n    \\x{1ffff}\n    \\x{2fffe}\n    \\x{2ffff}\n    \\x{3fffe}\n    \\x{3ffff}\n    \\x{4fffe}\n    \\x{4ffff}\n    \\x{5fffe}\n    \\x{5ffff}\n    \\x{6fffe}\n    \\x{6ffff}\n    \\x{7fffe}\n    \\x{7ffff}\n    \\x{8fffe}\n    \\x{8ffff}\n    \\x{9fffe}\n    \\x{9ffff}\n    \\x{afffe}\n    \\x{affff}\n    \\x{bfffe}\n    \\x{bffff}\n    \\x{cfffe}\n    \\x{cffff}\n    \\x{dfffe}\n    \\x{dffff}\n    \\x{efffe}\n    \\x{effff}\n    \\x{ffffe}\n    \\x{fffff}\n    \\x{10fffe}\n    \\x{10ffff}\n    \\x{fdd0}\n    \\x{fdd1}\n    \\x{fdd2}\n    \\x{fdd3}\n    \\x{fdd4}\n    \\x{fdd5}\n    \\x{fdd6}\n    \\x{fdd7}\n    \\x{fdd8}\n    \\x{fdd9}\n    \\x{fdda}\n    \\x{fddb}\n    \\x{fddc}\n    \\x{fddd}\n    \\x{fdde}\n    \\x{fddf}\n    \\x{fde0}\n    \\x{fde1}\n    \\x{fde2}\n    \\x{fde3}\n    \\x{fde4}\n    \\x{fde5}\n    \\x{fde6}\n    \\x{fde7}\n    \\x{fde8}\n    \\x{fde9}\n    \\x{fdea}\n    \\x{fdeb}\n    \\x{fdec}\n    \\x{fded}\n    \\x{fdee}\n    \\x{fdef}\n\n/^\\d*\\w{4}/utf\n    1234\n\\= Expect no match\n    123\n\n/^[^b]*\\w{4}/utf\n    aaaa\n\\= Expect no match\n    aaa\n\n/^[^b]*\\w{4}/i,utf\n    aaaa\n\\= Expect no match\n    aaa\n\n/^\\x{100}*.{4}/utf\n    \\x{100}\\x{100}\\x{100}\\x{100}\n\\= Expect no match\n    \\x{100}\\x{100}\\x{100}\n\n/^\\x{100}*.{4}/i,utf\n    \\x{100}\\x{100}\\x{100}\\x{100}\n\\= Expect no match\n    \\x{100}\\x{100}\\x{100}\n\n/^a+[a\\x{200}]/utf\n    aa\n\n/^.\\B.\\B./utf\n    \\x{10123}\\x{10124}\\x{10125}\n\n/^#[^\\x{ffff}]#[^\\x{ffff}]#[^\\x{ffff}]#/utf\n    #\\x{10000}#\\x{100}#\\x{10ffff}#\n\n# Unicode property support tests\n\n/^\\pC\\pL\\pM\\pN\\pP\\pS\\pZ</utf\n    \\x7f\\x{c0}\\x{30f}\\x{660}\\x{66c}\\x{f01}\\x{1680}<\n    \\np\\x{300}9!\\$ <\n\\= Expect no match\n    ap\\x{300}9!\\$ <\n\n/^\\PC/utf\n    X\n\\= Expect no match\n    \\x7f\n\n/^\\PL/utf\n    9\n\\= Expect no match\n    \\x{c0}\n\n/^\\PM/utf\n    X\n\\= Expect no match\n    \\x{30f}\n\n/^\\PN/utf\n    X\n\\= Expect no match\n    \\x{660}\n\n/^\\PP/utf\n    X\n\\= Expect no match\n    \\x{66c}\n\n/^\\PS/utf\n    X\n\\= Expect no match\n    \\x{f01}\n\n/^\\PZ/utf\n    X\n\\= Expect no match\n    \\x{1680}\n\n/^\\p{Cc}/utf\n    \\x{017}\n    \\x{09f}\n\\= Expect no match\n    \\x{0600}\n\n/^\\p{Cf}/utf\n    \\x{601}\n\\= Expect no match\n    \\x{09f}\n\n/^\\p{Cn}/utf\n    \\x{e0000}\n\\= Expect no match\n    \\x{09f}\n\n/^\\p{Co}/utf\n    \\x{f8ff}\n\\= Expect no match\n    \\x{09f}\n\n/^\\p{Ll}/utf\n    a\n\\= Expect no match\n    Z\n    \\x{e000}\n\n/^\\p{Lm}/utf\n    \\x{2b0}\n\\= Expect no match\n    a\n\n/^\\p{Lo}/utf\n    \\x{1bb}\n    \\x{3400}\n    \\x{3401}\n    \\x{4d00}\n    \\x{4db4}\n    \\x{4db5}\n    \\x{4db6}\n\\= Expect no match\n    a\n    \\x{2b0}\n\n/^\\p{Lt}/utf\n    \\x{1c5}\n\\= Expect no match\n    a\n    \\x{2b0}\n\n/^\\p{Lu}/utf\n    A\n\\= Expect no match\n    \\x{2b0}\n\n/^\\p{Mc}/utf\n    \\x{903}\n\\= Expect no match\n    X\n    \\x{300}\n\n/^\\p{Me}/utf\n    \\x{488}\n\\= Expect no match\n    X\n    \\x{903}\n    \\x{300}\n\n/^\\p{Mn}/utf\n    \\x{300}\n\\= Expect no match\n    X\n    \\x{903}\n\n/^\\p{Nd}+/utf\n    0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\\x{668}\\x{669}\\x{66a}\n    \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\\x{6f8}\\x{6f9}\\x{6fa}\n    \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\\x{96e}\\x{96f}\\x{970}\n\\= Expect no match\n    X\n\n/^\\p{Nl}/utf\n    \\x{16ee}\n\\= Expect no match\n    X\n    \\x{966}\n\n/^\\p{No}/utf\n    \\x{b2}\n    \\x{b3}\n\\= Expect no match\n    X\n    \\x{16ee}\n\n/^\\p{Pc}/utf\n    \\x5f\n    \\x{203f}\n\\= Expect no match\n    X\n    -\n    \\x{58a}\n\n/^\\p{Pd}/utf\n    -\n    \\x{58a}\n\\= Expect no match\n    X\n    \\x{203f}\n\n/^\\p{Pe}/utf\n    )\n    ]\n    }\n    \\x{f3b}\n\\= Expect no match\n    X\n    \\x{203f}\n    (\n    [\n    {\n    \\x{f3c}\n\n/^\\p{Pf}/utf\n    \\x{bb}\n    \\x{2019}\n\\= Expect no match\n    X\n    \\x{203f}\n\n/^\\p{Pi}/utf\n    \\x{ab}\n    \\x{2018}\n\\= Expect no match\n    X\n    \\x{203f}\n\n/^\\p{Po}/utf\n    !\n    \\x{37e}\n\\= Expect no match\n    X\n    \\x{203f}\n\n/^\\p{Ps}/utf\n    (\n    [\n    {\n    \\x{f3c}\n\\= Expect no match\n    X\n    )\n    ]\n    }\n    \\x{f3b}\n\n/^\\p{Sk}/utf\n    \\x{2c2}\n\\= Expect no match\n    X\n    \\x{9f2}\n\n/^\\p{Sm}+/utf\n    +<|~\\x{ac}\\x{2044}\n\\= Expect no match\n    X\n    \\x{9f2}\n\n/^\\p{So}/utf\n    \\x{a6}\n    \\x{482}\n\\= Expect no match\n    X\n    \\x{9f2}\n\n/^\\p{Zl}/utf\n    \\x{2028}\n\\= Expect no match\n    X\n    \\x{2029}\n\n/^\\p{Zp}/utf\n    \\x{2029}\n\\= Expect no match\n    X\n    \\x{2028}\n\n/\\p{Nd}+(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}+?(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}{2,}(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}{2,}?(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}*(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}*?(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}{2}(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}{2,3}(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}{2,3}?(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}?(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}??(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}*+(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}*+(...)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n\n/\\p{Nd}*+(....)/utf\n\\= Expect no match\n    \\x{660}\\x{661}\\x{662}ABC\n\n/^\\pN{3,}+(.)/utf\n   \\x{7c0}8\\x{662}\\x{966}\\x{95c}\n   \\x{7c0}8\\x{662}\\x{95c}\n\\= Expect no match\n   \\x{7c0}8\\x{662}\\x{966}\n   \\x{7c0}8\\x{95c}\n\n/(?<=A\\p{Nd})XYZ/utf\n    A2XYZ\n    123A5XYZPQR\n    ABA\\x{660}XYZpqr\n\\= Expect no match\n    AXYZ\n    XYZ\n\n/(?<!\\pL)XYZ/utf\n    1XYZ\n    AB=XYZ..\n    XYZ\n\\= Expect no match\n    WXYZ\n\n/[\\P{Nd}]+/utf\n    abcd\n\\= Expect no match\n    1234\n\n/\\D+/utf\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\n\n/\\P{Nd}+/utf\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\n\n/[\\D]+/utf\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\n\n/[\\P{Nd}]+/utf\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\n\n/[\\D\\P{Nd}]+/utf\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\n\n/\\pL/utf\n    a\n    A\n\n/\\pL/i,utf\n    a\n    A\n\n/\\p{Lu}/utf\n    A\n    aZ\n\\= Expect no match\n    abc\n\n/\\p{Ll}/utf\n    a\n    Az\n\\= Expect no match\n    ABC\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/utf\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n\\= Expect no match\n    a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n    A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}\n    A\\x{391}\\x{1044F}\\x{ff3a}\\x{1fb0}\n    A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/i,utf\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n    a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n    A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}\n    A\\x{391}\\x{1044F}\\x{ff3a}\\x{1fb0}\n    A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}\n\n/\\x{391}+/i,utf\n    \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}\n\n/\\x{391}{3,5}(.)/i,utf\n    \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X\n\n/\\x{391}{3,5}?(.)/i,utf\n    \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X\n\n/[\\x{391}\\x{ff3a}]/i,utf\n    \\x{391}\n    \\x{ff3a}\n    \\x{3b1}\n    \\x{ff5a}\n\n/^(\\X*)C/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n\n/^(\\X*?)C/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n\n/^(\\X*)(.)/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n\n/^(\\X*?)(.)/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n\n/^\\X(.)/utf\n\\= Expect no match\n    A\\x{300}\\x{301}\\x{302}\n\n/^\\X{2,3}(.)/utf\n    A\\x{300}\\x{301}B\\x{300}X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}DA\\x{300}X\n\n/^\\X{2,3}?(.)/utf\n    A\\x{300}\\x{301}B\\x{300}X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}DA\\x{300}X\n\n/^\\X{3,}+/utf\n    A\\x{300}B\\x{301}U\\x{303}\\x{0301}\n    A\\x{300}B\\x{301}U\\x{303}\\x{0301}X\n\\= Expect no match\n    A\\x{300}\n    A\\x{300}B\\x{301}\n    A\\x{300}U\\x{303}\\x{0301}\n\n/^\\X/utf\n    A\n    A\\x{300}BC\n    A\\x{300}\\x{301}\\x{302}BC\n    \\x{300}\n\n/^\\p{Han}+/utf\n    \\x{2e81}\\x{3007}\\x{2f804}\\x{31a0}\n\\= Expect no match\n    \\x{2e7f}\n\n/^[\\p{Arabic}]/utf\n    \\x{06e9}\n    \\x{060b}\n\\= Expect no match\n    X\\x{06e9}\n\n/^\\P{Katakana}+/utf\n    \\x{3105}\n\\= Expect no match\n    \\x{30ff}\n\n/^[\\P{Yi}]/utf\n    \\x{2f800}\n\\= Expect no match\n    \\x{a014}\n    \\x{a4c6}\n\n/^\\p{Any}X/utf\n    AXYZ\n    \\x{1234}XYZ\n\\= Expect no match\n    X\n\n/^\\P{Any}X/utf\n\\= Expect no match\n    AX\n\n/^\\p{Any}?X/utf\n    XYZ\n    AXYZ\n    \\x{1234}XYZ\n\\= Expect no match\n    ABXYZ\n\n/^\\P{Any}?X/utf\n    XYZ\n\\= Expect no match\n    AXYZ\n    \\x{1234}XYZ\n    ABXYZ\n\n/^\\p{Any}+X/utf\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n\\= Expect no match\n    XYZ\n\n/^\\P{Any}+X/utf\n\\= Expect no match\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n    XYZ\n\n/^\\p{Any}*X/utf\n    XYZ\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n\n/^\\P{Any}*X/utf\n    XYZ\n\\= Expect no match\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n\n/^[\\p{Any}]X/utf\n    AXYZ\n    \\x{1234}XYZ\n\\= Expect no match\n    X\n\n/^[\\P{Any}]X/utf\n\\= Expect no match\n    AX\n\n/^[\\p{Any}]?X/utf\n    XYZ\n    AXYZ\n    \\x{1234}XYZ\n\\= Expect no match\n    ABXYZ\n\n/^[\\P{Any}]?X/utf\n    XYZ\n\\= Expect no match\n    AXYZ\n    \\x{1234}XYZ\n    ABXYZ\n\n/^[\\p{Any}]+X/utf\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n\\= Expect no match\n    XYZ\n\n/^[\\P{Any}]+X/utf\n\\= Expect no match\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n    XYZ\n\n/^[\\p{Any}]*X/utf\n    XYZ\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n\n/^[\\P{Any}]*X/utf\n    XYZ\n\\= Expect no match\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n\n/^\\p{Any}{3,5}?/utf\n    abcdefgh\n    \\x{1234}\\n\\r\\x{3456}xyz\n\n/^\\p{Any}{3,5}/utf\n    abcdefgh\n    \\x{1234}\\n\\r\\x{3456}xyz\n\n/^\\P{Any}{3,5}?/utf\n\\= Expect no match\n    abcdefgh\n    \\x{1234}\\n\\r\\x{3456}xyz\n\n/^\\p{L&}X/utf\n     AXY\n     aXY\n     \\x{1c5}XY\n\\= Expect no match\n    \\x{1bb}XY\n    \\x{2b0}XY\n    !XY\n\n/^[\\p{L&}]X/utf\n    AXY\n    aXY\n     \\x{1c5}XY\n\\= Expect no match\n    \\x{1bb}XY\n    \\x{2b0}XY\n    !XY\n\n/^\\p{L&}+X/utf\n    AXY\n    aXY\n    AbcdeXyz\n    \\x{1c5}AbXY\n    abcDEXypqreXlmn\n\\= Expect no match\n    \\x{1bb}XY\n    \\x{2b0}XY\n    !XY\n\n/^[\\p{L&}]+X/utf\n    AXY\n    aXY\n    AbcdeXyz\n    \\x{1c5}AbXY\n    abcDEXypqreXlmn\n\\= Expect no match\n    \\x{1bb}XY\n    \\x{2b0}XY\n    !XY\n\n/^\\p{L&}+?X/utf\n    AXY\n    aXY\n    AbcdeXyz\n    \\x{1c5}AbXY\n    abcDEXypqreXlmn\n\\= Expect no match\n    \\x{1bb}XY\n    \\x{2b0}XY\n    !XY\n\n/^[\\p{L&}]+?X/utf\n    AXY\n    aXY\n    AbcdeXyz\n    \\x{1c5}AbXY\n    abcDEXypqreXlmn\n\\= Expect no match\n    \\x{1bb}XY\n    \\x{2b0}XY\n    !XY\n\n/^\\P{L&}X/utf\n    !XY\n    \\x{1bb}XY\n    \\x{2b0}XY\n\\= Expect no match\n    \\x{1c5}XY\n    AXY\n\n/^[\\P{L&}]X/utf\n    !XY\n    \\x{1bb}XY\n    \\x{2b0}XY\n\\= Expect no match\n    \\x{1c5}XY\n    AXY\n\n/^(\\p{Z}[^\\p{C}\\p{Z}]+)*$/\n    \\xa0!\n\n/^[\\pL](abc)(?1)/\n    AabcabcYZ\n\n/([\\pL]=(abc))*X/\n    L=abcX\n\n/^\\p{Balinese}\\p{Cuneiform}\\p{Nko}\\p{Phags_Pa}\\p{Phoenician}/utf\n    \\x{1b00}\\x{12000}\\x{7c0}\\x{a840}\\x{10900}\n\n# Check property support in non-UTF mode\n\n/\\p{L}{4}/\n    123abcdefg\n    123abc\\xc4\\xc5zz\n\n/\\X{1,3}\\d/\n\\= Expect no match\n    \\x8aBCD\n\n/\\X?\\d/\n\\= Expect no match\n    \\x8aBCD\n\n/\\P{L}?\\d/\n\\= Expect no match\n    \\x8aBCD\n\n/[\\PPP\\x8a]{1,}\\x80/\n    A\\x80\n\n/^[\\p{Arabic}]/utf\n    \\x{604}\n    \\x{60e}\n    \\x{656}\n    \\x{657}\n    \\x{658}\n    \\x{659}\n    \\x{65a}\n    \\x{65b}\n    \\x{65c}\n    \\x{65d}\n    \\x{65e}\n    \\x{65f}\n    \\x{66a}\n    \\x{6e9}\n    \\x{6ef}\n    \\x{6fa}\n\n/^\\p{Cyrillic}/utf\n    \\x{1d2b}\n\n/^\\p{Common}/utf\n    \\x{2116}\n    \\x{1D183}\n\n/^\\p{Inherited}/utf\n    \\x{200c}\n\\= Expect no match\n    \\x{64a}\n    \\x{656}\n\n/^\\p{Shavian}/utf\n    \\x{10450}\n    \\x{1047f}\n\n/^\\p{Deseret}/utf\n    \\x{10400}\n    \\x{1044f}\n\n/^\\p{Osmanya}/utf\n    \\x{10480}\n    \\x{1049d}\n    \\x{104a0}\n    \\x{104a9}\n\\= Expect no match\n    \\x{1049e}\n    \\x{1049f}\n    \\x{104aa}\n    \n/\\p{katakana}/utf\n    \\x{30a1}\n    \\x{3001} \n\n/\\p{scx:katakana}/utf\n    \\x{30a1}\n    \\x{3001} \n    \n/\\p{script extensions:katakana}/utf\n    \\x{30a1}\n    \\x{3001} \n    \n/\\p{sc:katakana}/utf\n    \\x{30a1}\n\\= Expect no match     \n    \\x{3001} \n    \n/\\p{script:katakana}/utf\n    \\x{30a1}\n\\= Expect no match     \n    \\x{3001}\n    \n/\\p{sc:katakana}{3,}/utf\n    \\x{30a1}\\x{30fa}\\x{32d0}\\x{1b122}\\x{ff66}\\x{3001}ABC\n\n/\\p{sc:katakana}{3,}?/utf\n    \\x{30a1}\\x{30fa}\\x{32d0}\\x{1b122}\\x{ff66}\\x{3001}ABC\n\n/\\p{Carian}\\p{Cham}\\p{Kayah_Li}\\p{Lepcha}\\p{Lycian}\\p{Lydian}\\p{Ol_Chiki}\\p{Rejang}\\p{Saurashtra}\\p{Sundanese}\\p{Vai}/utf\n    \\x{102A4}\\x{AA52}\\x{A91D}\\x{1C46}\\x{10283}\\x{1092E}\\x{1C6B}\\x{A93B}\\x{A8BF}\\x{1BA0}\\x{A50A}====\n\n/\\x{a77d}\\x{1d79}/i,utf\n    \\x{a77d}\\x{1d79}\n    \\x{1d79}\\x{a77d}\n\n/\\x{a77d}\\x{1d79}/utf\n    \\x{a77d}\\x{1d79}\n\\= Expect no match\n    \\x{1d79}\\x{a77d}\n\n/(A)\\1/i,utf\n    AA\n    Aa\n    aa\n    aA\n\n/(\\x{10a})\\1/i,utf\n    \\x{10a}\\x{10a}\n    \\x{10a}\\x{10b}\n    \\x{10b}\\x{10b}\n    \\x{10b}\\x{10a}\n\n# The next two tests are for property support in non-UTF mode\n\n/(?:\\p{Lu}|\\x20)+/\n    \\x41\\x20\\x50\\xC2\\x54\\xC9\\x20\\x54\\x4F\\x44\\x41\\x59\n\n/[\\p{Lu}\\x20]+/\n    \\x41\\x20\\x50\\xC2\\x54\\xC9\\x20\\x54\\x4F\\x44\\x41\\x59\n\n/\\p{Avestan}\\p{Bamum}\\p{Egyptian_Hieroglyphs}\\p{Imperial_Aramaic}\\p{Inscriptional_Pahlavi}\\p{Inscriptional_Parthian}\\p{Javanese}\\p{Kaithi}\\p{Lisu}\\p{Meetei_Mayek}\\p{Old_South_Arabian}\\p{Old_Turkic}\\p{Samaritan}\\p{Tai_Tham}\\p{Tai_Viet}/utf\n    \\x{10b00}\\x{a6ef}\\x{13007}\\x{10857}\\x{10b78}\\x{10b58}\\x{a980}\\x{110c1}\\x{a4ff}\\x{abc0}\\x{10a7d}\\x{10c48}\\x{0800}\\x{1aad}\\x{aac0}\n\n/^\\w+/utf,ucp\n    Az_\\x{aa}\\x{c0}\\x{1c5}\\x{2b0}\\x{3b6}\\x{1d7c9}\\x{2fa1d}1\\x{660}\\x{bef}\\x{16ee}\n\n/^[[:xdigit:]]*/utf,ucp\n    1a\\x{660}\\x{bef}\\x{16ee}\n\n/^\\d+/utf,ucp\n    1\\x{660}\\x{bef}\\x{16ee}\n\n/^[[:digit:]]+/utf,ucp\n    1\\x{660}\\x{bef}\\x{16ee}\n\n/^>\\s+/utf,ucp\n    >\\x{20}\\x{a0}\\x{1680}\\x{2028}\\x{2029}\\x{202f}\\x{9}\\x{b}\n\n/^>\\pZ+/utf,ucp\n    >\\x{20}\\x{a0}\\x{1680}\\x{2028}\\x{2029}\\x{202f}\\x{9}\\x{b}\n\n/^>[[:space:]]*/utf,ucp\n    >\\x{20}\\x{a0}\\x{1680}\\x{2028}\\x{2029}\\x{202f}\\x{9}\\x{b}\n\n/^>[[:blank:]]*/utf,ucp\n    >\\x{20}\\x{a0}\\x{1680}\\x{2000}\\x{202f}\\x{9}\\x{b}\\x{2028}\n\n/^[[:alpha:]]*/utf,ucp\n    Az\\x{aa}\\x{c0}\\x{1c5}\\x{2b0}\\x{3b6}\\x{1d7c9}\\x{2fa1d}\n\n/^[[:alnum:]]*/utf,ucp\n    Az\\x{aa}\\x{c0}\\x{1c5}\\x{2b0}\\x{3b6}\\x{1d7c9}\\x{2fa1d}1\\x{660}\\x{bef}\\x{16ee}\n\n/^[[:cntrl:]]*/utf,ucp\n    \\x{0}\\x{09}\\x{1f}\\x{7f}\\x{9f}\n\n/^[[:graph:]]*/utf,ucp\n    A\\x{a1}\\x{a0}\n\n/^[[:print:]]*/utf,ucp\n    A z\\x{a0}\\x{a1}\n\n/^[[:punct:]]*/utf,ucp\n    .+\\x{a1}\\x{a0}\n\n/\\p{Zs}*?\\R/\n\\= Expect no match\n    a\\xFCb\n\n/\\p{Zs}*\\R/\n\\= Expect no match\n    a\\xFCb\n\n/ⱥ/i,utf\n    ⱥ\n    Ⱥx\n    Ⱥ\n\n/[ⱥ]/i,utf\n    ⱥ\n    Ⱥx\n    Ⱥ\n\n/Ⱥ/i,utf\n    Ⱥ\n    ⱥ\n\n# These are tests for extended grapheme clusters\n\n/^\\X/utf,aftertext\n    G\\x{34e}\\x{34e}X\n    \\x{34e}\\x{34e}X\n    \\x04X\n    \\x{1100}X\n    \\x{1100}\\x{34e}X\n    \\x{1b04}\\x{1b04}X\n    *These match up to the roman letters\n    \\x{1111}\\x{1111}L,L\n    \\x{1111}\\x{1111}\\x{1169}L,L,V\n    \\x{1111}\\x{ae4c}L, LV\n    \\x{1111}\\x{ad89}L, LVT\n    \\x{1111}\\x{ae4c}\\x{1169}L, LV, V\n    \\x{1111}\\x{ae4c}\\x{1169}\\x{1169}L, LV, V, V\n    \\x{1111}\\x{ae4c}\\x{1169}\\x{11fe}L, LV, V, T\n    \\x{1111}\\x{ad89}\\x{11fe}L, LVT, T\n    \\x{1111}\\x{ad89}\\x{11fe}\\x{11fe}L, LVT, T, T\n    \\x{ad89}\\x{11fe}\\x{11fe}LVT, T, T\n    *These match just the first codepoint (invalid sequence)\n    \\x{1111}\\x{11fe}L, T\n    \\x{ae4c}\\x{1111}LV, L\n    \\x{ae4c}\\x{ae4c}LV, LV\n    \\x{ae4c}\\x{ad89}LV, LVT\n    \\x{1169}\\x{1111}V, L\n    \\x{1169}\\x{ae4c}V, LV\n    \\x{1169}\\x{ad89}V, LVT\n    \\x{ad89}\\x{1111}LVT, L\n    \\x{ad89}\\x{1169}LVT, V\n    \\x{ad89}\\x{ae4c}LVT, LV\n    \\x{ad89}\\x{ad89}LVT, LVT\n    \\x{11fe}\\x{1111}T, L\n    \\x{11fe}\\x{1169}T, V\n    \\x{11fe}\\x{ae4c}T, LV\n    \\x{11fe}\\x{ad89}T, LVT\n    *Test extend and spacing mark\n    \\x{1111}\\x{ae4c}\\x{0711}L, LV, extend\n    \\x{1111}\\x{ae4c}\\x{1b04}L, LV, spacing mark\n    \\x{1111}\\x{ae4c}\\x{1b04}\\x{0711}\\x{1b04}L, LV, spacing mark, extend, spacing mark\n    *Test CR, LF, and control\n    \\x0d\\x{0711}CR, extend\n    \\x0d\\x{1b04}CR, spacingmark\n    \\x0a\\x{0711}LF, extend\n    \\x0a\\x{1b04}LF, spacingmark\n    \\x0b\\x{0711}Control, extend\n    \\x09\\x{1b04}Control, spacingmark\n    *Test Extended Pictographic after bug fix\n    \\x{261d}\\x{261d}B              Extended_Pictographic Extended_Pictographic \n    \\x{261D}\\x{1F3FB}\\x{261d}B     Extended_Pictographic Extend E-P\n    \\x{261D}\\x{1F3FB}\\x{200d}\\x{261d}B     Extended_Pictographic Extend ZWJ E-P\n    \\x{1f3f3}\\x{fe0f}\\x{200d}\\x{1f308}\\x{1f3f4}\\x{200d}\\x{2620}\\x{fe0f}\\x{1f3f3}\\x{fe0f}\\x{200d}\\x{1f308}\\x{1f3f4}\\x{200d}\\x{2620}\\x{fe0f}\n    A\\x{200d}\\x{1f308}B\n    A\\x{200d}B                     A ZWJ\n    \\x{261D}\\x{1F3FB}B             Extended_Pictographic Extend\n    \\x{1F1E6}\\x{1F1E7}B            RegionalIndicator RegionalIndicator \n    *There are no Prepend characters, so we can't test Prepend, CR\n\n/^(?>\\X{2})X/utf,aftertext\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n\n/^\\X{2,4}X/utf,aftertext\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n\n/^\\X{2,4}?X/utf,aftertext\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n\n/\\X*Z/utf,no_start_optimize\n\\= Expect no match\n    A\\x{300}\n\n/\\X*(.)/utf,no_start_optimize\n    A\\x{1111}\\x{ae4c}\\x{1169}\n\n# --------------------------------------------\n\n/\\x{1e9e}+/i,utf\n    \\x{1e9e}\\x{00df}\n\n/[z\\x{1e9e}]+/i,utf\n    \\x{1e9e}\\x{00df}\n\n/\\x{00df}+/i,utf\n    \\x{1e9e}\\x{00df}\n\n/[z\\x{00df}]+/i,utf\n    \\x{1e9e}\\x{00df}\n\n/\\x{1f88}+/i,utf\n    \\x{1f88}\\x{1f80}\n\n/[z\\x{1f88}]+/i,utf\n    \\x{1f88}\\x{1f80}\n\n# Check a reference with more than one other case\n\n/^(\\x{00b5})\\1{2}$/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n\n# Characters with more than one other case; test in classes\n\n/[z\\x{00b5}]+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n\n/[z\\x{039c}]+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n\n/[z\\x{03bc}]+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n\n/[z\\x{00c5}]+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n\n/[z\\x{00e5}]+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n\n/[z\\x{212b}]+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n\n/[z\\x{01c4}]+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n\n/[z\\x{01c5}]+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n\n/[z\\x{01c6}]+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n\n/[z\\x{01c7}]+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n\n/[z\\x{01c8}]+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n\n/[z\\x{01c9}]+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n\n/[z\\x{01ca}]+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n\n/[z\\x{01cb}]+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n\n/[z\\x{01cc}]+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n\n/[z\\x{01f1}]+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n\n/[z\\x{01f2}]+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n\n/[z\\x{01f3}]+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n\n/[z\\x{0345}]+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n\n/[z\\x{0399}]+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n\n/[z\\x{03b9}]+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n\n/[z\\x{1fbe}]+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n\n/[z\\x{0392}]+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n\n/[z\\x{03b2}]+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n\n/[z\\x{03d0}]+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n\n/[z\\x{0395}]+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n\n/[z\\x{03b5}]+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n\n/[z\\x{03f5}]+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n\n/[z\\x{0398}]+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n\n/[z\\x{03b8}]+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n\n/[z\\x{03d1}]+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n\n/[z\\x{03f4}]+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n\n/[z\\x{039a}]+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n\n/[z\\x{03ba}]+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n\n/[z\\x{03f0}]+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n\n/[z\\x{03a0}]+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n\n/[z\\x{03c0}]+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n\n/[z\\x{03d6}]+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n\n/[z\\x{03a1}]+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n\n/[z\\x{03c1}]+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n\n/[z\\x{03f1}]+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n\n/[z\\x{03a3}]+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n\n/[z\\x{03c2}]+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n\n/[z\\x{03c3}]+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n\n/[z\\x{03a6}]+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n\n/[z\\x{03c6}]+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n\n/[z\\x{03d5}]+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n\n/[z\\x{03c9}]+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n\n/[z\\x{03a9}]+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n\n/[z\\x{2126}]+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n\n/[z\\x{1e60}]+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n\n/[z\\x{1e61}]+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n\n/[z\\x{1e9b}]+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n\n# Perl 5.12.4 gets these wrong, but 5.15.3 is OK\n\n/[z\\x{004b}]+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n\n/[z\\x{006b}]+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n\n/[z\\x{212a}]+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n\n/[z\\x{0053}]+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n\n/[z\\x{0073}]+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n\n/[z\\x{017f}]+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n\n/^[a-z\\x{500}-\\x{1000}]{3,}[a-h]|x/utf\n    ab\\x{600}ijklmh\n    ab\\x{600}hijklm\n\\= Expect no match\n    ab\\x{600}ijklm\n\n/^[a-z\\x{500}-\\x{1000}]{4,7}[a-h]|x/utf\n    ab\\x{600}\\x{700}ijkh\n    ab\\x{600}\\x{700}hijkl\n\\= Expect no match\n    ab\\x{600}\\x{700}ijklh\n    ab\\x{600}h\\x{700}ijklmh\n\n/([a-z\\x{1000}\\x{2000}]{1,2}?u)+$/utf\n    \\x{1000}uu\\x{2000}u\n    \\x{1001}uuuu\n    \\x{2001}uuuuu\n    uuuu\\x{1fff}#u#\\x{2000}\\x{1000}u\\x{2000}u\n\\= Expect no match\n    abuabuabuabu!\n    uuuuuuuuuuuu#\n\n# --------------------------------------\n\n/(ΣΆΜΟΣ) \\1/i,utf\n    ΣΆΜΟΣ ΣΆΜΟΣ\n    ΣΆΜΟΣ σάμος\n    σάμος σάμος\n    σάμος σάμοσ\n    σάμος ΣΆΜΟΣ\n\n/(σάμος) \\1/i,utf\n    ΣΆΜΟΣ ΣΆΜΟΣ\n    ΣΆΜΟΣ σάμος\n    σάμος σάμος\n    σάμος σάμοσ\n    σάμος ΣΆΜΟΣ\n\n/(ΣΆΜΟΣ) \\1*/i,utf\n    ΣΆΜΟΣ\\x20\n    ΣΆΜΟΣ ΣΆΜΟΣσάμοςσάμος\n\n# Perl matches these\n\n/\\x{00b5}+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n\n/\\x{039c}+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n\n/\\x{03bc}+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n\n\n/\\x{00c5}+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n\n/\\x{00e5}+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n\n/\\x{212b}+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n\n\n/\\x{01c4}+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n\n/\\x{01c5}+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n\n/\\x{01c6}+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n\n\n/\\x{01c7}+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n\n/\\x{01c8}+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n\n/\\x{01c9}+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n\n\n/\\x{01ca}+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n\n/\\x{01cb}+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n\n/\\x{01cc}+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n\n\n/\\x{01f1}+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n\n/\\x{01f2}+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n\n/\\x{01f3}+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n\n\n/\\x{0345}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n\n/\\x{0399}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n\n/\\x{03b9}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n\n/\\x{1fbe}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n\n\n/\\x{0392}+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n\n/\\x{03b2}+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n\n/\\x{03d0}+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n\n\n/\\x{0395}+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n\n/\\x{03b5}+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n\n/\\x{03f5}+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n\n\n/\\x{0398}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n\n/\\x{03b8}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n\n/\\x{03d1}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n\n/\\x{03f4}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n\n\n/\\x{039a}+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n\n/\\x{03ba}+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n\n/\\x{03f0}+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n\n\n/\\x{03a0}+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n\n/\\x{03c0}+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n\n/\\x{03d6}+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n\n\n/\\x{03a1}+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n\n/\\x{03c1}+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n\n/\\x{03f1}+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n\n\n/\\x{03a3}+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n\n/\\x{03c2}+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n\n/\\x{03c3}+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n\n\n/\\x{03a6}+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n\n/\\x{03c6}+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n\n/\\x{03d5}+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n\n\n/\\x{03c9}+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n\n/\\x{03a9}+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n\n/\\x{2126}+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n\n\n/\\x{1e60}+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n\n/\\x{1e61}+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n\n/\\x{1e9b}+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n\n\n/\\x{1e9e}+/i,utf\n    \\x{1e9e}\\x{00df}\n\n/\\x{00df}+/i,utf\n    \\x{1e9e}\\x{00df}\n\n\n/\\x{1f88}+/i,utf\n    \\x{1f88}\\x{1f80}\n\n/\\x{1f80}+/i,utf\n    \\x{1f88}\\x{1f80}\n\n# Perl 5.12.4 gets these wrong, but 5.15.3 is OK\n\n/\\x{004b}+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n\n/\\x{006b}+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n\n/\\x{212a}+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n\n\n/\\x{0053}+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n\n/\\x{0073}+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n\n/\\x{017f}+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n\n/^\\p{Any}*\\d{4}/utf\n    1234\n\\= Expect no match\n    123\n\n/^\\X*\\w{4}/utf\n    1234\n\\= Expect no match\n    123\n\n/^A\\s+Z/utf,ucp\n    A\\x{2005}Z\n    A\\x{85}\\x{2005}Z\n\n/^A[\\s]+Z/utf,ucp\n    A\\x{2005}Z\n    A\\x{85}\\x{2005}Z\n\n/^[[:graph:]]+$/utf,ucp\n    Letter:ABC\n    Mark:\\x{300}\\x{1d172}\\x{1d17b}\n    Number:9\\x{660}\n    Punctuation:\\x{66a},;\n    Symbol:\\x{6de}<>\\x{fffc}\n    Cf-property:\\x{ad}\\x{600}\\x{601}\\x{602}\\x{603}\\x{604}\\x{6dd}\\x{70f}\n    \\x{200b}\\x{200c}\\x{200d}\\x{200e}\\x{200f}\n    \\x{202a}\\x{202b}\\x{202c}\\x{202d}\\x{202e}\n    \\x{2060}\\x{2061}\\x{2062}\\x{2063}\\x{2064}\n    \\x{206a}\\x{206b}\\x{206c}\\x{206d}\\x{206e}\\x{206f}\n    \\x{feff}\n    \\x{fff9}\\x{fffa}\\x{fffb}\n    \\x{110bd}\n    \\x{1d173}\\x{1d174}\\x{1d175}\\x{1d176}\\x{1d177}\\x{1d178}\\x{1d179}\\x{1d17a}\n    \\x{e0001}\n    \\x{e0020}\\x{e0030}\\x{e0040}\\x{e0050}\\x{e0060}\\x{e0070}\\x{e007f}\n\\= Expect no match\n    \\x{09}\n    \\x{0a}\n    \\x{1D}\n    \\x{20}\n    \\x{85}\n    \\x{a0}\n    \\x{1680}\n    \\x{2028}\n    \\x{2029}\n    \\x{202f}\n    \\x{2065}\n    \\x{3000}\n    \\x{e0002}\n    \\x{e001f}\n    \\x{e0080}\n\n/^[[:print:]]+$/utf,ucp\n    Space: \\x{a0}\n    \\x{1680}\\x{2000}\\x{2001}\\x{2002}\\x{2003}\\x{2004}\\x{2005}\n    \\x{2006}\\x{2007}\\x{2008}\\x{2009}\\x{200a}\n    \\x{202f}\\x{205f}\n    \\x{3000}\n    Letter:ABC\n    Mark:\\x{300}\\x{1d172}\\x{1d17b}\n    Number:9\\x{660}\n    Punctuation:\\x{66a},;\n    Symbol:\\x{6de}<>\\x{fffc}\n    Cf-property:\\x{ad}\\x{600}\\x{601}\\x{602}\\x{603}\\x{604}\\x{6dd}\\x{70f}\n    \\x{200b}\\x{200c}\\x{200d}\\x{200e}\\x{200f}\n    \\x{202a}\\x{202b}\\x{202c}\\x{202d}\\x{202e}\n    \\x{202f}\n    \\x{2060}\\x{2061}\\x{2062}\\x{2063}\\x{2064}\n    \\x{206a}\\x{206b}\\x{206c}\\x{206d}\\x{206e}\\x{206f}\n    \\x{feff}\n    \\x{fff9}\\x{fffa}\\x{fffb}\n    \\x{110bd}\n    \\x{1d173}\\x{1d174}\\x{1d175}\\x{1d176}\\x{1d177}\\x{1d178}\\x{1d179}\\x{1d17a}\n    \\x{e0001}\n    \\x{e0020}\\x{e0030}\\x{e0040}\\x{e0050}\\x{e0060}\\x{e0070}\\x{e007f}\n\\= Expect no match\n    \\x{09}\n    \\x{1D}\n    \\x{85}\n    \\x{2028}\n    \\x{2029}\n    \\x{2065}\n    \\x{e0002}\n    \\x{e001f}\n    \\x{e0080}\n\n/^[[:punct:]]+$/utf,ucp\n    \\$+<=>^`|~\n    !\\\"#%&'()*,-./:;?@[\\\\]_{}\n    \\x{a1}\\x{a7}\n    \\x{37e}\n\\= Expect no match\n    abcde\n\n/^[[:^graph:]]+$/utf,ucp\n    \\x{09}\\x{0a}\\x{1D}\\x{20}\\x{85}\\x{a0}\\x{1680}\n    \\x{2028}\\x{2029}\\x{202f}\\x{2065}\n    \\x{3000}\\x{e0002}\\x{e001f}\\x{e0080}\n\\= Expect no match\n    Letter:ABC\n    Mark:\\x{300}\\x{1d172}\\x{1d17b}\n    Number:9\\x{660}\n    Punctuation:\\x{66a},;\n    Symbol:\\x{6de}<>\\x{fffc}\n    Cf-property:\\x{ad}\\x{600}\\x{601}\\x{602}\\x{603}\\x{604}\\x{6dd}\\x{70f}\n    \\x{200b}\\x{200c}\\x{200d}\\x{200e}\\x{200f}\n    \\x{202a}\\x{202b}\\x{202c}\\x{202d}\\x{202e}\n    \\x{2060}\\x{2061}\\x{2062}\\x{2063}\\x{2064}\n    \\x{206a}\\x{206b}\\x{206c}\\x{206d}\\x{206e}\\x{206f}\n    \\x{feff}\n    \\x{fff9}\\x{fffa}\\x{fffb}\n    \\x{110bd}\n    \\x{1d173}\\x{1d174}\\x{1d175}\\x{1d176}\\x{1d177}\\x{1d178}\\x{1d179}\\x{1d17a}\n    \\x{e0001}\n    \\x{e0020}\\x{e0030}\\x{e0040}\\x{e0050}\\x{e0060}\\x{e0070}\\x{e007f}\n\n/^[[:^print:]]+$/utf,ucp\n    \\x{09}\\x{1D}\\x{85}\\x{2028}\\x{2029}\\x{2065}\n    \\x{e0002}\\x{e001f}\\x{e0080}\n\\= Expect no match\n    Space: \\x{a0}\n    \\x{1680}\\x{2000}\\x{2001}\\x{2002}\\x{2003}\\x{2004}\\x{2005}\n    \\x{2006}\\x{2007}\\x{2008}\\x{2009}\\x{200a}\n    \\x{202f}\\x{205f}\n    \\x{3000}\n    Letter:ABC\n    Mark:\\x{300}\\x{1d172}\\x{1d17b}\n    Number:9\\x{660}\n    Punctuation:\\x{66a},;\n    Symbol:\\x{6de}<>\\x{fffc}\n    Cf-property:\\x{ad}\\x{600}\\x{601}\\x{602}\\x{603}\\x{604}\\x{6dd}\\x{70f}\n    \\x{200b}\\x{200c}\\x{200d}\\x{200e}\\x{200f}\n    \\x{202a}\\x{202b}\\x{202c}\\x{202d}\\x{202e}\n    \\x{202f}\n    \\x{2060}\\x{2061}\\x{2062}\\x{2063}\\x{2064}\n    \\x{206a}\\x{206b}\\x{206c}\\x{206d}\\x{206e}\\x{206f}\n    \\x{feff}\n    \\x{fff9}\\x{fffa}\\x{fffb}\n    \\x{110bd}\n    \\x{1d173}\\x{1d174}\\x{1d175}\\x{1d176}\\x{1d177}\\x{1d178}\\x{1d179}\\x{1d17a}\n    \\x{e0001}\n    \\x{e0020}\\x{e0030}\\x{e0040}\\x{e0050}\\x{e0060}\\x{e0070}\\x{e007f}\n\n/^[[:^punct:]]+$/utf,ucp\n    abcde\n\\= Expect no match\n    \\$+<=>^`|~\n    !\\\"#%&'()*,-./:;?@[\\\\]_{}\n    \\x{a1}\\x{a7}\n    \\x{37e}\n\n/[RST]+/i,utf,ucp\n    Ss\\x{17f}\n\n/[R-T]+/i,utf,ucp\n    Ss\\x{17f}\n\n/[q-u]+/i,utf,ucp\n    Ss\\x{17f}\n\n/^s?c/im,utf\n    scat\n\n# The next four tests are for repeated caseless back references when the\n# code unit length of the matched text is different to that of the original\n# group in the UTF-8 case.\n\n/^(\\x{23a})\\1*(.)/i,utf\n    \\x{23a}\\x{23a}\\x{23a}\\x{23a}\n    \\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n    \\x{23a}\\x{23a}\\x{2c65}\\x{23a}\n\n/^(\\x{23a})\\1*(..)/i,utf\n    \\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n    \\x{23a}\\x{23a}\\x{2c65}\\x{23a}\n\n/^(\\x{23a})\\1*(...)/i,utf\n    \\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n    \\x{23a}\\x{23a}\\x{2c65}\\x{23a}\n\n/^(\\x{23a})\\1*(....)/i,utf\n\\= Expect no match\n    \\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n    \\x{23a}\\x{23a}\\x{2c65}\\x{23a}\n\n/[A-`]/i,utf\n    abcdefghijklmno\n\n/[\\S\\V\\H]/utf\n\n/[^\\p{Any}]*+x/utf\n    x\n\n/[[:punct:]]/utf,ucp\n    \\x{b4}\n\n/[[:^ascii:]]/utf,ucp\n    \\x{100}\n    \\x{200}\n    \\x{300}\n    \\x{37e}\n\\= Expect no match\n    aa\n    99\n\n/[[:^ascii:]\\w]/utf,ucp\n    aa\n    99\n    gg\n    \\x{100}\n    \\x{200}\n    \\x{300}\n    \\x{37e}\n\n/[\\w[:^ascii:]]/utf,ucp\n    aa\n    99\n    gg\n    \\x{100}\n    \\x{200}\n    \\x{300}\n    \\x{37e}\n\n/[^[:ascii:]\\W]/utf,ucp\n    \\x{100}\n    \\x{200}\n\\= Expect no match\n    aa\n    99\n    gg\n    \\x{37e}\n\n/[^[:^ascii:]\\d]/utf,ucp\n    a\n    ~\n    \\a\n    \\x{7f}\n\\= Expect no match\n    0\n    \\x{389}\n    \\x{20ac}\n\n/(?=.*b)\\pL/\n    11bb\n\n/(?(?=.*b)(?=.*b)\\pL|.*c)/\n    11bb\n\n/^\\x{123}+?$/utf,no_auto_possess\n    \\x{123}\\x{123}\\x{123}\n\n/^\\x{123}+?$/i,utf,no_auto_possess\n    \\x{123}\\x{122}\\x{123}\n\\= Expect no match\n    \\x{123}\\x{124}\\x{123}\n\n/\\N{U+1234}/utf\n    \\x{1234}\n\n/[\\N{U+1234}]/utf\n    \\x{1234}\n\n/(\\x{1234}) \\1/utf\n    \\N{U+1234} \\o{11064}\n\n# Test the full list of Unicode \"Pattern White Space\" characters that are to\n# be ignored by /x. The pattern lines below may show up oddly in text editors\n# or when listed to the screen. Note that characters such as U+2002, which are\n# matched as space by \\h and \\v are *not* \"Pattern White Space\".\n\n/A‎‏  B/x,utf\n    AB\n\n/A B/x,utf\n    A\\x{2002}B\n\\= Expect no match\n    AB\n\n# -------\n\n/[^\\x{100}-\\x{ffff}]*[\\x80-\\xff]/utf\n    \\x{99}\\x{99}\\x{99}\n\n/[^\\x{100}-\\x{ffff}ABC]*[\\x80-\\xff]/utf\n    \\x{99}\\x{99}\\x{99}\n\n/[^\\x{100}-\\x{ffff}]*[\\x80-\\xff]/i,utf\n    \\x{99}\\x{99}\\x{99}\n\n# Script run tests\n\n/^(*script_run:.{4})/utf\n    abcd                               Latin x4\n    \\x{2e80}\\x{2fa1d}\\x{3041}\\x{30a1}  Han Han Hiragana Katakana\n    \\x{3041}\\x{30a1}\\x{3007}\\x{3007}   Hiragana Katakana Han Han\n    \\x{30a1}\\x{3041}\\x{3007}\\x{3007}   Katakana Hiragana Han Han\n    \\x{1100}\\x{2e80}\\x{2e80}\\x{1101}   Hangul Han Han Hangul\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{3105}   Han Bopomofo Han Bopomofo\n    \\x{02ea}\\x{2e80}\\x{2e80}\\x{3105}   Bopomofo-Sk Han Han Bopomofo\n    \\x{3105}\\x{2e80}\\x{2e80}\\x{3105}   Bopomofo Han Han Bopomofo\n    \\x{0300}cd!                        Inherited Latin Latin Common\n    \\x{0391}12\\x{03a9}                 Greek Common-digits Greek\n    \\x{0400}12\\x{fe2f}                 Cyrillic Common-digits Cyrillic\n    \\x{0531}12\\x{fb17}                 Armenian Common-digits Armenian\n    \\x{0591}12\\x{fb4f}                 Hebrew Common-digits Hebrew\n    \\x{0600}12\\x{1eef1}                Arabic Common-digits Arabic\n    \\x{0600}\\x{0660}\\x{0669}\\x{1eef1}  Arabic Arabic-digits Arabic\n    \\x{0700}12\\x{086a}                 Syriac Common-digits Syriac\n    \\x{1200}12\\x{ab2e}                 Ethiopic Common-digits Ethiopic\n    \\x{1680}12\\x{169c}                 Ogham Common-digits Ogham\n    \\x{3041}12\\x{3041}                 Hiragana Common-digits Hiragana\n    \\x{0980}\\x{09e6}\\x{09e7}\\x{0993}   Bengali Bengali-digits Bengali\n    !cde                               Common Latin Latin Latin\n    A..B                               Latin Common Common Latin\n    0abc                               Ascii-digit Latin Latin Latin\n    1\\x{0700}\\x{0700}\\x{0700}          Ascii-digit Syriac x 3\n    \\x{1A80}\\x{1A80}\\x{1a40}\\x{1a41}   Tai Tham Hora digits, letters\n\\= Expect no match\n    a\\x{370}bcd                        Latin Greek Latin Latin\n    \\x{1100}\\x{02ea}\\x{02ea}\\x{02ea}   Hangul Bopomofo x3\n    \\x{02ea}\\x{02ea}\\x{02ea}\\x{1100}   Bopomofo x3 Hangul\n    \\x{1100}\\x{2e80}\\x{3041}\\x{1101}   Hangul Han Hiragana Hangul\n    \\x{0391}\\x{09e6}\\x{09e7}\\x{03a9}   Greek Bengali digits Greek\n    \\x{0600}7\\x{0669}\\x{1eef1}         Arabic ascii-digit Arabic-digit Arabic\n    \\x{0600}\\x{0669}7\\x{1eef1}         Arabic Arabic-digit ascii-digit Arabic\n    A5\\x{ff19}B                        Latin Common-ascii/notascii-digits Latin\n    \\x{0300}cd\\x{0391}                 Inherited Latin Latin Greek\n    !cd\\x{0391}                        Common Latin Latin Greek\n    \\x{1A80}\\x{1A90}\\x{1a40}\\x{1a41}   Tai Tham Hora digit, Tham digit, letters\n    A\\x{1d7ce}\\x{1d7ff}B               Common fancy-common-2-sets-digits Common\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\n\n/^(*sr:.{4}|..)/utf\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\n\n/^(*atomic_script_run:.{4}|..)/utf\n\\= Expect no match\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\n\n/^(*asr:.*)/utf\n\\= Expect no match\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\n\n/^(?>(*sr:.*))/utf\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\n\n/^(*sr:.*)/utf\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\n    \\x{10fffd}\\x{10fffd}\\x{10fffd}     Private use (Unknown)\n\n/^(*sr:\\x{2e80}*)/utf\n    \\x{2e80}\\x{2e80}\\x{3105}           Han Han Bopomofo\n\n/^(*sr:\\x{2e80}*)\\x{2e80}/utf\n    \\x{2e80}\\x{2e80}\\x{3105}           Han Han Bopomofo\n\n/^(*sr:.*)Test/utf\n    Test script run on an empty string\n\n/^(*sr:(.{2})){2}/utf\n    \\x{0600}7\\x{0669}\\x{1eef1}         Arabic ascii-digit Arabic-digit Arabic\n    \\x{1A80}\\x{1A80}\\x{1a40}\\x{1a41}   Tai Tham Hora digits, letters\n    \\x{1A80}\\x{1a40}\\x{1A90}\\x{1a41}   Tai Tham Hora digit, letter, Tham digit, letter\n\\= Expect no match\n    \\x{1100}\\x{2e80}\\x{3041}\\x{1101}   Hangul Han Hiragana Hangul\n\n/^(*sr:\\S*)/utf\n    \\x{1cf4}\\x{20f0}\\x{900}\\x{11305}   [Dev,Gran,Kan] [Dev,Gran,Lat] Dev Gran\n    \\x{1cf4}\\x{20f0}\\x{11305}\\x{900}   [Dev,Gran,Kan] [Dev,Gran,Lat] Gran Dev\n    \\x{1cf4}\\x{20f0}\\x{900}ABC         [Dev,Gran,Kan] [Dev,Gran,Lat] Dev Lat\n    \\x{1cf4}\\x{20f0}ABC                [Dev,Gran,Kan] [Dev,Gran,Lat] Lat\n    \\x{20f0}ABC                        [Dev,Gran,Lat] Lat\n    XYZ\\x{20f0}ABC                     Lat [Dev,Gran,Lat] Lat\n    \\x{a36}\\x{a33}\\x{900}              [Dev,...] [Dev,...] Dev\n    \\x{3001}\\x{2e80}\\x{3041}\\x{30a1}   [Bopo, Han, etc] Han Hira Kata\n    \\x{3001}\\x{30a1}\\x{2e80}\\x{3041}   [Bopo, Han, etc] Kata Han Hira\n    \\x{3001}\\x{3105}\\x{2e80}\\x{1101}   [Bopo, Han, etc] Bopomofo Han Hangul\n    \\x{3105}\\x{3001}\\x{2e80}\\x{1101}   Bopomofo [Bopo, Han, etc] Han Hangul\n    \\x{3031}\\x{3041}\\x{30a1}\\x{2e80}   [Hira Kata] Hira Kata Han\n    \\x{060c}\\x{06d4}\\x{0600}\\x{10d00}\\x{0700}  [Arab Rohg Syrc Thaa] [Arab Rohg] Arab Rohg Syrc\n    \\x{060c}\\x{06d4}\\x{0700}\\x{0600}\\x{10d00}  [Arab Rohg Syrc Thaa] [Arab Rohg] Syrc Arab Rohg\n    \\x{2e80}\\x{3041}\\x{3001}\\x{3031}\\x{2e80}   Han Hira [Bopo, Han, etc] [Hira Kata] Han\n\n/(?<!)(*sr:)/\n\n/(?<!X(*sr:B)C)/\n\n/(?<=abc(?=X(*sr:BCY)Z)XBCYZ)./\n    abcXBCYZ!\n\n/(?<=abc(?=X(*sr:BXY)CCC)XBXYCCC)./\n   abcXBXYCCC!\n\n/^(*sr:\\S*)/utf\n    \\x{10d00}\\x{10d00}\\x{06d4}     Rohingya Rohingya Arabic-full-stop\n    \\x{06d4}\\x{10d00}\\x{10d00}     Arabic-full-stop Rohingya Rohingya\n    \\x{10d00}\\x{10d00}\\x{0363}     Rohingya Rohingya Inherited-extend-Latin\n    \\x{0363}\\x{10d00}\\x{10d00}     Inherited-extend-Latin Rohingya Rohingya\n    AB\\x{0363}                     Latin Latin Inherited-extend-Latin\n    \\x{0363}AB                     Inherited-extend-Latin Latin Latin\n    AB\\x{1cf7}                     Latin Latin Common-extended-Beng\n    \\x{1cf7}AB                     Common-extend-Beng Latin Latin\n    \\x{1cf7}\\x{0993}               Common-extend-Beng Bengali\n    A\\x{1abe}BC                    Test enclosing mark\n    \\x{0370}\\x{1abe}\\x{0371}       Which can occur with any script (Greek here)\n    \\x{3001}\\x{adf9}\\x{3001}       [.. Hangul ..] Hangul [.. Hangul ..]\n    \\x{3400}\\x{3001}XXX            Han [Han etc.]\n    \\x{3400}\\x{1cd5}               Han [Bengali Devanagari]\n    \\x{ac01}\\x{3400}               Hangul [.. Hangul ..]\n    \\x{ac01}\\x{1cd5}               Hangul [Bengali Devanagari]\n    \\x{102e0}\\x{06d4}\\x{1ee4d}     [Arabic Coptic] [Arab Rohingya] Arabic\n    \\x{102e0}\\x{06d4}\\x{2cc9}      [Arabic Coptic] [Arab Rohingya] Coptic\n    \\x{102e0}\\x{06d4}\\x{10d30}     [Arabic Coptic] [Arab Rohingya] Rohingya\n\n# Test loop breaking for empty string match\n\n/^(*sr:A|)*BCD/utf\n    AABCD\n    ABCD\n    BCD\n\n# The use of (*ACCEPT) breaks script run checking\n\n/^(*sr:.*(*ACCEPT)ZZ)/utf\n    \\x{1100}\\x{2e80}\\x{3041}\\x{1101}   Hangul Han Hiragana Hangul\n\n# -------\n\n# Test group names containing non-ASCII letters and digits\n\n/(?'ABáC'...)\\g{ABáC}/utf\n    abcabcdefg\n\n/(?'XʰABC'...)/utf\n    xyzpq\n\n/(?'XאABC'...)/utf\n    12345\n\n/(?'XᾈABC'...)/utf\n    %^&*(...\n\n/(?'𐨐ABC'...)/utf\n    abcde\n\n/^(?'אABC'...)(?&אABC)(?P=אABC)/utf\n    123123123456\n\n/^(?'אABC'...)(?&אABC)/utf\n    123123123456\n\n/\\X*/\n    \\xF3aaa\\xE4\\xEA\\xEB\\xFEa\n\n/Я/i,utf\n    \\x{42f}\n    \\x{44f}\n\n/(?=Я)/i,utf\n    \\x{42f}\n    \\x{44f}\n\n# -----------------------------------------------------------------------------\n# Tests for bidi control and bidi class properties.\n\n/\\p{ bidi_control }/utf\n    -->\\x{202c}<--\n\n/\\p{bidicontrol}+/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/\\p{bidic}+?/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/\\p{bidi_control}++/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/[\\p{bidi_c}]/utf\n    -->\\x{202c}<--\n\n/[\\p{bidicontrol}]+/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/[\\p{bidicontrol}]+?/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/[\\p{bidicontrol}]++/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/[\\p{bidicontrol}<>]+/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/\\P{bidicontrol}+/g,utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/\\p{^bidicontrol}+/g,utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/\\p{bidi class = al}/utf\n    -->\\x{061D}<--\n\n/\\p{bc = al}+/utf\n    -->\\x{061D}\\x{061e}\\x{061f}<--\n\n/\\p{bidi_class : AL}+?/utf\n    -->\\x{061D}\\x{061e}\\x{061f}<--\n\n/\\p{Bidi_Class : AL}++/utf\n    -->\\x{061D}\\x{061e}\\x{061f}<--\n\n/\\p{b_c = aN}+/utf\n    -->\\x{061D}\\x{0602}\\x{0604}\\x{061f}<--\n\n/\\p{bidi class = B}+/utf\n    -->\\x{0a}\\x{0d}\\x{01c}\\x{01e}\\x{085}\\x{2029}<--\n\n/\\p{bidi class:BN}+/utf\n    -->\\x{0}\\x{08}\\x{200c}\\x{fffe}\\x{dfffe}\\x{10ffff}<--\n\n/\\p{bidiclass:cs}+/utf\n    -->,.\\x{060c}\\x{ff1a}<--\n\n/\\p{bidiclass:En}+/utf\n    -->09\\x{b2}\\x{2074}\\x{1fbf9}<--\n\n/\\p{bidiclass:es}+/utf\n    ==>+-\\x{207a}\\x{ff0d}<==\n\n/\\p{bidiclass:et}+/utf\n    -->#\\{24}%\\x{a2}\\x{A838}\\x{1e2ff}<--\n\n/\\p{bidiclass:FSI}+/utf\n    -->\\x{2068}<--\n\n/\\p{bidi class:L}+/utf\n    -->ABC<--\n\n/\\P{bidi class:L}+/utf\n    -->ABC<--\n\n/\\p{bidi class:LRE}+\\p{bidiclass=lri}*\\p{bidiclass:lro}/utf\n    -->\\x{202a}\\x{2066}\\x{202d}<--\n\n/\\p{bidi class:NSM}+/utf\n    -->\\x{9bc}\\x{a71}\\x{e31}<--\n\n/\\p{bidi class:ON}+/utf\n    -->\\x{21}'()*;@\\x{384}\\x{2039}<=-\n\n/\\p{bidiclass:pdf}\\p{bidiclass:pdi}/utf\n    -->\\x{202c}\\x{2069}<--\n\n/\\p{bidi class:R}+/utf\n    -->\\x{590}\\x{5c6}\\x{200f}\\x{10805}<--\n\n/\\p{bidi class:RLE}+\\p{bidi class:RLI}*\\p{bidi class:RLO}+/utf\n    -->\\x{202b}\\x{2067}\\x{202e}<--\n\n/\\p{bidi class:S}+\\p{bidiclass:WS}+/utf\n    -->\\x{9}\\x{b}\\x{1f}  \\x{c} \\x{2000} \\x{3000}<--\n\n# -----------------------------------------------------------------------------\n\n/[\\p{taml}\\p{sc:ugar}]+/utf\n    \\x{0b82}\\x{10380}\n\n/^[\\p{sc:Arabic}]/utf\n\\= Expect no match\n    \\x{650}\n    \\x{651}  \n    \\x{652}  \n    \\x{653}  \n    \\x{654} \n    \\x{655} \n    \n# -----------------------------------------------------------------------------\n# Tests for newly-added Boolean Properties\n\n/\\p{ahex}\\p{asciihexdigit}/utf\n    >4F<\n\n/\\p{alpha}\\p{alphabetic}/g,utf\n    >AB<>\\x{148}\\x{1234}\n    \n/\\p{ascii}\\p{ascii}/g,utf\n    >AB<>\\x{148}\\x{1234}\n \n/\\p{Bidi_C}\\p{bidicontrol}/g,utf\n    >\\x{202d}\\x{2069}<\n\n/\\p{Bidi_M}\\p{bidimirrored}/g,utf\n    >\\x{202d}\\x{2069}<>\\x{298b}\\x{bb}<\n    \n/\\p{cased}\\p{cased}/g,utf\n    >AN<>\\x{149}\\x{120}<\n \n/\\p{caseignorable}\\p{ci}/g,utf\n    >AN<>\\x{60}\\x{859}<\n \n/\\p{changeswhencasefolded}\\p{cwcf}/g,utf\n    >AN<>\\x{149}\\x{120}<\n \n/\\p{changeswhencasemapped}\\p{cwcm}/g,utf\n    >AN<>\\x{149}\\x{120}<\n \n/\\p{changeswhenlowercased}\\p{cwl}/g,utf\n    >AN<>\\x{149}\\x{120}<>yz<\n\n/\\p{changeswhenuppercased}\\p{cwu}/g,utf\n    >AN<>\\x{149}\\x{120}<>yz<\n\n/\\p{changeswhentitlecased}\\p{cwt}/g,utf\n    >AN<>\\x{149}\\x{120}<>yz<\n\n/\\p{dash}\\p{dash}/g,utf\n    >\\x{2d}\\x{1400}<>yz<\n    \n/\\p{defaultignorablecodepoint}\\p{di}/g,utf\n    >AN<>\\x{ad}\\x{e0fff}<>yz<\n \n/\\p{deprecated}\\p{dep}/g,utf\n    >AN<>\\x{149}\\x{e0001}<>yz<\n \n/\\p{diacritic}\\p{dia}/g,utf\n    >AN<>\\x{f84}\\x{5e}<>yz<\n\n/\\p{emojicomponent}\\p{ecomp}/g,utf\n    >AN<>\\x{200d}\\x{e007f}<>yz<\n\n/\\p{emojimodifier}\\p{emod}/g,utf\n    >AN<>\\x{1f3fb}\\x{1f3ff}<>yz<\n    \n/\\p{emojipresentation}\\p{epres}/g,utf\n    >AN<>\\x{2653}\\x{1f6d2}<>yz<\n \n/\\p{extender}\\p{ext}/g,utf\n    >AN<>\\x{1e944}\\x{b7}<>yz<\n\n/\\p{extendedpictographic}\\p{extpict}/g,utf\n    >AN<>\\x{26cf}\\x{ae}<>yz<\n    \n/\\p{graphemebase}\\p{grbase}/g,utf\n    >AN<>\\x{10f}\\x{60}<>yz<\n\n/\\p{graphemeextend}\\p{grext}/g,utf\n    >AN<>\\x{300}\\x{b44}<>yz<\n\n/\\p{hexdigit}\\p{hex}/g,utf\n    >AF23<>\\x{ff46}\\x{ff10}<>yz<\n \n/\\p{idcontinue}\\p{idc}/g,utf\n    >AF23<>\\x{146}\\x{7a}<>yz<\n\n/\\p{ideographic}\\p{ideo}/g,utf\n    >AF23<>\\x{30000}\\x{3006}<>yz<\n\n/\\p{idstart}\\p{ids}/g,utf\n    >AF23<>\\x{146}\\x{7a}<>yz<\n\n/\\p{idsbinaryoperator}\\p{idsb}/g,utf\n    >AF23<>\\x{2ff0}\\x{2ffb}<>yz<\\x{2ff2}\\x{2ff1}\n\n/\\p{idstrinaryoperator}\\p{idst}/g,utf\n    >AF23<>\\x{2ff2}\\x{2ff3}<>yz<\n\n/\\p{Join Control}\\p{joinc}/g,utf\n    >AF23<>\\x{200c}\\x{200d}<>yz<\n\n/\\p{logical_order_exception}\\p{loe}/g,utf\n    >AF23<>\\x{e40}\\x{aabc}<>yz<\n\n/\\p{Lowercase}\\p{lower}/g,utf\n    >AF23<>\\x{146}\\x{7a}<>yz<\n\n/\\p{math}\\p{math}/g,utf\n    >AF23<>\\x{2215}\\x{2b}<>yz<\n    \n/\\p{Non Character Code Point}\\p{nchar}/g,utf\n    >AF23<>\\x{10ffff}\\x{fdd0}<>yz<\n \n/\\p{patternsyntax}\\p{patsyn}/g,utf\n    >AF23<>\\x{21cd}\\x{21}<>yz<\n\n/\\p{patternwhitespace}\\p{patws}/g,utf\n    >AF23<>\\x{2029}\\x{85}<>yz<\n\n/\\p{prependedconcatenationmark}\\p{pcm}/g,utf\n    >AF23<>\\x{600}\\x{110cd}<>yz<\n\n/\\p{quotationmark}\\p{qmark}/g,utf\n    >AF23<>\\x{ff63}\\x{22}<>yz<\n\n/\\p{radical}\\p{radical}/g,utf\n    >AF23<>\\x{2fd5}\\x{2e80}<>yz<\n\n/\\p{regionalindicator}\\p{ri}/g,utf\n    >AF23<>\\x{1f1e6}\\x{1f1ff}<>yz<\n\n/=\\p{whitespace}\\p{space}\\p{wspace}=/g,utf\n    >AF23<=\\x{d}\\x{1680}\\x{3000}=>yz<\n\n/\\p{sentenceterminal}\\p{sterm}/g,utf\n    >AF23<>\\x{1da88}\\x{2e}<>yz<\n\n/\\p{terminalpunctuation}\\p{term}/g,utf\n    >AF23<>\\x{1da88}\\x{2e}<>yz<\n\n/\\p{unified ideograph}\\p{uideo}/g,utf\n    >AF23<>\\x{30000}\\x{3400}<>yz<\n\n/\\p{UPPERcase}\\p{upper}/g,utf\n    >AF23<>\\x{146}\\x{7a}<>yz<\n\n/\\p{variationselector}\\p{vs}/g,utf\n    >AF23<>\\x{180b}\\x{e01ef}<>yz<\n\n/\\p{xidcontinue}\\p{xidc}/g,utf\n    >AF23<>\\x{146}\\x{30}<>yz<\n\n# -----------------------------------------------------------------------------\n# Variable-length lookbehinds.\n\n/(?<=áb?c).../g,utf\n    ábcdèfgácxyz\n\n/(?<=PQR|áb?c).../g,utf\n    ábcdèfgácxyzPQR123\n\n/(?<=áb?c|PQR).../g,utf\n    ábcdèfgácxyzPQR123\n\n/(?<=PQ|áb?c).../g,utf\n    ábcdèfgácxyzPQR123\n\n/(?<=áb?c|PQ).../g,utf\n    ábcdèfgácxyzPQR123\n\n/(?<=á(b?c|d?è?è)f)X./g,utf\n     ácfX1zzzáèfX2zzzádèèfX3zzzX4zzz\n\n/(?<!á(b?c|d?è?è)f)X./g,utf\n     ácfX1zzzáèfX2zzzádèèfX3zzzX4zzz\n     \n/(?(?<=áb?c)d|è)/utf\n    ábcdèfg\n    ácdèfg\n    áxdèfg\n    \n/(?<=\\d{2,3}|áBC)./utf\n    áBCD   \n\n/(?<=á(b?c){3}d)X/utf\n   ZXácbccdXYZ\n   \n/(?<=á(b?c){0}d)X/utf\n   ZXádXYZ\n \n/(?<=á?(b?c){0}d)X./utf\n   ZXádXYZ\n \n# -------------------------------------------------------------------------- \n\n/\\N{ U+1234 }/utf\n    \\x{1234}\n\n/\\o{ 1234 }/utf\n    x\\o{1234}y\n\n/\\x{ 1234 }/utf\n    x\\x{1234}y\n\n/\\p{ L }/\n    23AB56\n\n/\\w+/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n\n/[\\w]+/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n\n/[[:word:]]+/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n\n/[[:xdigit:]]+/utf,ucp\n    --123ef\\x{ff10}\\x{ff19}\\x{ff21}\\x{ff26}\\x{ff1a}\n\n/\\b.+?\\b/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n\n/caf\\B.+?\\B/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n\n# -------------------------------------------------------------------------- \n# Case-independent matching property tests added after changing PCRE2 to be\n# compatible with Perl. All three cases (upper, lower, title) conflate.\n\n/\\p{Lu}\\p{Ll}\\P{Lu}\\P{Ll}/utf\n    >AbbD<\n    >Abb\\x{01c5}<\n\\= Expect no match\n    >aBBd<\n    >aB!!<\n\n/\\p{Lu}\\p{Ll}\\P{Lu}\\P{Ll}/i,utf\n    >aB!!<\n    >\\x{01c5}B!!<\n\\= Expect no match\n    >AbbD<\n    >aBBd<\n    >Abb\\x{01c5}<\n\n/[.\\p{Lu}][.\\p{Ll}][.\\P{Lu}][.\\P{Ll}]/i,utf\n    >aB!!<\n\\= Expect no match\n    >AbbD<\n    >aBBd<\n    >Abb\\x{01c5}<\n\n/[\\p{Lt}\\x{36b}][\\P{Lt}\\x{10a0}]/i,utf\n    >A!<\n    >\\x{3c9}\\x{58d}<\n    >\\x{413}\\x{940}<\n\\= Expect no match\n    \\x{3c9}\\x{3c9}\n    \\x{58d}\\x{58d}\n    \\x{413}\\x{413}\n    \\x{940}\\x{940}\n\n/^\\p{Lt}+/i,utf\n    \\x{1c5}AB\n\n# -------------------------------------------------------------------------- \n\n/\\p{  ^ L u }/\n    AbCd\n\n# hex\n\n/c3 b1/hex,utf\n    \\N{U+00F1}\n\n/[^\\P{Lu}1]/i,utf,ucp\n    a\n    A\n    \\x{3a3}\n    \\x{3c3}\n\\= Expect no match\n    1\n    2\n\n/[^\\P{Lu}1]/utf,ucp\n    A\n    \\x{3a3}\n\\= Expect no match\n    1\n    2\n    a\n    \\x{3c3}\n\n/[\\P{Lu}1]/i,utf,ucp\n    1\n    2\n\\= Expect no match\n    a\n    A\n    \\x{3a3}\n    \\x{3c3}\n\n/[\\P{Lu}1]/utf,ucp\n    1\n    2\n    a\n    \\x{3c3}\n\\= Expect no match\n    A\n    \\x{3a3}\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n/(?[\\p{L} - \\p{Lu}])/\n    a\n\\= Expect no match\n    A\n    1\n\n/(?[\\p{L} & \\p{Lu}])/\n    A\n\\= Expect no match\n    a\n    1\n\n/(?[[\\p{Lu}z] ^ [\\p{Ll}G]])/\n    A\n    p\n\\= Expect no match\n    G\n    z\n    1\n\n/(?[\\p{Ll} | \\p{Nd}])/\n    a\n    1\n\\= Expect no match\n    A\n\n/(?[\\p{Ll} + [\\p{Nd}]])/\n    a\n    1\n\\= Expect no match\n    A\n\n/(?[ ![\\p{Nd}z] ])/\n    _\n    Z\n\\= Expect no match\n    1\n    z\n\n/(?[ \\P{Nd} + [2] ])/\n    _\n    Z\n    2\n\\= Expect no match\n    1\n    3\n\n/(?[ ![\\P{Nd}] ])/\n    1\n    2\n\\= Expect no match\n    _\n    z\n\n# caseless tests\n\n/(?[ \\p{Lu} ^ \\p{Ll} ])/\n    a\n    A\n\\= Expect no match\n    _\n    1\n\n/(?[ [\\p{Lu}1] ^ \\p{Ll} ])/i\n    1\n\\= Expect no match\n    a\n    A\n    _\n\n/(?[ [\\p{Lu}1] & [\\p{Ll}1] ])/\n    1\n\\= Expect no match\n    a\n    A\n    _\n    2\n\n/(?[ [\\p{Lu}1] & [\\p{Ll}1] ])/i\n    a\n    A\n    1\n\\= Expect no match\n    _\n    2\n\n/(?[ \\p{Lu} + \\p{Ll} & [a-z] ])/utf\n    \\x{0411}\n    a\n    A\n\\= Expect no match\n    \\x{0431}\n\n/(?[ (\\p{Lu} + \\p{Ll}) & [a-z] ])/utf\n    a\n\\= Expect no match\n    \\x{0411}\n    \\x{0431}\n    A\n\n/(?[ [a-z] & \\p{Lu} + \\p{Ll} ])/utf\n    a\n    \\x{0431}\n\\= Expect no match\n    \\x{0411}\n    A\n\n/(?[ [a-z] & (\\p{Lu} + \\p{Ll}) ])/utf\n    a\n\\= Expect no match\n    \\x{0431}\n    \\x{0411}\n    A\n\n# --------------\n\n# End of testinput4\n"
  },
  {
    "path": "testdata/testinput5",
    "content": "# This set of tests checks the API, internals, and non-Perl stuff for UTF\n# support, including Unicode properties. However, tests that give different\n# results in 8-bit, 16-bit, and 32-bit modes are excluded (see tests 10 and\n# 12).\n\n#newline_default lf any anycrlf\n\n# PCRE2 and Perl disagree about the characteristics of certain Unicode\n# characters. For example, 061C was considered by Perl to be Arabic, though\n# it was not listed as such in the Unicode Scripts.txt file for Unicode 8.\n# However, it *is* in that file for Unicode 10, but when I came to re-check,\n# Perl had changed in the meantime, with 5.026 not recognizing it as Arabic.\n\n# 2066-2069 are graphic and printable according to Perl, though they are\n# actually \"isolate\" control characters. That is why the following tests are\n# here rather than in test 4.\n\n/^[\\p{Arabic}]/utf\n    \\x{061c}\n\n/^[[:graph:]]+$/utf,ucp\n\\= Expect no match\n    \\x{61c}\n    \\x{2066}\n    \\x{2067}\n    \\x{2068}\n    \\x{2069}\n\n/^[[:print:]]+$/utf,ucp\n\\= Expect no match\n    \\x{61c}\n    \\x{2066}\n    \\x{2067}\n    \\x{2068}\n    \\x{2069}\n\n/^[[:^graph:]]+$/utf,ucp\n    \\x{09}\\x{0a}\\x{1D}\\x{20}\\x{85}\\x{a0}\\x{61c}\\x{1680}\n    \\x{2028}\\x{2029}\\x{202f}\\x{2065}\\x{2066}\\x{2067}\\x{2068}\\x{2069}\n\n/^[[:^print:]]+$/utf,ucp\n    \\x{09}\\x{1D}\\x{85}\\x{61c}\\x{2028}\\x{2029}\\x{2065}\\x{2066}\\x{2067}\n    \\x{2068}\\x{2069}\n\n# Perl does not consider U+180e to be a space character. It is true that it\n# does not appear in the Unicode PropList.txt file as such, but in many other\n# sources it is listed as a space, and has been treated as such in PCRE for\n# a long time.\n\n/^>[[:blank:]]*/utf,ucp\n    >\\x{20}\\x{a0}\\x{1680}\\x{180e}\\x{2000}\\x{202f}\\x{9}\\x{b}\\x{2028}\n\n/^A\\s+Z/utf,ucp\n    A\\x{85}\\x{180e}\\x{2005}Z\n\n/^A[\\s]+Z/utf,ucp\n    A\\x{2005}Z\n    A\\x{85}\\x{2005}Z\n\n/^[[:graph:]]+$/utf,ucp\n\\= Expect no match\n    \\x{180e}\n\n/^[[:print:]]+$/utf,ucp\n    \\x{180e}\n\n/^[[:^graph:]]+$/utf,ucp\n    \\x{09}\\x{0a}\\x{1D}\\x{20}\\x{85}\\x{a0}\\x{61c}\\x{1680}\\x{180e}\n\n/^[[:^print:]]+$/utf,ucp\n\\= Expect no match\n    \\x{180e}\n\n# End of U+180E tests.\n\n# ---------------------------------------------------------------------\n\n# Use no_start_optimize because the first code unit is different in 8-bit from\n# the wider modes.\n/\\65535/IB,utf,no_start_optimize\n\n/\\65536/IB,utf,no_start_optimize\n\n/\\x{110000}/IB,utf\n\n/\\o{4200000}/IB,utf\n\n/\\x{ffffffff}/utf\n\n/\\o{37777777777}/utf\n\n/\\x{100000000}/utf\n\n/\\o{77777777777}/utf\n\n/\\x{d800}/utf\n\n/\\o{154000}/utf\n\n/\\x{dfff}/utf\n\n/\\o{157777}/utf\n\n/\\x{d7ff}/utf\n\n/\\o{153777}/utf\n\n/\\x{e000}/utf\n\n/\\o{170000}/utf\n\n/^\\x{100}a\\x{1234}/utf\n    \\x{100}a\\x{1234}bcd\n\n/\\x{0041}\\x{2262}\\x{0391}\\x{002e}/IB,utf\n    \\x{0041}\\x{2262}\\x{0391}\\x{002e}\n\n/.{3,5}X/IB,utf\n    \\x{212ab}\\x{212ab}\\x{212ab}\\x{861}X\n\n/.{3,5}?/IB,utf\n    \\x{212ab}\\x{212ab}\\x{212ab}\\x{861}\n\n/^[ab]/IB,utf\n    bar\n\\= Expect no match\n    c\n    \\x{ff}\n    \\x{100}\n\n/\\x{100}*(\\d+|\"(?1)\")/utf\n    1234\n    \"1234\"\n    \\x{100}1234\n    \"\\x{100}1234\"\n    \\x{100}\\x{100}12ab\n    \\x{100}\\x{100}\"12\"\n\\= Expect no match\n    \\x{100}\\x{100}abcd\n\n/\\x{100}*/IB,utf\n\n/a\\x{100}*/IB,utf\n\n/ab\\x{100}*/IB,utf\n\n/[\\x{200}-\\x{100}]/utf\n\n/[Ā-Ą]/utf\n    \\x{100}\n    \\x{104}\n\\= Expect no match\n    \\x{105}\n    \\x{ff}\n\n/[\\xFF]/IB\n    >\\xff<\n\n/[^\\xFF]/IB\n\n/[Ä-Ü]/utf\n    Ö # Matches without Study\n    \\x{d6}\n\n/[Ä-Ü]/utf\n    Ö <-- Same with Study\n    \\x{d6}\n\n/[\\x{c4}-\\x{dc}]/utf\n    Ö # Matches without Study\n    \\x{d6}\n\n/[\\x{c4}-\\x{dc}]/utf\n    Ö <-- Same with Study\n    \\x{d6}\n\n/[^\\x{100}]abc(xyz(?1))/IB,utf\n\n/(\\x{100}(b(?2)c))?/IB,utf\n\n/(\\x{100}(b(?2)c)){0,2}/IB,utf\n\n/(\\x{100}(b(?1)c))?/IB,utf\n\n/(\\x{100}(b(?1)c)){0,2}/IB,utf\n\n/\\W/utf\n    A.B\n    A\\x{100}B\n\n/\\w/utf\n    \\x{100}X\n\n# Use no_start_optimize because the first code unit is different in 8-bit from\n# the wider modes.\n\n/^\\ሴ/IB,utf,no_start_optimize\n\n/()()()()()()()()()()\n ()()()()()()()()()()\n ()()()()()()()()()()\n ()()()()()()()()()()\n A (x) (?41) B/x,utf\n    AxxB\n\n/^[\\x{100}\\E-\\Q\\E\\x{150}]/B,utf\n\n/^[\\QĀ\\E-\\QŐ\\E]/B,utf\n\n/^abc./gmx,newline=any,utf\n    abc1 \\x0aabc2 \\x0babc3xx \\x0cabc4 \\x0dabc5xx \\x0d\\x0aabc6 \\x{0085}abc7 \\x{2028}abc8 \\x{2029}abc9 JUNK\n\n/abc.$/gmx,newline=any,utf\n    abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x{0085} abc7\\x{2028} abc8\\x{2029} abc9\n\n/^a\\Rb/bsr=unicode,utf\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x0bb\n    a\\x0cb\n    a\\x{85}b\n    a\\x{2028}b\n    a\\x{2029}b\n\\= Expect no match\n    a\\n\\rb\n\n/^a\\R*b/bsr=unicode,utf\n    ab\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x0bb\n    a\\x0c\\x{2028}\\x{2029}b\n    a\\x{85}b\n    a\\n\\rb\n    a\\n\\r\\x{85}\\x0cb\n\n/^a\\R+b/bsr=unicode,utf\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x0bb\n    a\\x0c\\x{2028}\\x{2029}b\n    a\\x{85}b\n    a\\n\\rb\n    a\\n\\r\\x{85}\\x0cb\n\\= Expect no match\n    ab\n\n/^a\\R{1,3}b/bsr=unicode,utf\n    a\\nb\n    a\\n\\rb\n    a\\n\\r\\x{85}b\n    a\\r\\n\\r\\nb\n    a\\r\\n\\r\\n\\r\\nb\n    a\\n\\r\\n\\rb\n    a\\n\\n\\r\\nb\n\\= Expect no match\n    a\\n\\n\\n\\rb\n    a\\r\n\n/\\H\\h\\V\\v/utf\n    X X\\x0a\n    X\\x09X\\x0b\n\\= Expect no match\n    \\x{a0} X\\x0a\n\n/\\H*\\h+\\V?\\v{3,4}/utf\n    \\x09\\x20\\x{a0}X\\x0a\\x0b\\x0c\\x0d\\x0a\n    \\x09\\x20\\x{a0}\\x0a\\x0b\\x0c\\x0d\\x0a\n    \\x09\\x20\\x{a0}\\x0a\\x0b\\x0c\n\\= Expect no match\n    \\x09\\x20\\x{a0}\\x0a\\x0b\n\n/\\H\\h\\V\\v/utf\n    \\x{3001}\\x{3000}\\x{2030}\\x{2028}\n    X\\x{180e}X\\x{85}\n\\= Expect no match\n    \\x{2009} X\\x0a\n\n/\\H*\\h+\\V?\\v{3,4}/utf\n    \\x{1680}\\x{180e}\\x{2007}X\\x{2028}\\x{2029}\\x0c\\x0d\\x0a\n    \\x09\\x{205f}\\x{a0}\\x0a\\x{2029}\\x0c\\x{2028}\\x0a\n    \\x09\\x20\\x{202f}\\x0a\\x0b\\x0c\n\\= Expect no match\n    \\x09\\x{200a}\\x{a0}\\x{2028}\\x0b\n\n/[\\h]/B,utf\n    >\\x{1680}\n\n/[\\h]{3,}/B,utf\n    >\\x{1680}\\x{180e}\\x{2000}\\x{2003}\\x{200a}\\x{202f}\\x{205f}\\x{3000}<\n\n/[\\v]/B,utf\n\n/[\\H]/B,utf\n\n/[\\V]/B,utf\n\n/.*$/newline=any,utf\n    \\x{1ec5}\n\n/a\\Rb/I,bsr=anycrlf,utf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n\\= Expect no match\n    a\\x{85}b\n    a\\x0bb\n\n/a\\Rb/I,bsr=unicode,utf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n    a\\x{85}b\n    a\\x0bb\n\n/a\\R?b/I,bsr=anycrlf,utf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n\\= Expect no match\n    a\\x{85}b\n    a\\x0bb\n\n/a\\R?b/I,bsr=unicode,utf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n    a\\x{85}b\n    a\\x0bb\n\n/.*a.*=.b.*/utf,newline=any\n    QQQ\\x{2029}ABCaXYZ=!bPQR\n\\= Expect no match\n    a\\x{2029}b\n    \\x61\\xe2\\x80\\xa9\\x62\n\n/[[:a\\x{100}b:]]/utf\n\n/[\\p{InvalidOrBadProperty}]/\n\n/a[^]b/utf,allow_empty_class,match_unset_backref\n    a\\x{1234}b\n    a\\nb\n\\= Expect no match\n    ab\n\n/a[^]+b/utf,allow_empty_class,match_unset_backref\n    aXb\n    a\\nX\\nX\\x{1234}b\n\\= Expect no match\n    ab\n\n/(\\x{de})\\1/\n    \\x{de}\\x{de}\n\n/X/newline=any,utf,firstline\n    A\\x{1ec5}ABCXYZ\n\n/Xa{2,4}b/utf\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/Xa{2,4}?b/utf\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/Xa{2,4}+b/utf\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X\\x{123}{2,4}b/utf\n    X\\=ps\n    X\\x{123}\\=ps\n    X\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/X\\x{123}{2,4}?b/utf\n    X\\=ps\n    X\\x{123}\\=ps\n    X\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/X\\x{123}{2,4}+b/utf\n    X\\=ps\n    X\\x{123}\\=ps\n    X\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/X\\x{123}{2,4}b/utf\n\\= Expect no match\n    Xx\\=ps\n    X\\x{123}x\\=ps\n    X\\x{123}\\x{123}x\\=ps\n    X\\x{123}\\x{123}\\x{123}x\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}x\\=ps\n\n/X\\x{123}{2,4}?b/utf\n\\= Expect no match\n    Xx\\=ps\n    X\\x{123}x\\=ps\n    X\\x{123}\\x{123}x\\=ps\n    X\\x{123}\\x{123}\\x{123}x\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}x\\=ps\n\n/X\\x{123}{2,4}+b/utf\n\\= Expect no match\n    Xx\\=ps\n    X\\x{123}x\\=ps\n    X\\x{123}\\x{123}x\\=ps\n    X\\x{123}\\x{123}\\x{123}x\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}x\\=ps\n\n/X\\d{2,4}b/utf\n    X\\=ps\n    X3\\=ps\n    X33\\=ps\n    X333\\=ps\n    X3333\\=ps\n\n/X\\d{2,4}?b/utf\n    X\\=ps\n    X3\\=ps\n    X33\\=ps\n    X333\\=ps\n    X3333\\=ps\n\n/X\\d{2,4}+b/utf\n    X\\=ps\n    X3\\=ps\n    X33\\=ps\n    X333\\=ps\n    X3333\\=ps\n\n/X\\D{2,4}b/utf\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X\\D{2,4}?b/utf\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X\\D{2,4}+b/utf\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X\\D{2,4}b/utf\n    X\\=ps\n    X\\x{123}\\=ps\n    X\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/X\\D{2,4}?b/utf\n    X\\=ps\n    X\\x{123}\\=ps\n    X\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/X\\D{2,4}+b/utf\n    X\\=ps\n    X\\x{123}\\=ps\n    X\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/X[abc]{2,4}b/utf\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X[abc]{2,4}?b/utf\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X[abc]{2,4}+b/utf\n    X\\=ps\n    Xa\\=ps\n    Xaa\\=ps\n    Xaaa\\=ps\n    Xaaaa\\=ps\n\n/X[abc\\x{123}]{2,4}b/utf\n    X\\=ps\n    X\\x{123}\\=ps\n    X\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/X[abc\\x{123}]{2,4}?b/utf\n    X\\=ps\n    X\\x{123}\\=ps\n    X\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/X[abc\\x{123}]{2,4}+b/utf\n    X\\=ps\n    X\\x{123}\\=ps\n    X\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/X[^a]{2,4}b/utf\n    X\\=ps\n    Xz\\=ps\n    Xzz\\=ps\n    Xzzz\\=ps\n    Xzzzz\\=ps\n\n/X[^a]{2,4}?b/utf\n    X\\=ps\n    Xz\\=ps\n    Xzz\\=ps\n    Xzzz\\=ps\n    Xzzzz\\=ps\n\n/X[^a]{2,4}+b/utf\n    X\\=ps\n    Xz\\=ps\n    Xzz\\=ps\n    Xzzz\\=ps\n    Xzzzz\\=ps\n\n/X[^a]{2,4}b/utf\n    X\\=ps\n    X\\x{123}\\=ps\n    X\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/X[^a]{2,4}?b/utf\n    X\\=ps\n    X\\x{123}\\=ps\n    X\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/X[^a]{2,4}+b/utf\n    X\\=ps\n    X\\x{123}\\=ps\n    X\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\=ps\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/(Y)X\\1{2,4}b/utf\n    YX\\=ps\n    YXY\\=ps\n    YXYY\\=ps\n    YXYYY\\=ps\n    YXYYYY\\=ps\n\n/(Y)X\\1{2,4}?b/utf\n    YX\\=ps\n    YXY\\=ps\n    YXYY\\=ps\n    YXYYY\\=ps\n    YXYYYY\\=ps\n\n/(Y)X\\1{2,4}+b/utf\n    YX\\=ps\n    YXY\\=ps\n    YXYY\\=ps\n    YXYYY\\=ps\n    YXYYYY\\=ps\n\n/(\\x{123})X\\1{2,4}b/utf\n    \\x{123}X\\=ps\n    \\x{123}X\\x{123}\\=ps\n    \\x{123}X\\x{123}\\x{123}\\=ps\n    \\x{123}X\\x{123}\\x{123}\\x{123}\\=ps\n    \\x{123}X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/(\\x{123})X\\1{2,4}?b/utf\n    \\x{123}X\\=ps\n    \\x{123}X\\x{123}\\=ps\n    \\x{123}X\\x{123}\\x{123}\\=ps\n    \\x{123}X\\x{123}\\x{123}\\x{123}\\=ps\n    \\x{123}X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/(\\x{123})X\\1{2,4}+b/utf\n    \\x{123}X\\=ps\n    \\x{123}X\\x{123}\\=ps\n    \\x{123}X\\x{123}\\x{123}\\=ps\n    \\x{123}X\\x{123}\\x{123}\\x{123}\\=ps\n    \\x{123}X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\n\n/\\bthe cat\\b/utf\n    the cat\\=ps\n    the cat\\=ph\n\n/abcd*/utf\n    xxxxabcd\\=ps\n    xxxxabcd\\=ph\n\n/abcd*/i,utf\n    xxxxabcd\\=ps\n    xxxxabcd\\=ph\n    XXXXABCD\\=ps\n    XXXXABCD\\=ph\n\n/abc\\d*/utf\n    xxxxabc1\\=ps\n    xxxxabc1\\=ph\n\n/(a)bc\\1*/utf\n    xxxxabca\\=ps\n    xxxxabca\\=ph\n\n/abc[de]*/utf\n    xxxxabcde\\=ps\n    xxxxabcde\\=ph\n\n/X\\W{3}X/utf\n    X\\=ps\n\n/\\sxxx\\s/utf,tables=2\n    AB\\x{85}xxx\\x{a0}XYZ\n    AB\\x{a0}xxx\\x{85}XYZ\n\n/\\S \\S/utf,tables=2\n    \\x{a2} \\x{84}\n\n'A#хц'Bx,newline=any,utf\n\n'A#хц\n  PQ'Bx,newline=any,utf\n\n/a+#хaa\n  z#XX?/Bx,newline=any,utf\n\n/a+#хaa\n  z#х?/Bx,newline=any,utf\n\n/\\g{A}xxx#bXX(?'A'123)\r(?'A'456)/Bx,newline=any,utf\n\n/\\g{A}xxx#bх(?'A'123)\r(?'A'456)/Bx,newline=any,utf\n\n/(\\R*)(.)/s,utf\n    \\r\\n\n    \\r\\r\\n\\n\\r\n    \\r\\r\\n\\n\\r\\n\n\n/(\\R)*(.)/s,utf\n    \\r\\n\n    \\r\\r\\n\\n\\r\n    \\r\\r\\n\\n\\r\\n\n\n/[^\\x{1234}]+/Ii,utf\n\n/[^\\x{1234}]+?/Ii,utf\n\n/[^\\x{1234}]++/Ii,utf\n\n/[^\\x{1234}]{2}/Ii,utf\n\n/f.*/\n    for\\=ph\n\n/f.*/s\n    for\\=ph\n\n/f.*/utf\n    for\\=ph\n\n/f.*/s,utf\n    for\\=ph\n\n/\\x{d7ff}\\x{e000}/utf\n\n/\\x{d800}/utf\n\n/\\x{dfff}/utf\n\n/\\h+/utf\n    \\x{1681}\\x{200b}\\x{1680}\\x{2000}\\x{202f}\\x{3000}\n    \\x{3001}\\x{2fff}\\x{200a}\\x{a0}\\x{2000}\n\n/[\\h\\x{e000}]+/B,utf\n    \\x{1681}\\x{200b}\\x{1680}\\x{2000}\\x{202f}\\x{3000}\n    \\x{3001}\\x{2fff}\\x{200a}\\x{a0}\\x{2000}\n\n/\\H+/utf\n    \\x{1680}\\x{180e}\\x{167f}\\x{1681}\\x{180d}\\x{180f}\n    \\x{2000}\\x{200a}\\x{1fff}\\x{200b}\n    \\x{202f}\\x{205f}\\x{202e}\\x{2030}\\x{205e}\\x{2060}\n    \\x{a0}\\x{3000}\\x{9f}\\x{a1}\\x{2fff}\\x{3001}\n\n/[\\H\\x{d7ff}]+/B,utf\n    \\x{1680}\\x{180e}\\x{167f}\\x{1681}\\x{180d}\\x{180f}\n    \\x{2000}\\x{200a}\\x{1fff}\\x{200b}\n    \\x{202f}\\x{205f}\\x{202e}\\x{2030}\\x{205e}\\x{2060}\n    \\x{a0}\\x{3000}\\x{9f}\\x{a1}\\x{2fff}\\x{3001}\n\n/\\v+/utf\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n    \\x09\\x0e\\x{84}\\x{86}\\x{85}\\x0a\\x0b\\x0c\\x0d\n\n/[\\v\\x{e000}]+/B,utf\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n    \\x09\\x0e\\x{84}\\x{86}\\x{85}\\x0a\\x0b\\x0c\\x0d\n\n/\\V+/utf\n    \\x{2028}\\x{2029}\\x{2027}\\x{2030}\n    \\x{85}\\x0a\\x0b\\x0c\\x0d\\x09\\x0e\\x{84}\\x{86}\n\n/[\\V\\x{d7ff}]+/B,utf\n    \\x{2028}\\x{2029}\\x{2027}\\x{2030}\n    \\x{85}\\x0a\\x0b\\x0c\\x0d\\x09\\x0e\\x{84}\\x{86}\n\n/\\R+/bsr=unicode,utf\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n    \\x09\\x0e\\x{84}\\x{86}\\x{85}\\x0a\\x0b\\x0c\\x0d\n\n/(..)\\1/utf\n    ab\\=ps\n    aba\\=ps\n    abab\\=ps\n\n/(..)\\1/i,utf\n    ab\\=ps\n    abA\\=ps\n    aBAb\\=ps\n\n/(..)\\1{2,}/utf\n    ab\\=ps\n    aba\\=ps\n    abab\\=ps\n    ababa\\=ps\n    ababab\\=ps\n    ababab\\=ph\n    abababa\\=ps\n    abababa\\=ph\n\n/(..)\\1{2,}/i,utf\n    ab\\=ps\n    aBa\\=ps\n    aBAb\\=ps\n    AbaBA\\=ps\n    abABAb\\=ps\n    aBAbaB\\=ph\n    abABabA\\=ps\n    abaBABa\\=ph\n\n/(..)\\1{2,}?x/i,utf\n    ab\\=ps\n    abA\\=ps\n    aBAb\\=ps\n    abaBA\\=ps\n    abAbaB\\=ps\n    abaBabA\\=ps\n    abAbABaBx\\=ps\n\n/./utf,newline=crlf\n    \\r\\=ps\n    \\r\\=ph\n\n/.{2,3}/utf,newline=crlf\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\r\\=ps\n    \\r\\r\\=ph\n    \\r\\r\\r\\=ps\n    \\r\\r\\r\\=ph\n\n/.{2,3}?/utf,newline=crlf\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\r\\=ps\n    \\r\\r\\=ph\n    \\r\\r\\r\\=ps\n    \\r\\r\\r\\=ph\n\n/[^\\x{100}][^\\x{1234}][^\\x{ffff}][^\\x{10000}][^\\x{10ffff}]/B,utf\n\n/[^\\x{100}][^\\x{1234}][^\\x{ffff}][^\\x{10000}][^\\x{10ffff}]/Bi,utf\n\n/[^\\x{100}]*[^\\x{10000}]+[^\\x{10ffff}]??[^\\x{8000}]{4,}[^\\x{7fff}]{2,9}?[^\\x{fffff}]{5,6}+/B,utf\n\n/[^\\x{100}]*[^\\x{10000}]+[^\\x{10ffff}]??[^\\x{8000}]{4,}[^\\x{7fff}]{2,9}?[^\\x{fffff}]{5,6}+/Bi,utf\n\n/(?<=\\x{1234}\\x{1234})\\bxy/I,utf\n\n/(?<!^)ETA/utf\n\\= Expect no match\n    ETA\n\n/\\u0100/B,utf,alt_bsux,allow_empty_class,match_unset_backref\n\n/[\\u0100-\\u0200]/B,utf,alt_bsux,allow_empty_class,match_unset_backref\n\n/\\ud800/utf,alt_bsux,allow_empty_class,match_unset_backref\n\n/^\\u{0000000000010ffff}/utf,extra_alt_bsux\n    \\x{10ffff}\n\n/\\u{ 1bb1}/utf,extra_alt_bsux\n    u{ 1bb1}\n\\= Expect no match\n    \\x{1bb1}\n\n/\\u/utf,alt_bsux\n    \\\\u\n\n/^a+[a\\x{200}]/B,utf\n    aa\n\n/[b-d\\x{200}-\\x{250}]*[ae-h]?#[\\x{200}-\\x{250}]{0,8}[\\x00-\\xff]*#[\\x{200}-\\x{250}]+[a-z]/B,utf\n\n/[\\p{L}]/IB\n\n/[\\p{^L}]/IB\n\n/[\\P{L}]/IB\n\n/[\\P{^L}]/IB\n\n/[abc\\p{L}\\x{0660}]/IB,utf\n\n/[\\p{Nd}]/IB,utf\n    1234\n\n/[\\p{Nd}+-]+/IB,utf\n    1234\n    12-34\n    12+\\x{661}-34\n\\= Expect no match\n    abcd\n\n/(?:[\\PPa*]*){8,}/\n\n/[\\P{Any}]/B\n\n/[^\\P{Any}\\P{Any}]/B\n\n/[\\P{Any}\\E]/B\n\n/\\p{Any}#\\P{Any}![\\p{Any}]:[\\P{Any}]@[\\p{Any}a-z]%[\\P{Any}c]/B,utf\n\n/[\\P{Any}\\P{Any}\\P{Any}]![\\p{Any}\\p{Any}\\p{Any}]:[^\\P{Any}\\P{Any}]@[^\\p{Any}\\p{Any}]%[^\\p{Any}\\P{Any}]/B,utf\n\n/(\\P{Yi}+\\277)/\n\n/(\\P{Yi}+\\277)?/\n\n/(?<=\\P{Yi}{3}A)X/\n\n/\\p{Yi}+(\\P{Yi}+)(?1)/\n\n/(\\P{Yi}{2}\\277)?/\n\n/[\\P{Yi}A]/\n\n/[\\P{Yi}\\P{Yi}\\P{Yi}A]/\n\n/[^\\P{Yi}A]/\n\n/[^\\P{Yi}\\P{Yi}\\P{Yi}A]/\n\n/(\\P{Yi}*\\277)*/\n\n/(\\P{Yi}*?\\277)*/\n\n/(\\p{Yi}*+\\277)*/\n\n/(\\P{Yi}?\\277)*/\n\n/(\\P{Yi}??\\277)*/\n\n/(\\p{Yi}?+\\277)*/\n\n/(\\P{Yi}{0,3}\\277)*/\n\n/(\\P{Yi}{0,3}?\\277)*/\n\n/(\\p{Yi}{0,3}+\\277)*/\n\n/\\p{Zl}{2,3}+/B,utf\n      \n    \\x{2028}\\x{2028}\\x{2028}\n\n/\\p{Zl}/B,utf\n\n/\\p{Lu}{3}+/B,utf\n\n/\\pL{2}+/B,utf\n\n/\\p{Cc}{2}+/B,utf\n\n/^\\p{Cf}/utf\n    \\x{180e}\n    \\x{061c}\n    \\x{2066}\n    \\x{2067}\n    \\x{2068}\n    \\x{2069}\n\n/^\\p{Cs}/utf\n    \\x{dfff}\\=no_utf_check\n\\= Expect no match\n    \\x{09f}\n\n/^\\p{Mn}/utf\n    \\x{1a1b}\n\n/^\\p{Pe}/utf\n    \\x{2309}\n    \\x{230b}\n\n/^\\p{Ps}/utf\n    \\x{2308}\n    \\x{230a}\n\n/^\\p{Sc}+/utf\n    $\\x{a2}\\x{a3}\\x{a4}\\x{a5}\\x{a6}\n    \\x{9f2}\n\\= Expect no match\n    X\n    \\x{2c2}\n\n/^\\p{Zs}/utf\n    \\ \\\n    \\x{a0}\n    \\x{1680}\n    \\x{2000}\n    \\x{2001}\n\\= Expect no match\n    \\x{2028}\n    \\x{200d}\n\n/[\\x{c0}\\x{391}]/i,utf\n    \\x{c0}\n    \\x{e0}\n\n# The next two are special cases where the lengths of the different cases of\n# the same character differ. The first went wrong with heap frame storage; the\n# second was broken in all cases.\n\n/^\\x{023a}+?(\\x{0130}+)/i,utf\n  \\x{023a}\\x{2c65}\\x{0130}\n\n/^\\x{023a}+([^X])/i,utf\n  \\x{023a}\\x{2c65}X\n\n/\\x{c0}+\\x{116}+/i,utf\n    \\x{c0}\\x{e0}\\x{116}\\x{117}\n\n/[\\x{c0}\\x{116}]+/i,utf\n    \\x{c0}\\x{e0}\\x{116}\\x{117}\n\n/(\\x{de})\\1/i,utf\n    \\x{de}\\x{de}\n    \\x{de}\\x{fe}\n    \\x{fe}\\x{fe}\n    \\x{fe}\\x{de}\n\n/^\\x{c0}$/i,utf\n    \\x{c0}\n    \\x{e0}\n\n/^\\x{e0}$/i,utf\n    \\x{c0}\n    \\x{e0}\n\n# The next two should be Perl-compatible, but it fails to match \\x{e0}. PCRE\n# will match it only with UCP support, because without that it has no notion\n# of case for anything other than the ASCII letters.\n\n/((?i)[\\x{c0}])/utf\n    \\x{c0}\n    \\x{e0}\n\n/(?i:[\\x{c0}])/utf\n    \\x{c0}\n    \\x{e0}\n\n# These are PCRE's extra properties to help with Unicodizing \\d etc.\n\n/^\\p{Xan}/utf\n    ABCD\n    1234\n    \\x{6ca}\n    \\x{a6c}\n    \\x{10a7}\n\\= Expect no match\n    _ABC\n\n/^\\p{Xan}+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\\= Expect no match\n    _ABC\n\n/^\\p{Xan}+?/utf\n    \\x{6ca}\\x{a6c}\\x{10a7}_\n\n/^\\p{Xan}*/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\n/^\\p{Xan}{2,9}/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\n/^\\p{Xan}{2,9}?/utf\n    \\x{6ca}\\x{a6c}\\x{10a7}_\n\n/^[\\p{Xan}]/utf\n    ABCD1234_\n    1234abcd_\n    \\x{6ca}\n    \\x{a6c}\n    \\x{10a7}\n\\= Expect no match\n    _ABC\n\n/^[\\p{Xan}]+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\\= Expect no match\n    _ABC\n\n/^>\\p{Xsp}/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n    >\\x{a0}\n\\= Expect no match\n    \\x{0b}\n\n/^>\\p{Xsp}+/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xsp}+?/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xsp}*/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xsp}{2,9}/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xsp}{2,9}?/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>[\\p{Xsp}]/utf\n    >\\x{2028}\\x{0b}\n\n/^>[\\p{Xsp}]+/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n    >\\x{a0}\n\\= Expect no match\n    \\x{0b}\n\n/^>\\p{Xps}+/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}+?/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}*/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}{2,9}/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}{2,9}?/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>[\\p{Xps}]/utf\n    >\\x{2028}\\x{0b}\n\n/^>[\\p{Xps}]+/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^\\p{Xwd}/utf\n    ABCD\n    1234\n    \\x{6ca}\n    \\x{a6c}\n    \\x{10a7}\n    _ABC\n\\= Expect no match\n    []\n\n/^\\p{Xwd}+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\n/^\\p{Xwd}+?/utf\n    \\x{6ca}\\x{a6c}\\x{10a7}_\n\n/^\\p{Xwd}*/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\n/^\\p{Xwd}{2,9}/utf\n    A_B12\\x{6ca}\\x{a6c}\\x{10a7}\n\n/^\\p{Xwd}{2,9}?/utf\n    \\x{6ca}\\x{a6c}\\x{10a7}_\n\n/^[\\p{Xwd}]/utf\n    ABCD1234_\n    1234abcd_\n    \\x{6ca}\n    \\x{a6c}\n    \\x{10a7}\n    _ABC\n\\= Expect no match\n    []\n\n/^[\\p{Xwd}]+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\n# A check not in UTF-8 mode\n\n/^[\\p{Xwd}]+/\n    ABCD1234_\n\n# Some negative checks\n\n/^[\\P{Xwd}]+/utf\n    !.+\\x{019}\\x{482}AB\n\n/^[\\p{^Xwd}]+/utf\n    !.+\\x{019}\\x{589}AB\n\n/[\\D]/B,utf,ucp\n    1\\x{3c8}2\n\n/[\\d]/B,utf,ucp\n    >\\x{6f4}<\n\n/[\\S]/B,utf,ucp\n    \\x{1680}\\x{6f4}\\x{1680}\n\n/[\\s]/B,utf,ucp\n    >\\x{1680}<\n\n/[\\W]/B,utf,ucp\n    A\\x{1735}B\n\n/[\\w]/B,utf,ucp\n    >\\x{1723}<\n\n/\\D/B,utf,ucp\n    1\\x{3c8}2\n\n/\\d/B,utf,ucp\n    >\\x{6f4}<\n\n/\\S/B,utf,ucp\n    \\x{1680}\\x{6f4}\\x{1680}\n\n/\\s/B,utf,ucp\n    >\\x{1680}>\n\n/\\W/B,utf,ucp\n    A\\x{1735}B\n\n/\\w/B,utf,ucp\n    >\\x{1723}<\n\n/[[:alpha:]]/B,ucp\n\n/[[:lower:]]/B,ucp\n\n/[[:upper:]]/B,ucp\n\n/[[:alnum:]]/B,ucp\n\n/[[:ascii:]]/B,ucp\n\n/[[:cntrl:]]/B,ucp\n\n/[[:digit:]]/B,ucp\n\n/[[:digit:]]/B,ucp,ascii_digit\n\n/[[:graph:]]/B,ucp\n\n/[[:print:]]/B,ucp\n\n/[[:punct:]]/B,ucp\n\n/[[:space:]]/B,ucp\n\n/[[:word:]]/B,ucp\n\n/[[:xdigit:]]/B,ucp\n\n/[[:xdigit:]]/B,ucp,ascii_digit\n\n# Unicode properties for \\b and \\B\n\n/\\b...\\B/utf,ucp\n    abc_\n    \\x{37e}abc\\x{376}\n    \\x{37e}\\x{376}\\x{371}\\x{393}\\x{394}\n    !\\x{c0}++\\x{c1}\\x{c2}\n    !\\x{c0}+++++\n\n# Without PCRE_UCP, non-ASCII always fail, even if < 256\n\n/\\b...\\B/utf\n    abc_\n\\= Expect no match\n    \\x{37e}abc\\x{376}\n    \\x{37e}\\x{376}\\x{371}\\x{393}\\x{394}\n    !\\x{c0}++\\x{c1}\\x{c2}\n    !\\x{c0}+++++\n\n# With PCRE_UCP, non-UTF8 chars that are < 256 still check properties\n\n/\\b...\\B/ucp\n    abc_\n    !\\x{c0}++\\x{c1}\\x{c2}\n    !\\x{c0}+++++\n\n# Some of these are silly, but they check various combinations\n\n/[[:^alpha:][:^cntrl:]]+/B,utf,ucp\n    123\n    abc\n\n/[[:^cntrl:][:^alpha:]]+/B,utf,ucp\n    123\n    abc\n\n/[[:alpha:]]+/B,utf,ucp\n    abc\n\n/[[:^alpha:]\\S]+/B,utf,ucp\n    123\n    abc\n\n/[^\\d]+/B,utf,ucp\n    abc123\n    abc\\x{123}\n    \\x{660}abc\n\n/\\p{Lu}+9\\p{Lu}+B\\p{Lu}+b/B\n\n/\\p{^Lu}+9\\p{^Lu}+B\\p{^Lu}+b/B\n\n/\\P{Lu}+9\\P{Lu}+B\\P{Lu}+b/B\n\n/\\p{Han}+X\\p{Greek}+\\x{370}/B,utf\n\n/\\p{Xan}+!\\p{Xan}+A/B\n\n/\\p{Xsp}+!\\p{Xsp}\\t/B\n\n/\\p{Xps}+!\\p{Xps}\\t/B\n\n/\\p{Xwd}+!\\p{Xwd}_/B\n\n/A+\\p{N}A+\\dB+\\p{N}*B+\\d*/B,ucp\n\n# These behaved oddly in Perl, so they are kept in this test\n\n/(\\x{23a}\\x{23a}\\x{23a})?\\1/i,utf\n\\= Expect no match\n    \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\n\n/(ȺȺȺ)?\\1/i,utf\n\\= Expect no match\n    ȺȺȺⱥⱥ\n\n/(\\x{23a}\\x{23a}\\x{23a})?\\1/i,utf\n    \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n\n/(ȺȺȺ)?\\1/i,utf\n    ȺȺȺⱥⱥⱥ\n\n/(\\x{23a}\\x{23a}\\x{23a})\\1/i,utf\n\\= Expect no match\n    \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\n\n/(ȺȺȺ)\\1/i,utf\n\\= Expect no match\n    ȺȺȺⱥⱥ\n\n/(\\x{23a}\\x{23a}\\x{23a})\\1/i,utf\n    \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n\n/(ȺȺȺ)\\1/i,utf\n    ȺȺȺⱥⱥⱥ\n\n/(\\x{2c65}\\x{2c65})\\1/i,utf\n    \\x{2c65}\\x{2c65}\\x{23a}\\x{23a}\n\n/(ⱥⱥ)\\1/i,utf\n    ⱥⱥȺȺ\n\n/(\\x{23a}\\x{23a}\\x{23a})\\1Y/i,utf\n    X\\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}YZ\n\n/(\\x{2c65}\\x{2c65})\\1Y/i,utf\n    X\\x{2c65}\\x{2c65}\\x{23a}\\x{23a}YZ\n\n# These scripts weren't yet in Perl when I added Unicode 6.0.0 to PCRE\n\n/^[\\p{Batak}]/utf\n    \\x{1bc0}\n    \\x{1bff}\n\\= Expect no match\n    \\x{1bf4}\n\n/^[\\p{Brahmi}]/utf\n    \\x{11000}\n    \\x{1106f}\n\\= Expect no match\n    \\x{1104e}\n\n/^[\\p{Mandaic}]/utf\n    \\x{840}\n    \\x{85e}\n\\= Expect no match\n    \\x{85c}\n    \\x{85d}\n\n/(\\X*)(.)/s,utf\n    A\\x{300}\n\n/^S(\\X*)e(\\X*)$/utf\n    Stéréo\n\n/^\\X/utf\n    ́réo\n\n/^a\\X41z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aX41z\n\\= Expect no match\n    aAz\n\n/\\X/\n    a\\=ps\n    a\\=ph\n\n/\\Xa/\n    aa\\=ps\n    aa\\=ph\n\n/\\X{2}/\n    aa\\=ps\n    aa\\=ph\n\n/\\X+a/\n    a\\=ps\n    aa\\=ps\n    aa\\=ph\n\n/\\X+?a/\n    a\\=ps\n    ab\\=ps\n    aa\\=ps\n    aa\\=ph\n    aba\\=ps\n\n# These Unicode 6.1.0 scripts are not known to Perl.\n\n/\\p{Chakma}\\d/utf,ucp\n    \\x{11100}\\x{1113c}\n\n/\\p{Takri}\\d/utf,ucp\n    \\x{11680}\\x{116c0}\n\n/^\\X/utf\n    A\\=ps\n    A\\=ph\n    A\\x{300}\\x{301}\\=ps\n    A\\x{300}\\x{301}\\=ph\n    A\\x{301}\\=ps\n    A\\x{301}\\=ph\n\n/^\\X{2,3}/utf\n    A\\=ps\n    A\\=ph\n    AA\\=ps\n    AA\\=ph\n    A\\x{300}\\x{301}\\=ps\n    A\\x{300}\\x{301}\\=ph\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ps\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ph\n\n/^\\X{2}/utf\n    AA\\=ps\n    AA\\=ph\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ps\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ph\n\n/^\\X+/utf\n    AA\\=ps\n    AA\\=ph\n\n/^\\X+?Z/utf\n    AA\\=ps\n    AA\\=ph\n\n/A\\x{3a3}B/IBi,utf\n\n/[\\x{3a3}]/Bi,utf\n\n/[^\\x{3a3}]/Bi,utf\n\n/[\\x{3a3}]+/Bi,utf\n\n/[^\\x{3a3}]+/Bi,utf\n\n/a*\\x{3a3}/Bi,utf\n\n/\\x{3a3}+a/Bi,utf\n\n/\\x{3a3}*\\x{3c2}/Bi,utf\n\n/\\x{3a3}{3}/i,utf,aftertext\n    \\x{3a3}\\x{3c3}\\x{3c2}\\x{3a3}\\x{3c3}\\x{3c2}\n\n/\\x{3a3}{2,4}/i,utf,aftertext\n    \\x{3a3}\\x{3c3}\\x{3c2}\\x{3a3}\\x{3c3}\\x{3c2}\n\n/\\x{3a3}{2,4}?/i,utf,aftertext\n    \\x{3a3}\\x{3c3}\\x{3c2}\\x{3a3}\\x{3c3}\\x{3c2}\n\n/\\x{3a3}+./i,utf,aftertext\n    \\x{3a3}\\x{3c3}\\x{3c2}\\x{3a3}\\x{3c3}\\x{3c2}\n\n/\\x{3a3}++./i,utf,aftertext\n\\= Expect no match\n    \\x{3a3}\\x{3c3}\\x{3c2}\\x{3a3}\\x{3c3}\\x{3c2}\n\n/\\x{3a3}*\\x{3c2}/Bi,utf\n\n/[^\\x{3a3}]*\\x{3c2}/Bi,utf\n\n/[^a]*\\x{3c2}/Bi,utf\n\n/ist/Bi,utf\n\\= Expect no match\n    ikt\n\n/is+t/i,utf\n    iSs\\x{17f}t\n\\= Expect no match\n    ikt\n\n/is+?t/i,utf\n\\= Expect no match\n    ikt\n\n/is?t/i,utf\n\\= Expect no match\n    ikt\n\n/is{2}t/i,utf\n\\= Expect no match\n    iskt\n\n# This property is a PCRE special\n\n/^\\p{Xuc}/utf\n    $abc\n    @abc\n    `abc\n    \\x{1234}abc\n\\= Expect no match\n    abc\n\n/^\\p{Xuc}+/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^\\p{Xuc}+?/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^\\p{Xuc}+?\\*/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^\\p{Xuc}++/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^\\p{Xuc}{3,5}/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^\\p{Xuc}{3,5}?/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^[\\p{Xuc}]/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^[\\p{Xuc}]+/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^\\P{Xuc}/utf\n    abc\n\\= Expect no match\n    $abc\n    @abc\n    `abc\n    \\x{1234}abc\n\n/^[\\P{Xuc}]/utf\n    abc\n\\= Expect no match\n    $abc\n    @abc\n    `abc\n    \\x{1234}abc\n\n# Some auto-possessification tests\n\n/\\pN+\\z/B\n\n/\\PN+\\z/B\n\n/\\pN+/B\n\n/\\PN+/B\n\n/\\p{Any}+\\p{Any} \\p{Any}+\\P{Any} \\p{Any}+\\p{L&} \\p{Any}+\\p{L} \\p{Any}+\\p{Lu} \\p{Any}+\\p{Han} \\p{Any}+\\p{Xan} \\p{Any}+\\p{Xsp} \\p{Any}+\\p{Xps} \\p{Xwd}+\\p{Any} \\p{Any}+\\p{Xuc}/Bx,ucp\n\n/\\p{L&}+\\p{Any} \\p{L&}+\\p{L&} \\P{L&}+\\p{L&} \\p{L&}+\\p{L} \\p{L&}+\\p{Lu} \\p{L&}+\\p{Han} \\p{L&}+\\p{Xan} \\p{L&}+\\P{Xan} \\p{L&}+\\p{Xsp} \\p{L&}+\\p{Xps} \\p{Xwd}+\\p{L&} \\p{L&}+\\p{Xuc}/Bx,ucp\n\n/\\p{N}+\\p{Any} \\p{N}+\\p{L&} \\p{N}+\\p{L} \\p{N}+\\P{L} \\p{N}+\\P{N} \\p{N}+\\p{Lu} \\p{N}+\\p{Han} \\p{N}+\\p{Xan} \\p{N}+\\p{Xsp} \\p{N}+\\p{Xps} \\p{Xwd}+\\p{N} \\p{N}+\\p{Xuc}/Bx,ucp\n\n/\\p{Lu}+\\p{Any} \\p{Lu}+\\p{L&} \\p{Lu}+\\p{L} \\p{Lu}+\\p{Lu} \\P{Lu}+\\p{Lu} \\p{Lu}+\\p{Nd} \\p{Lu}+\\P{Nd} \\p{Lu}+\\p{Han} \\p{Lu}+\\p{Xan} \\p{Lu}+\\p{Xsp} \\p{Lu}+\\p{Xps} \\p{Xwd}+\\p{Lu} \\p{Lu}+\\p{Xuc}/Bx,ucp\n\n/\\p{Han}+\\p{Lu} \\p{Han}+\\p{L&} \\p{Han}+\\p{L} \\p{Han}+\\p{Lu} \\p{Han}+\\p{Arabic} \\p{Arabic}+\\p{Arabic} \\p{Han}+\\p{Xan} \\p{Han}+\\p{Xsp} \\p{Han}+\\p{Xps} \\p{Xwd}+\\p{Han} \\p{Han}+\\p{Xuc}/Bx,ucp\n\n/\\p{Xan}+\\p{Any} \\p{Xan}+\\p{L&} \\P{Xan}+\\p{L&} \\p{Xan}+\\p{L} \\p{Xan}+\\p{Lu} \\p{Xan}+\\p{Han} \\p{Xan}+\\p{Xan} \\p{Xan}+\\P{Xan} \\p{Xan}+\\p{Xsp} \\p{Xan}+\\p{Xps} \\p{Xwd}+\\p{Xan} \\p{Xan}+\\p{Xuc}/Bx,ucp\n\n/\\p{Xsp}+\\p{Any} \\p{Xsp}+\\p{L&} \\p{Xsp}+\\p{L} \\p{Xsp}+\\p{Lu} \\p{Xsp}+\\p{Han} \\p{Xsp}+\\p{Xan} \\p{Xsp}+\\p{Xsp} \\P{Xsp}+\\p{Xsp} \\p{Xsp}+\\p{Xps} \\p{Xwd}+\\p{Xsp} \\p{Xsp}+\\p{Xuc}/Bx,ucp\n\n/\\p{Xwd}+\\p{Any} \\p{Xwd}+\\p{L&} \\p{Xwd}+\\p{L} \\p{Xwd}+\\p{Lu} \\p{Xwd}+\\p{Han} \\p{Xwd}+\\p{Xan} \\p{Xwd}+\\p{Xsp} \\p{Xwd}+\\p{Xps} \\p{Xwd}+\\p{Xwd} \\p{Xwd}+\\P{Xwd} \\p{Xwd}+\\p{Xuc}/Bx,ucp\n\n/\\p{Xuc}+\\p{Any} \\p{Xuc}+\\p{L&} \\p{Xuc}+\\p{L} \\p{Xuc}+\\p{Lu} \\p{Xuc}+\\p{Han} \\p{Xuc}+\\p{Xan} \\p{Xuc}+\\p{Xsp} \\p{Xuc}+\\p{Xps} \\p{Xwd}+\\p{Xuc} \\p{Xuc}+\\p{Xuc} \\p{Xuc}+\\P{Xuc}/Bx,ucp\n\n/\\p{N}+\\p{Ll} \\p{N}+\\p{Nd} \\p{N}+\\P{Nd}/Bx,ucp\n\n/\\p{Xan}+\\p{L} \\p{Xan}+\\p{N} \\p{Xan}+\\p{C} \\p{Xan}+\\P{L} \\P{Xan}+\\p{N} \\p{Xan}+\\P{C}/Bx,ucp\n\n/\\p{L}+\\p{Xan} \\p{N}+\\p{Xan} \\p{C}+\\p{Xan} \\P{L}+\\p{Xan} \\p{N}+\\p{Xan} \\P{C}+\\p{Xan} \\p{L}+\\P{Xan}/Bx,ucp\n\n/\\p{Xan}+\\p{Lu} \\p{Xan}+\\p{Nd} \\p{Xan}+\\p{Cc} \\p{Xan}+\\P{Ll} \\P{Xan}+\\p{No} \\p{Xan}+\\P{Cf}/Bx,ucp\n\n/\\p{Lu}+\\p{Xan} \\p{Nd}+\\p{Xan} \\p{Cs}+\\p{Xan} \\P{Lt}+\\p{Xan} \\p{Nl}+\\p{Xan} \\P{Cc}+\\p{Xan} \\p{Lt}+\\P{Xan}/Bx,ucp\n\n/\\w+\\p{P} \\w+\\p{Po} \\w+\\s \\p{Xan}+\\s \\s+\\p{Xan} \\s+\\w/Bx,ucp\n\n/\\w+\\P{P} \\W+\\p{Po} \\w+\\S \\P{Xan}+\\s \\s+\\P{Xan} \\s+\\W/Bx,ucp\n\n/\\w+\\p{Po} \\w+\\p{Pc} \\W+\\p{Po} \\W+\\p{Pc} \\w+\\P{Po} \\w+\\P{Pc}/Bx,ucp\n\n/\\p{Nl}+\\p{Xan} \\P{Nl}+\\p{Xan} \\p{Nl}+\\P{Xan} \\P{Nl}+\\P{Xan}/Bx,ucp\n\n/\\p{Xan}+\\p{Nl} \\P{Xan}+\\p{Nl} \\p{Xan}+\\P{Nl} \\P{Xan}+\\P{Nl}/Bx,ucp\n\n/\\p{Xan}+\\p{Nd} \\P{Xan}+\\p{Nd} \\p{Xan}+\\P{Nd} \\P{Xan}+\\P{Nd}/Bx,ucp\n\n# End auto-possessification tests\n\n/\\w+/B,utf,ucp,auto_callout\n    abcd\n\n/[\\p{N}]?+/B,no_auto_possess\n\n/[\\p{L}ab]{2,3}+/B,no_auto_possess\n\n/\\D+\\X \\d+\\X \\S+\\X \\s+\\X \\W+\\X \\w+\\X \\R+\\X \\H+\\X \\h+\\X \\V+\\X \\v+\\X a+\\X \\n+\\X .+\\X/Bx\n\n/.+\\X/Bsx\n\n/\\X+$/Bmx\n\n/\\X+\\D \\X+\\d \\X+\\S \\X+\\s \\X+\\W \\X+\\w \\X+. \\X+\\R \\X+\\H \\X+\\h \\X+\\V \\X+\\v \\X+\\X \\X+\\Z \\X+\\z \\X+$/Bx\n\n/\\d+\\s{0,5}=\\s*\\S?=\\w{0,4}\\W*/B,utf,ucp\n\n/[RST]+/Bi,utf,ucp\n\n/[R-T]+/Bi,utf,ucp\n\n/[Q-U]+/Bi,utf,ucp\n\n/^s?c/Iim,utf\n    scat\n\n/\\X?abc/utf,no_start_optimize\n    \\xff\\x7f\\x00\\x00\\x03\\x00\\x41\\xcc\\x80\\x41\\x{300}\\x61\\x62\\x63\\x00\\=no_utf_check,offset=06\n\n/\\x{100}\\x{200}\\K\\x{300}/utf,startchar\n    \\x{100}\\x{200}\\x{300}\n\n# Test UTF characters in a substitution\n\n/ábc/utf,replace=XሴZ\n    123ábc123\n\n/(?<=abc)(|def)/g,utf,replace=<$0>\n    123abcáyzabcdef789abcሴqr\n\n/[A-`]/iB,utf\n    abcdefghijklmno\n\n/(?<=\\K\\x{17f})/g,utf,aftertext,allow_lookaround_bsk\n    \\x{17f}\\x{17f}\\x{17f}\\x{17f}\\x{17f}\n\n/(?<=\\K\\x{17f})/altglobal,utf,aftertext,allow_lookaround_bsk\n    \\x{17f}\\x{17f}\\x{17f}\\x{17f}\\x{17f}\n\n\"\\xa\\xf<(.\\pZ*\\P{Xwd}+^\\xa8\\3'3yq.::?(?J:()\\xd1+!~:3'(8?:)':(?'d'(?'d'^u]!.+.+\\\\A\\Ah(n+?9){7}+\\K;(?'X'u'(?'c'(?'z'(?<y>\\xb::\\xf0'|\\xd3(\\xae?'w(z\\x8?P>l)\\x8?P>a)'\\H\\R\\xd1+!!~:3'(?:h$N{26875}\\W+?\\\\=D{2}\\x89(?i:Uy0\\N({2\\xa(\\v\\x85*){y*\\A(()\\p{L}+?\\P{^Xan}'+?\\xff\\+pS\\?|).{;y*\\A(()\\p{L}+?\\8}\\d?1(|)(/1){7}.+[Lp{Me}].\\s\\xdcC*?(?(<y>))(?<!^)$C((;*?(R))+(\\xbf(R))\\x8a\\X*?\\x8a\\xb\\xd1^9\\3*+(\\xc1,\\k'R'\\xb4)\\xcc(z\\z(?J)(?'X'\\x1b(\\xb\\xd1^9\\?'3*+P{^Xan}+?\\xff\\+(\\xc1.]k+\\xb'Pm'\\xb4)\\xcc4f\\xa7'\\xd1V(?i:U,{2,2})'(?'X'))?-%--\\x95$9*\\4'|\\xd1(\\x9c''%\\x94$9)#(?'R')3\\x7?('P\\xed7'\\xa8\\xb1^u\\xeaw\\1\\0\\0\\(|(?1){7}.+[\\p{Me}].\\s\\xdcC*^\\x14?(?(<y>))(?<!^)$C((;*?(R*?))+(?(R)\\x8a\\X*?\\x8a\\xb\\xd1^9\\3*+|(\\xc1,\\k'R'\\xb4)\\xcc! z)\\z(?JJ)(?'X';(\\xb\\xd1^9\\?'3*+(\\xc1.]k+\\xb'Pm'\\xb4))':(?'d')(?'RD'(d')|)|$)'|(?<x>\\g{d});\\g{x}\\x11\\g{d}\\x81\\|$((?'X'\\'X'(?'W''\\x92()'9'\\x83*))\\xba*\\!?^ <){)':;\\xcc4'\\xd1'(?'X'28))?-%--\\x95$9*\\4'|\\xd1((''e\\x94*$9:)*#(?'R')3)\\x7?('P\\xed')\\\\x16:;()\\x1e\\x10*:(?<y>)\\xd1+0!~:(?)'d'E:yD!\\s(?'R'\\x1e;\\x10:U))|'\\x9g!\\xb0*){)\\\\x16:;()\\x1e\\x10\\x87*:(?<y>)\\xd1+!~:(?)'}'\\d'E:yD!\\s(?'R'\\x1e;\\x10:U))|'))|)g!\\xb0*R+9{29+)#(?'P'})*?pS\\{3,}\\x85,{0,}l{*UTF)(\\xe{7}){3722,{9,}d{2,?|))|{)\\(A?&d}}{\\xa,}2}){3,}7,l{)22}(,}l:7{2,4}}29\\x19+)#?'P'})*v?))\\x5\"\n\n/$(&.+[\\p{Me}].\\s\\xdcC*?(?(<y>))(?<!^)$C((;*?(R))+(?(R)){0,6}?|){12\\x8a\\X*?\\x8a\\x0b\\xd1^9\\3*+(\\xc1,\\k'P'\\xb4)\\xcc(z\\z(?JJ)(?'X'8};(\\x0b\\xd1^9\\?'3*+(\\xc1.]k+\\x0b'Pm'\\xb4\\xcc4'\\xd1'(?'X'))?-%--\\x95$9*\\4'|\\xd1(''%\\x95*$9)#(?'R')3\\x07?('P\\xed')\\\\x16:;()\\x1e\\x10*:(?<y>)\\xd1+!~:(?)''(d'E:yD!\\s(?'R'\\x1e;\\x10:U))|')g!\\xb0*){29+))#(?'P'})*?/\n\n\"(*UTF)(*UCP)(.UTF).+X(\\V+;\\^(\\D|)!999}(?(?C{7(?C')\\H*\\S*/^\\x5\\xa\\\\xd3\\x85n?(;\\D*(?m).[^mH+((*UCP)(*U:F)})(?!^)(?'\"\n\n/(?(?C'')\\Qé/utf\n\n/(?(?C'')é/utf\n\n/[\\pS#moq]/\n    =\n\n/(*:a\\x{12345}b\\t(d\\)c)xxx/utf,alt_verbnames,mark\n    cxxxz\n\n/abcd/utf,replace=x\\x{824}y\\o{3333}z(\\Q12\\$34$$\\x34\\E5$$),substitute_extended\n    abcd\n\n/a(\\x{e0}\\x{101})(\\x{c0}\\x{102})/utf,replace=a\\u$1\\U$1\\E$1\\l$2\\L$2\\Eab\\U\\x{e0}\\x{101}\\L\\x{d0}\\x{160}\\EDone,substitute_extended\n    a\\x{e0}\\x{101}\\x{c0}\\x{102}\n\n/((?<digit>\\d)|(?<letter>\\p{L}))/g,substitute_extended,replace=<${digit:+digit; :not digit; }${letter:+letter:not a letter}>\n    ab12cde\n\n/(*UCP)(*UTF)[[:>:]]X/B\n\n/abc/utf,replace=xyz\n    abc\\=zero_terminate\n\n/a[[:punct:]b]/ucp,bincode\n\n/a[[:punct:]b]/utf,ucp,bincode\n\n/a[b[:punct:]]/utf,ucp,bincode\n\n/[[:^ascii:]]/utf,ucp,bincode\n\n/[[:^ascii:]\\w]/utf,ucp,bincode\n\n/[\\w[:^ascii:]]/utf,ucp,bincode\n\n/[^[:ascii:]\\W]/utf,ucp,bincode\n    \\x{de}\n    \\x{200}\n\\= Expect no match\n    \\x{589}\n    \\x{37e}\n\n/[[:^ascii:]a]/utf,ucp,bincode\n\n/L(?#(|++<!(2)?/B,utf,no_auto_possess,auto_callout\n\n/L(?#(|++<!(2)?/B,utf,ucp,auto_callout\n\n/(*UTF)C\\x09((?<!'(?x)!*H? #\\xcc\\x9a[^$]/\n\n/[\\D]/utf\n    \\x{1d7cf}\n\n/[\\D\\P{Nd}]/utf\n    \\x{1d7cf}\n\n/[^\\D]/utf\n    a9b\n\\= Expect no match\n    \\x{1d7cf}\n\n/[^\\D\\P{Nd}]/utf\n    a9b\n\\= Expect no match\n    \\x{1d7cf}\n    \\x{10000}\n\n# Hex uses pattern length, not zero-terminated. This tests for overrunning\n# the given length of a pattern.\n\n/'(*UTF)'/hex\n\n/'#('/hex,extended,utf\n\n/a(?<=A\\XB)/utf\n\n/../utf,auto_callout\n    \\n\\x{123}\\x{123}\\x{123}\\x{123}\n\n# This tests processing wide characters in extended mode.\n\n/XȀ/x,utf\n\n# These three test a bug fix that was not clearing up after a locale setting\n# when the test or a subsequent one matched a wide character.\n\n//locale=C\n\n/[\\P{Yi}]/utf\n\\x{2f000}\n\n/[\\P{Yi}]/utf,locale=C\n\\x{2f000}\n\n/^(?<!(?=􃡜))/B,utf\n\n# Horizontal and vertical space lists ignore caseless\n\n/[\\HH]/Bi,utf\n\n/[^\\HH]/Bi,utf\n\n//g,utf\n    \\=zero_terminate\n\n/^(?1)\\p{Nd}{3}(a)/\n    a123a\n\n/\\p{Nd}{0,3}[\\pL](*:abc)(?C1)xxx/callout_info\n\n# ---------------------------------------------------------------------------\n\n# A bunch of tests that hit lines of code that others do not (at least when\n# these were created).\n\n/^[^a]{3,}?x/i,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    bbb\n    cc\n\n/^[ac]{3,}?x/i,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    aaa\\x{100}\n\n/^X\\X/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\p{L&}+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\p{L}+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\p{Lu}+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\p{Arabic}+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\p{Xan}+?/ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\s+?/ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n    XX\n\n/^X\\S+?/ucp,no_start_optimize,no_auto_possess\n    XX\n\\= Expect no match\n    X\n\n/^X\\w+?/ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X[^\\x{b5}]+?/i,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X[\\x{b5}]+?/i,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\p{Xuc}+?/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X.+?Z/s,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\R+?/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\H+?/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\V+?/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\s+?/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n    XX\n\n/^X\\S+?/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n\n/^X\\p{Any}{1,3}?Z/s,no_start_optimize,no_auto_possess\n    XYYYZ\n\\= Expect no match\n    XY\n    XYY\n    XYYY\n    XYYYYZ\n\n/^X\\p{L&}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\n    XY!\n\n/^X\\p{L}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\n    XY!\n\n/^X\\p{Lu}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\n    XY!\n\n/^X\\P{Han}{1,3}?Z/s,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\n    XY!\n    XY\\x{2f00}!\n\n/^X\\p{Xan}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\n    XY!\n\n/^X\\p{Xsp}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\n\n    X\\n!\n    X\\n\\n! \n\n/^X\\P{Xsp}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XYY\\n\n\n/^X\\p{Xwd}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\n    XY!\n    XYY! \n\n/^X\\x{b5}+?Z/i,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n    X\\x{b5} \n    X\\x{b5}\\x{b5}Y \n\n/^X\\p{Xuc}+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n    X$\n    X@@Y  \n\n/(*CRLF)^X.+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect partial match\n    XYY\\r\\=ph \n\\= Expect no match\n    X\n\n/^X.+?Z/s,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\n    XYY \n\n/^X\\R+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\nX\n    X\\n\\rX\n    X\\n\\r\\nX\n    X\\n\\n\n    X\\n\\x{0c}    \n\n/(*BSR_ANYCRLF)^X\\R+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\nX\n    X\\n\\rX\n    X\\n\\r\\nX\n    X\\n\\n\n    X\\n\\x{0c}    \n\n/^X\\H+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\t\n    XYY \n\n/^X\\h+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\t\\t\n    X\\tY\n\n/^X\\V+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\n\n    XYY \n\n/^X\\v+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\n\\n\n    X\\nY\n\n/^X\\D+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY9\n    XYY \n\n/^X\\d+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X99\n    X9Y\n\n/^X\\S+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\n\n    XYY \n\n/^X\\s+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\n\\n\n    X\\nY\n\n/^X\\W+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X.A\n    X++ \n\n/^X\\p{L&}{1,3}Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\n    XY!\n\n/^X\\p{L}{1,3}Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\n\n/^X\\p{Xan}{1,3}Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\n\n/^X\\P{Xsp}{1,3}Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XYY\n\n/^X\\p{Xuc}+Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X$\n\n# ----------------------------------------------------------------------\n# These test the dangerous PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL option.\n\n/\\x{d800}/B,utf,bad_escape_is_literal\n\n/\\ud800/B,utf,alt_bsux,bad_escape_is_literal\n\n# ----------------------------------------------------------------------\n\n/Aሴ+B/literal,utf,no_utf_check\n    Aሴ+B\n    \n# These are here because I upgraded to Unicode 10.0.0 before Perl did, so it\n# doesn't recognize all these scripts. In time these three tests can be moved\n# to test 4.\n\n/^(\\p{Adlam}+)(\\p{Bhaiksuki}+)(\\p{Marchen}+)(\\p{Newa}+)(\\p{Osage}+)\n  (\\p{Tangut}+)(\\p{Masaram_Gondi}+)(\\p{Nushu}+)(\\p{Soyombo}+)\n  (\\p{Zanabazar_Square}+)/x,utf\n    \\x{1E900}\\x{1E924}\\x{1E953}\\x{11C00}\\x{11C2D}\\x{11C3E}\\x{11C70}\\x{11C77}\\x{11CAB}\\x{11400}\\x{1142F}\\x{11455}\\x{104B0}\\x{104D8}\\x{104FB}\\x{16FE0}\\x{18800}\\x{18AF2}\\x{11D00}\\x{11D3A}\\x{11D59}\\x{16FE1}\\x{1B170}\\x{1B2FB}\\x{11A50}\\x{11A58}\\x{11AA2}\\x{11A00}\\x{11A07}\\x{11A47} \n\n/^\\x{1E900}\\x{104B0}/i,utf\n    \\x{1E900}\\x{104B0}\n    \\x{1E922}\\x{104D8}\n    \n/^(?:(\\X)(?C))+$/utf\n    \\x{1E900}\\x{1E924}\\x{1E953}\\x{11C00}\\x{11C2D}\\x{11C3E}\\x{11C70}\\x{11C77}\\x{11CAB}\\x{11400}\\x{1142F}\\x{11455}\\x{104B0}\\x{104D8}\\x{104FB}\\x{16FE0}\\x{18800}\\x{18AF2}\\x{11D00}\\x{11D3A}\\x{11D59}\\x{16FE1}\\x{1B170}\\x{1B2FB}\\x{11A50}\\x{11A58}\\x{11AA2}\\x{11A00}\\x{11A07}\\x{11A47}\\=callout_capture,callout_no_where \n\n# Similarly for Unicode 11.0.0\n\n/^(\\p{Dogra}+)(\\p{Gunjala_Gondi}+)(\\p{Hanifi_Rohingya}+)(\\p{Makasar}+)\n  (\\p{Medefaidrin}+)(\\p{Old_Sogdian}+)(\\p{Sogdian}+)/x,utf\n    \\x{11800}\\x{11da9}\\x{10d27}\\x{11ee0}\\x{16e48}\\x{10f27}\\x{10f30} \n\n# Regional indicators\n\n/^(\\X)(\\X)/utf,aftertext\n    \\x{1F1E6}\\x{1F1E7}\\x{1F1E7}B\n    \\x{1F1E6}\\x{1F1E7}\\x{1F1E7}\\x{1F1E6}B\n    \n# More differences from Perl\n\n/^\\p{Common}/utf\n    \\x{60c}\n    \\x{61f}  \n    \\x{964}\n    \\x{965}  \n\n/^\\p{Inherited}/utf\n    \\x{64b}\n    \\x{654}\n    \\x{655}\n    \\x{1D1AA} \n\n/\\N{U+}/\n\n/\\N{U+}/utf\n\n/\\N{U}/\n\n/\\N{U+}/utf\n\n/\\N{U+1}/\n\n/\\N{U+1 }/\n\n# This tests the non-UTF Unicode NEL pattern whitespace character, only\n# recognized by PCRE2 with /x when there is Unicode support.\n\n/A      \n\u000b\f\rB/x\n    AB \n    \n# This tests Unicode Pattern White Space characters in verb names when they\n# are being processed with PCRE2_EXTENDED. Note: there are UTF-8 characters\n# with code points greater than 255 between A, B, and C in the pattern.\n\n/(*: A‎B C)abc/x,utf,mark,alt_verbnames\n    abc\n    \n# Script run tests: auto-possessification\n\n/^(*sr:.*)/B,utf \n    paypаl.com   A classic example of why script run checks are a good thing\n\n/^(*sr:.*(*ACCEPT))/utf \n    paypаl.com   But *ACCEPT breaks things\n\n/^(*sr:\\x{2e80}*)/B,utf\n\n/^(*sr:\\x{2e80}*)\\x{2e80}/B,utf\n\n/(?<!)(*sr:)/B\n\n/(?<=abc(?=X(*sr:BXY)CCC)XBXYCCC)./B\n   abcXBXYCCC!\n\n# Some script run patterns are broken in Perl 5.28.0. These can be moved into\n# test 4 when a mended version of Perl is released.\n\n/^(*sr:.{4})/utf\n    \\x{0980}12\\x{0993}     Bengali Common-digits Bengali\n    \\x{0780}12\\x{07b1}     Thaana Common-digits Thaana\n    \\x{0e01}12\\x{0e5b}     Thai Common-digits Thai\n    \\x{1780}12\\x{19ff}     Khmer Common-digits Khmer\n    \\x{0904}12\\x{0939}     Devanagari Common-digits Devanagari\n    A\\x{ff10}\\x{ff19}B     Latin Common-notascii-digits Latin \n    A\\x{1d7ce}\\x{1d7cf}B   Latin fancy-common-digits Latin\n    \n# These ones involve non-ASCII but nevertheless Common digits. As of October\n# 2018 even blead Perl wasn't handling all of these - but is going to. \n\n/^(*sr:.{4})/utf\n    A\\x{ff10}\\x{ff19}B     Latin Common-notascii-digits Latin \n    \\x{ff10}\\x{ff19}..     Common-notascii-digits Common Common\n    A\\x{ff10}BC            Latin Common-notascii-digit Latin Latin\n    A\\x{1d7ce}\\x{1d7cf}B   Latin fancy-common-digits Latin\n    \\x{1d7ce}\\x{1d7cf},,   fancy-common-digits Common Common\n    A\\x{1d7ce}BC           Latin fancy-common-digit Latin Latin\n    \n# Some Unicode 12.1.0 new script characters\n\n/\\p{Elymaic}\\p{Nandinagari}\\p{Nyiakeng_Puachue_Hmong}\\p{Wancho}/utf\n    \\x{10fe5}\\x{119AC}\\x{1E10E}\\x{1E2D1} \n\n# Some Unicode 13.0.0 new script characters\n\n/\\p{Chorasmian}\\p{Dives_Akuru}\\p{Khitan_Small_Script}\\p{Yezidi}/utf\n    \\x{10FB0}\\x{11900}\\x{18B00}\\x{10E80}\n\n# ------- \n\n# Test reference and errors in non-ASCII characters in group names\n\n/(?'𑠅ABC'...)/I,utf\n   abcde\\=copy=𑠅ABC\n\n# Bad ones\n\n/(?'AB၌C'...)\\g{AB၌C}/utf\n\n/(?'²ABC'...)/utf\n\n/(?'X²ABC'...)/utf\n\n# -------\n\n/\\p{Any}*xyz/I\n\n/(|)7/caseless,ucp\n\n/(\\xc1)\\1/i,ucp\n    \\xc1\\xe1\\=no_jit\n    \n/\\p{L&}+\\p{bidi_control}/B\n\n/\\p{bidi_control}+\\p{L&}/B\n\n/\\p{han}/B\n\n/\\p{script:han}/B\n\n/\\p{sc:han}/B\n\n/\\p{script extensions:han}/B\n\n/\\p{scx:han}/B\n\n# Test error - invalid script name\n\n/\\p{sc:L}/\n\n# Some Boolean property tests that differ from Perl\n\n/\\p{emojimodifierbase}\\p{ebase}/g,utf\n    >AN<>\\x{261d}\\x{1faf6}<>yz<\n\n/\\p{graphemelink}\\p{grlink}/g,utf\n    >AN<>\\x{11d97}\\x{94d}<>yz<\n \n/\\p{soft dotted}\\p{sd}/g,utf\n    >AF23<>\\x{1df1a}\\x{69}<>yz<\n    \n# ------------------------------------------------ \n\n/\\p{\\2b[:xigi:t:_/\n\n# Tests for PCRE2_EXTRA_CASELESS_RESTRICT. Compare each test with and without\n# the restriction.\n\n/AskZ/i,utf,caseless_restrict\n    AskZ\n    aSKz\n\\= Expect no match\n    A\\x{17f}kZ\n    As\\x{212a}Z      \n\n/AskZ/i,utf\n    AskZ\n    aSKz\n    A\\x{17f}kZ\n    As\\x{212a}Z      \n\n/A\\x{17f}\\x{212a}Z/ir,utf\n    \\= Expect no match\n    AskZ\n\n/A\\x{17f}\\x{212a}Z/i,utf\n    AskZ\n\n/[AskZ]+/i,utf,caseless_restrict\n    AskZ\n    aSKz \n    A\\x{17f}kZ\n    As\\x{212a}Z      \n\n/[AskZ]+/i,utf\n    AskZ\n    aSKz \n    A\\x{17f}kZ\n    As\\x{212a}Z      \n\n/[\\x{17f}\\x{212a}]+/ir,utf\n\\= Expect no match\n    AskZ\n\n/[\\x{17f}\\x{212a}]+/i,utf\n    AskZ\n\n/[^s]+/ir,utf\n    A\\x{17f}Z \n\n/[^s]+/i,utf\n    A\\x{17f}Z \n\n/[^k]+/ir,utf\n    A\\x{212a}Z \n    \n/[^k]+/i,utf\n    A\\x{212a}Z \n    \n/[^sk]+/ir,utf\n    A\\x{17f}\\x{212a}Z \n\n/[^sk]+/i,utf\n    A\\x{17f}\\x{212a}Z \n\n/[^\\x{17f}]+/ir,utf\n    AsSZ \n\n/[^\\x{17f}]+/i,utf\n    AsSZ \n\n/[Ss]+/irB,utf\n    Sss\\x{17f}ss\n\n/[Ss]+/iB,utf\n    Sss\\x{17f}ss\n\n/[S\\x{17f}]/irB,utf\n\n/[S\\x{17f}]/iB,utf\n\n/[\\x{17f}s]/irB,utf\n\n/[\\x{17f}s]/iB,utf\n\n/[\\x{4b}\\x{6b}]/irB,utf\n\n/[\\x{4b}\\x{6b}]/iB,utf\n\n/s(?r)s(?-r)s(?r:s)s/i,utf\n    \\x{17f}S\\x{17f}S\\x{17f}\n\\= Expect no match     \n    \\x{17f}\\x{17f}\\x{17f}S\\x{17f}\n    \\x{17f}S\\x{17f}\\x{17f}\\x{17f}\n\n/k(?^i)k/ir,utf\n    K\\x{212a}\n\\= Expect no match          \n    \\x{212a}\\x{212a}\n\n/[sk](?r:[sk])[sk]/Bi,utf\n    SKS\n    sks\n    \\x{212a}S\\x{17f}\n    \\x{17f}K\\x{212a}\n\\= Expect no match\n    s\\x{212a}s\n    K\\x{17f}K\n\n/(.) \\1/i,utf,caseless_restrict\n    s S\n    k K\n\\= Expect no match\n    s \\x{17f}\n    k \\x{212a}\n\n/(.) (?r:\\1)/i,utf\n    s S\n    k K\n\\= Expect no match\n    s \\x{17f}\n    k \\x{212a}\n\n/(.) \\1 z/Bir\n    s s z\n    s S z\n\n/(?J:(?<DNAME>s)|(?<DNAME>.)) \\k<DNAME> z/Bir\n    s s z\n    s S z\n\n/(.) \\1/i,utf\n    s S\n    k K\n    s \\x{17f}\n    k \\x{212a}\n\n/(?:(?<A>ss)|(?<A>kk)) \\k<A>/i,utf,dupnames,caseless_restrict\n    sS Ss\n    kK Kk\n\\= Expect no match\n    sS \\x{17f}s\n    kK \\x{212a}k\n\n/(?:(?<A>ss)|(?<A>kk)) \\k<A>/i,utf,dupnames\n    sS Ss\n    kK Kk\n    sS \\x{17f}s\n    kK \\x{212a}k\n\n/(?:(?<A>s)|(?<A>k)) \\k<A>{3,}!/i,utf,dupnames,caseless_restrict\n    s SsSs!\n    k KkKk!\n\\= Expect no match\n    s \\x{17f}sSs\\x{17f}!\n    k \\x{212a}kKk\\x{212a}!\n\n/(?:(?<A>s)|(?<A>k)) \\k<A>{3,}!/i,utf,dupnames\n    s SsSs!\n    k KkKk!\n    s \\x{17f}sSs\\x{17f}!\n    k \\x{212a}kKk\\x{212a}!\n\n# End caseless restrict tests\n\n# TESTS for PCRE2_EXTRA_TURKISH_CASING - again, tests with and without.\n\n/i/i,utf\n    i\n    I\n\\= Expect no match\n    \\x{0130}\n    \\x{0131}\n\n/i/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/I/i,utf\n    i\n    I\n\\= Expect no match\n    \\x{0130}\n    \\x{0131}\n\n/I/i,utf,turkish_casing\n    I\n    \\x{0131}\n\\= Expect no match\n    i\n    \\x{0130}\n\n/\\x{0130}/i,utf\n    \\x{0130}\n\\= Expect no match\n    i\n    I\n    \\x{0131}\n\n/\\x{0130}/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/\\x{0131}/i,utf\n    \\x{0131}\n\\= Expect no match\n    i\n    I\n    \\x{0130}\n\n/\\x{0131}/i,utf,turkish_casing\n    I\n    \\x{0131}\n\\= Expect no match\n    i\n    \\x{0130}\n\n/[i]/i,utf\n    i\n    I\n\\= Expect no match\n    \\x{0130}\n    \\x{0131}\n\n/[i]/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/[^i]/i,utf\n    \\x{0130}\n    \\x{0131}\n\\= Expect no match\n    i\n    I\n\n/[^i]/i,utf,turkish_casing\n    I\n    \\x{0131}\n\\= Expect no match\n    i\n    \\x{0130}\n\n/[\\x{0130}]/i,utf\n    \\x{0130}\n\\= Expect no match\n    i\n    I\n    \\x{0131}\n\n/[\\x{0130}]/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/[\\x{0120}-\\x{0130}]/i,utf\n    \\x{0130}\n\\= Expect no match\n    i\n    I\n    \\x{0131}\n\n/[\\x{0120}-\\x{0130}]/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/[zi]/i,utf\n    i\n    I\n\\= Expect no match\n    \\x{0130}\n    \\x{0131}\n\n/[zi]/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/[z\\x{0130}]/i,utf\n    \\x{0130}\n\\= Expect no match\n    i\n    I\n    \\x{0131}\n\n/[z\\x{0130}]/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/[iI]/i,utf\n    i\n    I\n\\= Expect no match\n    \\x{0130}\n    \\x{0131}\n\n/[iI]/i,utf,turkish_casing\n    i\n    I\n    \\x{0130}\n    \\x{0131}\n\n/[i\\x{0130}]/i,utf\n    i\n    I\n    \\x{0130}\n\\= Expect no match\n    \\x{0131}\n\n/[i\\x{0130}]/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/(.) \\1/i,utf\n    i I\n\\= Expect no match\n    i \\x{0130}\n    \\x{0131} I\n\n/(*TURKISH_CASING)(.) \\1/i,utf\n    i \\x{0130}\n    \\x{0131} I\n\\= Expect no match\n    i I\n\n/(.) \\1/i,utf,turkish_casing\n    i \\x{0130}\n    \\x{0131} I\n\\= Expect no match\n    i I\n\n/i/i,utf,caseless_restrict,turkish_casing\n\n/i/i,turkish_casing\n\n/i/i,utf,caseless_restrict\n    i\n\n/i/i,ucp,caseless_restrict\n    i\n\n/b(?r:[\\x{00FF}-\\x{FFEE}])/i,utf,turkish_casing\n    b\\x{0130}\n    b\\x{0131}\n\\= Expect no match\n    bi\n    bI\n    bk\n\n/[\\x60-\\x7f]/i,ucp\n    i\n    I\n\n/[\\x60-\\xc0]/i,ucp\n    i\n    I\n\n/[\\x80-\\xc0]/i,ucp\n\\= Expect no match\n    i\n    I\n\n# End Turkish casing tests\n\n# TESTS for PCRE2_EXTRA_ASCII_xxx - again, tests with and without.\n\n# DIGITS\n\n/\\d+/i,utf\n    123\\x{660}456\n\n/\\d+/i,utf,ucp\n    123\\x{660}456\n\n/\\d+/i,utf,ucp,ascii_bsd\n    123\\x{660}456\n\n/[\\d]+/i,utf\n    123\\x{660}456\n\n/[\\d]+/i,utf,ucp\n    123\\x{660}456\n\n/[\\d]+/i,utf,ucp,ascii_bsd\n    123\\x{660}456\n\n/\\d(?aD)\\d(?-aD)\\d/utf,ucp\n    \\x{660}9\\x{660}\n\\= Expect no match     \n    \\x{660}\\x{660}\\x{660}\n\n/\\d(?-aD)\\d(?aD)\\d/utf,ucp,ascii_bsd\n    999\n    9\\x{660}9\n\n/\\d(?a)\\d(?-a)\\d/utf,ucp\n    \\x{660}9\\x{660}\n\\= Expect no match     \n    \\x{660}\\x{660}\\x{660}\n\n/\\d(?-aD)\\d(?aD)\\d/utf,ucp,ascii_bsd\n    999\n    9\\x{660}9\n\n# SPACES\n\n/>\\s+</i,utf\n    >  <\n\\= Expect no match     \n    >\\x{a0} <\n\n/>\\s+</i,utf,ucp\n    >  <\n    >\\x{a0} <\n\n/>\\s+</i,utf,ucp,ascii_bss\n    >  <\n\\= Expect no match     \n    >\\x{a0} <\n\n/>[\\s]+</i,utf\n    >  <\n\\= Expect no match     \n    >\\x{a0} <\n\n/>[\\s]+</i,utf,ucp\n    >  <\n    >\\x{a0} <\n\n/>[\\s]+</i,utf,ucp,ascii_bss\n    >  <\n\\= Expect no match     \n    >\\x{a0} <\n\n/>\\s(?aS)\\s(?-aS)\\s</utf,ucp\n    >\\x{a0} \\x{a0}<\n\\= Expect no match     \n    >\\x{a0}\\x{a0}\\x{a0}<\n\n/>\\s(?a)\\s(?-a)\\s</utf,ucp\n    >\\x{a0} \\x{a0}<\n\\= Expect no match     \n    >\\x{a0}\\x{a0}\\x{a0}<\n    \n# WORDS\n\n/\\w+/i,utf\n    123\\x{660}abc\n\n/\\w+/i,utf,ucp\n    123\\x{660}abc\n\n/\\w+/i,utf,ucp,ascii_bsw\n    123\\x{660}abc\n\n/[\\w]+/i,utf\n    123\\x{660}abc\n\n/[\\w]+/i,utf,ucp\n    123\\x{660}abc\n\n/[\\w]+/i,utf,ucp,ascii_bsw\n    123\\x{660}abc\n\n/\\w(?aW)\\w(?-aW)\\w/utf,ucp\n    \\x{660}A\\x{c0}\n\\= Expect no match     \n    \\x{660}\\x{c0}\\x{c0}\n\n/\\w(?a)\\w(?-a)\\w/utf,ucp\n    \\x{660}A\\x{c0}\n\\= Expect no match     \n    \\x{660}\\x{c0}\\x{c0}\n    \n# WORD BOUNDARY\n\n/\\bABC\\b/utf\n    \\x{c0}ABC\\x{d0}\n\n/\\bABC\\b/utf,ucp\n\\= Expect no match\n    \\x{c0}ABC\\x{d0}\n\n/\\bABC\\b/utf,ucp,ascii_bsw\n    \\x{c0}ABC\\x{d0}\n\n/\\bABC\\b/utf,ucp,ascii_all\n    \\x{c0}ABC\\x{d0}\n    \n# POSIX \n\n/^[[:digit:]]+$/utf,ucp\n    123456\n    123\\x{660}456\n\n/^[[:digit:]]+$/utf,ucp,ascii_digit\n    123456\n\\= Expect no match\n    123\\x{660}456\n\n/[[:digit:]]+/g,utf,ucp,ascii_digit\n    123\\x{660}456\n\n/(?-aT)[[:digit:]](?aT)[[:digit:]]/utf,ucp,ascii_digit\n    11\n    \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\n\n/(?-aT:[[:digit:]])[[:digit:]]/utf,ucp,ascii_digit\n    11\n    \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\n\n/(?-aT:[[:digit:]])[[:digit:]]/utf,never_ucp,ascii_digit\n    11\n\\= Expect no match\n    \\x{ff11}1\n    1\\x{ff11}\n\n/[[:digit:]]+/utf,ucp,ascii_posix\n    123\\x{660}456\n\n/(?-aP)[[:digit:]](?aP)[[:digit:]]/utf,ucp,ascii_posix\n    11\n    \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\n\n/(?-aP:[[:digit:]])[[:digit:]]/utf,ucp,ascii_posix\n    11\n    \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\n\n/(?-a:[[:digit:]])[[:digit:]]/a,utf,ucp\n    11\n    \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\n\n/^[[:xdigit:]]+$/utf,ucp\n    f0\n    1A\n    d\\x{ff10}\n    \\x{ff26}8\n\\= Expect no match\n    8g\\=no_jit\n\n/^[[:xdigit:]]+$/utf,ucp,ascii_digit\n    f0\n    1A\n\\= Expect no match\n    d\\x{ff10}\n    \\x{ff26}8\n    8g\n\n/>[[:space:]]+</utf,ucp\n    >\\x{a0} \\x{a0}<\n    >\\x{a0}\\x{a0}\\x{a0}<\n\n/>[[:space:]]+</utf,ucp,ascii_posix\n\\= Expect no match     \n    >\\x{a0} \\x{a0}<\n\n/(?aP)[[:alnum:]]+/i,ucp,utf\n    abcáxyz\n    abc\\x{660}xyz\n\n/(?aP)[[:alnum:]\\d]+/i,ucp,utf\n    abc\\x{660}xyz\n    \n/(*UCP)(*UTF)[[:alnum:]](?aP:[[:alnum:]])[[:alnum:]]/\n    \\x{660}A\\x{660}\n\\= Expect no match     \n    \\x{660}\\x{660}\\x{660}\n    \n# VARIOUS\n\n/[\\d\\s\\w]+/a,ucp,utf\n    9 A\\x{660}À \n    9 AÀ\\x{660} \n\n# End PCRE2_EXTRA_ASCII_xxx tests\n\n/(?<!(|l ))/utf\n    (?<!(|l ))\n\n/\\p{BC: A=}/utf\n\n/abc/utf,substitute_extended,replace=>\\777<\n    abc\n\n/a(?<namED_1>b)c/utf,substitute_extended\n    abc\\=replace=>${namED_1}<\n\n/a(?<namedverylongbutperfectlylegalsoyoushouldnthaveaproblem_1>b)c/utf,substitute_extended\n    abc\\=replace=>${namedverylongbutperfectlylegalsoyoushouldnthaveaproblem_1}<\n\n/a(?<nämed>b)c/utf,substitute_extended\n    abc\\=replace=>${nämed}<\n\n/a(?<nämedverylongbutperfectlylegalsoyoushouldnthaveaproblem_٢>b)c/utf,substitute_extended\n    abc\\=replace=>${nämedverylongbutperfectlylegalsoyoushouldnthaveaproblem_٢}<\n\n# python_octal\n\n/\\400/utf\n    \\o{400}\n\n/\\400/utf,python_octal\n\n/abc/utf,substitute_extended\n    abc\\=replace=\\400\n\n/abc/utf,substitute_extended,python_octal\n    abc\\=replace=\\400\n\n# Character range merging tests\n\n/[\\x{1200}\\s\\x{1202}\\d\\x{1201}]+/B,utf,ucp\n    \\x{11ff}\\x{1200}\\x{1201}\\x{1202}\\x{1203}\n\n/[\\x{2000}-\\x{2500}\\x{2100}-\\x{2600}\\d\\x{1800}-\\x{1fff}]+/B,utf,ucp\n    \\x{17ff}\\x{1800}\\x{2600}\\x{2601}\n\n/[\\x{10008}\\x{10003}\\x{10006}\\x{10004}\\x{10007}]+/B,utf\n    \\x{10002}\\x{10005}\\x{10003}\\x{10004}\\x{10006}\\x{10007}\\x{10008}\\x{10009}\n\n/[\\x{100}-\\x{400}]+/Bi,utf\n    qS\\x{ff}\\x{100}\\x{a7c5}\\x{401}\n    \\x{2c63}\\x{2c64}\\x{2c65}\\x{2c66}\\x{2c67}\n    \\x{a7af}\\x{a7b0}\\x{a7b1}\\x{a7b2}\\x{a7b3}\n\n/[\\x{100}-\\x{400}\\p{Ll}\\x{500}-\\x{700}\\p{OldHungarian}\\x{701}\\p{bidiLRI}]/B,utf\n\n/[\\pC\\x{100}-\\x{200}\\h\\pN]/B,utf\n\n/[\\pC\\x{100}-\\x{200}\\v\\pN]/B,utf\n\n/[\\pC\\x{100}-\\x{200}\\H\\pN]/B,utf\n\n/[\\pC\\x{100}-\\x{200}\\V\\pN]/B,utf\n\n/[\\x{16e49}-\\x{16e4f}\\x{20000}\\x{16e40}-\\x{16e48}\\pN]/Bi,utf\n\n/[\\x80-\\x{4000}\\x90\\x{400}-\\x{f000}\\xa0\\x{4000}-\\x{10ffff}]++/B,utf\n    \\x{7f}\\x{80}\\x{100}\\x{10fffe}\\x{10ffff}\\x00\n\n/[\\x80-\\x{4000}\\x90\\x{400}-\\x{f000}\\xa0\\pN\\x{4000}-\\x{10ffff}]++/B,utf\n    \\x{7f}\\x{80}\\x{100}090\\x{10fffe}\\x{10ffff}\\x00\n\n/[\\x00-\\x{4000}\\x{2000}-\\x{10ffff}]++/B,utf\n    abcd\n\n/[abc\\p{Any}]{5,7}/B,utf\n    xyz\n\n/[^\\p{Any}\\x34\\p{Any}]*cat/B,utf\n    cat\n\n/[\\pN\\xf0-\\x{10ffff}]{5,8}/B,utf\n    ab0123456cd\n\n/[\\x00-\\x{398}\\x{39a}-\\x{10ffff}]*#(?i)[\\x00-\\x{398}\\x{39a}-\\x{10ffff}]*?#/B,utf\n    abcd#efg#\n\n# Freeing memory on error test\n/[\\x{100}-\\x{400}][\\x{100}-\\x{300}][\\x{100}-\\x{200}]\\8/i,utf\n\n# Character list tests\n\n/[\\x{100}-\\x{7fff}\\x{d7b0}\\x{d7b1}\\x{d7b3}\\x{d7b4}\\x{d7b6}\\x{d7b7}\\x{d7b9}\\x{d7ba}]{12}/B,utf\n  \\x{8000}\\x{d7af}\\x{d7b2}\\x{d7b5}\\x{d7b8}\\x{d7bb}\\x{100}\\x{800}\\x{7000}\\x{7fff}\\x{d7b0}\\x{d7b1}\\x{d7b3}\\x{d7b4}\\x{d7b6}\\x{d7b7}\\x{d7b9}\\x{d7ba}\\x{100}\n\n/([\\x{6535}\\x{6536}\\x{6538}\\x{6539}\\x{653b}\\x{653c}\\x{653e}\\x{653f}\\x{6541}\\x{6542}\\x{8000}-\\x{ffff}]#)+/B,utf\n  \\x{6534}#\\x{6537}#\\x{653a}#\\x{653d}#\\x{6540}#\\x{6543}#\\x{7fff}#\\x{6535}#\\x{6536}#\\x{6538}#\\x{6539}#\\x{653b}#\\x{653c}#\\x{653e}#\\x{653f}#\\x{6541}#\\x{6542}#\\x{8000}#\\x{c246}#\\x{ffff}\n\n/[\\x{ff}\\x{100}\\x{8000}\\x{8002}\\x{8004}\\x{8006}\\x{8008}\\x{800a}\\x{800c}\\x{800e}]+/B,utf\n  \\x{ff}\\x{100}\\x{8000}\\x{800a}\\x{800e}\\x{101}\n\n/[\\x{ff}-\\x{104}\\x{8000}\\x{8002}\\x{8004}\\x{8006}\\x{8008}\\x{800a}\\x{800c}\\x{800e}]+/B,utf\n  \\x{ff}\\x{100}\\x{101}\\x{104}\\x{8000}\\x{800a}\\x{800e}\\x{105}\n\n/[[:xdigit:]\\x{400}-\\x{600}]+/utf,ucp\n  !a0\\x{400}\\x{600}9\\x{3ff}\n\n/[^[:xdigit:]\\x{400}-\\x{600}]+/utf,ucp\n  \\x{400}(\\x{3ff}\\x{601})\\x{600}\n\n/[[:xdigit:]\\x{400}-\\x{600}\\x{700}]+/utf,ucp\n  !A0\\x{700}9\\x{601}\n\n/[^[:xdigit:]\\x{400}-\\x{600}\\x{700}]+/utf,ucp\n  \\x{600}(\\x{6ff}\\x{701}\\x{3ff}\\x{601})\\x{700}\n\n/[[:xdigit:]\\x{400}-\\x{600}\\x{700}-\\x{800}\\x{900}]+/utf,ucp\n  !f0\\x{800}\\x{600}9\\x{601}\n\n/[^[:xdigit:]\\x{400}-\\x{600}\\x{700}-\\x{800}\\x{900}]+/utf,ucp\n  \\x{700}[\\x{3ff}\\x{601}\\x{6ff}\\x{801}\\x{8ff}\\x{901}]\\x{900}\n\n/[[:xdigit:]\\x{400}-\\x{410}\\x{500}\\x{600}-\\x{610}\\x{700}\\x{800}-\\x{810}]+/utf,ucp\n  !F0\\x{400}\\x{410}\\x{500}\\x{600}\\x{610}\\x{700}\\x{800}\\x{810}9\\x{7ff}\n\n/[^[:xdigit:]\\x{400}-\\x{410}\\x{500}\\x{600}-\\x{610}\\x{700}\\x{800}-\\x{810}]+/utf,ucp\n  \\x{800}<\\x{3ff}\\x{411}\\x{4ff}\\x{501}\\x{5ff}\\x{611}\\x{6ff}\\x{701}\\x{7ff}\\x{811}>\\x{810}\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (UTS#18)\n\n/[\\p{Lu}[\\p{Nd}]]/B,alt_extended_class\n    0\n    C\n\\= Expect no match\n    [\n    a\n\n/[[\\pL][\\p{Nd}]]/B,alt_extended_class\n    0\n    a\n\\= Expect no match\n    [\n    ]\n\n/[[\\p{Lu}]||[\\p{Nd}]]/B,alt_extended_class\n    A\n    1\n\\= Expect no match\n    a\n\n/[[^\\pL][\\p{Nd}]]/B,alt_extended_class\n    0\n    .\n\\= Expect no match\n    A\n\n/[^[\\pL][\\p{Nd}]]/B,alt_extended_class\n    .\n\\= Expect no match\n    A\n    0\n\n/[^[\\pL]&&[\\p{Nd}]]/B,alt_extended_class\n    A\n    0\n\n/[[\\p{Lu}\\p{Ll}]||[\\p{Nd}\\p{Ll}]]/B,alt_extended_class\n    A\n    1\n    c\n\\= Expect no match\n    _\n\n/[[\\p{Lu}\\p{Ll}]&&[\\p{Nd}\\p{Ll}]]/B,alt_extended_class\n    c\n\\= Expect no match\n    A\n    1\n    _\n\n/[[\\p{Lu}\\p{Ll}]--[\\p{Nd}\\p{Ll}]]/B,alt_extended_class\n    A\n\\= Expect no match\n    1\n    c\n    _\n\n/[[\\p{Lu}\\p{Ll}]~~[\\p{Nd}\\p{Ll}]]/B,alt_extended_class\n    A\n    1\n\\= Expect no match\n    c\n    _\n\n/[\\pL[]]]/B,alt_extended_class\n    A\n    ]\n\\= Expect no match\n    [\n\n/[\\pL[^]]]/B,alt_extended_class\n    A\n    [\n    0\n\\= Expect no match\n    ]\n\n/[\\pL[]]/B,alt_extended_class,allow_empty_class\n    A\n\\= Expect no match\n    ]\n    [\n\n/[\\pL[^]]/B,alt_extended_class,allow_empty_class\n    A\n    0\n    [\n    ]\n\n/[\\dAC-E[:space:]\\p{Lu}&&[^z]]/B,alt_extended_class\n    0\n    A\n    C\n    D\n    E\n    \\t\n\\= Expect no match\n    a\n    ;\n\n/[z||[^\\dAC-E[:space:]\\p{Lu}]]/B,alt_extended_class\n    z\n    ;\n\\= Expect no match\n    0\n    A\n    C\n    D\n    E\n    B\n    F\n    \\t\n\n/[\\p{Lu}\\p{Nd}||cd]/B,alt_extended_class\n    A\n    0\n    c\n\\= Expect no match\n    e\n\n/[[\\p{Lu}]\\p{Nd}||[c]d]/B,alt_extended_class\n    A\n    0\n    c\n\\= Expect no match\n    e\n\n/[\\p{Lu}[\\p{Nd}]||c[d]]/B,alt_extended_class\n    A\n    0\n    c\n\\= Expect no match\n    e\n\n/[\\p{Lu}-]/B,alt_extended_class\n    A\n    -\n\\= Expect no match\n    a\n\n/[-\\p{Lu}]/B,alt_extended_class\n    A\n    -\n\\= Expect no match\n    a\n\n/[\\pL-]/B,alt_extended_class\n    A\n    -\n\\= Expect no match\n    0\n\n/[-\\pL]/B,alt_extended_class\n    A\n    -\n\\= Expect no match\n    0\n\n/[\\p{Lu}-]/B\n    A\n    -\n\\= Expect no match\n    a\n\n/[-\\p{Lu}]/B\n    A\n    -\n\\= Expect no match\n    a\n\n/[\\pL-]/B\n    A\n    -\n\\= Expect no match\n    0\n\n/[-\\pL]/B\n    A\n    -\n\\= Expect no match\n    0\n\n/[\\p{Lu}-z]/B,alt_extended_class\n\n/[z-\\p{Lu}]/B,alt_extended_class\n\n/[\\pL-z]/B,alt_extended_class\n\n/[z-\\pL]/B,alt_extended_class\n\n/[\\p{Lu}-&&-\\pL]/B,alt_extended_class\n    -\n    A\n\\= Expect no match\n    a\n\n/[-\\p{Lu}&&\\pL-]/B,alt_extended_class\n    -\n    A\n\\= Expect no match\n    a\n\n/[[\\p{Lu}]-&&-[\\pL]]/B,alt_extended_class\n    -\n    A\n\\= Expect no match\n    a\n\n/[-[\\p{Lu}]&&[\\pL]-]/B,alt_extended_class\n    -\n    A\n\\= Expect no match\n    a\n\n/(?xx:[  ^  5[  ^  \\p{Nd}]  ])/B,alt_extended_class\n    4\n\\= Expect no match\n    a\n    ;\n    5\n\n/(?xx:[  ^  \\p{Nd}[  ^  5]  ])/B,alt_extended_class\n\\= Expect no match\n    a\n    ;\n    4\n    5\n\n/(?xx:[  ^  \\p{Nd}[  ^  \\p{Nd}]  ])/B,alt_extended_class\n\\= Expect no match\n    a\n    ;\n    4\n    5\n\n/[  ^  \\p{Ll}[  ^  \\p{Nd}]  ]/B,alt_extended_class\n    \\x20\n    ^\n    a\n    0\n\\= Expect no match\n    A\n    ;\n\n/[a-c--\\p{Nd}]+/B,alt_extended_class\n    ac\n    a\n\\= Expect no match\n    0\n\n/[a-c--\\p{Nd}]{2,3}/B,alt_extended_class\n    ac\n    cac\n\\= Expect no match\n    a\n    00\n\n/x[a-c--\\p{Nd}]+y/B,alt_extended_class\n    xacy\n    xaay\n    xay\n\\= Expect no match\n    zacy\n    xacz\n    xy\n    x0y\n\n/[\\pL--\\pL--\\pL]/B,alt_extended_class\n\\= Expect no match\n    A\n    1\n\n/[[\\pL--\\pL]--\\pL]/B,alt_extended_class\n\\= Expect no match\n    A\n    1\n\n/[\\pL--[\\pL--\\pL]]/B,alt_extended_class\n    A\n\\= Expect no match\n    1\n\n/[\\pL--^\\p{Nd}]/B,alt_extended_class\n    A\n\\= Expect no match\n    1\n    ^\n\n/([a-z--[\\pL&&n]])\\1/B,alt_extended_class\n    aa\n    zz\n\\= Expect no match\n    az\n    nn\n\n/(x[a-z--[\\pL&&n]]y)\\1/B,alt_extended_class\n    xayxay\n    xzyxzy\n\\= Expect no match\n    xnyxny\n\n/(?:_\\1|([a-z--[\\pL&&n]])){2}/B,alt_extended_class\n    a_a\n    z_z\n\\= Expect no match\n    a_z\n    n_n\n\n/(?:_\\1|([a-z--[\\pL&&n]]))+/B,alt_extended_class\n    a_a\n    z_z\n    a_partial\n\\= Expect no match\n    n_n\n\n/[\\p{Nd}||[\\pL--\\p{Lu}]]/B,alt_extended_class\n    a\n    0\n\\= Expect no match\n    C\n\n/[\\P{Nd}||2]/B,alt_extended_class\n    _\n    Z\n    2\n\\= Expect no match\n    1\n    3\n\n/[^[\\P{Nd}]]/B,alt_extended_class\n    1\n    2\n\\= Expect no match\n    _\n    z\n\n# caseless tests\n\n/[\\p{Lu}~~\\p{Ll}]/B,alt_extended_class\n    a\n    A\n\\= Expect no match\n    _\n    1\n\n/[[\\p{Lu}1]~~\\p{Ll}]/iB,alt_extended_class\n    1\n\\= Expect no match\n    a\n    A\n    _\n\n/[[\\p{Lu}1]&&[\\p{Ll}1]]/B,alt_extended_class\n    1\n\\= Expect no match\n    a\n    A\n    _\n    2\n\n/[[\\p{Lu}1]&&[\\p{Ll}1]]/iB,alt_extended_class\n    a\n    A\n    1\n\\= Expect no match\n    _\n    2\n    \\\n\n/[\\p{Thai}&&\\p{Nd}]/B,utf,alt_extended_class\n    \\x{0e51}\n\\= Expect no match\n    0\n    a\n    \\x{0e01}\n\n/[\\p{Thai}||\\p{Nd}]/B,utf,alt_extended_class\n    \\x{0e51}\n    \\x{0e01}\n    0\n\\= Expect no match\n    a\n\n/[\\p{Thai}~~\\p{Nd}]/B,utf,alt_extended_class\n    \\x{0e01}\n    0\n\\= Expect no match\n    \\x{0e51}\n    a\n\n/[[\\p{Thai}&&\\p{Nd}]~~[^a]]/B,utf,alt_extended_class\n    \\x{0e01}\n    b\n    0\n\\= Expect no match\n    a\n    \\x{0e51}\n\n/^[\\p{Thai}&&\\p{Nd}]?$/B,utf,alt_extended_class\n    \\x{0e51}\n    \\\n\\= Expect no match\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]??$/B,utf,alt_extended_class\n    \\x{0e51}\n    \\\n\\= Expect no match\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]?+$/B,utf,alt_extended_class\n    \\x{0e51}\n    \\\n\\= Expect no match\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]{3}$/B,utf,alt_extended_class\n    \\x{0e51}\\x{0e51}\\x{0e51}\n\\= Expect no match\n    \\x{0e51}\n    \\\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]{3,}$/B,utf,alt_extended_class\n    \\x{0e51}\\x{0e51}\\x{0e51}\\x{0e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n\\= Expect no match\n    \\x{0e51}\n    \\\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]{3,}?$/B,utf,alt_extended_class\n    \\x{0e51}\\x{0e51}\\x{0e51}\\x{0e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n\\= Expect no match\n    \\x{0e51}\n    \\\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]{3,}+$/B,utf,alt_extended_class\n    \\x{0e51}\\x{0e51}\\x{0e51}\\x{0e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n\\= Expect no match\n    \\x{0e51}\n    \\\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]{,3}$/B,utf,alt_extended_class\n    \\\n    \\x{0e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n\\= Expect no match\n    \\x{0e51}\\x{0e51}\\x{0e51}\\x{0e51}\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]{,3}?$/B,utf,alt_extended_class\n    \\\n    \\x{0e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n\\= Expect no match\n    \\x{0e51}\\x{0e51}\\x{0e51}\\x{0e51}\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]{,3}+$/B,utf,alt_extended_class\n    \\\n    \\x{0e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n\\= Expect no match\n    \\x{0e51}\\x{0e51}\\x{0e51}\\x{0e51}\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]+\\x{0e51}$/B,utf,alt_extended_class\n    \\x{0e51}\\x{0e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n\\= Expect no match\n    \\x{0e51}\n    \\\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]+?\\x{0e51}$/B,utf,alt_extended_class\n    \\x{0e51}\\x{0e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n\\= Expect no match\n    \\x{0e51}\n    \\\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]++\\x{0e51}$/B,utf,alt_extended_class\n\\= Expect no match\n    \\x{0e51}\n    \\x{0e51}\\x{0e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n    \\\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]*\\x{0e51}$/B,utf,alt_extended_class\n    \\x{0e51}\n    \\x{0e51}\\x{0e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n\\= Expect no match\n    \\\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]*?\\x{0e51}$/B,utf,alt_extended_class\n    \\x{0e51}\n    \\x{0e51}\\x{0e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n\\= Expect no match\n    \\\n    a\n\n/^[\\p{Thai}&&\\p{Nd}]*+\\x{0e51}$/B,utf,alt_extended_class\n\\= Expect no match\n    \\x{0e51}\n    \\x{0e51}\\x{0e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n    \\\n    a\n\n/[^[^\\p{Thai}]]/B,utf,alt_extended_class\n    \\x{0e51}\n\\= Expect no match\n    a\n\n/[^[^\\p{L}]]/B,utf,alt_extended_class\n    \\x{0e01}\n    a\n\\= Expect no match\n    0\n\n/[\\pL&&[^\\x00-\\xFF]]/B,utf,alt_extended_class\n    \\x{21e}\n\\= Expect no match\n    a\n\n/[\\pL&&\\x{100}-\\x{1000}]{3,6}+/utf,alt_extended_class\n    \\x{145}\\x{18b}A\\x{145}\\x{18b}\\x{1C2}\\x{21a}\\x{257}\\x{2ae}\\x{0145}\\x{18b}\n    \\x{145}A\\x{145}\\x{18b}\\x{1C2}B\n\n/[\\pL&&\\x{100}-\\x{1000}]{3,6}\\x{2A3}/utf,alt_extended_class\n    \\x{145}\\x{18b}\\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\\x{2a3}\n    \\x{145}\\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{2a3}\n    \\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{2a3}\\x{2a3}\n    \\x{0145}\\x{18b}\\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\\x{145}\\x{2a3}\n\n/[\\pL&&\\x{100}-\\x{1000}]{3,6}?\\x{2A3}/utf,alt_extended_class\n    \\x{145}\\x{18b}\\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\\x{2a3}\n    \\x{145}\\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{2a3}\n    \\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{2a3}\\x{2a3}\n    \\x{0145}\\x{18b}\\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\\x{145}\\x{2a3}\n\n/[\\P{scx=Beng}\\P{scx=Deva}\\pM--[\\x{2000}-\\x{3000}]]+/utf,alt_extended_class\n    \\x{964}\\x{2000}\\x{3000}A\\x{951}\\x{1fff}\\x{3001}\\x{965}\n\n/[\\p{Thai}~~[^]]/B,utf,alt_extended_class,allow_empty_class\n    \\x{0d01}\n    a\n\\= Expect no match\n    \\x{0e01}\n\n/[[]~~[^]]/B,utf,alt_extended_class,allow_empty_class\n    \\x{0d01}\n    a\n\n/[[^]~~[]]/B,utf,alt_extended_class,allow_empty_class\n    \\x{0d01}\n    a\n\n/[[^]~~[^]]/B,utf,alt_extended_class,allow_empty_class\n\\= Expect no match\n    \\x{0d01}\n    a\n\n/[[^]||\\pL]/B,utf,alt_extended_class,allow_empty_class\n    0\n    a\n\n/[\\pL||[^]]/B,utf,alt_extended_class,allow_empty_class\n    0\n    a\n\n/[\\pL~~[^]]/B,utf,alt_extended_class,allow_empty_class\n    0\n\\= Expect no match\n    a\n\n/[[^]~~\\pL]/B,utf,alt_extended_class,allow_empty_class\n    0\n\\= Expect no match\n    a\n\n/([\\p{Lu}&&\\p{sc=Hung}]+?\\x{10c81})+#/utf,alt_extended_class\n    \\x{10c80}\\x{10cb2}\\x{10c81}\\x{10c85}\\x{10cb0}\\x{10cf2}\\x{10c81}#\\x{10c80}\\x{10cb2}\\x{10c81}\\x{10c85}\\x{10cb0}\\x{10c81}##\n\n/[[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]]/utf,alt_extended_class\n\n# --------------\n\n/^([\\h\\x{9000}\\x{9002}\\x{9004}][\\v\\x{9000}\\x{9002}\\x{9004}\\x{9006}\\x{9008}][\\h\\v\\x{9000}],){4}$/B,utf\n  \\x09\\x0a\\x0d,\\x{1680}\\x{2028}\\x{1680},\\x{180e}\\x{2029}\\x{180e},\\x{9000}\\x{9000}\\x{9000},\n\n/[z-\\p{Lu}]/\n\n/[z-\\pL]/\n\n/[\\p{Lu}-z]/\n\n/[\\pL-z]/\n\n/[a\\x{e1}]/iB\n    a\n    A\n    \\x{e1}\n\n/[a\\x{e1}]/iB,utf\n    a\n    A\n    \\x{e1}\n    \\x{c1}\n\n/[a\\x{e1}]/iB,ucp\n    a\n    A\n    \\x{e1}\n    \\x{c1}\n\n/[a\\x{e1}]/iB,ucp,utf\n    a\n    A\n    \\x{e1}\n    \\x{c1}\n\n# End of testinput5\n"
  },
  {
    "path": "testdata/testinput6",
    "content": "# This set of tests check the DFA matching functionality of pcre2_dfa_match(),\n# excluding UTF and Unicode property support. All matches are done using DFA,\n# forced by setting a default subject modifier at the start.\n    \n#forbid_utf\n#subject dfa\n#newline_default lf anycrlf any\n     \n/abc/\n    abc\n    \n/ab*c/\n    abc\n    abbbbc\n    ac\n    \n/ab+c/\n    abc\n    abbbbbbc\n\\= Expect no match \n    ac\n    ab\n    \n/a*/no_auto_possess\n    a\n    aaaaaaaaaaaaaaaaa\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\=ovector=10 \n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\=dfa_shortest\n    \n/(a|abcd|african)/\n    a\n    abcd\n    african\n    \n/^abc/\n    abcdef\n\\= Expect no match\n    xyzabc\n    xyz\\nabc    \n    \n/^abc/m\n    abcdef\n    xyz\\nabc    \n\\= Expect no match\n    xyzabc\n    \n/\\Aabc/\n    abcdef\n\\= Expect no match\n    xyzabc\n    xyz\\nabc    \n    \n/\\Aabc/m\n    abcdef\n\\= Expect no match\n    xyzabc\n    xyz\\nabc    \n    \n/\\Gabc/\n    abcdef\n    xyzabc\\=offset=3\n\\= Expect no match\n    xyzabc    \n    xyzabc\\=offset=2\n    \n/x\\dy\\Dz/\n    x9yzz\n    x0y+z\n\\= Expect no match\n    xyz\n    xxy0z     \n    \n/x\\sy\\Sz/\n    x yzz\n    x y+z\n\\= Expect no match\n    xyz\n    xxyyz\n    \n/x\\wy\\Wz/\n    xxy+z\n\\= Expect no match\n    xxy0z\n    x+y+z         \n    \n/x.y/\n    x+y\n    x-y\n\\= Expect no match\n    x\\ny\n    \n/x.y/s\n    x+y\n    x-y\n    x\\ny\n\n/(a.b(?s)c.d|x.y)p.q/\n    a+bc+dp+q\n    a+bc\\ndp+q\n    x\\nyp+q \n\\= Expect no match \n    a\\nbc\\ndp+q\n    a+bc\\ndp\\nq\n    x\\nyp\\nq \n\n/a\\d\\z/\n    ba0\n\\= Expect no match\n    ba0\\n\n    ba0\\ncd   \n\n/a\\d\\z/m\n    ba0\n\\= Expect no match\n    ba0\\n\n    ba0\\ncd   \n\n/a\\d\\Z/\n    ba0\n    ba0\\n\n\\= Expect no match\n    ba0\\ncd   \n\n/a\\d\\Z/m\n    ba0\n    ba0\\n\n\\= Expect no match\n    ba0\\ncd   \n\n/a\\d$/\n    ba0\n    ba0\\n\n\\= Expect no match\n    ba0\\ncd   \n\n/a\\d$/m\n    ba0\n    ba0\\n\n    ba0\\ncd   \n\n/abc/i\n    abc\n    aBc\n    ABC\n    \n/[^a]/\n    abcd\n    \n/ab?\\w/\n    abz\n    abbz\n    azz  \n\n/x{0,3}yz/\n    ayzq\n    axyzq\n    axxyz\n    axxxyzq\n    axxxxyzq\n\\= Expect no match\n    ax\n    axx     \n      \n/x{3}yz/\n    axxxyzq\n    axxxxyzq\n\\= Expect no match\n    ax\n    axx     \n    ayzq\n    axyzq\n    axxyz\n      \n/x{2,3}yz/\n    axxyz\n    axxxyzq\n    axxxxyzq\n\\= Expect no match\n    ax\n    axx     \n    ayzq\n    axyzq\n      \n/[^a]+/no_auto_possess\n    bac\n    bcdefax\n\\= Expect no match\n    aaaaa   \n\n/[^a]*/no_auto_possess\n    bac\n    bcdefax\n    aaaaa   \n    \n/[^a]{3,5}/no_auto_possess\n    xyz\n    awxyza\n    abcdefa\n    abcdefghijk\n\\= Expect no match\n    axya\n    axa\n    aaaaa         \n\n/\\d*/\n    1234b567\n    xyz\n    \n/\\D*/\n    a1234b567\n    xyz\n     \n/\\d+/\n    ab1234c56\n\\= Expect no match\n    xyz\n    \n/\\D+/\n    ab123c56\n\\= Expect no match\n    789\n    \n/\\d?A/\n    045ABC\n    ABC\n\\= Expect no match\n    XYZ\n    \n/\\D?A/\n    ABC\n    BAC\n    9ABC             \n\n/a+/\n    aaaa\n\n/^.*xyz/\n    xyz\n    ggggggggxyz\n    \n/^.+xyz/\n    abcdxyz\n    axyz\n\\= Expect no match\n    xyz\n    \n/^.?xyz/\n    xyz\n    cxyz       \n\n/^\\d{2,3}X/\n    12X\n    123X\n\\= Expect no match\n    X\n    1X\n    1234X     \n\n/^[abcd]\\d/\n    a45\n    b93\n    c99z\n    d04\n\\= Expect no match\n    e45\n    abcd      \n    abcd1234\n    1234  \n\n/^[abcd]*\\d/\n    a45\n    b93\n    c99z\n    d04\n    abcd1234\n    1234  \n\\= Expect no match\n    e45\n    abcd      \n\n/^[abcd]+\\d/\n    a45\n    b93\n    c99z\n    d04\n    abcd1234\n\\= Expect no match\n    1234  \n    e45\n    abcd      \n\n/^a+X/\n    aX\n    aaX \n\n/^[abcd]?\\d/\n    a45\n    b93\n    c99z\n    d04\n    1234  \n\\= Expect no match\n    abcd1234\n    e45\n\n/^[abcd]{2,3}\\d/\n    ab45\n    bcd93\n\\= Expect no match\n    1234 \n    a36 \n    abcd1234\n    ee45\n\n/^(abc)*\\d/\n    abc45\n    abcabcabc45\n    42xyz \n\n/^(abc)+\\d/\n    abc45\n    abcabcabc45\n\\= Expect no match\n    42xyz \n\n/^(abc)?\\d/\n    abc45\n    42xyz \n\\= Expect no match\n    abcabcabc45\n\n/^(abc){2,3}\\d/\n    abcabc45\n    abcabcabc45\n\\= Expect no match\n    abcabcabcabc45\n    abc45\n    42xyz \n\n/1(abc|xyz)2(?1)3/\n    1abc2abc3456\n    1abc2xyz3456 \n\n/^(a*\\w|ab)=(a*\\w|ab)/\n    ab=ab\n\n/^(a*\\w|ab)=(?1)/\n    ab=ab\n\n/^([^()]|\\((?1)*\\))*$/\n    abc\n    a(b)c\n    a(b(c))d  \n\\= Expect no match)\n    a(b(c)d  \n\n/^>abc>([^()]|\\((?1)*\\))*<xyz<$/\n    >abc>123<xyz<\n    >abc>1(2)3<xyz<\n    >abc>(1(2)3)<xyz<\n\n/^(?>a*)\\d/\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876\n\\= Expect no match \n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/< (?: (?(R) \\d++  | [^<>]*+) | (?R)) * >/x\n    <>\n    <abcd>\n    <abc <123> hij>\n    <abc <def> hij>\n    <abc<>def> \n    <abc<>      \n\\= Expect no match\n    <abc\n\n/^(?(?=abc)\\w{3}:|\\d\\d)$/\n    abc:                          \n    12                             \n\\= Expect no match                     \n    123                       \n    xyz                        \n                                \n/^(?(?!abc)\\d\\d|\\w{3}:)$/\n    abc:                        \n    12         \n\\= Expect no match\n    123\n    xyz    \n\n/^(?=abc)\\w{5}:$/\n    abcde:                          \n\\= Expect no match                     \n    abc.. \n    123                       \n    vwxyz                        \n                                \n/^(?!abc)\\d\\d$/\n    12         \n\\= Expect no match\n    abcde:\n    abc..  \n    123\n    vwxyz    \n\n/(?<=abc|xy)123/\n    abc12345\n    wxy123z\n\\= Expect no match\n    123abc\n\n/(?<!abc|xy)123/\n    123abc\n    mno123456 \n\\= Expect no match\n    abc12345\n    wxy123z\n\n/abc(?C1)xyz/\n    abcxyz\n    123abcxyz999 \n\n/(ab|cd){3,4}/auto_callout\n  ababab\n  abcdabcd\n  abcdcdcdcdcd  \n\n/^abc/\n    abcdef\n\\= Expect no match\n    abcdef\\=notbol\n\n/^(a*|xyz)/\n    bcd\n    aaabcd\n    xyz\n    xyz\\=notempty\n\\= Expect no match\n    bcd\\=notempty\n    \n/xyz$/\n    xyz\n    xyz\\n\n\\= Expect no match\n    xyz\\=noteol\n    xyz\\n\\=noteol\n    \n/xyz$/m\n    xyz\n    xyz\\n \n    abcxyz\\npqr \n    abcxyz\\npqr\\=noteol\n    xyz\\n\\=noteol\n\\= Expect no match\n    xyz\\=noteol\n\n/\\Gabc/\n    abcdef\n    defabcxyz\\=offset=3\n\\= Expect no match \n    defabcxyz\n\n/^abcdef/\n    ab\\=ps\n    abcde\\=ps\n    abcdef\\=ps\n\\= Expect no match\n    abx\\=ps\n\n/^a{2,4}\\d+z/\n    a\\=ps\n    aa\\=ps\n    aa2\\=ps\n    aaa\\=ps\n    aaa23\\=ps\n    aaaa12345\\=ps\n    aa0z\\=ps\n    aaaa4444444444444z\\=ps\n\\= Expect no match\n    az\\=ps\n    aaaaa\\=ps\n    a56\\=ps\n\n/^abcdef/\n   abc\\=ps\n   def\\=dfa_restart\n   \n/(?<=foo)bar/\n   foob\\=ps,offset=2,allusedtext\n   foobar...\\=ps,dfa_restart,offset=4\n   foobar\\=offset=2\n\\= Expect no match\n   xyzfo\\=ps\n   obar\\=dfa_restart\n\n/(ab*(cd|ef))+X/\n    lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\\=ps,notbol,noteol\n    cdabbbbbbbb\\=ps,notbol,dfa_restart,noteol\n    efabbbbbbbbbbbbbbbb\\=ps,notbol,dfa_restart,noteol\n    bbbbbbbbbbbbcdXyasdfadf\\=ps,notbol,dfa_restart,noteol\n\\= Expect no match\n    adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\\=ps,noteol\n\n/the quick brown fox/\n    the quick brown fox\n    What do you know about the quick brown fox?\n\\= Expect no match\n    The quick brown FOX\n    What do you know about THE QUICK BROWN FOX?\n\n/The quick brown fox/i\n    the quick brown fox\n    The quick brown FOX\n    What do you know about the quick brown fox?\n    What do you know about THE QUICK BROWN FOX?\n\n#if !ebcdic\n\n/abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz/\n    abcd\\t\\n\\r\\f\\a\\e9;\\$\\\\?caxyz\n\n#endif\n\n/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/\n    abxyzpqrrrabbxyyyypqAzz\n    abxyzpqrrrabbxyyyypqAzz\n    aabxyzpqrrrabbxyyyypqAzz\n    aaabxyzpqrrrabbxyyyypqAzz\n    aaaabxyzpqrrrabbxyyyypqAzz\n    abcxyzpqrrrabbxyyyypqAzz\n    aabcxyzpqrrrabbxyyyypqAzz\n    aaabcxyzpqrrrabbxyyyypAzz\n    aaabcxyzpqrrrabbxyyyypqAzz\n    aaabcxyzpqrrrabbxyyyypqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqqqAzz\n    aaaabcxyzpqrrrabbxyyyypqAzz\n    abxyzzpqrrrabbxyyyypqAzz\n    aabxyzzzpqrrrabbxyyyypqAzz\n    aaabxyzzzzpqrrrabbxyyyypqAzz\n    aaaabxyzzzzpqrrrabbxyyyypqAzz\n    abcxyzzpqrrrabbxyyyypqAzz\n    aabcxyzzzpqrrrabbxyyyypqAzz\n    aaabcxyzzzzpqrrrabbxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbbxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz\n    aaabcxyzpqrrrabbxyyyypABzz\n    aaabcxyzpqrrrabbxyyyypABBzz\n    >>>aaabxyzpqrrrabbxyyyypqAzz\n    >aaaabxyzpqrrrabbxyyyypqAzz\n    >>>>abcxyzpqrrrabbxyyyypqAzz\n\\= Expect no match\n    abxyzpqrrabbxyyyypqAzz\n    abxyzpqrrrrabbxyyyypqAzz\n    abxyzpqrrrabxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz\n    aaaabcxyzzzzpqrrrabbbxyyypqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz\n\n/^(abc){1,2}zz/\n    abczz\n    abcabczz\n\\= Expect no match\n    zz\n    abcabcabczz\n    >>abczz\n\n/^(b+?|a){1,2}?c/\n    bc\n    bbc\n    bbbc\n    bac\n    bbac\n    aac\n    abbbbbbbbbbbc\n    bbbbbbbbbbbac\n\\= Expect no match\n    aaac\n    abbbbbbbbbbbac\n\n/^(b+|a){1,2}c/\n    bc\n    bbc\n    bbbc\n    bac\n    bbac\n    aac\n    abbbbbbbbbbbc\n    bbbbbbbbbbbac\n\\= Expect no match\n    aaac\n    abbbbbbbbbbbac\n\n/^(b+|a){1,2}?bc/\n    bbc\n\n/^(b*|ba){1,2}?bc/\n    babc\n    bbabc\n    bababc\n\\= Expect no match\n    bababbc\n    babababc\n\n/^(ba|b*){1,2}?bc/\n    babc\n    bbabc\n    bababc\n\\= Expect no match\n    bababbc\n    babababc\n\n#if !ebcdic\n\n/^\\ca\\cA\\c[\\c{\\c:/\n    \\x01\\x01\\e;z\n\n#endif\n\n/^[ab\\]cde]/\n    athing\n    bthing\n    ]thing\n    cthing\n    dthing\n    ething\n\\= Expect no match\n    fthing\n    [thing\n    \\\\thing\n\n/^[]cde]/\n    ]thing\n    cthing\n    dthing\n    ething\n\\= Expect no match\n    athing\n    fthing\n\n/^[^ab\\]cde]/\n    fthing\n    [thing\n    \\\\thing\n\\= Expect no match\n    athing\n    bthing\n    ]thing\n    cthing\n    dthing\n    ething\n\n/^[^]cde]/\n    athing\n    fthing\n\\= Expect no match\n    ]thing\n    cthing\n    dthing\n    ething\n\n/^\\/\n    \n\n/^/\n    \n\n/^[0-9]+$/\n    0\n    1\n    2\n    3\n    4\n    5\n    6\n    7\n    8\n    9\n    10\n    100\n\\= Expect no match\n    abc\n\n/^.*nter/\n    enter\n    inter\n    uponter\n\n/^xxx[0-9]+$/\n    xxx0\n    xxx1234\n\\= Expect no match\n    xxx\n\n/^.+[0-9][0-9][0-9]$/\n    x123\n    xx123\n    123456\n    x1234\n\\= Expect no match\n    123\n\n/^.+?[0-9][0-9][0-9]$/\n    x123\n    xx123\n    123456\n    x1234\n\\= Expect no match\n    123\n\n/^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$/\n    abc!pqr=apquxz.ixr.zzz.ac.uk\n\\= Expect no match\n    !pqr=apquxz.ixr.zzz.ac.uk\n    abc!=apquxz.ixr.zzz.ac.uk\n    abc!pqr=apquxz:ixr.zzz.ac.uk\n    abc!pqr=apquxz.ixr.zzz.ac.ukk\n\n/:/\n    Well, we need a colon: somewhere\n\\= Expect no match\n    No match without a colon\n\n/([\\da-f:]+)$/i\n    0abc\n    abc\n    fed\n    E\n    ::\n    5f03:12C0::932e\n    fed def\n    Any old stuff\n\\= Expect no match\n    0zzz\n    gzzz\n    fed\\x20\n    Any old rubbish\n\n/^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/\n    .1.2.3\n    A.12.123.0\n\\= Expect no match\n    .1.2.3333\n    1.2.3\n    1234.2.3\n\n/^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$/\n    1 IN SOA non-sp1 non-sp2(\n    1    IN    SOA    non-sp1    non-sp2   (\n\\= Expect no match\n    1IN SOA non-sp1 non-sp2(\n\n/^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-Z\\d\\-]*)*\\.$/\n    a.\n    Z.\n    2.\n    ab-c.pq-r.\n    sxk.zzz.ac.uk.\n    x-.y-.\n\\= Expect no match\n    -abc.peq.\n\n/^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$/\n    *.a\n    *.b0-a\n    *.c3-b.c\n    *.c-a.b-c\n\\= Expect no match\n    *.0\n    *.a-\n    *.a-b.c-\n    *.c-a.0-c\n\n/^(?=ab(de))(abd)(e)/\n    abde\n\n/^(?!(ab)de|x)(abd)(f)/\n    abdf\n\n/^(?=(ab(cd)))(ab)/\n    abcd\n\n/^[\\da-f](\\.[\\da-f])*$/i\n    a.b.c.d\n    A.B.C.D\n    a.b.c.1.2.3.C\n\n/^\\\".*\\\"\\s*(;.*)?$/\n    \\\"1234\\\"\n    \\\"abcd\\\" ;\n    \\\"\\\" ; rhubarb\n\\= Expect no match\n    \\\"1234\\\" : things\n\n/^$/\n    \\\n\n/   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)/x\n    ab c\n\\= Expect no match\n    abc\n    ab cde\n\n/(?x)   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)/\n    ab c\n\\= Expect no match\n    abc\n    ab cde\n\n/^   a\\ b[c ]d       $/x\n    a bcd\n    a b d\n\\= Expect no match\n    abcd\n    ab d\n\n/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/\n    abcdefhijklm\n\n/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/\n    abcdefhijklm\n\n/^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]/\n    a+ Z0+\\x08\\n\\x1d\\x12\n\n/^[.^$|()*+?{,}]+/\n    .^\\$(*+)|{?,?}\n\n/^a*\\w/\n    z\n    az\n    aaaz\n    a\n    aa\n    aaaa\n    a+\n    aa+\n\n/^a*?\\w/\n    z\n    az\n    aaaz\n    a\n    aa\n    aaaa\n    a+\n    aa+\n\n/^a+\\w/\n    az\n    aaaz\n    aa\n    aaaa\n    aa+\n\n/^a+?\\w/\n    az\n    aaaz\n    aa\n    aaaa\n    aa+\n\n/^\\d{8}\\w{2,}/\n    1234567890\n    12345678ab\n    12345678__\n\\= Expect no match\n    1234567\n\n/^[aeiou\\d]{4,5}$/\n    uoie\n    1234\n    12345\n    aaaaa\n\\= Expect no match\n    123456\n\n/^[aeiou\\d]{4,5}?/\n    uoie\n    1234\n    12345\n    aaaaa\n    123456\n\n/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/\n    From abcd  Mon Sep 01 12:33:02 1997\n\n/^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d/\n    From abcd  Mon Sep 01 12:33:02 1997\n    From abcd  Mon Sep  1 12:33:02 1997\n\\= Expect no match\n    From abcd  Sep 01 12:33:02 1997\n\n/^12.34/s\n    12\\n34\n    12\\r34\n\n/\\w+(?=\\t)/\n    the quick brown\\t fox\n\n/foo(?!bar)(.*)/\n    foobar is foolish see?\n\n/(?:(?!foo)...|^.{0,2})bar(.*)/\n    foobar crowbar etc\n    barrel\n    2barrel\n    A barrel\n\n/^(\\D*)(?=\\d)(?!123)/\n    abc456\n\\= Expect no match\n    abc123\n\n/^1234(?# test newlines\n  inside)/\n    1234\n\n/^1234 #comment in extended re\n  /x\n    1234\n\n/#rhubarb\n  abcd/x\n    abcd\n\n/^abcd#rhubarb/x\n    abcd\n\n/(?!^)abc/\n    the abc\n\\= Expect no match\n    abc\n\n/(?=^)abc/\n    abc\n\\= Expect no match\n    the abc\n\n/^[ab]{1,3}(ab*|b)/no_auto_possess\n    aabbbbb\n\n/^[ab]{1,3}?(ab*|b)/no_auto_possess\n    aabbbbb\n\n/^[ab]{1,3}?(ab*?|b)/no_auto_possess\n    aabbbbb\n\n/^[ab]{1,3}(ab*?|b)/no_auto_possess\n    aabbbbb\n\n#if !ebcdic\n\n/  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                          # optional leading comment\n(?:    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n# address\n|                     #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)             # one word, optionally followed by....\n(?:\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037]  |  # atom and space parts, or...\n\\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)       |  # comments, or...\n\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n# quoted strings\n)*\n<  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                     # leading <\n(?:  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  ,  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n)* # further okay, if led by comma\n:                                # closing colon\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  )? #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n#       address spec\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  > #                  trailing >\n# name and address\n)  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                       # optional trailing comment\n/x\n    Alan Other <user\\@dom.ain>\n    <user\\@dom.ain>\n    user\\@dom.ain\n    \\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)\n    A. Other <user.1234\\@dom.ain> (a comment)\n    \\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay\n    A missing angle <user\\@some.where\n\\= Expect no match\n    The quick brown fox\n\n/[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional leading comment\n(?:\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# additional words\n)*\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n# address\n|                             #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n# leading word\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] *               # \"normal\" atoms and or spaces\n(?:\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n|\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n) # \"special\" comment or quoted string\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] *            #  more \"normal\"\n)*\n<\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# <\n(?:\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n(?: ,\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n)*  # additional domains\n:\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)?     #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# additional words\n)*\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n#       address spec\n>                    #                 >\n# name and address\n)\n/x\n    Alan Other <user\\@dom.ain>\n    <user\\@dom.ain>\n    user\\@dom.ain\n    \\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)\n    A. Other <user.1234\\@dom.ain> (a comment)\n    \\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay\n    A missing angle <user\\@some.where\n\\= Expect no match\n    The quick brown fox\n\n#endif\n\n/abc\\0def\\00pqr\\000xyz\\0000AB/\n    abc\\0def\\00pqr\\000xyz\\0000AB\n    abc456 abc\\0def\\00pqr\\000xyz\\0000ABCDE\n\n/abc\\x0def\\x00pqr\\x000xyz\\x0000AB/\n    abc\\x0def\\x00pqr\\x000xyz\\x0000AB\n    abc456 abc\\x0def\\x00pqr\\x000xyz\\x0000ABCDE\n\n/^[\\000-\\037]/\n    \\0A\n    \\01B\n    \\037C\n\n/\\0*/\n    \\0\\0\\0\\0\n\n/A\\x0{2,3}Z/\n    The A\\x0\\x0Z\n    An A\\0\\x0\\0Z\n\\= Expect no match\n    A\\0Z\n    A\\0\\x0\\0\\x0Z\n\n/^\\s/\n    \\040abc\n    \\x0cabc\n    \\nabc\n    \\rabc\n    \\tabc\n\\= Expect no match\n    abc\n\n/^a\tb\n    \f  c/x\n    abc\n\n/ab{1,3}bc/\n    abbbbc\n    abbbc\n    abbc\n\\= Expect no match\n    abc\n    abbbbbc\n\n/([^.]*)\\.([^:]*):[T ]+(.*)/\n    track1.title:TBlah blah blah\n\n/([^.]*)\\.([^:]*):[T ]+(.*)/i\n    track1.title:TBlah blah blah\n\n/([^.]*)\\.([^:]*):[t ]+(.*)/i\n    track1.title:TBlah blah blah\n\n#if !ebcdic\n\n/^[W-c]+$/\n    WXY_^abc\n\\= Expect no match\n    wxy\n\n/^[W-c]+$/i\n    WXY_^abc\n    wxy_^ABC\n\n/^[\\x3f-\\x5F]+$/i\n    WXY_^abc\n    wxy_^ABC\n\n#endif\n\n/^abc$/m\n    abc\n    qqq\\nabc\n    abc\\nzzz\n    qqq\\nabc\\nzzz\n\n/^abc$/\n    abc\n\\= Expect no match\n    qqq\\nabc\n    abc\\nzzz\n    qqq\\nabc\\nzzz\n\n/\\Aabc\\Z/m\n    abc\n    abc\\n \n\\= Expect no match\n    qqq\\nabc\n    abc\\nzzz\n    qqq\\nabc\\nzzz\n    \n/\\A(.)*\\Z/s\n    abc\\ndef\n\n/\\A(.)*\\Z/m\n\\= Expect no match\n    abc\\ndef\n\n/(?:b)|(?::+)/\n    b::c\n    c::b\n\n/[-az]+/\n    az-\n\\= Expect no match\n    b\n\n/[az-]+/\n    za-\n\\= Expect no match\n    b\n\n/[a\\-z]+/\n    a-z\n\\= Expect no match\n    b\n\n/[a-z]+/\n    abcdxyz\n\n/[\\d-]+/\n    12-34\n\\= Expect no match\n    aaa\n\n#if !ebcdic\n\n/\\x5c/\n    \\\\\n\n/\\x20Z/\n    the Zoo\n\\= Expect no match\n    Zulu\n\n#endif\n\n/ab{3cd/\n    ab{3cd\n\n/ab{3,cd/\n    ab{3,cd\n\n/ab{3,4a}cd/\n    ab{3,4a}cd\n\n/{4,5a}bc/\n    {4,5a}bc\n\n/^a.b/newline=lf\n    a\\rb\n\\= Expect no match\n    a\\nb\n\n/abc$/\n    abc\n    abc\\n\n\\= Expect no match\n    abc\\ndef\n\n#if !ebcdic\n\n/(abc)\\123/\n    abc\\x53\n\n/(abc)\\223/\n    abc\\x93\n\n/(abc)\\323/\n    abc\\xd3\n\n/(abc)\\100/\n    abc\\x40\n    abc\\100\n\n/(abc)\\1000/\n    abc\\x400\n    abc\\x40\\x30\n    abc\\1000\n    abc\\100\\x30\n    abc\\100\\060\n    abc\\100\\60\n\n/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123/\n    abcdefghijk\\12S\n\n#endif\n\n/a{0}bc/\n    bc\n\n/(a|(bc)){0,0}?xyz/\n    xyz\n\n#if !ebcdic\n\n/abc[\\10]de/\n    abc\\010de\n\n#endif\n\n/abc[\\1]de/\n    abc\\1de\n\n/(abc)[\\1]de/\n    abc\\1de\n\n/(?s)a.b/\n    a\\nb\n\n/^([^a])([^\\b])([^c]*)([^d]{3,4})/\n    baNOTccccd\n    baNOTcccd\n    baNOTccd\n    bacccd\n\\= Expect no match\n    anything\n    b\\bc   \n    baccd\n\n/[^a]/\n    Abc\n  \n/[^a]/i\n    Abc \n\n/[^a]+/\n    AAAaAbc\n  \n/[^a]+/i\n    AAAaAbc \n\n/[^a]+/\n    bbb\\nccc\n   \n/[^k]$/\n    abc\n\\= Expect no match\n    abk   \n   \n/[^k]{2,3}$/\n    abc\n    kbc\n    kabc \n\\= Expect no match\n    abk\n    akb\n    akk \n\n/^\\d{8,}\\@.+[^k]$/\n    12345678\\@a.b.c.d\n    123456789\\@x.y.z\n\\= Expect no match\n    12345678\\@x.y.uk\n    1234567\\@a.b.c.d       \n\n/[^a]/\n    aaaabcd\n    aaAabcd \n\n/[^a]/i\n    aaaabcd\n    aaAabcd \n\n/[^az]/\n    aaaabcd\n    aaAabcd \n\n/[^az]/i\n    aaaabcd\n    aaAabcd \n\n#if !ebcdic\n\n/\\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377/\n \\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377\n\n#endif\n\n/P[^*]TAIRE[^*]{1,6}?LL/\n    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx\n\n/P[^*]TAIRE[^*]{1,}?LL/\n    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx\n\n/(\\.\\d\\d[1-9]?)\\d+/\n    1.230003938\n    1.875000282   \n    1.235  \n                  \n/(\\.\\d\\d((?=0)|\\d(?=\\d)))/\n    1.230003938      \n    1.875000282\n\\= Expect no match \n    1.235 \n    \n/a(?)b/\n    ab \n \n/\\b(foo)\\s+(\\w+)/i\n    Food is on the foo table\n    \n/foo(.*)bar/\n    The food is under the bar in the barn.\n    \n/foo(.*?)bar/\n    The food is under the bar in the barn.\n\n/(.*)(\\d*)/no_auto_possess\n    I have 2 numbers: 53147\n    \n/(.*)(\\d+)/\n    I have 2 numbers: 53147\n \n/(.*?)(\\d*)/no_auto_possess\n    I have 2 numbers: 53147\n\n/(.*?)(\\d+)/\n    I have 2 numbers: 53147\n\n/(.*)(\\d+)$/\n    I have 2 numbers: 53147\n\n/(.*?)(\\d+)$/\n    I have 2 numbers: 53147\n\n/(.*)\\b(\\d+)$/\n    I have 2 numbers: 53147\n\n/(.*\\D)(\\d+)$/\n    I have 2 numbers: 53147\n\n/^\\D*(?!123)/\n    ABC123\n     \n/^(\\D*)(?=\\d)(?!123)/\n    ABC445\n\\= Expect no match\n    ABC123\n    \n/^[W-]46]/\n    W46]789 \n    -46]789\n\\= Expect no match\n    Wall\n    Zebra\n    42\n    [abcd] \n    ]abcd[\n\n#if !ebcdic\n       \n/^[W-\\]46]/\n    W46]789 \n    Wall\n    Zebra\n    Xylophone  \n    42\n    [abcd] \n    ]abcd[\n    \\\\backslash \n\\= Expect no match\n    -46]789\n    well\n\n#endif\n    \n/\\d\\d\\/\\d\\d\\/\\d\\d\\d\\d/\n    01/01/2000\n\n/word (?:[a-zA-Z0-9]+ ){0,10}otherword/\n  word cat dog elephant mussel cow horse canary baboon snake shark otherword\n\\= Expect no match\n  word cat dog elephant mussel cow horse canary baboon snake shark\n\n/word (?:[a-zA-Z0-9]+ ){0,300}otherword/\n\\= Expect no match\n  word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope\n\n/^(a){0,0}/\n    bcd\n    abc\n    aab     \n\n/^(a){0,1}/\n    bcd\n    abc\n    aab  \n\n/^(a){0,2}/\n    bcd\n    abc\n    aab  \n\n/^(a){0,3}/\n    bcd\n    abc\n    aab\n    aaa   \n\n/^(a){0,}/\n    bcd\n    abc\n    aab\n    aaa\n    aaaaaaaa    \n\n/^(a){1,1}/\n    abc\n    aab  \n\\= Expect no match\n    bcd\n\n/^(a){1,2}/\n    abc\n    aab  \n\\= Expect no match\n    bcd\n\n/^(a){1,3}/\n    abc\n    aab\n    aaa   \n\\= Expect no match\n    bcd\n\n/^(a){1,}/\n    abc\n    aab\n    aaa\n    aaaaaaaa    \n\\= Expect no match\n    bcd\n\n/.*\\.gif/\n    borfle\\nbib.gif\\nno\n\n/.{0,}\\.gif/\n    borfle\\nbib.gif\\nno\n\n/.*\\.gif/m\n    borfle\\nbib.gif\\nno\n\n/.*\\.gif/s\n    borfle\\nbib.gif\\nno\n\n/.*\\.gif/ms\n    borfle\\nbib.gif\\nno\n    \n/.*$/\n    borfle\\nbib.gif\\nno\n\n/.*$/m\n    borfle\\nbib.gif\\nno\n\n/.*$/s\n    borfle\\nbib.gif\\nno\n\n/.*$/ms\n    borfle\\nbib.gif\\nno\n    \n/.*$/\n    borfle\\nbib.gif\\nno\\n\n\n/.*$/m\n    borfle\\nbib.gif\\nno\\n\n\n/.*$/s\n    borfle\\nbib.gif\\nno\\n\n\n/.*$/ms\n    borfle\\nbib.gif\\nno\\n\n    \n/(.*X|^B)/\n    abcde\\n1234Xyz\n    BarFoo \n\\= Expect no match\n    abcde\\nBar  \n\n/(.*X|^B)/m\n    abcde\\n1234Xyz\n    BarFoo \n    abcde\\nBar  \n\n/(.*X|^B)/s\n    abcde\\n1234Xyz\n    BarFoo \n\\= Expect no match\n    abcde\\nBar  \n\n/(.*X|^B)/ms\n    abcde\\n1234Xyz\n    BarFoo \n    abcde\\nBar  \n\n/(?s)(.*X|^B)/\n    abcde\\n1234Xyz\n    BarFoo \n\\= Expect no match \n    abcde\\nBar  \n\n/(?s:.*X|^B)/\n    abcde\\n1234Xyz\n    BarFoo \n\\= Expect no match \n    abcde\\nBar  \n\n/^.*B/\n\\= Expect no match\n    abc\\nB\n     \n/(?s)^.*B/\n    abc\\nB\n\n/(?m)^.*B/\n    abc\\nB\n     \n/(?ms)^.*B/\n    abc\\nB\n\n/(?ms)^B/\n    abc\\nB\n\n/(?s)B$/\n    B\\n\n\n/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/\n    123456654321\n  \n/^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d/\n    123456654321 \n\n/^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]/\n    123456654321\n  \n/^[abc]{12}/\n    abcabcabcabc\n    \n/^[a-c]{12}/\n    abcabcabcabc\n    \n/^(a|b|c){12}/\n    abcabcabcabc \n\n/^[abcdefghijklmnopqrstuvwxy0123456789]/\n    n\n\\= Expect no match \n    z \n\n/abcde{0,0}/\n    abcd\n\\= Expect no match\n    abce  \n\n/ab[cd]{0,0}e/\n    abe\n\\= Expect no match\n    abcde \n    \n/ab(c){0,0}d/\n    abd\n\\= Expect no match\n    abcd   \n\n/a(b*)/\n    a\n    ab\n    abbbb\n\\= Expect no match\n    bbbbb    \n    \n/ab\\d{0}e/\n    abe\n\\= Expect no match\n    ab1e   \n    \n/\"([^\\\\\"]+|\\\\.)*\"/\n    the \\\"quick\\\" brown fox\n    \\\"the \\\\\\\"quick\\\\\\\" brown fox\\\" \n\n/.*?/g,aftertext\n    abc\n  \n/\\b/g,aftertext\n    abc \n\n/\\b/g,aftertext\n    abc \n\n//g\n    abc\n\n/<tr([\\w\\W\\s\\d][^<>]{0,})><TD([\\w\\W\\s\\d][^<>]{0,})>([\\d]{0,}\\.)(.*)((<BR>([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>/is\n  <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>\n\n/a[^a]b/\n    acb\n    a\\nb\n    \n/a.b/\n    acb\n\\= Expect no match \n    a\\nb   \n    \n/a[^a]b/s\n    acb\n    a\\nb  \n    \n/a.b/s\n    acb\n    a\\nb  \n\n/^(b+?|a){1,2}?c/\n    bac\n    bbac\n    bbbac\n    bbbbac\n    bbbbbac \n\n/^(b+|a){1,2}?c/\n    bac\n    bbac\n    bbbac\n    bbbbac\n    bbbbbac \n    \n/(?!\\A)x/m\n    a\\bx\\n  \n\\= Expect no match\n    x\\nb\\n\n    \n/\\x0{ab}/\n    \\0{ab} \n\n/(A|B)*?CD/\n    CD \n    \n/(A|B)*CD/\n    CD \n\n/(?<!bar)foo/\n    foo\n    catfood\n    arfootle\n    rfoosh\n\\= Expect no match\n    barfoo\n    towbarfoo\n\n/\\w{3}(?<!bar)foo/\n    catfood\n\\= Expect no match\n    foo\n    barfoo\n    towbarfoo\n\n/(?<=(foo)a)bar/\n    fooabar\n\\= Expect no match\n    bar\n    foobbar\n      \n/\\Aabc\\z/m\n    abc\n\\= Expect no match\n    abc\\n   \n    qqq\\nabc\n    abc\\nzzz\n    qqq\\nabc\\nzzz\n\n\"(?>.*/)foo\"\n\\= Expect no match\n    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/\n\n\"(?>.*/)foo\"\n    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo\n\n/(?>(\\.\\d\\d[1-9]?))\\d+/\n    1.230003938\n    1.875000282\n\\= Expect no match \n    1.235 \n\n/^((?>\\w+)|(?>\\s+))*$/\n    now is the time for all good men to come to the aid of the party\n\\= Expect no match\n    this is not a line with only words and spaces!\n    \n/(\\d+)(\\w)/\n    12345a\n    12345+ \n\n/((?>\\d+))(\\w)/\n    12345a\n\\= Expect no match\n    12345+ \n\n/(?>a+)b/\n    aaab\n\n/((?>a+)b)/\n    aaab\n\n/(?>(a+))b/\n    aaab\n\n/(?>b)+/\n    aaabbbccc\n\n/(?>a+|b+|c+)*c/\n    aaabbbbccccd\n    \n/(a+|b+|c+)*c/\n    aaabbbbccccd\n\n/((?>[^()]+)|\\([^()]*\\))+/\n    ((abc(ade)ufh()()x\n    \n/\\(((?>[^()]+)|\\([^()]+\\))+\\)/\n    (abc)\n    (abc(def)xyz)\n\\= Expect no match\n    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   \n\n/a(?-i)b/i\n    ab\n    Ab\n\\= Expect no match \n    aB\n    AB\n        \n/(a (?x)b c)d e/\n    a bcd e\n\\= Expect no match\n    a b cd e\n    abcd e   \n    a bcde \n \n/(a b(?x)c d (?-x)e f)/\n    a bcde f\n\\= Expect no match\n    abcdef  \n\n/(a(?i)b)c/\n    abc\n    aBc\n\\= Expect no match\n    abC\n    aBC  \n    Abc\n    ABc\n    ABC\n    AbC\n    \n/a(?i:b)c/\n    abc\n    aBc\n\\= Expect no match \n    ABC\n    abC\n    aBC\n    \n/a(?i:b)*c/\n    aBc\n    aBBc\n\\= Expect no match \n    aBC\n    aBBC\n    \n/a(?=b(?i)c)\\w\\wd/\n    abcd\n    abCd\n\\= Expect no match\n    aBCd\n    abcD     \n    \n/(?s-i:more.*than).*million/i\n    more than million\n    more than MILLION\n    more \\n than Million \n\\= Expect no match\n    MORE THAN MILLION    \n    more \\n than \\n million \n\n/(?:(?s-i)more.*than).*million/i\n    more than million\n    more than MILLION\n    more \\n than Million \n\\= Expect no match\n    MORE THAN MILLION    \n    more \\n than \\n million \n    \n/(?>a(?i)b+)+c/\n    abc\n    aBbc\n    aBBc \n\\= Expect no match\n    Abc\n    abAb    \n    abbC \n    \n/(?=a(?i)b)\\w\\wc/\n    abc\n    aBc\n\\= Expect no match\n    Ab \n    abC\n    aBC     \n    \n/(?<=a(?i)b)(\\w\\w)c/\n    abxxc\n    aBxxc\n\\= Expect no match\n    Abxxc\n    ABxxc\n    abxxC      \n\n/^(?(?=abc)\\w{3}:|\\d\\d)$/\n    abc:\n    12\n\\= Expect no match\n    123\n    xyz    \n\n/^(?(?!abc)\\d\\d|\\w{3}:)$/\n    abc:\n    12\n\\= Expect no match\n    123\n    xyz    \n    \n/(?(?<=foo)bar|cat)/\n    foobar\n    cat\n    fcat\n    focat   \n\\= Expect no match\n    foocat  \n\n/(?(?<!foo)cat|bar)/\n    foobar\n    cat\n    fcat\n    focat   \n\\= Expect no match\n    foocat  \n\n/(?>a*)*/\n    a\n    aa\n    aaaa\n    \n/(abc|)+/\n    abc\n    abcabc\n    abcabcabc\n    xyz      \n\n/([a]*)*/\n    a\n    aaaaa \n \n/([ab]*)*/\n    a\n    b\n    ababab\n    aaaabcde\n    bbbb    \n \n/([^a]*)*/\n    b\n    bbbb\n    aaa   \n \n/([^ab]*)*/\n    cccc\n    abab  \n \n/([a]*?)*/\n    a\n    aaaa \n \n/([ab]*?)*/\n    a\n    b\n    abab\n    baba   \n \n/([^a]*?)*/\n    b\n    bbbb\n    aaa   \n \n/([^ab]*?)*/\n    c\n    cccc\n    baba   \n \n/(?>a*)*/\n    a\n    aaabcde \n \n/((?>a*))*/\n    aaaaa\n    aabbaa \n \n/((?>a*?))*/\n    aaaaa\n    aabbaa \n\n/(?(?=[^a-z]+[a-z])  \\d{2}-[a-z]{3}-\\d{2}  |  \\d{2}-\\d{2}-\\d{2} ) /x\n    12-sep-98\n    12-09-98\n\\= Expect no match\n    sep-12-98\n        \n/(?i:saturday|sunday)/\n    saturday\n    sunday\n    Saturday\n    Sunday\n    SATURDAY\n    SUNDAY\n    SunDay\n    \n/(a(?i)bc|BB)x/\n    abcx\n    aBCx\n    bbx\n    BBx\n\\= Expect no match\n    abcX\n    aBCX\n    bbX\n    BBX               \n\n/^([ab](?i)[cd]|[ef])/\n    ac\n    aC\n    bD\n    elephant\n    Europe \n    frog\n    France\n\\= Expect no match\n    Africa     \n\n/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/\n    ab\n    aBd\n    xy\n    xY\n    zebra\n    Zambesi\n\\= Expect no match\n    aCD  \n    XY  \n\n/(?<=foo\\n)^bar/m\n    foo\\nbar\n\\= Expect no match\n    bar\n    baz\\nbar   \n\n/(?<=(?<!foo)bar)baz/\n    barbaz\n    barbarbaz \n    koobarbaz \n\\= Expect no match\n    baz\n    foobarbaz \n\n# The following tests are taken from the Perl 5.005 test suite; some of them\n# are compatible with 5.004, but I'd rather not have to sort them out.\n\n/abc/\n    abc\n    xabcy\n    ababc\n\\= Expect no match\n    xbc\n    axc\n    abx\n\n/ab*c/\n    abc\n\n/ab*bc/\n    abc\n    abbc\n    abbbbc\n\n/.{1}/\n    abbbbc\n\n/.{3,4}/\n    abbbbc\n\n/ab{0,}bc/\n    abbbbc\n\n/ab+bc/\n    abbc\n\\= Expect no match\n    abc\n    abq\n\n/ab+bc/\n    abbbbc\n\n/ab{1,}bc/\n    abbbbc\n\n/ab{1,3}bc/\n    abbbbc\n\n/ab{3,4}bc/\n    abbbbc\n\n/ab{4,5}bc/\n\\= Expect no match\n    abq\n    abbbbc\n\n/ab?bc/\n    abbc\n    abc\n\n/ab{0,1}bc/\n    abc\n\n/ab?bc/\n\n/ab?c/\n    abc\n\n/ab{0,1}c/\n    abc\n\n/^abc$/\n    abc\n\\= Expect no match\n    abbbbc\n    abcc\n\n/^abc/\n    abcc\n\n/^abc$/\n\n/abc$/\n    aabc\n    aabc\n\\= Expect no match\n    aabcd\n\n/^/\n    abc\n\n/$/\n    abc\n\n/a.c/\n    abc\n    axc\n\n/a.*c/\n    axyzc\n\n/a[bc]d/\n    abd\n\\= Expect no match\n    axyzd\n    abc\n\n/a[b-d]e/\n    ace\n\n/a[b-d]/\n    aac\n\n/a[-b]/\n    a-\n\n/a[b-]/\n    a-\n\n/a]/\n    a]\n\n/a[]]b/\n    a]b\n\n/a[^bc]d/\n    aed\n\\= Expect no match\n    abd\n    abd\n\n/a[^-b]c/\n    adc\n\n/a[^]b]c/\n    adc\n    a-c\n\\= Expect no match\n    a]c\n\n/\\ba\\b/\n    a-\n    -a\n    -a-\n\n/\\by\\b/\n\\= Expect no match\n    xy\n    yz\n    xyz\n\n/\\Ba\\B/\n\\= Expect no match\n    a-\n    -a\n    -a-\n\n/\\By\\b/\n    xy\n\n/\\by\\B/\n    yz\n\n/\\By\\B/\n    xyz\n\n/\\w/\n    a\n\n/\\W/\n    -\n\\= Expect no match\n    a\n\n/a\\sb/\n    a b\n\n/a\\Sb/\n    a-b\n\\= Expect no match\n    a b\n\n/\\d/\n    1\n\n/\\D/\n    -\n\\= Expect no match\n    1\n\n/[\\w]/\n    a\n\n/[\\W]/\n    -\n\\= Expect no match\n    a\n\n/a[\\s]b/\n    a b\n\n/a[\\S]b/\n    a-b\n\\= Expect no match\n    a b\n\n/[\\d]/\n    1\n\n/[\\D]/\n    -\n\\= Expect no match\n    1\n\n/ab|cd/\n    abc\n    abcd\n\n/()ef/\n    def\n\n/$b/\n\n/a\\(b/\n    a(b\n\n/a\\(*b/\n    ab\n    a((b\n\n/a\\\\b/\n    a\\\\b\n\\= Expect no match\n    a\\b\n\n/((a))/\n    abc\n\n/(a)b(c)/\n    abc\n\n/a+b+c/\n    aabbabc\n\n/a{1,}b{1,}c/\n    aabbabc\n\n/a.+?c/\n    abcabc\n\n/(a+|b)*/\n    ab\n\n/(a+|b){0,}/\n    ab\n\n/(a+|b)+/\n    ab\n\n/(a+|b){1,}/\n    ab\n\n/(a+|b)?/\n    ab\n\n/(a+|b){0,1}/\n    ab\n\n/[^ab]*/\n    cde\n\n/abc/\n\\= Expect no match\n    b\n\n/a*/\n\n/([abc])*d/\n    abbbcd\n\n/([abc])*bcd/\n    abcd\n\n/a|b|c|d|e/\n    e\n\n/(a|b|c|d|e)f/\n    ef\n\n/abcd*efg/\n    abcdefg\n\n/ab*/\n    xabyabbbz\n    xayabbbz\n\n/(ab|cd)e/\n    abcde\n\n/[abhgefdc]ij/\n    hij\n\n/^(ab|cd)e/\n\n/(abc|)ef/\n    abcdef\n\n/(a|b)c*d/\n    abcd\n\n/(ab|ab*)bc/\n    abc\n\n/a([bc]*)c*/\n    abc\n\n/a([bc]*)(c*d)/\n    abcd\n\n/a([bc]+)(c*d)/\n    abcd\n\n/a([bc]*)(c+d)/\n    abcd\n\n/a[bcd]*dcdcde/\n    adcdcde\n\n/a[bcd]+dcdcde/\n\\= Expect no match\n    abcde\n    adcdcde\n\n/(ab|a)b*c/\n    abc\n\n/((a)(b)c)(d)/\n    abcd\n\n/[a-zA-Z_][a-zA-Z0-9_]*/\n    alpha\n\n/^a(bc+|b[eh])g|.h$/\n    abh\n\n/(bc+d$|ef*g.|h?i(j|k))/\n    effgz\n    ij\n    reffgz\n\\= Expect no match\n    effg\n    bcdd\n\n/((((((((((a))))))))))/\n    a\n\n/(((((((((a)))))))))/\n    a\n\n/multiple words of text/\n\\= Expect no match\n    aa\n    uh-uh\n\n/multiple words/\n    multiple words, yeah\n\n/(.*)c(.*)/\n    abcde\n\n/\\((.*), (.*)\\)/\n    (a, b)\n\n/[k]/\n\n/abcd/\n    abcd\n\n/a(bc)d/\n    abcd\n\n/a[-]?c/\n    ac\n\n/abc/i\n    ABC\n    XABCY\n    ABABC\n\\= Expect no match\n    aaxabxbaxbbx\n    XBC\n    AXC\n    ABX\n\n/ab*c/i\n    ABC\n\n/ab*bc/i\n    ABC\n    ABBC\n\n/ab*?bc/i\n    ABBBBC\n\n/ab{0,}?bc/i\n    ABBBBC\n\n/ab+?bc/i\n    ABBC\n\n/ab+bc/i\n\\= Expect no match\n    ABC\n    ABQ\n\n/ab{1,}bc/i\n\n/ab+bc/i\n    ABBBBC\n\n/ab{1,}?bc/i\n    ABBBBC\n\n/ab{1,3}?bc/i\n    ABBBBC\n\n/ab{3,4}?bc/i\n    ABBBBC\n\n/ab{4,5}?bc/i\n\\= Expect no match\n    ABQ\n    ABBBBC\n\n/ab??bc/i\n    ABBC\n    ABC\n\n/ab{0,1}?bc/i\n    ABC\n\n/ab??bc/i\n\n/ab??c/i\n    ABC\n\n/ab{0,1}?c/i\n    ABC\n\n/^abc$/i\n    ABC\n\\= Expect no match\n    ABBBBC\n    ABCC\n\n/^abc/i\n    ABCC\n\n/^abc$/i\n\n/abc$/i\n    AABC\n\n/^/i\n    ABC\n\n/$/i\n    ABC\n\n/a.c/i\n    ABC\n    AXC\n\n/a.*?c/i\n    AXYZC\n\n/a.*c/i\n    AABC\n\\= Expect no match\n    AXYZD\n\n/a[bc]d/i\n    ABD\n\n/a[b-d]e/i\n    ACE\n\\= Expect no match\n    ABC\n    ABD\n\n/a[b-d]/i\n    AAC\n\n/a[-b]/i\n    A-\n\n/a[b-]/i\n    A-\n\n/a]/i\n    A]\n\n/a[]]b/i\n    A]B\n\n/a[^bc]d/i\n    AED\n\n/a[^-b]c/i\n    ADC\n\\= Expect no match\n    ABD\n    A-C\n\n/a[^]b]c/i\n    ADC\n\n/ab|cd/i\n    ABC\n    ABCD\n\n/()ef/i\n    DEF\n\n/$b/i\n\\= Expect no match\n    A]C\n    B\n\n/a\\(b/i\n    A(B\n\n/a\\(*b/i\n    AB\n    A((B\n\n/a\\\\b/i\n\\= Expect no match\n    A\\=notbol\n\n/((a))/i\n    ABC\n\n/(a)b(c)/i\n    ABC\n\n/a+b+c/i\n    AABBABC\n\n/a{1,}b{1,}c/i\n    AABBABC\n\n/a.+?c/i\n    ABCABC\n\n/a.*?c/i\n    ABCABC\n\n/a.{0,5}?c/i\n    ABCABC\n\n/(a+|b)*/i\n    AB\n\n/(a+|b){0,}/i\n    AB\n\n/(a+|b)+/i\n    AB\n\n/(a+|b){1,}/i\n    AB\n\n/(a+|b)?/i\n    AB\n\n/(a+|b){0,1}/i\n    AB\n\n/(a+|b){0,1}?/i\n    AB\n\n/[^ab]*/i\n    CDE\n\n/abc/i\n\n/a*/i\n\n/([abc])*d/i\n    ABBBCD\n\n/([abc])*bcd/i\n    ABCD\n\n/a|b|c|d|e/i\n    E\n\n/(a|b|c|d|e)f/i\n    EF\n\n/abcd*efg/i\n    ABCDEFG\n\n/ab*/i\n    XABYABBBZ\n    XAYABBBZ\n\n/(ab|cd)e/i\n    ABCDE\n\n/[abhgefdc]ij/i\n    HIJ\n\n/^(ab|cd)e/i\n\\= Expect no match\n    ABCDE\n\n/(abc|)ef/i\n    ABCDEF\n\n/(a|b)c*d/i\n    ABCD\n\n/(ab|ab*)bc/i\n    ABC\n\n/a([bc]*)c*/i\n    ABC\n\n/a([bc]*)(c*d)/i\n    ABCD\n\n/a([bc]+)(c*d)/i\n    ABCD\n\n/a([bc]*)(c+d)/i\n    ABCD\n\n/a[bcd]*dcdcde/i\n    ADCDCDE\n\n/a[bcd]+dcdcde/i\n\n/(ab|a)b*c/i\n    ABC\n\n/((a)(b)c)(d)/i\n    ABCD\n\n/[a-zA-Z_][a-zA-Z0-9_]*/i\n    ALPHA\n\n/^a(bc+|b[eh])g|.h$/i\n    ABH\n\n/(bc+d$|ef*g.|h?i(j|k))/i\n    EFFGZ\n    IJ\n    REFFGZ\n\\= Expect no match\n    ADCDCDE\n    EFFG\n    BCDD\n\n/((((((((((a))))))))))/i\n    A\n\n/(((((((((a)))))))))/i\n    A\n\n/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i\n    A\n\n/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i\n    C\n\n/multiple words of text/i\n\\= Expect no match\n    AA\n    UH-UH\n\n/multiple words/i\n    MULTIPLE WORDS, YEAH\n\n/(.*)c(.*)/i\n    ABCDE\n\n/\\((.*), (.*)\\)/i\n    (A, B)\n\n/[k]/i\n\n/abcd/i\n    ABCD\n\n/a(bc)d/i\n    ABCD\n\n/a[-]?c/i\n    AC\n\n/a(?!b)./\n    abad\n\n/a(?=d)./\n    abad\n\n/a(?=c|d)./\n    abad\n\n/a(?:b|c|d)(.)/\n    ace\n\n/a(?:b|c|d)*(.)/\n    ace\n\n/a(?:b|c|d)+?(.)/\n    ace\n    acdbcdbe\n\n/a(?:b|c|d)+(.)/\n    acdbcdbe\n\n/a(?:b|c|d){2}(.)/\n    acdbcdbe\n\n/a(?:b|c|d){4,5}(.)/\n    acdbcdbe\n\n/a(?:b|c|d){4,5}?(.)/\n    acdbcdbe\n\n/((foo)|(bar))*/\n    foobar\n\n/a(?:b|c|d){6,7}(.)/\n    acdbcdbe\n\n/a(?:b|c|d){6,7}?(.)/\n    acdbcdbe\n\n/a(?:b|c|d){5,6}(.)/\n    acdbcdbe\n\n/a(?:b|c|d){5,6}?(.)/\n    acdbcdbe\n\n/a(?:b|c|d){5,7}(.)/\n    acdbcdbe\n\n/a(?:b|c|d){5,7}?(.)/\n    acdbcdbe\n\n/a(?:b|(c|e){1,2}?|d)+?(.)/\n    ace\n\n/^(.+)?B/\n    AB\n\n/^([^a-z])|(\\^)$/\n    .\n\n/^[<>]&/\n    <&OUT\n\n/(?:(f)(o)(o)|(b)(a)(r))*/\n    foobar\n\n/(?<=a)b/\n    ab\n\\= Expect no match\n    cb\n    b\n\n/(?<!c)b/\n    ab\n    b\n    b\n\n/(?:..)*a/\n    aba\n\n/(?:..)*?a/\n    aba\n\n/^(){3,5}/\n    abc\n\n/^(a+)*ax/\n    aax\n\n/^((a|b)+)*ax/\n    aax\n\n/^((a|bc)+)*ax/\n    aax\n\n/(a|x)*ab/\n    cab\n\n/(a)*ab/\n    cab\n\n/(?:(?i)a)b/\n    ab\n\n/((?i)a)b/\n    ab\n\n/(?:(?i)a)b/\n    Ab\n\n/((?i)a)b/\n    Ab\n\n/(?:(?i)a)b/\n\\= Expect no match\n    cb\n    aB\n\n/((?i)a)b/\n\n/(?i:a)b/\n    ab\n\n/((?i:a))b/\n    ab\n\n/(?i:a)b/\n    Ab\n\n/((?i:a))b/\n    Ab\n\n/(?i:a)b/\n\\= Expect no match\n    aB\n    aB\n\n/((?i:a))b/\n\n/(?:(?-i)a)b/i\n    ab\n\n/((?-i)a)b/i\n    ab\n\n/(?:(?-i)a)b/i\n    aB\n\n/((?-i)a)b/i\n    aB\n\n/(?:(?-i)a)b/i\n    aB\n\\= Expect no match\n    Ab\n\n/((?-i)a)b/i\n\n/(?:(?-i)a)b/i\n    aB\n\n/((?-i)a)b/i\n    aB\n\n/(?:(?-i)a)b/i\n\\= Expect no match\n    Ab\n    AB\n\n/((?-i)a)b/i\n\n/(?-i:a)b/i\n    ab\n\n/((?-i:a))b/i\n    ab\n\n/(?-i:a)b/i\n    aB\n\n/((?-i:a))b/i\n    aB\n\n/(?-i:a)b/i\n\\= Expect no match\n    AB\n    Ab\n\n/((?-i:a))b/i\n\n/(?-i:a)b/i\n    aB\n\n/((?-i:a))b/i\n    aB\n\n/(?-i:a)b/i\n\\= Expect no match\n    Ab\n    AB\n\n/((?-i:a))b/i\n\n/((?-i:a.))b/i\n\\= Expect no match\n    AB\n    a\\nB\n\n/((?s-i:a.))b/i\n    a\\nB\n\n/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/\n    cabbbb\n\n/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/\n    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n\n/foo\\w*\\d{4}baz/\n    foobar1234baz\n\n/x(~~)*(?:(?:F)?)?/\n    x~~\n\n/^a(?#xxx){3}c/\n    aaac\n\n/^a (?#xxx) (?#yyy) {3}c/x\n    aaac\n\n/(?<![cd])b/\n\\= Expect no match\n    B\\nB\n    dbcb\n\n/(?<![cd])[ab]/\n    dbaacb\n\n/(?<!(c|d))b/\n\n/(?<!(c|d))[ab]/\n    dbaacb\n\n/(?<!cd)[ab]/\n    cdaccb\n\n/^(?:a?b?)*$/\n\\= Expect no match\n    dbcb\n    a--\n\n/((?s)^a(.))((?m)^b$)/\n    a\\nb\\nc\\n\n\n/((?m)^b$)/\n    a\\nb\\nc\\n\n\n/(?m)^b/\n    a\\nb\\n\n\n/(?m)^(b)/\n    a\\nb\\n\n\n/((?m)^b)/\n    a\\nb\\n\n\n/\\n((?m)^b)/\n    a\\nb\\n\n\n/((?s).)c(?!.)/\n    a\\nb\\nc\\n\n    a\\nb\\nc\\n\n\n/((?s)b.)c(?!.)/\n    a\\nb\\nc\\n\n    a\\nb\\nc\\n\n\n/^b/\n\n/()^b/\n\\= Expect no match\n    a\\nb\\nc\\n\n    a\\nb\\nc\\n\n\n/((?m)^b)/\n    a\\nb\\nc\\n\n\n/(?(?!a)a|b)/\n\n/(?(?!a)b|a)/\n    a\n\n/(?(?=a)b|a)/\n\\= Expect no match\n    a\n    a\n\n/(?(?=a)a|b)/\n    a\n\n/(\\w+:)+/\n    one:\n\n/$(?<=^(a))/\n    a\n\n/([\\w:]+::)?(\\w+)$/\n    abcd\n    xy:z:::abcd\n\n/^[^bcd]*(c+)/\n    aexycd\n\n/(a*)b+/\n    caab\n\n/([\\w:]+::)?(\\w+)$/\n    abcd\n    xy:z:::abcd\n\\= Expect no match\n    abcd:\n    abcd:\n\n/^[^bcd]*(c+)/\n    aexycd\n\n/(>a+)ab/\n\n/(?>a+)b/\n    aaab\n\n/([[:]+)/\n    a:[b]:\n\n/([[=]+)/\n    a=[b]=\n\n/([[.]+)/\n    a.[b].\n\n/((?>a+)b)/\n    aaab\n\n/(?>(a+))b/\n    aaab\n\n/((?>[^()]+)|\\([^()]*\\))+/\n    ((abc(ade)ufh()()x\n\n/a\\Z/\n\\= Expect no match\n    aaab\n    a\\nb\\n\n\n/b\\Z/\n    a\\nb\\n\n\n/b\\z/\n\n/b\\Z/\n    a\\nb\n\n/b\\z/\n    a\\nb\n    \n/(?>.*)(?<=(abcd|wxyz))/\n    alphabetabcd\n    endingwxyz\n\\= Expect no match\n    a rather long string that doesn't end with one of them\n\n/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/\n    word cat dog elephant mussel cow horse canary baboon snake shark otherword\n\\= Expect no match\n    word cat dog elephant mussel cow horse canary baboon snake shark\n  \n/word (?>[a-zA-Z0-9]+ ){0,30}otherword/\n\\= Expect no match\n    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope\n\n/(?<=\\d{3}(?!999))foo/\n    999foo\n    123999foo \n\\= Expect no match\n    123abcfoo\n    \n/(?<=(?!...999)\\d{3})foo/\n    999foo\n    123999foo \n\\= Expect no match\n    123abcfoo\n\n/(?<=\\d{3}(?!999)...)foo/\n    123abcfoo\n    123456foo \n\\= Expect no match\n    123999foo  \n    \n/(?<=\\d{3}...)(?<!999)foo/\n    123abcfoo   \n    123456foo \n\\= Expect no match\n    123999foo  \n\n/((Z)+|A)*/\n    ZABCDEFG\n\n/(Z()|A)*/\n    ZABCDEFG\n\n/(Z(())|A)*/\n    ZABCDEFG\n\n/((?>Z)+|A)*/\n    ZABCDEFG\n\n/((?>)+|A)*/\n    ZABCDEFG\n\n/a*/g\n    abbab\n\n/[[:space:]]+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n     \n/[[:blank:]]+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n     \n/[\\s]+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n     \n/\\s+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n     \n/a\u000bb/x\n    ab\n\n/(?!\\A)x/m\n  a\\nxb\\n\n\n/(?!^)x/m\n\\= Expect no match\n    a\\nxb\\n\n\n/abc\\Qabc\\Eabc/\n    abcabcabc\n    \n/abc\\Q(*+|\\Eabc/\n    abc(*+|abc \n\n/   abc\\Q abc\\Eabc/x\n    abc abcabc\n\\= Expect no match\n    abcabcabc  \n    \n/abc#comment\n    \\Q#not comment\n    literal\\E/x\n    abc#not comment\\n    literal     \n\n/abc#comment\n    \\Q#not comment\n    literal/x\n    abc#not comment\\n    literal     \n\n/abc#comment\n    \\Q#not comment\n    literal\\E #more comment\n    /x\n    abc#not comment\\n    literal     \n\n/abc#comment\n    \\Q#not comment\n    literal\\E #more comment/x\n    abc#not comment\\n    literal     \n\n/\\Qabc\\$xyz\\E/\n    abc\\\\\\$xyz\n\n/\\Qabc\\E\\$\\Qxyz\\E/\n    abc\\$xyz\n\n/\\Gabc/\n    abc\n\\= Expect no match\n    xyzabc  \n\n/\\Gabc./g\n    abc1abc2xyzabc3\n\n/abc./g\n    abc1abc2xyzabc3 \n\n/a(?x: b c )d/\n    XabcdY\n\\= Expect no match \n    Xa b c d Y \n\n/((?x)x y z | a b c)/\n    XabcY\n    AxyzB \n\n/(?i)AB(?-i)C/\n    XabCY\n\\= Expect no match\n    XabcY  \n\n/((?i)AB(?-i)C|D)E/\n    abCE\n    DE\n\\= Expect no match\n    abcE\n    abCe  \n    dE\n    De    \n\n/[z\\Qa-d]\\E]/\n    z\n    a\n    -\n    d\n    ] \n\\= Expect no match\n    b     \n\n/(a+)*b/\n\\= Expect no match\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \n    \n/(?i)reg(?:ul(?:[a]|ae)r|ex)/\n    REGular\n    regulaer\n    Regex  \n    regulr \n\n#if !ebcdic\n\n/[--]+/\n    \n    \n    \n    \n\n#endif\n\n/(?<=Z)X./\n    \\x84XAZXB\n\n/^(?(2)a|(1)(2))+$/\n    123a\n\n/(?<=a|bbbb)c/\n    ac\n    bbbbc\n\n/line\\nbreak/\n    this is a line\\nbreak\n    line one\\nthis is a line\\nbreak in the second line \n\n/line\\nbreak/firstline\n    this is a line\\nbreak\n\\= Expect no match \n    line one\\nthis is a line\\nbreak in the second line \n\n/line\\nbreak/m,firstline\n    this is a line\\nbreak\n\\= Expect no match \n    line one\\nthis is a line\\nbreak in the second line \n\n/1234/\n    123\\=ps\n\\= Expect no match \n    a4\\=ps,dfa_restart\n\n/1234/\n    123\\=ps\n    4\\=ps,dfa_restart\n\n/^/gm\n    a\\nb\\nc\\n\n    \\ \n    \n/(?<=C\\n)^/gm\n    A\\nC\\nC\\n \n\n/(?s)A?B/\n    AB\n    aB  \n\n/(?s)A*B/\n    AB\n    aB  \n\n/(?m)A?B/\n    AB\n    aB  \n\n/(?m)A*B/\n    AB\n    aB  \n\n#if !ebcdic\n\n/Content-Type\\x3A[^\\r\\n]{6,}/\n    Content-Type:xxxxxyyy \n\n/Content-Type\\x3A[^\\r\\n]{6,}z/\n    Content-Type:xxxxxyyyz\n\n/Content-Type\\x3A[^a]{6,}/\n    Content-Type:xxxyyy \n\n/Content-Type\\x3A[^a]{6,}z/\n    Content-Type:xxxyyyz\n\n#endif\n\n/^abc/Im,newline=lf\n    xyz\\nabc\n    xyz\\r\\nabc\n\\= Expect no match\n    xyz\\rabc\n    xyzabc\\r\n    xyzabc\\rpqr\n    xyzabc\\r\\n\n    xyzabc\\r\\npqr\n\n/^abc/Im,newline=crlf\n    xyz\\r\\nabclf>\n\\= Expect no match\n    xyz\\nabclf\n    xyz\\rabclf\n    \n/^abc/Im,newline=cr\n    xyz\\rabc\n\\= Expect no match\n    xyz\\nabc\n    xyz\\r\\nabc\n\n/.*/I,newline=lf\n    abc\\ndef\n    abc\\rdef\n    abc\\r\\ndef\n\n/.*/I,newline=cr\n    abc\\ndef\n    abc\\rdef\n    abc\\r\\ndef\n\n/.*/I,newline=crlf\n    abc\\ndef\n    abc\\rdef\n    abc\\r\\ndef\n\n/\\w+(.)(.)?def/Is\n    abc\\ndef\n    abc\\rdef\n    abc\\r\\ndef\n\n/\\w+(.)(.)?def/s\n    abc\\ndef\n    abc\\rdef\n    abc\\r\\ndef\n\n/^\\w+=.*(\\\\\\n.*)*/\n    abc=xyz\\\\\\npqr\n\n/^(a()*)*/\n    aaaa\n\n/^(?:a(?:(?:))*)*/\n    aaaa\n\n/^(a()+)+/\n    aaaa\n\n/^(?:a(?:(?:))+)+/\n    aaaa\n\n/(a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/(?>a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/(?:a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/^a.b/newline=lf\n    a\\rb\n\\= Expect no match\n    a\\nb\n\n/^a.b/newline=cr\n    a\\nb\n\\= Expect no match\n    a\\rb\n\n/^a.b/newline=anycrlf\n    a\\x85b\n\\= Expect no match\n    a\\rb\n\n/^a.b/newline=any\n\\= Expect no match\n    a\\nb\n    a\\rb\n    a\\x85b\n\n/^abc./gmx,newline=any\n    abc1 \\x0aabc2 \\x0babc3xx \\x0cabc4 \\x0dabc5xx \\x0d\\x0aabc6 \\x85abc7 JUNK\n\n/abc.$/gmx,newline=any\n    abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x85 abc9\n\n/^a\\Rb/bsr=unicode\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x0bb\n    a\\x0cb\n    a\\x85b   \n\\= Expect no match\n    a\\n\\rb    \n\n/^a\\R*b/bsr=unicode\n    ab\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x0bb\n    a\\x0cb\n    a\\x85b   \n    a\\n\\rb    \n    a\\n\\r\\x85\\x0cb \n\n/^a\\R+b/bsr=unicode\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x0bb\n    a\\x0cb\n    a\\x85b   \n    a\\n\\rb    \n    a\\n\\r\\x85\\x0cb \n\\= Expect no match\n    ab  \n    \n/^a\\R{1,3}b/bsr=unicode\n    a\\nb\n    a\\n\\rb\n    a\\n\\r\\x85b\n    a\\r\\n\\r\\nb \n    a\\r\\n\\r\\n\\r\\nb \n    a\\n\\r\\n\\rb\n    a\\n\\n\\r\\nb \n\\= Expect no match\n    a\\n\\n\\n\\rb\n    a\\r\n\n/.+foo/\n    afoo\n\\= Expect no match \n    \\r\\nfoo \n    \\nfoo \n\n/.+foo/newline=crlf\n    afoo\n    \\nfoo \n\\= Expect no match \n    \\r\\nfoo \n\n/.+foo/newline=any\n    afoo\n\\= Expect no match \n    \\nfoo \n    \\r\\nfoo \n\n/.+foo/s\n    afoo\n    \\r\\nfoo \n    \\nfoo \n\n/^$/gm,newline=any\n    abc\\r\\rxyz\n    abc\\n\\rxyz  \n\\= Expect no match \n    abc\\r\\nxyz\n\n/^X/m\n    XABC\n\\= Expect no match \n    XABC\\=notbol\n\n/(?m)^$/g,newline=any,aftertext\n    abc\\r\\n\\r\\n\n\n/(?m)^$|^\\r\\n/g,newline=any,aftertext\n    abc\\r\\n\\r\\n\n    \n/(?m)$/g,newline=any,aftertext\n    abc\\r\\n\\r\\n\n\n/(?|(abc)|(xyz))/\n   >abc<\n   >xyz< \n\n/(x)(?|(abc)|(xyz))(x)/\n    xabcx\n    xxyzx \n\n/(x)(?|(abc)(pqr)|(xyz))(x)/\n    xabcpqrx\n    xxyzx \n\n/(?|(abc)|(xyz))(?1)/\n    abcabc\n    xyzabc \n\\= Expect no match \n    xyzxyz \n \n/\\H\\h\\V\\v/\n    X X\\x0a\n    X\\x09X\\x0b\n\\= Expect no match\n    \\xa0 X\\x0a   \n    \n/\\H*\\h+\\V?\\v{3,4}/\n    \\x09\\x20\\xa0X\\x0a\\x0b\\x0c\\x0d\\x0a\n    \\x09\\x20\\xa0\\x0a\\x0b\\x0c\\x0d\\x0a\n    \\x09\\x20\\xa0\\x0a\\x0b\\x0c\n\\= Expect no match \n    \\x09\\x20\\xa0\\x0a\\x0b\n     \n/\\H{3,4}/\n    XY  ABCDE\n    XY  PQR ST \n    \n/.\\h{3,4}./\n    XY  AB    PQRS\n\n/\\h*X\\h?\\H+Y\\H?Z/\n    >XNNNYZ\n    >  X NYQZ\n\\= Expect no match\n    >XYZ   \n    >  X NY Z\n\n#if !ebcdic\n\n/\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c/\n    >XY\\x0aZ\\x0aA\\x0bNN\\x0c\n    >\\x0a\\x0dX\\x0aY\\x0a\\x0bZZZ\\x0aAAA\\x0bNNN\\x0c\n\n#endif\n\n/.+A/newline=crlf\n\\= Expect no match\n    \\r\\nA\n    \n/\\nA/newline=crlf\n    \\r\\nA \n\n/[\\r\\n]A/newline=crlf\n    \\r\\nA \n\n/(\\r|\\n)A/newline=crlf\n    \\r\\nA \n\n/a\\Rb/I,bsr=anycrlf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n\\= Expect no match\n    a\\x85b\n    a\\x0bb     \n\n/a\\Rb/I,bsr=unicode\n    a\\rb\n    a\\nb\n    a\\r\\nb\n    a\\x85b\n    a\\x0bb     \n    \n/a\\R?b/I,bsr=anycrlf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n\\= Expect no match\n    a\\x85b\n    a\\x0bb     \n\n/a\\R?b/I,bsr=unicode\n    a\\rb\n    a\\nb\n    a\\r\\nb\n    a\\x85b\n    a\\x0bb     \n    \n/a\\R{2,4}b/I,bsr=anycrlf\n    a\\r\\n\\nb\n    a\\n\\r\\rb\n    a\\r\\n\\r\\n\\r\\n\\r\\nb\n\\= Expect no match\n    a\\x0b\\x0bb     \n    a\\x85\\x85b\n\n/a\\R{2,4}b/I,bsr=unicode\n    a\\r\\rb\n    a\\n\\n\\nb\n    a\\r\\n\\n\\r\\rb\n    a\\x85\\x85b\n    a\\x0b\\x0bb     \n\\= Expect no match \n    a\\r\\r\\r\\r\\rb \n    \n/a(?!)|\\wbc/\n    abc \n\n/a[]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n\\= Expect no match\n    ab\n\n/a[]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n\\= Expect no match\n    ab \n\n/a[]*+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    ab \n\n/a[^]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aXb\n    a\\nb \n\\= Expect no match\n    ab  \n    \n/a[^]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aXb\n    a\\nX\\nXb \n\\= Expect no match\n    ab  \n\n/X$/dollar_endonly\n    X\n\\= Expect no match \n    X\\n \n\n/X$/\n    X\n    X\\n \n\n/xyz/auto_callout\n  xyz \n  abcxyz \n\\= Expect no match \n  abc\n  abcxypqr  \n\n/xyz/auto_callout,no_start_optimize\n  abcxyz \n\\= Expect no match \n  abc\n  abcxypqr  \n\n/(*NO_START_OPT)xyz/auto_callout\n  abcxyz \n  \n/(?C)ab/\n  ab\n  ab\\=callout_none\n  \n/ab/auto_callout\n  ab\n  ab\\=callout_none\n\n/^\"((?(?=[a])[^\"])|b)*\"$/auto_callout\n    \"ab\"\n    \"ab\"\\=callout_none\n\n/\\d+X|9+Y/\n    ++++123999\\=ps\n    ++++123999Y\\=ps\n\n/Z(*F)/\n\\= Expect no match \n    Z\\=ps\n    ZA\\=ps\n    \n/Z(?!)/\n\\= Expect no match \n    Z\\=ps\n    ZA\\=ps\n\n/dog(sbody)?/\n    dogs\\=ps\n    dogs\\=ph\n    \n/dog(sbody)??/\n    dogs\\=ps\n    dogs\\=ph\n\n/dog|dogsbody/\n    dogs\\=ps\n    dogs\\=ph\n \n/dogsbody|dog/\n    dogs\\=ps\n    dogs\\=ph\n\n/Z(*F)Q|ZXY/\n    Z\\=ps\n    XY\\=dfa_restart \n\\= Expect no match \n    ZA\\=ps\n    X\\=ps\n    \n/Z(?:(*F)Q|XY)/\n    Z\\=ps\n    XY\\=dfa_restart \n    \n/Z(*F)Q|Z(*F)XY/\n\\= Expect no match\n    Z\\=ps\n\n/\\bthe cat\\b/\n    the cat\\=ps\n    the cat\\=ph\n\n/dog(sbody)?/\n    dogs\\=ps\n    body\\=dfa_restart\n\n/dog(sbody)?/\n    dogs\\=ph\n    body\\=dfa_restart\n\n/abc/\n   abc\\=ps\n   abc\\=ph\n\n/abc\\K123/\n    xyzabc123pqr\n    \n/(?<=abc)123/allusedtext\n    xyzabc123pqr \n    xyzabc12\\=ps\n    xyzabc12\\=ph\n\n/\\babc\\b/allusedtext\n    +++abc+++\n    +++ab\\=ps\n    +++ab\\=ph\n\n/(?=C)/g,aftertext\n    ABCDECBA\n\n/(abc|def|xyz)/I\n    terhjk;abcdaadsfe\n    the quick xyz brown fox \n\\= Expect no match\n    thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd\n\n/(abc|def|xyz)/I,no_start_optimize\n    terhjk;abcdaadsfe\n    the quick xyz brown fox\n\\= Expect no match\n    thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd\n\n/abcd*/aftertext\n    xxxxabcd\\=ps\n    xxxxabcd\\=ph\n    dddxxx\\=dfa_restart\n    xxxxabcd\\=ph\n    xxx\\=dfa_restart\n\n/abcd*/i\n    xxxxabcd\\=ps\n    xxxxabcd\\=ph\n    XXXXABCD\\=ps\n    XXXXABCD\\=ph\n\n/abc\\d*/\n    xxxxabc1\\=ps\n    xxxxabc1\\=ph\n\n/abc[de]*/\n    xxxxabcde\\=ps\n    xxxxabcde\\=ph\n\n/(?:(?1)|B)(A(*F)|C)/\n    ABCD\n    CCD\n\\= Expect no match\n    CAD   \n\n/^(?:(?1)|B)(A(*F)|C)/\n    CCD\n    BCD \n\\= Expect no match\n    ABCD\n    CAD\n    BAD    \n\n/^(?!a(*SKIP)b)/\n    ac\n    \n/^(?=a(*SKIP)b|ac)/\n    ac\n    \n/^(?=a(*THEN)b|ac)/\n    ac\n    \n/^(?=a(*PRUNE)b)/\n    ab  \n\n/^(?(?!a(*SKIP)b))/\n    ac\n\n/(?<=abc)def/allusedtext\n    abc\\=ph\n\n/abc$/\n    abc\n    abc\\=ps\n    abc\\=ph\n\n/abc$/m\n    abc\n    abc\\n\n    abc\\=ph\n    abc\\n\\=ph\n    abc\\=ps\n    abc\\n\\=ps\n\n/abc\\z/\n    abc\n    abc\\=ps\n    abc\\=ph\n\n/abc\\Z/\n    abc\n    abc\\=ps\n    abc\\=ph\n\n/abc\\b/\n    abc\n    abc\\=ps\n    abc\\=ph\n\n/abc\\B/\n    abc\\=ps\n    abc\\=ph\n\\= Expect no match \n    abc\n\n/.+/\n    abc\\=offset=0\n    abc\\=offset=1\n    abc\\=offset=2\n\\= Bad offsets\n    abc\\=offset=4\n    abc\\=offset=-4 \n\\= Expect no match \n    abc\\=offset=3\n\n/^(?:a)++\\w/\n     aaaab\n\\= Expect no match \n     aaaa \n     bbb \n\n/^(?:aa|(?:a)++\\w)/\n     aaaab\n     aaaa \n\\= Expect no match \n     bbb \n\n/^(?:a)*+\\w/\n     aaaab\n     bbb \n\\= Expect no match \n     aaaa \n\n/^(a)++\\w/\n     aaaab\n\\= Expect no match \n     aaaa \n     bbb \n\n/^(a|)++\\w/\n     aaaab\n\\= Expect no match \n     aaaa \n     bbb \n\n/(?=abc){3}abc/aftertext\n    abcabcabc\n\\= Expect no match\n    xyz  \n    \n/(?=abc)+abc/aftertext\n    abcabcabc\n\\= Expect no match\n    xyz  \n    \n/(?=abc)++abc/aftertext\n    abcabcabc\n\\= Expect no match\n    xyz  \n    \n/(?=abc){0}xyz/\n    xyz \n\n/(?=abc){1}xyz/\n\\= Expect no match\n    xyz \n    \n/(?=(a))?./\n    ab\n    bc\n      \n/(?=(a))??./\n    ab\n    bc\n\n/^(?=(a)){0}b(?1)/\n    backgammon\n\n/^(?=(?1))?[az]([abc])d/\n    abd \n    zcdxx \n\n/^(?!a){0}\\w+/\n    aaaaa\n\n/(?<=(abc))?xyz/\n    abcxyz\n    pqrxyz \n\n/((?2))((?1))/\n    abc\n\n/(?(R)a+|(?R)b)/\n    aaaabcde\n\n/(?(R)a+|((?R))b)/\n    aaaabcde\n\n/((?(R)a+|(?1)b))/\n    aaaabcde\n\n/((?(R2)a+|(?1)b))()/\n    aaaabcde\n\n/(?(R)a*(?1)|((?R))b)/\n    aaaabcde\n\n/(a+)/no_auto_possess\n    aaaa\\=ovector=3\n    aaaa\\=ovector=4\n\n/^\\R/\n    \\r\\=ps\n    \\r\\=ph\n    \n/^\\R{2,3}x/\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\r\\=ps\n    \\r\\r\\=ph\n    \\r\\r\\r\\=ps\n    \\r\\r\\r\\=ph\n    \\r\\rx\n    \\r\\r\\rx    \n\n/^\\R{2,3}?x/\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\r\\=ps\n    \\r\\r\\=ph\n    \\r\\r\\r\\=ps\n    \\r\\r\\r\\=ph\n    \\r\\rx\n    \\r\\r\\rx    \n    \n/^\\R?x/\n    \\r\\=ps\n    \\r\\=ph\n    x\n    \\rx  \n\n/^\\R+x/\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\n\\=ps\n    \\r\\n\\=ph\n    \\rx  \n\n/^a$/newline=crlf\n    a\\r\\=ps\n    a\\r\\=ph\n\n/^a$/m,newline=crlf\n    a\\r\\=ps\n    a\\r\\=ph\n\n/^(a$|a\\r)/newline=crlf\n    a\\r\\=ps\n    a\\r\\=ph\n\n/^(a$|a\\r)/m,newline=crlf\n    a\\r\\=ps\n    a\\r\\=ph\n\n/./newline=crlf\n    \\r\\=ps\n    \\r\\=ph\n  \n/.{2,3}/newline=crlf\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\r\\=ps\n    \\r\\r\\=ph\n    \\r\\r\\r\\=ps\n    \\r\\r\\r\\=ph\n\n/.{2,3}?/newline=crlf\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\r\\=ps\n    \\r\\r\\=ph\n    \\r\\r\\r\\=ps\n    \\r\\r\\r\\=ph\n\n# Test simple validity check for restarts \n\n/abcdef/\n   abc\\=dfa_restart\n\n/<H((?(?!<H|F>)(.)|(?R))++)*F>/\n    text <H more text <H texting more  hexA0-\"\\xA0\"    hex above 7F-\"\\xBC\" F> text xxxxx <H text F> text F> text2 <H text sample F> more text.\n\n/^(?>.{4})abc|^\\w\\w.xabcd/\n    xxxxabcd\n    xx\\xa0xabcd \n\n/^(.{4}){2}+abc|^\\w\\w.x\\w\\w\\w\\wabcd/\n    xxxxxxxxabcd\n    xx\\xa0xxxxxabcd \n\n/abcd/\n    abcd\\=ovector=0\n\n# These tests show up auto-possessification \n\n/[ab]*/\n    aaaa\n    \n/[ab]*?/\n    aaaa\n    \n/[ab]?/\n    aaaa\n    \n/[ab]??/\n    aaaa\n    \n/[ab]+/\n    aaaa\n    \n/[ab]+?/\n    aaaa\n    \n/[ab]{2,3}/\n    aaaa\n    \n/[ab]{2,3}?/\n    aaaa\n    \n/[ab]{2,}/\n    aaaa    \n\n/[ab]{2,}?/\n    aaaa    \n\n'\\A(?:[^\\\"]++|\\\"(?:[^\\\"]*+|\\\"\\\")*+\\\")++'\n    NON QUOTED \\\"QUOT\\\"\\\"ED\\\" AFTER \\\"NOT MATCHED\n\n'\\A(?:[^\\\"]++|\\\"(?:[^\\\"]++|\\\"\\\")*+\\\")++'\n    NON QUOTED \\\"QUOT\\\"\\\"ED\\\" AFTER \\\"NOT MATCHED\n\n/abc(?=xyz)/allusedtext\n    abcxyzpqr\n    abcxyzpqr\\=aftertext\n    \n/(?<=pqr)abc(?=xyz)/allusedtext\n    xyzpqrabcxyzpqr\n    xyzpqrabcxyzpqr\\=aftertext\n    \n/a\\b/\n    a.\\=allusedtext\n    a\\=allusedtext  \n\n/abc(?=abcde)(?=ab)/allusedtext\n    abcabcdefg\n\n/a*?b*?/\n    ab\n\n/(*NOTEMPTY)a*?b*?/\n    ab\n    ba\n    cb  \n\n/(*NOTEMPTY_ATSTART)a*?b*?/aftertext\n    ab\n    cdab \n\n/(a)(b)|(c)/\n    XcX\\=ovector=2,get=1,get=2,get=3,get=4,getall\n\n/(?<A>aa)/\n    aa\\=get=A\n    aa\\=copy=A \n\n/a+/no_auto_possess\n    a\\=ovector=2,get=1,get=2,getall\n    aaa\\=ovector=2,get=1,get=2,getall\n\n/a(b)c(d)/\n    abc\\=ph,copy=0,copy=1,getall\n\n/ab(?C\" any text with spaces \")cde/B\n    abcde\n    12abcde\n\n/^a(b)c(?C1)def/\n      abcdef\n\n/^a(b)c(?C\"AB\")def/\n      abcdef\n\n/^a(b)c(?C1)def/\n      abcdef\\=callout_capture\n\n/^a(b)c(?C{AB})def/B\n      abcdef\\=callout_capture\n\n/^(?(?C25)(?=abc)abcd|xyz)/B\n    abcdefg\n    xyz123 \n\n/^(?(?C$abc$)(?=abc)abcd|xyz)/B\n    abcdefg\n    xyz123 \n\n/^ab(?C'first')cd(?C\"second\")ef/\n    abcdefg\n\n/(?:a(?C`code`)){3}X/\n    aaaXY\n\n# Binary zero in callout string\n/\"a(?C'x\" 00 \"z')b\"/hex\n    abcdefgh\n\n/(?(?!)a|b)/\n    bbb\n\\= Expect no match\n    aaa \n\n/^/gm\n    \\n\\n\\n\n\n/^/gm,alt_circumflex\n    \\n\\n\\n\n\n/abc/use_offset_limit\n    1234abcde\\=offset_limit=100\n    1234abcde\\=offset_limit=9\n    1234abcde\\=offset_limit=4\n    1234abcde\\=offset_limit=4,offset=4\n\\= Expect no match\n    1234abcde\\=offset_limit=4,offset=5\n    1234abcde\\=offset_limit=3\n\n/(?<=abc)/use_offset_limit\n    1234abc\\=offset_limit=7\n\\= Expect no match\n    1234abc\\=offset_limit=6\n\n/abcd/null_context\n    abcd\\=null_context\n\n/()()a+/no_auto_possess\n    aaa\\=allcaptures\n    a\\=allcaptures\n\n/(*LIMIT_DEPTH=100)^((.)(?1)|.)$/\n\\= Expect depth limit exceeded\n    a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]\n\n/(*LIMIT_HEAP=0)^((.)(?1)|.)$/\n\\= Expect heap limit exceeded\n    a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]\n\n/(*LIMIT_HEAP=50000)^((.)(?1)|.)$/\n\\= Expect success\n    a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]\n\n/(02-)?[0-9]{3}-[0-9]{3}/\n    02-123-123\n\n/^(a(?2))(b)(?1)/\n    abbab\\=find_limits \n\n/abc/endanchored\n    xyzabc\n\\= Expect no match\n    xyzabcdef\n\\= Expect error\n    xyzabc\\=ph\n\n/abc/\n    xyzabc\\=endanchored\n\\= Expect no match\n    xyzabcdef\\=endanchored\n\\= Expect error\n    xyzabc\\=ps,endanchored\n\n/abc|bcd/endanchored\n    xyzabcd\n\\= Expect no match\n    xyzabcdef\n\n/(*NUL)^.*/\n    a\\nb\\x00ccc\n    \n/(*NUL)^.*/s\n    a\\nb\\x00ccc\n    \n/^x/m,newline=nul\n    ab\\x00xy\n    \n/'#comment' 0d 0a 00 '^x\\' 0a 'y'/x,newline=nul,hex\n    x\\nyz \n \n/(*NUL)^X\\NY/\n    X\\nY\n    X\\rY\n\\= Expect no match\n    X\\x00Y      \n\n/(?<=abc|)/\n    abcde\\=aftertext\n    \n/(?<=|abc)/ \n    abcde\\=aftertext\n\n/(?<=abc|)/endanchored\n    abcde\\=aftertext\n    \n/(?<=|abc)/endanchored\n    abcde\\=aftertext\n\n/(*LIMIT_MATCH=100).*(?![|H]?.*(?![|H]?););.*(?![|H]?.*(?![|H]?););\\x00\\x00\\x00\\x00\\x00\\x00\\x00(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?![|);)?.*(![|H]?);)?.*(?![|H]?);)?.*(?![|H]?);)?.*(?![|H]););![|H]?););[|H]?);|H]?);)\\x00\\x00\\x00\u000b\\x00\\x00\\x00\u0019H]?););?![|H]?);)?.*(?![|H]?););[||H]?);)?.*(?![|H]?););[|H]?);(?![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););;[\u0013\\x00\\x00\\x00\\x00\\x00\\x00\\x00![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););/no_dotstar_anchor\n\\= Expect limit exceeded\n.*(?![|H]?.*(?![|H]?););.*(?![|H]?.*(?![|H]?););\\x00\\x00\\x00\\x00\\x00\\x00\\x00(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?![|);)?.*(![|H]?);)?.*(?![|H]?);)?.*(?![|H]?);)?.*(?![|H]););![|H]?););[|H]?);|H]?);)\\x00\\x00\\x00\u000b\\x00\\x00\\x00\u0019H]?););?![|H]?);)?.*(?![|H]?););[||H]?);)?.*(?![|H]?););[|H]?);(?![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););;[\u0013\\x00\\x00\\x00\\x00\\x00\\x00\\x00![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););\n\n/\\n/firstline\n    xyz\\nabc\n\n/\\nabc/firstline\n    xyz\\nabc\n\n/\\x{0a}abc/firstline,newline=crlf\n\\= Expect no match\n    xyz\\r\\nabc\n\n/[abc]/firstline\n\\= Expect no match\n    \\na\n    \n/foobar/\n    the foobar thing\\=copy_matched_subject\n    the foobar thing\\=copy_matched_subject,zero_terminate\n\n/foobar/g\n    the foobar thing foobar again\\=copy_matched_subject\n\n/(?(VERSION>=0)^B0W)/\n    B0W-W0W\n\\= Expect no match\n    0\n\n/(?(VERSION>=1000)^B0W|W0W)/\n    B0W-W0W\n\\= Expect no match\n    0\n\n/(?<=pqr)abc(?=xyz)/\n    123pqrabcxy\\=ps,allusedtext\n    123pqrabcxyz\\=ps,allusedtext\n\n/(?>a+b)/\n    aaaa\\=ps\n    aaaab\\=ps\n    \n/(abc)(?1)/\n    abca\\=ps\n    abcabc\\=ps\n\n/(?(?=abc).*|Z)/\n    ab\\=ps\n    abcxyz\\=ps\n\n/(abc)++x/\n    abcab\\=ps\n    abc\\=ps \n    ab\\=ps\n    abcx  \n\n/\\z/\n    abc\\=ph \n    abc\\=ps \n   \n/\\Z/\n    abc\\=ph \n    abc\\=ps \n    abc\\n\\=ph\n    abc\\n\\=ps\n\n/c*+(?<=[bc])/\n    abc\\=ph\n    ab\\=ph\n    abc\\=ps\n    ab\\=ps\n\n/c++(?<=[bc])/\n    abc\\=ph\n    ab\\=ph\n\n/(?<=(?=.(?<=x)))/\n    abx\n    ab\\=ph\n    bxyz \n    xyz\n\n/(?![ab]).*/\n    ab\\=ph\n\n/c*+/\n    ab\\=ph,offset=2\n\n/\n/anchored, firstline\n    \\x0a\n\n/\n/anchored,firstline,no_start_optimize\n    \\x0a\n\n/\n/firstline\n    \\x0a\n    abc\\x0adef\n\n/|a(?0)/endanchored\n    aaaa\n\n/([a-z]++)(*scs:(1).)/\n    aa\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (UTS#18)\n\n/[a[]/\n    [\n\n/[a[B]]C/alt_extended_class\n    aC\n    BC\n\\= Expect no match\n    [C\n\n/[[A][B]]/alt_extended_class\n    A\n    B\n\\= Expect no match\n    [\n    ]\n\n/[[A]||[B]]/alt_extended_class\n    A\n    B\n\\= Expect no match\n    C\n\n/[[^A][B]]/alt_extended_class\n    B\n    C\n\\= Expect no match\n    A\n\n/[^[A][B]]/alt_extended_class\n    C\n\\= Expect no match\n    A\n    B\n\n/[^[A]&&[B]]/alt_extended_class\n    A\n    B\n    C\n\n/[A[]]]/alt_extended_class\n    A\n    ]\n\\= Expect no match\n    [\n\n/[A[^]]]/alt_extended_class\n    A\n    [\n    C\n\\= Expect no match\n    ]\n\n/[A[]]/alt_extended_class,allow_empty_class\n    A\n\\= Expect no match\n    ]\n    [\n\n/[A[^]]/alt_extended_class,allow_empty_class\n    A\n    C\n    [\n    ]\n\n/[A-C--B]/alt_extended_class\n    A\n    C\n\\= Expect no match\n    B\n\n/[^A-C--B]/alt_extended_class\n    B\n\\= Expect no match\n    A\n    C\n\n/[[\\d\\D]--b]/alt_extended_class\n    a\n    c\n\\= Expect no match\n    b\n\n/[\\dAC-E[:space:]&&[^z]]/alt_extended_class\n    0\n    A\n    C\n    D\n    E\n    \\t\n\\= Expect no match\n    B\n    F\n    ;\n\n/[z||[^\\dAC-E[:space:]]]/alt_extended_class\n    z\n    B\n    F\n    ;\n\\= Expect no match\n    0\n    A\n    C\n    D\n    E\n    \\t\n\n/[a-c--b]+/alt_extended_class\n    ac\n    a\n\\= Expect no match\n    b\n\n/[a-c--b]{2,3}/alt_extended_class\n    ac\n    cac\n\\= Expect no match\n    a\n    bb\n\n/x[a-c--b]+y/alt_extended_class\n    xacy\n    xaay\n    xay\n\\= Expect no match\n    zacy\n    xacz\n    xy\n    xby\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n/(?[[A]+[B]])/\n    A\n    B\n\\= Expect no match\n    [\n    ]\n\n# --------------\n\n/^(?1(2))(?(DEFINE)(a(.)b))/\n   axb\n\n# Tests for reading matches from NULL subjects\n/(.?)/\n    \\=null_subject,copy=0,get=0,getall\n\n# --------------\n\n# Verify pcre2_substitute is blocked for DFA\n\n/abc/\n    abc\\=replace=xyz\n    abc\\=replace=xyz,substitute_matched\n\n# End of testinput6\n"
  },
  {
    "path": "testdata/testinput7",
    "content": "# This set of tests checks UTF and Unicode property support with the DFA\n# matching functionality of pcre2_dfa_match(). A default subject modifier is\n# used to force DFA matching for all tests.\n\n#subject dfa\n#newline_default LF any anyCRLF\n\n/\\x{100}ab/utf\n  \\x{100}ab\n  \n/a\\x{100}*b/utf\n    ab\n    a\\x{100}b  \n    a\\x{100}\\x{100}b  \n    \n/a\\x{100}+b/utf\n    a\\x{100}b  \n    a\\x{100}\\x{100}b  \n\\= Expect no match \n    ab\n     \n/\\bX/utf\n    Xoanon\n    +Xoanon\n    \\x{300}Xoanon \n\\= Expect no match \n    YXoanon  \n    \n/\\BX/utf\n    YXoanon\n\\= Expect no match\n    Xoanon\n    +Xoanon    \n    \\x{300}Xoanon \n\n/X\\b/utf\n    X+oanon\n    ZX\\x{300}oanon \n    FAX \n\\= Expect no match \n    Xoanon  \n    \n/X\\B/utf\n    Xoanon  \n\\= Expect no match\n    X+oanon\n    ZX\\x{300}oanon \n    FAX \n    \n/[^a]/utf\n    abcd\n    a\\x{100}   \n\n/^[abc\\x{123}\\x{400}-\\x{402}]{2,3}\\d/utf\n    ab99\n    \\x{123}\\x{123}45\n    \\x{400}\\x{401}\\x{402}6  \n\\= Expect no match\n    d99\n    \\x{123}\\x{122}4   \n    \\x{400}\\x{403}6  \n    \\x{400}\\x{401}\\x{402}\\x{402}6  \n\n/a.b/utf\n    acb\n    a\\x7fb\n    a\\x{100}b \n\\= Expect no match\n    a\\nb  \n\n/a(.{3})b/utf\n    a\\x{4000}xyb \n    a\\x{4000}\\x7fyb \n    a\\x{4000}\\x{100}yb \n\\= Expect no match\n    a\\x{4000}b \n    ac\\ncb \n\n/a(.*?)(.)/\n    a\\xc0\\x88b\n\n/a(.*?)(.)/utf\n    a\\x{100}b\n\n/a(.*)(.)/\n    a\\xc0\\x88b\n\n/a(.*)(.)/utf\n    a\\x{100}b\n\n/a(.)(.)/\n    a\\xc0\\x92bcd\n\n/a(.)(.)/utf\n    a\\x{240}bcd\n\n/a(.?)(.)/\n    a\\xc0\\x92bcd\n\n/a(.?)(.)/utf\n    a\\x{240}bcd\n\n/a(.??)(.)/\n    a\\xc0\\x92bcd\n\n/a(.??)(.)/utf\n    a\\x{240}bcd\n\n/a(.{3})b/utf\n    a\\x{1234}xyb \n    a\\x{1234}\\x{4321}yb \n    a\\x{1234}\\x{4321}\\x{3412}b \n\\= Expect no match\n    a\\x{1234}b \n    ac\\ncb \n\n/a(.{3,})b/utf\n    a\\x{1234}xyb \n    a\\x{1234}\\x{4321}yb \n    a\\x{1234}\\x{4321}\\x{3412}b \n    axxxxbcdefghijb \n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b \n\\= Expect no match\n    a\\x{1234}b \n\n/a(.{3,}?)b/utf\n    a\\x{1234}xyb \n    a\\x{1234}\\x{4321}yb \n    a\\x{1234}\\x{4321}\\x{3412}b \n    axxxxbcdefghijb \n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b \n\\= Expect no match\n    a\\x{1234}b \n\n/a(.{3,5})b/utf\n    a\\x{1234}xyb \n    a\\x{1234}\\x{4321}yb \n    a\\x{1234}\\x{4321}\\x{3412}b \n    axxxxbcdefghijb \n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b \n    axbxxbcdefghijb \n    axxxxxbcdefghijb \n\\= Expect no match\n    a\\x{1234}b \n    axxxxxxbcdefghijb \n\n/a(.{3,5}?)b/utf\n    a\\x{1234}xyb \n    a\\x{1234}\\x{4321}yb \n    a\\x{1234}\\x{4321}\\x{3412}b \n    axxxxbcdefghijb \n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b \n    axbxxbcdefghijb \n    axxxxxbcdefghijb \n\\= Expect no match\n    a\\x{1234}b \n    axxxxxxbcdefghijb \n\n/^[a\\x{c0}]/utf\n\\= Expect no match\n    \\x{100}\n\n/(?<=aXb)cd/utf\n    aXbcd\n\n/(?<=a\\x{100}b)cd/utf\n    a\\x{100}bcd\n\n/(?<=a\\x{100000}b)cd/utf\n    a\\x{100000}bcd\n    \n/(?:\\x{100}){3}b/utf\n    \\x{100}\\x{100}\\x{100}b\n\\= Expect no match \n    \\x{100}\\x{100}b\n\n/\\x{ab}/utf\n    \\x{ab} \n    \\xc2\\xab\n\\= Expect no match \n    \\x00{ab}\n\n/(?<=(.))X/utf\n    WXYZ\n    \\x{256}XYZ \n\\= Expect no match\n    XYZ \n\n/[^a]+/g,utf\n    bcd\n    \\x{100}aY\\x{256}Z \n    \n/^[^a]{2}/utf\n    \\x{100}bc\n \n/^[^a]{2,}/utf\n    \\x{100}bcAa\n\n/^[^a]{2,}?/utf\n    \\x{100}bca\n\n/[^a]+/gi,utf\n    bcd\n    \\x{100}aY\\x{256}Z \n    \n/^[^a]{2}/i,utf\n    \\x{100}bc\n \n/^[^a]{2,}/i,utf\n    \\x{100}bcAa\n\n/^[^a]{2,}?/i,utf\n    \\x{100}bca\n\n/\\x{100}{0,0}/utf\n    abcd\n \n/\\x{100}?/utf\n    abcd\n    \\x{100}\\x{100} \n\n/\\x{100}{0,3}/utf\n    \\x{100}\\x{100} \n    \\x{100}\\x{100}\\x{100}\\x{100} \n    \n/\\x{100}*/utf\n    abce\n    \\x{100}\\x{100}\\x{100}\\x{100} \n\n/\\x{100}{1,1}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100} \n\n/\\x{100}{1,3}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100} \n\n/\\x{100}+/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100} \n\n/\\x{100}{3}/utf\n    abcd\\x{100}\\x{100}\\x{100}XX\n\n/\\x{100}{3,5}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}XX\n\n/\\x{100}{3,}/utf,no_auto_possess\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}XX\n\n/(?<=a\\x{100}{2}b)X/utf\n    Xyyya\\x{100}\\x{100}bXzzz\n\n/\\D*/utf,no_auto_possess\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/\\D*/utf,no_auto_possess\n  \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\D/utf\n    1X2\n    1\\x{100}2 \n  \n/>\\S/utf\n    > >X Y\n    > >\\x{100} Y\n  \n/\\d/utf\n    \\x{100}3\n    \n/\\s/utf\n    \\x{100} X\n    \n/\\D+/utf\n    12abcd34\n\\= Expect no match\n    1234  \n\n/\\D{2,3}/utf\n    12abcd34\n    12ab34\n\\= Expect no match  \n    1234\n    12a34  \n\n/\\D{2,3}?/utf\n    12abcd34\n    12ab34\n\\= Expect no match  \n    1234\n    12a34  \n\n/\\d+/utf\n    12abcd34\n\n/\\d{2,3}/utf\n    12abcd34\n    1234abcd\n\\= Expect no match  \n    1.4 \n\n/\\d{2,3}?/utf\n    12abcd34\n    1234abcd\n\\= Expect no match  \n    1.4 \n\n/\\S+/utf\n    12abcd34\n\\= Expect no match\n    \\    \\ \n\n/\\S{2,3}/utf\n    12abcd34\n    1234abcd\n\\= Expect no match\n    \\     \\  \n\n/\\S{2,3}?/utf\n    12abcd34\n    1234abcd\n\\= Expect no match\n    \\     \\  \n\n/>\\s+</utf\n    12>      <34\n\n/>\\s{2,3}</utf\n    ab>  <cd\n    ab>   <ce\n\\= Expect no match\n    ab>    <cd \n\n/>\\s{2,3}?</utf\n    ab>  <cd\n    ab>   <ce\n\\= Expect no match\n    ab>    <cd \n\n/\\w+/utf\n    12      34\n\\= Expect no match\n    +++=*! \n\n/\\w{2,3}/utf\n    ab  cd\n    abcd ce\n\\= Expect no match\n    a.b.c\n\n/\\w{2,3}?/utf\n    ab  cd\n    abcd ce\n\\= Expect no match\n    a.b.c\n\n/\\W+/utf\n    12====34\n\\= Expect no match\n    abcd \n\n/\\W{2,3}/utf\n    ab====cd\n    ab==cd\n\\= Expect no match\n    a.b.c\n\n/\\W{2,3}?/utf\n    ab====cd\n    ab==cd\n\\= Expect no match\n    a.b.c\n\n/[\\x{100}]/utf\n    \\x{100}\n    Z\\x{100}\n    \\x{100}Z\n\n/[Z\\x{100}]/utf\n    Z\\x{100}\n    \\x{100}\n    \\x{100}Z\n\n/[\\x{100}\\x{200}]/utf\n   ab\\x{100}cd\n   ab\\x{200}cd\n\n/[\\x{100}-\\x{200}]/utf\n   ab\\x{100}cd\n   ab\\x{200}cd\n   ab\\x{111}cd \n\n/[z-\\x{200}]/utf\n   ab\\x{100}cd\n   ab\\x{200}cd\n   ab\\x{111}cd \n   abzcd\n   ab|cd  \n\n/[Q\\x{100}\\x{200}]/utf\n   ab\\x{100}cd\n   ab\\x{200}cd\n   Q? \n\n/[Q\\x{100}-\\x{200}]/utf\n   ab\\x{100}cd\n   ab\\x{200}cd\n   ab\\x{111}cd \n   Q? \n\n/[Qz-\\x{200}]/utf\n   ab\\x{100}cd\n   ab\\x{200}cd\n   ab\\x{111}cd \n   abzcd\n   ab|cd  \n   Q? \n\n/[\\x{100}\\x{200}]{1,3}/utf\n   ab\\x{100}cd\n   ab\\x{200}cd\n   ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n\n/[\\x{100}\\x{200}]{1,3}?/utf\n   ab\\x{100}cd\n   ab\\x{200}cd\n   ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n\n/[Q\\x{100}\\x{200}]{1,3}/utf\n   ab\\x{100}cd\n   ab\\x{200}cd\n   ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n\n/[Q\\x{100}\\x{200}]{1,3}?/utf\n   ab\\x{100}cd\n   ab\\x{200}cd\n   ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n\n/(?<=[\\x{100}\\x{200}])X/utf\n    abc\\x{200}X\n    abc\\x{100}X \n\\= Expect no match\n    X  \n\n/(?<=[Q\\x{100}\\x{200}])X/utf\n    abc\\x{200}X\n    abc\\x{100}X \n    abQX \n\\= Expect no match\n    X  \n\n/(?<=[\\x{100}\\x{200}]{3})X/utf\n    abc\\x{100}\\x{200}\\x{100}X\n\\= Expect no match\n    abc\\x{200}X\n    X  \n\n/[^\\x{100}\\x{200}]X/utf\n    AX\n    \\x{150}X\n    \\x{500}X \n\\= Expect no match\n    \\x{100}X\n    \\x{200}X   \n\n/[^Q\\x{100}\\x{200}]X/utf\n    AX\n    \\x{150}X\n    \\x{500}X \n\\= Expect no match\n    \\x{100}X\n    \\x{200}X   \n    QX \n\n/[^\\x{100}-\\x{200}]X/utf\n    AX\n    \\x{500}X \n\\= Expect no match\n    \\x{100}X\n    \\x{150}X\n    \\x{200}X   \n\n/[z-\\x{100}]/i,utf\n    z\n    Z \n    \\x{100}\n\\= Expect no match\n    \\x{102}\n    y    \n\n/[\\xFF]/\n    >\\xff<\n\n/[\\xff]/utf\n    >\\x{ff}<\n\n/[^\\xFF]/\n    XYZ\n\n/[^\\xff]/utf\n    XYZ\n    \\x{123} \n\n/^[ac]*b/utf\n\\= Expect no match\n    xb\n\n/^[ac\\x{100}]*b/utf\n\\= Expect no match\n    xb\n\n/^[^x]*b/i,utf\n\\= Expect no match\n    xb\n\n/^[^x]*b/utf\n\\= Expect no match\n    xb\n  \n/^\\d*b/utf\n\\= Expect no match\n    xb \n\n/(|a)/g,utf\n    catac\n    a\\x{256}a \n\n/^\\x{85}$/i,utf\n    \\x{85}\n\n/^abc./gmx,newline=any,utf\n    abc1 \\x0aabc2 \\x0babc3xx \\x0cabc4 \\x0dabc5xx \\x0d\\x0aabc6 \\x{0085}abc7 \\x{2028}abc8 \\x{2029}abc9 JUNK\n\n/abc.$/gmx,newline=any,utf\n    abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x{0085} abc7\\x{2028} abc8\\x{2029} abc9\n\n/^a\\Rb/bsr=unicode,utf\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x0bb\n    a\\x0cb\n    a\\x{85}b   \n    a\\x{2028}b \n    a\\x{2029}b \n\\= Expect no match\n    a\\n\\rb    \n\n/^a\\R*b/bsr=unicode,utf\n    ab\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x0bb\n    a\\x0c\\x{2028}\\x{2029}b\n    a\\x{85}b   \n    a\\n\\rb    \n    a\\n\\r\\x{85}\\x0cb \n\n/^a\\R+b/bsr=unicode,utf\n    a\\nb\n    a\\rb\n    a\\r\\nb\n    a\\x0bb\n    a\\x0c\\x{2028}\\x{2029}b\n    a\\x{85}b   \n    a\\n\\rb    \n    a\\n\\r\\x{85}\\x0cb \n\\= Expect no match\n    ab  \n\n/^a\\R{1,3}b/bsr=unicode,utf\n    a\\nb\n    a\\n\\rb\n    a\\n\\r\\x{85}b\n    a\\r\\n\\r\\nb \n    a\\r\\n\\r\\n\\r\\nb \n    a\\n\\r\\n\\rb\n    a\\n\\n\\r\\nb \n\\= Expect no match\n    a\\n\\n\\n\\rb\n    a\\r\n\n/\\h+\\V?\\v{3,4}/utf,no_auto_possess\n    \\x09\\x20\\x{a0}X\\x0a\\x0b\\x0c\\x0d\\x0a\n\n/\\V?\\v{3,4}/utf,no_auto_possess\n    \\x20\\x{a0}X\\x0a\\x0b\\x0c\\x0d\\x0a\n\n/\\h+\\V?\\v{3,4}/utf,no_auto_possess\n    >\\x09\\x20\\x{a0}X\\x0a\\x0a\\x0a<\n\n/\\V?\\v{3,4}/utf,no_auto_possess\n    >\\x09\\x20\\x{a0}X\\x0a\\x0a\\x0a<\n\n/\\H\\h\\V\\v/utf\n    X X\\x0a\n    X\\x09X\\x0b\n\\= Expect no match\n    \\x{a0} X\\x0a   \n    \n/\\H*\\h+\\V?\\v{3,4}/utf,no_auto_possess\n    \\x09\\x20\\x{a0}X\\x0a\\x0b\\x0c\\x0d\\x0a\n    \\x09\\x20\\x{a0}\\x0a\\x0b\\x0c\\x0d\\x0a\n    \\x09\\x20\\x{a0}\\x0a\\x0b\\x0c\n\\= Expect no match \n    \\x09\\x20\\x{a0}\\x0a\\x0b\n     \n/\\H\\h\\V\\v/utf\n    \\x{3001}\\x{3000}\\x{2030}\\x{2028}\n    X\\x{180e}X\\x{85}\n\\= Expect no match\n    \\x{2009} X\\x0a   \n    \n/\\H*\\h+\\V?\\v{3,4}/utf,no_auto_possess\n    \\x{1680}\\x{180e}\\x{2007}X\\x{2028}\\x{2029}\\x0c\\x0d\\x0a\n    \\x09\\x{205f}\\x{a0}\\x0a\\x{2029}\\x0c\\x{2028}\\x0a\n    \\x09\\x20\\x{202f}\\x0a\\x0b\\x0c\n\\= Expect no match \n    \\x09\\x{200a}\\x{a0}\\x{2028}\\x0b\n     \n/a\\Rb/I,bsr=anycrlf,utf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n\\= Expect no match\n    a\\x{85}b\n    a\\x0bb     \n\n/a\\Rb/I,bsr=unicode,utf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n    a\\x{85}b\n    a\\x0bb     \n    \n/a\\R?b/I,bsr=anycrlf,utf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n\\= Expect no match\n    a\\x{85}b\n    a\\x0bb     \n\n/a\\R?b/I,bsr=unicode,utf\n    a\\rb\n    a\\nb\n    a\\r\\nb\n    a\\x{85}b\n    a\\x0bb     \n \n/X/newline=any,utf,firstline\n    A\\x{1ec5}ABCXYZ\n\n/abcd*/utf\n    xxxxabcd\\=ps\n    xxxxabcd\\=ph\n\n/abcd*/i,utf\n    xxxxabcd\\=ps\n    xxxxabcd\\=ph\n    XXXXABCD\\=ps\n    XXXXABCD\\=ph\n\n/abc\\d*/utf\n    xxxxabc1\\=ps\n    xxxxabc1\\=ph\n\n/abc[de]*/utf\n    xxxxabcde\\=ps\n    xxxxabcde\\=ph\n\n/\\bthe cat\\b/utf\n    the cat\\=ps\n    the cat\\=ph\n\n/./newline=crlf,utf\n    \\r\\=ps\n    \\r\\=ph\n  \n/.{2,3}/newline=crlf,utf\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\r\\=ps\n    \\r\\r\\=ph\n    \\r\\r\\r\\=ps\n    \\r\\r\\r\\=ph\n\n/.{2,3}?/newline=crlf,utf\n    \\r\\=ps\n    \\r\\=ph\n    \\r\\r\\=ps\n    \\r\\r\\=ph\n    \\r\\r\\r\\=ps\n    \\r\\r\\r\\=ph\n\n/[^\\x{100}]/utf\n    \\x{100}\\x{101}X\n\n/[^\\x{100}]+/utf\n    \\x{100}\\x{101}X\n\n/\\pL\\P{Nd}/utf\n    AB\n\\= Expect no match\n    A0\n    00\n\n/\\X./utf\n    AB\n    A\\x{300}BC\n    A\\x{300}\\x{301}\\x{302}BC\n\\= Expect no match\n    \\x{300}\n\n/\\X\\X/utf\n    ABC\n    A\\x{300}B\\x{300}\\x{301}C\n    A\\x{300}\\x{301}\\x{302}BC\n\\= Expect no match\n    \\x{300}\n\n/^\\pL+/utf\n    abcd\n    a\n\n/^\\PL+/utf\n    1234\n    =\n\\= Expect no match\n    abcd\n\n/^\\X+/utf\n    abcdA\\x{300}\\x{301}\\x{302}\n    A\\x{300}\\x{301}\\x{302}\n    A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}\n    a\n    \\x{300}\\x{301}\\x{302}\n\n/\\X?abc/utf\n    abc\n    A\\x{300}abc\n    A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abcxyz\n    \\x{300}abc\n\n/^\\X?abc/utf\n    abc\n    A\\x{300}abc\n    \\x{300}abc\n\\= Expect no match\n    A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abcxyz\n\n/\\X*abc/utf\n    abc\n    A\\x{300}abc\n    A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abcxyz\n    \\x{300}abc\n\n/^\\X*abc/utf\n    abc\n    A\\x{300}abc\n    A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abcxyz\n    \\x{300}abc\n\n/^\\pL?=./utf\n    A=b\n    =c\n\\= Expect no match\n    1=2\n    AAAA=b\n\n/^\\pL*=./utf\n    AAAA=b\n    =c\n\\= Expect no match\n    1=2\n\n/^\\X{2,3}X/utf\n    A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X\n    A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X\n\\= Expect no match\n    X\n    A\\x{300}\\x{301}\\x{302}X\n    A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X\n\n/^\\pC\\pL\\pM\\pN\\pP\\pS\\pZ</utf\n    \\x7f\\x{c0}\\x{30f}\\x{660}\\x{66c}\\x{f01}\\x{1680}<\n    \\np\\x{300}9!\\$ <\n\\= Expect no match\n    ap\\x{300}9!\\$ <\n  \n/^\\PC/utf\n    X\n\\= Expect no match\n    \\x7f\n  \n/^\\PL/utf\n    9\n\\= Expect no match\n    \\x{c0}\n  \n/^\\PM/utf\n    X\n\\= Expect no match\n    \\x{30f}\n  \n/^\\PN/utf\n    X\n\\= Expect no match\n    \\x{660}\n  \n/^\\PP/utf\n    X\n\\= Expect no match\n    \\x{66c}\n  \n/^\\PS/utf\n    X\n\\= Expect no match\n    \\x{f01}\n  \n/^\\PZ/utf\n    X\n\\= Expect no match\n    \\x{1680}\n    \n/^\\p{Cc}/utf\n    \\x{017}\n    \\x{09f}\n\\= Expect no match\n    \\x{0600}\n  \n/^\\p{Cf}/utf\n    \\x{601}\n    \\x{180e}\n    \\x{061c}\n    \\x{2066}\n    \\x{2067}\n    \\x{2068}\n    \\x{2069}\n\\= Expect no match\n    \\x{09f}\n  \n/^\\p{Cn}/utf\n\\= Expect no match\n    \\x{09f}\n  \n/^\\p{Co}/utf\n    \\x{f8ff}\n\\= Expect no match\n    \\x{09f}\n  \n/^\\p{Cs}/utf\n    \\x{dfff}\\=no_utf_check\n\\= Expect no match\n    \\x{09f}\n  \n/^\\p{Ll}/utf\n    a\n\\= Expect no match\n    Z\n    \\x{e000}\n  \n/^\\p{Lm}/utf\n    \\x{2b0}\n\\= Expect no match\n    a\n  \n/^\\p{Lo}/utf\n    \\x{1bb}\n\\= Expect no match\n    a\n    \\x{2b0}\n  \n/^\\p{Lt}/utf\n    \\x{1c5}\n\\= Expect no match\n    a\n    \\x{2b0}\n  \n/^\\p{Lu}/utf\n    A\n\\= Expect no match\n    \\x{2b0}\n  \n/^\\p{Mc}/utf\n    \\x{903}\n\\= Expect no match\n    X\n    \\x{300}\n       \n/^\\p{Me}/utf\n    \\x{488}\n\\= Expect no match\n    X\n    \\x{903}\n    \\x{300}\n  \n/^\\p{Mn}/utf\n    \\x{300}\n    \\x{1a1b}\n\\= Expect no match\n    X\n    \\x{903}\n  \n/^\\p{Nd}+/utf,no_auto_possess\n    0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\\x{668}\\x{669}\\x{66a}\n    \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\\x{6f8}\\x{6f9}\\x{6fa}\n    \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\\x{96e}\\x{96f}\\x{970}\n\\= Expect no match\n    X\n  \n/^\\p{Nl}/utf\n    \\x{16ee}\n\\= Expect no match\n    X\n    \\x{966}\n  \n/^\\p{No}/utf\n    \\x{b2}\n    \\x{b3}\n\\= Expect no match\n    X\n    \\x{16ee}\n  \n/^\\p{Pc}/utf\n    \\x5f\n    \\x{203f}\n\\= Expect no match\n    X\n    -\n    \\x{58a}\n  \n/^\\p{Pd}/utf\n    -\n    \\x{58a}\n\\= Expect no match\n    X\n    \\x{203f}\n  \n/^\\p{Pe}/utf\n    )\n    ]\n    }\n    \\x{f3b}\n    \\x{2309}\n    \\x{230b}\n\\= Expect no match\n    X\n    \\x{203f}\n    (\n    [\n    {\n    \\x{f3c}\n\n/^\\p{Pf}/utf\n    \\x{bb}\n    \\x{2019}\n\\= Expect no match\n    X\n    \\x{203f}\n  \n/^\\p{Pi}/utf\n    \\x{ab}\n    \\x{2018}\n\\= Expect no match\n    X\n    \\x{203f}\n  \n/^\\p{Po}/utf\n    !\n    \\x{37e}\n\\= Expect no match\n    X\n    \\x{203f}\n  \n/^\\p{Ps}/utf\n    (\n    [\n    {\n    \\x{f3c}\n    \\x{2308}\n    \\x{230a}\n\\= Expect no match\n    X\n    )\n    ]\n    }\n    \\x{f3b}\n  \n/^\\p{Sc}+/utf\n    $\\x{a2}\\x{a3}\\x{a4}\\x{a5}\\x{a6}\n    \\x{9f2}\n\\= Expect no match\n    X\n    \\x{2c2}\n  \n/^\\p{Sk}/utf\n    \\x{2c2}\n\\= Expect no match\n    X\n    \\x{9f2}\n  \n/^\\p{Sm}+/utf\n    +<|~\\x{ac}\\x{2044}\n\\= Expect no match\n    X\n    \\x{9f2}\n  \n/^\\p{So}/utf\n    \\x{a6}\n    \\x{482}\n\\= Expect no match\n    X\n    \\x{9f2}\n  \n/^\\p{Zl}/utf\n    \\x{2028}\n\\= Expect no match\n    X\n    \\x{2029}\n  \n/^\\p{Zp}/utf\n    \\x{2029}\n\\= Expect no match\n    X\n    \\x{2028}\n  \n/^\\p{Zs}/utf\n    \\ \\\n    \\x{a0}\n    \\x{1680}\n    \\x{2000}\n    \\x{2001}\n\\= Expect no match\n    \\x{2028}\n    \\x{200d}\n  \n/\\p{Nd}+(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}+?(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}{2,}(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}{2,}?(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}*(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}*?(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}{2}(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}{2,3}(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}{2,3}?(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}?(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}??(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}*+(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}*+(...)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}*+(....)/utf\n\\= Expect no match\n      \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{^Lu}/i,utf\n    1234\n\\= Expect no match\n    ABC\n\n/\\P{Lu}/i,utf\n    1234\n\\= Expect no match\n    ABC\n\n/(?<=A\\p{Nd})XYZ/utf\n    A2XYZ\n    123A5XYZPQR\n    ABA\\x{660}XYZpqr\n\\= Expect no match\n    AXYZ\n    XYZ\n    \n/(?<!\\pL)XYZ/utf\n    1XYZ\n    AB=XYZ..\n    XYZ\n\\= Expect no match\n    WXYZ\n\n/[\\p{Nd}]/utf\n    1234\n\n/[\\p{Nd}+-]+/utf\n    1234\n    12-34\n    12+\\x{661}-34\n\\= Expect no match\n    abcd\n\n/[\\P{Nd}]+/utf\n    abcd\n\\= Expect no match\n    1234\n\n/\\D+/utf,no_auto_possess\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\n     \n/\\P{Nd}+/utf,no_auto_possess\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\n\n/[\\D]+/utf,no_auto_possess\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\n\n/[\\P{Nd}]+/utf,no_auto_possess\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\n\n/[\\D\\P{Nd}]+/utf,no_auto_possess\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\n\n/\\pL/utf\n    a\n    A\n\n/\\pL/i,utf\n    a\n    A\n    \n/^\\x{c0}$/i,utf\n    \\x{c0}\n    \\x{e0}\n\n/^\\x{e0}$/i,utf\n    \\x{c0}\n    \\x{e0}\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/utf\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n\\= Expect no match\n    a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n    A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}\n    A\\x{391}\\x{1044F}\\x{ff3a}\\x{1fb0}\n    A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/i,utf\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n    a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n    A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}\n    A\\x{391}\\x{1044F}\\x{ff3a}\\x{1fb0}\n    A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}\n\n/\\x{391}+/i,utf\n    \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}\n\n/\\x{391}{3,5}(.)/i,utf\n    \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X\n\n/\\x{391}{3,5}?(.)/i,utf\n    \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X\n\n/[\\x{391}\\x{ff3a}]/i,utf\n    \\x{391}\n    \\x{ff3a}\n    \\x{3b1}\n    \\x{ff5a}\n    \n/[\\x{c0}\\x{391}]/i,utf\n    \\x{c0}\n    \\x{e0}\n\n/[\\x{105}-\\x{109}]/i,utf\n    \\x{104}\n    \\x{105}\n    \\x{109}\n\\= Expect no match\n    \\x{100}\n    \\x{10a}\n    \n/[z-\\x{100}]/i,utf\n    Z\n    z\n    \\x{39c}\n    \\x{178}\n    |\n    \\x{80}\n    \\x{ff}\n    \\x{100}\n    \\x{101}\n\\= Expect no match\n    \\x{102}\n    Y\n    y\n\n/[z-\\x{100}]/i,utf\n\n/^\\X/utf\n    A\n    A\\x{300}BC\n    A\\x{300}\\x{301}\\x{302}BC\n    \\x{300}\n\n/^(\\X*)C/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n\n/^(\\X*?)C/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n\n/^(\\X*)(.)/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n\n/^(\\X*?)(.)/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n\n/^\\X(.)/utf\n\\= Expect no match\n    A\\x{300}\\x{301}\\x{302}\n\n/^\\X{2,3}(.)/utf\n    A\\x{300}\\x{301}B\\x{300}X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}DA\\x{300}X\n    \n/^\\X{2,3}?(.)/utf\n    A\\x{300}\\x{301}B\\x{300}X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}DA\\x{300}X\n\n/^\\pN{2,3}X/\n    12X\n    123X\n\\= Expect no match\n    X\n    1X\n    1234X\n\n/\\x{100}/i,utf\n    \\x{100}\n    \\x{101}\n    \n/^\\p{Han}+/utf\n    \\x{2e81}\\x{3007}\\x{2f804}\\x{31a0}\n\\= Expect no match\n    \\x{2e7f}\n\n/^\\P{Katakana}+/utf\n    \\x{3105}\n\\= Expect no match\n    \\x{30ff}\n\n/^[\\p{Arabic}]/utf\n    \\x{06e9}\n    \\x{060b}\n\\= Expect no match\n    X\\x{06e9}\n\n/^[\\P{Yi}]/utf\n    \\x{2f800}\n\\= Expect no match\n    \\x{a014}\n    \\x{a4c6}\n\n/^\\p{Any}X/utf\n    AXYZ\n    \\x{1234}XYZ\n\\= Expect no match\n    X\n    \n/^\\P{Any}X/utf\n\\= Expect no match\n    AX\n    \n/^\\p{Any}?X/utf\n    XYZ\n    AXYZ\n    \\x{1234}XYZ\n\\= Expect no match\n    ABXYZ\n\n/^\\P{Any}?X/utf\n    XYZ\n\\= Expect no match\n    AXYZ\n    \\x{1234}XYZ\n    ABXYZ\n\n/^\\p{Any}+X/utf\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n\\= Expect no match\n    XYZ\n\n/^\\P{Any}+X/utf\n\\= Expect no match\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n    XYZ\n\n/^\\p{Any}*X/utf\n    XYZ\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n\n/^\\P{Any}*X/utf\n    XYZ\n\\= Expect no match\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n\n/^[\\p{Any}]X/utf\n    AXYZ\n    \\x{1234}XYZ\n\\= Expect no match\n    X\n    \n/^[\\P{Any}]X/utf\n\\= Expect no match\n    AX\n    \n/^[\\p{Any}]?X/utf\n    XYZ\n    AXYZ\n    \\x{1234}XYZ\n\\= Expect no match\n    ABXYZ\n\n/^[\\P{Any}]?X/utf\n    XYZ\n\\= Expect no match\n    AXYZ\n    \\x{1234}XYZ\n    ABXYZ\n\n/^[\\p{Any}]+X/utf\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n\\= Expect no match\n    XYZ\n\n/^[\\P{Any}]+X/utf\n\\= Expect no match\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n    XYZ\n\n/^[\\p{Any}]*X/utf\n    XYZ\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n\n/^[\\P{Any}]*X/utf\n    XYZ\n\\= Expect no match\n    AXYZ\n    \\x{1234}XYZ\n    A\\x{1234}XYZ\n\n/^\\p{Any}{3,5}?/utf\n    abcdefgh\n    \\x{1234}\\n\\r\\x{3456}xyz\n\n/^\\p{Any}{3,5}/utf\n    abcdefgh\n    \\x{1234}\\n\\r\\x{3456}xyz\n\n/^\\P{Any}{3,5}?/utf\n\\= Expect no match\n    abcdefgh\n    \\x{1234}\\n\\r\\x{3456}xyz\n\n/^\\p{L&}X/utf\n     AXY\n     aXY\n     \\x{1c5}XY\n\\= Expect no match\n     \\x{1bb}XY\n     \\x{2b0}XY\n     !XY\n\n/^[\\p{L&}]X/utf\n     AXY\n     aXY\n     \\x{1c5}XY\n\\= Expect no match\n     \\x{1bb}XY\n     \\x{2b0}XY\n     !XY\n\n/^\\p{L&}+X/utf\n     AXY\n     aXY\n     AbcdeXyz\n     \\x{1c5}AbXY\n     abcDEXypqreXlmn\n\\= Expect no match\n     \\x{1bb}XY\n     \\x{2b0}XY\n     !XY\n\n/^[\\p{L&}]+X/utf\n     AXY\n     aXY\n     AbcdeXyz\n     \\x{1c5}AbXY\n     abcDEXypqreXlmn\n\\= Expect no match\n     \\x{1bb}XY\n     \\x{2b0}XY\n     !XY\n\n/^\\p{L&}+?X/utf\n     AXY\n     aXY\n     AbcdeXyz\n     \\x{1c5}AbXY\n     abcDEXypqreXlmn\n\\= Expect no match\n     \\x{1bb}XY\n     \\x{2b0}XY\n     !XY\n\n/^[\\p{L&}]+?X/utf\n     AXY\n     aXY\n     AbcdeXyz\n     \\x{1c5}AbXY\n     abcDEXypqreXlmn\n\\= Expect no match\n     \\x{1bb}XY\n     \\x{2b0}XY\n     !XY\n\n/^\\P{L&}X/utf\n     !XY\n     \\x{1bb}XY\n     \\x{2b0}XY\n\\= Expect no match\n     \\x{1c5}XY\n     AXY\n\n/^[\\P{L&}]X/utf\n     !XY\n     \\x{1bb}XY\n     \\x{2b0}XY\n\\= Expect no match\n     \\x{1c5}XY\n     AXY\n\n/^\\x{023a}+?(\\x{0130}+)/i,utf\n  \\x{023a}\\x{2c65}\\x{0130}\n  \n/^\\x{023a}+([^X])/i,utf\n  \\x{023a}\\x{2c65}X\n \n/\\x{c0}+\\x{116}+/i,utf\n    \\x{c0}\\x{e0}\\x{116}\\x{117}\n\n/[\\x{c0}\\x{116}]+/i,utf\n    \\x{c0}\\x{e0}\\x{116}\\x{117}\n\n# Check property support in non-UTF-8 mode\n \n/\\p{L}{4}/\n    123abcdefg\n    123abc\\xc4\\xc5zz\n\n/\\p{Carian}\\p{Cham}\\p{Kayah_Li}\\p{Lepcha}\\p{Lycian}\\p{Lydian}\\p{Ol_Chiki}\\p{Rejang}\\p{Saurashtra}\\p{Sundanese}\\p{Vai}/utf\n    \\x{102A4}\\x{AA52}\\x{A91D}\\x{1C46}\\x{10283}\\x{1092E}\\x{1C6B}\\x{A93B}\\x{A8BF}\\x{1BA0}\\x{A50A}====\n\n/\\x{a77d}\\x{1d79}/i,utf\n    \\x{a77d}\\x{1d79}\n    \\x{1d79}\\x{a77d}\n\n/\\x{a77d}\\x{1d79}/utf\n    \\x{a77d}\\x{1d79}\n\\= Expect no match\n    \\x{1d79}\\x{a77d}\n\n/^\\p{Xan}/utf\n    ABCD\n    1234\n    \\x{6ca}\n    \\x{a6c}\n    \\x{10a7}\n\\= Expect no match\n    _ABC\n\n/^\\p{Xan}+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\\= Expect no match\n    _ABC\n\n/^\\p{Xan}*/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n    \n/^\\p{Xan}{2,9}/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n    \n/^[\\p{Xan}]/utf\n    ABCD1234_\n    1234abcd_\n    \\x{6ca}\n    \\x{a6c}\n    \\x{10a7}\n\\= Expect no match\n    _ABC\n \n/^[\\p{Xan}]+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\\= Expect no match\n    _ABC\n\n/^>\\p{Xsp}/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n\\= Expect no match\n    \\x{0b}\n\n/^>\\p{Xsp}+/utf,no_auto_possess\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xsp}*/utf,no_auto_possess\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n    \n/^>\\p{Xsp}{2,9}/utf,no_auto_possess\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n    \n/^>[\\p{Xsp}]/utf,no_auto_possess\n    >\\x{2028}\\x{0b}\n \n/^>[\\p{Xsp}]+/utf,no_auto_possess\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n    >\\x{a0}\n\\= Expect no match\n    \\x{0b}\n\n/^>\\p{Xps}+/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}+?/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}*/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n    \n/^>\\p{Xps}{2,9}/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n    \n/^>\\p{Xps}{2,9}?/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n    \n/^>[\\p{Xps}]/utf\n    >\\x{2028}\\x{0b}\n \n/^>[\\p{Xps}]+/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^\\p{Xwd}/utf\n    ABCD\n    1234\n    \\x{6ca}\n    \\x{a6c}\n    \\x{10a7}\n    _ABC\n\\= Expect no match\n    []\n\n/^\\p{Xwd}+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\n/^\\p{Xwd}*/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n    \n/^\\p{Xwd}{2,9}/utf\n    A_12\\x{6ca}\\x{a6c}\\x{10a7}\n    \n/^[\\p{Xwd}]/utf\n    ABCD1234_\n    1234abcd_\n    \\x{6ca}\n    \\x{a6c}\n    \\x{10a7}\n    _ABC\n\\= Expect no match\n    []\n \n/^[\\p{Xwd}]+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\n# Unicode properties for \\b and \\B\n\n/\\b...\\B/utf,ucp\n    abc_\n    \\x{37e}abc\\x{376}\n    \\x{37e}\\x{376}\\x{371}\\x{393}\\x{394}\n    !\\x{c0}++\\x{c1}\\x{c2}\n    !\\x{c0}+++++\n\n# Without PCRE2_UCP, non-ASCII always fail, even if < 256  \n\n/\\b...\\B/utf\n    abc_\n\\= Expect no match\n    \\x{37e}abc\\x{376}\n    \\x{37e}\\x{376}\\x{371}\\x{393}\\x{394}\n    !\\x{c0}++\\x{c1}\\x{c2}\n    !\\x{c0}+++++\n\n# With PCRE2_UCP, non-UTF8 chars that are < 256 still check properties  \n\n/\\b...\\B/ucp\n    abc_\n    !\\x{c0}++\\x{c1}\\x{c2}\n    !\\x{c0}+++++\n    \n# Caseless single negated characters > 127 need UCP support \n\n/[^\\x{100}]/i,utf\n    \\x{100}\\x{101}X\n\n/[^\\x{100}]+/i,utf\n    \\x{100}\\x{101}XX\n\n/^\\X/utf\n    A\\=ps\n    A\\=ph\n    A\\x{300}\\x{301}\\=ps\n    A\\x{300}\\x{301}\\=ph\n    A\\x{301}\\=ps\n    A\\x{301}\\=ph\n    \n/^\\X{2,3}/utf\n    A\\=ps\n    A\\=ph\n    AA\\=ps\n    AA\\=ph\n    A\\x{300}\\x{301}\\=ps\n    A\\x{300}\\x{301}\\=ph\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ps\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ph\n\n/^\\X{2}/utf\n    AA\\=ps\n    AA\\=ph\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ps\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ph\n    \n/^\\X+/utf\n    AA\\=ps\n    AA\\=ph\n\n/^\\X+?Z/utf\n    AA\\=ps\n    AA\\=ph\n\n# These are tests for extended grapheme clusters  \n\n/^\\X/utf,aftertext\n    G\\x{34e}\\x{34e}X\n    \\x{34e}\\x{34e}X\n    \\x04X\n    \\x{1100}X\n    \\x{1100}\\x{34e}X\n    \\x{1b04}\\x{1b04}X\n\\= These match up to the roman letters\n    \\x{1111}\\x{1111}L,L\n    \\x{1111}\\x{1111}\\x{1169}L,L,V\n    \\x{1111}\\x{ae4c}L, LV\n    \\x{1111}\\x{ad89}L, LVT\n    \\x{1111}\\x{ae4c}\\x{1169}L, LV, V\n    \\x{1111}\\x{ae4c}\\x{1169}\\x{1169}L, LV, V, V\n    \\x{1111}\\x{ae4c}\\x{1169}\\x{11fe}L, LV, V, T\n    \\x{1111}\\x{ad89}\\x{11fe}L, LVT, T\n    \\x{1111}\\x{ad89}\\x{11fe}\\x{11fe}L, LVT, T, T\n    \\x{ad89}\\x{11fe}\\x{11fe}LVT, T, T\n\\= These match just the first codepoint (invalid sequence)\n    \\x{1111}\\x{11fe}L, T\n    \\x{ae4c}\\x{1111}LV, L\n    \\x{ae4c}\\x{ae4c}LV, LV\n    \\x{ae4c}\\x{ad89}LV, LVT\n    \\x{1169}\\x{1111}V, L\n    \\x{1169}\\x{ae4c}V, LV\n    \\x{1169}\\x{ad89}V, LVT\n    \\x{ad89}\\x{1111}LVT, L\n    \\x{ad89}\\x{1169}LVT, V\n    \\x{ad89}\\x{ae4c}LVT, LV\n    \\x{ad89}\\x{ad89}LVT, LVT\n    \\x{11fe}\\x{1111}T, L\n    \\x{11fe}\\x{1169}T, V\n    \\x{11fe}\\x{ae4c}T, LV\n    \\x{11fe}\\x{ad89}T, LVT\n\\= Test extend and spacing mark\n    \\x{1111}\\x{ae4c}\\x{0711}L, LV, extend\n    \\x{1111}\\x{ae4c}\\x{1b04}L, LV, spacing mark\n    \\x{1111}\\x{ae4c}\\x{1b04}\\x{0711}\\x{1b04}L, LV, spacing mark, extend, spacing mark\n\\= Test CR, LF, and control\n    \\x0d\\x{0711}CR, extend\n    \\x0d\\x{1b04}CR, spacingmark\n    \\x0a\\x{0711}LF, extend\n    \\x0a\\x{1b04}LF, spacingmark\n    \\x0b\\x{0711}Control, extend\n    \\x09\\x{1b04}Control, spacingmark\n\\= There are no Prepend characters, so we can't test Prepend, CR\n    \n/^(?>\\X{2})X/utf,aftertext\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n    \n/^\\X{2,4}X/utf,aftertext\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n\n/^\\X{2,4}?X/utf,aftertext\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n\n/\\x{1e9e}+/i,utf\n    \\x{1e9e}\\x{00df}\n\n/[z\\x{1e9e}]+/i,utf\n    \\x{1e9e}\\x{00df}\n\n/\\x{00df}+/i,utf\n    \\x{1e9e}\\x{00df}\n\n/[z\\x{00df}]+/i,utf\n    \\x{1e9e}\\x{00df}\n\n/\\x{1f88}+/i,utf\n    \\x{1f88}\\x{1f80}\n\n/[z\\x{1f88}]+/i,utf\n    \\x{1f88}\\x{1f80}\n\n# Perl matches these \n\n/\\x{00b5}+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n\n/\\x{039c}+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n\n/\\x{03bc}+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n\n\n/\\x{00c5}+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n\n/\\x{00e5}+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n\n/\\x{212b}+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n\n/\\x{01c4}+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n\n/\\x{01c5}+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n\n/\\x{01c6}+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n\n/\\x{01c7}+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n\n/\\x{01c8}+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n\n/\\x{01c9}+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n\n\n/\\x{01ca}+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n\n/\\x{01cb}+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n\n/\\x{01cc}+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n\n/\\x{01f1}+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n\n/\\x{01f2}+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n\n/\\x{01f3}+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n\n/\\x{0345}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n\n/\\x{0399}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n\n/\\x{03b9}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n\n/\\x{1fbe}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n\n/\\x{0392}+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n\n/\\x{03b2}+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n\n/\\x{03d0}+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n    \n\n/\\x{0395}+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n\n/\\x{03b5}+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n\n/\\x{03f5}+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n\n/\\x{0398}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n\n/\\x{03b8}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n\n/\\x{03d1}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n\n/\\x{03f4}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n\n/\\x{039a}+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n\n/\\x{03ba}+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n\n/\\x{03f0}+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n    \n/\\x{03a0}+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n\n/\\x{03c0}+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n\n/\\x{03d6}+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n\n/\\x{03a1}+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n\n/\\x{03c1}+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n\n/\\x{03f1}+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n\n/\\x{03a3}+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n\n/\\x{03c2}+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n\n/\\x{03c3}+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n\n/\\x{03a6}+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n\n/\\x{03c6}+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n\n/\\x{03d5}+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n\n/\\x{03c9}+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n\n/\\x{03a9}+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n\n/\\x{2126}+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n    \n/\\x{1e60}+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n\n/\\x{1e61}+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n\n/\\x{1e9b}+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n    \n/\\x{1e9e}+/i,utf\n    \\x{1e9e}\\x{00df}\n\n/\\x{00df}+/i,utf\n    \\x{1e9e}\\x{00df}\n    \n/\\x{1f88}+/i,utf\n    \\x{1f88}\\x{1f80}\n\n/\\x{1f80}+/i,utf\n    \\x{1f88}\\x{1f80}\n\n/\\x{004b}+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n\n/\\x{006b}+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n\n/\\x{212a}+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n\n/\\x{0053}+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n\n/\\x{0073}+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n\n/\\x{017f}+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n\n/ist/i,utf\n\\= Expect no match\n    ikt\n\n/is+t/i,utf\n    iSs\\x{17f}t\n\\= Expect no match\n    ikt\n\n/is+?t/i,utf\n\\= Expect no match\n    ikt\n\n/is?t/i,utf\n\\= Expect no match\n    ikt\n\n/is{2}t/i,utf\n\\= Expect no match\n    iskt\n\n/^\\p{Xuc}/utf\n    $abc\n    @abc\n    `abc\n    \\x{1234}abc\n\\= Expect no match\n    abc\n\n/^\\p{Xuc}+/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^\\p{Xuc}+?/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^\\p{Xuc}+?\\*/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^\\p{Xuc}++/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^\\p{Xuc}{3,5}/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^\\p{Xuc}{3,5}?/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^[\\p{Xuc}]/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^[\\p{Xuc}]+/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n\\= Expect no match\n    \\x{9f}\n\n/^\\P{Xuc}/utf\n    abc\n\\= Expect no match\n    $abc\n    @abc\n    `abc\n    \\x{1234}abc\n\n/^[\\P{Xuc}]/utf\n    abc\n\\= Expect no match\n    $abc\n    @abc\n    `abc\n    \\x{1234}abc\n\n/^A\\s+Z/utf,ucp\n    A\\x{2005}Z\n    A\\x{85}\\x{180e}\\x{2005}Z\n\n/^A[\\s]+Z/utf,ucp\n    A\\x{2005}Z\n    A\\x{85}\\x{180e}\\x{2005}Z\n\n/(?<=\\x{100})\\x{200}(?=\\x{300})/utf,allusedtext\n    \\x{100}\\x{200}\\x{300}\n\n# -----------------------------------------------------------------------------\n# Tests for bidi control and bidi class properties\n\n/\\p{ bidi_control }/utf\n    -->\\x{202c}<--\n\n/\\p{bidicontrol}+/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/\\p{bidicontrol}+?/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/\\p{bidicontrol}++/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/[\\p{bidi_control}]/utf\n    -->\\x{202c}<--\n\n/[\\p{bidicontrol}]+/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/[\\p{bidicontrol}]+?/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/[\\p{bidicontrol}]++/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/[\\p{bidicontrol}<>]+/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/\\P{bidicontrol}+/g,utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/\\p{^bidicontrol}+/g,utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n\n/\\p{bidi class = al}/utf\n    -->\\x{061D}<--\n\n/\\p{bidi class = al}+/utf\n    -->\\x{061D}\\x{061e}\\x{061f}<--\n\n/\\p{bidi_class : AL}+?/utf\n    -->\\x{061D}\\x{061e}\\x{061f}<--\n\n/\\p{Bidi_Class : AL}++/utf\n    -->\\x{061D}\\x{061e}\\x{061f}<--\n\n/\\p{bidi class = aN}+/utf\n    -->\\x{061D}\\x{0602}\\x{0604}\\x{061f}<--\n\n/\\p{bidi class = B}+/utf\n    -->\\x{0a}\\x{0d}\\x{01c}\\x{01e}\\x{085}\\x{2029}<--\n\n/\\p{bidi class:BN}+/utf\n    -->\\x{0}\\x{08}\\x{200c}\\x{fffe}\\x{dfffe}\\x{10ffff}<--\n\n/\\p{bidiclass:cs}+/utf\n    -->,.\\x{060c}\\x{ff1a}<--\n\n/\\p{bidiclass:En}+/utf\n    -->09\\x{b2}\\x{2074}\\x{1fbf9}<--\n\n/\\p{bidiclass:es}+/utf\n    ==>+-\\x{207a}\\x{ff0d}<==\n\n/\\p{bidiclass:et}+/utf\n    -->#\\{24}%\\x{a2}\\x{A838}\\x{1e2ff}<--\n\n/\\p{bidiclass:FSI}+/utf\n    -->\\x{2068}<--\n\n/\\p{bidi class:L}+/utf\n    -->ABC<--\n\n/\\P{bidi class:L}+/utf\n    -->ABC<--\n\n/\\p{bidi class:LRE}+\\p{bidiclass=lri}*\\p{bidiclass:lro}/utf\n    -->\\x{202a}\\x{2066}\\x{202d}<--\n\n/\\p{bidi class:NSM}+/utf\n    -->\\x{9bc}\\x{a71}\\x{e31}<--\n\n/\\p{bidi class:ON}+/utf\n    -->\\x{21}'()*;@\\x{384}\\x{2039}<=-\n\n/\\p{bidiclass:pdf}\\p{bidiclass:pdi}/utf\n    -->\\x{202c}\\x{2069}<--\n\n/\\p{bidi class:R}+/utf\n    -->\\x{590}\\x{5c6}\\x{200f}\\x{10805}<--\n\n/\\p{bidi class:RLE}+\\p{bidi class:RLI}*\\p{bidi class:RLO}+/utf\n    -->\\x{202b}\\x{2067}\\x{202e}<-- \n    \n/\\p{bidi class:S}+\\p{bidiclass:WS}+/utf\n    -->\\x{9}\\x{b}\\x{1f}  \\x{c} \\x{2000} \\x{3000}<--\n\n# -----------------------------------------------------------------------------\n\n/\\p{katakana}/utf\n    \\x{30a1}\n    \\x{3001} \n\n/\\p{scx:katakana}/utf\n    \\x{30a1}\n    \\x{3001} \n    \n/\\p{script extensions:katakana}/utf\n    \\x{30a1}\n    \\x{3001} \n    \n/\\p{sc:katakana}/utf\n    \\x{30a1}\n\\= Expect no match     \n    \\x{3001} \n    \n/\\p{script:katakana}/utf\n    \\x{30a1}\n\\= Expect no match     \n    \\x{3001}\n    \n/\\p{sc:katakana}{3,}/utf\n    \\x{30a1}\\x{30fa}\\x{32d0}\\x{1b122}\\x{ff66}\\x{3001}ABC\n\n/\\p{sc:katakana}{3,}?/utf\n    \\x{30a1}\\x{30fa}\\x{32d0}\\x{1b122}\\x{ff66}\\x{3001}ABC\n\n# Tests for PCRE2_EXTRA_CASELESS_RESTRICT. Compare each test with and without\n# the restriction.\n\n/AskZ/i,utf,caseless_restrict\n    AskZ\n    aSKz\n\\= Expect no match\n    A\\x{17f}kZ\n    As\\x{212a}Z      \n\n/AskZ/i,utf\n    AskZ\n    aSKz\n    A\\x{17f}kZ\n    As\\x{212a}Z      \n\n/A\\x{17f}\\x{212a}Z/ir,utf\n    \\= Expect no match\n    AskZ\n\n/A\\x{17f}\\x{212a}Z/i,utf\n    AskZ\n\n/[AskZ]+/i,utf,caseless_restrict\n    AskZ\n    aSKz \n    A\\x{17f}kZ\n    As\\x{212a}Z      \n\n/[AskZ]+/i,utf\n    AskZ\n    aSKz \n    A\\x{17f}kZ\n    As\\x{212a}Z      \n\n/[\\x{17f}\\x{212a}]+/ir,utf\n\\= Expect no match\n    AskZ\n\n/[\\x{17f}\\x{212a}]+/i,utf\n    AskZ\n\n/[^s]+/ir,utf\n    A\\x{17f}Z \n\n/[^s]+/i,utf\n    A\\x{17f}Z \n\n/[^k]+/ir,utf\n    A\\x{212a}Z \n    \n/[^k]+/i,utf\n    A\\x{212a}Z \n    \n/[^sk]+/ir,utf\n    A\\x{17f}\\x{212a}Z \n\n/[^sk]+/i,utf\n    A\\x{17f}\\x{212a}Z \n\n/[^\\x{17f}]+/ir,utf\n    AsSZ \n\n/[^\\x{17f}]+/i,utf\n    AsSZ \n\n/[Ss]+/irB,utf\n    Sss\\x{17f}ss\n\n/[Ss]+/iB,utf\n    Sss\\x{17f}ss\n\n/[S\\x{17f}]/irB,utf\n\n/[S\\x{17f}]/iB,utf\n\n/[\\x{17f}s]/irB,utf\n\n/[\\x{17f}s]/iB,utf\n\n/[\\x{4b}\\x{6b}]/irB,utf\n\n/[\\x{4b}\\x{6b}]/iB,utf\n\n/s(?r)s(?-r)s(?r:s)s/i,utf\n    \\x{17f}S\\x{17f}S\\x{17f}\n\\= Expect no match     \n    \\x{17f}\\x{17f}\\x{17f}S\\x{17f}\n    \\x{17f}S\\x{17f}\\x{17f}\\x{17f}\n\n/k(?^i)k/ir,utf\n    K\\x{212a}\n\\= Expect no match          \n    \\x{212a}\\x{212a}\n\n# End caseless restrict tests\n\n# TESTS for PCRE2_EXTRA_TURKISH_CASING - again, tests with and without.\n\n/i/i,utf\n    i\n    I\n\\= Expect no match\n    \\x{0130}\n    \\x{0131}\n\n/i/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/I/i,utf\n    i\n    I\n\\= Expect no match\n    \\x{0130}\n    \\x{0131}\n\n/I/i,utf,turkish_casing\n    I\n    \\x{0131}\n\\= Expect no match\n    i\n    \\x{0130}\n\n/\\x{0130}/i,utf\n    \\x{0130}\n\\= Expect no match\n    i\n    I\n    \\x{0131}\n\n/\\x{0130}/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/\\x{0131}/i,utf\n    \\x{0131}\n\\= Expect no match\n    i\n    I\n    \\x{0130}\n\n/\\x{0131}/i,utf,turkish_casing\n    I\n    \\x{0131}\n\\= Expect no match\n    i\n    \\x{0130}\n\n/[i]/i,utf\n    i\n    I\n\\= Expect no match\n    \\x{0130}\n    \\x{0131}\n\n/[i]/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/[\\x{0130}]/i,utf\n    \\x{0130}\n\\= Expect no match\n    i\n    I\n    \\x{0131}\n\n/[\\x{0130}]/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/[\\x{0120}-\\x{0130}]/i,utf\n    \\x{0130}\n\\= Expect no match\n    i\n    I\n    \\x{0131}\n\n/[\\x{0120}-\\x{0130}]/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/[zi]/i,utf\n    i\n    I\n\\= Expect no match\n    \\x{0130}\n    \\x{0131}\n\n/[zi]/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/[z\\x{0130}]/i,utf\n    \\x{0130}\n\\= Expect no match\n    i\n    I\n    \\x{0131}\n\n/[z\\x{0130}]/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n/[iI]/i,utf\n    i\n    I\n\\= Expect no match\n    \\x{0130}\n    \\x{0131}\n\n/[iI]/i,utf,turkish_casing\n    i\n    I\n    \\x{0130}\n    \\x{0131}\n\n/[i\\x{0130}]/i,utf\n    i\n    I\n    \\x{0130}\n\\= Expect no match\n    \\x{0131}\n\n/[i\\x{0130}]/i,utf,turkish_casing\n    i\n    \\x{0130}\n\\= Expect no match\n    I\n    \\x{0131}\n\n# End Turkish casing tests\n\n# TESTS for PCRE2_EXTRA_ASCII_xxx - again, tests with and without.\n\n# DIGITS\n\n/\\d+/i,utf\n    123\\x{660}456\n\n/\\d+/i,utf,ucp\n    123\\x{660}456\n\n/\\d+/i,utf,ucp,ascii_bsd\n    123\\x{660}456\n\n/[\\d]+/i,utf\n    123\\x{660}456\n\n/[\\d]+/i,utf,ucp\n    123\\x{660}456\n\n/[\\d]+/i,utf,ucp,ascii_bsd\n    123\\x{660}456\n\n/\\d(?aD)\\d(?-aD)\\d/utf,ucp\n    \\x{660}9\\x{660}\n\\= Expect no match     \n    \\x{660}\\x{660}\\x{660}\n\n/\\d(?-aD)\\d(?aD)\\d/utf,ucp,ascii_bsd\n    999\n    9\\x{660}9\n\n/\\d(?a)\\d(?-a)\\d/utf,ucp\n    \\x{660}9\\x{660}\n\\= Expect no match     \n    \\x{660}\\x{660}\\x{660}\n\n/\\d(?-aD)\\d(?aD)\\d/utf,ucp,ascii_bsd\n    999\n    9\\x{660}9\n\n# SPACES\n\n/>\\s+</i,utf\n    >  <\n\\= Expect no match     \n    >\\x{a0} <\n\n/>\\s+</i,utf,ucp\n    >  <\n    >\\x{a0} <\n\n/>\\s+</i,utf,ucp,ascii_bss\n    >  <\n\\= Expect no match     \n    >\\x{a0} <\n\n/>[\\s]+</i,utf\n    >  <\n\\= Expect no match     \n    >\\x{a0} <\n\n/>[\\s]+</i,utf,ucp\n    >  <\n    >\\x{a0} <\n\n/>[\\s]+</i,utf,ucp,ascii_bss\n    >  <\n\\= Expect no match     \n    >\\x{a0} <\n\n/>\\s(?aS)\\s(?-aS)\\s</utf,ucp\n    >\\x{a0} \\x{a0}<\n\\= Expect no match     \n    >\\x{a0}\\x{a0}\\x{a0}<\n\n/>\\s(?a)\\s(?-a)\\s</utf,ucp\n    >\\x{a0} \\x{a0}<\n\\= Expect no match     \n    >\\x{a0}\\x{a0}\\x{a0}<\n    \n# WORDS\n\n/\\w+/i,utf\n    123\\x{660}abc\n\n/\\w+/i,utf,ucp\n    123\\x{660}abc\n\n/\\w+/i,utf,ucp,ascii_bsw\n    123\\x{660}abc\n\n/[\\w]+/i,utf\n    123\\x{660}abc\n\n/[\\w]+/i,utf,ucp\n    123\\x{660}abc\n\n/[\\w]+/i,utf,ucp,ascii_bsw\n    123\\x{660}abc\n\n/\\w(?aW)\\w(?-aW)\\w/utf,ucp\n    \\x{660}A\\x{c0}\n\\= Expect no match     \n    \\x{660}\\x{c0}\\x{c0}\n\n/\\w(?a)\\w(?-a)\\w/utf,ucp\n    \\x{660}A\\x{c0}\n\\= Expect no match     \n    \\x{660}\\x{c0}\\x{c0}\n\n# POSIX\n\n/^[[:digit:]]+$/utf,ucp\n    123456\n    123\\x{660}456\n\n/^[[:digit:]]+$/utf,ucp,ascii_digit\n    123456\n\\= Expect no match\n    123\\x{660}456\n\n/[[:digit:]]+/g,utf,ucp,ascii_digit\n    123\\x{660}456\n\n/(?-aT)[[:digit:]](?aT)[[:digit:]]/utf,ucp,ascii_digit\n    11\n    \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\n\n/(?-aT:[[:digit:]])[[:digit:]]/utf,ucp,ascii_digit\n    11\n    \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\n\n/(?-aT:[[:digit:]])[[:digit:]]/utf,never_ucp,ascii_digit\n    11\n\\= Expect no match\n    \\x{ff11}1\n    1\\x{ff11}\n\n/[[:digit:]]+/utf,ucp,ascii_posix\n    123\\x{660}456\n\n/(?-aP)[[:digit:]](?aP)[[:digit:]]/utf,ucp,ascii_posix\n    11\n    \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\n\n/(?-aP:[[:digit:]])[[:digit:]]/utf,ucp,ascii_posix\n    11\n    \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\n\n/(?-a:[[:digit:]])[[:digit:]]/a,utf,ucp\n    11\n    \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\n\n/>[[:space:]]+</utf,ucp\n    >\\x{a0} \\x{a0}<\n    >\\x{a0}\\x{a0}\\x{a0}<\n\n/>[[:space:]]+</utf,ucp,ascii_posix\n\\= Expect no match     \n    >\\x{a0} \\x{a0}<\n\n/(?aP)[[:alnum:]]+/i,ucp,utf\n    abcáxyz\n    abc\\x{660}xyz\n\n/(?aP)[[:alnum:]\\d]+/i,ucp,utf\n    abc\\x{660}xyz\n    \n/(*UCP)(*UTF)[[:alnum:]](?aP:[[:alnum:]])[[:alnum:]]/\n    \\x{660}A\\x{660}\n\\= Expect no match     \n    \\x{660}\\x{660}\\x{660}\n    \n# VARIOUS\n\n/[\\d\\s\\w]+/a,ucp,utf\n    9 A\\x{660}À \n    9 AÀ\\x{660} \n\n# End PCRE2_EXTRA_ASCII_xxx tests\n\n/\\w+/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n\n/[\\w]+/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n\n/\\b.+?\\b/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n\n/caf\\B.+?\\B/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n\n# -------------------------------------------------------------------------- \n# Case-independent matching property tests added after changing PCRE2 to be\n# compatible with Perl. All three cases (upper, lower, title) conflate.\n\n/\\p{Lu}\\p{Ll}\\P{Lu}\\P{Ll}/utf\n    >AbbD<\n    >Abb\\x{01c5}<\n\\= Expect no match     \n    >aBBd<\n    >aB!!< \n\n/\\p{Lu}\\p{Ll}\\P{Lu}\\P{Ll}/i,utf\n    >aB!!< \n\\= Expect no match     \n    >AbbD<\n    >aBBd<\n    >Abb\\x{01c5}<\n\n/[.\\p{Lu}][.\\p{Ll}][.\\P{Lu}][.\\P{Ll}]/i,utf\n    >aB!!< \n\\= Expect no match     \n    >AbbD<\n    >aBBd<\n    >Abb\\x{01c5}<\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES\n\n/[\\p{Ll}[\\p{Nd}]]C/alt_extended_class\n    aC\n    1C\n\\= Expect no match\n    [C\n\n/[[\\p{Ll}][\\p{Nd}]]/alt_extended_class\n    a\n    1\n\\= Expect no match\n    [\n    ]\n\n/[[\\p{Ll}]||[\\p{Nd}]]/alt_extended_class\n    a\n    1\n\\= Expect no match\n    C\n\n/[[^\\p{Ll}][\\p{Nd}]]/alt_extended_class\n    1\n    A\n\\= Expect no match\n    a\n\n/[^[\\p{Ll}][\\p{Nd}]]/alt_extended_class\n    A\n\\= Expect no match\n    a\n    1\n\n/[^[\\p{Ll}]&&[\\p{Nd}]]/alt_extended_class\n    a\n    1\n    A\n\n/(?[[\\p{Ll}]+[\\p{Nd}]])/\n    a\n    1\n\\= Expect no match\n    [\n    ]\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n/(?[[\\p{Ll}Z]&[\\p{Lu}a]])/\n    a\n    Z\n\\= Expect no match\n    A\n    z\n\n# -------------------------------------------------------------------------- \n\n# End of testinput7\n"
  },
  {
    "path": "testdata/testinput8",
    "content": "# There are two sorts of patterns in this test. A number of them are\n# representative patterns whose lengths and offsets are checked. This is just a\n# doublecheck test to ensure the sizes don't go horribly wrong when something\n# is changed. The operation of these patterns is checked in other tests.\n#\n# This file also contains tests whose output varies with code unit size and/or\n# link size. Unicode support is required for these tests. There are separate\n# output files for each code unit size and link size.\n\n#pattern fullbincode,memory\n\n/((?i)b)/\n\n/(?s)(.*X|^B)/\n\n/(?s:.*X|^B)/\n\n/^[[:alnum:]]/\n\n/#/Ix\n\n/a#/Ix\n\n/x?+/\n\n/x++/\n\n/x{1,3}+/\n\n/(x)*+/\n\n/^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))/\n\n\"8J\\$WE\\<\\.rX\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\n\n\"\\$\\<\\.X\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\n\n/(a(?1)b)/\n\n/(a(?1)+b)/\n\n/a(?P<name1>b|c)d(?P<longername2>e)/\n\n/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/\n\n/(?P<a>a)...(?P=a)bbb(?P>a)d/\n\n/abc(?C255)de(?C)f/\n\n/abcde/auto_callout\n\n/\\x{100}/utf\n\n/\\x{1000}/utf\n\n/\\x{10000}/utf\n\n/\\x{100000}/utf\n\n/\\x{10ffff}/utf\n\n/\\x{110000}/utf\n\n/[\\x{ff}]/utf\n\n/[\\x{100}]/utf\n\n/\\x80/utf\n\n/\\xff/utf\n\n/\\x{0041}\\x{2262}\\x{0391}\\x{002e}/I,utf\n\n/\\x{D55c}\\x{ad6d}\\x{C5B4}/I,utf\n\n/\\x{65e5}\\x{672c}\\x{8a9e}/I,utf\n\n/[\\x{100}]/utf\n\n/[Z\\x{100}]/utf\n\n/^[\\x{100}\\E-\\Q\\E\\x{150}]/utf\n\n/^[\\QĀ\\E-\\QŐ\\E]/utf\n\n/^[\\QĀ\\E-\\QŐ\\E/utf\n\n/[\\p{L}]/\n\n/[\\p{^L}]/\n\n/[\\P{L}]/\n\n/[\\P{^L}]/\n\n/[abc\\p{L}\\x{0660}]/utf\n\n/[\\p{Nd}]/utf\n\n/[\\p{Nd}+-]+/utf\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/i,utf\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/utf\n\n/[\\x{105}-\\x{109}]/i,utf\n\n/( ( (?(1)0|) )*   )/x\n\n/(  (?(1)0|)*   )/x\n\n/[a]/\n\n/[a]/utf\n\n/[\\xaa]/\n\n/[\\xaa]/utf\n\n/[^a]/\n\n/[^a]/utf\n\n/[^\\xaa]/\n\n/[^\\xaa]/utf\n\n#pattern -memory\n\n/[^\\d]/utf,ucp\n\n/[[:^alpha:][:^cntrl:]]+/utf,ucp\n\n/[[:^cntrl:][:^alpha:]]+/utf,ucp\n\n/[[:alpha:]]+/utf,ucp\n\n/[[:^alpha:]\\S]+/utf,ucp\n\n/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/\n\n/(((a\\2)|(a*)\\g<-1>))*a?/\n\n/((?+1)(\\1))/\n\n\"(?1)(?#?'){2}(a)\"\n\n/.((?2)(?R)|\\1|$)()/\n\n/.((?3)(?R)()(?2)|\\1|$)()/\n\n/(?1)()((((((\\1++))\\x85)+)|))/\n\n# Check the absolute limit on nesting (?| etc. This varies with code unit\n# width because the workspace is a different number of bytes. It will fail\n# with link size 2 in 8-bit and 16-bit but not in 32-bit.\n\n/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|\n)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n/parens_nest_limit=1000,-fullbincode\n\n# Use \"expand\" to create some very long patterns with nested parentheses, in\n# order to test workspace overflow. Again, this varies with code unit width,\n# and even when it fails in two modes, the error offset differs. It also varies\n# with link size - hence multiple tests with different values.\n\n/(?'ABC'\\[[bar](]{792}*THEN:\\[A]{255}\\[)]{793}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{793}*THEN:\\[A]{255}\\[)]{794}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{1793}*THEN:\\[A]{255}\\[)]{1794}/expand,-fullbincode,parens_nest_limit=2000\n\n/(?(1)(?1)){8,}+()/debug\n    abcd\n\n/(?(1)|a(?1)b){2,}+()/debug\n    abcde\n\n/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode\n\n#pattern -fullbincode\n\n/\\[()]{65535}/expand\n\n# End of testinput8\n"
  },
  {
    "path": "testdata/testinput9",
    "content": "# This set of tests is run only with the 8-bit library. They must not require \n# UTF-8 or Unicode property support. */\n    \n#forbid_utf\n#newline_default lf any anycrlf\n\n#if !ebcdic\n\n/a\\xc4\\xa3b/\n    a\\N{U+123}b\n\\= Expect no match # error message (too big char)\n    a\\x{0123}b\n    a\\o{00443}b\n    a\\443b\n\n/fd bf bf bf bf bf/I,hex\n\\= Expect warning\n    \\N{U+7fffffff}\n\\= Expect no match # error message (too big char)\n    \\x{7fffffff}\n\n#endif\n\n/\\x{100}/I\n\n/\\o{400}/I\n\n#if !ebcdic\n\n/  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                          # optional leading comment\n(?:    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n# address\n|                     #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)             # one word, optionally followed by....\n(?:\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037]  |  # atom and space parts, or...\n\\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)       |  # comments, or...\n\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n# quoted strings\n)*\n<  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                     # leading <\n(?:  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  ,  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n)* # further okay, if led by comma\n:                                # closing colon\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  )? #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n#       address spec\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  > #                  trailing >\n# name and address\n)  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                       # optional trailing comment\n/Ix\n\n#endif\n\n/\\h/I\n\n/\\H/I\n\n/\\v/I\n\n/\\V/I\n\n/\\R/I\n\n/[\\h]/B\n    >\\x09<\n\n/[\\h]+/B\n    >\\x09\\x20\\xa0<\n\n/[\\v]/B\n\n/[\\H]/B\n\n/[^\\h]/B\n\n/[\\V]/B\n\n#if !ebcdic\n\n/[\\x0a\\V]/B\n\n#endif\n\n/\\777/I\n\n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/mark\n    XX\n     \n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/mark,alt_verbnames\n    XX\n     \n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/mark\n    XX\n\n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/mark,alt_verbnames\n    XX\n\n/\\u0100/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n\n/[\\u0100-\\u0200]/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n\n#if !ebcdic\n\n/[^\\x00-a]{12,}[^b-\\xff]*/B\n\n#endif\n\n/[^\\s]*\\s* [^\\W]+\\W+ [^\\d]*?\\d0 [^\\d\\w]{4,6}?\\w*A/B\n\n/(*MARK:a\\x{100}b)z/alt_verbnames \n\n/(*:*++++++++++++''''''''''''''''''''+''+++'+++x+++++++++++++++++++++++++++++++++++(++++++++++++++++++++:++++++%++:''''''''''''''''''''''''+++++++++++++++++++++++++++++++++++++++++++++++++++++-++++++++k+++++++''''+++'+++++++++++++++++++++++''''++++++++++++':ƿ)/\n\n/(?i:A{1,}\\6666666666)/\n    A\\x{1b6}6666666\n\n# Should cause an error\n/abc/substitute_extended,replace=>\\777<\n    abc\n\n# Should cause an error\n/abc/substitute_extended,replace=>\\o{012345}<\n    abc\n\n/i/turkish_casing\n\n# End of testinput9\n"
  },
  {
    "path": "testdata/testinputheap",
    "content": "#pattern framesize, memory\n\n/abcd/\n    abcd\\=memory\n    abcd\\=find_limits\n\n/(((((((((((((((((((((((((((((( (^abc|xyz){1,20}$  ))))))))))))))))))))))))))))))/x\n    abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcX\\=memory\n    abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcX\\=find_limits\n\n/ab(cd)/\n    abcd\\=memory\n    abcd\\=memory,ovector=0\n\n/\\[(a)]{1000}/expand,framesize\n    \\[a]{1000}\\=ovector=1\n\n# The heapframes_size option gets pcre2test to show the size of the heapframes\n# vector that after pcre2_match() has run. Running a match with ovector=0\n# causes the match data block to be freed, thus releasing that vector.\n\n/\\[(a)]{1000}/expand,framesize\n    \\[a]{1000}\\=ovector=1,heapframes_size\n    \n/a/heapframes_size,framesize\n    a\\=ovector=0 \n    \n/a|(b){200}/g,expand,heapframes_size\n    abacus z\\[b]{200}z\n    a\\=ovector=0 \n\n/(a)/replace=>$1<\n    cat\\=heapframes_size\n\n# End\n"
  },
  {
    "path": "testdata/testoutput1",
    "content": "# This set of tests is for features that are compatible with all versions of\n# Perl >= 5.10, in non-UTF mode. It should run clean for the 8-bit, 16-bit, and\n# 32-bit PCRE libraries, and also using the perltest.sh script.\n\n# WARNING: Use only / as the pattern delimiter. Although pcre2test supports\n# a number of delimiters, all those other than / give problems with the\n# perltest.sh script.\n    \n#forbid_utf\n#newline_default lf any anycrlf\n#perltest\n\n/the quick brown fox/\n    the quick brown fox\n 0: the quick brown fox\n    What do you know about the quick brown fox?\n 0: the quick brown fox\n\\= Expect no match\n    The quick brown FOX\nNo match\n    What do you know about THE QUICK BROWN FOX?\nNo match\n\n/The quick brown fox/i\n    the quick brown fox\n 0: the quick brown fox\n    The quick brown FOX\n 0: The quick brown FOX\n    What do you know about the quick brown fox?\n 0: the quick brown fox\n    What do you know about THE QUICK BROWN FOX?\n 0: THE QUICK BROWN FOX\n\n#if !ebcdic\n\n/abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz/\n    abcd\\t\\n\\r\\f\\a\\e9;\\$\\\\?caxyz\n 0: abcd\\x09\\x0a\\x0d\\x0c\\x07\\x1b9;$\\?caxyz\n\n#endif\n\n/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/\n    abxyzpqrrrabbxyyyypqAzz\n 0: abxyzpqrrrabbxyyyypqAzz\n    abxyzpqrrrabbxyyyypqAzz\n 0: abxyzpqrrrabbxyyyypqAzz\n    aabxyzpqrrrabbxyyyypqAzz\n 0: aabxyzpqrrrabbxyyyypqAzz\n    aaabxyzpqrrrabbxyyyypqAzz\n 0: aaabxyzpqrrrabbxyyyypqAzz\n    aaaabxyzpqrrrabbxyyyypqAzz\n 0: aaaabxyzpqrrrabbxyyyypqAzz\n    abcxyzpqrrrabbxyyyypqAzz\n 0: abcxyzpqrrrabbxyyyypqAzz\n    aabcxyzpqrrrabbxyyyypqAzz\n 0: aabcxyzpqrrrabbxyyyypqAzz\n    aaabcxyzpqrrrabbxyyyypAzz\n 0: aaabcxyzpqrrrabbxyyyypAzz\n    aaabcxyzpqrrrabbxyyyypqAzz\n 0: aaabcxyzpqrrrabbxyyyypqAzz\n    aaabcxyzpqrrrabbxyyyypqqAzz\n 0: aaabcxyzpqrrrabbxyyyypqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqAzz\n 0: aaabcxyzpqrrrabbxyyyypqqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqAzz\n 0: aaabcxyzpqrrrabbxyyyypqqqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqqAzz\n 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqqqAzz\n 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz\n    aaaabcxyzpqrrrabbxyyyypqAzz\n 0: aaaabcxyzpqrrrabbxyyyypqAzz\n    abxyzzpqrrrabbxyyyypqAzz\n 0: abxyzzpqrrrabbxyyyypqAzz\n    aabxyzzzpqrrrabbxyyyypqAzz\n 0: aabxyzzzpqrrrabbxyyyypqAzz\n    aaabxyzzzzpqrrrabbxyyyypqAzz\n 0: aaabxyzzzzpqrrrabbxyyyypqAzz\n    aaaabxyzzzzpqrrrabbxyyyypqAzz\n 0: aaaabxyzzzzpqrrrabbxyyyypqAzz\n    abcxyzzpqrrrabbxyyyypqAzz\n 0: abcxyzzpqrrrabbxyyyypqAzz\n    aabcxyzzzpqrrrabbxyyyypqAzz\n 0: aabcxyzzzpqrrrabbxyyyypqAzz\n    aaabcxyzzzzpqrrrabbxyyyypqAzz\n 0: aaabcxyzzzzpqrrrabbxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbxyyyypqAzz\n 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbbxyyyypqAzz\n 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz\n 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz\n    aaabcxyzpqrrrabbxyyyypABzz\n 0: aaabcxyzpqrrrabbxyyyypABzz\n    aaabcxyzpqrrrabbxyyyypABBzz\n 0: aaabcxyzpqrrrabbxyyyypABBzz\n    >>>aaabxyzpqrrrabbxyyyypqAzz\n 0: aaabxyzpqrrrabbxyyyypqAzz\n    >aaaabxyzpqrrrabbxyyyypqAzz\n 0: aaaabxyzpqrrrabbxyyyypqAzz\n    >>>>abcxyzpqrrrabbxyyyypqAzz\n 0: abcxyzpqrrrabbxyyyypqAzz\n\\= Expect no match\n    abxyzpqrrabbxyyyypqAzz\nNo match\n    abxyzpqrrrrabbxyyyypqAzz\nNo match\n    abxyzpqrrrabxyyyypqAzz\nNo match\n    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz\nNo match\n    aaaabcxyzzzzpqrrrabbbxyyypqAzz\nNo match\n    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz\nNo match\n\n/^(abc){1,2}zz/\n    abczz\n 0: abczz\n 1: abc\n    abcabczz\n 0: abcabczz\n 1: abc\n\\= Expect no match\n    zz\nNo match\n    abcabcabczz\nNo match\n    >>abczz\nNo match\n\n/^(b+?|a){1,2}?c/\n    bc\n 0: bc\n 1: b\n    bbc\n 0: bbc\n 1: b\n    bbbc\n 0: bbbc\n 1: bb\n    bac\n 0: bac\n 1: a\n    bbac\n 0: bbac\n 1: a\n    aac\n 0: aac\n 1: a\n    abbbbbbbbbbbc\n 0: abbbbbbbbbbbc\n 1: bbbbbbbbbbb\n    bbbbbbbbbbbac\n 0: bbbbbbbbbbbac\n 1: a\n\\= Expect no match\n    aaac\nNo match\n    abbbbbbbbbbbac\nNo match\n\n/^(b+|a){1,2}c/\n    bc\n 0: bc\n 1: b\n    bbc\n 0: bbc\n 1: bb\n    bbbc\n 0: bbbc\n 1: bbb\n    bac\n 0: bac\n 1: a\n    bbac\n 0: bbac\n 1: a\n    aac\n 0: aac\n 1: a\n    abbbbbbbbbbbc\n 0: abbbbbbbbbbbc\n 1: bbbbbbbbbbb\n    bbbbbbbbbbbac\n 0: bbbbbbbbbbbac\n 1: a\n\\= Expect no match\n    aaac\nNo match\n    abbbbbbbbbbbac\nNo match\n\n/^(ba|b*){1,2}?bc/\n    babc\n 0: babc\n 1: ba\n    bbabc\n 0: bbabc\n 1: ba\n    bababc\n 0: bababc\n 1: ba\n\\= Expect no match\n    bababbc\nNo match\n    babababc\nNo match\n\n#if !ebcdic\n\n/^\\ca\\cA\\c[;\\c:/\n    \\x01\\x01\\e;z\n 0: \\x01\\x01\\x1b;z\n\n#endif\n\n/^[ab\\]cde]/\n    athing\n 0: a\n    bthing\n 0: b\n    ]thing\n 0: ]\n    cthing\n 0: c\n    dthing\n 0: d\n    ething\n 0: e\n\\= Expect no match\n    fthing\nNo match\n    [thing\nNo match\n    \\\\thing\nNo match\n\n/^[]cde]/\n    ]thing\n 0: ]\n    cthing\n 0: c\n    dthing\n 0: d\n    ething\n 0: e\n\\= Expect no match\n    athing\nNo match\n    fthing\nNo match\n\n/^[^ab\\]cde]/\n    fthing\n 0: f\n    [thing\n 0: [\n    \\\\thing\n 0: \\\n\\= Expect no match\n    athing\nNo match\n    bthing\nNo match\n    ]thing\nNo match\n    cthing\nNo match\n    dthing\nNo match\n    ething\nNo match\n\n/^[^]cde]/\n    athing\n 0: a\n    fthing\n 0: f\n\\= Expect no match\n    ]thing\nNo match\n    cthing\nNo match\n    dthing\nNo match\n    ething\nNo match\n\n/^\\/\n    \n 0: \\x81\n\n/^/\n    \n 0: \\xff\n\n/^[0-9]+$/\n    0\n 0: 0\n    1\n 0: 1\n    2\n 0: 2\n    3\n 0: 3\n    4\n 0: 4\n    5\n 0: 5\n    6\n 0: 6\n    7\n 0: 7\n    8\n 0: 8\n    9\n 0: 9\n    10\n 0: 10\n    100\n 0: 100\n\\= Expect no match\n    abc\nNo match\n\n/^.*nter/\n    enter\n 0: enter\n    inter\n 0: inter\n    uponter\n 0: uponter\n\n/^xxx[0-9]+$/\n    xxx0\n 0: xxx0\n    xxx1234\n 0: xxx1234\n\\= Expect no match\n    xxx\nNo match\n\n/^.+[0-9][0-9][0-9]$/\n    x123\n 0: x123\n    x1234\n 0: x1234\n    xx123\n 0: xx123\n    123456\n 0: 123456\n\\= Expect no match\n    123\nNo match\n\n/^.+?[0-9][0-9][0-9]$/\n    x123\n 0: x123\n    x1234\n 0: x1234\n    xx123\n 0: xx123\n    123456\n 0: 123456\n\\= Expect no match\n    123\nNo match\n\n/^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$/\n    abc!pqr=apquxz.ixr.zzz.ac.uk\n 0: abc!pqr=apquxz.ixr.zzz.ac.uk\n 1: abc\n 2: pqr\n\\= Expect no match\n    !pqr=apquxz.ixr.zzz.ac.uk\nNo match\n    abc!=apquxz.ixr.zzz.ac.uk\nNo match\n    abc!pqr=apquxz:ixr.zzz.ac.uk\nNo match\n    abc!pqr=apquxz.ixr.zzz.ac.ukk\nNo match\n\n/:/\n    Well, we need a colon: somewhere\n 0: :\n\\= Expect no match\n    Fail without a colon\nNo match\n\n/([\\da-f:]+)$/i\n    0abc\n 0: 0abc\n 1: 0abc\n    abc\n 0: abc\n 1: abc\n    fed\n 0: fed\n 1: fed\n    E\n 0: E\n 1: E\n    ::\n 0: ::\n 1: ::\n    5f03:12C0::932e\n 0: 5f03:12C0::932e\n 1: 5f03:12C0::932e\n    fed def\n 0: def\n 1: def\n    Any old stuff\n 0: ff\n 1: ff\n\\= Expect no match\n    0zzz\nNo match\n    gzzz\nNo match\n    fed\\x20\nNo match\n    Any old rubbish\nNo match\n\n/^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/\n    .1.2.3\n 0: .1.2.3\n 1: 1\n 2: 2\n 3: 3\n    A.12.123.0\n 0: A.12.123.0\n 1: 12\n 2: 123\n 3: 0\n\\= Expect no match\n    .1.2.3333\nNo match\n    1.2.3\nNo match\n    1234.2.3\nNo match\n\n/^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$/\n    1 IN SOA non-sp1 non-sp2(\n 0: 1 IN SOA non-sp1 non-sp2(\n 1: 1\n 2: non-sp1\n 3: non-sp2\n    1    IN    SOA    non-sp1    non-sp2   (\n 0: 1    IN    SOA    non-sp1    non-sp2   (\n 1: 1\n 2: non-sp1\n 3: non-sp2\n\\= Expect no match\n    1IN SOA non-sp1 non-sp2(\nNo match\n\n/^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-Z\\d\\-]*)*\\.$/\n    a.\n 0: a.\n    Z.\n 0: Z.\n    2.\n 0: 2.\n    ab-c.pq-r.\n 0: ab-c.pq-r.\n 1: .pq-r\n    sxk.zzz.ac.uk.\n 0: sxk.zzz.ac.uk.\n 1: .uk\n    x-.y-.\n 0: x-.y-.\n 1: .y-\n\\= Expect no match\n    -abc.peq.\nNo match\n\n/^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$/\n    *.a\n 0: *.a\n    *.b0-a\n 0: *.b0-a\n 1: 0-a\n    *.c3-b.c\n 0: *.c3-b.c\n 1: 3-b\n 2: .c\n    *.c-a.b-c\n 0: *.c-a.b-c\n 1: -a\n 2: .b-c\n 3: -c\n\\= Expect no match\n    *.0\nNo match\n    *.a-\nNo match\n    *.a-b.c-\nNo match\n    *.c-a.0-c\nNo match\n\n/^(?=ab(de))(abd)(e)/\n    abde\n 0: abde\n 1: de\n 2: abd\n 3: e\n\n/^(?!(ab)de|x)(abd)(f)/\n    abdf\n 0: abdf\n 1: <unset>\n 2: abd\n 3: f\n\n/^(?=(ab(cd)))(ab)/\n    abcd\n 0: ab\n 1: abcd\n 2: cd\n 3: ab\n\n/^[\\da-f](\\.[\\da-f])*$/i\n    a.b.c.d\n 0: a.b.c.d\n 1: .d\n    A.B.C.D\n 0: A.B.C.D\n 1: .D\n    a.b.c.1.2.3.C\n 0: a.b.c.1.2.3.C\n 1: .C\n\n/^\\\".*\\\"\\s*(;.*)?$/\n    \\\"1234\\\"\n 0: \"1234\"\n    \\\"abcd\\\" ;\n 0: \"abcd\" ;\n 1: ;\n    \\\"\\\" ; rhubarb\n 0: \"\" ; rhubarb\n 1: ; rhubarb\n\\= Expect no match\n    \\\"1234\\\" : things\nNo match\n\n/^$/\n    \\\n 0: \n\\= Expect no match\n    A non-empty line\nNo match\n\n/   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)/x\n    ab c\n 0: ab c\n\\= Expect no match\n    abc\nNo match\n    ab cde\nNo match\n\n/(?x)   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)/\n    ab c\n 0: ab c\n\\= Expect no match\n    abc\nNo match\n    ab cde\nNo match\n\n/^   a\\ b[c ]d       $/x\n    a bcd\n 0: a bcd\n    a b d\n 0: a b d\n\\= Expect no match\n    abcd\nNo match\n    ab d\nNo match\n\n/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/\n    abcdefhijklm\n 0: abcdefhijklm\n 1: abc\n 2: bc\n 3: c\n 4: def\n 5: ef\n 6: f\n 7: hij\n 8: ij\n 9: j\n10: klm\n11: lm\n12: m\n\n/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/\n    abcdefhijklm\n 0: abcdefhijklm\n 1: bc\n 2: c\n 3: ef\n 4: f\n 5: ij\n 6: j\n 7: lm\n 8: m\n\n/^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]/\n    a+ Z0+\\x08\\n\\x1d\\x12\n 0: a+ Z0+\\x08\\x0a\\x1d\\x12\n\n/^[.^$|()*+?{,}]+/\n    .^\\$(*+)|{?,?}\n 0: .^$(*+)|{?,?}\n\n/^a*\\w/\n    z\n 0: z\n    az\n 0: az\n    aaaz\n 0: aaaz\n    a\n 0: a\n    aa\n 0: aa\n    aaaa\n 0: aaaa\n    a+\n 0: a\n    aa+\n 0: aa\n\n/^a*?\\w/\n    z\n 0: z\n    az\n 0: a\n    aaaz\n 0: a\n    a\n 0: a\n    aa\n 0: a\n    aaaa\n 0: a\n    a+\n 0: a\n    aa+\n 0: a\n\n/^a+\\w/\n    az\n 0: az\n    aaaz\n 0: aaaz\n    aa\n 0: aa\n    aaaa\n 0: aaaa\n    aa+\n 0: aa\n\n/^a+?\\w/\n    az\n 0: az\n    aaaz\n 0: aa\n    aa\n 0: aa\n    aaaa\n 0: aa\n    aa+\n 0: aa\n\n/^\\d{8}\\w{2,}/\n    1234567890\n 0: 1234567890\n    12345678ab\n 0: 12345678ab\n    12345678__\n 0: 12345678__\n\\= Expect no match\n    1234567\nNo match\n\n/^[aeiou\\d]{4,5}$/\n    uoie\n 0: uoie\n    1234\n 0: 1234\n    12345\n 0: 12345\n    aaaaa\n 0: aaaaa\n\\= Expect no match\n    123456\nNo match\n\n/^[aeiou\\d]{4,5}?/\n    uoie\n 0: uoie\n    1234\n 0: 1234\n    12345\n 0: 1234\n    aaaaa\n 0: aaaa\n    123456\n 0: 1234\n\n/\\A(abc|def)=(\\1){2,3}\\Z/\n    abc=abcabc\n 0: abc=abcabc\n 1: abc\n 2: abc\n    def=defdefdef\n 0: def=defdefdef\n 1: def\n 2: def\n\\= Expect no match\n    abc=defdef\nNo match\n\n/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$/\n    abcdefghijkcda2\n 0: abcdefghijkcda2\n 1: a\n 2: b\n 3: c\n 4: d\n 5: e\n 6: f\n 7: g\n 8: h\n 9: i\n10: j\n11: k\n12: cd\n    abcdefghijkkkkcda2\n 0: abcdefghijkkkkcda2\n 1: a\n 2: b\n 3: c\n 4: d\n 5: e\n 6: f\n 7: g\n 8: h\n 9: i\n10: j\n11: k\n12: cd\n\n/(cat(a(ract|tonic)|erpillar)) \\1()2(3)/\n    cataract cataract23\n 0: cataract cataract23\n 1: cataract\n 2: aract\n 3: ract\n 4: \n 5: 3\n    catatonic catatonic23\n 0: catatonic catatonic23\n 1: catatonic\n 2: atonic\n 3: tonic\n 4: \n 5: 3\n    caterpillar caterpillar23\n 0: caterpillar caterpillar23\n 1: caterpillar\n 2: erpillar\n 3: <unset>\n 4: \n 5: 3\n\n\n/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/\n    From abcd  Mon Sep 01 12:33:02 1997\n 0: From abcd  Mon Sep 01 12:33\n 1: abcd\n\n/^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d/\n    From abcd  Mon Sep 01 12:33:02 1997\n 0: From abcd  Mon Sep 01 12:33\n 1: Sep \n    From abcd  Mon Sep  1 12:33:02 1997\n 0: From abcd  Mon Sep  1 12:33\n 1: Sep  \n\\= Expect no match\n    From abcd  Sep 01 12:33:02 1997\nNo match\n\n/^12.34/s\n    12\\n34\n 0: 12\\x0a34\n    12\\r34\n 0: 12\\x0d34\n\n/\\w+(?=\\t)/\n    the quick brown\\t fox\n 0: brown\n\n/foo(?!bar)(.*)/\n    foobar is foolish see?\n 0: foolish see?\n 1: lish see?\n\n/(?:(?!foo)...|^.{0,2})bar(.*)/\n    foobar crowbar etc\n 0: rowbar etc\n 1:  etc\n    barrel\n 0: barrel\n 1: rel\n    2barrel\n 0: 2barrel\n 1: rel\n    A barrel\n 0: A barrel\n 1: rel\n\n/^(\\D*)(?=\\d)(?!123)/\n    abc456\n 0: abc\n 1: abc\n\\= Expect no match\n    abc123\nNo match\n\n/^1234(?# test newlines\n  inside)/\n    1234\n 0: 1234\n\n/^1234 #comment in extended re\n  /x\n    1234\n 0: 1234\n\n/#rhubarb\n  abcd/x\n    abcd\n 0: abcd\n\n/^abcd#rhubarb/x\n    abcd\n 0: abcd\n\n/^(a)\\1{2,3}(.)/\n    aaab\n 0: aaab\n 1: a\n 2: b\n    aaaab\n 0: aaaab\n 1: a\n 2: b\n    aaaaab\n 0: aaaaa\n 1: a\n 2: a\n    aaaaaab\n 0: aaaaa\n 1: a\n 2: a\n\n/(?!^)abc/\n    the abc\n 0: abc\n\\= Expect no match\n    abc\nNo match\n\n/(?=^)abc/\n    abc\n 0: abc\n\\= Expect no match\n    the abc\nNo match\n\n/^[ab]{1,3}(ab*|b)/\n    aabbbbb\n 0: aabb\n 1: b\n\n/^[ab]{1,3}?(ab*|b)/\n    aabbbbb\n 0: aabbbbb\n 1: abbbbb\n\n/^[ab]{1,3}?(ab*?|b)/\n    aabbbbb\n 0: aa\n 1: a\n\n/^[ab]{1,3}(ab*?|b)/\n    aabbbbb\n 0: aabb\n 1: b\n\n#if !ebcdic\n\n/  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                          # optional leading comment\n(?:    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n# address\n|                     #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)             # one word, optionally followed by....\n(?:\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037]  |  # atom and space parts, or...\n\\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)       |  # comments, or...\n\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n# quoted strings\n)*\n<  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                     # leading <\n(?:  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  ,  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n)* # further okay, if led by comma\n:                                # closing colon\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  )? #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n#       address spec\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  > #                  trailing >\n# name and address\n)  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                       # optional trailing comment\n/x\n    Alan Other <user\\@dom.ain>\n 0: Alan Other <user@dom.ain>\n    <user\\@dom.ain>\n 0: user@dom.ain\n    user\\@dom.ain\n 0: user@dom.ain\n    \\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)\n 0: \"A. Other\" <user.1234@dom.ain> (a comment)\n    A. Other <user.1234\\@dom.ain> (a comment)\n 0:  Other <user.1234@dom.ain> (a comment)\n    \\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay\n 0: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay\n    A missing angle <user\\@some.where\n 0: user@some.where\n\\= Expect no match\n    The quick brown fox\nNo match\n\n/[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional leading comment\n(?:\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# additional words\n)*\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n# address\n|                             #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n# leading word\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] *               # \"normal\" atoms and or spaces\n(?:\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n|\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n) # \"special\" comment or quoted string\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] *            #  more \"normal\"\n)*\n<\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# <\n(?:\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n(?: ,\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n)*  # additional domains\n:\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)?     #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# additional words\n)*\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n#       address spec\n>                    #                 >\n# name and address\n)\n/x\n    Alan Other <user\\@dom.ain>\n 0: Alan Other <user@dom.ain>\n    <user\\@dom.ain>\n 0: user@dom.ain\n    user\\@dom.ain\n 0: user@dom.ain\n    \\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)\n 0: \"A. Other\" <user.1234@dom.ain>\n    A. Other <user.1234\\@dom.ain> (a comment)\n 0:  Other <user.1234@dom.ain>\n    \\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay\n 0: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay\n    A missing angle <user\\@some.where\n 0: user@some.where\n\\= Expect no match\n    The quick brown fox\nNo match\n\n#endif\n\n/abc\\0def\\00pqr\\000xyz\\0000AB/\n    abc\\0def\\00pqr\\000xyz\\0000AB\n 0: abc\\x00def\\x00pqr\\x00xyz\\x000AB\n    abc456 abc\\0def\\00pqr\\000xyz\\0000ABCDE\n 0: abc\\x00def\\x00pqr\\x00xyz\\x000AB\n\n/abc\\x0def\\x00pqr\\x000xyz\\x0000AB/\n    abc\\x0def\\x00pqr\\x000xyz\\x0000AB\n 0: abc\\x0def\\x00pqr\\x000xyz\\x0000AB\n    abc456 abc\\x0def\\x00pqr\\x000xyz\\x0000ABCDE\n 0: abc\\x0def\\x00pqr\\x000xyz\\x0000AB\n\n/^[\\000-\\037]/\n    \\0A\n 0: \\x00\n    \\01B\n 0: \\x01\n    \\037C\n 0: \\x1f\n\n/\\0*/\n    \\0\\0\\0\\0\n 0: \\x00\\x00\\x00\\x00\n\n/A\\x0{2,3}Z/\n    The A\\x0\\x0Z\n 0: A\\x00\\x00Z\n    An A\\0\\x0\\0Z\n 0: A\\x00\\x00\\x00Z\n\\= Expect no match\n    A\\0Z\nNo match\n    A\\0\\x0\\0\\x0Z\nNo match\n\n/^(cow|)\\1(bell)/\n    cowcowbell\n 0: cowcowbell\n 1: cow\n 2: bell\n    bell\n 0: bell\n 1: \n 2: bell\n\\= Expect no match\n    cowbell\nNo match\n\n/^\\s/\n    \\040abc\n 0:  \n    \\x0cabc\n 0: \\x0c\n    \\nabc\n 0: \\x0a\n    \\rabc\n 0: \\x0d\n    \\tabc\n 0: \\x09\n\\= Expect no match\n    abc\nNo match\n\n/^a\tb\n    \f  c/x\n    abc\n 0: abc\n\n/^(a|)\\1*b/\n    ab\n 0: ab\n 1: a\n    aaaab\n 0: aaaab\n 1: a\n    b\n 0: b\n 1: \n\\= Expect no match\n    acb\nNo match\n\n/^(a|)\\1+b/\n    aab\n 0: aab\n 1: a\n    aaaab\n 0: aaaab\n 1: a\n    b\n 0: b\n 1: \n\\= Expect no match\n    ab\nNo match\n\n/^(a|)\\1?b/\n    ab\n 0: ab\n 1: a\n    aab\n 0: aab\n 1: a\n    b\n 0: b\n 1: \n\\= Expect no match\n    acb\nNo match\n\n/^(a|)\\1{2}b/\n    aaab\n 0: aaab\n 1: a\n    b\n 0: b\n 1: \n\\= Expect no match\n    ab\nNo match\n    aab\nNo match\n    aaaab\nNo match\n\n/^(a|)\\1{2,3}b/\n    aaab\n 0: aaab\n 1: a\n    aaaab\n 0: aaaab\n 1: a\n    b\n 0: b\n 1: \n\\= Expect no match\n    ab\nNo match\n    aab\nNo match\n    aaaaab\nNo match\n\n/ab{1,3}bc/\n    abbbbc\n 0: abbbbc\n    abbbc\n 0: abbbc\n    abbc\n 0: abbc\n\\= Expect no match\n    abc\nNo match\n    abbbbbc\nNo match\n\n/([^.]*)\\.([^:]*):[T ]+(.*)/\n    track1.title:TBlah blah blah\n 0: track1.title:TBlah blah blah\n 1: track1\n 2: title\n 3: Blah blah blah\n\n/([^.]*)\\.([^:]*):[T ]+(.*)/i\n    track1.title:TBlah blah blah\n 0: track1.title:TBlah blah blah\n 1: track1\n 2: title\n 3: Blah blah blah\n\n/([^.]*)\\.([^:]*):[t ]+(.*)/i\n    track1.title:TBlah blah blah\n 0: track1.title:TBlah blah blah\n 1: track1\n 2: title\n 3: Blah blah blah\n\n#if !ebcdic\n\n/^[W-c]+$/\n    WXY_^abc\n 0: WXY_^abc\n\\= Expect no match\n    wxy\nNo match\n\n/^[W-c]+$/i\n    WXY_^abc\n 0: WXY_^abc\n    wxy_^ABC\n 0: wxy_^ABC\n\n/^[\\x3f-\\x5F]+$/i\n    WXY_^abc\n 0: WXY_^abc\n    wxy_^ABC\n 0: wxy_^ABC\n\n#endif\n\n/^abc$/m\n    abc\n 0: abc\n    qqq\\nabc\n 0: abc\n    abc\\nzzz\n 0: abc\n    qqq\\nabc\\nzzz\n 0: abc\n\n/^abc$/\n    abc\n 0: abc\n\\= Expect no match\n    qqq\\nabc\nNo match\n    abc\\nzzz\nNo match\n    qqq\\nabc\\nzzz\nNo match\n\n/\\Aabc\\Z/m\n    abc\n 0: abc\n    abc\\n \n 0: abc\n\\= Expect no match\n    qqq\\nabc\nNo match\n    abc\\nzzz\nNo match\n    qqq\\nabc\\nzzz\nNo match\n    \n/\\A(.)*\\Z/s\n    abc\\ndef\n 0: abc\\x0adef\n 1: f\n\n/\\A(.)*\\Z/m\n\\= Expect no match\n    abc\\ndef\nNo match\n\n/(?:b)|(?::+)/\n    b::c\n 0: b\n    c::b\n 0: ::\n\n/[-az]+/\n    az-\n 0: az-\n\\= Expect no match\n    b\nNo match\n\n/[az-]+/\n    za-\n 0: za-\n\\= Expect no match\n    b\nNo match\n\n/[a\\-z]+/\n    a-z\n 0: a-z\n\\= Expect no match\n    b\nNo match\n\n/[a-z]+/\n    abcdxyz\n 0: abcdxyz\n\n/[\\d-]+/\n    12-34\n 0: 12-34\n\\= Expect no match\n    aaa\nNo match\n\n#if !ebcdic\n\n/\\x5c/\n    \\\\\n 0: \\\n\n/\\x20Z/\n    the Zoo\n 0:  Z\n\\= Expect no match\n    Zulu\nNo match\n\n#endif\n\n/(abc)\\1/i\n    abcabc\n 0: abcabc\n 1: abc\n    ABCabc\n 0: ABCabc\n 1: ABC\n    abcABC\n 0: abcABC\n 1: abc\n\n/abc$/\n    abc\n 0: abc\n    abc\\n\n 0: abc\n\\= Expect no match\n    abc\\ndef\nNo match\n\n#if !ebcdic\n\n/(abc)\\123/\n    abc\\x53\n 0: abcS\n 1: abc\n\n/(abc)\\223/\n    abc\\x93\n 0: abc\\x93\n 1: abc\n\n/(abc)\\323/\n    abc\\xd3\n 0: abc\\xd3\n 1: abc\n\n/(abc)\\100/\n    abc\\x40\n 0: abc@\n 1: abc\n    abc\\100\n 0: abc@\n 1: abc\n\n/(abc)\\1000/\n    abc\\x400\n 0: abc@0\n 1: abc\n    abc\\x40\\x30\n 0: abc@0\n 1: abc\n    abc\\1000\n 0: abc@0\n 1: abc\n    abc\\100\\x30\n 0: abc@0\n 1: abc\n    abc\\100\\060\n 0: abc@0\n 1: abc\n    abc\\100\\60\n 0: abc@0\n 1: abc\n\n#endif\n    \n/^(A)(B)(C)(D)(E)(F)(G)(H)(I)\\8\\9$/\n    ABCDEFGHIHI \n 0: ABCDEFGHIHI\n 1: A\n 2: B\n 3: C\n 4: D\n 5: E\n 6: F\n 7: G\n 8: H\n 9: I\n\n/^[A\\8B\\9C]+$/\n    A8B9C\n 0: A8B9C\n\\= Expect no match \n    A8B9C\\x00\nNo match\n\n#if !ebcdic\n\n/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123/\n    abcdefghijkllS\n 0: abcdefghijkllS\n 1: a\n 2: b\n 3: c\n 4: d\n 5: e\n 6: f\n 7: g\n 8: h\n 9: i\n10: j\n11: k\n12: l\n\n/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123/\n    abcdefghijk\\12S\n 0: abcdefghijk\\x0aS\n 1: a\n 2: b\n 3: c\n 4: d\n 5: e\n 6: f\n 7: g\n 8: h\n 9: i\n10: j\n11: k\n\n#endif\n\n/a{0}bc/\n    bc\n 0: bc\n\n/(a|(bc)){0,0}?xyz/\n    xyz\n 0: xyz\n\n#if !ebcdic\n\n/abc[\\10]de/\n    abc\\010de\n 0: abc\\x08de\n\n#endif\n\n/abc[\\1]de/\n    abc\\1de\n 0: abc\\x01de\n\n/(abc)[\\1]de/\n    abc\\1de\n 0: abc\\x01de\n 1: abc\n\n/(?s)a.b/\n    a\\nb\n 0: a\\x0ab\n\n/^([^a])([^\\b])([^c]*)([^d]{3,4})/\n    baNOTccccd\n 0: baNOTcccc\n 1: b\n 2: a\n 3: NOT\n 4: cccc\n    baNOTcccd\n 0: baNOTccc\n 1: b\n 2: a\n 3: NOT\n 4: ccc\n    baNOTccd\n 0: baNOTcc\n 1: b\n 2: a\n 3: NO\n 4: Tcc\n    bacccd\n 0: baccc\n 1: b\n 2: a\n 3: \n 4: ccc\n\\= Expect no match\n    anything\nNo match\n    b\\bc   \nNo match\n    baccd\nNo match\n\n/[^a]/\n    Abc\n 0: A\n  \n/[^a]/i\n    Abc \n 0: b\n\n/[^a]+/\n    AAAaAbc\n 0: AAA\n  \n/[^a]+/i\n    AAAaAbc \n 0: bc\n\n/[^a]+/\n    bbb\\nccc\n 0: bbb\\x0accc\n   \n/[^k]$/\n    abc\n 0: c\n\\= Expect no match\n    abk   \nNo match\n   \n/[^k]{2,3}$/\n    abc\n 0: abc\n    kbc\n 0: bc\n    kabc \n 0: abc\n\\= Expect no match\n    abk\nNo match\n    akb\nNo match\n    akk \nNo match\n\n/^\\d{8,}\\@.+[^k]$/\n    12345678\\@a.b.c.d\n 0: 12345678@a.b.c.d\n    123456789\\@x.y.z\n 0: 123456789@x.y.z\n\\= Expect no match\n    12345678\\@x.y.uk\nNo match\n    1234567\\@a.b.c.d       \nNo match\n\n/(a)\\1{8,}/\n    aaaaaaaaa\n 0: aaaaaaaaa\n 1: a\n    aaaaaaaaaa\n 0: aaaaaaaaaa\n 1: a\n\\= Expect no match\n    aaaaaaa   \nNo match\n\n/[^a]/\n    aaaabcd\n 0: b\n    aaAabcd \n 0: A\n\n/[^a]/i\n    aaaabcd\n 0: b\n    aaAabcd \n 0: b\n\n/[^az]/\n    aaaabcd\n 0: b\n    aaAabcd \n 0: A\n\n/[^az]/i\n    aaaabcd\n 0: b\n    aaAabcd \n 0: b\n\n#if !ebcdic\n\n/\\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377/\n \\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377\n 0: \\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff\n\n#endif\n\n/P[^*]TAIRE[^*]{1,6}?LL/\n    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx\n 0: PSTAIREISLL\n\n/P[^*]TAIRE[^*]{1,}?LL/\n    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx\n 0: PSTAIREISLL\n\n/(\\.\\d\\d[1-9]?)\\d+/\n    1.230003938\n 0: .230003938\n 1: .23\n    1.875000282   \n 0: .875000282\n 1: .875\n    1.235  \n 0: .235\n 1: .23\n                  \n/(\\.\\d\\d((?=0)|\\d(?=\\d)))/\n    1.230003938      \n 0: .23\n 1: .23\n 2: \n    1.875000282\n 0: .875\n 1: .875\n 2: 5\n\\= Expect no match \n    1.235 \nNo match\n    \n/a(?)b/\n    ab \n 0: ab\n \n/\\b(foo)\\s+(\\w+)/i\n    Food is on the foo table\n 0: foo table\n 1: foo\n 2: table\n    \n/foo(.*)bar/\n    The food is under the bar in the barn.\n 0: food is under the bar in the bar\n 1: d is under the bar in the \n    \n/foo(.*?)bar/\n    The food is under the bar in the barn.\n 0: food is under the bar\n 1: d is under the \n\n/(.*)(\\d*)/\n    I have 2 numbers: 53147\n 0: I have 2 numbers: 53147\n 1: I have 2 numbers: 53147\n 2: \n    \n/(.*)(\\d+)/\n    I have 2 numbers: 53147\n 0: I have 2 numbers: 53147\n 1: I have 2 numbers: 5314\n 2: 7\n \n/(.*?)(\\d*)/\n    I have 2 numbers: 53147\n 0: \n 1: \n 2: \n\n/(.*?)(\\d+)/\n    I have 2 numbers: 53147\n 0: I have 2\n 1: I have \n 2: 2\n\n/(.*)(\\d+)$/\n    I have 2 numbers: 53147\n 0: I have 2 numbers: 53147\n 1: I have 2 numbers: 5314\n 2: 7\n\n/(.*?)(\\d+)$/\n    I have 2 numbers: 53147\n 0: I have 2 numbers: 53147\n 1: I have 2 numbers: \n 2: 53147\n\n/(.*)\\b(\\d+)$/\n    I have 2 numbers: 53147\n 0: I have 2 numbers: 53147\n 1: I have 2 numbers: \n 2: 53147\n\n/(.*\\D)(\\d+)$/\n    I have 2 numbers: 53147\n 0: I have 2 numbers: 53147\n 1: I have 2 numbers: \n 2: 53147\n\n/^\\D*(?!123)/\n    ABC123\n 0: AB\n     \n/^(\\D*)(?=\\d)(?!123)/\n    ABC445\n 0: ABC\n 1: ABC\n\\= Expect no match\n    ABC123\nNo match\n    \n/^[W-]46]/\n    W46]789 \n 0: W46]\n    -46]789\n 0: -46]\n\\= Expect no match\n    Wall\nNo match\n    Zebra\nNo match\n    42\nNo match\n    [abcd] \nNo match\n    ]abcd[\nNo match\n\n#if !ebcdic\n       \n/^[W-\\]46]/\n    W46]789 \n 0: W\n    Wall\n 0: W\n    Zebra\n 0: Z\n    Xylophone  \n 0: X\n    42\n 0: 4\n    [abcd] \n 0: [\n    ]abcd[\n 0: ]\n    \\\\backslash \n 0: \\\n\\= Expect no match\n    -46]789\nNo match\n    well\nNo match\n\n#endif\n    \n/\\d\\d\\/\\d\\d\\/\\d\\d\\d\\d/\n    01/01/2000\n 0: 01/01/2000\n\n/word (?:[a-zA-Z0-9]+ ){0,10}otherword/\n    word cat dog elephant mussel cow horse canary baboon snake shark otherword\n 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword\n\\= Expect no match\n    word cat dog elephant mussel cow horse canary baboon snake shark\nNo match\n\n/word (?:[a-zA-Z0-9]+ ){0,300}otherword/\n\\= Expect no match\n    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope\nNo match\n\n/^(a){0,0}/\n    bcd\n 0: \n    abc\n 0: \n    aab     \n 0: \n\n/^(a){0,1}/\n    bcd\n 0: \n    abc\n 0: a\n 1: a\n    aab  \n 0: a\n 1: a\n\n/^(a){0,2}/\n    bcd\n 0: \n    abc\n 0: a\n 1: a\n    aab  \n 0: aa\n 1: a\n\n/^(a){0,3}/\n    bcd\n 0: \n    abc\n 0: a\n 1: a\n    aab\n 0: aa\n 1: a\n    aaa   \n 0: aaa\n 1: a\n\n/^(a){0,}/\n    bcd\n 0: \n    abc\n 0: a\n 1: a\n    aab\n 0: aa\n 1: a\n    aaa\n 0: aaa\n 1: a\n    aaaaaaaa    \n 0: aaaaaaaa\n 1: a\n\n/^(a){1,1}/\n    abc\n 0: a\n 1: a\n    aab  \n 0: a\n 1: a\n\\= Expect no match\n    bcd\nNo match\n\n/^(a){1,2}/\n    abc\n 0: a\n 1: a\n    aab  \n 0: aa\n 1: a\n\\= Expect no match\n    bcd\nNo match\n\n/^(a){1,3}/\n    abc\n 0: a\n 1: a\n    aab\n 0: aa\n 1: a\n    aaa   \n 0: aaa\n 1: a\n\\= Expect no match\n    bcd\nNo match\n\n/^(a){1,}/\n    abc\n 0: a\n 1: a\n    aab\n 0: aa\n 1: a\n    aaa\n 0: aaa\n 1: a\n    aaaaaaaa    \n 0: aaaaaaaa\n 1: a\n\\= Expect no match\n    bcd\nNo match\n\n/.*\\.gif/\n    borfle\\nbib.gif\\nno\n 0: bib.gif\n\n/.{0,}\\.gif/\n    borfle\\nbib.gif\\nno\n 0: bib.gif\n\n/.*\\.gif/m\n    borfle\\nbib.gif\\nno\n 0: bib.gif\n\n/.*\\.gif/s\n    borfle\\nbib.gif\\nno\n 0: borfle\\x0abib.gif\n\n/.*\\.gif/ms\n    borfle\\nbib.gif\\nno\n 0: borfle\\x0abib.gif\n    \n/.*$/\n    borfle\\nbib.gif\\nno\n 0: no\n\n/.*$/m\n    borfle\\nbib.gif\\nno\n 0: borfle\n\n/.*$/s\n    borfle\\nbib.gif\\nno\n 0: borfle\\x0abib.gif\\x0ano\n\n/.*$/ms\n    borfle\\nbib.gif\\nno\n 0: borfle\\x0abib.gif\\x0ano\n    \n/.*$/\n    borfle\\nbib.gif\\nno\\n\n 0: no\n\n/.*$/m\n    borfle\\nbib.gif\\nno\\n\n 0: borfle\n\n/.*$/s\n    borfle\\nbib.gif\\nno\\n\n 0: borfle\\x0abib.gif\\x0ano\\x0a\n\n/.*$/ms\n    borfle\\nbib.gif\\nno\\n\n 0: borfle\\x0abib.gif\\x0ano\\x0a\n    \n/(.*X|^B)/\n    abcde\\n1234Xyz\n 0: 1234X\n 1: 1234X\n    BarFoo \n 0: B\n 1: B\n\\= Expect no match\n    abcde\\nBar  \nNo match\n\n/(.*X|^B)/m\n    abcde\\n1234Xyz\n 0: 1234X\n 1: 1234X\n    BarFoo \n 0: B\n 1: B\n    abcde\\nBar  \n 0: B\n 1: B\n\n/(.*X|^B)/s\n    abcde\\n1234Xyz\n 0: abcde\\x0a1234X\n 1: abcde\\x0a1234X\n    BarFoo \n 0: B\n 1: B\n\\= Expect no match\n    abcde\\nBar  \nNo match\n\n/(.*X|^B)/ms\n    abcde\\n1234Xyz\n 0: abcde\\x0a1234X\n 1: abcde\\x0a1234X\n    BarFoo \n 0: B\n 1: B\n    abcde\\nBar  \n 0: B\n 1: B\n\n/(?s)(.*X|^B)/\n    abcde\\n1234Xyz\n 0: abcde\\x0a1234X\n 1: abcde\\x0a1234X\n    BarFoo \n 0: B\n 1: B\n\\= Expect no match \n    abcde\\nBar  \nNo match\n\n/(?s:.*X|^B)/\n    abcde\\n1234Xyz\n 0: abcde\\x0a1234X\n    BarFoo \n 0: B\n\\= Expect no match \n    abcde\\nBar  \nNo match\n\n/^.*B/\n\\= Expect no match\n    abc\\nB\nNo match\n     \n/(?s)^.*B/\n    abc\\nB\n 0: abc\\x0aB\n\n/(?m)^.*B/\n    abc\\nB\n 0: B\n     \n/(?ms)^.*B/\n    abc\\nB\n 0: abc\\x0aB\n\n/(?ms)^B/\n    abc\\nB\n 0: B\n\n/(?s)B$/\n    B\\n\n 0: B\n\n/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/\n    123456654321\n 0: 123456654321\n  \n/^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d/\n    123456654321 \n 0: 123456654321\n\n/^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]/\n    123456654321\n 0: 123456654321\n  \n/^[abc]{12}/\n    abcabcabcabc\n 0: abcabcabcabc\n    \n/^[a-c]{12}/\n    abcabcabcabc\n 0: abcabcabcabc\n    \n/^(a|b|c){12}/\n    abcabcabcabc \n 0: abcabcabcabc\n 1: c\n\n/^[abcdefghijklmnopqrstuvwxy0123456789]/\n    n\n 0: n\n\\= Expect no match \n    z \nNo match\n\n/abcde{0,0}/\n    abcd\n 0: abcd\n\\= Expect no match\n    abce  \nNo match\n\n/ab[cd]{0,0}e/\n    abe\n 0: abe\n\\= Expect no match\n    abcde \nNo match\n    \n/ab(c){0,0}d/\n    abd\n 0: abd\n\\= Expect no match\n    abcd   \nNo match\n\n/a(b*)/\n    a\n 0: a\n 1: \n    ab\n 0: ab\n 1: b\n    abbbb\n 0: abbbb\n 1: bbbb\n\\= Expect no match\n    bbbbb    \nNo match\n    \n/ab\\d{0}e/\n    abe\n 0: abe\n\\= Expect no match\n    ab1e   \nNo match\n    \n/\"([^\\\\\"]+|\\\\.)*\"/\n    the \\\"quick\\\" brown fox\n 0: \"quick\"\n 1: quick\n    \\\"the \\\\\\\"quick\\\\\\\" brown fox\\\" \n 0: \"the \\\"quick\\\" brown fox\"\n 1:  brown fox\n\n/.*?/g,aftertext\n    abc\n 0: \n 0+ abc\n 0: a\n 0+ bc\n 0: \n 0+ bc\n 0: b\n 0+ c\n 0: \n 0+ c\n 0: c\n 0+ \n 0: \n 0+ \n  \n/\\b/g,aftertext\n    abc \n 0: \n 0+ abc\n 0: \n 0+ \n\n/\\b/g,aftertext\n    abc \n 0: \n 0+ abc\n 0: \n 0+ \n\n//g\n    abc\n 0: \n 0: \n 0: \n 0: \n\n/<tr([\\w\\W\\s\\d][^<>]{0,})><TD([\\w\\W\\s\\d][^<>]{0,})>([\\d]{0,}\\.)(.*)((<BR>([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>/is\n  <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>\n 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>\n 1:  BGCOLOR='#DBE9E9'\n 2:  align=left valign=top\n 3: 43.\n 4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)\n 5: \n 6: \n 7: <unset>\n 8:  align=left valign=top\n 9: Lega lstaff.com\n10:  align=left valign=top\n11: CA - Statewide\n\n/a[^a]b/\n    acb\n 0: acb\n    a\\nb\n 0: a\\x0ab\n    \n/a.b/\n    acb\n 0: acb\n\\= Expect no match \n    a\\nb   \nNo match\n    \n/a[^a]b/s\n    acb\n 0: acb\n    a\\nb  \n 0: a\\x0ab\n    \n/a.b/s\n    acb\n 0: acb\n    a\\nb  \n 0: a\\x0ab\n\n/^(b+?|a){1,2}?c/\n    bac\n 0: bac\n 1: a\n    bbac\n 0: bbac\n 1: a\n    bbbac\n 0: bbbac\n 1: a\n    bbbbac\n 0: bbbbac\n 1: a\n    bbbbbac \n 0: bbbbbac\n 1: a\n\n/^(b+|a){1,2}?c/\n    bac\n 0: bac\n 1: a\n    bbac\n 0: bbac\n 1: a\n    bbbac\n 0: bbbac\n 1: a\n    bbbbac\n 0: bbbbac\n 1: a\n    bbbbbac \n 0: bbbbbac\n 1: a\n    \n/(?!\\A)x/m\n    a\\bx\\n\n 0: x\n    a\\nx\\n\n 0: x\n\\= Expect no match     \n    x\\nb\\n\nNo match\n    \n/(A|B)*?CD/\n    CD \n 0: CD\n    \n/(A|B)*CD/\n    CD \n 0: CD\n\n/(AB)*?\\1/\n    ABABAB\n 0: ABAB\n 1: AB\n\n/(AB)*\\1/\n    ABABAB\n 0: ABABAB\n 1: AB\n    \n/(?<!bar)foo/\n    foo\n 0: foo\n    catfood\n 0: foo\n    arfootle\n 0: foo\n    rfoosh\n 0: foo\n\\= Expect no match\n    barfoo\nNo match\n    towbarfoo\nNo match\n\n/\\w{3}(?<!bar)foo/\n    catfood\n 0: catfoo\n\\= Expect no match\n    foo\nNo match\n    barfoo\nNo match\n    towbarfoo\nNo match\n\n/(?<=(foo)a)bar/\n    fooabar\n 0: bar\n 1: foo\n\\= Expect no match\n    bar\nNo match\n    foobbar\nNo match\n      \n/\\Aabc\\z/m\n    abc\n 0: abc\n\\= Expect no match\n    abc\\n   \nNo match\n    qqq\\nabc\nNo match\n    abc\\nzzz\nNo match\n    qqq\\nabc\\nzzz\nNo match\n\n/(?>.*\\/)foo/\n    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo\n 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo\n\\= Expect no match     \n    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/\nNo match\n\n/(?>(\\.\\d\\d[1-9]?))\\d+/\n    1.230003938\n 0: .230003938\n 1: .23\n    1.875000282\n 0: .875000282\n 1: .875\n\\= Expect no match \n    1.235 \nNo match\n\n/^((?>\\w+)|(?>\\s+))*$/\n    now is the time for all good men to come to the aid of the party\n 0: now is the time for all good men to come to the aid of the party\n 1: party\n\\= Expect no match\n    this is not a line with only words and spaces!\nNo match\n    \n/(\\d+)(\\w)/\n    12345a\n 0: 12345a\n 1: 12345\n 2: a\n    12345+ \n 0: 12345\n 1: 1234\n 2: 5\n\n/((?>\\d+))(\\w)/\n    12345a\n 0: 12345a\n 1: 12345\n 2: a\n\\= Expect no match\n    12345+ \nNo match\n\n/(?>a+)b/\n    aaab\n 0: aaab\n\n/((?>a+)b)/\n    aaab\n 0: aaab\n 1: aaab\n\n/(?>(a+))b/\n    aaab\n 0: aaab\n 1: aaa\n\n/(?>b)+/\n    aaabbbccc\n 0: bbb\n\n/(?>a+|b+|c+)*c/\n    aaabbbbccccd\n 0: aaabbbbc\n\n/((?>[^()]+)|\\([^()]*\\))+/\n    ((abc(ade)ufh()()x\n 0: abc(ade)ufh()()x\n 1: x\n    \n/\\(((?>[^()]+)|\\([^()]+\\))+\\)/\n    (abc)\n 0: (abc)\n 1: abc\n    (abc(def)xyz)\n 0: (abc(def)xyz)\n 1: xyz\n\\= Expect no match\n    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   \nNo match\n\n/a(?-i)b/i\n    ab\n 0: ab\n    Ab\n 0: Ab\n\\= Expect no match \n    aB\nNo match\n    AB\nNo match\n        \n/(a (?x)b c)d e/\n    a bcd e\n 0: a bcd e\n 1: a bc\n\\= Expect no match\n    a b cd e\nNo match\n    abcd e   \nNo match\n    a bcde \nNo match\n \n/(a b(?x)c d (?-x)e f)/\n    a bcde f\n 0: a bcde f\n 1: a bcde f\n\\= Expect no match\n    abcdef  \nNo match\n\n/(a(?i)b)c/\n    abc\n 0: abc\n 1: ab\n    aBc\n 0: aBc\n 1: aB\n\\= Expect no match\n    abC\nNo match\n    aBC  \nNo match\n    Abc\nNo match\n    ABc\nNo match\n    ABC\nNo match\n    AbC\nNo match\n    \n/a(?i:b)c/\n    abc\n 0: abc\n    aBc\n 0: aBc\n\\= Expect no match \n    ABC\nNo match\n    abC\nNo match\n    aBC\nNo match\n    \n/a(?i:b)*c/\n    aBc\n 0: aBc\n    aBBc\n 0: aBBc\n\\= Expect no match \n    aBC\nNo match\n    aBBC\nNo match\n    \n/a(?=b(?i)c)\\w\\wd/\n    abcd\n 0: abcd\n    abCd\n 0: abCd\n\\= Expect no match\n    aBCd\nNo match\n    abcD     \nNo match\n    \n/(?s-i:more.*than).*million/i\n    more than million\n 0: more than million\n    more than MILLION\n 0: more than MILLION\n    more \\n than Million \n 0: more \\x0a than Million\n\\= Expect no match\n    MORE THAN MILLION    \nNo match\n    more \\n than \\n million \nNo match\n\n/(?:(?s-i)more.*than).*million/i\n    more than million\n 0: more than million\n    more than MILLION\n 0: more than MILLION\n    more \\n than Million \n 0: more \\x0a than Million\n\\= Expect no match\n    MORE THAN MILLION    \nNo match\n    more \\n than \\n million \nNo match\n    \n/(?>a(?i)b+)+c/\n    abc\n 0: abc\n    aBbc\n 0: aBbc\n    aBBc \n 0: aBBc\n\\= Expect no match\n    Abc\nNo match\n    abAb    \nNo match\n    abbC \nNo match\n    \n/(?=a(?i)b)\\w\\wc/\n    abc\n 0: abc\n    aBc\n 0: aBc\n\\= Expect no match\n    Ab \nNo match\n    abC\nNo match\n    aBC     \nNo match\n    \n/(?<=a(?i)b)(\\w\\w)c/\n    abxxc\n 0: xxc\n 1: xx\n    aBxxc\n 0: xxc\n 1: xx\n\\= Expect no match\n    Abxxc\nNo match\n    ABxxc\nNo match\n    abxxC      \nNo match\n\n/(?:(a)|b)(?(1)A|B)/\n    aA\n 0: aA\n 1: a\n    bB\n 0: bB\n\\= Expect no match\n    aB\nNo match\n    bA    \nNo match\n\n/^(a)?(?(1)a|b)+$/\n    aa\n 0: aa\n 1: a\n    b\n 0: b\n    bb  \n 0: bb\n\\= Expect no match\n    ab   \nNo match\n    \n# Perl gets this next one wrong if the pattern ends with $; in that case it\n# fails to match \"12\". \n\n/^(?(?=abc)\\w{3}:|\\d\\d)/\n    abc:\n 0: abc:\n    12\n 0: 12\n    123\n 0: 12\n\\= Expect no match\n    xyz    \nNo match\n\n/^(?(?!abc)\\d\\d|\\w{3}:)$/\n    abc:\n 0: abc:\n    12\n 0: 12\n\\= Expect no match\n    123\nNo match\n    xyz    \nNo match\n    \n/(?(?<=foo)bar|cat)/\n    foobar\n 0: bar\n    cat\n 0: cat\n    fcat\n 0: cat\n    focat   \n 0: cat\n\\= Expect no match\n    foocat  \nNo match\n\n/(?(?<!foo)cat|bar)/\n    foobar\n 0: bar\n    cat\n 0: cat\n    fcat\n 0: cat\n    focat   \n 0: cat\n\\= Expect no match\n    foocat  \nNo match\n\n/( \\( )? [^()]+ (?(1) \\) |) /x\n    abcd\n 0: abcd\n    (abcd)\n 0: (abcd)\n 1: (\n    the quick (abcd) fox\n 0: the quick \n    (abcd   \n 0: abcd\n\n/( \\( )? [^()]+ (?(1) \\) ) /x\n    abcd\n 0: abcd\n    (abcd)\n 0: (abcd)\n 1: (\n    the quick (abcd) fox\n 0: the quick \n    (abcd   \n 0: abcd\n\n/^(?(2)a|(1)(2))+$/\n    12\n 0: 12\n 1: 1\n 2: 2\n    12a\n 0: 12a\n 1: 1\n 2: 2\n    12aa\n 0: 12aa\n 1: 1\n 2: 2\n\\= Expect no match\n    1234    \nNo match\n\n/((?i)blah)\\s+\\1/\n    blah blah\n 0: blah blah\n 1: blah\n    BLAH BLAH\n 0: BLAH BLAH\n 1: BLAH\n    Blah Blah\n 0: Blah Blah\n 1: Blah\n    blaH blaH\n 0: blaH blaH\n 1: blaH\n\\= Expect no match\n    blah BLAH\nNo match\n    Blah blah      \nNo match\n    blaH blah \nNo match\n\n/((?i)blah)\\s+(?i:\\1)/\n    blah blah\n 0: blah blah\n 1: blah\n    BLAH BLAH\n 0: BLAH BLAH\n 1: BLAH\n    Blah Blah\n 0: Blah Blah\n 1: Blah\n    blaH blaH\n 0: blaH blaH\n 1: blaH\n    blah BLAH\n 0: blah BLAH\n 1: blah\n    Blah blah      \n 0: Blah blah\n 1: Blah\n    blaH blah \n 0: blaH blah\n 1: blaH\n\n/((?i)blah)\\s+(?m)A(?i:\\1)/\n    blah ABLAH\n 0: blah ABLAH\n 1: blah\n\\= Expect no match\n    blah aBLAH\nNo match\n\n/(?>a*)*/\n    a\n 0: a\n    aa\n 0: aa\n    aaaa\n 0: aaaa\n    \n/(abc|)+/\n    abc\n 0: abc\n 1: \n    abcabc\n 0: abcabc\n 1: \n    abcabcabc\n 0: abcabcabc\n 1: \n    xyz      \n 0: \n 1: \n\n/([a]*)*/\n    a\n 0: a\n 1: \n    aaaaa \n 0: aaaaa\n 1: \n \n/([ab]*)*/\n    a\n 0: a\n 1: \n    b\n 0: b\n 1: \n    ababab\n 0: ababab\n 1: \n    aaaabcde\n 0: aaaab\n 1: \n    bbbb    \n 0: bbbb\n 1: \n \n/([^a]*)*/\n    b\n 0: b\n 1: \n    bbbb\n 0: bbbb\n 1: \n    aaa   \n 0: \n 1: \n \n/([^ab]*)*/\n    cccc\n 0: cccc\n 1: \n    abab  \n 0: \n 1: \n \n/([a]*?)*/\n    a\n 0: \n 1: \n    aaaa \n 0: \n 1: \n \n/([ab]*?)*/\n    a\n 0: \n 1: \n    b\n 0: \n 1: \n    abab\n 0: \n 1: \n    baba   \n 0: \n 1: \n \n/([^a]*?)*/\n    b\n 0: \n 1: \n    bbbb\n 0: \n 1: \n    aaa   \n 0: \n 1: \n \n/([^ab]*?)*/\n    c\n 0: \n 1: \n    cccc\n 0: \n 1: \n    baba   \n 0: \n 1: \n \n/(?>a*)*/\n    a\n 0: a\n    aaabcde \n 0: aaa\n \n/((?>a*))*/\n    aaaaa\n 0: aaaaa\n 1: \n    aabbaa \n 0: aa\n 1: \n \n/((?>a*?))*/\n    aaaaa\n 0: \n 1: \n    aabbaa \n 0: \n 1: \n\n/(?(?=[^a-z]+[a-z])  \\d{2}-[a-z]{3}-\\d{2}  |  \\d{2}-\\d{2}-\\d{2} ) /x\n    12-sep-98\n 0: 12-sep-98\n    12-09-98\n 0: 12-09-98\n\\= Expect no match\n    sep-12-98\nNo match\n        \n/(?<=(foo))bar\\1/\n    foobarfoo\n 0: barfoo\n 1: foo\n    foobarfootling \n 0: barfoo\n 1: foo\n\\= Expect no match\n    foobar\nNo match\n    barfoo   \nNo match\n\n/(?i:saturday|sunday)/\n    saturday\n 0: saturday\n    sunday\n 0: sunday\n    Saturday\n 0: Saturday\n    Sunday\n 0: Sunday\n    SATURDAY\n 0: SATURDAY\n    SUNDAY\n 0: SUNDAY\n    SunDay\n 0: SunDay\n    \n/(a(?i)bc|BB)x/\n    abcx\n 0: abcx\n 1: abc\n    aBCx\n 0: aBCx\n 1: aBC\n    bbx\n 0: bbx\n 1: bb\n    BBx\n 0: BBx\n 1: BB\n\\= Expect no match\n    abcX\nNo match\n    aBCX\nNo match\n    bbX\nNo match\n    BBX               \nNo match\n\n/^([ab](?i)[cd]|[ef])/\n    ac\n 0: ac\n 1: ac\n    aC\n 0: aC\n 1: aC\n    bD\n 0: bD\n 1: bD\n    elephant\n 0: e\n 1: e\n    Europe \n 0: E\n 1: E\n    frog\n 0: f\n 1: f\n    France\n 0: F\n 1: F\n\\= Expect no match\n    Africa     \nNo match\n\n/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/\n    ab\n 0: ab\n 1: ab\n    aBd\n 0: aBd\n 1: aBd\n    xy\n 0: xy\n 1: xy\n    xY\n 0: xY\n 1: xY\n    zebra\n 0: z\n 1: z\n    Zambesi\n 0: Z\n 1: Z\n\\= Expect no match\n    aCD  \nNo match\n    XY  \nNo match\n\n/(?<=foo\\n)^bar/m\n    foo\\nbar\n 0: bar\n\\= Expect no match\n    bar\nNo match\n    baz\\nbar   \nNo match\n\n/(?<=(?<!foo)bar)baz/\n    barbaz\n 0: baz\n    barbarbaz \n 0: baz\n    koobarbaz \n 0: baz\n\\= Expect no match\n    baz\nNo match\n    foobarbaz \nNo match\n\n# The cases of aaaa and aaaaaa are missed out below because Perl does things\n# differently. We know that odd, and maybe incorrect, things happen with\n# recursive references in Perl, as far as 5.11.3 - see some stuff in test #2.\n\n/^(a\\1?){4}$/\n    aaaaa\n 0: aaaaa\n 1: a\n    aaaaaaa\n 0: aaaaaaa\n 1: a\n    aaaaaaaaaa\n 0: aaaaaaaaaa\n 1: aaaa\n\\= Expect no match\n    a\nNo match\n    aa\nNo match\n    aaa\nNo match\n    aaaaaaaa\nNo match\n    aaaaaaaaa\nNo match\n    aaaaaaaaaaa\nNo match\n    aaaaaaaaaaaa\nNo match\n    aaaaaaaaaaaaa\nNo match\n    aaaaaaaaaaaaaa\nNo match\n    aaaaaaaaaaaaaaa\nNo match\n    aaaaaaaaaaaaaaaa\nNo match\n\n/^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$/\n    aaaa\n 0: aaaa\n 1: a\n 2: a\n 3: a\n 4: a\n    aaaaa\n 0: aaaaa\n 1: a\n 2: aa\n 3: a\n 4: a\n    aaaaaa\n 0: aaaaaa\n 1: a\n 2: aa\n 3: a\n 4: aa\n    aaaaaaa\n 0: aaaaaaa\n 1: a\n 2: aa\n 3: aaa\n 4: a\n    aaaaaaaaaa\n 0: aaaaaaaaaa\n 1: a\n 2: aa\n 3: aaa\n 4: aaaa\n\\= Expect no match\n    a\nNo match\n    aa\nNo match\n    aaa\nNo match\n    aaaaaaaa\nNo match\n    aaaaaaaaa\nNo match\n    aaaaaaaaaaa\nNo match\n    aaaaaaaaaaaa\nNo match\n    aaaaaaaaaaaaa\nNo match\n    aaaaaaaaaaaaaa\nNo match\n    aaaaaaaaaaaaaaa\nNo match\n    aaaaaaaaaaaaaaaa               \nNo match\n\n# The following tests are taken from the Perl 5.005 test suite; some of them\n# are compatible with 5.004, but I'd rather not have to sort them out.\n\n/abc/\n    abc\n 0: abc\n    xabcy\n 0: abc\n    ababc\n 0: abc\n\\= Expect no match\n    xbc\nNo match\n    axc\nNo match\n    abx\nNo match\n\n/ab*c/\n    abc\n 0: abc\n\n/ab*bc/\n    abc\n 0: abc\n    abbc\n 0: abbc\n    abbbbc\n 0: abbbbc\n\n/.{1}/\n    abbbbc\n 0: a\n\n/.{3,4}/\n    abbbbc\n 0: abbb\n\n/ab{0,}bc/\n    abbbbc\n 0: abbbbc\n\n/ab+bc/\n    abbc\n 0: abbc\n\\= Expect no match\n    abc\nNo match\n    abq\nNo match\n\n/ab{1,}bc/\n\n/ab+bc/\n    abbbbc\n 0: abbbbc\n\n/ab{1,}bc/\n    abbbbc\n 0: abbbbc\n\n/ab{1,3}bc/\n    abbbbc\n 0: abbbbc\n\n/ab{3,4}bc/\n    abbbbc\n 0: abbbbc\n\n/ab{4,5}bc/\n\\= Expect no match\n    abq\nNo match\n    abbbbc\nNo match\n\n/ab?bc/\n    abbc\n 0: abbc\n    abc\n 0: abc\n\n/ab{0,1}bc/\n    abc\n 0: abc\n\n/ab?bc/\n\n/ab?c/\n    abc\n 0: abc\n\n/ab{0,1}c/\n    abc\n 0: abc\n\n/^abc$/\n    abc\n 0: abc\n\\= Expect no match\n    abbbbc\nNo match\n    abcc\nNo match\n\n/^abc/\n    abcc\n 0: abc\n\n/^abc$/\n\n/abc$/\n    aabc\n 0: abc\n\\= Expect no match\n    aabcd\nNo match\n\n/^/\n    abc\n 0: \n\n/$/\n    abc\n 0: \n\n/a.c/\n    abc\n 0: abc\n    axc\n 0: axc\n\n/a.*c/\n    axyzc\n 0: axyzc\n\n/a[bc]d/\n    abd\n 0: abd\n\\= Expect no match\n    axyzd\nNo match\n    abc\nNo match\n\n/a[b-d]e/\n    ace\n 0: ace\n\n/a[b-d]/\n    aac\n 0: ac\n\n/a[-b]/\n    a-\n 0: a-\n\n/a[b-]/\n    a-\n 0: a-\n\n/a]/\n    a]\n 0: a]\n\n/a[]]b/\n    a]b\n 0: a]b\n\n/a[^bc]d/\n    aed\n 0: aed\n\\= Expect no match\n    abd\nNo match\n    abd\nNo match\n\n/a[^-b]c/\n    adc\n 0: adc\n\n/a[^]b]c/\n    adc\n 0: adc\n    a-c\n 0: a-c\n\\= Expect no match\n    a]c\nNo match\n\n/\\ba\\b/\n    a-\n 0: a\n    -a\n 0: a\n    -a-\n 0: a\n\n/\\by\\b/\n\\= Expect no match\n    xy\nNo match\n    yz\nNo match\n    xyz\nNo match\n\n/\\Ba\\B/\n\\= Expect no match\n    a-\nNo match\n    -a\nNo match\n    -a-\nNo match\n\n/\\By\\b/\n    xy\n 0: y\n\n/\\by\\B/\n    yz\n 0: y\n\n/\\By\\B/\n    xyz\n 0: y\n\n/\\w/\n    a\n 0: a\n\n/\\W/\n    -\n 0: -\n\\= Expect no match\n    a\nNo match\n\n/a\\sb/\n    a b\n 0: a b\n\n/a\\Sb/\n    a-b\n 0: a-b\n\\= Expect no match\n    a b\nNo match\n\n/\\d/\n    1\n 0: 1\n\n/\\D/\n    -\n 0: -\n\\= Expect no match\n    1\nNo match\n\n/[\\w]/\n    a\n 0: a\n\n/[\\W]/\n    -\n 0: -\n\\= Expect no match\n    a\nNo match\n\n/a[\\s]b/\n    a b\n 0: a b\n\n/a[\\S]b/\n    a-b\n 0: a-b\n\\= Expect no match\n    a b\nNo match\n\n/[\\d]/\n    1\n 0: 1\n\n/[\\D]/\n    -\n 0: -\n\\= Expect no match\n    1\nNo match\n\n/ab|cd/\n    abc\n 0: ab\n    abcd\n 0: ab\n\n/()ef/\n    def\n 0: ef\n 1: \n\n/$b/\n\n/a\\(b/\n    a(b\n 0: a(b\n\n/a\\(*b/\n    ab\n 0: ab\n    a((b\n 0: a((b\n\n/a\\\\b/\n    a\\\\b\n 0: a\\b\n\n/((a))/\n    abc\n 0: a\n 1: a\n 2: a\n\n/(a)b(c)/\n    abc\n 0: abc\n 1: a\n 2: c\n\n/a+b+c/\n    aabbabc\n 0: abc\n\n/a{1,}b{1,}c/\n    aabbabc\n 0: abc\n\n/a.+?c/\n    abcabc\n 0: abc\n\n/(a+|b)*/\n    ab\n 0: ab\n 1: b\n\n/(a+|b){0,}/\n    ab\n 0: ab\n 1: b\n\n/(a+|b)+/\n    ab\n 0: ab\n 1: b\n\n/(a+|b){1,}/\n    ab\n 0: ab\n 1: b\n\n/(a+|b)?/\n    ab\n 0: a\n 1: a\n\n/(a+|b){0,1}/\n    ab\n 0: a\n 1: a\n\n/[^ab]*/\n    cde\n 0: cde\n\n/abc/\n\\= Expect no match\n    b\nNo match\n\n/a*/\n    \\\n 0: \n\n/([abc])*d/\n    abbbcd\n 0: abbbcd\n 1: c\n\n/([abc])*bcd/\n    abcd\n 0: abcd\n 1: a\n\n/a|b|c|d|e/\n    e\n 0: e\n\n/(a|b|c|d|e)f/\n    ef\n 0: ef\n 1: e\n\n/abcd*efg/\n    abcdefg\n 0: abcdefg\n\n/ab*/\n    xabyabbbz\n 0: ab\n    xayabbbz\n 0: a\n\n/(ab|cd)e/\n    abcde\n 0: cde\n 1: cd\n\n/[abhgefdc]ij/\n    hij\n 0: hij\n\n/^(ab|cd)e/\n\n/(abc|)ef/\n    abcdef\n 0: ef\n 1: \n\n/(a|b)c*d/\n    abcd\n 0: bcd\n 1: b\n\n/(ab|ab*)bc/\n    abc\n 0: abc\n 1: a\n\n/a([bc]*)c*/\n    abc\n 0: abc\n 1: bc\n\n/a([bc]*)(c*d)/\n    abcd\n 0: abcd\n 1: bc\n 2: d\n\n/a([bc]+)(c*d)/\n    abcd\n 0: abcd\n 1: bc\n 2: d\n\n/a([bc]*)(c+d)/\n    abcd\n 0: abcd\n 1: b\n 2: cd\n\n/a[bcd]*dcdcde/\n    adcdcde\n 0: adcdcde\n\n/a[bcd]+dcdcde/\n\\= Expect no match\n    abcde\nNo match\n    adcdcde\nNo match\n\n/(ab|a)b*c/\n    abc\n 0: abc\n 1: ab\n\n/((a)(b)c)(d)/\n    abcd\n 0: abcd\n 1: abc\n 2: a\n 3: b\n 4: d\n\n/[a-zA-Z_][a-zA-Z0-9_]*/\n    alpha\n 0: alpha\n\n/^a(bc+|b[eh])g|.h$/\n    abh\n 0: bh\n\n/(bc+d$|ef*g.|h?i(j|k))/\n    effgz\n 0: effgz\n 1: effgz\n    ij\n 0: ij\n 1: ij\n 2: j\n    reffgz\n 0: effgz\n 1: effgz\n\\= Expect no match\n    effg\nNo match\n    bcdd\nNo match\n\n/((((((((((a))))))))))/\n    a\n 0: a\n 1: a\n 2: a\n 3: a\n 4: a\n 5: a\n 6: a\n 7: a\n 8: a\n 9: a\n10: a\n\n/((((((((((a))))))))))\\10/\n    aa\n 0: aa\n 1: a\n 2: a\n 3: a\n 4: a\n 5: a\n 6: a\n 7: a\n 8: a\n 9: a\n10: a\n\n/(((((((((a)))))))))/\n    a\n 0: a\n 1: a\n 2: a\n 3: a\n 4: a\n 5: a\n 6: a\n 7: a\n 8: a\n 9: a\n\n/multiple words of text/\n\\= Expect no match\n    aa\nNo match\n    uh-uh\nNo match\n\n/multiple words/\n    multiple words, yeah\n 0: multiple words\n\n/(.*)c(.*)/\n    abcde\n 0: abcde\n 1: ab\n 2: de\n\n/\\((.*), (.*)\\)/\n    (a, b)\n 0: (a, b)\n 1: a\n 2: b\n\n/[k]/\n\n/abcd/\n    abcd\n 0: abcd\n\n/a(bc)d/\n    abcd\n 0: abcd\n 1: bc\n\n/a[-]?c/\n    ac\n 0: ac\n\n/(abc)\\1/\n    abcabc\n 0: abcabc\n 1: abc\n\n/([a-c]*)\\1/\n    abcabc\n 0: abcabc\n 1: abc\n\n/(a)|\\1/\n    a\n 0: a\n 1: a\n    ab\n 0: a\n 1: a\n\\= Expect no match\n    x\nNo match\n\n/(([a-c])b*?\\2)*/\n    ababbbcbc\n 0: ababb\n 1: bb\n 2: b\n\n/(([a-c])b*?\\2){3}/\n    ababbbcbc\n 0: ababbbcbc\n 1: cbc\n 2: c\n\n/((\\3|b)\\2(a)x)+/\n    aaaxabaxbaaxbbax\n 0: bbax\n 1: bbax\n 2: b\n 3: a\n\n/((\\3|b)\\2(a)){2,}/\n    bbaababbabaaaaabbaaaabba\n 0: bbaaaabba\n 1: bba\n 2: b\n 3: a\n\n/abc/i\n    ABC\n 0: ABC\n    XABCY\n 0: ABC\n    ABABC\n 0: ABC\n\\= Expect no match\n    aaxabxbaxbbx\nNo match\n    XBC\nNo match\n    AXC\nNo match\n    ABX\nNo match\n\n/ab*c/i\n    ABC\n 0: ABC\n\n/ab*bc/i\n    ABC\n 0: ABC\n    ABBC\n 0: ABBC\n\n/ab*?bc/i\n    ABBBBC\n 0: ABBBBC\n\n/ab{0,}?bc/i\n    ABBBBC\n 0: ABBBBC\n\n/ab+?bc/i\n    ABBC\n 0: ABBC\n\n/ab+bc/i\n\\= Expect no match\n    ABC\nNo match\n    ABQ\nNo match\n\n/ab{1,}bc/i\n\n/ab+bc/i\n    ABBBBC\n 0: ABBBBC\n\n/ab{1,}?bc/i\n    ABBBBC\n 0: ABBBBC\n\n/ab{1,3}?bc/i\n    ABBBBC\n 0: ABBBBC\n\n/ab{3,4}?bc/i\n    ABBBBC\n 0: ABBBBC\n\n/ab{4,5}?bc/i\n\\= Expect no match\n    ABQ\nNo match\n    ABBBBC\nNo match\n\n/ab??bc/i\n    ABBC\n 0: ABBC\n    ABC\n 0: ABC\n\n/ab{0,1}?bc/i\n    ABC\n 0: ABC\n\n/ab??bc/i\n\n/ab??c/i\n    ABC\n 0: ABC\n\n/x?(x|b)/\n    xb\n 0: xb\n 1: b\n\n/x??(x|b)/\n    x\n 0: x\n 1: x\n\n/x?(x|b)/i\n    Xb\n 0: Xb\n 1: b\n\n/x??(x|b)/i\n    X\n 0: X\n 1: X\n\n/x{,2}(x|b)/\n    xb\n 0: xb\n 1: b\n\n/x{,2}?(x|b)/\n    x\n 0: x\n 1: x\n\n/x{,2}(x|b)/i\n    Xb\n 0: Xb\n 1: b\n\n/x{,2}?(x|b)/i\n    X\n 0: X\n 1: X\n\n/[^b]?([^b]|b)/\n    xb\n 0: xb\n 1: b\n\n/[^b]??([^b]|b)/\n    x\n 0: x\n 1: x\n\n/[^b]?([^b]|b)/i\n    Xb\n 0: Xb\n 1: b\n\n/[^b]??([^b]|b)/i\n    X\n 0: X\n 1: X\n\n/[^b]{,2}([^b]|b)/\n    xb\n 0: xb\n 1: b\n\n/[^b]{,2}?([^b]|b)/\n    x\n 0: x\n 1: x\n\n/[^b]{,2}([^b]|b)/i\n    Xb\n 0: Xb\n 1: b\n\n/[^b]{,2}?([^b]|b)/i\n    X\n 0: X\n 1: X\n\n/ab{0,1}?c/i\n    ABC\n 0: ABC\n\n/^abc$/i\n    ABC\n 0: ABC\n\\= Expect no match\n    ABBBBC\nNo match\n    ABCC\nNo match\n\n/^abc/i\n    ABCC\n 0: ABC\n\n/^abc$/i\n\n/abc$/i\n    AABC\n 0: ABC\n\n/^/i\n    ABC\n 0: \n\n/$/i\n    ABC\n 0: \n\n/a.c/i\n    ABC\n 0: ABC\n    AXC\n 0: AXC\n\n/a.*?c/i\n    AXYZC\n 0: AXYZC\n\n/a.*c/i\n    AABC\n 0: AABC\n\\= Expect no match\n    AXYZD\nNo match\n\n/a[bc]d/i\n    ABD\n 0: ABD\n\n/a[b-d]e/i\n    ACE\n 0: ACE\n\\= Expect no match\n    ABC\nNo match\n    ABD\nNo match\n\n/a[b-d]/i\n    AAC\n 0: AC\n\n/a[-b]/i\n    A-\n 0: A-\n\n/a[b-]/i\n    A-\n 0: A-\n\n/a]/i\n    A]\n 0: A]\n\n/a[]]b/i\n    A]B\n 0: A]B\n\n/a[^bc]d/i\n    AED\n 0: AED\n\n/a[^-b]c/i\n    ADC\n 0: ADC\n\\= Expect no match\n    ABD\nNo match\n    A-C\nNo match\n\n/a[^]b]c/i\n    ADC\n 0: ADC\n\n/ab|cd/i\n    ABC\n 0: AB\n    ABCD\n 0: AB\n\n/()ef/i\n    DEF\n 0: EF\n 1: \n\n/$b/i\n\\= Expect no match\n    A]C\nNo match\n    B\nNo match\n\n/a\\(b/i\n    A(B\n 0: A(B\n\n/a\\(*b/i\n    AB\n 0: AB\n    A((B\n 0: A((B\n\n/a\\\\b/i\n    A\\\\b\n 0: A\\b\n    a\\\\B \n 0: a\\B\n\n/((a))/i\n    ABC\n 0: A\n 1: A\n 2: A\n\n/(a)b(c)/i\n    ABC\n 0: ABC\n 1: A\n 2: C\n\n/a+b+c/i\n    AABBABC\n 0: ABC\n\n/a{1,}b{1,}c/i\n    AABBABC\n 0: ABC\n\n/a.+?c/i\n    ABCABC\n 0: ABC\n\n/a.*?c/i\n    ABCABC\n 0: ABC\n\n/a.{0,5}?c/i\n    ABCABC\n 0: ABC\n\n/(a+|b)*/i\n    AB\n 0: AB\n 1: B\n\n/(a+|b){0,}/i\n    AB\n 0: AB\n 1: B\n\n/(a+|b)+/i\n    AB\n 0: AB\n 1: B\n\n/(a+|b){1,}/i\n    AB\n 0: AB\n 1: B\n\n/(a+|b)?/i\n    AB\n 0: A\n 1: A\n\n/(a+|b){0,1}/i\n    AB\n 0: A\n 1: A\n\n/(a+|b){0,1}?/i\n    AB\n 0: \n\n/[^ab]*/i\n    CDE\n 0: CDE\n\n/([abc])*d/i\n    ABBBCD\n 0: ABBBCD\n 1: C\n\n/([abc])*bcd/i\n    ABCD\n 0: ABCD\n 1: A\n\n/a|b|c|d|e/i\n    E\n 0: E\n\n/(a|b|c|d|e)f/i\n    EF\n 0: EF\n 1: E\n\n/abcd*efg/i\n    ABCDEFG\n 0: ABCDEFG\n\n/ab*/i\n    XABYABBBZ\n 0: AB\n    XAYABBBZ\n 0: A\n\n/(ab|cd)e/i\n    ABCDE\n 0: CDE\n 1: CD\n\n/[abhgefdc]ij/i\n    HIJ\n 0: HIJ\n\n/^(ab|cd)e/i\n\\= Expect no match\n    ABCDE\nNo match\n\n/(abc|)ef/i\n    ABCDEF\n 0: EF\n 1: \n\n/(a|b)c*d/i\n    ABCD\n 0: BCD\n 1: B\n\n/(ab|ab*)bc/i\n    ABC\n 0: ABC\n 1: A\n\n/a([bc]*)c*/i\n    ABC\n 0: ABC\n 1: BC\n\n/a([bc]*)(c*d)/i\n    ABCD\n 0: ABCD\n 1: BC\n 2: D\n\n/a([bc]+)(c*d)/i\n    ABCD\n 0: ABCD\n 1: BC\n 2: D\n\n/a([bc]*)(c+d)/i\n    ABCD\n 0: ABCD\n 1: B\n 2: CD\n\n/a[bcd]*dcdcde/i\n    ADCDCDE\n 0: ADCDCDE\n\n/a[bcd]+dcdcde/i\n\n/(ab|a)b*c/i\n    ABC\n 0: ABC\n 1: AB\n\n/((a)(b)c)(d)/i\n    ABCD\n 0: ABCD\n 1: ABC\n 2: A\n 3: B\n 4: D\n\n/[a-zA-Z_][a-zA-Z0-9_]*/i\n    ALPHA\n 0: ALPHA\n\n/^a(bc+|b[eh])g|.h$/i\n    ABH\n 0: BH\n\n/(bc+d$|ef*g.|h?i(j|k))/i\n    EFFGZ\n 0: EFFGZ\n 1: EFFGZ\n    IJ\n 0: IJ\n 1: IJ\n 2: J\n    REFFGZ\n 0: EFFGZ\n 1: EFFGZ\n\\= Expect no match\n    ADCDCDE\nNo match\n    EFFG\nNo match\n    BCDD\nNo match\n\n/((((((((((a))))))))))/i\n    A\n 0: A\n 1: A\n 2: A\n 3: A\n 4: A\n 5: A\n 6: A\n 7: A\n 8: A\n 9: A\n10: A\n\n/((((((((((a))))))))))\\10/i\n    AA\n 0: AA\n 1: A\n 2: A\n 3: A\n 4: A\n 5: A\n 6: A\n 7: A\n 8: A\n 9: A\n10: A\n\n/(((((((((a)))))))))/i\n    A\n 0: A\n 1: A\n 2: A\n 3: A\n 4: A\n 5: A\n 6: A\n 7: A\n 8: A\n 9: A\n\n/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i\n    A\n 0: A\n 1: A\n\n/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i\n    C\n 0: C\n 1: C\n\n/multiple words of text/i\n\\= Expect no match\n    AA\nNo match\n    UH-UH\nNo match\n\n/multiple words/i\n    MULTIPLE WORDS, YEAH\n 0: MULTIPLE WORDS\n\n/(.*)c(.*)/i\n    ABCDE\n 0: ABCDE\n 1: AB\n 2: DE\n\n/\\((.*), (.*)\\)/i\n    (A, B)\n 0: (A, B)\n 1: A\n 2: B\n\n/[k]/i\n\n/abcd/i\n    ABCD\n 0: ABCD\n\n/a(bc)d/i\n    ABCD\n 0: ABCD\n 1: BC\n\n/a[-]?c/i\n    AC\n 0: AC\n\n/(abc)\\1/i\n    ABCABC\n 0: ABCABC\n 1: ABC\n\n/([a-c]*)\\1/i\n    ABCABC\n 0: ABCABC\n 1: ABC\n\n/a(?!b)./\n    abad\n 0: ad\n\n/a(?=d)./\n    abad\n 0: ad\n\n/a(?=c|d)./\n    abad\n 0: ad\n\n/a(?:b|c|d)(.)/\n    ace\n 0: ace\n 1: e\n\n/a(?:b|c|d)*(.)/\n    ace\n 0: ace\n 1: e\n\n/a(?:b|c|d)+?(.)/\n    ace\n 0: ace\n 1: e\n    acdbcdbe\n 0: acd\n 1: d\n\n/a(?:b|c|d)+(.)/\n    acdbcdbe\n 0: acdbcdbe\n 1: e\n\n/a(?:b|c|d){2}(.)/\n    acdbcdbe\n 0: acdb\n 1: b\n\n/a(?:b|c|d){4,5}(.)/\n    acdbcdbe\n 0: acdbcdb\n 1: b\n\n/a(?:b|c|d){4,5}?(.)/\n    acdbcdbe\n 0: acdbcd\n 1: d\n\n/a(?:b|c|d){6,7}(.)/\n    acdbcdbe\n 0: acdbcdbe\n 1: e\n\n/a(?:b|c|d){6,7}?(.)/\n    acdbcdbe\n 0: acdbcdbe\n 1: e\n\n/a(?:b|c|d){5,6}(.)/\n    acdbcdbe\n 0: acdbcdbe\n 1: e\n\n/a(?:b|c|d){5,6}?(.)/\n    acdbcdbe\n 0: acdbcdb\n 1: b\n\n/a(?:b|c|d){5,7}(.)/\n    acdbcdbe\n 0: acdbcdbe\n 1: e\n\n/a(?:b|c|d){5,7}?(.)/\n    acdbcdbe\n 0: acdbcdb\n 1: b\n\n/a(?:b|(c|e){1,2}?|d)+?(.)/\n    ace\n 0: ace\n 1: c\n 2: e\n\n/^(.+)?B/\n    AB\n 0: AB\n 1: A\n\n/^([^a-z])|(\\^)$/\n    .\n 0: .\n 1: .\n\n/^[<>]&/\n    <&OUT\n 0: <&\n\n/^(a\\1?){4}$/\n    aaaaaaaaaa\n 0: aaaaaaaaaa\n 1: aaaa\n\\= Expect no match\n    AB\nNo match\n    aaaaaaaaa\nNo match\n    aaaaaaaaaaa\nNo match\n\n/^(a(?(1)\\1)){4}$/\n    aaaaaaaaaa\n 0: aaaaaaaaaa\n 1: aaaa\n\\= Expect no match\n    aaaaaaaaa\nNo match\n    aaaaaaaaaaa\nNo match\n\n/(?<=a)b/\n    ab\n 0: b\n\\= Expect no match\n    cb\nNo match\n    b\nNo match\n\n/(?<!c)b/\n    ab\n 0: b\n    b\n 0: b\n    b\n 0: b\n\n/(?:..)*a/\n    aba\n 0: aba\n\n/(?:..)*?a/\n    aba\n 0: a\n\n/^(?:b|a(?=(.)))*\\1/\n    abc\n 0: ab\n 1: b\n\n/^(){3,5}/\n    abc\n 0: \n 1: \n\n/^(a+)*ax/\n    aax\n 0: aax\n 1: a\n\n/^((a|b)+)*ax/\n    aax\n 0: aax\n 1: a\n 2: a\n\n/^((a|bc)+)*ax/\n    aax\n 0: aax\n 1: a\n 2: a\n\n/(a|x)*ab/\n    cab\n 0: ab\n\n/(a)*ab/\n    cab\n 0: ab\n\n/(?:(?i)a)b/\n    ab\n 0: ab\n\n/((?i)a)b/\n    ab\n 0: ab\n 1: a\n\n/(?:(?i)a)b/\n    Ab\n 0: Ab\n\n/((?i)a)b/\n    Ab\n 0: Ab\n 1: A\n\n/(?:(?i)a)b/\n\\= Expect no match\n    cb\nNo match\n    aB\nNo match\n\n/((?i)a)b/\n\n/(?i:a)b/\n    ab\n 0: ab\n\n/((?i:a))b/\n    ab\n 0: ab\n 1: a\n\n/(?i:a)b/\n    Ab\n 0: Ab\n\n/((?i:a))b/\n    Ab\n 0: Ab\n 1: A\n\n/(?i:a)b/\n\\= Expect no match\n    aB\nNo match\n    aB\nNo match\n\n/((?i:a))b/\n\n/(?:(?-i)a)b/i\n    ab\n 0: ab\n\n/((?-i)a)b/i\n    ab\n 0: ab\n 1: a\n\n/(?:(?-i)a)b/i\n    aB\n 0: aB\n\n/((?-i)a)b/i\n    aB\n 0: aB\n 1: a\n\n/(?:(?-i)a)b/i\n    aB\n 0: aB\n\\= Expect no match\n    Ab\nNo match\n    AB\nNo match\n\n/(?-i:a)b/i\n    ab\n 0: ab\n\n/((?-i:a))b/i\n    ab\n 0: ab\n 1: a\n\n/(?-i:a)b/i\n    aB\n 0: aB\n\n/((?-i:a))b/i\n    aB\n 0: aB\n 1: a\n\n/(?-i:a)b/i\n\\= Expect no match\n    AB\nNo match\n    Ab\nNo match\n\n/((?-i:a))b/i\n\n/(?-i:a)b/i\n    aB\n 0: aB\n\n/((?-i:a))b/i\n    aB\n 0: aB\n 1: a\n\n/(?-i:a)b/i\n\\= Expect no match\n    Ab\nNo match\n    AB\nNo match\n\n/((?-i:a))b/i\n\n/((?-i:a.))b/i\n\\= Expect no match\n    AB\nNo match\n    a\\nB\nNo match\n\n/((?s-i:a.))b/i\n    a\\nB\n 0: a\\x0aB\n 1: a\\x0a\n\n/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/\n    cabbbb\n 0: cabbbb\n\n/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/\n    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n\n/(ab)\\d\\1/i\n    Ab4ab\n 0: Ab4ab\n 1: Ab\n    ab4Ab\n 0: ab4Ab\n 1: ab\n\n/foo\\w*\\d{4}baz/\n    foobar1234baz\n 0: foobar1234baz\n\n/x(~~)*(?:(?:F)?)?/\n    x~~\n 0: x~~\n 1: ~~\n\n/^a(?#xxx){3}c/\n    aaac\n 0: aaac\n\n/^a (?#xxx) (?#yyy) {3}c/x\n    aaac\n 0: aaac\n\n/(?<![cd])b/\n\\= Expect no match\n    B\\nB\nNo match\n    dbcb\nNo match\n\n/(?<![cd])[ab]/\n    dbaacb\n 0: a\n\n/(?<!(c|d))b/\n\n/(?<!(c|d))[ab]/\n    dbaacb\n 0: a\n\n/(?<!cd)[ab]/\n    cdaccb\n 0: b\n\n/^(?:a?b?)*$/\n    \\\n 0: \n    a\n 0: a\n    ab\n 0: ab\n    aaa   \n 0: aaa\n\\= Expect no match\n    dbcb\nNo match\n    a--\nNo match\n    aa-- \nNo match\n\n/((?s)^a(.))((?m)^b$)/\n    a\\nb\\nc\\n\n 0: a\\x0ab\n 1: a\\x0a\n 2: \\x0a\n 3: b\n\n/((?m)^b$)/\n    a\\nb\\nc\\n\n 0: b\n 1: b\n\n/(?m)^b/\n    a\\nb\\n\n 0: b\n\n/(?m)^(b)/\n    a\\nb\\n\n 0: b\n 1: b\n\n/((?m)^b)/\n    a\\nb\\n\n 0: b\n 1: b\n\n/\\n((?m)^b)/\n    a\\nb\\n\n 0: \\x0ab\n 1: b\n\n/((?s).)c(?!.)/\n    a\\nb\\nc\\n\n 0: \\x0ac\n 1: \\x0a\n    a\\nb\\nc\\n\n 0: \\x0ac\n 1: \\x0a\n\n/((?s)b.)c(?!.)/\n    a\\nb\\nc\\n\n 0: b\\x0ac\n 1: b\\x0a\n    a\\nb\\nc\\n\n 0: b\\x0ac\n 1: b\\x0a\n\n/^b/\n\n/()^b/\n\\= Expect no match\n    a\\nb\\nc\\n\nNo match\n    a\\nb\\nc\\n\nNo match\n\n/((?m)^b)/\n    a\\nb\\nc\\n\n 0: b\n 1: b\n\n/(x)?(?(1)a|b)/\n\\= Expect no match\n    a\nNo match\n    a\nNo match\n\n/(x)?(?(1)b|a)/\n    a\n 0: a\n\n/()?(?(1)b|a)/\n    a\n 0: a\n\n/()(?(1)b|a)/\n\n/()?(?(1)a|b)/\n    a\n 0: a\n 1: \n\n/^(\\()?blah(?(1)(\\)))$/\n    (blah)\n 0: (blah)\n 1: (\n 2: )\n    blah\n 0: blah\n\\= Expect no match\n    a\nNo match\n    blah)\nNo match\n    (blah\nNo match\n\n/^(\\(+)?blah(?(1)(\\)))$/\n    (blah)\n 0: (blah)\n 1: (\n 2: )\n    blah\n 0: blah\n\\= Expect no match\n    blah)\nNo match\n    (blah\nNo match\n\n/(?(?!a)a|b)/\n\n/(?(?!a)b|a)/\n    a\n 0: a\n\n/(?(?=a)b|a)/\n\\= Expect no match\n    a\nNo match\n    a\nNo match\n\n/(?(?=a)a|b)/\n    a\n 0: a\n\n/(?=(a+?))(\\1ab)/\n    aaab\n 0: aab\n 1: a\n 2: aab\n\n/^(?=(a+?))\\1ab/\n\n/(\\w+:)+/\n    one:\n 0: one:\n 1: one:\n\n/$(?<=^(a))/\n    a\n 0: \n 1: a\n\n/(?=(a+?))(\\1ab)/\n    aaab\n 0: aab\n 1: a\n 2: aab\n\n/^(?=(a+?))\\1ab/\n\\= Expect no match\n    aaab\nNo match\n    aaab\nNo match\n\n/([\\w:]+::)?(\\w+)$/\n    abcd\n 0: abcd\n 1: <unset>\n 2: abcd\n    xy:z:::abcd\n 0: xy:z:::abcd\n 1: xy:z:::\n 2: abcd\n\n/^[^bcd]*(c+)/\n    aexycd\n 0: aexyc\n 1: c\n\n/(a*)b+/\n    caab\n 0: aab\n 1: aa\n\n/([\\w:]+::)?(\\w+)$/\n    abcd\n 0: abcd\n 1: <unset>\n 2: abcd\n    xy:z:::abcd\n 0: xy:z:::abcd\n 1: xy:z:::\n 2: abcd\n\\= Expect no match\n    abcd:\nNo match\n    abcd:\nNo match\n\n/^[^bcd]*(c+)/\n    aexycd\n 0: aexyc\n 1: c\n\n/(>a+)ab/\n\n/(?>a+)b/\n    aaab\n 0: aaab\n\n/([[:]+)/\n    a:[b]:\n 0: :[\n 1: :[\n\n/([[=]+)/\n    a=[b]=\n 0: =[\n 1: =[\n\n/([[.]+)/\n    a.[b].\n 0: .[\n 1: .[\n\n/((?>a+)b)/\n    aaab\n 0: aaab\n 1: aaab\n\n/(?>(a+))b/\n    aaab\n 0: aaab\n 1: aaa\n\n/((?>[^()]+)|\\([^()]*\\))+/\n    ((abc(ade)ufh()()x\n 0: abc(ade)ufh()()x\n 1: x\n\n/a\\Z/\n\\= Expect no match\n    aaab\nNo match\n    a\\nb\\n\nNo match\n\n/b\\Z/\n    a\\nb\\n\n 0: b\n\n/b\\z/\n\n/b\\Z/\n    a\\nb\n 0: b\n\n/b\\z/\n    a\\nb\n 0: b\n    \n/^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$/\n    a\n 0: a\n 1: \n    abc\n 0: abc\n 1: \n    a-b\n 0: a-b\n 1: \n    0-9 \n 0: 0-9\n 1: \n    a.b\n 0: a.b\n 1: \n    5.6.7  \n 0: 5.6.7\n 1: \n    the.quick.brown.fox\n 0: the.quick.brown.fox\n 1: \n    a100.b200.300c  \n 0: a100.b200.300c\n 1: \n    12-ab.1245 \n 0: 12-ab.1245\n 1: \n\\= Expect no match\n    \\\nNo match\n    .a\nNo match\n    -a\nNo match\n    a-\nNo match\n    a.  \nNo match\n    a_b \nNo match\n    a.-\nNo match\n    a..  \nNo match\n    ab..bc \nNo match\n    the.quick.brown.fox-\nNo match\n    the.quick.brown.fox.\nNo match\n    the.quick.brown.fox_\nNo match\n    the.quick.brown.fox+       \nNo match\n\n/(?>.*)(?<=(abcd|wxyz))/\n    alphabetabcd\n 0: alphabetabcd\n 1: abcd\n    endingwxyz\n 0: endingwxyz\n 1: wxyz\n\\= Expect no match\n    a rather long string that doesn't end with one of them\nNo match\n\n/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/\n    word cat dog elephant mussel cow horse canary baboon snake shark otherword\n 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword\n\\= Expect no match\n    word cat dog elephant mussel cow horse canary baboon snake shark\nNo match\n  \n/word (?>[a-zA-Z0-9]+ ){0,30}otherword/\n\\= Expect no match\n    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope\nNo match\n\n/(?<=\\d{3}(?!999))foo/\n    999foo\n 0: foo\n    123999foo \n 0: foo\n\\= Expect no match\n    123abcfoo\nNo match\n    \n/(?<=(?!...999)\\d{3})foo/\n    999foo\n 0: foo\n    123999foo \n 0: foo\n\\= Expect no match\n    123abcfoo\nNo match\n\n/(?<=\\d{3}(?!999)...)foo/\n    123abcfoo\n 0: foo\n    123456foo \n 0: foo\n\\= Expect no match\n    123999foo  \nNo match\n    \n/(?<=\\d{3}...)(?<!999)foo/\n    123abcfoo   \n 0: foo\n    123456foo \n 0: foo\n\\= Expect no match\n    123999foo  \nNo match\n\n/<a[\\s]+href[\\s]*=[\\s]*          # find <a href=\n ([\\\"\\'])?                       # find single or double quote\n (?(1) (.*?)\\1 | ([^\\s]+))       # if quote found, match up to next matching\n                                 # quote, otherwise match up to next space\n/isx\n    <a href=abcd xyz\n 0: <a href=abcd\n 1: <unset>\n 2: <unset>\n 3: abcd\n    <a href=\\\"abcd xyz pqr\\\" cats\n 0: <a href=\"abcd xyz pqr\"\n 1: \"\n 2: abcd xyz pqr\n    <a href=\\'abcd xyz pqr\\' cats\n 0: <a href='abcd xyz pqr'\n 1: '\n 2: abcd xyz pqr\n\n/<a\\s+href\\s*=\\s*                # find <a href=\n ([\"'])?                         # find single or double quote\n (?(1) (.*?)\\1 | (\\S+))          # if quote found, match up to next matching\n                                 # quote, otherwise match up to next space\n/isx\n    <a href=abcd xyz\n 0: <a href=abcd\n 1: <unset>\n 2: <unset>\n 3: abcd\n    <a href=\\\"abcd xyz pqr\\\" cats\n 0: <a href=\"abcd xyz pqr\"\n 1: \"\n 2: abcd xyz pqr\n    <a href       =       \\'abcd xyz pqr\\' cats\n 0: <a href       =       'abcd xyz pqr'\n 1: '\n 2: abcd xyz pqr\n\n/<a\\s+href(?>\\s*)=(?>\\s*)        # find <a href=\n ([\"'])?                         # find single or double quote\n (?(1) (.*?)\\1 | (\\S+))          # if quote found, match up to next matching\n                                 # quote, otherwise match up to next space\n/isx\n    <a href=abcd xyz\n 0: <a href=abcd\n 1: <unset>\n 2: <unset>\n 3: abcd\n    <a href=\\\"abcd xyz pqr\\\" cats\n 0: <a href=\"abcd xyz pqr\"\n 1: \"\n 2: abcd xyz pqr\n    <a href       =       \\'abcd xyz pqr\\' cats\n 0: <a href       =       'abcd xyz pqr'\n 1: '\n 2: abcd xyz pqr\n\n/(Z()|A)*/\n    ZABCDEFG\n 0: ZA\n 1: A\n 2: \n\n/(Z(())|A)*/\n    ZABCDEFG\n 0: ZA\n 1: A\n 2: \n 3: \n\n/((?>Z)+|A)*/\n    ZABCDEFG\n 0: ZA\n 1: A\n\n/((?>)+|A)*/\n    ZABCDEFG\n 0: \n 1: \n\n/a*/g\n    abbab\n 0: a\n 0: \n 0: \n 0: a\n 0: \n 0: \n\n/[[:space:]]+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n 0:  \\x09\\x0a\\x0c\\x0d\\x0b\n     \n/[[:blank:]]+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n 0:  \\x09\n     \n/[\\s]+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n 0:  \\x09\\x0a\\x0c\\x0d\\x0b\n     \n/\\s+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n 0:  \\x09\\x0a\\x0c\\x0d\\x0b\n     \n/a\u000bb/x\n    ab\n 0: ab\n\n/(?!\\A)x/m\n    a\\nxb\\n\n 0: x\n\n/(?!^)x/m\n\\= Expect no match\n    a\\nxb\\n\nNo match\n\n/abc\\Qabc\\Eabc/\n    abcabcabc\n 0: abcabcabc\n    \n/abc\\Q(*+|\\Eabc/\n    abc(*+|abc \n 0: abc(*+|abc\n\n/   abc\\Q abc\\Eabc/x\n    abc abcabc\n 0: abc abcabc\n\\= Expect no match\n    abcabcabc  \nNo match\n    \n/abc#comment\n    \\Q#not comment\n    literal\\E/x\n    abc#not comment\\n    literal     \n 0: abc#not comment\\x0a    literal\n\n/abc#comment\n    \\Q#not comment\n    literal/x\n    abc#not comment\\n    literal     \n 0: abc#not comment\\x0a    literal\n\n/abc#comment\n    \\Q#not comment\n    literal\\E #more comment\n    /x\n    abc#not comment\\n    literal     \n 0: abc#not comment\\x0a    literal\n\n/abc#comment\n    \\Q#not comment\n    literal\\E #more comment/x\n    abc#not comment\\n    literal     \n 0: abc#not comment\\x0a    literal\n\n/\\Qabc\\$xyz\\E/\n    abc\\\\\\$xyz\n 0: abc\\$xyz\n\n/\\Qabc\\E\\$\\Qxyz\\E/\n    abc\\$xyz\n 0: abc$xyz\n\n/\\Gabc/\n    abc\n 0: abc\n\\= Expect no match\n    xyzabc  \nNo match\n\n/\\Gabc./g\n    abc1abc2xyzabc3\n 0: abc1\n 0: abc2\n\n/abc./g\n    abc1abc2xyzabc3 \n 0: abc1\n 0: abc2\n 0: abc3\n\n/a(?x: b c )d/\n    XabcdY\n 0: abcd\n\\= Expect no match \n    Xa b c d Y \nNo match\n\n/((?x)x y z | a b c)/\n    XabcY\n 0: abc\n 1: abc\n    AxyzB \n 0: xyz\n 1: xyz\n\n/(?i)AB(?-i)C/\n    XabCY\n 0: abC\n\\= Expect no match\n    XabcY  \nNo match\n\n/((?i)AB(?-i)C|D)E/\n    abCE\n 0: abCE\n 1: abC\n    DE\n 0: DE\n 1: D\n\\= Expect no match\n    abcE\nNo match\n    abCe  \nNo match\n    dE\nNo match\n    De    \nNo match\n\n/(.*)\\d+\\1/\n    abc123abc\n 0: abc123abc\n 1: abc\n    abc123bc \n 0: bc123bc\n 1: bc\n\n/(.*)\\d+\\1/s\n    abc123abc\n 0: abc123abc\n 1: abc\n    abc123bc \n 0: bc123bc\n 1: bc\n    \n/((.*))\\d+\\1/\n    abc123abc\n 0: abc123abc\n 1: abc\n 2: abc\n    abc123bc  \n 0: bc123bc\n 1: bc\n 2: bc\n\n# This tests for an IPv6 address in the form where it can have up to\n# eight components, one and only one of which is empty. This must be\n# an internal component. \n\n/^(?!:)                       # colon disallowed at start\n  (?:                         # start of item\n    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or\n    (?(1)0 | () ) )           # if null previously matched, fail; else null\n    :                         # followed by colon\n  ){1,7}                      # end item; 1-7 of them required               \n  [0-9a-f]{1,4} $             # final hex number at end of string\n  (?(1)|.)                    # check that there was an empty component\n  /ix\n    a123::a123\n 0: a123::a123\n 1: \n    a123:b342::abcd\n 0: a123:b342::abcd\n 1: \n    a123:b342::324e:abcd\n 0: a123:b342::324e:abcd\n 1: \n    a123:ddde:b342::324e:abcd\n 0: a123:ddde:b342::324e:abcd\n 1: \n    a123:ddde:b342::324e:dcba:abcd\n 0: a123:ddde:b342::324e:dcba:abcd\n 1: \n    a123:ddde:9999:b342::324e:dcba:abcd\n 0: a123:ddde:9999:b342::324e:dcba:abcd\n 1: \n\\= Expect no match\n    1:2:3:4:5:6:7:8\nNo match\n    a123:bce:ddde:9999:b342::324e:dcba:abcd\nNo match\n    a123::9999:b342::324e:dcba:abcd\nNo match\n    abcde:2:3:4:5:6:7:8\nNo match\n    ::1\nNo match\n    abcd:fee0:123::   \nNo match\n    :1\nNo match\n    1:  \nNo match\n\n/[z\\Qa-d]\\E]/\n    z\n 0: z\n    a\n 0: a\n    -\n 0: -\n    d\n 0: d\n    ] \n 0: ]\n\\= Expect no match\n    b     \nNo match\n\n/(a+)*b/\n\\= Expect no match\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \nNo match\n    \n/(?i)reg(?:ul(?:[a]|ae)r|ex)/\n    REGular\n 0: REGular\n    regulaer\n 0: regulaer\n    Regex  \n 0: Regex\n    regulr \n 0: regul\\xe4r\n\n#if !ebcdic\n\n/[--]+/\n    \n 0: \\xc5\\xe6\\xe5\\xe4\\xe0\n    \n 0: \\xc5\\xe6\\xe5\\xe4\\xff\n    \n 0: \\xc5\\xe6\\xe5\\xe4\\xc0\n    \n 0: \\xc5\\xe6\\xe5\\xe4\\xdf\n\n#endif\n\n/(?<=Z)X./\n  \\x84XAZXB\n 0: XB\n\n/ab cd (?x) de fg/\n    ab cd defg\n 0: ab cd defg\n\n/ab cd(?x) de fg/\n    ab cddefg\n 0: ab cddefg\n\\= Expect no match \n    abcddefg\nNo match\n\n/(?<![^f]oo)(bar)/\n    foobarX \n 0: bar\n 1: bar\n\\= Expect no match \n    boobarX\nNo match\n\n/(?<![^f])X/\n    offX\n 0: X\n\\= Expect no match\n    onyX  \nNo match\n\n/(?<=[^f])X/\n    onyX\n 0: X\n\\= Expect no match\n    offX \nNo match\n\n/^/gm\n    a\\nb\\nc\\n\n 0: \n 0: \n 0: \n    \\ \n 0: \n    \n/(?<=C\\n)^/gm\n    A\\nC\\nC\\n \n 0: \n\n/(?:(?(1)a|b)(X))+/\n    bXaX\n 0: bXaX\n 1: X\n\n/(?:(?(1)\\1a|b)(X|Y))+/\n    bXXaYYaY\n 0: bXXaYYaY\n 1: Y\n    bXYaXXaX  \n 0: bX\n 1: X\n\n/()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+/\n    bXXaYYaY\n 0: bX\n 1: \n 2: \n 3: \n 4: \n 5: \n 6: \n 7: \n 8: \n 9: \n10: X\n\n/[[,abc,]+]/\n    abc]\n 0: abc]\n    a,b]\n 0: a,b]\n    [a,b,c]  \n 0: [a,b,c]\n\n/(?-x: )/x\n    A\\x20B\n 0:  \n    \n/(?x)(?-x: \\s*#\\s*)/\n    A # B\n 0:  # \n\\= Expect no match\n    #  \nNo match\n    A s#s B\nNo match\n\n/(?x-is)(?:(?-ixs) \\s*#\\s*) include/\n    A #include\n 0:  #include\n\\= Expect no match\n    A#include  \nNo match\n    A #Include\nNo match\n\n/a*b*\\w/\n    aaabbbb\n 0: aaabbbb\n    aaaa\n 0: aaaa\n    a\n 0: a\n\n/a*b?\\w/\n    aaabbbb\n 0: aaabb\n    aaaa\n 0: aaaa\n    a\n 0: a\n\n/a*b{0,4}\\w/\n    aaabbbb\n 0: aaabbbb\n    aaaa\n 0: aaaa\n    a\n 0: a\n\n/a*b{0,}\\w/\n    aaabbbb\n 0: aaabbbb\n    aaaa\n 0: aaaa\n    a\n 0: a\n    \n/a*\\d*\\w/\n    0a\n 0: 0a\n    a \n 0: a\n    \n/a*b *\\w/x\n    a \n 0: a\n\n/a*b#comment\n  *\\w/x\n    a \n 0: a\n\n/a* b *\\w/x\n    a \n 0: a\n\n/^\\w+=.*(\\\\\\n.*)*/\n    abc=xyz\\\\\\npqr\n 0: abc=xyz\\\n\n/(?=(\\w+))\\1:/\n    abcd:\n 0: abcd:\n 1: abcd\n\n/^(?=(\\w+))\\1:/\n    abcd:\n 0: abcd:\n 1: abcd\n\n/^\\Eabc/\n    abc\n 0: abc\n    \n/^[\\Eabc]/\n    a\n 0: a\n\\= Expect no match \n    E \nNo match\n    \n/^[a-\\Ec]/\n    b\n 0: b\n\\= Expect no match\n    -\nNo match\n    E    \nNo match\n\n/^[a\\E\\E-\\Ec]/\n    b\n 0: b\n\\= Expect no match\n    -\nNo match\n    E    \nNo match\n\n/^[\\E\\Qa\\E-\\Qz\\E]+/\n    b\n 0: b\n\\= Expect no match\n    -  \nNo match\n    \n/^[a\\Q]bc\\E]/\n    a\n 0: a\n    ]\n 0: ]\n    c\n 0: c\n    \n/^[a-\\Q\\E]/\n    a\n 0: a\n    -     \n 0: -\n\n/^(a()*)*/\n    aaaa\n 0: aaaa\n 1: a\n 2: \n\n/^(?:a(?:(?:))*)*/\n    aaaa\n 0: aaaa\n\n/^(a()+)+/\n    aaaa\n 0: aaaa\n 1: a\n 2: \n\n/^(?:a(?:(?:))+)+/\n    aaaa\n 0: aaaa\n\n/(a){0,3}(?(1)b|(c|))*D/\n    abbD\n 0: abbD\n 1: a\n    ccccD\n 0: ccccD\n 1: <unset>\n 2: \n    D  \n 0: D\n 1: <unset>\n 2: \n\n/(a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n 1: \n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nNo match\n\n/(?>a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nNo match\n\n/(?:a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nNo match\n\n/\\Z/g\n  abc\\n\n 0: \n 0: \n  \n/^(?s)(?>.*)(?<!\\n)/\n  abc\n 0: abc\n\\= Expect no match\n  abc\\n  \nNo match\n\n/^(?![^\\n]*\\n\\z)/\n  abc\n 0: \n\\= Expect no match\n  abc\\n \nNo match\n  \n/\\z(?<!\\n)/\n  abc\n 0: \n\\= Expect no match\n  abc\\n  \nNo match\n\n/(.*(.)?)*/\n    abcd\n 0: abcd\n 1: \n\n/( (A | (?(1)0|) )*   )/x\n    abcd\n 0: \n 1: \n 2: \n\n/( ( (?(1)0|) )*   )/x\n    abcd\n 0: \n 1: \n 2: \n\n/(  (?(1)0|)*   )/x\n    abcd\n 0: \n 1: \n\n/[[:abcd:xyz]]/\n    a]\n 0: a]\n    :] \n 0: :]\n    \n/[abc[:x\\]pqr]/\n    a\n 0: a\n    [\n 0: [\n    :\n 0: :\n    ]\n 0: ]\n    p    \n 0: p\n\n/.*[op][xyz]/\n\\= Expect no match\n    fooabcfoo\nNo match\n\n/(?(?=.*b)b|^)/\n   adc\n 0: \n   abc \n 0: b\n\n/(?(?=^.*b)b|^)/\n   adc\n 0: \n\\= Expect no match\n   abc \nNo match\n\n/(?(?=.*b)b|^)*/\n   adc\n 0: \n   abc \n 0: \n\n/(?(?=.*b)b|^)+/\n   adc\n 0: \n   abc \n 0: b\n\n/(?(?=b).*b|^d)/\n    abc\n 0: b\n\n/(?(?=.*b).*b|^d)/\n    abc\n 0: ab\n\n/^%((?(?=[a])[^%])|b)*%$/\n    %ab%\n 0: %ab%\n 1: \n\n/(?i)a(?-i)b|c/\n    XabX\n 0: ab\n    XAbX\n 0: Ab\n    CcC \n 0: c\n\\= Expect no match\n    XABX   \nNo match\n\n/[\\x00-\\xff\\s]+/\n    \\x0a\\x0b\\x0c\\x0d\n 0: \\x0a\\x0b\\x0c\\x0d\n\n/(abc)\\1/i\n\\= Expect no match\n   abc\nNo match\n\n/(abc)\\1/\n\\= Expect no match\n   abc\nNo match\n\n/[^a]*/i\n    12abc\n 0: 12\n    12ABC\n 0: 12\n\n/[^a]*+/i\n    12abc\n 0: 12\n    12ABC\n 0: 12\n\n/[^a]*?X/i\n\\= Expect no match\n    12abc\nNo match\n    12ABC\nNo match\n    \n/[^a]+?X/i\n\\= Expect no match\n    12abc\nNo match\n    12ABC\nNo match\n\n/[^a]?X/i\n    12aXbcX\n 0: X\n    12AXBCX\n 0: X\n    BCX \n 0: CX\n\n/[^a]??X/i\n    12aXbcX\n 0: X\n    12AXBCX\n 0: X\n    BCX\n 0: CX\n    \n/[^a]?+X/i\n    12aXbcX\n 0: cX\n    12AXBCX\n 0: CX\n    BCX \n 0: CX\n\n/[^a]{2,3}/i\n    abcdef\n 0: bcd\n    ABCDEF  \n 0: BCD\n\n/[^a]{2,3}?/i\n    abcdef\n 0: bc\n    ABCDEF  \n 0: BC\n\n/[^a]{2,3}+/i\n    abcdef\n 0: bcd\n    ABCDEF  \n 0: BCD\n\n/((a|)+)+Z/\n    Z\n 0: Z\n 1: \n 2: \n\n/(a)b|(a)c/\n    ac\n 0: ac\n 1: <unset>\n 2: a\n\n/(?>(a))b|(a)c/\n    ac\n 0: ac\n 1: <unset>\n 2: a\n\n/(?=(a))ab|(a)c/\n    ac\n 0: ac\n 1: <unset>\n 2: a\n\n/((?>(a))b|(a)c)/\n    ac\n 0: ac\n 1: ac\n 2: <unset>\n 3: a\n\n/((?>(a))b|(a)c)++/\n    ac\n 0: ac\n 1: ac\n 2: <unset>\n 3: a\n\n/(?:(?>(a))b|(a)c)++/\n    ac\n 0: ac\n 1: <unset>\n 2: a\n\n/(?=(?>(a))b|(a)c)(..)/\n    ac\n 0: ac\n 1: <unset>\n 2: a\n 3: ac\n\n/(?>(?>(a))b|(a)c)/\n    ac\n 0: ac\n 1: <unset>\n 2: a\n\n/(?:(?>([ab])))+a=/aftertext\n    =ba=\n 0: ba=\n 0+ \n 1: b\n\n/(?>([ab]))+a=/aftertext\n    =ba=\n 0: ba=\n 0+ \n 1: b\n\n/((?>(a+)b)+(aabab))/\n    aaaabaaabaabab\n 0: aaaabaaabaabab\n 1: aaaabaaabaabab\n 2: aaa\n 3: aabab\n\n/(?>a+|ab)+?c/\n\\= Expect no match\n    aabc\nNo match\n\n/(?>a+|ab)+c/\n\\= Expect no match\n    aabc\nNo match\n\n/(?:a+|ab)+c/\n    aabc\n 0: aabc\n\n/(?(?=(a))a)/\n    a\n 0: a\n 1: a\n\n/(?(?=(a))a)(b)/\n    ab\n 0: ab\n 1: a\n 2: b\n\n/^(?:a|ab)++c/\n\\= Expect no match\n    aaaabc\nNo match\n\n/^(?>a|ab)++c/\n\\= Expect no match\n    aaaabc\nNo match\n\n/^(?:a|ab)+c/\n    aaaabc\n 0: aaaabc\n\n/(?=abc){3}abc/aftertext\n    abcabcabc\n 0: abc\n 0+ abcabc\n\\= Expect no match\n    xyz  \nNo match\n    \n/(?=abc)+abc/aftertext\n    abcabcabc\n 0: abc\n 0+ abcabc\n\\= Expect no match\n    xyz  \nNo match\n    \n/(?=abc)++abc/aftertext\n    abcabcabc\n 0: abc\n 0+ abcabc\n\\= Expect no match\n    xyz  \nNo match\n    \n/(?=abc){0}xyz/\n    xyz \n 0: xyz\n\n/(?=abc){1}xyz/\n\\= Expect no match\n    xyz \nNo match\n    \n/(?=(a))?./\n    ab\n 0: a\n 1: a\n    bc\n 0: b\n      \n/(?=(a))??./\n    ab\n 0: a\n    bc\n 0: b\n\n/^(?=(?1))?[az]([abc])d/\n    abd \n 0: abd\n 1: b\n    zcdxx \n 0: zcd\n 1: c\n\n/^(?!a){0}\\w+/\n    aaaaa\n 0: aaaaa\n\n/(?<=(abc))?xyz/\n    abcxyz\n 0: xyz\n 1: abc\n    pqrxyz \n 0: xyz\n\n/^[\\g<a>]+/\n    ggg<<<aaa>>>\n 0: ggg<<<aaa>>>\n\\= Expect no match\n    \\\\ga  \nNo match\n    \n/^[\\ga]+/\n    gggagagaxyz \n 0: gggagaga\n    \n/^[:a[:digit:]]+/\n    aaaa444:::Z \n 0: aaaa444:::\n\n/^[:a[:digit:]:b]+/\n    aaaa444:::bbbZ \n 0: aaaa444:::bbb\n\n/[:a]xxx[b:]/\n     :xxx:\n 0: :xxx:\n     \n/(?<=a{2})b/i\n    xaabc\n 0: b\n\\= Expect no match\n    xabc  \nNo match\n\n/(?<!a{2})b/i\n    xabc\n 0: b\n\\= Expect no match\n    xaabc  \nNo match\n\n/(?<=a\\h)c/\n    xa c\n 0: c\n    \n/(?<=[^a]{2})b/\n    axxbc\n 0: b\n    aAAbc \n 0: b\n\\= Expect no match\n    xaabc    \nNo match\n\n/(?<=[^a]{2})b/i\n    axxbc  \n 0: b\n\\= Expect no match\n    aAAbc \nNo match\n    xaabc    \nNo match\n\n/(?<=a\\H)c/\n    abc\n 0: c\n\n/(?<=a\\V)c/\n    abc\n 0: c\n    \n/(?<=a\\v)c/\n    a\\nc\n 0: c\n\n/(?(?=c)c|d)++Y/\n    XcccddYX\n 0: cccddY\n\n/(?(?=c)c|d)*+Y/\n    XcccddYX\n 0: cccddY\n\n/^(a{2,3}){2,}+a/\n    aaaaaaa\n 0: aaaaaaa\n 1: aaa\n\\= Expect no match\n    aaaaaa\nNo match\n    aaaaaaaaa \nNo match\n\n/^(a{2,3})++a/\n\\= Expect no match\n    aaaaaa\nNo match\n\n/^(a{2,3})*+a/\n\\= Expect no match\n    aaaaaa\nNo match\n\n/\\H\\h\\V\\v/\n    X X\\x0a\n 0: X X\\x0a\n    X\\x09X\\x0b\n 0: X\\x09X\\x0b\n\\= Expect no match\n    \\xa0 X\\x0a   \nNo match\n    \n/\\H*\\h+\\V?\\v{3,4}/\n    \\x09\\x20\\xa0X\\x0a\\x0b\\x0c\\x0d\\x0a\n 0: \\x09 \\xa0X\\x0a\\x0b\\x0c\\x0d\n    \\x09\\x20\\xa0\\x0a\\x0b\\x0c\\x0d\\x0a\n 0: \\x09 \\xa0\\x0a\\x0b\\x0c\\x0d\n    \\x09\\x20\\xa0\\x0a\\x0b\\x0c\n 0: \\x09 \\xa0\\x0a\\x0b\\x0c\n\\= Expect no match \n    \\x09\\x20\\xa0\\x0a\\x0b\nNo match\n     \n/\\H{3,4}/\n    XY  ABCDE\n 0: ABCD\n    XY  PQR ST \n 0: PQR\n    \n/.\\h{3,4}./\n    XY  AB    PQRS\n 0: B    P\n\n/\\h*X\\h?\\H+Y\\H?Z/\n    >XNNNYZ\n 0: XNNNYZ\n    >  X NYQZ\n 0:   X NYQZ\n\\= Expect no match\n    >XYZ   \nNo match\n    >  X NY Z\nNo match\n\n#if !ebcdic\n\n/\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c/\n    >XY\\x0aZ\\x0aA\\x0bNN\\x0c\n 0: XY\\x0aZ\\x0aA\\x0bNN\\x0c\n    >\\x0a\\x0dX\\x0aY\\x0a\\x0bZZZ\\x0aAAA\\x0bNNN\\x0c\n 0: \\x0a\\x0dX\\x0aY\\x0a\\x0bZZZ\\x0aAAA\\x0bNNN\\x0c\n\n#endif\n\n/(foo)\\Kbar/\n    foobar\n 0: bar\n 1: foo\n   \n/(foo)(\\Kbar|baz)/\n    foobar\n 0: bar\n 1: foo\n 2: bar\n    foobaz \n 0: foobaz\n 1: foo\n 2: baz\n\n/(foo\\Kbar)baz/\n    foobarbaz\n 0: barbaz\n 1: foobar\n\n/abc\\K|def\\K/g,aftertext\n    Xabcdefghi\n 0: \n 0+ defghi\n 0: \n 0+ ghi\n\n/ab\\Kc|de\\Kf/g,aftertext\n    Xabcdefghi\n 0: c\n 0+ defghi\n 0: f\n 0+ ghi\n    \n/(?=C)/g,aftertext\n    ABCDECBA\n 0: \n 0+ CDECBA\n 0: \n 0+ CBA\n    \n/^abc\\K/aftertext\n    abcdef\n 0: \n 0+ def\n\\= Expect no match\n    defabcxyz   \nNo match\n\n/^(a(b))\\1\\g1\\g{1}\\g-1\\g{-1}\\g{-2}Z/\n    ababababbbabZXXXX\n 0: ababababbbabZ\n 1: ab\n 2: b\n\n/(?<A>tom|bon)-\\g{A}/\n    tom-tom\n 0: tom-tom\n 1: tom\n    bon-bon \n 0: bon-bon\n 1: bon\n    \n/(^(a|b\\g{-1}))/\n\\= Expect no match\n    bacxxx\nNo match\n\n/(?|(abc)|(xyz))\\1/\n    abcabc\n 0: abcabc\n 1: abc\n    xyzxyz \n 0: xyzxyz\n 1: xyz\n\\= Expect no match\n    abcxyz\nNo match\n    xyzabc   \nNo match\n    \n/(?|(abc)|(xyz))(?1)/\n    abcabc\n 0: abcabc\n 1: abc\n    xyzabc \n 0: xyzabc\n 1: xyz\n\\= Expect no match \n    xyzxyz \nNo match\n \n/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/\n    XYabcdY\n 0: XYabcdY\n 1: a\n 2: b\n 3: c\n 4: d\n 5: Y\n\n/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/\n    XYabcdY\n 0: XYabcdY\n 1: a\n 2: b\n 3: <unset>\n 4: <unset>\n 5: c\n 6: d\n 7: Y\n\n/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/\n    XYabcdY\n 0: XYabcdY\n 1: a\n 2: b\n 3: <unset>\n 4: <unset>\n 5: c\n 6: d\n 7: Y\n\n/(?'abc'\\w+):\\k<abc>{2}/\n    a:aaxyz\n 0: a:aa\n 1: a\n    ab:ababxyz\n 0: ab:abab\n 1: ab\n\\= Expect no match\n    a:axyz\nNo match\n    ab:abxyz\nNo match\n\n/(?'abc'\\w+):\\g{abc}{2}/\n    a:aaxyz\n 0: a:aa\n 1: a\n    ab:ababxyz\n 0: ab:abab\n 1: ab\n\\= Expect no match\n    a:axyz\nNo match\n    ab:abxyz\nNo match\n\n/^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x\n    abd\n 0: abd\n 1: a\n    ce\n 0: ce\n\n/^(a.)\\g-1Z/\n    aXaXZ\n 0: aXaXZ\n 1: aX\n\n/^(a.)\\g{-1}Z/\n    aXaXZ\n 0: aXaXZ\n 1: aX\n\n/^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /x\n    abcd\n 0: ab\n\n/(?<all>(?:(?:a(?&all))|(b))(c?))/\n    aabc\n 0: aabc\n 1: aabc\n 2: <unset>\n 3: \n    \n/(a(b)|(c))(?1)/\n    abc\n 0: abc\n 1: ab\n 2: b\n    cab \n 0: cab\n 1: c\n 2: <unset>\n 3: c\n\n/(?1)(a(b)|(c))/\n    abc\n 0: abc\n 1: c\n 2: <unset>\n 3: c\n    cab \n 0: cab\n 1: ab\n 2: b\n\n/(?<NAME>(?&NAME_PAT))\\s+(?<ADDR>(?&ADDRESS_PAT))\n  (?(DEFINE)\n  (?<NAME_PAT>[a-z]+)\n  (?<ADDRESS_PAT>\\d+)\n  )/x\n    metcalfe 33\n 0: metcalfe 33\n 1: metcalfe\n 2: 33\n\n/(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}/\n    1.2.3.4\n 0: 1.2.3.4\n 1: <unset>\n 2: .4\n    131.111.10.206\n 0: 131.111.10.206\n 1: <unset>\n 2: .206\n    10.0.0.0\n 0: 10.0.0.0\n 1: <unset>\n 2: .0\n\\= Expect no match\n    10.6\nNo match\n    455.3.4.5\nNo match\n\n/\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))/\n    1.2.3.4\n 0: 1.2.3.4\n 1: .4\n    131.111.10.206\n 0: 131.111.10.206\n 1: .206\n    10.0.0.0\n 0: 10.0.0.0\n 1: .0\n\\= Expect no match\n    10.6\nNo match\n    455.3.4.5\nNo match\n\n/^(\\w++|\\s++)*$/\n    now is the time for all good men to come to the aid of the party\n 0: now is the time for all good men to come to the aid of the party\n 1: party\n\\= Expect no match\n    this is not a line with only words and spaces!\nNo match\n\n/(\\d++)(\\w)/\n    12345a\n 0: 12345a\n 1: 12345\n 2: a\n\\= Expect no match\n    12345+\nNo match\n\n/a++b/\n    aaab\n 0: aaab\n\n/(a++b)/\n    aaab\n 0: aaab\n 1: aaab\n\n/(a++)b/\n    aaab\n 0: aaab\n 1: aaa\n\n/([^()]++|\\([^()]*\\))+/\n    ((abc(ade)ufh()()x\n 0: abc(ade)ufh()()x\n 1: x\n\n/\\(([^()]++|\\([^()]+\\))+\\)/\n    (abc)\n 0: (abc)\n 1: abc\n    (abc(def)xyz)\n 0: (abc(def)xyz)\n 1: xyz\n\\= Expect no match\n    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nNo match\n\n/^([^()]|\\((?1)*\\))*$/\n    abc\n 0: abc\n 1: c\n    a(b)c\n 0: a(b)c\n 1: c\n    a(b(c))d\n 0: a(b(c))d\n 1: d\n\\= Expect no match)\n    a(b(c)d\nNo match\n\n/^>abc>([^()]|\\((?1)*\\))*<xyz<$/\n   >abc>123<xyz<\n 0: >abc>123<xyz<\n 1: 3\n   >abc>1(2)3<xyz<\n 0: >abc>1(2)3<xyz<\n 1: 3\n   >abc>(1(2)3)<xyz<\n 0: >abc>(1(2)3)<xyz<\n 1: (1(2)3)\n\n/^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$/i\n    1221\n 0: 1221\n 1: 1221\n 2: 1\n    Satanoscillatemymetallicsonatas\n 0: Satanoscillatemymetallicsonatas\n 1: <unset>\n 2: <unset>\n 3: Satanoscillatemymetallicsonatas\n 4: S\n    AmanaplanacanalPanama\n 0: AmanaplanacanalPanama\n 1: <unset>\n 2: <unset>\n 3: AmanaplanacanalPanama\n 4: A\n    AblewasIereIsawElba\n 0: AblewasIereIsawElba\n 1: <unset>\n 2: <unset>\n 3: AblewasIereIsawElba\n 4: A\n\\= Expect no match\n    Thequickbrownfox\nNo match\n\n/^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$/\n    12\n 0: 12\n 1: 12\n    (((2+2)*-3)-7)\n 0: (((2+2)*-3)-7)\n 1: (((2+2)*-3)-7)\n 2: -\n    -12\n 0: -12\n 1: -12\n\\= Expect no match\n    ((2+2)*-3)-7)\nNo match\n\n/^(x(y|(?1){2})z)/\n    xyz\n 0: xyz\n 1: xyz\n 2: y\n    xxyzxyzz\n 0: xxyzxyzz\n 1: xxyzxyzz\n 2: xyzxyz\n\\= Expect no match\n    xxyzz\nNo match\n    xxyzxyzxyzz\nNo match\n\n/((< (?: (?(R) \\d++  | [^<>]*+) | (?2)) * >))/x\n    <>\n 0: <>\n 1: <>\n 2: <>\n    <abcd>\n 0: <abcd>\n 1: <abcd>\n 2: <abcd>\n    <abc <123> hij>\n 0: <abc <123> hij>\n 1: <abc <123> hij>\n 2: <abc <123> hij>\n    <abc <def> hij>\n 0: <def>\n 1: <def>\n 2: <def>\n    <abc<>def>\n 0: <abc<>def>\n 1: <abc<>def>\n 2: <abc<>def>\n    <abc<>\n 0: <>\n 1: <>\n 2: <>\n\\= Expect no match\n    <abc\nNo match\n\n/^a+(*FAIL)/\n\\= Expect no match\n    aaaaaa\nNo match\n    \n/a+b?c+(*FAIL)/\n\\= Expect no match\n    aaabccc\nNo match\n\n/a+b?(*PRUNE)c+(*FAIL)/\n\\= Expect no match\n    aaabccc\nNo match\n\n/a+b?(*COMMIT)c+(*FAIL)/\n\\= Expect no match\n    aaabccc\nNo match\n    \n/a+b?(*SKIP)c+(*FAIL)/\n\\= Expect no match\n    aaabcccaaabccc\nNo match\n\n/^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})/\n    aaaxxxxxx\n 0: aaaxxxxxx\n    aaa++++++ \n 0: aaa\n    bbbxxxxx\n 0: bbbxxxxx\n    bbb+++++ \n 0: bbb\n    cccxxxx\n 0: cccxxxx\n    ccc++++ \n 0: ccc\n    dddddddd   \n 0: ddd\n\n/^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})/\n    aaaxxxxxx\n 0: aaaxxxxxx\n 1: aaaxxxxxx\n    aaa++++++ \n 0: aaa\n 1: aaa\n    bbbxxxxx\n 0: bbbxxxxx\n 1: bbbxxxxx\n    bbb+++++ \n 0: bbb\n 1: bbb\n    cccxxxx\n 0: cccxxxx\n 1: cccxxxx\n    ccc++++ \n 0: ccc\n 1: ccc\n    dddddddd   \n 0: ddd\n 1: ddd\n\n/a+b?(*THEN)c+(*FAIL)/\n\\= Expect no match\n    aaabccc\nNo match\n\n/(A (A|B(*ACCEPT)|C) D)(E)/x\n    AB\n 0: AB\n 1: AB\n 2: B\n    ABX\n 0: AB\n 1: AB\n 2: B\n    AADE\n 0: AADE\n 1: AAD\n 2: A\n 3: E\n    ACDE\n 0: ACDE\n 1: ACD\n 2: C\n 3: E\n\\= Expect no match\n    AD \nNo match\n        \n/^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$/i\n    1221\n 0: 1221\n 1: 1221\n 2: 1\n    Satan, oscillate my metallic sonatas!\n 0: Satan, oscillate my metallic sonatas!\n 1: <unset>\n 2: <unset>\n 3: Satan, oscillate my metallic sonatas\n 4: S\n    A man, a plan, a canal: Panama!\n 0: A man, a plan, a canal: Panama!\n 1: <unset>\n 2: <unset>\n 3: A man, a plan, a canal: Panama\n 4: A\n    Able was I ere I saw Elba.\n 0: Able was I ere I saw Elba.\n 1: <unset>\n 2: <unset>\n 3: Able was I ere I saw Elba\n 4: A\n\\= Expect no match\n    The quick brown fox\nNo match\n\n/^((.)(?1)\\2|.)$/\n    a\n 0: a\n 1: a\n    aba\n 0: aba\n 1: aba\n 2: a\n    aabaa  \n 0: aabaa\n 1: aabaa\n 2: a\n    abcdcba \n 0: abcdcba\n 1: abcdcba\n 2: a\n    pqaabaaqp  \n 0: pqaabaaqp\n 1: pqaabaaqp\n 2: p\n    ablewasiereisawelba\n 0: ablewasiereisawelba\n 1: ablewasiereisawelba\n 2: a\n\\= Expect no match     \n    rhubarb\nNo match\n    the quick brown fox  \nNo match\n\n/(a)(?<=b(?1))/\n    baz\n 0: a\n 1: a\n\\= Expect no match\n    caz  \nNo match\n    \n/(?<=b(?1))(a)/\n    zbaaz\n 0: a\n 1: a\n\\= Expect no match\n    aaa  \nNo match\n    \n/(?<X>a)(?<=b(?&X))/\n    baz\n 0: a\n 1: a\n\n/^(?|(abc)|(def))\\1/\n    abcabc\n 0: abcabc\n 1: abc\n    defdef \n 0: defdef\n 1: def\n\\= Expect no match\n    abcdef\nNo match\n    defabc   \nNo match\n    \n/^(?|(abc)|(def))(?1)/\n    abcabc\n 0: abcabc\n 1: abc\n    defabc\n 0: defabc\n 1: def\n\\= Expect no match\n    defdef\nNo match\n    abcdef    \nNo match\n\n/(?:a(?<quote> (?<apostrophe>')|(?<realquote>\")) |b(?<quote> (?<apostrophe>')|(?<realquote>\")) ) (?('quote')[a-z]+|[0-9]+)/x,dupnames\n    a\\\"aaaaa\n 0: a\"aaaaa\n 1: \"\n 2: <unset>\n 3: \"\n    b\\\"aaaaa \n 0: b\"aaaaa\n 1: <unset>\n 2: <unset>\n 3: <unset>\n 4: \"\n 5: <unset>\n 6: \"\n\\= Expect no match \n    b\\\"11111\nNo match\n\n/(?:(?1)|B)(A(*F)|C)/\n    ABCD\n 0: BC\n 1: C\n    CCD\n 0: CC\n 1: C\n\\= Expect no match\n    CAD   \nNo match\n\n/^(?:(?1)|B)(A(*F)|C)/\n    CCD\n 0: CC\n 1: C\n    BCD \n 0: BC\n 1: C\n\\= Expect no match\n    ABCD\nNo match\n    CAD\nNo match\n    BAD    \nNo match\n\n/(?:(?1)|B)(A(*ACCEPT)XX|C)D/\n    AAD\n 0: AA\n 1: A\n    ACD\n 0: ACD\n 1: C\n    BAD\n 0: BA\n 1: A\n    BCD\n 0: BCD\n 1: C\n    BAX  \n 0: BA\n 1: A\n\\= Expect no match\n    ACX\nNo match\n    ABC   \nNo match\n\n/(?(DEFINE)(A))B(?1)C/\n    BAC\n 0: BAC\n\n/(?(DEFINE)((A)\\2))B(?1)C/\n    BAAC\n 0: BAAC\n\n/(?<pn> \\( ( [^()]++ | (?&pn) )* \\) )/x\n    (ab(cd)ef)\n 0: (ab(cd)ef)\n 1: (ab(cd)ef)\n 2: ef\n\n/^(?=a(*SKIP)b|ac)/\n\\= Expect no match\n    ac\nNo match\n    \n/^(?=a(*PRUNE)b)/\n    ab  \n 0: \n\\= Expect no match \n    ac\nNo match\n\n/^(?=a(*ACCEPT)b)/\n    ac\n 0: \n\n/(?>a\\Kb)/\n    ab\n 0: b\n\n/((?>a\\Kb))/\n    ab\n 0: b\n 1: ab\n\n/(a\\Kb)/\n    ab\n 0: b\n 1: ab\n    \n/^a\\Kcz|ac/\n    ac\n 0: ac\n    \n/(?>a\\Kbz|ab)/\n    ab \n 0: ab\n\n/^(?&t)(?(DEFINE)(?<t>a\\Kb))$/\n    ab\n 0: b\n\n/^([^()]|\\((?1)*\\))*$/\n    a(b)c\n 0: a(b)c\n 1: c\n    a(b(c)d)e \n 0: a(b(c)d)e\n 1: e\n\n/(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/\n    0\n 0: 0\n 1: 0\n    00\n 0: 00\n 1: 00\n 2: 0\n    0000  \n 0: 0000\n 1: 0000\n 2: 0\n\n/(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/\n    0\n 0: 0\n 1: 0\n 2: 0\n    00\n 0: 0\n 1: 0\n 2: 0\n    0000  \n 0: 0\n 1: 0\n 2: 0\n\n# This one does fail, as expected, in Perl. It needs the complex item at the\n# end of the pattern. A single letter instead of (B|D) makes it not fail, which\n# I think is a Perl bug.\n\n/A(*COMMIT)(B|D)/\n\\= Expect no match\n    ACABX\nNo match\n\n# Check the use of names for failure\n\n/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark\n\\= Expect no match\n    AC\nNo match, mark = A\n    CB    \nNo match, mark = B\n    \n/(*MARK:A)(*SKIP:B)(C|X)/mark\n    C\n 0: C\n 1: C\nMK: A\n\\= Expect no match\n    D\nNo match, mark = A\n     \n/^(A(*THEN:A)B|C(*THEN:B)D)/mark\n\\= Expect no match\n    CB    \nNo match, mark = B\n\n/^(?:A(*THEN:A)B|C(*THEN:B)D)/mark\n\\= Expect no match\n    CB    \nNo match, mark = B\n    \n/^(?>A(*THEN:A)B|C(*THEN:B)D)/mark\n\\= Expect no match\n    CB    \nNo match, mark = B\n    \n# This should succeed, as the skip causes bump to offset 1 (the mark). Note\n# that we have to have something complicated such as (B|Z) at the end because,\n# for Perl, a simple character somehow causes an unwanted optimization to mess\n# with the handling of backtracking verbs.\n\n/A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/x,mark\n    AAAC\n 0: AC\n    \n# Test skipping over a non-matching mark.\n\n/A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/x,mark\n    AAAC\n 0: AC\n    \n# Check shorthand for MARK.\n\n/A(*:A)A+(*SKIP:A)(B|Z) | AC/x,mark\n    AAAC\n 0: AC\n\n/(*:A)A+(*SKIP:A)(B|Z)/mark\n\\= Expect no match\n    AAAC\nNo match, mark = A\n\n# This should succeed, as a non-existent skip name disables the skip.\n\n/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark\n    AAAC\n 0: AC\n\n/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/x,mark\n    AAAC\n 0: AC\nMK: B\n\n# COMMIT at the start of a pattern should act like an anchor. Again, however,\n# we need the complication for Perl.\n\n/(*COMMIT)(A|P)(B|P)(C|P)/\n    ABCDEFG\n 0: ABC\n 1: A\n 2: B\n 3: C\n\\= Expect no match\n    DEFGABC  \nNo match\n\n# COMMIT inside an atomic group can't stop backtracking over the group.\n\n/(\\w+)(?>b(*COMMIT))\\w{2}/\n    abbb\n 0: abbb\n 1: a\n\n/(\\w+)b(*COMMIT)\\w{2}/\n\\= Expect no match\n    abbb\nNo match\n\n# Check opening parens in comment when seeking forward reference.\n\n/(?&t)(?#()(?(DEFINE)(?<t>a))/\n    bac\n 0: a\n\n# COMMIT should override THEN.\n\n/(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/\n\\= Expect no match\n  yes\nNo match\n\n/(?>(*COMMIT)(yes|no)(*THEN)(*F))?/\n\\= Expect no match\n  yes\nNo match\n\n/b?(*SKIP)c/\n    bc\n 0: bc\n    abc\n 0: bc\n   \n/(*SKIP)bc/\n\\= Expect no match\n    a\nNo match\n\n/(*SKIP)b/\n\\= Expect no match\n    a \nNo match\n\n/(?P<abn>(?P=abn)xxx|)+/\n    xxx\n 0: \n 1: \n\n/(?i:([^b]))(?1)/\n    aa\n 0: aa\n 1: a\n    aA     \n 0: aA\n 1: a\n\\= Expect no match\n    ab\nNo match\n    aB\nNo match\n    Ba\nNo match\n    ba\nNo match\n\n/^(?&t)*+(?(DEFINE)(?<t>a))\\w$/\n    aaaaaaX\n 0: aaaaaaX\n\\= Expect no match \n    aaaaaa \nNo match\n\n/^(?&t)*(?(DEFINE)(?<t>a))\\w$/\n    aaaaaaX\n 0: aaaaaaX\n    aaaaaa \n 0: aaaaaa\n\n/^(a)*+(\\w)/\n    aaaaX\n 0: aaaaX\n 1: a\n 2: X\n    YZ \n 0: Y\n 1: <unset>\n 2: Y\n\\= Expect no match \n    aaaa\nNo match\n\n/^(?:a)*+(\\w)/\n    aaaaX\n 0: aaaaX\n 1: X\n    YZ \n 0: Y\n 1: Y\n\\= Expect no match \n    aaaa\nNo match\n\n/^(a)++(\\w)/\n    aaaaX\n 0: aaaaX\n 1: a\n 2: X\n\\= Expect no match \n    aaaa\nNo match\n    YZ \nNo match\n\n/^(?:a)++(\\w)/\n    aaaaX\n 0: aaaaX\n 1: X\n\\= Expect no match \n    aaaa\nNo match\n    YZ \nNo match\n\n/^(a)?+(\\w)/\n    aaaaX\n 0: aa\n 1: a\n 2: a\n    YZ \n 0: Y\n 1: <unset>\n 2: Y\n\n/^(?:a)?+(\\w)/\n    aaaaX\n 0: aa\n 1: a\n    YZ \n 0: Y\n 1: Y\n\n/^(a){2,}+(\\w)/\n    aaaaX\n 0: aaaaX\n 1: a\n 2: X\n\\= Expect no match\n    aaa\nNo match\n    YZ \nNo match\n\n/^(?:a){2,}+(\\w)/\n    aaaaX\n 0: aaaaX\n 1: X\n\\= Expect no match\n    aaa\nNo match\n    YZ \nNo match\n\n/(a|)*(?1)b/\n    b\n 0: b\n 1: \n    ab\n 0: ab\n 1: \n    aab  \n 0: aab\n 1: \n\n/(a)++(?1)b/\n\\= Expect no match\n    ab \nNo match\n    aab\nNo match\n\n/(a)*+(?1)b/\n\\= Expect no match\n    ab\nNo match\n    aab  \nNo match\n\n/(?1)(?:(b)){0}/\n    b\n 0: b\n\n/(foo ( \\( ((?:(?> [^()]+ )|(?2))*) \\) ) )/x\n    foo(bar(baz)+baz(bop))\n 0: foo(bar(baz)+baz(bop))\n 1: foo(bar(baz)+baz(bop))\n 2: (bar(baz)+baz(bop))\n 3: bar(baz)+baz(bop)\n\n/(A (A|B(*ACCEPT)|C) D)(E)/x\n    AB\n 0: AB\n 1: AB\n 2: B\n\n/\\A.*?(a|bc)/\n    ba\n 0: ba\n 1: a\n\n/\\A.*?(?:a|bc)++/\n    ba\n 0: ba\n\n/\\A.*?(a|bc)++/\n    ba\n 0: ba\n 1: a\n\n/\\A.*?(?:a|bc|d)/\n    ba\n 0: ba\n\n/(?:(b))++/\n    beetle\n 0: b\n 1: b\n\n/(?(?=(a(*ACCEPT)z))a)/\n    a\n 0: a\n 1: a\n\n/^(a)(?1)+ab/\n    aaaab\n 0: aaaab\n 1: a\n    \n/^(a)(?1)++ab/\n\\= Expect no match\n    aaaab\nNo match\n\n/^(?=a(*:M))aZ/mark\n    aZbc\n 0: aZ\nMK: M\n\n/^(?!(*:M)b)aZ/mark\n    aZbc\n 0: aZ\n\n/(?(DEFINE)(a))?b(?1)/\n    backgammon\n 0: ba\n\n/^\\N+/\n    abc\\ndef\n 0: abc\n    \n/^\\N{1,}/\n    abc\\ndef \n 0: abc\n\n/(?(R)a+|(?R)b)/\n    aaaabcde\n 0: aaaab\n\n/(?(R)a+|((?R))b)/\n    aaaabcde\n 0: aaaab\n 1: aaaa\n\n/((?(R)a+|(?1)b))/\n    aaaabcde\n 0: aaaab\n 1: aaaab\n\n/((?(R1)a+|(?1)b))/\n    aaaabcde\n 0: aaaab\n 1: aaaab\n    \n/((?(R)a|(?1)))*/\n    aaa\n 0: aaa\n 1: a\n\n/((?(R)a|(?1)))+/\n    aaa \n 0: aaa\n 1: a\n\n/a(*:any \nname)/mark\n    abc\n 0: a\nMK: any \\x0aname\n    \n/(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/\n    a\n 0: a\n    ba\n 0: a\n    bba \n 0: a\n    \n# Checking revised (*THEN) handling.\n\n# Capture\n\n/^.*? (a(*THEN)b) c/x\n\\= Expect no match\n    aabc\nNo match\n\n/^.*? (a(*THEN)b|(*F)) c/x\n    aabc\n 0: aabc\n 1: ab\n\n/^.*? ( (a(*THEN)b) | (*F) ) c/x\n    aabc\n 0: aabc\n 1: ab\n 2: ab\n\n/^.*? ( (a(*THEN)b) ) c/x\n\\= Expect no match\n    aabc\nNo match\n\n# Non-capture\n\n/^.*? (?:a(*THEN)b) c/x\n\\= Expect no match\n    aabc\nNo match\n\n/^.*? (?:a(*THEN)b|(*F)) c/x\n    aabc\n 0: aabc\n\n/^.*? (?: (?:a(*THEN)b) | (*F) ) c/x\n    aabc\n 0: aabc\n\n/^.*? (?: (?:a(*THEN)b) ) c/x\n\\= Expect no match\n    aabc\nNo match\n\n# Atomic\n\n/^.*? (?>a(*THEN)b) c/x\n\\= Expect no match\n    aabc\nNo match\n\n/^.*? (?>a(*THEN)b|(*F)) c/x\n    aabc\n 0: aabc\n\n/^.*? (?> (?>a(*THEN)b) | (*F) ) c/x\n    aabc\n 0: aabc\n\n/^.*? (?> (?>a(*THEN)b) ) c/x\n\\= Expect no match\n    aabc\nNo match\n\n# Possessive capture\n\n/^.*? (a(*THEN)b)++ c/x\n\\= Expect no match\n    aabc\nNo match\n\n/^.*? (a(*THEN)b|(*F))++ c/x\n    aabc\n 0: aabc\n 1: ab\n\n/^.*? ( (a(*THEN)b)++ | (*F) )++ c/x\n    aabc\n 0: aabc\n 1: ab\n 2: ab\n\n/^.*? ( (a(*THEN)b)++ )++ c/x\n\\= Expect no match\n    aabc\nNo match\n\n# Possessive non-capture\n\n/^.*? (?:a(*THEN)b)++ c/x\n\\= Expect no match\n    aabc\nNo match\n\n/^.*? (?:a(*THEN)b|(*F))++ c/x\n    aabc\n 0: aabc\n\n/^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x\n    aabc\n 0: aabc\n\n/^.*? (?: (?:a(*THEN)b)++ )++ c/x\n\\= Expect no match\n    aabc\nNo match\n    \n# Condition assertion\n\n/^(?(?=a(*THEN)b)ab|ac)/\n    ac\n 0: ac\n \n# Condition\n\n/^.*?(?(?=a)a|b(*THEN)c)/\n\\= Expect no match\n    ba\nNo match\n\n/^.*?(?:(?(?=a)a|b(*THEN)c)|d)/\n    ba\n 0: ba\n\n/^.*?(?(?=a)a(*THEN)b|c)/\n\\= Expect no match\n    ac\nNo match\n\n# Assertion\n\n/^.*(?=a(*THEN)b)/\n    aabc\n 0: a\n\n# --------------------------\n\n/(?>a(*:m))/imsx,mark\n    a\n 0: a\nMK: m\n\n/(?>(a)(*:m))/imsx,mark\n    a\n 0: a\n 1: a\nMK: m\n\n/(?<=a(*ACCEPT)b)c/\n    xacd\n 0: c\n\n/(?<=(a(*ACCEPT)b))c/\n    xacd\n 0: c\n 1: a\n\n/(?<=(a(*COMMIT)b))c/\n    xabcd\n 0: c\n 1: ab\n\\= Expect no match \n    xacd\nNo match\n    \n/(?<!a(*FAIL)b)c/\n    xcd\n 0: c\n    acd \n 0: c\n\n/(?<=a(*:N)b)c/mark\n    xabcd\n 0: c\nMK: N\n    \n/(?<=a(*PRUNE)b)c/\n    xabcd \n 0: c\n\n/(?<=a(*SKIP)b)c/\n    xabcd \n 0: c\n\n/(?<=a(*THEN)b)c/\n    xabcd \n 0: c\n\n/(a)(?2){2}(.)/\n    abcd\n 0: abcd\n 1: a\n 2: d\n\n/(*MARK:A)(*PRUNE:B)(C|X)/mark\n    C\n 0: C\n 1: C\nMK: B\n\\= Expect no match\n    D \nNo match, mark = B\n\n/(*MARK:A)(*PRUNE:B)(C|X)/mark\n    C\n 0: C\n 1: C\nMK: B\n\\= Expect no match\n    D \nNo match, mark = B\n\n/(*MARK:A)(*THEN:B)(C|X)/mark\n    C\n 0: C\n 1: C\nMK: B\n\\= Expect no match\n    D \nNo match, mark = B\n\n/(*MARK:A)(*THEN:B)(C|X)/mark,no_start_optimize\n    C\n 0: C\n 1: C\nMK: B\n\\= Expect no match\n    D \nNo match, mark = B\n\n/(*MARK:A)(*THEN:B)(C|X)/mark\n    C\n 0: C\n 1: C\nMK: B\n\\= Expect no match\n    D \nNo match, mark = B\n\n/(*COMMIT)ABC/no_start_optimize\n    ABC\n 0: ABC\n\\= Expect no match\n    DEFABC\nNo match\n\n/(*COMMIT)ABC/\n    ABC\n 0: ABC\n    DEFABC\n 0: ABC\n\n# This should fail, as the skip causes a bump to offset 3 (the skip).\n\n/A(*MARK:A)A+(*SKIP)(B|Z) | AC/x,mark\n\\= Expect no match\n    AAAC\nNo match, mark = A\n\n# Same \n\n/A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/x,mark\n\\= Expect no match\n    AAAC\nNo match, mark = B\n\n/A(*:A)A+(*SKIP)(B|Z) | AC/x,mark\n\\= Expect no match\n    AAAC\nNo match, mark = A\n\n# This should fail, as a null name is the same as no name.\n\n/A(*MARK:A)A+(*SKIP:)(B|Z) | AC/x,mark\n\\= Expect no match\n    AAAC\nNo match, mark = A\n\n# A check on what happens after hitting a mark and them bumping along to\n# something that does not even start. Perl reports tags after the failures\n# here, though it does not when the individual letters are made into something\n# more complicated.\n\n/A(*:A)B|XX(*:B)Y/mark\n    AABC\n 0: AB\nMK: A\n    XXYZ \n 0: XXY\nMK: B\n\\= Expect no match\n    XAQQ  \nNo match, mark = A\n    XAQQXZZ  \nNo match, mark = A\n    AXQQQ \nNo match, mark = A\n    AXXQQQ \nNo match, mark = B\n    \n/^(A(*THEN:A)B|C(*THEN:B)D)/mark\n    AB\n 0: AB\n 1: AB\nMK: A\n    CD\n 0: CD\n 1: CD\nMK: B\n\\= Expect no match\n    AC\nNo match, mark = A\n    CB    \nNo match, mark = B\n    \n/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark\n    AB\n 0: AB\n 1: AB\nMK: A\n    CD\n 0: CD\n 1: CD\nMK: B\n\\= Expect no match\n    AC\nNo match, mark = A\n    CB    \nNo match, mark = B\n    \n# An empty name does not pass back an empty string. It is the same as if no\n# name were given.\n\n/^(A(*PRUNE:)B|C(*PRUNE:B)D)/mark\n    AB\n 0: AB\n 1: AB\n    CD \n 0: CD\n 1: CD\nMK: B\n\n# PRUNE goes to next bumpalong; COMMIT does not.\n    \n/A(*PRUNE:A)B/mark\n    ACAB\n 0: AB\nMK: A\n\n# Mark names can be duplicated.\n\n/A(*:A)B|X(*:A)Y/mark\n    AABC\n 0: AB\nMK: A\n    XXYZ \n 0: XY\nMK: A\n    \n/b(*:m)f|a(*:n)w/mark\n    aw \n 0: aw\nMK: n\n\\= Expect no match \n    abc\nNo match, mark = m\n\n/b(*:m)f|aw/mark\n    abaw\n 0: aw\n\\= Expect no match \n    abc\nNo match, mark = m\n    abax \nNo match, mark = m\n\n/A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/x,mark\n    AAAC\n 0: AAC\n\n/(?=a(*MARK:A)b)..x/mark\n    abxy\n 0: abx\nMK: A\n\\= Expect no match\n    abpq  \nNo match\n\n/(?=a(*MARK:A)b)..(*:Y)x/mark\n    abxy\n 0: abx\nMK: Y\n\\= Expect no match\n    abpq  \nNo match\n\n/(?=a(*PRUNE:A)b)..x/mark\n    abxy\n 0: abx\nMK: A\n\\= Expect no match\n    abpq  \nNo match\n\n/(?=a(*PRUNE:A)b)..(*:Y)x/mark\n    abxy\n 0: abx\nMK: Y\n\\= Expect no match\n    abpq  \nNo match\n\n/(?=a(*THEN:A)b)..x/mark\n    abxy\n 0: abx\nMK: A\n\\= Expect no match\n    abpq  \nNo match\n\n/(?=a(*THEN:A)b)..(*:Y)x/mark\n    abxy\n 0: abx\nMK: Y\n\\= Expect no match\n    abpq  \nNo match\n\n/(another)?(\\1?)test/\n    hello world test\n 0: test\n 1: <unset>\n 2: \n\n/(another)?(\\1+)test/\n\\= Expect no match\n    hello world test\nNo match\n\n/(a(*COMMIT)b){0}a(?1)|aac/\n    aac\n 0: aac\n\n/((?:a?)*)*c/\n    aac   \n 0: aac\n 1: \n\n/((?>a?)*)*c/\n    aac   \n 0: aac\n 1: \n\n/(?>.*?a)(?<=ba)/\n    aba\n 0: ba\n\n/(?:.*?a)(?<=ba)/\n    aba\n 0: aba\n\n/(?>.*?a)b/s\n    aab\n 0: ab\n\n/(?>.*?a)b/\n    aab\n 0: ab\n\n/(?>^a)b/s\n\\= Expect no match\n    aab\nNo match\n\n/(?>.*?)(?<=(abcd)|(wxyz))/\n    alphabetabcd\n 0: \n 1: abcd\n    endingwxyz \n 0: \n 1: <unset>\n 2: wxyz\n\n/(?>.*)(?<=(abcd)|(wxyz))/\n    alphabetabcd\n 0: alphabetabcd\n 1: abcd\n    endingwxyz \n 0: endingwxyz\n 1: <unset>\n 2: wxyz\n\n/(?>.*)foo/\n\\= Expect no match\n    abcdfooxyz\nNo match\n    \n/(?>.*?)foo/\n    abcdfooxyz\n 0: foo\n\n/(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/\n    ac\n 0: ac\n    \n/(?:(a(*SKIP)b)){0}(?:(?1)|ac)/\n    ac \n 0: ac\n\n/(?<=(*SKIP)ac)a/\n\\= Expect no match\n    aa\nNo match\n\n/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark\n    AAAC\n 0: AC\n\n/a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/mark\n    acacd\n 0: acd\nMK: n\n\n/A(*SKIP:m)x|A(*SKIP:n)x|AB/mark\n    AB\n 0: AB\n\n/((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/mark\n    acacd\n 0: ac\nMK: n\n\n# Tests that try to figure out how Perl works. My hypothesis is that the first\n# verb that is backtracked onto is the one that acts. This seems to be the case\n# almost all the time, but there is one exception that is perhaps a bug.\n\n# This matches \"aaaac\"; each PRUNE advances one character until the subject no\n# longer starts with 5 'a's.\n\n/aaaaa(*PRUNE)b|a+c/\n    aaaaaac\n 0: aaaac\n\n# Putting SKIP in front of PRUNE makes no difference, as it is never\n# backtracked onto, whether or not it has a label.\n\n/aaaaa(*SKIP)(*PRUNE)b|a+c/\n    aaaaaac\n 0: aaaac\n\n/aaaaa(*SKIP:N)(*PRUNE)b|a+c/\n    aaaaaac\n 0: aaaac\n\n/aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/\n    aaaaaac\n 0: aaaac\n\n# Putting THEN in front makes no difference.\n    \n/aaaaa(*THEN)(*PRUNE)b|a+c/\n    aaaaaac\n 0: aaaac\n \n# However, putting COMMIT in front of the prune changes it to \"no match\". I \n# think this is inconsistent and possibly a bug. For the moment, running this\n# test is moved out of the Perl-compatible file. \n\n/aaaaa(*COMMIT)(*PRUNE)b|a+c/\n    \n# OK, lets play the same game again using SKIP instead of PRUNE.\n\n# This matches \"ac\" because SKIP forces the next match to start on the\n# sixth \"a\". \n\n/aaaaa(*SKIP)b|a+c/\n    aaaaaac\n 0: ac\n \n# Putting PRUNE in front makes no difference. \n\n/aaaaa(*PRUNE)(*SKIP)b|a+c/\n    aaaaaac\n 0: ac\n\n# Putting THEN in front makes no difference. \n\n/aaaaa(*THEN)(*SKIP)b|a+c/\n    aaaaaac\n 0: ac\n\n# In this case, neither does COMMIT. This still matches \"ac\". \n\n/aaaaa(*COMMIT)(*SKIP)b|a+c/\n    aaaaaac\n 0: ac\n    \n# This gives \"no match\", as expected. \n\n/aaaaa(*COMMIT)b|a+c/\n\\= Expect no match\n    aaaaaac\nNo match\n\n# ---- Tests using THEN ----\n\n# This matches \"aaaaaac\", as expected. \n\n/aaaaa(*THEN)b|a+c/\n    aaaaaac\n 0: aaaaaac\n\n# Putting SKIP in front makes no difference. \n\n/aaaaa(*SKIP)(*THEN)b|a+c/\n    aaaaaac\n 0: aaaaaac\n    \n# Putting PRUNE in front makes no difference. \n\n/aaaaa(*PRUNE)(*THEN)b|a+c/\n    aaaaaac\n 0: aaaaaac\n    \n# Putting COMMIT in front makes no difference. \n\n/aaaaa(*COMMIT)(*THEN)b|a+c/\n    aaaaaac\n 0: aaaaaac\n    \n# End of \"priority\" tests  \n\n/aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/\n    aaaaaa\n 0: a\n\n/aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/\n    aaaaaa\n 0: a\n\n/aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/\n    aaaaaa\n 0: aaaa\n\n/aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/\n    aaaaaa\n 0: a\n\n/a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/\n    aaaac\n 0: aac\n\n/a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/\n    aaaac\n 0: ac\n\n/aaa(*PRUNE:A)a(*SKIP:A)b|a+c/\n    aaaac\n 0: aac\n\n/aaa(*MARK:A)a(*SKIP:A)b|a+c/\n    aaaac\n 0: ac\n\n/a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/mark\n    aaaaaac\n 0: ac\n\n/.?(a|b(*THEN)c)/\n    ba\n 0: ba\n 1: a\n\n/(a(*COMMIT)b)c|abd/\n    abc\n 0: abc\n 1: ab\n\\= Expect no match\n    abd\nNo match\n\n/(?=a(*COMMIT)b)abc|abd/\n    abc\n 0: abc\n    abd\n 0: abd\n\n/(?>a(*COMMIT)b)c|abd/\n    abc\n 0: abc\n    abd\n 0: abd\n\n/a(?=b(*COMMIT)c)[^d]|abd/\n    abc\n 0: ab\n\\= Expect no match\n    abd\nNo match\n\n/a(?=bc).|abd/\n    abd\n 0: abd\n    abc \n 0: ab\n    \n/a(?>b(*COMMIT)c)d|abd/\n\\= Expect no match\n    abceabd \nNo match\n\n/a(?>bc)d|abd/\n    abceabd \n 0: abd\n\n/(?>a(*COMMIT)b)c|abd/\n    abd\n 0: abd\n\n/(?>a(*COMMIT)c)d|abd/\n\\= Expect no match\n    abd\nNo match\n\n/((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/\n    ac \n 0: ac\n 1: <unset>\n 2: c\n    \n# These tests were formerly in test 2, but changes in PCRE and Perl have\n# made them compatible. \n    \n/^(a)?(?(1)a|b)+$/\n\\= Expect no match\n    a\nNo match\n\n/A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/x,mark\n\\= Expect no match\n    AAAC\nNo match, mark = A\n\n/^((abc|abcx)(*THEN)y|abcd)/\n    abcd\n 0: abcd\n 1: abcd\n\\= Expect no match \n    abcxy \nNo match\n    \n/^((yes|no)(*THEN)(*F))?/\n\\= Expect no match\n    yes\nNo match\n\n/(A (.*)   C? (*THEN)  | A D) (*FAIL)/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\nNo match\n\n/(A (.*)   C? (*THEN)  | A D) z/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\nNo match\n\n/(A (.*)   C? (*THEN)  | A D) \\s* (*FAIL)/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\nNo match\n\n/(A (.*)   C? (*THEN)  | A D) \\s* z/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\nNo match\n\n/(A (.*)   (?:C|) (*THEN)  | A D) (*FAIL)/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\nNo match\n\n/(A (.*)   (?:C|) (*THEN)  | A D) z/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\nNo match\n\n/(A (.*)   C{0,6} (*THEN)  | A D) (*FAIL)/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\nNo match\n\n/(A (.*)   C{0,6} (*THEN)  | A D) z/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\nNo match\n\n/(A (.*)   (CE){0,6} (*THEN)  | A D) (*FAIL)/x\n\\= Expect no match\n    AbcdCEBefgBhiBqz\nNo match\n\n/(A (.*)   (CE){0,6} (*THEN)  | A D) z/x\n\\= Expect no match\n    AbcdCEBefgBhiBqz\nNo match\n\n/(A (.*)   (CE*){0,6} (*THEN)  | A D) (*FAIL)/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\nNo match\n\n/(A (.*)   (CE*){0,6} (*THEN)  | A D) z/x\n\\= Expect no match\n    AbcdCBefgBhiBqz\nNo match\n\n/(?=a(*COMMIT)b|ac)ac|ac/\n\\= Expect no match\n    ac\nNo match\n\n/(?=a(*COMMIT)b|(ac)) ac | (a)c/x\n\\= Expect no match\n    ac\nNo match\n\n# ----\n\n/(?(?!b(*THEN)a)bn|bnn)/\n    bnn \n 0: bn\n\n/(?!b(*SKIP)a)bn|bnn/\n    bnn\n 0: bn\n    \n/(?(?!b(*SKIP)a)bn|bnn)/\n    bnn \n 0: bn\n\n/(?!b(*PRUNE)a)bn|bnn/\n    bnn\n 0: bn\n    \n/(?(?!b(*PRUNE)a)bn|bnn)/\n    bnn \n 0: bn\n   \n/(?!b(*COMMIT)a)bn|bnn/\n    bnn\n 0: bn\n    \n/(?(?!b(*COMMIT)a)bn|bnn)/\n   bnn \n 0: bn\n\n/(?=b(*SKIP)a)bn|bnn/\n\\= Expect no match\n    bnn\nNo match\n\n/(?=b(*THEN)a)bn|bnn/\n    bnn\n 0: bnn\n    \n/^(?!a(*SKIP)b)/\n    ac\n 0: \n\n/^(?!a(*SKIP)b)../\n    acd\n 0: ac\n\n/(?!a(*SKIP)b)../\n    acd\n 0: ac\n\n/^(?(?!a(*SKIP)b))/\n    ac\n 0: \n\n/^(?!a(*PRUNE)b)../\n    acd\n 0: ac\n\n/(?!a(*PRUNE)b)../\n    acd\n 0: ac\n\n/(?!a(*COMMIT)b)ac|cd/\n    ac\n 0: ac\n\n/\\A.*?(?:a|bc)/\n    ba\n 0: ba\n\n/^(A(*THEN)B|C(*THEN)D)/\n    CD           \n 0: CD\n 1: CD\n\n/(*:m(m)(?&y)(?(DEFINE)(?<y>b))/mark\n    abc\n 0: b\nMK: m(m\n\n/(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/mark\n    abc\n 0: b\nMK: m(m\n\n/(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/mark\n    abc\n 0: b\n\n/(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/mark\n    abc\n 0: b\nMK: m(m\n\n/^\\d*\\w{4}/\n    1234\n 0: 1234\n\\= Expect no match\n    123 \nNo match\n\n/^[^b]*\\w{4}/\n    aaaa\n 0: aaaa\n\\= Expect no match\n    aaa     \nNo match\n\n/^[^b]*\\w{4}/i\n    aaaa\n 0: aaaa\n\\= Expect no match\n    aaa     \nNo match\n\n/^a*\\w{4}/\n    aaaa\n 0: aaaa\n\\= Expect no match\n    aaa     \nNo match\n\n/^a*\\w{4}/i\n    aaaa\n 0: aaaa\n\\= Expect no match\n    aaa     \nNo match\n\n/(?:(?<n>foo)|(?<n>bar))\\k<n>/dupnames\n    foofoo\n 0: foofoo\n 1: foo\n    barbar\n 0: barbar\n 1: <unset>\n 2: bar\n\n/(?<n>A)(?:(?<n>foo)|(?<n>bar))\\k<n>/dupnames\n    AfooA\n 0: AfooA\n 1: A\n 2: foo\n    AbarA  \n 0: AbarA\n 1: A\n 2: <unset>\n 3: bar\n\\= Expect no match \n    Afoofoo\nNo match\n    Abarbar\nNo match\n\n/^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$/\n    1 IN SOA non-sp1 non-sp2(\n 0: 1 IN SOA non-sp1 non-sp2(\n 1: 1\n 2: non-sp1\n 3: non-sp2\n\n/^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/x,dupnames\n    Ax\n 0: Ax\n 1: A\n    BAxy \n 0: BAxy\n 1: <unset>\n 2: B\n 3: A\n\n#if !ebcdic\n\n/^A\\xBz/\n    A\\x{0B}z\n 0: A\\x0bz\n\n/^A\\xABz/\n    A\\x{AB}z\n 0: A\\xabz\n\n/^A\\xABCz/\n    A\\x{AB}Cz\n 0: A\\xabCz\n\n/^A\\o{123}B/\n    A\\123B\n 0: ASB\n\n#endif\n\n/ ^ a + + b $ /x\n    aaaab\n 0: aaaab\n    \n/ ^ a + #comment\n  + b $ /x\n    aaaab\n 0: aaaab\n    \n/ ^ a + #comment\n  #comment\n  + b $ /x\n    aaaab\n 0: aaaab\n    \n/ ^ (?> a + ) b $ /x\n    aaaab \n 0: aaaab\n\n/ ^ ( a + ) + + \\w $ /x\n    aaaab \n 0: aaaab\n 1: aaaa\n\n/(?:a\\Kb)*+/aftertext\n    ababc\n 0: b\n 0+ c\n\n/(?>a\\Kb)*/aftertext\n    ababc\n 0: b\n 0+ c\n\n/(?:a\\Kb)*/aftertext\n    ababc\n 0: b\n 0+ c\n\n/(a\\Kb)*+/aftertext\n    ababc\n 0: b\n 0+ c\n 1: ab\n\n/(a\\Kb)*/aftertext\n    ababc\n 0: b\n 0+ c\n 1: ab\n\n/(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/\n\\= Expect no match\n    acb\nNo match\n\n/\\A(?:[^\\\"]++|\\\"(?:[^\\\"]*+|\\\"\\\")*+\\\")++/\n    NON QUOTED \\\"QUOT\\\"\\\"ED\\\" AFTER \\\"NOT MATCHED\n 0: NON QUOTED \"QUOT\"\"ED\" AFTER \n\n/\\A(?:[^\\\"]++|\\\"(?:[^\\\"]++|\\\"\\\")*+\\\")++/\n    NON QUOTED \\\"QUOT\\\"\\\"ED\\\" AFTER \\\"NOT MATCHED\n 0: NON QUOTED \"QUOT\"\"ED\" AFTER \n\n/\\A(?:[^\\\"]++|\\\"(?:[^\\\"]++|\\\"\\\")++\\\")++/\n    NON QUOTED \\\"QUOT\\\"\\\"ED\\\" AFTER \\\"NOT MATCHED\n 0: NON QUOTED \"QUOT\"\"ED\" AFTER \n\n/\\A([^\\\"1]++|[\\\"2]([^\\\"3]*+|[\\\"4][\\\"5])*+[\\\"6])++/\n    NON QUOTED \\\"QUOT\\\"\\\"ED\\\" AFTER \\\"NOT MATCHED\n 0: NON QUOTED \"QUOT\"\"ED\" AFTER \n 1:  AFTER \n 2: \n\n/^\\w+(?>\\s*)(?<=\\w)/\n    test test\n 0: tes\n\n/(?P<same>a)(?P<same>b)/g,dupnames\n    abbaba\n 0: ab\n 1: a\n 2: b\n 0: ab\n 1: a\n 2: b\n\n/(?P<same>a)(?P<same>b)(?P=same)/g,dupnames\n    abbaba\n 0: aba\n 1: a\n 2: b\n\n/(?P=same)?(?P<same>a)(?P<same>b)/g,dupnames\n    abbaba\n 0: ab\n 1: a\n 2: b\n 0: ab\n 1: a\n 2: b\n\n/(?:(?P=same)?(?:(?P=same)(?P<same>a)(?P=same)|(?P=same)?(?P<same>b)(?P=same)){2}(?P=same)(?P<same>c)(?P=same)){2}(?P<same>z)?/g,dupnames\n\\= Expect no match\n    bbbaaaccccaaabbbcc\nNo match\n\n/(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/\n    acl\n 0: acl\n 1: a\n    bdl\n 0: bdl\n 1: <unset>\n 2: b\n    adl\n 0: dl\n    bcl    \n 0: l\n\n/\\sabc/\n    \\x{0b}abc\n 0: \\x0babc\n\n/[\\Qa]\\E]+/\n    aa]]\n 0: aa]]\n\n/[\\Q]a\\E]+/\n    aa]]\n 0: aa]]\n\n/A((((((((a))))))))\\8B/ \n    AaaB\n 0: AaaB\n 1: a\n 2: a\n 3: a\n 4: a\n 5: a\n 6: a\n 7: a\n 8: a\n\n/A(((((((((a)))))))))\\9B/ \n    AaaB\n 0: AaaB\n 1: a\n 2: a\n 3: a\n 4: a\n 5: a\n 6: a\n 7: a\n 8: a\n 9: a\n    \n/A[\\8\\9]B/\n    A8B\n 0: A8B\n    A9B  \n 0: A9B\n\n/(|ab)*?d/\n   abd\n 0: abd\n 1: ab\n   xyd \n 0: d\n\n/(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))/\n    1234abcd\n 0: \n 1: <unset>\n 2: <unset>\n 3: <unset>\n 4: <unset>\n 5: \n\n/(\\2|a)(\\1)/\n    aaa\n 0: aa\n 1: a\n 2: a\n\n/(\\2)(\\1)/\n\n/Z*(|d*){216}/\n\n/(?1)(?#?'){8}(a)/\n    baaaaaaaaac\n 0: aaaaaaaaa\n 1: a\n\n/((((((((((((x))))))))))))\\12/\n    xx\n 0: xx\n 1: x\n 2: x\n 3: x\n 4: x\n 5: x\n 6: x\n 7: x\n 8: x\n 9: x\n10: x\n11: x\n12: x\n\n/A[\\8]B[\\9]C/\n    A8B9C\n 0: A8B9C\n\n#if !ebcdic\n\n/(?1)()((((((\\1++))\\x85)+)|))/\n    \\x85\\x85\n 0: \\x85\\x85\n 1: \n 2: \\x85\\x85\n 3: \\x85\\x85\n 4: \\x85\\x85\n 5: \\x85\n 6: \n 7: \n\n#endif\n\n/(?|(\\k'Pm')|(?'Pm'))/\n    abcd\n 0: \n 1: \n\n/(?|(aaa)|(b))\\g{1}/\n    aaaaaa\n 0: aaaaaa\n 1: aaa\n    bb \n 0: bb\n 1: b\n\n/(?|(aaa)|(b))(?1)/\n    aaaaaa\n 0: aaaaaa\n 1: aaa\n    baaa \n 0: baaa\n 1: b\n\\= Expect no match \n    bb \nNo match\n\n/(?|(aaa)|(b))/\n    xaaa\n 0: aaa\n 1: aaa\n    xbc \n 0: b\n 1: b\n\n/(?|(?'a'aaa)|(?'a'b))\\k'a'/\n    aaaaaa\n 0: aaaaaa\n 1: aaa\n    bb \n 0: bb\n 1: b\n\n/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\\k'a'/dupnames\n    aaaccccaaa\n 0: aaaccccaaa\n 1: aaa\n 2: cccc\n    bccccb \n 0: bccccb\n 1: b\n 2: cccc\n\n# /x does not apply to MARK labels \n\n/x (*MARK:ab cd # comment\nef) x/x,mark\n    axxz\n 0: xx\nMK: ab cd # comment\\x0aef\n\n/(?<=a(B){0}c)X/\n    acX\n 0: X\n\n/(?<DEFINE>b)(?(DEFINE)(a+))(?&DEFINE)/          \n    bbbb \n 0: bb\n 1: b\n\\= Expect no match     \n    baaab\nNo match\n\n/(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\\s])/\n    \\   Fred:099\n 0: \n\n/(?=.*X)X$/ \n    \\  X\n 0: X\n\n/(?s)(?=.*?)b/\n    aabc\n 0: b\n\n/(Z)(a)\\2{1,2}?(?-i)\\1X/i\n    ZaAAZX\n 0: ZaAAZX\n 1: Z\n 2: a\n\n/(?'c')XX(?'YYYYYYYYYYYYYYYYYYYYYYYCl')/\n\n/a+(?:|b)a/\n    aaaa\n 0: aaaa\n\n/X?(R||){3335}/\n\n/(?1)(A(*COMMIT)|B)D/\n    ABD\n 0: ABD\n 1: B\n    XABD\n 0: ABD\n 1: B\n    BAD\n 0: BAD\n 1: A\n    ABXABD  \n 0: ABD\n 1: B\n\\= Expect no match \n    ABX \nNo match\n\n/(?(DEFINE)(?<m> 1? (?=(?<cond>2)?) 1 2 (?('cond')|3)))\n    \\A\n    ()\n    (?&m)\n    \\Z/x\n    123\n 0: 123\n 1: <unset>\n 2: <unset>\n 3: \n\n/^(?: \n(?: A| (1? (?=(?<cond>2)?) (1) 2 (?('cond')|3)) )\n(Z)\n)+$/x\n    AZ123Z\n 0: AZ123Z\n 1: 123\n 2: <unset>\n 3: 1\n 4: Z\n\\= Expect no match     \n    AZ12Z \nNo match\n    \n/^ (?(DEFINE) ( (?!(a)\\2b)..) )   ()(?1)  /x\n    acb\n 0: ac\n 1: <unset>\n 2: <unset>\n 3: \n\\= Expect no match     \n    aab\nNo match\n    \n/(?>ab|abab){1,5}?M/\n    abababababababababababM\n 0: abababababM\n\n/(?>ab|abab){2}?M/\n    abababM\n 0: ababM\n\n/((?(?=(a))a)+k)/\n    bbak\n 0: ak\n 1: ak\n 2: a\n\n/((?(?=(a))a|)+k)/\n    bbak\n 0: ak\n 1: ak\n 2: a\n\n/(?(?!(b))a|b)+k/\n    ababbalbbadabak\n 0: abak\n 1: b\n\n/(?!(b))c|b/\n    Ab\n 0: b\n    Ac \n 0: c\n\n/(?=(b))b|c/\n    Ab\n 0: b\n 1: b\n    Ac \n 0: c\n\n/^(.|(.)(?1)\\2)$/\n    a\n 0: a\n 1: a\n    aba\n 0: aba\n 1: aba\n 2: a\n    abcba\n 0: abcba\n 1: abcba\n 2: a\n    ababa\n 0: ababa\n 1: ababa\n 2: a\n    abcdcba\n 0: abcdcba\n 1: abcdcba\n 2: a\n\n/^((.)(?1)\\2|.?)$/\n    a\n 0: a\n 1: a\n    aba\n 0: aba\n 1: aba\n 2: a\n    abba\n 0: abba\n 1: abba\n 2: a\n    abcba\n 0: abcba\n 1: abcba\n 2: a\n    ababa\n 0: ababa\n 1: ababa\n 2: a\n    abccba\n 0: abccba\n 1: abccba\n 2: a\n    abcdcba\n 0: abcdcba\n 1: abcdcba\n 2: a\n    abcddcba\n 0: abcddcba\n 1: abcddcba\n 2: a\n\n/^(.)(\\1|a(?2))/\n    bab\n 0: bab\n 1: b\n 2: ab\n\n/^(.|(.)(?1)?\\2)$/\n    abcba\n 0: abcba\n 1: abcba\n 2: a\n    \n/^(?(?=(a))abc|def)/\n    abc\n 0: abc\n 1: a\n\n/^(?(?!(a))def|abc)/\n    abc\n 0: abc\n 1: a\n\n/^(?(?=(a)(*ACCEPT))abc|def)/\n    abc\n 0: abc\n 1: a\n\n/^(?(?!(a)(*ACCEPT))def|abc)/\n    abc\n 0: abc\n 1: a\n\n/^(?1)\\d{3}(a)/\n    a123a\n 0: a123a\n 1: a\n\n#if !ebcdic\n\n# This pattern uses a lot of named subpatterns in order to match email\n# addresses in various formats. It's a heavy test for named subpatterns. In the\n# <atext> group, slash is coded as \\x{2f} so that this pattern can also be\n# processed by perltest.sh, which does not cater for an escaped delimiter\n# within the pattern. $ within the pattern must also be escaped. All $ and @\n# characters in subject strings are escaped so that Perl doesn't interpret them\n# as variable insertions and \" characters must also be escaped for Perl.\n\n# This set of subpatterns is more or less a direct transliteration of the BNF\n# definitions in RFC2822, without any of the obsolete features. The addition of\n# a possessive + to the definition of <phrase> reduced the match limit in PCRE2\n# from over 5 million to just under 400, and eliminated a very noticeable delay\n# when this file was passed to perltest.sh.\n\n/(?ix)(?(DEFINE)\n(?<addr_spec>       (?&local_part) \\@ (?&domain) )\n(?<angle_addr>      (?&CFWS)?+ < (?&addr_spec) > (?&CFWS)?+ )\n(?<atext>           [a-z\\d!#\\$%&'*+-\\x{2f}=?^_`{|}~] )\n(?<atom>            (?&CFWS)?+ (?&atext)+ (?&CFWS)?+ )\n(?<ccontent>        (?&ctext) | (?&quoted_pair) | (?&comment) )\n(?<ctext>           [^\\x{9}\\x{10}\\x{13}\\x{7f}-\\x{ff}\\ ()\\\\] )\n(?<comment>         \\( (?: (?&FWS)?+ (?&ccontent) )*+ (?&FWS)?+ \\) )\n(?<CFWS>            (?: (?&FWS)?+ (?&comment) )* (?# NOT possessive)\n                    (?: (?&FWS)?+ (?&comment) | (?&FWS) ) )\n(?<dcontent>        (?&dtext) | (?&quoted_pair) )\n(?<display_name>    (?&phrase) )\n(?<domain>          (?&dot_atom) | (?&domain_literal) )\n(?<domain_literal>  (?&CFWS)?+ \\[ (?: (?&FWS)?+ (?&dcontent) )* (?&FWS)?+ \\]\n                    (?&CFWS)?+ )\n(?<dot_atom>        (?&CFWS)?+ (?&dot_atom_text) (?&CFWS)?+ )\n(?<dot_atom_text>   (?&atext)++ (?: \\. (?&atext)++)*+ )\n(?<dtext>           [^\\x{9}\\x{10}\\x{13}\\x{7f}-\\x{ff}\\ \\[\\]\\\\] )\n(?<FWS>             (?: [\\t\\ ]*+ \\n)?+ [\\t\\ ]++ )\n(?<local_part>      (?&dot_atom) | (?&quoted_string)  )\n(?<mailbox>         (?&name_addr) | (?&addr_spec) )\n(?<name_addr>       (?&display_name)? (?&angle_addr) )\n(?<phrase>          (?&word)++ )\n(?<qcontent>        (?&qtext) | (?&quoted_pair) )\n(?<quoted_pair>     \" (?&text) )\n(?<quoted_string>   (?&CFWS)?+ \" (?: (?&FWS)?+ (?&qcontent))* (?&FWS)?+ \"\n                    (?&CFWS)?+ )\n(?<qtext>           [^\\x{9}\\x{10}\\x{13}\\x{7f}-\\x{ff}\\ \"\\\\] )\n(?<text>            [^\\r\\n] )\n(?<word>            (?&atom) | (?&quoted_string) )\n) # End DEFINE\n^(?&mailbox)$/\n    Alan Other <user\\@dom.ain>\n 0: Alan Other <user@dom.ain>\n    <user\\@dom.ain>\n 0: <user@dom.ain>\n    user\\@dom.ain\n 0: user@dom.ain\n    user\\@[] \n 0: user@[]\n    user\\@[domain literal] \n 0: user@[domain literal]\n    user\\@[domain literal with \\\"[square brackets\\\"] inside] \n 0: user@[domain literal with \"[square brackets\"] inside]\n    \\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)\n 0: \"A. Other\" <user.1234@dom.ain> (a comment)\n    A. Other <user.1234\\@dom.ain> (a comment)\n 0: A. Other <user.1234@dom.ain> (a comment)\n    \\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay\n 0: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay\n\\= Expect no match\n    A missing angle <user\\@some.where\nNo match\n    The quick brown fox\nNo match\n\n#endif\n    \n# -------------------------------------------------------------------------- \n\n#if !ebcdic\n\n# This pattern uses named groups to match default PCRE2 patterns. It's another\n# heavy test for named subpatterns. Once again, code slash as \\x{2f} and escape \n# $ even in classes so that this works with pcre2test.\n\n/(?sx)(?(DEFINE)\n\n(?<assertion>         (?&simple_assertion) | (?&lookaround) )\n\n(?<atomic_group>      \\( \\? > (?&regex) \\) )\n\n(?<back_reference>    \\\\ \\d+ |\n                      \\\\g (?: [+-]?\\d+ | \\{ (?: [+-]?\\d+ | (?&groupname) ) \\} ) |\n                      \\\\k <(?&groupname)> |\n                      \\\\k '(?&groupname)' |\n                      \\\\k \\{ (?&groupname) \\} |\n                      \\( \\? P= (?&groupname) \\) )\n\n(?<branch>            (?:(?&assertion) |\n                         (?&callout) |\n                         (?&comment) |\n                         (?&option_setting) |\n                         (?&qualified_item) |\n                         (?&quoted_string) |\n                         (?&quoted_string_empty) | \n                         (?&special_escape) |\n                         (?&verb)\n                      )* )\n\n(?<callout>           \\(\\?C (?: \\d+ | \n                      (?: (?<D>[\"'`^%\\#\\$]) \n                        (?: \\k'D'\\k'D' | (?!\\k'D') . )* \\k'D' |\n                      \\{ (?: \\}\\} | [^}]*+ )* \\} ) \n                      )? \\) )\n\n(?<capturing_group>   \\( (?: \\? P? < (?&groupname) > | \\? ' (?&groupname) ' )?\n                      (?&regex) \\) )\n\n(?<character_class>   \\[ \\^?+ (?: \\] (?&class_item)* | (?&class_item)+ ) \\] )\n\n(?<character_type>    (?! \\\\N\\{\\w+\\} ) \\\\ [dDsSwWhHvVRN] )\n\n(?<class_item>        (?: \\[ : (?:\n                      alnum|alpha|ascii|blank|cntrl|digit|graph|lower|print|\n                      punct|space|upper|word|xdigit\n                      ) : \\] |\n                      (?&quoted_string) |  \n                      (?&quoted_string_empty) | \n                      (?&escaped_character) | \n                      (?&character_type) | \n                      [^]] ) )\n\n(?<comment>           \\(\\?\\# [^)]* \\) | (?&quoted_string_empty) | \\\\E )\n\n(?<condition>         (?: \\( [+-]? \\d+ \\) |\n                          \\( < (?&groupname) > \\) |\n                          \\( ' (?&groupname) ' \\) |\n                          \\( R \\d* \\) |\n                          \\( R & (?&groupname) \\) |\n                          \\( (?&groupname) \\) | \n                          \\( DEFINE \\) |\n                          \\( VERSION >?=\\d+(?:\\.\\d\\d?)? \\) |\n                          (?&callout)?+ (?&comment)* (?&lookaround) ) )\n\n(?<conditional_group> \\(\\? (?&condition) (?&branch) (?: \\| (?&branch) )? \\) )\n\n(?<delimited_regex>   (?<delimiter> [-\\x{2f}!\"'`=_:;,%&@~]) (?&regex) \n                      \\k'delimiter' .* )\n\n(?<escaped_character> \\\\ (?: 0[0-7]{1,2} | [0-7]{1,3} | o\\{ [0-7]+ \\} |\n                      x \\{ (*COMMIT) [[:xdigit:]]* \\} | x [[:xdigit:]]{0,2} | \n                      [aefnrt] | c[[:print:]] |\n                      [^[:alnum:]] ) )\n\n(?<group>             (?&capturing_group) | (?&non_capturing_group) |\n                      (?&resetting_group) | (?&atomic_group) |\n                      (?&conditional_group) )\n\n(?<groupname>         [a-zA-Z_]\\w* )\n\n(?<literal_character> (?! (?&range_qualifier) ) [^[()|*+?.\\$\\\\] )\n\n(?<lookaround>        \\(\\? (?: = | ! | <= | <! ) (?&regex) \\) )\n\n(?<non_capturing_group> \\(\\? [iJmnsUx-]* : (?&regex) \\) )\n\n(?<option_setting>    \\(\\? [iJmnsUx-]* \\) )\n\n(?<qualified_item>    (?:\\. |\n                         (?&lookaround) |\n                         (?&back_reference) |\n                         (?&character_class) |\n                         (?&character_type) |\n                         (?&escaped_character) |\n                         (?&group) |\n                         (?&subroutine_call) |\n                         (?&literal_character) |\n                         (?&quoted_string) \n                      ) (?&comment)? (?&qualifier)? )\n\n(?<qualifier>         (?: [?*+] | (?&range_qualifier) ) [+?]? )\n\n(?<quoted_string>     (?: \\\\Q (?: (?!\\\\E | \\k'delimiter') . )++ (?: \\\\E | ) ) ) \n                      \n(?<quoted_string_empty>  \\\\Q\\\\E ) \n\n(?<range_qualifier>   \\{ (?: \\d+ (?: , \\d* )? | , \\d+ ) \\} )\n\n(?<regex>             (?&start_item)* (?&branch) (?: \\| (?&branch) )* )\n\n(?<resetting_group>   \\( \\? \\| (?&regex) \\) )\n\n(?<simple_assertion>  \\^ | \\$ | \\\\A | \\\\b | \\\\B | \\\\G | \\\\z | \\\\Z )\n\n(?<special_escape>    \\\\K )\n\n(?<start_item>        \\( \\* (?:\n                      ANY |\n                      ANYCRLF |\n                      BSR_ANYCRLF |\n                      BSR_UNICODE |\n                      CR |\n                      CRLF |\n                      LF |\n                      LIMIT_MATCH=\\d+ |\n                      LIMIT_DEPTH=\\d+ |\n                      LIMIT_HEAP=\\d+ | \n                      NOTEMPTY |\n                      NOTEMPTY_ATSTART |\n                      NO_AUTO_POSSESS |\n                      NO_DOTSTAR_ANCHOR |\n                      NO_JIT |\n                      NO_START_OPT |\n                      NUL |\n                      UTF |\n                      UCP ) \\) )\n\n(?<subroutine_call>   (?: \\(\\?R\\) | \\(\\?[+-]?\\d+\\) |\n                      \\(\\? (?: & | P> ) (?&groupname) \\) |\n                      \\\\g < (?&groupname) > |\n                      \\\\g ' (?&groupname) ' |\n                      \\\\g < [+-]? \\d+ > |\n                      \\\\g ' [+-]? \\d+ ) )\n\n(?<verb>              \\(\\* (?: ACCEPT | FAIL | F | COMMIT |\n                      (?:MARK)?:(?&verbname) |\n                      (?:PRUNE|SKIP|THEN) (?: : (?&verbname)? )? ) \\) )\n\n(?<verbname>          [^)]+ )\n\n) # End DEFINE\n# Kick it all off...\n^(?&delimited_regex)$/subject_literal,jitstack=256\n    /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$/\n 0: /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$/\n    /(cat(a(ract|tonic)|erpillar)) \\1()2(3)/\n 0: /(cat(a(ract|tonic)|erpillar)) \\1()2(3)/\n    /^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/\n 0: /^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/\n    /^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d/\n 0: /^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d/\n    /<tr([\\w\\W\\s\\d][^<>]{0,})><TD([\\w\\W\\s\\d][^<>]{0,})>([\\d]{0,}\\.)(.*)((<BR>([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>/is\n 0: /<tr([\\w\\W\\s\\d][^<>]{0,})><TD([\\w\\W\\s\\d][^<>]{0,})>([\\d]{0,}\\.)(.*)((<BR>([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>/is\n    /^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /\n 0: /^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /\n    /(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}/\n 0: /(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}/\n    /\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))/\n 0: /\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))/\n    /^(\\w++|\\s++)*$/\n 0: /^(\\w++|\\s++)*$/\n    /a+b?(*THEN)c+(*FAIL)/\n 0: /a+b?(*THEN)c+(*FAIL)/\n    /(A (A|B(*ACCEPT)|C) D)(E)/x\n 0: /(A (A|B(*ACCEPT)|C) D)(E)/x\n    /^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$/i\n 0: /^\\W*+(?:((.)\\W*+(?1)\\W*+\\2|)|((.)\\W*+(?3)\\W*+\\4|\\W*+.\\W*+))\\W*+$/i\n    /A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/B\n 0: /A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/B\n    /(?C`a``b`)(?C'a''b')(?C\"a\"\"b\")(?C^a^^b^)(?C%a%%b%)(?C#a##b#)(?C$a$$b$)(?C{a}}b})/B,callout_info\n 0: /(?C`a``b`)(?C'a''b')(?C\"a\"\"b\")(?C^a^^b^)(?C%a%%b%)(?C#a##b#)(?C$a$$b$)(?C{a}}b})/B,callout_info\n    /(?sx)(?(DEFINE)(?<assertion> (?&simple_assertion) | (?&lookaround) )(?<atomic_group> \\( \\? > (?&regex) \\) )(?<back_reference> \\\\ \\d+ | \\\\g (?: [+-]?\\d+ | \\{ (?: [+-]?\\d+ | (?&groupname) ) \\} ) | \\\\k <(?&groupname)> | \\\\k '(?&groupname)' | \\\\k \\{ (?&groupname) \\} | \\( \\? P= (?&groupname) \\) )(?<branch> (?:(?&assertion) | (?&callout) | (?&comment) | (?&option_setting) | (?&qualified_item) | (?&quoted_string) | (?&quoted_string_empty) | (?&special_escape) | (?&verb) )* )(?<callout> \\(\\?C (?: \\d+ | (?: (?<D>[\"'`^%\\#\\$]) (?: \\k'D'\\k'D' | (?!\\k'D') . )* \\k'D' | \\{ (?: \\}\\} | [^}]*+ )* \\} ) )? \\) )(?<capturing_group> \\( (?: \\? P? < (?&groupname) > | \\? ' (?&groupname) ' )? (?&regex) \\) )(?<character_class> \\[ \\^?+ (?: \\] (?&class_item)* | (?&class_item)+ ) \\] )(?<character_type> (?! \\\\N\\{\\w+\\} ) \\\\ [dDsSwWhHvVRN] )(?<class_item> (?: \\[ : (?: alnum|alpha|ascii|blank|cntrl|digit|graph|lower|print| punct|space|upper|word|xdigit ) : \\] | (?&quoted_string) | (?&quoted_string_empty) | (?&escaped_character) | (?&character_type) | [^]] ) )(?<comment> \\(\\?\\# [^)]* \\) | (?&quoted_string_empty) | \\\\E )(?<condition> (?: \\( [+-]? \\d+ \\) | \\( < (?&groupname) > \\) | \\( ' (?&groupname) ' \\) | \\( R \\d* \\) | \\( R & (?&groupname) \\) | \\( (?&groupname) \\) | \\( DEFINE \\) | \\( VERSION >?=\\d+(?:\\.\\d\\d?)? \\) | (?&callout)?+ (?&comment)* (?&lookaround) ) )(?<conditional_group> \\(\\? (?&condition) (?&branch) (?: \\| (?&branch) )? \\) )(?<delimited_regex> (?<delimiter> [-\\x{2f}!\"'`=_:;,%&@~]) (?&regex) \\k'delimiter' .* )(?<escaped_character> \\\\ (?: 0[0-7]{1,2} | [0-7]{1,3} | o\\{ [0-7]+ \\} | x \\{ (*COMMIT) [[:xdigit:]]* \\} | x [[:xdigit:]]{0,2} | [aefnrt] | c[[:print:]] | [^[:alnum:]] ) )(?<group> (?&capturing_group) | (?&non_capturing_group) | (?&resetting_group) | (?&atomic_group) | (?&conditional_group) )(?<groupname> [a-zA-Z_]\\w* )(?<literal_character> (?! (?&range_qualifier) ) [^[()|*+?.\\$\\\\] )(?<lookaround> \\(\\? (?: = | ! | <= | <! ) (?&regex) \\) )(?<non_capturing_group> \\(\\? [iJmnsUx-]* : (?&regex) \\) )(?<option_setting> \\(\\? [iJmnsUx-]* \\) )(?<qualified_item> (?:\\. | (?&lookaround) | (?&back_reference) | (?&character_class) | (?&character_type) | (?&escaped_character) | (?&group) | (?&subroutine_call) | (?&literal_character) | (?&quoted_string) ) (?&comment)? (?&qualifier)? )(?<qualifier> (?: [?*+] | (?&range_qualifier) ) [+?]? )(?<quoted_string> (?: \\\\Q (?: (?!\\\\E | \\k'delimiter') . )++ (?: \\\\E | ) ) ) (?<quoted_string_empty> \\\\Q\\\\E ) (?<range_qualifier> \\{ (?: \\d+ (?: , \\d* )? | , \\d+ ) \\} )(?<regex> (?&start_item)* (?&branch) (?: \\| (?&branch) )* )(?<resetting_group> \\( \\? \\| (?&regex) \\) )(?<simple_assertion> \\^ | \\$ | \\\\A | \\\\b | \\\\B | \\\\G | \\\\z | \\\\Z )(?<special_escape> \\\\K )(?<start_item> \\( \\* (?: ANY | ANYCRLF | BSR_ANYCRLF | BSR_UNICODE | CR | CRLF | LF | LIMIT_MATCH=\\d+ | LIMIT_DEPTH=\\d+ | LIMIT_HEAP=\\d+ | NOTEMPTY | NOTEMPTY_ATSTART | NO_AUTO_POSSESS | NO_DOTSTAR_ANCHOR | NO_JIT | NO_START_OPT | NUL | UTF | UCP ) \\) )(?<subroutine_call> (?: \\(\\?R\\) | \\(\\?[+-]?\\d+\\) | \\(\\? (?: & | P> ) (?&groupname) \\) | \\\\g < (?&groupname) > | \\\\g ' (?&groupname) ' | \\\\g < [+-]? \\d+ > | \\\\g ' [+-]? \\d+ ) )(?<verb> \\(\\* (?: ACCEPT | FAIL | F | COMMIT | (?:MARK)?:(?&verbname) | (?:PRUNE|SKIP|THEN) (?: : (?&verbname)? )? ) \\) )(?<verbname> [^)]+ ))^(?&delimited_regex)$/\n 0: /(?sx)(?(DEFINE)(?<assertion> (?&simple_assertion) | (?&lookaround) )(?<atomic_group> \\( \\? > (?&regex) \\) )(?<back_reference> \\\\ \\d+ | \\\\g (?: [+-]?\\d+ | \\{ (?: [+-]?\\d+ | (?&groupname) ) \\} ) | \\\\k <(?&groupname)> | \\\\k '(?&groupname)' | \\\\k \\{ (?&groupname) \\} | \\( \\? P= (?&groupname) \\) )(?<branch> (?:(?&assertion) | (?&callout) | (?&comment) | (?&option_setting) | (?&qualified_item) | (?&quoted_string) | (?&quoted_string_empty) | (?&special_escape) | (?&verb) )* )(?<callout> \\(\\?C (?: \\d+ | (?: (?<D>[\"'`^%\\#\\$]) (?: \\k'D'\\k'D' | (?!\\k'D') . )* \\k'D' | \\{ (?: \\}\\} | [^}]*+ )* \\} ) )? \\) )(?<capturing_group> \\( (?: \\? P? < (?&groupname) > | \\? ' (?&groupname) ' )? (?&regex) \\) )(?<character_class> \\[ \\^?+ (?: \\] (?&class_item)* | (?&class_item)+ ) \\] )(?<character_type> (?! \\\\N\\{\\w+\\} ) \\\\ [dDsSwWhHvVRN] )(?<class_item> (?: \\[ : (?: alnum|alpha|ascii|blank|cntrl|digit|graph|lower|print| punct|space|upper|word|xdigit ) : \\] | (?&quoted_string) | (?&quoted_string_empty) | (?&escaped_character) | (?&character_type) | [^]] ) )(?<comment> \\(\\?\\# [^)]* \\) | (?&quoted_string_empty) | \\\\E )(?<condition> (?: \\( [+-]? \\d+ \\) | \\( < (?&groupname) > \\) | \\( ' (?&groupname) ' \\) | \\( R \\d* \\) | \\( R & (?&groupname) \\) | \\( (?&groupname) \\) | \\( DEFINE \\) | \\( VERSION >?=\\d+(?:\\.\\d\\d?)? \\) | (?&callout)?+ (?&comment)* (?&lookaround) ) )(?<conditional_group> \\(\\? (?&condition) (?&branch) (?: \\| (?&branch) )? \\) )(?<delimited_regex> (?<delimiter> [-\\x{2f}!\"'`=_:;,%&@~]) (?&regex) \\k'delimiter' .* )(?<escaped_character> \\\\ (?: 0[0-7]{1,2} | [0-7]{1,3} | o\\{ [0-7]+ \\} | x \\{ (*COMMIT) [[:xdigit:]]* \\} | x [[:xdigit:]]{0,2} | [aefnrt] | c[[:print:]] | [^[:alnum:]] ) )(?<group> (?&capturing_group) | (?&non_capturing_group) | (?&resetting_group) | (?&atomic_group) | (?&conditional_group) )(?<groupname> [a-zA-Z_]\\w* )(?<literal_character> (?! (?&range_qualifier) ) [^[()|*+?.\\$\\\\] )(?<lookaround> \\(\\? (?: = | ! | <= | <! ) (?&regex) \\) )(?<non_capturing_group> \\(\\? [iJmnsUx-]* : (?&regex) \\) )(?<option_setting> \\(\\? [iJmnsUx-]* \\) )(?<qualified_item> (?:\\. | (?&lookaround) | (?&back_reference) | (?&character_class) | (?&character_type) | (?&escaped_character) | (?&group) | (?&subroutine_call) | (?&literal_character) | (?&quoted_string) ) (?&comment)? (?&qualifier)? )(?<qualifier> (?: [?*+] | (?&range_qualifier) ) [+?]? )(?<quoted_string> (?: \\\\Q (?: (?!\\\\E | \\k'delimiter') . )++ (?: \\\\E | ) ) ) (?<quoted_string_empty> \\\\Q\\\\E ) (?<range_qualifier> \\{ (?: \\d+ (?: , \\d* )? | , \\d+ ) \\} )(?<regex> (?&start_item)* (?&branch) (?: \\| (?&branch) )* )(?<resetting_group> \\( \\? \\| (?&regex) \\) )(?<simple_assertion> \\^ | \\$ | \\\\A | \\\\b | \\\\B | \\\\G | \\\\z | \\\\Z )(?<special_escape> \\\\K )(?<start_item> \\( \\* (?: ANY | ANYCRLF | BSR_ANYCRLF | BSR_UNICODE | CR | CRLF | LF | LIMIT_MATCH=\\d+ | LIMIT_DEPTH=\\d+ | LIMIT_HEAP=\\d+ | NOTEMPTY | NOTEMPTY_ATSTART | NO_AUTO_POSSESS | NO_DOTSTAR_ANCHOR | NO_JIT | NO_START_OPT | NUL | UTF | UCP ) \\) )(?<subroutine_call> (?: \\(\\?R\\) | \\(\\?[+-]?\\d+\\) | \\(\\? (?: & | P> ) (?&groupname) \\) | \\\\g < (?&groupname) > | \\\\g ' (?&groupname) ' | \\\\g < [+-]? \\d+ > | \\\\g ' [+-]? \\d+ ) )(?<verb> \\(\\* (?: ACCEPT | FAIL | F | COMMIT | (?:MARK)?:(?&verbname) | (?:PRUNE|SKIP|THEN) (?: : (?&verbname)? )? ) \\) )(?<verbname> [^)]+ ))^(?&delimited_regex)$/\n\\= Expect no match\n    /((?(?C'')\\QX\\E(?!((?(?C'')(?!X=X));=)r*X=X));=)/\nNo match\n    /(?:(?(2y)a|b)(X))+/\nNo match\n    /a(*MARK)b/\nNo match\n    /a(*CR)b/\nNo match\n    /(?P<abn>(?P=abn)(?<badstufxxx)/\nNo match\n\n#endif\n\n# -------------------------------------------------------------------------- \n\n/<(?x:[a b])>/xx\n    < >\n 0: < >\n\n/<(?:[a b])>/xx\n    < >\nNo match\n\n/<(?xxx:[a b])>/\n    < >\nNo match\n    \n/<(?-x:[a b])>/xx\n    < >\n 0: < >\n\n/[[:digit:]-]+/\n    12-24\n 0: 12-24\n\n/((?<=((*ACCEPT)) )\\1?\\b) /\n\\= Expect no match     \n    ((?<=((*ACCEPT)) )\\\\1?\\\\b)\\x20\nNo match\n\n/((?<=((*ACCEPT))X)\\1?Y)\\1/\n    XYYZ\n 0: YY\n 1: Y\n 2: \n\n/((?<=((*ACCEPT))X)\\1?Y(*ACCEPT))\\1/\n    XYYZ\n 0: Y\n 1: Y\n 2: \n\n/(?(DEFINE)(?<optional_a>a?)X)^(?&optional_a)a$/\n    aa\n 0: aa\n    a\n 0: a\n\n/^(a?)b(?1)a/\n    abaa\n 0: abaa\n 1: a\n    aba \n 0: aba\n 1: a\n    baa\n 0: baa\n 1: \n    ba  \n 0: ba\n 1: \n\n/^(a?)+b(?1)a/\n    abaa\n 0: abaa\n 1: \n    aba \n 0: aba\n 1: \n    baa\n 0: baa\n 1: \n    ba  \n 0: ba\n 1: \n\n/^(a?)++b(?1)a/\n    abaa\n 0: abaa\n 1: \n    aba \n 0: aba\n 1: \n    baa\n 0: baa\n 1: \n    ba  \n 0: ba\n 1: \n\n/^(a?)+b/\n    b\n 0: b\n 1: \n    ab\n 0: ab\n 1: \n    aaab \n 0: aaab\n 1: \n\n/(?=a+)a(a+)++b/\n    aab\n 0: aab\n 1: a\n\n/(?<=\\G.)/g,aftertext\n    abc\n 0: \n 0+ bc\n 0: \n 0+ c\n 0: \n 0+ \n\n/(?<=(?=.)?)/\n\n/(?<=(?=.)?+)/\n\n/(?<=(?=.)*)/\n\n/(?<=(?=.){4,5})/\n\n/(?<=(?=.){4,5}x)/\n\n/a(?=.(*:X))(*SKIP:X)(*F)|(.)/\n    abc\n 0: a\n 1: a\n\n/a(?>(*:X))(*SKIP:X)(*F)|(.)/\n    abc\n 0: a\n 1: a\n\n/a(?:(*:X))(*SKIP:X)(*F)|(.)/\n    abc\n 0: b\n 1: b\n\n#pattern no_start_optimize\n\n/(?>a(*:1))(?>b(*:1))(*SKIP:1)x|.*/\n    abc\n 0: abc\n\n/(?>a(*:1))(?>b)(*SKIP:1)x|.*/\n    abc\n 0: abc\n\n#subject mark\n\n/a(*ACCEPT:X)b/\n    abc\n 0: a\nMK: X\n    \n/(?=a(*ACCEPT:QQ)bc)axyz/\n    axyz\n 0: axyz\nMK: QQ\n\n/(?(DEFINE)(a(*ACCEPT:X)))(?1)b/\n    abc\n 0: ab\nMK: X\n    \n/a(*F:X)b/\n    abc\nNo match, mark = X\n    \n/(?(DEFINE)(a(*F:X)))(?1)b/\n    abc\nNo match, mark = X\n\n/a(*COMMIT:X)b/\n    abc\n 0: ab\nMK: X\n    \n/(?(DEFINE)(a(*COMMIT:X)))(?1)b/\n    abc\n 0: ab\nMK: X\n    \n/a+(*:Z)b(*COMMIT:X)(*SKIP:Z)c|.*/\n    aaaabd\n 0: bd\n\n/a+(*:Z)b(*COMMIT:X)(*SKIP:X)c|.*/\n    aaaabd\nNo match, mark = X\n\n/a(*COMMIT:X)b/\n    axabc\nNo match, mark = X\n\n#pattern -no_start_optimize\n#subject -mark \n\n/(.COMMIT)(*COMMIT::::::::::interal error:::)/\n\n/(*COMMIT:)/\n\n/(*COMMIT:]w)/\n\n/(?i)A(?^)B(?^x:C D)(?^i)e f/\n    aBCDE F\n 0: aBCDE F\n\\= Expect no match\n    aBCDEF\nNo match\n    AbCDe f\nNo match\n\n/(*pla:foo).{6}/\n    abcfoobarxyz\n 0: foobar\n\\= Expect no match\n    abcfooba\nNo match\n\n/(*positive_lookahead:foo).{6}/\n    abcfoobarxyz\n 0: foobar\n    \n/(?(*pla:foo).{6}|a..)/\n    foobarbaz\n 0: foobar\n    abcfoobar       \n 0: abc\n\n/(?(*positive_lookahead:foo).{6}|a..)/\n    foobarbaz\n 0: foobar\n    abcfoobar       \n 0: abc\n    \n/(*plb:foo)bar/\n    abcfoobar\n 0: bar\n\\= Expect no match\n    abcbarfoo     \nNo match\n\n/(*positive_lookbehind:foo)bar/\n    abcfoobar\n 0: bar\n\\= Expect no match\n    abcbarfoo\nNo match\n    \n/(?(*plb:foo)bar|baz)/\n    abcfoobar\n 0: bar\n    bazfoobar\n 0: baz\n    abcbazfoobar\n 0: baz\n    foobazfoobar    \n 0: bar\n \n/(?(*positive_lookbehind:foo)bar|baz)/\n    abcfoobar\n 0: bar\n    bazfoobar\n 0: baz\n    abcbazfoobar\n 0: baz\n    foobazfoobar    \n 0: bar\n \n/(*nlb:foo)bar/\n    abcbarfoo     \n 0: bar\n\\= Expect no match\n    abcfoobar\nNo match\n\n/(*negative_lookbehind:foo)bar/\n    abcbarfoo     \n 0: bar\n\\= Expect no match\n    abcfoobar\nNo match\n    \n/(?(*nlb:foo)bar|baz)/\n    abcfoobaz \n 0: baz\n    abcbarbaz \n 0: bar\n\\= Expect no match\n    abcfoobar\nNo match\n \n/(?(*negative_lookbehind:foo)bar|baz)/\n    abcfoobaz \n 0: baz\n    abcbarbaz \n 0: bar\n\\= Expect no match\n    abcfoobar\nNo match\n \n/(*atomic:a+)\\w/\n    aaab\n 0: aaab\n\\= Expect no match\n    aaaa      \nNo match\n\n/   (?<word> \\w+ )*    \\.   /xi\n    pokus.\n 0: pokus.\n 1: pokus\n    \n/(?(DEFINE) (?<word> \\w+ ) ) (?&word)*   \\./xi\n    pokus.\n 0: pokus.\n\n/(?(DEFINE) (?<word> \\w+ ) ) ( (?&word)* )   \\./xi \n    pokus.\n 0: pokus.\n 1: <unset>\n 2: pokus\n\n/(?&word)*  (?(DEFINE) (?<word> \\w+ ) )  \\./xi\n    pokus.\n 0: pokus.\n\n/(?&word)*  \\. (?<word> \\w+ )/xi\n    pokus.hokus\n 0: pokus.hokus\n 1: hokus\n\n/a(?(?=(*:2)b).)/mark\n    abc\n 0: ab\nMK: 2\n    acb     \n 0: a\n\n/a(?(?!(*:2)b).)/mark\n    acb\n 0: ac\n    abc     \n 0: a\nMK: 2\n\n/(?:a|ab){1}+c/\n\\= Expect no match\n    abc\nNo match\n\n/(a|ab){1}+c/\n    abc\nNo match\n    \n/(a+){1}+a/\n\\= Expect no match\n    aaaa\nNo match\n\n/(?(DEFINE)(a|ab))(?1){1}+c/\n    abc    \nNo match\n\n/(?:a|(?=b)|.)*\\z/\n    abc\n 0: abc\n    \n/(?:a|(?=b)|.)*/\n    abc \n 0: a\n    \n/(?<=a(*SKIP)x)|c/\n    abcd\nNo match\n    \n/(?<=a(*SKIP)x)|d/\n    abcd\n 0: d\n \n/(?<=(?=.(?<=x)))/aftertext\n    abx\n 0: \n 0+ x\n\n/(?<=(?=(?<=a)))b/\n    ab\n 0: b\n\n/^(?<A>a)(?(<A>)b)((?<=b).*)$/\n    abc\n 0: abc\n 1: a\n 2: c\n\n/^(a\\1?){4}$/\n    aaaa\n 0: aaaa\n 1: a\n    aaaaaa\n 0: aaaaaa\n 1: aa\n\n/^((\\1+)|\\d)+133X$/\n    111133X\n 0: 111133X\n 1: 11\n 2: 11\n\n/^(?>.*?([A-Z])(?!.*\\1)){26}/i\n    The quick brown fox jumps over the lazy dog.\n 0: The quick brown fox jumps over the lazy dog\n 1: g\n    Jackdaws love my big sphinx of quartz.\n 0: Jackdaws love my big sphinx of quartz\n 1: z\n    Pack my box with five dozen liquor jugs.\n 0: Pack my box with five dozen liquor jugs\n 1: s\n\\= Expect no match\n    The quick brown fox jumps over the lazy cat.\nNo match\n    Hackdaws love my big sphinx of quartz.\nNo match\n    Pack my fox with five dozen liquor jugs.\nNo match\n\n/(?<=X(?(DEFINE)(A)))X(*F)/\n\\= Expect no match\n    AXYZ\nNo match\n\n/(?<=X(?(DEFINE)(A)))./\n    AXYZ\n 0: Y\n\n/(?<=X(?(DEFINE)(.*))Y)./\n    AXYZ\n 0: Z\n\n/(?<=X(?(DEFINE)(Y))(?1))./\n    AXYZ\n 0: Z\n\n/(?(DEFINE)(?<foo>bar))(?<![-a-z0-9])word/\n    word\n 0: word\n\n/a{1,2,3}b/\n    a{1,2,3}b\n 0: a{1,2,3}b\n\n#if !ebcdic\n\n/\\214748364/\n    >\\x{8c}748364<\n 0: \\x8c748364\n\n# smaller than GROUP_MAX\n/\\21300/\n    \\x8b00\n 0: \\x8b00\n\n# larger than GROUP_MAX\n/\\213000/\n    \\x8b000\n 0: \\x8b000\n\n# larger than INT_MAX\n/\\21300000000/\n    \\x8b00000000\n 0: \\x8b00000000\n\n#endif\n\n/a{65536/\n    >a{65536<\n 0: a{65536\n\n/a\\K.(?0)*/\n    abac\n 0: c\n\n/(a\\K.(?1)*)/\n    abac\n 0: c\n 1: abac\n\n# -------------------------------------------------------------------------- \n# Perl-compatible tests of variable-length lookbehinds.\n\n/(?<=ab?c).../g\n    abcdefgacxyz\n 0: def\n 0: xyz\n\n/(?<=PQR|ab?c).../g\n    abcdefgacxyzPQR123\n 0: def\n 0: xyz\n 0: 123\n\n/(?<=ab?c|PQR).../g\n    abcdefgacxyzPQR123\n 0: def\n 0: xyz\n 0: 123\n\n/(?<=PQ|ab?c).../g\n    abcdefgacxyzPQR123\n 0: def\n 0: xyz\n 0: R12\n\n/(?<=ab?c|PQ).../g\n    abcdefgacxyzPQR123\n 0: def\n 0: xyz\n 0: R12\n\n/(?<=a(b?c|d?e?e)f)X./g\n     acfX1zzzaefX2zzzadeefX3zzzX4zzz\n 0: X1\n 1: c\n 0: X2\n 1: e\n 0: X3\n 1: dee\n\n/(?<!a(b?c|d?e?e)f)X./g\n     acfX1zzzaefX2zzzadeefX3zzzX4zzz\n 0: X4\n     \n/(?(?<=ab?c)d|e)/\n    abcdefg\n 0: d\n    acdefg\n 0: d\n    axdefg\n 0: e\n    \n/(?<=\\d{2,3}|ABC)./\n    ABCD   \n 0: D\n\n/(?<=(\\d{1,255}))X/\n    1234X\n 0: X\n 1: 1234\n\n/(?<=a(b?c){3}d)X/\n   ZXacbccdXYZ\n 0: X\n 1: c\n   \n/(?<=a(b?c){0}d)X/\n   ZXadXYZ\n 0: X\n \n/(?<=a?(b?c){0}d)X./\n   ZXadXYZ\n 0: XY\n \n/(?<=\\R)X/\n    \\x{0a}X\n 0: X\n    a\\x{0a}X\n 0: X\n    a\\x{0d}\\x{0a}X\n 0: X\n\n# -------------------------------------------------------------------------- \n\n# Altered interpretation of {,n}\n\n/a{,3}B/\n    XBBB\n 0: B\n    XaBBB\n 0: aB\n    XaaBBB\n 0: aaB\n    XaaaBBB\n 0: aaaB\n    XaaaaBBB\n 0: aaaB\n\n# But {,} remains not a qualifier\n\n/a{,}B/\n    Xa{,}BBB\n 0: a{,}B\n\\= Expect no match     \n    XBBB\nNo match\n    XaBBB\nNo match\n    \n# Checks for non-quantifiers after refactored code\n\n/X{/\n    ZZX{}YY\n 0: X{\n\n/X{A/\n    ZZX{ABC}\n 0: X{A\n\n/X{}/\n    ZZX{}YZ\n 0: X{}\n    \n/X{1234/\n    ZZX{123456\n 0: X{1234\n    \n/X{12ABC}/ \n    ZZX{12ABC}Y\n 0: X{12ABC}\n    \n/X{1,/\n    ZZX{1,...\n 0: X{1,\n    \n/X{,9/\n    ZZX{,9}abc\n 0: X{,9\n    \n/X{,9]/\n    ZZX{,9]..   \n 0: X{,9]\n    \n# -------------------------------------------------------------------------- \n\n/(A)(?-1)(?+1)(B)/\n    xxAABBzz\n 0: AABB\n 1: A\n 2: B\n   \n/(A)(\\g{ -2 }B)/\n    XAABX\n 0: AAB\n 1: A\n 2: AB\n\n/(A)((?-2)B)/\n    XAABX\n 0: AAB\n 1: A\n 2: AB\n\n/a\\c\\X/\n    --a\\x1cX--\n 0: a\\x1cX\n    \n/(a)\\g{ 1 }/\n    baab\n 0: aa\n 1: a\n\n/a{ 1,2 }/\n    Xaaaaa\n 0: aa\n\n/a{ 1 , 2 }/\n    Xaaaaa\n 0: aa\n\n/(?'name'ab)\\k{ name }(?P=name)/\n    XabababX \n 0: ababab\n 1: ab\n\n/A{,}B/\n    A{,}B\n 0: A{,}B\n\n/A{ , }B/\n    A{ , }B\n 0: A{ , }B\n    \n/A{ ,3}/\n    AAAAAACC \n 0: AAA\n\n/A{ 3, }/\n    BBAAAAAACC \n 0: AAAAAA\n\n# This pattern validates regular expression patterns. The original that I was\n# sent was this:\n# /^((?:(?:[^?+*{}()[\\]\\\\|]+|\\\\.|\\[(?:\\^?\\\\.|\\^[^\\\\]|[^\\\\^])(?:[^\\]\\\\]+|\\\\.)*\\]|\\((?:\\?[:=!]|\\?<[=!]|\\?>)?(?1)??\\)|\\(\\?(?:R|[+-]?\\d+)\\))(?:(?:[?+*]|\\{\\d+(?:,\\d*)?\\})[?+]?)?|\\|)*)$/\n# This is not very readable, and also does not handle all features. I have done\n# some work on it.\n\n/^\n(?<re>\n# A regular expression is zero or more of these items.\n  (?:\n  # An item is one of these:\n    (?:\n      [^?+*{}()\\[\\]\\\\|]++|  # Non-meta characters or unquoted .\n      \\\\.|                  # Quoted .\n\n      \\[                    # Class, which is [\n      (?:                   # Followed by\n        \\^?\\\\.|             # Optional ^ and any escaped character\n        \\^[^\\\\]|            # OR ^ and not escaped character\n        [^\\\\^]              # OR neither ^ nor \\\n      )                     # Followed by\n      (?:[^\\]\\\\]+|\\\\.)*+    # Zero or more (not ] or \\) OR escaped dot\n      \\]|                   # Class ends with ]\n\n      \\(                    # Parenthesized group\n        (?:                 # Start with optional\n          \\?[:=!]|          # ? followed by : = !\n          \\?<[=!]|          # OR ?< followed by = or !\n          \\?>               # OR ?>\n        )?\n        (?&re)??            # Then a nested <re>\n      \\)|                   # End parenthesized group\n\n      \\(\\?                  # Other parenthesized items\n        (?:                 # (? followed by\n          R|                # R\n          [+-]?\\d++         # Or optional +- and digits\n        )\n      \\)|                   # End parens\n\n      \\(\\*                  # Verbs\n        (?:\n          COMMIT|\n          FAIL|\n          MARK:[^)]*|\n          (?:PRUNE|SKIP|THEN)(?::[^\\)]*+)?\n        )\n      \\)\n    )                       # End list of items\n\n    # Followed by an optional quantifier\n\n    (?:\n      (?:\n        [?+*]     # ?+*\n        |         # OR\n        \\{\\d+     # { digits\n        (?:,\\d*)? # optionally followed by ,digits\n        \\}        # then closing }\n        |         # OR\n        \\{,\\d+}   # {,digits}\n      )\n      [?+]?       # optional ungreedy or possessive\n    )?\n\n    | # OR an \"item\" is a branch ending\n\n    \\|\n\n  )*  # Zero or more top-level items.\n)     # End regex group.\n$/x\n    [abcdef]\n 0: [abcdef]\n 1: [abcdef]\n    [abc\\\\]def]\n 0: [abc\\]def]\n 1: [abc\\]def]\n    a.b|abcd\n 0: a.b|abcd\n 1: a.b|abcd\n    ab()d\n 0: ab()d\n 1: ab()d\n    ab{1,3}d\n 0: ab{1,3}d\n 1: ab{1,3}d\n    ab{,3}d\n 0: ab{,3}d\n 1: ab{,3}d\n    ab(*FAIL)d(*COMMIT)(*SKIP)(*THEN:abc)\n 0: ab(*FAIL)d(*COMMIT)(*SKIP)(*THEN:abc)\n 1: ab(*FAIL)d(*COMMIT)(*SKIP)(*THEN:abc)\n    ab(*MARK:xyz)\n 0: ab(*MARK:xyz)\n 1: ab(*MARK:xyz)\n    (?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\\\\s])\n 0: (?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\\s])\n 1: (?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\\s])\n    abcd\\\\t\\\\n\\\\r\\\\f\\\\a\\\\e\\\\071\\\\x3b\\\\^\\\\\\\\\\\\?caxyz\n 0: abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\^\\\\\\?caxyz\n 1: abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\^\\\\\\?caxyz\n    a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz\n 0: a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz\n 1: a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz\n    \\\\G(?:(?=(\\\\1.|)(.))){1,13}?(?!.*\\\\2.*\\\\2)\\\\1\\\\K\\\\2\n 0: \\G(?:(?=(\\1.|)(.))){1,13}?(?!.*\\2.*\\2)\\1\\K\\2\n 1: \\G(?:(?=(\\1.|)(.))){1,13}?(?!.*\\2.*\\2)\\1\\K\\2\n\\= Expect no match\n    ab)d\nNo match\n    ab(d\nNo match\n    {4,5}\nNo match\n    a[]b\nNo match\n    (a)(?(1)a|b|c)\nNo match\n\n/^..A(*SKIP)B|C/\n    12ADC\n 0: C\n\n/(?<!a?)/\n    a\nNo match\n\n/\\Qab*\\E{2,}/\n    ab***z\n 0: ab***\n\n/[\\Qabc\\E-z]+/\n    abcdwxyz\n 0: abcdwxyz\n\n/[\\Qa-\\Ez]+/\n    xz-zaax\n 0: z-zaa\n\n/a{(?#XYZ),2}/\n    xa{,2}x\n 0: a{,2}\n\\= Expect no match     \n    xaax\nNo match\n \n/(?<=PQ|Pc.b?)(.?)(b?)/\n    Pc.b\n 0: b\n 1: b\n 2: \n    \n/(?(?<=aa.b|ab)b).b/\n    aaab\n 0: ab\n\n/(?(?<=a(?:a.b|b))b).b/\n    aaab\n 0: ab\n\n/(?=a)b?a/\n    a\n 0: a\n\n/(?=a)b?a./\n    ab\n 0: ab\n\n/\\w(?R)*\\w/\n    grtgt\n 0: grtg\n    abcdef\n 0: abcdef\n    abcdefg\n 0: abcdef\n    .a.bc.d.\n 0: bc\n\\= Expect no match\n    .a.b.c.\nNo match\n\n/65 00 64/hex\n    e\\0d\n 0: e\\x00d\n\n/[[:digit:]-   ]/xx\n    1\n 0: 1\n    -\n 0: -\n\\= Expect no match\n    z\nNo match\n    \\ \\\nNo match\n\n/[\\d-   ]/xx\n    1\n 0: 1\n    -\n 0: -\n\\= Expect no match\n    z\nNo match\n    \\ \\\nNo match\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n/(?[\\n])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    \\\\\nNo match\n    n\nNo match\n\n#if !ebcdic\n\n/^(?[\\x61])b/\n    ab\n 0: ab\n\\= Expect no match\n    b\nNo match\n    a\nNo match\n\n/^(?[\\x61])+b/\n    ab\n 0: ab\n    aab\n 0: aab\n\\= Expect no match\n    b\nNo match\n\n#endif\n\n/(?[ [[:graph:]] ])/\n    a\n 0: a\n\\= Expect no match\n    \\x01\nNo match\n\n/(?[ [:graph:] ])/\n    a\n 0: a\n\\= Expect no match\n    \\x01\nNo match\n\n/(?[ [[:graph:]\\x02] ])/\n    a\n 0: a\n    \\x02\n 0: \\x02\n\\= Expect no match\n    \\x01\nNo match\n\n/(?[\\E\\n])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    \\\\\nNo match\n    E\nNo match\n\n/(?[\\n \\Q\\E])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    \\\\\nNo match\n    Q\nNo match\n\n/(?[ ( \\x02 + [:graph:] ) | [ \\x02 [:graph:] ] ])/\n    a\n 0: a\n    \\x02\n 0: \\x02\n\\= Expect no match\n    \\x01\nNo match\n\n/(?[ \\d ])/\n    1\n 0: 1\n\\= Expect no match\n    d\nNo match\n\n/(?[[1]])/\n    1\n 0: 1\n\\= Expect no match\n    ]\nNo match\n\n/(?[[a]])/\n    a\n 0: a\n\\= Expect no match\n    ]\nNo match\n\n/(?[[a-c]])/\n    a\n 0: a\n    b\n 0: b\n\\= Expect no match\n    -\nNo match\n    ]\nNo match\n\n/(?[ [\\t] + [\\n] ])/\n    \\t\n 0: \\x09\n    \\n\n 0: \\x0a\n\\= Expect no match\n    t\nNo match\n    \\\\\nNo match\n    [\nNo match\n\n/(?[ \\t + \\n ])/\n    \\t\n 0: \\x09\n    \\n\n 0: \\x0a\n\\= Expect no match\n    t\nNo match\n    \\\\\nNo match\n    [\nNo match\n\n/(?[ [()] ])/\n    )\n 0: )\n    (\n 0: (\n\\= Expect no match\n    ]\nNo match\n\n/(?[ ( [()] ) ])/\n    )\n 0: )\n    (\n 0: (\n\\= Expect no match\n    ]\nNo match\n\n/(?[ (( [\\n\\t] )) ])/\n    \\n\n 0: \\x0a\n    \\t\n 0: \\x09\n\\= Expect no match\n    )\nNo match\n    (\nNo match\n    t\nNo match\n\n# Each syntax element, with unary operator applied to it\n\n/(?[ !\\n ])/\n    z\n 0: z\n\\= Expect no match\n    \\n\nNo match\n\n/(?[ !\\d ])/\n    a\n 0: a\n\\= Expect no match\n    1\nNo match\n\n/(?[ ![:alpha:] ])/\n    1\n 0: 1\n\\= Expect no match\n    a\nNo match\n\n/(?[ ![\\n] ])/\n    z\n 0: z\n\\= Expect no match\n    \\n\nNo match\n\n/(?[ !(\\n) ])/\n    z\n 0: z\n\\= Expect no match\n    \\n\nNo match\n\n/(?[ !!\\n ])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    z\nNo match\n\n# Each syntax element, as contents of parens\n\n/(?[ (\\n) ])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    z\nNo match\n\n/(?[ (\\d) ])/\n    1\n 0: 1\n\\= Expect no match\n    a\nNo match\n\n/(?[ ([:alpha:]) ])/\n    a\n 0: a\n\\= Expect no match\n    1\nNo match\n\n/(?[ ([\\n]) ])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    z\nNo match\n\n/(?[ ((\\n)) ])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    z\nNo match\n\n/(?[ (!\\n) ])/\n    z\n 0: z\n\\= Expect no match\n    \\n\nNo match\n\n/(?[ (\\n + \\t) ])/\n    \\n\n 0: \\x0a\n    \\t\n 0: \\x09\n\\= Expect no match\n    z\nNo match\n\n# Each syntax element, as LHS of a binary operator\n\n/(?[ \\n & [\\n\\t] ])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    t\nNo match\n\n/(?[ \\d & [\\d\\t] ])/\n    1\n 0: 1\n\\= Expect no match\n    a\nNo match\n\n/(?[ [:alpha:] & [a-z\\t] ])/\n    a\n 0: a\n\\= Expect no match\n    A\nNo match\n    \\t\nNo match\n\n/(?[ [\\n] & [\\n\\t] ])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    \\t\nNo match\n\n/(?[ (\\n) & [\\n\\t] ])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    \\t\nNo match\n\n/(?[ !\\n & [^\\n\\t] ])/\n    a\n 0: a\n\\= Expect no match\n    \\n\nNo match\n    \\t\nNo match\n\n/(?[ \\n & [\\n\\t] + [\\d] ])/\n    \\n\n 0: \\x0a\n    1\n 0: 1\n\\= Expect no match\n    \\t\nNo match\n    a\nNo match\n\n# Each syntax element, as RHS of a binary operator\n\n/(?[ [\\n\\t] & \\n ])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    t\nNo match\n\n/(?[ [\\d\\t] & \\d ])/\n    1\n 0: 1\n\\= Expect no match\n    a\nNo match\n\n/(?[ [a-z\\t] & [:alpha:] ])/\n    a\n 0: a\n\\= Expect no match\n    A\nNo match\n    \\t\nNo match\n\n/(?[ [\\n\\t] & [\\n] ])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    \\t\nNo match\n\n/(?[ [\\n\\t] & (\\n) ])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    \\t\nNo match\n\n/(?[ [^\\n\\t] & !\\n ])/\n    a\n 0: a\n\\= Expect no match\n    \\n\nNo match\n    \\t\nNo match\n\n/(?[ [\\d] + \\n & [\\n\\t] ])/\n    \\n\n 0: \\x0a\n    1\n 0: 1\n\\= Expect no match\n    \\t\nNo match\n    a\nNo match\n\n/(?[ [\\d] + \\n + [\\t] ])/\n    \\n\n 0: \\x0a\n    \\t\n 0: \\x09\n    1\n 0: 1\n\\= Expect no match\n    a\nNo match\n\n# end op surrounding syntax tests\n\n/(?[ \\d + \\n ])/\n    \\n\n 0: \\x0a\n    1\n 0: 1\n\\= Expect no match\n    a\nNo match\n\n/(?[ \\d | \\n ])/\n    \\n\n 0: \\x0a\n    1\n 0: 1\n\\= Expect no match\n    a\nNo match\n\n/(?[ \\d - [2] ])/\n    1\n 0: 1\n    3\n 0: 3\n\\= Expect no match\n    2\nNo match\n\n/(?[ [AC] ^ [BC] ])/\n    A\n 0: A\n    B\n 0: B\n\\= Expect no match\n    C\nNo match\n    D\nNo match\n\n/(?[\t(\t[\t^\tz\t]\t) ])/\n    j\n 0: j\n\\= Expect no match\n    z\nNo match\n\n/^.{4}/s\n    abcdef\n 0: abcd\n    abcde\n 0: abcd\n    abcd\n 0: abcd\n\\= Expect no match\n    abc\nNo match\n    ab\nNo match\n    a\nNo match\n\n/^(.{3,6}!)+$/s\n  abc!defghi!\n 0: abc!defghi!\n 1: defghi!\n  abcdef!ghi!\n 0: abcdef!ghi!\n 1: ghi!\n  abc!def!ghi!jkl!\n 0: abc!def!ghi!jkl!\n 1: jkl!\n  ab!cd!\n 0: ab!cd!\n 1: ab!cd!\n\\= Expect no match\n  abcd!ef!\nNo match\n  ab!cdefg!\nNo match\n\n/[a-z]{5,}b|x/\n  abcdefghbijb\n 0: abcdefghbijb\n  abcdefghbij\n 0: abcdefghb\n  abcdeb\n 0: abcdeb\n  abcdefghijx\n 0: x\n\\= Expect no match\n  abcdb\nNo match\n  abcdefghijk\nNo match\n\n/[a-z]{1,6}?s|x/\n  asbs\n 0: as\n  abcdefs\n 0: abcdefs\n  abcdefghijkss\n 0: fghijks\n  abcdefghijkx\n 0: x\n  ss\n 0: ss\n\\= Expect no match\n  s\nNo match\n  aaa\nNo match\n\n# --------------\n\n# End of testinput1 \n"
  },
  {
    "path": "testdata/testoutput10",
    "content": "# This set of tests is for UTF-8 support and Unicode property support, with\n# relevance only for the 8-bit library.\n\n#newline_default lf any anycrlf\n\n# The next 5 patterns have UTF-8 errors\n\n/[]/utf\nFailed: error -8 at offset 1: UTF-8 error: byte 2 top bits not 0x80\n        here: [ |-->| ]\n\n//utf\nFailed: error -3 at offset 0: UTF-8 error: 1 byte missing at end\n        here: |-->| \n\n/xxx/utf\nFailed: error -8 at offset 0: UTF-8 error: byte 2 top bits not 0x80\n        here: |-->| xxx\n\n/Â/utf\nFailed: error -22 at offset 2: UTF-8 error: isolated byte with 0x80 bit set\n        here: Â |-->| \n\n/Â/match_invalid_utf\nFailed: error -22 at offset 2: UTF-8 error: isolated byte with 0x80 bit set\n        here: Â |-->| \n\n# Now test subjects\n\n/badutf/utf\n\\= Expect UTF-8 errors\n    X\\xdf\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 1\n    XX\\xef\nFailed: error -4: UTF-8 error: 2 bytes missing at end at offset 2\n    XXX\\xef\\x80\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 3\n    X\\xf7\nFailed: error -5: UTF-8 error: 3 bytes missing at end at offset 1\n    XX\\xf7\\x80\nFailed: error -4: UTF-8 error: 2 bytes missing at end at offset 2\n    XXX\\xf7\\x80\\x80\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 3\n    \\xfb\nFailed: error -6: UTF-8 error: 4 bytes missing at end at offset 0\n    \\xfb\\x80\nFailed: error -5: UTF-8 error: 3 bytes missing at end at offset 0\n    \\xfb\\x80\\x80\nFailed: error -4: UTF-8 error: 2 bytes missing at end at offset 0\n    \\xfb\\x80\\x80\\x80\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 0\n    \\xfd\nFailed: error -7: UTF-8 error: 5 bytes missing at end at offset 0\n    \\xfd\\x80\nFailed: error -6: UTF-8 error: 4 bytes missing at end at offset 0\n    \\xfd\\x80\\x80\nFailed: error -5: UTF-8 error: 3 bytes missing at end at offset 0\n    \\xfd\\x80\\x80\\x80\nFailed: error -4: UTF-8 error: 2 bytes missing at end at offset 0\n    \\xfd\\x80\\x80\\x80\\x80\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 0\n    \\xdf\\x7f\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 0\n    \\xef\\x7f\\x80\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 0\n    \\xef\\x80\\x7f\nFailed: error -9: UTF-8 error: byte 3 top bits not 0x80 at offset 0\n    \\xf7\\x7f\\x80\\x80\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 0\n    \\xf7\\x80\\x7f\\x80\nFailed: error -9: UTF-8 error: byte 3 top bits not 0x80 at offset 0\n    \\xf7\\x80\\x80\\x7f\nFailed: error -10: UTF-8 error: byte 4 top bits not 0x80 at offset 0\n    \\xfb\\x7f\\x80\\x80\\x80\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 0\n    \\xfb\\x80\\x7f\\x80\\x80\nFailed: error -9: UTF-8 error: byte 3 top bits not 0x80 at offset 0\n    \\xfb\\x80\\x80\\x7f\\x80\nFailed: error -10: UTF-8 error: byte 4 top bits not 0x80 at offset 0\n    \\xfb\\x80\\x80\\x80\\x7f\nFailed: error -11: UTF-8 error: byte 5 top bits not 0x80 at offset 0\n    \\xfd\\x7f\\x80\\x80\\x80\\x80\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 0\n    \\xfd\\x80\\x7f\\x80\\x80\\x80\nFailed: error -9: UTF-8 error: byte 3 top bits not 0x80 at offset 0\n    \\xfd\\x80\\x80\\x7f\\x80\\x80\nFailed: error -10: UTF-8 error: byte 4 top bits not 0x80 at offset 0\n    \\xfd\\x80\\x80\\x80\\x7f\\x80\nFailed: error -11: UTF-8 error: byte 5 top bits not 0x80 at offset 0\n    \\xfd\\x80\\x80\\x80\\x80\\x7f\nFailed: error -12: UTF-8 error: byte 6 top bits not 0x80 at offset 0\n    \\xed\\xa0\\x80\nFailed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 0\n    \\xc0\\x8f\nFailed: error -17: UTF-8 error: overlong 2-byte sequence at offset 0\n    \\xe0\\x80\\x8f\nFailed: error -18: UTF-8 error: overlong 3-byte sequence at offset 0\n    \\xf0\\x80\\x80\\x8f\nFailed: error -19: UTF-8 error: overlong 4-byte sequence at offset 0\n    \\xf8\\x80\\x80\\x80\\x8f\nFailed: error -20: UTF-8 error: overlong 5-byte sequence at offset 0\n    \\xfc\\x80\\x80\\x80\\x80\\x8f\nFailed: error -21: UTF-8 error: overlong 6-byte sequence at offset 0\n    \\x80\nFailed: error -22: UTF-8 error: isolated byte with 0x80 bit set at offset 0\n    \\xfe\nFailed: error -23: UTF-8 error: illegal byte (0xfe or 0xff) at offset 0\n    \\xff\nFailed: error -23: UTF-8 error: illegal byte (0xfe or 0xff) at offset 0\n\n/badutf/utf\n\\= Expect UTF-8 errors\n    XX\\xfb\\x80\\x80\\x80\\x80\nFailed: error -13: UTF-8 error: 5-byte character is not allowed (RFC 3629) at offset 2\n    XX\\xfd\\x80\\x80\\x80\\x80\\x80\nFailed: error -14: UTF-8 error: 6-byte character is not allowed (RFC 3629) at offset 2\n    XX\\xf7\\xbf\\xbf\\xbf\nFailed: error -15: UTF-8 error: code points greater than 0x10ffff are not defined at offset 2\n\n/shortutf/utf\n\\= Expect UTF-8 errors\n    XX\\xdf\\=ph\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 2\n    XX\\xef\\=ph\nFailed: error -4: UTF-8 error: 2 bytes missing at end at offset 2\n    XX\\xef\\x80\\=ph\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 2\n    \\xf7\\=ph\nFailed: error -5: UTF-8 error: 3 bytes missing at end at offset 0\n    \\xf7\\x80\\=ph\nFailed: error -4: UTF-8 error: 2 bytes missing at end at offset 0\n    \\xf7\\x80\\x80\\=ph\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 0\n    \\xfb\\=ph\nFailed: error -6: UTF-8 error: 4 bytes missing at end at offset 0\n    \\xfb\\x80\\=ph\nFailed: error -5: UTF-8 error: 3 bytes missing at end at offset 0\n    \\xfb\\x80\\x80\\=ph\nFailed: error -4: UTF-8 error: 2 bytes missing at end at offset 0\n    \\xfb\\x80\\x80\\x80\\=ph\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 0\n    \\xfd\\=ph\nFailed: error -7: UTF-8 error: 5 bytes missing at end at offset 0\n    \\xfd\\x80\\=ph\nFailed: error -6: UTF-8 error: 4 bytes missing at end at offset 0\n    \\xfd\\x80\\x80\\=ph\nFailed: error -5: UTF-8 error: 3 bytes missing at end at offset 0\n    \\xfd\\x80\\x80\\x80\\=ph\nFailed: error -4: UTF-8 error: 2 bytes missing at end at offset 0\n    \\xfd\\x80\\x80\\x80\\x80\\=ph\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 0\n\n/anything/utf\n\\= Expect UTF-8 errors\n    X\\xc0\\x80\nFailed: error -17: UTF-8 error: overlong 2-byte sequence at offset 1\n    XX\\xc1\\x8f\nFailed: error -17: UTF-8 error: overlong 2-byte sequence at offset 2\n    XXX\\xe0\\x9f\\x80\nFailed: error -18: UTF-8 error: overlong 3-byte sequence at offset 3\n    \\xf0\\x8f\\x80\\x80\nFailed: error -19: UTF-8 error: overlong 4-byte sequence at offset 0\n    \\xf8\\x87\\x80\\x80\\x80\nFailed: error -20: UTF-8 error: overlong 5-byte sequence at offset 0\n    \\xfc\\x83\\x80\\x80\\x80\\x80\nFailed: error -21: UTF-8 error: overlong 6-byte sequence at offset 0\n    \\xfe\\x80\\x80\\x80\\x80\\x80\nFailed: error -23: UTF-8 error: illegal byte (0xfe or 0xff) at offset 0\n    \\xff\\x80\\x80\\x80\\x80\\x80\nFailed: error -23: UTF-8 error: illegal byte (0xfe or 0xff) at offset 0\n    \\xf8\\x88\\x80\\x80\\x80\nFailed: error -13: UTF-8 error: 5-byte character is not allowed (RFC 3629) at offset 0\n    \\xf9\\x87\\x80\\x80\\x80\nFailed: error -13: UTF-8 error: 5-byte character is not allowed (RFC 3629) at offset 0\n    \\xfc\\x84\\x80\\x80\\x80\\x80\nFailed: error -14: UTF-8 error: 6-byte character is not allowed (RFC 3629) at offset 0\n    \\xfd\\x83\\x80\\x80\\x80\\x80\nFailed: error -14: UTF-8 error: 6-byte character is not allowed (RFC 3629) at offset 0\n\\= Expect no match\n    \\xc3\\x8f\nNo match\n    \\xe0\\xaf\\x80\nNo match\n    \\xe1\\x80\\x80\nNo match\n    \\xf0\\x9f\\x80\\x80\nNo match\n    \\xf1\\x8f\\x80\\x80\nNo match\n    \\xf8\\x88\\x80\\x80\\x80\\=no_utf_check\nNo match\n    \\xf9\\x87\\x80\\x80\\x80\\=no_utf_check\nNo match\n    \\xfc\\x84\\x80\\x80\\x80\\x80\\=no_utf_check\nNo match\n    \\xfd\\x83\\x80\\x80\\x80\\x80\\=no_utf_check\nNo match\n    \n# Similar tests with offsets\n\n/badutf/utf\n\\= Expect UTF-8 errors\n    X\\xdfabcd\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n    X\\xdfabcd\\=offset=1\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n\\= Expect no match\n    X\\xdfabcd\\=offset=2\nNo match\n\n/(?<=x)badutf/utf\n\\= Expect UTF-8 errors\n    X\\xdfabcd\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n    X\\xdfabcd\\=offset=1\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n    X\\xdfabcd\\=offset=2\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n    X\\xdfabcd\\xdf\\=offset=3\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 6\n\\= Expect no match\n    X\\xdfabcd\\=offset=3\nNo match\n\n/(?<=xx)badutf/utf\n\\= Expect UTF-8 errors\n    X\\xdfabcd\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n    X\\xdfabcd\\=offset=1\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n    X\\xdfabcd\\=offset=2\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n    X\\xdfabcd\\=offset=3\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n\n/(?<=xxxx)badutf/utf\n\\= Expect UTF-8 errors\n    X\\xdfabcd\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n    X\\xdfabcd\\=offset=1\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n    X\\xdfabcd\\=offset=2\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n    X\\xdfabcd\\=offset=3\nFailed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1\n    X\\xdfabc\\xdf\\=offset=6\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 5\n    X\\xdfabc\\xdf\\=offset=7\nFailed: error -33: bad offset value\n\\= Expect no match\n    X\\xdfabcd\\=offset=6\nNo match\n \n/\\x{100}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc4\nLast code unit = \\x80\nSubject length lower bound = 1\n\n/\\x{1000}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{1000}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xe1\nLast code unit = \\x80\nSubject length lower bound = 1\n\n/\\x{10000}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{10000}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xf0\nLast code unit = \\x80\nSubject length lower bound = 1\n\n/\\x{100000}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100000}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xf4\nLast code unit = \\x80\nSubject length lower bound = 1\n\n/\\x{10ffff}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{10ffff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xf4\nLast code unit = \\xbf\nSubject length lower bound = 1\n\n/[\\x{ff}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{ff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc3\nLast code unit = \\xbf\nSubject length lower bound = 1\n\n/[\\x{100}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc4\nLast code unit = \\x80\nSubject length lower bound = 1\n\n/\\x80/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{80}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc2\nLast code unit = \\x80\nSubject length lower bound = 1\n\n/\\xff/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{ff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc3\nLast code unit = \\xbf\nSubject length lower bound = 1\n\n/\\x{D55c}\\x{ad6d}\\x{C5B4}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{d55c}\\x{ad6d}\\x{c5b4}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xed\nLast code unit = \\xb4\nSubject length lower bound = 3\n    \\x{D55c}\\x{ad6d}\\x{C5B4}\n 0: \\x{d55c}\\x{ad6d}\\x{c5b4}\n\n/\\x{65e5}\\x{672c}\\x{8a9e}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{65e5}\\x{672c}\\x{8a9e}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xe6\nLast code unit = \\x9e\nSubject length lower bound = 3\n    \\x{65e5}\\x{672c}\\x{8a9e}\n 0: \\x{65e5}\\x{672c}\\x{8a9e}\n\n/\\x{80}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{80}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc2\nLast code unit = \\x80\nSubject length lower bound = 1\n\n/\\x{084}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{84}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc2\nLast code unit = \\x84\nSubject length lower bound = 1\n\n/\\x{104}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{104}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc4\nLast code unit = \\x84\nSubject length lower bound = 1\n\n/\\x{861}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{861}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xe0\nLast code unit = \\xa1\nSubject length lower bound = 1\n\n/\\x{212ab}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{212ab}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xf0\nLast code unit = \\xab\nSubject length lower bound = 1\n\n/[^ab\\xC0-\\xF0]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [^ab\\xc0-\\xf0]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4\n  5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y\n  Z [ \\ ] ^ _ ` c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f\n  \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0\n  \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf\n  \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee\n  \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd\n  \\xfe \\xff\nSubject length lower bound = 1\n    \\x{f1}\n 0: \\x{f1}\n    \\x{bf}\n 0: \\x{bf}\n    \\x{100}\n 0: \\x{100}\n    \\x{1000}\n 0: \\x{1000}\n\\= Expect no match\n    \\x{c0}\nNo match\n    \\x{f0}\nNo match\n\n/(\\x{100}+|x)/IB,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\x{100}++\n        Alt\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: x \\xc4\nSubject length lower bound = 1\n\n/(\\x{100}*a|x)/IB,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\x{100}*+\n        a\n        Alt\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: a x \\xc4\nSubject length lower bound = 1\n\n/(\\x{100}{0,2}a|x)/IB,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\x{100}{0,2}+\n        a\n        Alt\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: a x \\xc4\nSubject length lower bound = 1\n\n/(\\x{100}{1,2}a|x)/IB,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\x{100}\n        \\x{100}{0,1}+\n        a\n        Alt\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: x \\xc4\nSubject length lower bound = 1\n\n/\\x{100}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc4\nLast code unit = \\x80\nSubject length lower bound = 1\n\n/a\\x{100}\\x{101}*/IB,utf\n------------------------------------------------------------------\n        Bra\n        a\\x{100}\n        \\x{101}*+\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'a'\nLast code unit = \\x80\nSubject length lower bound = 2\n\n/a\\x{100}\\x{101}+/IB,utf\n------------------------------------------------------------------\n        Bra\n        a\\x{100}\n        \\x{101}++\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'a'\nLast code unit = \\x81\nSubject length lower bound = 3\n\n/[^\\x{c4}]/IB\n------------------------------------------------------------------\n        Bra\n        [^\\x{c4}] (not)\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nSubject length lower bound = 1\n\n/[\\x{100}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc4\nLast code unit = \\x80\nSubject length lower bound = 1\n    \\x{100}\n 0: \\x{100}\n    Z\\x{100}\n 0: \\x{100}\n    \\x{100}Z\n 0: \\x{100}\n\n/[\\xff]/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{ff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc3\nLast code unit = \\xbf\nSubject length lower bound = 1\n    >\\x{ff}<\n 0: \\x{ff}\n\n/[^\\xff]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x{ff}] (not)\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nSubject length lower bound = 1\n\n/\\x{100}abc(xyz(?1))/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}abc\n        CBra 1\n        xyz\n        Recurse\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nFirst code unit = \\xc4\nLast code unit = 'z'\nSubject length lower bound = 7\n\n/\\777/I,utf\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc7\nLast code unit = \\xbf\nSubject length lower bound = 1\n  \\x{1ff}\n 0: \\x{1ff}\n  \\777\n 0: \\x{1ff}\n\n/\\x{100}+\\x{200}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}++\n        \\x{200}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc4\nLast code unit = \\x80\nSubject length lower bound = 2\n\n/\\x{100}+X/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}++\n        X\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc4\nLast code unit = 'X'\nSubject length lower bound = 2\n\n/^[\\QĀ\\E-\\QŐ\\E/B,utf\nFailed: error 106 at offset 15: missing terminating ] for character class\n        here: ...QĀ\\E-\\QŐ\\E |<--|\n\n# This tests the stricter UTF-8 check according to RFC 3629.\n\n/X/utf\n\\= Expect UTF-8 errors\n    \\x{d800}\nFailed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 0\n    \\x{da00}\nFailed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 0\n    \\x{dfff}\nFailed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 0\n    \\x{110000}\nFailed: error -15: UTF-8 error: code points greater than 0x10ffff are not defined at offset 0\n    \\x{2000000}\nFailed: error -13: UTF-8 error: 5-byte character is not allowed (RFC 3629) at offset 0\n    \\x{7fffffff}\nFailed: error -14: UTF-8 error: 6-byte character is not allowed (RFC 3629) at offset 0\n\\= Expect no match\n    \\x{d800}\\=no_utf_check\nNo match\n    \\x{da00}\\=no_utf_check\nNo match\n    \\x{dfff}\\=no_utf_check\nNo match\n    \\x{110000}\\=no_utf_check\nNo match\n    \\x{2000000}\\=no_utf_check\nNo match\n    \\x{7fffffff}\\=no_utf_check\nNo match\n\n/(*UTF8)\\x{1234}/\n    abcd\\x{1234}pqr\n 0: \\x{1234}\n\n/(*CRLF)(*UTF)(*BSR_UNICODE)a\\Rb/I\nCapture group count = 0\nCompile options: <none>\nOverall options: utf\n\\R matches any Unicode newline\nForced newline is CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n\n/\\h/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x20 \\xc2 \\xe1 \\xe2 \\xe3\nSubject length lower bound = 1\n    ABC\\x{09}\n 0: \\x{09}\n    ABC\\x{20}\n 0:  \n    ABC\\x{a0}\n 0: \\x{a0}\n    ABC\\x{1680}\n 0: \\x{1680}\n    ABC\\x{180e}\n 0: \\x{180e}\n    ABC\\x{2000}\n 0: \\x{2000}\n    ABC\\x{202f}\n 0: \\x{202f}\n    ABC\\x{205f}\n 0: \\x{205f}\n    ABC\\x{3000}\n 0: \\x{3000}\n\n/\\v/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\xc2 \\xe2\nSubject length lower bound = 1\n    ABC\\x{0a}\n 0: \\x{0a}\n    ABC\\x{0b}\n 0: \\x{0b}\n    ABC\\x{0c}\n 0: \\x{0c}\n    ABC\\x{0d}\n 0: \\x{0d}\n    ABC\\x{85}\n 0: \\x{85}\n    ABC\\x{2028}\n 0: \\x{2028}\n\n/\\h*A/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x20 A \\xc2 \\xe1 \\xe2 \\xe3\nLast code unit = 'A'\nSubject length lower bound = 1\n    CDBABC\n 0: A\n\n/\\v+A/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\xc2 \\xe2\nLast code unit = 'A'\nSubject length lower bound = 2\n\n/\\s?xxx\\s/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 x\nLast code unit = 'x'\nSubject length lower bound = 4\n\n/\\sxxx\\s/I,utf,tables=2\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 \\xc2\nLast code unit = 'x'\nSubject length lower bound = 5\n    AB\\x{85}xxx\\x{a0}XYZ\n 0: \\x{85}xxx\\x{a0}\n    AB\\x{a0}xxx\\x{85}XYZ\n 0: \\x{a0}xxx\\x{85}\n\n/\\S \\S/I,utf,tables=2\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x0e \\x0f\n  \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e\n  \\x1f ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C\n  D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c d e f g h\n  i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\xc0 \\xc1 \\xc2 \\xc3 \\xc4\n  \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3\n  \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2\n  \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1\n  \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nLast code unit = ' '\nSubject length lower bound = 3\n    \\x{a2} \\x{84}\n 0: \\x{a2} \\x{84}\n    A Z\n 0: A Z\n\n/a+/utf\n    a\\x{123}aa\\=offset=1\n 0: aa\n    a\\x{123}aa\\=offset=3\n 0: aa\n    a\\x{123}aa\\=offset=4\n 0: a\n\\= Expect bad offset value\n    a\\x{123}aa\\=offset=6\nFailed: error -33: bad offset value\n\\= Expect bad UTF-8 offset     \n    a\\x{123}aa\\=offset=2\nError -36 (bad UTF-8 offset)\n\\= Expect no match\n    a\\x{123}aa\\=offset=5\nNo match\n\n/\\x{1234}+/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nStarting code units: \\xe1\nSubject length lower bound = 1\n\n/\\x{1234}+?/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nStarting code units: \\xe1\nSubject length lower bound = 1\n\n/\\x{1234}++/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nStarting code units: \\xe1\nSubject length lower bound = 1\n\n/\\x{1234}{2}/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nStarting code units: \\xe1\nSubject length lower bound = 2\n\n/[^\\x{c4}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x{c4}] (not)\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nSubject length lower bound = 1\n\n/X+\\x{200}/IB,utf\n------------------------------------------------------------------\n        Bra\n        X++\n        \\x{200}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'X'\nLast code unit = \\x80\nSubject length lower bound = 2\n\n/\\R/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\xc2 \\xe2\nSubject length lower bound = 1\n\n/\\777/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{1ff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc7\nLast code unit = \\xbf\nSubject length lower bound = 1\n\n/\\w+\\x{C4}/B,utf\n------------------------------------------------------------------\n        Bra\n        \\w++\n        \\x{c4}\n        Ket\n        End\n------------------------------------------------------------------\n    a\\x{C4}\\x{C4}\n 0: a\\x{c4}\n\n/\\w+\\x{C4}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\w+\n        \\x{c4}\n        Ket\n        End\n------------------------------------------------------------------\n    a\\x{C4}\\x{C4}\n 0: a\\x{c4}\\x{c4}\n\n/\\W+\\x{C4}/B,utf\n------------------------------------------------------------------\n        Bra\n        \\W+\n        \\x{c4}\n        Ket\n        End\n------------------------------------------------------------------\n    !\\x{C4}\n 0: !\\x{c4}\n\n/\\W+\\x{C4}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\W++\n        \\x{c4}\n        Ket\n        End\n------------------------------------------------------------------\n    !\\x{C4}\n 0: !\\x{c4}\n\n/\\W+\\x{A1}/B,utf\n------------------------------------------------------------------\n        Bra\n        \\W+\n        \\x{a1}\n        Ket\n        End\n------------------------------------------------------------------\n    !\\x{A1}\n 0: !\\x{a1}\n\n/\\W+\\x{A1}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\W+\n        \\x{a1}\n        Ket\n        End\n------------------------------------------------------------------\n    !\\x{A1}\n 0: !\\x{a1}\n\n/X\\s+\\x{A0}/B,utf\n------------------------------------------------------------------\n        Bra\n        X\n        \\s++\n        \\x{a0}\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x20\\x{A0}\\x{A0}\n 0: X \\x{a0}\n\n/X\\s+\\x{A0}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        X\n        \\s+\n        \\x{a0}\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x20\\x{A0}\\x{A0}\n 0: X \\x{a0}\\x{a0}\n\n/\\S+\\x{A0}/B,utf\n------------------------------------------------------------------\n        Bra\n        \\S+\n        \\x{a0}\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x{A0}\\x{A0}\n 0: X\\x{a0}\\x{a0}\n\n/\\S+\\x{A0}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\S++\n        \\x{a0}\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x{A0}\\x{A0}\n 0: X\\x{a0}\n\n/\\x{a0}+\\s!/B,utf\n------------------------------------------------------------------\n        Bra\n        \\x{a0}++\n        \\s\n        !\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{a0}\\x20!\n 0: \\x{a0} !\n\n/\\x{a0}+\\s!/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\x{a0}+\n        \\s\n        !\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{a0}\\x20!\n 0: \\x{a0} !\n\n/A/utf\n  \\x{ff000041}\n** Character \\N{U+ff000041} is greater than 0x7fffffff and therefore cannot be encoded as UTF-8\n  \\x{7f000041}\nFailed: error -14: UTF-8 error: 6-byte character is not allowed (RFC 3629) at offset 0\n\n/(*UTF8)abc/never_utf\nFailed: error 174 at offset 7: using UTF is disabled by the application\n        here: (*UTF8) |<--| abc\n\n/abc/utf,never_utf\nFailed: error 174 at offset 0: using UTF is disabled by the application\n\n/(*UCP)abc/never_ucp\nFailed: error 175 at offset 6: using UCP is disabled by the application\n        here: (*UCP) |<--| abc\n\n/abc/ucp,never_ucp\nFailed: error 175 at offset 0: using UCP is disabled by the application\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/IBi,utf\n------------------------------------------------------------------\n        Bra\n     /i A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = 'A' (caseless)\nSubject length lower bound = 5\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/IB,utf\n------------------------------------------------------------------\n        Bra\n        A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = \\xb0\nSubject length lower bound = 5\n\n/AB\\x{1fb0}/IB,utf\n------------------------------------------------------------------\n        Bra\n        AB\\x{1fb0}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = \\xb0\nSubject length lower bound = 3\n\n/AB\\x{1fb0}/IBi,utf\n------------------------------------------------------------------\n        Bra\n     /i AB\\x{1fb0}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = 'A' (caseless)\nLast code unit = 'B' (caseless)\nSubject length lower bound = 3\n\n/\\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nStarting code units: \\xd0 \\xd1\nSubject length lower bound = 17\n    \\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}\n 0: \\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}\n    \\x{451}\\x{440}\\x{441}\\x{442}\\x{443}\\x{444}\\x{445}\\x{446}\\x{447}\\x{448}\\x{449}\\x{44a}\\x{44b}\\x{44c}\\x{44d}\\x{44e}\\x{44f}\n 0: \\x{451}\\x{440}\\x{441}\\x{442}\\x{443}\\x{444}\\x{445}\\x{446}\\x{447}\\x{448}\\x{449}\\x{44a}\\x{44b}\\x{44c}\\x{44d}\\x{44e}\\x{44f}\n\n/[ⱥ]/Bi,utf\n------------------------------------------------------------------\n        Bra\n     /i \\x{2c65}\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^ⱥ]/Bi,utf\n------------------------------------------------------------------\n        Bra\n     /i [^\\x{2c65}] (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\h/I\nCapture group count = 0\nStarting code units: \\x09 \\x20 \\xa0\nSubject length lower bound = 1\n\n/\\v/I\nCapture group count = 0\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85\nSubject length lower bound = 1\n\n/\\R/I\nCapture group count = 0\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85\nSubject length lower bound = 1\n\n/[[:blank:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0]\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\x{212a}+/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nStarting code units: K k \\xe2\nSubject length lower bound = 1\n    KKkk\\x{212a}\n 0: KKkk\\x{212a}\n\n/s+/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nStarting code units: S s \\xc5\nSubject length lower bound = 1\n    SSss\\x{17f}\n 0: SSss\\x{17f}\n\n/\\x{100}*A/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        A\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: A \\xc4\nLast code unit = 'A'\nSubject length lower bound = 1\n    A\n 0: A\n\n/\\x{100}*\\d(?R)/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        \\d\n        Recurse\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: 0 1 2 3 4 5 6 7 8 9 \\xc4\nSubject length lower bound = 1\n\n/[Z\\x{100}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [Z\\x{100}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: Z \\xc4\nSubject length lower bound = 1\n    Z\\x{100}\n 0: Z\n    \\x{100}\n 0: \\x{100}\n    \\x{100}Z\n 0: \\x{100}\n\n/[z-\\x{100}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [z-\\xff\\x{100}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: z { | } ~ \\x7f \\xc2 \\xc3 \\xc4\nSubject length lower bound = 1\n\n/[z\\Qa-d]Ā\\E]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [\\-\\]adz\\x{100}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: - ] a d z \\xc4\nSubject length lower bound = 1\n    \\x{100}\n 0: \\x{100}\n    Ā \n 0: \\x{100}\n\n/[ab\\x{100}]abc(xyz(?1))/IB,utf\n------------------------------------------------------------------\n        Bra\n        [ab\\x{100}]\n        abc\n        CBra 1\n        xyz\n        Recurse\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: a b \\xc4\nLast code unit = 'z'\nSubject length lower bound = 7\n\n/\\x{100}*\\s/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        \\s\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 \\xc4\nSubject length lower bound = 1\n\n/\\x{100}*\\d/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: 0 1 2 3 4 5 6 7 8 9 \\xc4\nSubject length lower bound = 1\n\n/\\x{100}*\\w/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\n  \\xc4\nSubject length lower bound = 1\n\n/\\x{100}*\\D/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*\n        \\D\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / : ; < = >\n  ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c\n  d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\xc0 \\xc1 \\xc2\n  \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1\n  \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0\n  \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef\n  \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe\n  \\xff\nSubject length lower bound = 1\n\n/\\x{100}*\\S/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*\n        \\S\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x0e \\x0f\n  \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e\n  \\x1f ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C\n  D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c d e f g h\n  i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\xc0 \\xc1 \\xc2 \\xc3 \\xc4\n  \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3\n  \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2\n  \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1\n  \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/\\x{100}*\\W/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*\n        \\W\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / : ; < = >\n  ? @ [ \\ ] ^ ` { | } ~ \\x7f \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9\n  \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8\n  \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7\n  \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6\n  \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/[\\x{105}-\\x{109}]/IBi,utf\n------------------------------------------------------------------\n        Bra\n        [\\x{104}-\\x{109}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nStarting code units: \\xc4\nSubject length lower bound = 1\n    \\x{104}\n 0: \\x{104}\n    \\x{105}\n 0: \\x{105}\n    \\x{109}  \n 0: \\x{109}\n\\= Expect no match\n    \\x{100}\nNo match\n    \\x{10a} \nNo match\n    \n/[z-\\x{100}]/IBi,utf\n------------------------------------------------------------------\n        Bra\n        [Zz-\\xff\\x{100}-\\x{101}\\x{178}\\x{39c}\\x{3bc}\\x{1e9e}\\x{212b}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nStarting code units: Z z { | } ~ \\x7f \\xc2 \\xc3 \\xc4 \\xc5 \\xce \\xe1 \\xe2\nSubject length lower bound = 1\n    Z\n 0: Z\n    z\n 0: z\n    \\x{39c}\n 0: \\x{39c}\n    \\x{178}\n 0: \\x{178}\n    |\n 0: |\n    \\x{80}\n 0: \\x{80}\n    \\x{ff}\n 0: \\x{ff}\n    \\x{100}\n 0: \\x{100}\n    \\x{101} \n 0: \\x{101}\n\\= Expect no match\n    \\x{102}\nNo match\n    Y\nNo match\n    y           \nNo match\n\n/[z-\\x{100}]/IBi,utf\n------------------------------------------------------------------\n        Bra\n        [Zz-\\xff\\x{100}-\\x{101}\\x{178}\\x{39c}\\x{3bc}\\x{1e9e}\\x{212b}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nStarting code units: Z z { | } ~ \\x7f \\xc2 \\xc3 \\xc4 \\xc5 \\xce \\xe1 \\xe2\nSubject length lower bound = 1\n\n/\\x{3a3}B/IBi,utf\n------------------------------------------------------------------\n        Bra\n        clist 03a3 03c2 03c3\n     /i B\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nStarting code units: \\xce \\xcf\nLast code unit = 'B' (caseless)\nSubject length lower bound = 2\n\n/abc/utf,replace=\n    abc\nFailed: error -3: UTF-8 error: 1 byte missing at end\n\n/(?<=(a)(?-1))x/I,utf\nCapture group count = 1\nMax lookbehind = 2\nOptions: utf\nFirst code unit = 'x'\nSubject length lower bound = 1\n    a\\x80zx\\=offset=3\nFailed: error -22: UTF-8 error: isolated byte with 0x80 bit set at offset 1\n\n/[\\W\\p{Any}]/B\n------------------------------------------------------------------\n        Bra\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n    abc\n 0: a\n    123 \n 0: 1\n\n/[\\W\\pL]/B\n------------------------------------------------------------------\n        Bra\n        [\\x00-/:-^`-\\xff\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\n    abc\n 0: a\n\\= Expect no match\n    123     \nNo match\n\n/\\p{  Aሴ}/utf\nFailed: error 146 at offset 9: malformed \\P or \\p sequence\n        here: \\p{  Aሴ |<--| }\n\n/\\p{BC: Aሴ}/utf\nFailed: error 146 at offset 11: malformed \\P or \\p sequence\n        here: \\p{BC: Aሴ |<--| }\n\n/(*:*++++++++++++''''''''''''''''''''+''+++'+++x+++++++++++++++++++++++++++++++++++(++++++++++++++++++++:++++++%++:''''''''''''''''''''''''+++++++++++++++++++++++++++++++++++++++++++++++++++++-++++++++k+++++++''''+++'+++++++++++++++++++++++''''++++++++++++':ƿ)/utf\nFailed: error 176 at offset 259: name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)\n        here: ...+++++++':ƿ |<--| )\n\n/[\\s[:^ascii:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\x09-\\x0d \\x80-\\xff\\p{Xsp}]\n        Ket\n        End\n------------------------------------------------------------------\n\n# A special extra option allows excaped surrogate code points in 8-bit mode,\n# but subjects containing them must not be UTF-checked.\n\n/\\x{d800}/I,utf,allow_surrogate_escapes\nCapture group count = 0\nOptions: utf\nExtra options: allow_surrogate_escapes\nFirst code unit = \\xed\nLast code unit = \\x80\nSubject length lower bound = 1\n    \\x{d800}\\=no_utf_check\n 0: \\x{d800}\n\n/\\udfff\\o{157401}/utf,alt_bsux,allow_surrogate_escapes\n    \\x{dfff}\\x{df01}\\=no_utf_check\n 0: \\x{dfff}\\x{df01}\n    \n# This has different starting code units in 8-bit mode. \n\n/^[^ab]/IB,utf\n------------------------------------------------------------------\n        Bra\n        ^\n        [^ab]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: utf\nOverall options: anchored utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4\n  5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y\n  Z [ \\ ] ^ _ ` c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f\n  \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0\n  \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf\n  \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee\n  \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd\n  \\xfe \\xff\nSubject length lower bound = 1\n    c\n 0: c\n    \\x{ff}\n 0: \\x{ff}\n    \\x{100}\n 0: \\x{100}\n\\= Expect no match\n    aaa\nNo match\n    \n# Offsets are different in 8-bit mode. \n\n/(?<=abc)(|def)/g,utf,replace=<$0>,substitute_callout\n    123abcáyzabcdef789abcሴqr\n 1(2) Old 6 6 \"\" New 6 8 \"<>\"\n 2(2) Old 13 13 \"\" New 15 17 \"<>\"\n 3(2) Old 13 16 \"def\" New 17 22 \"<def>\"\n 4(2) Old 22 22 \"\" New 28 30 \"<>\"\n 4: 123abc<>\\x{e1}yzabc<><def>789abc<>\\x{1234}qr\n    \n# Check name length with non-ASCII characters \n\n/(?'ABáC678901234567890123456789012012345678901234567890123456789AB012345678901234567890123456789AB012345678901234567890123456789AB'...)/utf\n\n/(?'ABáC6789012345678901234567890123012345678901234567890123456789AB012345678901234567890123456789AB012345678901234567890123456789AB'...)/utf\nFailed: error 148 at offset 132: subpattern name is too long (maximum 128 code units)\n        here: ...23456789AB |<--| '...)\n\n/(?'ABZC6789012345678901234567890123012345678901234567890123456789AB012345678901234567890123456789AB012345678901234567890123456789AB'...)/utf\n\n/(?(n/utf\nFailed: error 142 at offset 4: syntax error in subpattern name (missing terminator?)\n        here: (?(n |<--|\n\n/(?(á/utf\nFailed: error 142 at offset 5: syntax error in subpattern name (missing terminator?)\n        here: (?(á |<--|\n\n/^\\cģ/utf\nFailed: error 168 at offset 5: \\c must be followed by a printable ASCII character\n        here: ^\\cģ |<--|\n\n/(?'٠ABC'...)/utf\nFailed: error 144 at offset 5: subpattern name must start with a non-digit\n        here: (?'٠ |<--| ABC'...)\n\n# Invalid UTF-8 tests\n\n/.../g,match_invalid_utf\n    abcd\\x80wxzy\\x80pqrs\n 0: abc\n 0: wxz\n 0: pqr\n    abcd\\x{80}wxzy\\x80pqrs\n 0: abc\n 0: d\\x{80}w\n 0: xzy\n 0: pqr\n\n/abc/match_invalid_utf\n    ab\\x80ab\\=ph\nPartial match: ab\n\\= Expect no match\n    ab\\x80cdef\\=ph\nNo match\n\n/.a/match_invalid_utf\n    ab\\=ph\nPartial match: b\n    ab\\=ps\nPartial match: b\n    b\\xf0\\x91\\x88b\\=ph\nPartial match: b\n    b\\xf0\\x91\\x88b\\=ps\nPartial match: b\n    b\\xf0\\x91\\x88\\xb4a\n 0: \\x{11234}a\n\\= Expect no match\n    b\\x80\\=ph\nNo match\n    b\\x80\\=ps\nNo match\n    b\\xf0\\x91\\x88\\=ph\nNo match\n    b\\xf0\\x91\\x88\\=ps\nNo match\n\n/.a$/match_invalid_utf\n    ab\\=ph\nPartial match: b\n    ab\\=ps\nPartial match: b\n\\= Expect no match\n    b\\xf0\\x91\\x98\\=ph\nNo match\n    b\\xf0\\x91\\x98\\=ps\nNo match\n\n/ab$/match_invalid_utf\n    ab\\x80cdeab\n 0: ab\n\\= Expect no match\n    ab\\x80cde\nNo match\n\n/.../g,match_invalid_utf\n    abcd\\x{80}wxzy\\x80pqrs\n 0: abc\n 0: d\\x{80}w\n 0: xzy\n 0: pqr\n\n/(?<=x)../g,match_invalid_utf\n    abcd\\x{80}wxzy\\x80pqrs\n 0: zy\n    abcd\\x{80}wxzy\\x80xpqrs\n 0: zy\n 0: pq\n    \n/X$/match_invalid_utf\n\\= Expect no match\n    X\\xc4\nNo match\n    \n/(?<=..)X/match_invalid_utf,aftertext\n    AB\\x80AQXYZ\n 0: X\n 0+ YZ\n    AB\\x80AQXYZ\\=offset=5\n 0: X\n 0+ YZ\n    AB\\x80\\x80AXYZXC\\=offset=5\n 0: X\n 0+ C\n\\= Expect no match\n    AB\\x80XYZ\nNo match\n    AB\\x80XYZ\\=offset=3 \nNo match\n    AB\\xfeXYZ\nNo match\n    AB\\xffXYZ\\=offset=3 \nNo match\n    AB\\x80AXYZ\nNo match\n    AB\\x80AXYZ\\=offset=4\nNo match\n    AB\\x80\\x80AXYZ\\=offset=5\nNo match\n\n/.../match_invalid_utf\n    AB\\xc4CCC\n 0: CCC\n\\= Expect no match\n    A\\x{d800}B\nNo match\n    A\\x{110000}B\nNo match\n    A\\xc4B  \nNo match\n\n/\\bX/match_invalid_utf\n    A\\x80X\n 0: X\n\n/\\BX/match_invalid_utf\n\\= Expect no match\n    A\\x80X\nNo match\n    \n/(?<=...)X/match_invalid_utf\n    AAA\\x80BBBXYZ \n 0: X\n\\= Expect no match\n    AAA\\x80BXYZ \nNo match\n    AAA\\x80BBXYZ \nNo match\n\n# -------------------------------------\n\n/(*UTF)(?=\\x{123})/I\nCapture group count = 0\nMay match empty string\nCompile options: <none>\nOverall options: utf\nFirst code unit = \\xc4\nLast code unit = \\xa3\nSubject length lower bound = 1\n\n/[\\x{c1}\\x{e1}]X[\\x{145}\\x{146}]/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\xc3\nLast code unit = 'X'\nSubject length lower bound = 3\n\n/[󿾟,]/BI,utf\n------------------------------------------------------------------\n        Bra\n        [,\\x{fff9f}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: , \\xf3\nSubject length lower bound = 1\n\n/[\\x{fff4}-\\x{ffff8}]/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\xef \\xf0 \\xf1 \\xf2 \\xf3\nSubject length lower bound = 1\n\n/[\\x{fff4}-\\x{afff8}\\x{10ffff}]/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\xef \\xf0 \\xf1 \\xf2 \\xf4\nSubject length lower bound = 1\n\n/[\\xff\\x{ffff}]/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\xc3 \\xef\nSubject length lower bound = 1\n\n/[\\xff\\x{ff}]/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\xc3\nSubject length lower bound = 1\n    abc\\x{ff}def\n 0: \\x{ff}\n\n/[\\xff\\x{ff}]/I\nCapture group count = 0\nFirst code unit = \\xff\nSubject length lower bound = 1\n    abc\\x{ff}def\n 0: \\xff\n\n/[Ss]/I\nCapture group count = 0\nFirst code unit = 'S' (caseless)\nSubject length lower bound = 1\n\n/[Ss]/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: S s\nSubject length lower bound = 1\n\n/(?:\\x{ff}|\\x{3000})/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\xc3 \\xe3\nSubject length lower bound = 1\n\n/x/utf\n    abxyz\n 0: x\n    \\x80\\=startchar\nFailed: error -22: UTF-8 error: isolated byte with 0x80 bit set at offset 0\n    abc\\x80\\=startchar\nFailed: error -22: UTF-8 error: isolated byte with 0x80 bit set at offset 3\n    abc\\x80\\=startchar,offset=3\nError -36 (bad UTF-8 offset)\n\n/\\x{c1}+\\x{e1}/iIB,ucp\n------------------------------------------------------------------\n        Bra\n     /i \\x{c1}+\n     /i \\x{e1}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless ucp\nFirst code unit = \\xc1 (caseless)\nLast code unit = \\xe1 (caseless)\nSubject length lower bound = 2\n    \\x{c1}\\x{c1}\\x{c1}\n 0: \\xc1\\xc1\\xc1\n    \\x{e1}\\x{e1}\\x{e1} \n 0: \\xe1\\xe1\\xe1\n\n/a|\\x{c1}/iI,ucp\nCapture group count = 0\nOptions: caseless ucp\nStarting code units: A a \\xc1 \\xe1\nSubject length lower bound = 1\n    \\x{e1}xxx\n 0: \\xe1\n\n/a|\\x{c1}/iI,utf\nCapture group count = 0\nOptions: caseless utf\nStarting code units: A a \\xc3\nSubject length lower bound = 1\n    \\x{e1}xxx\n 0: \\x{e1}\n\n/\\x{c1}|\\x{e1}/iI,ucp\nCapture group count = 0\nOptions: caseless ucp\nFirst code unit = \\xc1 (caseless)\nSubject length lower bound = 1\n\n/X(\\x{e1})Y/ucp,replace=>\\U$1<,substitute_extended\n    X\\x{e1}Y\n 1: >\\xc1<\n\n/X(\\x{e1})Y/i,ucp,replace=>\\L$1<,substitute_extended\n    X\\x{c1}Y\n 1: >\\xe1<\n\n# Without UTF or UCP characters > 127 have only one case in the default locale.\n\n/X(\\x{e1})Y/replace=>\\U$1<,substitute_extended\n    X\\x{e1}Y\n 1: >\\xe1<\n\n/A/utf,match_invalid_utf,caseless\n    \\xe5A\n 0: A\n\n/\\bch\\b/utf,match_invalid_utf\n    qchq\\=ph\nPartial match: \n    qchq\\=ps\nPartial match: \n\n/line1\\nbreak/firstline,utf,match_invalid_utf\n    line1\\nbreak\n 0: line1\\x{0a}break\n    line0\\nline1\\nbreak\nNo match\n\n/A\\z/utf,match_invalid_utf\n    A\\x80\\x42\\n\nNo match\n\n/ab$/match_invalid_utf\n\\= Expect no match            \n    ab\\x80cde         \nNo match\n\n/ab\\z/match_invalid_utf\n\\= Expect no match            \n    ab\\x80cde         \nNo match\n\n/ab\\Z/match_invalid_utf\n\\= Expect no match            \n    ab\\x80cde         \nNo match\n\n/(..)(*scs:(1)ab\\z)/match_invalid_utf\n    ab\\x80cde         \n 0: ab\n 1: ab\n\n/(..)(*scs:(1)ab\\Z)/match_invalid_utf\n    ab\\x80cde         \n 0: ab\n 1: ab\n\n/(..)(*scs:(1)ab$)/match_invalid_utf\n    ab\\x80cde         \n 0: ab\n 1: ab\n\n/(.) \\1/i,ucp\n    i I\n 0: i I\n 1: i\n\n/(.) \\1/i,ucp,turkish_casing\nFailed: error 205 at offset 0: PCRE2_EXTRA_TURKISH_CASING requires UTF in 8-bit mode\n\n/[\\x60-\\x7f]/i,ucp,turkish_casing\nFailed: error 205 at offset 0: PCRE2_EXTRA_TURKISH_CASING requires UTF in 8-bit mode\n    i\n\\= Expect no match\n    I\n\n/[\\x60-\\xc0]/i,ucp,turkish_casing\nFailed: error 205 at offset 0: PCRE2_EXTRA_TURKISH_CASING requires UTF in 8-bit mode\n    i\n\\= Expect no match\n    I\n\n/[\\x80-\\xc0]/i,ucp,turkish_casing\nFailed: error 205 at offset 0: PCRE2_EXTRA_TURKISH_CASING requires UTF in 8-bit mode\n\\= Expect no match\n    i\n    I\n\n# python_octal\n\n/\\400/\nFailed: error 151 at offset 4: octal value is greater than \\377 in 8-bit non-UTF-8 mode\n        here: \\400 |<--|\n\n/abc/substitute_extended\n    abc\\=replace=\\400\nFailed: error -57 at offset 4 in replacement: bad escape sequence in replacement string\n        here: \\400 |<--|\n\n/\\400/python_octal\nFailed: error 202 at offset 4: octal value given by \\ddd is greater than \\377 (forbidden by PCRE2_EXTRA_PYTHON_OCTAL)\n        here: \\400 |<--|\n\n/abc/substitute_extended,python_octal\n    abc\\=replace=\\400\nFailed: error -57 at offset 4 in replacement: bad escape sequence in replacement string\n        here: \\400 |<--|\n\n/\\400/utf\n\n/abc/utf,substitute_extended\n    abc\\=replace=\\400\n 1: \\x{100}\n\n/\\400/utf,python_octal\nFailed: error 202 at offset 4: octal value given by \\ddd is greater than \\377 (forbidden by PCRE2_EXTRA_PYTHON_OCTAL)\n        here: \\400 |<--|\n\n/abc/utf,substitute_extended,python_octal\n    abc\\=replace=\\400\nFailed: error -57 at offset 4 in replacement: bad escape sequence in replacement string\n        here: \\400 |<--|\n\n/[\\x00-\\x2f\\x11-\\xff]+/B\n------------------------------------------------------------------\n        Bra\n        AllAny++\n        Ket\n        End\n------------------------------------------------------------------\n    abcd\n 0: abcd\n\n/[\\x00-\\x2f\\x11-\\xff]{4,}/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\xff]{4,}+\n        Ket\n        End\n------------------------------------------------------------------\n    abcd\n 0: abcd\n\n# End of testinput10\n"
  },
  {
    "path": "testdata/testoutput11-16",
    "content": "# This set of tests is for the 16-bit and 32-bit libraries' basic (non-UTF)\n# features that are not compatible with the 8-bit library, or which give\n# different output in 16-bit or 32-bit mode. The output for the two widths is\n# different, so they have separate output files.\n    \n#forbid_utf\n#newline_default LF ANY ANYCRLF\n\n/[^\\x{c4}]/IB\n------------------------------------------------------------------\n        Bra\n        [^\\x{c4}] (not)\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nSubject length lower bound = 1\n  \n/\\x{100}/I\nCapture group count = 0\nFirst code unit = \\x{100}\nSubject length lower bound = 1\n\n/  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                          # optional leading comment\n(?:    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n# address\n|                     #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)             # one word, optionally followed by....\n(?:\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037]  |  # atom and space parts, or...\n\\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)       |  # comments, or...\n\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n# quoted strings\n)*\n<  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                     # leading <\n(?:  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  ,  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n)* # further okay, if led by comma\n:                                # closing colon\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  )? #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n#       address spec\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  > #                  trailing >\n# name and address\n)  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                       # optional trailing comment\n/Ix\nCapture group count = 0\nContains explicit CR or LF match\nOptions: extended\nStarting code units: \\x09 \\x20 ! \" # $ % & ' ( * + - / 0 1 2 3 4 5 6 7 8\n  9 = ? A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ^ _ ` a b c d e\n  f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\xff\nSubject length lower bound = 3\n\n/[\\h]/B\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}]\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x09<\n 0: \\x09\n\n/[\\h]+/B\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}]++\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x09\\x20\\xa0<\n 0: \\x09 \\xa0\n\n/[\\v]/B\n------------------------------------------------------------------\n        Bra\n        [\\x0a-\\x0d\\x85\\x{2028}-\\x{2029}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\h]/B\n------------------------------------------------------------------\n        Bra\n        [^\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\h+/I\nCapture group count = 0\nStarting code units: \\x09 \\x20 \\xa0 \\xff\nSubject length lower bound = 1\n    \\x{1681}\\x{200b}\\x{1680}\\x{2000}\\x{202f}\\x{3000}\n 0: \\x{1680}\\x{2000}\\x{202f}\\x{3000}\n    \\x{3001}\\x{2fff}\\x{200a}\\xa0\\x{2000}\n 0: \\x{200a}\\xa0\\x{2000}\n\n/[\\h\\x{dc00}]+/IB\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}\\x{dc00}]++\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x09 \\x20 \\xa0 \\xff\nSubject length lower bound = 1\n    \\x{1681}\\x{200b}\\x{1680}\\x{2000}\\x{202f}\\x{3000}\n 0: \\x{1680}\\x{2000}\\x{202f}\\x{3000}\n    \\x{3001}\\x{2fff}\\x{200a}\\xa0\\x{2000}\n 0: \\x{200a}\\xa0\\x{2000}\n\n/\\H+/I\nCapture group count = 0\nSubject length lower bound = 1\n    \\x{1680}\\x{180e}\\x{167f}\\x{1681}\\x{180d}\\x{180f}\n 0: \\x{167f}\\x{1681}\\x{180d}\\x{180f}\n    \\x{2000}\\x{200a}\\x{1fff}\\x{200b}\n 0: \\x{1fff}\\x{200b}\n    \\x{202f}\\x{205f}\\x{202e}\\x{2030}\\x{205e}\\x{2060}\n 0: \\x{202e}\\x{2030}\\x{205e}\\x{2060}\n    \\xa0\\x{3000}\\x9f\\xa1\\x{2fff}\\x{3001}\n 0: \\x9f\\xa1\\x{2fff}\\x{3001}\n\n/[\\H\\x{d800}]+/\n    \\x{1680}\\x{180e}\\x{167f}\\x{1681}\\x{180d}\\x{180f}\n 0: \\x{167f}\\x{1681}\\x{180d}\\x{180f}\n    \\x{2000}\\x{200a}\\x{1fff}\\x{200b}\n 0: \\x{1fff}\\x{200b}\n    \\x{202f}\\x{205f}\\x{202e}\\x{2030}\\x{205e}\\x{2060}\n 0: \\x{202e}\\x{2030}\\x{205e}\\x{2060}\n    \\xa0\\x{3000}\\x9f\\xa1\\x{2fff}\\x{3001}\n 0: \\x9f\\xa1\\x{2fff}\\x{3001}\n\n/\\v+/I\nCapture group count = 0\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85 \\xff\nSubject length lower bound = 1\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n 0: \\x{2028}\\x{2029}\n    \\x09\\x0e\\x84\\x86\\x85\\x0a\\x0b\\x0c\\x0d\n 0: \\x85\\x0a\\x0b\\x0c\\x0d\n\n/[\\v\\x{dc00}]+/IB\n------------------------------------------------------------------\n        Bra\n        [\\x0a-\\x0d\\x85\\x{2028}-\\x{2029}\\x{dc00}]++\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85 \\xff\nSubject length lower bound = 1\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n 0: \\x{2028}\\x{2029}\n    \\x09\\x0e\\x84\\x86\\x85\\x0a\\x0b\\x0c\\x0d\n 0: \\x85\\x0a\\x0b\\x0c\\x0d\n\n/\\V+/I\nCapture group count = 0\nSubject length lower bound = 1\n    \\x{2028}\\x{2029}\\x{2027}\\x{2030}\n 0: \\x{2027}\\x{2030}\n    \\x85\\x0a\\x0b\\x0c\\x0d\\x09\\x0e\\x84\\x86\n 0: \\x09\\x0e\\x84\\x86\n\n/[\\V\\x{d800}]+/\n    \\x{2028}\\x{2029}\\x{2027}\\x{2030}\n 0: \\x{2027}\\x{2030}\n    \\x85\\x0a\\x0b\\x0c\\x0d\\x09\\x0e\\x84\\x86\n 0: \\x09\\x0e\\x84\\x86\n\n/\\R+/I,bsr=unicode\nCapture group count = 0\n\\R matches any Unicode newline\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85 \\xff\nSubject length lower bound = 1\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n 0: \\x{2028}\\x{2029}\n    \\x09\\x0e\\x84\\x86\\x85\\x0a\\x0b\\x0c\\x0d\n 0: \\x85\\x0a\\x0b\\x0c\\x0d\n\n/\\x{d800}\\x{d7ff}\\x{dc00}\\x{dc00}\\x{dcff}\\x{dd00}/I\nCapture group count = 0\nFirst code unit = \\x{d800}\nLast code unit = \\x{dd00}\nSubject length lower bound = 6\n    \\x{d800}\\x{d7ff}\\x{dc00}\\x{dc00}\\x{dcff}\\x{dd00}\n 0: \\x{d800}\\x{d7ff}\\x{dc00}\\x{dc00}\\x{dcff}\\x{dd00}\n\n/[^\\x{80}][^\\x{ff}][^\\x{100}][^\\x{1000}][^\\x{ffff}]/B\n------------------------------------------------------------------\n        Bra\n        [^\\x{80}] (not)\n        [^\\x{ff}] (not)\n        [^\\x{100}] (not)\n        [^\\x{1000}] (not)\n        [^\\x{ffff}] (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\x{80}][^\\x{ff}][^\\x{100}][^\\x{1000}][^\\x{ffff}]/Bi\n------------------------------------------------------------------\n        Bra\n     /i [^\\x{80}] (not)\n     /i [^\\x{ff}] (not)\n     /i [^\\x{100}] (not)\n     /i [^\\x{1000}] (not)\n     /i [^\\x{ffff}] (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\x{100}]*[^\\x{1000}]+[^\\x{ffff}]??[^\\x{8000}]{4,}[^\\x{7fff}]{2,9}?[^\\x{100}]{5,6}+/B\n------------------------------------------------------------------\n        Bra\n        [^\\x{100}]* (not)\n        [^\\x{1000}]+ (not)\n        [^\\x{ffff}]?? (not)\n        [^\\x{8000}]{4} (not)\n        [^\\x{8000}]* (not)\n        [^\\x{7fff}]{2} (not)\n        [^\\x{7fff}]{0,7}? (not)\n        [^\\x{100}]{5} (not)\n        [^\\x{100}]?+ (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\x{100}]*[^\\x{1000}]+[^\\x{ffff}]??[^\\x{8000}]{4,}[^\\x{7fff}]{2,9}?[^\\x{100}]{5,6}+/Bi\n------------------------------------------------------------------\n        Bra\n     /i [^\\x{100}]* (not)\n     /i [^\\x{1000}]+ (not)\n     /i [^\\x{ffff}]?? (not)\n     /i [^\\x{8000}]{4} (not)\n     /i [^\\x{8000}]* (not)\n     /i [^\\x{7fff}]{2} (not)\n     /i [^\\x{7fff}]{0,7}? (not)\n     /i [^\\x{100}]{5} (not)\n     /i [^\\x{100}]?+ (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/mark\n    XX\n 0: XX\nMK: 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\n     \n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/mark\n    XX\n 0: XX\nMK: 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE\n\n/\\u0100/B,alt_bsux,allow_empty_class,match_unset_backref\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\u0100-\\u0200]/B,alt_bsux,allow_empty_class,match_unset_backref\n------------------------------------------------------------------\n        Bra\n        [\\x{100}-\\x{200}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\ud800/B,alt_bsux,allow_empty_class,match_unset_backref\n------------------------------------------------------------------\n        Bra\n        \\x{d800}\n        Ket\n        End\n------------------------------------------------------------------\n\n/^\\x{ffff}+/i\n    \\x{ffff}\n 0: \\x{ffff}\n\n/^\\x{ffff}?/i\n    \\x{ffff}\n 0: \\x{ffff}\n\n/^\\x{ffff}*/i\n    \\x{ffff}\n 0: \\x{ffff}\n\n/^\\x{ffff}{3}/i\n    \\x{ffff}\\x{ffff}\\x{ffff}\n 0: \\x{ffff}\\x{ffff}\\x{ffff}\n\n/^\\x{ffff}{0,3}/i\n    \\x{ffff}\n 0: \\x{ffff}\n\n/[^\\x00-a]{12,}[^b-\\xff]*/B\n------------------------------------------------------------------\n        Bra\n        [^\\x00-a]{12,}\n        [^b-\\xff]*+\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\s]*\\s* [^\\W]+\\W+ [^\\d]*?\\d0 [^\\d\\w]{4,6}?\\w*A/B\n------------------------------------------------------------------\n        Bra\n        [^\\x09-\\x0d ]*\n        \\s*\n         \n        [0-9A-Z_a-z]++\n        \\W+\n         \n        [^0-9]*?\n        \\d\n        0 \n        [^0-9A-Z_a-z]{4,6}?\n        \\w*\n        A\n        Ket\n        End\n------------------------------------------------------------------\n\n/a*[b-\\x{200}]?a#a*[b-\\x{200}]?b#[a-f]*[g-\\x{200}]*#[g-\\x{200}]*[a-c]*#[g-\\x{200}]*[a-h]*/B\n------------------------------------------------------------------\n        Bra\n        a*\n        [b-\\xff\\x{100}-\\x{200}]?+\n        a#\n        a*+\n        [b-\\xff\\x{100}-\\x{200}]?\n        b#\n        [a-f]*+\n        [g-\\xff\\x{100}-\\x{200}]*+\n        #\n        [g-\\xff\\x{100}-\\x{200}]*+\n        [a-c]*+\n        #\n        [g-\\xff\\x{100}-\\x{200}]*\n        [a-h]*+\n        Ket\n        End\n------------------------------------------------------------------\n\n/^[\\x{1234}\\x{4321}]{2,4}?/\n    \\x{1234}\\x{1234}\\x{1234}\n 0: \\x{1234}\\x{1234}\n\n# Check maximum non-UTF character size for the 16-bit library.\n\n/\\x{ffff}/\n    A\\x{ffff}B\n 0: \\x{ffff}\n\n/\\x{10000}/\nFailed: error 134 at offset 8: character code point value in \\x{} or \\o{} is too large\n        here: \\x{10000 |<--| }\n\n/\\o{20000}/\n\n# Check maximum character size for the 32-bit library. These will all give\n# errors in the 16-bit library.\n\n/\\x{110000}/\nFailed: error 134 at offset 9: character code point value in \\x{} or \\o{} is too large\n        here: \\x{110000 |<--| }\n\n/\\x{7fffffff}/\nFailed: error 134 at offset 11: character code point value in \\x{} or \\o{} is too large\n        here: ...x{7fffffff |<--| }\n\n/\\x{80000000}/\nFailed: error 134 at offset 11: character code point value in \\x{} or \\o{} is too large\n        here: ...x{80000000 |<--| }\n\n/\\x{ffffffff}/\nFailed: error 134 at offset 11: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n\n/\\x{100000000}/\nFailed: error 134 at offset 12: character code point value in \\x{} or \\o{} is too large\n        here: ...{100000000 |<--| }\n\n/\\o{17777777777}/\nFailed: error 134 at offset 14: character code point value in \\x{} or \\o{} is too large\n        here: ...7777777777 |<--| }\n\n/\\o{20000000000}/\nFailed: error 134 at offset 14: character code point value in \\x{} or \\o{} is too large\n        here: ...0000000000 |<--| }\n\n/\\o{37777777777}/\nFailed: error 134 at offset 14: character code point value in \\x{} or \\o{} is too large\n        here: ...7777777777 |<--| }\n\n/\\o{40000000000}/\nFailed: error 134 at offset 14: character code point value in \\x{} or \\o{} is too large\n        here: ...0000000000 |<--| }\n\n/\\x{7fffffff}\\x{7fffffff}/I\nFailed: error 134 at offset 11: character code point value in \\x{} or \\o{} is too large\n        here: ...x{7fffffff |<--| }\\x{7fffff...\n\n/\\x{80000000}\\x{80000000}/I\nFailed: error 134 at offset 11: character code point value in \\x{} or \\o{} is too large\n        here: ...x{80000000 |<--| }\\x{800000...\n\n/\\x{ffffffff}\\x{ffffffff}/I\nFailed: error 134 at offset 11: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\\x{ffffff...\n\n# Non-UTF characters \n\n/.{2,3}/\n    \\x{400000}\\x{400001}\\x{400002}\\x{400003}\n** Character \\x{400000} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\n** Character \\x{400001} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\n** Character \\x{400002} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\n** Character \\x{400003} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\n 0: \\x00\\x01\\x02\n\n/\\x{400000}\\x{800000}/IBi\nFailed: error 134 at offset 9: character code point value in \\x{} or \\o{} is too large\n        here: \\x{400000 |<--| }\\x{800000...\n\n# Check character ranges \n\n/[\\H]/IB\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x08\\x0a-\\x1f!-\\x9f\\xa1-\\xff\\x{100}-\\x{167f}\\x{1681}-\\x{180d}\\x{180f}-\\x{1fff}\\x{200b}-\\x{202e}\\x{2030}-\\x{205e}\\x{2060}-\\x{2fff}\\x{3001}-\\x{ffff}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x0a \\x0b\n  \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a\n  \\x1b \\x1c \\x1d \\x1e \\x1f ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9\n  : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^\n  _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80\n  \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f\n  \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e\n  \\x9f \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae\n  \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd\n  \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc\n  \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb\n  \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea\n  \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9\n  \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/[\\V]/IB\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x09\\x0e-\\x84\\x86-\\xff\\x{100}-\\x{2027}\\x{202a}-\\x{ffff}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0e\n  \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d\n  \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = >\n  ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c\n  d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80 \\x81 \\x82\n  \\x83 \\x84 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92\n  \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1\n  \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0\n  \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf\n  \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce\n  \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd\n  \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec\n  \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb\n  \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/(*THEN:\\[A]{65501})/expand\n\n# We can use pcre2test's utf8_input modifier to create wide pattern characters,\n# even though this test is run when UTF is not supported.\n\n/a\\x{d800}b/utf8_input\n    ab\n 0: a\\x{d800}b\n    a\\x{d800}b\n 0: a\\x{d800}b\n    a\\o{154000}b\n 0: a\\x{d800}b\n\\= Expect warning unless 32bit\n    a\\N{U+d800}b\n** Warning: character \\N{U+d800} is a surrogate and should not be encoded as UTF-16\n 0: a\\x{d800}b\n\n/a\\x{ffff}b/utf8_input\n    a￿b\n 0: a\\x{ffff}b\n    a\\x{ffff}b\n 0: a\\x{ffff}b\n    a\\o{177777}b\n 0: a\\x{ffff}b\n    a\\N{U+ffff}b\n 0: a\\x{ffff}b\n\n/abz/utf8_input\n** Failed: character value greater than 0xffff cannot be converted to 16-bit in non-UTF mode\n    abz\n    ab\\x{7fffffff}z\n    ab\\o{17777777777}z\n    ab\\N{U+7fffffff}z\n\n/abz/utf8_input\n** Failed: invalid UTF-8 string cannot be converted to 16-bit string\n    abz\n    ab\\x{ffffffff}z \n\n/abAz/utf8_input\n** Failed: invalid UTF-8 string cannot be converted to 16-bit string\n    abAz\n    ab\\x{80000041}z \n\\= Expect no match\n    abAz\n    aAz\n    ab\\377Az\n    ab\\xff\\N{U+0041}z\n    ab\\N{U+ff}\\N{U+41}z\n\n/ab\\x{80000041}z/\nFailed: error 134 at offset 13: character code point value in \\x{} or \\o{} is too large\n        here: ...x{80000041 |<--| }z\n    ab\\x{80000041}z\n\n/(?i:A{1,}\\6666666666)/\n    A\\x{1b6}6666666\n 0: A\\x{1b6}6666666\n\n/abc/substitute_extended,replace=>\\777<\n    abc\n 1: >\\x{1ff}<\n\n/abc/substitute_extended,replace=>\\o{012345}<\n    abc\n 1: >\\x{14e5}<\n\n# Character range merging tests\n\n/[\\x{100}-\\x{200}\\H\\x{8000}-\\x{9000}]/B\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x08\\x0a-\\x1f!-\\x9f\\xa1-\\xff\\x{100}-\\x{167f}\\x{1681}-\\x{180d}\\x{180f}-\\x{1fff}\\x{200b}-\\x{202e}\\x{2030}-\\x{205e}\\x{2060}-\\x{2fff}\\x{3001}-\\x{ffff}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x{100}-\\x{200}\\V\\x{8000}-\\x{9000}]/B\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x09\\x0e-\\x84\\x86-\\xff\\x{100}-\\x{2027}\\x{202a}-\\x{ffff}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x00-\\x{6000}\\x{3000}-\\x{ffff}]#[\\x00-\\x{6000}\\x{3000}-\\x{ffff}]{5,7}?/B\n------------------------------------------------------------------\n        Bra\n        AllAny\n        #\n        AllAny{5}\n        AllAny{0,2}?\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x00-\\x{6000}\\x{3000}-\\x{ffffffff}]#[\\x00-\\x{6000}\\x{3000}-\\x{ffffffff}]{5,7}?/B\nFailed: error 134 at offset 34: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }]#[\\x00-\\...\n\n/[\\x00-\\x2f\\x11-\\xff]*?!/B\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\xff]*?\n        !\n        Ket\n        End\n------------------------------------------------------------------\n    abcd!e\n 0: abcd!\n\n/i/turkish_casing\nFailed: error 204 at offset 0: PCRE2_EXTRA_TURKISH_CASING require Unicode (UTF or UCP) mode\n\n# Character list tests\n\n/([\\x{100}-\\x{7fff}\\x{9000}\\x{9002}\\x{9004}\\x{9006}\\x{9008}\\x{10000}-\\x{7fffffff}]{3,8}?).#/B\nFailed: error 134 at offset 66: character code point value in \\x{} or \\o{} is too large\n        here: ...8}\\x{10000 |<--| }-\\x{7ffff...\n  \\x{9001}\\x{9007}\\x{8000}\\x{ffff}\\x{9002}\\x{7fff}\\x{10000}\\x{7fffffff}\\x{500000}\\x{9006}#\n\n/([\\x{3000}\\x{3001}\\x{3003}\\x{3004}\\x{3006}\\x{3007}\\x{8000}-\\x{ffff}\\x{100001}\\x{100002}\\x{100004}\\x{100005}\\x{100007}\\x{100008}\\x{10000a}\\x{10000b}\\x{80000000}-\\x{ffffffff}]{5,}).#/B\nFailed: error 134 at offset 76: character code point value in \\x{} or \\o{} is too large\n        here: ...}\\x{100001 |<--| }\\x{100002...\n  \\x{2fff}\\x{3002}\\x{7fff}\\x{100000}\\x{7fffffff}\\x{3000}\\x{3007}\\x{8000}\\x{ffff}\\x{100001}\\x{10000b}\\x{80000000}\\x{ffffffff}\\x{3000}#\n\n/([^\\x{4000}\\x{4002}\\x{4004}\\x{4005}\\x{4007}\\x{4009}\\x{400a}\\x{f000}\\x{f002}\\x{f004}\\x{f005}\\x{f007}\\x{f009}\\x{f00a}\\x{100000}\\x{100002}\\x{100004}\\x{100005}\\x{100007}\\x{100009}\\x{10000a}\\x{a0000000}\\x{a0000002}\\x{a0000004}\\x{a0000005}\\x{a0000007}\\x{a0000009}\\x{a000000a}]+).#/B\nFailed: error 134 at offset 124: character code point value in \\x{} or \\o{} is too large\n        here: ...}\\x{100000 |<--| }\\x{100002...\n  \\x{4000}\\x{4002}\\x{4004}\\x{4005}\\x{4007}\\x{4009}\\x{400a}\\x{3fff}\\x{4001}\\x{4003}\\x{4006}\\x{4008}\\x{400b}\\x{100}#\n  \\x{f000}\\x{f002}\\x{f004}\\x{f005}\\x{f007}\\x{f009}\\x{f00a}\\x{efff}\\x{f001}\\x{f003}\\x{f006}\\x{f008}\\x{f00b}\\x{100}#\n  \\x{100000}\\x{100002}\\x{100004}\\x{100005}\\x{100007}\\x{100009}\\x{10000a}\\x{fffff}\\x{100001}\\x{100003}\\x{100006}\\x{100008}\\x{10000b}\\x{100}#\n  \\x{a0000000}\\x{a0000002}\\x{a0000004}\\x{a0000005}\\x{a0000007}\\x{a0000009}\\x{a000000a}\\x{9fffffff}\\x{a0000001}\\x{a0000003}\\x{a0000006}\\x{a0000008}\\x{a000000b}\\x{100}#\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (UTS#18)\n\n# META_BIGVALUE tests\n\n/\\x{80000000}/B\nFailed: error 134 at offset 11: character code point value in \\x{} or \\o{} is too large\n        here: ...x{80000000 |<--| }\n    \\x{80000000}\n\\= Expect no match\n    \\x{7fffffff}\n    \\x{80000001}\n\n/[\\x{80000000}-\\x{8000000f}\\x{8fffffff}]/B\nFailed: error 134 at offset 12: character code point value in \\x{} or \\o{} is too large\n        here: ...x{80000000 |<--| }-\\x{80000...\n    \\x{80000002}\n    \\x{8fffffff}\n\\= Expect no match\n    \\x{7fffffff}\n    \\x{90000000}\n\n/\\x{80000000}/B,alt_extended_class\nFailed: error 134 at offset 11: character code point value in \\x{} or \\o{} is too large\n        here: ...x{80000000 |<--| }\n    \\x{80000000}\n\\= Expect no match\n    \\x{7fffffff}\n    \\x{80000001}\n\n/[\\x{80000000}-\\x{8000000f}\\x{8fffffff}]/B,alt_extended_class\nFailed: error 134 at offset 12: character code point value in \\x{} or \\o{} is too large\n        here: ...x{80000000 |<--| }-\\x{80000...\n    \\x{80000002}\n    \\x{8fffffff}\n\\= Expect no match\n    \\x{7fffffff}\n    \\x{90000000}\n\n/[\\x{80000000}-\\x{8000000f}--\\x{80000002}]/B,alt_extended_class\nFailed: error 134 at offset 12: character code point value in \\x{} or \\o{} is too large\n        here: ...x{80000000 |<--| }-\\x{80000...\n    \\x{80000001}\n    \\x{80000003}\n\\= Expect no match\n    \\x{80000002}\n\n/[[\\x{80000000}-\\x{8000000f}]--[\\x{80000002}]]/B,alt_extended_class\nFailed: error 134 at offset 13: character code point value in \\x{} or \\o{} is too large\n        here: ...x{80000000 |<--| }-\\x{80000...\n    \\x{80000001}\n    \\x{80000003}\n\\= Expect no match\n    \\x{80000002}\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n# META_BIGVALUE tests\n\n/(?[[\\x{80000000}-\\x{8000000f}]+\\x{8fffffff}])/B\nFailed: error 134 at offset 15: character code point value in \\x{} or \\o{} is too large\n        here: ...x{80000000 |<--| }-\\x{80000...\n    \\x{80000002}\n    \\x{8fffffff}\n\\= Expect no match\n    \\x{7fffffff}\n    \\x{90000000}\n\n/(?[[\\x{80000000}-\\x{8000000f}]-\\x{80000002}])/B\nFailed: error 134 at offset 15: character code point value in \\x{} or \\o{} is too large\n        here: ...x{80000000 |<--| }-\\x{80000...\n    \\x{80000001}\n    \\x{80000003}\n\\= Expect no match\n    \\x{80000002}\n\n/(?[[\\x{80000000}-\\x{8000000f}]-\\x{80000002}])/B\nFailed: error 134 at offset 15: character code point value in \\x{} or \\o{} is too large\n        here: ...x{80000000 |<--| }-\\x{80000...\n    \\x{80000001}\n    \\x{80000003}\n\\= Expect no match\n    \\x{80000002}\n\n# --------------\n\n# End of testinput11\n"
  },
  {
    "path": "testdata/testoutput11-32",
    "content": "# This set of tests is for the 16-bit and 32-bit libraries' basic (non-UTF)\n# features that are not compatible with the 8-bit library, or which give\n# different output in 16-bit or 32-bit mode. The output for the two widths is\n# different, so they have separate output files.\n    \n#forbid_utf\n#newline_default LF ANY ANYCRLF\n\n/[^\\x{c4}]/IB\n------------------------------------------------------------------\n        Bra\n        [^\\x{c4}] (not)\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nSubject length lower bound = 1\n  \n/\\x{100}/I\nCapture group count = 0\nFirst code unit = \\x{100}\nSubject length lower bound = 1\n\n/  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                          # optional leading comment\n(?:    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n# address\n|                     #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)             # one word, optionally followed by....\n(?:\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037]  |  # atom and space parts, or...\n\\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)       |  # comments, or...\n\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n# quoted strings\n)*\n<  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                     # leading <\n(?:  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  ,  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n)* # further okay, if led by comma\n:                                # closing colon\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  )? #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n#       address spec\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  > #                  trailing >\n# name and address\n)  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                       # optional trailing comment\n/Ix\nCapture group count = 0\nContains explicit CR or LF match\nOptions: extended\nStarting code units: \\x09 \\x20 ! \" # $ % & ' ( * + - / 0 1 2 3 4 5 6 7 8\n  9 = ? A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ^ _ ` a b c d e\n  f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\xff\nSubject length lower bound = 3\n\n/[\\h]/B\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}]\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x09<\n 0: \\x09\n\n/[\\h]+/B\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}]++\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x09\\x20\\xa0<\n 0: \\x09 \\xa0\n\n/[\\v]/B\n------------------------------------------------------------------\n        Bra\n        [\\x0a-\\x0d\\x85\\x{2028}-\\x{2029}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\h]/B\n------------------------------------------------------------------\n        Bra\n        [^\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\h+/I\nCapture group count = 0\nStarting code units: \\x09 \\x20 \\xa0 \\xff\nSubject length lower bound = 1\n    \\x{1681}\\x{200b}\\x{1680}\\x{2000}\\x{202f}\\x{3000}\n 0: \\x{1680}\\x{2000}\\x{202f}\\x{3000}\n    \\x{3001}\\x{2fff}\\x{200a}\\xa0\\x{2000}\n 0: \\x{200a}\\xa0\\x{2000}\n\n/[\\h\\x{dc00}]+/IB\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}\\x{dc00}]++\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x09 \\x20 \\xa0 \\xff\nSubject length lower bound = 1\n    \\x{1681}\\x{200b}\\x{1680}\\x{2000}\\x{202f}\\x{3000}\n 0: \\x{1680}\\x{2000}\\x{202f}\\x{3000}\n    \\x{3001}\\x{2fff}\\x{200a}\\xa0\\x{2000}\n 0: \\x{200a}\\xa0\\x{2000}\n\n/\\H+/I\nCapture group count = 0\nSubject length lower bound = 1\n    \\x{1680}\\x{180e}\\x{167f}\\x{1681}\\x{180d}\\x{180f}\n 0: \\x{167f}\\x{1681}\\x{180d}\\x{180f}\n    \\x{2000}\\x{200a}\\x{1fff}\\x{200b}\n 0: \\x{1fff}\\x{200b}\n    \\x{202f}\\x{205f}\\x{202e}\\x{2030}\\x{205e}\\x{2060}\n 0: \\x{202e}\\x{2030}\\x{205e}\\x{2060}\n    \\xa0\\x{3000}\\x9f\\xa1\\x{2fff}\\x{3001}\n 0: \\x9f\\xa1\\x{2fff}\\x{3001}\n\n/[\\H\\x{d800}]+/\n    \\x{1680}\\x{180e}\\x{167f}\\x{1681}\\x{180d}\\x{180f}\n 0: \\x{167f}\\x{1681}\\x{180d}\\x{180f}\n    \\x{2000}\\x{200a}\\x{1fff}\\x{200b}\n 0: \\x{1fff}\\x{200b}\n    \\x{202f}\\x{205f}\\x{202e}\\x{2030}\\x{205e}\\x{2060}\n 0: \\x{202e}\\x{2030}\\x{205e}\\x{2060}\n    \\xa0\\x{3000}\\x9f\\xa1\\x{2fff}\\x{3001}\n 0: \\x9f\\xa1\\x{2fff}\\x{3001}\n\n/\\v+/I\nCapture group count = 0\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85 \\xff\nSubject length lower bound = 1\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n 0: \\x{2028}\\x{2029}\n    \\x09\\x0e\\x84\\x86\\x85\\x0a\\x0b\\x0c\\x0d\n 0: \\x85\\x0a\\x0b\\x0c\\x0d\n\n/[\\v\\x{dc00}]+/IB\n------------------------------------------------------------------\n        Bra\n        [\\x0a-\\x0d\\x85\\x{2028}-\\x{2029}\\x{dc00}]++\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85 \\xff\nSubject length lower bound = 1\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n 0: \\x{2028}\\x{2029}\n    \\x09\\x0e\\x84\\x86\\x85\\x0a\\x0b\\x0c\\x0d\n 0: \\x85\\x0a\\x0b\\x0c\\x0d\n\n/\\V+/I\nCapture group count = 0\nSubject length lower bound = 1\n    \\x{2028}\\x{2029}\\x{2027}\\x{2030}\n 0: \\x{2027}\\x{2030}\n    \\x85\\x0a\\x0b\\x0c\\x0d\\x09\\x0e\\x84\\x86\n 0: \\x09\\x0e\\x84\\x86\n\n/[\\V\\x{d800}]+/\n    \\x{2028}\\x{2029}\\x{2027}\\x{2030}\n 0: \\x{2027}\\x{2030}\n    \\x85\\x0a\\x0b\\x0c\\x0d\\x09\\x0e\\x84\\x86\n 0: \\x09\\x0e\\x84\\x86\n\n/\\R+/I,bsr=unicode\nCapture group count = 0\n\\R matches any Unicode newline\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85 \\xff\nSubject length lower bound = 1\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n 0: \\x{2028}\\x{2029}\n    \\x09\\x0e\\x84\\x86\\x85\\x0a\\x0b\\x0c\\x0d\n 0: \\x85\\x0a\\x0b\\x0c\\x0d\n\n/\\x{d800}\\x{d7ff}\\x{dc00}\\x{dc00}\\x{dcff}\\x{dd00}/I\nCapture group count = 0\nFirst code unit = \\x{d800}\nLast code unit = \\x{dd00}\nSubject length lower bound = 6\n    \\x{d800}\\x{d7ff}\\x{dc00}\\x{dc00}\\x{dcff}\\x{dd00}\n 0: \\x{d800}\\x{d7ff}\\x{dc00}\\x{dc00}\\x{dcff}\\x{dd00}\n\n/[^\\x{80}][^\\x{ff}][^\\x{100}][^\\x{1000}][^\\x{ffff}]/B\n------------------------------------------------------------------\n        Bra\n        [^\\x{80}] (not)\n        [^\\x{ff}] (not)\n        [^\\x{100}] (not)\n        [^\\x{1000}] (not)\n        [^\\x{ffff}] (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\x{80}][^\\x{ff}][^\\x{100}][^\\x{1000}][^\\x{ffff}]/Bi\n------------------------------------------------------------------\n        Bra\n     /i [^\\x{80}] (not)\n     /i [^\\x{ff}] (not)\n     /i [^\\x{100}] (not)\n     /i [^\\x{1000}] (not)\n     /i [^\\x{ffff}] (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\x{100}]*[^\\x{1000}]+[^\\x{ffff}]??[^\\x{8000}]{4,}[^\\x{7fff}]{2,9}?[^\\x{100}]{5,6}+/B\n------------------------------------------------------------------\n        Bra\n        [^\\x{100}]* (not)\n        [^\\x{1000}]+ (not)\n        [^\\x{ffff}]?? (not)\n        [^\\x{8000}]{4} (not)\n        [^\\x{8000}]* (not)\n        [^\\x{7fff}]{2} (not)\n        [^\\x{7fff}]{0,7}? (not)\n        [^\\x{100}]{5} (not)\n        [^\\x{100}]?+ (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\x{100}]*[^\\x{1000}]+[^\\x{ffff}]??[^\\x{8000}]{4,}[^\\x{7fff}]{2,9}?[^\\x{100}]{5,6}+/Bi\n------------------------------------------------------------------\n        Bra\n     /i [^\\x{100}]* (not)\n     /i [^\\x{1000}]+ (not)\n     /i [^\\x{ffff}]?? (not)\n     /i [^\\x{8000}]{4} (not)\n     /i [^\\x{8000}]* (not)\n     /i [^\\x{7fff}]{2} (not)\n     /i [^\\x{7fff}]{0,7}? (not)\n     /i [^\\x{100}]{5} (not)\n     /i [^\\x{100}]?+ (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/mark\n    XX\n 0: XX\nMK: 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\n     \n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/mark\n    XX\n 0: XX\nMK: 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE\n\n/\\u0100/B,alt_bsux,allow_empty_class,match_unset_backref\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\u0100-\\u0200]/B,alt_bsux,allow_empty_class,match_unset_backref\n------------------------------------------------------------------\n        Bra\n        [\\x{100}-\\x{200}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\ud800/B,alt_bsux,allow_empty_class,match_unset_backref\n------------------------------------------------------------------\n        Bra\n        \\x{d800}\n        Ket\n        End\n------------------------------------------------------------------\n\n/^\\x{ffff}+/i\n    \\x{ffff}\n 0: \\x{ffff}\n\n/^\\x{ffff}?/i\n    \\x{ffff}\n 0: \\x{ffff}\n\n/^\\x{ffff}*/i\n    \\x{ffff}\n 0: \\x{ffff}\n\n/^\\x{ffff}{3}/i\n    \\x{ffff}\\x{ffff}\\x{ffff}\n 0: \\x{ffff}\\x{ffff}\\x{ffff}\n\n/^\\x{ffff}{0,3}/i\n    \\x{ffff}\n 0: \\x{ffff}\n\n/[^\\x00-a]{12,}[^b-\\xff]*/B\n------------------------------------------------------------------\n        Bra\n        [^\\x00-a]{12,}\n        [^b-\\xff]*+\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\s]*\\s* [^\\W]+\\W+ [^\\d]*?\\d0 [^\\d\\w]{4,6}?\\w*A/B\n------------------------------------------------------------------\n        Bra\n        [^\\x09-\\x0d ]*\n        \\s*\n         \n        [0-9A-Z_a-z]++\n        \\W+\n         \n        [^0-9]*?\n        \\d\n        0 \n        [^0-9A-Z_a-z]{4,6}?\n        \\w*\n        A\n        Ket\n        End\n------------------------------------------------------------------\n\n/a*[b-\\x{200}]?a#a*[b-\\x{200}]?b#[a-f]*[g-\\x{200}]*#[g-\\x{200}]*[a-c]*#[g-\\x{200}]*[a-h]*/B\n------------------------------------------------------------------\n        Bra\n        a*\n        [b-\\xff\\x{100}-\\x{200}]?+\n        a#\n        a*+\n        [b-\\xff\\x{100}-\\x{200}]?\n        b#\n        [a-f]*+\n        [g-\\xff\\x{100}-\\x{200}]*+\n        #\n        [g-\\xff\\x{100}-\\x{200}]*+\n        [a-c]*+\n        #\n        [g-\\xff\\x{100}-\\x{200}]*\n        [a-h]*+\n        Ket\n        End\n------------------------------------------------------------------\n\n/^[\\x{1234}\\x{4321}]{2,4}?/\n    \\x{1234}\\x{1234}\\x{1234}\n 0: \\x{1234}\\x{1234}\n\n# Check maximum non-UTF character size for the 16-bit library.\n\n/\\x{ffff}/\n    A\\x{ffff}B\n 0: \\x{ffff}\n\n/\\x{10000}/\n\n/\\o{20000}/\n\n# Check maximum character size for the 32-bit library. These will all give\n# errors in the 16-bit library.\n\n/\\x{110000}/\n\n/\\x{7fffffff}/\n\n/\\x{80000000}/\n\n/\\x{ffffffff}/\n\n/\\x{100000000}/\nFailed: error 134 at offset 12: character code point value in \\x{} or \\o{} is too large\n        here: ...{100000000 |<--| }\n\n/\\o{17777777777}/\n\n/\\o{20000000000}/\n\n/\\o{37777777777}/\n\n/\\o{40000000000}/\nFailed: error 134 at offset 14: character code point value in \\x{} or \\o{} is too large\n        here: ...0000000000 |<--| }\n\n/\\x{7fffffff}\\x{7fffffff}/I\nCapture group count = 0\nFirst code unit = \\x{7fffffff}\nLast code unit = \\x{7fffffff}\nSubject length lower bound = 2\n\n/\\x{80000000}\\x{80000000}/I\nCapture group count = 0\nFirst code unit = \\x{80000000}\nLast code unit = \\x{80000000}\nSubject length lower bound = 2\n\n/\\x{ffffffff}\\x{ffffffff}/I\nCapture group count = 0\nFirst code unit = \\x{ffffffff}\nLast code unit = \\x{ffffffff}\nSubject length lower bound = 2\n\n# Non-UTF characters \n\n/.{2,3}/\n    \\x{400000}\\x{400001}\\x{400002}\\x{400003}\n 0: \\x{400000}\\x{400001}\\x{400002}\n\n/\\x{400000}\\x{800000}/IBi\n------------------------------------------------------------------\n        Bra\n     /i \\x{400000}\\x{800000}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless\nFirst code unit = \\x{400000}\nLast code unit = \\x{800000}\nSubject length lower bound = 2\n\n# Check character ranges \n\n/[\\H]/IB\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x08\\x0a-\\x1f!-\\x9f\\xa1-\\xff\\x{100}-\\x{167f}\\x{1681}-\\x{180d}\\x{180f}-\\x{1fff}\\x{200b}-\\x{202e}\\x{2030}-\\x{205e}\\x{2060}-\\x{2fff}\\x{3001}-\\x{ffffffff}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x0a \\x0b\n  \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a\n  \\x1b \\x1c \\x1d \\x1e \\x1f ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9\n  : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^\n  _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80\n  \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f\n  \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e\n  \\x9f \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae\n  \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd\n  \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc\n  \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb\n  \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea\n  \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9\n  \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/[\\V]/IB\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x09\\x0e-\\x84\\x86-\\xff\\x{100}-\\x{2027}\\x{202a}-\\x{ffffffff}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0e\n  \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d\n  \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = >\n  ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c\n  d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80 \\x81 \\x82\n  \\x83 \\x84 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92\n  \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1\n  \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0\n  \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf\n  \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce\n  \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd\n  \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec\n  \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb\n  \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/(*THEN:\\[A]{65501})/expand\n\n# We can use pcre2test's utf8_input modifier to create wide pattern characters,\n# even though this test is run when UTF is not supported.\n\n/a\\x{d800}b/utf8_input\n    ab\n 0: a\\x{d800}b\n    a\\x{d800}b\n 0: a\\x{d800}b\n    a\\o{154000}b\n 0: a\\x{d800}b\n\\= Expect warning unless 32bit\n    a\\N{U+d800}b\n 0: a\\x{d800}b\n\n/a\\x{ffff}b/utf8_input\n    a￿b\n 0: a\\x{ffff}b\n    a\\x{ffff}b\n 0: a\\x{ffff}b\n    a\\o{177777}b\n 0: a\\x{ffff}b\n    a\\N{U+ffff}b\n 0: a\\x{ffff}b\n\n/abz/utf8_input\n    abz\n 0: ab\\x{7fffffff}z\n    ab\\x{7fffffff}z\n 0: ab\\x{7fffffff}z\n    ab\\o{17777777777}z\n 0: ab\\x{7fffffff}z\n    ab\\N{U+7fffffff}z\n** Warning: character \\N{U+7fffffff} is greater than 0x10ffff and should not be encoded as UTF-32\n 0: ab\\x{7fffffff}z\n\n/abz/utf8_input\n    abz\n 0: ab\\x{ffffffff}z\n    ab\\x{ffffffff}z \n 0: ab\\x{ffffffff}z\n\n/abAz/utf8_input\n    abAz\n 0: ab\\x{80000041}z\n    ab\\x{80000041}z \n 0: ab\\x{80000041}z\n\\= Expect no match\n    abAz\nNo match\n    aAz\nNo match\n    ab\\377Az\nNo match\n    ab\\xff\\N{U+0041}z\nNo match\n    ab\\N{U+ff}\\N{U+41}z\nNo match\n\n/ab\\x{80000041}z/\n    ab\\x{80000041}z\n 0: ab\\x{80000041}z\n\n/(?i:A{1,}\\6666666666)/\n    A\\x{1b6}6666666\n 0: A\\x{1b6}6666666\n\n/abc/substitute_extended,replace=>\\777<\n    abc\n 1: >\\x{1ff}<\n\n/abc/substitute_extended,replace=>\\o{012345}<\n    abc\n 1: >\\x{14e5}<\n\n# Character range merging tests\n\n/[\\x{100}-\\x{200}\\H\\x{8000}-\\x{9000}]/B\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x08\\x0a-\\x1f!-\\x9f\\xa1-\\xff\\x{100}-\\x{167f}\\x{1681}-\\x{180d}\\x{180f}-\\x{1fff}\\x{200b}-\\x{202e}\\x{2030}-\\x{205e}\\x{2060}-\\x{2fff}\\x{3001}-\\x{ffffffff}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x{100}-\\x{200}\\V\\x{8000}-\\x{9000}]/B\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x09\\x0e-\\x84\\x86-\\xff\\x{100}-\\x{2027}\\x{202a}-\\x{ffffffff}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x00-\\x{6000}\\x{3000}-\\x{ffff}]#[\\x00-\\x{6000}\\x{3000}-\\x{ffff}]{5,7}?/B\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\xff\\x{100}-\\x{ffff}]\n        #\n        [\\x00-\\xff\\x{100}-\\x{ffff}]{5,7}?\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x00-\\x{6000}\\x{3000}-\\x{ffffffff}]#[\\x00-\\x{6000}\\x{3000}-\\x{ffffffff}]{5,7}?/B\n------------------------------------------------------------------\n        Bra\n        AllAny\n        #\n        AllAny{5}\n        AllAny{0,2}?\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x00-\\x2f\\x11-\\xff]*?!/B\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\xff]*?\n        !\n        Ket\n        End\n------------------------------------------------------------------\n    abcd!e\n 0: abcd!\n\n/i/turkish_casing\nFailed: error 204 at offset 0: PCRE2_EXTRA_TURKISH_CASING require Unicode (UTF or UCP) mode\n\n# Character list tests\n\n/([\\x{100}-\\x{7fff}\\x{9000}\\x{9002}\\x{9004}\\x{9006}\\x{9008}\\x{10000}-\\x{7fffffff}]{3,8}?).#/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        [\\x{100}-\\x{7fff}\\x{9000}\\x{9002}\\x{9004}\\x{9006}\\x{9008}\\x{10000}-\\x{7fffffff}]{3,8}?\n        Ket\n        Any\n        #\n        Ket\n        End\n------------------------------------------------------------------\n  \\x{9001}\\x{9007}\\x{8000}\\x{ffff}\\x{9002}\\x{7fff}\\x{10000}\\x{7fffffff}\\x{500000}\\x{9006}#\n 0: \\x{9002}\\x{7fff}\\x{10000}\\x{7fffffff}\\x{500000}\\x{9006}#\n 1: \\x{9002}\\x{7fff}\\x{10000}\\x{7fffffff}\\x{500000}\n\n/([\\x{3000}\\x{3001}\\x{3003}\\x{3004}\\x{3006}\\x{3007}\\x{8000}-\\x{ffff}\\x{100001}\\x{100002}\\x{100004}\\x{100005}\\x{100007}\\x{100008}\\x{10000a}\\x{10000b}\\x{80000000}-\\x{ffffffff}]{5,}).#/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        [\\x{3000}-\\x{3001}\\x{3003}-\\x{3004}\\x{3006}-\\x{3007}\\x{8000}-\\x{ffff}\\x{100001}-\\x{100002}\\x{100004}-\\x{100005}\\x{100007}-\\x{100008}\\x{10000a}-\\x{10000b}\\x{80000000}-\\x{ffffffff}]{5,}\n        Ket\n        Any\n        #\n        Ket\n        End\n------------------------------------------------------------------\n  \\x{2fff}\\x{3002}\\x{7fff}\\x{100000}\\x{7fffffff}\\x{3000}\\x{3007}\\x{8000}\\x{ffff}\\x{100001}\\x{10000b}\\x{80000000}\\x{ffffffff}\\x{3000}#\n 0: \\x{3000}\\x{3007}\\x{8000}\\x{ffff}\\x{100001}\\x{10000b}\\x{80000000}\\x{ffffffff}\\x{3000}#\n 1: \\x{3000}\\x{3007}\\x{8000}\\x{ffff}\\x{100001}\\x{10000b}\\x{80000000}\\x{ffffffff}\n\n/([^\\x{4000}\\x{4002}\\x{4004}\\x{4005}\\x{4007}\\x{4009}\\x{400a}\\x{f000}\\x{f002}\\x{f004}\\x{f005}\\x{f007}\\x{f009}\\x{f00a}\\x{100000}\\x{100002}\\x{100004}\\x{100005}\\x{100007}\\x{100009}\\x{10000a}\\x{a0000000}\\x{a0000002}\\x{a0000004}\\x{a0000005}\\x{a0000007}\\x{a0000009}\\x{a000000a}]+).#/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        [^\\x{4000}\\x{4002}\\x{4004}-\\x{4005}\\x{4007}\\x{4009}-\\x{400a}\\x{f000}\\x{f002}\\x{f004}-\\x{f005}\\x{f007}\\x{f009}-\\x{f00a}\\x{100000}\\x{100002}\\x{100004}-\\x{100005}\\x{100007}\\x{100009}-\\x{10000a}\\x{a0000000}\\x{a0000002}\\x{a0000004}-\\x{a0000005}\\x{a0000007}\\x{a0000009}-\\x{a000000a}]+\n        Ket\n        Any\n        #\n        Ket\n        End\n------------------------------------------------------------------\n  \\x{4000}\\x{4002}\\x{4004}\\x{4005}\\x{4007}\\x{4009}\\x{400a}\\x{3fff}\\x{4001}\\x{4003}\\x{4006}\\x{4008}\\x{400b}\\x{100}#\n 0: \\x{3fff}\\x{4001}\\x{4003}\\x{4006}\\x{4008}\\x{400b}\\x{100}#\n 1: \\x{3fff}\\x{4001}\\x{4003}\\x{4006}\\x{4008}\\x{400b}\n  \\x{f000}\\x{f002}\\x{f004}\\x{f005}\\x{f007}\\x{f009}\\x{f00a}\\x{efff}\\x{f001}\\x{f003}\\x{f006}\\x{f008}\\x{f00b}\\x{100}#\n 0: \\x{efff}\\x{f001}\\x{f003}\\x{f006}\\x{f008}\\x{f00b}\\x{100}#\n 1: \\x{efff}\\x{f001}\\x{f003}\\x{f006}\\x{f008}\\x{f00b}\n  \\x{100000}\\x{100002}\\x{100004}\\x{100005}\\x{100007}\\x{100009}\\x{10000a}\\x{fffff}\\x{100001}\\x{100003}\\x{100006}\\x{100008}\\x{10000b}\\x{100}#\n 0: \\x{fffff}\\x{100001}\\x{100003}\\x{100006}\\x{100008}\\x{10000b}\\x{100}#\n 1: \\x{fffff}\\x{100001}\\x{100003}\\x{100006}\\x{100008}\\x{10000b}\n  \\x{a0000000}\\x{a0000002}\\x{a0000004}\\x{a0000005}\\x{a0000007}\\x{a0000009}\\x{a000000a}\\x{9fffffff}\\x{a0000001}\\x{a0000003}\\x{a0000006}\\x{a0000008}\\x{a000000b}\\x{100}#\n 0: \\x{9fffffff}\\x{a0000001}\\x{a0000003}\\x{a0000006}\\x{a0000008}\\x{a000000b}\\x{100}#\n 1: \\x{9fffffff}\\x{a0000001}\\x{a0000003}\\x{a0000006}\\x{a0000008}\\x{a000000b}\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (UTS#18)\n\n# META_BIGVALUE tests\n\n/\\x{80000000}/B\n------------------------------------------------------------------\n        Bra\n        \\x{80000000}\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{80000000}\n 0: \\x{80000000}\n\\= Expect no match\n    \\x{7fffffff}\nNo match\n    \\x{80000001}\nNo match\n\n/[\\x{80000000}-\\x{8000000f}\\x{8fffffff}]/B\n------------------------------------------------------------------\n        Bra\n        [\\x{80000000}-\\x{8000000f}\\x{8fffffff}]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{80000002}\n 0: \\x{80000002}\n    \\x{8fffffff}\n 0: \\x{8fffffff}\n\\= Expect no match\n    \\x{7fffffff}\nNo match\n    \\x{90000000}\nNo match\n\n/\\x{80000000}/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        \\x{80000000}\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{80000000}\n 0: \\x{80000000}\n\\= Expect no match\n    \\x{7fffffff}\nNo match\n    \\x{80000001}\nNo match\n\n/[\\x{80000000}-\\x{8000000f}\\x{8fffffff}]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\x{80000000}-\\x{8000000f}\\x{8fffffff}]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{80000002}\n 0: \\x{80000002}\n    \\x{8fffffff}\n 0: \\x{8fffffff}\n\\= Expect no match\n    \\x{7fffffff}\nNo match\n    \\x{90000000}\nNo match\n\n/[\\x{80000000}-\\x{8000000f}--\\x{80000002}]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\x{80000000}-\\x{8000000f}]\n          xclass: [^\\x{80000002}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{80000001}\n 0: \\x{80000001}\n    \\x{80000003}\n 0: \\x{80000003}\n\\= Expect no match\n    \\x{80000002}\nNo match\n\n/[[\\x{80000000}-\\x{8000000f}]--[\\x{80000002}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\x{80000000}-\\x{8000000f}]\n          xclass: [^\\x{80000002}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{80000001}\n 0: \\x{80000001}\n    \\x{80000003}\n 0: \\x{80000003}\n\\= Expect no match\n    \\x{80000002}\nNo match\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n# META_BIGVALUE tests\n\n/(?[[\\x{80000000}-\\x{8000000f}]+\\x{8fffffff}])/B\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\x{80000000}-\\x{8000000f}]\n          xclass: [\\x{8fffffff}]\n          OR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{80000002}\n 0: \\x{80000002}\n    \\x{8fffffff}\n 0: \\x{8fffffff}\n\\= Expect no match\n    \\x{7fffffff}\nNo match\n    \\x{90000000}\nNo match\n\n/(?[[\\x{80000000}-\\x{8000000f}]-\\x{80000002}])/B\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\x{80000000}-\\x{8000000f}]\n          xclass: [^\\x{80000002}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{80000001}\n 0: \\x{80000001}\n    \\x{80000003}\n 0: \\x{80000003}\n\\= Expect no match\n    \\x{80000002}\nNo match\n\n/(?[[\\x{80000000}-\\x{8000000f}]-\\x{80000002}])/B\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\x{80000000}-\\x{8000000f}]\n          xclass: [^\\x{80000002}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{80000001}\n 0: \\x{80000001}\n    \\x{80000003}\n 0: \\x{80000003}\n\\= Expect no match\n    \\x{80000002}\nNo match\n\n# --------------\n\n# End of testinput11\n"
  },
  {
    "path": "testdata/testoutput12-16",
    "content": "# This set of tests is for UTF-16 and UTF-32 support, including Unicode\n# properties. It is relevant only to the 16-bit and 32-bit libraries. The\n# output is different for each library, so there are separate output files.\n\n/xxx/IB,utf,no_utf_check\n** Failed: invalid UTF-8 string cannot be converted to 16-bit string\n\n/abc/utf\n    ]\n** Failed: invalid UTF-8 string cannot be used as input in UTF mode\n\n# Check maximum character size \n\n/\\x{ffff}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{ffff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{ffff}\nSubject length lower bound = 1\n\n/\\x{10000}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{10000}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{d800}\nLast code unit = \\x{dc00}\nSubject length lower bound = 1\n\n/\\x{100}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100}\nSubject length lower bound = 1\n\n/\\x{1000}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{1000}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{1000}\nSubject length lower bound = 1\n\n/\\x{10000}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{10000}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{d800}\nLast code unit = \\x{dc00}\nSubject length lower bound = 1\n\n/\\x{100000}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100000}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{dbc0}\nLast code unit = \\x{dc00}\nSubject length lower bound = 1\n\n/\\x{10ffff}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{10ffff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{dbff}\nLast code unit = \\x{dfff}\nSubject length lower bound = 1\n\n/[\\x{ff}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{ff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xff\nSubject length lower bound = 1\n\n/[\\x{100}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100}\nSubject length lower bound = 1\n\n/\\x80/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{80}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x80\nSubject length lower bound = 1\n\n/\\xff/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{ff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xff\nSubject length lower bound = 1\n\n/\\x{D55c}\\x{ad6d}\\x{C5B4}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{d55c}\\x{ad6d}\\x{c5b4}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{d55c}\nLast code unit = \\x{c5b4}\nSubject length lower bound = 3\n    \\x{D55c}\\x{ad6d}\\x{C5B4}\n 0: \\x{d55c}\\x{ad6d}\\x{c5b4}\n\n/\\x{65e5}\\x{672c}\\x{8a9e}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{65e5}\\x{672c}\\x{8a9e}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{65e5}\nLast code unit = \\x{8a9e}\nSubject length lower bound = 3\n    \\x{65e5}\\x{672c}\\x{8a9e}\n 0: \\x{65e5}\\x{672c}\\x{8a9e}\n\n/\\x{80}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{80}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x80\nSubject length lower bound = 1\n\n/\\x{084}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{84}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x84\nSubject length lower bound = 1\n\n/\\x{104}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{104}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{104}\nSubject length lower bound = 1\n\n/\\x{861}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{861}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{861}\nSubject length lower bound = 1\n\n/\\x{212ab}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{212ab}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{d844}\nLast code unit = \\x{deab}\nSubject length lower bound = 1\n\n/[^ab\\xC0-\\xF0]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [^ab\\xc0-\\xf0]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4\n  5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y\n  Z [ \\ ] ^ _ ` c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f\n  \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e\n  \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d\n  \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac\n  \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb\n  \\xbc \\xbd \\xbe \\xbf \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb\n  \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n    \\x{f1}\n 0: \\x{f1}\n    \\x{bf}\n 0: \\x{bf}\n    \\x{100}\n 0: \\x{100}\n    \\x{1000}\n 0: \\x{1000}\n\\= Expect no match\n    \\x{c0}\nNo match\n    \\x{f0}\nNo match\n\n/(\\x{100}+|x)/IB,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\x{100}++\n        Alt\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: x \\xff\nSubject length lower bound = 1\n\n/(\\x{100}*a|x)/IB,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\x{100}*+\n        a\n        Alt\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: a x \\xff\nSubject length lower bound = 1\n\n/(\\x{100}{0,2}a|x)/IB,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\x{100}{0,2}+\n        a\n        Alt\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: a x \\xff\nSubject length lower bound = 1\n\n/(\\x{100}{1,2}a|x)/IB,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\x{100}\n        \\x{100}{0,1}+\n        a\n        Alt\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: x \\xff\nSubject length lower bound = 1\n\n/\\x{100}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100}\nSubject length lower bound = 1\n\n/a\\x{100}\\x{101}*/IB,utf\n------------------------------------------------------------------\n        Bra\n        a\\x{100}\n        \\x{101}*+\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'a'\nLast code unit = \\x{100}\nSubject length lower bound = 2\n\n/a\\x{100}\\x{101}+/IB,utf\n------------------------------------------------------------------\n        Bra\n        a\\x{100}\n        \\x{101}++\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'a'\nLast code unit = \\x{101}\nSubject length lower bound = 3\n\n/[^\\x{c4}]/IB\n------------------------------------------------------------------\n        Bra\n        [^\\x{c4}] (not)\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nSubject length lower bound = 1\n\n/[\\x{100}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100}\nSubject length lower bound = 1\n    \\x{100}\n 0: \\x{100}\n    Z\\x{100}\n 0: \\x{100}\n    \\x{100}Z\n 0: \\x{100}\n\n/[\\xff]/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{ff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xff\nSubject length lower bound = 1\n    >\\x{ff}<\n 0: \\x{ff}\n\n/[^\\xff]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x{ff}] (not)\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nSubject length lower bound = 1\n\n/\\x{100}abc(xyz(?1))/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}abc\n        CBra 1\n        xyz\n        Recurse\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nFirst code unit = \\x{100}\nLast code unit = 'z'\nSubject length lower bound = 7\n\n/\\777/I,utf\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{1ff}\nSubject length lower bound = 1\n  \\x{1ff}\n 0: \\x{1ff}\n  \\777\n 0: \\x{1ff}\n\n/\\x{100}+\\x{200}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}++\n        \\x{200}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100}\nLast code unit = \\x{200}\nSubject length lower bound = 2\n\n/\\x{100}+X/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}++\n        X\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100}\nLast code unit = 'X'\nSubject length lower bound = 2\n\n/^[\\QĀ\\E-\\QŐ\\E/B,utf\nFailed: error 106 at offset 13: missing terminating ] for character class\n        here: ...QĀ\\E-\\QŐ\\E |<--|\n\n/X/utf\n    XX\\x{d800}\\=no_utf_check\n 0: X\n    XX\\x{da00}\\=no_utf_check\n 0: X\n    XX\\x{dc00}\\=no_utf_check\n 0: X\n    XX\\x{de00}\\=no_utf_check\n 0: X\n    XX\\x{dfff}\\=no_utf_check\n 0: X\n\\= Expect UTF error\n    XX\\x{d800}\nFailed: error -24: UTF-16 error: missing low surrogate at end at offset 2\n    XX\\x{da00}\nFailed: error -24: UTF-16 error: missing low surrogate at end at offset 2\n    XX\\x{dc00}\nFailed: error -26: UTF-16 error: isolated low surrogate at offset 2\n    XX\\x{de00}\nFailed: error -26: UTF-16 error: isolated low surrogate at offset 2\n    XX\\x{dfff}\nFailed: error -26: UTF-16 error: isolated low surrogate at offset 2\n    XX\\x{110000}\n** Failed: character \\N{U+110000} is greater than 0x10ffff and therefore cannot be encoded as UTF-16\n    XX\\x{d800}\\x{1234}\nFailed: error -25: UTF-16 error: invalid low surrogate at offset 2\n\\= Expect no match\n    XX\\x{d800}\\=offset=3\nNo match\n    \n/(?<=.)X/utf\n    XX\\x{d800}\\=offset=3\nFailed: error -24: UTF-16 error: missing low surrogate at end at offset 2\n\n/(*UTF16)\\x{11234}/\n  abcd\\x{11234}pqr\n 0: \\x{11234}\n\n/(*UTF)\\x{11234}/I\nCapture group count = 0\nCompile options: <none>\nOverall options: utf\nFirst code unit = \\x{d804}\nLast code unit = \\x{de34}\nSubject length lower bound = 1\n  abcd\\x{11234}pqr\n 0: \\x{11234}\n\n/(*UTF-32)\\x{11234}/\nFailed: error 160 at offset 5: (*VERB) not recognized or malformed\n        here: (*UTF |<--| -32)\\x{112...\n  abcd\\x{11234}pqr\n\n/(*UTF-32)\\x{112}/\nFailed: error 160 at offset 5: (*VERB) not recognized or malformed\n        here: (*UTF |<--| -32)\\x{112...\n  abcd\\x{11234}pqr\n\n/(*CRLF)(*UTF16)(*BSR_UNICODE)a\\Rb/I\nCapture group count = 0\nCompile options: <none>\nOverall options: utf\n\\R matches any Unicode newline\nForced newline is CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n\n/(*CRLF)(*UTF32)(*BSR_UNICODE)a\\Rb/I\nFailed: error 160 at offset 14: (*VERB) not recognized or malformed\n        here: ...LF)(*UTF32 |<--| )(*BSR_UNI...\n\n/\\h/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x20 \\xa0 \\xff\nSubject length lower bound = 1\n    ABC\\x{09}\n 0: \\x{09}\n    ABC\\x{20}\n 0:  \n    ABC\\x{a0}\n 0: \\x{a0}\n    ABC\\x{1680}\n 0: \\x{1680}\n    ABC\\x{180e}\n 0: \\x{180e}\n    ABC\\x{2000}\n 0: \\x{2000}\n    ABC\\x{202f}\n 0: \\x{202f}\n    ABC\\x{205f}\n 0: \\x{205f}\n    ABC\\x{3000}\n 0: \\x{3000}\n\n/\\v/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85 \\xff\nSubject length lower bound = 1\n    ABC\\x{0a}\n 0: \\x{0a}\n    ABC\\x{0b}\n 0: \\x{0b}\n    ABC\\x{0c}\n 0: \\x{0c}\n    ABC\\x{0d}\n 0: \\x{0d}\n    ABC\\x{85}\n 0: \\x{85}\n    ABC\\x{2028}\n 0: \\x{2028}\n\n/\\h*A/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x20 A \\xa0 \\xff\nLast code unit = 'A'\nSubject length lower bound = 1\n    CDBABC\n 0: A\n    \\x{2000}ABC\n 0: \\x{2000}A\n\n/\\R*A/I,bsr=unicode,utf\nCapture group count = 0\nOptions: utf\n\\R matches any Unicode newline\nStarting code units: \\x0a \\x0b \\x0c \\x0d A \\x85 \\xff\nLast code unit = 'A'\nSubject length lower bound = 1\n    CDBABC\n 0: A\n    \\x{2028}A\n 0: \\x{2028}A\n\n/\\v+A/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85 \\xff\nLast code unit = 'A'\nSubject length lower bound = 2\n\n/\\s?xxx\\s/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 x\nLast code unit = 'x'\nSubject length lower bound = 4\n\n/\\sxxx\\s/I,utf,tables=2\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 \\x85 \\xa0\nLast code unit = 'x'\nSubject length lower bound = 5\n    AB\\x{85}xxx\\x{a0}XYZ\n 0: \\x{85}xxx\\x{a0}\n    AB\\x{a0}xxx\\x{85}XYZ\n 0: \\x{a0}xxx\\x{85}\n\n/\\S \\S/I,utf,tables=2\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x0e \\x0f\n  \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e\n  \\x1f ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C\n  D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c d e f g h\n  i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84\n  \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93 \\x94\n  \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa1 \\xa2 \\xa3 \\xa4\n  \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3\n  \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2\n  \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1\n  \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0\n  \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef\n  \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe\n  \\xff\nLast code unit = ' '\nSubject length lower bound = 3\n    \\x{a2} \\x{84}\n 0: \\x{a2} \\x{84}\n    A Z\n 0: A Z\n\n/a+/utf\n    a\\x{123}aa\\=offset=1\n 0: aa\n    a\\x{123}aa\\=offset=2\n 0: aa\n    a\\x{123}aa\\=offset=3\n 0: a\n\\= Expect no match\n    a\\x{123}aa\\=offset=4\nNo match\n\\= Expect bad offset error     \n    a\\x{123}aa\\=offset=5\nFailed: error -33: bad offset value\n    a\\x{123}aa\\=offset=6\nFailed: error -33: bad offset value\n\n/\\x{1234}+/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = \\x{1234}\nSubject length lower bound = 1\n\n/\\x{1234}+?/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = \\x{1234}\nSubject length lower bound = 1\n\n/\\x{1234}++/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = \\x{1234}\nSubject length lower bound = 1\n\n/\\x{1234}{2}/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = \\x{1234}\nLast code unit = \\x{1234}\nSubject length lower bound = 2\n\n/[^\\x{c4}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x{c4}] (not)\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nSubject length lower bound = 1\n\n/X+\\x{200}/IB,utf\n------------------------------------------------------------------\n        Bra\n        X++\n        \\x{200}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'X'\nLast code unit = \\x{200}\nSubject length lower bound = 2\n\n/\\R/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85 \\xff\nSubject length lower bound = 1\n\n# Check bad offset \n\n/a/utf\n\\= Expect bad UTF-16 offset, or no match in 32-bit\n    \\x{10000}\\=offset=1\nError -36 (bad UTF-16 offset)\n    \\x{10000}ab\\=offset=1\nError -36 (bad UTF-16 offset)\n\\= Expect 16-bit match, 32-bit no match\n    \\x{10000}ab\\=offset=2\n 0: a\n\\= Expect no match     \n    \\x{10000}ab\\=offset=3\nNo match\n\\= Expect no match in 16-bit, bad offset in 32-bit    \n    \\x{10000}ab\\=offset=4\nNo match\n\\= Expect bad offset     \n    \\x{10000}ab\\=offset=5\nFailed: error -33: bad offset value\n\n//utf\nFailed: error -26 at offset 0: UTF-16 error: isolated low surrogate\n        here: |-->| \n\n/\\w+\\x{C4}/B,utf\n------------------------------------------------------------------\n        Bra\n        \\w++\n        \\x{c4}\n        Ket\n        End\n------------------------------------------------------------------\n    a\\x{C4}\\x{C4}\n 0: a\\x{c4}\n\n/\\w+\\x{C4}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\w+\n        \\x{c4}\n        Ket\n        End\n------------------------------------------------------------------\n    a\\x{C4}\\x{C4}\n 0: a\\x{c4}\\x{c4}\n    \n/\\W+\\x{C4}/B,utf\n------------------------------------------------------------------\n        Bra\n        \\W+\n        \\x{c4}\n        Ket\n        End\n------------------------------------------------------------------\n    !\\x{C4}\n 0: !\\x{c4}\n \n/\\W+\\x{C4}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\W++\n        \\x{c4}\n        Ket\n        End\n------------------------------------------------------------------\n    !\\x{C4}\n 0: !\\x{c4}\n\n/\\W+\\x{A1}/B,utf\n------------------------------------------------------------------\n        Bra\n        \\W+\n        \\x{a1}\n        Ket\n        End\n------------------------------------------------------------------\n    !\\x{A1}\n 0: !\\x{a1}\n \n/\\W+\\x{A1}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\W+\n        \\x{a1}\n        Ket\n        End\n------------------------------------------------------------------\n    !\\x{A1}\n 0: !\\x{a1}\n\n/X\\s+\\x{A0}/B,utf\n------------------------------------------------------------------\n        Bra\n        X\n        \\s++\n        \\x{a0}\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x20\\x{A0}\\x{A0}\n 0: X \\x{a0}\n\n/X\\s+\\x{A0}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        X\n        \\s+\n        \\x{a0}\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x20\\x{A0}\\x{A0}\n 0: X \\x{a0}\\x{a0}\n\n/\\S+\\x{A0}/B,utf\n------------------------------------------------------------------\n        Bra\n        \\S+\n        \\x{a0}\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x{A0}\\x{A0}\n 0: X\\x{a0}\\x{a0}\n\n/\\S+\\x{A0}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\S++\n        \\x{a0}\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x{A0}\\x{A0}\n 0: X\\x{a0}\n\n/\\x{a0}+\\s!/B,utf\n------------------------------------------------------------------\n        Bra\n        \\x{a0}++\n        \\s\n        !\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{a0}\\x20!\n 0: \\x{a0} !\n\n/\\x{a0}+\\s!/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\x{a0}+\n        \\s\n        !\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{a0}\\x20!\n 0: \\x{a0} !\n\n/(*UTF)abc/never_utf\nFailed: error 174 at offset 6: using UTF is disabled by the application\n        here: (*UTF) |<--| abc\n\n/abc/utf,never_utf\nFailed: error 174 at offset 0: using UTF is disabled by the application\n\n/(*UCP)abc/never_ucp\nFailed: error 175 at offset 6: using UCP is disabled by the application\n        here: (*UCP) |<--| abc\n\n/abc/ucp,never_ucp\nFailed: error 175 at offset 0: using UCP is disabled by the application\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/IBi,utf\n------------------------------------------------------------------\n        Bra\n     /i A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = 'A' (caseless)\nLast code unit = \\x{1fb0} (caseless)\nSubject length lower bound = 5\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/IB,utf\n------------------------------------------------------------------\n        Bra\n        A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = \\x{1fb0}\nSubject length lower bound = 5\n\n/AB\\x{1fb0}/IB,utf\n------------------------------------------------------------------\n        Bra\n        AB\\x{1fb0}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = \\x{1fb0}\nSubject length lower bound = 3\n\n/AB\\x{1fb0}/IBi,utf\n------------------------------------------------------------------\n        Bra\n     /i AB\\x{1fb0}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = 'A' (caseless)\nLast code unit = \\x{1fb0} (caseless)\nSubject length lower bound = 3\n\n/\\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = \\x{401} (caseless)\nLast code unit = \\x{42f} (caseless)\nSubject length lower bound = 17\n    \\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}\n 0: \\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}\n    \\x{451}\\x{440}\\x{441}\\x{442}\\x{443}\\x{444}\\x{445}\\x{446}\\x{447}\\x{448}\\x{449}\\x{44a}\\x{44b}\\x{44c}\\x{44d}\\x{44e}\\x{44f}\n 0: \\x{451}\\x{440}\\x{441}\\x{442}\\x{443}\\x{444}\\x{445}\\x{446}\\x{447}\\x{448}\\x{449}\\x{44a}\\x{44b}\\x{44c}\\x{44d}\\x{44e}\\x{44f}\n\n/[ⱥ]/Bi,utf\n------------------------------------------------------------------\n        Bra\n     /i \\x{2c65}\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^ⱥ]/Bi,utf\n------------------------------------------------------------------\n        Bra\n     /i [^\\x{2c65}] (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:blank:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\x{212a}+/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nStarting code units: K k \\xff\nSubject length lower bound = 1\n    KKkk\\x{212a}\n 0: KKkk\\x{212a}\n\n/s+/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nStarting code units: S s \\xff\nSubject length lower bound = 1\n    SSss\\x{17f}\n 0: SSss\\x{17f}\n\n# Non-UTF characters should give errors in both 16-bit and 32-bit modes.\n\n/\\x{110000}/utf\nFailed: error 134 at offset 9: character code point value in \\x{} or \\o{} is too large\n        here: \\x{110000 |<--| }\n\n/\\o{4200000}/utf\nFailed: error 134 at offset 10: character code point value in \\x{} or \\o{} is too large\n        here: \\o{4200000 |<--| }\n\n/\\x{100}*A/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        A\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: A \\xff\nLast code unit = 'A'\nSubject length lower bound = 1\n    A\n 0: A\n\n/\\x{100}*\\d(?R)/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        \\d\n        Recurse\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: 0 1 2 3 4 5 6 7 8 9 \\xff\nSubject length lower bound = 1\n\n/[Z\\x{100}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [Z\\x{100}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: Z \\xff\nSubject length lower bound = 1\n    Z\\x{100}\n 0: Z\n    \\x{100}\n 0: \\x{100}\n    \\x{100}Z\n 0: \\x{100}\n\n/[z-\\x{100}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [z-\\xff\\x{100}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: z { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87\n  \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96\n  \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5\n  \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4\n  \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3\n  \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2\n  \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1\n  \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0\n  \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/[z\\Qa-d]Ā\\E]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [\\-\\]adz\\x{100}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: - ] a d z \\xff\nSubject length lower bound = 1\n    \\x{100}\n 0: \\x{100}\n    Ā \n 0: \\x{100}\n\n/[ab\\x{100}]abc(xyz(?1))/IB,utf\n------------------------------------------------------------------\n        Bra\n        [ab\\x{100}]\n        abc\n        CBra 1\n        xyz\n        Recurse\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: a b \\xff\nLast code unit = 'z'\nSubject length lower bound = 7\n\n/\\x{100}*\\s/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        \\s\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 \\xff\nSubject length lower bound = 1\n\n/\\x{100}*\\d/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: 0 1 2 3 4 5 6 7 8 9 \\xff\nSubject length lower bound = 1\n\n/\\x{100}*\\w/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\n  \\xff\nSubject length lower bound = 1\n\n/\\x{100}*\\D/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*\n        \\D\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / : ; < = >\n  ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c\n  d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80 \\x81 \\x82\n  \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91\n  \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0\n  \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf\n  \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe\n  \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd\n  \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc\n  \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb\n  \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa\n  \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/\\x{100}*\\S/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*\n        \\S\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x0e \\x0f\n  \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e\n  \\x1f ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C\n  D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c d e f g h\n  i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84\n  \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93\n  \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2\n  \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1\n  \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0\n  \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf\n  \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde\n  \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed\n  \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc\n  \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/\\x{100}*\\W/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*\n        \\W\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / : ; < = >\n  ? @ [ \\ ] ^ ` { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89\n  \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98\n  \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7\n  \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6\n  \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5\n  \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4\n  \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3\n  \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2\n  \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/[\\x{105}-\\x{109}]/IBi,utf\n------------------------------------------------------------------\n        Bra\n        [\\x{104}-\\x{109}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nStarting code units: \\xff\nSubject length lower bound = 1\n    \\x{104}\n 0: \\x{104}\n    \\x{105}\n 0: \\x{105}\n    \\x{109}  \n 0: \\x{109}\n\\= Expect no match\n    \\x{100}\nNo match\n    \\x{10a} \nNo match\n    \n/[z-\\x{100}]/IBi,utf\n------------------------------------------------------------------\n        Bra\n        [Zz-\\xff\\x{100}-\\x{101}\\x{178}\\x{39c}\\x{3bc}\\x{1e9e}\\x{212b}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nStarting code units: Z z { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86\n  \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95\n  \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4\n  \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3\n  \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2\n  \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1\n  \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0\n  \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef\n  \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe\n  \\xff\nSubject length lower bound = 1\n    Z\n 0: Z\n    z\n 0: z\n    \\x{39c}\n 0: \\x{39c}\n    \\x{178}\n 0: \\x{178}\n    |\n 0: |\n    \\x{80}\n 0: \\x{80}\n    \\x{ff}\n 0: \\x{ff}\n    \\x{100}\n 0: \\x{100}\n    \\x{101} \n 0: \\x{101}\n\\= Expect no match\n    \\x{102}\nNo match\n    Y\nNo match\n    y           \nNo match\n\n/[z-\\x{100}]/IBi,utf\n------------------------------------------------------------------\n        Bra\n        [Zz-\\xff\\x{100}-\\x{101}\\x{178}\\x{39c}\\x{3bc}\\x{1e9e}\\x{212b}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nStarting code units: Z z { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86\n  \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95\n  \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4\n  \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3\n  \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2\n  \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1\n  \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0\n  \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef\n  \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe\n  \\xff\nSubject length lower bound = 1\n\n/\\x{3a3}B/IBi,utf\n------------------------------------------------------------------\n        Bra\n        clist 03a3 03c2 03c3\n     /i B\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nStarting code units: \\xff\nLast code unit = 'B' (caseless)\nSubject length lower bound = 2\n\n/./utf\n    \\x{110000}\n** Failed: character \\N{U+110000} is greater than 0x10ffff and therefore cannot be encoded as UTF-16\n\n/(*UTF)abz/B\n------------------------------------------------------------------\n        Bra\n        ab\\x{fd}\\x{bf}\\x{bf}\\x{bf}\\x{bf}\\x{bf}z\n        Ket\n        End\n------------------------------------------------------------------\n\n/abz/utf\n** Failed: character value greater than 0x10ffff cannot be converted to UTF\n\n/[\\W\\p{Any}]/B\n------------------------------------------------------------------\n        Bra\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n    abc\n 0: a\n    123 \n 0: 1\n\n/[\\W\\pL]/B\n------------------------------------------------------------------\n        Bra\n        [^0-9_]\n        Ket\n        End\n------------------------------------------------------------------\n    abc\n 0: a\n    \\x{100}\n 0: \\x{100}\n    \\x{308}  \n 0: \\x{308}\n\\= Expect no match\n    123     \nNo match\n\n/[\\s[:^ascii:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [^\\x00-\\x08\\x0e-\\x1f!-\\x7f]\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\pP/ucp\n    \\x{7fffffff}\n** Character \\x{7fffffff} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\nNo match\n\n/\\p{  Aሴ}/utf\nFailed: error 146 at offset 7: malformed \\P or \\p sequence\n        here: \\p{  Aሴ |<--| }\n\n/\\p{BC: Aሴ}/utf\nFailed: error 146 at offset 9: malformed \\P or \\p sequence\n        here: \\p{BC: Aሴ |<--| }\n\n# A special extra option allows escaped surrogate code points in 32-bit mode,\n# but subjects containing them must not be UTF-checked. These patterns give\n# errors in 16-bit mode.\n\n/\\x{d800}/I,utf,allow_surrogate_escapes\nFailed: error 191 at offset 0: PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is not allowed in UTF-16 mode\n    \\x{d800}\\=no_utf_check\n\n/\\udfff\\o{157401}/utf,alt_bsux,allow_surrogate_escapes\nFailed: error 191 at offset 0: PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is not allowed in UTF-16 mode\n    \\x{dfff}\\x{df01}\\=no_utf_check\n\n# This has different starting code units in 8-bit mode. \n\n/^[^ab]/IB,utf\n------------------------------------------------------------------\n        Bra\n        ^\n        [^ab]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: utf\nOverall options: anchored utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4\n  5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y\n  Z [ \\ ] ^ _ ` c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f\n  \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e\n  \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d\n  \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac\n  \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb\n  \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca\n  \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9\n  \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8\n  \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7\n  \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n    c\n 0: c\n    \\x{ff}\n 0: \\x{ff}\n    \\x{100}\n 0: \\x{100}\n\\= Expect no match\n    aaa\nNo match\n    \n# Offsets are different in 8-bit mode. \n\n/(?<=abc)(|def)/g,utf,replace=<$0>,substitute_callout\n    123abcáyzabcdef789abcሴqr\n 1(2) Old 6 6 \"\" New 6 8 \"<>\"\n 2(2) Old 12 12 \"\" New 14 16 \"<>\"\n 3(2) Old 12 15 \"def\" New 16 21 \"<def>\"\n 4(2) Old 21 21 \"\" New 27 29 \"<>\"\n 4: 123abc<>\\x{e1}yzabc<><def>789abc<>\\x{1234}qr\n    \n# A few script run tests in non-UTF mode (but they need Unicode support)\n\n/^(*script_run:.{4})/\n    \\x{3041}\\x{30a1}\\x{3007}\\x{3007}   Hiragana Katakana Han Han\n 0: \\x{3041}\\x{30a1}\\x{3007}\\x{3007}\n    \\x{30a1}\\x{3041}\\x{3007}\\x{3007}   Katakana Hiragana Han Han\n 0: \\x{30a1}\\x{3041}\\x{3007}\\x{3007}\n    \\x{1100}\\x{2e80}\\x{2e80}\\x{1101}   Hangul Han Han Hangul\n 0: \\x{1100}\\x{2e80}\\x{2e80}\\x{1101}\n \n/^(*sr:.*)/utf,allow_surrogate_escapes\nFailed: error 191 at offset 0: PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is not allowed in UTF-16 mode\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\n    \\x{d800}\\x{dfff}                   Surrogates (Unknown) \\=no_utf_check\n\n/(?(n/utf\nFailed: error 142 at offset 4: syntax error in subpattern name (missing terminator?)\n        here: (?(n |<--|\n\n/(?(á/utf\nFailed: error 142 at offset 4: syntax error in subpattern name (missing terminator?)\n        here: (?(á |<--|\n\n/^\\cģ/utf\nFailed: error 168 at offset 4: \\c must be followed by a printable ASCII character\n        here: ^\\cģ |<--|\n\n/(?'٠ABC'...)/utf\nFailed: error 144 at offset 4: subpattern name must start with a non-digit\n        here: (?'٠ |<--| ABC'...)\n\n# Invalid UTF-16/32 tests.\n\n/.../g,match_invalid_utf\n    abcd\\x{df00}wxzy\\x{df00}pqrs\n 0: abc\n 0: wxz\n 0: pqr\n    abcd\\x{80}wxzy\\x{df00}pqrs\n 0: abc\n 0: d\\x{80}w\n 0: xzy\n 0: pqr\n\n/abc/match_invalid_utf\n    ab\\x{df00}ab\\=ph\nPartial match: ab\n\\= Expect no match\n    ab\\x{df00}cdef\\=ph\nNo match\n\n/.a/match_invalid_utf\n    ab\\=ph\nPartial match: b\n    ab\\=ps\nPartial match: b\n\\= Expect no match\n    b\\x{df00}\\=ph\nNo match\n    b\\x{df00}\\=ps\nNo match\n\n/.a$/match_invalid_utf\n    ab\\=ph\nPartial match: b\n    ab\\=ps\nPartial match: b\n\\= Expect no match\n    b\\x{df00}\\=ph\nNo match\n    b\\x{df00}\\=ps\nNo match\n\n/ab$/match_invalid_utf\n    ab\\x{df00}cdeab\n 0: ab\n\\= Expect no match\n    ab\\x{df00}cde\nNo match\n\n/.../g,match_invalid_utf\n    abcd\\x{80}wxzy\\x{df00}pqrs\n 0: abc\n 0: d\\x{80}w\n 0: xzy\n 0: pqr\n\n/(?<=x)../g,match_invalid_utf\n    abcd\\x{80}wxzy\\x{df00}pqrs\n 0: zy\n    abcd\\x{80}wxzy\\x{df00}xpqrs\n 0: zy\n 0: pq\n\n/X$/match_invalid_utf\n\\= Expect no match\n    X\\x{df00}\nNo match\n    \n/(?<=..)X/match_invalid_utf,aftertext\n    AB\\x{df00}AQXYZ\n 0: X\n 0+ YZ\n    AB\\x{df00}AQXYZ\\=offset=5\n 0: X\n 0+ YZ\n    AB\\x{df00}\\x{df00}AXYZXC\\=offset=5\n 0: X\n 0+ C\n\\= Expect no match\n    AB\\x{df00}XYZ\nNo match\n    AB\\x{df00}XYZ\\=offset=3 \nNo match\n    AB\\x{df00}AXYZ\nNo match\n    AB\\x{df00}AXYZ\\=offset=4\nNo match\n    AB\\x{df00}\\x{df00}AXYZ\\=offset=5\nNo match\n\n/.../match_invalid_utf\n\\= Expect no match\n    A\\x{d800}B\nNo match\n    A\\x{110000}B \n** Failed: character \\N{U+110000} is greater than 0x10ffff and therefore cannot be encoded as UTF-16\n    \n/aa/utf,ucp,match_invalid_utf,global\n    aa\\x{d800}aa\n 0: aa\n 0: aa\n\n/aa/utf,ucp,match_invalid_utf,global\n    \\x{d800}aa\n 0: aa\n    \n/A\\z/utf,match_invalid_utf\n    A\\x{df00}\\n\nNo match\n\n/ab$/match_invalid_utf\n\\= Expect no match            \n    ab\\x{df00}cde         \nNo match\n\n/ab\\z/match_invalid_utf\n\\= Expect no match            \n    ab\\x{df00}cde         \nNo match\n\n/ab\\Z/match_invalid_utf\n\\= Expect no match            \n    ab\\x{df00}cde         \nNo match\n\n/(..)(*scs:(1)ab\\z)/match_invalid_utf\n    ab\\x{df00}cde         \n 0: ab\n 1: ab\n\n/(..)(*scs:(1)ab\\Z)/match_invalid_utf\n    ab\\x{df00}cde         \n 0: ab\n 1: ab\n\n/(..)(*scs:(1)ab$)/match_invalid_utf\n    ab\\x{df00}cde         \n 0: ab\n 1: ab\n\n# ---------------------------------------------------- \n\n/(*UTF)(?=\\x{123})/I\nCapture group count = 0\nMay match empty string\nCompile options: <none>\nOverall options: utf\nFirst code unit = \\x{123}\nSubject length lower bound = 1\n\n/[\\x{c1}\\x{e1}]X[\\x{145}\\x{146}]/I,utf\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc1 (caseless)\nLast code unit = \\x{145} (caseless)\nSubject length lower bound = 3\n\n/[\\xff\\x{ffff}]/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\xff\nSubject length lower bound = 1\n\n/[\\xff\\x{ff}]/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\xff\nSubject length lower bound = 1\n\n/[\\xff\\x{ff}]/I\nCapture group count = 0\nStarting code units: \\xff\nSubject length lower bound = 1\n\n/[Ss]/I\nCapture group count = 0\nFirst code unit = 'S' (caseless)\nSubject length lower bound = 1\n\n/[Ss]/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: S s\nSubject length lower bound = 1\n\n/(?:\\x{ff}|\\x{3000})/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\xff\nSubject length lower bound = 1\n\n# ---------------------------------------------------- \n# UCP and casing tests\n\n/\\x{120}/iI\nCapture group count = 0\nOptions: caseless\nFirst code unit = \\x{120}\nSubject length lower bound = 1\n\n/\\x{c1}/iI,ucp\nCapture group count = 0\nOptions: caseless ucp\nFirst code unit = \\xc1 (caseless)\nSubject length lower bound = 1\n\n/[\\x{120}\\x{121}]/iB,ucp\n------------------------------------------------------------------\n        Bra\n     /i \\x{120}\n        Ket\n        End\n------------------------------------------------------------------\n\n/[ab\\x{120}]+/iB,ucp\n------------------------------------------------------------------\n        Bra\n        [ABab\\x{120}-\\x{121}]++\n        Ket\n        End\n------------------------------------------------------------------\n    aABb\\x{121}\\x{120}\n 0: aABb\\x{121}\\x{120}\n\n/\\x{c1}/i,no_start_optimize\n\\= Expect no match\n    \\x{e1}\nNo match\n\n/\\x{120}\\x{c1}/i,ucp,no_start_optimize\n    \\x{121}\\x{e1}\n 0: \\x{121}\\xe1\n\n/\\x{120}\\x{c1}/i,ucp\n    \\x{121}\\x{e1}\n 0: \\x{121}\\xe1\n\n/[^\\x{120}]/i,no_start_optimize\n    \\x{121}\n 0: \\x{121}\n\n/[^\\x{120}]/i,ucp,no_start_optimize\n\\= Expect no match\n    \\x{121}\nNo match\n\n/[^\\x{120}]/i\n    \\x{121}\n 0: \\x{121}\n\n/[^\\x{120}]/i,ucp\n\\= Expect no match\n    \\x{121}\nNo match\n    \n/\\x{120}{2}/i,ucp\n    \\x{121}\\x{121}\n 0: \\x{121}\\x{121}\n\n/[^\\x{120}]{2}/i,ucp\n\\= Expect no match\n    \\x{121}\\x{121}\nNo match\n\n/\\x{c1}+\\x{e1}/iB,ucp\n------------------------------------------------------------------\n        Bra\n     /i \\x{c1}+\n     /i \\x{e1}\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{c1}\\x{c1}\\x{c1}\n 0: \\xc1\\xc1\\xc1\n\n/\\x{c1}+\\x{e1}/iIB,ucp\n------------------------------------------------------------------\n        Bra\n     /i \\x{c1}+\n     /i \\x{e1}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless ucp\nFirst code unit = \\xc1 (caseless)\nLast code unit = \\xe1 (caseless)\nSubject length lower bound = 2\n    \\x{c1}\\x{c1}\\x{c1}\n 0: \\xc1\\xc1\\xc1\n    \\x{e1}\\x{e1}\\x{e1} \n 0: \\xe1\\xe1\\xe1\n\n/a|\\x{c1}/iI,ucp\nCapture group count = 0\nOptions: caseless ucp\nStarting code units: A a \\xc1 \\xe1\nSubject length lower bound = 1\n    \\x{e1}xxx\n 0: \\xe1\n\n/\\x{c1}|\\x{e1}/iI,ucp\nCapture group count = 0\nOptions: caseless ucp\nFirst code unit = \\xc1 (caseless)\nSubject length lower bound = 1\n\n/X(\\x{e1})Y/ucp,replace=>\\U$1<,substitute_extended\n    X\\x{e1}Y\n 1: >\\xc1<\n\n/X(\\x{121})Y/ucp,replace=>\\U$1<,substitute_extended\n    X\\x{121}Y\n 1: >\\x{120}<\n\n/s/i,ucp\n    \\x{17f} \n 0: \\x{17f}\n\n/s/i,utf\n    \\x{17f} \n 0: \\x{17f}\n\n/[^s]/i,ucp\n\\= Expect no match\n    \\x{17f} \nNo match\n\n/[^s]/i,utf\n\\= Expect no match\n    \\x{17f} \nNo match\n\n/(.) \\1/i,ucp\n    i I\n 0: i I\n 1: i\n\n/(.) \\1/i,ucp,turkish_casing\n\\= Expect no match\n    i I\nNo match\n\n/(.) \\1/i,ucp\n    i I\n 0: i I\n 1: i\n    \\x{212a} k\n 0: \\x{212a} k\n 1: \\x{212a}\n\\= Expect no match\n    i \\x{0130}\nNo match\n    \\x{0131} I\nNo match\n\n/(.) \\1/i,ucp,turkish_casing\n    \\x{212a} k\n 0: \\x{212a} k\n 1: \\x{212a}\n    i \\x{0130}\n 0: i \\x{130}\n 1: i\n    \\x{0131} I\n 0: \\x{131} I\n 1: \\x{131}\n\\= Expect no match\n    i I\nNo match\n\n/(.) (?r:\\1)/i,ucp,turkish_casing\n    i I\n 0: i I\n 1: i\n\\= Expect no match\n    i \\x{0130}\nNo match\n    \\x{0131} I\nNo match\n    \\x{212a} k\nNo match\n\n/[a-z][^i]I/ucp,turkish_casing\n    bII\n 0: bII\n    b\\x{0130}I\n 0: b\\x{130}I\n    b\\x{0131}I\n 0: b\\x{131}I\n\\= Expect no match\n    biI\nNo match\n\n/[a-z][^i]I/i,ucp,turkish_casing\n    b\\x{0131}I\n 0: b\\x{131}I\n    bII\n 0: bII\n\\= Expect no match\n    biI\nNo match\n    b\\x{0130}I\nNo match\n\n/[a-z](?r:[^i])I/i,ucp,turkish_casing\n    b\\x{0131}I\n 0: b\\x{131}I\n    b\\x{0130}I\n 0: b\\x{130}I\n\\= Expect no match\n    bII\nNo match\n    biI\nNo match\n\n/b(?r:[\\x{00FF}-\\x{FFEE}])/i,ucp,turkish_casing\n    b\\x{0130}\n 0: b\\x{130}\n    b\\x{0131}\n 0: b\\x{131}\n    B\\x{212a}\n 0: B\\x{212a}\n\\= Expect no match\n    bi\nNo match\n    bI\nNo match\n    bk\nNo match\n\n/[\\x60-\\x7f]/i,ucp,turkish_casing\n    i\n 0: i\n\\= Expect no match\n    I\nNo match\n\n/[\\x60-\\xc0]/i,ucp,turkish_casing\n    i\n 0: i\n\\= Expect no match\n    I\nNo match\n\n/[\\x80-\\xc0]/i,ucp,turkish_casing\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n\n# ---------------------------------------------------- \n\n/b[\\x{00FF}-\\x{FFEE}]/ir\n    b\\x{0130}\n 0: b\\x{130}\n    b\\x{0131}\n 0: b\\x{131}\n    B\\x{212a}\n 0: B\\x{212a}\n\\= Expect no match\n    bi\nNo match\n    bI\nNo match\n    bk\nNo match\n\n# Quantifier after a literal that has the value of META_ACCEPT (not UTF). This\n# fails in 16-bit mode, but is OK for 32-bit.\n\n/\\x{802a0000}*/\nFailed: error 134 at offset 11: character code point value in \\x{} or \\o{} is too large\n        here: ...x{802a0000 |<--| }*\n    \\x{802a0000}\\x{802a0000}\n\n# UTF matching without UTF, check invalid UTF characters\n/\\X++/\n    a\\x{110000}\\x{ffffffff}\n** Character \\x{110000} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\n** Character \\x{ffffffff} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\n 0: a\\x00\\x{ffff}\n\n# This used to loop in 32-bit mode; it will fail in 16-bit mode.\n/[\\x{ffffffff}]/caseless,ucp\nFailed: error 134 at offset 12: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }]\n    \\x{ffffffff}xyz\n    \n# These are 32-bit tests for handing 0xffffffff when in UCP caselsss mode. They\n# will give errors in 16-bit mode.\n\n/k*\\x{ffffffff}/caseless,ucp\nFailed: error 134 at offset 13: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n    \\x{ffffffff}\n\n/k+\\x{ffffffff}/caseless,ucp,no_start_optimize\nFailed: error 134 at offset 13: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n    K\\x{ffffffff}\n\\= Expect no match     \n    \\x{ffffffff}\\x{ffffffff}\n\n/k{2}\\x{ffffffff}/caseless,ucp,no_start_optimize\nFailed: error 134 at offset 15: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\n\n/k\\x{ffffffff}/caseless,ucp,no_start_optimize\nFailed: error 134 at offset 12: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n    K\\x{ffffffff}\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\n\n/k{2,}?Z/caseless,ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    Kk\\x{ffffffff}\\x{ffffffff}\\x{ffffffff}Z\n** Character \\x{ffffffff} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\n** Character \\x{ffffffff} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\n** Character \\x{ffffffff} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\nNo match\n\n/[sk](?r:[sk])[sk]/Bi,ucp\n------------------------------------------------------------------\n        Bra\n        [KSks\\x{17f}\\x{212a}]\n        Bra\n        [KSks]\n        Ket\n        [KSks\\x{17f}\\x{212a}]\n        Ket\n        End\n------------------------------------------------------------------\n    SKS\n 0: SKS\n    sks\n 0: sks\n    \\x{212a}S\\x{17f}\n 0: \\x{212a}S\\x{17f}\n    \\x{17f}K\\x{212a}\n 0: \\x{17f}K\\x{212a}\n\\= Expect no match\n    s\\x{212a}s\nNo match\n    K\\x{17f}K\nNo match\n\n# --------------------------------------------------------- \n\n# End of testinput12\n"
  },
  {
    "path": "testdata/testoutput12-32",
    "content": "# This set of tests is for UTF-16 and UTF-32 support, including Unicode\n# properties. It is relevant only to the 16-bit and 32-bit libraries. The\n# output is different for each library, so there are separate output files.\n\n/xxx/IB,utf,no_utf_check\n** Failed: invalid UTF-8 string cannot be converted to 32-bit string\n\n/abc/utf\n    ]\n** Failed: invalid UTF-8 string cannot be used as input in UTF mode\n\n# Check maximum character size \n\n/\\x{ffff}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{ffff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{ffff}\nSubject length lower bound = 1\n\n/\\x{10000}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{10000}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{10000}\nSubject length lower bound = 1\n\n/\\x{100}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100}\nSubject length lower bound = 1\n\n/\\x{1000}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{1000}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{1000}\nSubject length lower bound = 1\n\n/\\x{10000}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{10000}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{10000}\nSubject length lower bound = 1\n\n/\\x{100000}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100000}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100000}\nSubject length lower bound = 1\n\n/\\x{10ffff}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{10ffff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{10ffff}\nSubject length lower bound = 1\n\n/[\\x{ff}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{ff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xff\nSubject length lower bound = 1\n\n/[\\x{100}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100}\nSubject length lower bound = 1\n\n/\\x80/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{80}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x80\nSubject length lower bound = 1\n\n/\\xff/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{ff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xff\nSubject length lower bound = 1\n\n/\\x{D55c}\\x{ad6d}\\x{C5B4}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{d55c}\\x{ad6d}\\x{c5b4}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{d55c}\nLast code unit = \\x{c5b4}\nSubject length lower bound = 3\n    \\x{D55c}\\x{ad6d}\\x{C5B4}\n 0: \\x{d55c}\\x{ad6d}\\x{c5b4}\n\n/\\x{65e5}\\x{672c}\\x{8a9e}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{65e5}\\x{672c}\\x{8a9e}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{65e5}\nLast code unit = \\x{8a9e}\nSubject length lower bound = 3\n    \\x{65e5}\\x{672c}\\x{8a9e}\n 0: \\x{65e5}\\x{672c}\\x{8a9e}\n\n/\\x{80}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{80}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x80\nSubject length lower bound = 1\n\n/\\x{084}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{84}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x84\nSubject length lower bound = 1\n\n/\\x{104}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{104}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{104}\nSubject length lower bound = 1\n\n/\\x{861}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{861}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{861}\nSubject length lower bound = 1\n\n/\\x{212ab}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{212ab}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{212ab}\nSubject length lower bound = 1\n\n/[^ab\\xC0-\\xF0]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [^ab\\xc0-\\xf0]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4\n  5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y\n  Z [ \\ ] ^ _ ` c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f\n  \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e\n  \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d\n  \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac\n  \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb\n  \\xbc \\xbd \\xbe \\xbf \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb\n  \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n    \\x{f1}\n 0: \\x{f1}\n    \\x{bf}\n 0: \\x{bf}\n    \\x{100}\n 0: \\x{100}\n    \\x{1000}\n 0: \\x{1000}\n\\= Expect no match\n    \\x{c0}\nNo match\n    \\x{f0}\nNo match\n\n/(\\x{100}+|x)/IB,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\x{100}++\n        Alt\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: x \\xff\nSubject length lower bound = 1\n\n/(\\x{100}*a|x)/IB,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\x{100}*+\n        a\n        Alt\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: a x \\xff\nSubject length lower bound = 1\n\n/(\\x{100}{0,2}a|x)/IB,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\x{100}{0,2}+\n        a\n        Alt\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: a x \\xff\nSubject length lower bound = 1\n\n/(\\x{100}{1,2}a|x)/IB,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\x{100}\n        \\x{100}{0,1}+\n        a\n        Alt\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: x \\xff\nSubject length lower bound = 1\n\n/\\x{100}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100}\nSubject length lower bound = 1\n\n/a\\x{100}\\x{101}*/IB,utf\n------------------------------------------------------------------\n        Bra\n        a\\x{100}\n        \\x{101}*+\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'a'\nLast code unit = \\x{100}\nSubject length lower bound = 2\n\n/a\\x{100}\\x{101}+/IB,utf\n------------------------------------------------------------------\n        Bra\n        a\\x{100}\n        \\x{101}++\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'a'\nLast code unit = \\x{101}\nSubject length lower bound = 3\n\n/[^\\x{c4}]/IB\n------------------------------------------------------------------\n        Bra\n        [^\\x{c4}] (not)\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nSubject length lower bound = 1\n\n/[\\x{100}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100}\nSubject length lower bound = 1\n    \\x{100}\n 0: \\x{100}\n    Z\\x{100}\n 0: \\x{100}\n    \\x{100}Z\n 0: \\x{100}\n\n/[\\xff]/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{ff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xff\nSubject length lower bound = 1\n    >\\x{ff}<\n 0: \\x{ff}\n\n/[^\\xff]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x{ff}] (not)\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nSubject length lower bound = 1\n\n/\\x{100}abc(xyz(?1))/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}abc\n        CBra 1\n        xyz\n        Recurse\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nFirst code unit = \\x{100}\nLast code unit = 'z'\nSubject length lower bound = 7\n\n/\\777/I,utf\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{1ff}\nSubject length lower bound = 1\n  \\x{1ff}\n 0: \\x{1ff}\n  \\777\n 0: \\x{1ff}\n\n/\\x{100}+\\x{200}/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}++\n        \\x{200}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100}\nLast code unit = \\x{200}\nSubject length lower bound = 2\n\n/\\x{100}+X/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}++\n        X\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{100}\nLast code unit = 'X'\nSubject length lower bound = 2\n\n/^[\\QĀ\\E-\\QŐ\\E/B,utf\nFailed: error 106 at offset 13: missing terminating ] for character class\n        here: ...QĀ\\E-\\QŐ\\E |<--|\n\n/X/utf\n    XX\\x{d800}\\=no_utf_check\n 0: X\n    XX\\x{da00}\\=no_utf_check\n 0: X\n    XX\\x{dc00}\\=no_utf_check\n 0: X\n    XX\\x{de00}\\=no_utf_check\n 0: X\n    XX\\x{dfff}\\=no_utf_check\n 0: X\n\\= Expect UTF error\n    XX\\x{d800}\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{da00}\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{dc00}\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{de00}\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{dfff}\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{110000}\nFailed: error -28: UTF-32 error: code points greater than 0x10ffff are not defined at offset 2\n    XX\\x{d800}\\x{1234}\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n\\= Expect no match\n    XX\\x{d800}\\=offset=3\nNo match\n    \n/(?<=.)X/utf\n    XX\\x{d800}\\=offset=3\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n\n/(*UTF16)\\x{11234}/\nFailed: error 160 at offset 7: (*VERB) not recognized or malformed\n        here: (*UTF16 |<--| )\\x{11234}\n  abcd\\x{11234}pqr\n\n/(*UTF)\\x{11234}/I\nCapture group count = 0\nCompile options: <none>\nOverall options: utf\nFirst code unit = \\x{11234}\nSubject length lower bound = 1\n  abcd\\x{11234}pqr\n 0: \\x{11234}\n\n/(*UTF-32)\\x{11234}/\nFailed: error 160 at offset 5: (*VERB) not recognized or malformed\n        here: (*UTF |<--| -32)\\x{112...\n  abcd\\x{11234}pqr\n\n/(*UTF-32)\\x{112}/\nFailed: error 160 at offset 5: (*VERB) not recognized or malformed\n        here: (*UTF |<--| -32)\\x{112...\n  abcd\\x{11234}pqr\n\n/(*CRLF)(*UTF16)(*BSR_UNICODE)a\\Rb/I\nFailed: error 160 at offset 14: (*VERB) not recognized or malformed\n        here: ...LF)(*UTF16 |<--| )(*BSR_UNI...\n\n/(*CRLF)(*UTF32)(*BSR_UNICODE)a\\Rb/I\nCapture group count = 0\nCompile options: <none>\nOverall options: utf\n\\R matches any Unicode newline\nForced newline is CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n\n/\\h/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x20 \\xa0 \\xff\nSubject length lower bound = 1\n    ABC\\x{09}\n 0: \\x{09}\n    ABC\\x{20}\n 0:  \n    ABC\\x{a0}\n 0: \\x{a0}\n    ABC\\x{1680}\n 0: \\x{1680}\n    ABC\\x{180e}\n 0: \\x{180e}\n    ABC\\x{2000}\n 0: \\x{2000}\n    ABC\\x{202f}\n 0: \\x{202f}\n    ABC\\x{205f}\n 0: \\x{205f}\n    ABC\\x{3000}\n 0: \\x{3000}\n\n/\\v/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85 \\xff\nSubject length lower bound = 1\n    ABC\\x{0a}\n 0: \\x{0a}\n    ABC\\x{0b}\n 0: \\x{0b}\n    ABC\\x{0c}\n 0: \\x{0c}\n    ABC\\x{0d}\n 0: \\x{0d}\n    ABC\\x{85}\n 0: \\x{85}\n    ABC\\x{2028}\n 0: \\x{2028}\n\n/\\h*A/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x20 A \\xa0 \\xff\nLast code unit = 'A'\nSubject length lower bound = 1\n    CDBABC\n 0: A\n    \\x{2000}ABC\n 0: \\x{2000}A\n\n/\\R*A/I,bsr=unicode,utf\nCapture group count = 0\nOptions: utf\n\\R matches any Unicode newline\nStarting code units: \\x0a \\x0b \\x0c \\x0d A \\x85 \\xff\nLast code unit = 'A'\nSubject length lower bound = 1\n    CDBABC\n 0: A\n    \\x{2028}A\n 0: \\x{2028}A\n\n/\\v+A/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85 \\xff\nLast code unit = 'A'\nSubject length lower bound = 2\n\n/\\s?xxx\\s/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 x\nLast code unit = 'x'\nSubject length lower bound = 4\n\n/\\sxxx\\s/I,utf,tables=2\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 \\x85 \\xa0\nLast code unit = 'x'\nSubject length lower bound = 5\n    AB\\x{85}xxx\\x{a0}XYZ\n 0: \\x{85}xxx\\x{a0}\n    AB\\x{a0}xxx\\x{85}XYZ\n 0: \\x{a0}xxx\\x{85}\n\n/\\S \\S/I,utf,tables=2\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x0e \\x0f\n  \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e\n  \\x1f ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C\n  D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c d e f g h\n  i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84\n  \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93 \\x94\n  \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa1 \\xa2 \\xa3 \\xa4\n  \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3\n  \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2\n  \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1\n  \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0\n  \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef\n  \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe\n  \\xff\nLast code unit = ' '\nSubject length lower bound = 3\n    \\x{a2} \\x{84}\n 0: \\x{a2} \\x{84}\n    A Z\n 0: A Z\n\n/a+/utf\n    a\\x{123}aa\\=offset=1\n 0: aa\n    a\\x{123}aa\\=offset=2\n 0: aa\n    a\\x{123}aa\\=offset=3\n 0: a\n\\= Expect no match\n    a\\x{123}aa\\=offset=4\nNo match\n\\= Expect bad offset error     \n    a\\x{123}aa\\=offset=5\nFailed: error -33: bad offset value\n    a\\x{123}aa\\=offset=6\nFailed: error -33: bad offset value\n\n/\\x{1234}+/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = \\x{1234}\nSubject length lower bound = 1\n\n/\\x{1234}+?/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = \\x{1234}\nSubject length lower bound = 1\n\n/\\x{1234}++/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = \\x{1234}\nSubject length lower bound = 1\n\n/\\x{1234}{2}/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = \\x{1234}\nLast code unit = \\x{1234}\nSubject length lower bound = 2\n\n/[^\\x{c4}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x{c4}] (not)\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nSubject length lower bound = 1\n\n/X+\\x{200}/IB,utf\n------------------------------------------------------------------\n        Bra\n        X++\n        \\x{200}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'X'\nLast code unit = \\x{200}\nSubject length lower bound = 2\n\n/\\R/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85 \\xff\nSubject length lower bound = 1\n\n# Check bad offset \n\n/a/utf\n\\= Expect bad UTF-16 offset, or no match in 32-bit\n    \\x{10000}\\=offset=1\nNo match\n    \\x{10000}ab\\=offset=1\n 0: a\n\\= Expect 16-bit match, 32-bit no match\n    \\x{10000}ab\\=offset=2\nNo match\n\\= Expect no match     \n    \\x{10000}ab\\=offset=3\nNo match\n\\= Expect no match in 16-bit, bad offset in 32-bit    \n    \\x{10000}ab\\=offset=4\nFailed: error -33: bad offset value\n\\= Expect bad offset     \n    \\x{10000}ab\\=offset=5\nFailed: error -33: bad offset value\n\n//utf\nFailed: error -27 at offset 0: UTF-32 error: code points 0xd800-0xdfff are not defined\n        here: |-->| \n\n/\\w+\\x{C4}/B,utf\n------------------------------------------------------------------\n        Bra\n        \\w++\n        \\x{c4}\n        Ket\n        End\n------------------------------------------------------------------\n    a\\x{C4}\\x{C4}\n 0: a\\x{c4}\n\n/\\w+\\x{C4}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\w+\n        \\x{c4}\n        Ket\n        End\n------------------------------------------------------------------\n    a\\x{C4}\\x{C4}\n 0: a\\x{c4}\\x{c4}\n    \n/\\W+\\x{C4}/B,utf\n------------------------------------------------------------------\n        Bra\n        \\W+\n        \\x{c4}\n        Ket\n        End\n------------------------------------------------------------------\n    !\\x{C4}\n 0: !\\x{c4}\n \n/\\W+\\x{C4}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\W++\n        \\x{c4}\n        Ket\n        End\n------------------------------------------------------------------\n    !\\x{C4}\n 0: !\\x{c4}\n\n/\\W+\\x{A1}/B,utf\n------------------------------------------------------------------\n        Bra\n        \\W+\n        \\x{a1}\n        Ket\n        End\n------------------------------------------------------------------\n    !\\x{A1}\n 0: !\\x{a1}\n \n/\\W+\\x{A1}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\W+\n        \\x{a1}\n        Ket\n        End\n------------------------------------------------------------------\n    !\\x{A1}\n 0: !\\x{a1}\n\n/X\\s+\\x{A0}/B,utf\n------------------------------------------------------------------\n        Bra\n        X\n        \\s++\n        \\x{a0}\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x20\\x{A0}\\x{A0}\n 0: X \\x{a0}\n\n/X\\s+\\x{A0}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        X\n        \\s+\n        \\x{a0}\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x20\\x{A0}\\x{A0}\n 0: X \\x{a0}\\x{a0}\n\n/\\S+\\x{A0}/B,utf\n------------------------------------------------------------------\n        Bra\n        \\S+\n        \\x{a0}\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x{A0}\\x{A0}\n 0: X\\x{a0}\\x{a0}\n\n/\\S+\\x{A0}/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\S++\n        \\x{a0}\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x{A0}\\x{A0}\n 0: X\\x{a0}\n\n/\\x{a0}+\\s!/B,utf\n------------------------------------------------------------------\n        Bra\n        \\x{a0}++\n        \\s\n        !\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{a0}\\x20!\n 0: \\x{a0} !\n\n/\\x{a0}+\\s!/B,utf,tables=2\n------------------------------------------------------------------\n        Bra\n        \\x{a0}+\n        \\s\n        !\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{a0}\\x20!\n 0: \\x{a0} !\n\n/(*UTF)abc/never_utf\nFailed: error 174 at offset 6: using UTF is disabled by the application\n        here: (*UTF) |<--| abc\n\n/abc/utf,never_utf\nFailed: error 174 at offset 0: using UTF is disabled by the application\n\n/(*UCP)abc/never_ucp\nFailed: error 175 at offset 6: using UCP is disabled by the application\n        here: (*UCP) |<--| abc\n\n/abc/ucp,never_ucp\nFailed: error 175 at offset 0: using UCP is disabled by the application\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/IBi,utf\n------------------------------------------------------------------\n        Bra\n     /i A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = 'A' (caseless)\nLast code unit = \\x{1fb0} (caseless)\nSubject length lower bound = 5\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/IB,utf\n------------------------------------------------------------------\n        Bra\n        A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = \\x{1fb0}\nSubject length lower bound = 5\n\n/AB\\x{1fb0}/IB,utf\n------------------------------------------------------------------\n        Bra\n        AB\\x{1fb0}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = \\x{1fb0}\nSubject length lower bound = 3\n\n/AB\\x{1fb0}/IBi,utf\n------------------------------------------------------------------\n        Bra\n     /i AB\\x{1fb0}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = 'A' (caseless)\nLast code unit = \\x{1fb0} (caseless)\nSubject length lower bound = 3\n\n/\\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = \\x{401} (caseless)\nLast code unit = \\x{42f} (caseless)\nSubject length lower bound = 17\n    \\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}\n 0: \\x{401}\\x{420}\\x{421}\\x{422}\\x{423}\\x{424}\\x{425}\\x{426}\\x{427}\\x{428}\\x{429}\\x{42a}\\x{42b}\\x{42c}\\x{42d}\\x{42e}\\x{42f}\n    \\x{451}\\x{440}\\x{441}\\x{442}\\x{443}\\x{444}\\x{445}\\x{446}\\x{447}\\x{448}\\x{449}\\x{44a}\\x{44b}\\x{44c}\\x{44d}\\x{44e}\\x{44f}\n 0: \\x{451}\\x{440}\\x{441}\\x{442}\\x{443}\\x{444}\\x{445}\\x{446}\\x{447}\\x{448}\\x{449}\\x{44a}\\x{44b}\\x{44c}\\x{44d}\\x{44e}\\x{44f}\n\n/[ⱥ]/Bi,utf\n------------------------------------------------------------------\n        Bra\n     /i \\x{2c65}\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^ⱥ]/Bi,utf\n------------------------------------------------------------------\n        Bra\n     /i [^\\x{2c65}] (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:blank:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\x{212a}+/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nStarting code units: K k \\xff\nSubject length lower bound = 1\n    KKkk\\x{212a}\n 0: KKkk\\x{212a}\n\n/s+/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nStarting code units: S s \\xff\nSubject length lower bound = 1\n    SSss\\x{17f}\n 0: SSss\\x{17f}\n\n# Non-UTF characters should give errors in both 16-bit and 32-bit modes.\n\n/\\x{110000}/utf\nFailed: error 134 at offset 9: character code point value in \\x{} or \\o{} is too large\n        here: \\x{110000 |<--| }\n\n/\\o{4200000}/utf\nFailed: error 134 at offset 10: character code point value in \\x{} or \\o{} is too large\n        here: \\o{4200000 |<--| }\n\n/\\x{100}*A/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        A\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: A \\xff\nLast code unit = 'A'\nSubject length lower bound = 1\n    A\n 0: A\n\n/\\x{100}*\\d(?R)/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        \\d\n        Recurse\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: 0 1 2 3 4 5 6 7 8 9 \\xff\nSubject length lower bound = 1\n\n/[Z\\x{100}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [Z\\x{100}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: Z \\xff\nSubject length lower bound = 1\n    Z\\x{100}\n 0: Z\n    \\x{100}\n 0: \\x{100}\n    \\x{100}Z\n 0: \\x{100}\n\n/[z-\\x{100}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [z-\\xff\\x{100}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: z { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87\n  \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96\n  \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5\n  \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4\n  \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3\n  \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2\n  \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1\n  \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0\n  \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/[z\\Qa-d]Ā\\E]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [\\-\\]adz\\x{100}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: - ] a d z \\xff\nSubject length lower bound = 1\n    \\x{100}\n 0: \\x{100}\n    Ā \n 0: \\x{100}\n\n/[ab\\x{100}]abc(xyz(?1))/IB,utf\n------------------------------------------------------------------\n        Bra\n        [ab\\x{100}]\n        abc\n        CBra 1\n        xyz\n        Recurse\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nStarting code units: a b \\xff\nLast code unit = 'z'\nSubject length lower bound = 7\n\n/\\x{100}*\\s/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        \\s\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 \\xff\nSubject length lower bound = 1\n\n/\\x{100}*\\d/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: 0 1 2 3 4 5 6 7 8 9 \\xff\nSubject length lower bound = 1\n\n/\\x{100}*\\w/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\n  \\xff\nSubject length lower bound = 1\n\n/\\x{100}*\\D/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*\n        \\D\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / : ; < = >\n  ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c\n  d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80 \\x81 \\x82\n  \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91\n  \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0\n  \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf\n  \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe\n  \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd\n  \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc\n  \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb\n  \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa\n  \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/\\x{100}*\\S/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*\n        \\S\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x0e \\x0f\n  \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e\n  \\x1f ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C\n  D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c d e f g h\n  i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84\n  \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93\n  \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2\n  \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1\n  \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0\n  \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf\n  \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde\n  \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed\n  \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc\n  \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/\\x{100}*\\W/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*\n        \\W\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / : ; < = >\n  ? @ [ \\ ] ^ ` { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89\n  \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98\n  \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7\n  \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6\n  \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5\n  \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4\n  \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3\n  \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2\n  \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/[\\x{105}-\\x{109}]/IBi,utf\n------------------------------------------------------------------\n        Bra\n        [\\x{104}-\\x{109}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nStarting code units: \\xff\nSubject length lower bound = 1\n    \\x{104}\n 0: \\x{104}\n    \\x{105}\n 0: \\x{105}\n    \\x{109}  \n 0: \\x{109}\n\\= Expect no match\n    \\x{100}\nNo match\n    \\x{10a} \nNo match\n    \n/[z-\\x{100}]/IBi,utf\n------------------------------------------------------------------\n        Bra\n        [Zz-\\xff\\x{100}-\\x{101}\\x{178}\\x{39c}\\x{3bc}\\x{1e9e}\\x{212b}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nStarting code units: Z z { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86\n  \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95\n  \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4\n  \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3\n  \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2\n  \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1\n  \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0\n  \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef\n  \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe\n  \\xff\nSubject length lower bound = 1\n    Z\n 0: Z\n    z\n 0: z\n    \\x{39c}\n 0: \\x{39c}\n    \\x{178}\n 0: \\x{178}\n    |\n 0: |\n    \\x{80}\n 0: \\x{80}\n    \\x{ff}\n 0: \\x{ff}\n    \\x{100}\n 0: \\x{100}\n    \\x{101} \n 0: \\x{101}\n\\= Expect no match\n    \\x{102}\nNo match\n    Y\nNo match\n    y           \nNo match\n\n/[z-\\x{100}]/IBi,utf\n------------------------------------------------------------------\n        Bra\n        [Zz-\\xff\\x{100}-\\x{101}\\x{178}\\x{39c}\\x{3bc}\\x{1e9e}\\x{212b}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nStarting code units: Z z { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86\n  \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95\n  \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4\n  \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3\n  \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2\n  \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1\n  \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0\n  \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef\n  \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe\n  \\xff\nSubject length lower bound = 1\n\n/\\x{3a3}B/IBi,utf\n------------------------------------------------------------------\n        Bra\n        clist 03a3 03c2 03c3\n     /i B\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nStarting code units: \\xff\nLast code unit = 'B' (caseless)\nSubject length lower bound = 2\n\n/./utf\n    \\x{110000}\nFailed: error -28: UTF-32 error: code points greater than 0x10ffff are not defined at offset 0\n\n/(*UTF)abz/B\n------------------------------------------------------------------\n        Bra\n        ab\\x{fd}\\x{bf}\\x{bf}\\x{bf}\\x{bf}\\x{bf}z\n        Ket\n        End\n------------------------------------------------------------------\n\n/abz/utf\n** Failed: character value greater than 0x10ffff cannot be converted to UTF\n\n/[\\W\\p{Any}]/B\n------------------------------------------------------------------\n        Bra\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n    abc\n 0: a\n    123 \n 0: 1\n\n/[\\W\\pL]/B\n------------------------------------------------------------------\n        Bra\n        [^0-9_]\n        Ket\n        End\n------------------------------------------------------------------\n    abc\n 0: a\n    \\x{100}\n 0: \\x{100}\n    \\x{308}  \n 0: \\x{308}\n\\= Expect no match\n    123     \nNo match\n\n/[\\s[:^ascii:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [^\\x00-\\x08\\x0e-\\x1f!-\\x7f]\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\pP/ucp\n    \\x{7fffffff}\nNo match\n\n/\\p{  Aሴ}/utf\nFailed: error 146 at offset 7: malformed \\P or \\p sequence\n        here: \\p{  Aሴ |<--| }\n\n/\\p{BC: Aሴ}/utf\nFailed: error 146 at offset 9: malformed \\P or \\p sequence\n        here: \\p{BC: Aሴ |<--| }\n\n# A special extra option allows escaped surrogate code points in 32-bit mode,\n# but subjects containing them must not be UTF-checked. These patterns give\n# errors in 16-bit mode.\n\n/\\x{d800}/I,utf,allow_surrogate_escapes\nCapture group count = 0\nOptions: utf\nExtra options: allow_surrogate_escapes\nFirst code unit = \\x{d800}\nSubject length lower bound = 1\n    \\x{d800}\\=no_utf_check\n 0: \\x{d800}\n\n/\\udfff\\o{157401}/utf,alt_bsux,allow_surrogate_escapes\n    \\x{dfff}\\x{df01}\\=no_utf_check\n 0: \\x{dfff}\\x{df01}\n\n# This has different starting code units in 8-bit mode. \n\n/^[^ab]/IB,utf\n------------------------------------------------------------------\n        Bra\n        ^\n        [^ab]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: utf\nOverall options: anchored utf\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4\n  5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y\n  Z [ \\ ] ^ _ ` c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f\n  \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e\n  \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d\n  \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac\n  \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb\n  \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca\n  \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9\n  \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8\n  \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7\n  \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n    c\n 0: c\n    \\x{ff}\n 0: \\x{ff}\n    \\x{100}\n 0: \\x{100}\n\\= Expect no match\n    aaa\nNo match\n    \n# Offsets are different in 8-bit mode. \n\n/(?<=abc)(|def)/g,utf,replace=<$0>,substitute_callout\n    123abcáyzabcdef789abcሴqr\n 1(2) Old 6 6 \"\" New 6 8 \"<>\"\n 2(2) Old 12 12 \"\" New 14 16 \"<>\"\n 3(2) Old 12 15 \"def\" New 16 21 \"<def>\"\n 4(2) Old 21 21 \"\" New 27 29 \"<>\"\n 4: 123abc<>\\x{e1}yzabc<><def>789abc<>\\x{1234}qr\n    \n# A few script run tests in non-UTF mode (but they need Unicode support)\n\n/^(*script_run:.{4})/\n    \\x{3041}\\x{30a1}\\x{3007}\\x{3007}   Hiragana Katakana Han Han\n 0: \\x{3041}\\x{30a1}\\x{3007}\\x{3007}\n    \\x{30a1}\\x{3041}\\x{3007}\\x{3007}   Katakana Hiragana Han Han\n 0: \\x{30a1}\\x{3041}\\x{3007}\\x{3007}\n    \\x{1100}\\x{2e80}\\x{2e80}\\x{1101}   Hangul Han Han Hangul\n 0: \\x{1100}\\x{2e80}\\x{2e80}\\x{1101}\n \n/^(*sr:.*)/utf,allow_surrogate_escapes\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\n 0: \\x{2e80}\\x{3105}\\x{2e80}\n    \\x{d800}\\x{dfff}                   Surrogates (Unknown) \\=no_utf_check\n 0: \\x{d800}\n\n/(?(n/utf\nFailed: error 142 at offset 4: syntax error in subpattern name (missing terminator?)\n        here: (?(n |<--|\n\n/(?(á/utf\nFailed: error 142 at offset 4: syntax error in subpattern name (missing terminator?)\n        here: (?(á |<--|\n\n/^\\cģ/utf\nFailed: error 168 at offset 4: \\c must be followed by a printable ASCII character\n        here: ^\\cģ |<--|\n\n/(?'٠ABC'...)/utf\nFailed: error 144 at offset 4: subpattern name must start with a non-digit\n        here: (?'٠ |<--| ABC'...)\n\n# Invalid UTF-16/32 tests.\n\n/.../g,match_invalid_utf\n    abcd\\x{df00}wxzy\\x{df00}pqrs\n 0: abc\n 0: wxz\n 0: pqr\n    abcd\\x{80}wxzy\\x{df00}pqrs\n 0: abc\n 0: d\\x{80}w\n 0: xzy\n 0: pqr\n\n/abc/match_invalid_utf\n    ab\\x{df00}ab\\=ph\nPartial match: ab\n\\= Expect no match\n    ab\\x{df00}cdef\\=ph\nNo match\n\n/.a/match_invalid_utf\n    ab\\=ph\nPartial match: b\n    ab\\=ps\nPartial match: b\n\\= Expect no match\n    b\\x{df00}\\=ph\nNo match\n    b\\x{df00}\\=ps\nNo match\n\n/.a$/match_invalid_utf\n    ab\\=ph\nPartial match: b\n    ab\\=ps\nPartial match: b\n\\= Expect no match\n    b\\x{df00}\\=ph\nNo match\n    b\\x{df00}\\=ps\nNo match\n\n/ab$/match_invalid_utf\n    ab\\x{df00}cdeab\n 0: ab\n\\= Expect no match\n    ab\\x{df00}cde\nNo match\n\n/.../g,match_invalid_utf\n    abcd\\x{80}wxzy\\x{df00}pqrs\n 0: abc\n 0: d\\x{80}w\n 0: xzy\n 0: pqr\n\n/(?<=x)../g,match_invalid_utf\n    abcd\\x{80}wxzy\\x{df00}pqrs\n 0: zy\n    abcd\\x{80}wxzy\\x{df00}xpqrs\n 0: zy\n 0: pq\n\n/X$/match_invalid_utf\n\\= Expect no match\n    X\\x{df00}\nNo match\n    \n/(?<=..)X/match_invalid_utf,aftertext\n    AB\\x{df00}AQXYZ\n 0: X\n 0+ YZ\n    AB\\x{df00}AQXYZ\\=offset=5\n 0: X\n 0+ YZ\n    AB\\x{df00}\\x{df00}AXYZXC\\=offset=5\n 0: X\n 0+ C\n\\= Expect no match\n    AB\\x{df00}XYZ\nNo match\n    AB\\x{df00}XYZ\\=offset=3 \nNo match\n    AB\\x{df00}AXYZ\nNo match\n    AB\\x{df00}AXYZ\\=offset=4\nNo match\n    AB\\x{df00}\\x{df00}AXYZ\\=offset=5\nNo match\n\n/.../match_invalid_utf\n\\= Expect no match\n    A\\x{d800}B\nNo match\n    A\\x{110000}B \nNo match\n    \n/aa/utf,ucp,match_invalid_utf,global\n    aa\\x{d800}aa\n 0: aa\n 0: aa\n\n/aa/utf,ucp,match_invalid_utf,global\n    \\x{d800}aa\n 0: aa\n    \n/A\\z/utf,match_invalid_utf\n    A\\x{df00}\\n\nNo match\n\n/ab$/match_invalid_utf\n\\= Expect no match            \n    ab\\x{df00}cde         \nNo match\n\n/ab\\z/match_invalid_utf\n\\= Expect no match            \n    ab\\x{df00}cde         \nNo match\n\n/ab\\Z/match_invalid_utf\n\\= Expect no match            \n    ab\\x{df00}cde         \nNo match\n\n/(..)(*scs:(1)ab\\z)/match_invalid_utf\n    ab\\x{df00}cde         \n 0: ab\n 1: ab\n\n/(..)(*scs:(1)ab\\Z)/match_invalid_utf\n    ab\\x{df00}cde         \n 0: ab\n 1: ab\n\n/(..)(*scs:(1)ab$)/match_invalid_utf\n    ab\\x{df00}cde         \n 0: ab\n 1: ab\n\n# ---------------------------------------------------- \n\n/(*UTF)(?=\\x{123})/I\nCapture group count = 0\nMay match empty string\nCompile options: <none>\nOverall options: utf\nFirst code unit = \\x{123}\nSubject length lower bound = 1\n\n/[\\x{c1}\\x{e1}]X[\\x{145}\\x{146}]/I,utf\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xc1 (caseless)\nLast code unit = \\x{145} (caseless)\nSubject length lower bound = 3\n\n/[\\xff\\x{ffff}]/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\xff\nSubject length lower bound = 1\n\n/[\\xff\\x{ff}]/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\xff\nSubject length lower bound = 1\n\n/[\\xff\\x{ff}]/I\nCapture group count = 0\nStarting code units: \\xff\nSubject length lower bound = 1\n\n/[Ss]/I\nCapture group count = 0\nFirst code unit = 'S' (caseless)\nSubject length lower bound = 1\n\n/[Ss]/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: S s\nSubject length lower bound = 1\n\n/(?:\\x{ff}|\\x{3000})/I,utf\nCapture group count = 0\nOptions: utf\nStarting code units: \\xff\nSubject length lower bound = 1\n\n# ---------------------------------------------------- \n# UCP and casing tests\n\n/\\x{120}/iI\nCapture group count = 0\nOptions: caseless\nFirst code unit = \\x{120}\nSubject length lower bound = 1\n\n/\\x{c1}/iI,ucp\nCapture group count = 0\nOptions: caseless ucp\nFirst code unit = \\xc1 (caseless)\nSubject length lower bound = 1\n\n/[\\x{120}\\x{121}]/iB,ucp\n------------------------------------------------------------------\n        Bra\n     /i \\x{120}\n        Ket\n        End\n------------------------------------------------------------------\n\n/[ab\\x{120}]+/iB,ucp\n------------------------------------------------------------------\n        Bra\n        [ABab\\x{120}-\\x{121}]++\n        Ket\n        End\n------------------------------------------------------------------\n    aABb\\x{121}\\x{120}\n 0: aABb\\x{121}\\x{120}\n\n/\\x{c1}/i,no_start_optimize\n\\= Expect no match\n    \\x{e1}\nNo match\n\n/\\x{120}\\x{c1}/i,ucp,no_start_optimize\n    \\x{121}\\x{e1}\n 0: \\x{121}\\xe1\n\n/\\x{120}\\x{c1}/i,ucp\n    \\x{121}\\x{e1}\n 0: \\x{121}\\xe1\n\n/[^\\x{120}]/i,no_start_optimize\n    \\x{121}\n 0: \\x{121}\n\n/[^\\x{120}]/i,ucp,no_start_optimize\n\\= Expect no match\n    \\x{121}\nNo match\n\n/[^\\x{120}]/i\n    \\x{121}\n 0: \\x{121}\n\n/[^\\x{120}]/i,ucp\n\\= Expect no match\n    \\x{121}\nNo match\n    \n/\\x{120}{2}/i,ucp\n    \\x{121}\\x{121}\n 0: \\x{121}\\x{121}\n\n/[^\\x{120}]{2}/i,ucp\n\\= Expect no match\n    \\x{121}\\x{121}\nNo match\n\n/\\x{c1}+\\x{e1}/iB,ucp\n------------------------------------------------------------------\n        Bra\n     /i \\x{c1}+\n     /i \\x{e1}\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{c1}\\x{c1}\\x{c1}\n 0: \\xc1\\xc1\\xc1\n\n/\\x{c1}+\\x{e1}/iIB,ucp\n------------------------------------------------------------------\n        Bra\n     /i \\x{c1}+\n     /i \\x{e1}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless ucp\nFirst code unit = \\xc1 (caseless)\nLast code unit = \\xe1 (caseless)\nSubject length lower bound = 2\n    \\x{c1}\\x{c1}\\x{c1}\n 0: \\xc1\\xc1\\xc1\n    \\x{e1}\\x{e1}\\x{e1} \n 0: \\xe1\\xe1\\xe1\n\n/a|\\x{c1}/iI,ucp\nCapture group count = 0\nOptions: caseless ucp\nStarting code units: A a \\xc1 \\xe1\nSubject length lower bound = 1\n    \\x{e1}xxx\n 0: \\xe1\n\n/\\x{c1}|\\x{e1}/iI,ucp\nCapture group count = 0\nOptions: caseless ucp\nFirst code unit = \\xc1 (caseless)\nSubject length lower bound = 1\n\n/X(\\x{e1})Y/ucp,replace=>\\U$1<,substitute_extended\n    X\\x{e1}Y\n 1: >\\xc1<\n\n/X(\\x{121})Y/ucp,replace=>\\U$1<,substitute_extended\n    X\\x{121}Y\n 1: >\\x{120}<\n\n/s/i,ucp\n    \\x{17f} \n 0: \\x{17f}\n\n/s/i,utf\n    \\x{17f} \n 0: \\x{17f}\n\n/[^s]/i,ucp\n\\= Expect no match\n    \\x{17f} \nNo match\n\n/[^s]/i,utf\n\\= Expect no match\n    \\x{17f} \nNo match\n\n/(.) \\1/i,ucp\n    i I\n 0: i I\n 1: i\n\n/(.) \\1/i,ucp,turkish_casing\n\\= Expect no match\n    i I\nNo match\n\n/(.) \\1/i,ucp\n    i I\n 0: i I\n 1: i\n    \\x{212a} k\n 0: \\x{212a} k\n 1: \\x{212a}\n\\= Expect no match\n    i \\x{0130}\nNo match\n    \\x{0131} I\nNo match\n\n/(.) \\1/i,ucp,turkish_casing\n    \\x{212a} k\n 0: \\x{212a} k\n 1: \\x{212a}\n    i \\x{0130}\n 0: i \\x{130}\n 1: i\n    \\x{0131} I\n 0: \\x{131} I\n 1: \\x{131}\n\\= Expect no match\n    i I\nNo match\n\n/(.) (?r:\\1)/i,ucp,turkish_casing\n    i I\n 0: i I\n 1: i\n\\= Expect no match\n    i \\x{0130}\nNo match\n    \\x{0131} I\nNo match\n    \\x{212a} k\nNo match\n\n/[a-z][^i]I/ucp,turkish_casing\n    bII\n 0: bII\n    b\\x{0130}I\n 0: b\\x{130}I\n    b\\x{0131}I\n 0: b\\x{131}I\n\\= Expect no match\n    biI\nNo match\n\n/[a-z][^i]I/i,ucp,turkish_casing\n    b\\x{0131}I\n 0: b\\x{131}I\n    bII\n 0: bII\n\\= Expect no match\n    biI\nNo match\n    b\\x{0130}I\nNo match\n\n/[a-z](?r:[^i])I/i,ucp,turkish_casing\n    b\\x{0131}I\n 0: b\\x{131}I\n    b\\x{0130}I\n 0: b\\x{130}I\n\\= Expect no match\n    bII\nNo match\n    biI\nNo match\n\n/b(?r:[\\x{00FF}-\\x{FFEE}])/i,ucp,turkish_casing\n    b\\x{0130}\n 0: b\\x{130}\n    b\\x{0131}\n 0: b\\x{131}\n    B\\x{212a}\n 0: B\\x{212a}\n\\= Expect no match\n    bi\nNo match\n    bI\nNo match\n    bk\nNo match\n\n/[\\x60-\\x7f]/i,ucp,turkish_casing\n    i\n 0: i\n\\= Expect no match\n    I\nNo match\n\n/[\\x60-\\xc0]/i,ucp,turkish_casing\n    i\n 0: i\n\\= Expect no match\n    I\nNo match\n\n/[\\x80-\\xc0]/i,ucp,turkish_casing\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n\n# ---------------------------------------------------- \n\n/b[\\x{00FF}-\\x{FFEE}]/ir\n    b\\x{0130}\n 0: b\\x{130}\n    b\\x{0131}\n 0: b\\x{131}\n    B\\x{212a}\n 0: B\\x{212a}\n\\= Expect no match\n    bi\nNo match\n    bI\nNo match\n    bk\nNo match\n\n# Quantifier after a literal that has the value of META_ACCEPT (not UTF). This\n# fails in 16-bit mode, but is OK for 32-bit.\n\n/\\x{802a0000}*/\n    \\x{802a0000}\\x{802a0000}\n 0: \\x{802a0000}\\x{802a0000}\n\n# UTF matching without UTF, check invalid UTF characters\n/\\X++/\n    a\\x{110000}\\x{ffffffff}\n 0: a\\x{110000}\\x{ffffffff}\n\n# This used to loop in 32-bit mode; it will fail in 16-bit mode.\n/[\\x{ffffffff}]/caseless,ucp\n    \\x{ffffffff}xyz\n 0: \\x{ffffffff}\n    \n# These are 32-bit tests for handing 0xffffffff when in UCP caselsss mode. They\n# will give errors in 16-bit mode.\n\n/k*\\x{ffffffff}/caseless,ucp\n    \\x{ffffffff}\n 0: \\x{ffffffff}\n\n/k+\\x{ffffffff}/caseless,ucp,no_start_optimize\n    K\\x{ffffffff}\n 0: K\\x{ffffffff}\n\\= Expect no match     \n    \\x{ffffffff}\\x{ffffffff}\nNo match\n\n/k{2}\\x{ffffffff}/caseless,ucp,no_start_optimize\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\nNo match\n\n/k\\x{ffffffff}/caseless,ucp,no_start_optimize\n    K\\x{ffffffff}\n 0: K\\x{ffffffff}\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\nNo match\n\n/k{2,}?Z/caseless,ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    Kk\\x{ffffffff}\\x{ffffffff}\\x{ffffffff}Z\nNo match\n\n/[sk](?r:[sk])[sk]/Bi,ucp\n------------------------------------------------------------------\n        Bra\n        [KSks\\x{17f}\\x{212a}]\n        Bra\n        [KSks]\n        Ket\n        [KSks\\x{17f}\\x{212a}]\n        Ket\n        End\n------------------------------------------------------------------\n    SKS\n 0: SKS\n    sks\n 0: sks\n    \\x{212a}S\\x{17f}\n 0: \\x{212a}S\\x{17f}\n    \\x{17f}K\\x{212a}\n 0: \\x{17f}K\\x{212a}\n\\= Expect no match\n    s\\x{212a}s\nNo match\n    K\\x{17f}K\nNo match\n\n# --------------------------------------------------------- \n\n# End of testinput12\n"
  },
  {
    "path": "testdata/testoutput13",
    "content": "# These DFA tests are for the handling of characters greater than 255 in\n# 16-bit or 32-bit, non-UTF mode. \n\n#forbid_utf\n#subject dfa\n\n/^\\x{ffff}+/i\n    \\x{ffff}\n 0: \\x{ffff}\n\n/^\\x{ffff}?/i\n    \\x{ffff}\n 0: \\x{ffff}\n\n/^\\x{ffff}*/i\n    \\x{ffff}\n 0: \\x{ffff}\n\n/^\\x{ffff}{3}/i\n    \\x{ffff}\\x{ffff}\\x{ffff}\n 0: \\x{ffff}\\x{ffff}\\x{ffff}\n\n/^\\x{ffff}{0,3}/i\n    \\x{ffff}\n 0: \\x{ffff}\n\n# End of testinput13\n"
  },
  {
    "path": "testdata/testoutput14-16",
    "content": "# These test special UTF and UCP features of DFA matching. The output is\n# different for the different widths.\n\n#subject dfa\n\n# ---------------------------------------------------- \n# These are a selection of the more comprehensive tests that are run for\n# non-DFA matching.\n\n/X/utf\n    XX\\x{d800}\nFailed: error -24: UTF-16 error: missing low surrogate at end at offset 2\n    XX\\x{d800}\\=offset=3\nNo match\n    XX\\x{d800}\\=no_utf_check\n 0: X\n    XX\\x{da00}\nFailed: error -24: UTF-16 error: missing low surrogate at end at offset 2\n    XX\\x{da00}\\=no_utf_check\n 0: X\n    XX\\x{dc00}\nFailed: error -26: UTF-16 error: isolated low surrogate at offset 2\n    XX\\x{dc00}\\=no_utf_check\n 0: X\n    XX\\x{de00}\nFailed: error -26: UTF-16 error: isolated low surrogate at offset 2\n    XX\\x{de00}\\=no_utf_check\n 0: X\n    XX\\x{dfff}\nFailed: error -26: UTF-16 error: isolated low surrogate at offset 2\n    XX\\x{dfff}\\=no_utf_check\n 0: X\n    XX\\x{110000}\n** Failed: character \\N{U+110000} is greater than 0x10ffff and therefore cannot be encoded as UTF-16\n    XX\\x{d800}\\x{1234}\nFailed: error -25: UTF-16 error: invalid low surrogate at offset 2\n          \n/badutf/utf\n    X\\xdf\nNo match\n    XX\\xef\nNo match\n    XXX\\xef\\x80\nNo match\n    X\\xf7\nNo match\n    XX\\xf7\\x80\nNo match\n    XXX\\xf7\\x80\\x80\nNo match\n\n/shortutf/utf\n    XX\\xdf\\=ph\nNo match\n    XX\\xef\\=ph\nNo match\n    XX\\xef\\x80\\=ph\nNo match\n    \\xf7\\=ph\nNo match\n    \\xf7\\x80\\=ph\nNo match\n    \n# ---------------------------------------------------- \n# UCP and casing tests - except for the first two, these will all fail in 8-bit\n# mode because they are testing UCP without UTF and use characters > 255.\n\n/\\x{c1}/i,no_start_optimize\n\\= Expect no match\n    \\x{e1}\nNo match\n\n/\\x{c1}+\\x{e1}/iB,ucp\n------------------------------------------------------------------\n        Bra\n     /i \\x{c1}+\n     /i \\x{e1}\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{c1}\\x{c1}\\x{c1}\n 0: \\xc1\\xc1\\xc1\n 1: \\xc1\\xc1\n    \\x{e1}\\x{e1}\\x{e1} \n 0: \\xe1\\xe1\\xe1\n 1: \\xe1\\xe1\n\n/\\x{120}\\x{c1}/i,ucp,no_start_optimize\n    \\x{121}\\x{e1}\n 0: \\x{121}\\xe1\n\n/\\x{120}\\x{c1}/i,ucp\n    \\x{121}\\x{e1}\n 0: \\x{121}\\xe1\n\n/[^\\x{120}]/i,no_start_optimize\n    \\x{121}\n 0: \\x{121}\n\n/[^\\x{120}]/i,ucp,no_start_optimize\n\\= Expect no match\n    \\x{121}\nNo match\n\n/[^\\x{120}]/i\n    \\x{121}\n 0: \\x{121}\n\n/[^\\x{120}]/i,ucp\n\\= Expect no match\n    \\x{121}\nNo match\n    \n/\\x{120}{2}/i,ucp\n    \\x{121}\\x{121}\n 0: \\x{121}\\x{121}\n\n/[^\\x{120}]{2}/i,ucp\n\\= Expect no match\n    \\x{121}\\x{121}\nNo match\n\n# ---------------------------------------------------- \n\n# ---------------------------------------------------- \n# Tests for handling 0xffffffff in caseless UCP mode. They only apply to 32-bit\n# mode; for the other widths they will fail.\n\n/k*\\x{ffffffff}/caseless,ucp\nFailed: error 134 at offset 13: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n    \\x{ffffffff}\n\n/k+\\x{ffffffff}/caseless,ucp,no_start_optimize\nFailed: error 134 at offset 13: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n    K\\x{ffffffff}\n\\= Expect no match     \n    \\x{ffffffff}\\x{ffffffff}\n\n/k{2}\\x{ffffffff}/caseless,ucp,no_start_optimize\nFailed: error 134 at offset 15: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\n\n/k\\x{ffffffff}/caseless,ucp,no_start_optimize\nFailed: error 134 at offset 12: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n    K\\x{ffffffff}\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\n\n/k{2,}?Z/caseless,ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    Kk\\x{ffffffff}\\x{ffffffff}\\x{ffffffff}Z\n** Character \\x{ffffffff} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\n** Character \\x{ffffffff} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\n** Character \\x{ffffffff} is greater than 0xffff and UTF-16 mode is not enabled.\n** Truncation will probably give the wrong result.\nNo match\n\n# ---------------------------------------------------- \n\n# End of testinput14\n"
  },
  {
    "path": "testdata/testoutput14-32",
    "content": "# These test special UTF and UCP features of DFA matching. The output is\n# different for the different widths.\n\n#subject dfa\n\n# ---------------------------------------------------- \n# These are a selection of the more comprehensive tests that are run for\n# non-DFA matching.\n\n/X/utf\n    XX\\x{d800}\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{d800}\\=offset=3\nNo match\n    XX\\x{d800}\\=no_utf_check\n 0: X\n    XX\\x{da00}\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{da00}\\=no_utf_check\n 0: X\n    XX\\x{dc00}\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{dc00}\\=no_utf_check\n 0: X\n    XX\\x{de00}\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{de00}\\=no_utf_check\n 0: X\n    XX\\x{dfff}\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{dfff}\\=no_utf_check\n 0: X\n    XX\\x{110000}\nFailed: error -28: UTF-32 error: code points greater than 0x10ffff are not defined at offset 2\n    XX\\x{d800}\\x{1234}\nFailed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2\n          \n/badutf/utf\n    X\\xdf\nNo match\n    XX\\xef\nNo match\n    XXX\\xef\\x80\nNo match\n    X\\xf7\nNo match\n    XX\\xf7\\x80\nNo match\n    XXX\\xf7\\x80\\x80\nNo match\n\n/shortutf/utf\n    XX\\xdf\\=ph\nNo match\n    XX\\xef\\=ph\nNo match\n    XX\\xef\\x80\\=ph\nNo match\n    \\xf7\\=ph\nNo match\n    \\xf7\\x80\\=ph\nNo match\n    \n# ---------------------------------------------------- \n# UCP and casing tests - except for the first two, these will all fail in 8-bit\n# mode because they are testing UCP without UTF and use characters > 255.\n\n/\\x{c1}/i,no_start_optimize\n\\= Expect no match\n    \\x{e1}\nNo match\n\n/\\x{c1}+\\x{e1}/iB,ucp\n------------------------------------------------------------------\n        Bra\n     /i \\x{c1}+\n     /i \\x{e1}\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{c1}\\x{c1}\\x{c1}\n 0: \\xc1\\xc1\\xc1\n 1: \\xc1\\xc1\n    \\x{e1}\\x{e1}\\x{e1} \n 0: \\xe1\\xe1\\xe1\n 1: \\xe1\\xe1\n\n/\\x{120}\\x{c1}/i,ucp,no_start_optimize\n    \\x{121}\\x{e1}\n 0: \\x{121}\\xe1\n\n/\\x{120}\\x{c1}/i,ucp\n    \\x{121}\\x{e1}\n 0: \\x{121}\\xe1\n\n/[^\\x{120}]/i,no_start_optimize\n    \\x{121}\n 0: \\x{121}\n\n/[^\\x{120}]/i,ucp,no_start_optimize\n\\= Expect no match\n    \\x{121}\nNo match\n\n/[^\\x{120}]/i\n    \\x{121}\n 0: \\x{121}\n\n/[^\\x{120}]/i,ucp\n\\= Expect no match\n    \\x{121}\nNo match\n    \n/\\x{120}{2}/i,ucp\n    \\x{121}\\x{121}\n 0: \\x{121}\\x{121}\n\n/[^\\x{120}]{2}/i,ucp\n\\= Expect no match\n    \\x{121}\\x{121}\nNo match\n\n# ---------------------------------------------------- \n\n# ---------------------------------------------------- \n# Tests for handling 0xffffffff in caseless UCP mode. They only apply to 32-bit\n# mode; for the other widths they will fail.\n\n/k*\\x{ffffffff}/caseless,ucp\n    \\x{ffffffff}\n 0: \\x{ffffffff}\n\n/k+\\x{ffffffff}/caseless,ucp,no_start_optimize\n    K\\x{ffffffff}\n 0: K\\x{ffffffff}\n\\= Expect no match     \n    \\x{ffffffff}\\x{ffffffff}\nNo match\n\n/k{2}\\x{ffffffff}/caseless,ucp,no_start_optimize\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\nNo match\n\n/k\\x{ffffffff}/caseless,ucp,no_start_optimize\n    K\\x{ffffffff}\n 0: K\\x{ffffffff}\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\nNo match\n\n/k{2,}?Z/caseless,ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    Kk\\x{ffffffff}\\x{ffffffff}\\x{ffffffff}Z\nNo match\n\n# ---------------------------------------------------- \n\n# End of testinput14\n"
  },
  {
    "path": "testdata/testoutput14-8",
    "content": "# These test special UTF and UCP features of DFA matching. The output is\n# different for the different widths.\n\n#subject dfa\n\n# ---------------------------------------------------- \n# These are a selection of the more comprehensive tests that are run for\n# non-DFA matching.\n\n/X/utf\n    XX\\x{d800}\nFailed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{d800}\\=offset=3\nError -36 (bad UTF-8 offset)\n    XX\\x{d800}\\=no_utf_check\n 0: X\n    XX\\x{da00}\nFailed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{da00}\\=no_utf_check\n 0: X\n    XX\\x{dc00}\nFailed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{dc00}\\=no_utf_check\n 0: X\n    XX\\x{de00}\nFailed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{de00}\\=no_utf_check\n 0: X\n    XX\\x{dfff}\nFailed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 2\n    XX\\x{dfff}\\=no_utf_check\n 0: X\n    XX\\x{110000}\nFailed: error -15: UTF-8 error: code points greater than 0x10ffff are not defined at offset 2\n    XX\\x{d800}\\x{1234}\nFailed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 2\n          \n/badutf/utf\n    X\\xdf\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 1\n    XX\\xef\nFailed: error -4: UTF-8 error: 2 bytes missing at end at offset 2\n    XXX\\xef\\x80\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 3\n    X\\xf7\nFailed: error -5: UTF-8 error: 3 bytes missing at end at offset 1\n    XX\\xf7\\x80\nFailed: error -4: UTF-8 error: 2 bytes missing at end at offset 2\n    XXX\\xf7\\x80\\x80\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 3\n\n/shortutf/utf\n    XX\\xdf\\=ph\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 2\n    XX\\xef\\=ph\nFailed: error -4: UTF-8 error: 2 bytes missing at end at offset 2\n    XX\\xef\\x80\\=ph\nFailed: error -3: UTF-8 error: 1 byte missing at end at offset 2\n    \\xf7\\=ph\nFailed: error -5: UTF-8 error: 3 bytes missing at end at offset 0\n    \\xf7\\x80\\=ph\nFailed: error -4: UTF-8 error: 2 bytes missing at end at offset 0\n    \n# ---------------------------------------------------- \n# UCP and casing tests - except for the first two, these will all fail in 8-bit\n# mode because they are testing UCP without UTF and use characters > 255.\n\n/\\x{c1}/i,no_start_optimize\n\\= Expect no match\n    \\x{e1}\nNo match\n\n/\\x{c1}+\\x{e1}/iB,ucp\n------------------------------------------------------------------\n        Bra\n     /i \\x{c1}+\n     /i \\x{e1}\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{c1}\\x{c1}\\x{c1}\n 0: \\xc1\\xc1\\xc1\n 1: \\xc1\\xc1\n    \\x{e1}\\x{e1}\\x{e1} \n 0: \\xe1\\xe1\\xe1\n 1: \\xe1\\xe1\n\n/\\x{120}\\x{c1}/i,ucp,no_start_optimize\nFailed: error 134 at offset 6: character code point value in \\x{} or \\o{} is too large\n        here: \\x{120 |<--| }\\x{c1}\n    \\x{121}\\x{e1}\n\n/\\x{120}\\x{c1}/i,ucp\nFailed: error 134 at offset 6: character code point value in \\x{} or \\o{} is too large\n        here: \\x{120 |<--| }\\x{c1}\n    \\x{121}\\x{e1}\n\n/[^\\x{120}]/i,no_start_optimize\nFailed: error 134 at offset 8: character code point value in \\x{} or \\o{} is too large\n        here: [^\\x{120 |<--| }]\n    \\x{121}\n\n/[^\\x{120}]/i,ucp,no_start_optimize\nFailed: error 134 at offset 8: character code point value in \\x{} or \\o{} is too large\n        here: [^\\x{120 |<--| }]\n\\= Expect no match\n    \\x{121}\n\n/[^\\x{120}]/i\nFailed: error 134 at offset 8: character code point value in \\x{} or \\o{} is too large\n        here: [^\\x{120 |<--| }]\n    \\x{121}\n\n/[^\\x{120}]/i,ucp\nFailed: error 134 at offset 8: character code point value in \\x{} or \\o{} is too large\n        here: [^\\x{120 |<--| }]\n\\= Expect no match\n    \\x{121}\n    \n/\\x{120}{2}/i,ucp\nFailed: error 134 at offset 6: character code point value in \\x{} or \\o{} is too large\n        here: \\x{120 |<--| }{2}\n    \\x{121}\\x{121}\n\n/[^\\x{120}]{2}/i,ucp\nFailed: error 134 at offset 8: character code point value in \\x{} or \\o{} is too large\n        here: [^\\x{120 |<--| }]{2}\n\\= Expect no match\n    \\x{121}\\x{121}\n\n# ---------------------------------------------------- \n\n# ---------------------------------------------------- \n# Tests for handling 0xffffffff in caseless UCP mode. They only apply to 32-bit\n# mode; for the other widths they will fail.\n\n/k*\\x{ffffffff}/caseless,ucp\nFailed: error 134 at offset 13: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n    \\x{ffffffff}\n\n/k+\\x{ffffffff}/caseless,ucp,no_start_optimize\nFailed: error 134 at offset 13: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n    K\\x{ffffffff}\n\\= Expect no match     \n    \\x{ffffffff}\\x{ffffffff}\n\n/k{2}\\x{ffffffff}/caseless,ucp,no_start_optimize\nFailed: error 134 at offset 15: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\n\n/k\\x{ffffffff}/caseless,ucp,no_start_optimize\nFailed: error 134 at offset 12: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n    K\\x{ffffffff}\n\\= Expect no match\n    \\x{ffffffff}\\x{ffffffff}\\x{ffffffff}\n\n/k{2,}?Z/caseless,ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    Kk\\x{ffffffff}\\x{ffffffff}\\x{ffffffff}Z\n** Character \\x{ffffffff} is greater than 255 and UTF-8 mode is not enabled.\n** Truncation will probably give the wrong result.\n** Character \\x{ffffffff} is greater than 255 and UTF-8 mode is not enabled.\n** Truncation will probably give the wrong result.\n** Character \\x{ffffffff} is greater than 255 and UTF-8 mode is not enabled.\n** Truncation will probably give the wrong result.\nNo match\n\n# ---------------------------------------------------- \n\n# End of testinput14\n"
  },
  {
    "path": "testdata/testoutput15",
    "content": "# These are:\n#\n# (1) Tests of the match-limiting features. The results are different for\n# interpretive or JIT matching, so this test should not be run with JIT. The\n# same tests are run using JIT in test 17.\n\n# (2) Other tests that must not be run with JIT.\n\n# These tests are first so that they don't inherit a large enough heap frame \n# vector from a previous test.\n\n/(*LIMIT_HEAP=21)\\[(a)]{60}/expand\n    \\[a]{60}\nFailed: error -63: heap limit exceeded\n\n\"(*LIMIT_HEAP=21)()((?))()()()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()()()()()()()()()(())()()()()()()()()()()()()()\"\n  xx\nFailed: error -63: heap limit exceeded\n\n# -----------------------------------------------------------------------\n\n/(a+)*zz/I\nCapture group count = 1\nStarting code units: a z\nLast code unit = 'z'\nSubject length lower bound = 2\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\\=find_limits_noheap\nMinimum match limit = 7\nMinimum depth limit = 7\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazz\n 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n  aaaaaaaaaaaaaz\\=find_limits_noheap\nMinimum match limit = 20481\nMinimum depth limit = 30\nNo match\n\n!((?:\\s|//.*\\\\n|/[*](?:\\\\n|.)*?[*]/)*)!I\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\n   /* this is a C style comment */\\=find_limits_noheap\nMinimum match limit = 64\nMinimum depth limit = 7\n 0: /* this is a C style comment */\n 1: /* this is a C style comment */\n\n/^(?>a)++/\n    aa\\=find_limits_noheap\nMinimum match limit = 5\nMinimum depth limit = 3\n 0: aa\n    aaaaaaaaa\\=find_limits_noheap\nMinimum match limit = 12\nMinimum depth limit = 3\n 0: aaaaaaaaa\n\n/(a)(?1)++/\n    aa\\=find_limits_noheap\nMinimum match limit = 7\nMinimum depth limit = 5\n 0: aa\n 1: a\n    aaaaaaaaa\\=find_limits_noheap\nMinimum match limit = 21\nMinimum depth limit = 5\n 0: aaaaaaaaa\n 1: a\n\n/a(?:.)*?a/ims\n    abbbbbbbbbbbbbbbbbbbbba\\=find_limits_noheap\nMinimum match limit = 24\nMinimum depth limit = 3\n 0: abbbbbbbbbbbbbbbbbbbbba\n\n/a(?:.(*THEN))*?a/ims\n    abbbbbbbbbbbbbbbbbbbbba\\=find_limits_noheap\nMinimum match limit = 66\nMinimum depth limit = 45\n 0: abbbbbbbbbbbbbbbbbbbbba\n\n/a(?:.(*THEN:ABC))*?a/ims\n    abbbbbbbbbbbbbbbbbbbbba\\=find_limits_noheap\nMinimum match limit = 66\nMinimum depth limit = 45\n 0: abbbbbbbbbbbbbbbbbbbbba\n\n/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/\n     aabbccddee\\=find_limits_noheap\nMinimum match limit = 7\nMinimum depth limit = 7\n 0: aabbccddee\n\n/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/\n     aabbccddee\\=find_limits_noheap\nMinimum match limit = 12\nMinimum depth limit = 12\n 0: aabbccddee\n 1: aa\n 2: bb\n 3: cc\n 4: dd\n 5: ee\n\n/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/\n     aabbccddee\\=find_limits_noheap\nMinimum match limit = 10\nMinimum depth limit = 10\n 0: aabbccddee\n 1: aa\n 2: cc\n 3: ee\n\n/(*LIMIT_MATCH=12bc)abc/\nFailed: error 160 at offset 16: (*VERB) not recognized or malformed\n        here: ...T_MATCH=12 |<--| bc)abc\n\n/(*LIMIT_MATCH=4294967290)abc/\nFailed: error 160 at offset 23: (*VERB) not recognized or malformed\n        here: ...=429496729 |<--| 0)abc\n\n/(*LIMIT_DEPTH=4294967280)abc/I\nCapture group count = 0\nDepth limit = 4294967280\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/(a+)*zz/\n\\= Expect no match\n    aaaaaaaaaaaaaz\nNo match\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=match_limit=3000\nFailed: error -47: match limit exceeded\n\n/(a+)*zz/\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=depth_limit=10\nFailed: error -53: matching depth limit exceeded\n\n/(*LIMIT_MATCH=3000)(a+)*zz/I\nCapture group count = 1\nMatch limit = 3000\nStarting code units: a z\nLast code unit = 'z'\nSubject length lower bound = 2\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\nFailed: error -47: match limit exceeded\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=match_limit=60000\nFailed: error -47: match limit exceeded\n\n/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I\nCapture group count = 1\nMatch limit = 3000\nStarting code units: a z\nLast code unit = 'z'\nSubject length lower bound = 2\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\nFailed: error -47: match limit exceeded\n\n/(*LIMIT_MATCH=60000)(a+)*zz/I\nCapture group count = 1\nMatch limit = 60000\nStarting code units: a z\nLast code unit = 'z'\nSubject length lower bound = 2\n\\= Expect no match\n    aaaaaaaaaaaaaz\nNo match\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=match_limit=3000\nFailed: error -47: match limit exceeded\n\n/(*LIMIT_DEPTH=10)(a+)*zz/I\nCapture group count = 1\nDepth limit = 10\nStarting code units: a z\nLast code unit = 'z'\nSubject length lower bound = 2\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\nFailed: error -53: matching depth limit exceeded\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=depth_limit=1000\nFailed: error -53: matching depth limit exceeded\n\n/(*LIMIT_DEPTH=10)(*LIMIT_DEPTH=1000)(a+)*zz/I\nCapture group count = 1\nDepth limit = 1000\nStarting code units: a z\nLast code unit = 'z'\nSubject length lower bound = 2\n\\= Expect no match\n    aaaaaaaaaaaaaz\nNo match\n\n/(*LIMIT_DEPTH=1000)(a+)*zz/I\nCapture group count = 1\nDepth limit = 1000\nStarting code units: a z\nLast code unit = 'z'\nSubject length lower bound = 2\n\\= Expect no match\n    aaaaaaaaaaaaaz\nNo match\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=depth_limit=10\nFailed: error -53: matching depth limit exceeded\n\n# These three have infinitely nested recursions.\n\n/((?2))((?1))/\n    abc\nFailed: error -52: nested recursion at the same subject position\n\n/((?(R2)a+|(?1)b))()/\n    aaaabcde\nFailed: error -52: nested recursion at the same subject position\n\n/(?(R)a*(?1)|((?R))b)/\n    aaaabcde\nFailed: error -52: nested recursion at the same subject position\n\n# The allusedtext modifier does not work with JIT, which does not maintain\n# the leftchar/rightchar data.\n\n/abc(?=xyz)/allusedtext\n    abcxyzpqr\n 0: abcxyz\n       >>>\n    abcxyzpqr\\=aftertext\n 0: abcxyz\n       >>>\n 0+ xyzpqr\n\n/(?<=pqr)abc(?=xyz)/allusedtext\n    xyzpqrabcxyzpqr\n 0: pqrabcxyz\n    <<<   >>>\n    xyzpqrabcxyzpqr\\=aftertext\n 0: pqrabcxyz\n    <<<   >>>\n 0+ xyzpqr\n\n/a\\b/\n    a.\\=allusedtext\n 0: a.\n     >\n    a\\=allusedtext\n 0: a\n\n/abc\\Kxyz/\n    abcxyz\\=allusedtext\n 0: abcxyz\n    <<<   \n\n/abc(?=xyz(*ACCEPT))/\n    abcxyz\\=allusedtext\n 0: abcxyz\n       >>>\n\n/abc(?=abcde)(?=ab)/allusedtext\n    abcabcdefg\n 0: abcabcde\n       >>>>>\n\n#subject allusedtext\n\n/(?<=abc)123/\n    xyzabc123pqr\n 0: abc123\n    <<<   \n    xyzabc12\\=ps\nPartial match: abc12\n               <<<\n    xyzabc12\\=ph\nPartial match: abc12\n               <<<\n\n/\\babc\\b/\n    +++abc+++\n 0: +abc+\n    <   >\n    +++ab\\=ps\nPartial match: +ab\n               <\n    +++ab\\=ph\nPartial match: +ab\n               <\n\n/(?<=abc)def/\n    abc\\=ph\nPartial match: abc\n               <<<\n\n/(?<=123)(*MARK:xx)abc/mark\n    xxxx123a\\=ph\nPartial match, mark=xx: 123a\n                        <<<\n    xxxx123a\\=ps\nPartial match, mark=xx: 123a\n                        <<<\n\n/(?<=(?<=a)b)c.*/I\nCapture group count = 0\nMax lookbehind = 1\nFirst code unit = 'c'\nSubject length lower bound = 1\n    abc\\=ph\nPartial match: abc\n               <<\n\\= Expect no match\n    xbc\\=ph\nNo match\n\n/(?<=ab)c.*/I\nCapture group count = 0\nMax lookbehind = 2\nFirst code unit = 'c'\nSubject length lower bound = 1\n    abc\\=ph\nPartial match: abc\n               <<\n\\= Expect no match\n    xbc\\=ph\nNo match\n\n/abc(?<=bc)def/\n    xxxabcd\\=ph\nPartial match: abcd\n\n/(?<=ab)cdef/\n    xxabcd\\=ph\nPartial match: abcd\n               <<\n\n/(?<=(?<=(?<=a)b)c)./I\nCapture group count = 0\nMax lookbehind = 1\nSubject length lower bound = 1\n    123abcXYZ\n 0: abcX\n    <<< \n\n/(?<=ab(cd(?<=...)))./I\nCapture group count = 1\nMax lookbehind = 4\nSubject length lower bound = 1\n    abcdX\n 0: abcdX\n    <<<< \n 1: cd\n\n/(?<=ab((?<=...)cd))./I\nCapture group count = 1\nMax lookbehind = 4\nSubject length lower bound = 1\n    ZabcdX\n 0: ZabcdX\n    <<<<< \n 1: cd\n\n/(?<=((?<=(?<=ab).))(?1)(?1))./I\nCapture group count = 1\nMax lookbehind = 2\nSubject length lower bound = 1\n    abxZ\n 0: abxZ\n    <<< \n 1: \n\n#subject\n# -------------------------------------------------------------------\n\n# These tests provoke recursion loops, which give a different error message\n# when JIT is used.\n\n/(?R)/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n    abcd\nFailed: error -52: nested recursion at the same subject position\n\n/(a|(?R))/I\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\n    abcd\n 0: a\n 1: a\n    defg\nFailed: error -52: nested recursion at the same subject position\n\n/(ab|(bc|(de|(?R))))/I\nCapture group count = 3\nMay match empty string\nSubject length lower bound = 0\n    abcd\n 0: ab\n 1: ab\n    fghi\nFailed: error -52: nested recursion at the same subject position\n\n/(ab|(bc|(de|(?1))))/I\nCapture group count = 3\nMay match empty string\nSubject length lower bound = 0\n    abcd\n 0: ab\n 1: ab\n    fghi\nFailed: error -52: nested recursion at the same subject position\n\n/x(ab|(bc|(de|(?1)x)x)x)/I\nCapture group count = 3\nFirst code unit = 'x'\nSubject length lower bound = 3\n    xab123\n 0: xab\n 1: ab\n    xfghi\nFailed: error -52: nested recursion at the same subject position\n\n/(?!\\w)(?R)/\n    abcd\nFailed: error -52: nested recursion at the same subject position\n    =abc\nFailed: error -52: nested recursion at the same subject position\n\n/(?=\\w)(?R)/\n    =abc\nFailed: error -52: nested recursion at the same subject position\n    abcd\nFailed: error -52: nested recursion at the same subject position\n\n/(?<!\\w)(?R)/\n    abcd\nFailed: error -52: nested recursion at the same subject position\n\n/(?<=\\w)(?R)/\n    abcd\nFailed: error -52: nested recursion at the same subject position\n\n/(a+|(?R)b)/\n    aaa\n 0: aaa\n 1: aaa\n    bbb\nFailed: error -52: nested recursion at the same subject position\n\n#if !ebcdic\n\n/[^\\xff]((?1))/BI\n------------------------------------------------------------------\n        Bra\n        [^\\x{ff}] (not)\n        CBra 1\n        Recurse\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nSubject length lower bound = 1\n    abcd\nFailed: error -52: nested recursion at the same subject position\n\n#endif\n\n# These tests don't behave the same with JIT\n\n/\\w+(?C1)/BI,no_auto_possess\n------------------------------------------------------------------\n        Bra\n        \\w+\n        Callout 1 8 0\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: no_auto_possess\nOptimizations: dotstar_anchor,start_optimize\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n    abc\\=callout_fail=1\n--->abc\n  1 ^  ^    End of pattern\n  1 ^ ^     End of pattern\n  1 ^^      End of pattern\n  1  ^ ^    End of pattern\n  1  ^^     End of pattern\n  1   ^^    End of pattern\nNo match\n\n/(*NO_AUTO_POSSESS)\\w+(?C1)/BI\n------------------------------------------------------------------\n        Bra\n        \\w+\n        Callout 1 26 0\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: no_auto_possess\nOptimizations: dotstar_anchor,start_optimize\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n    abc\\=callout_fail=1\n--->abc\n  1 ^  ^    End of pattern\n  1 ^ ^     End of pattern\n  1 ^^      End of pattern\n  1  ^ ^    End of pattern\n  1  ^^     End of pattern\n  1   ^^    End of pattern\nNo match\n\n# This test breaks the JIT stack limit\n\n/(|]+){2,2452}/\n    (|]+){2,2452}\n 0: \n 1: \n\n/b(?<!ax)(?!cx)/allusedtext\n    abc\n 0: abc\n    < >\n    abcz\n 0: abcz\n    < >>\n\n# This test triggers the recursion limit in the interpreter, but completes in\n# JIT. It's in testinput2 with disable_recurse_loop_check to get it to work\n# in the interpreter.\n\n/(a(?1)z||(?1)++)$/\n    abcd\nFailed: error -52: nested recursion at the same subject position\n\n# End of testinput15\n"
  },
  {
    "path": "testdata/testoutput17",
    "content": "# This test is run only when JIT support is available. It checks JIT complete\n# and partial modes, and things that are different with JIT.\n\n#pattern jitverify\n\n# JIT does not support this pattern (callout at start of condition).\n\n/(?(?C1)(?=a)a)/I\nJIT compilation was not successful (feature is not supported by the JIT compiler)\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\nJIT compilation was not successful (feature is not supported by the JIT compiler)\n\n# The following pattern cannot be compiled by JIT.\n\n/b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*/I\nJIT compilation was not successful (feature is not supported by the JIT compiler)\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\nJIT compilation was not successful (feature is not supported by the JIT compiler)\n\n# Check that an infinite recursion loop is caught.\n\n/(?(R)a*(?1)|((?R))b)/\n    aaaabcde\nFailed: error -46: JIT stack limit reached\n\n/abcd/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'd'\nSubject length lower bound = 4\nJIT compilation was successful\n    abcd\n 0: abcd (JIT)\n\\= Expect no match\n    xyz\nNo match (JIT)\n\n/(*NO_JIT)abcd/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'd'\nSubject length lower bound = 4\nJIT compilation was not successful\n    abcd\n 0: abcd\n\\= Expect no match\n    xyz\nNo match\n\n/abcd/\n    abcd\n 0: abcd (JIT)\n    ab\\=ps\nPartial match: ab (JIT)\n    ab\\=ph\nPartial match: ab (JIT)\n\\= Expect no match\n    xyz\nNo match (JIT)\n\n/abcd/jitfast\n    abcd\n 0: abcd (JIT)\n    ab\\=ps\nPartial match: ab (JIT)\n    ab\\=ph\nPartial match: ab (JIT)\n\\= Expect no match\n    xyz\nNo match (JIT)\n\n/abcd/jit=1\n    abcd\n 0: abcd (JIT)\n    ab\\=ps\nPartial match: ab\n    ab\\=ph\nPartial match: ab\n\\= Expect no match\n    xyz\nNo match (JIT)\n    xyz\\=ps\nNo match\n\n/abcd/jit=1,jitfast\n    abcd\n 0: abcd (JIT)\n    ab\\=ps\nFailed: error -45: bad JIT option\n    ab\\=ph\nFailed: error -45: bad JIT option\n    xyz\\=ps\nFailed: error -45: bad JIT option\n\\= Expect no match\n    xyz\nNo match (JIT)\n\n/abcd/jit=2\n    abcd\n 0: abcd\n    ab\\=ps\nPartial match: ab (JIT)\n    ab\\=ph\nPartial match: ab\n\\= Expect no match\n    xyz\nNo match\n\n/abcd/jit=2,jitfast\n    abcd\nFailed: error -45: bad JIT option\n    ab\\=ps\nPartial match: ab (JIT)\n    ab\\=ph\nFailed: error -45: bad JIT option\n    xyz\nFailed: error -45: bad JIT option\n\n/abcd/jit=3\n    abcd\n 0: abcd (JIT)\n    ab\\=ps\nPartial match: ab (JIT)\n    ab\\=ph\nPartial match: ab\n\\= Expect no match\n    xyz\nNo match (JIT)\n\n/abcd/jit=4\n    abcd\n 0: abcd\n    ab\\=ps\nPartial match: ab\n    ab\\=ph\nPartial match: ab (JIT)\n\\= Expect no match\n    xyz\nNo match\n\n/abcd/jit=5\n    abcd\n 0: abcd (JIT)\n    ab\\=ps\nPartial match: ab\n    ab\\=ph\nPartial match: ab (JIT)\n\\= Expect no match\n    xyz\nNo match (JIT)\n\n/abcd/jit=6\n    abcd\n 0: abcd\n    ab\\=ps\nPartial match: ab (JIT)\n    ab\\=ph\nPartial match: ab (JIT)\n\\= Expect no match\n    xyz\nNo match\n\n/abcd/jit=7\n    abcd\n 0: abcd (JIT)\n    ab\\=ps\nPartial match: ab (JIT)\n    ab\\=ph\nPartial match: ab (JIT)\n\\= Expect no match\n    xyz\nNo match (JIT)\n\n/abcd/I,jit=2\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'd'\nSubject length lower bound = 4\nJIT compilation was successful\n\n/(*NO_START_OPT)a(*:m)b/mark\n\\= Expect no match\n    a\nNo match, mark = m (JIT)\n\n/^12345678abcd/m\n    12345678abcd\n 0: 12345678abcd (JIT)\n    \n# Limits tests that give different output with JIT. \n\n/(a+)*zz/I\nCapture group count = 1\nStarting code units: a z\nLast code unit = 'z'\nSubject length lower bound = 2\nJIT compilation was successful\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\\=find_limits\nMinimum match limit = 2\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazz (JIT)\n 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n  aaaaaaaaaaaaaz\\=find_limits\nMinimum match limit = 16383\nNo match (JIT)\n\n!((?:\\s|//.*\\\\n|/[*](?:\\\\n|.)*?[*]/)*)!I\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\nJIT compilation was successful\n   /* this is a C style comment */\\=find_limits\nMinimum match limit = 29\n 0: /* this is a C style comment */ (JIT)\n 1: /* this is a C style comment */\n\n/^(?>a)++/\n    aa\\=find_limits\nMinimum match limit = 1\n 0: aa (JIT)\n    aaaaaaaaa\\=find_limits\nMinimum match limit = 1\n 0: aaaaaaaaa (JIT)\n    \n/(a)(?1)++/\n    aa\\=find_limits\nMinimum match limit = 1\n 0: aa (JIT)\n 1: a\n    aaaaaaaaa\\=find_limits\nMinimum match limit = 1\n 0: aaaaaaaaa (JIT)\n 1: a\n\n/a(?:.)*?a/ims\n    abbbbbbbbbbbbbbbbbbbbba\\=find_limits\nMinimum match limit = 22\n 0: abbbbbbbbbbbbbbbbbbbbba (JIT)\n    \n/a(?:.(*THEN))*?a/ims\n    abbbbbbbbbbbbbbbbbbbbba\\=find_limits\nMinimum match limit = 22\n 0: abbbbbbbbbbbbbbbbbbbbba (JIT)\n\n/a(?:.(*THEN:ABC))*?a/ims\n    abbbbbbbbbbbbbbbbbbbbba\\=find_limits\nMinimum match limit = 22\n 0: abbbbbbbbbbbbbbbbbbbbba (JIT)\n\n/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/\n     aabbccddee\\=find_limits\nMinimum match limit = 5\n 0: aabbccddee (JIT)\n\n/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/\n     aabbccddee\\=find_limits\nMinimum match limit = 5\n 0: aabbccddee (JIT)\n 1: aa\n 2: bb\n 3: cc\n 4: dd\n 5: ee\n\n/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/\n     aabbccddee\\=find_limits\nMinimum match limit = 5\n 0: aabbccddee (JIT)\n 1: aa\n 2: cc\n 3: ee\n\n/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/jitfast\n     aabbccddee\\=find_limits\nMinimum match limit = 5\n 0: aabbccddee (JIT)\n 1: aa\n 2: cc\n 3: ee\n     aabbccddee\\=jitstack=1\n 0: aabbccddee (JIT)\n 1: aa\n 2: cc\n 3: ee\n\n/(a+)*zz/\n\\= Expect no match\n    aaaaaaaaaaaaaz\nNo match (JIT)\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=match_limit=3000\nFailed: error -47: match limit exceeded\n\n/(*LIMIT_MATCH=3000)(a+)*zz/I\nCapture group count = 1\nMatch limit = 3000\nStarting code units: a z\nLast code unit = 'z'\nSubject length lower bound = 2\nJIT compilation was successful\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\nFailed: error -47: match limit exceeded\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=match_limit=60000\nFailed: error -47: match limit exceeded\n\n/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I\nCapture group count = 1\nMatch limit = 3000\nStarting code units: a z\nLast code unit = 'z'\nSubject length lower bound = 2\nJIT compilation was successful\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\nFailed: error -47: match limit exceeded\n\n/(*LIMIT_MATCH=60000)(a+)*zz/I\nCapture group count = 1\nMatch limit = 60000\nStarting code units: a z\nLast code unit = 'z'\nSubject length lower bound = 2\nJIT compilation was successful\n\\= Expect no match\n    aaaaaaaaaaaaaz\nNo match (JIT)\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaz\\=match_limit=3000\nFailed: error -47: match limit exceeded\n\n# These three have infinitely nested recursions. \n    \n/((?2))((?1))/\n\\= Expect JIT stack limit reached\n    abc\nFailed: error -46: JIT stack limit reached\n\n/((?(R2)a+|(?1)b))()/\n\\= Expect JIT stack limit reached\n    aaaabcde\nFailed: error -46: JIT stack limit reached\n\n/(?(R)a*(?1)|((?R))b)/\n\\= Expect JIT stack limit reached\n    aaaabcde\nFailed: error -46: JIT stack limit reached\n    \n# Invalid options disable JIT when called via pcre2_match(), causing the\n# match to happen via the interpreter, but for fast JIT invalid options are\n# ignored, so an unanchored match happens.\n\n/abcd/\n    abcd\\=anchored\n 0: abcd\n\\= Expect no match\n    fail abcd\\=anchored \nNo match\n    \n/abcd/jitfast\n    abcd\\=anchored \n 0: abcd (JIT)\n    succeed abcd\\=anchored \n 0: abcd (JIT)\n    \n# Push/pop does not lose the JIT information, though jitverify applies only to\n# compilation, but serializing (save/load) discards JIT data completely.\n\n/^abc\\Kdef/info,push\n** Applies only to compile when pattern is stacked with 'push': jitverify\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 6\nJIT compilation was successful\n#pop jitverify\n    abcdef\n 0: def (JIT)\n\n/^abc\\Kdef/info,push\n** Applies only to compile when pattern is stacked with 'push': jitverify\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 6\nJIT compilation was successful\n#save testsaved1\n#load testsaved1\n#pop jitverify\n    abcdef\n 0: def\n    \n#load testsaved1\n#pop jit,jitverify\n    abcdef\n 0: def (JIT)\n    \n/abcd/pushcopy,jitverify\n** Applies only to compile when pattern is stacked with 'push': jitverify\n    abcd\n 0: abcd (JIT)\n    \n#pop jitverify\n    abcd\n 0: abcd\n    \n# Test pattern compilation\n\n/(?:a|b|c|d|e)(?R)/jit=1\n\n/(?:a|b|c|d|e)(?R)(?R)/jit=1\n\n/(a(?:a|b|c|d|e)b){8,16}/jit=1\n\n/(?:|a|){100}x/jit=1\n\n# These tests provoke recursion loops, which give a different error message\n# when JIT is used.\n\n/(?R)/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\nJIT compilation was successful\n    abcd\nFailed: error -46: JIT stack limit reached\n\n/(a|(?R))/I\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\nJIT compilation was successful\n    abcd\n 0: a (JIT)\n 1: a\n    defg \nFailed: error -46: JIT stack limit reached\n\n/(ab|(bc|(de|(?R))))/I\nCapture group count = 3\nMay match empty string\nSubject length lower bound = 0\nJIT compilation was successful\n    abcd\n 0: ab (JIT)\n 1: ab\n    fghi \nFailed: error -46: JIT stack limit reached\n\n/(ab|(bc|(de|(?1))))/I\nCapture group count = 3\nMay match empty string\nSubject length lower bound = 0\nJIT compilation was successful\n    abcd\n 0: ab (JIT)\n 1: ab\n    fghi \nFailed: error -46: JIT stack limit reached\n\n/x(ab|(bc|(de|(?1)x)x)x)/I\nCapture group count = 3\nFirst code unit = 'x'\nSubject length lower bound = 3\nJIT compilation was successful\n    xab123\n 0: xab (JIT)\n 1: ab\n    xfghi \nFailed: error -46: JIT stack limit reached\n\n/(?!\\w)(?R)/\n    abcd\nFailed: error -46: JIT stack limit reached\n    =abc \nFailed: error -46: JIT stack limit reached\n\n/(?=\\w)(?R)/\n    =abc \nFailed: error -46: JIT stack limit reached\n    abcd\nFailed: error -46: JIT stack limit reached\n\n/(?<!\\w)(?R)/\n    abcd\nFailed: error -46: JIT stack limit reached\n\n/(?<=\\w)(?R)/\n    abcd\nFailed: error -46: JIT stack limit reached\n\n/(a+|(?R)b)/\n    aaa\n 0: aaa (JIT)\n 1: aaa\n    bbb \nFailed: error -46: JIT stack limit reached\n\n#if !ebcdic\n\n/[^\\xff]((?1))/BI\n------------------------------------------------------------------\n        Bra\n        [^\\x{ff}] (not)\n        CBra 1\n        Recurse\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nSubject length lower bound = 1\nJIT compilation was successful\n    abcd\nFailed: error -46: JIT stack limit reached\n\n#endif\n\n/(x(?1)){4}/\n\n/[axm]{7}/\n\n/(.|.)*?bx/\n\\= Expect limit exceeded\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabax\\=match_limit=10000000\nFailed: error -47: match limit exceeded\n    \n# Test JIT disable \n\n/abc/\n    abc\n 0: abc (JIT)\n    abc\\=no_jit \n 0: abc\n    \n/abc/jitfast\n    abc\n 0: abc (JIT)\n    abc\\=no_jit \n 0: abc (JIT)\n    \n# ---- \n\n/[aC]/mg,firstline,newline=lf\n    match\\nmatch\n 0: a (JIT)\n\n/[aCz]/mg,firstline,newline=lf\n    match\\nmatch\n 0: a (JIT)\n\n//jit\n    \\=null_subject\n 0:  (JIT)\n    \n/(.)(.)/jitfast,replace=$2+$1\n    ABCD\n 1: B+ACD\n\n/(...)-(...)/jitfast\n    abc-xyz\\=get=2\n 0: abc-xyz (JIT)\n 1: abc\n 2: xyz\n 2G xyz (3)\n\n# Check the JIT sets all the correct match state for pcre2_substitute\n\n/abc/jitfast,replace=yy\n    zabcz\n 1: zyyz\n    zabcz\\=substitute_matched\n 1: zyyz\n\n/abc/jitfast,replace=yy\n    zABCz\n 0: zABCz\n    zABCz\\=substitute_matched\n 0: zABCz\n\n/abc/jitfast\n    ab\\=replace=yy,partial_hard\nFailed: error -34: bad option value\n    ab\\=replace=yy,partial_hard,substitute_matched\nFailed: error -34: bad option value\n\n/(?C1)abc/jitfast,replace=yy\n    zabcz\\=callout_error=1\n--->zabcz\n  1  ^        a\nFailed: error -37: callout error code\n    zabcz\\=callout_error=1,substitute_matched\n--->zabcz\n  1  ^        a\nFailed: error -37: callout error code\n\n# End of testinput17\n"
  },
  {
    "path": "testdata/testoutput18",
    "content": "# This set of tests is run only with the 8-bit library. It tests the POSIX\n# interface, which is supported only with the 8-bit library. This test should\n# not be run with JIT (which is not available for the POSIX interface).\n    \n#forbid_utf\n#pattern posix\n\n# Test some invalid options\n\n/abc/auto_callout\n** Ignored with POSIX interface: auto_callout\n\n/abc/\n   abc\\=find_limits\n** Ignored with POSIX interface: find_limits\n 0: abc\n\n/abc/\n  abc\\=partial_hard\n** Ignored with POSIX interface: partial_hard\n 0: abc\n  \n/a(())bc/parens_nest_limit=1\n** Ignored with POSIX interface: parens_nest_limit\n\n/abc/allow_surrogate_escapes,max_pattern_length=2\n** Ignored with POSIX interface: allow_surrogate_escapes max_pattern_length\n\n# Real tests\n\n/abc/\n    abc\n 0: abc\n\n/^abc|def/\n    abcdef\n 0: abc\n    abcdef\\=notbol\n 0: def\n\n/.*((abc)$|(def))/\n    defabc\n 0: defabc\n 1: abc\n 2: abc\n    defabc\\=noteol\n 0: def\n 1: def\n 2: <unset>\n 3: def\n\n/the quick brown fox/\n    the quick brown fox\n 0: the quick brown fox\n\\= Expect no match\n    The Quick Brown Fox\nNo match: POSIX code 17: match failed\n\n/the quick brown fox/i\n    the quick brown fox\n 0: the quick brown fox\n    The Quick Brown Fox\n 0: The Quick Brown Fox\n\n/(*LF)abc.def/\n\\= Expect no match\n    abc\\ndef\nNo match: POSIX code 17: match failed\n\n/(*LF)abc$/\n    abc\n 0: abc\n    abc\\n\n 0: abc\n\n/(abc)\\2/\nFailed: POSIX code 15: bad back reference at offset 7\n\n/(abc\\1)/\n\\= Expect no match\n    abc\nNo match: POSIX code 17: match failed\n\n/a*(b+)(z)(z)/\n    aaaabbbbzzzz\n 0: aaaabbbbzz\n 1: bbbb\n 2: z\n 3: z\n    aaaabbbbzzzz\\=ovector=0\nMatched without capture\n    aaaabbbbzzzz\\=ovector=1\n 0: aaaabbbbzz\n    aaaabbbbzzzz\\=ovector=2\n 0: aaaabbbbzz\n 1: bbbb\n\n/(a)(b)/\n    ab\\=posix_startend=0:2,ovector=1\n 0: ab\n    ab\\=posix_startend=0:2,ovector=0\nMatched without capture\n    ab\\=posix_startend=1:2,ovector=1\nNo match: POSIX code 17: match failed\n    ab\\=posix_startend=1:2,ovector=0\nNo match: POSIX code 17: match failed\n\n/(*ANY)ab.cd/\n    ab-cd\n 0: ab-cd\n    ab=cd\n 0: ab=cd\n\\= Expect no match\n    ab\\ncd\nNo match: POSIX code 17: match failed\n\n/ab.cd/s\n    ab-cd\n 0: ab-cd\n    ab=cd\n 0: ab=cd\n    ab\\ncd\n 0: ab\\x0acd\n\n/a(b)c/posix_nosub\n    abc\nMatched with REG_NOSUB\n\n/a(?P<name>b)c/posix_nosub\n    abc\nMatched with REG_NOSUB\n\n/(a)\\1/posix_nosub\n    zaay\nMatched with REG_NOSUB\n\n/a?|b?/\n    abc\n 0: a\n\\= Expect no match\n    ddd\\=notempty\nNo match: POSIX code 17: match failed\n\n/\\w+A/\n   CDAAAAB\n 0: CDAAAA\n\n/\\w+A/ungreedy\n   CDAAAAB\n 0: CDA\n   \n/\\Biss\\B/I,aftertext\n** Ignored with POSIX interface: info\n    Mississippi\n 0: iss\n 0+ issippi\n\n/abc/\\\nFailed: POSIX code 9: bad escape sequence at offset 4\n\n\"(?(?C)\"\nFailed: POSIX code 11: unbalanced () at offset 6\n\n\"(?(?C))\"\nFailed: POSIX code 3: pattern error at offset 6\n\n/abcd/substitute_extended\n** Ignored with POSIX interface: substitute_extended\n\n/\\[A]{1000000}**/expand,regerror_buffsize=31\nFailed: POSIX code 4: ? * + invalid at offset 100000\n** regerror() message truncated\n\n/\\[A]{1000000}**/expand,regerror_buffsize=32\nFailed: POSIX code 4: ? * + invalid at offset 1000002\n\n/a(b/regerror_buffsize=0\nFailed: POSIX code 11: \n** regerror() message truncated\n\n/a(b/regerror_buffsize=1\nFailed: POSIX code 11: \n** regerror() message truncated\n\n/a(b/regerror_buffsize=12\nFailed: POSIX code 11: unbalanced \n** regerror() message truncated\n\n/a(b/regerror_buffsize=13\nFailed: POSIX code 11: unbalanced (\n** regerror() message truncated\n\n/a(b/regerror_buffsize=14\nFailed: POSIX code 11: unbalanced ()\n** regerror() message truncated\n\n/a(b/regerror_buffsize=15\nFailed: POSIX code 11: unbalanced () \n** regerror() message truncated\n\n/a(b/regerror_buffsize=25\nFailed: POSIX code 11: unbalanced () at offset \n** regerror() message truncated\n\n/a(b/regerror_buffsize=26\nFailed: POSIX code 11: unbalanced () at offset 3\n\n//posix_nosub\n    \\=offset=70000\n** Ignored with POSIX interface: offset\nMatched with REG_NOSUB\n\n/^d(e)$/posix\n    acdef\\=posix_startend=2:4\n 0: de\n 1: e\n    acde\\=posix_startend=2 \n 0: de\n 1: e\n\\= Expect no match     \n    acdef\nNo match: POSIX code 17: match failed\n    acdef\\=posix_startend=2 \nNo match: POSIX code 17: match failed\n\n/^a\\x{00}b$/posix\n    a\\x{00}b\\=posix_startend=0:3\n 0: a\\x00b\n\n/\"A\" 00 \"B\"/hex\n    A\\x{00}B\\=posix_startend=0:3\n 0: A\\x00B\n    \n/ABC/use_length \n    ABC\n 0: ABC\n\n/a\\b(c/literal,posix\n    a\\\\b(c\n 0: a\\b(c\n\n/a\\b(c/literal,posix,dotall\nFailed: POSIX code 16: bad argument at offset 0\n\n/((a)(b)?(c))/posix\n    123ace\n 0: ac\n 1: ac\n 2: a\n 3: <unset>\n 4: c\n    123ace\\=posix_startend=2:6\n 0: ac\n 1: ac\n 2: a\n 3: <unset>\n 4: c\n\n//posix\n\\= Expect errors\n    \\=null_subject\nNo match: POSIX code 16: bad argument\n    abc\\=null_subject\nNo match: POSIX code 16: bad argument\n    \n/(*LIMIT_HEAP=0)xx/posix\n\\= Expect error\n    xxxx \nNo match: POSIX code 14: failed to get memory\n\n# End of testdata/testinput18\n"
  },
  {
    "path": "testdata/testoutput19",
    "content": "# This set of tests is run only with the 8-bit library. It tests the POSIX\n# interface with UTF/UCP support, which is supported only with the 8-bit\n# library. This test should not be run with JIT (which is not available for the\n# POSIX interface).\n\n#pattern posix\n\n/a\\x{1234}b/utf\n    a\\x{1234}b\n 0: a\\x{1234}b\n\n/\\w/\n\\= Expect no match\n    +++\\x{c2}\nNo match: POSIX code 17: match failed\n\n/\\w/ucp\n    +++\\x{c2}\n 0: \\xc2\n\n/\"^AB\" 00 \"\\x{1234}$\"/hex,utf\n    AB\\x{00}\\x{1234}\\=posix_startend=0:6\n 0: AB\\x{00}\\x{1234}\n\n/\\w/utf\n\\= Expect UTF error\n    A\\xabB\nNo match: POSIX code 16: bad argument\n\n/ AB /hex,utf\nFailed: POSIX code 3: pattern error at offset 0\n\n# End of testdata/testinput19\n"
  },
  {
    "path": "testdata/testoutput2",
    "content": "# This set of tests is not Perl-compatible. It checks on special features\n# of PCRE2's API, error diagnostics, and the compiled code of some patterns.\n# It also checks the non-Perl syntax that PCRE2 supports (Python, .NET,\n# Oniguruma). There are also some tests where PCRE2 and Perl differ,\n# either because PCRE2 can't be compatible, or there is a possible Perl\n# bug.\n\n# NOTE: This is a non-UTF set of tests. When UTF support is needed, use\n# test 5.\n\n#forbid_utf\n#newline_default lf any anycrlf\n\n# Test binary zeroes in the pattern\n\n# /a\\0B/ where 0 is a binary zero\n/61 5c 00 62/B,hex\n------------------------------------------------------------------\n        Bra\n        a\\x00b\n        Ket\n        End\n------------------------------------------------------------------\n    a\\x{0}b\n 0: a\\x00b\n\n# /a0b/ where 0 is a binary zero\n/61 00 62/B,hex\n------------------------------------------------------------------\n        Bra\n        a\\x00b\n        Ket\n        End\n------------------------------------------------------------------\n    a\\x{0}b\n 0: a\\x00b\n\n# /(?#B0C)DE/ where 0 is a binary zero\n/28 3f 23 42 00 43 29 44 45/B,hex\n------------------------------------------------------------------\n        Bra\n        DE\n        Ket\n        End\n------------------------------------------------------------------\n    DE\n 0: DE\n\n/(a)b|/I\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\n\n/abc/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n    abc\n 0: abc\n    defabc\n 0: abc\n    abc\\=anchored\n 0: abc\n\\= Expect no match\n    defabc\\=anchored\nNo match\n    ABC\nNo match\n\n/^abc/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 3\n    abc\n 0: abc\n    abc\\=anchored\n 0: abc\n\\= Expect no match\n    defabc\nNo match\n    defabc\\=anchored\nNo match\n\n/a+bc/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/a*bc/I\nCapture group count = 0\nStarting code units: a b\nLast code unit = 'c'\nSubject length lower bound = 2\n\n/a{3}bc/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 5\n\n/(abc|a+z)/I\nCapture group count = 1\nFirst code unit = 'a'\nSubject length lower bound = 2\n\n/^abc$/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 3\n    abc\n 0: abc\n\\= Expect no match\n    def\\nabc\nNo match\n\n/ab\\idef/\nFailed: error 103 at offset 4: unrecognized character follows \\\n        here: ab\\i |<--| def\n\n/(?X)ab\\idef/\nFailed: error 111 at offset 3: unrecognized character after (? or (?-\n        here: (?X |<--| )ab\\idef\n\n/x{5,4}/\nFailed: error 104 at offset 5: numbers out of order in {} quantifier\n        here: x{5,4 |<--| }\n\n/z{65536}/\nFailed: error 105 at offset 7: number too big in {} quantifier\n        here: z{65536 |<--| }\n\n/[abcd/\nFailed: error 106 at offset 5: missing terminating ] for character class\n        here: [abcd |<--|\n\n/[\\B]/B\nFailed: error 107 at offset 3: escape sequence is invalid in character class\n        here: [\\B |<--| ]\n\n/[\\R]/B\nFailed: error 107 at offset 3: escape sequence is invalid in character class\n        here: [\\R |<--| ]\n\n/[\\X]/B\nFailed: error 107 at offset 3: escape sequence is invalid in character class\n        here: [\\X |<--| ]\n\n/[z-a]/\nFailed: error 108 at offset 4: range out of order in character class\n        here: [z-a |<--| ]\n\n/^*/\nFailed: error 109 at offset 2: quantifier does not follow a repeatable item\n        here: ^* |<--|\n\n/(abc/\nFailed: error 114 at offset 4: missing closing parenthesis\n        here: (abc |<--|\n\n/(?# abc/\nFailed: error 118 at offset 7: missing ) after (?# comment\n        here: (?# abc |<--|\n\n/(?z)abc/\nFailed: error 111 at offset 3: unrecognized character after (? or (?-\n        here: (?z |<--| )abc\n\n/.*b/I\nCapture group count = 0\nFirst code unit at start or follows newline\nLast code unit = 'b'\nSubject length lower bound = 1\n\n/.*?b/I\nCapture group count = 0\nFirst code unit at start or follows newline\nLast code unit = 'b'\nSubject length lower bound = 1\n\n/cat|dog|elephant/I\nCapture group count = 0\nStarting code units: c d e\nSubject length lower bound = 3\n    this sentence eventually mentions a cat\n 0: cat\n    this sentences rambles on and on for a while and then reaches elephant\n 0: elephant\n\n/cat|dog|elephant/I\nCapture group count = 0\nStarting code units: c d e\nSubject length lower bound = 3\n    this sentence eventually mentions a cat\n 0: cat\n    this sentences rambles on and on for a while and then reaches elephant\n 0: elephant\n\n/cat|dog|elephant/Ii\nCapture group count = 0\nOptions: caseless\nStarting code units: C D E c d e\nSubject length lower bound = 3\n    this sentence eventually mentions a CAT cat\n 0: CAT\n    this sentences rambles on and on for a while to elephant ElePhant\n 0: elephant\n\n/a|[bcd]/I\nCapture group count = 0\nStarting code units: a b c d\nSubject length lower bound = 1\n\n/(a|[^\\dZ])/I\nCapture group count = 1\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / : ; < = >\n  ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y [ \\ ] ^ _ ` a b c d\n  e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83\n  \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92\n  \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1\n  \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0\n  \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf\n  \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce\n  \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd\n  \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec\n  \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb\n  \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/(a|b)*[\\s]/I\nCapture group count = 1\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 a b\nSubject length lower bound = 1\n\n/(ab\\2)/\nFailed: error 115 at offset 5: reference to non-existent subpattern\n        here: (ab\\2 |<-->| )\n\n/{4,5}abc/\nFailed: error 109 at offset 5: quantifier does not follow a repeatable item\n        here: {4,5} |<--| abc\n\n/(a)(b)(c)\\2/I\nCapture group count = 3\nMax back reference = 2\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 4\n    abcb\n 0: abcb\n 1: a\n 2: b\n 3: c\n    abcb\\=ovector=0\n 0: abcb\n 1: a\n 2: b\n 3: c\n    abcb\\=ovector=1\nMatched, but too many substrings\n 0: abcb\n    abcb\\=ovector=2\nMatched, but too many substrings\n 0: abcb\n 1: a\n    abcb\\=ovector=3\nMatched, but too many substrings\n 0: abcb\n 1: a\n 2: b\n    abcb\\=ovector=4\n 0: abcb\n 1: a\n 2: b\n 3: c\n\n/(a)bc|(a)(b)\\2/I\nCapture group count = 3\nMax back reference = 2\nFirst code unit = 'a'\nSubject length lower bound = 3\n    abc\n 0: abc\n 1: a\n    abc\\=ovector=0\n 0: abc\n 1: a\n    abc\\=ovector=1\nMatched, but too many substrings\n 0: abc\n    abc\\=ovector=2\n 0: abc\n 1: a\n    aba\n 0: aba\n 1: <unset>\n 2: a\n 3: b\n    aba\\=ovector=0\n 0: aba\n 1: <unset>\n 2: a\n 3: b\n    aba\\=ovector=1\nMatched, but too many substrings\n 0: aba\n    aba\\=ovector=2\nMatched, but too many substrings\n 0: aba\n 1: <unset>\n    aba\\=ovector=3\nMatched, but too many substrings\n 0: aba\n 1: <unset>\n 2: a\n    aba\\=ovector=4\n 0: aba\n 1: <unset>\n 2: a\n 3: b\n\n/abc$/I,dollar_endonly\nCapture group count = 0\nOptions: dollar_endonly\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n    abc\n 0: abc\n\\= Expect no match\n    abc\\n\nNo match\n    abc\\ndef\nNo match\n\n/(a)(b)(c)(d)(e)\\6/\nFailed: error 115 at offset 17: reference to non-existent subpattern\n        here: ...c)(d)(e)\\6 |<-->|\n\n/the quick brown fox/I\nCapture group count = 0\nFirst code unit = 't'\nLast code unit = 'x'\nSubject length lower bound = 19\n    the quick brown fox\n 0: the quick brown fox\n    this is a line with the quick brown fox\n 0: the quick brown fox\n\n/the quick brown fox/I,anchored\nCapture group count = 0\nOptions: anchored\nFirst code unit = 't'\nSubject length lower bound = 19\n    the quick brown fox\n 0: the quick brown fox\n\\= Expect no match\n    this is a line with the quick brown fox\nNo match\n\n/ab(?z)cd/\nFailed: error 111 at offset 5: unrecognized character after (? or (?-\n        here: ab(?z |<--| )cd\n\n/^abc|def/I\nCapture group count = 0\nStarting code units: a d\nSubject length lower bound = 3\n    abcdef\n 0: abc\n    abcdef\\=notbol\n 0: def\n\n/.*((abc)$|(def))/I\nCapture group count = 3\nFirst code unit at start or follows newline\nSubject length lower bound = 3\n    defabc\n 0: defabc\n 1: abc\n 2: abc\n    defabc\\=noteol\n 0: def\n 1: def\n 2: <unset>\n 3: def\n\n/)/\nFailed: error 122 at offset 1: unmatched closing parenthesis\n        here: ) |<--|\n\n/a[]b/\nFailed: error 106 at offset 4: missing terminating ] for character class\n        here: a[]b |<--|\n\n/[^aeiou ]{3,}/I\nCapture group count = 0\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6\n  7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [\n  \\ ] ^ _ ` b c d f g h j k l m n p q r s t v w x y z { | } ~ \\x7f \\x80 \\x81\n  \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90\n  \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f\n  \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae\n  \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd\n  \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc\n  \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb\n  \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea\n  \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9\n  \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 3\n    co-processors, and for\n 0: -pr\n\n/<.*>/I\nCapture group count = 0\nFirst code unit = '<'\nLast code unit = '>'\nSubject length lower bound = 2\n    abc<def>ghi<klm>nop\n 0: <def>ghi<klm>\n\n/<.*?>/I\nCapture group count = 0\nFirst code unit = '<'\nLast code unit = '>'\nSubject length lower bound = 2\n    abc<def>ghi<klm>nop\n 0: <def>\n\n/<.*>/I,ungreedy\nCapture group count = 0\nOptions: ungreedy\nFirst code unit = '<'\nLast code unit = '>'\nSubject length lower bound = 2\n    abc<def>ghi<klm>nop\n 0: <def>\n\n/(?U)<.*>/I\nCapture group count = 0\nFirst code unit = '<'\nLast code unit = '>'\nSubject length lower bound = 2\n    abc<def>ghi<klm>nop\n 0: <def>\n\n/<.*?>/I,ungreedy\nCapture group count = 0\nOptions: ungreedy\nFirst code unit = '<'\nLast code unit = '>'\nSubject length lower bound = 2\n    abc<def>ghi<klm>nop\n 0: <def>ghi<klm>\n\n/={3,}/I,ungreedy\nCapture group count = 0\nOptions: ungreedy\nFirst code unit = '='\nLast code unit = '='\nSubject length lower bound = 3\n    abc========def\n 0: ===\n\n/(?U)={3,}?/I\nCapture group count = 0\nFirst code unit = '='\nLast code unit = '='\nSubject length lower bound = 3\n    abc========def\n 0: ========\n\n/(?<!bar|cattle)foo/I\nCapture group count = 0\nMax lookbehind = 6\nFirst code unit = 'f'\nLast code unit = 'o'\nSubject length lower bound = 3\n    foo\n 0: foo\n    catfoo\n 0: foo\n\\= Expect no match\n    the barfoo\nNo match\n    and cattlefoo\nNo match\n\n/abc(?<=a+)b/\nFailed: error 125 at offset 3: length of lookbehind assertion is not limited\n        here: abc |-->| (?<=a+)b\n\n/(?<!(foo)a\\1)bar/\n\n/(?i)abc/I\nCapture group count = 0\nFirst code unit = 'a' (caseless)\nLast code unit = 'c' (caseless)\nSubject length lower bound = 3\n\n/(a|(?m)a)/I\nCapture group count = 1\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/(?i)^1234/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = '1'\nSubject length lower bound = 4\n\n/(^b|(?i)^d)/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nStarting code units: D b d\nSubject length lower bound = 1\n\n/(?s).*/I\nCapture group count = 0\nMay match empty string\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 0\n\n/[abcd]/I\nCapture group count = 0\nStarting code units: a b c d\nSubject length lower bound = 1\n\n/(?i)[abcd]/I\nCapture group count = 0\nStarting code units: A B C D a b c d\nSubject length lower bound = 1\n\n/(?m)[xy]|(b|c)/I\nCapture group count = 1\nStarting code units: b c x y\nSubject length lower bound = 1\n\n/(^a|^b)/Im\nCapture group count = 1\nOptions: multiline\nFirst code unit at start or follows newline\nSubject length lower bound = 1\n\n/(?i)(^a|^b)/Im\nCapture group count = 1\nOptions: multiline\nFirst code unit at start or follows newline\nSubject length lower bound = 1\n\n/(a)(?(1)a|b|c)/\nFailed: error 127 at offset 3: conditional subpattern contains more than two branches\n        here: (a) |-->| (?(1)a|b|c...\n\n/(?(?=a)a|b|c)/\nFailed: error 127 at offset 0: conditional subpattern contains more than two branches\n        here: |-->| (?(?=a)a|b...\n\n/(?(1a)/\nFailed: error 124 at offset 4: missing closing parenthesis for condition\n        here: (?(1 |<--| a)\n\n/(?(1a))/\nFailed: error 124 at offset 4: missing closing parenthesis for condition\n        here: (?(1 |<--| a))\n\n/(?(?i))/\nFailed: error 128 at offset 3: atomic assertion expected after (?( or (?(?C)\n        here: (?( |<--| ?i))\n\n/(?(abc))/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: (?( |<-->| abc))\n\n/(?(?<ab))/\nFailed: error 128 at offset 3: atomic assertion expected after (?( or (?(?C)\n        here: (?( |<--| ?<ab))\n\n/((?s)blah)\\s+\\1/I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'b'\nLast code unit = 'h'\nSubject length lower bound = 9\n\n/((?i)blah)\\s+\\1/I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'b' (caseless)\nLast code unit = 'h' (caseless)\nSubject length lower bound = 9\n\n/((?i)b)/IB\n------------------------------------------------------------------\n        Bra\n        CBra 1\n     /i b\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nFirst code unit = 'b' (caseless)\nSubject length lower bound = 1\n\n/(a*b|(?i:c*(?-i)d))/I\nCapture group count = 1\nStarting code units: C a b c d\nSubject length lower bound = 1\n\n/a$/I\nCapture group count = 0\nFirst code unit = 'a'\nSubject length lower bound = 1\n    a\n 0: a\n    a\\n\n 0: a\n\\= Expect no match\n    a\\=noteol\nNo match\n    a\\n\\=noteol\nNo match\n\n/a$/Im\nCapture group count = 0\nOptions: multiline\nFirst code unit = 'a'\nSubject length lower bound = 1\n    a\n 0: a\n    a\\n\n 0: a\n    a\\n\\=noteol\n 0: a\n\\= Expect no match\n    a\\=noteol\nNo match\n\n/\\Aabc/Im\nCapture group count = 0\nMax lookbehind = 1\nCompile options: multiline\nOverall options: anchored multiline\nFirst code unit = 'a'\nSubject length lower bound = 3\n\n/^abc/Im\nCapture group count = 0\nOptions: multiline\nFirst code unit at start or follows newline\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))/I\nCapture group count = 5\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 3\n  aaaaabbbbbcccccdef\n 0: aaaaabbbbbcccccdef\n 1: aaaaabbbbbcccccdef\n 2: aaaaa\n 3: b\n 4: bbbbccccc\n 5: def\n\n/(?<=foo)[ab]/I\nCapture group count = 0\nMax lookbehind = 3\nStarting code units: a b\nSubject length lower bound = 1\n\n/(?<!foo)(alpha|omega)/I\nCapture group count = 1\nMax lookbehind = 3\nStarting code units: a o\nLast code unit = 'a'\nSubject length lower bound = 5\n\n/(?!alphabet)[ab]/I\nCapture group count = 0\nStarting code units: a b\nSubject length lower bound = 1\n\n/(?<=foo\\n)^bar/Im\nCapture group count = 0\nMax lookbehind = 4\nContains explicit CR or LF match\nOptions: multiline\nLast code unit = 'r'\nSubject length lower bound = 3\n    foo\\nbarbar\n 0: bar\n\\= Expect no match\n    rhubarb\nNo match\n    barbell\nNo match\n    abc\\nbarton\nNo match\n\n/^(?<=foo\\n)bar/Im\nCapture group count = 0\nMax lookbehind = 4\nContains explicit CR or LF match\nOptions: multiline\nFirst code unit at start or follows newline\nLast code unit = 'r'\nSubject length lower bound = 3\n    foo\\nbarbar\n 0: bar\n\\= Expect no match\n    rhubarb\nNo match\n    barbell\nNo match\n    abc\\nbarton\nNo match\n\n/(?>^abc)/Im\nCapture group count = 0\nOptions: multiline\nFirst code unit at start or follows newline\nLast code unit = 'c'\nSubject length lower bound = 3\n    abc\n 0: abc\n    def\\nabc\n 0: abc\n\\= Expect no match\n    defabc\nNo match\n\n/(?<=ab(c+)d)ef/\nFailed: error 125 at offset 0: length of lookbehind assertion is not limited\n        here: |-->| (?<=ab(c+)...\n\n/(?<=ab(?<=c+)d)ef/\nFailed: error 125 at offset 6: length of lookbehind assertion is not limited\n        here: (?<=ab |-->| (?<=c+)d)e...\n\n/The next three are in testinput2 because they have variable length branches/\n\n/(?<=bullock|donkey)-cart/I\nCapture group count = 0\nMax lookbehind = 7\nFirst code unit = '-'\nLast code unit = 't'\nSubject length lower bound = 5\n    the bullock-cart\n 0: -cart\n    a donkey-cart race\n 0: -cart\n\\= Expect no match\n    cart\nNo match\n    horse-and-cart\nNo match\n\n/(?<=ab(?i)x|y|z)/I\nCapture group count = 0\nMax lookbehind = 3\nMay match empty string\nSubject length lower bound = 0\n\n/(?>.*)(?<=(abcd)|(xyz))/I\nCapture group count = 2\nMax lookbehind = 4\nMay match empty string\nSubject length lower bound = 0\n    alphabetabcd\n 0: alphabetabcd\n 1: abcd\n    endingxyz\n 0: endingxyz\n 1: <unset>\n 2: xyz\n\n/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/I\nCapture group count = 0\nMax lookbehind = 4\nFirst code unit = 'Z'\nLast code unit = 'Z'\nSubject length lower bound = 2\n    abxyZZ\n 0: ZZ\n    abXyZZ\n 0: ZZ\n    ZZZ\n 0: ZZ\n    zZZ\n 0: ZZ\n    bZZ\n 0: ZZ\n    BZZ\n 0: ZZ\n\\= Expect no match\n    ZZ\nNo match\n    abXYZZ\nNo match\n    zzz\nNo match\n    bzz\nNo match\n\n/(?<!(foo)a)bar/I\nCapture group count = 1\nMax lookbehind = 4\nFirst code unit = 'b'\nLast code unit = 'r'\nSubject length lower bound = 3\n    bar\n 0: bar\n    foobbar\n 0: bar\n\\= Expect no match\n    fooabar\nNo match\n\n# Perl does not fail these two for the final subjects.\n\n/^(xa|=?\\1a){2}$/\n    xa=xaa\n 0: xa=xaa\n 1: =xaa\n\\= Expect no match\n    xa=xaaa\nNo match\n\n/^(xa|=?\\1a)+$/\n    xa=xaa\n 0: xa=xaa\n 1: =xaa\n\\= Expect no match\n    xa=xaaa\nNo match\n\n# These are syntax tests from Perl 5.005\n\n/a[b-a]/\nFailed: error 108 at offset 5: range out of order in character class\n        here: a[b-a |<--| ]\n\n/a[]b/\nFailed: error 106 at offset 4: missing terminating ] for character class\n        here: a[]b |<--|\n\n/a[/\nFailed: error 106 at offset 2: missing terminating ] for character class\n        here: a[ |<--|\n\n/*a/\nFailed: error 109 at offset 1: quantifier does not follow a repeatable item\n        here: * |<--| a\n\n/(*)b/\nFailed: error 109 at offset 2: quantifier does not follow a repeatable item\n        here: (* |<--| )b\n\n/abc)/\nFailed: error 122 at offset 4: unmatched closing parenthesis\n        here: abc) |<--|\n\n/(abc/\nFailed: error 114 at offset 4: missing closing parenthesis\n        here: (abc |<--|\n\n/a**/\nFailed: error 109 at offset 3: quantifier does not follow a repeatable item\n        here: a** |<--|\n\n/)(/\nFailed: error 122 at offset 1: unmatched closing parenthesis\n        here: ) |<--| (\n\n/\\1/\nFailed: error 115 at offset 2: reference to non-existent subpattern\n        here: \\1 |<-->|\n\n/\\2/\nFailed: error 115 at offset 2: reference to non-existent subpattern\n        here: \\2 |<-->|\n\n/(a)|\\2/\nFailed: error 115 at offset 6: reference to non-existent subpattern\n        here: (a)|\\2 |<-->|\n\n/a[b-a]/Ii\nFailed: error 108 at offset 5: range out of order in character class\n        here: a[b-a |<--| ]\n\n/a[]b/Ii\nFailed: error 106 at offset 4: missing terminating ] for character class\n        here: a[]b |<--|\n\n/a[/Ii\nFailed: error 106 at offset 2: missing terminating ] for character class\n        here: a[ |<--|\n\n/*a/Ii\nFailed: error 109 at offset 1: quantifier does not follow a repeatable item\n        here: * |<--| a\n\n/(*)b/Ii\nFailed: error 109 at offset 2: quantifier does not follow a repeatable item\n        here: (* |<--| )b\n\n/abc)/Ii\nFailed: error 122 at offset 4: unmatched closing parenthesis\n        here: abc) |<--|\n\n/(abc/Ii\nFailed: error 114 at offset 4: missing closing parenthesis\n        here: (abc |<--|\n\n/a**/Ii\nFailed: error 109 at offset 3: quantifier does not follow a repeatable item\n        here: a** |<--|\n\n/)(/Ii\nFailed: error 122 at offset 1: unmatched closing parenthesis\n        here: ) |<--| (\n\n/:(?:/\nFailed: error 114 at offset 4: missing closing parenthesis\n        here: :(?: |<--|\n\n/(?<%)b/\nFailed: error 162 at offset 3: subpattern name expected\n        here: (?< |<--| %)b\n\n/a(?{)b/\nFailed: error 111 at offset 4: unrecognized character after (? or (?-\n        here: a(?{ |<--| )b\n\n/a(?{{})b/\nFailed: error 111 at offset 4: unrecognized character after (? or (?-\n        here: a(?{ |<--| {})b\n\n/a(?{}})b/\nFailed: error 111 at offset 4: unrecognized character after (? or (?-\n        here: a(?{ |<--| }})b\n\n/a(?{\"{\"})b/\nFailed: error 111 at offset 4: unrecognized character after (? or (?-\n        here: a(?{ |<--| \"{\"})b\n\n/a(?{\"{\"}})b/\nFailed: error 111 at offset 4: unrecognized character after (? or (?-\n        here: a(?{ |<--| \"{\"}})b\n\n/(?(1?)a|b)/\nFailed: error 124 at offset 4: missing closing parenthesis for condition\n        here: (?(1 |<--| ?)a|b)\n\n/[a[:xyz:/\nFailed: error 106 at offset 8: missing terminating ] for character class\n        here: [a[:xyz: |<--|\n\n/(?<=x+)y/\nFailed: error 125 at offset 0: length of lookbehind assertion is not limited\n        here: |-->| (?<=x+)y\n\n/a{37,17}/\nFailed: error 104 at offset 7: numbers out of order in {} quantifier\n        here: a{37,17 |<--| }\n\n/abc/\\\nFailed: error 101 at offset 4: \\ at end of pattern\n        here: abc\\ |<--|\n\n/abc/\\i\nFailed: error 101 at offset 4: \\ at end of pattern\n        here: abc\\ |<--|\n\n/(a)bc(d)/I\nCapture group count = 2\nFirst code unit = 'a'\nLast code unit = 'd'\nSubject length lower bound = 4\n    abcd\n 0: abcd\n 1: a\n 2: d\n    abcd\\=copy=2\n 0: abcd\n 1: a\n 2: d\n 2C d (1)\n    abcd\\=copy=5\n 0: abcd\n 1: a\n 2: d\nCopy substring 5 failed (-49): unknown substring\nGet substring 5 length failed (-49): unknown substring\n\n/(.{20})/I\nCapture group count = 1\nSubject length lower bound = 20\n    abcdefghijklmnopqrstuvwxyz\n 0: abcdefghijklmnopqrst\n 1: abcdefghijklmnopqrst\n    abcdefghijklmnopqrstuvwxyz\\=copy=1\n 0: abcdefghijklmnopqrst\n 1: abcdefghijklmnopqrst\n 1C abcdefghijklmnopqrst (20)\n    abcdefghijklmnopqrstuvwxyz\\=get=1\n 0: abcdefghijklmnopqrst\n 1: abcdefghijklmnopqrst\n 1G abcdefghijklmnopqrst (20)\n\n/(.{15})/I\nCapture group count = 1\nSubject length lower bound = 15\n    abcdefghijklmnopqrstuvwxyz\n 0: abcdefghijklmno\n 1: abcdefghijklmno\n    abcdefghijklmnopqrstuvwxyz\\=copy=1,get=1\n 0: abcdefghijklmno\n 1: abcdefghijklmno\n 1C abcdefghijklmno (15)\n 1G abcdefghijklmno (15)\n\n/(.{16})/I\nCapture group count = 1\nSubject length lower bound = 16\n    abcdefghijklmnopqrstuvwxyz\n 0: abcdefghijklmnop\n 1: abcdefghijklmnop\n    abcdefghijklmnopqrstuvwxyz\\=copy=1,get=1,getall\n 0: abcdefghijklmnop\n 1: abcdefghijklmnop\n 1C abcdefghijklmnop (16)\n 1G abcdefghijklmnop (16)\n 0L abcdefghijklmnop\n 1L abcdefghijklmnop\n\n/^(a|(bc))de(f)/I\nCapture group count = 3\nCompile options: <none>\nOverall options: anchored\nStarting code units: a b\nSubject length lower bound = 4\n    adef\\=get=1,get=2,get=3,get=4,getall\n 0: adef\n 1: a\n 2: <unset>\n 3: f\n 1G a (1)\nGet substring 2 failed (-55): requested value is not set\n 3G f (1)\nGet substring 4 failed (-49): unknown substring\n 0L adef\n 1L a\n 2L \n 3L f\n    bcdef\\=get=1,get=2,get=3,get=4,getall\n 0: bcdef\n 1: bc\n 2: bc\n 3: f\n 1G bc (2)\n 2G bc (2)\n 3G f (1)\nGet substring 4 failed (-49): unknown substring\n 0L bcdef\n 1L bc\n 2L bc\n 3L f\n    adefghijk\\=copy=0\n 0: adef\n 1: a\n 2: <unset>\n 3: f\n 0C adef (4)\n\n/^abc\\00def/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 7\n    abc\\00def\\=copy=0,getall\n 0: abc\\x00def\n 0C abc\\x00def (7)\n 0L abc\\x00def\n\n/word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+\n)((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+\n)?)?)?)?)?)?)?)?)?otherword/I\nCapture group count = 8\nContains explicit CR or LF match\nFirst code unit = 'w'\nLast code unit = 'd'\nSubject length lower bound = 14\n\n/.*X/IB\n------------------------------------------------------------------\n        Bra\n        Any*\n        X\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit at start or follows newline\nLast code unit = 'X'\nSubject length lower bound = 1\n\n/.*X/IBs\n------------------------------------------------------------------\n        Bra\n        AllAny*\n        X\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: dotall\nOverall options: anchored dotall\nLast code unit = 'X'\nSubject length lower bound = 1\n\n/(.*X|^B)/IB\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Any*\n        X\n        Alt\n        ^\n        B\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nFirst code unit at start or follows newline\nSubject length lower bound = 1\n\n/(.*X|^B)/IBs\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        AllAny*\n        X\n        Alt\n        ^\n        B\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nCompile options: dotall\nOverall options: anchored dotall\nSubject length lower bound = 1\n\n/(?s)(.*X|^B)/IB\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        AllAny*\n        X\n        Alt\n        ^\n        B\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 1\n\n/(?s:.*X|^B)/IB\n------------------------------------------------------------------\n        Bra\n        Bra\n        AllAny*\n        X\n        Alt\n        ^\n        B\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 1\n\n/\\Biss\\B/I,aftertext\nCapture group count = 0\nMax lookbehind = 1\nFirst code unit = 'i'\nLast code unit = 's'\nSubject length lower bound = 3\n    Mississippi\n 0: iss\n 0+ issippi\n\n/iss/I,aftertext,altglobal\nCapture group count = 0\nFirst code unit = 'i'\nLast code unit = 's'\nSubject length lower bound = 3\n    Mississippi\n 0: iss\n 0+ issippi\n 0: iss\n 0+ ippi\n\n/\\Biss\\B/I,aftertext,altglobal\nCapture group count = 0\nMax lookbehind = 1\nFirst code unit = 'i'\nLast code unit = 's'\nSubject length lower bound = 3\n    Mississippi\n 0: iss\n 0+ issippi\n\n/\\Biss\\B/Ig,aftertext\nCapture group count = 0\nMax lookbehind = 1\nFirst code unit = 'i'\nLast code unit = 's'\nSubject length lower bound = 3\n    Mississippi\n 0: iss\n 0+ issippi\n 0: iss\n 0+ ippi\n\\= Expect no match\n    Mississippi\\=anchored\nNo match\n\n/(?<=[Ms])iss/Ig,aftertext\nCapture group count = 0\nMax lookbehind = 1\nFirst code unit = 'i'\nLast code unit = 's'\nSubject length lower bound = 3\n    Mississippi\n 0: iss\n 0+ issippi\n 0: iss\n 0+ ippi\n\n/(?<=[Ms])iss/I,aftertext,altglobal\nCapture group count = 0\nMax lookbehind = 1\nFirst code unit = 'i'\nLast code unit = 's'\nSubject length lower bound = 3\n    Mississippi\n 0: iss\n 0+ issippi\n\n/^iss/Ig,aftertext\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'i'\nSubject length lower bound = 3\n    ississippi\n 0: iss\n 0+ issippi\n\n/.*iss/Ig,aftertext\nCapture group count = 0\nFirst code unit at start or follows newline\nLast code unit = 's'\nSubject length lower bound = 3\n    abciss\\nxyzisspqr\n 0: abciss\n 0+ \\x0axyzisspqr\n 0: xyziss\n 0+ pqr\n\n/.i./Ig,aftertext\nCapture group count = 0\nLast code unit = 'i'\nSubject length lower bound = 3\n    Mississippi\n 0: Mis\n 0+ sissippi\n 0: sis\n 0+ sippi\n 0: sip\n 0+ pi\n    Mississippi\\=anchored\n 0: Mis\n 0+ sissippi\n 0: sis\n 0+ sippi\n 0: sip\n 0+ pi\n    Missouri river\n 0: Mis\n 0+ souri river\n 0: ri \n 0+ river\n 0: riv\n 0+ er\n    Missouri river\\=anchored\n 0: Mis\n 0+ souri river\n\n/^.is/Ig,aftertext\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 3\n    Mississippi\n 0: Mis\n 0+ sissippi\n\n/^ab\\n/Ig,aftertext\nCapture group count = 0\nContains explicit CR or LF match\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 3\n    ab\\nab\\ncd\n 0: ab\\x0a\n 0+ ab\\x0acd\n\n/^ab\\n/Igm,aftertext\nCapture group count = 0\nContains explicit CR or LF match\nOptions: multiline\nFirst code unit at start or follows newline\nLast code unit = \\x0a\nSubject length lower bound = 3\n    ab\\nab\\ncd\n 0: ab\\x0a\n 0+ ab\\x0acd\n 0: ab\\x0a\n 0+ cd\n\n/^/gm,newline=any\n    a\\rb\\nc\\r\\nxyz\\=aftertext\n 0: \n 0+ a\\x0db\\x0ac\\x0d\\x0axyz\n 0: \n 0+ b\\x0ac\\x0d\\x0axyz\n 0: \n 0+ c\\x0d\\x0axyz\n 0: \n 0+ xyz\n\n/abc/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/abc|bac/I\nCapture group count = 0\nStarting code units: a b\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/(abc|bac)/I\nCapture group count = 1\nStarting code units: a b\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/(abc|(c|dc))/I\nCapture group count = 2\nStarting code units: a c d\nLast code unit = 'c'\nSubject length lower bound = 1\n\n/(abc|(d|de)c)/I\nCapture group count = 2\nStarting code units: a d\nLast code unit = 'c'\nSubject length lower bound = 2\n\n/a*/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n\n/a+/I\nCapture group count = 0\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/(baa|a+)/I\nCapture group count = 1\nStarting code units: a b\nLast code unit = 'a'\nSubject length lower bound = 1\n\n/a{0,3}/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n\n/baa{3,}/I\nCapture group count = 0\nFirst code unit = 'b'\nLast code unit = 'a'\nSubject length lower bound = 5\n\n/\"([^\\\\\"]+|\\\\.)*\"/I\nCapture group count = 1\nFirst code unit = '\"'\nLast code unit = '\"'\nSubject length lower bound = 2\n\n/(abc|ab[cd])/I\nCapture group count = 1\nFirst code unit = 'a'\nSubject length lower bound = 3\n\n/(a|.)/I\nCapture group count = 1\nSubject length lower bound = 1\n\n/a|ba|\\w/I\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\n/abc(?=pqr)/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'r'\nSubject length lower bound = 3\n\n/...(?<=abc)/I\nCapture group count = 0\nMax lookbehind = 3\nSubject length lower bound = 3\n\n/abc(?!pqr)/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/ab./I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n\n/ab[xyz]/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n\n/abc*/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/ab.c*/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n\n/a.c*/I\nCapture group count = 0\nFirst code unit = 'a'\nSubject length lower bound = 2\n\n/.c*/I\nCapture group count = 0\nSubject length lower bound = 1\n\n/ac*/I\nCapture group count = 0\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/(a.c*|b.c*)/I\nCapture group count = 1\nStarting code units: a b\nSubject length lower bound = 2\n\n/a.c*|aba/I\nCapture group count = 0\nFirst code unit = 'a'\nSubject length lower bound = 2\n\n/.+a/I\nCapture group count = 0\nLast code unit = 'a'\nSubject length lower bound = 2\n\n/(?=abcda)a.*/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'a'\nSubject length lower bound = 2\n\n/(?=a)a.*/I\nCapture group count = 0\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/a(b)*/I\nCapture group count = 1\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/a\\d*/I\nCapture group count = 0\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/ab\\d*/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/a(\\d)*/I\nCapture group count = 1\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/abcde{0,0}/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'd'\nSubject length lower bound = 4\n\n/ab\\d+/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n\n/a(?(1)b)(.)/I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'a'\nSubject length lower bound = 2\n\n/a(?(1)bag|big)(.)/I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'a'\nLast code unit = 'g'\nSubject length lower bound = 5\n\n/a(?(1)bag|big)*(.)/I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'a'\nSubject length lower bound = 2\n\n/a(?(1)bag|big)+(.)/I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'a'\nLast code unit = 'g'\nSubject length lower bound = 5\n\n/a(?(1)b..|b..)(.)/I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 5\n\n/ab\\d{0}e/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'e'\nSubject length lower bound = 3\n\n/a?b?/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n    a\n 0: a\n    b\n 0: b\n    ab\n 0: ab\n    \\\n 0: \n\\= Expect no match\n    \\=notempty\nNo match\n\n/|-/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n    abcd\n 0: \n    -abc\n 0: \n    ab-c\\=notempty\n 0: -\n\\= Expect no match\n    abc\\=notempty\nNo match\n\n/^.?abcd/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nLast code unit = 'd'\nSubject length lower bound = 4\n\n/\\(             # ( at start\n  (?:           # Non-capturing bracket\n  (?>[^()]+)    # Either a sequence of non-brackets (no backtracking)\n  |             # Or\n  (?R)          # Recurse - i.e. nested bracketed string\n  )*            # Zero or more contents\n  \\)            # Closing )\n  /Ix\nCapture group count = 0\nOptions: extended\nFirst code unit = '('\nLast code unit = ')'\nSubject length lower bound = 2\n    (abcd)\n 0: (abcd)\n    (abcd)xyz\n 0: (abcd)\n    xyz(abcd)\n 0: (abcd)\n    (ab(xy)cd)pqr\n 0: (ab(xy)cd)\n    (ab(xycd)pqr\n 0: (xycd)\n    () abc ()\n 0: ()\n    12(abcde(fsh)xyz(foo(bar))lmno)89\n 0: (abcde(fsh)xyz(foo(bar))lmno)\n\\= Expect no match\n    abcd\nNo match\n    abcd)\nNo match\n    (abcd\nNo match\n\n/\\(  ( (?>[^()]+) | (?R) )* \\) /Igx\nCapture group count = 1\nOptions: extended\nFirst code unit = '('\nLast code unit = ')'\nSubject length lower bound = 2\n    (ab(xy)cd)pqr\n 0: (ab(xy)cd)\n 1: cd\n    1(abcd)(x(y)z)pqr\n 0: (abcd)\n 1: abcd\n 0: (x(y)z)\n 1: z\n\n/\\(  (?: (?>[^()]+) | (?R) ) \\) /Ix\nCapture group count = 0\nOptions: extended\nFirst code unit = '('\nLast code unit = ')'\nSubject length lower bound = 3\n    (abcd)\n 0: (abcd)\n    (ab(xy)cd)\n 0: (xy)\n    (a(b(c)d)e)\n 0: (c)\n    ((ab))\n 0: ((ab))\n\\= Expect no match\n    ()\nNo match\n\n/\\(  (?: (?>[^()]+) | (?R) )? \\) /Ix\nCapture group count = 0\nOptions: extended\nFirst code unit = '('\nLast code unit = ')'\nSubject length lower bound = 2\n    ()\n 0: ()\n    12(abcde(fsh)xyz(foo(bar))lmno)89\n 0: (fsh)\n\n/\\(  ( (?>[^()]+) | (?R) )* \\) /Ix\nCapture group count = 1\nOptions: extended\nFirst code unit = '('\nLast code unit = ')'\nSubject length lower bound = 2\n    (ab(xy)cd)\n 0: (ab(xy)cd)\n 1: cd\n\n/\\( ( ( (?>[^()]+) | (?R) )* ) \\) /Ix\nCapture group count = 2\nOptions: extended\nFirst code unit = '('\nLast code unit = ')'\nSubject length lower bound = 2\n    (ab(xy)cd)\n 0: (ab(xy)cd)\n 1: ab(xy)cd\n 2: cd\n\n/\\( (123)? ( ( (?>[^()]+) | (?R) )* ) \\) /Ix\nCapture group count = 3\nOptions: extended\nFirst code unit = '('\nLast code unit = ')'\nSubject length lower bound = 2\n    (ab(xy)cd)\n 0: (ab(xy)cd)\n 1: <unset>\n 2: ab(xy)cd\n 3: cd\n    (123ab(xy)cd)\n 0: (123ab(xy)cd)\n 1: 123\n 2: ab(xy)cd\n 3: cd\n\n/\\( ( (123)? ( (?>[^()]+) | (?R) )* ) \\) /Ix\nCapture group count = 3\nOptions: extended\nFirst code unit = '('\nLast code unit = ')'\nSubject length lower bound = 2\n    (ab(xy)cd)\n 0: (ab(xy)cd)\n 1: ab(xy)cd\n 2: <unset>\n 3: cd\n    (123ab(xy)cd)\n 0: (123ab(xy)cd)\n 1: 123ab(xy)cd\n 2: 123\n 3: cd\n\n/\\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \\) /Ix\nCapture group count = 11\nOptions: extended\nFirst code unit = '('\nLast code unit = ')'\nSubject length lower bound = 2\n    (ab(xy)cd)\n 0: (ab(xy)cd)\n 1: ab(xy)cd\n 2: ab(xy)cd\n 3: ab(xy)cd\n 4: ab(xy)cd\n 5: ab(xy)cd\n 6: ab(xy)cd\n 7: ab(xy)cd\n 8: ab(xy)cd\n 9: ab(xy)cd\n10: ab(xy)cd\n11: cd\n\n/\\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \\) /Ix\nCapture group count = 3\nOptions: extended\nFirst code unit = '('\nLast code unit = ')'\nSubject length lower bound = 2\n    (abcd(xyz<p>qrs)123)\n 0: (abcd(xyz<p>qrs)123)\n 1: abcd(xyz<p>qrs)123\n 2: 123\n\n/\\( ( ( (?>[^()]+) | ((?R)) )* ) \\) /Ix\nCapture group count = 3\nOptions: extended\nFirst code unit = '('\nLast code unit = ')'\nSubject length lower bound = 2\n    (ab(cd)ef)\n 0: (ab(cd)ef)\n 1: ab(cd)ef\n 2: ef\n 3: (cd)\n    (ab(cd(ef)gh)ij)\n 0: (ab(cd(ef)gh)ij)\n 1: ab(cd(ef)gh)ij\n 2: ij\n 3: (cd(ef)gh)\n\n/^[[:alnum:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [0-9A-Za-z]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\n/^[[:^alnum:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [^0-9A-Za-z]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / : ; < = >\n  ? @ [ \\ ] ^ _ ` { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88\n  \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97\n  \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6\n  \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5\n  \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4\n  \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3\n  \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2\n  \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1\n  \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/^[[:alpha:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [A-Za-z]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n  a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\n/^[[:^alpha:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [^A-Za-z]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4\n  5 6 7 8 9 : ; < = > ? @ [ \\ ] ^ _ ` { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84\n  \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93\n  \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2\n  \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1\n  \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0\n  \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf\n  \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde\n  \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed\n  \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc\n  \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/[_[:alpha:]]/I\nCapture group count = 0\nStarting code units: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n  _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\n/^[[:ascii:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [\\x00-\\x7f]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4\n  5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y\n  Z [ \\ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~\n  \\x7f\nSubject length lower bound = 1\n\n/^[[:^ascii:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [^\\x00-\\x7f]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a\n  \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99\n  \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8\n  \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7\n  \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6\n  \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5\n  \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4\n  \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3\n  \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/^[[:blank:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [\\x09 ]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: \\x09 \\x20\nSubject length lower bound = 1\n\n/^[[:^blank:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [^\\x09 ]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x0a \\x0b\n  \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a\n  \\x1b \\x1c \\x1d \\x1e \\x1f ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9\n  : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^\n  _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80\n  \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f\n  \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e\n  \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad\n  \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc\n  \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb\n  \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda\n  \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9\n  \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8\n  \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/[\\n\\x0b\\x0c\\x0d[:blank:]]/I\nCapture group count = 0\nContains explicit CR or LF match\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20\nSubject length lower bound = 1\n\n/^[[:cntrl:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [\\x00-\\x1f\\x7f]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x7f\nSubject length lower bound = 1\n\n/^[[:digit:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [0-9]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: 0 1 2 3 4 5 6 7 8 9\nSubject length lower bound = 1\n\n/^[[:graph:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [!-~]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 :\n  ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _\n  ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~\nSubject length lower bound = 1\n\n/^[[:lower:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [a-z]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\n/^[[:print:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [ -~]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: \\x20 ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8\n  9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ]\n  ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~\nSubject length lower bound = 1\n\n/^[[:punct:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [!-/:-@[-`{-~]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: ! \" # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \\ ] ^\n  _ ` { | } ~\nSubject length lower bound = 1\n\n/^[[:space:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [\\x09-\\x0d ]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20\nSubject length lower bound = 1\n\n/^[[:upper:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [A-Z]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\nSubject length lower bound = 1\n\n/^[[:xdigit:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [0-9A-Fa-f]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f\nSubject length lower bound = 1\n\n/^[[:word:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [0-9A-Z_a-z]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\n/^[[:^cntrl:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [^\\x00-\\x1f\\x7f]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: \\x20 ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8\n  9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ]\n  ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x80 \\x81\n  \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90\n  \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f\n  \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae\n  \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd\n  \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc\n  \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb\n  \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea\n  \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9\n  \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/^[12[:^digit:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [^03-9]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( ) * + , - . / 1 2 : ; <\n  = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a\n  b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80 \\x81 \\x82\n  \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91\n  \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0\n  \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf\n  \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe\n  \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd\n  \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc\n  \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb\n  \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa\n  \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/^[[:^blank:]]/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        [^\\x09 ]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x0a \\x0b\n  \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a\n  \\x1b \\x1c \\x1d \\x1e \\x1f ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9\n  : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^\n  _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80\n  \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f\n  \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e\n  \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad\n  \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc\n  \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb\n  \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda\n  \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9\n  \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8\n  \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/[01[:alpha:]%]/IB\n------------------------------------------------------------------\n        Bra\n        [%01A-Za-z]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: % 0 1 A B C D E F G H I J K L M N O P Q R S T U V W\n  X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\n/[[.ch.]]/I\nFailed: error 113 at offset 7: POSIX collating elements are not supported\n        here: [[.ch.] |<--| ]\n\n/[[=ch=]]/I\nFailed: error 113 at offset 7: POSIX collating elements are not supported\n        here: [[=ch=] |<--| ]\n\n/[[:rhubarb:]]/I\nFailed: error 130 at offset 12: unknown POSIX class name\n        here: ...:rhubarb:] |<--| ]\n\n/[[:upper:]]/Ii\nCapture group count = 0\nOptions: caseless\nStarting code units: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n  a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n    A\n 0: A\n    a\n 0: a\n\n/[[:lower:]]/Ii\nCapture group count = 0\nOptions: caseless\nStarting code units: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n  a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n    A\n 0: A\n    a\n 0: a\n\n/((?-i)[[:lower:]])[[:lower:]]/Ii\nCapture group count = 1\nOptions: caseless\nStarting code units: a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 2\n    ab\n 0: ab\n 1: a\n    aB\n 0: aB\n 1: a\n\\= Expect no match\n    Ab\nNo match\n    AB\nNo match\n\n/[\\200-\\110]/I\nFailed: error 108 at offset 10: range out of order in character class\n        here: [\\200-\\110 |<--| ]\n\n/^(?(0)f|b)oo/I\nFailed: error 115 at offset 5: reference to non-existent subpattern\n        here: ^(?(0 |<-->| )f|b)oo\n\n# This one's here because of the large output vector needed\n\n/(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\w+)\\s+(\\270)/I\nCapture group count = 271\nMax back reference = 270\nStarting code units: 0 1 2 3 4 5 6 7 8 9\nSubject length lower bound = 1\n     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC\\=ovector=300\n 0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC\n 1: 1 \n 2: 2 \n 3: 3 \n 4: 4 \n 5: 5 \n 6: 6 \n 7: 7 \n 8: 8 \n 9: 9 \n10: 10 \n11: 11 \n12: 12 \n13: 13 \n14: 14 \n15: 15 \n16: 16 \n17: 17 \n18: 18 \n19: 19 \n20: 20 \n21: 21 \n22: 22 \n23: 23 \n24: 24 \n25: 25 \n26: 26 \n27: 27 \n28: 28 \n29: 29 \n30: 30 \n31: 31 \n32: 32 \n33: 33 \n34: 34 \n35: 35 \n36: 36 \n37: 37 \n38: 38 \n39: 39 \n40: 40 \n41: 41 \n42: 42 \n43: 43 \n44: 44 \n45: 45 \n46: 46 \n47: 47 \n48: 48 \n49: 49 \n50: 50 \n51: 51 \n52: 52 \n53: 53 \n54: 54 \n55: 55 \n56: 56 \n57: 57 \n58: 58 \n59: 59 \n60: 60 \n61: 61 \n62: 62 \n63: 63 \n64: 64 \n65: 65 \n66: 66 \n67: 67 \n68: 68 \n69: 69 \n70: 70 \n71: 71 \n72: 72 \n73: 73 \n74: 74 \n75: 75 \n76: 76 \n77: 77 \n78: 78 \n79: 79 \n80: 80 \n81: 81 \n82: 82 \n83: 83 \n84: 84 \n85: 85 \n86: 86 \n87: 87 \n88: 88 \n89: 89 \n90: 90 \n91: 91 \n92: 92 \n93: 93 \n94: 94 \n95: 95 \n96: 96 \n97: 97 \n98: 98 \n99: 99 \n100: 100 \n101: 101 \n102: 102 \n103: 103 \n104: 104 \n105: 105 \n106: 106 \n107: 107 \n108: 108 \n109: 109 \n110: 110 \n111: 111 \n112: 112 \n113: 113 \n114: 114 \n115: 115 \n116: 116 \n117: 117 \n118: 118 \n119: 119 \n120: 120 \n121: 121 \n122: 122 \n123: 123 \n124: 124 \n125: 125 \n126: 126 \n127: 127 \n128: 128 \n129: 129 \n130: 130 \n131: 131 \n132: 132 \n133: 133 \n134: 134 \n135: 135 \n136: 136 \n137: 137 \n138: 138 \n139: 139 \n140: 140 \n141: 141 \n142: 142 \n143: 143 \n144: 144 \n145: 145 \n146: 146 \n147: 147 \n148: 148 \n149: 149 \n150: 150 \n151: 151 \n152: 152 \n153: 153 \n154: 154 \n155: 155 \n156: 156 \n157: 157 \n158: 158 \n159: 159 \n160: 160 \n161: 161 \n162: 162 \n163: 163 \n164: 164 \n165: 165 \n166: 166 \n167: 167 \n168: 168 \n169: 169 \n170: 170 \n171: 171 \n172: 172 \n173: 173 \n174: 174 \n175: 175 \n176: 176 \n177: 177 \n178: 178 \n179: 179 \n180: 180 \n181: 181 \n182: 182 \n183: 183 \n184: 184 \n185: 185 \n186: 186 \n187: 187 \n188: 188 \n189: 189 \n190: 190 \n191: 191 \n192: 192 \n193: 193 \n194: 194 \n195: 195 \n196: 196 \n197: 197 \n198: 198 \n199: 199 \n200: 200 \n201: 201 \n202: 202 \n203: 203 \n204: 204 \n205: 205 \n206: 206 \n207: 207 \n208: 208 \n209: 209 \n210: 210 \n211: 211 \n212: 212 \n213: 213 \n214: 214 \n215: 215 \n216: 216 \n217: 217 \n218: 218 \n219: 219 \n220: 220 \n221: 221 \n222: 222 \n223: 223 \n224: 224 \n225: 225 \n226: 226 \n227: 227 \n228: 228 \n229: 229 \n230: 230 \n231: 231 \n232: 232 \n233: 233 \n234: 234 \n235: 235 \n236: 236 \n237: 237 \n238: 238 \n239: 239 \n240: 240 \n241: 241 \n242: 242 \n243: 243 \n244: 244 \n245: 245 \n246: 246 \n247: 247 \n248: 248 \n249: 249 \n250: 250 \n251: 251 \n252: 252 \n253: 253 \n254: 254 \n255: 255 \n256: 256 \n257: 257 \n258: 258 \n259: 259 \n260: 260 \n261: 261 \n262: 262 \n263: 263 \n264: 264 \n265: 265 \n266: 266 \n267: 267 \n268: 268 \n269: 269 \n270: ABC\n271: ABC\n\n# This one's here because Perl does this differently and PCRE2 can't at present\n\n/(main(O)?)+/I\nCapture group count = 2\nFirst code unit = 'm'\nLast code unit = 'n'\nSubject length lower bound = 4\n    mainmain\n 0: mainmain\n 1: main\n    mainOmain\n 0: mainOmain\n 1: main\n 2: O\n\n# These are all cases where Perl does it differently (nested captures)\n\n/^(a(b)?)+$/I\nCapture group count = 2\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 1\n    aba\n 0: aba\n 1: a\n 2: b\n\n/^(aa(bb)?)+$/I\nCapture group count = 2\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbaa\n 0: aabbaa\n 1: aa\n 2: bb\n\n/^(aa|aa(bb))+$/I\nCapture group count = 2\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbaa\n 0: aabbaa\n 1: aa\n 2: bb\n\n/^(aa(bb)??)+$/I\nCapture group count = 2\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbaa\n 0: aabbaa\n 1: aa\n 2: bb\n\n/^(?:aa(bb)?)+$/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbaa\n 0: aabbaa\n 1: bb\n\n/^(aa(b(b))?)+$/I\nCapture group count = 3\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbaa\n 0: aabbaa\n 1: aa\n 2: bb\n 3: b\n\n/^(?:aa(b(b))?)+$/I\nCapture group count = 2\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbaa\n 0: aabbaa\n 1: bb\n 2: b\n\n/^(?:aa(b(?:b))?)+$/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbaa\n 0: aabbaa\n 1: bb\n\n/^(?:aa(bb(?:b))?)+$/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbbaa\n 0: aabbbaa\n 1: bbb\n\n/^(?:aa(b(?:bb))?)+$/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbbaa\n 0: aabbbaa\n 1: bbb\n\n/^(?:aa(?:b(b))?)+$/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbaa\n 0: aabbaa\n 1: b\n\n/^(?:aa(?:b(bb))?)+$/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbbaa\n 0: aabbbaa\n 1: bb\n\n/^(aa(b(bb))?)+$/I\nCapture group count = 3\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbbaa\n 0: aabbbaa\n 1: aa\n 2: bbb\n 3: bb\n\n/^(aa(bb(bb))?)+$/I\nCapture group count = 3\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n    aabbbbaa\n 0: aabbbbaa\n 1: aa\n 2: bbbb\n 3: bb\n\n# ----------------\n\n/#/IBx\n------------------------------------------------------------------\n        Bra\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nMay match empty string\nOptions: extended\nSubject length lower bound = 0\n\n/a#/IBx\n------------------------------------------------------------------\n        Bra\n        a\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: extended\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/[\\s]/IB\n------------------------------------------------------------------\n        Bra\n        [\\x09-\\x0d ]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20\nSubject length lower bound = 1\n\n/[\\S]/IB\n------------------------------------------------------------------\n        Bra\n        [^\\x09-\\x0d ]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x0e \\x0f\n  \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19 \\x1a \\x1b \\x1c \\x1d \\x1e\n  \\x1f ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C\n  D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c d e f g h\n  i j k l m n o p q r s t u v w x y z { | } ~ \\x7f \\x80 \\x81 \\x82 \\x83 \\x84\n  \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e \\x8f \\x90 \\x91 \\x92 \\x93\n  \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d \\x9e \\x9f \\xa0 \\xa1 \\xa2\n  \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac \\xad \\xae \\xaf \\xb0 \\xb1\n  \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb \\xbc \\xbd \\xbe \\xbf \\xc0\n  \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf\n  \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde\n  \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed\n  \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7 \\xf8 \\xf9 \\xfa \\xfb \\xfc\n  \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n/a(?i)b/IB\n------------------------------------------------------------------\n        Bra\n        a\n     /i b\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'b' (caseless)\nSubject length lower bound = 2\n    ab\n 0: ab\n    aB\n 0: aB\n\\= Expect no match\n    AB\nNo match\n\n/(a(?i)b)/IB\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n     /i b\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'b' (caseless)\nSubject length lower bound = 2\n    ab\n 0: ab\n 1: ab\n    aB\n 0: aB\n 1: aB\n\\= Expect no match\n    AB\nNo match\n\n/   (?i)abc/IBx\n------------------------------------------------------------------\n        Bra\n     /i abc\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: extended\nFirst code unit = 'a' (caseless)\nLast code unit = 'c' (caseless)\nSubject length lower bound = 3\n\n/#this is a comment\n  (?i)abc/IBx\n------------------------------------------------------------------\n        Bra\n     /i abc\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: extended\nFirst code unit = 'a' (caseless)\nLast code unit = 'c' (caseless)\nSubject length lower bound = 3\n\n/123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/IB\n------------------------------------------------------------------\n        Bra\n        123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = '1'\nLast code unit = '0'\nSubject length lower bound = 300\n\n/\\Q123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/IB\n------------------------------------------------------------------\n        Bra\n        123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = '1'\nLast code unit = '0'\nSubject length lower bound = 300\n\n/\\Q\\E/IB\n------------------------------------------------------------------\n        Bra\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n    \\\n 0: \n\n/\\Q\\Ex/IB\n------------------------------------------------------------------\n        Bra\n        x\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = 'x'\nSubject length lower bound = 1\n\n/ \\Q\\E/IB\n------------------------------------------------------------------\n        Bra\n         \n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = ' '\nSubject length lower bound = 1\n\n/a\\Q\\E/IB\n------------------------------------------------------------------\n        Bra\n        a\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = 'a'\nSubject length lower bound = 1\n  abc\n 0: a\n  bca\n 0: a\n  bac\n 0: a\n\n/a\\Q\\Eb/IB\n------------------------------------------------------------------\n        Bra\n        ab\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n  abc\n 0: ab\n\n/\\Q\\Eabc/IB\n------------------------------------------------------------------\n        Bra\n        abc\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/x*+\\w/IB\n------------------------------------------------------------------\n        Bra\n        x*+\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\\= Expect no match\n    xxxxx\nNo match\n\n/x?+/IB\n------------------------------------------------------------------\n        Bra\n        x?+\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n\n/x++/IB\n------------------------------------------------------------------\n        Bra\n        x++\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = 'x'\nSubject length lower bound = 1\n\n# For comparison with the following test, which disables auto-possessification\n# In this regex, x+ should be converted to x++\n/x+y/B,auto_possess\n------------------------------------------------------------------\n        Bra\n        x++\n        y\n        Ket\n        End\n------------------------------------------------------------------\n\n# In this regex, x+ should not be converted to x++\n/x+y/B,auto_possess_off\n------------------------------------------------------------------\n        Bra\n        x+\n        y\n        Ket\n        End\n------------------------------------------------------------------\n\n# Also in this regex, x+ should not be converted to x++\n/x+y/B,optimization_none\n------------------------------------------------------------------\n        Bra\n        x+\n        y\n        Ket\n        End\n------------------------------------------------------------------\n\n# In this one too, x+ should not be converted to x++\n/x+y/B,no_auto_possess\n------------------------------------------------------------------\n        Bra\n        x+\n        y\n        Ket\n        End\n------------------------------------------------------------------\n\n/x{1,3}+/B,no_auto_possess\n------------------------------------------------------------------\n        Bra\n        x\n        x{0,2}+\n        Ket\n        End\n------------------------------------------------------------------\n\n/x{1,3}+/Bi,no_auto_possess\n------------------------------------------------------------------\n        Bra\n     /i x\n     /i x{0,2}+\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^x]{1,3}+/B,no_auto_possess\n------------------------------------------------------------------\n        Bra\n        [^x] (not)\n        [^x]{0,2}+ (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^x]{1,3}+/Bi,no_auto_possess\n------------------------------------------------------------------\n        Bra\n     /i [^x] (not)\n     /i [^x]{0,2}+ (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/x{1,3}+/IB,auto_possess_off\n------------------------------------------------------------------\n        Bra\n        x\n        x{0,2}+\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptimizations: dotstar_anchor,start_optimize\nFirst code unit = 'x'\nSubject length lower bound = 1\n\n/(x)*+/IB\n------------------------------------------------------------------\n        Bra\n        Braposzero\n        CBraPos 1\n        x\n        KetRpos\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\n\n/^(\\w++|\\s++)*$/I\nCapture group count = 1\nMay match empty string\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 0\n    now is the time for all good men to come to the aid of the party\n 0: now is the time for all good men to come to the aid of the party\n 1: party\n\\= Expect no match\n    this is not a line with only words and spaces!\nNo match\n\n/(\\d++)(\\w)/I\nCapture group count = 2\nStarting code units: 0 1 2 3 4 5 6 7 8 9\nSubject length lower bound = 2\n    12345a\n 0: 12345a\n 1: 12345\n 2: a\n\\= Expect no match\n    12345+\nNo match\n\n/a++b/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    aaab\n 0: aaab\n\n/(a++b)/I\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    aaab\n 0: aaab\n 1: aaab\n\n/(a++)b/I\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    aaab\n 0: aaab\n 1: aaa\n\n/([^()]++|\\([^()]*\\))+/I\nCapture group count = 1\nStarting code units: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a\n  \\x0b \\x0c \\x0d \\x0e \\x0f \\x10 \\x11 \\x12 \\x13 \\x14 \\x15 \\x16 \\x17 \\x18 \\x19\n  \\x1a \\x1b \\x1c \\x1d \\x1e \\x1f \\x20 ! \" # $ % & ' ( * + , - . / 0 1 2 3 4 5\n  6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n  [ \\ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f\n  \\x80 \\x81 \\x82 \\x83 \\x84 \\x85 \\x86 \\x87 \\x88 \\x89 \\x8a \\x8b \\x8c \\x8d \\x8e\n  \\x8f \\x90 \\x91 \\x92 \\x93 \\x94 \\x95 \\x96 \\x97 \\x98 \\x99 \\x9a \\x9b \\x9c \\x9d\n  \\x9e \\x9f \\xa0 \\xa1 \\xa2 \\xa3 \\xa4 \\xa5 \\xa6 \\xa7 \\xa8 \\xa9 \\xaa \\xab \\xac\n  \\xad \\xae \\xaf \\xb0 \\xb1 \\xb2 \\xb3 \\xb4 \\xb5 \\xb6 \\xb7 \\xb8 \\xb9 \\xba \\xbb\n  \\xbc \\xbd \\xbe \\xbf \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca\n  \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd7 \\xd8 \\xd9\n  \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8\n  \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf7\n  \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n    ((abc(ade)ufh()()x\n 0: abc(ade)ufh()()x\n 1: x\n\n/\\(([^()]++|\\([^()]+\\))+\\)/I\nCapture group count = 1\nFirst code unit = '('\nLast code unit = ')'\nSubject length lower bound = 3\n    (abc)\n 0: (abc)\n 1: abc\n    (abc(def)xyz)\n 0: (abc(def)xyz)\n 1: xyz\n\\= Expect no match\n    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nNo match\n\n/(abc){1,3}+/IB\n------------------------------------------------------------------\n        Bra\n        Once\n        CBra 1\n        abc\n        Ket\n        Brazero\n        Bra\n        CBra 1\n        abc\n        Ket\n        Brazero\n        CBra 1\n        abc\n        Ket\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/a+?+/I\nFailed: error 109 at offset 4: quantifier does not follow a repeatable item\n        here: a+?+ |<--|\n\n/a{2,3}?+b/I\nFailed: error 109 at offset 8: quantifier does not follow a repeatable item\n        here: a{2,3}?+ |<--| b\n\n/(?U)a+?+/I\nFailed: error 109 at offset 8: quantifier does not follow a repeatable item\n        here: (?U)a+?+ |<--|\n\n/a{2,3}?+b/I,ungreedy\nFailed: error 109 at offset 8: quantifier does not follow a repeatable item\n        here: a{2,3}?+ |<--| b\n\n/x(?U)a++b/IB\n------------------------------------------------------------------\n        Bra\n        x\n        a++\n        b\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = 'x'\nLast code unit = 'b'\nSubject length lower bound = 3\n    xaaaab\n 0: xaaaab\n\n/(?U)xa++b/IB\n------------------------------------------------------------------\n        Bra\n        x\n        a++\n        b\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = 'x'\nLast code unit = 'b'\nSubject length lower bound = 3\n    xaaaab\n 0: xaaaab\n\n/^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        CBra 1\n        CBra 2\n        a+\n        Ket\n        CBra 3\n        [ab]+?\n        Ket\n        CBra 4\n        [bc]+\n        Ket\n        CBra 5\n        \\w*+\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 5\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 3\n\n/^x(?U)a+b/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        x\n        a++\n        b\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'x'\nLast code unit = 'b'\nSubject length lower bound = 3\n\n/^x(?U)(a+)b/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        x\n        CBra 1\n        a+?\n        Ket\n        b\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'x'\nLast code unit = 'b'\nSubject length lower bound = 3\n\n/[.x.]/I\nFailed: error 113 at offset 5: POSIX collating elements are not supported\n        here: [.x.] |<--|\n\n/[=x=]/I\nFailed: error 113 at offset 5: POSIX collating elements are not supported\n        here: [=x=] |<--|\n\n/[:x:]/I\nFailed: error 112 at offset 5: POSIX named classes are supported only within a class\n        here: [:x:] |<--|\n\n/\\F/I\nFailed: error 137 at offset 2: PCRE2 does not support \\F, \\L, \\l, \\N{name}, \\U, or \\u\n        here: \\F |<--|\n\n/\\l/I\nFailed: error 137 at offset 2: PCRE2 does not support \\F, \\L, \\l, \\N{name}, \\U, or \\u\n        here: \\l |<--|\n\n/\\L/I\nFailed: error 137 at offset 2: PCRE2 does not support \\F, \\L, \\l, \\N{name}, \\U, or \\u\n        here: \\L |<--|\n\n/\\N{name}/I\nFailed: error 137 at offset 3: PCRE2 does not support \\F, \\L, \\l, \\N{name}, \\U, or \\u\n        here: \\N{ |<--| name}\n\n/\\u/I\nFailed: error 137 at offset 2: PCRE2 does not support \\F, \\L, \\l, \\N{name}, \\U, or \\u\n        here: \\u |<--|\n\n/\\U/I\nFailed: error 137 at offset 2: PCRE2 does not support \\F, \\L, \\l, \\N{name}, \\U, or \\u\n        here: \\U |<--|\n\n/\\N{4}/\n    abcdefg\n 0: abcd\n\n/\\N{,}/\nFailed: error 137 at offset 3: PCRE2 does not support \\F, \\L, \\l, \\N{name}, \\U, or \\u\n        here: \\N{ |<--| ,}\n\n/\\N{25,ab}/\nFailed: error 137 at offset 3: PCRE2 does not support \\F, \\L, \\l, \\N{name}, \\U, or \\u\n        here: \\N{ |<--| 25,ab}\n\n/[\\N]/\nFailed: error 171 at offset 3: \\N is not supported in a class\n        here: [\\N |<--| ]\n\n/[\\N{4}]/\nFailed: error 137 at offset 4: PCRE2 does not support \\F, \\L, \\l, \\N{name}, \\U, or \\u\n        here: [\\N{ |<--| 4}]\n\n/[\\N{name}]/\nFailed: error 137 at offset 4: PCRE2 does not support \\F, \\L, \\l, \\N{name}, \\U, or \\u\n        here: [\\N{ |<--| name}]\n\n/a{1,3}b/ungreedy\n    ab\n 0: ab\n\n/[/I\nFailed: error 106 at offset 1: missing terminating ] for character class\n        here: [ |<--|\n\n/[a-/I\nFailed: error 106 at offset 3: missing terminating ] for character class\n        here: [a- |<--|\n\n/[[:space:]/I\nFailed: error 106 at offset 10: missing terminating ] for character class\n        here: [[:space:] |<--|\n\n/[\\s]/IB\n------------------------------------------------------------------\n        Bra\n        [\\x09-\\x0d ]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20\nSubject length lower bound = 1\n\n/[[:space:]]/IB\n------------------------------------------------------------------\n        Bra\n        [\\x09-\\x0d ]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20\nSubject length lower bound = 1\n\n/[[:space:]abcde]/IB\n------------------------------------------------------------------\n        Bra\n        [\\x09-\\x0d a-e]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 a b c d e\nSubject length lower bound = 1\n\n/< (?: (?(R) \\d++  | [^<>]*+) | (?R)) * >/Ix\nCapture group count = 0\nOptions: extended\nFirst code unit = '<'\nLast code unit = '>'\nSubject length lower bound = 2\n    <>\n 0: <>\n    <abcd>\n 0: <abcd>\n    <abc <123> hij>\n 0: <abc <123> hij>\n    <abc <def> hij>\n 0: <def>\n    <abc<>def>\n 0: <abc<>def>\n    <abc<>\n 0: <>\n\\= Expect no match\n    <abc\nNo match\n\n/8J\\$WE\\<\\.rX\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b/IB\n------------------------------------------------------------------\n        Bra\n        8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n        \\b\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nMax lookbehind = 1\nFirst code unit = '8'\nLast code unit = 'X'\nSubject length lower bound = 409\n\n/\\$\\<\\.X\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b/IB\n------------------------------------------------------------------\n        Bra\n        $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n        \\b\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nMax lookbehind = 1\nFirst code unit = '$'\nLast code unit = 'X'\nSubject length lower bound = 404\n\n/(.*)\\d+\\1/I\nCapture group count = 1\nMax back reference = 1\nSubject length lower bound = 1\n\n/(.*)\\d+/I\nCapture group count = 1\nFirst code unit at start or follows newline\nSubject length lower bound = 1\n\n/(.*)\\d+\\1/Is\nCapture group count = 1\nMax back reference = 1\nOptions: dotall\nSubject length lower bound = 1\n\n/(.*)\\d+/Is\nCapture group count = 1\nCompile options: dotall\nOverall options: anchored dotall\nSubject length lower bound = 1\n\n/(.*(xyz))\\d+\\2/I\nCapture group count = 2\nMax back reference = 2\nFirst code unit at start or follows newline\nLast code unit = 'z'\nSubject length lower bound = 7\n\n/((.*))\\d+\\1/I\nCapture group count = 2\nMax back reference = 1\nSubject length lower bound = 1\n    abc123bc\n 0: bc123bc\n 1: bc\n 2: bc\n\n/a[b]/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/(?=a).*/I\nCapture group count = 0\nMay match empty string\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/(?=abc).xyz/Ii\nCapture group count = 0\nOptions: caseless\nFirst code unit = 'a' (caseless)\nLast code unit = 'z' (caseless)\nSubject length lower bound = 4\n\n/(?=abc)(?i).xyz/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'z' (caseless)\nSubject length lower bound = 4\n\n/(?=a)(?=b)/I\nCapture group count = 0\nMay match empty string\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/(?=.)a/I\nCapture group count = 0\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/((?=abcda)a)/I\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'a'\nSubject length lower bound = 2\n\n/((?=abcda)ab)/I\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/()a/I\nCapture group count = 1\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/(?:(?=.)|(?<!x))a/I\nCapture group count = 0\nMax lookbehind = 1\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/(?(1)ab|ac)(.)/I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'a'\nSubject length lower bound = 3\n\n/(?(1)abz|acz)(.)/I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'a'\nLast code unit = 'z'\nSubject length lower bound = 4\n\n/(?(1)abz)(.)/I\nCapture group count = 1\nMax back reference = 1\nSubject length lower bound = 1\n\n/(?(1)abz)(1)23/I\nCapture group count = 1\nMax back reference = 1\nLast code unit = '3'\nSubject length lower bound = 3\n\n/(a)+/I\nCapture group count = 1\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/(a){2,3}/I\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'a'\nSubject length lower bound = 2\n\n/(a)*/I\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\n\n/[a]/I\nCapture group count = 0\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/[ab]/I\nCapture group count = 0\nStarting code units: a b\nSubject length lower bound = 1\n\n/[ab]/I\nCapture group count = 0\nStarting code units: a b\nSubject length lower bound = 1\n\n/[^a]/I\nCapture group count = 0\nSubject length lower bound = 1\n\n/\\d456/I\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9\nLast code unit = '6'\nSubject length lower bound = 4\n\n/\\d456/I\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9\nLast code unit = '6'\nSubject length lower bound = 4\n\n/a^b/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/^a/Im\nCapture group count = 0\nOptions: multiline\nFirst code unit at start or follows newline\nLast code unit = 'a'\nSubject length lower bound = 1\n  abcde\n 0: a\n  xy\\nabc\n 0: a\n\\= Expect no match\n  xyabc\nNo match\n\n/c|abc/I\nCapture group count = 0\nStarting code units: a c\nLast code unit = 'c'\nSubject length lower bound = 1\n\n/(?i)[ab]/I\nCapture group count = 0\nStarting code units: A B a b\nSubject length lower bound = 1\n\n/[ab](?i)cd/I\nCapture group count = 0\nStarting code units: a b\nLast code unit = 'd' (caseless)\nSubject length lower bound = 3\n\n/abc(?C)def/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'f'\nSubject length lower bound = 6\n    abcdef\n--->abcdef\n  0 ^  ^       d\n 0: abcdef\n    1234abcdef\n--->1234abcdef\n  0     ^  ^       d\n 0: abcdef\n\\= Expect no match\n    abcxyz\nNo match\n    abcxyzf\n--->abcxyzf\n  0 ^  ^        d\nNo match\n\n/abc(?C)de(?C1)f/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'f'\nSubject length lower bound = 6\n    123abcdef\n--->123abcdef\n  0    ^  ^       d\n  1    ^    ^     f\n 0: abcdef\n\n/(?C1)\\dabc(?C2)def/I\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9\nLast code unit = 'f'\nSubject length lower bound = 7\n    1234abcdef\n--->1234abcdef\n  1 ^              \\d\n  1  ^             \\d\n  1   ^            \\d\n  1    ^           \\d\n  2    ^   ^       d\n 0: 4abcdef\n\\= Expect no match\n    abcdef\nNo match\n\n/(?C1)\\dabc(?C2)def/I\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9\nLast code unit = 'f'\nSubject length lower bound = 7\n    1234abcdef\n--->1234abcdef\n  1 ^              \\d\n  1  ^             \\d\n  1   ^            \\d\n  1    ^           \\d\n  2    ^   ^       d\n 0: 4abcdef\n\\= Expect no match\n    abcdef\nNo match\n\n/(?C255)ab/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/(?C256)ab/I\nFailed: error 138 at offset 6: number after (?C is greater than 255\n        here: (?C256 |<--| )ab\n\n/(?Cab)xx/I\nFailed: error 182 at offset 4: unrecognized string delimiter follows (?C\n        here: (?Ca |<--| b)xx\n\n/(?C12vr)x/I\nFailed: error 139 at offset 5: closing parenthesis for (?C expected\n        here: (?C12 |<--| vr)x\n\n/abc(?C)def/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'f'\nSubject length lower bound = 6\n    \\x83\\x0\\x61bcdef\n--->\\x83\\x00abcdef\n  0         ^  ^       d\n 0: abcdef\n\n/(abc)(?C)de(?C1)f/I\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'f'\nSubject length lower bound = 6\n    123abcdef\n--->123abcdef\n  0    ^  ^       d\n  1    ^    ^     f\n 0: abcdef\n 1: abc\n    123abcdef\\=callout_capture\nCallout 0: last capture = 1\n 1: abc\n--->123abcdef\n       ^  ^       d\nCallout 1: last capture = 1\n 1: abc\n--->123abcdef\n       ^    ^     f\n 0: abcdef\n 1: abc\n    123abcdefC-\\=callout_none\n 0: abcdef\n 1: abc\n\\= Expect no match\n    123abcdef\\=callout_fail=1\n--->123abcdef\n  0    ^  ^       d\n  1    ^    ^     f\nNo match\n\n/(?C0)(abc(?C1))*/I\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\n    abcabcabc\n--->abcabcabc\n  0 ^             (\n  1 ^  ^          )*\n  1 ^     ^       )*\n  1 ^        ^    )*\n 0: abcabcabc\n 1: abc\n    abcabc\\=callout_fail=1:4\n--->abcabc\n  0 ^          (\n  1 ^  ^       )*\n  1 ^     ^    )*\n 0: abcabc\n 1: abc\n    abcabcabc\\=callout_fail=1:4\n--->abcabcabc\n  0 ^             (\n  1 ^  ^          )*\n  1 ^     ^       )*\n  1 ^        ^    )*\n 0: abcabc\n 1: abc\n\n/(\\d{3}(?C))*/I\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\n    123\\=callout_capture\nCallout 0: last capture = 0\n--->123\n    ^  ^    )*\n 0: 123\n 1: 123\n    123456\\=callout_capture\nCallout 0: last capture = 0\n--->123456\n    ^  ^       )*\nCallout 0: last capture = 1\n 1: 123\n--->123456\n    ^     ^    )*\n 0: 123456\n 1: 456\n    123456789\\=callout_capture\nCallout 0: last capture = 0\n--->123456789\n    ^  ^          )*\nCallout 0: last capture = 1\n 1: 123\n--->123456789\n    ^     ^       )*\nCallout 0: last capture = 1\n 1: 456\n--->123456789\n    ^        ^    )*\n 0: 123456789\n 1: 789\n\n/((xyz)(?C)p|(?C1)xyzabc)/I\nCapture group count = 2\nFirst code unit = 'x'\nSubject length lower bound = 4\n    xyzabc\\=callout_capture\nCallout 0: last capture = 2\n 1: <unset>\n 2: xyz\n--->xyzabc\n    ^  ^       p\nCallout 1: last capture = 0\n--->xyzabc\n    ^          x\n 0: xyzabc\n 1: xyzabc\n\n/(X)((xyz)(?C)p|(?C1)xyzabc)/I\nCapture group count = 3\nFirst code unit = 'X'\nLast code unit = 'x'\nSubject length lower bound = 5\n    Xxyzabc\\=callout_capture\nCallout 0: last capture = 3\n 1: X\n 2: <unset>\n 3: xyz\n--->Xxyzabc\n    ^   ^       p\nCallout 1: last capture = 1\n 1: X\n--->Xxyzabc\n    ^^          x\n 0: Xxyzabc\n 1: X\n 2: xyzabc\n\n/(?=(abc))(?C)abcdef/I\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'f'\nSubject length lower bound = 6\n    abcdef\\=callout_capture\nCallout 0: last capture = 1\n 1: abc\n--->abcdef\n    ^          a\n 0: abcdef\n 1: abc\n\n/(?!(abc)(?C1)d)(?C2)abcxyz/I\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'z'\nSubject length lower bound = 6\n    abcxyz\\=callout_capture\nCallout 1: last capture = 1\n 1: abc\n--->abcxyz\n    ^  ^       d\nCallout 2: last capture = 0\n--->abcxyz\n    ^          a\n 0: abcxyz\n\n/(?<=(abc)(?C))xyz/I\nCapture group count = 1\nMax lookbehind = 3\nFirst code unit = 'x'\nLast code unit = 'z'\nSubject length lower bound = 3\n   abcxyz\\=callout_capture\nCallout 0: last capture = 1\n 1: abc\n--->abcxyz\n       ^       )\n 0: xyz\n 1: abc\n\n/a(b+)(c*)(?C1)/I\nCapture group count = 2\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n\\= Expect no match\n    abbbbbccc\\=callout_data=1\n--->abbbbbccc\n  1 ^        ^    End of pattern\nCallout data = 1\nNo match\n\n/a(b+?)(c*?)(?C1)/I\nCapture group count = 2\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n\\= Expect no match\n    abbbbbccc\\=callout_data=1\n--->abbbbbccc\n  1 ^ ^           End of pattern\nCallout data = 1\n  1 ^  ^          End of pattern\nCallout data = 1\n  1 ^   ^         End of pattern\nCallout data = 1\n  1 ^    ^        End of pattern\nCallout data = 1\n  1 ^     ^       End of pattern\nCallout data = 1\n  1 ^      ^      End of pattern\nCallout data = 1\n  1 ^       ^     End of pattern\nCallout data = 1\n  1 ^        ^    End of pattern\nCallout data = 1\nNo match\n\n/(?C)abc/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/(?C)^abc/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 3\n\n/(?C)a|b/I\nCapture group count = 0\nStarting code units: a b\nSubject length lower bound = 1\n\n/a|(b)(?C)/I\nCapture group count = 1\nStarting code units: a b\nSubject length lower bound = 1\n    b\n--->b\n  0 ^^    End of pattern\n 0: b\n 1: b\n\n/x(ab|(bc|(de|(?R))))/I\nCapture group count = 3\nFirst code unit = 'x'\nSubject length lower bound = 3\n    xab\n 0: xab\n 1: ab\n    xbc\n 0: xbc\n 1: bc\n 2: bc\n    xde\n 0: xde\n 1: de\n 2: de\n 3: de\n    xxab\n 0: xxab\n 1: xab\n 2: xab\n 3: xab\n    xxxab\n 0: xxxab\n 1: xxab\n 2: xxab\n 3: xxab\n\\= Expect no match\n    xyab\nNo match\n\n/^([^()]|\\((?1)*\\))*$/I\nCapture group count = 1\nMay match empty string\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 0\n    abc\n 0: abc\n 1: c\n    a(b)c\n 0: a(b)c\n 1: c\n    a(b(c))d\n 0: a(b(c))d\n 1: d\n\\= Expect no match)\n    a(b(c)d\nNo match\n\n/^>abc>([^()]|\\((?1)*\\))*<xyz<$/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = '>'\nLast code unit = '<'\nSubject length lower bound = 10\n   >abc>123<xyz<\n 0: >abc>123<xyz<\n 1: 3\n   >abc>1(2)3<xyz<\n 0: >abc>1(2)3<xyz<\n 1: 3\n   >abc>(1(2)3)<xyz<\n 0: >abc>(1(2)3)<xyz<\n 1: (1(2)3)\n\n/(a(?1)b)/IB\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Recurse\n        b\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/(a(?1)+b)/IB\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        SBra\n        Recurse\n        KetRmax\n        b\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$/I\nCapture group count = 2\nCompile options: <none>\nOverall options: anchored\nStarting code units: ( - 0 1 2 3 4 5 6 7 8 9\nSubject length lower bound = 1\n    12\n 0: 12\n 1: 12\n    (((2+2)*-3)-7)\n 0: (((2+2)*-3)-7)\n 1: (((2+2)*-3)-7)\n 2: -\n    -12\n 0: -12\n 1: -12\n\\= Expect no match\n    ((2+2)*-3)-7)\nNo match\n\n/^(x(y|(?1){2})z)/I\nCapture group count = 2\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'x'\nSubject length lower bound = 3\n    xyz\n 0: xyz\n 1: xyz\n 2: y\n    xxyzxyzz\n 0: xxyzxyzz\n 1: xxyzxyzz\n 2: xyzxyz\n\\= Expect no match\n    xxyzz\nNo match\n    xxyzxyzxyzz\nNo match\n\n/((< (?: (?(R) \\d++  | [^<>]*+) | (?2)) * >))/Ix\nCapture group count = 2\nOptions: extended\nFirst code unit = '<'\nLast code unit = '>'\nSubject length lower bound = 2\n    <>\n 0: <>\n 1: <>\n 2: <>\n    <abcd>\n 0: <abcd>\n 1: <abcd>\n 2: <abcd>\n    <abc <123> hij>\n 0: <abc <123> hij>\n 1: <abc <123> hij>\n 2: <abc <123> hij>\n    <abc <def> hij>\n 0: <def>\n 1: <def>\n 2: <def>\n    <abc<>def>\n 0: <abc<>def>\n 1: <abc<>def>\n 2: <abc<>def>\n    <abc<>\n 0: <>\n 1: <>\n 2: <>\n\\= Expect no match\n    <abc\nNo match\n\n/(?1)/I\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: (?1 |<-->| )\n\n/((?2)(abc)/I\nFailed: error 114 at offset 10: missing closing parenthesis\n        here: ((?2)(abc) |<--|\n\n/^(abc)def(?1)/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 9\n    abcdefabc\n 0: abcdefabc\n 1: abc\n\n/^(a|b|c)=(?1)+/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nStarting code units: a b c\nSubject length lower bound = 2\n    a=a\n 0: a=a\n 1: a\n    a=b\n 0: a=b\n 1: a\n    a=bc\n 0: a=bc\n 1: a\n\n/^(a|b|c)=((?1))+/I\nCapture group count = 2\nCompile options: <none>\nOverall options: anchored\nStarting code units: a b c\nSubject length lower bound = 2\n    a=a\n 0: a=a\n 1: a\n 2: a\n    a=b\n 0: a=b\n 1: a\n 2: b\n    a=bc\n 0: a=bc\n 1: a\n 2: c\n\n/a(?P<name1>b|c)d(?P<longername2>e)/IB\n------------------------------------------------------------------\n        Bra\n        a\n        CBra 1\n        b\n        Alt\n        c\n        Ket\n        d\n        CBra 2\n        e\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 2\nNamed capture groups:\n  longername2   2\n  name1         1\nFirst code unit = 'a'\nLast code unit = 'e'\nSubject length lower bound = 4\n    abde\n 0: abde\n 1: b\n 2: e\n    acde\n 0: acde\n 1: c\n 2: e\n\n/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/IB\n------------------------------------------------------------------\n        Bra\n        Bra\n        a\n        CBra 1\n        c\n        CBra 2\n        d\n        Ket\n        Ket\n        Ket\n        CBra 3\n        a\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 3\nNamed capture groups:\n  a   3\n  c   1\n  d   2\nFirst code unit = 'a'\nLast code unit = 'a'\nSubject length lower bound = 4\n\n/(?P<a>a)...(?P=a)bbb(?P>a)d/IB\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Any\n        Any\n        Any\n        \\g{1}\n        bbb\n        Recurse\n        d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nNamed capture groups:\n  a   1\nFirst code unit = 'a'\nLast code unit = 'd'\nSubject length lower bound = 10\n\n/^\\W*(?:(?P<one>(?P<two>.)\\W*(?P>one)\\W*(?P=two)|)|(?P<three>(?P<four>.)\\W*(?P>three)\\W*(?P=four)|\\W*.\\W*))\\W*$/Ii\nCapture group count = 4\nMax back reference = 4\nNamed capture groups:\n  four    4\n  one     1\n  three   3\n  two     2\nMay match empty string\nCompile options: caseless\nOverall options: anchored caseless\nSubject length lower bound = 0\n    1221\n 0: 1221\n 1: 1221\n 2: 1\n    Satan, oscillate my metallic sonatas!\n 0: Satan, oscillate my metallic sonatas!\n 1: <unset>\n 2: <unset>\n 3: Satan, oscillate my metallic sonatas\n 4: S\n    A man, a plan, a canal: Panama!\n 0: A man, a plan, a canal: Panama!\n 1: <unset>\n 2: <unset>\n 3: A man, a plan, a canal: Panama\n 4: A\n    Able was I ere I saw Elba.\n 0: Able was I ere I saw Elba.\n 1: <unset>\n 2: <unset>\n 3: Able was I ere I saw Elba\n 4: A\n\\= Expect no match\n    The quick brown fox\nNo match\n\n/((?(R)a|b))\\1(?1)?/I\nCapture group count = 1\nMax back reference = 1\nSubject length lower bound = 2\n  bb\n 0: bb\n 1: b\n  bbaa\n 0: bba\n 1: b\n\n/(.*)a/Is\nCapture group count = 1\nCompile options: dotall\nOverall options: anchored dotall\nLast code unit = 'a'\nSubject length lower bound = 1\n\n/(.*)a\\1/Is\nCapture group count = 1\nMax back reference = 1\nOptions: dotall\nLast code unit = 'a'\nSubject length lower bound = 1\n\n/(.*)a(b)\\2/Is\nCapture group count = 2\nMax back reference = 2\nCompile options: dotall\nOverall options: anchored dotall\nLast code unit = 'b'\nSubject length lower bound = 3\n\n/((.*)a|(.*)b)z/Is\nCapture group count = 3\nCompile options: dotall\nOverall options: anchored dotall\nLast code unit = 'z'\nSubject length lower bound = 2\n\n/((.*)a|(.*)b)z\\1/Is\nCapture group count = 3\nMax back reference = 1\nOptions: dotall\nLast code unit = 'z'\nSubject length lower bound = 3\n\n/((.*)a|(.*)b)z\\2/Is\nCapture group count = 3\nMax back reference = 2\nOptions: dotall\nLast code unit = 'z'\nSubject length lower bound = 2\n\n/((.*)a|(.*)b)z\\3/Is\nCapture group count = 3\nMax back reference = 3\nOptions: dotall\nLast code unit = 'z'\nSubject length lower bound = 2\n\n/((.*)a|^(.*)b)z\\3/Is\nCapture group count = 3\nMax back reference = 3\nCompile options: dotall\nOverall options: anchored dotall\nLast code unit = 'z'\nSubject length lower bound = 2\n\n/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a/Is\nCapture group count = 31\nMay match empty string\nCompile options: dotall\nOverall options: anchored dotall\nSubject length lower bound = 0\n\n/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a\\31/Is\nCapture group count = 31\nMax back reference = 31\nMay match empty string\nOptions: dotall\nSubject length lower bound = 0\n\n/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a\\32/Is\nCapture group count = 32\nMax back reference = 32\nMay match empty string\nOptions: dotall\nSubject length lower bound = 0\n\n/(a)(bc)/IB,no_auto_capture\n------------------------------------------------------------------\n        Bra\n        Bra\n        a\n        Ket\n        Bra\n        bc\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: no_auto_capture\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n  abc\n 0: abc\n\n/(?P<one>a)(bc)/IB,no_auto_capture\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Bra\n        bc\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nNamed capture groups:\n  one   1\nOptions: no_auto_capture\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n  abc\n 0: abc\n 1: a\n\n/(a)(?P<named>bc)/IB,no_auto_capture\n------------------------------------------------------------------\n        Bra\n        Bra\n        a\n        Ket\n        CBra 1\n        bc\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nNamed capture groups:\n  named   1\nOptions: no_auto_capture\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/(aaa(?C1)bbb|ab)/I\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n   aaabbb\n--->aaabbb\n  1 ^  ^       b\n 0: aaabbb\n 1: aaabbb\n   aaabbb\\=callout_data=0\n--->aaabbb\n  1 ^  ^       b\n 0: aaabbb\n 1: aaabbb\n   aaabbb\\=callout_data=1\n--->aaabbb\n  1 ^  ^       b\nCallout data = 1\n 0: ab\n 1: ab\n\\= Expect no match\n   aaabbb\\=callout_data=-1\n--->aaabbb\n  1 ^  ^       b\nCallout data = -1\nNo match\n\n/ab(?P<one>cd)ef(?P<two>gh)/I\nCapture group count = 2\nNamed capture groups:\n  one   1\n  two   2\nFirst code unit = 'a'\nLast code unit = 'h'\nSubject length lower bound = 8\n    abcdefgh\n 0: abcdefgh\n 1: cd\n 2: gh\n    abcdefgh\\=copy=1,get=two\n 0: abcdefgh\n 1: cd\n 2: gh\n 1C cd (2)\n  G gh (2) two (group 2)\n    abcdefgh\\=copy=one,copy=two\n 0: abcdefgh\n 1: cd\n 2: gh\n  C cd (2) one (group 1)\n  C gh (2) two (group 2)\n    abcdefgh\\=copy=three\n 0: abcdefgh\n 1: cd\n 2: gh\nNumber not found for group \"three\"\nCopy substring \"three\" failed (-49): unknown substring\nGet substring \"three\" length failed (-49): unknown substring\n\n/(?P<Tes>)(?P<Test>)/IB\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Ket\n        CBra 2\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 2\nNamed capture groups:\n  Tes    1\n  Test   2\nMay match empty string\nSubject length lower bound = 0\n\n/(?P<Test>)(?P<Tes>)/IB\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Ket\n        CBra 2\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 2\nNamed capture groups:\n  Tes    2\n  Test   1\nMay match empty string\nSubject length lower bound = 0\n\n/(?P<Z>zz)(?P<A>aa)/I\nCapture group count = 2\nNamed capture groups:\n  A   2\n  Z   1\nFirst code unit = 'z'\nLast code unit = 'a'\nSubject length lower bound = 4\n    zzaa\\=copy=Z\n 0: zzaa\n 1: zz\n 2: aa\n  C zz (2) Z (group 1)\n    zzaa\\=copy=A\n 0: zzaa\n 1: zz\n 2: aa\n  C aa (2) A (group 2)\n\n/(?P<x>eks)(?P<x>eccs)/I\nFailed: error 143 at offset 16: two named subpatterns have the same name (PCRE2_DUPNAMES not set)\n        here: ...eks)(?P<x> |<--| eccs)\n\n/(?P<abc>abc(?P<def>def)(?P<abc>xyz))/I\nFailed: error 143 at offset 31: two named subpatterns have the same name (PCRE2_DUPNAMES not set)\n        here: ...f)(?P<abc> |<--| xyz))\n\n\"\\[((?P<elem>\\d+)(,(?P>elem))*)\\]\"I\nCapture group count = 3\nNamed capture groups:\n  elem   2\nFirst code unit = '['\nLast code unit = ']'\nSubject length lower bound = 3\n    [10,20,30,5,5,4,4,2,43,23,4234]\n 0: [10,20,30,5,5,4,4,2,43,23,4234]\n 1: 10,20,30,5,5,4,4,2,43,23,4234\n 2: 10\n 3: ,4234\n\\= Expect no match\n    []\nNo match\n\n\"\\[((?P<elem>\\d+)(,(?P>elem))*)?\\]\"I\nCapture group count = 3\nNamed capture groups:\n  elem   2\nFirst code unit = '['\nLast code unit = ']'\nSubject length lower bound = 2\n    [10,20,30,5,5,4,4,2,43,23,4234]\n 0: [10,20,30,5,5,4,4,2,43,23,4234]\n 1: 10,20,30,5,5,4,4,2,43,23,4234\n 2: 10\n 3: ,4234\n    []\n 0: []\n\n/(a(b(?2)c))?/IB\n------------------------------------------------------------------\n        Bra\n        Brazero\n        CBra 1\n        a\n        CBra 2\n        b\n        Recurse\n        c\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 2\nMay match empty string\nSubject length lower bound = 0\n\n/(a(b(?2)c))*/IB\n------------------------------------------------------------------\n        Bra\n        Brazero\n        CBra 1\n        a\n        CBra 2\n        b\n        Recurse\n        c\n        Ket\n        KetRmax\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 2\nMay match empty string\nSubject length lower bound = 0\n\n/(a(b(?2)c)){0,2}/IB\n------------------------------------------------------------------\n        Bra\n        Brazero\n        Bra\n        CBra 1\n        a\n        CBra 2\n        b\n        Recurse\n        c\n        Ket\n        Ket\n        Brazero\n        CBra 1\n        a\n        CBra 2\n        b\n        Recurse\n        c\n        Ket\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 2\nMay match empty string\nSubject length lower bound = 0\n\n/[ab]{1}+/B\n------------------------------------------------------------------\n        Bra\n        [ab]\n        Ket\n        End\n------------------------------------------------------------------\n\n/()(?1){1}/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Ket\n        Recurse\n        Ket\n        End\n------------------------------------------------------------------\n\n/()(?1)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Ket\n        Recurse\n        Ket\n        End\n------------------------------------------------------------------\n\n/((w\\/|-|with)*(free|immediate)*.*?shipping\\s*[!.-]*)/Ii\nCapture group count = 3\nOptions: caseless\nLast code unit = 'g' (caseless)\nSubject length lower bound = 8\n     Baby Bjorn Active Carrier - With free SHIPPING!!\n 0: Baby Bjorn Active Carrier - With free SHIPPING!!\n 1: Baby Bjorn Active Carrier - With free SHIPPING!!\n\n/((w\\/|-|with)*(free|immediate)*.*?shipping\\s*[!.-]*)/Ii\nCapture group count = 3\nOptions: caseless\nLast code unit = 'g' (caseless)\nSubject length lower bound = 8\n     Baby Bjorn Active Carrier - With free SHIPPING!!\n 0: Baby Bjorn Active Carrier - With free SHIPPING!!\n 1: Baby Bjorn Active Carrier - With free SHIPPING!!\n\n/a*.*b/IB\n------------------------------------------------------------------\n        Bra\n        a*\n        Any*\n        b\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nLast code unit = 'b'\nSubject length lower bound = 1\n\n/(a|b)*.?c/IB\n------------------------------------------------------------------\n        Bra\n        Brazero\n        CBra 1\n        a\n        Alt\n        b\n        KetRmax\n        Any?\n        c\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nLast code unit = 'c'\nSubject length lower bound = 1\n\n/abc(?C255)de(?C)f/IB\n------------------------------------------------------------------\n        Bra\n        abc\n        Callout 255 10 1\n        de\n        Callout 0 16 1\n        f\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'f'\nSubject length lower bound = 6\n\n/abcde/IB,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 1\n        a\n        Callout 255 1 1\n        b\n        Callout 255 2 1\n        c\n        Callout 255 3 1\n        d\n        Callout 255 4 1\n        e\n        Callout 255 5 0\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: auto_callout\nFirst code unit = 'a'\nLast code unit = 'e'\nSubject length lower bound = 5\n  abcde\n--->abcde\n +0 ^         a\n +1 ^^        b\n +2 ^ ^       c\n +3 ^  ^      d\n +4 ^   ^     e\n +5 ^    ^    End of pattern\n 0: abcde\n\\= Expect no match\n  abcdfe\n--->abcdfe\n +0 ^          a\n +1 ^^         b\n +2 ^ ^        c\n +3 ^  ^       d\n +4 ^   ^      e\nNo match\n\n/a*b/IB,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 2\n        a*+\n        Callout 255 2 1\n        b\n        Callout 255 3 0\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: auto_callout\nStarting code units: a b\nLast code unit = 'b'\nSubject length lower bound = 1\n  ab\n--->ab\n +0 ^      a*\n +2 ^^     b\n +3 ^ ^    End of pattern\n 0: ab\n  aaaab\n--->aaaab\n +0 ^         a*\n +2 ^   ^     b\n +3 ^    ^    End of pattern\n 0: aaaab\n  aaaacb\n--->aaaacb\n +0 ^          a*\n +2 ^   ^      b\n +0  ^         a*\n +2  ^  ^      b\n +0   ^        a*\n +2   ^ ^      b\n +0    ^       a*\n +2    ^^      b\n +0      ^     a*\n +2      ^     b\n +3      ^^    End of pattern\n 0: b\n\n/a*b/IB,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 2\n        a*+\n        Callout 255 2 1\n        b\n        Callout 255 3 0\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: auto_callout\nStarting code units: a b\nLast code unit = 'b'\nSubject length lower bound = 1\n  ab\n--->ab\n +0 ^      a*\n +2 ^^     b\n +3 ^ ^    End of pattern\n 0: ab\n  aaaab\n--->aaaab\n +0 ^         a*\n +2 ^   ^     b\n +3 ^    ^    End of pattern\n 0: aaaab\n  aaaacb\n--->aaaacb\n +0 ^          a*\n +2 ^   ^      b\n +0  ^         a*\n +2  ^  ^      b\n +0   ^        a*\n +2   ^ ^      b\n +0    ^       a*\n +2    ^^      b\n +0      ^     a*\n +2      ^     b\n +3      ^^    End of pattern\n 0: b\n\n/a+b/IB,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 2\n        a++\n        Callout 255 2 1\n        b\n        Callout 255 3 0\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: auto_callout\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n  ab\n--->ab\n +0 ^      a+\n +2 ^^     b\n +3 ^ ^    End of pattern\n 0: ab\n  aaaab\n--->aaaab\n +0 ^         a+\n +2 ^   ^     b\n +3 ^    ^    End of pattern\n 0: aaaab\n\\= Expect no match\n  aaaacb\n--->aaaacb\n +0 ^          a+\n +2 ^   ^      b\n +0  ^         a+\n +2  ^  ^      b\n +0   ^        a+\n +2   ^ ^      b\n +0    ^       a+\n +2    ^^      b\nNo match\n\n/(abc|def)x/IB,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 1\n        CBra 1\n        Callout 255 1 1\n        a\n        Callout 255 2 1\n        b\n        Callout 255 3 1\n        c\n        Callout 255 4 1\n        Alt\n        Callout 255 5 1\n        d\n        Callout 255 6 1\n        e\n        Callout 255 7 1\n        f\n        Callout 255 8 1\n        Ket\n        Callout 255 9 1\n        x\n        Callout 255 10 0\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: auto_callout\nStarting code units: a d\nLast code unit = 'x'\nSubject length lower bound = 4\n  abcx\n--->abcx\n +0 ^        (\n +1 ^        a\n +2 ^^       b\n +3 ^ ^      c\n +4 ^  ^     |\n +9 ^  ^     x\n+10 ^   ^    End of pattern\n 0: abcx\n 1: abc\n  defx\n--->defx\n +0 ^        (\n +1 ^        a\n +5 ^        d\n +6 ^^       e\n +7 ^ ^      f\n +8 ^  ^     )\n +9 ^  ^     x\n+10 ^   ^    End of pattern\n 0: defx\n 1: def\n\\= Expect no match\n  abcdefzx\n--->abcdefzx\n +0 ^            (\n +1 ^            a\n +2 ^^           b\n +3 ^ ^          c\n +4 ^  ^         |\n +9 ^  ^         x\n +5 ^            d\n +0    ^         (\n +1    ^         a\n +5    ^         d\n +6    ^^        e\n +7    ^ ^       f\n +8    ^  ^      )\n +9    ^  ^      x\nNo match\n\n/(abc|def)x/IB,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 1\n        CBra 1\n        Callout 255 1 1\n        a\n        Callout 255 2 1\n        b\n        Callout 255 3 1\n        c\n        Callout 255 4 1\n        Alt\n        Callout 255 5 1\n        d\n        Callout 255 6 1\n        e\n        Callout 255 7 1\n        f\n        Callout 255 8 1\n        Ket\n        Callout 255 9 1\n        x\n        Callout 255 10 0\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: auto_callout\nStarting code units: a d\nLast code unit = 'x'\nSubject length lower bound = 4\n  abcx\n--->abcx\n +0 ^        (\n +1 ^        a\n +2 ^^       b\n +3 ^ ^      c\n +4 ^  ^     |\n +9 ^  ^     x\n+10 ^   ^    End of pattern\n 0: abcx\n 1: abc\n  defx\n--->defx\n +0 ^        (\n +1 ^        a\n +5 ^        d\n +6 ^^       e\n +7 ^ ^      f\n +8 ^  ^     )\n +9 ^  ^     x\n+10 ^   ^    End of pattern\n 0: defx\n 1: def\n\\= Expect no match\n  abcdefzx\n--->abcdefzx\n +0 ^            (\n +1 ^            a\n +2 ^^           b\n +3 ^ ^          c\n +4 ^  ^         |\n +9 ^  ^         x\n +5 ^            d\n +0    ^         (\n +1    ^         a\n +5    ^         d\n +6    ^^        e\n +7    ^ ^       f\n +8    ^  ^      )\n +9    ^  ^      x\nNo match\n\n/(ab|cd){3,4}/I,auto_callout\nCapture group count = 1\nOptions: auto_callout\nStarting code units: a c\nSubject length lower bound = 6\n  ababab\n--->ababab\n +0 ^          (\n +1 ^          a\n +2 ^^         b\n +3 ^ ^        |\n +1 ^ ^        a\n +2 ^  ^       b\n +3 ^   ^      |\n +1 ^   ^      a\n +2 ^    ^     b\n +3 ^     ^    |\n +1 ^     ^    a\n +4 ^     ^    c\n+12 ^     ^    End of pattern\n 0: ababab\n 1: ab\n  abcdabcd\n--->abcdabcd\n +0 ^            (\n +1 ^            a\n +2 ^^           b\n +3 ^ ^          |\n +1 ^ ^          a\n +4 ^ ^          c\n +5 ^  ^         d\n +6 ^   ^        ){3,4}\n +1 ^   ^        a\n +2 ^    ^       b\n +3 ^     ^      |\n +1 ^     ^      a\n +4 ^     ^      c\n +5 ^      ^     d\n +6 ^       ^    ){3,4}\n+12 ^       ^    End of pattern\n 0: abcdabcd\n 1: cd\n  abcdcdcdcdcd\n--->abcdcdcdcdcd\n +0 ^                (\n +1 ^                a\n +2 ^^               b\n +3 ^ ^              |\n +1 ^ ^              a\n +4 ^ ^              c\n +5 ^  ^             d\n +6 ^   ^            ){3,4}\n +1 ^   ^            a\n +4 ^   ^            c\n +5 ^    ^           d\n +6 ^     ^          ){3,4}\n +1 ^     ^          a\n +4 ^     ^          c\n +5 ^      ^         d\n +6 ^       ^        ){3,4}\n+12 ^       ^        End of pattern\n 0: abcdcdcd\n 1: cd\n\n/([ab]{,}c|xy)/IB,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 1\n        CBra 1\n        Callout 255 1 4\n        [ab]\n        Callout 255 5 1\n        {\n        Callout 255 6 1\n        ,\n        Callout 255 7 1\n        }\n        Callout 255 8 1\n        c\n        Callout 255 9 1\n        Alt\n        Callout 255 10 1\n        x\n        Callout 255 11 1\n        y\n        Callout 255 12 1\n        Ket\n        Callout 255 13 0\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: auto_callout\nStarting code units: a b x\nSubject length lower bound = 2\n\\= Expect no match\n    Note: that {,} does NOT introduce a quantifier\n--->Note: that {,} does NOT introduce a quantifier\n +0         ^                                          (\n +1         ^                                          [ab]\n +5         ^^                                         {\n+10         ^                                          x\n +0                                   ^                (\n +1                                   ^                [ab]\n +5                                   ^^               {\n+10                                   ^                x\n +0                                       ^            (\n +1                                       ^            [ab]\n +5                                       ^^           {\n+10                                       ^            x\nNo match\n\n/([ab]{,}c|xy)/IB,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 1\n        CBra 1\n        Callout 255 1 4\n        [ab]\n        Callout 255 5 1\n        {\n        Callout 255 6 1\n        ,\n        Callout 255 7 1\n        }\n        Callout 255 8 1\n        c\n        Callout 255 9 1\n        Alt\n        Callout 255 10 1\n        x\n        Callout 255 11 1\n        y\n        Callout 255 12 1\n        Ket\n        Callout 255 13 0\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: auto_callout\nStarting code units: a b x\nSubject length lower bound = 2\n\\= Expect no match\n    Note: that {,} does NOT introduce a quantifier\n--->Note: that {,} does NOT introduce a quantifier\n +0         ^                                          (\n +1         ^                                          [ab]\n +5         ^^                                         {\n+10         ^                                          x\n +0                                   ^                (\n +1                                   ^                [ab]\n +5                                   ^^               {\n+10                                   ^                x\n +0                                       ^            (\n +1                                       ^            [ab]\n +5                                       ^^           {\n+10                                       ^            x\nNo match\n\n/([ab]{1,4}c|xy){4,5}?123/IB,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 1\n        CBra 1\n        Callout 255 1 9\n        [ab]{1,4}+\n        Callout 255 10 1\n        c\n        Callout 255 11 1\n        Alt\n        Callout 255 12 1\n        x\n        Callout 255 13 1\n        y\n        Callout 255 14 7\n        Ket\n        CBra 1\n        Callout 255 1 9\n        [ab]{1,4}+\n        Callout 255 10 1\n        c\n        Callout 255 11 1\n        Alt\n        Callout 255 12 1\n        x\n        Callout 255 13 1\n        y\n        Callout 255 14 7\n        Ket\n        CBra 1\n        Callout 255 1 9\n        [ab]{1,4}+\n        Callout 255 10 1\n        c\n        Callout 255 11 1\n        Alt\n        Callout 255 12 1\n        x\n        Callout 255 13 1\n        y\n        Callout 255 14 7\n        Ket\n        CBra 1\n        Callout 255 1 9\n        [ab]{1,4}+\n        Callout 255 10 1\n        c\n        Callout 255 11 1\n        Alt\n        Callout 255 12 1\n        x\n        Callout 255 13 1\n        y\n        Callout 255 14 7\n        Ket\n        Braminzero\n        CBra 1\n        Callout 255 1 9\n        [ab]{1,4}+\n        Callout 255 10 1\n        c\n        Callout 255 11 1\n        Alt\n        Callout 255 12 1\n        x\n        Callout 255 13 1\n        y\n        Callout 255 14 7\n        Ket\n        Callout 255 21 1\n        1\n        Callout 255 22 1\n        2\n        Callout 255 23 1\n        3\n        Callout 255 24 0\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: auto_callout\nStarting code units: a b x\nLast code unit = '3'\nSubject length lower bound = 11\n    aacaacaacaacaac123\n--->aacaacaacaacaac123\n +0 ^                      (\n +1 ^                      [ab]{1,4}\n+10 ^ ^                    c\n+11 ^  ^                   |\n +1 ^  ^                   [ab]{1,4}\n+10 ^    ^                 c\n+11 ^     ^                |\n +1 ^     ^                [ab]{1,4}\n+10 ^       ^              c\n+11 ^        ^             |\n +1 ^        ^             [ab]{1,4}\n+10 ^          ^           c\n+11 ^           ^          |\n+21 ^           ^          1\n +1 ^           ^          [ab]{1,4}\n+10 ^             ^        c\n+11 ^              ^       |\n+21 ^              ^       1\n+22 ^               ^      2\n+23 ^                ^     3\n+24 ^                 ^    End of pattern\n 0: aacaacaacaacaac123\n 1: aac\n\n/\\b.*/I\nCapture group count = 0\nMax lookbehind = 1\nMay match empty string\nSubject length lower bound = 0\n  ab cd\\=offset=1\n 0:  cd\n\n/\\b.*/Is\nCapture group count = 0\nMax lookbehind = 1\nMay match empty string\nOptions: dotall\nSubject length lower bound = 0\n  ab cd\\=startoffset=1\n 0:  cd\n\n/(?!.bcd).*/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n  Xbcd12345\n 0: bcd12345\n\n/abcde/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'e'\nSubject length lower bound = 5\n    ab\\=ps\nPartial match: ab\n    abc\\=ps\nPartial match: abc\n    abcd\\=ps\nPartial match: abcd\n    abcde\\=ps\n 0: abcde\n    the quick brown abc\\=ps\nPartial match: abc\n\\= Expect no match\\=ps\n    the quick brown abxyz fox\\=ps\nNo match\n\n\"^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/(20)?\\d\\d$\"I\nCapture group count = 3\nCompile options: <none>\nOverall options: anchored\nStarting code units: 0 1 2 3 4 5 6 7 8 9\nLast code unit = '/'\nSubject length lower bound = 6\n    13/05/04\\=ps\n 0: 13/05/04\n 1: 13\n 2: 05\n    13/5/2004\\=ps\n 0: 13/5/2004\n 1: 13\n 2: 5\n 3: 20\n    02/05/09\\=ps\n 0: 02/05/09\n 1: 02\n 2: 05\n    1\\=ps\nPartial match: 1\n    1/2\\=ps\nPartial match: 1/2\n    1/2/0\\=ps\nPartial match: 1/2/0\n    1/2/04\\=ps\n 0: 1/2/04\n 1: 1\n 2: 2\n    0\\=ps\nPartial match: 0\n    02/\\=ps\nPartial match: 02/\n    02/0\\=ps\nPartial match: 02/0\n    02/1\\=ps\nPartial match: 02/1\n\\= Expect no match\\=ps\n    \\=ps\nNo match\n    123\\=ps\nNo match\n    33/4/04\\=ps\nNo match\n    3/13/04\\=ps\nNo match\n    0/1/2003\\=ps\nNo match\n    0/\\=ps\nNo match\n    02/0/\\=ps\nNo match\n    02/13\\=ps\nNo match\n\n/0{0,2}ABC/I\nCapture group count = 0\nStarting code units: 0 A\nLast code unit = 'C'\nSubject length lower bound = 3\n\n/\\d{3,}ABC/I\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9\nLast code unit = 'C'\nSubject length lower bound = 6\n\n/\\d*ABC/I\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A\nLast code unit = 'C'\nSubject length lower bound = 3\n\n/[abc]+DE/I\nCapture group count = 0\nStarting code units: a b c\nLast code unit = 'E'\nSubject length lower bound = 3\n\n/[abc]?123/I\nCapture group count = 0\nStarting code units: 1 a b c\nLast code unit = '3'\nSubject length lower bound = 3\n    123\\=ps\n 0: 123\n    a\\=ps\nPartial match: a\n    b\\=ps\nPartial match: b\n    c\\=ps\nPartial match: c\n    c12\\=ps\nPartial match: c12\n    c123\\=ps\n 0: c123\n\n/^(?:\\d){3,5}X/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: 0 1 2 3 4 5 6 7 8 9\nLast code unit = 'X'\nSubject length lower bound = 4\n    1\\=ps\nPartial match: 1\n    123\\=ps\nPartial match: 123\n    123X\n 0: 123X\n    1234\\=ps\nPartial match: 1234\n    1234X\n 0: 1234X\n    12345\\=ps\nPartial match: 12345\n    12345X\n 0: 12345X\n\\= Expect no match\n    1X\nNo match\n    123456\\=ps\nNo match\n\n\"<(\\w+)/?>(.)*</(\\1)>\"Igms\nCapture group count = 3\nMax back reference = 1\nOptions: dotall multiline\nFirst code unit = '<'\nLast code unit = '>'\nSubject length lower bound = 7\n    <!DOCTYPE seite SYSTEM \"http://www.lco.lineas.de/xmlCms.dtd\">\\n<seite>\\n<dokumenteninformation>\\n<seitentitel>Partner der LCO</seitentitel>\\n<sprache>de</sprache>\\n<seitenbeschreibung>Partner der LINEAS Consulting\\nGmbH</seitenbeschreibung>\\n<schluesselworte>LINEAS Consulting GmbH Hamburg\\nPartnerfirmen</schluesselworte>\\n<revisit>30 days</revisit>\\n<robots>index,follow</robots>\\n<menueinformation>\\n<aktiv>ja</aktiv>\\n<menueposition>3</menueposition>\\n<menuetext>Partner</menuetext>\\n</menueinformation>\\n<lastedited>\\n<autor>LCO</autor>\\n<firma>LINEAS Consulting</firma>\\n<datum>15.10.2003</datum>\\n</lastedited>\\n</dokumenteninformation>\\n<inhalt>\\n\\n<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\\nGmbH</absatzueberschrift>\\n\\n<absatz><link ziel=\"http://www.ca.com/\" zielfenster=\"_blank\">\\n<bild name=\"logo_ca.gif\" rahmen=\"no\"/></link> <link\\nziel=\"http://www.ey.com/\" zielfenster=\"_blank\"><bild\\nname=\"logo_euy.gif\" rahmen=\"no\"/></link>\\n</absatz>\\n\\n<absatz><link ziel=\"http://www.cisco.de/\" zielfenster=\"_blank\">\\n<bild name=\"logo_cisco.gif\" rahmen=\"ja\"/></link></absatz>\\n\\n<absatz><link ziel=\"http://www.atelion.de/\"\\nzielfenster=\"_blank\"><bild\\nname=\"logo_atelion.gif\" rahmen=\"no\"/></link>\\n</absatz>\\n\\n<absatz><link ziel=\"http://www.line-information.de/\"\\nzielfenster=\"_blank\">\\n<bild name=\"logo_line_information.gif\" rahmen=\"no\"/></link>\\n</absatz>\\n\\n<absatz><bild name=\"logo_aw.gif\" rahmen=\"no\"/></absatz>\\n\\n<absatz><link ziel=\"http://www.incognis.de/\"\\nzielfenster=\"_blank\"><bild\\nname=\"logo_incognis.gif\" rahmen=\"no\"/></link></absatz>\\n\\n<absatz><link ziel=\"http://www.addcraft.com/\"\\nzielfenster=\"_blank\"><bild\\nname=\"logo_addcraft.gif\" rahmen=\"no\"/></link></absatz>\\n\\n<absatz><link ziel=\"http://www.comendo.com/\"\\nzielfenster=\"_blank\"><bild\\nname=\"logo_comendo.gif\" rahmen=\"no\"/></link></absatz>\\n\\n</inhalt>\\n</seite>\\=jitstack=1024\n 0: <seite>\\x0a<dokumenteninformation>\\x0a<seitentitel>Partner der LCO</seitentitel>\\x0a<sprache>de</sprache>\\x0a<seitenbeschreibung>Partner der LINEAS Consulting\\x0aGmbH</seitenbeschreibung>\\x0a<schluesselworte>LINEAS Consulting GmbH Hamburg\\x0aPartnerfirmen</schluesselworte>\\x0a<revisit>30 days</revisit>\\x0a<robots>index,follow</robots>\\x0a<menueinformation>\\x0a<aktiv>ja</aktiv>\\x0a<menueposition>3</menueposition>\\x0a<menuetext>Partner</menuetext>\\x0a</menueinformation>\\x0a<lastedited>\\x0a<autor>LCO</autor>\\x0a<firma>LINEAS Consulting</firma>\\x0a<datum>15.10.2003</datum>\\x0a</lastedited>\\x0a</dokumenteninformation>\\x0a<inhalt>\\x0a\\x0a<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\\x0aGmbH</absatzueberschrift>\\x0a\\x0a<absatz><link ziel=\"http://www.ca.com/\" zielfenster=\"_blank\">\\x0a<bild name=\"logo_ca.gif\" rahmen=\"no\"/></link> <link\\x0aziel=\"http://www.ey.com/\" zielfenster=\"_blank\"><bild\\x0aname=\"logo_euy.gif\" rahmen=\"no\"/></link>\\x0a</absatz>\\x0a\\x0a<absatz><link ziel=\"http://www.cisco.de/\" zielfenster=\"_blank\">\\x0a<bild name=\"logo_cisco.gif\" rahmen=\"ja\"/></link></absatz>\\x0a\\x0a<absatz><link ziel=\"http://www.atelion.de/\"\\x0azielfenster=\"_blank\"><bild\\x0aname=\"logo_atelion.gif\" rahmen=\"no\"/></link>\\x0a</absatz>\\x0a\\x0a<absatz><link ziel=\"http://www.line-information.de/\"\\x0azielfenster=\"_blank\">\\x0a<bild name=\"logo_line_information.gif\" rahmen=\"no\"/></link>\\x0a</absatz>\\x0a\\x0a<absatz><bild name=\"logo_aw.gif\" rahmen=\"no\"/></absatz>\\x0a\\x0a<absatz><link ziel=\"http://www.incognis.de/\"\\x0azielfenster=\"_blank\"><bild\\x0aname=\"logo_incognis.gif\" rahmen=\"no\"/></link></absatz>\\x0a\\x0a<absatz><link ziel=\"http://www.addcraft.com/\"\\x0azielfenster=\"_blank\"><bild\\x0aname=\"logo_addcraft.gif\" rahmen=\"no\"/></link></absatz>\\x0a\\x0a<absatz><link ziel=\"http://www.comendo.com/\"\\x0azielfenster=\"_blank\"><bild\\x0aname=\"logo_comendo.gif\" rahmen=\"no\"/></link></absatz>\\x0a\\x0a</inhalt>\\x0a</seite>\n 1: seite\n 2: \\x0a\n 3: seite\n\n/line\\nbreak/I\nCapture group count = 0\nContains explicit CR or LF match\nFirst code unit = 'l'\nLast code unit = 'k'\nSubject length lower bound = 10\n    this is a line\\nbreak\n 0: line\\x0abreak\n    line one\\nthis is a line\\nbreak in the second line\n 0: line\\x0abreak\n\n/line\\nbreak/I,firstline\nCapture group count = 0\nContains explicit CR or LF match\nOptions: firstline\nFirst code unit = 'l'\nLast code unit = 'k'\nSubject length lower bound = 10\n    this is a line\\nbreak\n 0: line\\x0abreak\n\\= Expect no match\n    line one\\nthis is a line\\nbreak in the second line\nNo match\n\n/line\\nbreak/Im,firstline\nCapture group count = 0\nContains explicit CR or LF match\nOptions: firstline multiline\nFirst code unit = 'l'\nLast code unit = 'k'\nSubject length lower bound = 10\n    this is a line\\nbreak\n 0: line\\x0abreak\n\\= Expect no match\n    line one\\nthis is a line\\nbreak in the second line\nNo match\n\n/(?i)(?-i)AbCd/I\nCapture group count = 0\nFirst code unit = 'A'\nLast code unit = 'd'\nSubject length lower bound = 4\n    AbCd\n 0: AbCd\n\\= Expect no match\n    abcd\nNo match\n\n/a{11111111111111111111}/I\nFailed: error 105 at offset 22: number too big in {} quantifier\n        here: ...1111111111 |<--| }\n\n/(){64294967295}/I\nFailed: error 105 at offset 14: number too big in {} quantifier\n        here: ...4294967295 |<--| }\n\n/(){2,4294967295}/I\nFailed: error 105 at offset 15: number too big in {} quantifier\n        here: ...4294967295 |<--| }\n\n\"(?i:a)(?i:b)(?i:c)(?i:d)(?i:e)(?i:f)(?i:g)(?i:h)(?i:i)(?i:j)(k)(?i:l)A\\1B\"I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'a' (caseless)\nLast code unit = 'B'\nSubject length lower bound = 15\n    abcdefghijklAkB\n 0: abcdefghijklAkB\n 1: k\n\n\"(?P<n0>a)(?P<n1>b)(?P<n2>c)(?P<n3>d)(?P<n4>e)(?P<n5>f)(?P<n6>g)(?P<n7>h)(?P<n8>i)(?P<n9>j)(?P<n10>k)(?P<n11>l)A\\11B\"I\nCapture group count = 12\nMax back reference = 11\nNamed capture groups:\n  n0    1\n  n1    2\n  n10  11\n  n11  12\n  n2    3\n  n3    4\n  n4    5\n  n5    6\n  n6    7\n  n7    8\n  n8    9\n  n9   10\nFirst code unit = 'a'\nLast code unit = 'B'\nSubject length lower bound = 15\n    abcdefghijklAkB\n 0: abcdefghijklAkB\n 1: a\n 2: b\n 3: c\n 4: d\n 5: e\n 6: f\n 7: g\n 8: h\n 9: i\n10: j\n11: k\n12: l\n\n\"(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)A\\11B\"I\nCapture group count = 12\nMax back reference = 11\nFirst code unit = 'a'\nLast code unit = 'B'\nSubject length lower bound = 15\n    abcdefghijklAkB\n 0: abcdefghijklAkB\n 1: a\n 2: b\n 3: c\n 4: d\n 5: e\n 6: f\n 7: g\n 8: h\n 9: i\n10: j\n11: k\n12: l\n\n\"(?P<name0>a)(?P<name1>a)(?P<name2>a)(?P<name3>a)(?P<name4>a)(?P<name5>a)(?P<name6>a)(?P<name7>a)(?P<name8>a)(?P<name9>a)(?P<name10>a)(?P<name11>a)(?P<name12>a)(?P<name13>a)(?P<name14>a)(?P<name15>a)(?P<name16>a)(?P<name17>a)(?P<name18>a)(?P<name19>a)(?P<name20>a)(?P<name21>a)(?P<name22>a)(?P<name23>a)(?P<name24>a)(?P<name25>a)(?P<name26>a)(?P<name27>a)(?P<name28>a)(?P<name29>a)(?P<name30>a)(?P<name31>a)(?P<name32>a)(?P<name33>a)(?P<name34>a)(?P<name35>a)(?P<name36>a)(?P<name37>a)(?P<name38>a)(?P<name39>a)(?P<name40>a)(?P<name41>a)(?P<name42>a)(?P<name43>a)(?P<name44>a)(?P<name45>a)(?P<name46>a)(?P<name47>a)(?P<name48>a)(?P<name49>a)(?P<name50>a)(?P<name51>a)(?P<name52>a)(?P<name53>a)(?P<name54>a)(?P<name55>a)(?P<name56>a)(?P<name57>a)(?P<name58>a)(?P<name59>a)(?P<name60>a)(?P<name61>a)(?P<name62>a)(?P<name63>a)(?P<name64>a)(?P<name65>a)(?P<name66>a)(?P<name67>a)(?P<name68>a)(?P<name69>a)(?P<name70>a)(?P<name71>a)(?P<name72>a)(?P<name73>a)(?P<name74>a)(?P<name75>a)(?P<name76>a)(?P<name77>a)(?P<name78>a)(?P<name79>a)(?P<name80>a)(?P<name81>a)(?P<name82>a)(?P<name83>a)(?P<name84>a)(?P<name85>a)(?P<name86>a)(?P<name87>a)(?P<name88>a)(?P<name89>a)(?P<name90>a)(?P<name91>a)(?P<name92>a)(?P<name93>a)(?P<name94>a)(?P<name95>a)(?P<name96>a)(?P<name97>a)(?P<name98>a)(?P<name99>a)(?P<name100>a)\"I\nCapture group count = 101\nNamed capture groups:\n  name0     1\n  name1     2\n  name10   11\n  name100 101\n  name11   12\n  name12   13\n  name13   14\n  name14   15\n  name15   16\n  name16   17\n  name17   18\n  name18   19\n  name19   20\n  name2     3\n  name20   21\n  name21   22\n  name22   23\n  name23   24\n  name24   25\n  name25   26\n  name26   27\n  name27   28\n  name28   29\n  name29   30\n  name3     4\n  name30   31\n  name31   32\n  name32   33\n  name33   34\n  name34   35\n  name35   36\n  name36   37\n  name37   38\n  name38   39\n  name39   40\n  name4     5\n  name40   41\n  name41   42\n  name42   43\n  name43   44\n  name44   45\n  name45   46\n  name46   47\n  name47   48\n  name48   49\n  name49   50\n  name5     6\n  name50   51\n  name51   52\n  name52   53\n  name53   54\n  name54   55\n  name55   56\n  name56   57\n  name57   58\n  name58   59\n  name59   60\n  name6     7\n  name60   61\n  name61   62\n  name62   63\n  name63   64\n  name64   65\n  name65   66\n  name66   67\n  name67   68\n  name68   69\n  name69   70\n  name7     8\n  name70   71\n  name71   72\n  name72   73\n  name73   74\n  name74   75\n  name75   76\n  name76   77\n  name77   78\n  name78   79\n  name79   80\n  name8     9\n  name80   81\n  name81   82\n  name82   83\n  name83   84\n  name84   85\n  name85   86\n  name86   87\n  name87   88\n  name88   89\n  name89   90\n  name9    10\n  name90   91\n  name91   92\n  name92   93\n  name93   94\n  name94   95\n  name95   96\n  name96   97\n  name97   98\n  name98   99\n  name99  100\nFirst code unit = 'a'\nLast code unit = 'a'\nSubject length lower bound = 101\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nMatched, but too many substrings\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 1: a\n 2: a\n 3: a\n 4: a\n 5: a\n 6: a\n 7: a\n 8: a\n 9: a\n10: a\n11: a\n12: a\n13: a\n14: a\n\n\"(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)\"I\nCapture group count = 101\nFirst code unit = 'a'\nLast code unit = 'a'\nSubject length lower bound = 101\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nMatched, but too many substrings\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 1: a\n 2: a\n 3: a\n 4: a\n 5: a\n 6: a\n 7: a\n 8: a\n 9: a\n10: a\n11: a\n12: a\n13: a\n14: a\n\n/[^()]*(?:\\((?R)\\)[^()]*)*/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n    (this(and)that\n 0: \n    (this(and)that)\n 0: (this(and)that)\n    (this(and)that)stuff\n 0: (this(and)that)stuff\n\n/[^()]*(?:\\((?>(?R))\\)[^()]*)*/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n    (this(and)that\n 0: \n    (this(and)that)\n 0: (this(and)that)\n\n/[^()]*(?:\\((?R)\\))*[^()]*/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n    (this(and)that\n 0: \n    (this(and)that)\n 0: (this(and)that)\n\n/(?:\\((?R)\\))*[^()]*/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n    (this(and)that\n 0: \n    (this(and)that)\n 0: \n    ((this))\n 0: ((this))\n\n/(?:\\((?R)\\))|[^()]*/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n    (this(and)that\n 0: \n    (this(and)that)\n 0: \n    (this)\n 0: (this)\n    ((this))\n 0: ((this))\n\n/\\x{0000ff}/I\nCapture group count = 0\nFirst code unit = \\xff\nSubject length lower bound = 1\n\n/^((?P<A>a1)|(?P<A>a2)b)/I\nFailed: error 143 at offset 18: two named subpatterns have the same name (PCRE2_DUPNAMES not set)\n        here: ...a1)|(?P<A> |<--| a2)b)\n\n/^((?P<A>a1)|(?P<A>a2)b)/I,dupnames\nCapture group count = 3\nNamed capture groups:\n  A   2\n  A   3\nCompile options: dupnames\nOverall options: anchored dupnames\nFirst code unit = 'a'\nSubject length lower bound = 2\n    a1b\\=copy=A\n 0: a1\n 1: a1\n 2: a1\n  C a1 (2) A (non-unique)\n    a2b\\=copy=A\n 0: a2b\n 1: a2b\n 2: <unset>\n 3: a2\n  C a2 (2) A (non-unique)\n    a1b\\=copy=Z,copy=A\n 0: a1\n 1: a1\n 2: a1\nNumber not found for group \"Z\"\nCopy substring \"Z\" failed (-49): unknown substring\nGet substring \"Z\" length failed (-49): unknown substring\n  C a1 (2) A (non-unique)\n\n/(?|(?<a>)(?<b>)(?<a>)|(?<a>)(?<b>)(?<a>))/I,dupnames\nCapture group count = 3\nNamed capture groups:\n  a   1\n  a   3\n  b   2\nMay match empty string\nOptions: dupnames\nSubject length lower bound = 0\n\n/^(?P<A>a)(?P<A>b)/I,dupnames\nCapture group count = 2\nNamed capture groups:\n  A   1\n  A   2\nCompile options: dupnames\nOverall options: anchored dupnames\nFirst code unit = 'a'\nSubject length lower bound = 2\n    ab\\=copy=A\n 0: ab\n 1: a\n 2: b\n  C a (1) A (non-unique)\n\n/^(?P<A>a)(?P<A>b)|cd/I,dupnames\nCapture group count = 2\nNamed capture groups:\n  A   1\n  A   2\nOptions: dupnames\nStarting code units: a c\nSubject length lower bound = 2\n    ab\\=copy=A\n 0: ab\n 1: a\n 2: b\n  C a (1) A (non-unique)\n    cd\\=copy=A\n 0: cd\nCopy substring \"A\" failed (-55): requested value is not set\nGet substring \"A\" length failed (-55): requested value is not set\n\n/^(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)/I,dupnames\nCapture group count = 4\nNamed capture groups:\n  A   1\n  A   2\n  A   3\n  A   4\nOptions: dupnames\nStarting code units: a c\nSubject length lower bound = 2\n    cdefgh\\=copy=A\n 0: cdefgh\n 1: <unset>\n 2: <unset>\n 3: ef\n 4: gh\n  C ef (2) A (non-unique)\n\n/^((?P<A>a1)|(?P<A>a2)b)/I,dupnames\nCapture group count = 3\nNamed capture groups:\n  A   2\n  A   3\nCompile options: dupnames\nOverall options: anchored dupnames\nFirst code unit = 'a'\nSubject length lower bound = 2\n    a1b\\=get=A\n 0: a1\n 1: a1\n 2: a1\n  G a1 (2) A (non-unique)\n    a2b\\=get=A\n 0: a2b\n 1: a2b\n 2: <unset>\n 3: a2\n  G a2 (2) A (non-unique)\n    a1b\\=get=Z,get=A\n 0: a1\n 1: a1\n 2: a1\nNumber not found for group \"Z\"\nGet substring \"Z\" failed (-49): unknown substring\n  G a1 (2) A (non-unique)\n\n/^(?P<A>a)(?P<A>b)/I,dupnames\nCapture group count = 2\nNamed capture groups:\n  A   1\n  A   2\nCompile options: dupnames\nOverall options: anchored dupnames\nFirst code unit = 'a'\nSubject length lower bound = 2\n    ab\\=get=A\n 0: ab\n 1: a\n 2: b\n  G a (1) A (non-unique)\n\n/^(?P<A>a)(?P<A>b)|cd/I,dupnames\nCapture group count = 2\nNamed capture groups:\n  A   1\n  A   2\nOptions: dupnames\nStarting code units: a c\nSubject length lower bound = 2\n    ab\\=get=A\n 0: ab\n 1: a\n 2: b\n  G a (1) A (non-unique)\n    cd\\=get=A\n 0: cd\nGet substring \"A\" failed (-55): requested value is not set\n\n/^(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)/I,dupnames\nCapture group count = 4\nNamed capture groups:\n  A   1\n  A   2\n  A   3\n  A   4\nOptions: dupnames\nStarting code units: a c\nSubject length lower bound = 2\n    cdefgh\\=get=A\n 0: cdefgh\n 1: <unset>\n 2: <unset>\n 3: ef\n 4: gh\n  G ef (2) A (non-unique)\n\n/(?J)^((?P<A>a1)|(?P<A>a2)b)/I\nCapture group count = 3\nNamed capture groups:\n  A   2\n  A   3\nCompile options: <none>\nOverall options: anchored\nDuplicate name status changes\nFirst code unit = 'a'\nSubject length lower bound = 2\n    a1b\\=copy=A\n 0: a1\n 1: a1\n 2: a1\n  C a1 (2) A (non-unique)\n    a2b\\=copy=A\n 0: a2b\n 1: a2b\n 2: <unset>\n 3: a2\n  C a2 (2) A (non-unique)\n\n/^(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<A>d)/I\nFailed: error 143 at offset 38: two named subpatterns have the same name (PCRE2_DUPNAMES not set)\n        here: ...c)) (?P<A> |<--| d)\n\n# In this next test, J is not set at the outer level; consequently it isn't set\n# in the pattern's options; consequently pcre2_substring_get_byname() produces\n# a random value.\n\n/^(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<C>d)/I\nCapture group count = 4\nNamed capture groups:\n  A   1\n  B   2\n  B   3\n  C   4\nCompile options: <none>\nOverall options: anchored\nDuplicate name status changes\nFirst code unit = 'a'\nSubject length lower bound = 6\n    a bc d\\=copy=A,copy=B,copy=C\n 0: a bc d\n 1: a\n 2: b\n 3: c\n 4: d\n  C a (1) A (group 1)\n  C b (1) B (non-unique)\n  C d (1) C (group 4)\n\n/^(?P<A>a)?(?(A)a|b)/I\nCapture group count = 1\nMax back reference = 1\nNamed capture groups:\n  A   1\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 1\n    aabc\n 0: aa\n 1: a\n    bc\n 0: b\n\\= Expect no match\n    abc\nNo match\n\n/(?:(?(ZZ)a|b)(?P<ZZ>X))+/I\nCapture group count = 1\nMax back reference = 1\nNamed capture groups:\n  ZZ   1\nLast code unit = 'X'\nSubject length lower bound = 2\n    bXaX\n 0: bXaX\n 1: X\n\n/(?:(?(2y)a|b)(X))+/I\nFailed: error 124 at offset 7: missing closing parenthesis for condition\n        here: (?:(?(2 |<--| y)a|b)(X))...\n\n/(?:(?(ZA)a|b)(?P<ZZ>X))+/I\nFailed: error 115 at offset 6: reference to non-existent subpattern\n        here: (?:(?( |<-->| ZA)a|b)(?P...\n\n/(?:(?(ZZ)a|b)(?(ZZ)a|b)(?P<ZZ>X))+/I\nCapture group count = 1\nMax back reference = 1\nNamed capture groups:\n  ZZ   1\nLast code unit = 'X'\nSubject length lower bound = 3\n    bbXaaX\n 0: bbXaaX\n 1: X\n\n/(?:(?(ZZ)a|\\(b\\))\\\\(?P<ZZ>X))+/I\nCapture group count = 1\nMax back reference = 1\nNamed capture groups:\n  ZZ   1\nLast code unit = 'X'\nSubject length lower bound = 3\n    (b)\\\\Xa\\\\X\n 0: (b)\\Xa\\X\n 1: X\n\n/(?P<ABC/I\nFailed: error 142 at offset 7: syntax error in subpattern name (missing terminator?)\n        here: (?P<ABC |<--|\n\n/(?:(?(A)(?P=A)a|b)(?P<A>X|Y))+/I\nCapture group count = 1\nMax back reference = 1\nNamed capture groups:\n  A   1\nSubject length lower bound = 2\n    bXXaYYaY\n 0: bXXaYYaY\n 1: Y\n    bXYaXXaX\n 0: bX\n 1: X\n\n/()()()()()()()()()(?:(?(A)(?P=A)a|b)(?P<A>X|Y))+/I\nCapture group count = 10\nMax back reference = 10\nNamed capture groups:\n  A  10\nSubject length lower bound = 2\n    bXXaYYaY\n 0: bXXaYYaY\n 1: \n 2: \n 3: \n 4: \n 5: \n 6: \n 7: \n 8: \n 9: \n10: Y\n\n/\\s*,\\s*/I\nCapture group count = 0\nStarting code units: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 ,\nLast code unit = ','\nSubject length lower bound = 1\n    \\x0b,\\x0b\n 0: \\x0b,\\x0b\n    \\x0c,\\x0d\n 0: \\x0c,\\x0d\n\n/^abc/Im,newline=lf\nCapture group count = 0\nOptions: multiline\nForced newline is LF\nFirst code unit at start or follows newline\nLast code unit = 'c'\nSubject length lower bound = 3\n    xyz\\nabc\n 0: abc\n    xyz\\r\\nabc\n 0: abc\n\\= Expect no match\n    xyz\\rabc\nNo match\n    xyzabc\\r\nNo match\n    xyzabc\\rpqr\nNo match\n    xyzabc\\r\\n\nNo match\n    xyzabc\\r\\npqr\nNo match\n\n/^abc/Im,newline=crlf\nCapture group count = 0\nOptions: multiline\nForced newline is CRLF\nFirst code unit at start or follows newline\nLast code unit = 'c'\nSubject length lower bound = 3\n    xyz\\r\\nabclf>\n 0: abc\n\\= Expect no match\n    xyz\\nabclf\nNo match\n    xyz\\rabclf\nNo match\n\n/^abc/Im,newline=cr\nCapture group count = 0\nOptions: multiline\nForced newline is CR\nFirst code unit at start or follows newline\nLast code unit = 'c'\nSubject length lower bound = 3\n    xyz\\rabc\n 0: abc\n\\= Expect no match\n    xyz\\nabc\nNo match\n    xyz\\r\\nabc\nNo match\n\n/^abc/Im,newline=bad\n** Invalid value in \"newline=bad\"\n\n/.*/I,newline=lf\nCapture group count = 0\nMay match empty string\nForced newline is LF\nFirst code unit at start or follows newline\nSubject length lower bound = 0\n    abc\\ndef\n 0: abc\n    abc\\rdef\n 0: abc\\x0ddef\n    abc\\r\\ndef\n 0: abc\\x0d\n\n/.*/I,newline=cr\nCapture group count = 0\nMay match empty string\nForced newline is CR\nFirst code unit at start or follows newline\nSubject length lower bound = 0\n    abc\\ndef\n 0: abc\\x0adef\n    abc\\rdef\n 0: abc\n    abc\\r\\ndef\n 0: abc\n\n/.*/I,newline=crlf\nCapture group count = 0\nMay match empty string\nForced newline is CRLF\nFirst code unit at start or follows newline\nSubject length lower bound = 0\n    abc\\ndef\n 0: abc\\x0adef\n    abc\\rdef\n 0: abc\\x0ddef\n    abc\\r\\ndef\n 0: abc\n\n/\\w+(.)(.)?def/Is\nCapture group count = 2\nOptions: dotall\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nLast code unit = 'f'\nSubject length lower bound = 5\n    abc\\ndef\n 0: abc\\x0adef\n 1: \\x0a\n    abc\\rdef\n 0: abc\\x0ddef\n 1: \\x0d\n    abc\\r\\ndef\n 0: abc\\x0d\\x0adef\n 1: \\x0d\n 2: \\x0a\n\n/(?P<B>25[0-5]|2[0-4]\\d|[01]?\\d?\\d)(?:\\.(?P>B)){3}/I\nCapture group count = 1\nNamed capture groups:\n  B   1\nStarting code units: 0 1 2 3 4 5 6 7 8 9\nLast code unit = '.'\nSubject length lower bound = 7\n\n/()()()()()()()()()()()()()()()()()()()()\n ()()()()()()()()()()()()()()()()()()()()\n ()()()()()()()()()()()()()()()()()()()()\n ()()()()()()()()()()()()()()()()()()()()\n ()()()()()()()()()()()()()()()()()()()()\n (.(.))/Ix\nCapture group count = 102\nOptions: extended\nSubject length lower bound = 2\n    XY\\=ovector=133\n 0: XY\n 1: \n 2: \n 3: \n 4: \n 5: \n 6: \n 7: \n 8: \n 9: \n10: \n11: \n12: \n13: \n14: \n15: \n16: \n17: \n18: \n19: \n20: \n21: \n22: \n23: \n24: \n25: \n26: \n27: \n28: \n29: \n30: \n31: \n32: \n33: \n34: \n35: \n36: \n37: \n38: \n39: \n40: \n41: \n42: \n43: \n44: \n45: \n46: \n47: \n48: \n49: \n50: \n51: \n52: \n53: \n54: \n55: \n56: \n57: \n58: \n59: \n60: \n61: \n62: \n63: \n64: \n65: \n66: \n67: \n68: \n69: \n70: \n71: \n72: \n73: \n74: \n75: \n76: \n77: \n78: \n79: \n80: \n81: \n82: \n83: \n84: \n85: \n86: \n87: \n88: \n89: \n90: \n91: \n92: \n93: \n94: \n95: \n96: \n97: \n98: \n99: \n100: \n101: XY\n102: Y\n\n/(a*b|(?i:c*(?-i)d))/I\nCapture group count = 1\nStarting code units: C a b c d\nSubject length lower bound = 1\n\n/()[ab]xyz/I\nCapture group count = 1\nStarting code units: a b\nLast code unit = 'z'\nSubject length lower bound = 4\n\n/(|)[ab]xyz/I\nCapture group count = 1\nStarting code units: a b\nLast code unit = 'z'\nSubject length lower bound = 4\n\n/(|c)[ab]xyz/I\nCapture group count = 1\nStarting code units: a b c\nLast code unit = 'z'\nSubject length lower bound = 4\n\n/(|c?)[ab]xyz/I\nCapture group count = 1\nStarting code units: a b c\nLast code unit = 'z'\nSubject length lower bound = 4\n\n/(d?|c?)[ab]xyz/I\nCapture group count = 1\nStarting code units: a b c d\nLast code unit = 'z'\nSubject length lower bound = 4\n\n/(d?|c)[ab]xyz/I\nCapture group count = 1\nStarting code units: a b c d\nLast code unit = 'z'\nSubject length lower bound = 4\n\n/^a*b\\d/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        a*+\n        b\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: a b\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/^a*+b\\d/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        a*+\n        b\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: a b\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/^a*?b\\d/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        a*+\n        b\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nStarting code units: a b\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/^a+A\\d/IB\n------------------------------------------------------------------\n        Bra\n        ^\n        a++\n        A\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nLast code unit = 'A'\nSubject length lower bound = 3\n    aaaA5\n 0: aaaA5\n\\= Expect no match\n    aaaa5\nNo match\n\n/^a*A\\d/IBi\n------------------------------------------------------------------\n        Bra\n        ^\n     /i a*\n     /i A\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: caseless\nOverall options: anchored caseless\nFirst code unit = 'A' (caseless)\nSubject length lower bound = 2\n    aaaA5\n 0: aaaA5\n    aaaa5\n 0: aaaa5\n    a5 \n 0: a5\n\n/(a*|b*)[cd]/I\nCapture group count = 1\nStarting code units: a b c d\nSubject length lower bound = 1\n\n/(a+|b*)[cd]/I\nCapture group count = 1\nStarting code units: a b c d\nSubject length lower bound = 1\n\n/(a*|b+)[cd]/I\nCapture group count = 1\nStarting code units: a b c d\nSubject length lower bound = 1\n\n/(a+|b+)[cd]/I\nCapture group count = 1\nStarting code units: a b\nSubject length lower bound = 2\n\n/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((\n ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((\n (((\n a\n ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n )))\n/Ix\nCapture group count = 203\nOptions: extended\nFirst code unit = 'a'\nSubject length lower bound = 1\n  large nest\nMatched, but too many substrings\n 0: a\n 1: a\n 2: a\n 3: a\n 4: a\n 5: a\n 6: a\n 7: a\n 8: a\n 9: a\n10: a\n11: a\n12: a\n13: a\n14: a\n\n/a*\\d/B\n------------------------------------------------------------------\n        Bra\n        a*+\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\n\n/a*\\D/B\n------------------------------------------------------------------\n        Bra\n        a*\n        \\D\n        Ket\n        End\n------------------------------------------------------------------\n\n/0*\\d/B\n------------------------------------------------------------------\n        Bra\n        0*\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\n\n/0*\\D/B\n------------------------------------------------------------------\n        Bra\n        0*+\n        \\D\n        Ket\n        End\n------------------------------------------------------------------\n\n/a*\\s/B\n------------------------------------------------------------------\n        Bra\n        a*+\n        \\s\n        Ket\n        End\n------------------------------------------------------------------\n\n/a*\\S/B\n------------------------------------------------------------------\n        Bra\n        a*\n        \\S\n        Ket\n        End\n------------------------------------------------------------------\n\n/ *\\s/B\n------------------------------------------------------------------\n        Bra\n         *\n        \\s\n        Ket\n        End\n------------------------------------------------------------------\n\n/ *\\S/B\n------------------------------------------------------------------\n        Bra\n         *+\n        \\S\n        Ket\n        End\n------------------------------------------------------------------\n\n/a*\\w/B\n------------------------------------------------------------------\n        Bra\n        a*\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\n\n/a*\\W/B\n------------------------------------------------------------------\n        Bra\n        a*+\n        \\W\n        Ket\n        End\n------------------------------------------------------------------\n\n/=*\\w/B\n------------------------------------------------------------------\n        Bra\n        =*+\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\n\n/=*\\W/B\n------------------------------------------------------------------\n        Bra\n        =*\n        \\W\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d*a/B\n------------------------------------------------------------------\n        Bra\n        \\d*+\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d*2/B\n------------------------------------------------------------------\n        Bra\n        \\d*\n        2\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d*\\d/B\n------------------------------------------------------------------\n        Bra\n        \\d*\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d*\\D/B\n------------------------------------------------------------------\n        Bra\n        \\d*+\n        \\D\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d*\\s/B\n------------------------------------------------------------------\n        Bra\n        \\d*+\n        \\s\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d*\\S/B\n------------------------------------------------------------------\n        Bra\n        \\d*\n        \\S\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d*\\w/B\n------------------------------------------------------------------\n        Bra\n        \\d*\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d*\\W/B\n------------------------------------------------------------------\n        Bra\n        \\d*+\n        \\W\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\D*a/B\n------------------------------------------------------------------\n        Bra\n        \\D*\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\D*2/B\n------------------------------------------------------------------\n        Bra\n        \\D*+\n        2\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\D*\\d/B\n------------------------------------------------------------------\n        Bra\n        \\D*+\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\D*\\D/B\n------------------------------------------------------------------\n        Bra\n        \\D*\n        \\D\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\D*\\s/B\n------------------------------------------------------------------\n        Bra\n        \\D*\n        \\s\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\D*\\S/B\n------------------------------------------------------------------\n        Bra\n        \\D*\n        \\S\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\D*\\w/B\n------------------------------------------------------------------\n        Bra\n        \\D*\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\D*\\W/B\n------------------------------------------------------------------\n        Bra\n        \\D*\n        \\W\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\s*a/B\n------------------------------------------------------------------\n        Bra\n        \\s*+\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\s*2/B\n------------------------------------------------------------------\n        Bra\n        \\s*+\n        2\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\s*\\d/B\n------------------------------------------------------------------\n        Bra\n        \\s*+\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\s*\\D/B\n------------------------------------------------------------------\n        Bra\n        \\s*\n        \\D\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\s*\\s/B\n------------------------------------------------------------------\n        Bra\n        \\s*\n        \\s\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\s*\\S/B\n------------------------------------------------------------------\n        Bra\n        \\s*+\n        \\S\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\s*\\w/B\n------------------------------------------------------------------\n        Bra\n        \\s*+\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\s*\\W/B\n------------------------------------------------------------------\n        Bra\n        \\s*\n        \\W\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\S*a/B\n------------------------------------------------------------------\n        Bra\n        \\S*\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\S*2/B\n------------------------------------------------------------------\n        Bra\n        \\S*\n        2\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\S*\\d/B\n------------------------------------------------------------------\n        Bra\n        \\S*\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\S*\\D/B\n------------------------------------------------------------------\n        Bra\n        \\S*\n        \\D\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\S*\\s/B\n------------------------------------------------------------------\n        Bra\n        \\S*+\n        \\s\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\S*\\S/B\n------------------------------------------------------------------\n        Bra\n        \\S*\n        \\S\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\S*\\w/B\n------------------------------------------------------------------\n        Bra\n        \\S*\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\S*\\W/B\n------------------------------------------------------------------\n        Bra\n        \\S*\n        \\W\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w*a/B\n------------------------------------------------------------------\n        Bra\n        \\w*\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w*2/B\n------------------------------------------------------------------\n        Bra\n        \\w*\n        2\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w*\\d/B\n------------------------------------------------------------------\n        Bra\n        \\w*\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w*\\D/B\n------------------------------------------------------------------\n        Bra\n        \\w*\n        \\D\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w*\\s/B\n------------------------------------------------------------------\n        Bra\n        \\w*+\n        \\s\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w*\\S/B\n------------------------------------------------------------------\n        Bra\n        \\w*\n        \\S\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w*\\w/B\n------------------------------------------------------------------\n        Bra\n        \\w*\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w*\\W/B\n------------------------------------------------------------------\n        Bra\n        \\w*+\n        \\W\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\W*a/B\n------------------------------------------------------------------\n        Bra\n        \\W*+\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\W*2/B\n------------------------------------------------------------------\n        Bra\n        \\W*+\n        2\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\W*\\d/B\n------------------------------------------------------------------\n        Bra\n        \\W*+\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\W*\\D/B\n------------------------------------------------------------------\n        Bra\n        \\W*\n        \\D\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\W*\\s/B\n------------------------------------------------------------------\n        Bra\n        \\W*\n        \\s\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\W*\\S/B\n------------------------------------------------------------------\n        Bra\n        \\W*\n        \\S\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\W*\\w/B\n------------------------------------------------------------------\n        Bra\n        \\W*+\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\W*\\W/B\n------------------------------------------------------------------\n        Bra\n        \\W*\n        \\W\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^a]+a/B\n------------------------------------------------------------------\n        Bra\n        [^a]++ (not)\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^a]+a/Bi\n------------------------------------------------------------------\n        Bra\n     /i [^a]++ (not)\n     /i a\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^a]+A/Bi\n------------------------------------------------------------------\n        Bra\n     /i [^a]++ (not)\n     /i A\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^a]+b/B\n------------------------------------------------------------------\n        Bra\n        [^a]+ (not)\n        b\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^a]+\\d/B\n------------------------------------------------------------------\n        Bra\n        [^a]+ (not)\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\n\n/a*[^a]/B\n------------------------------------------------------------------\n        Bra\n        a*+\n        [^a] (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?P<abc>x)(?P<xyz>y)/I\nCapture group count = 2\nNamed capture groups:\n  abc   1\n  xyz   2\nFirst code unit = 'x'\nLast code unit = 'y'\nSubject length lower bound = 2\n    xy\\=copy=abc,copy=xyz\n 0: xy\n 1: x\n 2: y\n  C x (1) abc (group 1)\n  C y (1) xyz (group 2)\n\n/(?<abc>x)(?'xyz'y)/I\nCapture group count = 2\nNamed capture groups:\n  abc   1\n  xyz   2\nFirst code unit = 'x'\nLast code unit = 'y'\nSubject length lower bound = 2\n    xy\\=copy=abc,copy=xyz\n 0: xy\n 1: x\n 2: y\n  C x (1) abc (group 1)\n  C y (1) xyz (group 2)\n\n/(?<abc'x)(?'xyz'y)/I\nFailed: error 142 at offset 6: syntax error in subpattern name (missing terminator?)\n        here: (?<abc |<--| 'x)(?'xyz'...\n\n/(?<abc>x)(?'xyz>y)/I\nFailed: error 142 at offset 15: syntax error in subpattern name (missing terminator?)\n        here: ...c>x)(?'xyz |<--| >y)\n\n/(?P'abc'x)(?P<xyz>y)/I\nFailed: error 141 at offset 4: unrecognized character after (?P\n        here: (?P' |<--| abc'x)(?P<...\n\n/^(?:(?(ZZ)a|b)(?<ZZ>X))+/\n    bXaX\n 0: bXaX\n 1: X\n    bXbX\n 0: bX\n 1: X\n\\= Expect no match\n    aXaX\nNo match\n    aXbX\nNo match\n\n/^(?P>abc)(?<abcd>xxx)/\nFailed: error 115 at offset 5: reference to non-existent subpattern\n        here: ^(?P> |<-->| abc)(?<abc...\n\n/^(?P>abc)(?<abc>x|y)/\n    xx\n 0: xx\n 1: x\n    xy\n 0: xy\n 1: y\n    yy\n 0: yy\n 1: y\n    yx\n 0: yx\n 1: x\n\n/^(?P>abc)(?P<abc>x|y)/\n    xx\n 0: xx\n 1: x\n    xy\n 0: xy\n 1: y\n    yy\n 0: yy\n 1: y\n    yx\n 0: yx\n 1: x\n\n/^((?(abc)a|b)(?<abc>x|y))+/\n    bxay\n 0: bxay\n 1: ay\n 2: y\n    bxby\n 0: bx\n 1: bx\n 2: x\n\\= Expect no match\n    axby\nNo match\n\n/^(((?P=abc)|X)(?<abc>x|y))+/\n    XxXxxx\n 0: XxXxxx\n 1: xx\n 2: x\n 3: x\n    XxXyyx\n 0: XxXyyx\n 1: yx\n 2: y\n 3: x\n    XxXyxx\n 0: XxXy\n 1: Xy\n 2: X\n 3: y\n\\= Expect no match\n    x\nNo match\n\n/^(?1)(abc)/\n    abcabc\n 0: abcabc\n 1: abc\n\n/^(?:(?:\\1|X)(a|b))+/\n    Xaaa\n 0: Xaaa\n 1: a\n    Xaba\n 0: Xa\n 1: a\n\n/^[\\E\\Qa\\E-\\Qz\\E]+/B\n------------------------------------------------------------------\n        Bra\n        ^\n        [a-z]++\n        Ket\n        End\n------------------------------------------------------------------\n\n/^[a\\Q]bc\\E]/B\n------------------------------------------------------------------\n        Bra\n        ^\n        [\\]a-c]\n        Ket\n        End\n------------------------------------------------------------------\n\n/^[a-\\Q\\E]/B\n------------------------------------------------------------------\n        Bra\n        ^\n        [\\-a]\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(?P>abc)[()](?<abc>)/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Recurse\n        [()]\n        CBra 1\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/^((?(abc)y)[()](?P<abc>x))+/B\n------------------------------------------------------------------\n        Bra\n        ^\n        CBra 1\n        Cond\n      2 Capture ref\n        y\n        Ket\n        [()]\n        CBra 2\n        x\n        Ket\n        KetRmax\n        Ket\n        End\n------------------------------------------------------------------\n    (xy)x\n 0: (xy)x\n 1: y)x\n 2: x\n\n/^(?P>abc)\\Q()\\E(?<abc>)/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Recurse\n        ()\n        CBra 1\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(?P>abc)[a\\Q(]\\E(](?<abc>)/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Recurse\n        [(\\]a]\n        CBra 1\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(?P>abc) # this is (a comment)\n  (?<abc>)/Bx\n------------------------------------------------------------------\n        Bra\n        ^\n        Recurse\n        CBra 1\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/^\\W*(?:(?<one>(?<two>.)\\W*(?&one)\\W*\\k<two>|)|(?<three>(?<four>.)\\W*(?&three)\\W*\\k'four'|\\W*.\\W*))\\W*$/Ii\nCapture group count = 4\nMax back reference = 4\nNamed capture groups:\n  four    4\n  one     1\n  three   3\n  two     2\nMay match empty string\nCompile options: caseless\nOverall options: anchored caseless\nSubject length lower bound = 0\n    1221\n 0: 1221\n 1: 1221\n 2: 1\n    Satan, oscillate my metallic sonatas!\n 0: Satan, oscillate my metallic sonatas!\n 1: <unset>\n 2: <unset>\n 3: Satan, oscillate my metallic sonatas\n 4: S\n    A man, a plan, a canal: Panama!\n 0: A man, a plan, a canal: Panama!\n 1: <unset>\n 2: <unset>\n 3: A man, a plan, a canal: Panama\n 4: A\n    Able was I ere I saw Elba.\n 0: Able was I ere I saw Elba.\n 1: <unset>\n 2: <unset>\n 3: Able was I ere I saw Elba\n 4: A\n\\= Expect no match\n    The quick brown fox\nNo match\n\n/(?=(\\w+))\\1:/I\nCapture group count = 1\nMax back reference = 1\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nLast code unit = ':'\nSubject length lower bound = 2\n    abcd:\n 0: abcd:\n 1: abcd\n\n/(?=(?'abc'\\w+))\\k<abc>:/I\nCapture group count = 1\nMax back reference = 1\nNamed capture groups:\n  abc   1\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nLast code unit = ':'\nSubject length lower bound = 2\n    abcd:\n 0: abcd:\n 1: abcd\n\n/(?'abc'a|b)(?<abc>d|e)\\k<abc>{2}/dupnames\n    adaa\n 0: adaa\n 1: a\n 2: d\n\\= Expect no match\n    addd\nNo match\n    adbb\nNo match\n\n/(?'abc'a|b)(?<abc>d|e)(?&abc){2}/dupnames\n    bdaa\n 0: bdaa\n 1: b\n 2: d\n    bdab\n 0: bdab\n 1: b\n 2: d\n\\= Expect no match\n    bddd\nNo match\n\n/(?(<bc))/\nFailed: error 142 at offset 6: syntax error in subpattern name (missing terminator?)\n        here: (?(<bc |<--| ))\n\n/(?(''))/\nFailed: error 162 at offset 4: subpattern name expected\n        here: (?(' |<--| '))\n\n/(?('R')stuff)/\nFailed: error 115 at offset 4: reference to non-existent subpattern\n        here: (?(' |<-->| R')stuff)\n\n/((abc (?(R) (?(R1)1) (?(R2)2) X  |  (?1)  (?2)   (?R) ))) /x\n    abcabc1Xabc2XabcXabcabc\n 0: abcabc1Xabc2XabcX\n 1: abcabc1Xabc2XabcX\n 2: abcabc1Xabc2XabcX\n\n/(?<A> (?'B' abc (?(R) (?(R&A)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) /x\n    abcabc1Xabc2XabcXabcabc\n 0: abcabc1Xabc2XabcX\n 1: abcabc1Xabc2XabcX\n 2: abcabc1Xabc2XabcX\n\n/(?<A> (?'B' abc (?(R) (?(R&C)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) /x\nFailed: error 115 at offset 27: reference to non-existent subpattern\n        here: ...?(R) (?(R& |<-->| C)1) (?(R&...\n\n/^(?(DEFINE) abc | xyz ) /x\nFailed: error 154 at offset 4: DEFINE subpattern contains more than one branch\n        here: ^(?( |-->| DEFINE) ab...\n\n/(?(DEFINE) abc) xyz/Ix\nCapture group count = 0\nOptions: extended\nFirst code unit = 'x'\nLast code unit = 'z'\nSubject length lower bound = 3\n\n/(a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\\=ovector=0\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n 1: \n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\=ovector=0\nNo match\n\n/^a.b/newline=lf\n    a\\rb\n 0: a\\x0db\n\\= Expect no match\n    a\\nb\nNo match\n\n/^a.b/newline=cr\n    a\\nb\n 0: a\\x0ab\n\\= Expect no match\n    a\\rb\nNo match\n\n/^a.b/newline=anycrlf\n    a\\x85b\n 0: a\\x85b\n\\= Expect no match\n    a\\rb\nNo match\n    a\\r\\nb\nNo match\n\n/^a.b/newline=any\n\\= Expect no match\n    a\\nb\nNo match\n    a\\rb\nNo match\n    a\\r\\nb\nNo match\n    a\\x85b\nNo match\n\n/^a.b/newline=nul\n    a\\nb\n 0: a\\x0ab\n\\= Expect no match\n    a\\x{00}b\nNo match\n\n/^a./newline=lf\n    a\\r\n 0: a\\x0d\n\\= Expect no match\n    a\\n\nNo match\n\n/^a./newline=cr\n    a\\n\n 0: a\\x0a\n\\= Expect no match\n    a\\r\nNo match\n\n/^a./newline=anycrlf\n    a\\x85\n 0: a\\x85\n\\= Expect no match\n    a\\r\nNo match\n    a\\n\nNo match\n    a\\r\\n\nNo match\n\n/^a./newline=any\n\\= Expect no match\n    a\\n\nNo match\n    a\\r\nNo match\n    a\\r\\n\nNo match\n    a\\x85\nNo match\n\n/^a./newline=nul\n    a\\n\n 0: a\\x0a\n\\= Expect no match\n    a\\x{00}\nNo match\n\n/^b/m,newline=lf\n    a\\nb\n 0: b\n\\= Expect no match\n    a\\rb\nNo match\n\n/^b/m,newline=cr\n    a\\rb\n 0: b\n\\= Expect no match\n    a\\nb\nNo match\n\n/^b/m,newline=anycrlf\n    a\\rb\n 0: b\n    a\\nb\n 0: b\n    a\\r\\nb\n 0: b\n    \\nb\n 0: b\n    \\rb\n 0: b\n    \\r\\nb\n 0: b\n\\= Expect no match\n    a\\x85b\nNo match\n\n/^b/m,newline=any\n    a\\nb\n 0: b\n    a\\rb\n 0: b\n    a\\r\\nb\n 0: b\n    a\\x85b\n 0: b\n    \\nb\n 0: b\n    \\rb\n 0: b\n    \\r\\nb\n 0: b\n\n/^b/m,newline=nul\n    a\\x{00}b\n 0: b\n\\= Expect no match\n    a\\nb\nNo match\n\n/^abc./gmx,newline=any\n    abc1 \\x0aabc2 \\x0babc3xx \\x0cabc4 \\x0dabc5xx \\x0d\\x0aabc6 \\x85abc7 JUNK\n 0: abc1\n 0: abc2\n 0: abc3\n 0: abc4\n 0: abc5\n 0: abc6\n 0: abc7\n\n/abc.$/gmx,newline=any\n    abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x85 abc7 abc9\n 0: abc1\n 0: abc2\n 0: abc3\n 0: abc4\n 0: abc5\n 0: abc6\n 0: abc9\n\n/^a\\Rb/bsr=unicode\n    a\\nb\n 0: a\\x0ab\n    a\\rb\n 0: a\\x0db\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n    a\\x0bb\n 0: a\\x0bb\n    a\\x0cb\n 0: a\\x0cb\n    a\\x85b\n 0: a\\x85b\n\\= Expect no match\n    a\\n\\rb\nNo match\n\n/^a\\R*b/bsr=unicode\n    ab\n 0: ab\n    a\\nb\n 0: a\\x0ab\n    a\\rb\n 0: a\\x0db\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n    a\\x0bb\n 0: a\\x0bb\n    a\\x0cb\n 0: a\\x0cb\n    a\\x85b\n 0: a\\x85b\n    a\\n\\rb\n 0: a\\x0a\\x0db\n    a\\n\\r\\x85\\x0cb\n 0: a\\x0a\\x0d\\x85\\x0cb\n\n/^a\\R+b/bsr=unicode\n    a\\nb\n 0: a\\x0ab\n    a\\rb\n 0: a\\x0db\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n    a\\x0bb\n 0: a\\x0bb\n    a\\x0cb\n 0: a\\x0cb\n    a\\x85b\n 0: a\\x85b\n    a\\n\\rb\n 0: a\\x0a\\x0db\n    a\\n\\r\\x85\\x0cb\n 0: a\\x0a\\x0d\\x85\\x0cb\n\\= Expect no match\n    ab\nNo match\n\n/^a\\R{1,3}b/bsr=unicode\n    a\\nb\n 0: a\\x0ab\n    a\\n\\rb\n 0: a\\x0a\\x0db\n    a\\n\\r\\x85b\n 0: a\\x0a\\x0d\\x85b\n    a\\r\\n\\r\\nb\n 0: a\\x0d\\x0a\\x0d\\x0ab\n    a\\r\\n\\r\\n\\r\\nb\n 0: a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0ab\n    a\\n\\r\\n\\rb\n 0: a\\x0a\\x0d\\x0a\\x0db\n    a\\n\\n\\r\\nb\n 0: a\\x0a\\x0a\\x0d\\x0ab\n\\= Expect no match\n    a\\n\\n\\n\\rb\nNo match\n    a\\r\nNo match\n\n/(?&abc)X(?<abc>P)/I\nCapture group count = 1\nNamed capture groups:\n  abc   1\nLast code unit = 'P'\nSubject length lower bound = 3\n    abcPXP123\n 0: PXP\n 1: P\n\n/(?1)X(?<abc>P)/I\nCapture group count = 1\nNamed capture groups:\n  abc   1\nLast code unit = 'P'\nSubject length lower bound = 3\n    abcPXP123\n 0: PXP\n 1: P\n\n/(?:a(?&abc)b)*(?<abc>x)/\n    123axbaxbaxbx456\n 0: axbaxbaxbx\n 1: x\n    123axbaxbaxb456\n 0: x\n 1: x\n\n/(?:a(?&abc)b){1,5}(?<abc>x)/\n    123axbaxbaxbx456\n 0: axbaxbaxbx\n 1: x\n\n/(?:a(?&abc)b){2,5}(?<abc>x)/\n    123axbaxbaxbx456\n 0: axbaxbaxbx\n 1: x\n\n/(?:a(?&abc)b){2,}(?<abc>x)/\n    123axbaxbaxbx456\n 0: axbaxbaxbx\n 1: x\n\n/(abc)(?i:(?1))/\n    defabcabcxyz\n 0: abcabc\n 1: abc\n\\= Expect no match\n    DEFabcABCXYZ\nNo match\n\n/(abc)(?:(?i)(?1))/\n    defabcabcxyz\n 0: abcabc\n 1: abc\n\\= Expect no match\n    DEFabcABCXYZ\nNo match\n\n/^(a)\\g-2/\nFailed: error 115 at offset 8: reference to non-existent subpattern\n        here: ^(a)\\g-2 |<-->|\n\n/^(a)\\g/\nFailed: error 157 at offset 6: \\g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number\n        here: ^(a)\\g |<--|\n\n/^(a)\\g{0}/\nFailed: error 115 at offset 9: reference to non-existent subpattern\n        here: ^(a)\\g{0} |<-->|\n\n/^(a)\\g{3/\nFailed: error 219 at offset 8: syntax error in subpattern number (missing terminator?)\n        here: ^(a)\\g{3 |<--|\n\n/^(a)\\g{aa}/\nFailed: error 115 at offset 7: reference to non-existent subpattern\n        here: ^(a)\\g{ |<-->| aa}\n\n/^a.b/newline=lf\n    a\\rb\n 0: a\\x0db\n\\= Expect no match\n    a\\nb\nNo match\n\n/.+foo/\n    afoo\n 0: afoo\n\\= Expect no match\n    \\r\\nfoo\nNo match\n    \\nfoo\nNo match\n\n/.+foo/newline=crlf\n    afoo\n 0: afoo\n    \\nfoo\n 0: \\x0afoo\n\\= Expect no match\n    \\r\\nfoo\nNo match\n\n/.+foo/newline=any\n    afoo\n 0: afoo\n\\= Expect no match\n    \\nfoo\nNo match\n    \\r\\nfoo\nNo match\n\n/.+foo/s\n    afoo\n 0: afoo\n    \\r\\nfoo\n 0: \\x0d\\x0afoo\n    \\nfoo\n 0: \\x0afoo\n\n/^$/gm,newline=any\n    abc\\r\\rxyz\n 0: \n    abc\\n\\rxyz\n 0: \n\\= Expect no match\n    abc\\r\\nxyz\nNo match\n\n/(?m)^$/g,newline=any,aftertext\n    abc\\r\\n\\r\\n\n 0: \n 0+ \\x0d\\x0a\n\n/(?m)^$|^\\r\\n/g,newline=any,aftertext\n    abc\\r\\n\\r\\n\n 0: \n 0+ \\x0d\\x0a\n 0: \\x0d\\x0a\n 0+ \n\n/(?m)$/g,newline=any,aftertext\n    abc\\r\\n\\r\\n\n 0: \n 0+ \\x0d\\x0a\\x0d\\x0a\n 0: \n 0+ \\x0d\\x0a\n 0: \n 0+ \n\n/abc.$/gmx,newline=anycrlf\n    abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x85 abc9\n 0: abc1\n 0: abc4\n 0: abc5\n 0: abc9\n\n/^X/m\n    XABC\n 0: X\n\\= Expect no match\n    XABC\\=notbol\nNo match\n\n/(ab|c)(?-1)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        ab\n        Alt\n        c\n        Ket\n        Recurse\n        Ket\n        End\n------------------------------------------------------------------\n    abc\n 0: abc\n 1: ab\n\n/xy(?+1)(abc)/B\n------------------------------------------------------------------\n        Bra\n        xy\n        Recurse\n        CBra 1\n        abc\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    xyabcabc\n 0: xyabcabc\n 1: abc\n\\= Expect no match\n    xyabc\nNo match\n\n/x(?-0)y/\nFailed: error 126 at offset 5: a relative value of zero is not allowed\n        here: x(?-0 |<--| )y\n\n/x(?-1)y/\nFailed: error 115 at offset 5: reference to non-existent subpattern\n        here: x(?-1 |<-->| )y\n\n/x(?+0)y/\nFailed: error 126 at offset 5: a relative value of zero is not allowed\n        here: x(?+0 |<--| )y\n\n/x(?+1)y/\nFailed: error 115 at offset 5: reference to non-existent subpattern\n        here: x(?+1 |<-->| )y\n\n/^(abc)?(?(-1)X|Y)/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Brazero\n        CBra 1\n        abc\n        Ket\n        Cond\n      1 Capture ref\n        X\n        Alt\n        Y\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    abcX\n 0: abcX\n 1: abc\n    Y\n 0: Y\n\\= Expect no match\n    abcY\nNo match\n\n/^((?(+1)X|Y)(abc))+/B\n------------------------------------------------------------------\n        Bra\n        ^\n        CBra 1\n        Cond\n      2 Capture ref\n        X\n        Alt\n        Y\n        Ket\n        CBra 2\n        abc\n        Ket\n        KetRmax\n        Ket\n        End\n------------------------------------------------------------------\n    YabcXabc\n 0: YabcXabc\n 1: Xabc\n 2: abc\n    YabcXabcXabc\n 0: YabcXabcXabc\n 1: Xabc\n 2: abc\n\\= Expect no match\n    XabcXabc\nNo match\n\n/(?(-1)a)/B\nFailed: error 115 at offset 5: reference to non-existent subpattern\n        here: (?(-1 |<-->| )a)\n\n/((?(-1)a))/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Cond\n      1 Capture ref\n        a\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/((?(-2)a))/B\nFailed: error 115 at offset 6: reference to non-existent subpattern\n        here: ((?(-2 |<-->| )a))\n\n/^(?(+1)X|Y)(.)/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Cond\n      1 Capture ref\n        X\n        Alt\n        Y\n        Ket\n        CBra 1\n        Any\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    Y!\n 0: Y!\n 1: !\n\n/(?<A>tom|bon)-\\k{A}/\n    tom-tom\n 0: tom-tom\n 1: tom\n    bon-bon\n 0: bon-bon\n 1: bon\n\\= Expect no match\n    tom-bon\nNo match\n\n/\\g{A/\nFailed: error 142 at offset 4: syntax error in subpattern name (missing terminator?)\n        here: \\g{A |<--|\n\n/(?|(abc)|(xyz))/B\n------------------------------------------------------------------\n        Bra\n        Bra\n        CBra 1\n        abc\n        Ket\n        Alt\n        CBra 1\n        xyz\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n   >abc<\n 0: abc\n 1: abc\n   >xyz<\n 0: xyz\n 1: xyz\n\n/(x)(?|(abc)|(xyz))(x)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        x\n        Ket\n        Bra\n        CBra 2\n        abc\n        Ket\n        Alt\n        CBra 2\n        xyz\n        Ket\n        Ket\n        CBra 3\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    xabcx\n 0: xabcx\n 1: x\n 2: abc\n 3: x\n    xxyzx\n 0: xxyzx\n 1: x\n 2: xyz\n 3: x\n\n/(x)(?|(abc)(pqr)|(xyz))(x)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        x\n        Ket\n        Bra\n        CBra 2\n        abc\n        Ket\n        CBra 3\n        pqr\n        Ket\n        Alt\n        CBra 2\n        xyz\n        Ket\n        Ket\n        CBra 4\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    xabcpqrx\n 0: xabcpqrx\n 1: x\n 2: abc\n 3: pqr\n 4: x\n    xxyzx\n 0: xxyzx\n 1: x\n 2: xyz\n 3: <unset>\n 4: x\n\n/\\H++X/B\n------------------------------------------------------------------\n        Bra\n        \\H++\n        X\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    XXXX\nNo match\n\n/\\H+\\hY/B\n------------------------------------------------------------------\n        Bra\n        \\H++\n        \\h\n        Y\n        Ket\n        End\n------------------------------------------------------------------\n    XXXX Y\n 0: XXXX Y\n\n/\\H+ Y/B\n------------------------------------------------------------------\n        Bra\n        \\H++\n         Y\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\h+A/B\n------------------------------------------------------------------\n        Bra\n        \\h++\n        A\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\v*B/B\n------------------------------------------------------------------\n        Bra\n        \\v*+\n        B\n        Ket\n        End\n------------------------------------------------------------------\n\n#if !ebcdic\n\n/\\V+\\x0a/B\n------------------------------------------------------------------\n        Bra\n        \\V++\n        \\x0a\n        Ket\n        End\n------------------------------------------------------------------\n\n#endif\n\n/A+\\h/B\n------------------------------------------------------------------\n        Bra\n        A++\n        \\h\n        Ket\n        End\n------------------------------------------------------------------\n\n/ *\\H/B\n------------------------------------------------------------------\n        Bra\n         *+\n        \\H\n        Ket\n        End\n------------------------------------------------------------------\n\n/A*\\v/B\n------------------------------------------------------------------\n        Bra\n        A*+\n        \\v\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\x0b*\\V/B\n------------------------------------------------------------------\n        Bra\n        \\x0b*+\n        \\V\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d+\\h/B\n------------------------------------------------------------------\n        Bra\n        \\d++\n        \\h\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d*\\v/B\n------------------------------------------------------------------\n        Bra\n        \\d*+\n        \\v\n        Ket\n        End\n------------------------------------------------------------------\n\n/S+\\h\\S+\\v/B\n------------------------------------------------------------------\n        Bra\n        S++\n        \\h\n        \\S++\n        \\v\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w{3,}\\h\\w+\\v/B\n------------------------------------------------------------------\n        Bra\n        \\w{3}\n        \\w*+\n        \\h\n        \\w++\n        \\v\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\h+\\d\\h+\\w\\h+\\S\\h+\\H/B\n------------------------------------------------------------------\n        Bra\n        \\h++\n        \\d\n        \\h++\n        \\w\n        \\h++\n        \\S\n        \\h++\n        \\H\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\v+\\d\\v+\\w\\v+\\S\\v+\\V/B\n------------------------------------------------------------------\n        Bra\n        \\v++\n        \\d\n        \\v++\n        \\w\n        \\v++\n        \\S\n        \\v++\n        \\V\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\H+\\h\\H+\\d/B\n------------------------------------------------------------------\n        Bra\n        \\H++\n        \\h\n        \\H+\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\V+\\v\\V+\\w/B\n------------------------------------------------------------------\n        Bra\n        \\V++\n        \\v\n        \\V+\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\( (?: [^()]* | (?R) )* \\)/x\n(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(00)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)\\=jitstack=1024\n 0: (0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(00)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)\n\n/[\\E]AAA/\nFailed: error 106 at offset 7: missing terminating ] for character class\n        here: [\\E]AAA |<--|\n\n/[\\Q\\E]AAA/\nFailed: error 106 at offset 9: missing terminating ] for character class\n        here: [\\Q\\E]AAA |<--|\n\n/[^\\E]AAA/\nFailed: error 106 at offset 8: missing terminating ] for character class\n        here: [^\\E]AAA |<--|\n\n/[^\\Q\\E]AAA/\nFailed: error 106 at offset 10: missing terminating ] for character class\n        here: [^\\Q\\E]AAA |<--|\n\n/[\\E^]AAA/\nFailed: error 106 at offset 8: missing terminating ] for character class\n        here: [\\E^]AAA |<--|\n\n/[\\Q\\E^]AAA/\nFailed: error 106 at offset 10: missing terminating ] for character class\n        here: [\\Q\\E^]AAA |<--|\n\n/A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/B\n------------------------------------------------------------------\n        Bra\n        A\n        *PRUNE\n        B\n        *SKIP\n        C\n        *THEN\n        D\n        *COMMIT\n        E\n        *FAIL\n        F\n        *FAIL\n        G\n        *FAIL\n        H\n        *ACCEPT\n        I\n        Ket\n        End\n------------------------------------------------------------------\n\n/^a+(*FAIL)/auto_callout\n\\= Expect no match\n    aaaaaa\n--->aaaaaa\n +0 ^          ^\n +1 ^          a+\n +3 ^     ^    (*FAIL)\n +3 ^    ^     (*FAIL)\n +3 ^   ^      (*FAIL)\n +3 ^  ^       (*FAIL)\n +3 ^ ^        (*FAIL)\n +3 ^^         (*FAIL)\nNo match\n\n/a+b?c+(*FAIL)/auto_callout\n\\= Expect no match\n    aaabccc\n--->aaabccc\n +0 ^           a+\n +2 ^  ^        b?\n +4 ^   ^       c+\n +6 ^      ^    (*FAIL)\n +6 ^     ^     (*FAIL)\n +6 ^    ^      (*FAIL)\n +0  ^          a+\n +2  ^ ^        b?\n +4  ^  ^       c+\n +6  ^     ^    (*FAIL)\n +6  ^    ^     (*FAIL)\n +6  ^   ^      (*FAIL)\n +0   ^         a+\n +2   ^^        b?\n +4   ^ ^       c+\n +6   ^    ^    (*FAIL)\n +6   ^   ^     (*FAIL)\n +6   ^  ^      (*FAIL)\nNo match\n\n/a+b?(*PRUNE)c+(*FAIL)/auto_callout\n\\= Expect no match\n    aaabccc\n--->aaabccc\n +0 ^           a+\n +2 ^  ^        b?\n +4 ^   ^       (*PRUNE)\n+12 ^   ^       c+\n+14 ^      ^    (*FAIL)\n+14 ^     ^     (*FAIL)\n+14 ^    ^      (*FAIL)\n +0  ^          a+\n +2  ^ ^        b?\n +4  ^  ^       (*PRUNE)\n+12  ^  ^       c+\n+14  ^     ^    (*FAIL)\n+14  ^    ^     (*FAIL)\n+14  ^   ^      (*FAIL)\n +0   ^         a+\n +2   ^^        b?\n +4   ^ ^       (*PRUNE)\n+12   ^ ^       c+\n+14   ^    ^    (*FAIL)\n+14   ^   ^     (*FAIL)\n+14   ^  ^      (*FAIL)\nNo match\n\n/a+b?(*COMMIT)c+(*FAIL)/auto_callout\n\\= Expect no match\n    aaabccc\n--->aaabccc\n +0 ^           a+\n +2 ^  ^        b?\n +4 ^   ^       (*COMMIT)\n+13 ^   ^       c+\n+15 ^      ^    (*FAIL)\n+15 ^     ^     (*FAIL)\n+15 ^    ^      (*FAIL)\nNo match\n\n/a+b?(*SKIP)c+(*FAIL)/auto_callout\n\\= Expect no match\n    aaabcccaaabccc\n--->aaabcccaaabccc\n +0 ^                  a+\n +2 ^  ^               b?\n +4 ^   ^              (*SKIP)\n+11 ^   ^              c+\n+13 ^      ^           (*FAIL)\n+13 ^     ^            (*FAIL)\n+13 ^    ^             (*FAIL)\n +0        ^           a+\n +2        ^  ^        b?\n +4        ^   ^       (*SKIP)\n+11        ^   ^       c+\n+13        ^      ^    (*FAIL)\n+13        ^     ^     (*FAIL)\n+13        ^    ^      (*FAIL)\nNo match\n\n/a+b?(*THEN)c+(*FAIL)/auto_callout\n\\= Expect no match\n    aaabccc\n--->aaabccc\n +0 ^           a+\n +2 ^  ^        b?\n +4 ^   ^       (*THEN)\n+11 ^   ^       c+\n+13 ^      ^    (*FAIL)\n+13 ^     ^     (*FAIL)\n+13 ^    ^      (*FAIL)\n +0  ^          a+\n +2  ^ ^        b?\n +4  ^  ^       (*THEN)\n+11  ^  ^       c+\n+13  ^     ^    (*FAIL)\n+13  ^    ^     (*FAIL)\n+13  ^   ^      (*FAIL)\n +0   ^         a+\n +2   ^^        b?\n +4   ^ ^       (*THEN)\n+11   ^ ^       c+\n+13   ^    ^    (*FAIL)\n+13   ^   ^     (*FAIL)\n+13   ^  ^      (*FAIL)\nNo match\n\n/a(*MARK)b/\nFailed: error 166 at offset 7: (*MARK) must have an argument\n        here: a(*MARK |<--| )b\n\n/\\g6666666666/\nFailed: error 161 at offset 12: subpattern number is too big\n        here: ...6666666666 |<--|\n\n/[\\g6666666666]/B\n------------------------------------------------------------------\n        Bra\n        [6g]\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?1)\\c[/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: (?1 |<-->| )\\c[\n\n/.+A/newline=crlf\n\\= Expect no match\n    \\r\\nA\nNo match\n\n/\\nA/newline=crlf\n    \\r\\nA\n 0: \\x0aA\n\n/[\\r\\n]A/newline=crlf\n    \\r\\nA\n 0: \\x0aA\n\n/(\\r|\\n)A/newline=crlf\n    \\r\\nA\n 0: \\x0aA\n 1: \\x0a\n\n/a(*CR)b/\nFailed: error 160 at offset 5: (*VERB) not recognized or malformed\n        here: a(*CR |<--| )b\n\n/(*CR)a.b/\n    a\\nb\n 0: a\\x0ab\n\\= Expect no match\n    a\\rb\nNo match\n\n/(*CR)a.b/newline=lf\n    a\\nb\n 0: a\\x0ab\n\\= Expect no match\n    a\\rb\nNo match\n\n/(*LF)a.b/newline=CRLF\n    a\\rb\n 0: a\\x0db\n\\= Expect no match\n    a\\nb\nNo match\n\n/(*CRLF)a.b/\n    a\\rb\n 0: a\\x0db\n    a\\nb\n 0: a\\x0ab\n\\= Expect no match\n    a\\r\\nb\nNo match\n\n/(*ANYCRLF)a.b/newline=CR\n\\= Expect no match\n    a\\rb\nNo match\n    a\\nb\nNo match\n    a\\r\\nb\nNo match\n\n/(*ANY)a.b/newline=cr\n\\= Expect no match\n    a\\rb\nNo match\n    a\\nb\nNo match\n    a\\r\\nb\nNo match\n    a\\x85b\nNo match\n\n/(*ANY).*/g\n    abc\\r\\ndef\n 0: abc\n 0: \n 0: def\n 0: \n\n/(*ANYCRLF).*/g\n    abc\\r\\ndef\n 0: abc\n 0: \n 0: def\n 0: \n\n/(*CRLF).*/g\n    abc\\r\\ndef\n 0: abc\n 0: \n 0: def\n 0: \n\n/(*NUL)^.*/\n    a\\nb\\x00ccc\n 0: a\\x0ab\n\n/(*NUL)^.*/s\n    a\\nb\\x00ccc\n 0: a\\x0ab\\x00ccc\n\n/^x/m,newline=NUL\n    ab\\x00xy\n 0: x\n\n/'#comment' 0d 0a 00 '^x\\' 0a 'y'/x,newline=nul,hex\n    x\\nyz\n 0: x\\x0ay\n\n/(*NUL)^X\\NY/\n    X\\nY\n 0: X\\x0aY\n    X\\rY\n 0: X\\x0dY\n\\= Expect no match\n    X\\x00Y\nNo match\n\n/a\\Rb/I,bsr=anycrlf\nCapture group count = 0\n\\R matches CR, LF, or CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n    a\\rb\n 0: a\\x0db\n    a\\nb\n 0: a\\x0ab\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n\\= Expect no match\n    a\\x85b\nNo match\n    a\\x0bb\nNo match\n\n/a\\Rb/I,bsr=unicode\nCapture group count = 0\n\\R matches any Unicode newline\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n    a\\rb\n 0: a\\x0db\n    a\\nb\n 0: a\\x0ab\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n    a\\x85b\n 0: a\\x85b\n    a\\x0bb\n 0: a\\x0bb\n\n/a\\R?b/I,bsr=anycrlf\nCapture group count = 0\n\\R matches CR, LF, or CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    a\\rb\n 0: a\\x0db\n    a\\nb\n 0: a\\x0ab\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n\\= Expect no match\n    a\\x85b\nNo match\n    a\\x0bb\nNo match\n\n/a\\R?b/I,bsr=unicode\nCapture group count = 0\n\\R matches any Unicode newline\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    a\\rb\n 0: a\\x0db\n    a\\nb\n 0: a\\x0ab\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n    a\\x85b\n 0: a\\x85b\n    a\\x0bb\n 0: a\\x0bb\n\n/a\\R{2,4}b/I,bsr=anycrlf\nCapture group count = 0\n\\R matches CR, LF, or CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 4\n    a\\r\\n\\nb\n 0: a\\x0d\\x0a\\x0ab\n    a\\n\\r\\rb\n 0: a\\x0a\\x0d\\x0db\n    a\\r\\n\\r\\n\\r\\n\\r\\nb\n 0: a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0ab\n\\= Expect no match\n    a\\x85\\x85b\nNo match\n    a\\x0b\\x0bb\nNo match\n\n/a\\R{2,4}b/I,bsr=unicode\nCapture group count = 0\n\\R matches any Unicode newline\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 4\n    a\\r\\rb\n 0: a\\x0d\\x0db\n    a\\n\\n\\nb\n 0: a\\x0a\\x0a\\x0ab\n    a\\r\\n\\n\\r\\rb\n 0: a\\x0d\\x0a\\x0a\\x0d\\x0db\n    a\\x85\\x85b\n 0: a\\x85\\x85b\n    a\\x0b\\x0bb\n 0: a\\x0b\\x0bb\n\\= Expect no match\n    a\\r\\r\\r\\r\\rb\nNo match\n\n/(*BSR_ANYCRLF)a\\Rb/I\nCapture group count = 0\n\\R matches CR, LF, or CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n    a\\nb\n 0: a\\x0ab\n    a\\rb\n 0: a\\x0db\n\n/(*BSR_UNICODE)a\\Rb/I\nCapture group count = 0\n\\R matches any Unicode newline\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n    a\\x85b\n 0: a\\x85b\n\n/(*BSR_ANYCRLF)(*CRLF)a\\Rb/I\nCapture group count = 0\n\\R matches CR, LF, or CRLF\nForced newline is CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n    a\\nb\n 0: a\\x0ab\n    a\\rb\n 0: a\\x0db\n\n/(*CRLF)(*BSR_UNICODE)a\\Rb/I\nCapture group count = 0\n\\R matches any Unicode newline\nForced newline is CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n    a\\x85b\n 0: a\\x85b\n\n/(*CRLF)(*BSR_ANYCRLF)(*CR)ab/I\nCapture group count = 0\n\\R matches CR, LF, or CRLF\nForced newline is CR\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/(?<a>)(?&)/\nFailed: error 162 at offset 9: subpattern name expected\n        here: (?<a>)(?& |<--| )\n\n/(?<abc>)(?&a)/\nFailed: error 115 at offset 11: reference to non-existent subpattern\n        here: ...?<abc>)(?& |<-->| a)\n\n/(?<a>)(?&aaaaaaaaaaaaaaaaaaaaaaa)/\nFailed: error 115 at offset 9: reference to non-existent subpattern\n        here: (?<a>)(?& |<-->| aaaaaaaaaa...\n\n/(?+-a)/\nFailed: error 129 at offset 4: digit expected after (?+\n        here: (?+- |<--| a)\n\n/(?-+a)/\nFailed: error 111 at offset 4: unrecognized character after (? or (?-\n        here: (?-+ |<--| a)\n\n/(?(-1))/\nFailed: error 115 at offset 5: reference to non-existent subpattern\n        here: (?(-1 |<-->| ))\n\n/(?(+10))/\nFailed: error 115 at offset 4: reference to non-existent subpattern\n        here: (?(+ |<-->| 10))\n\n/(?(10))/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: (?( |<-->| 10))\n\n/(?(+2))()()/\n\n/(?(2))()()/\n\n/\\k''/\nFailed: error 162 at offset 3: subpattern name expected\n        here: \\k' |<--| '\n\n/\\k<>/\nFailed: error 162 at offset 3: subpattern name expected\n        here: \\k< |<--| >\n\n/\\k{}/\nFailed: error 162 at offset 3: subpattern name expected\n        here: \\k{ |<--| }\n\n/\\k/\nFailed: error 169 at offset 2: \\k is not followed by a braced, angle-bracketed, or quoted name\n        here: \\k |<--|\n\n/\\kabc/\nFailed: error 169 at offset 2: \\k is not followed by a braced, angle-bracketed, or quoted name\n        here: \\k |<--| abc\n\n/(?P=)/\nFailed: error 162 at offset 4: subpattern name expected\n        here: (?P= |<--| )\n\n/(?P>)/\nFailed: error 162 at offset 4: subpattern name expected\n        here: (?P> |<--| )\n\n/[[:foo:]]/\nFailed: error 130 at offset 8: unknown POSIX class name\n        here: [[:foo:] |<--| ]\n\n/[[:1234:]]/\nFailed: error 130 at offset 9: unknown POSIX class name\n        here: [[:1234:] |<--| ]\n\n/[[:f\\oo:]]/\nFailed: error 130 at offset 9: unknown POSIX class name\n        here: [[:f\\oo:] |<--| ]\n\n/[[: :]]/\nFailed: error 130 at offset 6: unknown POSIX class name\n        here: [[: :] |<--| ]\n\n/[[:...:]]/\nFailed: error 130 at offset 8: unknown POSIX class name\n        here: [[:...:] |<--| ]\n\n/[[:l\\ower:]]/\nFailed: error 130 at offset 11: unknown POSIX class name\n        here: ...[:l\\ower:] |<--| ]\n\n/[[:abc\\:]]/\nFailed: error 130 at offset 9: unknown POSIX class name\n        here: [[:abc\\:] |<--| ]\n\n/[abc[:x\\]pqr:]]/\nFailed: error 130 at offset 14: unknown POSIX class name\n        here: ...[:x\\]pqr:] |<--| ]\n\n/[[:a\\dz:]]/\nFailed: error 130 at offset 9: unknown POSIX class name\n        here: [[:a\\dz:] |<--| ]\n\n/(^(a|b\\g<-1'c))/\nFailed: error 219 at offset 11: syntax error in subpattern number (missing terminator?)\n        here: ...^(a|b\\g<-1 |<--| 'c))\n\n/^(?+1)(?<a>x|y){0}z/\n    xzxx\n 0: xz\n    yzyy\n 0: yz\n\\= Expect no match\n    xxz\nNo match\n\n/(\\3)(\\1)(a)/\n\\= Expect no match\n    cat\nNo match\n\n/cat[]/B,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        cat\n        []\n        Ket\n        End\n------------------------------------------------------------------\n    cat\\=ph\nPartial match: cat\n\n/(\\3)(\\1)(a)/allow_empty_class,match_unset_backref,dupnames\n    cat\n 0: a\n 1: \n 2: \n 3: a\n\n/TA]/\n    The ACTA] comes\n 0: TA]\n\n/TA]/allow_empty_class,match_unset_backref,dupnames\n    The ACTA] comes\n 0: TA]\n\n/(?2)[]a()b](abc)/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: (?2 |<-->| )[]a()b](a...\n    abcbabc\n\n/(?2)[^]a()b](abc)/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: (?2 |<-->| )[^]a()b](...\n    abcbabc\n\n/(?1)[]a()b](abc)/\n    abcbabc\n 0: abcbabc\n 1: abc\n\\= Expect no match\n    abcXabc\nNo match\n\n/(?1)[^]a()b](abc)/\n    abcXabc\n 0: abcXabc\n 1: abc\n\\= Expect no match\n    abcbabc\nNo match\n\n/(?2)[]a()b](abc)(xyz)/\n    xyzbabcxyz\n 0: xyzbabcxyz\n 1: abc\n 2: xyz\n\n/(?&N)[]a(?<N>)](?<M>abc)/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: (?& |<-->| N)[]a(?<N>...\n   abc<abc\n\n/(?&N)[]a(?<N>)](abc)/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: (?& |<-->| N)[]a(?<N>...\n   abc<abc\n\n/a[]b/\nFailed: error 106 at offset 4: missing terminating ] for character class\n        here: a[]b |<--|\n\n/a[^]b/\nFailed: error 106 at offset 5: missing terminating ] for character class\n        here: a[^]b |<--|\n\n/a[]b/allow_empty_class,match_unset_backref,dupnames\n\\= Expect no match\n    ab\nNo match\n\n/a[]+b/allow_empty_class,match_unset_backref,dupnames\n\\= Expect no match\n    ab\nNo match\n\n/a[]*+b/allow_empty_class,match_unset_backref,dupnames\n    ab\n 0: ab\n\n/a[^]b/allow_empty_class,match_unset_backref,dupnames\n    aXb\n 0: aXb\n    a\\nb\n 0: a\\x0ab\n\\= Expect no match\n    ab\nNo match\n\n/a[^]+b/allow_empty_class,match_unset_backref,dupnames\n    aXb\n 0: aXb\n    a\\nX\\nXb\n 0: a\\x0aX\\x0aXb\n\\= Expect no match\n    ab\nNo match\n\n/a(?!)b/B\n------------------------------------------------------------------\n        Bra\n        a\n        *FAIL\n        b\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?!)?a/B\n------------------------------------------------------------------\n        Bra\n        Brazero\n        Assert not\n        Ket\n        a\n        Ket\n        End\n------------------------------------------------------------------\n    ab\n 0: a\n\n/a(*FAIL)+b/\nFailed: error 109 at offset 9: quantifier does not follow a repeatable item\n        here: a(*FAIL)+ |<--| b\n\n/(abc|pqr|123){0}[xyz]/I\nCapture group count = 1\nStarting code units: x y z\nSubject length lower bound = 1\n\n/(?(?=.*b)b|^)/I,auto_callout\nCapture group count = 0\nMay match empty string\nOptions: auto_callout\nSubject length lower bound = 0\n   adc\n--->adc\n +0 ^       (?\n +2 ^       (?=\n +5 ^       .*\n +7 ^  ^    b\n +7 ^ ^     b\n +7 ^^      b\n +7 ^       b\n+11 ^       ^\n+12 ^       )\n+13 ^       End of pattern\n 0: \n   abc\n--->abc\n +0 ^       (?\n +2 ^       (?=\n +5 ^       .*\n +7 ^  ^    b\n +7 ^ ^     b\n +7 ^^      b\n +8 ^ ^     )\n +9 ^       b\n +0  ^      (?\n +2  ^      (?=\n +5  ^      .*\n +7  ^ ^    b\n +7  ^^     b\n +7  ^      b\n +8  ^^     )\n +9  ^      b\n+10  ^^     |\n+13  ^^     End of pattern\n 0: b\n\n/(?(?=b).*b|^d)/I\nCapture group count = 0\nSubject length lower bound = 1\n\n/(?(?=.*b).*b|^d)/I\nCapture group count = 0\nSubject length lower bound = 1\n\n/xyz/auto_callout\n  xyz\n--->xyz\n +0 ^       x\n +1 ^^      y\n +2 ^ ^     z\n +3 ^  ^    End of pattern\n 0: xyz\n  abcxyz\n--->abcxyz\n +0    ^       x\n +1    ^^      y\n +2    ^ ^     z\n +3    ^  ^    End of pattern\n 0: xyz\n\\= Expect no match\n  abc\nNo match\n  abcxypqr\nNo match\n\n/xyz/auto_callout,no_start_optimize\n  abcxyz\n--->abcxyz\n +0 ^          x\n +0  ^         x\n +0   ^        x\n +0    ^       x\n +1    ^^      y\n +2    ^ ^     z\n +3    ^  ^    End of pattern\n 0: xyz\n\\= Expect no match\n  abc\n--->abc\n +0 ^       x\n +0  ^      x\n +0   ^     x\n +0    ^    x\nNo match\n  abcxypqr\n--->abcxypqr\n +0 ^            x\n +0  ^           x\n +0   ^          x\n +0    ^         x\n +1    ^^        y\n +2    ^ ^       z\n +0     ^        x\n +0      ^       x\n +0       ^      x\n +0        ^     x\n +0         ^    x\nNo match\n\n/(*NO_START_OPT)xyz/auto_callout\n  abcxyz\n--->abcxyz\n+15 ^          x\n+15  ^         x\n+15   ^        x\n+15    ^       x\n+16    ^^      y\n+17    ^ ^     z\n+18    ^  ^    End of pattern\n 0: xyz\n\n/(*NO_AUTO_POSSESS)a+b/B\n------------------------------------------------------------------\n        Bra\n        a+\n        b\n        Ket\n        End\n------------------------------------------------------------------\n\n/xyz/auto_callout,no_start_optimize\n  abcxyz\n--->abcxyz\n +0 ^          x\n +0  ^         x\n +0   ^        x\n +0    ^       x\n +1    ^^      y\n +2    ^ ^     z\n +3    ^  ^    End of pattern\n 0: xyz\n\n/^\"((?(?=[a])[^\"])|b)*\"$/auto_callout\n    \"ab\"\n--->\"ab\"\n +0 ^        ^\n +1 ^        \"\n +2 ^^       (\n +3 ^^       (?\n +5 ^^       (?=\n +8 ^^       [a]\n+11 ^ ^      )\n+12 ^^       [^\"]\n+16 ^ ^      )\n+17 ^ ^      |\n +3 ^ ^      (?\n +5 ^ ^      (?=\n +8 ^ ^      [a]\n+17 ^ ^      |\n+21 ^ ^      \"\n+18 ^ ^      b\n+19 ^  ^     )*\n +3 ^  ^     (?\n +5 ^  ^     (?=\n +8 ^  ^     [a]\n+17 ^  ^     |\n+21 ^  ^     \"\n+22 ^   ^    $\n+23 ^   ^    End of pattern\n 0: \"ab\"\n 1: \n\n/^\"((?(?=[a])[^\"])|b)*\"$/\n    \"ab\"\n 0: \"ab\"\n 1: \n\n/^X(?5)(a)(?|(b)|(q))(c)(d)Y/\nFailed: error 115 at offset 5: reference to non-existent subpattern\n        here: ^X(?5 |<-->| )(a)(?|(b)...\n    XYabcdY\n\n/^X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)/\n    XYabcdY\n 0: XYabcdY\n 1: a\n 2: b\n 3: c\n 4: d\n 5: Y\n\n/Xa{2,4}b/\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/Xa{2,4}?b/\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/Xa{2,4}+b/\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X\\d{2,4}b/\n    X\\=ps\nPartial match: X\n    X3\\=ps\nPartial match: X3\n    X33\\=ps\nPartial match: X33\n    X333\\=ps\nPartial match: X333\n    X3333\\=ps\nPartial match: X3333\n\n/X\\d{2,4}?b/\n    X\\=ps\nPartial match: X\n    X3\\=ps\nPartial match: X3\n    X33\\=ps\nPartial match: X33\n    X333\\=ps\nPartial match: X333\n    X3333\\=ps\nPartial match: X3333\n\n/X\\d{2,4}+b/\n    X\\=ps\nPartial match: X\n    X3\\=ps\nPartial match: X3\n    X33\\=ps\nPartial match: X33\n    X333\\=ps\nPartial match: X333\n    X3333\\=ps\nPartial match: X3333\n\n/X\\D{2,4}b/\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X\\D{2,4}?b/\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X\\D{2,4}+b/\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X[abc]{2,4}b/\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X[abc]{2,4}?b/\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X[abc]{2,4}+b/\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X[^a]{2,4}b/\n    X\\=ps\nPartial match: X\n    Xz\\=ps\nPartial match: Xz\n    Xzz\\=ps\nPartial match: Xzz\n    Xzzz\\=ps\nPartial match: Xzzz\n    Xzzzz\\=ps\nPartial match: Xzzzz\n\n/X[^a]{2,4}?b/\n    X\\=ps\nPartial match: X\n    Xz\\=ps\nPartial match: Xz\n    Xzz\\=ps\nPartial match: Xzz\n    Xzzz\\=ps\nPartial match: Xzzz\n    Xzzzz\\=ps\nPartial match: Xzzzz\n\n/X[^a]{2,4}+b/\n    X\\=ps\nPartial match: X\n    Xz\\=ps\nPartial match: Xz\n    Xzz\\=ps\nPartial match: Xzz\n    Xzzz\\=ps\nPartial match: Xzzz\n    Xzzzz\\=ps\nPartial match: Xzzzz\n\n/(Y)X\\1{2,4}b/\n    YX\\=ps\nPartial match: YX\n    YXY\\=ps\nPartial match: YXY\n    YXYY\\=ps\nPartial match: YXYY\n    YXYYY\\=ps\nPartial match: YXYYY\n    YXYYYY\\=ps\nPartial match: YXYYYY\n\n/(Y)X\\1{2,4}?b/\n    YX\\=ps\nPartial match: YX\n    YXY\\=ps\nPartial match: YXY\n    YXYY\\=ps\nPartial match: YXYY\n    YXYYY\\=ps\nPartial match: YXYYY\n    YXYYYY\\=ps\nPartial match: YXYYYY\n\n/(Y)X\\1{2,4}+b/\n    YX\\=ps\nPartial match: YX\n    YXY\\=ps\nPartial match: YXY\n    YXYY\\=ps\nPartial match: YXYY\n    YXYYY\\=ps\nPartial match: YXYYY\n    YXYYYY\\=ps\nPartial match: YXYYYY\n\n/\\++\\KZ|\\d+X|9+Y/startchar\n    ++++123999\\=ps\nPartial match: 123999\n    ++++123999Y\\=ps\n 0: 999Y\n    ++++Z1234\\=ps\n 0: ++++Z\n    ^^^^\n\n/Z(*F)/\n\\= Expect no match\n    Z\\=ps\nNo match\n    ZA\\=ps\nNo match\n\n/Z(?!)/\n\\= Expect no match\n    Z\\=ps\nNo match\n    ZA\\=ps\nNo match\n\n/dog(sbody)?/\n    dogs\\=ps\n 0: dog\n    dogs\\=ph\nPartial match: dogs\n\n/dog(sbody)??/\n    dogs\\=ps\n 0: dog\n    dogs\\=ph\n 0: dog\n\n/dog|dogsbody/\n    dogs\\=ps\n 0: dog\n    dogs\\=ph\n 0: dog\n\n/dogsbody|dog/\n    dogs\\=ps\n 0: dog\n    dogs\\=ph\nPartial match: dogs\n\n/\\bthe cat\\b/\n    the cat\\=ps\n 0: the cat\n    the cat\\=ph\nPartial match: the cat\n\n/abc/\n   abc\\=ps\n 0: abc\n   abc\\=ph\n 0: abc\n\n/abc\\K123/startchar\n    xyzabc123pqr\n 0: abc123\n    ^^^\n    xyzabc12\\=ps\nPartial match: abc12\n    xyzabc12\\=ph\nPartial match: abc12\n\n/(?<=abc)123/\n    xyzabc123pqr\n 0: 123\n    xyzabc12\\=ps\nPartial match: 12\n    xyzabc12\\=ph\nPartial match: 12\n\n/\\babc\\b/\n    +++abc+++\n 0: abc\n    +++ab\\=ps\nPartial match: ab\n    +++ab\\=ph\nPartial match: ab\n\n/(?&word)(?&element)(?(DEFINE)(?<element><[^m][^>]>[^<])(?<word>\\w*+))/B\n------------------------------------------------------------------\n        Bra\n        Recurse\n        Recurse\n        Cond\n        Cond false\n        CBra 1\n        <\n        [^m] (not)\n        [^>] (not)\n        >\n        [^<] (not)\n        Ket\n        CBra 2\n        \\w*+\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?&word)(?&element)(?(DEFINE)(?<element><[^\\d][^>]>[^<])(?<word>\\w*+))/B\n------------------------------------------------------------------\n        Bra\n        Recurse\n        Recurse\n        Cond\n        Cond false\n        CBra 1\n        <\n        [^0-9]\n        [^>] (not)\n        >\n        [^<] (not)\n        Ket\n        CBra 2\n        \\w*+\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(ab)(x(y)z(cd(*ACCEPT)))pq/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        ab\n        Ket\n        CBra 2\n        x\n        CBra 3\n        y\n        Ket\n        z\n        CBra 4\n        cd\n        Close 4\n        Close 2\n        *ACCEPT\n        Ket\n        Ket\n        pq\n        Ket\n        End\n------------------------------------------------------------------\n\n/abc\\K/aftertext,startchar\n    abcdef\n 0: abc\n    ^^^\n 0+ def\n    abcdef\\=notempty_atstart\n 0: abc\n    ^^^\n 0+ def\n    xyzabcdef\\=notempty_atstart\n 0: abc\n    ^^^\n 0+ def\n\\= Expect no match\n    abcdef\\=notempty\nNo match\n    xyzabcdef\\=notempty\nNo match\n\n/^(?:(?=abc)|abc\\K)/aftertext,startchar\n    abcdef\n 0: \n 0+ abcdef\n    abcdef\\=notempty_atstart\n 0: abc\n    ^^^\n 0+ def\n\\= Expect no match\n    abcdef\\=notempty\nNo match\n\n/a?b?/aftertext\n    xyz\n 0: \n 0+ xyz\n    xyzabc\n 0: \n 0+ xyzabc\n    xyzabc\\=notempty\n 0: ab\n 0+ c\n    xyzabc\\=notempty_atstart\n 0: \n 0+ yzabc\n    xyz\\=notempty_atstart\n 0: \n 0+ yz\n\\= Expect no match\n    xyz\\=notempty\nNo match\n\n/^a?b?/aftertext\n    xyz\n 0: \n 0+ xyz\n    xyzabc\n 0: \n 0+ xyzabc\n\\= Expect no match\n    xyzabc\\=notempty\nNo match\n    xyzabc\\=notempty_atstart\nNo match\n    xyz\\=notempty_atstart\nNo match\n    xyz\\=notempty\nNo match\n\n/^(?<name>a|b\\g<name>c)/\n    aaaa\n 0: a\n 1: a\n    bacxxx\n 0: bac\n 1: bac\n    bbaccxxx\n 0: bbacc\n 1: bbacc\n    bbbacccxx\n 0: bbbaccc\n 1: bbbaccc\n\n/^(?<name>a|b\\g'name'c)/\n    aaaa\n 0: a\n 1: a\n    bacxxx\n 0: bac\n 1: bac\n    bbaccxxx\n 0: bbacc\n 1: bbacc\n    bbbacccxx\n 0: bbbaccc\n 1: bbbaccc\n\n/^(a|b\\g<1>c)/\n    aaaa\n 0: a\n 1: a\n    bacxxx\n 0: bac\n 1: bac\n    bbaccxxx\n 0: bbacc\n 1: bbacc\n    bbbacccxx\n 0: bbbaccc\n 1: bbbaccc\n\n/^(a|b\\g'1'c)/\n    aaaa\n 0: a\n 1: a\n    bacxxx\n 0: bac\n 1: bac\n    bbaccxxx\n 0: bbacc\n 1: bbacc\n    bbbacccxx\n 0: bbbaccc\n 1: bbbaccc\n\n/^(a|b\\g'-1'c)/\n    aaaa\n 0: a\n 1: a\n    bacxxx\n 0: bac\n 1: bac\n    bbaccxxx\n 0: bbacc\n 1: bbacc\n    bbbacccxx\n 0: bbbaccc\n 1: bbbaccc\n\n/(^(a|b\\g<-1>c))/\n    aaaa\n 0: a\n 1: a\n 2: a\n    bacxxx\n 0: bac\n 1: bac\n 2: bac\n    bbaccxxx\n 0: bbacc\n 1: bbacc\n 2: bbacc\n    bbbacccxx\n 0: bbbaccc\n 1: bbbaccc\n 2: bbbaccc\n\n/(?-i:\\g<name>)(?i:(?<name>a))/\n    XaaX\n 0: aa\n 1: a\n    XAAX\n 0: AA\n 1: A\n\n/(?i:\\g<name>)(?-i:(?<name>a))/\n    XaaX\n 0: aa\n 1: a\n\\= Expect no match\n    XAAX\nNo match\n\n/(?-i:\\g<+1>)(?i:(a))/\n    XaaX\n 0: aa\n 1: a\n    XAAX\n 0: AA\n 1: A\n\n/(?=(?<regex>(?#simplesyntax)\\$(?<name>[a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)(?:\\[(?<index>[a-zA-Z0-9_\\x{7f}-\\x{ff}]+|\\$\\g<name>)\\]|->\\g<name>(\\(.*?\\))?)?|(?#simple syntax withbraces)\\$\\{(?:\\g<name>(?<indices>\\[(?:\\g<index>|'(?:\\\\.|[^'\\\\])*'|\"(?:\\g<regex>|\\\\.|[^\"\\\\])*\")\\])?|\\g<complex>|\\$\\{\\g<complex>\\})\\}|(?#complexsyntax)\\{(?<complex>\\$(?<segment>\\g<name>(\\g<indices>*|\\(.*?\\))?)(?:->\\g<segment>)*|\\$\\g<complex>|\\$\\{\\g<complex>\\})\\}))\\{/\n\n/(?<n>a|b|c)\\g<n>*/\n   abc\n 0: abc\n 1: a\n   accccbbb\n 0: accccbbb\n 1: a\n\n/^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)/\n    XYabcdY\n 0: XYabcdY\n 1: a\n 2: b\n 3: <unset>\n 4: <unset>\n 5: c\n 6: d\n 7: Y\n\n/(?<=b(?1)|zzz)(a)/\n    xbaax\n 0: a\n 1: a\n    xzzzax\n 0: a\n 1: a\n\n/(a)(?<=b\\1)/\n\n/(a)(?<=b+(?1))/\nFailed: error 125 at offset 3: length of lookbehind assertion is not limited\n        here: (a) |-->| (?<=b+(?1)...\n\n/(a+)(?<=b(?1))/\nFailed: error 125 at offset 4: length of lookbehind assertion is not limited\n        here: (a+) |-->| (?<=b(?1))\n\n/(a(?<=b(?1)))/\nFailed: error 125 at offset 2: length of lookbehind assertion is not limited\n        here: (a |-->| (?<=b(?1))...\n\n/(?<=b(?1))xyz/\nFailed: error 115 at offset 8: reference to non-existent subpattern\n        here: (?<=b(?1 |<-->| ))xyz\n\n/(?<=b(?1))xyz(b+)pqrstuvew/\nFailed: error 125 at offset 0: length of lookbehind assertion is not limited\n        here: |-->| (?<=b(?1))...\n\n/(a|bc)\\1/I\nCapture group count = 1\nMax back reference = 1\nStarting code units: a b\nSubject length lower bound = 2\n\n/(a|bc)\\1{2,3}/I\nCapture group count = 1\nMax back reference = 1\nStarting code units: a b\nSubject length lower bound = 3\n\n/(a|bc)(?1)/I\nCapture group count = 1\nStarting code units: a b\nSubject length lower bound = 2\n\n/(a|b\\1)(a|b\\1)/I\nCapture group count = 2\nMax back reference = 1\nStarting code units: a b\nSubject length lower bound = 2\n\n/(a|b\\1){2}/I\nCapture group count = 1\nMax back reference = 1\nStarting code units: a b\nSubject length lower bound = 2\n\n/(a|bbbb\\1)(a|bbbb\\1)/I\nCapture group count = 2\nMax back reference = 1\nStarting code units: a b\nSubject length lower bound = 2\n\n/(a|bbbb\\1){2}/I\nCapture group count = 1\nMax back reference = 1\nStarting code units: a b\nSubject length lower bound = 2\n\n/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'F'\nLast code unit = ':'\nSubject length lower bound = 22\n\n/<tr([\\w\\W\\s\\d][^<>]{0,})><TD([\\w\\W\\s\\d][^<>]{0,})>([\\d]{0,}\\.)(.*)((<BR>([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>/Iis\nCapture group count = 11\nOptions: caseless dotall\nFirst code unit = '<'\nLast code unit = '>'\nSubject length lower bound = 47\n\n\"(?>.*/)foo\"I\nCapture group count = 0\nLast code unit = 'o'\nSubject length lower bound = 4\n\n/(?(?=[^a-z]+[a-z])  \\d{2}-[a-z]{3}-\\d{2}  |  \\d{2}-\\d{2}-\\d{2} ) /Ix\nCapture group count = 0\nOptions: extended\nLast code unit = '-'\nSubject length lower bound = 8\n\n/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/Ii\nCapture group count = 1\nOptions: caseless\nStarting code units: A B C a b c\nSubject length lower bound = 1\n\n/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/I\nCapture group count = 0\nStarting code units: c d\nLast code unit = 'b'\nSubject length lower bound = 41\n\n/<a[\\s]+href[\\s]*=[\\s]*          # find <a href=\n ([\\\"\\'])?                       # find single or double quote\n (?(1) (.*?)\\1 | ([^\\s]+))       # if quote found, match up to next matching\n                                 # quote, otherwise match up to next space\n/Iisx\nCapture group count = 3\nMax back reference = 1\nOptions: caseless dotall extended\nFirst code unit = '<'\nLast code unit = '='\nSubject length lower bound = 9\n\n/^(?!:)                       # colon disallowed at start\n  (?:                         # start of item\n    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or\n    (?(1)0 | () ) )           # if null previously matched, fail; else null\n    :                         # followed by colon\n  ){1,7}                      # end item; 1-7 of them required\n  [0-9a-f]{1,4} $             # final hex number at end of string\n  (?(1)|.)                    # check that there was an empty component\n  /Iix\nCapture group count = 1\nMax back reference = 1\nCompile options: caseless extended\nOverall options: anchored caseless extended\nLast code unit = ':'\nSubject length lower bound = 2\n\n/(?|(?<a>A)|(?<a>B))/I\nCapture group count = 1\nNamed capture groups:\n  a   1\nStarting code units: A B\nSubject length lower bound = 1\n    AB\\=copy=a\n 0: A\n 1: A\n  C A (1) a (group 1)\n    BA\\=copy=a\n 0: B\n 1: B\n  C B (1) a (group 1)\n\n/(?|(?<a>A)|(?<b>B))/\nFailed: error 165 at offset 16: different names for subpatterns of the same number are not allowed\n        here: ...a>A)|(?<b> |<--| B))\n\n/(?:a(?<quote> (?<apostrophe>')|(?<realquote>\")) |\n    b(?<quote> (?<apostrophe>')|(?<realquote>\")) )\n    (?('quote')[a-z]+|[0-9]+)/Ix,dupnames\nCapture group count = 6\nMax back reference = 4\nNamed capture groups:\n  apostrophe   2\n  apostrophe   5\n  quote        1\n  quote        4\n  realquote    3\n  realquote    6\nOptions: dupnames extended\nStarting code units: a b\nSubject length lower bound = 3\n    a\"aaaaa\n 0: a\"aaaaa\n 1: \"\n 2: <unset>\n 3: \"\n    b\"aaaaa\n 0: b\"aaaaa\n 1: <unset>\n 2: <unset>\n 3: <unset>\n 4: \"\n 5: <unset>\n 6: \"\n\\= Expect no match\n    b\"11111\nNo match\n    a\"11111\nNo match\n\n/(?:a(?<digit>[0-5])|b(?<digit>[4-7]))c(?(<digit>)d|e)/B,dupnames\n------------------------------------------------------------------\n        Bra\n        Bra\n        a\n        CBra 1\n        [0-5]\n        Ket\n        Alt\n        b\n        CBra 2\n        [4-7]\n        Ket\n        Ket\n        c\n        Cond\n        Capture dnref<digit>2\n        d\n        Alt\n        e\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    a4cd\n 0: a4cd\n 1: 4\n    b4cd\n 0: b4cd\n 1: <unset>\n 2: 4\n\\= Expect no match\n    a6cd\nNo match\n    a6ce\nNo match\n\n/^(?|(a)(b)(c)(?<D>d)|(?<D>e)) (?('D')X|Y)/IBx,dupnames\n------------------------------------------------------------------\n        Bra\n        ^\n        Bra\n        CBra 1\n        a\n        Ket\n        CBra 2\n        b\n        Ket\n        CBra 3\n        c\n        Ket\n        CBra 4\n        d\n        Ket\n        Alt\n        CBra 1\n        e\n        Ket\n        Ket\n        Cond\n        Capture dnref<D>2\n        X\n        Alt\n        Y\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 4\nMax back reference = 4\nNamed capture groups:\n  D   4\n  D   1\nCompile options: dupnames extended\nOverall options: anchored dupnames extended\nStarting code units: a e\nSubject length lower bound = 2\n    abcdX\n 0: abcdX\n 1: a\n 2: b\n 3: c\n 4: d\n    eX\n 0: eX\n 1: e\n\\= Expect no match\n    abcdY\nNo match\n    ey\nNo match\n\n/(?<A>a) (b)(c)  (?<A>d  (?(R&A)$ | (?4)) )/IBx,dupnames\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        CBra 2\n        b\n        Ket\n        CBra 3\n        c\n        Ket\n        CBra 4\n        d\n        Cond\n        Cond dnrec<A>2\n        $\n        Alt\n        Recurse\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 4\nMax back reference = 4\nNamed capture groups:\n  A   1\n  A   4\nOptions: dupnames extended\nFirst code unit = 'a'\nLast code unit = 'd'\nSubject length lower bound = 4\n    abcdd\n 0: abcdd\n 1: a\n 2: b\n 3: c\n 4: dd\n\\= Expect no match\n    abcdde\nNo match\n\n/abcd*/\n    xxxxabcd\\=ps\n 0: abcd\n    xxxxabcd\\=ph\nPartial match: abcd\n\n/abcd*/i\n    xxxxabcd\\=ps\n 0: abcd\n    xxxxabcd\\=ph\nPartial match: abcd\n    XXXXABCD\\=ps\n 0: ABCD\n    XXXXABCD\\=ph\nPartial match: ABCD\n\n/abc\\d*/\n    xxxxabc1\\=ps\n 0: abc1\n    xxxxabc1\\=ph\nPartial match: abc1\n\n/(a)bc\\1*/\n    xxxxabca\\=ps\n 0: abca\n 1: a\n    xxxxabca\\=ph\nPartial match: abca\n\n/abc[de]*/\n    xxxxabcde\\=ps\n 0: abcde\n    xxxxabcde\\=ph\nPartial match: abcde\n\n/(\\3)(\\1)(a)/allow_empty_class,match_unset_backref,dupnames\n    cat\n 0: a\n 1: \n 2: \n 3: a\n\n/(\\3)(\\1)(a)/I,allow_empty_class,match_unset_backref,dupnames\nCapture group count = 3\nMax back reference = 3\nOptions: allow_empty_class dupnames match_unset_backref\nLast code unit = 'a'\nSubject length lower bound = 1\n    cat\n 0: a\n 1: \n 2: \n 3: a\n\n/(\\3)(\\1)(a)/I\nCapture group count = 3\nMax back reference = 3\nLast code unit = 'a'\nSubject length lower bound = 3\n\\= Expect no match\n    cat\nNo match\n\n/i(?(DEFINE)(?<s>a))/I\nCapture group count = 1\nNamed capture groups:\n  s   1\nFirst code unit = 'i'\nSubject length lower bound = 1\n    i\n 0: i\n\n/()i(?(1)a)/I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'i'\nSubject length lower bound = 1\n    ia\n 0: ia\n 1: \n\n/(?i)a(?-i)b|c/B\n------------------------------------------------------------------\n        Bra\n     /i a\n        b\n        Alt\n        c\n        Ket\n        End\n------------------------------------------------------------------\n    XabX\n 0: ab\n    XAbX\n 0: Ab\n    CcC\n 0: c\n\\= Expect no match\n    XABX\nNo match\n\n/(?i)a(?s)b|c/B\n------------------------------------------------------------------\n        Bra\n     /i ab\n        Alt\n     /i c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?i)a(?s-i)b|c/B\n------------------------------------------------------------------\n        Bra\n     /i a\n        b\n        Alt\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(ab(c\\1)d|x){2}$/B\n------------------------------------------------------------------\n        Bra\n        ^\n        CBra 1\n        ab\n        CBra 2\n        c\n        \\g{1}\n        Ket\n        d\n        Alt\n        x\n        Ket\n        CBra 1\n        ab\n        CBra 2\n        c\n        \\g{1}\n        Ket\n        d\n        Alt\n        x\n        Ket\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    xabcxd\n 0: xabcxd\n 1: abcxd\n 2: cx\n\n/^(?&t)*+(?(DEFINE)(?<t>.))$/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Braposzero\n        SBraPos\n        Recurse\n        KetRpos\n        Cond\n        Cond false\n        CBra 1\n        Any\n        Ket\n        Ket\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(?&t)*(?(DEFINE)(?<t>.))$/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Brazero\n        SBra\n        Recurse\n        KetRmax\n        Cond\n        Cond false\n        CBra 1\n        Any\n        Ket\n        Ket\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n# This one is here because Perl gives the match as \"b\" rather than \"ab\". I\n# believe this to be a Perl bug.\n\n/(?>a\\Kb)z|(ab)/\n    ab\\=startchar\n 0: ab\n 1: ab\n\n/(?P<L1>(?P<L2>0|)|(?P>L2)(?P>L1))/\n    abcd\n 0: \n 1: \n 2: \n    0abc\n 0: 0\n 1: 0\n 2: 0\n\n/abc(*MARK:)pqr/\nFailed: error 166 at offset 10: (*MARK) must have an argument\n        here: abc(*MARK: |<--| )pqr\n\n/abc(*:)pqr/\nFailed: error 166 at offset 6: (*MARK) must have an argument\n        here: abc(*: |<--| )pqr\n\n/(*COMMIT:X)/B\n------------------------------------------------------------------\n        Bra\n        *COMMIT X\n        Ket\n        End\n------------------------------------------------------------------\n\n# This should, and does, fail. In Perl, it does not, which I think is a\n# bug because replacing the B in the pattern by (B|D) does make it fail.\n# Turning off Perl's optimization by inserting (??{\"\"}) also makes it fail.\n\n/A(*COMMIT)B/aftertext,mark\n\\= Expect no match\n    ACABX\nNo match\n\n# These should be different, but in Perl they are not, which I think\n# is a bug in Perl.\n\n/A(*THEN)B|A(*THEN)C/mark\n    AC\n 0: AC\n\n/A(*PRUNE)B|A(*PRUNE)C/mark\n\\= Expect no match\n    AC\nNo match\n\n# Mark names can be duplicated. Perl doesn't give a mark for this one,\n# though PCRE2 does.\n\n/^A(*:A)B|^X(*:A)Y/mark\n\\= Expect no match\n    XAQQ\nNo match, mark = A\n\n# COMMIT at the start of a pattern should be the same as an anchor. Perl\n# optimizations defeat this. So does the PCRE2 optimization unless we disable\n# it.\n\n/(*COMMIT)ABC/\n    ABCDEFG\n 0: ABC\n\n/(*COMMIT)ABC/no_start_optimize\n\\= Expect no match\n    DEFGABC\nNo match\n\n/^(ab (c+(*THEN)cd) | xyz)/x\n\\= Expect no match\n    abcccd\nNo match\n\n/^(ab (c+(*PRUNE)cd) | xyz)/x\n\\= Expect no match\n    abcccd\nNo match\n\n/^(ab (c+(*FAIL)cd) | xyz)/x\n\\= Expect no match\n    abcccd\nNo match\n\n# Perl gets some of these wrong\n\n/(?>.(*ACCEPT))*?5/\n    abcde\n 0: a\n\n/(.(*ACCEPT))*?5/\n    abcde\n 0: a\n 1: a\n\n/(.(*ACCEPT))5/\n    abcde\n 0: a\n 1: a\n\n/(.(*ACCEPT))*5/\n    abcde\n 0: a\n 1: a\n\n/A\\NB./B\n------------------------------------------------------------------\n        Bra\n        A\n        Any\n        B\n        Any\n        Ket\n        End\n------------------------------------------------------------------\n    ACBD\n 0: ACBD\n\\= Expect no match\n    A\\nB\nNo match\n    ACB\\n\nNo match\n\n/A\\NB./Bs\n------------------------------------------------------------------\n        Bra\n        A\n        Any\n        B\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n    ACBD\n 0: ACBD\n    ACB\\n\n 0: ACB\\x0a\n\\= Expect no match\n    A\\nB\nNo match\n\n/A\\NB/newline=crlf\n    A\\nB\n 0: A\\x0aB\n    A\\rB\n 0: A\\x0dB\n\\= Expect no match\n    A\\r\\nB\nNo match\n\n/\\R+b/B\n------------------------------------------------------------------\n        Bra\n        \\R++\n        b\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\R+\\n/B\n------------------------------------------------------------------\n        Bra\n        \\R+\n        \\x0a\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\R+\\d/B\n------------------------------------------------------------------\n        Bra\n        \\R++\n        \\d\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d*\\R/B\n------------------------------------------------------------------\n        Bra\n        \\d*+\n        \\R\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\s*\\R/B\n------------------------------------------------------------------\n        Bra\n        \\s*\n        \\R\n        Ket\n        End\n------------------------------------------------------------------\n    \\x20\\x0a\n 0:  \\x0a\n    \\x20\\x0d\n 0:  \\x0d\n    \\x20\\x0d\\x0a\n 0:  \\x0d\\x0a\n\n/\\S*\\R/B\n------------------------------------------------------------------\n        Bra\n        \\S*+\n        \\R\n        Ket\n        End\n------------------------------------------------------------------\n    a\\x0a\n 0: a\\x0a\n\n/X\\h*\\R/B\n------------------------------------------------------------------\n        Bra\n        X\n        \\h*+\n        \\R\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x20\\x0a\n 0: X \\x0a\n\n/X\\H*\\R/B\n------------------------------------------------------------------\n        Bra\n        X\n        \\H*\n        \\R\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x0d\\x0a\n 0: X\\x0d\\x0a\n\n/X\\H+\\R/B\n------------------------------------------------------------------\n        Bra\n        X\n        \\H+\n        \\R\n        Ket\n        End\n------------------------------------------------------------------\n    X\\x0d\\x0a\n 0: X\\x0d\\x0a\n\n/X\\H++\\R/B\n------------------------------------------------------------------\n        Bra\n        X\n        \\H++\n        \\R\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    X\\x0d\\x0a\nNo match\n\n/(?<=abc)def/\n    abc\\=ph\nPartial match: \n\n/abc$/\n    abc\n 0: abc\n    abc\\=ps\n 0: abc\n    abc\\=ph\nPartial match: abc\n\n/abc$/m\n    abc\n 0: abc\n    abc\\n\n 0: abc\n    abc\\=ph\nPartial match: abc\n    abc\\n\\=ph\n 0: abc\n    abc\\=ps\n 0: abc\n    abc\\n\\=ps\n 0: abc\n\n/abc\\z/\n    abc\n 0: abc\n    abc\\=ps\n 0: abc\n    abc\\=ph\nPartial match: abc\n\n/abc\\Z/\n    abc\n 0: abc\n    abc\\=ps\n 0: abc\n    abc\\=ph\nPartial match: abc\n\n/abc\\b/\n    abc\n 0: abc\n    abc\\=ps\n 0: abc\n    abc\\=ph\nPartial match: abc\n\n/abc\\B/\n    abc\\=ps\nPartial match: abc\n    abc\\=ph\nPartial match: abc\n\\= Expect no match\n    abc\nNo match\n\n/.+/\n\\= Bad offsets\n    abc\\=offset=4\nFailed: error -33: bad offset value\n    abc\\=offset=-4\n** Invalid value in \"offset=-4\"\n\\= Valid data\n    abc\\=offset=0\n 0: abc\n    abc\\=offset=1\n 0: bc\n    abc\\=offset=2\n 0: c\n\\= Expect no match\n    abc\\=offset=3\nNo match\n\n#if !ebcdic\n\n/^\\cģ/\nFailed: error 168 at offset 4: \\c must be followed by a printable ASCII character\n        here: ^\\c |<--| \n\n#endif\n\n/^\\c/\nFailed: error 102 at offset 3: \\c at end of pattern\n        here: ^\\c |<--|\n\n/(?P<abn>(?P=abn)xxx)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\g{1}\n        xxx\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a\\1z)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        \\g{1}\n        z\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?P<abn>(?P=abn)(?<badstufxxx)/B\nFailed: error 142 at offset 29: syntax error in subpattern name (missing terminator?)\n        here: ...badstufxxx |<--| )\n\n/(?P<abn>(?P=axn)xxx)/B\nFailed: error 115 at offset 12: reference to non-existent subpattern\n        here: ...P<abn>(?P= |<-->| axn)xxx)\n\n/(?P<abn>(?P=axn)xxx)(?<axn>yy)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\g{2}\n        xxx\n        Ket\n        CBra 2\n        yy\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n# These tests are here because Perl gets the first one wrong.\n\n/(\\R*)(.)/s\n    \\r\\n\n 0: \\x0d\n 1: \n 2: \\x0d\n    \\r\\r\\n\\n\\r\n 0: \\x0d\\x0d\\x0a\\x0a\\x0d\n 1: \\x0d\\x0d\\x0a\\x0a\n 2: \\x0d\n    \\r\\r\\n\\n\\r\\n\n 0: \\x0d\\x0d\\x0a\\x0a\\x0d\n 1: \\x0d\\x0d\\x0a\\x0a\n 2: \\x0d\n\n/(\\R)*(.)/s\n    \\r\\n\n 0: \\x0d\n 1: <unset>\n 2: \\x0d\n    \\r\\r\\n\\n\\r\n 0: \\x0d\\x0d\\x0a\\x0a\\x0d\n 1: \\x0a\n 2: \\x0d\n    \\r\\r\\n\\n\\r\\n\n 0: \\x0d\\x0d\\x0a\\x0a\\x0d\n 1: \\x0a\n 2: \\x0d\n\n/((?>\\r\\n|\\n|\\x0b|\\f|\\r|\\x85)*)(.)/s\n    \\r\\n\n 0: \\x0d\n 1: \n 2: \\x0d\n    \\r\\r\\n\\n\\r\n 0: \\x0d\\x0d\\x0a\\x0a\\x0d\n 1: \\x0d\\x0d\\x0a\\x0a\n 2: \\x0d\n    \\r\\r\\n\\n\\r\\n\n 0: \\x0d\\x0d\\x0a\\x0a\\x0d\n 1: \\x0d\\x0d\\x0a\\x0a\n 2: \\x0d\n\n# -------------\n\n/^abc$/B\n------------------------------------------------------------------\n        Bra\n        ^\n        abc\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/^abc$/Bm\n------------------------------------------------------------------\n        Bra\n     /m ^\n        abc\n     /m $\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(a)*+(\\w)/\n    aaaaX\n 0: aaaaX\n 1: a\n 2: X\n\\= Expect no match\n    aaaa\nNo match\n\n/^(?:a)*+(\\w)/\n    aaaaX\n 0: aaaaX\n 1: X\n\\= Expect no match\n    aaaa\nNo match\n\n/(a)++1234/IB\n------------------------------------------------------------------\n        Bra\n        CBraPos 1\n        a\n        KetRpos\n        1234\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = '4'\nSubject length lower bound = 5\n\n/([abc])++1234/I\nCapture group count = 1\nStarting code units: a b c\nLast code unit = '4'\nSubject length lower bound = 5\n\n/(?<=(abc)+)X/\nFailed: error 125 at offset 0: length of lookbehind assertion is not limited\n        here: |-->| (?<=(abc)+...\n\n/(^ab)/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n\n/(^ab)++/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n\n/(^ab|^)+/I\nCapture group count = 1\nMay match empty string\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 0\n\n/(^ab|^)++/I\nCapture group count = 1\nMay match empty string\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 0\n\n/(?:^ab)/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n\n/(?:^ab)++/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 2\n\n/(?:^ab|^)+/I\nCapture group count = 0\nMay match empty string\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 0\n\n/(?:^ab|^)++/I\nCapture group count = 0\nMay match empty string\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 0\n\n/(.*ab)/I\nCapture group count = 1\nFirst code unit at start or follows newline\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/(.*ab)++/I\nCapture group count = 1\nFirst code unit at start or follows newline\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/(.*ab|.*)+/I\nCapture group count = 1\nMay match empty string\nFirst code unit at start or follows newline\nSubject length lower bound = 0\n\n/(.*ab|.*)++/I\nCapture group count = 1\nMay match empty string\nFirst code unit at start or follows newline\nSubject length lower bound = 0\n\n/(?:.*ab)/I\nCapture group count = 0\nFirst code unit at start or follows newline\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/(?:.*ab)++/I\nCapture group count = 0\nFirst code unit at start or follows newline\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/(?:.*ab|.*)+/I\nCapture group count = 0\nMay match empty string\nFirst code unit at start or follows newline\nSubject length lower bound = 0\n\n/(?:.*ab|.*)++/I\nCapture group count = 0\nMay match empty string\nFirst code unit at start or follows newline\nSubject length lower bound = 0\n\n/(?=a)[bcd]/I\nCapture group count = 0\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/((?=a))[bcd]/I\nCapture group count = 1\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/((?=a))+[bcd]/I\nCapture group count = 1\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/((?=a))++[bcd]/I\nCapture group count = 1\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/(?=a+)[bcd]/Ii\nCapture group count = 0\nOptions: caseless\nFirst code unit = 'a' (caseless)\nSubject length lower bound = 1\n\n/(?=a+?)[bcd]/Ii\nCapture group count = 0\nOptions: caseless\nFirst code unit = 'a' (caseless)\nSubject length lower bound = 1\n\n/(?=a++)[bcd]/Ii\nCapture group count = 0\nOptions: caseless\nFirst code unit = 'a' (caseless)\nSubject length lower bound = 1\n\n/(?=a{3})[bcd]/Ii\nCapture group count = 0\nOptions: caseless\nFirst code unit = 'A' (caseless)\nSubject length lower bound = 1\n\n/(abc)\\1+/\n\n# Perl doesn't get these right IMO (the 3rd is PCRE2-specific)\n\n/(?1)(?:(b(*ACCEPT))){0}/\n    b\n 0: b\n\n/(?1)(?:(b(*ACCEPT))){0}c/\n    bc\n 0: bc\n\\= Expect no match\n    b\nNo match\n\n/(?1)(?:((*ACCEPT))){0}c/\n    c\n 0: c\n    c\\=notempty\n 0: c\n\n/^.*?(?(?=a)a|b(*THEN)c)/\n\\= Expect no match\n    ba\nNo match\n\n/^.*?(?(?=a)a|bc)/\n    ba\n 0: ba\n\n/^.*?(?(?=a)a(*THEN)b|c)/\n\\= Expect no match\n    ac\nNo match\n\n/^.*?(?(?=a)a(*THEN)b)c/\n\\= Expect no match\n    ac\nNo match\n\n/^.*?(a(*THEN)b)c/\n\\= Expect no match\n    aabc\nNo match\n\n/^.*? (?1) c (?(DEFINE)(a(*THEN)b))/x\n    aabc\n 0: aabc\n\n/^.*?(a(*THEN)b|z)c/\n    aabc\n 0: aabc\n 1: ab\n\n/^.*?(z|a(*THEN)b)c/\n    aabc\n 0: aabc\n 1: ab\n\n# These are here because they are not Perl-compatible; the studying means the\n# mark is not seen.\n\n/(*MARK:A)(*SKIP:B)(C|X)/mark\n    C\n 0: C\n 1: C\nMK: A\n\\= Expect no match\n    D\nNo match, mark = A\n\n/(*:A)A+(*SKIP:A)(B|Z)/mark\n\\= Expect no match\n    AAAC\nNo match, mark = A\n\n# ----------------------------\n\n\"(?=a*(*ACCEPT)b)c\"\n    c\n 0: c\n    c\\=notempty\n 0: c\n\n/(?1)c(?(DEFINE)((*ACCEPT)b))/\n    c\n 0: c\n    c\\=notempty\n 0: c\n\n/(?>(*ACCEPT)b)c/\n    c\n 0: \n\\= Expect no match\n    c\\=notempty\nNo match\n\n/(?:(?>(a)))+a%/allaftertext\n    %aa%\n 0: aa%\n 0+ \n 1: a\n 1+ a%\n\n/(a)b|ac/allaftertext\n    ac\\=ovector=1\n 0: ac\n 0+ \n\n/(a)(b)x|abc/allaftertext\n     abc\\=ovector=2\n 0: abc\n 0+ \n\n/(a)bc|(a)(b)\\2/\n    abc\\=ovector=1\nMatched, but too many substrings\n 0: abc\n    abc\\=ovector=2\n 0: abc\n 1: a\n    aba\\=ovector=1\nMatched, but too many substrings\n 0: aba\n    aba\\=ovector=2\nMatched, but too many substrings\n 0: aba\n 1: <unset>\n    aba\\=ovector=3\nMatched, but too many substrings\n 0: aba\n 1: <unset>\n 2: a\n    aba\\=ovector=4\n 0: aba\n 1: <unset>\n 2: a\n 3: b\n\n/(?(DEFINE)(a(?2)|b)(b(?1)|a))(?:(?1)|(?2))/I\nCapture group count = 2\nMay match empty string\nSubject length lower bound = 0\n\n/(a(?2)|b)(b(?1)|a)(?:(?1)|(?2))/I\nCapture group count = 2\nStarting code units: a b\nSubject length lower bound = 3\n\n/(a(?2)|b)(b(?1)|a)(?1)(?2)/I\nCapture group count = 2\nStarting code units: a b\nSubject length lower bound = 4\n\n/(abc)(?1)/I\nCapture group count = 1\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 6\n\n/(?:(foo)|(bar)|(baz))X/allcaptures\n    bazfooX\n 0: fooX\n 1: foo\n 2: <unset>\n 3: <unset>\n    foobazbarX\n 0: barX\n 1: <unset>\n 2: bar\n 3: <unset>\n    barfooX\n 0: fooX\n 1: foo\n 2: <unset>\n 3: <unset>\n    bazX\n 0: bazX\n 1: <unset>\n 2: <unset>\n 3: baz\n    foobarbazX\n 0: bazX\n 1: <unset>\n 2: <unset>\n 3: baz\n    bazfooX\\=ovector=0\n 0: fooX\n 1: foo\n 2: <unset>\n 3: <unset>\n    bazfooX\\=ovector=1\nMatched, but too many substrings\n 0: fooX\n    bazfooX\\=ovector=2\n 0: fooX\n 1: foo\n    bazfooX\\=ovector=3\n 0: fooX\n 1: foo\n 2: <unset>\n\n/(?=abc){3}abc/B\n------------------------------------------------------------------\n        Bra\n        Assert\n        abc\n        Ket\n        Assert\n        abc\n        Ket\n        Assert\n        abc\n        Ket\n        abc\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?=abc)+abc/B\n------------------------------------------------------------------\n        Bra\n        Assert\n        abc\n        Ket\n        Brazero\n        Assert\n        abc\n        Ket\n        abc\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?=abc)++abc/B\n------------------------------------------------------------------\n        Bra\n        Once\n        Assert\n        abc\n        Ket\n        Brazero\n        Assert\n        abc\n        Ket\n        Ket\n        abc\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?=abc){0}xyz/B\n------------------------------------------------------------------\n        Bra\n        Skip zero\n        Assert\n        abc\n        Ket\n        xyz\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?=(a))?./B\n------------------------------------------------------------------\n        Bra\n        Brazero\n        Assert\n        CBra 1\n        a\n        Ket\n        Ket\n        Any\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?=(a))??./B\n------------------------------------------------------------------\n        Bra\n        Braminzero\n        Assert\n        CBra 1\n        a\n        Ket\n        Ket\n        Any\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(?=(a)){0}b(?1)/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Skip zero\n        Assert\n        CBra 1\n        a\n        Ket\n        Ket\n        b\n        Recurse\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?(DEFINE)(a))?b(?1)/B\n------------------------------------------------------------------\n        Bra\n        Cond\n        Cond false\n        CBra 1\n        a\n        Ket\n        Ket\n        b\n        Recurse\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(?=(?1))?[az]([abc])d/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Brazero\n        Assert\n        Recurse\n        Ket\n        [az]\n        CBra 1\n        [a-c]\n        Ket\n        d\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(?!a){0}\\w+/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Skip zero\n        Assert not\n        a\n        Ket\n        \\w++\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?<=(abc))?xyz/B\n------------------------------------------------------------------\n        Bra\n        Brazero\n        Assert back\n      3 Reverse\n        CBra 1\n        abc\n        Ket\n        Ket\n        xyz\n        Ket\n        End\n------------------------------------------------------------------\n\n/[:a[:abc]b:]/B\n------------------------------------------------------------------\n        Bra\n        [:[a-c]\n        b:]\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(a(*:A)(d|e(*:B))z|aeq)/auto_callout\n    adz\n--->adz\n +0 ^       ^\n +1 ^       (\n +2 ^       a\n +3 ^^      (*:A)\n +8 ^^      (\nLatest Mark: A\n +9 ^^      d\n+10 ^ ^     |\n+18 ^ ^     z\n+19 ^  ^    |\n+24 ^  ^    End of pattern\n 0: adz\n 1: adz\n 2: d\n    aez\n--->aez\n +0 ^       ^\n +1 ^       (\n +2 ^       a\n +3 ^^      (*:A)\n +8 ^^      (\nLatest Mark: A\n +9 ^^      d\n+11 ^^      e\n+12 ^ ^     (*:B)\n+17 ^ ^     )\nLatest Mark: B\n+18 ^ ^     z\n+19 ^  ^    |\n+24 ^  ^    End of pattern\n 0: aez\n 1: aez\n 2: e\n    aeqwerty\n--->aeqwerty\n +0 ^            ^\n +1 ^            (\n +2 ^            a\n +3 ^^           (*:A)\n +8 ^^           (\nLatest Mark: A\n +9 ^^           d\n+11 ^^           e\n+12 ^ ^          (*:B)\n+17 ^ ^          )\nLatest Mark: B\n+18 ^ ^          z\n+20 ^            a\n+21 ^^           e\n+22 ^ ^          q\n+23 ^  ^         )\n+24 ^  ^         End of pattern\n 0: aeq\n 1: aeq\n\n/.(*F)/\n\\= Expect no match\n    abc\\=ph\nNo match\n\n/\\btype\\b\\W*?\\btext\\b\\W*?\\bjavascript\\b/I\nCapture group count = 0\nMax lookbehind = 1\nFirst code unit = 't'\nLast code unit = 't'\nSubject length lower bound = 18\n\n/\\btype\\b\\W*?\\btext\\b\\W*?\\bjavascript\\b|\\burl\\b\\W*?\\bshell:|<input\\b.*?\\btype\\b\\W*?\\bimage\\b|\\bonkeyup\\b\\W*?\\=/I\nCapture group count = 0\nMax lookbehind = 1\nStarting code units: < o t u\nSubject length lower bound = 8\n\n/a(*SKIP)c|b(*ACCEPT)|/I,aftertext\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n    a\n 0: \n 0+ \n\n/a(*SKIP)c|b(*ACCEPT)cd(*ACCEPT)|x/I\nCapture group count = 0\nStarting code units: a b x\nSubject length lower bound = 1\n    ax\n 0: x\n\n'a*(*ACCEPT)b'aftertext\n    abc\\=notempty_atstart\n 0: a\n 0+ bc\n    bbb\\=notempty_atstart\n 0: \n 0+ bb\n\\= Expect no match\n    \\=notempty_atstart\nNo match\n\n/(*ACCEPT)a/I,aftertext\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n    bax\n 0: \n 0+ bax\n\n/z(*ACCEPT)a/I,aftertext\nCapture group count = 0\nFirst code unit = 'z'\nSubject length lower bound = 1\n    baxzbx\n 0: z\n 0+ bx\n\n/^(?>a+)(?>(z+))\\w/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Once\n        a++\n        Ket\n        Once\n        CBra 1\n        z++\n        Ket\n        Ket\n        \\w\n        Ket\n        End\n------------------------------------------------------------------\n    aaaazzzzb\n 0: aaaazzzzb\n 1: zzzz\n\\= Expect no match\n    aazz\nNo match\n\n/(.)(\\1|a(?2))/\n    bab\n 0: bab\n 1: b\n 2: ab\n\n/\\1|(.)(?R)\\1/\n    cbbbc\n 0: cbbbc\n 1: c\n\n/(.)((?(1)c|a)|a(?2))/\n\\= Expect no match\n    baa\nNo match\n\n/(?P<abn>(?P=abn)xxx)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        \\g{1}\n        xxx\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a\\1z)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        \\g{1}\n        z\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n#if !ebcdic\n\n/^a\\x41z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aAz\n 0: aAz\n\\= Expect no match\n    ax41z\nNo match\n\n/^a[m\\x41]z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aAz\n 0: aAz\n\n/^a\\x1z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    ax1z\n 0: ax1z\n\n/^a\\u0041z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aAz\n 0: aAz\n\\= Expect no match\n    au0041z\nNo match\n\n/^a[m\\u0041]z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aAz\n 0: aAz\n\n/^a\\u041z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    au041z\n 0: au041z\n\\= Expect no match\n    aAz\nNo match\n\n/^a\\U0041z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aU0041z\n 0: aU0041z\n\\= Expect no match\n    aAz\nNo match\n    \n/^\\u{7a}/alt_bsux\n    u{7a}\n 0: u{7a}\n\\= Expect no match\n    zoo \nNo match\n\n/^\\u{7a}/extra_alt_bsux\n    zoo \n 0: z\n\n#endif\n\n/\\u{}/extra_alt_bsux\n    u{}\n 0: u{}\n\n/\\u{Q12}/extra_alt_bsux\n    --u{Q12}--\n 0: u{Q12}\n\n/\\u{ 12}/extra_alt_bsux\n    --u{ 12}--\n 0: u{ 12}\n\n/\\u{{3}}/extra_alt_bsux\n    --u{{{}--\n 0: u{{{}\n\n/(?(?=c)c|d)++Y/B\n------------------------------------------------------------------\n        Bra\n        BraPos\n        Cond\n        Assert\n        c\n        Ket\n        c\n        Alt\n        d\n        Ket\n        KetRpos\n        Y\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?(?=c)c|d)*+Y/B\n------------------------------------------------------------------\n        Bra\n        Braposzero\n        BraPos\n        Cond\n        Assert\n        c\n        Ket\n        c\n        Alt\n        d\n        Ket\n        KetRpos\n        Y\n        Ket\n        End\n------------------------------------------------------------------\n\n/a[\\NB]c/\nFailed: error 171 at offset 4: \\N is not supported in a class\n        here: a[\\N |<--| B]c\n    aNc\n\n/a[B-\\Nc]/\nFailed: error 171 at offset 6: \\N is not supported in a class\n        here: a[B-\\N |<--| c]\n\n/a[B\\Nc]/\nFailed: error 171 at offset 5: \\N is not supported in a class\n        here: a[B\\N |<--| c]\n\n/(a)(?2){0,1999}?(b)/\n\n/(a)(?(DEFINE)(b))(?2){0,1999}?(?2)/\n\n# This test, with something more complicated than individual letters, causes\n# different behaviour in Perl. Perhaps it disables some optimization; no tag is\n# passed back for the failures, whereas in PCRE2 there is a tag.\n\n/(A|P)(*:A)(B|P) | (X|P)(X|P)(*:B)(Y|P)/x,mark\n    AABC\n 0: AB\n 1: A\n 2: B\nMK: A\n    XXYZ\n 0: XXY\n 1: <unset>\n 2: <unset>\n 3: X\n 4: X\n 5: Y\nMK: B\n\\= Expect no match\n    XAQQ\nNo match, mark = A\n    XAQQXZZ\nNo match, mark = A\n    AXQQQ\nNo match, mark = A\n    AXXQQQ\nNo match, mark = B\n\n# Perl doesn't give marks for these, though it does if the alternatives are\n# replaced by single letters.\n\n/(b|q)(*:m)f|a(*:n)w/mark\n    aw\n 0: aw\nMK: n\n\\= Expect no match\n    abc\nNo match, mark = m\n\n/(q|b)(*:m)f|a(*:n)w/mark\n    aw\n 0: aw\nMK: n\n\\= Expect no match\n    abc\nNo match, mark = m\n\n# After a partial match, the behaviour is as for a failure.\n\n/^a(*:X)bcde/mark\n   abc\\=ps\nPartial match, mark=X: abc\n\n# These are here because Perl doesn't return a mark, except for the first.\n\n/(?=(*:x))(q|)/aftertext,mark\n    abc\n 0: \n 0+ abc\n 1: \nMK: x\n\n/(?=(*:x))((*:y)q|)/aftertext,mark\n    abc\n 0: \n 0+ abc\n 1: \nMK: x\n\n/(?=(*:x))(?:(*:y)q|)/aftertext,mark\n    abc\n 0: \n 0+ abc\nMK: x\n\n/(?=(*:x))(?>(*:y)q|)/aftertext,mark\n    abc\n 0: \n 0+ abc\nMK: x\n\n/(?=a(*:x))(?!a(*:y)c)/aftertext,mark\n    ab\n 0: \n 0+ ab\nMK: x\n\n/(?=a(*:x))(?=a(*:y)c|)/aftertext,mark\n    ab\n 0: \n 0+ ab\nMK: x\n\n/(..)\\1/\n    ab\\=ps\nPartial match: ab\n    aba\\=ps\nPartial match: aba\n    abab\\=ps\n 0: abab\n 1: ab\n\n/(..)\\1/i\n    ab\\=ps\nPartial match: ab\n    abA\\=ps\nPartial match: abA\n    aBAb\\=ps\n 0: aBAb\n 1: aB\n\n/(..)\\1{2,}/\n    ab\\=ps\nPartial match: ab\n    aba\\=ps\nPartial match: aba\n    abab\\=ps\nPartial match: abab\n    ababa\\=ps\nPartial match: ababa\n    ababab\\=ps\n 0: ababab\n 1: ab\n    ababab\\=ph\nPartial match: ababab\n    abababa\\=ps\n 0: ababab\n 1: ab\n    abababa\\=ph\nPartial match: abababa\n\n/(..)\\1{2,}/i\n    ab\\=ps\nPartial match: ab\n    aBa\\=ps\nPartial match: aBa\n    aBAb\\=ps\nPartial match: aBAb\n    AbaBA\\=ps\nPartial match: AbaBA\n    abABAb\\=ps\n 0: abABAb\n 1: ab\n    aBAbaB\\=ph\nPartial match: aBAbaB\n    abABabA\\=ps\n 0: abABab\n 1: ab\n    abaBABa\\=ph\nPartial match: abaBABa\n\n/(..)\\1{2,}?x/i\n    ab\\=ps\nPartial match: ab\n    abA\\=ps\nPartial match: abA\n    aBAb\\=ps\nPartial match: aBAb\n    abaBA\\=ps\nPartial match: abaBA\n    abAbaB\\=ps\nPartial match: abAbaB\n    abaBabA\\=ps\nPartial match: abaBabA\n    abAbABaBx\\=ps\n 0: abAbABaBx\n 1: ab\n\n/^(..)\\1/\n    aba\\=ps\nPartial match: aba\n\n/^(..)\\1{2,3}x/\n    aba\\=ps\nPartial match: aba\n    ababa\\=ps\nPartial match: ababa\n    ababa\\=ph\nPartial match: ababa\n    abababx\n 0: abababx\n 1: ab\n    ababababx\n 0: ababababx\n 1: ab\n\n/^(..)\\1{2,3}?x/\n    aba\\=ps\nPartial match: aba\n    ababa\\=ps\nPartial match: ababa\n    ababa\\=ph\nPartial match: ababa\n    abababx\n 0: abababx\n 1: ab\n    ababababx\n 0: ababababx\n 1: ab\n\n/^(..)(\\1{2,3})ab/\n    abababab\n 0: abababab\n 1: ab\n 2: abab\n\n/^\\R/\n    \\r\\=ps\n 0: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n\n/^\\R{2,3}x/\n    \\r\\=ps\nPartial match: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    \\r\\r\\=ps\nPartial match: \\x0d\\x0d\n    \\r\\r\\=ph\nPartial match: \\x0d\\x0d\n    \\r\\r\\r\\=ps\nPartial match: \\x0d\\x0d\\x0d\n    \\r\\r\\r\\=ph\nPartial match: \\x0d\\x0d\\x0d\n    \\r\\rx\n 0: \\x0d\\x0dx\n    \\r\\r\\rx\n 0: \\x0d\\x0d\\x0dx\n\n/^\\R{2,3}?x/\n    \\r\\=ps\nPartial match: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    \\r\\r\\=ps\nPartial match: \\x0d\\x0d\n    \\r\\r\\=ph\nPartial match: \\x0d\\x0d\n    \\r\\r\\r\\=ps\nPartial match: \\x0d\\x0d\\x0d\n    \\r\\r\\r\\=ph\nPartial match: \\x0d\\x0d\\x0d\n    \\r\\rx\n 0: \\x0d\\x0dx\n    \\r\\r\\rx\n 0: \\x0d\\x0d\\x0dx\n\n/^\\R?x/\n    \\r\\=ps\nPartial match: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    x\n 0: x\n    \\rx\n 0: \\x0dx\n\n/^\\R+x/\n    \\r\\=ps\nPartial match: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    \\r\\n\\=ps\nPartial match: \\x0d\\x0a\n    \\r\\n\\=ph\nPartial match: \\x0d\\x0a\n    \\rx\n 0: \\x0dx\n\n/^a$/newline=crlf\n    a\\r\\=ps\nPartial match: a\\x0d\n    a\\r\\=ph\nPartial match: a\\x0d\n\n/^a$/m,newline=crlf\n    a\\r\\=ps\nPartial match: a\\x0d\n    a\\r\\=ph\nPartial match: a\\x0d\n\n/^(a$|a\\r)/newline=crlf\n    a\\r\\=ps\n 0: a\\x0d\n 1: a\\x0d\n    a\\r\\=ph\nPartial match: a\\x0d\n\n/^(a$|a\\r)/m,newline=crlf\n    a\\r\\=ps\n 0: a\\x0d\n 1: a\\x0d\n    a\\r\\=ph\nPartial match: a\\x0d\n\n/./newline=crlf\n    \\r\\=ps\n 0: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n\n/.{2,3}/newline=crlf\n    \\r\\=ps\nPartial match: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    \\r\\r\\=ps\n 0: \\x0d\\x0d\n    \\r\\r\\=ph\nPartial match: \\x0d\\x0d\n    \\r\\r\\r\\=ps\n 0: \\x0d\\x0d\\x0d\n    \\r\\r\\r\\=ph\nPartial match: \\x0d\\x0d\\x0d\n\n/.{2,3}?/newline=crlf\n    \\r\\=ps\nPartial match: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    \\r\\r\\=ps\n 0: \\x0d\\x0d\n    \\r\\r\\=ph\nPartial match: \\x0d\\x0d\n    \\r\\r\\r\\=ps\n 0: \\x0d\\x0d\n    \\r\\r\\r\\=ph\n 0: \\x0d\\x0d\n\n\"AB(C(D))(E(F))?(?(?=\\2)(?=\\4))\"\n    ABCDGHI\\=ovector=01\nMatched, but too many substrings\n 0: ABCD\n\n# These are all run as real matches in test 1; here we are just checking the\n# settings of the anchored and startline bits.\n\n/(?>.*?a)(?<=ba)/I\nCapture group count = 0\nMax lookbehind = 2\nLast code unit = 'a'\nSubject length lower bound = 1\n\n/(?:.*?a)(?<=ba)/I\nCapture group count = 0\nMax lookbehind = 2\nFirst code unit at start or follows newline\nLast code unit = 'a'\nSubject length lower bound = 1\n\n/.*?a(*PRUNE)b/I\nCapture group count = 0\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/.*?a(*PRUNE)b/Is\nCapture group count = 0\nOptions: dotall\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/^a(*PRUNE)b/Is\nCapture group count = 0\nCompile options: dotall\nOverall options: anchored dotall\nFirst code unit = 'a'\nSubject length lower bound = 2\n\n/.*?a(*SKIP)b/I\nCapture group count = 0\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/(?>.*?a)b/Is\nCapture group count = 0\nOptions: dotall\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/(?>.*?a)b/I\nCapture group count = 0\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/(?>^a)b/Is\nCapture group count = 0\nCompile options: dotall\nOverall options: anchored dotall\nFirst code unit = 'a'\nSubject length lower bound = 2\n\n/(?>.*?)(?<=(abcd)|(wxyz))/I\nCapture group count = 2\nMax lookbehind = 4\nMay match empty string\nSubject length lower bound = 0\n\n/(?>.*)(?<=(abcd)|(wxyz))/I\nCapture group count = 2\nMax lookbehind = 4\nMay match empty string\nSubject length lower bound = 0\n\n\"(?>.*)foo\"I\nCapture group count = 0\nLast code unit = 'o'\nSubject length lower bound = 3\n\n\"(?>.*?)foo\"I\nCapture group count = 0\nLast code unit = 'o'\nSubject length lower bound = 3\n\n/(?>^abc)/Im\nCapture group count = 0\nOptions: multiline\nFirst code unit at start or follows newline\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/(?>.*abc)/Im\nCapture group count = 0\nOptions: multiline\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/(?:.*abc)/Im\nCapture group count = 0\nOptions: multiline\nFirst code unit at start or follows newline\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/(?:(a)+(?C1)bb|aa(?C2)b)/\n    aab\\=callout_capture\nCallout 1: last capture = 1\n 1: a\n--->aab\n    ^ ^     b\nCallout 1: last capture = 1\n 1: a\n--->aab\n    ^^      b\nCallout 2: last capture = 0\n--->aab\n    ^ ^     b\n 0: aab\n\n/(?:(a)++(?C1)bb|aa(?C2)b)/\n    aab\\=callout_capture\nCallout 1: last capture = 1\n 1: a\n--->aab\n    ^ ^     b\nCallout 2: last capture = 0\n--->aab\n    ^ ^     b\n 0: aab\n\n/(?:(?>(a))(?C1)bb|aa(?C2)b)/\n    aab\\=callout_capture\nCallout 1: last capture = 1\n 1: a\n--->aab\n    ^^      b\nCallout 2: last capture = 0\n--->aab\n    ^ ^     b\n 0: aab\n\n/(?:(?1)(?C1)x|ab(?C2))((a)){0}/\n    aab\\=callout_capture\nCallout 1: last capture = 0\n--->aab\n    ^^      x\nCallout 1: last capture = 0\n--->aab\n     ^^     x\nCallout 2: last capture = 0\n--->aab\n     ^ ^    )\n 0: ab\n\n/(?1)(?C1)((a)(?C2)){0}/\n    aab\\=callout_capture\nCallout 2: last capture = 2\n 1: <unset>\n 2: a\n--->aab\n    ^^      ){0}\nCallout 1: last capture = 0\n--->aab\n    ^^      (\n 0: a\n\n/(?:(a)+(?C1)bb|aa(?C2)b)++/\n    aab\\=callout_capture\nCallout 1: last capture = 1\n 1: a\n--->aab\n    ^ ^     b\nCallout 1: last capture = 1\n 1: a\n--->aab\n    ^^      b\nCallout 2: last capture = 0\n--->aab\n    ^ ^     b\n 0: aab\n    aab\\=callout_capture,ovector=1\nCallout 1: last capture = 1\n 1: a\n--->aab\n    ^ ^     b\nCallout 1: last capture = 1\n 1: a\n--->aab\n    ^^      b\nCallout 2: last capture = 0\n--->aab\n    ^ ^     b\n 0: aab\n\n/(ab)x|ab/\n    ab\\=ovector=0\n 0: ab\n    ab\\=ovector=1\n 0: ab\n\n/(?<=123)(*MARK:xx)abc/mark\n    xxxx123a\\=ph\nPartial match, mark=xx: a\n    xxxx123a\\=ps\nPartial match, mark=xx: a\n\n/123\\Kabc/startchar\n    xxxx123a\\=ph\nPartial match: 123a\n    xxxx123a\\=ps\nPartial match: 123a\n\n/^(?(?=a)aa|bb)/auto_callout\n    bb\n--->bb\n +0 ^      ^\n +1 ^      (?\n +3 ^      (?=\n +6 ^      a\n+11 ^      b\n+12 ^^     b\n+13 ^ ^    )\n+14 ^ ^    End of pattern\n 0: bb\n\n/(?C1)^(?C2)(?(?C99)(?=(?C3)a(?C4))(?C5)a(?C6)a(?C7)|(?C8)b(?C9)b(?C10))(?C11)/\n    bb\n--->bb\n  1 ^      ^\n  2 ^      (?\n 99 ^      (?=\n  3 ^      a\n  8 ^      b\n  9 ^^     b\n 10 ^ ^    )\n 11 ^ ^    End of pattern\n 0: bb\n\n# Perl seems to have a bug with this one.\n\n/aaaaa(*COMMIT)(*PRUNE)b|a+c/\n    aaaaaac\n 0: aaaac\n\n# Here are some that Perl treats differently because of the way it handles\n# backtracking verbs.\n\n/(?!a(*COMMIT)b)ac|ad/\n     ac\n 0: ac\n     ad\n 0: ad\n\n/^(?!a(*THEN)b|ac)../\n     ad\n 0: ad\n\\= Expect no match\n     ac\nNo match\n\n/^(?=a(*THEN)b|ac)/\n    ac\n 0: \n\n/\\A.*?(?:a|b(*THEN)c)/\n    ba\n 0: ba\n\n/\\A.*?(?:a|b(*THEN)c)++/\n    ba\n 0: ba\n\n/\\A.*?(?:a|b(*THEN)c|d)/\n    ba\n 0: ba\n\n/(?:(a(*MARK:X)a+(*SKIP:X)b)){0}(?:(?1)|aac)/\n    aac\n 0: aac\n\n/\\A.*?(a|b(*THEN)c)/\n    ba\n 0: ba\n 1: a\n\n/^(A(*THEN)B|A(*THEN)D)/\n    AD\n 0: AD\n 1: AD\n\n/(?!b(*THEN)a)bn|bnn/\n    bnn\n 0: bn\n\n/(?(?=b(*SKIP)a)bn|bnn)/\n    bnn\n 0: bnn\n\n/(?=b(*THEN)a|)bn|bnn/\n    bnn\n 0: bn\n\n# This test causes a segfault with Perl 5.18.0\n\n/^(?=(a)){0}b(?1)/\n    backgammon\n 0: ba\n\n/(?|(?<n>f)|(?<n>b))/I,dupnames\nCapture group count = 1\nNamed capture groups:\n  n   1\nOptions: dupnames\nStarting code units: b f\nSubject length lower bound = 1\n\n/(?<a>abc)(?<a>z)\\k<a>()/IB,dupnames\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        abc\n        Ket\n        CBra 2\n        z\n        Ket\n        \\k<a>2\n        CBra 3\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 3\nMax back reference = 2\nNamed capture groups:\n  a   1\n  a   2\nOptions: dupnames\nFirst code unit = 'a'\nLast code unit = 'z'\nSubject length lower bound = 5\n\n/a*[bcd]/B\n------------------------------------------------------------------\n        Bra\n        a*+\n        [b-d]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[bcd]*a/B\n------------------------------------------------------------------\n        Bra\n        [b-d]*+\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n# A complete set of tests for auto-possessification of character types, but\n# omitting \\C because it might be disabled (it has its own tests).\n\n/\\D+\\D \\D+\\d \\D+\\S \\D+\\s \\D+\\W \\D+\\w \\D+. \\D+\\R \\D+\\H \\D+\\h \\D+\\V \\D+\\v \\D+\\Z \\D+\\z \\D+$/Bx\n------------------------------------------------------------------\n        Bra\n        \\D+\n        \\D\n        \\D++\n        \\d\n        \\D+\n        \\S\n        \\D+\n        \\s\n        \\D+\n        \\W\n        \\D+\n        \\w\n        \\D+\n        Any\n        \\D+\n        \\R\n        \\D+\n        \\H\n        \\D+\n        \\h\n        \\D+\n        \\V\n        \\D+\n        \\v\n        \\D+\n        \\Z\n        \\D++\n        \\z\n        \\D+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d+\\D \\d+\\d \\d+\\S \\d+\\s \\d+\\W \\d+\\w \\d+. \\d+\\R \\d+\\H \\d+\\h \\d+\\V \\d+\\v \\d+\\Z \\d+\\z \\d+$/Bx\n------------------------------------------------------------------\n        Bra\n        \\d++\n        \\D\n        \\d+\n        \\d\n        \\d+\n        \\S\n        \\d++\n        \\s\n        \\d++\n        \\W\n        \\d+\n        \\w\n        \\d+\n        Any\n        \\d++\n        \\R\n        \\d+\n        \\H\n        \\d++\n        \\h\n        \\d+\n        \\V\n        \\d++\n        \\v\n        \\d++\n        \\Z\n        \\d++\n        \\z\n        \\d++\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\S+\\D \\S+\\d \\S+\\S \\S+\\s \\S+\\W \\S+\\w \\S+. \\S+\\R \\S+\\H \\S+\\h \\S+\\V \\S+\\v \\S+\\Z \\S+\\z \\S+$/Bx\n------------------------------------------------------------------\n        Bra\n        \\S+\n        \\D\n        \\S+\n        \\d\n        \\S+\n        \\S\n        \\S++\n        \\s\n        \\S+\n        \\W\n        \\S+\n        \\w\n        \\S+\n        Any\n        \\S++\n        \\R\n        \\S+\n        \\H\n        \\S++\n        \\h\n        \\S+\n        \\V\n        \\S++\n        \\v\n        \\S++\n        \\Z\n        \\S++\n        \\z\n        \\S++\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\s+\\D \\s+\\d \\s+\\S \\s+\\s \\s+\\W \\s+\\w \\s+. \\s+\\R \\s+\\H \\s+\\h \\s+\\V \\s+\\v \\s+\\Z \\s+\\z \\s+$/Bx\n------------------------------------------------------------------\n        Bra\n        \\s+\n        \\D\n        \\s++\n        \\d\n        \\s++\n        \\S\n        \\s+\n        \\s\n        \\s+\n        \\W\n        \\s++\n        \\w\n        \\s+\n        Any\n        \\s+\n        \\R\n        \\s+\n        \\H\n        \\s+\n        \\h\n        \\s+\n        \\V\n        \\s+\n        \\v\n        \\s+\n        \\Z\n        \\s++\n        \\z\n        \\s+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\W+\\D \\W+\\d \\W+\\S \\W+\\s \\W+\\W \\W+\\w \\W+. \\W+\\R \\W+\\H \\W+\\h \\W+\\V \\W+\\v \\W+\\Z \\W+\\z \\W+$/Bx\n------------------------------------------------------------------\n        Bra\n        \\W+\n        \\D\n        \\W++\n        \\d\n        \\W+\n        \\S\n        \\W+\n        \\s\n        \\W+\n        \\W\n        \\W++\n        \\w\n        \\W+\n        Any\n        \\W+\n        \\R\n        \\W+\n        \\H\n        \\W+\n        \\h\n        \\W+\n        \\V\n        \\W+\n        \\v\n        \\W+\n        \\Z\n        \\W++\n        \\z\n        \\W+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w+\\D \\w+\\d \\w+\\S \\w+\\s \\w+\\W \\w+\\w \\w+. \\w+\\R \\w+\\H \\w+\\h \\w+\\V \\w+\\v \\w+\\Z \\w+\\z \\w+$/Bx\n------------------------------------------------------------------\n        Bra\n        \\w+\n        \\D\n        \\w+\n        \\d\n        \\w+\n        \\S\n        \\w++\n        \\s\n        \\w++\n        \\W\n        \\w+\n        \\w\n        \\w+\n        Any\n        \\w++\n        \\R\n        \\w+\n        \\H\n        \\w++\n        \\h\n        \\w+\n        \\V\n        \\w++\n        \\v\n        \\w++\n        \\Z\n        \\w++\n        \\z\n        \\w++\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\R+\\D \\R+\\d \\R+\\S \\R+\\s \\R+\\W \\R+\\w \\R+. \\R+\\R \\R+\\H \\R+\\h \\R+\\V \\R+\\v \\R+\\Z \\R+\\z \\R+$/Bx\n------------------------------------------------------------------\n        Bra\n        \\R+\n        \\D\n        \\R++\n        \\d\n        \\R+\n        \\S\n        \\R++\n        \\s\n        \\R+\n        \\W\n        \\R++\n        \\w\n        \\R++\n        Any\n        \\R+\n        \\R\n        \\R+\n        \\H\n        \\R++\n        \\h\n        \\R+\n        \\V\n        \\R+\n        \\v\n        \\R+\n        \\Z\n        \\R++\n        \\z\n        \\R+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\H+\\D \\H+\\d \\H+\\S \\H+\\s \\H+\\W \\H+\\w \\H+. \\H+\\R \\H+\\H \\H+\\h \\H+\\V \\H+\\v \\H+\\Z \\H+\\z \\H+$/Bx\n------------------------------------------------------------------\n        Bra\n        \\H+\n        \\D\n        \\H+\n        \\d\n        \\H+\n        \\S\n        \\H+\n        \\s\n        \\H+\n        \\W\n        \\H+\n        \\w\n        \\H+\n        Any\n        \\H+\n        \\R\n        \\H+\n        \\H\n        \\H++\n        \\h\n        \\H+\n        \\V\n        \\H+\n        \\v\n        \\H+\n        \\Z\n        \\H++\n        \\z\n        \\H+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\h+\\D \\h+\\d \\h+\\S \\h+\\s \\h+\\W \\h+\\w \\h+. \\h+\\R \\h+\\H \\h+\\h \\h+\\V \\h+\\v \\h+\\Z \\h+\\z \\h+$/Bx\n------------------------------------------------------------------\n        Bra\n        \\h+\n        \\D\n        \\h++\n        \\d\n        \\h++\n        \\S\n        \\h+\n        \\s\n        \\h+\n        \\W\n        \\h++\n        \\w\n        \\h+\n        Any\n        \\h++\n        \\R\n        \\h++\n        \\H\n        \\h+\n        \\h\n        \\h+\n        \\V\n        \\h++\n        \\v\n        \\h+\n        \\Z\n        \\h++\n        \\z\n        \\h+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\V+\\D \\V+\\d \\V+\\S \\V+\\s \\V+\\W \\V+\\w \\V+. \\V+\\R \\V+\\H \\V+\\h \\V+\\V \\V+\\v \\V+\\Z \\V+\\z \\V+$/Bx\n------------------------------------------------------------------\n        Bra\n        \\V+\n        \\D\n        \\V+\n        \\d\n        \\V+\n        \\S\n        \\V+\n        \\s\n        \\V+\n        \\W\n        \\V+\n        \\w\n        \\V+\n        Any\n        \\V++\n        \\R\n        \\V+\n        \\H\n        \\V+\n        \\h\n        \\V+\n        \\V\n        \\V++\n        \\v\n        \\V+\n        \\Z\n        \\V++\n        \\z\n        \\V+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\v+\\D \\v+\\d \\v+\\S \\v+\\s \\v+\\W \\v+\\w \\v+. \\v+\\R \\v+\\H \\v+\\h \\v+\\V \\v+\\v \\v+\\Z \\v+\\z \\v+$/Bx\n------------------------------------------------------------------\n        Bra\n        \\v+\n        \\D\n        \\v++\n        \\d\n        \\v++\n        \\S\n        \\v+\n        \\s\n        \\v+\n        \\W\n        \\v++\n        \\w\n        \\v+\n        Any\n        \\v+\n        \\R\n        \\v+\n        \\H\n        \\v++\n        \\h\n        \\v++\n        \\V\n        \\v+\n        \\v\n        \\v+\n        \\Z\n        \\v++\n        \\z\n        \\v+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/ a+\\D  a+\\d  a+\\S  a+\\s  a+\\W  a+\\w  a+.  a+\\R  a+\\H  a+\\h  a+\\V  a+\\v  a+\\Z  a+\\z  a+$/Bx\n------------------------------------------------------------------\n        Bra\n        a+\n        \\D\n        a++\n        \\d\n        a+\n        \\S\n        a++\n        \\s\n        a++\n        \\W\n        a+\n        \\w\n        a+\n        Any\n        a++\n        \\R\n        a+\n        \\H\n        a++\n        \\h\n        a+\n        \\V\n        a++\n        \\v\n        a++\n        \\Z\n        a++\n        \\z\n        a++\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\n+\\D \\n+\\d \\n+\\S \\n+\\s \\n+\\W \\n+\\w \\n+. \\n+\\R \\n+\\H \\n+\\h \\n+\\V \\n+\\v \\n+\\Z \\n+\\z \\n+$/Bx\n------------------------------------------------------------------\n        Bra\n        \\x0a+\n        \\D\n        \\x0a++\n        \\d\n        \\x0a++\n        \\S\n        \\x0a+\n        \\s\n        \\x0a+\n        \\W\n        \\x0a++\n        \\w\n        \\x0a+\n        Any\n        \\x0a+\n        \\R\n        \\x0a+\n        \\H\n        \\x0a++\n        \\h\n        \\x0a++\n        \\V\n        \\x0a+\n        \\v\n        \\x0a+\n        \\Z\n        \\x0a++\n        \\z\n        \\x0a+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/ .+\\D  .+\\d  .+\\S  .+\\s  .+\\W  .+\\w  .+.  .+\\R  .+\\H  .+\\h  .+\\V  .+\\v  .+\\Z  .+\\z  .+$/Bx\n------------------------------------------------------------------\n        Bra\n        Any+\n        \\D\n        Any+\n        \\d\n        Any+\n        \\S\n        Any+\n        \\s\n        Any+\n        \\W\n        Any+\n        \\w\n        Any+\n        Any\n        Any++\n        \\R\n        Any+\n        \\H\n        Any+\n        \\h\n        Any+\n        \\V\n        Any+\n        \\v\n        Any+\n        \\Z\n        Any++\n        \\z\n        Any+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/ .+\\D  .+\\d  .+\\S  .+\\s  .+\\W  .+\\w  .+.  .+\\R  .+\\H  .+\\h  .+\\V  .+\\v  .+\\Z  .+\\z  .+$/Bsx\n------------------------------------------------------------------\n        Bra\n        AllAny+\n        \\D\n        AllAny+\n        \\d\n        AllAny+\n        \\S\n        AllAny+\n        \\s\n        AllAny+\n        \\W\n        AllAny+\n        \\w\n        AllAny+\n        AllAny\n        AllAny+\n        \\R\n        AllAny+\n        \\H\n        AllAny+\n        \\h\n        AllAny+\n        \\V\n        AllAny+\n        \\v\n        AllAny+\n        \\Z\n        AllAny++\n        \\z\n        AllAny+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/ \\D+$  \\d+$  \\S+$  \\s+$  \\W+$  \\w+$  \\R+$  \\H+$  \\h+$  \\V+$ \\v+$  a+$   \\n+$  .+$  .+$/Bmx\n------------------------------------------------------------------\n        Bra\n        \\D+\n     /m $\n        \\d++\n     /m $\n        \\S++\n     /m $\n        \\s+\n     /m $\n        \\W+\n     /m $\n        \\w++\n     /m $\n        \\R+\n     /m $\n        \\H+\n     /m $\n        \\h+\n     /m $\n        \\V+\n     /m $\n        \\v+\n     /m $\n        a+\n     /m $\n        \\x0a+\n     /m $\n        Any+\n     /m $\n        Any+\n     /m $\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?=a+)a(a+)++a/B\n------------------------------------------------------------------\n        Bra\n        Assert\n        a++\n        Ket\n        a\n        CBraPos 1\n        a+\n        KetRpos\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n/a+(bb|cc)a+(?:bb|cc)a+(?>bb|cc)a+(?:bb|cc)+a+(aa)a+(?:bb|aa)/B\n------------------------------------------------------------------\n        Bra\n        a++\n        CBra 1\n        bb\n        Alt\n        cc\n        Ket\n        a++\n        Bra\n        bb\n        Alt\n        cc\n        Ket\n        a++\n        Once\n        bb\n        Alt\n        cc\n        Ket\n        a++\n        Bra\n        bb\n        Alt\n        cc\n        KetRmax\n        a+\n        CBra 2\n        aa\n        Ket\n        a+\n        Bra\n        bb\n        Alt\n        aa\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/a+(bb|cc)?#a+(?:bb|cc)??#a+(?:bb|cc)?+#a+(?:bb|cc)*#a+(bb|cc)?a#a+(?:aa)?/B\n------------------------------------------------------------------\n        Bra\n        a++\n        Brazero\n        CBra 1\n        bb\n        Alt\n        cc\n        Ket\n        #\n        a++\n        Braminzero\n        Bra\n        bb\n        Alt\n        cc\n        Ket\n        #\n        a++\n        Once\n        Brazero\n        Bra\n        bb\n        Alt\n        cc\n        Ket\n        Ket\n        #\n        a++\n        Brazero\n        Bra\n        bb\n        Alt\n        cc\n        KetRmax\n        #\n        a+\n        Brazero\n        CBra 2\n        bb\n        Alt\n        cc\n        Ket\n        a#\n        a+\n        Brazero\n        Bra\n        aa\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/a+(?:bb)?a#a+(?:|||)#a+(?:|b)a#a+(?:|||)?a/B\n------------------------------------------------------------------\n        Bra\n        a+\n        Brazero\n        Bra\n        bb\n        Ket\n        a#\n        a++\n        Bra\n        Alt\n        Alt\n        Alt\n        Ket\n        #\n        a+\n        Bra\n        Alt\n        b\n        Ket\n        a#\n        a+\n        Brazero\n        Bra\n        Alt\n        Alt\n        Alt\n        Ket\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n/[ab]*/B\n------------------------------------------------------------------\n        Bra\n        [ab]*+\n        Ket\n        End\n------------------------------------------------------------------\n    aaaa\n 0: aaaa\n\n/[ab]*?/B\n------------------------------------------------------------------\n        Bra\n        [ab]*?\n        Ket\n        End\n------------------------------------------------------------------\n    aaaa\n 0: \n\n/[ab]?/B\n------------------------------------------------------------------\n        Bra\n        [ab]?+\n        Ket\n        End\n------------------------------------------------------------------\n    aaaa\n 0: a\n\n/[ab]??/B\n------------------------------------------------------------------\n        Bra\n        [ab]??\n        Ket\n        End\n------------------------------------------------------------------\n    aaaa\n 0: \n\n/[ab]+/B\n------------------------------------------------------------------\n        Bra\n        [ab]++\n        Ket\n        End\n------------------------------------------------------------------\n    aaaa\n 0: aaaa\n\n/[ab]+?/B\n------------------------------------------------------------------\n        Bra\n        [ab]+?\n        Ket\n        End\n------------------------------------------------------------------\n    aaaa\n 0: a\n\n/[ab]{2,3}/B\n------------------------------------------------------------------\n        Bra\n        [ab]{2,3}+\n        Ket\n        End\n------------------------------------------------------------------\n    aaaa\n 0: aaa\n\n/[ab]{2,3}?/B\n------------------------------------------------------------------\n        Bra\n        [ab]{2,3}?\n        Ket\n        End\n------------------------------------------------------------------\n    aaaa\n 0: aa\n\n/[ab]{2,}/B\n------------------------------------------------------------------\n        Bra\n        [ab]{2,}+\n        Ket\n        End\n------------------------------------------------------------------\n    aaaa\n 0: aaaa\n\n/[ab]{2,}?/B\n------------------------------------------------------------------\n        Bra\n        [ab]{2,}?\n        Ket\n        End\n------------------------------------------------------------------\n    aaaa\n 0: aa\n\n/\\d+\\s{0,5}=\\s*\\S?=\\w{0,4}\\W*/B\n------------------------------------------------------------------\n        Bra\n        \\d++\n        \\s{0,5}+\n        =\n        \\s*+\n        \\S?\n        =\n        \\w{0,4}+\n        \\W*+\n        Ket\n        End\n------------------------------------------------------------------\n\n/[a-d]{5,12}[e-z0-9]*#[^a-z]+[b-y]*a[2-7]?[^0-9a-z]+/B\n------------------------------------------------------------------\n        Bra\n        [a-d]{5,12}+\n        [0-9e-z]*+\n        #\n        [^a-z]++\n        [b-y]*+\n        a\n        [2-7]?+\n        [^0-9a-z]++\n        Ket\n        End\n------------------------------------------------------------------\n\n/[a-z]*\\s#[ \\t]?\\S#[a-c]*\\S#[C-G]+?\\d#[4-8]*\\D#[4-9,]*\\D#[!$]{0,5}\\w#[M-Xf-l]+\\W#[a-c,]?\\W/B\n------------------------------------------------------------------\n        Bra\n        [a-z]*+\n        \\s\n        #\n        [\\x09 ]?+\n        \\S\n        #\n        [a-c]*\n        \\S\n        #\n        [C-G]++\n        \\d\n        #\n        [4-8]*+\n        \\D\n        #\n        [,4-9]*\n        \\D\n        #\n        [!$]{0,5}+\n        \\w\n        #\n        [M-Xf-l]++\n        \\W\n        #\n        [,a-c]?\n        \\W\n        Ket\n        End\n------------------------------------------------------------------\n\n/a+(aa|bb)*c#a*(bb|cc)*a#a?(bb|cc)*d#[a-f]*(g|hh)*f/B\n------------------------------------------------------------------\n        Bra\n        a+\n        Brazero\n        CBra 1\n        aa\n        Alt\n        bb\n        KetRmax\n        c#\n        a*\n        Brazero\n        CBra 2\n        bb\n        Alt\n        cc\n        KetRmax\n        a#\n        a?+\n        Brazero\n        CBra 3\n        bb\n        Alt\n        cc\n        KetRmax\n        d#\n        [a-f]*\n        Brazero\n        CBra 4\n        g\n        Alt\n        hh\n        KetRmax\n        f\n        Ket\n        End\n------------------------------------------------------------------\n\n/[a-f]*(g|hh|i)*i#[a-x]{4,}(y{0,6})*y#[a-k]+(ll|mm)+n/B\n------------------------------------------------------------------\n        Bra\n        [a-f]*+\n        Brazero\n        CBra 1\n        g\n        Alt\n        hh\n        Alt\n        i\n        KetRmax\n        i#\n        [a-x]{4,}\n        Brazero\n        SCBra 2\n        y{0,6}\n        KetRmax\n        y#\n        [a-k]++\n        CBra 3\n        ll\n        Alt\n        mm\n        KetRmax\n        n\n        Ket\n        End\n------------------------------------------------------------------\n\n/[a-f]*(?>gg|hh)+#[a-f]*(?>gg|hh)?#[a-f]*(?>gg|hh)*a#[a-f]*(?>gg|hh)*h/B\n------------------------------------------------------------------\n        Bra\n        [a-f]*+\n        Once\n        gg\n        Alt\n        hh\n        KetRmax\n        #\n        [a-f]*+\n        Brazero\n        Once\n        gg\n        Alt\n        hh\n        Ket\n        #\n        [a-f]*\n        Brazero\n        Once\n        gg\n        Alt\n        hh\n        KetRmax\n        a#\n        [a-f]*+\n        Brazero\n        Once\n        gg\n        Alt\n        hh\n        KetRmax\n        h\n        Ket\n        End\n------------------------------------------------------------------\n\n/[a-c]*d/IB\n------------------------------------------------------------------\n        Bra\n        [a-c]*+\n        d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: a b c d\nLast code unit = 'd'\nSubject length lower bound = 1\n\n/[a-c]+d/IB\n------------------------------------------------------------------\n        Bra\n        [a-c]++\n        d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: a b c\nLast code unit = 'd'\nSubject length lower bound = 2\n\n/[a-c]?d/IB\n------------------------------------------------------------------\n        Bra\n        [a-c]?+\n        d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: a b c d\nLast code unit = 'd'\nSubject length lower bound = 1\n\n/[a-c]{4,6}d/IB\n------------------------------------------------------------------\n        Bra\n        [a-c]{4,6}+\n        d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: a b c\nLast code unit = 'd'\nSubject length lower bound = 5\n\n/[a-c]{0,6}d/IB\n------------------------------------------------------------------\n        Bra\n        [a-c]{0,6}+\n        d\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: a b c d\nLast code unit = 'd'\nSubject length lower bound = 1\n\n# End of special auto-possessive tests\n\n/^A\\o{1239}B/\nFailed: error 164 at offset 9: non-octal character in \\o{} (closing brace missing?)\n        here: ^A\\o{1239 |<--| }B\n    A\\123B\n\n/^A\\oB/\nFailed: error 155 at offset 4: missing opening brace after \\o\n        here: ^A\\o |<--| B\n\n/^A\\x{zz}B/\nFailed: error 167 at offset 6: non-hex character in \\x{} (closing brace missing?)\n        here: ^A\\x{z |<--| z}B\n\n/^A\\x{12Z/\nFailed: error 167 at offset 8: non-hex character in \\x{} (closing brace missing?)\n        here: ^A\\x{12Z |<--|\n\n/^A\\x{/\nFailed: error 178 at offset 5: digits missing after \\x or in \\x{} or \\o{} or \\N{U+}\n        here: ^A\\x{ |<--|\n\n/[ab]++/B,no_auto_possess\n------------------------------------------------------------------\n        Bra\n        [ab]++\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^ab]*+/B,no_auto_possess\n------------------------------------------------------------------\n        Bra\n        [^ab]*+\n        Ket\n        End\n------------------------------------------------------------------\n\n/a{4}+/B,no_auto_possess\n------------------------------------------------------------------\n        Bra\n        a{4}\n        Ket\n        End\n------------------------------------------------------------------\n\n/a{4}+/Bi,no_auto_possess\n------------------------------------------------------------------\n        Bra\n     /i a{4}\n        Ket\n        End\n------------------------------------------------------------------\n\n/[a-[:digit:]]+/\nFailed: error 150 at offset 12: invalid range in character class\n        here: ...-[:digit:] |<--| ]+\n\n/[A-[:digit:]]+/\nFailed: error 150 at offset 12: invalid range in character class\n        here: ...-[:digit:] |<--| ]+\n\n/[a-[.xxx.]]+/\nFailed: error 150 at offset 10: invalid range in character class\n        here: [a-[.xxx.] |<--| ]+\n\n/[a-[=xxx=]]+/\nFailed: error 150 at offset 10: invalid range in character class\n        here: [a-[=xxx=] |<--| ]+\n\n#if !ebcdic\n\n/[a-[!xxx!]]+/\nFailed: error 108 at offset 4: range out of order in character class\n        here: [a-[ |<--| !xxx!]]+\n\n/[A-[!xxx!]]+/\n    A]]]\n 0: A]]]\n\n#endif\n\n/[a-\\d]+/\nFailed: error 150 at offset 5: invalid range in character class\n        here: [a-\\d |<--| ]+\n\n/(?<0abc>xx)/\nFailed: error 144 at offset 4: subpattern name must start with a non-digit\n        here: (?<0 |<--| abc>xx)\n\n/(?&1abc)xx(?<1abc>y)/\nFailed: error 144 at offset 4: subpattern name must start with a non-digit\n        here: (?&1 |<--| abc)xx(?<1...\n\n/(?<ab-cd>xx)/\nFailed: error 142 at offset 5: syntax error in subpattern name (missing terminator?)\n        here: (?<ab |<--| -cd>xx)\n\n/(?'0abc'xx)/\nFailed: error 144 at offset 4: subpattern name must start with a non-digit\n        here: (?'0 |<--| abc'xx)\n\n/(?P<0abc>xx)/\nFailed: error 144 at offset 5: subpattern name must start with a non-digit\n        here: (?P<0 |<--| abc>xx)\n\n/\\k<5ghj>/\nFailed: error 144 at offset 4: subpattern name must start with a non-digit\n        here: \\k<5 |<--| ghj>\n\n/\\k'5ghj'/\nFailed: error 144 at offset 4: subpattern name must start with a non-digit\n        here: \\k'5 |<--| ghj'\n\n/\\k{2fgh}/\nFailed: error 144 at offset 4: subpattern name must start with a non-digit\n        here: \\k{2 |<--| fgh}\n\n/(?P=8yuki)/\nFailed: error 144 at offset 5: subpattern name must start with a non-digit\n        here: (?P=8 |<--| yuki)\n\n/\\g{4df}/\nFailed: error 219 at offset 4: syntax error in subpattern number (missing terminator?)\n        here: \\g{4 |<--| df}\n\n/(?&1abc)xx(?<1abc>y)/\nFailed: error 144 at offset 4: subpattern name must start with a non-digit\n        here: (?&1 |<--| abc)xx(?<1...\n\n/(?P>1abc)xx(?<1abc>y)/\nFailed: error 144 at offset 5: subpattern name must start with a non-digit\n        here: (?P>1 |<--| abc)xx(?<1...\n\n/\\g'3gh'/\nFailed: error 219 at offset 4: syntax error in subpattern number (missing terminator?)\n        here: \\g'3 |<--| gh'\n\n/\\g<5fg>/\nFailed: error 219 at offset 4: syntax error in subpattern number (missing terminator?)\n        here: \\g<5 |<--| fg>\n\n/(?(<4gh>)abc)/\nFailed: error 144 at offset 5: subpattern name must start with a non-digit\n        here: (?(<4 |<--| gh>)abc)\n\n/(?('4gh')abc)/\nFailed: error 144 at offset 5: subpattern name must start with a non-digit\n        here: (?('4 |<--| gh')abc)\n\n/(?(4gh)abc)/\nFailed: error 124 at offset 4: missing closing parenthesis for condition\n        here: (?(4 |<--| gh)abc)\n\n/(?(R&6yh)abc)/\nFailed: error 144 at offset 6: subpattern name must start with a non-digit\n        here: (?(R&6 |<--| yh)abc)\n\n/(((a\\2)|(a*)\\g<-1>))*a?/B\n------------------------------------------------------------------\n        Bra\n        Brazero\n        SCBra 1\n        CBra 2\n        CBra 3\n        a\n        \\g{2}\n        Ket\n        Alt\n        CBra 4\n        a*\n        Ket\n        Recurse\n        Ket\n        KetRmax\n        a?+\n        Ket\n        End\n------------------------------------------------------------------\n\n# Test the ugly \"start or end of word\" compatibility syntax.\n\n/[[:<:]]red[[:>:]]/B\n------------------------------------------------------------------\n        Bra\n        \\b\n        Assert\n        \\w\n        Ket\n        red\n        \\b\n        Assert back\n      1 Reverse\n        \\w\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    little red riding hood\n 0: red\n    a /red/ thing\n 0: red\n    red is a colour\n 0: red\n    put it all on red\n 0: red\n\\= Expect no match\n    no reduction\nNo match\n    Alfred Winifred\nNo match\n\n/[[:<:]]+red/B\n------------------------------------------------------------------\n        Bra\n        \\b\n        Assert\n        \\w\n        Ket\n        Brazero\n        Assert\n        \\w\n        Ket\n        red\n        Ket\n        End\n------------------------------------------------------------------\n    little red riding hood\n 0: red\n    red is a colour\n 0: red\n\\= Expect no match\n    Alfred\nNo match\n\n/[a[:<:]] should give error/\nFailed: error 130 at offset 7: unknown POSIX class name\n        here: [a[:<:] |<--| ] should g...\n\n/(?=ab\\K)/aftertext,allow_lookaround_bsk\n    abcd\\=startchar\nStart of matched string is beyond its end - displaying from end to start.\n 0: ab\n 0+ abcd\n\n/abcd/newline=lf,firstline\n\\= Expect no match\n    xx\\nxabcd\nNo match\n\n# Test stack guard external calls.\n\n/(((a)))/stackguard=1\nFailed: error 133 at offset 0: parentheses are too deeply nested (stack check)\n\n/(((a)))/stackguard=2\nFailed: error 133 at offset 0: parentheses are too deeply nested (stack check)\n\n/(((a)))/stackguard=3\n\n/(((((a)))))/\n\n# End stack guard tests\n\n/^\\w+(?>\\s*)(?<=\\w)/B\n------------------------------------------------------------------\n        Bra\n        ^\n        \\w+\n        Once\n        \\s*+\n        Ket\n        Assert back\n      1 Reverse\n        \\w\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\othing/\nFailed: error 155 at offset 2: missing opening brace after \\o\n        here: \\o |<--| thing\n\n/\\o{}/\nFailed: error 178 at offset 3: digits missing after \\x or in \\x{} or \\o{} or \\N{U+}\n        here: \\o{ |<--| }\n\n/\\o{whatever}/\nFailed: error 164 at offset 4: non-octal character in \\o{} (closing brace missing?)\n        here: \\o{w |<--| hatever}\n\n/\\xthing/\nFailed: error 178 at offset 2: digits missing after \\x or in \\x{} or \\o{} or \\N{U+}\n        here: \\x |<--| thing\n\n/^A\\xZ/\nFailed: error 178 at offset 4: digits missing after \\x or in \\x{} or \\o{} or \\N{U+}\n        here: ^A\\x |<--| Z\n\n/^A\\x/\nFailed: error 178 at offset 4: digits missing after \\x or in \\x{} or \\o{} or \\N{U+}\n        here: ^A\\x |<--|\n\n/\\x{}/\nFailed: error 178 at offset 3: digits missing after \\x or in \\x{} or \\o{} or \\N{U+}\n        here: \\x{ |<--| }\n\n/\\x{whatever}/\nFailed: error 167 at offset 4: non-hex character in \\x{} (closing brace missing?)\n        here: \\x{w |<--| hatever}\n\n/A\\8B/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: A\\8 |<-->| B\n\n/A\\9B/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: A\\9 |<-->| B\n\n# This one is here because Perl fails to match \"12\" for this pattern when the $\n# is present.\n\n/^(?(?=abc)\\w{3}:|\\d\\d)$/\n    abc:\n 0: abc:\n    12\n 0: 12\n\\= Expect no match\n    123\nNo match\n    xyz\nNo match\n\n# Perl gets this one wrong, giving \"a\" as the after text for ca and failing to\n# match for cd.\n\n/(?(?=ab)ab)/aftertext\n    abxxx\n 0: ab\n 0+ xxx\n    ca\n 0: \n 0+ ca\n    cd\n 0: \n 0+ cd\n\n# This should test both paths for processing OP_RECURSE.\n\n/(?(R)a+|(?R)b)/\n    aaaabcde\n 0: aaaab\n    aaaabcde\\=ovector=100\n 0: aaaab\n\n/a*?b*?/\n    ab\n 0: \n\n/(*NOTEMPTY)a*?b*?/\n    ab\n 0: a\n    ba\n 0: b\n    cb\n 0: b\n\n/(*NOTEMPTY_ATSTART)a*?b*?/aftertext\n    ab\n 0: a\n 0+ b\n    cdab\n 0: \n 0+ dab\n\n/(?(VERSION>=10.0)yes|no)/I\nCapture group count = 0\nSubject length lower bound = 2\n    yesno\n 0: yes\n\n/(?(VERSION>=10.04)yes|no)/\n    yesno\n 0: yes\n\n/(?(VERSION=8)yes){3}/BI,aftertext\n------------------------------------------------------------------\n        Bra\n        Cond\n        Cond false\n        yes\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n    yesno\n 0: \n 0+ yesno\n\n/(?(VERSION=8)yes|no){3}/I\nCapture group count = 0\nSubject length lower bound = 6\n    yesnononoyes\n 0: nonono\n\\= Expect no match\n    yesno\nNo match\n\n/(?:(?<VERSION>abc)|xyz)(?(VERSION)yes|no)/I\nCapture group count = 1\nMax back reference = 1\nNamed capture groups:\n  VERSION   1\nStarting code units: a x\nSubject length lower bound = 5\n    abcyes\n 0: abcyes\n 1: abc\n    xyzno\n 0: xyzno\n\\= Expect no match\n    abcno\nNo match\n    xyzyes\nNo match\n\n/(?(VERSION<10)yes|no)/\nFailed: error 179 at offset 11: syntax error or number too big in (?(VERSION condition\n        here: ...?(VERSION< |<--| 10)yes|no)\n\n/(?(VERSION>10)yes|no)/\nFailed: error 179 at offset 11: syntax error or number too big in (?(VERSION condition\n        here: ...?(VERSION> |<--| 10)yes|no)\n\n/(?(VERSION>=10.0.0)yes|no)/\nFailed: error 179 at offset 17: syntax error or number too big in (?(VERSION condition\n        here: ...ION>=10.0. |<--| 0)yes|no)\n\n/(?(VERSION=10.101)yes|no)/\n\n/(?(VERSION=10z)yes|no)/\nFailed: error 179 at offset 14: syntax error or number too big in (?(VERSION condition\n        here: ...ERSION=10z |<--| )yes|no)\n\n# We should see the starting code unit, required code unit, and minimum length set for this regex:\n/abcd/I\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'd'\nSubject length lower bound = 4\n\n# None of the following three should have the starting code unit, required code unit, and minimum length set:\n/abcd/I,no_start_optimize\nCapture group count = 0\nOptions: no_start_optimize\nOptimizations: auto_possess,dotstar_anchor\n\n/abcd/I,start_optimize_off\nCapture group count = 0\nOptimizations: auto_possess,dotstar_anchor\n\n/abcd/I,optimization_none\nCapture group count = 0\nOptimizations: <none>\n\n/(|ab)*?d/I\nCapture group count = 1\nStarting code units: a d\nLast code unit = 'd'\nSubject length lower bound = 1\n   abd\n 0: abd\n 1: ab\n   xyd\n 0: d\n\n/(|ab)*?d/I,no_start_optimize\nCapture group count = 1\nOptions: no_start_optimize\nOptimizations: auto_possess,dotstar_anchor\n   abd\n 0: abd\n 1: ab\n   xyd\n 0: d\n\n/\\k<A>*(?<A>aa)(?<A>bb)/match_unset_backref,dupnames\n    aabb\n 0: aabb\n 1: aa\n 2: bb\n\n/(((((a)))))/parens_nest_limit=2\nFailed: error 119 at offset 3: parentheses are too deeply nested\n        here: ((( |-->| ((a)))))\n\n/abc/replace=XYZ\n    123123\n 0: 123123\n    123abc123\n 1: 123XYZ123\n    123abc123abc123\n 1: 123XYZ123abc123\n    123123\\=zero_terminate\n 0: 123123\n    123abc123\\=zero_terminate\n 1: 123XYZ123\n    123abc123abc123\\=zero_terminate\n 1: 123XYZ123abc123\n\n/abc/g,replace=XYZ\n    123abc123\n 1: 123XYZ123\n    123abc123abc123\n 2: 123XYZ123XYZ123\n\n/abc/replace=X$$Z\n    123abc123\n 1: 123X$Z123\n\n/abc/g,replace=X$$Z\n    123abc123abc123\n 2: 123X$Z123X$Z123\n\n/a(b)c(d)e/replace=X$1Y${2}Z\n    \"abcde\"\n 1: \"XbYdZ\"\n\n/a(b)c(d)e/replace=X$1Y${2}Z,global\n    \"abcde-abcde\"\n 2: \"XbYdZ-XbYdZ\"\n\n/a(?<ONE>b)c(?<TWO>d)e/replace=X$ONE+${TWO}Z\n    \"abcde\"\n 1: \"Xb+dZ\"\n\n/a(?<ONE>b)c(?<TWO>d)e/g,replace=X$ONE+${TWO}Z\n    \"abcde-abcde-\"\n 2: \"Xb+dZ-Xb+dZ-\"\n\n/abc/replace=a$++\n    123abc\nFailed: error -49 at offset 3 in replacement: unknown substring\n        here: a$+ |<--| +\n\n/abc/replace=a$bad\n    123abc\nFailed: error -49 at offset 5 in replacement: unknown substring\n        here: a$bad |<--|\n\n/abc/replace=a${A234567890123456789_123456789012}z\n    123abc\nFailed: error -49 at offset 36 in replacement: unknown substring\n        here: ...456789012} |<--| z\n\n/abc/replace=a${A23456789012345678901234567890123}z\n    123abc\nFailed: error -49 at offset 37 in replacement: unknown substring\n        here: ...567890123} |<--| z\n\n/abc/replace=a${bcd\n    123abc\nFailed: error -58 at offset 6 in replacement: expected closing curly bracket in replacement string\n        here: a${bcd |<--|\n\n/abc/replace=a${b+d}z\n    123abc\nFailed: error -58 at offset 4 in replacement: expected closing curly bracket in replacement string\n        here: a${b |<--| +d}z\n\n/abc/replace=[10]XYZ\n    123abc123\n 1: 123XYZ123\n\n/abc/replace=[9]XYZ\n    123abc123\nFailed: error -48: no more memory\n\n/abc/replace=xyz\n    1abc2\\=partial_hard\nFailed: error -34: bad option value\n\n/abc/replace=xyz\n    123abc456\n 1: 123xyz456\n    123abc456\\=replace=pqr\n 1: 123pqr456\n    123abc456abc789\n 1: 123xyz456abc789\n    123abc456abc789\\=g\n 2: 123xyz456xyz789\n\n/(?<=abc)(|def)/g,replace=<$0>\n    123abcxyzabcdef789abcpqr\n 4: 123abc<>xyzabc<><def>789abc<>pqr\n\n/./replace=$0\n    a\n 1: a\n\n/(.)(.)/replace=$2+$1\n    abc\n 1: b+ac\n\n/(?<A>.)(?<B>.)/replace=$B+$A\n    abc\n 1: b+ac\n\n/(.)(.)/g,replace=$2$1\n    abcdefgh\n 4: badcfehg\n\n/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=${*MARK}\n    apple lemon blackberry\n 3: pear orange strawberry\n    apple strudel\n 1: pear strudel\n    fruitless\n 0: fruitless\n\n/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/replace=${*MARK} sauce,\n    apple lemon blackberry\n 1: pear sauce lemon blackberry\n\n/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=<$*MARK>\n    apple lemon blackberry\n 3: <pear> <orange> <strawberry>\n    apple strudel\n 1: <pear> strudel\n    fruitless\n 0: fruitless\n\n/(*:pear)apple/g,replace=${*MARKING}\n    apple lemon blackberry\nFailed: error -35 at offset 11 in replacement: invalid replacement string\n        here: ...{*MARKING} |<--|\n\n/(*:pear)apple/g,replace=${*MARK-time\n    apple lemon blackberry\nFailed: error -58 at offset 7 in replacement: expected closing curly bracket in replacement string\n        here: ${*MARK |<--| -time\n\n/(*:pear)apple/g,replace=${*mark}\n    apple lemon blackberry\nFailed: error -35 at offset 8 in replacement: invalid replacement string\n        here: ${*mark} |<--|\n\n/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=<$*MARKET>\n    apple lemon blackberry\nFailed: error -35 at offset 9 in replacement: invalid replacement string\n        here: <$*MARKET |<--| >\n\n/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=[22]${*MARK}\n    apple lemon blackberry\nFailed: error -48: no more memory\n    apple lemon blackberry\\=substitute_overflow_length\nFailed: error -48: no more memory: 23 code units are needed\n\n/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=[23]${*MARK}\n    apple lemon blackberry\n 3: pear orange strawberry\n\n/\"(*:fruit\" 00 \"juice)apple\"/hex,g,replace=${*MARK}\n    apple lemon blackberry\n 1: fruit\\x00juice lemon blackberry\n\n/abc/\n    123abc123\\=replace=XYZ\n 1: 123XYZ123\n    123abc123\\=replace=[10]XYZ\n 1: 123XYZ123\n\\= Expect error\n    123abc123\\=replace=[9]XYZ\nFailed: error -48: no more memory\n    123abc123\\=substitute_overflow_length,replace=[9]XYZ\nFailed: error -48: no more memory: 10 code units are needed\n    123abc123\\=substitute_overflow_length,replace=[6]XYZ\nFailed: error -48: no more memory: 10 code units are needed\n    123abc123\\=substitute_overflow_length,replace=[1]XYZ\nFailed: error -48: no more memory: 10 code units are needed\n    123abc123\\=substitute_overflow_length,replace=[0]XYZ\nFailed: error -48: no more memory: 10 code units are needed\n\n/abc/\n    123abc123\\=replace=XY\n 1: 123XY123\n    123abc123\\=replace=[9]XY\n 1: 123XY123\n    123abc123\\=replace=[9]XY,substitute_literal\n 1: 123XY123\n\\= Expect error\n    123abc123\\=replace=[8]XY,substitute_overflow_length\nFailed: error -48: no more memory: 9 code units are needed\n    123abc123\\=replace=[8]XY,substitute_overflow_length,substitute_literal\nFailed: error -48: no more memory: 9 code units are needed\n    123abc123\\=replace=[6]XY,substitute_overflow_length\nFailed: error -48: no more memory: 9 code units are needed\n    123abc123\\=replace=[6]XY,substitute_overflow_length,substitute_literal\nFailed: error -48: no more memory: 9 code units are needed\n    123abc123\\=replace=[5]XY,substitute_overflow_length\nFailed: error -48: no more memory: 9 code units are needed\n    123abc123\\=replace=[5]XY,substitute_overflow_length,substitute_literal\nFailed: error -48: no more memory: 9 code units are needed\n    123abc123\\=replace=[4]XY,substitute_overflow_length\nFailed: error -48: no more memory: 9 code units are needed\n    123abc123\\=replace=[4]XY,substitute_overflow_length,substitute_literal\nFailed: error -48: no more memory: 9 code units are needed\n    123abc123\\=replace=[3]XY,substitute_overflow_length\nFailed: error -48: no more memory: 9 code units are needed\n    123abc123\\=replace=[3]XY,substitute_overflow_length,substitute_literal\nFailed: error -48: no more memory: 9 code units are needed\n    123abc123\\=replace=[2]XY,substitute_overflow_length\nFailed: error -48: no more memory: 9 code units are needed\n    123abc123\\=replace=[2]XY,substitute_overflow_length,substitute_literal\nFailed: error -48: no more memory: 9 code units are needed\n\n/abc/substitute_literal\n    123abc123\\=replace=XYZ\n 1: 123XYZ123\n    123abc123\\=replace=[10]XYZ\n 1: 123XYZ123\n\\= Expect error\n    123abc123\\=replace=[9]XYZ\nFailed: error -48: no more memory\n    123abc123\\=substitute_overflow_length,replace=[9]XYZ\nFailed: error -48: no more memory: 10 code units are needed\n    123abc123\\=substitute_overflow_length,replace=[6]XYZ\nFailed: error -48: no more memory: 10 code units are needed\n    123abc123\\=substitute_overflow_length,replace=[1]XYZ\nFailed: error -48: no more memory: 10 code units are needed\n    123abc123\\=substitute_overflow_length,replace=[0]XYZ\nFailed: error -48: no more memory: 10 code units are needed\n\n/a(b)c/\n    123abc123\\=replace=[9]x$1z\nFailed: error -48: no more memory\n    123abc123\\=substitute_overflow_length,replace=[9]x$1z\nFailed: error -48: no more memory: 10 code units are needed\n    123abc123\\=substitute_overflow_length,replace=[6]x$1z\nFailed: error -48: no more memory: 10 code units are needed\n    123abc123\\=substitute_overflow_length,replace=[1]x$1z\nFailed: error -48: no more memory: 10 code units are needed\n    123abc123\\=substitute_overflow_length,replace=[0]x$1z\nFailed: error -48: no more memory: 10 code units are needed\n\n/a(b)c/substitute_extended\n    ZabcZ\\=replace=>\\1<\n 1: Z>b<Z\n    ZabcZ\\=replace=>\\2<\nFailed: error -49 at offset 3 in replacement: unknown substring\n        here: >\\2 |<--| <\n    ZabcZ\\=replace=>\\8<\nFailed: error -49 at offset 3 in replacement: unknown substring\n        here: >\\8 |<--| <\n    ZabcZ\\=replace=>${1}<\n 1: Z>b<Z\n    ZabcZ\\=replace=>${ 1 }<\nFailed: error -35 at offset 3 in replacement: invalid replacement string\n        here: >${ |<--|  1 }<\n    ZabcZ\\=replace=>${2}<\nFailed: error -49 at offset 5 in replacement: unknown substring\n        here: >${2} |<--| <\n    ZabcZ\\=replace=>${8}<\nFailed: error -49 at offset 5 in replacement: unknown substring\n        here: >${8} |<--| <\n    ZabcZ\\=replace=>$<1><\nFailed: error -49 at offset 5 in replacement: unknown substring\n        here: >$<1> |<--| <\n    ZabcZ\\=replace=>$< 1 ><\nFailed: error -35 at offset 3 in replacement: invalid replacement string\n        here: >$< |<--|  1 ><\n    ZabcZ\\=replace=>$<2><\nFailed: error -49 at offset 5 in replacement: unknown substring\n        here: >$<2> |<--| <\n    ZabcZ\\=replace=>$<8><\nFailed: error -49 at offset 5 in replacement: unknown substring\n        here: >$<8> |<--| <\n    ZabcZ\\=replace=>\\g<-1><\nFailed: error -57 at offset 4 in replacement: bad escape sequence in replacement string\n        here: >\\g< |<--| -1><\n    ZabcZ\\=replace=>\\g<0><\n 1: Z>abc<Z\n    ZabcZ\\=replace=>\\g<1><\n 1: Z>b<Z\n    ZabcZ\\=replace=>\\g< 1 ><\nFailed: error -57 at offset 4 in replacement: bad escape sequence in replacement string\n        here: >\\g< |<--|  1 ><\n    ZabcZ\\=replace=>\\g<2><\nFailed: error -49 at offset 6 in replacement: unknown substring\n        here: >\\g<2> |<--| <\n    ZabcZ\\=replace=>\\g<8><\nFailed: error -49 at offset 6 in replacement: unknown substring\n        here: >\\g<8> |<--| <\n\n/(*:pear)apple/substitute_extended\n    ZappleZ\\=replace=>${*MARK}<\n 1: Z>pear<Z\n    ZappleZ\\=replace=>$<*MARK><\nFailed: error -35 at offset 3 in replacement: invalid replacement string\n        here: >$< |<--| *MARK><\n    ZappleZ\\=replace=>\\g<*MARK><\nFailed: error -57 at offset 4 in replacement: bad escape sequence in replacement string\n        here: >\\g< |<--| *MARK><\n\n/a(?<named>b)c/substitute_extended\n    ZabcZ\\=replace=>${named}<\n 1: Z>b<Z\n    ZabcZ\\=replace=>${noexist}<\nFailed: error -49 at offset 11 in replacement: unknown substring\n        here: ...${noexist} |<--| <\n    ZabcZ\\=replace=>${}<\nFailed: error -35 at offset 3 in replacement: invalid replacement string\n        here: >${ |<--| }<\n    ZabcZ\\=replace=>${ }<\nFailed: error -35 at offset 3 in replacement: invalid replacement string\n        here: >${ |<--|  }<\n    ZabcZ\\=replace=>${ named }<\nFailed: error -35 at offset 3 in replacement: invalid replacement string\n        here: >${ |<--|  named }<\n    ZabcZ\\=replace=>$<named><\n 1: Z>b<Z\n    ZabcZ\\=replace=>$<noexist><\nFailed: error -49 at offset 11 in replacement: unknown substring\n        here: ...$<noexist> |<--| <\n    ZabcZ\\=replace=>$<><\nFailed: error -35 at offset 3 in replacement: invalid replacement string\n        here: >$< |<--| ><\n    ZabcZ\\=replace=>$< ><\nFailed: error -35 at offset 3 in replacement: invalid replacement string\n        here: >$< |<--|  ><\n    ZabcZ\\=replace=>$< named ><\nFailed: error -35 at offset 3 in replacement: invalid replacement string\n        here: >$< |<--|  named ><\n    ZabcZ\\=replace=>\\g<named><\n 1: Z>b<Z\n    ZabcZ\\=replace=>\\g<noexist><\nFailed: error -49 at offset 12 in replacement: unknown substring\n        here: ...g<noexist> |<--| <\n    ZabcZ\\=replace=>\\g<><\nFailed: error -57 at offset 4 in replacement: bad escape sequence in replacement string\n        here: >\\g< |<--| ><\n    ZabcZ\\=replace=>\\g< ><\nFailed: error -57 at offset 4 in replacement: bad escape sequence in replacement string\n        here: >\\g< |<--|  ><\n    ZabcZ\\=replace=>\\g< named ><\nFailed: error -57 at offset 4 in replacement: bad escape sequence in replacement string\n        here: >\\g< |<--|  named ><\n\n/a(b)c/substitute_extended\n    ZabcZ\\=replace=>${1:+ yes : no }\n 1: Z> yes Z\n    ZabcZ\\=replace=>${1:+ \\o{Z} : no }\nFailed: error -57 at offset 11 in replacement: bad escape sequence in replacement string\n        here: ...${1:+ \\o{Z |<--| } : no }\n    ZabcZ\\=replace=>${1:+ yes : \\o{Z} }\nFailed: error -57 at offset 17 in replacement: bad escape sequence in replacement string\n        here: ...yes : \\o{Z |<--| } }\n    ZabcZ\\=replace=>${1:+ \\g<1> : no }\n 1: Z> b Z\n    ZabcZ\\=replace=>${1:+ yes : \\g<1> }\n 1: Z> yes Z\n    ZabcZ\\=replace=>${1:+ \\g<1 : no }\nFailed: error -57 at offset 11 in replacement: bad escape sequence in replacement string\n        here: ...${1:+ \\g<1 |<--|  : no }\n    ZabcZ\\=replace=>${1:+ yes : \\g<1 }\nFailed: error -57 at offset 17 in replacement: bad escape sequence in replacement string\n        here: ...yes : \\g<1 |<--|  }\n    ZabcZ\\=replace=>${1:+ $<1> : no }\nFailed: error -49 at offset 11 in replacement: unknown substring\n        here: ...${1:+ $<1> |<--|  : no }\n    ZabcZ\\=replace=>${1:+ yes : $<1> }\n 1: Z> yes Z\n    ZabcZ\\=replace=>${1:+ $<1 : no }\nFailed: error -35 at offset 10 in replacement: invalid replacement string\n        here: >${1:+ $<1 |<--|  : no }\n    ZabcZ\\=replace=>${1:+ yes : $<1 }\n 1: Z> yes Z\n\n#if !ebcdic\n\n/a(b)c/substitute_extended\n    ZabcZ\\=replace=>${1:+ \\o{100} : \\o{100} }\n 1: Z> @ Z\n\n#endif\n\n/a(b)c/substitute_extended\n    ZabcZ\\=replace=>${\nFailed: error -35 at offset 3 in replacement: invalid replacement string\n        here: >${ |<--|\n    ZabcZ\\=replace=>${1\nFailed: error -58 at offset 4 in replacement: expected closing curly bracket in replacement string\n        here: >${1 |<--|\n    ZabcZ\\=replace=>${1Z\nFailed: error -58 at offset 4 in replacement: expected closing curly bracket in replacement string\n        here: >${1 |<--| Z\n    ZabcZ\\=replace=>${1;\nFailed: error -58 at offset 4 in replacement: expected closing curly bracket in replacement string\n        here: >${1 |<--| ;\n    ZabcZ\\=replace=>$<\nFailed: error -35 at offset 3 in replacement: invalid replacement string\n        here: >$< |<--|\n    ZabcZ\\=replace=>$<1\nFailed: error -35 at offset 4 in replacement: invalid replacement string\n        here: >$<1 |<--|\n    ZabcZ\\=replace=>$<1Z\nFailed: error -35 at offset 5 in replacement: invalid replacement string\n        here: >$<1Z |<--|\n    ZabcZ\\=replace=>$<1;\nFailed: error -35 at offset 4 in replacement: invalid replacement string\n        here: >$<1 |<--| ;\n    ZabcZ\\=replace=>\\g<\nFailed: error -57 at offset 4 in replacement: bad escape sequence in replacement string\n        here: >\\g< |<--|\n    ZabcZ\\=replace=>\\g<1\nFailed: error -57 at offset 5 in replacement: bad escape sequence in replacement string\n        here: >\\g<1 |<--|\n    ZabcZ\\=replace=>\\g<1Z\nFailed: error -57 at offset 5 in replacement: bad escape sequence in replacement string\n        here: >\\g<1 |<--| Z\n    ZabcZ\\=replace=>\\g<1;\nFailed: error -57 at offset 5 in replacement: bad escape sequence in replacement string\n        here: >\\g<1 |<--| ;\n\n\"((?=(?(?=(?(?=(?(?=()))))))))\"\n    a\n 0: \n 1: \n 2: \n\n\"(?(?=)==)(((((((((?=)))))))))\"\n\\= Expect no match\n    a\nNo match\n\n/(a)(b)|(c)/\n    XcX\\=ovector=2,get=1,get=2,get=3,get=4,getall\nMatched, but too many substrings\n 0: c\n 1: <unset>\nGet substring 1 failed (-55): requested value is not set\nGet substring 2 failed (-54): requested value is not available\nGet substring 3 failed (-54): requested value is not available\nGet substring 4 failed (-49): unknown substring\n 0L c\n 1L \n\n/x(?=ab\\K)/allow_lookaround_bsk\n    xab\\=get=0\nStart of matched string is beyond its end - displaying from end to start.\n 0: ab\n 0G  (0)\n    xab\\=copy=0\nStart of matched string is beyond its end - displaying from end to start.\n 0: ab\n 0C  (0)\n    xab\\=getall\nStart of matched string is beyond its end - displaying from end to start.\n 0: ab\n 0L \n\n/(?<A>a)|(?<A>b)/dupnames\n    a\\=ovector=1,copy=A,get=A,get=2\nMatched, but too many substrings\n 0: a\nCopy substring \"A\" failed (-54): requested value is not available\nGet substring \"A\" length failed (-54): requested value is not available\nGet substring 2 failed (-54): requested value is not available\nGet substring \"A\" failed (-54): requested value is not available\n    a\\=ovector=2,copy=A,get=A,get=2\n 0: a\n 1: a\n  C a (1) A (non-unique)\nGet substring 2 failed (-54): requested value is not available\n  G a (1) A (non-unique)\n    b\\=ovector=2,copy=A,get=A,get=2\nMatched, but too many substrings\n 0: b\n 1: <unset>\nCopy substring \"A\" failed (-55): requested value is not set\nGet substring \"A\" length failed (-55): requested value is not set\nGet substring 2 failed (-54): requested value is not available\nGet substring \"A\" failed (-55): requested value is not set\n\n/a(b)c(d)/\n    abc\\=ph,copy=0,copy=1,getall\nPartial match: abc\n 0C abc (3)\nCopy substring 1 failed (-2): partial match\nGet substring 1 length failed (-2): partial match\nget substring list failed (-2): partial match\n\n/^abc/info\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 3\n\n/^abc/info,no_dotstar_anchor\nCapture group count = 0\nCompile options: no_dotstar_anchor\nOverall options: anchored no_dotstar_anchor\nOptimizations: auto_possess,start_optimize\nFirst code unit = 'a'\nSubject length lower bound = 3\n\n/^abc/info,dotstar_anchor_off\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nOptimizations: auto_possess,start_optimize\nFirst code unit = 'a'\nSubject length lower bound = 3\n\n# For comparison with the following tests, which disable automatic dotstar anchoring\n/.*abc/BI\n------------------------------------------------------------------\n        Bra\n        Any*\n        abc\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit at start or follows newline\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/.*abc/BI,dotstar_anchor_off\n------------------------------------------------------------------\n        Bra\n        Any*\n        abc\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptimizations: auto_possess,start_optimize\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/.*abc/BI,start_optimize_off\n------------------------------------------------------------------\n        Bra\n        Any*\n        abc\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptimizations: auto_possess,dotstar_anchor\n\n/.*abc/BI,optimization_none\n------------------------------------------------------------------\n        Bra\n        Any*\n        abc\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptimizations: <none>\n\n/.*abc/BI,no_dotstar_anchor\n------------------------------------------------------------------\n        Bra\n        Any*\n        abc\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: no_dotstar_anchor\nOptimizations: auto_possess,start_optimize\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/.*\\d/info,auto_callout\nCapture group count = 0\nOptions: auto_callout\nFirst code unit at start or follows newline\nSubject length lower bound = 1\n\\= Expect no match\n    aaa\n--->aaa\n +0 ^       .*\n +2 ^  ^    \\d\n +2 ^ ^     \\d\n +2 ^^      \\d\n +2 ^       \\d\nNo match\n\n/.*\\d/info,no_dotstar_anchor,auto_callout\nCapture group count = 0\nOptions: auto_callout no_dotstar_anchor\nOptimizations: auto_possess,start_optimize\nSubject length lower bound = 1\n\\= Expect no match\n    aaa\n--->aaa\n +0 ^       .*\n +2 ^  ^    \\d\n +2 ^ ^     \\d\n +2 ^^      \\d\n +2 ^       \\d\n +0  ^      .*\n +2  ^ ^    \\d\n +2  ^^     \\d\n +2  ^      \\d\n +0   ^     .*\n +2   ^^    \\d\n +2   ^     \\d\nNo match\n\n/.*\\d/dotall,info\nCapture group count = 0\nCompile options: dotall\nOverall options: anchored dotall\nSubject length lower bound = 1\n\n/.*\\d/dotall,no_dotstar_anchor,info\nCapture group count = 0\nOptions: dotall no_dotstar_anchor\nOptimizations: auto_possess,start_optimize\nSubject length lower bound = 1\n\n/(*NO_DOTSTAR_ANCHOR)(?s).*\\d/info\nCapture group count = 0\nCompile options: <none>\nOverall options: no_dotstar_anchor\nOptimizations: auto_possess,start_optimize\nSubject length lower bound = 1\n\n'^(?:(a)|b)(?(1)A|B)'\n    aA123\\=ovector=1\nMatched, but too many substrings\n 0: aA\n    aA123\\=ovector=2\n 0: aA\n 1: a\n\n'^(?:(?<AA>a)|b)(?(<AA>)A|B)'\n    aA123\\=ovector=1\nMatched, but too many substrings\n 0: aA\n    aA123\\=ovector=2\n 0: aA\n 1: a\n\n'^(?<AA>)(?:(?<AA>a)|b)(?(<AA>)A|B)'dupnames\n    aA123\\=ovector=1\nMatched, but too many substrings\n 0: aA\n    aA123\\=ovector=2\nMatched, but too many substrings\n 0: aA\n 1: \n    aA123\\=ovector=3\n 0: aA\n 1: \n 2: a\n\n'^(?:(?<AA>X)|)(?:(?<AA>a)|b)\\k{AA}'dupnames\n    aa123\\=ovector=1\nMatched, but too many substrings\n 0: aa\n    aa123\\=ovector=2\nMatched, but too many substrings\n 0: aa\n 1: <unset>\n    aa123\\=ovector=3\n 0: aa\n 1: <unset>\n 2: a\n\n/(?<N111>(?J)(?<N111>1(111111)11|)1|1|)(?(<N111>)1)/\n\n/(?<N>(?J)(?<N>))(?-J)\\k<N>/\n\n# Quantifiers are not allowed on condition assertions, but are otherwise\n# OK in conditions.\n\n/(?(?=0)?)+/\nFailed: error 109 at offset 8: quantifier does not follow a repeatable item\n        here: (?(?=0)? |<--| )+\n\n/(?(?=0)(?=00)?00765)/\n     00765\n 0: 00765\n\n/(?(?=0)(?=00)?00765|(?!3).56)/\n     00765\n 0: 00765\n     456\n 0: 456\n\\= Expect no match\n     356\nNo match\n\n'^(a)*+(\\w)'\n    g\n 0: g\n 1: <unset>\n 2: g\n    g\\=ovector=1\nMatched, but too many substrings\n 0: g\n\n'^(?:a)*+(\\w)'\n    g\n 0: g\n 1: g\n    g\\=ovector=1\nMatched, but too many substrings\n 0: g\n\n# These two pattern showeds up compile-time bugs\n\n\"((?2){0,1999}())?\"\n\n/((?+1)(\\1))/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Recurse\n        CBra 2\n        \\g{1}\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n# Callouts with string arguments\n\n/a(?C\"/\nFailed: error 181 at offset 4: missing terminating delimiter for callout with string argument\n        here: a(?C |-->| \"\n\n/a(?C\"a/\nFailed: error 181 at offset 4: missing terminating delimiter for callout with string argument\n        here: a(?C |-->| \"a\n\n/a(?C\"a\"/\nFailed: error 139 at offset 7: closing parenthesis for (?C expected\n        here: a(?C\"a\" |<--|\n\n/a(?C\"a\"bcde(?C\"b\")xyz/\nFailed: error 139 at offset 7: closing parenthesis for (?C expected\n        here: a(?C\"a\" |<--| bcde(?C\"b\"...\n\n/a(?C\"a)b\"\"c\")/B\n------------------------------------------------------------------\n        Bra\n        a\n        CalloutStr \"a)b\"c\" 5 13 0\n        Ket\n        End\n------------------------------------------------------------------\n\n/ab(?C\" any text with spaces \")cde/B\n------------------------------------------------------------------\n        Bra\n        ab\n        CalloutStr \" any text with spaces \" 6 30 1\n        cde\n        Ket\n        End\n------------------------------------------------------------------\n    abcde\nCallout (6): \" any text with spaces \"\n--->abcde\n    ^ ^       c\n 0: abcde\n    12abcde\nCallout (6): \" any text with spaces \"\n--->12abcde\n      ^ ^       c\n 0: abcde\n\n/^a(b)c(?C1)def/\n      abcdef\n--->abcdef\n  1 ^  ^       d\n 0: abcdef\n 1: b\n\n/^a(b)c(?C\"AB\")def/\n      abcdef\nCallout (10): \"AB\"\n--->abcdef\n    ^  ^       d\n 0: abcdef\n 1: b\n\n/^a(b)c(?C1)def/\n      abcdef\\=callout_capture\nCallout 1: last capture = 1\n 1: b\n--->abcdef\n    ^  ^       d\n 0: abcdef\n 1: b\n\n/^a(b)c(?C{AB})def/B\n------------------------------------------------------------------\n        Bra\n        ^\n        a\n        CBra 1\n        b\n        Ket\n        c\n        CalloutStr {AB} 10 14 1\n        def\n        Ket\n        End\n------------------------------------------------------------------\n      abcdef\\=callout_capture\nCallout (10): {AB} last capture = 1\n 1: b\n--->abcdef\n    ^  ^       d\n 0: abcdef\n 1: b\n\n/(?C`a``b`)(?C'a''b')(?C\"a\"\"b\")(?C^a^^b^)(?C%a%%b%)(?C#a##b#)(?C$a$$b$)(?C{a}}b})/B,callout_info\n------------------------------------------------------------------\n        Bra\n        CalloutStr `a`b` 4 10 0\n        CalloutStr 'a'b' 14 20 0\n        CalloutStr \"a\"b\" 24 30 0\n        CalloutStr ^a^b^ 34 40 0\n        CalloutStr %a%b% 44 50 0\n        CalloutStr #a#b# 54 60 0\n        CalloutStr $a$b$ 64 70 0\n        CalloutStr {a}b} 74 80 0\n        Ket\n        End\n------------------------------------------------------------------\nCallout `a`b`  (\nCallout 'a'b'  (\nCallout \"a\"b\"  (\nCallout ^a^b^  (\nCallout %a%b%  (\nCallout #a#b#  (\nCallout $a$b$  (\nCallout {a}b}  \n\n/(?:a(?C`code`)){3}/B\n------------------------------------------------------------------\n        Bra\n        Bra\n        a\n        CalloutStr `code` 8 14 4\n        Ket\n        Bra\n        a\n        CalloutStr `code` 8 14 4\n        Ket\n        Bra\n        a\n        CalloutStr `code` 8 14 4\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(?(?C25)(?=abc)abcd|xyz)/B,callout_info\n------------------------------------------------------------------\n        Bra\n        ^\n        Cond\n        Callout 25 9 3\n        Assert\n        abc\n        Ket\n        abcd\n        Alt\n        xyz\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCallout 25  (?=\n    abcdefg\n--->abcdefg\n 25 ^           (?=\n 0: abcd\n    xyz123\n--->xyz123\n 25 ^          (?=\n 0: xyz\n\n/^(?(?C$abc$)(?=abc)abcd|xyz)/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Cond\n        CalloutStr $abc$ 7 12 3\n        Assert\n        abc\n        Ket\n        abcd\n        Alt\n        xyz\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    abcdefg\nCallout (7): $abc$\n--->abcdefg\n    ^           (?=\n 0: abcd\n    xyz123\nCallout (7): $abc$\n--->xyz123\n    ^          (?=\n 0: xyz\n\n/^ab(?C'first')cd(?C\"second\")ef/\n    abcdefg\nCallout (7): 'first'\n--->abcdefg\n    ^ ^         c\nCallout (20): \"second\"\n--->abcdefg\n    ^   ^       e\n 0: abcdef\n\n/(?:a(?C`code`)){3}X/\n    aaaXY\nCallout (8): `code`\n--->aaaXY\n    ^^        ){3}\nCallout (8): `code`\n--->aaaXY\n    ^ ^       ){3}\nCallout (8): `code`\n--->aaaXY\n    ^  ^      ){3}\n 0: aaaX\n\n# Binary zero in callout string\n#  a  (  ?  C  '  x     z  '  )  b\n/ 61 28 3f 43 27 78 00 7a 27 29 62/hex,callout_info\nCallout 'x\\x00z'  b\n    abcdefgh\nCallout (5): 'x\\x00z'\n--->abcdefgh\n    ^^           b\n 0: ab\n\n/(?(?!)^)/\n\n/(?(?!)a|b)/\n    bbb\n 0: b\n\\= Expect no match\n    aaa\nNo match\n\n# JIT gives a different error message for the infinite recursion\n\n\"(*NO_JIT)((?2)+)((?1)){\"\n    abcd{\nFailed: error -52: nested recursion at the same subject position\n\n# Perl fails to diagnose the absence of an assertion\n\n\"(?(?<E>.*!.*)?)\"\nFailed: error 128 at offset 3: atomic assertion expected after (?( or (?(?C)\n        here: (?( |<--| ?<E>.*!.*)...\n\n\"X((?2)()*+){2}+\"B\n------------------------------------------------------------------\n        Bra\n        X\n        Once\n        CBra 1\n        Recurse\n        Braposzero\n        SCBraPos 2\n        KetRpos\n        Ket\n        CBra 1\n        Recurse\n        Braposzero\n        SCBraPos 2\n        KetRpos\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n\"X((?2)()*+){2}\"B\n------------------------------------------------------------------\n        Bra\n        X\n        CBra 1\n        Recurse\n        Braposzero\n        SCBraPos 2\n        KetRpos\n        Ket\n        CBra 1\n        Recurse\n        Braposzero\n        SCBraPos 2\n        KetRpos\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?<=\\bABQ(3(?-7)))/\nFailed: error 115 at offset 15: reference to non-existent subpattern\n        here: ...bABQ(3(?-7 |<-->| )))\n\n/(?<=\\bABQ(3(?+7)))/\nFailed: error 115 at offset 15: reference to non-existent subpattern\n        here: ...bABQ(3(?+7 |<-->| )))\n\n\";(?<=()((?3))((?2)))\"\nFailed: error 125 at offset 1: length of lookbehind assertion is not limited\n        here: ; |-->| (?<=()((?3...\n\n# Perl loops on this (PCRE2 used to!)\n\n# duplicate matches\n/(?<=\\Ka)/g,aftertext,allow_lookaround_bsk\n    aaaaa\n 0: a\n 0+ aaaa\nglobal repeat returned the same match as previous\n 0: a\n 0+ aaa\n 0: a\n 0+ aa\n 0: a\n 0+ a\n 0: a\n 0+ \n\n/(?<=\\Ka)/altglobal,aftertext,allow_lookaround_bsk\n    aaaaa\n 0: a\n 0+ aaaa\n 0: a\n 0+ aaa\n 0: a\n 0+ aa\n 0: a\n 0+ a\n 0: a\n 0+ \n\n# overlapping matches\n/(?(?=\\Gc)(?<=\\Kb)c|(?<=\\Kab))/g,aftertext,allow_lookaround_bsk\n    abc\n 0: ab\n 0+ c\n 0: bc\n 0+ \n\n# not-sorted matches\n/(?(?=\\Gc)(?<=\\Kab)|(?<=\\Kb))/g,aftertext,allow_lookaround_bsk\n    abc\n 0: b\n 0+ c\n 0: ab\n 0+ c\n\n# CRLF cases\n\n/(?<=\\Kback)|\\Gstart/g,aftertext,allow_lookaround_bsk,newline=LF\n    back\\rstart back\\nstart back\\r\\nstart back\\r\n 0: back\n 0+ \\x0dstart back\\x0astart back\\x0d\\x0astart back\\x0d\nglobal repeat returned the same match as previous\n 0: start\n 0+  back\\x0astart back\\x0d\\x0astart back\\x0d\n 0: back\n 0+ \\x0astart back\\x0d\\x0astart back\\x0d\nglobal repeat returned the same match as previous\n 0: start\n 0+  back\\x0d\\x0astart back\\x0d\n 0: back\n 0+ \\x0d\\x0astart back\\x0d\nglobal repeat returned the same match as previous\n 0: back\n 0+ \\x0d\nglobal repeat returned the same match as previous\n\n/(?<=\\Kback)|\\Gstart/g,aftertext,allow_lookaround_bsk,newline=CRLF\n    back\\rstart back\\nstart back\\r\\nstart back\\r\n 0: back\n 0+ \\x0dstart back\\x0astart back\\x0d\\x0astart back\\x0d\nglobal repeat returned the same match as previous\n 0: start\n 0+  back\\x0astart back\\x0d\\x0astart back\\x0d\n 0: back\n 0+ \\x0astart back\\x0d\\x0astart back\\x0d\nglobal repeat returned the same match as previous\n 0: start\n 0+  back\\x0d\\x0astart back\\x0d\n 0: back\n 0+ \\x0d\\x0astart back\\x0d\nglobal repeat returned the same match as previous\n 0: start\n 0+  back\\x0d\n 0: back\n 0+ \\x0d\nglobal repeat returned the same match as previous\n\n/(?<=\\Kback)|\\Gstart/g,aftertext,allow_lookaround_bsk,newline=ANYCRLF\n    back\\rstart back\\nstart back\\r\\nstart back\\r\n 0: back\n 0+ \\x0dstart back\\x0astart back\\x0d\\x0astart back\\x0d\nglobal repeat returned the same match as previous\n 0: start\n 0+  back\\x0astart back\\x0d\\x0astart back\\x0d\n 0: back\n 0+ \\x0astart back\\x0d\\x0astart back\\x0d\nglobal repeat returned the same match as previous\n 0: start\n 0+  back\\x0d\\x0astart back\\x0d\n 0: back\n 0+ \\x0d\\x0astart back\\x0d\nglobal repeat returned the same match as previous\n 0: start\n 0+  back\\x0d\n 0: back\n 0+ \\x0d\nglobal repeat returned the same match as previous\n\n/(?<=\\Kback)|\\Gstart/g,aftertext,allow_lookaround_bsk,newline=ANY\n    back\\rstart back\\nstart back\\r\\nstart back\\r\n 0: back\n 0+ \\x0dstart back\\x0astart back\\x0d\\x0astart back\\x0d\nglobal repeat returned the same match as previous\n 0: start\n 0+  back\\x0astart back\\x0d\\x0astart back\\x0d\n 0: back\n 0+ \\x0astart back\\x0d\\x0astart back\\x0d\nglobal repeat returned the same match as previous\n 0: start\n 0+  back\\x0d\\x0astart back\\x0d\n 0: back\n 0+ \\x0d\\x0astart back\\x0d\nglobal repeat returned the same match as previous\n 0: start\n 0+  back\\x0d\n 0: back\n 0+ \\x0d\nglobal repeat returned the same match as previous\n\n/((?2){73}(?2))((?1))/info\nCapture group count = 2\nMay match empty string\nSubject length lower bound = 0\n\n/abc/\n\\= Expect no match\n    \\[9x!xxx(]{9999}\nNo match\n\n/(abc)*/\n    \\[abc]{5}\n 0: abcabcabcabcabc\n 1: abc\n\n/(abc)*/\n    \\[abc]{1}\n 0: abc\n 1: abc\n\n/(abc)*/\n    \\[abc]{0}\n** Zero or negative repeat not allowed\n\n/^/gm\n    \\n\\n\\n\n 0: \n 0: \n 0: \n\n/^/gm,alt_circumflex\n    \\n\\n\\n\n 0: \n 0: \n 0: \n 0: \n\n/((((((((x))))))))\\81/\nFailed: error 115 at offset 20: reference to non-existent subpattern\n        here: ...)))))))\\81 |<-->|\n    xx1\n\n/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((x))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\\80/\n    xx\nMatched, but too many substrings\n 0: xx\n 1: x\n 2: x\n 3: x\n 4: x\n 5: x\n 6: x\n 7: x\n 8: x\n 9: x\n10: x\n11: x\n12: x\n13: x\n14: x\n\n/\\80/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: \\80 |<-->|\n\n/A\\8B\\9C/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: A\\8 |<-->| B\\9C\n    A8B9C\n\n/(?x:((?'a')) # comment (with parentheses) and | vertical\n(?-x:#not a comment (?'b')) # this is a comment ()\n(?'c')) # not a comment (?'d')/info\nCapture group count = 5\nNamed capture groups:\n  a   2\n  b   3\n  c   4\n  d   5\nFirst code unit = '#'\nLast code unit = ' '\nSubject length lower bound = 32\n\n/(?|(?'a')(2)(?'b')|(?'a')(?'a')(3))/I,dupnames\nCapture group count = 3\nNamed capture groups:\n  a   1\n  a   2\n  b   3\nOptions: dupnames\nStarting code units: 2 3\nSubject length lower bound = 1\n    A23B\n 0: 2\n 1: \n 2: 2\n 3: \n    B32A\n 0: 3\n 1: \n 2: \n 3: 3\n\n# These are some patterns that used to cause buffer overflows or other errors\n# while compiling.\n\n/.((?2)(?R)|\\1|$)()/B\n------------------------------------------------------------------\n        Bra\n        Any\n        CBra 1\n        Recurse\n        Recurse\n        Alt\n        \\g{1}\n        Alt\n        $\n        Ket\n        CBra 2\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/.((?3)(?R)()(?2)|\\1|$)()/B\n------------------------------------------------------------------\n        Bra\n        Any\n        CBra 1\n        Recurse\n        Recurse\n        CBra 2\n        Ket\n        Recurse\n        Alt\n        \\g{1}\n        Alt\n        $\n        Ket\n        CBra 3\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(\\9*+(?2);\\3++()2|)++{/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: (\\9 |<-->| *+(?2);\\3+...\n\n/\\V\\x85\\9*+((?2)\\3++()2)*:2/\nFailed: error 115 at offset 8: reference to non-existent subpattern\n        here: \\V\\x85\\9 |<-->| *+((?2)\\3+...\n\n/(((?(R)){0,2}) (?'x'((?'R')((?'R')))))/dupnames\n\n/(((?(X)){0,2}) (?'x'((?'X')((?'X')))))/dupnames\n\n/(((?(R)){0,2}) (?'x'((?'X')((?'R')))))/\n\n\"(?J)(?'d'(?'d'\\g{d}))\"\n\n\"(?=!((?2)(?))({8(?<=(?1){29}8bbbb\\x16\\xd\\xc6^($(\\xa9H4){4}h}?1)B))\\x15')\"\nFailed: error 125 at offset 16: length of lookbehind assertion is not limited\n        here: ...?2)(?))({8 |-->| (?<=(?1){2...\n\n/A(?'')Z/\nFailed: error 162 at offset 4: subpattern name expected\n        here: A(?' |<--| ')Z\n\n\"(?J:(?|(?'R')(\\k'R')|((?'R'))))\"\n\n/(?<=|(\\,\\$(?73591620449005828816)\\xa8.{7}){6}\\x09)/\nFailed: error 161 at offset 32: subpattern number is too big\n        here: ...9005828816 |<--| )\\xa8.{7})...\n\n/^(?:(?(1)x|)+)+$()/B\n------------------------------------------------------------------\n        Bra\n        ^\n        SBra\n        SCond\n      1 Capture ref\n        x\n        Alt\n        KetRmax\n        KetRmax\n        $\n        CBra 1\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:>:]](?<)/\nFailed: error 162 at offset 10: subpattern name expected\n        here: [[:>:]](?< |<--| )\n\n/((?x)(*:0))#(?'/\nFailed: error 162 at offset 15: subpattern name expected\n        here: ...(*:0))#(?' |<--|\n\n/(?C$[$)(?<]/\nFailed: error 162 at offset 10: subpattern name expected\n        here: (?C$[$)(?< |<--| ]\n\n/(?C$)$)(?<]/\nFailed: error 162 at offset 10: subpattern name expected\n        here: (?C$)$)(?< |<--| ]\n\n/(?(R))*+/B\n------------------------------------------------------------------\n        Bra\n        Braposzero\n        SBraPos\n        SCond\n        Cond rec any\n        Ket\n        KetRpos\n        Ket\n        End\n------------------------------------------------------------------\n    abcd\n 0: \n\n/((?x)(?#))#(?'/\nFailed: error 162 at offset 14: subpattern name expected\n        here: ...)(?#))#(?' |<--|\n\n/((?x)(?#))#(?'abc')/I\nCapture group count = 2\nNamed capture groups:\n  abc   2\nFirst code unit = '#'\nSubject length lower bound = 1\n\n/[[:\\\\](?<[::]/\nFailed: error 162 at offset 9: subpattern name expected\n        here: [[:\\\\](?< |<--| [::]\n\n/[[:\\\\](?'abc')[a:]/I\nCapture group count = 1\nNamed capture groups:\n  abc   1\nStarting code units: : [ \\\nSubject length lower bound = 2\n\n\"[[[.\\xe8Nq\\xffq\\xff\\xe0\\x2|||::Nq\\xffq\\xff\\xe0\\x6\\x2|||::[[[:[::::::[[[[[::::::::[:[[[:[:::[[[[[[[[[[[[:::::::::::::::::[[.\\xe8Nq\\xffq\\xff\\xe0\\x2|||::Nq\\xffq\\xff\\xe0\\x6\\x2|||::[[[:[::::::[[[[[::::::::[:[[[:[:::[[[[[[[[[[[[[[:::E[[[:[:[[:[:::[[:::E[[[:[:[[:'[:::::E[[[:[::::::[[[:[[[[[[[::E[[[:[::::::[[[:[[[[[[[[:[[::[::::[[:::::::[[:[[[[[[[:[[::[:[[:[~\"\nFailed: error 106 at offset 353: missing terminating ] for character class\n        here: ...[::[:[[:[~ |<--|\n\n/()(?(R)0)*+/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Ket\n        Braposzero\n        SBraPos\n        SCond\n        Cond rec any\n        0\n        Ket\n        KetRpos\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?R-:(?</\nFailed: error 158 at offset 3: (?R (recursive pattern call) must be followed by a closing parenthesis\n        here: (?R |<--| -:(?<\n\n/(?R-:(?<)/\nFailed: error 158 at offset 3: (?R (recursive pattern call) must be followed by a closing parenthesis\n        here: (?R |<--| -:(?<)\n\n/(?(?C{\\Q})(?!(?'/\nFailed: error 162 at offset 16: subpattern name expected\n        here: ...\\Q})(?!(?' |<--|\n\n/(?(?C{\\Q})(?!(?'abc')))/I\nCapture group count = 1\nNamed capture groups:\n  abc   1\nMay match empty string\nSubject length lower bound = 0\n\n/(?1){3918}(((((0(\\k'R'))))(?J)(?'R'(?'R'\\3){99})))/I\nCapture group count = 8\nMax back reference = 8\nNamed capture groups:\n  R   7\n  R   8\nDuplicate name status changes\nLast code unit = '0'\nSubject length lower bound = 65535\n\n/(?|(aaa)|(b))\\g{1}/I\nCapture group count = 1\nMax back reference = 1\nStarting code units: a b\nSubject length lower bound = 1\n\n/(?|(aaa)|(b))(?1)/I\nCapture group count = 1\nStarting code units: a b\nSubject length lower bound = 4\n\n/(?|(aaa)|(b))/I\nCapture group count = 1\nStarting code units: a b\nSubject length lower bound = 1\n\n/(?|(?'a'aaa)|(?'a'b))\\k'a'/I\nCapture group count = 1\nMax back reference = 1\nNamed capture groups:\n  a   1\nStarting code units: a b\nSubject length lower bound = 1\n\n/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\\k'a'/I,dupnames\nCapture group count = 2\nMax back reference = 2\nNamed capture groups:\n  a   1\n  a   2\nOptions: dupnames\nStarting code units: a b\nLast code unit = 'c'\nSubject length lower bound = 5\n\n/ab{3cd/\n    ab{3cd\n 0: ab{3cd\n\n/ab{3,cd/\n    ab{3,cd\n 0: ab{3,cd\n\n/ab{3,4a}cd/\n    ab{3,4a}cd\n 0: ab{3,4a}cd\n\n/{4,5a}bc/\n    {4,5a}bc\n 0: {4,5a}bc\n\n/\\x0{ab}/\n    \\0{ab}\n 0: \\x00{ab}\n\n/^(a(b))\\1\\g1\\g{1}\\g-1\\g{-1}\\g{-02}Z/\n    ababababbbabZXXXX\n 0: ababababbbabZ\n 1: ab\n 2: b\n\n/.*?a(*PRUNE)b/\n    aab\n 0: ab\n\n/.*?a(*PRUNE)b/s\n    aab\n 0: ab\n\n/^a(*PRUNE)b/s\n\\= Expect no match\n    aab\nNo match\n\n/.*?a(*SKIP)b/\n    aab\n 0: ab\n\n/(?(8000000000/\nFailed: error 161 at offset 13: subpattern number is too big\n        here: ...8000000000 |<--|\n\n/((?(R8000000000)))/\nFailed: error 161 at offset 9: subpattern number is too big\n        here: ((?(R8000 |<--| 000000)))\n\n/0(?0)|(1)(*THEN)(*SKIP:0)(*FAIL)/\n\\= Expect no match\n    01\nNo match\n\n/(?(1)()\\983040\\2)/\nFailed: error 161 at offset 14: subpattern number is too big\n        here: ...)()\\983040 |<--| \\2)\n\n/(*LIMIT_MATCH=)abc/\nFailed: error 160 at offset 14: (*VERB) not recognized or malformed\n        here: ...MIT_MATCH= |<--| )abc\n\n/(*CRLF)(*LIMIT_MATCH=)abc/\nFailed: error 160 at offset 21: (*VERB) not recognized or malformed\n        here: ...MIT_MATCH= |<--| )abc\n\n/(?:ab)?(?:ab)(?:ab)/\n    abab\n 0: abab\n    ababab\n 0: ababab\n\\= Expect no match\n    aba\nNo match\n\n/((*MARK:A))++a(*SKIP:B)b/\n\\= Expect no match\n    aacb\nNo match\n\n/(^aa(*MARK:X)a(*SKIP:X)c|(?!^)a+b)/g\n    aaab\n 0: ab\n 1: ab\n\n/(^aa(*MARK:X)a(*SKIP:Y)c|(?!^)a+b)/g\n    aaab\n 0: aab\n 1: aab\n\n/(^aa(*MARK:Y)a(*SKIP:X)c|(?!^)a+b)/g\n    aaab\n 0: aab\n 1: aab\n\n/(^aa(*MARK:X)a(*SKIP:XX)c|(?!^)a+b)/g\n    aaab\n 0: aab\n 1: aab\n\n/(^aa(*MARK:XX)a(*SKIP:X)c|(?!^)a+b)/g\n    aaab\n 0: aab\n 1: aab\n\n/(*MARK:a\\zb)z/alt_verbnames\nFailed: error 140 at offset 10: invalid escape sequence in (*VERB) name\n        here: (*MARK:a\\z |<--| b)z\n\n/(*:ab\\t(d\\)c)xxx/\nFailed: error 122 at offset 13: unmatched closing parenthesis\n        here: ...ab\\t(d\\)c) |<--| xxx\n\n/(*:ab\\t(d\\)c)xxx/alt_verbnames,mark\n    cxxxz\n 0: xxx\nMK: ab\\x09(d)c\n\n/(*:A\\Qxx)x\\EB)x/alt_verbnames,mark\n    x\n 0: x\nMK: Axx)xB\n\n/(*:A\\ExxxB)x/alt_verbnames,mark\n    x\n 0: x\nMK: AxxxB\n\n/(*: A \\ and #comment\n     \\ B)x/x,alt_verbnames,mark\n    x\n 0: x\nMK: A and B\n\n/(*: A \\ and #comment\n     \\ B)x/alt_verbnames,mark\n    x\n 0: x\nMK:  A  and #comment\\x0a      B\n\n/(*: A \\ and #comment\n     \\ B)x/x,mark\n    x\n 0: x\nMK:  A \\ and #comment\\x0a     \\ B\n\n/(*: A \\ and #comment\n     \\ B)x/mark\n    x\n 0: x\nMK:  A \\ and #comment\\x0a     \\ B\n\n/(*:A\nB)x/alt_verbnames,mark\n    x\n 0: x\nMK: A\\x0aB\n\n/(*:abc\\Qpqr)/alt_verbnames\nFailed: error 160 at offset 12: (*VERB) not recognized or malformed\n        here: ...:abc\\Qpqr) |<--|\n\n/abc/use_offset_limit\n    1234abcde\\=offset_limit=100\n 0: abc\n    1234abcde\\=offset_limit=9\n 0: abc\n    1234abcde\\=offset_limit=4\n 0: abc\n    1234abcde\\=offset_limit=4,offset=4\n 0: abc\n\\= Expect no match\n    1234abcde\\=offset_limit=4,offset=5\nNo match\n    1234abcde\\=offset_limit=3\nNo match\n\n/(?<=abc)/use_offset_limit\n    1234abc\\=offset_limit=7\n 0: \n\\= Expect no match\n    1234abc\\=offset_limit=6\nNo match\n\n/A/g,replace=-,use_offset_limit\n    XAXAXAXAXA\\=offset_limit=4\n 2: X-X-XAXAXA\n\n/abc/\n\\= Expect error\n    1234abcde\\=offset_limit=4\nFailed: error -56: offset limit set without PCRE2_USE_OFFSET_LIMIT\n\n/^\\w/m,use_offset_limit\n    \\n..\\naa\\=offset_limit=3\nNo match\n    \\n..\\naa\\=offset_limit=4\n 0: a\n\n/abcd/null_context\n    abcd\\=null_context\n 0: abcd\n\\= Expect not allowed together\n    abcd\\=null_context,find_limits\n** Not allowed together: find_limits null_context\n    abcd\\=allusedtext,startchar\n** Not allowed together: allusedtext startchar\n\n#if !ebcdic\n\n/abcd/replace=w\\rx\\x82y\\o{333}z(\\Q12\\$34$$\\x34\\E5$$),substitute_extended\n    abcd\n 1: w\\x0dx\\x82y\\xdbz(12\\$34$$\\x345$)\n\n/abcd/replace=w\\rx\\x82y\\o{333}z(\\Q12\\$34$$\\x34\\E5$$),substitute_extended,substitute_literal\n    >>abcd<<\n 1: >>w\\rx\\x82y\\o{333}z(\\Q12\\$34$$\\x34\\E5$$)<<\n\n#endif\n    \n/abcd/g,replace=\\$1$2\\,substitute_literal\n    XabcdYabcdZ\n 2: X\\$1$2\\Y\\$1$2\\Z\n\n/a(bc)(DE)/replace=a\\u$1\\U$1\\E$1\\l$2\\L$2\\Eab\\Uab\\LYZ\\EDone,substitute_extended\n    abcDE\n 1: aBcBCbcdEdeabAByzDone\n\n/(Hello)|wORLD/g,replace=>${1:+\\l\\U$0:\\u\\L$0}<,substitute_extended\n    Hello between wORLD\n 2: >hELLO< between >World<\n\n/abcd/replace=xy\\kz,substitute_extended\n    abcd\nFailed: error -57 at offset 4 in replacement: bad escape sequence in replacement string\n        here: xy\\k |<--| z\n\n/a(?:(b)|(c))/substitute_extended,replace=X${1:+1:-1}X${2:+2:-2}\n    ab\n 1: X1X-2\n    ac\n 1: X-1X2\n    ab\\=replace=${1:+$1\\:$1:$2}\n 1: b:b\n    ac\\=replace=${1:+$1\\:$1:$2}\n 1: c\n    >>ac<<\\=replace=${1:+$1\\:$1:$2},substitute_literal\n 1: >>${1:+$1\\:$1:$2}<<\n\n/a(?:(b)|(c))/substitute_extended,replace=X${1:-1:-1}X${2:-2:-2}\n    ab\n 1: XbX2:-2\n    ac\n 1: X1:-1Xc\n\n/(a)/substitute_extended,replace=>${1:+\\Q$1:{}$$\\E+\\U$1}<\n    a\n 1: >$1:{}$$+A<\n\n/X(b)Y/substitute_extended\n    XbY\\=replace=x${1:+$1\\U$1}y\n 1: xbBY\n    XbY\\=replace=\\Ux${1:+$1$1}y\n 1: XBBY\n\n/a/substitute_extended,replace=${*MARK:+a:b}\n    a\nFailed: error -58 at offset 7 in replacement: expected closing curly bracket in replacement string\n        here: ${*MARK |<--| :+a:b}\n\n/(abcd)/replace=${1:+xy\\kz},substitute_extended\n    abcd\nFailed: error -57 at offset 9 in replacement: bad escape sequence in replacement string\n        here: ${1:+xy\\k |<--| z}\n\n/(abcd)/\n    abcd\\=replace=${1:+xy\\kz},substitute_extended\nFailed: error -57 at offset 9 in replacement: bad escape sequence in replacement string\n        here: ${1:+xy\\k |<--| z}\n\n/abcd/substitute_extended,replace=>$1<\n    abcd\nFailed: error -49 at offset 3 in replacement: unknown substring\n        here: >$1 |<--| <\n\n/abcd/substitute_extended,replace=>xxx${xyz}<<<\n    abcd\nFailed: error -49 at offset 10 in replacement: unknown substring\n        here: >xxx${xyz} |<--| <<<\n\n/(?J)(?:(?<A>a)|(?<A>b))/replace=<$A>\n    [a]\n 1: [<a>]\n    [b]\n 1: [<b>]\n\\= Expect error\n    (a)\\=ovector=1\nFailed: error -54 at offset 3 in replacement: requested value is not available\n        here: <$A |<--| >\n\n/(a)|(b)/replace=<$1>\n\\= Expect error\n    b\nFailed: error -55 at offset 3 in replacement: requested value is not set\n        here: <$1 |<--| >\n\n/(aa)(BB)/substitute_extended,replace=\\U$1\\L$2\\E$1..\\U$1\\l$2$1\n    aaBB\n 1: AAbbaa..AAbBaa\n    \n/abcd/replace=wxyz,substitute_matched\n    abcd\n 1: wxyz\n    pqrs \n 0: pqrs\n\n/abcd/g\n    >abcd1234abcd5678<\\=replace=wxyz,substitute_matched\n 2: >wxyz1234wxyz5678<\n\n#if !ebcdic\n\n/abc/substitute_extended,replace=>\\045<\n    abc\n 1: >%<\n\n/abc/substitute_extended,replace=>\\45<\n    abc\n 1: >%<\n\n/abc/substitute_extended,replace=>\\o{45}<\n    abc\n 1: >%<\n\n#endif\n\n/abc/substitute_extended,replace=>\\845<\n    abc\nFailed: error -49 at offset 5 in replacement: unknown substring\n        here: >\\845 |<--| <\n\n/a(b)(c)/substitute_extended,replace=>\\1<\n    abc\n 1: >b<\n\n/a(b)(c)/substitute_extended,replace=>\\2<\n    abc\n 1: >c<\n\n/a(b)(c)/substitute_extended,replace=>\\3<\n    abc\nFailed: error -49 at offset 3 in replacement: unknown substring\n        here: >\\3 |<--| <\n\n/a(?<namED_1>b)c/substitute_extended\n    abc\\=replace=>${namED_1}<\n 1: >b<\n\n/a(?<namedverylongbutperfectlylegalsoyoushouldnthaveaproblem_1>b)c/substitute_extended\n    abc\\=replace=>${namedverylongbutperfectlylegalsoyoushouldnthaveaproblem_1}<\n 1: >b<\n\n/abc/substitute_extended\n    abc\\=replace=\\a\\b\\e\\f\\n\\r\\t\\v\\\\\n 1: \\x07\\x08\\x1b\\x0c\\x0a\\x0d\\x09\\x0b\\\n\n/a(b)c/\n    LabcR\\=replace=>$&<\n 1: L>abc<R\n    LabcR\\=replace=>$`<\n 1: L>L<R\n    LabcR\\=replace=>$'<\n 1: L>R<R\n    LabcR\\=replace=>$_<\n 1: L>LabcR<R\n\n/A(.)|B(.)/\n    AMZ\\=replace=>$+<\n 1: >M<Z\n    BMZ\\=replace=>$+<\n 1: >M<Z\n    AMZ\\=replace=>$+\n 1: >MZ\n    AMZ\\=replace=>$+{name}\nFailed: error -35 at offset 2 in replacement: invalid replacement string\n        here: >$ |<--| +{name}\n    BMZ\\=ovector=2\nMatched, but too many substrings\n 0: BM\n 1: <unset>\n    BMZ\\=ovector=3\n 0: BM\n 1: <unset>\n 2: M\n    BMZ\\=ovector=2,replace=>$+<\nFailed: error -54 at offset 3 in replacement: requested value is not available\n        here: >$+ |<--| <\n    BMZ\\=ovector=3,replace=>$+<\n 1: >M<Z\n    BMZ\\=ovector=2,substitute_matched,replace=>$+<\nFailed: error -54 at offset 3 in replacement: requested value is not available\n        here: >$+ |<--| <\n    BMZ\\=ovector=3,substitute_matched,replace=>$+<\n 1: >M<Z\n\n/A|(B)/\n    B\\=replace=>$1<\n 1: >B<\n    A\\=replace=>$1<\nFailed: error -55 at offset 3 in replacement: requested value is not set\n        here: >$1 |<--| <\n    B\\=substitute_unset_empty,replace=>$1<\n 1: >B<\n    A\\=substitute_unset_empty,replace=>$1<\n 1: ><\n    B\\=replace=>$+<\n 1: >B<\n    A\\=replace=>$+<\nFailed: error -55 at offset 3 in replacement: requested value is not set\n        here: >$+ |<--| <\n    B\\=substitute_unset_empty,replace=>$+<\n 1: >B<\n    A\\=substitute_unset_empty,replace=>$+<\n 1: ><\n\n/ABC/\n    ABC\\=replace=$+z\nFailed: error -49 at offset 2 in replacement: unknown substring\n        here: $+ |<--| z\n    ABC\\=substitute_unknown_unset,replace=$+z\nFailed: error -55 at offset 2 in replacement: requested value is not set\n        here: $+ |<--| z\n    ABC\\=substitute_unset_empty,replace=$+z\nFailed: error -49 at offset 2 in replacement: unknown substring\n        here: $+ |<--| z\n    ABC\\=substitute_unknown_unset,substitute_unset_empty,replace=$+z\n 1: z\n\n/^(o(\\1{72}{\\\"{\\\\{00000059079}\\d*){74}}){19}/I\nCapture group count = 2\nMax back reference = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'o'\nLast code unit = '}'\nSubject length lower bound = 65535\n\n/((p(?'K/\nFailed: error 142 at offset 7: syntax error in subpattern name (missing terminator?)\n        here: ((p(?'K |<--|\n\n/((p(?'K/no_auto_capture\nFailed: error 142 at offset 7: syntax error in subpattern name (missing terminator?)\n        here: ((p(?'K |<--|\n\n/abc/replace=A$3123456789Z\n    abc\nFailed: error -49 at offset 3 in replacement: unknown substring\n        here: A$3 |<--| 123456789Z\n\n/(?<!a{65535}a{5})x/I\nFailed: error 187 at offset 0: lookbehind assertion is too long\n        here: |-->| (?<!a{6553...\n\n/(?<!a{65535})x/I\nCapture group count = 0\nMax lookbehind = 65535\nFirst code unit = 'x'\nSubject length lower bound = 1\n\n/(?=a\\K)/replace=z,allow_lookaround_bsk\n    BaCaD\nFailed: error -60: match with end before start or start moved backwards is not supported\n    \n/(?<=\\K.)/g,replace=-,allow_lookaround_bsk\n    ab\nFailed: error -60: match with end before start or start moved backwards is not supported\n\n/(?'abcdefghijklmnopqrstuvwxyzABCDEFGabcdefghijklmnopqrstuvwxyzABCDEabcdefghijklmnopqrstuvwxyzABCDEabcdefghijklmnopqrstuvwxyzABCDEFGH'toolong)/\nFailed: error 148 at offset 132: subpattern name is too long (maximum 128 code units)\n        here: ...yzABCDEFGH |<--| 'toolong)\n\n/(?'abcdefghijklmnopqrstuvwxyzABCDEFGabcdefghijklmnopqrstuvwxyzABCDEabcdefghijklmnopqrstuvwxyzABCDEabcdefghijklmnopqrstuvwxyzABCDEFG'justright)/\n\n# These two use zero-termination\n/abcd/max_pattern_length=3\nFailed: error 188 at offset 0: pattern string is longer than the limit set by the application\n\n/abc/max_pattern_length=3\n\n# These two, being hex, pass the length\n/abcdefab/hex,max_pattern_length=3\nFailed: error 188 at offset 0: pattern string is longer than the limit set by the application\n\n/abcdef/hex,max_pattern_length=3\n\n# Test compiled length limit\n/(abcdefg){10}/max_pattern_compiled_length=100\nFailed: error 201 at offset 0: compiled pattern would be longer than the limit set by the application\n\n# These patterns used to take a long time to compile\n\n\"(.*)\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\"xI\nCapture group count = 12\nMay match empty string\nOptions: extended\nFirst code unit at start or follows newline\nSubject length lower bound = 0\n\n\"(?<=a()\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\na)\"xI\nCapture group count = 12\nMax lookbehind = 2\nMay match empty string\nOptions: extended\nSubject length lower bound = 0\n\n\"(?|()|())(.*)\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\"xI\nCapture group count = 13\nMay match empty string\nOptions: extended\nSubject length lower bound = 0\n\n\"(?|()|())(?<=a()\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\n((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))\na)\"xI\nFailed: error 135 at offset 9: lookbehind is too complicated\n        here: (?|()|()) |-->| (?<=a()\n((...\n\n# Test the use of malloc for caching group information when there are more\n# groups than fit into the on-stack workspace.\n\n/\\[()]{1024}/I,expand\nExpanded: ()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()\nCapture group count = 1024\nMay match empty string\nSubject length lower bound = 0\n\n# Test minlength capped at 65535\n\n/(A{65000})\\1{65000}/I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'A'\nLast code unit = 'A'\nSubject length lower bound = 65535\n\n# Test group scans when numbers are not unique\n\n/(?|()+|(a)+)/BI\n------------------------------------------------------------------\n        Bra\n        Bra\n        SCBra 1\n        KetRmax\n        Alt\n        CBra 1\n        a\n        KetRmax\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\n\n/(?|(a)+|()+)/BI\n------------------------------------------------------------------\n        Bra\n        Bra\n        CBra 1\n        a\n        KetRmax\n        Alt\n        SCBra 1\n        KetRmax\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\n\n/(?|()|(a))/BI\n------------------------------------------------------------------\n        Bra\n        Bra\n        CBra 1\n        Ket\n        Alt\n        CBra 1\n        a\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\n\n/(?|(a)|())/BI\n------------------------------------------------------------------\n        Bra\n        Bra\n        CBra 1\n        a\n        Ket\n        Alt\n        CBra 1\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nMay match empty string\nSubject length lower bound = 0\n\n# Test CRLF handling in empty string substitutions\n\n/^$/gm,newline=anycrlf,replace=-\n    X\\r\\n\\r\\nY\n 1: X\\x0d\\x0a-\\x0d\\x0aY\n\n/^$/gm,newline=crlf,replace=-\n    X\\r\\n\\r\\nY\n 1: X\\x0d\\x0a-\\x0d\\x0aY\n\n/^$/gm,newline=any,replace=-\n    X\\r\\n\\r\\nY\n 1: X\\x0d\\x0a-\\x0d\\x0aY\n\n\"(*ANYCRLF)(?m)^(.*[^0-9\\r\\n].*|)$\"g,replace=NaN\n    15\\r\\nfoo\\r\\n20\\r\\nbar\\r\\nbaz\\r\\n\\r\\n20\n 4: 15\\x0d\\x0aNaN\\x0d\\x0a20\\x0d\\x0aNaN\\x0d\\x0aNaN\\x0d\\x0aNaN\\x0d\\x0a20\n\n/a[[:punct:]b]/bincode\n------------------------------------------------------------------\n        Bra\n        a\n        [!-/:-@[-`b{-~]\n        Ket\n        End\n------------------------------------------------------------------\n\n/a[b[:punct:]]/bincode\n------------------------------------------------------------------\n        Bra\n        a\n        [!-/:-@[-`b{-~]\n        Ket\n        End\n------------------------------------------------------------------\n\n/L(?#(|++<!(2)?/B\n------------------------------------------------------------------\n        Bra\n        L?+\n        Ket\n        End\n------------------------------------------------------------------\n\n/L(?#(|++<!(2)?/B,no_auto_possess\n------------------------------------------------------------------\n        Bra\n        L?\n        Ket\n        End\n------------------------------------------------------------------\n\n/L(?#(|++<!(2)?/B,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 14\n        L?+\n        Callout 255 14 0\n        Ket\n        End\n------------------------------------------------------------------\n\n/L(?#(|++<!(2)?/B,no_auto_possess,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 14\n        L?\n        Callout 255 14 0\n        Ket\n        End\n------------------------------------------------------------------\n\n/(A*)\\E+/B,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 1\n        SCBra 1\n        Callout 255 1 2\n        A*\n        Callout 255 3 4\n        KetRmax\n        Callout 255 7 0\n        Ket\n        End\n------------------------------------------------------------------\n\n/()\\Q\\E*]/B,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 1\n        Brazero\n        SCBra 1\n        Callout 255 1 6\n        KetRmax\n        Callout 255 7 1\n        ]\n        Callout 255 8 0\n        Ket\n        End\n------------------------------------------------------------------\n    a[bc]d\n--->a[bc]d\n +0     ^      (\n +1     ^      )\\Q\\E*\n +7     ^      ]\n +8     ^^     End of pattern\n 0: ]\n 1: \n\n#if !ebcdic\n\n/\\x8a+f|;T?(*:;.'?`(\\xeap ){![^()!y*''C*(?';]{1;(\\x08)/B,alt_verbnames,dupnames,extended\n------------------------------------------------------------------\n        Bra\n        \\x{8a}++\n        f\n        Alt\n        ;\n        T?\n        *MARK ;.'?`(\\x{ea}p\n        {!\n        [^!'-*;?Cy]\n        {1;\n        CBra 1\n        \\x08\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n#endif\n\n# Tests for NULL characters in comments and verb \"names\" and callouts\n\n# /A#B\\x00C\\x0aZ/\n/41 23 42 00 43 0a 5a/Bx,hex\n------------------------------------------------------------------\n        Bra\n        AZ\n        Ket\n        End\n------------------------------------------------------------------\n\n# /A+#B\\x00C\\x0a+/\n/41 2b 23 42 00 43 0a 2b/Bx,hex\n------------------------------------------------------------------\n        Bra\n        A++\n        Ket\n        End\n------------------------------------------------------------------\n\n# /A(*:B\\x00W#X\\00Y\\x0aC)Z/\n/41 28 2a 3a 42 00 57 23 58 00 59 0a 43 29 5a/Bx,hex,alt_verbnames\n------------------------------------------------------------------\n        Bra\n        A\n        *MARK B\\x{0}WC\n        Z\n        Ket\n        End\n------------------------------------------------------------------\n\n# /A(*:B\\x00W#X\\00Y\\x0aC)Z/\n/41 28 2a 3a 42 00 57 23 58 00 59 0a 43 29 5a/Bx,hex\n------------------------------------------------------------------\n        Bra\n        A\n        *MARK B\\x{0}W#X\\x{0}Y\\x{a}C\n        Z\n        Ket\n        End\n------------------------------------------------------------------\n\n# /A(?C{X\\x00Y})B/\n/41 28 3f 43 7b 58 00 59 7d 29 42/B,hex\n------------------------------------------------------------------\n        Bra\n        A\n        CalloutStr {X\\x{0}Y} 5 10 1\n        B\n        Ket\n        End\n------------------------------------------------------------------\n\n# /A(?#X\\x00Y)B/\n/41 28 3f 23 7b 00 7d 29 42/B,hex\n------------------------------------------------------------------\n        Bra\n        AB\n        Ket\n        End\n------------------------------------------------------------------\n\n# Tests for leading comment in extended patterns\n\n/ (?-x):?/extended\n\n/\u000b(?-x):?/extended\n\n/0b 28 3f 2d 78 29 3a/hex,extended\n\n/#comment\n(?-x):?/extended\n\n/(8(*:6^\\x09x\\xa6l\\)6!|\\xd0:[^:|)\\x09d\\Z\\d{85*m(?'(?<1!)*\\W[*\\xff]!!h\\w]*\\xbe;/alt_bsux,alt_verbnames,allow_empty_class,dollar_endonly,extended,multiline,never_utf,no_dotstar_anchor,no_start_optimize\nFailed: error 162 at offset 49: subpattern name expected\n        here: ...\\d{85*m(?' |<--| (?<1!)*\\W[...\n\n/a|(b)c/replace=>$1<,substitute_unset_empty\n    cat\n 1: c><t\n    xbcom\n 1: x>b<om\n\n/a|(b)c/\n    cat\\=replace=>$1<\nFailed: error -55 at offset 3 in replacement: requested value is not set\n        here: >$1 |<--| <\n    cat\\=replace=>$1<,substitute_unset_empty\n 1: c><t\n    xbcom\\=replace=>$1<,substitute_unset_empty\n 1: x>b<om\n\n/a|(b)c/substitute_extended\n    cat\\=replace=>${2:-xx}<\nFailed: error -49 at offset 9 in replacement: unknown substring\n        here: >${2:-xx} |<--| <\n    cat\\=replace=>${2:-xx}<,substitute_unknown_unset\n 1: c>xx<t\n    cat\\=replace=>${X:-xx}<,substitute_unknown_unset\n 1: c>xx<t\n\n/a|(?'X'b)c/replace=>$X<,substitute_unset_empty\n    cat\n 1: c><t\n    xbcom\n 1: x>b<om\n\n/a|(?'X'b)c/replace=>$Y<,substitute_unset_empty\n    cat\nFailed: error -49 at offset 3 in replacement: unknown substring\n        here: >$Y |<--| <\n    cat\\=substitute_unknown_unset\n 1: c><t\n    cat\\=substitute_unknown_unset,-substitute_unset_empty\nFailed: error -55 at offset 3 in replacement: requested value is not set\n        here: >$Y |<--| <\n\n/a|(b)c/replace=>$2<,substitute_unset_empty\n    cat\nFailed: error -49 at offset 3 in replacement: unknown substring\n        here: >$2 |<--| <\n    cat\\=substitute_unknown_unset\n 1: c><t\n    cat\\=substitute_unknown_unset,-substitute_unset_empty\nFailed: error -55 at offset 3 in replacement: requested value is not set\n        here: >$2 |<--| <\n\n/()()()/use_offset_limit\n    \\=ovector=11000000000\n** Invalid value in \"ovector=11000000000\"\n    \\=callout_fail=11000000000\n** Invalid value in \"callout_fail=11000000000\"\n    \\=callout_fail=1:11000000000\n** Invalid value in \"callout_fail=1:11000000000\"\n    \\=callout_data=11000000000\n** Invalid value in \"callout_data=11000000000\"\n    \\=callout_data=-11000000000\n** Invalid value in \"callout_data=-11000000000\"\n    \\=offset_limit=1100000000000000000000\n** Invalid value in \"offset_limit=1100000000000000000000\"\n    \\=copy=11000000000\n** Invalid value in \"copy=11000000000\"\n\n/(*MARK:A\\x00b)/mark\n    abc\n 0: \nMK: A\\x00b\n\n/(*MARK:A\\x00b)/mark,alt_verbnames\n    abc\n 0: \nMK: A\\x00b\n\n/\"(*MARK:A\" 00 \"b)\"/mark,hex\n    abc\n 0: \nMK: A\\x00b\n\n/\"(*MARK:A\" 00 \"b)\"/mark,hex,alt_verbnames\n    abc\n 0: \nMK: A\\x00b\n\n/efg/hex\n** Unexpected non-hex-digit 'g' at offset 2 in hex pattern: quote missing?\n\n/eff/hex\n** Odd number of digits in hex pattern\n\n/effg/hex\n** Unexpected non-hex-digit 'g' at offset 3 in hex pattern: quote missing?\n\n/(?J)(?'a'))(?'a')/\nFailed: error 122 at offset 11: unmatched closing parenthesis\n        here: ...?J)(?'a')) |<--| (?'a')\n\n/(?<=((?C)0))/\n    9010\n--->9010\n  0  ^       0\n  0   ^      0\n 0: \n 1: 0\n\\= Expect no match\n    abc\n--->abc\n  0  ^      0\n  0   ^     0\n  0    ^    0\nNo match\n\n/aaa/\n\\[abc]{10000000000000000000000000000}\n** Repeat count too large\n\\[a]{3}\n 0: aaa\n\n/\\[AB]{6000000000000000000000}/expand\n** Pattern repeat count too large\n\n# Hex uses pattern length, not zero-terminated. This tests for overrunning\n# the given length of a pattern.\n\n/'(*U'/hex\nFailed: error 160 at offset 3: (*VERB) not recognized or malformed\n        here: (*U |<--|\n\n/'(*'/hex\nFailed: error 109 at offset 2: quantifier does not follow a repeatable item\n        here: (* |<--|\n\n/'('/hex\nFailed: error 114 at offset 1: missing closing parenthesis\n        here: ( |<--|\n\n//hex\n\n# These tests are here because Perl never allows a back reference in a\n# lookbehind. PCRE2 supports some limited cases.\n\n/([ab])...(?<=\\1)z/\n    a11az\n 0: a11az\n 1: a\n    b11bz\n 0: b11bz\n 1: b\n\\= Expect no match\n    b11az\nNo match\n\n/(?|([ab]))...(?<=\\1)z/\nFailed: error 125 at offset 13: length of lookbehind assertion is not limited\n        here: ...([ab]))... |-->| (?<=\\1)z\n\n/([ab])(\\1)...(?<=\\2)z/\n    aa11az\n 0: aa11az\n 1: a\n 2: a\n\n/(a\\2)(b\\1)(?<=\\2)/\nFailed: error 125 at offset 10: length of lookbehind assertion is not limited\n        here: (a\\2)(b\\1) |-->| (?<=\\2)\n\n/(?<A>[ab])...(?<=\\k'A')z/\n    a11az\n 0: a11az\n 1: a\n    b11bz\n 0: b11bz\n 1: b\n\\= Expect no match\n    b11az\nNo match\n\n/(?<A>[ab])...(?<=\\k'A')(?<A>)z/dupnames\nFailed: error 125 at offset 13: length of lookbehind assertion is not limited\n        here: ...A>[ab])... |-->| (?<=\\k'A')...\n\n# Perl does not support \\g+n\n\n/((\\g+1X)?([ab]))+/\n    aaXbbXa\n 0: aaXbbXa\n 1: bXa\n 2: bX\n 3: a\n\n/ab(?C1)c/auto_callout\n    abc\n--->abc\n +0 ^       a\n +1 ^^      b\n  1 ^ ^     c\n +8 ^  ^    End of pattern\n 0: abc\n\n/'ab(?C1)c'/hex,auto_callout\n    abc\n--->abc\n +0 ^       a\n +1 ^^      b\n  1 ^ ^     c\n +8 ^  ^    End of pattern\n 0: abc\n\n# Perl accepts these, but gives a warning. We can't warn, so give an error.\n\n/[a-[:digit:]]+/\nFailed: error 150 at offset 12: invalid range in character class\n        here: ...-[:digit:] |<--| ]+\n    a-a9-a\n\n/[A-[:digit:]]+/\nFailed: error 150 at offset 12: invalid range in character class\n        here: ...-[:digit:] |<--| ]+\n    A-A9-A\n\n/[a-\\d]+/\nFailed: error 150 at offset 5: invalid range in character class\n        here: [a-\\d |<--| ]+\n    a-a9-a\n\n/(?<RA>abc)(?(R)xyz)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        abc\n        Ket\n        Cond\n        Cond rec any\n        xyz\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?<R>abc)(?(R)xyz)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        abc\n        Ket\n        Cond\n      1 Capture ref\n        xyz\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?=.*[A-Z])/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n\n/()(?<=(?0))/\nFailed: error 125 at offset 2: length of lookbehind assertion is not limited\n        here: () |-->| (?<=(?0))\n\n/(?<!|!(?<!))/\n\n/(?<!|!|!||||||(?<!)||(?<!)!|!||(?<!)!|!(?<!)!|!|!|!||||!!|<!)!|!||||!|/\n\n/{2,2{2,2/use_length\n\n/.>*?\\g'0/use_length\nFailed: error 219 at offset 8: syntax error in subpattern number (missing terminator?)\n        here: .>*?\\g'0 |<--|\n\n/.>*?\\g'0/\nFailed: error 219 at offset 8: syntax error in subpattern number (missing terminator?)\n        here: .>*?\\g'0 |<--|\n\n/{̈́̈́{'{22{2{{2{'{22{\u0012{22{2{'{22{2{{2{{222{{2{'{22{2{22{2{'{22{2{{2{'{22{2{22{2{'{'{22{2{22{2{'{22{2{{2{'{22{2{22{2{'{222{2Ą̈́̈́{'{22{2{{2{'{22{\u0012{11{2{'{22{2{{2{{'{22{2{{2{'{22{\u0012{22{1{'{22{2{{2{{222{{2{'{22{2{22{2{'{/auto_callout\n\n//\n\\=get=i00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n** Group name in \"get\" is too long\n\\=get=i2345678901234567890123456789012,get=i1245678901234567890123456789012\n** Too many characters in named \"get\" modifiers\n\n\"(?(?C))\"\nFailed: error 128 at offset 6: atomic assertion expected after (?( or (?(?C)\n        here: (?(?C) |<--| )\n\n/(?(?(?(?(?(?))))))/\nFailed: error 128 at offset 3: atomic assertion expected after (?( or (?(?C)\n        here: (?( |<--| ?(?(?(?(?)...\n\n/(?<=(?1))((?s))/anchored\n\n/(*:ab)*/\nFailed: error 109 at offset 7: quantifier does not follow a repeatable item\n        here: (*:ab)* |<--|\n\n%(*:\u001e(:\u0011(\u001fsvvvvvvvvvv:]*[   Z!*;[]*[^[]*!^[\u0019+.+{{2,7}'      _\\\\\\\\\\\\\\\\\\\\\\\\\\)?.:..    *w////\\\\\\Q\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\T\\\\\\\\\\+/?/////'+\\\\\\EEE?/////'+/*+/[^K]?]//(w)%never_backslash_c,alt_verbnames,auto_callout\n\n/./newline=crlf\n    \\=ph\nNo match\n\n/(\\x0e00\\000000\\xc)/replace=\\P,substitute_extended\n    \\x0e00\\000000\\xc\nFailed: error -57 at offset 2 in replacement: bad escape sequence in replacement string\n        here: \\P |<--|\n\n//replace=0\n    \\=offset=7\nFailed: error -33: bad offset value\n\n/(?<=\\G.)/g,replace=+\n    abc\n 3: a+b+c+\n\n\".+\\QX\\E+\"B,no_auto_possess\n------------------------------------------------------------------\n        Bra\n        Any+\n        X+\n        Ket\n        End\n------------------------------------------------------------------\n\n\".+\\QX\\E+\"B,auto_callout,no_auto_possess\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 4\n        Any+\n        Callout 255 4 4\n        X+\n        Callout 255 8 0\n        Ket\n        End\n------------------------------------------------------------------\n\n# This one is here because Perl gives an 'unmatched )' error which goes away\n# if one of the \\) sequences is removed - which is weird. PCRE finds it too\n# complicated to find a minimum matching length.\n\n\"()X|((((((((()))))))((((())))))\\2())((((((\\2\\2)))\\2)(\\22((((\\2\\2)2))\\2)))(2\\ZZZ)+:)Z^|91ZiZZnter(ZZ |91Z(ZZ ZZ(\\r2Z( or#(\\Z2(Z\\Z(\\2\\2)2))\\2Z)Z(\\22Z((\\Z2(Z\\Z(\\2\\2)2))\\2Z+:)Z|91Z(ZZ ZZ(\\r2Z( or#(\\Z2(Z\\Z((Z*(\\2(Z\\':))\\0)i|||||||||||||||loZ\\2\\2)2))\\2Z)Z(\\22Z((\\Z2(Z\\Z(\\2\\2)2))\\2Z)))int \\)\\0nte!rnal errpr\\2\\\\21r(2\\ZZZ)+:)Z!|91Z(ZZ ZZ(\\r2Z( or#(\\Z2(Z\\Z(\\2\\2)2))\\2Z)Z(\\22Z((\\Z2(Z\\Z(\\2\\2)2))\\2Z)))int \\)\\0(2\\ZZZ)+:)Z^|91ZiZZnter(ZZ |91Z(ZZ ZZ(\\r2Z( or#(\\Z2(Z\\Z(\\2\\2)2))\\2Z)Z(\\22Z((\\Z2(Z\\Z(\\2\\2)2))\\2Z)))int \\)\\0(2\\ZZZ)+:)Z^)))int \\)\\0(2\\ZZZ)+:)Z^|91ZiZZnter(ZZernZal ZZ(\\r2Z( or#(\\Z2(Z\\Z(\\2\\2)2))\\2Z)Z(\\22Z((\\Z2(Z\\Z(\\2\\2)2))\\2Z)))int \\))\\ZZ(\\r2Z( or#(\\Z2(Z\\Z(\\2\\2)2))\\2Z)Z(\\22Z((\\Z2(Z\\Z(\\2\\2)))\\2))))((((((\\2\\2))))))\"I\nCapture group count = 108\nMax back reference = 22\nContains explicit CR or LF match\nSubject length lower bound = 1\n\n# This checks that new code for handling groups that may match an empty string\n# works on a very large number of alternatives. This pattern used to provoke a\n# complaint that it was too complicated.\n\n/(?:\\[A|B|C|D|E|F|G|H|I|J|]{200}Z)/expand\n\n# This one used to compile rubbish instead of a compile error, and then\n# behave unpredictably at match time.\n\n/.+(?(?C'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'))?!XXXX.=X/\nFailed: error 128 at offset 63: atomic assertion expected after (?( or (?(?C)\n        here: ...XXXXXXXX') |<--| )?!XXXX.=X\n    .+(?(?C'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'))?!XXXX.=X\n\n/[:[:alnum:]-[[a:lnum:]+/\nFailed: error 150 at offset 12: invalid range in character class\n        here: ...[:alnum:]- |<--| [[a:lnum:]...\n\n/((?(?C'')\\QX\\E(?!((?(?C'')(?!X=X));=)r*X=X));=)/\nFailed: error 128 at offset 9: atomic assertion expected after (?( or (?(?C)\n        here: ((?(?C'') |<--| \\QX\\E(?!((...\n\n/((?(?C'')\\Q\\E(?!((?(?C'')(?!X=X));=)r*X=X));=)/\n\n/abcd/auto_callout\n    abcd\\=callout_error=255:2\n--->abcd\n +0 ^        a\n +1 ^^       b\nFailed: error -37: callout error code\n\n/()(\\g+65534)/\nFailed: error 161 at offset 11: subpattern number is too big\n        here: ...)(\\g+65534 |<--| )\n\n/()(\\g+65533)/\nFailed: error 115 at offset 11: reference to non-existent subpattern\n        here: ...)(\\g+65533 |<-->| )\n\n/\\x00\\x00\\x00\u0017(\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\2*\\x00k\\d+\\x00‎\\x00\\x00\\x00\\x00\\x00\\2*\\x00\\x00\\1*.){36}int^\\x00\\x00\b\\x00(\\1{50779}?)J\\w2/I\nCapture group count = 2\nMax back reference = 2\nFirst code unit = \\xc1\nLast code unit = '2'\nSubject length lower bound = 65535\n\n/(a)(b)\\2\\1\\1\\1\\1/I\nCapture group count = 2\nMax back reference = 2\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 7\n\n/(?<a>a)(?<b>b)\\g{b}\\g{a}\\g{a}\\g{a}\\g{a}(?<a>xx)(?<b>zz)/I,dupnames\nCapture group count = 4\nMax back reference = 4\nNamed capture groups:\n  a   1\n  a   3\n  b   2\n  b   4\nOptions: dupnames\nFirst code unit = 'a'\nLast code unit = 'z'\nSubject length lower bound = 11\n\n//\n    \\=ovector=7777777777\n** Invalid value in \"ovector=7777777777\"\n\n# This is here because Perl matches, even though a COMMIT is encountered\n# outside of the recursion.\n\n/(?1)(A(*COMMIT)|B)D/\n    BAXBAD\nNo match\n\n\"(?1){2}(a)\"B\n------------------------------------------------------------------\n        Bra\n        Recurse\n        Recurse\n        CBra 1\n        a\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n\"(?1){2,4}(a)\"B\n------------------------------------------------------------------\n        Bra\n        Recurse\n        Recurse\n        Brazero\n        Bra\n        Bra\n        Recurse\n        Ket\n        Brazero\n        Bra\n        Recurse\n        Ket\n        Ket\n        CBra 1\n        a\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n# This test differs from Perl for the first subject. Perl ends up with\n# $1 set to 'B'; PCRE2 has it unset (which I think is right).\n\n/^(?:\n(?:A| (?:B|B(*ACCEPT)) (?<=(.)) D)\n(Z)\n)+$/x\n    AZB\n 0: AZB\n 1: <unset>\n 2: Z\n    AZBDZ\n 0: AZBDZ\n 1: B\n 2: Z\n\n# The first of these, when run by Perl, gives the mark 'aa', which is wrong.\n\n'(?>a(*:aa))b|ac' mark\n    ac\n 0: ac\n\n'(?:a(*:aa))b|ac' mark\n    ac\n 0: ac\n\n/(R?){65}/\n    (R?){65}\n 0: \n 1: \n\n/\\[(a)]{60}/expand\n    aaaa\nNo match\n\n/(?<!\\1((?U)1((?U))))(*F)/never_backslash_c,alt_bsux,anchored,extended\n\n/\\g{3/\nFailed: error 219 at offset 4: syntax error in subpattern number (missing terminator?)\n        here: \\g{3 |<--|\n\n/(a(?C1)(b)(c)d)+/\n  abcdabcd\\=callout_capture\nCallout 1: last capture = 0\n--->abcdabcd\n    ^^           (\nCallout 1: last capture = 1\n 1: abcd\n 2: b\n 3: c\n--->abcdabcd\n    ^    ^       (\n 0: abcdabcd\n 1: abcd\n 2: b\n 3: c\n\n# Perl matches this one, but PCRE does not because (*ACCEPT) clears out any\n# pending backtracks in the recursion.\n\n/^ (?(DEFINE) (..(*ACCEPT)|...) ) (?1)$/x\n\\= Expect no match\n    abc\nNo match\n\n# Perl gives no match for this one\n\n/(a(*MARK:m)(*ACCEPT)){0}(?1)/mark\n    abc\n 0: a\nMK: m\n\n/abc/endanchored\n    xyzabc\n 0: abc\n\\= Expect no match\n    xyzabcdef\nNo match\n\\= Expect error\n    xyzabc\\=ph\nFailed: error -34: bad option value\n\n/abc/\n    xyzabc\\=endanchored\n 0: abc\n\\= Expect no match\n    xyzabcdef\\=endanchored\nNo match\n\\= Expect error\n    xyzabc\\=ps,endanchored\nFailed: error -34: bad option value\n\n/abc(*ACCEPT)d/endanchored\n    xyzabc\n 0: abc\n\\= Expect no match\n    xyzabcdef\nNo match\n\n/abc|bcd/endanchored\n    xyzabcd\n 0: bcd\n\\= Expect no match\n    xyzabcdef\nNo match\n\n/a(*ACCEPT)x|aa/endanchored\n    aaa\n 0: a\n\n# Check auto-anchoring when there is a group that is never obeyed at\n# the start of a branch.\n\n/(?(DEFINE)(a))^bc/I\nCapture group count = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'b'\nSubject length lower bound = 2\n\n/(a){0}.*bc/sI\nCapture group count = 1\nCompile options: dotall\nOverall options: anchored dotall\nLast code unit = 'c'\nSubject length lower bound = 2\n\n# This should be anchored, as the condition is always false and there is\n# no alternative branch.\n\n/(?(VERSION>=999)yes)^bc/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 2\n\n# This should not be anchored.\n\n/(?(VERSION>=999)yes|no)^bc/I\nCapture group count = 0\nLast code unit = 'c'\nSubject length lower bound = 4\n\n/(*LIMIT_HEAP=0)xxx/I\nCapture group count = 0\nHeap limit = 0\nFirst code unit = 'x'\nLast code unit = 'x'\nSubject length lower bound = 3\n\n/(*LIMIT_HEAP=123/use_length\nFailed: error 160 at offset 16: (*VERB) not recognized or malformed\n        here: ...T_HEAP=123 |<--|\n\n/(*LIMIT_MATCH=/use_length\nFailed: error 160 at offset 14: (*VERB) not recognized or malformed\n        here: ...MIT_MATCH= |<--|\n\n/(*CRLF)(*LIMIT_DEPTH=/use_length\nFailed: error 160 at offset 21: (*VERB) not recognized or malformed\n        here: ...MIT_DEPTH= |<--|\n\n/(*CRLF)(*LIMIT_RECURSION=1)(*BOGUS/use_length\nFailed: error 160 at offset 34: (*VERB) not recognized or malformed\n        here: ...=1)(*BOGUS |<--|\n\n/\\d{0,3}(*:abc)(?C1)xxx/callout_info\nCallout 1  x\n\n# ----------------------------------------------------------------------\n\n# These are a whole pile of tests that touch lines of code that are not\n# used by any other tests (at least when these were created).\n\n/^a+?x/i,no_start_optimize,no_auto_possess\n\\= Expect no match\n    aaa\nNo match\n\n/^[^a]{3,}?x/i,no_start_optimize,no_auto_possess\n\\= Expect no match\n    bbb\nNo match\n    cc\nNo match\n\n/^X\\S/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\W/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\H/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\h/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\V/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\v/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\h/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\nNo match\n\n/^X\\V/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\n\nNo match\n\n/^X\\v/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XX\nNo match\n\n/^X.+?/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\R+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XX\nNo match\n\n/^X\\H+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\h+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\V+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n    X\\n\nNo match\n\n/^X\\D+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n    X9\nNo match\n\n/^X\\S+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n    X\\n\nNo match\n\n/^X\\W+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n    XX\nNo match\n\n/^X.+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\n\nNo match\n\n/(*CRLF)^X.+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\r\\=ps\nPartial match: XY\\x0d\n\n/^X\\R+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\nX\nNo match\n    X\\n\\r\\n\nNo match\n    X\\n\\rY\nNo match\n    X\\n\\nY\nNo match\n    X\\n\\x{0c}Y\nNo match\n\n/(*BSR_ANYCRLF)^X\\R+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\nX\nNo match\n    X\\n\\r\\n\nNo match\n    X\\n\\rY\nNo match\n    X\\n\\nY\nNo match\n    X\\n\\x{0c}Y\nNo match\n\n/^X\\H+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\t\nNo match\n    XYY\nNo match\n\n/^X\\h+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\t\\t\nNo match\n    X\\tY\nNo match\n\n/^X\\V+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\n\nNo match\n    XYY\nNo match\n\n/^X\\v+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\n\\n\nNo match\n    X\\nY\nNo match\n\n/^X\\D+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY9\nNo match\n    XYY\nNo match\n\n/^X\\d+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X99\nNo match\n    X9Y\nNo match\n\n/^X\\S+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\n\nNo match\n    XYY\nNo match\n\n/^X\\s+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\n\\n\nNo match\n    X\\nY\nNo match\n\n/^X\\W+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X.A\nNo match\n    X++\nNo match\n\n/^X\\w+?Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    Xa.\nNo match\n    Xaa\nNo match\n\n/^X.{1,3}Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    Xa.bd\nNo match\n\n/^X\\h+Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\t\\t\nNo match\n    X\\tY\nNo match\n\n/^X\\V+Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\n\nNo match\n    XYY\nNo match\n\n/^(X(*THEN)Y|AB){0}(?1)/\n    ABX\n 0: AB\n\\= Expect no match\n    XAB\nNo match\n\n/^(?!A(?C1)B)C/\n    ABC\\=callout_error=1,no_jit\nNo match\n\n/^(?!A(?C1)B)C/no_start_optimize\n    ABC\\=callout_error=1\n--->ABC\n  1 ^^      B\nFailed: error -37: callout error code\n\n/^(?(?!A(?C1)B)C)/\n    ABC\\=callout_error=1\n--->ABC\n  1 ^^      B\nFailed: error -37: callout error code\n\n# ----------------------------------------------------------------------\n\n/[a b c]/BxxI\n------------------------------------------------------------------\n        Bra\n        [a-c]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: extended_more\nStarting code units: a b c\nSubject length lower bound = 1\n\n/[a b c]/BxxxI\n------------------------------------------------------------------\n        Bra\n        [a-c]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: extended extended_more\nStarting code units: a b c\nSubject length lower bound = 1\n\n/[a b c]/B,extended_more\n------------------------------------------------------------------\n        Bra\n        [a-c]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[ a b c ]/B,extended_more\n------------------------------------------------------------------\n        Bra\n        [a-c]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[a b](?xx: [ 12 ] (?-xx:[ 34 ]) )y z/B\n------------------------------------------------------------------\n        Bra\n        [ ab]\n        Bra\n        [12]\n        Bra\n        [ 34]\n        Ket\n        Ket\n        y z\n        Ket\n        End\n------------------------------------------------------------------\n\n# Unsetting /x also unsets /xx\n\n/[a b](?xx: [ 12 ] (?-x:[ 34 ]) )y z/B\n------------------------------------------------------------------\n        Bra\n        [ ab]\n        Bra\n        [12]\n        Bra\n        [ 34]\n        Ket\n        Ket\n        y z\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a)(?-n:(b))(c)/nB\n------------------------------------------------------------------\n        Bra\n        Bra\n        a\n        Ket\n        Bra\n        CBra 1\n        b\n        Ket\n        Ket\n        Bra\n        c\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n# ----------------------------------------------------------------------\n# These test the dangerous PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL option.\n\n/\\j\\x{z}\\o{82}\\L\\uabcd\\u\\U\\g{\\g/B,\\bad_escape_is_literal\n** Unrecognized modifier \"\\bad_escape_is_literal\"\n\n/\\N{\\c/IB,bad_escape_is_literal\n------------------------------------------------------------------\n        Bra\n        N{c\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nExtra options: bad_escape_is_literal\nFirst code unit = 'N'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/[\\j\\x{z}\\o\\gAb\\g]/B,bad_escape_is_literal\n------------------------------------------------------------------\n        Bra\n        [Abgjoxz{}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[Q-\\N]/B,bad_escape_is_literal\nFailed: error 171 at offset 5: \\N is not supported in a class\n        here: [Q-\\N |<--| ]\n\n/[\\s-_]/bad_escape_is_literal\nFailed: error 150 at offset 4: invalid range in character class\n        here: [\\s- |<--| _]\n\n/[_-\\s]/bad_escape_is_literal\nFailed: error 150 at offset 5: invalid range in character class\n        here: [_-\\s |<--| ]\n\n/[\\B\\R\\X]/B\nFailed: error 107 at offset 3: escape sequence is invalid in character class\n        here: [\\B |<--| \\R\\X]\n\n/[\\B\\R\\X]/B,bad_escape_is_literal\nFailed: error 107 at offset 3: escape sequence is invalid in character class\n        here: [\\B |<--| \\R\\X]\n\n/[A-\\BP-\\RV-\\X]/B\nFailed: error 107 at offset 5: escape sequence is invalid in character class\n        here: [A-\\B |<--| P-\\RV-\\X]\n\n/[A-\\BP-\\RV-\\X]/B,bad_escape_is_literal\nFailed: error 107 at offset 5: escape sequence is invalid in character class\n        here: [A-\\B |<--| P-\\RV-\\X]\n\n# ----------------------------------------------------------------------\n\n/a\\b(c/literal\n    a\\\\b(c\n 0: a\\b(c\n\n/a\\b(c/literal,caseless\n    a\\\\b(c\n 0: a\\b(c\n    a\\\\B(c\n 0: a\\B(c\n\n/a\\b(c/literal,firstline\n    XYYa\\\\b(c\n 0: a\\b(c\n\\= Expect no match\n    X\\na\\\\b(c\nNo match\n\n/a\\b?c/literal,use_offset_limit\n    XXXXa\\\\b?c\\=offset_limit=4\n 0: a\\b?c\n\\= Expect no match\n    XXXXa\\\\b?c\\=offset_limit=3\nNo match\n\n/a\\b(c/literal,anchored,endanchored\n    a\\\\b(c\n 0: a\\b(c\n\\= Expect no match\n    Xa\\\\b(c\nNo match\n    a\\\\b(cX\nNo match\n    Xa\\\\b(cX\nNo match\n\n//literal,extended\nFailed: error 192 at offset 0: invalid option bits with PCRE2_LITERAL\n\n/a\\b(c/literal,auto_callout,no_start_optimize\n    XXXXa\\\\b(c\n--->XXXXa\\b(c\n +0 ^             a\n +0  ^            a\n +0   ^           a\n +0    ^          a\n +0     ^         a\n +1     ^^        \\\n +2     ^ ^       b\n +3     ^  ^      (\n +4     ^   ^     c\n +5     ^    ^    End of pattern\n 0: a\\b(c\n\n/a\\b(c/literal,auto_callout\n    XXXXa\\\\b(c\n--->XXXXa\\b(c\n +0     ^         a\n +1     ^^        \\\n +2     ^ ^       b\n +3     ^  ^      (\n +4     ^   ^     c\n +5     ^    ^    End of pattern\n 0: a\\b(c\n\n/(*CR)abc/literal\n    (*CR)abc\n 0: (*CR)abc\n\n/cat|dog/I,match_word\nCapture group count = 0\nMax lookbehind = 1\nExtra options: match_word\nStarting code units: c d\nSubject length lower bound = 3\n    the cat sat\n 0: cat\n\\= Expect no match\n    caterpillar\nNo match\n    snowcat\nNo match\n    syndicate\nNo match\n\n/(cat)|dog/I,match_line,literal\nCapture group count = 0\nCompile options: literal\nOverall options: anchored literal\nExtra options: match_line\nFirst code unit = '('\nSubject length lower bound = 9\n    (cat)|dog\n 0: (cat)|dog\n\\= Expect no match\n    the cat sat\nNo match\n    caterpillar\nNo match\n    snowcat\nNo match\n    syndicate\nNo match\n\n# Confirm that the pcre2_set_optimize API does not have any undesired effect on literal patterns\n/(cat)|dog/I,literal,auto_possess_off\nCapture group count = 0\nOptions: literal\nOptimizations: dotstar_anchor,start_optimize\nFirst code unit = '('\nLast code unit = 'g'\nSubject length lower bound = 9\n    (cat)|dog\n 0: (cat)|dog\n\\= Expect no match\n    the cat sat\nNo match\n\n/(cat)|dog/I,literal,dotstar_anchor_off\nCapture group count = 0\nOptions: literal\nOptimizations: auto_possess,start_optimize\nFirst code unit = '('\nLast code unit = 'g'\nSubject length lower bound = 9\n    (cat)|dog\n 0: (cat)|dog\n\\= Expect no match\n    the cat sat\nNo match\n\n/(cat)|dog/I,literal,optimization_none\nCapture group count = 0\nOptions: literal\nOptimizations: <none>\n    (cat)|dog\n 0: (cat)|dog\n\\= Expect no match\n    the cat sat\nNo match\n\n# These should result in errors, since it is not permitted to use the\n# PCRE2_NO_AUTO_POSSESS and PCRE2_NO_DOTSTAR_ANCHOR options on a literal pattern\n/(cat)|dog/literal,no_auto_possess\nFailed: error 192 at offset 0: invalid option bits with PCRE2_LITERAL\n\n/(cat)|dog/literal,no_dotstar_anchor\nFailed: error 192 at offset 0: invalid option bits with PCRE2_LITERAL\n\n/a whole line/match_line,multiline\n    Rhubarb \\na whole line\\n custard\n 0: a whole line\n\\= Expect no match\n    Not a whole line\nNo match\n\n# Perl gets this wrong, failing to capture 'b' in group 1.\n\n/^(b+|a){1,2}?bc/\n    bbc\n 0: bbc\n 1: b\n    \n# And again here, for the \"babc\" subject string. \n\n/^(b*|ba){1,2}?bc/\n    babc\n 0: babc\n 1: ba\n    bbabc\n 0: bbabc\n 1: ba\n    bababc\n 0: bababc\n 1: ba\n\\= Expect no match\n    bababbc\nNo match\n    babababc\nNo match\n\n/[[:digit:]-a]/\nFailed: error 150 at offset 11: invalid range in character class\n        here: ...[:digit:]- |<--| a]\n\n/[[:digit:]-[:print:]]/\nFailed: error 150 at offset 11: invalid range in character class\n        here: ...[:digit:]- |<--| [:print:]]\n\n/[\\d-a]/\nFailed: error 150 at offset 4: invalid range in character class\n        here: [\\d- |<--| a]\n\n/[\\H-z]/\nFailed: error 150 at offset 4: invalid range in character class\n        here: [\\H- |<--| z]\n\n/[\\d-[:print:]]/\nFailed: error 150 at offset 4: invalid range in character class\n        here: [\\d- |<--| [:print:]]\n\n# Perl gets the second of these wrong, giving no match.\n\n\"(?<=(a))\\1?b\"I\nCapture group count = 1\nMax back reference = 1\nMax lookbehind = 1\nLast code unit = 'b'\nSubject length lower bound = 1\n    ab\n 0: b\n 1: a\n    aaab \n 0: ab\n 1: a\n\n\"(?=(a))\\1?b\"I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    ab\n 0: ab\n 1: a\n    aaab\n 0: ab\n 1: a\n    \n# JIT does not support callout_extra  \n    \n/(*NO_JIT)(a+)b/auto_callout,no_start_optimize,no_auto_possess\n\\= Expect no match\n    aac\\=callout_extra \nNew match attempt\n--->aac\n +9 ^       (\n+10 ^       a+\n+12 ^ ^     )\n+13 ^ ^     b\nBacktrack\n--->aac\n+12 ^^      )\n+13 ^^      b\nBacktrack\nNo other matching paths\nNew match attempt\n--->aac\n +9  ^      (\n+10  ^      a+\n+12  ^^     )\n+13  ^^     b\nBacktrack\nNo other matching paths\nNew match attempt\n--->aac\n +9   ^     (\n+10   ^     a+\nBacktrack\nNo other matching paths\nNew match attempt\n--->aac\n +9    ^    (\n+10    ^    a+\nNo match\n    \n/(*NO_JIT)a+(?C'XXX')b/no_start_optimize,no_auto_possess\n\\= Expect no match\n    aac\\=callout_extra \nNew match attempt\nCallout (15): 'XXX'\n--->aac\n    ^ ^     b\nBacktrack\nCallout (15): 'XXX'\n--->aac\n    ^^      b\nBacktrack\nNo other matching paths\nNew match attempt\nCallout (15): 'XXX'\n--->aac\n     ^^     b\nNo match\n\n/\\n/firstline\n    xyz\\nabc\n 0: \\x0a\n\n/\\nabc/firstline\n    xyz\\nabc\n 0: \\x0aabc\n\n/\\x{0a}abc/firstline,newline=crlf\n\\= Expect no match\n    xyz\\r\\nabc\nNo match\n\n/[abc]/firstline\n\\= Expect no match\n    \\na\nNo match\n    \n# These tests are matched in test 1 as they are Perl compatible. Here we are\n# looking at what does and does not get auto-possessified. \n\n/(?(DEFINE)(?<optional_a>a?))^(?&optional_a)a$/B\n------------------------------------------------------------------\n        Bra\n        Cond\n        Cond false\n        CBra 1\n        a?\n        Ket\n        Ket\n        ^\n        Recurse\n        a\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?(DEFINE)(?<optional_a>a?)X)^(?&optional_a)a$/B\n------------------------------------------------------------------\n        Bra\n        Cond\n        Cond false\n        CBra 1\n        a?\n        Ket\n        X\n        Ket\n        ^\n        Recurse\n        a\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \n/^(a?)b(?1)a/B\n------------------------------------------------------------------\n        Bra\n        ^\n        CBra 1\n        a?\n        Ket\n        b\n        Recurse\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(a?)+b(?1)a/B\n------------------------------------------------------------------\n        Bra\n        ^\n        SCBra 1\n        a?\n        KetRmax\n        b\n        Recurse\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(a?)++b(?1)a/B\n------------------------------------------------------------------\n        Bra\n        ^\n        SCBraPos 1\n        a?\n        KetRpos\n        b\n        Recurse\n        a\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(a?)+b/B\n------------------------------------------------------------------\n        Bra\n        ^\n        SCBra 1\n        a?\n        KetRmax\n        b\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?=a+)a(a+)++b/B\n------------------------------------------------------------------\n        Bra\n        Assert\n        a++\n        Ket\n        a\n        CBraPos 1\n        a++\n        KetRpos\n        b\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?<=(?=.){4,5}x)/B\n------------------------------------------------------------------\n        Bra\n        Assert back\n      1 Reverse\n        Assert\n        Any\n        Ket\n        Assert\n        Any\n        Ket\n        Assert\n        Any\n        Ket\n        Assert\n        Any\n        Ket\n        Brazero\n        Assert\n        Any\n        Ket\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n# Perl behaves differently with these when optimization is turned off\n\n/a(*PRUNE:X)bc|qq/mark,no_start_optimize\n\\= Expect no match\n    axy\nNo match, mark = X\n\n/a(*THEN:X)bc|qq/mark,no_start_optimize\n\\= Expect no match\n    axy\nNo match, mark = X\n\n/(?^x-i)AB/ \nFailed: error 194 at offset 5: invalid hyphen in option setting\n        here: (?^x- |<--| i)AB\n\n/(?^-i)AB/ \nFailed: error 194 at offset 4: invalid hyphen in option setting\n        here: (?^- |<--| i)AB\n\n/(?x-i-i)/\nFailed: error 194 at offset 6: invalid hyphen in option setting\n        here: (?x-i- |<--| i)\n\n/(?(?=^))b/I\nCapture group count = 0\nLast code unit = 'b'\nSubject length lower bound = 1\n    abc\n 0: b\n\n/(?(?=^)|)b/I\nCapture group count = 0\nFirst code unit = 'b'\nSubject length lower bound = 1\n    abc\n 0: b\n\n/(?(?=^)|^)b/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'b'\nSubject length lower bound = 1\n    bbc\n 0: b\n\\= Expect no match\n    abc     \nNo match\n\n/(?(1)^|^())/I\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 0\n\n/(?(1)^())b/I\nCapture group count = 1\nMax back reference = 1\nLast code unit = 'b'\nSubject length lower bound = 1\n\n/(?(1)^())+b/I,aftertext\nCapture group count = 1\nMax back reference = 1\nLast code unit = 'b'\nSubject length lower bound = 1\n    abc\n 0: b\n 0+ c\n\n/(?(1)^()|^)+b/I,aftertext\nCapture group count = 1\nMax back reference = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'b'\nSubject length lower bound = 1\n    bbc \n 0: b\n 0+ bc\n\\= Expect no match     \n    abc\nNo match\n\n/(?(1)^()|^)*b/I,aftertext\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'b'\nSubject length lower bound = 1\n    bbc \n 0: b\n 0+ bc\n    abc\n 0: b\n 0+ c\n    xbc \n 0: b\n 0+ c\n\n/(?(1)^())+b/I,aftertext\nCapture group count = 1\nMax back reference = 1\nLast code unit = 'b'\nSubject length lower bound = 1\n    abc\n 0: b\n 0+ c\n\n/(?(1)^a()|^a)+b/I,aftertext\nCapture group count = 1\nMax back reference = 1\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    abc \n 0: ab\n 0+ c\n\\= Expect no match     \n    bbc\nNo match\n\n/(?(1)^|^(a))+b/I,aftertext\nCapture group count = 1\nMax back reference = 1\nCompile options: <none>\nOverall options: anchored\nLast code unit = 'b'\nSubject length lower bound = 1\n    abc \n 0: ab\n 0+ c\n 1: a\n\\= Expect no match     \n    bbc\nNo match\n\n/(?(1)^a()|^a)*b/I,aftertext\nCapture group count = 1\nMax back reference = 1\nLast code unit = 'b'\nSubject length lower bound = 1\n    abc \n 0: ab\n 0+ c\n    bbc\n 0: b\n 0+ bc\n    xbc \n 0: b\n 0+ c\n\n/a(b)c|xyz/g,allvector,replace=<$0>\n    abcdefabcpqr\\=ovector=4\n 2: <abc>def<abc>pqr\n 0: 6 9\n 1: 7 8\n 2: <unchanged>\n 3: <unchanged>\n    abxyz\\=ovector=4\n 1: ab<xyz>\n 0: 2 5\n 1: <unset>\n 2: <unchanged>\n 3: <unchanged>\n    abcdefxyz\\=ovector=4\n 2: <abc>def<xyz>\n 0: 6 9\n 1: <unset>\n 2: <unchanged>\n 3: <unchanged>\n    \n/a(b)c|xyz/allvector\n    abcdef\\=ovector=4\n 0: abc\n 1: b\n 2: <unchanged>\n 3: <unchanged>\n    abxyz\\=ovector=4\n 0: xyz\n 1: <unset>\n 2: <unchanged>\n 3: <unchanged>\n\n/a(b)c|xyz/g,replace=<$0>,substitute_callout\n    abcdefabcpqr\n 1(2) Old 0 3 \"abc\" New 0 5 \"<abc>\"\n 2(2) Old 6 9 \"abc\" New 8 13 \"<abc>\"\n 2: <abc>def<abc>pqr\n    abxyzpqrabcxyz\n 1(1) Old 2 5 \"xyz\" New 2 7 \"<xyz>\"\n 2(2) Old 8 11 \"abc\" New 10 15 \"<abc>\"\n 3(1) Old 11 14 \"xyz\" New 15 20 \"<xyz>\"\n 3: ab<xyz>pqr<abc><xyz>\n    12abc34xyz99abc55\\=substitute_stop=2\n 1(2) Old 2 5 \"abc\" New 2 7 \"<abc>\"\n 2(1) Old 7 10 \"xyz\" New 9 14 \"<xyz> STOPPED\"\n 2: 12<abc>34xyz99abc55\n    12abc34xyz99abc55\\=substitute_skip=1\n 1(2) Old 2 5 \"abc\" New 2 7 \"<abc> SKIPPED\"\n 2(1) Old 7 10 \"xyz\" New 7 12 \"<xyz>\"\n 3(2) Old 12 15 \"abc\" New 14 19 \"<abc>\"\n 3: 12abc34<xyz>99<abc>55\n    12abc34xyz99abc55\\=substitute_skip=2\n 1(2) Old 2 5 \"abc\" New 2 7 \"<abc>\"\n 2(1) Old 7 10 \"xyz\" New 9 14 \"<xyz> SKIPPED\"\n 3(2) Old 12 15 \"abc\" New 14 19 \"<abc>\"\n 3: 12<abc>34xyz99<abc>55\n\n/a(b)c|xyz/g,replace=<$0>\n    abcdefabcpqr\n 2: <abc>def<abc>pqr\n    abxyzpqrabcxyz\n 3: ab<xyz>pqr<abc><xyz>\n    12abc34xyz\\=substitute_stop=2\n 1(2) Old 2 5 \"abc\" New 2 7 \"<abc>\"\n 2(1) Old 7 10 \"xyz\" New 9 14 \"<xyz> STOPPED\"\n 2: 12<abc>34xyz\n    12abc34xyz\\=substitute_skip=1\n 1(2) Old 2 5 \"abc\" New 2 7 \"<abc> SKIPPED\"\n 2(1) Old 7 10 \"xyz\" New 7 12 \"<xyz>\"\n 2: 12abc34<xyz>\n\n/a(b)c|xyz/replace=<$0>\n    abcdefabcpqr\n 1: <abc>defabcpqr\n    12abc34xyz\\=substitute_skip=1\n 1(2) Old 2 5 \"abc\" New 2 7 \"<abc> SKIPPED\"\n 1: 12abc34xyz\n    12abc34xyz\\=substitute_stop=1\n 1(2) Old 2 5 \"abc\" New 2 7 \"<abc> STOPPED\"\n 1: 12abc34xyz\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[1]12\n    abc\\=substitute_skip=1\nFailed: error -48: no more memory: 4 code units are needed\n    abc\nFailed: error -48: no more memory: 4 code units are needed\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[2]12\n    abc\\=substitute_skip=1\n 1(2) Old 0 3 \"abc\" New 0 2 \"12 SKIPPED\"\nFailed: error -48: no more memory: 4 code units are needed\n    abc\n 1(2) Old 0 3 \"abc\" New 0 2 \"12\"\nFailed: error -48: no more memory: 3 code units are needed\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[3]12\n    abc\\=substitute_skip=1\n 1(2) Old 0 3 \"abc\" New 0 2 \"12 SKIPPED\"\nFailed: error -48: no more memory: 4 code units are needed\n    abc\n 1(2) Old 0 3 \"abc\" New 0 2 \"12\"\n 1: 12\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[4]12\n    abc\\=substitute_skip=1\n 1(2) Old 0 3 \"abc\" New 0 2 \"12 SKIPPED\"\n 1: abc\n    abc\n 1(2) Old 0 3 \"abc\" New 0 2 \"12\"\n 1: 12\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[2]1234\n    abc\\=substitute_skip=1\nFailed: error -48: no more memory: 5 code units are needed\n    abc\nFailed: error -48: no more memory: 5 code units are needed\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[3]1234\n    abc\\=substitute_skip=1\nFailed: error -48: no more memory: 5 code units are needed\n    abc\nFailed: error -48: no more memory: 5 code units are needed\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[4]1234\n    abc\\=substitute_skip=1\n 1(2) Old 0 3 \"abc\" New 0 4 \"1234 SKIPPED\"\n 1: abc\n    abc\n 1(2) Old 0 3 \"abc\" New 0 4 \"1234\"\nFailed: error -48: no more memory: 5 code units are needed\n\n/a(b)c/substitute_overflow_length,substitute_callout,replace=[5]1234\n    abc\\=substitute_skip=1\n 1(2) Old 0 3 \"abc\" New 0 4 \"1234 SKIPPED\"\n 1: abc\n    abc\n 1(2) Old 0 3 \"abc\" New 0 4 \"1234\"\n 1: 1234\n\n/a(b)c/substitute_callout,replace=[1]12\n    abc\\=substitute_skip=1\nFailed: error -48: no more memory\n    abc\nFailed: error -48: no more memory\n\n/a(b)c/substitute_callout,replace=[2]12\n    abc\\=substitute_skip=1\n 1(2) Old 0 3 \"abc\" New 0 2 \"12 SKIPPED\"\nFailed: error -48: no more memory\n    abc\n 1(2) Old 0 3 \"abc\" New 0 2 \"12\"\nFailed: error -48: no more memory\n\n/a(b)c/substitute_callout,replace=[3]12\n    abc\\=substitute_skip=1\n 1(2) Old 0 3 \"abc\" New 0 2 \"12 SKIPPED\"\nFailed: error -48: no more memory\n    abc\n 1(2) Old 0 3 \"abc\" New 0 2 \"12\"\n 1: 12\n\n/a(b)c/substitute_callout,replace=[4]12\n    abc\\=substitute_skip=1\n 1(2) Old 0 3 \"abc\" New 0 2 \"12 SKIPPED\"\n 1: abc\n    abc\n 1(2) Old 0 3 \"abc\" New 0 2 \"12\"\n 1: 12\n\n/abc\\rdef/\n    abc\\ndef\nNo match\n\n/abc\\rdef\\x{0d}xyz/escaped_cr_is_lf\n    abc\\ndef\\rxyz\n 0: abc\\x0adef\\x0dxyz\n\\= Expect no match     \n    abc\\ndef\\nxyz\nNo match\n\n/(?(*ACCEPT)xxx)/\nFailed: error 128 at offset 3: atomic assertion expected after (?( or (?(?C)\n        here: (?( |<--| *ACCEPT)xx...\n\n/(?(*atomic:xx)xxx)/\nFailed: error 128 at offset 10: atomic assertion expected after (?( or (?(?C)\n        here: (?(*atomic |<--| :xx)xxx)\n\n/(?(*script_run:xxx)zzz)/\nFailed: error 128 at offset 14: atomic assertion expected after (?( or (?(?C)\n        here: ...script_run |<--| :xxx)zzz)\n\n/foobar/\n    the foobar thing\\=copy_matched_subject\n 0: foobar\n    the foobar thing\\=copy_matched_subject,zero_terminate\n 0: foobar\n\n/foobar/g\n    the foobar thing foobar again\\=copy_matched_subject\n 0: foobar\n 0: foobar\n\n/(*:XX)^abc/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 3\n\n/(*COMMIT:XX)^abc/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nFirst code unit = 'a'\nSubject length lower bound = 3\n\n/(*ACCEPT:XX)^abc/I\nCapture group count = 0\nMay match empty string\nSubject length lower bound = 0\n\n/abc/replace=xyz\n    abc\\=null_context\n 1: xyz\n\n/abc/replace=xyz,substitute_callout\n    abc \n 1(1) Old 0 3 \"abc\" New 0 3 \"xyz\"\n 1: xyz\n\\= Expect error message\n    abc\\=null_context\n** Replacement callouts are not supported with null_context.\n\n/\\[()]{65535}()/expand\nFailed: error 197 at offset 131071: too many capturing groups (maximum 65535)\n        here: ...)()()()()( |<--| )\n\n/\\[()]{65535}(?<A>)/expand\nFailed: error 197 at offset 131075: too many capturing groups (maximum 65535)\n        here: ...)()()(?<A> |<--| )\n\n/a(?:(*ACCEPT))??bc/\n    abc\n 0: abc\n    axy\n 0: a\n\n/a(*ACCEPT)??bc/\n    abc\n 0: abc\n    axy\n 0: a\n\n/a(*ACCEPT:XX)??bc/mark\n    abc\n 0: abc\n    axy\n 0: a\nMK: XX\n\n/(*:\\)?/\nFailed: error 109 at offset 6: quantifier does not follow a repeatable item\n        here: (*:\\)? |<--|\n\n/(*:\\Q \\E){5}/alt_verbnames\nFailed: error 109 at offset 12: quantifier does not follow a repeatable item\n        here: ...:\\Q \\E){5} |<--|\n\n/(?=abc)/I\nCapture group count = 0\nMay match empty string\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 2\n\n/(?|(X)|(XY))\\1abc/I\nCapture group count = 1\nMax back reference = 1\nFirst code unit = 'X'\nLast code unit = 'c'\nSubject length lower bound = 4\n\n/(?|(a)|(bcde))(c)\\2/I\nCapture group count = 2\nMax back reference = 2\nStarting code units: a b\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/(?|(a)|(bcde))(c)\\1/I\nCapture group count = 2\nMax back reference = 1\nStarting code units: a b\nLast code unit = 'c'\nSubject length lower bound = 2\n\n/(?|(?'A'a)|(?'A'bcde))(?'B'c)\\k'B'(?'A')/I,dupnames\nCapture group count = 3\nMax back reference = 2\nNamed capture groups:\n  A   1\n  A   3\n  B   2\nOptions: dupnames\nStarting code units: a b\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/(?|(?'A'a)|(?'A'bcde))(?'B'c)\\k'A'(?'A')/I,dupnames\nCapture group count = 3\nMax back reference = 3\nNamed capture groups:\n  A   1\n  A   3\n  B   2\nOptions: dupnames\nStarting code units: a b\nLast code unit = 'c'\nSubject length lower bound = 2\n\n/((a|)+)+Z/I\nCapture group count = 2\nStarting code units: Z a\nLast code unit = 'Z'\nSubject length lower bound = 1\n\n/((?=a))[abcd]/I\nCapture group count = 1\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/A(?:(*ACCEPT))?B/info\nCapture group count = 0\nFirst code unit = 'A'\nSubject length lower bound = 1\n\n/(A(*ACCEPT)??B)C/\n    ABC\n 0: ABC\n 1: AB\n    AXY \n 0: A\n 1: A\n\n/(?<=(?<=a)b)c.*/I\nCapture group count = 0\nMax lookbehind = 1\nFirst code unit = 'c'\nSubject length lower bound = 1\n    abc\\=ph\nPartial match: c\n\\= Expect no match\n    xbc\\=ph\nNo match\n\n/(?<=ab)c.*/I\nCapture group count = 0\nMax lookbehind = 2\nFirst code unit = 'c'\nSubject length lower bound = 1\n    abc\\=ph\nPartial match: c\n\\= Expect no match\n    xbc\\=ph\nNo match\n\n/(?<=a(?<=a|a)c)/I\nCapture group count = 0\nMax lookbehind = 2\nMay match empty string\nSubject length lower bound = 0\n\n/(?<=a(?<=a|ba)c)/I\nCapture group count = 0\nMax lookbehind = 2\nMay match empty string\nSubject length lower bound = 0\n\n/(?<=(?<=a)b)(?<!abcd)/I\nCapture group count = 0\nMax lookbehind = 4\nMay match empty string\nSubject length lower bound = 0\n\n/(?<=(?<=a)b)(?<!abcd)(?<=(?<=a)bcde)/I\nCapture group count = 0\nMax lookbehind = 4\nMay match empty string\nSubject length lower bound = 0\n\n# Addition overflow\n/( {32742} {42})(?<!\\1{65481})/\nFailed: error 187 at offset 15: lookbehind assertion is too long\n        here: ...742} {42}) |-->| (?<!\\1{654...\n\n# Multiplication overflow\n/(X{65535})(?<=\\1{32770})/\nFailed: error 187 at offset 10: lookbehind assertion is too long\n        here: (X{65535}) |-->| (?<=\\1{327...\n\n# ---- Non-atomic assertion tests ----\n\n/(*ploo:abc)/\nFailed: error 195 at offset 6: (*alpha_assertion) not recognized\n        here: (*ploo |<--| :abc)\n\n/(*pla:abc/\nFailed: error 114 at offset 9: missing closing parenthesis\n        here: (*pla:abc |<--|\n\n/(*pla:/\nFailed: error 114 at offset 6: missing closing parenthesis\n        here: (*pla: |<--|\n\n/(*pla/\nFailed: error 114 at offset 5: missing closing parenthesis\n        here: (*pla |<--|\n\n/(*pla}abc)/\nFailed: error 195 at offset 6: (*alpha_assertion) not recognized\n        here: (*pla} |<--| abc)\n\n# Expect error: not allowed as a condition\n/(?(*napla:xx)bc)/\nFailed: error 128 at offset 9: atomic assertion expected after (?( or (?(?C)\n        here: (?(*napla |<--| :xx)bc)\n\n/\\A(*pla:.*\\b(\\w++))(?>.*?\\b\\1\\b){3}/\n    word1 word3 word1 word2 word3 word2 word2 word1 word3 word4\nNo match\n\n/\\A(*napla:.*\\b(\\w++))(?>.*?\\b\\1\\b){3}/\n    word1 word3 word1 word2 word3 word2 word2 word1 word3 word4\n 0: word1 word3 word1 word2 word3 word2 word2 word1 word3\n 1: word3\n\n/\\A(?*.*\\b(\\w++))(?>.*?\\b\\1\\b){3}/\n    word1 word3 word1 word2 word3 word2 word2 word1 word3 word4\n 0: word1 word3 word1 word2 word3 word2 word2 word1 word3\n 1: word3\n\n/(*plb:(.)..|(.)...)(\\1|\\2)/\n    abcdb\\=offset=4 \n 0: b\n 1: b\n 2: <unset>\n 3: b\n    abcda\\=offset=4 \nNo match\n\n/(*naplb:(.)..|(.)...)(\\1|\\2)/\n    abcdb\\=offset=4 \n 0: b\n 1: b\n 2: <unset>\n 3: b\n    abcda\\=offset=4 \n 0: a\n 1: <unset>\n 2: a\n 3: a\n    \n/(?<*(.)..|(.)...)(\\1|\\2)/\n    abcdb\\=offset=4 \n 0: b\n 1: b\n 2: <unset>\n 3: b\n    abcda\\=offset=4 \n 0: a\n 1: <unset>\n 2: a\n 3: a\n    \n/(*non_atomic_positive_lookahead:ab)/B\n------------------------------------------------------------------\n        Bra\n        Non-atomic assert\n        ab\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n \n/(*non_atomic_positive_lookbehind:ab)/B \n------------------------------------------------------------------\n        Bra\n        Non-atomic assert back\n      2 Reverse\n        ab\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(*pla:ab+)/B\n------------------------------------------------------------------\n        Bra\n        Assert\n        a\n        b++\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(*napla:ab+)/B\n------------------------------------------------------------------\n        Bra\n        Non-atomic assert\n        a\n        b+\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(*napla:)+/\n\n/(*naplb:)+/\n\n/(*napla:^x|^y)/I\nCapture group count = 0\nMay match empty string\nCompile options: <none>\nOverall options: anchored\nStarting code units: x y\nSubject length lower bound = 1\n\n/(*napla:abc|abd)/I\nCapture group count = 0\nMay match empty string\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/(*napla:a|(.)(*ACCEPT)zz)\\1../\n    abcd\n 0: abc\n 1: a\n    \n/(*napla:a(*ACCEPT)zz|(.))\\1../\n    abcd\n 0: bcd\n 1: b\n    \n/(*napla:a|(*COMMIT)(.))\\1\\1/\n    aabc\n 0: aa\n 1: a\n\\= Expect no match     \n    abbc   \nNo match\n\n/(*napla:a|(.))\\1\\1/\n    aabc\n 0: aa\n 1: a\n    abbc   \n 0: bb\n 1: b\n\n/(*naplb:ab?c|PQ).../g\n    abcdefgacxyzPQR123\n 0: def\n 0: xyz\n 0: R12\n\n# ----\n\n# Expect error (recursion => not fixed length)\n/(\\2)((?=(?<=\\1)))/\nFailed: error 125 at offset 8: length of lookbehind assertion is not limited\n        here: (\\2)((?= |-->| (?<=\\1)))\n\n/c*+(?<=[bc])/\n    abc\\=ph\nPartial match: c\n    ab\\=ph\nPartial match: \n    abc\\=ps\n 0: c\n    ab\\=ps\n 0: \n\n/c++(?<=[bc])/\n    abc\\=ph\nPartial match: c\n    ab\\=ph\nPartial match: \n\n/(?<=(?=.(?<=x)))/\n    abx\n 0: \n    ab\\=ph\nPartial match: \n    bxyz \n 0: \n    xyz\n 0: \n    \n/\\z/\n   abc\\=ph\nPartial match: \n   abc\\=ps \n 0: \n   \n/\\Z/\n   abc\\=ph\nPartial match: \n   abc\\=ps \n 0: \n   abc\\n\\=ph\nPartial match: \\x0a\n   abc\\n\\=ps\n 0: \n\n/(?![ab]).*/\n    ab\\=ph\nPartial match: \n\n/c*+/\n    ab\\=ph,offset=2\nPartial match: \n\n/\\A\\s*(a|(?:[^`]{28500}){4})/I\nCapture group count = 1\nMax lookbehind = 1\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 1\n    a\n 0: a\n 1: a\n\n/\\A\\s*((?:[^`]{28500}){4})/I\nCapture group count = 1\nMax lookbehind = 1\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 65535\n\n/\\A\\s*((?:[^`]{28500}){4}|a)/I\nCapture group count = 1\nMax lookbehind = 1\nCompile options: <none>\nOverall options: anchored\nSubject length lower bound = 1\n    a\n 0: a\n 1: a\n\n/(?<A>a)(?(<A>)b)((?<=b).*)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Cond\n      1 Capture ref\n        b\n        Ket\n        CBra 2\n        Assert back\n      1 Reverse\n        b\n        Ket\n        Any*+\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?(1)b)((?<=b).*)/B\n------------------------------------------------------------------\n        Bra\n        Cond\n      1 Capture ref\n        b\n        Ket\n        CBra 1\n        Assert back\n      1 Reverse\n        b\n        Ket\n        Any*+\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?(R1)b)((?<=b).*)/B\n------------------------------------------------------------------\n        Bra\n        Cond\n        Cond rec 1\n        b\n        Ket\n        CBra 1\n        Assert back\n      1 Reverse\n        b\n        Ket\n        Any*+\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?(DEFINE)b)((?<=b).*)/B\n------------------------------------------------------------------\n        Bra\n        Cond\n        Cond false\n        b\n        Ket\n        CBra 1\n        Assert back\n      1 Reverse\n        b\n        Ket\n        Any*+\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?(VERSION=10.3)b)((?<=b).*)/B\n------------------------------------------------------------------\n        Bra\n        Cond\n        Cond false\n        b\n        Ket\n        CBra 1\n        Assert back\n      1 Reverse\n        b\n        Ket\n        Any*+\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?(VERSION>=10.3)b)((?<=b).*)/B\n------------------------------------------------------------------\n        Bra\n        Cond\n        Cond true\n        b\n        Ket\n        CBra 1\n        Assert back\n      1 Reverse\n        b\n        Ket\n        Any*+\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/[aA]b[cC]/IB\n------------------------------------------------------------------\n        Bra\n     /i a\n        b\n     /i c\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = 'a' (caseless)\nLast code unit = 'c' (caseless)\nSubject length lower bound = 3\n\n/[cc]abcd/I\nCapture group count = 0\nFirst code unit = 'c'\nLast code unit = 'd'\nSubject length lower bound = 5\n\n/[Cc]abcd/I\nCapture group count = 0\nFirst code unit = 'C' (caseless)\nLast code unit = 'd'\nSubject length lower bound = 5\n\n/[c]abcd/I\nCapture group count = 0\nFirst code unit = 'c'\nLast code unit = 'd'\nSubject length lower bound = 5\n\n/(?:c|C)abcd/I\nCapture group count = 0\nFirst code unit = 'C' (caseless)\nLast code unit = 'd'\nSubject length lower bound = 5\n\n/(a)?a/I\nCapture group count = 1\nFirst code unit = 'a'\nSubject length lower bound = 1\n    manm\n 0: a\n\n/^(?|(\\*)(*napla:\\S*_(\\2?+.+))|(\\w)(?=\\S*_(\\2?+\\1)))+_\\2$/\n    *abc_12345abc\n 0: *abc_12345abc\n 1: c\n 2: 12345abc\n\n/^(?|(\\*)(*napla:\\S*_(\\3?+.+))|(\\w)(?=\\S*_((\\2?+\\1))))+_\\2$/\n    *abc_12345abc\n 0: *abc_12345abc\n 1: c\n 2: 12345abc\n 3: 12345abc\n\n/^((\\1+)(?C)|\\d)+133X$/\n    111133X\\=callout_capture\nCallout 0: last capture = 2\n 1: 1\n 2: 111\n--->111133X\n    ^   ^       |\nCallout 0: last capture = 2\n 1: 3\n 2: 3\n--->111133X\n    ^     ^     |\nCallout 0: last capture = 2\n 1: 1\n 2: 11\n--->111133X\n    ^  ^        |\nCallout 0: last capture = 2\n 1: 3\n 2: 3\n--->111133X\n    ^     ^     |\n 0: 111133X\n 1: 11\n 2: 11\n\n/abc/replace=xyz,substitute_replacement_only\n    123abc456\n 1: xyz\n\n/a(?<ONE>b)c(?<TWO>d)e/g,replace=X$ONE+${TWO}Z,substitute_replacement_only\n    \"abcde-abcde-\"\n 2: Xb+dZXb+dZ\n     \n/a(b)c|xyz/g,replace=<$0>,substitute_callout,substitute_replacement_only\n    abcdefabcpqr                \n 1(2) Old 0 3 \"abc\" New 0 5 \"<abc>\"\n 2(2) Old 6 9 \"abc\" New 5 10 \"<abc>\"\n 2: <abc><abc>\n    abxyzpqrabcxyz              \n 1(1) Old 2 5 \"xyz\" New 0 5 \"<xyz>\"\n 2(2) Old 8 11 \"abc\" New 5 10 \"<abc>\"\n 3(1) Old 11 14 \"xyz\" New 10 15 \"<xyz>\"\n 3: <xyz><abc><xyz>\n    12abc34xyz99abc55\\=substitute_stop=2                          \n 1(2) Old 2 5 \"abc\" New 0 5 \"<abc>\"\n 2(1) Old 7 10 \"xyz\" New 5 10 \"<xyz> STOPPED\"\n 2: <abc>\n    12abc34xyz99abc55\\=substitute_skip=1\n 1(2) Old 2 5 \"abc\" New 0 5 \"<abc> SKIPPED\"\n 2(1) Old 7 10 \"xyz\" New 0 5 \"<xyz>\"\n 3(2) Old 12 15 \"abc\" New 5 10 \"<abc>\"\n 3: <xyz><abc>\n    12abc34xyz99abc55\\=substitute_skip=2\n 1(2) Old 2 5 \"abc\" New 0 5 \"<abc>\"\n 2(1) Old 7 10 \"xyz\" New 5 10 \"<xyz> SKIPPED\"\n 3(2) Old 12 15 \"abc\" New 5 10 \"<abc>\"\n 3: <abc><abc>\n\n/a(..)d/replace=>$1<,substitute_matched\n    xyzabcdxyzabcdxyz\n 1: xyz>bc<xyzabcdxyz\n    xyzabcdxyzabcdxyz\\=ovector=2\n 1: xyz>bc<xyzabcdxyz\n\\= Expect error     \n    xyzabcdxyzabcdxyz\\=ovector=1\nFailed: error -54 at offset 3 in replacement: requested value is not available\n        here: >$1 |<--| <\n\n/a(..)d/g,replace=>$1<,substitute_matched\n    xyzabcdxyzabcdxyz\n 2: xyz>bc<xyz>bc<xyz\n    xyzabcdxyzabcdxyz\\=ovector=2\n 2: xyz>bc<xyz>bc<xyz\n\\= Expect error     \n    xyzabcdxyzabcdxyz\\=ovector=1\nFailed: error -54 at offset 3 in replacement: requested value is not available\n        here: >$1 |<--| <\n    xyzabcdxyzabcdxyz\\=ovector=1,substitute_unset_empty\nFailed: error -54 at offset 3 in replacement: requested value is not available\n        here: >$1 |<--| <\n\n/55|a(..)d/g,replace=>$1<,substitute_matched\n    xyz55abcdxyzabcdxyz\\=ovector=2,substitute_unset_empty\n 3: xyz><>bc<xyz>bc<xyz\n\\= Expect error     \n    xyz55abcdxyzabcdxyz\\=ovector=2\nFailed: error -55 at offset 3 in replacement: requested value is not set\n        here: >$1 |<--| <\n\n/55|a(..)d/replace=>$1<,substitute_matched\n    xyz55abcdxyzabcdxyz\\=ovector=2,substitute_unset_empty\n 1: xyz><abcdxyzabcdxyz\n\n/55|a(..)d/replace=>$1<\n    xyz55abcdxyzabcdxyz\\=ovector=2,substitute_unset_empty\n 1: xyz><abcdxyzabcdxyz\n\n/55|a(..)d/g,replace=>$1<\n    xyz55abcdxyzabcdxyz\\=ovector=2,substitute_unset_empty\n 3: xyz><>bc<xyz>bc<xyz\n    \n/abc/replace=,caseless\n    XabcY\n 1: XY\n    XABCY \n 1: XY\n\n/abc/replace=[4],caseless\n    XabcY\n 1: XY\n    XABCY \n 1: XY\n\n/abc/replace=*,caseless\n    XabcY\n 1: X*Y\n    XABCY\n 1: X*Y\n    XabcY\\=replace=  \n 1: XY\n\n/abc/replace=\\U$0,substitute_extended,substitute_case_callout\n    XabcY\n 1: XBbKY\n\\= Expect not supported\n    XabcY\\=null_context\n** Replacement case callouts are not supported with null_context.\n\n/a/substitute_extended,substitute_case_callout\n    XaY\\=replace=\\U$0\n 1: XBY\n    XaY\\=replace=\\L$0\n 1: XaY\n    XaY\\=replace=\\u\\L$0\n 1: XBY\n    XaY\\=replace=\\l\\U$0\n 1: XaY\n\n# Expect non-fixed-length error\n\n\"(?<=X(?(DEFINE)(.*))(?1)).\"\nFailed: error 125 at offset 0: length of lookbehind assertion is not limited\n        here: |-->| (?<=X(?(DE...\n\n#if !ebcdic\n\n/\\sxxx\\s/tables=1\n\\= Expect no match\n    AB\\x{85}xxx\\x{a0}XYZ\nNo match\n\n/\\sxxx\\s/tables=2\n    AB\\x{85}xxx\\x{a0}XYZ\n 0: \\x85xxx\\xa0\n\n/^\\w+/tables=2\n    École\n 0: \\xc3\n\n/^\\w+/tables=3\n** 'Tables = 3' is invalid: binary tables have not been loaded\n    École\n\n#loadtables ./testbtables\n\n/^\\w+/tables=3\n    École\n 0: \\xc3\n\n#endif\n\n/\"(*MARK:>\" 00 \"<)..\"/hex,mark,no_start_optimize\n    AB\n 0: AB\nMK: >\\x00<\n    A\\=ph \nPartial match, mark=>\\x00<: A\n\\= Expect no match\n    A\nNo match, mark = >\\x00<\n\n/\"(*MARK:>\" 00 \"<).(?C1).\"/hex,mark,no_start_optimize\n    AB\n--->AB\n  1 ^^     .\nLatest Mark: >\\x00<\n 0: AB\nMK: >\\x00<\n\n/(?(VERSION=0.0/\nFailed: error 179 at offset 14: syntax error or number too big in (?(VERSION condition\n        here: ...ERSION=0.0 |<--|\n\n# Perl has made \\K in lookarounds an error. PCRE2 now rejects as well, unless\n# explicitly authorized.\n\n/(?=a\\Kb)ab/\nFailed: error 199 at offset 10: \\K is not allowed in lookarounds (but see PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)\n        here: (?=a\\Kb)ab |<-->|\n\n/(?=a\\Kb)ab/allow_lookaround_bsk\n    ab \n 0: b\n\n/(?!a\\Kb)ac/\nFailed: error 199 at offset 10: \\K is not allowed in lookarounds (but see PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)\n        here: (?!a\\Kb)ac |<-->|\n\n/(?!a\\Kb)ac/allow_lookaround_bsk\n    ac \n 0: ac\n    \n/^abc(?<=b\\Kc)d/\nFailed: error 199 at offset 14: \\K is not allowed in lookarounds (but see PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)\n        here: ...(?<=b\\Kc)d |<-->|\n\n/^abc(?<=b\\Kc)d/allow_lookaround_bsk\n    abcd\n 0: cd\n\n/^abc(?<!b\\Kq)d/\nFailed: error 199 at offset 14: \\K is not allowed in lookarounds (but see PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)\n        here: ...(?<!b\\Kq)d |<-->|\n\n/^abc(?<!b\\Kq)d/,allow_lookaround_bsk\n    abcd\n 0: abcd\n\n# PCRE2 now also rejects sneaky cases where the \\K is inside a lookaround... but\n# it's not always easy to detect this syntactically at compile-time (indeed,\n# a conditional expression could dynamically invoke \\K via a subroutine, based\n# on the subject contents).\n\n/(?(DEFINE)(?<sneaky>b\\K))a(?=(?&sneaky))/g,allow_lookaround_bsk\n    ab\nStart of matched string is beyond its end - displaying from end to start.\n 0: b\n\n/(?(DEFINE)(?<sneaky>b\\K))a(?=(?&sneaky))/g\n    ab\nFailed: error -75: disallowed use of \\K in lookaround\n    zz\nNo match\n\n/a|(?(DEFINE)(?<sneaky>\\Ka))(?<=(?&sneaky))b/g,allow_lookaround_bsk\n    ab\n 0: a\n 0: ab\n\n/a|(?(DEFINE)(?<sneaky>\\Ka))(?<=(?&sneaky))b/g\n    ab\n 0: a\nFailed: error -75: disallowed use of \\K in lookaround\n    zz\nNo match\n\n/a|(?(DEFINE)(?<sneaky>\\K\\Ga))(?<=(?&sneaky))b/g\n    ab\n 0: a\n    zz\nNo match\n\n/(?=.{10}(?1))x(\\K){0}/\n    x1234567890\nFailed: error -75: disallowed use of \\K in lookaround\n\n/(?=.{10}(.))(*scs:(1)(?2))x(\\K){0}/\n    x1234567890\nFailed: error -75: disallowed use of \\K in lookaround\n\n/(?=.{5}(?1))\\d*(\\K){0}/\n\\= Totally fine - pattern does nothing bad even though \\K is reachable\n    1234567890\n 0: 67890\n\\= Not fine - the subject now causes the \\K to misbehave\n    abcdefgh\nFailed: error -75: disallowed use of \\K in lookaround\n\n# --------- \n\n# Tests for zero-length NULL to be treated as an empty string.\n\n//\n    \\=null_subject\n 0: \n\\= Expect error     \n    abc\\=null_subject\nFailed: error -51: NULL argument passed with non-zero length\n\n//replace=[20]\n    abc\\=null_replacement\n 1: abc\n    \\=null_subject\n 1: \n    \\=null_replacement\n 1: \n\n/abc/replace=\n    XabcY\\=null_replacement\n 1: XY\n\n/X*/g,replace=xy\n\\= Expect error\n    >X<\\=null_replacement\nFailed: error -51: NULL argument passed with non-zero length\n\n/X+/replace=[20]\n    >XX<\\=null_replacement\n 1: ><\n\n# --------- \n\n/[Aa]{2}/BI\n------------------------------------------------------------------\n        Bra\n     /i A{2}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = 'A' (caseless)\nLast code unit = 'A' (caseless)\nSubject length lower bound = 2\n    aabcd\n 0: aa\n\n/A{2}/iBI\n------------------------------------------------------------------\n        Bra\n     /i A{2}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless\nFirst code unit = 'A' (caseless)\nLast code unit = 'A' (caseless)\nSubject length lower bound = 2\n    aabcd\n 0: aa\n\n/[Aa]{2,3}/BI\n------------------------------------------------------------------\n        Bra\n     /i A{2}\n     /i A?+\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = 'A' (caseless)\nLast code unit = 'A' (caseless)\nSubject length lower bound = 2\n    aabcd\n 0: aa\n\n--\n    \\[X]{-10}\n** Zero or negative repeat not allowed\n    \n# Check imposition of maximum by match_data_create().\n\n/abcd/\n    abcd\\=ovector=65536\n 0: abcd\n\n# Use recurse to test \\K and Mark in atomic scope.\n/(?>this line\\s*((?R)|)\\K)/\n    this line this line this line\n 0: \n 1: this line this line\n\n/(?>this line\\s*((?R)|)(*MARK:A))/\n    this line this line this line\n 0: this line this line this line\n 1: this line this line\n    \n# Check use of NULL pattern with zero length.\n\n//null_pattern,use_length\n    abc\n 0: \n    \n//null_pattern\nFailed: error 116 at offset 0: pattern passed as NULL with non-zero length\n\n/bad null pattern/null_pattern,use_length\nFailed: error 116 at offset 0: pattern passed as NULL with non-zero length\n\n/bad null pattern/null_pattern\nFailed: error 116 at offset 0: pattern passed as NULL with non-zero length\n\n# -------- Variable length lookbehinds --------\n/12345(?<=\\d{1,256})X/\nFailed: error 200 at offset 5: branch too long in variable-length lookbehind assertion\n        here: 12345 |-->| (?<=\\d{1,2...\n\n/(?<=(\\d{1,256}))X/max_varlookbehind=256\n    12345XYZ\n 0: X\n 1: 12345\n\n/12345(?<=a?bc)X/max_varlookbehind=0\nFailed: error 200 at offset 5: branch too long in variable-length lookbehind assertion\n        here: 12345 |-->| (?<=a?bc)X\n\n/12345(?<=abc)X/max_varlookbehind=0\n\n/(?<!( {65054}){9,44965})/\nFailed: error 187 at offset 0: lookbehind assertion is too long\n        here: |-->| (?<!( {650...\n\n/(?(?<!|(|a)))/\n    aaaa\\=get=0\n 0: \n 0G  (0)\n\n/(?(?<!|a?))/\n    aaaa\\=get=0\n 0: \n 0G  (0)\n\n# --------\n\n/(?<=(()()()()()()()()()()()()()(()()()()(())()()()()(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(())()()()()(()()()()()()(()()()()()()()()()()()()()()()()()()()()()(())()()()()(()()()()()()()()()()()()()(()()()()()()()()()()()()()(()())))))))))/\n\n/(?<!( {65054}){0,44965})/auto_callout\nFailed: error 187 at offset 0: lookbehind assertion is too long\n        here: |-->| (?<!( {650...\n\n/A+{,3}/\nFailed: error 109 at offset 6: quantifier does not follow a repeatable item\n        here: A+{,3} |<--|\n\n/(\\g{+1}Z|(A))+/\n    BAAZCD \n 0: AAZ\n 1: AZ\n 2: A\n    ZAAAZAZAZAACD \n 0: AAAZAZAZAA\n 1: A\n 2: A\n\n# This doesn't work in Perl (though I think it used to)\n\n/^(?=.*(?=(([A-Z]).*(?(1)\\1)))(?!.+\\2)){26}/i\n    The quick brown fox jumps over the lazy dog.\n 0: \n 1: quick brown fox jumps over the lazy dog.\n 2: q\n    Jackdaws love my big sphinx of quartz.\n 0: \n 1: Jackdaws love my big sphinx of quartz.\n 2: J\n    Pack my box with five dozen liquor jugs.\n 0: \n 1: Pack my box with five dozen liquor jugs.\n 2: P\n\\= Expect no match\n    The quick brown fox jumps over the lazy cat.\nNo match\n    Hackdaws love my big sphinx of quartz.\nNo match\n    Pack my fox with five dozen liquor jugs.\nNo match\n    \n# These are different to Perl because of the different capturing in repeating\n# groups.\n\n/((foo)|(bar))*/\n    foobar\n 0: foobar\n 1: bar\n 2: foo\n 3: bar\n\n/(?:(f)(o)(o)|(b)(a)(r))*/\n    foobar\n 0: foobar\n 1: f\n 2: o\n 3: o\n 4: b\n 5: a\n 6: r\n\n/((Z)+|A)*/\n    ZABCDEFG\n 0: ZA\n 1: A\n 2: Z\n\n/(?:(?P=same)?(?:(?P<same>a)|(?P<same>b))(?P=same))+/g,dupnames\n    bbbaaabaabb\n 0: bbbaaaba\n 1: a\n 2: b\n 0: bb\n 1: <unset>\n 2: b\n\n# --------\n\n/\n/anchored, firstline\n    \\x0a\n 0: \\x0a\n\n/\n/anchored,firstline,no_start_optimize\n    \\x0a\n 0: \\x0a\n\n/\n/firstline\n    \\x0a\n 0: \\x0a\n    abc\\x0adef\n 0: \\x0a\n\n/|a(?0)/endanchored\n    aaaa\n 0: aaaa\n\n/A +/extended\n\n/(*ACCEPT)+/B,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 10\n        SBra\n        *ACCEPT\n        KetRmax\n        Callout 255 10 0\n        Ket\n        End\n------------------------------------------------------------------\n\n/a\\z/\n    a\n 0: a\n    a\\=noteol \n 0: a\n\n# This matches a character that only exists once in the subject, sort of like a\n# hypothetical \"(.)(?<!\\1.+)(?!.*\\1)\". That has unlimited variable length\n# lookbehind, so is invalid. This pattern doesn't work in Perl 5.38.0.\n\n/\\G(?:(?=(\\1.|)(.))){1,13}?(?!.*\\2.*\\2)\\1\\K\\2/g\n    aaabcccdeee\n 0: b\n 1: aaa\n 2: b\n 0: d\n 1: ccc\n 2: d\n\n/|(?0)./endanchored\n    abcd\n 0: abcd\n\n/|a(?0)/endanchored\n    aaaa\n 0: aaaa\n\n/(?:|(?0).)(?(R)|\\z)/\n    abcd\n 0: abcd\n\n/a?(?=b(*COMMIT)c|)d/I\nCapture group count = 0\nStarting code units: a d\nLast code unit = 'd'\nSubject length lower bound = 1\n    bd\n 0: d\n\n/(?=b(*COMMIT)c|)d/I\nCapture group count = 0\nFirst code unit = 'd'\nSubject length lower bound = 1\n    bd\n 0: d\n\n/a?(?=b(*COMMIT)c|)d/I,no_start_optimize\nCapture group count = 0\nOptions: no_start_optimize\nOptimizations: auto_possess,dotstar_anchor\n    bd\nNo match\n\n/(?=b(*COMMIT)c|)d/I,no_start_optimize\nCapture group count = 0\nOptions: no_start_optimize\nOptimizations: auto_possess,dotstar_anchor\n    bd\nNo match\n\n/a?(?=bc|)d/I,auto_callout\nCapture group count = 0\nOptions: auto_callout\nStarting code units: a d\nLast code unit = 'd'\nSubject length lower bound = 1\n    bd\n--->bd\n +0  ^     a?\n +2  ^     (?=\n +5  ^     b\n +8  ^     )\n +9  ^     d\n+10  ^^    End of pattern\n 0: d\n    \n/a?(?=bc|)\\bd/I \nCapture group count = 0\nMax lookbehind = 1\nStarting code units: a d\nLast code unit = 'd'\nSubject length lower bound = 1\n    bd\nNo match\n\n/(?0)/\n    abc\\=disable_recurseloop_check,match_limit=100\nFailed: error -47: match limit exceeded\n\n/(a(?1)z||(?1)++)$/\n    abcd\\=disable_recurseloop_check\n 0: \n 1: \n\n/(((?<=123?456456|ABC)))(?<=\\2)../\n    ABCDEFG\n 0: DE\n 1: \n 2: \n    12345645678910 \n 0: 78\n 1: \n 2: \n    \n# This test is crashing Perl 5.38.2.\n\n/[^\\S\\W]{6}/\n    .abc def..\nNo match\n\n/(*MARK:a/y_)/debug\n** Unrecognized modifier 'y' in modifier string \"y_)/debug\"\n\n//i,sr\n** Unrecognized modifier \"sr\"\n\n# The behaviour of these tests is different from Perl because PCRE2 doesn't\n# recognize \\Q or \\E within a quantifier, so these examples are not treated\n# as quantifiers. Subsequent processing of the string removes the escapes.\n\n/a{\\Q1\\E,2}/\n    xa{1,2}x\n 0: a{1,2}\n\\= Expect no match     \n    xaax\nNo match\n    \n/a{\\E1,2}/\n    xa{1,2}x\n 0: a{1,2}\n\\= Expect no match     \n    xaax\nNo match\n    \n# --------------\n\n/(?<=|b?)./B\n------------------------------------------------------------------\n        Bra\n        Assert back\n        Alt\n      0 VReverse 1\n        b?\n        Ket\n        Any\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?=|b?)./B\n------------------------------------------------------------------\n        Bra\n        Assert\n        Alt\n        b?+\n        Ket\n        Any\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?>|b?)./B\n------------------------------------------------------------------\n        Bra\n        Once\n        Alt\n        b?+\n        Ket\n        Any\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?<=xy|a.b?|cd)/B\n------------------------------------------------------------------\n        Bra\n        Assert back\n      2 Reverse\n        xy\n        Alt\n      2 VReverse 3\n        a\n        Any\n        b?\n        Alt\n      2 Reverse\n        cd\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n# Tests for scan substring, a non Perl feature of PCRE2\n\n# Parse errors first\n\n/(*scs:/\nFailed: error 218 at offset 6: missing opening parenthesis\n        here: (*scs: |<--|\n\n/(*scan_substring:(/\nFailed: error 217 at offset 18: expected capture group number or name\n        here: ...ubstring:( |<--|\n\n/(*scs:('name'/\nFailed: error 114 at offset 13: missing closing parenthesis\n        here: ...cs:('name' |<--|\n\n/(*scs:(1)a|b)/\nFailed: error 115 at offset 7: reference to non-existent subpattern\n        here: (*scs:( |<-->| 1)a|b)\n\n/(*scs:(0)a)/\nFailed: error 115 at offset 8: reference to non-existent subpattern\n        here: (*scs:(0 |<-->| )a)\n\n/(*scan_substring:(1)a|b)/\nFailed: error 115 at offset 18: reference to non-existent subpattern\n        here: ...ubstring:( |<-->| 1)a|b)\n\n/(*scs:(<name>)a|b)/\nFailed: error 115 at offset 8: reference to non-existent subpattern\n        here: (*scs:(< |<-->| name>)a|b)\n\n/(*scan_substring:(<name>)a|b)/\nFailed: error 115 at offset 19: reference to non-existent subpattern\n        here: ...bstring:(< |<-->| name>)a|b)\n\n/()(*scs:(1)+a)/\nFailed: error 109 at offset 12: quantifier does not follow a repeatable item\n        here: ...(*scs:(1)+ |<--| a)\n\n/()(*scs:(1,1,1,1,1,1,1,1,2))/\nFailed: error 115 at offset 25: reference to non-existent subpattern\n        here: ...1,1,1,1,1, |<-->| 2))\n\n/()()(*scs:(1,2,1,2,1,2,2,'XYZ'))/\nFailed: error 115 at offset 26: reference to non-existent subpattern\n        here: ...,2,1,2,2,' |<-->| XYZ'))\n\n# Tests for iterating scan_substring\n\n/(a)(*scs:(1)b)*c/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Brazero\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a)(*scs:(1)b)*?c/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Braminzero\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a)(*scs:(1)b)*+c/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Once\n        Brazero\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Ket\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a)(*scs:(1)b)+c/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Brazero\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a)(*scs:(1)b)+?c/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Braminzero\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a)(*scs:(1)b)++c/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Once\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Brazero\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Ket\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a)(*scs:(1)b)?c/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Brazero\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a)(*scs:(1)b)??c/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Braminzero\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a)(*scs:(1)b)?+c/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Once\n        Brazero\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Ket\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a)(*scs:(1)b){3}c/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a)(*scs:(1)b){3,5}?c/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Braminzero\n        Bra\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Braminzero\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Ket\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(a)(*scs:(1)b){3,}+c/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Once\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Brazero\n        Scan substring\n      1 Capture ref\n        b\n        Ket\n        Ket\n        c\n        Ket\n        End\n------------------------------------------------------------------\n\n/(\\w++)=(?(*scs:(1)(abc))pqr|xyz)(\\w++)/\nFailed: error 128 at offset 14: atomic assertion expected after (?( or (?(?C)\n        here: ...+)=(?(*scs |<--| :(1)(abc))...\n\n# Tests for scan_substring\n\n/([a-z]++)(*scs:(1)(stx)|(ne))(.)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        [a-z]++\n        Ket\n        Scan substring\n      1 Capture ref\n        CBra 2\n        stx\n        Ket\n        Alt\n        CBra 3\n        ne\n        Ket\n        Ket\n        CBra 4\n        Any\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    ##string##next!##\n 0: next!\n 1: next\n 2: <unset>\n 3: ne\n 4: !\n    __aastxaa:__\n 0: stxaa:\n 1: stxaa\n 2: stx\n 3: <unset>\n 4: :\n    __abababab:__\nNo match\n\n/(?<XX>[a-z]++)##(*scan_substring:('XX').*(..)$)\\2/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        [a-z]++\n        Ket\n        ##\n        Scan substring\n      1 Capture ref\n        Any*\n        CBra 2\n        Any\n        Any\n        Ket\n        $\n        Ket\n        \\g{2}\n        Ket\n        End\n------------------------------------------------------------------\n    ##abcd##abcd##cd##\n 0: abcd##cd\n 1: abcd\n 2: cd\n    ##abcd##abcd##abcd##\nNo match\n\n/([a-z])([a-z]++)(#+)(*scs:(2)(ab.))/\n    xab##\nNo match\n    yabc###\n 0: yabc###\n 1: y\n 2: abc\n 3: ###\n 4: abc\n    zababc####\n 0: zababc####\n 1: z\n 2: ababc\n 3: ####\n 4: aba\n\n/(?:(?<YYY>[a-z]++)|(?<YYY>[0-9]++)|$)(*scan_substring:('YYY')((?<START>.).*\\k<START>$))/dupnames\n    $$abacd$$112345$$abca$$\n 0: abca\n 1: abca\n 2: <unset>\n 3: abca\n 4: a\n    $$abcdeaf$$1234567819$$123456781$$\n 0: 123456781\n 1: <unset>\n 2: 123456781\n 3: 123456781\n 4: 1\n\n/([a-zA-Z]+)(*scs:(1).*?(?<ABC>[A-Z]+)(*scan_substring:('ABC').*(.)\\3))#+/\n    ##abABCtuTUVXz##abCDEFGxyCDEEFGhi##\n 0: abCDEFGxyCDEEFGhi##\n 1: abCDEFGxyCDEEFGhi\n 2: CDEEFG\n 3: E\n    ##abAABCtuTUVXXz!!abCDEFGxyCDEFGGhi##\n 0: abCDEFGxyCDEFGGhi##\n 1: abCDEFGxyCDEFGGhi\n 2: CDEFGG\n 3: G\n\n/([a-zA-Z]+)(*scs:(1)(xy|ab(*ACCEPT)cd))/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        [A-Za-z]+\n        Ket\n        Scan substring\n      1 Capture ref\n        CBra 2\n        xy\n        Alt\n        ab\n        Close 2\n        *ASSERT_ACCEPT\n        cd\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    ##cdefgh##cdeabxy##\n 0: abxy\n 1: abxy\n 2: ab\n\n/(?<AA>[a-zA-Z]+)(*scs:('AA')(ab(*ACCEPT)cd|xy))/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        [A-Za-z]+\n        Ket\n        Scan substring\n      1 Capture ref\n        CBra 2\n        ab\n        Close 2\n        *ASSERT_ACCEPT\n        cd\n        Alt\n        xy\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    ##cdefgh##cdeabxy##\n 0: abxy\n 1: abxy\n 2: ab\n\n/([a-z]++)##(*scs:(1)(abc))?!/\n    ##xyz##abc##!\n 0: abc##!\n 1: abc\n 2: abc\n    ##xyz##!\n 0: xyz##!\n 1: xyz\n    ##xyz##\nNo match\n\n/([a-z]++)##(*scs:(1)(abc))??(?(2)!|:)/\n    ##abc##abc##!\n 0: abc##!\n 1: abc\n 2: abc\n    ##abc##xyz##:\n 0: xyz##:\n 1: xyz\n    ##abc###\nNo match\n\n/([a-z]++)##(*scs:(1)(abc)|xyz){8}(?(2)!|:)/\n    ##abc##abc##!\n 0: abc##!\n 1: abc\n 2: abc\n    ##abc##xyz##:\n 0: xyz##:\n 1: xyz\n    ##nnn##!\nNo match\n    ##nnn##:\nNo match\n\n/[A-Z]{3}([A-Z]++)#(*scs:(1)(?<=BC)XY)#/\n    ABCXY##AKCXY##\n 0: ABCXY##\n 1: XY\n  \n/()(\\w++)=(*scs:(2)(?=abc))(\\w++)/\n    xabcx=pqr.\n 0: abcx=pqr\n 1: \n 2: abcx\n 3: pqr\n      \n/(\\d++)(*scs:(1)\\d+\\z)(\\w+)/\n    X123XYZ\n 0: 123XYZ\n 1: 123\n 2: XYZ\n\n/(\\d++)(*scs:(1)\\d+\\Z)(\\w+)/\n    X123XYZ\n 0: 123XYZ\n 1: 123\n 2: XYZ\n\n/(\\d++)(*scs:(1)\\d+$)(\\w+)/\n    X123XYZ\n 0: 123XYZ\n 1: 123\n 2: XYZ\n\n/([a-z]{2})[a-z](*scs:(1)(.*?))\\2$/\n    abcab\n 0: abcab\n 1: ab\n 2: ab\n    abcabc\n 0: bcabc\n 1: bc\n 2: bc\n\n/^(([a-z]([a-z]*+))(*scs:(2).(?=(?1)|$)\\3)|#){5}/\n    abcdefg#hijk#!\nNo match\n    abcdefg#hijk#lmnopqr#\n 0: abcdefg#hijk#lmnopqr\n 1: lmnopqr\n 2: lmnopqr\n 3: mnopqr\n\n/(*scs:(1)a)(a)|x/\n    a\nNo match\n    x\n 0: x\n\n/(*scs:(<GOOD_NAME>)a)(?<GOOD_NAME>a)(?<GOOD_NAME>b)(?<GOOD_NAME>c)(?<GOOD_NAME>d)|x/dupnames\n    abcd\nNo match\n    x\n 0: x\n\n/(*scs:(1)a)?(a)/\n    b\nNo match\n    a\n 0: a\n 1: a\n\n/(*scs:(1)a)??(a)/\n    b\nNo match\n    a\n 0: a\n 1: a\n\n# Custom backtrack, goes back n - 1 characters in the input (n=8)\n/x(?|(*scs:(1)(?<=(.)))|()){8}/\n    abcdefghx\n 0: x\n 1: c\n\n/(a)(b)(*scs:(2)(*scs:(1)a(*PRUNE)x)).+|(.+)/\n    abcdef\n 0: bcdef\n 1: <unset>\n 2: <unset>\n 3: bcdef\n\n/(a)(b)(*scs:(2)(*scs:(1)a(*PRUNE:markstr)x)).+|(.+)/mark\n    abcdef\n 0: bcdef\n 1: <unset>\n 2: <unset>\n 3: bcdef\n\n/(a)(b)(*scs:(2)(*scs:(1)a(*PRUNE:markstr))).+|(.+)/mark\n    abcdef\n 0: abcdef\n 1: a\n 2: b\nMK: markstr\n\n/(a)(b)(*scs:(2)(*scs:(1)a(*COMMIT)x)).+|(.+)/\n    abcdef\nNo match\n\n/(a)(b)(*scs:(2)(*scs:(1)a(*COMMIT:markstr)x)).+|(.+)/mark\n    abcdef\nNo match, mark = markstr\n\n/(a)(b)(*scs:(2)(*scs:(1)a(*COMMIT:markstr))).+|(.+)/mark\n    abcdef\n 0: abcdef\n 1: a\n 2: b\nMK: markstr\n\n/(abc)(def)(*scs:(1)(*scs:(2)de(*SKIP)x)).+|(.+)/\n    abcdefghi\n 0: fghi\n 1: <unset>\n 2: <unset>\n 3: fghi\n\n/(abc)(def)(*scs:(2)(*scs:(1)(*SKIP)x)).+|(.+)/\n    abcdefghi\n 0: bcdefghi\n 1: <unset>\n 2: <unset>\n 3: bcdefghi\n\n/(?<=(abc))(def)(*scs:(2)(*scs:(1)(*SKIP)x)).+|(ef.+)/\n    abcdefghi\n 0: efghi\n 1: <unset>\n 2: <unset>\n 3: efghi\n\n/(abc)(def)(*scs:(2)(?:(*scs:(1)abc(*SKIP:notfound)x|abcd|(abc)))).+/\n    abcdefghi\n 0: abcdefghi\n 1: abc\n 2: def\n 3: abc\n\n/(abc)(def)(*MARK:markstr)(*scs:(2)(?:(*scs:(1)abc(*SKIP:markstr)x))).+|(.+)/\n    abcdefghi\n 0: ghi\n 1: <unset>\n 2: <unset>\n 3: ghi\n\n/^([a-z]++)(?:((?6))|((?7))|((?8))|(#))(?(DEFINE)((*scs:(1)abc(*PRUNE)d))((*scs:(1)abc(*COMMIT)e))((*scs:(1)abc(*SKIP)f)))/\n    abcd#\n 0: abcd\n 1: abcd\n 2: \n    abce#\n 0: abce\n 1: abce\n 2: <unset>\n 3: \n    abcf#\n 0: abcf\n 1: abcf\n 2: <unset>\n 3: <unset>\n 4: \n    abc#\n 0: abc#\n 1: abc\n 2: <unset>\n 3: <unset>\n 4: <unset>\n 5: #\n\n/\\b(\\w++)(*scs:(1)^)/\n    sausages and mash\n 0: sausages\n 1: sausages\n\\= Expect no match\n    !sausages and mash\nNo match\n\n/(\\b\\w{3,}+\\b)(*scs:(1)\\W*+(?:((.)\\W*+(?2)\\W*+\\3|)|((.)\\W*+(?4)\\W*+\\5|\\W*+.\\W*+))\\W*+$)/ig\n    ipsum lorem revel level able was I ere I saw Elba\n 0: level\n 1: level\n 2: <unset>\n 3: <unset>\n 4: level\n 5: l\n 0: ere\n 1: ere\n 2: <unset>\n 3: <unset>\n 4: ere\n 5: e\n\n/(?:(?'A'a)|(?<A>b))(*scs:('A')b)c/dupnames\n    abc\n 0: bc\n 1: <unset>\n 2: b\n\n# Relative reference\n/(xyz)(abc)(*scs:(-1)abc)(*scs:(-2)\\1)/\n    >xyzabc<\n 0: xyzabc\n 1: xyz\n 2: abc\n\n/^([a-z]++)#(*scs:(1)a|ab|abc|abcd|abcde|abcdef|(abcdefg))\\2/\n    abcdefg#abcdefg\n 0: abcdefg#abcdefg\n 1: abcdefg\n 2: abcdefg\n\n/^([a-z]++)(*scs:(1)(a+)(*THEN)b|(a+)(*THEN)c|(aa))/\n    aaaax\n 0: aaaax\n 1: aaaax\n 2: <unset>\n 3: <unset>\n 4: aa\n\n/^([a-z]++)(*scs:(1)((a+)(*THEN)b)|(a+)(*THEN)c|(aa))/\n    aaaax\n 0: aaaax\n 1: aaaax\n 2: <unset>\n 3: <unset>\n 4: <unset>\n 5: aa\n\n/^([a-z]++)(*scs:(1)((a+)(*THEN)b))?/\n    aaaax\n 0: aaaax\n 1: aaaax\n\n/^([a-z]++)(*scs:(1)(abc|(a+)(*THEN)b))?/\n    aaaax\n 0: aaaax\n 1: aaaax\n\n/^(?:(.){20,30}#|([a-z]++)(*scs:(1)(a+)(*THEN)b){20,30}#|(.){20,30}!)/\n    aaaaaaaaaaaaaaaaaaaaaaaaab!\n 0: aaaaaaaaaaaaaaaaaaaaaaaaab!\n 1: <unset>\n 2: <unset>\n 3: <unset>\n 4: b\n\n# List of captures\n\n/(?:(abc)|(?<PP>def)|ghi)(*scs:(1,'PP').(.))/B\n------------------------------------------------------------------\n        Bra\n        Bra\n        CBra 1\n        abc\n        Ket\n        Alt\n        CBra 2\n        def\n        Ket\n        Alt\n        ghi\n        Ket\n        Scan substring\n      1 Capture ref\n      2 Capture ref\n        Any\n        CBra 3\n        Any\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    abc\n 0: abc\n 1: abc\n 2: <unset>\n 3: b\n    def\n 0: def\n 1: <unset>\n 2: def\n 3: e\n    ghi\nNo match\n\n/(?:(?<MM>abc)|(?<MM>def)|(ghi)|(?'NN'jkl)|mno)(*scs:('MM',3,<NN>).(.))/B,dupnames\n------------------------------------------------------------------\n        Bra\n        Bra\n        CBra 1\n        abc\n        Ket\n        Alt\n        CBra 2\n        def\n        Ket\n        Alt\n        CBra 3\n        ghi\n        Ket\n        Alt\n        CBra 4\n        jkl\n        Ket\n        Alt\n        mno\n        Ket\n        Scan substring\n        Capture dnref<MM>2\n      3 Capture ref\n      4 Capture ref\n        Any\n        CBra 5\n        Any\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    abc\n 0: abc\n 1: abc\n 2: <unset>\n 3: <unset>\n 4: <unset>\n 5: b\n    def\n 0: def\n 1: <unset>\n 2: def\n 3: <unset>\n 4: <unset>\n 5: e\n    ghi\n 0: ghi\n 1: <unset>\n 2: <unset>\n 3: ghi\n 4: <unset>\n 5: h\n    jkl\n 0: jkl\n 1: <unset>\n 2: <unset>\n 3: <unset>\n 4: jkl\n 5: k\n    mno\nNo match\n\n/f(?:(*scs:(+1,+2)(?<=(.)))|()){16}/\n    1234567890abcdef\n 0: f\n 1: 2\n 2: \n    1ffffffffffffff\n 0: f\n 1: 1\n 2: \n\n/(?<AA>a)(*scan_substring:(1,'AA',1,<AA>)a)b/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        Scan substring\n      1 Capture ref\n        a\n        Ket\n        b\n        Ket\n        End\n------------------------------------------------------------------\n    ab\n 0: ab\n 1: a\n    ac\nNo match\n\n/()()()(?<=ab(*scs:(1,2,3))cd)xyz/\n    abcdxyz\n 0: xyz\n 1: \n 2: \n 3: \n\n/()()()(?<=ab(*ACCEPT)(*scs:(1,2,3))cd|efg)xyz/\n    abxyz\n 0: xyz\n 1: \n 2: \n 3: \n    efgxyz\n 0: xyz\n 1: \n 2: \n 3: \n\n/(a)(*scs:(1)a(*ACCEPT))bbb/\n    abbb\n 0: abbb\n 1: a\n\n/(a)(b+)(*scs:(1)a(*ACCEPT))(\\2)/\n    abbb\n 0: abb\n 1: a\n 2: b\n 3: b\n\n# Duplicated capture references\n\n/(a)(b)(c)(d)(*scs:(4,3,1,2,2,1,3,3,4,4)x)/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        CBra 2\n        b\n        Ket\n        CBra 3\n        c\n        Ket\n        CBra 4\n        d\n        Ket\n        Scan substring\n      4 Capture ref\n      3 Capture ref\n      1 Capture ref\n      2 Capture ref\n        x\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?<n>a)(?<n>b)(?<n>c)(d)(*scs:(2,3,1,1,<n>,<n>)abc)/B,dupnames\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        CBra 2\n        b\n        Ket\n        CBra 3\n        c\n        Ket\n        CBra 4\n        d\n        Ket\n        Scan substring\n      2 Capture ref\n      3 Capture ref\n      1 Capture ref\n        abc\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?<n>a)(?<n>b)(?<n>c)(d)(*scs:(2,1,1,<n>,<n>)abc)/B,dupnames\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        CBra 2\n        b\n        Ket\n        CBra 3\n        c\n        Ket\n        CBra 4\n        d\n        Ket\n        Scan substring\n      2 Capture ref\n      1 Capture ref\n        Capture dnref<n>3\n        abc\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?<n>a)(?<n>b)(?<n>c)(d)(?<m>e)(?<m>f)(*scs:(<n>,5,3,2,1,4,1,4,<m>,6,<n>,<m>)abc)/B,dupnames\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        a\n        Ket\n        CBra 2\n        b\n        Ket\n        CBra 3\n        c\n        Ket\n        CBra 4\n        d\n        Ket\n        CBra 5\n        e\n        Ket\n        CBra 6\n        f\n        Ket\n        Scan substring\n        Capture dnref<n>3\n      5 Capture ref\n      4 Capture ref\n        Capture dnref<m>2\n        abc\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n# Tests for pcre2_set_optimize()\n\n/abc/I,optimization_none\nCapture group count = 0\nOptimizations: <none>\n\n/abc/I,optimization_none,auto_possess\nCapture group count = 0\nOptimizations: auto_possess\n\n/abc/I,optimization_none,dotstar_anchor,auto_possess\nCapture group count = 0\nOptimizations: auto_possess,dotstar_anchor\n\n/abc/I,optimization_none,start_optimize\nCapture group count = 0\nOptimizations: start_optimize\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/abc/I,dotstar_anchor_off,optimization_full\nCapture group count = 0\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n# If pcre2_set_optimize() is used to turn on some optimization, but at the same time,\n# the compile options word turns it off... the compile options word \"wins\":\n\n/abc/I,no_auto_possess,auto_possess\nCapture group count = 0\nOptions: no_auto_possess\nOptimizations: dotstar_anchor,start_optimize\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/abc/I,no_dotstar_anchor,dotstar_anchor\nCapture group count = 0\nOptions: no_dotstar_anchor\nOptimizations: auto_possess,start_optimize\nFirst code unit = 'a'\nLast code unit = 'c'\nSubject length lower bound = 3\n\n/abc/I,no_start_optimize,start_optimize\nCapture group count = 0\nOptions: no_start_optimize\nOptimizations: auto_possess,dotstar_anchor\n\n# --------------\n\n# larger than GROUP_MAX, smaller than INT_MAX\n/a\\800000b/\nFailed: error 161 at offset 8: subpattern number is too big\n        here: a\\800000 |<--| b\n\n# coming up on INT_MAX... (used to succeed with \\8 being literal 8)\n/a\\800000000b/\nFailed: error 161 at offset 11: subpattern number is too big\n        here: ...\\800000000 |<--| b\n\n# over INT_MAX (used to succeed with \\8 being literal 8)\n/a\\8000000000b/\nFailed: error 161 at offset 12: subpattern number is too big\n        here: ...8000000000 |<--| b\n\n# --------------\n\n# no_bs0\n\n/a\\0b\\x00c\\00d/\n    a\\x{00}b\\x{00}c\\x{00}d\n 0: a\\x00b\\x00c\\x00d\n\n/a\\0b/no_bs0\nFailed: error 198 at offset 3: octal digit missing after \\0 (PCRE2_EXTRA_NO_BS0 is set)\n        here: a\\0 |<--| b\n\n/b\\x00c\\00d/no_bs0\n    b\\x{00}c\\x{00}d\n 0: b\\x00c\\x00d\n\n/abc/substitute_extended\n    abc\\=replace=a\\0b\\x00c\\00d\n 1: a\\x00b\\x00c\\x00d\n\n/abc/substitute_extended,no_bs0\n    abc\\=replace=a\\0b\nFailed: error -57 at offset 3 in replacement: bad escape sequence in replacement string\n        here: a\\0 |<--| b\n    abc\\=replace=b\\x00c\\00d\n 1: b\\x00c\\x00d\n\n# python_octal\n\n#if !ebcdic\n\n/\\0-\\00-\\01-\\012-\\0123-\\123-\\1234/\n    \\x00-\\x00-\\x01-\\o{12}-\\o{12}3-\\o{123}-\\o{123}4\n 0: \\x00-\\x00-\\x01-\\x0a-\\x0a3-S-S4\n\n/\\1/\nFailed: error 115 at offset 2: reference to non-existent subpattern\n        here: \\1 |<-->|\n\n/\\12/\n    \\o{12}\n 0: \\x0a\n\n/abc/substitute_extended\n    abc\\=replace=\\0-\\00-\\01-\\012-\\0123-\\123-\\1234\n 1: \\x00-\\x00-\\x01-\\x0a-\\x0a3-S-S4\n    abc\\=replace=\\1\nFailed: error -49 at offset 2 in replacement: unknown substring\n        here: \\1 |<--|\n    abc\\=replace=\\12\n 1: \\x0a\n\n/\\0-\\00-\\01-\\012-\\0123-\\123-\\1234/python_octal\n    \\x00-\\x00-\\x01-\\o{12}-\\o{12}3-\\o{123}-\\o{123}4\n 0: \\x00-\\x00-\\x01-\\x0a-\\x0a3-S-S4\n\n/\\1/python_octal\nFailed: error 115 at offset 2: reference to non-existent subpattern\n        here: \\1 |<-->|\n\n/\\12/python_octal\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: \\12 |<-->|\n\n/abc/substitute_extended,python_octal\n    abc\\=replace=\\0-\\00-\\01-\\012-\\0123-\\123-\\1234\n 1: \\x00-\\x00-\\x01-\\x0a-\\x0a3-S-S4\n    abc\\=replace=\\1\nFailed: error -49 at offset 2 in replacement: unknown substring\n        here: \\1 |<--|\n    abc\\=replace=\\12\nFailed: error -49 at offset 3 in replacement: unknown substring\n        here: \\12 |<--|\n\n#endif\n\n# --------------\n\n/a(?C)b/\n    abc\n--->abc\n  0 ^^      b\n 0: ab\n    abc\\=callout_none\n 0: ab\n\n/a(?C)b/never_callout\nFailed: error 203 at offset 4: using callouts is disabled by the application\n        here: a(?C |<--| )b\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (UTS#18)\n\n/[a[]/\n    [\n 0: [\n\n/[a[]/alt_extended_class\nFailed: error 106 at offset 4: missing terminating ] for character class\n        here: [a[] |<--|\n\n/[a[B]/alt_extended_class\nFailed: error 212 at offset 5: missing terminating ] for extended character class (note '[' must be escaped under PCRE2_ALT_EXTENDED_CLASS)\n        here: [a[B] |<--|\n\n/[a[B]]C/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [Ba]\n        C\n        Ket\n        End\n------------------------------------------------------------------\n    aC\n 0: aC\n    BC\n 0: BC\n\\= Expect no match\n    [C\nNo match\n\n/[[A][B]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [AB]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    B\n 0: B\n\\= Expect no match\n    [\nNo match\n    ]\nNo match\n\n/[[A]||[B]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [AB]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    B\n 0: B\n\\= Expect no match\n    C\nNo match\n\n/[[^A][B]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [^A]\n        Ket\n        End\n------------------------------------------------------------------\n    B\n 0: B\n    C\n 0: C\n\\= Expect no match\n    A\nNo match\n\n/[^[A][B]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [^AB]\n        Ket\n        End\n------------------------------------------------------------------\n    C\n 0: C\n\\= Expect no match\n    A\nNo match\n    B\nNo match\n\n/[^[A]&&[B]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    B\n 0: B\n    C\n 0: C\n\n/[[AC]||[BC]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [A-C]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    B\n 0: B\n    C\n 0: C\n\\= Expect no match\n    D\nNo match\n\n/[[AC]&&[BC]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [C]\n        Ket\n        End\n------------------------------------------------------------------\n    C\n 0: C\n\\= Expect no match\n    A\nNo match\n    B\nNo match\n    D\nNo match\n\n/[[AC]--[BC]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [A]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n\\= Expect no match\n    B\nNo match\n    C\nNo match\n    D\nNo match\n\n/[[AC]~~[BC]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [AB]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    B\n 0: B\n\\= Expect no match\n    C\nNo match\n    D\nNo match\n\n/[A[]]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [A\\]]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    ]\n 0: ]\n\\= Expect no match\n    [\nNo match\n\n/[A[^]]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [^\\]]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    [\n 0: [\n    C\n 0: C\n\\= Expect no match\n    ]\nNo match\n\n/[A[]]/B,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        [A]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n\\= Expect no match\n    ]\nNo match\n    [\nNo match\n\n/[A[^]]/B,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    C\n 0: C\n    [\n 0: [\n    ]\n 0: ]\n\n/[A-C--B]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [AC]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    C\n 0: C\n\\= Expect no match\n    B\nNo match\n\n/[^A-C--B]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [^AC]\n        Ket\n        End\n------------------------------------------------------------------\n    B\n 0: B\n\\= Expect no match\n    A\nNo match\n    C\nNo match\n\n/[[\\d\\D]--b]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [^b]\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n    c\n 0: c\n\\= Expect no match\n    b\nNo match\n\n/[\\dAC-E[:space:]&&[^z]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\x09-\\x0d 0-9AC-E]\n        Ket\n        End\n------------------------------------------------------------------\n    0\n 0: 0\n    A\n 0: A\n    C\n 0: C\n    D\n 0: D\n    E\n 0: E\n    \\t\n 0: \\x09\n\\= Expect no match\n    B\nNo match\n    F\nNo match\n    ;\nNo match\n\n/[z||[^\\dAC-E[:space:]]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [^\\x09-\\x0d 0-9AC-E]\n        Ket\n        End\n------------------------------------------------------------------\n    z\n 0: z\n    B\n 0: B\n    F\n 0: F\n    ;\n 0: ;\n\\= Expect no match\n    0\nNo match\n    A\nNo match\n    C\nNo match\n    D\nNo match\n    E\nNo match\n    \\t\nNo match\n\n/[ab||cd]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [a-d]\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n    c\n 0: c\n\\= Expect no match\n    e\nNo match\n\n/[[a]b||[c]d]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [a-d]\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n    c\n 0: c\n\\= Expect no match\n    e\nNo match\n\n/[a[b]||c[d]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [a-d]\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n    c\n 0: c\n\\= Expect no match\n    e\nNo match\n\n/[-&&-]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-]\n        Ket\n        End\n------------------------------------------------------------------\n    -\n 0: -\n\\= Expect no match\n    a\nNo match\n\n/[a-&&-a]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-a]\n        Ket\n        End\n------------------------------------------------------------------\n    -\n 0: -\n    a\n 0: a\n\\= Expect no match\n    b\nNo match\n\n/[-a&&a-]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-a]\n        Ket\n        End\n------------------------------------------------------------------\n    -\n 0: -\n    a\n 0: a\n\\= Expect no match\n    b\nNo match\n\n/[[a]-&&-[a]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-a]\n        Ket\n        End\n------------------------------------------------------------------\n    -\n 0: -\n    a\n 0: a\n\\= Expect no match\n    b\nNo match\n\n/[-[a]&&[a]-]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-a]\n        Ket\n        End\n------------------------------------------------------------------\n    -\n 0: -\n    a\n 0: a\n\\= Expect no match\n    b\nNo match\n\n/(?xx:[  ^  a[  ^  b]  ])/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        Bra\n        [b]\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    b\n 0: b\n\\= Expect no match\n    A\nNo match\n    a\nNo match\n    c\nNo match\n\n/[  ^  a[  ^  b]  ]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [ ^ab]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x20\n 0:  \n    ^\n 0: ^\n    a\n 0: a\n    b\n 0: b\n\\= Expect no match\n    c\nNo match\n\n/[a-c--b]+/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [ac]++\n        Ket\n        End\n------------------------------------------------------------------\n    ac\n 0: ac\n    a\n 0: a\n\\= Expect no match\n    b\nNo match\n\n/[a-c--b]{2,3}/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [ac]{2,3}+\n        Ket\n        End\n------------------------------------------------------------------\n    ac\n 0: ac\n    cac\n 0: cac\n\\= Expect no match\n    a\nNo match\n    bb\nNo match\n\n/x[a-c--b]+y/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        x\n        [ac]++\n        y\n        Ket\n        End\n------------------------------------------------------------------\n    xacy\n 0: xacy\n    xaay\n 0: xaay\n    xay\n 0: xay\n\\= Expect no match\n    zacy\nNo match\n    xacz\nNo match\n    xy\nNo match\n    xby\nNo match\n\n/[A--B--C--D]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [A]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n\\= Expect no match\n    B\nNo match\n\n/[A--A--A]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        []\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    A\nNo match\n    B\nNo match\n\n/[[A--A]--A]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        []\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    A\nNo match\n    B\nNo match\n\n/[A--[A--A]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [A]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n\\= Expect no match\n    B\nNo match\n\n/[A--^B]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [A]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n\\= Expect no match\n    B\nNo match\n    ^\nNo match\n    z\nNo match\n\n/([a-z--n])\\1/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        [a-mo-z]\n        Ket\n        \\g{1}\n        Ket\n        End\n------------------------------------------------------------------\n    aa\n 0: aa\n 1: a\n    zz\n 0: zz\n 1: z\n\\= Expect no match\n    az\nNo match\n    nn\nNo match\n\n/(x[a-z--n]y)\\1/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        x\n        [a-mo-z]\n        y\n        Ket\n        \\g{1}\n        Ket\n        End\n------------------------------------------------------------------\n    xayxay\n 0: xayxay\n 1: xay\n    xzyxzy\n 0: xzyxzy\n 1: xzy\n\\= Expect no match\n    xnyxny\nNo match\n\n/(?:_\\1|([a-z--n])){2}/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        Bra\n        _\n        \\g{1}\n        Alt\n        CBra 1\n        [a-mo-z]\n        Ket\n        Ket\n        Bra\n        _\n        \\g{1}\n        Alt\n        CBra 1\n        [a-mo-z]\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    a_a\n 0: a_a\n 1: a\n    z_z\n 0: z_z\n 1: z\n\\= Expect no match\n    a_z\nNo match\n    n_n\nNo match\n\n/(?:_\\1|([a-z--n]))+/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        Bra\n        _\n        \\g{1}\n        Alt\n        CBra 1\n        [a-mo-z]\n        Ket\n        KetRmax\n        Ket\n        End\n------------------------------------------------------------------\n    a_a\n 0: a_a\n 1: a\n    z_z\n 0: z_z\n 1: z\n    a_partial\n 0: a\n 1: a\n\\= Expect no match\n    n_n\nNo match\n\n/[\\d-[z]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-0-9z]\n        Ket\n        End\n------------------------------------------------------------------\n    1\n 0: 1\n    -\n 0: -\n    z\n 0: z\n\n/[\\d-||z]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-0-9z]\n        Ket\n        End\n------------------------------------------------------------------\n    1\n 0: 1\n    -\n 0: -\n    z\n 0: z\n\n/[z[\\d-]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-0-9z]\n        Ket\n        End\n------------------------------------------------------------------\n    1\n 0: 1\n    -\n 0: -\n    z\n 0: z\n\n/[1-[z]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-1z]\n        Ket\n        End\n------------------------------------------------------------------\n    1\n 0: 1\n    -\n 0: -\n    z\n 0: z\n\n/[1-||z]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-1z]\n        Ket\n        End\n------------------------------------------------------------------\n    1\n 0: 1\n    -\n 0: -\n    z\n 0: z\n\n/[z[1-]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-1z]\n        Ket\n        End\n------------------------------------------------------------------\n    1\n 0: 1\n    -\n 0: -\n    z\n 0: z\n\n/[a--/alt_extended_class\nFailed: error 106 at offset 4: missing terminating ] for character class\n        here: [a-- |<--|\n\n/[a--a/alt_extended_class\nFailed: error 106 at offset 5: missing terminating ] for character class\n        here: [a--a |<--|\n\n/[a--[a/alt_extended_class\nFailed: error 106 at offset 6: missing terminating ] for character class\n        here: [a--[a |<--|\n\n/[a--[a]/alt_extended_class\nFailed: error 212 at offset 7: missing terminating ] for extended character class (note '[' must be escaped under PCRE2_ALT_EXTENDED_CLASS)\n        here: [a--[a] |<--|\n\n/[a--[a]--/alt_extended_class\nFailed: error 212 at offset 9: missing terminating ] for extended character class (note '[' must be escaped under PCRE2_ALT_EXTENDED_CLASS)\n        here: [a--[a]-- |<--|\n\n/[a--]/alt_extended_class\nFailed: error 210 at offset 5: expected operand after operator in extended character class\n        here: [a--] |<--|\n\n/[--a]/alt_extended_class\nFailed: error 209 at offset 3: unexpected operator in extended character class (no preceding operand)\n        here: [-- |<--| a]\n\n/[^--a]/alt_extended_class\nFailed: error 209 at offset 4: unexpected operator in extended character class (no preceding operand)\n        here: [^-- |<--| a]\n\n/[--]/alt_extended_class\nFailed: error 209 at offset 3: unexpected operator in extended character class (no preceding operand)\n        here: [-- |<--| ]\n\n/[a---b]/alt_extended_class\nFailed: error 208 at offset 5: invalid operator in extended character class\n        here: [a--- |<--| b]\n\n/[a----b]/alt_extended_class\nFailed: error 208 at offset 6: invalid operator in extended character class\n        here: [a---- |<--| b]\n\n/[a&&&b]/alt_extended_class\nFailed: error 208 at offset 5: invalid operator in extended character class\n        here: [a&&& |<--| b]\n\n/[a|||b]/alt_extended_class\nFailed: error 208 at offset 5: invalid operator in extended character class\n        here: [a||| |<--| b]\n\n/[a~~~b]/alt_extended_class\nFailed: error 208 at offset 5: invalid operator in extended character class\n        here: [a~~~ |<--| b]\n\n/[a~~~~b]/alt_extended_class\nFailed: error 208 at offset 6: invalid operator in extended character class\n        here: [a~~~~ |<--| b]\n\n/[a~~/alt_extended_class\nFailed: error 106 at offset 4: missing terminating ] for character class\n        here: [a~~ |<--|\n\n/[a~~~/alt_extended_class\nFailed: error 208 at offset 5: invalid operator in extended character class\n        here: [a~~~ |<--|\n\n/[a~~~~/alt_extended_class\nFailed: error 208 at offset 6: invalid operator in extended character class\n        here: [a~~~~ |<--|\n\n/[a||b&&c]/alt_extended_class\nFailed: error 211 at offset 7: square brackets needed to clarify operator precedence in extended character class\n        here: [a||b&& |<--| c]\n\n/[a||b~~c]/alt_extended_class\nFailed: error 211 at offset 7: square brackets needed to clarify operator precedence in extended character class\n        here: [a||b~~ |<--| c]\n\n/[a~~b&&c]/alt_extended_class\nFailed: error 211 at offset 7: square brackets needed to clarify operator precedence in extended character class\n        here: [a~~b&& |<--| c]\n\n/[a--b~~c]/alt_extended_class\nFailed: error 211 at offset 7: square brackets needed to clarify operator precedence in extended character class\n        here: [a--b~~ |<--| c]\n\n/[a--b&&c]/alt_extended_class\nFailed: error 211 at offset 7: square brackets needed to clarify operator precedence in extended character class\n        here: [a--b&& |<--| c]\n\n/[a||b--c]/alt_extended_class\nFailed: error 211 at offset 7: square brackets needed to clarify operator precedence in extended character class\n        here: [a||b-- |<--| c]\n\n/[a||[b--c]]/alt_extended_class\n    a\n 0: a\n    b\n 0: b\n\\= Expect no match\n    c\nNo match\n\n/[\\d-z]/B,alt_extended_class\nFailed: error 150 at offset 4: invalid range in character class\n        here: [\\d- |<--| z]\n\n/[z-\\d]/B,alt_extended_class\nFailed: error 150 at offset 5: invalid range in character class\n        here: [z-\\d |<--| ]\n\n/[abc -- b]+/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [ac]++\n        Ket\n        End\n------------------------------------------------------------------\n    acacbac\n 0: acac\n\n/[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a&&a]]]]]]]]]]]]]]]/alt_extended_class\n    a\n 0: a\n\\= Expect no match\n    b\nNo match\n\n/[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[z]&&a]]]]]]]]]]]]]]]/alt_extended_class\nFailed: error 207 at offset 114: extended character class nesting is too deep\n        here: ...[a[b]&&a[a |-->| [z]&&a]]]]...\n\n/[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a[b]&&a[a&&a[z]]]]]]]]]]]]]]]]/alt_extended_class\nFailed: error 207 at offset 117: extended character class nesting is too deep\n        here: ...b]&&a[a&&a |-->| [z]]]]]]]]...\n\n/[z&/alt_extended_class\nFailed: error 106 at offset 3: missing terminating ] for character class\n        here: [z& |<--|\n\n/[[^]~~[^]]/B,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        []\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    a\nNo match\n\n/[^[[^]~~[^]]]/B,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n# allow-empty-class does nothing inside (?[...])\n/(?[ []] ])/B,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        [\\]]\n        Ket\n        End\n------------------------------------------------------------------\n    ]\n 0: ]\n\n# bad-escape-is-literal does nothing inside (?[...])\n/[ \\j ]/\nFailed: error 103 at offset 4: unrecognized character follows \\\n        here: [ \\j |<--|  ]\n\n/[ /\\\nFailed: error 101 at offset 3: \\ at end of pattern\n        here: [ \\ |<--|\n\n/(?[ \\j ])/\nFailed: error 103 at offset 6: unrecognized character follows \\\n        here: (?[ \\j |<--|  ])\n\n/(?[ /\\\nFailed: error 101 at offset 5: \\ at end of pattern\n        here: (?[ \\ |<--|\n\n/[ \\j ]/bad_escape_is_literal\n    j\n 0: j\n\\= Expect no match\n    k\nNo match\n\n/[ /\\bad_escape_is_literal\nFailed: error 106 at offset 3: missing terminating ] for character class\n        here: [ \\ |<--|\n\n/(?[ \\j ])/bad_escape_is_literal\nFailed: error 103 at offset 6: unrecognized character follows \\\n        here: (?[ \\j |<--|  ])\n\n/(?[ /\\bad_escape_is_literal\nFailed: error 101 at offset 5: \\ at end of pattern\n        here: (?[ \\ |<--|\n\n/(?[ [\\j] ])/bad_escape_is_literal\nFailed: error 103 at offset 7: unrecognized character follows \\\n        here: (?[ [\\j |<--| ] ])\n\n/(?[ (\\j) ])/bad_escape_is_literal\nFailed: error 103 at offset 7: unrecognized character follows \\\n        here: (?[ (\\j |<--| ) ])\n\n# We can't test error cases in testinput1\n\n/(?[])/\nFailed: error 214 at offset 4: empty expression in extended character class\n        here: (?[] |<--| )\n\n/(?[/\nFailed: error 106 at offset 3: missing terminating ] for character class\n        here: (?[ |<--|\n\n/(?[]/\nFailed: error 214 at offset 4: empty expression in extended character class\n        here: (?[] |<--|\n\n/(?[\\n/\nFailed: error 106 at offset 5: missing terminating ] for character class\n        here: (?[\\n |<--|\n\n/(?[\\n]/\nFailed: error 215 at offset 6: terminating ] with no following closing parenthesis in (?[...]\n        here: (?[\\n] |<--|\n\n/(?[\\n]z)/\nFailed: error 215 at offset 6: terminating ] with no following closing parenthesis in (?[...]\n        here: (?[\\n] |<--| z)\n\n/(?[\\n] )/\nFailed: error 215 at offset 6: terminating ] with no following closing parenthesis in (?[...]\n        here: (?[\\n] |<--|  )\n\n/(?[(/\nFailed: error 114 at offset 4: missing closing parenthesis\n        here: (?[( |<--|\n\n/(?[( /\nFailed: error 106 at offset 5: missing terminating ] for character class\n        here: (?[(  |<--|\n\n/(?[(\\n/\nFailed: error 106 at offset 6: missing terminating ] for character class\n        here: (?[(\\n |<--|\n\n/(?[ \\n + () ])/\nFailed: error 214 at offset 11: empty expression in extended character class\n        here: ...?[ \\n + () |<--|  ])\n\n/(?[1])/\nFailed: error 216 at offset 4: unexpected character in (?[...]) extended character class\n        here: (?[1 |<--| ])\n\n/(?[a])/\nFailed: error 216 at offset 4: unexpected character in (?[...]) extended character class\n        here: (?[a |<--| ])\n\n/(?[a-c])/\nFailed: error 216 at offset 4: unexpected character in (?[...]) extended character class\n        here: (?[a |<--| -c])\n\n/(?[(])/\nFailed: error 114 at offset 4: missing closing parenthesis\n        here: (?[( |<--| ])\n\n/(?[(\\n])/\nFailed: error 114 at offset 6: missing closing parenthesis\n        here: (?[(\\n |<--| ])\n\n/(?[\\n)])/\nFailed: error 122 at offset 6: unmatched closing parenthesis\n        here: (?[\\n) |<--| ])\n\n/(?[^\\n])/\nFailed: error 209 at offset 4: unexpected operator in extended character class (no preceding operand)\n        here: (?[^ |<--| \\n])\n\n/(?[ \\n \\t ])/\nFailed: error 213 at offset 9: unexpected expression in extended character class (no preceding operator)\n        here: (?[ \\n \\t |<--|  ])\n\n/(?[ \\d \\t ])/\nFailed: error 213 at offset 9: unexpected expression in extended character class (no preceding operator)\n        here: (?[ \\d \\t |<--|  ])\n\n/(?[ [\\n] \\t ])/\nFailed: error 213 at offset 11: unexpected expression in extended character class (no preceding operator)\n        here: ...?[ [\\n] \\t |<--|  ])\n\n/(?[ (\\n) \\t ])/\nFailed: error 213 at offset 11: unexpected expression in extended character class (no preceding operator)\n        here: ...?[ (\\n) \\t |<--|  ])\n\n/(?[ [:alpha:] \\t ])/\nFailed: error 213 at offset 16: unexpected expression in extended character class (no preceding operator)\n        here: ...alpha:] \\t |<--|  ])\n\n/(?[ \\n + \\t \\d ])/\nFailed: error 213 at offset 14: unexpected expression in extended character class (no preceding operator)\n        here: ...\\n + \\t \\d |<--|  ])\n\n/(?[ !\\n \\t ])/\nFailed: error 213 at offset 10: unexpected expression in extended character class (no preceding operator)\n        here: (?[ !\\n \\t |<--|  ])\n\n/(?[ \\n [:alpha:] ])/\nFailed: error 213 at offset 16: unexpected expression in extended character class (no preceding operator)\n        here: ... [:alpha:] |<--|  ])\n\n/(?[ \\n [\\d] ])/\nFailed: error 213 at offset 8: unexpected expression in extended character class (no preceding operator)\n        here: (?[ \\n [ |<--| \\d] ])\n\n/(?[ \\n (\\t) ])/\nFailed: error 213 at offset 8: unexpected expression in extended character class (no preceding operator)\n        here: (?[ \\n ( |<--| \\t) ])\n\n/(?[ \\n !\\t ])/\nFailed: error 213 at offset 8: unexpected expression in extended character class (no preceding operator)\n        here: (?[ \\n ! |<--| \\t ])\n\n/(?[ \\n \\t ])/\nFailed: error 213 at offset 9: unexpected expression in extended character class (no preceding operator)\n        here: (?[ \\n \\t |<--|  ])\n\n/(?[:graph:])/\nFailed: error 216 at offset 4: unexpected character in (?[...]) extended character class\n        here: (?[: |<--| graph:])\n\n/(?[\\Qn\\E])/\nFailed: error 216 at offset 6: unexpected character in (?[...]) extended character class\n        here: (?[\\Qn |<--| \\E])\n\n# maximum depth tests\n\n/(?[\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n&\\n))))))))))))))])/\n    \\n\n 0: \\x0a\n\\= Expect no match\n    a\nNo match\n    b\nNo match\n\n/(?[\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+([\\n]&\\n))))))))))))))])/\nFailed: error 207 at offset 157: extended character class nesting is too deep\n        here: ...n+[a]&\\n+( |-->| [\\n]&\\n)))...\n\n/(?[\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n&[\\n]))))))))))))))])/\nFailed: error 207 at offset 160: extended character class nesting is too deep\n        here: ...a]&\\n+(\\n& |-->| [\\n]))))))...\n\n/(?[\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+(\\n+[a]&\\n+((\\n)&\\n))))))))))))))])/\nFailed: error 207 at offset 157: extended character class nesting is too deep\n        here: ...n+[a]&\\n+( |-->| (\\n)&\\n)))...\n\n# --------------\n\n/[[:digit:]   -Z]/xx\nFailed: error 150 at offset 14: invalid range in character class\n        here: ...igit:]   - |<--| Z]\n\n/[\\d   -Z]/xx\nFailed: error 150 at offset 7: invalid range in character class\n        here: [\\d   - |<--| Z]\n\n/[[:digit:]\\E-H]/\nFailed: error 150 at offset 13: invalid range in character class\n        here: ...digit:]\\E- |<--| H]\n\n/[[:digit:]\\Q\\E-H]+/\nFailed: error 150 at offset 15: invalid range in character class\n        here: ...git:]\\Q\\E- |<--| H]+\n\n/[z-[:space:]]/\nFailed: error 150 at offset 12: invalid range in character class\n        here: ...-[:space:] |<--| ]\n\n/[z-\\d]/\nFailed: error 150 at offset 5: invalid range in character class\n        here: [z-\\d |<--| ]\n\n/[[:space:]-z]/\nFailed: error 150 at offset 11: invalid range in character class\n        here: ...[:space:]- |<--| z]\n\n/[\\d-z]/\nFailed: error 150 at offset 4: invalid range in character class\n        here: [\\d- |<--| z]\n\n/[\\d-\\w]/\nFailed: error 150 at offset 4: invalid range in character class\n        here: [\\d- |<--| \\w]\n\n/[\\Q/\nFailed: error 106 at offset 3: missing terminating ] for character class\n        here: [\\Q |<--|\n\n/[\\Q/\\\nFailed: error 106 at offset 4: missing terminating ] for character class\n        here: [\\Q\\ |<--|\n\n/[\\Q\\E/\nFailed: error 106 at offset 5: missing terminating ] for character class\n        here: [\\Q\\E |<--|\n\n/[\\Q\\n/\nFailed: error 106 at offset 5: missing terminating ] for character class\n        here: [\\Q\\n |<--|\n\n/[\\Q\\n]/\nFailed: error 106 at offset 6: missing terminating ] for character class\n        here: [\\Q\\n] |<--|\n\n/[\\Q\\n/\\\nFailed: error 106 at offset 6: missing terminating ] for character class\n        here: [\\Q\\n\\ |<--|\n\n/[\\Q\\n\\]/\nFailed: error 106 at offset 7: missing terminating ] for character class\n        here: [\\Q\\n\\] |<--|\n\n/[\\Q\\n\\E/\nFailed: error 106 at offset 7: missing terminating ] for character class\n        here: [\\Q\\n\\E |<--|\n\n/[\\Q\\n\\E]/\n    \\\\\n 0: \\\n    n\n 0: n\n\\= Expect no match\n    \\n\nNo match\n    Q\nNo match\n\n/[z\\Q/\nFailed: error 106 at offset 4: missing terminating ] for character class\n        here: [z\\Q |<--|\n\n/[z\\Q/\\\nFailed: error 106 at offset 5: missing terminating ] for character class\n        here: [z\\Q\\ |<--|\n\n/[z\\Q\\E/\nFailed: error 106 at offset 6: missing terminating ] for character class\n        here: [z\\Q\\E |<--|\n\n/[/\\\nFailed: error 101 at offset 2: \\ at end of pattern\n        here: [\\ |<--|\n\n/[\\n/\nFailed: error 106 at offset 3: missing terminating ] for character class\n        here: [\\n |<--|\n\n/[\\E/\nFailed: error 106 at offset 3: missing terminating ] for character class\n        here: [\\E |<--|\n\n/[\\^z]/B\n------------------------------------------------------------------\n        Bra\n        [\\^z]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[ \\^]/B\n------------------------------------------------------------------\n        Bra\n        [ ^]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\\\z]/B\n------------------------------------------------------------------\n        Bra\n        [\\\\z]\n        Ket\n        End\n------------------------------------------------------------------\n\n#if !ebcdic\n\n/[0-z]/B\n------------------------------------------------------------------\n        Bra\n        [0-z]\n        Ket\n        End\n------------------------------------------------------------------\n\n#endif\n\n/[0\\-z]/B\n------------------------------------------------------------------\n        Bra\n        [\\-0z]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[]z]/B\n------------------------------------------------------------------\n        Bra\n        [\\]z]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[ \\]]/B\n------------------------------------------------------------------\n        Bra\n        [ \\]]\n        Ket\n        End\n------------------------------------------------------------------\n\n#if !ebcdic\n\n/[ --]/B\n------------------------------------------------------------------\n        Bra\n        [ -\\-]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[A-\\]]/B\n------------------------------------------------------------------\n        Bra\n        [A-\\]]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[A-\\\\]/B\n------------------------------------------------------------------\n        Bra\n        [A-\\\\]\n        Ket\n        End\n------------------------------------------------------------------\n\n#endif\n\n/[\\A]/\nFailed: error 107 at offset 3: escape sequence is invalid in character class\n        here: [\\A |<--| ]\n\n/[\\Z]/\nFailed: error 107 at offset 3: escape sequence is invalid in character class\n        here: [\\Z |<--| ]\n\n/[\\z]/\nFailed: error 107 at offset 3: escape sequence is invalid in character class\n        here: [\\z |<--| ]\n\n/[\\G]/\nFailed: error 107 at offset 3: escape sequence is invalid in character class\n        here: [\\G |<--| ]\n\n/[\\K]/\nFailed: error 107 at offset 3: escape sequence is invalid in character class\n        here: [\\K |<--| ]\n\n/[\\g<1>]/\n    <\n 0: <\n    g\n 0: g\n\\= Expect no match\n    \\\\\nNo match\n\n/[\\k<1>]/\n    <\n 0: <\n    k\n 0: k\n\\= Expect no match\n    \\\\\nNo match\n\n/[\\u{ 1z}]/alt_bsux,extra_alt_bsux\n    u\n 0: u\n    {\n 0: {\n    }\n 0: }\n    \\x20\n 0:  \n    1\n 0: 1\n\\= Expect no match\n    \\\\\nNo match\n\n#if !ebcdic\n\n/[a\\x{e1}]/iB\n------------------------------------------------------------------\n        Bra\n        [Aa\\xe1]\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n    A\n 0: A\n    \\x{e1}\n 0: \\xe1\n\n#endif\n\n# --------------\n\n# Test backreferences with possessive repeats\n\n/(..)\\1*+/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Any\n        Any\n        Ket\n        \\g{1}*+\n        Ket\n        End\n------------------------------------------------------------------\n  ab\n 0: ab\n 1: ab\n  abc\n 0: ab\n 1: ab\n  abababc\n 0: ababab\n 1: ab\n\n/(..)\\1++/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Any\n        Any\n        Ket\n        \\g{1}++\n        Ket\n        End\n------------------------------------------------------------------\n  abc\nNo match\n  ababc\n 0: abab\n 1: ab\n  aababab\n 0: ababab\n 1: ab\n  aabababc\n 0: ababab\n 1: ab\n\n/(..)\\1?+/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Any\n        Any\n        Ket\n        \\g{1}?+\n        Ket\n        End\n------------------------------------------------------------------\n  aa\n 0: aa\n 1: aa\n  aac\n 0: aa\n 1: aa\n  ababab\n 0: abab\n 1: ab\n\n# The + is intentionally missing,\n# exact repeat is always possessive\n/(..)\\1{3}/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Any\n        Any\n        Ket\n        \\g{1}{3,3}\n        Ket\n        End\n------------------------------------------------------------------\n  abababac\nNo match\n  abababab\n 0: abababab\n 1: ab\n  ababababc\n 0: abababab\n 1: ab\n\n/(..)\\1{2,}+/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Any\n        Any\n        Ket\n        \\g{1}{2,}+\n        Ket\n        End\n------------------------------------------------------------------\n  ababac\nNo match\n  ababab\n 0: ababab\n 1: ab\n  abababab\n 0: abababab\n 1: ab\n  ababababab\n 0: ababababab\n 1: ab\n  abababababc\n 0: ababababab\n 1: ab\n\n/(..)\\1{3,5}+/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Any\n        Any\n        Ket\n        \\g{1}{3,5}+\n        Ket\n        End\n------------------------------------------------------------------\n  abababac\nNo match\n  abababab\n 0: abababab\n 1: ab\n  ababababab\n 0: ababababab\n 1: ab\n  abababababab\n 0: abababababab\n 1: ab\n  ababababababab\n 0: abababababab\n 1: ab\n\n# --------------\n\n# Attempt at full coverage of the substitution buffer-management code - not\n# just covering each line in each macro, but covering each instantiation of each\n# line in those macros.\n\n#\n# CHECKMEMCPY tests\n#\n# Four conditions for CHECKMEMCPY:\n#   no overflow;\n#   first overflow (with/without substitute_overflow_length);\n#   overflow after previous overflow\n# Additionally some CHECKMEMCPYs have a substitute_replacement_only branch.\n#\n\n# pre-start-offset fragment\n# no \"overflow after previous overflow\" condition\n/a/\n    XYaZ\\=offset=2,replace=foo\n 1: XYfooZ\n    XYaZ\\=offset=2,replace=[1]foo\nFailed: error -48: no more memory\n    XYaZ\\=offset=2,substitute_overflow_length,replace=[1]foo\nFailed: error -48: no more memory: 7 code units are needed\n    XYaZ\\=offset=2,substitute_replacement_only,replace=foo\n 1: foo\n\n# pre-match fragment\n/a/\n    XYaZ\\=replace=foo\n 1: XYfooZ\n    XYaZ\\=replace=[1]foo\nFailed: error -48: no more memory\n    XYaZ\\=substitute_overflow_length,replace=[1]foo\nFailed: error -48: no more memory: 7 code units are needed\n    XXYaZ\\=offset=2,substitute_overflow_length,replace=[1]foo\nFailed: error -48: no more memory: 8 code units are needed\n    XYaZ\\=substitute_replacement_only,replace=foo\n 1: foo\n\n# empty match bumpalong\n/(?<=abc)(|DEF)/g\n    abcDEFabcZ\\=replace=+\n 3: abc++abc+Z\n    abcDEFabcZ\\=replace=[5]+\nFailed: error -48: no more memory\n    abcDEFabcZ\\=substitute_overflow_length,replace=[5]+\nFailed: error -48: no more memory: 11 code units are needed\n    abcDEFabcZ\\=replace=[9]+\nFailed: error -48: no more memory\n    abcDEFabcZ\\=substitute_overflow_length,replace=[9]+\nFailed: error -48: no more memory: 11 code units are needed\n    abcDEFabcZ\\=substitute_overflow_length,replace=[1]+\nFailed: error -48: no more memory: 11 code units are needed\n    abcDEFabcZ\\=substitute_replacement_only,replace=+\n 3: +++\n\n# literal replacement\n/a/\n    XYaZ\\=substitute_literal,replace=$0\n 1: XY$0Z\n    XYaZ\\=substitute_literal,replace=[3]$0\nFailed: error -48: no more memory\n    XYaZ\\=substitute_literal,substitute_overflow_length,replace=[3]$0\nFailed: error -48: no more memory: 6 code units are needed\n    XYaZ\\=substitute_literal,substitute_overflow_length,replace=[1]$0\nFailed: error -48: no more memory: 6 code units are needed\n\n# a MARK\n/(*:pear)apple/\n    XappleY\\=replace=${*MARK}\n 1: XpearY\n    XappleY\\=replace=[3]${*MARK}\nFailed: error -48: no more memory\n    XappleY\\=substitute_overflow_length,replace=[3]${*MARK}\nFailed: error -48: no more memory: 7 code units are needed\n    XXappleY\\=substitute_overflow_length,replace=[1]${*MARK}\nFailed: error -48: no more memory: 8 code units are needed\n\n# a subject fragment\n/a(bb)c/\n    XabbcY\\=replace=$1\n 1: XbbY\n    XabbcY\\=replace=[2]$1\nFailed: error -48: no more memory\n    XabbcY\\=substitute_overflow_length,replace=[2]$1\nFailed: error -48: no more memory: 5 code units are needed\n    XXabbcY\\=substitute_overflow_length,replace=[1]$1\nFailed: error -48: no more memory: 6 code units are needed\n\n# a zero-length subject fragment\n/a()c/\n    XacY\\=replace=$1\n 1: XY\n    XacY\\=replace=[2]$1\nFailed: error -48: no more memory\n    XacY\\=substitute_overflow_length,replace=[2]$1\nFailed: error -48: no more memory: 3 code units are needed\n\n#if !ebcdic\n\n# a data character via an escape\n/abc/substitute_extended\n    XabcY\\=replace=\\x{48}\n 1: XHY\n    XabcY\\=replace=[1]\\x{48}\nFailed: error -48: no more memory\n    XabcY\\=substitute_overflow_length,replace=[1]\\x{48}\nFailed: error -48: no more memory: 4 code units are needed\n    XXabcY\\=substitute_overflow_length,replace=[1]\\x{48}\nFailed: error -48: no more memory: 5 code units are needed\n\n#endif\n\n# a replacement literal character\n/abc/\n    XabcY\\=replace=Z\n 1: XZY\n    XabcY\\=replace=[1]Z\nFailed: error -48: no more memory\n    XabcY\\=substitute_overflow_length,replace=[1]Z\nFailed: error -48: no more memory: 4 code units are needed\n    XXabcY\\=substitute_overflow_length,replace=[1]Z\nFailed: error -48: no more memory: 5 code units are needed\n\n# a cancelled substitution\n# no \"overflow after previous overflow\" condition\n/abc/substitute_skip=1\n    XabcY\\=replace=Z\n 1(1) Old 1 4 \"abc\" New 1 2 \"Z SKIPPED\"\n 1: XabcY\n    XabcY\\=replace=[3]Z\n 1(1) Old 1 4 \"abc\" New 1 2 \"Z SKIPPED\"\nFailed: error -48: no more memory\n    XabcY\\=substitute_overflow_length,replace=[3]Z\n 1(1) Old 1 4 \"abc\" New 1 2 \"Z SKIPPED\"\nFailed: error -48: no more memory: 6 code units are needed\n    XabcY\\=substitute_replacement_only,replace=Z\n 1(1) Old 1 4 \"abc\" New 0 1 \"Z SKIPPED\"\n 1: \n\n# the rest of the subject\n/abc/\n    XabcYY\\=replace=Z\n 1: XZYY\n    XabcYY\\=replace=[3]Z\nFailed: error -48: no more memory\n    XabcYY\\=substitute_overflow_length,replace=[3]Z\nFailed: error -48: no more memory: 5 code units are needed\n    XabcYY\\=substitute_overflow_length,replace=[1]Z\nFailed: error -48: no more memory: 5 code units are needed\n    XabcYY\\=substitute_replacement_only,replace=Z\n 1: Z\n\n# the trailing NULL\n/abc/\n    XabcY\\=replace=Z\n 1: XZY\n    XabcY\\=replace=[3]Z\nFailed: error -48: no more memory\n    XabcY\\=substitute_overflow_length,replace=[3]Z\nFailed: error -48: no more memory: 4 code units are needed\n    XabcY\\=substitute_overflow_length,replace=[1]Z\nFailed: error -48: no more memory: 4 code units are needed\n\n#\n# CHECKCASECPY tests\n#\n# The same four conditions for CHECKCASECPY as for CHECKMEMCPY:\n#   no overflow;\n#   first overflow (with/without substitute_overflow_length);\n#   overflow after previous overflow\n# Also the condition where CHECKCASECPY isn't called due to a custom callout\n#\n\n# a MARK\n/(*:pear)apple/substitute_extended\n    XappleY\\=replace=\\U${*MARK}\n 1: XPEARY\n    XappleY\\=replace=[3]\\U${*MARK}\nFailed: error -48: no more memory\n    XappleY\\=substitute_overflow_length,replace=[3]\\U${*MARK}\nFailed: error -48: no more memory: 7 code units are needed\n    XXappleY\\=substitute_overflow_length,replace=[1]\\U${*MARK}\nFailed: error -48: no more memory: 8 code units are needed\n    XappleY\\=substitute_case_callout,replace=\\U${*MARK}\n 1: XpeBrY\n\n# a subject fragment\n/a(bb)c/substitute_extended\n    XabbcY\\=replace=\\U$1\n 1: XBBY\n    XabbcY\\=replace=[2]\\U$1\nFailed: error -48: no more memory\n    XabbcY\\=substitute_overflow_length,replace=[2]\\U$1\nFailed: error -48: no more memory: 5 code units are needed\n    XXabbcY\\=substitute_overflow_length,replace=[1]\\U$1\nFailed: error -48: no more memory: 6 code units are needed\n    XabbcY\\=substitute_case_callout,replace=\\U$1\n 1: XbbY\n\n# a zero-length subject fragment\n/a()c/substitute_extended\n    XacY\\=replace=\\U$1\n 1: XY\n    XacY\\=replace=[2]\\U$1\nFailed: error -48: no more memory\n    XacY\\=substitute_overflow_length,replace=[2]\\U$1\nFailed: error -48: no more memory: 3 code units are needed\n\n#if !ebcdic\n\n# a data character via an escape\n/abc/substitute_extended\n    XabcY\\=replace=\\U\\x{48}\n 1: XHY\n    XabcY\\=replace=[1]\\U\\x{48}\nFailed: error -48: no more memory\n    XabcY\\=substitute_overflow_length,replace=[1]\\U\\x{48}\nFailed: error -48: no more memory: 4 code units are needed\n    XXabcY\\=substitute_overflow_length,replace=[1]\\U\\x{48}\nFailed: error -48: no more memory: 5 code units are needed\n    XabcY\\=substitute_case_callout,replace=\\U\\x{48}\n 1: XHY\n\n#endif\n\n# a replacement literal character\n/abc/substitute_extended\n    XabcY\\=replace=\\UZ\n 1: XZY\n    XabcY\\=replace=[1]\\UZ\nFailed: error -48: no more memory\n    XabcY\\=substitute_overflow_length,replace=[1]\\UZ\nFailed: error -48: no more memory: 4 code units are needed\n    XXabcY\\=substitute_overflow_length,replace=[1]\\UZ\nFailed: error -48: no more memory: 5 code units are needed\n    XabcY\\=substitute_case_callout,replace=\\UZ\n 1: XZY\n\n#\n# DELAYEDFORCECASE tests\n#\n# Some different triggering conditions for DELAYEDFORCECASE:\n#   no overflow;\n#   first overflow (with/without substitute_overflow_length);\n#   if there was a previous overflow, then the case callout can't be invoked\n# Also, the CASEERROR branch.\n# Also, the branch for where chars_outstanding is zero, both with and without\n#   a previous overflow.\n#\n\n# on set casing mode\n/abc/substitute_extended,substitute_case_callout\n    XabcY\\=replace=\\Uf\\Lq\n 1: XSSqY\n    XabcY\\=replace=[2]\\Uf\\Lq\nFailed: error -48: no more memory\n    XabcY\\=substitute_overflow_length,replace=[2]\\Uf\\Lq\nFailed: error -48: no more memory: 16 code units are needed\n    XabcY\\=substitute_overflow_length,replace=[1]\\Uf\\Lq\nFailed: error -48: no more memory: 25 code units are needed\n    XabcY\\=replace=\\U!\\Lq\nFailed: error -69: error performing replacement case transformation\n    XabcY\\=replace=\\U\\Lq\n 1: XqY\n    XXabcY\\=substitute_overflow_length,replace=[1]\\U\\Lq\nFailed: error -48: no more memory: 15 code units are needed\n\n# trailing fragment\n/abc/substitute_extended,substitute_case_callout\n    XabcY\\=replace=f\n 1: XfY\n    XabcY\\=replace=\\Uf\n 1: XSSY\n    XabcY\\=replace=[2]\\Uf\nFailed: error -48: no more memory\n    XabcY\\=substitute_overflow_length,replace=[2]\\Uf\nFailed: error -48: no more memory: 5 code units are needed\n    XabcY\\=substitute_overflow_length,replace=[1]\\Uf\nFailed: error -48: no more memory: 14 code units are needed\n    XabcY\\=replace=\\U!\nFailed: error -69: error performing replacement case transformation\n    XabcY\\=replace=\\U\n 1: XY\n    XXabcY\\=substitute_overflow_length,replace=[1]\\U\nFailed: error -48: no more memory: 4 code units are needed\n\n#\n# do_case_copy tests\n#\n\n/aa/i,substitute_extended\n    XaaY\\=replace=\\Uaa\\uaa\\LAA\\lAA\\U\\lAA\\L\\uaa\\u\\LaaA\\l\\UAAa\n 1: XAAAaaaaAaAAaAaaaAAY\n    XaaY\\=replace=[1]\\uaa\nFailed: error -48: no more memory\n    XaaY\\=replace=[2]\\uaa\nFailed: error -48: no more memory\n    XaaY\\=replace=[3]\\uaa\nFailed: error -48: no more memory\n    XaaY\\=replace=[4]\\uaa\nFailed: error -48: no more memory\n    XaaY\\=replace=[5]\\uaa\n 1: XAaY\n    XaaY\\=replace=[1]\\u$0\nFailed: error -48: no more memory\n    XaaY\\=replace=[2]\\u$0\nFailed: error -48: no more memory\n    XaaY\\=replace=[3]\\u$0\nFailed: error -48: no more memory\n    XaaY\\=replace=[4]\\u$0\nFailed: error -48: no more memory\n    XaaY\\=replace=[5]\\u$0\n 1: XAaY\n    XaaY\\=replace=[1]\\lAA\nFailed: error -48: no more memory\n    XaaY\\=replace=[2]\\lAA\nFailed: error -48: no more memory\n    XaaY\\=replace=[3]\\lAA\nFailed: error -48: no more memory\n    XaaY\\=replace=[4]\\lAA\nFailed: error -48: no more memory\n    XaaY\\=replace=[5]\\lAA\n 1: XaAY\n    XAAY\\=replace=[1]\\l$0\nFailed: error -48: no more memory\n    XAAY\\=replace=[2]\\l$0\nFailed: error -48: no more memory\n    XAAY\\=replace=[3]\\l$0\nFailed: error -48: no more memory\n    XAAY\\=replace=[4]\\l$0\nFailed: error -48: no more memory\n    XAAY\\=replace=[5]\\l$0\n 1: XaAY\n    XaaY\\=replace=[1]\\l\\UAa\nFailed: error -48: no more memory\n    XaaY\\=replace=[2]\\l\\UAa\nFailed: error -48: no more memory\n    XaaY\\=replace=[3]\\l\\UAa\nFailed: error -48: no more memory\n    XaaY\\=replace=[4]\\l\\UAa\nFailed: error -48: no more memory\n    XaaY\\=replace=[5]\\l\\UAa\n 1: XaAY\n    XAaY\\=replace=[1]\\l\\U$0\nFailed: error -48: no more memory\n    XAaY\\=replace=[2]\\l\\U$0\nFailed: error -48: no more memory\n    XAaY\\=replace=[3]\\l\\U$0\nFailed: error -48: no more memory\n    XAaY\\=replace=[4]\\l\\U$0\nFailed: error -48: no more memory\n    XAaY\\=replace=[5]\\l\\U$0\n 1: XaAY\n    XaaY\\=replace=[1]\\u\\LaA\nFailed: error -48: no more memory\n    XaaY\\=replace=[2]\\u\\LaA\nFailed: error -48: no more memory\n    XaaY\\=replace=[3]\\u\\LaA\nFailed: error -48: no more memory\n    XaaY\\=replace=[4]\\u\\LaA\nFailed: error -48: no more memory\n    XaaY\\=replace=[5]\\u\\LaA\n 1: XAaY\n    XaAY\\=replace=[1]\\u\\L$0\nFailed: error -48: no more memory\n    XaAY\\=replace=[2]\\u\\L$0\nFailed: error -48: no more memory\n    XaAY\\=replace=[3]\\u\\L$0\nFailed: error -48: no more memory\n    XaAY\\=replace=[4]\\u\\L$0\nFailed: error -48: no more memory\n    XaAY\\=replace=[5]\\u\\L$0\n 1: XAaY\n\n/aa/i,substitute_extended,substitute_overflow_length\n    XaaY\\=replace=[1]\\uaa\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[2]\\uaa\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[3]\\uaa\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[4]\\uaa\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[5]\\uaa\n 1: XAaY\n    XaaY\\=replace=[1]\\u$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[2]\\u$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[3]\\u$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[4]\\u$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[5]\\u$0\n 1: XAaY\n    XaaY\\=replace=[1]\\lAA\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[2]\\lAA\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[3]\\lAA\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[4]\\lAA\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[5]\\lAA\n 1: XaAY\n    XAAY\\=replace=[1]\\l$0\nFailed: error -48: no more memory: 5 code units are needed\n    XAAY\\=replace=[2]\\l$0\nFailed: error -48: no more memory: 5 code units are needed\n    XAAY\\=replace=[3]\\l$0\nFailed: error -48: no more memory: 5 code units are needed\n    XAAY\\=replace=[4]\\l$0\nFailed: error -48: no more memory: 5 code units are needed\n    XAAY\\=replace=[5]\\l$0\n 1: XaAY\n    XaaY\\=replace=[1]\\l\\UAa\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[2]\\l\\UAa\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[3]\\l\\UAa\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[4]\\l\\UAa\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[5]\\l\\UAa\n 1: XaAY\n    XAaY\\=replace=[1]\\l\\U$0\nFailed: error -48: no more memory: 5 code units are needed\n    XAaY\\=replace=[2]\\l\\U$0\nFailed: error -48: no more memory: 5 code units are needed\n    XAaY\\=replace=[3]\\l\\U$0\nFailed: error -48: no more memory: 5 code units are needed\n    XAaY\\=replace=[4]\\l\\U$0\nFailed: error -48: no more memory: 5 code units are needed\n    XAaY\\=replace=[5]\\l\\U$0\n 1: XaAY\n    XaaY\\=replace=[1]\\u\\LaA\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[2]\\u\\LaA\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[3]\\u\\LaA\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[4]\\u\\LaA\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[5]\\u\\LaA\n 1: XAaY\n    XaAY\\=replace=[1]\\u\\L$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaAY\\=replace=[2]\\u\\L$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaAY\\=replace=[3]\\u\\L$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaAY\\=replace=[4]\\u\\L$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaAY\\=replace=[5]\\u\\L$0\n 1: XAaY\n\n/aa/i,substitute_extended,substitute_case_callout\n    XaaY\\=replace=\\Uaa\\uaa\\LBB\\lBB\\U\\lBB\\L\\uaa\\u\\LaaB\\l\\UBBa\n 1: XBBBaaaaBaBBaBaaaBBY\n    XaaY\\=replace=[1]\\uaa\nFailed: error -48: no more memory\n    XaaY\\=replace=[2]\\uaa\nFailed: error -48: no more memory\n    XaaY\\=replace=[3]\\uaa\nFailed: error -48: no more memory\n    XaaY\\=replace=[4]\\uaa\nFailed: error -48: no more memory\n    XaaY\\=replace=[5]\\uaa\n 1: XBaY\n    XaaY\\=replace=[1]\\u$0\nFailed: error -48: no more memory\n    XaaY\\=replace=[2]\\u$0\nFailed: error -48: no more memory\n    XaaY\\=replace=[3]\\u$0\nFailed: error -48: no more memory\n    XaaY\\=replace=[4]\\u$0\nFailed: error -48: no more memory\n    XaaY\\=replace=[5]\\u$0\n 1: XBaY\n    XaaY\\=replace=[1]\\lBB\nFailed: error -48: no more memory\n    XaaY\\=replace=[2]\\lBB\nFailed: error -48: no more memory\n    XaaY\\=replace=[3]\\lBB\nFailed: error -48: no more memory\n    XaaY\\=replace=[4]\\lBB\nFailed: error -48: no more memory\n    XaaY\\=replace=[5]\\lBB\n 1: XaBY\n    XBBY\\=replace=[1]\\l$0\nFailed: error -48: no more memory\n    XBBY\\=replace=[2]\\l$0\nFailed: error -48: no more memory\n    XBBY\\=replace=[3]\\l$0\nFailed: error -48: no more memory\n    XBBY\\=replace=[4]\\l$0\nFailed: error -48: no more memory\n    XBBY\\=replace=[5]\\l$0\n 0: XBBY\n    XaaY\\=replace=[1]\\l\\UBa\nFailed: error -48: no more memory\n    XaaY\\=replace=[2]\\l\\UBa\nFailed: error -48: no more memory\n    XaaY\\=replace=[3]\\l\\UBa\nFailed: error -48: no more memory\n    XaaY\\=replace=[4]\\l\\UBa\nFailed: error -48: no more memory\n    XaaY\\=replace=[5]\\l\\UBa\n 1: XaBY\n    XBaY\\=replace=[1]\\l\\U$0\nFailed: error -48: no more memory\n    XBaY\\=replace=[2]\\l\\U$0\nFailed: error -48: no more memory\n    XBaY\\=replace=[3]\\l\\U$0\nFailed: error -48: no more memory\n    XBaY\\=replace=[4]\\l\\U$0\nFailed: error -48: no more memory\n    XBaY\\=replace=[5]\\l\\U$0\n 0: XBaY\n    XaaY\\=replace=[1]\\u\\LaB\nFailed: error -48: no more memory\n    XaaY\\=replace=[2]\\u\\LaB\nFailed: error -48: no more memory\n    XaaY\\=replace=[3]\\u\\LaB\nFailed: error -48: no more memory\n    XaaY\\=replace=[4]\\u\\LaB\nFailed: error -48: no more memory\n    XaaY\\=replace=[5]\\u\\LaB\n 1: XBaY\n    XaBY\\=replace=[1]\\u\\L$0\nFailed: error -48: no more memory\n    XaBY\\=replace=[2]\\u\\L$0\nFailed: error -48: no more memory\n    XaBY\\=replace=[3]\\u\\L$0\nFailed: error -48: no more memory\n    XaBY\\=replace=[4]\\u\\L$0\nFailed: error -48: no more memory\n    XaBY\\=replace=[5]\\u\\L$0\n 0: XaBY\n\n/aa/i,substitute_extended,substitute_case_callout,substitute_overflow_length\n    XaaY\\=replace=[1]\\uaa\nFailed: error -48: no more memory: 15 code units are needed\n    XaaY\\=replace=[2]\\uaa\nFailed: error -48: no more memory: 15 code units are needed\n    XaaY\\=replace=[3]\\uaa\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[4]\\uaa\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[5]\\uaa\n 1: XBaY\n    XaaY\\=replace=[1]\\u$0\nFailed: error -48: no more memory: 15 code units are needed\n    XaaY\\=replace=[2]\\u$0\nFailed: error -48: no more memory: 15 code units are needed\n    XaaY\\=replace=[3]\\u$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[4]\\u$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[5]\\u$0\n 1: XBaY\n    XaaY\\=replace=[1]\\lBB\nFailed: error -48: no more memory: 15 code units are needed\n    XaaY\\=replace=[2]\\lBB\nFailed: error -48: no more memory: 15 code units are needed\n    XaaY\\=replace=[3]\\lBB\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[4]\\lBB\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[5]\\lBB\n 1: XaBY\n    XBBY\\=replace=[1]\\l$0\nFailed: error -48: no more memory: 5 code units are needed\n    XBBY\\=replace=[2]\\l$0\nFailed: error -48: no more memory: 5 code units are needed\n    XBBY\\=replace=[3]\\l$0\nFailed: error -48: no more memory: 5 code units are needed\n    XBBY\\=replace=[4]\\l$0\nFailed: error -48: no more memory: 5 code units are needed\n    XBBY\\=replace=[5]\\l$0\n 0: XBBY\n    XaaY\\=replace=[1]\\l\\UBa\nFailed: error -48: no more memory: 15 code units are needed\n    XaaY\\=replace=[2]\\l\\UBa\nFailed: error -48: no more memory: 15 code units are needed\n    XaaY\\=replace=[3]\\l\\UBa\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[4]\\l\\UBa\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[5]\\l\\UBa\n 1: XaBY\n    XBaY\\=replace=[1]\\l\\U$0\nFailed: error -48: no more memory: 5 code units are needed\n    XBaY\\=replace=[2]\\l\\U$0\nFailed: error -48: no more memory: 5 code units are needed\n    XBaY\\=replace=[3]\\l\\U$0\nFailed: error -48: no more memory: 5 code units are needed\n    XBaY\\=replace=[4]\\l\\U$0\nFailed: error -48: no more memory: 5 code units are needed\n    XBaY\\=replace=[5]\\l\\U$0\n 0: XBaY\n    XaaY\\=replace=[1]\\u\\LaB\nFailed: error -48: no more memory: 15 code units are needed\n    XaaY\\=replace=[2]\\u\\LaB\nFailed: error -48: no more memory: 15 code units are needed\n    XaaY\\=replace=[3]\\u\\LaB\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[4]\\u\\LaB\nFailed: error -48: no more memory: 5 code units are needed\n    XaaY\\=replace=[5]\\u\\LaB\n 1: XBaY\n    XaBY\\=replace=[1]\\u\\L$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaBY\\=replace=[2]\\u\\L$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaBY\\=replace=[3]\\u\\L$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaBY\\=replace=[4]\\u\\L$0\nFailed: error -48: no more memory: 5 code units are needed\n    XaBY\\=replace=[5]\\u\\L$0\n 0: XaBY\n\n/aa/substitute_extended,substitute_case_callout\n    XaaY\\=replace=\\l\\U!a\nFailed: error -69: error performing replacement case transformation\n    XaaY\\=replace=\\l\\Ua!\nFailed: error -69: error performing replacement case transformation\n    XaaY\\=replace=\\ufa\n 1: XSSaY\n    XaaY\\=replace=[3]\\ufa\nFailed: error -48: no more memory\n    XaaY\\=replace=\\l\\Uaoo\n 1: XaOOOOY\n    XaaY\\=replace=[4]\\l\\Uaoo\nFailed: error -48: no more memory\n    XaaY\\=replace=\\l\\UPa\n 1: XppBY\n    XaaY\\=replace=[3]\\l\\UPa\nFailed: error -48: no more memory\n    XaaY\\=replace=[4]\\l\\UPa\nFailed: error -48: no more memory\n    XaaY\\=replace=\\l\\UPo\n 1: XppOOY\n    XaaY\\=replace=[3]\\l\\UPo\nFailed: error -48: no more memory\n    XaaY\\=replace=[4]\\l\\UPo\nFailed: error -48: no more memory\n    XaaY\\=replace=\\l\\UPpp\n 1: XppPY\n    XaaY\\=replace=[4]\\l\\UPpp\nFailed: error -48: no more memory\n    XaaY\\=replace=[5]\\l\\UPpp\nFailed: error -48: no more memory\n\n#\n# special test-callback case transformation tests\n#\n\n/aa/substitute_extended,substitute_case_callout\n    XaaY\\=replace=\\l!\nFailed: error -69: error performing replacement case transformation\n    XaaY\\=replace=\\ua\\lB\n 1: XBaY\n    XaaY\\=replace=\\LdDZ\\UdDZ\\ud\\uD\\uZ\n 1: XdddZZZDDDY\n    XaaY\\=replace=\\uf\\Uf\\Lf\\Us\\Ls\\uS\\lS\n 1: XSSSSfSsSsY\n    XaaY\\=replace=\\LOO\\LOQ\\UOO\\uo\\lo\n 1: XoOQOOOOoY\n    XaaY\\=replace=\\upq\\upp\\lpp\\Upp\\Lpp\\lP\\uP\n 1: XpqppppPppppPY\n    XaaY\\=replace=\\ll\\ul\\Ul\\LMmNn\\UMmNn\n 1: XlMnMNmmnnMMNNY\n    XaaY\\=replace=\\Uac\\Uaca\\Uak\\Uaka\\Lck\\LBK\\LBKB\\LBK \\UK\n 1: XBKBKBBKBKBckacakaac KY\n    Xaay\\=replace=\\u\\Lqj\\u\\Lij\\u\\LIj\\u\\LiJ\\u\\LIJ\\u\\Liq\\u\\Lij\\Uij\\UiIjJ\\LiIjJ\n 1: XqjIJIJIJIJIqIJIJIIJJiijjy\n    Xaay\\=replace=\\Uaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 1: XBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBy\n\n# --------------\n\n# Tests for recurse with returned captures\n\n# Parse error tests\n\n/(?1/\nFailed: error 114 at offset 3: missing closing parenthesis\n        here: (?1 |<--|\n\n/(?1(/\nFailed: error 217 at offset 4: expected capture group number or name\n        here: (?1( |<--|\n\n/(?R(1/\nFailed: error 114 at offset 5: missing closing parenthesis\n        here: (?R(1 |<--|\n\n/(?R(1,/\nFailed: error 217 at offset 6: expected capture group number or name\n        here: (?R(1, |<--|\n\n/(?R0(1,2!/\nFailed: error 158 at offset 3: (?R (recursive pattern call) must be followed by a closing parenthesis\n        here: (?R |<--| 0(1,2!\n\n/(?1(1,0))()/\nFailed: error 115 at offset 7: reference to non-existent subpattern\n        here: (?1(1,0 |<-->| ))()\n\n/(?1(1,+2))()/\nFailed: error 115 at offset 6: reference to non-existent subpattern\n        here: (?1(1, |<-->| +2))()\n\n/(?1(<name>))/\nFailed: error 115 at offset 3: reference to non-existent subpattern\n        here: (?1 |<-->| (<name>))\n\n# Operation tests\n\n/^(?1(2))\\2(?(DEFINE)(a(.)b(.)c))/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Recurse\n      2 Capture ref\n        \\g{2}\n        Cond\n        Cond false\n        CBra 1\n        a\n        CBra 2\n        Any\n        Ket\n        b\n        CBra 3\n        Any\n        Ket\n        c\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n  axbycx\n 0: axbycx\n 1: <unset>\n 2: x\n\\= Expect no match\n  axby\nNo match\n  axbycy\nNo match\n\n/^((.)(?<id>.))(?1('id'))(.)/B\n------------------------------------------------------------------\n        Bra\n        ^\n        CBra 1\n        CBra 2\n        Any\n        Ket\n        CBra 3\n        Any\n        Ket\n        Ket\n        Recurse\n      3 Capture ref\n        CBra 4\n        Any\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n  abcde\n 0: abcde\n 1: ab\n 2: a\n 3: d\n 4: e\n\n/^(?1(3,2,2,3,2))(?1(3))(?(DEFINE)(a(.)b(.)c))/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Recurse\n      2 Capture ref\n      3 Capture ref\n        Recurse\n      3 Capture ref\n        Cond\n        Cond false\n        CBra 1\n        a\n        CBra 2\n        Any\n        Ket\n        b\n        CBra 3\n        Any\n        Ket\n        c\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n  a1b2cafbgc\n 0: a1b2cafbgc\n 1: <unset>\n 2: 1\n 3: g\n\n/(?1(2))#(?1(3))#(?1(4))#(?(DEFINE)((.)\\2(.)\\3(.)\\4))/\n  aabbcc#ddeeff#gghhii!aabbcc#ddeeff#gghhii#\n 0: aabbcc#ddeeff#gghhii#\n 1: <unset>\n 2: a\n 3: e\n 4: i\n\\= Expect no match\n  aabbcc#ddeeff#gghhii\nNo match\n\n/^(?1(1,2)){2,4}(?(DEFINE)((..)#))xx#/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Recurse\n      1 Capture ref\n      2 Capture ref\n        Recurse\n      1 Capture ref\n      2 Capture ref\n        Brazero\n        Bra\n        Bra\n        Recurse\n      1 Capture ref\n      2 Capture ref\n        Ket\n        Brazero\n        Bra\n        Recurse\n      1 Capture ref\n      2 Capture ref\n        Ket\n        Ket\n        Cond\n        Cond false\n        CBra 1\n        CBra 2\n        Any\n        Any\n        Ket\n        #\n        Ket\n        Ket\n        xx#\n        Ket\n        End\n------------------------------------------------------------------\n  aa#bb#xx#\n 0: aa#bb#xx#\n 1: <unset>\n 2: bb\n  aa#bb#cc#xx#\n 0: aa#bb#cc#xx#\n 1: <unset>\n 2: cc\n  aa#bb#cc#dd#xx#\n 0: aa#bb#cc#dd#xx#\n 1: <unset>\n 2: dd\n\\= Expect no match\n  aa#xx#\nNo match\n  aa#bb#cc#dd#ee#xx#\nNo match\n\n/^(?1(1,2)){2,}+(?(DEFINE)((..)#))!/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Recurse\n      1 Capture ref\n      2 Capture ref\n        Recurse\n      1 Capture ref\n      2 Capture ref\n        Braposzero\n        SBraPos\n        Recurse\n      1 Capture ref\n      2 Capture ref\n        KetRpos\n        Cond\n        Cond false\n        CBra 1\n        CBra 2\n        Any\n        Any\n        Ket\n        #\n        Ket\n        Ket\n        !\n        Ket\n        End\n------------------------------------------------------------------\n  aa#bb#!\n 0: aa#bb#!\n 1: <unset>\n 2: bb\n  aa#bb#cc#dd#ee#!\n 0: aa#bb#cc#dd#ee#!\n 1: <unset>\n 2: ee\n\\= Expect no match\n  aa#!\nNo match\n  aa#bb#cc#dd#ee#\nNo match\n\n/^(?1)(?(DEFINE)(<(?2(3,4))><\\4\\3>)((..)(..)))/\n  <abcd><cdab>\n 0: <abcd><cdab>\n\n/(?1)#(?(DEFINE)(a(.(*ACCEPT).)b))/\n  #axyb#axax#\n 0: ax#\n\n/^(?>(?1(<n>)))!(?(DEFINE)((?<n>..)(?<n>..)))|abcde/dupnames\n  abcd!\n 0: abcd!\n 1: <unset>\n 2: ab\n 3: cd\n  abcde\n 0: abcde\n\n/<(?:[^<>]*?(?:(AB)[^<>]*|)(?:|(?R(1))))+>/\n  <aa<bb>cc<dd>ee>\n 0: <aa<bb>cc<dd>ee>\n  <aa<bb<cc>dd>ee<ff<gg>hh>ii>\n 0: <aa<bb<cc>dd>ee<ff<gg>hh>ii>\n  <aa<bb<cc>dd>ee\n 0: <bb<cc>dd>\n  <aa<bb>cc<dd>AB>\n 0: <aa<bb>cc<dd>AB>\n 1: AB\n  <aa<AB>cc<dd>ee>\n 0: <aa<AB>cc<dd>ee>\n 1: AB\n  <aa<bbAB<cc>dd>ee\n 0: <bbAB<cc>dd>\n 1: AB\n  <aa<bb<ABcc>dd>ee<ff<gg>hh>ii>\n 0: <aa<bb<ABcc>dd>ee<ff<gg>hh>ii>\n 1: AB\n  <aa<bb<cc>dd>ee<ff<gg>hABhABh>ii>\n 0: <aa<bb<cc>dd>ee<ff<gg>hABhABh>ii>\n 1: AB\n\n/(?:(?1(<prefix>))#){4}(?(DEFINE)((?(<prefix>)\\2)(?<prefix>.{3})))$/\n  abc#abcdef#defghi#ghijkl#\n 0: abc#abcdef#defghi#ghijkl#\n 1: <unset>\n 2: jkl\n  abc#abcdef#defghi#ghijkl#jklmno#\n 0: def#defghi#ghijkl#jklmno#\n 1: <unset>\n 2: mno\n  abc#abcdef#defghi#ghijkl#jklmno#mnopqr#\n 0: ghi#ghijkl#jklmno#mnopqr#\n 1: <unset>\n 2: pqr\n\\= Expect no match\n  abc#abcdef#defghi#ghijkl\nNo match\n  abc#abcdef#defghi#ghXjkl#\nNo match\n\n% # Define the routine \"weekendday\" which matches Saturday or Sunday, and\n  # returns the Sat/Sun prefix as \\k<short>.\n  (?(DEFINE)(?<weekendday>(?|(?<short>Sat)urday|(?<short>Sun)day)))\n  # Call the routine. Matches \"Saturday,Sat\" or \"Sunday,Sun\".\n  (?&weekendday(<short>)),\\k<short> %x\n  Saturday,Sat\n 0: Saturday,Sat\n 1: <unset>\n 2: Sat\n  Sunday,Sun\n 0: Sunday,Sun\n 1: <unset>\n 2: Sun\n\\= Expect no match\n  Saturday,Sun\nNo match\n\n/()()()(?2(2,3,2,3,2))/B\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Ket\n        CBra 2\n        Ket\n        CBra 3\n        Ket\n        Recurse\n      2 Capture ref\n      3 Capture ref\n        Ket\n        End\n------------------------------------------------------------------\n  abc\n 0: \n 1: \n 2: \n 3: \n\n# Test each syntax used for recursion\n\n/(?(R)(Sat)urday|(?R(1)),\\1)/\n    Saturday,Sat\n 0: Saturday,Sat\n 1: Sat\n\n/(?(DEFINE)((Sat)urday))(?1(2)),\\2/\n    Saturday,Sat\n 0: Saturday,Sat\n 1: <unset>\n 2: Sat\n\n/(?(DEFINE)((Sat)urday))(?-2(-1)),\\2/\n    Saturday,Sat\n 0: Saturday,Sat\n 1: <unset>\n 2: Sat\n\n/(?+1(+2)),\\2(?(DEFINE)((Sat)urday))/\n    Saturday,Sat\n 0: Saturday,Sat\n 1: <unset>\n 2: Sat\n\n/(?(DEFINE)(?<fn>(?<ret>Sat)urday))(?&fn('ret')),\\k<ret>/\n    Saturday,Sat\n 0: Saturday,Sat\n 1: <unset>\n 2: Sat\n\n/(?(DEFINE)(?<fn>(?<ret>Sat)urday))(?P>fn(<ret>)),\\k<ret>/\n    Saturday,Sat\n 0: Saturday,Sat\n 1: <unset>\n 2: Sat\n\n/(?(DEFINE)(?<fn>(?<ret>Sat)urday))\\g<fn('ret')>,\\k<ret>/\nFailed: error 142 at offset 39: syntax error in subpattern name (missing terminator?)\n        here: ...day))\\g<fn |<--| ('ret')>,\\...\n\n/(?(DEFINE)((Sat)urday))(?1),\\2/\n\\= Expect no match\n    Saturday,Sat\nNo match\n\n/(?(DEFINE)((Sat)urday))(?1()),\\2/\nFailed: error 217 at offset 27: expected capture group number or name\n        here: ...rday))(?1( |<--| )),\\2\n\n/(?(DEFINE)((Sat)(urday)))(?1(2,3)),\\2,\\3/\n    Saturday,Sat,urday\n 0: Saturday,Sat,urday\n 1: <unset>\n 2: Sat\n 3: urday\n\n# --------------\n\n# Test that a memory leak has been fixed\n/x/replace=r,substitute_matched\n    x\\=null_subject\nFailed: error -51: NULL argument passed with non-zero length\n\n# Test that a couple of double frees have been fixed\n/foo/replace=bar,substitute_matched\n    foo\\=copy_matched_subject\n 1: bar\n    foo\\=global,copy_matched_subject\n 1: bar\n\n# Tests for reading matches from NULL subjects\n/(.?)/\n    \\=null_subject,copy=0,copy=1,get=0,get=1,getall\n 0: \n 1: \n 0C  (0)\n 1C  (0)\n 0G  (0)\n 1G  (0)\n 0L \n 1L \n\n# --------------\n# A batch of additional tests of pcre2_substitute error cases\n# --------------\n\n# Some baseline tests of the NULL-handling cases\n\n/\\w+|^$/replace=<$&>,global\n    :::\n 0: :::\n    \\=null_subject\n 1: <>\n    foo\\=zero_terminate\n 1: <foo>\n    \\=null_subject,zero_terminate\nFailed: error -51: NULL argument passed with non-zero length\n    foo|bar\\=offset=1\n 2: f<oo>|<bar>\n\n/\\w+|^$/replace=<$&>,global,substitute_matched\n    :::\n 0: :::\n    \\=null_subject\n 1: <>\n    foo\\=zero_terminate\n 1: <foo>\n    \\=null_subject,zero_terminate\nFailed: error -51: NULL argument passed with non-zero length\n    foo|bar\\=offset=1\n 2: f<oo>|<bar>\n\n/\\w+|^$/replace=<$&>,global,null_substitute_match_data\n    :::\n 0: :::\n    \\=null_subject\n 1: <>\n    foo\\=zero_terminate\n 1: <foo>\n    \\=null_subject,zero_terminate\nFailed: error -51: NULL argument passed with non-zero length\n    foo|bar\\=offset=1\n 2: f<oo>|<bar>\n\n/\\w+|^$/replace=<$&>,global,substitute_matched,null_substitute_match_data\n    :::\nFailed: error -51: NULL argument passed with non-zero length\n    \\=null_subject\nFailed: error -51: NULL argument passed with non-zero length\n    foo\\=zero_terminate\nFailed: error -51: NULL argument passed with non-zero length\n    \\=null_subject,zero_terminate\nFailed: error -51: NULL argument passed with non-zero length\n    foo|bar\\=offset=1\nFailed: error -51: NULL argument passed with non-zero length\n\n# Now some NULL context tests\n\n/\\w+|^$/replace=<$&>,global\n    :::\\=null_context\n 0: :::\n    foo\\=null_context\n 1: <foo>\n    :::\\=null_context,null_substitute_match_data\n 0: :::\n    foo\\=null_context,null_substitute_match_data\n 1: <foo>\n    :::\\=null_context,substitute_matched\n 0: :::\n    foo\\=null_context,substitute_matched\n 1: <foo>\n    :::\\=null_context,null_substitute_match_data,substitute_matched\nFailed: error -51: NULL argument passed with non-zero length\n    foo\\=null_context,null_substitute_match_data,substitute_matched\nFailed: error -51: NULL argument passed with non-zero length\n\n# Failed matches: no-match; partial; other failure (callout-triggered)\n\n/abc/replace=yy\n    zABCz\n 0: zABCz\n    zABCz\\=substitute_matched\n 0: zABCz\n\n/abc/\n    ab\\=replace=yy,partial_hard\nFailed: error -34: bad option value\n    ab\\=replace=yy,partial_hard,substitute_matched\nFailed: error -34: bad option value\n\n/(?C1)abc/replace=yy\n    zabcz\\=callout_error=1\n--->zabcz\n  1  ^        a\nFailed: error -37: callout error code\n    zabcz\\=callout_error=1,substitute_matched\n--->zabcz\n  1  ^        a\nFailed: error -37: callout error code\n\n# Exercise PCRE2_ERROR_DIFFSUBSSUBJECT branches\n\n# Changing the length is always an error\n# (using PCRE2_ZERO_TERMINATED but with different length strings also counts)\n# Using PCRE2_ZERO_TERMINATED vs a concrete length doesn't count as changing the length\n/\\w+|^$/replace=<$&>,global,substitute_matched\n    foo\\=substitute_subject=foo\n 1: <foo>\n    foo\\=substitute_subject=foo,copy_matched_subject\n 1: <foo>\n    foo\\=substitute_subject=foo,zero_terminate\n 1: <foo>\n    foo\\=substitute_subject=f\nFailed: error -72: substitute subject differs from prior match call\n    foo\\=substitute_subject=f,copy_matched_subject\nFailed: error -72: substitute subject differs from prior match call\n    foo\\=substitute_subject=f,zero_terminate\nFailed: error -72: substitute subject differs from prior match call\n    \\\n 1: <>\n    \\=copy_matched_subject\n 1: <>\n    \\=zero_terminate\n 1: <>\n    \\=null_subject\n 1: <>\n    \\=null_subject,copy_matched_subject\n 1: <>\n\n# Keeping the length the same, the offset the same, and the pointer the same\n# Is ok, even if the contents DIFFER\n/\\w+|^$/replace=<$&>,global,substitute_matched\n    foo|bar\\=offset=1,substitute_subject=F|OOBAR\n 2: F<|O><OBAR>\n    foo|bar\\=offset=1,substitute_subject=F|OOBAR,zero_terminate\n 2: F<|O><OBAR>\n\n# With copy_matched_subject however we are able to detect the mismatch\n/\\w+|^$/replace=<$&>,global,substitute_matched\n    foo|bar\\=offset=1,substitute_subject=foo|bar,copy_matched_subject\n 2: f<oo>|<bar>\n    foo|bar\\=offset=1,substitute_subject=F|OOBAR,copy_matched_subject\nFailed: error -72: substitute subject differs from prior match call\n    foo|bar\\=offset=1,substitute_subject=F|OOBAR,copy_matched_subject,zero_terminate\nFailed: error -72: substitute subject differs from prior match call\n\n# --------------\n# Some more tests for a substitution regression\n# --------------\n\n/foo(?<Bar>BAR)?/substitute_extended,replace=X${Bar:+\\:\\:text}Y\n    foo\n 1: XY\n    fooBAR\n 1: X::textY\n\n# --------------\n# Tests for substitution with partial\n# --------------\n\n/(a)b+/\n\\= Expect to fail with \"bad option\"\n    ab\\=ph,replace=FOO\nFailed: error -34: bad option value\n\\= Expect to fail with \"partial match\"\n    ab\\=ph,substitute_replacement_only,replace=FOO\nFailed: error -2: partial match\n\\= Expect success\n    abc\\=ph,substitute_replacement_only,replace=FOO\n 1: FOO\n    zabc\\=ph,substitute_replacement_only,replace=>$&|$1|$`<\n 1: >ab|a|z<\n\\= Expect to fail with PCRE2_ERROR_PARTIALSUBS\n    abc\\=ph,substitute_replacement_only,replace=>$_<\nFailed: error -76 at offset 3 in replacement: replacement $' or $_ not supported with partial match\n        here: >$_ |<--| <\n    abc\\=ph,substitute_replacement_only,replace=>$'<\nFailed: error -76 at offset 3 in replacement: replacement $' or $_ not supported with partial match\n        here: >$' |<--| <\n\n/(a)b+/\n\\= Expect to fail with \"bad option\"\n    ab\\=ps,replace=FOO\nFailed: error -34: bad option value\n\\= Expect to fail with \"partial match\"\n    a\\=ps,substitute_replacement_only,replace=FOO\nFailed: error -2: partial match\n\\= Expect success\n    ab\\=ps,substitute_replacement_only,replace=FOO\n 1: FOO\n    abc\\=ps,substitute_replacement_only,replace=FOO\n 1: FOO\n    zabc\\=ps,substitute_replacement_only,replace=>$&|$1|$`<\n 1: >ab|a|z<\n\\= Expect to fail with PCRE2_ERROR_PARTIALSUBS\n    abc\\=ps,substitute_replacement_only,replace=>$_<\nFailed: error -76 at offset 3 in replacement: replacement $' or $_ not supported with partial match\n        here: >$_ |<--| <\n    abc\\=ps,substitute_replacement_only,replace=>$'<\nFailed: error -76 at offset 3 in replacement: replacement $' or $_ not supported with partial match\n        here: >$' |<--| <\n\n# End of testinput2\nError -80: PCRE2_ERROR_BADDATA (unknown error number)\nError -62: bad serialized data\nError -2: partial match\nError -1: no match\nError 0: PCRE2_ERROR_BADDATA (unknown error number)\nError 100: no error\nError 101: \\ at end of pattern\nError 191: PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES is not allowed in UTF-16 mode\nError 300: PCRE2_ERROR_BADDATA (unknown error number)\n"
  },
  {
    "path": "testdata/testoutput20",
    "content": "# This set of tests exercises the serialization/deserialization and code copy\n# functions in the library. It does not use UTF or JIT.\n\n#forbid_utf\n\n# Compile several patterns, push them onto the stack, and then write them\n# all to a file.\n\n#pattern push\n\n/(?<NAME>(?&NAME_PAT))\\s+(?<ADDR>(?&ADDRESS_PAT))\n  (?(DEFINE)\n  (?<NAME_PAT>[a-z]+)\n  (?<ADDRESS_PAT>\\d+)\n  )/x\n/^(?:((.)(?1)\\2|)|((.)(?3)\\4|.))$/i\n\n#save testsaved1\n\n# Do it again for some more patterns.\n\n/(*MARK:A)(*SKIP:B)(C|X)/mark\n** Ignored when compiled pattern is stacked with 'push': mark\n/(?:(?<n>foo)|(?<n>bar))\\k<n>/dupnames\n\n#save testsaved2\n#pattern -push\n\n# Reload the patterns, then pop them one by one and check them.\n\n#load testsaved1\n#load testsaved2\n\n#pop info\nCapture group count = 2\nMax back reference = 2\nNamed capture groups:\n  n   1\n  n   2\nOptions: dupnames\nStarting code units: b f\nSubject length lower bound = 6\n    foofoo\n 0: foofoo\n 1: foo\n    barbar\n 0: barbar\n 1: <unset>\n 2: bar\n\n#pop mark\n    C\n 0: C\n 1: C\nMK: A\n\\= Expect no match\n    D\nNo match, mark = A\n\n#pop\n    AmanaplanacanalPanama\n 0: AmanaplanacanalPanama\n 1: <unset>\n 2: <unset>\n 3: AmanaplanacanalPanama\n 4: A\n\n#pop info\nCapture group count = 4\nNamed capture groups:\n  ADDR          2\n  ADDRESS_PAT   4\n  NAME          1\n  NAME_PAT      3\nOptions: extended\nSubject length lower bound = 3\n    metcalfe 33\n 0: metcalfe 33\n 1: metcalfe\n 2: 33\n\n# Check for an error when different tables are used.\n\n/abc/push,tables=1\n/xyz/push,tables=2\n#save testsaved1\nSerialization failed: error -30: patterns do not all use the same character tables\n\n#pop\n    xyz\n 0: xyz\n\n#pop\n    abc\n 0: abc\n\n#pop should give an error\n** Can't pop off an empty stack\n    pqr\n\n/abcd/pushcopy\n    abcd\n 0: abcd\n\n#pop\n    abcd\n 0: abcd\n\n#pop should give an error\n** Can't pop off an empty stack\n\n/abcd/push\n#popcopy\n    abcd\n 0: abcd\n\n#pop\n    abcd\n 0: abcd\n\n/abcd/push\n#save testsaved1\n#pop should give an error\n** Can't pop off an empty stack\n\n#load testsaved1\n#popcopy\n    abcd\n 0: abcd\n\n#pop\n    abcd\n 0: abcd\n\n#pop should give an error\n** Can't pop off an empty stack\n\n/abcd/pushtablescopy\n    abcd\n 0: abcd\n\n#popcopy\n    abcd\n 0: abcd\n\n#pop\n    abcd\n 0: abcd\n\n# Must only specify one of these\n\n//push,pushcopy\n** Not allowed together: push pushcopy\n\n//push,pushtablescopy\n** Not allowed together: push pushtablescopy\n\n//pushcopy,pushtablescopy\n** Not allowed together: pushcopy pushtablescopy\n\n# End of testinput20\n"
  },
  {
    "path": "testdata/testoutput21",
    "content": "# These are tests of \\C that do not involve UTF. They are not run when \\C is\n# disabled by compiling with --enable-never-backslash-C.\n\n/\\C+\\D \\C+\\d \\C+\\S \\C+\\s \\C+\\W \\C+\\w \\C+. \\C+\\R \\C+\\H \\C+\\h \\C+\\V \\C+\\v \\C+\\Z \\C+\\z \\C+$/Bx\n------------------------------------------------------------------\n        Bra\n        AllAny+\n        \\D\n        AllAny+\n        \\d\n        AllAny+\n        \\S\n        AllAny+\n        \\s\n        AllAny+\n        \\W\n        AllAny+\n        \\w\n        AllAny+\n        Any\n        AllAny+\n        \\R\n        AllAny+\n        \\H\n        AllAny+\n        \\h\n        AllAny+\n        \\V\n        AllAny+\n        \\v\n        AllAny+\n        \\Z\n        AllAny++\n        \\z\n        AllAny+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\D+\\C \\d+\\C \\S+\\C \\s+\\C \\W+\\C \\w+\\C .+\\C \\R+\\C \\H+\\C \\h+\\C \\V+\\C \\v+\\C a+\\C \\n+\\C \\C+\\C/Bx\n------------------------------------------------------------------\n        Bra\n        \\D+\n        AllAny\n        \\d+\n        AllAny\n        \\S+\n        AllAny\n        \\s+\n        AllAny\n        \\W+\n        AllAny\n        \\w+\n        AllAny\n        Any+\n        AllAny\n        \\R+\n        AllAny\n        \\H+\n        AllAny\n        \\h+\n        AllAny\n        \\V+\n        AllAny\n        \\v+\n        AllAny\n        a+\n        AllAny\n        \\x0a+\n        AllAny\n        AllAny+\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n\n/ab\\Cde/never_backslash_c\nFailed: error 183 at offset 4: using \\C is disabled by the application\n        here: ab\\C |<--| de\n\n/ab\\Cde/info\nCapture group count = 0\nContains \\C\nFirst code unit = 'a'\nLast code unit = 'e'\nSubject length lower bound = 5\n    abXde\n 0: abXde\n    \n/(?<=ab\\Cde)X/\n    abZdeX\n 0: X\n\n/[\\C]/\nFailed: error 107 at offset 3: escape sequence is invalid in character class\n        here: [\\C |<--| ]\n\n# End of testinput21\n"
  },
  {
    "path": "testdata/testoutput22-16",
    "content": "# Tests of \\C when Unicode support is available. Note that \\C is not supported\n# for DFA matching in UTF mode, so this test is not run with -dfa. The output\n# of this test is different in 8-, 16-, and 32-bit modes. Some tests may match\n# in some widths and not in others.\n\n/ab\\Cde/utf,info\nCapture group count = 0\nContains \\C\nOptions: utf\nFirst code unit = 'a'\nLast code unit = 'e'\nSubject length lower bound = 2\n    abXde\n 0: abXde\n\n# This should produce an error diagnostic (\\C in UTF lookbehind) in 8-bit and\n# 16-bit modes, but not in 32-bit mode.\n\n/(?<=ab\\Cde)X/utf\nFailed: error 136 at offset 0: \\C is not allowed in a lookbehind assertion in UTF-16 mode\n        here: |-->| (?<=ab\\Cde...\n    ab!deXYZ\n\n# Autopossessification tests\n\n/\\C+\\X \\X+\\C/Bx\n------------------------------------------------------------------\n        Bra\n        AllAny+\n        extuni\n        extuni+\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\C+\\X \\X+\\C/Bx,utf\n------------------------------------------------------------------\n        Bra\n        Anybyte+\n        extuni\n        extuni+\n        Anybyte\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\C\\X*TӅ;\r\n{0,6}\\v+\rF\n/utf\n\\= Expect no match\n    Ӆ\\x0a\nNo match\n\n/\\C(\\W?ſ)'?{{/utf\n\\= Expect no match\n    \\\\C(\\\\W?ſ)'?{{\nNo match\n\n/X(\\C{3})/utf\n    X\\x{1234}\nNo match\n    X\\x{11234}Y\n 0: X\\x{11234}Y\n 1: \\x{11234}Y\n    X\\x{11234}YZ\n 0: X\\x{11234}Y\n 1: \\x{11234}Y\n\n/X(\\C{4})/utf\n    X\\x{1234}YZ\nNo match\n    X\\x{11234}YZ\n 0: X\\x{11234}YZ\n 1: \\x{11234}YZ\n    X\\x{11234}YZW\n 0: X\\x{11234}YZ\n 1: \\x{11234}YZ\n\n/X\\C*/utf\n    XYZabcdce\n 0: XYZabcdce\n\n/X\\C*?/utf\n    XYZabcde\n 0: X\n\n/X\\C{3,5}/utf\n    Xabcdefg\n 0: Xabcde\n    X\\x{1234}\nNo match\n    X\\x{1234}YZ\n 0: X\\x{1234}YZ\n    X\\x{1234}\\x{512}\nNo match\n    X\\x{1234}\\x{512}YZ\n 0: X\\x{1234}\\x{512}YZ\n    X\\x{11234}Y\n 0: X\\x{11234}Y\n    X\\x{11234}YZ\n 0: X\\x{11234}YZ\n    X\\x{11234}\\x{512}\n 0: X\\x{11234}\\x{512}\n    X\\x{11234}\\x{512}YZ\n 0: X\\x{11234}\\x{512}YZ\n    X\\x{11234}\\x{512}\\x{11234}Z\n 0: X\\x{11234}\\x{512}\\x{11234}\n\n/X\\C{3,5}?/utf\n    Xabcdefg\n 0: Xabc\n    X\\x{1234}\nNo match\n    X\\x{1234}YZ\n 0: X\\x{1234}YZ\n    X\\x{1234}\\x{512}\nNo match\n    X\\x{11234}Y\n 0: X\\x{11234}Y\n    X\\x{11234}YZ\n 0: X\\x{11234}Y\n    X\\x{11234}\\x{512}YZ\n 0: X\\x{11234}\\x{512}\n    X\\x{11234}\nNo match\n\n/a\\Cb/utf\n    aXb\n 0: aXb\n    a\\nb\n 0: a\\x{0a}b\n    a\\x{100}b\n 0: a\\x{100}b\n\n/a\\C\\Cb/utf\n    a\\x{100}b\nNo match\n    a\\x{12257}b\n 0: a\\x{12257}b\n    a\\x{12257}\\x{11234}b\nNo match\n\n/ab\\Cde/utf\n    abXde\n 0: abXde\n\n# This one is here not because it's different to Perl, but because the way\n# the captured single code unit is displayed. (In Perl it becomes a character,\n# and you can't tell the difference.)\n\n/X(\\C)(.*)/utf\n    X\\x{1234}\n 0: X\\x{1234}\n 1: \\x{1234}\n 2: \n    X\\nabc\n 0: X\\x{0a}abc\n 1: \\x{0a}\n 2: abc\n\n# This one is here because Perl gives out a grumbly error message (quite\n# correctly, but that messes up comparisons).\n\n/a\\Cb/utf\n\\= Expect no match in 8-bit mode\n    a\\x{100}b\n 0: a\\x{100}b\n\n/^ab\\C/utf,no_start_optimize\n\\= Expect no match - tests \\C at end of subject\n    ab\nNo match\n\n/\\C[^\\v]+\\x80/utf\n    [AΏBŀC]\nNo match\n\n/\\C[^\\d]+\\x80/utf\n    [AΏBŀC]\nNo match\n\n# End of testinput22\n"
  },
  {
    "path": "testdata/testoutput22-32",
    "content": "# Tests of \\C when Unicode support is available. Note that \\C is not supported\n# for DFA matching in UTF mode, so this test is not run with -dfa. The output\n# of this test is different in 8-, 16-, and 32-bit modes. Some tests may match\n# in some widths and not in others.\n\n/ab\\Cde/utf,info\nCapture group count = 0\nContains \\C\nOptions: utf\nFirst code unit = 'a'\nLast code unit = 'e'\nSubject length lower bound = 5\n    abXde\n 0: abXde\n\n# This should produce an error diagnostic (\\C in UTF lookbehind) in 8-bit and\n# 16-bit modes, but not in 32-bit mode.\n\n/(?<=ab\\Cde)X/utf\n    ab!deXYZ\n 0: X\n\n# Autopossessification tests\n\n/\\C+\\X \\X+\\C/Bx\n------------------------------------------------------------------\n        Bra\n        AllAny+\n        extuni\n        extuni+\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\C+\\X \\X+\\C/Bx,utf\n------------------------------------------------------------------\n        Bra\n        AllAny+\n        extuni\n        extuni+\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\C\\X*TӅ;\r\n{0,6}\\v+\rF\n/utf\n\\= Expect no match\n    Ӆ\\x0a\nNo match\n\n/\\C(\\W?ſ)'?{{/utf\n\\= Expect no match\n    \\\\C(\\\\W?ſ)'?{{\nNo match\n\n/X(\\C{3})/utf\n    X\\x{1234}\nNo match\n    X\\x{11234}Y\nNo match\n    X\\x{11234}YZ\n 0: X\\x{11234}YZ\n 1: \\x{11234}YZ\n\n/X(\\C{4})/utf\n    X\\x{1234}YZ\nNo match\n    X\\x{11234}YZ\nNo match\n    X\\x{11234}YZW\n 0: X\\x{11234}YZW\n 1: \\x{11234}YZW\n\n/X\\C*/utf\n    XYZabcdce\n 0: XYZabcdce\n\n/X\\C*?/utf\n    XYZabcde\n 0: X\n\n/X\\C{3,5}/utf\n    Xabcdefg\n 0: Xabcde\n    X\\x{1234}\nNo match\n    X\\x{1234}YZ\n 0: X\\x{1234}YZ\n    X\\x{1234}\\x{512}\nNo match\n    X\\x{1234}\\x{512}YZ\n 0: X\\x{1234}\\x{512}YZ\n    X\\x{11234}Y\nNo match\n    X\\x{11234}YZ\n 0: X\\x{11234}YZ\n    X\\x{11234}\\x{512}\nNo match\n    X\\x{11234}\\x{512}YZ\n 0: X\\x{11234}\\x{512}YZ\n    X\\x{11234}\\x{512}\\x{11234}Z\n 0: X\\x{11234}\\x{512}\\x{11234}Z\n\n/X\\C{3,5}?/utf\n    Xabcdefg\n 0: Xabc\n    X\\x{1234}\nNo match\n    X\\x{1234}YZ\n 0: X\\x{1234}YZ\n    X\\x{1234}\\x{512}\nNo match\n    X\\x{11234}Y\nNo match\n    X\\x{11234}YZ\n 0: X\\x{11234}YZ\n    X\\x{11234}\\x{512}YZ\n 0: X\\x{11234}\\x{512}Y\n    X\\x{11234}\nNo match\n\n/a\\Cb/utf\n    aXb\n 0: aXb\n    a\\nb\n 0: a\\x{0a}b\n    a\\x{100}b\n 0: a\\x{100}b\n\n/a\\C\\Cb/utf\n    a\\x{100}b\nNo match\n    a\\x{12257}b\nNo match\n    a\\x{12257}\\x{11234}b\n 0: a\\x{12257}\\x{11234}b\n\n/ab\\Cde/utf\n    abXde\n 0: abXde\n\n# This one is here not because it's different to Perl, but because the way\n# the captured single code unit is displayed. (In Perl it becomes a character,\n# and you can't tell the difference.)\n\n/X(\\C)(.*)/utf\n    X\\x{1234}\n 0: X\\x{1234}\n 1: \\x{1234}\n 2: \n    X\\nabc\n 0: X\\x{0a}abc\n 1: \\x{0a}\n 2: abc\n\n# This one is here because Perl gives out a grumbly error message (quite\n# correctly, but that messes up comparisons).\n\n/a\\Cb/utf\n\\= Expect no match in 8-bit mode\n    a\\x{100}b\n 0: a\\x{100}b\n\n/^ab\\C/utf,no_start_optimize\n\\= Expect no match - tests \\C at end of subject\n    ab\nNo match\n\n/\\C[^\\v]+\\x80/utf\n    [AΏBŀC]\nNo match\n\n/\\C[^\\d]+\\x80/utf\n    [AΏBŀC]\nNo match\n\n# End of testinput22\n"
  },
  {
    "path": "testdata/testoutput22-8",
    "content": "# Tests of \\C when Unicode support is available. Note that \\C is not supported\n# for DFA matching in UTF mode, so this test is not run with -dfa. The output\n# of this test is different in 8-, 16-, and 32-bit modes. Some tests may match\n# in some widths and not in others.\n\n/ab\\Cde/utf,info\nCapture group count = 0\nContains \\C\nOptions: utf\nFirst code unit = 'a'\nLast code unit = 'e'\nSubject length lower bound = 2\n    abXde\n 0: abXde\n\n# This should produce an error diagnostic (\\C in UTF lookbehind) in 8-bit and\n# 16-bit modes, but not in 32-bit mode.\n\n/(?<=ab\\Cde)X/utf\nFailed: error 136 at offset 0: \\C is not allowed in a lookbehind assertion in UTF-8 mode\n        here: |-->| (?<=ab\\Cde...\n    ab!deXYZ\n\n# Autopossessification tests\n\n/\\C+\\X \\X+\\C/Bx\n------------------------------------------------------------------\n        Bra\n        AllAny+\n        extuni\n        extuni+\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\C+\\X \\X+\\C/Bx,utf\n------------------------------------------------------------------\n        Bra\n        Anybyte+\n        extuni\n        extuni+\n        Anybyte\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\C\\X*TӅ;\r\n{0,6}\\v+\rF\n/utf\n\\= Expect no match\n    Ӆ\\x0a\nNo match\n\n/\\C(\\W?ſ)'?{{/utf\n\\= Expect no match\n    \\\\C(\\\\W?ſ)'?{{\nNo match\n\n/X(\\C{3})/utf\n    X\\x{1234}\n 0: X\\x{1234}\n 1: \\x{1234}\n    X\\x{11234}Y\n 0: X\\x{f0}\\x{91}\\x{88}\n 1: \\x{f0}\\x{91}\\x{88}\n    X\\x{11234}YZ\n 0: X\\x{f0}\\x{91}\\x{88}\n 1: \\x{f0}\\x{91}\\x{88}\n\n/X(\\C{4})/utf\n    X\\x{1234}YZ\n 0: X\\x{1234}Y\n 1: \\x{1234}Y\n    X\\x{11234}YZ\n 0: X\\x{11234}\n 1: \\x{11234}\n    X\\x{11234}YZW\n 0: X\\x{11234}\n 1: \\x{11234}\n\n/X\\C*/utf\n    XYZabcdce\n 0: XYZabcdce\n\n/X\\C*?/utf\n    XYZabcde\n 0: X\n\n/X\\C{3,5}/utf\n    Xabcdefg\n 0: Xabcde\n    X\\x{1234}\n 0: X\\x{1234}\n    X\\x{1234}YZ\n 0: X\\x{1234}YZ\n    X\\x{1234}\\x{512}\n 0: X\\x{1234}\\x{512}\n    X\\x{1234}\\x{512}YZ\n 0: X\\x{1234}\\x{512}\n    X\\x{11234}Y\n 0: X\\x{11234}Y\n    X\\x{11234}YZ\n 0: X\\x{11234}Y\n    X\\x{11234}\\x{512}\n 0: X\\x{11234}\\x{d4}\n    X\\x{11234}\\x{512}YZ\n 0: X\\x{11234}\\x{d4}\n    X\\x{11234}\\x{512}\\x{11234}Z\n 0: X\\x{11234}\\x{d4}\n\n/X\\C{3,5}?/utf\n    Xabcdefg\n 0: Xabc\n    X\\x{1234}\n 0: X\\x{1234}\n    X\\x{1234}YZ\n 0: X\\x{1234}\n    X\\x{1234}\\x{512}\n 0: X\\x{1234}\n    X\\x{11234}Y\n 0: X\\x{f0}\\x{91}\\x{88}\n    X\\x{11234}YZ\n 0: X\\x{f0}\\x{91}\\x{88}\n    X\\x{11234}\\x{512}YZ\n 0: X\\x{f0}\\x{91}\\x{88}\n    X\\x{11234}\n 0: X\\x{f0}\\x{91}\\x{88}\n\n/a\\Cb/utf\n    aXb\n 0: aXb\n    a\\nb\n 0: a\\x{0a}b\n    a\\x{100}b\nNo match\n\n/a\\C\\Cb/utf\n    a\\x{100}b\n 0: a\\x{100}b\n    a\\x{12257}b\nNo match\n    a\\x{12257}\\x{11234}b\nNo match\n\n/ab\\Cde/utf\n    abXde\n 0: abXde\n\n# This one is here not because it's different to Perl, but because the way\n# the captured single code unit is displayed. (In Perl it becomes a character,\n# and you can't tell the difference.)\n\n/X(\\C)(.*)/utf\n    X\\x{1234}\n 0: X\\x{1234}\n 1: \\x{e1}\n 2: \\x{88}\\x{b4}\n    X\\nabc\n 0: X\\x{0a}abc\n 1: \\x{0a}\n 2: abc\n\n# This one is here because Perl gives out a grumbly error message (quite\n# correctly, but that messes up comparisons).\n\n/a\\Cb/utf\n\\= Expect no match in 8-bit mode\n    a\\x{100}b\nNo match\n\n/^ab\\C/utf,no_start_optimize\n\\= Expect no match - tests \\C at end of subject\n    ab\nNo match\n\n/\\C[^\\v]+\\x80/utf\n    [AΏBŀC]\nNo match\n\n/\\C[^\\d]+\\x80/utf\n    [AΏBŀC]\nNo match\n\n# End of testinput22\n"
  },
  {
    "path": "testdata/testoutput23",
    "content": "# This test is run when PCRE2 has been built with --enable-never-backslash-C,\n# which disables the use of \\C. All we can do is check that it gives the \n# correct error message.\n\n/a\\Cb/\nFailed: error 185 at offset 3: using \\C is disabled in this PCRE2 library\n        here: a\\C |<--| b\n\n/a[\\C]b/\nFailed: error 107 at offset 4: escape sequence is invalid in character class\n        here: a[\\C |<--| ]b\n\n# End of testinput23\n"
  },
  {
    "path": "testdata/testoutput24",
    "content": "# This file tests the auxiliary pattern conversion features of the PCRE2\n# library, in non-UTF mode.\n\n#forbid_utf\n#newline_default lf any anycrlf\n\n# -------- Tests of glob conversion --------\n\n# Set the glob separator explicitly so that different OS defaults are not a\n# problem. Then test various errors.\n\n#pattern convert=glob,convert_glob_escape=\\,convert_glob_separator=/\n\n/abc/posix\n** The convert and posix modifiers are mutually exclusive\n\n# Separator must be / \\ or .\n\n/a*b/convert_glob_separator=%\n** Invalid glob separator '%'\n\n# Can't have separator in a class\n\n\"[ab/cd]\"\n(?s)\\A[ab/cd](?<!/)\\z\n\n#if !ebcdic\n\n\"[,-/]\"\n(?s)\\A[,-/](?<!/)\\z\n\n#endif\n\n/[ab/\n** Pattern conversion error at offset 3: missing terminating ] for character class\n\n# Length check\n\n/abc/convert_length=0\n** Pattern conversion error at offset 3: no more memory\n\n/abc/convert_length=1\n** Pattern conversion error at offset 3: no more memory\n\n/abc/convert_length=11\n** Pattern conversion error at offset 3: no more memory\n\n/abc/convert_length=12\n(?s)\\Aabc\\z\n\n# Now some actual tests\n\n/a?b[]xy]*c/\n(?s)\\Aa[^/]b[\\]xy](*COMMIT)[^/]*?c\\z\n    azb]1234c\n 0: azb]1234c\n\n# Tests from the gitwildmatch list, with some additions\n\n/foo/\n(?s)\\Afoo\\z\n    foo\n 0: foo\n/= Expect no match\nNo match\n    bar\nNo match\n\n//\n(?s)\\A\\z\n    \\\n 0: \n\n/???/\n(?s)\\A[^/][^/][^/]\\z\n    foo\n 0: foo\n\\= Expect no match\n    foobar\nNo match\n\n/*/\n(?s)\\A[^/]*+\\z\n    foo\n 0: foo\n    \\\n 0: \n\n/f*/\n(?s)\\Af(*COMMIT)[^/]*+\\z\n    foo\n 0: foo\n    f\n 0: f\n\n/*f/\n(?s)\\A[^/]*?f\\z\n    oof\n 0: oof\n\\= Expect no match\n    foo\nNo match\n\n/*foo*/\n(?s)\\A[^/]*?foo(*COMMIT)[^/]*+\\z\n    foo\n 0: foo\n    food\n 0: food\n    aprilfool\n 0: aprilfool\n\n/*ob*a*r*/\n(?s)\\A[^/]*?ob(*COMMIT)[^/]*?a(*COMMIT)[^/]*?r(*COMMIT)[^/]*+\\z\n    foobar\n 0: foobar\n\n/*ab/\n(?s)\\A[^/]*?ab\\z\n    aaaaaaabababab\n 0: aaaaaaabababab\n\n/foo\\*/\n(?s)\\Afoo\\*\\z\n    foo*\n 0: foo*\n\n/foo\\*bar/\n(?s)\\Afoo\\*bar\\z\n\\= Expect no match\n    foobar\nNo match\n\n/f\\\\oo/\n(?s)\\Af\\\\oo\\z\n    f\\\\oo\n 0: f\\oo\n\n/*[al]?/\n(?s)\\A[^/]*?[al][^/]\\z\n    ball\n 0: ball\n\n/[ten]/\n(?s)\\A[ten]\\z\n\\= Expect no match\n    ten\nNo match\n\n/t[a-g]n/\n(?s)\\At[a-g]n\\z\n    ten\n 0: ten\n\n/a[]]b/\n(?s)\\Aa[\\]]b\\z\n    a]b\n 0: a]b\n\n/a[]a-]b/\n(?s)\\Aa[\\]a\\-]b\\z\n\n/a[]-]b/\n(?s)\\Aa[\\]\\-]b\\z\n    a-b\n 0: a-b\n    a]b\n 0: a]b\n\\= Expect no match\n    aab\nNo match\n\n/a[]a-z]b/\n(?s)\\Aa[\\]a-z]b\\z\n    aab\n 0: aab\n\n/]/\n(?s)\\A\\]\\z\n    ]\n 0: ]\n\n/t[!a-g]n/\n(?s)\\At[^/a-g]n\\z\n    ton\n 0: ton\n\\= Expect no match\n    ten\nNo match\n\n'[[:alpha:]][[:digit:]][[:upper:]]'\n(?s)\\A[[:alpha:]][[:digit:]][[:upper:]]\\z\n    a1B\n 0: a1B\n\n'[[:digit:][:upper:][:space:]]'\n(?s)\\A[[:digit:][:upper:][:space:]]\\z\n    A\n 0: A\n    1\n 0: 1\n    \\ \\=\n 0:  \n\\= Expect no match\n    a\nNo match\n    .\nNo match\n\n'[a-c[:digit:]x-z]'\n(?s)\\A[a-c[:digit:]x-z]\\z\n    5\n 0: 5\n    b\n 0: b\n    y\n 0: y\n\\= Expect no match\n    q\nNo match\n\n# End of gitwildmatch tests\n\n/*.j?g/\n(?s)\\A[^/]*?\\.j[^/]g\\z\n    pic01.jpg\n 0: pic01.jpg\n    .jpg\n 0: .jpg\n    pic02.jxg\n 0: pic02.jxg\n\\= Expect no match\n    pic03.j/g\nNo match\n\n#if !ebcdic\n\n/A[+-0]B/\n(?s)\\AA[+-0](?<!/)B\\z\n    A+B\n 0: A+B\n    A.B\n 0: A.B\n    A0B\n 0: A0B\n\\= Expect no match\n    A/B\nNo match\n\n#endif\n\n/*x?z/\n(?s)\\A[^/]*?x[^/]z\\z\n    abc.xyz\n 0: abc.xyz\n\\= Expect no match\n    .xyz\n 0: .xyz\n\n/?x?z/\n(?s)\\A[^/]x[^/]z\\z\n    axyz\n 0: axyz\n\\= Expect no match\n    .xyz\n 0: .xyz\n\n#if !ebcdic\n\n\"[,-0]x?z\"\n(?s)\\A[,-0](?<!/)x[^/]z\\z\n    ,xyz\n 0: ,xyz\n\\= Expect no match\n    /xyz\nNo match\n    .xyz\n 0: .xyz\n\n#endif\n\n\".x*\"\n(?s)\\A\\.x(*COMMIT)[^/]*+\\z\n    .xabc\n 0: .xabc\n\n#if !ebcdic\n\n/a[--0]z/\n(?s)\\Aa[\\--0](?<!/)z\\z\n    a-z\n 0: a-z\n    a.z\n 0: a.z\n    a0z\n 0: a0z\n\\= Expect no match\n    a/z\nNo match\n    a1z\nNo match\n\n#endif\n\n/<[a-c-d]>/\n(?s)\\A<[a-c\\-d]>\\z\n    <a>\n 0: <a>\n    <b>\n 0: <b>\n    <c>\n 0: <c>\n    <d>\n 0: <d>\n    <->\n 0: <->\n\n/a[[:digit:].]z/\n(?s)\\Aa[[:digit:].]z\\z\n    a1z\n 0: a1z\n    a.z\n 0: a.z\n\\= Expect no match\n    a:z\nNo match\n\n/a[[:digit].]z/\n(?s)\\Aa[\\[:digit]\\.\\]z\\z\n    a[.]z\n 0: a[.]z\n    a:.]z\n 0: a:.]z\n    ad.]z\n 0: ad.]z\n\n/<[[:a[:digit:]b]>/\n(?s)\\A<[\\[:a[:digit:]b]>\\z\n    <[>\n 0: <[>\n    <:>\n 0: <:>\n    <a>\n 0: <a>\n    <9>\n 0: <9>\n    <b>\n 0: <b>\n\\= Expect no match\n    <d>\nNo match\n\n/a*b/convert_glob_separator=\\\n(?s)\\Aa(*COMMIT)[^\\\\]*?b\\z\n\n/a*b/convert_glob_separator=.\n(?s)\\Aa(*COMMIT)[^\\.]*?b\\z\n\n/a*b/convert_glob_separator=/\n(?s)\\Aa(*COMMIT)[^/]*?b\\z\n\n# Non control character checking\n\n/A\\B\\\\C\\D/\n(?s)\\AAB\\\\CD\\z\n\n/\\\\{}\\?\\*+\\[\\]()|.^$/\n(?s)\\A\\\\\\{\\}\\?\\*\\+\\[\\]\\(\\)\\|\\.\\^\\$\\z\n\n/*a*\\/*b*/\n(?s)\\A[^/]*?a(*COMMIT)[^/]*?/(*COMMIT)[^/]*?b(*COMMIT)[^/]*+\\z\n\n/?a?\\/?b?/\n(?s)\\A[^/]a[^/]/[^/]b[^/]\\z\n\n/[a\\\\b\\c][]][-][\\]\\-]/\n(?s)\\A[a\\\\bc][\\]][\\-][\\]\\-]\\z\n\n/[^a\\\\b\\c][!]][!-][^\\]\\-]/\n(?s)\\A[^/a\\\\bc][^/\\]][^/\\-][^/\\]\\-]\\z\n\n/[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:word:][:xdigit:]]/\n(?s)\\A[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:word:][:xdigit:]](?<!/)\\z\n\n\"[/-/]\"\n(?s)\\A[/-/](?<!/)\\z\n\n/[-----]/\n(?s)\\A[\\--\\-\\-\\-]\\z\n\n/[------]/\n(?s)\\A[\\--\\-\\--\\-]\\z\n\n/[!------]/\n(?s)\\A[^/\\--\\-\\--\\-]\\z\n\n/[[:alpha:]-a]/\n(?s)\\A[[:alpha:]\\-a]\\z\n\n/[[:alpha:]][[:punct:]][[:ascii:]]/\n(?s)\\A[[:alpha:]][[:punct:]](?<!/)[[:ascii:]](?<!/)\\z\n\n/[a-[:alpha:]]/\n** Pattern conversion error at offset 4: invalid syntax\n\n/[[:alpha:/\n** Pattern conversion error at offset 9: missing terminating ] for character class\n\n/[[:alpha:]/\n** Pattern conversion error at offset 10: missing terminating ] for character class\n\n/[[:alphaa:]]/\n(?s)\\A[\\[:alphaa:]\\]\\z\n\n/[[:xdigi:]]/\n(?s)\\A[\\[:xdigi:]\\]\\z\n\n/[[:xdigit::]]/\n(?s)\\A[\\[:xdigit::]\\]\\z\n\n/****/\n(?s)\n\n/**\\/abc/\n(?s)(?:\\A|/)abc\\z\n  abc\n 0: abc\n  x/abc\n 0: /abc\n  xabc\nNo match\n\n/abc\\/**/\n(?s)\\Aabc/\n\n/abc\\/**\\/abc/\n(?s)\\Aabc/(*COMMIT)(?:.*?/)??abc\\z\n\n/**\\/*a*b*g*n*t/\n(?s)(?:\\A|/)(?>[^/]*?a)(?>[^/]*?b)(?>[^/]*?g)(?>[^/]*?n)(?>[^/]*?t\\z)\n  abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt\n 0: /abcdefghijklmnop.txt\n\n/**\\/*a*\\/**/\n(?s)(?:\\A|/)(?>[^/]*?a)(?>[^/]*?/)\n  xx/xx/xx/xax/xx/xb\n 0: /xax/\n\n/**\\/*a*/\n(?s)(?:\\A|/)(?>[^/]*?a)(?>[^/]*+\\z)\n  xx/xx/xx/xax\n 0: /xax\n  xx/xx/xx/xax/xx\nNo match\n\n/**\\/*a*\\/**\\/*b*/\n(?s)(?:\\A|/)(?>[^/]*?a)(?>[^/]*?/)(*COMMIT)(?:.*?/)??(?>[^/]*?b)(?>[^/]*+\\z)\n  xx/xx/xx/xax/xx/xb\n 0: /xax/xx/xb\n  xx/xx/xx/xax/xx/x\nNo match\n\n\"**a\"convert=glob\n(?s)a\\z\n  a\n 0: a\n  c/b/a\n 0: a\n  c/b/aaa\n 0: a\n\n\"a**/b\"convert=glob\n(?s)\\Aa(*COMMIT).*?/b\\z\n  a/b\n 0: a/b\n  ab\nNo match\n\n\"a/**b\"convert=glob\n(?s)\\Aa/(*COMMIT).*?b\\z\n  a/b\n 0: a/b\n  ab\nNo match\n\n#pattern convert=glob:glob_no_starstar\n\n/***/\n(?s)\\A[^/]*+\\z\n\n/**a**/\n(?s)\\A[^/]*?a(*COMMIT)[^/]*+\\z\n\n#pattern convert=unset\n#pattern convert=glob:glob_no_wild_separator\n\n/*/\n(?s)\n\n/*a*/\n(?s)a\n\n/**a**/\n(?s)a\n\n/a*b/\n(?s)\\Aa(*COMMIT).*?b\\z\n\n/*a*b*/\n(?s)a(*COMMIT).*?b\n\n/??a??/\n(?s)\\A..a..\\z\n\n#pattern convert=unset\n#pattern convert=glob,convert_glob_escape=0\n\n/a\\b\\cd/\n(?s)\\Aa\\\\b\\\\cd\\z\n\n/**\\/a/\n(?s)\\\\/a\\z\n\n/a`*b/convert_glob_escape=`\n(?s)\\Aa\\*b\\z\n\n/a`*b/convert_glob_escape=0\n(?s)\\Aa`(*COMMIT)[^/]*?b\\z\n\n/a`*b/convert_glob_escape=x\n** Invalid glob escape 'x'\n\n# Tests of null and empty inputs\n\n/a*b/use_length\n(?s)\\Aa(*COMMIT)[^/]*?b\\z\n\n//use_length\n(?s)\\A\\z\n\n# Error\n/a*b/null_pattern\n** Pattern conversion error at offset 0: NULL argument passed with non-zero length\n\n# Error\n//null_pattern\n** Pattern conversion error at offset 0: NULL argument passed with non-zero length\n\n# Error\n/a*b/use_length,null_pattern\n** Pattern conversion error at offset 0: NULL argument passed with non-zero length\n\n# Kind-of error... pattern conversion succeeds, but it converts to a non-empty\n# pattern, and null_pattern applies to the regex parse afterwards too, which\n# fails.\n//use_length,null_pattern\n(?s)\\A\\z\nFailed: error 116 at offset 0: pattern passed as NULL with non-zero length\n\n# -------- Tests of extended POSIX conversion --------\n\n#pattern convert=unset:posix_extended\n\n/<[[:a[:digit:]b]>/\n(*NUL)<[[:a[:digit:]b]>\n    <[>\n 0: <[>\n    <:>\n 0: <:>\n    <a>\n 0: <a>\n    <9>\n 0: <9>\n    <b>\n 0: <b>\n\\= Expect no match\n    <d>\nNo match\n\n/a+\\1b\\\\c|d[ab\\c]/\n(*NUL)a+1b\\\\c|d[ab\\\\c]\n\n/<[]bc]>/\n(*NUL)<[]bc]>\n    <]>\n 0: <]>\n    <b>\n 0: <b>\n    <c>\n 0: <c>\n\n/<[^]bc]>/\n(*NUL)<[^]bc]>\n    <.>\n 0: <.>\n\\= Expect no match\n    <]>\nNo match\n    <b>\nNo match\n\n/(a)\\1b/\n(*NUL)(a)1b\n    a1b\n 0: a1b\n 1: a\n\\= Expect no match\n    aab\nNo match\n\n/(ab)c)d]/\n(*NUL)(ab)c\\)d\\]\n    Xabc)d]Y\n 0: abc)d]\n 1: ab\n\n/a***b/\n(*NUL)a*b\n\n# Tests of empty inputs\n\n/a*b/use_length\n(*NUL)a*b\n\n//use_length\n(*NUL)\n\n# -------- Tests of basic POSIX conversion --------\n\n#pattern convert=unset:posix_basic\n\n/a*b+c\\+[def](ab)\\(cd\\)/\n(*NUL)a*b\\+c\\+[def]\\(ab\\)(cd)\n\n/\\(a\\)\\1b/\n(*NUL)(a)\\1b\n    aab\n 0: aab\n 1: a\n\\= Expect no match\n    a1b\nNo match\n\n/how.to how\\.to/\n(*NUL)how.to how\\.to\n    how\\nto how.to\n 0: how\\x0ato how.to\n\\= Expect no match     \n    how\\x{0}to how.to\nNo match\n\n/^how to \\^how to/\n(*NUL)^how to \\^how to\n\n/^*abc/\n(*NUL)^\\*abc\n\n/*abc/\n(*NUL)\\*abc\n    X*abcY\n 0: *abc\n\n/**abc/\n(*NUL)\\**abc\n    XabcY\n 0: abc\n    X*abcY\n 0: *abc\n    X**abcY\n 0: **abc\n    \n/*ab\\(*cd\\)/ \n(*NUL)\\*ab(\\*cd)\n\n/^b\\(c^d\\)\\(^e^f\\)/\n(*NUL)^b(c\\^d)(^e\\^f)\n\n/a***b/\n(*NUL)a*b\n\n# Tests of empty inputs\n\n/a*b/use_length\n(*NUL)a*b\n\n//use_length\n(*NUL)\n\n# End of testinput24\n"
  },
  {
    "path": "testdata/testoutput25",
    "content": "# This file tests the auxiliary pattern conversion features of the PCRE2 \n# library, in UTF mode.\n\n#newline_default lf any anycrlf\n\n# -------- Tests of glob conversion --------\n\n# Set the glob separator explicitly so that different OS defaults are not a\n# problem. Then test various errors.\n\n#pattern convert=glob,convert_glob_escape=\\,convert_glob_separator=/\n\n# The fact that this one works in 13 bytes in the 8-bit library shows that the\n# output is in UTF-8, though pcre2test shows the character as an escape.\n\n/'>' c4 a3 '<'/hex,utf,convert_length=13\n(?s)\\A>\\x{123}<\\z\n\n# This expansion creates a string that is too long for the input buffer.\n\n/\\[()]{65535}()/expand\n(?s)\\A\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\(\\)\\z\n** Pattern conversion is too long for the buffer\n\n# End of testinput25\n"
  },
  {
    "path": "testdata/testoutput26",
    "content": "# These tests were generated by maint/GenerateTest.py using PCRE2's UCP\n# data, do not edit unless that data has changed and they are reflecting\n# a previous version.\n\n# Unicode Script Extension tests for version 15.0.0\n\n#perltest\n\n# Base script check\n/^\\p{sc=Latin}/utf\n    A\n 0: A\n\n/^\\p{Script=Latn}/utf\n    \\x{1df2a}\n 0: \\x{1df2a}\n\n# Script extension check\n/^\\p{Latin}/utf\n    \\x{363}\n 0: \\x{363}\n\n/^\\p{scx=Latn}/utf\n    \\x{a92e}\n 0: \\x{a92e}\n\n# Script extension only character\n/^\\p{Latin}/utf\n    \\x{363}\n 0: \\x{363}\n\n/^\\p{sc=Latin}/utf\n    \\x{363}\nNo match\n\n# Character not in script\n/^\\p{Latin}/utf\n    \\x{1df2b}\nNo match\n\n# Base script check\n/^\\p{sc=Greek}/utf\n    \\x{370}\n 0: \\x{370}\n\n/^\\p{Script=Grek}/utf\n    \\x{1d245}\n 0: \\x{1d245}\n\n# Script extension check\n/^\\p{Greek}/utf\n    \\x{342}\n 0: \\x{342}\n\n/^\\p{Script_Extensions=Grek}/utf\n    \\x{1dc1}\n 0: \\x{1dc1}\n\n# Script extension only character\n/^\\p{Greek}/utf\n    \\x{342}\n 0: \\x{342}\n\n/^\\p{sc=Greek}/utf\n    \\x{342}\nNo match\n\n# Character not in script\n/^\\p{Greek}/utf\n    \\x{1d246}\nNo match\n\n# Base script check\n/^\\p{sc=Cyrillic}/utf\n    \\x{400}\n 0: \\x{400}\n\n/^\\p{Script=Cyrl}/utf\n    \\x{1e08f}\n 0: \\x{1e08f}\n\n# Script extension check\n/^\\p{Cyrillic}/utf\n    \\x{483}\n 0: \\x{483}\n\n/^\\p{scx=Cyrl}/utf\n    \\x{a66f}\n 0: \\x{a66f}\n\n# Script extension only character\n/^\\p{Cyrillic}/utf\n    \\x{2e43}\n 0: \\x{2e43}\n\n/^\\p{sc=Cyrillic}/utf\n    \\x{2e43}\nNo match\n\n# Character not in script\n/^\\p{Cyrillic}/utf\n    \\x{1e090}\nNo match\n\n# Base script check\n/^\\p{sc=Arabic}/utf\n    \\x{600}\n 0: \\x{600}\n\n/^\\p{Script=Arab}/utf\n    \\x{1eef1}\n 0: \\x{1eef1}\n\n# Script extension check\n/^\\p{Arabic}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{Script_Extensions=Arab}/utf\n    \\x{102fb}\n 0: \\x{102fb}\n\n# Script extension only character\n/^\\p{Arabic}/utf\n    \\x{102e0}\n 0: \\x{102e0}\n\n/^\\p{sc=Arabic}/utf\n    \\x{102e0}\nNo match\n\n# Character not in script\n/^\\p{Arabic}/utf\n    \\x{1eef2}\nNo match\n\n# Base script check\n/^\\p{sc=Syriac}/utf\n    \\x{700}\n 0: \\x{700}\n\n/^\\p{Script=Syrc}/utf\n    \\x{86a}\n 0: \\x{86a}\n\n# Script extension check\n/^\\p{Syriac}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{scx=Syrc}/utf\n    \\x{1dfa}\n 0: \\x{1dfa}\n\n# Script extension only character\n/^\\p{Syriac}/utf\n    \\x{1dfa}\n 0: \\x{1dfa}\n\n/^\\p{sc=Syriac}/utf\n    \\x{1dfa}\nNo match\n\n# Character not in script\n/^\\p{Syriac}/utf\n    \\x{1dfb}\nNo match\n\n# Base script check\n/^\\p{sc=Thaana}/utf\n    \\x{780}\n 0: \\x{780}\n\n/^\\p{Script=Thaa}/utf\n    \\x{7b1}\n 0: \\x{7b1}\n\n# Script extension check\n/^\\p{Thaana}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{Script_Extensions=Thaa}/utf\n    \\x{fdfd}\n 0: \\x{fdfd}\n\n# Script extension only character\n/^\\p{Thaana}/utf\n    \\x{fdf2}\n 0: \\x{fdf2}\n\n/^\\p{sc=Thaana}/utf\n    \\x{fdf2}\nNo match\n\n# Character not in script\n/^\\p{Thaana}/utf\n    \\x{fdfe}\nNo match\n\n# Base script check\n/^\\p{sc=Devanagari}/utf\n    \\x{900}\n 0: \\x{900}\n\n/^\\p{Script=Deva}/utf\n    \\x{11b09}\n 0: \\x{11b09}\n\n# Script extension check\n/^\\p{Devanagari}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Deva}/utf\n    \\x{a8f3}\n 0: \\x{a8f3}\n\n# Script extension only character\n/^\\p{Devanagari}/utf\n    \\x{1cd1}\n 0: \\x{1cd1}\n\n/^\\p{sc=Devanagari}/utf\n    \\x{1cd1}\nNo match\n\n# Character not in script\n/^\\p{Devanagari}/utf\n    \\x{11b0a}\nNo match\n\n# Base script check\n/^\\p{sc=Bengali}/utf\n    \\x{980}\n 0: \\x{980}\n\n/^\\p{Script=Beng}/utf\n    \\x{9fe}\n 0: \\x{9fe}\n\n# Script extension check\n/^\\p{Bengali}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{Script_Extensions=Beng}/utf\n    \\x{a8f1}\n 0: \\x{a8f1}\n\n# Script extension only character\n/^\\p{Bengali}/utf\n    \\x{1cf7}\n 0: \\x{1cf7}\n\n/^\\p{sc=Bengali}/utf\n    \\x{1cf7}\nNo match\n\n# Character not in script\n/^\\p{Bengali}/utf\n    \\x{a8f2}\nNo match\n\n# Base script check\n/^\\p{sc=Gurmukhi}/utf\n    \\x{a01}\n 0: \\x{a01}\n\n/^\\p{Script=Guru}/utf\n    \\x{a76}\n 0: \\x{a76}\n\n# Script extension check\n/^\\p{Gurmukhi}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Guru}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Gurmukhi}/utf\n    \\x{a836}\n 0: \\x{a836}\n\n/^\\p{sc=Gurmukhi}/utf\n    \\x{a836}\nNo match\n\n# Character not in script\n/^\\p{Gurmukhi}/utf\n    \\x{a83a}\nNo match\n\n# Base script check\n/^\\p{sc=Gujarati}/utf\n    \\x{a81}\n 0: \\x{a81}\n\n/^\\p{Script=Gujr}/utf\n    \\x{aff}\n 0: \\x{aff}\n\n# Script extension check\n/^\\p{Gujarati}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{Script_Extensions=Gujr}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Gujarati}/utf\n    \\x{a836}\n 0: \\x{a836}\n\n/^\\p{sc=Gujarati}/utf\n    \\x{a836}\nNo match\n\n# Character not in script\n/^\\p{Gujarati}/utf\n    \\x{a83a}\nNo match\n\n# Base script check\n/^\\p{sc=Oriya}/utf\n    \\x{b01}\n 0: \\x{b01}\n\n/^\\p{Script=Orya}/utf\n    \\x{b77}\n 0: \\x{b77}\n\n# Script extension check\n/^\\p{Oriya}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Orya}/utf\n    \\x{1cf2}\n 0: \\x{1cf2}\n\n# Script extension only character\n/^\\p{Oriya}/utf\n    \\x{1cda}\n 0: \\x{1cda}\n\n/^\\p{sc=Oriya}/utf\n    \\x{1cda}\nNo match\n\n# Character not in script\n/^\\p{Oriya}/utf\n    \\x{1cf3}\nNo match\n\n# Base script check\n/^\\p{sc=Tamil}/utf\n    \\x{b82}\n 0: \\x{b82}\n\n/^\\p{Script=Taml}/utf\n    \\x{11fff}\n 0: \\x{11fff}\n\n# Script extension check\n/^\\p{Tamil}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{Script_Extensions=Taml}/utf\n    \\x{11fd3}\n 0: \\x{11fd3}\n\n# Script extension only character\n/^\\p{Tamil}/utf\n    \\x{a8f3}\n 0: \\x{a8f3}\n\n/^\\p{sc=Tamil}/utf\n    \\x{a8f3}\nNo match\n\n# Character not in script\n/^\\p{Tamil}/utf\n    \\x{12000}\nNo match\n\n# Base script check\n/^\\p{sc=Telugu}/utf\n    \\x{c00}\n 0: \\x{c00}\n\n/^\\p{Script=Telu}/utf\n    \\x{c7f}\n 0: \\x{c7f}\n\n# Script extension check\n/^\\p{Telugu}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Telu}/utf\n    \\x{1cf2}\n 0: \\x{1cf2}\n\n# Script extension only character\n/^\\p{Telugu}/utf\n    \\x{1cda}\n 0: \\x{1cda}\n\n/^\\p{sc=Telugu}/utf\n    \\x{1cda}\nNo match\n\n# Character not in script\n/^\\p{Telugu}/utf\n    \\x{1cf3}\nNo match\n\n# Base script check\n/^\\p{sc=Kannada}/utf\n    \\x{c80}\n 0: \\x{c80}\n\n/^\\p{Script=Knda}/utf\n    \\x{cf3}\n 0: \\x{cf3}\n\n# Script extension check\n/^\\p{Kannada}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{Script_Extensions=Knda}/utf\n    \\x{a835}\n 0: \\x{a835}\n\n# Script extension only character\n/^\\p{Kannada}/utf\n    \\x{1cf4}\n 0: \\x{1cf4}\n\n/^\\p{sc=Kannada}/utf\n    \\x{1cf4}\nNo match\n\n# Character not in script\n/^\\p{Kannada}/utf\n    \\x{a836}\nNo match\n\n# Base script check\n/^\\p{sc=Malayalam}/utf\n    \\x{d00}\n 0: \\x{d00}\n\n/^\\p{Script=Mlym}/utf\n    \\x{d7f}\n 0: \\x{d7f}\n\n# Script extension check\n/^\\p{Malayalam}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Mlym}/utf\n    \\x{a832}\n 0: \\x{a832}\n\n# Script extension only character\n/^\\p{Malayalam}/utf\n    \\x{1cda}\n 0: \\x{1cda}\n\n/^\\p{sc=Malayalam}/utf\n    \\x{1cda}\nNo match\n\n# Character not in script\n/^\\p{Malayalam}/utf\n    \\x{a833}\nNo match\n\n# Base script check\n/^\\p{sc=Sinhala}/utf\n    \\x{d81}\n 0: \\x{d81}\n\n/^\\p{Script=Sinh}/utf\n    \\x{111f4}\n 0: \\x{111f4}\n\n# Script extension check\n/^\\p{Sinhala}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{Script_Extensions=Sinh}/utf\n    \\x{965}\n 0: \\x{965}\n\n# Script extension only character\n/^\\p{Sinhala}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{sc=Sinhala}/utf\n    \\x{964}\nNo match\n\n# Character not in script\n/^\\p{Sinhala}/utf\n    \\x{111f5}\nNo match\n\n# Base script check\n/^\\p{sc=Myanmar}/utf\n    \\x{1000}\n 0: \\x{1000}\n\n/^\\p{Script=Mymr}/utf\n    \\x{aa7f}\n 0: \\x{aa7f}\n\n# Script extension check\n/^\\p{Myanmar}/utf\n    \\x{1040}\n 0: \\x{1040}\n\n/^\\p{scx=Mymr}/utf\n    \\x{a92e}\n 0: \\x{a92e}\n\n# Script extension only character\n/^\\p{Myanmar}/utf\n    \\x{a92e}\n 0: \\x{a92e}\n\n/^\\p{sc=Myanmar}/utf\n    \\x{a92e}\nNo match\n\n# Character not in script\n/^\\p{Myanmar}/utf\n    \\x{aa80}\nNo match\n\n# Base script check\n/^\\p{sc=Georgian}/utf\n    \\x{10a0}\n 0: \\x{10a0}\n\n/^\\p{Script=Geor}/utf\n    \\x{2d2d}\n 0: \\x{2d2d}\n\n# Script extension check\n/^\\p{Georgian}/utf\n    \\x{10fb}\n 0: \\x{10fb}\n\n/^\\p{Script_Extensions=Geor}/utf\n    \\x{10fb}\n 0: \\x{10fb}\n\n# Script extension only character\n/^\\p{Georgian}/utf\n    \\x{10fb}\n 0: \\x{10fb}\n\n/^\\p{sc=Georgian}/utf\n    \\x{10fb}\nNo match\n\n# Character not in script\n/^\\p{Georgian}/utf\n    \\x{2d2e}\nNo match\n\n# Base script check\n/^\\p{sc=Hangul}/utf\n    \\x{1100}\n 0: \\x{1100}\n\n/^\\p{Script=Hang}/utf\n    \\x{ffdc}\n 0: \\x{ffdc}\n\n# Script extension check\n/^\\p{Hangul}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{scx=Hang}/utf\n    \\x{ff65}\n 0: \\x{ff65}\n\n# Script extension only character\n/^\\p{Hangul}/utf\n    \\x{3003}\n 0: \\x{3003}\n\n/^\\p{sc=Hangul}/utf\n    \\x{3003}\nNo match\n\n# Character not in script\n/^\\p{Hangul}/utf\n    \\x{ffdd}\nNo match\n\n# Base script check\n/^\\p{sc=Mongolian}/utf\n    \\x{1800}\n 0: \\x{1800}\n\n/^\\p{Script=Mong}/utf\n    \\x{1166c}\n 0: \\x{1166c}\n\n# Script extension check\n/^\\p{Mongolian}/utf\n    \\x{1802}\n 0: \\x{1802}\n\n/^\\p{Script_Extensions=Mong}/utf\n    \\x{202f}\n 0: \\x{202f}\n\n# Script extension only character\n/^\\p{Mongolian}/utf\n    \\x{202f}\n 0: \\x{202f}\n\n/^\\p{sc=Mongolian}/utf\n    \\x{202f}\nNo match\n\n# Character not in script\n/^\\p{Mongolian}/utf\n    \\x{1166d}\nNo match\n\n# Base script check\n/^\\p{sc=Hiragana}/utf\n    \\x{3041}\n 0: \\x{3041}\n\n/^\\p{Script=Hira}/utf\n    \\x{1f200}\n 0: \\x{1f200}\n\n# Script extension check\n/^\\p{Hiragana}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{scx=Hira}/utf\n    \\x{ff9f}\n 0: \\x{ff9f}\n\n# Script extension only character\n/^\\p{Hiragana}/utf\n    \\x{3031}\n 0: \\x{3031}\n\n/^\\p{sc=Hiragana}/utf\n    \\x{3031}\nNo match\n\n# Character not in script\n/^\\p{Hiragana}/utf\n    \\x{1f201}\nNo match\n\n# Base script check\n/^\\p{sc=Katakana}/utf\n    \\x{30a1}\n 0: \\x{30a1}\n\n/^\\p{Script=Kana}/utf\n    \\x{1b167}\n 0: \\x{1b167}\n\n# Script extension check\n/^\\p{Katakana}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{Script_Extensions=Kana}/utf\n    \\x{ff9f}\n 0: \\x{ff9f}\n\n# Script extension only character\n/^\\p{Katakana}/utf\n    \\x{3031}\n 0: \\x{3031}\n\n/^\\p{sc=Katakana}/utf\n    \\x{3031}\nNo match\n\n# Character not in script\n/^\\p{Katakana}/utf\n    \\x{1b168}\nNo match\n\n# Base script check\n/^\\p{sc=Bopomofo}/utf\n    \\x{2ea}\n 0: \\x{2ea}\n\n/^\\p{Script=Bopo}/utf\n    \\x{31bf}\n 0: \\x{31bf}\n\n# Script extension check\n/^\\p{Bopomofo}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{scx=Bopo}/utf\n    \\x{ff65}\n 0: \\x{ff65}\n\n# Script extension only character\n/^\\p{Bopomofo}/utf\n    \\x{302a}\n 0: \\x{302a}\n\n/^\\p{sc=Bopomofo}/utf\n    \\x{302a}\nNo match\n\n# Character not in script\n/^\\p{Bopomofo}/utf\n    \\x{ff66}\nNo match\n\n# Base script check\n/^\\p{sc=Han}/utf\n    \\x{2e80}\n 0: \\x{2e80}\n\n/^\\p{Script=Hani}/utf\n    \\x{323af}\n 0: \\x{323af}\n\n# Script extension check\n/^\\p{Han}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{Script_Extensions=Hani}/utf\n    \\x{1f251}\n 0: \\x{1f251}\n\n# Script extension only character\n/^\\p{Han}/utf\n    \\x{3006}\n 0: \\x{3006}\n\n/^\\p{sc=Han}/utf\n    \\x{3006}\nNo match\n\n# Character not in script\n/^\\p{Han}/utf\n    \\x{3347a}\nNo match\n\n# Base script check\n/^\\p{sc=Yi}/utf\n    \\x{a000}\n 0: \\x{a000}\n\n/^\\p{Script=Yiii}/utf\n    \\x{a4c6}\n 0: \\x{a4c6}\n\n# Script extension check\n/^\\p{Yi}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{scx=Yiii}/utf\n    \\x{ff65}\n 0: \\x{ff65}\n\n# Script extension only character\n/^\\p{Yi}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{sc=Yi}/utf\n    \\x{3001}\nNo match\n\n# Character not in script\n/^\\p{Yi}/utf\n    \\x{ff66}\nNo match\n\n# Base script check\n/^\\p{sc=Tagalog}/utf\n    \\x{1700}\n 0: \\x{1700}\n\n/^\\p{Script=Tglg}/utf\n    \\x{171f}\n 0: \\x{171f}\n\n# Script extension check\n/^\\p{Tagalog}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{Script_Extensions=Tglg}/utf\n    \\x{1736}\n 0: \\x{1736}\n\n# Script extension only character\n/^\\p{Tagalog}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{sc=Tagalog}/utf\n    \\x{1735}\nNo match\n\n# Character not in script\n/^\\p{Tagalog}/utf\n    \\x{1737}\nNo match\n\n# Base script check\n/^\\p{sc=Hanunoo}/utf\n    \\x{1720}\n 0: \\x{1720}\n\n/^\\p{Script=Hano}/utf\n    \\x{1734}\n 0: \\x{1734}\n\n# Script extension check\n/^\\p{Hanunoo}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{scx=Hano}/utf\n    \\x{1736}\n 0: \\x{1736}\n\n# Script extension only character\n/^\\p{Hanunoo}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{sc=Hanunoo}/utf\n    \\x{1735}\nNo match\n\n# Character not in script\n/^\\p{Hanunoo}/utf\n    \\x{1737}\nNo match\n\n# Base script check\n/^\\p{sc=Buhid}/utf\n    \\x{1740}\n 0: \\x{1740}\n\n/^\\p{Script=Buhd}/utf\n    \\x{1753}\n 0: \\x{1753}\n\n# Script extension check\n/^\\p{Buhid}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{Script_Extensions=Buhd}/utf\n    \\x{1736}\n 0: \\x{1736}\n\n# Script extension only character\n/^\\p{Buhid}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{sc=Buhid}/utf\n    \\x{1735}\nNo match\n\n# Character not in script\n/^\\p{Buhid}/utf\n    \\x{1754}\nNo match\n\n# Base script check\n/^\\p{sc=Tagbanwa}/utf\n    \\x{1760}\n 0: \\x{1760}\n\n/^\\p{Script=Tagb}/utf\n    \\x{1773}\n 0: \\x{1773}\n\n# Script extension check\n/^\\p{Tagbanwa}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{scx=Tagb}/utf\n    \\x{1736}\n 0: \\x{1736}\n\n# Script extension only character\n/^\\p{Tagbanwa}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{sc=Tagbanwa}/utf\n    \\x{1735}\nNo match\n\n# Character not in script\n/^\\p{Tagbanwa}/utf\n    \\x{1774}\nNo match\n\n# Base script check\n/^\\p{sc=Limbu}/utf\n    \\x{1900}\n 0: \\x{1900}\n\n/^\\p{Script=Limb}/utf\n    \\x{194f}\n 0: \\x{194f}\n\n# Script extension check\n/^\\p{Limbu}/utf\n    \\x{965}\n 0: \\x{965}\n\n/^\\p{Script_Extensions=Limb}/utf\n    \\x{965}\n 0: \\x{965}\n\n# Script extension only character\n/^\\p{Limbu}/utf\n    \\x{965}\n 0: \\x{965}\n\n/^\\p{sc=Limbu}/utf\n    \\x{965}\nNo match\n\n# Character not in script\n/^\\p{Limbu}/utf\n    \\x{1950}\nNo match\n\n# Base script check\n/^\\p{sc=Tai_Le}/utf\n    \\x{1950}\n 0: \\x{1950}\n\n/^\\p{Script=Tale}/utf\n    \\x{1974}\n 0: \\x{1974}\n\n# Script extension check\n/^\\p{Tai_Le}/utf\n    \\x{1040}\n 0: \\x{1040}\n\n/^\\p{scx=Tale}/utf\n    \\x{1049}\n 0: \\x{1049}\n\n# Script extension only character\n/^\\p{Tai_Le}/utf\n    \\x{1040}\n 0: \\x{1040}\n\n/^\\p{sc=Tai_Le}/utf\n    \\x{1040}\nNo match\n\n# Character not in script\n/^\\p{Tai_Le}/utf\n    \\x{1975}\nNo match\n\n# Base script check\n/^\\p{sc=Linear_B}/utf\n    \\x{10000}\n 0: \\x{10000}\n\n/^\\p{Script=Linb}/utf\n    \\x{100fa}\n 0: \\x{100fa}\n\n# Script extension check\n/^\\p{Linear_B}/utf\n    \\x{10100}\n 0: \\x{10100}\n\n/^\\p{Script_Extensions=Linb}/utf\n    \\x{1013f}\n 0: \\x{1013f}\n\n# Script extension only character\n/^\\p{Linear_B}/utf\n    \\x{10102}\n 0: \\x{10102}\n\n/^\\p{sc=Linear_B}/utf\n    \\x{10102}\nNo match\n\n# Character not in script\n/^\\p{Linear_B}/utf\n    \\x{10140}\nNo match\n\n# Base script check\n/^\\p{sc=Cypriot}/utf\n    \\x{10800}\n 0: \\x{10800}\n\n/^\\p{Script=Cprt}/utf\n    \\x{1083f}\n 0: \\x{1083f}\n\n# Script extension check\n/^\\p{Cypriot}/utf\n    \\x{10100}\n 0: \\x{10100}\n\n/^\\p{scx=Cprt}/utf\n    \\x{1013f}\n 0: \\x{1013f}\n\n# Script extension only character\n/^\\p{Cypriot}/utf\n    \\x{10102}\n 0: \\x{10102}\n\n/^\\p{sc=Cypriot}/utf\n    \\x{10102}\nNo match\n\n# Character not in script\n/^\\p{Cypriot}/utf\n    \\x{10840}\nNo match\n\n# Base script check\n/^\\p{sc=Buginese}/utf\n    \\x{1a00}\n 0: \\x{1a00}\n\n/^\\p{Script=Bugi}/utf\n    \\x{1a1f}\n 0: \\x{1a1f}\n\n# Script extension check\n/^\\p{Buginese}/utf\n    \\x{a9cf}\n 0: \\x{a9cf}\n\n/^\\p{Script_Extensions=Bugi}/utf\n    \\x{a9cf}\n 0: \\x{a9cf}\n\n# Script extension only character\n/^\\p{Buginese}/utf\n    \\x{a9cf}\n 0: \\x{a9cf}\n\n/^\\p{sc=Buginese}/utf\n    \\x{a9cf}\nNo match\n\n# Character not in script\n/^\\p{Buginese}/utf\n    \\x{a9d0}\nNo match\n\n# Base script check\n/^\\p{sc=Coptic}/utf\n    \\x{3e2}\n 0: \\x{3e2}\n\n/^\\p{Script=Copt}/utf\n    \\x{2cff}\n 0: \\x{2cff}\n\n# Script extension check\n/^\\p{Coptic}/utf\n    \\x{102e0}\n 0: \\x{102e0}\n\n/^\\p{scx=Copt}/utf\n    \\x{102fb}\n 0: \\x{102fb}\n\n# Script extension only character\n/^\\p{Coptic}/utf\n    \\x{102e0}\n 0: \\x{102e0}\n\n/^\\p{sc=Coptic}/utf\n    \\x{102e0}\nNo match\n\n# Character not in script\n/^\\p{Coptic}/utf\n    \\x{102fc}\nNo match\n\n# Base script check\n/^\\p{sc=Glagolitic}/utf\n    \\x{2c00}\n 0: \\x{2c00}\n\n/^\\p{Script=Glag}/utf\n    \\x{1e02a}\n 0: \\x{1e02a}\n\n# Script extension check\n/^\\p{Glagolitic}/utf\n    \\x{484}\n 0: \\x{484}\n\n/^\\p{Script_Extensions=Glag}/utf\n    \\x{a66f}\n 0: \\x{a66f}\n\n# Script extension only character\n/^\\p{Glagolitic}/utf\n    \\x{484}\n 0: \\x{484}\n\n/^\\p{sc=Glagolitic}/utf\n    \\x{484}\nNo match\n\n# Character not in script\n/^\\p{Glagolitic}/utf\n    \\x{1e02b}\nNo match\n\n# Base script check\n/^\\p{sc=Syloti_Nagri}/utf\n    \\x{a800}\n 0: \\x{a800}\n\n/^\\p{Script=Sylo}/utf\n    \\x{a82c}\n 0: \\x{a82c}\n\n# Script extension check\n/^\\p{Syloti_Nagri}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{scx=Sylo}/utf\n    \\x{9ef}\n 0: \\x{9ef}\n\n# Script extension only character\n/^\\p{Syloti_Nagri}/utf\n    \\x{9e6}\n 0: \\x{9e6}\n\n/^\\p{sc=Syloti_Nagri}/utf\n    \\x{9e6}\nNo match\n\n# Character not in script\n/^\\p{Syloti_Nagri}/utf\n    \\x{a82d}\nNo match\n\n# Base script check\n/^\\p{sc=Phags_Pa}/utf\n    \\x{a840}\n 0: \\x{a840}\n\n/^\\p{Script=Phag}/utf\n    \\x{a877}\n 0: \\x{a877}\n\n# Script extension check\n/^\\p{Phags_Pa}/utf\n    \\x{1802}\n 0: \\x{1802}\n\n/^\\p{Script_Extensions=Phag}/utf\n    \\x{1805}\n 0: \\x{1805}\n\n# Script extension only character\n/^\\p{Phags_Pa}/utf\n    \\x{1802}\n 0: \\x{1802}\n\n/^\\p{sc=Phags_Pa}/utf\n    \\x{1802}\nNo match\n\n# Character not in script\n/^\\p{Phags_Pa}/utf\n    \\x{a878}\nNo match\n\n# Base script check\n/^\\p{sc=Nko}/utf\n    \\x{7c0}\n 0: \\x{7c0}\n\n/^\\p{Script=Nkoo}/utf\n    \\x{7ff}\n 0: \\x{7ff}\n\n# Script extension check\n/^\\p{Nko}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{scx=Nkoo}/utf\n    \\x{fd3f}\n 0: \\x{fd3f}\n\n# Script extension only character\n/^\\p{Nko}/utf\n    \\x{fd3e}\n 0: \\x{fd3e}\n\n/^\\p{sc=Nko}/utf\n    \\x{fd3e}\nNo match\n\n# Character not in script\n/^\\p{Nko}/utf\n    \\x{fd40}\nNo match\n\n# Base script check\n/^\\p{sc=Kayah_Li}/utf\n    \\x{a900}\n 0: \\x{a900}\n\n/^\\p{Script=Kali}/utf\n    \\x{a92f}\n 0: \\x{a92f}\n\n# Script extension check\n/^\\p{Kayah_Li}/utf\n    \\x{a92e}\n 0: \\x{a92e}\n\n/^\\p{Script_Extensions=Kali}/utf\n    \\x{a92e}\n 0: \\x{a92e}\n\n# Script extension only character\n/^\\p{Kayah_Li}/utf\n    \\x{a92e}\n 0: \\x{a92e}\n\n/^\\p{sc=Kayah_Li}/utf\n    \\x{a92e}\nNo match\n\n# Character not in script\n/^\\p{Kayah_Li}/utf\n    \\x{a930}\nNo match\n\n# Base script check\n/^\\p{sc=Javanese}/utf\n    \\x{a980}\n 0: \\x{a980}\n\n/^\\p{Script=Java}/utf\n    \\x{a9df}\n 0: \\x{a9df}\n\n# Script extension check\n/^\\p{Javanese}/utf\n    \\x{a9cf}\n 0: \\x{a9cf}\n\n/^\\p{scx=Java}/utf\n    \\x{a9cf}\n 0: \\x{a9cf}\n\n# Script extension only character\n/^\\p{Javanese}/utf\n    \\x{a9cf}\n 0: \\x{a9cf}\n\n/^\\p{sc=Javanese}/utf\n    \\x{a9cf}\nNo match\n\n# Character not in script\n/^\\p{Javanese}/utf\n    \\x{a9e0}\nNo match\n\n# Base script check\n/^\\p{sc=Kaithi}/utf\n    \\x{11080}\n 0: \\x{11080}\n\n/^\\p{Script=Kthi}/utf\n    \\x{110cd}\n 0: \\x{110cd}\n\n# Script extension check\n/^\\p{Kaithi}/utf\n    \\x{966}\n 0: \\x{966}\n\n/^\\p{Script_Extensions=Kthi}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Kaithi}/utf\n    \\x{966}\n 0: \\x{966}\n\n/^\\p{sc=Kaithi}/utf\n    \\x{966}\nNo match\n\n# Character not in script\n/^\\p{Kaithi}/utf\n    \\x{110ce}\nNo match\n\n# Base script check\n/^\\p{sc=Mandaic}/utf\n    \\x{840}\n 0: \\x{840}\n\n/^\\p{Script=Mand}/utf\n    \\x{85e}\n 0: \\x{85e}\n\n# Script extension check\n/^\\p{Mandaic}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{scx=Mand}/utf\n    \\x{640}\n 0: \\x{640}\n\n# Script extension only character\n/^\\p{Mandaic}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{sc=Mandaic}/utf\n    \\x{640}\nNo match\n\n# Character not in script\n/^\\p{Mandaic}/utf\n    \\x{85f}\nNo match\n\n# Base script check\n/^\\p{sc=Chakma}/utf\n    \\x{11100}\n 0: \\x{11100}\n\n/^\\p{Script=Cakm}/utf\n    \\x{11147}\n 0: \\x{11147}\n\n# Script extension check\n/^\\p{Chakma}/utf\n    \\x{9e6}\n 0: \\x{9e6}\n\n/^\\p{Script_Extensions=Cakm}/utf\n    \\x{1049}\n 0: \\x{1049}\n\n# Script extension only character\n/^\\p{Chakma}/utf\n    \\x{9e6}\n 0: \\x{9e6}\n\n/^\\p{sc=Chakma}/utf\n    \\x{9e6}\nNo match\n\n# Character not in script\n/^\\p{Chakma}/utf\n    \\x{11148}\nNo match\n\n# Base script check\n/^\\p{sc=Sharada}/utf\n    \\x{11180}\n 0: \\x{11180}\n\n/^\\p{Script=Shrd}/utf\n    \\x{111df}\n 0: \\x{111df}\n\n# Script extension check\n/^\\p{Sharada}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Shrd}/utf\n    \\x{1ce0}\n 0: \\x{1ce0}\n\n# Script extension only character\n/^\\p{Sharada}/utf\n    \\x{1cd7}\n 0: \\x{1cd7}\n\n/^\\p{sc=Sharada}/utf\n    \\x{1cd7}\nNo match\n\n# Character not in script\n/^\\p{Sharada}/utf\n    \\x{111e0}\nNo match\n\n# Base script check\n/^\\p{sc=Takri}/utf\n    \\x{11680}\n 0: \\x{11680}\n\n/^\\p{Script=Takr}/utf\n    \\x{116c9}\n 0: \\x{116c9}\n\n# Script extension check\n/^\\p{Takri}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{Script_Extensions=Takr}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Takri}/utf\n    \\x{a836}\n 0: \\x{a836}\n\n/^\\p{sc=Takri}/utf\n    \\x{a836}\nNo match\n\n# Character not in script\n/^\\p{Takri}/utf\n    \\x{116ca}\nNo match\n\n# Base script check\n/^\\p{sc=Duployan}/utf\n    \\x{1bc00}\n 0: \\x{1bc00}\n\n/^\\p{Script=Dupl}/utf\n    \\x{1bc9f}\n 0: \\x{1bc9f}\n\n# Script extension check\n/^\\p{Duployan}/utf\n    \\x{1bca0}\n 0: \\x{1bca0}\n\n/^\\p{scx=Dupl}/utf\n    \\x{1bca3}\n 0: \\x{1bca3}\n\n# Script extension only character\n/^\\p{Duployan}/utf\n    \\x{1bca0}\n 0: \\x{1bca0}\n\n/^\\p{sc=Duployan}/utf\n    \\x{1bca0}\nNo match\n\n# Character not in script\n/^\\p{Duployan}/utf\n    \\x{1bca4}\nNo match\n\n# Base script check\n/^\\p{sc=Grantha}/utf\n    \\x{11300}\n 0: \\x{11300}\n\n/^\\p{Script=Gran}/utf\n    \\x{11374}\n 0: \\x{11374}\n\n# Script extension check\n/^\\p{Grantha}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{Script_Extensions=Gran}/utf\n    \\x{11fd3}\n 0: \\x{11fd3}\n\n# Script extension only character\n/^\\p{Grantha}/utf\n    \\x{1cd3}\n 0: \\x{1cd3}\n\n/^\\p{sc=Grantha}/utf\n    \\x{1cd3}\nNo match\n\n# Character not in script\n/^\\p{Grantha}/utf\n    \\x{11fd4}\nNo match\n\n# Base script check\n/^\\p{sc=Khojki}/utf\n    \\x{11200}\n 0: \\x{11200}\n\n/^\\p{Script=Khoj}/utf\n    \\x{11241}\n 0: \\x{11241}\n\n# Script extension check\n/^\\p{Khojki}/utf\n    \\x{ae6}\n 0: \\x{ae6}\n\n/^\\p{scx=Khoj}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Khojki}/utf\n    \\x{ae6}\n 0: \\x{ae6}\n\n/^\\p{sc=Khojki}/utf\n    \\x{ae6}\nNo match\n\n# Character not in script\n/^\\p{Khojki}/utf\n    \\x{11242}\nNo match\n\n# Base script check\n/^\\p{sc=Linear_A}/utf\n    \\x{10600}\n 0: \\x{10600}\n\n/^\\p{Script=Lina}/utf\n    \\x{10767}\n 0: \\x{10767}\n\n# Script extension check\n/^\\p{Linear_A}/utf\n    \\x{10107}\n 0: \\x{10107}\n\n/^\\p{Script_Extensions=Lina}/utf\n    \\x{10133}\n 0: \\x{10133}\n\n# Script extension only character\n/^\\p{Linear_A}/utf\n    \\x{10107}\n 0: \\x{10107}\n\n/^\\p{sc=Linear_A}/utf\n    \\x{10107}\nNo match\n\n# Character not in script\n/^\\p{Linear_A}/utf\n    \\x{10768}\nNo match\n\n# Base script check\n/^\\p{sc=Mahajani}/utf\n    \\x{11150}\n 0: \\x{11150}\n\n/^\\p{Script=Mahj}/utf\n    \\x{11176}\n 0: \\x{11176}\n\n# Script extension check\n/^\\p{Mahajani}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{scx=Mahj}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Mahajani}/utf\n    \\x{966}\n 0: \\x{966}\n\n/^\\p{sc=Mahajani}/utf\n    \\x{966}\nNo match\n\n# Character not in script\n/^\\p{Mahajani}/utf\n    \\x{11177}\nNo match\n\n# Base script check\n/^\\p{sc=Manichaean}/utf\n    \\x{10ac0}\n 0: \\x{10ac0}\n\n/^\\p{Script=Mani}/utf\n    \\x{10af6}\n 0: \\x{10af6}\n\n# Script extension check\n/^\\p{Manichaean}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{Script_Extensions=Mani}/utf\n    \\x{10af2}\n 0: \\x{10af2}\n\n# Script extension only character\n/^\\p{Manichaean}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{sc=Manichaean}/utf\n    \\x{640}\nNo match\n\n# Character not in script\n/^\\p{Manichaean}/utf\n    \\x{10af7}\nNo match\n\n# Base script check\n/^\\p{sc=Modi}/utf\n    \\x{11600}\n 0: \\x{11600}\n\n/^\\p{Script=Modi}/utf\n    \\x{11659}\n 0: \\x{11659}\n\n# Script extension check\n/^\\p{Modi}/utf\n    \\x{a830}\n 0: \\x{a830}\n\n/^\\p{scx=Modi}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Modi}/utf\n    \\x{a836}\n 0: \\x{a836}\n\n/^\\p{sc=Modi}/utf\n    \\x{a836}\nNo match\n\n# Character not in script\n/^\\p{Modi}/utf\n    \\x{1165a}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Permic}/utf\n    \\x{10350}\n 0: \\x{10350}\n\n/^\\p{Script=Perm}/utf\n    \\x{1037a}\n 0: \\x{1037a}\n\n# Script extension check\n/^\\p{Old_Permic}/utf\n    \\x{483}\n 0: \\x{483}\n\n/^\\p{Script_Extensions=Perm}/utf\n    \\x{483}\n 0: \\x{483}\n\n# Script extension only character\n/^\\p{Old_Permic}/utf\n    \\x{483}\n 0: \\x{483}\n\n/^\\p{sc=Old_Permic}/utf\n    \\x{483}\nNo match\n\n# Character not in script\n/^\\p{Old_Permic}/utf\n    \\x{1037b}\nNo match\n\n# Base script check\n/^\\p{sc=Psalter_Pahlavi}/utf\n    \\x{10b80}\n 0: \\x{10b80}\n\n/^\\p{Script=Phlp}/utf\n    \\x{10baf}\n 0: \\x{10baf}\n\n# Script extension check\n/^\\p{Psalter_Pahlavi}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{scx=Phlp}/utf\n    \\x{640}\n 0: \\x{640}\n\n# Script extension only character\n/^\\p{Psalter_Pahlavi}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{sc=Psalter_Pahlavi}/utf\n    \\x{640}\nNo match\n\n# Character not in script\n/^\\p{Psalter_Pahlavi}/utf\n    \\x{10bb0}\nNo match\n\n# Base script check\n/^\\p{sc=Khudawadi}/utf\n    \\x{112b0}\n 0: \\x{112b0}\n\n/^\\p{Script=Sind}/utf\n    \\x{112f9}\n 0: \\x{112f9}\n\n# Script extension check\n/^\\p{Khudawadi}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{Script_Extensions=Sind}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Khudawadi}/utf\n    \\x{a836}\n 0: \\x{a836}\n\n/^\\p{sc=Khudawadi}/utf\n    \\x{a836}\nNo match\n\n# Character not in script\n/^\\p{Khudawadi}/utf\n    \\x{112fa}\nNo match\n\n# Base script check\n/^\\p{sc=Tirhuta}/utf\n    \\x{11480}\n 0: \\x{11480}\n\n/^\\p{Script=Tirh}/utf\n    \\x{114d9}\n 0: \\x{114d9}\n\n# Script extension check\n/^\\p{Tirhuta}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Tirh}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Tirhuta}/utf\n    \\x{1cf2}\n 0: \\x{1cf2}\n\n/^\\p{sc=Tirhuta}/utf\n    \\x{1cf2}\nNo match\n\n# Character not in script\n/^\\p{Tirhuta}/utf\n    \\x{114da}\nNo match\n\n# Base script check\n/^\\p{sc=Multani}/utf\n    \\x{11280}\n 0: \\x{11280}\n\n/^\\p{Script=Mult}/utf\n    \\x{112a9}\n 0: \\x{112a9}\n\n# Script extension check\n/^\\p{Multani}/utf\n    \\x{a66}\n 0: \\x{a66}\n\n/^\\p{Script_Extensions=Mult}/utf\n    \\x{a6f}\n 0: \\x{a6f}\n\n# Script extension only character\n/^\\p{Multani}/utf\n    \\x{a66}\n 0: \\x{a66}\n\n/^\\p{sc=Multani}/utf\n    \\x{a66}\nNo match\n\n# Character not in script\n/^\\p{Multani}/utf\n    \\x{112aa}\nNo match\n\n# Base script check\n/^\\p{sc=Adlam}/utf\n    \\x{1e900}\n 0: \\x{1e900}\n\n/^\\p{Script=Adlm}/utf\n    \\x{1e95f}\n 0: \\x{1e95f}\n\n# Script extension check\n/^\\p{Adlam}/utf\n    \\x{61f}\n 0: \\x{61f}\n\n/^\\p{scx=Adlm}/utf\n    \\x{640}\n 0: \\x{640}\n\n# Script extension only character\n/^\\p{Adlam}/utf\n    \\x{61f}\n 0: \\x{61f}\n\n/^\\p{sc=Adlam}/utf\n    \\x{61f}\nNo match\n\n# Character not in script\n/^\\p{Adlam}/utf\n    \\x{1e960}\nNo match\n\n# Base script check\n/^\\p{sc=Masaram_Gondi}/utf\n    \\x{11d00}\n 0: \\x{11d00}\n\n/^\\p{Script=Gonm}/utf\n    \\x{11d59}\n 0: \\x{11d59}\n\n# Script extension check\n/^\\p{Masaram_Gondi}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{Script_Extensions=Gonm}/utf\n    \\x{965}\n 0: \\x{965}\n\n# Script extension only character\n/^\\p{Masaram_Gondi}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{sc=Masaram_Gondi}/utf\n    \\x{964}\nNo match\n\n# Character not in script\n/^\\p{Masaram_Gondi}/utf\n    \\x{11d5a}\nNo match\n\n# Base script check\n/^\\p{sc=Dogra}/utf\n    \\x{11800}\n 0: \\x{11800}\n\n/^\\p{Script=Dogr}/utf\n    \\x{1183b}\n 0: \\x{1183b}\n\n# Script extension check\n/^\\p{Dogra}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{scx=Dogr}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Dogra}/utf\n    \\x{966}\n 0: \\x{966}\n\n/^\\p{sc=Dogra}/utf\n    \\x{966}\nNo match\n\n# Character not in script\n/^\\p{Dogra}/utf\n    \\x{1183c}\nNo match\n\n# Base script check\n/^\\p{sc=Gunjala_Gondi}/utf\n    \\x{11d60}\n 0: \\x{11d60}\n\n/^\\p{Script=Gong}/utf\n    \\x{11da9}\n 0: \\x{11da9}\n\n# Script extension check\n/^\\p{Gunjala_Gondi}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{Script_Extensions=Gong}/utf\n    \\x{965}\n 0: \\x{965}\n\n# Script extension only character\n/^\\p{Gunjala_Gondi}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{sc=Gunjala_Gondi}/utf\n    \\x{964}\nNo match\n\n# Character not in script\n/^\\p{Gunjala_Gondi}/utf\n    \\x{11daa}\nNo match\n\n# Base script check\n/^\\p{sc=Hanifi_Rohingya}/utf\n    \\x{10d00}\n 0: \\x{10d00}\n\n/^\\p{Script=Rohg}/utf\n    \\x{10d39}\n 0: \\x{10d39}\n\n# Script extension check\n/^\\p{Hanifi_Rohingya}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{scx=Rohg}/utf\n    \\x{6d4}\n 0: \\x{6d4}\n\n# Script extension only character\n/^\\p{Hanifi_Rohingya}/utf\n    \\x{6d4}\n 0: \\x{6d4}\n\n/^\\p{sc=Hanifi_Rohingya}/utf\n    \\x{6d4}\nNo match\n\n# Character not in script\n/^\\p{Hanifi_Rohingya}/utf\n    \\x{10d3a}\nNo match\n\n# Base script check\n/^\\p{sc=Sogdian}/utf\n    \\x{10f30}\n 0: \\x{10f30}\n\n/^\\p{Script=Sogd}/utf\n    \\x{10f59}\n 0: \\x{10f59}\n\n# Script extension check\n/^\\p{Sogdian}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{Script_Extensions=Sogd}/utf\n    \\x{640}\n 0: \\x{640}\n\n# Script extension only character\n/^\\p{Sogdian}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{sc=Sogdian}/utf\n    \\x{640}\nNo match\n\n# Character not in script\n/^\\p{Sogdian}/utf\n    \\x{10f5a}\nNo match\n\n# Base script check\n/^\\p{sc=Nandinagari}/utf\n    \\x{119a0}\n 0: \\x{119a0}\n\n/^\\p{Script=Nand}/utf\n    \\x{119e4}\n 0: \\x{119e4}\n\n# Script extension check\n/^\\p{Nandinagari}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{scx=Nand}/utf\n    \\x{a835}\n 0: \\x{a835}\n\n# Script extension only character\n/^\\p{Nandinagari}/utf\n    \\x{1cfa}\n 0: \\x{1cfa}\n\n/^\\p{sc=Nandinagari}/utf\n    \\x{1cfa}\nNo match\n\n# Character not in script\n/^\\p{Nandinagari}/utf\n    \\x{119e5}\nNo match\n\n# Base script check\n/^\\p{sc=Yezidi}/utf\n    \\x{10e80}\n 0: \\x{10e80}\n\n/^\\p{Script=Yezi}/utf\n    \\x{10eb1}\n 0: \\x{10eb1}\n\n# Script extension check\n/^\\p{Yezidi}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{Script_Extensions=Yezi}/utf\n    \\x{669}\n 0: \\x{669}\n\n# Script extension only character\n/^\\p{Yezidi}/utf\n    \\x{660}\n 0: \\x{660}\n\n/^\\p{sc=Yezidi}/utf\n    \\x{660}\nNo match\n\n# Character not in script\n/^\\p{Yezidi}/utf\n    \\x{10eb2}\nNo match\n\n# Base script check\n/^\\p{sc=Cypro_Minoan}/utf\n    \\x{12f90}\n 0: \\x{12f90}\n\n/^\\p{Script=Cpmn}/utf\n    \\x{12ff2}\n 0: \\x{12ff2}\n\n# Script extension check\n/^\\p{Cypro_Minoan}/utf\n    \\x{10100}\n 0: \\x{10100}\n\n/^\\p{scx=Cpmn}/utf\n    \\x{10101}\n 0: \\x{10101}\n\n# Script extension only character\n/^\\p{Cypro_Minoan}/utf\n    \\x{10100}\n 0: \\x{10100}\n\n/^\\p{sc=Cypro_Minoan}/utf\n    \\x{10100}\nNo match\n\n# Character not in script\n/^\\p{Cypro_Minoan}/utf\n    \\x{12ff3}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Uyghur}/utf\n    \\x{10f70}\n 0: \\x{10f70}\n\n/^\\p{Script=Ougr}/utf\n    \\x{10f89}\n 0: \\x{10f89}\n\n# Script extension check\n/^\\p{Old_Uyghur}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{Script_Extensions=Ougr}/utf\n    \\x{10af2}\n 0: \\x{10af2}\n\n# Script extension only character\n/^\\p{Old_Uyghur}/utf\n    \\x{10af2}\n 0: \\x{10af2}\n\n/^\\p{sc=Old_Uyghur}/utf\n    \\x{10af2}\nNo match\n\n# Character not in script\n/^\\p{Old_Uyghur}/utf\n    \\x{10f8a}\nNo match\n\n# Base script check\n/^\\p{sc=Common}/utf\n    \\x{00}\n 0: \\x{00}\n\n/^\\p{Script=Zyyy}/utf\n    \\x{e007f}\n 0: \\x{e007f}\n\n# Character not in script\n/^\\p{Common}/utf\n    \\x{e0080}\nNo match\n\n# Base script check\n/^\\p{sc=Armenian}/utf\n    \\x{531}\n 0: \\x{531}\n\n/^\\p{Script=Armn}/utf\n    \\x{fb17}\n 0: \\x{fb17}\n\n# Character not in script\n/^\\p{Armenian}/utf\n    \\x{fb18}\nNo match\n\n# Base script check\n/^\\p{sc=Hebrew}/utf\n    \\x{591}\n 0: \\x{591}\n\n/^\\p{Script=Hebr}/utf\n    \\x{fb4f}\n 0: \\x{fb4f}\n\n# Character not in script\n/^\\p{Hebrew}/utf\n    \\x{fb50}\nNo match\n\n# Base script check\n/^\\p{sc=Thai}/utf\n    \\x{e01}\n 0: \\x{e01}\n\n/^\\p{Script=Thai}/utf\n    \\x{e5b}\n 0: \\x{e5b}\n\n# Character not in script\n/^\\p{Thai}/utf\n    \\x{e5c}\nNo match\n\n# Base script check\n/^\\p{sc=Lao}/utf\n    \\x{e81}\n 0: \\x{e81}\n\n/^\\p{Script=Laoo}/utf\n    \\x{edf}\n 0: \\x{edf}\n\n# Character not in script\n/^\\p{Lao}/utf\n    \\x{ee0}\nNo match\n\n# Base script check\n/^\\p{sc=Tibetan}/utf\n    \\x{f00}\n 0: \\x{f00}\n\n/^\\p{Script=Tibt}/utf\n    \\x{fda}\n 0: \\x{fda}\n\n# Character not in script\n/^\\p{Tibetan}/utf\n    \\x{fdb}\nNo match\n\n# Base script check\n/^\\p{sc=Ethiopic}/utf\n    \\x{1200}\n 0: \\x{1200}\n\n/^\\p{Script=Ethi}/utf\n    \\x{1e7fe}\n 0: \\x{1e7fe}\n\n# Character not in script\n/^\\p{Ethiopic}/utf\n    \\x{1e7ff}\nNo match\n\n# Base script check\n/^\\p{sc=Cherokee}/utf\n    \\x{13a0}\n 0: \\x{13a0}\n\n/^\\p{Script=Cher}/utf\n    \\x{abbf}\n 0: \\x{abbf}\n\n# Character not in script\n/^\\p{Cherokee}/utf\n    \\x{abc0}\nNo match\n\n# Base script check\n/^\\p{sc=Canadian_Aboriginal}/utf\n    \\x{1400}\n 0: \\x{1400}\n\n/^\\p{Script=Cans}/utf\n    \\x{11abf}\n 0: \\x{11abf}\n\n# Character not in script\n/^\\p{Canadian_Aboriginal}/utf\n    \\x{11ac0}\nNo match\n\n# Base script check\n/^\\p{sc=Ogham}/utf\n    \\x{1680}\n 0: \\x{1680}\n\n/^\\p{Script=Ogam}/utf\n    \\x{169c}\n 0: \\x{169c}\n\n# Character not in script\n/^\\p{Ogham}/utf\n    \\x{169d}\nNo match\n\n# Base script check\n/^\\p{sc=Runic}/utf\n    \\x{16a0}\n 0: \\x{16a0}\n\n/^\\p{Script=Runr}/utf\n    \\x{16f8}\n 0: \\x{16f8}\n\n# Character not in script\n/^\\p{Runic}/utf\n    \\x{16f9}\nNo match\n\n# Base script check\n/^\\p{sc=Khmer}/utf\n    \\x{1780}\n 0: \\x{1780}\n\n/^\\p{Script=Khmr}/utf\n    \\x{19ff}\n 0: \\x{19ff}\n\n# Character not in script\n/^\\p{Khmer}/utf\n    \\x{1a00}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Italic}/utf\n    \\x{10300}\n 0: \\x{10300}\n\n/^\\p{Script=Ital}/utf\n    \\x{1032f}\n 0: \\x{1032f}\n\n# Character not in script\n/^\\p{Old_Italic}/utf\n    \\x{10330}\nNo match\n\n# Base script check\n/^\\p{sc=Gothic}/utf\n    \\x{10330}\n 0: \\x{10330}\n\n/^\\p{Script=Goth}/utf\n    \\x{1034a}\n 0: \\x{1034a}\n\n# Character not in script\n/^\\p{Gothic}/utf\n    \\x{1034b}\nNo match\n\n# Base script check\n/^\\p{sc=Deseret}/utf\n    \\x{10400}\n 0: \\x{10400}\n\n/^\\p{Script=Dsrt}/utf\n    \\x{1044f}\n 0: \\x{1044f}\n\n# Character not in script\n/^\\p{Deseret}/utf\n    \\x{10450}\nNo match\n\n# Base script check\n/^\\p{sc=Inherited}/utf\n    \\x{300}\n 0: \\x{300}\n\n/^\\p{Script=Zinh}/utf\n    \\x{e01ef}\n 0: \\x{e01ef}\n\n# Character not in script\n/^\\p{Inherited}/utf\n    \\x{e01f0}\nNo match\n\n# Base script check\n/^\\p{sc=Ugaritic}/utf\n    \\x{10380}\n 0: \\x{10380}\n\n/^\\p{Script=Ugar}/utf\n    \\x{1039f}\n 0: \\x{1039f}\n\n# Character not in script\n/^\\p{Ugaritic}/utf\n    \\x{103a0}\nNo match\n\n# Base script check\n/^\\p{sc=Shavian}/utf\n    \\x{10450}\n 0: \\x{10450}\n\n/^\\p{Script=Shaw}/utf\n    \\x{1047f}\n 0: \\x{1047f}\n\n# Character not in script\n/^\\p{Shavian}/utf\n    \\x{10480}\nNo match\n\n# Base script check\n/^\\p{sc=Osmanya}/utf\n    \\x{10480}\n 0: \\x{10480}\n\n/^\\p{Script=Osma}/utf\n    \\x{104a9}\n 0: \\x{104a9}\n\n# Character not in script\n/^\\p{Osmanya}/utf\n    \\x{104aa}\nNo match\n\n# Base script check\n/^\\p{sc=Braille}/utf\n    \\x{2800}\n 0: \\x{2800}\n\n/^\\p{Script=Brai}/utf\n    \\x{28ff}\n 0: \\x{28ff}\n\n# Character not in script\n/^\\p{Braille}/utf\n    \\x{2900}\nNo match\n\n# Base script check\n/^\\p{sc=New_Tai_Lue}/utf\n    \\x{1980}\n 0: \\x{1980}\n\n/^\\p{Script=Talu}/utf\n    \\x{19df}\n 0: \\x{19df}\n\n# Character not in script\n/^\\p{New_Tai_Lue}/utf\n    \\x{19e0}\nNo match\n\n# Base script check\n/^\\p{sc=Tifinagh}/utf\n    \\x{2d30}\n 0: \\x{2d30}\n\n/^\\p{Script=Tfng}/utf\n    \\x{2d7f}\n 0: \\x{2d7f}\n\n# Character not in script\n/^\\p{Tifinagh}/utf\n    \\x{2d80}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Persian}/utf\n    \\x{103a0}\n 0: \\x{103a0}\n\n/^\\p{Script=Xpeo}/utf\n    \\x{103d5}\n 0: \\x{103d5}\n\n# Character not in script\n/^\\p{Old_Persian}/utf\n    \\x{103d6}\nNo match\n\n# Base script check\n/^\\p{sc=Kharoshthi}/utf\n    \\x{10a00}\n 0: \\x{10a00}\n\n/^\\p{Script=Khar}/utf\n    \\x{10a58}\n 0: \\x{10a58}\n\n# Character not in script\n/^\\p{Kharoshthi}/utf\n    \\x{10a59}\nNo match\n\n# Base script check\n/^\\p{sc=Balinese}/utf\n    \\x{1b00}\n 0: \\x{1b00}\n\n/^\\p{Script=Bali}/utf\n    \\x{1b7e}\n 0: \\x{1b7e}\n\n# Character not in script\n/^\\p{Balinese}/utf\n    \\x{1b8f}\nNo match\n\n# Base script check\n/^\\p{sc=Cuneiform}/utf\n    \\x{12000}\n 0: \\x{12000}\n\n/^\\p{Script=Xsux}/utf\n    \\x{12543}\n 0: \\x{12543}\n\n# Character not in script\n/^\\p{Cuneiform}/utf\n    \\x{12544}\nNo match\n\n# Base script check\n/^\\p{sc=Phoenician}/utf\n    \\x{10900}\n 0: \\x{10900}\n\n/^\\p{Script=Phnx}/utf\n    \\x{1091f}\n 0: \\x{1091f}\n\n# Character not in script\n/^\\p{Phoenician}/utf\n    \\x{10920}\nNo match\n\n# Base script check\n/^\\p{sc=Sundanese}/utf\n    \\x{1b80}\n 0: \\x{1b80}\n\n/^\\p{Script=Sund}/utf\n    \\x{1cc7}\n 0: \\x{1cc7}\n\n# Character not in script\n/^\\p{Sundanese}/utf\n    \\x{1cc8}\nNo match\n\n# Base script check\n/^\\p{sc=Lepcha}/utf\n    \\x{1c00}\n 0: \\x{1c00}\n\n/^\\p{Script=Lepc}/utf\n    \\x{1c4f}\n 0: \\x{1c4f}\n\n# Character not in script\n/^\\p{Lepcha}/utf\n    \\x{1c50}\nNo match\n\n# Base script check\n/^\\p{sc=Ol_Chiki}/utf\n    \\x{1c50}\n 0: \\x{1c50}\n\n/^\\p{Script=Olck}/utf\n    \\x{1c7f}\n 0: \\x{1c7f}\n\n# Character not in script\n/^\\p{Ol_Chiki}/utf\n    \\x{1c80}\nNo match\n\n# Base script check\n/^\\p{sc=Vai}/utf\n    \\x{a500}\n 0: \\x{a500}\n\n/^\\p{Script=Vaii}/utf\n    \\x{a62b}\n 0: \\x{a62b}\n\n# Character not in script\n/^\\p{Vai}/utf\n    \\x{a62c}\nNo match\n\n# Base script check\n/^\\p{sc=Saurashtra}/utf\n    \\x{a880}\n 0: \\x{a880}\n\n/^\\p{Script=Saur}/utf\n    \\x{a8d9}\n 0: \\x{a8d9}\n\n# Character not in script\n/^\\p{Saurashtra}/utf\n    \\x{a8da}\nNo match\n\n# Base script check\n/^\\p{sc=Rejang}/utf\n    \\x{a930}\n 0: \\x{a930}\n\n/^\\p{Script=Rjng}/utf\n    \\x{a95f}\n 0: \\x{a95f}\n\n# Character not in script\n/^\\p{Rejang}/utf\n    \\x{a960}\nNo match\n\n# Base script check\n/^\\p{sc=Lycian}/utf\n    \\x{10280}\n 0: \\x{10280}\n\n/^\\p{Script=Lyci}/utf\n    \\x{1029c}\n 0: \\x{1029c}\n\n# Character not in script\n/^\\p{Lycian}/utf\n    \\x{1029d}\nNo match\n\n# Base script check\n/^\\p{sc=Carian}/utf\n    \\x{102a0}\n 0: \\x{102a0}\n\n/^\\p{Script=Cari}/utf\n    \\x{102d0}\n 0: \\x{102d0}\n\n# Character not in script\n/^\\p{Carian}/utf\n    \\x{102d1}\nNo match\n\n# Base script check\n/^\\p{sc=Lydian}/utf\n    \\x{10920}\n 0: \\x{10920}\n\n/^\\p{Script=Lydi}/utf\n    \\x{1093f}\n 0: \\x{1093f}\n\n# Character not in script\n/^\\p{Lydian}/utf\n    \\x{10940}\nNo match\n\n# Base script check\n/^\\p{sc=Cham}/utf\n    \\x{aa00}\n 0: \\x{aa00}\n\n/^\\p{Script=Cham}/utf\n    \\x{aa5f}\n 0: \\x{aa5f}\n\n# Character not in script\n/^\\p{Cham}/utf\n    \\x{aa60}\nNo match\n\n# Base script check\n/^\\p{sc=Tai_Tham}/utf\n    \\x{1a20}\n 0: \\x{1a20}\n\n/^\\p{Script=Lana}/utf\n    \\x{1aad}\n 0: \\x{1aad}\n\n# Character not in script\n/^\\p{Tai_Tham}/utf\n    \\x{1aae}\nNo match\n\n# Base script check\n/^\\p{sc=Tai_Viet}/utf\n    \\x{aa80}\n 0: \\x{aa80}\n\n/^\\p{Script=Tavt}/utf\n    \\x{aadf}\n 0: \\x{aadf}\n\n# Character not in script\n/^\\p{Tai_Viet}/utf\n    \\x{aae0}\nNo match\n\n# Base script check\n/^\\p{sc=Avestan}/utf\n    \\x{10b00}\n 0: \\x{10b00}\n\n/^\\p{Script=Avst}/utf\n    \\x{10b3f}\n 0: \\x{10b3f}\n\n# Character not in script\n/^\\p{Avestan}/utf\n    \\x{10b40}\nNo match\n\n# Base script check\n/^\\p{sc=Egyptian_Hieroglyphs}/utf\n    \\x{13000}\n 0: \\x{13000}\n\n/^\\p{Script=Egyp}/utf\n    \\x{13455}\n 0: \\x{13455}\n\n# Character not in script\n/^\\p{Egyptian_Hieroglyphs}/utf\n    \\x{13456}\nNo match\n\n# Base script check\n/^\\p{sc=Samaritan}/utf\n    \\x{800}\n 0: \\x{800}\n\n/^\\p{Script=Samr}/utf\n    \\x{83e}\n 0: \\x{83e}\n\n# Character not in script\n/^\\p{Samaritan}/utf\n    \\x{83f}\nNo match\n\n# Base script check\n/^\\p{sc=Lisu}/utf\n    \\x{a4d0}\n 0: \\x{a4d0}\n\n/^\\p{Script=Lisu}/utf\n    \\x{11fb0}\n 0: \\x{11fb0}\n\n# Character not in script\n/^\\p{Lisu}/utf\n    \\x{11fb1}\nNo match\n\n# Base script check\n/^\\p{sc=Bamum}/utf\n    \\x{a6a0}\n 0: \\x{a6a0}\n\n/^\\p{Script=Bamu}/utf\n    \\x{16a38}\n 0: \\x{16a38}\n\n# Character not in script\n/^\\p{Bamum}/utf\n    \\x{16a39}\nNo match\n\n# Base script check\n/^\\p{sc=Meetei_Mayek}/utf\n    \\x{aae0}\n 0: \\x{aae0}\n\n/^\\p{Script=Mtei}/utf\n    \\x{abf9}\n 0: \\x{abf9}\n\n# Character not in script\n/^\\p{Meetei_Mayek}/utf\n    \\x{abfa}\nNo match\n\n# Base script check\n/^\\p{sc=Imperial_Aramaic}/utf\n    \\x{10840}\n 0: \\x{10840}\n\n/^\\p{Script=Armi}/utf\n    \\x{1085f}\n 0: \\x{1085f}\n\n# Character not in script\n/^\\p{Imperial_Aramaic}/utf\n    \\x{10860}\nNo match\n\n# Base script check\n/^\\p{sc=Old_South_Arabian}/utf\n    \\x{10a60}\n 0: \\x{10a60}\n\n/^\\p{Script=Sarb}/utf\n    \\x{10a7f}\n 0: \\x{10a7f}\n\n# Character not in script\n/^\\p{Old_South_Arabian}/utf\n    \\x{10a80}\nNo match\n\n# Base script check\n/^\\p{sc=Inscriptional_Parthian}/utf\n    \\x{10b40}\n 0: \\x{10b40}\n\n/^\\p{Script=Prti}/utf\n    \\x{10b5f}\n 0: \\x{10b5f}\n\n# Character not in script\n/^\\p{Inscriptional_Parthian}/utf\n    \\x{10b60}\nNo match\n\n# Base script check\n/^\\p{sc=Inscriptional_Pahlavi}/utf\n    \\x{10b60}\n 0: \\x{10b60}\n\n/^\\p{Script=Phli}/utf\n    \\x{10b7f}\n 0: \\x{10b7f}\n\n# Character not in script\n/^\\p{Inscriptional_Pahlavi}/utf\n    \\x{10b80}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Turkic}/utf\n    \\x{10c00}\n 0: \\x{10c00}\n\n/^\\p{Script=Orkh}/utf\n    \\x{10c48}\n 0: \\x{10c48}\n\n# Character not in script\n/^\\p{Old_Turkic}/utf\n    \\x{10c49}\nNo match\n\n# Base script check\n/^\\p{sc=Batak}/utf\n    \\x{1bc0}\n 0: \\x{1bc0}\n\n/^\\p{Script=Batk}/utf\n    \\x{1bff}\n 0: \\x{1bff}\n\n# Character not in script\n/^\\p{Batak}/utf\n    \\x{1c00}\nNo match\n\n# Base script check\n/^\\p{sc=Brahmi}/utf\n    \\x{11000}\n 0: \\x{11000}\n\n/^\\p{Script=Brah}/utf\n    \\x{1107f}\n 0: \\x{1107f}\n\n# Character not in script\n/^\\p{Brahmi}/utf\n    \\x{11080}\nNo match\n\n# Base script check\n/^\\p{sc=Meroitic_Cursive}/utf\n    \\x{109a0}\n 0: \\x{109a0}\n\n/^\\p{Script=Merc}/utf\n    \\x{109ff}\n 0: \\x{109ff}\n\n# Character not in script\n/^\\p{Meroitic_Cursive}/utf\n    \\x{10a00}\nNo match\n\n# Base script check\n/^\\p{sc=Meroitic_Hieroglyphs}/utf\n    \\x{10980}\n 0: \\x{10980}\n\n/^\\p{Script=Mero}/utf\n    \\x{1099f}\n 0: \\x{1099f}\n\n# Character not in script\n/^\\p{Meroitic_Hieroglyphs}/utf\n    \\x{109a0}\nNo match\n\n# Base script check\n/^\\p{sc=Miao}/utf\n    \\x{16f00}\n 0: \\x{16f00}\n\n/^\\p{Script=Plrd}/utf\n    \\x{16f9f}\n 0: \\x{16f9f}\n\n# Character not in script\n/^\\p{Miao}/utf\n    \\x{16fa0}\nNo match\n\n# Base script check\n/^\\p{sc=Sora_Sompeng}/utf\n    \\x{110d0}\n 0: \\x{110d0}\n\n/^\\p{Script=Sora}/utf\n    \\x{110f9}\n 0: \\x{110f9}\n\n# Character not in script\n/^\\p{Sora_Sompeng}/utf\n    \\x{110fa}\nNo match\n\n# Base script check\n/^\\p{sc=Caucasian_Albanian}/utf\n    \\x{10530}\n 0: \\x{10530}\n\n/^\\p{Script=Aghb}/utf\n    \\x{1056f}\n 0: \\x{1056f}\n\n# Character not in script\n/^\\p{Caucasian_Albanian}/utf\n    \\x{10570}\nNo match\n\n# Base script check\n/^\\p{sc=Bassa_Vah}/utf\n    \\x{16ad0}\n 0: \\x{16ad0}\n\n/^\\p{Script=Bass}/utf\n    \\x{16af5}\n 0: \\x{16af5}\n\n# Character not in script\n/^\\p{Bassa_Vah}/utf\n    \\x{16af6}\nNo match\n\n# Base script check\n/^\\p{sc=Elbasan}/utf\n    \\x{10500}\n 0: \\x{10500}\n\n/^\\p{Script=Elba}/utf\n    \\x{10527}\n 0: \\x{10527}\n\n# Character not in script\n/^\\p{Elbasan}/utf\n    \\x{10528}\nNo match\n\n# Base script check\n/^\\p{sc=Pahawh_Hmong}/utf\n    \\x{16b00}\n 0: \\x{16b00}\n\n/^\\p{Script=Hmng}/utf\n    \\x{16b8f}\n 0: \\x{16b8f}\n\n# Character not in script\n/^\\p{Pahawh_Hmong}/utf\n    \\x{16b90}\nNo match\n\n# Base script check\n/^\\p{sc=Mende_Kikakui}/utf\n    \\x{1e800}\n 0: \\x{1e800}\n\n/^\\p{Script=Mend}/utf\n    \\x{1e8d6}\n 0: \\x{1e8d6}\n\n# Character not in script\n/^\\p{Mende_Kikakui}/utf\n    \\x{1e8d7}\nNo match\n\n# Base script check\n/^\\p{sc=Mro}/utf\n    \\x{16a40}\n 0: \\x{16a40}\n\n/^\\p{Script=Mroo}/utf\n    \\x{16a6f}\n 0: \\x{16a6f}\n\n# Character not in script\n/^\\p{Mro}/utf\n    \\x{16a70}\nNo match\n\n# Base script check\n/^\\p{sc=Old_North_Arabian}/utf\n    \\x{10a80}\n 0: \\x{10a80}\n\n/^\\p{Script=Narb}/utf\n    \\x{10a9f}\n 0: \\x{10a9f}\n\n# Character not in script\n/^\\p{Old_North_Arabian}/utf\n    \\x{10aa0}\nNo match\n\n# Base script check\n/^\\p{sc=Nabataean}/utf\n    \\x{10880}\n 0: \\x{10880}\n\n/^\\p{Script=Nbat}/utf\n    \\x{108af}\n 0: \\x{108af}\n\n# Character not in script\n/^\\p{Nabataean}/utf\n    \\x{108b0}\nNo match\n\n# Base script check\n/^\\p{sc=Palmyrene}/utf\n    \\x{10860}\n 0: \\x{10860}\n\n/^\\p{Script=Palm}/utf\n    \\x{1087f}\n 0: \\x{1087f}\n\n# Character not in script\n/^\\p{Palmyrene}/utf\n    \\x{10880}\nNo match\n\n# Base script check\n/^\\p{sc=Pau_Cin_Hau}/utf\n    \\x{11ac0}\n 0: \\x{11ac0}\n\n/^\\p{Script=Pauc}/utf\n    \\x{11af8}\n 0: \\x{11af8}\n\n# Character not in script\n/^\\p{Pau_Cin_Hau}/utf\n    \\x{11af9}\nNo match\n\n# Base script check\n/^\\p{sc=Siddham}/utf\n    \\x{11580}\n 0: \\x{11580}\n\n/^\\p{Script=Sidd}/utf\n    \\x{115dd}\n 0: \\x{115dd}\n\n# Character not in script\n/^\\p{Siddham}/utf\n    \\x{115de}\nNo match\n\n# Base script check\n/^\\p{sc=Warang_Citi}/utf\n    \\x{118a0}\n 0: \\x{118a0}\n\n/^\\p{Script=Wara}/utf\n    \\x{118ff}\n 0: \\x{118ff}\n\n# Character not in script\n/^\\p{Warang_Citi}/utf\n    \\x{11900}\nNo match\n\n# Base script check\n/^\\p{sc=Ahom}/utf\n    \\x{11700}\n 0: \\x{11700}\n\n/^\\p{Script=Ahom}/utf\n    \\x{11746}\n 0: \\x{11746}\n\n# Character not in script\n/^\\p{Ahom}/utf\n    \\x{11747}\nNo match\n\n# Base script check\n/^\\p{sc=Anatolian_Hieroglyphs}/utf\n    \\x{14400}\n 0: \\x{14400}\n\n/^\\p{Script=Hluw}/utf\n    \\x{14646}\n 0: \\x{14646}\n\n# Character not in script\n/^\\p{Anatolian_Hieroglyphs}/utf\n    \\x{14647}\nNo match\n\n# Base script check\n/^\\p{sc=Hatran}/utf\n    \\x{108e0}\n 0: \\x{108e0}\n\n/^\\p{Script=Hatr}/utf\n    \\x{108ff}\n 0: \\x{108ff}\n\n# Character not in script\n/^\\p{Hatran}/utf\n    \\x{10900}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Hungarian}/utf\n    \\x{10c80}\n 0: \\x{10c80}\n\n/^\\p{Script=Hung}/utf\n    \\x{10cff}\n 0: \\x{10cff}\n\n# Character not in script\n/^\\p{Old_Hungarian}/utf\n    \\x{10d00}\nNo match\n\n# Base script check\n/^\\p{sc=SignWriting}/utf\n    \\x{1d800}\n 0: \\x{1d800}\n\n/^\\p{Script=Sgnw}/utf\n    \\x{1daaf}\n 0: \\x{1daaf}\n\n# Character not in script\n/^\\p{SignWriting}/utf\n    \\x{1dab0}\nNo match\n\n# Base script check\n/^\\p{sc=Bhaiksuki}/utf\n    \\x{11c00}\n 0: \\x{11c00}\n\n/^\\p{Script=Bhks}/utf\n    \\x{11c6c}\n 0: \\x{11c6c}\n\n# Character not in script\n/^\\p{Bhaiksuki}/utf\n    \\x{11c6d}\nNo match\n\n# Base script check\n/^\\p{sc=Marchen}/utf\n    \\x{11c70}\n 0: \\x{11c70}\n\n/^\\p{Script=Marc}/utf\n    \\x{11cb6}\n 0: \\x{11cb6}\n\n# Character not in script\n/^\\p{Marchen}/utf\n    \\x{11cb7}\nNo match\n\n# Base script check\n/^\\p{sc=Newa}/utf\n    \\x{11400}\n 0: \\x{11400}\n\n/^\\p{Script=Newa}/utf\n    \\x{11461}\n 0: \\x{11461}\n\n# Character not in script\n/^\\p{Newa}/utf\n    \\x{11462}\nNo match\n\n# Base script check\n/^\\p{sc=Osage}/utf\n    \\x{104b0}\n 0: \\x{104b0}\n\n/^\\p{Script=Osge}/utf\n    \\x{104fb}\n 0: \\x{104fb}\n\n# Character not in script\n/^\\p{Osage}/utf\n    \\x{104fc}\nNo match\n\n# Base script check\n/^\\p{sc=Tangut}/utf\n    \\x{16fe0}\n 0: \\x{16fe0}\n\n/^\\p{Script=Tang}/utf\n    \\x{18d08}\n 0: \\x{18d08}\n\n# Character not in script\n/^\\p{Tangut}/utf\n    \\x{18d20}\nNo match\n\n# Base script check\n/^\\p{sc=Nushu}/utf\n    \\x{16fe1}\n 0: \\x{16fe1}\n\n/^\\p{Script=Nshu}/utf\n    \\x{1b2fb}\n 0: \\x{1b2fb}\n\n# Character not in script\n/^\\p{Nushu}/utf\n    \\x{1b2fc}\nNo match\n\n# Base script check\n/^\\p{sc=Soyombo}/utf\n    \\x{11a50}\n 0: \\x{11a50}\n\n/^\\p{Script=Soyo}/utf\n    \\x{11aa2}\n 0: \\x{11aa2}\n\n# Character not in script\n/^\\p{Soyombo}/utf\n    \\x{11aa3}\nNo match\n\n# Base script check\n/^\\p{sc=Zanabazar_Square}/utf\n    \\x{11a00}\n 0: \\x{11a00}\n\n/^\\p{Script=Zanb}/utf\n    \\x{11a47}\n 0: \\x{11a47}\n\n# Character not in script\n/^\\p{Zanabazar_Square}/utf\n    \\x{11a48}\nNo match\n\n# Base script check\n/^\\p{sc=Makasar}/utf\n    \\x{11ee0}\n 0: \\x{11ee0}\n\n/^\\p{Script=Maka}/utf\n    \\x{11ef8}\n 0: \\x{11ef8}\n\n# Character not in script\n/^\\p{Makasar}/utf\n    \\x{11ef9}\nNo match\n\n# Base script check\n/^\\p{sc=Medefaidrin}/utf\n    \\x{16e40}\n 0: \\x{16e40}\n\n/^\\p{Script=Medf}/utf\n    \\x{16e9a}\n 0: \\x{16e9a}\n\n# Character not in script\n/^\\p{Medefaidrin}/utf\n    \\x{16e9b}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Sogdian}/utf\n    \\x{10f00}\n 0: \\x{10f00}\n\n/^\\p{Script=Sogo}/utf\n    \\x{10f27}\n 0: \\x{10f27}\n\n# Character not in script\n/^\\p{Old_Sogdian}/utf\n    \\x{10f28}\nNo match\n\n# Base script check\n/^\\p{sc=Elymaic}/utf\n    \\x{10fe0}\n 0: \\x{10fe0}\n\n/^\\p{Script=Elym}/utf\n    \\x{10ff6}\n 0: \\x{10ff6}\n\n# Character not in script\n/^\\p{Elymaic}/utf\n    \\x{10ff7}\nNo match\n\n# Base script check\n/^\\p{sc=Nyiakeng_Puachue_Hmong}/utf\n    \\x{1e100}\n 0: \\x{1e100}\n\n/^\\p{Script=Hmnp}/utf\n    \\x{1e14f}\n 0: \\x{1e14f}\n\n# Character not in script\n/^\\p{Nyiakeng_Puachue_Hmong}/utf\n    \\x{1e150}\nNo match\n\n# Base script check\n/^\\p{sc=Wancho}/utf\n    \\x{1e2c0}\n 0: \\x{1e2c0}\n\n/^\\p{Script=Wcho}/utf\n    \\x{1e2ff}\n 0: \\x{1e2ff}\n\n# Character not in script\n/^\\p{Wancho}/utf\n    \\x{1e300}\nNo match\n\n# Base script check\n/^\\p{sc=Chorasmian}/utf\n    \\x{10fb0}\n 0: \\x{10fb0}\n\n/^\\p{Script=Chrs}/utf\n    \\x{10fcb}\n 0: \\x{10fcb}\n\n# Character not in script\n/^\\p{Chorasmian}/utf\n    \\x{10fcc}\nNo match\n\n# Base script check\n/^\\p{sc=Dives_Akuru}/utf\n    \\x{11900}\n 0: \\x{11900}\n\n/^\\p{Script=Diak}/utf\n    \\x{11959}\n 0: \\x{11959}\n\n# Character not in script\n/^\\p{Dives_Akuru}/utf\n    \\x{1195a}\nNo match\n\n# Base script check\n/^\\p{sc=Khitan_Small_Script}/utf\n    \\x{16fe4}\n 0: \\x{16fe4}\n\n/^\\p{Script=Kits}/utf\n    \\x{18cd5}\n 0: \\x{18cd5}\n\n# Character not in script\n/^\\p{Khitan_Small_Script}/utf\n    \\x{18cd6}\nNo match\n\n# Base script check\n/^\\p{sc=Tangsa}/utf\n    \\x{16a70}\n 0: \\x{16a70}\n\n/^\\p{Script=Tnsa}/utf\n    \\x{16ac9}\n 0: \\x{16ac9}\n\n# Character not in script\n/^\\p{Tangsa}/utf\n    \\x{16aca}\nNo match\n\n# Base script check\n/^\\p{sc=Toto}/utf\n    \\x{1e290}\n 0: \\x{1e290}\n\n/^\\p{Script=Toto}/utf\n    \\x{1e2ae}\n 0: \\x{1e2ae}\n\n# Character not in script\n/^\\p{Toto}/utf\n    \\x{1e2af}\nNo match\n\n# Base script check\n/^\\p{sc=Vithkuqi}/utf\n    \\x{10570}\n 0: \\x{10570}\n\n/^\\p{Script=Vith}/utf\n    \\x{105bc}\n 0: \\x{105bc}\n\n# Character not in script\n/^\\p{Vithkuqi}/utf\n    \\x{105bd}\nNo match\n\n# Base script check\n/^\\p{sc=Kawi}/utf\n    \\x{11f00}\n 0: \\x{11f00}\n\n/^\\p{Script=Kawi}/utf\n    \\x{11f59}\n 0: \\x{11f59}\n\n# Character not in script\n/^\\p{Kawi}/utf\n    \\x{11f6a}\nNo match\n\n# Base script check\n/^\\p{sc=Nag_Mundari}/utf\n    \\x{1e4d0}\n 0: \\x{1e4d0}\n\n/^\\p{Script=Nagm}/utf\n    \\x{1e4f9}\n 0: \\x{1e4f9}\n\n# Character not in script\n/^\\p{Nag_Mundari}/utf\n    \\x{1e4fa}\nNo match\n\n# End of testinput26\n"
  },
  {
    "path": "testdata/testoutput27",
    "content": "# These tests were generated by maint/GenerateTest.py using PCRE2's UCP\n# data, do not edit unless that data has changed and they are reflecting\n# a previous version.\n\n# Unicode Script Extension tests for version 17.0.0\n\n#perltest\n\n# Base script check\n/^\\p{sc=Latin}/utf\n    A\n 0: A\n\n/^\\p{Script=Latn}/utf\n    \\x{1df2a}\n 0: \\x{1df2a}\n\n# Script extension check\n/^\\p{Latin}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{scx=Latn}/utf\n    \\x{a92e}\n 0: \\x{a92e}\n\n# Script extension only character\n/^\\p{Latin}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Latin}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Latin}/utf\n    \\x{1df2b}\nNo match\n\n# Base script check\n/^\\p{sc=Greek}/utf\n    \\x{370}\n 0: \\x{370}\n\n/^\\p{Script=Grek}/utf\n    \\x{1d245}\n 0: \\x{1d245}\n\n# Script extension check\n/^\\p{Greek}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{Script_Extensions=Grek}/utf\n    \\x{205d}\n 0: \\x{205d}\n\n# Script extension only character\n/^\\p{Greek}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Greek}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Greek}/utf\n    \\x{1d246}\nNo match\n\n# Base script check\n/^\\p{sc=Cyrillic}/utf\n    \\x{400}\n 0: \\x{400}\n\n/^\\p{Script=Cyrl}/utf\n    \\x{1e08f}\n 0: \\x{1e08f}\n\n# Script extension check\n/^\\p{Cyrillic}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n/^\\p{scx=Cyrl}/utf\n    \\x{a66f}\n 0: \\x{a66f}\n\n# Script extension only character\n/^\\p{Cyrillic}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n/^\\p{sc=Cyrillic}/utf\n    \\x{2bc}\nNo match\n\n# Character not in script\n/^\\p{Cyrillic}/utf\n    \\x{1e090}\nNo match\n\n# Base script check\n/^\\p{sc=Armenian}/utf\n    \\x{531}\n 0: \\x{531}\n\n/^\\p{Script=Armn}/utf\n    \\x{fb17}\n 0: \\x{fb17}\n\n# Script extension check\n/^\\p{Armenian}/utf\n    \\x{308}\n 0: \\x{308}\n\n/^\\p{Script_Extensions=Armn}/utf\n    \\x{589}\n 0: \\x{589}\n\n# Script extension only character\n/^\\p{Armenian}/utf\n    \\x{308}\n 0: \\x{308}\n\n/^\\p{sc=Armenian}/utf\n    \\x{308}\nNo match\n\n# Character not in script\n/^\\p{Armenian}/utf\n    \\x{fb18}\nNo match\n\n# Base script check\n/^\\p{sc=Hebrew}/utf\n    \\x{591}\n 0: \\x{591}\n\n/^\\p{Script=Hebr}/utf\n    \\x{fb4f}\n 0: \\x{fb4f}\n\n# Script extension check\n/^\\p{Hebrew}/utf\n    \\x{307}\n 0: \\x{307}\n\n/^\\p{scx=Hebr}/utf\n    \\x{308}\n 0: \\x{308}\n\n# Script extension only character\n/^\\p{Hebrew}/utf\n    \\x{307}\n 0: \\x{307}\n\n/^\\p{sc=Hebrew}/utf\n    \\x{307}\nNo match\n\n# Character not in script\n/^\\p{Hebrew}/utf\n    \\x{fb50}\nNo match\n\n# Base script check\n/^\\p{sc=Arabic}/utf\n    \\x{600}\n 0: \\x{600}\n\n/^\\p{Script=Arab}/utf\n    \\x{1eef1}\n 0: \\x{1eef1}\n\n# Script extension check\n/^\\p{Arabic}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{Script_Extensions=Arab}/utf\n    \\x{102fb}\n 0: \\x{102fb}\n\n# Script extension only character\n/^\\p{Arabic}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{sc=Arabic}/utf\n    \\x{60c}\nNo match\n\n# Character not in script\n/^\\p{Arabic}/utf\n    \\x{1eef2}\nNo match\n\n# Base script check\n/^\\p{sc=Syriac}/utf\n    \\x{700}\n 0: \\x{700}\n\n/^\\p{Script=Syrc}/utf\n    \\x{86a}\n 0: \\x{86a}\n\n# Script extension check\n/^\\p{Syriac}/utf\n    \\x{303}\n 0: \\x{303}\n\n/^\\p{scx=Syrc}/utf\n    \\x{1dfa}\n 0: \\x{1dfa}\n\n# Script extension only character\n/^\\p{Syriac}/utf\n    \\x{303}\n 0: \\x{303}\n\n/^\\p{sc=Syriac}/utf\n    \\x{303}\nNo match\n\n# Character not in script\n/^\\p{Syriac}/utf\n    \\x{1dfb}\nNo match\n\n# Base script check\n/^\\p{sc=Thaana}/utf\n    \\x{780}\n 0: \\x{780}\n\n/^\\p{Script=Thaa}/utf\n    \\x{7b1}\n 0: \\x{7b1}\n\n# Script extension check\n/^\\p{Thaana}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{Script_Extensions=Thaa}/utf\n    \\x{fdfd}\n 0: \\x{fdfd}\n\n# Script extension only character\n/^\\p{Thaana}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{sc=Thaana}/utf\n    \\x{60c}\nNo match\n\n# Character not in script\n/^\\p{Thaana}/utf\n    \\x{fdfe}\nNo match\n\n# Base script check\n/^\\p{sc=Devanagari}/utf\n    \\x{900}\n 0: \\x{900}\n\n/^\\p{Script=Deva}/utf\n    \\x{11b09}\n 0: \\x{11b09}\n\n# Script extension check\n/^\\p{Devanagari}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n/^\\p{scx=Deva}/utf\n    \\x{a8f3}\n 0: \\x{a8f3}\n\n# Script extension only character\n/^\\p{Devanagari}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n/^\\p{sc=Devanagari}/utf\n    \\x{2bc}\nNo match\n\n# Character not in script\n/^\\p{Devanagari}/utf\n    \\x{11b0a}\nNo match\n\n# Base script check\n/^\\p{sc=Bengali}/utf\n    \\x{980}\n 0: \\x{980}\n\n/^\\p{Script=Beng}/utf\n    \\x{9fe}\n 0: \\x{9fe}\n\n# Script extension check\n/^\\p{Bengali}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n/^\\p{Script_Extensions=Beng}/utf\n    \\x{a8f1}\n 0: \\x{a8f1}\n\n# Script extension only character\n/^\\p{Bengali}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n/^\\p{sc=Bengali}/utf\n    \\x{2bc}\nNo match\n\n# Character not in script\n/^\\p{Bengali}/utf\n    \\x{a8f2}\nNo match\n\n# Base script check\n/^\\p{sc=Gurmukhi}/utf\n    \\x{a01}\n 0: \\x{a01}\n\n/^\\p{Script=Guru}/utf\n    \\x{a76}\n 0: \\x{a76}\n\n# Script extension check\n/^\\p{Gurmukhi}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Guru}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Gurmukhi}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{sc=Gurmukhi}/utf\n    \\x{951}\nNo match\n\n# Character not in script\n/^\\p{Gurmukhi}/utf\n    \\x{a83a}\nNo match\n\n# Base script check\n/^\\p{sc=Gujarati}/utf\n    \\x{a81}\n 0: \\x{a81}\n\n/^\\p{Script=Gujr}/utf\n    \\x{aff}\n 0: \\x{aff}\n\n# Script extension check\n/^\\p{Gujarati}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{Script_Extensions=Gujr}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Gujarati}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{sc=Gujarati}/utf\n    \\x{951}\nNo match\n\n# Character not in script\n/^\\p{Gujarati}/utf\n    \\x{a83a}\nNo match\n\n# Base script check\n/^\\p{sc=Oriya}/utf\n    \\x{b01}\n 0: \\x{b01}\n\n/^\\p{Script=Orya}/utf\n    \\x{b77}\n 0: \\x{b77}\n\n# Script extension check\n/^\\p{Oriya}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Orya}/utf\n    \\x{1cf2}\n 0: \\x{1cf2}\n\n# Script extension only character\n/^\\p{Oriya}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{sc=Oriya}/utf\n    \\x{951}\nNo match\n\n# Character not in script\n/^\\p{Oriya}/utf\n    \\x{1cf3}\nNo match\n\n# Base script check\n/^\\p{sc=Tamil}/utf\n    \\x{b82}\n 0: \\x{b82}\n\n/^\\p{Script=Taml}/utf\n    \\x{11fff}\n 0: \\x{11fff}\n\n# Script extension check\n/^\\p{Tamil}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{Script_Extensions=Taml}/utf\n    \\x{11fd3}\n 0: \\x{11fd3}\n\n# Script extension only character\n/^\\p{Tamil}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{sc=Tamil}/utf\n    \\x{951}\nNo match\n\n# Character not in script\n/^\\p{Tamil}/utf\n    \\x{12000}\nNo match\n\n# Base script check\n/^\\p{sc=Telugu}/utf\n    \\x{c00}\n 0: \\x{c00}\n\n/^\\p{Script=Telu}/utf\n    \\x{c7f}\n 0: \\x{c7f}\n\n# Script extension check\n/^\\p{Telugu}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Telu}/utf\n    \\x{1cf2}\n 0: \\x{1cf2}\n\n# Script extension only character\n/^\\p{Telugu}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{sc=Telugu}/utf\n    \\x{951}\nNo match\n\n# Character not in script\n/^\\p{Telugu}/utf\n    \\x{1cf3}\nNo match\n\n# Base script check\n/^\\p{sc=Kannada}/utf\n    \\x{c80}\n 0: \\x{c80}\n\n/^\\p{Script=Knda}/utf\n    \\x{cf3}\n 0: \\x{cf3}\n\n# Script extension check\n/^\\p{Kannada}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{Script_Extensions=Knda}/utf\n    \\x{a835}\n 0: \\x{a835}\n\n# Script extension only character\n/^\\p{Kannada}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{sc=Kannada}/utf\n    \\x{951}\nNo match\n\n# Character not in script\n/^\\p{Kannada}/utf\n    \\x{a836}\nNo match\n\n# Base script check\n/^\\p{sc=Malayalam}/utf\n    \\x{d00}\n 0: \\x{d00}\n\n/^\\p{Script=Mlym}/utf\n    \\x{d7f}\n 0: \\x{d7f}\n\n# Script extension check\n/^\\p{Malayalam}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Mlym}/utf\n    \\x{a832}\n 0: \\x{a832}\n\n# Script extension only character\n/^\\p{Malayalam}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{sc=Malayalam}/utf\n    \\x{951}\nNo match\n\n# Character not in script\n/^\\p{Malayalam}/utf\n    \\x{a833}\nNo match\n\n# Base script check\n/^\\p{sc=Sinhala}/utf\n    \\x{d81}\n 0: \\x{d81}\n\n/^\\p{Script=Sinh}/utf\n    \\x{111f4}\n 0: \\x{111f4}\n\n# Script extension check\n/^\\p{Sinhala}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{Script_Extensions=Sinh}/utf\n    \\x{1cf2}\n 0: \\x{1cf2}\n\n# Script extension only character\n/^\\p{Sinhala}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{sc=Sinhala}/utf\n    \\x{964}\nNo match\n\n# Character not in script\n/^\\p{Sinhala}/utf\n    \\x{111f5}\nNo match\n\n# Base script check\n/^\\p{sc=Thai}/utf\n    \\x{e01}\n 0: \\x{e01}\n\n/^\\p{Script=Thai}/utf\n    \\x{e5b}\n 0: \\x{e5b}\n\n# Script extension check\n/^\\p{Thai}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n/^\\p{scx=Thai}/utf\n    \\x{331}\n 0: \\x{331}\n\n# Script extension only character\n/^\\p{Thai}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n/^\\p{sc=Thai}/utf\n    \\x{2bc}\nNo match\n\n# Character not in script\n/^\\p{Thai}/utf\n    \\x{e5c}\nNo match\n\n# Base script check\n/^\\p{sc=Tibetan}/utf\n    \\x{f00}\n 0: \\x{f00}\n\n/^\\p{Script=Tibt}/utf\n    \\x{fda}\n 0: \\x{fda}\n\n# Script extension check\n/^\\p{Tibetan}/utf\n    \\x{3008}\n 0: \\x{3008}\n\n/^\\p{Script_Extensions=Tibt}/utf\n    \\x{300b}\n 0: \\x{300b}\n\n# Script extension only character\n/^\\p{Tibetan}/utf\n    \\x{3008}\n 0: \\x{3008}\n\n/^\\p{sc=Tibetan}/utf\n    \\x{3008}\nNo match\n\n# Character not in script\n/^\\p{Tibetan}/utf\n    \\x{300c}\nNo match\n\n# Base script check\n/^\\p{sc=Myanmar}/utf\n    \\x{1000}\n 0: \\x{1000}\n\n/^\\p{Script=Mymr}/utf\n    \\x{116e3}\n 0: \\x{116e3}\n\n# Script extension check\n/^\\p{Myanmar}/utf\n    \\x{1040}\n 0: \\x{1040}\n\n/^\\p{scx=Mymr}/utf\n    \\x{a92e}\n 0: \\x{a92e}\n\n# Script extension only character\n/^\\p{Myanmar}/utf\n    \\x{a92e}\n 0: \\x{a92e}\n\n/^\\p{sc=Myanmar}/utf\n    \\x{a92e}\nNo match\n\n# Character not in script\n/^\\p{Myanmar}/utf\n    \\x{116e4}\nNo match\n\n# Base script check\n/^\\p{sc=Georgian}/utf\n    \\x{10a0}\n 0: \\x{10a0}\n\n/^\\p{Script=Geor}/utf\n    \\x{2d2d}\n 0: \\x{2d2d}\n\n# Script extension check\n/^\\p{Georgian}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{Script_Extensions=Geor}/utf\n    \\x{2e31}\n 0: \\x{2e31}\n\n# Script extension only character\n/^\\p{Georgian}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Georgian}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Georgian}/utf\n    \\x{2e32}\nNo match\n\n# Base script check\n/^\\p{sc=Hangul}/utf\n    \\x{1100}\n 0: \\x{1100}\n\n/^\\p{Script=Hang}/utf\n    \\x{ffdc}\n 0: \\x{ffdc}\n\n# Script extension check\n/^\\p{Hangul}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{scx=Hang}/utf\n    \\x{ff65}\n 0: \\x{ff65}\n\n# Script extension only character\n/^\\p{Hangul}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{sc=Hangul}/utf\n    \\x{3001}\nNo match\n\n# Character not in script\n/^\\p{Hangul}/utf\n    \\x{ffdd}\nNo match\n\n# Base script check\n/^\\p{sc=Ethiopic}/utf\n    \\x{1200}\n 0: \\x{1200}\n\n/^\\p{Script=Ethi}/utf\n    \\x{1e7fe}\n 0: \\x{1e7fe}\n\n# Script extension check\n/^\\p{Ethiopic}/utf\n    \\x{30e}\n 0: \\x{30e}\n\n/^\\p{Script_Extensions=Ethi}/utf\n    \\x{30e}\n 0: \\x{30e}\n\n# Script extension only character\n/^\\p{Ethiopic}/utf\n    \\x{30e}\n 0: \\x{30e}\n\n/^\\p{sc=Ethiopic}/utf\n    \\x{30e}\nNo match\n\n# Character not in script\n/^\\p{Ethiopic}/utf\n    \\x{1e7ff}\nNo match\n\n# Base script check\n/^\\p{sc=Cherokee}/utf\n    \\x{13a0}\n 0: \\x{13a0}\n\n/^\\p{Script=Cher}/utf\n    \\x{abbf}\n 0: \\x{abbf}\n\n# Script extension check\n/^\\p{Cherokee}/utf\n    \\x{300}\n 0: \\x{300}\n\n/^\\p{scx=Cher}/utf\n    \\x{331}\n 0: \\x{331}\n\n# Script extension only character\n/^\\p{Cherokee}/utf\n    \\x{300}\n 0: \\x{300}\n\n/^\\p{sc=Cherokee}/utf\n    \\x{300}\nNo match\n\n# Character not in script\n/^\\p{Cherokee}/utf\n    \\x{abc0}\nNo match\n\n# Base script check\n/^\\p{sc=Runic}/utf\n    \\x{16a0}\n 0: \\x{16a0}\n\n/^\\p{Script=Runr}/utf\n    \\x{16f8}\n 0: \\x{16f8}\n\n# Script extension check\n/^\\p{Runic}/utf\n    \\x{16eb}\n 0: \\x{16eb}\n\n/^\\p{Script_Extensions=Runr}/utf\n    \\x{16ed}\n 0: \\x{16ed}\n\n# Script extension only character\n/^\\p{Runic}/utf\n    \\x{16eb}\n 0: \\x{16eb}\n\n/^\\p{sc=Runic}/utf\n    \\x{16eb}\nNo match\n\n# Character not in script\n/^\\p{Runic}/utf\n    \\x{16f9}\nNo match\n\n# Base script check\n/^\\p{sc=Mongolian}/utf\n    \\x{1800}\n 0: \\x{1800}\n\n/^\\p{Script=Mong}/utf\n    \\x{1166c}\n 0: \\x{1166c}\n\n# Script extension check\n/^\\p{Mongolian}/utf\n    \\x{1802}\n 0: \\x{1802}\n\n/^\\p{scx=Mong}/utf\n    \\x{300b}\n 0: \\x{300b}\n\n# Script extension only character\n/^\\p{Mongolian}/utf\n    \\x{1802}\n 0: \\x{1802}\n\n/^\\p{sc=Mongolian}/utf\n    \\x{1802}\nNo match\n\n# Character not in script\n/^\\p{Mongolian}/utf\n    \\x{1166d}\nNo match\n\n# Base script check\n/^\\p{sc=Hiragana}/utf\n    \\x{3041}\n 0: \\x{3041}\n\n/^\\p{Script=Hira}/utf\n    \\x{1f200}\n 0: \\x{1f200}\n\n# Script extension check\n/^\\p{Hiragana}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{Script_Extensions=Hira}/utf\n    \\x{ff9f}\n 0: \\x{ff9f}\n\n# Script extension only character\n/^\\p{Hiragana}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{sc=Hiragana}/utf\n    \\x{3001}\nNo match\n\n# Character not in script\n/^\\p{Hiragana}/utf\n    \\x{1f201}\nNo match\n\n# Base script check\n/^\\p{sc=Katakana}/utf\n    \\x{30a1}\n 0: \\x{30a1}\n\n/^\\p{Script=Kana}/utf\n    \\x{1b167}\n 0: \\x{1b167}\n\n# Script extension check\n/^\\p{Katakana}/utf\n    \\x{305}\n 0: \\x{305}\n\n/^\\p{scx=Kana}/utf\n    \\x{ff9f}\n 0: \\x{ff9f}\n\n# Script extension only character\n/^\\p{Katakana}/utf\n    \\x{305}\n 0: \\x{305}\n\n/^\\p{sc=Katakana}/utf\n    \\x{305}\nNo match\n\n# Character not in script\n/^\\p{Katakana}/utf\n    \\x{1b168}\nNo match\n\n# Base script check\n/^\\p{sc=Bopomofo}/utf\n    \\x{2ea}\n 0: \\x{2ea}\n\n/^\\p{Script=Bopo}/utf\n    \\x{31bf}\n 0: \\x{31bf}\n\n# Script extension check\n/^\\p{Bopomofo}/utf\n    \\x{2c7}\n 0: \\x{2c7}\n\n/^\\p{Script_Extensions=Bopo}/utf\n    \\x{ff65}\n 0: \\x{ff65}\n\n# Script extension only character\n/^\\p{Bopomofo}/utf\n    \\x{2c7}\n 0: \\x{2c7}\n\n/^\\p{sc=Bopomofo}/utf\n    \\x{2c7}\nNo match\n\n# Character not in script\n/^\\p{Bopomofo}/utf\n    \\x{ff66}\nNo match\n\n# Base script check\n/^\\p{sc=Han}/utf\n    \\x{2e80}\n 0: \\x{2e80}\n\n/^\\p{Script=Hani}/utf\n    \\x{33479}\n 0: \\x{33479}\n\n# Script extension check\n/^\\p{Han}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{scx=Hani}/utf\n    \\x{1f251}\n 0: \\x{1f251}\n\n# Script extension only character\n/^\\p{Han}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Han}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Han}/utf\n    \\x{3347a}\nNo match\n\n# Base script check\n/^\\p{sc=Yi}/utf\n    \\x{a000}\n 0: \\x{a000}\n\n/^\\p{Script=Yiii}/utf\n    \\x{a4c6}\n 0: \\x{a4c6}\n\n# Script extension check\n/^\\p{Yi}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{Script_Extensions=Yiii}/utf\n    \\x{ff65}\n 0: \\x{ff65}\n\n# Script extension only character\n/^\\p{Yi}/utf\n    \\x{3001}\n 0: \\x{3001}\n\n/^\\p{sc=Yi}/utf\n    \\x{3001}\nNo match\n\n# Character not in script\n/^\\p{Yi}/utf\n    \\x{ff66}\nNo match\n\n# Base script check\n/^\\p{sc=Gothic}/utf\n    \\x{10330}\n 0: \\x{10330}\n\n/^\\p{Script=Goth}/utf\n    \\x{1034a}\n 0: \\x{1034a}\n\n# Script extension check\n/^\\p{Gothic}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{scx=Goth}/utf\n    \\x{331}\n 0: \\x{331}\n\n# Script extension only character\n/^\\p{Gothic}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Gothic}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Gothic}/utf\n    \\x{1034b}\nNo match\n\n# Base script check\n/^\\p{sc=Tagalog}/utf\n    \\x{1700}\n 0: \\x{1700}\n\n/^\\p{Script=Tglg}/utf\n    \\x{171f}\n 0: \\x{171f}\n\n# Script extension check\n/^\\p{Tagalog}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{Script_Extensions=Tglg}/utf\n    \\x{1736}\n 0: \\x{1736}\n\n# Script extension only character\n/^\\p{Tagalog}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{sc=Tagalog}/utf\n    \\x{1735}\nNo match\n\n# Character not in script\n/^\\p{Tagalog}/utf\n    \\x{1737}\nNo match\n\n# Base script check\n/^\\p{sc=Hanunoo}/utf\n    \\x{1720}\n 0: \\x{1720}\n\n/^\\p{Script=Hano}/utf\n    \\x{1734}\n 0: \\x{1734}\n\n# Script extension check\n/^\\p{Hanunoo}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{scx=Hano}/utf\n    \\x{1736}\n 0: \\x{1736}\n\n# Script extension only character\n/^\\p{Hanunoo}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{sc=Hanunoo}/utf\n    \\x{1735}\nNo match\n\n# Character not in script\n/^\\p{Hanunoo}/utf\n    \\x{1737}\nNo match\n\n# Base script check\n/^\\p{sc=Buhid}/utf\n    \\x{1740}\n 0: \\x{1740}\n\n/^\\p{Script=Buhd}/utf\n    \\x{1753}\n 0: \\x{1753}\n\n# Script extension check\n/^\\p{Buhid}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{Script_Extensions=Buhd}/utf\n    \\x{1736}\n 0: \\x{1736}\n\n# Script extension only character\n/^\\p{Buhid}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{sc=Buhid}/utf\n    \\x{1735}\nNo match\n\n# Character not in script\n/^\\p{Buhid}/utf\n    \\x{1754}\nNo match\n\n# Base script check\n/^\\p{sc=Tagbanwa}/utf\n    \\x{1760}\n 0: \\x{1760}\n\n/^\\p{Script=Tagb}/utf\n    \\x{1773}\n 0: \\x{1773}\n\n# Script extension check\n/^\\p{Tagbanwa}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{scx=Tagb}/utf\n    \\x{1736}\n 0: \\x{1736}\n\n# Script extension only character\n/^\\p{Tagbanwa}/utf\n    \\x{1735}\n 0: \\x{1735}\n\n/^\\p{sc=Tagbanwa}/utf\n    \\x{1735}\nNo match\n\n# Character not in script\n/^\\p{Tagbanwa}/utf\n    \\x{1774}\nNo match\n\n# Base script check\n/^\\p{sc=Limbu}/utf\n    \\x{1900}\n 0: \\x{1900}\n\n/^\\p{Script=Limb}/utf\n    \\x{194f}\n 0: \\x{194f}\n\n# Script extension check\n/^\\p{Limbu}/utf\n    \\x{965}\n 0: \\x{965}\n\n/^\\p{Script_Extensions=Limb}/utf\n    \\x{965}\n 0: \\x{965}\n\n# Script extension only character\n/^\\p{Limbu}/utf\n    \\x{965}\n 0: \\x{965}\n\n/^\\p{sc=Limbu}/utf\n    \\x{965}\nNo match\n\n# Character not in script\n/^\\p{Limbu}/utf\n    \\x{1950}\nNo match\n\n# Base script check\n/^\\p{sc=Tai_Le}/utf\n    \\x{1950}\n 0: \\x{1950}\n\n/^\\p{Script=Tale}/utf\n    \\x{1974}\n 0: \\x{1974}\n\n# Script extension check\n/^\\p{Tai_Le}/utf\n    \\x{300}\n 0: \\x{300}\n\n/^\\p{scx=Tale}/utf\n    \\x{1049}\n 0: \\x{1049}\n\n# Script extension only character\n/^\\p{Tai_Le}/utf\n    \\x{300}\n 0: \\x{300}\n\n/^\\p{sc=Tai_Le}/utf\n    \\x{300}\nNo match\n\n# Character not in script\n/^\\p{Tai_Le}/utf\n    \\x{1975}\nNo match\n\n# Base script check\n/^\\p{sc=Linear_B}/utf\n    \\x{10000}\n 0: \\x{10000}\n\n/^\\p{Script=Linb}/utf\n    \\x{100fa}\n 0: \\x{100fa}\n\n# Script extension check\n/^\\p{Linear_B}/utf\n    \\x{10100}\n 0: \\x{10100}\n\n/^\\p{Script_Extensions=Linb}/utf\n    \\x{1013f}\n 0: \\x{1013f}\n\n# Script extension only character\n/^\\p{Linear_B}/utf\n    \\x{10100}\n 0: \\x{10100}\n\n/^\\p{sc=Linear_B}/utf\n    \\x{10100}\nNo match\n\n# Character not in script\n/^\\p{Linear_B}/utf\n    \\x{10140}\nNo match\n\n# Base script check\n/^\\p{sc=Shavian}/utf\n    \\x{10450}\n 0: \\x{10450}\n\n/^\\p{Script=Shaw}/utf\n    \\x{1047f}\n 0: \\x{1047f}\n\n# Script extension check\n/^\\p{Shavian}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{scx=Shaw}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n# Script extension only character\n/^\\p{Shavian}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Shavian}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Shavian}/utf\n    \\x{10480}\nNo match\n\n# Base script check\n/^\\p{sc=Cypriot}/utf\n    \\x{10800}\n 0: \\x{10800}\n\n/^\\p{Script=Cprt}/utf\n    \\x{1083f}\n 0: \\x{1083f}\n\n# Script extension check\n/^\\p{Cypriot}/utf\n    \\x{10100}\n 0: \\x{10100}\n\n/^\\p{Script_Extensions=Cprt}/utf\n    \\x{1013f}\n 0: \\x{1013f}\n\n# Script extension only character\n/^\\p{Cypriot}/utf\n    \\x{10100}\n 0: \\x{10100}\n\n/^\\p{sc=Cypriot}/utf\n    \\x{10100}\nNo match\n\n# Character not in script\n/^\\p{Cypriot}/utf\n    \\x{10840}\nNo match\n\n# Base script check\n/^\\p{sc=Buginese}/utf\n    \\x{1a00}\n 0: \\x{1a00}\n\n/^\\p{Script=Bugi}/utf\n    \\x{1a1f}\n 0: \\x{1a1f}\n\n# Script extension check\n/^\\p{Buginese}/utf\n    \\x{a9cf}\n 0: \\x{a9cf}\n\n/^\\p{scx=Bugi}/utf\n    \\x{a9cf}\n 0: \\x{a9cf}\n\n# Script extension only character\n/^\\p{Buginese}/utf\n    \\x{a9cf}\n 0: \\x{a9cf}\n\n/^\\p{sc=Buginese}/utf\n    \\x{a9cf}\nNo match\n\n# Character not in script\n/^\\p{Buginese}/utf\n    \\x{a9d0}\nNo match\n\n# Base script check\n/^\\p{sc=Coptic}/utf\n    \\x{3e2}\n 0: \\x{3e2}\n\n/^\\p{Script=Copt}/utf\n    \\x{2cff}\n 0: \\x{2cff}\n\n# Script extension check\n/^\\p{Coptic}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{Script_Extensions=Copt}/utf\n    \\x{102fb}\n 0: \\x{102fb}\n\n# Script extension only character\n/^\\p{Coptic}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Coptic}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Coptic}/utf\n    \\x{102fc}\nNo match\n\n# Base script check\n/^\\p{sc=Glagolitic}/utf\n    \\x{2c00}\n 0: \\x{2c00}\n\n/^\\p{Script=Glag}/utf\n    \\x{1e02a}\n 0: \\x{1e02a}\n\n# Script extension check\n/^\\p{Glagolitic}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{scx=Glag}/utf\n    \\x{a66f}\n 0: \\x{a66f}\n\n# Script extension only character\n/^\\p{Glagolitic}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Glagolitic}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Glagolitic}/utf\n    \\x{1e02b}\nNo match\n\n# Base script check\n/^\\p{sc=Tifinagh}/utf\n    \\x{2d30}\n 0: \\x{2d30}\n\n/^\\p{Script=Tfng}/utf\n    \\x{2d7f}\n 0: \\x{2d7f}\n\n# Script extension check\n/^\\p{Tifinagh}/utf\n    \\x{302}\n 0: \\x{302}\n\n/^\\p{Script_Extensions=Tfng}/utf\n    \\x{323}\n 0: \\x{323}\n\n# Script extension only character\n/^\\p{Tifinagh}/utf\n    \\x{302}\n 0: \\x{302}\n\n/^\\p{sc=Tifinagh}/utf\n    \\x{302}\nNo match\n\n# Character not in script\n/^\\p{Tifinagh}/utf\n    \\x{2d80}\nNo match\n\n# Base script check\n/^\\p{sc=Syloti_Nagri}/utf\n    \\x{a800}\n 0: \\x{a800}\n\n/^\\p{Script=Sylo}/utf\n    \\x{a82c}\n 0: \\x{a82c}\n\n# Script extension check\n/^\\p{Syloti_Nagri}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{scx=Sylo}/utf\n    \\x{9ef}\n 0: \\x{9ef}\n\n# Script extension only character\n/^\\p{Syloti_Nagri}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{sc=Syloti_Nagri}/utf\n    \\x{964}\nNo match\n\n# Character not in script\n/^\\p{Syloti_Nagri}/utf\n    \\x{a82d}\nNo match\n\n# Base script check\n/^\\p{sc=Phags_Pa}/utf\n    \\x{a840}\n 0: \\x{a840}\n\n/^\\p{Script=Phag}/utf\n    \\x{a877}\n 0: \\x{a877}\n\n# Script extension check\n/^\\p{Phags_Pa}/utf\n    \\x{1802}\n 0: \\x{1802}\n\n/^\\p{Script_Extensions=Phag}/utf\n    \\x{3002}\n 0: \\x{3002}\n\n# Script extension only character\n/^\\p{Phags_Pa}/utf\n    \\x{1802}\n 0: \\x{1802}\n\n/^\\p{sc=Phags_Pa}/utf\n    \\x{1802}\nNo match\n\n# Character not in script\n/^\\p{Phags_Pa}/utf\n    \\x{a878}\nNo match\n\n# Base script check\n/^\\p{sc=Nko}/utf\n    \\x{7c0}\n 0: \\x{7c0}\n\n/^\\p{Script=Nkoo}/utf\n    \\x{7ff}\n 0: \\x{7ff}\n\n# Script extension check\n/^\\p{Nko}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{scx=Nkoo}/utf\n    \\x{fd3f}\n 0: \\x{fd3f}\n\n# Script extension only character\n/^\\p{Nko}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{sc=Nko}/utf\n    \\x{60c}\nNo match\n\n# Character not in script\n/^\\p{Nko}/utf\n    \\x{fd40}\nNo match\n\n# Base script check\n/^\\p{sc=Kayah_Li}/utf\n    \\x{a900}\n 0: \\x{a900}\n\n/^\\p{Script=Kali}/utf\n    \\x{a92f}\n 0: \\x{a92f}\n\n# Script extension check\n/^\\p{Kayah_Li}/utf\n    \\x{a92e}\n 0: \\x{a92e}\n\n/^\\p{Script_Extensions=Kali}/utf\n    \\x{a92e}\n 0: \\x{a92e}\n\n# Script extension only character\n/^\\p{Kayah_Li}/utf\n    \\x{a92e}\n 0: \\x{a92e}\n\n/^\\p{sc=Kayah_Li}/utf\n    \\x{a92e}\nNo match\n\n# Character not in script\n/^\\p{Kayah_Li}/utf\n    \\x{a930}\nNo match\n\n# Base script check\n/^\\p{sc=Lycian}/utf\n    \\x{10280}\n 0: \\x{10280}\n\n/^\\p{Script=Lyci}/utf\n    \\x{1029c}\n 0: \\x{1029c}\n\n# Script extension check\n/^\\p{Lycian}/utf\n    \\x{205a}\n 0: \\x{205a}\n\n/^\\p{scx=Lyci}/utf\n    \\x{205a}\n 0: \\x{205a}\n\n# Script extension only character\n/^\\p{Lycian}/utf\n    \\x{205a}\n 0: \\x{205a}\n\n/^\\p{sc=Lycian}/utf\n    \\x{205a}\nNo match\n\n# Character not in script\n/^\\p{Lycian}/utf\n    \\x{1029d}\nNo match\n\n# Base script check\n/^\\p{sc=Carian}/utf\n    \\x{102a0}\n 0: \\x{102a0}\n\n/^\\p{Script=Cari}/utf\n    \\x{102d0}\n 0: \\x{102d0}\n\n# Script extension check\n/^\\p{Carian}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{Script_Extensions=Cari}/utf\n    \\x{2e31}\n 0: \\x{2e31}\n\n# Script extension only character\n/^\\p{Carian}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Carian}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Carian}/utf\n    \\x{102d1}\nNo match\n\n# Base script check\n/^\\p{sc=Lydian}/utf\n    \\x{10920}\n 0: \\x{10920}\n\n/^\\p{Script=Lydi}/utf\n    \\x{1093f}\n 0: \\x{1093f}\n\n# Script extension check\n/^\\p{Lydian}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{scx=Lydi}/utf\n    \\x{2e31}\n 0: \\x{2e31}\n\n# Script extension only character\n/^\\p{Lydian}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Lydian}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Lydian}/utf\n    \\x{10940}\nNo match\n\n# Base script check\n/^\\p{sc=Avestan}/utf\n    \\x{10b00}\n 0: \\x{10b00}\n\n/^\\p{Script=Avst}/utf\n    \\x{10b3f}\n 0: \\x{10b3f}\n\n# Script extension check\n/^\\p{Avestan}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{Script_Extensions=Avst}/utf\n    \\x{2e31}\n 0: \\x{2e31}\n\n# Script extension only character\n/^\\p{Avestan}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Avestan}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Avestan}/utf\n    \\x{10b40}\nNo match\n\n# Base script check\n/^\\p{sc=Samaritan}/utf\n    \\x{800}\n 0: \\x{800}\n\n/^\\p{Script=Samr}/utf\n    \\x{83e}\n 0: \\x{83e}\n\n# Script extension check\n/^\\p{Samaritan}/utf\n    \\x{2e31}\n 0: \\x{2e31}\n\n/^\\p{scx=Samr}/utf\n    \\x{2e31}\n 0: \\x{2e31}\n\n# Script extension only character\n/^\\p{Samaritan}/utf\n    \\x{2e31}\n 0: \\x{2e31}\n\n/^\\p{sc=Samaritan}/utf\n    \\x{2e31}\nNo match\n\n# Character not in script\n/^\\p{Samaritan}/utf\n    \\x{2e32}\nNo match\n\n# Base script check\n/^\\p{sc=Lisu}/utf\n    \\x{a4d0}\n 0: \\x{a4d0}\n\n/^\\p{Script=Lisu}/utf\n    \\x{11fb0}\n 0: \\x{11fb0}\n\n# Script extension check\n/^\\p{Lisu}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n/^\\p{Script_Extensions=Lisu}/utf\n    \\x{300b}\n 0: \\x{300b}\n\n# Script extension only character\n/^\\p{Lisu}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n/^\\p{sc=Lisu}/utf\n    \\x{2bc}\nNo match\n\n# Character not in script\n/^\\p{Lisu}/utf\n    \\x{11fb1}\nNo match\n\n# Base script check\n/^\\p{sc=Javanese}/utf\n    \\x{a980}\n 0: \\x{a980}\n\n/^\\p{Script=Java}/utf\n    \\x{a9df}\n 0: \\x{a9df}\n\n# Script extension check\n/^\\p{Javanese}/utf\n    \\x{a9cf}\n 0: \\x{a9cf}\n\n/^\\p{scx=Java}/utf\n    \\x{a9cf}\n 0: \\x{a9cf}\n\n# Script extension only character\n/^\\p{Javanese}/utf\n    \\x{a9cf}\n 0: \\x{a9cf}\n\n/^\\p{sc=Javanese}/utf\n    \\x{a9cf}\nNo match\n\n# Character not in script\n/^\\p{Javanese}/utf\n    \\x{a9e0}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Turkic}/utf\n    \\x{10c00}\n 0: \\x{10c00}\n\n/^\\p{Script=Orkh}/utf\n    \\x{10c48}\n 0: \\x{10c48}\n\n# Script extension check\n/^\\p{Old_Turkic}/utf\n    \\x{205a}\n 0: \\x{205a}\n\n/^\\p{Script_Extensions=Orkh}/utf\n    \\x{2e30}\n 0: \\x{2e30}\n\n# Script extension only character\n/^\\p{Old_Turkic}/utf\n    \\x{205a}\n 0: \\x{205a}\n\n/^\\p{sc=Old_Turkic}/utf\n    \\x{205a}\nNo match\n\n# Character not in script\n/^\\p{Old_Turkic}/utf\n    \\x{10c49}\nNo match\n\n# Base script check\n/^\\p{sc=Kaithi}/utf\n    \\x{11080}\n 0: \\x{11080}\n\n/^\\p{Script=Kthi}/utf\n    \\x{110cd}\n 0: \\x{110cd}\n\n# Script extension check\n/^\\p{Kaithi}/utf\n    \\x{966}\n 0: \\x{966}\n\n/^\\p{scx=Kthi}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Kaithi}/utf\n    \\x{966}\n 0: \\x{966}\n\n/^\\p{sc=Kaithi}/utf\n    \\x{966}\nNo match\n\n# Character not in script\n/^\\p{Kaithi}/utf\n    \\x{110ce}\nNo match\n\n# Base script check\n/^\\p{sc=Mandaic}/utf\n    \\x{840}\n 0: \\x{840}\n\n/^\\p{Script=Mand}/utf\n    \\x{85e}\n 0: \\x{85e}\n\n# Script extension check\n/^\\p{Mandaic}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{Script_Extensions=Mand}/utf\n    \\x{640}\n 0: \\x{640}\n\n# Script extension only character\n/^\\p{Mandaic}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{sc=Mandaic}/utf\n    \\x{640}\nNo match\n\n# Character not in script\n/^\\p{Mandaic}/utf\n    \\x{85f}\nNo match\n\n# Base script check\n/^\\p{sc=Chakma}/utf\n    \\x{11100}\n 0: \\x{11100}\n\n/^\\p{Script=Cakm}/utf\n    \\x{11147}\n 0: \\x{11147}\n\n# Script extension check\n/^\\p{Chakma}/utf\n    \\x{9e6}\n 0: \\x{9e6}\n\n/^\\p{scx=Cakm}/utf\n    \\x{1049}\n 0: \\x{1049}\n\n# Script extension only character\n/^\\p{Chakma}/utf\n    \\x{9e6}\n 0: \\x{9e6}\n\n/^\\p{sc=Chakma}/utf\n    \\x{9e6}\nNo match\n\n# Character not in script\n/^\\p{Chakma}/utf\n    \\x{11148}\nNo match\n\n# Base script check\n/^\\p{sc=Meroitic_Hieroglyphs}/utf\n    \\x{10980}\n 0: \\x{10980}\n\n/^\\p{Script=Mero}/utf\n    \\x{1099f}\n 0: \\x{1099f}\n\n# Script extension check\n/^\\p{Meroitic_Hieroglyphs}/utf\n    \\x{205d}\n 0: \\x{205d}\n\n/^\\p{Script_Extensions=Mero}/utf\n    \\x{205d}\n 0: \\x{205d}\n\n# Script extension only character\n/^\\p{Meroitic_Hieroglyphs}/utf\n    \\x{205d}\n 0: \\x{205d}\n\n/^\\p{sc=Meroitic_Hieroglyphs}/utf\n    \\x{205d}\nNo match\n\n# Character not in script\n/^\\p{Meroitic_Hieroglyphs}/utf\n    \\x{109a0}\nNo match\n\n# Base script check\n/^\\p{sc=Sharada}/utf\n    \\x{11180}\n 0: \\x{11180}\n\n/^\\p{Script=Shrd}/utf\n    \\x{11b67}\n 0: \\x{11b67}\n\n# Script extension check\n/^\\p{Sharada}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Shrd}/utf\n    \\x{a838}\n 0: \\x{a838}\n\n# Script extension only character\n/^\\p{Sharada}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{sc=Sharada}/utf\n    \\x{951}\nNo match\n\n# Character not in script\n/^\\p{Sharada}/utf\n    \\x{11b68}\nNo match\n\n# Base script check\n/^\\p{sc=Takri}/utf\n    \\x{11680}\n 0: \\x{11680}\n\n/^\\p{Script=Takr}/utf\n    \\x{116c9}\n 0: \\x{116c9}\n\n# Script extension check\n/^\\p{Takri}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{Script_Extensions=Takr}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Takri}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{sc=Takri}/utf\n    \\x{964}\nNo match\n\n# Character not in script\n/^\\p{Takri}/utf\n    \\x{116ca}\nNo match\n\n# Base script check\n/^\\p{sc=Caucasian_Albanian}/utf\n    \\x{10530}\n 0: \\x{10530}\n\n/^\\p{Script=Aghb}/utf\n    \\x{1056f}\n 0: \\x{1056f}\n\n# Script extension check\n/^\\p{Caucasian_Albanian}/utf\n    \\x{304}\n 0: \\x{304}\n\n/^\\p{scx=Aghb}/utf\n    \\x{35e}\n 0: \\x{35e}\n\n# Script extension only character\n/^\\p{Caucasian_Albanian}/utf\n    \\x{304}\n 0: \\x{304}\n\n/^\\p{sc=Caucasian_Albanian}/utf\n    \\x{304}\nNo match\n\n# Character not in script\n/^\\p{Caucasian_Albanian}/utf\n    \\x{10570}\nNo match\n\n# Base script check\n/^\\p{sc=Duployan}/utf\n    \\x{1bc00}\n 0: \\x{1bc00}\n\n/^\\p{Script=Dupl}/utf\n    \\x{1bc9f}\n 0: \\x{1bc9f}\n\n# Script extension check\n/^\\p{Duployan}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{Script_Extensions=Dupl}/utf\n    \\x{1bca3}\n 0: \\x{1bca3}\n\n# Script extension only character\n/^\\p{Duployan}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Duployan}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Duployan}/utf\n    \\x{1bca4}\nNo match\n\n# Base script check\n/^\\p{sc=Elbasan}/utf\n    \\x{10500}\n 0: \\x{10500}\n\n/^\\p{Script=Elba}/utf\n    \\x{10527}\n 0: \\x{10527}\n\n# Script extension check\n/^\\p{Elbasan}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{scx=Elba}/utf\n    \\x{305}\n 0: \\x{305}\n\n# Script extension only character\n/^\\p{Elbasan}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Elbasan}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Elbasan}/utf\n    \\x{10528}\nNo match\n\n# Base script check\n/^\\p{sc=Grantha}/utf\n    \\x{11300}\n 0: \\x{11300}\n\n/^\\p{Script=Gran}/utf\n    \\x{11374}\n 0: \\x{11374}\n\n# Script extension check\n/^\\p{Grantha}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{Script_Extensions=Gran}/utf\n    \\x{11fd3}\n 0: \\x{11fd3}\n\n# Script extension only character\n/^\\p{Grantha}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{sc=Grantha}/utf\n    \\x{951}\nNo match\n\n# Character not in script\n/^\\p{Grantha}/utf\n    \\x{11fd4}\nNo match\n\n# Base script check\n/^\\p{sc=Khojki}/utf\n    \\x{11200}\n 0: \\x{11200}\n\n/^\\p{Script=Khoj}/utf\n    \\x{11241}\n 0: \\x{11241}\n\n# Script extension check\n/^\\p{Khojki}/utf\n    \\x{ae6}\n 0: \\x{ae6}\n\n/^\\p{scx=Khoj}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Khojki}/utf\n    \\x{ae6}\n 0: \\x{ae6}\n\n/^\\p{sc=Khojki}/utf\n    \\x{ae6}\nNo match\n\n# Character not in script\n/^\\p{Khojki}/utf\n    \\x{11242}\nNo match\n\n# Base script check\n/^\\p{sc=Linear_A}/utf\n    \\x{10600}\n 0: \\x{10600}\n\n/^\\p{Script=Lina}/utf\n    \\x{10767}\n 0: \\x{10767}\n\n# Script extension check\n/^\\p{Linear_A}/utf\n    \\x{10107}\n 0: \\x{10107}\n\n/^\\p{Script_Extensions=Lina}/utf\n    \\x{10133}\n 0: \\x{10133}\n\n# Script extension only character\n/^\\p{Linear_A}/utf\n    \\x{10107}\n 0: \\x{10107}\n\n/^\\p{sc=Linear_A}/utf\n    \\x{10107}\nNo match\n\n# Character not in script\n/^\\p{Linear_A}/utf\n    \\x{10768}\nNo match\n\n# Base script check\n/^\\p{sc=Mahajani}/utf\n    \\x{11150}\n 0: \\x{11150}\n\n/^\\p{Script=Mahj}/utf\n    \\x{11176}\n 0: \\x{11176}\n\n# Script extension check\n/^\\p{Mahajani}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{scx=Mahj}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Mahajani}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Mahajani}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Mahajani}/utf\n    \\x{11177}\nNo match\n\n# Base script check\n/^\\p{sc=Manichaean}/utf\n    \\x{10ac0}\n 0: \\x{10ac0}\n\n/^\\p{Script=Mani}/utf\n    \\x{10af6}\n 0: \\x{10af6}\n\n# Script extension check\n/^\\p{Manichaean}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{Script_Extensions=Mani}/utf\n    \\x{10af2}\n 0: \\x{10af2}\n\n# Script extension only character\n/^\\p{Manichaean}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{sc=Manichaean}/utf\n    \\x{640}\nNo match\n\n# Character not in script\n/^\\p{Manichaean}/utf\n    \\x{10af7}\nNo match\n\n# Base script check\n/^\\p{sc=Modi}/utf\n    \\x{11600}\n 0: \\x{11600}\n\n/^\\p{Script=Modi}/utf\n    \\x{11659}\n 0: \\x{11659}\n\n# Script extension check\n/^\\p{Modi}/utf\n    \\x{a830}\n 0: \\x{a830}\n\n/^\\p{scx=Modi}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Modi}/utf\n    \\x{a830}\n 0: \\x{a830}\n\n/^\\p{sc=Modi}/utf\n    \\x{a830}\nNo match\n\n# Character not in script\n/^\\p{Modi}/utf\n    \\x{1165a}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Permic}/utf\n    \\x{10350}\n 0: \\x{10350}\n\n/^\\p{Script=Perm}/utf\n    \\x{1037a}\n 0: \\x{1037a}\n\n# Script extension check\n/^\\p{Old_Permic}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{Script_Extensions=Perm}/utf\n    \\x{483}\n 0: \\x{483}\n\n# Script extension only character\n/^\\p{Old_Permic}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Old_Permic}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Old_Permic}/utf\n    \\x{1037b}\nNo match\n\n# Base script check\n/^\\p{sc=Psalter_Pahlavi}/utf\n    \\x{10b80}\n 0: \\x{10b80}\n\n/^\\p{Script=Phlp}/utf\n    \\x{10baf}\n 0: \\x{10baf}\n\n# Script extension check\n/^\\p{Psalter_Pahlavi}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{scx=Phlp}/utf\n    \\x{640}\n 0: \\x{640}\n\n# Script extension only character\n/^\\p{Psalter_Pahlavi}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{sc=Psalter_Pahlavi}/utf\n    \\x{640}\nNo match\n\n# Character not in script\n/^\\p{Psalter_Pahlavi}/utf\n    \\x{10bb0}\nNo match\n\n# Base script check\n/^\\p{sc=Khudawadi}/utf\n    \\x{112b0}\n 0: \\x{112b0}\n\n/^\\p{Script=Sind}/utf\n    \\x{112f9}\n 0: \\x{112f9}\n\n# Script extension check\n/^\\p{Khudawadi}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{Script_Extensions=Sind}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Khudawadi}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{sc=Khudawadi}/utf\n    \\x{964}\nNo match\n\n# Character not in script\n/^\\p{Khudawadi}/utf\n    \\x{112fa}\nNo match\n\n# Base script check\n/^\\p{sc=Tirhuta}/utf\n    \\x{11480}\n 0: \\x{11480}\n\n/^\\p{Script=Tirh}/utf\n    \\x{114d9}\n 0: \\x{114d9}\n\n# Script extension check\n/^\\p{Tirhuta}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Tirh}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Tirhuta}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{sc=Tirhuta}/utf\n    \\x{951}\nNo match\n\n# Character not in script\n/^\\p{Tirhuta}/utf\n    \\x{114da}\nNo match\n\n# Base script check\n/^\\p{sc=Multani}/utf\n    \\x{11280}\n 0: \\x{11280}\n\n/^\\p{Script=Mult}/utf\n    \\x{112a9}\n 0: \\x{112a9}\n\n# Script extension check\n/^\\p{Multani}/utf\n    \\x{a66}\n 0: \\x{a66}\n\n/^\\p{Script_Extensions=Mult}/utf\n    \\x{a6f}\n 0: \\x{a6f}\n\n# Script extension only character\n/^\\p{Multani}/utf\n    \\x{a66}\n 0: \\x{a66}\n\n/^\\p{sc=Multani}/utf\n    \\x{a66}\nNo match\n\n# Character not in script\n/^\\p{Multani}/utf\n    \\x{112aa}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Hungarian}/utf\n    \\x{10c80}\n 0: \\x{10c80}\n\n/^\\p{Script=Hung}/utf\n    \\x{10cff}\n 0: \\x{10cff}\n\n# Script extension check\n/^\\p{Old_Hungarian}/utf\n    \\x{205a}\n 0: \\x{205a}\n\n/^\\p{scx=Hung}/utf\n    \\x{2e41}\n 0: \\x{2e41}\n\n# Script extension only character\n/^\\p{Old_Hungarian}/utf\n    \\x{205a}\n 0: \\x{205a}\n\n/^\\p{sc=Old_Hungarian}/utf\n    \\x{205a}\nNo match\n\n# Character not in script\n/^\\p{Old_Hungarian}/utf\n    \\x{10d00}\nNo match\n\n# Base script check\n/^\\p{sc=Adlam}/utf\n    \\x{1e900}\n 0: \\x{1e900}\n\n/^\\p{Script=Adlm}/utf\n    \\x{1e95f}\n 0: \\x{1e95f}\n\n# Script extension check\n/^\\p{Adlam}/utf\n    \\x{61f}\n 0: \\x{61f}\n\n/^\\p{Script_Extensions=Adlm}/utf\n    \\x{2e41}\n 0: \\x{2e41}\n\n# Script extension only character\n/^\\p{Adlam}/utf\n    \\x{61f}\n 0: \\x{61f}\n\n/^\\p{sc=Adlam}/utf\n    \\x{61f}\nNo match\n\n# Character not in script\n/^\\p{Adlam}/utf\n    \\x{1e960}\nNo match\n\n# Base script check\n/^\\p{sc=Newa}/utf\n    \\x{11400}\n 0: \\x{11400}\n\n/^\\p{Script=Newa}/utf\n    \\x{11461}\n 0: \\x{11461}\n\n# Script extension check\n/^\\p{Newa}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Newa}/utf\n    \\x{1ced}\n 0: \\x{1ced}\n\n# Script extension only character\n/^\\p{Newa}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{sc=Newa}/utf\n    \\x{951}\nNo match\n\n# Character not in script\n/^\\p{Newa}/utf\n    \\x{11462}\nNo match\n\n# Base script check\n/^\\p{sc=Osage}/utf\n    \\x{104b0}\n 0: \\x{104b0}\n\n/^\\p{Script=Osge}/utf\n    \\x{104fb}\n 0: \\x{104fb}\n\n# Script extension check\n/^\\p{Osage}/utf\n    \\x{301}\n 0: \\x{301}\n\n/^\\p{Script_Extensions=Osge}/utf\n    \\x{358}\n 0: \\x{358}\n\n# Script extension only character\n/^\\p{Osage}/utf\n    \\x{301}\n 0: \\x{301}\n\n/^\\p{sc=Osage}/utf\n    \\x{301}\nNo match\n\n# Character not in script\n/^\\p{Osage}/utf\n    \\x{104fc}\nNo match\n\n# Base script check\n/^\\p{sc=Tangut}/utf\n    \\x{16fe0}\n 0: \\x{16fe0}\n\n/^\\p{Script=Tang}/utf\n    \\x{18df2}\n 0: \\x{18df2}\n\n# Script extension check\n/^\\p{Tangut}/utf\n    \\x{2ff0}\n 0: \\x{2ff0}\n\n/^\\p{scx=Tang}/utf\n    \\x{31ef}\n 0: \\x{31ef}\n\n# Script extension only character\n/^\\p{Tangut}/utf\n    \\x{2ff0}\n 0: \\x{2ff0}\n\n/^\\p{sc=Tangut}/utf\n    \\x{2ff0}\nNo match\n\n# Character not in script\n/^\\p{Tangut}/utf\n    \\x{18df3}\nNo match\n\n# Base script check\n/^\\p{sc=Masaram_Gondi}/utf\n    \\x{11d00}\n 0: \\x{11d00}\n\n/^\\p{Script=Gonm}/utf\n    \\x{11d59}\n 0: \\x{11d59}\n\n# Script extension check\n/^\\p{Masaram_Gondi}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{Script_Extensions=Gonm}/utf\n    \\x{965}\n 0: \\x{965}\n\n# Script extension only character\n/^\\p{Masaram_Gondi}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{sc=Masaram_Gondi}/utf\n    \\x{964}\nNo match\n\n# Character not in script\n/^\\p{Masaram_Gondi}/utf\n    \\x{11d5a}\nNo match\n\n# Base script check\n/^\\p{sc=Dogra}/utf\n    \\x{11800}\n 0: \\x{11800}\n\n/^\\p{Script=Dogr}/utf\n    \\x{1183b}\n 0: \\x{1183b}\n\n# Script extension check\n/^\\p{Dogra}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{scx=Dogr}/utf\n    \\x{a839}\n 0: \\x{a839}\n\n# Script extension only character\n/^\\p{Dogra}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{sc=Dogra}/utf\n    \\x{964}\nNo match\n\n# Character not in script\n/^\\p{Dogra}/utf\n    \\x{1183c}\nNo match\n\n# Base script check\n/^\\p{sc=Gunjala_Gondi}/utf\n    \\x{11d60}\n 0: \\x{11d60}\n\n/^\\p{Script=Gong}/utf\n    \\x{11da9}\n 0: \\x{11da9}\n\n# Script extension check\n/^\\p{Gunjala_Gondi}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{Script_Extensions=Gong}/utf\n    \\x{965}\n 0: \\x{965}\n\n# Script extension only character\n/^\\p{Gunjala_Gondi}/utf\n    \\x{b7}\n 0: \\x{b7}\n\n/^\\p{sc=Gunjala_Gondi}/utf\n    \\x{b7}\nNo match\n\n# Character not in script\n/^\\p{Gunjala_Gondi}/utf\n    \\x{11daa}\nNo match\n\n# Base script check\n/^\\p{sc=Hanifi_Rohingya}/utf\n    \\x{10d00}\n 0: \\x{10d00}\n\n/^\\p{Script=Rohg}/utf\n    \\x{10d39}\n 0: \\x{10d39}\n\n# Script extension check\n/^\\p{Hanifi_Rohingya}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{scx=Rohg}/utf\n    \\x{6d4}\n 0: \\x{6d4}\n\n# Script extension only character\n/^\\p{Hanifi_Rohingya}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{sc=Hanifi_Rohingya}/utf\n    \\x{60c}\nNo match\n\n# Character not in script\n/^\\p{Hanifi_Rohingya}/utf\n    \\x{10d3a}\nNo match\n\n# Base script check\n/^\\p{sc=Sogdian}/utf\n    \\x{10f30}\n 0: \\x{10f30}\n\n/^\\p{Script=Sogd}/utf\n    \\x{10f59}\n 0: \\x{10f59}\n\n# Script extension check\n/^\\p{Sogdian}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{Script_Extensions=Sogd}/utf\n    \\x{640}\n 0: \\x{640}\n\n# Script extension only character\n/^\\p{Sogdian}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{sc=Sogdian}/utf\n    \\x{640}\nNo match\n\n# Character not in script\n/^\\p{Sogdian}/utf\n    \\x{10f5a}\nNo match\n\n# Base script check\n/^\\p{sc=Nandinagari}/utf\n    \\x{119a0}\n 0: \\x{119a0}\n\n/^\\p{Script=Nand}/utf\n    \\x{119e4}\n 0: \\x{119e4}\n\n# Script extension check\n/^\\p{Nandinagari}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{scx=Nand}/utf\n    \\x{a835}\n 0: \\x{a835}\n\n# Script extension only character\n/^\\p{Nandinagari}/utf\n    \\x{951}\n 0: \\x{951}\n\n/^\\p{sc=Nandinagari}/utf\n    \\x{951}\nNo match\n\n# Character not in script\n/^\\p{Nandinagari}/utf\n    \\x{119e5}\nNo match\n\n# Base script check\n/^\\p{sc=Yezidi}/utf\n    \\x{10e80}\n 0: \\x{10e80}\n\n/^\\p{Script=Yezi}/utf\n    \\x{10eb1}\n 0: \\x{10eb1}\n\n# Script extension check\n/^\\p{Yezidi}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{Script_Extensions=Yezi}/utf\n    \\x{669}\n 0: \\x{669}\n\n# Script extension only character\n/^\\p{Yezidi}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{sc=Yezidi}/utf\n    \\x{60c}\nNo match\n\n# Character not in script\n/^\\p{Yezidi}/utf\n    \\x{10eb2}\nNo match\n\n# Base script check\n/^\\p{sc=Cypro_Minoan}/utf\n    \\x{12f90}\n 0: \\x{12f90}\n\n/^\\p{Script=Cpmn}/utf\n    \\x{12ff2}\n 0: \\x{12ff2}\n\n# Script extension check\n/^\\p{Cypro_Minoan}/utf\n    \\x{10100}\n 0: \\x{10100}\n\n/^\\p{scx=Cpmn}/utf\n    \\x{10101}\n 0: \\x{10101}\n\n# Script extension only character\n/^\\p{Cypro_Minoan}/utf\n    \\x{10100}\n 0: \\x{10100}\n\n/^\\p{sc=Cypro_Minoan}/utf\n    \\x{10100}\nNo match\n\n# Character not in script\n/^\\p{Cypro_Minoan}/utf\n    \\x{12ff3}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Uyghur}/utf\n    \\x{10f70}\n 0: \\x{10f70}\n\n/^\\p{Script=Ougr}/utf\n    \\x{10f89}\n 0: \\x{10f89}\n\n# Script extension check\n/^\\p{Old_Uyghur}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{Script_Extensions=Ougr}/utf\n    \\x{10af2}\n 0: \\x{10af2}\n\n# Script extension only character\n/^\\p{Old_Uyghur}/utf\n    \\x{640}\n 0: \\x{640}\n\n/^\\p{sc=Old_Uyghur}/utf\n    \\x{640}\nNo match\n\n# Character not in script\n/^\\p{Old_Uyghur}/utf\n    \\x{10f8a}\nNo match\n\n# Base script check\n/^\\p{sc=Toto}/utf\n    \\x{1e290}\n 0: \\x{1e290}\n\n/^\\p{Script=Toto}/utf\n    \\x{1e2ae}\n 0: \\x{1e2ae}\n\n# Script extension check\n/^\\p{Toto}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n/^\\p{scx=Toto}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n# Script extension only character\n/^\\p{Toto}/utf\n    \\x{2bc}\n 0: \\x{2bc}\n\n/^\\p{sc=Toto}/utf\n    \\x{2bc}\nNo match\n\n# Character not in script\n/^\\p{Toto}/utf\n    \\x{1e2af}\nNo match\n\n# Base script check\n/^\\p{sc=Garay}/utf\n    \\x{10d40}\n 0: \\x{10d40}\n\n/^\\p{Script=Gara}/utf\n    \\x{10d8f}\n 0: \\x{10d8f}\n\n# Script extension check\n/^\\p{Garay}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{Script_Extensions=Gara}/utf\n    \\x{61f}\n 0: \\x{61f}\n\n# Script extension only character\n/^\\p{Garay}/utf\n    \\x{60c}\n 0: \\x{60c}\n\n/^\\p{sc=Garay}/utf\n    \\x{60c}\nNo match\n\n# Character not in script\n/^\\p{Garay}/utf\n    \\x{10d90}\nNo match\n\n# Base script check\n/^\\p{sc=Gurung_Khema}/utf\n    \\x{16100}\n 0: \\x{16100}\n\n/^\\p{Script=Gukh}/utf\n    \\x{16139}\n 0: \\x{16139}\n\n# Script extension check\n/^\\p{Gurung_Khema}/utf\n    \\x{965}\n 0: \\x{965}\n\n/^\\p{scx=Gukh}/utf\n    \\x{965}\n 0: \\x{965}\n\n# Script extension only character\n/^\\p{Gurung_Khema}/utf\n    \\x{965}\n 0: \\x{965}\n\n/^\\p{sc=Gurung_Khema}/utf\n    \\x{965}\nNo match\n\n# Character not in script\n/^\\p{Gurung_Khema}/utf\n    \\x{1613a}\nNo match\n\n# Base script check\n/^\\p{sc=Ol_Onal}/utf\n    \\x{1e5d0}\n 0: \\x{1e5d0}\n\n/^\\p{Script=Onao}/utf\n    \\x{1e5ff}\n 0: \\x{1e5ff}\n\n# Script extension check\n/^\\p{Ol_Onal}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{Script_Extensions=Onao}/utf\n    \\x{965}\n 0: \\x{965}\n\n# Script extension only character\n/^\\p{Ol_Onal}/utf\n    \\x{964}\n 0: \\x{964}\n\n/^\\p{sc=Ol_Onal}/utf\n    \\x{964}\nNo match\n\n# Character not in script\n/^\\p{Ol_Onal}/utf\n    \\x{1e600}\nNo match\n\n# Base script check\n/^\\p{sc=Sunuwar}/utf\n    \\x{11bc0}\n 0: \\x{11bc0}\n\n/^\\p{Script=Sunu}/utf\n    \\x{11bf9}\n 0: \\x{11bf9}\n\n# Script extension check\n/^\\p{Sunuwar}/utf\n    \\x{300}\n 0: \\x{300}\n\n/^\\p{scx=Sunu}/utf\n    \\x{331}\n 0: \\x{331}\n\n# Script extension only character\n/^\\p{Sunuwar}/utf\n    \\x{300}\n 0: \\x{300}\n\n/^\\p{sc=Sunuwar}/utf\n    \\x{300}\nNo match\n\n# Character not in script\n/^\\p{Sunuwar}/utf\n    \\x{11bfa}\nNo match\n\n# Base script check\n/^\\p{sc=Todhri}/utf\n    \\x{105c0}\n 0: \\x{105c0}\n\n/^\\p{Script=Todr}/utf\n    \\x{105f3}\n 0: \\x{105f3}\n\n# Script extension check\n/^\\p{Todhri}/utf\n    \\x{301}\n 0: \\x{301}\n\n/^\\p{Script_Extensions=Todr}/utf\n    \\x{35e}\n 0: \\x{35e}\n\n# Script extension only character\n/^\\p{Todhri}/utf\n    \\x{301}\n 0: \\x{301}\n\n/^\\p{sc=Todhri}/utf\n    \\x{301}\nNo match\n\n# Character not in script\n/^\\p{Todhri}/utf\n    \\x{105f4}\nNo match\n\n# Base script check\n/^\\p{sc=Tulu_Tigalari}/utf\n    \\x{11380}\n 0: \\x{11380}\n\n/^\\p{Script=Tutg}/utf\n    \\x{113e2}\n 0: \\x{113e2}\n\n# Script extension check\n/^\\p{Tulu_Tigalari}/utf\n    \\x{ce6}\n 0: \\x{ce6}\n\n/^\\p{scx=Tutg}/utf\n    \\x{a8f1}\n 0: \\x{a8f1}\n\n# Script extension only character\n/^\\p{Tulu_Tigalari}/utf\n    \\x{ce6}\n 0: \\x{ce6}\n\n/^\\p{sc=Tulu_Tigalari}/utf\n    \\x{ce6}\nNo match\n\n# Character not in script\n/^\\p{Tulu_Tigalari}/utf\n    \\x{113e3}\nNo match\n\n# Base script check\n/^\\p{sc=Common}/utf\n    \\x{00}\n 0: \\x{00}\n\n/^\\p{Script=Zyyy}/utf\n    \\x{e007f}\n 0: \\x{e007f}\n\n# Character not in script\n/^\\p{Common}/utf\n    \\x{e0080}\nNo match\n\n# Base script check\n/^\\p{sc=Lao}/utf\n    \\x{e81}\n 0: \\x{e81}\n\n/^\\p{Script=Laoo}/utf\n    \\x{edf}\n 0: \\x{edf}\n\n# Character not in script\n/^\\p{Lao}/utf\n    \\x{ee0}\nNo match\n\n# Base script check\n/^\\p{sc=Canadian_Aboriginal}/utf\n    \\x{1400}\n 0: \\x{1400}\n\n/^\\p{Script=Cans}/utf\n    \\x{11abf}\n 0: \\x{11abf}\n\n# Character not in script\n/^\\p{Canadian_Aboriginal}/utf\n    \\x{11ac0}\nNo match\n\n# Base script check\n/^\\p{sc=Ogham}/utf\n    \\x{1680}\n 0: \\x{1680}\n\n/^\\p{Script=Ogam}/utf\n    \\x{169c}\n 0: \\x{169c}\n\n# Character not in script\n/^\\p{Ogham}/utf\n    \\x{169d}\nNo match\n\n# Base script check\n/^\\p{sc=Khmer}/utf\n    \\x{1780}\n 0: \\x{1780}\n\n/^\\p{Script=Khmr}/utf\n    \\x{19ff}\n 0: \\x{19ff}\n\n# Character not in script\n/^\\p{Khmer}/utf\n    \\x{1a00}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Italic}/utf\n    \\x{10300}\n 0: \\x{10300}\n\n/^\\p{Script=Ital}/utf\n    \\x{1032f}\n 0: \\x{1032f}\n\n# Character not in script\n/^\\p{Old_Italic}/utf\n    \\x{10330}\nNo match\n\n# Base script check\n/^\\p{sc=Deseret}/utf\n    \\x{10400}\n 0: \\x{10400}\n\n/^\\p{Script=Dsrt}/utf\n    \\x{1044f}\n 0: \\x{1044f}\n\n# Character not in script\n/^\\p{Deseret}/utf\n    \\x{10450}\nNo match\n\n# Base script check\n/^\\p{sc=Inherited}/utf\n    \\x{300}\n 0: \\x{300}\n\n/^\\p{Script=Zinh}/utf\n    \\x{e01ef}\n 0: \\x{e01ef}\n\n# Character not in script\n/^\\p{Inherited}/utf\n    \\x{e01f0}\nNo match\n\n# Base script check\n/^\\p{sc=Ugaritic}/utf\n    \\x{10380}\n 0: \\x{10380}\n\n/^\\p{Script=Ugar}/utf\n    \\x{1039f}\n 0: \\x{1039f}\n\n# Character not in script\n/^\\p{Ugaritic}/utf\n    \\x{103a0}\nNo match\n\n# Base script check\n/^\\p{sc=Osmanya}/utf\n    \\x{10480}\n 0: \\x{10480}\n\n/^\\p{Script=Osma}/utf\n    \\x{104a9}\n 0: \\x{104a9}\n\n# Character not in script\n/^\\p{Osmanya}/utf\n    \\x{104aa}\nNo match\n\n# Base script check\n/^\\p{sc=Braille}/utf\n    \\x{2800}\n 0: \\x{2800}\n\n/^\\p{Script=Brai}/utf\n    \\x{28ff}\n 0: \\x{28ff}\n\n# Character not in script\n/^\\p{Braille}/utf\n    \\x{2900}\nNo match\n\n# Base script check\n/^\\p{sc=New_Tai_Lue}/utf\n    \\x{1980}\n 0: \\x{1980}\n\n/^\\p{Script=Talu}/utf\n    \\x{19df}\n 0: \\x{19df}\n\n# Character not in script\n/^\\p{New_Tai_Lue}/utf\n    \\x{19e0}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Persian}/utf\n    \\x{103a0}\n 0: \\x{103a0}\n\n/^\\p{Script=Xpeo}/utf\n    \\x{103d5}\n 0: \\x{103d5}\n\n# Character not in script\n/^\\p{Old_Persian}/utf\n    \\x{103d6}\nNo match\n\n# Base script check\n/^\\p{sc=Kharoshthi}/utf\n    \\x{10a00}\n 0: \\x{10a00}\n\n/^\\p{Script=Khar}/utf\n    \\x{10a58}\n 0: \\x{10a58}\n\n# Character not in script\n/^\\p{Kharoshthi}/utf\n    \\x{10a59}\nNo match\n\n# Base script check\n/^\\p{sc=Balinese}/utf\n    \\x{1b00}\n 0: \\x{1b00}\n\n/^\\p{Script=Bali}/utf\n    \\x{1b7f}\n 0: \\x{1b7f}\n\n# Character not in script\n/^\\p{Balinese}/utf\n    \\x{1b80}\nNo match\n\n# Base script check\n/^\\p{sc=Cuneiform}/utf\n    \\x{12000}\n 0: \\x{12000}\n\n/^\\p{Script=Xsux}/utf\n    \\x{12543}\n 0: \\x{12543}\n\n# Character not in script\n/^\\p{Cuneiform}/utf\n    \\x{12544}\nNo match\n\n# Base script check\n/^\\p{sc=Phoenician}/utf\n    \\x{10900}\n 0: \\x{10900}\n\n/^\\p{Script=Phnx}/utf\n    \\x{1091f}\n 0: \\x{1091f}\n\n# Character not in script\n/^\\p{Phoenician}/utf\n    \\x{10920}\nNo match\n\n# Base script check\n/^\\p{sc=Sundanese}/utf\n    \\x{1b80}\n 0: \\x{1b80}\n\n/^\\p{Script=Sund}/utf\n    \\x{1cc7}\n 0: \\x{1cc7}\n\n# Character not in script\n/^\\p{Sundanese}/utf\n    \\x{1cc8}\nNo match\n\n# Base script check\n/^\\p{sc=Lepcha}/utf\n    \\x{1c00}\n 0: \\x{1c00}\n\n/^\\p{Script=Lepc}/utf\n    \\x{1c4f}\n 0: \\x{1c4f}\n\n# Character not in script\n/^\\p{Lepcha}/utf\n    \\x{1c50}\nNo match\n\n# Base script check\n/^\\p{sc=Ol_Chiki}/utf\n    \\x{1c50}\n 0: \\x{1c50}\n\n/^\\p{Script=Olck}/utf\n    \\x{1c7f}\n 0: \\x{1c7f}\n\n# Character not in script\n/^\\p{Ol_Chiki}/utf\n    \\x{1c80}\nNo match\n\n# Base script check\n/^\\p{sc=Vai}/utf\n    \\x{a500}\n 0: \\x{a500}\n\n/^\\p{Script=Vaii}/utf\n    \\x{a62b}\n 0: \\x{a62b}\n\n# Character not in script\n/^\\p{Vai}/utf\n    \\x{a62c}\nNo match\n\n# Base script check\n/^\\p{sc=Saurashtra}/utf\n    \\x{a880}\n 0: \\x{a880}\n\n/^\\p{Script=Saur}/utf\n    \\x{a8d9}\n 0: \\x{a8d9}\n\n# Character not in script\n/^\\p{Saurashtra}/utf\n    \\x{a8da}\nNo match\n\n# Base script check\n/^\\p{sc=Rejang}/utf\n    \\x{a930}\n 0: \\x{a930}\n\n/^\\p{Script=Rjng}/utf\n    \\x{a95f}\n 0: \\x{a95f}\n\n# Character not in script\n/^\\p{Rejang}/utf\n    \\x{a960}\nNo match\n\n# Base script check\n/^\\p{sc=Cham}/utf\n    \\x{aa00}\n 0: \\x{aa00}\n\n/^\\p{Script=Cham}/utf\n    \\x{aa5f}\n 0: \\x{aa5f}\n\n# Character not in script\n/^\\p{Cham}/utf\n    \\x{aa60}\nNo match\n\n# Base script check\n/^\\p{sc=Tai_Tham}/utf\n    \\x{1a20}\n 0: \\x{1a20}\n\n/^\\p{Script=Lana}/utf\n    \\x{1aad}\n 0: \\x{1aad}\n\n# Character not in script\n/^\\p{Tai_Tham}/utf\n    \\x{1aae}\nNo match\n\n# Base script check\n/^\\p{sc=Tai_Viet}/utf\n    \\x{aa80}\n 0: \\x{aa80}\n\n/^\\p{Script=Tavt}/utf\n    \\x{aadf}\n 0: \\x{aadf}\n\n# Character not in script\n/^\\p{Tai_Viet}/utf\n    \\x{aae0}\nNo match\n\n# Base script check\n/^\\p{sc=Egyptian_Hieroglyphs}/utf\n    \\x{13000}\n 0: \\x{13000}\n\n/^\\p{Script=Egyp}/utf\n    \\x{143fa}\n 0: \\x{143fa}\n\n# Character not in script\n/^\\p{Egyptian_Hieroglyphs}/utf\n    \\x{143fb}\nNo match\n\n# Base script check\n/^\\p{sc=Bamum}/utf\n    \\x{a6a0}\n 0: \\x{a6a0}\n\n/^\\p{Script=Bamu}/utf\n    \\x{16a38}\n 0: \\x{16a38}\n\n# Character not in script\n/^\\p{Bamum}/utf\n    \\x{16a39}\nNo match\n\n# Base script check\n/^\\p{sc=Meetei_Mayek}/utf\n    \\x{aae0}\n 0: \\x{aae0}\n\n/^\\p{Script=Mtei}/utf\n    \\x{abf9}\n 0: \\x{abf9}\n\n# Character not in script\n/^\\p{Meetei_Mayek}/utf\n    \\x{abfa}\nNo match\n\n# Base script check\n/^\\p{sc=Imperial_Aramaic}/utf\n    \\x{10840}\n 0: \\x{10840}\n\n/^\\p{Script=Armi}/utf\n    \\x{1085f}\n 0: \\x{1085f}\n\n# Character not in script\n/^\\p{Imperial_Aramaic}/utf\n    \\x{10860}\nNo match\n\n# Base script check\n/^\\p{sc=Old_South_Arabian}/utf\n    \\x{10a60}\n 0: \\x{10a60}\n\n/^\\p{Script=Sarb}/utf\n    \\x{10a7f}\n 0: \\x{10a7f}\n\n# Character not in script\n/^\\p{Old_South_Arabian}/utf\n    \\x{10a80}\nNo match\n\n# Base script check\n/^\\p{sc=Inscriptional_Parthian}/utf\n    \\x{10b40}\n 0: \\x{10b40}\n\n/^\\p{Script=Prti}/utf\n    \\x{10b5f}\n 0: \\x{10b5f}\n\n# Character not in script\n/^\\p{Inscriptional_Parthian}/utf\n    \\x{10b60}\nNo match\n\n# Base script check\n/^\\p{sc=Inscriptional_Pahlavi}/utf\n    \\x{10b60}\n 0: \\x{10b60}\n\n/^\\p{Script=Phli}/utf\n    \\x{10b7f}\n 0: \\x{10b7f}\n\n# Character not in script\n/^\\p{Inscriptional_Pahlavi}/utf\n    \\x{10b80}\nNo match\n\n# Base script check\n/^\\p{sc=Batak}/utf\n    \\x{1bc0}\n 0: \\x{1bc0}\n\n/^\\p{Script=Batk}/utf\n    \\x{1bff}\n 0: \\x{1bff}\n\n# Character not in script\n/^\\p{Batak}/utf\n    \\x{1c00}\nNo match\n\n# Base script check\n/^\\p{sc=Brahmi}/utf\n    \\x{11000}\n 0: \\x{11000}\n\n/^\\p{Script=Brah}/utf\n    \\x{1107f}\n 0: \\x{1107f}\n\n# Character not in script\n/^\\p{Brahmi}/utf\n    \\x{11080}\nNo match\n\n# Base script check\n/^\\p{sc=Meroitic_Cursive}/utf\n    \\x{109a0}\n 0: \\x{109a0}\n\n/^\\p{Script=Merc}/utf\n    \\x{109ff}\n 0: \\x{109ff}\n\n# Character not in script\n/^\\p{Meroitic_Cursive}/utf\n    \\x{10a00}\nNo match\n\n# Base script check\n/^\\p{sc=Miao}/utf\n    \\x{16f00}\n 0: \\x{16f00}\n\n/^\\p{Script=Plrd}/utf\n    \\x{16f9f}\n 0: \\x{16f9f}\n\n# Character not in script\n/^\\p{Miao}/utf\n    \\x{16fa0}\nNo match\n\n# Base script check\n/^\\p{sc=Sora_Sompeng}/utf\n    \\x{110d0}\n 0: \\x{110d0}\n\n/^\\p{Script=Sora}/utf\n    \\x{110f9}\n 0: \\x{110f9}\n\n# Character not in script\n/^\\p{Sora_Sompeng}/utf\n    \\x{110fa}\nNo match\n\n# Base script check\n/^\\p{sc=Bassa_Vah}/utf\n    \\x{16ad0}\n 0: \\x{16ad0}\n\n/^\\p{Script=Bass}/utf\n    \\x{16af5}\n 0: \\x{16af5}\n\n# Character not in script\n/^\\p{Bassa_Vah}/utf\n    \\x{16af6}\nNo match\n\n# Base script check\n/^\\p{sc=Pahawh_Hmong}/utf\n    \\x{16b00}\n 0: \\x{16b00}\n\n/^\\p{Script=Hmng}/utf\n    \\x{16b8f}\n 0: \\x{16b8f}\n\n# Character not in script\n/^\\p{Pahawh_Hmong}/utf\n    \\x{16b90}\nNo match\n\n# Base script check\n/^\\p{sc=Mende_Kikakui}/utf\n    \\x{1e800}\n 0: \\x{1e800}\n\n/^\\p{Script=Mend}/utf\n    \\x{1e8d6}\n 0: \\x{1e8d6}\n\n# Character not in script\n/^\\p{Mende_Kikakui}/utf\n    \\x{1e8d7}\nNo match\n\n# Base script check\n/^\\p{sc=Mro}/utf\n    \\x{16a40}\n 0: \\x{16a40}\n\n/^\\p{Script=Mroo}/utf\n    \\x{16a6f}\n 0: \\x{16a6f}\n\n# Character not in script\n/^\\p{Mro}/utf\n    \\x{16a70}\nNo match\n\n# Base script check\n/^\\p{sc=Old_North_Arabian}/utf\n    \\x{10a80}\n 0: \\x{10a80}\n\n/^\\p{Script=Narb}/utf\n    \\x{10a9f}\n 0: \\x{10a9f}\n\n# Character not in script\n/^\\p{Old_North_Arabian}/utf\n    \\x{10aa0}\nNo match\n\n# Base script check\n/^\\p{sc=Nabataean}/utf\n    \\x{10880}\n 0: \\x{10880}\n\n/^\\p{Script=Nbat}/utf\n    \\x{108af}\n 0: \\x{108af}\n\n# Character not in script\n/^\\p{Nabataean}/utf\n    \\x{108b0}\nNo match\n\n# Base script check\n/^\\p{sc=Palmyrene}/utf\n    \\x{10860}\n 0: \\x{10860}\n\n/^\\p{Script=Palm}/utf\n    \\x{1087f}\n 0: \\x{1087f}\n\n# Character not in script\n/^\\p{Palmyrene}/utf\n    \\x{10880}\nNo match\n\n# Base script check\n/^\\p{sc=Pau_Cin_Hau}/utf\n    \\x{11ac0}\n 0: \\x{11ac0}\n\n/^\\p{Script=Pauc}/utf\n    \\x{11af8}\n 0: \\x{11af8}\n\n# Character not in script\n/^\\p{Pau_Cin_Hau}/utf\n    \\x{11af9}\nNo match\n\n# Base script check\n/^\\p{sc=Siddham}/utf\n    \\x{11580}\n 0: \\x{11580}\n\n/^\\p{Script=Sidd}/utf\n    \\x{115dd}\n 0: \\x{115dd}\n\n# Character not in script\n/^\\p{Siddham}/utf\n    \\x{115de}\nNo match\n\n# Base script check\n/^\\p{sc=Warang_Citi}/utf\n    \\x{118a0}\n 0: \\x{118a0}\n\n/^\\p{Script=Wara}/utf\n    \\x{118ff}\n 0: \\x{118ff}\n\n# Character not in script\n/^\\p{Warang_Citi}/utf\n    \\x{11900}\nNo match\n\n# Base script check\n/^\\p{sc=Ahom}/utf\n    \\x{11700}\n 0: \\x{11700}\n\n/^\\p{Script=Ahom}/utf\n    \\x{11746}\n 0: \\x{11746}\n\n# Character not in script\n/^\\p{Ahom}/utf\n    \\x{11747}\nNo match\n\n# Base script check\n/^\\p{sc=Anatolian_Hieroglyphs}/utf\n    \\x{14400}\n 0: \\x{14400}\n\n/^\\p{Script=Hluw}/utf\n    \\x{14646}\n 0: \\x{14646}\n\n# Character not in script\n/^\\p{Anatolian_Hieroglyphs}/utf\n    \\x{14647}\nNo match\n\n# Base script check\n/^\\p{sc=Hatran}/utf\n    \\x{108e0}\n 0: \\x{108e0}\n\n/^\\p{Script=Hatr}/utf\n    \\x{108ff}\n 0: \\x{108ff}\n\n# Character not in script\n/^\\p{Hatran}/utf\n    \\x{10900}\nNo match\n\n# Base script check\n/^\\p{sc=SignWriting}/utf\n    \\x{1d800}\n 0: \\x{1d800}\n\n/^\\p{Script=Sgnw}/utf\n    \\x{1daaf}\n 0: \\x{1daaf}\n\n# Character not in script\n/^\\p{SignWriting}/utf\n    \\x{1dab0}\nNo match\n\n# Base script check\n/^\\p{sc=Bhaiksuki}/utf\n    \\x{11c00}\n 0: \\x{11c00}\n\n/^\\p{Script=Bhks}/utf\n    \\x{11c6c}\n 0: \\x{11c6c}\n\n# Character not in script\n/^\\p{Bhaiksuki}/utf\n    \\x{11c6d}\nNo match\n\n# Base script check\n/^\\p{sc=Marchen}/utf\n    \\x{11c70}\n 0: \\x{11c70}\n\n/^\\p{Script=Marc}/utf\n    \\x{11cb6}\n 0: \\x{11cb6}\n\n# Character not in script\n/^\\p{Marchen}/utf\n    \\x{11cb7}\nNo match\n\n# Base script check\n/^\\p{sc=Nushu}/utf\n    \\x{16fe1}\n 0: \\x{16fe1}\n\n/^\\p{Script=Nshu}/utf\n    \\x{1b2fb}\n 0: \\x{1b2fb}\n\n# Character not in script\n/^\\p{Nushu}/utf\n    \\x{1b2fc}\nNo match\n\n# Base script check\n/^\\p{sc=Soyombo}/utf\n    \\x{11a50}\n 0: \\x{11a50}\n\n/^\\p{Script=Soyo}/utf\n    \\x{11aa2}\n 0: \\x{11aa2}\n\n# Character not in script\n/^\\p{Soyombo}/utf\n    \\x{11aa3}\nNo match\n\n# Base script check\n/^\\p{sc=Zanabazar_Square}/utf\n    \\x{11a00}\n 0: \\x{11a00}\n\n/^\\p{Script=Zanb}/utf\n    \\x{11a47}\n 0: \\x{11a47}\n\n# Character not in script\n/^\\p{Zanabazar_Square}/utf\n    \\x{11a48}\nNo match\n\n# Base script check\n/^\\p{sc=Makasar}/utf\n    \\x{11ee0}\n 0: \\x{11ee0}\n\n/^\\p{Script=Maka}/utf\n    \\x{11ef8}\n 0: \\x{11ef8}\n\n# Character not in script\n/^\\p{Makasar}/utf\n    \\x{11ef9}\nNo match\n\n# Base script check\n/^\\p{sc=Medefaidrin}/utf\n    \\x{16e40}\n 0: \\x{16e40}\n\n/^\\p{Script=Medf}/utf\n    \\x{16e9a}\n 0: \\x{16e9a}\n\n# Character not in script\n/^\\p{Medefaidrin}/utf\n    \\x{16e9b}\nNo match\n\n# Base script check\n/^\\p{sc=Old_Sogdian}/utf\n    \\x{10f00}\n 0: \\x{10f00}\n\n/^\\p{Script=Sogo}/utf\n    \\x{10f27}\n 0: \\x{10f27}\n\n# Character not in script\n/^\\p{Old_Sogdian}/utf\n    \\x{10f28}\nNo match\n\n# Base script check\n/^\\p{sc=Elymaic}/utf\n    \\x{10fe0}\n 0: \\x{10fe0}\n\n/^\\p{Script=Elym}/utf\n    \\x{10ff6}\n 0: \\x{10ff6}\n\n# Character not in script\n/^\\p{Elymaic}/utf\n    \\x{10ff7}\nNo match\n\n# Base script check\n/^\\p{sc=Nyiakeng_Puachue_Hmong}/utf\n    \\x{1e100}\n 0: \\x{1e100}\n\n/^\\p{Script=Hmnp}/utf\n    \\x{1e14f}\n 0: \\x{1e14f}\n\n# Character not in script\n/^\\p{Nyiakeng_Puachue_Hmong}/utf\n    \\x{1e150}\nNo match\n\n# Base script check\n/^\\p{sc=Wancho}/utf\n    \\x{1e2c0}\n 0: \\x{1e2c0}\n\n/^\\p{Script=Wcho}/utf\n    \\x{1e2ff}\n 0: \\x{1e2ff}\n\n# Character not in script\n/^\\p{Wancho}/utf\n    \\x{1e300}\nNo match\n\n# Base script check\n/^\\p{sc=Chorasmian}/utf\n    \\x{10fb0}\n 0: \\x{10fb0}\n\n/^\\p{Script=Chrs}/utf\n    \\x{10fcb}\n 0: \\x{10fcb}\n\n# Character not in script\n/^\\p{Chorasmian}/utf\n    \\x{10fcc}\nNo match\n\n# Base script check\n/^\\p{sc=Dives_Akuru}/utf\n    \\x{11900}\n 0: \\x{11900}\n\n/^\\p{Script=Diak}/utf\n    \\x{11959}\n 0: \\x{11959}\n\n# Character not in script\n/^\\p{Dives_Akuru}/utf\n    \\x{1195a}\nNo match\n\n# Base script check\n/^\\p{sc=Khitan_Small_Script}/utf\n    \\x{16fe4}\n 0: \\x{16fe4}\n\n/^\\p{Script=Kits}/utf\n    \\x{18cff}\n 0: \\x{18cff}\n\n# Character not in script\n/^\\p{Khitan_Small_Script}/utf\n    \\x{18d00}\nNo match\n\n# Base script check\n/^\\p{sc=Tangsa}/utf\n    \\x{16a70}\n 0: \\x{16a70}\n\n/^\\p{Script=Tnsa}/utf\n    \\x{16ac9}\n 0: \\x{16ac9}\n\n# Character not in script\n/^\\p{Tangsa}/utf\n    \\x{16aca}\nNo match\n\n# Base script check\n/^\\p{sc=Vithkuqi}/utf\n    \\x{10570}\n 0: \\x{10570}\n\n/^\\p{Script=Vith}/utf\n    \\x{105bc}\n 0: \\x{105bc}\n\n# Character not in script\n/^\\p{Vithkuqi}/utf\n    \\x{105bd}\nNo match\n\n# Base script check\n/^\\p{sc=Kawi}/utf\n    \\x{11f00}\n 0: \\x{11f00}\n\n/^\\p{Script=Kawi}/utf\n    \\x{11f5a}\n 0: \\x{11f5a}\n\n# Character not in script\n/^\\p{Kawi}/utf\n    \\x{11f5b}\nNo match\n\n# Base script check\n/^\\p{sc=Nag_Mundari}/utf\n    \\x{1e4d0}\n 0: \\x{1e4d0}\n\n/^\\p{Script=Nagm}/utf\n    \\x{1e4f9}\n 0: \\x{1e4f9}\n\n# Character not in script\n/^\\p{Nag_Mundari}/utf\n    \\x{1e4fa}\nNo match\n\n# Base script check\n/^\\p{sc=Kirat_Rai}/utf\n    \\x{16d40}\n 0: \\x{16d40}\n\n/^\\p{Script=Krai}/utf\n    \\x{16d79}\n 0: \\x{16d79}\n\n# Character not in script\n/^\\p{Kirat_Rai}/utf\n    \\x{16d7a}\nNo match\n\n# Base script check\n/^\\p{sc=Sidetic}/utf\n    \\x{10940}\n 0: \\x{10940}\n\n/^\\p{Script=Sidt}/utf\n    \\x{10959}\n 0: \\x{10959}\n\n# Character not in script\n/^\\p{Sidetic}/utf\n    \\x{1095a}\nNo match\n\n# Base script check\n/^\\p{sc=Tai_Yo}/utf\n    \\x{1e6c0}\n 0: \\x{1e6c0}\n\n/^\\p{Script=Tayo}/utf\n    \\x{1e6ff}\n 0: \\x{1e6ff}\n\n# Character not in script\n/^\\p{Tai_Yo}/utf\n    \\x{1e700}\nNo match\n\n# Base script check\n/^\\p{sc=Tolong_Siki}/utf\n    \\x{11db0}\n 0: \\x{11db0}\n\n/^\\p{Script=Tols}/utf\n    \\x{11de9}\n 0: \\x{11de9}\n\n# Character not in script\n/^\\p{Tolong_Siki}/utf\n    \\x{11dea}\nNo match\n\n# Base script check\n/^\\p{sc=Beria_Erfe}/utf\n    \\x{16ea0}\n 0: \\x{16ea0}\n\n/^\\p{Script=Berf}/utf\n    \\x{16ed3}\n 0: \\x{16ed3}\n\n# Character not in script\n/^\\p{Beria_Erfe}/utf\n    \\x{16ed4}\nNo match\n\n# End of test\n"
  },
  {
    "path": "testdata/testoutput28",
    "content": "# This tests the EBCDIC support in PCRE2. It catches cases where explicit values\n# such as 0x0a have been used instead of names like CHAR_LF.\n#\n# This test file however is checked in to the repository encoded as ISO-8859-1,\n# using a reversible mapping from EBCDIC. This lets us easily author test cases.\n# However, they will only be run against a genuine EBCDIC when the input and\n# output files are converted to EBCDIC.\n#\n# There is also a special mode, on ASCII systems, where pcre2test takes ASCII\n# input (actually, ISO-8859-1), and then does the transcoding internally before\n# calling the genuinely-EBCDIC version of PCRE2.\n\n# Test default newline and variations\n\n/^A/m\n    ABC\n 0: A\n    12\\nABC\n 0: A\n\n/^A/m,newline=any\n    12\\nABC\n 0: A\n    12\\rABC\n 0: A\n    12\\r\\nABC\n 0: A\n    12\\x85ABC\n 0: A\n\n/^A/m,newline=anycrlf\n    12\\nABC\n 0: A\n    12\\rABC\n 0: A\n    12\\r\\nABC\n 0: A\n\\= Expect no match\n    12\\x85ABC\nNo match\n\n# Test \\h\n\n/^A\\h/\n    A B\n 0: A \n    A\\tB\n 0: A\\x09\n    A\\xA0B\n 0: A\\xa0\n\n# Test \\H\n\n/^A\\H/\n    AB\n 0: AB\n    A\\x42B\n 0: AB\n\\= Expect no match\n    A B\nNo match\n\n# Test \\R\n\n/^A\\R/\n    A\\nB\n 0: A\\x0a\n    A\\rB\n 0: A\\x0d\n    A\\x85B\n 0: A\\x85\n    A\\x0bB\n 0: A\\x0b\n    A\\x0cB\n 0: A\\x0c\n\\= Expect no match\n    A B\nNo match\n\n# Test \\v\n\n/^A\\v/\n    A\\nB\n 0: A\\x0a\n    A\\rB\n 0: A\\x0d\n    A\\x85B\n 0: A\\x85\n    A\\x0bB\n 0: A\\x0b\n    A\\x0cB\n 0: A\\x0c\n\\= Expect no match\n    A B\nNo match\n\n# Test \\V\n\n/^A\\V/\n    A B\n 0: A \n\\= Expect no match\n    A\\nB\nNo match\n    A\\rB\nNo match\n    A\\x85B\nNo match\n    A\\x0bB\nNo match\n    A\\x0cB\nNo match\n\n# For repeated items, use an atomic group so that the output is the same\n# for DFA matching (otherwise it may show multiple matches).\n\n# Test \\h+\n\n/^A(?>\\h+)/\n    A B\n 0: A \n\n# Test \\H+\n\n/^A(?>\\H+)/\n    AB\n 0: AB\n\\= Expect no match\n    A B\nNo match\n\n# Test \\R+\n\n/^A(?>\\R+)/\n    A\\nB\n 0: A\\x0a\n    A\\rB\n 0: A\\x0d\n    A\\x85B\n 0: A\\x85\n    A\\x0bB\n 0: A\\x0b\n    A\\x0cB\n 0: A\\x0c\n\\= Expect no match\n    A B\nNo match\n\n# Test \\v+\n\n/^A(?>\\v+)/\n    A\\nB\n 0: A\\x0a\n    A\\rB\n 0: A\\x0d\n    A\\x85B\n 0: A\\x85\n    A\\x0bB\n 0: A\\x0b\n    A\\x0cB\n 0: A\\x0c\n\\= Expect no match\n    A B\nNo match\n\n# Test \\V+\n\n/^A(?>\\V+)/\n    A B\n 0: A B\n\\= Expect no match\n    A\\nB\nNo match\n    A\\rB\nNo match\n    A\\x85B\nNo match\n    A\\x0bB\nNo match\n    A\\x0cB\nNo match\n\n# Test \\c functionality\n\n/\\c@\\cA\\cb\\cC\\cd\\cE\\cf\\cG\\ch\\cI\\cJ\\cK\\cl\\cm\\cN\\cO\\cp\\cq\\cr\\cS\\cT\\cV\\cW\\cX\\cy\\cZ/\n  \\x00\\x01\\x02\\x03\\x9c\\x09\\x86\\x7f\\x97\\x8d\\x8e\\x0b\\x0c\\x0d\\x0e\\x0f\\x10\\x11\\x12\\x13\\x9d\\x08\\x87\\x18\\x19\\x92\n 0: \\x00\\x01\\x02\\x03\\x9c\\x09\\x86\\x7f\\x97\\x8d\\x8e\\x0b\\x0c\\x0d\\x0e\\x0f\\x10\\x11\\x12\\x13\\x9d\\x08\\x87\\x18\\x19\\x92\n  \\x00\\x01\\x02\\x03\\x9c\\x09\\x86\\x7f\\x97\\x8d\\x8e\\x0b\\x0c\\x0d\\x0e\\x0f\\x10\\x11\\x12\\x13\\x9d\\x08\\x87\\x18\\x19\\x92\n 0: \\x00\\x01\\x02\\x03\\x9c\\x09\\x86\\x7f\\x97\\x8d\\x8e\\x0b\\x0c\\x0d\\x0e\\x0f\\x10\\x11\\x12\\x13\\x9d\\x08\\x87\\x18\\x19\\x92\n\n#if !ebcdic-nl25\n\n/^\\x15$/\n  \\n\n 0: \\x0a\n\n/\\cU/\n  \\x0a\n 0: \\x0a\n  \\x85\nNo match\n\n#endif\n\n/\\c[\\c\\\\c]\\c^\\c_/\n    \\x8f\\x1c\\x1d\\x1e\\x1f\n 0: \\x8f\\x1c\\x1d\\x1e\\x1f\n\n/\\c?/\n    A\\x9fB\n 0: \\x9f\n\n/\\c&/\nFailed: error 168 at offset 3: \\c must be followed by a letter or one of @[\\]^_?\n        here: \\c& |<--|\n\n# End\n"
  },
  {
    "path": "testdata/testoutput29",
    "content": "# This tests the EBCDIC support in PCRE2, specifically when NL has been\n# configured to be 0x25.\n\n/^\\x25$/\n  \\n\n 0: \\x0a\n\n/\\cU/\n  \\x0a\nNo match\n  \\x85\n 0: \\x85\n"
  },
  {
    "path": "testdata/testoutput3",
    "content": "# This set of tests checks local-specific features, using the \"fr_FR\" locale. \n# It is almost Perl-compatible. When run via RunTest, the locale is edited to\n# be whichever of \"fr_FR\", \"french\", or \"fr\" is found to exist. There is\n# different version of this file called wintestinput3 for use on Windows,\n# where the locale is called \"french\" and the tests are run using\n# RunTest.bat. \n\n#forbid_utf\n\n/^[\\w]+/\n\\= Expect no match\n    cole\nNo match\n\n/^[\\w]+/locale=fr_FR\n    cole\n 0: \\xc9cole\n\n/^[\\W]+/\n    cole\n 0: \\xc9\n\n/^[\\W]+/locale=fr_FR\n\\= Expect no match\n    cole\nNo match\n\n/[\\b]/\n    \\b\n 0: \\x08\n\\= Expect no match\n    a\nNo match\n\n/[\\b]/locale=fr_FR\n    \\b\n 0: \\x08\n\\= Expect no match\n    a\nNo match\n\n/^\\w+/\n\\= Expect no match\n    cole\nNo match\n\n/^\\w+/locale=fr_FR\n    cole\n 0: \\xc9cole\n\n/(.+)\\b(.+)/\n    cole\n 0: \\xc9cole\n 1: \\xc9\n 2: cole\n\n/(.+)\\b(.+)/locale=fr_FR\n\\= Expect no match\n    cole\nNo match\n\n/cole/i\n    cole\n 0: \\xc9cole\n\\= Expect no match\n    cole\nNo match\n\n/cole/i,locale=fr_FR\n    cole\n 0: \\xc9cole\n    cole\n 0: \\xe9cole\n\n/\\w/I\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\n/\\w/I,locale=fr_FR\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\n  \\xaa \\xb5 \\xba \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb\n  \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd8 \\xd9 \\xda \\xdb\n  \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea\n  \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf8 \\xf9 \\xfa\n  \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n# All remaining tests are in the fr_FR locale, so set the default.\n\n#pattern locale=fr_FR\n\n/^[\\xc8-\\xc9]/i\n    cole\n 0: \\xc9\n    cole\n 0: \\xe9\n\n/^[\\xc8-\\xc9]/\n    cole\n 0: \\xc9\n\\= Expect no match\n    cole\nNo match\n\n/\\xb5/i\n    \n 0: \\xb5\n\\= Expect no match\n    \\x9c\nNo match\n\n//i\n    \\xff\n 0: \\xff\n\\= Expect no match\n    y\nNo match\n\n/(.)\\1/i\n    \\xfe\\xde\n 0: \\xfe\\xde\n 1: \\xfe\n\n/\\W+/\n    >>>\\xaa<<<\n 0: >>>\n    >>>\\xba<<< \n 0: >>>\n\n/[\\W]+/\n    >>>\\xaa<<<\n 0: >>>\n    >>>\\xba<<< \n 0: >>>\n\n/[^[:alpha:]]+/\n    >>>\\xaa<<<\n 0: >>>\n    >>>\\xba<<< \n 0: >>>\n\n/\\w+/\n    >>>\\xaa<<<\n 0: \\xaa\n    >>>\\xba<<< \n 0: \\xba\n\n/[\\w]+/\n    >>>\\xaa<<<\n 0: \\xaa\n    >>>\\xba<<< \n 0: \\xba\n\n/[[:alpha:]]+/\n    >>>\\xaa<<<\n 0: \\xaa\n    >>>\\xba<<< \n 0: \\xba\n    \n/[[:alpha:]][[:lower:]][[:upper:]]/IB\n------------------------------------------------------------------\n        Bra\n        [A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff]\n        [a-z\\xb5\\xdf-\\xf6\\xf8-\\xff]\n        [A-Z\\xc0-\\xd6\\xd8-\\xde]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n  a b c d e f g h i j k l m n o p q r s t u v w x y z \\xaa \\xb5 \\xba \\xc0 \\xc1\n  \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0\n  \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0\n  \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef\n  \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 3\n\n# End of testinput3 \n"
  },
  {
    "path": "testdata/testoutput3A",
    "content": "# This set of tests checks local-specific features, using the \"fr_FR\" locale. \n# It is almost Perl-compatible. When run via RunTest, the locale is edited to\n# be whichever of \"fr_FR\", \"french\", or \"fr\" is found to exist. There is\n# different version of this file called wintestinput3 for use on Windows,\n# where the locale is called \"french\" and the tests are run using\n# RunTest.bat. \n\n#forbid_utf\n\n/^[\\w]+/\n\\= Expect no match\n    cole\nNo match\n\n/^[\\w]+/locale=fr_FR\n    cole\n 0: \\xc9cole\n\n/^[\\W]+/\n    cole\n 0: \\xc9\n\n/^[\\W]+/locale=fr_FR\n\\= Expect no match\n    cole\nNo match\n\n/[\\b]/\n    \\b\n 0: \\x08\n\\= Expect no match\n    a\nNo match\n\n/[\\b]/locale=fr_FR\n    \\b\n 0: \\x08\n\\= Expect no match\n    a\nNo match\n\n/^\\w+/\n\\= Expect no match\n    cole\nNo match\n\n/^\\w+/locale=fr_FR\n    cole\n 0: \\xc9cole\n\n/(.+)\\b(.+)/\n    cole\n 0: \\xc9cole\n 1: \\xc9\n 2: cole\n\n/(.+)\\b(.+)/locale=fr_FR\n\\= Expect no match\n    cole\nNo match\n\n/cole/i\n    cole\n 0: \\xc9cole\n\\= Expect no match\n    cole\nNo match\n\n/cole/i,locale=fr_FR\n    cole\n 0: \\xc9cole\n    cole\n 0: \\xe9cole\n\n/\\w/I\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\n/\\w/I,locale=fr_FR\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\n  \\xaa \\xb5 \\xba \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb\n  \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd8 \\xd9 \\xda \\xdb\n  \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea\n  \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf8 \\xf9 \\xfa\n  \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n# All remaining tests are in the fr_FR locale, so set the default.\n\n#pattern locale=fr_FR\n\n/^[\\xc8-\\xc9]/i\n    cole\n 0: \\xc9\n    cole\n 0: \\xe9\n\n/^[\\xc8-\\xc9]/\n    cole\n 0: \\xc9\n\\= Expect no match\n    cole\nNo match\n\n/\\xb5/i\n    \n 0: \\xb5\n\\= Expect no match\n    \\x9c\nNo match\n\n//i\n    \\xff\n 0: \\xff\n\\= Expect no match\n    y\nNo match\n\n/(.)\\1/i\n    \\xfe\\xde\n 0: \\xfe\\xde\n 1: \\xfe\n\n/\\W+/\n    >>>\\xaa<<<\n 0: >>>\n    >>>\\xba<<< \n 0: >>>\n\n/[\\W]+/\n    >>>\\xaa<<<\n 0: >>>\n    >>>\\xba<<< \n 0: >>>\n\n/[^[:alpha:]]+/\n    >>>\\xaa<<<\n 0: >>>\n    >>>\\xba<<< \n 0: >>>\n\n/\\w+/\n    >>>\\xaa<<<\n 0: \\xaa\n    >>>\\xba<<< \n 0: \\xba\n\n/[\\w]+/\n    >>>\\xaa<<<\n 0: \\xaa\n    >>>\\xba<<< \n 0: \\xba\n\n/[[:alpha:]]+/\n    >>>\\xaa<<<\n 0: \\xaa\n    >>>\\xba<<< \n 0: \\xba\n    \n/[[:alpha:]][[:lower:]][[:upper:]]/IB\n------------------------------------------------------------------\n        Bra\n        [A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff]\n        [a-z\\xaa\\xb5\\xba\\xdf-\\xf6\\xf8-\\xff]\n        [A-Z\\xc0-\\xd6\\xd8-\\xde]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n  a b c d e f g h i j k l m n o p q r s t u v w x y z \\xaa \\xb5 \\xba \\xc0 \\xc1\n  \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0\n  \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0\n  \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef\n  \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 3\n\n# End of testinput3 \n"
  },
  {
    "path": "testdata/testoutput3B",
    "content": "# This set of tests checks local-specific features, using the \"fr_FR\" locale. \n# It is almost Perl-compatible. When run via RunTest, the locale is edited to\n# be whichever of \"fr_FR\", \"french\", or \"fr\" is found to exist. There is\n# different version of this file called wintestinput3 for use on Windows,\n# where the locale is called \"french\" and the tests are run using\n# RunTest.bat. \n\n#forbid_utf\n\n/^[\\w]+/\n\\= Expect no match\n    cole\nNo match\n\n/^[\\w]+/locale=fr_FR\n    cole\n 0: \\xc9cole\n\n/^[\\W]+/\n    cole\n 0: \\xc9\n\n/^[\\W]+/locale=fr_FR\n\\= Expect no match\n    cole\nNo match\n\n/[\\b]/\n    \\b\n 0: \\x08\n\\= Expect no match\n    a\nNo match\n\n/[\\b]/locale=fr_FR\n    \\b\n 0: \\x08\n\\= Expect no match\n    a\nNo match\n\n/^\\w+/\n\\= Expect no match\n    cole\nNo match\n\n/^\\w+/locale=fr_FR\n    cole\n 0: \\xc9cole\n\n/(.+)\\b(.+)/\n    cole\n 0: \\xc9cole\n 1: \\xc9\n 2: cole\n\n/(.+)\\b(.+)/locale=fr_FR\n\\= Expect no match\n    cole\nNo match\n\n/cole/i\n    cole\n 0: \\xc9cole\n\\= Expect no match\n    cole\nNo match\n\n/cole/i,locale=fr_FR\n    cole\n 0: \\xc9cole\n    cole\n 0: \\xe9cole\n\n/\\w/I\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\n/\\w/I,locale=fr_FR\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\n  \\xaa \\xb5 \\xba \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb\n  \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd8 \\xd9 \\xda \\xdb\n  \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea\n  \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf8 \\xf9 \\xfa\n  \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 1\n\n# All remaining tests are in the fr_FR locale, so set the default.\n\n#pattern locale=fr_FR\n\n/^[\\xc8-\\xc9]/i\n    cole\n 0: \\xc9\n    cole\n 0: \\xe9\n\n/^[\\xc8-\\xc9]/\n    cole\n 0: \\xc9\n\\= Expect no match\n    cole\nNo match\n\n/\\xb5/i\n    \n 0: \\xb5\n\\= Expect no match\n    \\x9c\nNo match\n\n//i\n    \\xff\n 0: \\xff\n\\= Expect no match\n    y\nNo match\n\n/(.)\\1/i\n    \\xfe\\xde\n 0: \\xfe\\xde\n 1: \\xfe\n\n/\\W+/\n    >>>\\xaa<<<\n 0: >>>\n    >>>\\xba<<< \n 0: >>>\n\n/[\\W]+/\n    >>>\\xaa<<<\n 0: >>>\n    >>>\\xba<<< \n 0: >>>\n\n/[^[:alpha:]]+/\n    >>>\\xaa<<<\n 0: >>>\n    >>>\\xba<<< \n 0: >>>\n\n/\\w+/\n    >>>\\xaa<<<\n 0: \\xaa\n    >>>\\xba<<< \n 0: \\xba\n\n/[\\w]+/\n    >>>\\xaa<<<\n 0: \\xaa\n    >>>\\xba<<< \n 0: \\xba\n\n/[[:alpha:]]+/\n    >>>\\xaa<<<\n 0: \\xaa\n    >>>\\xba<<< \n 0: \\xba\n    \n/[[:alpha:]][[:lower:]][[:upper:]]/IB\n------------------------------------------------------------------\n        Bra\n        [A-Za-z\\x83\\x8a\\x8c\\x8e\\x9a\\x9c\\x9e\\x9f\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff]\n        [a-z\\x83\\x9a\\x9c\\x9e\\xaa\\xb5\\xba\\xdf-\\xf6\\xf8-\\xff]\n        [A-Z\\x8a\\x8c\\x8e\\x9f\\xc0-\\xd6\\xd8-\\xde]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n  a b c d e f g h i j k l m n o p q r s t u v w x y z \\xaa \\xb5 \\xba \\xc0 \\xc1\n  \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0\n  \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0\n  \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef\n  \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 3\n\n# End of testinput3 \n"
  },
  {
    "path": "testdata/testoutput3C",
    "content": "# This set of tests checks local-specific features, using the \"fr_FR\" locale. \n# It is almost Perl-compatible. When run via RunTest, the locale is edited to\n# be whichever of \"fr_FR\", \"french\", or \"fr\" is found to exist. There is\n# different version of this file called wintestinput3 for use on Windows,\n# where the locale is called \"french\" and the tests are run using\n# RunTest.bat. \n\n#forbid_utf\n\n/^[\\w]+/\n\\= Expect no match\n    cole\nNo match\n\n/^[\\w]+/locale=fr_FR\n    cole\n 0: \\xc9cole\n\n/^[\\W]+/\n    cole\n 0: \\xc9\n\n/^[\\W]+/locale=fr_FR\n\\= Expect no match\n    cole\nNo match\n\n/[\\b]/\n    \\b\n 0: \\x08\n\\= Expect no match\n    a\nNo match\n\n/[\\b]/locale=fr_FR\n    \\b\n 0: \\x08\n\\= Expect no match\n    a\nNo match\n\n/^\\w+/\n\\= Expect no match\n    cole\nNo match\n\n/^\\w+/locale=fr_FR\n    cole\n 0: \\xc9cole\n\n/(.+)\\b(.+)/\n    cole\n 0: \\xc9cole\n 1: \\xc9\n 2: cole\n\n/(.+)\\b(.+)/locale=fr_FR\n\\= Expect no match\n    cole\nNo match\n\n/cole/i\n    cole\n 0: \\xc9cole\n\\= Expect no match\n    cole\nNo match\n\n/cole/i,locale=fr_FR\n    cole\n 0: \\xc9cole\n    cole\n 0: \\xe9cole\n\n/\\w/I\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\n/\\w/I,locale=fr_FR\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\n  \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce\n  \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde\n  \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed\n  \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd\n  \\xfe \\xff\nSubject length lower bound = 1\n\n# All remaining tests are in the fr_FR locale, so set the default.\n\n#pattern locale=fr_FR\n\n/^[\\xc8-\\xc9]/i\n    cole\n 0: \\xc9\n    cole\n 0: \\xe9\n\n/^[\\xc8-\\xc9]/\n    cole\n 0: \\xc9\n\\= Expect no match\n    cole\nNo match\n\n/\\xb5/i\n    \n 0: \\xb5\n\\= Expect no match\n    \\x9c\nNo match\n\n//i\n    \\xff\n 0: \\xff\n\\= Expect no match\n    y\nNo match\n\n/(.)\\1/i\n    \\xfe\\xde\n 0: \\xfe\\xde\n 1: \\xfe\n\n/\\W+/\n    >>>\\xaa<<<\n 0: >>>\\xaa<<<\n    >>>\\xba<<< \n 0: >>>\\xba<<<\n\n/[\\W]+/\n    >>>\\xaa<<<\n 0: >>>\\xaa<<<\n    >>>\\xba<<< \n 0: >>>\\xba<<<\n\n/[^[:alpha:]]+/\n    >>>\\xaa<<<\n 0: >>>\\xaa<<<\n    >>>\\xba<<< \n 0: >>>\\xba<<<\n\n/\\w+/\n    >>>\\xaa<<<\nNo match\n    >>>\\xba<<< \nNo match\n\n/[\\w]+/\n    >>>\\xaa<<<\nNo match\n    >>>\\xba<<< \nNo match\n\n/[[:alpha:]]+/\n    >>>\\xaa<<<\nNo match\n    >>>\\xba<<< \nNo match\n    \n/[[:alpha:]][[:lower:]][[:upper:]]/IB\n------------------------------------------------------------------\n        Bra\n        [A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff]\n        [a-z\\xdf-\\xf6\\xf8-\\xff]\n        [A-Z\\xc0-\\xd6\\xd8-\\xde]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n  a b c d e f g h i j k l m n o p q r s t u v w x y z \\xc0 \\xc1 \\xc2 \\xc3 \\xc4\n  \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3\n  \\xd4 \\xd5 \\xd6 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3\n  \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2\n  \\xf3 \\xf4 \\xf5 \\xf6 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 3\n\n# End of testinput3 \n"
  },
  {
    "path": "testdata/testoutput4",
    "content": "# This set of tests is for UTF support, including Unicode properties. The\n# Unicode tests are all compatible with all versions of Perl >= 5.10, but\n# some of the property tests may differ because of different versions of\n# Unicode in use by PCRE2 and Perl.\n\n# WARNING: Use only / as the pattern delimiter. Although pcre2test supports\n# a number of delimiters, all those other than / give problems with the\n# perltest.sh script.\n\n#newline_default lf anycrlf any\n#perltest\n\n/a.b/utf\n    acb\n 0: acb\n    a\\x7fb\n 0: a\\x{7f}b\n    a\\x{100}b\n 0: a\\x{100}b\n\\= Expect no match\n    a\\nb\nNo match\n\n/a(.{3})b/utf\n    a\\x{4000}xyb\n 0: a\\x{4000}xyb\n 1: \\x{4000}xy\n    a\\x{4000}\\x7fyb\n 0: a\\x{4000}\\x{7f}yb\n 1: \\x{4000}\\x{7f}y\n    a\\x{4000}\\x{100}yb\n 0: a\\x{4000}\\x{100}yb\n 1: \\x{4000}\\x{100}y\n\\= Expect no match\n    a\\x{4000}b\nNo match\n    ac\\ncb\nNo match\n\n/a(.*?)(.)/\n    a\\xc0\\x88b\n 0: a\\xc0\n 1: \n 2: \\xc0\n\n/a(.*?)(.)/utf\n    a\\x{100}b\n 0: a\\x{100}\n 1: \n 2: \\x{100}\n\n/a(.*)(.)/\n    a\\xc0\\x88b\n 0: a\\xc0\\x88b\n 1: \\xc0\\x88\n 2: b\n\n/a(.*)(.)/utf\n    a\\x{100}b\n 0: a\\x{100}b\n 1: \\x{100}\n 2: b\n\n/a(.)(.)/\n    a\\xc0\\x92bcd\n 0: a\\xc0\\x92\n 1: \\xc0\n 2: \\x92\n\n/a(.)(.)/utf\n    a\\x{240}bcd\n 0: a\\x{240}b\n 1: \\x{240}\n 2: b\n\n/a(.?)(.)/\n    a\\xc0\\x92bcd\n 0: a\\xc0\\x92\n 1: \\xc0\n 2: \\x92\n\n/a(.?)(.)/utf\n    a\\x{240}bcd\n 0: a\\x{240}b\n 1: \\x{240}\n 2: b\n\n/a(.??)(.)/\n    a\\xc0\\x92bcd\n 0: a\\xc0\n 1: \n 2: \\xc0\n\n/a(.??)(.)/utf\n    a\\x{240}bcd\n 0: a\\x{240}\n 1: \n 2: \\x{240}\n\n/a(.{3})b/utf\n    a\\x{1234}xyb\n 0: a\\x{1234}xyb\n 1: \\x{1234}xy\n    a\\x{1234}\\x{4321}yb\n 0: a\\x{1234}\\x{4321}yb\n 1: \\x{1234}\\x{4321}y\n    a\\x{1234}\\x{4321}\\x{3412}b\n 0: a\\x{1234}\\x{4321}\\x{3412}b\n 1: \\x{1234}\\x{4321}\\x{3412}\n\\= Expect no match\n    a\\x{1234}b\nNo match\n    ac\\ncb\nNo match\n\n/a(.{3,})b/utf\n    a\\x{1234}xyb\n 0: a\\x{1234}xyb\n 1: \\x{1234}xy\n    a\\x{1234}\\x{4321}yb\n 0: a\\x{1234}\\x{4321}yb\n 1: \\x{1234}\\x{4321}y\n    a\\x{1234}\\x{4321}\\x{3412}b\n 0: a\\x{1234}\\x{4321}\\x{3412}b\n 1: \\x{1234}\\x{4321}\\x{3412}\n    axxxxbcdefghijb\n 0: axxxxbcdefghijb\n 1: xxxxbcdefghij\n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n 1: \\x{1234}\\x{4321}\\x{3412}\\x{3421}\n\\= Expect no match\n    a\\x{1234}b\nNo match\n\n/a(.{3,}?)b/utf\n    a\\x{1234}xyb\n 0: a\\x{1234}xyb\n 1: \\x{1234}xy\n    a\\x{1234}\\x{4321}yb\n 0: a\\x{1234}\\x{4321}yb\n 1: \\x{1234}\\x{4321}y\n    a\\x{1234}\\x{4321}\\x{3412}b\n 0: a\\x{1234}\\x{4321}\\x{3412}b\n 1: \\x{1234}\\x{4321}\\x{3412}\n    axxxxbcdefghijb\n 0: axxxxb\n 1: xxxx\n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n 1: \\x{1234}\\x{4321}\\x{3412}\\x{3421}\n\\= Expect no match\n    a\\x{1234}b\nNo match\n\n/a(.{3,5})b/utf\n    a\\x{1234}xyb\n 0: a\\x{1234}xyb\n 1: \\x{1234}xy\n    a\\x{1234}\\x{4321}yb\n 0: a\\x{1234}\\x{4321}yb\n 1: \\x{1234}\\x{4321}y\n    a\\x{1234}\\x{4321}\\x{3412}b\n 0: a\\x{1234}\\x{4321}\\x{3412}b\n 1: \\x{1234}\\x{4321}\\x{3412}\n    axxxxbcdefghijb\n 0: axxxxb\n 1: xxxx\n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n 1: \\x{1234}\\x{4321}\\x{3412}\\x{3421}\n    axbxxbcdefghijb\n 0: axbxxb\n 1: xbxx\n    axxxxxbcdefghijb\n 0: axxxxxb\n 1: xxxxx\n\\= Expect no match\n    a\\x{1234}b\nNo match\n    axxxxxxbcdefghijb\nNo match\n\n/a(.{3,5}?)b/utf\n    a\\x{1234}xyb\n 0: a\\x{1234}xyb\n 1: \\x{1234}xy\n    a\\x{1234}\\x{4321}yb\n 0: a\\x{1234}\\x{4321}yb\n 1: \\x{1234}\\x{4321}y\n    a\\x{1234}\\x{4321}\\x{3412}b\n 0: a\\x{1234}\\x{4321}\\x{3412}b\n 1: \\x{1234}\\x{4321}\\x{3412}\n    axxxxbcdefghijb\n 0: axxxxb\n 1: xxxx\n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n 1: \\x{1234}\\x{4321}\\x{3412}\\x{3421}\n    axbxxbcdefghijb\n 0: axbxxb\n 1: xbxx\n    axxxxxbcdefghijb\n 0: axxxxxb\n 1: xxxxx\n\\= Expect no match\n    a\\x{1234}b\nNo match\n    axxxxxxbcdefghijb\nNo match\n\n/^[a\\x{c0}]/utf\n\\= Expect no match\n    \\x{100}\nNo match\n\n/(?<=aXb)cd/utf\n    aXbcd\n 0: cd\n\n/(?<=a\\x{100}b)cd/utf\n    a\\x{100}bcd\n 0: cd\n\n/(?<=a\\x{100000}b)cd/utf\n    a\\x{100000}bcd\n 0: cd\n\n/(?:\\x{100}){3}b/utf\n    \\x{100}\\x{100}\\x{100}b\n 0: \\x{100}\\x{100}\\x{100}b\n\\= Expect no match\n    \\x{100}\\x{100}b\nNo match\n\n/\\x{ab}/utf\n    \\x{ab}\n 0: \\x{ab}\n    \\xc2\\xab\n 0: \\x{ab}\n\\= Expect no match\n    \\x00{ab}\nNo match\n\n/(?<=(.))X/utf\n    WXYZ\n 0: X\n 1: W\n    \\x{256}XYZ\n 0: X\n 1: \\x{256}\n\\= Expect no match\n    XYZ\nNo match\n\n/[^a]+/g,utf\n    bcd\n 0: bcd\n    \\x{100}aY\\x{256}Z\n 0: \\x{100}\n 0: Y\\x{256}Z\n\n/^[^a]{2}/utf\n    \\x{100}bc\n 0: \\x{100}b\n\n/^[^a]{2,}/utf\n    \\x{100}bcAa\n 0: \\x{100}bcA\n\n/^[^a]{2,}?/utf\n    \\x{100}bca\n 0: \\x{100}b\n\n/[^a]+/gi,utf\n    bcd\n 0: bcd\n    \\x{100}aY\\x{256}Z\n 0: \\x{100}\n 0: Y\\x{256}Z\n\n/^[^a]{2}/i,utf\n    \\x{100}bc\n 0: \\x{100}b\n\n/^[^a]{2,}/i,utf\n    \\x{100}bcAa\n 0: \\x{100}bc\n\n/^[^a]{2,}?/i,utf\n    \\x{100}bca\n 0: \\x{100}b\n\n/\\x{100}{0,0}/utf\n    abcd\n 0: \n\n/\\x{100}?/utf\n    abcd\n 0: \n    \\x{100}\\x{100}\n 0: \\x{100}\n\n/\\x{100}{0,3}/utf\n    \\x{100}\\x{100}\n 0: \\x{100}\\x{100}\n    \\x{100}\\x{100}\\x{100}\\x{100}\n 0: \\x{100}\\x{100}\\x{100}\n\n/\\x{100}*/utf\n    abce\n 0: \n    \\x{100}\\x{100}\\x{100}\\x{100}\n 0: \\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\x{100}{1,1}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\n 0: \\x{100}\n\n/\\x{100}{1,3}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\n 0: \\x{100}\\x{100}\\x{100}\n\n/\\x{100}+/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\n 0: \\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\x{100}{3}/utf\n    abcd\\x{100}\\x{100}\\x{100}XX\n 0: \\x{100}\\x{100}\\x{100}\n\n/\\x{100}{3,5}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}XX\n 0: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\x{100}{3,}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}XX\n 0: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n\n/(?<=a\\x{100}{2}b)X/utf,aftertext\n    Xyyya\\x{100}\\x{100}bXzzz\n 0: X\n 0+ zzz\n\n/\\D*/utf\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/\\D*/utf\n  \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 0: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\D/utf\n    1X2\n 0: X\n    1\\x{100}2\n 0: \\x{100}\n\n/>\\S/utf\n    > >X Y\n 0: >X\n    > >\\x{100} Y\n 0: >\\x{100}\n\n/\\d/utf\n    \\x{100}3\n 0: 3\n\n/\\s/utf\n    \\x{100} X\n 0:  \n\n/\\D+/utf\n    12abcd34\n 0: abcd\n\\= Expect no match\n    1234\nNo match\n\n/\\D{2,3}/utf\n    12abcd34\n 0: abc\n    12ab34\n 0: ab\n\\= Expect no match\n    1234\nNo match\n    12a34\nNo match\n\n/\\D{2,3}?/utf\n    12abcd34\n 0: ab\n    12ab34\n 0: ab\n\\= Expect no match\n    1234\nNo match\n    12a34\nNo match\n\n/\\d+/utf\n    12abcd34\n 0: 12\n\n/\\d{2,3}/utf\n    12abcd34\n 0: 12\n    1234abcd\n 0: 123\n\\= Expect no match\n    1.4\nNo match\n\n/\\d{2,3}?/utf\n    12abcd34\n 0: 12\n    1234abcd\n 0: 12\n\\= Expect no match\n    1.4\nNo match\n\n/\\S+/utf\n    12abcd34\n 0: 12abcd34\n\\= Expect no match\n    \\    \\\nNo match\n\n/\\S{2,3}/utf\n    12abcd34\n 0: 12a\n    1234abcd\n 0: 123\n\\= Expect no match\n    \\     \\\nNo match\n\n/\\S{2,3}?/utf\n    12abcd34\n 0: 12\n    1234abcd\n 0: 12\n\\= Expect no match\n    \\     \\\nNo match\n\n/>\\s+</utf,aftertext\n    12>      <34\n 0: >      <\n 0+ 34\n\n/>\\s{2,3}</utf,aftertext\n    ab>  <cd\n 0: >  <\n 0+ cd\n    ab>   <ce\n 0: >   <\n 0+ ce\n\\= Expect no match\n    ab>    <cd\nNo match\n\n/>\\s{2,3}?</utf,aftertext\n    ab>  <cd\n 0: >  <\n 0+ cd\n    ab>   <ce\n 0: >   <\n 0+ ce\n\\= Expect no match\n    ab>    <cd\nNo match\n\n/\\w+/utf\n    12      34\n 0: 12\n\\= Expect no match\n    +++=*!\nNo match\n\n/\\w{2,3}/utf\n    ab  cd\n 0: ab\n    abcd ce\n 0: abc\n\\= Expect no match\n    a.b.c\nNo match\n\n/\\w{2,3}?/utf\n    ab  cd\n 0: ab\n    abcd ce\n 0: ab\n\\= Expect no match\n    a.b.c\nNo match\n\n/\\W+/utf\n    12====34\n 0: ====\n\\= Expect no match\n    abcd\nNo match\n\n/\\W{2,3}/utf\n    ab====cd\n 0: ===\n    ab==cd\n 0: ==\n\\= Expect no match\n    a.b.c\nNo match\n\n/\\W{2,3}?/utf\n    ab====cd\n 0: ==\n    ab==cd\n 0: ==\n\\= Expect no match\n    a.b.c\nNo match\n\n/[\\x{100}]/utf\n    \\x{100}\n 0: \\x{100}\n    Z\\x{100}\n 0: \\x{100}\n    \\x{100}Z\n 0: \\x{100}\n\n/[Z\\x{100}]/utf\n    Z\\x{100}\n 0: Z\n    \\x{100}\n 0: \\x{100}\n    \\x{100}Z\n 0: \\x{100}\n\n/[\\x{100}\\x{200}]/utf\n    ab\\x{100}cd\n 0: \\x{100}\n    ab\\x{200}cd\n 0: \\x{200}\n\n/[\\x{100}-\\x{200}]/utf\n    ab\\x{100}cd\n 0: \\x{100}\n    ab\\x{200}cd\n 0: \\x{200}\n    ab\\x{111}cd\n 0: \\x{111}\n\n/[z-\\x{200}]/utf\n    ab\\x{100}cd\n 0: \\x{100}\n    ab\\x{200}cd\n 0: \\x{200}\n    ab\\x{111}cd\n 0: \\x{111}\n    abzcd\n 0: z\n    ab|cd\n 0: |\n\n/[Q\\x{100}\\x{200}]/utf\n    ab\\x{100}cd\n 0: \\x{100}\n    ab\\x{200}cd\n 0: \\x{200}\n    Q?\n 0: Q\n\n/[Q\\x{100}-\\x{200}]/utf\n    ab\\x{100}cd\n 0: \\x{100}\n    ab\\x{200}cd\n 0: \\x{200}\n    ab\\x{111}cd\n 0: \\x{111}\n    Q?\n 0: Q\n\n/[Qz-\\x{200}]/utf\n    ab\\x{100}cd\n 0: \\x{100}\n    ab\\x{200}cd\n 0: \\x{200}\n    ab\\x{111}cd\n 0: \\x{111}\n    abzcd\n 0: z\n    ab|cd\n 0: |\n    Q?\n 0: Q\n\n/[\\x{100}\\x{200}]{1,3}/utf\n    ab\\x{100}cd\n 0: \\x{100}\n    ab\\x{200}cd\n 0: \\x{200}\n    ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n 0: \\x{200}\\x{100}\\x{200}\n\n/[\\x{100}\\x{200}]{1,3}?/utf\n    ab\\x{100}cd\n 0: \\x{100}\n    ab\\x{200}cd\n 0: \\x{200}\n    ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n 0: \\x{200}\n\n/[Q\\x{100}\\x{200}]{1,3}/utf\n    ab\\x{100}cd\n 0: \\x{100}\n    ab\\x{200}cd\n 0: \\x{200}\n    ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n 0: \\x{200}\\x{100}\\x{200}\n\n/[Q\\x{100}\\x{200}]{1,3}?/utf\n    ab\\x{100}cd\n 0: \\x{100}\n    ab\\x{200}cd\n 0: \\x{200}\n    ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n 0: \\x{200}\n\n/(?<=[\\x{100}\\x{200}])X/utf\n    abc\\x{200}X\n 0: X\n    abc\\x{100}X\n 0: X\n\\= Expect no match\n    X\nNo match\n\n/(?<=[Q\\x{100}\\x{200}])X/utf\n    abc\\x{200}X\n 0: X\n    abc\\x{100}X\n 0: X\n    abQX\n 0: X\n\\= Expect no match\n    X\nNo match\n\n/(?<=[\\x{100}\\x{200}]{3})X/utf\n    abc\\x{100}\\x{200}\\x{100}X\n 0: X\n\\= Expect no match\n    abc\\x{200}X\nNo match\n    X\nNo match\n\n/[^\\x{100}\\x{200}]X/utf\n    AX\n 0: AX\n    \\x{150}X\n 0: \\x{150}X\n    \\x{500}X\n 0: \\x{500}X\n\\= Expect no match\n    \\x{100}X\nNo match\n    \\x{200}X\nNo match\n\n/[^Q\\x{100}\\x{200}]X/utf\n    AX\n 0: AX\n    \\x{150}X\n 0: \\x{150}X\n    \\x{500}X\n 0: \\x{500}X\n\\= Expect no match\n    \\x{100}X\nNo match\n    \\x{200}X\nNo match\n    QX\nNo match\n\n/[^\\x{100}-\\x{200}]X/utf\n    AX\n 0: AX\n    \\x{500}X\n 0: \\x{500}X\n\\= Expect no match\n    \\x{100}X\nNo match\n    \\x{150}X\nNo match\n    \\x{200}X\nNo match\n\n/[z-\\x{100}]/i,utf\n    z\n 0: z\n    Z\n 0: Z\n    \\x{100}\n 0: \\x{100}\n\\= Expect no match\n    \\x{102}\nNo match\n    y\nNo match\n\n/[\\xFF]/\n    >\\xff<\n 0: \\xff\n\n/[\\xff]/utf\n    >\\x{ff}<\n 0: \\x{ff}\n\n/[^\\xFF]/\n    XYZ\n 0: X\n\n/[^\\xff]/utf\n    XYZ\n 0: X\n    \\x{123}\n 0: \\x{123}\n\n/^[ac]*b/utf\n\\= Expect no match\n  xb\nNo match\n\n/^[ac\\x{100}]*b/utf\n\\= Expect no match\n  xb\nNo match\n\n/^[^x]*b/i,utf\n\\= Expect no match\n  xb\nNo match\n\n/^[^x]*b/utf\n\\= Expect no match\n  xb\nNo match\n\n/^\\d*b/utf\n\\= Expect no match\n  xb\nNo match\n\n/(|a)/g,utf\n    catac\n 0: \n 1: \n 0: \n 1: \n 0: a\n 1: a\n 0: \n 1: \n 0: \n 1: \n 0: a\n 1: a\n 0: \n 1: \n 0: \n 1: \n    a\\x{256}a\n 0: \n 1: \n 0: a\n 1: a\n 0: \n 1: \n 0: \n 1: \n 0: a\n 1: a\n 0: \n 1: \n\n/^\\x{85}$/i,utf\n    \\x{85}\n 0: \\x{85}\n\n/^ሴ/utf\n    ሴ\n 0: \\x{1234}\n\n/^\\ሴ/utf\n    ሴ\n 0: \\x{1234}\n\n/(?s)(.{1,5})/utf\n    abcdefg\n 0: abcde\n 1: abcde\n    ab\n 0: ab\n 1: ab\n\n/a*\\x{100}*\\w/utf\n    a\n 0: a\n\n/\\S\\S/g,utf\n    A\\x{a3}BC\n 0: A\\x{a3}\n 0: BC\n\n/\\S{2}/g,utf\n    A\\x{a3}BC\n 0: A\\x{a3}\n 0: BC\n\n/\\W\\W/g,utf\n    +\\x{a3}==\n 0: +\\x{a3}\n 0: ==\n\n/\\W{2}/g,utf\n    +\\x{a3}==\n 0: +\\x{a3}\n 0: ==\n\n/\\S/g,utf\n    \\x{442}\\x{435}\\x{441}\\x{442}\n 0: \\x{442}\n 0: \\x{435}\n 0: \\x{441}\n 0: \\x{442}\n\n/[\\S]/g,utf\n    \\x{442}\\x{435}\\x{441}\\x{442}\n 0: \\x{442}\n 0: \\x{435}\n 0: \\x{441}\n 0: \\x{442}\n\n/\\D/g,utf\n    \\x{442}\\x{435}\\x{441}\\x{442}\n 0: \\x{442}\n 0: \\x{435}\n 0: \\x{441}\n 0: \\x{442}\n\n/[\\D]/g,utf\n    \\x{442}\\x{435}\\x{441}\\x{442}\n 0: \\x{442}\n 0: \\x{435}\n 0: \\x{441}\n 0: \\x{442}\n\n/\\W/g,utf\n    \\x{2442}\\x{2435}\\x{2441}\\x{2442}\n 0: \\x{2442}\n 0: \\x{2435}\n 0: \\x{2441}\n 0: \\x{2442}\n\n/[\\W]/g,utf\n    \\x{2442}\\x{2435}\\x{2441}\\x{2442}\n 0: \\x{2442}\n 0: \\x{2435}\n 0: \\x{2441}\n 0: \\x{2442}\n\n/[\\S\\s]*/utf\n    abc\\n\\r\\x{442}\\x{435}\\x{441}\\x{442}xyz\n 0: abc\\x{0a}\\x{0d}\\x{442}\\x{435}\\x{441}\\x{442}xyz\n\n/[\\x{41f}\\S]/g,utf\n    \\x{442}\\x{435}\\x{441}\\x{442}\n 0: \\x{442}\n 0: \\x{435}\n 0: \\x{441}\n 0: \\x{442}\n\n/.[^\\S]./g,utf\n    abc def\\x{442}\\x{443}xyz\\npqr\n 0: c d\n 0: z\\x{0a}p\n\n/.[^\\S\\n]./g,utf\n    abc def\\x{442}\\x{443}xyz\\npqr\n 0: c d\n\n/[[:^alnum:]]/g,utf\n    +\\x{2442}\n 0: +\n 0: \\x{2442}\n\n/[[:^alpha:]]/g,utf\n    +\\x{2442}\n 0: +\n 0: \\x{2442}\n\n/[[:^ascii:]]/g,utf\n    A\\x{442}\n 0: \\x{442}\n\n/[[:^blank:]]/g,utf\n    A\\x{442}\n 0: A\n 0: \\x{442}\n\n/[[:^cntrl:]]/g,utf\n    A\\x{442}\n 0: A\n 0: \\x{442}\n\n/[[:^digit:]]/g,utf\n    A\\x{442}\n 0: A\n 0: \\x{442}\n\n/[[:^graph:]]/g,utf\n    \\x19\\x{e01ff}\n 0: \\x{19}\n 0: \\x{e01ff}\n\n/[[:^lower:]]/g,utf\n    A\\x{422}\n 0: A\n 0: \\x{422}\n\n/[[:^print:]]/g,utf\n    \\x{19}\\x{e01ff}\n 0: \\x{19}\n 0: \\x{e01ff}\n\n/[[:^punct:]]/g,utf\n    A\\x{442}\n 0: A\n 0: \\x{442}\n\n/[[:^space:]]/g,utf\n    A\\x{442}\n 0: A\n 0: \\x{442}\n\n/[[:^upper:]]/g,utf\n    a\\x{442}\n 0: a\n 0: \\x{442}\n\n/[[:^word:]]/g,utf\n    +\\x{2442}\n 0: +\n 0: \\x{2442}\n\n/[[:^xdigit:]]/g,utf\n    M\\x{442}\n 0: M\n 0: \\x{442}\n\n/[^ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİĲĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽƁƂƄƆƇƉƊƋƎƏƐƑƓƔƖƗƘƜƝƟƠƢƤƦƧƩƬƮƯƱƲƳƵƷƸƼǄǇǊǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮǱǴǶǷǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾɁΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫϒϓϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹϺϽϾϿЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸԀԂԄԆԈԊԌԎԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸἈἉἊἋἌἍἎἏἘἙἚἛἜἝἨἩἪἫἬἭἮἯἸἹἺἻἼἽἾἿὈὉὊὋὌὍὙὛὝὟὨὩὪὫὬὭὮὯᾸᾹᾺΆῈΈῊΉῘῙῚΊῨῩῪΎῬῸΌῺΏabcdefghijklmnopqrstuvwxyzªµºßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĳĵķĸĺļľŀłńņňŉŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżžſƀƃƅƈƌƍƒƕƙƚƛƞơƣƥƨƪƫƭưƴƶƹƺƽƾƿǆǉǌǎǐǒǔǖǘǚǜǝǟǡǣǥǧǩǫǭǯǰǳǵǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟȡȣȥȧȩȫȭȯȱȳȴȵȶȷȸȹȼȿɀɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕʖʗʘʙʚʛʜʝʞʟʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯΐάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώϐϑϕϖϗϙϛϝϟϡϣϥϧϩϫϭϯϰϱϲϳϵϸϻϼабвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹԁԃԅԇԉԋԍԏաբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆևᴀᴁᴂᴃᴄᴅᴆᴇᴈᴉᴊᴋᴌᴍᴎᴏᴐᴑᴒᴓᴔᴕᴖᴗᴘᴙᴚᴛᴜᴝᴞᴟᴠᴡᴢᴣᴤᴥᴦᴧᴨᴩᴪᴫᵢᵣᵤᵥᵦᵧᵨᵩᵪᵫᵬᵭᵮᵯᵰᵱᵲᵳᵴᵵᵶᵷᵹᵺᵻᵼᵽᵾᵿᶀᶁᶂᶃᶄᶅᶆᶇᶈᶉᶊᶋᶌᶍᶎᶏᶐᶑᶒᶓᶔᶕᶖᶗᶘᶙᶚḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕẖẗẘẙẚẛạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹἀἁἂἃἄἅἆἇἐἑἒἓἔἕἠἡἢἣἤἥἦἧἰἱἲἳἴἵἶἷὀὁὂὃὄὅὐὑὒὓὔὕὖὗὠὡὢὣὤὥὦὧὰάὲέὴήὶίὸόὺύὼώᾀᾁᾂᾃᾄᾅᾆᾇᾐᾑᾒᾓᾔᾕᾖᾗᾠᾡᾢᾣᾤᾥᾦᾧᾰᾱᾲᾳᾴᾶᾷιῂῃῄῆῇῐῑῒΐῖῗῠῡῢΰῤῥῦῧῲῳῴῶῷⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣⳤⴀⴁⴂⴃⴄⴅⴆⴇⴈⴉⴊⴋⴌⴍⴎⴏⴐⴑⴒⴓⴔⴕⴖⴗⴘⴙⴚⴛⴜⴝⴞⴟⴠⴡⴢⴣⴤⴥﬀﬁﬂﬃﬄﬅﬆﬓﬔﬕﬖﬗ\\d_^]/utf\n\n/^[^d]*?$/\n    abc\n 0: abc\n\n/^[^d]*?$/utf\n    abc\n 0: abc\n\n/^[^d]*?$/i\n    abc\n 0: abc\n\n/^[^d]*?$/i,utf\n    abc\n 0: abc\n\n/(?i)[\\xc3\\xa9\\xc3\\xbd]|[\\xc3\\xa9\\xc3\\xbdA]/utf\n\n/^[a\\x{c0}]b/utf\n    \\x{c0}b\n 0: \\x{c0}b\n\n/^([a\\x{c0}]*?)aa/utf\n    a\\x{c0}aaaa/\n 0: a\\x{c0}aa\n 1: a\\x{c0}\n\n/^([a\\x{c0}]*?)aa/utf\n    a\\x{c0}aaaa/\n 0: a\\x{c0}aa\n 1: a\\x{c0}\n    a\\x{c0}a\\x{c0}aaa/\n 0: a\\x{c0}a\\x{c0}aa\n 1: a\\x{c0}a\\x{c0}\n\n/^([a\\x{c0}]*)aa/utf\n    a\\x{c0}aaaa/\n 0: a\\x{c0}aaaa\n 1: a\\x{c0}aa\n    a\\x{c0}a\\x{c0}aaa/\n 0: a\\x{c0}a\\x{c0}aaa\n 1: a\\x{c0}a\\x{c0}a\n\n/^([a\\x{c0}]*)a\\x{c0}/utf\n    a\\x{c0}aaaa/\n 0: a\\x{c0}\n 1: \n    a\\x{c0}a\\x{c0}aaa/\n 0: a\\x{c0}a\\x{c0}\n 1: a\\x{c0}\n\n/A*/g,utf\n    AAB\\x{123}BAA\n 0: AA\n 0: \n 0: \n 0: \n 0: AA\n 0: \n\n/(abc)\\1/i,utf\n\\= Expect no match\n   abc\nNo match\n\n/(abc)\\1/utf\n\\= Expect no match\n   abc\nNo match\n\n/a(*:a\\x{1234}b)/utf,mark\n    abc\n 0: a\nMK: a\\x{1234}b\n\n/a(*:a£b)/utf,mark\n    abc\n 0: a\nMK: a\\x{a3}b\n\n# Noncharacters\n\n/./utf\n    \\x{fffe}\n 0: \\x{fffe}\n    \\x{ffff}\n 0: \\x{ffff}\n    \\x{1fffe}\n 0: \\x{1fffe}\n    \\x{1ffff}\n 0: \\x{1ffff}\n    \\x{2fffe}\n 0: \\x{2fffe}\n    \\x{2ffff}\n 0: \\x{2ffff}\n    \\x{3fffe}\n 0: \\x{3fffe}\n    \\x{3ffff}\n 0: \\x{3ffff}\n    \\x{4fffe}\n 0: \\x{4fffe}\n    \\x{4ffff}\n 0: \\x{4ffff}\n    \\x{5fffe}\n 0: \\x{5fffe}\n    \\x{5ffff}\n 0: \\x{5ffff}\n    \\x{6fffe}\n 0: \\x{6fffe}\n    \\x{6ffff}\n 0: \\x{6ffff}\n    \\x{7fffe}\n 0: \\x{7fffe}\n    \\x{7ffff}\n 0: \\x{7ffff}\n    \\x{8fffe}\n 0: \\x{8fffe}\n    \\x{8ffff}\n 0: \\x{8ffff}\n    \\x{9fffe}\n 0: \\x{9fffe}\n    \\x{9ffff}\n 0: \\x{9ffff}\n    \\x{afffe}\n 0: \\x{afffe}\n    \\x{affff}\n 0: \\x{affff}\n    \\x{bfffe}\n 0: \\x{bfffe}\n    \\x{bffff}\n 0: \\x{bffff}\n    \\x{cfffe}\n 0: \\x{cfffe}\n    \\x{cffff}\n 0: \\x{cffff}\n    \\x{dfffe}\n 0: \\x{dfffe}\n    \\x{dffff}\n 0: \\x{dffff}\n    \\x{efffe}\n 0: \\x{efffe}\n    \\x{effff}\n 0: \\x{effff}\n    \\x{ffffe}\n 0: \\x{ffffe}\n    \\x{fffff}\n 0: \\x{fffff}\n    \\x{10fffe}\n 0: \\x{10fffe}\n    \\x{10ffff}\n 0: \\x{10ffff}\n    \\x{fdd0}\n 0: \\x{fdd0}\n    \\x{fdd1}\n 0: \\x{fdd1}\n    \\x{fdd2}\n 0: \\x{fdd2}\n    \\x{fdd3}\n 0: \\x{fdd3}\n    \\x{fdd4}\n 0: \\x{fdd4}\n    \\x{fdd5}\n 0: \\x{fdd5}\n    \\x{fdd6}\n 0: \\x{fdd6}\n    \\x{fdd7}\n 0: \\x{fdd7}\n    \\x{fdd8}\n 0: \\x{fdd8}\n    \\x{fdd9}\n 0: \\x{fdd9}\n    \\x{fdda}\n 0: \\x{fdda}\n    \\x{fddb}\n 0: \\x{fddb}\n    \\x{fddc}\n 0: \\x{fddc}\n    \\x{fddd}\n 0: \\x{fddd}\n    \\x{fdde}\n 0: \\x{fdde}\n    \\x{fddf}\n 0: \\x{fddf}\n    \\x{fde0}\n 0: \\x{fde0}\n    \\x{fde1}\n 0: \\x{fde1}\n    \\x{fde2}\n 0: \\x{fde2}\n    \\x{fde3}\n 0: \\x{fde3}\n    \\x{fde4}\n 0: \\x{fde4}\n    \\x{fde5}\n 0: \\x{fde5}\n    \\x{fde6}\n 0: \\x{fde6}\n    \\x{fde7}\n 0: \\x{fde7}\n    \\x{fde8}\n 0: \\x{fde8}\n    \\x{fde9}\n 0: \\x{fde9}\n    \\x{fdea}\n 0: \\x{fdea}\n    \\x{fdeb}\n 0: \\x{fdeb}\n    \\x{fdec}\n 0: \\x{fdec}\n    \\x{fded}\n 0: \\x{fded}\n    \\x{fdee}\n 0: \\x{fdee}\n    \\x{fdef}\n 0: \\x{fdef}\n\n/^\\d*\\w{4}/utf\n    1234\n 0: 1234\n\\= Expect no match\n    123\nNo match\n\n/^[^b]*\\w{4}/utf\n    aaaa\n 0: aaaa\n\\= Expect no match\n    aaa\nNo match\n\n/^[^b]*\\w{4}/i,utf\n    aaaa\n 0: aaaa\n\\= Expect no match\n    aaa\nNo match\n\n/^\\x{100}*.{4}/utf\n    \\x{100}\\x{100}\\x{100}\\x{100}\n 0: \\x{100}\\x{100}\\x{100}\\x{100}\n\\= Expect no match\n    \\x{100}\\x{100}\\x{100}\nNo match\n\n/^\\x{100}*.{4}/i,utf\n    \\x{100}\\x{100}\\x{100}\\x{100}\n 0: \\x{100}\\x{100}\\x{100}\\x{100}\n\\= Expect no match\n    \\x{100}\\x{100}\\x{100}\nNo match\n\n/^a+[a\\x{200}]/utf\n    aa\n 0: aa\n\n/^.\\B.\\B./utf\n    \\x{10123}\\x{10124}\\x{10125}\n 0: \\x{10123}\\x{10124}\\x{10125}\n\n/^#[^\\x{ffff}]#[^\\x{ffff}]#[^\\x{ffff}]#/utf\n    #\\x{10000}#\\x{100}#\\x{10ffff}#\n 0: #\\x{10000}#\\x{100}#\\x{10ffff}#\n\n# Unicode property support tests\n\n/^\\pC\\pL\\pM\\pN\\pP\\pS\\pZ</utf\n    \\x7f\\x{c0}\\x{30f}\\x{660}\\x{66c}\\x{f01}\\x{1680}<\n 0: \\x{7f}\\x{c0}\\x{30f}\\x{660}\\x{66c}\\x{f01}\\x{1680}<\n    \\np\\x{300}9!\\$ <\n 0: \\x{0a}p\\x{300}9!$ <\n\\= Expect no match\n    ap\\x{300}9!\\$ <\nNo match\n\n/^\\PC/utf\n    X\n 0: X\n\\= Expect no match\n    \\x7f\nNo match\n\n/^\\PL/utf\n    9\n 0: 9\n\\= Expect no match\n    \\x{c0}\nNo match\n\n/^\\PM/utf\n    X\n 0: X\n\\= Expect no match\n    \\x{30f}\nNo match\n\n/^\\PN/utf\n    X\n 0: X\n\\= Expect no match\n    \\x{660}\nNo match\n\n/^\\PP/utf\n    X\n 0: X\n\\= Expect no match\n    \\x{66c}\nNo match\n\n/^\\PS/utf\n    X\n 0: X\n\\= Expect no match\n    \\x{f01}\nNo match\n\n/^\\PZ/utf\n    X\n 0: X\n\\= Expect no match\n    \\x{1680}\nNo match\n\n/^\\p{Cc}/utf\n    \\x{017}\n 0: \\x{17}\n    \\x{09f}\n 0: \\x{9f}\n\\= Expect no match\n    \\x{0600}\nNo match\n\n/^\\p{Cf}/utf\n    \\x{601}\n 0: \\x{601}\n\\= Expect no match\n    \\x{09f}\nNo match\n\n/^\\p{Cn}/utf\n    \\x{e0000}\n 0: \\x{e0000}\n\\= Expect no match\n    \\x{09f}\nNo match\n\n/^\\p{Co}/utf\n    \\x{f8ff}\n 0: \\x{f8ff}\n\\= Expect no match\n    \\x{09f}\nNo match\n\n/^\\p{Ll}/utf\n    a\n 0: a\n\\= Expect no match\n    Z\nNo match\n    \\x{e000}\nNo match\n\n/^\\p{Lm}/utf\n    \\x{2b0}\n 0: \\x{2b0}\n\\= Expect no match\n    a\nNo match\n\n/^\\p{Lo}/utf\n    \\x{1bb}\n 0: \\x{1bb}\n    \\x{3400}\n 0: \\x{3400}\n    \\x{3401}\n 0: \\x{3401}\n    \\x{4d00}\n 0: \\x{4d00}\n    \\x{4db4}\n 0: \\x{4db4}\n    \\x{4db5}\n 0: \\x{4db5}\n    \\x{4db6}\n 0: \\x{4db6}\n\\= Expect no match\n    a\nNo match\n    \\x{2b0}\nNo match\n\n/^\\p{Lt}/utf\n    \\x{1c5}\n 0: \\x{1c5}\n\\= Expect no match\n    a\nNo match\n    \\x{2b0}\nNo match\n\n/^\\p{Lu}/utf\n    A\n 0: A\n\\= Expect no match\n    \\x{2b0}\nNo match\n\n/^\\p{Mc}/utf\n    \\x{903}\n 0: \\x{903}\n\\= Expect no match\n    X\nNo match\n    \\x{300}\nNo match\n\n/^\\p{Me}/utf\n    \\x{488}\n 0: \\x{488}\n\\= Expect no match\n    X\nNo match\n    \\x{903}\nNo match\n    \\x{300}\nNo match\n\n/^\\p{Mn}/utf\n    \\x{300}\n 0: \\x{300}\n\\= Expect no match\n    X\nNo match\n    \\x{903}\nNo match\n\n/^\\p{Nd}+/utf\n    0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\\x{668}\\x{669}\\x{66a}\n 0: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\\x{668}\\x{669}\n    \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\\x{6f8}\\x{6f9}\\x{6fa}\n 0: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\\x{6f8}\\x{6f9}\n    \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\\x{96e}\\x{96f}\\x{970}\n 0: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\\x{96e}\\x{96f}\n\\= Expect no match\n    X\nNo match\n\n/^\\p{Nl}/utf\n    \\x{16ee}\n 0: \\x{16ee}\n\\= Expect no match\n    X\nNo match\n    \\x{966}\nNo match\n\n/^\\p{No}/utf\n    \\x{b2}\n 0: \\x{b2}\n    \\x{b3}\n 0: \\x{b3}\n\\= Expect no match\n    X\nNo match\n    \\x{16ee}\nNo match\n\n/^\\p{Pc}/utf\n    \\x5f\n 0: _\n    \\x{203f}\n 0: \\x{203f}\n\\= Expect no match\n    X\nNo match\n    -\nNo match\n    \\x{58a}\nNo match\n\n/^\\p{Pd}/utf\n    -\n 0: -\n    \\x{58a}\n 0: \\x{58a}\n\\= Expect no match\n    X\nNo match\n    \\x{203f}\nNo match\n\n/^\\p{Pe}/utf\n    )\n 0: )\n    ]\n 0: ]\n    }\n 0: }\n    \\x{f3b}\n 0: \\x{f3b}\n\\= Expect no match\n    X\nNo match\n    \\x{203f}\nNo match\n    (\nNo match\n    [\nNo match\n    {\nNo match\n    \\x{f3c}\nNo match\n\n/^\\p{Pf}/utf\n    \\x{bb}\n 0: \\x{bb}\n    \\x{2019}\n 0: \\x{2019}\n\\= Expect no match\n    X\nNo match\n    \\x{203f}\nNo match\n\n/^\\p{Pi}/utf\n    \\x{ab}\n 0: \\x{ab}\n    \\x{2018}\n 0: \\x{2018}\n\\= Expect no match\n    X\nNo match\n    \\x{203f}\nNo match\n\n/^\\p{Po}/utf\n    !\n 0: !\n    \\x{37e}\n 0: \\x{37e}\n\\= Expect no match\n    X\nNo match\n    \\x{203f}\nNo match\n\n/^\\p{Ps}/utf\n    (\n 0: (\n    [\n 0: [\n    {\n 0: {\n    \\x{f3c}\n 0: \\x{f3c}\n\\= Expect no match\n    X\nNo match\n    )\nNo match\n    ]\nNo match\n    }\nNo match\n    \\x{f3b}\nNo match\n\n/^\\p{Sk}/utf\n    \\x{2c2}\n 0: \\x{2c2}\n\\= Expect no match\n    X\nNo match\n    \\x{9f2}\nNo match\n\n/^\\p{Sm}+/utf\n    +<|~\\x{ac}\\x{2044}\n 0: +<|~\\x{ac}\\x{2044}\n\\= Expect no match\n    X\nNo match\n    \\x{9f2}\nNo match\n\n/^\\p{So}/utf\n    \\x{a6}\n 0: \\x{a6}\n    \\x{482}\n 0: \\x{482}\n\\= Expect no match\n    X\nNo match\n    \\x{9f2}\nNo match\n\n/^\\p{Zl}/utf\n    \\x{2028}\n 0: \\x{2028}\n\\= Expect no match\n    X\nNo match\n    \\x{2029}\nNo match\n\n/^\\p{Zp}/utf\n    \\x{2029}\n 0: \\x{2029}\n\\= Expect no match\n    X\nNo match\n    \\x{2028}\nNo match\n\n/\\p{Nd}+(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: AB\n\n/\\p{Nd}+?(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}\n 1: \\x{661}\\x{662}\n\n/\\p{Nd}{2,}(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: AB\n\n/\\p{Nd}{2,}?(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}A\n 1: \\x{662}A\n\n/\\p{Nd}*(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: AB\n\n/\\p{Nd}*?(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\n 1: \\x{660}\\x{661}\n\n/\\p{Nd}{2}(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}A\n 1: \\x{662}A\n\n/\\p{Nd}{2,3}(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: AB\n\n/\\p{Nd}{2,3}?(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}A\n 1: \\x{662}A\n\n/\\p{Nd}?(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}\n 1: \\x{661}\\x{662}\n\n/\\p{Nd}??(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\n 1: \\x{660}\\x{661}\n\n/\\p{Nd}*+(..)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: AB\n\n/\\p{Nd}*+(...)/utf\n    \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}ABC\n 1: ABC\n\n/\\p{Nd}*+(....)/utf\n\\= Expect no match\n    \\x{660}\\x{661}\\x{662}ABC\nNo match\n\n/^\\pN{3,}+(.)/utf\n   \\x{7c0}8\\x{662}\\x{966}\\x{95c}\n 0: \\x{7c0}8\\x{662}\\x{966}\\x{95c}\n 1: \\x{95c}\n   \\x{7c0}8\\x{662}\\x{95c}\n 0: \\x{7c0}8\\x{662}\\x{95c}\n 1: \\x{95c}\n\\= Expect no match\n   \\x{7c0}8\\x{662}\\x{966}\nNo match\n   \\x{7c0}8\\x{95c}\nNo match\n\n/(?<=A\\p{Nd})XYZ/utf\n    A2XYZ\n 0: XYZ\n    123A5XYZPQR\n 0: XYZ\n    ABA\\x{660}XYZpqr\n 0: XYZ\n\\= Expect no match\n    AXYZ\nNo match\n    XYZ\nNo match\n\n/(?<!\\pL)XYZ/utf\n    1XYZ\n 0: XYZ\n    AB=XYZ..\n 0: XYZ\n    XYZ\n 0: XYZ\n\\= Expect no match\n    WXYZ\nNo match\n\n/[\\P{Nd}]+/utf\n    abcd\n 0: abcd\n\\= Expect no match\n    1234\nNo match\n\n/\\D+/utf\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\nNo match\n\n/\\P{Nd}+/utf\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\nNo match\n\n/[\\D]+/utf\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\nNo match\n\n/[\\P{Nd}]+/utf\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\nNo match\n\n/[\\D\\P{Nd}]+/utf\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\nNo match\n\n/\\pL/utf\n    a\n 0: a\n    A\n 0: A\n\n/\\pL/i,utf\n    a\n 0: a\n    A\n 0: A\n\n/\\p{Lu}/utf\n    A\n 0: A\n    aZ\n 0: Z\n\\= Expect no match\n    abc\nNo match\n\n/\\p{Ll}/utf\n    a\n 0: a\n    Az\n 0: z\n\\= Expect no match\n    ABC\nNo match\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/utf\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 0: A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n\\= Expect no match\n    a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\nNo match\n    A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}\nNo match\n    A\\x{391}\\x{1044F}\\x{ff3a}\\x{1fb0}\nNo match\n    A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}\nNo match\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}\nNo match\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/i,utf\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 0: A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n    a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 0: a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n    A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}\n 0: A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}\n    A\\x{391}\\x{1044F}\\x{ff3a}\\x{1fb0}\n 0: A\\x{391}\\x{1044f}\\x{ff3a}\\x{1fb0}\n    A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}\n 0: A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}\n 0: A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}\n\n/\\x{391}+/i,utf\n    \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}\n 0: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}\n\n/\\x{391}{3,5}(.)/i,utf\n    \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X\n 0: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X\n 1: X\n\n/\\x{391}{3,5}?(.)/i,utf\n    \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X\n 0: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\n 1: \\x{3b1}\n\n/[\\x{391}\\x{ff3a}]/i,utf\n    \\x{391}\n 0: \\x{391}\n    \\x{ff3a}\n 0: \\x{ff3a}\n    \\x{3b1}\n 0: \\x{3b1}\n    \\x{ff5a}\n 0: \\x{ff5a}\n\n/^(\\X*)C/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n 0: A\\x{300}\\x{301}\\x{302}BC\n 1: A\\x{300}\\x{301}\\x{302}B\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 0: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 1: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n\n/^(\\X*?)C/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n 0: A\\x{300}\\x{301}\\x{302}BC\n 1: A\\x{300}\\x{301}\\x{302}B\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 0: A\\x{300}\\x{301}\\x{302}BC\n 1: A\\x{300}\\x{301}\\x{302}B\n\n/^(\\X*)(.)/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n 0: A\\x{300}\\x{301}\\x{302}BCA\n 1: A\\x{300}\\x{301}\\x{302}BC\n 2: A\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 0: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 1: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n 2: C\n\n/^(\\X*?)(.)/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n 0: A\n 1: \n 2: A\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 0: A\n 1: \n 2: A\n\n/^\\X(.)/utf\n\\= Expect no match\n    A\\x{300}\\x{301}\\x{302}\nNo match\n\n/^\\X{2,3}(.)/utf\n    A\\x{300}\\x{301}B\\x{300}X\n 0: A\\x{300}\\x{301}B\\x{300}X\n 1: X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}\n 0: A\\x{300}\\x{301}B\\x{300}C\n 1: C\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X\n 0: A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X\n 1: X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}DA\\x{300}X\n 0: A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}D\n 1: D\n\n/^\\X{2,3}?(.)/utf\n    A\\x{300}\\x{301}B\\x{300}X\n 0: A\\x{300}\\x{301}B\\x{300}X\n 1: X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}\n 0: A\\x{300}\\x{301}B\\x{300}C\n 1: C\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X\n 0: A\\x{300}\\x{301}B\\x{300}C\n 1: C\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}DA\\x{300}X\n 0: A\\x{300}\\x{301}B\\x{300}C\n 1: C\n\n/^\\X{3,}+/utf\n    A\\x{300}B\\x{301}U\\x{303}\\x{0301}\n 0: A\\x{300}B\\x{301}U\\x{303}\\x{301}\n    A\\x{300}B\\x{301}U\\x{303}\\x{0301}X\n 0: A\\x{300}B\\x{301}U\\x{303}\\x{301}X\n\\= Expect no match\n    A\\x{300}\nNo match\n    A\\x{300}B\\x{301}\nNo match\n    A\\x{300}U\\x{303}\\x{0301}\nNo match\n\n/^\\X/utf\n    A\n 0: A\n    A\\x{300}BC\n 0: A\\x{300}\n    A\\x{300}\\x{301}\\x{302}BC\n 0: A\\x{300}\\x{301}\\x{302}\n    \\x{300}\n 0: \\x{300}\n\n/^\\p{Han}+/utf\n    \\x{2e81}\\x{3007}\\x{2f804}\\x{31a0}\n 0: \\x{2e81}\\x{3007}\\x{2f804}\n\\= Expect no match\n    \\x{2e7f}\nNo match\n\n/^[\\p{Arabic}]/utf\n    \\x{06e9}\n 0: \\x{6e9}\n    \\x{060b}\n 0: \\x{60b}\n\\= Expect no match\n    X\\x{06e9}\nNo match\n\n/^\\P{Katakana}+/utf\n    \\x{3105}\n 0: \\x{3105}\n\\= Expect no match\n    \\x{30ff}\nNo match\n\n/^[\\P{Yi}]/utf\n    \\x{2f800}\n 0: \\x{2f800}\n\\= Expect no match\n    \\x{a014}\nNo match\n    \\x{a4c6}\nNo match\n\n/^\\p{Any}X/utf\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n\\= Expect no match\n    X\nNo match\n\n/^\\P{Any}X/utf\n\\= Expect no match\n    AX\nNo match\n\n/^\\p{Any}?X/utf\n    XYZ\n 0: X\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n\\= Expect no match\n    ABXYZ\nNo match\n\n/^\\P{Any}?X/utf\n    XYZ\n 0: X\n\\= Expect no match\n    AXYZ\nNo match\n    \\x{1234}XYZ\nNo match\n    ABXYZ\nNo match\n\n/^\\p{Any}+X/utf\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n    A\\x{1234}XYZ\n 0: A\\x{1234}X\n\\= Expect no match\n    XYZ\nNo match\n\n/^\\P{Any}+X/utf\n\\= Expect no match\n    AXYZ\nNo match\n    \\x{1234}XYZ\nNo match\n    A\\x{1234}XYZ\nNo match\n    XYZ\nNo match\n\n/^\\p{Any}*X/utf\n    XYZ\n 0: X\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n    A\\x{1234}XYZ\n 0: A\\x{1234}X\n\n/^\\P{Any}*X/utf\n    XYZ\n 0: X\n\\= Expect no match\n    AXYZ\nNo match\n    \\x{1234}XYZ\nNo match\n    A\\x{1234}XYZ\nNo match\n\n/^[\\p{Any}]X/utf\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n\\= Expect no match\n    X\nNo match\n\n/^[\\P{Any}]X/utf\n\\= Expect no match\n    AX\nNo match\n\n/^[\\p{Any}]?X/utf\n    XYZ\n 0: X\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n\\= Expect no match\n    ABXYZ\nNo match\n\n/^[\\P{Any}]?X/utf\n    XYZ\n 0: X\n\\= Expect no match\n    AXYZ\nNo match\n    \\x{1234}XYZ\nNo match\n    ABXYZ\nNo match\n\n/^[\\p{Any}]+X/utf\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n    A\\x{1234}XYZ\n 0: A\\x{1234}X\n\\= Expect no match\n    XYZ\nNo match\n\n/^[\\P{Any}]+X/utf\n\\= Expect no match\n    AXYZ\nNo match\n    \\x{1234}XYZ\nNo match\n    A\\x{1234}XYZ\nNo match\n    XYZ\nNo match\n\n/^[\\p{Any}]*X/utf\n    XYZ\n 0: X\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n    A\\x{1234}XYZ\n 0: A\\x{1234}X\n\n/^[\\P{Any}]*X/utf\n    XYZ\n 0: X\n\\= Expect no match\n    AXYZ\nNo match\n    \\x{1234}XYZ\nNo match\n    A\\x{1234}XYZ\nNo match\n\n/^\\p{Any}{3,5}?/utf\n    abcdefgh\n 0: abc\n    \\x{1234}\\n\\r\\x{3456}xyz\n 0: \\x{1234}\\x{0a}\\x{0d}\n\n/^\\p{Any}{3,5}/utf\n    abcdefgh\n 0: abcde\n    \\x{1234}\\n\\r\\x{3456}xyz\n 0: \\x{1234}\\x{0a}\\x{0d}\\x{3456}x\n\n/^\\P{Any}{3,5}?/utf\n\\= Expect no match\n    abcdefgh\nNo match\n    \\x{1234}\\n\\r\\x{3456}xyz\nNo match\n\n/^\\p{L&}X/utf\n     AXY\n 0: AX\n     aXY\n 0: aX\n     \\x{1c5}XY\n 0: \\x{1c5}X\n\\= Expect no match\n    \\x{1bb}XY\nNo match\n    \\x{2b0}XY\nNo match\n    !XY\nNo match\n\n/^[\\p{L&}]X/utf\n    AXY\n 0: AX\n    aXY\n 0: aX\n     \\x{1c5}XY\n 0: \\x{1c5}X\n\\= Expect no match\n    \\x{1bb}XY\nNo match\n    \\x{2b0}XY\nNo match\n    !XY\nNo match\n\n/^\\p{L&}+X/utf\n    AXY\n 0: AX\n    aXY\n 0: aX\n    AbcdeXyz\n 0: AbcdeX\n    \\x{1c5}AbXY\n 0: \\x{1c5}AbX\n    abcDEXypqreXlmn\n 0: abcDEXypqreX\n\\= Expect no match\n    \\x{1bb}XY\nNo match\n    \\x{2b0}XY\nNo match\n    !XY\nNo match\n\n/^[\\p{L&}]+X/utf\n    AXY\n 0: AX\n    aXY\n 0: aX\n    AbcdeXyz\n 0: AbcdeX\n    \\x{1c5}AbXY\n 0: \\x{1c5}AbX\n    abcDEXypqreXlmn\n 0: abcDEXypqreX\n\\= Expect no match\n    \\x{1bb}XY\nNo match\n    \\x{2b0}XY\nNo match\n    !XY\nNo match\n\n/^\\p{L&}+?X/utf\n    AXY\n 0: AX\n    aXY\n 0: aX\n    AbcdeXyz\n 0: AbcdeX\n    \\x{1c5}AbXY\n 0: \\x{1c5}AbX\n    abcDEXypqreXlmn\n 0: abcDEX\n\\= Expect no match\n    \\x{1bb}XY\nNo match\n    \\x{2b0}XY\nNo match\n    !XY\nNo match\n\n/^[\\p{L&}]+?X/utf\n    AXY\n 0: AX\n    aXY\n 0: aX\n    AbcdeXyz\n 0: AbcdeX\n    \\x{1c5}AbXY\n 0: \\x{1c5}AbX\n    abcDEXypqreXlmn\n 0: abcDEX\n\\= Expect no match\n    \\x{1bb}XY\nNo match\n    \\x{2b0}XY\nNo match\n    !XY\nNo match\n\n/^\\P{L&}X/utf\n    !XY\n 0: !X\n    \\x{1bb}XY\n 0: \\x{1bb}X\n    \\x{2b0}XY\n 0: \\x{2b0}X\n\\= Expect no match\n    \\x{1c5}XY\nNo match\n    AXY\nNo match\n\n/^[\\P{L&}]X/utf\n    !XY\n 0: !X\n    \\x{1bb}XY\n 0: \\x{1bb}X\n    \\x{2b0}XY\n 0: \\x{2b0}X\n\\= Expect no match\n    \\x{1c5}XY\nNo match\n    AXY\nNo match\n\n/^(\\p{Z}[^\\p{C}\\p{Z}]+)*$/\n    \\xa0!\n 0: \\xa0!\n 1: \\xa0!\n\n/^[\\pL](abc)(?1)/\n    AabcabcYZ\n 0: Aabcabc\n 1: abc\n\n/([\\pL]=(abc))*X/\n    L=abcX\n 0: L=abcX\n 1: L=abc\n 2: abc\n\n/^\\p{Balinese}\\p{Cuneiform}\\p{Nko}\\p{Phags_Pa}\\p{Phoenician}/utf\n    \\x{1b00}\\x{12000}\\x{7c0}\\x{a840}\\x{10900}\n 0: \\x{1b00}\\x{12000}\\x{7c0}\\x{a840}\\x{10900}\n\n# Check property support in non-UTF mode\n\n/\\p{L}{4}/\n    123abcdefg\n 0: abcd\n    123abc\\xc4\\xc5zz\n 0: abc\\xc4\n\n/\\X{1,3}\\d/\n\\= Expect no match\n    \\x8aBCD\nNo match\n\n/\\X?\\d/\n\\= Expect no match\n    \\x8aBCD\nNo match\n\n/\\P{L}?\\d/\n\\= Expect no match\n    \\x8aBCD\nNo match\n\n/[\\PPP\\x8a]{1,}\\x80/\n    A\\x80\n 0: A\\x80\n\n/^[\\p{Arabic}]/utf\n    \\x{604}\n 0: \\x{604}\n    \\x{60e}\n 0: \\x{60e}\n    \\x{656}\n 0: \\x{656}\n    \\x{657}\n 0: \\x{657}\n    \\x{658}\n 0: \\x{658}\n    \\x{659}\n 0: \\x{659}\n    \\x{65a}\n 0: \\x{65a}\n    \\x{65b}\n 0: \\x{65b}\n    \\x{65c}\n 0: \\x{65c}\n    \\x{65d}\n 0: \\x{65d}\n    \\x{65e}\n 0: \\x{65e}\n    \\x{65f}\n 0: \\x{65f}\n    \\x{66a}\n 0: \\x{66a}\n    \\x{6e9}\n 0: \\x{6e9}\n    \\x{6ef}\n 0: \\x{6ef}\n    \\x{6fa}\n 0: \\x{6fa}\n\n/^\\p{Cyrillic}/utf\n    \\x{1d2b}\n 0: \\x{1d2b}\n\n/^\\p{Common}/utf\n    \\x{2116}\n 0: \\x{2116}\n    \\x{1D183}\n 0: \\x{1d183}\n\n/^\\p{Inherited}/utf\n    \\x{200c}\n 0: \\x{200c}\n\\= Expect no match\n    \\x{64a}\nNo match\n    \\x{656}\nNo match\n\n/^\\p{Shavian}/utf\n    \\x{10450}\n 0: \\x{10450}\n    \\x{1047f}\n 0: \\x{1047f}\n\n/^\\p{Deseret}/utf\n    \\x{10400}\n 0: \\x{10400}\n    \\x{1044f}\n 0: \\x{1044f}\n\n/^\\p{Osmanya}/utf\n    \\x{10480}\n 0: \\x{10480}\n    \\x{1049d}\n 0: \\x{1049d}\n    \\x{104a0}\n 0: \\x{104a0}\n    \\x{104a9}\n 0: \\x{104a9}\n\\= Expect no match\n    \\x{1049e}\nNo match\n    \\x{1049f}\nNo match\n    \\x{104aa}\nNo match\n    \n/\\p{katakana}/utf\n    \\x{30a1}\n 0: \\x{30a1}\n    \\x{3001} \n 0: \\x{3001}\n\n/\\p{scx:katakana}/utf\n    \\x{30a1}\n 0: \\x{30a1}\n    \\x{3001} \n 0: \\x{3001}\n    \n/\\p{script extensions:katakana}/utf\n    \\x{30a1}\n 0: \\x{30a1}\n    \\x{3001} \n 0: \\x{3001}\n    \n/\\p{sc:katakana}/utf\n    \\x{30a1}\n 0: \\x{30a1}\n\\= Expect no match     \n    \\x{3001} \nNo match\n    \n/\\p{script:katakana}/utf\n    \\x{30a1}\n 0: \\x{30a1}\n\\= Expect no match     \n    \\x{3001}\nNo match\n    \n/\\p{sc:katakana}{3,}/utf\n    \\x{30a1}\\x{30fa}\\x{32d0}\\x{1b122}\\x{ff66}\\x{3001}ABC\n 0: \\x{30a1}\\x{30fa}\\x{32d0}\\x{1b122}\\x{ff66}\n\n/\\p{sc:katakana}{3,}?/utf\n    \\x{30a1}\\x{30fa}\\x{32d0}\\x{1b122}\\x{ff66}\\x{3001}ABC\n 0: \\x{30a1}\\x{30fa}\\x{32d0}\n\n/\\p{Carian}\\p{Cham}\\p{Kayah_Li}\\p{Lepcha}\\p{Lycian}\\p{Lydian}\\p{Ol_Chiki}\\p{Rejang}\\p{Saurashtra}\\p{Sundanese}\\p{Vai}/utf\n    \\x{102A4}\\x{AA52}\\x{A91D}\\x{1C46}\\x{10283}\\x{1092E}\\x{1C6B}\\x{A93B}\\x{A8BF}\\x{1BA0}\\x{A50A}====\n 0: \\x{102a4}\\x{aa52}\\x{a91d}\\x{1c46}\\x{10283}\\x{1092e}\\x{1c6b}\\x{a93b}\\x{a8bf}\\x{1ba0}\\x{a50a}\n\n/\\x{a77d}\\x{1d79}/i,utf\n    \\x{a77d}\\x{1d79}\n 0: \\x{a77d}\\x{1d79}\n    \\x{1d79}\\x{a77d}\n 0: \\x{1d79}\\x{a77d}\n\n/\\x{a77d}\\x{1d79}/utf\n    \\x{a77d}\\x{1d79}\n 0: \\x{a77d}\\x{1d79}\n\\= Expect no match\n    \\x{1d79}\\x{a77d}\nNo match\n\n/(A)\\1/i,utf\n    AA\n 0: AA\n 1: A\n    Aa\n 0: Aa\n 1: A\n    aa\n 0: aa\n 1: a\n    aA\n 0: aA\n 1: a\n\n/(\\x{10a})\\1/i,utf\n    \\x{10a}\\x{10a}\n 0: \\x{10a}\\x{10a}\n 1: \\x{10a}\n    \\x{10a}\\x{10b}\n 0: \\x{10a}\\x{10b}\n 1: \\x{10a}\n    \\x{10b}\\x{10b}\n 0: \\x{10b}\\x{10b}\n 1: \\x{10b}\n    \\x{10b}\\x{10a}\n 0: \\x{10b}\\x{10a}\n 1: \\x{10b}\n\n# The next two tests are for property support in non-UTF mode\n\n/(?:\\p{Lu}|\\x20)+/\n    \\x41\\x20\\x50\\xC2\\x54\\xC9\\x20\\x54\\x4F\\x44\\x41\\x59\n 0: A P\\xc2T\\xc9 TODAY\n\n/[\\p{Lu}\\x20]+/\n    \\x41\\x20\\x50\\xC2\\x54\\xC9\\x20\\x54\\x4F\\x44\\x41\\x59\n 0: A P\\xc2T\\xc9 TODAY\n\n/\\p{Avestan}\\p{Bamum}\\p{Egyptian_Hieroglyphs}\\p{Imperial_Aramaic}\\p{Inscriptional_Pahlavi}\\p{Inscriptional_Parthian}\\p{Javanese}\\p{Kaithi}\\p{Lisu}\\p{Meetei_Mayek}\\p{Old_South_Arabian}\\p{Old_Turkic}\\p{Samaritan}\\p{Tai_Tham}\\p{Tai_Viet}/utf\n    \\x{10b00}\\x{a6ef}\\x{13007}\\x{10857}\\x{10b78}\\x{10b58}\\x{a980}\\x{110c1}\\x{a4ff}\\x{abc0}\\x{10a7d}\\x{10c48}\\x{0800}\\x{1aad}\\x{aac0}\n 0: \\x{10b00}\\x{a6ef}\\x{13007}\\x{10857}\\x{10b78}\\x{10b58}\\x{a980}\\x{110c1}\\x{a4ff}\\x{abc0}\\x{10a7d}\\x{10c48}\\x{800}\\x{1aad}\\x{aac0}\n\n/^\\w+/utf,ucp\n    Az_\\x{aa}\\x{c0}\\x{1c5}\\x{2b0}\\x{3b6}\\x{1d7c9}\\x{2fa1d}1\\x{660}\\x{bef}\\x{16ee}\n 0: Az_\\x{aa}\\x{c0}\\x{1c5}\\x{2b0}\\x{3b6}\\x{1d7c9}\\x{2fa1d}1\\x{660}\\x{bef}\\x{16ee}\n\n/^[[:xdigit:]]*/utf,ucp\n    1a\\x{660}\\x{bef}\\x{16ee}\n 0: 1a\n\n/^\\d+/utf,ucp\n    1\\x{660}\\x{bef}\\x{16ee}\n 0: 1\\x{660}\\x{bef}\n\n/^[[:digit:]]+/utf,ucp\n    1\\x{660}\\x{bef}\\x{16ee}\n 0: 1\\x{660}\\x{bef}\n\n/^>\\s+/utf,ucp\n    >\\x{20}\\x{a0}\\x{1680}\\x{2028}\\x{2029}\\x{202f}\\x{9}\\x{b}\n 0: > \\x{a0}\\x{1680}\\x{2028}\\x{2029}\\x{202f}\\x{09}\\x{0b}\n\n/^>\\pZ+/utf,ucp\n    >\\x{20}\\x{a0}\\x{1680}\\x{2028}\\x{2029}\\x{202f}\\x{9}\\x{b}\n 0: > \\x{a0}\\x{1680}\\x{2028}\\x{2029}\\x{202f}\n\n/^>[[:space:]]*/utf,ucp\n    >\\x{20}\\x{a0}\\x{1680}\\x{2028}\\x{2029}\\x{202f}\\x{9}\\x{b}\n 0: > \\x{a0}\\x{1680}\\x{2028}\\x{2029}\\x{202f}\\x{09}\\x{0b}\n\n/^>[[:blank:]]*/utf,ucp\n    >\\x{20}\\x{a0}\\x{1680}\\x{2000}\\x{202f}\\x{9}\\x{b}\\x{2028}\n 0: > \\x{a0}\\x{1680}\\x{2000}\\x{202f}\\x{09}\n\n/^[[:alpha:]]*/utf,ucp\n    Az\\x{aa}\\x{c0}\\x{1c5}\\x{2b0}\\x{3b6}\\x{1d7c9}\\x{2fa1d}\n 0: Az\\x{aa}\\x{c0}\\x{1c5}\\x{2b0}\\x{3b6}\\x{1d7c9}\\x{2fa1d}\n\n/^[[:alnum:]]*/utf,ucp\n    Az\\x{aa}\\x{c0}\\x{1c5}\\x{2b0}\\x{3b6}\\x{1d7c9}\\x{2fa1d}1\\x{660}\\x{bef}\\x{16ee}\n 0: Az\\x{aa}\\x{c0}\\x{1c5}\\x{2b0}\\x{3b6}\\x{1d7c9}\\x{2fa1d}1\\x{660}\\x{bef}\\x{16ee}\n\n/^[[:cntrl:]]*/utf,ucp\n    \\x{0}\\x{09}\\x{1f}\\x{7f}\\x{9f}\n 0: \\x{00}\\x{09}\\x{1f}\\x{7f}\\x{9f}\n\n/^[[:graph:]]*/utf,ucp\n    A\\x{a1}\\x{a0}\n 0: A\\x{a1}\n\n/^[[:print:]]*/utf,ucp\n    A z\\x{a0}\\x{a1}\n 0: A z\\x{a0}\\x{a1}\n\n/^[[:punct:]]*/utf,ucp\n    .+\\x{a1}\\x{a0}\n 0: .+\\x{a1}\n\n/\\p{Zs}*?\\R/\n\\= Expect no match\n    a\\xFCb\nNo match\n\n/\\p{Zs}*\\R/\n\\= Expect no match\n    a\\xFCb\nNo match\n\n/ⱥ/i,utf\n    ⱥ\n 0: \\x{2c65}\n    Ⱥx\n 0: \\x{23a}\n    Ⱥ\n 0: \\x{23a}\n\n/[ⱥ]/i,utf\n    ⱥ\n 0: \\x{2c65}\n    Ⱥx\n 0: \\x{23a}\n    Ⱥ\n 0: \\x{23a}\n\n/Ⱥ/i,utf\n    Ⱥ\n 0: \\x{23a}\n    ⱥ\n 0: \\x{2c65}\n\n# These are tests for extended grapheme clusters\n\n/^\\X/utf,aftertext\n    G\\x{34e}\\x{34e}X\n 0: G\\x{34e}\\x{34e}\n 0+ X\n    \\x{34e}\\x{34e}X\n 0: \\x{34e}\\x{34e}\n 0+ X\n    \\x04X\n 0: \\x{04}\n 0+ X\n    \\x{1100}X\n 0: \\x{1100}\n 0+ X\n    \\x{1100}\\x{34e}X\n 0: \\x{1100}\\x{34e}\n 0+ X\n    \\x{1b04}\\x{1b04}X\n 0: \\x{1b04}\\x{1b04}\n 0+ X\n    *These match up to the roman letters\n 0: *\n 0+ These match up to the roman letters\n    \\x{1111}\\x{1111}L,L\n 0: \\x{1111}\\x{1111}\n 0+ L,L\n    \\x{1111}\\x{1111}\\x{1169}L,L,V\n 0: \\x{1111}\\x{1111}\\x{1169}\n 0+ L,L,V\n    \\x{1111}\\x{ae4c}L, LV\n 0: \\x{1111}\\x{ae4c}\n 0+ L, LV\n    \\x{1111}\\x{ad89}L, LVT\n 0: \\x{1111}\\x{ad89}\n 0+ L, LVT\n    \\x{1111}\\x{ae4c}\\x{1169}L, LV, V\n 0: \\x{1111}\\x{ae4c}\\x{1169}\n 0+ L, LV, V\n    \\x{1111}\\x{ae4c}\\x{1169}\\x{1169}L, LV, V, V\n 0: \\x{1111}\\x{ae4c}\\x{1169}\\x{1169}\n 0+ L, LV, V, V\n    \\x{1111}\\x{ae4c}\\x{1169}\\x{11fe}L, LV, V, T\n 0: \\x{1111}\\x{ae4c}\\x{1169}\\x{11fe}\n 0+ L, LV, V, T\n    \\x{1111}\\x{ad89}\\x{11fe}L, LVT, T\n 0: \\x{1111}\\x{ad89}\\x{11fe}\n 0+ L, LVT, T\n    \\x{1111}\\x{ad89}\\x{11fe}\\x{11fe}L, LVT, T, T\n 0: \\x{1111}\\x{ad89}\\x{11fe}\\x{11fe}\n 0+ L, LVT, T, T\n    \\x{ad89}\\x{11fe}\\x{11fe}LVT, T, T\n 0: \\x{ad89}\\x{11fe}\\x{11fe}\n 0+ LVT, T, T\n    *These match just the first codepoint (invalid sequence)\n 0: *\n 0+ These match just the first codepoint (invalid sequence)\n    \\x{1111}\\x{11fe}L, T\n 0: \\x{1111}\n 0+ \\x{11fe}L, T\n    \\x{ae4c}\\x{1111}LV, L\n 0: \\x{ae4c}\n 0+ \\x{1111}LV, L\n    \\x{ae4c}\\x{ae4c}LV, LV\n 0: \\x{ae4c}\n 0+ \\x{ae4c}LV, LV\n    \\x{ae4c}\\x{ad89}LV, LVT\n 0: \\x{ae4c}\n 0+ \\x{ad89}LV, LVT\n    \\x{1169}\\x{1111}V, L\n 0: \\x{1169}\n 0+ \\x{1111}V, L\n    \\x{1169}\\x{ae4c}V, LV\n 0: \\x{1169}\n 0+ \\x{ae4c}V, LV\n    \\x{1169}\\x{ad89}V, LVT\n 0: \\x{1169}\n 0+ \\x{ad89}V, LVT\n    \\x{ad89}\\x{1111}LVT, L\n 0: \\x{ad89}\n 0+ \\x{1111}LVT, L\n    \\x{ad89}\\x{1169}LVT, V\n 0: \\x{ad89}\n 0+ \\x{1169}LVT, V\n    \\x{ad89}\\x{ae4c}LVT, LV\n 0: \\x{ad89}\n 0+ \\x{ae4c}LVT, LV\n    \\x{ad89}\\x{ad89}LVT, LVT\n 0: \\x{ad89}\n 0+ \\x{ad89}LVT, LVT\n    \\x{11fe}\\x{1111}T, L\n 0: \\x{11fe}\n 0+ \\x{1111}T, L\n    \\x{11fe}\\x{1169}T, V\n 0: \\x{11fe}\n 0+ \\x{1169}T, V\n    \\x{11fe}\\x{ae4c}T, LV\n 0: \\x{11fe}\n 0+ \\x{ae4c}T, LV\n    \\x{11fe}\\x{ad89}T, LVT\n 0: \\x{11fe}\n 0+ \\x{ad89}T, LVT\n    *Test extend and spacing mark\n 0: *\n 0+ Test extend and spacing mark\n    \\x{1111}\\x{ae4c}\\x{0711}L, LV, extend\n 0: \\x{1111}\\x{ae4c}\\x{711}\n 0+ L, LV, extend\n    \\x{1111}\\x{ae4c}\\x{1b04}L, LV, spacing mark\n 0: \\x{1111}\\x{ae4c}\\x{1b04}\n 0+ L, LV, spacing mark\n    \\x{1111}\\x{ae4c}\\x{1b04}\\x{0711}\\x{1b04}L, LV, spacing mark, extend, spacing mark\n 0: \\x{1111}\\x{ae4c}\\x{1b04}\\x{711}\\x{1b04}\n 0+ L, LV, spacing mark, extend, spacing mark\n    *Test CR, LF, and control\n 0: *\n 0+ Test CR, LF, and control\n    \\x0d\\x{0711}CR, extend\n 0: \\x{0d}\n 0+ \\x{711}CR, extend\n    \\x0d\\x{1b04}CR, spacingmark\n 0: \\x{0d}\n 0+ \\x{1b04}CR, spacingmark\n    \\x0a\\x{0711}LF, extend\n 0: \\x{0a}\n 0+ \\x{711}LF, extend\n    \\x0a\\x{1b04}LF, spacingmark\n 0: \\x{0a}\n 0+ \\x{1b04}LF, spacingmark\n    \\x0b\\x{0711}Control, extend\n 0: \\x{0b}\n 0+ \\x{711}Control, extend\n    \\x09\\x{1b04}Control, spacingmark\n 0: \\x{09}\n 0+ \\x{1b04}Control, spacingmark\n    *Test Extended Pictographic after bug fix\n 0: *\n 0+ Test Extended Pictographic after bug fix\n    \\x{261d}\\x{261d}B              Extended_Pictographic Extended_Pictographic \n 0: \\x{261d}\n 0+ \\x{261d}B              Extended_Pictographic Extended_Pictographic\n    \\x{261D}\\x{1F3FB}\\x{261d}B     Extended_Pictographic Extend E-P\n 0: \\x{261d}\\x{1f3fb}\n 0+ \\x{261d}B     Extended_Pictographic Extend E-P\n    \\x{261D}\\x{1F3FB}\\x{200d}\\x{261d}B     Extended_Pictographic Extend ZWJ E-P\n 0: \\x{261d}\\x{1f3fb}\\x{200d}\\x{261d}\n 0+ B     Extended_Pictographic Extend ZWJ E-P\n    \\x{1f3f3}\\x{fe0f}\\x{200d}\\x{1f308}\\x{1f3f4}\\x{200d}\\x{2620}\\x{fe0f}\\x{1f3f3}\\x{fe0f}\\x{200d}\\x{1f308}\\x{1f3f4}\\x{200d}\\x{2620}\\x{fe0f}\n 0: \\x{1f3f3}\\x{fe0f}\\x{200d}\\x{1f308}\n 0+ \\x{1f3f4}\\x{200d}\\x{2620}\\x{fe0f}\\x{1f3f3}\\x{fe0f}\\x{200d}\\x{1f308}\\x{1f3f4}\\x{200d}\\x{2620}\\x{fe0f}\n    A\\x{200d}\\x{1f308}B\n 0: A\\x{200d}\n 0+ \\x{1f308}B\n    A\\x{200d}B                     A ZWJ\n 0: A\\x{200d}\n 0+ B                     A ZWJ\n    \\x{261D}\\x{1F3FB}B             Extended_Pictographic Extend\n 0: \\x{261d}\\x{1f3fb}\n 0+ B             Extended_Pictographic Extend\n    \\x{1F1E6}\\x{1F1E7}B            RegionalIndicator RegionalIndicator \n 0: \\x{1f1e6}\\x{1f1e7}\n 0+ B            RegionalIndicator RegionalIndicator\n    *There are no Prepend characters, so we can't test Prepend, CR\n 0: *\n 0+ There are no Prepend characters, so we can't test Prepend, CR\n\n/^(?>\\X{2})X/utf,aftertext\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n\n/^\\X{2,4}X/utf,aftertext\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n\n/^\\X{2,4}?X/utf,aftertext\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n\n/\\X*Z/utf,no_start_optimize\n\\= Expect no match\n    A\\x{300}\nNo match\n\n/\\X*(.)/utf,no_start_optimize\n    A\\x{1111}\\x{ae4c}\\x{1169}\n 0: A\\x{1111}\n 1: \\x{1111}\n\n# --------------------------------------------\n\n/\\x{1e9e}+/i,utf\n    \\x{1e9e}\\x{00df}\n 0: \\x{1e9e}\\x{df}\n\n/[z\\x{1e9e}]+/i,utf\n    \\x{1e9e}\\x{00df}\n 0: \\x{1e9e}\\x{df}\n\n/\\x{00df}+/i,utf\n    \\x{1e9e}\\x{00df}\n 0: \\x{1e9e}\\x{df}\n\n/[z\\x{00df}]+/i,utf\n    \\x{1e9e}\\x{00df}\n 0: \\x{1e9e}\\x{df}\n\n/\\x{1f88}+/i,utf\n    \\x{1f88}\\x{1f80}\n 0: \\x{1f88}\\x{1f80}\n\n/[z\\x{1f88}]+/i,utf\n    \\x{1f88}\\x{1f80}\n 0: \\x{1f88}\\x{1f80}\n\n# Check a reference with more than one other case\n\n/^(\\x{00b5})\\1{2}$/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n 0: \\x{b5}\\x{39c}\\x{3bc}\n 1: \\x{b5}\n\n# Characters with more than one other case; test in classes\n\n/[z\\x{00b5}]+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n 0: \\x{b5}\\x{39c}\\x{3bc}\n\n/[z\\x{039c}]+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n 0: \\x{b5}\\x{39c}\\x{3bc}\n\n/[z\\x{03bc}]+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n 0: \\x{b5}\\x{39c}\\x{3bc}\n\n/[z\\x{00c5}]+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n 0: \\x{c5}\\x{e5}\\x{212b}\n\n/[z\\x{00e5}]+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n 0: \\x{c5}\\x{e5}\\x{212b}\n\n/[z\\x{212b}]+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n 0: \\x{c5}\\x{e5}\\x{212b}\n\n/[z\\x{01c4}]+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n 0: \\x{1c4}\\x{1c5}\\x{1c6}\n\n/[z\\x{01c5}]+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n 0: \\x{1c4}\\x{1c5}\\x{1c6}\n\n/[z\\x{01c6}]+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n 0: \\x{1c4}\\x{1c5}\\x{1c6}\n\n/[z\\x{01c7}]+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n 0: \\x{1c7}\\x{1c8}\\x{1c9}\n\n/[z\\x{01c8}]+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n 0: \\x{1c7}\\x{1c8}\\x{1c9}\n\n/[z\\x{01c9}]+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n 0: \\x{1c7}\\x{1c8}\\x{1c9}\n\n/[z\\x{01ca}]+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n 0: \\x{1ca}\\x{1cb}\\x{1cc}\n\n/[z\\x{01cb}]+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n 0: \\x{1ca}\\x{1cb}\\x{1cc}\n\n/[z\\x{01cc}]+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n 0: \\x{1ca}\\x{1cb}\\x{1cc}\n\n/[z\\x{01f1}]+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n 0: \\x{1f1}\\x{1f2}\\x{1f3}\n\n/[z\\x{01f2}]+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n 0: \\x{1f1}\\x{1f2}\\x{1f3}\n\n/[z\\x{01f3}]+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n 0: \\x{1f1}\\x{1f2}\\x{1f3}\n\n/[z\\x{0345}]+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n 0: \\x{345}\\x{399}\\x{3b9}\\x{1fbe}\n\n/[z\\x{0399}]+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n 0: \\x{345}\\x{399}\\x{3b9}\\x{1fbe}\n\n/[z\\x{03b9}]+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n 0: \\x{345}\\x{399}\\x{3b9}\\x{1fbe}\n\n/[z\\x{1fbe}]+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n 0: \\x{345}\\x{399}\\x{3b9}\\x{1fbe}\n\n/[z\\x{0392}]+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n 0: \\x{392}\\x{3b2}\\x{3d0}\n\n/[z\\x{03b2}]+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n 0: \\x{392}\\x{3b2}\\x{3d0}\n\n/[z\\x{03d0}]+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n 0: \\x{392}\\x{3b2}\\x{3d0}\n\n/[z\\x{0395}]+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n 0: \\x{395}\\x{3b5}\\x{3f5}\n\n/[z\\x{03b5}]+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n 0: \\x{395}\\x{3b5}\\x{3f5}\n\n/[z\\x{03f5}]+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n 0: \\x{395}\\x{3b5}\\x{3f5}\n\n/[z\\x{0398}]+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n 0: \\x{398}\\x{3b8}\\x{3d1}\\x{3f4}\n\n/[z\\x{03b8}]+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n 0: \\x{398}\\x{3b8}\\x{3d1}\\x{3f4}\n\n/[z\\x{03d1}]+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n 0: \\x{398}\\x{3b8}\\x{3d1}\\x{3f4}\n\n/[z\\x{03f4}]+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n 0: \\x{398}\\x{3b8}\\x{3d1}\\x{3f4}\n\n/[z\\x{039a}]+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n 0: \\x{39a}\\x{3ba}\\x{3f0}\n\n/[z\\x{03ba}]+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n 0: \\x{39a}\\x{3ba}\\x{3f0}\n\n/[z\\x{03f0}]+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n 0: \\x{39a}\\x{3ba}\\x{3f0}\n\n/[z\\x{03a0}]+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n 0: \\x{3a0}\\x{3c0}\\x{3d6}\n\n/[z\\x{03c0}]+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n 0: \\x{3a0}\\x{3c0}\\x{3d6}\n\n/[z\\x{03d6}]+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n 0: \\x{3a0}\\x{3c0}\\x{3d6}\n\n/[z\\x{03a1}]+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n 0: \\x{3a1}\\x{3c1}\\x{3f1}\n\n/[z\\x{03c1}]+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n 0: \\x{3a1}\\x{3c1}\\x{3f1}\n\n/[z\\x{03f1}]+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n 0: \\x{3a1}\\x{3c1}\\x{3f1}\n\n/[z\\x{03a3}]+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n 0: \\x{3a3}\\x{3c2}\\x{3c3}\n\n/[z\\x{03c2}]+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n 0: \\x{3a3}\\x{3c2}\\x{3c3}\n\n/[z\\x{03c3}]+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n 0: \\x{3a3}\\x{3c2}\\x{3c3}\n\n/[z\\x{03a6}]+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n 0: \\x{3a6}\\x{3c6}\\x{3d5}\n\n/[z\\x{03c6}]+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n 0: \\x{3a6}\\x{3c6}\\x{3d5}\n\n/[z\\x{03d5}]+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n 0: \\x{3a6}\\x{3c6}\\x{3d5}\n\n/[z\\x{03c9}]+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n 0: \\x{3c9}\\x{3a9}\\x{2126}\n\n/[z\\x{03a9}]+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n 0: \\x{3c9}\\x{3a9}\\x{2126}\n\n/[z\\x{2126}]+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n 0: \\x{3c9}\\x{3a9}\\x{2126}\n\n/[z\\x{1e60}]+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n 0: \\x{1e60}\\x{1e61}\\x{1e9b}\n\n/[z\\x{1e61}]+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n 0: \\x{1e60}\\x{1e61}\\x{1e9b}\n\n/[z\\x{1e9b}]+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n 0: \\x{1e60}\\x{1e61}\\x{1e9b}\n\n# Perl 5.12.4 gets these wrong, but 5.15.3 is OK\n\n/[z\\x{004b}]+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n 0: Kk\\x{212a}\n\n/[z\\x{006b}]+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n 0: Kk\\x{212a}\n\n/[z\\x{212a}]+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n 0: Kk\\x{212a}\n\n/[z\\x{0053}]+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n 0: Ss\\x{17f}\n\n/[z\\x{0073}]+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n 0: Ss\\x{17f}\n\n/[z\\x{017f}]+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n 0: Ss\\x{17f}\n\n/^[a-z\\x{500}-\\x{1000}]{3,}[a-h]|x/utf\n    ab\\x{600}ijklmh\n 0: ab\\x{600}ijklmh\n    ab\\x{600}hijklm\n 0: ab\\x{600}h\n\\= Expect no match\n    ab\\x{600}ijklm\nNo match\n\n/^[a-z\\x{500}-\\x{1000}]{4,7}[a-h]|x/utf\n    ab\\x{600}\\x{700}ijkh\n 0: ab\\x{600}\\x{700}ijkh\n    ab\\x{600}\\x{700}hijkl\n 0: ab\\x{600}\\x{700}h\n\\= Expect no match\n    ab\\x{600}\\x{700}ijklh\nNo match\n    ab\\x{600}h\\x{700}ijklmh\nNo match\n\n/([a-z\\x{1000}\\x{2000}]{1,2}?u)+$/utf\n    \\x{1000}uu\\x{2000}u\n 0: \\x{1000}uu\\x{2000}u\n 1: u\\x{2000}u\n    \\x{1001}uuuu\n 0: uuuu\n 1: uu\n    \\x{2001}uuuuu\n 0: uuuuu\n 1: uuu\n    uuuu\\x{1fff}#u#\\x{2000}\\x{1000}u\\x{2000}u\n 0: \\x{2000}\\x{1000}u\\x{2000}u\n 1: \\x{2000}u\n\\= Expect no match\n    abuabuabuabu!\nNo match\n    uuuuuuuuuuuu#\nNo match\n\n# --------------------------------------\n\n/(ΣΆΜΟΣ) \\1/i,utf\n    ΣΆΜΟΣ ΣΆΜΟΣ\n 0: \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3} \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3}\n 1: \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3}\n    ΣΆΜΟΣ σάμος\n 0: \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3} \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2}\n 1: \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3}\n    σάμος σάμος\n 0: \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2} \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2}\n 1: \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2}\n    σάμος σάμοσ\n 0: \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2} \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c3}\n 1: \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2}\n    σάμος ΣΆΜΟΣ\n 0: \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2} \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3}\n 1: \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2}\n\n/(σάμος) \\1/i,utf\n    ΣΆΜΟΣ ΣΆΜΟΣ\n 0: \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3} \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3}\n 1: \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3}\n    ΣΆΜΟΣ σάμος\n 0: \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3} \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2}\n 1: \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3}\n    σάμος σάμος\n 0: \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2} \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2}\n 1: \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2}\n    σάμος σάμοσ\n 0: \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2} \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c3}\n 1: \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2}\n    σάμος ΣΆΜΟΣ\n 0: \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2} \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3}\n 1: \\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2}\n\n/(ΣΆΜΟΣ) \\1*/i,utf\n    ΣΆΜΟΣ\\x20\n 0: \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3} \n 1: \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3}\n    ΣΆΜΟΣ ΣΆΜΟΣσάμοςσάμος\n 0: \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3} \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3}\\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2}\\x{3c3}\\x{3ac}\\x{3bc}\\x{3bf}\\x{3c2}\n 1: \\x{3a3}\\x{386}\\x{39c}\\x{39f}\\x{3a3}\n\n# Perl matches these\n\n/\\x{00b5}+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n 0: \\x{b5}\\x{39c}\\x{3bc}\n\n/\\x{039c}+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n 0: \\x{b5}\\x{39c}\\x{3bc}\n\n/\\x{03bc}+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n 0: \\x{b5}\\x{39c}\\x{3bc}\n\n\n/\\x{00c5}+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n 0: \\x{c5}\\x{e5}\\x{212b}\n\n/\\x{00e5}+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n 0: \\x{c5}\\x{e5}\\x{212b}\n\n/\\x{212b}+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n 0: \\x{c5}\\x{e5}\\x{212b}\n\n\n/\\x{01c4}+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n 0: \\x{1c4}\\x{1c5}\\x{1c6}\n\n/\\x{01c5}+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n 0: \\x{1c4}\\x{1c5}\\x{1c6}\n\n/\\x{01c6}+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n 0: \\x{1c4}\\x{1c5}\\x{1c6}\n\n\n/\\x{01c7}+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n 0: \\x{1c7}\\x{1c8}\\x{1c9}\n\n/\\x{01c8}+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n 0: \\x{1c7}\\x{1c8}\\x{1c9}\n\n/\\x{01c9}+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n 0: \\x{1c7}\\x{1c8}\\x{1c9}\n\n\n/\\x{01ca}+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n 0: \\x{1ca}\\x{1cb}\\x{1cc}\n\n/\\x{01cb}+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n 0: \\x{1ca}\\x{1cb}\\x{1cc}\n\n/\\x{01cc}+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n 0: \\x{1ca}\\x{1cb}\\x{1cc}\n\n\n/\\x{01f1}+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n 0: \\x{1f1}\\x{1f2}\\x{1f3}\n\n/\\x{01f2}+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n 0: \\x{1f1}\\x{1f2}\\x{1f3}\n\n/\\x{01f3}+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n 0: \\x{1f1}\\x{1f2}\\x{1f3}\n\n\n/\\x{0345}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n 0: \\x{345}\\x{399}\\x{3b9}\\x{1fbe}\n\n/\\x{0399}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n 0: \\x{345}\\x{399}\\x{3b9}\\x{1fbe}\n\n/\\x{03b9}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n 0: \\x{345}\\x{399}\\x{3b9}\\x{1fbe}\n\n/\\x{1fbe}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n 0: \\x{345}\\x{399}\\x{3b9}\\x{1fbe}\n\n\n/\\x{0392}+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n 0: \\x{392}\\x{3b2}\\x{3d0}\n\n/\\x{03b2}+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n 0: \\x{392}\\x{3b2}\\x{3d0}\n\n/\\x{03d0}+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n 0: \\x{392}\\x{3b2}\\x{3d0}\n\n\n/\\x{0395}+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n 0: \\x{395}\\x{3b5}\\x{3f5}\n\n/\\x{03b5}+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n 0: \\x{395}\\x{3b5}\\x{3f5}\n\n/\\x{03f5}+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n 0: \\x{395}\\x{3b5}\\x{3f5}\n\n\n/\\x{0398}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n 0: \\x{398}\\x{3b8}\\x{3d1}\\x{3f4}\n\n/\\x{03b8}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n 0: \\x{398}\\x{3b8}\\x{3d1}\\x{3f4}\n\n/\\x{03d1}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n 0: \\x{398}\\x{3b8}\\x{3d1}\\x{3f4}\n\n/\\x{03f4}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n 0: \\x{398}\\x{3b8}\\x{3d1}\\x{3f4}\n\n\n/\\x{039a}+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n 0: \\x{39a}\\x{3ba}\\x{3f0}\n\n/\\x{03ba}+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n 0: \\x{39a}\\x{3ba}\\x{3f0}\n\n/\\x{03f0}+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n 0: \\x{39a}\\x{3ba}\\x{3f0}\n\n\n/\\x{03a0}+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n 0: \\x{3a0}\\x{3c0}\\x{3d6}\n\n/\\x{03c0}+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n 0: \\x{3a0}\\x{3c0}\\x{3d6}\n\n/\\x{03d6}+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n 0: \\x{3a0}\\x{3c0}\\x{3d6}\n\n\n/\\x{03a1}+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n 0: \\x{3a1}\\x{3c1}\\x{3f1}\n\n/\\x{03c1}+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n 0: \\x{3a1}\\x{3c1}\\x{3f1}\n\n/\\x{03f1}+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n 0: \\x{3a1}\\x{3c1}\\x{3f1}\n\n\n/\\x{03a3}+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n 0: \\x{3a3}\\x{3c2}\\x{3c3}\n\n/\\x{03c2}+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n 0: \\x{3a3}\\x{3c2}\\x{3c3}\n\n/\\x{03c3}+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n 0: \\x{3a3}\\x{3c2}\\x{3c3}\n\n\n/\\x{03a6}+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n 0: \\x{3a6}\\x{3c6}\\x{3d5}\n\n/\\x{03c6}+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n 0: \\x{3a6}\\x{3c6}\\x{3d5}\n\n/\\x{03d5}+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n 0: \\x{3a6}\\x{3c6}\\x{3d5}\n\n\n/\\x{03c9}+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n 0: \\x{3c9}\\x{3a9}\\x{2126}\n\n/\\x{03a9}+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n 0: \\x{3c9}\\x{3a9}\\x{2126}\n\n/\\x{2126}+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n 0: \\x{3c9}\\x{3a9}\\x{2126}\n\n\n/\\x{1e60}+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n 0: \\x{1e60}\\x{1e61}\\x{1e9b}\n\n/\\x{1e61}+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n 0: \\x{1e60}\\x{1e61}\\x{1e9b}\n\n/\\x{1e9b}+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n 0: \\x{1e60}\\x{1e61}\\x{1e9b}\n\n\n/\\x{1e9e}+/i,utf\n    \\x{1e9e}\\x{00df}\n 0: \\x{1e9e}\\x{df}\n\n/\\x{00df}+/i,utf\n    \\x{1e9e}\\x{00df}\n 0: \\x{1e9e}\\x{df}\n\n\n/\\x{1f88}+/i,utf\n    \\x{1f88}\\x{1f80}\n 0: \\x{1f88}\\x{1f80}\n\n/\\x{1f80}+/i,utf\n    \\x{1f88}\\x{1f80}\n 0: \\x{1f88}\\x{1f80}\n\n# Perl 5.12.4 gets these wrong, but 5.15.3 is OK\n\n/\\x{004b}+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n 0: Kk\\x{212a}\n\n/\\x{006b}+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n 0: Kk\\x{212a}\n\n/\\x{212a}+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n 0: Kk\\x{212a}\n\n\n/\\x{0053}+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n 0: Ss\\x{17f}\n\n/\\x{0073}+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n 0: Ss\\x{17f}\n\n/\\x{017f}+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n 0: Ss\\x{17f}\n\n/^\\p{Any}*\\d{4}/utf\n    1234\n 0: 1234\n\\= Expect no match\n    123\nNo match\n\n/^\\X*\\w{4}/utf\n    1234\n 0: 1234\n\\= Expect no match\n    123\nNo match\n\n/^A\\s+Z/utf,ucp\n    A\\x{2005}Z\n 0: A\\x{2005}Z\n    A\\x{85}\\x{2005}Z\n 0: A\\x{85}\\x{2005}Z\n\n/^A[\\s]+Z/utf,ucp\n    A\\x{2005}Z\n 0: A\\x{2005}Z\n    A\\x{85}\\x{2005}Z\n 0: A\\x{85}\\x{2005}Z\n\n/^[[:graph:]]+$/utf,ucp\n    Letter:ABC\n 0: Letter:ABC\n    Mark:\\x{300}\\x{1d172}\\x{1d17b}\n 0: Mark:\\x{300}\\x{1d172}\\x{1d17b}\n    Number:9\\x{660}\n 0: Number:9\\x{660}\n    Punctuation:\\x{66a},;\n 0: Punctuation:\\x{66a},;\n    Symbol:\\x{6de}<>\\x{fffc}\n 0: Symbol:\\x{6de}<>\\x{fffc}\n    Cf-property:\\x{ad}\\x{600}\\x{601}\\x{602}\\x{603}\\x{604}\\x{6dd}\\x{70f}\n 0: Cf-property:\\x{ad}\\x{600}\\x{601}\\x{602}\\x{603}\\x{604}\\x{6dd}\\x{70f}\n    \\x{200b}\\x{200c}\\x{200d}\\x{200e}\\x{200f}\n 0: \\x{200b}\\x{200c}\\x{200d}\\x{200e}\\x{200f}\n    \\x{202a}\\x{202b}\\x{202c}\\x{202d}\\x{202e}\n 0: \\x{202a}\\x{202b}\\x{202c}\\x{202d}\\x{202e}\n    \\x{2060}\\x{2061}\\x{2062}\\x{2063}\\x{2064}\n 0: \\x{2060}\\x{2061}\\x{2062}\\x{2063}\\x{2064}\n    \\x{206a}\\x{206b}\\x{206c}\\x{206d}\\x{206e}\\x{206f}\n 0: \\x{206a}\\x{206b}\\x{206c}\\x{206d}\\x{206e}\\x{206f}\n    \\x{feff}\n 0: \\x{feff}\n    \\x{fff9}\\x{fffa}\\x{fffb}\n 0: \\x{fff9}\\x{fffa}\\x{fffb}\n    \\x{110bd}\n 0: \\x{110bd}\n    \\x{1d173}\\x{1d174}\\x{1d175}\\x{1d176}\\x{1d177}\\x{1d178}\\x{1d179}\\x{1d17a}\n 0: \\x{1d173}\\x{1d174}\\x{1d175}\\x{1d176}\\x{1d177}\\x{1d178}\\x{1d179}\\x{1d17a}\n    \\x{e0001}\n 0: \\x{e0001}\n    \\x{e0020}\\x{e0030}\\x{e0040}\\x{e0050}\\x{e0060}\\x{e0070}\\x{e007f}\n 0: \\x{e0020}\\x{e0030}\\x{e0040}\\x{e0050}\\x{e0060}\\x{e0070}\\x{e007f}\n\\= Expect no match\n    \\x{09}\nNo match\n    \\x{0a}\nNo match\n    \\x{1D}\nNo match\n    \\x{20}\nNo match\n    \\x{85}\nNo match\n    \\x{a0}\nNo match\n    \\x{1680}\nNo match\n    \\x{2028}\nNo match\n    \\x{2029}\nNo match\n    \\x{202f}\nNo match\n    \\x{2065}\nNo match\n    \\x{3000}\nNo match\n    \\x{e0002}\nNo match\n    \\x{e001f}\nNo match\n    \\x{e0080}\nNo match\n\n/^[[:print:]]+$/utf,ucp\n    Space: \\x{a0}\n 0: Space: \\x{a0}\n    \\x{1680}\\x{2000}\\x{2001}\\x{2002}\\x{2003}\\x{2004}\\x{2005}\n 0: \\x{1680}\\x{2000}\\x{2001}\\x{2002}\\x{2003}\\x{2004}\\x{2005}\n    \\x{2006}\\x{2007}\\x{2008}\\x{2009}\\x{200a}\n 0: \\x{2006}\\x{2007}\\x{2008}\\x{2009}\\x{200a}\n    \\x{202f}\\x{205f}\n 0: \\x{202f}\\x{205f}\n    \\x{3000}\n 0: \\x{3000}\n    Letter:ABC\n 0: Letter:ABC\n    Mark:\\x{300}\\x{1d172}\\x{1d17b}\n 0: Mark:\\x{300}\\x{1d172}\\x{1d17b}\n    Number:9\\x{660}\n 0: Number:9\\x{660}\n    Punctuation:\\x{66a},;\n 0: Punctuation:\\x{66a},;\n    Symbol:\\x{6de}<>\\x{fffc}\n 0: Symbol:\\x{6de}<>\\x{fffc}\n    Cf-property:\\x{ad}\\x{600}\\x{601}\\x{602}\\x{603}\\x{604}\\x{6dd}\\x{70f}\n 0: Cf-property:\\x{ad}\\x{600}\\x{601}\\x{602}\\x{603}\\x{604}\\x{6dd}\\x{70f}\n    \\x{200b}\\x{200c}\\x{200d}\\x{200e}\\x{200f}\n 0: \\x{200b}\\x{200c}\\x{200d}\\x{200e}\\x{200f}\n    \\x{202a}\\x{202b}\\x{202c}\\x{202d}\\x{202e}\n 0: \\x{202a}\\x{202b}\\x{202c}\\x{202d}\\x{202e}\n    \\x{202f}\n 0: \\x{202f}\n    \\x{2060}\\x{2061}\\x{2062}\\x{2063}\\x{2064}\n 0: \\x{2060}\\x{2061}\\x{2062}\\x{2063}\\x{2064}\n    \\x{206a}\\x{206b}\\x{206c}\\x{206d}\\x{206e}\\x{206f}\n 0: \\x{206a}\\x{206b}\\x{206c}\\x{206d}\\x{206e}\\x{206f}\n    \\x{feff}\n 0: \\x{feff}\n    \\x{fff9}\\x{fffa}\\x{fffb}\n 0: \\x{fff9}\\x{fffa}\\x{fffb}\n    \\x{110bd}\n 0: \\x{110bd}\n    \\x{1d173}\\x{1d174}\\x{1d175}\\x{1d176}\\x{1d177}\\x{1d178}\\x{1d179}\\x{1d17a}\n 0: \\x{1d173}\\x{1d174}\\x{1d175}\\x{1d176}\\x{1d177}\\x{1d178}\\x{1d179}\\x{1d17a}\n    \\x{e0001}\n 0: \\x{e0001}\n    \\x{e0020}\\x{e0030}\\x{e0040}\\x{e0050}\\x{e0060}\\x{e0070}\\x{e007f}\n 0: \\x{e0020}\\x{e0030}\\x{e0040}\\x{e0050}\\x{e0060}\\x{e0070}\\x{e007f}\n\\= Expect no match\n    \\x{09}\nNo match\n    \\x{1D}\nNo match\n    \\x{85}\nNo match\n    \\x{2028}\nNo match\n    \\x{2029}\nNo match\n    \\x{2065}\nNo match\n    \\x{e0002}\nNo match\n    \\x{e001f}\nNo match\n    \\x{e0080}\nNo match\n\n/^[[:punct:]]+$/utf,ucp\n    \\$+<=>^`|~\n 0: $+<=>^`|~\n    !\\\"#%&'()*,-./:;?@[\\\\]_{}\n 0: !\"#%&'()*,-./:;?@[\\]_{}\n    \\x{a1}\\x{a7}\n 0: \\x{a1}\\x{a7}\n    \\x{37e}\n 0: \\x{37e}\n\\= Expect no match\n    abcde\nNo match\n\n/^[[:^graph:]]+$/utf,ucp\n    \\x{09}\\x{0a}\\x{1D}\\x{20}\\x{85}\\x{a0}\\x{1680}\n 0: \\x{09}\\x{0a}\\x{1d} \\x{85}\\x{a0}\\x{1680}\n    \\x{2028}\\x{2029}\\x{202f}\\x{2065}\n 0: \\x{2028}\\x{2029}\\x{202f}\\x{2065}\n    \\x{3000}\\x{e0002}\\x{e001f}\\x{e0080}\n 0: \\x{3000}\\x{e0002}\\x{e001f}\\x{e0080}\n\\= Expect no match\n    Letter:ABC\nNo match\n    Mark:\\x{300}\\x{1d172}\\x{1d17b}\nNo match\n    Number:9\\x{660}\nNo match\n    Punctuation:\\x{66a},;\nNo match\n    Symbol:\\x{6de}<>\\x{fffc}\nNo match\n    Cf-property:\\x{ad}\\x{600}\\x{601}\\x{602}\\x{603}\\x{604}\\x{6dd}\\x{70f}\nNo match\n    \\x{200b}\\x{200c}\\x{200d}\\x{200e}\\x{200f}\nNo match\n    \\x{202a}\\x{202b}\\x{202c}\\x{202d}\\x{202e}\nNo match\n    \\x{2060}\\x{2061}\\x{2062}\\x{2063}\\x{2064}\nNo match\n    \\x{206a}\\x{206b}\\x{206c}\\x{206d}\\x{206e}\\x{206f}\nNo match\n    \\x{feff}\nNo match\n    \\x{fff9}\\x{fffa}\\x{fffb}\nNo match\n    \\x{110bd}\nNo match\n    \\x{1d173}\\x{1d174}\\x{1d175}\\x{1d176}\\x{1d177}\\x{1d178}\\x{1d179}\\x{1d17a}\nNo match\n    \\x{e0001}\nNo match\n    \\x{e0020}\\x{e0030}\\x{e0040}\\x{e0050}\\x{e0060}\\x{e0070}\\x{e007f}\nNo match\n\n/^[[:^print:]]+$/utf,ucp\n    \\x{09}\\x{1D}\\x{85}\\x{2028}\\x{2029}\\x{2065}\n 0: \\x{09}\\x{1d}\\x{85}\\x{2028}\\x{2029}\\x{2065}\n    \\x{e0002}\\x{e001f}\\x{e0080}\n 0: \\x{e0002}\\x{e001f}\\x{e0080}\n\\= Expect no match\n    Space: \\x{a0}\nNo match\n    \\x{1680}\\x{2000}\\x{2001}\\x{2002}\\x{2003}\\x{2004}\\x{2005}\nNo match\n    \\x{2006}\\x{2007}\\x{2008}\\x{2009}\\x{200a}\nNo match\n    \\x{202f}\\x{205f}\nNo match\n    \\x{3000}\nNo match\n    Letter:ABC\nNo match\n    Mark:\\x{300}\\x{1d172}\\x{1d17b}\nNo match\n    Number:9\\x{660}\nNo match\n    Punctuation:\\x{66a},;\nNo match\n    Symbol:\\x{6de}<>\\x{fffc}\nNo match\n    Cf-property:\\x{ad}\\x{600}\\x{601}\\x{602}\\x{603}\\x{604}\\x{6dd}\\x{70f}\nNo match\n    \\x{200b}\\x{200c}\\x{200d}\\x{200e}\\x{200f}\nNo match\n    \\x{202a}\\x{202b}\\x{202c}\\x{202d}\\x{202e}\nNo match\n    \\x{202f}\nNo match\n    \\x{2060}\\x{2061}\\x{2062}\\x{2063}\\x{2064}\nNo match\n    \\x{206a}\\x{206b}\\x{206c}\\x{206d}\\x{206e}\\x{206f}\nNo match\n    \\x{feff}\nNo match\n    \\x{fff9}\\x{fffa}\\x{fffb}\nNo match\n    \\x{110bd}\nNo match\n    \\x{1d173}\\x{1d174}\\x{1d175}\\x{1d176}\\x{1d177}\\x{1d178}\\x{1d179}\\x{1d17a}\nNo match\n    \\x{e0001}\nNo match\n    \\x{e0020}\\x{e0030}\\x{e0040}\\x{e0050}\\x{e0060}\\x{e0070}\\x{e007f}\nNo match\n\n/^[[:^punct:]]+$/utf,ucp\n    abcde\n 0: abcde\n\\= Expect no match\n    \\$+<=>^`|~\nNo match\n    !\\\"#%&'()*,-./:;?@[\\\\]_{}\nNo match\n    \\x{a1}\\x{a7}\nNo match\n    \\x{37e}\nNo match\n\n/[RST]+/i,utf,ucp\n    Ss\\x{17f}\n 0: Ss\\x{17f}\n\n/[R-T]+/i,utf,ucp\n    Ss\\x{17f}\n 0: Ss\\x{17f}\n\n/[q-u]+/i,utf,ucp\n    Ss\\x{17f}\n 0: Ss\\x{17f}\n\n/^s?c/im,utf\n    scat\n 0: sc\n\n# The next four tests are for repeated caseless back references when the\n# code unit length of the matched text is different to that of the original\n# group in the UTF-8 case.\n\n/^(\\x{23a})\\1*(.)/i,utf\n    \\x{23a}\\x{23a}\\x{23a}\\x{23a}\n 0: \\x{23a}\\x{23a}\\x{23a}\\x{23a}\n 1: \\x{23a}\n 2: \\x{23a}\n    \\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n 0: \\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n 1: \\x{23a}\n 2: \\x{2c65}\n    \\x{23a}\\x{23a}\\x{2c65}\\x{23a}\n 0: \\x{23a}\\x{23a}\\x{2c65}\\x{23a}\n 1: \\x{23a}\n 2: \\x{23a}\n\n/^(\\x{23a})\\1*(..)/i,utf\n    \\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n 0: \\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n 1: \\x{23a}\n 2: \\x{2c65}\\x{2c65}\n    \\x{23a}\\x{23a}\\x{2c65}\\x{23a}\n 0: \\x{23a}\\x{23a}\\x{2c65}\\x{23a}\n 1: \\x{23a}\n 2: \\x{2c65}\\x{23a}\n\n/^(\\x{23a})\\1*(...)/i,utf\n    \\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n 0: \\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n 1: \\x{23a}\n 2: \\x{2c65}\\x{2c65}\\x{2c65}\n    \\x{23a}\\x{23a}\\x{2c65}\\x{23a}\n 0: \\x{23a}\\x{23a}\\x{2c65}\\x{23a}\n 1: \\x{23a}\n 2: \\x{23a}\\x{2c65}\\x{23a}\n\n/^(\\x{23a})\\1*(....)/i,utf\n\\= Expect no match\n    \\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\nNo match\n    \\x{23a}\\x{23a}\\x{2c65}\\x{23a}\nNo match\n\n/[A-`]/i,utf\n    abcdefghijklmno\n 0: a\n\n/[\\S\\V\\H]/utf\n\n/[^\\p{Any}]*+x/utf\n    x\n 0: x\n\n/[[:punct:]]/utf,ucp\n    \\x{b4}\nNo match\n\n/[[:^ascii:]]/utf,ucp\n    \\x{100}\n 0: \\x{100}\n    \\x{200}\n 0: \\x{200}\n    \\x{300}\n 0: \\x{300}\n    \\x{37e}\n 0: \\x{37e}\n\\= Expect no match\n    aa\nNo match\n    99\nNo match\n\n/[[:^ascii:]\\w]/utf,ucp\n    aa\n 0: a\n    99\n 0: 9\n    gg\n 0: g\n    \\x{100}\n 0: \\x{100}\n    \\x{200}\n 0: \\x{200}\n    \\x{300}\n 0: \\x{300}\n    \\x{37e}\n 0: \\x{37e}\n\n/[\\w[:^ascii:]]/utf,ucp\n    aa\n 0: a\n    99\n 0: 9\n    gg\n 0: g\n    \\x{100}\n 0: \\x{100}\n    \\x{200}\n 0: \\x{200}\n    \\x{300}\n 0: \\x{300}\n    \\x{37e}\n 0: \\x{37e}\n\n/[^[:ascii:]\\W]/utf,ucp\n    \\x{100}\n 0: \\x{100}\n    \\x{200}\n 0: \\x{200}\n\\= Expect no match\n    aa\nNo match\n    99\nNo match\n    gg\nNo match\n    \\x{37e}\nNo match\n\n/[^[:^ascii:]\\d]/utf,ucp\n    a\n 0: a\n    ~\n 0: ~\n    \\a\n 0: \\x{07}\n    \\x{7f}\n 0: \\x{7f}\n\\= Expect no match\n    0\nNo match\n    \\x{389}\nNo match\n    \\x{20ac}\nNo match\n\n/(?=.*b)\\pL/\n    11bb\n 0: b\n\n/(?(?=.*b)(?=.*b)\\pL|.*c)/\n    11bb\n 0: b\n\n/^\\x{123}+?$/utf,no_auto_possess\n    \\x{123}\\x{123}\\x{123}\n 0: \\x{123}\\x{123}\\x{123}\n\n/^\\x{123}+?$/i,utf,no_auto_possess\n    \\x{123}\\x{122}\\x{123}\n 0: \\x{123}\\x{122}\\x{123}\n\\= Expect no match\n    \\x{123}\\x{124}\\x{123}\nNo match\n\n/\\N{U+1234}/utf\n    \\x{1234}\n 0: \\x{1234}\n\n/[\\N{U+1234}]/utf\n    \\x{1234}\n 0: \\x{1234}\n\n/(\\x{1234}) \\1/utf\n    \\N{U+1234} \\o{11064}\n 0: \\x{1234} \\x{1234}\n 1: \\x{1234}\n\n# Test the full list of Unicode \"Pattern White Space\" characters that are to\n# be ignored by /x. The pattern lines below may show up oddly in text editors\n# or when listed to the screen. Note that characters such as U+2002, which are\n# matched as space by \\h and \\v are *not* \"Pattern White Space\".\n\n/A‎‏  B/x,utf\n    AB\n 0: AB\n\n/A B/x,utf\n    A\\x{2002}B\n 0: A\\x{2002}B\n\\= Expect no match\n    AB\nNo match\n\n# -------\n\n/[^\\x{100}-\\x{ffff}]*[\\x80-\\xff]/utf\n    \\x{99}\\x{99}\\x{99}\n 0: \\x{99}\\x{99}\\x{99}\n\n/[^\\x{100}-\\x{ffff}ABC]*[\\x80-\\xff]/utf\n    \\x{99}\\x{99}\\x{99}\n 0: \\x{99}\\x{99}\\x{99}\n\n/[^\\x{100}-\\x{ffff}]*[\\x80-\\xff]/i,utf\n    \\x{99}\\x{99}\\x{99}\n 0: \\x{99}\\x{99}\\x{99}\n\n# Script run tests\n\n/^(*script_run:.{4})/utf\n    abcd                               Latin x4\n 0: abcd\n    \\x{2e80}\\x{2fa1d}\\x{3041}\\x{30a1}  Han Han Hiragana Katakana\n 0: \\x{2e80}\\x{2fa1d}\\x{3041}\\x{30a1}\n    \\x{3041}\\x{30a1}\\x{3007}\\x{3007}   Hiragana Katakana Han Han\n 0: \\x{3041}\\x{30a1}\\x{3007}\\x{3007}\n    \\x{30a1}\\x{3041}\\x{3007}\\x{3007}   Katakana Hiragana Han Han\n 0: \\x{30a1}\\x{3041}\\x{3007}\\x{3007}\n    \\x{1100}\\x{2e80}\\x{2e80}\\x{1101}   Hangul Han Han Hangul\n 0: \\x{1100}\\x{2e80}\\x{2e80}\\x{1101}\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{3105}   Han Bopomofo Han Bopomofo\n 0: \\x{2e80}\\x{3105}\\x{2e80}\\x{3105}\n    \\x{02ea}\\x{2e80}\\x{2e80}\\x{3105}   Bopomofo-Sk Han Han Bopomofo\n 0: \\x{2ea}\\x{2e80}\\x{2e80}\\x{3105}\n    \\x{3105}\\x{2e80}\\x{2e80}\\x{3105}   Bopomofo Han Han Bopomofo\n 0: \\x{3105}\\x{2e80}\\x{2e80}\\x{3105}\n    \\x{0300}cd!                        Inherited Latin Latin Common\n 0: \\x{300}cd!\n    \\x{0391}12\\x{03a9}                 Greek Common-digits Greek\n 0: \\x{391}12\\x{3a9}\n    \\x{0400}12\\x{fe2f}                 Cyrillic Common-digits Cyrillic\n 0: \\x{400}12\\x{fe2f}\n    \\x{0531}12\\x{fb17}                 Armenian Common-digits Armenian\n 0: \\x{531}12\\x{fb17}\n    \\x{0591}12\\x{fb4f}                 Hebrew Common-digits Hebrew\n 0: \\x{591}12\\x{fb4f}\n    \\x{0600}12\\x{1eef1}                Arabic Common-digits Arabic\n 0: \\x{600}12\\x{1eef1}\n    \\x{0600}\\x{0660}\\x{0669}\\x{1eef1}  Arabic Arabic-digits Arabic\n 0: \\x{600}\\x{660}\\x{669}\\x{1eef1}\n    \\x{0700}12\\x{086a}                 Syriac Common-digits Syriac\n 0: \\x{700}12\\x{86a}\n    \\x{1200}12\\x{ab2e}                 Ethiopic Common-digits Ethiopic\n 0: \\x{1200}12\\x{ab2e}\n    \\x{1680}12\\x{169c}                 Ogham Common-digits Ogham\n 0: \\x{1680}12\\x{169c}\n    \\x{3041}12\\x{3041}                 Hiragana Common-digits Hiragana\n 0: \\x{3041}12\\x{3041}\n    \\x{0980}\\x{09e6}\\x{09e7}\\x{0993}   Bengali Bengali-digits Bengali\n 0: \\x{980}\\x{9e6}\\x{9e7}\\x{993}\n    !cde                               Common Latin Latin Latin\n 0: !cde\n    A..B                               Latin Common Common Latin\n 0: A..B\n    0abc                               Ascii-digit Latin Latin Latin\n 0: 0abc\n    1\\x{0700}\\x{0700}\\x{0700}          Ascii-digit Syriac x 3\n 0: 1\\x{700}\\x{700}\\x{700}\n    \\x{1A80}\\x{1A80}\\x{1a40}\\x{1a41}   Tai Tham Hora digits, letters\n 0: \\x{1a80}\\x{1a80}\\x{1a40}\\x{1a41}\n\\= Expect no match\n    a\\x{370}bcd                        Latin Greek Latin Latin\nNo match\n    \\x{1100}\\x{02ea}\\x{02ea}\\x{02ea}   Hangul Bopomofo x3\nNo match\n    \\x{02ea}\\x{02ea}\\x{02ea}\\x{1100}   Bopomofo x3 Hangul\nNo match\n    \\x{1100}\\x{2e80}\\x{3041}\\x{1101}   Hangul Han Hiragana Hangul\nNo match\n    \\x{0391}\\x{09e6}\\x{09e7}\\x{03a9}   Greek Bengali digits Greek\nNo match\n    \\x{0600}7\\x{0669}\\x{1eef1}         Arabic ascii-digit Arabic-digit Arabic\nNo match\n    \\x{0600}\\x{0669}7\\x{1eef1}         Arabic Arabic-digit ascii-digit Arabic\nNo match\n    A5\\x{ff19}B                        Latin Common-ascii/notascii-digits Latin\nNo match\n    \\x{0300}cd\\x{0391}                 Inherited Latin Latin Greek\nNo match\n    !cd\\x{0391}                        Common Latin Latin Greek\nNo match\n    \\x{1A80}\\x{1A90}\\x{1a40}\\x{1a41}   Tai Tham Hora digit, Tham digit, letters\nNo match\n    A\\x{1d7ce}\\x{1d7ff}B               Common fancy-common-2-sets-digits Common\nNo match\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\nNo match\n\n/^(*sr:.{4}|..)/utf\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\n 0: \\x{2e80}\\x{3105}\n\n/^(*atomic_script_run:.{4}|..)/utf\n\\= Expect no match\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\nNo match\n\n/^(*asr:.*)/utf\n\\= Expect no match\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\nNo match\n\n/^(?>(*sr:.*))/utf\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\n 0: \\x{2e80}\\x{3105}\\x{2e80}\n\n/^(*sr:.*)/utf\n    \\x{2e80}\\x{3105}\\x{2e80}\\x{30a1}   Han Bopomofo Han Katakana\n 0: \\x{2e80}\\x{3105}\\x{2e80}\n    \\x{10fffd}\\x{10fffd}\\x{10fffd}     Private use (Unknown)\n 0: \\x{10fffd}\n\n/^(*sr:\\x{2e80}*)/utf\n    \\x{2e80}\\x{2e80}\\x{3105}           Han Han Bopomofo\n 0: \\x{2e80}\\x{2e80}\n\n/^(*sr:\\x{2e80}*)\\x{2e80}/utf\n    \\x{2e80}\\x{2e80}\\x{3105}           Han Han Bopomofo\n 0: \\x{2e80}\\x{2e80}\n\n/^(*sr:.*)Test/utf\n    Test script run on an empty string\n 0: Test\n\n/^(*sr:(.{2})){2}/utf\n    \\x{0600}7\\x{0669}\\x{1eef1}         Arabic ascii-digit Arabic-digit Arabic\n 0: \\x{600}7\\x{669}\\x{1eef1}\n 1: \\x{669}\\x{1eef1}\n    \\x{1A80}\\x{1A80}\\x{1a40}\\x{1a41}   Tai Tham Hora digits, letters\n 0: \\x{1a80}\\x{1a80}\\x{1a40}\\x{1a41}\n 1: \\x{1a40}\\x{1a41}\n    \\x{1A80}\\x{1a40}\\x{1A90}\\x{1a41}   Tai Tham Hora digit, letter, Tham digit, letter\n 0: \\x{1a80}\\x{1a40}\\x{1a90}\\x{1a41}\n 1: \\x{1a90}\\x{1a41}\n\\= Expect no match\n    \\x{1100}\\x{2e80}\\x{3041}\\x{1101}   Hangul Han Hiragana Hangul\nNo match\n\n/^(*sr:\\S*)/utf\n    \\x{1cf4}\\x{20f0}\\x{900}\\x{11305}   [Dev,Gran,Kan] [Dev,Gran,Lat] Dev Gran\n 0: \\x{1cf4}\\x{20f0}\\x{900}\n    \\x{1cf4}\\x{20f0}\\x{11305}\\x{900}   [Dev,Gran,Kan] [Dev,Gran,Lat] Gran Dev\n 0: \\x{1cf4}\\x{20f0}\\x{11305}\n    \\x{1cf4}\\x{20f0}\\x{900}ABC         [Dev,Gran,Kan] [Dev,Gran,Lat] Dev Lat\n 0: \\x{1cf4}\\x{20f0}\\x{900}\n    \\x{1cf4}\\x{20f0}ABC                [Dev,Gran,Kan] [Dev,Gran,Lat] Lat\n 0: \\x{1cf4}\\x{20f0}\n    \\x{20f0}ABC                        [Dev,Gran,Lat] Lat\n 0: \\x{20f0}ABC\n    XYZ\\x{20f0}ABC                     Lat [Dev,Gran,Lat] Lat\n 0: XYZ\\x{20f0}ABC\n    \\x{a36}\\x{a33}\\x{900}              [Dev,...] [Dev,...] Dev\n 0: \\x{a36}\\x{a33}\n    \\x{3001}\\x{2e80}\\x{3041}\\x{30a1}   [Bopo, Han, etc] Han Hira Kata\n 0: \\x{3001}\\x{2e80}\\x{3041}\\x{30a1}\n    \\x{3001}\\x{30a1}\\x{2e80}\\x{3041}   [Bopo, Han, etc] Kata Han Hira\n 0: \\x{3001}\\x{30a1}\\x{2e80}\\x{3041}\n    \\x{3001}\\x{3105}\\x{2e80}\\x{1101}   [Bopo, Han, etc] Bopomofo Han Hangul\n 0: \\x{3001}\\x{3105}\\x{2e80}\n    \\x{3105}\\x{3001}\\x{2e80}\\x{1101}   Bopomofo [Bopo, Han, etc] Han Hangul\n 0: \\x{3105}\\x{3001}\\x{2e80}\n    \\x{3031}\\x{3041}\\x{30a1}\\x{2e80}   [Hira Kata] Hira Kata Han\n 0: \\x{3031}\\x{3041}\\x{30a1}\\x{2e80}\n    \\x{060c}\\x{06d4}\\x{0600}\\x{10d00}\\x{0700}  [Arab Rohg Syrc Thaa] [Arab Rohg] Arab Rohg Syrc\n 0: \\x{60c}\\x{6d4}\\x{600}\n    \\x{060c}\\x{06d4}\\x{0700}\\x{0600}\\x{10d00}  [Arab Rohg Syrc Thaa] [Arab Rohg] Syrc Arab Rohg\n 0: \\x{60c}\\x{6d4}\n    \\x{2e80}\\x{3041}\\x{3001}\\x{3031}\\x{2e80}   Han Hira [Bopo, Han, etc] [Hira Kata] Han\n 0: \\x{2e80}\\x{3041}\\x{3001}\\x{3031}\\x{2e80}\n\n/(?<!)(*sr:)/\n\n/(?<!X(*sr:B)C)/\n\n/(?<=abc(?=X(*sr:BCY)Z)XBCYZ)./\n    abcXBCYZ!\n 0: !\n\n/(?<=abc(?=X(*sr:BXY)CCC)XBXYCCC)./\n   abcXBXYCCC!\n 0: !\n\n/^(*sr:\\S*)/utf\n    \\x{10d00}\\x{10d00}\\x{06d4}     Rohingya Rohingya Arabic-full-stop\n 0: \\x{10d00}\\x{10d00}\\x{6d4}\n    \\x{06d4}\\x{10d00}\\x{10d00}     Arabic-full-stop Rohingya Rohingya\n 0: \\x{6d4}\\x{10d00}\\x{10d00}\n    \\x{10d00}\\x{10d00}\\x{0363}     Rohingya Rohingya Inherited-extend-Latin\n 0: \\x{10d00}\\x{10d00}\n    \\x{0363}\\x{10d00}\\x{10d00}     Inherited-extend-Latin Rohingya Rohingya\n 0: \\x{363}\n    AB\\x{0363}                     Latin Latin Inherited-extend-Latin\n 0: AB\\x{363}\n    \\x{0363}AB                     Inherited-extend-Latin Latin Latin\n 0: \\x{363}AB\n    AB\\x{1cf7}                     Latin Latin Common-extended-Beng\n 0: AB\n    \\x{1cf7}AB                     Common-extend-Beng Latin Latin\n 0: \\x{1cf7}\n    \\x{1cf7}\\x{0993}               Common-extend-Beng Bengali\n 0: \\x{1cf7}\\x{993}\n    A\\x{1abe}BC                    Test enclosing mark\n 0: A\\x{1abe}BC\n    \\x{0370}\\x{1abe}\\x{0371}       Which can occur with any script (Greek here)\n 0: \\x{370}\\x{1abe}\\x{371}\n    \\x{3001}\\x{adf9}\\x{3001}       [.. Hangul ..] Hangul [.. Hangul ..]\n 0: \\x{3001}\\x{adf9}\\x{3001}\n    \\x{3400}\\x{3001}XXX            Han [Han etc.]\n 0: \\x{3400}\\x{3001}\n    \\x{3400}\\x{1cd5}               Han [Bengali Devanagari]\n 0: \\x{3400}\n    \\x{ac01}\\x{3400}               Hangul [.. Hangul ..]\n 0: \\x{ac01}\\x{3400}\n    \\x{ac01}\\x{1cd5}               Hangul [Bengali Devanagari]\n 0: \\x{ac01}\n    \\x{102e0}\\x{06d4}\\x{1ee4d}     [Arabic Coptic] [Arab Rohingya] Arabic\n 0: \\x{102e0}\\x{6d4}\\x{1ee4d}\n    \\x{102e0}\\x{06d4}\\x{2cc9}      [Arabic Coptic] [Arab Rohingya] Coptic\n 0: \\x{102e0}\\x{6d4}\n    \\x{102e0}\\x{06d4}\\x{10d30}     [Arabic Coptic] [Arab Rohingya] Rohingya\n 0: \\x{102e0}\\x{6d4}\n\n# Test loop breaking for empty string match\n\n/^(*sr:A|)*BCD/utf\n    AABCD\n 0: AABCD\n    ABCD\n 0: ABCD\n    BCD\n 0: BCD\n\n# The use of (*ACCEPT) breaks script run checking\n\n/^(*sr:.*(*ACCEPT)ZZ)/utf\n    \\x{1100}\\x{2e80}\\x{3041}\\x{1101}   Hangul Han Hiragana Hangul\n 0: \\x{1100}\\x{2e80}\\x{3041}\\x{1101}   Hangul Han Hiragana Hangul\n\n# -------\n\n# Test group names containing non-ASCII letters and digits\n\n/(?'ABáC'...)\\g{ABáC}/utf\n    abcabcdefg\n 0: abcabc\n 1: abc\n\n/(?'XʰABC'...)/utf\n    xyzpq\n 0: xyz\n 1: xyz\n\n/(?'XאABC'...)/utf\n    12345\n 0: 123\n 1: 123\n\n/(?'XᾈABC'...)/utf\n    %^&*(...\n 0: %^&\n 1: %^&\n\n/(?'𐨐ABC'...)/utf\n    abcde\n 0: abc\n 1: abc\n\n/^(?'אABC'...)(?&אABC)(?P=אABC)/utf\n    123123123456\n 0: 123123123\n 1: 123\n\n/^(?'אABC'...)(?&אABC)/utf\n    123123123456\n 0: 123123\n 1: 123\n\n/\\X*/\n    \\xF3aaa\\xE4\\xEA\\xEB\\xFEa\n 0: \\xf3aaa\\xe4\\xea\\xeb\\xfea\n\n/Я/i,utf\n    \\x{42f}\n 0: \\x{42f}\n    \\x{44f}\n 0: \\x{44f}\n\n/(?=Я)/i,utf\n    \\x{42f}\n 0: \n    \\x{44f}\n 0: \n\n# -----------------------------------------------------------------------------\n# Tests for bidi control and bidi class properties.\n\n/\\p{ bidi_control }/utf\n    -->\\x{202c}<--\n 0: \\x{202c}\n\n/\\p{bidicontrol}+/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: \\x{2066}\\x{2067}\\x{2068}\\x{2069}\n\n/\\p{bidic}+?/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: \\x{61c}\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: \\x{2066}\n\n/\\p{bidi_control}++/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: \\x{2066}\\x{2067}\\x{2068}\\x{2069}\n\n/[\\p{bidi_c}]/utf\n    -->\\x{202c}<--\n 0: \\x{202c}\n\n/[\\p{bidicontrol}]+/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: \\x{2066}\\x{2067}\\x{2068}\\x{2069}\n\n/[\\p{bidicontrol}]+?/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: \\x{61c}\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: \\x{2066}\n\n/[\\p{bidicontrol}]++/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: \\x{2066}\\x{2067}\\x{2068}\\x{2069}\n\n/[\\p{bidicontrol}<>]+/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: >\\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: >\\x{2066}\\x{2067}\\x{2068}\\x{2069}<\n\n/\\P{bidicontrol}+/g,utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: -->\n 0: <--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: -->\n 0: <--\n\n/\\p{^bidicontrol}+/g,utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: -->\n 0: <--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: -->\n 0: <--\n\n/\\p{bidi class = al}/utf\n    -->\\x{061D}<--\n 0: \\x{61d}\n\n/\\p{bc = al}+/utf\n    -->\\x{061D}\\x{061e}\\x{061f}<--\n 0: \\x{61d}\\x{61e}\\x{61f}\n\n/\\p{bidi_class : AL}+?/utf\n    -->\\x{061D}\\x{061e}\\x{061f}<--\n 0: \\x{61d}\n\n/\\p{Bidi_Class : AL}++/utf\n    -->\\x{061D}\\x{061e}\\x{061f}<--\n 0: \\x{61d}\\x{61e}\\x{61f}\n\n/\\p{b_c = aN}+/utf\n    -->\\x{061D}\\x{0602}\\x{0604}\\x{061f}<--\n 0: \\x{602}\\x{604}\n\n/\\p{bidi class = B}+/utf\n    -->\\x{0a}\\x{0d}\\x{01c}\\x{01e}\\x{085}\\x{2029}<--\n 0: \\x{0a}\\x{0d}\\x{1c}\\x{1e}\\x{85}\\x{2029}\n\n/\\p{bidi class:BN}+/utf\n    -->\\x{0}\\x{08}\\x{200c}\\x{fffe}\\x{dfffe}\\x{10ffff}<--\n 0: \\x{00}\\x{08}\\x{200c}\\x{fffe}\\x{dfffe}\\x{10ffff}\n\n/\\p{bidiclass:cs}+/utf\n    -->,.\\x{060c}\\x{ff1a}<--\n 0: ,.\\x{60c}\\x{ff1a}\n\n/\\p{bidiclass:En}+/utf\n    -->09\\x{b2}\\x{2074}\\x{1fbf9}<--\n 0: 09\\x{b2}\\x{2074}\\x{1fbf9}\n\n/\\p{bidiclass:es}+/utf\n    ==>+-\\x{207a}\\x{ff0d}<==\n 0: +-\\x{207a}\\x{ff0d}\n\n/\\p{bidiclass:et}+/utf\n    -->#\\{24}%\\x{a2}\\x{A838}\\x{1e2ff}<--\n 0: #\n\n/\\p{bidiclass:FSI}+/utf\n    -->\\x{2068}<--\n 0: \\x{2068}\n\n/\\p{bidi class:L}+/utf\n    -->ABC<--\n 0: ABC\n\n/\\P{bidi class:L}+/utf\n    -->ABC<--\n 0: -->\n\n/\\p{bidi class:LRE}+\\p{bidiclass=lri}*\\p{bidiclass:lro}/utf\n    -->\\x{202a}\\x{2066}\\x{202d}<--\n 0: \\x{202a}\\x{2066}\\x{202d}\n\n/\\p{bidi class:NSM}+/utf\n    -->\\x{9bc}\\x{a71}\\x{e31}<--\n 0: \\x{9bc}\\x{a71}\\x{e31}\n\n/\\p{bidi class:ON}+/utf\n    -->\\x{21}'()*;@\\x{384}\\x{2039}<=-\n 0: >!'()*;@\\x{384}\\x{2039}<=\n\n/\\p{bidiclass:pdf}\\p{bidiclass:pdi}/utf\n    -->\\x{202c}\\x{2069}<--\n 0: \\x{202c}\\x{2069}\n\n/\\p{bidi class:R}+/utf\n    -->\\x{590}\\x{5c6}\\x{200f}\\x{10805}<--\n 0: \\x{590}\\x{5c6}\\x{200f}\\x{10805}\n\n/\\p{bidi class:RLE}+\\p{bidi class:RLI}*\\p{bidi class:RLO}+/utf\n    -->\\x{202b}\\x{2067}\\x{202e}<--\n 0: \\x{202b}\\x{2067}\\x{202e}\n\n/\\p{bidi class:S}+\\p{bidiclass:WS}+/utf\n    -->\\x{9}\\x{b}\\x{1f}  \\x{c} \\x{2000} \\x{3000}<--\n 0: \\x{09}\\x{0b}\\x{1f}  \\x{0c} \\x{2000} \\x{3000}\n\n# -----------------------------------------------------------------------------\n\n/[\\p{taml}\\p{sc:ugar}]+/utf\n    \\x{0b82}\\x{10380}\n 0: \\x{b82}\\x{10380}\n\n/^[\\p{sc:Arabic}]/utf\n\\= Expect no match\n    \\x{650}\nNo match\n    \\x{651}  \nNo match\n    \\x{652}  \nNo match\n    \\x{653}  \nNo match\n    \\x{654} \nNo match\n    \\x{655} \nNo match\n    \n# -----------------------------------------------------------------------------\n# Tests for newly-added Boolean Properties\n\n/\\p{ahex}\\p{asciihexdigit}/utf\n    >4F<\n 0: 4F\n\n/\\p{alpha}\\p{alphabetic}/g,utf\n    >AB<>\\x{148}\\x{1234}\n 0: AB\n 0: \\x{148}\\x{1234}\n    \n/\\p{ascii}\\p{ascii}/g,utf\n    >AB<>\\x{148}\\x{1234}\n 0: >A\n 0: B<\n \n/\\p{Bidi_C}\\p{bidicontrol}/g,utf\n    >\\x{202d}\\x{2069}<\n 0: \\x{202d}\\x{2069}\n\n/\\p{Bidi_M}\\p{bidimirrored}/g,utf\n    >\\x{202d}\\x{2069}<>\\x{298b}\\x{bb}<\n 0: <>\n 0: \\x{298b}\\x{bb}\n    \n/\\p{cased}\\p{cased}/g,utf\n    >AN<>\\x{149}\\x{120}<\n 0: AN\n 0: \\x{149}\\x{120}\n \n/\\p{caseignorable}\\p{ci}/g,utf\n    >AN<>\\x{60}\\x{859}<\n 0: `\\x{859}\n \n/\\p{changeswhencasefolded}\\p{cwcf}/g,utf\n    >AN<>\\x{149}\\x{120}<\n 0: AN\n 0: \\x{149}\\x{120}\n \n/\\p{changeswhencasemapped}\\p{cwcm}/g,utf\n    >AN<>\\x{149}\\x{120}<\n 0: AN\n 0: \\x{149}\\x{120}\n \n/\\p{changeswhenlowercased}\\p{cwl}/g,utf\n    >AN<>\\x{149}\\x{120}<>yz<\n 0: AN\n\n/\\p{changeswhenuppercased}\\p{cwu}/g,utf\n    >AN<>\\x{149}\\x{120}<>yz<\n 0: yz\n\n/\\p{changeswhentitlecased}\\p{cwt}/g,utf\n    >AN<>\\x{149}\\x{120}<>yz<\n 0: yz\n\n/\\p{dash}\\p{dash}/g,utf\n    >\\x{2d}\\x{1400}<>yz<\n 0: -\\x{1400}\n    \n/\\p{defaultignorablecodepoint}\\p{di}/g,utf\n    >AN<>\\x{ad}\\x{e0fff}<>yz<\n 0: \\x{ad}\\x{e0fff}\n \n/\\p{deprecated}\\p{dep}/g,utf\n    >AN<>\\x{149}\\x{e0001}<>yz<\n 0: \\x{149}\\x{e0001}\n \n/\\p{diacritic}\\p{dia}/g,utf\n    >AN<>\\x{f84}\\x{5e}<>yz<\n 0: \\x{f84}^\n\n/\\p{emojicomponent}\\p{ecomp}/g,utf\n    >AN<>\\x{200d}\\x{e007f}<>yz<\n 0: \\x{200d}\\x{e007f}\n\n/\\p{emojimodifier}\\p{emod}/g,utf\n    >AN<>\\x{1f3fb}\\x{1f3ff}<>yz<\n 0: \\x{1f3fb}\\x{1f3ff}\n    \n/\\p{emojipresentation}\\p{epres}/g,utf\n    >AN<>\\x{2653}\\x{1f6d2}<>yz<\n 0: \\x{2653}\\x{1f6d2}\n \n/\\p{extender}\\p{ext}/g,utf\n    >AN<>\\x{1e944}\\x{b7}<>yz<\n 0: \\x{1e944}\\x{b7}\n\n/\\p{extendedpictographic}\\p{extpict}/g,utf\n    >AN<>\\x{26cf}\\x{ae}<>yz<\n 0: \\x{26cf}\\x{ae}\n    \n/\\p{graphemebase}\\p{grbase}/g,utf\n    >AN<>\\x{10f}\\x{60}<>yz<\n 0: >A\n 0: N<\n 0: >\\x{10f}\n 0: `<\n 0: >y\n 0: z<\n\n/\\p{graphemeextend}\\p{grext}/g,utf\n    >AN<>\\x{300}\\x{b44}<>yz<\n 0: \\x{300}\\x{b44}\n\n/\\p{hexdigit}\\p{hex}/g,utf\n    >AF23<>\\x{ff46}\\x{ff10}<>yz<\n 0: AF\n 0: 23\n 0: \\x{ff46}\\x{ff10}\n \n/\\p{idcontinue}\\p{idc}/g,utf\n    >AF23<>\\x{146}\\x{7a}<>yz<\n 0: AF\n 0: 23\n 0: \\x{146}z\n 0: yz\n\n/\\p{ideographic}\\p{ideo}/g,utf\n    >AF23<>\\x{30000}\\x{3006}<>yz<\n 0: \\x{30000}\\x{3006}\n\n/\\p{idstart}\\p{ids}/g,utf\n    >AF23<>\\x{146}\\x{7a}<>yz<\n 0: AF\n 0: \\x{146}z\n 0: yz\n\n/\\p{idsbinaryoperator}\\p{idsb}/g,utf\n    >AF23<>\\x{2ff0}\\x{2ffb}<>yz<\\x{2ff2}\\x{2ff1}\n 0: \\x{2ff0}\\x{2ffb}\n\n/\\p{idstrinaryoperator}\\p{idst}/g,utf\n    >AF23<>\\x{2ff2}\\x{2ff3}<>yz<\n 0: \\x{2ff2}\\x{2ff3}\n\n/\\p{Join Control}\\p{joinc}/g,utf\n    >AF23<>\\x{200c}\\x{200d}<>yz<\n 0: \\x{200c}\\x{200d}\n\n/\\p{logical_order_exception}\\p{loe}/g,utf\n    >AF23<>\\x{e40}\\x{aabc}<>yz<\n 0: \\x{e40}\\x{aabc}\n\n/\\p{Lowercase}\\p{lower}/g,utf\n    >AF23<>\\x{146}\\x{7a}<>yz<\n 0: \\x{146}z\n 0: yz\n\n/\\p{math}\\p{math}/g,utf\n    >AF23<>\\x{2215}\\x{2b}<>yz<\n 0: <>\n 0: \\x{2215}+\n 0: <>\n    \n/\\p{Non Character Code Point}\\p{nchar}/g,utf\n    >AF23<>\\x{10ffff}\\x{fdd0}<>yz<\n 0: \\x{10ffff}\\x{fdd0}\n \n/\\p{patternsyntax}\\p{patsyn}/g,utf\n    >AF23<>\\x{21cd}\\x{21}<>yz<\n 0: <>\n 0: \\x{21cd}!\n 0: <>\n\n/\\p{patternwhitespace}\\p{patws}/g,utf\n    >AF23<>\\x{2029}\\x{85}<>yz<\n 0: \\x{2029}\\x{85}\n\n/\\p{prependedconcatenationmark}\\p{pcm}/g,utf\n    >AF23<>\\x{600}\\x{110cd}<>yz<\n 0: \\x{600}\\x{110cd}\n\n/\\p{quotationmark}\\p{qmark}/g,utf\n    >AF23<>\\x{ff63}\\x{22}<>yz<\n 0: \\x{ff63}\"\n\n/\\p{radical}\\p{radical}/g,utf\n    >AF23<>\\x{2fd5}\\x{2e80}<>yz<\n 0: \\x{2fd5}\\x{2e80}\n\n/\\p{regionalindicator}\\p{ri}/g,utf\n    >AF23<>\\x{1f1e6}\\x{1f1ff}<>yz<\n 0: \\x{1f1e6}\\x{1f1ff}\n\n/=\\p{whitespace}\\p{space}\\p{wspace}=/g,utf\n    >AF23<=\\x{d}\\x{1680}\\x{3000}=>yz<\n 0: =\\x{0d}\\x{1680}\\x{3000}=\n\n/\\p{sentenceterminal}\\p{sterm}/g,utf\n    >AF23<>\\x{1da88}\\x{2e}<>yz<\n 0: \\x{1da88}.\n\n/\\p{terminalpunctuation}\\p{term}/g,utf\n    >AF23<>\\x{1da88}\\x{2e}<>yz<\n 0: \\x{1da88}.\n\n/\\p{unified ideograph}\\p{uideo}/g,utf\n    >AF23<>\\x{30000}\\x{3400}<>yz<\n 0: \\x{30000}\\x{3400}\n\n/\\p{UPPERcase}\\p{upper}/g,utf\n    >AF23<>\\x{146}\\x{7a}<>yz<\n 0: AF\n\n/\\p{variationselector}\\p{vs}/g,utf\n    >AF23<>\\x{180b}\\x{e01ef}<>yz<\n 0: \\x{180b}\\x{e01ef}\n\n/\\p{xidcontinue}\\p{xidc}/g,utf\n    >AF23<>\\x{146}\\x{30}<>yz<\n 0: AF\n 0: 23\n 0: \\x{146}0\n 0: yz\n\n# -----------------------------------------------------------------------------\n# Variable-length lookbehinds.\n\n/(?<=áb?c).../g,utf\n    ábcdèfgácxyz\n 0: d\\x{e8}f\n 0: xyz\n\n/(?<=PQR|áb?c).../g,utf\n    ábcdèfgácxyzPQR123\n 0: d\\x{e8}f\n 0: xyz\n 0: 123\n\n/(?<=áb?c|PQR).../g,utf\n    ábcdèfgácxyzPQR123\n 0: d\\x{e8}f\n 0: xyz\n 0: 123\n\n/(?<=PQ|áb?c).../g,utf\n    ábcdèfgácxyzPQR123\n 0: d\\x{e8}f\n 0: xyz\n 0: R12\n\n/(?<=áb?c|PQ).../g,utf\n    ábcdèfgácxyzPQR123\n 0: d\\x{e8}f\n 0: xyz\n 0: R12\n\n/(?<=á(b?c|d?è?è)f)X./g,utf\n     ácfX1zzzáèfX2zzzádèèfX3zzzX4zzz\n 0: X1\n 1: c\n 0: X2\n 1: \\x{e8}\n 0: X3\n 1: d\\x{e8}\\x{e8}\n\n/(?<!á(b?c|d?è?è)f)X./g,utf\n     ácfX1zzzáèfX2zzzádèèfX3zzzX4zzz\n 0: X4\n     \n/(?(?<=áb?c)d|è)/utf\n    ábcdèfg\n 0: d\n    ácdèfg\n 0: d\n    áxdèfg\n 0: \\x{e8}\n    \n/(?<=\\d{2,3}|áBC)./utf\n    áBCD   \n 0: D\n\n/(?<=á(b?c){3}d)X/utf\n   ZXácbccdXYZ\n 0: X\n 1: c\n   \n/(?<=á(b?c){0}d)X/utf\n   ZXádXYZ\n 0: X\n \n/(?<=á?(b?c){0}d)X./utf\n   ZXádXYZ\n 0: XY\n \n# -------------------------------------------------------------------------- \n\n/\\N{ U+1234 }/utf\n    \\x{1234}\n 0: \\x{1234}\n\n/\\o{ 1234 }/utf\n    x\\o{1234}y\n 0: \\x{29c}\n\n/\\x{ 1234 }/utf\n    x\\x{1234}y\n 0: \\x{1234}\n\n/\\p{ L }/\n    23AB56\n 0: A\n\n/\\w+/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n 0: cafe\\x{300}_au\\x{203f}lait\n\n/[\\w]+/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n 0: cafe\\x{300}_au\\x{203f}lait\n\n/[[:word:]]+/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n 0: cafe\\x{300}_au\\x{203f}lait\n\n/[[:xdigit:]]+/utf,ucp\n    --123ef\\x{ff10}\\x{ff19}\\x{ff21}\\x{ff26}\\x{ff1a}\n 0: 123ef\\x{ff10}\\x{ff19}\\x{ff21}\\x{ff26}\n\n/\\b.+?\\b/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n 0: cafe\\x{300}_au\\x{203f}lait\n\n/caf\\B.+?\\B/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n 0: cafe\n\n# -------------------------------------------------------------------------- \n# Case-independent matching property tests added after changing PCRE2 to be\n# compatible with Perl. All three cases (upper, lower, title) conflate.\n\n/\\p{Lu}\\p{Ll}\\P{Lu}\\P{Ll}/utf\n    >AbbD<\n 0: AbbD\n    >Abb\\x{01c5}<\n 0: Abb\\x{1c5}\n\\= Expect no match\n    >aBBd<\nNo match\n    >aB!!<\nNo match\n\n/\\p{Lu}\\p{Ll}\\P{Lu}\\P{Ll}/i,utf\n    >aB!!<\n 0: aB!!\n    >\\x{01c5}B!!<\n 0: \\x{1c5}B!!\n\\= Expect no match\n    >AbbD<\nNo match\n    >aBBd<\nNo match\n    >Abb\\x{01c5}<\nNo match\n\n/[.\\p{Lu}][.\\p{Ll}][.\\P{Lu}][.\\P{Ll}]/i,utf\n    >aB!!<\n 0: aB!!\n\\= Expect no match\n    >AbbD<\nNo match\n    >aBBd<\nNo match\n    >Abb\\x{01c5}<\nNo match\n\n/[\\p{Lt}\\x{36b}][\\P{Lt}\\x{10a0}]/i,utf\n    >A!<\n 0: A!\n    >\\x{3c9}\\x{58d}<\n 0: \\x{3c9}\\x{58d}\n    >\\x{413}\\x{940}<\n 0: \\x{413}\\x{940}\n\\= Expect no match\n    \\x{3c9}\\x{3c9}\nNo match\n    \\x{58d}\\x{58d}\nNo match\n    \\x{413}\\x{413}\nNo match\n    \\x{940}\\x{940}\nNo match\n\n/^\\p{Lt}+/i,utf\n    \\x{1c5}AB\n 0: \\x{1c5}AB\n\n# -------------------------------------------------------------------------- \n\n/\\p{  ^ L u }/\n    AbCd\n 0: b\n\n# hex\n\n/c3 b1/hex,utf\n    \\N{U+00F1}\n 0: \\x{f1}\n\n/[^\\P{Lu}1]/i,utf,ucp\n    a\n 0: a\n    A\n 0: A\n    \\x{3a3}\n 0: \\x{3a3}\n    \\x{3c3}\n 0: \\x{3c3}\n\\= Expect no match\n    1\nNo match\n    2\nNo match\n\n/[^\\P{Lu}1]/utf,ucp\n    A\n 0: A\n    \\x{3a3}\n 0: \\x{3a3}\n\\= Expect no match\n    1\nNo match\n    2\nNo match\n    a\nNo match\n    \\x{3c3}\nNo match\n\n/[\\P{Lu}1]/i,utf,ucp\n    1\n 0: 1\n    2\n 0: 2\n\\= Expect no match\n    a\nNo match\n    A\nNo match\n    \\x{3a3}\nNo match\n    \\x{3c3}\nNo match\n\n/[\\P{Lu}1]/utf,ucp\n    1\n 0: 1\n    2\n 0: 2\n    a\n 0: a\n    \\x{3c3}\n 0: \\x{3c3}\n\\= Expect no match\n    A\nNo match\n    \\x{3a3}\nNo match\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n/(?[\\p{L} - \\p{Lu}])/\n    a\n 0: a\n\\= Expect no match\n    A\nNo match\n    1\nNo match\n\n/(?[\\p{L} & \\p{Lu}])/\n    A\n 0: A\n\\= Expect no match\n    a\nNo match\n    1\nNo match\n\n/(?[[\\p{Lu}z] ^ [\\p{Ll}G]])/\n    A\n 0: A\n    p\n 0: p\n\\= Expect no match\n    G\nNo match\n    z\nNo match\n    1\nNo match\n\n/(?[\\p{Ll} | \\p{Nd}])/\n    a\n 0: a\n    1\n 0: 1\n\\= Expect no match\n    A\nNo match\n\n/(?[\\p{Ll} + [\\p{Nd}]])/\n    a\n 0: a\n    1\n 0: 1\n\\= Expect no match\n    A\nNo match\n\n/(?[ ![\\p{Nd}z] ])/\n    _\n 0: _\n    Z\n 0: Z\n\\= Expect no match\n    1\nNo match\n    z\nNo match\n\n/(?[ \\P{Nd} + [2] ])/\n    _\n 0: _\n    Z\n 0: Z\n    2\n 0: 2\n\\= Expect no match\n    1\nNo match\n    3\nNo match\n\n/(?[ ![\\P{Nd}] ])/\n    1\n 0: 1\n    2\n 0: 2\n\\= Expect no match\n    _\nNo match\n    z\nNo match\n\n# caseless tests\n\n/(?[ \\p{Lu} ^ \\p{Ll} ])/\n    a\n 0: a\n    A\n 0: A\n\\= Expect no match\n    _\nNo match\n    1\nNo match\n\n/(?[ [\\p{Lu}1] ^ \\p{Ll} ])/i\n    1\n 0: 1\n\\= Expect no match\n    a\nNo match\n    A\nNo match\n    _\nNo match\n\n/(?[ [\\p{Lu}1] & [\\p{Ll}1] ])/\n    1\n 0: 1\n\\= Expect no match\n    a\nNo match\n    A\nNo match\n    _\nNo match\n    2\nNo match\n\n/(?[ [\\p{Lu}1] & [\\p{Ll}1] ])/i\n    a\n 0: a\n    A\n 0: A\n    1\n 0: 1\n\\= Expect no match\n    _\nNo match\n    2\nNo match\n\n/(?[ \\p{Lu} + \\p{Ll} & [a-z] ])/utf\n    \\x{0411}\n 0: \\x{411}\n    a\n 0: a\n    A\n 0: A\n\\= Expect no match\n    \\x{0431}\nNo match\n\n/(?[ (\\p{Lu} + \\p{Ll}) & [a-z] ])/utf\n    a\n 0: a\n\\= Expect no match\n    \\x{0411}\nNo match\n    \\x{0431}\nNo match\n    A\nNo match\n\n/(?[ [a-z] & \\p{Lu} + \\p{Ll} ])/utf\n    a\n 0: a\n    \\x{0431}\n 0: \\x{431}\n\\= Expect no match\n    \\x{0411}\nNo match\n    A\nNo match\n\n/(?[ [a-z] & (\\p{Lu} + \\p{Ll}) ])/utf\n    a\n 0: a\n\\= Expect no match\n    \\x{0431}\nNo match\n    \\x{0411}\nNo match\n    A\nNo match\n\n# --------------\n\n# End of testinput4\n"
  },
  {
    "path": "testdata/testoutput5",
    "content": "# This set of tests checks the API, internals, and non-Perl stuff for UTF\n# support, including Unicode properties. However, tests that give different\n# results in 8-bit, 16-bit, and 32-bit modes are excluded (see tests 10 and\n# 12).\n\n#newline_default lf any anycrlf\n\n# PCRE2 and Perl disagree about the characteristics of certain Unicode\n# characters. For example, 061C was considered by Perl to be Arabic, though\n# it was not listed as such in the Unicode Scripts.txt file for Unicode 8.\n# However, it *is* in that file for Unicode 10, but when I came to re-check,\n# Perl had changed in the meantime, with 5.026 not recognizing it as Arabic.\n\n# 2066-2069 are graphic and printable according to Perl, though they are\n# actually \"isolate\" control characters. That is why the following tests are\n# here rather than in test 4.\n\n/^[\\p{Arabic}]/utf\n    \\x{061c}\n 0: \\x{61c}\n\n/^[[:graph:]]+$/utf,ucp\n\\= Expect no match\n    \\x{61c}\nNo match\n    \\x{2066}\nNo match\n    \\x{2067}\nNo match\n    \\x{2068}\nNo match\n    \\x{2069}\nNo match\n\n/^[[:print:]]+$/utf,ucp\n\\= Expect no match\n    \\x{61c}\nNo match\n    \\x{2066}\nNo match\n    \\x{2067}\nNo match\n    \\x{2068}\nNo match\n    \\x{2069}\nNo match\n\n/^[[:^graph:]]+$/utf,ucp\n    \\x{09}\\x{0a}\\x{1D}\\x{20}\\x{85}\\x{a0}\\x{61c}\\x{1680}\n 0: \\x{09}\\x{0a}\\x{1d} \\x{85}\\x{a0}\\x{61c}\\x{1680}\n    \\x{2028}\\x{2029}\\x{202f}\\x{2065}\\x{2066}\\x{2067}\\x{2068}\\x{2069}\n 0: \\x{2028}\\x{2029}\\x{202f}\\x{2065}\\x{2066}\\x{2067}\\x{2068}\\x{2069}\n\n/^[[:^print:]]+$/utf,ucp\n    \\x{09}\\x{1D}\\x{85}\\x{61c}\\x{2028}\\x{2029}\\x{2065}\\x{2066}\\x{2067}\n 0: \\x{09}\\x{1d}\\x{85}\\x{61c}\\x{2028}\\x{2029}\\x{2065}\\x{2066}\\x{2067}\n    \\x{2068}\\x{2069}\n 0: \\x{2068}\\x{2069}\n\n# Perl does not consider U+180e to be a space character. It is true that it\n# does not appear in the Unicode PropList.txt file as such, but in many other\n# sources it is listed as a space, and has been treated as such in PCRE for\n# a long time.\n\n/^>[[:blank:]]*/utf,ucp\n    >\\x{20}\\x{a0}\\x{1680}\\x{180e}\\x{2000}\\x{202f}\\x{9}\\x{b}\\x{2028}\n 0: > \\x{a0}\\x{1680}\\x{180e}\\x{2000}\\x{202f}\\x{09}\n\n/^A\\s+Z/utf,ucp\n    A\\x{85}\\x{180e}\\x{2005}Z\n 0: A\\x{85}\\x{180e}\\x{2005}Z\n\n/^A[\\s]+Z/utf,ucp\n    A\\x{2005}Z\n 0: A\\x{2005}Z\n    A\\x{85}\\x{2005}Z\n 0: A\\x{85}\\x{2005}Z\n\n/^[[:graph:]]+$/utf,ucp\n\\= Expect no match\n    \\x{180e}\nNo match\n\n/^[[:print:]]+$/utf,ucp\n    \\x{180e}\n 0: \\x{180e}\n\n/^[[:^graph:]]+$/utf,ucp\n    \\x{09}\\x{0a}\\x{1D}\\x{20}\\x{85}\\x{a0}\\x{61c}\\x{1680}\\x{180e}\n 0: \\x{09}\\x{0a}\\x{1d} \\x{85}\\x{a0}\\x{61c}\\x{1680}\\x{180e}\n\n/^[[:^print:]]+$/utf,ucp\n\\= Expect no match\n    \\x{180e}\nNo match\n\n# End of U+180E tests.\n\n# ---------------------------------------------------------------------\n\n# Use no_start_optimize because the first code unit is different in 8-bit from\n# the wider modes.\n/\\65535/IB,utf,no_start_optimize\n------------------------------------------------------------------\n        Bra\n        \\x{1ad}35\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: no_start_optimize utf\nOptimizations: auto_possess,dotstar_anchor\n\n/\\65536/IB,utf,no_start_optimize\n------------------------------------------------------------------\n        Bra\n        \\x{1ad}36\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: no_start_optimize utf\nOptimizations: auto_possess,dotstar_anchor\n\n/\\x{110000}/IB,utf\nFailed: error 134 at offset 9: character code point value in \\x{} or \\o{} is too large\n        here: \\x{110000 |<--| }\n\n/\\o{4200000}/IB,utf\nFailed: error 134 at offset 10: character code point value in \\x{} or \\o{} is too large\n        here: \\o{4200000 |<--| }\n\n/\\x{ffffffff}/utf\nFailed: error 134 at offset 11: character code point value in \\x{} or \\o{} is too large\n        here: ...x{ffffffff |<--| }\n\n/\\o{37777777777}/utf\nFailed: error 134 at offset 14: character code point value in \\x{} or \\o{} is too large\n        here: ...7777777777 |<--| }\n\n/\\x{100000000}/utf\nFailed: error 134 at offset 12: character code point value in \\x{} or \\o{} is too large\n        here: ...{100000000 |<--| }\n\n/\\o{77777777777}/utf\nFailed: error 134 at offset 14: character code point value in \\x{} or \\o{} is too large\n        here: ...7777777777 |<--| }\n\n/\\x{d800}/utf\nFailed: error 173 at offset 7: disallowed Unicode code point (>= 0xd800 && <= 0xdfff)\n        here: \\x{d800 |<--| }\n\n/\\o{154000}/utf\nFailed: error 173 at offset 9: disallowed Unicode code point (>= 0xd800 && <= 0xdfff)\n        here: \\o{154000 |<--| }\n\n/\\x{dfff}/utf\nFailed: error 173 at offset 7: disallowed Unicode code point (>= 0xd800 && <= 0xdfff)\n        here: \\x{dfff |<--| }\n\n/\\o{157777}/utf\nFailed: error 173 at offset 9: disallowed Unicode code point (>= 0xd800 && <= 0xdfff)\n        here: \\o{157777 |<--| }\n\n/\\x{d7ff}/utf\n\n/\\o{153777}/utf\n\n/\\x{e000}/utf\n\n/\\o{170000}/utf\n\n/^\\x{100}a\\x{1234}/utf\n    \\x{100}a\\x{1234}bcd\n 0: \\x{100}a\\x{1234}\n\n/\\x{0041}\\x{2262}\\x{0391}\\x{002e}/IB,utf\n------------------------------------------------------------------\n        Bra\n        A\\x{2262}\\x{391}.\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = '.'\nSubject length lower bound = 4\n    \\x{0041}\\x{2262}\\x{0391}\\x{002e}\n 0: A\\x{2262}\\x{391}.\n\n/.{3,5}X/IB,utf\n------------------------------------------------------------------\n        Bra\n        Any{3}\n        Any{0,2}\n        X\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nLast code unit = 'X'\nSubject length lower bound = 4\n    \\x{212ab}\\x{212ab}\\x{212ab}\\x{861}X\n 0: \\x{212ab}\\x{212ab}\\x{212ab}\\x{861}X\n\n/.{3,5}?/IB,utf\n------------------------------------------------------------------\n        Bra\n        Any{3}\n        Any{0,2}?\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nSubject length lower bound = 3\n    \\x{212ab}\\x{212ab}\\x{212ab}\\x{861}\n 0: \\x{212ab}\\x{212ab}\\x{212ab}\n\n/^[ab]/IB,utf\n------------------------------------------------------------------\n        Bra\n        ^\n        [ab]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: utf\nOverall options: anchored utf\nStarting code units: a b\nSubject length lower bound = 1\n    bar\n 0: b\n\\= Expect no match\n    c\nNo match\n    \\x{ff}\nNo match\n    \\x{100}\nNo match\n\n/\\x{100}*(\\d+|\"(?1)\")/utf\n    1234\n 0: 1234\n 1: 1234\n    \"1234\"\n 0: \"1234\"\n 1: \"1234\"\n    \\x{100}1234\n 0: \\x{100}1234\n 1: 1234\n    \"\\x{100}1234\"\n 0: \\x{100}1234\n 1: 1234\n    \\x{100}\\x{100}12ab\n 0: \\x{100}\\x{100}12\n 1: 12\n    \\x{100}\\x{100}\"12\"\n 0: \\x{100}\\x{100}\"12\"\n 1: \"12\"\n\\= Expect no match\n    \\x{100}\\x{100}abcd\nNo match\n\n/\\x{100}*/IB,utf\n------------------------------------------------------------------\n        Bra\n        \\x{100}*+\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nMay match empty string\nOptions: utf\nSubject length lower bound = 0\n\n/a\\x{100}*/IB,utf\n------------------------------------------------------------------\n        Bra\n        a\n        \\x{100}*+\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/ab\\x{100}*/IB,utf\n------------------------------------------------------------------\n        Bra\n        ab\n        \\x{100}*+\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n\n/[\\x{200}-\\x{100}]/utf\nFailed: error 108 at offset 16: range out of order in character class\n        here: ...0}-\\x{100} |<--| ]\n\n/[Ā-Ą]/utf\n    \\x{100}\n 0: \\x{100}\n    \\x{104}\n 0: \\x{104}\n\\= Expect no match\n    \\x{105}\nNo match\n    \\x{ff}\nNo match\n\n/[\\xFF]/IB\n------------------------------------------------------------------\n        Bra\n        \\x{ff}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nFirst code unit = \\xff\nSubject length lower bound = 1\n    >\\xff<\n 0: \\xff\n\n/[^\\xFF]/IB\n------------------------------------------------------------------\n        Bra\n        [^\\x{ff}] (not)\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nSubject length lower bound = 1\n\n/[Ä-Ü]/utf\n    Ö # Matches without Study\n 0: \\x{d6}\n    \\x{d6}\n 0: \\x{d6}\n\n/[Ä-Ü]/utf\n    Ö <-- Same with Study\n 0: \\x{d6}\n    \\x{d6}\n 0: \\x{d6}\n\n/[\\x{c4}-\\x{dc}]/utf\n    Ö # Matches without Study\n 0: \\x{d6}\n    \\x{d6}\n 0: \\x{d6}\n\n/[\\x{c4}-\\x{dc}]/utf\n    Ö <-- Same with Study\n 0: \\x{d6}\n    \\x{d6}\n 0: \\x{d6}\n\n/[^\\x{100}]abc(xyz(?1))/IB,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x{100}] (not)\n        abc\n        CBra 1\n        xyz\n        Recurse\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 1\nOptions: utf\nLast code unit = 'z'\nSubject length lower bound = 7\n\n/(\\x{100}(b(?2)c))?/IB,utf\n------------------------------------------------------------------\n        Bra\n        Brazero\n        CBra 1\n        \\x{100}\n        CBra 2\n        b\n        Recurse\n        c\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 2\nMay match empty string\nOptions: utf\nSubject length lower bound = 0\n\n/(\\x{100}(b(?2)c)){0,2}/IB,utf\n------------------------------------------------------------------\n        Bra\n        Brazero\n        Bra\n        CBra 1\n        \\x{100}\n        CBra 2\n        b\n        Recurse\n        c\n        Ket\n        Ket\n        Brazero\n        CBra 1\n        \\x{100}\n        CBra 2\n        b\n        Recurse\n        c\n        Ket\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 2\nMay match empty string\nOptions: utf\nSubject length lower bound = 0\n\n/(\\x{100}(b(?1)c))?/IB,utf\n------------------------------------------------------------------\n        Bra\n        Brazero\n        CBra 1\n        \\x{100}\n        CBra 2\n        b\n        Recurse\n        c\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 2\nMay match empty string\nOptions: utf\nSubject length lower bound = 0\n\n/(\\x{100}(b(?1)c)){0,2}/IB,utf\n------------------------------------------------------------------\n        Bra\n        Brazero\n        Bra\n        CBra 1\n        \\x{100}\n        CBra 2\n        b\n        Recurse\n        c\n        Ket\n        Ket\n        Brazero\n        CBra 1\n        \\x{100}\n        CBra 2\n        b\n        Recurse\n        c\n        Ket\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 2\nMay match empty string\nOptions: utf\nSubject length lower bound = 0\n\n/\\W/utf\n    A.B\n 0: .\n    A\\x{100}B\n 0: \\x{100}\n\n/\\w/utf\n    \\x{100}X\n 0: X\n\n# Use no_start_optimize because the first code unit is different in 8-bit from\n# the wider modes.\n\n/^\\ሴ/IB,utf,no_start_optimize\n------------------------------------------------------------------\n        Bra\n        ^\n        \\x{1234}\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nCompile options: no_start_optimize utf\nOverall options: anchored no_start_optimize utf\nOptimizations: auto_possess,dotstar_anchor\n\n/()()()()()()()()()()\n ()()()()()()()()()()\n ()()()()()()()()()()\n ()()()()()()()()()()\n A (x) (?41) B/x,utf\n    AxxB\nMatched, but too many substrings\n 0: AxxB\n 1: \n 2: \n 3: \n 4: \n 5: \n 6: \n 7: \n 8: \n 9: \n10: \n11: \n12: \n13: \n14: \n\n/^[\\x{100}\\E-\\Q\\E\\x{150}]/B,utf\n------------------------------------------------------------------\n        Bra\n        ^\n        [\\x{100}-\\x{150}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E]/B,utf\n------------------------------------------------------------------\n        Bra\n        ^\n        [\\x{100}-\\x{150}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/^abc./gmx,newline=any,utf\n    abc1 \\x0aabc2 \\x0babc3xx \\x0cabc4 \\x0dabc5xx \\x0d\\x0aabc6 \\x{0085}abc7 \\x{2028}abc8 \\x{2029}abc9 JUNK\n 0: abc1\n 0: abc2\n 0: abc3\n 0: abc4\n 0: abc5\n 0: abc6\n 0: abc7\n 0: abc8\n 0: abc9\n\n/abc.$/gmx,newline=any,utf\n    abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x{0085} abc7\\x{2028} abc8\\x{2029} abc9\n 0: abc1\n 0: abc2\n 0: abc3\n 0: abc4\n 0: abc5\n 0: abc6\n 0: abc7\n 0: abc8\n 0: abc9\n\n/^a\\Rb/bsr=unicode,utf\n    a\\nb\n 0: a\\x{0a}b\n    a\\rb\n 0: a\\x{0d}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n    a\\x0bb\n 0: a\\x{0b}b\n    a\\x0cb\n 0: a\\x{0c}b\n    a\\x{85}b\n 0: a\\x{85}b\n    a\\x{2028}b\n 0: a\\x{2028}b\n    a\\x{2029}b\n 0: a\\x{2029}b\n\\= Expect no match\n    a\\n\\rb\nNo match\n\n/^a\\R*b/bsr=unicode,utf\n    ab\n 0: ab\n    a\\nb\n 0: a\\x{0a}b\n    a\\rb\n 0: a\\x{0d}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n    a\\x0bb\n 0: a\\x{0b}b\n    a\\x0c\\x{2028}\\x{2029}b\n 0: a\\x{0c}\\x{2028}\\x{2029}b\n    a\\x{85}b\n 0: a\\x{85}b\n    a\\n\\rb\n 0: a\\x{0a}\\x{0d}b\n    a\\n\\r\\x{85}\\x0cb\n 0: a\\x{0a}\\x{0d}\\x{85}\\x{0c}b\n\n/^a\\R+b/bsr=unicode,utf\n    a\\nb\n 0: a\\x{0a}b\n    a\\rb\n 0: a\\x{0d}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n    a\\x0bb\n 0: a\\x{0b}b\n    a\\x0c\\x{2028}\\x{2029}b\n 0: a\\x{0c}\\x{2028}\\x{2029}b\n    a\\x{85}b\n 0: a\\x{85}b\n    a\\n\\rb\n 0: a\\x{0a}\\x{0d}b\n    a\\n\\r\\x{85}\\x0cb\n 0: a\\x{0a}\\x{0d}\\x{85}\\x{0c}b\n\\= Expect no match\n    ab\nNo match\n\n/^a\\R{1,3}b/bsr=unicode,utf\n    a\\nb\n 0: a\\x{0a}b\n    a\\n\\rb\n 0: a\\x{0a}\\x{0d}b\n    a\\n\\r\\x{85}b\n 0: a\\x{0a}\\x{0d}\\x{85}b\n    a\\r\\n\\r\\nb\n 0: a\\x{0d}\\x{0a}\\x{0d}\\x{0a}b\n    a\\r\\n\\r\\n\\r\\nb\n 0: a\\x{0d}\\x{0a}\\x{0d}\\x{0a}\\x{0d}\\x{0a}b\n    a\\n\\r\\n\\rb\n 0: a\\x{0a}\\x{0d}\\x{0a}\\x{0d}b\n    a\\n\\n\\r\\nb\n 0: a\\x{0a}\\x{0a}\\x{0d}\\x{0a}b\n\\= Expect no match\n    a\\n\\n\\n\\rb\nNo match\n    a\\r\nNo match\n\n/\\H\\h\\V\\v/utf\n    X X\\x0a\n 0: X X\\x{0a}\n    X\\x09X\\x0b\n 0: X\\x{09}X\\x{0b}\n\\= Expect no match\n    \\x{a0} X\\x0a\nNo match\n\n/\\H*\\h+\\V?\\v{3,4}/utf\n    \\x09\\x20\\x{a0}X\\x0a\\x0b\\x0c\\x0d\\x0a\n 0: \\x{09} \\x{a0}X\\x{0a}\\x{0b}\\x{0c}\\x{0d}\n    \\x09\\x20\\x{a0}\\x0a\\x0b\\x0c\\x0d\\x0a\n 0: \\x{09} \\x{a0}\\x{0a}\\x{0b}\\x{0c}\\x{0d}\n    \\x09\\x20\\x{a0}\\x0a\\x0b\\x0c\n 0: \\x{09} \\x{a0}\\x{0a}\\x{0b}\\x{0c}\n\\= Expect no match\n    \\x09\\x20\\x{a0}\\x0a\\x0b\nNo match\n\n/\\H\\h\\V\\v/utf\n    \\x{3001}\\x{3000}\\x{2030}\\x{2028}\n 0: \\x{3001}\\x{3000}\\x{2030}\\x{2028}\n    X\\x{180e}X\\x{85}\n 0: X\\x{180e}X\\x{85}\n\\= Expect no match\n    \\x{2009} X\\x0a\nNo match\n\n/\\H*\\h+\\V?\\v{3,4}/utf\n    \\x{1680}\\x{180e}\\x{2007}X\\x{2028}\\x{2029}\\x0c\\x0d\\x0a\n 0: \\x{1680}\\x{180e}\\x{2007}X\\x{2028}\\x{2029}\\x{0c}\\x{0d}\n    \\x09\\x{205f}\\x{a0}\\x0a\\x{2029}\\x0c\\x{2028}\\x0a\n 0: \\x{09}\\x{205f}\\x{a0}\\x{0a}\\x{2029}\\x{0c}\\x{2028}\n    \\x09\\x20\\x{202f}\\x0a\\x0b\\x0c\n 0: \\x{09} \\x{202f}\\x{0a}\\x{0b}\\x{0c}\n\\= Expect no match\n    \\x09\\x{200a}\\x{a0}\\x{2028}\\x0b\nNo match\n\n/[\\h]/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}]\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x{1680}\n 0: \\x{1680}\n\n/[\\h]{3,}/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}]{3,}+\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x{1680}\\x{180e}\\x{2000}\\x{2003}\\x{200a}\\x{202f}\\x{205f}\\x{3000}<\n 0: \\x{1680}\\x{180e}\\x{2000}\\x{2003}\\x{200a}\\x{202f}\\x{205f}\\x{3000}\n\n/[\\v]/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x0a-\\x0d\\x85\\x{2028}-\\x{2029}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\H]/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x08\\x0a-\\x1f!-\\x9f\\xa1-\\xff\\x{100}-\\x{167f}\\x{1681}-\\x{180d}\\x{180f}-\\x{1fff}\\x{200b}-\\x{202e}\\x{2030}-\\x{205e}\\x{2060}-\\x{2fff}\\x{3001}-\\x{10ffff}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\V]/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x09\\x0e-\\x84\\x86-\\xff\\x{100}-\\x{2027}\\x{202a}-\\x{10ffff}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/.*$/newline=any,utf\n    \\x{1ec5}\n 0: \\x{1ec5}\n\n/a\\Rb/I,bsr=anycrlf,utf\nCapture group count = 0\nOptions: utf\n\\R matches CR, LF, or CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n    a\\rb\n 0: a\\x{0d}b\n    a\\nb\n 0: a\\x{0a}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n\\= Expect no match\n    a\\x{85}b\nNo match\n    a\\x0bb\nNo match\n\n/a\\Rb/I,bsr=unicode,utf\nCapture group count = 0\nOptions: utf\n\\R matches any Unicode newline\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n    a\\rb\n 0: a\\x{0d}b\n    a\\nb\n 0: a\\x{0a}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n    a\\x{85}b\n 0: a\\x{85}b\n    a\\x0bb\n 0: a\\x{0b}b\n\n/a\\R?b/I,bsr=anycrlf,utf\nCapture group count = 0\nOptions: utf\n\\R matches CR, LF, or CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    a\\rb\n 0: a\\x{0d}b\n    a\\nb\n 0: a\\x{0a}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n\\= Expect no match\n    a\\x{85}b\nNo match\n    a\\x0bb\nNo match\n\n/a\\R?b/I,bsr=unicode,utf\nCapture group count = 0\nOptions: utf\n\\R matches any Unicode newline\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    a\\rb\n 0: a\\x{0d}b\n    a\\nb\n 0: a\\x{0a}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n    a\\x{85}b\n 0: a\\x{85}b\n    a\\x0bb\n 0: a\\x{0b}b\n\n/.*a.*=.b.*/utf,newline=any\n    QQQ\\x{2029}ABCaXYZ=!bPQR\n 0: ABCaXYZ=!bPQR\n\\= Expect no match\n    a\\x{2029}b\nNo match\n    \\x61\\xe2\\x80\\xa9\\x62\nNo match\n\n/[[:a\\x{100}b:]]/utf\nFailed: error 130 at offset 14: unknown POSIX class name\n        here: ...\\x{100}b:] |<--| ]\n\n/[\\p{InvalidOrBadProperty}]/\nFailed: error 147 at offset 25: unknown property after \\P or \\p\n        here: ...dProperty} |<--| ]\n\n/a[^]b/utf,allow_empty_class,match_unset_backref\n    a\\x{1234}b\n 0: a\\x{1234}b\n    a\\nb\n 0: a\\x{0a}b\n\\= Expect no match\n    ab\nNo match\n\n/a[^]+b/utf,allow_empty_class,match_unset_backref\n    aXb\n 0: aXb\n    a\\nX\\nX\\x{1234}b\n 0: a\\x{0a}X\\x{0a}X\\x{1234}b\n\\= Expect no match\n    ab\nNo match\n\n/(\\x{de})\\1/\n    \\x{de}\\x{de}\n 0: \\xde\\xde\n 1: \\xde\n\n/X/newline=any,utf,firstline\n    A\\x{1ec5}ABCXYZ\n 0: X\n\n/Xa{2,4}b/utf\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/Xa{2,4}?b/utf\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/Xa{2,4}+b/utf\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X\\x{123}{2,4}b/utf\n    X\\=ps\nPartial match: X\n    X\\x{123}\\=ps\nPartial match: X\\x{123}\n    X\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/X\\x{123}{2,4}?b/utf\n    X\\=ps\nPartial match: X\n    X\\x{123}\\=ps\nPartial match: X\\x{123}\n    X\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/X\\x{123}{2,4}+b/utf\n    X\\=ps\nPartial match: X\n    X\\x{123}\\=ps\nPartial match: X\\x{123}\n    X\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/X\\x{123}{2,4}b/utf\n\\= Expect no match\n    Xx\\=ps\nNo match\n    X\\x{123}x\\=ps\nNo match\n    X\\x{123}\\x{123}x\\=ps\nNo match\n    X\\x{123}\\x{123}\\x{123}x\\=ps\nNo match\n    X\\x{123}\\x{123}\\x{123}\\x{123}x\\=ps\nNo match\n\n/X\\x{123}{2,4}?b/utf\n\\= Expect no match\n    Xx\\=ps\nNo match\n    X\\x{123}x\\=ps\nNo match\n    X\\x{123}\\x{123}x\\=ps\nNo match\n    X\\x{123}\\x{123}\\x{123}x\\=ps\nNo match\n    X\\x{123}\\x{123}\\x{123}\\x{123}x\\=ps\nNo match\n\n/X\\x{123}{2,4}+b/utf\n\\= Expect no match\n    Xx\\=ps\nNo match\n    X\\x{123}x\\=ps\nNo match\n    X\\x{123}\\x{123}x\\=ps\nNo match\n    X\\x{123}\\x{123}\\x{123}x\\=ps\nNo match\n    X\\x{123}\\x{123}\\x{123}\\x{123}x\\=ps\nNo match\n\n/X\\d{2,4}b/utf\n    X\\=ps\nPartial match: X\n    X3\\=ps\nPartial match: X3\n    X33\\=ps\nPartial match: X33\n    X333\\=ps\nPartial match: X333\n    X3333\\=ps\nPartial match: X3333\n\n/X\\d{2,4}?b/utf\n    X\\=ps\nPartial match: X\n    X3\\=ps\nPartial match: X3\n    X33\\=ps\nPartial match: X33\n    X333\\=ps\nPartial match: X333\n    X3333\\=ps\nPartial match: X3333\n\n/X\\d{2,4}+b/utf\n    X\\=ps\nPartial match: X\n    X3\\=ps\nPartial match: X3\n    X33\\=ps\nPartial match: X33\n    X333\\=ps\nPartial match: X333\n    X3333\\=ps\nPartial match: X3333\n\n/X\\D{2,4}b/utf\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X\\D{2,4}?b/utf\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X\\D{2,4}+b/utf\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X\\D{2,4}b/utf\n    X\\=ps\nPartial match: X\n    X\\x{123}\\=ps\nPartial match: X\\x{123}\n    X\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/X\\D{2,4}?b/utf\n    X\\=ps\nPartial match: X\n    X\\x{123}\\=ps\nPartial match: X\\x{123}\n    X\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/X\\D{2,4}+b/utf\n    X\\=ps\nPartial match: X\n    X\\x{123}\\=ps\nPartial match: X\\x{123}\n    X\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/X[abc]{2,4}b/utf\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X[abc]{2,4}?b/utf\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X[abc]{2,4}+b/utf\n    X\\=ps\nPartial match: X\n    Xa\\=ps\nPartial match: Xa\n    Xaa\\=ps\nPartial match: Xaa\n    Xaaa\\=ps\nPartial match: Xaaa\n    Xaaaa\\=ps\nPartial match: Xaaaa\n\n/X[abc\\x{123}]{2,4}b/utf\n    X\\=ps\nPartial match: X\n    X\\x{123}\\=ps\nPartial match: X\\x{123}\n    X\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/X[abc\\x{123}]{2,4}?b/utf\n    X\\=ps\nPartial match: X\n    X\\x{123}\\=ps\nPartial match: X\\x{123}\n    X\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/X[abc\\x{123}]{2,4}+b/utf\n    X\\=ps\nPartial match: X\n    X\\x{123}\\=ps\nPartial match: X\\x{123}\n    X\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/X[^a]{2,4}b/utf\n    X\\=ps\nPartial match: X\n    Xz\\=ps\nPartial match: Xz\n    Xzz\\=ps\nPartial match: Xzz\n    Xzzz\\=ps\nPartial match: Xzzz\n    Xzzzz\\=ps\nPartial match: Xzzzz\n\n/X[^a]{2,4}?b/utf\n    X\\=ps\nPartial match: X\n    Xz\\=ps\nPartial match: Xz\n    Xzz\\=ps\nPartial match: Xzz\n    Xzzz\\=ps\nPartial match: Xzzz\n    Xzzzz\\=ps\nPartial match: Xzzzz\n\n/X[^a]{2,4}+b/utf\n    X\\=ps\nPartial match: X\n    Xz\\=ps\nPartial match: Xz\n    Xzz\\=ps\nPartial match: Xzz\n    Xzzz\\=ps\nPartial match: Xzzz\n    Xzzzz\\=ps\nPartial match: Xzzzz\n\n/X[^a]{2,4}b/utf\n    X\\=ps\nPartial match: X\n    X\\x{123}\\=ps\nPartial match: X\\x{123}\n    X\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/X[^a]{2,4}?b/utf\n    X\\=ps\nPartial match: X\n    X\\x{123}\\=ps\nPartial match: X\\x{123}\n    X\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/X[^a]{2,4}+b/utf\n    X\\=ps\nPartial match: X\n    X\\x{123}\\=ps\nPartial match: X\\x{123}\n    X\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\n    X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/(Y)X\\1{2,4}b/utf\n    YX\\=ps\nPartial match: YX\n    YXY\\=ps\nPartial match: YXY\n    YXYY\\=ps\nPartial match: YXYY\n    YXYYY\\=ps\nPartial match: YXYYY\n    YXYYYY\\=ps\nPartial match: YXYYYY\n\n/(Y)X\\1{2,4}?b/utf\n    YX\\=ps\nPartial match: YX\n    YXY\\=ps\nPartial match: YXY\n    YXYY\\=ps\nPartial match: YXYY\n    YXYYY\\=ps\nPartial match: YXYYY\n    YXYYYY\\=ps\nPartial match: YXYYYY\n\n/(Y)X\\1{2,4}+b/utf\n    YX\\=ps\nPartial match: YX\n    YXY\\=ps\nPartial match: YXY\n    YXYY\\=ps\nPartial match: YXYY\n    YXYYY\\=ps\nPartial match: YXYYY\n    YXYYYY\\=ps\nPartial match: YXYYYY\n\n/(\\x{123})X\\1{2,4}b/utf\n    \\x{123}X\\=ps\nPartial match: \\x{123}X\n    \\x{123}X\\x{123}\\=ps\nPartial match: \\x{123}X\\x{123}\n    \\x{123}X\\x{123}\\x{123}\\=ps\nPartial match: \\x{123}X\\x{123}\\x{123}\n    \\x{123}X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: \\x{123}X\\x{123}\\x{123}\\x{123}\n    \\x{123}X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: \\x{123}X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/(\\x{123})X\\1{2,4}?b/utf\n    \\x{123}X\\=ps\nPartial match: \\x{123}X\n    \\x{123}X\\x{123}\\=ps\nPartial match: \\x{123}X\\x{123}\n    \\x{123}X\\x{123}\\x{123}\\=ps\nPartial match: \\x{123}X\\x{123}\\x{123}\n    \\x{123}X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: \\x{123}X\\x{123}\\x{123}\\x{123}\n    \\x{123}X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: \\x{123}X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/(\\x{123})X\\1{2,4}+b/utf\n    \\x{123}X\\=ps\nPartial match: \\x{123}X\n    \\x{123}X\\x{123}\\=ps\nPartial match: \\x{123}X\\x{123}\n    \\x{123}X\\x{123}\\x{123}\\=ps\nPartial match: \\x{123}X\\x{123}\\x{123}\n    \\x{123}X\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: \\x{123}X\\x{123}\\x{123}\\x{123}\n    \\x{123}X\\x{123}\\x{123}\\x{123}\\x{123}\\=ps\nPartial match: \\x{123}X\\x{123}\\x{123}\\x{123}\\x{123}\n\n/\\bthe cat\\b/utf\n    the cat\\=ps\n 0: the cat\n    the cat\\=ph\nPartial match: the cat\n\n/abcd*/utf\n    xxxxabcd\\=ps\n 0: abcd\n    xxxxabcd\\=ph\nPartial match: abcd\n\n/abcd*/i,utf\n    xxxxabcd\\=ps\n 0: abcd\n    xxxxabcd\\=ph\nPartial match: abcd\n    XXXXABCD\\=ps\n 0: ABCD\n    XXXXABCD\\=ph\nPartial match: ABCD\n\n/abc\\d*/utf\n    xxxxabc1\\=ps\n 0: abc1\n    xxxxabc1\\=ph\nPartial match: abc1\n\n/(a)bc\\1*/utf\n    xxxxabca\\=ps\n 0: abca\n 1: a\n    xxxxabca\\=ph\nPartial match: abca\n\n/abc[de]*/utf\n    xxxxabcde\\=ps\n 0: abcde\n    xxxxabcde\\=ph\nPartial match: abcde\n\n/X\\W{3}X/utf\n    X\\=ps\nPartial match: X\n\n/\\sxxx\\s/utf,tables=2\n    AB\\x{85}xxx\\x{a0}XYZ\n 0: \\x{85}xxx\\x{a0}\n    AB\\x{a0}xxx\\x{85}XYZ\n 0: \\x{a0}xxx\\x{85}\n\n/\\S \\S/utf,tables=2\n    \\x{a2} \\x{84}\n 0: \\x{a2} \\x{84}\n\n'A#хц'Bx,newline=any,utf\n------------------------------------------------------------------\n        Bra\n        A\n        Ket\n        End\n------------------------------------------------------------------\n\n'A#хц\n  PQ'Bx,newline=any,utf\n------------------------------------------------------------------\n        Bra\n        APQ\n        Ket\n        End\n------------------------------------------------------------------\n\n/a+#хaa\n  z#XX?/Bx,newline=any,utf\n------------------------------------------------------------------\n        Bra\n        a++\n        z\n        Ket\n        End\n------------------------------------------------------------------\n\n/a+#хaa\n  z#х?/Bx,newline=any,utf\n------------------------------------------------------------------\n        Bra\n        a++\n        z\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\g{A}xxx#bXX(?'A'123)\r(?'A'456)/Bx,newline=any,utf\n------------------------------------------------------------------\n        Bra\n        \\g{1}\n        xxx\n        CBra 1\n        456\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\g{A}xxx#bх(?'A'123)\r(?'A'456)/Bx,newline=any,utf\n------------------------------------------------------------------\n        Bra\n        \\g{1}\n        xxx\n        CBra 1\n        456\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(\\R*)(.)/s,utf\n    \\r\\n\n 0: \\x{0d}\n 1: \n 2: \\x{0d}\n    \\r\\r\\n\\n\\r\n 0: \\x{0d}\\x{0d}\\x{0a}\\x{0a}\\x{0d}\n 1: \\x{0d}\\x{0d}\\x{0a}\\x{0a}\n 2: \\x{0d}\n    \\r\\r\\n\\n\\r\\n\n 0: \\x{0d}\\x{0d}\\x{0a}\\x{0a}\\x{0d}\n 1: \\x{0d}\\x{0d}\\x{0a}\\x{0a}\n 2: \\x{0d}\n\n/(\\R)*(.)/s,utf\n    \\r\\n\n 0: \\x{0d}\n 1: <unset>\n 2: \\x{0d}\n    \\r\\r\\n\\n\\r\n 0: \\x{0d}\\x{0d}\\x{0a}\\x{0a}\\x{0d}\n 1: \\x{0a}\n 2: \\x{0d}\n    \\r\\r\\n\\n\\r\\n\n 0: \\x{0d}\\x{0d}\\x{0a}\\x{0a}\\x{0d}\n 1: \\x{0a}\n 2: \\x{0d}\n\n/[^\\x{1234}]+/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nSubject length lower bound = 1\n\n/[^\\x{1234}]+?/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nSubject length lower bound = 1\n\n/[^\\x{1234}]++/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nSubject length lower bound = 1\n\n/[^\\x{1234}]{2}/Ii,utf\nCapture group count = 0\nOptions: caseless utf\nSubject length lower bound = 2\n\n/f.*/\n    for\\=ph\nPartial match: for\n\n/f.*/s\n    for\\=ph\nPartial match: for\n\n/f.*/utf\n    for\\=ph\nPartial match: for\n\n/f.*/s,utf\n    for\\=ph\nPartial match: for\n\n/\\x{d7ff}\\x{e000}/utf\n\n/\\x{d800}/utf\nFailed: error 173 at offset 7: disallowed Unicode code point (>= 0xd800 && <= 0xdfff)\n        here: \\x{d800 |<--| }\n\n/\\x{dfff}/utf\nFailed: error 173 at offset 7: disallowed Unicode code point (>= 0xd800 && <= 0xdfff)\n        here: \\x{dfff |<--| }\n\n/\\h+/utf\n    \\x{1681}\\x{200b}\\x{1680}\\x{2000}\\x{202f}\\x{3000}\n 0: \\x{1680}\\x{2000}\\x{202f}\\x{3000}\n    \\x{3001}\\x{2fff}\\x{200a}\\x{a0}\\x{2000}\n 0: \\x{200a}\\x{a0}\\x{2000}\n\n/[\\h\\x{e000}]+/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}\\x{e000}]++\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{1681}\\x{200b}\\x{1680}\\x{2000}\\x{202f}\\x{3000}\n 0: \\x{1680}\\x{2000}\\x{202f}\\x{3000}\n    \\x{3001}\\x{2fff}\\x{200a}\\x{a0}\\x{2000}\n 0: \\x{200a}\\x{a0}\\x{2000}\n\n/\\H+/utf\n    \\x{1680}\\x{180e}\\x{167f}\\x{1681}\\x{180d}\\x{180f}\n 0: \\x{167f}\\x{1681}\\x{180d}\\x{180f}\n    \\x{2000}\\x{200a}\\x{1fff}\\x{200b}\n 0: \\x{1fff}\\x{200b}\n    \\x{202f}\\x{205f}\\x{202e}\\x{2030}\\x{205e}\\x{2060}\n 0: \\x{202e}\\x{2030}\\x{205e}\\x{2060}\n    \\x{a0}\\x{3000}\\x{9f}\\x{a1}\\x{2fff}\\x{3001}\n 0: \\x{9f}\\x{a1}\\x{2fff}\\x{3001}\n\n/[\\H\\x{d7ff}]+/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x08\\x0a-\\x1f!-\\x9f\\xa1-\\xff\\x{100}-\\x{167f}\\x{1681}-\\x{180d}\\x{180f}-\\x{1fff}\\x{200b}-\\x{202e}\\x{2030}-\\x{205e}\\x{2060}-\\x{2fff}\\x{3001}-\\x{10ffff}]++\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{1680}\\x{180e}\\x{167f}\\x{1681}\\x{180d}\\x{180f}\n 0: \\x{167f}\\x{1681}\\x{180d}\\x{180f}\n    \\x{2000}\\x{200a}\\x{1fff}\\x{200b}\n 0: \\x{1fff}\\x{200b}\n    \\x{202f}\\x{205f}\\x{202e}\\x{2030}\\x{205e}\\x{2060}\n 0: \\x{202e}\\x{2030}\\x{205e}\\x{2060}\n    \\x{a0}\\x{3000}\\x{9f}\\x{a1}\\x{2fff}\\x{3001}\n 0: \\x{9f}\\x{a1}\\x{2fff}\\x{3001}\n\n/\\v+/utf\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n 0: \\x{2028}\\x{2029}\n    \\x09\\x0e\\x{84}\\x{86}\\x{85}\\x0a\\x0b\\x0c\\x0d\n 0: \\x{85}\\x{0a}\\x{0b}\\x{0c}\\x{0d}\n\n/[\\v\\x{e000}]+/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x0a-\\x0d\\x85\\x{2028}-\\x{2029}\\x{e000}]++\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n 0: \\x{2028}\\x{2029}\n    \\x09\\x0e\\x{84}\\x{86}\\x{85}\\x0a\\x0b\\x0c\\x0d\n 0: \\x{85}\\x{0a}\\x{0b}\\x{0c}\\x{0d}\n\n/\\V+/utf\n    \\x{2028}\\x{2029}\\x{2027}\\x{2030}\n 0: \\x{2027}\\x{2030}\n    \\x{85}\\x0a\\x0b\\x0c\\x0d\\x09\\x0e\\x{84}\\x{86}\n 0: \\x{09}\\x{0e}\\x{84}\\x{86}\n\n/[\\V\\x{d7ff}]+/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x09\\x0e-\\x84\\x86-\\xff\\x{100}-\\x{2027}\\x{202a}-\\x{10ffff}]++\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{2028}\\x{2029}\\x{2027}\\x{2030}\n 0: \\x{2027}\\x{2030}\n    \\x{85}\\x0a\\x0b\\x0c\\x0d\\x09\\x0e\\x{84}\\x{86}\n 0: \\x{09}\\x{0e}\\x{84}\\x{86}\n\n/\\R+/bsr=unicode,utf\n    \\x{2027}\\x{2030}\\x{2028}\\x{2029}\n 0: \\x{2028}\\x{2029}\n    \\x09\\x0e\\x{84}\\x{86}\\x{85}\\x0a\\x0b\\x0c\\x0d\n 0: \\x{85}\\x{0a}\\x{0b}\\x{0c}\\x{0d}\n\n/(..)\\1/utf\n    ab\\=ps\nPartial match: ab\n    aba\\=ps\nPartial match: aba\n    abab\\=ps\n 0: abab\n 1: ab\n\n/(..)\\1/i,utf\n    ab\\=ps\nPartial match: ab\n    abA\\=ps\nPartial match: abA\n    aBAb\\=ps\n 0: aBAb\n 1: aB\n\n/(..)\\1{2,}/utf\n    ab\\=ps\nPartial match: ab\n    aba\\=ps\nPartial match: aba\n    abab\\=ps\nPartial match: abab\n    ababa\\=ps\nPartial match: ababa\n    ababab\\=ps\n 0: ababab\n 1: ab\n    ababab\\=ph\nPartial match: ababab\n    abababa\\=ps\n 0: ababab\n 1: ab\n    abababa\\=ph\nPartial match: abababa\n\n/(..)\\1{2,}/i,utf\n    ab\\=ps\nPartial match: ab\n    aBa\\=ps\nPartial match: aBa\n    aBAb\\=ps\nPartial match: aBAb\n    AbaBA\\=ps\nPartial match: AbaBA\n    abABAb\\=ps\n 0: abABAb\n 1: ab\n    aBAbaB\\=ph\nPartial match: aBAbaB\n    abABabA\\=ps\n 0: abABab\n 1: ab\n    abaBABa\\=ph\nPartial match: abaBABa\n\n/(..)\\1{2,}?x/i,utf\n    ab\\=ps\nPartial match: ab\n    abA\\=ps\nPartial match: abA\n    aBAb\\=ps\nPartial match: aBAb\n    abaBA\\=ps\nPartial match: abaBA\n    abAbaB\\=ps\nPartial match: abAbaB\n    abaBabA\\=ps\nPartial match: abaBabA\n    abAbABaBx\\=ps\n 0: abAbABaBx\n 1: ab\n\n/./utf,newline=crlf\n    \\r\\=ps\n 0: \\x{0d}\n    \\r\\=ph\nPartial match: \\x{0d}\n\n/.{2,3}/utf,newline=crlf\n    \\r\\=ps\nPartial match: \\x{0d}\n    \\r\\=ph\nPartial match: \\x{0d}\n    \\r\\r\\=ps\n 0: \\x{0d}\\x{0d}\n    \\r\\r\\=ph\nPartial match: \\x{0d}\\x{0d}\n    \\r\\r\\r\\=ps\n 0: \\x{0d}\\x{0d}\\x{0d}\n    \\r\\r\\r\\=ph\nPartial match: \\x{0d}\\x{0d}\\x{0d}\n\n/.{2,3}?/utf,newline=crlf\n    \\r\\=ps\nPartial match: \\x{0d}\n    \\r\\=ph\nPartial match: \\x{0d}\n    \\r\\r\\=ps\n 0: \\x{0d}\\x{0d}\n    \\r\\r\\=ph\nPartial match: \\x{0d}\\x{0d}\n    \\r\\r\\r\\=ps\n 0: \\x{0d}\\x{0d}\n    \\r\\r\\r\\=ph\n 0: \\x{0d}\\x{0d}\n\n/[^\\x{100}][^\\x{1234}][^\\x{ffff}][^\\x{10000}][^\\x{10ffff}]/B,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x{100}] (not)\n        [^\\x{1234}] (not)\n        [^\\x{ffff}] (not)\n        [^\\x{10000}] (not)\n        [^\\x{10ffff}] (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\x{100}][^\\x{1234}][^\\x{ffff}][^\\x{10000}][^\\x{10ffff}]/Bi,utf\n------------------------------------------------------------------\n        Bra\n     /i [^\\x{100}] (not)\n     /i [^\\x{1234}] (not)\n     /i [^\\x{ffff}] (not)\n     /i [^\\x{10000}] (not)\n     /i [^\\x{10ffff}] (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\x{100}]*[^\\x{10000}]+[^\\x{10ffff}]??[^\\x{8000}]{4,}[^\\x{7fff}]{2,9}?[^\\x{fffff}]{5,6}+/B,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x{100}]* (not)\n        [^\\x{10000}]+ (not)\n        [^\\x{10ffff}]?? (not)\n        [^\\x{8000}]{4} (not)\n        [^\\x{8000}]* (not)\n        [^\\x{7fff}]{2} (not)\n        [^\\x{7fff}]{0,7}? (not)\n        [^\\x{fffff}]{5} (not)\n        [^\\x{fffff}]?+ (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\x{100}]*[^\\x{10000}]+[^\\x{10ffff}]??[^\\x{8000}]{4,}[^\\x{7fff}]{2,9}?[^\\x{fffff}]{5,6}+/Bi,utf\n------------------------------------------------------------------\n        Bra\n     /i [^\\x{100}]* (not)\n     /i [^\\x{10000}]+ (not)\n     /i [^\\x{10ffff}]?? (not)\n     /i [^\\x{8000}]{4} (not)\n     /i [^\\x{8000}]* (not)\n     /i [^\\x{7fff}]{2} (not)\n     /i [^\\x{7fff}]{0,7}? (not)\n     /i [^\\x{fffff}]{5} (not)\n     /i [^\\x{fffff}]?+ (not)\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?<=\\x{1234}\\x{1234})\\bxy/I,utf\nCapture group count = 0\nMax lookbehind = 2\nOptions: utf\nFirst code unit = 'x'\nLast code unit = 'y'\nSubject length lower bound = 2\n\n/(?<!^)ETA/utf\n\\= Expect no match\n    ETA\nNo match\n\n/\\u0100/B,utf,alt_bsux,allow_empty_class,match_unset_backref\n------------------------------------------------------------------\n        Bra\n        \\x{100}\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\u0100-\\u0200]/B,utf,alt_bsux,allow_empty_class,match_unset_backref\n------------------------------------------------------------------\n        Bra\n        [\\x{100}-\\x{200}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\ud800/utf,alt_bsux,allow_empty_class,match_unset_backref\nFailed: error 173 at offset 6: disallowed Unicode code point (>= 0xd800 && <= 0xdfff)\n        here: \\ud800 |<--|\n\n/^\\u{0000000000010ffff}/utf,extra_alt_bsux\n    \\x{10ffff}\n 0: \\x{10ffff}\n\n/\\u{ 1bb1}/utf,extra_alt_bsux\n    u{ 1bb1}\n 0: u{ 1bb1}\n\\= Expect no match\n    \\x{1bb1}\nNo match\n\n/\\u/utf,alt_bsux\n    \\\\u\n 0: u\n\n/^a+[a\\x{200}]/B,utf\n------------------------------------------------------------------\n        Bra\n        ^\n        a+\n        [a\\x{200}]\n        Ket\n        End\n------------------------------------------------------------------\n    aa\n 0: aa\n\n/[b-d\\x{200}-\\x{250}]*[ae-h]?#[\\x{200}-\\x{250}]{0,8}[\\x00-\\xff]*#[\\x{200}-\\x{250}]+[a-z]/B,utf\n------------------------------------------------------------------\n        Bra\n        [b-d\\x{200}-\\x{250}]*+\n        [ae-h]?+\n        #\n        [\\x{200}-\\x{250}]{0,8}+\n        [\\x00-\\xff]*\n        #\n        [\\x{200}-\\x{250}]++\n        [a-z]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\p{L}]/IB\n------------------------------------------------------------------\n        Bra\n        [\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nSubject length lower bound = 1\n\n/[\\p{^L}]/IB\n------------------------------------------------------------------\n        Bra\n        [\\P{L}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nSubject length lower bound = 1\n\n/[\\P{L}]/IB\n------------------------------------------------------------------\n        Bra\n        [\\P{L}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nSubject length lower bound = 1\n\n/[\\P{^L}]/IB\n------------------------------------------------------------------\n        Bra\n        [\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nSubject length lower bound = 1\n\n/[abc\\p{L}\\x{0660}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}\\x{660}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nSubject length lower bound = 1\n\n/[\\p{Nd}]/IB,utf\n------------------------------------------------------------------\n        Bra\n        [\\p{Nd}]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nSubject length lower bound = 1\n    1234\n 0: 1\n\n/[\\p{Nd}+-]+/IB,utf\n------------------------------------------------------------------\n        Bra\n        [+\\-0-9\\p{Nd}]++\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nSubject length lower bound = 1\n    1234\n 0: 1234\n    12-34\n 0: 12-34\n    12+\\x{661}-34\n 0: 12+\\x{661}-34\n\\= Expect no match\n    abcd\nNo match\n\n/(?:[\\PPa*]*){8,}/\n\n/[\\P{Any}]/B\n------------------------------------------------------------------\n        Bra\n        []\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\P{Any}\\P{Any}]/B\n------------------------------------------------------------------\n        Bra\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\P{Any}\\E]/B\n------------------------------------------------------------------\n        Bra\n        []\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Any}#\\P{Any}![\\p{Any}]:[\\P{Any}]@[\\p{Any}a-z]%[\\P{Any}c]/B,utf\n------------------------------------------------------------------\n        Bra\n        AllAny\n        #\n        []\n        !\n        AllAny\n        :\n        []\n        @\n        AllAny\n        %\n        [c]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\P{Any}\\P{Any}\\P{Any}]![\\p{Any}\\p{Any}\\p{Any}]:[^\\P{Any}\\P{Any}]@[^\\p{Any}\\p{Any}]%[^\\p{Any}\\P{Any}]/B,utf\n------------------------------------------------------------------\n        Bra\n        []\n        !\n        AllAny\n        :\n        AllAny\n        @\n        []\n        %\n        []\n        Ket\n        End\n------------------------------------------------------------------\n\n/(\\P{Yi}+\\277)/\n\n/(\\P{Yi}+\\277)?/\n\n/(?<=\\P{Yi}{3}A)X/\n\n/\\p{Yi}+(\\P{Yi}+)(?1)/\n\n/(\\P{Yi}{2}\\277)?/\n\n/[\\P{Yi}A]/\n\n/[\\P{Yi}\\P{Yi}\\P{Yi}A]/\n\n/[^\\P{Yi}A]/\n\n/[^\\P{Yi}\\P{Yi}\\P{Yi}A]/\n\n/(\\P{Yi}*\\277)*/\n\n/(\\P{Yi}*?\\277)*/\n\n/(\\p{Yi}*+\\277)*/\n\n/(\\P{Yi}?\\277)*/\n\n/(\\P{Yi}??\\277)*/\n\n/(\\p{Yi}?+\\277)*/\n\n/(\\P{Yi}{0,3}\\277)*/\n\n/(\\P{Yi}{0,3}?\\277)*/\n\n/(\\p{Yi}{0,3}+\\277)*/\n\n/\\p{Zl}{2,3}+/B,utf\n------------------------------------------------------------------\n        Bra\n        prop Zl {2}\n        prop Zl ?+\n        Ket\n        End\n------------------------------------------------------------------\n      \n 0: \\x{2028}\\x{2028}\n    \\x{2028}\\x{2028}\\x{2028}\n 0: \\x{2028}\\x{2028}\\x{2028}\n\n/\\p{Zl}/B,utf\n------------------------------------------------------------------\n        Bra\n        prop Zl\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Lu}{3}+/B,utf\n------------------------------------------------------------------\n        Bra\n        prop Lu {3}\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\pL{2}+/B,utf\n------------------------------------------------------------------\n        Bra\n        prop L {2}\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Cc}{2}+/B,utf\n------------------------------------------------------------------\n        Bra\n        prop Cc {2}\n        Ket\n        End\n------------------------------------------------------------------\n\n/^\\p{Cf}/utf\n    \\x{180e}\n 0: \\x{180e}\n    \\x{061c}\n 0: \\x{61c}\n    \\x{2066}\n 0: \\x{2066}\n    \\x{2067}\n 0: \\x{2067}\n    \\x{2068}\n 0: \\x{2068}\n    \\x{2069}\n 0: \\x{2069}\n\n/^\\p{Cs}/utf\n    \\x{dfff}\\=no_utf_check\n 0: \\x{dfff}\n\\= Expect no match\n    \\x{09f}\nNo match\n\n/^\\p{Mn}/utf\n    \\x{1a1b}\n 0: \\x{1a1b}\n\n/^\\p{Pe}/utf\n    \\x{2309}\n 0: \\x{2309}\n    \\x{230b}\n 0: \\x{230b}\n\n/^\\p{Ps}/utf\n    \\x{2308}\n 0: \\x{2308}\n    \\x{230a}\n 0: \\x{230a}\n\n/^\\p{Sc}+/utf\n    $\\x{a2}\\x{a3}\\x{a4}\\x{a5}\\x{a6}\n 0: $\\x{a2}\\x{a3}\\x{a4}\\x{a5}\n    \\x{9f2}\n 0: \\x{9f2}\n\\= Expect no match\n    X\nNo match\n    \\x{2c2}\nNo match\n\n/^\\p{Zs}/utf\n    \\ \\\n 0:  \n    \\x{a0}\n 0: \\x{a0}\n    \\x{1680}\n 0: \\x{1680}\n    \\x{2000}\n 0: \\x{2000}\n    \\x{2001}\n 0: \\x{2001}\n\\= Expect no match\n    \\x{2028}\nNo match\n    \\x{200d}\nNo match\n\n/[\\x{c0}\\x{391}]/i,utf\n    \\x{c0}\n 0: \\x{c0}\n    \\x{e0}\n 0: \\x{e0}\n\n# The next two are special cases where the lengths of the different cases of\n# the same character differ. The first went wrong with heap frame storage; the\n# second was broken in all cases.\n\n/^\\x{023a}+?(\\x{0130}+)/i,utf\n  \\x{023a}\\x{2c65}\\x{0130}\n 0: \\x{23a}\\x{2c65}\\x{130}\n 1: \\x{130}\n\n/^\\x{023a}+([^X])/i,utf\n  \\x{023a}\\x{2c65}X\n 0: \\x{23a}\\x{2c65}\n 1: \\x{2c65}\n\n/\\x{c0}+\\x{116}+/i,utf\n    \\x{c0}\\x{e0}\\x{116}\\x{117}\n 0: \\x{c0}\\x{e0}\\x{116}\\x{117}\n\n/[\\x{c0}\\x{116}]+/i,utf\n    \\x{c0}\\x{e0}\\x{116}\\x{117}\n 0: \\x{c0}\\x{e0}\\x{116}\\x{117}\n\n/(\\x{de})\\1/i,utf\n    \\x{de}\\x{de}\n 0: \\x{de}\\x{de}\n 1: \\x{de}\n    \\x{de}\\x{fe}\n 0: \\x{de}\\x{fe}\n 1: \\x{de}\n    \\x{fe}\\x{fe}\n 0: \\x{fe}\\x{fe}\n 1: \\x{fe}\n    \\x{fe}\\x{de}\n 0: \\x{fe}\\x{de}\n 1: \\x{fe}\n\n/^\\x{c0}$/i,utf\n    \\x{c0}\n 0: \\x{c0}\n    \\x{e0}\n 0: \\x{e0}\n\n/^\\x{e0}$/i,utf\n    \\x{c0}\n 0: \\x{c0}\n    \\x{e0}\n 0: \\x{e0}\n\n# The next two should be Perl-compatible, but it fails to match \\x{e0}. PCRE\n# will match it only with UCP support, because without that it has no notion\n# of case for anything other than the ASCII letters.\n\n/((?i)[\\x{c0}])/utf\n    \\x{c0}\n 0: \\x{c0}\n 1: \\x{c0}\n    \\x{e0}\n 0: \\x{e0}\n 1: \\x{e0}\n\n/(?i:[\\x{c0}])/utf\n    \\x{c0}\n 0: \\x{c0}\n    \\x{e0}\n 0: \\x{e0}\n\n# These are PCRE's extra properties to help with Unicodizing \\d etc.\n\n/^\\p{Xan}/utf\n    ABCD\n 0: A\n    1234\n 0: 1\n    \\x{6ca}\n 0: \\x{6ca}\n    \\x{a6c}\n 0: \\x{a6c}\n    \\x{10a7}\n 0: \\x{10a7}\n\\= Expect no match\n    _ABC\nNo match\n\n/^\\p{Xan}+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}\n\\= Expect no match\n    _ABC\nNo match\n\n/^\\p{Xan}+?/utf\n    \\x{6ca}\\x{a6c}\\x{10a7}_\n 0: \\x{6ca}\n\n/^\\p{Xan}*/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}\n\n/^\\p{Xan}{2,9}/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\n\n/^\\p{Xan}{2,9}?/utf\n    \\x{6ca}\\x{a6c}\\x{10a7}_\n 0: \\x{6ca}\\x{a6c}\n\n/^[\\p{Xan}]/utf\n    ABCD1234_\n 0: A\n    1234abcd_\n 0: 1\n    \\x{6ca}\n 0: \\x{6ca}\n    \\x{a6c}\n 0: \\x{a6c}\n    \\x{10a7}\n 0: \\x{10a7}\n\\= Expect no match\n    _ABC\nNo match\n\n/^[\\p{Xan}]+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}\n\\= Expect no match\n    _ABC\nNo match\n\n/^>\\p{Xsp}/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n 0: >\\x{1680}\n    >\\x{a0}\n 0: >\\x{a0}\n\\= Expect no match\n    \\x{0b}\nNo match\n\n/^>\\p{Xsp}+/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xsp}+?/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n 0: >\\x{1680}\n\n/^>\\p{Xsp}*/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xsp}{2,9}/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xsp}{2,9}?/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\n\n/^>[\\p{Xsp}]/utf\n    >\\x{2028}\\x{0b}\n 0: >\\x{2028}\n\n/^>[\\p{Xsp}]+/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n 0: >\\x{1680}\n    >\\x{a0}\n 0: >\\x{a0}\n\\= Expect no match\n    \\x{0b}\nNo match\n\n/^>\\p{Xps}+/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}+?/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n 0: >\\x{1680}\n\n/^>\\p{Xps}*/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}{2,9}/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}{2,9}?/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\n\n/^>[\\p{Xps}]/utf\n    >\\x{2028}\\x{0b}\n 0: >\\x{2028}\n\n/^>[\\p{Xps}]+/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^\\p{Xwd}/utf\n    ABCD\n 0: A\n    1234\n 0: 1\n    \\x{6ca}\n 0: \\x{6ca}\n    \\x{a6c}\n 0: \\x{a6c}\n    \\x{10a7}\n 0: \\x{10a7}\n    _ABC\n 0: _\n\\= Expect no match\n    []\nNo match\n\n/^\\p{Xwd}+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\n/^\\p{Xwd}+?/utf\n    \\x{6ca}\\x{a6c}\\x{10a7}_\n 0: \\x{6ca}\n\n/^\\p{Xwd}*/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\n/^\\p{Xwd}{2,9}/utf\n    A_B12\\x{6ca}\\x{a6c}\\x{10a7}\n 0: A_B12\\x{6ca}\\x{a6c}\\x{10a7}\n\n/^\\p{Xwd}{2,9}?/utf\n    \\x{6ca}\\x{a6c}\\x{10a7}_\n 0: \\x{6ca}\\x{a6c}\n\n/^[\\p{Xwd}]/utf\n    ABCD1234_\n 0: A\n    1234abcd_\n 0: 1\n    \\x{6ca}\n 0: \\x{6ca}\n    \\x{a6c}\n 0: \\x{a6c}\n    \\x{10a7}\n 0: \\x{10a7}\n    _ABC\n 0: _\n\\= Expect no match\n    []\nNo match\n\n/^[\\p{Xwd}]+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\n# A check not in UTF-8 mode\n\n/^[\\p{Xwd}]+/\n    ABCD1234_\n 0: ABCD1234_\n\n# Some negative checks\n\n/^[\\P{Xwd}]+/utf\n    !.+\\x{019}\\x{482}AB\n 0: !.+\\x{19}\\x{482}\n\n/^[\\p{^Xwd}]+/utf\n    !.+\\x{019}\\x{589}AB\n 0: !.+\\x{19}\\x{589}\n\n/[\\D]/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [\\P{Nd}]\n        Ket\n        End\n------------------------------------------------------------------\n    1\\x{3c8}2\n 0: \\x{3c8}\n\n/[\\d]/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{Nd}]\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x{6f4}<\n 0: \\x{6f4}\n\n/[\\S]/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [\\P{Xsp}]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{1680}\\x{6f4}\\x{1680}\n 0: \\x{6f4}\n\n/[\\s]/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{Xsp}]\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x{1680}<\n 0: \\x{1680}\n\n/[\\W]/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [\\P{Xwd}]\n        Ket\n        End\n------------------------------------------------------------------\n    A\\x{1735}B\n 0: \\x{1735}\n\n/[\\w]/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{Xwd}]\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x{1723}<\n 0: \\x{1723}\n\n/\\D/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        notprop Nd\n        Ket\n        End\n------------------------------------------------------------------\n    1\\x{3c8}2\n 0: \\x{3c8}\n\n/\\d/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        prop Nd\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x{6f4}<\n 0: \\x{6f4}\n\n/\\S/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        notprop Xsp\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{1680}\\x{6f4}\\x{1680}\n 0: \\x{6f4}\n\n/\\s/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xsp\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x{1680}>\n 0: \\x{1680}\n\n/\\W/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        notprop Xwd\n        Ket\n        End\n------------------------------------------------------------------\n    A\\x{1735}B\n 0: \\x{1735}\n\n/\\w/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xwd\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x{1723}<\n 0: \\x{1723}\n\n/[[:alpha:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:lower:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{Ll}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:upper:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{Lu}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:alnum:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{Xan}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:ascii:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x7f]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:cntrl:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{Cc}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:digit:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{Nd}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:digit:]]/B,ucp,ascii_digit\n------------------------------------------------------------------\n        Bra\n        [0-9]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:graph:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [[:graph:]]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:print:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [[:print:]]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:punct:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [[:punct:]]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:space:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{Xps}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:word:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{Xwd}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:xdigit:]]/B,ucp\n------------------------------------------------------------------\n        Bra\n        [[:xdigit:]]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:xdigit:]]/B,ucp,ascii_digit\n------------------------------------------------------------------\n        Bra\n        [0-9A-Fa-f]\n        Ket\n        End\n------------------------------------------------------------------\n\n# Unicode properties for \\b and \\B\n\n/\\b...\\B/utf,ucp\n    abc_\n 0: abc\n    \\x{37e}abc\\x{376}\n 0: abc\n    \\x{37e}\\x{376}\\x{371}\\x{393}\\x{394}\n 0: \\x{376}\\x{371}\\x{393}\n    !\\x{c0}++\\x{c1}\\x{c2}\n 0: ++\\x{c1}\n    !\\x{c0}+++++\n 0: \\x{c0}++\n\n# Without PCRE_UCP, non-ASCII always fail, even if < 256\n\n/\\b...\\B/utf\n    abc_\n 0: abc\n\\= Expect no match\n    \\x{37e}abc\\x{376}\nNo match\n    \\x{37e}\\x{376}\\x{371}\\x{393}\\x{394}\nNo match\n    !\\x{c0}++\\x{c1}\\x{c2}\nNo match\n    !\\x{c0}+++++\nNo match\n\n# With PCRE_UCP, non-UTF8 chars that are < 256 still check properties\n\n/\\b...\\B/ucp\n    abc_\n 0: abc\n    !\\x{c0}++\\x{c1}\\x{c2}\n 0: ++\\xc1\n    !\\x{c0}+++++\n 0: \\xc0++\n\n# Some of these are silly, but they check various combinations\n\n/[[:^alpha:][:^cntrl:]]+/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [\\P{L}\\P{Cc}]++\n        Ket\n        End\n------------------------------------------------------------------\n    123\n 0: 123\n    abc\n 0: abc\n\n/[[:^cntrl:][:^alpha:]]+/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [\\P{Cc}\\P{L}]++\n        Ket\n        End\n------------------------------------------------------------------\n    123\n 0: 123\n    abc\n 0: abc\n\n/[[:alpha:]]+/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{L}]++\n        Ket\n        End\n------------------------------------------------------------------\n    abc\n 0: abc\n\n/[[:^alpha:]\\S]+/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [\\P{L}\\P{Xsp}]++\n        Ket\n        End\n------------------------------------------------------------------\n    123\n 0: 123\n    abc\n 0: abc\n\n/[^\\d]+/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [^\\p{Nd}]++\n        Ket\n        End\n------------------------------------------------------------------\n    abc123\n 0: abc\n    abc\\x{123}\n 0: abc\\x{123}\n    \\x{660}abc\n 0: abc\n\n/\\p{Lu}+9\\p{Lu}+B\\p{Lu}+b/B\n------------------------------------------------------------------\n        Bra\n        prop Lu ++\n        9\n        prop Lu +\n        B\n        prop Lu ++\n        b\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{^Lu}+9\\p{^Lu}+B\\p{^Lu}+b/B\n------------------------------------------------------------------\n        Bra\n        notprop Lu +\n        9\n        notprop Lu ++\n        B\n        notprop Lu +\n        b\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\P{Lu}+9\\P{Lu}+B\\P{Lu}+b/B\n------------------------------------------------------------------\n        Bra\n        notprop Lu +\n        9\n        notprop Lu ++\n        B\n        notprop Lu +\n        b\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Han}+X\\p{Greek}+\\x{370}/B,utf\n------------------------------------------------------------------\n        Bra\n        prop Han ++\n        X\n        prop Greek +\n        \\x{370}\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Xan}+!\\p{Xan}+A/B\n------------------------------------------------------------------\n        Bra\n        prop Xan ++\n        !\n        prop Xan +\n        A\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Xsp}+!\\p{Xsp}\\t/B\n------------------------------------------------------------------\n        Bra\n        prop Xsp ++\n        !\n        prop Xsp\n        \\x09\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Xps}+!\\p{Xps}\\t/B\n------------------------------------------------------------------\n        Bra\n        prop Xps ++\n        !\n        prop Xps\n        \\x09\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Xwd}+!\\p{Xwd}_/B\n------------------------------------------------------------------\n        Bra\n        prop Xwd ++\n        !\n        prop Xwd\n        _\n        Ket\n        End\n------------------------------------------------------------------\n\n/A+\\p{N}A+\\dB+\\p{N}*B+\\d*/B,ucp\n------------------------------------------------------------------\n        Bra\n        A++\n        prop N\n        A++\n        prop Nd\n        B+\n        prop N *+\n        B++\n        prop Nd *+\n        Ket\n        End\n------------------------------------------------------------------\n\n# These behaved oddly in Perl, so they are kept in this test\n\n/(\\x{23a}\\x{23a}\\x{23a})?\\1/i,utf\n\\= Expect no match\n    \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\nNo match\n\n/(ȺȺȺ)?\\1/i,utf\n\\= Expect no match\n    ȺȺȺⱥⱥ\nNo match\n\n/(\\x{23a}\\x{23a}\\x{23a})?\\1/i,utf\n    \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n 0: \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n 1: \\x{23a}\\x{23a}\\x{23a}\n\n/(ȺȺȺ)?\\1/i,utf\n    ȺȺȺⱥⱥⱥ\n 0: \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n 1: \\x{23a}\\x{23a}\\x{23a}\n\n/(\\x{23a}\\x{23a}\\x{23a})\\1/i,utf\n\\= Expect no match\n    \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\nNo match\n\n/(ȺȺȺ)\\1/i,utf\n\\= Expect no match\n    ȺȺȺⱥⱥ\nNo match\n\n/(\\x{23a}\\x{23a}\\x{23a})\\1/i,utf\n    \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n 0: \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n 1: \\x{23a}\\x{23a}\\x{23a}\n\n/(ȺȺȺ)\\1/i,utf\n    ȺȺȺⱥⱥⱥ\n 0: \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}\n 1: \\x{23a}\\x{23a}\\x{23a}\n\n/(\\x{2c65}\\x{2c65})\\1/i,utf\n    \\x{2c65}\\x{2c65}\\x{23a}\\x{23a}\n 0: \\x{2c65}\\x{2c65}\\x{23a}\\x{23a}\n 1: \\x{2c65}\\x{2c65}\n\n/(ⱥⱥ)\\1/i,utf\n    ⱥⱥȺȺ\n 0: \\x{2c65}\\x{2c65}\\x{23a}\\x{23a}\n 1: \\x{2c65}\\x{2c65}\n\n/(\\x{23a}\\x{23a}\\x{23a})\\1Y/i,utf\n    X\\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}YZ\n 0: \\x{23a}\\x{23a}\\x{23a}\\x{2c65}\\x{2c65}\\x{2c65}Y\n 1: \\x{23a}\\x{23a}\\x{23a}\n\n/(\\x{2c65}\\x{2c65})\\1Y/i,utf\n    X\\x{2c65}\\x{2c65}\\x{23a}\\x{23a}YZ\n 0: \\x{2c65}\\x{2c65}\\x{23a}\\x{23a}Y\n 1: \\x{2c65}\\x{2c65}\n\n# These scripts weren't yet in Perl when I added Unicode 6.0.0 to PCRE\n\n/^[\\p{Batak}]/utf\n    \\x{1bc0}\n 0: \\x{1bc0}\n    \\x{1bff}\n 0: \\x{1bff}\n\\= Expect no match\n    \\x{1bf4}\nNo match\n\n/^[\\p{Brahmi}]/utf\n    \\x{11000}\n 0: \\x{11000}\n    \\x{1106f}\n 0: \\x{1106f}\n\\= Expect no match\n    \\x{1104e}\nNo match\n\n/^[\\p{Mandaic}]/utf\n    \\x{840}\n 0: \\x{840}\n    \\x{85e}\n 0: \\x{85e}\n\\= Expect no match\n    \\x{85c}\nNo match\n    \\x{85d}\nNo match\n\n/(\\X*)(.)/s,utf\n    A\\x{300}\n 0: A\n 1: \n 2: A\n\n/^S(\\X*)e(\\X*)$/utf\n    Stéréo\n 0: Ste\\x{301}re\\x{301}o\n 1: te\\x{301}r\n 2: \\x{301}o\n\n/^\\X/utf\n    ́réo\n 0: \\x{301}\n\n/^a\\X41z/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aX41z\n 0: aX41z\n\\= Expect no match\n    aAz\nNo match\n\n/\\X/\n    a\\=ps\n 0: a\n    a\\=ph\nPartial match: a\n\n/\\Xa/\n    aa\\=ps\n 0: aa\n    aa\\=ph\n 0: aa\n\n/\\X{2}/\n    aa\\=ps\n 0: aa\n    aa\\=ph\nPartial match: aa\n\n/\\X+a/\n    a\\=ps\nPartial match: a\n    aa\\=ps\n 0: aa\n    aa\\=ph\nPartial match: aa\n\n/\\X+?a/\n    a\\=ps\nPartial match: a\n    ab\\=ps\nPartial match: ab\n    aa\\=ps\n 0: aa\n    aa\\=ph\n 0: aa\n    aba\\=ps\n 0: aba\n\n# These Unicode 6.1.0 scripts are not known to Perl.\n\n/\\p{Chakma}\\d/utf,ucp\n    \\x{11100}\\x{1113c}\n 0: \\x{11100}\\x{1113c}\n\n/\\p{Takri}\\d/utf,ucp\n    \\x{11680}\\x{116c0}\n 0: \\x{11680}\\x{116c0}\n\n/^\\X/utf\n    A\\=ps\n 0: A\n    A\\=ph\nPartial match: A\n    A\\x{300}\\x{301}\\=ps\n 0: A\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\=ph\nPartial match: A\\x{300}\\x{301}\n    A\\x{301}\\=ps\n 0: A\\x{301}\n    A\\x{301}\\=ph\nPartial match: A\\x{301}\n\n/^\\X{2,3}/utf\n    A\\=ps\nPartial match: A\n    A\\=ph\nPartial match: A\n    AA\\=ps\n 0: AA\n    AA\\=ph\nPartial match: AA\n    A\\x{300}\\x{301}\\=ps\nPartial match: A\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\=ph\nPartial match: A\\x{300}\\x{301}\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ps\n 0: A\\x{300}\\x{301}A\\x{300}\\x{301}\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ph\nPartial match: A\\x{300}\\x{301}A\\x{300}\\x{301}\n\n/^\\X{2}/utf\n    AA\\=ps\n 0: AA\n    AA\\=ph\nPartial match: AA\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ps\n 0: A\\x{300}\\x{301}A\\x{300}\\x{301}\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ph\nPartial match: A\\x{300}\\x{301}A\\x{300}\\x{301}\n\n/^\\X+/utf\n    AA\\=ps\n 0: AA\n    AA\\=ph\nPartial match: AA\n\n/^\\X+?Z/utf\n    AA\\=ps\nPartial match: AA\n    AA\\=ph\nPartial match: AA\n\n/A\\x{3a3}B/IBi,utf\n------------------------------------------------------------------\n        Bra\n     /i A\n        clist 03a3 03c2 03c3\n     /i B\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: caseless utf\nFirst code unit = 'A' (caseless)\nLast code unit = 'B' (caseless)\nSubject length lower bound = 3\n\n/[\\x{3a3}]/Bi,utf\n------------------------------------------------------------------\n        Bra\n        clist 03a3 03c2 03c3\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\x{3a3}]/Bi,utf\n------------------------------------------------------------------\n        Bra\n        not clist 03a3 03c2 03c3\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x{3a3}]+/Bi,utf\n------------------------------------------------------------------\n        Bra\n        clist 03a3 03c2 03c3 ++\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\x{3a3}]+/Bi,utf\n------------------------------------------------------------------\n        Bra\n        not clist 03a3 03c2 03c3 ++\n        Ket\n        End\n------------------------------------------------------------------\n\n/a*\\x{3a3}/Bi,utf\n------------------------------------------------------------------\n        Bra\n     /i a*+\n        clist 03a3 03c2 03c3\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\x{3a3}+a/Bi,utf\n------------------------------------------------------------------\n        Bra\n        clist 03a3 03c2 03c3 ++\n     /i a\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\x{3a3}*\\x{3c2}/Bi,utf\n------------------------------------------------------------------\n        Bra\n        clist 03a3 03c2 03c3 *\n        clist 03a3 03c2 03c3\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\x{3a3}{3}/i,utf,aftertext\n    \\x{3a3}\\x{3c3}\\x{3c2}\\x{3a3}\\x{3c3}\\x{3c2}\n 0: \\x{3a3}\\x{3c3}\\x{3c2}\n 0+ \\x{3a3}\\x{3c3}\\x{3c2}\n\n/\\x{3a3}{2,4}/i,utf,aftertext\n    \\x{3a3}\\x{3c3}\\x{3c2}\\x{3a3}\\x{3c3}\\x{3c2}\n 0: \\x{3a3}\\x{3c3}\\x{3c2}\\x{3a3}\n 0+ \\x{3c3}\\x{3c2}\n\n/\\x{3a3}{2,4}?/i,utf,aftertext\n    \\x{3a3}\\x{3c3}\\x{3c2}\\x{3a3}\\x{3c3}\\x{3c2}\n 0: \\x{3a3}\\x{3c3}\n 0+ \\x{3c2}\\x{3a3}\\x{3c3}\\x{3c2}\n\n/\\x{3a3}+./i,utf,aftertext\n    \\x{3a3}\\x{3c3}\\x{3c2}\\x{3a3}\\x{3c3}\\x{3c2}\n 0: \\x{3a3}\\x{3c3}\\x{3c2}\\x{3a3}\\x{3c3}\\x{3c2}\n 0+ \n\n/\\x{3a3}++./i,utf,aftertext\n\\= Expect no match\n    \\x{3a3}\\x{3c3}\\x{3c2}\\x{3a3}\\x{3c3}\\x{3c2}\nNo match\n\n/\\x{3a3}*\\x{3c2}/Bi,utf\n------------------------------------------------------------------\n        Bra\n        clist 03a3 03c2 03c3 *\n        clist 03a3 03c2 03c3\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\x{3a3}]*\\x{3c2}/Bi,utf\n------------------------------------------------------------------\n        Bra\n        not clist 03a3 03c2 03c3 *+\n        clist 03a3 03c2 03c3\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^a]*\\x{3c2}/Bi,utf\n------------------------------------------------------------------\n        Bra\n     /i [^a]* (not)\n        clist 03a3 03c2 03c3\n        Ket\n        End\n------------------------------------------------------------------\n\n/ist/Bi,utf\n------------------------------------------------------------------\n        Bra\n     /i i\n        clist 0053 0073 017f\n     /i t\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    ikt\nNo match\n\n/is+t/i,utf\n    iSs\\x{17f}t\n 0: iSs\\x{17f}t\n\\= Expect no match\n    ikt\nNo match\n\n/is+?t/i,utf\n\\= Expect no match\n    ikt\nNo match\n\n/is?t/i,utf\n\\= Expect no match\n    ikt\nNo match\n\n/is{2}t/i,utf\n\\= Expect no match\n    iskt\nNo match\n\n# This property is a PCRE special\n\n/^\\p{Xuc}/utf\n    $abc\n 0: $\n    @abc\n 0: @\n    `abc\n 0: `\n    \\x{1234}abc\n 0: \\x{1234}\n\\= Expect no match\n    abc\nNo match\n\n/^\\p{Xuc}+/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\\x{a0}\\x{1234}\\x{e000}\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^\\p{Xuc}+?/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^\\p{Xuc}+?\\*/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\\x{a0}\\x{1234}\\x{e000}*\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^\\p{Xuc}++/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\\x{a0}\\x{1234}\\x{e000}\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^\\p{Xuc}{3,5}/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\\x{a0}\\x{1234}\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^\\p{Xuc}{3,5}?/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^[\\p{Xuc}]/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^[\\p{Xuc}]+/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\\x{a0}\\x{1234}\\x{e000}\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^\\P{Xuc}/utf\n    abc\n 0: a\n\\= Expect no match\n    $abc\nNo match\n    @abc\nNo match\n    `abc\nNo match\n    \\x{1234}abc\nNo match\n\n/^[\\P{Xuc}]/utf\n    abc\n 0: a\n\\= Expect no match\n    $abc\nNo match\n    @abc\nNo match\n    `abc\nNo match\n    \\x{1234}abc\nNo match\n\n# Some auto-possessification tests\n\n/\\pN+\\z/B\n------------------------------------------------------------------\n        Bra\n        prop N ++\n        \\z\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\PN+\\z/B\n------------------------------------------------------------------\n        Bra\n        notprop N ++\n        \\z\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\pN+/B\n------------------------------------------------------------------\n        Bra\n        prop N ++\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\PN+/B\n------------------------------------------------------------------\n        Bra\n        notprop N ++\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Any}+\\p{Any} \\p{Any}+\\P{Any} \\p{Any}+\\p{L&} \\p{Any}+\\p{L} \\p{Any}+\\p{Lu} \\p{Any}+\\p{Han} \\p{Any}+\\p{Xan} \\p{Any}+\\p{Xsp} \\p{Any}+\\p{Xps} \\p{Xwd}+\\p{Any} \\p{Any}+\\p{Xuc}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        AllAny+\n        AllAny\n        AllAny+\n        []\n        AllAny+\n        prop Lc\n        AllAny+\n        prop L\n        AllAny+\n        prop Lu\n        AllAny+\n        prop Han\n        AllAny+\n        prop Xan\n        AllAny+\n        prop Xsp\n        AllAny+\n        prop Xps\n        prop Xwd +\n        AllAny\n        AllAny+\n        prop Xuc\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{L&}+\\p{Any} \\p{L&}+\\p{L&} \\P{L&}+\\p{L&} \\p{L&}+\\p{L} \\p{L&}+\\p{Lu} \\p{L&}+\\p{Han} \\p{L&}+\\p{Xan} \\p{L&}+\\P{Xan} \\p{L&}+\\p{Xsp} \\p{L&}+\\p{Xps} \\p{Xwd}+\\p{L&} \\p{L&}+\\p{Xuc}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Lc +\n        AllAny\n        prop Lc +\n        prop Lc\n        notprop Lc ++\n        prop Lc\n        prop Lc +\n        prop L\n        prop Lc +\n        prop Lu\n        prop Lc +\n        prop Han\n        prop Lc +\n        prop Xan\n        prop Lc ++\n        notprop Xan\n        prop Lc ++\n        prop Xsp\n        prop Lc ++\n        prop Xps\n        prop Xwd +\n        prop Lc\n        prop Lc +\n        prop Xuc\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{N}+\\p{Any} \\p{N}+\\p{L&} \\p{N}+\\p{L} \\p{N}+\\P{L} \\p{N}+\\P{N} \\p{N}+\\p{Lu} \\p{N}+\\p{Han} \\p{N}+\\p{Xan} \\p{N}+\\p{Xsp} \\p{N}+\\p{Xps} \\p{Xwd}+\\p{N} \\p{N}+\\p{Xuc}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop N +\n        AllAny\n        prop N +\n        prop Lc\n        prop N ++\n        prop L\n        prop N +\n        notprop L\n        prop N ++\n        notprop N\n        prop N ++\n        prop Lu\n        prop N +\n        prop Han\n        prop N +\n        prop Xan\n        prop N ++\n        prop Xsp\n        prop N ++\n        prop Xps\n        prop Xwd +\n        prop N\n        prop N +\n        prop Xuc\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Lu}+\\p{Any} \\p{Lu}+\\p{L&} \\p{Lu}+\\p{L} \\p{Lu}+\\p{Lu} \\P{Lu}+\\p{Lu} \\p{Lu}+\\p{Nd} \\p{Lu}+\\P{Nd} \\p{Lu}+\\p{Han} \\p{Lu}+\\p{Xan} \\p{Lu}+\\p{Xsp} \\p{Lu}+\\p{Xps} \\p{Xwd}+\\p{Lu} \\p{Lu}+\\p{Xuc}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Lu +\n        AllAny\n        prop Lu +\n        prop Lc\n        prop Lu +\n        prop L\n        prop Lu +\n        prop Lu\n        notprop Lu ++\n        prop Lu\n        prop Lu ++\n        prop Nd\n        prop Lu +\n        notprop Nd\n        prop Lu +\n        prop Han\n        prop Lu +\n        prop Xan\n        prop Lu ++\n        prop Xsp\n        prop Lu ++\n        prop Xps\n        prop Xwd +\n        prop Lu\n        prop Lu +\n        prop Xuc\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Han}+\\p{Lu} \\p{Han}+\\p{L&} \\p{Han}+\\p{L} \\p{Han}+\\p{Lu} \\p{Han}+\\p{Arabic} \\p{Arabic}+\\p{Arabic} \\p{Han}+\\p{Xan} \\p{Han}+\\p{Xsp} \\p{Han}+\\p{Xps} \\p{Xwd}+\\p{Han} \\p{Han}+\\p{Xuc}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Han +\n        prop Lu\n        prop Han +\n        prop Lc\n        prop Han +\n        prop L\n        prop Han +\n        prop Lu\n        prop Han ++\n        prop Arabic\n        prop Arabic +\n        prop Arabic\n        prop Han +\n        prop Xan\n        prop Han +\n        prop Xsp\n        prop Han +\n        prop Xps\n        prop Xwd +\n        prop Han\n        prop Han +\n        prop Xuc\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Xan}+\\p{Any} \\p{Xan}+\\p{L&} \\P{Xan}+\\p{L&} \\p{Xan}+\\p{L} \\p{Xan}+\\p{Lu} \\p{Xan}+\\p{Han} \\p{Xan}+\\p{Xan} \\p{Xan}+\\P{Xan} \\p{Xan}+\\p{Xsp} \\p{Xan}+\\p{Xps} \\p{Xwd}+\\p{Xan} \\p{Xan}+\\p{Xuc}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xan +\n        AllAny\n        prop Xan +\n        prop Lc\n        notprop Xan ++\n        prop Lc\n        prop Xan +\n        prop L\n        prop Xan +\n        prop Lu\n        prop Xan +\n        prop Han\n        prop Xan +\n        prop Xan\n        prop Xan ++\n        notprop Xan\n        prop Xan ++\n        prop Xsp\n        prop Xan ++\n        prop Xps\n        prop Xwd +\n        prop Xan\n        prop Xan +\n        prop Xuc\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Xsp}+\\p{Any} \\p{Xsp}+\\p{L&} \\p{Xsp}+\\p{L} \\p{Xsp}+\\p{Lu} \\p{Xsp}+\\p{Han} \\p{Xsp}+\\p{Xan} \\p{Xsp}+\\p{Xsp} \\P{Xsp}+\\p{Xsp} \\p{Xsp}+\\p{Xps} \\p{Xwd}+\\p{Xsp} \\p{Xsp}+\\p{Xuc}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xsp +\n        AllAny\n        prop Xsp ++\n        prop Lc\n        prop Xsp ++\n        prop L\n        prop Xsp ++\n        prop Lu\n        prop Xsp +\n        prop Han\n        prop Xsp ++\n        prop Xan\n        prop Xsp +\n        prop Xsp\n        notprop Xsp ++\n        prop Xsp\n        prop Xsp +\n        prop Xps\n        prop Xwd ++\n        prop Xsp\n        prop Xsp +\n        prop Xuc\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Xwd}+\\p{Any} \\p{Xwd}+\\p{L&} \\p{Xwd}+\\p{L} \\p{Xwd}+\\p{Lu} \\p{Xwd}+\\p{Han} \\p{Xwd}+\\p{Xan} \\p{Xwd}+\\p{Xsp} \\p{Xwd}+\\p{Xps} \\p{Xwd}+\\p{Xwd} \\p{Xwd}+\\P{Xwd} \\p{Xwd}+\\p{Xuc}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xwd +\n        AllAny\n        prop Xwd +\n        prop Lc\n        prop Xwd +\n        prop L\n        prop Xwd +\n        prop Lu\n        prop Xwd +\n        prop Han\n        prop Xwd +\n        prop Xan\n        prop Xwd ++\n        prop Xsp\n        prop Xwd ++\n        prop Xps\n        prop Xwd +\n        prop Xwd\n        prop Xwd ++\n        notprop Xwd\n        prop Xwd +\n        prop Xuc\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Xuc}+\\p{Any} \\p{Xuc}+\\p{L&} \\p{Xuc}+\\p{L} \\p{Xuc}+\\p{Lu} \\p{Xuc}+\\p{Han} \\p{Xuc}+\\p{Xan} \\p{Xuc}+\\p{Xsp} \\p{Xuc}+\\p{Xps} \\p{Xwd}+\\p{Xuc} \\p{Xuc}+\\p{Xuc} \\p{Xuc}+\\P{Xuc}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xuc +\n        AllAny\n        prop Xuc +\n        prop Lc\n        prop Xuc +\n        prop L\n        prop Xuc +\n        prop Lu\n        prop Xuc +\n        prop Han\n        prop Xuc +\n        prop Xan\n        prop Xuc +\n        prop Xsp\n        prop Xuc +\n        prop Xps\n        prop Xwd +\n        prop Xuc\n        prop Xuc +\n        prop Xuc\n        prop Xuc ++\n        notprop Xuc\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{N}+\\p{Ll} \\p{N}+\\p{Nd} \\p{N}+\\P{Nd}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop N ++\n        prop Ll\n        prop N +\n        prop Nd\n        prop N +\n        notprop Nd\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Xan}+\\p{L} \\p{Xan}+\\p{N} \\p{Xan}+\\p{C} \\p{Xan}+\\P{L} \\P{Xan}+\\p{N} \\p{Xan}+\\P{C}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xan +\n        prop L\n        prop Xan +\n        prop N\n        prop Xan ++\n        prop C\n        prop Xan +\n        notprop L\n        notprop Xan ++\n        prop N\n        prop Xan +\n        notprop C\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{L}+\\p{Xan} \\p{N}+\\p{Xan} \\p{C}+\\p{Xan} \\P{L}+\\p{Xan} \\p{N}+\\p{Xan} \\P{C}+\\p{Xan} \\p{L}+\\P{Xan}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop L +\n        prop Xan\n        prop N +\n        prop Xan\n        prop C ++\n        prop Xan\n        notprop L +\n        prop Xan\n        prop N +\n        prop Xan\n        notprop C +\n        prop Xan\n        prop L ++\n        notprop Xan\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Xan}+\\p{Lu} \\p{Xan}+\\p{Nd} \\p{Xan}+\\p{Cc} \\p{Xan}+\\P{Ll} \\P{Xan}+\\p{No} \\p{Xan}+\\P{Cf}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xan +\n        prop Lu\n        prop Xan +\n        prop Nd\n        prop Xan ++\n        prop Cc\n        prop Xan +\n        notprop Ll\n        notprop Xan ++\n        prop No\n        prop Xan +\n        notprop Cf\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Lu}+\\p{Xan} \\p{Nd}+\\p{Xan} \\p{Cs}+\\p{Xan} \\P{Lt}+\\p{Xan} \\p{Nl}+\\p{Xan} \\P{Cc}+\\p{Xan} \\p{Lt}+\\P{Xan}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Lu +\n        prop Xan\n        prop Nd +\n        prop Xan\n        prop Cs ++\n        prop Xan\n        notprop Lt +\n        prop Xan\n        prop Nl +\n        prop Xan\n        notprop Cc +\n        prop Xan\n        prop Lt ++\n        notprop Xan\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w+\\p{P} \\w+\\p{Po} \\w+\\s \\p{Xan}+\\s \\s+\\p{Xan} \\s+\\w/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xwd +\n        prop P\n        prop Xwd +\n        prop Po\n        prop Xwd ++\n        prop Xsp\n        prop Xan ++\n        prop Xsp\n        prop Xsp ++\n        prop Xan\n        prop Xsp ++\n        prop Xwd\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w+\\P{P} \\W+\\p{Po} \\w+\\S \\P{Xan}+\\s \\s+\\P{Xan} \\s+\\W/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xwd +\n        notprop P\n        notprop Xwd +\n        prop Po\n        prop Xwd +\n        notprop Xsp\n        notprop Xan +\n        prop Xsp\n        prop Xsp +\n        notprop Xan\n        prop Xsp +\n        notprop Xwd\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\w+\\p{Po} \\w+\\p{Pc} \\W+\\p{Po} \\W+\\p{Pc} \\w+\\P{Po} \\w+\\P{Pc}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xwd +\n        prop Po\n        prop Xwd ++\n        prop Pc\n        notprop Xwd +\n        prop Po\n        notprop Xwd +\n        prop Pc\n        prop Xwd +\n        notprop Po\n        prop Xwd +\n        notprop Pc\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Nl}+\\p{Xan} \\P{Nl}+\\p{Xan} \\p{Nl}+\\P{Xan} \\P{Nl}+\\P{Xan}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Nl +\n        prop Xan\n        notprop Nl +\n        prop Xan\n        prop Nl ++\n        notprop Xan\n        notprop Nl +\n        notprop Xan\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Xan}+\\p{Nl} \\P{Xan}+\\p{Nl} \\p{Xan}+\\P{Nl} \\P{Xan}+\\P{Nl}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xan +\n        prop Nl\n        notprop Xan ++\n        prop Nl\n        prop Xan +\n        notprop Nl\n        notprop Xan +\n        notprop Nl\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{Xan}+\\p{Nd} \\P{Xan}+\\p{Nd} \\p{Xan}+\\P{Nd} \\P{Xan}+\\P{Nd}/Bx,ucp\n------------------------------------------------------------------\n        Bra\n        prop Xan +\n        prop Nd\n        notprop Xan ++\n        prop Nd\n        prop Xan +\n        notprop Nd\n        notprop Xan +\n        notprop Nd\n        Ket\n        End\n------------------------------------------------------------------\n\n# End auto-possessification tests\n\n/\\w+/B,utf,ucp,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 3\n        prop Xwd ++\n        Callout 255 3 0\n        Ket\n        End\n------------------------------------------------------------------\n    abcd\n--->abcd\n +0 ^        \\w+\n +3 ^   ^    End of pattern\n 0: abcd\n\n/[\\p{N}]?+/B,no_auto_possess\n------------------------------------------------------------------\n        Bra\n        [\\p{N}]?+\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\p{L}ab]{2,3}+/B,no_auto_possess\n------------------------------------------------------------------\n        Bra\n        [A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}]{2,3}+\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\D+\\X \\d+\\X \\S+\\X \\s+\\X \\W+\\X \\w+\\X \\R+\\X \\H+\\X \\h+\\X \\V+\\X \\v+\\X a+\\X \\n+\\X .+\\X/Bx\n------------------------------------------------------------------\n        Bra\n        \\D+\n        extuni\n        \\d+\n        extuni\n        \\S+\n        extuni\n        \\s+\n        extuni\n        \\W+\n        extuni\n        \\w+\n        extuni\n        \\R+\n        extuni\n        \\H+\n        extuni\n        \\h+\n        extuni\n        \\V+\n        extuni\n        \\v+\n        extuni\n        a+\n        extuni\n        \\x0a+\n        extuni\n        Any+\n        extuni\n        Ket\n        End\n------------------------------------------------------------------\n\n/.+\\X/Bsx\n------------------------------------------------------------------\n        Bra\n        AllAny+\n        extuni\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\X+$/Bmx\n------------------------------------------------------------------\n        Bra\n        extuni+\n     /m $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\X+\\D \\X+\\d \\X+\\S \\X+\\s \\X+\\W \\X+\\w \\X+. \\X+\\R \\X+\\H \\X+\\h \\X+\\V \\X+\\v \\X+\\X \\X+\\Z \\X+\\z \\X+$/Bx\n------------------------------------------------------------------\n        Bra\n        extuni+\n        \\D\n        extuni+\n        \\d\n        extuni+\n        \\S\n        extuni+\n        \\s\n        extuni+\n        \\W\n        extuni+\n        \\w\n        extuni+\n        Any\n        extuni+\n        \\R\n        extuni+\n        \\H\n        extuni+\n        \\h\n        extuni+\n        \\V\n        extuni+\n        \\v\n        extuni+\n        extuni\n        extuni+\n        \\Z\n        extuni++\n        \\z\n        extuni+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\d+\\s{0,5}=\\s*\\S?=\\w{0,4}\\W*/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        prop Nd ++\n        prop Xsp {0,5}+\n        =\n        prop Xsp *+\n        notprop Xsp ?\n        =\n        prop Xwd {0,4}+\n        notprop Xwd *+\n        Ket\n        End\n------------------------------------------------------------------\n\n/[RST]+/Bi,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [R-Tr-t\\x{17f}]++\n        Ket\n        End\n------------------------------------------------------------------\n\n/[R-T]+/Bi,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [R-Tr-t\\x{17f}]++\n        Ket\n        End\n------------------------------------------------------------------\n\n/[Q-U]+/Bi,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [Q-Uq-u\\x{17f}]++\n        Ket\n        End\n------------------------------------------------------------------\n\n/^s?c/Iim,utf\nCapture group count = 0\nOptions: caseless multiline utf\nFirst code unit at start or follows newline\nLast code unit = 'c' (caseless)\nSubject length lower bound = 1\n    scat\n 0: sc\n\n/\\X?abc/utf,no_start_optimize\n    \\xff\\x7f\\x00\\x00\\x03\\x00\\x41\\xcc\\x80\\x41\\x{300}\\x61\\x62\\x63\\x00\\=no_utf_check,offset=06\n 0: A\\x{300}abc\n\n/\\x{100}\\x{200}\\K\\x{300}/utf,startchar\n    \\x{100}\\x{200}\\x{300}\n 0: \\x{100}\\x{200}\\x{300}\n    ^^^^^^^^^^^^^^\n\n# Test UTF characters in a substitution\n\n/ábc/utf,replace=XሴZ\n    123ábc123\n 1: 123X\\x{1234}Z123\n\n/(?<=abc)(|def)/g,utf,replace=<$0>\n    123abcáyzabcdef789abcሴqr\n 4: 123abc<>\\x{e1}yzabc<><def>789abc<>\\x{1234}qr\n\n/[A-`]/iB,utf\n------------------------------------------------------------------\n        Bra\n        [A-z\\x{17f}\\x{212a}]\n        Ket\n        End\n------------------------------------------------------------------\n    abcdefghijklmno\n 0: a\n\n/(?<=\\K\\x{17f})/g,utf,aftertext,allow_lookaround_bsk\n    \\x{17f}\\x{17f}\\x{17f}\\x{17f}\\x{17f}\n 0: \\x{17f}\n 0+ \\x{17f}\\x{17f}\\x{17f}\\x{17f}\nglobal repeat returned the same match as previous\n 0: \\x{17f}\n 0+ \\x{17f}\\x{17f}\\x{17f}\n 0: \\x{17f}\n 0+ \\x{17f}\\x{17f}\n 0: \\x{17f}\n 0+ \\x{17f}\n 0: \\x{17f}\n 0+ \n\n/(?<=\\K\\x{17f})/altglobal,utf,aftertext,allow_lookaround_bsk\n    \\x{17f}\\x{17f}\\x{17f}\\x{17f}\\x{17f}\n 0: \\x{17f}\n 0+ \\x{17f}\\x{17f}\\x{17f}\\x{17f}\n 0: \\x{17f}\n 0+ \\x{17f}\\x{17f}\\x{17f}\n 0: \\x{17f}\n 0+ \\x{17f}\\x{17f}\n 0: \\x{17f}\n 0+ \\x{17f}\n 0: \\x{17f}\n 0+ \n\n\"\\xa\\xf<(.\\pZ*\\P{Xwd}+^\\xa8\\3'3yq.::?(?J:()\\xd1+!~:3'(8?:)':(?'d'(?'d'^u]!.+.+\\\\A\\Ah(n+?9){7}+\\K;(?'X'u'(?'c'(?'z'(?<y>\\xb::\\xf0'|\\xd3(\\xae?'w(z\\x8?P>l)\\x8?P>a)'\\H\\R\\xd1+!!~:3'(?:h$N{26875}\\W+?\\\\=D{2}\\x89(?i:Uy0\\N({2\\xa(\\v\\x85*){y*\\A(()\\p{L}+?\\P{^Xan}'+?\\xff\\+pS\\?|).{;y*\\A(()\\p{L}+?\\8}\\d?1(|)(/1){7}.+[Lp{Me}].\\s\\xdcC*?(?(<y>))(?<!^)$C((;*?(R))+(\\xbf(R))\\x8a\\X*?\\x8a\\xb\\xd1^9\\3*+(\\xc1,\\k'R'\\xb4)\\xcc(z\\z(?J)(?'X'\\x1b(\\xb\\xd1^9\\?'3*+P{^Xan}+?\\xff\\+(\\xc1.]k+\\xb'Pm'\\xb4)\\xcc4f\\xa7'\\xd1V(?i:U,{2,2})'(?'X'))?-%--\\x95$9*\\4'|\\xd1(\\x9c''%\\x94$9)#(?'R')3\\x7?('P\\xed7'\\xa8\\xb1^u\\xeaw\\1\\0\\0\\(|(?1){7}.+[\\p{Me}].\\s\\xdcC*^\\x14?(?(<y>))(?<!^)$C((;*?(R*?))+(?(R)\\x8a\\X*?\\x8a\\xb\\xd1^9\\3*+|(\\xc1,\\k'R'\\xb4)\\xcc! z)\\z(?JJ)(?'X';(\\xb\\xd1^9\\?'3*+(\\xc1.]k+\\xb'Pm'\\xb4))':(?'d')(?'RD'(d')|)|$)'|(?<x>\\g{d});\\g{x}\\x11\\g{d}\\x81\\|$((?'X'\\'X'(?'W''\\x92()'9'\\x83*))\\xba*\\!?^ <){)':;\\xcc4'\\xd1'(?'X'28))?-%--\\x95$9*\\4'|\\xd1((''e\\x94*$9:)*#(?'R')3)\\x7?('P\\xed')\\\\x16:;()\\x1e\\x10*:(?<y>)\\xd1+0!~:(?)'d'E:yD!\\s(?'R'\\x1e;\\x10:U))|'\\x9g!\\xb0*){)\\\\x16:;()\\x1e\\x10\\x87*:(?<y>)\\xd1+!~:(?)'}'\\d'E:yD!\\s(?'R'\\x1e;\\x10:U))|'))|)g!\\xb0*R+9{29+)#(?'P'})*?pS\\{3,}\\x85,{0,}l{*UTF)(\\xe{7}){3722,{9,}d{2,?|))|{)\\(A?&d}}{\\xa,}2}){3,}7,l{)22}(,}l:7{2,4}}29\\x19+)#?'P'})*v?))\\x5\"\nFailed: error 122 at offset 1228: unmatched closing parenthesis\n        here: ...?'P'})*v?) |<--| )\\x5\n\n/$(&.+[\\p{Me}].\\s\\xdcC*?(?(<y>))(?<!^)$C((;*?(R))+(?(R)){0,6}?|){12\\x8a\\X*?\\x8a\\x0b\\xd1^9\\3*+(\\xc1,\\k'P'\\xb4)\\xcc(z\\z(?JJ)(?'X'8};(\\x0b\\xd1^9\\?'3*+(\\xc1.]k+\\x0b'Pm'\\xb4\\xcc4'\\xd1'(?'X'))?-%--\\x95$9*\\4'|\\xd1(''%\\x95*$9)#(?'R')3\\x07?('P\\xed')\\\\x16:;()\\x1e\\x10*:(?<y>)\\xd1+!~:(?)''(d'E:yD!\\s(?'R'\\x1e;\\x10:U))|')g!\\xb0*){29+))#(?'P'})*?/\n\n\"(*UTF)(*UCP)(.UTF).+X(\\V+;\\^(\\D|)!999}(?(?C{7(?C')\\H*\\S*/^\\x5\\xa\\\\xd3\\x85n?(;\\D*(?m).[^mH+((*UCP)(*U:F)})(?!^)(?'\"\nFailed: error 162 at offset 113: subpattern name expected\n        here: ...})(?!^)(?' |<--|\n\n/(?(?C'')\\Qé/utf\nFailed: error 128 at offset 8: atomic assertion expected after (?( or (?(?C)\n        here: (?(?C'') |<--| \\Qé\n\n/(?(?C'')é/utf\nFailed: error 128 at offset 8: atomic assertion expected after (?( or (?(?C)\n        here: (?(?C'') |<--| é\n\n/[\\pS#moq]/\n    =\n 0: =\n\n/(*:a\\x{12345}b\\t(d\\)c)xxx/utf,alt_verbnames,mark\n    cxxxz\n 0: xxx\nMK: a\\x{12345}b\\x{09}(d)c\n\n/abcd/utf,replace=x\\x{824}y\\o{3333}z(\\Q12\\$34$$\\x34\\E5$$),substitute_extended\n    abcd\n 1: x\\x{824}y\\x{6db}z(12\\$34$$\\x345$)\n\n/a(\\x{e0}\\x{101})(\\x{c0}\\x{102})/utf,replace=a\\u$1\\U$1\\E$1\\l$2\\L$2\\Eab\\U\\x{e0}\\x{101}\\L\\x{d0}\\x{160}\\EDone,substitute_extended\n    a\\x{e0}\\x{101}\\x{c0}\\x{102}\n 1: a\\x{c0}\\x{101}\\x{c0}\\x{100}\\x{e0}\\x{101}\\x{e0}\\x{102}\\x{e0}\\x{103}ab\\x{c0}\\x{100}\\x{f0}\\x{161}Done\n\n/((?<digit>\\d)|(?<letter>\\p{L}))/g,substitute_extended,replace=<${digit:+digit; :not digit; }${letter:+letter:not a letter}>\n    ab12cde\n 7: <not digit; letter><not digit; letter><digit; not a letter><digit; not a letter><not digit; letter><not digit; letter><not digit; letter>\n\n/(*UCP)(*UTF)[[:>:]]X/B\n------------------------------------------------------------------\n        Bra\n        \\b (ucp)\n        Assert back\n      1 Reverse\n        prop Xwd\n        Ket\n        X\n        Ket\n        End\n------------------------------------------------------------------\n\n/abc/utf,replace=xyz\n    abc\\=zero_terminate\n 1: xyz\n\n/a[[:punct:]b]/ucp,bincode\n------------------------------------------------------------------\n        Bra\n        a\n        [!-/:-@[-`b{-~\\xa1\\xa7\\xab\\xb6\\xb7\\xbb\\xbf[:punct:]]\n        Ket\n        End\n------------------------------------------------------------------\n\n/a[[:punct:]b]/utf,ucp,bincode\n------------------------------------------------------------------\n        Bra\n        a\n        [!-/:-@[-`b{-~\\xa1\\xa7\\xab\\xb6\\xb7\\xbb\\xbf[:punct:]]\n        Ket\n        End\n------------------------------------------------------------------\n\n/a[b[:punct:]]/utf,ucp,bincode\n------------------------------------------------------------------\n        Bra\n        a\n        [!-/:-@[-`b{-~\\xa1\\xa7\\xab\\xb6\\xb7\\xbb\\xbf[:punct:]]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:^ascii:]]/utf,ucp,bincode\n------------------------------------------------------------------\n        Bra\n        [^\\x00-\\x7f]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[[:^ascii:]\\w]/utf,ucp,bincode\n------------------------------------------------------------------\n        Bra\n        [^\\x00-/:-@[-^`{-\\x7f]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\w[:^ascii:]]/utf,ucp,bincode\n------------------------------------------------------------------\n        Bra\n        [^\\x00-/:-@[-^`{-\\x7f]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^[:ascii:]\\W]/utf,ucp,bincode\n------------------------------------------------------------------\n        Bra\n        [^\\x00-\\xa9\\xab-\\xb1\\xb4\\xb6-\\xb8\\xbb\\xbf\\xd7\\xf7\\P{Xwd}]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{de}\n 0: \\x{de}\n    \\x{200}\n 0: \\x{200}\n\\= Expect no match\n    \\x{589}\nNo match\n    \\x{37e}\nNo match\n\n/[[:^ascii:]a]/utf,ucp,bincode\n------------------------------------------------------------------\n        Bra\n        [^\\x00-`b-\\x7f]\n        Ket\n        End\n------------------------------------------------------------------\n\n/L(?#(|++<!(2)?/B,utf,no_auto_possess,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 14\n        L?\n        Callout 255 14 0\n        Ket\n        End\n------------------------------------------------------------------\n\n/L(?#(|++<!(2)?/B,utf,ucp,auto_callout\n------------------------------------------------------------------\n        Bra\n        Callout 255 0 14\n        L?+\n        Callout 255 14 0\n        Ket\n        End\n------------------------------------------------------------------\n\n/(*UTF)C\\x09((?<!'(?x)!*H? #\\xcc\\x9a[^$]/\nFailed: error 114 at offset 39: missing closing parenthesis\n        here: ...cc\\x9a[^$] |<--|\n\n/[\\D]/utf\n    \\x{1d7cf}\n 0: \\x{1d7cf}\n\n/[\\D\\P{Nd}]/utf\n    \\x{1d7cf}\n 0: \\x{1d7cf}\n\n/[^\\D]/utf\n    a9b\n 0: 9\n\\= Expect no match\n    \\x{1d7cf}\nNo match\n\n/[^\\D\\P{Nd}]/utf\n    a9b\n 0: 9\n\\= Expect no match\n    \\x{1d7cf}\nNo match\n    \\x{10000}\nNo match\n\n# Hex uses pattern length, not zero-terminated. This tests for overrunning\n# the given length of a pattern.\n\n/'(*UTF)'/hex\n\n/'#('/hex,extended,utf\n\n/a(?<=A\\XB)/utf\nFailed: error 125 at offset 1: length of lookbehind assertion is not limited\n        here: a |-->| (?<=A\\XB)\n\n/../utf,auto_callout\n    \\n\\x{123}\\x{123}\\x{123}\\x{123}\n--->\\x{0a}\\x{123}\\x{123}\\x{123}\\x{123}\n +0 ^                                      .\n +0       ^                                .\n +1       ^      ^                         .\n +2       ^             ^                  End of pattern\n 0: \\x{123}\\x{123}\n\n# This tests processing wide characters in extended mode.\n\n/XȀ/x,utf\n\n# These three test a bug fix that was not clearing up after a locale setting\n# when the test or a subsequent one matched a wide character.\n\n//locale=C\n\n/[\\P{Yi}]/utf\n\\x{2f000}\n 0: \\x{2f000}\n\n/[\\P{Yi}]/utf,locale=C\n\\x{2f000}\n 0: \\x{2f000}\n\n/^(?<!(?=􃡜))/B,utf\n------------------------------------------------------------------\n        Bra\n        ^\n        Assert back not\n        Assert\n        \\x{10385c}\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n# Horizontal and vertical space lists ignore caseless\n\n/[\\HH]/Bi,utf\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x08\\x0a-\\x1f!-\\x9f\\xa1-\\xff\\x{100}-\\x{167f}\\x{1681}-\\x{180d}\\x{180f}-\\x{1fff}\\x{200b}-\\x{202e}\\x{2030}-\\x{205e}\\x{2060}-\\x{2fff}\\x{3001}-\\x{10ffff}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\HH]/Bi,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x00-\\x08\\x0a-\\x1f!-\\x9f\\xa1-\\xff\\x{100}-\\x{167f}\\x{1681}-\\x{180d}\\x{180f}-\\x{1fff}\\x{200b}-\\x{202e}\\x{2030}-\\x{205e}\\x{2060}-\\x{2fff}\\x{3001}-\\x{10ffff}]\n        Ket\n        End\n------------------------------------------------------------------\n\n//g,utf\n    \\=zero_terminate\n 0: \n\n/^(?1)\\p{Nd}{3}(a)/\n    a123a\n 0: a123a\n 1: a\n\n/\\p{Nd}{0,3}[\\pL](*:abc)(?C1)xxx/callout_info\nCallout 1  x\n\n# ---------------------------------------------------------------------------\n\n# A bunch of tests that hit lines of code that others do not (at least when\n# these were created).\n\n/^[^a]{3,}?x/i,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    bbb\nNo match\n    cc\nNo match\n\n/^[ac]{3,}?x/i,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    aaa\\x{100}\nNo match\n\n/^X\\X/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\p{L&}+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\p{L}+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\p{Lu}+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\p{Arabic}+?/no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\p{Xan}+?/ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\s+?/ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n    XX\nNo match\n\n/^X\\S+?/ucp,no_start_optimize,no_auto_possess\n    XX\n 0: XX\n\\= Expect no match\n    X\nNo match\n\n/^X\\w+?/ucp,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X[^\\x{b5}]+?/i,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X[\\x{b5}]+?/i,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\p{Xuc}+?/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X.+?Z/s,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\R+?/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\H+?/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\V+?/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\s+?/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n    XX\nNo match\n\n/^X\\S+?/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n\n/^X\\p{Any}{1,3}?Z/s,no_start_optimize,no_auto_possess\n    XYYYZ\n 0: XYYYZ\n\\= Expect no match\n    XY\nNo match\n    XYY\nNo match\n    XYYY\nNo match\n    XYYYYZ\nNo match\n\n/^X\\p{L&}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\nNo match\n    XY!\nNo match\n\n/^X\\p{L}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\nNo match\n    XY!\nNo match\n\n/^X\\p{Lu}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\nNo match\n    XY!\nNo match\n\n/^X\\P{Han}{1,3}?Z/s,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\nNo match\n    XY!\nNo match\n    XY\\x{2f00}!\nNo match\n\n/^X\\p{Xan}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\nNo match\n    XY!\nNo match\n\n/^X\\p{Xsp}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\n\nNo match\n    X\\n!\nNo match\n    X\\n\\n! \nNo match\n\n/^X\\P{Xsp}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XYY\\n\nNo match\n\n/^X\\p{Xwd}{1,3}?Z/s,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\nNo match\n    XY!\nNo match\n    XYY! \nNo match\n\n/^X\\x{b5}+?Z/i,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n    X\\x{b5} \nNo match\n    X\\x{b5}\\x{b5}Y \nNo match\n\n/^X\\p{Xuc}+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n    X$\nNo match\n    X@@Y  \nNo match\n\n/(*CRLF)^X.+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect partial match\n    XYY\\r\\=ph \nPartial match: XYY\\x{0d}\n\\= Expect no match\n    X\nNo match\n\n/^X.+?Z/s,utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\nNo match\n    XYY \nNo match\n\n/^X\\R+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\nX\nNo match\n    X\\n\\rX\nNo match\n    X\\n\\r\\nX\nNo match\n    X\\n\\n\nNo match\n    X\\n\\x{0c}    \nNo match\n\n/(*BSR_ANYCRLF)^X\\R+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\nX\nNo match\n    X\\n\\rX\nNo match\n    X\\n\\r\\nX\nNo match\n    X\\n\\n\nNo match\n    X\\n\\x{0c}    \nNo match\n\n/^X\\H+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\t\nNo match\n    XYY \nNo match\n\n/^X\\h+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\t\\t\nNo match\n    X\\tY\nNo match\n\n/^X\\V+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\n\nNo match\n    XYY \nNo match\n\n/^X\\v+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\n\\n\nNo match\n    X\\nY\nNo match\n\n/^X\\D+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY9\nNo match\n    XYY \nNo match\n\n/^X\\d+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X99\nNo match\n    X9Y\nNo match\n\n/^X\\S+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\\n\nNo match\n    XYY \nNo match\n\n/^X\\s+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X\\n\\n\nNo match\n    X\\nY\nNo match\n\n/^X\\W+?Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X.A\nNo match\n    X++ \nNo match\n\n/^X\\p{L&}{1,3}Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\nNo match\n    XY!\nNo match\n\n/^X\\p{L}{1,3}Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\nNo match\n\n/^X\\p{Xan}{1,3}Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XY\nNo match\n\n/^X\\P{Xsp}{1,3}Z/no_start_optimize,no_auto_possess\n\\= Expect no match\n    XYY\nNo match\n\n/^X\\p{Xuc}+Z/utf,no_start_optimize,no_auto_possess\n\\= Expect no match\n    X$\nNo match\n\n# ----------------------------------------------------------------------\n# These test the dangerous PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL option.\n\n/\\x{d800}/B,utf,bad_escape_is_literal\n------------------------------------------------------------------\n        Bra\n        x{d800}\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\ud800/B,utf,alt_bsux,bad_escape_is_literal\n------------------------------------------------------------------\n        Bra\n        ud800\n        Ket\n        End\n------------------------------------------------------------------\n\n# ----------------------------------------------------------------------\n\n/Aሴ+B/literal,utf,no_utf_check\n    Aሴ+B\n 0: A\\x{1234}+B\n    \n# These are here because I upgraded to Unicode 10.0.0 before Perl did, so it\n# doesn't recognize all these scripts. In time these three tests can be moved\n# to test 4.\n\n/^(\\p{Adlam}+)(\\p{Bhaiksuki}+)(\\p{Marchen}+)(\\p{Newa}+)(\\p{Osage}+)\n  (\\p{Tangut}+)(\\p{Masaram_Gondi}+)(\\p{Nushu}+)(\\p{Soyombo}+)\n  (\\p{Zanabazar_Square}+)/x,utf\n    \\x{1E900}\\x{1E924}\\x{1E953}\\x{11C00}\\x{11C2D}\\x{11C3E}\\x{11C70}\\x{11C77}\\x{11CAB}\\x{11400}\\x{1142F}\\x{11455}\\x{104B0}\\x{104D8}\\x{104FB}\\x{16FE0}\\x{18800}\\x{18AF2}\\x{11D00}\\x{11D3A}\\x{11D59}\\x{16FE1}\\x{1B170}\\x{1B2FB}\\x{11A50}\\x{11A58}\\x{11AA2}\\x{11A00}\\x{11A07}\\x{11A47} \n 0: \\x{1e900}\\x{1e924}\\x{1e953}\\x{11c00}\\x{11c2d}\\x{11c3e}\\x{11c70}\\x{11c77}\\x{11cab}\\x{11400}\\x{1142f}\\x{11455}\\x{104b0}\\x{104d8}\\x{104fb}\\x{16fe0}\\x{18800}\\x{18af2}\\x{11d00}\\x{11d3a}\\x{11d59}\\x{16fe1}\\x{1b170}\\x{1b2fb}\\x{11a50}\\x{11a58}\\x{11aa2}\\x{11a00}\\x{11a07}\\x{11a47}\n 1: \\x{1e900}\\x{1e924}\\x{1e953}\n 2: \\x{11c00}\\x{11c2d}\\x{11c3e}\n 3: \\x{11c70}\\x{11c77}\\x{11cab}\n 4: \\x{11400}\\x{1142f}\\x{11455}\n 5: \\x{104b0}\\x{104d8}\\x{104fb}\n 6: \\x{16fe0}\\x{18800}\\x{18af2}\n 7: \\x{11d00}\\x{11d3a}\\x{11d59}\n 8: \\x{16fe1}\\x{1b170}\\x{1b2fb}\n 9: \\x{11a50}\\x{11a58}\\x{11aa2}\n10: \\x{11a00}\\x{11a07}\\x{11a47}\n\n/^\\x{1E900}\\x{104B0}/i,utf\n    \\x{1E900}\\x{104B0}\n 0: \\x{1e900}\\x{104b0}\n    \\x{1E922}\\x{104D8}\n 0: \\x{1e922}\\x{104d8}\n    \n/^(?:(\\X)(?C))+$/utf\n    \\x{1E900}\\x{1E924}\\x{1E953}\\x{11C00}\\x{11C2D}\\x{11C3E}\\x{11C70}\\x{11C77}\\x{11CAB}\\x{11400}\\x{1142F}\\x{11455}\\x{104B0}\\x{104D8}\\x{104FB}\\x{16FE0}\\x{18800}\\x{18AF2}\\x{11D00}\\x{11D3A}\\x{11D59}\\x{16FE1}\\x{1B170}\\x{1B2FB}\\x{11A50}\\x{11A58}\\x{11AA2}\\x{11A00}\\x{11A07}\\x{11A47}\\=callout_capture,callout_no_where \nCallout 0: last capture = 1\n 1: \\x{1e900}\nCallout 0: last capture = 1\n 1: \\x{1e924}\nCallout 0: last capture = 1\n 1: \\x{1e953}\nCallout 0: last capture = 1\n 1: \\x{11c00}\nCallout 0: last capture = 1\n 1: \\x{11c2d}\\x{11c3e}\nCallout 0: last capture = 1\n 1: \\x{11c70}\nCallout 0: last capture = 1\n 1: \\x{11c77}\\x{11cab}\nCallout 0: last capture = 1\n 1: \\x{11400}\nCallout 0: last capture = 1\n 1: \\x{1142f}\nCallout 0: last capture = 1\n 1: \\x{11455}\nCallout 0: last capture = 1\n 1: \\x{104b0}\nCallout 0: last capture = 1\n 1: \\x{104d8}\nCallout 0: last capture = 1\n 1: \\x{104fb}\nCallout 0: last capture = 1\n 1: \\x{16fe0}\nCallout 0: last capture = 1\n 1: \\x{18800}\nCallout 0: last capture = 1\n 1: \\x{18af2}\nCallout 0: last capture = 1\n 1: \\x{11d00}\\x{11d3a}\nCallout 0: last capture = 1\n 1: \\x{11d59}\nCallout 0: last capture = 1\n 1: \\x{16fe1}\nCallout 0: last capture = 1\n 1: \\x{1b170}\nCallout 0: last capture = 1\n 1: \\x{1b2fb}\nCallout 0: last capture = 1\n 1: \\x{11a50}\\x{11a58}\nCallout 0: last capture = 1\n 1: \\x{11aa2}\nCallout 0: last capture = 1\n 1: \\x{11a00}\\x{11a07}\\x{11a47}\n 0: \\x{1e900}\\x{1e924}\\x{1e953}\\x{11c00}\\x{11c2d}\\x{11c3e}\\x{11c70}\\x{11c77}\\x{11cab}\\x{11400}\\x{1142f}\\x{11455}\\x{104b0}\\x{104d8}\\x{104fb}\\x{16fe0}\\x{18800}\\x{18af2}\\x{11d00}\\x{11d3a}\\x{11d59}\\x{16fe1}\\x{1b170}\\x{1b2fb}\\x{11a50}\\x{11a58}\\x{11aa2}\\x{11a00}\\x{11a07}\\x{11a47}\n 1: \\x{11a00}\\x{11a07}\\x{11a47}\n\n# Similarly for Unicode 11.0.0\n\n/^(\\p{Dogra}+)(\\p{Gunjala_Gondi}+)(\\p{Hanifi_Rohingya}+)(\\p{Makasar}+)\n  (\\p{Medefaidrin}+)(\\p{Old_Sogdian}+)(\\p{Sogdian}+)/x,utf\n    \\x{11800}\\x{11da9}\\x{10d27}\\x{11ee0}\\x{16e48}\\x{10f27}\\x{10f30} \n 0: \\x{11800}\\x{11da9}\\x{10d27}\\x{11ee0}\\x{16e48}\\x{10f27}\\x{10f30}\n 1: \\x{11800}\n 2: \\x{11da9}\n 3: \\x{10d27}\n 4: \\x{11ee0}\n 5: \\x{16e48}\n 6: \\x{10f27}\n 7: \\x{10f30}\n\n# Regional indicators\n\n/^(\\X)(\\X)/utf,aftertext\n    \\x{1F1E6}\\x{1F1E7}\\x{1F1E7}B\n 0: \\x{1f1e6}\\x{1f1e7}\\x{1f1e7}\n 0+ B\n 1: \\x{1f1e6}\\x{1f1e7}\n 2: \\x{1f1e7}\n    \\x{1F1E6}\\x{1F1E7}\\x{1F1E7}\\x{1F1E6}B\n 0: \\x{1f1e6}\\x{1f1e7}\\x{1f1e7}\\x{1f1e6}\n 0+ B\n 1: \\x{1f1e6}\\x{1f1e7}\n 2: \\x{1f1e7}\\x{1f1e6}\n    \n# More differences from Perl\n\n/^\\p{Common}/utf\n    \\x{60c}\n 0: \\x{60c}\n    \\x{61f}  \n 0: \\x{61f}\n    \\x{964}\n 0: \\x{964}\n    \\x{965}  \n 0: \\x{965}\n\n/^\\p{Inherited}/utf\n    \\x{64b}\n 0: \\x{64b}\n    \\x{654}\n 0: \\x{654}\n    \\x{655}\n 0: \\x{655}\n    \\x{1D1AA} \n 0: \\x{1d1aa}\n\n/\\N{U+}/\nFailed: error 193 at offset 6: \\N{U+dddd} is supported only in Unicode (UTF) mode\n        here: \\N{U+} |<--|\n\n/\\N{U+}/utf\nFailed: error 178 at offset 5: digits missing after \\x or in \\x{} or \\o{} or \\N{U+}\n        here: \\N{U+ |<--| }\n\n/\\N{U}/\nFailed: error 137 at offset 3: PCRE2 does not support \\F, \\L, \\l, \\N{name}, \\U, or \\u\n        here: \\N{ |<--| U}\n\n/\\N{U+}/utf\nFailed: error 178 at offset 5: digits missing after \\x or in \\x{} or \\o{} or \\N{U+}\n        here: \\N{U+ |<--| }\n\n/\\N{U+1}/\nFailed: error 193 at offset 7: \\N{U+dddd} is supported only in Unicode (UTF) mode\n        here: \\N{U+1} |<--|\n\n/\\N{U+1 }/\nFailed: error 193 at offset 8: \\N{U+dddd} is supported only in Unicode (UTF) mode\n        here: \\N{U+1 } |<--|\n\n# This tests the non-UTF Unicode NEL pattern whitespace character, only\n# recognized by PCRE2 with /x when there is Unicode support.\n\n/A      \n\u000b\f\rB/x\n    AB \n 0: AB\n    \n# This tests Unicode Pattern White Space characters in verb names when they\n# are being processed with PCRE2_EXTENDED. Note: there are UTF-8 characters\n# with code points greater than 255 between A, B, and C in the pattern.\n\n/(*: A‎B C)abc/x,utf,mark,alt_verbnames\n    abc\n 0: abc\nMK: ABC\n    \n# Script run tests: auto-possessification\n\n/^(*sr:.*)/B,utf \n------------------------------------------------------------------\n        Bra\n        ^\n        Script run\n        Any*\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    paypаl.com   A classic example of why script run checks are a good thing\n 0: payp\n\n/^(*sr:.*(*ACCEPT))/utf \n    paypаl.com   But *ACCEPT breaks things\n 0: payp\\x{430}l.com   But *ACCEPT breaks things\n\n/^(*sr:\\x{2e80}*)/B,utf\n------------------------------------------------------------------\n        Bra\n        ^\n        Script run\n        \\x{2e80}*+\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/^(*sr:\\x{2e80}*)\\x{2e80}/B,utf\n------------------------------------------------------------------\n        Bra\n        ^\n        Script run\n        \\x{2e80}*\n        Ket\n        \\x{2e80}\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?<!)(*sr:)/B\n------------------------------------------------------------------\n        Bra\n        Assert back not\n        Ket\n        Script run\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\n/(?<=abc(?=X(*sr:BXY)CCC)XBXYCCC)./B\n------------------------------------------------------------------\n        Bra\n        Assert back\n     10 Reverse\n        abc\n        Assert\n        X\n        Script run\n        BXY\n        Ket\n        CCC\n        Ket\n        XBXYCCC\n        Ket\n        Any\n        Ket\n        End\n------------------------------------------------------------------\n   abcXBXYCCC!\n 0: !\n\n# Some script run patterns are broken in Perl 5.28.0. These can be moved into\n# test 4 when a mended version of Perl is released.\n\n/^(*sr:.{4})/utf\n    \\x{0980}12\\x{0993}     Bengali Common-digits Bengali\n 0: \\x{980}12\\x{993}\n    \\x{0780}12\\x{07b1}     Thaana Common-digits Thaana\n 0: \\x{780}12\\x{7b1}\n    \\x{0e01}12\\x{0e5b}     Thai Common-digits Thai\n 0: \\x{e01}12\\x{e5b}\n    \\x{1780}12\\x{19ff}     Khmer Common-digits Khmer\n 0: \\x{1780}12\\x{19ff}\n    \\x{0904}12\\x{0939}     Devanagari Common-digits Devanagari\n 0: \\x{904}12\\x{939}\n    A\\x{ff10}\\x{ff19}B     Latin Common-notascii-digits Latin \n 0: A\\x{ff10}\\x{ff19}B\n    A\\x{1d7ce}\\x{1d7cf}B   Latin fancy-common-digits Latin\n 0: A\\x{1d7ce}\\x{1d7cf}B\n    \n# These ones involve non-ASCII but nevertheless Common digits. As of October\n# 2018 even blead Perl wasn't handling all of these - but is going to. \n\n/^(*sr:.{4})/utf\n    A\\x{ff10}\\x{ff19}B     Latin Common-notascii-digits Latin \n 0: A\\x{ff10}\\x{ff19}B\n    \\x{ff10}\\x{ff19}..     Common-notascii-digits Common Common\n 0: \\x{ff10}\\x{ff19}..\n    A\\x{ff10}BC            Latin Common-notascii-digit Latin Latin\n 0: A\\x{ff10}BC\n    A\\x{1d7ce}\\x{1d7cf}B   Latin fancy-common-digits Latin\n 0: A\\x{1d7ce}\\x{1d7cf}B\n    \\x{1d7ce}\\x{1d7cf},,   fancy-common-digits Common Common\n 0: \\x{1d7ce}\\x{1d7cf},,\n    A\\x{1d7ce}BC           Latin fancy-common-digit Latin Latin\n 0: A\\x{1d7ce}BC\n    \n# Some Unicode 12.1.0 new script characters\n\n/\\p{Elymaic}\\p{Nandinagari}\\p{Nyiakeng_Puachue_Hmong}\\p{Wancho}/utf\n    \\x{10fe5}\\x{119AC}\\x{1E10E}\\x{1E2D1} \n 0: \\x{10fe5}\\x{119ac}\\x{1e10e}\\x{1e2d1}\n\n# Some Unicode 13.0.0 new script characters\n\n/\\p{Chorasmian}\\p{Dives_Akuru}\\p{Khitan_Small_Script}\\p{Yezidi}/utf\n    \\x{10FB0}\\x{11900}\\x{18B00}\\x{10E80}\n 0: \\x{10fb0}\\x{11900}\\x{18b00}\\x{10e80}\n\n# ------- \n\n# Test reference and errors in non-ASCII characters in group names\n\n/(?'𑠅ABC'...)/I,utf\nCapture group count = 1\nNamed capture groups:\n  𑠅ABC   1\nOptions: utf\nSubject length lower bound = 3\n   abcde\\=copy=𑠅ABC\n 0: abc\n 1: abc\n  C abc (3) 𑠅ABC (group 1)\n\n# Bad ones\n\n/(?'AB၌C'...)\\g{AB၌C}/utf\nFailed: error 142 at offset 5: syntax error in subpattern name (missing terminator?)\n        here: (?'AB |<--| ၌C'...)\\g{...\n\n/(?'²ABC'...)/utf\nFailed: error 162 at offset 3: subpattern name expected\n        here: (?' |<--| ²ABC'...)\n\n/(?'X²ABC'...)/utf\nFailed: error 142 at offset 4: syntax error in subpattern name (missing terminator?)\n        here: (?'X |<--| ²ABC'...)\n\n# -------\n\n/\\p{Any}*xyz/I\nCapture group count = 0\nCompile options: <none>\nOverall options: anchored\nLast code unit = 'z'\nSubject length lower bound = 3\n\n/(|)7/caseless,ucp\n\n/(\\xc1)\\1/i,ucp\n    \\xc1\\xe1\\=no_jit\n 0: \\xc1\\xe1\n 1: \\xc1\n    \n/\\p{L&}+\\p{bidi_control}/B\n------------------------------------------------------------------\n        Bra\n        prop Lc +\n        prop Bidicontrol\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{bidi_control}+\\p{L&}/B\n------------------------------------------------------------------\n        Bra\n        prop Bidicontrol +\n        prop Lc\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{han}/B\n------------------------------------------------------------------\n        Bra\n        prop Han\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{script:han}/B\n------------------------------------------------------------------\n        Bra\n        prop script:Han\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{sc:han}/B\n------------------------------------------------------------------\n        Bra\n        prop script:Han\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{script extensions:han}/B\n------------------------------------------------------------------\n        Bra\n        prop Han\n        Ket\n        End\n------------------------------------------------------------------\n\n/\\p{scx:han}/B\n------------------------------------------------------------------\n        Bra\n        prop Han\n        Ket\n        End\n------------------------------------------------------------------\n\n# Test error - invalid script name\n\n/\\p{sc:L}/\nFailed: error 147 at offset 8: unknown property after \\P or \\p\n        here: \\p{sc:L} |<--|\n\n# Some Boolean property tests that differ from Perl\n\n/\\p{emojimodifierbase}\\p{ebase}/g,utf\n    >AN<>\\x{261d}\\x{1faf6}<>yz<\n 0: \\x{261d}\\x{1faf6}\n\n/\\p{graphemelink}\\p{grlink}/g,utf\n    >AN<>\\x{11d97}\\x{94d}<>yz<\n 0: \\x{11d97}\\x{94d}\n \n/\\p{soft dotted}\\p{sd}/g,utf\n    >AF23<>\\x{1df1a}\\x{69}<>yz<\n 0: \\x{1df1a}i\n    \n# ------------------------------------------------ \n\n/\\p{\\2b[:xigi:t:_/\nFailed: error 146 at offset 10: malformed \\P or \\p sequence\n        here: \\p{\\2b[:x |<--| igi:t:_\n\n# Tests for PCRE2_EXTRA_CASELESS_RESTRICT. Compare each test with and without\n# the restriction.\n\n/AskZ/i,utf,caseless_restrict\n    AskZ\n 0: AskZ\n    aSKz\n 0: aSKz\n\\= Expect no match\n    A\\x{17f}kZ\nNo match\n    As\\x{212a}Z      \nNo match\n\n/AskZ/i,utf\n    AskZ\n 0: AskZ\n    aSKz\n 0: aSKz\n    A\\x{17f}kZ\n 0: A\\x{17f}kZ\n    As\\x{212a}Z      \n 0: As\\x{212a}Z\n\n/A\\x{17f}\\x{212a}Z/ir,utf\n    \\= Expect no match\n    AskZ\nNo match\n\n/A\\x{17f}\\x{212a}Z/i,utf\n    AskZ\n 0: AskZ\n\n/[AskZ]+/i,utf,caseless_restrict\n    AskZ\n 0: AskZ\n    aSKz \n 0: aSKz\n    A\\x{17f}kZ\n 0: A\n    As\\x{212a}Z      \n 0: As\n\n/[AskZ]+/i,utf\n    AskZ\n 0: AskZ\n    aSKz \n 0: aSKz\n    A\\x{17f}kZ\n 0: A\\x{17f}kZ\n    As\\x{212a}Z      \n 0: As\\x{212a}Z\n\n/[\\x{17f}\\x{212a}]+/ir,utf\n\\= Expect no match\n    AskZ\nNo match\n\n/[\\x{17f}\\x{212a}]+/i,utf\n    AskZ\n 0: sk\n\n/[^s]+/ir,utf\n    A\\x{17f}Z \n 0: A\\x{17f}Z\n\n/[^s]+/i,utf\n    A\\x{17f}Z \n 0: A\n\n/[^k]+/ir,utf\n    A\\x{212a}Z \n 0: A\\x{212a}Z\n    \n/[^k]+/i,utf\n    A\\x{212a}Z \n 0: A\n    \n/[^sk]+/ir,utf\n    A\\x{17f}\\x{212a}Z \n 0: A\\x{17f}\\x{212a}Z\n\n/[^sk]+/i,utf\n    A\\x{17f}\\x{212a}Z \n 0: A\n\n/[^\\x{17f}]+/ir,utf\n    AsSZ \n 0: AsSZ\n\n/[^\\x{17f}]+/i,utf\n    AsSZ \n 0: A\n\n/[Ss]+/irB,utf\n------------------------------------------------------------------\n        Bra\n     /i S++\n        Ket\n        End\n------------------------------------------------------------------\n    Sss\\x{17f}ss\n 0: Sss\n\n/[Ss]+/iB,utf\n------------------------------------------------------------------\n        Bra\n        [Ss\\x{17f}]++\n        Ket\n        End\n------------------------------------------------------------------\n    Sss\\x{17f}ss\n 0: Sss\\x{17f}ss\n\n/[S\\x{17f}]/irB,utf\n------------------------------------------------------------------\n        Bra\n        [Ss\\x{17f}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[S\\x{17f}]/iB,utf\n------------------------------------------------------------------\n        Bra\n        [Ss\\x{17f}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x{17f}s]/irB,utf\n------------------------------------------------------------------\n        Bra\n        [Ss\\x{17f}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x{17f}s]/iB,utf\n------------------------------------------------------------------\n        Bra\n        [Ss\\x{17f}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x{4b}\\x{6b}]/irB,utf\n------------------------------------------------------------------\n        Bra\n     /i K\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x{4b}\\x{6b}]/iB,utf\n------------------------------------------------------------------\n        Bra\n        [Kk\\x{212a}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/s(?r)s(?-r)s(?r:s)s/i,utf\n    \\x{17f}S\\x{17f}S\\x{17f}\n 0: \\x{17f}S\\x{17f}S\\x{17f}\n\\= Expect no match     \n    \\x{17f}\\x{17f}\\x{17f}S\\x{17f}\nNo match\n    \\x{17f}S\\x{17f}\\x{17f}\\x{17f}\nNo match\n\n/k(?^i)k/ir,utf\n    K\\x{212a}\n 0: K\\x{212a}\n\\= Expect no match          \n    \\x{212a}\\x{212a}\nNo match\n\n/[sk](?r:[sk])[sk]/Bi,utf\n------------------------------------------------------------------\n        Bra\n        [KSks\\x{17f}\\x{212a}]\n        Bra\n        [KSks]\n        Ket\n        [KSks\\x{17f}\\x{212a}]\n        Ket\n        End\n------------------------------------------------------------------\n    SKS\n 0: SKS\n    sks\n 0: sks\n    \\x{212a}S\\x{17f}\n 0: \\x{212a}S\\x{17f}\n    \\x{17f}K\\x{212a}\n 0: \\x{17f}K\\x{212a}\n\\= Expect no match\n    s\\x{212a}s\nNo match\n    K\\x{17f}K\nNo match\n\n/(.) \\1/i,utf,caseless_restrict\n    s S\n 0: s S\n 1: s\n    k K\n 0: k K\n 1: k\n\\= Expect no match\n    s \\x{17f}\nNo match\n    k \\x{212a}\nNo match\n\n/(.) (?r:\\1)/i,utf\n    s S\n 0: s S\n 1: s\n    k K\n 0: k K\n 1: k\n\\= Expect no match\n    s \\x{17f}\nNo match\n    k \\x{212a}\nNo match\n\n/(.) \\1 z/Bir\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        Any\n        Ket\n     /i  \n     /i \\g{1} 0x01\n     /i  z\n        Ket\n        End\n------------------------------------------------------------------\n    s s z\n 0: s s z\n 1: s\n    s S z\n 0: s S z\n 1: s\n\n/(?J:(?<DNAME>s)|(?<DNAME>.)) \\k<DNAME> z/Bir\n------------------------------------------------------------------\n        Bra\n        Bra\n        CBra 1\n     /i s\n        Ket\n        Alt\n        CBra 2\n        Any\n        Ket\n        Ket\n     /i  \n     /i \\k<DNAME>2 0x01\n     /i  z\n        Ket\n        End\n------------------------------------------------------------------\n    s s z\n 0: s s z\n 1: s\n    s S z\n 0: s S z\n 1: s\n\n/(.) \\1/i,utf\n    s S\n 0: s S\n 1: s\n    k K\n 0: k K\n 1: k\n    s \\x{17f}\n 0: s \\x{17f}\n 1: s\n    k \\x{212a}\n 0: k \\x{212a}\n 1: k\n\n/(?:(?<A>ss)|(?<A>kk)) \\k<A>/i,utf,dupnames,caseless_restrict\n    sS Ss\n 0: sS Ss\n 1: sS\n    kK Kk\n 0: kK Kk\n 1: <unset>\n 2: kK\n\\= Expect no match\n    sS \\x{17f}s\nNo match\n    kK \\x{212a}k\nNo match\n\n/(?:(?<A>ss)|(?<A>kk)) \\k<A>/i,utf,dupnames\n    sS Ss\n 0: sS Ss\n 1: sS\n    kK Kk\n 0: kK Kk\n 1: <unset>\n 2: kK\n    sS \\x{17f}s\n 0: sS \\x{17f}s\n 1: sS\n    kK \\x{212a}k\n 0: kK \\x{212a}k\n 1: <unset>\n 2: kK\n\n/(?:(?<A>s)|(?<A>k)) \\k<A>{3,}!/i,utf,dupnames,caseless_restrict\n    s SsSs!\n 0: s SsSs!\n 1: s\n    k KkKk!\n 0: k KkKk!\n 1: <unset>\n 2: k\n\\= Expect no match\n    s \\x{17f}sSs\\x{17f}!\nNo match\n    k \\x{212a}kKk\\x{212a}!\nNo match\n\n/(?:(?<A>s)|(?<A>k)) \\k<A>{3,}!/i,utf,dupnames\n    s SsSs!\n 0: s SsSs!\n 1: s\n    k KkKk!\n 0: k KkKk!\n 1: <unset>\n 2: k\n    s \\x{17f}sSs\\x{17f}!\n 0: s \\x{17f}sSs\\x{17f}!\n 1: s\n    k \\x{212a}kKk\\x{212a}!\n 0: k \\x{212a}kKk\\x{212a}!\n 1: <unset>\n 2: k\n\n# End caseless restrict tests\n\n# TESTS for PCRE2_EXTRA_TURKISH_CASING - again, tests with and without.\n\n/i/i,utf\n    i\n 0: i\n    I\n 0: I\n\\= Expect no match\n    \\x{0130}\nNo match\n    \\x{0131}\nNo match\n\n/i/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/I/i,utf\n    i\n 0: i\n    I\n 0: I\n\\= Expect no match\n    \\x{0130}\nNo match\n    \\x{0131}\nNo match\n\n/I/i,utf,turkish_casing\n    I\n 0: I\n    \\x{0131}\n 0: \\x{131}\n\\= Expect no match\n    i\nNo match\n    \\x{0130}\nNo match\n\n/\\x{0130}/i,utf\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/\\x{0130}/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/\\x{0131}/i,utf\n    \\x{0131}\n 0: \\x{131}\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n    \\x{0130}\nNo match\n\n/\\x{0131}/i,utf,turkish_casing\n    I\n 0: I\n    \\x{0131}\n 0: \\x{131}\n\\= Expect no match\n    i\nNo match\n    \\x{0130}\nNo match\n\n/[i]/i,utf\n    i\n 0: i\n    I\n 0: I\n\\= Expect no match\n    \\x{0130}\nNo match\n    \\x{0131}\nNo match\n\n/[i]/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[^i]/i,utf\n    \\x{0130}\n 0: \\x{130}\n    \\x{0131}\n 0: \\x{131}\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n\n/[^i]/i,utf,turkish_casing\n    I\n 0: I\n    \\x{0131}\n 0: \\x{131}\n\\= Expect no match\n    i\nNo match\n    \\x{0130}\nNo match\n\n/[\\x{0130}]/i,utf\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[\\x{0130}]/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[\\x{0120}-\\x{0130}]/i,utf\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[\\x{0120}-\\x{0130}]/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[zi]/i,utf\n    i\n 0: i\n    I\n 0: I\n\\= Expect no match\n    \\x{0130}\nNo match\n    \\x{0131}\nNo match\n\n/[zi]/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[z\\x{0130}]/i,utf\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[z\\x{0130}]/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[iI]/i,utf\n    i\n 0: i\n    I\n 0: I\n\\= Expect no match\n    \\x{0130}\nNo match\n    \\x{0131}\nNo match\n\n/[iI]/i,utf,turkish_casing\n    i\n 0: i\n    I\n 0: I\n    \\x{0130}\n 0: \\x{130}\n    \\x{0131}\n 0: \\x{131}\n\n/[i\\x{0130}]/i,utf\n    i\n 0: i\n    I\n 0: I\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    \\x{0131}\nNo match\n\n/[i\\x{0130}]/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/(.) \\1/i,utf\n    i I\n 0: i I\n 1: i\n\\= Expect no match\n    i \\x{0130}\nNo match\n    \\x{0131} I\nNo match\n\n/(*TURKISH_CASING)(.) \\1/i,utf\n    i \\x{0130}\n 0: i \\x{130}\n 1: i\n    \\x{0131} I\n 0: \\x{131} I\n 1: \\x{131}\n\\= Expect no match\n    i I\nNo match\n\n/(.) \\1/i,utf,turkish_casing\n    i \\x{0130}\n 0: i \\x{130}\n 1: i\n    \\x{0131} I\n 0: \\x{131} I\n 1: \\x{131}\n\\= Expect no match\n    i I\nNo match\n\n/i/i,utf,caseless_restrict,turkish_casing\nFailed: error 206 at offset 0: PCRE2_EXTRA_TURKISH_CASING and PCRE2_EXTRA_CASELESS_RESTRICT are not compatible\n\n/i/i,turkish_casing\nFailed: error 204 at offset 0: PCRE2_EXTRA_TURKISH_CASING require Unicode (UTF or UCP) mode\n\n/i/i,utf,caseless_restrict\n    i\n 0: i\n\n/i/i,ucp,caseless_restrict\n    i\n 0: i\n\n/b(?r:[\\x{00FF}-\\x{FFEE}])/i,utf,turkish_casing\n    b\\x{0130}\n 0: b\\x{130}\n    b\\x{0131}\n 0: b\\x{131}\n\\= Expect no match\n    bi\nNo match\n    bI\nNo match\n    bk\nNo match\n\n/[\\x60-\\x7f]/i,ucp\n    i\n 0: i\n    I\n 0: I\n\n/[\\x60-\\xc0]/i,ucp\n    i\n 0: i\n    I\n 0: I\n\n/[\\x80-\\xc0]/i,ucp\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n\n# End Turkish casing tests\n\n# TESTS for PCRE2_EXTRA_ASCII_xxx - again, tests with and without.\n\n# DIGITS\n\n/\\d+/i,utf\n    123\\x{660}456\n 0: 123\n\n/\\d+/i,utf,ucp\n    123\\x{660}456\n 0: 123\\x{660}456\n\n/\\d+/i,utf,ucp,ascii_bsd\n    123\\x{660}456\n 0: 123\n\n/[\\d]+/i,utf\n    123\\x{660}456\n 0: 123\n\n/[\\d]+/i,utf,ucp\n    123\\x{660}456\n 0: 123\\x{660}456\n\n/[\\d]+/i,utf,ucp,ascii_bsd\n    123\\x{660}456\n 0: 123\n\n/\\d(?aD)\\d(?-aD)\\d/utf,ucp\n    \\x{660}9\\x{660}\n 0: \\x{660}9\\x{660}\n\\= Expect no match     \n    \\x{660}\\x{660}\\x{660}\nNo match\n\n/\\d(?-aD)\\d(?aD)\\d/utf,ucp,ascii_bsd\n    999\n 0: 999\n    9\\x{660}9\n 0: 9\\x{660}9\n\n/\\d(?a)\\d(?-a)\\d/utf,ucp\n    \\x{660}9\\x{660}\n 0: \\x{660}9\\x{660}\n\\= Expect no match     \n    \\x{660}\\x{660}\\x{660}\nNo match\n\n/\\d(?-aD)\\d(?aD)\\d/utf,ucp,ascii_bsd\n    999\n 0: 999\n    9\\x{660}9\n 0: 9\\x{660}9\n\n# SPACES\n\n/>\\s+</i,utf\n    >  <\n 0: >  <\n\\= Expect no match     \n    >\\x{a0} <\nNo match\n\n/>\\s+</i,utf,ucp\n    >  <\n 0: >  <\n    >\\x{a0} <\n 0: >\\x{a0} <\n\n/>\\s+</i,utf,ucp,ascii_bss\n    >  <\n 0: >  <\n\\= Expect no match     \n    >\\x{a0} <\nNo match\n\n/>[\\s]+</i,utf\n    >  <\n 0: >  <\n\\= Expect no match     \n    >\\x{a0} <\nNo match\n\n/>[\\s]+</i,utf,ucp\n    >  <\n 0: >  <\n    >\\x{a0} <\n 0: >\\x{a0} <\n\n/>[\\s]+</i,utf,ucp,ascii_bss\n    >  <\n 0: >  <\n\\= Expect no match     \n    >\\x{a0} <\nNo match\n\n/>\\s(?aS)\\s(?-aS)\\s</utf,ucp\n    >\\x{a0} \\x{a0}<\n 0: >\\x{a0} \\x{a0}<\n\\= Expect no match     \n    >\\x{a0}\\x{a0}\\x{a0}<\nNo match\n\n/>\\s(?a)\\s(?-a)\\s</utf,ucp\n    >\\x{a0} \\x{a0}<\n 0: >\\x{a0} \\x{a0}<\n\\= Expect no match     \n    >\\x{a0}\\x{a0}\\x{a0}<\nNo match\n    \n# WORDS\n\n/\\w+/i,utf\n    123\\x{660}abc\n 0: 123\n\n/\\w+/i,utf,ucp\n    123\\x{660}abc\n 0: 123\\x{660}abc\n\n/\\w+/i,utf,ucp,ascii_bsw\n    123\\x{660}abc\n 0: 123\n\n/[\\w]+/i,utf\n    123\\x{660}abc\n 0: 123\n\n/[\\w]+/i,utf,ucp\n    123\\x{660}abc\n 0: 123\\x{660}abc\n\n/[\\w]+/i,utf,ucp,ascii_bsw\n    123\\x{660}abc\n 0: 123\n\n/\\w(?aW)\\w(?-aW)\\w/utf,ucp\n    \\x{660}A\\x{c0}\n 0: \\x{660}A\\x{c0}\n\\= Expect no match     \n    \\x{660}\\x{c0}\\x{c0}\nNo match\n\n/\\w(?a)\\w(?-a)\\w/utf,ucp\n    \\x{660}A\\x{c0}\n 0: \\x{660}A\\x{c0}\n\\= Expect no match     \n    \\x{660}\\x{c0}\\x{c0}\nNo match\n    \n# WORD BOUNDARY\n\n/\\bABC\\b/utf\n    \\x{c0}ABC\\x{d0}\n 0: ABC\n\n/\\bABC\\b/utf,ucp\n\\= Expect no match\n    \\x{c0}ABC\\x{d0}\nNo match\n\n/\\bABC\\b/utf,ucp,ascii_bsw\n    \\x{c0}ABC\\x{d0}\n 0: ABC\n\n/\\bABC\\b/utf,ucp,ascii_all\n    \\x{c0}ABC\\x{d0}\n 0: ABC\n    \n# POSIX \n\n/^[[:digit:]]+$/utf,ucp\n    123456\n 0: 123456\n    123\\x{660}456\n 0: 123\\x{660}456\n\n/^[[:digit:]]+$/utf,ucp,ascii_digit\n    123456\n 0: 123456\n\\= Expect no match\n    123\\x{660}456\nNo match\n\n/[[:digit:]]+/g,utf,ucp,ascii_digit\n    123\\x{660}456\n 0: 123\n 0: 456\n\n/(?-aT)[[:digit:]](?aT)[[:digit:]]/utf,ucp,ascii_digit\n    11\n 0: 11\n    \\x{ff11}1\n 0: \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\nNo match\n\n/(?-aT:[[:digit:]])[[:digit:]]/utf,ucp,ascii_digit\n    11\n 0: 11\n    \\x{ff11}1\n 0: \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\nNo match\n\n/(?-aT:[[:digit:]])[[:digit:]]/utf,never_ucp,ascii_digit\n    11\n 0: 11\n\\= Expect no match\n    \\x{ff11}1\nNo match\n    1\\x{ff11}\nNo match\n\n/[[:digit:]]+/utf,ucp,ascii_posix\n    123\\x{660}456\n 0: 123\n\n/(?-aP)[[:digit:]](?aP)[[:digit:]]/utf,ucp,ascii_posix\n    11\n 0: 11\n    \\x{ff11}1\n 0: \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\nNo match\n\n/(?-aP:[[:digit:]])[[:digit:]]/utf,ucp,ascii_posix\n    11\n 0: 11\n    \\x{ff11}1\n 0: \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\nNo match\n\n/(?-a:[[:digit:]])[[:digit:]]/a,utf,ucp\n    11\n 0: 11\n    \\x{ff11}1\n 0: \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\nNo match\n\n/^[[:xdigit:]]+$/utf,ucp\n    f0\n 0: f0\n    1A\n 0: 1A\n    d\\x{ff10}\n 0: d\\x{ff10}\n    \\x{ff26}8\n 0: \\x{ff26}8\n\\= Expect no match\n    8g\\=no_jit\nNo match\n\n/^[[:xdigit:]]+$/utf,ucp,ascii_digit\n    f0\n 0: f0\n    1A\n 0: 1A\n\\= Expect no match\n    d\\x{ff10}\nNo match\n    \\x{ff26}8\nNo match\n    8g\nNo match\n\n/>[[:space:]]+</utf,ucp\n    >\\x{a0} \\x{a0}<\n 0: >\\x{a0} \\x{a0}<\n    >\\x{a0}\\x{a0}\\x{a0}<\n 0: >\\x{a0}\\x{a0}\\x{a0}<\n\n/>[[:space:]]+</utf,ucp,ascii_posix\n\\= Expect no match     \n    >\\x{a0} \\x{a0}<\nNo match\n\n/(?aP)[[:alnum:]]+/i,ucp,utf\n    abcáxyz\n 0: abc\n    abc\\x{660}xyz\n 0: abc\n\n/(?aP)[[:alnum:]\\d]+/i,ucp,utf\n    abc\\x{660}xyz\n 0: abc\\x{660}xyz\n    \n/(*UCP)(*UTF)[[:alnum:]](?aP:[[:alnum:]])[[:alnum:]]/\n    \\x{660}A\\x{660}\n 0: \\x{660}A\\x{660}\n\\= Expect no match     \n    \\x{660}\\x{660}\\x{660}\nNo match\n    \n# VARIOUS\n\n/[\\d\\s\\w]+/a,ucp,utf\n    9 A\\x{660}À \n 0: 9 A\n    9 AÀ\\x{660} \n 0: 9 A\n\n# End PCRE2_EXTRA_ASCII_xxx tests\n\n/(?<!(|l ))/utf\n    (?<!(|l ))\nNo match\n\n/\\p{BC: A=}/utf\nFailed: error 147 at offset 10: unknown property after \\P or \\p\n        here: \\p{BC: A=} |<--|\n\n/abc/utf,substitute_extended,replace=>\\777<\n    abc\n 1: >\\x{1ff}<\n\n/a(?<namED_1>b)c/utf,substitute_extended\n    abc\\=replace=>${namED_1}<\n 1: >b<\n\n/a(?<namedverylongbutperfectlylegalsoyoushouldnthaveaproblem_1>b)c/utf,substitute_extended\n    abc\\=replace=>${namedverylongbutperfectlylegalsoyoushouldnthaveaproblem_1}<\n 1: >b<\n\n/a(?<nämed>b)c/utf,substitute_extended\n    abc\\=replace=>${nämed}<\n 1: >b<\n\n/a(?<nämedverylongbutperfectlylegalsoyoushouldnthaveaproblem_٢>b)c/utf,substitute_extended\n    abc\\=replace=>${nämedverylongbutperfectlylegalsoyoushouldnthaveaproblem_٢}<\n 1: >b<\n\n# python_octal\n\n/\\400/utf\n    \\o{400}\n 0: \\x{100}\n\n/\\400/utf,python_octal\nFailed: error 202 at offset 4: octal value given by \\ddd is greater than \\377 (forbidden by PCRE2_EXTRA_PYTHON_OCTAL)\n        here: \\400 |<--|\n\n/abc/utf,substitute_extended\n    abc\\=replace=\\400\n 1: \\x{100}\n\n/abc/utf,substitute_extended,python_octal\n    abc\\=replace=\\400\nFailed: error -57 at offset 4 in replacement: bad escape sequence in replacement string\n        here: \\400 |<--|\n\n# Character range merging tests\n\n/[\\x{1200}\\s\\x{1202}\\d\\x{1201}]+/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{Xsp}\\p{Nd}\\x{1200}-\\x{1202}]++\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{11ff}\\x{1200}\\x{1201}\\x{1202}\\x{1203}\n 0: \\x{1200}\\x{1201}\\x{1202}\n\n/[\\x{2000}-\\x{2500}\\x{2100}-\\x{2600}\\d\\x{1800}-\\x{1fff}]+/B,utf,ucp\n------------------------------------------------------------------\n        Bra\n        [\\p{Nd}\\x{1800}-\\x{2600}]++\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{17ff}\\x{1800}\\x{2600}\\x{2601}\n 0: \\x{1800}\\x{2600}\n\n/[\\x{10008}\\x{10003}\\x{10006}\\x{10004}\\x{10007}]+/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x{10003}-\\x{10004}\\x{10006}-\\x{10008}]++\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{10002}\\x{10005}\\x{10003}\\x{10004}\\x{10006}\\x{10007}\\x{10008}\\x{10009}\n 0: \\x{10003}\\x{10004}\\x{10006}\\x{10007}\\x{10008}\n\n/[\\x{100}-\\x{400}]+/Bi,utf\n------------------------------------------------------------------\n        Bra\n        [Ss\\xb5\\xff\\x{100}-\\x{400}\\x{450}\\x{1fbe}\\x{1fd3}\\x{1fe3}\\x{2126}\\x{2c62}\\x{2c64}-\\x{2c66}\\x{2c6d}-\\x{2c70}\\x{2c7e}-\\x{2c7f}\\x{a78d}\\x{a7aa}-\\x{a7ae}\\x{a7b0}-\\x{a7b2}\\x{a7c5}\\x{a7cb}\\x{a7dc}]++\n        Ket\n        End\n------------------------------------------------------------------\n    qS\\x{ff}\\x{100}\\x{a7c5}\\x{401}\n 0: S\\x{ff}\\x{100}\\x{a7c5}\n    \\x{2c63}\\x{2c64}\\x{2c65}\\x{2c66}\\x{2c67}\n 0: \\x{2c64}\\x{2c65}\\x{2c66}\n    \\x{a7af}\\x{a7b0}\\x{a7b1}\\x{a7b2}\\x{a7b3}\n 0: \\x{a7b0}\\x{a7b1}\\x{a7b2}\n\n/[\\x{100}-\\x{400}\\p{Ll}\\x{500}-\\x{700}\\p{OldHungarian}\\x{701}\\p{bidiLRI}]/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\p{Ll}\\p{Oldhungarian}\\p{Bidilri}\\x{100}-\\x{400}\\x{500}-\\x{701}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\pC\\x{100}-\\x{200}\\h\\pN]/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x00- 0-9\\x7f-\\xa0\\xad\\xb2\\xb3\\xb9\\xbc-\\xbe\\p{C}\\p{N}\\x{100}-\\x{200}\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\pC\\x{100}-\\x{200}\\v\\pN]/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x1f0-9\\x7f-\\x9f\\xad\\xb2\\xb3\\xb9\\xbc-\\xbe\\p{C}\\p{N}\\x{100}-\\x{200}\\x{2028}-\\x{2029}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\pC\\x{100}-\\x{200}\\H\\pN]/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x1f!-\\x9f\\xa1-\\xff\\p{C}\\p{N}\\x{100}-\\x{167f}\\x{1681}-\\x{180d}\\x{180f}-\\x{1fff}\\x{200b}-\\x{202e}\\x{2030}-\\x{205e}\\x{2060}-\\x{2fff}\\x{3001}-\\x{10ffff}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\pC\\x{100}-\\x{200}\\V\\pN]/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\xff\\p{C}\\p{N}\\x{100}-\\x{2027}\\x{202a}-\\x{10ffff}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x{16e49}-\\x{16e4f}\\x{20000}\\x{16e40}-\\x{16e48}\\pN]/Bi,utf\n------------------------------------------------------------------\n        Bra\n        [\\p{N}\\x{16e40}-\\x{16e4f}\\x{16e60}-\\x{16e6f}\\x{20000}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x80-\\x{4000}\\x90\\x{400}-\\x{f000}\\xa0\\x{4000}-\\x{10ffff}]++/B,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x00-\\x7f]++\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{7f}\\x{80}\\x{100}\\x{10fffe}\\x{10ffff}\\x00\n 0: \\x{80}\\x{100}\\x{10fffe}\\x{10ffff}\n\n/[\\x80-\\x{4000}\\x90\\x{400}-\\x{f000}\\xa0\\pN\\x{4000}-\\x{10ffff}]++/B,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x00-/:-\\x7f]++\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{7f}\\x{80}\\x{100}090\\x{10fffe}\\x{10ffff}\\x00\n 0: \\x{80}\\x{100}090\\x{10fffe}\\x{10ffff}\n\n/[\\x00-\\x{4000}\\x{2000}-\\x{10ffff}]++/B,utf\n------------------------------------------------------------------\n        Bra\n        AllAny++\n        Ket\n        End\n------------------------------------------------------------------\n    abcd\n 0: abcd\n\n/[abc\\p{Any}]{5,7}/B,utf\n------------------------------------------------------------------\n        Bra\n        AllAny{5}\n        AllAny{0,2}+\n        Ket\n        End\n------------------------------------------------------------------\n    xyz\nNo match\n\n/[^\\p{Any}\\x34\\p{Any}]*cat/B,utf\n------------------------------------------------------------------\n        Bra\n        []*+\n        cat\n        Ket\n        End\n------------------------------------------------------------------\n    cat\n 0: cat\n\n/[\\pN\\xf0-\\x{10ffff}]{5,8}/B,utf\n------------------------------------------------------------------\n        Bra\n        [^\\x00-/:-\\xb1\\xb4-\\xb8\\xba\\xbb\\xbf-\\xef]{5,8}+\n        Ket\n        End\n------------------------------------------------------------------\n    ab0123456cd\n 0: 0123456\n\n/[\\x00-\\x{398}\\x{39a}-\\x{10ffff}]*#(?i)[\\x00-\\x{398}\\x{39a}-\\x{10ffff}]*?#/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\xff\\x{100}-\\x{398}\\x{39a}-\\x{10ffff}]*\n        #\n        AllAny*?\n     /i #\n        Ket\n        End\n------------------------------------------------------------------\n    abcd#efg#\n 0: abcd#efg#\n\n# Freeing memory on error test\n/[\\x{100}-\\x{400}][\\x{100}-\\x{300}][\\x{100}-\\x{200}]\\8/i,utf\nFailed: error 115 at offset 53: reference to non-existent subpattern\n        here: ...\\x{200}]\\8 |<-->|\n\n# Character list tests\n\n/[\\x{100}-\\x{7fff}\\x{d7b0}\\x{d7b1}\\x{d7b3}\\x{d7b4}\\x{d7b6}\\x{d7b7}\\x{d7b9}\\x{d7ba}]{12}/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\x{100}-\\x{7fff}\\x{d7b0}-\\x{d7b1}\\x{d7b3}-\\x{d7b4}\\x{d7b6}-\\x{d7b7}\\x{d7b9}-\\x{d7ba}]{12,12}+\n        Ket\n        End\n------------------------------------------------------------------\n  \\x{8000}\\x{d7af}\\x{d7b2}\\x{d7b5}\\x{d7b8}\\x{d7bb}\\x{100}\\x{800}\\x{7000}\\x{7fff}\\x{d7b0}\\x{d7b1}\\x{d7b3}\\x{d7b4}\\x{d7b6}\\x{d7b7}\\x{d7b9}\\x{d7ba}\\x{100}\n 0: \\x{100}\\x{800}\\x{7000}\\x{7fff}\\x{d7b0}\\x{d7b1}\\x{d7b3}\\x{d7b4}\\x{d7b6}\\x{d7b7}\\x{d7b9}\\x{d7ba}\n\n/([\\x{6535}\\x{6536}\\x{6538}\\x{6539}\\x{653b}\\x{653c}\\x{653e}\\x{653f}\\x{6541}\\x{6542}\\x{8000}-\\x{ffff}]#)+/B,utf\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        [\\x{6535}-\\x{6536}\\x{6538}-\\x{6539}\\x{653b}-\\x{653c}\\x{653e}-\\x{653f}\\x{6541}-\\x{6542}\\x{8000}-\\x{ffff}]\n        #\n        KetRmax\n        Ket\n        End\n------------------------------------------------------------------\n  \\x{6534}#\\x{6537}#\\x{653a}#\\x{653d}#\\x{6540}#\\x{6543}#\\x{7fff}#\\x{6535}#\\x{6536}#\\x{6538}#\\x{6539}#\\x{653b}#\\x{653c}#\\x{653e}#\\x{653f}#\\x{6541}#\\x{6542}#\\x{8000}#\\x{c246}#\\x{ffff}\n 0: \\x{6535}#\\x{6536}#\\x{6538}#\\x{6539}#\\x{653b}#\\x{653c}#\\x{653e}#\\x{653f}#\\x{6541}#\\x{6542}#\\x{8000}#\\x{c246}#\n 1: \\x{c246}#\n\n/[\\x{ff}\\x{100}\\x{8000}\\x{8002}\\x{8004}\\x{8006}\\x{8008}\\x{800a}\\x{800c}\\x{800e}]+/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\xff\\x{100}\\x{8000}\\x{8002}\\x{8004}\\x{8006}\\x{8008}\\x{800a}\\x{800c}\\x{800e}]++\n        Ket\n        End\n------------------------------------------------------------------\n  \\x{ff}\\x{100}\\x{8000}\\x{800a}\\x{800e}\\x{101}\n 0: \\x{ff}\\x{100}\\x{8000}\\x{800a}\\x{800e}\n\n/[\\x{ff}-\\x{104}\\x{8000}\\x{8002}\\x{8004}\\x{8006}\\x{8008}\\x{800a}\\x{800c}\\x{800e}]+/B,utf\n------------------------------------------------------------------\n        Bra\n        [\\xff\\x{100}-\\x{104}\\x{8000}\\x{8002}\\x{8004}\\x{8006}\\x{8008}\\x{800a}\\x{800c}\\x{800e}]++\n        Ket\n        End\n------------------------------------------------------------------\n  \\x{ff}\\x{100}\\x{101}\\x{104}\\x{8000}\\x{800a}\\x{800e}\\x{105}\n 0: \\x{ff}\\x{100}\\x{101}\\x{104}\\x{8000}\\x{800a}\\x{800e}\n\n/[[:xdigit:]\\x{400}-\\x{600}]+/utf,ucp\n  !a0\\x{400}\\x{600}9\\x{3ff}\n 0: a0\\x{400}\\x{600}9\n\n/[^[:xdigit:]\\x{400}-\\x{600}]+/utf,ucp\n  \\x{400}(\\x{3ff}\\x{601})\\x{600}\n 0: (\\x{3ff}\\x{601})\n\n/[[:xdigit:]\\x{400}-\\x{600}\\x{700}]+/utf,ucp\n  !A0\\x{700}9\\x{601}\n 0: A0\\x{700}9\n\n/[^[:xdigit:]\\x{400}-\\x{600}\\x{700}]+/utf,ucp\n  \\x{600}(\\x{6ff}\\x{701}\\x{3ff}\\x{601})\\x{700}\n 0: (\\x{6ff}\\x{701}\\x{3ff}\\x{601})\n\n/[[:xdigit:]\\x{400}-\\x{600}\\x{700}-\\x{800}\\x{900}]+/utf,ucp\n  !f0\\x{800}\\x{600}9\\x{601}\n 0: f0\\x{800}\\x{600}9\n\n/[^[:xdigit:]\\x{400}-\\x{600}\\x{700}-\\x{800}\\x{900}]+/utf,ucp\n  \\x{700}[\\x{3ff}\\x{601}\\x{6ff}\\x{801}\\x{8ff}\\x{901}]\\x{900}\n 0: [\\x{3ff}\\x{601}\\x{6ff}\\x{801}\\x{8ff}\\x{901}]\n\n/[[:xdigit:]\\x{400}-\\x{410}\\x{500}\\x{600}-\\x{610}\\x{700}\\x{800}-\\x{810}]+/utf,ucp\n  !F0\\x{400}\\x{410}\\x{500}\\x{600}\\x{610}\\x{700}\\x{800}\\x{810}9\\x{7ff}\n 0: F0\\x{400}\\x{410}\\x{500}\\x{600}\\x{610}\\x{700}\\x{800}\\x{810}9\n\n/[^[:xdigit:]\\x{400}-\\x{410}\\x{500}\\x{600}-\\x{610}\\x{700}\\x{800}-\\x{810}]+/utf,ucp\n  \\x{800}<\\x{3ff}\\x{411}\\x{4ff}\\x{501}\\x{5ff}\\x{611}\\x{6ff}\\x{701}\\x{7ff}\\x{811}>\\x{810}\n 0: <\\x{3ff}\\x{411}\\x{4ff}\\x{501}\\x{5ff}\\x{611}\\x{6ff}\\x{701}\\x{7ff}\\x{811}>\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (UTS#18)\n\n/[\\p{Lu}[\\p{Nd}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{Lu}]\n          xclass: [\\p{Nd}]\n          OR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    0\n 0: 0\n    C\n 0: C\n\\= Expect no match\n    [\nNo match\n    a\nNo match\n\n/[[\\pL][\\p{Nd}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{L}]\n          xclass: [\\p{Nd}]\n          OR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    0\n 0: 0\n    a\n 0: a\n\\= Expect no match\n    [\nNo match\n    ]\nNo match\n\n/[[\\p{Lu}]||[\\p{Nd}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{Lu}]\n          xclass: [\\p{Nd}]\n          OR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    1\n 0: 1\n\\= Expect no match\n    a\nNo match\n\n/[[^\\pL][\\p{Nd}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [^\\p{L}]\n          xclass: [\\p{Nd}]\n          OR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    0\n 0: 0\n    .\n 0: .\n\\= Expect no match\n    A\nNo match\n\n/[^[\\pL][\\p{Nd}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [^\\p{L}]\n          xclass: [^\\p{Nd}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    .\n 0: .\n\\= Expect no match\n    A\nNo match\n    0\nNo match\n\n/[^[\\pL]&&[\\p{Nd}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [^\\p{L}]\n          xclass: [^\\p{Nd}]\n          OR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    0\n 0: 0\n\n/[[\\p{Lu}\\p{Ll}]||[\\p{Nd}\\p{Ll}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{Lu}\\p{Ll}]\n          xclass: [\\p{Nd}\\p{Ll}]\n          OR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    1\n 0: 1\n    c\n 0: c\n\\= Expect no match\n    _\nNo match\n\n/[[\\p{Lu}\\p{Ll}]&&[\\p{Nd}\\p{Ll}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{Lu}\\p{Ll}]\n          xclass: [\\p{Nd}\\p{Ll}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    c\n 0: c\n\\= Expect no match\n    A\nNo match\n    1\nNo match\n    _\nNo match\n\n/[[\\p{Lu}\\p{Ll}]--[\\p{Nd}\\p{Ll}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{Lu}\\p{Ll}]\n          xclass: [^\\p{Nd}\\p{Ll}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n\\= Expect no match\n    1\nNo match\n    c\nNo match\n    _\nNo match\n\n/[[\\p{Lu}\\p{Ll}]~~[\\p{Nd}\\p{Ll}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{Lu}\\p{Ll}]\n          xclass: [\\p{Nd}\\p{Ll}]\n          XOR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    1\n 0: 1\n\\= Expect no match\n    c\nNo match\n    _\nNo match\n\n/[\\pL[]]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [A-Z\\]a-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    ]\n 0: ]\n\\= Expect no match\n    [\nNo match\n\n/[\\pL[^]]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [^\\]]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    [\n 0: [\n    0\n 0: 0\n\\= Expect no match\n    ]\nNo match\n\n/[\\pL[]]/B,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        [\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n\\= Expect no match\n    ]\nNo match\n    [\nNo match\n\n/[\\pL[^]]/B,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    0\n 0: 0\n    [\n 0: [\n    ]\n 0: ]\n\n/[\\dAC-E[:space:]\\p{Lu}&&[^z]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\x09-\\x0d 0-9A-Z\\xc0-\\xd6\\xd8-\\xde\\p{Lu}]\n        Ket\n        End\n------------------------------------------------------------------\n    0\n 0: 0\n    A\n 0: A\n    C\n 0: C\n    D\n 0: D\n    E\n 0: E\n    \\t\n 0: \\x09\n\\= Expect no match\n    a\nNo match\n    ;\nNo match\n\n/[z||[^\\dAC-E[:space:]\\p{Lu}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [^\\x09-\\x0d 0-9A-Z\\xc0-\\xd6\\xd8-\\xde\\p{Lu}]\n        Ket\n        End\n------------------------------------------------------------------\n    z\n 0: z\n    ;\n 0: ;\n\\= Expect no match\n    0\nNo match\n    A\nNo match\n    C\nNo match\n    D\nNo match\n    E\nNo match\n    B\nNo match\n    F\nNo match\n    \\t\nNo match\n\n/[\\p{Lu}\\p{Nd}||cd]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [0-9A-Zcd\\xc0-\\xd6\\xd8-\\xde\\p{Lu}\\p{Nd}]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    0\n 0: 0\n    c\n 0: c\n\\= Expect no match\n    e\nNo match\n\n/[[\\p{Lu}]\\p{Nd}||[c]d]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          bitmap: [0-9A-Zcd\\xc0-\\xd6\\xd8-\\xde]\n          xclass: [\\p{Lu}]\n          xclass: [\\p{Nd}]\n          OR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    0\n 0: 0\n    c\n 0: c\n\\= Expect no match\n    e\nNo match\n\n/[\\p{Lu}[\\p{Nd}]||c[d]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          bitmap: [0-9A-Zcd\\xc0-\\xd6\\xd8-\\xde]\n          xclass: [\\p{Lu}]\n          xclass: [\\p{Nd}]\n          OR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    0\n 0: 0\n    c\n 0: c\n\\= Expect no match\n    e\nNo match\n\n/[\\p{Lu}-]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-A-Z\\xc0-\\xd6\\xd8-\\xde\\p{Lu}]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    -\n 0: -\n\\= Expect no match\n    a\nNo match\n\n/[-\\p{Lu}]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-A-Z\\xc0-\\xd6\\xd8-\\xde\\p{Lu}]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    -\n 0: -\n\\= Expect no match\n    a\nNo match\n\n/[\\pL-]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    -\n 0: -\n\\= Expect no match\n    0\nNo match\n\n/[-\\pL]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\-A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    -\n 0: -\n\\= Expect no match\n    0\nNo match\n\n/[\\p{Lu}-]/B\n------------------------------------------------------------------\n        Bra\n        [\\-A-Z\\xc0-\\xd6\\xd8-\\xde\\p{Lu}]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    -\n 0: -\n\\= Expect no match\n    a\nNo match\n\n/[-\\p{Lu}]/B\n------------------------------------------------------------------\n        Bra\n        [\\-A-Z\\xc0-\\xd6\\xd8-\\xde\\p{Lu}]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    -\n 0: -\n\\= Expect no match\n    a\nNo match\n\n/[\\pL-]/B\n------------------------------------------------------------------\n        Bra\n        [\\-A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    -\n 0: -\n\\= Expect no match\n    0\nNo match\n\n/[-\\pL]/B\n------------------------------------------------------------------\n        Bra\n        [\\-A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n    -\n 0: -\n\\= Expect no match\n    0\nNo match\n\n/[\\p{Lu}-z]/B,alt_extended_class\nFailed: error 150 at offset 8: invalid range in character class\n        here: [\\p{Lu}- |<--| z]\n\n/[z-\\p{Lu}]/B,alt_extended_class\nFailed: error 150 at offset 9: invalid range in character class\n        here: [z-\\p{Lu} |<--| ]\n\n/[\\pL-z]/B,alt_extended_class\nFailed: error 150 at offset 5: invalid range in character class\n        here: [\\pL- |<--| z]\n\n/[z-\\pL]/B,alt_extended_class\nFailed: error 150 at offset 6: invalid range in character class\n        here: [z-\\pL |<--| ]\n\n/[\\p{Lu}-&&-\\pL]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          bitmap: [\\-A-Z\\xc0-\\xd6\\xd8-\\xde]\n          xclass: [\\p{Lu}]\n          xclass: [\\p{L}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    -\n 0: -\n    A\n 0: A\n\\= Expect no match\n    a\nNo match\n\n/[-\\p{Lu}&&\\pL-]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          bitmap: [\\-A-Z\\xc0-\\xd6\\xd8-\\xde]\n          xclass: [\\p{Lu}]\n          xclass: [\\p{L}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    -\n 0: -\n    A\n 0: A\n\\= Expect no match\n    a\nNo match\n\n/[[\\p{Lu}]-&&-[\\pL]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          bitmap: [\\-A-Z\\xc0-\\xd6\\xd8-\\xde]\n          xclass: [\\p{Lu}]\n          xclass: [\\p{L}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    -\n 0: -\n    A\n 0: A\n\\= Expect no match\n    a\nNo match\n\n/[-[\\p{Lu}]&&[\\pL]-]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          bitmap: [\\-A-Z\\xc0-\\xd6\\xd8-\\xde]\n          xclass: [\\p{Lu}]\n          xclass: [\\p{L}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    -\n 0: -\n    A\n 0: A\n\\= Expect no match\n    a\nNo match\n\n/(?xx:[  ^  5[  ^  \\p{Nd}]  ])/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        Bra\n        [0-46-9\\p{Nd}]\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    4\n 0: 4\n\\= Expect no match\n    a\nNo match\n    ;\nNo match\n    5\nNo match\n\n/(?xx:[  ^  \\p{Nd}[  ^  5]  ])/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        Bra\n        []\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    a\nNo match\n    ;\nNo match\n    4\nNo match\n    5\nNo match\n\n/(?xx:[  ^  \\p{Nd}[  ^  \\p{Nd}]  ])/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        Bra\n        eclass[\n          no bitmap\n          xclass: [^\\p{Nd}]\n          xclass: [\\p{Nd}]\n          AND\n        ]\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    a\nNo match\n    ;\nNo match\n    4\nNo match\n    5\nNo match\n\n/[  ^  \\p{Ll}[  ^  \\p{Nd}]  ]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          bitmap: [ 0-9^a-z\\xb5\\xdf-\\xf6\\xf8-\\xff]\n          xclass: [\\p{Ll}]\n          xclass: [\\p{Nd}]\n          OR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x20\n 0:  \n    ^\n 0: ^\n    a\n 0: a\n    0\n 0: 0\n\\= Expect no match\n    A\nNo match\n    ;\nNo match\n\n/[a-c--\\p{Nd}]+/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [a-c]++\n        Ket\n        End\n------------------------------------------------------------------\n    ac\n 0: ac\n    a\n 0: a\n\\= Expect no match\n    0\nNo match\n\n/[a-c--\\p{Nd}]{2,3}/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [a-c]{2,3}+\n        Ket\n        End\n------------------------------------------------------------------\n    ac\n 0: ac\n    cac\n 0: cac\n\\= Expect no match\n    a\nNo match\n    00\nNo match\n\n/x[a-c--\\p{Nd}]+y/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        x\n        [a-c]++\n        y\n        Ket\n        End\n------------------------------------------------------------------\n    xacy\n 0: xacy\n    xaay\n 0: xaay\n    xay\n 0: xay\n\\= Expect no match\n    zacy\nNo match\n    xacz\nNo match\n    xy\nNo match\n    x0y\nNo match\n\n/[\\pL--\\pL--\\pL]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{L}]\n          xclass: [^\\p{L}]\n          AND\n          xclass: [^\\p{L}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    A\nNo match\n    1\nNo match\n\n/[[\\pL--\\pL]--\\pL]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{L}]\n          xclass: [^\\p{L}]\n          AND\n          xclass: [^\\p{L}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    A\nNo match\n    1\nNo match\n\n/[\\pL--[\\pL--\\pL]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{L}]\n          xclass: [^\\p{L}]\n          xclass: [\\p{L}]\n          OR\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n\\= Expect no match\n    1\nNo match\n\n/[\\pL--^\\p{Nd}]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          bitmap: [A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff]\n          xclass: [\\p{L}]\n          xclass: [^\\p{Nd}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    A\n 0: A\n\\= Expect no match\n    1\nNo match\n    ^\nNo match\n\n/([a-z--[\\pL&&n]])\\1/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        [a-mo-z]\n        Ket\n        \\g{1}\n        Ket\n        End\n------------------------------------------------------------------\n    aa\n 0: aa\n 1: a\n    zz\n 0: zz\n 1: z\n\\= Expect no match\n    az\nNo match\n    nn\nNo match\n\n/(x[a-z--[\\pL&&n]]y)\\1/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        CBra 1\n        x\n        [a-mo-z]\n        y\n        Ket\n        \\g{1}\n        Ket\n        End\n------------------------------------------------------------------\n    xayxay\n 0: xayxay\n 1: xay\n    xzyxzy\n 0: xzyxzy\n 1: xzy\n\\= Expect no match\n    xnyxny\nNo match\n\n/(?:_\\1|([a-z--[\\pL&&n]])){2}/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        Bra\n        _\n        \\g{1}\n        Alt\n        CBra 1\n        [a-mo-z]\n        Ket\n        Ket\n        Bra\n        _\n        \\g{1}\n        Alt\n        CBra 1\n        [a-mo-z]\n        Ket\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    a_a\n 0: a_a\n 1: a\n    z_z\n 0: z_z\n 1: z\n\\= Expect no match\n    a_z\nNo match\n    n_n\nNo match\n\n/(?:_\\1|([a-z--[\\pL&&n]]))+/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        Bra\n        _\n        \\g{1}\n        Alt\n        CBra 1\n        [a-mo-z]\n        Ket\n        KetRmax\n        Ket\n        End\n------------------------------------------------------------------\n    a_a\n 0: a_a\n 1: a\n    z_z\n 0: z_z\n 1: z\n    a_partial\n 0: a\n 1: a\n\\= Expect no match\n    n_n\nNo match\n\n/[\\p{Nd}||[\\pL--\\p{Lu}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{Nd}]\n          xclass: [\\p{L}]\n          xclass: [^\\p{Lu}]\n          AND\n          OR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n    0\n 0: 0\n\\= Expect no match\n    C\nNo match\n\n/[\\P{Nd}||2]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\x00-/2:-\\xff\\P{Nd}]\n        Ket\n        End\n------------------------------------------------------------------\n    _\n 0: _\n    Z\n 0: Z\n    2\n 0: 2\n\\= Expect no match\n    1\nNo match\n    3\nNo match\n\n/[^[\\P{Nd}]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [^\\P{Nd}]\n        Ket\n        End\n------------------------------------------------------------------\n    1\n 0: 1\n    2\n 0: 2\n\\= Expect no match\n    _\nNo match\n    z\nNo match\n\n# caseless tests\n\n/[\\p{Lu}~~\\p{Ll}]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{Lu}]\n          xclass: [\\p{Ll}]\n          XOR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n    A\n 0: A\n\\= Expect no match\n    _\nNo match\n    1\nNo match\n\n/[[\\p{Lu}1]~~\\p{Ll}]/iB,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          bitmap: [1]\n          xclass: [\\p{Lc}]\n          xclass: [\\p{Lc}]\n          XOR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    1\n 0: 1\n\\= Expect no match\n    a\nNo match\n    A\nNo match\n    _\nNo match\n\n/[[\\p{Lu}1]&&[\\p{Ll}1]]/B,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          bitmap: [1]\n          xclass: [\\p{Lu}]\n          xclass: [\\p{Ll}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    1\n 0: 1\n\\= Expect no match\n    a\nNo match\n    A\nNo match\n    _\nNo match\n    2\nNo match\n\n/[[\\p{Lu}1]&&[\\p{Ll}1]]/iB,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          bitmap: [1A-Za-z\\xb5\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff]\n          xclass: [\\p{Lc}]\n          xclass: [\\p{Lc}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n    A\n 0: A\n    1\n 0: 1\n\\= Expect no match\n    _\nNo match\n    2\nNo match\n    \\\nNo match\n\n/[\\p{Thai}&&\\p{Nd}]/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\n 0: \\x{e51}\n\\= Expect no match\n    0\nNo match\n    a\nNo match\n    \\x{0e01}\nNo match\n\n/[\\p{Thai}||\\p{Nd}]/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          OR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\n 0: \\x{e51}\n    \\x{0e01}\n 0: \\x{e01}\n    0\n 0: 0\n\\= Expect no match\n    a\nNo match\n\n/[\\p{Thai}~~\\p{Nd}]/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          XOR\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e01}\n 0: \\x{e01}\n    0\n 0: 0\n\\= Expect no match\n    \\x{0e51}\nNo match\n    a\nNo match\n\n/[[\\p{Thai}&&\\p{Nd}]~~[^a]]/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        eclass[\n          bitmap: [^a]\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n          NOT\n        ]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e01}\n 0: \\x{e01}\n    b\n 0: b\n    0\n 0: 0\n\\= Expect no match\n    a\nNo match\n    \\x{0e51}\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]?$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]?\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\n 0: \\x{e51}\n    \\\n 0: \n\\= Expect no match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]??$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]??\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\n 0: \\x{e51}\n    \\\n 0: \n\\= Expect no match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]?+$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]?+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\n 0: \\x{e51}\n    \\\n 0: \n\\= Expect no match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]{3}$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]{3,3}\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\n\\= Expect no match\n    \\x{0e51}\nNo match\n    \\\nNo match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]{3,}$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]{3,}\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\\x{e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\n\\= Expect no match\n    \\x{0e51}\nNo match\n    \\\nNo match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]{3,}?$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]{3,}?\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\\x{e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\n\\= Expect no match\n    \\x{0e51}\nNo match\n    \\\nNo match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]{3,}+$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]{3,}+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\\x{e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\n\\= Expect no match\n    \\x{0e51}\nNo match\n    \\\nNo match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]{,3}$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]{0,3}\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\\n 0: \n    \\x{0e51}\n 0: \\x{e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\n\\= Expect no match\n    \\x{0e51}\\x{0e51}\\x{0e51}\\x{0e51}\nNo match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]{,3}?$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]{0,3}?\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\\n 0: \n    \\x{0e51}\n 0: \\x{e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\n\\= Expect no match\n    \\x{0e51}\\x{0e51}\\x{0e51}\\x{0e51}\nNo match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]{,3}+$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]{0,3}+\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\\n 0: \n    \\x{0e51}\n 0: \\x{e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\n\\= Expect no match\n    \\x{0e51}\\x{0e51}\\x{0e51}\\x{0e51}\nNo match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]+\\x{0e51}$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]+\n        \\x{e51}\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\n\\= Expect no match\n    \\x{0e51}\nNo match\n    \\\nNo match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]+?\\x{0e51}$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]+?\n        \\x{e51}\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\n\\= Expect no match\n    \\x{0e51}\nNo match\n    \\\nNo match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]++\\x{0e51}$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]++\n        \\x{e51}\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    \\x{0e51}\nNo match\n    \\x{0e51}\\x{0e51}\nNo match\n    \\x{0e51}\\x{0e51}\\x{0e51}\nNo match\n    \\\nNo match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]*\\x{0e51}$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]*\n        \\x{e51}\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\n 0: \\x{e51}\n    \\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\n\\= Expect no match\n    \\\nNo match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]*?\\x{0e51}$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]*?\n        \\x{e51}\n        $\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\n 0: \\x{e51}\n    \\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\n    \\x{0e51}\\x{0e51}\\x{0e51}\n 0: \\x{e51}\\x{e51}\\x{e51}\n\\= Expect no match\n    \\\nNo match\n    a\nNo match\n\n/^[\\p{Thai}&&\\p{Nd}]*+\\x{0e51}$/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        ^\n        eclass[\n          no bitmap\n          xclass: [\\p{Thai}]\n          xclass: [\\p{Nd}]\n          AND\n        ]*+\n        \\x{e51}\n        $\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    \\x{0e51}\nNo match\n    \\x{0e51}\\x{0e51}\nNo match\n    \\x{0e51}\\x{0e51}\\x{0e51}\nNo match\n    \\\nNo match\n    a\nNo match\n\n/[^[^\\p{Thai}]]/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\p{Thai}]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e51}\n 0: \\x{e51}\n\\= Expect no match\n    a\nNo match\n\n/[^[^\\p{L}]]/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0e01}\n 0: \\x{e01}\n    a\n 0: a\n\\= Expect no match\n    0\nNo match\n\n/[\\pL&&[^\\x00-\\xFF]]/B,utf,alt_extended_class\n------------------------------------------------------------------\n        Bra\n        [\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{21e}\n 0: \\x{21e}\n\\= Expect no match\n    a\nNo match\n\n/[\\pL&&\\x{100}-\\x{1000}]{3,6}+/utf,alt_extended_class\n    \\x{145}\\x{18b}A\\x{145}\\x{18b}\\x{1C2}\\x{21a}\\x{257}\\x{2ae}\\x{0145}\\x{18b}\n 0: \\x{145}\\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\n    \\x{145}A\\x{145}\\x{18b}\\x{1C2}B\n 0: \\x{145}\\x{18b}\\x{1c2}\n\n/[\\pL&&\\x{100}-\\x{1000}]{3,6}\\x{2A3}/utf,alt_extended_class\n    \\x{145}\\x{18b}\\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\\x{2a3}\n 0: \\x{145}\\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\\x{2a3}\n    \\x{145}\\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{2a3}\n 0: \\x{145}\\x{18b}\\x{1c2}\\x{2a3}\n    \\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{2a3}\\x{2a3}\n 0: \\x{145}\\x{18b}\\x{1c2}\\x{2a3}\\x{2a3}\n    \\x{0145}\\x{18b}\\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\\x{145}\\x{2a3}\n 0: \\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\\x{145}\\x{2a3}\n\n/[\\pL&&\\x{100}-\\x{1000}]{3,6}?\\x{2A3}/utf,alt_extended_class\n    \\x{145}\\x{18b}\\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\\x{2a3}\n 0: \\x{145}\\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\\x{2a3}\n    \\x{145}\\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{2a3}\n 0: \\x{145}\\x{18b}\\x{1c2}\\x{2a3}\n    \\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{2a3}\\x{2a3}\n 0: \\x{145}\\x{18b}\\x{1c2}\\x{2a3}\n    \\x{0145}\\x{18b}\\x{2a3}A\\x{145}\\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\\x{145}\\x{2a3}\n 0: \\x{18b}\\x{1c2}\\x{21a}\\x{257}\\x{2ae}\\x{145}\\x{2a3}\n\n/[\\P{scx=Beng}\\P{scx=Deva}\\pM--[\\x{2000}-\\x{3000}]]+/utf,alt_extended_class\n    \\x{964}\\x{2000}\\x{3000}A\\x{951}\\x{1fff}\\x{3001}\\x{965}\n 0: A\\x{951}\\x{1fff}\\x{3001}\n\n/[\\p{Thai}~~[^]]/B,utf,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        [^\\p{Thai}]\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0d01}\n 0: \\x{d01}\n    a\n 0: a\n\\= Expect no match\n    \\x{0e01}\nNo match\n\n/[[]~~[^]]/B,utf,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0d01}\n 0: \\x{d01}\n    a\n 0: a\n\n/[[^]~~[]]/B,utf,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n    \\x{0d01}\n 0: \\x{d01}\n    a\n 0: a\n\n/[[^]~~[^]]/B,utf,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        []\n        Ket\n        End\n------------------------------------------------------------------\n\\= Expect no match\n    \\x{0d01}\nNo match\n    a\nNo match\n\n/[[^]||\\pL]/B,utf,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n    0\n 0: 0\n    a\n 0: a\n\n/[\\pL||[^]]/B,utf,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        AllAny\n        Ket\n        End\n------------------------------------------------------------------\n    0\n 0: 0\n    a\n 0: a\n\n/[\\pL~~[^]]/B,utf,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        [^\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\n    0\n 0: 0\n\\= Expect no match\n    a\nNo match\n\n/[[^]~~\\pL]/B,utf,alt_extended_class,allow_empty_class\n------------------------------------------------------------------\n        Bra\n        [^\\p{L}]\n        Ket\n        End\n------------------------------------------------------------------\n    0\n 0: 0\n\\= Expect no match\n    a\nNo match\n\n/([\\p{Lu}&&\\p{sc=Hung}]+?\\x{10c81})+#/utf,alt_extended_class\n    \\x{10c80}\\x{10cb2}\\x{10c81}\\x{10c85}\\x{10cb0}\\x{10cf2}\\x{10c81}#\\x{10c80}\\x{10cb2}\\x{10c81}\\x{10c85}\\x{10cb0}\\x{10c81}##\n 0: \\x{10c80}\\x{10cb2}\\x{10c81}\\x{10c85}\\x{10cb0}\\x{10c81}#\n 1: \\x{10c85}\\x{10cb0}\\x{10c81}\n\n/[[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]\n&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]&&[\\pN--[\\pC||\\x{9F5}]]]/utf,alt_extended_class\n\n# --------------\n\n/^([\\h\\x{9000}\\x{9002}\\x{9004}][\\v\\x{9000}\\x{9002}\\x{9004}\\x{9006}\\x{9008}][\\h\\v\\x{9000}],){4}$/B,utf\n------------------------------------------------------------------\n        Bra\n        ^\n        CBra 1\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}\\x{9000}\\x{9002}\\x{9004}]\n        [\\x0a-\\x0d\\x85\\x{2028}-\\x{2029}\\x{9000}\\x{9002}\\x{9004}\\x{9006}\\x{9008}]\n        [\\x09-\\x0d \\x85\\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{2028}-\\x{2029}\\x{202f}\\x{205f}\\x{3000}\\x{9000}]\n        ,\n        Ket\n        CBra 1\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}\\x{9000}\\x{9002}\\x{9004}]\n        [\\x0a-\\x0d\\x85\\x{2028}-\\x{2029}\\x{9000}\\x{9002}\\x{9004}\\x{9006}\\x{9008}]\n        [\\x09-\\x0d \\x85\\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{2028}-\\x{2029}\\x{202f}\\x{205f}\\x{3000}\\x{9000}]\n        ,\n        Ket\n        CBra 1\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}\\x{9000}\\x{9002}\\x{9004}]\n        [\\x0a-\\x0d\\x85\\x{2028}-\\x{2029}\\x{9000}\\x{9002}\\x{9004}\\x{9006}\\x{9008}]\n        [\\x09-\\x0d \\x85\\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{2028}-\\x{2029}\\x{202f}\\x{205f}\\x{3000}\\x{9000}]\n        ,\n        Ket\n        CBra 1\n        [\\x09 \\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{202f}\\x{205f}\\x{3000}\\x{9000}\\x{9002}\\x{9004}]\n        [\\x0a-\\x0d\\x85\\x{2028}-\\x{2029}\\x{9000}\\x{9002}\\x{9004}\\x{9006}\\x{9008}]\n        [\\x09-\\x0d \\x85\\xa0\\x{1680}\\x{180e}\\x{2000}-\\x{200a}\\x{2028}-\\x{2029}\\x{202f}\\x{205f}\\x{3000}\\x{9000}]\n        ,\n        Ket\n        $\n        Ket\n        End\n------------------------------------------------------------------\n  \\x09\\x0a\\x0d,\\x{1680}\\x{2028}\\x{1680},\\x{180e}\\x{2029}\\x{180e},\\x{9000}\\x{9000}\\x{9000},\n 0: \\x{09}\\x{0a}\\x{0d},\\x{1680}\\x{2028}\\x{1680},\\x{180e}\\x{2029}\\x{180e},\\x{9000}\\x{9000}\\x{9000},\n 1: \\x{9000}\\x{9000}\\x{9000},\n\n/[z-\\p{Lu}]/\nFailed: error 150 at offset 9: invalid range in character class\n        here: [z-\\p{Lu} |<--| ]\n\n/[z-\\pL]/\nFailed: error 150 at offset 6: invalid range in character class\n        here: [z-\\pL |<--| ]\n\n/[\\p{Lu}-z]/\nFailed: error 150 at offset 8: invalid range in character class\n        here: [\\p{Lu}- |<--| z]\n\n/[\\pL-z]/\nFailed: error 150 at offset 5: invalid range in character class\n        here: [\\pL- |<--| z]\n\n/[a\\x{e1}]/iB\n------------------------------------------------------------------\n        Bra\n        [Aa\\xe1]\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n    A\n 0: A\n    \\x{e1}\n 0: \\xe1\n\n/[a\\x{e1}]/iB,utf\n------------------------------------------------------------------\n        Bra\n        [Aa\\xc1\\xe1]\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n    A\n 0: A\n    \\x{e1}\n 0: \\x{e1}\n    \\x{c1}\n 0: \\x{c1}\n\n/[a\\x{e1}]/iB,ucp\n------------------------------------------------------------------\n        Bra\n        [Aa\\xc1\\xe1]\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n    A\n 0: A\n    \\x{e1}\n 0: \\xe1\n    \\x{c1}\n 0: \\xc1\n\n/[a\\x{e1}]/iB,ucp,utf\n------------------------------------------------------------------\n        Bra\n        [Aa\\xc1\\xe1]\n        Ket\n        End\n------------------------------------------------------------------\n    a\n 0: a\n    A\n 0: A\n    \\x{e1}\n 0: \\x{e1}\n    \\x{c1}\n 0: \\x{c1}\n\n# End of testinput5\n"
  },
  {
    "path": "testdata/testoutput6",
    "content": "# This set of tests check the DFA matching functionality of pcre2_dfa_match(),\n# excluding UTF and Unicode property support. All matches are done using DFA,\n# forced by setting a default subject modifier at the start.\n    \n#forbid_utf\n#subject dfa\n#newline_default lf anycrlf any\n     \n/abc/\n    abc\n 0: abc\n    \n/ab*c/\n    abc\n 0: abc\n    abbbbc\n 0: abbbbc\n    ac\n 0: ac\n    \n/ab+c/\n    abc\n 0: abc\n    abbbbbbc\n 0: abbbbbbc\n\\= Expect no match \n    ac\nNo match\n    ab\nNo match\n    \n/a*/no_auto_possess\n    a\n 0: a\n 1: \n    aaaaaaaaaaaaaaaaa\nMatched, but offsets vector is too small to show all matches\n 0: aaaaaaaaaaaaaaaaa\n 1: aaaaaaaaaaaaaaaa\n 2: aaaaaaaaaaaaaaa\n 3: aaaaaaaaaaaaaa\n 4: aaaaaaaaaaaaa\n 5: aaaaaaaaaaaa\n 6: aaaaaaaaaaa\n 7: aaaaaaaaaa\n 8: aaaaaaaaa\n 9: aaaaaaaa\n10: aaaaaaa\n11: aaaaaa\n12: aaaaa\n13: aaaa\n14: aaa\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\=ovector=10 \nMatched, but offsets vector is too small to show all matches\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 3: aaaaaaaaaaaaaaaaaaaaaaaaaaa\n 4: aaaaaaaaaaaaaaaaaaaaaaaaaa\n 5: aaaaaaaaaaaaaaaaaaaaaaaaa\n 6: aaaaaaaaaaaaaaaaaaaaaaaa\n 7: aaaaaaaaaaaaaaaaaaaaaaa\n 8: aaaaaaaaaaaaaaaaaaaaaa\n 9: aaaaaaaaaaaaaaaaaaaaa\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\=dfa_shortest\n 0: \n    \n/(a|abcd|african)/\n    a\n 0: a\n    abcd\n 0: abcd\n 1: a\n    african\n 0: african\n 1: a\n    \n/^abc/\n    abcdef\n 0: abc\n\\= Expect no match\n    xyzabc\nNo match\n    xyz\\nabc    \nNo match\n    \n/^abc/m\n    abcdef\n 0: abc\n    xyz\\nabc    \n 0: abc\n\\= Expect no match\n    xyzabc\nNo match\n    \n/\\Aabc/\n    abcdef\n 0: abc\n\\= Expect no match\n    xyzabc\nNo match\n    xyz\\nabc    \nNo match\n    \n/\\Aabc/m\n    abcdef\n 0: abc\n\\= Expect no match\n    xyzabc\nNo match\n    xyz\\nabc    \nNo match\n    \n/\\Gabc/\n    abcdef\n 0: abc\n    xyzabc\\=offset=3\n 0: abc\n\\= Expect no match\n    xyzabc    \nNo match\n    xyzabc\\=offset=2\nNo match\n    \n/x\\dy\\Dz/\n    x9yzz\n 0: x9yzz\n    x0y+z\n 0: x0y+z\n\\= Expect no match\n    xyz\nNo match\n    xxy0z     \nNo match\n    \n/x\\sy\\Sz/\n    x yzz\n 0: x yzz\n    x y+z\n 0: x y+z\n\\= Expect no match\n    xyz\nNo match\n    xxyyz\nNo match\n    \n/x\\wy\\Wz/\n    xxy+z\n 0: xxy+z\n\\= Expect no match\n    xxy0z\nNo match\n    x+y+z         \nNo match\n    \n/x.y/\n    x+y\n 0: x+y\n    x-y\n 0: x-y\n\\= Expect no match\n    x\\ny\nNo match\n    \n/x.y/s\n    x+y\n 0: x+y\n    x-y\n 0: x-y\n    x\\ny\n 0: x\\x0ay\n\n/(a.b(?s)c.d|x.y)p.q/\n    a+bc+dp+q\n 0: a+bc+dp+q\n    a+bc\\ndp+q\n 0: a+bc\\x0adp+q\n    x\\nyp+q \n 0: x\\x0ayp+q\n\\= Expect no match \n    a\\nbc\\ndp+q\nNo match\n    a+bc\\ndp\\nq\nNo match\n    x\\nyp\\nq \nNo match\n\n/a\\d\\z/\n    ba0\n 0: a0\n\\= Expect no match\n    ba0\\n\nNo match\n    ba0\\ncd   \nNo match\n\n/a\\d\\z/m\n    ba0\n 0: a0\n\\= Expect no match\n    ba0\\n\nNo match\n    ba0\\ncd   \nNo match\n\n/a\\d\\Z/\n    ba0\n 0: a0\n    ba0\\n\n 0: a0\n\\= Expect no match\n    ba0\\ncd   \nNo match\n\n/a\\d\\Z/m\n    ba0\n 0: a0\n    ba0\\n\n 0: a0\n\\= Expect no match\n    ba0\\ncd   \nNo match\n\n/a\\d$/\n    ba0\n 0: a0\n    ba0\\n\n 0: a0\n\\= Expect no match\n    ba0\\ncd   \nNo match\n\n/a\\d$/m\n    ba0\n 0: a0\n    ba0\\n\n 0: a0\n    ba0\\ncd   \n 0: a0\n\n/abc/i\n    abc\n 0: abc\n    aBc\n 0: aBc\n    ABC\n 0: ABC\n    \n/[^a]/\n    abcd\n 0: b\n    \n/ab?\\w/\n    abz\n 0: abz\n 1: ab\n    abbz\n 0: abb\n 1: ab\n    azz  \n 0: az\n\n/x{0,3}yz/\n    ayzq\n 0: yz\n    axyzq\n 0: xyz\n    axxyz\n 0: xxyz\n    axxxyzq\n 0: xxxyz\n    axxxxyzq\n 0: xxxyz\n\\= Expect no match\n    ax\nNo match\n    axx     \nNo match\n      \n/x{3}yz/\n    axxxyzq\n 0: xxxyz\n    axxxxyzq\n 0: xxxyz\n\\= Expect no match\n    ax\nNo match\n    axx     \nNo match\n    ayzq\nNo match\n    axyzq\nNo match\n    axxyz\nNo match\n      \n/x{2,3}yz/\n    axxyz\n 0: xxyz\n    axxxyzq\n 0: xxxyz\n    axxxxyzq\n 0: xxxyz\n\\= Expect no match\n    ax\nNo match\n    axx     \nNo match\n    ayzq\nNo match\n    axyzq\nNo match\n      \n/[^a]+/no_auto_possess\n    bac\n 0: b\n    bcdefax\n 0: bcdef\n 1: bcde\n 2: bcd\n 3: bc\n 4: b\n\\= Expect no match\n    aaaaa   \nNo match\n\n/[^a]*/no_auto_possess\n    bac\n 0: b\n 1: \n    bcdefax\n 0: bcdef\n 1: bcde\n 2: bcd\n 3: bc\n 4: b\n 5: \n    aaaaa   \n 0: \n    \n/[^a]{3,5}/no_auto_possess\n    xyz\n 0: xyz\n    awxyza\n 0: wxyz\n 1: wxy\n    abcdefa\n 0: bcdef\n 1: bcde\n 2: bcd\n    abcdefghijk\n 0: bcdef\n 1: bcde\n 2: bcd\n\\= Expect no match\n    axya\nNo match\n    axa\nNo match\n    aaaaa         \nNo match\n\n/\\d*/\n    1234b567\n 0: 1234\n    xyz\n 0: \n    \n/\\D*/\n    a1234b567\n 0: a\n    xyz\n 0: xyz\n     \n/\\d+/\n    ab1234c56\n 0: 1234\n\\= Expect no match\n    xyz\nNo match\n    \n/\\D+/\n    ab123c56\n 0: ab\n\\= Expect no match\n    789\nNo match\n    \n/\\d?A/\n    045ABC\n 0: 5A\n    ABC\n 0: A\n\\= Expect no match\n    XYZ\nNo match\n    \n/\\D?A/\n    ABC\n 0: A\n    BAC\n 0: BA\n    9ABC             \n 0: A\n\n/a+/\n    aaaa\n 0: aaaa\n\n/^.*xyz/\n    xyz\n 0: xyz\n    ggggggggxyz\n 0: ggggggggxyz\n    \n/^.+xyz/\n    abcdxyz\n 0: abcdxyz\n    axyz\n 0: axyz\n\\= Expect no match\n    xyz\nNo match\n    \n/^.?xyz/\n    xyz\n 0: xyz\n    cxyz       \n 0: cxyz\n\n/^\\d{2,3}X/\n    12X\n 0: 12X\n    123X\n 0: 123X\n\\= Expect no match\n    X\nNo match\n    1X\nNo match\n    1234X     \nNo match\n\n/^[abcd]\\d/\n    a45\n 0: a4\n    b93\n 0: b9\n    c99z\n 0: c9\n    d04\n 0: d0\n\\= Expect no match\n    e45\nNo match\n    abcd      \nNo match\n    abcd1234\nNo match\n    1234  \nNo match\n\n/^[abcd]*\\d/\n    a45\n 0: a4\n    b93\n 0: b9\n    c99z\n 0: c9\n    d04\n 0: d0\n    abcd1234\n 0: abcd1\n    1234  \n 0: 1\n\\= Expect no match\n    e45\nNo match\n    abcd      \nNo match\n\n/^[abcd]+\\d/\n    a45\n 0: a4\n    b93\n 0: b9\n    c99z\n 0: c9\n    d04\n 0: d0\n    abcd1234\n 0: abcd1\n\\= Expect no match\n    1234  \nNo match\n    e45\nNo match\n    abcd      \nNo match\n\n/^a+X/\n    aX\n 0: aX\n    aaX \n 0: aaX\n\n/^[abcd]?\\d/\n    a45\n 0: a4\n    b93\n 0: b9\n    c99z\n 0: c9\n    d04\n 0: d0\n    1234  \n 0: 1\n\\= Expect no match\n    abcd1234\nNo match\n    e45\nNo match\n\n/^[abcd]{2,3}\\d/\n    ab45\n 0: ab4\n    bcd93\n 0: bcd9\n\\= Expect no match\n    1234 \nNo match\n    a36 \nNo match\n    abcd1234\nNo match\n    ee45\nNo match\n\n/^(abc)*\\d/\n    abc45\n 0: abc4\n    abcabcabc45\n 0: abcabcabc4\n    42xyz \n 0: 4\n\n/^(abc)+\\d/\n    abc45\n 0: abc4\n    abcabcabc45\n 0: abcabcabc4\n\\= Expect no match\n    42xyz \nNo match\n\n/^(abc)?\\d/\n    abc45\n 0: abc4\n    42xyz \n 0: 4\n\\= Expect no match\n    abcabcabc45\nNo match\n\n/^(abc){2,3}\\d/\n    abcabc45\n 0: abcabc4\n    abcabcabc45\n 0: abcabcabc4\n\\= Expect no match\n    abcabcabcabc45\nNo match\n    abc45\nNo match\n    42xyz \nNo match\n\n/1(abc|xyz)2(?1)3/\n    1abc2abc3456\n 0: 1abc2abc3\n    1abc2xyz3456 \n 0: 1abc2xyz3\n\n/^(a*\\w|ab)=(a*\\w|ab)/\n    ab=ab\n 0: ab=ab\n 1: ab=a\n\n/^(a*\\w|ab)=(?1)/\n    ab=ab\n 0: ab=ab\n 1: ab=a\n\n/^([^()]|\\((?1)*\\))*$/\n    abc\n 0: abc\n    a(b)c\n 0: a(b)c\n    a(b(c))d  \n 0: a(b(c))d\n\\= Expect no match)\n    a(b(c)d  \nNo match\n\n/^>abc>([^()]|\\((?1)*\\))*<xyz<$/\n    >abc>123<xyz<\n 0: >abc>123<xyz<\n    >abc>1(2)3<xyz<\n 0: >abc>1(2)3<xyz<\n    >abc>(1(2)3)<xyz<\n 0: >abc>(1(2)3)<xyz<\n\n/^(?>a*)\\d/\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9\n\\= Expect no match \n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nNo match\n\n/< (?: (?(R) \\d++  | [^<>]*+) | (?R)) * >/x\n    <>\n 0: <>\n    <abcd>\n 0: <abcd>\n    <abc <123> hij>\n 0: <abc <123> hij>\n    <abc <def> hij>\n 0: <def>\n    <abc<>def> \n 0: <abc<>def>\n    <abc<>      \n 0: <>\n\\= Expect no match\n    <abc\nNo match\n\n/^(?(?=abc)\\w{3}:|\\d\\d)$/\n    abc:                          \n 0: abc:\n    12                             \n 0: 12\n\\= Expect no match                     \n    123                       \nNo match\n    xyz                        \nNo match\n                                \n/^(?(?!abc)\\d\\d|\\w{3}:)$/\n    abc:                        \n 0: abc:\n    12         \n 0: 12\n\\= Expect no match\n    123\nNo match\n    xyz    \nNo match\n\n/^(?=abc)\\w{5}:$/\n    abcde:                          \n 0: abcde:\n\\= Expect no match                     \n    abc.. \nNo match\n    123                       \nNo match\n    vwxyz                        \nNo match\n                                \n/^(?!abc)\\d\\d$/\n    12         \n 0: 12\n\\= Expect no match\n    abcde:\nNo match\n    abc..  \nNo match\n    123\nNo match\n    vwxyz    \nNo match\n\n/(?<=abc|xy)123/\n    abc12345\n 0: 123\n    wxy123z\n 0: 123\n\\= Expect no match\n    123abc\nNo match\n\n/(?<!abc|xy)123/\n    123abc\n 0: 123\n    mno123456 \n 0: 123\n\\= Expect no match\n    abc12345\nNo match\n    wxy123z\nNo match\n\n/abc(?C1)xyz/\n    abcxyz\n--->abcxyz\n  1 ^  ^       x\n 0: abcxyz\n    123abcxyz999 \n--->123abcxyz999\n  1    ^  ^          x\n 0: abcxyz\n\n/(ab|cd){3,4}/auto_callout\n  ababab\n--->ababab\n +0 ^          (\n +1 ^          a\n +4 ^          c\n +2 ^^         b\n +3 ^ ^        |\n +1 ^ ^        a\n +4 ^ ^        c\n +2 ^  ^       b\n +3 ^   ^      |\n +1 ^   ^      a\n +4 ^   ^      c\n +2 ^    ^     b\n +3 ^     ^    |\n+12 ^     ^    End of pattern\n +1 ^     ^    a\n +4 ^     ^    c\n 0: ababab\n  abcdabcd\n--->abcdabcd\n +0 ^            (\n +1 ^            a\n +4 ^            c\n +2 ^^           b\n +3 ^ ^          |\n +1 ^ ^          a\n +4 ^ ^          c\n +5 ^  ^         d\n +6 ^   ^        ){3,4}\n +1 ^   ^        a\n +4 ^   ^        c\n +2 ^    ^       b\n +3 ^     ^      |\n+12 ^     ^      End of pattern\n +1 ^     ^      a\n +4 ^     ^      c\n +5 ^      ^     d\n +6 ^       ^    ){3,4}\n+12 ^       ^    End of pattern\n 0: abcdabcd\n 1: abcdab\n  abcdcdcdcdcd  \n--->abcdcdcdcdcd\n +0 ^                (\n +1 ^                a\n +4 ^                c\n +2 ^^               b\n +3 ^ ^              |\n +1 ^ ^              a\n +4 ^ ^              c\n +5 ^  ^             d\n +6 ^   ^            ){3,4}\n +1 ^   ^            a\n +4 ^   ^            c\n +5 ^    ^           d\n +6 ^     ^          ){3,4}\n+12 ^     ^          End of pattern\n +1 ^     ^          a\n +4 ^     ^          c\n +5 ^      ^         d\n +6 ^       ^        ){3,4}\n+12 ^       ^        End of pattern\n 0: abcdcdcd\n 1: abcdcd\n\n/^abc/\n    abcdef\n 0: abc\n\\= Expect no match\n    abcdef\\=notbol\nNo match\n\n/^(a*|xyz)/\n    bcd\n 0: \n    aaabcd\n 0: aaa\n    xyz\n 0: xyz\n 1: \n    xyz\\=notempty\n 0: xyz\n\\= Expect no match\n    bcd\\=notempty\nNo match\n    \n/xyz$/\n    xyz\n 0: xyz\n    xyz\\n\n 0: xyz\n\\= Expect no match\n    xyz\\=noteol\nNo match\n    xyz\\n\\=noteol\nNo match\n    \n/xyz$/m\n    xyz\n 0: xyz\n    xyz\\n \n 0: xyz\n    abcxyz\\npqr \n 0: xyz\n    abcxyz\\npqr\\=noteol\n 0: xyz\n    xyz\\n\\=noteol\n 0: xyz\n\\= Expect no match\n    xyz\\=noteol\nNo match\n\n/\\Gabc/\n    abcdef\n 0: abc\n    defabcxyz\\=offset=3\n 0: abc\n\\= Expect no match \n    defabcxyz\nNo match\n\n/^abcdef/\n    ab\\=ps\nPartial match: ab\n    abcde\\=ps\nPartial match: abcde\n    abcdef\\=ps\n 0: abcdef\n\\= Expect no match\n    abx\\=ps\nNo match\n\n/^a{2,4}\\d+z/\n    a\\=ps\nPartial match: a\n    aa\\=ps\nPartial match: aa\n    aa2\\=ps\nPartial match: aa2\n    aaa\\=ps\nPartial match: aaa\n    aaa23\\=ps\nPartial match: aaa23\n    aaaa12345\\=ps\nPartial match: aaaa12345\n    aa0z\\=ps\n 0: aa0z\n    aaaa4444444444444z\\=ps\n 0: aaaa4444444444444z\n\\= Expect no match\n    az\\=ps\nNo match\n    aaaaa\\=ps\nNo match\n    a56\\=ps\nNo match\n\n/^abcdef/\n   abc\\=ps\nPartial match: abc\n   def\\=dfa_restart\n 0: def\n   \n/(?<=foo)bar/\n   foob\\=ps,offset=2,allusedtext\nPartial match: foob\n               <<<\n   foobar...\\=ps,dfa_restart,offset=4\n 0: ar\n   foobar\\=offset=2\n 0: bar\n\\= Expect no match\n   xyzfo\\=ps\nNo match\n   obar\\=dfa_restart\nNo match\n\n/(ab*(cd|ef))+X/\n    lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\\=ps,notbol,noteol\nPartial match: abbbbbbcdaefabbbbbbbefa\n    cdabbbbbbbb\\=ps,notbol,dfa_restart,noteol\nPartial match: cdabbbbbbbb\n    efabbbbbbbbbbbbbbbb\\=ps,notbol,dfa_restart,noteol\nPartial match: efabbbbbbbbbbbbbbbb\n    bbbbbbbbbbbbcdXyasdfadf\\=ps,notbol,dfa_restart,noteol\n 0: bbbbbbbbbbbbcdX\n\\= Expect no match\n    adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\\=ps,noteol\nNo match\n\n/the quick brown fox/\n    the quick brown fox\n 0: the quick brown fox\n    What do you know about the quick brown fox?\n 0: the quick brown fox\n\\= Expect no match\n    The quick brown FOX\nNo match\n    What do you know about THE QUICK BROWN FOX?\nNo match\n\n/The quick brown fox/i\n    the quick brown fox\n 0: the quick brown fox\n    The quick brown FOX\n 0: The quick brown FOX\n    What do you know about the quick brown fox?\n 0: the quick brown fox\n    What do you know about THE QUICK BROWN FOX?\n 0: THE QUICK BROWN FOX\n\n#if !ebcdic\n\n/abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz/\n    abcd\\t\\n\\r\\f\\a\\e9;\\$\\\\?caxyz\n 0: abcd\\x09\\x0a\\x0d\\x0c\\x07\\x1b9;$\\?caxyz\n\n#endif\n\n/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/\n    abxyzpqrrrabbxyyyypqAzz\n 0: abxyzpqrrrabbxyyyypqAzz\n    abxyzpqrrrabbxyyyypqAzz\n 0: abxyzpqrrrabbxyyyypqAzz\n    aabxyzpqrrrabbxyyyypqAzz\n 0: aabxyzpqrrrabbxyyyypqAzz\n    aaabxyzpqrrrabbxyyyypqAzz\n 0: aaabxyzpqrrrabbxyyyypqAzz\n    aaaabxyzpqrrrabbxyyyypqAzz\n 0: aaaabxyzpqrrrabbxyyyypqAzz\n    abcxyzpqrrrabbxyyyypqAzz\n 0: abcxyzpqrrrabbxyyyypqAzz\n    aabcxyzpqrrrabbxyyyypqAzz\n 0: aabcxyzpqrrrabbxyyyypqAzz\n    aaabcxyzpqrrrabbxyyyypAzz\n 0: aaabcxyzpqrrrabbxyyyypAzz\n    aaabcxyzpqrrrabbxyyyypqAzz\n 0: aaabcxyzpqrrrabbxyyyypqAzz\n    aaabcxyzpqrrrabbxyyyypqqAzz\n 0: aaabcxyzpqrrrabbxyyyypqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqAzz\n 0: aaabcxyzpqrrrabbxyyyypqqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqAzz\n 0: aaabcxyzpqrrrabbxyyyypqqqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqqAzz\n 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz\n    aaabcxyzpqrrrabbxyyyypqqqqqqAzz\n 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz\n    aaaabcxyzpqrrrabbxyyyypqAzz\n 0: aaaabcxyzpqrrrabbxyyyypqAzz\n    abxyzzpqrrrabbxyyyypqAzz\n 0: abxyzzpqrrrabbxyyyypqAzz\n    aabxyzzzpqrrrabbxyyyypqAzz\n 0: aabxyzzzpqrrrabbxyyyypqAzz\n    aaabxyzzzzpqrrrabbxyyyypqAzz\n 0: aaabxyzzzzpqrrrabbxyyyypqAzz\n    aaaabxyzzzzpqrrrabbxyyyypqAzz\n 0: aaaabxyzzzzpqrrrabbxyyyypqAzz\n    abcxyzzpqrrrabbxyyyypqAzz\n 0: abcxyzzpqrrrabbxyyyypqAzz\n    aabcxyzzzpqrrrabbxyyyypqAzz\n 0: aabcxyzzzpqrrrabbxyyyypqAzz\n    aaabcxyzzzzpqrrrabbxyyyypqAzz\n 0: aaabcxyzzzzpqrrrabbxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbxyyyypqAzz\n 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbbxyyyypqAzz\n 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz\n    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz\n 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz\n    aaabcxyzpqrrrabbxyyyypABzz\n 0: aaabcxyzpqrrrabbxyyyypABzz\n    aaabcxyzpqrrrabbxyyyypABBzz\n 0: aaabcxyzpqrrrabbxyyyypABBzz\n    >>>aaabxyzpqrrrabbxyyyypqAzz\n 0: aaabxyzpqrrrabbxyyyypqAzz\n    >aaaabxyzpqrrrabbxyyyypqAzz\n 0: aaaabxyzpqrrrabbxyyyypqAzz\n    >>>>abcxyzpqrrrabbxyyyypqAzz\n 0: abcxyzpqrrrabbxyyyypqAzz\n\\= Expect no match\n    abxyzpqrrabbxyyyypqAzz\nNo match\n    abxyzpqrrrrabbxyyyypqAzz\nNo match\n    abxyzpqrrrabxyyyypqAzz\nNo match\n    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz\nNo match\n    aaaabcxyzzzzpqrrrabbbxyyypqAzz\nNo match\n    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz\nNo match\n\n/^(abc){1,2}zz/\n    abczz\n 0: abczz\n    abcabczz\n 0: abcabczz\n\\= Expect no match\n    zz\nNo match\n    abcabcabczz\nNo match\n    >>abczz\nNo match\n\n/^(b+?|a){1,2}?c/\n    bc\n 0: bc\n    bbc\n 0: bbc\n    bbbc\n 0: bbbc\n    bac\n 0: bac\n    bbac\n 0: bbac\n    aac\n 0: aac\n    abbbbbbbbbbbc\n 0: abbbbbbbbbbbc\n    bbbbbbbbbbbac\n 0: bbbbbbbbbbbac\n\\= Expect no match\n    aaac\nNo match\n    abbbbbbbbbbbac\nNo match\n\n/^(b+|a){1,2}c/\n    bc\n 0: bc\n    bbc\n 0: bbc\n    bbbc\n 0: bbbc\n    bac\n 0: bac\n    bbac\n 0: bbac\n    aac\n 0: aac\n    abbbbbbbbbbbc\n 0: abbbbbbbbbbbc\n    bbbbbbbbbbbac\n 0: bbbbbbbbbbbac\n\\= Expect no match\n    aaac\nNo match\n    abbbbbbbbbbbac\nNo match\n\n/^(b+|a){1,2}?bc/\n    bbc\n 0: bbc\n\n/^(b*|ba){1,2}?bc/\n    babc\n 0: babc\n    bbabc\n 0: bbabc\n    bababc\n 0: bababc\n\\= Expect no match\n    bababbc\nNo match\n    babababc\nNo match\n\n/^(ba|b*){1,2}?bc/\n    babc\n 0: babc\n    bbabc\n 0: bbabc\n    bababc\n 0: bababc\n\\= Expect no match\n    bababbc\nNo match\n    babababc\nNo match\n\n#if !ebcdic\n\n/^\\ca\\cA\\c[\\c{\\c:/\n    \\x01\\x01\\e;z\n 0: \\x01\\x01\\x1b;z\n\n#endif\n\n/^[ab\\]cde]/\n    athing\n 0: a\n    bthing\n 0: b\n    ]thing\n 0: ]\n    cthing\n 0: c\n    dthing\n 0: d\n    ething\n 0: e\n\\= Expect no match\n    fthing\nNo match\n    [thing\nNo match\n    \\\\thing\nNo match\n\n/^[]cde]/\n    ]thing\n 0: ]\n    cthing\n 0: c\n    dthing\n 0: d\n    ething\n 0: e\n\\= Expect no match\n    athing\nNo match\n    fthing\nNo match\n\n/^[^ab\\]cde]/\n    fthing\n 0: f\n    [thing\n 0: [\n    \\\\thing\n 0: \\\n\\= Expect no match\n    athing\nNo match\n    bthing\nNo match\n    ]thing\nNo match\n    cthing\nNo match\n    dthing\nNo match\n    ething\nNo match\n\n/^[^]cde]/\n    athing\n 0: a\n    fthing\n 0: f\n\\= Expect no match\n    ]thing\nNo match\n    cthing\nNo match\n    dthing\nNo match\n    ething\nNo match\n\n/^\\/\n    \n 0: \\x81\n\n/^/\n    \n 0: \\xff\n\n/^[0-9]+$/\n    0\n 0: 0\n    1\n 0: 1\n    2\n 0: 2\n    3\n 0: 3\n    4\n 0: 4\n    5\n 0: 5\n    6\n 0: 6\n    7\n 0: 7\n    8\n 0: 8\n    9\n 0: 9\n    10\n 0: 10\n    100\n 0: 100\n\\= Expect no match\n    abc\nNo match\n\n/^.*nter/\n    enter\n 0: enter\n    inter\n 0: inter\n    uponter\n 0: uponter\n\n/^xxx[0-9]+$/\n    xxx0\n 0: xxx0\n    xxx1234\n 0: xxx1234\n\\= Expect no match\n    xxx\nNo match\n\n/^.+[0-9][0-9][0-9]$/\n    x123\n 0: x123\n    xx123\n 0: xx123\n    123456\n 0: 123456\n    x1234\n 0: x1234\n\\= Expect no match\n    123\nNo match\n\n/^.+?[0-9][0-9][0-9]$/\n    x123\n 0: x123\n    xx123\n 0: xx123\n    123456\n 0: 123456\n    x1234\n 0: x1234\n\\= Expect no match\n    123\nNo match\n\n/^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$/\n    abc!pqr=apquxz.ixr.zzz.ac.uk\n 0: abc!pqr=apquxz.ixr.zzz.ac.uk\n\\= Expect no match\n    !pqr=apquxz.ixr.zzz.ac.uk\nNo match\n    abc!=apquxz.ixr.zzz.ac.uk\nNo match\n    abc!pqr=apquxz:ixr.zzz.ac.uk\nNo match\n    abc!pqr=apquxz.ixr.zzz.ac.ukk\nNo match\n\n/:/\n    Well, we need a colon: somewhere\n 0: :\n\\= Expect no match\n    No match without a colon\nNo match\n\n/([\\da-f:]+)$/i\n    0abc\n 0: 0abc\n    abc\n 0: abc\n    fed\n 0: fed\n    E\n 0: E\n    ::\n 0: ::\n    5f03:12C0::932e\n 0: 5f03:12C0::932e\n    fed def\n 0: def\n    Any old stuff\n 0: ff\n\\= Expect no match\n    0zzz\nNo match\n    gzzz\nNo match\n    fed\\x20\nNo match\n    Any old rubbish\nNo match\n\n/^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/\n    .1.2.3\n 0: .1.2.3\n    A.12.123.0\n 0: A.12.123.0\n\\= Expect no match\n    .1.2.3333\nNo match\n    1.2.3\nNo match\n    1234.2.3\nNo match\n\n/^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$/\n    1 IN SOA non-sp1 non-sp2(\n 0: 1 IN SOA non-sp1 non-sp2(\n    1    IN    SOA    non-sp1    non-sp2   (\n 0: 1    IN    SOA    non-sp1    non-sp2   (\n\\= Expect no match\n    1IN SOA non-sp1 non-sp2(\nNo match\n\n/^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-Z\\d\\-]*)*\\.$/\n    a.\n 0: a.\n    Z.\n 0: Z.\n    2.\n 0: 2.\n    ab-c.pq-r.\n 0: ab-c.pq-r.\n    sxk.zzz.ac.uk.\n 0: sxk.zzz.ac.uk.\n    x-.y-.\n 0: x-.y-.\n\\= Expect no match\n    -abc.peq.\nNo match\n\n/^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$/\n    *.a\n 0: *.a\n    *.b0-a\n 0: *.b0-a\n    *.c3-b.c\n 0: *.c3-b.c\n    *.c-a.b-c\n 0: *.c-a.b-c\n\\= Expect no match\n    *.0\nNo match\n    *.a-\nNo match\n    *.a-b.c-\nNo match\n    *.c-a.0-c\nNo match\n\n/^(?=ab(de))(abd)(e)/\n    abde\n 0: abde\n\n/^(?!(ab)de|x)(abd)(f)/\n    abdf\n 0: abdf\n\n/^(?=(ab(cd)))(ab)/\n    abcd\n 0: ab\n\n/^[\\da-f](\\.[\\da-f])*$/i\n    a.b.c.d\n 0: a.b.c.d\n    A.B.C.D\n 0: A.B.C.D\n    a.b.c.1.2.3.C\n 0: a.b.c.1.2.3.C\n\n/^\\\".*\\\"\\s*(;.*)?$/\n    \\\"1234\\\"\n 0: \"1234\"\n    \\\"abcd\\\" ;\n 0: \"abcd\" ;\n    \\\"\\\" ; rhubarb\n 0: \"\" ; rhubarb\n\\= Expect no match\n    \\\"1234\\\" : things\nNo match\n\n/^$/\n    \\\n 0: \n\n/   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)/x\n    ab c\n 0: ab c\n\\= Expect no match\n    abc\nNo match\n    ab cde\nNo match\n\n/(?x)   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)/\n    ab c\n 0: ab c\n\\= Expect no match\n    abc\nNo match\n    ab cde\nNo match\n\n/^   a\\ b[c ]d       $/x\n    a bcd\n 0: a bcd\n    a b d\n 0: a b d\n\\= Expect no match\n    abcd\nNo match\n    ab d\nNo match\n\n/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/\n    abcdefhijklm\n 0: abcdefhijklm\n\n/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/\n    abcdefhijklm\n 0: abcdefhijklm\n\n/^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]/\n    a+ Z0+\\x08\\n\\x1d\\x12\n 0: a+ Z0+\\x08\\x0a\\x1d\\x12\n\n/^[.^$|()*+?{,}]+/\n    .^\\$(*+)|{?,?}\n 0: .^$(*+)|{?,?}\n\n/^a*\\w/\n    z\n 0: z\n    az\n 0: az\n 1: a\n    aaaz\n 0: aaaz\n 1: aaa\n 2: aa\n 3: a\n    a\n 0: a\n    aa\n 0: aa\n 1: a\n    aaaa\n 0: aaaa\n 1: aaa\n 2: aa\n 3: a\n    a+\n 0: a\n    aa+\n 0: aa\n 1: a\n\n/^a*?\\w/\n    z\n 0: z\n    az\n 0: az\n 1: a\n    aaaz\n 0: aaaz\n 1: aaa\n 2: aa\n 3: a\n    a\n 0: a\n    aa\n 0: aa\n 1: a\n    aaaa\n 0: aaaa\n 1: aaa\n 2: aa\n 3: a\n    a+\n 0: a\n    aa+\n 0: aa\n 1: a\n\n/^a+\\w/\n    az\n 0: az\n    aaaz\n 0: aaaz\n 1: aaa\n 2: aa\n    aa\n 0: aa\n    aaaa\n 0: aaaa\n 1: aaa\n 2: aa\n    aa+\n 0: aa\n\n/^a+?\\w/\n    az\n 0: az\n    aaaz\n 0: aaaz\n 1: aaa\n 2: aa\n    aa\n 0: aa\n    aaaa\n 0: aaaa\n 1: aaa\n 2: aa\n    aa+\n 0: aa\n\n/^\\d{8}\\w{2,}/\n    1234567890\n 0: 1234567890\n    12345678ab\n 0: 12345678ab\n    12345678__\n 0: 12345678__\n\\= Expect no match\n    1234567\nNo match\n\n/^[aeiou\\d]{4,5}$/\n    uoie\n 0: uoie\n    1234\n 0: 1234\n    12345\n 0: 12345\n    aaaaa\n 0: aaaaa\n\\= Expect no match\n    123456\nNo match\n\n/^[aeiou\\d]{4,5}?/\n    uoie\n 0: uoie\n    1234\n 0: 1234\n    12345\n 0: 12345\n 1: 1234\n    aaaaa\n 0: aaaaa\n 1: aaaa\n    123456\n 0: 12345\n 1: 1234\n\n/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/\n    From abcd  Mon Sep 01 12:33:02 1997\n 0: From abcd  Mon Sep 01 12:33\n\n/^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d/\n    From abcd  Mon Sep 01 12:33:02 1997\n 0: From abcd  Mon Sep 01 12:33\n    From abcd  Mon Sep  1 12:33:02 1997\n 0: From abcd  Mon Sep  1 12:33\n\\= Expect no match\n    From abcd  Sep 01 12:33:02 1997\nNo match\n\n/^12.34/s\n    12\\n34\n 0: 12\\x0a34\n    12\\r34\n 0: 12\\x0d34\n\n/\\w+(?=\\t)/\n    the quick brown\\t fox\n 0: brown\n\n/foo(?!bar)(.*)/\n    foobar is foolish see?\n 0: foolish see?\n\n/(?:(?!foo)...|^.{0,2})bar(.*)/\n    foobar crowbar etc\n 0: rowbar etc\n    barrel\n 0: barrel\n    2barrel\n 0: 2barrel\n    A barrel\n 0: A barrel\n\n/^(\\D*)(?=\\d)(?!123)/\n    abc456\n 0: abc\n\\= Expect no match\n    abc123\nNo match\n\n/^1234(?# test newlines\n  inside)/\n    1234\n 0: 1234\n\n/^1234 #comment in extended re\n  /x\n    1234\n 0: 1234\n\n/#rhubarb\n  abcd/x\n    abcd\n 0: abcd\n\n/^abcd#rhubarb/x\n    abcd\n 0: abcd\n\n/(?!^)abc/\n    the abc\n 0: abc\n\\= Expect no match\n    abc\nNo match\n\n/(?=^)abc/\n    abc\n 0: abc\n\\= Expect no match\n    the abc\nNo match\n\n/^[ab]{1,3}(ab*|b)/no_auto_possess\n    aabbbbb\n 0: aabbbbb\n 1: aabbbb\n 2: aabbb\n 3: aabb\n 4: aab\n 5: aa\n\n/^[ab]{1,3}?(ab*|b)/no_auto_possess\n    aabbbbb\n 0: aabbbbb\n 1: aabbbb\n 2: aabbb\n 3: aabb\n 4: aab\n 5: aa\n\n/^[ab]{1,3}?(ab*?|b)/no_auto_possess\n    aabbbbb\n 0: aabbbbb\n 1: aabbbb\n 2: aabbb\n 3: aabb\n 4: aab\n 5: aa\n\n/^[ab]{1,3}(ab*?|b)/no_auto_possess\n    aabbbbb\n 0: aabbbbb\n 1: aabbbb\n 2: aabbb\n 3: aabb\n 4: aab\n 5: aa\n\n#if !ebcdic\n\n/  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                          # optional leading comment\n(?:    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n# address\n|                     #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)             # one word, optionally followed by....\n(?:\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037]  |  # atom and space parts, or...\n\\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)       |  # comments, or...\n\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n# quoted strings\n)*\n<  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                     # leading <\n(?:  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  ,  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n)* # further okay, if led by comma\n:                                # closing colon\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  )? #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n#       address spec\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  > #                  trailing >\n# name and address\n)  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                       # optional trailing comment\n/x\n    Alan Other <user\\@dom.ain>\n 0: Alan Other <user@dom.ain>\n    <user\\@dom.ain>\n 0: user@dom.ain\n 1: user@dom\n    user\\@dom.ain\n 0: user@dom.ain\n 1: user@dom\n    \\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)\n 0: \"A. Other\" <user.1234@dom.ain> (a comment)\n 1: \"A. Other\" <user.1234@dom.ain> \n 2: \"A. Other\" <user.1234@dom.ain>\n    A. Other <user.1234\\@dom.ain> (a comment)\n 0:  Other <user.1234@dom.ain> (a comment)\n 1:  Other <user.1234@dom.ain> \n 2:  Other <user.1234@dom.ain>\n    \\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay\n 0: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay\n 1: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re\n    A missing angle <user\\@some.where\n 0: user@some.where\n 1: user@some\n\\= Expect no match\n    The quick brown fox\nNo match\n\n/[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional leading comment\n(?:\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# additional words\n)*\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n# address\n|                             #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n# leading word\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] *               # \"normal\" atoms and or spaces\n(?:\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n|\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n) # \"special\" comment or quoted string\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] *            #  more \"normal\"\n)*\n<\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# <\n(?:\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n(?: ,\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n)*  # additional domains\n:\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)?     #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n# Atom\n|                       #  or\n\"                                     # \"\n[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal\n(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*\n\"                                     #        \"\n# Quoted string\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# additional words\n)*\n@\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n(?:\n\\.\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\\[                            # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff\n\\]                           #           ]\n)\n[\\040\\t]*                    # Nab whitespace.\n(?:\n\\(                              #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*\n(?:                                 #       (\n(?:  \\\\ [^\\x80-\\xff]  |\n\\(                            #  (\n[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*\n(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*\n\\)                           #                       )\n)    #         special\n[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*\n)*                                  #            )*\n\\)                             #                )\n[\\040\\t]* )*    # If comment found, allow more spaces.\n# optional trailing comments\n)*\n#       address spec\n>                    #                 >\n# name and address\n)\n/x\n    Alan Other <user\\@dom.ain>\n 0: Alan Other <user@dom.ain>\n    <user\\@dom.ain>\n 0: user@dom.ain\n 1: user@dom\n    user\\@dom.ain\n 0: user@dom.ain\n 1: user@dom\n    \\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)\n 0: \"A. Other\" <user.1234@dom.ain>\n    A. Other <user.1234\\@dom.ain> (a comment)\n 0:  Other <user.1234@dom.ain>\n    \\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay\n 0: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay\n 1: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re\n    A missing angle <user\\@some.where\n 0: user@some.where\n 1: user@some\n\\= Expect no match\n    The quick brown fox\nNo match\n\n#endif\n\n/abc\\0def\\00pqr\\000xyz\\0000AB/\n    abc\\0def\\00pqr\\000xyz\\0000AB\n 0: abc\\x00def\\x00pqr\\x00xyz\\x000AB\n    abc456 abc\\0def\\00pqr\\000xyz\\0000ABCDE\n 0: abc\\x00def\\x00pqr\\x00xyz\\x000AB\n\n/abc\\x0def\\x00pqr\\x000xyz\\x0000AB/\n    abc\\x0def\\x00pqr\\x000xyz\\x0000AB\n 0: abc\\x0def\\x00pqr\\x000xyz\\x0000AB\n    abc456 abc\\x0def\\x00pqr\\x000xyz\\x0000ABCDE\n 0: abc\\x0def\\x00pqr\\x000xyz\\x0000AB\n\n/^[\\000-\\037]/\n    \\0A\n 0: \\x00\n    \\01B\n 0: \\x01\n    \\037C\n 0: \\x1f\n\n/\\0*/\n    \\0\\0\\0\\0\n 0: \\x00\\x00\\x00\\x00\n\n/A\\x0{2,3}Z/\n    The A\\x0\\x0Z\n 0: A\\x00\\x00Z\n    An A\\0\\x0\\0Z\n 0: A\\x00\\x00\\x00Z\n\\= Expect no match\n    A\\0Z\nNo match\n    A\\0\\x0\\0\\x0Z\nNo match\n\n/^\\s/\n    \\040abc\n 0:  \n    \\x0cabc\n 0: \\x0c\n    \\nabc\n 0: \\x0a\n    \\rabc\n 0: \\x0d\n    \\tabc\n 0: \\x09\n\\= Expect no match\n    abc\nNo match\n\n/^a\tb\n    \f  c/x\n    abc\n 0: abc\n\n/ab{1,3}bc/\n    abbbbc\n 0: abbbbc\n    abbbc\n 0: abbbc\n    abbc\n 0: abbc\n\\= Expect no match\n    abc\nNo match\n    abbbbbc\nNo match\n\n/([^.]*)\\.([^:]*):[T ]+(.*)/\n    track1.title:TBlah blah blah\n 0: track1.title:TBlah blah blah\n\n/([^.]*)\\.([^:]*):[T ]+(.*)/i\n    track1.title:TBlah blah blah\n 0: track1.title:TBlah blah blah\n\n/([^.]*)\\.([^:]*):[t ]+(.*)/i\n    track1.title:TBlah blah blah\n 0: track1.title:TBlah blah blah\n\n#if !ebcdic\n\n/^[W-c]+$/\n    WXY_^abc\n 0: WXY_^abc\n\\= Expect no match\n    wxy\nNo match\n\n/^[W-c]+$/i\n    WXY_^abc\n 0: WXY_^abc\n    wxy_^ABC\n 0: wxy_^ABC\n\n/^[\\x3f-\\x5F]+$/i\n    WXY_^abc\n 0: WXY_^abc\n    wxy_^ABC\n 0: wxy_^ABC\n\n#endif\n\n/^abc$/m\n    abc\n 0: abc\n    qqq\\nabc\n 0: abc\n    abc\\nzzz\n 0: abc\n    qqq\\nabc\\nzzz\n 0: abc\n\n/^abc$/\n    abc\n 0: abc\n\\= Expect no match\n    qqq\\nabc\nNo match\n    abc\\nzzz\nNo match\n    qqq\\nabc\\nzzz\nNo match\n\n/\\Aabc\\Z/m\n    abc\n 0: abc\n    abc\\n \n 0: abc\n\\= Expect no match\n    qqq\\nabc\nNo match\n    abc\\nzzz\nNo match\n    qqq\\nabc\\nzzz\nNo match\n    \n/\\A(.)*\\Z/s\n    abc\\ndef\n 0: abc\\x0adef\n\n/\\A(.)*\\Z/m\n\\= Expect no match\n    abc\\ndef\nNo match\n\n/(?:b)|(?::+)/\n    b::c\n 0: b\n    c::b\n 0: ::\n\n/[-az]+/\n    az-\n 0: az-\n\\= Expect no match\n    b\nNo match\n\n/[az-]+/\n    za-\n 0: za-\n\\= Expect no match\n    b\nNo match\n\n/[a\\-z]+/\n    a-z\n 0: a-z\n\\= Expect no match\n    b\nNo match\n\n/[a-z]+/\n    abcdxyz\n 0: abcdxyz\n\n/[\\d-]+/\n    12-34\n 0: 12-34\n\\= Expect no match\n    aaa\nNo match\n\n#if !ebcdic\n\n/\\x5c/\n    \\\\\n 0: \\\n\n/\\x20Z/\n    the Zoo\n 0:  Z\n\\= Expect no match\n    Zulu\nNo match\n\n#endif\n\n/ab{3cd/\n    ab{3cd\n 0: ab{3cd\n\n/ab{3,cd/\n    ab{3,cd\n 0: ab{3,cd\n\n/ab{3,4a}cd/\n    ab{3,4a}cd\n 0: ab{3,4a}cd\n\n/{4,5a}bc/\n    {4,5a}bc\n 0: {4,5a}bc\n\n/^a.b/newline=lf\n    a\\rb\n 0: a\\x0db\n\\= Expect no match\n    a\\nb\nNo match\n\n/abc$/\n    abc\n 0: abc\n    abc\\n\n 0: abc\n\\= Expect no match\n    abc\\ndef\nNo match\n\n#if !ebcdic\n\n/(abc)\\123/\n    abc\\x53\n 0: abcS\n\n/(abc)\\223/\n    abc\\x93\n 0: abc\\x93\n\n/(abc)\\323/\n    abc\\xd3\n 0: abc\\xd3\n\n/(abc)\\100/\n    abc\\x40\n 0: abc@\n    abc\\100\n 0: abc@\n\n/(abc)\\1000/\n    abc\\x400\n 0: abc@0\n    abc\\x40\\x30\n 0: abc@0\n    abc\\1000\n 0: abc@0\n    abc\\100\\x30\n 0: abc@0\n    abc\\100\\060\n 0: abc@0\n    abc\\100\\60\n 0: abc@0\n\n/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123/\n    abcdefghijk\\12S\n 0: abcdefghijk\\x0aS\n\n#endif\n\n/a{0}bc/\n    bc\n 0: bc\n\n/(a|(bc)){0,0}?xyz/\n    xyz\n 0: xyz\n\n#if !ebcdic\n\n/abc[\\10]de/\n    abc\\010de\n 0: abc\\x08de\n\n#endif\n\n/abc[\\1]de/\n    abc\\1de\n 0: abc\\x01de\n\n/(abc)[\\1]de/\n    abc\\1de\n 0: abc\\x01de\n\n/(?s)a.b/\n    a\\nb\n 0: a\\x0ab\n\n/^([^a])([^\\b])([^c]*)([^d]{3,4})/\n    baNOTccccd\n 0: baNOTcccc\n 1: baNOTccc\n 2: baNOTcc\n 3: baNOTc\n    baNOTcccd\n 0: baNOTccc\n 1: baNOTcc\n 2: baNOTc\n    baNOTccd\n 0: baNOTcc\n 1: baNOTc\n    bacccd\n 0: baccc\n\\= Expect no match\n    anything\nNo match\n    b\\bc   \nNo match\n    baccd\nNo match\n\n/[^a]/\n    Abc\n 0: A\n  \n/[^a]/i\n    Abc \n 0: b\n\n/[^a]+/\n    AAAaAbc\n 0: AAA\n  \n/[^a]+/i\n    AAAaAbc \n 0: bc\n\n/[^a]+/\n    bbb\\nccc\n 0: bbb\\x0accc\n   \n/[^k]$/\n    abc\n 0: c\n\\= Expect no match\n    abk   \nNo match\n   \n/[^k]{2,3}$/\n    abc\n 0: abc\n    kbc\n 0: bc\n    kabc \n 0: abc\n\\= Expect no match\n    abk\nNo match\n    akb\nNo match\n    akk \nNo match\n\n/^\\d{8,}\\@.+[^k]$/\n    12345678\\@a.b.c.d\n 0: 12345678@a.b.c.d\n    123456789\\@x.y.z\n 0: 123456789@x.y.z\n\\= Expect no match\n    12345678\\@x.y.uk\nNo match\n    1234567\\@a.b.c.d       \nNo match\n\n/[^a]/\n    aaaabcd\n 0: b\n    aaAabcd \n 0: A\n\n/[^a]/i\n    aaaabcd\n 0: b\n    aaAabcd \n 0: b\n\n/[^az]/\n    aaaabcd\n 0: b\n    aaAabcd \n 0: A\n\n/[^az]/i\n    aaaabcd\n 0: b\n    aaAabcd \n 0: b\n\n#if !ebcdic\n\n/\\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377/\n \\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377\n 0: \\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff\n\n#endif\n\n/P[^*]TAIRE[^*]{1,6}?LL/\n    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx\n 0: PSTAIREISLL\n\n/P[^*]TAIRE[^*]{1,}?LL/\n    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx\n 0: PSTAIREISLL\n\n/(\\.\\d\\d[1-9]?)\\d+/\n    1.230003938\n 0: .230003938\n    1.875000282   \n 0: .875000282\n    1.235  \n 0: .235\n                  \n/(\\.\\d\\d((?=0)|\\d(?=\\d)))/\n    1.230003938      \n 0: .230\n 1: .23\n    1.875000282\n 0: .875\n\\= Expect no match \n    1.235 \nNo match\n    \n/a(?)b/\n    ab \n 0: ab\n \n/\\b(foo)\\s+(\\w+)/i\n    Food is on the foo table\n 0: foo table\n    \n/foo(.*)bar/\n    The food is under the bar in the barn.\n 0: food is under the bar in the bar\n 1: food is under the bar\n    \n/foo(.*?)bar/\n    The food is under the bar in the barn.\n 0: food is under the bar in the bar\n 1: food is under the bar\n\n/(.*)(\\d*)/no_auto_possess\n    I have 2 numbers: 53147\nMatched, but offsets vector is too small to show all matches\n 0: I have 2 numbers: 53147\n 1: I have 2 numbers: 5314\n 2: I have 2 numbers: 531\n 3: I have 2 numbers: 53\n 4: I have 2 numbers: 5\n 5: I have 2 numbers: \n 6: I have 2 numbers:\n 7: I have 2 numbers\n 8: I have 2 number\n 9: I have 2 numbe\n10: I have 2 numb\n11: I have 2 num\n12: I have 2 nu\n13: I have 2 n\n14: I have 2 \n    \n/(.*)(\\d+)/\n    I have 2 numbers: 53147\n 0: I have 2 numbers: 53147\n 1: I have 2\n \n/(.*?)(\\d*)/no_auto_possess\n    I have 2 numbers: 53147\nMatched, but offsets vector is too small to show all matches\n 0: I have 2 numbers: 53147\n 1: I have 2 numbers: 5314\n 2: I have 2 numbers: 531\n 3: I have 2 numbers: 53\n 4: I have 2 numbers: 5\n 5: I have 2 numbers: \n 6: I have 2 numbers:\n 7: I have 2 numbers\n 8: I have 2 number\n 9: I have 2 numbe\n10: I have 2 numb\n11: I have 2 num\n12: I have 2 nu\n13: I have 2 n\n14: I have 2 \n\n/(.*?)(\\d+)/\n    I have 2 numbers: 53147\n 0: I have 2 numbers: 53147\n 1: I have 2\n\n/(.*)(\\d+)$/\n    I have 2 numbers: 53147\n 0: I have 2 numbers: 53147\n\n/(.*?)(\\d+)$/\n    I have 2 numbers: 53147\n 0: I have 2 numbers: 53147\n\n/(.*)\\b(\\d+)$/\n    I have 2 numbers: 53147\n 0: I have 2 numbers: 53147\n\n/(.*\\D)(\\d+)$/\n    I have 2 numbers: 53147\n 0: I have 2 numbers: 53147\n\n/^\\D*(?!123)/\n    ABC123\n 0: AB\n 1: A\n 2: \n     \n/^(\\D*)(?=\\d)(?!123)/\n    ABC445\n 0: ABC\n\\= Expect no match\n    ABC123\nNo match\n    \n/^[W-]46]/\n    W46]789 \n 0: W46]\n    -46]789\n 0: -46]\n\\= Expect no match\n    Wall\nNo match\n    Zebra\nNo match\n    42\nNo match\n    [abcd] \nNo match\n    ]abcd[\nNo match\n\n#if !ebcdic\n       \n/^[W-\\]46]/\n    W46]789 \n 0: W\n    Wall\n 0: W\n    Zebra\n 0: Z\n    Xylophone  \n 0: X\n    42\n 0: 4\n    [abcd] \n 0: [\n    ]abcd[\n 0: ]\n    \\\\backslash \n 0: \\\n\\= Expect no match\n    -46]789\nNo match\n    well\nNo match\n\n#endif\n    \n/\\d\\d\\/\\d\\d\\/\\d\\d\\d\\d/\n    01/01/2000\n 0: 01/01/2000\n\n/word (?:[a-zA-Z0-9]+ ){0,10}otherword/\n  word cat dog elephant mussel cow horse canary baboon snake shark otherword\n 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword\n\\= Expect no match\n  word cat dog elephant mussel cow horse canary baboon snake shark\nNo match\n\n/word (?:[a-zA-Z0-9]+ ){0,300}otherword/\n\\= Expect no match\n  word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope\nNo match\n\n/^(a){0,0}/\n    bcd\n 0: \n    abc\n 0: \n    aab     \n 0: \n\n/^(a){0,1}/\n    bcd\n 0: \n    abc\n 0: a\n 1: \n    aab  \n 0: a\n 1: \n\n/^(a){0,2}/\n    bcd\n 0: \n    abc\n 0: a\n 1: \n    aab  \n 0: aa\n 1: a\n 2: \n\n/^(a){0,3}/\n    bcd\n 0: \n    abc\n 0: a\n 1: \n    aab\n 0: aa\n 1: a\n 2: \n    aaa   \n 0: aaa\n 1: aa\n 2: a\n 3: \n\n/^(a){0,}/\n    bcd\n 0: \n    abc\n 0: a\n 1: \n    aab\n 0: aa\n 1: a\n 2: \n    aaa\n 0: aaa\n 1: aa\n 2: a\n 3: \n    aaaaaaaa    \n 0: aaaaaaaa\n 1: aaaaaaa\n 2: aaaaaa\n 3: aaaaa\n 4: aaaa\n 5: aaa\n 6: aa\n 7: a\n 8: \n\n/^(a){1,1}/\n    abc\n 0: a\n    aab  \n 0: a\n\\= Expect no match\n    bcd\nNo match\n\n/^(a){1,2}/\n    abc\n 0: a\n    aab  \n 0: aa\n 1: a\n\\= Expect no match\n    bcd\nNo match\n\n/^(a){1,3}/\n    abc\n 0: a\n    aab\n 0: aa\n 1: a\n    aaa   \n 0: aaa\n 1: aa\n 2: a\n\\= Expect no match\n    bcd\nNo match\n\n/^(a){1,}/\n    abc\n 0: a\n    aab\n 0: aa\n 1: a\n    aaa\n 0: aaa\n 1: aa\n 2: a\n    aaaaaaaa    \n 0: aaaaaaaa\n 1: aaaaaaa\n 2: aaaaaa\n 3: aaaaa\n 4: aaaa\n 5: aaa\n 6: aa\n 7: a\n\\= Expect no match\n    bcd\nNo match\n\n/.*\\.gif/\n    borfle\\nbib.gif\\nno\n 0: bib.gif\n\n/.{0,}\\.gif/\n    borfle\\nbib.gif\\nno\n 0: bib.gif\n\n/.*\\.gif/m\n    borfle\\nbib.gif\\nno\n 0: bib.gif\n\n/.*\\.gif/s\n    borfle\\nbib.gif\\nno\n 0: borfle\\x0abib.gif\n\n/.*\\.gif/ms\n    borfle\\nbib.gif\\nno\n 0: borfle\\x0abib.gif\n    \n/.*$/\n    borfle\\nbib.gif\\nno\n 0: no\n\n/.*$/m\n    borfle\\nbib.gif\\nno\n 0: borfle\n\n/.*$/s\n    borfle\\nbib.gif\\nno\n 0: borfle\\x0abib.gif\\x0ano\n\n/.*$/ms\n    borfle\\nbib.gif\\nno\n 0: borfle\\x0abib.gif\\x0ano\n 1: borfle\\x0abib.gif\n 2: borfle\n    \n/.*$/\n    borfle\\nbib.gif\\nno\\n\n 0: no\n\n/.*$/m\n    borfle\\nbib.gif\\nno\\n\n 0: borfle\n\n/.*$/s\n    borfle\\nbib.gif\\nno\\n\n 0: borfle\\x0abib.gif\\x0ano\\x0a\n 1: borfle\\x0abib.gif\\x0ano\n\n/.*$/ms\n    borfle\\nbib.gif\\nno\\n\n 0: borfle\\x0abib.gif\\x0ano\\x0a\n 1: borfle\\x0abib.gif\\x0ano\n 2: borfle\\x0abib.gif\n 3: borfle\n    \n/(.*X|^B)/\n    abcde\\n1234Xyz\n 0: 1234X\n    BarFoo \n 0: B\n\\= Expect no match\n    abcde\\nBar  \nNo match\n\n/(.*X|^B)/m\n    abcde\\n1234Xyz\n 0: 1234X\n    BarFoo \n 0: B\n    abcde\\nBar  \n 0: B\n\n/(.*X|^B)/s\n    abcde\\n1234Xyz\n 0: abcde\\x0a1234X\n    BarFoo \n 0: B\n\\= Expect no match\n    abcde\\nBar  \nNo match\n\n/(.*X|^B)/ms\n    abcde\\n1234Xyz\n 0: abcde\\x0a1234X\n    BarFoo \n 0: B\n    abcde\\nBar  \n 0: B\n\n/(?s)(.*X|^B)/\n    abcde\\n1234Xyz\n 0: abcde\\x0a1234X\n    BarFoo \n 0: B\n\\= Expect no match \n    abcde\\nBar  \nNo match\n\n/(?s:.*X|^B)/\n    abcde\\n1234Xyz\n 0: abcde\\x0a1234X\n    BarFoo \n 0: B\n\\= Expect no match \n    abcde\\nBar  \nNo match\n\n/^.*B/\n\\= Expect no match\n    abc\\nB\nNo match\n     \n/(?s)^.*B/\n    abc\\nB\n 0: abc\\x0aB\n\n/(?m)^.*B/\n    abc\\nB\n 0: B\n     \n/(?ms)^.*B/\n    abc\\nB\n 0: abc\\x0aB\n\n/(?ms)^B/\n    abc\\nB\n 0: B\n\n/(?s)B$/\n    B\\n\n 0: B\n\n/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/\n    123456654321\n 0: 123456654321\n  \n/^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d/\n    123456654321 \n 0: 123456654321\n\n/^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]/\n    123456654321\n 0: 123456654321\n  \n/^[abc]{12}/\n    abcabcabcabc\n 0: abcabcabcabc\n    \n/^[a-c]{12}/\n    abcabcabcabc\n 0: abcabcabcabc\n    \n/^(a|b|c){12}/\n    abcabcabcabc \n 0: abcabcabcabc\n\n/^[abcdefghijklmnopqrstuvwxy0123456789]/\n    n\n 0: n\n\\= Expect no match \n    z \nNo match\n\n/abcde{0,0}/\n    abcd\n 0: abcd\n\\= Expect no match\n    abce  \nNo match\n\n/ab[cd]{0,0}e/\n    abe\n 0: abe\n\\= Expect no match\n    abcde \nNo match\n    \n/ab(c){0,0}d/\n    abd\n 0: abd\n\\= Expect no match\n    abcd   \nNo match\n\n/a(b*)/\n    a\n 0: a\n    ab\n 0: ab\n    abbbb\n 0: abbbb\n\\= Expect no match\n    bbbbb    \nNo match\n    \n/ab\\d{0}e/\n    abe\n 0: abe\n\\= Expect no match\n    ab1e   \nNo match\n    \n/\"([^\\\\\"]+|\\\\.)*\"/\n    the \\\"quick\\\" brown fox\n 0: \"quick\"\n    \\\"the \\\\\\\"quick\\\\\\\" brown fox\\\" \n 0: \"the \\\"quick\\\" brown fox\"\n\n/.*?/g,aftertext\n    abc\n 0: abc\n 0+ \n 1: ab\n 2: a\n 3: \n 0: \n 0+ \n  \n/\\b/g,aftertext\n    abc \n 0: \n 0+ abc\n 0: \n 0+ \n\n/\\b/g,aftertext\n    abc \n 0: \n 0+ abc\n 0: \n 0+ \n\n//g\n    abc\n 0: \n 0: \n 0: \n 0: \n\n/<tr([\\w\\W\\s\\d][^<>]{0,})><TD([\\w\\W\\s\\d][^<>]{0,})>([\\d]{0,}\\.)(.*)((<BR>([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>/is\n  <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>\n 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>\n\n/a[^a]b/\n    acb\n 0: acb\n    a\\nb\n 0: a\\x0ab\n    \n/a.b/\n    acb\n 0: acb\n\\= Expect no match \n    a\\nb   \nNo match\n    \n/a[^a]b/s\n    acb\n 0: acb\n    a\\nb  \n 0: a\\x0ab\n    \n/a.b/s\n    acb\n 0: acb\n    a\\nb  \n 0: a\\x0ab\n\n/^(b+?|a){1,2}?c/\n    bac\n 0: bac\n    bbac\n 0: bbac\n    bbbac\n 0: bbbac\n    bbbbac\n 0: bbbbac\n    bbbbbac \n 0: bbbbbac\n\n/^(b+|a){1,2}?c/\n    bac\n 0: bac\n    bbac\n 0: bbac\n    bbbac\n 0: bbbac\n    bbbbac\n 0: bbbbac\n    bbbbbac \n 0: bbbbbac\n    \n/(?!\\A)x/m\n    a\\bx\\n  \n 0: x\n\\= Expect no match\n    x\\nb\\n\nNo match\n    \n/\\x0{ab}/\n    \\0{ab} \n 0: \\x00{ab}\n\n/(A|B)*?CD/\n    CD \n 0: CD\n    \n/(A|B)*CD/\n    CD \n 0: CD\n\n/(?<!bar)foo/\n    foo\n 0: foo\n    catfood\n 0: foo\n    arfootle\n 0: foo\n    rfoosh\n 0: foo\n\\= Expect no match\n    barfoo\nNo match\n    towbarfoo\nNo match\n\n/\\w{3}(?<!bar)foo/\n    catfood\n 0: catfoo\n\\= Expect no match\n    foo\nNo match\n    barfoo\nNo match\n    towbarfoo\nNo match\n\n/(?<=(foo)a)bar/\n    fooabar\n 0: bar\n\\= Expect no match\n    bar\nNo match\n    foobbar\nNo match\n      \n/\\Aabc\\z/m\n    abc\n 0: abc\n\\= Expect no match\n    abc\\n   \nNo match\n    qqq\\nabc\nNo match\n    abc\\nzzz\nNo match\n    qqq\\nabc\\nzzz\nNo match\n\n\"(?>.*/)foo\"\n\\= Expect no match\n    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/\nNo match\n\n\"(?>.*/)foo\"\n    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo\n 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo\n\n/(?>(\\.\\d\\d[1-9]?))\\d+/\n    1.230003938\n 0: .230003938\n    1.875000282\n 0: .875000282\n\\= Expect no match \n    1.235 \nNo match\n\n/^((?>\\w+)|(?>\\s+))*$/\n    now is the time for all good men to come to the aid of the party\n 0: now is the time for all good men to come to the aid of the party\n\\= Expect no match\n    this is not a line with only words and spaces!\nNo match\n    \n/(\\d+)(\\w)/\n    12345a\n 0: 12345a\n 1: 12345\n 2: 1234\n 3: 123\n 4: 12\n    12345+ \n 0: 12345\n 1: 1234\n 2: 123\n 3: 12\n\n/((?>\\d+))(\\w)/\n    12345a\n 0: 12345a\n\\= Expect no match\n    12345+ \nNo match\n\n/(?>a+)b/\n    aaab\n 0: aaab\n\n/((?>a+)b)/\n    aaab\n 0: aaab\n\n/(?>(a+))b/\n    aaab\n 0: aaab\n\n/(?>b)+/\n    aaabbbccc\n 0: bbb\n 1: bb\n 2: b\n\n/(?>a+|b+|c+)*c/\n    aaabbbbccccd\n 0: aaabbbbcccc\n 1: aaabbbbc\n    \n/(a+|b+|c+)*c/\n    aaabbbbccccd\n 0: aaabbbbcccc\n 1: aaabbbbccc\n 2: aaabbbbcc\n 3: aaabbbbc\n\n/((?>[^()]+)|\\([^()]*\\))+/\n    ((abc(ade)ufh()()x\n 0: abc(ade)ufh()()x\n 1: abc(ade)ufh()()\n 2: abc(ade)ufh()\n 3: abc(ade)ufh\n 4: abc(ade)\n 5: abc\n    \n/\\(((?>[^()]+)|\\([^()]+\\))+\\)/\n    (abc)\n 0: (abc)\n    (abc(def)xyz)\n 0: (abc(def)xyz)\n\\= Expect no match\n    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   \nNo match\n\n/a(?-i)b/i\n    ab\n 0: ab\n    Ab\n 0: Ab\n\\= Expect no match \n    aB\nNo match\n    AB\nNo match\n        \n/(a (?x)b c)d e/\n    a bcd e\n 0: a bcd e\n\\= Expect no match\n    a b cd e\nNo match\n    abcd e   \nNo match\n    a bcde \nNo match\n \n/(a b(?x)c d (?-x)e f)/\n    a bcde f\n 0: a bcde f\n\\= Expect no match\n    abcdef  \nNo match\n\n/(a(?i)b)c/\n    abc\n 0: abc\n    aBc\n 0: aBc\n\\= Expect no match\n    abC\nNo match\n    aBC  \nNo match\n    Abc\nNo match\n    ABc\nNo match\n    ABC\nNo match\n    AbC\nNo match\n    \n/a(?i:b)c/\n    abc\n 0: abc\n    aBc\n 0: aBc\n\\= Expect no match \n    ABC\nNo match\n    abC\nNo match\n    aBC\nNo match\n    \n/a(?i:b)*c/\n    aBc\n 0: aBc\n    aBBc\n 0: aBBc\n\\= Expect no match \n    aBC\nNo match\n    aBBC\nNo match\n    \n/a(?=b(?i)c)\\w\\wd/\n    abcd\n 0: abcd\n    abCd\n 0: abCd\n\\= Expect no match\n    aBCd\nNo match\n    abcD     \nNo match\n    \n/(?s-i:more.*than).*million/i\n    more than million\n 0: more than million\n    more than MILLION\n 0: more than MILLION\n    more \\n than Million \n 0: more \\x0a than Million\n\\= Expect no match\n    MORE THAN MILLION    \nNo match\n    more \\n than \\n million \nNo match\n\n/(?:(?s-i)more.*than).*million/i\n    more than million\n 0: more than million\n    more than MILLION\n 0: more than MILLION\n    more \\n than Million \n 0: more \\x0a than Million\n\\= Expect no match\n    MORE THAN MILLION    \nNo match\n    more \\n than \\n million \nNo match\n    \n/(?>a(?i)b+)+c/\n    abc\n 0: abc\n    aBbc\n 0: aBbc\n    aBBc \n 0: aBBc\n\\= Expect no match\n    Abc\nNo match\n    abAb    \nNo match\n    abbC \nNo match\n    \n/(?=a(?i)b)\\w\\wc/\n    abc\n 0: abc\n    aBc\n 0: aBc\n\\= Expect no match\n    Ab \nNo match\n    abC\nNo match\n    aBC     \nNo match\n    \n/(?<=a(?i)b)(\\w\\w)c/\n    abxxc\n 0: xxc\n    aBxxc\n 0: xxc\n\\= Expect no match\n    Abxxc\nNo match\n    ABxxc\nNo match\n    abxxC      \nNo match\n\n/^(?(?=abc)\\w{3}:|\\d\\d)$/\n    abc:\n 0: abc:\n    12\n 0: 12\n\\= Expect no match\n    123\nNo match\n    xyz    \nNo match\n\n/^(?(?!abc)\\d\\d|\\w{3}:)$/\n    abc:\n 0: abc:\n    12\n 0: 12\n\\= Expect no match\n    123\nNo match\n    xyz    \nNo match\n    \n/(?(?<=foo)bar|cat)/\n    foobar\n 0: bar\n    cat\n 0: cat\n    fcat\n 0: cat\n    focat   \n 0: cat\n\\= Expect no match\n    foocat  \nNo match\n\n/(?(?<!foo)cat|bar)/\n    foobar\n 0: bar\n    cat\n 0: cat\n    fcat\n 0: cat\n    focat   \n 0: cat\n\\= Expect no match\n    foocat  \nNo match\n\n/(?>a*)*/\n    a\n 0: a\n 1: \n    aa\n 0: aa\n 1: \n    aaaa\n 0: aaaa\n 1: \n    \n/(abc|)+/\n    abc\n 0: abc\n 1: \n    abcabc\n 0: abcabc\n 1: abc\n 2: \n    abcabcabc\n 0: abcabcabc\n 1: abcabc\n 2: abc\n 3: \n    xyz      \n 0: \n\n/([a]*)*/\n    a\n 0: a\n 1: \n    aaaaa \n 0: aaaaa\n 1: aaaa\n 2: aaa\n 3: aa\n 4: a\n 5: \n \n/([ab]*)*/\n    a\n 0: a\n 1: \n    b\n 0: b\n 1: \n    ababab\n 0: ababab\n 1: ababa\n 2: abab\n 3: aba\n 4: ab\n 5: a\n 6: \n    aaaabcde\n 0: aaaab\n 1: aaaa\n 2: aaa\n 3: aa\n 4: a\n 5: \n    bbbb    \n 0: bbbb\n 1: bbb\n 2: bb\n 3: b\n 4: \n \n/([^a]*)*/\n    b\n 0: b\n 1: \n    bbbb\n 0: bbbb\n 1: bbb\n 2: bb\n 3: b\n 4: \n    aaa   \n 0: \n \n/([^ab]*)*/\n    cccc\n 0: cccc\n 1: ccc\n 2: cc\n 3: c\n 4: \n    abab  \n 0: \n \n/([a]*?)*/\n    a\n 0: a\n 1: \n    aaaa \n 0: aaaa\n 1: aaa\n 2: aa\n 3: a\n 4: \n \n/([ab]*?)*/\n    a\n 0: a\n 1: \n    b\n 0: b\n 1: \n    abab\n 0: abab\n 1: aba\n 2: ab\n 3: a\n 4: \n    baba   \n 0: baba\n 1: bab\n 2: ba\n 3: b\n 4: \n \n/([^a]*?)*/\n    b\n 0: b\n 1: \n    bbbb\n 0: bbbb\n 1: bbb\n 2: bb\n 3: b\n 4: \n    aaa   \n 0: \n \n/([^ab]*?)*/\n    c\n 0: c\n 1: \n    cccc\n 0: cccc\n 1: ccc\n 2: cc\n 3: c\n 4: \n    baba   \n 0: \n \n/(?>a*)*/\n    a\n 0: a\n 1: \n    aaabcde \n 0: aaa\n 1: \n \n/((?>a*))*/\n    aaaaa\n 0: aaaaa\n 1: \n    aabbaa \n 0: aa\n 1: \n \n/((?>a*?))*/\n    aaaaa\n 0: aaaaa\n 1: \n    aabbaa \n 0: aa\n 1: \n\n/(?(?=[^a-z]+[a-z])  \\d{2}-[a-z]{3}-\\d{2}  |  \\d{2}-\\d{2}-\\d{2} ) /x\n    12-sep-98\n 0: 12-sep-98\n    12-09-98\n 0: 12-09-98\n\\= Expect no match\n    sep-12-98\nNo match\n        \n/(?i:saturday|sunday)/\n    saturday\n 0: saturday\n    sunday\n 0: sunday\n    Saturday\n 0: Saturday\n    Sunday\n 0: Sunday\n    SATURDAY\n 0: SATURDAY\n    SUNDAY\n 0: SUNDAY\n    SunDay\n 0: SunDay\n    \n/(a(?i)bc|BB)x/\n    abcx\n 0: abcx\n    aBCx\n 0: aBCx\n    bbx\n 0: bbx\n    BBx\n 0: BBx\n\\= Expect no match\n    abcX\nNo match\n    aBCX\nNo match\n    bbX\nNo match\n    BBX               \nNo match\n\n/^([ab](?i)[cd]|[ef])/\n    ac\n 0: ac\n    aC\n 0: aC\n    bD\n 0: bD\n    elephant\n 0: e\n    Europe \n 0: E\n    frog\n 0: f\n    France\n 0: F\n\\= Expect no match\n    Africa     \nNo match\n\n/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/\n    ab\n 0: ab\n    aBd\n 0: aBd\n    xy\n 0: xy\n    xY\n 0: xY\n    zebra\n 0: z\n    Zambesi\n 0: Z\n\\= Expect no match\n    aCD  \nNo match\n    XY  \nNo match\n\n/(?<=foo\\n)^bar/m\n    foo\\nbar\n 0: bar\n\\= Expect no match\n    bar\nNo match\n    baz\\nbar   \nNo match\n\n/(?<=(?<!foo)bar)baz/\n    barbaz\n 0: baz\n    barbarbaz \n 0: baz\n    koobarbaz \n 0: baz\n\\= Expect no match\n    baz\nNo match\n    foobarbaz \nNo match\n\n# The following tests are taken from the Perl 5.005 test suite; some of them\n# are compatible with 5.004, but I'd rather not have to sort them out.\n\n/abc/\n    abc\n 0: abc\n    xabcy\n 0: abc\n    ababc\n 0: abc\n\\= Expect no match\n    xbc\nNo match\n    axc\nNo match\n    abx\nNo match\n\n/ab*c/\n    abc\n 0: abc\n\n/ab*bc/\n    abc\n 0: abc\n    abbc\n 0: abbc\n    abbbbc\n 0: abbbbc\n\n/.{1}/\n    abbbbc\n 0: a\n\n/.{3,4}/\n    abbbbc\n 0: abbb\n\n/ab{0,}bc/\n    abbbbc\n 0: abbbbc\n\n/ab+bc/\n    abbc\n 0: abbc\n\\= Expect no match\n    abc\nNo match\n    abq\nNo match\n\n/ab+bc/\n    abbbbc\n 0: abbbbc\n\n/ab{1,}bc/\n    abbbbc\n 0: abbbbc\n\n/ab{1,3}bc/\n    abbbbc\n 0: abbbbc\n\n/ab{3,4}bc/\n    abbbbc\n 0: abbbbc\n\n/ab{4,5}bc/\n\\= Expect no match\n    abq\nNo match\n    abbbbc\nNo match\n\n/ab?bc/\n    abbc\n 0: abbc\n    abc\n 0: abc\n\n/ab{0,1}bc/\n    abc\n 0: abc\n\n/ab?bc/\n\n/ab?c/\n    abc\n 0: abc\n\n/ab{0,1}c/\n    abc\n 0: abc\n\n/^abc$/\n    abc\n 0: abc\n\\= Expect no match\n    abbbbc\nNo match\n    abcc\nNo match\n\n/^abc/\n    abcc\n 0: abc\n\n/^abc$/\n\n/abc$/\n    aabc\n 0: abc\n    aabc\n 0: abc\n\\= Expect no match\n    aabcd\nNo match\n\n/^/\n    abc\n 0: \n\n/$/\n    abc\n 0: \n\n/a.c/\n    abc\n 0: abc\n    axc\n 0: axc\n\n/a.*c/\n    axyzc\n 0: axyzc\n\n/a[bc]d/\n    abd\n 0: abd\n\\= Expect no match\n    axyzd\nNo match\n    abc\nNo match\n\n/a[b-d]e/\n    ace\n 0: ace\n\n/a[b-d]/\n    aac\n 0: ac\n\n/a[-b]/\n    a-\n 0: a-\n\n/a[b-]/\n    a-\n 0: a-\n\n/a]/\n    a]\n 0: a]\n\n/a[]]b/\n    a]b\n 0: a]b\n\n/a[^bc]d/\n    aed\n 0: aed\n\\= Expect no match\n    abd\nNo match\n    abd\nNo match\n\n/a[^-b]c/\n    adc\n 0: adc\n\n/a[^]b]c/\n    adc\n 0: adc\n    a-c\n 0: a-c\n\\= Expect no match\n    a]c\nNo match\n\n/\\ba\\b/\n    a-\n 0: a\n    -a\n 0: a\n    -a-\n 0: a\n\n/\\by\\b/\n\\= Expect no match\n    xy\nNo match\n    yz\nNo match\n    xyz\nNo match\n\n/\\Ba\\B/\n\\= Expect no match\n    a-\nNo match\n    -a\nNo match\n    -a-\nNo match\n\n/\\By\\b/\n    xy\n 0: y\n\n/\\by\\B/\n    yz\n 0: y\n\n/\\By\\B/\n    xyz\n 0: y\n\n/\\w/\n    a\n 0: a\n\n/\\W/\n    -\n 0: -\n\\= Expect no match\n    a\nNo match\n\n/a\\sb/\n    a b\n 0: a b\n\n/a\\Sb/\n    a-b\n 0: a-b\n\\= Expect no match\n    a b\nNo match\n\n/\\d/\n    1\n 0: 1\n\n/\\D/\n    -\n 0: -\n\\= Expect no match\n    1\nNo match\n\n/[\\w]/\n    a\n 0: a\n\n/[\\W]/\n    -\n 0: -\n\\= Expect no match\n    a\nNo match\n\n/a[\\s]b/\n    a b\n 0: a b\n\n/a[\\S]b/\n    a-b\n 0: a-b\n\\= Expect no match\n    a b\nNo match\n\n/[\\d]/\n    1\n 0: 1\n\n/[\\D]/\n    -\n 0: -\n\\= Expect no match\n    1\nNo match\n\n/ab|cd/\n    abc\n 0: ab\n    abcd\n 0: ab\n\n/()ef/\n    def\n 0: ef\n\n/$b/\n\n/a\\(b/\n    a(b\n 0: a(b\n\n/a\\(*b/\n    ab\n 0: ab\n    a((b\n 0: a((b\n\n/a\\\\b/\n    a\\\\b\n 0: a\\b\n\\= Expect no match\n    a\\b\nNo match\n\n/((a))/\n    abc\n 0: a\n\n/(a)b(c)/\n    abc\n 0: abc\n\n/a+b+c/\n    aabbabc\n 0: abc\n\n/a{1,}b{1,}c/\n    aabbabc\n 0: abc\n\n/a.+?c/\n    abcabc\n 0: abcabc\n 1: abc\n\n/(a+|b)*/\n    ab\n 0: ab\n 1: a\n 2: \n\n/(a+|b){0,}/\n    ab\n 0: ab\n 1: a\n 2: \n\n/(a+|b)+/\n    ab\n 0: ab\n 1: a\n\n/(a+|b){1,}/\n    ab\n 0: ab\n 1: a\n\n/(a+|b)?/\n    ab\n 0: a\n 1: \n\n/(a+|b){0,1}/\n    ab\n 0: a\n 1: \n\n/[^ab]*/\n    cde\n 0: cde\n\n/abc/\n\\= Expect no match\n    b\nNo match\n\n/a*/\n\n/([abc])*d/\n    abbbcd\n 0: abbbcd\n\n/([abc])*bcd/\n    abcd\n 0: abcd\n\n/a|b|c|d|e/\n    e\n 0: e\n\n/(a|b|c|d|e)f/\n    ef\n 0: ef\n\n/abcd*efg/\n    abcdefg\n 0: abcdefg\n\n/ab*/\n    xabyabbbz\n 0: ab\n    xayabbbz\n 0: a\n\n/(ab|cd)e/\n    abcde\n 0: cde\n\n/[abhgefdc]ij/\n    hij\n 0: hij\n\n/^(ab|cd)e/\n\n/(abc|)ef/\n    abcdef\n 0: ef\n\n/(a|b)c*d/\n    abcd\n 0: bcd\n\n/(ab|ab*)bc/\n    abc\n 0: abc\n\n/a([bc]*)c*/\n    abc\n 0: abc\n 1: a\n\n/a([bc]*)(c*d)/\n    abcd\n 0: abcd\n\n/a([bc]+)(c*d)/\n    abcd\n 0: abcd\n\n/a([bc]*)(c+d)/\n    abcd\n 0: abcd\n\n/a[bcd]*dcdcde/\n    adcdcde\n 0: adcdcde\n\n/a[bcd]+dcdcde/\n\\= Expect no match\n    abcde\nNo match\n    adcdcde\nNo match\n\n/(ab|a)b*c/\n    abc\n 0: abc\n\n/((a)(b)c)(d)/\n    abcd\n 0: abcd\n\n/[a-zA-Z_][a-zA-Z0-9_]*/\n    alpha\n 0: alpha\n\n/^a(bc+|b[eh])g|.h$/\n    abh\n 0: bh\n\n/(bc+d$|ef*g.|h?i(j|k))/\n    effgz\n 0: effgz\n    ij\n 0: ij\n    reffgz\n 0: effgz\n\\= Expect no match\n    effg\nNo match\n    bcdd\nNo match\n\n/((((((((((a))))))))))/\n    a\n 0: a\n\n/(((((((((a)))))))))/\n    a\n 0: a\n\n/multiple words of text/\n\\= Expect no match\n    aa\nNo match\n    uh-uh\nNo match\n\n/multiple words/\n    multiple words, yeah\n 0: multiple words\n\n/(.*)c(.*)/\n    abcde\n 0: abcde\n\n/\\((.*), (.*)\\)/\n    (a, b)\n 0: (a, b)\n\n/[k]/\n\n/abcd/\n    abcd\n 0: abcd\n\n/a(bc)d/\n    abcd\n 0: abcd\n\n/a[-]?c/\n    ac\n 0: ac\n\n/abc/i\n    ABC\n 0: ABC\n    XABCY\n 0: ABC\n    ABABC\n 0: ABC\n\\= Expect no match\n    aaxabxbaxbbx\nNo match\n    XBC\nNo match\n    AXC\nNo match\n    ABX\nNo match\n\n/ab*c/i\n    ABC\n 0: ABC\n\n/ab*bc/i\n    ABC\n 0: ABC\n    ABBC\n 0: ABBC\n\n/ab*?bc/i\n    ABBBBC\n 0: ABBBBC\n\n/ab{0,}?bc/i\n    ABBBBC\n 0: ABBBBC\n\n/ab+?bc/i\n    ABBC\n 0: ABBC\n\n/ab+bc/i\n\\= Expect no match\n    ABC\nNo match\n    ABQ\nNo match\n\n/ab{1,}bc/i\n\n/ab+bc/i\n    ABBBBC\n 0: ABBBBC\n\n/ab{1,}?bc/i\n    ABBBBC\n 0: ABBBBC\n\n/ab{1,3}?bc/i\n    ABBBBC\n 0: ABBBBC\n\n/ab{3,4}?bc/i\n    ABBBBC\n 0: ABBBBC\n\n/ab{4,5}?bc/i\n\\= Expect no match\n    ABQ\nNo match\n    ABBBBC\nNo match\n\n/ab??bc/i\n    ABBC\n 0: ABBC\n    ABC\n 0: ABC\n\n/ab{0,1}?bc/i\n    ABC\n 0: ABC\n\n/ab??bc/i\n\n/ab??c/i\n    ABC\n 0: ABC\n\n/ab{0,1}?c/i\n    ABC\n 0: ABC\n\n/^abc$/i\n    ABC\n 0: ABC\n\\= Expect no match\n    ABBBBC\nNo match\n    ABCC\nNo match\n\n/^abc/i\n    ABCC\n 0: ABC\n\n/^abc$/i\n\n/abc$/i\n    AABC\n 0: ABC\n\n/^/i\n    ABC\n 0: \n\n/$/i\n    ABC\n 0: \n\n/a.c/i\n    ABC\n 0: ABC\n    AXC\n 0: AXC\n\n/a.*?c/i\n    AXYZC\n 0: AXYZC\n\n/a.*c/i\n    AABC\n 0: AABC\n\\= Expect no match\n    AXYZD\nNo match\n\n/a[bc]d/i\n    ABD\n 0: ABD\n\n/a[b-d]e/i\n    ACE\n 0: ACE\n\\= Expect no match\n    ABC\nNo match\n    ABD\nNo match\n\n/a[b-d]/i\n    AAC\n 0: AC\n\n/a[-b]/i\n    A-\n 0: A-\n\n/a[b-]/i\n    A-\n 0: A-\n\n/a]/i\n    A]\n 0: A]\n\n/a[]]b/i\n    A]B\n 0: A]B\n\n/a[^bc]d/i\n    AED\n 0: AED\n\n/a[^-b]c/i\n    ADC\n 0: ADC\n\\= Expect no match\n    ABD\nNo match\n    A-C\nNo match\n\n/a[^]b]c/i\n    ADC\n 0: ADC\n\n/ab|cd/i\n    ABC\n 0: AB\n    ABCD\n 0: AB\n\n/()ef/i\n    DEF\n 0: EF\n\n/$b/i\n\\= Expect no match\n    A]C\nNo match\n    B\nNo match\n\n/a\\(b/i\n    A(B\n 0: A(B\n\n/a\\(*b/i\n    AB\n 0: AB\n    A((B\n 0: A((B\n\n/a\\\\b/i\n\\= Expect no match\n    A\\=notbol\nNo match\n\n/((a))/i\n    ABC\n 0: A\n\n/(a)b(c)/i\n    ABC\n 0: ABC\n\n/a+b+c/i\n    AABBABC\n 0: ABC\n\n/a{1,}b{1,}c/i\n    AABBABC\n 0: ABC\n\n/a.+?c/i\n    ABCABC\n 0: ABCABC\n 1: ABC\n\n/a.*?c/i\n    ABCABC\n 0: ABCABC\n 1: ABC\n\n/a.{0,5}?c/i\n    ABCABC\n 0: ABCABC\n 1: ABC\n\n/(a+|b)*/i\n    AB\n 0: AB\n 1: A\n 2: \n\n/(a+|b){0,}/i\n    AB\n 0: AB\n 1: A\n 2: \n\n/(a+|b)+/i\n    AB\n 0: AB\n 1: A\n\n/(a+|b){1,}/i\n    AB\n 0: AB\n 1: A\n\n/(a+|b)?/i\n    AB\n 0: A\n 1: \n\n/(a+|b){0,1}/i\n    AB\n 0: A\n 1: \n\n/(a+|b){0,1}?/i\n    AB\n 0: A\n 1: \n\n/[^ab]*/i\n    CDE\n 0: CDE\n\n/abc/i\n\n/a*/i\n\n/([abc])*d/i\n    ABBBCD\n 0: ABBBCD\n\n/([abc])*bcd/i\n    ABCD\n 0: ABCD\n\n/a|b|c|d|e/i\n    E\n 0: E\n\n/(a|b|c|d|e)f/i\n    EF\n 0: EF\n\n/abcd*efg/i\n    ABCDEFG\n 0: ABCDEFG\n\n/ab*/i\n    XABYABBBZ\n 0: AB\n    XAYABBBZ\n 0: A\n\n/(ab|cd)e/i\n    ABCDE\n 0: CDE\n\n/[abhgefdc]ij/i\n    HIJ\n 0: HIJ\n\n/^(ab|cd)e/i\n\\= Expect no match\n    ABCDE\nNo match\n\n/(abc|)ef/i\n    ABCDEF\n 0: EF\n\n/(a|b)c*d/i\n    ABCD\n 0: BCD\n\n/(ab|ab*)bc/i\n    ABC\n 0: ABC\n\n/a([bc]*)c*/i\n    ABC\n 0: ABC\n 1: A\n\n/a([bc]*)(c*d)/i\n    ABCD\n 0: ABCD\n\n/a([bc]+)(c*d)/i\n    ABCD\n 0: ABCD\n\n/a([bc]*)(c+d)/i\n    ABCD\n 0: ABCD\n\n/a[bcd]*dcdcde/i\n    ADCDCDE\n 0: ADCDCDE\n\n/a[bcd]+dcdcde/i\n\n/(ab|a)b*c/i\n    ABC\n 0: ABC\n\n/((a)(b)c)(d)/i\n    ABCD\n 0: ABCD\n\n/[a-zA-Z_][a-zA-Z0-9_]*/i\n    ALPHA\n 0: ALPHA\n\n/^a(bc+|b[eh])g|.h$/i\n    ABH\n 0: BH\n\n/(bc+d$|ef*g.|h?i(j|k))/i\n    EFFGZ\n 0: EFFGZ\n    IJ\n 0: IJ\n    REFFGZ\n 0: EFFGZ\n\\= Expect no match\n    ADCDCDE\nNo match\n    EFFG\nNo match\n    BCDD\nNo match\n\n/((((((((((a))))))))))/i\n    A\n 0: A\n\n/(((((((((a)))))))))/i\n    A\n 0: A\n\n/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i\n    A\n 0: A\n\n/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i\n    C\n 0: C\n\n/multiple words of text/i\n\\= Expect no match\n    AA\nNo match\n    UH-UH\nNo match\n\n/multiple words/i\n    MULTIPLE WORDS, YEAH\n 0: MULTIPLE WORDS\n\n/(.*)c(.*)/i\n    ABCDE\n 0: ABCDE\n\n/\\((.*), (.*)\\)/i\n    (A, B)\n 0: (A, B)\n\n/[k]/i\n\n/abcd/i\n    ABCD\n 0: ABCD\n\n/a(bc)d/i\n    ABCD\n 0: ABCD\n\n/a[-]?c/i\n    AC\n 0: AC\n\n/a(?!b)./\n    abad\n 0: ad\n\n/a(?=d)./\n    abad\n 0: ad\n\n/a(?=c|d)./\n    abad\n 0: ad\n\n/a(?:b|c|d)(.)/\n    ace\n 0: ace\n\n/a(?:b|c|d)*(.)/\n    ace\n 0: ace\n 1: ac\n\n/a(?:b|c|d)+?(.)/\n    ace\n 0: ace\n    acdbcdbe\n 0: acdbcdbe\n 1: acdbcdb\n 2: acdbcd\n 3: acdbc\n 4: acdb\n 5: acd\n\n/a(?:b|c|d)+(.)/\n    acdbcdbe\n 0: acdbcdbe\n 1: acdbcdb\n 2: acdbcd\n 3: acdbc\n 4: acdb\n 5: acd\n\n/a(?:b|c|d){2}(.)/\n    acdbcdbe\n 0: acdb\n\n/a(?:b|c|d){4,5}(.)/\n    acdbcdbe\n 0: acdbcdb\n 1: acdbcd\n\n/a(?:b|c|d){4,5}?(.)/\n    acdbcdbe\n 0: acdbcdb\n 1: acdbcd\n\n/((foo)|(bar))*/\n    foobar\n 0: foobar\n 1: foo\n 2: \n\n/a(?:b|c|d){6,7}(.)/\n    acdbcdbe\n 0: acdbcdbe\n\n/a(?:b|c|d){6,7}?(.)/\n    acdbcdbe\n 0: acdbcdbe\n\n/a(?:b|c|d){5,6}(.)/\n    acdbcdbe\n 0: acdbcdbe\n 1: acdbcdb\n\n/a(?:b|c|d){5,6}?(.)/\n    acdbcdbe\n 0: acdbcdbe\n 1: acdbcdb\n\n/a(?:b|c|d){5,7}(.)/\n    acdbcdbe\n 0: acdbcdbe\n 1: acdbcdb\n\n/a(?:b|c|d){5,7}?(.)/\n    acdbcdbe\n 0: acdbcdbe\n 1: acdbcdb\n\n/a(?:b|(c|e){1,2}?|d)+?(.)/\n    ace\n 0: ace\n\n/^(.+)?B/\n    AB\n 0: AB\n\n/^([^a-z])|(\\^)$/\n    .\n 0: .\n\n/^[<>]&/\n    <&OUT\n 0: <&\n\n/(?:(f)(o)(o)|(b)(a)(r))*/\n    foobar\n 0: foobar\n 1: foo\n 2: \n\n/(?<=a)b/\n    ab\n 0: b\n\\= Expect no match\n    cb\nNo match\n    b\nNo match\n\n/(?<!c)b/\n    ab\n 0: b\n    b\n 0: b\n    b\n 0: b\n\n/(?:..)*a/\n    aba\n 0: aba\n 1: a\n\n/(?:..)*?a/\n    aba\n 0: aba\n 1: a\n\n/^(){3,5}/\n    abc\n 0: \n\n/^(a+)*ax/\n    aax\n 0: aax\n\n/^((a|b)+)*ax/\n    aax\n 0: aax\n\n/^((a|bc)+)*ax/\n    aax\n 0: aax\n\n/(a|x)*ab/\n    cab\n 0: ab\n\n/(a)*ab/\n    cab\n 0: ab\n\n/(?:(?i)a)b/\n    ab\n 0: ab\n\n/((?i)a)b/\n    ab\n 0: ab\n\n/(?:(?i)a)b/\n    Ab\n 0: Ab\n\n/((?i)a)b/\n    Ab\n 0: Ab\n\n/(?:(?i)a)b/\n\\= Expect no match\n    cb\nNo match\n    aB\nNo match\n\n/((?i)a)b/\n\n/(?i:a)b/\n    ab\n 0: ab\n\n/((?i:a))b/\n    ab\n 0: ab\n\n/(?i:a)b/\n    Ab\n 0: Ab\n\n/((?i:a))b/\n    Ab\n 0: Ab\n\n/(?i:a)b/\n\\= Expect no match\n    aB\nNo match\n    aB\nNo match\n\n/((?i:a))b/\n\n/(?:(?-i)a)b/i\n    ab\n 0: ab\n\n/((?-i)a)b/i\n    ab\n 0: ab\n\n/(?:(?-i)a)b/i\n    aB\n 0: aB\n\n/((?-i)a)b/i\n    aB\n 0: aB\n\n/(?:(?-i)a)b/i\n    aB\n 0: aB\n\\= Expect no match\n    Ab\nNo match\n\n/((?-i)a)b/i\n\n/(?:(?-i)a)b/i\n    aB\n 0: aB\n\n/((?-i)a)b/i\n    aB\n 0: aB\n\n/(?:(?-i)a)b/i\n\\= Expect no match\n    Ab\nNo match\n    AB\nNo match\n\n/((?-i)a)b/i\n\n/(?-i:a)b/i\n    ab\n 0: ab\n\n/((?-i:a))b/i\n    ab\n 0: ab\n\n/(?-i:a)b/i\n    aB\n 0: aB\n\n/((?-i:a))b/i\n    aB\n 0: aB\n\n/(?-i:a)b/i\n\\= Expect no match\n    AB\nNo match\n    Ab\nNo match\n\n/((?-i:a))b/i\n\n/(?-i:a)b/i\n    aB\n 0: aB\n\n/((?-i:a))b/i\n    aB\n 0: aB\n\n/(?-i:a)b/i\n\\= Expect no match\n    Ab\nNo match\n    AB\nNo match\n\n/((?-i:a))b/i\n\n/((?-i:a.))b/i\n\\= Expect no match\n    AB\nNo match\n    a\\nB\nNo match\n\n/((?s-i:a.))b/i\n    a\\nB\n 0: a\\x0aB\n\n/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/\n    cabbbb\n 0: cabbbb\n\n/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/\n    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n\n/foo\\w*\\d{4}baz/\n    foobar1234baz\n 0: foobar1234baz\n\n/x(~~)*(?:(?:F)?)?/\n    x~~\n 0: x~~\n 1: x\n\n/^a(?#xxx){3}c/\n    aaac\n 0: aaac\n\n/^a (?#xxx) (?#yyy) {3}c/x\n    aaac\n 0: aaac\n\n/(?<![cd])b/\n\\= Expect no match\n    B\\nB\nNo match\n    dbcb\nNo match\n\n/(?<![cd])[ab]/\n    dbaacb\n 0: a\n\n/(?<!(c|d))b/\n\n/(?<!(c|d))[ab]/\n    dbaacb\n 0: a\n\n/(?<!cd)[ab]/\n    cdaccb\n 0: b\n\n/^(?:a?b?)*$/\n\\= Expect no match\n    dbcb\nNo match\n    a--\nNo match\n\n/((?s)^a(.))((?m)^b$)/\n    a\\nb\\nc\\n\n 0: a\\x0ab\n\n/((?m)^b$)/\n    a\\nb\\nc\\n\n 0: b\n\n/(?m)^b/\n    a\\nb\\n\n 0: b\n\n/(?m)^(b)/\n    a\\nb\\n\n 0: b\n\n/((?m)^b)/\n    a\\nb\\n\n 0: b\n\n/\\n((?m)^b)/\n    a\\nb\\n\n 0: \\x0ab\n\n/((?s).)c(?!.)/\n    a\\nb\\nc\\n\n 0: \\x0ac\n    a\\nb\\nc\\n\n 0: \\x0ac\n\n/((?s)b.)c(?!.)/\n    a\\nb\\nc\\n\n 0: b\\x0ac\n    a\\nb\\nc\\n\n 0: b\\x0ac\n\n/^b/\n\n/()^b/\n\\= Expect no match\n    a\\nb\\nc\\n\nNo match\n    a\\nb\\nc\\n\nNo match\n\n/((?m)^b)/\n    a\\nb\\nc\\n\n 0: b\n\n/(?(?!a)a|b)/\n\n/(?(?!a)b|a)/\n    a\n 0: a\n\n/(?(?=a)b|a)/\n\\= Expect no match\n    a\nNo match\n    a\nNo match\n\n/(?(?=a)a|b)/\n    a\n 0: a\n\n/(\\w+:)+/\n    one:\n 0: one:\n\n/$(?<=^(a))/\n    a\n 0: \n\n/([\\w:]+::)?(\\w+)$/\n    abcd\n 0: abcd\n    xy:z:::abcd\n 0: xy:z:::abcd\n\n/^[^bcd]*(c+)/\n    aexycd\n 0: aexyc\n\n/(a*)b+/\n    caab\n 0: aab\n\n/([\\w:]+::)?(\\w+)$/\n    abcd\n 0: abcd\n    xy:z:::abcd\n 0: xy:z:::abcd\n\\= Expect no match\n    abcd:\nNo match\n    abcd:\nNo match\n\n/^[^bcd]*(c+)/\n    aexycd\n 0: aexyc\n\n/(>a+)ab/\n\n/(?>a+)b/\n    aaab\n 0: aaab\n\n/([[:]+)/\n    a:[b]:\n 0: :[\n\n/([[=]+)/\n    a=[b]=\n 0: =[\n\n/([[.]+)/\n    a.[b].\n 0: .[\n\n/((?>a+)b)/\n    aaab\n 0: aaab\n\n/(?>(a+))b/\n    aaab\n 0: aaab\n\n/((?>[^()]+)|\\([^()]*\\))+/\n    ((abc(ade)ufh()()x\n 0: abc(ade)ufh()()x\n 1: abc(ade)ufh()()\n 2: abc(ade)ufh()\n 3: abc(ade)ufh\n 4: abc(ade)\n 5: abc\n\n/a\\Z/\n\\= Expect no match\n    aaab\nNo match\n    a\\nb\\n\nNo match\n\n/b\\Z/\n    a\\nb\\n\n 0: b\n\n/b\\z/\n\n/b\\Z/\n    a\\nb\n 0: b\n\n/b\\z/\n    a\\nb\n 0: b\n    \n/(?>.*)(?<=(abcd|wxyz))/\n    alphabetabcd\n 0: alphabetabcd\n    endingwxyz\n 0: endingwxyz\n\\= Expect no match\n    a rather long string that doesn't end with one of them\nNo match\n\n/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/\n    word cat dog elephant mussel cow horse canary baboon snake shark otherword\n 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword\n\\= Expect no match\n    word cat dog elephant mussel cow horse canary baboon snake shark\nNo match\n  \n/word (?>[a-zA-Z0-9]+ ){0,30}otherword/\n\\= Expect no match\n    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope\nNo match\n\n/(?<=\\d{3}(?!999))foo/\n    999foo\n 0: foo\n    123999foo \n 0: foo\n\\= Expect no match\n    123abcfoo\nNo match\n    \n/(?<=(?!...999)\\d{3})foo/\n    999foo\n 0: foo\n    123999foo \n 0: foo\n\\= Expect no match\n    123abcfoo\nNo match\n\n/(?<=\\d{3}(?!999)...)foo/\n    123abcfoo\n 0: foo\n    123456foo \n 0: foo\n\\= Expect no match\n    123999foo  \nNo match\n    \n/(?<=\\d{3}...)(?<!999)foo/\n    123abcfoo   \n 0: foo\n    123456foo \n 0: foo\n\\= Expect no match\n    123999foo  \nNo match\n\n/((Z)+|A)*/\n    ZABCDEFG\n 0: ZA\n 1: Z\n 2: \n\n/(Z()|A)*/\n    ZABCDEFG\n 0: ZA\n 1: Z\n 2: \n\n/(Z(())|A)*/\n    ZABCDEFG\n 0: ZA\n 1: Z\n 2: \n\n/((?>Z)+|A)*/\n    ZABCDEFG\n 0: ZA\n 1: Z\n 2: \n\n/((?>)+|A)*/\n    ZABCDEFG\n 0: \n\n/a*/g\n    abbab\n 0: a\n 0: \n 0: \n 0: a\n 0: \n 0: \n\n/[[:space:]]+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n 0:  \\x09\\x0a\\x0c\\x0d\\x0b\n     \n/[[:blank:]]+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n 0:  \\x09\n     \n/[\\s]+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n 0:  \\x09\\x0a\\x0c\\x0d\\x0b\n     \n/\\s+/\n    > \\x09\\x0a\\x0c\\x0d\\x0b<\n 0:  \\x09\\x0a\\x0c\\x0d\\x0b\n     \n/a\u000bb/x\n    ab\n 0: ab\n\n/(?!\\A)x/m\n  a\\nxb\\n\n 0: x\n\n/(?!^)x/m\n\\= Expect no match\n    a\\nxb\\n\nNo match\n\n/abc\\Qabc\\Eabc/\n    abcabcabc\n 0: abcabcabc\n    \n/abc\\Q(*+|\\Eabc/\n    abc(*+|abc \n 0: abc(*+|abc\n\n/   abc\\Q abc\\Eabc/x\n    abc abcabc\n 0: abc abcabc\n\\= Expect no match\n    abcabcabc  \nNo match\n    \n/abc#comment\n    \\Q#not comment\n    literal\\E/x\n    abc#not comment\\n    literal     \n 0: abc#not comment\\x0a    literal\n\n/abc#comment\n    \\Q#not comment\n    literal/x\n    abc#not comment\\n    literal     \n 0: abc#not comment\\x0a    literal\n\n/abc#comment\n    \\Q#not comment\n    literal\\E #more comment\n    /x\n    abc#not comment\\n    literal     \n 0: abc#not comment\\x0a    literal\n\n/abc#comment\n    \\Q#not comment\n    literal\\E #more comment/x\n    abc#not comment\\n    literal     \n 0: abc#not comment\\x0a    literal\n\n/\\Qabc\\$xyz\\E/\n    abc\\\\\\$xyz\n 0: abc\\$xyz\n\n/\\Qabc\\E\\$\\Qxyz\\E/\n    abc\\$xyz\n 0: abc$xyz\n\n/\\Gabc/\n    abc\n 0: abc\n\\= Expect no match\n    xyzabc  \nNo match\n\n/\\Gabc./g\n    abc1abc2xyzabc3\n 0: abc1\n 0: abc2\n\n/abc./g\n    abc1abc2xyzabc3 \n 0: abc1\n 0: abc2\n 0: abc3\n\n/a(?x: b c )d/\n    XabcdY\n 0: abcd\n\\= Expect no match \n    Xa b c d Y \nNo match\n\n/((?x)x y z | a b c)/\n    XabcY\n 0: abc\n    AxyzB \n 0: xyz\n\n/(?i)AB(?-i)C/\n    XabCY\n 0: abC\n\\= Expect no match\n    XabcY  \nNo match\n\n/((?i)AB(?-i)C|D)E/\n    abCE\n 0: abCE\n    DE\n 0: DE\n\\= Expect no match\n    abcE\nNo match\n    abCe  \nNo match\n    dE\nNo match\n    De    \nNo match\n\n/[z\\Qa-d]\\E]/\n    z\n 0: z\n    a\n 0: a\n    -\n 0: -\n    d\n 0: d\n    ] \n 0: ]\n\\= Expect no match\n    b     \nNo match\n\n/(a+)*b/\n\\= Expect no match\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \nNo match\n    \n/(?i)reg(?:ul(?:[a]|ae)r|ex)/\n    REGular\n 0: REGular\n    regulaer\n 0: regulaer\n    Regex  \n 0: Regex\n    regulr \n 0: regul\\xe4r\n\n#if !ebcdic\n\n/[--]+/\n    \n 0: \\xc5\\xe6\\xe5\\xe4\\xe0\n    \n 0: \\xc5\\xe6\\xe5\\xe4\\xff\n    \n 0: \\xc5\\xe6\\xe5\\xe4\\xc0\n    \n 0: \\xc5\\xe6\\xe5\\xe4\\xdf\n\n#endif\n\n/(?<=Z)X./\n    \\x84XAZXB\n 0: XB\n\n/^(?(2)a|(1)(2))+$/\n    123a\nFailed: error -40: backreference condition or recursion test is not supported for DFA matching\n\n/(?<=a|bbbb)c/\n    ac\n 0: c\n    bbbbc\n 0: c\n\n/line\\nbreak/\n    this is a line\\nbreak\n 0: line\\x0abreak\n    line one\\nthis is a line\\nbreak in the second line \n 0: line\\x0abreak\n\n/line\\nbreak/firstline\n    this is a line\\nbreak\n 0: line\\x0abreak\n\\= Expect no match \n    line one\\nthis is a line\\nbreak in the second line \nNo match\n\n/line\\nbreak/m,firstline\n    this is a line\\nbreak\n 0: line\\x0abreak\n\\= Expect no match \n    line one\\nthis is a line\\nbreak in the second line \nNo match\n\n/1234/\n    123\\=ps\nPartial match: 123\n\\= Expect no match \n    a4\\=ps,dfa_restart\nNo match\n\n/1234/\n    123\\=ps\nPartial match: 123\n    4\\=ps,dfa_restart\n 0: 4\n\n/^/gm\n    a\\nb\\nc\\n\n 0: \n 0: \n 0: \n    \\ \n 0: \n    \n/(?<=C\\n)^/gm\n    A\\nC\\nC\\n \n 0: \n\n/(?s)A?B/\n    AB\n 0: AB\n    aB  \n 0: B\n\n/(?s)A*B/\n    AB\n 0: AB\n    aB  \n 0: B\n\n/(?m)A?B/\n    AB\n 0: AB\n    aB  \n 0: B\n\n/(?m)A*B/\n    AB\n 0: AB\n    aB  \n 0: B\n\n#if !ebcdic\n\n/Content-Type\\x3A[^\\r\\n]{6,}/\n    Content-Type:xxxxxyyy \n 0: Content-Type:xxxxxyyy\n\n/Content-Type\\x3A[^\\r\\n]{6,}z/\n    Content-Type:xxxxxyyyz\n 0: Content-Type:xxxxxyyyz\n\n/Content-Type\\x3A[^a]{6,}/\n    Content-Type:xxxyyy \n 0: Content-Type:xxxyyy\n\n/Content-Type\\x3A[^a]{6,}z/\n    Content-Type:xxxyyyz\n 0: Content-Type:xxxyyyz\n\n#endif\n\n/^abc/Im,newline=lf\nCapture group count = 0\nOptions: multiline\nForced newline is LF\nFirst code unit at start or follows newline\nLast code unit = 'c'\nSubject length lower bound = 3\n    xyz\\nabc\n 0: abc\n    xyz\\r\\nabc\n 0: abc\n\\= Expect no match\n    xyz\\rabc\nNo match\n    xyzabc\\r\nNo match\n    xyzabc\\rpqr\nNo match\n    xyzabc\\r\\n\nNo match\n    xyzabc\\r\\npqr\nNo match\n\n/^abc/Im,newline=crlf\nCapture group count = 0\nOptions: multiline\nForced newline is CRLF\nFirst code unit at start or follows newline\nLast code unit = 'c'\nSubject length lower bound = 3\n    xyz\\r\\nabclf>\n 0: abc\n\\= Expect no match\n    xyz\\nabclf\nNo match\n    xyz\\rabclf\nNo match\n    \n/^abc/Im,newline=cr\nCapture group count = 0\nOptions: multiline\nForced newline is CR\nFirst code unit at start or follows newline\nLast code unit = 'c'\nSubject length lower bound = 3\n    xyz\\rabc\n 0: abc\n\\= Expect no match\n    xyz\\nabc\nNo match\n    xyz\\r\\nabc\nNo match\n\n/.*/I,newline=lf\nCapture group count = 0\nMay match empty string\nForced newline is LF\nFirst code unit at start or follows newline\nSubject length lower bound = 0\n    abc\\ndef\n 0: abc\n    abc\\rdef\n 0: abc\\x0ddef\n    abc\\r\\ndef\n 0: abc\\x0d\n\n/.*/I,newline=cr\nCapture group count = 0\nMay match empty string\nForced newline is CR\nFirst code unit at start or follows newline\nSubject length lower bound = 0\n    abc\\ndef\n 0: abc\\x0adef\n    abc\\rdef\n 0: abc\n    abc\\r\\ndef\n 0: abc\n\n/.*/I,newline=crlf\nCapture group count = 0\nMay match empty string\nForced newline is CRLF\nFirst code unit at start or follows newline\nSubject length lower bound = 0\n    abc\\ndef\n 0: abc\\x0adef\n    abc\\rdef\n 0: abc\\x0ddef\n    abc\\r\\ndef\n 0: abc\n\n/\\w+(.)(.)?def/Is\nCapture group count = 2\nOptions: dotall\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nLast code unit = 'f'\nSubject length lower bound = 5\n    abc\\ndef\n 0: abc\\x0adef\n    abc\\rdef\n 0: abc\\x0ddef\n    abc\\r\\ndef\n 0: abc\\x0d\\x0adef\n\n/\\w+(.)(.)?def/s\n    abc\\ndef\n 0: abc\\x0adef\n    abc\\rdef\n 0: abc\\x0ddef\n    abc\\r\\ndef\n 0: abc\\x0d\\x0adef\n\n/^\\w+=.*(\\\\\\n.*)*/\n    abc=xyz\\\\\\npqr\n 0: abc=xyz\\\\x0apqr\n 1: abc=xyz\\\\x0apq\n 2: abc=xyz\\\\x0ap\n 3: abc=xyz\\\\x0a\n 4: abc=xyz\\\n 5: abc=xyz\n 6: abc=xy\n 7: abc=x\n 8: abc=\n\n/^(a()*)*/\n    aaaa\n 0: aaaa\n 1: aaa\n 2: aa\n 3: a\n 4: \n\n/^(?:a(?:(?:))*)*/\n    aaaa\n 0: aaaa\n 1: aaa\n 2: aa\n 3: a\n 4: \n\n/^(a()+)+/\n    aaaa\n 0: aaaa\n 1: aaa\n 2: aa\n 3: a\n\n/^(?:a(?:(?:))+)+/\n    aaaa\n 0: aaaa\n 1: aaa\n 2: aa\n 3: a\n\n/(a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nNo match\n\n/(?>a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nNo match\n\n/(?:a|)*\\d/\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\n\\= Expect no match\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nNo match\n\n/^a.b/newline=lf\n    a\\rb\n 0: a\\x0db\n\\= Expect no match\n    a\\nb\nNo match\n\n/^a.b/newline=cr\n    a\\nb\n 0: a\\x0ab\n\\= Expect no match\n    a\\rb\nNo match\n\n/^a.b/newline=anycrlf\n    a\\x85b\n 0: a\\x85b\n\\= Expect no match\n    a\\rb\nNo match\n\n/^a.b/newline=any\n\\= Expect no match\n    a\\nb\nNo match\n    a\\rb\nNo match\n    a\\x85b\nNo match\n\n/^abc./gmx,newline=any\n    abc1 \\x0aabc2 \\x0babc3xx \\x0cabc4 \\x0dabc5xx \\x0d\\x0aabc6 \\x85abc7 JUNK\n 0: abc1\n 0: abc2\n 0: abc3\n 0: abc4\n 0: abc5\n 0: abc6\n 0: abc7\n\n/abc.$/gmx,newline=any\n    abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x85 abc9\n 0: abc1\n 0: abc2\n 0: abc3\n 0: abc4\n 0: abc5\n 0: abc6\n 0: abc9\n\n/^a\\Rb/bsr=unicode\n    a\\nb\n 0: a\\x0ab\n    a\\rb\n 0: a\\x0db\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n    a\\x0bb\n 0: a\\x0bb\n    a\\x0cb\n 0: a\\x0cb\n    a\\x85b   \n 0: a\\x85b\n\\= Expect no match\n    a\\n\\rb    \nNo match\n\n/^a\\R*b/bsr=unicode\n    ab\n 0: ab\n    a\\nb\n 0: a\\x0ab\n    a\\rb\n 0: a\\x0db\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n    a\\x0bb\n 0: a\\x0bb\n    a\\x0cb\n 0: a\\x0cb\n    a\\x85b   \n 0: a\\x85b\n    a\\n\\rb    \n 0: a\\x0a\\x0db\n    a\\n\\r\\x85\\x0cb \n 0: a\\x0a\\x0d\\x85\\x0cb\n\n/^a\\R+b/bsr=unicode\n    a\\nb\n 0: a\\x0ab\n    a\\rb\n 0: a\\x0db\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n    a\\x0bb\n 0: a\\x0bb\n    a\\x0cb\n 0: a\\x0cb\n    a\\x85b   \n 0: a\\x85b\n    a\\n\\rb    \n 0: a\\x0a\\x0db\n    a\\n\\r\\x85\\x0cb \n 0: a\\x0a\\x0d\\x85\\x0cb\n\\= Expect no match\n    ab  \nNo match\n    \n/^a\\R{1,3}b/bsr=unicode\n    a\\nb\n 0: a\\x0ab\n    a\\n\\rb\n 0: a\\x0a\\x0db\n    a\\n\\r\\x85b\n 0: a\\x0a\\x0d\\x85b\n    a\\r\\n\\r\\nb \n 0: a\\x0d\\x0a\\x0d\\x0ab\n    a\\r\\n\\r\\n\\r\\nb \n 0: a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0ab\n    a\\n\\r\\n\\rb\n 0: a\\x0a\\x0d\\x0a\\x0db\n    a\\n\\n\\r\\nb \n 0: a\\x0a\\x0a\\x0d\\x0ab\n\\= Expect no match\n    a\\n\\n\\n\\rb\nNo match\n    a\\r\nNo match\n\n/.+foo/\n    afoo\n 0: afoo\n\\= Expect no match \n    \\r\\nfoo \nNo match\n    \\nfoo \nNo match\n\n/.+foo/newline=crlf\n    afoo\n 0: afoo\n    \\nfoo \n 0: \\x0afoo\n\\= Expect no match \n    \\r\\nfoo \nNo match\n\n/.+foo/newline=any\n    afoo\n 0: afoo\n\\= Expect no match \n    \\nfoo \nNo match\n    \\r\\nfoo \nNo match\n\n/.+foo/s\n    afoo\n 0: afoo\n    \\r\\nfoo \n 0: \\x0d\\x0afoo\n    \\nfoo \n 0: \\x0afoo\n\n/^$/gm,newline=any\n    abc\\r\\rxyz\n 0: \n    abc\\n\\rxyz  \n 0: \n\\= Expect no match \n    abc\\r\\nxyz\nNo match\n\n/^X/m\n    XABC\n 0: X\n\\= Expect no match \n    XABC\\=notbol\nNo match\n\n/(?m)^$/g,newline=any,aftertext\n    abc\\r\\n\\r\\n\n 0: \n 0+ \\x0d\\x0a\n\n/(?m)^$|^\\r\\n/g,newline=any,aftertext\n    abc\\r\\n\\r\\n\n 0: \\x0d\\x0a\n 0+ \n 1: \n    \n/(?m)$/g,newline=any,aftertext\n    abc\\r\\n\\r\\n\n 0: \n 0+ \\x0d\\x0a\\x0d\\x0a\n 0: \n 0+ \\x0d\\x0a\n 0: \n 0+ \n\n/(?|(abc)|(xyz))/\n   >abc<\n 0: abc\n   >xyz< \n 0: xyz\n\n/(x)(?|(abc)|(xyz))(x)/\n    xabcx\n 0: xabcx\n    xxyzx \n 0: xxyzx\n\n/(x)(?|(abc)(pqr)|(xyz))(x)/\n    xabcpqrx\n 0: xabcpqrx\n    xxyzx \n 0: xxyzx\n\n/(?|(abc)|(xyz))(?1)/\n    abcabc\n 0: abcabc\n    xyzabc \n 0: xyzabc\n\\= Expect no match \n    xyzxyz \nNo match\n \n/\\H\\h\\V\\v/\n    X X\\x0a\n 0: X X\\x0a\n    X\\x09X\\x0b\n 0: X\\x09X\\x0b\n\\= Expect no match\n    \\xa0 X\\x0a   \nNo match\n    \n/\\H*\\h+\\V?\\v{3,4}/\n    \\x09\\x20\\xa0X\\x0a\\x0b\\x0c\\x0d\\x0a\n 0: \\x09 \\xa0X\\x0a\\x0b\\x0c\\x0d\n    \\x09\\x20\\xa0\\x0a\\x0b\\x0c\\x0d\\x0a\n 0: \\x09 \\xa0\\x0a\\x0b\\x0c\\x0d\n    \\x09\\x20\\xa0\\x0a\\x0b\\x0c\n 0: \\x09 \\xa0\\x0a\\x0b\\x0c\n\\= Expect no match \n    \\x09\\x20\\xa0\\x0a\\x0b\nNo match\n     \n/\\H{3,4}/\n    XY  ABCDE\n 0: ABCD\n    XY  PQR ST \n 0: PQR\n    \n/.\\h{3,4}./\n    XY  AB    PQRS\n 0: B    P\n 1: B    \n\n/\\h*X\\h?\\H+Y\\H?Z/\n    >XNNNYZ\n 0: XNNNYZ\n    >  X NYQZ\n 0:   X NYQZ\n\\= Expect no match\n    >XYZ   \nNo match\n    >  X NY Z\nNo match\n\n#if !ebcdic\n\n/\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c/\n    >XY\\x0aZ\\x0aA\\x0bNN\\x0c\n 0: XY\\x0aZ\\x0aA\\x0bNN\\x0c\n    >\\x0a\\x0dX\\x0aY\\x0a\\x0bZZZ\\x0aAAA\\x0bNNN\\x0c\n 0: \\x0a\\x0dX\\x0aY\\x0a\\x0bZZZ\\x0aAAA\\x0bNNN\\x0c\n\n#endif\n\n/.+A/newline=crlf\n\\= Expect no match\n    \\r\\nA\nNo match\n    \n/\\nA/newline=crlf\n    \\r\\nA \n 0: \\x0aA\n\n/[\\r\\n]A/newline=crlf\n    \\r\\nA \n 0: \\x0aA\n\n/(\\r|\\n)A/newline=crlf\n    \\r\\nA \n 0: \\x0aA\n\n/a\\Rb/I,bsr=anycrlf\nCapture group count = 0\n\\R matches CR, LF, or CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n    a\\rb\n 0: a\\x0db\n    a\\nb\n 0: a\\x0ab\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n\\= Expect no match\n    a\\x85b\nNo match\n    a\\x0bb     \nNo match\n\n/a\\Rb/I,bsr=unicode\nCapture group count = 0\n\\R matches any Unicode newline\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n    a\\rb\n 0: a\\x0db\n    a\\nb\n 0: a\\x0ab\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n    a\\x85b\n 0: a\\x85b\n    a\\x0bb     \n 0: a\\x0bb\n    \n/a\\R?b/I,bsr=anycrlf\nCapture group count = 0\n\\R matches CR, LF, or CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    a\\rb\n 0: a\\x0db\n    a\\nb\n 0: a\\x0ab\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n\\= Expect no match\n    a\\x85b\nNo match\n    a\\x0bb     \nNo match\n\n/a\\R?b/I,bsr=unicode\nCapture group count = 0\n\\R matches any Unicode newline\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    a\\rb\n 0: a\\x0db\n    a\\nb\n 0: a\\x0ab\n    a\\r\\nb\n 0: a\\x0d\\x0ab\n    a\\x85b\n 0: a\\x85b\n    a\\x0bb     \n 0: a\\x0bb\n    \n/a\\R{2,4}b/I,bsr=anycrlf\nCapture group count = 0\n\\R matches CR, LF, or CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 4\n    a\\r\\n\\nb\n 0: a\\x0d\\x0a\\x0ab\n    a\\n\\r\\rb\n 0: a\\x0a\\x0d\\x0db\n    a\\r\\n\\r\\n\\r\\n\\r\\nb\n 0: a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0ab\n\\= Expect no match\n    a\\x0b\\x0bb     \nNo match\n    a\\x85\\x85b\nNo match\n\n/a\\R{2,4}b/I,bsr=unicode\nCapture group count = 0\n\\R matches any Unicode newline\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 4\n    a\\r\\rb\n 0: a\\x0d\\x0db\n    a\\n\\n\\nb\n 0: a\\x0a\\x0a\\x0ab\n    a\\r\\n\\n\\r\\rb\n 0: a\\x0d\\x0a\\x0a\\x0d\\x0db\n    a\\x85\\x85b\n 0: a\\x85\\x85b\n    a\\x0b\\x0bb     \n 0: a\\x0b\\x0bb\n\\= Expect no match \n    a\\r\\r\\r\\r\\rb \nNo match\n    \n/a(?!)|\\wbc/\n    abc \n 0: abc\n\n/a[]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n\\= Expect no match\n    ab\nNo match\n\n/a[]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n\\= Expect no match\n    ab \nNo match\n\n/a[]*+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    ab \n 0: ab\n\n/a[^]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aXb\n 0: aXb\n    a\\nb \n 0: a\\x0ab\n\\= Expect no match\n    ab  \nNo match\n    \n/a[^]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames\n    aXb\n 0: aXb\n    a\\nX\\nXb \n 0: a\\x0aX\\x0aXb\n\\= Expect no match\n    ab  \nNo match\n\n/X$/dollar_endonly\n    X\n 0: X\n\\= Expect no match \n    X\\n \nNo match\n\n/X$/\n    X\n 0: X\n    X\\n \n 0: X\n\n/xyz/auto_callout\n  xyz \n--->xyz\n +0 ^       x\n +1 ^^      y\n +2 ^ ^     z\n +3 ^  ^    End of pattern\n 0: xyz\n  abcxyz \n--->abcxyz\n +0    ^       x\n +1    ^^      y\n +2    ^ ^     z\n +3    ^  ^    End of pattern\n 0: xyz\n\\= Expect no match \n  abc\nNo match\n  abcxypqr  \nNo match\n\n/xyz/auto_callout,no_start_optimize\n  abcxyz \n--->abcxyz\n +0 ^          x\n +0  ^         x\n +0   ^        x\n +0    ^       x\n +1    ^^      y\n +2    ^ ^     z\n +3    ^  ^    End of pattern\n 0: xyz\n\\= Expect no match \n  abc\n--->abc\n +0 ^       x\n +0  ^      x\n +0   ^     x\n +0    ^    x\nNo match\n  abcxypqr  \n--->abcxypqr\n +0 ^            x\n +0  ^           x\n +0   ^          x\n +0    ^         x\n +1    ^^        y\n +2    ^ ^       z\n +0     ^        x\n +0      ^       x\n +0       ^      x\n +0        ^     x\n +0         ^    x\nNo match\n\n/(*NO_START_OPT)xyz/auto_callout\n  abcxyz \n--->abcxyz\n+15 ^          x\n+15  ^         x\n+15   ^        x\n+15    ^       x\n+16    ^^      y\n+17    ^ ^     z\n+18    ^  ^    End of pattern\n 0: xyz\n  \n/(?C)ab/\n  ab\n--->ab\n  0 ^      a\n 0: ab\n  ab\\=callout_none\n 0: ab\n  \n/ab/auto_callout\n  ab\n--->ab\n +0 ^      a\n +1 ^^     b\n +2 ^ ^    End of pattern\n 0: ab\n  ab\\=callout_none\n 0: ab\n\n/^\"((?(?=[a])[^\"])|b)*\"$/auto_callout\n    \"ab\"\n--->\"ab\"\n +0 ^        ^\n +1 ^        \"\n +2 ^^       (\n+21 ^^       \"\n +3 ^^       (?\n+18 ^^       b\n +5 ^^       (?=\n +8  ^       [a]\n+11  ^^      )\n+12 ^^       [^\"]\n+16 ^ ^      )\n+17 ^ ^      |\n+21 ^ ^      \"\n +3 ^ ^      (?\n+18 ^ ^      b\n +5 ^ ^      (?=\n +8   ^      [a]\n+19 ^  ^     )*\n+21 ^  ^     \"\n +3 ^  ^     (?\n+18 ^  ^     b\n +5 ^  ^     (?=\n +8    ^     [a]\n+17 ^  ^     |\n+22 ^   ^    $\n+23 ^   ^    End of pattern\n 0: \"ab\"\n    \"ab\"\\=callout_none\n 0: \"ab\"\n\n/\\d+X|9+Y/\n    ++++123999\\=ps\nPartial match: 123999\n    ++++123999Y\\=ps\n 0: 999Y\n\n/Z(*F)/\n\\= Expect no match \n    Z\\=ps\nNo match\n    ZA\\=ps\nNo match\n    \n/Z(?!)/\n\\= Expect no match \n    Z\\=ps\nNo match\n    ZA\\=ps\nNo match\n\n/dog(sbody)?/\n    dogs\\=ps\n 0: dog\n    dogs\\=ph\nPartial match: dogs\n    \n/dog(sbody)??/\n    dogs\\=ps\n 0: dog\n    dogs\\=ph\nPartial match: dogs\n\n/dog|dogsbody/\n    dogs\\=ps\n 0: dog\n    dogs\\=ph\nPartial match: dogs\n \n/dogsbody|dog/\n    dogs\\=ps\n 0: dog\n    dogs\\=ph\nPartial match: dogs\n\n/Z(*F)Q|ZXY/\n    Z\\=ps\nPartial match: Z\n    XY\\=dfa_restart \n 0: XY\n\\= Expect no match \n    ZA\\=ps\nNo match\n    X\\=ps\nNo match\n    \n/Z(?:(*F)Q|XY)/\n    Z\\=ps\nPartial match: Z\n    XY\\=dfa_restart \n 0: XY\n    \n/Z(*F)Q|Z(*F)XY/\n\\= Expect no match\n    Z\\=ps\nNo match\n\n/\\bthe cat\\b/\n    the cat\\=ps\n 0: the cat\n    the cat\\=ph\nPartial match: the cat\n\n/dog(sbody)?/\n    dogs\\=ps\n 0: dog\n    body\\=dfa_restart\n 0: body\n\n/dog(sbody)?/\n    dogs\\=ph\nPartial match: dogs\n    body\\=dfa_restart\n 0: body\n\n/abc/\n   abc\\=ps\n 0: abc\n   abc\\=ph\n 0: abc\n\n/abc\\K123/\n    xyzabc123pqr\nFailed: error -42: pattern contains an item that is not supported for DFA matching\n    \n/(?<=abc)123/allusedtext\n    xyzabc123pqr \n 0: abc123\n    <<<   \n    xyzabc12\\=ps\nPartial match: abc12\n               <<<\n    xyzabc12\\=ph\nPartial match: abc12\n               <<<\n\n/\\babc\\b/allusedtext\n    +++abc+++\n 0: +abc+\n    <   >\n    +++ab\\=ps\nPartial match: +ab\n               <\n    +++ab\\=ph\nPartial match: +ab\n               <\n\n/(?=C)/g,aftertext\n    ABCDECBA\n 0: \n 0+ CDECBA\n 0: \n 0+ CBA\n\n/(abc|def|xyz)/I\nCapture group count = 1\nStarting code units: a d x\nSubject length lower bound = 3\n    terhjk;abcdaadsfe\n 0: abc\n    the quick xyz brown fox \n 0: xyz\n\\= Expect no match\n    thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd\nNo match\n\n/(abc|def|xyz)/I,no_start_optimize\nCapture group count = 1\nOptions: no_start_optimize\nOptimizations: auto_possess,dotstar_anchor\n    terhjk;abcdaadsfe\n 0: abc\n    the quick xyz brown fox\n 0: xyz\n\\= Expect no match\n    thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd\nNo match\n\n/abcd*/aftertext\n    xxxxabcd\\=ps\n 0: abcd\n 0+ \n    xxxxabcd\\=ph\nPartial match: abcd\n    dddxxx\\=dfa_restart\n 0: ddd\n 0+ xxx\n    xxxxabcd\\=ph\nPartial match: abcd\n    xxx\\=dfa_restart\n 0: \n 0+ xxx\n\n/abcd*/i\n    xxxxabcd\\=ps\n 0: abcd\n    xxxxabcd\\=ph\nPartial match: abcd\n    XXXXABCD\\=ps\n 0: ABCD\n    XXXXABCD\\=ph\nPartial match: ABCD\n\n/abc\\d*/\n    xxxxabc1\\=ps\n 0: abc1\n    xxxxabc1\\=ph\nPartial match: abc1\n\n/abc[de]*/\n    xxxxabcde\\=ps\n 0: abcde\n    xxxxabcde\\=ph\nPartial match: abcde\n\n/(?:(?1)|B)(A(*F)|C)/\n    ABCD\n 0: BC\n    CCD\n 0: CC\n\\= Expect no match\n    CAD   \nNo match\n\n/^(?:(?1)|B)(A(*F)|C)/\n    CCD\n 0: CC\n    BCD \n 0: BC\n\\= Expect no match\n    ABCD\nNo match\n    CAD\nNo match\n    BAD    \nNo match\n\n/^(?!a(*SKIP)b)/\n    ac\nFailed: error -42: pattern contains an item that is not supported for DFA matching\n    \n/^(?=a(*SKIP)b|ac)/\n    ac\nFailed: error -42: pattern contains an item that is not supported for DFA matching\n    \n/^(?=a(*THEN)b|ac)/\n    ac\nFailed: error -42: pattern contains an item that is not supported for DFA matching\n    \n/^(?=a(*PRUNE)b)/\n    ab  \nFailed: error -42: pattern contains an item that is not supported for DFA matching\n\n/^(?(?!a(*SKIP)b))/\n    ac\nFailed: error -42: pattern contains an item that is not supported for DFA matching\n\n/(?<=abc)def/allusedtext\n    abc\\=ph\nPartial match: abc\n               <<<\n\n/abc$/\n    abc\n 0: abc\n    abc\\=ps\n 0: abc\n    abc\\=ph\nPartial match: abc\n\n/abc$/m\n    abc\n 0: abc\n    abc\\n\n 0: abc\n    abc\\=ph\nPartial match: abc\n    abc\\n\\=ph\n 0: abc\n    abc\\=ps\n 0: abc\n    abc\\n\\=ps\n 0: abc\n\n/abc\\z/\n    abc\n 0: abc\n    abc\\=ps\n 0: abc\n    abc\\=ph\nPartial match: abc\n\n/abc\\Z/\n    abc\n 0: abc\n    abc\\=ps\n 0: abc\n    abc\\=ph\nPartial match: abc\n\n/abc\\b/\n    abc\n 0: abc\n    abc\\=ps\n 0: abc\n    abc\\=ph\nPartial match: abc\n\n/abc\\B/\n    abc\\=ps\nPartial match: abc\n    abc\\=ph\nPartial match: abc\n\\= Expect no match \n    abc\nNo match\n\n/.+/\n    abc\\=offset=0\n 0: abc\n    abc\\=offset=1\n 0: bc\n    abc\\=offset=2\n 0: c\n\\= Bad offsets\n    abc\\=offset=4\nFailed: error -33: bad offset value\n    abc\\=offset=-4 \n** Invalid value in \"offset=-4\"\n\\= Expect no match \n    abc\\=offset=3\nNo match\n\n/^(?:a)++\\w/\n     aaaab\n 0: aaaab\n\\= Expect no match \n     aaaa \nNo match\n     bbb \nNo match\n\n/^(?:aa|(?:a)++\\w)/\n     aaaab\n 0: aaaab\n 1: aa\n     aaaa \n 0: aa\n\\= Expect no match \n     bbb \nNo match\n\n/^(?:a)*+\\w/\n     aaaab\n 0: aaaab\n     bbb \n 0: b\n\\= Expect no match \n     aaaa \nNo match\n\n/^(a)++\\w/\n     aaaab\n 0: aaaab\n\\= Expect no match \n     aaaa \nNo match\n     bbb \nNo match\n\n/^(a|)++\\w/\n     aaaab\n 0: aaaab\n\\= Expect no match \n     aaaa \nNo match\n     bbb \nNo match\n\n/(?=abc){3}abc/aftertext\n    abcabcabc\n 0: abc\n 0+ abcabc\n\\= Expect no match\n    xyz  \nNo match\n    \n/(?=abc)+abc/aftertext\n    abcabcabc\n 0: abc\n 0+ abcabc\n\\= Expect no match\n    xyz  \nNo match\n    \n/(?=abc)++abc/aftertext\n    abcabcabc\n 0: abc\n 0+ abcabc\n\\= Expect no match\n    xyz  \nNo match\n    \n/(?=abc){0}xyz/\n    xyz \n 0: xyz\n\n/(?=abc){1}xyz/\n\\= Expect no match\n    xyz \nNo match\n    \n/(?=(a))?./\n    ab\n 0: a\n    bc\n 0: b\n      \n/(?=(a))??./\n    ab\n 0: a\n    bc\n 0: b\n\n/^(?=(a)){0}b(?1)/\n    backgammon\n 0: ba\n\n/^(?=(?1))?[az]([abc])d/\n    abd \n 0: abd\n    zcdxx \n 0: zcd\n\n/^(?!a){0}\\w+/\n    aaaaa\n 0: aaaaa\n\n/(?<=(abc))?xyz/\n    abcxyz\n 0: xyz\n    pqrxyz \n 0: xyz\n\n/((?2))((?1))/\n    abc\nFailed: error -52: nested recursion at the same subject position\n\n/(?(R)a+|(?R)b)/\n    aaaabcde\n 0: aaaab\n\n/(?(R)a+|((?R))b)/\n    aaaabcde\n 0: aaaab\n\n/((?(R)a+|(?1)b))/\n    aaaabcde\n 0: aaaab\n\n/((?(R2)a+|(?1)b))()/\n    aaaabcde\nFailed: error -40: backreference condition or recursion test is not supported for DFA matching\n\n/(?(R)a*(?1)|((?R))b)/\n    aaaabcde\nFailed: error -52: nested recursion at the same subject position\n\n/(a+)/no_auto_possess\n    aaaa\\=ovector=3\nMatched, but offsets vector is too small to show all matches\n 0: aaaa\n 1: aaa\n 2: aa\n    aaaa\\=ovector=4\n 0: aaaa\n 1: aaa\n 2: aa\n 3: a\n\n/^\\R/\n    \\r\\=ps\n 0: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    \n/^\\R{2,3}x/\n    \\r\\=ps\nPartial match: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    \\r\\r\\=ps\nPartial match: \\x0d\\x0d\n    \\r\\r\\=ph\nPartial match: \\x0d\\x0d\n    \\r\\r\\r\\=ps\nPartial match: \\x0d\\x0d\\x0d\n    \\r\\r\\r\\=ph\nPartial match: \\x0d\\x0d\\x0d\n    \\r\\rx\n 0: \\x0d\\x0dx\n    \\r\\r\\rx    \n 0: \\x0d\\x0d\\x0dx\n\n/^\\R{2,3}?x/\n    \\r\\=ps\nPartial match: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    \\r\\r\\=ps\nPartial match: \\x0d\\x0d\n    \\r\\r\\=ph\nPartial match: \\x0d\\x0d\n    \\r\\r\\r\\=ps\nPartial match: \\x0d\\x0d\\x0d\n    \\r\\r\\r\\=ph\nPartial match: \\x0d\\x0d\\x0d\n    \\r\\rx\n 0: \\x0d\\x0dx\n    \\r\\r\\rx    \n 0: \\x0d\\x0d\\x0dx\n    \n/^\\R?x/\n    \\r\\=ps\nPartial match: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    x\n 0: x\n    \\rx  \n 0: \\x0dx\n\n/^\\R+x/\n    \\r\\=ps\nPartial match: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    \\r\\n\\=ps\nPartial match: \\x0d\\x0a\n    \\r\\n\\=ph\nPartial match: \\x0d\\x0a\n    \\rx  \n 0: \\x0dx\n\n/^a$/newline=crlf\n    a\\r\\=ps\nPartial match: a\\x0d\n    a\\r\\=ph\nPartial match: a\\x0d\n\n/^a$/m,newline=crlf\n    a\\r\\=ps\nPartial match: a\\x0d\n    a\\r\\=ph\nPartial match: a\\x0d\n\n/^(a$|a\\r)/newline=crlf\n    a\\r\\=ps\n 0: a\\x0d\n    a\\r\\=ph\nPartial match: a\\x0d\n\n/^(a$|a\\r)/m,newline=crlf\n    a\\r\\=ps\n 0: a\\x0d\n    a\\r\\=ph\nPartial match: a\\x0d\n\n/./newline=crlf\n    \\r\\=ps\n 0: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n  \n/.{2,3}/newline=crlf\n    \\r\\=ps\nPartial match: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    \\r\\r\\=ps\n 0: \\x0d\\x0d\n    \\r\\r\\=ph\nPartial match: \\x0d\\x0d\n    \\r\\r\\r\\=ps\n 0: \\x0d\\x0d\\x0d\n    \\r\\r\\r\\=ph\nPartial match: \\x0d\\x0d\\x0d\n\n/.{2,3}?/newline=crlf\n    \\r\\=ps\nPartial match: \\x0d\n    \\r\\=ph\nPartial match: \\x0d\n    \\r\\r\\=ps\n 0: \\x0d\\x0d\n    \\r\\r\\=ph\nPartial match: \\x0d\\x0d\n    \\r\\r\\r\\=ps\n 0: \\x0d\\x0d\\x0d\n 1: \\x0d\\x0d\n    \\r\\r\\r\\=ph\nPartial match: \\x0d\\x0d\\x0d\n\n# Test simple validity check for restarts \n\n/abcdef/\n   abc\\=dfa_restart\nFailed: error -38: invalid data in workspace for DFA restart\n\n/<H((?(?!<H|F>)(.)|(?R))++)*F>/\n    text <H more text <H texting more  hexA0-\"\\xA0\"    hex above 7F-\"\\xBC\" F> text xxxxx <H text F> text F> text2 <H text sample F> more text.\n 0: <H more text <H texting more  hexA0-\"\\xa0\"    hex above 7F-\"\\xbc\" F> text xxxxx <H text F> text F>\n\n/^(?>.{4})abc|^\\w\\w.xabcd/\n    xxxxabcd\n 0: xxxxabcd\n 1: xxxxabc\n    xx\\xa0xabcd \n 0: xx\\xa0xabcd\n 1: xx\\xa0xabc\n\n/^(.{4}){2}+abc|^\\w\\w.x\\w\\w\\w\\wabcd/\n    xxxxxxxxabcd\n 0: xxxxxxxxabcd\n 1: xxxxxxxxabc\n    xx\\xa0xxxxxabcd \n 0: xx\\xa0xxxxxabcd\n 1: xx\\xa0xxxxxabc\n\n/abcd/\n    abcd\\=ovector=0\n 0: abcd\n\n# These tests show up auto-possessification \n\n/[ab]*/\n    aaaa\n 0: aaaa\n    \n/[ab]*?/\n    aaaa\n 0: aaaa\n 1: aaa\n 2: aa\n 3: a\n 4: \n    \n/[ab]?/\n    aaaa\n 0: a\n    \n/[ab]??/\n    aaaa\n 0: a\n 1: \n    \n/[ab]+/\n    aaaa\n 0: aaaa\n    \n/[ab]+?/\n    aaaa\n 0: aaaa\n 1: aaa\n 2: aa\n 3: a\n    \n/[ab]{2,3}/\n    aaaa\n 0: aaa\n    \n/[ab]{2,3}?/\n    aaaa\n 0: aaa\n 1: aa\n    \n/[ab]{2,}/\n    aaaa    \n 0: aaaa\n\n/[ab]{2,}?/\n    aaaa    \n 0: aaaa\n 1: aaa\n 2: aa\n\n'\\A(?:[^\\\"]++|\\\"(?:[^\\\"]*+|\\\"\\\")*+\\\")++'\n    NON QUOTED \\\"QUOT\\\"\\\"ED\\\" AFTER \\\"NOT MATCHED\n 0: NON QUOTED \"QUOT\"\"ED\" AFTER \n\n'\\A(?:[^\\\"]++|\\\"(?:[^\\\"]++|\\\"\\\")*+\\\")++'\n    NON QUOTED \\\"QUOT\\\"\\\"ED\\\" AFTER \\\"NOT MATCHED\n 0: NON QUOTED \"QUOT\"\"ED\" AFTER \n\n/abc(?=xyz)/allusedtext\n    abcxyzpqr\n 0: abcxyz\n       >>>\n    abcxyzpqr\\=aftertext\n 0: abcxyz\n       >>>\n 0+ xyzpqr\n    \n/(?<=pqr)abc(?=xyz)/allusedtext\n    xyzpqrabcxyzpqr\n 0: pqrabcxyz\n    <<<   >>>\n    xyzpqrabcxyzpqr\\=aftertext\n 0: pqrabcxyz\n    <<<   >>>\n 0+ xyzpqr\n    \n/a\\b/\n    a.\\=allusedtext\n 0: a.\n     >\n    a\\=allusedtext  \n 0: a\n\n/abc(?=abcde)(?=ab)/allusedtext\n    abcabcdefg\n 0: abcabcde\n       >>>>>\n\n/a*?b*?/\n    ab\n 0: ab\n 1: a\n 2: \n\n/(*NOTEMPTY)a*?b*?/\n    ab\n 0: ab\n 1: a\n    ba\n 0: b\n    cb  \n 0: b\n\n/(*NOTEMPTY_ATSTART)a*?b*?/aftertext\n    ab\n 0: ab\n 0+ \n 1: a\n    cdab \n 0: \n 0+ dab\n\n/(a)(b)|(c)/\n    XcX\\=ovector=2,get=1,get=2,get=3,get=4,getall\n 0: c\nGet substring 1 failed (-55): requested value is not set\nGet substring 2 failed (-54): requested value is not available\nGet substring 3 failed (-54): requested value is not available\nGet substring 4 failed (-54): requested value is not available\n 0L c\n\n/(?<A>aa)/\n    aa\\=get=A\n 0: aa\nGet substring \"A\" failed (-41): function is not supported for DFA matching\n    aa\\=copy=A \n 0: aa\nCopy substring \"A\" failed (-41): function is not supported for DFA matching\nGet substring \"A\" length failed (-41): function is not supported for DFA matching\n\n/a+/no_auto_possess\n    a\\=ovector=2,get=1,get=2,getall\n 0: a\nGet substring 1 failed (-55): requested value is not set\nGet substring 2 failed (-54): requested value is not available\n 0L a\n    aaa\\=ovector=2,get=1,get=2,getall\nMatched, but offsets vector is too small to show all matches\n 0: aaa\n 1: aa\n 1G aa (2)\nGet substring 2 failed (-54): requested value is not available\n 0L aaa\n 1L aa\n\n/a(b)c(d)/\n    abc\\=ph,copy=0,copy=1,getall\nPartial match: abc\n 0C abc (3)\nCopy substring 1 failed (-2): partial match\nGet substring 1 length failed (-2): partial match\nget substring list failed (-2): partial match\n\n/ab(?C\" any text with spaces \")cde/B\n------------------------------------------------------------------\n        Bra\n        ab\n        CalloutStr \" any text with spaces \" 6 30 1\n        cde\n        Ket\n        End\n------------------------------------------------------------------\n    abcde\nCallout (6): \" any text with spaces \"\n--->abcde\n    ^ ^       c\n 0: abcde\n    12abcde\nCallout (6): \" any text with spaces \"\n--->12abcde\n      ^ ^       c\n 0: abcde\n\n/^a(b)c(?C1)def/\n      abcdef\n--->abcdef\n  1 ^  ^       d\n 0: abcdef\n\n/^a(b)c(?C\"AB\")def/\n      abcdef\nCallout (10): \"AB\"\n--->abcdef\n    ^  ^       d\n 0: abcdef\n\n/^a(b)c(?C1)def/\n      abcdef\\=callout_capture\nCallout 1: last capture = 0\n--->abcdef\n    ^  ^       d\n 0: abcdef\n\n/^a(b)c(?C{AB})def/B\n------------------------------------------------------------------\n        Bra\n        ^\n        a\n        CBra 1\n        b\n        Ket\n        c\n        CalloutStr {AB} 10 14 1\n        def\n        Ket\n        End\n------------------------------------------------------------------\n      abcdef\\=callout_capture\nCallout (10): {AB} last capture = 0\n--->abcdef\n    ^  ^       d\n 0: abcdef\n\n/^(?(?C25)(?=abc)abcd|xyz)/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Cond\n        Callout 25 9 3\n        Assert\n        abc\n        Ket\n        abcd\n        Alt\n        xyz\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    abcdefg\n--->abcdefg\n 25 ^           (?=\n 0: abcd\n    xyz123 \n--->xyz123\n 25 ^          (?=\n 0: xyz\n\n/^(?(?C$abc$)(?=abc)abcd|xyz)/B\n------------------------------------------------------------------\n        Bra\n        ^\n        Cond\n        CalloutStr $abc$ 7 12 3\n        Assert\n        abc\n        Ket\n        abcd\n        Alt\n        xyz\n        Ket\n        Ket\n        End\n------------------------------------------------------------------\n    abcdefg\nCallout (7): $abc$\n--->abcdefg\n    ^           (?=\n 0: abcd\n    xyz123 \nCallout (7): $abc$\n--->xyz123\n    ^          (?=\n 0: xyz\n\n/^ab(?C'first')cd(?C\"second\")ef/\n    abcdefg\nCallout (7): 'first'\n--->abcdefg\n    ^ ^         c\nCallout (20): \"second\"\n--->abcdefg\n    ^   ^       e\n 0: abcdef\n\n/(?:a(?C`code`)){3}X/\n    aaaXY\nCallout (8): `code`\n--->aaaXY\n    ^^        ){3}\nCallout (8): `code`\n--->aaaXY\n    ^ ^       ){3}\nCallout (8): `code`\n--->aaaXY\n    ^  ^      ){3}\n 0: aaaX\n\n# Binary zero in callout string\n/\"a(?C'x\" 00 \"z')b\"/hex\n    abcdefgh\nCallout (5): 'x\\x00z'\n--->abcdefgh\n    ^^           b\n 0: ab\n\n/(?(?!)a|b)/\n    bbb\n 0: b\n\\= Expect no match\n    aaa \nNo match\n\n/^/gm\n    \\n\\n\\n\n 0: \n 0: \n 0: \n\n/^/gm,alt_circumflex\n    \\n\\n\\n\n 0: \n 0: \n 0: \n 0: \n\n/abc/use_offset_limit\n    1234abcde\\=offset_limit=100\n 0: abc\n    1234abcde\\=offset_limit=9\n 0: abc\n    1234abcde\\=offset_limit=4\n 0: abc\n    1234abcde\\=offset_limit=4,offset=4\n 0: abc\n\\= Expect no match\n    1234abcde\\=offset_limit=4,offset=5\nNo match\n    1234abcde\\=offset_limit=3\nNo match\n\n/(?<=abc)/use_offset_limit\n    1234abc\\=offset_limit=7\n 0: \n\\= Expect no match\n    1234abc\\=offset_limit=6\nNo match\n\n/abcd/null_context\n    abcd\\=null_context\n 0: abcd\n\n/()()a+/no_auto_possess\n    aaa\\=allcaptures\n** Ignored for DFA matching: allcaptures\n 0: aaa\n 1: aa\n 2: a\n    a\\=allcaptures\n** Ignored for DFA matching: allcaptures\n 0: a\n\n/(*LIMIT_DEPTH=100)^((.)(?1)|.)$/\n\\= Expect depth limit exceeded\n    a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]\nFailed: error -53: matching depth limit exceeded\n\n/(*LIMIT_HEAP=0)^((.)(?1)|.)$/\n\\= Expect heap limit exceeded\n    a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]\nFailed: error -63: heap limit exceeded\n\n/(*LIMIT_HEAP=50000)^((.)(?1)|.)$/\n\\= Expect success\n    a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]\n 0: a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]\n\n/(02-)?[0-9]{3}-[0-9]{3}/\n    02-123-123\n 0: 02-123-123\n\n/^(a(?2))(b)(?1)/\n    abbab\\=find_limits \nMinimum heap limit = 0\nMinimum match limit = 4\nMinimum depth limit = 2\n 0: abbab\n\n/abc/endanchored\n    xyzabc\n 0: abc\n\\= Expect no match\n    xyzabcdef\nNo match\n\\= Expect error\n    xyzabc\\=ph\nFailed: error -34: bad option value\n\n/abc/\n    xyzabc\\=endanchored\n 0: abc\n\\= Expect no match\n    xyzabcdef\\=endanchored\nNo match\n\\= Expect error\n    xyzabc\\=ps,endanchored\nFailed: error -34: bad option value\n\n/abc|bcd/endanchored\n    xyzabcd\n 0: bcd\n\\= Expect no match\n    xyzabcdef\nNo match\n\n/(*NUL)^.*/\n    a\\nb\\x00ccc\n 0: a\\x0ab\n    \n/(*NUL)^.*/s\n    a\\nb\\x00ccc\n 0: a\\x0ab\\x00ccc\n    \n/^x/m,newline=nul\n    ab\\x00xy\n 0: x\n    \n/'#comment' 0d 0a 00 '^x\\' 0a 'y'/x,newline=nul,hex\n    x\\nyz \n 0: x\\x0ay\n \n/(*NUL)^X\\NY/\n    X\\nY\n 0: X\\x0aY\n    X\\rY\n 0: X\\x0dY\n\\= Expect no match\n    X\\x00Y      \nNo match\n\n/(?<=abc|)/\n    abcde\\=aftertext\n 0: \n 0+ abcde\n    \n/(?<=|abc)/ \n    abcde\\=aftertext\n 0: \n 0+ abcde\n\n/(?<=abc|)/endanchored\n    abcde\\=aftertext\n 0: \n 0+ \n    \n/(?<=|abc)/endanchored\n    abcde\\=aftertext\n 0: \n 0+ \n\n/(*LIMIT_MATCH=100).*(?![|H]?.*(?![|H]?););.*(?![|H]?.*(?![|H]?););\\x00\\x00\\x00\\x00\\x00\\x00\\x00(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?![|);)?.*(![|H]?);)?.*(?![|H]?);)?.*(?![|H]?);)?.*(?![|H]););![|H]?););[|H]?);|H]?);)\\x00\\x00\\x00\u000b\\x00\\x00\\x00\u0019H]?););?![|H]?);)?.*(?![|H]?););[||H]?);)?.*(?![|H]?););[|H]?);(?![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););;[\u0013\\x00\\x00\\x00\\x00\\x00\\x00\\x00![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););/no_dotstar_anchor\n\\= Expect limit exceeded\n.*(?![|H]?.*(?![|H]?););.*(?![|H]?.*(?![|H]?););\\x00\\x00\\x00\\x00\\x00\\x00\\x00(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?![|);)?.*(![|H]?);)?.*(?![|H]?);)?.*(?![|H]?);)?.*(?![|H]););![|H]?););[|H]?);|H]?);)\\x00\\x00\\x00\u000b\\x00\\x00\\x00\u0019H]?););?![|H]?);)?.*(?![|H]?););[||H]?);)?.*(?![|H]?););[|H]?);(?![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););;[\u0013\\x00\\x00\\x00\\x00\\x00\\x00\\x00![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););\nFailed: error -47: match limit exceeded\n\n/\\n/firstline\n    xyz\\nabc\n 0: \\x0a\n\n/\\nabc/firstline\n    xyz\\nabc\n 0: \\x0aabc\n\n/\\x{0a}abc/firstline,newline=crlf\n\\= Expect no match\n    xyz\\r\\nabc\nNo match\n\n/[abc]/firstline\n\\= Expect no match\n    \\na\nNo match\n    \n/foobar/\n    the foobar thing\\=copy_matched_subject\n 0: foobar\n    the foobar thing\\=copy_matched_subject,zero_terminate\n 0: foobar\n\n/foobar/g\n    the foobar thing foobar again\\=copy_matched_subject\n 0: foobar\n 0: foobar\n\n/(?(VERSION>=0)^B0W)/\n    B0W-W0W\n 0: B0W\n\\= Expect no match\n    0\nNo match\n\n/(?(VERSION>=1000)^B0W|W0W)/\n    B0W-W0W\n 0: W0W\n\\= Expect no match\n    0\nNo match\n\n/(?<=pqr)abc(?=xyz)/\n    123pqrabcxy\\=ps,allusedtext\nPartial match: pqrabcxy\n               <<<\n    123pqrabcxyz\\=ps,allusedtext\n 0: pqrabcxyz\n    <<<   >>>\n\n/(?>a+b)/\n    aaaa\\=ps\nPartial match: aaaa\n    aaaab\\=ps\n 0: aaaab\n    \n/(abc)(?1)/\n    abca\\=ps\nPartial match: abca\n    abcabc\\=ps\n 0: abcabc\n\n/(?(?=abc).*|Z)/\n    ab\\=ps\nPartial match: ab\n    abcxyz\\=ps\n 0: abcxyz\n\n/(abc)++x/\n    abcab\\=ps\nPartial match: abcab\n    abc\\=ps \nPartial match: abc\n    ab\\=ps\nPartial match: ab\n    abcx  \n 0: abcx\n\n/\\z/\n    abc\\=ph \nPartial match: \n    abc\\=ps \n 0: \n   \n/\\Z/\n    abc\\=ph \nPartial match: \n    abc\\=ps \n 0: \n    abc\\n\\=ph\nPartial match: \\x0a\n    abc\\n\\=ps\n 0: \n\n/c*+(?<=[bc])/\n    abc\\=ph\nPartial match: c\n    ab\\=ph\nPartial match: \n    abc\\=ps\n 0: c\n    ab\\=ps\n 0: \n\n/c++(?<=[bc])/\n    abc\\=ph\nPartial match: c\n    ab\\=ph\nPartial match: \n\n/(?<=(?=.(?<=x)))/\n    abx\n 0: \n    ab\\=ph\nPartial match: \n    bxyz \n 0: \n    xyz\n 0: \n\n/(?![ab]).*/\n    ab\\=ph\nPartial match: \n\n/c*+/\n    ab\\=ph,offset=2\nPartial match: \n\n/\n/anchored, firstline\n    \\x0a\n 0: \\x0a\n\n/\n/anchored,firstline,no_start_optimize\n    \\x0a\n 0: \\x0a\n\n/\n/firstline\n    \\x0a\n 0: \\x0a\n    abc\\x0adef\n 0: \\x0a\n\n/|a(?0)/endanchored\n    aaaa\n 0: aaaa\n 1: aaa\n 2: aa\n 3: a\n 4: \n\n/([a-z]++)(*scs:(1).)/\n    aa\nFailed: error -42: pattern contains an item that is not supported for DFA matching\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (UTS#18)\n\n/[a[]/\n    [\n 0: [\n\n/[a[B]]C/alt_extended_class\n    aC\n 0: aC\n    BC\n 0: BC\n\\= Expect no match\n    [C\nNo match\n\n/[[A][B]]/alt_extended_class\n    A\n 0: A\n    B\n 0: B\n\\= Expect no match\n    [\nNo match\n    ]\nNo match\n\n/[[A]||[B]]/alt_extended_class\n    A\n 0: A\n    B\n 0: B\n\\= Expect no match\n    C\nNo match\n\n/[[^A][B]]/alt_extended_class\n    B\n 0: B\n    C\n 0: C\n\\= Expect no match\n    A\nNo match\n\n/[^[A][B]]/alt_extended_class\n    C\n 0: C\n\\= Expect no match\n    A\nNo match\n    B\nNo match\n\n/[^[A]&&[B]]/alt_extended_class\n    A\n 0: A\n    B\n 0: B\n    C\n 0: C\n\n/[A[]]]/alt_extended_class\n    A\n 0: A\n    ]\n 0: ]\n\\= Expect no match\n    [\nNo match\n\n/[A[^]]]/alt_extended_class\n    A\n 0: A\n    [\n 0: [\n    C\n 0: C\n\\= Expect no match\n    ]\nNo match\n\n/[A[]]/alt_extended_class,allow_empty_class\n    A\n 0: A\n\\= Expect no match\n    ]\nNo match\n    [\nNo match\n\n/[A[^]]/alt_extended_class,allow_empty_class\n    A\n 0: A\n    C\n 0: C\n    [\n 0: [\n    ]\n 0: ]\n\n/[A-C--B]/alt_extended_class\n    A\n 0: A\n    C\n 0: C\n\\= Expect no match\n    B\nNo match\n\n/[^A-C--B]/alt_extended_class\n    B\n 0: B\n\\= Expect no match\n    A\nNo match\n    C\nNo match\n\n/[[\\d\\D]--b]/alt_extended_class\n    a\n 0: a\n    c\n 0: c\n\\= Expect no match\n    b\nNo match\n\n/[\\dAC-E[:space:]&&[^z]]/alt_extended_class\n    0\n 0: 0\n    A\n 0: A\n    C\n 0: C\n    D\n 0: D\n    E\n 0: E\n    \\t\n 0: \\x09\n\\= Expect no match\n    B\nNo match\n    F\nNo match\n    ;\nNo match\n\n/[z||[^\\dAC-E[:space:]]]/alt_extended_class\n    z\n 0: z\n    B\n 0: B\n    F\n 0: F\n    ;\n 0: ;\n\\= Expect no match\n    0\nNo match\n    A\nNo match\n    C\nNo match\n    D\nNo match\n    E\nNo match\n    \\t\nNo match\n\n/[a-c--b]+/alt_extended_class\n    ac\n 0: ac\n    a\n 0: a\n\\= Expect no match\n    b\nNo match\n\n/[a-c--b]{2,3}/alt_extended_class\n    ac\n 0: ac\n    cac\n 0: cac\n\\= Expect no match\n    a\nNo match\n    bb\nNo match\n\n/x[a-c--b]+y/alt_extended_class\n    xacy\n 0: xacy\n    xaay\n 0: xaay\n    xay\n 0: xay\n\\= Expect no match\n    zacy\nNo match\n    xacz\nNo match\n    xy\nNo match\n    xby\nNo match\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n/(?[[A]+[B]])/\n    A\n 0: A\n    B\n 0: B\n\\= Expect no match\n    [\nNo match\n    ]\nNo match\n\n# --------------\n\n/^(?1(2))(?(DEFINE)(a(.)b))/\n   axb\nFailed: error -42: pattern contains an item that is not supported for DFA matching\n\n# Tests for reading matches from NULL subjects\n/(.?)/\n    \\=null_subject,copy=0,get=0,getall\n 0: \n 0C  (0)\n 0G  (0)\n 0L \n\n# --------------\n\n# Verify pcre2_substitute is blocked for DFA\n\n/abc/\n    abc\\=replace=xyz\n** Ignored for DFA matching: replace\n 0: abc\n    abc\\=replace=xyz,substitute_matched\nFailed: error -41: function is not supported for DFA matching\n\n# End of testinput6\n"
  },
  {
    "path": "testdata/testoutput7",
    "content": "# This set of tests checks UTF and Unicode property support with the DFA\n# matching functionality of pcre2_dfa_match(). A default subject modifier is\n# used to force DFA matching for all tests.\n\n#subject dfa\n#newline_default LF any anyCRLF\n\n/\\x{100}ab/utf\n  \\x{100}ab\n 0: \\x{100}ab\n  \n/a\\x{100}*b/utf\n    ab\n 0: ab\n    a\\x{100}b  \n 0: a\\x{100}b\n    a\\x{100}\\x{100}b  \n 0: a\\x{100}\\x{100}b\n    \n/a\\x{100}+b/utf\n    a\\x{100}b  \n 0: a\\x{100}b\n    a\\x{100}\\x{100}b  \n 0: a\\x{100}\\x{100}b\n\\= Expect no match \n    ab\nNo match\n     \n/\\bX/utf\n    Xoanon\n 0: X\n    +Xoanon\n 0: X\n    \\x{300}Xoanon \n 0: X\n\\= Expect no match \n    YXoanon  \nNo match\n    \n/\\BX/utf\n    YXoanon\n 0: X\n\\= Expect no match\n    Xoanon\nNo match\n    +Xoanon    \nNo match\n    \\x{300}Xoanon \nNo match\n\n/X\\b/utf\n    X+oanon\n 0: X\n    ZX\\x{300}oanon \n 0: X\n    FAX \n 0: X\n\\= Expect no match \n    Xoanon  \nNo match\n    \n/X\\B/utf\n    Xoanon  \n 0: X\n\\= Expect no match\n    X+oanon\nNo match\n    ZX\\x{300}oanon \nNo match\n    FAX \nNo match\n    \n/[^a]/utf\n    abcd\n 0: b\n    a\\x{100}   \n 0: \\x{100}\n\n/^[abc\\x{123}\\x{400}-\\x{402}]{2,3}\\d/utf\n    ab99\n 0: ab9\n    \\x{123}\\x{123}45\n 0: \\x{123}\\x{123}4\n    \\x{400}\\x{401}\\x{402}6  \n 0: \\x{400}\\x{401}\\x{402}6\n\\= Expect no match\n    d99\nNo match\n    \\x{123}\\x{122}4   \nNo match\n    \\x{400}\\x{403}6  \nNo match\n    \\x{400}\\x{401}\\x{402}\\x{402}6  \nNo match\n\n/a.b/utf\n    acb\n 0: acb\n    a\\x7fb\n 0: a\\x{7f}b\n    a\\x{100}b \n 0: a\\x{100}b\n\\= Expect no match\n    a\\nb  \nNo match\n\n/a(.{3})b/utf\n    a\\x{4000}xyb \n 0: a\\x{4000}xyb\n    a\\x{4000}\\x7fyb \n 0: a\\x{4000}\\x{7f}yb\n    a\\x{4000}\\x{100}yb \n 0: a\\x{4000}\\x{100}yb\n\\= Expect no match\n    a\\x{4000}b \nNo match\n    ac\\ncb \nNo match\n\n/a(.*?)(.)/\n    a\\xc0\\x88b\n 0: a\\xc0\\x88b\n 1: a\\xc0\\x88\n 2: a\\xc0\n\n/a(.*?)(.)/utf\n    a\\x{100}b\n 0: a\\x{100}b\n 1: a\\x{100}\n\n/a(.*)(.)/\n    a\\xc0\\x88b\n 0: a\\xc0\\x88b\n 1: a\\xc0\\x88\n 2: a\\xc0\n\n/a(.*)(.)/utf\n    a\\x{100}b\n 0: a\\x{100}b\n 1: a\\x{100}\n\n/a(.)(.)/\n    a\\xc0\\x92bcd\n 0: a\\xc0\\x92\n\n/a(.)(.)/utf\n    a\\x{240}bcd\n 0: a\\x{240}b\n\n/a(.?)(.)/\n    a\\xc0\\x92bcd\n 0: a\\xc0\\x92\n 1: a\\xc0\n\n/a(.?)(.)/utf\n    a\\x{240}bcd\n 0: a\\x{240}b\n 1: a\\x{240}\n\n/a(.??)(.)/\n    a\\xc0\\x92bcd\n 0: a\\xc0\\x92\n 1: a\\xc0\n\n/a(.??)(.)/utf\n    a\\x{240}bcd\n 0: a\\x{240}b\n 1: a\\x{240}\n\n/a(.{3})b/utf\n    a\\x{1234}xyb \n 0: a\\x{1234}xyb\n    a\\x{1234}\\x{4321}yb \n 0: a\\x{1234}\\x{4321}yb\n    a\\x{1234}\\x{4321}\\x{3412}b \n 0: a\\x{1234}\\x{4321}\\x{3412}b\n\\= Expect no match\n    a\\x{1234}b \nNo match\n    ac\\ncb \nNo match\n\n/a(.{3,})b/utf\n    a\\x{1234}xyb \n 0: a\\x{1234}xyb\n    a\\x{1234}\\x{4321}yb \n 0: a\\x{1234}\\x{4321}yb\n    a\\x{1234}\\x{4321}\\x{3412}b \n 0: a\\x{1234}\\x{4321}\\x{3412}b\n    axxxxbcdefghijb \n 0: axxxxbcdefghijb\n 1: axxxxb\n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b \n 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n\\= Expect no match\n    a\\x{1234}b \nNo match\n\n/a(.{3,}?)b/utf\n    a\\x{1234}xyb \n 0: a\\x{1234}xyb\n    a\\x{1234}\\x{4321}yb \n 0: a\\x{1234}\\x{4321}yb\n    a\\x{1234}\\x{4321}\\x{3412}b \n 0: a\\x{1234}\\x{4321}\\x{3412}b\n    axxxxbcdefghijb \n 0: axxxxbcdefghijb\n 1: axxxxb\n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b \n 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n\\= Expect no match\n    a\\x{1234}b \nNo match\n\n/a(.{3,5})b/utf\n    a\\x{1234}xyb \n 0: a\\x{1234}xyb\n    a\\x{1234}\\x{4321}yb \n 0: a\\x{1234}\\x{4321}yb\n    a\\x{1234}\\x{4321}\\x{3412}b \n 0: a\\x{1234}\\x{4321}\\x{3412}b\n    axxxxbcdefghijb \n 0: axxxxb\n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b \n 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n    axbxxbcdefghijb \n 0: axbxxb\n    axxxxxbcdefghijb \n 0: axxxxxb\n\\= Expect no match\n    a\\x{1234}b \nNo match\n    axxxxxxbcdefghijb \nNo match\n\n/a(.{3,5}?)b/utf\n    a\\x{1234}xyb \n 0: a\\x{1234}xyb\n    a\\x{1234}\\x{4321}yb \n 0: a\\x{1234}\\x{4321}yb\n    a\\x{1234}\\x{4321}\\x{3412}b \n 0: a\\x{1234}\\x{4321}\\x{3412}b\n    axxxxbcdefghijb \n 0: axxxxb\n    a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b \n 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b\n    axbxxbcdefghijb \n 0: axbxxb\n    axxxxxbcdefghijb \n 0: axxxxxb\n\\= Expect no match\n    a\\x{1234}b \nNo match\n    axxxxxxbcdefghijb \nNo match\n\n/^[a\\x{c0}]/utf\n\\= Expect no match\n    \\x{100}\nNo match\n\n/(?<=aXb)cd/utf\n    aXbcd\n 0: cd\n\n/(?<=a\\x{100}b)cd/utf\n    a\\x{100}bcd\n 0: cd\n\n/(?<=a\\x{100000}b)cd/utf\n    a\\x{100000}bcd\n 0: cd\n    \n/(?:\\x{100}){3}b/utf\n    \\x{100}\\x{100}\\x{100}b\n 0: \\x{100}\\x{100}\\x{100}b\n\\= Expect no match \n    \\x{100}\\x{100}b\nNo match\n\n/\\x{ab}/utf\n    \\x{ab} \n 0: \\x{ab}\n    \\xc2\\xab\n 0: \\x{ab}\n\\= Expect no match \n    \\x00{ab}\nNo match\n\n/(?<=(.))X/utf\n    WXYZ\n 0: X\n    \\x{256}XYZ \n 0: X\n\\= Expect no match\n    XYZ \nNo match\n\n/[^a]+/g,utf\n    bcd\n 0: bcd\n    \\x{100}aY\\x{256}Z \n 0: \\x{100}\n 0: Y\\x{256}Z\n    \n/^[^a]{2}/utf\n    \\x{100}bc\n 0: \\x{100}b\n \n/^[^a]{2,}/utf\n    \\x{100}bcAa\n 0: \\x{100}bcA\n\n/^[^a]{2,}?/utf\n    \\x{100}bca\n 0: \\x{100}bc\n 1: \\x{100}b\n\n/[^a]+/gi,utf\n    bcd\n 0: bcd\n    \\x{100}aY\\x{256}Z \n 0: \\x{100}\n 0: Y\\x{256}Z\n    \n/^[^a]{2}/i,utf\n    \\x{100}bc\n 0: \\x{100}b\n \n/^[^a]{2,}/i,utf\n    \\x{100}bcAa\n 0: \\x{100}bc\n\n/^[^a]{2,}?/i,utf\n    \\x{100}bca\n 0: \\x{100}bc\n 1: \\x{100}b\n\n/\\x{100}{0,0}/utf\n    abcd\n 0: \n \n/\\x{100}?/utf\n    abcd\n 0: \n    \\x{100}\\x{100} \n 0: \\x{100}\n\n/\\x{100}{0,3}/utf\n    \\x{100}\\x{100} \n 0: \\x{100}\\x{100}\n    \\x{100}\\x{100}\\x{100}\\x{100} \n 0: \\x{100}\\x{100}\\x{100}\n    \n/\\x{100}*/utf\n    abce\n 0: \n    \\x{100}\\x{100}\\x{100}\\x{100} \n 0: \\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\x{100}{1,1}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100} \n 0: \\x{100}\n\n/\\x{100}{1,3}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100} \n 0: \\x{100}\\x{100}\\x{100}\n\n/\\x{100}+/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100} \n 0: \\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\x{100}{3}/utf\n    abcd\\x{100}\\x{100}\\x{100}XX\n 0: \\x{100}\\x{100}\\x{100}\n\n/\\x{100}{3,5}/utf\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}XX\n 0: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\x{100}{3,}/utf,no_auto_possess\n    abcd\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}XX\n 0: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 1: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 2: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 3: \\x{100}\\x{100}\\x{100}\\x{100}\n 4: \\x{100}\\x{100}\\x{100}\n\n/(?<=a\\x{100}{2}b)X/utf\n    Xyyya\\x{100}\\x{100}bXzzz\n 0: X\n\n/\\D*/utf,no_auto_possess\n  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nMatched, but offsets vector is too small to show all matches\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n/\\D*/utf,no_auto_possess\n  \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\nMatched, but offsets vector is too small to show all matches\n 0: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 1: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 2: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 3: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 4: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 5: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 6: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 7: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 8: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n 9: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n10: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n11: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n12: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n13: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n14: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\n\n/\\D/utf\n    1X2\n 0: X\n    1\\x{100}2 \n 0: \\x{100}\n  \n/>\\S/utf\n    > >X Y\n 0: >X\n    > >\\x{100} Y\n 0: >\\x{100}\n  \n/\\d/utf\n    \\x{100}3\n 0: 3\n    \n/\\s/utf\n    \\x{100} X\n 0:  \n    \n/\\D+/utf\n    12abcd34\n 0: abcd\n\\= Expect no match\n    1234  \nNo match\n\n/\\D{2,3}/utf\n    12abcd34\n 0: abc\n    12ab34\n 0: ab\n\\= Expect no match  \n    1234\nNo match\n    12a34  \nNo match\n\n/\\D{2,3}?/utf\n    12abcd34\n 0: abc\n 1: ab\n    12ab34\n 0: ab\n\\= Expect no match  \n    1234\nNo match\n    12a34  \nNo match\n\n/\\d+/utf\n    12abcd34\n 0: 12\n\n/\\d{2,3}/utf\n    12abcd34\n 0: 12\n    1234abcd\n 0: 123\n\\= Expect no match  \n    1.4 \nNo match\n\n/\\d{2,3}?/utf\n    12abcd34\n 0: 12\n    1234abcd\n 0: 123\n 1: 12\n\\= Expect no match  \n    1.4 \nNo match\n\n/\\S+/utf\n    12abcd34\n 0: 12abcd34\n\\= Expect no match\n    \\    \\ \nNo match\n\n/\\S{2,3}/utf\n    12abcd34\n 0: 12a\n    1234abcd\n 0: 123\n\\= Expect no match\n    \\     \\  \nNo match\n\n/\\S{2,3}?/utf\n    12abcd34\n 0: 12a\n 1: 12\n    1234abcd\n 0: 123\n 1: 12\n\\= Expect no match\n    \\     \\  \nNo match\n\n/>\\s+</utf\n    12>      <34\n 0: >      <\n\n/>\\s{2,3}</utf\n    ab>  <cd\n 0: >  <\n    ab>   <ce\n 0: >   <\n\\= Expect no match\n    ab>    <cd \nNo match\n\n/>\\s{2,3}?</utf\n    ab>  <cd\n 0: >  <\n    ab>   <ce\n 0: >   <\n\\= Expect no match\n    ab>    <cd \nNo match\n\n/\\w+/utf\n    12      34\n 0: 12\n\\= Expect no match\n    +++=*! \nNo match\n\n/\\w{2,3}/utf\n    ab  cd\n 0: ab\n    abcd ce\n 0: abc\n\\= Expect no match\n    a.b.c\nNo match\n\n/\\w{2,3}?/utf\n    ab  cd\n 0: ab\n    abcd ce\n 0: abc\n 1: ab\n\\= Expect no match\n    a.b.c\nNo match\n\n/\\W+/utf\n    12====34\n 0: ====\n\\= Expect no match\n    abcd \nNo match\n\n/\\W{2,3}/utf\n    ab====cd\n 0: ===\n    ab==cd\n 0: ==\n\\= Expect no match\n    a.b.c\nNo match\n\n/\\W{2,3}?/utf\n    ab====cd\n 0: ===\n 1: ==\n    ab==cd\n 0: ==\n\\= Expect no match\n    a.b.c\nNo match\n\n/[\\x{100}]/utf\n    \\x{100}\n 0: \\x{100}\n    Z\\x{100}\n 0: \\x{100}\n    \\x{100}Z\n 0: \\x{100}\n\n/[Z\\x{100}]/utf\n    Z\\x{100}\n 0: Z\n    \\x{100}\n 0: \\x{100}\n    \\x{100}Z\n 0: \\x{100}\n\n/[\\x{100}\\x{200}]/utf\n   ab\\x{100}cd\n 0: \\x{100}\n   ab\\x{200}cd\n 0: \\x{200}\n\n/[\\x{100}-\\x{200}]/utf\n   ab\\x{100}cd\n 0: \\x{100}\n   ab\\x{200}cd\n 0: \\x{200}\n   ab\\x{111}cd \n 0: \\x{111}\n\n/[z-\\x{200}]/utf\n   ab\\x{100}cd\n 0: \\x{100}\n   ab\\x{200}cd\n 0: \\x{200}\n   ab\\x{111}cd \n 0: \\x{111}\n   abzcd\n 0: z\n   ab|cd  \n 0: |\n\n/[Q\\x{100}\\x{200}]/utf\n   ab\\x{100}cd\n 0: \\x{100}\n   ab\\x{200}cd\n 0: \\x{200}\n   Q? \n 0: Q\n\n/[Q\\x{100}-\\x{200}]/utf\n   ab\\x{100}cd\n 0: \\x{100}\n   ab\\x{200}cd\n 0: \\x{200}\n   ab\\x{111}cd \n 0: \\x{111}\n   Q? \n 0: Q\n\n/[Qz-\\x{200}]/utf\n   ab\\x{100}cd\n 0: \\x{100}\n   ab\\x{200}cd\n 0: \\x{200}\n   ab\\x{111}cd \n 0: \\x{111}\n   abzcd\n 0: z\n   ab|cd  \n 0: |\n   Q? \n 0: Q\n\n/[\\x{100}\\x{200}]{1,3}/utf\n   ab\\x{100}cd\n 0: \\x{100}\n   ab\\x{200}cd\n 0: \\x{200}\n   ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n 0: \\x{200}\\x{100}\\x{200}\n\n/[\\x{100}\\x{200}]{1,3}?/utf\n   ab\\x{100}cd\n 0: \\x{100}\n   ab\\x{200}cd\n 0: \\x{200}\n   ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n 0: \\x{200}\\x{100}\\x{200}\n 1: \\x{200}\\x{100}\n 2: \\x{200}\n\n/[Q\\x{100}\\x{200}]{1,3}/utf\n   ab\\x{100}cd\n 0: \\x{100}\n   ab\\x{200}cd\n 0: \\x{200}\n   ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n 0: \\x{200}\\x{100}\\x{200}\n\n/[Q\\x{100}\\x{200}]{1,3}?/utf\n   ab\\x{100}cd\n 0: \\x{100}\n   ab\\x{200}cd\n 0: \\x{200}\n   ab\\x{200}\\x{100}\\x{200}\\x{100}cd\n 0: \\x{200}\\x{100}\\x{200}\n 1: \\x{200}\\x{100}\n 2: \\x{200}\n\n/(?<=[\\x{100}\\x{200}])X/utf\n    abc\\x{200}X\n 0: X\n    abc\\x{100}X \n 0: X\n\\= Expect no match\n    X  \nNo match\n\n/(?<=[Q\\x{100}\\x{200}])X/utf\n    abc\\x{200}X\n 0: X\n    abc\\x{100}X \n 0: X\n    abQX \n 0: X\n\\= Expect no match\n    X  \nNo match\n\n/(?<=[\\x{100}\\x{200}]{3})X/utf\n    abc\\x{100}\\x{200}\\x{100}X\n 0: X\n\\= Expect no match\n    abc\\x{200}X\nNo match\n    X  \nNo match\n\n/[^\\x{100}\\x{200}]X/utf\n    AX\n 0: AX\n    \\x{150}X\n 0: \\x{150}X\n    \\x{500}X \n 0: \\x{500}X\n\\= Expect no match\n    \\x{100}X\nNo match\n    \\x{200}X   \nNo match\n\n/[^Q\\x{100}\\x{200}]X/utf\n    AX\n 0: AX\n    \\x{150}X\n 0: \\x{150}X\n    \\x{500}X \n 0: \\x{500}X\n\\= Expect no match\n    \\x{100}X\nNo match\n    \\x{200}X   \nNo match\n    QX \nNo match\n\n/[^\\x{100}-\\x{200}]X/utf\n    AX\n 0: AX\n    \\x{500}X \n 0: \\x{500}X\n\\= Expect no match\n    \\x{100}X\nNo match\n    \\x{150}X\nNo match\n    \\x{200}X   \nNo match\n\n/[z-\\x{100}]/i,utf\n    z\n 0: z\n    Z \n 0: Z\n    \\x{100}\n 0: \\x{100}\n\\= Expect no match\n    \\x{102}\nNo match\n    y    \nNo match\n\n/[\\xFF]/\n    >\\xff<\n 0: \\xff\n\n/[\\xff]/utf\n    >\\x{ff}<\n 0: \\x{ff}\n\n/[^\\xFF]/\n    XYZ\n 0: X\n\n/[^\\xff]/utf\n    XYZ\n 0: X\n    \\x{123} \n 0: \\x{123}\n\n/^[ac]*b/utf\n\\= Expect no match\n    xb\nNo match\n\n/^[ac\\x{100}]*b/utf\n\\= Expect no match\n    xb\nNo match\n\n/^[^x]*b/i,utf\n\\= Expect no match\n    xb\nNo match\n\n/^[^x]*b/utf\n\\= Expect no match\n    xb\nNo match\n  \n/^\\d*b/utf\n\\= Expect no match\n    xb \nNo match\n\n/(|a)/g,utf\n    catac\n 0: \n 0: a\n 1: \n 0: \n 0: a\n 1: \n 0: \n 0: \n    a\\x{256}a \n 0: a\n 1: \n 0: \n 0: a\n 1: \n 0: \n\n/^\\x{85}$/i,utf\n    \\x{85}\n 0: \\x{85}\n\n/^abc./gmx,newline=any,utf\n    abc1 \\x0aabc2 \\x0babc3xx \\x0cabc4 \\x0dabc5xx \\x0d\\x0aabc6 \\x{0085}abc7 \\x{2028}abc8 \\x{2029}abc9 JUNK\n 0: abc1\n 0: abc2\n 0: abc3\n 0: abc4\n 0: abc5\n 0: abc6\n 0: abc7\n 0: abc8\n 0: abc9\n\n/abc.$/gmx,newline=any,utf\n    abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x{0085} abc7\\x{2028} abc8\\x{2029} abc9\n 0: abc1\n 0: abc2\n 0: abc3\n 0: abc4\n 0: abc5\n 0: abc6\n 0: abc7\n 0: abc8\n 0: abc9\n\n/^a\\Rb/bsr=unicode,utf\n    a\\nb\n 0: a\\x{0a}b\n    a\\rb\n 0: a\\x{0d}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n    a\\x0bb\n 0: a\\x{0b}b\n    a\\x0cb\n 0: a\\x{0c}b\n    a\\x{85}b   \n 0: a\\x{85}b\n    a\\x{2028}b \n 0: a\\x{2028}b\n    a\\x{2029}b \n 0: a\\x{2029}b\n\\= Expect no match\n    a\\n\\rb    \nNo match\n\n/^a\\R*b/bsr=unicode,utf\n    ab\n 0: ab\n    a\\nb\n 0: a\\x{0a}b\n    a\\rb\n 0: a\\x{0d}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n    a\\x0bb\n 0: a\\x{0b}b\n    a\\x0c\\x{2028}\\x{2029}b\n 0: a\\x{0c}\\x{2028}\\x{2029}b\n    a\\x{85}b   \n 0: a\\x{85}b\n    a\\n\\rb    \n 0: a\\x{0a}\\x{0d}b\n    a\\n\\r\\x{85}\\x0cb \n 0: a\\x{0a}\\x{0d}\\x{85}\\x{0c}b\n\n/^a\\R+b/bsr=unicode,utf\n    a\\nb\n 0: a\\x{0a}b\n    a\\rb\n 0: a\\x{0d}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n    a\\x0bb\n 0: a\\x{0b}b\n    a\\x0c\\x{2028}\\x{2029}b\n 0: a\\x{0c}\\x{2028}\\x{2029}b\n    a\\x{85}b   \n 0: a\\x{85}b\n    a\\n\\rb    \n 0: a\\x{0a}\\x{0d}b\n    a\\n\\r\\x{85}\\x0cb \n 0: a\\x{0a}\\x{0d}\\x{85}\\x{0c}b\n\\= Expect no match\n    ab  \nNo match\n\n/^a\\R{1,3}b/bsr=unicode,utf\n    a\\nb\n 0: a\\x{0a}b\n    a\\n\\rb\n 0: a\\x{0a}\\x{0d}b\n    a\\n\\r\\x{85}b\n 0: a\\x{0a}\\x{0d}\\x{85}b\n    a\\r\\n\\r\\nb \n 0: a\\x{0d}\\x{0a}\\x{0d}\\x{0a}b\n    a\\r\\n\\r\\n\\r\\nb \n 0: a\\x{0d}\\x{0a}\\x{0d}\\x{0a}\\x{0d}\\x{0a}b\n    a\\n\\r\\n\\rb\n 0: a\\x{0a}\\x{0d}\\x{0a}\\x{0d}b\n    a\\n\\n\\r\\nb \n 0: a\\x{0a}\\x{0a}\\x{0d}\\x{0a}b\n\\= Expect no match\n    a\\n\\n\\n\\rb\nNo match\n    a\\r\nNo match\n\n/\\h+\\V?\\v{3,4}/utf,no_auto_possess\n    \\x09\\x20\\x{a0}X\\x0a\\x0b\\x0c\\x0d\\x0a\n 0: \\x{09} \\x{a0}X\\x{0a}\\x{0b}\\x{0c}\\x{0d}\n 1: \\x{09} \\x{a0}X\\x{0a}\\x{0b}\\x{0c}\n\n/\\V?\\v{3,4}/utf,no_auto_possess\n    \\x20\\x{a0}X\\x0a\\x0b\\x0c\\x0d\\x0a\n 0: X\\x{0a}\\x{0b}\\x{0c}\\x{0d}\n 1: X\\x{0a}\\x{0b}\\x{0c}\n\n/\\h+\\V?\\v{3,4}/utf,no_auto_possess\n    >\\x09\\x20\\x{a0}X\\x0a\\x0a\\x0a<\n 0: \\x{09} \\x{a0}X\\x{0a}\\x{0a}\\x{0a}\n\n/\\V?\\v{3,4}/utf,no_auto_possess\n    >\\x09\\x20\\x{a0}X\\x0a\\x0a\\x0a<\n 0: X\\x{0a}\\x{0a}\\x{0a}\n\n/\\H\\h\\V\\v/utf\n    X X\\x0a\n 0: X X\\x{0a}\n    X\\x09X\\x0b\n 0: X\\x{09}X\\x{0b}\n\\= Expect no match\n    \\x{a0} X\\x0a   \nNo match\n    \n/\\H*\\h+\\V?\\v{3,4}/utf,no_auto_possess\n    \\x09\\x20\\x{a0}X\\x0a\\x0b\\x0c\\x0d\\x0a\n 0: \\x{09} \\x{a0}X\\x{0a}\\x{0b}\\x{0c}\\x{0d}\n 1: \\x{09} \\x{a0}X\\x{0a}\\x{0b}\\x{0c}\n    \\x09\\x20\\x{a0}\\x0a\\x0b\\x0c\\x0d\\x0a\n 0: \\x{09} \\x{a0}\\x{0a}\\x{0b}\\x{0c}\\x{0d}\n 1: \\x{09} \\x{a0}\\x{0a}\\x{0b}\\x{0c}\n    \\x09\\x20\\x{a0}\\x0a\\x0b\\x0c\n 0: \\x{09} \\x{a0}\\x{0a}\\x{0b}\\x{0c}\n\\= Expect no match \n    \\x09\\x20\\x{a0}\\x0a\\x0b\nNo match\n     \n/\\H\\h\\V\\v/utf\n    \\x{3001}\\x{3000}\\x{2030}\\x{2028}\n 0: \\x{3001}\\x{3000}\\x{2030}\\x{2028}\n    X\\x{180e}X\\x{85}\n 0: X\\x{180e}X\\x{85}\n\\= Expect no match\n    \\x{2009} X\\x0a   \nNo match\n    \n/\\H*\\h+\\V?\\v{3,4}/utf,no_auto_possess\n    \\x{1680}\\x{180e}\\x{2007}X\\x{2028}\\x{2029}\\x0c\\x0d\\x0a\n 0: \\x{1680}\\x{180e}\\x{2007}X\\x{2028}\\x{2029}\\x{0c}\\x{0d}\n 1: \\x{1680}\\x{180e}\\x{2007}X\\x{2028}\\x{2029}\\x{0c}\n    \\x09\\x{205f}\\x{a0}\\x0a\\x{2029}\\x0c\\x{2028}\\x0a\n 0: \\x{09}\\x{205f}\\x{a0}\\x{0a}\\x{2029}\\x{0c}\\x{2028}\n 1: \\x{09}\\x{205f}\\x{a0}\\x{0a}\\x{2029}\\x{0c}\n    \\x09\\x20\\x{202f}\\x0a\\x0b\\x0c\n 0: \\x{09} \\x{202f}\\x{0a}\\x{0b}\\x{0c}\n\\= Expect no match \n    \\x09\\x{200a}\\x{a0}\\x{2028}\\x0b\nNo match\n     \n/a\\Rb/I,bsr=anycrlf,utf\nCapture group count = 0\nOptions: utf\n\\R matches CR, LF, or CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n    a\\rb\n 0: a\\x{0d}b\n    a\\nb\n 0: a\\x{0a}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n\\= Expect no match\n    a\\x{85}b\nNo match\n    a\\x0bb     \nNo match\n\n/a\\Rb/I,bsr=unicode,utf\nCapture group count = 0\nOptions: utf\n\\R matches any Unicode newline\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 3\n    a\\rb\n 0: a\\x{0d}b\n    a\\nb\n 0: a\\x{0a}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n    a\\x{85}b\n 0: a\\x{85}b\n    a\\x0bb     \n 0: a\\x{0b}b\n    \n/a\\R?b/I,bsr=anycrlf,utf\nCapture group count = 0\nOptions: utf\n\\R matches CR, LF, or CRLF\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    a\\rb\n 0: a\\x{0d}b\n    a\\nb\n 0: a\\x{0a}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n\\= Expect no match\n    a\\x{85}b\nNo match\n    a\\x0bb     \nNo match\n\n/a\\R?b/I,bsr=unicode,utf\nCapture group count = 0\nOptions: utf\n\\R matches any Unicode newline\nFirst code unit = 'a'\nLast code unit = 'b'\nSubject length lower bound = 2\n    a\\rb\n 0: a\\x{0d}b\n    a\\nb\n 0: a\\x{0a}b\n    a\\r\\nb\n 0: a\\x{0d}\\x{0a}b\n    a\\x{85}b\n 0: a\\x{85}b\n    a\\x0bb     \n 0: a\\x{0b}b\n \n/X/newline=any,utf,firstline\n    A\\x{1ec5}ABCXYZ\n 0: X\n\n/abcd*/utf\n    xxxxabcd\\=ps\n 0: abcd\n    xxxxabcd\\=ph\nPartial match: abcd\n\n/abcd*/i,utf\n    xxxxabcd\\=ps\n 0: abcd\n    xxxxabcd\\=ph\nPartial match: abcd\n    XXXXABCD\\=ps\n 0: ABCD\n    XXXXABCD\\=ph\nPartial match: ABCD\n\n/abc\\d*/utf\n    xxxxabc1\\=ps\n 0: abc1\n    xxxxabc1\\=ph\nPartial match: abc1\n\n/abc[de]*/utf\n    xxxxabcde\\=ps\n 0: abcde\n    xxxxabcde\\=ph\nPartial match: abcde\n\n/\\bthe cat\\b/utf\n    the cat\\=ps\n 0: the cat\n    the cat\\=ph\nPartial match: the cat\n\n/./newline=crlf,utf\n    \\r\\=ps\n 0: \\x{0d}\n    \\r\\=ph\nPartial match: \\x{0d}\n  \n/.{2,3}/newline=crlf,utf\n    \\r\\=ps\nPartial match: \\x{0d}\n    \\r\\=ph\nPartial match: \\x{0d}\n    \\r\\r\\=ps\n 0: \\x{0d}\\x{0d}\n    \\r\\r\\=ph\nPartial match: \\x{0d}\\x{0d}\n    \\r\\r\\r\\=ps\n 0: \\x{0d}\\x{0d}\\x{0d}\n    \\r\\r\\r\\=ph\nPartial match: \\x{0d}\\x{0d}\\x{0d}\n\n/.{2,3}?/newline=crlf,utf\n    \\r\\=ps\nPartial match: \\x{0d}\n    \\r\\=ph\nPartial match: \\x{0d}\n    \\r\\r\\=ps\n 0: \\x{0d}\\x{0d}\n    \\r\\r\\=ph\nPartial match: \\x{0d}\\x{0d}\n    \\r\\r\\r\\=ps\n 0: \\x{0d}\\x{0d}\\x{0d}\n 1: \\x{0d}\\x{0d}\n    \\r\\r\\r\\=ph\nPartial match: \\x{0d}\\x{0d}\\x{0d}\n\n/[^\\x{100}]/utf\n    \\x{100}\\x{101}X\n 0: \\x{101}\n\n/[^\\x{100}]+/utf\n    \\x{100}\\x{101}X\n 0: \\x{101}X\n\n/\\pL\\P{Nd}/utf\n    AB\n 0: AB\n\\= Expect no match\n    A0\nNo match\n    00\nNo match\n\n/\\X./utf\n    AB\n 0: AB\n    A\\x{300}BC\n 0: A\\x{300}B\n    A\\x{300}\\x{301}\\x{302}BC\n 0: A\\x{300}\\x{301}\\x{302}B\n\\= Expect no match\n    \\x{300}\nNo match\n\n/\\X\\X/utf\n    ABC\n 0: AB\n    A\\x{300}B\\x{300}\\x{301}C\n 0: A\\x{300}B\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\x{302}BC\n 0: A\\x{300}\\x{301}\\x{302}B\n\\= Expect no match\n    \\x{300}\nNo match\n\n/^\\pL+/utf\n    abcd\n 0: abcd\n    a\n 0: a\n\n/^\\PL+/utf\n    1234\n 0: 1234\n    =\n 0: =\n\\= Expect no match\n    abcd\nNo match\n\n/^\\X+/utf\n    abcdA\\x{300}\\x{301}\\x{302}\n 0: abcdA\\x{300}\\x{301}\\x{302}\n    A\\x{300}\\x{301}\\x{302}\n 0: A\\x{300}\\x{301}\\x{302}\n    A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}\n 0: A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}\n    a\n 0: a\n    \\x{300}\\x{301}\\x{302}\n 0: \\x{300}\\x{301}\\x{302}\n\n/\\X?abc/utf\n    abc\n 0: abc\n    A\\x{300}abc\n 0: A\\x{300}abc\n    A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abcxyz\n 0: A\\x{300}abc\n    \\x{300}abc\n 0: \\x{300}abc\n\n/^\\X?abc/utf\n    abc\n 0: abc\n    A\\x{300}abc\n 0: A\\x{300}abc\n    \\x{300}abc\n 0: \\x{300}abc\n\\= Expect no match\n    A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abcxyz\nNo match\n\n/\\X*abc/utf\n    abc\n 0: abc\n    A\\x{300}abc\n 0: A\\x{300}abc\n    A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abcxyz\n 0: A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abc\n    \\x{300}abc\n 0: \\x{300}abc\n\n/^\\X*abc/utf\n    abc\n 0: abc\n    A\\x{300}abc\n 0: A\\x{300}abc\n    A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abcxyz\n 0: A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abc\n    \\x{300}abc\n 0: \\x{300}abc\n\n/^\\pL?=./utf\n    A=b\n 0: A=b\n    =c\n 0: =c\n\\= Expect no match\n    1=2\nNo match\n    AAAA=b\nNo match\n\n/^\\pL*=./utf\n    AAAA=b\n 0: AAAA=b\n    =c\n 0: =c\n\\= Expect no match\n    1=2\nNo match\n\n/^\\X{2,3}X/utf\n    A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X\n 0: A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X\n    A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X\n 0: A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X\n\\= Expect no match\n    X\nNo match\n    A\\x{300}\\x{301}\\x{302}X\nNo match\n    A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X\nNo match\n\n/^\\pC\\pL\\pM\\pN\\pP\\pS\\pZ</utf\n    \\x7f\\x{c0}\\x{30f}\\x{660}\\x{66c}\\x{f01}\\x{1680}<\n 0: \\x{7f}\\x{c0}\\x{30f}\\x{660}\\x{66c}\\x{f01}\\x{1680}<\n    \\np\\x{300}9!\\$ <\n 0: \\x{0a}p\\x{300}9!$ <\n\\= Expect no match\n    ap\\x{300}9!\\$ <\nNo match\n  \n/^\\PC/utf\n    X\n 0: X\n\\= Expect no match\n    \\x7f\nNo match\n  \n/^\\PL/utf\n    9\n 0: 9\n\\= Expect no match\n    \\x{c0}\nNo match\n  \n/^\\PM/utf\n    X\n 0: X\n\\= Expect no match\n    \\x{30f}\nNo match\n  \n/^\\PN/utf\n    X\n 0: X\n\\= Expect no match\n    \\x{660}\nNo match\n  \n/^\\PP/utf\n    X\n 0: X\n\\= Expect no match\n    \\x{66c}\nNo match\n  \n/^\\PS/utf\n    X\n 0: X\n\\= Expect no match\n    \\x{f01}\nNo match\n  \n/^\\PZ/utf\n    X\n 0: X\n\\= Expect no match\n    \\x{1680}\nNo match\n    \n/^\\p{Cc}/utf\n    \\x{017}\n 0: \\x{17}\n    \\x{09f}\n 0: \\x{9f}\n\\= Expect no match\n    \\x{0600}\nNo match\n  \n/^\\p{Cf}/utf\n    \\x{601}\n 0: \\x{601}\n    \\x{180e}\n 0: \\x{180e}\n    \\x{061c}\n 0: \\x{61c}\n    \\x{2066}\n 0: \\x{2066}\n    \\x{2067}\n 0: \\x{2067}\n    \\x{2068}\n 0: \\x{2068}\n    \\x{2069}\n 0: \\x{2069}\n\\= Expect no match\n    \\x{09f}\nNo match\n  \n/^\\p{Cn}/utf\n\\= Expect no match\n    \\x{09f}\nNo match\n  \n/^\\p{Co}/utf\n    \\x{f8ff}\n 0: \\x{f8ff}\n\\= Expect no match\n    \\x{09f}\nNo match\n  \n/^\\p{Cs}/utf\n    \\x{dfff}\\=no_utf_check\n 0: \\x{dfff}\n\\= Expect no match\n    \\x{09f}\nNo match\n  \n/^\\p{Ll}/utf\n    a\n 0: a\n\\= Expect no match\n    Z\nNo match\n    \\x{e000}\nNo match\n  \n/^\\p{Lm}/utf\n    \\x{2b0}\n 0: \\x{2b0}\n\\= Expect no match\n    a\nNo match\n  \n/^\\p{Lo}/utf\n    \\x{1bb}\n 0: \\x{1bb}\n\\= Expect no match\n    a\nNo match\n    \\x{2b0}\nNo match\n  \n/^\\p{Lt}/utf\n    \\x{1c5}\n 0: \\x{1c5}\n\\= Expect no match\n    a\nNo match\n    \\x{2b0}\nNo match\n  \n/^\\p{Lu}/utf\n    A\n 0: A\n\\= Expect no match\n    \\x{2b0}\nNo match\n  \n/^\\p{Mc}/utf\n    \\x{903}\n 0: \\x{903}\n\\= Expect no match\n    X\nNo match\n    \\x{300}\nNo match\n       \n/^\\p{Me}/utf\n    \\x{488}\n 0: \\x{488}\n\\= Expect no match\n    X\nNo match\n    \\x{903}\nNo match\n    \\x{300}\nNo match\n  \n/^\\p{Mn}/utf\n    \\x{300}\n 0: \\x{300}\n    \\x{1a1b}\n 0: \\x{1a1b}\n\\= Expect no match\n    X\nNo match\n    \\x{903}\nNo match\n  \n/^\\p{Nd}+/utf,no_auto_possess\n    0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\\x{668}\\x{669}\\x{66a}\nMatched, but offsets vector is too small to show all matches\n 0: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\\x{668}\\x{669}\n 1: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\\x{668}\n 2: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\n 3: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\n 4: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\n 5: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\n 6: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\n 7: 0123456789\\x{660}\\x{661}\\x{662}\n 8: 0123456789\\x{660}\\x{661}\n 9: 0123456789\\x{660}\n10: 0123456789\n11: 012345678\n12: 01234567\n13: 0123456\n14: 012345\n    \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\\x{6f8}\\x{6f9}\\x{6fa}\n 0: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\\x{6f8}\\x{6f9}\n 1: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\\x{6f8}\n 2: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\n 3: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\n 4: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\n 5: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\n 6: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\n 7: \\x{6f0}\\x{6f1}\\x{6f2}\n 8: \\x{6f0}\\x{6f1}\n 9: \\x{6f0}\n    \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\\x{96e}\\x{96f}\\x{970}\n 0: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\\x{96e}\\x{96f}\n 1: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\\x{96e}\n 2: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\n 3: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\n 4: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\n 5: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\n 6: \\x{966}\\x{967}\\x{968}\\x{969}\n 7: \\x{966}\\x{967}\\x{968}\n 8: \\x{966}\\x{967}\n 9: \\x{966}\n\\= Expect no match\n    X\nNo match\n  \n/^\\p{Nl}/utf\n    \\x{16ee}\n 0: \\x{16ee}\n\\= Expect no match\n    X\nNo match\n    \\x{966}\nNo match\n  \n/^\\p{No}/utf\n    \\x{b2}\n 0: \\x{b2}\n    \\x{b3}\n 0: \\x{b3}\n\\= Expect no match\n    X\nNo match\n    \\x{16ee}\nNo match\n  \n/^\\p{Pc}/utf\n    \\x5f\n 0: _\n    \\x{203f}\n 0: \\x{203f}\n\\= Expect no match\n    X\nNo match\n    -\nNo match\n    \\x{58a}\nNo match\n  \n/^\\p{Pd}/utf\n    -\n 0: -\n    \\x{58a}\n 0: \\x{58a}\n\\= Expect no match\n    X\nNo match\n    \\x{203f}\nNo match\n  \n/^\\p{Pe}/utf\n    )\n 0: )\n    ]\n 0: ]\n    }\n 0: }\n    \\x{f3b}\n 0: \\x{f3b}\n    \\x{2309}\n 0: \\x{2309}\n    \\x{230b}\n 0: \\x{230b}\n\\= Expect no match\n    X\nNo match\n    \\x{203f}\nNo match\n    (\nNo match\n    [\nNo match\n    {\nNo match\n    \\x{f3c}\nNo match\n\n/^\\p{Pf}/utf\n    \\x{bb}\n 0: \\x{bb}\n    \\x{2019}\n 0: \\x{2019}\n\\= Expect no match\n    X\nNo match\n    \\x{203f}\nNo match\n  \n/^\\p{Pi}/utf\n    \\x{ab}\n 0: \\x{ab}\n    \\x{2018}\n 0: \\x{2018}\n\\= Expect no match\n    X\nNo match\n    \\x{203f}\nNo match\n  \n/^\\p{Po}/utf\n    !\n 0: !\n    \\x{37e}\n 0: \\x{37e}\n\\= Expect no match\n    X\nNo match\n    \\x{203f}\nNo match\n  \n/^\\p{Ps}/utf\n    (\n 0: (\n    [\n 0: [\n    {\n 0: {\n    \\x{f3c}\n 0: \\x{f3c}\n    \\x{2308}\n 0: \\x{2308}\n    \\x{230a}\n 0: \\x{230a}\n\\= Expect no match\n    X\nNo match\n    )\nNo match\n    ]\nNo match\n    }\nNo match\n    \\x{f3b}\nNo match\n  \n/^\\p{Sc}+/utf\n    $\\x{a2}\\x{a3}\\x{a4}\\x{a5}\\x{a6}\n 0: $\\x{a2}\\x{a3}\\x{a4}\\x{a5}\n    \\x{9f2}\n 0: \\x{9f2}\n\\= Expect no match\n    X\nNo match\n    \\x{2c2}\nNo match\n  \n/^\\p{Sk}/utf\n    \\x{2c2}\n 0: \\x{2c2}\n\\= Expect no match\n    X\nNo match\n    \\x{9f2}\nNo match\n  \n/^\\p{Sm}+/utf\n    +<|~\\x{ac}\\x{2044}\n 0: +<|~\\x{ac}\\x{2044}\n\\= Expect no match\n    X\nNo match\n    \\x{9f2}\nNo match\n  \n/^\\p{So}/utf\n    \\x{a6}\n 0: \\x{a6}\n    \\x{482}\n 0: \\x{482}\n\\= Expect no match\n    X\nNo match\n    \\x{9f2}\nNo match\n  \n/^\\p{Zl}/utf\n    \\x{2028}\n 0: \\x{2028}\n\\= Expect no match\n    X\nNo match\n    \\x{2029}\nNo match\n  \n/^\\p{Zp}/utf\n    \\x{2029}\n 0: \\x{2029}\n\\= Expect no match\n    X\nNo match\n    \\x{2028}\nNo match\n  \n/^\\p{Zs}/utf\n    \\ \\\n 0:  \n    \\x{a0}\n 0: \\x{a0}\n    \\x{1680}\n 0: \\x{1680}\n    \\x{2000}\n 0: \\x{2000}\n    \\x{2001}\n 0: \\x{2001}\n\\= Expect no match\n    \\x{2028}\nNo match\n    \\x{200d}\nNo match\n  \n/\\p{Nd}+(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: \\x{660}\\x{661}\\x{662}A\n 2: \\x{660}\\x{661}\\x{662}\n  \n/\\p{Nd}+?(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: \\x{660}\\x{661}\\x{662}A\n 2: \\x{660}\\x{661}\\x{662}\n  \n/\\p{Nd}{2,}(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: \\x{660}\\x{661}\\x{662}A\n  \n/\\p{Nd}{2,}?(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: \\x{660}\\x{661}\\x{662}A\n  \n/\\p{Nd}*(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: \\x{660}\\x{661}\\x{662}A\n 2: \\x{660}\\x{661}\\x{662}\n 3: \\x{660}\\x{661}\n  \n/\\p{Nd}*?(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: \\x{660}\\x{661}\\x{662}A\n 2: \\x{660}\\x{661}\\x{662}\n 3: \\x{660}\\x{661}\n  \n/\\p{Nd}{2}(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}A\n  \n/\\p{Nd}{2,3}(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: \\x{660}\\x{661}\\x{662}A\n  \n/\\p{Nd}{2,3}?(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n 1: \\x{660}\\x{661}\\x{662}A\n  \n/\\p{Nd}?(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}\n 1: \\x{660}\\x{661}\n  \n/\\p{Nd}??(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}\n 1: \\x{660}\\x{661}\n  \n/\\p{Nd}*+(..)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}AB\n  \n/\\p{Nd}*+(...)/utf\n      \\x{660}\\x{661}\\x{662}ABC\n 0: \\x{660}\\x{661}\\x{662}ABC\n  \n/\\p{Nd}*+(....)/utf\n\\= Expect no match\n      \\x{660}\\x{661}\\x{662}ABC\nNo match\n  \n/\\p{^Lu}/i,utf\n    1234\n 0: 1\n\\= Expect no match\n    ABC\nNo match\n\n/\\P{Lu}/i,utf\n    1234\n 0: 1\n\\= Expect no match\n    ABC\nNo match\n\n/(?<=A\\p{Nd})XYZ/utf\n    A2XYZ\n 0: XYZ\n    123A5XYZPQR\n 0: XYZ\n    ABA\\x{660}XYZpqr\n 0: XYZ\n\\= Expect no match\n    AXYZ\nNo match\n    XYZ\nNo match\n    \n/(?<!\\pL)XYZ/utf\n    1XYZ\n 0: XYZ\n    AB=XYZ..\n 0: XYZ\n    XYZ\n 0: XYZ\n\\= Expect no match\n    WXYZ\nNo match\n\n/[\\p{Nd}]/utf\n    1234\n 0: 1\n\n/[\\p{Nd}+-]+/utf\n    1234\n 0: 1234\n    12-34\n 0: 12-34\n    12+\\x{661}-34\n 0: 12+\\x{661}-34\n\\= Expect no match\n    abcd\nNo match\n\n/[\\P{Nd}]+/utf\n    abcd\n 0: abcd\n\\= Expect no match\n    1234\nNo match\n\n/\\D+/utf,no_auto_possess\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nMatched, but offsets vector is too small to show all matches\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\nNo match\n     \n/\\P{Nd}+/utf,no_auto_possess\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nMatched, but offsets vector is too small to show all matches\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\nNo match\n\n/[\\D]+/utf,no_auto_possess\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nMatched, but offsets vector is too small to show all matches\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\nNo match\n\n/[\\P{Nd}]+/utf,no_auto_possess\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nMatched, but offsets vector is too small to show all matches\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\nNo match\n\n/[\\D\\P{Nd}]+/utf,no_auto_possess\n    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nMatched, but offsets vector is too small to show all matches\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\\= Expect no match\n    11111111111111111111111111111111111111111111111111111111111111111111111\nNo match\n\n/\\pL/utf\n    a\n 0: a\n    A\n 0: A\n\n/\\pL/i,utf\n    a\n 0: a\n    A\n 0: A\n    \n/^\\x{c0}$/i,utf\n    \\x{c0}\n 0: \\x{c0}\n    \\x{e0}\n 0: \\x{e0}\n\n/^\\x{e0}$/i,utf\n    \\x{c0}\n 0: \\x{c0}\n    \\x{e0}\n 0: \\x{e0}\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/utf\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 0: A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n\\= Expect no match\n    a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\nNo match\n    A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}\nNo match\n    A\\x{391}\\x{1044F}\\x{ff3a}\\x{1fb0}\nNo match\n    A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}\nNo match\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}\nNo match\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/i,utf\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 0: A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n    a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 0: a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n    A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}\n 0: A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}\n    A\\x{391}\\x{1044F}\\x{ff3a}\\x{1fb0}\n 0: A\\x{391}\\x{1044f}\\x{ff3a}\\x{1fb0}\n    A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}\n 0: A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}\n    A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}\n 0: A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}\n\n/\\x{391}+/i,utf\n    \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}\n 0: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}\n\n/\\x{391}{3,5}(.)/i,utf\n    \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X\n 0: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X\n 1: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}\n 2: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\n\n/\\x{391}{3,5}?(.)/i,utf\n    \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X\n 0: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X\n 1: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}\n 2: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\n\n/[\\x{391}\\x{ff3a}]/i,utf\n    \\x{391}\n 0: \\x{391}\n    \\x{ff3a}\n 0: \\x{ff3a}\n    \\x{3b1}\n 0: \\x{3b1}\n    \\x{ff5a}\n 0: \\x{ff5a}\n    \n/[\\x{c0}\\x{391}]/i,utf\n    \\x{c0}\n 0: \\x{c0}\n    \\x{e0}\n 0: \\x{e0}\n\n/[\\x{105}-\\x{109}]/i,utf\n    \\x{104}\n 0: \\x{104}\n    \\x{105}\n 0: \\x{105}\n    \\x{109}\n 0: \\x{109}\n\\= Expect no match\n    \\x{100}\nNo match\n    \\x{10a}\nNo match\n    \n/[z-\\x{100}]/i,utf\n    Z\n 0: Z\n    z\n 0: z\n    \\x{39c}\n 0: \\x{39c}\n    \\x{178}\n 0: \\x{178}\n    |\n 0: |\n    \\x{80}\n 0: \\x{80}\n    \\x{ff}\n 0: \\x{ff}\n    \\x{100}\n 0: \\x{100}\n    \\x{101}\n 0: \\x{101}\n\\= Expect no match\n    \\x{102}\nNo match\n    Y\nNo match\n    y\nNo match\n\n/[z-\\x{100}]/i,utf\n\n/^\\X/utf\n    A\n 0: A\n    A\\x{300}BC\n 0: A\\x{300}\n    A\\x{300}\\x{301}\\x{302}BC\n 0: A\\x{300}\\x{301}\\x{302}\n    \\x{300}\n 0: \\x{300}\n\n/^(\\X*)C/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n 0: A\\x{300}\\x{301}\\x{302}BC\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 0: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 1: A\\x{300}\\x{301}\\x{302}BC\n\n/^(\\X*?)C/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n 0: A\\x{300}\\x{301}\\x{302}BC\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 0: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 1: A\\x{300}\\x{301}\\x{302}BC\n\n/^(\\X*)(.)/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n 0: A\\x{300}\\x{301}\\x{302}BCA\n 1: A\\x{300}\\x{301}\\x{302}BC\n 2: A\\x{300}\\x{301}\\x{302}B\n 3: A\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 0: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 1: A\\x{300}\\x{301}\\x{302}BCA\n 2: A\\x{300}\\x{301}\\x{302}BC\n 3: A\\x{300}\\x{301}\\x{302}B\n 4: A\n\n/^(\\X*?)(.)/utf\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}\n 0: A\\x{300}\\x{301}\\x{302}BCA\n 1: A\\x{300}\\x{301}\\x{302}BC\n 2: A\\x{300}\\x{301}\\x{302}B\n 3: A\n    A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 0: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C\n 1: A\\x{300}\\x{301}\\x{302}BCA\n 2: A\\x{300}\\x{301}\\x{302}BC\n 3: A\\x{300}\\x{301}\\x{302}B\n 4: A\n\n/^\\X(.)/utf\n\\= Expect no match\n    A\\x{300}\\x{301}\\x{302}\nNo match\n\n/^\\X{2,3}(.)/utf\n    A\\x{300}\\x{301}B\\x{300}X\n 0: A\\x{300}\\x{301}B\\x{300}X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}\n 0: A\\x{300}\\x{301}B\\x{300}C\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X\n 0: A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X\n 1: A\\x{300}\\x{301}B\\x{300}C\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}DA\\x{300}X\n 0: A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}D\n 1: A\\x{300}\\x{301}B\\x{300}C\n    \n/^\\X{2,3}?(.)/utf\n    A\\x{300}\\x{301}B\\x{300}X\n 0: A\\x{300}\\x{301}B\\x{300}X\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}\n 0: A\\x{300}\\x{301}B\\x{300}C\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X\n 0: A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X\n 1: A\\x{300}\\x{301}B\\x{300}C\n    A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}DA\\x{300}X\n 0: A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}D\n 1: A\\x{300}\\x{301}B\\x{300}C\n\n/^\\pN{2,3}X/\n    12X\n 0: 12X\n    123X\n 0: 123X\n\\= Expect no match\n    X\nNo match\n    1X\nNo match\n    1234X\nNo match\n\n/\\x{100}/i,utf\n    \\x{100}\n 0: \\x{100}\n    \\x{101}\n 0: \\x{101}\n    \n/^\\p{Han}+/utf\n    \\x{2e81}\\x{3007}\\x{2f804}\\x{31a0}\n 0: \\x{2e81}\\x{3007}\\x{2f804}\n\\= Expect no match\n    \\x{2e7f}\nNo match\n\n/^\\P{Katakana}+/utf\n    \\x{3105}\n 0: \\x{3105}\n\\= Expect no match\n    \\x{30ff}\nNo match\n\n/^[\\p{Arabic}]/utf\n    \\x{06e9}\n 0: \\x{6e9}\n    \\x{060b}\n 0: \\x{60b}\n\\= Expect no match\n    X\\x{06e9}\nNo match\n\n/^[\\P{Yi}]/utf\n    \\x{2f800}\n 0: \\x{2f800}\n\\= Expect no match\n    \\x{a014}\nNo match\n    \\x{a4c6}\nNo match\n\n/^\\p{Any}X/utf\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n\\= Expect no match\n    X\nNo match\n    \n/^\\P{Any}X/utf\n\\= Expect no match\n    AX\nNo match\n    \n/^\\p{Any}?X/utf\n    XYZ\n 0: X\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n\\= Expect no match\n    ABXYZ\nNo match\n\n/^\\P{Any}?X/utf\n    XYZ\n 0: X\n\\= Expect no match\n    AXYZ\nNo match\n    \\x{1234}XYZ\nNo match\n    ABXYZ\nNo match\n\n/^\\p{Any}+X/utf\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n    A\\x{1234}XYZ\n 0: A\\x{1234}X\n\\= Expect no match\n    XYZ\nNo match\n\n/^\\P{Any}+X/utf\n\\= Expect no match\n    AXYZ\nNo match\n    \\x{1234}XYZ\nNo match\n    A\\x{1234}XYZ\nNo match\n    XYZ\nNo match\n\n/^\\p{Any}*X/utf\n    XYZ\n 0: X\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n    A\\x{1234}XYZ\n 0: A\\x{1234}X\n\n/^\\P{Any}*X/utf\n    XYZ\n 0: X\n\\= Expect no match\n    AXYZ\nNo match\n    \\x{1234}XYZ\nNo match\n    A\\x{1234}XYZ\nNo match\n\n/^[\\p{Any}]X/utf\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n\\= Expect no match\n    X\nNo match\n    \n/^[\\P{Any}]X/utf\n\\= Expect no match\n    AX\nNo match\n    \n/^[\\p{Any}]?X/utf\n    XYZ\n 0: X\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n\\= Expect no match\n    ABXYZ\nNo match\n\n/^[\\P{Any}]?X/utf\n    XYZ\n 0: X\n\\= Expect no match\n    AXYZ\nNo match\n    \\x{1234}XYZ\nNo match\n    ABXYZ\nNo match\n\n/^[\\p{Any}]+X/utf\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n    A\\x{1234}XYZ\n 0: A\\x{1234}X\n\\= Expect no match\n    XYZ\nNo match\n\n/^[\\P{Any}]+X/utf\n\\= Expect no match\n    AXYZ\nNo match\n    \\x{1234}XYZ\nNo match\n    A\\x{1234}XYZ\nNo match\n    XYZ\nNo match\n\n/^[\\p{Any}]*X/utf\n    XYZ\n 0: X\n    AXYZ\n 0: AX\n    \\x{1234}XYZ\n 0: \\x{1234}X\n    A\\x{1234}XYZ\n 0: A\\x{1234}X\n\n/^[\\P{Any}]*X/utf\n    XYZ\n 0: X\n\\= Expect no match\n    AXYZ\nNo match\n    \\x{1234}XYZ\nNo match\n    A\\x{1234}XYZ\nNo match\n\n/^\\p{Any}{3,5}?/utf\n    abcdefgh\n 0: abcde\n 1: abcd\n 2: abc\n    \\x{1234}\\n\\r\\x{3456}xyz\n 0: \\x{1234}\\x{0a}\\x{0d}\\x{3456}x\n 1: \\x{1234}\\x{0a}\\x{0d}\\x{3456}\n 2: \\x{1234}\\x{0a}\\x{0d}\n\n/^\\p{Any}{3,5}/utf\n    abcdefgh\n 0: abcde\n    \\x{1234}\\n\\r\\x{3456}xyz\n 0: \\x{1234}\\x{0a}\\x{0d}\\x{3456}x\n\n/^\\P{Any}{3,5}?/utf\n\\= Expect no match\n    abcdefgh\nNo match\n    \\x{1234}\\n\\r\\x{3456}xyz\nNo match\n\n/^\\p{L&}X/utf\n     AXY\n 0: AX\n     aXY\n 0: aX\n     \\x{1c5}XY\n 0: \\x{1c5}X\n\\= Expect no match\n     \\x{1bb}XY\nNo match\n     \\x{2b0}XY\nNo match\n     !XY\nNo match\n\n/^[\\p{L&}]X/utf\n     AXY\n 0: AX\n     aXY\n 0: aX\n     \\x{1c5}XY\n 0: \\x{1c5}X\n\\= Expect no match\n     \\x{1bb}XY\nNo match\n     \\x{2b0}XY\nNo match\n     !XY\nNo match\n\n/^\\p{L&}+X/utf\n     AXY\n 0: AX\n     aXY\n 0: aX\n     AbcdeXyz\n 0: AbcdeX\n     \\x{1c5}AbXY\n 0: \\x{1c5}AbX\n     abcDEXypqreXlmn\n 0: abcDEXypqreX\n 1: abcDEX\n\\= Expect no match\n     \\x{1bb}XY\nNo match\n     \\x{2b0}XY\nNo match\n     !XY\nNo match\n\n/^[\\p{L&}]+X/utf\n     AXY\n 0: AX\n     aXY\n 0: aX\n     AbcdeXyz\n 0: AbcdeX\n     \\x{1c5}AbXY\n 0: \\x{1c5}AbX\n     abcDEXypqreXlmn\n 0: abcDEXypqreX\n 1: abcDEX\n\\= Expect no match\n     \\x{1bb}XY\nNo match\n     \\x{2b0}XY\nNo match\n     !XY\nNo match\n\n/^\\p{L&}+?X/utf\n     AXY\n 0: AX\n     aXY\n 0: aX\n     AbcdeXyz\n 0: AbcdeX\n     \\x{1c5}AbXY\n 0: \\x{1c5}AbX\n     abcDEXypqreXlmn\n 0: abcDEXypqreX\n 1: abcDEX\n\\= Expect no match\n     \\x{1bb}XY\nNo match\n     \\x{2b0}XY\nNo match\n     !XY\nNo match\n\n/^[\\p{L&}]+?X/utf\n     AXY\n 0: AX\n     aXY\n 0: aX\n     AbcdeXyz\n 0: AbcdeX\n     \\x{1c5}AbXY\n 0: \\x{1c5}AbX\n     abcDEXypqreXlmn\n 0: abcDEXypqreX\n 1: abcDEX\n\\= Expect no match\n     \\x{1bb}XY\nNo match\n     \\x{2b0}XY\nNo match\n     !XY\nNo match\n\n/^\\P{L&}X/utf\n     !XY\n 0: !X\n     \\x{1bb}XY\n 0: \\x{1bb}X\n     \\x{2b0}XY\n 0: \\x{2b0}X\n\\= Expect no match\n     \\x{1c5}XY\nNo match\n     AXY\nNo match\n\n/^[\\P{L&}]X/utf\n     !XY\n 0: !X\n     \\x{1bb}XY\n 0: \\x{1bb}X\n     \\x{2b0}XY\n 0: \\x{2b0}X\n\\= Expect no match\n     \\x{1c5}XY\nNo match\n     AXY\nNo match\n\n/^\\x{023a}+?(\\x{0130}+)/i,utf\n  \\x{023a}\\x{2c65}\\x{0130}\n 0: \\x{23a}\\x{2c65}\\x{130}\n  \n/^\\x{023a}+([^X])/i,utf\n  \\x{023a}\\x{2c65}X\n 0: \\x{23a}\\x{2c65}\n \n/\\x{c0}+\\x{116}+/i,utf\n    \\x{c0}\\x{e0}\\x{116}\\x{117}\n 0: \\x{c0}\\x{e0}\\x{116}\\x{117}\n\n/[\\x{c0}\\x{116}]+/i,utf\n    \\x{c0}\\x{e0}\\x{116}\\x{117}\n 0: \\x{c0}\\x{e0}\\x{116}\\x{117}\n\n# Check property support in non-UTF-8 mode\n \n/\\p{L}{4}/\n    123abcdefg\n 0: abcd\n    123abc\\xc4\\xc5zz\n 0: abc\\xc4\n\n/\\p{Carian}\\p{Cham}\\p{Kayah_Li}\\p{Lepcha}\\p{Lycian}\\p{Lydian}\\p{Ol_Chiki}\\p{Rejang}\\p{Saurashtra}\\p{Sundanese}\\p{Vai}/utf\n    \\x{102A4}\\x{AA52}\\x{A91D}\\x{1C46}\\x{10283}\\x{1092E}\\x{1C6B}\\x{A93B}\\x{A8BF}\\x{1BA0}\\x{A50A}====\n 0: \\x{102a4}\\x{aa52}\\x{a91d}\\x{1c46}\\x{10283}\\x{1092e}\\x{1c6b}\\x{a93b}\\x{a8bf}\\x{1ba0}\\x{a50a}\n\n/\\x{a77d}\\x{1d79}/i,utf\n    \\x{a77d}\\x{1d79}\n 0: \\x{a77d}\\x{1d79}\n    \\x{1d79}\\x{a77d}\n 0: \\x{1d79}\\x{a77d}\n\n/\\x{a77d}\\x{1d79}/utf\n    \\x{a77d}\\x{1d79}\n 0: \\x{a77d}\\x{1d79}\n\\= Expect no match\n    \\x{1d79}\\x{a77d}\nNo match\n\n/^\\p{Xan}/utf\n    ABCD\n 0: A\n    1234\n 0: 1\n    \\x{6ca}\n 0: \\x{6ca}\n    \\x{a6c}\n 0: \\x{a6c}\n    \\x{10a7}\n 0: \\x{10a7}\n\\= Expect no match\n    _ABC\nNo match\n\n/^\\p{Xan}+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}\n\\= Expect no match\n    _ABC\nNo match\n\n/^\\p{Xan}*/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}\n    \n/^\\p{Xan}{2,9}/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\n    \n/^[\\p{Xan}]/utf\n    ABCD1234_\n 0: A\n    1234abcd_\n 0: 1\n    \\x{6ca}\n 0: \\x{6ca}\n    \\x{a6c}\n 0: \\x{a6c}\n    \\x{10a7}\n 0: \\x{10a7}\n\\= Expect no match\n    _ABC\nNo match\n \n/^[\\p{Xan}]+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}\n\\= Expect no match\n    _ABC\nNo match\n\n/^>\\p{Xsp}/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n 0: >\\x{1680}\n\\= Expect no match\n    \\x{0b}\nNo match\n\n/^>\\p{Xsp}+/utf,no_auto_possess\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 1: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\n 2: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\n 3: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\n 4: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\n 5: > \\x{09}\\x{0a}\\x{0c}\n 6: > \\x{09}\\x{0a}\n 7: > \\x{09}\n 8: > \n\n/^>\\p{Xsp}*/utf,no_auto_possess\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 1: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\n 2: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\n 3: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\n 4: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\n 5: > \\x{09}\\x{0a}\\x{0c}\n 6: > \\x{09}\\x{0a}\n 7: > \\x{09}\n 8: > \n 9: >\n    \n/^>\\p{Xsp}{2,9}/utf,no_auto_possess\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 1: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\n 2: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\n 3: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\n 4: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\n 5: > \\x{09}\\x{0a}\\x{0c}\n 6: > \\x{09}\\x{0a}\n 7: > \\x{09}\n    \n/^>[\\p{Xsp}]/utf,no_auto_possess\n    >\\x{2028}\\x{0b}\n 0: >\\x{2028}\n \n/^>[\\p{Xsp}]+/utf,no_auto_possess\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 1: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\n 2: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\n 3: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\n 4: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\n 5: > \\x{09}\\x{0a}\\x{0c}\n 6: > \\x{09}\\x{0a}\n 7: > \\x{09}\n 8: > \n\n/^>\\p{Xps}/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n 0: >\\x{1680}\n    >\\x{a0}\n 0: >\\x{a0}\n\\= Expect no match\n    \\x{0b}\nNo match\n\n/^>\\p{Xps}+/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^>\\p{Xps}+?/utf\n    >\\x{1680}\\x{2028}\\x{0b}\n 0: >\\x{1680}\\x{2028}\\x{0b}\n 1: >\\x{1680}\\x{2028}\n 2: >\\x{1680}\n\n/^>\\p{Xps}*/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n    \n/^>\\p{Xps}{2,9}/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n    \n/^>\\p{Xps}{2,9}?/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 1: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\n 2: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\n 3: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\n 4: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\n 5: > \\x{09}\\x{0a}\\x{0c}\n 6: > \\x{09}\\x{0a}\n 7: > \\x{09}\n    \n/^>[\\p{Xps}]/utf\n    >\\x{2028}\\x{0b}\n 0: >\\x{2028}\n \n/^>[\\p{Xps}]+/utf\n    > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n 0: > \\x{09}\\x{0a}\\x{0c}\\x{0d}\\x{a0}\\x{1680}\\x{2028}\\x{0b}\n\n/^\\p{Xwd}/utf\n    ABCD\n 0: A\n    1234\n 0: 1\n    \\x{6ca}\n 0: \\x{6ca}\n    \\x{a6c}\n 0: \\x{a6c}\n    \\x{10a7}\n 0: \\x{10a7}\n    _ABC\n 0: _\n\\= Expect no match\n    []\nNo match\n\n/^\\p{Xwd}+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\n/^\\p{Xwd}*/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n    \n/^\\p{Xwd}{2,9}/utf\n    A_12\\x{6ca}\\x{a6c}\\x{10a7}\n 0: A_12\\x{6ca}\\x{a6c}\\x{10a7}\n    \n/^[\\p{Xwd}]/utf\n    ABCD1234_\n 0: A\n    1234abcd_\n 0: 1\n    \\x{6ca}\n 0: \\x{6ca}\n    \\x{a6c}\n 0: \\x{a6c}\n    \\x{10a7}\n 0: \\x{10a7}\n    _ABC\n 0: _\n\\= Expect no match\n    []\nNo match\n \n/^[\\p{Xwd}]+/utf\n    ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n 0: ABCD1234\\x{6ca}\\x{a6c}\\x{10a7}_\n\n# Unicode properties for \\b and \\B\n\n/\\b...\\B/utf,ucp\n    abc_\n 0: abc\n    \\x{37e}abc\\x{376}\n 0: abc\n    \\x{37e}\\x{376}\\x{371}\\x{393}\\x{394}\n 0: \\x{376}\\x{371}\\x{393}\n    !\\x{c0}++\\x{c1}\\x{c2}\n 0: ++\\x{c1}\n    !\\x{c0}+++++\n 0: \\x{c0}++\n\n# Without PCRE2_UCP, non-ASCII always fail, even if < 256  \n\n/\\b...\\B/utf\n    abc_\n 0: abc\n\\= Expect no match\n    \\x{37e}abc\\x{376}\nNo match\n    \\x{37e}\\x{376}\\x{371}\\x{393}\\x{394}\nNo match\n    !\\x{c0}++\\x{c1}\\x{c2}\nNo match\n    !\\x{c0}+++++\nNo match\n\n# With PCRE2_UCP, non-UTF8 chars that are < 256 still check properties  \n\n/\\b...\\B/ucp\n    abc_\n 0: abc\n    !\\x{c0}++\\x{c1}\\x{c2}\n 0: ++\\xc1\n    !\\x{c0}+++++\n 0: \\xc0++\n    \n# Caseless single negated characters > 127 need UCP support \n\n/[^\\x{100}]/i,utf\n    \\x{100}\\x{101}X\n 0: X\n\n/[^\\x{100}]+/i,utf\n    \\x{100}\\x{101}XX\n 0: XX\n\n/^\\X/utf\n    A\\=ps\n 0: A\n    A\\=ph\nPartial match: A\n    A\\x{300}\\x{301}\\=ps\n 0: A\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\=ph\nPartial match: A\\x{300}\\x{301}\n    A\\x{301}\\=ps\n 0: A\\x{301}\n    A\\x{301}\\=ph\nPartial match: A\\x{301}\n    \n/^\\X{2,3}/utf\n    A\\=ps\nPartial match: A\n    A\\=ph\nPartial match: A\n    AA\\=ps\n 0: AA\n    AA\\=ph\nPartial match: AA\n    A\\x{300}\\x{301}\\=ps\nPartial match: A\\x{300}\\x{301}\n    A\\x{300}\\x{301}\\=ph\nPartial match: A\\x{300}\\x{301}\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ps\n 0: A\\x{300}\\x{301}A\\x{300}\\x{301}\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ph\nPartial match: A\\x{300}\\x{301}A\\x{300}\\x{301}\n\n/^\\X{2}/utf\n    AA\\=ps\n 0: AA\n    AA\\=ph\nPartial match: AA\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ps\n 0: A\\x{300}\\x{301}A\\x{300}\\x{301}\n    A\\x{300}\\x{301}A\\x{300}\\x{301}\\=ph\nPartial match: A\\x{300}\\x{301}A\\x{300}\\x{301}\n    \n/^\\X+/utf\n    AA\\=ps\n 0: AA\n    AA\\=ph\nPartial match: AA\n\n/^\\X+?Z/utf\n    AA\\=ps\nPartial match: AA\n    AA\\=ph\nPartial match: AA\n\n# These are tests for extended grapheme clusters  \n\n/^\\X/utf,aftertext\n    G\\x{34e}\\x{34e}X\n 0: G\\x{34e}\\x{34e}\n 0+ X\n    \\x{34e}\\x{34e}X\n 0: \\x{34e}\\x{34e}\n 0+ X\n    \\x04X\n 0: \\x{04}\n 0+ X\n    \\x{1100}X\n 0: \\x{1100}\n 0+ X\n    \\x{1100}\\x{34e}X\n 0: \\x{1100}\\x{34e}\n 0+ X\n    \\x{1b04}\\x{1b04}X\n 0: \\x{1b04}\\x{1b04}\n 0+ X\n\\= These match up to the roman letters\n    \\x{1111}\\x{1111}L,L\n 0: \\x{1111}\\x{1111}\n 0+ L,L\n    \\x{1111}\\x{1111}\\x{1169}L,L,V\n 0: \\x{1111}\\x{1111}\\x{1169}\n 0+ L,L,V\n    \\x{1111}\\x{ae4c}L, LV\n 0: \\x{1111}\\x{ae4c}\n 0+ L, LV\n    \\x{1111}\\x{ad89}L, LVT\n 0: \\x{1111}\\x{ad89}\n 0+ L, LVT\n    \\x{1111}\\x{ae4c}\\x{1169}L, LV, V\n 0: \\x{1111}\\x{ae4c}\\x{1169}\n 0+ L, LV, V\n    \\x{1111}\\x{ae4c}\\x{1169}\\x{1169}L, LV, V, V\n 0: \\x{1111}\\x{ae4c}\\x{1169}\\x{1169}\n 0+ L, LV, V, V\n    \\x{1111}\\x{ae4c}\\x{1169}\\x{11fe}L, LV, V, T\n 0: \\x{1111}\\x{ae4c}\\x{1169}\\x{11fe}\n 0+ L, LV, V, T\n    \\x{1111}\\x{ad89}\\x{11fe}L, LVT, T\n 0: \\x{1111}\\x{ad89}\\x{11fe}\n 0+ L, LVT, T\n    \\x{1111}\\x{ad89}\\x{11fe}\\x{11fe}L, LVT, T, T\n 0: \\x{1111}\\x{ad89}\\x{11fe}\\x{11fe}\n 0+ L, LVT, T, T\n    \\x{ad89}\\x{11fe}\\x{11fe}LVT, T, T\n 0: \\x{ad89}\\x{11fe}\\x{11fe}\n 0+ LVT, T, T\n\\= These match just the first codepoint (invalid sequence)\n    \\x{1111}\\x{11fe}L, T\n 0: \\x{1111}\n 0+ \\x{11fe}L, T\n    \\x{ae4c}\\x{1111}LV, L\n 0: \\x{ae4c}\n 0+ \\x{1111}LV, L\n    \\x{ae4c}\\x{ae4c}LV, LV\n 0: \\x{ae4c}\n 0+ \\x{ae4c}LV, LV\n    \\x{ae4c}\\x{ad89}LV, LVT\n 0: \\x{ae4c}\n 0+ \\x{ad89}LV, LVT\n    \\x{1169}\\x{1111}V, L\n 0: \\x{1169}\n 0+ \\x{1111}V, L\n    \\x{1169}\\x{ae4c}V, LV\n 0: \\x{1169}\n 0+ \\x{ae4c}V, LV\n    \\x{1169}\\x{ad89}V, LVT\n 0: \\x{1169}\n 0+ \\x{ad89}V, LVT\n    \\x{ad89}\\x{1111}LVT, L\n 0: \\x{ad89}\n 0+ \\x{1111}LVT, L\n    \\x{ad89}\\x{1169}LVT, V\n 0: \\x{ad89}\n 0+ \\x{1169}LVT, V\n    \\x{ad89}\\x{ae4c}LVT, LV\n 0: \\x{ad89}\n 0+ \\x{ae4c}LVT, LV\n    \\x{ad89}\\x{ad89}LVT, LVT\n 0: \\x{ad89}\n 0+ \\x{ad89}LVT, LVT\n    \\x{11fe}\\x{1111}T, L\n 0: \\x{11fe}\n 0+ \\x{1111}T, L\n    \\x{11fe}\\x{1169}T, V\n 0: \\x{11fe}\n 0+ \\x{1169}T, V\n    \\x{11fe}\\x{ae4c}T, LV\n 0: \\x{11fe}\n 0+ \\x{ae4c}T, LV\n    \\x{11fe}\\x{ad89}T, LVT\n 0: \\x{11fe}\n 0+ \\x{ad89}T, LVT\n\\= Test extend and spacing mark\n    \\x{1111}\\x{ae4c}\\x{0711}L, LV, extend\n 0: \\x{1111}\\x{ae4c}\\x{711}\n 0+ L, LV, extend\n    \\x{1111}\\x{ae4c}\\x{1b04}L, LV, spacing mark\n 0: \\x{1111}\\x{ae4c}\\x{1b04}\n 0+ L, LV, spacing mark\n    \\x{1111}\\x{ae4c}\\x{1b04}\\x{0711}\\x{1b04}L, LV, spacing mark, extend, spacing mark\n 0: \\x{1111}\\x{ae4c}\\x{1b04}\\x{711}\\x{1b04}\n 0+ L, LV, spacing mark, extend, spacing mark\n\\= Test CR, LF, and control\n    \\x0d\\x{0711}CR, extend\n 0: \\x{0d}\n 0+ \\x{711}CR, extend\n    \\x0d\\x{1b04}CR, spacingmark\n 0: \\x{0d}\n 0+ \\x{1b04}CR, spacingmark\n    \\x0a\\x{0711}LF, extend\n 0: \\x{0a}\n 0+ \\x{711}LF, extend\n    \\x0a\\x{1b04}LF, spacingmark\n 0: \\x{0a}\n 0+ \\x{1b04}LF, spacingmark\n    \\x0b\\x{0711}Control, extend\n 0: \\x{0b}\n 0+ \\x{711}Control, extend\n    \\x09\\x{1b04}Control, spacingmark\n 0: \\x{09}\n 0+ \\x{1b04}Control, spacingmark\n\\= There are no Prepend characters, so we can't test Prepend, CR\n    \n/^(?>\\X{2})X/utf,aftertext\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n    \n/^\\X{2,4}X/utf,aftertext\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n\n/^\\X{2,4}?X/utf,aftertext\n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n    \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0: \\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}\\x{1111}\\x{ae4c}X\n 0+ \n\n/\\x{1e9e}+/i,utf\n    \\x{1e9e}\\x{00df}\n 0: \\x{1e9e}\\x{df}\n\n/[z\\x{1e9e}]+/i,utf\n    \\x{1e9e}\\x{00df}\n 0: \\x{1e9e}\\x{df}\n\n/\\x{00df}+/i,utf\n    \\x{1e9e}\\x{00df}\n 0: \\x{1e9e}\\x{df}\n\n/[z\\x{00df}]+/i,utf\n    \\x{1e9e}\\x{00df}\n 0: \\x{1e9e}\\x{df}\n\n/\\x{1f88}+/i,utf\n    \\x{1f88}\\x{1f80}\n 0: \\x{1f88}\\x{1f80}\n\n/[z\\x{1f88}]+/i,utf\n    \\x{1f88}\\x{1f80}\n 0: \\x{1f88}\\x{1f80}\n\n# Perl matches these \n\n/\\x{00b5}+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n 0: \\x{b5}\\x{39c}\\x{3bc}\n\n/\\x{039c}+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n 0: \\x{b5}\\x{39c}\\x{3bc}\n\n/\\x{03bc}+/i,utf\n    \\x{00b5}\\x{039c}\\x{03bc}\n 0: \\x{b5}\\x{39c}\\x{3bc}\n\n\n/\\x{00c5}+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n 0: \\x{c5}\\x{e5}\\x{212b}\n\n/\\x{00e5}+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n 0: \\x{c5}\\x{e5}\\x{212b}\n\n/\\x{212b}+/i,utf\n    \\x{00c5}\\x{00e5}\\x{212b}\n 0: \\x{c5}\\x{e5}\\x{212b}\n\n/\\x{01c4}+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n 0: \\x{1c4}\\x{1c5}\\x{1c6}\n\n/\\x{01c5}+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n 0: \\x{1c4}\\x{1c5}\\x{1c6}\n\n/\\x{01c6}+/i,utf\n    \\x{01c4}\\x{01c5}\\x{01c6}\n 0: \\x{1c4}\\x{1c5}\\x{1c6}\n\n/\\x{01c7}+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n 0: \\x{1c7}\\x{1c8}\\x{1c9}\n\n/\\x{01c8}+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n 0: \\x{1c7}\\x{1c8}\\x{1c9}\n\n/\\x{01c9}+/i,utf\n    \\x{01c7}\\x{01c8}\\x{01c9}\n 0: \\x{1c7}\\x{1c8}\\x{1c9}\n\n\n/\\x{01ca}+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n 0: \\x{1ca}\\x{1cb}\\x{1cc}\n\n/\\x{01cb}+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n 0: \\x{1ca}\\x{1cb}\\x{1cc}\n\n/\\x{01cc}+/i,utf\n    \\x{01ca}\\x{01cb}\\x{01cc}\n 0: \\x{1ca}\\x{1cb}\\x{1cc}\n\n/\\x{01f1}+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n 0: \\x{1f1}\\x{1f2}\\x{1f3}\n\n/\\x{01f2}+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n 0: \\x{1f1}\\x{1f2}\\x{1f3}\n\n/\\x{01f3}+/i,utf\n    \\x{01f1}\\x{01f2}\\x{01f3}\n 0: \\x{1f1}\\x{1f2}\\x{1f3}\n\n/\\x{0345}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n 0: \\x{345}\\x{399}\\x{3b9}\\x{1fbe}\n\n/\\x{0399}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n 0: \\x{345}\\x{399}\\x{3b9}\\x{1fbe}\n\n/\\x{03b9}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n 0: \\x{345}\\x{399}\\x{3b9}\\x{1fbe}\n\n/\\x{1fbe}+/i,utf\n    \\x{0345}\\x{0399}\\x{03b9}\\x{1fbe}\n 0: \\x{345}\\x{399}\\x{3b9}\\x{1fbe}\n\n/\\x{0392}+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n 0: \\x{392}\\x{3b2}\\x{3d0}\n\n/\\x{03b2}+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n 0: \\x{392}\\x{3b2}\\x{3d0}\n\n/\\x{03d0}+/i,utf\n    \\x{0392}\\x{03b2}\\x{03d0}\n 0: \\x{392}\\x{3b2}\\x{3d0}\n    \n\n/\\x{0395}+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n 0: \\x{395}\\x{3b5}\\x{3f5}\n\n/\\x{03b5}+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n 0: \\x{395}\\x{3b5}\\x{3f5}\n\n/\\x{03f5}+/i,utf\n    \\x{0395}\\x{03b5}\\x{03f5}\n 0: \\x{395}\\x{3b5}\\x{3f5}\n\n/\\x{0398}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n 0: \\x{398}\\x{3b8}\\x{3d1}\\x{3f4}\n\n/\\x{03b8}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n 0: \\x{398}\\x{3b8}\\x{3d1}\\x{3f4}\n\n/\\x{03d1}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n 0: \\x{398}\\x{3b8}\\x{3d1}\\x{3f4}\n\n/\\x{03f4}+/i,utf\n    \\x{0398}\\x{03b8}\\x{03d1}\\x{03f4}\n 0: \\x{398}\\x{3b8}\\x{3d1}\\x{3f4}\n\n/\\x{039a}+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n 0: \\x{39a}\\x{3ba}\\x{3f0}\n\n/\\x{03ba}+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n 0: \\x{39a}\\x{3ba}\\x{3f0}\n\n/\\x{03f0}+/i,utf\n    \\x{039a}\\x{03ba}\\x{03f0}\n 0: \\x{39a}\\x{3ba}\\x{3f0}\n    \n/\\x{03a0}+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n 0: \\x{3a0}\\x{3c0}\\x{3d6}\n\n/\\x{03c0}+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n 0: \\x{3a0}\\x{3c0}\\x{3d6}\n\n/\\x{03d6}+/i,utf\n    \\x{03a0}\\x{03c0}\\x{03d6}\n 0: \\x{3a0}\\x{3c0}\\x{3d6}\n\n/\\x{03a1}+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n 0: \\x{3a1}\\x{3c1}\\x{3f1}\n\n/\\x{03c1}+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n 0: \\x{3a1}\\x{3c1}\\x{3f1}\n\n/\\x{03f1}+/i,utf\n    \\x{03a1}\\x{03c1}\\x{03f1}\n 0: \\x{3a1}\\x{3c1}\\x{3f1}\n\n/\\x{03a3}+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n 0: \\x{3a3}\\x{3c2}\\x{3c3}\n\n/\\x{03c2}+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n 0: \\x{3a3}\\x{3c2}\\x{3c3}\n\n/\\x{03c3}+/i,utf\n    \\x{03A3}\\x{03C2}\\x{03C3}\n 0: \\x{3a3}\\x{3c2}\\x{3c3}\n\n/\\x{03a6}+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n 0: \\x{3a6}\\x{3c6}\\x{3d5}\n\n/\\x{03c6}+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n 0: \\x{3a6}\\x{3c6}\\x{3d5}\n\n/\\x{03d5}+/i,utf\n    \\x{03a6}\\x{03c6}\\x{03d5}\n 0: \\x{3a6}\\x{3c6}\\x{3d5}\n\n/\\x{03c9}+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n 0: \\x{3c9}\\x{3a9}\\x{2126}\n\n/\\x{03a9}+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n 0: \\x{3c9}\\x{3a9}\\x{2126}\n\n/\\x{2126}+/i,utf\n    \\x{03c9}\\x{03a9}\\x{2126}\n 0: \\x{3c9}\\x{3a9}\\x{2126}\n    \n/\\x{1e60}+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n 0: \\x{1e60}\\x{1e61}\\x{1e9b}\n\n/\\x{1e61}+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n 0: \\x{1e60}\\x{1e61}\\x{1e9b}\n\n/\\x{1e9b}+/i,utf\n    \\x{1e60}\\x{1e61}\\x{1e9b}\n 0: \\x{1e60}\\x{1e61}\\x{1e9b}\n    \n/\\x{1e9e}+/i,utf\n    \\x{1e9e}\\x{00df}\n 0: \\x{1e9e}\\x{df}\n\n/\\x{00df}+/i,utf\n    \\x{1e9e}\\x{00df}\n 0: \\x{1e9e}\\x{df}\n    \n/\\x{1f88}+/i,utf\n    \\x{1f88}\\x{1f80}\n 0: \\x{1f88}\\x{1f80}\n\n/\\x{1f80}+/i,utf\n    \\x{1f88}\\x{1f80}\n 0: \\x{1f88}\\x{1f80}\n\n/\\x{004b}+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n 0: Kk\\x{212a}\n\n/\\x{006b}+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n 0: Kk\\x{212a}\n\n/\\x{212a}+/i,utf\n    \\x{004b}\\x{006b}\\x{212a}\n 0: Kk\\x{212a}\n\n/\\x{0053}+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n 0: Ss\\x{17f}\n\n/\\x{0073}+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n 0: Ss\\x{17f}\n\n/\\x{017f}+/i,utf\n    \\x{0053}\\x{0073}\\x{017f}\n 0: Ss\\x{17f}\n\n/ist/i,utf\n\\= Expect no match\n    ikt\nNo match\n\n/is+t/i,utf\n    iSs\\x{17f}t\n 0: iSs\\x{17f}t\n\\= Expect no match\n    ikt\nNo match\n\n/is+?t/i,utf\n\\= Expect no match\n    ikt\nNo match\n\n/is?t/i,utf\n\\= Expect no match\n    ikt\nNo match\n\n/is{2}t/i,utf\n\\= Expect no match\n    iskt\nNo match\n\n/^\\p{Xuc}/utf\n    $abc\n 0: $\n    @abc\n 0: @\n    `abc\n 0: `\n    \\x{1234}abc\n 0: \\x{1234}\n\\= Expect no match\n    abc\nNo match\n\n/^\\p{Xuc}+/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\\x{a0}\\x{1234}\\x{e000}\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^\\p{Xuc}+?/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\\x{a0}\\x{1234}\\x{e000}\n 1: $@`\\x{a0}\\x{1234}\n 2: $@`\\x{a0}\n 3: $@`\n 4: $@\n 5: $\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^\\p{Xuc}+?\\*/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\\x{a0}\\x{1234}\\x{e000}*\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^\\p{Xuc}++/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\\x{a0}\\x{1234}\\x{e000}\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^\\p{Xuc}{3,5}/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\\x{a0}\\x{1234}\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^\\p{Xuc}{3,5}?/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\\x{a0}\\x{1234}\n 1: $@`\\x{a0}\n 2: $@`\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^[\\p{Xuc}]/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^[\\p{Xuc}]+/utf\n    $@`\\x{a0}\\x{1234}\\x{e000}**\n 0: $@`\\x{a0}\\x{1234}\\x{e000}\n\\= Expect no match\n    \\x{9f}\nNo match\n\n/^\\P{Xuc}/utf\n    abc\n 0: a\n\\= Expect no match\n    $abc\nNo match\n    @abc\nNo match\n    `abc\nNo match\n    \\x{1234}abc\nNo match\n\n/^[\\P{Xuc}]/utf\n    abc\n 0: a\n\\= Expect no match\n    $abc\nNo match\n    @abc\nNo match\n    `abc\nNo match\n    \\x{1234}abc\nNo match\n\n/^A\\s+Z/utf,ucp\n    A\\x{2005}Z\n 0: A\\x{2005}Z\n    A\\x{85}\\x{180e}\\x{2005}Z\n 0: A\\x{85}\\x{180e}\\x{2005}Z\n\n/^A[\\s]+Z/utf,ucp\n    A\\x{2005}Z\n 0: A\\x{2005}Z\n    A\\x{85}\\x{180e}\\x{2005}Z\n 0: A\\x{85}\\x{180e}\\x{2005}Z\n\n/(?<=\\x{100})\\x{200}(?=\\x{300})/utf,allusedtext\n    \\x{100}\\x{200}\\x{300}\n 0: \\x{100}\\x{200}\\x{300}\n    <<<<<<<       >>>>>>>\n\n# -----------------------------------------------------------------------------\n# Tests for bidi control and bidi class properties\n\n/\\p{ bidi_control }/utf\n    -->\\x{202c}<--\n 0: \\x{202c}\n\n/\\p{bidicontrol}+/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: \\x{2066}\\x{2067}\\x{2068}\\x{2069}\n\n/\\p{bidicontrol}+?/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}\n 1: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\n 2: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\n 3: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\n 4: \\x{61c}\\x{200e}\\x{200f}\n 5: \\x{61c}\\x{200e}\n 6: \\x{61c}\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: \\x{2066}\\x{2067}\\x{2068}\\x{2069}\n 1: \\x{2066}\\x{2067}\\x{2068}\n 2: \\x{2066}\\x{2067}\n 3: \\x{2066}\n\n/\\p{bidicontrol}++/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: \\x{2066}\\x{2067}\\x{2068}\\x{2069}\n\n/[\\p{bidi_control}]/utf\n    -->\\x{202c}<--\n 0: \\x{202c}\n\n/[\\p{bidicontrol}]+/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: \\x{2066}\\x{2067}\\x{2068}\\x{2069}\n\n/[\\p{bidicontrol}]+?/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}\n 1: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\n 2: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\n 3: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\n 4: \\x{61c}\\x{200e}\\x{200f}\n 5: \\x{61c}\\x{200e}\n 6: \\x{61c}\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: \\x{2066}\\x{2067}\\x{2068}\\x{2069}\n 1: \\x{2066}\\x{2067}\\x{2068}\n 2: \\x{2066}\\x{2067}\n 3: \\x{2066}\n\n/[\\p{bidicontrol}]++/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: \\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: \\x{2066}\\x{2067}\\x{2068}\\x{2069}\n\n/[\\p{bidicontrol}<>]+/utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: >\\x{61c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: >\\x{2066}\\x{2067}\\x{2068}\\x{2069}<\n\n/\\P{bidicontrol}+/g,utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: -->\n 0: <--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: -->\n 0: <--\n\n/\\p{^bidicontrol}+/g,utf\n    -->\\x{061c}\\x{200e}\\x{200f}\\x{202a}\\x{202b}\\x{202c}\\x{202d}<--\n 0: -->\n 0: <--\n    -->\\x{2066}\\x{2067}\\x{2068}\\x{2069}<--\n 0: -->\n 0: <--\n\n/\\p{bidi class = al}/utf\n    -->\\x{061D}<--\n 0: \\x{61d}\n\n/\\p{bidi class = al}+/utf\n    -->\\x{061D}\\x{061e}\\x{061f}<--\n 0: \\x{61d}\\x{61e}\\x{61f}\n\n/\\p{bidi_class : AL}+?/utf\n    -->\\x{061D}\\x{061e}\\x{061f}<--\n 0: \\x{61d}\\x{61e}\\x{61f}\n 1: \\x{61d}\\x{61e}\n 2: \\x{61d}\n\n/\\p{Bidi_Class : AL}++/utf\n    -->\\x{061D}\\x{061e}\\x{061f}<--\n 0: \\x{61d}\\x{61e}\\x{61f}\n\n/\\p{bidi class = aN}+/utf\n    -->\\x{061D}\\x{0602}\\x{0604}\\x{061f}<--\n 0: \\x{602}\\x{604}\n\n/\\p{bidi class = B}+/utf\n    -->\\x{0a}\\x{0d}\\x{01c}\\x{01e}\\x{085}\\x{2029}<--\n 0: \\x{0a}\\x{0d}\\x{1c}\\x{1e}\\x{85}\\x{2029}\n\n/\\p{bidi class:BN}+/utf\n    -->\\x{0}\\x{08}\\x{200c}\\x{fffe}\\x{dfffe}\\x{10ffff}<--\n 0: \\x{00}\\x{08}\\x{200c}\\x{fffe}\\x{dfffe}\\x{10ffff}\n\n/\\p{bidiclass:cs}+/utf\n    -->,.\\x{060c}\\x{ff1a}<--\n 0: ,.\\x{60c}\\x{ff1a}\n\n/\\p{bidiclass:En}+/utf\n    -->09\\x{b2}\\x{2074}\\x{1fbf9}<--\n 0: 09\\x{b2}\\x{2074}\\x{1fbf9}\n\n/\\p{bidiclass:es}+/utf\n    ==>+-\\x{207a}\\x{ff0d}<==\n 0: +-\\x{207a}\\x{ff0d}\n\n/\\p{bidiclass:et}+/utf\n    -->#\\{24}%\\x{a2}\\x{A838}\\x{1e2ff}<--\n 0: #\n\n/\\p{bidiclass:FSI}+/utf\n    -->\\x{2068}<--\n 0: \\x{2068}\n\n/\\p{bidi class:L}+/utf\n    -->ABC<--\n 0: ABC\n\n/\\P{bidi class:L}+/utf\n    -->ABC<--\n 0: -->\n\n/\\p{bidi class:LRE}+\\p{bidiclass=lri}*\\p{bidiclass:lro}/utf\n    -->\\x{202a}\\x{2066}\\x{202d}<--\n 0: \\x{202a}\\x{2066}\\x{202d}\n\n/\\p{bidi class:NSM}+/utf\n    -->\\x{9bc}\\x{a71}\\x{e31}<--\n 0: \\x{9bc}\\x{a71}\\x{e31}\n\n/\\p{bidi class:ON}+/utf\n    -->\\x{21}'()*;@\\x{384}\\x{2039}<=-\n 0: >!'()*;@\\x{384}\\x{2039}<=\n\n/\\p{bidiclass:pdf}\\p{bidiclass:pdi}/utf\n    -->\\x{202c}\\x{2069}<--\n 0: \\x{202c}\\x{2069}\n\n/\\p{bidi class:R}+/utf\n    -->\\x{590}\\x{5c6}\\x{200f}\\x{10805}<--\n 0: \\x{590}\\x{5c6}\\x{200f}\\x{10805}\n\n/\\p{bidi class:RLE}+\\p{bidi class:RLI}*\\p{bidi class:RLO}+/utf\n    -->\\x{202b}\\x{2067}\\x{202e}<-- \n 0: \\x{202b}\\x{2067}\\x{202e}\n    \n/\\p{bidi class:S}+\\p{bidiclass:WS}+/utf\n    -->\\x{9}\\x{b}\\x{1f}  \\x{c} \\x{2000} \\x{3000}<--\n 0: \\x{09}\\x{0b}\\x{1f}  \\x{0c} \\x{2000} \\x{3000}\n\n# -----------------------------------------------------------------------------\n\n/\\p{katakana}/utf\n    \\x{30a1}\n 0: \\x{30a1}\n    \\x{3001} \n 0: \\x{3001}\n\n/\\p{scx:katakana}/utf\n    \\x{30a1}\n 0: \\x{30a1}\n    \\x{3001} \n 0: \\x{3001}\n    \n/\\p{script extensions:katakana}/utf\n    \\x{30a1}\n 0: \\x{30a1}\n    \\x{3001} \n 0: \\x{3001}\n    \n/\\p{sc:katakana}/utf\n    \\x{30a1}\n 0: \\x{30a1}\n\\= Expect no match     \n    \\x{3001} \nNo match\n    \n/\\p{script:katakana}/utf\n    \\x{30a1}\n 0: \\x{30a1}\n\\= Expect no match     \n    \\x{3001}\nNo match\n    \n/\\p{sc:katakana}{3,}/utf\n    \\x{30a1}\\x{30fa}\\x{32d0}\\x{1b122}\\x{ff66}\\x{3001}ABC\n 0: \\x{30a1}\\x{30fa}\\x{32d0}\\x{1b122}\\x{ff66}\n\n/\\p{sc:katakana}{3,}?/utf\n    \\x{30a1}\\x{30fa}\\x{32d0}\\x{1b122}\\x{ff66}\\x{3001}ABC\n 0: \\x{30a1}\\x{30fa}\\x{32d0}\\x{1b122}\\x{ff66}\n 1: \\x{30a1}\\x{30fa}\\x{32d0}\\x{1b122}\n 2: \\x{30a1}\\x{30fa}\\x{32d0}\n\n# Tests for PCRE2_EXTRA_CASELESS_RESTRICT. Compare each test with and without\n# the restriction.\n\n/AskZ/i,utf,caseless_restrict\n    AskZ\n 0: AskZ\n    aSKz\n 0: aSKz\n\\= Expect no match\n    A\\x{17f}kZ\nNo match\n    As\\x{212a}Z      \nNo match\n\n/AskZ/i,utf\n    AskZ\n 0: AskZ\n    aSKz\n 0: aSKz\n    A\\x{17f}kZ\n 0: A\\x{17f}kZ\n    As\\x{212a}Z      \n 0: As\\x{212a}Z\n\n/A\\x{17f}\\x{212a}Z/ir,utf\n    \\= Expect no match\n    AskZ\nNo match\n\n/A\\x{17f}\\x{212a}Z/i,utf\n    AskZ\n 0: AskZ\n\n/[AskZ]+/i,utf,caseless_restrict\n    AskZ\n 0: AskZ\n    aSKz \n 0: aSKz\n    A\\x{17f}kZ\n 0: A\n    As\\x{212a}Z      \n 0: As\n\n/[AskZ]+/i,utf\n    AskZ\n 0: AskZ\n    aSKz \n 0: aSKz\n    A\\x{17f}kZ\n 0: A\\x{17f}kZ\n    As\\x{212a}Z      \n 0: As\\x{212a}Z\n\n/[\\x{17f}\\x{212a}]+/ir,utf\n\\= Expect no match\n    AskZ\nNo match\n\n/[\\x{17f}\\x{212a}]+/i,utf\n    AskZ\n 0: sk\n\n/[^s]+/ir,utf\n    A\\x{17f}Z \n 0: A\\x{17f}Z\n\n/[^s]+/i,utf\n    A\\x{17f}Z \n 0: A\n\n/[^k]+/ir,utf\n    A\\x{212a}Z \n 0: A\\x{212a}Z\n    \n/[^k]+/i,utf\n    A\\x{212a}Z \n 0: A\n    \n/[^sk]+/ir,utf\n    A\\x{17f}\\x{212a}Z \n 0: A\\x{17f}\\x{212a}Z\n\n/[^sk]+/i,utf\n    A\\x{17f}\\x{212a}Z \n 0: A\n\n/[^\\x{17f}]+/ir,utf\n    AsSZ \n 0: AsSZ\n\n/[^\\x{17f}]+/i,utf\n    AsSZ \n 0: A\n\n/[Ss]+/irB,utf\n------------------------------------------------------------------\n        Bra\n     /i S++\n        Ket\n        End\n------------------------------------------------------------------\n    Sss\\x{17f}ss\n 0: Sss\n\n/[Ss]+/iB,utf\n------------------------------------------------------------------\n        Bra\n        [Ss\\x{17f}]++\n        Ket\n        End\n------------------------------------------------------------------\n    Sss\\x{17f}ss\n 0: Sss\\x{17f}ss\n\n/[S\\x{17f}]/irB,utf\n------------------------------------------------------------------\n        Bra\n        [Ss\\x{17f}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[S\\x{17f}]/iB,utf\n------------------------------------------------------------------\n        Bra\n        [Ss\\x{17f}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x{17f}s]/irB,utf\n------------------------------------------------------------------\n        Bra\n        [Ss\\x{17f}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x{17f}s]/iB,utf\n------------------------------------------------------------------\n        Bra\n        [Ss\\x{17f}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x{4b}\\x{6b}]/irB,utf\n------------------------------------------------------------------\n        Bra\n     /i K\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\x{4b}\\x{6b}]/iB,utf\n------------------------------------------------------------------\n        Bra\n        [Kk\\x{212a}]\n        Ket\n        End\n------------------------------------------------------------------\n\n/s(?r)s(?-r)s(?r:s)s/i,utf\n    \\x{17f}S\\x{17f}S\\x{17f}\n 0: \\x{17f}S\\x{17f}S\\x{17f}\n\\= Expect no match     \n    \\x{17f}\\x{17f}\\x{17f}S\\x{17f}\nNo match\n    \\x{17f}S\\x{17f}\\x{17f}\\x{17f}\nNo match\n\n/k(?^i)k/ir,utf\n    K\\x{212a}\n 0: K\\x{212a}\n\\= Expect no match          \n    \\x{212a}\\x{212a}\nNo match\n\n# End caseless restrict tests\n\n# TESTS for PCRE2_EXTRA_TURKISH_CASING - again, tests with and without.\n\n/i/i,utf\n    i\n 0: i\n    I\n 0: I\n\\= Expect no match\n    \\x{0130}\nNo match\n    \\x{0131}\nNo match\n\n/i/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/I/i,utf\n    i\n 0: i\n    I\n 0: I\n\\= Expect no match\n    \\x{0130}\nNo match\n    \\x{0131}\nNo match\n\n/I/i,utf,turkish_casing\n    I\n 0: I\n    \\x{0131}\n 0: \\x{131}\n\\= Expect no match\n    i\nNo match\n    \\x{0130}\nNo match\n\n/\\x{0130}/i,utf\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/\\x{0130}/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/\\x{0131}/i,utf\n    \\x{0131}\n 0: \\x{131}\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n    \\x{0130}\nNo match\n\n/\\x{0131}/i,utf,turkish_casing\n    I\n 0: I\n    \\x{0131}\n 0: \\x{131}\n\\= Expect no match\n    i\nNo match\n    \\x{0130}\nNo match\n\n/[i]/i,utf\n    i\n 0: i\n    I\n 0: I\n\\= Expect no match\n    \\x{0130}\nNo match\n    \\x{0131}\nNo match\n\n/[i]/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[\\x{0130}]/i,utf\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[\\x{0130}]/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[\\x{0120}-\\x{0130}]/i,utf\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[\\x{0120}-\\x{0130}]/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[zi]/i,utf\n    i\n 0: i\n    I\n 0: I\n\\= Expect no match\n    \\x{0130}\nNo match\n    \\x{0131}\nNo match\n\n/[zi]/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[z\\x{0130}]/i,utf\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    i\nNo match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[z\\x{0130}]/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n/[iI]/i,utf\n    i\n 0: i\n    I\n 0: I\n\\= Expect no match\n    \\x{0130}\nNo match\n    \\x{0131}\nNo match\n\n/[iI]/i,utf,turkish_casing\n    i\n 0: i\n    I\n 0: I\n    \\x{0130}\n 0: \\x{130}\n    \\x{0131}\n 0: \\x{131}\n\n/[i\\x{0130}]/i,utf\n    i\n 0: i\n    I\n 0: I\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    \\x{0131}\nNo match\n\n/[i\\x{0130}]/i,utf,turkish_casing\n    i\n 0: i\n    \\x{0130}\n 0: \\x{130}\n\\= Expect no match\n    I\nNo match\n    \\x{0131}\nNo match\n\n# End Turkish casing tests\n\n# TESTS for PCRE2_EXTRA_ASCII_xxx - again, tests with and without.\n\n# DIGITS\n\n/\\d+/i,utf\n    123\\x{660}456\n 0: 123\n\n/\\d+/i,utf,ucp\n    123\\x{660}456\n 0: 123\\x{660}456\n\n/\\d+/i,utf,ucp,ascii_bsd\n    123\\x{660}456\n 0: 123\n\n/[\\d]+/i,utf\n    123\\x{660}456\n 0: 123\n\n/[\\d]+/i,utf,ucp\n    123\\x{660}456\n 0: 123\\x{660}456\n\n/[\\d]+/i,utf,ucp,ascii_bsd\n    123\\x{660}456\n 0: 123\n\n/\\d(?aD)\\d(?-aD)\\d/utf,ucp\n    \\x{660}9\\x{660}\n 0: \\x{660}9\\x{660}\n\\= Expect no match     \n    \\x{660}\\x{660}\\x{660}\nNo match\n\n/\\d(?-aD)\\d(?aD)\\d/utf,ucp,ascii_bsd\n    999\n 0: 999\n    9\\x{660}9\n 0: 9\\x{660}9\n\n/\\d(?a)\\d(?-a)\\d/utf,ucp\n    \\x{660}9\\x{660}\n 0: \\x{660}9\\x{660}\n\\= Expect no match     \n    \\x{660}\\x{660}\\x{660}\nNo match\n\n/\\d(?-aD)\\d(?aD)\\d/utf,ucp,ascii_bsd\n    999\n 0: 999\n    9\\x{660}9\n 0: 9\\x{660}9\n\n# SPACES\n\n/>\\s+</i,utf\n    >  <\n 0: >  <\n\\= Expect no match     \n    >\\x{a0} <\nNo match\n\n/>\\s+</i,utf,ucp\n    >  <\n 0: >  <\n    >\\x{a0} <\n 0: >\\x{a0} <\n\n/>\\s+</i,utf,ucp,ascii_bss\n    >  <\n 0: >  <\n\\= Expect no match     \n    >\\x{a0} <\nNo match\n\n/>[\\s]+</i,utf\n    >  <\n 0: >  <\n\\= Expect no match     \n    >\\x{a0} <\nNo match\n\n/>[\\s]+</i,utf,ucp\n    >  <\n 0: >  <\n    >\\x{a0} <\n 0: >\\x{a0} <\n\n/>[\\s]+</i,utf,ucp,ascii_bss\n    >  <\n 0: >  <\n\\= Expect no match     \n    >\\x{a0} <\nNo match\n\n/>\\s(?aS)\\s(?-aS)\\s</utf,ucp\n    >\\x{a0} \\x{a0}<\n 0: >\\x{a0} \\x{a0}<\n\\= Expect no match     \n    >\\x{a0}\\x{a0}\\x{a0}<\nNo match\n\n/>\\s(?a)\\s(?-a)\\s</utf,ucp\n    >\\x{a0} \\x{a0}<\n 0: >\\x{a0} \\x{a0}<\n\\= Expect no match     \n    >\\x{a0}\\x{a0}\\x{a0}<\nNo match\n    \n# WORDS\n\n/\\w+/i,utf\n    123\\x{660}abc\n 0: 123\n\n/\\w+/i,utf,ucp\n    123\\x{660}abc\n 0: 123\\x{660}abc\n\n/\\w+/i,utf,ucp,ascii_bsw\n    123\\x{660}abc\n 0: 123\n\n/[\\w]+/i,utf\n    123\\x{660}abc\n 0: 123\n\n/[\\w]+/i,utf,ucp\n    123\\x{660}abc\n 0: 123\\x{660}abc\n\n/[\\w]+/i,utf,ucp,ascii_bsw\n    123\\x{660}abc\n 0: 123\n\n/\\w(?aW)\\w(?-aW)\\w/utf,ucp\n    \\x{660}A\\x{c0}\n 0: \\x{660}A\\x{c0}\n\\= Expect no match     \n    \\x{660}\\x{c0}\\x{c0}\nNo match\n\n/\\w(?a)\\w(?-a)\\w/utf,ucp\n    \\x{660}A\\x{c0}\n 0: \\x{660}A\\x{c0}\n\\= Expect no match     \n    \\x{660}\\x{c0}\\x{c0}\nNo match\n\n# POSIX\n\n/^[[:digit:]]+$/utf,ucp\n    123456\n 0: 123456\n    123\\x{660}456\n 0: 123\\x{660}456\n\n/^[[:digit:]]+$/utf,ucp,ascii_digit\n    123456\n 0: 123456\n\\= Expect no match\n    123\\x{660}456\nNo match\n\n/[[:digit:]]+/g,utf,ucp,ascii_digit\n    123\\x{660}456\n 0: 123\n 0: 456\n\n/(?-aT)[[:digit:]](?aT)[[:digit:]]/utf,ucp,ascii_digit\n    11\n 0: 11\n    \\x{ff11}1\n 0: \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\nNo match\n\n/(?-aT:[[:digit:]])[[:digit:]]/utf,ucp,ascii_digit\n    11\n 0: 11\n    \\x{ff11}1\n 0: \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\nNo match\n\n/(?-aT:[[:digit:]])[[:digit:]]/utf,never_ucp,ascii_digit\n    11\n 0: 11\n\\= Expect no match\n    \\x{ff11}1\nNo match\n    1\\x{ff11}\nNo match\n\n/[[:digit:]]+/utf,ucp,ascii_posix\n    123\\x{660}456\n 0: 123\n\n/(?-aP)[[:digit:]](?aP)[[:digit:]]/utf,ucp,ascii_posix\n    11\n 0: 11\n    \\x{ff11}1\n 0: \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\nNo match\n\n/(?-aP:[[:digit:]])[[:digit:]]/utf,ucp,ascii_posix\n    11\n 0: 11\n    \\x{ff11}1\n 0: \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\nNo match\n\n/(?-a:[[:digit:]])[[:digit:]]/a,utf,ucp\n    11\n 0: 11\n    \\x{ff11}1\n 0: \\x{ff11}1\n\\= Expect no match\n    1\\x{ff11}\nNo match\n\n/>[[:space:]]+</utf,ucp\n    >\\x{a0} \\x{a0}<\n 0: >\\x{a0} \\x{a0}<\n    >\\x{a0}\\x{a0}\\x{a0}<\n 0: >\\x{a0}\\x{a0}\\x{a0}<\n\n/>[[:space:]]+</utf,ucp,ascii_posix\n\\= Expect no match     \n    >\\x{a0} \\x{a0}<\nNo match\n\n/(?aP)[[:alnum:]]+/i,ucp,utf\n    abcáxyz\n 0: abc\n    abc\\x{660}xyz\n 0: abc\n\n/(?aP)[[:alnum:]\\d]+/i,ucp,utf\n    abc\\x{660}xyz\n 0: abc\\x{660}xyz\n    \n/(*UCP)(*UTF)[[:alnum:]](?aP:[[:alnum:]])[[:alnum:]]/\n    \\x{660}A\\x{660}\n 0: \\x{660}A\\x{660}\n\\= Expect no match     \n    \\x{660}\\x{660}\\x{660}\nNo match\n    \n# VARIOUS\n\n/[\\d\\s\\w]+/a,ucp,utf\n    9 A\\x{660}À \n 0: 9 A\n    9 AÀ\\x{660} \n 0: 9 A\n\n# End PCRE2_EXTRA_ASCII_xxx tests\n\n/\\w+/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n 0: cafe\\x{300}_au\\x{203f}lait\n\n/[\\w]+/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n 0: cafe\\x{300}_au\\x{203f}lait\n\n/\\b.+?\\b/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n 0: cafe\\x{300}_au\\x{203f}lait\n\n/caf\\B.+?\\B/utf,ucp\n    --cafe\\x{300}_au\\x{203f}lait!\n 0: cafe\\x{300}_au\\x{203f}lait!\n 1: cafe\\x{300}_au\\x{203f}lai\n 2: cafe\\x{300}_au\\x{203f}la\n 3: cafe\\x{300}_au\\x{203f}l\n 4: cafe\\x{300}_au\\x{203f}\n 5: cafe\\x{300}_au\n 6: cafe\\x{300}_a\n 7: cafe\\x{300}_\n 8: cafe\\x{300}\n 9: cafe\n\n# -------------------------------------------------------------------------- \n# Case-independent matching property tests added after changing PCRE2 to be\n# compatible with Perl. All three cases (upper, lower, title) conflate.\n\n/\\p{Lu}\\p{Ll}\\P{Lu}\\P{Ll}/utf\n    >AbbD<\n 0: AbbD\n    >Abb\\x{01c5}<\n 0: Abb\\x{1c5}\n\\= Expect no match     \n    >aBBd<\nNo match\n    >aB!!< \nNo match\n\n/\\p{Lu}\\p{Ll}\\P{Lu}\\P{Ll}/i,utf\n    >aB!!< \n 0: aB!!\n\\= Expect no match     \n    >AbbD<\nNo match\n    >aBBd<\nNo match\n    >Abb\\x{01c5}<\nNo match\n\n/[.\\p{Lu}][.\\p{Ll}][.\\P{Lu}][.\\P{Ll}]/i,utf\n    >aB!!< \n 0: aB!!\n\\= Expect no match     \n    >AbbD<\nNo match\n    >aBBd<\nNo match\n    >Abb\\x{01c5}<\nNo match\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES\n\n/[\\p{Ll}[\\p{Nd}]]C/alt_extended_class\n    aC\n 0: aC\n    1C\n 0: 1C\n\\= Expect no match\n    [C\nNo match\n\n/[[\\p{Ll}][\\p{Nd}]]/alt_extended_class\n    a\n 0: a\n    1\n 0: 1\n\\= Expect no match\n    [\nNo match\n    ]\nNo match\n\n/[[\\p{Ll}]||[\\p{Nd}]]/alt_extended_class\n    a\n 0: a\n    1\n 0: 1\n\\= Expect no match\n    C\nNo match\n\n/[[^\\p{Ll}][\\p{Nd}]]/alt_extended_class\n    1\n 0: 1\n    A\n 0: A\n\\= Expect no match\n    a\nNo match\n\n/[^[\\p{Ll}][\\p{Nd}]]/alt_extended_class\n    A\n 0: A\n\\= Expect no match\n    a\nNo match\n    1\nNo match\n\n/[^[\\p{Ll}]&&[\\p{Nd}]]/alt_extended_class\n    a\n 0: a\n    1\n 0: 1\n    A\n 0: A\n\n/(?[[\\p{Ll}]+[\\p{Nd}]])/\n    a\n 0: a\n    1\n 0: 1\n\\= Expect no match\n    [\nNo match\n    ]\nNo match\n\n# --------------\n\n# EXTENDED CHARACTER CLASSES (Perl)\n\n/(?[[\\p{Ll}Z]&[\\p{Lu}a]])/\n    a\n 0: a\n    Z\n 0: Z\n\\= Expect no match\n    A\nNo match\n    z\nNo match\n\n# -------------------------------------------------------------------------- \n\n# End of testinput7\n"
  },
  {
    "path": "testdata/testoutput8-16-2",
    "content": "# There are two sorts of patterns in this test. A number of them are\n# representative patterns whose lengths and offsets are checked. This is just a\n# doublecheck test to ensure the sizes don't go horribly wrong when something\n# is changed. The operation of these patterns is checked in other tests.\n#\n# This file also contains tests whose output varies with code unit size and/or\n# link size. Unicode support is required for these tests. There are separate\n# output files for each code unit size and link size.\n\n#pattern fullbincode,memory\n\n/((?i)b)/\nMemory allocation - code size : 24\n------------------------------------------------------------------\n  0   9 Bra\n  2   5 CBra 1\n  5  /i b\n  7   5 Ket\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/(?s)(.*X|^B)/\nMemory allocation - code size : 38\n------------------------------------------------------------------\n  0  16 Bra\n  2   7 CBra 1\n  5     AllAny*\n  7     X\n  9   5 Alt\n 11     ^\n 12     B\n 14  12 Ket\n 16  16 Ket\n 18     End\n------------------------------------------------------------------\n\n/(?s:.*X|^B)/\nMemory allocation - code size : 36\n------------------------------------------------------------------\n  0  15 Bra\n  2   6 Bra\n  4     AllAny*\n  6     X\n  8   5 Alt\n 10     ^\n 11     B\n 13  11 Ket\n 15  15 Ket\n 17     End\n------------------------------------------------------------------\n\n/^[[:alnum:]]/\nMemory allocation - code size : 46\n------------------------------------------------------------------\n  0  20 Bra\n  2     ^\n  3     [0-9A-Za-z]\n 20  20 Ket\n 22     End\n------------------------------------------------------------------\n\n/#/Ix\nMemory allocation - code size : 10\n------------------------------------------------------------------\n  0   2 Bra\n  2   2 Ket\n  4     End\n------------------------------------------------------------------\nCapture group count = 0\nMay match empty string\nOptions: extended\nSubject length lower bound = 0\n\n/a#/Ix\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     a\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: extended\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/x?+/\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     x?+\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/x++/\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     x++\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/x{1,3}+/\nMemory allocation - code size : 20\n------------------------------------------------------------------\n  0   7 Bra\n  2     x\n  4     x{0,2}+\n  7   7 Ket\n  9     End\n------------------------------------------------------------------\n\n/(x)*+/\nMemory allocation - code size : 26\n------------------------------------------------------------------\n  0  10 Bra\n  2     Braposzero\n  3   5 CBraPos 1\n  6     x\n  8   5 KetRpos\n 10  10 Ket\n 12     End\n------------------------------------------------------------------\n\n/^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))/\nMemory allocation - code size : 142\n------------------------------------------------------------------\n  0  68 Bra\n  2     ^\n  3  63 CBra 1\n  6   5 CBra 2\n  9     a+\n 11   5 Ket\n 13  21 CBra 3\n 16     [ab]+?\n 34  21 Ket\n 36  21 CBra 4\n 39     [bc]+\n 57  21 Ket\n 59   5 CBra 5\n 62     \\w*+\n 64   5 Ket\n 66  63 Ket\n 68  68 Ket\n 70     End\n------------------------------------------------------------------\n\n\"8J\\$WE\\<\\.rX\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\nMemory allocation - code size : 1648\n------------------------------------------------------------------\n  0 821 Bra\n  2     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n820     \\b\n821 821 Ket\n823     End\n------------------------------------------------------------------\n\n\"\\$\\<\\.X\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\nMemory allocation - code size : 1628\n------------------------------------------------------------------\n  0 811 Bra\n  2     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n810     \\b\n811 811 Ket\n813     End\n------------------------------------------------------------------\n\n/(a(?1)b)/\nMemory allocation - code size : 32\n------------------------------------------------------------------\n  0  13 Bra\n  2   9 CBra 1\n  5     a\n  7   2 Recurse\n  9     b\n 11   9 Ket\n 13  13 Ket\n 15     End\n------------------------------------------------------------------\n\n/(a(?1)+b)/\nMemory allocation - code size : 40\n------------------------------------------------------------------\n  0  17 Bra\n  2  13 CBra 1\n  5     a\n  7   4 SBra\n  9   2 Recurse\n 11   4 KetRmax\n 13     b\n 15  13 Ket\n 17  17 Ket\n 19     End\n------------------------------------------------------------------\n\n/a(?P<name1>b|c)d(?P<longername2>e)/\nMemory allocation - code size : 54\nMemory allocation - data size : 52\n------------------------------------------------------------------\n  0  24 Bra\n  2     a\n  4   5 CBra 1\n  7     b\n  9   4 Alt\n 11     c\n 13   9 Ket\n 15     d\n 17   5 CBra 2\n 20     e\n 22   5 Ket\n 24  24 Ket\n 26     End\n------------------------------------------------------------------\n\n/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/\nMemory allocation - code size : 64\nMemory allocation - data size : 18\n------------------------------------------------------------------\n  0  29 Bra\n  2  18 Bra\n  4     a\n  6  12 CBra 1\n  9     c\n 11   5 CBra 2\n 14     d\n 16   5 Ket\n 18  12 Ket\n 20  18 Ket\n 22   5 CBra 3\n 25     a\n 27   5 Ket\n 29  29 Ket\n 31     End\n------------------------------------------------------------------\n\n/(?P<a>a)...(?P=a)bbb(?P>a)d/\nMemory allocation - code size : 54\nMemory allocation - data size : 6\n------------------------------------------------------------------\n  0  24 Bra\n  2   5 CBra 1\n  5     a\n  7   5 Ket\n  9     Any\n 10     Any\n 11     Any\n 12     \\g{1}\n 14     bbb\n 20   2 Recurse\n 22     d\n 24  24 Ket\n 26     End\n------------------------------------------------------------------\n\n/abc(?C255)de(?C)f/\nMemory allocation - code size : 50\n------------------------------------------------------------------\n  0  22 Bra\n  2     abc\n  8     Callout 255 10 1\n 12     de\n 16     Callout 0 16 1\n 20     f\n 22  22 Ket\n 24     End\n------------------------------------------------------------------\n\n/abcde/auto_callout\nMemory allocation - code size : 78\n------------------------------------------------------------------\n  0  36 Bra\n  2     Callout 255 0 1\n  6     a\n  8     Callout 255 1 1\n 12     b\n 14     Callout 255 2 1\n 18     c\n 20     Callout 255 3 1\n 24     d\n 26     Callout 255 4 1\n 30     e\n 32     Callout 255 5 0\n 36  36 Ket\n 38     End\n------------------------------------------------------------------\n\n/\\x{100}/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{100}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\x{1000}/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{1000}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\x{10000}/utf\nMemory allocation - code size : 16\n------------------------------------------------------------------\n  0   5 Bra\n  2     \\x{10000}\n  5   5 Ket\n  7     End\n------------------------------------------------------------------\n\n/\\x{100000}/utf\nMemory allocation - code size : 16\n------------------------------------------------------------------\n  0   5 Bra\n  2     \\x{100000}\n  5   5 Ket\n  7     End\n------------------------------------------------------------------\n\n/\\x{10ffff}/utf\nMemory allocation - code size : 16\n------------------------------------------------------------------\n  0   5 Bra\n  2     \\x{10ffff}\n  5   5 Ket\n  7     End\n------------------------------------------------------------------\n\n/\\x{110000}/utf\nFailed: error 134 at offset 9: character code point value in \\x{} or \\o{} is too large\n        here: \\x{110000 |<--| }\n\n/[\\x{ff}]/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{ff}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[\\x{100}]/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{100}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\x80/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{80}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\xff/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{ff}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\x{0041}\\x{2262}\\x{0391}\\x{002e}/I,utf\nMemory allocation - code size : 26\n------------------------------------------------------------------\n  0  10 Bra\n  2     A\\x{2262}\\x{391}.\n 10  10 Ket\n 12     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = '.'\nSubject length lower bound = 4\n\n/\\x{D55c}\\x{ad6d}\\x{C5B4}/I,utf\nMemory allocation - code size : 22\n------------------------------------------------------------------\n  0   8 Bra\n  2     \\x{d55c}\\x{ad6d}\\x{c5b4}\n  8   8 Ket\n 10     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{d55c}\nLast code unit = \\x{c5b4}\nSubject length lower bound = 3\n\n/\\x{65e5}\\x{672c}\\x{8a9e}/I,utf\nMemory allocation - code size : 22\n------------------------------------------------------------------\n  0   8 Bra\n  2     \\x{65e5}\\x{672c}\\x{8a9e}\n  8   8 Ket\n 10     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{65e5}\nLast code unit = \\x{8a9e}\nSubject length lower bound = 3\n\n/[\\x{100}]/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{100}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[Z\\x{100}]/utf\nMemory allocation - code size : 54\n------------------------------------------------------------------\n  0  24 Bra\n  2     [Z\\x{100}]\n 24  24 Ket\n 26     End\n------------------------------------------------------------------\n\n/^[\\x{100}\\E-\\Q\\E\\x{150}]/utf\nMemory allocation - code size : 26\n------------------------------------------------------------------\n  0  10 Bra\n  2     ^\n  3     [\\x{100}-\\x{150}]\n 10  10 Ket\n 12     End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E]/utf\nMemory allocation - code size : 26\n------------------------------------------------------------------\n  0  10 Bra\n  2     ^\n  3     [\\x{100}-\\x{150}]\n 10  10 Ket\n 12     End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E/utf\nFailed: error 106 at offset 13: missing terminating ] for character class\n        here: ...QĀ\\E-\\QŐ\\E |<--|\n\n/[\\p{L}]/\nMemory allocation - code size : 24\n------------------------------------------------------------------\n  0   9 Bra\n  2     [\\p{L}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/[\\p{^L}]/\nMemory allocation - code size : 24\n------------------------------------------------------------------\n  0   9 Bra\n  2     [\\P{L}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/[\\P{L}]/\nMemory allocation - code size : 24\n------------------------------------------------------------------\n  0   9 Bra\n  2     [\\P{L}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/[\\P{^L}]/\nMemory allocation - code size : 24\n------------------------------------------------------------------\n  0   9 Bra\n  2     [\\p{L}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/[abc\\p{L}\\x{0660}]/utf\nMemory allocation - code size : 60\n------------------------------------------------------------------\n  0  27 Bra\n  2     [A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}\\x{660}]\n 27  27 Ket\n 29     End\n------------------------------------------------------------------\n\n/[\\p{Nd}]/utf\nMemory allocation - code size : 24\n------------------------------------------------------------------\n  0   9 Bra\n  2     [\\p{Nd}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/[\\p{Nd}+-]+/utf\nMemory allocation - code size : 58\n------------------------------------------------------------------\n  0  26 Bra\n  2     [+\\-0-9\\p{Nd}]++\n 26  26 Ket\n 28     End\n------------------------------------------------------------------\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/i,utf\nMemory allocation - code size : 32\n------------------------------------------------------------------\n  0  13 Bra\n  2  /i A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 13  13 Ket\n 15     End\n------------------------------------------------------------------\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/utf\nMemory allocation - code size : 32\n------------------------------------------------------------------\n  0  13 Bra\n  2     A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 13  13 Ket\n 15     End\n------------------------------------------------------------------\n\n/[\\x{105}-\\x{109}]/i,utf\nMemory allocation - code size : 24\n------------------------------------------------------------------\n  0   9 Bra\n  2     [\\x{104}-\\x{109}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/( ( (?(1)0|) )*   )/x\nMemory allocation - code size : 52\n------------------------------------------------------------------\n  0  23 Bra\n  2  19 CBra 1\n  5     Brazero\n  6  13 SCBra 2\n  9   6 Cond\n 11   1 Capture ref\n 13     0\n 15   2 Alt\n 17   8 Ket\n 19  13 KetRmax\n 21  19 Ket\n 23  23 Ket\n 25     End\n------------------------------------------------------------------\n\n/(  (?(1)0|)*   )/x\nMemory allocation - code size : 42\n------------------------------------------------------------------\n  0  18 Bra\n  2  14 CBra 1\n  5     Brazero\n  6   6 SCond\n  8   1 Capture ref\n 10     0\n 12   2 Alt\n 14   8 KetRmax\n 16  14 Ket\n 18  18 Ket\n 20     End\n------------------------------------------------------------------\n\n/[a]/\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     a\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[a]/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     a\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[\\xaa]/\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{aa}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[\\xaa]/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{aa}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[^a]/\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     [^a] (not)\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[^a]/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     [^a] (not)\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[^\\xaa]/\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     [^\\x{aa}] (not)\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[^\\xaa]/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   4 Bra\n  2     [^\\x{aa}] (not)\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n#pattern -memory\n\n/[^\\d]/utf,ucp\n------------------------------------------------------------------\n  0   9 Bra\n  2     [^\\p{Nd}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/[[:^alpha:][:^cntrl:]]+/utf,ucp\n------------------------------------------------------------------\n  0  13 Bra\n  2     [\\P{L}\\P{Cc}]++\n 13  13 Ket\n 15     End\n------------------------------------------------------------------\n\n/[[:^cntrl:][:^alpha:]]+/utf,ucp\n------------------------------------------------------------------\n  0  13 Bra\n  2     [\\P{Cc}\\P{L}]++\n 13  13 Ket\n 15     End\n------------------------------------------------------------------\n\n/[[:alpha:]]+/utf,ucp\n------------------------------------------------------------------\n  0  10 Bra\n  2     [\\p{L}]++\n 10  10 Ket\n 12     End\n------------------------------------------------------------------\n\n/[[:^alpha:]\\S]+/utf,ucp\n------------------------------------------------------------------\n  0  13 Bra\n  2     [\\P{L}\\P{Xsp}]++\n 13  13 Ket\n 15     End\n------------------------------------------------------------------\n\n/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/\n------------------------------------------------------------------\n  0  60 Bra\n  2     abc\n  8   5 CBra 1\n 11     d\n 13   4 Alt\n 15     e\n 17   9 Ket\n 19     *THEN\n 20     x\n 22  12 CBra 2\n 25     123\n 31     *THEN\n 32     4\n 34  24 Alt\n 36     567\n 42   5 CBra 3\n 45     b\n 47   4 Alt\n 49     q\n 51   9 Ket\n 53     *THEN\n 54     xx\n 58  36 Ket\n 60  60 Ket\n 62     End\n------------------------------------------------------------------\n\n/(((a\\2)|(a*)\\g<-1>))*a?/\n------------------------------------------------------------------\n  0  35 Bra\n  2     Brazero\n  3  28 SCBra 1\n  6  12 CBra 2\n  9   7 CBra 3\n 12     a\n 14     \\g{2}\n 16   7 Ket\n 18  11 Alt\n 20   5 CBra 4\n 23     a*\n 25   5 Ket\n 27  20 Recurse\n 29  23 Ket\n 31  28 KetRmax\n 33     a?+\n 35  35 Ket\n 37     End\n------------------------------------------------------------------\n\n/((?+1)(\\1))/\n------------------------------------------------------------------\n  0  16 Bra\n  2  12 CBra 1\n  5   7 Recurse\n  7   5 CBra 2\n 10     \\g{1}\n 12   5 Ket\n 14  12 Ket\n 16  16 Ket\n 18     End\n------------------------------------------------------------------\n\n\"(?1)(?#?'){2}(a)\"\n------------------------------------------------------------------\n  0  13 Bra\n  2   6 Recurse\n  4   6 Recurse\n  6   5 CBra 1\n  9     a\n 11   5 Ket\n 13  13 Ket\n 15     End\n------------------------------------------------------------------\n\n/.((?2)(?R)|\\1|$)()/\n------------------------------------------------------------------\n  0  24 Bra\n  2     Any\n  3   7 CBra 1\n  6  19 Recurse\n  8   0 Recurse\n 10   4 Alt\n 12     \\g{1}\n 14   3 Alt\n 16     $\n 17  14 Ket\n 19   3 CBra 2\n 22   3 Ket\n 24  24 Ket\n 26     End\n------------------------------------------------------------------\n\n/.((?3)(?R)()(?2)|\\1|$)()/\n------------------------------------------------------------------\n  0  31 Bra\n  2     Any\n  3  14 CBra 1\n  6  26 Recurse\n  8   0 Recurse\n 10   3 CBra 2\n 13   3 Ket\n 15  10 Recurse\n 17   4 Alt\n 19     \\g{1}\n 21   3 Alt\n 23     $\n 24  21 Ket\n 26   3 CBra 3\n 29   3 Ket\n 31  31 Ket\n 33     End\n------------------------------------------------------------------\n\n/(?1)()((((((\\1++))\\x85)+)|))/\n------------------------------------------------------------------\n  0  46 Bra\n  2   4 Recurse\n  4   3 CBra 1\n  7   3 Ket\n  9  35 CBra 2\n 12  28 CBra 3\n 15  23 CBra 4\n 18  18 CBra 5\n 21  11 CBra 6\n 24   6 CBra 7\n 27     \\g{1}++\n 30   6 Ket\n 32  11 Ket\n 34     \\x{85}\n 36  18 KetRmax\n 38  23 Ket\n 40   2 Alt\n 42  30 Ket\n 44  35 Ket\n 46  46 Ket\n 48     End\n------------------------------------------------------------------\n\n# Check the absolute limit on nesting (?| etc. This varies with code unit\n# width because the workspace is a different number of bytes. It will fail\n# with link size 2 in 8-bit and 16-bit but not in 32-bit.\n\n/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|\n)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n/parens_nest_limit=1000,-fullbincode\nFailed: error 184 at offset 1129: (?| and/or (?J: or (?x: parentheses are too deeply nested\n        here: ...?|(?|(?|(? |-->| |(?|(?|(?|...\n\n# Use \"expand\" to create some very long patterns with nested parentheses, in\n# order to test workspace overflow. Again, this varies with code unit width,\n# and even when it fails in two modes, the error offset differs. It also varies\n# with link size - hence multiple tests with different values.\n\n/(?'ABC'\\[[bar](]{792}*THEN:\\[A]{255}\\[)]{793}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{793}*THEN:\\[A]{255}\\[)]{794}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{1793}*THEN:\\[A]{255}\\[)]{1794}/expand,-fullbincode,parens_nest_limit=2000\nFailed: error 186 at offset 0: regular expression is too complicated\n\n/(?(1)(?1)){8,}+()/debug\n------------------------------------------------------------------\n  0  79 Bra\n  2  70 Once\n  4   6 Cond\n  6   1 Capture ref\n  8  74 Recurse\n 10   6 Ket\n 12   6 Cond\n 14   1 Capture ref\n 16  74 Recurse\n 18   6 Ket\n 20   6 Cond\n 22   1 Capture ref\n 24  74 Recurse\n 26   6 Ket\n 28   6 Cond\n 30   1 Capture ref\n 32  74 Recurse\n 34   6 Ket\n 36   6 Cond\n 38   1 Capture ref\n 40  74 Recurse\n 42   6 Ket\n 44   6 Cond\n 46   1 Capture ref\n 48  74 Recurse\n 50   6 Ket\n 52   6 Cond\n 54   1 Capture ref\n 56  74 Recurse\n 58   6 Ket\n 60  10 SBraPos\n 62   6 SCond\n 64   1 Capture ref\n 66  74 Recurse\n 68   6 Ket\n 70  10 KetRpos\n 72  70 Ket\n 74   3 CBra 1\n 77   3 Ket\n 79  79 Ket\n 81     End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nSubject length lower bound = 0\n    abcd\n 0: \n 1: \n\n/(?(1)|a(?1)b){2,}+()/debug\n------------------------------------------------------------------\n  0  43 Bra\n  2  34 Once\n  4   4 Cond\n  6   1 Capture ref\n  8   8 Alt\n 10     a\n 12  38 Recurse\n 14     b\n 16  12 Ket\n 18  16 SBraPos\n 20   4 SCond\n 22   1 Capture ref\n 24   8 Alt\n 26     a\n 28  38 Recurse\n 30     b\n 32  12 Ket\n 34  16 KetRpos\n 36  34 Ket\n 38   3 CBra 1\n 41   3 Ket\n 43  43 Ket\n 45     End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nSubject length lower bound = 0\n    abcde\nNo match\n\n/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug\n------------------------------------------------------------------\n  0 133 Bra\n  2  41 CBra 1\n  5   2 Recurse\n  7  88 Recurse\n  9  93 Recurse\n 11  98 Recurse\n 13 103 Recurse\n 15 108 Recurse\n 17 113 Recurse\n 19 118 Recurse\n 21 123 Recurse\n 23 123 Recurse\n 25 118 Recurse\n 27 113 Recurse\n 29 108 Recurse\n 31 103 Recurse\n 33  98 Recurse\n 35  93 Recurse\n 37  88 Recurse\n 39   2 Recurse\n 41   0 Recurse\n 43  41 Ket\n 45  41 SCBra 1\n 48   2 Recurse\n 50  88 Recurse\n 52  93 Recurse\n 54  98 Recurse\n 56 103 Recurse\n 58 108 Recurse\n 60 113 Recurse\n 62 118 Recurse\n 64 123 Recurse\n 66 123 Recurse\n 68 118 Recurse\n 70 113 Recurse\n 72 108 Recurse\n 74 103 Recurse\n 76  98 Recurse\n 78  93 Recurse\n 80  88 Recurse\n 82   2 Recurse\n 84   0 Recurse\n 86  41 KetRmax\n 88   3 CBra 2\n 91   3 Ket\n 93   3 CBra 3\n 96   3 Ket\n 98   3 CBra 4\n101   3 Ket\n103   3 CBra 5\n106   3 Ket\n108   3 CBra 6\n111   3 Ket\n113   3 CBra 7\n116   3 Ket\n118   3 CBra 8\n121   3 Ket\n123   3 CBra 9\n126   3 Ket\n128   3 CBra 10\n131   3 Ket\n133 133 Ket\n135     End\n------------------------------------------------------------------\nCapture group count = 10\nMay match empty string\nSubject length lower bound = 0\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/\nFailed: error 114 at offset 509: missing closing parenthesis\n        here: ...](*ACCEPT) |<--|\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode\n\n#pattern -fullbincode\n\n/\\[()]{65535}/expand\nFailed: error 120 at offset 0: regular expression is too large\n\n# End of testinput8\n"
  },
  {
    "path": "testdata/testoutput8-16-4",
    "content": "# There are two sorts of patterns in this test. A number of them are\n# representative patterns whose lengths and offsets are checked. This is just a\n# doublecheck test to ensure the sizes don't go horribly wrong when something\n# is changed. The operation of these patterns is checked in other tests.\n#\n# This file also contains tests whose output varies with code unit size and/or\n# link size. Unicode support is required for these tests. There are separate\n# output files for each code unit size and link size.\n\n#pattern fullbincode,memory\n\n/((?i)b)/\nMemory allocation - code size : 32\n------------------------------------------------------------------\n  0  12 Bra\n  3   6 CBra 1\n  7  /i b\n  9   6 Ket\n 12  12 Ket\n 15     End\n------------------------------------------------------------------\n\n/(?s)(.*X|^B)/\nMemory allocation - code size : 48\n------------------------------------------------------------------\n  0  20 Bra\n  3   8 CBra 1\n  7     AllAny*\n  9     X\n 11   6 Alt\n 14     ^\n 15     B\n 17  14 Ket\n 20  20 Ket\n 23     End\n------------------------------------------------------------------\n\n/(?s:.*X|^B)/\nMemory allocation - code size : 46\n------------------------------------------------------------------\n  0  19 Bra\n  3   7 Bra\n  6     AllAny*\n  8     X\n 10   6 Alt\n 13     ^\n 14     B\n 16  13 Ket\n 19  19 Ket\n 22     End\n------------------------------------------------------------------\n\n/^[[:alnum:]]/\nMemory allocation - code size : 50\n------------------------------------------------------------------\n  0  21 Bra\n  3     ^\n  4     [0-9A-Za-z]\n 21  21 Ket\n 24     End\n------------------------------------------------------------------\n\n/#/Ix\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   3 Bra\n  3   3 Ket\n  6     End\n------------------------------------------------------------------\nCapture group count = 0\nMay match empty string\nOptions: extended\nSubject length lower bound = 0\n\n/a#/Ix\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     a\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: extended\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/x?+/\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     x?+\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/x++/\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     x++\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/x{1,3}+/\nMemory allocation - code size : 24\n------------------------------------------------------------------\n  0   8 Bra\n  3     x\n  5     x{0,2}+\n  8   8 Ket\n 11     End\n------------------------------------------------------------------\n\n/(x)*+/\nMemory allocation - code size : 34\n------------------------------------------------------------------\n  0  13 Bra\n  3     Braposzero\n  4   6 CBraPos 1\n  8     x\n 10   6 KetRpos\n 13  13 Ket\n 16     End\n------------------------------------------------------------------\n\n/^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))/\nMemory allocation - code size : 166\n------------------------------------------------------------------\n  0  79 Bra\n  3     ^\n  4  72 CBra 1\n  8   6 CBra 2\n 12     a+\n 14   6 Ket\n 17  22 CBra 3\n 21     [ab]+?\n 39  22 Ket\n 42  22 CBra 4\n 46     [bc]+\n 64  22 Ket\n 67   6 CBra 5\n 71     \\w*+\n 73   6 Ket\n 76  72 Ket\n 79  79 Ket\n 82     End\n------------------------------------------------------------------\n\n\"8J\\$WE\\<\\.rX\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\nMemory allocation - code size : 1652\n------------------------------------------------------------------\n  0 822 Bra\n  3     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n821     \\b\n822 822 Ket\n825     End\n------------------------------------------------------------------\n\n\"\\$\\<\\.X\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\nMemory allocation - code size : 1632\n------------------------------------------------------------------\n  0 812 Bra\n  3     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n811     \\b\n812 812 Ket\n815     End\n------------------------------------------------------------------\n\n/(a(?1)b)/\nMemory allocation - code size : 42\n------------------------------------------------------------------\n  0  17 Bra\n  3  11 CBra 1\n  7     a\n  9   3 Recurse\n 12     b\n 14  11 Ket\n 17  17 Ket\n 20     End\n------------------------------------------------------------------\n\n/(a(?1)+b)/\nMemory allocation - code size : 54\n------------------------------------------------------------------\n  0  23 Bra\n  3  17 CBra 1\n  7     a\n  9   6 SBra\n 12   3 Recurse\n 15   6 KetRmax\n 18     b\n 20  17 Ket\n 23  23 Ket\n 26     End\n------------------------------------------------------------------\n\n/a(?P<name1>b|c)d(?P<longername2>e)/\nMemory allocation - code size : 68\nMemory allocation - data size : 52\n------------------------------------------------------------------\n  0  30 Bra\n  3     a\n  5   6 CBra 1\n  9     b\n 11   5 Alt\n 14     c\n 16  11 Ket\n 19     d\n 21   6 CBra 2\n 25     e\n 27   6 Ket\n 30  30 Ket\n 33     End\n------------------------------------------------------------------\n\n/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/\nMemory allocation - code size : 84\nMemory allocation - data size : 18\n------------------------------------------------------------------\n  0  38 Bra\n  3  23 Bra\n  6     a\n  8  15 CBra 1\n 12     c\n 14   6 CBra 2\n 18     d\n 20   6 Ket\n 23  15 Ket\n 26  23 Ket\n 29   6 CBra 3\n 33     a\n 35   6 Ket\n 38  38 Ket\n 41     End\n------------------------------------------------------------------\n\n/(?P<a>a)...(?P=a)bbb(?P>a)d/\nMemory allocation - code size : 64\nMemory allocation - data size : 6\n------------------------------------------------------------------\n  0  28 Bra\n  3   6 CBra 1\n  7     a\n  9   6 Ket\n 12     Any\n 13     Any\n 14     Any\n 15     \\g{1}\n 17     bbb\n 23   3 Recurse\n 26     d\n 28  28 Ket\n 31     End\n------------------------------------------------------------------\n\n/abc(?C255)de(?C)f/\nMemory allocation - code size : 62\n------------------------------------------------------------------\n  0  27 Bra\n  3     abc\n  9     Callout 255 10 1\n 15     de\n 19     Callout 0 16 1\n 25     f\n 27  27 Ket\n 30     End\n------------------------------------------------------------------\n\n/abcde/auto_callout\nMemory allocation - code size : 106\n------------------------------------------------------------------\n  0  49 Bra\n  3     Callout 255 0 1\n  9     a\n 11     Callout 255 1 1\n 17     b\n 19     Callout 255 2 1\n 25     c\n 27     Callout 255 3 1\n 33     d\n 35     Callout 255 4 1\n 41     e\n 43     Callout 255 5 0\n 49  49 Ket\n 52     End\n------------------------------------------------------------------\n\n/\\x{100}/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     \\x{100}\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/\\x{1000}/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     \\x{1000}\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/\\x{10000}/utf\nMemory allocation - code size : 20\n------------------------------------------------------------------\n  0   6 Bra\n  3     \\x{10000}\n  6   6 Ket\n  9     End\n------------------------------------------------------------------\n\n/\\x{100000}/utf\nMemory allocation - code size : 20\n------------------------------------------------------------------\n  0   6 Bra\n  3     \\x{100000}\n  6   6 Ket\n  9     End\n------------------------------------------------------------------\n\n/\\x{10ffff}/utf\nMemory allocation - code size : 20\n------------------------------------------------------------------\n  0   6 Bra\n  3     \\x{10ffff}\n  6   6 Ket\n  9     End\n------------------------------------------------------------------\n\n/\\x{110000}/utf\nFailed: error 134 at offset 9: character code point value in \\x{} or \\o{} is too large\n        here: \\x{110000 |<--| }\n\n/[\\x{ff}]/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     \\x{ff}\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[\\x{100}]/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     \\x{100}\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/\\x80/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     \\x{80}\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/\\xff/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     \\x{ff}\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/\\x{0041}\\x{2262}\\x{0391}\\x{002e}/I,utf\nMemory allocation - code size : 30\n------------------------------------------------------------------\n  0  11 Bra\n  3     A\\x{2262}\\x{391}.\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = '.'\nSubject length lower bound = 4\n\n/\\x{D55c}\\x{ad6d}\\x{C5B4}/I,utf\nMemory allocation - code size : 26\n------------------------------------------------------------------\n  0   9 Bra\n  3     \\x{d55c}\\x{ad6d}\\x{c5b4}\n  9   9 Ket\n 12     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{d55c}\nLast code unit = \\x{c5b4}\nSubject length lower bound = 3\n\n/\\x{65e5}\\x{672c}\\x{8a9e}/I,utf\nMemory allocation - code size : 26\n------------------------------------------------------------------\n  0   9 Bra\n  3     \\x{65e5}\\x{672c}\\x{8a9e}\n  9   9 Ket\n 12     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{65e5}\nLast code unit = \\x{8a9e}\nSubject length lower bound = 3\n\n/[\\x{100}]/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     \\x{100}\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[Z\\x{100}]/utf\nMemory allocation - code size : 60\n------------------------------------------------------------------\n  0  26 Bra\n  3     [Z\\x{100}]\n 26  26 Ket\n 29     End\n------------------------------------------------------------------\n\n/^[\\x{100}\\E-\\Q\\E\\x{150}]/utf\nMemory allocation - code size : 32\n------------------------------------------------------------------\n  0  12 Bra\n  3     ^\n  4     [\\x{100}-\\x{150}]\n 12  12 Ket\n 15     End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E]/utf\nMemory allocation - code size : 32\n------------------------------------------------------------------\n  0  12 Bra\n  3     ^\n  4     [\\x{100}-\\x{150}]\n 12  12 Ket\n 15     End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E/utf\nFailed: error 106 at offset 13: missing terminating ] for character class\n        here: ...QĀ\\E-\\QŐ\\E |<--|\n\n/[\\p{L}]/\nMemory allocation - code size : 30\n------------------------------------------------------------------\n  0  11 Bra\n  3     [\\p{L}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/[\\p{^L}]/\nMemory allocation - code size : 30\n------------------------------------------------------------------\n  0  11 Bra\n  3     [\\P{L}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/[\\P{L}]/\nMemory allocation - code size : 30\n------------------------------------------------------------------\n  0  11 Bra\n  3     [\\P{L}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/[\\P{^L}]/\nMemory allocation - code size : 30\n------------------------------------------------------------------\n  0  11 Bra\n  3     [\\p{L}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/[abc\\p{L}\\x{0660}]/utf\nMemory allocation - code size : 66\n------------------------------------------------------------------\n  0  29 Bra\n  3     [A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}\\x{660}]\n 29  29 Ket\n 32     End\n------------------------------------------------------------------\n\n/[\\p{Nd}]/utf\nMemory allocation - code size : 30\n------------------------------------------------------------------\n  0  11 Bra\n  3     [\\p{Nd}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/[\\p{Nd}+-]+/utf\nMemory allocation - code size : 64\n------------------------------------------------------------------\n  0  28 Bra\n  3     [+\\-0-9\\p{Nd}]++\n 28  28 Ket\n 31     End\n------------------------------------------------------------------\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/i,utf\nMemory allocation - code size : 36\n------------------------------------------------------------------\n  0  14 Bra\n  3  /i A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 14  14 Ket\n 17     End\n------------------------------------------------------------------\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/utf\nMemory allocation - code size : 36\n------------------------------------------------------------------\n  0  14 Bra\n  3     A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 14  14 Ket\n 17     End\n------------------------------------------------------------------\n\n/[\\x{105}-\\x{109}]/i,utf\nMemory allocation - code size : 30\n------------------------------------------------------------------\n  0  11 Bra\n  3     [\\x{104}-\\x{109}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/( ( (?(1)0|) )*   )/x\nMemory allocation - code size : 70\n------------------------------------------------------------------\n  0  31 Bra\n  3  25 CBra 1\n  7     Brazero\n  8  17 SCBra 2\n 12   7 Cond\n 15   1 Capture ref\n 17     0\n 19   3 Alt\n 22  10 Ket\n 25  17 KetRmax\n 28  25 Ket\n 31  31 Ket\n 34     End\n------------------------------------------------------------------\n\n/(  (?(1)0|)*   )/x\nMemory allocation - code size : 56\n------------------------------------------------------------------\n  0  24 Bra\n  3  18 CBra 1\n  7     Brazero\n  8   7 SCond\n 11   1 Capture ref\n 13     0\n 15   3 Alt\n 18  10 KetRmax\n 21  18 Ket\n 24  24 Ket\n 27     End\n------------------------------------------------------------------\n\n/[a]/\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     a\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[a]/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     a\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[\\xaa]/\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     \\x{aa}\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[\\xaa]/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     \\x{aa}\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[^a]/\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     [^a] (not)\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[^a]/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     [^a] (not)\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[^\\xaa]/\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     [^\\x{aa}] (not)\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[^\\xaa]/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0   5 Bra\n  3     [^\\x{aa}] (not)\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n#pattern -memory\n\n/[^\\d]/utf,ucp\n------------------------------------------------------------------\n  0  11 Bra\n  3     [^\\p{Nd}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/[[:^alpha:][:^cntrl:]]+/utf,ucp\n------------------------------------------------------------------\n  0  15 Bra\n  3     [\\P{L}\\P{Cc}]++\n 15  15 Ket\n 18     End\n------------------------------------------------------------------\n\n/[[:^cntrl:][:^alpha:]]+/utf,ucp\n------------------------------------------------------------------\n  0  15 Bra\n  3     [\\P{Cc}\\P{L}]++\n 15  15 Ket\n 18     End\n------------------------------------------------------------------\n\n/[[:alpha:]]+/utf,ucp\n------------------------------------------------------------------\n  0  12 Bra\n  3     [\\p{L}]++\n 12  12 Ket\n 15     End\n------------------------------------------------------------------\n\n/[[:^alpha:]\\S]+/utf,ucp\n------------------------------------------------------------------\n  0  15 Bra\n  3     [\\P{L}\\P{Xsp}]++\n 15  15 Ket\n 18     End\n------------------------------------------------------------------\n\n/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/\n------------------------------------------------------------------\n  0  70 Bra\n  3     abc\n  9   6 CBra 1\n 13     d\n 15   5 Alt\n 18     e\n 20  11 Ket\n 23     *THEN\n 24     x\n 26  13 CBra 2\n 30     123\n 36     *THEN\n 37     4\n 39  28 Alt\n 42     567\n 48   6 CBra 3\n 52     b\n 54   5 Alt\n 57     q\n 59  11 Ket\n 62     *THEN\n 63     xx\n 67  41 Ket\n 70  70 Ket\n 73     End\n------------------------------------------------------------------\n\n/(((a\\2)|(a*)\\g<-1>))*a?/\n------------------------------------------------------------------\n  0  46 Bra\n  3     Brazero\n  4  37 SCBra 1\n  8  15 CBra 2\n 12   8 CBra 3\n 16     a\n 18     \\g{2}\n 20   8 Ket\n 23  15 Alt\n 26   6 CBra 4\n 30     a*\n 32   6 Ket\n 35  26 Recurse\n 38  30 Ket\n 41  37 KetRmax\n 44     a?+\n 46  46 Ket\n 49     End\n------------------------------------------------------------------\n\n/((?+1)(\\1))/\n------------------------------------------------------------------\n  0  22 Bra\n  3  16 CBra 1\n  7  10 Recurse\n 10   6 CBra 2\n 14     \\g{1}\n 16   6 Ket\n 19  16 Ket\n 22  22 Ket\n 25     End\n------------------------------------------------------------------\n\n\"(?1)(?#?'){2}(a)\"\n------------------------------------------------------------------\n  0  18 Bra\n  3   9 Recurse\n  6   9 Recurse\n  9   6 CBra 1\n 13     a\n 15   6 Ket\n 18  18 Ket\n 21     End\n------------------------------------------------------------------\n\n/.((?2)(?R)|\\1|$)()/\n------------------------------------------------------------------\n  0  33 Bra\n  3     Any\n  4  10 CBra 1\n  8  26 Recurse\n 11   0 Recurse\n 14   5 Alt\n 17     \\g{1}\n 19   4 Alt\n 22     $\n 23  19 Ket\n 26   4 CBra 2\n 30   4 Ket\n 33  33 Ket\n 36     End\n------------------------------------------------------------------\n\n/.((?3)(?R)()(?2)|\\1|$)()/\n------------------------------------------------------------------\n  0  43 Bra\n  3     Any\n  4  20 CBra 1\n  8  36 Recurse\n 11   0 Recurse\n 14   4 CBra 2\n 18   4 Ket\n 21  14 Recurse\n 24   5 Alt\n 27     \\g{1}\n 29   4 Alt\n 32     $\n 33  29 Ket\n 36   4 CBra 3\n 40   4 Ket\n 43  43 Ket\n 46     End\n------------------------------------------------------------------\n\n/(?1)()((((((\\1++))\\x85)+)|))/\n------------------------------------------------------------------\n  0  63 Bra\n  3   6 Recurse\n  6   4 CBra 1\n 10   4 Ket\n 13  47 CBra 2\n 17  37 CBra 3\n 21  30 CBra 4\n 25  23 CBra 5\n 29  14 CBra 6\n 33   7 CBra 7\n 37     \\g{1}++\n 40   7 Ket\n 43  14 Ket\n 46     \\x{85}\n 48  23 KetRmax\n 51  30 Ket\n 54   3 Alt\n 57  40 Ket\n 60  47 Ket\n 63  63 Ket\n 66     End\n------------------------------------------------------------------\n\n# Check the absolute limit on nesting (?| etc. This varies with code unit\n# width because the workspace is a different number of bytes. It will fail\n# with link size 2 in 8-bit and 16-bit but not in 32-bit.\n\n/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|\n)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n/parens_nest_limit=1000,-fullbincode\n\n# Use \"expand\" to create some very long patterns with nested parentheses, in\n# order to test workspace overflow. Again, this varies with code unit width,\n# and even when it fails in two modes, the error offset differs. It also varies\n# with link size - hence multiple tests with different values.\n\n/(?'ABC'\\[[bar](]{792}*THEN:\\[A]{255}\\[)]{793}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{793}*THEN:\\[A]{255}\\[)]{794}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{1793}*THEN:\\[A]{255}\\[)]{1794}/expand,-fullbincode,parens_nest_limit=2000\nFailed: error 186 at offset 0: regular expression is too complicated\n\n/(?(1)(?1)){8,}+()/debug\n------------------------------------------------------------------\n  0 110 Bra\n  3  97 Once\n  6   8 Cond\n  9   1 Capture ref\n 11 103 Recurse\n 14   8 Ket\n 17   8 Cond\n 20   1 Capture ref\n 22 103 Recurse\n 25   8 Ket\n 28   8 Cond\n 31   1 Capture ref\n 33 103 Recurse\n 36   8 Ket\n 39   8 Cond\n 42   1 Capture ref\n 44 103 Recurse\n 47   8 Ket\n 50   8 Cond\n 53   1 Capture ref\n 55 103 Recurse\n 58   8 Ket\n 61   8 Cond\n 64   1 Capture ref\n 66 103 Recurse\n 69   8 Ket\n 72   8 Cond\n 75   1 Capture ref\n 77 103 Recurse\n 80   8 Ket\n 83  14 SBraPos\n 86   8 SCond\n 89   1 Capture ref\n 91 103 Recurse\n 94   8 Ket\n 97  14 KetRpos\n100  97 Ket\n103   4 CBra 1\n107   4 Ket\n110 110 Ket\n113     End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nSubject length lower bound = 0\n    abcd\n 0: \n 1: \n\n/(?(1)|a(?1)b){2,}+()/debug\n------------------------------------------------------------------\n  0  58 Bra\n  3  45 Once\n  6   5 Cond\n  9   1 Capture ref\n 11  10 Alt\n 14     a\n 16  51 Recurse\n 19     b\n 21  15 Ket\n 24  21 SBraPos\n 27   5 SCond\n 30   1 Capture ref\n 32  10 Alt\n 35     a\n 37  51 Recurse\n 40     b\n 42  15 Ket\n 45  21 KetRpos\n 48  45 Ket\n 51   4 CBra 1\n 55   4 Ket\n 58  58 Ket\n 61     End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nSubject length lower bound = 0\n    abcde\nNo match\n\n/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug\n------------------------------------------------------------------\n  0 194 Bra\n  3  61 CBra 1\n  7   3 Recurse\n 10 131 Recurse\n 13 138 Recurse\n 16 145 Recurse\n 19 152 Recurse\n 22 159 Recurse\n 25 166 Recurse\n 28 173 Recurse\n 31 180 Recurse\n 34 180 Recurse\n 37 173 Recurse\n 40 166 Recurse\n 43 159 Recurse\n 46 152 Recurse\n 49 145 Recurse\n 52 138 Recurse\n 55 131 Recurse\n 58   3 Recurse\n 61   0 Recurse\n 64  61 Ket\n 67  61 SCBra 1\n 71   3 Recurse\n 74 131 Recurse\n 77 138 Recurse\n 80 145 Recurse\n 83 152 Recurse\n 86 159 Recurse\n 89 166 Recurse\n 92 173 Recurse\n 95 180 Recurse\n 98 180 Recurse\n101 173 Recurse\n104 166 Recurse\n107 159 Recurse\n110 152 Recurse\n113 145 Recurse\n116 138 Recurse\n119 131 Recurse\n122   3 Recurse\n125   0 Recurse\n128  61 KetRmax\n131   4 CBra 2\n135   4 Ket\n138   4 CBra 3\n142   4 Ket\n145   4 CBra 4\n149   4 Ket\n152   4 CBra 5\n156   4 Ket\n159   4 CBra 6\n163   4 Ket\n166   4 CBra 7\n170   4 Ket\n173   4 CBra 8\n177   4 Ket\n180   4 CBra 9\n184   4 Ket\n187   4 CBra 10\n191   4 Ket\n194 194 Ket\n197     End\n------------------------------------------------------------------\nCapture group count = 10\nMay match empty string\nSubject length lower bound = 0\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/\nFailed: error 114 at offset 509: missing closing parenthesis\n        here: ...](*ACCEPT) |<--|\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode\n\n#pattern -fullbincode\n\n/\\[()]{65535}/expand\n\n# End of testinput8\n"
  },
  {
    "path": "testdata/testoutput8-32-4",
    "content": "# There are two sorts of patterns in this test. A number of them are\n# representative patterns whose lengths and offsets are checked. This is just a\n# doublecheck test to ensure the sizes don't go horribly wrong when something\n# is changed. The operation of these patterns is checked in other tests.\n#\n# This file also contains tests whose output varies with code unit size and/or\n# link size. Unicode support is required for these tests. There are separate\n# output files for each code unit size and link size.\n\n#pattern fullbincode,memory\n\n/((?i)b)/\nMemory allocation - code size : 48\n------------------------------------------------------------------\n  0   9 Bra\n  2   5 CBra 1\n  5  /i b\n  7   5 Ket\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/(?s)(.*X|^B)/\nMemory allocation - code size : 76\n------------------------------------------------------------------\n  0  16 Bra\n  2   7 CBra 1\n  5     AllAny*\n  7     X\n  9   5 Alt\n 11     ^\n 12     B\n 14  12 Ket\n 16  16 Ket\n 18     End\n------------------------------------------------------------------\n\n/(?s:.*X|^B)/\nMemory allocation - code size : 72\n------------------------------------------------------------------\n  0  15 Bra\n  2   6 Bra\n  4     AllAny*\n  6     X\n  8   5 Alt\n 10     ^\n 11     B\n 13  11 Ket\n 15  15 Ket\n 17     End\n------------------------------------------------------------------\n\n/^[[:alnum:]]/\nMemory allocation - code size : 60\n------------------------------------------------------------------\n  0  12 Bra\n  2     ^\n  3     [0-9A-Za-z]\n 12  12 Ket\n 14     End\n------------------------------------------------------------------\n\n/#/Ix\nMemory allocation - code size : 20\n------------------------------------------------------------------\n  0   2 Bra\n  2   2 Ket\n  4     End\n------------------------------------------------------------------\nCapture group count = 0\nMay match empty string\nOptions: extended\nSubject length lower bound = 0\n\n/a#/Ix\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     a\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: extended\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/x?+/\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     x?+\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/x++/\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     x++\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/x{1,3}+/\nMemory allocation - code size : 40\n------------------------------------------------------------------\n  0   7 Bra\n  2     x\n  4     x{0,2}+\n  7   7 Ket\n  9     End\n------------------------------------------------------------------\n\n/(x)*+/\nMemory allocation - code size : 52\n------------------------------------------------------------------\n  0  10 Bra\n  2     Braposzero\n  3   5 CBraPos 1\n  6     x\n  8   5 KetRpos\n 10  10 Ket\n 12     End\n------------------------------------------------------------------\n\n/^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))/\nMemory allocation - code size : 220\n------------------------------------------------------------------\n  0  52 Bra\n  2     ^\n  3  47 CBra 1\n  6   5 CBra 2\n  9     a+\n 11   5 Ket\n 13  13 CBra 3\n 16     [ab]+?\n 26  13 Ket\n 28  13 CBra 4\n 31     [bc]+\n 41  13 Ket\n 43   5 CBra 5\n 46     \\w*+\n 48   5 Ket\n 50  47 Ket\n 52  52 Ket\n 54     End\n------------------------------------------------------------------\n\n\"8J\\$WE\\<\\.rX\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\nMemory allocation - code size : 3296\n------------------------------------------------------------------\n  0 821 Bra\n  2     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n820     \\b\n821 821 Ket\n823     End\n------------------------------------------------------------------\n\n\"\\$\\<\\.X\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\nMemory allocation - code size : 3256\n------------------------------------------------------------------\n  0 811 Bra\n  2     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n810     \\b\n811 811 Ket\n813     End\n------------------------------------------------------------------\n\n/(a(?1)b)/\nMemory allocation - code size : 64\n------------------------------------------------------------------\n  0  13 Bra\n  2   9 CBra 1\n  5     a\n  7   2 Recurse\n  9     b\n 11   9 Ket\n 13  13 Ket\n 15     End\n------------------------------------------------------------------\n\n/(a(?1)+b)/\nMemory allocation - code size : 80\n------------------------------------------------------------------\n  0  17 Bra\n  2  13 CBra 1\n  5     a\n  7   4 SBra\n  9   2 Recurse\n 11   4 KetRmax\n 13     b\n 15  13 Ket\n 17  17 Ket\n 19     End\n------------------------------------------------------------------\n\n/a(?P<name1>b|c)d(?P<longername2>e)/\nMemory allocation - code size : 108\nMemory allocation - data size : 104\n------------------------------------------------------------------\n  0  24 Bra\n  2     a\n  4   5 CBra 1\n  7     b\n  9   4 Alt\n 11     c\n 13   9 Ket\n 15     d\n 17   5 CBra 2\n 20     e\n 22   5 Ket\n 24  24 Ket\n 26     End\n------------------------------------------------------------------\n\n/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/\nMemory allocation - code size : 128\nMemory allocation - data size : 36\n------------------------------------------------------------------\n  0  29 Bra\n  2  18 Bra\n  4     a\n  6  12 CBra 1\n  9     c\n 11   5 CBra 2\n 14     d\n 16   5 Ket\n 18  12 Ket\n 20  18 Ket\n 22   5 CBra 3\n 25     a\n 27   5 Ket\n 29  29 Ket\n 31     End\n------------------------------------------------------------------\n\n/(?P<a>a)...(?P=a)bbb(?P>a)d/\nMemory allocation - code size : 108\nMemory allocation - data size : 12\n------------------------------------------------------------------\n  0  24 Bra\n  2   5 CBra 1\n  5     a\n  7   5 Ket\n  9     Any\n 10     Any\n 11     Any\n 12     \\g{1}\n 14     bbb\n 20   2 Recurse\n 22     d\n 24  24 Ket\n 26     End\n------------------------------------------------------------------\n\n/abc(?C255)de(?C)f/\nMemory allocation - code size : 100\n------------------------------------------------------------------\n  0  22 Bra\n  2     abc\n  8     Callout 255 10 1\n 12     de\n 16     Callout 0 16 1\n 20     f\n 22  22 Ket\n 24     End\n------------------------------------------------------------------\n\n/abcde/auto_callout\nMemory allocation - code size : 156\n------------------------------------------------------------------\n  0  36 Bra\n  2     Callout 255 0 1\n  6     a\n  8     Callout 255 1 1\n 12     b\n 14     Callout 255 2 1\n 18     c\n 20     Callout 255 3 1\n 24     d\n 26     Callout 255 4 1\n 30     e\n 32     Callout 255 5 0\n 36  36 Ket\n 38     End\n------------------------------------------------------------------\n\n/\\x{100}/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{100}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\x{1000}/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{1000}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\x{10000}/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{10000}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\x{100000}/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{100000}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\x{10ffff}/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{10ffff}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\x{110000}/utf\nFailed: error 134 at offset 9: character code point value in \\x{} or \\o{} is too large\n        here: \\x{110000 |<--| }\n\n/[\\x{ff}]/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{ff}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[\\x{100}]/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{100}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\x80/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{80}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\xff/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{ff}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/\\x{0041}\\x{2262}\\x{0391}\\x{002e}/I,utf\nMemory allocation - code size : 52\n------------------------------------------------------------------\n  0  10 Bra\n  2     A\\x{2262}\\x{391}.\n 10  10 Ket\n 12     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = '.'\nSubject length lower bound = 4\n\n/\\x{D55c}\\x{ad6d}\\x{C5B4}/I,utf\nMemory allocation - code size : 44\n------------------------------------------------------------------\n  0   8 Bra\n  2     \\x{d55c}\\x{ad6d}\\x{c5b4}\n  8   8 Ket\n 10     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{d55c}\nLast code unit = \\x{c5b4}\nSubject length lower bound = 3\n\n/\\x{65e5}\\x{672c}\\x{8a9e}/I,utf\nMemory allocation - code size : 44\n------------------------------------------------------------------\n  0   8 Bra\n  2     \\x{65e5}\\x{672c}\\x{8a9e}\n  8   8 Ket\n 10     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\x{65e5}\nLast code unit = \\x{8a9e}\nSubject length lower bound = 3\n\n/[\\x{100}]/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{100}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[Z\\x{100}]/utf\nMemory allocation - code size : 76\n------------------------------------------------------------------\n  0  16 Bra\n  2     [Z\\x{100}]\n 16  16 Ket\n 18     End\n------------------------------------------------------------------\n\n/^[\\x{100}\\E-\\Q\\E\\x{150}]/utf\nMemory allocation - code size : 52\n------------------------------------------------------------------\n  0  10 Bra\n  2     ^\n  3     [\\x{100}-\\x{150}]\n 10  10 Ket\n 12     End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E]/utf\nMemory allocation - code size : 52\n------------------------------------------------------------------\n  0  10 Bra\n  2     ^\n  3     [\\x{100}-\\x{150}]\n 10  10 Ket\n 12     End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E/utf\nFailed: error 106 at offset 13: missing terminating ] for character class\n        here: ...QĀ\\E-\\QŐ\\E |<--|\n\n/[\\p{L}]/\nMemory allocation - code size : 48\n------------------------------------------------------------------\n  0   9 Bra\n  2     [\\p{L}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/[\\p{^L}]/\nMemory allocation - code size : 48\n------------------------------------------------------------------\n  0   9 Bra\n  2     [\\P{L}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/[\\P{L}]/\nMemory allocation - code size : 48\n------------------------------------------------------------------\n  0   9 Bra\n  2     [\\P{L}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/[\\P{^L}]/\nMemory allocation - code size : 48\n------------------------------------------------------------------\n  0   9 Bra\n  2     [\\p{L}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/[abc\\p{L}\\x{0660}]/utf\nMemory allocation - code size : 88\n------------------------------------------------------------------\n  0  19 Bra\n  2     [A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}\\x{660}]\n 19  19 Ket\n 21     End\n------------------------------------------------------------------\n\n/[\\p{Nd}]/utf\nMemory allocation - code size : 48\n------------------------------------------------------------------\n  0   9 Bra\n  2     [\\p{Nd}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/[\\p{Nd}+-]+/utf\nMemory allocation - code size : 84\n------------------------------------------------------------------\n  0  18 Bra\n  2     [+\\-0-9\\p{Nd}]++\n 18  18 Ket\n 20     End\n------------------------------------------------------------------\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/i,utf\nMemory allocation - code size : 60\n------------------------------------------------------------------\n  0  12 Bra\n  2  /i A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 12  12 Ket\n 14     End\n------------------------------------------------------------------\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/utf\nMemory allocation - code size : 60\n------------------------------------------------------------------\n  0  12 Bra\n  2     A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 12  12 Ket\n 14     End\n------------------------------------------------------------------\n\n/[\\x{105}-\\x{109}]/i,utf\nMemory allocation - code size : 48\n------------------------------------------------------------------\n  0   9 Bra\n  2     [\\x{104}-\\x{109}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/( ( (?(1)0|) )*   )/x\nMemory allocation - code size : 104\n------------------------------------------------------------------\n  0  23 Bra\n  2  19 CBra 1\n  5     Brazero\n  6  13 SCBra 2\n  9   6 Cond\n 11   1 Capture ref\n 13     0\n 15   2 Alt\n 17   8 Ket\n 19  13 KetRmax\n 21  19 Ket\n 23  23 Ket\n 25     End\n------------------------------------------------------------------\n\n/(  (?(1)0|)*   )/x\nMemory allocation - code size : 84\n------------------------------------------------------------------\n  0  18 Bra\n  2  14 CBra 1\n  5     Brazero\n  6   6 SCond\n  8   1 Capture ref\n 10     0\n 12   2 Alt\n 14   8 KetRmax\n 16  14 Ket\n 18  18 Ket\n 20     End\n------------------------------------------------------------------\n\n/[a]/\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     a\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[a]/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     a\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[\\xaa]/\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{aa}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[\\xaa]/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     \\x{aa}\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[^a]/\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     [^a] (not)\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[^a]/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     [^a] (not)\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[^\\xaa]/\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     [^\\x{aa}] (not)\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n/[^\\xaa]/utf\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0   4 Bra\n  2     [^\\x{aa}] (not)\n  4   4 Ket\n  6     End\n------------------------------------------------------------------\n\n#pattern -memory\n\n/[^\\d]/utf,ucp\n------------------------------------------------------------------\n  0   9 Bra\n  2     [^\\p{Nd}]\n  9   9 Ket\n 11     End\n------------------------------------------------------------------\n\n/[[:^alpha:][:^cntrl:]]+/utf,ucp\n------------------------------------------------------------------\n  0  13 Bra\n  2     [\\P{L}\\P{Cc}]++\n 13  13 Ket\n 15     End\n------------------------------------------------------------------\n\n/[[:^cntrl:][:^alpha:]]+/utf,ucp\n------------------------------------------------------------------\n  0  13 Bra\n  2     [\\P{Cc}\\P{L}]++\n 13  13 Ket\n 15     End\n------------------------------------------------------------------\n\n/[[:alpha:]]+/utf,ucp\n------------------------------------------------------------------\n  0  10 Bra\n  2     [\\p{L}]++\n 10  10 Ket\n 12     End\n------------------------------------------------------------------\n\n/[[:^alpha:]\\S]+/utf,ucp\n------------------------------------------------------------------\n  0  13 Bra\n  2     [\\P{L}\\P{Xsp}]++\n 13  13 Ket\n 15     End\n------------------------------------------------------------------\n\n/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/\n------------------------------------------------------------------\n  0  60 Bra\n  2     abc\n  8   5 CBra 1\n 11     d\n 13   4 Alt\n 15     e\n 17   9 Ket\n 19     *THEN\n 20     x\n 22  12 CBra 2\n 25     123\n 31     *THEN\n 32     4\n 34  24 Alt\n 36     567\n 42   5 CBra 3\n 45     b\n 47   4 Alt\n 49     q\n 51   9 Ket\n 53     *THEN\n 54     xx\n 58  36 Ket\n 60  60 Ket\n 62     End\n------------------------------------------------------------------\n\n/(((a\\2)|(a*)\\g<-1>))*a?/\n------------------------------------------------------------------\n  0  35 Bra\n  2     Brazero\n  3  28 SCBra 1\n  6  12 CBra 2\n  9   7 CBra 3\n 12     a\n 14     \\g{2}\n 16   7 Ket\n 18  11 Alt\n 20   5 CBra 4\n 23     a*\n 25   5 Ket\n 27  20 Recurse\n 29  23 Ket\n 31  28 KetRmax\n 33     a?+\n 35  35 Ket\n 37     End\n------------------------------------------------------------------\n\n/((?+1)(\\1))/\n------------------------------------------------------------------\n  0  16 Bra\n  2  12 CBra 1\n  5   7 Recurse\n  7   5 CBra 2\n 10     \\g{1}\n 12   5 Ket\n 14  12 Ket\n 16  16 Ket\n 18     End\n------------------------------------------------------------------\n\n\"(?1)(?#?'){2}(a)\"\n------------------------------------------------------------------\n  0  13 Bra\n  2   6 Recurse\n  4   6 Recurse\n  6   5 CBra 1\n  9     a\n 11   5 Ket\n 13  13 Ket\n 15     End\n------------------------------------------------------------------\n\n/.((?2)(?R)|\\1|$)()/\n------------------------------------------------------------------\n  0  24 Bra\n  2     Any\n  3   7 CBra 1\n  6  19 Recurse\n  8   0 Recurse\n 10   4 Alt\n 12     \\g{1}\n 14   3 Alt\n 16     $\n 17  14 Ket\n 19   3 CBra 2\n 22   3 Ket\n 24  24 Ket\n 26     End\n------------------------------------------------------------------\n\n/.((?3)(?R)()(?2)|\\1|$)()/\n------------------------------------------------------------------\n  0  31 Bra\n  2     Any\n  3  14 CBra 1\n  6  26 Recurse\n  8   0 Recurse\n 10   3 CBra 2\n 13   3 Ket\n 15  10 Recurse\n 17   4 Alt\n 19     \\g{1}\n 21   3 Alt\n 23     $\n 24  21 Ket\n 26   3 CBra 3\n 29   3 Ket\n 31  31 Ket\n 33     End\n------------------------------------------------------------------\n\n/(?1)()((((((\\1++))\\x85)+)|))/\n------------------------------------------------------------------\n  0  46 Bra\n  2   4 Recurse\n  4   3 CBra 1\n  7   3 Ket\n  9  35 CBra 2\n 12  28 CBra 3\n 15  23 CBra 4\n 18  18 CBra 5\n 21  11 CBra 6\n 24   6 CBra 7\n 27     \\g{1}++\n 30   6 Ket\n 32  11 Ket\n 34     \\x{85}\n 36  18 KetRmax\n 38  23 Ket\n 40   2 Alt\n 42  30 Ket\n 44  35 Ket\n 46  46 Ket\n 48     End\n------------------------------------------------------------------\n\n# Check the absolute limit on nesting (?| etc. This varies with code unit\n# width because the workspace is a different number of bytes. It will fail\n# with link size 2 in 8-bit and 16-bit but not in 32-bit.\n\n/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|\n)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n/parens_nest_limit=1000,-fullbincode\n\n# Use \"expand\" to create some very long patterns with nested parentheses, in\n# order to test workspace overflow. Again, this varies with code unit width,\n# and even when it fails in two modes, the error offset differs. It also varies\n# with link size - hence multiple tests with different values.\n\n/(?'ABC'\\[[bar](]{792}*THEN:\\[A]{255}\\[)]{793}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{793}*THEN:\\[A]{255}\\[)]{794}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{1793}*THEN:\\[A]{255}\\[)]{1794}/expand,-fullbincode,parens_nest_limit=2000\nFailed: error 186 at offset 0: regular expression is too complicated\n\n/(?(1)(?1)){8,}+()/debug\n------------------------------------------------------------------\n  0  79 Bra\n  2  70 Once\n  4   6 Cond\n  6   1 Capture ref\n  8  74 Recurse\n 10   6 Ket\n 12   6 Cond\n 14   1 Capture ref\n 16  74 Recurse\n 18   6 Ket\n 20   6 Cond\n 22   1 Capture ref\n 24  74 Recurse\n 26   6 Ket\n 28   6 Cond\n 30   1 Capture ref\n 32  74 Recurse\n 34   6 Ket\n 36   6 Cond\n 38   1 Capture ref\n 40  74 Recurse\n 42   6 Ket\n 44   6 Cond\n 46   1 Capture ref\n 48  74 Recurse\n 50   6 Ket\n 52   6 Cond\n 54   1 Capture ref\n 56  74 Recurse\n 58   6 Ket\n 60  10 SBraPos\n 62   6 SCond\n 64   1 Capture ref\n 66  74 Recurse\n 68   6 Ket\n 70  10 KetRpos\n 72  70 Ket\n 74   3 CBra 1\n 77   3 Ket\n 79  79 Ket\n 81     End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nSubject length lower bound = 0\n    abcd\n 0: \n 1: \n\n/(?(1)|a(?1)b){2,}+()/debug\n------------------------------------------------------------------\n  0  43 Bra\n  2  34 Once\n  4   4 Cond\n  6   1 Capture ref\n  8   8 Alt\n 10     a\n 12  38 Recurse\n 14     b\n 16  12 Ket\n 18  16 SBraPos\n 20   4 SCond\n 22   1 Capture ref\n 24   8 Alt\n 26     a\n 28  38 Recurse\n 30     b\n 32  12 Ket\n 34  16 KetRpos\n 36  34 Ket\n 38   3 CBra 1\n 41   3 Ket\n 43  43 Ket\n 45     End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nSubject length lower bound = 0\n    abcde\nNo match\n\n/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug\n------------------------------------------------------------------\n  0 133 Bra\n  2  41 CBra 1\n  5   2 Recurse\n  7  88 Recurse\n  9  93 Recurse\n 11  98 Recurse\n 13 103 Recurse\n 15 108 Recurse\n 17 113 Recurse\n 19 118 Recurse\n 21 123 Recurse\n 23 123 Recurse\n 25 118 Recurse\n 27 113 Recurse\n 29 108 Recurse\n 31 103 Recurse\n 33  98 Recurse\n 35  93 Recurse\n 37  88 Recurse\n 39   2 Recurse\n 41   0 Recurse\n 43  41 Ket\n 45  41 SCBra 1\n 48   2 Recurse\n 50  88 Recurse\n 52  93 Recurse\n 54  98 Recurse\n 56 103 Recurse\n 58 108 Recurse\n 60 113 Recurse\n 62 118 Recurse\n 64 123 Recurse\n 66 123 Recurse\n 68 118 Recurse\n 70 113 Recurse\n 72 108 Recurse\n 74 103 Recurse\n 76  98 Recurse\n 78  93 Recurse\n 80  88 Recurse\n 82   2 Recurse\n 84   0 Recurse\n 86  41 KetRmax\n 88   3 CBra 2\n 91   3 Ket\n 93   3 CBra 3\n 96   3 Ket\n 98   3 CBra 4\n101   3 Ket\n103   3 CBra 5\n106   3 Ket\n108   3 CBra 6\n111   3 Ket\n113   3 CBra 7\n116   3 Ket\n118   3 CBra 8\n121   3 Ket\n123   3 CBra 9\n126   3 Ket\n128   3 CBra 10\n131   3 Ket\n133 133 Ket\n135     End\n------------------------------------------------------------------\nCapture group count = 10\nMay match empty string\nSubject length lower bound = 0\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/\nFailed: error 114 at offset 509: missing closing parenthesis\n        here: ...](*ACCEPT) |<--|\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode\n\n#pattern -fullbincode\n\n/\\[()]{65535}/expand\n\n# End of testinput8\n"
  },
  {
    "path": "testdata/testoutput8-8-2",
    "content": "# There are two sorts of patterns in this test. A number of them are\n# representative patterns whose lengths and offsets are checked. This is just a\n# doublecheck test to ensure the sizes don't go horribly wrong when something\n# is changed. The operation of these patterns is checked in other tests.\n#\n# This file also contains tests whose output varies with code unit size and/or\n# link size. Unicode support is required for these tests. There are separate\n# output files for each code unit size and link size.\n\n#pattern fullbincode,memory\n\n/((?i)b)/\nMemory allocation - code size : 17\n------------------------------------------------------------------\n  0  13 Bra\n  3   7 CBra 1\n  8  /i b\n 10   7 Ket\n 13  13 Ket\n 16     End\n------------------------------------------------------------------\n\n/(?s)(.*X|^B)/\nMemory allocation - code size : 25\n------------------------------------------------------------------\n  0  21 Bra\n  3   9 CBra 1\n  8     AllAny*\n 10     X\n 12   6 Alt\n 15     ^\n 16     B\n 18  15 Ket\n 21  21 Ket\n 24     End\n------------------------------------------------------------------\n\n/(?s:.*X|^B)/\nMemory allocation - code size : 23\n------------------------------------------------------------------\n  0  19 Bra\n  3   7 Bra\n  6     AllAny*\n  8     X\n 10   6 Alt\n 13     ^\n 14     B\n 16  13 Ket\n 19  19 Ket\n 22     End\n------------------------------------------------------------------\n\n/^[[:alnum:]]/\nMemory allocation - code size : 41\n------------------------------------------------------------------\n  0  37 Bra\n  3     ^\n  4     [0-9A-Za-z]\n 37  37 Ket\n 40     End\n------------------------------------------------------------------\n\n/#/Ix\nMemory allocation - code size : 7\n------------------------------------------------------------------\n  0   3 Bra\n  3   3 Ket\n  6     End\n------------------------------------------------------------------\nCapture group count = 0\nMay match empty string\nOptions: extended\nSubject length lower bound = 0\n\n/a#/Ix\nMemory allocation - code size : 9\n------------------------------------------------------------------\n  0   5 Bra\n  3     a\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: extended\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/x?+/\nMemory allocation - code size : 9\n------------------------------------------------------------------\n  0   5 Bra\n  3     x?+\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/x++/\nMemory allocation - code size : 9\n------------------------------------------------------------------\n  0   5 Bra\n  3     x++\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/x{1,3}+/\nMemory allocation - code size : 13\n------------------------------------------------------------------\n  0   9 Bra\n  3     x\n  5     x{0,2}+\n  9   9 Ket\n 12     End\n------------------------------------------------------------------\n\n/(x)*+/\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0  14 Bra\n  3     Braposzero\n  4   7 CBraPos 1\n  9     x\n 11   7 KetRpos\n 14  14 Ket\n 17     End\n------------------------------------------------------------------\n\n/^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))/\nMemory allocation - code size : 120\n------------------------------------------------------------------\n  0 116 Bra\n  3     ^\n  4 109 CBra 1\n  9   7 CBra 2\n 14     a+\n 16   7 Ket\n 19  39 CBra 3\n 24     [ab]+?\n 58  39 Ket\n 61  39 CBra 4\n 66     [bc]+\n100  39 Ket\n103   7 CBra 5\n108     \\w*+\n110   7 Ket\n113 109 Ket\n116 116 Ket\n119     End\n------------------------------------------------------------------\n\n\"8J\\$WE\\<\\.rX\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\nMemory allocation - code size : 826\n------------------------------------------------------------------\n  0 822 Bra\n  3     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n821     \\b\n822 822 Ket\n825     End\n------------------------------------------------------------------\n\n\"\\$\\<\\.X\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\nMemory allocation - code size : 816\n------------------------------------------------------------------\n  0 812 Bra\n  3     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n811     \\b\n812 812 Ket\n815     End\n------------------------------------------------------------------\n\n/(a(?1)b)/\nMemory allocation - code size : 22\n------------------------------------------------------------------\n  0  18 Bra\n  3  12 CBra 1\n  8     a\n 10   3 Recurse\n 13     b\n 15  12 Ket\n 18  18 Ket\n 21     End\n------------------------------------------------------------------\n\n/(a(?1)+b)/\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0  24 Bra\n  3  18 CBra 1\n  8     a\n 10   6 SBra\n 13   3 Recurse\n 16   6 KetRmax\n 19     b\n 21  18 Ket\n 24  24 Ket\n 27     End\n------------------------------------------------------------------\n\n/a(?P<name1>b|c)d(?P<longername2>e)/\nMemory allocation - code size : 36\nMemory allocation - data size : 28\n------------------------------------------------------------------\n  0  32 Bra\n  3     a\n  5   7 CBra 1\n 10     b\n 12   5 Alt\n 15     c\n 17  12 Ket\n 20     d\n 22   7 CBra 2\n 27     e\n 29   7 Ket\n 32  32 Ket\n 35     End\n------------------------------------------------------------------\n\n/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/\nMemory allocation - code size : 45\nMemory allocation - data size : 12\n------------------------------------------------------------------\n  0  41 Bra\n  3  25 Bra\n  6     a\n  8  17 CBra 1\n 13     c\n 15   7 CBra 2\n 20     d\n 22   7 Ket\n 25  17 Ket\n 28  25 Ket\n 31   7 CBra 3\n 36     a\n 38   7 Ket\n 41  41 Ket\n 44     End\n------------------------------------------------------------------\n\n/(?P<a>a)...(?P=a)bbb(?P>a)d/\nMemory allocation - code size : 34\nMemory allocation - data size : 4\n------------------------------------------------------------------\n  0  30 Bra\n  3   7 CBra 1\n  8     a\n 10   7 Ket\n 13     Any\n 14     Any\n 15     Any\n 16     \\g{1}\n 19     bbb\n 25   3 Recurse\n 28     d\n 30  30 Ket\n 33     End\n------------------------------------------------------------------\n\n/abc(?C255)de(?C)f/\nMemory allocation - code size : 31\n------------------------------------------------------------------\n  0  27 Bra\n  3     abc\n  9     Callout 255 10 1\n 15     de\n 19     Callout 0 16 1\n 25     f\n 27  27 Ket\n 30     End\n------------------------------------------------------------------\n\n/abcde/auto_callout\nMemory allocation - code size : 53\n------------------------------------------------------------------\n  0  49 Bra\n  3     Callout 255 0 1\n  9     a\n 11     Callout 255 1 1\n 17     b\n 19     Callout 255 2 1\n 25     c\n 27     Callout 255 3 1\n 33     d\n 35     Callout 255 4 1\n 41     e\n 43     Callout 255 5 0\n 49  49 Ket\n 52     End\n------------------------------------------------------------------\n\n/\\x{100}/utf\nMemory allocation - code size : 10\n------------------------------------------------------------------\n  0   6 Bra\n  3     \\x{100}\n  6   6 Ket\n  9     End\n------------------------------------------------------------------\n\n/\\x{1000}/utf\nMemory allocation - code size : 11\n------------------------------------------------------------------\n  0   7 Bra\n  3     \\x{1000}\n  7   7 Ket\n 10     End\n------------------------------------------------------------------\n\n/\\x{10000}/utf\nMemory allocation - code size : 12\n------------------------------------------------------------------\n  0   8 Bra\n  3     \\x{10000}\n  8   8 Ket\n 11     End\n------------------------------------------------------------------\n\n/\\x{100000}/utf\nMemory allocation - code size : 12\n------------------------------------------------------------------\n  0   8 Bra\n  3     \\x{100000}\n  8   8 Ket\n 11     End\n------------------------------------------------------------------\n\n/\\x{10ffff}/utf\nMemory allocation - code size : 12\n------------------------------------------------------------------\n  0   8 Bra\n  3     \\x{10ffff}\n  8   8 Ket\n 11     End\n------------------------------------------------------------------\n\n/\\x{110000}/utf\nFailed: error 134 at offset 9: character code point value in \\x{} or \\o{} is too large\n        here: \\x{110000 |<--| }\n\n/[\\x{ff}]/utf\nMemory allocation - code size : 10\n------------------------------------------------------------------\n  0   6 Bra\n  3     \\x{ff}\n  6   6 Ket\n  9     End\n------------------------------------------------------------------\n\n/[\\x{100}]/utf\nMemory allocation - code size : 10\n------------------------------------------------------------------\n  0   6 Bra\n  3     \\x{100}\n  6   6 Ket\n  9     End\n------------------------------------------------------------------\n\n/\\x80/utf\nMemory allocation - code size : 10\n------------------------------------------------------------------\n  0   6 Bra\n  3     \\x{80}\n  6   6 Ket\n  9     End\n------------------------------------------------------------------\n\n/\\xff/utf\nMemory allocation - code size : 10\n------------------------------------------------------------------\n  0   6 Bra\n  3     \\x{ff}\n  6   6 Ket\n  9     End\n------------------------------------------------------------------\n\n/\\x{0041}\\x{2262}\\x{0391}\\x{002e}/I,utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0  14 Bra\n  3     A\\x{2262}\\x{391}.\n 14  14 Ket\n 17     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = '.'\nSubject length lower bound = 4\n\n/\\x{D55c}\\x{ad6d}\\x{C5B4}/I,utf\nMemory allocation - code size : 19\n------------------------------------------------------------------\n  0  15 Bra\n  3     \\x{d55c}\\x{ad6d}\\x{c5b4}\n 15  15 Ket\n 18     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xed\nLast code unit = \\xb4\nSubject length lower bound = 3\n\n/\\x{65e5}\\x{672c}\\x{8a9e}/I,utf\nMemory allocation - code size : 19\n------------------------------------------------------------------\n  0  15 Bra\n  3     \\x{65e5}\\x{672c}\\x{8a9e}\n 15  15 Ket\n 18     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xe6\nLast code unit = \\x9e\nSubject length lower bound = 3\n\n/[\\x{100}]/utf\nMemory allocation - code size : 10\n------------------------------------------------------------------\n  0   6 Bra\n  3     \\x{100}\n  6   6 Ket\n  9     End\n------------------------------------------------------------------\n\n/[Z\\x{100}]/utf\nMemory allocation - code size : 47\n------------------------------------------------------------------\n  0  43 Bra\n  3     [Z\\x{100}]\n 43  43 Ket\n 46     End\n------------------------------------------------------------------\n\n/^[\\x{100}\\E-\\Q\\E\\x{150}]/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0  14 Bra\n  3     ^\n  4     [\\x{100}-\\x{150}]\n 14  14 Ket\n 17     End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E]/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0  14 Bra\n  3     ^\n  4     [\\x{100}-\\x{150}]\n 14  14 Ket\n 17     End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E/utf\nFailed: error 106 at offset 15: missing terminating ] for character class\n        here: ...QĀ\\E-\\QŐ\\E |<--|\n\n/[\\p{L}]/\nMemory allocation - code size : 15\n------------------------------------------------------------------\n  0  11 Bra\n  3     [\\p{L}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/[\\p{^L}]/\nMemory allocation - code size : 15\n------------------------------------------------------------------\n  0  11 Bra\n  3     [\\P{L}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/[\\P{L}]/\nMemory allocation - code size : 15\n------------------------------------------------------------------\n  0  11 Bra\n  3     [\\P{L}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/[\\P{^L}]/\nMemory allocation - code size : 15\n------------------------------------------------------------------\n  0  11 Bra\n  3     [\\p{L}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/[abc\\p{L}\\x{0660}]/utf\nMemory allocation - code size : 50\n------------------------------------------------------------------\n  0  46 Bra\n  3     [A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}\\x{660}]\n 46  46 Ket\n 49     End\n------------------------------------------------------------------\n\n/[\\p{Nd}]/utf\nMemory allocation - code size : 15\n------------------------------------------------------------------\n  0  11 Bra\n  3     [\\p{Nd}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/[\\p{Nd}+-]+/utf\nMemory allocation - code size : 48\n------------------------------------------------------------------\n  0  44 Bra\n  3     [+\\-0-9\\p{Nd}]++\n 44  44 Ket\n 47     End\n------------------------------------------------------------------\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/i,utf\nMemory allocation - code size : 25\n------------------------------------------------------------------\n  0  21 Bra\n  3  /i A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 21  21 Ket\n 24     End\n------------------------------------------------------------------\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/utf\nMemory allocation - code size : 25\n------------------------------------------------------------------\n  0  21 Bra\n  3     A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 21  21 Ket\n 24     End\n------------------------------------------------------------------\n\n/[\\x{105}-\\x{109}]/i,utf\nMemory allocation - code size : 17\n------------------------------------------------------------------\n  0  13 Bra\n  3     [\\x{104}-\\x{109}]\n 13  13 Ket\n 16     End\n------------------------------------------------------------------\n\n/( ( (?(1)0|) )*   )/x\nMemory allocation - code size : 38\n------------------------------------------------------------------\n  0  34 Bra\n  3  28 CBra 1\n  8     Brazero\n  9  19 SCBra 2\n 14   8 Cond\n 17   1 Capture ref\n 20     0\n 22   3 Alt\n 25  11 Ket\n 28  19 KetRmax\n 31  28 Ket\n 34  34 Ket\n 37     End\n------------------------------------------------------------------\n\n/(  (?(1)0|)*   )/x\nMemory allocation - code size : 30\n------------------------------------------------------------------\n  0  26 Bra\n  3  20 CBra 1\n  8     Brazero\n  9   8 SCond\n 12   1 Capture ref\n 15     0\n 17   3 Alt\n 20  11 KetRmax\n 23  20 Ket\n 26  26 Ket\n 29     End\n------------------------------------------------------------------\n\n/[a]/\nMemory allocation - code size : 9\n------------------------------------------------------------------\n  0   5 Bra\n  3     a\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[a]/utf\nMemory allocation - code size : 9\n------------------------------------------------------------------\n  0   5 Bra\n  3     a\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[\\xaa]/\nMemory allocation - code size : 9\n------------------------------------------------------------------\n  0   5 Bra\n  3     \\x{aa}\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[\\xaa]/utf\nMemory allocation - code size : 10\n------------------------------------------------------------------\n  0   6 Bra\n  3     \\x{aa}\n  6   6 Ket\n  9     End\n------------------------------------------------------------------\n\n/[^a]/\nMemory allocation - code size : 9\n------------------------------------------------------------------\n  0   5 Bra\n  3     [^a] (not)\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[^a]/utf\nMemory allocation - code size : 9\n------------------------------------------------------------------\n  0   5 Bra\n  3     [^a] (not)\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[^\\xaa]/\nMemory allocation - code size : 9\n------------------------------------------------------------------\n  0   5 Bra\n  3     [^\\x{aa}] (not)\n  5   5 Ket\n  8     End\n------------------------------------------------------------------\n\n/[^\\xaa]/utf\nMemory allocation - code size : 10\n------------------------------------------------------------------\n  0   6 Bra\n  3     [^\\x{aa}] (not)\n  6   6 Ket\n  9     End\n------------------------------------------------------------------\n\n#pattern -memory\n\n/[^\\d]/utf,ucp\n------------------------------------------------------------------\n  0  11 Bra\n  3     [^\\p{Nd}]\n 11  11 Ket\n 14     End\n------------------------------------------------------------------\n\n/[[:^alpha:][:^cntrl:]]+/utf,ucp\n------------------------------------------------------------------\n  0  15 Bra\n  3     [\\P{L}\\P{Cc}]++\n 15  15 Ket\n 18     End\n------------------------------------------------------------------\n\n/[[:^cntrl:][:^alpha:]]+/utf,ucp\n------------------------------------------------------------------\n  0  15 Bra\n  3     [\\P{Cc}\\P{L}]++\n 15  15 Ket\n 18     End\n------------------------------------------------------------------\n\n/[[:alpha:]]+/utf,ucp\n------------------------------------------------------------------\n  0  12 Bra\n  3     [\\p{L}]++\n 12  12 Ket\n 15     End\n------------------------------------------------------------------\n\n/[[:^alpha:]\\S]+/utf,ucp\n------------------------------------------------------------------\n  0  15 Bra\n  3     [\\P{L}\\P{Xsp}]++\n 15  15 Ket\n 18     End\n------------------------------------------------------------------\n\n/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/\n------------------------------------------------------------------\n  0  73 Bra\n  3     abc\n  9   7 CBra 1\n 14     d\n 16   5 Alt\n 19     e\n 21  12 Ket\n 24     *THEN\n 25     x\n 27  14 CBra 2\n 32     123\n 38     *THEN\n 39     4\n 41  29 Alt\n 44     567\n 50   7 CBra 3\n 55     b\n 57   5 Alt\n 60     q\n 62  12 Ket\n 65     *THEN\n 66     xx\n 70  43 Ket\n 73  73 Ket\n 76     End\n------------------------------------------------------------------\n\n/(((a\\2)|(a*)\\g<-1>))*a?/\n------------------------------------------------------------------\n  0  51 Bra\n  3     Brazero\n  4  42 SCBra 1\n  9  18 CBra 2\n 14  10 CBra 3\n 19     a\n 21     \\g{2}\n 24  10 Ket\n 27  16 Alt\n 30   7 CBra 4\n 35     a*\n 37   7 Ket\n 40  30 Recurse\n 43  34 Ket\n 46  42 KetRmax\n 49     a?+\n 51  51 Ket\n 54     End\n------------------------------------------------------------------\n\n/((?+1)(\\1))/\n------------------------------------------------------------------\n  0  25 Bra\n  3  19 CBra 1\n  8  11 Recurse\n 11   8 CBra 2\n 16     \\g{1}\n 19   8 Ket\n 22  19 Ket\n 25  25 Ket\n 28     End\n------------------------------------------------------------------\n\n\"(?1)(?#?'){2}(a)\"\n------------------------------------------------------------------\n  0  19 Bra\n  3   9 Recurse\n  6   9 Recurse\n  9   7 CBra 1\n 14     a\n 16   7 Ket\n 19  19 Ket\n 22     End\n------------------------------------------------------------------\n\n/.((?2)(?R)|\\1|$)()/\n------------------------------------------------------------------\n  0  36 Bra\n  3     Any\n  4  11 CBra 1\n  9  28 Recurse\n 12   0 Recurse\n 15   6 Alt\n 18     \\g{1}\n 21   4 Alt\n 24     $\n 25  21 Ket\n 28   5 CBra 2\n 33   5 Ket\n 36  36 Ket\n 39     End\n------------------------------------------------------------------\n\n/.((?3)(?R)()(?2)|\\1|$)()/\n------------------------------------------------------------------\n  0  47 Bra\n  3     Any\n  4  22 CBra 1\n  9  39 Recurse\n 12   0 Recurse\n 15   5 CBra 2\n 20   5 Ket\n 23  15 Recurse\n 26   6 Alt\n 29     \\g{1}\n 32   4 Alt\n 35     $\n 36  32 Ket\n 39   5 CBra 3\n 44   5 Ket\n 47  47 Ket\n 50     End\n------------------------------------------------------------------\n\n/(?1)()((((((\\1++))\\x85)+)|))/\n------------------------------------------------------------------\n  0  71 Bra\n  3   6 Recurse\n  6   5 CBra 1\n 11   5 Ket\n 14  54 CBra 2\n 19  43 CBra 3\n 24  35 CBra 4\n 29  27 CBra 5\n 34  17 CBra 6\n 39   9 CBra 7\n 44     \\g{1}++\n 48   9 Ket\n 51  17 Ket\n 54     \\x{85}\n 56  27 KetRmax\n 59  35 Ket\n 62   3 Alt\n 65  46 Ket\n 68  54 Ket\n 71  71 Ket\n 74     End\n------------------------------------------------------------------\n\n# Check the absolute limit on nesting (?| etc. This varies with code unit\n# width because the workspace is a different number of bytes. It will fail\n# with link size 2 in 8-bit and 16-bit but not in 32-bit.\n\n/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|\n)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n/parens_nest_limit=1000,-fullbincode\nFailed: error 184 at offset 1129: (?| and/or (?J: or (?x: parentheses are too deeply nested\n        here: ...?|(?|(?|(? |-->| |(?|(?|(?|...\n\n# Use \"expand\" to create some very long patterns with nested parentheses, in\n# order to test workspace overflow. Again, this varies with code unit width,\n# and even when it fails in two modes, the error offset differs. It also varies\n# with link size - hence multiple tests with different values.\n\n/(?'ABC'\\[[bar](]{792}*THEN:\\[A]{255}\\[)]{793}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{793}*THEN:\\[A]{255}\\[)]{794}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{1793}*THEN:\\[A]{255}\\[)]{1794}/expand,-fullbincode,parens_nest_limit=2000\nFailed: error 186 at offset 0: regular expression is too complicated\n\n/(?(1)(?1)){8,}+()/debug\n------------------------------------------------------------------\n  0 119 Bra\n  3 105 Once\n  6   9 Cond\n  9   1 Capture ref\n 12 111 Recurse\n 15   9 Ket\n 18   9 Cond\n 21   1 Capture ref\n 24 111 Recurse\n 27   9 Ket\n 30   9 Cond\n 33   1 Capture ref\n 36 111 Recurse\n 39   9 Ket\n 42   9 Cond\n 45   1 Capture ref\n 48 111 Recurse\n 51   9 Ket\n 54   9 Cond\n 57   1 Capture ref\n 60 111 Recurse\n 63   9 Ket\n 66   9 Cond\n 69   1 Capture ref\n 72 111 Recurse\n 75   9 Ket\n 78   9 Cond\n 81   1 Capture ref\n 84 111 Recurse\n 87   9 Ket\n 90  15 SBraPos\n 93   9 SCond\n 96   1 Capture ref\n 99 111 Recurse\n102   9 Ket\n105  15 KetRpos\n108 105 Ket\n111   5 CBra 1\n116   5 Ket\n119 119 Ket\n122     End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nSubject length lower bound = 0\n    abcd\n 0: \n 1: \n\n/(?(1)|a(?1)b){2,}+()/debug\n------------------------------------------------------------------\n  0  61 Bra\n  3  47 Once\n  6   6 Cond\n  9   1 Capture ref\n 12  10 Alt\n 15     a\n 17  53 Recurse\n 20     b\n 22  16 Ket\n 25  22 SBraPos\n 28   6 SCond\n 31   1 Capture ref\n 34  10 Alt\n 37     a\n 39  53 Recurse\n 42     b\n 44  16 Ket\n 47  22 KetRpos\n 50  47 Ket\n 53   5 CBra 1\n 58   5 Ket\n 61  61 Ket\n 64     End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nSubject length lower bound = 0\n    abcde\nNo match\n\n/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug\n------------------------------------------------------------------\n  0 205 Bra\n  3  62 CBra 1\n  8   3 Recurse\n 11 133 Recurse\n 14 141 Recurse\n 17 149 Recurse\n 20 157 Recurse\n 23 165 Recurse\n 26 173 Recurse\n 29 181 Recurse\n 32 189 Recurse\n 35 189 Recurse\n 38 181 Recurse\n 41 173 Recurse\n 44 165 Recurse\n 47 157 Recurse\n 50 149 Recurse\n 53 141 Recurse\n 56 133 Recurse\n 59   3 Recurse\n 62   0 Recurse\n 65  62 Ket\n 68  62 SCBra 1\n 73   3 Recurse\n 76 133 Recurse\n 79 141 Recurse\n 82 149 Recurse\n 85 157 Recurse\n 88 165 Recurse\n 91 173 Recurse\n 94 181 Recurse\n 97 189 Recurse\n100 189 Recurse\n103 181 Recurse\n106 173 Recurse\n109 165 Recurse\n112 157 Recurse\n115 149 Recurse\n118 141 Recurse\n121 133 Recurse\n124   3 Recurse\n127   0 Recurse\n130  62 KetRmax\n133   5 CBra 2\n138   5 Ket\n141   5 CBra 3\n146   5 Ket\n149   5 CBra 4\n154   5 Ket\n157   5 CBra 5\n162   5 Ket\n165   5 CBra 6\n170   5 Ket\n173   5 CBra 7\n178   5 Ket\n181   5 CBra 8\n186   5 Ket\n189   5 CBra 9\n194   5 Ket\n197   5 CBra 10\n202   5 Ket\n205 205 Ket\n208     End\n------------------------------------------------------------------\nCapture group count = 10\nMay match empty string\nSubject length lower bound = 0\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/\nFailed: error 114 at offset 509: missing closing parenthesis\n        here: ...](*ACCEPT) |<--|\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode\n\n#pattern -fullbincode\n\n/\\[()]{65535}/expand\nFailed: error 120 at offset 0: regular expression is too large\n\n# End of testinput8\n"
  },
  {
    "path": "testdata/testoutput8-8-3",
    "content": "# There are two sorts of patterns in this test. A number of them are\n# representative patterns whose lengths and offsets are checked. This is just a\n# doublecheck test to ensure the sizes don't go horribly wrong when something\n# is changed. The operation of these patterns is checked in other tests.\n#\n# This file also contains tests whose output varies with code unit size and/or\n# link size. Unicode support is required for these tests. There are separate\n# output files for each code unit size and link size.\n\n#pattern fullbincode,memory\n\n/((?i)b)/\nMemory allocation - code size : 21\n------------------------------------------------------------------\n  0  16 Bra\n  4   8 CBra 1\n 10  /i b\n 12   8 Ket\n 16  16 Ket\n 20     End\n------------------------------------------------------------------\n\n/(?s)(.*X|^B)/\nMemory allocation - code size : 30\n------------------------------------------------------------------\n  0  25 Bra\n  4  10 CBra 1\n 10     AllAny*\n 12     X\n 14   7 Alt\n 18     ^\n 19     B\n 21  17 Ket\n 25  25 Ket\n 29     End\n------------------------------------------------------------------\n\n/(?s:.*X|^B)/\nMemory allocation - code size : 28\n------------------------------------------------------------------\n  0  23 Bra\n  4   8 Bra\n  8     AllAny*\n 10     X\n 12   7 Alt\n 16     ^\n 17     B\n 19  15 Ket\n 23  23 Ket\n 27     End\n------------------------------------------------------------------\n\n/^[[:alnum:]]/\nMemory allocation - code size : 43\n------------------------------------------------------------------\n  0  38 Bra\n  4     ^\n  5     [0-9A-Za-z]\n 38  38 Ket\n 42     End\n------------------------------------------------------------------\n\n/#/Ix\nMemory allocation - code size : 9\n------------------------------------------------------------------\n  0   4 Bra\n  4   4 Ket\n  8     End\n------------------------------------------------------------------\nCapture group count = 0\nMay match empty string\nOptions: extended\nSubject length lower bound = 0\n\n/a#/Ix\nMemory allocation - code size : 11\n------------------------------------------------------------------\n  0   6 Bra\n  4     a\n  6   6 Ket\n 10     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: extended\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/x?+/\nMemory allocation - code size : 11\n------------------------------------------------------------------\n  0   6 Bra\n  4     x?+\n  6   6 Ket\n 10     End\n------------------------------------------------------------------\n\n/x++/\nMemory allocation - code size : 11\n------------------------------------------------------------------\n  0   6 Bra\n  4     x++\n  6   6 Ket\n 10     End\n------------------------------------------------------------------\n\n/x{1,3}+/\nMemory allocation - code size : 15\n------------------------------------------------------------------\n  0  10 Bra\n  4     x\n  6     x{0,2}+\n 10  10 Ket\n 14     End\n------------------------------------------------------------------\n\n/(x)*+/\nMemory allocation - code size : 22\n------------------------------------------------------------------\n  0  17 Bra\n  4     Braposzero\n  5   8 CBraPos 1\n 11     x\n 13   8 KetRpos\n 17  17 Ket\n 21     End\n------------------------------------------------------------------\n\n/^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))/\nMemory allocation - code size : 132\n------------------------------------------------------------------\n  0 127 Bra\n  4     ^\n  5 118 CBra 1\n 11   8 CBra 2\n 17     a+\n 19   8 Ket\n 23  40 CBra 3\n 29     [ab]+?\n 63  40 Ket\n 67  40 CBra 4\n 73     [bc]+\n107  40 Ket\n111   8 CBra 5\n117     \\w*+\n119   8 Ket\n123 118 Ket\n127 127 Ket\n131     End\n------------------------------------------------------------------\n\n\"8J\\$WE\\<\\.rX\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\nMemory allocation - code size : 828\n------------------------------------------------------------------\n  0 823 Bra\n  4     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n822     \\b\n823 823 Ket\n827     End\n------------------------------------------------------------------\n\n\"\\$\\<\\.X\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\nMemory allocation - code size : 818\n------------------------------------------------------------------\n  0 813 Bra\n  4     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n812     \\b\n813 813 Ket\n817     End\n------------------------------------------------------------------\n\n/(a(?1)b)/\nMemory allocation - code size : 27\n------------------------------------------------------------------\n  0  22 Bra\n  4  14 CBra 1\n 10     a\n 12   4 Recurse\n 16     b\n 18  14 Ket\n 22  22 Ket\n 26     End\n------------------------------------------------------------------\n\n/(a(?1)+b)/\nMemory allocation - code size : 35\n------------------------------------------------------------------\n  0  30 Bra\n  4  22 CBra 1\n 10     a\n 12   8 SBra\n 16   4 Recurse\n 20   8 KetRmax\n 24     b\n 26  22 Ket\n 30  30 Ket\n 34     End\n------------------------------------------------------------------\n\n/a(?P<name1>b|c)d(?P<longername2>e)/\nMemory allocation - code size : 43\nMemory allocation - data size : 28\n------------------------------------------------------------------\n  0  38 Bra\n  4     a\n  6   8 CBra 1\n 12     b\n 14   6 Alt\n 18     c\n 20  14 Ket\n 24     d\n 26   8 CBra 2\n 32     e\n 34   8 Ket\n 38  38 Ket\n 42     End\n------------------------------------------------------------------\n\n/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/\nMemory allocation - code size : 55\nMemory allocation - data size : 12\n------------------------------------------------------------------\n  0  50 Bra\n  4  30 Bra\n  8     a\n 10  20 CBra 1\n 16     c\n 18   8 CBra 2\n 24     d\n 26   8 Ket\n 30  20 Ket\n 34  30 Ket\n 38   8 CBra 3\n 44     a\n 46   8 Ket\n 50  50 Ket\n 54     End\n------------------------------------------------------------------\n\n/(?P<a>a)...(?P=a)bbb(?P>a)d/\nMemory allocation - code size : 39\nMemory allocation - data size : 4\n------------------------------------------------------------------\n  0  34 Bra\n  4   8 CBra 1\n 10     a\n 12   8 Ket\n 16     Any\n 17     Any\n 18     Any\n 19     \\g{1}\n 22     bbb\n 28   4 Recurse\n 32     d\n 34  34 Ket\n 38     End\n------------------------------------------------------------------\n\n/abc(?C255)de(?C)f/\nMemory allocation - code size : 37\n------------------------------------------------------------------\n  0  32 Bra\n  4     abc\n 10     Callout 255 10 1\n 18     de\n 22     Callout 0 16 1\n 30     f\n 32  32 Ket\n 36     End\n------------------------------------------------------------------\n\n/abcde/auto_callout\nMemory allocation - code size : 67\n------------------------------------------------------------------\n  0  62 Bra\n  4     Callout 255 0 1\n 12     a\n 14     Callout 255 1 1\n 22     b\n 24     Callout 255 2 1\n 32     c\n 34     Callout 255 3 1\n 42     d\n 44     Callout 255 4 1\n 52     e\n 54     Callout 255 5 0\n 62  62 Ket\n 66     End\n------------------------------------------------------------------\n\n/\\x{100}/utf\nMemory allocation - code size : 12\n------------------------------------------------------------------\n  0   7 Bra\n  4     \\x{100}\n  7   7 Ket\n 11     End\n------------------------------------------------------------------\n\n/\\x{1000}/utf\nMemory allocation - code size : 13\n------------------------------------------------------------------\n  0   8 Bra\n  4     \\x{1000}\n  8   8 Ket\n 12     End\n------------------------------------------------------------------\n\n/\\x{10000}/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   9 Bra\n  4     \\x{10000}\n  9   9 Ket\n 13     End\n------------------------------------------------------------------\n\n/\\x{100000}/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   9 Bra\n  4     \\x{100000}\n  9   9 Ket\n 13     End\n------------------------------------------------------------------\n\n/\\x{10ffff}/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   9 Bra\n  4     \\x{10ffff}\n  9   9 Ket\n 13     End\n------------------------------------------------------------------\n\n/\\x{110000}/utf\nFailed: error 134 at offset 9: character code point value in \\x{} or \\o{} is too large\n        here: \\x{110000 |<--| }\n\n/[\\x{ff}]/utf\nMemory allocation - code size : 12\n------------------------------------------------------------------\n  0   7 Bra\n  4     \\x{ff}\n  7   7 Ket\n 11     End\n------------------------------------------------------------------\n\n/[\\x{100}]/utf\nMemory allocation - code size : 12\n------------------------------------------------------------------\n  0   7 Bra\n  4     \\x{100}\n  7   7 Ket\n 11     End\n------------------------------------------------------------------\n\n/\\x80/utf\nMemory allocation - code size : 12\n------------------------------------------------------------------\n  0   7 Bra\n  4     \\x{80}\n  7   7 Ket\n 11     End\n------------------------------------------------------------------\n\n/\\xff/utf\nMemory allocation - code size : 12\n------------------------------------------------------------------\n  0   7 Bra\n  4     \\x{ff}\n  7   7 Ket\n 11     End\n------------------------------------------------------------------\n\n/\\x{0041}\\x{2262}\\x{0391}\\x{002e}/I,utf\nMemory allocation - code size : 20\n------------------------------------------------------------------\n  0  15 Bra\n  4     A\\x{2262}\\x{391}.\n 15  15 Ket\n 19     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = '.'\nSubject length lower bound = 4\n\n/\\x{D55c}\\x{ad6d}\\x{C5B4}/I,utf\nMemory allocation - code size : 21\n------------------------------------------------------------------\n  0  16 Bra\n  4     \\x{d55c}\\x{ad6d}\\x{c5b4}\n 16  16 Ket\n 20     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xed\nLast code unit = \\xb4\nSubject length lower bound = 3\n\n/\\x{65e5}\\x{672c}\\x{8a9e}/I,utf\nMemory allocation - code size : 21\n------------------------------------------------------------------\n  0  16 Bra\n  4     \\x{65e5}\\x{672c}\\x{8a9e}\n 16  16 Ket\n 20     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xe6\nLast code unit = \\x9e\nSubject length lower bound = 3\n\n/[\\x{100}]/utf\nMemory allocation - code size : 12\n------------------------------------------------------------------\n  0   7 Bra\n  4     \\x{100}\n  7   7 Ket\n 11     End\n------------------------------------------------------------------\n\n/[Z\\x{100}]/utf\nMemory allocation - code size : 50\n------------------------------------------------------------------\n  0  45 Bra\n  4     [Z\\x{100}]\n 45  45 Ket\n 49     End\n------------------------------------------------------------------\n\n/^[\\x{100}\\E-\\Q\\E\\x{150}]/utf\nMemory allocation - code size : 21\n------------------------------------------------------------------\n  0  16 Bra\n  4     ^\n  5     [\\x{100}-\\x{150}]\n 16  16 Ket\n 20     End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E]/utf\nMemory allocation - code size : 21\n------------------------------------------------------------------\n  0  16 Bra\n  4     ^\n  5     [\\x{100}-\\x{150}]\n 16  16 Ket\n 20     End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E/utf\nFailed: error 106 at offset 15: missing terminating ] for character class\n        here: ...QĀ\\E-\\QŐ\\E |<--|\n\n/[\\p{L}]/\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0  13 Bra\n  4     [\\p{L}]\n 13  13 Ket\n 17     End\n------------------------------------------------------------------\n\n/[\\p{^L}]/\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0  13 Bra\n  4     [\\P{L}]\n 13  13 Ket\n 17     End\n------------------------------------------------------------------\n\n/[\\P{L}]/\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0  13 Bra\n  4     [\\P{L}]\n 13  13 Ket\n 17     End\n------------------------------------------------------------------\n\n/[\\P{^L}]/\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0  13 Bra\n  4     [\\p{L}]\n 13  13 Ket\n 17     End\n------------------------------------------------------------------\n\n/[abc\\p{L}\\x{0660}]/utf\nMemory allocation - code size : 53\n------------------------------------------------------------------\n  0  48 Bra\n  4     [A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}\\x{660}]\n 48  48 Ket\n 52     End\n------------------------------------------------------------------\n\n/[\\p{Nd}]/utf\nMemory allocation - code size : 18\n------------------------------------------------------------------\n  0  13 Bra\n  4     [\\p{Nd}]\n 13  13 Ket\n 17     End\n------------------------------------------------------------------\n\n/[\\p{Nd}+-]+/utf\nMemory allocation - code size : 51\n------------------------------------------------------------------\n  0  46 Bra\n  4     [+\\-0-9\\p{Nd}]++\n 46  46 Ket\n 50     End\n------------------------------------------------------------------\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/i,utf\nMemory allocation - code size : 27\n------------------------------------------------------------------\n  0  22 Bra\n  4  /i A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 22  22 Ket\n 26     End\n------------------------------------------------------------------\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/utf\nMemory allocation - code size : 27\n------------------------------------------------------------------\n  0  22 Bra\n  4     A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 22  22 Ket\n 26     End\n------------------------------------------------------------------\n\n/[\\x{105}-\\x{109}]/i,utf\nMemory allocation - code size : 20\n------------------------------------------------------------------\n  0  15 Bra\n  4     [\\x{104}-\\x{109}]\n 15  15 Ket\n 19     End\n------------------------------------------------------------------\n\n/( ( (?(1)0|) )*   )/x\nMemory allocation - code size : 47\n------------------------------------------------------------------\n  0  42 Bra\n  4  34 CBra 1\n 10     Brazero\n 11  23 SCBra 2\n 17   9 Cond\n 21   1 Capture ref\n 24     0\n 26   4 Alt\n 30  13 Ket\n 34  23 KetRmax\n 38  34 Ket\n 42  42 Ket\n 46     End\n------------------------------------------------------------------\n\n/(  (?(1)0|)*   )/x\nMemory allocation - code size : 37\n------------------------------------------------------------------\n  0  32 Bra\n  4  24 CBra 1\n 10     Brazero\n 11   9 SCond\n 15   1 Capture ref\n 18     0\n 20   4 Alt\n 24  13 KetRmax\n 28  24 Ket\n 32  32 Ket\n 36     End\n------------------------------------------------------------------\n\n/[a]/\nMemory allocation - code size : 11\n------------------------------------------------------------------\n  0   6 Bra\n  4     a\n  6   6 Ket\n 10     End\n------------------------------------------------------------------\n\n/[a]/utf\nMemory allocation - code size : 11\n------------------------------------------------------------------\n  0   6 Bra\n  4     a\n  6   6 Ket\n 10     End\n------------------------------------------------------------------\n\n/[\\xaa]/\nMemory allocation - code size : 11\n------------------------------------------------------------------\n  0   6 Bra\n  4     \\x{aa}\n  6   6 Ket\n 10     End\n------------------------------------------------------------------\n\n/[\\xaa]/utf\nMemory allocation - code size : 12\n------------------------------------------------------------------\n  0   7 Bra\n  4     \\x{aa}\n  7   7 Ket\n 11     End\n------------------------------------------------------------------\n\n/[^a]/\nMemory allocation - code size : 11\n------------------------------------------------------------------\n  0   6 Bra\n  4     [^a] (not)\n  6   6 Ket\n 10     End\n------------------------------------------------------------------\n\n/[^a]/utf\nMemory allocation - code size : 11\n------------------------------------------------------------------\n  0   6 Bra\n  4     [^a] (not)\n  6   6 Ket\n 10     End\n------------------------------------------------------------------\n\n/[^\\xaa]/\nMemory allocation - code size : 11\n------------------------------------------------------------------\n  0   6 Bra\n  4     [^\\x{aa}] (not)\n  6   6 Ket\n 10     End\n------------------------------------------------------------------\n\n/[^\\xaa]/utf\nMemory allocation - code size : 12\n------------------------------------------------------------------\n  0   7 Bra\n  4     [^\\x{aa}] (not)\n  7   7 Ket\n 11     End\n------------------------------------------------------------------\n\n#pattern -memory\n\n/[^\\d]/utf,ucp\n------------------------------------------------------------------\n  0  13 Bra\n  4     [^\\p{Nd}]\n 13  13 Ket\n 17     End\n------------------------------------------------------------------\n\n/[[:^alpha:][:^cntrl:]]+/utf,ucp\n------------------------------------------------------------------\n  0  17 Bra\n  4     [\\P{L}\\P{Cc}]++\n 17  17 Ket\n 21     End\n------------------------------------------------------------------\n\n/[[:^cntrl:][:^alpha:]]+/utf,ucp\n------------------------------------------------------------------\n  0  17 Bra\n  4     [\\P{Cc}\\P{L}]++\n 17  17 Ket\n 21     End\n------------------------------------------------------------------\n\n/[[:alpha:]]+/utf,ucp\n------------------------------------------------------------------\n  0  14 Bra\n  4     [\\p{L}]++\n 14  14 Ket\n 18     End\n------------------------------------------------------------------\n\n/[[:^alpha:]\\S]+/utf,ucp\n------------------------------------------------------------------\n  0  17 Bra\n  4     [\\P{L}\\P{Xsp}]++\n 17  17 Ket\n 21     End\n------------------------------------------------------------------\n\n/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/\n------------------------------------------------------------------\n  0  83 Bra\n  4     abc\n 10   8 CBra 1\n 16     d\n 18   6 Alt\n 22     e\n 24  14 Ket\n 28     *THEN\n 29     x\n 31  15 CBra 2\n 37     123\n 43     *THEN\n 44     4\n 46  33 Alt\n 50     567\n 56   8 CBra 3\n 62     b\n 64   6 Alt\n 68     q\n 70  14 Ket\n 74     *THEN\n 75     xx\n 79  48 Ket\n 83  83 Ket\n 87     End\n------------------------------------------------------------------\n\n/(((a\\2)|(a*)\\g<-1>))*a?/\n------------------------------------------------------------------\n  0  62 Bra\n  4     Brazero\n  5  51 SCBra 1\n 11  21 CBra 2\n 17  11 CBra 3\n 23     a\n 25     \\g{2}\n 28  11 Ket\n 32  20 Alt\n 36   8 CBra 4\n 42     a*\n 44   8 Ket\n 48  36 Recurse\n 52  41 Ket\n 56  51 KetRmax\n 60     a?+\n 62  62 Ket\n 66     End\n------------------------------------------------------------------\n\n/((?+1)(\\1))/\n------------------------------------------------------------------\n  0  31 Bra\n  4  23 CBra 1\n 10  14 Recurse\n 14   9 CBra 2\n 20     \\g{1}\n 23   9 Ket\n 27  23 Ket\n 31  31 Ket\n 35     End\n------------------------------------------------------------------\n\n\"(?1)(?#?'){2}(a)\"\n------------------------------------------------------------------\n  0  24 Bra\n  4  12 Recurse\n  8  12 Recurse\n 12   8 CBra 1\n 18     a\n 20   8 Ket\n 24  24 Ket\n 28     End\n------------------------------------------------------------------\n\n/.((?2)(?R)|\\1|$)()/\n------------------------------------------------------------------\n  0  45 Bra\n  4     Any\n  5  14 CBra 1\n 11  35 Recurse\n 15   0 Recurse\n 19   7 Alt\n 23     \\g{1}\n 26   5 Alt\n 30     $\n 31  26 Ket\n 35   6 CBra 2\n 41   6 Ket\n 45  45 Ket\n 49     End\n------------------------------------------------------------------\n\n/.((?3)(?R)()(?2)|\\1|$)()/\n------------------------------------------------------------------\n  0  59 Bra\n  4     Any\n  5  28 CBra 1\n 11  49 Recurse\n 15   0 Recurse\n 19   6 CBra 2\n 25   6 Ket\n 29  19 Recurse\n 33   7 Alt\n 37     \\g{1}\n 40   5 Alt\n 44     $\n 45  40 Ket\n 49   6 CBra 3\n 55   6 Ket\n 59  59 Ket\n 63     End\n------------------------------------------------------------------\n\n/(?1)()((((((\\1++))\\x85)+)|))/\n------------------------------------------------------------------\n  0  88 Bra\n  4   8 Recurse\n  8   6 CBra 1\n 14   6 Ket\n 18  66 CBra 2\n 24  52 CBra 3\n 30  42 CBra 4\n 36  32 CBra 5\n 42  20 CBra 6\n 48  10 CBra 7\n 54     \\g{1}++\n 58  10 Ket\n 62  20 Ket\n 66     \\x{85}\n 68  32 KetRmax\n 72  42 Ket\n 76   4 Alt\n 80  56 Ket\n 84  66 Ket\n 88  88 Ket\n 92     End\n------------------------------------------------------------------\n\n# Check the absolute limit on nesting (?| etc. This varies with code unit\n# width because the workspace is a different number of bytes. It will fail\n# with link size 2 in 8-bit and 16-bit but not in 32-bit.\n\n/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|\n)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n/parens_nest_limit=1000,-fullbincode\n\n# Use \"expand\" to create some very long patterns with nested parentheses, in\n# order to test workspace overflow. Again, this varies with code unit width,\n# and even when it fails in two modes, the error offset differs. It also varies\n# with link size - hence multiple tests with different values.\n\n/(?'ABC'\\[[bar](]{792}*THEN:\\[A]{255}\\[)]{793}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{793}*THEN:\\[A]{255}\\[)]{794}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{1793}*THEN:\\[A]{255}\\[)]{1794}/expand,-fullbincode,parens_nest_limit=2000\nFailed: error 186 at offset 0: regular expression is too complicated\n\n/(?(1)(?1)){8,}+()/debug\n------------------------------------------------------------------\n  0 150 Bra\n  4 132 Once\n  8  11 Cond\n 12   1 Capture ref\n 15 140 Recurse\n 19  11 Ket\n 23  11 Cond\n 27   1 Capture ref\n 30 140 Recurse\n 34  11 Ket\n 38  11 Cond\n 42   1 Capture ref\n 45 140 Recurse\n 49  11 Ket\n 53  11 Cond\n 57   1 Capture ref\n 60 140 Recurse\n 64  11 Ket\n 68  11 Cond\n 72   1 Capture ref\n 75 140 Recurse\n 79  11 Ket\n 83  11 Cond\n 87   1 Capture ref\n 90 140 Recurse\n 94  11 Ket\n 98  11 Cond\n102   1 Capture ref\n105 140 Recurse\n109  11 Ket\n113  19 SBraPos\n117  11 SCond\n121   1 Capture ref\n124 140 Recurse\n128  11 Ket\n132  19 KetRpos\n136 132 Ket\n140   6 CBra 1\n146   6 Ket\n150 150 Ket\n154     End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nSubject length lower bound = 0\n    abcd\n 0: \n 1: \n\n/(?(1)|a(?1)b){2,}+()/debug\n------------------------------------------------------------------\n  0  76 Bra\n  4  58 Once\n  8   7 Cond\n 12   1 Capture ref\n 15  12 Alt\n 19     a\n 21  66 Recurse\n 25     b\n 27  19 Ket\n 31  27 SBraPos\n 35   7 SCond\n 39   1 Capture ref\n 42  12 Alt\n 46     a\n 48  66 Recurse\n 52     b\n 54  19 Ket\n 58  27 KetRpos\n 62  58 Ket\n 66   6 CBra 1\n 72   6 Ket\n 76  76 Ket\n 80     End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nSubject length lower bound = 0\n    abcde\nNo match\n\n/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug\n------------------------------------------------------------------\n  0 266 Bra\n  4  82 CBra 1\n 10   4 Recurse\n 14 176 Recurse\n 18 186 Recurse\n 22 196 Recurse\n 26 206 Recurse\n 30 216 Recurse\n 34 226 Recurse\n 38 236 Recurse\n 42 246 Recurse\n 46 246 Recurse\n 50 236 Recurse\n 54 226 Recurse\n 58 216 Recurse\n 62 206 Recurse\n 66 196 Recurse\n 70 186 Recurse\n 74 176 Recurse\n 78   4 Recurse\n 82   0 Recurse\n 86  82 Ket\n 90  82 SCBra 1\n 96   4 Recurse\n100 176 Recurse\n104 186 Recurse\n108 196 Recurse\n112 206 Recurse\n116 216 Recurse\n120 226 Recurse\n124 236 Recurse\n128 246 Recurse\n132 246 Recurse\n136 236 Recurse\n140 226 Recurse\n144 216 Recurse\n148 206 Recurse\n152 196 Recurse\n156 186 Recurse\n160 176 Recurse\n164   4 Recurse\n168   0 Recurse\n172  82 KetRmax\n176   6 CBra 2\n182   6 Ket\n186   6 CBra 3\n192   6 Ket\n196   6 CBra 4\n202   6 Ket\n206   6 CBra 5\n212   6 Ket\n216   6 CBra 6\n222   6 Ket\n226   6 CBra 7\n232   6 Ket\n236   6 CBra 8\n242   6 Ket\n246   6 CBra 9\n252   6 Ket\n256   6 CBra 10\n262   6 Ket\n266 266 Ket\n270     End\n------------------------------------------------------------------\nCapture group count = 10\nMay match empty string\nSubject length lower bound = 0\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/\nFailed: error 114 at offset 509: missing closing parenthesis\n        here: ...](*ACCEPT) |<--|\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode\n\n#pattern -fullbincode\n\n/\\[()]{65535}/expand\n\n# End of testinput8\n"
  },
  {
    "path": "testdata/testoutput8-8-4",
    "content": "# There are two sorts of patterns in this test. A number of them are\n# representative patterns whose lengths and offsets are checked. This is just a\n# doublecheck test to ensure the sizes don't go horribly wrong when something\n# is changed. The operation of these patterns is checked in other tests.\n#\n# This file also contains tests whose output varies with code unit size and/or\n# link size. Unicode support is required for these tests. There are separate\n# output files for each code unit size and link size.\n\n#pattern fullbincode,memory\n\n/((?i)b)/\nMemory allocation - code size : 25\n------------------------------------------------------------------\n  0  19 Bra\n  5   9 CBra 1\n 12  /i b\n 14   9 Ket\n 19  19 Ket\n 24     End\n------------------------------------------------------------------\n\n/(?s)(.*X|^B)/\nMemory allocation - code size : 35\n------------------------------------------------------------------\n  0  29 Bra\n  5  11 CBra 1\n 12     AllAny*\n 14     X\n 16   8 Alt\n 21     ^\n 22     B\n 24  19 Ket\n 29  29 Ket\n 34     End\n------------------------------------------------------------------\n\n/(?s:.*X|^B)/\nMemory allocation - code size : 33\n------------------------------------------------------------------\n  0  27 Bra\n  5   9 Bra\n 10     AllAny*\n 12     X\n 14   8 Alt\n 19     ^\n 20     B\n 22  17 Ket\n 27  27 Ket\n 32     End\n------------------------------------------------------------------\n\n/^[[:alnum:]]/\nMemory allocation - code size : 45\n------------------------------------------------------------------\n  0  39 Bra\n  5     ^\n  6     [0-9A-Za-z]\n 39  39 Ket\n 44     End\n------------------------------------------------------------------\n\n/#/Ix\nMemory allocation - code size : 11\n------------------------------------------------------------------\n  0   5 Bra\n  5   5 Ket\n 10     End\n------------------------------------------------------------------\nCapture group count = 0\nMay match empty string\nOptions: extended\nSubject length lower bound = 0\n\n/a#/Ix\nMemory allocation - code size : 13\n------------------------------------------------------------------\n  0   7 Bra\n  5     a\n  7   7 Ket\n 12     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: extended\nFirst code unit = 'a'\nSubject length lower bound = 1\n\n/x?+/\nMemory allocation - code size : 13\n------------------------------------------------------------------\n  0   7 Bra\n  5     x?+\n  7   7 Ket\n 12     End\n------------------------------------------------------------------\n\n/x++/\nMemory allocation - code size : 13\n------------------------------------------------------------------\n  0   7 Bra\n  5     x++\n  7   7 Ket\n 12     End\n------------------------------------------------------------------\n\n/x{1,3}+/\nMemory allocation - code size : 17\n------------------------------------------------------------------\n  0  11 Bra\n  5     x\n  7     x{0,2}+\n 11  11 Ket\n 16     End\n------------------------------------------------------------------\n\n/(x)*+/\nMemory allocation - code size : 26\n------------------------------------------------------------------\n  0  20 Bra\n  5     Braposzero\n  6   9 CBraPos 1\n 13     x\n 15   9 KetRpos\n 20  20 Ket\n 25     End\n------------------------------------------------------------------\n\n/^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))/\nMemory allocation - code size : 144\n------------------------------------------------------------------\n  0 138 Bra\n  5     ^\n  6 127 CBra 1\n 13   9 CBra 2\n 20     a+\n 22   9 Ket\n 27  41 CBra 3\n 34     [ab]+?\n 68  41 Ket\n 73  41 CBra 4\n 80     [bc]+\n114  41 Ket\n119   9 CBra 5\n126     \\w*+\n128   9 Ket\n133 127 Ket\n138 138 Ket\n143     End\n------------------------------------------------------------------\n\n\"8J\\$WE\\<\\.rX\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\nMemory allocation - code size : 830\n------------------------------------------------------------------\n  0 824 Bra\n  5     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n823     \\b\n824 824 Ket\n829     End\n------------------------------------------------------------------\n\n\"\\$\\<\\.X\\+ix\\[d1b\\!H\\#\\?vV0vrK\\:ZH1\\=2M\\>iV\\;\\?aPhFB\\<\\*vW\\@QW\\@sO9\\}cfZA\\-i\\'w\\%hKd6gt1UJP\\,15_\\#QY\\$M\\^Mss_U\\/\\]\\&LK9\\[5vQub\\^w\\[KDD\\<EjmhUZ\\?\\.akp2dF\\>qmj\\;2\\}YWFdYx\\.Ap\\]hjCPTP\\(n28k\\+3\\;o\\&WXqs\\/gOXdr\\$\\:r\\'do0\\;b4c\\(f_Gr\\=\\\"\\\\4\\)\\[01T7ajQJvL\\$W\\~mL_sS\\/4h\\:x\\*\\[ZN\\=KLs\\&L5zX\\/\\/\\>it\\,o\\:aU\\(\\;Z\\>pW\\&T7oP\\'2K\\^E\\:x9\\'c\\[\\%z\\-\\,64JQ5AeH_G\\#KijUKghQw\\^\\\\vea3a\\?kka_G\\$8\\#\\`\\*kynsxzBLru\\'\\]k_\\[7FrVx\\}\\^\\=\\$blx\\>s\\-N\\%j\\;D\\*aZDnsw\\:YKZ\\%Q\\.Kne9\\#hP\\?\\+b3\\(SOvL\\,\\^\\;\\&u5\\@\\?5C5Bhb\\=m\\-vEh_L15Jl\\]U\\)0RP6\\{q\\%L\\^_z5E\\'Dw6X\\b\"\nMemory allocation - code size : 820\n------------------------------------------------------------------\n  0 814 Bra\n  5     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$M^Mss_U/]&LK9[5vQub^w[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr=\"\\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2K^E:x9'c[%z-,64JQ5AeH_G#KijUKghQw^\\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}^=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,^;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L^_z5E'Dw6X\n813     \\b\n814 814 Ket\n819     End\n------------------------------------------------------------------\n\n/(a(?1)b)/\nMemory allocation - code size : 32\n------------------------------------------------------------------\n  0  26 Bra\n  5  16 CBra 1\n 12     a\n 14   5 Recurse\n 19     b\n 21  16 Ket\n 26  26 Ket\n 31     End\n------------------------------------------------------------------\n\n/(a(?1)+b)/\nMemory allocation - code size : 42\n------------------------------------------------------------------\n  0  36 Bra\n  5  26 CBra 1\n 12     a\n 14  10 SBra\n 19   5 Recurse\n 24  10 KetRmax\n 29     b\n 31  26 Ket\n 36  36 Ket\n 41     End\n------------------------------------------------------------------\n\n/a(?P<name1>b|c)d(?P<longername2>e)/\nMemory allocation - code size : 50\nMemory allocation - data size : 28\n------------------------------------------------------------------\n  0  44 Bra\n  5     a\n  7   9 CBra 1\n 14     b\n 16   7 Alt\n 21     c\n 23  16 Ket\n 28     d\n 30   9 CBra 2\n 37     e\n 39   9 Ket\n 44  44 Ket\n 49     End\n------------------------------------------------------------------\n\n/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/\nMemory allocation - code size : 65\nMemory allocation - data size : 12\n------------------------------------------------------------------\n  0  59 Bra\n  5  35 Bra\n 10     a\n 12  23 CBra 1\n 19     c\n 21   9 CBra 2\n 28     d\n 30   9 Ket\n 35  23 Ket\n 40  35 Ket\n 45   9 CBra 3\n 52     a\n 54   9 Ket\n 59  59 Ket\n 64     End\n------------------------------------------------------------------\n\n/(?P<a>a)...(?P=a)bbb(?P>a)d/\nMemory allocation - code size : 44\nMemory allocation - data size : 4\n------------------------------------------------------------------\n  0  38 Bra\n  5   9 CBra 1\n 12     a\n 14   9 Ket\n 19     Any\n 20     Any\n 21     Any\n 22     \\g{1}\n 25     bbb\n 31   5 Recurse\n 36     d\n 38  38 Ket\n 43     End\n------------------------------------------------------------------\n\n/abc(?C255)de(?C)f/\nMemory allocation - code size : 43\n------------------------------------------------------------------\n  0  37 Bra\n  5     abc\n 11     Callout 255 10 1\n 21     de\n 25     Callout 0 16 1\n 35     f\n 37  37 Ket\n 42     End\n------------------------------------------------------------------\n\n/abcde/auto_callout\nMemory allocation - code size : 81\n------------------------------------------------------------------\n  0  75 Bra\n  5     Callout 255 0 1\n 15     a\n 17     Callout 255 1 1\n 27     b\n 29     Callout 255 2 1\n 39     c\n 41     Callout 255 3 1\n 51     d\n 53     Callout 255 4 1\n 63     e\n 65     Callout 255 5 0\n 75  75 Ket\n 80     End\n------------------------------------------------------------------\n\n/\\x{100}/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   8 Bra\n  5     \\x{100}\n  8   8 Ket\n 13     End\n------------------------------------------------------------------\n\n/\\x{1000}/utf\nMemory allocation - code size : 15\n------------------------------------------------------------------\n  0   9 Bra\n  5     \\x{1000}\n  9   9 Ket\n 14     End\n------------------------------------------------------------------\n\n/\\x{10000}/utf\nMemory allocation - code size : 16\n------------------------------------------------------------------\n  0  10 Bra\n  5     \\x{10000}\n 10  10 Ket\n 15     End\n------------------------------------------------------------------\n\n/\\x{100000}/utf\nMemory allocation - code size : 16\n------------------------------------------------------------------\n  0  10 Bra\n  5     \\x{100000}\n 10  10 Ket\n 15     End\n------------------------------------------------------------------\n\n/\\x{10ffff}/utf\nMemory allocation - code size : 16\n------------------------------------------------------------------\n  0  10 Bra\n  5     \\x{10ffff}\n 10  10 Ket\n 15     End\n------------------------------------------------------------------\n\n/\\x{110000}/utf\nFailed: error 134 at offset 9: character code point value in \\x{} or \\o{} is too large\n        here: \\x{110000 |<--| }\n\n/[\\x{ff}]/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   8 Bra\n  5     \\x{ff}\n  8   8 Ket\n 13     End\n------------------------------------------------------------------\n\n/[\\x{100}]/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   8 Bra\n  5     \\x{100}\n  8   8 Ket\n 13     End\n------------------------------------------------------------------\n\n/\\x80/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   8 Bra\n  5     \\x{80}\n  8   8 Ket\n 13     End\n------------------------------------------------------------------\n\n/\\xff/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   8 Bra\n  5     \\x{ff}\n  8   8 Ket\n 13     End\n------------------------------------------------------------------\n\n/\\x{0041}\\x{2262}\\x{0391}\\x{002e}/I,utf\nMemory allocation - code size : 22\n------------------------------------------------------------------\n  0  16 Bra\n  5     A\\x{2262}\\x{391}.\n 16  16 Ket\n 21     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = 'A'\nLast code unit = '.'\nSubject length lower bound = 4\n\n/\\x{D55c}\\x{ad6d}\\x{C5B4}/I,utf\nMemory allocation - code size : 23\n------------------------------------------------------------------\n  0  17 Bra\n  5     \\x{d55c}\\x{ad6d}\\x{c5b4}\n 17  17 Ket\n 22     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xed\nLast code unit = \\xb4\nSubject length lower bound = 3\n\n/\\x{65e5}\\x{672c}\\x{8a9e}/I,utf\nMemory allocation - code size : 23\n------------------------------------------------------------------\n  0  17 Bra\n  5     \\x{65e5}\\x{672c}\\x{8a9e}\n 17  17 Ket\n 22     End\n------------------------------------------------------------------\nCapture group count = 0\nOptions: utf\nFirst code unit = \\xe6\nLast code unit = \\x9e\nSubject length lower bound = 3\n\n/[\\x{100}]/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   8 Bra\n  5     \\x{100}\n  8   8 Ket\n 13     End\n------------------------------------------------------------------\n\n/[Z\\x{100}]/utf\nMemory allocation - code size : 53\n------------------------------------------------------------------\n  0  47 Bra\n  5     [Z\\x{100}]\n 47  47 Ket\n 52     End\n------------------------------------------------------------------\n\n/^[\\x{100}\\E-\\Q\\E\\x{150}]/utf\nMemory allocation - code size : 24\n------------------------------------------------------------------\n  0  18 Bra\n  5     ^\n  6     [\\x{100}-\\x{150}]\n 18  18 Ket\n 23     End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E]/utf\nMemory allocation - code size : 24\n------------------------------------------------------------------\n  0  18 Bra\n  5     ^\n  6     [\\x{100}-\\x{150}]\n 18  18 Ket\n 23     End\n------------------------------------------------------------------\n\n/^[\\QĀ\\E-\\QŐ\\E/utf\nFailed: error 106 at offset 15: missing terminating ] for character class\n        here: ...QĀ\\E-\\QŐ\\E |<--|\n\n/[\\p{L}]/\nMemory allocation - code size : 21\n------------------------------------------------------------------\n  0  15 Bra\n  5     [\\p{L}]\n 15  15 Ket\n 20     End\n------------------------------------------------------------------\n\n/[\\p{^L}]/\nMemory allocation - code size : 21\n------------------------------------------------------------------\n  0  15 Bra\n  5     [\\P{L}]\n 15  15 Ket\n 20     End\n------------------------------------------------------------------\n\n/[\\P{L}]/\nMemory allocation - code size : 21\n------------------------------------------------------------------\n  0  15 Bra\n  5     [\\P{L}]\n 15  15 Ket\n 20     End\n------------------------------------------------------------------\n\n/[\\P{^L}]/\nMemory allocation - code size : 21\n------------------------------------------------------------------\n  0  15 Bra\n  5     [\\p{L}]\n 15  15 Ket\n 20     End\n------------------------------------------------------------------\n\n/[abc\\p{L}\\x{0660}]/utf\nMemory allocation - code size : 56\n------------------------------------------------------------------\n  0  50 Bra\n  5     [A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\p{L}\\x{660}]\n 50  50 Ket\n 55     End\n------------------------------------------------------------------\n\n/[\\p{Nd}]/utf\nMemory allocation - code size : 21\n------------------------------------------------------------------\n  0  15 Bra\n  5     [\\p{Nd}]\n 15  15 Ket\n 20     End\n------------------------------------------------------------------\n\n/[\\p{Nd}+-]+/utf\nMemory allocation - code size : 54\n------------------------------------------------------------------\n  0  48 Bra\n  5     [+\\-0-9\\p{Nd}]++\n 48  48 Ket\n 53     End\n------------------------------------------------------------------\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/i,utf\nMemory allocation - code size : 29\n------------------------------------------------------------------\n  0  23 Bra\n  5  /i A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 23  23 Ket\n 28     End\n------------------------------------------------------------------\n\n/A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}/utf\nMemory allocation - code size : 29\n------------------------------------------------------------------\n  0  23 Bra\n  5     A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}\n 23  23 Ket\n 28     End\n------------------------------------------------------------------\n\n/[\\x{105}-\\x{109}]/i,utf\nMemory allocation - code size : 23\n------------------------------------------------------------------\n  0  17 Bra\n  5     [\\x{104}-\\x{109}]\n 17  17 Ket\n 22     End\n------------------------------------------------------------------\n\n/( ( (?(1)0|) )*   )/x\nMemory allocation - code size : 56\n------------------------------------------------------------------\n  0  50 Bra\n  5  40 CBra 1\n 12     Brazero\n 13  27 SCBra 2\n 20  10 Cond\n 25   1 Capture ref\n 28     0\n 30   5 Alt\n 35  15 Ket\n 40  27 KetRmax\n 45  40 Ket\n 50  50 Ket\n 55     End\n------------------------------------------------------------------\n\n/(  (?(1)0|)*   )/x\nMemory allocation - code size : 44\n------------------------------------------------------------------\n  0  38 Bra\n  5  28 CBra 1\n 12     Brazero\n 13  10 SCond\n 18   1 Capture ref\n 21     0\n 23   5 Alt\n 28  15 KetRmax\n 33  28 Ket\n 38  38 Ket\n 43     End\n------------------------------------------------------------------\n\n/[a]/\nMemory allocation - code size : 13\n------------------------------------------------------------------\n  0   7 Bra\n  5     a\n  7   7 Ket\n 12     End\n------------------------------------------------------------------\n\n/[a]/utf\nMemory allocation - code size : 13\n------------------------------------------------------------------\n  0   7 Bra\n  5     a\n  7   7 Ket\n 12     End\n------------------------------------------------------------------\n\n/[\\xaa]/\nMemory allocation - code size : 13\n------------------------------------------------------------------\n  0   7 Bra\n  5     \\x{aa}\n  7   7 Ket\n 12     End\n------------------------------------------------------------------\n\n/[\\xaa]/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   8 Bra\n  5     \\x{aa}\n  8   8 Ket\n 13     End\n------------------------------------------------------------------\n\n/[^a]/\nMemory allocation - code size : 13\n------------------------------------------------------------------\n  0   7 Bra\n  5     [^a] (not)\n  7   7 Ket\n 12     End\n------------------------------------------------------------------\n\n/[^a]/utf\nMemory allocation - code size : 13\n------------------------------------------------------------------\n  0   7 Bra\n  5     [^a] (not)\n  7   7 Ket\n 12     End\n------------------------------------------------------------------\n\n/[^\\xaa]/\nMemory allocation - code size : 13\n------------------------------------------------------------------\n  0   7 Bra\n  5     [^\\x{aa}] (not)\n  7   7 Ket\n 12     End\n------------------------------------------------------------------\n\n/[^\\xaa]/utf\nMemory allocation - code size : 14\n------------------------------------------------------------------\n  0   8 Bra\n  5     [^\\x{aa}] (not)\n  8   8 Ket\n 13     End\n------------------------------------------------------------------\n\n#pattern -memory\n\n/[^\\d]/utf,ucp\n------------------------------------------------------------------\n  0  15 Bra\n  5     [^\\p{Nd}]\n 15  15 Ket\n 20     End\n------------------------------------------------------------------\n\n/[[:^alpha:][:^cntrl:]]+/utf,ucp\n------------------------------------------------------------------\n  0  19 Bra\n  5     [\\P{L}\\P{Cc}]++\n 19  19 Ket\n 24     End\n------------------------------------------------------------------\n\n/[[:^cntrl:][:^alpha:]]+/utf,ucp\n------------------------------------------------------------------\n  0  19 Bra\n  5     [\\P{Cc}\\P{L}]++\n 19  19 Ket\n 24     End\n------------------------------------------------------------------\n\n/[[:alpha:]]+/utf,ucp\n------------------------------------------------------------------\n  0  16 Bra\n  5     [\\p{L}]++\n 16  16 Ket\n 21     End\n------------------------------------------------------------------\n\n/[[:^alpha:]\\S]+/utf,ucp\n------------------------------------------------------------------\n  0  19 Bra\n  5     [\\P{L}\\P{Xsp}]++\n 19  19 Ket\n 24     End\n------------------------------------------------------------------\n\n/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/\n------------------------------------------------------------------\n  0  93 Bra\n  5     abc\n 11   9 CBra 1\n 18     d\n 20   7 Alt\n 25     e\n 27  16 Ket\n 32     *THEN\n 33     x\n 35  16 CBra 2\n 42     123\n 48     *THEN\n 49     4\n 51  37 Alt\n 56     567\n 62   9 CBra 3\n 69     b\n 71   7 Alt\n 76     q\n 78  16 Ket\n 83     *THEN\n 84     xx\n 88  53 Ket\n 93  93 Ket\n 98     End\n------------------------------------------------------------------\n\n/(((a\\2)|(a*)\\g<-1>))*a?/\n------------------------------------------------------------------\n  0  73 Bra\n  5     Brazero\n  6  60 SCBra 1\n 13  24 CBra 2\n 20  12 CBra 3\n 27     a\n 29     \\g{2}\n 32  12 Ket\n 37  24 Alt\n 42   9 CBra 4\n 49     a*\n 51   9 Ket\n 56  42 Recurse\n 61  48 Ket\n 66  60 KetRmax\n 71     a?+\n 73  73 Ket\n 78     End\n------------------------------------------------------------------\n\n/((?+1)(\\1))/\n------------------------------------------------------------------\n  0  37 Bra\n  5  27 CBra 1\n 12  17 Recurse\n 17  10 CBra 2\n 24     \\g{1}\n 27  10 Ket\n 32  27 Ket\n 37  37 Ket\n 42     End\n------------------------------------------------------------------\n\n\"(?1)(?#?'){2}(a)\"\n------------------------------------------------------------------\n  0  29 Bra\n  5  15 Recurse\n 10  15 Recurse\n 15   9 CBra 1\n 22     a\n 24   9 Ket\n 29  29 Ket\n 34     End\n------------------------------------------------------------------\n\n/.((?2)(?R)|\\1|$)()/\n------------------------------------------------------------------\n  0  54 Bra\n  5     Any\n  6  17 CBra 1\n 13  42 Recurse\n 18   0 Recurse\n 23   8 Alt\n 28     \\g{1}\n 31   6 Alt\n 36     $\n 37  31 Ket\n 42   7 CBra 2\n 49   7 Ket\n 54  54 Ket\n 59     End\n------------------------------------------------------------------\n\n/.((?3)(?R)()(?2)|\\1|$)()/\n------------------------------------------------------------------\n  0  71 Bra\n  5     Any\n  6  34 CBra 1\n 13  59 Recurse\n 18   0 Recurse\n 23   7 CBra 2\n 30   7 Ket\n 35  23 Recurse\n 40   8 Alt\n 45     \\g{1}\n 48   6 Alt\n 53     $\n 54  48 Ket\n 59   7 CBra 3\n 66   7 Ket\n 71  71 Ket\n 76     End\n------------------------------------------------------------------\n\n/(?1)()((((((\\1++))\\x85)+)|))/\n------------------------------------------------------------------\n  0 105 Bra\n  5  10 Recurse\n 10   7 CBra 1\n 17   7 Ket\n 22  78 CBra 2\n 29  61 CBra 3\n 36  49 CBra 4\n 43  37 CBra 5\n 50  23 CBra 6\n 57  11 CBra 7\n 64     \\g{1}++\n 68  11 Ket\n 73  23 Ket\n 78     \\x{85}\n 80  37 KetRmax\n 85  49 Ket\n 90   5 Alt\n 95  66 Ket\n100  78 Ket\n105 105 Ket\n110     End\n------------------------------------------------------------------\n\n# Check the absolute limit on nesting (?| etc. This varies with code unit\n# width because the workspace is a different number of bytes. It will fail\n# with link size 2 in 8-bit and 16-bit but not in 32-bit.\n\n/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|\n)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\n/parens_nest_limit=1000,-fullbincode\n\n# Use \"expand\" to create some very long patterns with nested parentheses, in\n# order to test workspace overflow. Again, this varies with code unit width,\n# and even when it fails in two modes, the error offset differs. It also varies\n# with link size - hence multiple tests with different values.\n\n/(?'ABC'\\[[bar](]{792}*THEN:\\[A]{255}\\[)]{793}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{793}*THEN:\\[A]{255}\\[)]{794}/expand,-fullbincode,parens_nest_limit=1000\n\n/(?'ABC'\\[[bar](]{1793}*THEN:\\[A]{255}\\[)]{1794}/expand,-fullbincode,parens_nest_limit=2000\nFailed: error 186 at offset 0: regular expression is too complicated\n\n/(?(1)(?1)){8,}+()/debug\n------------------------------------------------------------------\n  0 181 Bra\n  5 159 Once\n 10  13 Cond\n 15   1 Capture ref\n 18 169 Recurse\n 23  13 Ket\n 28  13 Cond\n 33   1 Capture ref\n 36 169 Recurse\n 41  13 Ket\n 46  13 Cond\n 51   1 Capture ref\n 54 169 Recurse\n 59  13 Ket\n 64  13 Cond\n 69   1 Capture ref\n 72 169 Recurse\n 77  13 Ket\n 82  13 Cond\n 87   1 Capture ref\n 90 169 Recurse\n 95  13 Ket\n100  13 Cond\n105   1 Capture ref\n108 169 Recurse\n113  13 Ket\n118  13 Cond\n123   1 Capture ref\n126 169 Recurse\n131  13 Ket\n136  23 SBraPos\n141  13 SCond\n146   1 Capture ref\n149 169 Recurse\n154  13 Ket\n159  23 KetRpos\n164 159 Ket\n169   7 CBra 1\n176   7 Ket\n181 181 Ket\n186     End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nSubject length lower bound = 0\n    abcd\n 0: \n 1: \n\n/(?(1)|a(?1)b){2,}+()/debug\n------------------------------------------------------------------\n  0  91 Bra\n  5  69 Once\n 10   8 Cond\n 15   1 Capture ref\n 18  14 Alt\n 23     a\n 25  79 Recurse\n 30     b\n 32  22 Ket\n 37  32 SBraPos\n 42   8 SCond\n 47   1 Capture ref\n 50  14 Alt\n 55     a\n 57  79 Recurse\n 62     b\n 64  22 Ket\n 69  32 KetRpos\n 74  69 Ket\n 79   7 CBra 1\n 86   7 Ket\n 91  91 Ket\n 96     End\n------------------------------------------------------------------\nCapture group count = 1\nMax back reference = 1\nMay match empty string\nSubject length lower bound = 0\n    abcde\nNo match\n\n/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug\n------------------------------------------------------------------\n  0 327 Bra\n  5 102 CBra 1\n 12   5 Recurse\n 17 219 Recurse\n 22 231 Recurse\n 27 243 Recurse\n 32 255 Recurse\n 37 267 Recurse\n 42 279 Recurse\n 47 291 Recurse\n 52 303 Recurse\n 57 303 Recurse\n 62 291 Recurse\n 67 279 Recurse\n 72 267 Recurse\n 77 255 Recurse\n 82 243 Recurse\n 87 231 Recurse\n 92 219 Recurse\n 97   5 Recurse\n102   0 Recurse\n107 102 Ket\n112 102 SCBra 1\n119   5 Recurse\n124 219 Recurse\n129 231 Recurse\n134 243 Recurse\n139 255 Recurse\n144 267 Recurse\n149 279 Recurse\n154 291 Recurse\n159 303 Recurse\n164 303 Recurse\n169 291 Recurse\n174 279 Recurse\n179 267 Recurse\n184 255 Recurse\n189 243 Recurse\n194 231 Recurse\n199 219 Recurse\n204   5 Recurse\n209   0 Recurse\n214 102 KetRmax\n219   7 CBra 2\n226   7 Ket\n231   7 CBra 3\n238   7 Ket\n243   7 CBra 4\n250   7 Ket\n255   7 CBra 5\n262   7 Ket\n267   7 CBra 6\n274   7 Ket\n279   7 CBra 7\n286   7 Ket\n291   7 CBra 8\n298   7 Ket\n303   7 CBra 9\n310   7 Ket\n315   7 CBra 10\n322   7 Ket\n327 327 Ket\n332     End\n------------------------------------------------------------------\nCapture group count = 10\nMay match empty string\nSubject length lower bound = 0\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/\nFailed: error 114 at offset 509: missing closing parenthesis\n        here: ...](*ACCEPT) |<--|\n\n/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))/-fullbincode\n\n#pattern -fullbincode\n\n/\\[()]{65535}/expand\n\n# End of testinput8\n"
  },
  {
    "path": "testdata/testoutput9",
    "content": "# This set of tests is run only with the 8-bit library. They must not require \n# UTF-8 or Unicode property support. */\n    \n#forbid_utf\n#newline_default lf any anycrlf\n\n#if !ebcdic\n\n/a\\xc4\\xa3b/\n    a\\N{U+123}b\n 0: a\\xc4\\xa3b\n\\= Expect no match # error message (too big char)\n    a\\x{0123}b\n** Character \\x{123} is greater than 255 and UTF-8 mode is not enabled.\n** Truncation will probably give the wrong result.\nNo match\n    a\\o{00443}b\n** Character \\x{123} is greater than 255 and UTF-8 mode is not enabled.\n** Truncation will probably give the wrong result.\nNo match\n    a\\443b\n** Character \\x{123} is greater than 255 and UTF-8 mode is not enabled.\n** Truncation will probably give the wrong result.\nNo match\n\n/fd bf bf bf bf bf/I,hex\nCapture group count = 0\nFirst code unit = \\xfd\nLast code unit = \\xbf\nSubject length lower bound = 6\n\\= Expect warning\n    \\N{U+7fffffff}\n** Warning: character \\N{U+7fffffff} is greater than 0x10ffff and should not be encoded as UTF-8\n 0: \\xfd\\xbf\\xbf\\xbf\\xbf\\xbf\n\\= Expect no match # error message (too big char)\n    \\x{7fffffff}\n** Character \\x{7fffffff} is greater than 255 and UTF-8 mode is not enabled.\n** Truncation will probably give the wrong result.\nNo match\n\n#endif\n\n/\\x{100}/I\nFailed: error 134 at offset 6: character code point value in \\x{} or \\o{} is too large\n        here: \\x{100 |<--| }\n\n/\\o{400}/I\nFailed: error 134 at offset 6: character code point value in \\x{} or \\o{} is too large\n        here: \\o{400 |<--| }\n\n#if !ebcdic\n\n/  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                          # optional leading comment\n(?:    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n# address\n|                     #  or\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)             # one word, optionally followed by....\n(?:\n[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037]  |  # atom and space parts, or...\n\\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)       |  # comments, or...\n\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n# quoted strings\n)*\n<  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                     # leading <\n(?:  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  ,  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n)* # further okay, if led by comma\n:                                # closing colon\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  )? #       optional route\n(?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)                    # initial word\n(?:  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|\n\" (?:                      # opening quote...\n[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote\n|                     #    or\n\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)\n)* \"  # closing quote\n)  )* # further okay, if led by a period\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  @  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*    (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                           # initial subdomain\n(?:                                  #\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  \\.                        # if led by a period...\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*   (?:\n[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...\n(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom\n|   \\[                         # [\n(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff\n\\]                        #           ]\n)                     #   ...further okay\n)*\n#       address spec\n(?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*  > #                  trailing >\n# name and address\n)  (?: [\\040\\t] |  \\(\n(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*\n\\)  )*                       # optional trailing comment\n/Ix\nCapture group count = 0\nContains explicit CR or LF match\nOptions: extended\nStarting code units: \\x09 \\x20 ! \" # $ % & ' ( * + - / 0 1 2 3 4 5 6 7 8\n  9 = ? A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ^ _ ` a b c d e\n  f g h i j k l m n o p q r s t u v w x y z { | } ~ \\x7f\nSubject length lower bound = 3\n\n#endif\n\n/\\h/I\nCapture group count = 0\nStarting code units: \\x09 \\x20 \\xa0\nSubject length lower bound = 1\n\n/\\H/I\nCapture group count = 0\nSubject length lower bound = 1\n\n/\\v/I\nCapture group count = 0\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85\nSubject length lower bound = 1\n\n/\\V/I\nCapture group count = 0\nSubject length lower bound = 1\n\n/\\R/I\nCapture group count = 0\nStarting code units: \\x0a \\x0b \\x0c \\x0d \\x85\nSubject length lower bound = 1\n\n/[\\h]/B\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0]\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x09<\n 0: \\x09\n\n/[\\h]+/B\n------------------------------------------------------------------\n        Bra\n        [\\x09 \\xa0]++\n        Ket\n        End\n------------------------------------------------------------------\n    >\\x09\\x20\\xa0<\n 0: \\x09 \\xa0\n\n/[\\v]/B\n------------------------------------------------------------------\n        Bra\n        [\\x0a-\\x0d\\x85]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\H]/B\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x08\\x0a-\\x1f!-\\x9f\\xa1-\\xff]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[^\\h]/B\n------------------------------------------------------------------\n        Bra\n        [^\\x09 \\xa0]\n        Ket\n        End\n------------------------------------------------------------------\n\n/[\\V]/B\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x09\\x0e-\\x84\\x86-\\xff]\n        Ket\n        End\n------------------------------------------------------------------\n\n#if !ebcdic\n\n/[\\x0a\\V]/B\n------------------------------------------------------------------\n        Bra\n        [\\x00-\\x0a\\x0e-\\x84\\x86-\\xff]\n        Ket\n        End\n------------------------------------------------------------------\n\n#endif\n\n/\\777/I\nFailed: error 151 at offset 4: octal value is greater than \\377 in 8-bit non-UTF-8 mode\n        here: \\777 |<--|\n\n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/mark\nFailed: error 176 at offset 259: name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)\n        here: ...6789ABCDEF |<--| )XX\n    XX\n     \n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/mark,alt_verbnames\nFailed: error 176 at offset 259: name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)\n        here: ...6789ABCDEF |<--| )XX\n    XX\n     \n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/mark\n    XX\n 0: XX\nMK: 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE\n\n/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/mark,alt_verbnames\n    XX\n 0: XX\nMK: 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE\n\n/\\u0100/alt_bsux,allow_empty_class,match_unset_backref,dupnames\nFailed: error 177 at offset 6: character code point value in \\u.... sequence is too large\n        here: \\u0100 |<--|\n\n/[\\u0100-\\u0200]/alt_bsux,allow_empty_class,match_unset_backref,dupnames\nFailed: error 177 at offset 7: character code point value in \\u.... sequence is too large\n        here: [\\u0100 |<--| -\\u0200]\n\n#if !ebcdic\n\n/[^\\x00-a]{12,}[^b-\\xff]*/B\n------------------------------------------------------------------\n        Bra\n        [^\\x00-a]{12,}+\n        [^b-\\xff]*+\n        Ket\n        End\n------------------------------------------------------------------\n\n#endif\n\n/[^\\s]*\\s* [^\\W]+\\W+ [^\\d]*?\\d0 [^\\d\\w]{4,6}?\\w*A/B\n------------------------------------------------------------------\n        Bra\n        [^\\x09-\\x0d ]*+\n        \\s*\n         \n        [0-9A-Z_a-z]++\n        \\W+\n         \n        [^0-9]*+\n        \\d\n        0 \n        [^0-9A-Z_a-z]{4,6}+\n        \\w*\n        A\n        Ket\n        End\n------------------------------------------------------------------\n\n/(*MARK:a\\x{100}b)z/alt_verbnames \nFailed: error 134 at offset 14: character code point value in \\x{} or \\o{} is too large\n        here: ...RK:a\\x{100 |<--| }b)z\n\n/(*:*++++++++++++''''''''''''''''''''+''+++'+++x+++++++++++++++++++++++++++++++++++(++++++++++++++++++++:++++++%++:''''''''''''''''''''''''+++++++++++++++++++++++++++++++++++++++++++++++++++++-++++++++k+++++++''''+++'+++++++++++++++++++++++''''++++++++++++':ƿ)/\nFailed: error 176 at offset 259: name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)\n        here: ...++++++':ƿ |<--| )\n\n/(?i:A{1,}\\6666666666)/\nFailed: error 151 at offset 13: octal value is greater than \\377 in 8-bit non-UTF-8 mode\n        here: ...:A{1,}\\666 |<--| 6666666)\n    A\\x{1b6}6666666\n\n# Should cause an error\n/abc/substitute_extended,replace=>\\777<\n    abc\nFailed: error -57 at offset 5 in replacement: bad escape sequence in replacement string\n        here: >\\777 |<--| <\n\n# Should cause an error\n/abc/substitute_extended,replace=>\\o{012345}<\n    abc\nFailed: error -57 at offset 10 in replacement: bad escape sequence in replacement string\n        here: >\\o{012345 |<--| }<\n\n/i/turkish_casing\nFailed: error 204 at offset 0: PCRE2_EXTRA_TURKISH_CASING require Unicode (UTF or UCP) mode\n\n# End of testinput9\n"
  },
  {
    "path": "testdata/testoutputheap-16",
    "content": "#pattern framesize, memory\n\n/abcd/\nMemory allocation (code space): 26\nFrame size for pcre2_match(): 128\n    abcd\\=memory\nmalloc  20480\n 0: abcd\n    abcd\\=find_limits\nMinimum heap limit = 1\nMinimum match limit = 2\nMinimum depth limit = 2\n 0: abcd\n\n/(((((((((((((((((((((((((((((( (^abc|xyz){1,20}$  ))))))))))))))))))))))))))))))/x\nMemory allocation (code space): 1294\nFrame size for pcre2_match(): 624\n    abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcX\\=memory\nmalloc  40960\nfree unremembered block\nNo match\n    abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcX\\=find_limits\nMinimum heap limit = 22\nMinimum match limit = 37\nMinimum depth limit = 35\nNo match\n\n/ab(cd)/\nMemory allocation (code space): 36\nFrame size for pcre2_match(): 144\n    abcd\\=memory\n 0: abcd\n 1: cd\n    abcd\\=memory,ovector=0\nfree    40960\nfree unremembered block\nmalloc    128\nmalloc  20480\n 0: abcd\n 1: cd\n\n/\\[(a)]{1000}/expand,framesize\nMemory allocation (code space): 14010\nFrame size for pcre2_match(): 16128\n    \\[a]{1000}\\=ovector=1\nMatched, but too many substrings\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n# The heapframes_size option gets pcre2test to show the size of the heapframes\n# vector that after pcre2_match() has run. Running a match with ovector=0\n# causes the match data block to be freed, thus releasing that vector.\n\n/\\[(a)]{1000}/expand,framesize\nMemory allocation (code space): 14010\nFrame size for pcre2_match(): 16128\n    \\[a]{1000}\\=ovector=1,heapframes_size\nMatched, but too many substrings\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nHeapframes size in match_data: 20643840\n    \n/a/heapframes_size,framesize\nMemory allocation (code space): 14\nFrame size for pcre2_match(): 128\n    a\\=ovector=0 \n 0: a\nHeapframes size in match_data: 20480\n    \n/a|(b){200}/g,expand,heapframes_size\nMemory allocation (code space): 2818\nFrame size for pcre2_match(): 144\n    abacus z\\[b]{200}z\n 0: a\n 0: a\n 0: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n 1: b\nHeapframes size in match_data: 40960\n    a\\=ovector=0 \n 0: a\nHeapframes size in match_data: 20480\n\n/(a)/replace=>$1<\nMemory allocation (code space): 24\nFrame size for pcre2_match(): 144\n    cat\\=heapframes_size\n 1: c>a<t\nHeapframes size in match_data: 20480\n\n# End\n"
  },
  {
    "path": "testdata/testoutputheap-32",
    "content": "#pattern framesize, memory\n\n/abcd/\nMemory allocation (code space): 52\nFrame size for pcre2_match(): 128\n    abcd\\=memory\nmalloc  20480\n 0: abcd\n    abcd\\=find_limits\nMinimum heap limit = 1\nMinimum match limit = 2\nMinimum depth limit = 2\n 0: abcd\n\n/(((((((((((((((((((((((((((((( (^abc|xyz){1,20}$  ))))))))))))))))))))))))))))))/x\nMemory allocation (code space): 2588\nFrame size for pcre2_match(): 624\n    abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcX\\=memory\nmalloc  40960\nfree unremembered block\nNo match\n    abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcX\\=find_limits\nMinimum heap limit = 22\nMinimum match limit = 37\nMinimum depth limit = 35\nNo match\n\n/ab(cd)/\nMemory allocation (code space): 72\nFrame size for pcre2_match(): 144\n    abcd\\=memory\n 0: abcd\n 1: cd\n    abcd\\=memory,ovector=0\nfree    40960\nfree unremembered block\nmalloc    128\nmalloc  20480\n 0: abcd\n 1: cd\n\n/\\[(a)]{1000}/expand,framesize\nMemory allocation (code space): 28020\nFrame size for pcre2_match(): 16128\n    \\[a]{1000}\\=ovector=1\nMatched, but too many substrings\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n# The heapframes_size option gets pcre2test to show the size of the heapframes\n# vector that after pcre2_match() has run. Running a match with ovector=0\n# causes the match data block to be freed, thus releasing that vector.\n\n/\\[(a)]{1000}/expand,framesize\nMemory allocation (code space): 28020\nFrame size for pcre2_match(): 16128\n    \\[a]{1000}\\=ovector=1,heapframes_size\nMatched, but too many substrings\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nHeapframes size in match_data: 20643840\n    \n/a/heapframes_size,framesize\nMemory allocation (code space): 28\nFrame size for pcre2_match(): 128\n    a\\=ovector=0 \n 0: a\nHeapframes size in match_data: 20480\n    \n/a|(b){200}/g,expand,heapframes_size\nMemory allocation (code space): 5636\nFrame size for pcre2_match(): 144\n    abacus z\\[b]{200}z\n 0: a\n 0: a\n 0: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n 1: b\nHeapframes size in match_data: 40960\n    a\\=ovector=0 \n 0: a\nHeapframes size in match_data: 20480\n\n/(a)/replace=>$1<\nMemory allocation (code space): 48\nFrame size for pcre2_match(): 144\n    cat\\=heapframes_size\n 1: c>a<t\nHeapframes size in match_data: 20480\n\n# End\n"
  },
  {
    "path": "testdata/testoutputheap-8",
    "content": "#pattern framesize, memory\n\n/abcd/\nMemory allocation (code space): 15\nFrame size for pcre2_match(): 128\n    abcd\\=memory\nmalloc  20480\n 0: abcd\n    abcd\\=find_limits\nMinimum heap limit = 1\nMinimum match limit = 2\nMinimum depth limit = 2\n 0: abcd\n\n/(((((((((((((((((((((((((((((( (^abc|xyz){1,20}$  ))))))))))))))))))))))))))))))/x\nMemory allocation (code space): 855\nFrame size for pcre2_match(): 624\n    abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcX\\=memory\nmalloc  40960\nfree unremembered block\nNo match\n    abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcX\\=find_limits\nMinimum heap limit = 22\nMinimum match limit = 37\nMinimum depth limit = 35\nNo match\n\n/ab(cd)/\nMemory allocation (code space): 23\nFrame size for pcre2_match(): 144\n    abcd\\=memory\n 0: abcd\n 1: cd\n    abcd\\=memory,ovector=0\nfree    40960\nfree unremembered block\nmalloc    128\nmalloc  20480\n 0: abcd\n 1: cd\n\n/\\[(a)]{1000}/expand,framesize\nMemory allocation (code space): 10007\nFrame size for pcre2_match(): 16128\n    \\[a]{1000}\\=ovector=1\nMatched, but too many substrings\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\n# The heapframes_size option gets pcre2test to show the size of the heapframes\n# vector that after pcre2_match() has run. Running a match with ovector=0\n# causes the match data block to be freed, thus releasing that vector.\n\n/\\[(a)]{1000}/expand,framesize\nMemory allocation (code space): 10007\nFrame size for pcre2_match(): 16128\n    \\[a]{1000}\\=ovector=1,heapframes_size\nMatched, but too many substrings\n 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nHeapframes size in match_data: 20643840\n    \n/a/heapframes_size,framesize\nMemory allocation (code space): 9\nFrame size for pcre2_match(): 128\n    a\\=ovector=0 \n 0: a\nHeapframes size in match_data: 20480\n    \n/a|(b){200}/g,expand,heapframes_size\nMemory allocation (code space): 2012\nFrame size for pcre2_match(): 144\n    abacus z\\[b]{200}z\n 0: a\n 0: a\n 0: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n 1: b\nHeapframes size in match_data: 40960\n    a\\=ovector=0 \n 0: a\nHeapframes size in match_data: 20480\n\n/(a)/replace=>$1<\nMemory allocation (code space): 17\nFrame size for pcre2_match(): 144\n    cat\\=heapframes_size\n 1: c>a<t\nHeapframes size in match_data: 20480\n\n# End\n"
  },
  {
    "path": "testdata/valgrind-jit.supp",
    "content": "{\n   name\n   Memcheck:Addr16\n   obj:???\n   obj:???\n   obj:???\n}\n\n{\n   name\n   Memcheck:Cond\n   obj:???\n   obj:???\n   obj:???\n}\n"
  },
  {
    "path": "testdata/wintestinput3",
    "content": "# This set of tests checks local-specific features, using the \"fr_FR\" locale. \n# It is almost Perl-compatible. When run via RunTest, the locale is edited to\n# be whichever of \"fr_FR\", \"french\", or \"fr\" is found to exist. There is\n# different version of this file called wintestinput3 for use on Windows,\n# where the locale is called \"french\" and the tests are run using\n# RunTest.bat. \n\n#forbid_utf\n\n/^[\\w]+/\n\\= Expect no match\n    cole\n\n/^[\\w]+/locale=french\n    cole\n\n/^[\\W]+/\n    cole\n\n/^[\\W]+/locale=french\n\\= Expect no match\n    cole\n\n/[\\b]/\n    \\b\n\\= Expect no match\n    a\n\n/[\\b]/locale=french\n    \\b\n\\= Expect no match\n    a\n\n/^\\w+/\n\\= Expect no match\n    cole\n\n/^\\w+/locale=french\n    cole\n\n/(.+)\\b(.+)/\n    cole\n\n/(.+)\\b(.+)/locale=french\n\\= Expect no match\n    cole\n\n/cole/i\n    cole\n\\= Expect no match\n    cole\n\n/cole/i,locale=french\n    cole\n    cole\n\n/\\w/I\n\n/\\w/I,locale=french\n\n# All remaining tests are in the french locale, so set the default.\n\n#pattern locale=french\n\n/^[\\xc8-\\xc9]/i\n    cole\n    cole\n\n/^[\\xc8-\\xc9]/\n    cole\n\\= Expect no match \n    cole\n\n/\\xb5/i\n    \n\\= Expect no match\n    \\x9c\n\n//i\n    \\xff\n\\= Expect no match\n    y\n\n/(.)\\1/i\n    \\xfe\\xde\n\n/\\W+/\n    >>>\\xaa<<<\n    >>>\\xba<<< \n\n/[\\W]+/\n    >>>\\xaa<<<\n    >>>\\xba<<< \n\n/[^[:alpha:]]+/\n    >>>\\xaa<<<\n    >>>\\xba<<< \n\n/\\w+/\n    >>>\\xaa<<<\n    >>>\\xba<<< \n\n/[\\w]+/\n    >>>\\xaa<<<\n    >>>\\xba<<< \n\n/[[:alpha:]]+/\n    >>>\\xaa<<<\n    >>>\\xba<<< \n    \n/[[:alpha:]][[:lower:]][[:upper:]]/IB\n\n# End of wintestinput3 \n"
  },
  {
    "path": "testdata/wintestoutput3",
    "content": "# This set of tests checks local-specific features, using the \"fr_FR\" locale. \n# It is almost Perl-compatible. When run via RunTest, the locale is edited to\n# be whichever of \"fr_FR\", \"french\", or \"fr\" is found to exist. There is\n# different version of this file called wintestinput3 for use on Windows,\n# where the locale is called \"french\" and the tests are run using\n# RunTest.bat. \n\n#forbid_utf\n\n/^[\\w]+/\n\\= Expect no match\n    cole\nNo match\n\n/^[\\w]+/locale=french\n    cole\n 0: \\xc9cole\n\n/^[\\W]+/\n    cole\n 0: \\xc9\n\n/^[\\W]+/locale=french\n\\= Expect no match\n    cole\nNo match\n\n/[\\b]/\n    \\b\n 0: \\x08\n\\= Expect no match\n    a\nNo match\n\n/[\\b]/locale=french\n    \\b\n 0: \\x08\n\\= Expect no match\n    a\nNo match\n\n/^\\w+/\n\\= Expect no match\n    cole\nNo match\n\n/^\\w+/locale=french\n    cole\n 0: \\xc9cole\n\n/(.+)\\b(.+)/\n    cole\n 0: \\xc9cole\n 1: \\xc9\n 2: cole\n\n/(.+)\\b(.+)/locale=french\n\\= Expect no match\n    cole\nNo match\n\n/cole/i\n    cole\n 0: \\xc9cole\n\\= Expect no match\n    cole\nNo match\n\n/cole/i,locale=french\n    cole\n 0: \\xc9cole\n    cole\n 0: \\xe9cole\n\n/\\w/I\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\nSubject length lower bound = 1\n\n/\\w/I,locale=french\nCapture group count = 0\nStarting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P\n  Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z\n  \\x83 \\x8a \\x8c \\x8e \\x9a \\x9c \\x9e \\x9f \\xaa \\xb2 \\xb3 \\xb5 \\xb9 \\xba \\xc0\n  \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8 \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf\n  \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd8 \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf\n  \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7 \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee\n  \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6 \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe\n  \\xff\nSubject length lower bound = 1\n\n# All remaining tests are in the french locale, so set the default.\n\n#pattern locale=french\n\n/^[\\xc8-\\xc9]/i\n    cole\n 0: \\xc9\n    cole\n 0: \\xe9\n\n/^[\\xc8-\\xc9]/\n    cole\n 0: \\xc9\n\\= Expect no match \n    cole\nNo match\n\n/\\xb5/i\n    \n 0: \\xb5\n\\= Expect no match\n    \\x9c\nNo match\n\n//i\n    \\xff\n 0: \\xff\n\\= Expect no match\n    y\nNo match\n\n/(.)\\1/i\n    \\xfe\\xde\n 0: \\xfe\\xde\n 1: \\xfe\n\n/\\W+/\n    >>>\\xaa<<<\n 0: >>>\n    >>>\\xba<<< \n 0: >>>\n\n/[\\W]+/\n    >>>\\xaa<<<\n 0: >>>\n    >>>\\xba<<< \n 0: >>>\n\n/[^[:alpha:]]+/\n    >>>\\xaa<<<\n 0: >>>\n    >>>\\xba<<< \n 0: >>>\n\n/\\w+/\n    >>>\\xaa<<<\n 0: \\xaa\n    >>>\\xba<<< \n 0: \\xba\n\n/[\\w]+/\n    >>>\\xaa<<<\n 0: \\xaa\n    >>>\\xba<<< \n 0: \\xba\n\n/[[:alpha:]]+/\n    >>>\\xaa<<<\n 0: \\xaa\n    >>>\\xba<<< \n 0: \\xba\n    \n/[[:alpha:]][[:lower:]][[:upper:]]/IB\n------------------------------------------------------------------\n        Bra\n        [A-Za-z\\x83\\x8a\\x8c\\x8e\\x9a\\x9c\\x9e\\x9f\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff]\n        [a-z\\x83\\x9a\\x9c\\x9e\\xaa\\xb5\\xba\\xdf-\\xf6\\xf8-\\xff]\n        [A-Z\\x8a\\x8c\\x8e\\x9f\\xc0-\\xd6\\xd8-\\xde]\n        Ket\n        End\n------------------------------------------------------------------\nCapture group count = 0\nStarting code units: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n  a b c d e f g h i j k l m n o p q r s t u v w x y z \\x83 \\x8a \\x8c \\x8e \\x9a\n  \\x9c \\x9e \\x9f \\xaa \\xb5 \\xba \\xc0 \\xc1 \\xc2 \\xc3 \\xc4 \\xc5 \\xc6 \\xc7 \\xc8\n  \\xc9 \\xca \\xcb \\xcc \\xcd \\xce \\xcf \\xd0 \\xd1 \\xd2 \\xd3 \\xd4 \\xd5 \\xd6 \\xd8\n  \\xd9 \\xda \\xdb \\xdc \\xdd \\xde \\xdf \\xe0 \\xe1 \\xe2 \\xe3 \\xe4 \\xe5 \\xe6 \\xe7\n  \\xe8 \\xe9 \\xea \\xeb \\xec \\xed \\xee \\xef \\xf0 \\xf1 \\xf2 \\xf3 \\xf4 \\xf5 \\xf6\n  \\xf8 \\xf9 \\xfa \\xfb \\xfc \\xfd \\xfe \\xff\nSubject length lower bound = 3\n\n# End of wintestinput3 \n"
  },
  {
    "path": "vms/configure.com",
    "content": "$! Configure procedure \n$! (c) Alexey Chupahin  11-APR-2024\n$! alexey@vaxman.de, alexey_chupahin@mail.ru\n$!\n$!\n$ SET NOON\n$SET NOVER\n$WRITE SYS$OUTPUT \" \"\n$WRITE SYS$OUTPUT \"Configuring PCRE2 library for OpenVMS  \"\n$WRITE SYS$OUTPUT \"(c) Alexey Chupahin   CHAPG\"\n$WRITE SYS$OUTPUT \" \"\n$! Checking architecture\n$DECC = F$SEARCH(\"SYS$SYSTEM:DECC$COMPILER.EXE\") .NES. \"\"\n$    IF F$GETSYI(\"ARCH_TYPE\").EQ.1 THEN CPU = \"VAX\"\n$    IF F$GETSYI(\"ARCH_TYPE\").EQ.2 THEN CPU = \"Alpha\"\n$    IF F$GETSYI(\"ARCH_TYPE\").EQ.3 THEN CPU = \"I64\"\n$    IF F$GETSYI(\"ARCH_TYPE\").EQ.4 THEN CPU = \"x86\"\n$WRITE SYS$OUTPUT \"Checking architecture \t...  \", CPU\n$IF ( (CPU.EQS.\"Alpha\").OR.(CPU.EQS.\"I64\").OR(CPU.EQS.\"x86\") )\n$  THEN\n$       SHARED=64\n$  ELSE\n$       SHARED=32\n$ENDIF\n$!\n$IF (DECC) THEN $WRITE SYS$OUTPUT  \"Compiler\t\t...  DEC C\"\n$IF (.NOT. DECC) THEN $WRITE SYS$OUTPUT  \"BAD compiler\" GOTO EXIT\n$MMS = F$SEARCH(\"SYS$SYSTEM:MMS.EXE\") .NES. \"\"\n$MMK = F$TYPE(MMK) \n$IF (MMS .OR. MMK.NES.\"\") THEN GOTO TEST_LIBRARIES\n$! I cant find any make tool\n$ WRITE SYS$OUTPUT \"Install MMS or MMK\"\n$GOTO EXIT\n$!PERL = F$TYPE(MMK) \n$!IF (PERL.NES.\"\") THEN GOTO TEST_LIBRARIES\n$!WRITE SYS$OUTPUT \"Install PERL\"\n$!GOTO EXIT\n$!\n$!\n$! Is it package root directory? If no, go to [-]\n$ IF (F$SEARCH(\"[]VMS.DIR\").EQS.\"\") .AND. (F$SEARCH(\"[]vms.dir\").EQS.\"\")\n$  THEN\n$       SET DEF [-]\n$ ENDIF\n$!\n$TEST_LIBRARIES:\n$!   Setting as MAKE utility one of MMS or MMK. I prefer MMS.\n$IF (MMK.NES.\"\") THEN MAKE=\"MMK\"\n$IF (MMS) THEN MAKE=\"MMS\"\n$WRITE SYS$OUTPUT \"Checking build utility\t...  ''MAKE'\"\n$!WRITE SYS$OUTPUT \"Checking PERL\t\t...  found\"\n$WRITE SYS$OUTPUT \" \"\n$!\n$!\n$! Check files and ODS-2. unzip makes files FILE.H.GENERIC like FILE_H.GENERIC.  Should rename to FILE.H_GENERIC\n$IF F$SEARCH(\"[.SRC]PCRE2_H.GENERIC\") .NES. \"\"\n$ THEN\n$\tREN [.SRC]PCRE2_H.GENERIC [.SRC]PCRE2.H_GENERIC\n$ ELSE\n$\tIF F$SEARCH(\"[.SRC]PCRE2.H_GENERIC\") .EQS. \"\"\n$\t THEN\n$\t\tWRITE SYS$OUTPUT \"Not ODS-2 volume, or PCRE2_H.GENERIC not found\"\n$\t\tEXIT\n$\tENDIF\n$ENDIF\n$IF F$SEARCH(\"[.SRC]PCRE2_CHARTABLES_C.DIST\") .NES. \"\"\n$ THEN\n$\tREN [.SRC]PCRE2_CHARTABLES_C.DIST [.SRC]PCRE2_CHARTABLES.C_DIST\n$ ELSE\n$\tIF F$SEARCH(\"[.SRC]PCRE2_CHARTABLES.C_DIST\") .EQS. \"\"\n$\t THEN\n$\t\tWRITE SYS$OUTPUT \"Not ODS-2 volume, or PCRE2_CHARTABLES_C.DIST not found\"\n$\t\tEXIT\n$\tENDIF\n$ENDIF\n$WRITE SYS$OUTPUT \"Source Files OK\"\n$!\n$!\n$I18 = F$SEARCH(\"SYS$I18N_ICONV:ISO8859-1_UTF-8.ICONV\") .NES. \"\"\n$IF (I18)\n$  THEN\n$\tWRITE SYS$OUTPUT \"Found I18 extension ICONV codes\"\n$!\"Checking for iconv    \"\n$ DEFINE SYS$ERROR _NLA0:\n$ DEFINE SYS$OUTPUT _NLA0:\n$ CC/OBJECT=TEST.OBJ SYS$INPUT\n#include <stdio.h>\n#include <iconv.h>\n#include <errno.h>\n#include  <stdlib.h>\n\nint main ()\n{\n    /*                                                                   */\n    /* Declare variables to be used                                      */\n    /*                                                                   */\n    char fromcodeset[30];\n    char tocodeset[30];\n    int  iconv_opened;\n    iconv_t iconv_struct;                   /* Iconv descriptor      */\n\n    /*                                                                   */\n    /* Initialize variables                                              */\n    /*                                                                   */\n    sprintf(fromcodeset,\"UTF-8\");\n    sprintf(tocodeset,\"ISO8859-1\");\n    iconv_opened = FALSE;\n\n    /*                                                                   */\n    /* Attempt to create a conversion descriptor for the codesets        */\n    /* specified. If the return value from iconv_open is -1 then         */\n    /* an error has occurred. Check value of errno.                      */\n    /*                                                                   */\n    if ((iconv_struct = iconv_open (tocodeset, fromcodeset)) == (iconv_t)-1)\n    {\n        /*                                                               */\n        /* Check the value of errno                                      */\n        /*                                                               */\n        switch (errno)\n        {\n        case EMFILE:\n        case ENFILE:\n          printf(\"Too many iconv conversion files open\\n\");\n          exit(2);\n          break;\n\n        case ENOMEM:\n          printf(\"Not enough memory\\n\");\n          printf(\"Checking iconv .....  no\\n\");\n          exit(2);\n\t  break;\n\n        case EINVAL:\n          printf(\"Unsupported conversion\\n\");\n\t  exit(2);\n          break;\n\n        default:\n          printf(\"Unexpected error from iconv_open\\n\");\n\t  exit(2);\n          break;\n        }\n    }\n    else\n        /*                                                               */\n /* Successfully allocated a conversion descriptor   */\n /*         */\n iconv_opened = TRUE;\n\n    /*                                                                   */\n    /*  Was a conversion descriptor allocated                            */\n    /*                                                                   */\n    if (iconv_opened)\n    {\n        /*                                                               */\n        /* Attempt to deallocate the conversion descriptor. If           */\n        /* iconv_close returns -1 then an error has occurred.            */\n        /*                                                               */\n        if (iconv_close (iconv_struct) == -1)\n        {\n            /*                                                           */\n            /* An error occurred. Check the value of errno               */\n            /*                                                           */\n            switch (errno)\n            {\n            case EBADF:\n                printf(\"Conversion descriptor is invalid\\n\");\n                exit(2);\n\t\tbreak;\n            default:\n                break;\n            }\n        }\n        else\n            printf(\"Checking iconv .....  yes\\n\");\n    }\n    return(1);\n}\n$!\n$TMP = $STATUS\n$DEASS SYS$ERROR\n$DEAS  SYS$OUTPUT\n$!WRITE SYS$OUTPUT TMP\n$IF (TMP .NE. %X10B90001)\n$  THEN\n$       HAVE_ICONV=0\n$       GOTO NEXT0\n$ENDIF\n$DEFINE SYS$ERROR _NLA0:\n$DEFINE SYS$OUTPUT _NLA0:\n$LINK/EXE=TEST TEST\n$TMP = $STATUS\n$DEAS  SYS$ERROR\n$DEAS  SYS$OUTPUT\n$!WRITE SYS$OUTPUT TMP\n$IF (TMP .NE. %X10000001)\n$  THEN\n$       HAVE_ICONV=0\n$       GOTO NEXT0\n$  ELSE\n$       HAVE_ICONV=1\n$ENDIF\n$NEXT0:\n$IF (HAVE_ICONV.EQ.1)\n$  THEN\n$       WRITE SYS$OUTPUT \"Checking for iconv ...   Yes\"\n$  ELSE\n$       WRITE SYS$OUTPUT \"Checking for iconv ...   No\"\n$ENDIF\n$!\n$!\n$! Checking for BZIP2 library\n$!\n$ DEFINE SYS$ERROR _NLA0:\n$ DEFINE SYS$OUTPUT _NLA0:\n$ CC/OBJECT=TEST.OBJ/INCLUDE=(BZ2LIB) SYS$INPUT\n      #include <stdlib.h>\n      #include <stdio.h>\n      #include <bzlib.h>\n   int main()\n     {\n        printf(\"checking version bzip2 library:  %s\\n\",BZ2_bzlibVersion());\n     }\n$TMP = $STATUS\n$DEASS SYS$ERROR\n$DEAS  SYS$OUTPUT\n$!WRITE SYS$OUTPUT TMP\n$IF (TMP .NE. %X10B90001)\n$  THEN\n$       HAVE_BZIP2=0\n$       GOTO ERR0\n$ENDIF\n$DEFINE SYS$ERROR _NLA0:\n$DEFINE SYS$OUTPUT _NLA0:\n$!Testing for CHAPG BZIP2\n$!\n$LINK/EXE=TEST TEST,BZ2LIB:BZIP2/OPT\n$TMP = $STATUS\n$DEAS SYS$ERROR\n$DEAS SYS$OUTPUT\n$IF (TMP .NE. %X10000001)\n$  THEN\n$       HAVE_BZIP2=0\n$       GOTO ERR0\n$  ELSE\n$       HAVE_BZIP2=1\n$ENDIF\n$ERR0:\n$IF (HAVE_BZIP2.EQ.1)\n$  THEN\n$       WRITE SYS$OUTPUT \"Checking for CHAPG bzip2 library ...   Yes\"\n$       RUN TEST\n$       GOTO NEXT4\n$  ELSE\n$       WRITE SYS$OUTPUT \"Checking for correct bzip2 library ...   No\"\n$       WRITE SYS$OUTPUT \"To get bzip2 archives support, please download\"\n$       WRITE SYS$OUTPUT \"and install good library ported by Alexey Chupahin\"\n$       WRITE SYS$OUTPUT \"from openvms clamav site http://vaxvms.org/clamav/\"\n$       WRITE SYS$OUTPUT \"\"\n$\tGOTO EXIT\n$ENDIF\n$NEXT4:\n$!\n$!\n$!\"Checking for CHAPG zlib library    \"\n$DEFINE SYS$ERROR _NLA0:\n$DEFINE SYS$OUTPUT _NLA0:\n$ CC/OBJECT=TEST.OBJ/INCLUDE=(ZLIB) SYS$INPUT\n      #include <stdlib.h>\n      #include <stdio.h>\n      #include <string.h>\n      #include <zlib.h>\n   int main()\n     {\n        printf(\"checking version zlib:  %s\\n\",zlibVersion());\n       // printf(\"checking zlib is correct \");\n     }\n\n$TMP = $STATUS\n$DEASS SYS$ERROR\n$DEAS  SYS$OUTPUT\n$IF (TMP .NE. %X10B90001)\n$  THEN\n$       HAVE_ZLIB=0\n$       GOTO ERR4\n$ENDIF\n$DEFINE SYS$ERROR _NLA0:\n$DEFINE SYS$OUTPUT _NLA0:\n$!\n$LINK/EXE=TEST TEST,ZLIB:ZLIB.OPT/OPT\n$TMP = $STATUS\n$DEAS SYS$ERROR\n$DEAS SYS$OUTPUT\n$IF (TMP .NE. %X10000001)\n$  THEN\n$       HAVE_ZLIB=0\n$       GOTO ERR4\n$  ELSE\n$       HAVE_ZLIB=1\n$ENDIF\n$ERR4:\n$IF (HAVE_ZLIB.EQ.1)\n$  THEN\n$       WRITE SYS$OUTPUT \"Checking for CHAPG zlib library ...   Yes\"\n$       RUN TEST\n$       GOTO NEXT5\n$  ELSE\n$       WRITE SYS$OUTPUT \"Checking for CHAPG zlib library ...   No\"\n$       WRITE SYS$OUTPUT \"Please install ZLIB from\"\n$       WRITE SYS$OUTPUT \"http://vaxvms.org/libsdl/required.html\"\n$       GOTO EXIT\n$ENDIF\n$!\n$NEXT5:\n\n$!\n$!WRITING BUILD FILES\n$OPEN/WRITE OUT BUILD.COM\n$ WRITE OUT \"$\",\"SET DEF [.SRC]\"\n$ WRITE OUT \"$\",MAKE\n$ WRITE OUT \"$ CURRENT = F$ENVIRONMENT (\"\"DEFAULT\"\") \"\n$ WRITE OUT \"$\",\"SET DEF [-]\"\n$ WRITE OUT \"$CLAM=CURRENT\"\n$ WRITE OUT \"$OPEN/WRITE OUTT PCRE2$STARTUP.COM\"\n$ WRITE OUT \"$WRITE OUTT \"\"DEFINE PCRE2 \",\"'\",\"'\",\"CLAM'\"\" \"\n$ WRITE OUT \"$WRITE OUTT \"\"DEFINE PCRE2$SHR \",\"'\",\"'\",\"CLAM'PCRE2$SHR.EXE\"\" \"\n$ WRITE OUT \"$WRITE OUTT \"\"PCRE2GREP:==$\", \"'\",\"'\",\"CLAM'PCRE2GREP.EXE\"\"\"\n$ WRITE OUT \"$CLOSE OUTT\"\n$ WRITE OUT \"$WRITE SYS$OUTPUT \"\" \"\" \"\n$ WRITE OUT \"$WRITE SYS$OUTPUT \"\"***************************************************************************** \"\" \"\n$ WRITE OUT \"$WRITE SYS$OUTPUT \"\"Compilation is completed.\"\" \"\n$ WRITE OUT \"$WRITE SYS$OUTPUT \"\"PCRE2$STARTUP.COM is created. \"\" \"\n$ WRITE OUT \"$WRITE SYS$OUTPUT \"\"This file setups all logicals needed.\"\" \" \n$ WRITE OUT \"$WRITE SYS$OUTPUT \"\"It should be executed before using PCRE2 Library. \"\" \"\n$ WRITE OUT \"$WRITE SYS$OUTPUT \"\"Use PCRE2:PCRE2.OPT to link you program\"\" \"\n$ WRITE OUT \"$WRITE SYS$OUTPUT \"\"PCRE2GREP grep utility is installed here for your needs \"\" \"\n$ WRITE OUT \"$WRITE SYS$OUTPUT \"\"***************************************************************************** \"\" \"\n$CLOSE OUT \n$! BUILD.COM finished\n$ WRITE SYS$OUTPUT \"BUILD.COM has been created\"\n$!\n$!Creating OPT.OPT file containig external libraries for linker\n$OPEN/WRITE OUT [.SRC]PCRE2.OPT\n$IF (SHARED.GT.0)  THEN  WRITE OUT \"PCRE2:PCRE2$SHR/SHARE\"\n$IF (SHARED.EQ.0)\n$  THEN  \n$\tWRITE OUT \"PCRE2:PCRE2/LIB\"\n$ENDIF\n$CLOSE OUT\n$WRITE SYS$OUTPUT \"PCRE2.OPT has been created\"\n$IF (SHARED.EQ.64)\n$ THEN\n$\tCOPY SYS$INPUT [.SRC]PCRE2$DEF.OPT\n!\ncase_sensitive=NO\nsymbol_vector = (PCRE2_CONFIG_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_MAKETABLES_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_MAKETABLES_FREE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_CODE_COPY_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_CODE_FREE_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_CHECK_ESCAPE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_COMPILE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_CODE_COPY_WITH_TABLES_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_GET_ERROR_MESSAGE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_MATCH_DATA_CREATE_8\t= PROCEDURE)\nsymbol_vector = (VMS_PCRE2_GET_M_D_HPFRAM_S_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_GET_MATCH_DATA_SIZE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_GET_STARTCHAR_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_GET_OVECTOR_COUNT_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_GET_OVECTOR_POINTER_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_GET_MARK_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_MATCH_DATA_FREE_8\t= PROCEDURE)\nsymbol_vector = (VMS_PCRE2_M_D_CRT_FR_PATT_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_MATCH_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_PATTERN_INFO_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_CALLOUT_ENUMERATE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_GLOB_ESCAPE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_GLOB_SEPARATOR_8\t= PROCEDURE)\nsymbol_vector = (VMS_PCRE2_SET_RCRS_MEM_MNG_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_DEPTH_LIMIT_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_RECURSION_LIMIT_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_OFFSET_LIMIT_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_MATCH_LIMIT_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_HEAP_LIMIT_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_SUBSTITUTE_CALLOUT_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_CALLOUT_8\t= PROCEDURE)\nsymbol_vector = (VMS_PCRE2_SET_CMPL_RCRS_GRD_8\t= PROCEDURE)\nsymbol_vector = (VMS_PCRE2_SET_CMPL_EXT_OPT_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_PARENS_NEST_LIMIT_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_MAX_VARLOOKBEHIND_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_NEWLINE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_MAX_PATTERN_LENGTH_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_BSR_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_SET_CHARACTER_TABLES_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_CONVERT_CONTEXT_FREE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_MATCH_CONTEXT_FREE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_COMPILE_CONTEXT_FREE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_GENERAL_CONTEXT_FREE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_CONVERT_CONTEXT_COPY_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_MATCH_CONTEXT_COPY_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_COMPILE_CONTEXT_COPY_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_GENERAL_CONTEXT_COPY_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_MEMCTL_MALLOC_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_CONVERT_CONTEXT_CREATE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_MATCH_CONTEXT_CREATE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_COMPILE_CONTEXT_CREATE_8\t= PROCEDURE)\nsymbol_vector = (PCRE2_GENERAL_CONTEXT_CREATE_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_AUTO_POSSESSIFY_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_CKD_SMUL\t= PROCEDURE)\nsymbol_vector = (_PCRE2_FIND_BRACKET_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_IS_NEWLINE_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_WAS_NEWLINE_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_SCRIPT_RUN_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_STRCMP_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_STRCPY_C8_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_STRLEN_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_STRNCMP_C8_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_STRNCMP_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_STRCMP_C8_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_STUDY_8\t= PROCEDURE)\nsymbol_vector = (_PCRE2_VALID_UTF_8\t= PROCEDURE)\nsymbol_vector = (VMS_PCRE2_DEF_CMPL_CNTXT_8\t= DATA)\nsymbol_vector = (VMS_PCRE2_DEF_CNVRT_CNTXT_8\t= DATA)\nsymbol_vector = (_PCRE2_CALLOUT_END_DELIMS_8\t= DATA)\nsymbol_vector = (_PCRE2_CALLOUT_START_DELIMS_8\t= DATA)\nsymbol_vector = (_PCRE2_DEFAULT_MATCH_CONTEXT_8\t= DATA)\nsymbol_vector = (_PCRE2_DEFAULT_TABLES_8\t= DATA)\nsymbol_vector = (_PCRE2_HSPACE_LIST_8\t= DATA)\nsymbol_vector = (_PCRE2_OP_LENGTHS_8\t= DATA)\nsymbol_vector = (_PCRE2_UCD_CASELESS_SETS_8\t= DATA)\nsymbol_vector = (_PCRE2_UCD_RECORDS_8\t= DATA)\nsymbol_vector = (_PCRE2_UCD_STAGE1_8\t= DATA)\nsymbol_vector = (_PCRE2_UCD_STAGE2_8\t= DATA)\nsymbol_vector = (_PCRE2_VSPACE_LIST_8\t= DATA)\n!\n! ### PSECT list extracted from PCRE2.MAP;1\n!\n$ENDIF\n$!\n$!\nCOPY SYS$INPUT [.SRC]CONFIG.H\n/* src/config.h.in.  Generated from configure.ac by autoheader.  */\n\n\n/* PCRE2 is written in Standard C, but there are a few non-standard things it\ncan cope with, allowing it to run on SunOS4 and other \"close to standard\"\nsystems.\n\nIn environments that support the GNU autotools, config.h.in is converted into\nconfig.h by the \"configure\" script. In environments that use CMake,\nconfig-cmake.in is converted into config.h. If you are going to build PCRE2 \"by\nhand\" without using \"configure\" or CMake, you should copy the distributed\nconfig.h.generic to config.h, and edit the macro definitions to be the way you\nneed them. You must then add -DHAVE_CONFIG_H to all of your compile commands,\nso that config.h is included at the start of every source.\n\nAlternatively, you can avoid editing by using -D on the compiler command line\nto set the macro values. In this case, you do not have to set -DHAVE_CONFIG_H,\nbut if you do, default values will be taken from config.h for non-boolean\nmacros that are not defined on the command line.\n\nBoolean macros such as HAVE_STDLIB_H and SUPPORT_PCRE2_8 should either be\ndefined (conventionally to 1) for TRUE, and not defined at all for FALSE. All\nsuch macros are listed as a commented #undef in config.h.generic. Macros such\nas MATCH_LIMIT, whose actual value is relevant, have defaults defined, but are\nsurrounded by #ifndef/#endif lines so that the value can be overridden by -D. */\n\n/* By default, the \\R escape sequence matches any Unicode line ending\n   character or sequence of characters. If BSR_ANYCRLF is defined (to any\n   value), this is changed so that backslash-R matches only CR, LF, or CRLF.\n   The build-time default can be overridden by the user of PCRE2 at runtime.\n   */\n#undef BSR_ANYCRLF\n\n/* Define to any value to disable the use of the z and t modifiers in\n   formatting settings such as %zu or %td (this is rarely needed). */\n#undef DISABLE_PERCENT_ZT\n\n/* If you are compiling for a system that uses EBCDIC instead of ASCII\n   character codes, define this macro to any value. When EBCDIC is set, PCRE2\n   assumes that all input strings are in EBCDIC. If you do not define this\n   macro, PCRE2 will assume input strings are ASCII or UTF-8/16/32 Unicode. It\n   is not possible to build a version of PCRE2 that supports both EBCDIC and\n   UTF-8/16/32. */\n#undef EBCDIC\n\n/* In an EBCDIC environment, define this macro to any value to arrange for the\n   NL character to be 0x25 instead of the default 0x15. NL plays the role that\n   LF does in an ASCII/Unicode environment. */\n#undef EBCDIC_NL25\n\n/* Define this if your compiler supports __attribute__((uninitialized)) */\n#undef HAVE_ATTRIBUTE_UNINITIALIZED\n\n/* Define to 1 if you have the <assert.h> header file. */\n#define HAVE_ASSERT_H 1\n\n/* Define this if your compiler provides __builtin_mul_overflow() */\n#undef HAVE_BUILTIN_MUL_OVERFLOW\n\n/* Define this if your compiler provides __builtin_unreachable() */\n#undef HAVE_BUILTIN_UNREACHABLE\n\n/* Define to 1 if you have the <dirent.h> header file. */\n#define HAVE_DIRENT_H 1\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#define HAVE_DLFCN_H 1\n\n/* Define to 1 if you have the <editline/readline.h> header file. */\n#undef HAVE_EDITLINE_READLINE_H\n\n/* Define to 1 if you have the <edit/readline/readline.h> header file. */\n#undef HAVE_EDIT_READLINE_READLINE_H\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Define to 1 if you have the <limits.h> header file. */\n#define HAVE_LIMITS_H 1\n\n/* Define to 1 if you have the 'memfd_create' function. */\n#undef HAVE_MEMFD_CREATE\n\n/* Define to 1 if you have the <minix/config.h> header file. */\n#undef HAVE_MINIX_CONFIG_H\n\n/* Define to 1 if you have the 'mkostemp' function. */\n#undef HAVE_MKOSTEMP\n\n/* Define if you have POSIX threads libraries and header files. */\n#define HAVE_PTHREAD 1\n\n/* Have PTHREAD_PRIO_INHERIT. */\n#undef HAVE_PTHREAD_PRIO_INHERIT\n\n/* Define to 1 if you have the <readline.h> header file. */\n#undef HAVE_READLINE_H\n\n/* Define to 1 if you have the <readline/history.h> header file. */\n#undef HAVE_READLINE_HISTORY_H\n\n/* Define to 1 if you have the <readline/readline.h> header file. */\n#undef HAVE_READLINE_READLINE_H\n\n/* Define to 1 if you have the `realpath' function. */\n#define HAVE_REALPATH 1\n\n/* Define to 1 if you have the 'secure_getenv' function. */\n#undef HAVE_SECURE_GETENV\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#define HAVE_STDINT_H 1\n\n/* Define to 1 if you have the <stdio.h> header file. */\n#define HAVE_STDIO_H 1\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n#define HAVE_STRINGS_H 1\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#define HAVE_SYS_STAT_H 1\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have the <sys/wait.h> header file. */\n#define HAVE_SYS_WAIT_H 1\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n\n/* Define to 1 if the compiler supports simple visibility declarations. */\n#undef HAVE_VISIBILITY\n\n/* Define to 1 if you have the <wchar.h> header file. */\n#define HAVE_WCHAR_H 1\n\n/* Define to 1 if you have the <windows.h> header file. */\n#undef HAVE_WINDOWS_H\n\n/* Define to 1 if you have the <zlib.h> header file. */\n\n/* This limits the amount of memory that may be used while matching a pattern.\n   It applies to both pcre2_match() and pcre2_dfa_match(). It does not apply\n   to JIT matching. The value is in kibibytes (units of 1024 bytes). */\n#undef HEAP_LIMIT\n\n/* The value of LINK_SIZE determines the number of bytes used to store links\n   as offsets within the compiled regex. The default is 2, which allows for\n   compiled patterns up to 65535 code units long. This covers the vast\n   majority of cases. However, PCRE2 can also be compiled to use 3 or 4 bytes\n   instead. This allows for longer patterns in extreme cases. */\n#undef LINK_SIZE\n\n/* Define to the sub-directory where libtool stores uninstalled libraries. */\n#undef LT_OBJDIR\n\n/* The value of MATCH_LIMIT determines the default number of times the\n   pcre2_match() function can record a backtrack position during a single\n   matching attempt. The value is also used to limit a loop counter in\n   pcre2_dfa_match(). There is a runtime interface for setting a different\n   limit. The limit exists in order to catch runaway regular expressions that\n   take forever to determine that they do not match. The default is set very\n   large so that it does not accidentally catch legitimate cases. */\n#undef MATCH_LIMIT\n\n/* The above limit applies to all backtracks, whether or not they are nested.\n   In some environments it is desirable to limit the nesting of backtracking\n   (that is, the depth of tree that is searched) more strictly, in order to\n   restrict the maximum amount of heap memory that is used. The value of\n   MATCH_LIMIT_DEPTH provides this facility. To have any useful effect, it\n   must be less than the value of MATCH_LIMIT. The default is to use the same\n   value as MATCH_LIMIT. There is a runtime method for setting a different\n   limit. In the case of pcre2_dfa_match(), this limit controls the depth of\n   the internal nested function calls that are used for pattern recursions,\n   lookarounds, and atomic groups. */\n#undef MATCH_LIMIT_DEPTH\n\n/* This limit is parameterized just in case anybody ever wants to change it.\n   Care must be taken if it is increased, because it guards against integer\n   overflow caused by enormously large patterns. */\n#undef MAX_NAME_COUNT\n\n/* This limit is parameterized just in case anybody ever wants to change it.\n   Care must be taken if it is increased, because it guards against integer\n   overflow caused by enormously large patterns. */\n#undef MAX_NAME_SIZE\n\n/* The value of MAX_VARLOOKBEHIND specifies the default maximum length, in\n   characters, for a variable-length lookbehind assertion. */\n#undef MAX_VARLOOKBEHIND\n\n/* Defining NEVER_BACKSLASH_C locks out the use of \\C in all patterns. */\n#undef NEVER_BACKSLASH_C\n\n/* The value of NEWLINE_DEFAULT determines the default newline character\n   sequence. PCRE2 client programs can override this by selecting other values\n   at run time. The valid values are 1 (CR), 2 (LF), 3 (CRLF), 4 (ANY), 5\n   (ANYCRLF), and 6 (NUL). */\n#undef NEWLINE_DEFAULT\n\n/* Name of package */\n#define PACKAGE \"pcre2\"\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"PCRE2\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"PCRE2 10.43 VMS\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"pcre2\"\n\n/* Define to the home page for this package. */\n#define PACKAGE_URL \"\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"10.43\"\n\n/* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested\n   parentheses (of any kind) in a pattern. This limits the amount of system\n   stack that is used while compiling a pattern. */\n#undef PARENS_NEST_LIMIT\n\n/* The value of PCRE2GREP_BUFSIZE is the starting size of the buffer used by\n   pcre2grep to hold parts of the file it is searching. The buffer will be\n   expanded up to PCRE2GREP_MAX_BUFSIZE if necessary, for files containing\n   very long lines. The actual amount of memory used by pcre2grep is three\n   times this number, because it allows for the buffering of \"before\" and\n   \"after\" lines. */\n#define PCRE2GREP_BUFSIZE 20480\n\n/* The value of PCRE2GREP_MAX_BUFSIZE specifies the maximum size of the buffer\n   used by pcre2grep to hold parts of the file it is searching. The actual\n   amount of memory used by pcre2grep is three times this number, because it\n   allows for the buffering of \"before\" and \"after\" lines. */\n#define PCRE2GREP_MAX_BUFSIZE 1048576\n\n/* Define to any value to include debugging code. */\n#undef PCRE2_DEBUG\n\n/* to make a symbol visible */\n#undef PCRE2_EXPORT\n\n\n/* If you are compiling for a system other than a Unix-like system or\n   Win32, and it needs some magic to be inserted before the definition\n   of a function that is exported by the library, define this macro to\n   contain the relevant magic. If you do not define this macro, a suitable\n   __declspec value is used for Windows systems; in other environments\n   a compiler relevant \"extern\" is used with any \"visibility\" related\n   attributes from PCRE2_EXPORT included.\n   This macro apears at the start of every exported function that is part\n   of the external API. It does not appear on functions that are \"external\"\n   in the C sense, but which are internal to the library. */\n#undef PCRE2_EXP_DEFN\n\n/* Define to any value if linking statically (TODO: make nice with Libtool) */\n#undef PCRE2_STATIC\n\n/* Define to necessary symbol if this constant uses a non-standard name on\n   your system. */\n#undef PTHREAD_CREATE_JOINABLE\n\n/* Define to any non-zero number to enable support for SELinux compatible\n   executable memory allocator in JIT. Note that this will have no effect\n   unless SUPPORT_JIT is also defined. */\n#undef SLJIT_PROT_EXECUTABLE_ALLOCATOR\n\n/* Define to 1 if all of the C89 standard headers exist (not just the ones\n   required in a freestanding environment). This macro is provided for\n   backward compatibility; new code need not use it. */\n#define STDC_HEADERS 1\n\n/* Define to any value to enable differential fuzzing support. */\n#undef SUPPORT_DIFF_FUZZ\n\n/* Define to any value to enable support for Just-In-Time compiling. */\n#undef SUPPORT_JIT\n\n/* Define to any value to allow pcre2grep to be linked with libbz2, so that it\n   is able to handle .bz2 files. */\n\n/* Define to any value to allow pcre2test to be linked with libedit. */\n#undef SUPPORT_LIBEDIT\n\n/* Define to any value to allow pcre2test to be linked with libreadline. */\n#undef SUPPORT_LIBREADLINE\n\n/* Define to any value to allow pcre2grep to be linked with libz, so that it\n   is able to handle .gz files. */\n\n/* Define to any value to enable callout script support in pcre2grep. */\n#undef SUPPORT_PCRE2GREP_CALLOUT\n\n/* Define to any value to enable fork support in pcre2grep callout scripts.\n   This will have no effect unless SUPPORT_PCRE2GREP_CALLOUT is also defined.\n   */\n#undef SUPPORT_PCRE2GREP_CALLOUT_FORK\n\n/* Define to any value to enable JIT support in pcre2grep. Note that this will\n   have no effect unless SUPPORT_JIT is also defined. */\n#undef SUPPORT_PCRE2GREP_JIT\n\n/* Define to any value to enable the 16 bit PCRE2 library. */\n#undef SUPPORT_PCRE2_16\n\n/* Define to any value to enable the 32 bit PCRE2 library. */\n#undef SUPPORT_PCRE2_32\n\n/* Define to any value to enable the 8 bit PCRE2 library. */\n#define SUPPORT_PCRE2_8 1\n\n/* Define to any value to enable support for Unicode and UTF encoding. This\n   will work even in an EBCDIC environment, but it is incompatible with the\n   EBCDIC macro. That is, PCRE2 can support *either* EBCDIC code *or*\n   ASCII/Unicode, but not both at once. */\n#undef SUPPORT_UNICODE\n\n/* Define to any value for valgrind support to find invalid memory reads. */\n#undef SUPPORT_VALGRIND\n\n/* Enable extensions on AIX, Interix, z/OS.  */\n#ifndef _ALL_SOURCE\n# undef _ALL_SOURCE\n#endif\n/* Enable general extensions on macOS.  */\n#ifndef _DARWIN_C_SOURCE\n# undef _DARWIN_C_SOURCE\n#endif\n/* Enable general extensions on Solaris.  */\n#ifndef __EXTENSIONS__\n# undef __EXTENSIONS__\n#endif\n/* Enable GNU extensions on systems that have them.  */\n#ifndef _GNU_SOURCE\n# undef _GNU_SOURCE\n#endif\n/* Enable X/Open compliant socket functions that do not require linking\n   with -lxnet on HP-UX 11.11.  */\n#ifndef _HPUX_ALT_XOPEN_SOCKET_API\n# undef _HPUX_ALT_XOPEN_SOCKET_API\n#endif\n/* Identify the host operating system as Minix.\n   This macro does not affect the system headers' behavior.\n   A future release of Autoconf may stop defining this macro.  */\n#ifndef _MINIX\n# undef _MINIX\n#endif\n/* Enable general extensions on NetBSD.\n   Enable NetBSD compatibility extensions on Minix.  */\n#ifndef _NETBSD_SOURCE\n# undef _NETBSD_SOURCE\n#endif\n/* Enable OpenBSD compatibility extensions on NetBSD.\n   Oddly enough, this does nothing on OpenBSD.  */\n#ifndef _OPENBSD_SOURCE\n# undef _OPENBSD_SOURCE\n#endif\n/* Define to 1 if needed for POSIX-compatible behavior.  */\n#ifndef _POSIX_SOURCE\n# undef _POSIX_SOURCE\n#endif\n/* Define to 2 if needed for POSIX-compatible behavior.  */\n#ifndef _POSIX_1_SOURCE\n# undef _POSIX_1_SOURCE\n#endif\n/* Enable POSIX-compatible threading on Solaris.  */\n#ifndef _POSIX_PTHREAD_SEMANTICS\n# undef _POSIX_PTHREAD_SEMANTICS\n#endif\n/* Enable extensions specified by ISO/IEC TS 18661-5:2014.  */\n#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__\n# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__\n#endif\n/* Enable extensions specified by ISO/IEC TS 18661-1:2014.  */\n#ifndef __STDC_WANT_IEC_60559_BFP_EXT__\n# undef __STDC_WANT_IEC_60559_BFP_EXT__\n#endif\n/* Enable extensions specified by ISO/IEC TS 18661-2:2015.  */\n#ifndef __STDC_WANT_IEC_60559_DFP_EXT__\n# undef __STDC_WANT_IEC_60559_DFP_EXT__\n#endif\n/* Enable extensions specified by C23 Annex F.  */\n#ifndef __STDC_WANT_IEC_60559_EXT__\n# undef __STDC_WANT_IEC_60559_EXT__\n#endif\n/* Enable extensions specified by ISO/IEC TS 18661-4:2015.  */\n#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__\n# undef __STDC_WANT_IEC_60559_FUNCS_EXT__\n#endif\n/* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015.  */\n#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__\n# undef __STDC_WANT_IEC_60559_TYPES_EXT__\n#endif\n/* Enable extensions specified by ISO/IEC TR 24731-2:2010.  */\n#ifndef __STDC_WANT_LIB_EXT2__\n# undef __STDC_WANT_LIB_EXT2__\n#endif\n/* Enable extensions specified by ISO/IEC 24747:2009.  */\n#ifndef __STDC_WANT_MATH_SPEC_FUNCS__\n# undef __STDC_WANT_MATH_SPEC_FUNCS__\n#endif\n/* Enable extensions on HP NonStop.  */\n#ifndef _TANDEM_SOURCE\n# undef _TANDEM_SOURCE\n#endif\n/* Enable X/Open extensions.  Define to 500 only if necessary\n   to make mbstate_t available.  */\n#ifndef _XOPEN_SOURCE\n# undef _XOPEN_SOURCE\n#endif\n\n\n/* Version number of package */\n#undef VERSION\n\n/* Number of bits in a file offset, on hosts where this is settable. */\n#undef _FILE_OFFSET_BITS\n\n/* Define to 1 on platforms where this makes off_t a 64-bit type. */\n#undef _LARGE_FILES\n\n/* Number of bits in time_t, on hosts where this is settable. */\n#undef _TIME_BITS\n\n/* Define to 1 on platforms where this makes time_t a 64-bit type. */\n#undef __MINGW_USE_VC2005_COMPAT\n\n/* Define to empty if 'const' does not conform to ANSI C. */\n#undef const\n\n/* Define to the type of a signed integer type of width exactly 64 bits if\n   such a type exists and the standard includes do not define it. */\n#undef int64_t\n\n/* Define as 'unsigned int' if <stddef.h> doesn't define. */\n#undef size_t\n\n// VMS\n#include <stdint.h>\n#define PCRE2_EXPORT\n#define LINK_SIZE 2\n#define MAX_NAME_COUNT 10000\n#define MAX_NAME_SIZE 128\n#define MATCH_LIMIT 10000000\n#define HEAP_LIMIT 20000000\n#define NEWLINE_DEFAULT 2\n#define PARENS_NEST_LIMIT 250\n#define MATCH_LIMIT_DEPTH MATCH_LIMIT\n#define MAX_VARLOOKBEHIND 255\n\n/*\n#define _pcre2_default_compile_context_ vms_pcre2_def_cmpl_cntxt_\n#define _pcre2_default_convert_context_ vms_pcre2_def_cnvrt_cntxt_\n#define pcre2_set_compile_extra_options_8 vms_pcre2_set_cmpl_ext_opt_8\n#define pcre2_set_compile_recursion_guard_8 vms_pcre2_set_cmpl_rcrs_grd_8\n#define pcre2_set_recursion_memory_management_8 vms_pcre2_set_rcrs_mem_mng_8\n#define pcre2_match_data_create_from_pattern_8 vms_pcre2_m_d_crt_fr_patt_8\n#define pcre2_get_match_data_heapframes_size_8 vms_pcre2_get_m_d_hpfram_s_8\n#define pcre2_serialize_get_number_of_codes_8 vms_pcre2_ser_get_n_of_cod_8\n#define pcre2_substring_nametable_scan_8    vms_pcre2_substr_nmtab_scan_8\n#define pcre2_substring_length_bynumber_8   vms_pcre2_substr_len_bynum_8\n#define pcre2_substring_number_from_name_8 vms_pcre2_substr_num_f_nam_8\n*/\n\n#define HAVE_BZLIB_H 1\n#define SUPPORT_LIBBZ2 1\n\n#define HAVE_ZLIB_H 1\n#define SUPPORT_LIBZ 1\n$!\n$!\n$WRITE SYS$OUTPUT \"config.h created\"\n$!\n$!Creating Descrip.mms in each directory needed\n$!\n$!\n$COPY SYS$INPUT [.SRC]DESCRIP.MMS\n# (c) Alexey Chupahin 09-APR-2024\n# OpenVMS 7.3-2, DEC 2000 mod.300\n# OpenVMS 8.3,   Digital PW 600au\n# OpenVMS 8.4,   Compaq DS10L\n# OpenVMS 8.3,   HP rx1620\n\n\n.FIRST\n        DEF PCRE2 []\n\n\nCC=cc\nCFLAGS =  /INCLUDE=([],[-],[-.VMS],ZLIB,BZ2LIB) \\\n          /DEFINE=(HAVE_CONFIG_H,PCRE2_CODE_UNIT_WIDTH=8)\\\n          /OPTIMIZE=(INLINE=SPEED) \\\n          /DEB\n\nOBJ=\\\nPCRE2POSIX.OBJ,\\\nPCRE2_AUTO_POSSESS.OBJ,\\\nPCRE2_CHKDINT.OBJ,\\\nPCRE2_CHARTABLES.OBJ,\\\nPCRE2_COMPILE.OBJ,\\\nPCRE2_CONFIG.OBJ,\\\nPCRE2_CONTEXT.OBJ,\\\nPCRE2_CONVERT.OBJ,\\\nPCRE2_DFA_MATCH.OBJ,\\\nPCRE2_ERROR.OBJ,\\\nPCRE2_EXTUNI.OBJ,\\\nPCRE2_FIND_BRACKET.OBJ,\\\nPCRE2_JIT_COMPILE.OBJ,\\\nPCRE2_MAKETABLES.OBJ,\\\nPCRE2_MATCH.OBJ,\\\nPCRE2_MATCH_DATA.OBJ,\\\nPCRE2_NEWLINE.OBJ,\\\nPCRE2_ORD2UTF.OBJ,\\\nPCRE2_PATTERN_INFO.OBJ,\\\nPCRE2_SCRIPT_RUN.OBJ,\\\nPCRE2_SERIALIZE.OBJ,\\\nPCRE2_STRING_UTILS.OBJ,\\\nPCRE2_STUDY.OBJ,\\\nPCRE2_SUBSTITUTE.OBJ,\\\nPCRE2_SUBSTRING.OBJ,\\\nPCRE2_TABLES.OBJ,\\\nPCRE2_UCD.OBJ,\\\nPCRE2_VALID_UTF.OBJ,\\\nPCRE2_XCLASS.OBJ\n\nALL : PCRE2.H PCRE2.OLB PCRE2$SHR.EXE PCRE2DEMO.EXE PCRE2GREP.EXE\n        $!\n\nPCRE2$SHR.EXE : PCRE2.OLB\n        LINK/SHARE=PCRE2$SHR.EXE PCRE2:PCRE2.OLB/LIB,PCRE2:PCRE2$DEF.OPT/OPT\n\nPCRE2.OLB : $(OBJ)\n        LIB/CREA PCRE2.OLB $(OBJ)\n\nPCRE2DEMO.EXE : PCRE2DEMO.OBJ\n        LINK/EXE=PCRE2DEMO PCRE2DEMO,PCRE2:PCRE2.OPT/OPT\n\nPCRE2GREP.EXE : PCRE2GREP.OBJ\n        LINK/EXE=PCRE2GREP PCRE2GREP,PCRE2:PCRE2.OPT/OPT,ZLIB:ZLIB.OPT/OPT,BZ2LIB:BZIP2.OPT/OPT\n\nPCRE2.H : PCRE2.H_GENERIC\n        WRITE SYS$OUTPUT \"Patching PCRE2.H\"\n        COPY/CONCAT [-.VMS]PCRE2.H_PATCH,[]PCRE2.H_GENERIC PCRE2.H\n\nPCRE2_CHARTABLES.OBJ : PCRE2_CHARTABLES.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_CHARTABLES.C : PCRE2_CHARTABLES.C_DIST\n         COPY PCRE2_CHARTABLES.C_DIST PCRE2_CHARTABLES.C\n\nPCRE2DEMO.OBJ : PCRE2DEMO.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2GREP.OBJ : PCRE2GREP.C\n         $(CC) $(CFLAGS) /WARN=DIS=ALL $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2POSIX.OBJ : PCRE2POSIX.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2POSIX_TEST.OBJ : PCRE2POSIX_TEST.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2TEST.OBJ : PCRE2TEST.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_AUTO_POSSESS.OBJ : PCRE2_AUTO_POSSESS.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_CHKDINT.OBJ : PCRE2_CHKDINT.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_COMPILE.OBJ : PCRE2_COMPILE.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_COMPILE.OBJ : PCRE2_COMPILE_CGROUP.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_COMPILE.OBJ : PCRE2_COMPILE_CLASS.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_CONFIG.OBJ : PCRE2_CONFIG.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_CONTEXT.OBJ : PCRE2_CONTEXT.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_CONVERT.OBJ : PCRE2_CONVERT.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_DFA_MATCH.OBJ : PCRE2_DFA_MATCH.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_DFTABLES.OBJ : PCRE2_DFTABLES.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_ERROR.OBJ : PCRE2_ERROR.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_EXTUNI.OBJ : PCRE2_EXTUNI.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_FIND_BRACKET.OBJ : PCRE2_FIND_BRACKET.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_FUZZSUPPORT.OBJ : PCRE2_FUZZSUPPORT.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_JIT_COMPILE.OBJ : PCRE2_JIT_COMPILE.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_JIT_TEST.OBJ : PCRE2_JIT_TEST.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_MAKETABLES.OBJ : PCRE2_MAKETABLES.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_MATCH.OBJ : PCRE2_MATCH.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_MATCH_DATA.OBJ : PCRE2_MATCH_DATA.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_MATCH_NEXT.OBJ : PCRE2_MATCH_NEXT.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_NEWLINE.OBJ : PCRE2_NEWLINE.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_ORD2UTF.OBJ : PCRE2_ORD2UTF.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_PATTERN_INFO.OBJ : PCRE2_PATTERN_INFO.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_SCRIPT_RUN.OBJ : PCRE2_SCRIPT_RUN.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_SERIALIZE.OBJ : PCRE2_SERIALIZE.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_STRING_UTILS.OBJ : PCRE2_STRING_UTILS.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_STUDY.OBJ : PCRE2_STUDY.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_SUBSTITUTE.OBJ : PCRE2_SUBSTITUTE.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_SUBSTRING.OBJ : PCRE2_SUBSTRING.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_TABLES.OBJ : PCRE2_TABLES.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_UCD.OBJ : PCRE2_UCD.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_VALID_UTF.OBJ : PCRE2_VALID_UTF.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\nPCRE2_XCLASS.OBJ : PCRE2_XCLASS.C\n         $(CC) $(CFLAGS) $(MMS$SOURCE) /OBJ=$(MMS$TARGET)\n\n$!\n$!\n$WRITE SYS$OUTPUT \"DESCRIP.MMS's have been created\"\n$WRITE SYS$OUTPUT \" \"\n$WRITE SYS$OUTPUT \" \"\n$WRITE SYS$OUTPUT \"Now you can type @BUILD \"\n$!\n$EXIT:\n$DEFINE SYS$ERROR _NLA0:\n$DEFINE SYS$OUTPUT _NLA0:\n$DEL TEST.C;*\n$DEL TEST.OBJ;*\n$DEL TEST.EXE;*\n$DEL TEST.OPT;*\n$DEAS SYS$ERROR\n$DEAS SYS$OUTPUT\n\n"
  },
  {
    "path": "vms/openvms_readme.txt",
    "content": "This is directory for OpenVMS support,\nprovided shared and static library,\npcre2grep  utility also.\n\nRequires:\nbzip2 library : http://vaxvms.org/clamav/\nzlib library  : http://vaxvms.org/libsdl/required.html\n\n\nTo build the library please:\n\n@[.VMS]CONFIGURE.COM\n@BUILD\n\nAfter build, PCRE2$STARTUP.COM has been created\nit should be started before use (good place from LOGIN.COM)\n\nFeel free to contact:\nalexey@vaxman.de\nAlexey Chupahin\n"
  },
  {
    "path": "vms/pcre2.h_patch",
    "content": "#define _pcre2_default_compile_context_ vms_pcre2_def_cmpl_cntxt_\n#define _pcre2_default_convert_context_ vms_pcre2_def_cnvrt_cntxt_\n#define pcre2_set_compile_extra_options_8 vms_pcre2_set_cmpl_ext_opt_8\n#define pcre2_set_compile_recursion_guard_8 vms_pcre2_set_cmpl_rcrs_grd_8\n#define pcre2_set_recursion_memory_management_8 vms_pcre2_set_rcrs_mem_mng_8\n#define pcre2_match_data_create_from_pattern_8 vms_pcre2_m_d_crt_fr_patt_8\n#define pcre2_get_match_data_heapframes_size_8 vms_pcre2_get_m_d_hpfram_s_8\n#define pcre2_serialize_get_number_of_codes_8 vms_pcre2_ser_get_n_of_cod_8\n#define pcre2_substring_nametable_scan_8    vms_pcre2_substr_nmtab_scan_8\n#define pcre2_substring_length_bynumber_8   vms_pcre2_substr_len_bynum_8\n#define pcre2_substring_number_from_name_8 vms_pcre2_substr_num_f_nam_8\n#define pcre2_set_max_pattern_compiled_length vms_pcre2_set_max_pat_cmpl_len\n"
  },
  {
    "path": "vms/stdint.h",
    "content": "#ifndef MY_VMS_STDINT\n#define MY_VMS_STDINT\n#include <inttypes.h>\n#include <limits.h>\n#include <stdbool.h>\n#define SIZE_MAX UINT_MAX\n#define UINT32_MAX  4294967295u\n#define UINT16_MAX             (65535)\n#endif\n"
  }
]